diff --git a/COPYRIGHT b/COPYRIGHT index d13e662330d..24e9a70fe72 100644 --- a/COPYRIGHT +++ b/COPYRIGHT @@ -4,7 +4,7 @@ The compilation of software known as FreeBSD is distributed under the following terms: -Copyright (c) 1992-2009 The FreeBSD Project. All rights reserved. +Copyright (c) 1992-2010 The FreeBSD Project. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions diff --git a/MAINTAINERS b/MAINTAINERS index e84a3b4ff46..2a6bfe8255a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -48,7 +48,6 @@ iostat(8) ken Pre-commit review requested. cd(4) ken Pre-commit review requested. pass(4) ken Pre-commit review requested. ch(4) ken Pre-commit review requested. -isp(4) mjacob Pre-commit review requested. em(4) jfv Pre-commit review requested. tdfx(4) cokane Just keep me informed of changes, try not to break it. sendmail gshapiro Pre-commit review requested. @@ -124,6 +123,8 @@ usr.bin/bluetooth emax Pre-commit review preferred. usr.sbin/bluetooth emax Pre-commit review preferred. gnu/usr.bin/send-pr bugmaster Pre-commit review requested. ncurses rafan Heads-up appreciated, try not to break it. +*env(3) secteam Due to the problematic security history of this + code, please have patches reviewed by secteam. Following are the entries from the Makefiles, and a few other sources. Please remove stale entries from both their origin, and this file. diff --git a/Makefile.inc1 b/Makefile.inc1 index 6a59f02f51a..a3499f35428 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -5,10 +5,11 @@ # -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir # -DNO_CLEAN do not clean at all # -DNO_SHARE do not go into share subdir -# -DKERNFAST define NO_KERNELCONFIG, NO_KERNELCLEAN and NO_KERNELDEPEND +# -DKERNFAST define NO_KERNEL{CONFIG,CLEAN,DEPEND,OBJ} # -DNO_KERNELCONFIG do not run config in ${MAKE} buildkernel # -DNO_KERNELCLEAN do not run ${MAKE} clean in ${MAKE} buildkernel # -DNO_KERNELDEPEND do not run ${MAKE} depend in ${MAKE} buildkernel +# -DNO_KERNELOBJ do not run ${MAKE} obj in ${MAKE} buildkernel # -DNO_PORTSUPDATE do not update ports in ${MAKE} update # -DNO_DOCUPDATE do not update doc in ${MAKE} update # -DNO_CTF do not run the DTrace CTF conversion tools on built objects @@ -694,6 +695,7 @@ distrib-dirs distribution: NO_KERNELCLEAN= t NO_KERNELCONFIG= t NO_KERNELDEPEND= t +NO_KERNELOBJ= t # Shortcut for KERNCONF=Blah -DKERNFAST is now KERNFAST=Blah .if !defined(KERNCONF) && ${KERNFAST} != "1" KERNCONF=${KERNFAST} @@ -763,11 +765,13 @@ buildkernel: @echo "--------------------------------------------------------------" cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR} .endif +.if !defined(NO_KERNELOBJ) @echo @echo "--------------------------------------------------------------" @echo ">>> stage 2.2: rebuilding the object tree" @echo "--------------------------------------------------------------" cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj +.endif @echo @echo "--------------------------------------------------------------" @echo ">>> stage 2.3: build tools" @@ -936,6 +940,11 @@ _mklocale= usr.bin/mklocale _sed= usr.bin/sed .endif +.if ${BOOTSTRAPPING} < 900006 +_lex= usr.bin/lex +_yacc= usr.bin/yacc +.endif + .if ${BOOTSTRAPPING} < 700018 _gensnmptree= usr.sbin/bsnmpd/gensnmptree .endif @@ -962,6 +971,8 @@ bootstrap-tools: ${_mklocale} \ usr.bin/rpcgen \ ${_sed} \ + ${_lex} \ + ${_yacc} \ usr.bin/xinstall \ ${_gensnmptree} \ usr.sbin/config \ @@ -1103,8 +1114,8 @@ _prebuild_libs= ${_kerberos5_lib_libasn1} ${_kerberos5_lib_libkrb5} \ lib/libkiconv lib/libkvm lib/libmd \ lib/ncurses/ncurses lib/ncurses/ncursesw \ lib/libopie lib/libpam ${_lib_libthr} \ - lib/libradius lib/libsbuf lib/libtacplus lib/libutil \ - ${_lib_libypclnt} lib/libz lib/msun \ + lib/libradius lib/libsbuf lib/libtacplus lib/libulog \ + lib/libutil ${_lib_libypclnt} lib/libz lib/msun \ ${_secure_lib_libcrypto} ${_secure_lib_libssh} \ ${_secure_lib_libssl} lib/libdwarf lib/libproc diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc index cc4f5f40c9d..784c8de82d2 100644 --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -14,6 +14,42 @@ # The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last. # +# 20100105: new userland semaphore implementation +OLD_FILES+=usr/include/sys/semaphore.h +# 20100103: ntptrace(8) removed +OLD_FILES+=usr/sbin/ntptrace +OLD_FILES+=usr/share/man/man8/ntptrace.8.gz +# 20091229: remove no longer relevant examples +OLD_FILES+=usr/share/examples/pppd/auth-down.sample +OLD_FILES+=usr/share/examples/pppd/auth-up.sample +OLD_FILES+=usr/share/examples/pppd/chap-secrets.sample +OLD_FILES+=usr/share/examples/pppd/chat.sh.sample +OLD_FILES+=usr/share/examples/pppd/ip-down.sample +OLD_FILES+=usr/share/examples/pppd/ip-up.sample +OLD_FILES+=usr/share/examples/pppd/options.sample +OLD_FILES+=usr/share/examples/pppd/pap-secrets.sample +OLD_FILES+=usr/share/examples/pppd/ppp.deny.sample +OLD_FILES+=usr/share/examples/pppd/ppp.shells.sample +OLD_DIRS+=usr/share/examples/pppd +OLD_FILES+=usr/share/examples/slattach/unit-command.sh +OLD_DIRS+=usr/share/examples/slattach +OLD_FILES+=usr/share/examples/sliplogin/slip.hosts +OLD_FILES+=usr/share/examples/sliplogin/slip.login +OLD_FILES+=usr/share/examples/sliplogin/slip.logout +OLD_FILES+=usr/share/examples/sliplogin/slip.slparms +OLD_DIRS+=usr/share/examples/sliplogin +OLD_FILES+=usr/share/examples/startslip/sldown.sh +OLD_FILES+=usr/share/examples/startslip/slip.sh +OLD_FILES+=usr/share/examples/startslip/slup.sh +OLD_DIRS+=usr/share/examples/startslip +# 20091202: unify rc.firewall and rc.firewall6. +OLD_FILES+=etc/rc.d/ip6fw +OLD_FILES+=etc/rc.firewall6 +OLD_FILES+=usr/share/examples/etc/rc.firewall6 +# 20091117: removal of rc.early(8) link +OLD_FILES+=usr/share/man/man8/rc.early.8.gz +# 20091117: usr/share/zoneinfo/GMT link removed +OLD_FILES+=usr/share/zoneinfo/GMT # 20091027: pselect.3 implemented as syscall OLD_FILES+=usr/share/man/man3/pselect.3.gz # 20091005: fusword.9 and susword.9 removed diff --git a/UPDATING b/UPDATING index 170248c809e..f730b25e2ef 100644 --- a/UPDATING +++ b/UPDATING @@ -22,11 +22,43 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9.x IS SLOW: machines to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20091202: + The rc.firewall and rc.firewall6 were unified, and + rc.firewall6 and rc.d/ip6fw were removed. + According to the removal of rc.d/ip6fw, ipv6_firewall_* rc + variables are obsoleted. Instead, the following new rc + variables are added to rc.d/ipfw: + + firewall_client_net_ipv6, firewall_simple_iif_ipv6, + firewall_simple_inet_ipv6, firewall_simple_oif_ipv6, + firewall_simple_onet_ipv6, firewall_trusted_ipv6 + + The meanings correspond to the relevant IPv4 variables. + +20091113: + The default terminal emulation for syscons(4) has been changed + from cons25 to xterm on all platforms except pc98. This means + that the /etc/ttys file needs to be updated to ensure correct + operation of applications on the console. + + The terminal emulation style can be toggled per window by using + vidcontrol(1)'s -T flag. The TEKEN_CONS25 kernel configuration + options can be used to change the compile-time default back to + cons25. + + To prevent graphical artifacts, make sure the TERM environment + variable is set to match the terminal emulation that is being + performed by syscons(4). + 20091109: The layout of the structure ieee80211req_scan_result has changed. Applications that require wireless scan results (e.g. ifconfig(8)) from net80211 need to be recompiled. + Applications such as wpa_supplicant(8) may require a full world + build without using NO_CLEAN in order to get synchronized with the + new structure. + 20091025: The iwn(4) driver has been updated to support the 5000 and 5150 series. There's one kernel module for each firmware. Adding "device iwnfw" @@ -129,7 +161,7 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9.x IS SLOW: 20090712: Padding has been added to struct tcpcb, sackhint and tcpstat in to facilitate future MFCs and bug fixes whilst - maintainig the ABI. However, this change breaks the ABI, so bump + maintaining the ABI. However, this change breaks the ABI, so bump __FreeBSD_version to 800102. User space tools that rely on the size of any of these structs (e.g. sockstat) need to be recompiled. @@ -863,7 +895,7 @@ COMMON ITEMS: ------------- Avoid using make -j when upgrading. While generally safe, there are sometimes problems using -j to upgrade. If your upgrade fails with - -j, please try again wtihout -j. From time to time in the past there + -j, please try again without -j. From time to time in the past there have been problems using -j with buildworld and/or installworld. This is especially true when upgrading between "distant" versions (eg one that cross a major release boundary or several minor releases, or when diff --git a/bin/Makefile b/bin/Makefile index 7491be9fc46..3114e670097 100644 --- a/bin/Makefile +++ b/bin/Makefile @@ -27,6 +27,7 @@ SUBDIR= cat \ pax \ pkill \ ps \ + pwait \ pwd \ ${_rcp} \ realpath \ diff --git a/bin/date/Makefile b/bin/date/Makefile index 8a1dc857933..b466e1d3b3a 100644 --- a/bin/date/Makefile +++ b/bin/date/Makefile @@ -3,7 +3,7 @@ PROG= date SRCS= date.c netdate.c vary.c -DPADD= ${LIBUTIL} -LDADD= -lutil +DPADD= ${LIBULOG} +LDADD= -lulog .include diff --git a/bin/date/date.c b/bin/date/date.c index 578229eb430..c980b99d3d2 100644 --- a/bin/date/date.c +++ b/bin/date/date.c @@ -48,11 +48,12 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include #include +#define _ULOG_POSIX_NAMES +#include #include #include "extern.h" @@ -181,6 +182,7 @@ main(int argc, char *argv[]) static void setthetime(const char *fmt, const char *p, int jflag, int nflag) { + struct utmpx utx; struct tm *lt; struct timeval tv; const char *dot, *t; @@ -271,12 +273,16 @@ setthetime(const char *fmt, const char *p, int jflag, int nflag) if (!jflag) { /* set the time */ if (nflag || netsettime(tval)) { - logwtmp("|", "date", ""); + utx.ut_type = OLD_TIME; + gettimeofday(&utx.ut_tv, NULL); + pututxline(&utx); tv.tv_sec = tval; tv.tv_usec = 0; if (settimeofday(&tv, (struct timezone *)NULL)) err(1, "settimeofday (timeval)"); - logwtmp("{", "date", ""); + utx.ut_type = NEW_TIME; + gettimeofday(&utx.ut_tv, NULL); + pututxline(&utx); } if ((p = getlogin()) == NULL) diff --git a/bin/kenv/kenv.c b/bin/kenv/kenv.c index dc86ba8200a..6c59b2cdce9 100644 --- a/bin/kenv/kenv.c +++ b/bin/kenv/kenv.c @@ -118,7 +118,7 @@ main(int argc, char **argv) } static int -kdumpenv() +kdumpenv(void) { char *buf, *cp; int buflen, envlen; diff --git a/bin/pax/ftree.c b/bin/pax/ftree.c index f402c568ddf..1fb06ac74c3 100644 --- a/bin/pax/ftree.c +++ b/bin/pax/ftree.c @@ -219,7 +219,7 @@ ftree_sel(ARCHD *arcn) */ void -ftree_notsel() +ftree_notsel(void) { if (ftent != NULL) (void)fts_set(ftsp, ftent, FTS_SKIP); diff --git a/bin/pax/sel_subs.c b/bin/pax/sel_subs.c index 87fba2ff008..bd5c560afc5 100644 --- a/bin/pax/sel_subs.c +++ b/bin/pax/sel_subs.c @@ -396,6 +396,7 @@ trng_add(char *str) default: paxwarn(1, "Bad option %c with time range %s", *flgpt, str); + free(pt); goto out; } ++flgpt; diff --git a/bin/pkill/pkill.c b/bin/pkill/pkill.c index b4b96b880f4..9105c8cb839 100644 --- a/bin/pkill/pkill.c +++ b/bin/pkill/pkill.c @@ -113,14 +113,14 @@ static int cflags = REG_EXTENDED; static kvm_t *kd; static pid_t mypid; -static struct listhead euidlist = SLIST_HEAD_INITIALIZER(list); -static struct listhead ruidlist = SLIST_HEAD_INITIALIZER(list); -static struct listhead rgidlist = SLIST_HEAD_INITIALIZER(list); -static struct listhead pgrplist = SLIST_HEAD_INITIALIZER(list); -static struct listhead ppidlist = SLIST_HEAD_INITIALIZER(list); -static struct listhead tdevlist = SLIST_HEAD_INITIALIZER(list); -static struct listhead sidlist = SLIST_HEAD_INITIALIZER(list); -static struct listhead jidlist = SLIST_HEAD_INITIALIZER(list); +static struct listhead euidlist = SLIST_HEAD_INITIALIZER(euidlist); +static struct listhead ruidlist = SLIST_HEAD_INITIALIZER(ruidlist); +static struct listhead rgidlist = SLIST_HEAD_INITIALIZER(rgidlist); +static struct listhead pgrplist = SLIST_HEAD_INITIALIZER(pgrplist); +static struct listhead ppidlist = SLIST_HEAD_INITIALIZER(ppidlist); +static struct listhead tdevlist = SLIST_HEAD_INITIALIZER(tdevlist); +static struct listhead sidlist = SLIST_HEAD_INITIALIZER(sidlist); +static struct listhead jidlist = SLIST_HEAD_INITIALIZER(jidlist); static void usage(void) __attribute__((__noreturn__)); static int killact(const struct kinfo_proc *); @@ -671,8 +671,19 @@ makelist(struct listhead *head, enum listtype type, char *src) li->li_number = -1; /* any jail */ break; case LT_TTY: - usage(); - /* NOTREACHED */ + if (li->li_number < 0) + errx(STATUS_BADUSAGE, + "Negative /dev/pts tty `%s'", sp); + snprintf(buf, sizeof(buf), _PATH_DEV "pts/%s", + sp); + if (stat(buf, &st) != -1) + goto foundtty; + if (errno == ENOENT) + errx(STATUS_BADUSAGE, "No such tty: `" + _PATH_DEV "pts/%s'", sp); + err(STATUS_ERROR, "Cannot access `" + _PATH_DEV "pts/%s'", sp); + break; default: break; } diff --git a/bin/ps/keyword.c b/bin/ps/keyword.c index 609c52e363b..4524d995666 100644 --- a/bin/ps/keyword.c +++ b/bin/ps/keyword.c @@ -330,6 +330,7 @@ findvar(char *p, int user, char **header) errx(1, "malloc failed"); snprintf(realfmt, rflen, "%s=%s", v->alias, hp); parsefmt(realfmt, user); + free(realfmt); } return ((VAR *)NULL); } diff --git a/bin/pwait/Makefile b/bin/pwait/Makefile new file mode 100644 index 00000000000..cdf322e27a8 --- /dev/null +++ b/bin/pwait/Makefile @@ -0,0 +1,5 @@ +# $FreeBSD$ + +PROG= pwait + +.include diff --git a/bin/pwait/pwait.1 b/bin/pwait/pwait.1 new file mode 100644 index 00000000000..132d83c98ce --- /dev/null +++ b/bin/pwait/pwait.1 @@ -0,0 +1,78 @@ +.\" +.\" Copyright (c) 2004-2009, Jilles Tjoelker +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +.\" CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED +.\" WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +.\" PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +.\" COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +.\" PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +.\" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +.\" NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +.\" USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY +.\" OF SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd November 1, 2009 +.Os +.Dt PWAIT 1 +.Sh NAME +.Nm pwait +.Nd wait for processes to terminate +.Sh SYNOPSIS +.Nm +.Op Fl v +.Ar pid +\&... +.Sh DESCRIPTION +The +.Nm +utility will wait until each of the given processes has terminated. +.Pp +The following option is available: +.Bl -tag -width indent +.It Fl v +Print the exit status when each process terminates. +.El +.Sh DIAGNOSTICS +.Pp +The +.Nm +utility returns 0 on success, and >0 if an error occurs. +.Pp +Invalid pids elicit a warning message but are otherwise ignored. +.Sh SEE ALSO +.Xr kill 1 , +.Xr pkill 1 , +.Xr ps 1 , +.Xr wait 1 , +.Xr kqueue 2 +.Sh NOTES +.Nm +is not a substitute for the +.Xr wait 1 +builtin +as it will not clean up any zombies or state in the parent process. +.Sh HISTORY +A +.Nm +command first appeared in SunOS 5.8. diff --git a/bin/pwait/pwait.c b/bin/pwait/pwait.c new file mode 100644 index 00000000000..26cf1bd8970 --- /dev/null +++ b/bin/pwait/pwait.c @@ -0,0 +1,145 @@ +/*- + * Copyright (c) 2004-2009, Jilles Tjoelker + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static void +usage(void) +{ + + fprintf(stderr, "usage: pwait [-v] pid ...\n"); + exit(EX_USAGE); +} + +/* + * pwait - wait for processes to terminate + */ +int +main(int argc, char *argv[]) +{ + int kq; + struct kevent *e; + int verbose = 0; + int opt, nleft, n, i, duplicate, status; + long pid; + char *s, *end; + + while ((opt = getopt(argc, argv, "v")) != -1) { + switch (opt) { + case 'v': + verbose = 1; + break; + default: + usage(); + /* NOTREACHED */ + } + } + + argc -= optind; + argv += optind; + + if (argc == 0) + usage(); + + kq = kqueue(); + if (kq == -1) + err(1, "kqueue"); + + e = malloc(argc * sizeof(struct kevent)); + if (e == NULL) + err(1, "malloc"); + nleft = 0; + for (n = 0; n < argc; n++) { + s = argv[n]; + if (!strncmp(s, "/proc/", 6)) /* Undocumented Solaris compat */ + s += 6; + errno = 0; + pid = strtol(s, &end, 10); + if (pid < 0 || *end != '\0' || errno != 0) { + warnx("%s: bad process id", s); + continue; + } + duplicate = 0; + for (i = 0; i < nleft; i++) + if (e[i].ident == (uintptr_t)pid) + duplicate = 1; + if (!duplicate) { + EV_SET(e + nleft, pid, EVFILT_PROC, EV_ADD, NOTE_EXIT, + 0, NULL); + if (kevent(kq, e + nleft, 1, NULL, 0, NULL) == -1) + warn("%ld", pid); + else + nleft++; + } + } + + while (nleft > 0) { + n = kevent(kq, NULL, 0, e, nleft, NULL); + if (n == -1) + err(1, "kevent"); + if (verbose) + for (i = 0; i < n; i++) { + status = e[i].data; + if (WIFEXITED(status)) + printf("%ld: exited with status %d.\n", + (long)e[i].ident, + WEXITSTATUS(status)); + else if (WIFSIGNALED(status)) + printf("%ld: killed by signal %d.\n", + (long)e[i].ident, + WTERMSIG(status)); + else + printf("%ld: terminated.\n", + (long)e[i].ident); + } + nleft -= n; + } + + return 0; +} diff --git a/bin/setfacl/merge.c b/bin/setfacl/merge.c index 495e66c45a2..0a42eecb74c 100644 --- a/bin/setfacl/merge.c +++ b/bin/setfacl/merge.c @@ -100,11 +100,10 @@ merge_acl(acl_t acl, acl_t *prev_acl, const char *filename) acl_get_brand_np(acl, &acl_brand); acl_get_brand_np(*prev_acl, &prev_acl_brand); - if (acl_brand != prev_acl_brand) { + if (branding_mismatch(acl_brand, prev_acl_brand)) { warnx("%s: branding mismatch; existing ACL is %s, " "entry to be merged is %s", filename, - prev_acl_brand == ACL_BRAND_NFS4 ? "NFSv4" : "POSIX.1e", - acl_brand == ACL_BRAND_NFS4 ? "NFSv4" : "POSIX.1e"); + brand_name(prev_acl_brand), brand_name(acl_brand)); return (-1); } @@ -252,9 +251,10 @@ add_acl(acl_t acl, uint entry_number, acl_t *prev_acl, const char *filename) return (-1); } - if (acl_brand != ACL_BRAND_NFS4) { + if (branding_mismatch(acl_brand, ACL_BRAND_NFS4)) { warnx("%s: branding mismatch; existing ACL is NFSv4, " - "entry to be added is POSIX.1e", filename); + "entry to be added is %s", filename, + brand_name(acl_brand)); return (-1); } diff --git a/bin/setfacl/remove.c b/bin/setfacl/remove.c index 6cd82b36d9e..e6feef9bead 100644 --- a/bin/setfacl/remove.c +++ b/bin/setfacl/remove.c @@ -53,11 +53,10 @@ remove_acl(acl_t acl, acl_t *prev_acl, const char *filename) acl_get_brand_np(acl, &acl_brand); acl_get_brand_np(*prev_acl, &prev_acl_brand); - if (acl_brand != prev_acl_brand) { + if (branding_mismatch(acl_brand, prev_acl_brand)) { warnx("%s: branding mismatch; existing ACL is %s, " "entry to be removed is %s", filename, - prev_acl_brand == ACL_BRAND_NFS4 ? "NFSv4" : "POSIX.1e", - acl_brand == ACL_BRAND_NFS4 ? "NFSv4" : "POSIX.1e"); + brand_name(prev_acl_brand), brand_name(acl_brand)); return (-1); } diff --git a/bin/setfacl/setfacl.h b/bin/setfacl/setfacl.h index 7c11b3a14f7..290ac5b4d1d 100644 --- a/bin/setfacl/setfacl.h +++ b/bin/setfacl/setfacl.h @@ -71,6 +71,8 @@ void remove_ext(acl_t *prev_acl, const char *filename); int set_acl_mask(acl_t *prev_acl, const char *filename); /* util.c */ void *zmalloc(size_t size); +const char *brand_name(int brand); +int branding_mismatch(int brand1, int brand2); uint have_mask; uint need_mask; diff --git a/bin/setfacl/util.c b/bin/setfacl/util.c index 46b9abb6ff6..a7fb6a61bc5 100644 --- a/bin/setfacl/util.c +++ b/bin/setfacl/util.c @@ -43,3 +43,26 @@ zmalloc(size_t size) err(1, "calloc() failed"); return (ptr); } + +const char * +brand_name(int brand) +{ + switch (brand) { + case ACL_BRAND_NFS4: + return "NFSv4"; + case ACL_BRAND_POSIX: + return "POSIX.1e"; + default: + return "unknown"; + } +} + +int +branding_mismatch(int brand1, int brand2) +{ + if (brand1 == ACL_BRAND_UNKNOWN || brand2 == ACL_BRAND_UNKNOWN) + return (0); + if (brand1 != brand2) + return (1); + return (0); +} diff --git a/bin/sh/alias.c b/bin/sh/alias.c index 2edfe95eb45..00b7fa7e53e 100644 --- a/bin/sh/alias.c +++ b/bin/sh/alias.c @@ -52,13 +52,13 @@ __FBSDID("$FreeBSD$"); STATIC struct alias *atab[ATABSIZE]; STATIC int aliases; -STATIC void setalias(char *, char *); +STATIC void setalias(const char *, const char *); STATIC int unalias(const char *); STATIC struct alias **hashalias(const char *); STATIC void -setalias(char *name, char *val) +setalias(const char *name, const char *val) { struct alias *ap, **app; @@ -176,7 +176,7 @@ rmaliases(void) } struct alias * -lookupalias(char *name, int check) +lookupalias(const char *name, int check) { struct alias *ap = *hashalias(name); diff --git a/bin/sh/alias.h b/bin/sh/alias.h index a6bd23d79ca..d8f03081544 100644 --- a/bin/sh/alias.h +++ b/bin/sh/alias.h @@ -42,7 +42,7 @@ struct alias { int flag; }; -struct alias *lookupalias(char *, int); +struct alias *lookupalias(const char *, int); int aliascmd(int, char **); int unaliascmd(int, char **); void rmaliases(void); diff --git a/bin/sh/arith.h b/bin/sh/arith.h index 41bc76fa2c7..6a143a4c2eb 100644 --- a/bin/sh/arith.h +++ b/bin/sh/arith.h @@ -34,8 +34,8 @@ #define DIGITS(var) (3 + (2 + CHAR_BIT * sizeof((var))) / 3) -extern char *arith_buf, *arith_startbuf; +extern const char *arith_buf, *arith_startbuf; -arith_t arith(char *); +arith_t arith(const char *); void arith_lex_reset(void); int expcmd(int, char **); diff --git a/bin/sh/arith.y b/bin/sh/arith.y index 542fc445a8a..5db16336b22 100644 --- a/bin/sh/arith.y +++ b/bin/sh/arith.y @@ -85,9 +85,9 @@ expr: ARITH_LPAREN expr ARITH_RPAREN { $$ = $2; } | expr ARITH_OR expr - { $$ = $1 ? $1 : $3 ? $3 : 0; } | + { $$ = $1 || $3; } | expr ARITH_AND expr - { $$ = $1 ? ( $3 ? $3 : 0 ) : 0; } | + { $$ = $1 && $3; } | expr ARITH_BOR expr { $$ = $1 | $3; } | expr ARITH_BXOR expr @@ -265,7 +265,7 @@ expr: #define YYPARSE_PARAM_TYPE arith_t * #define YYPARSE_PARAM result -char *arith_buf, *arith_startbuf; +const char *arith_buf, *arith_startbuf; int yylex(void); int yyparse(YYPARSE_PARAM_TYPE); @@ -284,7 +284,7 @@ arith_assign(char *name, arith_t value) } arith_t -arith(char *s) +arith(const char *s) { arith_t result; @@ -299,7 +299,7 @@ arith(char *s) } static void -yyerror(char *s) +yyerror(const char *s) { yyerrok; @@ -314,7 +314,7 @@ yyerror(char *s) int expcmd(int argc, char **argv) { - char *p; + const char *p; char *concat; char **ap; arith_t i; @@ -354,7 +354,7 @@ main(int argc, char *argv[]) printf("%d\n", exp(argv[1])); } -error(char *s) +error(const char *s) { fprintf(stderr, "exp: %s\n", s); exit(1); diff --git a/bin/sh/cd.c b/bin/sh/cd.c index 4abe91eb0b1..40801ba2c97 100644 --- a/bin/sh/cd.c +++ b/bin/sh/cd.c @@ -70,7 +70,7 @@ STATIC int docd(char *, int, int); STATIC char *getcomponent(void); STATIC char *findcwd(char *); STATIC void updatepwd(char *); -STATIC char *getpwd2(char *, size_t); +STATIC char *getpwd2(void); STATIC char *curdir = NULL; /* current working directory */ STATIC char *prevdir; /* previous working directory */ @@ -79,8 +79,8 @@ STATIC char *cdcomppath; int cdcmd(int argc, char **argv) { - char *dest; - char *path; + const char *dest; + const char *path; char *p; struct stat statb; int ch, phys, print = 0; @@ -263,10 +263,8 @@ findcwd(char *dir) * any more because we traversed a symbolic link or something * we couldn't stat(). */ - if (dir == NULL || curdir == NULL) { - p = stalloc(PATH_MAX); - return getpwd2(p, PATH_MAX); - } + if (dir == NULL || curdir == NULL) + return getpwd2(); cdcomppath = stalloc(strlen(dir) + 1); scopy(dir, cdcomppath); STARTSTACKSTR(new); @@ -313,7 +311,7 @@ updatepwd(char *dir) int pwdcmd(int argc, char **argv) { - char buf[PATH_MAX]; + char *p; int ch, phys; optreset = 1; optind = 1; opterr = 0; /* initialize getopt */ @@ -341,9 +339,9 @@ pwdcmd(int argc, char **argv) out1str(curdir); out1c('\n'); } else { - if (getcwd(buf, sizeof(buf)) == NULL) + if ((p = getpwd2()) == NULL) error(".: %s", strerror(errno)); - out1str(buf); + out1str(p); out1c('\n'); } @@ -356,36 +354,45 @@ pwdcmd(int argc, char **argv) char * getpwd(void) { - char buf[PATH_MAX]; char *p; if (curdir) return curdir; - p = getpwd2(buf, sizeof(buf)); + p = getpwd2(); if (p != NULL) curdir = savestr(p); return curdir; } +#define MAXPWD 256 + /* * Return the current directory. */ STATIC char * -getpwd2(char *buf, size_t size) +getpwd2(void) { - if (getcwd(buf, size) == NULL) { - char *pwd = getenv("PWD"); - struct stat stdot, stpwd; + struct stat stdot, stpwd; + char *pwd; + int i; - if (pwd && *pwd == '/' && stat(".", &stdot) != -1 && - stat(pwd, &stpwd) != -1 && - stdot.st_dev == stpwd.st_dev && - stdot.st_ino == stpwd.st_ino) { + for (i = MAXPWD;; i *= 2) { + pwd = stalloc(i); + if (getcwd(pwd, i) != NULL) return pwd; - } - return NULL; + stunalloc(pwd); + if (errno != ERANGE) + break; } - return buf; + + pwd = getenv("PWD"); + if (pwd && *pwd == '/' && stat(".", &stdot) != -1 && + stat(pwd, &stpwd) != -1 && + stdot.st_dev == stpwd.st_dev && + stdot.st_ino == stpwd.st_ino) { + return pwd; + } + return NULL; } diff --git a/bin/sh/error.c b/bin/sh/error.c index 0c981a3eff9..1f981f061ae 100644 --- a/bin/sh/error.c +++ b/bin/sh/error.c @@ -67,17 +67,21 @@ volatile sig_atomic_t intpending; char *commandname; -static void exverror(int, const char *, va_list) __printf0like(2, 0); +static void exverror(int, const char *, va_list) __printf0like(2, 0) __dead2; /* * Called to raise an exception. Since C doesn't include exceptions, we * just do a longjmp to the exception handler. The type of exception is * stored in the global variable "exception". + * + * Interrupts are disabled; they should be reenabled when the exception is + * caught. */ void exraise(int e) { + INTOFF; if (handler == NULL) abort(); exception = e; @@ -138,8 +142,15 @@ onint(void) static void exverror(int cond, const char *msg, va_list ap) { - CLEAR_PENDING_INT; - INTOFF; + /* + * An interrupt trumps an error. Certain places catch error + * exceptions or transform them to a plain nonzero exit code + * in child processes, and if an error exception can be handled, + * an interrupt can be handled as well. + * + * exraise() will disable interrupts for the exception handler. + */ + FORCEINTON; #ifdef DEBUG if (msg) @@ -149,8 +160,8 @@ exverror(int cond, const char *msg, va_list ap) #endif if (msg) { if (commandname) - outfmt(&errout, "%s: ", commandname); - doformat(&errout, msg, ap); + outfmt(out2, "%s: ", commandname); + doformat(out2, msg, ap); out2c('\n'); } flushall(); diff --git a/bin/sh/error.h b/bin/sh/error.h index 4611821644d..8b64fe6813d 100644 --- a/bin/sh/error.h +++ b/bin/sh/error.h @@ -72,14 +72,16 @@ extern volatile sig_atomic_t intpending; #define INTOFF suppressint++ #define INTON { if (--suppressint == 0 && intpending) onint(); } +#define is_int_on() suppressint +#define SETINTON(s) suppressint = (s) #define FORCEINTON {suppressint = 0; if (intpending) onint();} #define CLEAR_PENDING_INT intpending = 0 #define int_pending() intpending -void exraise(int); +void exraise(int) __dead2; void onint(void); -void error(const char *, ...) __printf0like(1, 2); -void exerror(int, const char *, ...) __printf0like(2, 3); +void error(const char *, ...) __printf0like(1, 2) __dead2; +void exerror(int, const char *, ...) __printf0like(2, 3) __dead2; /* diff --git a/bin/sh/eval.c b/bin/sh/eval.c index 5ba244d76e4..30e05b8b643 100644 --- a/bin/sh/eval.c +++ b/bin/sh/eval.c @@ -74,7 +74,7 @@ __FBSDID("$FreeBSD$"); #endif -MKINIT int evalskip; /* set if we are skipping commands */ +int evalskip; /* set if we are skipping commands */ STATIC int skipcount; /* number of levels to skip */ MKINIT int loopnest; /* current loop nesting level */ int funcnest; /* depth of function calls */ @@ -407,8 +407,7 @@ evalsubshell(union node *n, int flags) flags &=~ EV_TESTED; redirect(n->nredir.redirect, 0); evaltree(n->nredir.n, flags | EV_EXIT); /* never returns */ - } - if (! backgnd) { + } else if (! backgnd) { INTOFF; exitstatus = waitforjob(jp, (int *)NULL); INTON; @@ -593,6 +592,7 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd) char *savecmdname; struct shparam saveparam; struct localvar *savelocalvars; + struct parsefile *savetopfile; volatile int e; char *lastarg; int realstatus; @@ -646,7 +646,7 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd) out2str(ps4val()); for (sp = varlist.list ; sp ; sp = sp->next) { if (sep != 0) - outc(' ', &errout); + out2c(' '); p = sp->text; while (*p != '=' && *p != '\0') out2c(*p++); @@ -658,7 +658,7 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd) } for (sp = arglist.list ; sp ; sp = sp->next) { if (sep != 0) - outc(' ', &errout); + out2c(' '); /* Disambiguate command looking like assignment. */ if (sp == arglist.list && strchr(sp->text, '=') != NULL && @@ -670,7 +670,7 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd) out2qstr(sp->text); sep = ' '; } - outc('\n', &errout); + out2c('\n'); flushout(&errout); } @@ -722,10 +722,10 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd) break; if ((cmdentry.u.index = find_builtin(*argv, &cmdentry.special)) < 0) { - outfmt(&errout, "%s: not found\n", *argv); - exitstatus = 127; - flushout(&errout); - return; + cmdentry.u.index = BLTINCMD; + argv--; + argc++; + break; } if (cmdentry.u.index != BLTINCMD) break; @@ -781,7 +781,6 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd) savelocalvars = localvars; localvars = NULL; reffunc(cmdentry.u.func); - INTON; savehandler = handler; if (setjmp(jmploc.loc)) { if (exception == EXSHELLPROC) @@ -793,19 +792,20 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd) unreffunc(cmdentry.u.func); poplocalvars(); localvars = savelocalvars; + funcnest--; handler = savehandler; longjmp(handler->loc, 1); } handler = &jmploc; + funcnest++; + INTON; for (sp = varlist.list ; sp ; sp = sp->next) mklocal(sp->text); - funcnest++; exitstatus = oexitstatus; if (flags & EV_TESTED) evaltree(getfuncnode(cmdentry.u.func), EV_TESTED); else evaltree(getfuncnode(cmdentry.u.func), 0); - funcnest--; INTOFF; unreffunc(cmdentry.u.func); poplocalvars(); @@ -813,6 +813,7 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd) freeparam(&shellparam); shellparam = saveparam; handler = savehandler; + funcnest--; popredir(); INTON; if (evalskip == SKIPFUNC) { @@ -831,8 +832,10 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd) memout.nextc = memout.buf; memout.bufsize = 64; mode |= REDIR_BACKQ; + cmdentry.special = 0; } savecmdname = commandname; + savetopfile = getcurrentfile(); cmdenviron = varlist.list; e = -1; savehandler = handler; @@ -847,7 +850,7 @@ evalcommand(union node *cmd, int flags, struct backcmd *backcmd) listsetvar(cmdenviron); commandname = argv[0]; argptr = argv + 1; - optptr = NULL; /* initialize nextopt */ + nextopt_optptr = NULL; /* initialize nextopt */ builtin_flags = flags; exitstatus = (*builtinfunc[cmdentry.u.index])(argc, argv); flushall(); @@ -863,24 +866,25 @@ cmddone: } } handler = savehandler; - if (e != -1) { - if ((e != EXERROR && e != EXEXEC) - || cmdentry.special) - exraise(e); - FORCEINTON; - } - if (cmdentry.u.index != EXECCMD) - popredir(); if (flags == EV_BACKCMD) { backcmd->buf = memout.buf; backcmd->nleft = memout.nextc - memout.buf; memout.buf = NULL; } + if (e != -1) { + if ((e != EXERROR && e != EXEXEC) + || cmdentry.special) + exraise(e); + popfilesupto(savetopfile); + if (flags != EV_BACKCMD) + FORCEINTON; + } + if (cmdentry.u.index != EXECCMD) + popredir(); } else { #ifdef DEBUG trputs("normal command: "); trargs(argv); #endif - clearredir(); redirect(cmd->ncmd.redirect, 0); for (sp = varlist.list ; sp ; sp = sp->next) setvareq(sp->text, VEXPORT|VSTACK); @@ -941,12 +945,17 @@ prehash(union node *n) */ /* - * No command given, or a bltin command with no arguments. + * No command given, a bltin command with no arguments, or a bltin command + * with an invalid name. */ int -bltincmd(int argc __unused, char **argv __unused) +bltincmd(int argc, char **argv) { + if (argc > 1) { + out2fmt_flush("%s: not found\n", argv[1]); + return 127; + } /* * Preserve exitstatus of a previous possible redirection * as POSIX mandates @@ -1021,7 +1030,7 @@ commandcmd(int argc, char **argv) if (cmd != -1) { if (argc != 1) error("wrong number of arguments"); - return typecmd_impl(2, argv - 1, cmd); + return typecmd_impl(2, argv - 1, cmd, path); } if (argc != 0) { old = handler; diff --git a/bin/sh/eval.h b/bin/sh/eval.h index c82585ea888..bf987828d0c 100644 --- a/bin/sh/eval.h +++ b/bin/sh/eval.h @@ -35,6 +35,7 @@ extern char *commandname; /* currently executing command */ extern int exitstatus; /* exit status of last command */ +extern int oexitstatus; /* saved exit status */ extern struct strlist *cmdenviron; /* environment for builtin command */ diff --git a/bin/sh/exec.c b/bin/sh/exec.c index f9d3c221a3a..a28ab0364a5 100644 --- a/bin/sh/exec.c +++ b/bin/sh/exec.c @@ -98,7 +98,7 @@ int exerrno = 0; /* Last exec error */ STATIC void tryexec(char *, char **, char **); STATIC void printentry(struct tblentry *, int); -STATIC struct tblentry *cmdlookup(char *, int); +STATIC struct tblentry *cmdlookup(const char *, int); STATIC void delete_cmd_entry(void); @@ -109,7 +109,7 @@ STATIC void delete_cmd_entry(void); */ void -shellexec(char **argv, char **envp, char *path, int index) +shellexec(char **argv, char **envp, const char *path, int idx) { char *cmdname; int e; @@ -120,7 +120,7 @@ shellexec(char **argv, char **envp, char *path, int index) } else { e = ENOENT; while ((cmdname = padvance(&path, argv[0])) != NULL) { - if (--index < 0 && pathopt == NULL) { + if (--idx < 0 && pathopt == NULL) { tryexec(cmdname, argv, envp); if (errno != ENOENT && errno != ENOTDIR) e = errno; @@ -175,13 +175,13 @@ tryexec(char *cmd, char **argv, char **envp) * NULL. */ -char *pathopt; +const char *pathopt; char * -padvance(char **path, char *name) +padvance(const char **path, const char *name) { - char *p, *q; - char *start; + const char *p, *start; + char *q; int len; if (*path == NULL) @@ -255,7 +255,7 @@ hashcmd(int argc __unused, char **argv __unused) if (cmdp != NULL) printentry(cmdp, verbose); else - outfmt(&errout, "%s: not found\n", name); + outfmt(out2, "%s: not found\n", name); } flushall(); } @@ -268,17 +268,17 @@ hashcmd(int argc __unused, char **argv __unused) STATIC void printentry(struct tblentry *cmdp, int verbose) { - int index; - char *path; + int idx; + const char *path; char *name; if (cmdp->cmdtype == CMDNORMAL) { - index = cmdp->param.index; + idx = cmdp->param.index; path = pathval(); do { name = padvance(&path, cmdp->cmdname); stunalloc(name); - } while (--index >= 0); + } while (--idx >= 0); out1str(name); } else if (cmdp->cmdtype == CMDBUILTIN) { out1fmt("builtin %s", cmdp->cmdname); @@ -310,10 +310,11 @@ printentry(struct tblentry *cmdp, int verbose) */ void -find_command(char *name, struct cmdentry *entry, int printerr, char *path) +find_command(const char *name, struct cmdentry *entry, int printerr, + const char *path) { struct tblentry *cmdp; - int index; + int idx; int prev; char *fullname; struct stat statb; @@ -353,11 +354,11 @@ find_command(char *name, struct cmdentry *entry, int printerr, char *path) } e = ENOENT; - index = -1; + idx = -1; loop: while ((fullname = padvance(&path, name)) != NULL) { stunalloc(fullname); - index++; + idx++; if (pathopt) { if (prefix("builtin", pathopt)) { if ((i = find_builtin(name, &spec)) < 0) @@ -376,8 +377,8 @@ loop: } } /* if rehash, don't redo absolute path names */ - if (fullname[0] == '/' && index <= prev) { - if (index < prev) + if (fullname[0] == '/' && idx <= prev) { + if (idx < prev) goto loop; TRACE(("searchexec \"%s\": no change\n", name)); goto success; @@ -414,7 +415,7 @@ loop: INTOFF; cmdp = cmdlookup(name, 1); cmdp->cmdtype = CMDNORMAL; - cmdp->param.index = index; + cmdp->param.index = idx; INTON; goto success; } @@ -446,7 +447,7 @@ success: */ int -find_builtin(char *name, int *special) +find_builtin(const char *name, int *special) { const struct builtincmd *bp; @@ -493,18 +494,18 @@ void changepath(const char *newval) { const char *old, *new; - int index; + int idx; int firstchange; int bltin; old = pathval(); new = newval; firstchange = 9999; /* assume no change */ - index = 0; + idx = 0; bltin = -1; for (;;) { if (*old != *new) { - firstchange = index; + firstchange = idx; if ((*old == '\0' && *new == ':') || (*old == ':' && *new == '\0')) firstchange++; @@ -513,9 +514,9 @@ changepath(const char *newval) if (*new == '\0') break; if (*new == '%' && bltin < 0 && prefix("builtin", new + 1)) - bltin = index; + bltin = idx; if (*new == ':') { - index++; + idx++; } new++, old++; } @@ -608,10 +609,10 @@ STATIC struct tblentry **lastcmdentry; STATIC struct tblentry * -cmdlookup(char *name, int add) +cmdlookup(const char *name, int add) { int hashval; - char *p; + const char *p; struct tblentry *cmdp; struct tblentry **pp; @@ -664,7 +665,7 @@ delete_cmd_entry(void) */ void -addcmdentry(char *name, struct cmdentry *entry) +addcmdentry(const char *name, struct cmdentry *entry) { struct tblentry *cmdp; @@ -684,7 +685,7 @@ addcmdentry(char *name, struct cmdentry *entry) */ void -defun(char *name, union node *func) +defun(const char *name, union node *func) { struct cmdentry entry; @@ -701,7 +702,7 @@ defun(char *name, union node *func) */ int -unsetfunc(char *name) +unsetfunc(const char *name) { struct tblentry *cmdp; @@ -719,19 +720,21 @@ unsetfunc(char *name) */ int -typecmd_impl(int argc, char **argv, int cmd) +typecmd_impl(int argc, char **argv, int cmd, const char *path) { struct cmdentry entry; struct tblentry *cmdp; - char **pp; + const char *const *pp; struct alias *ap; int i; - int error = 0; - extern char *const parsekwd[]; + int error1 = 0; + + if (path != pathval()) + clearcmdentry(0); for (i = 1; i < argc; i++) { /* First look at the keywords */ - for (pp = (char **)parsekwd; *pp; pp++) + for (pp = parsekwd; *pp; pp++) if (**pp == *argv[i] && equal(*pp, argv[i])) break; @@ -761,16 +764,17 @@ typecmd_impl(int argc, char **argv, int cmd) } else { /* Finally use brute force */ - find_command(argv[i], &entry, 0, pathval()); + find_command(argv[i], &entry, 0, path); } switch (entry.cmdtype) { case CMDNORMAL: { if (strchr(argv[i], '/') == NULL) { - char *path = pathval(), *name; + const char *path2 = path; + char *name; int j = entry.u.index; do { - name = padvance(&path, argv[i]); + name = padvance(&path2, argv[i]); stunalloc(name); } while (--j >= 0); if (cmd == TYPECMD_SMALLV) @@ -791,7 +795,7 @@ typecmd_impl(int argc, char **argv, int cmd) if (cmd != TYPECMD_SMALLV) outfmt(out2, "%s: %s\n", argv[i], strerror(errno)); - error |= 127; + error1 |= 127; } } break; @@ -816,11 +820,15 @@ typecmd_impl(int argc, char **argv, int cmd) default: if (cmd != TYPECMD_SMALLV) outfmt(out2, "%s: not found\n", argv[i]); - error |= 127; + error1 |= 127; break; } } - return error; + + if (path != pathval()) + clearcmdentry(0); + + return error1; } /* @@ -830,5 +838,5 @@ typecmd_impl(int argc, char **argv, int cmd) int typecmd(int argc, char **argv) { - return typecmd_impl(argc, argv, TYPECMD_TYPE); + return typecmd_impl(argc, argv, TYPECMD_TYPE, bltinlookup("PATH", 1)); } diff --git a/bin/sh/exec.h b/bin/sh/exec.h index e3b9acdd84d..32bf1316834 100644 --- a/bin/sh/exec.h +++ b/bin/sh/exec.h @@ -57,20 +57,20 @@ struct cmdentry { }; -extern char *pathopt; /* set by padvance */ +extern const char *pathopt; /* set by padvance */ extern int exerrno; /* last exec error */ -void shellexec(char **, char **, char *, int); -char *padvance(char **, char *); +void shellexec(char **, char **, const char *, int) __dead2; +char *padvance(const char **, const char *); int hashcmd(int, char **); -void find_command(char *, struct cmdentry *, int, char *); -int find_builtin(char *, int *); +void find_command(const char *, struct cmdentry *, int, const char *); +int find_builtin(const char *, int *); void hashcd(void); void changepath(const char *); void deletefuncs(void); -void addcmdentry(char *, struct cmdentry *); -void defun(char *, union node *); -int unsetfunc(char *); -int typecmd_impl(int, char **, int); +void addcmdentry(const char *, struct cmdentry *); +void defun(const char *, union node *); +int unsetfunc(const char *); +int typecmd_impl(int, char **, int, const char *); int typecmd(int, char **); void clearcmdentry(int); diff --git a/bin/sh/expand.c b/bin/sh/expand.c index af79e8cad0d..876cde163f6 100644 --- a/bin/sh/expand.c +++ b/bin/sh/expand.c @@ -107,7 +107,7 @@ STATIC void expmeta(char *, char *); STATIC void addfname(char *); STATIC struct strlist *expsort(struct strlist *); STATIC struct strlist *msort(struct strlist *, int); -STATIC int pmatch(char *, char *, int); +STATIC int pmatch(const char *, const char *, int); STATIC char *cvtnum(int, char *); STATIC int collate_range_cmp(int, int); @@ -271,8 +271,13 @@ exptilde(char *p, int flag) while ((c = *p) != '\0') { switch(c) { - case CTLESC: - return (startp); + case CTLESC: /* This means CTL* are always considered quoted. */ + case CTLVAR: + case CTLENDVAR: + case CTLBACKQ: + case CTLBACKQ | CTLQUOTE: + case CTLARI: + case CTLENDARI: case CTLQUOTEMARK: return (startp); case ':': @@ -521,7 +526,7 @@ subevalvar(char *p, char *str, int strloc, int subtype, int startloc, case VSQUESTION: if (*p != CTLENDVAR) { - outfmt(&errout, "%s\n", startp); + outfmt(out2, "%s\n", startp); error((char *)NULL); } error("%.*s: parameter %snot set", (int)(p - str - 1), @@ -850,7 +855,6 @@ varvalue(char *name, int quoted, int subtype, int flag) int num; char *p; int i; - extern int oexitstatus; char sep; char **ap; char const *syntax; @@ -974,7 +978,7 @@ ifsbreakup(char *string, struct arglist *arglist) char *start; char *p; char *q; - char *ifs; + const char *ifs; const char *ifsspc; int had_param_ch = 0; @@ -1338,7 +1342,7 @@ msort(struct strlist *list, int len) */ int -patmatch(char *pattern, char *string, int squoted) +patmatch(const char *pattern, const char *string, int squoted) { #ifdef notdef if (pattern[0] == '!' && pattern[1] == '!') @@ -1350,9 +1354,9 @@ patmatch(char *pattern, char *string, int squoted) STATIC int -pmatch(char *pattern, char *string, int squoted) +pmatch(const char *pattern, const char *string, int squoted) { - char *p, *q; + const char *p, *q; char c; p = pattern; @@ -1400,7 +1404,7 @@ pmatch(char *pattern, char *string, int squoted) } while (*q++ != '\0'); return 0; case '[': { - char *endp; + const char *endp; int invert, found; char chr; @@ -1504,7 +1508,7 @@ rmescapes(char *str) */ int -casematch(union node *pattern, char *val) +casematch(union node *pattern, const char *val) { struct stackmark smark; int result; diff --git a/bin/sh/expand.h b/bin/sh/expand.h index 2b895193d57..a3e079a206a 100644 --- a/bin/sh/expand.h +++ b/bin/sh/expand.h @@ -58,7 +58,7 @@ union node; void expandhere(union node *, int); void expandarg(union node *, struct arglist *, int); void expari(int); -int patmatch(char *, char *, int); +int patmatch(const char *, const char *, int); void rmescapes(char *); -int casematch(union node *, char *); +int casematch(union node *, const char *); int wordexpcmd(int, char **); diff --git a/bin/sh/histedit.c b/bin/sh/histedit.c index 32b0448d2b3..cdde09ac8e5 100644 --- a/bin/sh/histedit.c +++ b/bin/sh/histedit.c @@ -92,7 +92,7 @@ histedit(void) if (hist != NULL) sethistsize(histsizeval()); else - out2str("sh: can't initialize history\n"); + out2fmt_flush("sh: can't initialize history\n"); } if (editing && !el && isatty(0)) { /* && isatty(2) ??? */ /* @@ -114,7 +114,7 @@ histedit(void) el_set(el, EL_PROMPT, getprompt); } else { bad: - out2str("sh: can't initialize editing\n"); + out2fmt_flush("sh: can't initialize editing\n"); } INTON; } else if (!editing && el) { @@ -164,19 +164,19 @@ int histcmd(int argc, char **argv) { int ch; - char *editor = NULL; + const char *editor = NULL; HistEvent he; int lflg = 0, nflg = 0, rflg = 0, sflg = 0; int i, retval; - char *firststr, *laststr; + const char *firststr, *laststr; int first, last, direction; - char *pat = NULL, *repl; + char *pat = NULL, *repl = NULL; static int active = 0; struct jmploc jmploc; struct jmploc *savehandler; char editfilestr[PATH_MAX]; char *volatile editfile; - FILE *efp; + FILE *efp = NULL; int oldhistnum; if (hist == NULL) @@ -336,6 +336,7 @@ histcmd(int argc, char **argv) if (sflg) { if (displayhist) { out2str(s); + flushout(out2); } evalstring(s, 0); if (displayhist && hist) { @@ -405,7 +406,7 @@ fc_replace(const char *s, char *p, char *r) } int -not_fcnumber(char *s) +not_fcnumber(const char *s) { if (s == NULL) return (0); @@ -415,10 +416,10 @@ not_fcnumber(char *s) } int -str_to_event(char *str, int last) +str_to_event(const char *str, int last) { HistEvent he; - char *s = str; + const char *s = str; int relative = 0; int i, retval; diff --git a/bin/sh/input.c b/bin/sh/input.c index f709b8c0218..c801e62dd37 100644 --- a/bin/sh/input.c +++ b/bin/sh/input.c @@ -93,7 +93,7 @@ struct parsefile { int plinno = 1; /* input line number */ -MKINIT int parsenleft; /* copy of parsefile->nleft */ +int parsenleft; /* copy of parsefile->nleft */ MKINIT int parselleft; /* copy of parsefile->lleft */ char *parsenextc; /* copy of parsefile->nextc */ MKINIT struct parsefile basepf; /* top level input file */ @@ -111,9 +111,9 @@ static int preadfd(void); INCLUDE "input.h" INCLUDE "error.h" -INIT { - extern char basebuf[]; +MKINIT char basebuf[]; +INIT { basepf.nextc = basepf.buf = basebuf; } @@ -215,7 +215,7 @@ retry: if (flags >= 0 && flags & O_NONBLOCK) { flags &=~ O_NONBLOCK; if (fcntl(0, F_SETFL, flags) >= 0) { - out2str("sh: turning off NDELAY mode\n"); + out2fmt_flush("sh: turning off NDELAY mode\n"); goto retry; } } @@ -359,7 +359,7 @@ pushstring(char *s, int len, void *ap) struct strpush *sp; INTOFF; -/*dprintf("*** calling pushstring: %s, %d\n", s, len);*/ +/*out2fmt_flush("*** calling pushstring: %s, %d\n", s, len);*/ if (parsefile->strpush) { sp = ckmalloc(sizeof (struct strpush)); sp->prev = parsefile->strpush; @@ -386,7 +386,7 @@ popstring(void) parsenextc = sp->prevstring; parsenleft = sp->prevnleft; parselleft = sp->prevlleft; -/*dprintf("*** calling popstring: restoring to '%s'\n", parsenextc);*/ +/*out2fmt_flush("*** calling popstring: restoring to '%s'\n", parsenextc);*/ if (sp->ap) sp->ap->flag &= ~ALIASINUSE; parsefile->strpush = sp->prev; @@ -401,7 +401,7 @@ popstring(void) */ void -setinputfile(char *fname, int push) +setinputfile(const char *fname, int push) { int fd; int fd2; @@ -508,6 +508,32 @@ popfile(void) } +/* + * Return current file (to go back to it later using popfilesupto()). + */ + +struct parsefile * +getcurrentfile(void) +{ + return parsefile; +} + + +/* + * Pop files until the given file is on top again. Useful for regular + * builtins that read shell commands from files or strings. + * If the given file is not an active file, an error is raised. + */ + +void +popfilesupto(struct parsefile *file) +{ + while (parsefile != file && parsefile != &basepf) + popfile(); + if (parsefile != file) + error("popfilesupto() misused"); +} + /* * Return to top level. */ diff --git a/bin/sh/input.h b/bin/sh/input.h index 4d57b3bf051..abbb2ce5fc5 100644 --- a/bin/sh/input.h +++ b/bin/sh/input.h @@ -45,6 +45,8 @@ extern int parsenleft; /* number of characters left in input buffer */ extern char *parsenextc; /* next character in input buffer */ extern int init_editline; /* 0 == not setup, 1 == OK, -1 == failed */ +struct parsefile; + char *pfgets(char *, int); int pgetc(void); int preadbuffer(void); @@ -52,10 +54,12 @@ int preadateof(void); void pungetc(void); void pushstring(char *, int, void *); void popstring(void); -void setinputfile(char *, int); +void setinputfile(const char *, int); void setinputfd(int, int); void setinputstring(char *, int); void popfile(void); +struct parsefile *getcurrentfile(void); +void popfilesupto(struct parsefile *); void popallfiles(void); void closescript(void); diff --git a/bin/sh/jobs.c b/bin/sh/jobs.c index be9acab565a..6ba951cd929 100644 --- a/bin/sh/jobs.c +++ b/bin/sh/jobs.c @@ -92,7 +92,7 @@ STATIC struct job *getjob(char *); STATIC pid_t dowait(int, struct job *); STATIC pid_t waitproc(int, int *); STATIC void cmdtxt(union node *); -STATIC void cmdputs(char *); +STATIC void cmdputs(const char *); #if JOBS STATIC void setcurjob(struct job *); STATIC void deljob(struct job *); @@ -146,7 +146,7 @@ setjobctl(int on) do { /* while we are in the background */ initialpgrp = tcgetpgrp(ttyfd); if (initialpgrp < 0) { -out: out2str("sh: can't access tty; job control turned off\n"); +out: out2fmt_flush("sh: can't access tty; job control turned off\n"); mflag = 0; return; } @@ -757,6 +757,7 @@ forkshell(struct job *jp, union node *n, int mode) TRACE(("Child shell %d\n", (int)getpid())); wasroot = rootshell; rootshell = 0; + handler = &main_handler; closescript(); INTON; clear_traps(); @@ -1046,7 +1047,7 @@ stoppedjobs(void) if (jp->used == 0) continue; if (jp->state == JOBSTOPPED) { - out2str("You have stopped jobs.\n"); + out2fmt_flush("You have stopped jobs.\n"); job_warning = 2; return (1); } @@ -1082,7 +1083,7 @@ cmdtxt(union node *n) { union node *np; struct nodelist *lp; - char *p; + const char *p; int i; char s[2]; @@ -1211,9 +1212,10 @@ redir: STATIC void -cmdputs(char *s) +cmdputs(const char *s) { - char *p, *q; + const char *p; + char *q; char c; int subtype = 0; diff --git a/bin/sh/mail.c b/bin/sh/mail.c index fe03a730bce..0ba7be530f4 100644 --- a/bin/sh/mail.c +++ b/bin/sh/mail.c @@ -72,7 +72,7 @@ void chkmail(int silent) { int i; - char *mpath; + const char *mpath; char *p; char *q; struct stackmark smark; diff --git a/bin/sh/main.c b/bin/sh/main.c index 85a6d20ee45..ece63c861d5 100644 --- a/bin/sh/main.c +++ b/bin/sh/main.c @@ -75,8 +75,9 @@ __FBSDID("$FreeBSD$"); int rootpid; int rootshell; +struct jmploc main_handler; -STATIC void read_profile(char *); +STATIC void read_profile(const char *); STATIC char *find_dot_file(char *); /* @@ -90,14 +91,13 @@ STATIC char *find_dot_file(char *); int main(int argc, char *argv[]) { - struct jmploc jmploc; struct stackmark smark; volatile int state; char *shinit; (void) setlocale(LC_ALL, ""); state = 0; - if (setjmp(jmploc.loc)) { + if (setjmp(main_handler.loc)) { /* * When a shell procedure is executed, we raise the * exception EXSHELLPROC to clean up before executing @@ -143,7 +143,7 @@ main(int argc, char *argv[]) else goto state4; } - handler = &jmploc; + handler = &main_handler; #ifdef DEBUG opentrace(); trputs("Shell args: "); trargs(argv); @@ -154,7 +154,7 @@ main(int argc, char *argv[]) setstackmark(&smark); procargs(argc, argv); if (getpwd() == NULL && iflag) - out2str("sh: cannot determine working directory\n"); + out2fmt_flush("sh: cannot determine working directory\n"); if (getpwd() != NULL) setvar ("PWD", getpwd(), VEXPORT); if (argv[0] && argv[0][0] == '-') { @@ -223,7 +223,7 @@ cmdloop(int top) if (!stoppedjobs()) { if (!Iflag) break; - out2str("\nUse \"exit\" to leave shell.\n"); + out2fmt_flush("\nUse \"exit\" to leave shell.\n"); } numeof++; } else if (n != NULL && nflag == 0) { @@ -248,7 +248,7 @@ cmdloop(int top) */ STATIC void -read_profile(char *name) +read_profile(const char *name) { int fd; @@ -269,7 +269,7 @@ read_profile(char *name) */ void -readcmdfile(char *name) +readcmdfile(const char *name) { int fd; @@ -296,7 +296,7 @@ find_dot_file(char *basename) { static char localname[FILENAME_MAX+1]; char *fullname; - char *path = pathval(); + const char *path = pathval(); struct stat statb; /* don't try this for absolute or relative paths */ @@ -315,7 +315,6 @@ find_dot_file(char *basename) int dotcmd(int argc, char **argv) { - struct strlist *sp; char *fullname; if (argc < 2) @@ -323,9 +322,6 @@ dotcmd(int argc, char **argv) exitstatus = 0; - for (sp = cmdenviron; sp ; sp = sp->next) - setvareq(savestr(sp->text), VSTRFIXED|VTEXTFIXED); - fullname = find_dot_file(argv[1]); setinputfile(fullname, 1); commandname = fullname; @@ -338,8 +334,6 @@ dotcmd(int argc, char **argv) int exitcmd(int argc, char **argv) { - extern int oexitstatus; - if (stoppedjobs()) return 0; if (argc > 1) diff --git a/bin/sh/main.h b/bin/sh/main.h index 7f8c3940b60..c5e8bfd3840 100644 --- a/bin/sh/main.h +++ b/bin/sh/main.h @@ -35,8 +35,9 @@ extern int rootpid; /* pid of main shell */ extern int rootshell; /* true if we aren't a child of the main shell */ +extern struct jmploc main_handler; /* top level exception handler */ -void readcmdfile(char *); +void readcmdfile(const char *); void cmdloop(int); int dotcmd(int, char **); int exitcmd(int, char **); diff --git a/bin/sh/memalloc.c b/bin/sh/memalloc.c index fa03632f686..9d5332ffa74 100644 --- a/bin/sh/memalloc.c +++ b/bin/sh/memalloc.c @@ -95,7 +95,7 @@ ckfree(pointer p) */ char * -savestr(char *s) +savestr(const char *s) { char *p; diff --git a/bin/sh/memalloc.h b/bin/sh/memalloc.h index 4652e541159..187d4c855af 100644 --- a/bin/sh/memalloc.h +++ b/bin/sh/memalloc.h @@ -51,7 +51,7 @@ extern int herefd; pointer ckmalloc(size_t); pointer ckrealloc(pointer, int); void ckfree(pointer); -char *savestr(char *); +char *savestr(const char *); pointer stalloc(int); void stunalloc(pointer); void setstackmark(struct stackmark *); diff --git a/bin/sh/miscbltin.c b/bin/sh/miscbltin.c index a663c7535a5..cc525b8ccbd 100644 --- a/bin/sh/miscbltin.c +++ b/bin/sh/miscbltin.c @@ -93,7 +93,7 @@ readcmd(int argc __unused, char **argv __unused) char c; int rflag; char *prompt; - char *ifs; + const char *ifs; char *p; int startword; int status; @@ -254,7 +254,7 @@ readcmd(int argc __unused, char **argv __unused) int -umaskcmd(int argc __unused, char **argv) +umaskcmd(int argc __unused, char **argv __unused) { char *ap; int mask; diff --git a/bin/sh/mkbuiltins b/bin/sh/mkbuiltins index 7b77649de41..b78729ac9ea 100755 --- a/bin/sh/mkbuiltins +++ b/bin/sh/mkbuiltins @@ -88,7 +88,7 @@ tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ < $temp | awk '{ printf "#define %s %d\n", $1, NR-1}' echo ' struct builtincmd { - char *name; + const char *name; int code; int special; }; diff --git a/bin/sh/mkinit.c b/bin/sh/mkinit.c index 022eed4eafc..89385ffb740 100644 --- a/bin/sh/mkinit.c +++ b/bin/sh/mkinit.c @@ -102,9 +102,9 @@ struct block { */ struct event { - char *name; /* name of event (e.g. INIT) */ - char *routine; /* name of routine called on event */ - char *comment; /* comment describing routine */ + const char *name; /* name of event (e.g. INIT) */ + const char *routine; /* name of routine called on event */ + const char *comment; /* comment describing routine */ struct text code; /* code for handling event */ }; @@ -140,7 +140,7 @@ struct event event[] = { }; -char *curfile; /* current file */ +const char *curfile; /* current file */ int linno; /* current line */ char *header_files[200]; /* list of header files */ struct text defines; /* #define statements */ @@ -148,20 +148,20 @@ struct text decls; /* declarations */ int amiddecls; /* for formatting */ -void readfile(char *); -int match(char *, char *); -int gooddefine(char *); -void doevent(struct event *, FILE *, char *); +void readfile(const char *); +int match(const char *, const char *); +int gooddefine(const char *); +void doevent(struct event *, FILE *, const char *); void doinclude(char *); void dodecl(char *, FILE *); void output(void); -void addstr(char *, struct text *); +void addstr(const char *, struct text *); void addchar(int, struct text *); void writetext(struct text *, FILE *); -FILE *ckfopen(char *, char *); +FILE *ckfopen(const char *, const char *); void *ckmalloc(size_t); -char *savestr(char *); -void error(char *); +char *savestr(const char *); +void error(const char *); #define equal(s1, s2) (strcmp(s1, s2) == 0) @@ -170,9 +170,9 @@ main(int argc __unused, char *argv[]) { char **ap; - header_files[0] = "\"shell.h\""; - header_files[1] = "\"mystring.h\""; - header_files[2] = "\"init.h\""; + header_files[0] = savestr("\"shell.h\""); + header_files[1] = savestr("\"mystring.h\""); + header_files[2] = savestr("\"init.h\""); for (ap = argv + 1 ; *ap ; ap++) readfile(*ap); output(); @@ -186,7 +186,7 @@ main(int argc __unused, char *argv[]) */ void -readfile(char *fname) +readfile(const char *fname) { FILE *fp; char line[1024]; @@ -230,9 +230,9 @@ readfile(char *fname) int -match(char *name, char *line) +match(const char *name, const char *line) { - char *p, *q; + const char *p, *q; p = name, q = line; while (*p) { @@ -246,9 +246,9 @@ match(char *name, char *line) int -gooddefine(char *line) +gooddefine(const char *line) { - char *p; + const char *p; if (! match("#define", line)) return 0; /* not a define */ @@ -269,11 +269,11 @@ gooddefine(char *line) void -doevent(struct event *ep, FILE *fp, char *fname) +doevent(struct event *ep, FILE *fp, const char *fname) { char line[1024]; int indent; - char *p; + const char *p; sprintf(line, "\n /* from %s: */\n", fname); addstr(line, &ep->code); @@ -407,7 +407,7 @@ output(void) */ void -addstr(char *s, struct text *text) +addstr(const char *s, struct text *text) { while (*s) { if (--text->nleft < 0) @@ -452,7 +452,7 @@ writetext(struct text *text, FILE *fp) } FILE * -ckfopen(char *file, char *mode) +ckfopen(const char *file, const char *mode) { FILE *fp; @@ -474,7 +474,7 @@ ckmalloc(size_t nbytes) } char * -savestr(char *s) +savestr(const char *s) { char *p; @@ -484,7 +484,7 @@ savestr(char *s) } void -error(char *msg) +error(const char *msg) { if (curfile != NULL) fprintf(stderr, "%s:%d: ", curfile, linno); diff --git a/bin/sh/mksyntax.c b/bin/sh/mksyntax.c index f8fad0d6db5..28a018b2162 100644 --- a/bin/sh/mksyntax.c +++ b/bin/sh/mksyntax.c @@ -55,8 +55,8 @@ __FBSDID("$FreeBSD$"); struct synclass { - char *name; - char *comment; + const char *name; + const char *comment; }; /* Syntax classes */ @@ -101,16 +101,16 @@ static char writer[] = "\ static FILE *cfile; static FILE *hfile; -static char *syntax[513]; +static const char *syntax[513]; static int base; static int size; /* number of values which a char variable can have */ static int nbits; /* number of bits in a character */ static int digit_contig;/* true if digits are contiguous */ -static void filltable(char *); +static void filltable(const char *); static void init(void); -static void add(char *, char *); -static void print(char *); +static void add(const char *, const char *); +static void print(const char *); static void output_type_macros(void); static void digit_convert(void); @@ -259,7 +259,7 @@ main(int argc __unused, char **argv __unused) */ static void -filltable(char *dftval) +filltable(const char *dftval) { int i; @@ -293,7 +293,7 @@ init(void) */ static void -add(char *p, char *type) +add(const char *p, const char *type) { while (*p) syntax[*p++ + base] = type; @@ -306,7 +306,7 @@ add(char *p, char *type) */ static void -print(char *name) +print(const char *name) { int i; int col; @@ -338,7 +338,7 @@ print(char *name) * contiguous, we can test for them quickly. */ -static char *macro[] = { +static const char *macro[] = { "#define is_digit(c)\t((is_type+SYNBASE)[c] & ISDIGIT)", "#define is_eof(c)\t((c) == PEOF)", "#define is_alpha(c)\t(((c) < CTLESC || (c) > CTLQUOTEMARK) && isalpha((unsigned char) (c)))", @@ -351,7 +351,7 @@ static char *macro[] = { static void output_type_macros(void) { - char **pp; + const char **pp; if (digit_contig) macro[0] = "#define is_digit(c)\t((unsigned int)((c) - '0') <= 9)"; diff --git a/bin/sh/myhistedit.h b/bin/sh/myhistedit.h index 5d96587cdba..f4fa3740728 100644 --- a/bin/sh/myhistedit.h +++ b/bin/sh/myhistedit.h @@ -39,7 +39,7 @@ extern int displayhist; void histedit(void); void sethistsize(const char *); int histcmd(int, char **); -int not_fcnumber(char *); -int str_to_event(char *, int); +int not_fcnumber(const char *); +int str_to_event(const char *, int); int bindcmd(int, char **); diff --git a/bin/sh/mystring.c b/bin/sh/mystring.c index 6eaacb35dc9..53d703d55b5 100644 --- a/bin/sh/mystring.c +++ b/bin/sh/mystring.c @@ -108,7 +108,7 @@ int number(const char *s) { if (! is_number(s)) - error("Illegal number: %s", (char *)s); + error("Illegal number: %s", s); return atoi(s); } diff --git a/bin/sh/options.c b/bin/sh/options.c index fea95ca28c6..bde96aa7fb5 100644 --- a/bin/sh/options.c +++ b/bin/sh/options.c @@ -64,7 +64,7 @@ char *arg0; /* value of $0 */ struct shparam shellparam; /* current positional parameters */ char **argptr; /* argument list for builtin commands */ char *shoptarg; /* set by nextopt (like getopt) */ -char *optptr; /* used by nextopt */ +char *nextopt_optptr; /* used by nextopt */ char *minusc; /* argument to -c option */ @@ -554,12 +554,13 @@ out: */ int -nextopt(char *optstring) +nextopt(const char *optstring) { - char *p, *q; + char *p; + const char *q; char c; - if ((p = optptr) == NULL || *p == '\0') { + if ((p = nextopt_optptr) == NULL || *p == '\0') { p = *argptr; if (p == NULL || *p != '-' || *++p == '\0') return '\0'; @@ -580,6 +581,6 @@ nextopt(char *optstring) shoptarg = p; p = NULL; } - optptr = p; + nextopt_optptr = p; return c; } diff --git a/bin/sh/options.h b/bin/sh/options.h index 3b827d16016..5004549a292 100644 --- a/bin/sh/options.h +++ b/bin/sh/options.h @@ -102,7 +102,7 @@ extern char *arg0; /* $0 */ extern struct shparam shellparam; /* $@ */ extern char **argptr; /* argument list for builtin commands */ extern char *shoptarg; /* set by nextopt */ -extern char *optptr; /* used by nextopt */ +extern char *nextopt_optptr; /* used by nextopt */ void procargs(int, char **); void optschanged(void); @@ -111,5 +111,5 @@ void freeparam(struct shparam *); int shiftcmd(int, char **); int setcmd(int, char **); int getoptscmd(int, char **); -int nextopt(char *); +int nextopt(const char *); void getoptsreset(const char *); diff --git a/bin/sh/output.c b/bin/sh/output.c index 0d55fdfcb28..fd03e23fc17 100644 --- a/bin/sh/output.c +++ b/bin/sh/output.c @@ -71,7 +71,7 @@ __FBSDID("$FreeBSD$"); static int doformat_wr(void *, const char *, int); struct output output = {NULL, 0, NULL, OUTBUFSIZ, 1, 0}; -struct output errout = {NULL, 0, NULL, 100, 2, 0}; +struct output errout = {NULL, 0, NULL, 256, 2, 0}; struct output memout = {NULL, 0, NULL, 0, MEM_OUT, 0}; struct output *out1 = &output; struct output *out2 = &errout; @@ -124,8 +124,6 @@ outstr(const char *p, struct output *file) { while (*p) outc(*p++, file); - if (file == out2) - flushout(file); } /* Like outstr(), but quote for re-input into the shell. */ @@ -255,7 +253,7 @@ out1fmt(const char *fmt, ...) } void -dprintf(const char *fmt, ...) +out2fmt_flush(const char *fmt, ...) { va_list ap; @@ -316,7 +314,7 @@ doformat(struct output *dest, const char *f, va_list ap) */ int -xwrite(int fd, char *buf, int nbytes) +xwrite(int fd, const char *buf, int nbytes) { int ntry; int i; diff --git a/bin/sh/output.h b/bin/sh/output.h index bafd8687b15..345fe531c40 100644 --- a/bin/sh/output.h +++ b/bin/sh/output.h @@ -46,13 +46,13 @@ struct output { short flags; }; -extern struct output output; -extern struct output errout; +extern struct output output; /* to fd 1 */ +extern struct output errout; /* to fd 2 */ extern struct output memout; -extern struct output *out1; -extern struct output *out2; +extern struct output *out1; /* &memout if backquote, otherwise &output */ +extern struct output *out2; /* &memout if backquote with 2>&1, otherwise + &errout */ -void open_mem(char *, int, struct output *); void out1str(const char *); void out1qstr(const char *); void out2str(const char *); @@ -65,10 +65,10 @@ void flushout(struct output *); void freestdout(void); void outfmt(struct output *, const char *, ...) __printflike(2, 3); void out1fmt(const char *, ...) __printflike(1, 2); -void dprintf(const char *, ...) __printflike(1, 2); +void out2fmt_flush(const char *, ...) __printflike(1, 2); void fmtstr(char *, int, const char *, ...) __printflike(3, 4); void doformat(struct output *, const char *, va_list) __printflike(2, 0); -int xwrite(int, char *, int); +int xwrite(int, const char *, int); #define outc(c, file) (--(file)->nleft < 0? (emptyoutbuf(file), *(file)->nextc++ = (c)) : (*(file)->nextc++ = (c))) #define out1c(c) outc(c, out1); diff --git a/bin/sh/parser.c b/bin/sh/parser.c index 8dd1e7a7236..f8fd0edd376 100644 --- a/bin/sh/parser.c +++ b/bin/sh/parser.c @@ -113,7 +113,7 @@ STATIC int xxreadtoken(void); STATIC int readtoken1(int, char const *, char *, int); STATIC int noexpand(char *); STATIC void synexpect(int); -STATIC void synerror(char *); +STATIC void synerror(const char *); STATIC void setprompt(int); @@ -364,7 +364,9 @@ TRACE(("expecting DO got %s %s\n", tokname[got], got == TWORD ? wordtext : "")); n1 = (union node *)stalloc(sizeof (struct nfor)); n1->type = NFOR; n1->nfor.var = wordtext; - if (readtoken() == TWORD && ! quoteflag && equal(wordtext, "in")) { + while (readtoken() == TNL) + ; + if (lasttoken == TWORD && ! quoteflag && equal(wordtext, "in")) { app = ≈ while (readtoken() == TWORD) { n2 = (union node *)stalloc(sizeof (struct narg)); @@ -1309,10 +1311,16 @@ parsebackq: { int savelen; int saveprompt; const int bq_startlinno = plinno; + char *volatile ostr = NULL; + struct parsefile *const savetopfile = getcurrentfile(); + str = NULL; if (setjmp(jmploc.loc)) { + popfilesupto(savetopfile); if (str) ckfree(str); + if (ostr) + ckfree(ostr); handler = savehandler; if (exception == EXERROR) { startlinno = bq_startlinno; @@ -1321,7 +1329,6 @@ parsebackq: { longjmp(handler->loc, 1); } INTOFF; - str = NULL; savelen = out - stackblock(); if (savelen > 0) { str = ckmalloc(savelen); @@ -1333,13 +1340,12 @@ parsebackq: { /* We must read until the closing backquote, giving special treatment to some slashes, and then push the string and reread it as input, interpreting it normally. */ - char *out; + char *oout; int c; - int savelen; - char *str; + int olen; - STARTSTACKSTR(out); + STARTSTACKSTR(oout); for (;;) { if (needprompt) { setprompt(2); @@ -1366,7 +1372,7 @@ parsebackq: { } if (c != '\\' && c != '`' && c != '$' && (!dblquote || c != '"')) - STPUTC('\\', out); + STPUTC('\\', oout); break; case '\n': @@ -1382,16 +1388,16 @@ parsebackq: { default: break; } - STPUTC(c, out); + STPUTC(c, oout); } done: - STPUTC('\0', out); - savelen = out - stackblock(); - if (savelen > 0) { - str = ckmalloc(savelen); - memcpy(str, stackblock(), savelen); - setinputstring(str, 1); - } + STPUTC('\0', oout); + olen = oout - stackblock(); + INTOFF; + ostr = ckmalloc(olen); + memcpy(ostr, stackblock(), olen); + setinputstring(ostr, 1); + INTON; } nlpp = &bqlist; while (*nlpp) @@ -1433,6 +1439,12 @@ done: str = NULL; INTON; } + if (ostr) { + INTOFF; + ckfree(ostr); + ostr = NULL; + INTON; + } handler = savehandler; if (arinest || dblquote) USTPUTC(CTLBACKQ | CTLQUOTE, out); @@ -1508,9 +1520,9 @@ noexpand(char *text) */ int -goodname(char *name) +goodname(const char *name) { - char *p; + const char *p; p = name; if (! is_name(*p)) @@ -1545,11 +1557,11 @@ synexpect(int token) STATIC void -synerror(char *msg) +synerror(const char *msg) { if (commandname) - outfmt(&errout, "%s: %d: ", commandname, startlinno); - outfmt(&errout, "Syntax error: %s\n", msg); + outfmt(out2, "%s: %d: ", commandname, startlinno); + outfmt(out2, "Syntax error: %s\n", msg); error((char *)NULL); } @@ -1561,7 +1573,10 @@ setprompt(int which) #ifndef NO_HISTORY if (!el) #endif + { out2str(getprompt(NULL)); + flushout(out2); + } } /* @@ -1574,13 +1589,14 @@ getprompt(void *unused __unused) static char ps[PROMPTLEN]; char *fmt; int i, j, trim; + static char internal_error[] = ""; /* * Select prompt format. */ switch (whichprompt) { case 0: - fmt = ""; + fmt = nullstr; break; case 1: fmt = ps1val(); @@ -1589,7 +1605,7 @@ getprompt(void *unused __unused) fmt = ps2val(); break; default: - return ""; + return internal_error; } /* diff --git a/bin/sh/parser.h b/bin/sh/parser.h index 40dd8bda240..453711f4307 100644 --- a/bin/sh/parser.h +++ b/bin/sh/parser.h @@ -73,9 +73,10 @@ extern int tokpushback; #define NEOF ((union node *)&tokpushback) extern int whichprompt; /* 1 == PS1, 2 == PS2 */ +extern const char *const parsekwd[]; union node *parsecmd(int); void fixredir(union node *, const char *, int); -int goodname(char *); +int goodname(const char *); char *getprompt(void *); diff --git a/bin/sh/redir.c b/bin/sh/redir.c index 695e1507255..2239b9f2e14 100644 --- a/bin/sh/redir.c +++ b/bin/sh/redir.c @@ -63,6 +63,7 @@ __FBSDID("$FreeBSD$"); #define EMPTY -2 /* marks an unused slot in redirtab */ +#define CLOSED -1 /* fd was not open before redir */ #define PIPESIZE 4096 /* amount of buffering in a pipe */ @@ -101,7 +102,6 @@ redirect(union node *redir, int flags) struct redirtab *sv = NULL; int i; int fd; - int try; char memory[10]; /* file descriptors to write to memory */ for (i = 10 ; --i >= 0 ; ) @@ -116,38 +116,30 @@ redirect(union node *redir, int flags) } for (n = redir ; n ; n = n->nfile.next) { fd = n->nfile.fd; - try = 0; if ((n->nfile.type == NTOFD || n->nfile.type == NFROMFD) && n->ndup.dupfd == fd) continue; /* redirect from/to same file descriptor */ if ((flags & REDIR_PUSH) && sv->renamed[fd] == EMPTY) { INTOFF; -again: if ((i = fcntl(fd, F_DUPFD, 10)) == -1) { switch (errno) { case EBADF: - if (!try) { - openredirect(n, memory); - try++; - goto again; - } - /* FALLTHROUGH*/ + i = CLOSED; + break; default: INTON; error("%d: %s", fd, strerror(errno)); break; } - } - if (!try) { - sv->renamed[fd] = i; - } + } else + (void)fcntl(i, F_SETFD, FD_CLOEXEC); + sv->renamed[fd] = i; INTON; } if (fd == 0) fd0_redirected++; - if (!try) - openredirect(n, memory); + openredirect(n, memory); } if (memory[1]) out1 = &memout; @@ -166,8 +158,11 @@ openredirect(union node *redir, char memory[10]) /* * We suppress interrupts so that we won't leave open file - * descriptors around. This may not be such a good idea because - * an open of a device or a fifo can block indefinitely. + * descriptors around. Because the signal handler remains + * installed and we do not use system call restart, interrupts + * will still abort blocking opens such as fifos (they will fail + * with EINTR). There is, however, a race condition if an interrupt + * arrives after INTOFF and before open blocks. */ INTOFF; memory[fd] = 0; diff --git a/bin/sh/sh.1 b/bin/sh/sh.1 index db872fd03ea..8ec119545ca 100644 --- a/bin/sh/sh.1 +++ b/bin/sh/sh.1 @@ -32,7 +32,7 @@ .\" from: @(#)sh.1 8.6 (Berkeley) 5/4/95 .\" $FreeBSD$ .\" -.Dd October 24, 2009 +.Dd December 31, 2009 .Dt SH 1 .Os .Sh NAME @@ -865,7 +865,7 @@ command is: If .Ic in and the following words are omitted, -.Ic in Li $@ +.Ic in Li \&"$@\&" is used instead. The words are expanded, and then the list is executed repeatedly with the variable set to each word in turn. @@ -1080,7 +1080,7 @@ and is .Dq Li "def ghi" , then -.Dq Li $@ +.Li \&"$@\&" expands to the two arguments: .Bd -literal -offset indent @@ -2137,7 +2137,7 @@ and not found. For aliases the alias expansion is printed; for commands and tracked aliases the complete pathname of the command is printed. -.It Ic ulimit Oo Fl HSabcdflmnpstuv Oc Op Ar limit +.It Ic ulimit Oo Fl HSabcdflmnpstuvw Oc Op Ar limit Set or display resource limits (see .Xr getrlimit 2 ) . If @@ -2201,6 +2201,9 @@ The maximal amount of CPU time to be used by each process, in seconds. The maximal number of simultaneous processes for this user ID. .It Fl v Ar virtualmem The maximal virtual size of a process, in kilobytes. +.It Fl w Ar swapuse +The maximum amount of swap space reserved or used for this user ID, +in kilobytes. .El .It Ic umask Oo Fl S Oc Op Ar mask Set the file creation mask (see diff --git a/bin/sh/show.c b/bin/sh/show.c index baae549c429..f11cfce2983 100644 --- a/bin/sh/show.c +++ b/bin/sh/show.c @@ -307,7 +307,7 @@ sh_trace(const char *fmt, ...) void -trputs(char *s) +trputs(const char *s) { if (tracefile == NULL) return; diff --git a/bin/sh/show.h b/bin/sh/show.h index 83f84afcc8a..4528fb19a41 100644 --- a/bin/sh/show.h +++ b/bin/sh/show.h @@ -35,6 +35,6 @@ void showtree(union node *); void sh_trace(const char *, ...) __printflike(1, 2); void trargs(char **); void trputc(int); -void trputs(char *); +void trputs(const char *); void opentrace(void); #endif diff --git a/bin/sh/trap.c b/bin/sh/trap.c index a0cd0ba14cd..3a6803b9d90 100644 --- a/bin/sh/trap.c +++ b/bin/sh/trap.c @@ -149,6 +149,7 @@ trapcmd(int argc, char **argv) { char *action; int signo; + int errors = 0; if (argc <= 1) { for (signo = 0 ; signo < sys_nsig ; signo++) { @@ -183,8 +184,10 @@ trapcmd(int argc, char **argv) } } while (*argv) { - if ((signo = sigstring_to_signum(*argv)) == -1) - error("bad signal %s", *argv); + if ((signo = sigstring_to_signum(*argv)) == -1) { + out2fmt_flush("trap: bad signal %s\n", *argv); + errors = 1; + } INTOFF; if (action) action = savestr(action); @@ -196,7 +199,7 @@ trapcmd(int argc, char **argv) INTON; argv++; } - return 0; + return errors; } @@ -244,7 +247,8 @@ void setsignal(int signo) { int action; - sig_t sig, sigact = SIG_DFL; + sig_t sigact = SIG_DFL; + struct sigaction sa; char *t; if ((t = trap[signo]) == NULL) @@ -320,9 +324,10 @@ setsignal(int signo) case S_IGN: sigact = SIG_IGN; break; } *t = action; - sig = signal(signo, sigact); - if (sig != SIG_ERR && action == S_CATCH) - siginterrupt(signo, 1); + sa.sa_handler = sigact; + sa.sa_flags = 0; + sigemptyset(&sa.sa_mask); + sigaction(signo, &sa, NULL); } diff --git a/bin/sh/trap.h b/bin/sh/trap.h index 672ad08d481..8cc05da54de 100644 --- a/bin/sh/trap.h +++ b/bin/sh/trap.h @@ -45,4 +45,4 @@ void ignoresig(int); void onsig(int); void dotrap(void); void setinteractive(int); -void exitshell(int); +void exitshell(int) __dead2; diff --git a/bin/sh/var.c b/bin/sh/var.c index 2c1caf14800..0a8060499f5 100644 --- a/bin/sh/var.c +++ b/bin/sh/var.c @@ -73,7 +73,7 @@ __FBSDID("$FreeBSD$"); struct varinit { struct var *var; int flags; - char *text; + const char *text; void (*func)(const char *); }; @@ -94,27 +94,27 @@ STATIC struct var voptind; STATIC const struct varinit varinit[] = { #ifndef NO_HISTORY - { &vhistsize, VSTRFIXED|VTEXTFIXED|VUNSET, "HISTSIZE=", + { &vhistsize, VUNSET, "HISTSIZE=", sethistsize }, #endif - { &vifs, VSTRFIXED|VTEXTFIXED, "IFS= \t\n", + { &vifs, 0, "IFS= \t\n", NULL }, - { &vmail, VSTRFIXED|VTEXTFIXED|VUNSET, "MAIL=", + { &vmail, VUNSET, "MAIL=", NULL }, - { &vmpath, VSTRFIXED|VTEXTFIXED|VUNSET, "MAILPATH=", + { &vmpath, VUNSET, "MAILPATH=", NULL }, - { &vpath, VSTRFIXED|VTEXTFIXED, "PATH=" _PATH_DEFPATH, + { &vpath, 0, "PATH=" _PATH_DEFPATH, changepath }, - { &vppid, VSTRFIXED|VTEXTFIXED|VUNSET, "PPID=", + { &vppid, VUNSET, "PPID=", NULL }, /* * vps1 depends on uid */ - { &vps2, VSTRFIXED|VTEXTFIXED, "PS2=> ", + { &vps2, 0, "PS2=> ", NULL }, - { &vps4, VSTRFIXED|VTEXTFIXED, "PS4=+ ", + { &vps4, 0, "PS4=+ ", NULL }, - { &voptind, VSTRFIXED|VTEXTFIXED, "OPTIND=1", + { &voptind, 0, "OPTIND=1", getoptsreset }, { NULL, 0, NULL, NULL } @@ -122,9 +122,9 @@ STATIC const struct varinit varinit[] = { STATIC struct var *vartab[VTABSIZE]; -STATIC struct var **hashvar(char *); -STATIC int varequal(char *, char *); -STATIC int localevar(char *); +STATIC struct var **hashvar(const char *); +STATIC int varequal(const char *, const char *); +STATIC int localevar(const char *); /* * Initialize the variable symbol tables and import the environment. @@ -132,9 +132,9 @@ STATIC int localevar(char *); #ifdef mkinit INCLUDE "var.h" +MKINIT char **environ; INIT { char **envp; - extern char **environ; initvar(); for (envp = environ ; *envp ; envp++) { @@ -164,8 +164,8 @@ initvar(void) vpp = hashvar(ip->text); vp->next = *vpp; *vpp = vp; - vp->text = ip->text; - vp->flags = ip->flags; + vp->text = __DECONST(char *, ip->text); + vp->flags = ip->flags | VSTRFIXED | VTEXTFIXED; vp->func = ip->func; } } @@ -176,7 +176,7 @@ initvar(void) vpp = hashvar("PS1="); vps1.next = *vpp; *vpp = &vps1; - vps1.text = geteuid() ? "PS1=$ " : "PS1=# "; + vps1.text = __DECONST(char *, geteuid() ? "PS1=$ " : "PS1=# "); vps1.flags = VSTRFIXED|VTEXTFIXED; } if ((vppid.flags & VEXPORT) == 0) { @@ -190,12 +190,14 @@ initvar(void) */ int -setvarsafe(char *name, char *val, int flags) +setvarsafe(const char *name, const char *val, int flags) { struct jmploc jmploc; struct jmploc *const savehandler = handler; int err = 0; + int inton; + inton = is_int_on(); if (setjmp(jmploc.loc)) err = 1; else { @@ -203,6 +205,7 @@ setvarsafe(char *name, char *val, int flags) setvar(name, val, flags); } handler = savehandler; + SETINTON(inton); return err; } @@ -212,9 +215,9 @@ setvarsafe(char *name, char *val, int flags) */ void -setvar(char *name, char *val, int flags) +setvar(const char *name, const char *val, int flags) { - char *p, *q; + const char *p; int len; int namelen; char *nameeq; @@ -242,25 +245,24 @@ setvar(char *name, char *val, int flags) } else { len += strlen(val); } - p = nameeq = ckmalloc(len); - q = name; - while (--namelen >= 0) - *p++ = *q++; - *p++ = '='; - *p = '\0'; + nameeq = ckmalloc(len); + memcpy(nameeq, name, namelen); + nameeq[namelen] = '='; if (val) - scopy(val, p); + scopy(val, nameeq + namelen + 1); + else + nameeq[namelen + 1] = '\0'; setvareq(nameeq, flags); } STATIC int -localevar(char *s) +localevar(const char *s) { - static char *lnames[7] = { + static const char *lnames[7] = { "ALL", "COLLATE", "CTYPE", "MONETARY", "NUMERIC", "TIME", NULL }; - char **ss; + const char **ss; if (*s != 'L') return 0; @@ -280,7 +282,7 @@ localevar(char *s) * pointer into environ where the string should not be manipulated. */ static void -change_env(char *s, int set) +change_env(const char *s, int set) { char *eqp; char *ss; @@ -386,7 +388,7 @@ listsetvar(struct strlist *list) */ char * -lookupvar(char *name) +lookupvar(const char *name) { struct var *v; @@ -409,7 +411,7 @@ lookupvar(char *name) */ char * -bltinlookup(char *name, int doall) +bltinlookup(const char *name, int doall) { struct strlist *sp; struct var *v; @@ -467,9 +469,9 @@ environment(void) * VSTACK set since these are currently allocated on the stack. */ -#ifdef mkinit MKINIT void shprocvar(void); +#ifdef mkinit SHELLPROC { shprocvar(); } @@ -604,7 +606,6 @@ exportcmd(int argc, char **argv) if (values && argc != 0) error("-p requires no arguments"); - listsetvar(cmdenviron); if (argc != 0) { while ((name = *argv++) != NULL) { if ((p = strchr(name, '=')) != NULL) { @@ -794,7 +795,7 @@ unsetcmd(int argc __unused, char **argv __unused) */ int -unsetvar(char *s) +unsetvar(const char *s) { struct var **vpp; struct var *vp; @@ -834,7 +835,7 @@ unsetvar(char *s) */ STATIC struct var ** -hashvar(char *p) +hashvar(const char *p) { unsigned int hashval; @@ -853,7 +854,7 @@ hashvar(char *p) */ STATIC int -varequal(char *p, char *q) +varequal(const char *p, const char *q) { while (*p == *q++) { if (*p++ == '=') diff --git a/bin/sh/var.h b/bin/sh/var.h index c1f994b8cb8..9c792c846ca 100644 --- a/bin/sh/var.h +++ b/bin/sh/var.h @@ -101,14 +101,13 @@ extern struct var vhistsize; #define mpathset() ((vmpath.flags & VUNSET) == 0) void initvar(void); -void setvar(char *, char *, int); +void setvar(const char *, const char *, int); void setvareq(char *, int); struct strlist; void listsetvar(struct strlist *); -char *lookupvar(char *); -char *bltinlookup(char *, int); +char *lookupvar(const char *); +char *bltinlookup(const char *, int); char **environment(void); -void shprocvar(void); int showvarscmd(int, char **); int exportcmd(int, char **); int localcmd(int, char **); @@ -116,5 +115,5 @@ void mklocal(char *); void poplocalvars(void); int setvarcmd(int, char **); int unsetcmd(int, char **); -int unsetvar(char *); -int setvarsafe(char *, char *, int); +int unsetvar(const char *); +int setvarsafe(const char *, const char *, int); diff --git a/cddl/contrib/opensolaris/cmd/zdb/zdb_il.c b/cddl/contrib/opensolaris/cmd/zdb/zdb_il.c index 02d35a05033..cc08ef51485 100644 --- a/cddl/contrib/opensolaris/cmd/zdb/zdb_il.c +++ b/cddl/contrib/opensolaris/cmd/zdb/zdb_il.c @@ -19,12 +19,10 @@ * CDDL HEADER END */ /* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - /* * Print intent log header and statistics. */ @@ -345,8 +343,10 @@ dump_intent_log(zilog_t *zilog) if (zh->zh_log.blk_birth == 0 || verbose < 2) return; - (void) printf("\n ZIL header: claim_txg %llu, seq %llu\n", - (u_longlong_t)zh->zh_claim_txg, (u_longlong_t)zh->zh_replay_seq); + (void) printf("\n ZIL header: claim_txg %llu, claim_seq %llu", + (u_longlong_t)zh->zh_claim_txg, (u_longlong_t)zh->zh_claim_seq); + (void) printf(" replay_seq %llu, flags 0x%llx\n", + (u_longlong_t)zh->zh_replay_seq, (u_longlong_t)zh->zh_flags); if (verbose >= 4) print_log_bp(&zh->zh_log, "\n\tfirst block: "); diff --git a/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c b/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c index 6f5f92ebc4e..d6bc6e129af 100644 --- a/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c +++ b/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -2457,7 +2457,7 @@ zfs_do_receive(int argc, char **argv) bzero(&flags, sizeof (recvflags_t)); /* check options */ - while ((c = getopt(argc, argv, ":dnvF")) != -1) { + while ((c = getopt(argc, argv, ":dnuvF")) != -1) { switch (c) { case 'd': flags.isprefix = B_TRUE; @@ -2465,6 +2465,9 @@ zfs_do_receive(int argc, char **argv) case 'n': flags.dryrun = B_TRUE; break; + case 'u': + flags.nomount = B_TRUE; + break; case 'v': flags.verbose = B_TRUE; break; diff --git a/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c b/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c index 2388df9ac99..297037178a9 100644 --- a/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c +++ b/cddl/contrib/opensolaris/cmd/zpool/zpool_main.c @@ -3488,6 +3488,8 @@ zpool_do_upgrade(int argc, char **argv) (void) printf(gettext(" 11 Improved scrub performance\n")); (void) printf(gettext(" 12 Snapshot properties\n")); (void) printf(gettext(" 13 snapused property\n")); + (void) printf(gettext(" 14 passthrough-x aclinherit " + "support\n")); (void) printf(gettext("For more information on a particular " "version, including supported releases, see:\n\n")); (void) printf("http://www.opensolaris.org/os/community/zfs/" diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h index 4e8efb4e73a..9a13bbbf542 100644 --- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h +++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h @@ -20,7 +20,7 @@ */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -457,6 +457,9 @@ typedef struct recvflags { /* byteswap flag is used internally; callers need not specify */ int byteswap : 1; + + /* do not mount file systems as they are extracted (private) */ + int nomount : 1; } recvflags_t; extern int zfs_receive(libzfs_handle_t *, const char *, recvflags_t, diff --git a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c index 5ee17fb8508..3516f6d60bd 100644 --- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c +++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c @@ -20,7 +20,7 @@ */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -2080,7 +2080,7 @@ zfs_receive(libzfs_handle_t *hdl, const char *tosnap, recvflags_t flags, err = zfs_receive_impl(hdl, tosnap, flags, infd, stream_avl, &top_zfs); - if (err == 0 && top_zfs) { + if (err == 0 && !flags.nomount && top_zfs) { zfs_handle_t *zhp; prop_changelist_t *clp; diff --git a/contrib/bind9/CHANGES b/contrib/bind9/CHANGES index 1f2c35a1411..fd065d0da2b 100644 --- a/contrib/bind9/CHANGES +++ b/contrib/bind9/CHANGES @@ -1,3 +1,9 @@ + --- 9.6.1-P2 released --- + +2772. [security] When validating, track whether pending data was from + the additional section or not and only return it if + validates as secure. [RT #20438] + --- 9.6.1-P1 released --- 2640. [security] A specially crafted update packet will cause named diff --git a/contrib/bind9/bin/named/query.c b/contrib/bind9/bin/named/query.c index ffd9b3554a7..602948497a4 100644 --- a/contrib/bind9/bin/named/query.c +++ b/contrib/bind9/bin/named/query.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: query.c,v 1.313.20.7 2009/03/13 01:38:51 marka Exp $ */ +/* $Id: query.c,v 1.313.20.7.12.1 2009/11/18 23:58:04 marka Exp $ */ /*! \file */ @@ -116,6 +116,8 @@ #define DNS_GETDB_NOLOG 0x02U #define DNS_GETDB_PARTIAL 0x04U +#define PENDINGOK(x) (((x) & DNS_DBFIND_PENDINGOK) != 0) + typedef struct client_additionalctx { ns_client_t *client; dns_rdataset_t *rdataset; @@ -1761,8 +1763,8 @@ query_addadditional2(void *arg, dns_name_t *name, dns_rdatatype_t qtype) { */ if (result == ISC_R_SUCCESS && additionaltype == dns_rdatasetadditional_fromcache && - (rdataset->trust == dns_trust_pending || - rdataset->trust == dns_trust_glue) && + (DNS_TRUST_PENDING(rdataset->trust) || + DNS_TRUST_GLUE(rdataset->trust)) && !validate(client, db, fname, rdataset, sigrdataset)) { dns_rdataset_disassociate(rdataset); if (dns_rdataset_isassociated(sigrdataset)) @@ -1801,8 +1803,8 @@ query_addadditional2(void *arg, dns_name_t *name, dns_rdatatype_t qtype) { */ if (result == ISC_R_SUCCESS && additionaltype == dns_rdatasetadditional_fromcache && - (rdataset->trust == dns_trust_pending || - rdataset->trust == dns_trust_glue) && + (DNS_TRUST_PENDING(rdataset->trust) || + DNS_TRUST_GLUE(rdataset->trust)) && !validate(client, db, fname, rdataset, sigrdataset)) { dns_rdataset_disassociate(rdataset); if (dns_rdataset_isassociated(sigrdataset)) @@ -2601,14 +2603,14 @@ query_addbestns(ns_client_t *client) { /* * Attempt to validate RRsets that are pending or that are glue. */ - if ((rdataset->trust == dns_trust_pending || - (sigrdataset != NULL && sigrdataset->trust == dns_trust_pending)) + if ((DNS_TRUST_PENDING(rdataset->trust) || + (sigrdataset != NULL && DNS_TRUST_PENDING(sigrdataset->trust))) && !validate(client, db, fname, rdataset, sigrdataset) && - (client->query.dboptions & DNS_DBFIND_PENDINGOK) == 0) + !PENDINGOK(client->query.dboptions)) goto cleanup; - if ((rdataset->trust == dns_trust_glue || - (sigrdataset != NULL && sigrdataset->trust == dns_trust_glue)) && + if ((DNS_TRUST_GLUE(rdataset->trust) || + (sigrdataset != NULL && DNS_TRUST_GLUE(sigrdataset->trust))) && !validate(client, db, fname, rdataset, sigrdataset) && SECURE(client) && WANTDNSSEC(client)) goto cleanup; @@ -3716,6 +3718,8 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype) dns_rdataset_t *noqname; isc_boolean_t resuming; int line = -1; + dns_rdataset_t tmprdataset; + unsigned int dboptions; CTRACE("query_find"); @@ -3933,9 +3937,49 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype) /* * Now look for an answer in the database. */ + dboptions = client->query.dboptions; + if (sigrdataset == NULL && client->view->enablednssec) { + /* + * If the client doesn't want DNSSEC we still want to + * look for any data pending validation to save a remote + * lookup if possible. + */ + dns_rdataset_init(&tmprdataset); + sigrdataset = &tmprdataset; + dboptions |= DNS_DBFIND_PENDINGOK; + } + refind: result = dns_db_find(db, client->query.qname, version, type, - client->query.dboptions, client->now, - &node, fname, rdataset, sigrdataset); + dboptions, client->now, &node, fname, + rdataset, sigrdataset); + /* + * If we have found pending data try to validate it. + * If the data does not validate as secure and we can't + * use the unvalidated data requery the database with + * pending disabled to prevent infinite looping. + */ + if (result != ISC_R_SUCCESS || !DNS_TRUST_PENDING(rdataset->trust)) + goto validation_done; + if (validate(client, db, fname, rdataset, sigrdataset)) + goto validation_done; + if (rdataset->trust != dns_trust_pending_answer || + !PENDINGOK(client->query.dboptions)) { + dns_rdataset_disassociate(rdataset); + if (sigrdataset != NULL && + dns_rdataset_isassociated(sigrdataset)) + dns_rdataset_disassociate(sigrdataset); + if (sigrdataset == &tmprdataset) + sigrdataset = NULL; + dns_db_detachnode(db, &node); + dboptions &= ~DNS_DBFIND_PENDINGOK; + goto refind; + } + validation_done: + if (sigrdataset == &tmprdataset) { + if (dns_rdataset_isassociated(sigrdataset)) + dns_rdataset_disassociate(sigrdataset); + sigrdataset = NULL; + } resume: CTRACE("query_find: resume"); diff --git a/contrib/bind9/lib/dns/api b/contrib/bind9/lib/dns/api index af155ca8f5f..4bcf883246c 100644 --- a/contrib/bind9/lib/dns/api +++ b/contrib/bind9/lib/dns/api @@ -1,3 +1,3 @@ -LIBINTERFACE = 52 +LIBINTERFACE = 53 LIBREVISION = 0 -LIBAGE = 2 +LIBAGE = 0 diff --git a/contrib/bind9/lib/dns/include/dns/types.h b/contrib/bind9/lib/dns/include/dns/types.h index e07a7965bff..8c7773c3160 100644 --- a/contrib/bind9/lib/dns/include/dns/types.h +++ b/contrib/bind9/lib/dns/include/dns/types.h @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: types.h,v 1.130.50.3 2009/01/29 22:40:35 jinmei Exp $ */ +/* $Id: types.h,v 1.130.50.3.12.1 2009/11/18 23:58:04 marka Exp $ */ #ifndef DNS_TYPES_H #define DNS_TYPES_H 1 @@ -258,40 +258,52 @@ enum { dns_trust_none = 0, #define dns_trust_none ((dns_trust_t)dns_trust_none) - /*% Subject to DNSSEC validation but has not yet been validated */ - dns_trust_pending = 1, -#define dns_trust_pending ((dns_trust_t)dns_trust_pending) + /*% + * Subject to DNSSEC validation but has not yet been validated + * dns_trust_pending_additional (from the additional section). + */ + dns_trust_pending_additional = 1, +#define dns_trust_pending_additional \ + ((dns_trust_t)dns_trust_pending_additional) + + dns_trust_pending_answer = 2, +#define dns_trust_pending_answer ((dns_trust_t)dns_trust_pending_answer) /*% Received in the additional section of a response. */ - dns_trust_additional = 2, + dns_trust_additional = 3, #define dns_trust_additional ((dns_trust_t)dns_trust_additional) /* Received in a referral response. */ - dns_trust_glue = 3, + dns_trust_glue = 4, #define dns_trust_glue ((dns_trust_t)dns_trust_glue) /* Answer from a non-authoritative server */ - dns_trust_answer = 4, + dns_trust_answer = 5, #define dns_trust_answer ((dns_trust_t)dns_trust_answer) /* Received in the authority section as part of an authoritative response */ - dns_trust_authauthority = 5, + dns_trust_authauthority = 6, #define dns_trust_authauthority ((dns_trust_t)dns_trust_authauthority) /* Answer from an authoritative server */ - dns_trust_authanswer = 6, + dns_trust_authanswer = 7, #define dns_trust_authanswer ((dns_trust_t)dns_trust_authanswer) /* Successfully DNSSEC validated */ - dns_trust_secure = 7, + dns_trust_secure = 8, #define dns_trust_secure ((dns_trust_t)dns_trust_secure) /* This server is authoritative */ - dns_trust_ultimate = 8 + dns_trust_ultimate = 9 #define dns_trust_ultimate ((dns_trust_t)dns_trust_ultimate) }; +#define DNS_TRUST_PENDING(x) ((x) == dns_trust_pending_answer || \ + (x) == dns_trust_pending_additional) +#define DNS_TRUST_GLUE(x) ((x) == dns_trust_glue) + + /*% * Name checking severities. */ diff --git a/contrib/bind9/lib/dns/masterdump.c b/contrib/bind9/lib/dns/masterdump.c index 5eac96ff280..1dbb1e615e8 100644 --- a/contrib/bind9/lib/dns/masterdump.c +++ b/contrib/bind9/lib/dns/masterdump.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: masterdump.c,v 1.94.50.2 2009/01/18 23:47:40 tbox Exp $ */ +/* $Id: masterdump.c,v 1.94.50.2.12.1 2009/11/18 23:58:04 marka Exp $ */ /*! \file */ @@ -775,7 +775,8 @@ dump_order_compare(const void *a, const void *b) { static const char *trustnames[] = { "none", - "pending", + "pending-additional", + "pending-answer", "additional", "glue", "answer", diff --git a/contrib/bind9/lib/dns/rbtdb.c b/contrib/bind9/lib/dns/rbtdb.c index 9741c157f78..b163441d43b 100644 --- a/contrib/bind9/lib/dns/rbtdb.c +++ b/contrib/bind9/lib/dns/rbtdb.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: rbtdb.c,v 1.270.12.6 2009/05/06 23:34:30 jinmei Exp $ */ +/* $Id: rbtdb.c,v 1.270.12.6.10.1 2009/11/18 23:58:04 marka Exp $ */ /*! \file */ @@ -4005,7 +4005,7 @@ cache_zonecut_callback(dns_rbtnode_t *node, dns_name_t *name, void *arg) { } if (dname_header != NULL && - (dname_header->trust != dns_trust_pending || + (!DNS_TRUST_PENDING(dname_header->trust) || (search->options & DNS_DBFIND_PENDINGOK) != 0)) { /* * We increment the reference count on node to ensure that @@ -4548,7 +4548,7 @@ cache_find(dns_db_t *db, dns_name_t *name, dns_dbversion_t *version, if (found == NULL || (found->trust == dns_trust_glue && ((options & DNS_DBFIND_GLUEOK) == 0)) || - (found->trust == dns_trust_pending && + (DNS_TRUST_PENDING(found->trust) && ((options & DNS_DBFIND_PENDINGOK) == 0))) { /* * If there is an NS rdataset at this node, then this is the diff --git a/contrib/bind9/lib/dns/resolver.c b/contrib/bind9/lib/dns/resolver.c index a5d7c2500f8..3b90af4400c 100644 --- a/contrib/bind9/lib/dns/resolver.c +++ b/contrib/bind9/lib/dns/resolver.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: resolver.c,v 1.384.14.14 2009/06/02 23:47:13 tbox Exp $ */ +/* $Id: resolver.c,v 1.384.14.14.8.1 2009/11/18 23:58:04 marka Exp $ */ /*! \file */ @@ -4293,6 +4293,7 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo, * for it, unless it is glue. */ if (secure_domain && rdataset->trust != dns_trust_glue) { + dns_trust_t trust; /* * RRSIGs are validated as part of validating the * type they cover. @@ -4329,12 +4330,34 @@ cache_name(fetchctx_t *fctx, dns_name_t *name, dns_adbaddrinfo_t *addrinfo, } /* - * Cache this rdataset/sigrdataset pair as - * pending data. + * Reject out of bailiwick additional records + * without RRSIGs as they can't possibly validate + * as "secure" and as we will never never want to + * store these as "answers" after validation. */ - rdataset->trust = dns_trust_pending; + if (rdataset->trust == dns_trust_additional && + sigrdataset == NULL && EXTERNAL(rdataset)) + continue; + + /* + * XXXMPA: If we store as "answer" after validating + * then we need to do bailiwick processing and + * also need to track whether RRsets are in or + * out of bailiwick. This will require a another + * pending trust level. + * + * Cache this rdataset/sigrdataset pair as + * pending data. Track whether it was additional + * or not. + */ + if (rdataset->trust == dns_trust_additional) + trust = dns_trust_pending_additional; + else + trust = dns_trust_pending_answer; + + rdataset->trust = trust; if (sigrdataset != NULL) - sigrdataset->trust = dns_trust_pending; + sigrdataset->trust = trust; if (!need_validation || !ANSWER(rdataset)) { addedrdataset = ardataset; result = dns_db_addrdataset(fctx->cache, node, @@ -4682,7 +4705,7 @@ ncache_message(fetchctx_t *fctx, dns_adbaddrinfo_t *addrinfo, for (trdataset = ISC_LIST_HEAD(tname->list); trdataset != NULL; trdataset = ISC_LIST_NEXT(trdataset, link)) - trdataset->trust = dns_trust_pending; + trdataset->trust = dns_trust_pending_answer; result = dns_message_nextname(fctx->rmessage, DNS_SECTION_AUTHORITY); } diff --git a/contrib/bind9/lib/dns/validator.c b/contrib/bind9/lib/dns/validator.c index c62b714162b..46a74919c82 100644 --- a/contrib/bind9/lib/dns/validator.c +++ b/contrib/bind9/lib/dns/validator.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: validator.c,v 1.164.12.9 2009/05/07 23:47:12 tbox Exp $ */ +/* $Id: validator.c,v 1.164.12.9.8.1 2009/11/18 23:58:04 marka Exp $ */ #include @@ -1607,7 +1607,7 @@ get_key(dns_validator_t *val, dns_rdata_rrsig_t *siginfo) { * We have an rrset for the given keyname. */ val->keyset = &val->frdataset; - if (val->frdataset.trust == dns_trust_pending && + if (DNS_TRUST_PENDING(val->frdataset.trust) && dns_rdataset_isassociated(&val->fsigrdataset)) { /* @@ -1622,7 +1622,7 @@ get_key(dns_validator_t *val, dns_rdata_rrsig_t *siginfo) { if (result != ISC_R_SUCCESS) return (result); return (DNS_R_WAIT); - } else if (val->frdataset.trust == dns_trust_pending) { + } else if (DNS_TRUST_PENDING(val->frdataset.trust)) { /* * Having a pending key with no signature means that * something is broken. @@ -2243,7 +2243,7 @@ validatezonekey(dns_validator_t *val) { * We have DS records. */ val->dsset = &val->frdataset; - if (val->frdataset.trust == dns_trust_pending && + if (DNS_TRUST_PENDING(val->frdataset.trust) && dns_rdataset_isassociated(&val->fsigrdataset)) { result = create_validator(val, @@ -2256,7 +2256,7 @@ validatezonekey(dns_validator_t *val) { if (result != ISC_R_SUCCESS) return (result); return (DNS_R_WAIT); - } else if (val->frdataset.trust == dns_trust_pending) { + } else if (DNS_TRUST_PENDING(val->frdataset.trust)) { /* * There should never be an unsigned DS. */ @@ -3337,7 +3337,7 @@ proveunsecure(dns_validator_t *val, isc_boolean_t have_ds, isc_boolean_t resume) * There is no DS. If this is a delegation, * we maybe done. */ - if (val->frdataset.trust == dns_trust_pending) { + if (DNS_TRUST_PENDING(val->frdataset.trust)) { result = create_fetch(val, tname, dns_rdatatype_ds, dsfetched2, diff --git a/contrib/bind9/lib/isc/ia64/include/isc/atomic.h b/contrib/bind9/lib/isc/ia64/include/isc/atomic.h index 275741bee33..0fac76f3be2 100644 --- a/contrib/bind9/lib/isc/ia64/include/isc/atomic.h +++ b/contrib/bind9/lib/isc/ia64/include/isc/atomic.h @@ -41,7 +41,7 @@ isc_atomic_xadd(isc_int32_t *p, isc_int32_t val) for (prev = *(volatile isc_int32_t *)p; ; prev = swapped) { swapped = prev + val; __asm__ volatile( - "mov ar.ccv=%2;" + "mov ar.ccv=%2;;" "cmpxchg4.acq %0=%4,%3,ar.ccv" : "=r" (swapped), "=m" (*p) : "r" (prev), "r" (swapped), "m" (*p) @@ -84,7 +84,7 @@ isc_atomic_cmpxchg(isc_int32_t *p, isc_int32_t cmpval, isc_int32_t val) isc_int32_t ret; __asm__ volatile( - "mov ar.ccv=%2;" + "mov ar.ccv=%2;;" "cmpxchg4.acq %0=%4,%3,ar.ccv" : "=r" (ret), "=m" (*p) : "r" (cmpval), "r" (val), "m" (*p) diff --git a/contrib/bind9/version b/contrib/bind9/version index 3245f02d3fd..ccb7b87efb2 100644 --- a/contrib/bind9/version +++ b/contrib/bind9/version @@ -1,4 +1,4 @@ -# $Id: version,v 1.43.12.5.8.1 2009/07/28 14:18:08 marka Exp $ +# $Id: version,v 1.43.12.5.8.2 2009/11/18 23:58:04 marka Exp $ # # This file must follow /bin/sh rules. It is imported directly via # configure. @@ -7,4 +7,4 @@ MAJORVER=9 MINORVER=6 PATCHVER=1 RELEASETYPE=-P -RELEASEVER=1 +RELEASEVER=2 diff --git a/contrib/bsnmp/snmp_mibII/BEGEMOT-MIB2-MIB.txt b/contrib/bsnmp/snmp_mibII/BEGEMOT-MIB2-MIB.txt index 32cf7a63385..fa0dba37a2b 100644 --- a/contrib/bsnmp/snmp_mibII/BEGEMOT-MIB2-MIB.txt +++ b/contrib/bsnmp/snmp_mibII/BEGEMOT-MIB2-MIB.txt @@ -39,7 +39,7 @@ IMPORTS FROM BEGEMOT-IP-MIB; begemotMib2 MODULE-IDENTITY - LAST-UPDATED "200602130000Z" + LAST-UPDATED "200908030000Z" ORGANIZATION "German Aerospace Center" CONTACT-INFO " Hartmut Brandt @@ -54,6 +54,12 @@ begemotMib2 MODULE-IDENTITY E-mail: harti@freebsd.org" DESCRIPTION "The MIB for private mib2 stuff." + REVISION "200908030000Z" + DESCRIPTION + "Second edition adds begemotIfDataPoll object." + REVISION "200602130000Z" + DESCRIPTION + "Initial revision." ::= { begemotIp 1 } begemotIfMaxspeed OBJECT-TYPE @@ -87,4 +93,14 @@ begemotIfForcePoll OBJECT-TYPE bit rate in its MIB." ::= { begemotMib2 3 } +begemotIfDataPoll OBJECT-TYPE + SYNTAX TimeTicks + UNITS "deciseconds" + MAX-ACCESS read-write + STATUS current + DESCRIPTION + "The rate at which the mib2 module will poll interface data." + DEFVAL { 100 } + ::= { begemotMib2 4 } + END diff --git a/contrib/bsnmp/snmp_mibII/mibII.c b/contrib/bsnmp/snmp_mibII/mibII.c index cd4caacdd5e..87146951844 100644 --- a/contrib/bsnmp/snmp_mibII/mibII.c +++ b/contrib/bsnmp/snmp_mibII/mibII.c @@ -117,6 +117,15 @@ u_int mibif_hc_update_interval; /* HC update timer handle */ static void *hc_update_timer; +/* Idle poll timer */ +static void *mibII_poll_timer; + +/* interfaces' data poll interval */ +u_int mibII_poll_ticks; + +/* Idle poll hook */ +static void mibII_idle(void *arg __unused); + /*****************************/ static const struct asn_oid oid_ifMIB = OIDX_ifMIB; @@ -410,6 +419,20 @@ mibif_reset_hc_timer(void) mibif_hc_update_interval = ticks; } +/** + * Restart the idle poll timer. + */ +void +mibif_restart_mibII_poll_timer(void) +{ + if (mibII_poll_timer != NULL) + timer_stop(mibII_poll_timer); + + if ((mibII_poll_timer = timer_start_repeat(mibII_poll_ticks * 10, + mibII_poll_ticks * 10, mibII_idle, NULL, module)) == NULL) + syslog(LOG_ERR, "timer_start(%u): %m", mibII_poll_ticks); +} + /* * Fetch new MIB data. */ @@ -1553,7 +1576,7 @@ get_cloners(void) * Idle function */ static void -mibII_idle(void) +mibII_idle(void *arg __unused) { struct mibifa *ifa; @@ -1608,6 +1631,10 @@ mibII_start(void) ipForward_reg = or_register(&oid_ipForward, "The MIB module for the display of CIDR multipath IP Routes.", module); + + mibII_poll_timer = NULL; + mibII_poll_ticks = MIBII_POLL_TICKS; + mibif_restart_mibII_poll_timer(); } /* @@ -1651,6 +1678,11 @@ mibII_init(struct lmodule *mod, int argc __unused, char *argv[] __unused) static int mibII_fini(void) { + if (mibII_poll_timer != NULL ) { + timer_stop(mibII_poll_timer); + mibII_poll_timer = NULL; + } + if (route_fd != NULL) fd_deselect(route_fd); if (route != -1) @@ -1690,7 +1722,7 @@ const struct snmp_module config = { "This module implements the interface and ip groups.", mibII_init, mibII_fini, - mibII_idle, /* idle */ + NULL, /* idle */ NULL, /* dump */ NULL, /* config */ mibII_start, diff --git a/contrib/bsnmp/snmp_mibII/mibII.h b/contrib/bsnmp/snmp_mibII/mibII.h index a21e023be5c..0ebde9a9f9e 100644 --- a/contrib/bsnmp/snmp_mibII/mibII.h +++ b/contrib/bsnmp/snmp_mibII/mibII.h @@ -211,6 +211,14 @@ extern u_int mibif_hc_update_interval; /* re-compute update interval */ void mibif_reset_hc_timer(void); +/* interfaces' data poll interval */ +extern u_int mibII_poll_ticks; + +/* restart the data poll timer */ +void mibif_restart_mibII_poll_timer(void); + +#define MIBII_POLL_TICKS 100 + /* get interfaces and interface addresses. */ void mib_fetch_interfaces(void); diff --git a/contrib/bsnmp/snmp_mibII/mibII_begemot.c b/contrib/bsnmp/snmp_mibII/mibII_begemot.c index 5841b814413..b502e954778 100644 --- a/contrib/bsnmp/snmp_mibII/mibII_begemot.c +++ b/contrib/bsnmp/snmp_mibII/mibII_begemot.c @@ -59,6 +59,11 @@ op_begemot_mibII(struct snmp_context *ctx __unused, struct snmp_value *value, ctx->scratch->int1 = mibif_force_hc_update_interval; mibif_force_hc_update_interval = value->v.uint32; return (SNMP_ERR_NOERROR); + + case LEAF_begemotIfDataPoll: + ctx->scratch->int1 = mibII_poll_ticks; + mibII_poll_ticks = value->v.uint32; + return (SNMP_ERR_NOERROR); } abort(); @@ -68,6 +73,10 @@ op_begemot_mibII(struct snmp_context *ctx __unused, struct snmp_value *value, case LEAF_begemotIfForcePoll: mibif_force_hc_update_interval = ctx->scratch->int1; return (SNMP_ERR_NOERROR); + + case LEAF_begemotIfDataPoll: + mibII_poll_ticks = ctx->scratch->int1; + return (SNMP_ERR_NOERROR); } abort(); @@ -78,6 +87,10 @@ op_begemot_mibII(struct snmp_context *ctx __unused, struct snmp_value *value, mibif_force_hc_update_interval = ctx->scratch->int1; mibif_reset_hc_timer(); return (SNMP_ERR_NOERROR); + + case LEAF_begemotIfDataPoll: + mibif_restart_mibII_poll_timer(); + return (SNMP_ERR_NOERROR); } abort(); } @@ -98,6 +111,10 @@ op_begemot_mibII(struct snmp_context *ctx __unused, struct snmp_value *value, case LEAF_begemotIfForcePoll: value->v.uint32 = mibif_force_hc_update_interval; return (SNMP_ERR_NOERROR); + + case LEAF_begemotIfDataPoll: + value->v.uint32 = mibII_poll_ticks; + return (SNMP_ERR_NOERROR); } abort(); } diff --git a/contrib/bsnmp/snmp_mibII/mibII_tree.def b/contrib/bsnmp/snmp_mibII/mibII_tree.def index 90fbb03ae21..d3775389933 100644 --- a/contrib/bsnmp/snmp_mibII/mibII_tree.def +++ b/contrib/bsnmp/snmp_mibII/mibII_tree.def @@ -240,6 +240,7 @@ (1 begemotIfMaxspeed COUNTER64 op_begemot_mibII GET) (2 begemotIfPoll TIMETICKS op_begemot_mibII GET) (3 begemotIfForcePoll TIMETICKS op_begemot_mibII GET SET) + (4 begemotIfDataPoll TIMETICKS op_begemot_mibII GET SET) ) ) ) diff --git a/contrib/expat/lib/xmlparse.c b/contrib/expat/lib/xmlparse.c index 94e31de9da3..e111460d0a3 100644 --- a/contrib/expat/lib/xmlparse.c +++ b/contrib/expat/lib/xmlparse.c @@ -3725,7 +3725,6 @@ doProlog(XML_Parser parser, return XML_ERROR_NO_ELEMENTS; default: tok = -tok; - next = end; break; } } diff --git a/contrib/expat/lib/xmltok_impl.c b/contrib/expat/lib/xmltok_impl.c index 12688192522..16dfb85f031 100644 --- a/contrib/expat/lib/xmltok_impl.c +++ b/contrib/expat/lib/xmltok_impl.c @@ -1744,7 +1744,7 @@ PREFIX(updatePosition)(const ENCODING *enc, const char *end, POSITION *pos) { - while (ptr != end) { + while (ptr < end) { switch (BYTE_TYPE(enc, ptr)) { #define LEAD_CASE(n) \ case BT_LEAD ## n: \ diff --git a/contrib/gcc/config/freebsd-spec.h b/contrib/gcc/config/freebsd-spec.h index 06735c8874e..5cd57b0bf61 100644 --- a/contrib/gcc/config/freebsd-spec.h +++ b/contrib/gcc/config/freebsd-spec.h @@ -103,9 +103,10 @@ Boston, MA 02110-1301, USA. */ %{p:gcrt1.o%s} \ %{!p: \ %{profile:gcrt1.o%s} \ - %{!profile:crt1.o%s}}}} \ + %{!profile: \ + %{pie: Scrt1.o%s;:crt1.o%s}}}}} \ crti.o%s \ - %{static:crtbeginT.o%s;shared:crtbeginS.o%s;:crtbegin.o%s}" + %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" /* Provide an ENDFILE_SPEC appropriate for FreeBSD/i386. Here we tack on our own magical crtend.o file (see crtstuff.c) which provides part of @@ -113,8 +114,7 @@ Boston, MA 02110-1301, USA. */ entering `main', followed by the normal "finalizer" file, `crtn.o'. */ #define FBSD_ENDFILE_SPEC "\ - %{!shared:crtend.o%s} \ - %{shared:crtendS.o%s} \ + %{shared|pie:crtendS.o%s;:crtend.o%s} \ crtn.o%s " /* Provide a LIB_SPEC appropriate for FreeBSD as configured and as diff --git a/contrib/groff/tmac/doc-syms b/contrib/groff/tmac/doc-syms index 25cce80c744..18fb2048ec0 100644 --- a/contrib/groff/tmac/doc-syms +++ b/contrib/groff/tmac/doc-syms @@ -777,6 +777,7 @@ .ds doc-str-Lb-librt \*[Px] \*[doc-str-Lb]Real-time Library (librt, \-lrt) .ds doc-str-Lb-libtermcap Termcap Access Library (libtermcap, \-ltermcap) .ds doc-str-Lb-libusbhid USB Human Interface Devices Library (libusbhid, \-lusbhid) +.ds doc-str-Lb-libulog User Login Record Library (libulog, \-lulog) .ds doc-str-Lb-libutil System Utilities Library (libutil, \-lutil) .ds doc-str-Lb-libx86_64 x86_64 Architecture Library (libx86_64, \-lx86_64) .ds doc-str-Lb-libz Compression Library (libz, \-lz) diff --git a/contrib/ipfilter/man/ipf.8 b/contrib/ipfilter/man/ipf.8 index 678010f73d2..6e88a9dea99 100644 --- a/contrib/ipfilter/man/ipf.8 +++ b/contrib/ipfilter/man/ipf.8 @@ -46,7 +46,7 @@ supports \fBlanguage\fI. At present, the only target language supported is \fBC\fB (-cc) for which two files - \fBip_rules.c\fP and \fBip_rules.h\fP are generated in the \fBCURRENT DIRECTORY\fP when \fBipf\fP is being run. These files can be used with the -\fBIPFILTER_COMPILED\fP kernel option to build filter rules staticly into +\fBIPFILTER_COMPILED\fP kernel option to build filter rules staticlly into the kernel. .TP .B \-d diff --git a/contrib/libpcap/inet.c b/contrib/libpcap/inet.c index 8955f2c49d6..aad87963e78 100644 --- a/contrib/libpcap/inet.c +++ b/contrib/libpcap/inet.c @@ -403,30 +403,22 @@ add_addr_to_iflist(pcap_if_t **alldevs, const char *name, u_int flags, pcap_addr_t *curaddr, *prevaddr, *nextaddr; #ifdef SIOCGIFDESCR struct ifreq ifrdesc; -#ifdef __FreeBSD__ -#define _IFDESCRSIZE 64 - char ifdescr[_IFDESCRSIZE]; -#else char ifdescr[IFDESCRSIZE]; -#endif int s; +#endif +#ifdef SIOCGIFDESCR /* * Get the description for the interface. */ memset(&ifrdesc, 0, sizeof ifrdesc); strlcpy(ifrdesc.ifr_name, name, sizeof ifrdesc.ifr_name); -#ifdef __FreeBSD__ - ifrdesc.ifr_buffer.buffer = ifdescr; - ifrdesc.ifr_buffer.length = _IFDESCRSIZE; -#else ifrdesc.ifr_data = (caddr_t)&ifdescr; -#endif s = socket(AF_INET, SOCK_DGRAM, 0); if (s >= 0) { if (ioctl(s, SIOCGIFDESCR, &ifrdesc) == 0 && - strlen(ifdescr) != 0) - description = ifdescr; + strlen(ifrdesc.ifr_data) != 0) + description = ifrdesc.ifr_data; close(s); } #endif diff --git a/contrib/netcat/FREEBSD-vendor b/contrib/netcat/FREEBSD-vendor index 1009e388e2e..c78871fc112 100644 --- a/contrib/netcat/FREEBSD-vendor +++ b/contrib/netcat/FREEBSD-vendor @@ -1,5 +1,5 @@ # $FreeBSD$ Project: netcat (aka src/usr.bin/nc in OpenBSD) ProjectURL: http://www.openbsd.org/ -Version: 4.4 +Version: 4.5 License: BSD diff --git a/contrib/ntp/COPYRIGHT b/contrib/ntp/COPYRIGHT index f9184d7f33f..5497040471e 100644 --- a/contrib/ntp/COPYRIGHT +++ b/contrib/ntp/COPYRIGHT @@ -13,7 +13,7 @@ This file is automatically generated from html/copyright.html applies as if the text was explicitly included in the file. *********************************************************************** * * -* Copyright (c) David L. Mills 1992-2008 * +* Copyright (c) David L. Mills 1992-2009 * * * * Permission to use, copy, modify, and distribute this software and * * its documentation for any purpose with or without fee is hereby * diff --git a/contrib/ntp/ChangeLog b/contrib/ntp/ChangeLog index 3d193e202d2..60b7f0508ff 100644 --- a/contrib/ntp/ChangeLog +++ b/contrib/ntp/ChangeLog @@ -1,6 +1,85 @@ -(4.2.4p5) 2008/08/17 Released by Harlan Stenn --- -(4.2.4p5) 2008/08/17 Released by Harlan Stenn +(4.2.4p8) 2009/12/08 Released by Harlan Stenn + +* [Sec 1331] DoS with mode 7 packets - CVE-2009-3563. + +--- +(4.2.4p7) 2009/05/18 Released by Harlan Stenn + +* [Sec 1151] Remote exploit if autokey is enabled - CVE-2009-1252. +* [Bug 1187] Update the copyright date. +* [Bug 1191] ntpd fails on Win2000 - "Address already in use" after fix + for [Sec 1149]. + +--- +(4.2.4p7-RC7) 2009/05/12 Released by Harlan Stenn + +* ntp.isc.org -> ntp.org cleanup. +* [Bug 1178] Use prior FORCE_DNSRETRY behavior as needed at runtime, + add configure --enable-ignore-dns-errors to be even more stubborn + +--- +(4.2.4p7-RC6) 2009/05/08 Released by Harlan Stenn + +* [Bug 784] Make --enable-linuxcaps the default when available +* [Bug 1179] error messages for -u/--user and -i lacking droproot +* Updated JJY reference clock driver from Takao Abe +* [Bug 1071] Log a message and exit before trying to use FD_SET with a + descriptor larger than FD_SETSIZE, which will corrupt memory +* On corruption of the iface list head in add_interface, log and exit + +--- +(4.2.4p7-RC5) 2009/05/02 Released by Harlan Stenn + +* [Bug 1172] 4.2.4p7-RC{3,4} fail to build on linux. +* flock-build script unportable 'set -m' use removed + +--- +(4.2.4p7-RC4) 2009/04/29 Released by Harlan Stenn + +* [Bug 1167] use gcc -Winit-self only if it is understood + +--- +(4.2.4p7-RC3) 2009/04/22 Released by Harlan Stenn + +* [Bug 787] Bug fixes for 64-bit time_t on Windows +* [Bug 813] Conditional naming of Event +* [Bug 1147] System errors should be logged to msyslog() +* [Bug 1155] Fix compile problem on Windows with VS2005 +* [Bug 1156] lock_thread_to_processor() should be declared in header +* [Bug 1157] quiet OpenSSL warnings, clean up configure.ac +* [Bug 1158] support for aix6.1 +* [Bug 1160] MacOS X is like BSD regarding F_SETOWN + +--- +(4.2.4p7-RC2) 2009/04/09 Released by Harlan Stenn + +* [Sec 1144] limited buffer overflow in ntpq. CVE-2009-0159 +* [Sec 1149] use SO_EXCLUSIVEADDRUSE on Windows + +--- +(4.2.4p7-RC1) 2009/03/30 Released by Harlan Stenn + +* [Bug 1131] UDP sockets should not use SIGPOLL on Solaris. +* build system email address cleanup +* [Bug 774] parsesolaris.c does not compile under the new Solaris +* [Bug 873] Windows serial refclock proper TTY line discipline emulation +* [Bug 1014] Enable building with VC9 (in Visual Studio 2008, + Visual C++ 2008, or SDK) +* [Bug 1117] Deferred interface binding under Windows works only correctly + if FORCE_DNSRETRY is defined +* [BUG 1124] Lock QueryPerformanceCounter() client threads to same CPU +* DPRINTF macro made safer, always evaluates to a statement and will not + misassociate an else which follows the macro. + +--- +(4.2.4p6) 2009/01/08 Released by Harlan Stenn + +* [Bug 1113] Fixed build errors with recent versions of openSSL. +* [Sec 1111] Fix incorrect check of EVP_VerifyFinal()'s return value. +* Update the copyright year. + +--- (4.2.4p5) 2008/08/17 Released by Harlan Stenn * [BUG 1051] Month off by one in leap second message written to clockstats diff --git a/contrib/ntp/CommitLog b/contrib/ntp/CommitLog index 861e03d0dee..ade3be7044c 100644 --- a/contrib/ntp/CommitLog +++ b/contrib/ntp/CommitLog @@ -1,3 +1,1727 @@ +ChangeSet@1.1612, 2009-12-08 08:30:54-05:00, stenn@whimsy.udel.edu +1 -0 + ChangeLog: + typo + + ChangeLog@1.95, 2009-12-08 08:30:44-05:00, stenn@whimsy.udel.edu +0 -1 + typo + +ChangeSet@1.1611, 2009-12-08 08:23:12-05:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P8 + TAG: NTP_4_2_4P8 + + ChangeLog@1.94, 2009-12-08 08:23:01-05:00, stenn@whimsy.udel.edu +1 -0 + NTP_4_2_4P8 + + ntpd/ntpd-opts.c@1.86, 2009-12-08 08:23:02-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + + ntpd/ntpd-opts.h@1.86, 2009-12-08 08:23:02-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P8 + + ntpd/ntpd-opts.texi@1.85, 2009-12-08 08:23:03-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P8 + + ntpd/ntpd.1@1.84, 2009-12-08 08:23:03-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + + ntpd/ntpdsim-opts.c@1.86, 2009-12-08 08:23:03-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + + ntpd/ntpdsim-opts.h@1.86, 2009-12-08 08:23:04-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P8 + + ntpd/ntpdsim-opts.texi@1.84, 2009-12-08 08:23:05-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P8 + + ntpd/ntpdsim.1@1.84, 2009-12-08 08:23:05-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + + ntpdc/ntpdc-opts.c@1.86, 2009-12-08 08:23:05-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + + ntpdc/ntpdc-opts.h@1.86, 2009-12-08 08:23:05-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P8 + + ntpdc/ntpdc-opts.texi@1.84, 2009-12-08 08:23:06-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P8 + + ntpdc/ntpdc.1@1.84, 2009-12-08 08:23:06-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + + ntpq/ntpq-opts.c@1.88, 2009-12-08 08:23:06-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + + ntpq/ntpq-opts.h@1.88, 2009-12-08 08:23:06-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P8 + + ntpq/ntpq-opts.texi@1.85, 2009-12-08 08:23:07-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P8 + + ntpq/ntpq.1@1.84, 2009-12-08 08:23:07-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + + packageinfo.sh@1.118, 2009-12-08 08:23:07-05:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P8 + + sntp/sntp-opts.c@1.84, 2009-12-08 08:23:07-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + + sntp/sntp-opts.h@1.84, 2009-12-08 08:23:07-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P8 + + sntp/sntp-opts.texi@1.81, 2009-12-08 08:23:08-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P8 + + sntp/sntp.1@1.84, 2009-12-08 08:23:08-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + + util/ntp-keygen-opts.c@1.85, 2009-12-08 08:23:08-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + + util/ntp-keygen-opts.h@1.85, 2009-12-08 08:23:08-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P8 + + util/ntp-keygen-opts.texi@1.83, 2009-12-08 08:23:09-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P8 + + util/ntp-keygen.1@1.83, 2009-12-08 08:23:09-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P8 + +ChangeSet@1.1610, 2009-12-08 07:45:28-05:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P9_RC1 + TAG: NTP_4_2_4P9_RC1 + + ChangeLog@1.93, 2009-12-08 07:45:19-05:00, stenn@whimsy.udel.edu +1 -0 + NTP_4_2_4P9_RC1 + + ntpd/ntpd-opts.c@1.85, 2009-12-08 07:45:19-05:00, stenn@whimsy.udel.edu +5 -5 + NTP_4_2_4P9_RC1 + + ntpd/ntpd-opts.h@1.85, 2009-12-08 07:45:19-05:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P9_RC1 + + ntpd/ntpd-opts.texi@1.84, 2009-12-08 07:45:20-05:00, stenn@whimsy.udel.edu +13 -6 + NTP_4_2_4P9_RC1 + + ntpd/ntpd.1@1.83, 2009-12-08 07:45:20-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P9_RC1 + + ntpd/ntpdsim-opts.c@1.85, 2009-12-08 07:45:20-05:00, stenn@whimsy.udel.edu +5 -5 + NTP_4_2_4P9_RC1 + + ntpd/ntpdsim-opts.h@1.85, 2009-12-08 07:45:20-05:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P9_RC1 + + ntpd/ntpdsim-opts.texi@1.83, 2009-12-08 07:45:21-05:00, stenn@whimsy.udel.edu +61 -2 + NTP_4_2_4P9_RC1 + + ntpd/ntpdsim.1@1.83, 2009-12-08 07:45:21-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P9_RC1 + + ntpdc/ntpdc-opts.c@1.85, 2009-12-08 07:45:21-05:00, stenn@whimsy.udel.edu +5 -5 + NTP_4_2_4P9_RC1 + + ntpdc/ntpdc-opts.h@1.85, 2009-12-08 07:45:21-05:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P9_RC1 + + ntpdc/ntpdc-opts.texi@1.83, 2009-12-08 07:45:21-05:00, stenn@whimsy.udel.edu +7 -4 + NTP_4_2_4P9_RC1 + + ntpdc/ntpdc.1@1.83, 2009-12-08 07:45:22-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P9_RC1 + + ntpq/ntpq-opts.c@1.87, 2009-12-08 07:45:22-05:00, stenn@whimsy.udel.edu +5 -5 + NTP_4_2_4P9_RC1 + + ntpq/ntpq-opts.h@1.87, 2009-12-08 07:45:22-05:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P9_RC1 + + ntpq/ntpq-opts.texi@1.84, 2009-12-08 07:45:22-05:00, stenn@whimsy.udel.edu +8 -4 + NTP_4_2_4P9_RC1 + + ntpq/ntpq.1@1.83, 2009-12-08 07:45:23-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P9_RC1 + + packageinfo.sh@1.117, 2009-12-08 07:45:23-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P9_RC1 + + sntp/sntp-opts.c@1.83, 2009-12-08 07:45:23-05:00, stenn@whimsy.udel.edu +5 -5 + NTP_4_2_4P9_RC1 + + sntp/sntp-opts.h@1.83, 2009-12-08 07:45:23-05:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P9_RC1 + + sntp/sntp-opts.texi@1.80, 2009-12-08 07:45:24-05:00, stenn@whimsy.udel.edu +54 -2 + NTP_4_2_4P9_RC1 + + sntp/sntp.1@1.83, 2009-12-08 07:45:24-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P9_RC1 + + util/ntp-keygen-opts.c@1.84, 2009-12-08 07:45:24-05:00, stenn@whimsy.udel.edu +5 -5 + NTP_4_2_4P9_RC1 + + util/ntp-keygen-opts.h@1.84, 2009-12-08 07:45:24-05:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P9_RC1 + + util/ntp-keygen-opts.texi@1.82, 2009-12-08 07:45:24-05:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P9_RC1 + + util/ntp-keygen.1@1.82, 2009-12-08 07:45:25-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P9_RC1 + +ChangeSet@1.1609, 2009-12-08 05:36:47-05:00, stenn@whimsy.udel.edu +2 -0 + [Sec 1331] DoS with mode 7 packets - CVE-2009-3563 + + NEWS@1.102, 2009-12-08 05:36:36-05:00, stenn@whimsy.udel.edu +34 -0 + [Sec 1331] DoS with mode 7 packets - CVE-2009-3563 + + packageinfo.sh@1.116, 2009-12-08 05:36:36-05:00, stenn@whimsy.udel.edu +2 -2 + [Sec 1331] DoS with mode 7 packets - CVE-2009-3563 + +ChangeSet@1.1608, 2009-10-07 01:33:22+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + [Sec 1331] DoS with mode 7 packets - CVE-2009-3563. + + ChangeLog@1.92, 2009-10-07 01:33:21+00:00, davehart@shiny.ad.hartbrothers.com +4 -0 + [Sec 1331] DoS with mode 7 packets - CVE-2009-3563. + + ntpd/ntp_request.c@1.68, 2009-10-07 01:33:21+00:00, davehart@shiny.ad.hartbrothers.com +9 -2 + [Sec 1331] DoS with mode 7 packets - CVE-2009-3563. + +ChangeSet@1.1607, 2009-05-18 05:04:41-04:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P7 + TAG: NTP_4_2_4P7 + + ChangeLog@1.91, 2009-05-18 05:04:18-04:00, stenn@whimsy.udel.edu +1 -0 + NTP_4_2_4P7 + + ntpd/ntpd-opts.c@1.84, 2009-05-18 05:04:19-04:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P7 + + ntpd/ntpd-opts.h@1.84, 2009-05-18 05:04:20-04:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P7 + + ntpd/ntpd-opts.texi@1.83, 2009-05-18 05:04:21-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7 + + ntpd/ntpd.1@1.82, 2009-05-18 05:04:22-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7 + + ntpd/ntpdsim-opts.c@1.84, 2009-05-18 05:04:22-04:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P7 + + ntpd/ntpdsim-opts.h@1.84, 2009-05-18 05:04:23-04:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P7 + + ntpd/ntpdsim-opts.texi@1.82, 2009-05-18 05:04:24-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7 + + ntpd/ntpdsim.1@1.82, 2009-05-18 05:04:25-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7 + + ntpdc/ntpdc-opts.c@1.84, 2009-05-18 05:04:26-04:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P7 + + ntpdc/ntpdc-opts.h@1.84, 2009-05-18 05:04:26-04:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P7 + + ntpdc/ntpdc-opts.texi@1.82, 2009-05-18 05:04:27-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7 + + ntpdc/ntpdc.1@1.82, 2009-05-18 05:04:28-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7 + + ntpq/ntpq-opts.c@1.86, 2009-05-18 05:04:29-04:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P7 + + ntpq/ntpq-opts.h@1.86, 2009-05-18 05:04:29-04:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P7 + + ntpq/ntpq-opts.texi@1.83, 2009-05-18 05:04:30-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7 + + ntpq/ntpq.1@1.82, 2009-05-18 05:04:31-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7 + + packageinfo.sh@1.115, 2009-05-18 05:04:32-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7 + + sntp/sntp-opts.c@1.82, 2009-05-18 05:04:32-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7 + + sntp/sntp-opts.h@1.82, 2009-05-18 05:04:33-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7 + + sntp/sntp-opts.texi@1.79, 2009-05-18 05:04:34-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7 + + sntp/sntp.1@1.82, 2009-05-18 05:04:34-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7 + + util/ntp-keygen-opts.c@1.83, 2009-05-18 05:04:35-04:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P7 + + util/ntp-keygen-opts.h@1.83, 2009-05-18 05:04:36-04:00, stenn@whimsy.udel.edu +4 -4 + NTP_4_2_4P7 + + util/ntp-keygen-opts.texi@1.81, 2009-05-18 05:04:37-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7 + + util/ntp-keygen.1@1.81, 2009-05-18 05:04:37-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7 + +ChangeSet@1.1606, 2009-05-18 03:14:59-04:00, stenn@whimsy.udel.edu +2 -0 + 4.2.4p7 + + NEWS@1.101, 2009-05-18 03:14:49-04:00, stenn@whimsy.udel.edu +38 -0 + 4.2.4p7 + + packageinfo.sh@1.114, 2009-05-18 03:14:50-04:00, stenn@whimsy.udel.edu +1 -1 + 4.2.4p7 + +ChangeSet@1.1605, 2009-05-18 02:56:36-04:00, stenn@whimsy.udel.edu +2 -0 + [Sec 1151] Remote exploit if autokey is enabled - CVE-2009-1252 + + ChangeLog@1.90, 2009-05-18 02:56:22-04:00, stenn@whimsy.udel.edu +1 -0 + [Sec 1151] Remote exploit if autokey is enabled - CVE-2009-1252 + + ntpd/ntp_crypto.c@1.110, 2009-05-18 02:56:22-04:00, stenn@whimsy.udel.edu +22 -17 + [Sec 1151] Remote exploit if autokey is enabled - CVE-2009-1252 + +ChangeSet@1.1604, 2009-05-18 02:24:31-04:00, stenn@whimsy.udel.edu +2 -0 + [Bug 1187] Update the copyright date. + + ChangeLog@1.89, 2009-05-18 02:24:21-04:00, stenn@whimsy.udel.edu +1 -0 + [Bug 1187] Update the copyright date. + + include/copyright.def@1.8, 2009-05-18 02:24:22-04:00, stenn@whimsy.udel.edu +1 -1 + [Bug 1187] Update the copyright date. + +ChangeSet@1.1603, 2009-05-17 08:59:06+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + [Bug 1191] ntpd fails on Win2000 - "Address already in use" after fix + for [Sec 1149]. + + ChangeLog@1.88, 2009-05-17 08:59:05+00:00, davehart@shiny.ad.hartbrothers.com +5 -0 + [Bug 1191] ntpd fails on Win2000 - "Address already in use" after fix + for [Sec 1149]. + + ntpd/ntp_io.c@1.261, 2009-05-17 08:59:05+00:00, davehart@shiny.ad.hartbrothers.com +45 -34 + [Bug 1191] ntpd fails on Win2000 - "Address already in use" after fix + for [Sec 1149]. + +ChangeSet@1.1602, 2009-05-14 04:42:10+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + fix error from BitKeeper/triggers/pre-resolve.licfix triggered (ahem) + by recent BitKeeper/etc/config delta updating repologs email address + + BitKeeper/triggers/pre-resolve.licfix@1.5, 2009-05-14 04:42:09+00:00, davehart@shiny.ad.hartbrothers.com +4 -1 + bk sccscat has been removed, replaced by bk annotate -R + -q grep -> grep -q (untested until recent BitKeeper/etc/config commit + changing repologs@ntp.isc.org to repologs@ntp.org + +ChangeSet@1.1601, 2009-05-12 02:41:56-04:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P7_RC7 + TAG: NTP_4_2_4P7_RC7 + + ChangeLog@1.87, 2009-05-12 02:41:33-04:00, stenn@whimsy.udel.edu +1 -0 + NTP_4_2_4P7_RC7 + + ntpd/ntpd-opts.c@1.83, 2009-05-12 02:41:33-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + ntpd/ntpd-opts.h@1.83, 2009-05-12 02:41:33-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + ntpd/ntpd-opts.texi@1.82, 2009-05-12 02:41:35-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC7 + + ntpd/ntpd.1@1.81, 2009-05-12 02:41:35-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + ntpd/ntpdsim-opts.c@1.83, 2009-05-12 02:41:36-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + ntpd/ntpdsim-opts.h@1.83, 2009-05-12 02:41:37-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + ntpd/ntpdsim-opts.texi@1.81, 2009-05-12 02:41:37-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC7 + + ntpd/ntpdsim.1@1.81, 2009-05-12 02:41:38-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + ntpdc/ntpdc-opts.c@1.83, 2009-05-12 02:41:39-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + ntpdc/ntpdc-opts.h@1.83, 2009-05-12 02:41:40-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + ntpdc/ntpdc-opts.texi@1.81, 2009-05-12 02:41:41-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC7 + + ntpdc/ntpdc.1@1.81, 2009-05-12 02:41:42-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + ntpq/ntpq-opts.c@1.85, 2009-05-12 02:41:43-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + ntpq/ntpq-opts.h@1.85, 2009-05-12 02:41:44-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + ntpq/ntpq-opts.texi@1.82, 2009-05-12 02:41:45-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC7 + + ntpq/ntpq.1@1.81, 2009-05-12 02:41:46-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + packageinfo.sh@1.113, 2009-05-12 02:41:47-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC7 + + sntp/sntp-opts.c@1.81, 2009-05-12 02:41:47-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + sntp/sntp-opts.h@1.81, 2009-05-12 02:41:48-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + sntp/sntp-opts.texi@1.78, 2009-05-12 02:41:49-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC7 + + sntp/sntp.1@1.81, 2009-05-12 02:41:50-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + util/ntp-keygen-opts.c@1.82, 2009-05-12 02:41:51-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + util/ntp-keygen-opts.h@1.82, 2009-05-12 02:41:51-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + + util/ntp-keygen-opts.texi@1.80, 2009-05-12 02:41:52-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC7 + + util/ntp-keygen.1@1.80, 2009-05-12 02:41:53-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC7 + +ChangeSet@1.1600, 2009-05-12 01:07:37-04:00, stenn@whimsy.udel.edu +9 -0 + ntp.isc.org -> ntp.org cleanup + + BitKeeper/etc/config@1.10, 2009-05-12 01:06:49-04:00, stenn@whimsy.udel.edu +1 -1 + ntp.isc.org -> ntp.org cleanup + + ChangeLog@1.86, 2009-05-12 01:06:01-04:00, stenn@whimsy.udel.edu +1 -0 + ntp.isc.org -> ntp.org cleanup + + README@1.23, 2009-05-12 01:06:02-04:00, stenn@whimsy.udel.edu +1 -1 + ntp.isc.org -> ntp.org cleanup + + README.bk@1.19, 2009-05-12 01:06:03-04:00, stenn@whimsy.udel.edu +1 -1 + ntp.isc.org -> ntp.org cleanup + + README.patches@1.4, 2009-05-12 01:06:03-04:00, stenn@whimsy.udel.edu +1 -1 + ntp.isc.org -> ntp.org cleanup + + WHERE-TO-START@1.7, 2009-05-12 01:06:03-04:00, stenn@whimsy.udel.edu +1 -1 + ntp.isc.org -> ntp.org cleanup + + configure.ac@1.418, 2009-05-12 01:06:04-04:00, stenn@whimsy.udel.edu +1 -1 + ntp.isc.org -> ntp.org cleanup + + include/copyright.def@1.7, 2009-05-12 01:06:49-04:00, stenn@whimsy.udel.edu +1 -1 + ntp.isc.org -> ntp.org cleanup + + sntp/sntp-opts.def@1.11, 2009-05-12 01:06:49-04:00, stenn@whimsy.udel.edu +1 -1 + ntp.isc.org -> ntp.org cleanup + +ChangeSet@1.1597.1.1, 2009-05-08 18:11:36+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + configure.ac: + correct help text + + configure.ac@1.415.1.1, 2009-05-08 18:11:24+00:00, davehart@shiny.ad.hartbrothers.com +11 -5 + correct help text + +ChangeSet@1.1598, 2009-05-08 17:50:37+00:00, davehart@shiny.ad.hartbrothers.com +3 -0 + add configure --enable-ignore-dns-errors to retry on any failure + + ChangeLog@1.85, 2009-05-08 17:50:35+00:00, davehart@shiny.ad.hartbrothers.com +2 -1 + add configure --enable-ignore-dns-errors to retry on any failure + + configure.ac@1.416, 2009-05-08 17:50:35+00:00, davehart@shiny.ad.hartbrothers.com +26 -4 + add configure --enable-ignore-dns-errors to retry on any failure + + ntpd/ntp_intres.c@1.55, 2009-05-08 17:50:35+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + add configure --enable-ignore-dns-errors to retry on any failure + +ChangeSet@1.1597, 2009-05-08 15:34:46+00:00, davehart@shiny.ad.hartbrothers.com +4 -0 + Do not exceed FD_SETSIZE in ntp_intres.c + --- + ntp_intres.c: + typo + --- + ntp_intres.c: + missing comma typo + --- + ntp_intres.c: + typo + + ntpd/ntp_intres.c@1.54, 2009-05-08 15:34:45+00:00, davehart@shiny.ad.hartbrothers.com +64 -33 + fix typos, refine "host name not found" log message, stay under FD_SETSIZE + + ntpd/ntp_request.c@1.67, 2009-05-08 15:34:45+00:00, davehart@shiny.ad.hartbrothers.com +21 -3 + after ntp_intres adds a server entry, rescan interfaces, to notice the + return of connectivity sooner. + + ntpd/ntp_timer.c@1.34, 2009-05-08 15:34:45+00:00, davehart@shiny.ad.hartbrothers.com +3 -5 + indent cleanup + + ports/winnt/include/config.h@1.52, 2009-05-08 15:34:45+00:00, davehart@shiny.ad.hartbrothers.com +4 -10 + remove FORCE_DNSRETRY, no longer used + indent cleanup + +ChangeSet@1.1587.1.1, 2009-05-08 11:24:43+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + [Bug 1178] Use prior FORCE_DNSRETRY behavior as needed at runtime + + ChangeLog@1.76.1.1, 2009-05-08 11:24:42+00:00, davehart@shiny.ad.hartbrothers.com +4 -0 + [Bug 1178] Use prior FORCE_DNSRETRY behavior as needed at runtime + + ntpd/ntp_intres.c@1.53, 2009-05-08 11:24:42+00:00, davehart@shiny.ad.hartbrothers.com +53 -55 + [Bug 1178] Use prior FORCE_DNSRETRY behavior as needed at runtime + +ChangeSet@1.1595, 2009-05-08 04:42:52-04:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P7_RC6 + TAG: NTP_4_2_4P7_RC6 + + ChangeLog@1.83, 2009-05-08 04:42:28-04:00, stenn@whimsy.udel.edu +1 -0 + NTP_4_2_4P7_RC6 + + ntpd/ntpd-opts.c@1.82, 2009-05-08 04:42:28-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + ntpd/ntpd-opts.h@1.82, 2009-05-08 04:42:29-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC6 + + ntpd/ntpd-opts.texi@1.81, 2009-05-08 04:42:30-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + ntpd/ntpd.1@1.80, 2009-05-08 04:42:30-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + ntpd/ntpdsim-opts.c@1.82, 2009-05-08 04:42:31-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + ntpd/ntpdsim-opts.h@1.82, 2009-05-08 04:42:32-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC6 + + ntpd/ntpdsim-opts.texi@1.80, 2009-05-08 04:42:33-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC6 + + ntpd/ntpdsim.1@1.80, 2009-05-08 04:42:34-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + ntpdc/ntpdc-opts.c@1.82, 2009-05-08 04:42:35-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + ntpdc/ntpdc-opts.h@1.82, 2009-05-08 04:42:35-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC6 + + ntpdc/ntpdc-opts.texi@1.80, 2009-05-08 04:42:36-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + ntpdc/ntpdc.1@1.80, 2009-05-08 04:42:37-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + ntpq/ntpq-opts.c@1.84, 2009-05-08 04:42:38-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + ntpq/ntpq-opts.h@1.84, 2009-05-08 04:42:39-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC6 + + ntpq/ntpq-opts.texi@1.81, 2009-05-08 04:42:40-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + ntpq/ntpq.1@1.80, 2009-05-08 04:42:41-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + packageinfo.sh@1.112, 2009-05-08 04:42:42-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC6 + + sntp/sntp-opts.c@1.80, 2009-05-08 04:42:43-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + sntp/sntp-opts.h@1.80, 2009-05-08 04:42:43-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC6 + + sntp/sntp-opts.texi@1.77, 2009-05-08 04:42:44-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC6 + + sntp/sntp.1@1.80, 2009-05-08 04:42:44-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + util/ntp-keygen-opts.c@1.81, 2009-05-08 04:42:45-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + util/ntp-keygen-opts.h@1.81, 2009-05-08 04:42:46-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC6 + + util/ntp-keygen-opts.texi@1.79, 2009-05-08 04:42:47-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + + util/ntp-keygen.1@1.79, 2009-05-08 04:42:48-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC6 + +ChangeSet@1.1594, 2009-05-08 03:29:16-04:00, stenn@pogo.udel.edu +1 -0 + typo + + ChangeLog@1.82, 2009-05-08 03:28:46-04:00, stenn@pogo.udel.edu +1 -1 + typo + +ChangeSet@1.1593, 2009-05-08 02:13:17+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + Add [Bug 1071] reference to ChangeLog entry + + ChangeLog@1.81, 2009-05-08 02:13:16+00:00, davehart@shiny.ad.hartbrothers.com +2 -2 + [Bug 1071] Log a message and exit before trying to use FD_SET with a + descriptor larger than FD_SETSIZE, which will corrupt memory + (adds reference to 1071 to existing description) + +ChangeSet@1.1592, 2009-05-08 01:23:43+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + [Bug 1179] error messages for -u/--user and -i when built w/o droproot + + ChangeLog@1.80, 2009-05-08 01:23:41+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + [Bug 1179] error messages for -u/--user and -i when built w/o droproot + + ntpd/cmd_args.c@1.49, 2009-05-08 01:23:41+00:00, davehart@shiny.ad.hartbrothers.com +39 -19 + descriptive error messages for -u/--user and -i without droproot + +ChangeSet@1.1591, 2009-05-07 22:15:41+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + ntp_io.c: do not use FD_SET beyond FD_SETSIZE, watch for corruption of inter_list.head + + ChangeLog@1.79, 2009-05-07 22:15:39+00:00, davehart@shiny.ad.hartbrothers.com +3 -0 + do not use FD_SET beyond FD_SETSIZE, watch for corruption of inter_list.head + + ntpd/ntp_io.c@1.260, 2009-05-07 22:15:39+00:00, davehart@shiny.ad.hartbrothers.com +23 -0 + do not use FD_SET beyond FD_SETSIZE, watch for corruption of inter_list.head + +ChangeSet@1.1590, 2009-05-07 07:39:41+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + refclock_jjy.c: + add missing newline before EOF + + ntpd/refclock_jjy.c@1.15, 2009-05-07 07:39:32+00:00, davehart@shiny.ad.hartbrothers.com +1 -1 + add missing newline before EOF + +ChangeSet@1.1589, 2009-05-07 05:19:36+00:00, davehart@shiny.ad.hartbrothers.com +3 -0 + [Bug 784] Make --enable-linuxcaps the default when available + add reference to refclock_jjy.c to ports/winnt/ntpd/ntpd.vcproj + + ChangeLog@1.78, 2009-05-07 05:19:34+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + [Bug 784] Make --enable-linuxcaps the default when available + + configure.ac@1.415, 2009-05-07 05:19:34+00:00, davehart@shiny.ad.hartbrothers.com +34 -33 + [Bug 784] Make --enable-linuxcaps the default when available + + ports/winnt/ntpd/ntpd.vcproj@1.2, 2009-05-07 05:19:34+00:00, davehart@shiny.ad.hartbrothers.com +4 -0 + add reference to refclock_jjy.c to ports/winnt/ntpd/ntpd.vcproj + +ChangeSet@1.1588, 2009-05-07 05:10:54+00:00, davehart@shiny.ad.hartbrothers.com +4 -0 + Updated JJY reference clock driver from Takao abe + Make ntpd the default project in Visual C++/Visual Studio + + ChangeLog@1.77, 2009-05-07 05:10:52+00:00, davehart@shiny.ad.hartbrothers.com +4 -0 + Updated JJY reference clock driver from Takao abe + + html/drivers/driver40.html@1.14, 2009-05-07 05:10:52+00:00, davehart@shiny.ad.hartbrothers.com +103 -48 + Updated JJY reference clock driver from Takao abe + + ntpd/refclock_jjy.c@1.14, 2009-05-07 05:10:52+00:00, davehart@shiny.ad.hartbrothers.com +153 -5 + Updated JJY reference clock driver from Takao abe + + ports/winnt/ntp.sln@1.2, 2009-05-07 05:10:53+00:00, davehart@shiny.ad.hartbrothers.com +4 -4 + Make ntpd the default project in Visual C++/Visual Studio + +ChangeSet@1.1587, 2009-05-02 02:38:49-04:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P7_RC5 + TAG: NTP_4_2_4P7_RC5 + + ChangeLog@1.76, 2009-05-02 02:38:22-04:00, stenn@whimsy.udel.edu +1 -0 + NTP_4_2_4P7_RC5 + + ntpd/ntpd-opts.c@1.81, 2009-05-02 02:38:24-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + + ntpd/ntpd-opts.h@1.81, 2009-05-02 02:38:25-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC5 + + ntpd/ntpd-opts.texi@1.80, 2009-05-02 02:38:27-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC5 + + ntpd/ntpd.1@1.79, 2009-05-02 02:38:28-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + + ntpd/ntpdsim-opts.c@1.81, 2009-05-02 02:38:28-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + + ntpd/ntpdsim-opts.h@1.81, 2009-05-02 02:38:29-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC5 + + ntpd/ntpdsim-opts.texi@1.79, 2009-05-02 02:38:30-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC5 + + ntpd/ntpdsim.1@1.79, 2009-05-02 02:38:31-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + + ntpdc/ntpdc-opts.c@1.81, 2009-05-02 02:38:31-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + + ntpdc/ntpdc-opts.h@1.81, 2009-05-02 02:38:32-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC5 + + ntpdc/ntpdc-opts.texi@1.79, 2009-05-02 02:38:33-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC5 + + ntpdc/ntpdc.1@1.79, 2009-05-02 02:38:33-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + + ntpq/ntpq-opts.c@1.83, 2009-05-02 02:38:34-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + + ntpq/ntpq-opts.h@1.83, 2009-05-02 02:38:35-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC5 + + ntpq/ntpq-opts.texi@1.80, 2009-05-02 02:38:36-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC5 + + ntpq/ntpq.1@1.79, 2009-05-02 02:38:37-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + + packageinfo.sh@1.111, 2009-05-02 02:38:38-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC5 + + sntp/sntp-opts.c@1.79, 2009-05-02 02:38:39-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + + sntp/sntp-opts.h@1.79, 2009-05-02 02:38:40-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC5 + + sntp/sntp-opts.texi@1.76, 2009-05-02 02:38:41-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC5 + + sntp/sntp.1@1.79, 2009-05-02 02:38:42-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + + util/ntp-keygen-opts.c@1.80, 2009-05-02 02:38:43-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + + util/ntp-keygen-opts.h@1.80, 2009-05-02 02:38:43-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC5 + + util/ntp-keygen-opts.texi@1.78, 2009-05-02 02:38:44-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC5 + + util/ntp-keygen.1@1.78, 2009-05-02 02:38:45-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC5 + +ChangeSet@1.1586, 2009-05-02 01:49:02+00:00, davehart@shiny.ad.hartbrothers.com +3 -0 + flock-build: + set -m wasn't needed with ssh -tt and caused problems, remove + ChangeLog: + [Bug 1172] 4.2.4p7-RC{3,4} fail to build on linux. + remove unportable 'set -m' from flock-build script + configure.ac: + reverse accidental backport from -dev of struct rtattr test in + configure.ac without corresponding ntp_io.c code for HAVE_RTNETLINK + + ChangeLog@1.75, 2009-05-02 01:48:30+00:00, davehart@shiny.ad.hartbrothers.com +5 -0 + [Bug 1172] 4.2.4p7-RC{3,4} fail to build on linux. + remove unportable 'set -m' from flock-build script + + configure.ac@1.414, 2009-05-02 01:48:30+00:00, davehart@shiny.ad.hartbrothers.com +1 -12 + reverse accidental backport from -dev of struct rtattr test in + configure.ac without corresponding ntp_io.c code for HAVE_RTNETLINK + + flock-build@1.41, 2009-05-02 01:48:30+00:00, davehart@shiny.ad.hartbrothers.com +3 -5 + set -m wasn't needed with ssh -tt and caused problems, remove + +ChangeSet@1.1585, 2009-04-29 04:03:41-04:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P7_RC4 + TAG: NTP_4_2_4P7_RC4 + + ChangeLog@1.74, 2009-04-29 04:03:17-04:00, stenn@whimsy.udel.edu +1 -0 + NTP_4_2_4P7_RC4 + + ntpd/ntpd-opts.c@1.80, 2009-04-29 04:03:18-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + + ntpd/ntpd-opts.h@1.80, 2009-04-29 04:03:19-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC4 + + ntpd/ntpd-opts.texi@1.79, 2009-04-29 04:03:21-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC4 + + ntpd/ntpd.1@1.78, 2009-04-29 04:03:21-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + + ntpd/ntpdsim-opts.c@1.80, 2009-04-29 04:03:22-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + + ntpd/ntpdsim-opts.h@1.80, 2009-04-29 04:03:22-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC4 + + ntpd/ntpdsim-opts.texi@1.78, 2009-04-29 04:03:24-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC4 + + ntpd/ntpdsim.1@1.78, 2009-04-29 04:03:25-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + + ntpdc/ntpdc-opts.c@1.80, 2009-04-29 04:03:25-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + + ntpdc/ntpdc-opts.h@1.80, 2009-04-29 04:03:26-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC4 + + ntpdc/ntpdc-opts.texi@1.78, 2009-04-29 04:03:27-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC4 + + ntpdc/ntpdc.1@1.78, 2009-04-29 04:03:28-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + + ntpq/ntpq-opts.c@1.82, 2009-04-29 04:03:29-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + + ntpq/ntpq-opts.h@1.82, 2009-04-29 04:03:29-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC4 + + ntpq/ntpq-opts.texi@1.79, 2009-04-29 04:03:30-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC4 + + ntpq/ntpq.1@1.78, 2009-04-29 04:03:31-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + + packageinfo.sh@1.110, 2009-04-29 04:03:31-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC4 + + sntp/sntp-opts.c@1.78, 2009-04-29 04:03:32-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + + sntp/sntp-opts.h@1.78, 2009-04-29 04:03:33-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC4 + + sntp/sntp-opts.texi@1.75, 2009-04-29 04:03:34-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC4 + + sntp/sntp.1@1.78, 2009-04-29 04:03:35-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + + util/ntp-keygen-opts.c@1.79, 2009-04-29 04:03:36-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + + util/ntp-keygen-opts.h@1.79, 2009-04-29 04:03:36-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC4 + + util/ntp-keygen-opts.texi@1.77, 2009-04-29 04:03:36-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC4 + + util/ntp-keygen.1@1.77, 2009-04-29 04:03:37-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC4 + +ChangeSet@1.1584, 2009-04-29 01:50:44-04:00, stenn@pogo.udel.edu +1 -0 + No need to know the GCC -W items in config.h + + configure.ac@1.413, 2009-04-29 01:50:36-04:00, stenn@pogo.udel.edu +2 -12 + No need to know the GCC -W items in config.h + +ChangeSet@1.1583, 2009-04-27 11:47:49+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + ChangeLog: + add [Bug 1167] to ChangeLog entry + + ChangeLog@1.73, 2009-04-27 11:47:36+00:00, davehart@shiny.ad.hartbrothers.com +1 -1 + add [Bug 1167] to ChangeLog entry + +ChangeSet@1.1582, 2009-04-26 06:10:27+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + gcc -Winit-self is used only if it is understood + + ChangeLog@1.72, 2009-04-26 06:10:25+00:00, davehart@shiny.ad.hartbrothers.com +4 -0 + gcc -Winit-self is used only if it is understood + + configure.ac@1.412, 2009-04-26 06:10:26+00:00, davehart@shiny.ad.hartbrothers.com +34 -2 + gcc -Winit-self is used only if it is understood + +ChangeSet@1.1581, 2009-04-22 08:18:29-04:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P7_RC3 + TAG: NTP_4_2_4P7_RC3 + + ChangeLog@1.71, 2009-04-22 08:18:04-04:00, stenn@whimsy.udel.edu +1 -0 + NTP_4_2_4P7_RC3 + + ntpd/ntpd-opts.c@1.79, 2009-04-22 08:18:04-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + ntpd/ntpd-opts.h@1.79, 2009-04-22 08:18:05-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC3 + + ntpd/ntpd-opts.texi@1.78, 2009-04-22 08:18:05-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + ntpd/ntpd.1@1.77, 2009-04-22 08:18:07-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + ntpd/ntpdsim-opts.c@1.79, 2009-04-22 08:18:08-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + ntpd/ntpdsim-opts.h@1.79, 2009-04-22 08:18:08-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC3 + + ntpd/ntpdsim-opts.texi@1.77, 2009-04-22 08:18:09-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC3 + + ntpd/ntpdsim.1@1.77, 2009-04-22 08:18:10-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + ntpdc/ntpdc-opts.c@1.79, 2009-04-22 08:18:11-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + ntpdc/ntpdc-opts.h@1.79, 2009-04-22 08:18:11-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC3 + + ntpdc/ntpdc-opts.texi@1.77, 2009-04-22 08:18:12-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + ntpdc/ntpdc.1@1.77, 2009-04-22 08:18:13-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + ntpq/ntpq-opts.c@1.81, 2009-04-22 08:18:13-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + ntpq/ntpq-opts.h@1.81, 2009-04-22 08:18:14-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC3 + + ntpq/ntpq-opts.texi@1.78, 2009-04-22 08:18:15-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + ntpq/ntpq.1@1.77, 2009-04-22 08:18:16-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + packageinfo.sh@1.109, 2009-04-22 08:18:17-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC3 + + sntp/sntp-opts.c@1.77, 2009-04-22 08:18:19-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + sntp/sntp-opts.h@1.77, 2009-04-22 08:18:20-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC3 + + sntp/sntp-opts.texi@1.74, 2009-04-22 08:18:20-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC3 + + sntp/sntp.1@1.77, 2009-04-22 08:18:22-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + util/ntp-keygen-opts.c@1.78, 2009-04-22 08:18:23-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + util/ntp-keygen-opts.h@1.78, 2009-04-22 08:18:23-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC3 + + util/ntp-keygen-opts.texi@1.76, 2009-04-22 08:18:25-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + + util/ntp-keygen.1@1.76, 2009-04-22 08:18:25-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC3 + +ChangeSet@1.1580, 2009-04-22 07:00:20-04:00, stenn@whimsy.udel.edu +1 -0 + [Bug 1155] Fix compile problem on Windows with VS2005 + + ChangeLog@1.70, 2009-04-22 07:00:11-04:00, stenn@whimsy.udel.edu +1 -0 + [Bug 1155] Fix compile problem on Windows with VS2005 + +ChangeSet@1.1579, 2009-04-22 06:06:53-04:00, stenn@whimsy.udel.edu +1 -0 + Cleanup + + ChangeLog@1.69, 2009-04-22 06:06:44-04:00, stenn@whimsy.udel.edu +4 -2 + Cleanup + +ChangeSet@1.1578, 2009-04-20 22:55:13+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + ChangeLog: + auto merge not quite right + + ChangeLog@1.68, 2009-04-20 22:55:10+00:00, davehart@shiny.ad.hartbrothers.com +3 -7 + auto merge not quite right + +ChangeSet@1.1577, 2009-04-20 22:42:59+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + ntp_iocompletionport.c: + revert overlooked CreateEvent naming/sharing change not conditionalized away already + + ports/winnt/ntpd/ntp_iocompletionport.c@1.32, 2009-04-20 22:42:50+00:00, davehart@shiny.ad.hartbrothers.com +2 -2 + revert overlooked CreateEvent naming/sharing change not conditionalized away already + +ChangeSet@1.1567.1.11, 2009-04-20 06:17:21+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + ChangeLog: + [Bug 1160] Mac OS X is like BSD regarding F_SETOWN + + ChangeLog@1.64.1.3, 2009-04-20 06:17:15+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + [Bug 1160] Mac OS X is like BSD regarding F_SETOWN + +ChangeSet@1.1567.1.10, 2009-04-20 06:02:20+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + configure.ac: + [Bug 1160] MacOS X is like BSD regarding F_SETOWN + + configure.ac@1.411, 2009-04-20 06:02:08+00:00, davehart@shiny.ad.hartbrothers.com +3 -0 + [Bug 1160] MacOS X is like BSD regarding F_SETOWN + +ChangeSet@1.1567.1.9, 2009-04-16 02:39:01+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + configure.ac: + fix for --enable-ntp-signd=/my/path + + configure.ac@1.410, 2009-04-16 02:38:53+00:00, davehart@shiny.ad.hartbrothers.com +1 -1 + fix for --enable-ntp-signd=/my/path + +ChangeSet@1.1567.1.8, 2009-04-15 12:36:24+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + configure.ac: + do not cache options fix + + configure.ac@1.409, 2009-04-15 12:36:12+00:00, davehart@shiny.ad.hartbrothers.com +1 -1 + do not cache options fix + +ChangeSet@1.1567.1.7, 2009-04-15 10:43:51+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + configure.ac: + Do not cache configure --options, only current values matter + Default --enable-wintime when --enable-ntp-signd + + configure.ac@1.408, 2009-04-15 10:43:32+00:00, davehart@shiny.ad.hartbrothers.com +575 -403 + Do not cache configure --options, only current values matter + Default --enable-wintime when --enable-ntp-signd + +ChangeSet@1.1567.1.6, 2009-04-15 01:32:33+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + use AC_SEARCH_LIBS to avoid problems with sntp + + configure.ac@1.407, 2009-04-15 01:30:56+00:00, davehart@shiny.ad.hartbrothers.com +12 -20 + use AC_SEARCH_LIBS in preference to AC_CHECK_LIB particulary for sockets, use AM_PROG_CC_C_O which supersets prior AC_PROG_CC_C_O + + sntp/configure.ac@1.17, 2009-04-15 01:28:22+00:00, davehart@shiny.ad.hartbrothers.com +4 -4 + use AC_SEARCH_LIBS which is recommended particularly for sockets over the older AC_CHECK_LIB + +ChangeSet@1.1567.1.5, 2009-04-14 13:47:29+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + configure.ac: + tear off sntp/configure.ac from configure.ac + + configure.ac@1.406, 2009-04-14 13:46:17+00:00, davehart@shiny.ad.hartbrothers.com +6 -1 + tear off sntp/configure.ac from configure.ac + +ChangeSet@1.1575, 2009-04-14 07:55:41-04:00, mayer@pogo.udel.edu +1 -0 + Added fix for Bug 813 + + ChangeLog@1.66, 2009-04-14 07:55:31-04:00, mayer@pogo.udel.edu +1 -0 + Added fix for Bug 813 + +ChangeSet@1.1574, 2009-04-14 07:51:41-04:00, mayer@pogo.udel.edu +1 -0 + [Bug 813] Conditional naming of Event + + ports/winnt/ntpd/ntp_iocompletionport.c@1.31, 2009-04-14 07:51:14-04:00, mayer@pogo.udel.edu +7 -1 + [Bug 813] Conditional naming of Event + +ChangeSet@1.1567.1.4, 2009-04-14 05:21:17+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + configure.ac: + use unset for tickadj utility test fix + + configure.ac@1.405, 2009-04-14 05:21:15+00:00, davehart@shiny.ad.hartbrothers.com +1 -1 + use unset for tickadj utility test fix + +ChangeSet@1.1567.1.3, 2009-04-14 02:59:39+00:00, hart@pogo.udel.edu +1 -0 + build: + do not require nice + + build@1.26, 2009-04-14 02:59:20+00:00, hart@pogo.udel.edu +21 -4 + do not require nice + +ChangeSet@1.1567.1.2, 2009-04-14 01:33:01+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + configure.ac, ChangeLog: + [Bug 1158] support for aix6.1 + + ChangeLog@1.64.1.2, 2009-04-14 01:33:00+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + [Bug 1158] support for aix6.1 + + configure.ac@1.404, 2009-04-14 01:33:00+00:00, davehart@shiny.ad.hartbrothers.com +8 -8 + [Bug 1158] support for aix6.1 + +ChangeSet@1.1567.1.1, 2009-04-14 01:28:08+00:00, davehart@shiny.ad.hartbrothers.com +5 -0 + [Bug 1157] quiet OpenSSL warnings, clean up configure.ac + make flock-build quit before causing harm if another has not completed + + + ChangeLog@1.64.1.1, 2009-04-14 01:28:06+00:00, davehart@shiny.ad.hartbrothers.com +4 -0 + [Bug 1157] quiet OpenSSL warnings, clean up configure.ac + + build@1.25, 2009-04-14 01:28:07+00:00, davehart@shiny.ad.hartbrothers.com +6 -7 + prevent multiple flock-builds from stepping on each others work + + configure.ac@1.403, 2009-04-14 01:28:07+00:00, davehart@shiny.ad.hartbrothers.com +613 -361 + [Bug 1157] quiet OpenSSL warnings, configure.ac cleanup + + flock-build@1.40, 2009-04-14 01:28:07+00:00, davehart@shiny.ad.hartbrothers.com +76 -20 + prevent multiple flock-builds from stepping on each others work + + sntp/configure.ac@1.16, 2009-04-14 01:28:07+00:00, davehart@shiny.ad.hartbrothers.com +14 -0 + bring in line with -dev to ease merges, no functional change + +ChangeSet@1.1573, 2009-04-13 00:00:55-04:00, mayer@pogo.udel.edu +1 -0 + Forgot the _WIN32_WINNT update + + ports/winnt/include/config.h@1.51, 2009-04-13 00:00:24-04:00, mayer@pogo.udel.edu +10 -23 + Forgot the _WIN32_WINNT update + +ChangeSet@1.1572, 2009-04-12 00:55:24-04:00, mayer@pogo.udel.edu +1 -0 + Windows bug fixes + + ChangeLog@1.65, 2009-04-12 00:54:43-04:00, mayer@pogo.udel.edu +7 -2 + Windows bug fixes + +ChangeSet@1.1571, 2009-04-12 00:45:48-04:00, mayer@pogo.udel.edu +2 -0 + [Bug 1156] lock_thread_to_processor() should be declared in header + + ports/winnt/include/clockstuff.h@1.8, 2009-04-12 00:45:09-04:00, mayer@pogo.udel.edu +1 -0 + [Bug 1156] lock_thread_to_processor() should be declared in header + + ports/winnt/ntpd/nt_clockstuff.c@1.25, 2009-04-12 00:45:09-04:00, mayer@pogo.udel.edu +0 -1 + [Bug 1156] lock_thread_to_processor() should be declared in header + +ChangeSet@1.1570, 2009-04-12 00:38:47-04:00, mayer@pogo.udel.edu +1 -0 + [Bug 1147] System errors should be logged to msyslog() + + ports/winnt/ntpd/ntp_iocompletionport.c@1.30, 2009-04-12 00:38:08-04:00, mayer@pogo.udel.edu +17 -14 + [Bug 1147] System errors should be logged to msyslog() + +ChangeSet@1.1569, 2009-04-12 00:34:41-04:00, mayer@pogo.udel.edu +1 -0 + [Bug 1155] Wrong header included in config.h. Should have been winsock2.h + + ports/winnt/include/config.h@1.50, 2009-04-12 00:34:10-04:00, mayer@pogo.udel.edu +1 -2 + [Bug 1155] Wrong header included in config.h. Should have been winsock2.h + +ChangeSet@1.1568, 2009-04-12 00:32:25-04:00, mayer@pogo.udel.edu +1 -0 + [Bug 787] Bug fixes for 64-bit time_t on Windows + + ports/winnt/libntp/SetSystemTime.c@1.4, 2009-04-12 00:30:42-04:00, mayer@pogo.udel.edu +2 -2 + [Bug 787] Bug fixes for 64-bit time_t on Windows + +ChangeSet@1.1567, 2009-04-09 07:44:06-04:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P7_RC2 + TAG: NTP_4_2_4P7_RC2 + + ChangeLog@1.64, 2009-04-09 07:43:41-04:00, stenn@whimsy.udel.edu +1 -0 + NTP_4_2_4P7_RC2 + + ntpd/ntpd-opts.c@1.78, 2009-04-09 07:43:42-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + ntpd/ntpd-opts.h@1.78, 2009-04-09 07:43:43-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC2 + + ntpd/ntpd-opts.texi@1.77, 2009-04-09 07:43:43-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + ntpd/ntpd.1@1.76, 2009-04-09 07:43:45-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + ntpd/ntpdsim-opts.c@1.78, 2009-04-09 07:43:46-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + ntpd/ntpdsim-opts.h@1.78, 2009-04-09 07:43:47-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC2 + + ntpd/ntpdsim-opts.texi@1.76, 2009-04-09 07:43:47-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC2 + + ntpd/ntpdsim.1@1.76, 2009-04-09 07:43:48-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + ntpdc/ntpdc-opts.c@1.78, 2009-04-09 07:43:49-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + ntpdc/ntpdc-opts.h@1.78, 2009-04-09 07:43:50-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC2 + + ntpdc/ntpdc-opts.texi@1.76, 2009-04-09 07:43:51-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + ntpdc/ntpdc.1@1.76, 2009-04-09 07:43:51-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + ntpq/ntpq-opts.c@1.80, 2009-04-09 07:43:52-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + ntpq/ntpq-opts.h@1.80, 2009-04-09 07:43:53-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC2 + + ntpq/ntpq-opts.texi@1.77, 2009-04-09 07:43:54-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + ntpq/ntpq.1@1.76, 2009-04-09 07:43:55-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + packageinfo.sh@1.108, 2009-04-09 07:43:55-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC2 + + sntp/sntp-opts.c@1.76, 2009-04-09 07:43:57-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + sntp/sntp-opts.h@1.76, 2009-04-09 07:43:58-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC2 + + sntp/sntp-opts.texi@1.73, 2009-04-09 07:43:58-04:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC2 + + sntp/sntp.1@1.76, 2009-04-09 07:43:59-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + util/ntp-keygen-opts.c@1.77, 2009-04-09 07:44:00-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + util/ntp-keygen-opts.h@1.77, 2009-04-09 07:44:00-04:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC2 + + util/ntp-keygen-opts.texi@1.75, 2009-04-09 07:44:02-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + + util/ntp-keygen.1@1.75, 2009-04-09 07:44:02-04:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC2 + +ChangeSet@1.1566, 2009-04-09 04:16:50-04:00, stenn@whimsy.udel.edu +1 -0 + ChangLog cleanup + + ChangeLog@1.63, 2009-04-09 04:16:43-04:00, stenn@whimsy.udel.edu +1 -0 + ChangLog cleanup + +ChangeSet@1.1565, 2009-04-09 04:13:41-04:00, stenn@whimsy.udel.edu +2 -0 + [Sec 1144] limited buffer overflow in ntpq. CVE-2009-0159 + + ChangeLog@1.62, 2009-04-09 04:13:30-04:00, stenn@whimsy.udel.edu +2 -0 + [Sec 1144] limited buffer overflow in ntpq. CVE-2009-0159 + + ntpq/ntpq.c@1.66, 2009-04-09 04:13:30-04:00, stenn@whimsy.udel.edu +2 -2 + [Sec 1144] limited buffer overflow in ntpq. CVE-2009-0159 + +ChangeSet@1.1564, 2009-04-07 09:14:58+00:00, davehart@shiny.ad.hartbrothers.com +3 -0 + [Sec 1149] use setsockopt(SO_EXCLUSIVEADDRUSE) on Windows + + ChangeLog@1.61, 2009-04-07 09:14:56+00:00, davehart@shiny.ad.hartbrothers.com +4 -0 + [Sec 1149] use setsockopt(SO_EXCLUSIVEADDRUSE) on Windows + + ntpd/ntp_io.c@1.259, 2009-04-07 09:14:56+00:00, davehart@shiny.ad.hartbrothers.com +64 -31 + [Sec 1149] use setsockopt(SO_EXCLUSIVEADDRUSE) on Windows + + ports/winnt/libntp/libntp.vcproj@1.2, 2009-04-07 09:14:57+00:00, davehart@shiny.ad.hartbrothers.com +4 -0 + add ntp_debug.h + +ChangeSet@1.1563, 2009-03-30 06:47:41-05:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P7_RC1 + TAG: NTP_4_2_4P7_RC1 + + ChangeLog@1.60, 2009-03-30 06:47:19-05:00, stenn@whimsy.udel.edu +1 -0 + NTP_4_2_4P7_RC1 + + ntpd/ntpd-opts.c@1.77, 2009-03-30 06:47:20-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + ntpd/ntpd-opts.h@1.77, 2009-03-30 06:47:21-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC1 + + ntpd/ntpd-opts.texi@1.76, 2009-03-30 06:47:22-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + ntpd/ntpd.1@1.75, 2009-03-30 06:47:22-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + ntpd/ntpdsim-opts.c@1.77, 2009-03-30 06:47:23-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + ntpd/ntpdsim-opts.h@1.77, 2009-03-30 06:47:24-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC1 + + ntpd/ntpdsim-opts.texi@1.75, 2009-03-30 06:47:25-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC1 + + ntpd/ntpdsim.1@1.75, 2009-03-30 06:47:26-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + ntpdc/ntpdc-opts.c@1.77, 2009-03-30 06:47:26-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + ntpdc/ntpdc-opts.h@1.77, 2009-03-30 06:47:26-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC1 + + ntpdc/ntpdc-opts.texi@1.75, 2009-03-30 06:47:27-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + ntpdc/ntpdc.1@1.75, 2009-03-30 06:47:28-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + ntpq/ntpq-opts.c@1.79, 2009-03-30 06:47:29-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + ntpq/ntpq-opts.h@1.79, 2009-03-30 06:47:30-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC1 + + ntpq/ntpq-opts.texi@1.76, 2009-03-30 06:47:31-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + ntpq/ntpq.1@1.75, 2009-03-30 06:47:32-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + packageinfo.sh@1.107, 2009-03-30 06:47:33-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + sntp/sntp-opts.c@1.75, 2009-03-30 06:47:33-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + sntp/sntp-opts.h@1.75, 2009-03-30 06:47:34-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC1 + + sntp/sntp-opts.texi@1.72, 2009-03-30 06:47:35-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P7_RC1 + + sntp/sntp.1@1.75, 2009-03-30 06:47:35-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + util/ntp-keygen-opts.c@1.76, 2009-03-30 06:47:36-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + util/ntp-keygen-opts.h@1.76, 2009-03-30 06:47:36-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P7_RC1 + + util/ntp-keygen-opts.texi@1.74, 2009-03-30 06:47:37-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + + util/ntp-keygen.1@1.74, 2009-03-30 06:47:38-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P7_RC1 + +ChangeSet@1.1562, 2009-03-30 02:31:49-05:00, stenn@whimsy.udel.edu +1 -0 + Release Candidate + + packageinfo.sh@1.106, 2009-03-30 02:31:39-05:00, stenn@whimsy.udel.edu +1 -1 + Release Candidate + +ChangeSet@1.1560, 2009-03-28 02:46:45-05:00, stenn@whimsy.udel.edu +9 -0 + build system email address cleanup + + BitKeeper/triggers/changelog@1.4, 2009-03-28 02:45:21-05:00, stenn@whimsy.udel.edu +1 -1 + trigger email address cleanup + + BitKeeper/triggers/commitlogs@1.6, 2009-03-28 02:45:22-05:00, stenn@whimsy.udel.edu +1 -1 + trigger email address cleanup + + BitKeeper/triggers/delta-changelog@1.8, 2009-03-28 02:45:22-05:00, stenn@whimsy.udel.edu +2 -2 + trigger email address cleanup + + BitKeeper/triggers/notify@1.4, 2009-03-28 02:45:22-05:00, stenn@whimsy.udel.edu +1 -1 + trigger email address cleanup + + BitKeeper/triggers/paranoid@1.4, 2009-03-28 02:45:22-05:00, stenn@whimsy.udel.edu +1 -1 + trigger email address cleanup + + BitKeeper/triggers/post-incoming.license-warn@1.7, 2009-03-28 02:45:22-05:00, stenn@whimsy.udel.edu +1 -1 + trigger email address cleanup + + BitKeeper/triggers/pre-resolve.licfix@1.4, 2009-03-28 02:45:22-05:00, stenn@whimsy.udel.edu +1 -1 + trigger email address cleanup + + BitKeeper/triggers/send@1.14, 2009-03-28 02:45:22-05:00, stenn@whimsy.udel.edu +2 -2 + trigger email address cleanup + + ChangeLog@1.58, 2009-03-28 02:46:36-05:00, stenn@whimsy.udel.edu +3 -1 + build system email address cleanup + +ChangeSet@1.1559, 2009-03-24 15:22:36+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + config.h: + include winsock.h before ws2tcpip.h to fix VS 2005 build + + ports/winnt/include/config.h@1.49, 2009-03-24 15:22:23+00:00, davehart@shiny.ad.hartbrothers.com +8 -5 + include winsock.h before ws2tcpip.h to fix VS 2005 build + +ChangeSet@1.1549.4.2, 2009-03-24 15:14:36+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + ntp_iocompletionport.c: + use one receive per socket to avoid Win2000 afd.sys bugcheck 0x76 + + ports/winnt/ntpd/ntp_iocompletionport.c@1.26.1.2, 2009-03-24 15:14:23+00:00, davehart@shiny.ad.hartbrothers.com +10 -1 + use one receive per socket to avoid Win2000 afd.sys bugcheck 0x76 + +ChangeSet@1.1557, 2009-03-22 21:09:43+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + Makefile.am, ChangeLog: + [Bug 774] parsesolaris.c does not compile under the new Solaris + + ChangeLog@1.57, 2009-03-22 21:09:42+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + [Bug 774] parsesolaris.c does not compile under the new Solaris + + libparse/Makefile.am@1.9, 2009-03-22 21:09:42+00:00, davehart@shiny.ad.hartbrothers.com +1 -1 + [Bug 774] parsesolaris.c does not compile under the new Solaris + +ChangeSet@1.1556, 2009-03-20 03:39:26+00:00, hart@pogo.udel.edu +1 -0 + ChangeLog: + bk for windows isn't converting line endings correctly, remove two blank lines visible only on Unix side + + ChangeLog@1.56, 2009-03-20 03:39:16+00:00, hart@pogo.udel.edu +0 -2 + bk for windows isn't converting line endings correctly, remove two blank lines visible only on Unix side + +ChangeSet@1.1553, 2009-03-20 03:10:22+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + ChangeLog: + remove blank first line + + ChangeLog@1.53, 2009-03-20 03:09:55+00:00, davehart@shiny.ad.hartbrothers.com +0 -1 + remove blank first line + +ChangeSet@1.1549.4.1, 2009-03-20 01:46:15+00:00, davehart@shiny.ad.hartbrothers.com +10 -0 + [Bug 873] Windows serial refclock proper TTY line discipline emulation + + ChangeLog@1.50.4.1, 2009-03-20 01:46:11+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + [Bug 873] Windows serial refclock proper TTY line discipline emulation + + ntpd/ntp_io.c@1.256.1.1, 2009-03-20 01:46:11+00:00, davehart@shiny.ad.hartbrothers.com +26 -23 + [Bug 873] Windows serial refclock proper TTY line discipline emulation + + ntpd/ntpd.c@1.86, 2009-03-20 01:46:12+00:00, davehart@shiny.ad.hartbrothers.com +14 -25 + slightly reduce #ifdef SYS_WINNT forest + + ntpd/refclock_dumbclock.c@1.9, 2009-03-20 01:46:12+00:00, davehart@shiny.ad.hartbrothers.com +6 -5 + [Bug 873] Windows serial refclock proper TTY line discipline emulation + + ntpd/refclock_hopfser.c@1.10, 2009-03-20 01:46:12+00:00, davehart@shiny.ad.hartbrothers.com +6 -5 + [Bug 873] Windows serial refclock proper TTY line discipline emulation + + ntpd/refclock_nmea.c@1.26, 2009-03-20 01:46:12+00:00, davehart@shiny.ad.hartbrothers.com +6 -5 + [Bug 873] Windows serial refclock proper TTY line discipline emulation + + ntpd/refclock_palisade.c@1.19, 2009-03-20 01:46:12+00:00, davehart@shiny.ad.hartbrothers.com +6 -5 + [Bug 873] Windows serial refclock proper TTY line discipline emulation + + ports/winnt/include/ntp_iocompletionport.h@1.14, 2009-03-20 01:46:13+00:00, davehart@shiny.ad.hartbrothers.com +8 -9 + [Bug 873] Windows serial refclock proper TTY line discipline emulation + + ports/winnt/ntpd/ntp_iocompletionport.c@1.26.1.1, 2009-03-20 01:46:13+00:00, davehart@shiny.ad.hartbrothers.com +331 -249 + [Bug 873] Windows serial refclock proper TTY line discipline emulation + + ports/winnt/ntpd/win32_io.c@1.13, 2009-03-20 01:46:13+00:00, davehart@shiny.ad.hartbrothers.com +172 -66 + [Bug 873] Windows serial refclock proper TTY line discipline emulation + +ChangeSet@1.1549.3.2, 2009-03-18 11:44:59+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + [Bug 1014] Enable building with VC9 (in Visual Studio 2008, Visual C++ 2008, or SDK) + + ChangeLog@1.50.3.1, 2009-03-18 11:44:52+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + [Bug 1014] Enable building with VC9 (in Visual Studio 2008, Visual C++ 2008, or SDK) + +ChangeSet@1.1549.1.4, 2009-03-18 10:14:52+00:00, davehart@shiny.ad.hartbrothers.com +1 -0 + [Bug 1117] Deferred interface binding under Windows works only correctly if FORCE_DNSRETRY is defined + + ChangeLog@1.50.1.3, 2009-03-18 10:12:28+00:00, davehart@shiny.ad.hartbrothers.com +2 -0 + [Bug 1117] Deferred interface binding under Windows works only correctly if FORCE_DNSRETRY is defined + +ChangeSet@1.1549.3.1, 2009-03-17 18:39:09+00:00, davehart@shiny.ad.hartbrothers.com +8 -0 + add .sln and .vcproj files for VC9 + + ports/winnt/instsrv/Instsrv.vcproj@1.1, 2009-03-17 18:34:21+00:00, davehart@shiny.ad.hartbrothers.com +253 -0 + VC9 equivalent to Instsrv.dsp + + ports/winnt/instsrv/Instsrv.vcproj@1.0, 2009-03-17 18:34:21+00:00, davehart@shiny.ad.hartbrothers.com +0 -0 + + ports/winnt/libntp/libntp.vcproj@1.1, 2009-03-17 18:35:45+00:00, davehart@shiny.ad.hartbrothers.com +2229 -0 + VC9 equivalent to libntp.dsp + + ports/winnt/libntp/libntp.vcproj@1.0, 2009-03-17 18:35:45+00:00, davehart@shiny.ad.hartbrothers.com +0 -0 + + ports/winnt/ntp-keygen/ntpkeygen.vcproj@1.1, 2009-03-17 18:36:28+00:00, davehart@shiny.ad.hartbrothers.com +419 -0 + VC9 equivalent to ntpkeygen.dsp + + ports/winnt/ntp-keygen/ntpkeygen.vcproj@1.0, 2009-03-17 18:36:28+00:00, davehart@shiny.ad.hartbrothers.com +0 -0 + + ports/winnt/ntp.sln@1.1, 2009-03-17 18:38:44+00:00, davehart@shiny.ad.hartbrothers.com +71 -0 + VC9 equivalent to ntp.dsw + + ports/winnt/ntp.sln@1.0, 2009-03-17 18:38:44+00:00, davehart@shiny.ad.hartbrothers.com +0 -0 + + ports/winnt/ntpd/ntpd.vcproj@1.1, 2009-03-17 18:36:49+00:00, davehart@shiny.ad.hartbrothers.com +2198 -0 + VC9 equivalent to ntpd.dsp + + ports/winnt/ntpd/ntpd.vcproj@1.0, 2009-03-17 18:36:49+00:00, davehart@shiny.ad.hartbrothers.com +0 -0 + + ports/winnt/ntpdate/ntpdate.vcproj@1.1, 2009-03-17 18:37:19+00:00, davehart@shiny.ad.hartbrothers.com +327 -0 + VC9 equivalent to ntpdate.dsp + + ports/winnt/ntpdate/ntpdate.vcproj@1.0, 2009-03-17 18:37:19+00:00, davehart@shiny.ad.hartbrothers.com +0 -0 + + ports/winnt/ntpdc/ntpdc.vcproj@1.1, 2009-03-17 18:37:32+00:00, davehart@shiny.ad.hartbrothers.com +376 -0 + VC9 equivalent to ntpdc.dsp + + ports/winnt/ntpdc/ntpdc.vcproj@1.0, 2009-03-17 18:37:31+00:00, davehart@shiny.ad.hartbrothers.com +0 -0 + + ports/winnt/ntpq/ntpq.vcproj@1.1, 2009-03-17 18:37:48+00:00, davehart@shiny.ad.hartbrothers.com +370 -0 + VC9 equivalent to ntpq.dsp + + ports/winnt/ntpq/ntpq.vcproj@1.0, 2009-03-17 18:37:48+00:00, davehart@shiny.ad.hartbrothers.com +0 -0 + +ChangeSet@1.1549.1.3, 2009-03-17 18:18:13+00:00, hart@pogo.udel.edu +1 -0 + config.h: + now works with VC6 and VC9 compilers, declares DWORD_PTR on VC6 + + ports/winnt/include/config.h@1.48, 2009-03-17 18:18:01+00:00, hart@pogo.udel.edu +243 -96 + now works with VC6 and VC9 compilers, declares DWORD_PTR on VC6 + +ChangeSet@1.1549.2.1, 2009-02-21 07:45:56-05:00, utterback@pogo.udel.edu +2 -0 + configure.ac, ChangeLog: + [BUG 1131] UDP sockets should not use SIGPOLL on Solaris. + + ChangeLog@1.50.2.1, 2009-02-20 12:30:18-05:00, utterback@pogo.udel.edu +2 -0 + [BUG 1131] UDP sockets should not use SIGPOLL on Solaris. + + configure.ac@1.402, 2009-02-20 11:30:02-05:00, utterback@pogo.udel.edu +3 -0 + [BUG 1131] UDP sockets should not use SIGPOLL on Solaris. + +ChangeSet@1.1549.1.2, 2009-02-07 21:13:17+00:00, hart@pogo.udel.edu +1 -0 + ChangeLog: + formatting of newest line + + ChangeLog@1.50.1.2, 2009-02-07 21:12:26+00:00, hart@pogo.udel.edu +1 -1 + formatting of newest line + +ChangeSet@1.1549.1.1, 2009-02-07 21:05:32+00:00, hart@pogo.udel.edu +3 -0 + nt_clockstuff.c, ChangeLog, ntp_iocompletionport.c: + [BUG 1124] Lock QueryPerformanceCounter() client threads to same CPU + + ChangeLog@1.50.1.1, 2009-02-07 21:04:52+00:00, hart@pogo.udel.edu +2 -0 + [BUG 1124] Lock QueryPerformanceCounter() client threads to same CPU + + ports/winnt/ntpd/nt_clockstuff.c@1.24, 2009-02-07 21:02:04+00:00, hart@pogo.udel.edu +89 -22 + [BUG 1124] Lock QueryPerformanceCounter() client threads to same CPU + + ports/winnt/ntpd/ntp_iocompletionport.c@1.27, 2009-02-07 21:03:34+00:00, hart@pogo.udel.edu +12 -0 + [BUG 1124] Lock QueryPerformanceCounter() client threads to same CPU + +ChangeSet@1.1551, 2009-02-07 14:08:35-05:00, hart@pogo.udel.edu +1 -0 + ChangeLog: + DPRINTF safer + + ChangeLog@1.51, 2009-02-07 14:07:34-05:00, hart@pogo.udel.edu +2 -0 + DPRINTF safer + +ChangeSet@1.1550, 2009-02-06 19:00:15-05:00, hart@pogo.udel.edu +2 -0 + ntp_debug.h: + DPRINTF won't eat following else, always evaluates to a statement + ntp_io.c: + DPRINTF_INTERFACE always evaluates to a statement + fix DPRINTF use with misplaced semicolon + + include/ntp_debug.h@1.2, 2009-02-06 18:50:27-05:00, hart@pogo.udel.edu +6 -4 + DPRINTF won't eat following else, always evaluates to a statement + + ntpd/ntp_io.c@1.257, 2009-02-06 18:53:58-05:00, hart@pogo.udel.edu +2 -2 + DPRINTF_INTERFACE always evaluates to a statement + fix DPRINTF use with misplaced semicolon + +ChangeSet@1.1549, 2009-01-08 06:21:48-05:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P6 + TAG: NTP_4_2_4P6 + + ChangeLog@1.50, 2009-01-08 06:21:25-05:00, stenn@whimsy.udel.edu +1 -2 + NTP_4_2_4P6 + + ntpd/ntpd-opts.c@1.76, 2009-01-08 06:21:26-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + + ntpd/ntpd-opts.h@1.76, 2009-01-08 06:21:27-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P6 + + ntpd/ntpd-opts.texi@1.75, 2009-01-08 06:21:28-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P6 + + ntpd/ntpd.1@1.74, 2009-01-08 06:21:29-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + + ntpd/ntpdsim-opts.c@1.76, 2009-01-08 06:21:29-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + + ntpd/ntpdsim-opts.h@1.76, 2009-01-08 06:21:30-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P6 + + ntpd/ntpdsim-opts.texi@1.74, 2009-01-08 06:21:31-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P6 + + ntpd/ntpdsim.1@1.74, 2009-01-08 06:21:32-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + + ntpdc/ntpdc-opts.c@1.76, 2009-01-08 06:21:33-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + + ntpdc/ntpdc-opts.h@1.76, 2009-01-08 06:21:34-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P6 + + ntpdc/ntpdc-opts.texi@1.74, 2009-01-08 06:21:34-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P6 + + ntpdc/ntpdc.1@1.74, 2009-01-08 06:21:35-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + + ntpq/ntpq-opts.c@1.78, 2009-01-08 06:21:36-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + + ntpq/ntpq-opts.h@1.78, 2009-01-08 06:21:37-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P6 + + ntpq/ntpq-opts.texi@1.75, 2009-01-08 06:21:37-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P6 + + ntpq/ntpq.1@1.74, 2009-01-08 06:21:39-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + + packageinfo.sh@1.105, 2009-01-08 06:21:39-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P6 + + sntp/sntp-opts.c@1.74, 2009-01-08 06:21:40-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + + sntp/sntp-opts.h@1.74, 2009-01-08 06:21:41-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P6 + + sntp/sntp-opts.texi@1.71, 2009-01-08 06:21:42-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P6 + + sntp/sntp.1@1.74, 2009-01-08 06:21:42-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + + util/ntp-keygen-opts.c@1.75, 2009-01-08 06:21:43-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + + util/ntp-keygen-opts.h@1.75, 2009-01-08 06:21:44-05:00, stenn@whimsy.udel.edu +3 -3 + NTP_4_2_4P6 + + util/ntp-keygen-opts.texi@1.73, 2009-01-08 06:21:44-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P6 + + util/ntp-keygen.1@1.73, 2009-01-08 06:21:45-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P6 + +ChangeSet@1.1548, 2009-01-08 04:49:23-05:00, stenn@whimsy.udel.edu +26 -0 + NTP_4_2_4P5 + TAG: NTP_4_2_4P5 + + ChangeLog@1.49, 2009-01-08 04:48:59-05:00, stenn@whimsy.udel.edu +1 -0 + NTP_4_2_4P5 + + ntpd/ntpd-opts.c@1.75, 2009-01-08 04:49:01-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + ntpd/ntpd-opts.h@1.75, 2009-01-08 04:49:01-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + ntpd/ntpd-opts.texi@1.74, 2009-01-08 04:49:03-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P5 + + ntpd/ntpd.1@1.73, 2009-01-08 04:49:03-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P5 + + ntpd/ntpdsim-opts.c@1.75, 2009-01-08 04:49:04-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + ntpd/ntpdsim-opts.h@1.75, 2009-01-08 04:49:04-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + ntpd/ntpdsim-opts.texi@1.73, 2009-01-08 04:49:05-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + ntpd/ntpdsim.1@1.73, 2009-01-08 04:49:06-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P5 + + ntpdc/ntpdc-opts.c@1.75, 2009-01-08 04:49:06-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + ntpdc/ntpdc-opts.h@1.75, 2009-01-08 04:49:07-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + ntpdc/ntpdc-opts.texi@1.73, 2009-01-08 04:49:08-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P5 + + ntpdc/ntpdc.1@1.73, 2009-01-08 04:49:09-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P5 + + ntpq/ntpq-opts.c@1.77, 2009-01-08 04:49:10-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + ntpq/ntpq-opts.h@1.77, 2009-01-08 04:49:10-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + ntpq/ntpq-opts.texi@1.74, 2009-01-08 04:49:11-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P5 + + ntpq/ntpq.1@1.73, 2009-01-08 04:49:12-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P5 + + packageinfo.sh@1.104, 2009-01-08 04:49:13-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P5 + + sntp/sntp-opts.c@1.73, 2009-01-08 04:49:14-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + sntp/sntp-opts.h@1.73, 2009-01-08 04:49:15-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + sntp/sntp-opts.texi@1.70, 2009-01-08 04:49:16-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + sntp/sntp.1@1.73, 2009-01-08 04:49:17-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P5 + + util/ntp-keygen-opts.c@1.74, 2009-01-08 04:49:18-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + util/ntp-keygen-opts.h@1.74, 2009-01-08 04:49:19-05:00, stenn@whimsy.udel.edu +1 -1 + NTP_4_2_4P5 + + util/ntp-keygen-opts.texi@1.72, 2009-01-08 04:49:20-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P5 + + util/ntp-keygen.1@1.72, 2009-01-08 04:49:20-05:00, stenn@whimsy.udel.edu +2 -2 + NTP_4_2_4P5 + +ChangeSet@1.1547, 2009-01-08 03:21:09-05:00, stenn@whimsy.udel.edu +1 -0 + 4.2.4p6 + + packageinfo.sh@1.103, 2009-01-08 03:20:56-05:00, stenn@whimsy.udel.edu +1 -1 + 4.2.4p6 + +ChangeSet@1.1546, 2009-01-08 03:14:17-05:00, stenn@whimsy.udel.edu +1 -0 + merge cleanup + + ChangeLog@1.48, 2009-01-08 03:14:09-05:00, stenn@whimsy.udel.edu +1 -1 + merge cleanup + +ChangeSet@1.1543.1.1, 2009-01-08 02:57:52-05:00, stenn@whimsy.udel.edu +5 -0 + 4.2.4p6 + + ChangeLog@1.46, 2009-01-07 05:31:52-05:00, stenn@whimsy.udel.edu +6 -0 + Fix incorrect check of EVP_VerifyFinal()'s return value. + + NEWS@1.100, 2009-01-08 02:57:32-05:00, stenn@whimsy.udel.edu +16 -0 + 4.2.4p6 + + html/copyright.html@1.38, 2009-01-07 05:30:58-05:00, stenn@whimsy.udel.edu +1 -1 + Update the copyright year + + ntpd/ntp_crypto.c@1.108, 2009-01-07 05:31:50-05:00, stenn@whimsy.udel.edu +1 -1 + Fix incorrect check of EVP_VerifyFinal()'s return value. + + packageinfo.sh@1.102, 2009-01-08 02:57:33-05:00, stenn@whimsy.udel.edu +1 -1 + 4.2.4p6 + +ChangeSet@1.1544, 2009-01-07 18:00:50+01:00, burnicki@pogo.udel.edu +2 -0 + [BUG 1113] Fixed build errors with recent versions of openSSL. + + ChangeLog@1.45.1.1, 2009-01-07 18:00:47+01:00, burnicki@pogo.udel.edu +1 -0 + [BUG 1113] Fixed build errors with recent versions of openSSL. + + ntpd/ntp_crypto.c@1.107.1.1, 2009-01-07 18:00:47+01:00, burnicki@pogo.udel.edu +2 -2 + [BUG 1113] Fixed build errors with recent versions of openSSL. + +ChangeSet@1.1543, 2008-08-17 06:21:39-04:00, stenn@whimsy.udel.edu +1 -0 + typo + + scripts/addChangeLogTag@1.3, 2008-08-17 06:21:25-04:00, stenn@whimsy.udel.edu +0 -3 + typo + +ChangeSet@1.1542, 2008-08-17 06:16:19-04:00, stenn@whimsy.udel.edu +1 -0 + typo + + ChangeLog@1.45, 2008-08-17 06:16:08-04:00, stenn@whimsy.udel.edu +0 -2 + typo + ChangeSet@1.1541, 2008-08-17 05:30:47-04:00, stenn@whimsy.udel.edu +26 -0 NTP_4_2_4P5 TAG: NTP_4_2_4P5 @@ -2906,288 +4630,108 @@ ChangeSet@1.1474, 2007-04-14 01:11:33-04:00, stenn@whimsy.udel.edu +166 -0 BitKeeper/deleted/.del-COPYING.lgpl@1.3, 2007-04-13 18:58:46-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/COPYING.lgpl - sntp/libopts/COPYING.lgpl@1.1, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +502 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/COPYING.lgpl - - sntp/libopts/COPYING.lgpl@1.0, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-COPYING.lgpl~54a90ba0899593cb@1.2, 2007-04-13 19:05:57-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/COPYING.lgpl - libopts/COPYING.lgpl@1.1, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +502 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/COPYING.lgpl - - libopts/COPYING.lgpl@1.0, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-COPYING.mbsd@1.2, 2007-04-13 18:58:48-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/COPYING.mbsd - libopts/COPYING.mbsd@1.1, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +26 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/COPYING.mbsd - - libopts/COPYING.mbsd@1.0, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-COPYING.mbsd~9b1945bb2136c70b@1.2, 2007-04-13 19:05:59-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/COPYING.mbsd - sntp/libopts/COPYING.mbsd@1.1, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +26 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/COPYING.mbsd - - sntp/libopts/COPYING.mbsd@1.0, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-MakeDefs.inc@1.2, 2007-04-13 18:58:49-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/MakeDefs.inc BitKeeper/deleted/.del-MakeDefs.inc~2b8fdfc9df6d652d@1.2, 2007-04-13 19:06:00-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/MakeDefs.inc - sntp/libopts/MakeDefs.inc@1.1, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/MakeDefs.inc - - sntp/libopts/MakeDefs.inc@1.0, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/MakeDefs.inc@1.1, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/MakeDefs.inc - - libopts/MakeDefs.inc@1.0, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-Makefile.am@1.7, 2007-04-13 18:58:50-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/Makefile.am - libopts/Makefile.am@1.1, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +24 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/Makefile.am - - libopts/Makefile.am@1.0, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-Makefile.am~fa9bd87b6045015c@1.5, 2007-04-13 19:06:01-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/Makefile.am - sntp/libopts/Makefile.am@1.1, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +24 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/Makefile.am - - sntp/libopts/Makefile.am@1.0, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-README@1.2, 2007-04-13 18:58:51-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/README BitKeeper/deleted/.del-README~1ae087758ee867d4@1.2, 2007-04-13 19:06:02-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/README - sntp/libopts/README@1.1, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +93 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/README - - sntp/libopts/README@1.0, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/README@1.1, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +93 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/README - - libopts/README@1.0, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-autoopts.c@1.11, 2007-04-13 18:58:52-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/autoopts.c BitKeeper/deleted/.del-autoopts.c~5b417341bc85d7a8@1.8, 2007-04-13 19:06:03-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/autoopts.c - sntp/libopts/autoopts.c@1.1, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +1101 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/autoopts.c - - sntp/libopts/autoopts.c@1.0, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/autoopts.c@1.1, 2007-04-13 19:10:06-04:00, stenn@whimsy.udel.edu +1101 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/autoopts.c - - libopts/autoopts.c@1.0, 2007-04-13 19:10:06-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-autoopts.h@1.10, 2007-04-13 18:58:53-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/autoopts.h - libopts/autoopts.h@1.1, 2007-04-13 19:10:06-04:00, stenn@whimsy.udel.edu +377 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/autoopts.h - - libopts/autoopts.h@1.0, 2007-04-13 19:10:06-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-autoopts.h~8cdce21b181a1a01@1.8, 2007-04-13 19:06:05-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/autoopts.h - sntp/libopts/autoopts.h@1.1, 2007-04-13 19:08:51-04:00, stenn@whimsy.udel.edu +377 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/autoopts.h - - sntp/libopts/autoopts.h@1.0, 2007-04-13 19:08:51-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-boolean.c@1.9, 2007-04-13 18:58:54-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/boolean.c - sntp/libopts/boolean.c@1.1, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +106 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/boolean.c - - sntp/libopts/boolean.c@1.0, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-boolean.c~a5d10c8997e6a2e2@1.6, 2007-04-13 19:06:06-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/boolean.c - libopts/boolean.c@1.1, 2007-04-13 19:10:07-04:00, stenn@whimsy.udel.edu +106 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/boolean.c - - libopts/boolean.c@1.0, 2007-04-13 19:10:07-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-compat.h@1.13, 2007-04-13 19:04:47-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/compat/compat.h - sntp/libopts/compat/compat.h@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +314 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/compat/compat.h - - sntp/libopts/compat/compat.h@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-compat.h~9682d0ac273ae32@1.9, 2007-04-13 19:06:50-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/compat/compat.h - libopts/compat/compat.h@1.1, 2007-04-13 19:10:38-04:00, stenn@whimsy.udel.edu +314 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/compat.h - - libopts/compat/compat.h@1.0, 2007-04-13 19:10:38-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-configfile.c@1.11, 2007-04-13 18:58:56-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/configfile.c - libopts/configfile.c@1.1, 2007-04-13 19:10:07-04:00, stenn@whimsy.udel.edu +1288 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/configfile.c - - libopts/configfile.c@1.0, 2007-04-13 19:10:07-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-configfile.c~8194f784686fa804@1.8, 2007-04-13 19:06:07-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/configfile.c - sntp/libopts/configfile.c@1.1, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +1288 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/configfile.c - - sntp/libopts/configfile.c@1.0, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-cook.c@1.10, 2007-04-13 18:58:57-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/cook.c - sntp/libopts/cook.c@1.1, 2007-04-13 19:08:53-04:00, stenn@whimsy.udel.edu +354 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/cook.c - - sntp/libopts/cook.c@1.0, 2007-04-13 19:08:53-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/cook.c@1.1, 2007-04-13 19:10:08-04:00, stenn@whimsy.udel.edu +354 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/cook.c - - libopts/cook.c@1.0, 2007-04-13 19:10:08-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-cook.c~e48d079a438432dc@1.7, 2007-04-13 19:06:08-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/cook.c BitKeeper/deleted/.del-enumeration.c@1.10, 2007-04-13 18:58:59-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/enumeration.c - libopts/enumeration.c@1.1, 2007-04-13 19:10:09-04:00, stenn@whimsy.udel.edu +498 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/enumeration.c - - libopts/enumeration.c@1.0, 2007-04-13 19:10:09-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-enumeration.c~5f4e6af2706370ae@1.7, 2007-04-13 19:06:10-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/enumeration.c - sntp/libopts/enumeration.c@1.1, 2007-04-13 19:08:53-04:00, stenn@whimsy.udel.edu +498 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/enumeration.c - - sntp/libopts/enumeration.c@1.0, 2007-04-13 19:08:53-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-environment.c@1.9, 2007-04-13 18:59:00-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/environment.c BitKeeper/deleted/.del-environment.c~2bae2966695067c2@1.6, 2007-04-13 19:06:11-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/environment.c - sntp/libopts/environment.c@1.1, 2007-04-13 19:08:54-04:00, stenn@whimsy.udel.edu +260 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/environment.c - - sntp/libopts/environment.c@1.0, 2007-04-13 19:08:54-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/environment.c@1.1, 2007-04-13 19:10:09-04:00, stenn@whimsy.udel.edu +260 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/environment.c - - libopts/environment.c@1.0, 2007-04-13 19:10:09-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-genshell.c@1.10, 2007-04-13 18:59:01-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/genshell.c BitKeeper/deleted/.del-genshell.c~1fd152b2b52bdab@1.7, 2007-04-13 19:06:12-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/genshell.c - libopts/genshell.c@1.1, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +345 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/genshell.c - - libopts/genshell.c@1.0, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +0 -0 - - sntp/libopts/genshell.c@1.1, 2007-04-13 19:08:55-04:00, stenn@whimsy.udel.edu +345 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/genshell.c - - sntp/libopts/genshell.c@1.0, 2007-04-13 19:08:55-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-genshell.h@1.10, 2007-04-13 18:59:02-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/genshell.h BitKeeper/deleted/.del-genshell.h~375f0fa5b925f454@1.7, 2007-04-13 19:06:14-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/genshell.h - libopts/genshell.h@1.1, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +149 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/genshell.h - - libopts/genshell.h@1.0, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +0 -0 - - sntp/libopts/genshell.h@1.1, 2007-04-13 19:08:51-04:00, stenn@whimsy.udel.edu +149 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/genshell.h - - sntp/libopts/genshell.h@1.0, 2007-04-13 19:08:51-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-libopts.c@1.4, 2007-04-13 18:59:04-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/libopts.c BitKeeper/deleted/.del-libopts.c~58b8fbed850e6d5e@1.4, 2007-04-13 19:06:15-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/libopts.c - libopts/libopts.c@1.1, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +30 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/libopts.c - - libopts/libopts.c@1.0, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +0 -0 - - sntp/libopts/libopts.c@1.1, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +30 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/libopts.c - - sntp/libopts/libopts.c@1.0, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-libopts.m4@1.15, 2007-04-13 19:04:54-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/m4/libopts.m4 - libopts/m4/libopts.m4@1.1, 2007-04-13 19:10:43-04:00, stenn@whimsy.udel.edu +489 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/m4/libopts.m4 - - libopts/m4/libopts.m4@1.0, 2007-04-13 19:10:43-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-libopts.m4~9e0f33f57d3a0a9@1.12, 2007-04-13 19:06:56-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/m4/libopts.m4 - sntp/libopts/m4/libopts.m4@1.1, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +489 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/m4/libopts.m4 - - sntp/libopts/m4/libopts.m4@1.0, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-liboptschk.m4@1.4, 2007-04-13 19:04:55-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/m4/liboptschk.m4 - libopts/m4/liboptschk.m4@1.1, 2007-04-13 19:10:43-04:00, stenn@whimsy.udel.edu +42 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/m4/liboptschk.m4 - - libopts/m4/liboptschk.m4@1.0, 2007-04-13 19:10:43-04:00, stenn@whimsy.udel.edu +0 -0 - - sntp/libopts/m4/liboptschk.m4@1.1, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +42 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/m4/liboptschk.m4 - - sntp/libopts/m4/liboptschk.m4@1.0, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-liboptschk.m4~bbeebebe76865058@1.4, 2007-04-13 19:06:58-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/m4/liboptschk.m4 @@ -3203,125 +4747,45 @@ ChangeSet@1.1474, 2007-04-14 01:11:33-04:00, stenn@whimsy.udel.edu +166 -0 BitKeeper/deleted/.del-load.c~59960aa12bb95bf7@1.8, 2007-04-13 19:06:16-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/load.c - sntp/libopts/load.c@1.1, 2007-04-13 19:08:55-04:00, stenn@whimsy.udel.edu +563 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/load.c - - sntp/libopts/load.c@1.0, 2007-04-13 19:08:55-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/load.c@1.1, 2007-04-13 19:10:11-04:00, stenn@whimsy.udel.edu +563 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/load.c - - libopts/load.c@1.0, 2007-04-13 19:10:11-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-makeshell.c@1.12, 2007-04-13 18:59:06-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/makeshell.c BitKeeper/deleted/.del-makeshell.c~4fcd12fc31c0a4a4@1.9, 2007-04-13 19:06:18-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/makeshell.c - sntp/libopts/makeshell.c@1.1, 2007-04-13 19:08:56-04:00, stenn@whimsy.udel.edu +1122 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/makeshell.c - - sntp/libopts/makeshell.c@1.0, 2007-04-13 19:08:56-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/makeshell.c@1.1, 2007-04-13 19:10:11-04:00, stenn@whimsy.udel.edu +1122 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/makeshell.c - - libopts/makeshell.c@1.0, 2007-04-13 19:10:11-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-nested.c@1.10, 2007-04-13 18:59:07-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/nested.c - sntp/libopts/nested.c@1.1, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +733 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/nested.c - - sntp/libopts/nested.c@1.0, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-nested.c~85346d5d12098689@1.7, 2007-04-13 19:06:19-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/nested.c - libopts/nested.c@1.1, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +733 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/nested.c - - libopts/nested.c@1.0, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-numeric.c@1.10, 2007-04-13 18:59:08-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/numeric.c BitKeeper/deleted/.del-numeric.c~cdb7deb5cf6f27c2@1.7, 2007-04-13 19:06:21-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/numeric.c - sntp/libopts/numeric.c@1.1, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +93 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/numeric.c - - sntp/libopts/numeric.c@1.0, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/numeric.c@1.1, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +93 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/numeric.c - - libopts/numeric.c@1.0, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-options.h@1.11, 2007-04-13 19:04:44-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/autoopts/options.h - sntp/libopts/autoopts/options.h@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +964 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/autoopts/options.h - - sntp/libopts/autoopts/options.h@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-options.h~6eb465cb95a56bee@1.8, 2007-04-13 19:06:45-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/autoopts/options.h - libopts/autoopts/options.h@1.1, 2007-04-13 19:10:30-04:00, stenn@whimsy.udel.edu +964 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/autoopts/options.h - - libopts/autoopts/options.h@1.0, 2007-04-13 19:10:30-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-pathfind.c@1.10, 2007-04-13 19:04:49-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/compat/pathfind.c - sntp/libopts/compat/pathfind.c@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +339 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/compat/pathfind.c - - sntp/libopts/compat/pathfind.c@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-pathfind.c~a0863179d884d4a4@1.7, 2007-04-13 19:06:51-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/compat/pathfind.c - libopts/compat/pathfind.c@1.1, 2007-04-13 19:10:38-04:00, stenn@whimsy.udel.edu +339 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/pathfind.c - - libopts/compat/pathfind.c@1.0, 2007-04-13 19:10:38-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-pgusage.c@1.10, 2007-04-13 18:59:09-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/pgusage.c - sntp/libopts/pgusage.c@1.1, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +157 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/pgusage.c - - sntp/libopts/pgusage.c@1.0, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/pgusage.c@1.1, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +157 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/pgusage.c - - libopts/pgusage.c@1.0, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-pgusage.c~d981c42eb301cfdd@1.6, 2007-04-13 19:06:22-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/pgusage.c BitKeeper/deleted/.del-proto.h@1.12, 2007-04-13 18:59:11-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/proto.h - sntp/libopts/proto.h@1.1, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +91 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/proto.h - - sntp/libopts/proto.h@1.0, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/proto.h@1.1, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +91 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/proto.h - - libopts/proto.h@1.0, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-proto.h~fa076f6dd9d0667e@1.9, 2007-04-13 19:06:23-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/proto.h @@ -3331,109 +4795,39 @@ ChangeSet@1.1474, 2007-04-14 01:11:33-04:00, stenn@whimsy.udel.edu +166 -0 BitKeeper/deleted/.del-putshell.c~24959f5e1ba688e6@1.8, 2007-04-13 19:06:24-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/putshell.c - sntp/libopts/putshell.c@1.1, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +335 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/putshell.c - - sntp/libopts/putshell.c@1.0, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/putshell.c@1.1, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +335 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/putshell.c - - libopts/putshell.c@1.0, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-restore.c@1.10, 2007-04-13 18:59:13-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/restore.c - sntp/libopts/restore.c@1.1, 2007-04-13 19:08:58-04:00, stenn@whimsy.udel.edu +250 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/restore.c - - sntp/libopts/restore.c@1.0, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/restore.c@1.1, 2007-04-13 19:10:13-04:00, stenn@whimsy.udel.edu +250 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/restore.c - - libopts/restore.c@1.0, 2007-04-13 19:10:13-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-restore.c~eada4acbf21cd8bf@1.6, 2007-04-13 19:06:26-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/restore.c BitKeeper/deleted/.del-save.c@1.11, 2007-04-13 18:59:15-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/save.c - libopts/save.c@1.1, 2007-04-13 19:10:14-04:00, stenn@whimsy.udel.edu +512 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/save.c - - libopts/save.c@1.0, 2007-04-13 19:10:14-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-save.c~a29f5bd429a568bb@1.8, 2007-04-13 19:06:27-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/save.c - sntp/libopts/save.c@1.1, 2007-04-13 19:08:58-04:00, stenn@whimsy.udel.edu +512 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/save.c - - sntp/libopts/save.c@1.0, 2007-04-13 19:08:58-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-snprintf.c@1.5, 2007-04-13 19:04:50-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/compat/snprintf.c - libopts/compat/snprintf.c@1.1, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +60 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/snprintf.c - - libopts/compat/snprintf.c@1.0, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-snprintf.c~66578c716014cd3d@1.4, 2007-04-13 19:06:52-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/compat/snprintf.c - sntp/libopts/compat/snprintf.c@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +60 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/compat/snprintf.c - - sntp/libopts/compat/snprintf.c@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-sort.c@1.9, 2007-04-13 18:59:16-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/sort.c - sntp/libopts/sort.c@1.1, 2007-04-13 19:08:59-04:00, stenn@whimsy.udel.edu +359 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/sort.c - - sntp/libopts/sort.c@1.0, 2007-04-13 19:08:59-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/sort.c@1.1, 2007-04-13 19:10:14-04:00, stenn@whimsy.udel.edu +359 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/sort.c - - libopts/sort.c@1.0, 2007-04-13 19:10:14-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-sort.c~bec5a7fb6a01a5dc@1.5, 2007-04-13 19:06:28-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/sort.c BitKeeper/deleted/.del-stack.c@1.11, 2007-04-13 18:59:17-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/stack.c - sntp/libopts/stack.c@1.1, 2007-04-13 19:08:59-04:00, stenn@whimsy.udel.edu +269 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/stack.c - - sntp/libopts/stack.c@1.0, 2007-04-13 19:08:59-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/stack.c@1.1, 2007-04-13 19:10:15-04:00, stenn@whimsy.udel.edu +269 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/stack.c - - libopts/stack.c@1.0, 2007-04-13 19:10:15-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-stack.c~e817b57b18b315c1@1.8, 2007-04-13 19:06:29-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/stack.c BitKeeper/deleted/.del-strchr.c@1.4, 2007-04-13 19:04:51-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/compat/strchr.c - sntp/libopts/compat/strchr.c@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +60 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/compat/strchr.c - - sntp/libopts/compat/strchr.c@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/compat/strchr.c@1.1, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +60 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/strchr.c - - libopts/compat/strchr.c@1.0, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-strchr.c~80e88afbe7e2209a@1.4, 2007-04-13 19:06:53-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/compat/strchr.c @@ -3443,127 +4837,457 @@ ChangeSet@1.1474, 2007-04-14 01:11:33-04:00, stenn@whimsy.udel.edu +166 -0 BitKeeper/deleted/.del-strdup.c~1f262be5e55c3c4a@1.3, 2007-04-13 19:06:54-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/compat/strdup.c - sntp/libopts/compat/strdup.c@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +19 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/compat/strdup.c - - sntp/libopts/compat/strdup.c@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/compat/strdup.c@1.1, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +19 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/strdup.c - - libopts/compat/strdup.c@1.0, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-streqvcmp.c@1.10, 2007-04-13 18:59:19-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/streqvcmp.c BitKeeper/deleted/.del-streqvcmp.c~66420c6082b06827@1.7, 2007-04-13 19:06:31-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/streqvcmp.c - libopts/streqvcmp.c@1.1, 2007-04-13 19:10:15-04:00, stenn@whimsy.udel.edu +289 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/streqvcmp.c - - libopts/streqvcmp.c@1.0, 2007-04-13 19:10:15-04:00, stenn@whimsy.udel.edu +0 -0 - - sntp/libopts/streqvcmp.c@1.1, 2007-04-13 19:09:00-04:00, stenn@whimsy.udel.edu +289 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/streqvcmp.c - - sntp/libopts/streqvcmp.c@1.0, 2007-04-13 19:09:00-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-text_mmap.c@1.9, 2007-04-13 18:59:20-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/text_mmap.c - libopts/text_mmap.c@1.1, 2007-04-13 19:10:16-04:00, stenn@whimsy.udel.edu +363 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/text_mmap.c - - libopts/text_mmap.c@1.0, 2007-04-13 19:10:16-04:00, stenn@whimsy.udel.edu +0 -0 - - sntp/libopts/text_mmap.c@1.1, 2007-04-13 19:09:01-04:00, stenn@whimsy.udel.edu +363 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/text_mmap.c - - sntp/libopts/text_mmap.c@1.0, 2007-04-13 19:09:01-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-text_mmap.c~f1915a52b87816ba@1.6, 2007-04-13 19:06:32-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/text_mmap.c BitKeeper/deleted/.del-tokenize.c@1.6, 2007-04-13 18:59:21-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/tokenize.c - sntp/libopts/tokenize.c@1.1, 2007-04-13 19:09:01-04:00, stenn@whimsy.udel.edu +321 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/tokenize.c - - sntp/libopts/tokenize.c@1.0, 2007-04-13 19:09:01-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/tokenize.c@1.1, 2007-04-13 19:10:17-04:00, stenn@whimsy.udel.edu +321 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/tokenize.c - - libopts/tokenize.c@1.0, 2007-04-13 19:10:17-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-tokenize.c~ae2f23dbb2bee589@1.5, 2007-04-13 19:06:33-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/tokenize.c BitKeeper/deleted/.del-usage-txt.h@1.10, 2007-04-13 19:04:46-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/autoopts/usage-txt.h - libopts/autoopts/usage-txt.h@1.1, 2007-04-13 19:10:31-04:00, stenn@whimsy.udel.edu +355 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/autoopts/usage-txt.h - - libopts/autoopts/usage-txt.h@1.0, 2007-04-13 19:10:31-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-usage-txt.h~6ce4dce87430d1b@1.7, 2007-04-13 19:06:47-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/autoopts/usage-txt.h - sntp/libopts/autoopts/usage-txt.h@1.1, 2007-04-13 19:08:49-04:00, stenn@whimsy.udel.edu +355 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/autoopts/usage-txt.h - - sntp/libopts/autoopts/usage-txt.h@1.0, 2007-04-13 19:08:49-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-usage.c@1.10, 2007-04-13 18:59:22-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/usage.c BitKeeper/deleted/.del-usage.c~c868ef1e661a6eb1@1.8, 2007-04-13 19:06:34-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/usage.c - sntp/libopts/usage.c@1.1, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +731 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/usage.c - - sntp/libopts/usage.c@1.0, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +0 -0 - - libopts/usage.c@1.1, 2007-04-13 19:10:17-04:00, stenn@whimsy.udel.edu +731 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/usage.c - - libopts/usage.c@1.0, 2007-04-13 19:10:17-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-version.c@1.10, 2007-04-13 18:59:24-04:00, stenn@whimsy.udel.edu +0 -0 Delete: libopts/version.c BitKeeper/deleted/.del-version.c~a426e6b58b20d06@1.7, 2007-04-13 19:06:35-04:00, stenn@whimsy.udel.edu +0 -0 Delete: sntp/libopts/version.c - sntp/libopts/version.c@1.1, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +176 -0 - BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/version.c + BitKeeper/deleted/.del-windows-config.h@1.6, 2007-04-13 19:04:53-04:00, stenn@whimsy.udel.edu +0 -0 + Delete: libopts/compat/windows-config.h - sntp/libopts/version.c@1.0, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +0 -0 + BitKeeper/deleted/.del-windows-config.h~36f7ad2ccf764ad2@1.4, 2007-04-13 19:06:56-04:00, stenn@whimsy.udel.edu +0 -0 + Delete: sntp/libopts/compat/windows-config.h + + libopts/COPYING.lgpl@1.1, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +502 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/COPYING.lgpl + + libopts/COPYING.lgpl@1.0, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/COPYING.mbsd@1.1, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +26 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/COPYING.mbsd + + libopts/COPYING.mbsd@1.0, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/MakeDefs.inc@1.1, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/MakeDefs.inc + + libopts/MakeDefs.inc@1.0, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/Makefile.am@1.1, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +24 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/Makefile.am + + libopts/Makefile.am@1.0, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/README@1.1, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +93 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/README + + libopts/README@1.0, 2007-04-13 19:10:05-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/autoopts.c@1.1, 2007-04-13 19:10:06-04:00, stenn@whimsy.udel.edu +1101 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/autoopts.c + + libopts/autoopts.c@1.0, 2007-04-13 19:10:06-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/autoopts.h@1.1, 2007-04-13 19:10:06-04:00, stenn@whimsy.udel.edu +377 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/autoopts.h + + libopts/autoopts.h@1.0, 2007-04-13 19:10:06-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/autoopts/options.h@1.1, 2007-04-13 19:10:30-04:00, stenn@whimsy.udel.edu +964 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/autoopts/options.h + + libopts/autoopts/options.h@1.0, 2007-04-13 19:10:30-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/autoopts/usage-txt.h@1.1, 2007-04-13 19:10:31-04:00, stenn@whimsy.udel.edu +355 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/autoopts/usage-txt.h + + libopts/autoopts/usage-txt.h@1.0, 2007-04-13 19:10:31-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/boolean.c@1.1, 2007-04-13 19:10:07-04:00, stenn@whimsy.udel.edu +106 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/boolean.c + + libopts/boolean.c@1.0, 2007-04-13 19:10:07-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/compat/compat.h@1.1, 2007-04-13 19:10:38-04:00, stenn@whimsy.udel.edu +314 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/compat.h + + libopts/compat/compat.h@1.0, 2007-04-13 19:10:38-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/compat/pathfind.c@1.1, 2007-04-13 19:10:38-04:00, stenn@whimsy.udel.edu +339 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/pathfind.c + + libopts/compat/pathfind.c@1.0, 2007-04-13 19:10:38-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/compat/snprintf.c@1.1, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +60 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/snprintf.c + + libopts/compat/snprintf.c@1.0, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/compat/strchr.c@1.1, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +60 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/strchr.c + + libopts/compat/strchr.c@1.0, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/compat/strdup.c@1.1, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +19 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/strdup.c + + libopts/compat/strdup.c@1.0, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/compat/windows-config.h@1.1, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +129 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/windows-config.h + + libopts/compat/windows-config.h@1.0, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/configfile.c@1.1, 2007-04-13 19:10:07-04:00, stenn@whimsy.udel.edu +1288 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/configfile.c + + libopts/configfile.c@1.0, 2007-04-13 19:10:07-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/cook.c@1.1, 2007-04-13 19:10:08-04:00, stenn@whimsy.udel.edu +354 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/cook.c + + libopts/cook.c@1.0, 2007-04-13 19:10:08-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/enumeration.c@1.1, 2007-04-13 19:10:09-04:00, stenn@whimsy.udel.edu +498 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/enumeration.c + + libopts/enumeration.c@1.0, 2007-04-13 19:10:09-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/environment.c@1.1, 2007-04-13 19:10:09-04:00, stenn@whimsy.udel.edu +260 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/environment.c + + libopts/environment.c@1.0, 2007-04-13 19:10:09-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/genshell.c@1.1, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +345 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/genshell.c + + libopts/genshell.c@1.0, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/genshell.h@1.1, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +149 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/genshell.h + + libopts/genshell.h@1.0, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/libopts.c@1.1, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +30 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/libopts.c + + libopts/libopts.c@1.0, 2007-04-13 19:10:10-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/load.c@1.1, 2007-04-13 19:10:11-04:00, stenn@whimsy.udel.edu +563 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/load.c + + libopts/load.c@1.0, 2007-04-13 19:10:11-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/m4/libopts.m4@1.1, 2007-04-13 19:10:43-04:00, stenn@whimsy.udel.edu +489 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/m4/libopts.m4 + + libopts/m4/libopts.m4@1.0, 2007-04-13 19:10:43-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/m4/liboptschk.m4@1.1, 2007-04-13 19:10:43-04:00, stenn@whimsy.udel.edu +42 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/m4/liboptschk.m4 + + libopts/m4/liboptschk.m4@1.0, 2007-04-13 19:10:43-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/makeshell.c@1.1, 2007-04-13 19:10:11-04:00, stenn@whimsy.udel.edu +1122 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/makeshell.c + + libopts/makeshell.c@1.0, 2007-04-13 19:10:11-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/nested.c@1.1, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +733 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/nested.c + + libopts/nested.c@1.0, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/numeric.c@1.1, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +93 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/numeric.c + + libopts/numeric.c@1.0, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/pgusage.c@1.1, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +157 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/pgusage.c + + libopts/pgusage.c@1.0, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/proto.h@1.1, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +91 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/proto.h + + libopts/proto.h@1.0, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/putshell.c@1.1, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +335 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/putshell.c + + libopts/putshell.c@1.0, 2007-04-13 19:10:12-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/restore.c@1.1, 2007-04-13 19:10:13-04:00, stenn@whimsy.udel.edu +250 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/restore.c + + libopts/restore.c@1.0, 2007-04-13 19:10:13-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/save.c@1.1, 2007-04-13 19:10:14-04:00, stenn@whimsy.udel.edu +512 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/save.c + + libopts/save.c@1.0, 2007-04-13 19:10:14-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/sort.c@1.1, 2007-04-13 19:10:14-04:00, stenn@whimsy.udel.edu +359 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/sort.c + + libopts/sort.c@1.0, 2007-04-13 19:10:14-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/stack.c@1.1, 2007-04-13 19:10:15-04:00, stenn@whimsy.udel.edu +269 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/stack.c + + libopts/stack.c@1.0, 2007-04-13 19:10:15-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/streqvcmp.c@1.1, 2007-04-13 19:10:15-04:00, stenn@whimsy.udel.edu +289 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/streqvcmp.c + + libopts/streqvcmp.c@1.0, 2007-04-13 19:10:15-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/text_mmap.c@1.1, 2007-04-13 19:10:16-04:00, stenn@whimsy.udel.edu +363 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/text_mmap.c + + libopts/text_mmap.c@1.0, 2007-04-13 19:10:16-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/tokenize.c@1.1, 2007-04-13 19:10:17-04:00, stenn@whimsy.udel.edu +321 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/tokenize.c + + libopts/tokenize.c@1.0, 2007-04-13 19:10:17-04:00, stenn@whimsy.udel.edu +0 -0 + + libopts/usage.c@1.1, 2007-04-13 19:10:17-04:00, stenn@whimsy.udel.edu +731 -0 + BitKeeper file /deacon/backroom/ntp-stable/libopts/usage.c + + libopts/usage.c@1.0, 2007-04-13 19:10:17-04:00, stenn@whimsy.udel.edu +0 -0 libopts/version.c@1.1, 2007-04-13 19:10:18-04:00, stenn@whimsy.udel.edu +176 -0 BitKeeper file /deacon/backroom/ntp-stable/libopts/version.c libopts/version.c@1.0, 2007-04-13 19:10:18-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-windows-config.h@1.6, 2007-04-13 19:04:53-04:00, stenn@whimsy.udel.edu +0 -0 - Delete: libopts/compat/windows-config.h + sntp/libopts/COPYING.lgpl@1.1, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +502 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/COPYING.lgpl + + sntp/libopts/COPYING.lgpl@1.0, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/COPYING.mbsd@1.1, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +26 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/COPYING.mbsd + + sntp/libopts/COPYING.mbsd@1.0, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/MakeDefs.inc@1.1, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/MakeDefs.inc + + sntp/libopts/MakeDefs.inc@1.0, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/Makefile.am@1.1, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +24 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/Makefile.am + + sntp/libopts/Makefile.am@1.0, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/README@1.1, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +93 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/README + + sntp/libopts/README@1.0, 2007-04-13 19:09:03-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/autoopts.c@1.1, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +1101 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/autoopts.c + + sntp/libopts/autoopts.c@1.0, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/autoopts.h@1.1, 2007-04-13 19:08:51-04:00, stenn@whimsy.udel.edu +377 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/autoopts.h + + sntp/libopts/autoopts.h@1.0, 2007-04-13 19:08:51-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/autoopts/options.h@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +964 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/autoopts/options.h + + sntp/libopts/autoopts/options.h@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/autoopts/usage-txt.h@1.1, 2007-04-13 19:08:49-04:00, stenn@whimsy.udel.edu +355 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/autoopts/usage-txt.h + + sntp/libopts/autoopts/usage-txt.h@1.0, 2007-04-13 19:08:49-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/boolean.c@1.1, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +106 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/boolean.c + + sntp/libopts/boolean.c@1.0, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/compat/compat.h@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +314 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/compat/compat.h + + sntp/libopts/compat/compat.h@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/compat/pathfind.c@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +339 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/compat/pathfind.c + + sntp/libopts/compat/pathfind.c@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/compat/snprintf.c@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +60 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/compat/snprintf.c + + sntp/libopts/compat/snprintf.c@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/compat/strchr.c@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +60 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/compat/strchr.c + + sntp/libopts/compat/strchr.c@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/compat/strdup.c@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +19 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/compat/strdup.c + + sntp/libopts/compat/strdup.c@1.0, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +0 -0 sntp/libopts/compat/windows-config.h@1.1, 2007-04-13 19:08:48-04:00, stenn@whimsy.udel.edu +129 -0 BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/compat/windows-config.h sntp/libopts/compat/windows-config.h@1.0, 2007-04-13 19:08:47-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper/deleted/.del-windows-config.h~36f7ad2ccf764ad2@1.4, 2007-04-13 19:06:56-04:00, stenn@whimsy.udel.edu +0 -0 - Delete: sntp/libopts/compat/windows-config.h + sntp/libopts/configfile.c@1.1, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +1288 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/configfile.c - libopts/compat/windows-config.h@1.1, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +129 -0 - BitKeeper file /deacon/backroom/ntp-stable/libopts/compat/windows-config.h + sntp/libopts/configfile.c@1.0, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +0 -0 - libopts/compat/windows-config.h@1.0, 2007-04-13 19:10:39-04:00, stenn@whimsy.udel.edu +0 -0 + sntp/libopts/cook.c@1.1, 2007-04-13 19:08:53-04:00, stenn@whimsy.udel.edu +354 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/cook.c + + sntp/libopts/cook.c@1.0, 2007-04-13 19:08:53-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/enumeration.c@1.1, 2007-04-13 19:08:53-04:00, stenn@whimsy.udel.edu +498 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/enumeration.c + + sntp/libopts/enumeration.c@1.0, 2007-04-13 19:08:53-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/environment.c@1.1, 2007-04-13 19:08:54-04:00, stenn@whimsy.udel.edu +260 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/environment.c + + sntp/libopts/environment.c@1.0, 2007-04-13 19:08:54-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/genshell.c@1.1, 2007-04-13 19:08:55-04:00, stenn@whimsy.udel.edu +345 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/genshell.c + + sntp/libopts/genshell.c@1.0, 2007-04-13 19:08:55-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/genshell.h@1.1, 2007-04-13 19:08:51-04:00, stenn@whimsy.udel.edu +149 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/genshell.h + + sntp/libopts/genshell.h@1.0, 2007-04-13 19:08:51-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/libopts.c@1.1, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +30 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/libopts.c + + sntp/libopts/libopts.c@1.0, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/load.c@1.1, 2007-04-13 19:08:55-04:00, stenn@whimsy.udel.edu +563 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/load.c + + sntp/libopts/load.c@1.0, 2007-04-13 19:08:55-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/m4/libopts.m4@1.1, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +489 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/m4/libopts.m4 + + sntp/libopts/m4/libopts.m4@1.0, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/m4/liboptschk.m4@1.1, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +42 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/m4/liboptschk.m4 + + sntp/libopts/m4/liboptschk.m4@1.0, 2007-04-13 19:08:50-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/makeshell.c@1.1, 2007-04-13 19:08:56-04:00, stenn@whimsy.udel.edu +1122 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/makeshell.c + + sntp/libopts/makeshell.c@1.0, 2007-04-13 19:08:56-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/nested.c@1.1, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +733 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/nested.c + + sntp/libopts/nested.c@1.0, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/numeric.c@1.1, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +93 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/numeric.c + + sntp/libopts/numeric.c@1.0, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/pgusage.c@1.1, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +157 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/pgusage.c + + sntp/libopts/pgusage.c@1.0, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/proto.h@1.1, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +91 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/proto.h + + sntp/libopts/proto.h@1.0, 2007-04-13 19:08:52-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/putshell.c@1.1, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +335 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/putshell.c + + sntp/libopts/putshell.c@1.0, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/restore.c@1.1, 2007-04-13 19:08:58-04:00, stenn@whimsy.udel.edu +250 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/restore.c + + sntp/libopts/restore.c@1.0, 2007-04-13 19:08:57-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/save.c@1.1, 2007-04-13 19:08:58-04:00, stenn@whimsy.udel.edu +512 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/save.c + + sntp/libopts/save.c@1.0, 2007-04-13 19:08:58-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/sort.c@1.1, 2007-04-13 19:08:59-04:00, stenn@whimsy.udel.edu +359 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/sort.c + + sntp/libopts/sort.c@1.0, 2007-04-13 19:08:59-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/stack.c@1.1, 2007-04-13 19:08:59-04:00, stenn@whimsy.udel.edu +269 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/stack.c + + sntp/libopts/stack.c@1.0, 2007-04-13 19:08:59-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/streqvcmp.c@1.1, 2007-04-13 19:09:00-04:00, stenn@whimsy.udel.edu +289 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/streqvcmp.c + + sntp/libopts/streqvcmp.c@1.0, 2007-04-13 19:09:00-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/text_mmap.c@1.1, 2007-04-13 19:09:01-04:00, stenn@whimsy.udel.edu +363 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/text_mmap.c + + sntp/libopts/text_mmap.c@1.0, 2007-04-13 19:09:01-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/tokenize.c@1.1, 2007-04-13 19:09:01-04:00, stenn@whimsy.udel.edu +321 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/tokenize.c + + sntp/libopts/tokenize.c@1.0, 2007-04-13 19:09:01-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/usage.c@1.1, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +731 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/usage.c + + sntp/libopts/usage.c@1.0, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +0 -0 + + sntp/libopts/version.c@1.1, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +176 -0 + BitKeeper file /deacon/backroom/ntp-stable/sntp/libopts/version.c + + sntp/libopts/version.c@1.0, 2007-04-13 19:09:02-04:00, stenn@whimsy.udel.edu +0 -0 ChangeSet@1.1473, 2007-04-12 06:32:19-04:00, stenn@whimsy.udel.edu +1 -0 Added ntp2 mirror @@ -5911,189 +7635,189 @@ ChangeSet@1.1379.1.44, 2006-10-12 22:42:48-04:00, stenn@whimsy.udel.edu +62 -0 libopts/autoopts.c@1.10, 2006-10-12 22:41:36-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/autoopts.c@1.7, 2006-10-12 22:41:36-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/autoopts.h@1.9, 2006-10-12 22:41:37-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/autoopts.h@1.7, 2006-10-12 22:41:38-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/boolean.c@1.8, 2006-10-12 22:41:39-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/boolean.c@1.5, 2006-10-12 22:41:39-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/compat/compat.h@1.12, 2006-10-12 22:41:39-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/compat/compat.h@1.8, 2006-10-12 22:41:40-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/configfile.c@1.10, 2006-10-12 22:41:44-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/configfile.c@1.7, 2006-10-12 22:41:45-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/cook.c@1.9, 2006-10-12 22:41:46-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/cook.c@1.6, 2006-10-12 22:41:47-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/enumeration.c@1.9, 2006-10-12 22:41:47-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/enumeration.c@1.6, 2006-10-12 22:41:48-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/environment.c@1.8, 2006-10-12 22:41:48-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/environment.c@1.5, 2006-10-12 22:41:49-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/genshell.c@1.9, 2006-10-12 22:41:50-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/genshell.c@1.6, 2006-10-12 22:41:50-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/genshell.h@1.9, 2006-10-12 22:41:51-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/genshell.h@1.6, 2006-10-12 22:41:52-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/m4/libopts.m4@1.14, 2006-10-12 22:41:54-04:00, stenn@whimsy.udel.edu +2 -2 - autogen-5.8.7 upgrade - - sntp/libopts/m4/libopts.m4@1.11, 2006-10-12 22:41:55-04:00, stenn@whimsy.udel.edu +2 -2 - autogen-5.8.7 upgrade - - libopts/m4/liboptschk.m4@1.3, 2006-10-12 22:41:55-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/m4/liboptschk.m4@1.3, 2006-10-12 22:41:56-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/load.c@1.10, 2006-10-12 22:41:52-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/load.c@1.7, 2006-10-12 22:41:54-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/makeshell.c@1.11, 2006-10-12 22:41:56-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/makeshell.c@1.8, 2006-10-12 22:41:57-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/nested.c@1.9, 2006-10-12 22:41:58-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/nested.c@1.6, 2006-10-12 22:41:59-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/numeric.c@1.9, 2006-10-12 22:41:59-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/numeric.c@1.6, 2006-10-12 22:42:00-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/autoopts/options.h@1.10, 2006-10-12 22:41:33-04:00, stenn@whimsy.udel.edu +2 -2 autogen-5.8.7 upgrade - sntp/libopts/autoopts/options.h@1.7, 2006-10-12 22:41:33-04:00, stenn@whimsy.udel.edu +2 -2 + libopts/autoopts/usage-txt.h@1.9, 2006-10-12 22:41:34-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/boolean.c@1.8, 2006-10-12 22:41:39-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/compat/compat.h@1.12, 2006-10-12 22:41:39-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade libopts/compat/pathfind.c@1.9, 2006-10-12 22:41:41-04:00, stenn@whimsy.udel.edu +2 -3 autogen-5.8.7 upgrade - sntp/libopts/compat/pathfind.c@1.6, 2006-10-12 22:41:42-04:00, stenn@whimsy.udel.edu +2 -3 + libopts/compat/windows-config.h@1.5, 2006-10-12 22:41:43-04:00, stenn@whimsy.udel.edu +8 -2 + autogen-5.8.7 upgrade + + libopts/configfile.c@1.10, 2006-10-12 22:41:44-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/cook.c@1.9, 2006-10-12 22:41:46-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/enumeration.c@1.9, 2006-10-12 22:41:47-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/environment.c@1.8, 2006-10-12 22:41:48-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/genshell.c@1.9, 2006-10-12 22:41:50-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/genshell.h@1.9, 2006-10-12 22:41:51-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/load.c@1.10, 2006-10-12 22:41:52-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/m4/libopts.m4@1.14, 2006-10-12 22:41:54-04:00, stenn@whimsy.udel.edu +2 -2 + autogen-5.8.7 upgrade + + libopts/m4/liboptschk.m4@1.3, 2006-10-12 22:41:55-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/makeshell.c@1.11, 2006-10-12 22:41:56-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/nested.c@1.9, 2006-10-12 22:41:58-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + libopts/numeric.c@1.9, 2006-10-12 22:41:59-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade libopts/pgusage.c@1.9, 2006-10-12 22:42:00-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/pgusage.c@1.5, 2006-10-12 22:42:00-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/proto.h@1.11, 2006-10-12 22:42:01-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/proto.h@1.8, 2006-10-12 22:42:01-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/putshell.c@1.10, 2006-10-12 22:42:01-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/putshell.c@1.7, 2006-10-12 22:42:02-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/restore.c@1.9, 2006-10-12 22:42:03-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/restore.c@1.5, 2006-10-12 22:42:04-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/save.c@1.10, 2006-10-12 22:42:05-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/save.c@1.7, 2006-10-12 22:42:06-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/sort.c@1.8, 2006-10-12 22:42:07-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/sort.c@1.4, 2006-10-12 22:42:07-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/stack.c@1.10, 2006-10-12 22:42:08-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/stack.c@1.7, 2006-10-12 22:42:09-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/streqvcmp.c@1.9, 2006-10-12 22:42:10-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/streqvcmp.c@1.6, 2006-10-12 22:42:10-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/text_mmap.c@1.8, 2006-10-12 22:42:11-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/text_mmap.c@1.5, 2006-10-12 22:42:12-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - libopts/autoopts/usage-txt.h@1.9, 2006-10-12 22:41:34-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - - sntp/libopts/autoopts/usage-txt.h@1.6, 2006-10-12 22:41:35-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/usage.c@1.9, 2006-10-12 22:42:13-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/usage.c@1.7, 2006-10-12 22:42:14-04:00, stenn@whimsy.udel.edu +1 -1 - autogen-5.8.7 upgrade - libopts/version.c@1.9, 2006-10-12 22:42:15-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - sntp/libopts/version.c@1.6, 2006-10-12 22:42:15-04:00, stenn@whimsy.udel.edu +1 -1 + sntp/libopts/autoopts.c@1.7, 2006-10-12 22:41:36-04:00, stenn@whimsy.udel.edu +1 -1 autogen-5.8.7 upgrade - libopts/compat/windows-config.h@1.5, 2006-10-12 22:41:43-04:00, stenn@whimsy.udel.edu +8 -2 + sntp/libopts/autoopts.h@1.7, 2006-10-12 22:41:38-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/autoopts/options.h@1.7, 2006-10-12 22:41:33-04:00, stenn@whimsy.udel.edu +2 -2 + autogen-5.8.7 upgrade + + sntp/libopts/autoopts/usage-txt.h@1.6, 2006-10-12 22:41:35-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/boolean.c@1.5, 2006-10-12 22:41:39-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/compat/compat.h@1.8, 2006-10-12 22:41:40-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/compat/pathfind.c@1.6, 2006-10-12 22:41:42-04:00, stenn@whimsy.udel.edu +2 -3 autogen-5.8.7 upgrade sntp/libopts/compat/windows-config.h@1.3, 2006-10-12 22:41:43-04:00, stenn@whimsy.udel.edu +8 -2 autogen-5.8.7 upgrade + sntp/libopts/configfile.c@1.7, 2006-10-12 22:41:45-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/cook.c@1.6, 2006-10-12 22:41:47-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/enumeration.c@1.6, 2006-10-12 22:41:48-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/environment.c@1.5, 2006-10-12 22:41:49-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/genshell.c@1.6, 2006-10-12 22:41:50-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/genshell.h@1.6, 2006-10-12 22:41:52-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/load.c@1.7, 2006-10-12 22:41:54-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/m4/libopts.m4@1.11, 2006-10-12 22:41:55-04:00, stenn@whimsy.udel.edu +2 -2 + autogen-5.8.7 upgrade + + sntp/libopts/m4/liboptschk.m4@1.3, 2006-10-12 22:41:56-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/makeshell.c@1.8, 2006-10-12 22:41:57-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/nested.c@1.6, 2006-10-12 22:41:59-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/numeric.c@1.6, 2006-10-12 22:42:00-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/pgusage.c@1.5, 2006-10-12 22:42:00-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/proto.h@1.8, 2006-10-12 22:42:01-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/putshell.c@1.7, 2006-10-12 22:42:02-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/restore.c@1.5, 2006-10-12 22:42:04-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/save.c@1.7, 2006-10-12 22:42:06-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/sort.c@1.4, 2006-10-12 22:42:07-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/stack.c@1.7, 2006-10-12 22:42:09-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/streqvcmp.c@1.6, 2006-10-12 22:42:10-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/text_mmap.c@1.5, 2006-10-12 22:42:12-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/usage.c@1.7, 2006-10-12 22:42:14-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + + sntp/libopts/version.c@1.6, 2006-10-12 22:42:15-04:00, stenn@whimsy.udel.edu +1 -1 + autogen-5.8.7 upgrade + ChangeSet@1.1379.1.43, 2006-10-12 19:22:09-04:00, stenn@whimsy.udel.edu +1 -0 Improve the getsockname() arg determination @@ -6561,124 +8285,67 @@ ChangeSet@1.1379.1.31, 2006-10-08 19:39:10-04:00, stenn@whimsy.udel.edu +25 -0 ChangeSet@1.1379.1.30, 2006-10-08 04:32:17-04:00, stenn@whimsy.udel.edu +53 -0 libopts-27.5.3 - libopts/Makefile.am@1.6, 2006-10-08 04:30:43-04:00, stenn@whimsy.udel.edu +1 -1 + clockstuff/clktest-opts.c@1.7, 2006-10-08 04:30:41-04:00, stenn@whimsy.udel.edu +9 -7 libopts-27.5.3 - sntp/libopts/Makefile.am@1.4, 2006-10-08 04:31:07-04:00, stenn@whimsy.udel.edu +10 -6 + clockstuff/clktest-opts.h@1.7, 2006-10-08 04:30:42-04:00, stenn@whimsy.udel.edu +6 -4 + libopts-27.5.3 + + libopts/Makefile.am@1.6, 2006-10-08 04:30:43-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.5.3 libopts/autoopts.c@1.9, 2006-10-08 04:30:43-04:00, stenn@whimsy.udel.edu +8 -6 libopts-27.5.3 - sntp/libopts/autoopts.c@1.6, 2006-10-08 04:31:07-04:00, stenn@whimsy.udel.edu +8 -6 - libopts-27.5.3 - - libopts/configfile.c@1.9, 2006-10-08 04:30:44-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - sntp/libopts/configfile.c@1.6, 2006-10-08 04:31:08-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - libopts/cook.c@1.8, 2006-10-08 04:30:45-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - sntp/libopts/cook.c@1.5, 2006-10-08 04:31:09-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - libopts/enumeration.c@1.8, 2006-10-08 04:30:46-04:00, stenn@whimsy.udel.edu +4 -4 - libopts-27.5.3 - - sntp/libopts/enumeration.c@1.5, 2006-10-08 04:31:09-04:00, stenn@whimsy.udel.edu +4 -4 - libopts-27.5.3 - - libopts/genshell.c@1.8, 2006-10-08 04:30:47-04:00, stenn@whimsy.udel.edu +3 -1 - libopts-27.5.3 - - sntp/libopts/genshell.c@1.5, 2006-10-08 04:31:10-04:00, stenn@whimsy.udel.edu +3 -1 - libopts-27.5.3 - - libopts/genshell.h@1.8, 2006-10-08 04:30:48-04:00, stenn@whimsy.udel.edu +5 -3 - libopts-27.5.3 - - sntp/libopts/genshell.h@1.5, 2006-10-08 04:31:11-04:00, stenn@whimsy.udel.edu +5 -3 - libopts-27.5.3 - - libopts/m4/libopts.m4@1.13, 2006-10-08 04:30:56-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - sntp/libopts/m4/libopts.m4@1.10, 2006-10-08 04:31:20-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - libopts/load.c@1.9, 2006-10-08 04:30:48-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - sntp/libopts/load.c@1.6, 2006-10-08 04:31:11-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - libopts/makeshell.c@1.10, 2006-10-08 04:30:50-04:00, stenn@whimsy.udel.edu +13 -4 - libopts-27.5.3 - - sntp/libopts/makeshell.c@1.7, 2006-10-08 04:31:12-04:00, stenn@whimsy.udel.edu +13 -4 - libopts-27.5.3 - - libopts/nested.c@1.8, 2006-10-08 04:30:50-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - sntp/libopts/nested.c@1.5, 2006-10-08 04:31:13-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - libopts/numeric.c@1.8, 2006-10-08 04:30:51-04:00, stenn@whimsy.udel.edu +4 -4 - libopts-27.5.3 - - sntp/libopts/numeric.c@1.5, 2006-10-08 04:31:14-04:00, stenn@whimsy.udel.edu +4 -4 - libopts-27.5.3 - libopts/autoopts/options.h@1.9, 2006-10-08 04:30:55-04:00, stenn@whimsy.udel.edu +131 -64 libopts-27.5.3 - sntp/libopts/autoopts/options.h@1.6, 2006-10-08 04:31:18-04:00, stenn@whimsy.udel.edu +131 -64 - libopts-27.5.3 - - libopts/proto.h@1.10, 2006-10-08 04:30:51-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - sntp/libopts/proto.h@1.7, 2006-10-08 04:31:14-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.5.3 - - libopts/putshell.c@1.9, 2006-10-08 04:30:51-04:00, stenn@whimsy.udel.edu +8 -8 - libopts-27.5.3 - - sntp/libopts/putshell.c@1.6, 2006-10-08 04:31:15-04:00, stenn@whimsy.udel.edu +8 -8 - libopts-27.5.3 - - libopts/restore.c@1.8, 2006-10-08 04:30:52-04:00, stenn@whimsy.udel.edu +2 -2 - libopts-27.5.3 - - sntp/libopts/restore.c@1.4, 2006-10-08 04:31:15-04:00, stenn@whimsy.udel.edu +2 -2 - libopts-27.5.3 - - libopts/save.c@1.9, 2006-10-08 04:30:53-04:00, stenn@whimsy.udel.edu +7 -8 - libopts-27.5.3 - - sntp/libopts/save.c@1.6, 2006-10-08 04:31:16-04:00, stenn@whimsy.udel.edu +7 -8 - libopts-27.5.3 - - libopts/stack.c@1.9, 2006-10-08 04:30:54-04:00, stenn@whimsy.udel.edu +3 -3 - libopts-27.5.3 - - sntp/libopts/stack.c@1.6, 2006-10-08 04:31:17-04:00, stenn@whimsy.udel.edu +3 -3 - libopts-27.5.3 - libopts/autoopts/usage-txt.h@1.8, 2006-10-08 04:30:56-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.5.3 - sntp/libopts/autoopts/usage-txt.h@1.5, 2006-10-08 04:31:18-04:00, stenn@whimsy.udel.edu +1 -1 + libopts/configfile.c@1.9, 2006-10-08 04:30:44-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.5.3 - clockstuff/clktest-opts.c@1.7, 2006-10-08 04:30:41-04:00, stenn@whimsy.udel.edu +9 -7 + libopts/cook.c@1.8, 2006-10-08 04:30:45-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.5.3 - clockstuff/clktest-opts.h@1.7, 2006-10-08 04:30:42-04:00, stenn@whimsy.udel.edu +6 -4 + libopts/enumeration.c@1.8, 2006-10-08 04:30:46-04:00, stenn@whimsy.udel.edu +4 -4 + libopts-27.5.3 + + libopts/genshell.c@1.8, 2006-10-08 04:30:47-04:00, stenn@whimsy.udel.edu +3 -1 + libopts-27.5.3 + + libopts/genshell.h@1.8, 2006-10-08 04:30:48-04:00, stenn@whimsy.udel.edu +5 -3 + libopts-27.5.3 + + libopts/load.c@1.9, 2006-10-08 04:30:48-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.5.3 + + libopts/m4/libopts.m4@1.13, 2006-10-08 04:30:56-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.5.3 + + libopts/makeshell.c@1.10, 2006-10-08 04:30:50-04:00, stenn@whimsy.udel.edu +13 -4 + libopts-27.5.3 + + libopts/nested.c@1.8, 2006-10-08 04:30:50-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.5.3 + + libopts/numeric.c@1.8, 2006-10-08 04:30:51-04:00, stenn@whimsy.udel.edu +4 -4 + libopts-27.5.3 + + libopts/proto.h@1.10, 2006-10-08 04:30:51-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.5.3 + + libopts/putshell.c@1.9, 2006-10-08 04:30:51-04:00, stenn@whimsy.udel.edu +8 -8 + libopts-27.5.3 + + libopts/restore.c@1.8, 2006-10-08 04:30:52-04:00, stenn@whimsy.udel.edu +2 -2 + libopts-27.5.3 + + libopts/save.c@1.9, 2006-10-08 04:30:53-04:00, stenn@whimsy.udel.edu +7 -8 + libopts-27.5.3 + + libopts/stack.c@1.9, 2006-10-08 04:30:54-04:00, stenn@whimsy.udel.edu +3 -3 libopts-27.5.3 ntpd/ntpd-opts.c@1.28, 2006-10-08 04:30:57-04:00, stenn@whimsy.udel.edu +3 -1 @@ -6708,6 +8375,63 @@ ChangeSet@1.1379.1.30, 2006-10-08 04:32:17-04:00, stenn@whimsy.udel.edu +53 -0 ntpq/ntpq-opts.texi@1.28, 2006-10-08 04:31:04-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.5.3 + sntp/libopts/Makefile.am@1.4, 2006-10-08 04:31:07-04:00, stenn@whimsy.udel.edu +10 -6 + libopts-27.5.3 + + sntp/libopts/autoopts.c@1.6, 2006-10-08 04:31:07-04:00, stenn@whimsy.udel.edu +8 -6 + libopts-27.5.3 + + sntp/libopts/autoopts/options.h@1.6, 2006-10-08 04:31:18-04:00, stenn@whimsy.udel.edu +131 -64 + libopts-27.5.3 + + sntp/libopts/autoopts/usage-txt.h@1.5, 2006-10-08 04:31:18-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.5.3 + + sntp/libopts/configfile.c@1.6, 2006-10-08 04:31:08-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.5.3 + + sntp/libopts/cook.c@1.5, 2006-10-08 04:31:09-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.5.3 + + sntp/libopts/enumeration.c@1.5, 2006-10-08 04:31:09-04:00, stenn@whimsy.udel.edu +4 -4 + libopts-27.5.3 + + sntp/libopts/genshell.c@1.5, 2006-10-08 04:31:10-04:00, stenn@whimsy.udel.edu +3 -1 + libopts-27.5.3 + + sntp/libopts/genshell.h@1.5, 2006-10-08 04:31:11-04:00, stenn@whimsy.udel.edu +5 -3 + libopts-27.5.3 + + sntp/libopts/load.c@1.6, 2006-10-08 04:31:11-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.5.3 + + sntp/libopts/m4/libopts.m4@1.10, 2006-10-08 04:31:20-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.5.3 + + sntp/libopts/makeshell.c@1.7, 2006-10-08 04:31:12-04:00, stenn@whimsy.udel.edu +13 -4 + libopts-27.5.3 + + sntp/libopts/nested.c@1.5, 2006-10-08 04:31:13-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.5.3 + + sntp/libopts/numeric.c@1.5, 2006-10-08 04:31:14-04:00, stenn@whimsy.udel.edu +4 -4 + libopts-27.5.3 + + sntp/libopts/proto.h@1.7, 2006-10-08 04:31:14-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.5.3 + + sntp/libopts/putshell.c@1.6, 2006-10-08 04:31:15-04:00, stenn@whimsy.udel.edu +8 -8 + libopts-27.5.3 + + sntp/libopts/restore.c@1.4, 2006-10-08 04:31:15-04:00, stenn@whimsy.udel.edu +2 -2 + libopts-27.5.3 + + sntp/libopts/save.c@1.6, 2006-10-08 04:31:16-04:00, stenn@whimsy.udel.edu +7 -8 + libopts-27.5.3 + + sntp/libopts/stack.c@1.6, 2006-10-08 04:31:17-04:00, stenn@whimsy.udel.edu +3 -3 + libopts-27.5.3 + sntp/sntp-opts.c@1.27, 2006-10-08 04:31:05-04:00, stenn@whimsy.udel.edu +3 -1 libopts-27.5.3 @@ -6923,204 +8647,6 @@ ChangeSet@1.1379.1.24, 2006-09-25 07:49:15-04:00, stenn@whimsy.udel.edu +25 -0 ChangeSet@1.1379.1.23, 2006-09-25 01:53:46-04:00, stenn@whimsy.udel.edu +93 -0 autogen upgrade - libopts/autoopts.c@1.8, 2006-09-25 01:50:05-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/autoopts.c@1.5, 2006-09-25 01:50:36-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/autoopts.h@1.8, 2006-09-25 01:50:05-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/autoopts.h@1.6, 2006-09-25 01:50:37-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/boolean.c@1.7, 2006-09-25 01:50:06-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/boolean.c@1.4, 2006-09-25 01:50:38-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/compat/compat.h@1.11, 2006-09-25 01:50:22-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/compat/compat.h@1.7, 2006-09-25 01:50:56-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/configfile.c@1.8, 2006-09-25 01:50:06-04:00, stenn@whimsy.udel.edu +34 -35 - autogen upgrade - - sntp/libopts/configfile.c@1.5, 2006-09-25 01:50:38-04:00, stenn@whimsy.udel.edu +34 -35 - autogen upgrade - - libopts/cook.c@1.7, 2006-09-25 01:50:07-04:00, stenn@whimsy.udel.edu +5 -6 - autogen upgrade - - sntp/libopts/cook.c@1.4, 2006-09-25 01:50:40-04:00, stenn@whimsy.udel.edu +5 -6 - autogen upgrade - - libopts/enumeration.c@1.7, 2006-09-25 01:50:08-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/enumeration.c@1.4, 2006-09-25 01:50:41-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/environment.c@1.7, 2006-09-25 01:50:08-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/environment.c@1.4, 2006-09-25 01:50:42-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/genshell.c@1.7, 2006-09-25 01:50:09-04:00, stenn@whimsy.udel.edu +1 -1 - autogen upgrade - - sntp/libopts/genshell.c@1.4, 2006-09-25 01:50:42-04:00, stenn@whimsy.udel.edu +1 -1 - autogen upgrade - - libopts/genshell.h@1.7, 2006-09-25 01:50:10-04:00, stenn@whimsy.udel.edu +1 -1 - autogen upgrade - - sntp/libopts/genshell.h@1.4, 2006-09-25 01:50:43-04:00, stenn@whimsy.udel.edu +1 -1 - autogen upgrade - - libopts/m4/libopts.m4@1.12, 2006-09-25 01:50:25-04:00, stenn@whimsy.udel.edu +4 -1 - autogen upgrade - - sntp/libopts/m4/libopts.m4@1.9, 2006-09-25 01:50:58-04:00, stenn@whimsy.udel.edu +4 -1 - autogen upgrade - - libopts/m4/liboptschk.m4@1.2, 2006-09-25 01:50:27-04:00, stenn@whimsy.udel.edu +4 -1 - autogen upgrade - - sntp/libopts/m4/liboptschk.m4@1.2, 2006-09-25 01:50:59-04:00, stenn@whimsy.udel.edu +4 -1 - autogen upgrade - - libopts/load.c@1.8, 2006-09-25 01:50:10-04:00, stenn@whimsy.udel.edu +10 -11 - autogen upgrade - - sntp/libopts/load.c@1.5, 2006-09-25 01:50:44-04:00, stenn@whimsy.udel.edu +10 -11 - autogen upgrade - - libopts/makeshell.c@1.9, 2006-09-25 01:50:11-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/makeshell.c@1.6, 2006-09-25 01:50:45-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/nested.c@1.7, 2006-09-25 01:50:12-04:00, stenn@whimsy.udel.edu +18 -19 - autogen upgrade - - sntp/libopts/nested.c@1.4, 2006-09-25 01:50:45-04:00, stenn@whimsy.udel.edu +18 -19 - autogen upgrade - - libopts/numeric.c@1.7, 2006-09-25 01:50:12-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/numeric.c@1.4, 2006-09-25 01:50:46-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/autoopts/options.h@1.8, 2006-09-25 01:50:20-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - sntp/libopts/autoopts/options.h@1.5, 2006-09-25 01:50:55-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - libopts/compat/pathfind.c@1.8, 2006-09-25 01:50:23-04:00, stenn@whimsy.udel.edu +3 -3 - autogen upgrade - - sntp/libopts/compat/pathfind.c@1.5, 2006-09-25 01:50:57-04:00, stenn@whimsy.udel.edu +3 -3 - autogen upgrade - - libopts/pgusage.c@1.8, 2006-09-25 01:50:13-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/pgusage.c@1.4, 2006-09-25 01:50:46-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/proto.h@1.9, 2006-09-25 01:50:13-04:00, stenn@whimsy.udel.edu +1 -1 - autogen upgrade - - sntp/libopts/proto.h@1.6, 2006-09-25 01:50:47-04:00, stenn@whimsy.udel.edu +1 -1 - autogen upgrade - - libopts/putshell.c@1.8, 2006-09-25 01:50:13-04:00, stenn@whimsy.udel.edu +3 -4 - autogen upgrade - - sntp/libopts/putshell.c@1.5, 2006-09-25 01:50:47-04:00, stenn@whimsy.udel.edu +3 -4 - autogen upgrade - - libopts/restore.c@1.7, 2006-09-25 01:50:14-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/restore.c@1.3, 2006-09-25 01:50:47-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/save.c@1.8, 2006-09-25 01:50:15-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/save.c@1.5, 2006-09-25 01:50:49-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/sort.c@1.7, 2006-09-25 01:50:15-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/sort.c@1.3, 2006-09-25 01:50:50-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/stack.c@1.8, 2006-09-25 01:50:16-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/stack.c@1.5, 2006-09-25 01:50:50-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/compat/strchr.c@1.3, 2006-09-25 01:50:24-04:00, stenn@whimsy.udel.edu +0 -1 - autogen upgrade - - sntp/libopts/compat/strchr.c@1.3, 2006-09-25 01:50:57-04:00, stenn@whimsy.udel.edu +0 -1 - autogen upgrade - - libopts/streqvcmp.c@1.8, 2006-09-25 01:50:17-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/streqvcmp.c@1.5, 2006-09-25 01:50:51-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/text_mmap.c@1.7, 2006-09-25 01:50:17-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/text_mmap.c@1.4, 2006-09-25 01:50:52-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/tokenize.c@1.5, 2006-09-25 01:50:18-04:00, stenn@whimsy.udel.edu +0 -1 - autogen upgrade - - sntp/libopts/tokenize.c@1.4, 2006-09-25 01:50:53-04:00, stenn@whimsy.udel.edu +0 -1 - autogen upgrade - - libopts/autoopts/usage-txt.h@1.7, 2006-09-25 01:50:22-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - sntp/libopts/autoopts/usage-txt.h@1.4, 2006-09-25 01:50:55-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - libopts/usage.c@1.8, 2006-09-25 01:50:19-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/usage.c@1.6, 2006-09-25 01:50:53-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/version.c@1.8, 2006-09-25 01:50:20-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - sntp/libopts/version.c@1.5, 2006-09-25 01:50:54-04:00, stenn@whimsy.udel.edu +1 -2 - autogen upgrade - - libopts/compat/windows-config.h@1.4, 2006-09-25 01:50:25-04:00, stenn@whimsy.udel.edu +6 -0 - autogen upgrade - - sntp/libopts/compat/windows-config.h@1.2, 2006-09-25 01:50:58-04:00, stenn@whimsy.udel.edu +16 -10 - autogen upgrade - NEWS@1.64, 2006-09-25 01:53:32-04:00, stenn@whimsy.udel.edu +6 -5 updates @@ -7130,6 +8656,105 @@ ChangeSet@1.1379.1.23, 2006-09-25 01:53:46-04:00, stenn@whimsy.udel.edu +93 -0 clockstuff/clktest-opts.h@1.5, 2006-09-25 01:50:04-04:00, stenn@whimsy.udel.edu +3 -3 autogen upgrade + libopts/autoopts.c@1.8, 2006-09-25 01:50:05-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/autoopts.h@1.8, 2006-09-25 01:50:05-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/autoopts/options.h@1.8, 2006-09-25 01:50:20-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + libopts/autoopts/usage-txt.h@1.7, 2006-09-25 01:50:22-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + libopts/boolean.c@1.7, 2006-09-25 01:50:06-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/compat/compat.h@1.11, 2006-09-25 01:50:22-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/compat/pathfind.c@1.8, 2006-09-25 01:50:23-04:00, stenn@whimsy.udel.edu +3 -3 + autogen upgrade + + libopts/compat/strchr.c@1.3, 2006-09-25 01:50:24-04:00, stenn@whimsy.udel.edu +0 -1 + autogen upgrade + + libopts/compat/windows-config.h@1.4, 2006-09-25 01:50:25-04:00, stenn@whimsy.udel.edu +6 -0 + autogen upgrade + + libopts/configfile.c@1.8, 2006-09-25 01:50:06-04:00, stenn@whimsy.udel.edu +34 -35 + autogen upgrade + + libopts/cook.c@1.7, 2006-09-25 01:50:07-04:00, stenn@whimsy.udel.edu +5 -6 + autogen upgrade + + libopts/enumeration.c@1.7, 2006-09-25 01:50:08-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/environment.c@1.7, 2006-09-25 01:50:08-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/genshell.c@1.7, 2006-09-25 01:50:09-04:00, stenn@whimsy.udel.edu +1 -1 + autogen upgrade + + libopts/genshell.h@1.7, 2006-09-25 01:50:10-04:00, stenn@whimsy.udel.edu +1 -1 + autogen upgrade + + libopts/load.c@1.8, 2006-09-25 01:50:10-04:00, stenn@whimsy.udel.edu +10 -11 + autogen upgrade + + libopts/m4/libopts.m4@1.12, 2006-09-25 01:50:25-04:00, stenn@whimsy.udel.edu +4 -1 + autogen upgrade + + libopts/m4/liboptschk.m4@1.2, 2006-09-25 01:50:27-04:00, stenn@whimsy.udel.edu +4 -1 + autogen upgrade + + libopts/makeshell.c@1.9, 2006-09-25 01:50:11-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/nested.c@1.7, 2006-09-25 01:50:12-04:00, stenn@whimsy.udel.edu +18 -19 + autogen upgrade + + libopts/numeric.c@1.7, 2006-09-25 01:50:12-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/pgusage.c@1.8, 2006-09-25 01:50:13-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/proto.h@1.9, 2006-09-25 01:50:13-04:00, stenn@whimsy.udel.edu +1 -1 + autogen upgrade + + libopts/putshell.c@1.8, 2006-09-25 01:50:13-04:00, stenn@whimsy.udel.edu +3 -4 + autogen upgrade + + libopts/restore.c@1.7, 2006-09-25 01:50:14-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/save.c@1.8, 2006-09-25 01:50:15-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/sort.c@1.7, 2006-09-25 01:50:15-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/stack.c@1.8, 2006-09-25 01:50:16-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/streqvcmp.c@1.8, 2006-09-25 01:50:17-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/text_mmap.c@1.7, 2006-09-25 01:50:17-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/tokenize.c@1.5, 2006-09-25 01:50:18-04:00, stenn@whimsy.udel.edu +0 -1 + autogen upgrade + + libopts/usage.c@1.8, 2006-09-25 01:50:19-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + libopts/version.c@1.8, 2006-09-25 01:50:20-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + ntpd/ntpd-opts.c@1.25, 2006-09-25 01:50:27-04:00, stenn@whimsy.udel.edu +3 -2 autogen upgrade @@ -7178,6 +8803,105 @@ ChangeSet@1.1379.1.23, 2006-09-25 01:53:46-04:00, stenn@whimsy.udel.edu +93 -0 ntpq/ntpq.1@1.25, 2006-09-25 01:52:38-04:00, stenn@whimsy.udel.edu +2 -2 autogen upgrade + sntp/libopts/autoopts.c@1.5, 2006-09-25 01:50:36-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/autoopts.h@1.6, 2006-09-25 01:50:37-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/autoopts/options.h@1.5, 2006-09-25 01:50:55-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + sntp/libopts/autoopts/usage-txt.h@1.4, 2006-09-25 01:50:55-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + sntp/libopts/boolean.c@1.4, 2006-09-25 01:50:38-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/compat/compat.h@1.7, 2006-09-25 01:50:56-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/compat/pathfind.c@1.5, 2006-09-25 01:50:57-04:00, stenn@whimsy.udel.edu +3 -3 + autogen upgrade + + sntp/libopts/compat/strchr.c@1.3, 2006-09-25 01:50:57-04:00, stenn@whimsy.udel.edu +0 -1 + autogen upgrade + + sntp/libopts/compat/windows-config.h@1.2, 2006-09-25 01:50:58-04:00, stenn@whimsy.udel.edu +16 -10 + autogen upgrade + + sntp/libopts/configfile.c@1.5, 2006-09-25 01:50:38-04:00, stenn@whimsy.udel.edu +34 -35 + autogen upgrade + + sntp/libopts/cook.c@1.4, 2006-09-25 01:50:40-04:00, stenn@whimsy.udel.edu +5 -6 + autogen upgrade + + sntp/libopts/enumeration.c@1.4, 2006-09-25 01:50:41-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/environment.c@1.4, 2006-09-25 01:50:42-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/genshell.c@1.4, 2006-09-25 01:50:42-04:00, stenn@whimsy.udel.edu +1 -1 + autogen upgrade + + sntp/libopts/genshell.h@1.4, 2006-09-25 01:50:43-04:00, stenn@whimsy.udel.edu +1 -1 + autogen upgrade + + sntp/libopts/load.c@1.5, 2006-09-25 01:50:44-04:00, stenn@whimsy.udel.edu +10 -11 + autogen upgrade + + sntp/libopts/m4/libopts.m4@1.9, 2006-09-25 01:50:58-04:00, stenn@whimsy.udel.edu +4 -1 + autogen upgrade + + sntp/libopts/m4/liboptschk.m4@1.2, 2006-09-25 01:50:59-04:00, stenn@whimsy.udel.edu +4 -1 + autogen upgrade + + sntp/libopts/makeshell.c@1.6, 2006-09-25 01:50:45-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/nested.c@1.4, 2006-09-25 01:50:45-04:00, stenn@whimsy.udel.edu +18 -19 + autogen upgrade + + sntp/libopts/numeric.c@1.4, 2006-09-25 01:50:46-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/pgusage.c@1.4, 2006-09-25 01:50:46-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/proto.h@1.6, 2006-09-25 01:50:47-04:00, stenn@whimsy.udel.edu +1 -1 + autogen upgrade + + sntp/libopts/putshell.c@1.5, 2006-09-25 01:50:47-04:00, stenn@whimsy.udel.edu +3 -4 + autogen upgrade + + sntp/libopts/restore.c@1.3, 2006-09-25 01:50:47-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/save.c@1.5, 2006-09-25 01:50:49-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/sort.c@1.3, 2006-09-25 01:50:50-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/stack.c@1.5, 2006-09-25 01:50:50-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/streqvcmp.c@1.5, 2006-09-25 01:50:51-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/text_mmap.c@1.4, 2006-09-25 01:50:52-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/tokenize.c@1.4, 2006-09-25 01:50:53-04:00, stenn@whimsy.udel.edu +0 -1 + autogen upgrade + + sntp/libopts/usage.c@1.6, 2006-09-25 01:50:53-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + + sntp/libopts/version.c@1.5, 2006-09-25 01:50:54-04:00, stenn@whimsy.udel.edu +1 -2 + autogen upgrade + sntp/sntp-opts.c@1.24, 2006-09-25 01:52:39-04:00, stenn@whimsy.udel.edu +1 -1 autogen upgrade @@ -7284,195 +9008,6 @@ ChangeSet@1.1379.1.22, 2006-09-24 05:30:52-04:00, stenn@whimsy.udel.edu +25 -0 ChangeSet@1.1379.1.21, 2006-09-24 03:03:52-04:00, stenn@whimsy.udel.edu +67 -0 autogen upgrade - libopts/autoopts.c@1.7, 2006-09-24 03:02:46-04:00, stenn@whimsy.udel.edu +7 -7 - autogen upgrade - - sntp/libopts/autoopts.c@1.4, 2006-09-24 03:03:08-04:00, stenn@whimsy.udel.edu +51 -7 - autogen upgrade - - libopts/autoopts.h@1.7, 2006-09-24 03:02:46-04:00, stenn@whimsy.udel.edu +3 -3 - autogen upgrade - - sntp/libopts/autoopts.h@1.5, 2006-09-24 03:03:09-04:00, stenn@whimsy.udel.edu +10 -9 - autogen upgrade - - libopts/boolean.c@1.6, 2006-09-24 03:02:47-04:00, stenn@whimsy.udel.edu +6 -6 - autogen upgrade - - sntp/libopts/boolean.c@1.3, 2006-09-24 03:03:10-04:00, stenn@whimsy.udel.edu +5 -5 - autogen upgrade - - libopts/compat/compat.h@1.10, 2006-09-24 03:03:03-04:00, stenn@whimsy.udel.edu +1 -1 - autogen upgrade - - sntp/libopts/compat/compat.h@1.6, 2006-09-24 03:03:25-04:00, stenn@whimsy.udel.edu +7 -7 - autogen upgrade - - libopts/configfile.c@1.7, 2006-09-24 03:02:48-04:00, stenn@whimsy.udel.edu +23 -23 - autogen upgrade - - sntp/libopts/configfile.c@1.4, 2006-09-24 03:03:10-04:00, stenn@whimsy.udel.edu +37 -35 - autogen upgrade - - libopts/cook.c@1.6, 2006-09-24 03:02:48-04:00, stenn@whimsy.udel.edu +3 -3 - autogen upgrade - - sntp/libopts/cook.c@1.3, 2006-09-24 03:03:11-04:00, stenn@whimsy.udel.edu +3 -3 - autogen upgrade - - libopts/enumeration.c@1.6, 2006-09-24 03:02:49-04:00, stenn@whimsy.udel.edu +23 -23 - autogen upgrade - - sntp/libopts/enumeration.c@1.3, 2006-09-24 03:03:12-04:00, stenn@whimsy.udel.edu +23 -23 - autogen upgrade - - libopts/environment.c@1.6, 2006-09-24 03:02:50-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - sntp/libopts/environment.c@1.3, 2006-09-24 03:03:12-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - libopts/genshell.c@1.6, 2006-09-24 03:02:51-04:00, stenn@whimsy.udel.edu +8 -8 - autogen upgrade - - sntp/libopts/genshell.c@1.3, 2006-09-24 03:03:13-04:00, stenn@whimsy.udel.edu +11 -10 - autogen upgrade - - libopts/genshell.h@1.6, 2006-09-24 03:02:51-04:00, stenn@whimsy.udel.edu +4 -4 - autogen upgrade - - sntp/libopts/genshell.h@1.3, 2006-09-24 03:03:14-04:00, stenn@whimsy.udel.edu +8 -8 - autogen upgrade - - libopts/m4/libopts.m4@1.11, 2006-09-24 03:03:06-04:00, stenn@whimsy.udel.edu +3 -3 - autogen upgrade - - sntp/libopts/m4/libopts.m4@1.8, 2006-09-24 03:03:27-04:00, stenn@whimsy.udel.edu +8 -3 - autogen upgrade - - libopts/load.c@1.7, 2006-09-24 03:02:52-04:00, stenn@whimsy.udel.edu +4 -4 - autogen upgrade - - sntp/libopts/load.c@1.4, 2006-09-24 03:03:15-04:00, stenn@whimsy.udel.edu +4 -4 - autogen upgrade - - libopts/makeshell.c@1.8, 2006-09-24 03:02:53-04:00, stenn@whimsy.udel.edu +13 -12 - autogen upgrade - - sntp/libopts/makeshell.c@1.5, 2006-09-24 03:03:15-04:00, stenn@whimsy.udel.edu +13 -12 - autogen upgrade - - libopts/nested.c@1.6, 2006-09-24 03:02:53-04:00, stenn@whimsy.udel.edu +38 -38 - autogen upgrade - - sntp/libopts/nested.c@1.3, 2006-09-24 03:03:16-04:00, stenn@whimsy.udel.edu +40 -40 - autogen upgrade - - libopts/numeric.c@1.6, 2006-09-24 03:02:54-04:00, stenn@whimsy.udel.edu +7 -7 - autogen upgrade - - sntp/libopts/numeric.c@1.3, 2006-09-24 03:03:17-04:00, stenn@whimsy.udel.edu +6 -6 - autogen upgrade - - libopts/autoopts/options.h@1.7, 2006-09-24 03:03:01-04:00, stenn@whimsy.udel.edu +51 -42 - autogen upgrade - - sntp/libopts/autoopts/options.h@1.4, 2006-09-24 03:03:23-04:00, stenn@whimsy.udel.edu +60 -51 - autogen upgrade - - libopts/compat/pathfind.c@1.7, 2006-09-24 03:03:04-04:00, stenn@whimsy.udel.edu +16 -16 - autogen upgrade - - sntp/libopts/compat/pathfind.c@1.4, 2006-09-24 03:03:25-04:00, stenn@whimsy.udel.edu +19 -19 - autogen upgrade - - libopts/pgusage.c@1.7, 2006-09-24 03:02:54-04:00, stenn@whimsy.udel.edu +1 -1 - autogen upgrade - - libopts/proto.h@1.8, 2006-09-24 03:02:54-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - sntp/libopts/proto.h@1.5, 2006-09-24 03:03:17-04:00, stenn@whimsy.udel.edu +14 -2 - autogen upgrade - - libopts/putshell.c@1.7, 2006-09-24 03:02:54-04:00, stenn@whimsy.udel.edu +12 -12 - autogen upgrade - - sntp/libopts/putshell.c@1.4, 2006-09-24 03:03:18-04:00, stenn@whimsy.udel.edu +11 -11 - autogen upgrade - - libopts/restore.c@1.6, 2006-09-24 03:02:55-04:00, stenn@whimsy.udel.edu +1 -1 - autogen upgrade - - libopts/save.c@1.7, 2006-09-24 03:02:56-04:00, stenn@whimsy.udel.edu +14 -12 - autogen upgrade - - sntp/libopts/save.c@1.4, 2006-09-24 03:03:18-04:00, stenn@whimsy.udel.edu +14 -12 - autogen upgrade - - libopts/compat/snprintf.c@1.4, 2006-09-24 03:03:05-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - sntp/libopts/compat/snprintf.c@1.3, 2006-09-24 03:03:26-04:00, stenn@whimsy.udel.edu +4 -4 - autogen upgrade - - libopts/sort.c@1.6, 2006-09-24 03:02:56-04:00, stenn@whimsy.udel.edu +1 -1 - autogen upgrade - - libopts/stack.c@1.7, 2006-09-24 03:02:57-04:00, stenn@whimsy.udel.edu +6 -6 - autogen upgrade - - sntp/libopts/stack.c@1.4, 2006-09-24 03:03:19-04:00, stenn@whimsy.udel.edu +5 -5 - autogen upgrade - - libopts/compat/strchr.c@1.2, 2006-09-24 03:03:05-04:00, stenn@whimsy.udel.edu +5 -5 - autogen upgrade - - sntp/libopts/compat/strchr.c@1.2, 2006-09-24 03:03:26-04:00, stenn@whimsy.udel.edu +5 -5 - autogen upgrade - - libopts/compat/strdup.c@1.3, 2006-09-24 03:03:06-04:00, stenn@whimsy.udel.edu +1 -1 - autogen upgrade - - sntp/libopts/compat/strdup.c@1.2, 2006-09-24 03:03:27-04:00, stenn@whimsy.udel.edu +3 -3 - autogen upgrade - - libopts/streqvcmp.c@1.7, 2006-09-24 03:02:58-04:00, stenn@whimsy.udel.edu +9 -9 - autogen upgrade - - sntp/libopts/streqvcmp.c@1.4, 2006-09-24 03:03:20-04:00, stenn@whimsy.udel.edu +9 -9 - autogen upgrade - - libopts/text_mmap.c@1.6, 2006-09-24 03:02:58-04:00, stenn@whimsy.udel.edu +3 -3 - autogen upgrade - - sntp/libopts/text_mmap.c@1.3, 2006-09-24 03:03:20-04:00, stenn@whimsy.udel.edu +12 -16 - autogen upgrade - - libopts/tokenize.c@1.4, 2006-09-24 03:02:59-04:00, stenn@whimsy.udel.edu +8 -8 - autogen upgrade - - sntp/libopts/tokenize.c@1.3, 2006-09-24 03:03:21-04:00, stenn@whimsy.udel.edu +16 -16 - autogen upgrade - - libopts/autoopts/usage-txt.h@1.6, 2006-09-24 03:03:02-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - sntp/libopts/autoopts/usage-txt.h@1.3, 2006-09-24 03:03:24-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - libopts/usage.c@1.7, 2006-09-24 03:03:00-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - sntp/libopts/usage.c@1.5, 2006-09-24 03:03:22-04:00, stenn@whimsy.udel.edu +2 -2 - autogen upgrade - - libopts/version.c@1.7, 2006-09-24 03:03:01-04:00, stenn@whimsy.udel.edu +9 -9 - autogen upgrade - - sntp/libopts/version.c@1.4, 2006-09-24 03:03:23-04:00, stenn@whimsy.udel.edu +9 -9 - autogen upgrade - clockstuff/clktest-opts.c@1.4, 2006-09-24 03:02:44-04:00, stenn@whimsy.udel.edu +1 -1 autogen upgrade @@ -7485,6 +9020,105 @@ ChangeSet@1.1379.1.21, 2006-09-24 03:03:52-04:00, stenn@whimsy.udel.edu +67 -0 clockstuff/clktest-opts.h@1.3, 2006-09-24 00:44:31-04:00, stenn@whimsy.udel.edu +10 -10 new autogen + libopts/autoopts.c@1.7, 2006-09-24 03:02:46-04:00, stenn@whimsy.udel.edu +7 -7 + autogen upgrade + + libopts/autoopts.h@1.7, 2006-09-24 03:02:46-04:00, stenn@whimsy.udel.edu +3 -3 + autogen upgrade + + libopts/autoopts/options.h@1.7, 2006-09-24 03:03:01-04:00, stenn@whimsy.udel.edu +51 -42 + autogen upgrade + + libopts/autoopts/usage-txt.h@1.6, 2006-09-24 03:03:02-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + libopts/boolean.c@1.6, 2006-09-24 03:02:47-04:00, stenn@whimsy.udel.edu +6 -6 + autogen upgrade + + libopts/compat/compat.h@1.10, 2006-09-24 03:03:03-04:00, stenn@whimsy.udel.edu +1 -1 + autogen upgrade + + libopts/compat/pathfind.c@1.7, 2006-09-24 03:03:04-04:00, stenn@whimsy.udel.edu +16 -16 + autogen upgrade + + libopts/compat/snprintf.c@1.4, 2006-09-24 03:03:05-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + libopts/compat/strchr.c@1.2, 2006-09-24 03:03:05-04:00, stenn@whimsy.udel.edu +5 -5 + autogen upgrade + + libopts/compat/strdup.c@1.3, 2006-09-24 03:03:06-04:00, stenn@whimsy.udel.edu +1 -1 + autogen upgrade + + libopts/configfile.c@1.7, 2006-09-24 03:02:48-04:00, stenn@whimsy.udel.edu +23 -23 + autogen upgrade + + libopts/cook.c@1.6, 2006-09-24 03:02:48-04:00, stenn@whimsy.udel.edu +3 -3 + autogen upgrade + + libopts/enumeration.c@1.6, 2006-09-24 03:02:49-04:00, stenn@whimsy.udel.edu +23 -23 + autogen upgrade + + libopts/environment.c@1.6, 2006-09-24 03:02:50-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + libopts/genshell.c@1.6, 2006-09-24 03:02:51-04:00, stenn@whimsy.udel.edu +8 -8 + autogen upgrade + + libopts/genshell.h@1.6, 2006-09-24 03:02:51-04:00, stenn@whimsy.udel.edu +4 -4 + autogen upgrade + + libopts/load.c@1.7, 2006-09-24 03:02:52-04:00, stenn@whimsy.udel.edu +4 -4 + autogen upgrade + + libopts/m4/libopts.m4@1.11, 2006-09-24 03:03:06-04:00, stenn@whimsy.udel.edu +3 -3 + autogen upgrade + + libopts/makeshell.c@1.8, 2006-09-24 03:02:53-04:00, stenn@whimsy.udel.edu +13 -12 + autogen upgrade + + libopts/nested.c@1.6, 2006-09-24 03:02:53-04:00, stenn@whimsy.udel.edu +38 -38 + autogen upgrade + + libopts/numeric.c@1.6, 2006-09-24 03:02:54-04:00, stenn@whimsy.udel.edu +7 -7 + autogen upgrade + + libopts/pgusage.c@1.7, 2006-09-24 03:02:54-04:00, stenn@whimsy.udel.edu +1 -1 + autogen upgrade + + libopts/proto.h@1.8, 2006-09-24 03:02:54-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + libopts/putshell.c@1.7, 2006-09-24 03:02:54-04:00, stenn@whimsy.udel.edu +12 -12 + autogen upgrade + + libopts/restore.c@1.6, 2006-09-24 03:02:55-04:00, stenn@whimsy.udel.edu +1 -1 + autogen upgrade + + libopts/save.c@1.7, 2006-09-24 03:02:56-04:00, stenn@whimsy.udel.edu +14 -12 + autogen upgrade + + libopts/sort.c@1.6, 2006-09-24 03:02:56-04:00, stenn@whimsy.udel.edu +1 -1 + autogen upgrade + + libopts/stack.c@1.7, 2006-09-24 03:02:57-04:00, stenn@whimsy.udel.edu +6 -6 + autogen upgrade + + libopts/streqvcmp.c@1.7, 2006-09-24 03:02:58-04:00, stenn@whimsy.udel.edu +9 -9 + autogen upgrade + + libopts/text_mmap.c@1.6, 2006-09-24 03:02:58-04:00, stenn@whimsy.udel.edu +3 -3 + autogen upgrade + + libopts/tokenize.c@1.4, 2006-09-24 03:02:59-04:00, stenn@whimsy.udel.edu +8 -8 + autogen upgrade + + libopts/usage.c@1.7, 2006-09-24 03:03:00-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + libopts/version.c@1.7, 2006-09-24 03:03:01-04:00, stenn@whimsy.udel.edu +9 -9 + autogen upgrade + ntpq/ntpq-opts.c@1.25, 2006-09-24 03:03:07-04:00, stenn@whimsy.udel.edu +1 -1 autogen upgrade @@ -7497,6 +9131,96 @@ ChangeSet@1.1379.1.21, 2006-09-24 03:03:52-04:00, stenn@whimsy.udel.edu +67 -0 ntpq/ntpq-opts.h@1.24, 2006-09-24 00:45:25-04:00, stenn@whimsy.udel.edu +5 -5 new autogen + sntp/libopts/autoopts.c@1.4, 2006-09-24 03:03:08-04:00, stenn@whimsy.udel.edu +51 -7 + autogen upgrade + + sntp/libopts/autoopts.h@1.5, 2006-09-24 03:03:09-04:00, stenn@whimsy.udel.edu +10 -9 + autogen upgrade + + sntp/libopts/autoopts/options.h@1.4, 2006-09-24 03:03:23-04:00, stenn@whimsy.udel.edu +60 -51 + autogen upgrade + + sntp/libopts/autoopts/usage-txt.h@1.3, 2006-09-24 03:03:24-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + sntp/libopts/boolean.c@1.3, 2006-09-24 03:03:10-04:00, stenn@whimsy.udel.edu +5 -5 + autogen upgrade + + sntp/libopts/compat/compat.h@1.6, 2006-09-24 03:03:25-04:00, stenn@whimsy.udel.edu +7 -7 + autogen upgrade + + sntp/libopts/compat/pathfind.c@1.4, 2006-09-24 03:03:25-04:00, stenn@whimsy.udel.edu +19 -19 + autogen upgrade + + sntp/libopts/compat/snprintf.c@1.3, 2006-09-24 03:03:26-04:00, stenn@whimsy.udel.edu +4 -4 + autogen upgrade + + sntp/libopts/compat/strchr.c@1.2, 2006-09-24 03:03:26-04:00, stenn@whimsy.udel.edu +5 -5 + autogen upgrade + + sntp/libopts/compat/strdup.c@1.2, 2006-09-24 03:03:27-04:00, stenn@whimsy.udel.edu +3 -3 + autogen upgrade + + sntp/libopts/configfile.c@1.4, 2006-09-24 03:03:10-04:00, stenn@whimsy.udel.edu +37 -35 + autogen upgrade + + sntp/libopts/cook.c@1.3, 2006-09-24 03:03:11-04:00, stenn@whimsy.udel.edu +3 -3 + autogen upgrade + + sntp/libopts/enumeration.c@1.3, 2006-09-24 03:03:12-04:00, stenn@whimsy.udel.edu +23 -23 + autogen upgrade + + sntp/libopts/environment.c@1.3, 2006-09-24 03:03:12-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + sntp/libopts/genshell.c@1.3, 2006-09-24 03:03:13-04:00, stenn@whimsy.udel.edu +11 -10 + autogen upgrade + + sntp/libopts/genshell.h@1.3, 2006-09-24 03:03:14-04:00, stenn@whimsy.udel.edu +8 -8 + autogen upgrade + + sntp/libopts/load.c@1.4, 2006-09-24 03:03:15-04:00, stenn@whimsy.udel.edu +4 -4 + autogen upgrade + + sntp/libopts/m4/libopts.m4@1.8, 2006-09-24 03:03:27-04:00, stenn@whimsy.udel.edu +8 -3 + autogen upgrade + + sntp/libopts/makeshell.c@1.5, 2006-09-24 03:03:15-04:00, stenn@whimsy.udel.edu +13 -12 + autogen upgrade + + sntp/libopts/nested.c@1.3, 2006-09-24 03:03:16-04:00, stenn@whimsy.udel.edu +40 -40 + autogen upgrade + + sntp/libopts/numeric.c@1.3, 2006-09-24 03:03:17-04:00, stenn@whimsy.udel.edu +6 -6 + autogen upgrade + + sntp/libopts/proto.h@1.5, 2006-09-24 03:03:17-04:00, stenn@whimsy.udel.edu +14 -2 + autogen upgrade + + sntp/libopts/putshell.c@1.4, 2006-09-24 03:03:18-04:00, stenn@whimsy.udel.edu +11 -11 + autogen upgrade + + sntp/libopts/save.c@1.4, 2006-09-24 03:03:18-04:00, stenn@whimsy.udel.edu +14 -12 + autogen upgrade + + sntp/libopts/stack.c@1.4, 2006-09-24 03:03:19-04:00, stenn@whimsy.udel.edu +5 -5 + autogen upgrade + + sntp/libopts/streqvcmp.c@1.4, 2006-09-24 03:03:20-04:00, stenn@whimsy.udel.edu +9 -9 + autogen upgrade + + sntp/libopts/text_mmap.c@1.3, 2006-09-24 03:03:20-04:00, stenn@whimsy.udel.edu +12 -16 + autogen upgrade + + sntp/libopts/tokenize.c@1.3, 2006-09-24 03:03:21-04:00, stenn@whimsy.udel.edu +16 -16 + autogen upgrade + + sntp/libopts/usage.c@1.5, 2006-09-24 03:03:22-04:00, stenn@whimsy.udel.edu +2 -2 + autogen upgrade + + sntp/libopts/version.c@1.4, 2006-09-24 03:03:23-04:00, stenn@whimsy.udel.edu +9 -9 + autogen upgrade + ChangeSet@1.1379.1.20, 2006-09-23 17:23:36+00:00, kardel@pogo.udel.edu +5 -0 ntpd.h, ntpd.c, ntp_timer.c, ntp_io.c, cmd_args.c: disable dynamic update when giving up the root privilege @@ -7549,12 +9273,30 @@ ChangeSet@1.1379.7.1, 2006-09-22 19:38:01-04:00, stenn@whimsy.udel.edu +34 -0 libopts/autoopts.h@1.6, 2006-09-22 19:36:57-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 + libopts/autoopts/options.h@1.6, 2006-09-22 19:36:55-04:00, stenn@whimsy.udel.edu +5 -5 + Upgrade to libopts-27.4.3 + + libopts/autoopts/usage-txt.h@1.5, 2006-09-22 19:36:55-04:00, stenn@whimsy.udel.edu +1 -1 + Upgrade to libopts-27.4.3 + libopts/boolean.c@1.5, 2006-09-22 19:36:58-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 libopts/compat/compat.h@1.9, 2006-09-22 19:36:58-04:00, stenn@whimsy.udel.edu +5 -5 Upgrade to libopts-27.4.3 + libopts/compat/pathfind.c@1.6, 2006-09-22 19:37:00-04:00, stenn@whimsy.udel.edu +2 -2 + Upgrade to libopts-27.4.3 + + libopts/compat/snprintf.c@1.3, 2006-09-22 19:37:01-04:00, stenn@whimsy.udel.edu +2 -2 + Upgrade to libopts-27.4.3 + + libopts/compat/strdup.c@1.2, 2006-09-22 19:37:01-04:00, stenn@whimsy.udel.edu +2 -2 + Upgrade to libopts-27.4.3 + + libopts/compat/windows-config.h@1.3, 2006-09-22 19:37:01-04:00, stenn@whimsy.udel.edu +6 -6 + Upgrade to libopts-27.4.3 + libopts/configfile.c@1.6, 2006-09-22 19:37:02-04:00, stenn@whimsy.udel.edu +12 -13 Upgrade to libopts-27.4.3 @@ -7573,10 +9315,10 @@ ChangeSet@1.1379.7.1, 2006-09-22 19:38:01-04:00, stenn@whimsy.udel.edu +34 -0 libopts/genshell.h@1.5, 2006-09-22 19:37:06-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 - libopts/m4/libopts.m4@1.10, 2006-09-22 19:37:07-04:00, stenn@whimsy.udel.edu +6 -1 + libopts/load.c@1.6, 2006-09-22 19:37:06-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 - libopts/load.c@1.6, 2006-09-22 19:37:06-04:00, stenn@whimsy.udel.edu +1 -1 + libopts/m4/libopts.m4@1.10, 2006-09-22 19:37:07-04:00, stenn@whimsy.udel.edu +6 -1 Upgrade to libopts-27.4.3 libopts/makeshell.c@1.7, 2006-09-22 19:37:07-04:00, stenn@whimsy.udel.edu +1 -1 @@ -7588,12 +9330,6 @@ ChangeSet@1.1379.7.1, 2006-09-22 19:38:01-04:00, stenn@whimsy.udel.edu +34 -0 libopts/numeric.c@1.5, 2006-09-22 19:37:09-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 - libopts/autoopts/options.h@1.6, 2006-09-22 19:36:55-04:00, stenn@whimsy.udel.edu +5 -5 - Upgrade to libopts-27.4.3 - - libopts/compat/pathfind.c@1.6, 2006-09-22 19:37:00-04:00, stenn@whimsy.udel.edu +2 -2 - Upgrade to libopts-27.4.3 - libopts/pgusage.c@1.6, 2006-09-22 19:37:09-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 @@ -7609,18 +9345,12 @@ ChangeSet@1.1379.7.1, 2006-09-22 19:38:01-04:00, stenn@whimsy.udel.edu +34 -0 libopts/save.c@1.6, 2006-09-22 19:37:12-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 - libopts/compat/snprintf.c@1.3, 2006-09-22 19:37:01-04:00, stenn@whimsy.udel.edu +2 -2 - Upgrade to libopts-27.4.3 - libopts/sort.c@1.5, 2006-09-22 19:37:12-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 libopts/stack.c@1.6, 2006-09-22 19:37:13-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 - libopts/compat/strdup.c@1.2, 2006-09-22 19:37:01-04:00, stenn@whimsy.udel.edu +2 -2 - Upgrade to libopts-27.4.3 - libopts/streqvcmp.c@1.6, 2006-09-22 19:37:14-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 @@ -7630,18 +9360,12 @@ ChangeSet@1.1379.7.1, 2006-09-22 19:38:01-04:00, stenn@whimsy.udel.edu +34 -0 libopts/tokenize.c@1.3, 2006-09-22 19:37:15-04:00, stenn@whimsy.udel.edu +14 -14 Upgrade to libopts-27.4.3 - libopts/autoopts/usage-txt.h@1.5, 2006-09-22 19:36:55-04:00, stenn@whimsy.udel.edu +1 -1 - Upgrade to libopts-27.4.3 - libopts/usage.c@1.6, 2006-09-22 19:37:16-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 libopts/version.c@1.6, 2006-09-22 19:37:17-04:00, stenn@whimsy.udel.edu +1 -1 Upgrade to libopts-27.4.3 - libopts/compat/windows-config.h@1.3, 2006-09-22 19:37:01-04:00, stenn@whimsy.udel.edu +6 -6 - Upgrade to libopts-27.4.3 - ChangeSet@1.1379.1.18, 2006-09-22 22:58:27+00:00, kardel@pogo.udel.edu +2 -0 ntp_io.c: add autoconfig enabled code to temporarily @@ -8262,12 +9986,21 @@ ChangeSet@1.1379.2.24, 2006-09-10 20:47:32-04:00, stenn@whimsy.udel.edu +29 -0 libopts/autoopts.h@1.5, 2006-09-10 20:46:57-04:00, stenn@whimsy.udel.edu +8 -7 libopts-27.4.3 updates + libopts/autoopts/options.h@1.5, 2006-09-10 20:47:14-04:00, stenn@whimsy.udel.edu +3 -3 + libopts-27.4.3 updates + + libopts/autoopts/usage-txt.h@1.4, 2006-09-10 20:47:15-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.4.3 updates + libopts/boolean.c@1.4, 2006-09-10 20:46:58-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 updates libopts/compat/compat.h@1.8, 2006-09-10 20:47:16-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 updates + libopts/compat/pathfind.c@1.5, 2006-09-10 20:47:17-04:00, stenn@whimsy.udel.edu +2 -2 + libopts-27.4.3 updates + libopts/configfile.c@1.5, 2006-09-10 20:46:59-04:00, stenn@whimsy.udel.edu +5 -2 libopts-27.4.3 updates @@ -8286,10 +10019,10 @@ ChangeSet@1.1379.2.24, 2006-09-10 20:47:32-04:00, stenn@whimsy.udel.edu +29 -0 libopts/genshell.h@1.4, 2006-09-10 20:47:03-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 updates - libopts/m4/libopts.m4@1.9, 2006-09-10 20:47:17-04:00, stenn@whimsy.udel.edu +1 -1 + libopts/load.c@1.5, 2006-09-10 20:47:03-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 updates - libopts/load.c@1.5, 2006-09-10 20:47:03-04:00, stenn@whimsy.udel.edu +1 -1 + libopts/m4/libopts.m4@1.9, 2006-09-10 20:47:17-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 updates libopts/makeshell.c@1.6, 2006-09-10 20:47:05-04:00, stenn@whimsy.udel.edu +1 -1 @@ -8301,12 +10034,6 @@ ChangeSet@1.1379.2.24, 2006-09-10 20:47:32-04:00, stenn@whimsy.udel.edu +29 -0 libopts/numeric.c@1.4, 2006-09-10 20:47:06-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 updates - libopts/autoopts/options.h@1.5, 2006-09-10 20:47:14-04:00, stenn@whimsy.udel.edu +3 -3 - libopts-27.4.3 updates - - libopts/compat/pathfind.c@1.5, 2006-09-10 20:47:17-04:00, stenn@whimsy.udel.edu +2 -2 - libopts-27.4.3 updates - libopts/pgusage.c@1.5, 2006-09-10 20:47:06-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 updates @@ -8334,9 +10061,6 @@ ChangeSet@1.1379.2.24, 2006-09-10 20:47:32-04:00, stenn@whimsy.udel.edu +29 -0 libopts/text_mmap.c@1.4, 2006-09-10 20:47:12-04:00, stenn@whimsy.udel.edu +3 -8 libopts-27.4.3 updates - libopts/autoopts/usage-txt.h@1.4, 2006-09-10 20:47:15-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.4.3 updates - libopts/usage.c@1.5, 2006-09-10 20:47:13-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 updates @@ -8534,12 +10258,24 @@ ChangeSet@1.1379.2.18, 2006-09-09 18:21:20-04:00, stenn@whimsy.udel.edu +30 -0 libopts/autoopts.c@1.4, 2006-09-09 18:20:43-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 + libopts/autoopts/options.h@1.4, 2006-09-09 18:20:57-04:00, stenn@whimsy.udel.edu +5 -5 + libopts-27.4.3 + + libopts/autoopts/usage-txt.h@1.3, 2006-09-09 18:20:58-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.4.3 + libopts/boolean.c@1.3, 2006-09-09 18:20:44-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 libopts/compat/compat.h@1.7, 2006-09-09 18:20:59-04:00, stenn@whimsy.udel.edu +3 -3 libopts-27.4.3 + libopts/compat/pathfind.c@1.4, 2006-09-09 18:21:00-04:00, stenn@whimsy.udel.edu +5 -5 + libopts-27.4.3 + + libopts/compat/windows-config.h@1.2, 2006-09-09 18:21:01-04:00, stenn@whimsy.udel.edu +4 -4 + libopts-27.4.3 + libopts/configfile.c@1.4, 2006-09-09 18:20:44-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 @@ -8558,10 +10294,10 @@ ChangeSet@1.1379.2.18, 2006-09-09 18:21:20-04:00, stenn@whimsy.udel.edu +30 -0 libopts/genshell.h@1.3, 2006-09-09 18:20:48-04:00, stenn@whimsy.udel.edu +6 -6 libopts-27.4.3 - libopts/m4/libopts.m4@1.8, 2006-09-09 18:21:01-04:00, stenn@whimsy.udel.edu +1 -1 + libopts/load.c@1.4, 2006-09-09 18:20:48-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 - libopts/load.c@1.4, 2006-09-09 18:20:48-04:00, stenn@whimsy.udel.edu +1 -1 + libopts/m4/libopts.m4@1.8, 2006-09-09 18:21:01-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 libopts/makeshell.c@1.5, 2006-09-09 18:20:48-04:00, stenn@whimsy.udel.edu +1 -1 @@ -8573,12 +10309,6 @@ ChangeSet@1.1379.2.18, 2006-09-09 18:21:20-04:00, stenn@whimsy.udel.edu +30 -0 libopts/numeric.c@1.3, 2006-09-09 18:20:50-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 - libopts/autoopts/options.h@1.4, 2006-09-09 18:20:57-04:00, stenn@whimsy.udel.edu +5 -5 - libopts-27.4.3 - - libopts/compat/pathfind.c@1.4, 2006-09-09 18:21:00-04:00, stenn@whimsy.udel.edu +5 -5 - libopts-27.4.3 - libopts/pgusage.c@1.4, 2006-09-09 18:20:51-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 @@ -8606,15 +10336,9 @@ ChangeSet@1.1379.2.18, 2006-09-09 18:21:20-04:00, stenn@whimsy.udel.edu +30 -0 libopts/text_mmap.c@1.3, 2006-09-09 18:20:56-04:00, stenn@whimsy.udel.edu +7 -7 libopts-27.4.3 - libopts/autoopts/usage-txt.h@1.3, 2006-09-09 18:20:58-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.4.3 - libopts/version.c@1.4, 2006-09-09 18:20:57-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.3 - libopts/compat/windows-config.h@1.2, 2006-09-09 18:21:01-04:00, stenn@whimsy.udel.edu +4 -4 - libopts-27.4.3 - ChangeSet@1.1379.5.1, 2006-09-09 05:19:19-04:00, stenn@whimsy.udel.edu +25 -0 NTP_4_2_3P41 TAG: NTP_4_2_3P41 @@ -9579,16 +11303,16 @@ ChangeSet@1.1353.9.37, 2006-08-18 03:33:56-04:00, stenn@whimsy.udel.edu +6 -0 libopts/autoopts.h@1.4, 2006-08-18 03:33:36-04:00, stenn@whimsy.udel.edu +12 -4 libopts upgrade - sntp/libopts/autoopts.h@1.4, 2006-08-18 03:33:38-04:00, stenn@whimsy.udel.edu +12 -4 - libopts upgrade - libopts/m4/libopts.m4@1.7, 2006-08-18 03:33:37-04:00, stenn@whimsy.udel.edu +4 -4 libopts upgrade - sntp/libopts/m4/libopts.m4@1.7, 2006-08-18 03:33:39-04:00, stenn@whimsy.udel.edu +4 -4 + libopts/usage.c@1.4, 2006-08-18 03:33:37-04:00, stenn@whimsy.udel.edu +3 -3 libopts upgrade - libopts/usage.c@1.4, 2006-08-18 03:33:37-04:00, stenn@whimsy.udel.edu +3 -3 + sntp/libopts/autoopts.h@1.4, 2006-08-18 03:33:38-04:00, stenn@whimsy.udel.edu +12 -4 + libopts upgrade + + sntp/libopts/m4/libopts.m4@1.7, 2006-08-18 03:33:39-04:00, stenn@whimsy.udel.edu +4 -4 libopts upgrade sntp/libopts/usage.c@1.4, 2006-08-18 03:33:39-04:00, stenn@whimsy.udel.edu +3 -3 @@ -10033,10 +11757,10 @@ ChangeSet@1.1353.13.3, 2006-08-10 01:02:20-04:00, stenn@whimsy.udel.edu +1 -0 ChangeSet@1.1353.13.2, 2006-08-10 00:57:53-04:00, stenn@whimsy.udel.edu +3 -0 [Bug 659] Get the latest windows patches for libopts - sntp/libopts/compat/compat.h@1.5, 2006-08-10 00:57:34-04:00, stenn@whimsy.udel.edu +1 -1 + libopts/m4/libopts.m4@1.6, 2006-08-10 00:57:33-04:00, stenn@whimsy.udel.edu +2 -1 [Bug 659] Get the latest windows patches for liboptslibopts/compat/compat.h - libopts/m4/libopts.m4@1.6, 2006-08-10 00:57:33-04:00, stenn@whimsy.udel.edu +2 -1 + sntp/libopts/compat/compat.h@1.5, 2006-08-10 00:57:34-04:00, stenn@whimsy.udel.edu +1 -1 [Bug 659] Get the latest windows patches for liboptslibopts/compat/compat.h sntp/libopts/m4/libopts.m4@1.6, 2006-08-10 00:57:35-04:00, stenn@whimsy.udel.edu +2 -1 @@ -10512,46 +12236,46 @@ ChangeSet@1.1251.94.41, 2006-07-28 01:28:32-04:00, stenn@whimsy.udel.edu +1 -0 ChangeSet@1.1251.94.40, 2006-07-28 01:20:54-04:00, stenn@whimsy.udel.edu +2 -0 Ready for release - packageinfo.sh@1.27.14.1, 2006-07-28 01:20:39-04:00, stenn@whimsy.udel.edu +3 -3 + NEWS@1.50.1.5, 2006-07-28 01:20:39-04:00, stenn@whimsy.udel.edu +30 -27 Ready for release - NEWS@1.50.1.5, 2006-07-28 01:20:39-04:00, stenn@whimsy.udel.edu +30 -27 + packageinfo.sh@1.27.14.1, 2006-07-28 01:20:39-04:00, stenn@whimsy.udel.edu +3 -3 Ready for release ChangeSet@1.1353.1.89, 2006-07-28 00:57:01-04:00, stenn@whimsy.udel.edu +12 -0 libopts-27.4.2 - libopts/m4/libopts.m4@1.4, 2006-07-28 00:52:00-04:00, stenn@whimsy.udel.edu +1 -1 + libopts/compat/snprintf.c@1.2, 2006-07-28 00:56:19-04:00, stenn@whimsy.udel.edu +28 -4 libopts-27.4.2 - sntp/libopts/m4/libopts.m4@1.4, 2006-07-28 00:55:02-04:00, stenn@whimsy.udel.edu +1 -1 + libopts/m4/libopts.m4@1.4, 2006-07-28 00:52:00-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.2 libopts/makeshell.c@1.4, 2006-07-28 00:51:31-04:00, stenn@whimsy.udel.edu +9 -9 libopts-27.4.2 - sntp/libopts/makeshell.c@1.4, 2006-07-28 00:52:22-04:00, stenn@whimsy.udel.edu +9 -9 - libopts-27.4.2 - libopts/proto.h@1.4, 2006-07-28 00:51:32-04:00, stenn@whimsy.udel.edu +1 -1 libopts-27.4.2 - sntp/libopts/proto.h@1.4, 2006-07-28 00:52:24-04:00, stenn@whimsy.udel.edu +1 -1 - libopts-27.4.2 - - libopts/compat/snprintf.c@1.2, 2006-07-28 00:56:19-04:00, stenn@whimsy.udel.edu +28 -4 - libopts-27.4.2 - - sntp/libopts/compat/snprintf.c@1.2, 2006-07-28 00:52:33-04:00, stenn@whimsy.udel.edu +28 -4 - libopts-27.4.2 - libopts/streqvcmp.c@1.3, 2006-07-28 00:51:34-04:00, stenn@whimsy.udel.edu +3 -5 libopts-27.4.2 - sntp/libopts/streqvcmp.c@1.3, 2006-07-28 00:52:26-04:00, stenn@whimsy.udel.edu +3 -5 + libopts/version.c@1.3, 2006-07-28 00:51:35-04:00, stenn@whimsy.udel.edu +4 -8 libopts-27.4.2 - libopts/version.c@1.3, 2006-07-28 00:51:35-04:00, stenn@whimsy.udel.edu +4 -8 + sntp/libopts/compat/snprintf.c@1.2, 2006-07-28 00:52:33-04:00, stenn@whimsy.udel.edu +28 -4 + libopts-27.4.2 + + sntp/libopts/m4/libopts.m4@1.4, 2006-07-28 00:55:02-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.4.2 + + sntp/libopts/makeshell.c@1.4, 2006-07-28 00:52:22-04:00, stenn@whimsy.udel.edu +9 -9 + libopts-27.4.2 + + sntp/libopts/proto.h@1.4, 2006-07-28 00:52:24-04:00, stenn@whimsy.udel.edu +1 -1 + libopts-27.4.2 + + sntp/libopts/streqvcmp.c@1.3, 2006-07-28 00:52:26-04:00, stenn@whimsy.udel.edu +3 -5 libopts-27.4.2 sntp/libopts/version.c@1.3, 2006-07-28 00:52:27-04:00, stenn@whimsy.udel.edu +4 -8 @@ -10654,121 +12378,22 @@ ChangeSet@1.1353.1.78, 2006-07-22 23:35:43-04:00, stenn@whimsy.udel.edu +42 -0 libopts/Makefile.am@1.3, 2006-07-22 23:28:42-04:00, stenn@whimsy.udel.edu +14 -14 Upgrade to libopts-27.4.2 - sntp/libopts/Makefile.am@1.3, 2006-07-22 23:34:06-04:00, stenn@whimsy.udel.edu +14 -14 - Upgrade to libopts-27.4.2 - libopts/autoopts.c@1.3, 2006-07-22 23:28:42-04:00, stenn@whimsy.udel.edu +7 -9 Upgrade to libopts-27.4.2 - sntp/libopts/autoopts.c@1.3, 2006-07-22 23:34:07-04:00, stenn@whimsy.udel.edu +7 -9 - Upgrade to libopts-27.4.2 - libopts/autoopts.h@1.3, 2006-07-22 23:28:43-04:00, stenn@whimsy.udel.edu +7 -8 Upgrade to libopts-27.4.2 - sntp/libopts/autoopts.h@1.3, 2006-07-22 23:34:07-04:00, stenn@whimsy.udel.edu +7 -8 - Upgrade to libopts-27.4.2 - - libopts/compat/compat.h@1.3, 2006-07-22 23:33:15-04:00, stenn@whimsy.udel.edu +25 -9 - Upgrade to libopts-27.4.2 - - sntp/libopts/compat/compat.h@1.3, 2006-07-22 23:34:19-04:00, stenn@whimsy.udel.edu +25 -9 - Upgrade to libopts-27.4.2 - - libopts/configfile.c@1.3, 2006-07-22 23:28:44-04:00, stenn@whimsy.udel.edu +1 -1 - Upgrade to libopts-27.4.2 - - sntp/libopts/configfile.c@1.3, 2006-07-22 23:34:08-04:00, stenn@whimsy.udel.edu +1 -1 - Upgrade to libopts-27.4.2 - - libopts/genshell.c@1.2, 2006-07-22 23:28:46-04:00, stenn@whimsy.udel.edu +50 -10 - Upgrade to libopts-27.4.2 - - sntp/libopts/genshell.c@1.2, 2006-07-22 23:34:10-04:00, stenn@whimsy.udel.edu +50 -10 - Upgrade to libopts-27.4.2 - - libopts/genshell.h@1.2, 2006-07-22 23:28:46-04:00, stenn@whimsy.udel.edu +21 -10 - Upgrade to libopts-27.4.2 - - sntp/libopts/genshell.h@1.2, 2006-07-22 23:34:10-04:00, stenn@whimsy.udel.edu +21 -10 - Upgrade to libopts-27.4.2 - - libopts/libopts.c@1.3, 2006-07-22 23:28:47-04:00, stenn@whimsy.udel.edu +0 -1 - Upgrade to libopts-27.4.2 - - sntp/libopts/libopts.c@1.3, 2006-07-22 23:34:11-04:00, stenn@whimsy.udel.edu +0 -1 - Upgrade to libopts-27.4.2 - - libopts/m4/libopts.m4@1.3, 2006-07-22 23:33:17-04:00, stenn@whimsy.udel.edu +1 -1 - Upgrade to libopts-27.4.2 - - sntp/libopts/m4/libopts.m4@1.3, 2006-07-22 23:34:21-04:00, stenn@whimsy.udel.edu +1 -1 - Upgrade to libopts-27.4.2 - - libopts/load.c@1.3, 2006-07-22 23:28:47-04:00, stenn@whimsy.udel.edu +1 -1 - Upgrade to libopts-27.4.2 - - sntp/libopts/load.c@1.3, 2006-07-22 23:34:11-04:00, stenn@whimsy.udel.edu +1 -1 - Upgrade to libopts-27.4.2 - - libopts/makeshell.c@1.3, 2006-07-22 23:28:48-04:00, stenn@whimsy.udel.edu +11 -2 - Upgrade to libopts-27.4.2 - - sntp/libopts/makeshell.c@1.3, 2006-07-22 23:34:12-04:00, stenn@whimsy.udel.edu +11 -2 - Upgrade to libopts-27.4.2 - libopts/autoopts/options.h@1.3, 2006-07-22 23:33:13-04:00, stenn@whimsy.udel.edu +64 -62 Upgrade to libopts-27.4.2 - sntp/libopts/autoopts/options.h@1.3, 2006-07-22 23:34:18-04:00, stenn@whimsy.udel.edu +64 -62 - Upgrade to libopts-27.4.2 - - libopts/compat/pathfind.c@1.3, 2006-07-22 23:33:15-04:00, stenn@whimsy.udel.edu +12 -3 - Upgrade to libopts-27.4.2 - - sntp/libopts/compat/pathfind.c@1.3, 2006-07-22 23:34:20-04:00, stenn@whimsy.udel.edu +12 -3 - Upgrade to libopts-27.4.2 - - libopts/pgusage.c@1.3, 2006-07-22 23:28:49-04:00, stenn@whimsy.udel.edu +7 -3 - Upgrade to libopts-27.4.2 - - sntp/libopts/pgusage.c@1.3, 2006-07-22 23:34:13-04:00, stenn@whimsy.udel.edu +7 -3 - Upgrade to libopts-27.4.2 - - libopts/proto.h@1.3, 2006-07-22 23:28:50-04:00, stenn@whimsy.udel.edu +1 -1 - Upgrade to libopts-27.4.2 - - sntp/libopts/proto.h@1.3, 2006-07-22 23:34:13-04:00, stenn@whimsy.udel.edu +1 -1 - Upgrade to libopts-27.4.2 - - libopts/putshell.c@1.3, 2006-07-22 23:28:50-04:00, stenn@whimsy.udel.edu +3 -3 - Upgrade to libopts-27.4.2 - - sntp/libopts/putshell.c@1.3, 2006-07-22 23:34:13-04:00, stenn@whimsy.udel.edu +3 -3 - Upgrade to libopts-27.4.2 - - libopts/save.c@1.3, 2006-07-22 23:28:51-04:00, stenn@whimsy.udel.edu +3 -3 - Upgrade to libopts-27.4.2 - - sntp/libopts/save.c@1.3, 2006-07-22 23:34:14-04:00, stenn@whimsy.udel.edu +3 -3 - Upgrade to libopts-27.4.2 - - libopts/stack.c@1.3, 2006-07-22 23:28:52-04:00, stenn@whimsy.udel.edu +5 -3 - Upgrade to libopts-27.4.2 - - sntp/libopts/stack.c@1.3, 2006-07-22 23:34:15-04:00, stenn@whimsy.udel.edu +5 -3 - Upgrade to libopts-27.4.2 - libopts/autoopts/usage-txt.h@1.2, 2006-07-22 23:33:14-04:00, stenn@whimsy.udel.edu +271 -395 Upgrade to libopts-27.4.2 - sntp/libopts/autoopts/usage-txt.h@1.2, 2006-07-22 23:34:19-04:00, stenn@whimsy.udel.edu +271 -395 + libopts/compat/compat.h@1.3, 2006-07-22 23:33:15-04:00, stenn@whimsy.udel.edu +25 -9 Upgrade to libopts-27.4.2 - libopts/usage.c@1.3, 2006-07-22 23:28:53-04:00, stenn@whimsy.udel.edu +1 -1 - Upgrade to libopts-27.4.2 - - sntp/libopts/usage.c@1.3, 2006-07-22 23:34:16-04:00, stenn@whimsy.udel.edu +1 -1 + libopts/compat/pathfind.c@1.3, 2006-07-22 23:33:15-04:00, stenn@whimsy.udel.edu +12 -3 Upgrade to libopts-27.4.2 libopts/compat/windows-config.h@1.1, 2006-07-22 23:27:32-04:00, stenn@whimsy.udel.edu +118 -0 @@ -10776,11 +12401,110 @@ ChangeSet@1.1353.1.78, 2006-07-22 23:35:43-04:00, stenn@whimsy.udel.edu +42 -0 libopts/compat/windows-config.h@1.0, 2006-07-22 23:27:32-04:00, stenn@whimsy.udel.edu +0 -0 + libopts/configfile.c@1.3, 2006-07-22 23:28:44-04:00, stenn@whimsy.udel.edu +1 -1 + Upgrade to libopts-27.4.2 + + libopts/genshell.c@1.2, 2006-07-22 23:28:46-04:00, stenn@whimsy.udel.edu +50 -10 + Upgrade to libopts-27.4.2 + + libopts/genshell.h@1.2, 2006-07-22 23:28:46-04:00, stenn@whimsy.udel.edu +21 -10 + Upgrade to libopts-27.4.2 + + libopts/libopts.c@1.3, 2006-07-22 23:28:47-04:00, stenn@whimsy.udel.edu +0 -1 + Upgrade to libopts-27.4.2 + + libopts/load.c@1.3, 2006-07-22 23:28:47-04:00, stenn@whimsy.udel.edu +1 -1 + Upgrade to libopts-27.4.2 + + libopts/m4/libopts.m4@1.3, 2006-07-22 23:33:17-04:00, stenn@whimsy.udel.edu +1 -1 + Upgrade to libopts-27.4.2 + + libopts/makeshell.c@1.3, 2006-07-22 23:28:48-04:00, stenn@whimsy.udel.edu +11 -2 + Upgrade to libopts-27.4.2 + + libopts/pgusage.c@1.3, 2006-07-22 23:28:49-04:00, stenn@whimsy.udel.edu +7 -3 + Upgrade to libopts-27.4.2 + + libopts/proto.h@1.3, 2006-07-22 23:28:50-04:00, stenn@whimsy.udel.edu +1 -1 + Upgrade to libopts-27.4.2 + + libopts/putshell.c@1.3, 2006-07-22 23:28:50-04:00, stenn@whimsy.udel.edu +3 -3 + Upgrade to libopts-27.4.2 + + libopts/save.c@1.3, 2006-07-22 23:28:51-04:00, stenn@whimsy.udel.edu +3 -3 + Upgrade to libopts-27.4.2 + + libopts/stack.c@1.3, 2006-07-22 23:28:52-04:00, stenn@whimsy.udel.edu +5 -3 + Upgrade to libopts-27.4.2 + + libopts/usage.c@1.3, 2006-07-22 23:28:53-04:00, stenn@whimsy.udel.edu +1 -1 + Upgrade to libopts-27.4.2 + + sntp/libopts/Makefile.am@1.3, 2006-07-22 23:34:06-04:00, stenn@whimsy.udel.edu +14 -14 + Upgrade to libopts-27.4.2 + + sntp/libopts/autoopts.c@1.3, 2006-07-22 23:34:07-04:00, stenn@whimsy.udel.edu +7 -9 + Upgrade to libopts-27.4.2 + + sntp/libopts/autoopts.h@1.3, 2006-07-22 23:34:07-04:00, stenn@whimsy.udel.edu +7 -8 + Upgrade to libopts-27.4.2 + + sntp/libopts/autoopts/options.h@1.3, 2006-07-22 23:34:18-04:00, stenn@whimsy.udel.edu +64 -62 + Upgrade to libopts-27.4.2 + + sntp/libopts/autoopts/usage-txt.h@1.2, 2006-07-22 23:34:19-04:00, stenn@whimsy.udel.edu +271 -395 + Upgrade to libopts-27.4.2 + + sntp/libopts/compat/compat.h@1.3, 2006-07-22 23:34:19-04:00, stenn@whimsy.udel.edu +25 -9 + Upgrade to libopts-27.4.2 + + sntp/libopts/compat/pathfind.c@1.3, 2006-07-22 23:34:20-04:00, stenn@whimsy.udel.edu +12 -3 + Upgrade to libopts-27.4.2 + sntp/libopts/compat/windows-config.h@1.1, 2006-07-22 23:27:32-04:00, stenn@whimsy.udel.edu +118 -0 BitKeeper file /deacon/backroom/ntp-dev/sntp/libopts/compat/windows-config.h sntp/libopts/compat/windows-config.h@1.0, 2006-07-22 23:27:32-04:00, stenn@whimsy.udel.edu +0 -0 + sntp/libopts/configfile.c@1.3, 2006-07-22 23:34:08-04:00, stenn@whimsy.udel.edu +1 -1 + Upgrade to libopts-27.4.2 + + sntp/libopts/genshell.c@1.2, 2006-07-22 23:34:10-04:00, stenn@whimsy.udel.edu +50 -10 + Upgrade to libopts-27.4.2 + + sntp/libopts/genshell.h@1.2, 2006-07-22 23:34:10-04:00, stenn@whimsy.udel.edu +21 -10 + Upgrade to libopts-27.4.2 + + sntp/libopts/libopts.c@1.3, 2006-07-22 23:34:11-04:00, stenn@whimsy.udel.edu +0 -1 + Upgrade to libopts-27.4.2 + + sntp/libopts/load.c@1.3, 2006-07-22 23:34:11-04:00, stenn@whimsy.udel.edu +1 -1 + Upgrade to libopts-27.4.2 + + sntp/libopts/m4/libopts.m4@1.3, 2006-07-22 23:34:21-04:00, stenn@whimsy.udel.edu +1 -1 + Upgrade to libopts-27.4.2 + + sntp/libopts/makeshell.c@1.3, 2006-07-22 23:34:12-04:00, stenn@whimsy.udel.edu +11 -2 + Upgrade to libopts-27.4.2 + + sntp/libopts/pgusage.c@1.3, 2006-07-22 23:34:13-04:00, stenn@whimsy.udel.edu +7 -3 + Upgrade to libopts-27.4.2 + + sntp/libopts/proto.h@1.3, 2006-07-22 23:34:13-04:00, stenn@whimsy.udel.edu +1 -1 + Upgrade to libopts-27.4.2 + + sntp/libopts/putshell.c@1.3, 2006-07-22 23:34:13-04:00, stenn@whimsy.udel.edu +3 -3 + Upgrade to libopts-27.4.2 + + sntp/libopts/save.c@1.3, 2006-07-22 23:34:14-04:00, stenn@whimsy.udel.edu +3 -3 + Upgrade to libopts-27.4.2 + + sntp/libopts/stack.c@1.3, 2006-07-22 23:34:15-04:00, stenn@whimsy.udel.edu +5 -3 + Upgrade to libopts-27.4.2 + + sntp/libopts/usage.c@1.3, 2006-07-22 23:34:16-04:00, stenn@whimsy.udel.edu +1 -1 + Upgrade to libopts-27.4.2 + ChangeSet@1.1353.1.77, 2006-07-22 10:12:26+00:00, kardel@pogo.udel.edu +2 -0 ntp_io.c: move debug level for most interface based activity up to 3 and 4 @@ -11125,11 +12849,6 @@ ChangeSet@1.1353.1.50, 2006-07-07 05:53:15-04:00, stenn@whimsy.udel.edu +11 -0 libopts/m4/libtool.m4@1.0, 2006-07-07 05:51:53-04:00, stenn@whimsy.udel.edu +0 -0 - sntp/libopts/m4/libtool.m4@1.1, 2006-07-07 05:51:56-04:00, stenn@whimsy.udel.edu +6397 -0 - BitKeeper file /deacon/backroom/ntp-dev/sntp/libopts/m4/libtool.m4 - - sntp/libopts/m4/libtool.m4@1.0, 2006-07-07 05:51:56-04:00, stenn@whimsy.udel.edu +0 -0 - ltmain.sh@1.1, 2006-07-07 05:51:57-04:00, stenn@whimsy.udel.edu +6863 -0 BitKeeper file /deacon/backroom/ntp-dev/ltmain.sh @@ -11150,6 +12869,11 @@ ChangeSet@1.1353.1.50, 2006-07-07 05:53:15-04:00, stenn@whimsy.udel.edu +11 -0 ntpq/ntpq-opts.def@1.7, 2006-07-07 05:49:45-04:00, stenn@whimsy.udel.edu +0 -0 Change mode to -rw-rw-r-- + sntp/libopts/m4/libtool.m4@1.1, 2006-07-07 05:51:56-04:00, stenn@whimsy.udel.edu +6397 -0 + BitKeeper file /deacon/backroom/ntp-dev/sntp/libopts/m4/libtool.m4 + + sntp/libopts/m4/libtool.m4@1.0, 2006-07-07 05:51:56-04:00, stenn@whimsy.udel.edu +0 -0 + sntp/ltmain.sh@1.1, 2006-07-07 05:51:55-04:00, stenn@whimsy.udel.edu +6863 -0 BitKeeper file /deacon/backroom/ntp-dev/sntp/ltmain.sh @@ -11176,176 +12900,176 @@ ChangeSet@1.1353.1.48, 2006-07-03 19:05:18-04:00, stenn@deacon.udel.edu +58 -0 libopts/Makefile.am@1.2, 2006-07-03 18:57:04-04:00, stenn@deacon.udel.edu +10 -10 Upgrade to libopts-27.3.2 - sntp/libopts/Makefile.am@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +10 -10 - Upgrade to libopts-27.3.2 - libopts/autoopts.c@1.2, 2006-07-03 18:57:04-04:00, stenn@deacon.udel.edu +9 -5 Upgrade to libopts-27.3.2 - sntp/libopts/autoopts.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +9 -5 - Upgrade to libopts-27.3.2 - libopts/autoopts.h@1.2, 2006-07-03 18:57:04-04:00, stenn@deacon.udel.edu +15 -7 Upgrade to libopts-27.3.2 - sntp/libopts/autoopts.h@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +15 -7 - Upgrade to libopts-27.3.2 - libopts/boolean.c@1.2, 2006-07-03 18:57:04-04:00, stenn@deacon.udel.edu +1 -1 Upgrade to libopts-27.3.2 - sntp/libopts/boolean.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 - Upgrade to libopts-27.3.2 - libopts/compat/compat.h@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +5 -2 Upgrade to libopts-27.3.2 - sntp/libopts/compat/compat.h@1.2, 2006-07-03 18:57:07-04:00, stenn@deacon.udel.edu +5 -2 - Upgrade to libopts-27.3.2 - - libopts/configfile.c@1.2, 2006-07-03 18:57:04-04:00, stenn@deacon.udel.edu +6 -6 - Upgrade to libopts-27.3.2 - - sntp/libopts/configfile.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +6 -6 - Upgrade to libopts-27.3.2 - - libopts/cook.c@1.2, 2006-07-03 18:57:04-04:00, stenn@deacon.udel.edu +6 -6 - Upgrade to libopts-27.3.2 - - sntp/libopts/cook.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +6 -6 - Upgrade to libopts-27.3.2 - - libopts/enumeration.c@1.2, 2006-07-03 18:57:04-04:00, stenn@deacon.udel.edu +8 -8 - Upgrade to libopts-27.3.2 - - sntp/libopts/enumeration.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +8 -8 - Upgrade to libopts-27.3.2 - - libopts/environment.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 - Upgrade to libopts-27.3.2 - - sntp/libopts/environment.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 - Upgrade to libopts-27.3.2 - - libopts/libopts.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -0 - Upgrade to libopts-27.3.2 - - sntp/libopts/libopts.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -0 - Upgrade to libopts-27.3.2 - - libopts/m4/libopts.m4@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +6 -13 - Upgrade to libopts-27.3.2 - - sntp/libopts/m4/libopts.m4@1.2, 2006-07-03 18:57:07-04:00, stenn@deacon.udel.edu +6 -13 - Upgrade to libopts-27.3.2 - - libopts/load.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +7 -7 - Upgrade to libopts-27.3.2 - - sntp/libopts/load.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +7 -7 - Upgrade to libopts-27.3.2 - - libopts/makeshell.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +10 -10 - Upgrade to libopts-27.3.2 - - sntp/libopts/makeshell.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +10 -10 - Upgrade to libopts-27.3.2 - - libopts/nested.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 - Upgrade to libopts-27.3.2 - - sntp/libopts/nested.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 - Upgrade to libopts-27.3.2 - - libopts/numeric.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 - Upgrade to libopts-27.3.2 - - sntp/libopts/numeric.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 - Upgrade to libopts-27.3.2 - libopts/compat/pathfind.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +2 -2 Upgrade to libopts-27.3.2 - sntp/libopts/compat/pathfind.c@1.2, 2006-07-03 18:57:07-04:00, stenn@deacon.udel.edu +2 -2 - Upgrade to libopts-27.3.2 - - libopts/pgusage.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +3 -3 - Upgrade to libopts-27.3.2 - - sntp/libopts/pgusage.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +3 -3 - Upgrade to libopts-27.3.2 - - libopts/proto.h@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +2 -2 - Upgrade to libopts-27.3.2 - - sntp/libopts/proto.h@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +2 -2 - Upgrade to libopts-27.3.2 - - libopts/putshell.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +8 -8 - Upgrade to libopts-27.3.2 - - sntp/libopts/putshell.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +8 -8 - Upgrade to libopts-27.3.2 - - libopts/restore.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 - Upgrade to libopts-27.3.2 - - sntp/libopts/restore.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 - Upgrade to libopts-27.3.2 - - libopts/save.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +7 -7 - Upgrade to libopts-27.3.2 - - sntp/libopts/save.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +7 -7 - Upgrade to libopts-27.3.2 - - libopts/sort.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +4 -4 - Upgrade to libopts-27.3.2 - - sntp/libopts/sort.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +4 -4 - Upgrade to libopts-27.3.2 - - libopts/stack.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +41 -2 - Upgrade to libopts-27.3.2 - - sntp/libopts/stack.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +41 -2 - Upgrade to libopts-27.3.2 - libopts/compat/strchr.c@1.1, 2006-07-03 18:55:11-04:00, stenn@deacon.udel.edu +61 -0 libopts/compat/strchr.c@1.0, 2006-07-03 18:55:11-04:00, stenn@deacon.udel.edu +0 -0 BitKeeper file /deacon/backroom/ntp-dev/libopts/compat/strchr.c - sntp/libopts/compat/strchr.c@1.1, 2006-07-03 18:55:11-04:00, stenn@deacon.udel.edu +61 -0 - - sntp/libopts/compat/strchr.c@1.0, 2006-07-03 18:55:11-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev/sntp/libopts/compat/strchr.c - - libopts/streqvcmp.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 + libopts/configfile.c@1.2, 2006-07-03 18:57:04-04:00, stenn@deacon.udel.edu +6 -6 Upgrade to libopts-27.3.2 - sntp/libopts/streqvcmp.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 + libopts/cook.c@1.2, 2006-07-03 18:57:04-04:00, stenn@deacon.udel.edu +6 -6 + Upgrade to libopts-27.3.2 + + libopts/enumeration.c@1.2, 2006-07-03 18:57:04-04:00, stenn@deacon.udel.edu +8 -8 + Upgrade to libopts-27.3.2 + + libopts/environment.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 + Upgrade to libopts-27.3.2 + + libopts/libopts.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -0 + Upgrade to libopts-27.3.2 + + libopts/load.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +7 -7 + Upgrade to libopts-27.3.2 + + libopts/m4/libopts.m4@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +6 -13 + Upgrade to libopts-27.3.2 + + libopts/makeshell.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +10 -10 + Upgrade to libopts-27.3.2 + + libopts/nested.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 + Upgrade to libopts-27.3.2 + + libopts/numeric.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 + Upgrade to libopts-27.3.2 + + libopts/pgusage.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +3 -3 + Upgrade to libopts-27.3.2 + + libopts/proto.h@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +2 -2 + Upgrade to libopts-27.3.2 + + libopts/putshell.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +8 -8 + Upgrade to libopts-27.3.2 + + libopts/restore.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 + Upgrade to libopts-27.3.2 + + libopts/save.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +7 -7 + Upgrade to libopts-27.3.2 + + libopts/sort.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +4 -4 + Upgrade to libopts-27.3.2 + + libopts/stack.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +41 -2 + Upgrade to libopts-27.3.2 + + libopts/streqvcmp.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 Upgrade to libopts-27.3.2 libopts/text_mmap.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +3 -3 Upgrade to libopts-27.3.2 - sntp/libopts/text_mmap.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +3 -3 - Upgrade to libopts-27.3.2 - libopts/tokenize.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +3 -3 Upgrade to libopts-27.3.2 - sntp/libopts/tokenize.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +3 -3 - Upgrade to libopts-27.3.2 - libopts/usage.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +11 -11 Upgrade to libopts-27.3.2 - sntp/libopts/usage.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +11 -11 + libopts/version.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 Upgrade to libopts-27.3.2 - libopts/version.c@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +1 -1 + sntp/libopts/Makefile.am@1.2, 2006-07-03 18:57:05-04:00, stenn@deacon.udel.edu +10 -10 + Upgrade to libopts-27.3.2 + + sntp/libopts/autoopts.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +9 -5 + Upgrade to libopts-27.3.2 + + sntp/libopts/autoopts.h@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +15 -7 + Upgrade to libopts-27.3.2 + + sntp/libopts/boolean.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 + Upgrade to libopts-27.3.2 + + sntp/libopts/compat/compat.h@1.2, 2006-07-03 18:57:07-04:00, stenn@deacon.udel.edu +5 -2 + Upgrade to libopts-27.3.2 + + sntp/libopts/compat/pathfind.c@1.2, 2006-07-03 18:57:07-04:00, stenn@deacon.udel.edu +2 -2 + Upgrade to libopts-27.3.2 + + sntp/libopts/compat/strchr.c@1.1, 2006-07-03 18:55:11-04:00, stenn@deacon.udel.edu +61 -0 + + sntp/libopts/compat/strchr.c@1.0, 2006-07-03 18:55:11-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev/sntp/libopts/compat/strchr.c + + sntp/libopts/configfile.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +6 -6 + Upgrade to libopts-27.3.2 + + sntp/libopts/cook.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +6 -6 + Upgrade to libopts-27.3.2 + + sntp/libopts/enumeration.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +8 -8 + Upgrade to libopts-27.3.2 + + sntp/libopts/environment.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 + Upgrade to libopts-27.3.2 + + sntp/libopts/libopts.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -0 + Upgrade to libopts-27.3.2 + + sntp/libopts/load.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +7 -7 + Upgrade to libopts-27.3.2 + + sntp/libopts/m4/libopts.m4@1.2, 2006-07-03 18:57:07-04:00, stenn@deacon.udel.edu +6 -13 + Upgrade to libopts-27.3.2 + + sntp/libopts/makeshell.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +10 -10 + Upgrade to libopts-27.3.2 + + sntp/libopts/nested.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 + Upgrade to libopts-27.3.2 + + sntp/libopts/numeric.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 + Upgrade to libopts-27.3.2 + + sntp/libopts/pgusage.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +3 -3 + Upgrade to libopts-27.3.2 + + sntp/libopts/proto.h@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +2 -2 + Upgrade to libopts-27.3.2 + + sntp/libopts/putshell.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +8 -8 + Upgrade to libopts-27.3.2 + + sntp/libopts/restore.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 + Upgrade to libopts-27.3.2 + + sntp/libopts/save.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +7 -7 + Upgrade to libopts-27.3.2 + + sntp/libopts/sort.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +4 -4 + Upgrade to libopts-27.3.2 + + sntp/libopts/stack.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +41 -2 + Upgrade to libopts-27.3.2 + + sntp/libopts/streqvcmp.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +1 -1 + Upgrade to libopts-27.3.2 + + sntp/libopts/text_mmap.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +3 -3 + Upgrade to libopts-27.3.2 + + sntp/libopts/tokenize.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +3 -3 + Upgrade to libopts-27.3.2 + + sntp/libopts/usage.c@1.2, 2006-07-03 18:57:06-04:00, stenn@deacon.udel.edu +11 -11 Upgrade to libopts-27.3.2 sntp/libopts/version.c@1.2, 2006-07-03 18:57:07-04:00, stenn@deacon.udel.edu +1 -1 @@ -11369,396 +13093,6 @@ ChangeSet@1.1353.1.46, 2006-07-03 00:13:59-04:00, stenn@deacon.udel.edu +2 -0 ChangeSet@1.1353.1.45, 2006-06-30 01:03:52-04:00, stenn@deacon.udel.edu +111 -0 Check in libopts and autgen-generated files - libopts/COPYING.lgpl@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +502 -0 - - libopts/COPYING.lgpl@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/COPYING.lgpl - - sntp/libopts/COPYING.lgpl@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +502 -0 - - sntp/libopts/COPYING.lgpl@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/COPYING.lgpl - - libopts/COPYING.mbsd@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +26 -0 - - libopts/COPYING.mbsd@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/COPYING.mbsd - - sntp/libopts/COPYING.mbsd@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +26 -0 - - sntp/libopts/COPYING.mbsd@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/COPYING.mbsd - - libopts/MakeDefs.inc@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 - - libopts/MakeDefs.inc@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/MakeDefs.inc - - sntp/libopts/MakeDefs.inc@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - - sntp/libopts/MakeDefs.inc@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/MakeDefs.inc - - libopts/Makefile.am@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +20 -0 - - libopts/Makefile.am@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/Makefile.am - - sntp/libopts/Makefile.am@1.1, 2006-06-30 01:00:05-04:00, stenn@deacon.udel.edu +20 -0 - - sntp/libopts/Makefile.am@1.0, 2006-06-30 01:00:05-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/Makefile.am - - libopts/README@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +93 -0 - - libopts/README@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/README - - sntp/libopts/README@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +93 -0 - - sntp/libopts/README@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/README - - libopts/autoopts.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +1043 -0 - - libopts/autoopts.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/autoopts.c - - sntp/libopts/autoopts.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +1043 -0 - - sntp/libopts/autoopts.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/autoopts.c - - libopts/autoopts.h@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +321 -0 - - libopts/autoopts.h@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/autoopts.h - - sntp/libopts/autoopts.h@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +321 -0 - - sntp/libopts/autoopts.h@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/autoopts.h - - libopts/boolean.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +102 -0 - - libopts/boolean.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/boolean.c - - sntp/libopts/boolean.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +102 -0 - - sntp/libopts/boolean.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/boolean.c - - libopts/compat/compat.h@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +292 -0 - - libopts/compat/compat.h@1.0, 2006-06-30 00:55:13-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/compat/compat.h - - sntp/libopts/compat/compat.h@1.1, 2006-06-30 01:00:01-04:00, stenn@deacon.udel.edu +292 -0 - - sntp/libopts/compat/compat.h@1.0, 2006-06-30 01:00:01-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/compat/compat.h - - libopts/configfile.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +1277 -0 - - libopts/configfile.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/configfile.c - - sntp/libopts/configfile.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +1277 -0 - - sntp/libopts/configfile.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/configfile.c - - libopts/cook.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +355 -0 - - libopts/cook.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/cook.c - - sntp/libopts/cook.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +355 -0 - - sntp/libopts/cook.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/cook.c - - libopts/enumeration.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +485 -0 - - libopts/enumeration.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/enumeration.c - - sntp/libopts/enumeration.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +485 -0 - - sntp/libopts/enumeration.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/enumeration.c - - libopts/environment.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +261 -0 - - libopts/environment.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/environment.c - - sntp/libopts/environment.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +261 -0 - - sntp/libopts/environment.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/environment.c - - libopts/genshell.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +301 -0 - - libopts/genshell.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/genshell.c - - sntp/libopts/genshell.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +301 -0 - - sntp/libopts/genshell.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/genshell.c - - libopts/genshell.h@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +142 -0 - - libopts/genshell.h@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/genshell.h - - sntp/libopts/genshell.h@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +142 -0 - - sntp/libopts/genshell.h@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/genshell.h - - libopts/libopts.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +30 -0 - - libopts/libopts.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/libopts.c - - sntp/libopts/libopts.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +30 -0 - - sntp/libopts/libopts.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/libopts.c - - libopts/m4/libopts.m4@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +487 -0 - - libopts/m4/libopts.m4@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/m4/libopts.m4 - - sntp/libopts/m4/libopts.m4@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +487 -0 - - sntp/libopts/m4/libopts.m4@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/m4/libopts.m4 - - libopts/m4/liboptschk.m4@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +39 -0 - - libopts/m4/liboptschk.m4@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/m4/liboptschk.m4 - - sntp/libopts/m4/liboptschk.m4@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +39 -0 - - sntp/libopts/m4/liboptschk.m4@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/m4/liboptschk.m4 - - libopts/load.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +520 -0 - - libopts/load.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/load.c - - sntp/libopts/load.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +520 -0 - - sntp/libopts/load.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/load.c - - libopts/makeshell.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +1100 -0 - - libopts/makeshell.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/makeshell.c - - sntp/libopts/makeshell.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +1100 -0 - - sntp/libopts/makeshell.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/makeshell.c - - libopts/nested.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +705 -0 - - libopts/nested.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/nested.c - - sntp/libopts/nested.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +705 -0 - - sntp/libopts/nested.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/nested.c - - libopts/numeric.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +89 -0 - - libopts/numeric.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/numeric.c - - sntp/libopts/numeric.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +89 -0 - - sntp/libopts/numeric.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/numeric.c - - libopts/autoopts/options.h@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +908 -0 - - libopts/autoopts/options.h@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/autoopts/options.h - - sntp/libopts/autoopts/options.h@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +908 -0 - - sntp/libopts/autoopts/options.h@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/autoopts/options.h - - libopts/compat/pathfind.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +330 -0 - - libopts/compat/pathfind.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/compat/pathfind.c - - sntp/libopts/compat/pathfind.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +330 -0 - - sntp/libopts/compat/pathfind.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/compat/pathfind.c - - libopts/pgusage.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +154 -0 - - libopts/pgusage.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/pgusage.c - - sntp/libopts/pgusage.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +154 -0 - - sntp/libopts/pgusage.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/pgusage.c - - libopts/proto.h@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +88 -0 - - libopts/proto.h@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/proto.h - - sntp/libopts/proto.h@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +88 -0 - - sntp/libopts/proto.h@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/proto.h - - libopts/putshell.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +333 -0 - - libopts/putshell.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/putshell.c - - sntp/libopts/putshell.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +333 -0 - - sntp/libopts/putshell.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/putshell.c - - libopts/restore.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +207 -0 - - libopts/restore.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/restore.c - - sntp/libopts/restore.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +207 -0 - - sntp/libopts/restore.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/restore.c - - libopts/save.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +499 -0 - - libopts/save.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/save.c - - sntp/libopts/save.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +499 -0 - - sntp/libopts/save.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/save.c - - libopts/compat/snprintf.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +36 -0 - - libopts/compat/snprintf.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/compat/snprintf.c - - sntp/libopts/compat/snprintf.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +36 -0 - - sntp/libopts/compat/snprintf.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/compat/snprintf.c - - libopts/sort.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +369 -0 - - libopts/sort.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/sort.c - - sntp/libopts/sort.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +369 -0 - - sntp/libopts/sort.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/sort.c - - libopts/stack.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +224 -0 - - libopts/stack.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/stack.c - - sntp/libopts/stack.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +224 -0 - - sntp/libopts/stack.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/stack.c - - libopts/compat/strdup.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +19 -0 - - libopts/compat/strdup.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/compat/strdup.c - - sntp/libopts/compat/strdup.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +19 -0 - - sntp/libopts/compat/strdup.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/compat/strdup.c - - libopts/streqvcmp.c@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +292 -0 - - libopts/streqvcmp.c@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/streqvcmp.c - - sntp/libopts/streqvcmp.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +292 -0 - - sntp/libopts/streqvcmp.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/streqvcmp.c - - libopts/text_mmap.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +367 -0 - - libopts/text_mmap.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/text_mmap.c - - sntp/libopts/text_mmap.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +367 -0 - - sntp/libopts/text_mmap.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/text_mmap.c - - libopts/tokenize.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +322 -0 - - libopts/tokenize.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/tokenize.c - - sntp/libopts/tokenize.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +322 -0 - - sntp/libopts/tokenize.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/tokenize.c - - libopts/autoopts/usage-txt.h@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +479 -0 - - libopts/autoopts/usage-txt.h@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/autoopts/usage-txt.h - - sntp/libopts/autoopts/usage-txt.h@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +479 -0 - - sntp/libopts/autoopts/usage-txt.h@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/autoopts/usage-txt.h - - libopts/usage.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +732 -0 - - libopts/usage.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/usage.c - - sntp/libopts/usage.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +732 -0 - - sntp/libopts/usage.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/usage.c - - libopts/version.c@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +181 -0 - - libopts/version.c@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/version.c - - sntp/libopts/version.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +181 -0 - - sntp/libopts/version.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/version.c - BitKeeper/etc/ignore@1.52, 2006-06-30 01:03:43-04:00, stenn@deacon.udel.edu +12 -12 Check in libopts and autgen-generated files @@ -11775,6 +13109,201 @@ ChangeSet@1.1353.1.45, 2006-06-30 01:03:52-04:00, stenn@deacon.udel.edu +111 -0 clockstuff/clktest-opts.h@1.0, 2006-06-30 00:58:06-04:00, stenn@deacon.udel.edu +0 -0 BitKeeper file /deacon/backroom/ntp-dev-hms/clockstuff/clktest-opts.h + libopts/COPYING.lgpl@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +502 -0 + + libopts/COPYING.lgpl@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/COPYING.lgpl + + libopts/COPYING.mbsd@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +26 -0 + + libopts/COPYING.mbsd@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/COPYING.mbsd + + libopts/MakeDefs.inc@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 + + libopts/MakeDefs.inc@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/MakeDefs.inc + + libopts/Makefile.am@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +20 -0 + + libopts/Makefile.am@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/Makefile.am + + libopts/README@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +93 -0 + + libopts/README@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/README + + libopts/autoopts.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +1043 -0 + + libopts/autoopts.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/autoopts.c + + libopts/autoopts.h@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +321 -0 + + libopts/autoopts.h@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/autoopts.h + + libopts/autoopts/options.h@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +908 -0 + + libopts/autoopts/options.h@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/autoopts/options.h + + libopts/autoopts/usage-txt.h@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +479 -0 + + libopts/autoopts/usage-txt.h@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/autoopts/usage-txt.h + + libopts/boolean.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +102 -0 + + libopts/boolean.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/boolean.c + + libopts/compat/compat.h@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +292 -0 + + libopts/compat/compat.h@1.0, 2006-06-30 00:55:13-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/compat/compat.h + + libopts/compat/pathfind.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +330 -0 + + libopts/compat/pathfind.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/compat/pathfind.c + + libopts/compat/snprintf.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +36 -0 + + libopts/compat/snprintf.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/compat/snprintf.c + + libopts/compat/strdup.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +19 -0 + + libopts/compat/strdup.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/compat/strdup.c + + libopts/configfile.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +1277 -0 + + libopts/configfile.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/configfile.c + + libopts/cook.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +355 -0 + + libopts/cook.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/cook.c + + libopts/enumeration.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +485 -0 + + libopts/enumeration.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/enumeration.c + + libopts/environment.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +261 -0 + + libopts/environment.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/environment.c + + libopts/genshell.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +301 -0 + + libopts/genshell.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/genshell.c + + libopts/genshell.h@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +142 -0 + + libopts/genshell.h@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/genshell.h + + libopts/libopts.c@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +30 -0 + + libopts/libopts.c@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/libopts.c + + libopts/load.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +520 -0 + + libopts/load.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/load.c + + libopts/m4/libopts.m4@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +487 -0 + + libopts/m4/libopts.m4@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/m4/libopts.m4 + + libopts/m4/liboptschk.m4@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +39 -0 + + libopts/m4/liboptschk.m4@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/m4/liboptschk.m4 + + libopts/makeshell.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +1100 -0 + + libopts/makeshell.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/makeshell.c + + libopts/nested.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +705 -0 + + libopts/nested.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/nested.c + + libopts/numeric.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +89 -0 + + libopts/numeric.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/numeric.c + + libopts/pgusage.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +154 -0 + + libopts/pgusage.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/pgusage.c + + libopts/proto.h@1.1, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +88 -0 + + libopts/proto.h@1.0, 2006-06-30 00:55:14-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/proto.h + + libopts/putshell.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +333 -0 + + libopts/putshell.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/putshell.c + + libopts/restore.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +207 -0 + + libopts/restore.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/restore.c + + libopts/save.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +499 -0 + + libopts/save.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/save.c + + libopts/sort.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +369 -0 + + libopts/sort.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/sort.c + + libopts/stack.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +224 -0 + + libopts/stack.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/stack.c + + libopts/streqvcmp.c@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +292 -0 + + libopts/streqvcmp.c@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/streqvcmp.c + + libopts/text_mmap.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +367 -0 + + libopts/text_mmap.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/text_mmap.c + + libopts/tokenize.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +322 -0 + + libopts/tokenize.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/tokenize.c + + libopts/usage.c@1.1, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +732 -0 + + libopts/usage.c@1.0, 2006-06-30 00:55:15-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/usage.c + + libopts/version.c@1.1, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +181 -0 + + libopts/version.c@1.0, 2006-06-30 00:55:16-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/libopts/version.c + ntpd/ntpd-opts.c@1.1, 2006-06-30 00:56:22-04:00, stenn@deacon.udel.edu +975 -0 ntpd/ntpd-opts.c@1.0, 2006-06-30 00:56:22-04:00, stenn@deacon.udel.edu +0 -0 @@ -11875,6 +13404,201 @@ ChangeSet@1.1353.1.45, 2006-06-30 01:03:52-04:00, stenn@deacon.udel.edu +111 -0 ntpq/ntpq.1@1.0, 2006-06-30 00:56:43-04:00, stenn@deacon.udel.edu +0 -0 BitKeeper file /deacon/backroom/ntp-dev-hms/ntpq/ntpq.1 + sntp/libopts/COPYING.lgpl@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +502 -0 + + sntp/libopts/COPYING.lgpl@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/COPYING.lgpl + + sntp/libopts/COPYING.mbsd@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +26 -0 + + sntp/libopts/COPYING.mbsd@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/COPYING.mbsd + + sntp/libopts/MakeDefs.inc@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + + sntp/libopts/MakeDefs.inc@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/MakeDefs.inc + + sntp/libopts/Makefile.am@1.1, 2006-06-30 01:00:05-04:00, stenn@deacon.udel.edu +20 -0 + + sntp/libopts/Makefile.am@1.0, 2006-06-30 01:00:05-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/Makefile.am + + sntp/libopts/README@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +93 -0 + + sntp/libopts/README@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/README + + sntp/libopts/autoopts.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +1043 -0 + + sntp/libopts/autoopts.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/autoopts.c + + sntp/libopts/autoopts.h@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +321 -0 + + sntp/libopts/autoopts.h@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/autoopts.h + + sntp/libopts/autoopts/options.h@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +908 -0 + + sntp/libopts/autoopts/options.h@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/autoopts/options.h + + sntp/libopts/autoopts/usage-txt.h@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +479 -0 + + sntp/libopts/autoopts/usage-txt.h@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/autoopts/usage-txt.h + + sntp/libopts/boolean.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +102 -0 + + sntp/libopts/boolean.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/boolean.c + + sntp/libopts/compat/compat.h@1.1, 2006-06-30 01:00:01-04:00, stenn@deacon.udel.edu +292 -0 + + sntp/libopts/compat/compat.h@1.0, 2006-06-30 01:00:01-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/compat/compat.h + + sntp/libopts/compat/pathfind.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +330 -0 + + sntp/libopts/compat/pathfind.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/compat/pathfind.c + + sntp/libopts/compat/snprintf.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +36 -0 + + sntp/libopts/compat/snprintf.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/compat/snprintf.c + + sntp/libopts/compat/strdup.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +19 -0 + + sntp/libopts/compat/strdup.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/compat/strdup.c + + sntp/libopts/configfile.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +1277 -0 + + sntp/libopts/configfile.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/configfile.c + + sntp/libopts/cook.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +355 -0 + + sntp/libopts/cook.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/cook.c + + sntp/libopts/enumeration.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +485 -0 + + sntp/libopts/enumeration.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/enumeration.c + + sntp/libopts/environment.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +261 -0 + + sntp/libopts/environment.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/environment.c + + sntp/libopts/genshell.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +301 -0 + + sntp/libopts/genshell.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/genshell.c + + sntp/libopts/genshell.h@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +142 -0 + + sntp/libopts/genshell.h@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/genshell.h + + sntp/libopts/libopts.c@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +30 -0 + + sntp/libopts/libopts.c@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/libopts.c + + sntp/libopts/load.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +520 -0 + + sntp/libopts/load.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/load.c + + sntp/libopts/m4/libopts.m4@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +487 -0 + + sntp/libopts/m4/libopts.m4@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/m4/libopts.m4 + + sntp/libopts/m4/liboptschk.m4@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +39 -0 + + sntp/libopts/m4/liboptschk.m4@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/m4/liboptschk.m4 + + sntp/libopts/makeshell.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +1100 -0 + + sntp/libopts/makeshell.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/makeshell.c + + sntp/libopts/nested.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +705 -0 + + sntp/libopts/nested.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/nested.c + + sntp/libopts/numeric.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +89 -0 + + sntp/libopts/numeric.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/numeric.c + + sntp/libopts/pgusage.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +154 -0 + + sntp/libopts/pgusage.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/pgusage.c + + sntp/libopts/proto.h@1.1, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +88 -0 + + sntp/libopts/proto.h@1.0, 2006-06-30 01:00:02-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/proto.h + + sntp/libopts/putshell.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +333 -0 + + sntp/libopts/putshell.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/putshell.c + + sntp/libopts/restore.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +207 -0 + + sntp/libopts/restore.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/restore.c + + sntp/libopts/save.c@1.1, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +499 -0 + + sntp/libopts/save.c@1.0, 2006-06-30 01:00:03-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/save.c + + sntp/libopts/sort.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +369 -0 + + sntp/libopts/sort.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/sort.c + + sntp/libopts/stack.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +224 -0 + + sntp/libopts/stack.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/stack.c + + sntp/libopts/streqvcmp.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +292 -0 + + sntp/libopts/streqvcmp.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/streqvcmp.c + + sntp/libopts/text_mmap.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +367 -0 + + sntp/libopts/text_mmap.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/text_mmap.c + + sntp/libopts/tokenize.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +322 -0 + + sntp/libopts/tokenize.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/tokenize.c + + sntp/libopts/usage.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +732 -0 + + sntp/libopts/usage.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/usage.c + + sntp/libopts/version.c@1.1, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +181 -0 + + sntp/libopts/version.c@1.0, 2006-06-30 01:00:04-04:00, stenn@deacon.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev-hms/sntp/libopts/version.c + sntp/sntp-opts.c@1.1, 2006-06-30 01:02:22-04:00, stenn@deacon.udel.edu +742 -0 sntp/sntp-opts.c@1.0, 2006-06-30 01:02:22-04:00, stenn@deacon.udel.edu +0 -0 @@ -12706,10 +14430,10 @@ ChangeSet@1.1251.80.72, 2006-06-05 21:31:04-04:00, stenn@whimsy.udel.edu +1 -0 ChangeSet@1.1251.80.71, 2006-06-05 19:53:12-04:00, stenn@whimsy.udel.edu +3 -0 ntp-4.2.2 - packageinfo.sh@1.27, 2006-06-05 19:22:00-04:00, stenn@whimsy.udel.edu +4 -4 + NEWS@1.50, 2006-06-05 19:21:53-04:00, stenn@whimsy.udel.edu +6 -1 Release ntp-4.2.2 - NEWS@1.50, 2006-06-05 19:21:53-04:00, stenn@whimsy.udel.edu +6 -1 + packageinfo.sh@1.27, 2006-06-05 19:22:00-04:00, stenn@whimsy.udel.edu +4 -4 Release ntp-4.2.2 scripts/VersionName@1.3, 2006-06-05 19:51:58-04:00, stenn@whimsy.udel.edu +1 -0 @@ -13309,16 +15033,16 @@ ChangeSet@1.1342, 2006-04-11 18:05:00-07:00, bkorb@bach.veritas.com +5 -0 ChangeSet@1.1251.84.1, 2006-04-11 04:49:33-04:00, stenn@whimsy.udel.edu +2 -0 release prep - packageinfo.sh@1.1, 2006-04-11 04:47:12-04:00, stenn@whimsy.udel.edu +19 -0 - - packageinfo.sh@1.0, 2006-04-11 04:47:12-04:00, stenn@whimsy.udel.edu +0 -0 - BitKeeper file /deacon/backroom/ntp-dev/packageinfo.sh - bootstrap@1.1, 2006-04-11 04:47:55-04:00, stenn@whimsy.udel.edu +59 -0 bootstrap@1.0, 2006-04-11 04:47:55-04:00, stenn@whimsy.udel.edu +0 -0 BitKeeper file /deacon/backroom/ntp-dev/bootstrap + packageinfo.sh@1.1, 2006-04-11 04:47:12-04:00, stenn@whimsy.udel.edu +19 -0 + + packageinfo.sh@1.0, 2006-04-11 04:47:12-04:00, stenn@whimsy.udel.edu +0 -0 + BitKeeper file /deacon/backroom/ntp-dev/packageinfo.sh + ChangeSet@1.1251.80.25, 2006-04-09 05:25:08-04:00, stenn@whimsy.udel.edu +3 -0 README* updates @@ -13334,6 +15058,12 @@ ChangeSet@1.1251.80.25, 2006-04-09 05:25:08-04:00, stenn@whimsy.udel.edu +3 -0 ChangeSet@1.1251.80.24, 2006-04-09 05:00:52-04:00, stenn@whimsy.udel.edu +5 -0 New release numbering style support + BitKeeper/deleted/.del-version.m4~4ef47e5fd0c38ddb@1.3.2.1, 2006-04-09 04:57:32-04:00, stenn@whimsy.udel.edu +0 -0 + Delete: version.m4 + + BitKeeper/etc/ignore@1.35.1.1, 2006-04-09 04:57:51-04:00, stenn@whimsy.udel.edu +2 -0 + added include/version.def version.m4 + bootstrap@1.2, 2006-04-09 04:58:41-04:00, stenn@whimsy.udel.edu +13 -11 cleanup @@ -13347,12 +15077,6 @@ ChangeSet@1.1251.80.24, 2006-04-09 05:00:52-04:00, stenn@whimsy.udel.edu +5 -0 packageinfo.sh@1.0, 2006-04-09 04:05:25-04:00, stenn@whimsy.udel.edu +0 -0 BitKeeper file /deacon/backroom/ntp-dev-hms/packageinfo.sh - BitKeeper/deleted/.del-version.m4~4ef47e5fd0c38ddb@1.3.2.1, 2006-04-09 04:57:32-04:00, stenn@whimsy.udel.edu +0 -0 - Delete: version.m4 - - BitKeeper/etc/ignore@1.35.1.1, 2006-04-09 04:57:51-04:00, stenn@whimsy.udel.edu +2 -0 - added include/version.def version.m4 - scripts/VersionName@1.1, 2006-04-09 04:51:47-04:00, stenn@whimsy.udel.edu +29 -0 scripts/VersionName@1.0, 2006-04-09 04:51:47-04:00, stenn@whimsy.udel.edu +0 -0 @@ -13379,12 +15103,12 @@ ChangeSet@1.1339, 2006-04-08 22:11:27-04:00, stenn@pogo.udel.edu +1 -0 ChangeSet@1.1338, 2006-04-08 00:50:08-04:00, stenn@pogo.udel.edu +2 -0 Test new release numbering and snapshot method - packageinfo.sh@1.2, 2006-04-08 00:49:59-04:00, stenn@pogo.udel.edu +4 -1 - Test new release numbering and snapshot method - BitKeeper/etc/ignore@1.48, 2006-04-08 00:49:18-04:00, stenn@pogo.udel.edu +2 -0 added version.m4 include/version.def + packageinfo.sh@1.2, 2006-04-08 00:49:59-04:00, stenn@pogo.udel.edu +4 -1 + Test new release numbering and snapshot method + ChangeSet@1.1251.80.23, 2006-04-04 03:16:32-04:00, stenn@deacon.udel.edu +1 -0 [Bug 588] logfile documentation problems @@ -13895,15 +15619,15 @@ ChangeSet@1.1324, 2006-01-12 18:23:36-05:00, stenn@pogo.udel.edu +3 -0 Makefile.am: Get libopts.m4 from the sntp/m4 subdir - bootstrap@1.8, 2006-01-12 18:21:48-05:00, stenn@pogo.udel.edu +0 -1 - Leave libopts.m4 in sntp/ - BitKeeper/deleted/.del-libopts.m4~ebff9cfbfbe104c8@1.7, 2006-01-12 18:22:02-05:00, stenn@pogo.udel.edu +97 -88 Delete: sntp/m4/libopts.m4 Makefile.am@1.57, 2006-01-12 18:21:25-05:00, stenn@pogo.udel.edu +1 -1 Get libopts.m4 from the sntp/m4 subdir + bootstrap@1.8, 2006-01-12 18:21:48-05:00, stenn@pogo.udel.edu +0 -1 + Leave libopts.m4 in sntp/ + ChangeSet@1.1323, 2006-01-12 06:00:55-05:00, stenn@pogo.udel.edu +1 -0 libopts.m4 is in m4/ now @@ -13993,15 +15717,21 @@ ChangeSet@1.1251.74.6, 2005-12-30 14:50:03-05:00, stenn@pogo.udel.edu +1 -0 ChangeSet@1.1319, 2005-12-30 14:07:38-05:00, stenn@pogo.udel.edu +2 -0 verbose bootstrap, lose m4/libopts.m4 - bootstrap@1.4, 2005-12-30 14:07:15-05:00, stenn@pogo.udel.edu +3 -2 - be verbose - BitKeeper/deleted/.del-libopts.m4~9f04cbceeedbd0cf@1.10, 2005-12-30 14:06:59-05:00, stenn@pogo.udel.edu +97 -88 Delete: m4/libopts.m4 + bootstrap@1.4, 2005-12-30 14:07:15-05:00, stenn@pogo.udel.edu +3 -2 + be verbose + ChangeSet@1.1318, 2005-12-29 01:38:14-05:00, stenn@pogo.udel.edu +4 -0 wiggles + BitKeeper/deleted/.del-version.m4~4ef47e5fd0c38ddb@1.4, 2005-12-29 01:36:03-05:00, stenn@pogo.udel.edu +0 -0 + Delete: version.m4 + + Makefile.am@1.56, 2005-12-29 01:37:08-05:00, stenn@pogo.udel.edu +16 -1 + wiggles + bootstrap@1.3, 2005-12-29 01:37:08-05:00, stenn@pogo.udel.edu +2 -20 wiggles @@ -14010,12 +15740,6 @@ ChangeSet@1.1318, 2005-12-29 01:38:14-05:00, stenn@pogo.udel.edu +4 -0 packageinfo.sh@1.0, 2005-12-29 01:35:53-05:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/packageinfo.sh - BitKeeper/deleted/.del-version.m4~4ef47e5fd0c38ddb@1.4, 2005-12-29 01:36:03-05:00, stenn@pogo.udel.edu +0 -0 - Delete: version.m4 - - Makefile.am@1.56, 2005-12-29 01:37:08-05:00, stenn@pogo.udel.edu +16 -1 - wiggles - ChangeSet@1.1251.74.5, 2005-12-27 19:50:58-05:00, stenn@deacon.udel.edu +1 -0 [Bug 543] Leap second warning in ONCORE driver, from Luis Batanero Guerrero @@ -14063,14 +15787,6 @@ ChangeSet@1.1316, 2005-12-23 13:56:31-08:00, bkorb@bach.veritas.com +51 -0 BitKeeper/deleted/.del-boolean.c~2a088bf49e080afe@1.3, 2005-12-23 12:11:02-08:00, bkorb@bach.veritas.com +0 -0 Delete: sntp/libopts/boolean.c - bootstrap@1.2, 2005-12-23 12:17:54-08:00, bkorb@bach.veritas.com +12 -0 - Add in the commands that were part of Makefile.am - - bootstrap@1.1, 2005-12-23 10:56:19-08:00, bkorb@bach.veritas.com +61 -0 - - bootstrap@1.0, 2005-12-23 10:56:19-08:00, bkorb@bach.veritas.com +0 -0 - BitKeeper file /home/bkorb/tools/ntp/ntp-dev-ag/bootstrap - BitKeeper/deleted/.del-compat.h~1cf561c3e113254d@1.7, 2005-12-23 12:11:25-08:00, bkorb@bach.veritas.com +0 -0 Delete: sntp/libopts/compat/compat.h @@ -14167,6 +15883,14 @@ ChangeSet@1.1316, 2005-12-23 13:56:31-08:00, bkorb@bach.veritas.com +51 -0 Makefile.am@1.55, 2005-12-23 12:17:32-08:00, bkorb@bach.veritas.com +1 -16 Move some commands out into the bootstrap script + bootstrap@1.2, 2005-12-23 12:17:54-08:00, bkorb@bach.veritas.com +12 -0 + Add in the commands that were part of Makefile.am + + bootstrap@1.1, 2005-12-23 10:56:19-08:00, bkorb@bach.veritas.com +61 -0 + + bootstrap@1.0, 2005-12-23 10:56:19-08:00, bkorb@bach.veritas.com +0 -0 + BitKeeper file /home/bkorb/tools/ntp/ntp-dev-ag/bootstrap + include/debug-opt.def@1.1, 2005-12-23 10:56:50-08:00, bkorb@bach.veritas.com +24 -0 include/debug-opt.def@1.0, 2005-12-23 10:56:50-08:00, bkorb@bach.veritas.com +0 -0 @@ -14278,13 +16002,22 @@ ChangeSet@1.1315, 2005-12-16 03:37:46-05:00, stenn@pogo.udel.edu +1 -0 ChangeSet@1.1314, 2005-12-15 06:34:59-05:00, stenn@pogo.udel.edu +9 -0 AutoGen stuff - sntp/libopts/compat/compat.h@1.6, 2005-12-15 06:33:51-05:00, stenn@pogo.udel.edu +1 -1 - AutoGen stuff - m4/libopts.m4@1.9, 2005-12-15 06:33:50-05:00, stenn@pogo.udel.edu +15 -17 AutoGen stuff - sntp/m4/libopts.m4@1.6, 2005-12-15 06:33:51-05:00, stenn@pogo.udel.edu +15 -17 + ntpd/Makefile.am@1.44, 2005-12-15 06:33:50-05:00, stenn@pogo.udel.edu +10 -10 + AutoGen stuff + + ntpdc/Makefile.am@1.26, 2005-12-15 06:33:50-05:00, stenn@pogo.udel.edu +5 -5 + AutoGen stuff + + ntpq/Makefile.am@1.18, 2005-12-15 06:33:51-05:00, stenn@pogo.udel.edu +4 -4 + AutoGen stuff + + sntp/Makefile.am@1.10, 2005-12-15 06:33:51-05:00, stenn@pogo.udel.edu +4 -4 + AutoGen stuff + + sntp/libopts/compat/compat.h@1.6, 2005-12-15 06:33:51-05:00, stenn@pogo.udel.edu +1 -1 AutoGen stuff sntp/libopts/compat/snprintf.c@1.1, 2005-12-15 06:32:56-05:00, stenn@pogo.udel.edu +36 -0 @@ -14297,16 +16030,7 @@ ChangeSet@1.1314, 2005-12-15 06:34:59-05:00, stenn@pogo.udel.edu +9 -0 sntp/libopts/compat/strdup.c@1.0, 2005-12-15 06:32:56-05:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts/compat/strdup.c - ntpd/Makefile.am@1.44, 2005-12-15 06:33:50-05:00, stenn@pogo.udel.edu +10 -10 - AutoGen stuff - - ntpdc/Makefile.am@1.26, 2005-12-15 06:33:50-05:00, stenn@pogo.udel.edu +5 -5 - AutoGen stuff - - ntpq/Makefile.am@1.18, 2005-12-15 06:33:51-05:00, stenn@pogo.udel.edu +4 -4 - AutoGen stuff - - sntp/Makefile.am@1.10, 2005-12-15 06:33:51-05:00, stenn@pogo.udel.edu +4 -4 + sntp/m4/libopts.m4@1.6, 2005-12-15 06:33:51-05:00, stenn@pogo.udel.edu +15 -17 AutoGen stuff ChangeSet@1.1312, 2005-12-15 06:27:57-05:00, stenn@pogo.udel.edu +3 -0 @@ -15109,6 +16833,12 @@ ChangeSet@1.1303, 2005-09-21 00:28:47-04:00, stenn@pogo.udel.edu +10 -0 sntp/libopts/autoopts.h@1.4, 2005-09-21 00:26:36-04:00, stenn@pogo.udel.edu +1 -8 libopts upgrade + sntp/libopts/autoopts/options.h@1.3, 2005-09-17 03:23:25-04:00, stenn@pogo.udel.edu +30 -5 + libopts upgrade + + sntp/libopts/autoopts/usage-txt.h@1.4, 2005-09-17 03:23:25-04:00, stenn@pogo.udel.edu +1 -1 + libopts upgrade + sntp/libopts/compat/compat.h@1.4, 2005-09-17 03:23:25-04:00, stenn@pogo.udel.edu +1 -1 libopts upgrade @@ -15124,15 +16854,9 @@ ChangeSet@1.1303, 2005-09-21 00:28:47-04:00, stenn@pogo.udel.edu +10 -0 sntp/libopts/libopts.m4@1.4, 2005-09-21 00:26:37-04:00, stenn@pogo.udel.edu +15 -17 libopts upgrade - sntp/libopts/autoopts/options.h@1.3, 2005-09-17 03:23:25-04:00, stenn@pogo.udel.edu +30 -5 - libopts upgrade - sntp/libopts/proto.h@1.4, 2005-09-21 00:26:37-04:00, stenn@pogo.udel.edu +1 -1 libopts upgrade - sntp/libopts/autoopts/usage-txt.h@1.4, 2005-09-17 03:23:25-04:00, stenn@pogo.udel.edu +1 -1 - libopts upgrade - ChangeSet@1.1251.53.3, 2005-09-20 23:35:55-04:00, mayer@pogo.udel.edu +1 -0 bug #486 and Fix memory leak and add heiko's change for hints @@ -15158,12 +16882,24 @@ ChangeSet@1.1251.52.2, 2005-09-17 10:11:26+00:00, kardel@pogo.udel.edu +1 -0 ChangeSet@1.1301, 2005-09-17 00:45:06-04:00, stenn@pogo.udel.edu +14 -0 libopts upgrade + m4/libopts.m4@1.8, 2005-09-17 00:39:38-04:00, stenn@pogo.udel.edu +36 -1 + libopts upgrade + + sntp/Makefile.am@1.9, 2005-09-17 00:39:46-04:00, stenn@pogo.udel.edu +1 -1 + libopts upgrade + sntp/libopts/Makefile.am@1.2, 2005-09-17 00:40:04-04:00, stenn@pogo.udel.edu +1 -1 libopts upgrade sntp/libopts/autoopts.h@1.3, 2005-09-17 00:40:04-04:00, stenn@pogo.udel.edu +1 -21 libopts upgrade + sntp/libopts/autoopts/usage-txt.h@1.3, 2005-09-11 23:12:25-04:00, stenn@pogo.udel.edu +0 -0 + Change mode to -rw-r--r-- + + sntp/libopts/autoopts/usage-txt.h@1.2, 2005-09-11 23:09:56-04:00, stenn@pogo.udel.edu +1 -1 + libopts updates + sntp/libopts/compat/compat.h@1.3, 2005-09-17 00:41:18-04:00, stenn@pogo.udel.edu +5 -4 libopts upgrade @@ -15185,7 +16921,10 @@ ChangeSet@1.1301, 2005-09-17 00:45:06-04:00, stenn@pogo.udel.edu +14 -0 sntp/libopts/libopts.m4@1.3, 2005-09-17 00:40:05-04:00, stenn@pogo.udel.edu +36 -1 libopts upgrade - m4/libopts.m4@1.8, 2005-09-17 00:39:38-04:00, stenn@pogo.udel.edu +36 -1 + sntp/libopts/proto.h@1.3, 2005-09-17 00:40:05-04:00, stenn@pogo.udel.edu +1 -10 + libopts upgrade + + sntp/libopts/text_mmap.c@1.3, 2005-09-17 00:40:05-04:00, stenn@pogo.udel.edu +74 -33 libopts upgrade sntp/m4/libopts.m4@1.5, 2005-09-17 00:39:52-04:00, stenn@pogo.udel.edu +36 -1 @@ -15194,21 +16933,6 @@ ChangeSet@1.1301, 2005-09-17 00:45:06-04:00, stenn@pogo.udel.edu +14 -0 sntp/m4/libopts.m4@1.4, 2005-09-12 17:12:47-04:00, stenn@pogo.udel.edu +0 -0 Rename: sntp/libopts.m4 -> sntp/m4/libopts.m4 - sntp/libopts/proto.h@1.3, 2005-09-17 00:40:05-04:00, stenn@pogo.udel.edu +1 -10 - libopts upgrade - - sntp/libopts/text_mmap.c@1.3, 2005-09-17 00:40:05-04:00, stenn@pogo.udel.edu +74 -33 - libopts upgrade - - sntp/libopts/autoopts/usage-txt.h@1.3, 2005-09-11 23:12:25-04:00, stenn@pogo.udel.edu +0 -0 - Change mode to -rw-r--r-- - - sntp/libopts/autoopts/usage-txt.h@1.2, 2005-09-11 23:09:56-04:00, stenn@pogo.udel.edu +1 -1 - libopts updates - - sntp/Makefile.am@1.9, 2005-09-17 00:39:46-04:00, stenn@pogo.udel.edu +1 -1 - libopts upgrade - sntp/sntp-opts.def@1.2, 2005-09-17 00:39:47-04:00, stenn@pogo.udel.edu +2 -0 libopts upgrade @@ -15473,6 +17197,33 @@ ChangeSet@1.1251.51.2, 2005-09-15 01:59:15-04:00, stenn@whimsy.udel.edu +10 -0 ChangeSet@1.1298, 2005-09-11 22:43:01-04:00, stenn@pogo.udel.edu +35 -0 libopts updates + build@1.22, 2005-09-11 22:40:14-04:00, stenn@pogo.udel.edu +6 -0 + libopts updates + + m4/libopts.m4@1.7, 2005-09-11 22:41:00-04:00, stenn@pogo.udel.edu +79 -55 + libopts updates + + ntpd/Makefile.am@1.43, 2005-09-11 22:41:01-04:00, stenn@pogo.udel.edu +1 -1 + libopts updates + + ntpd/ntpd-opts.def@1.2, 2005-09-11 22:41:03-04:00, stenn@pogo.udel.edu +1 -0 + libopts updates + + ntpd/ntpdsim-opts.def@1.2, 2005-09-11 22:41:03-04:00, stenn@pogo.udel.edu +1 -0 + libopts updates + + ntpdc/ntpdc-opts.def@1.5, 2005-09-11 22:41:07-04:00, stenn@pogo.udel.edu +1 -0 + libopts updates + + ntpq/ntpq-opts.def@1.4, 2005-09-11 22:41:08-04:00, stenn@pogo.udel.edu +1 -0 + libopts updates + + sntp/configure.ac@1.10, 2005-09-11 22:41:15-04:00, stenn@pogo.udel.edu +3 -2 + libopts updates + + sntp/libopts.m4@1.3, 2005-09-11 22:41:15-04:00, stenn@pogo.udel.edu +79 -55 + libopts updates + sntp/libopts/MakeDefs.inc@1.2, 2005-09-11 22:41:16-04:00, stenn@pogo.udel.edu +0 -5 libopts updates @@ -15485,6 +17236,9 @@ ChangeSet@1.1298, 2005-09-11 22:43:01-04:00, stenn@pogo.udel.edu +35 -0 sntp/libopts/autoopts.h@1.2, 2005-09-11 22:41:16-04:00, stenn@pogo.udel.edu +3 -5 libopts updates + sntp/libopts/autoopts/options.h@1.2, 2005-09-11 22:41:18-04:00, stenn@pogo.udel.edu +4 -4 + libopts updates + sntp/libopts/boolean.c@1.2, 2005-09-11 22:41:16-04:00, stenn@pogo.udel.edu +1 -1 libopts updates @@ -15503,12 +17257,6 @@ ChangeSet@1.1298, 2005-09-11 22:43:01-04:00, stenn@pogo.udel.edu +35 -0 sntp/libopts/libopts.m4@1.2, 2005-09-11 22:41:17-04:00, stenn@pogo.udel.edu +83 -56 libopts updates - m4/libopts.m4@1.7, 2005-09-11 22:41:00-04:00, stenn@pogo.udel.edu +79 -55 - libopts updates - - sntp/libopts.m4@1.3, 2005-09-11 22:41:15-04:00, stenn@pogo.udel.edu +79 -55 - libopts updates - sntp/libopts/load.c@1.2, 2005-09-11 22:41:17-04:00, stenn@pogo.udel.edu +14 -10 libopts updates @@ -15521,9 +17269,6 @@ ChangeSet@1.1298, 2005-09-11 22:43:01-04:00, stenn@pogo.udel.edu +35 -0 sntp/libopts/numeric.c@1.2, 2005-09-11 22:41:17-04:00, stenn@pogo.udel.edu +1 -1 libopts updates - sntp/libopts/autoopts/options.h@1.2, 2005-09-11 22:41:18-04:00, stenn@pogo.udel.edu +4 -4 - libopts updates - sntp/libopts/pgusage.c@1.2, 2005-09-11 22:41:17-04:00, stenn@pogo.udel.edu +1 -1 libopts updates @@ -15557,27 +17302,6 @@ ChangeSet@1.1298, 2005-09-11 22:43:01-04:00, stenn@pogo.udel.edu +35 -0 sntp/libopts/version.c@1.2, 2005-09-11 22:41:18-04:00, stenn@pogo.udel.edu +1 -1 libopts updates - build@1.22, 2005-09-11 22:40:14-04:00, stenn@pogo.udel.edu +6 -0 - libopts updates - - ntpd/Makefile.am@1.43, 2005-09-11 22:41:01-04:00, stenn@pogo.udel.edu +1 -1 - libopts updates - - ntpd/ntpd-opts.def@1.2, 2005-09-11 22:41:03-04:00, stenn@pogo.udel.edu +1 -0 - libopts updates - - ntpd/ntpdsim-opts.def@1.2, 2005-09-11 22:41:03-04:00, stenn@pogo.udel.edu +1 -0 - libopts updates - - ntpdc/ntpdc-opts.def@1.5, 2005-09-11 22:41:07-04:00, stenn@pogo.udel.edu +1 -0 - libopts updates - - ntpq/ntpq-opts.def@1.4, 2005-09-11 22:41:08-04:00, stenn@pogo.udel.edu +1 -0 - libopts updates - - sntp/configure.ac@1.10, 2005-09-11 22:41:15-04:00, stenn@pogo.udel.edu +3 -2 - libopts updates - ChangeSet@1.1251.50.1, 2005-09-06 22:16:23-04:00, mayer@pogo.udel.edu +1 -0 Revamped the input_handler code to separate the reading of packets from the selection process and logic @@ -15715,21 +17439,21 @@ ChangeSet@1.1251.38.31, 2005-08-28 15:49:21-04:00, mayer@pogo.udel.edu +1 -0 ChangeSet@1.1295, 2005-08-28 04:51:03-04:00, stenn@pogo.udel.edu +5 -0 libopts cleanup - m4/libopts.m4@1.6, 2005-08-28 04:49:38-04:00, stenn@pogo.udel.edu +8 -5 - libopts cleanup - - sntp/libopts.m4@1.2, 2005-08-28 04:49:51-04:00, stenn@pogo.udel.edu +8 -5 - libopts cleanup - Makefile.am@1.54, 2005-08-28 04:48:59-04:00, stenn@pogo.udel.edu +0 -2 libopts cleanup configure.ac@1.374, 2005-08-28 04:49:00-04:00, stenn@pogo.udel.edu +1 -1 libopts cleanup + m4/libopts.m4@1.6, 2005-08-28 04:49:38-04:00, stenn@pogo.udel.edu +8 -5 + libopts cleanup + sntp/Makefile.am@1.8, 2005-08-28 04:49:50-04:00, stenn@pogo.udel.edu +0 -1 libopts cleanup + sntp/libopts.m4@1.2, 2005-08-28 04:49:51-04:00, stenn@pogo.udel.edu +8 -5 + libopts cleanup + ChangeSet@1.1251.48.3, 2005-08-28 08:37:28+00:00, kardel@pogo.udel.edu +1 -0 ntp_io.c: more enum cleanup @@ -15792,17 +17516,6 @@ ChangeSet@1.1251.38.26, 2005-08-26 09:17:19-04:00, mayer@pogo.udel.edu +1 -0 ChangeSet@1.1293, 2005-08-26 04:40:05-04:00, stenn@pogo.udel.edu +9 -0 autogen stuff - m4/libopts.m4@1.5, 2005-08-26 04:38:44-04:00, stenn@pogo.udel.edu +1 -1 - changes for 1 copy of libopts - - m4/libopts.m4@1.4, 2005-08-26 04:20:13-04:00, stenn@pogo.udel.edu +147 -94 - new libopts stuff - - sntp/libopts.m4@1.1, 2005-08-26 04:20:29-04:00, stenn@pogo.udel.edu +418 -0 - - sntp/libopts.m4@1.0, 2005-08-26 04:20:29-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts.m4 - BitKeeper/etc/ignore@1.44, 2005-08-26 04:39:02-04:00, stenn@pogo.udel.edu +40 -48 Update the ignore list @@ -15827,6 +17540,12 @@ ChangeSet@1.1293, 2005-08-26 04:40:05-04:00, stenn@pogo.udel.edu +9 -0 configure.ac@1.373, 2005-08-26 04:20:13-04:00, stenn@pogo.udel.edu +0 -1 new libopts stuff + m4/libopts.m4@1.5, 2005-08-26 04:38:44-04:00, stenn@pogo.udel.edu +1 -1 + changes for 1 copy of libopts + + m4/libopts.m4@1.4, 2005-08-26 04:20:13-04:00, stenn@pogo.udel.edu +147 -94 + new libopts stuff + ntpd/ntpd-opts.def@1.1, 2005-08-26 04:18:41-04:00, stenn@pogo.udel.edu +42 -0 ntpd/ntpd-opts.def@1.0, 2005-08-26 04:18:41-04:00, stenn@pogo.udel.edu +0 -0 @@ -15842,6 +17561,11 @@ ChangeSet@1.1293, 2005-08-26 04:40:05-04:00, stenn@pogo.udel.edu +9 -0 ntpd/ntpdsim-opts.def@1.0, 2005-08-26 04:18:41-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/ntpd/ntpdsim-opts.def + sntp/libopts.m4@1.1, 2005-08-26 04:20:29-04:00, stenn@pogo.udel.edu +418 -0 + + sntp/libopts.m4@1.0, 2005-08-26 04:20:29-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts.m4 + sntp/sntp-opts.def@1.1, 2005-08-26 04:18:42-04:00, stenn@pogo.udel.edu +388 -0 sntp/sntp-opts.def@1.0, 2005-08-26 04:18:42-04:00, stenn@pogo.udel.edu +0 -0 @@ -15885,6 +17609,16 @@ ChangeSet@1.1292, 2005-08-26 04:17:32-04:00, stenn@pogo.udel.edu +36 -0 sntp/libopts/autoopts.h@1.0, 2005-08-26 04:16:19-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts/autoopts.h + sntp/libopts/autoopts/options.h@1.1, 2005-08-26 04:16:29-04:00, stenn@pogo.udel.edu +864 -0 + + sntp/libopts/autoopts/options.h@1.0, 2005-08-26 04:16:29-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts/autoopts/options.h + + sntp/libopts/autoopts/usage-txt.h@1.1, 2005-08-26 04:16:29-04:00, stenn@pogo.udel.edu +479 -0 + + sntp/libopts/autoopts/usage-txt.h@1.0, 2005-08-26 04:16:29-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts/autoopts/usage-txt.h + sntp/libopts/boolean.c@1.1, 2005-08-26 04:16:19-04:00, stenn@pogo.udel.edu +102 -0 sntp/libopts/boolean.c@1.0, 2005-08-26 04:16:19-04:00, stenn@pogo.udel.edu +0 -0 @@ -15895,6 +17629,11 @@ ChangeSet@1.1292, 2005-08-26 04:17:32-04:00, stenn@pogo.udel.edu +36 -0 sntp/libopts/compat/compat.h@1.0, 2005-08-26 04:16:36-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts/compat/compat.h + sntp/libopts/compat/pathfind.c@1.1, 2005-08-26 04:16:36-04:00, stenn@pogo.udel.edu +330 -0 + + sntp/libopts/compat/pathfind.c@1.0, 2005-08-26 04:16:36-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts/compat/pathfind.c + sntp/libopts/configfile.c@1.1, 2005-08-26 04:16:19-04:00, stenn@pogo.udel.edu +1277 -0 sntp/libopts/configfile.c@1.0, 2005-08-26 04:16:19-04:00, stenn@pogo.udel.edu +0 -0 @@ -15955,16 +17694,6 @@ ChangeSet@1.1292, 2005-08-26 04:17:32-04:00, stenn@pogo.udel.edu +36 -0 sntp/libopts/numeric.c@1.0, 2005-08-26 04:16:20-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts/numeric.c - sntp/libopts/autoopts/options.h@1.1, 2005-08-26 04:16:29-04:00, stenn@pogo.udel.edu +864 -0 - - sntp/libopts/autoopts/options.h@1.0, 2005-08-26 04:16:29-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts/autoopts/options.h - - sntp/libopts/compat/pathfind.c@1.1, 2005-08-26 04:16:36-04:00, stenn@pogo.udel.edu +330 -0 - - sntp/libopts/compat/pathfind.c@1.0, 2005-08-26 04:16:36-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts/compat/pathfind.c - sntp/libopts/pgusage.c@1.1, 2005-08-26 04:16:20-04:00, stenn@pogo.udel.edu +154 -0 sntp/libopts/pgusage.c@1.0, 2005-08-26 04:16:20-04:00, stenn@pogo.udel.edu +0 -0 @@ -16015,11 +17744,6 @@ ChangeSet@1.1292, 2005-08-26 04:17:32-04:00, stenn@pogo.udel.edu +36 -0 sntp/libopts/tokenize.c@1.0, 2005-08-26 04:16:20-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts/tokenize.c - sntp/libopts/autoopts/usage-txt.h@1.1, 2005-08-26 04:16:29-04:00, stenn@pogo.udel.edu +479 -0 - - sntp/libopts/autoopts/usage-txt.h@1.0, 2005-08-26 04:16:29-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/sntp/libopts/autoopts/usage-txt.h - sntp/libopts/usage.c@1.1, 2005-08-26 04:16:21-04:00, stenn@pogo.udel.edu +651 -0 sntp/libopts/usage.c@1.0, 2005-08-26 04:16:21-04:00, stenn@pogo.udel.edu +0 -0 @@ -16781,6 +18505,9 @@ ChangeSet@1.1251.42.9, 2005-08-09 17:02:19-04:00, stenn@whimsy.udel.edu +5 -0 ChangeSet@1.1285, 2005-08-08 02:53:55-04:00, stenn@pogo.udel.edu +18 -0 autogen update and more conversion + include/ntpd.h@1.78.2.1, 2005-08-08 02:52:58-04:00, stenn@pogo.udel.edu +0 -1 + autogen update and more conversion + libopts/INSTALL@1.2, 2005-08-08 02:53:06-04:00, stenn@pogo.udel.edu +8 -3 autogen update and more conversion @@ -16805,9 +18532,6 @@ ChangeSet@1.1285, 2005-08-08 02:53:55-04:00, stenn@pogo.udel.edu +18 -0 libopts/m4/missing@1.2, 2005-08-08 02:53:12-04:00, stenn@pogo.udel.edu +10 -6 autogen update and more conversion - include/ntpd.h@1.78.2.1, 2005-08-08 02:52:58-04:00, stenn@pogo.udel.edu +0 -1 - autogen update and more conversion - ntpd/Makefile.am@1.42, 2005-08-08 02:53:13-04:00, stenn@pogo.udel.edu +37 -6 autogen update and more conversion @@ -17273,11 +18997,22 @@ ChangeSet@1.1251.38.3, 2005-07-16 17:29:55-04:00, mayer@pogo.udel.edu +1 -0 ChangeSet@1.1283, 2005-07-04 04:15:16-04:00, stenn@pogo.udel.edu +86 -0 New libopts + Makefile.am@1.51, 2005-07-04 04:09:28-04:00, stenn@pogo.udel.edu +2 -2 + Cleanup + + configure.ac@1.371, 2005-07-04 04:09:29-04:00, stenn@pogo.udel.edu +2 -0 + Cleanup + libopts/AUTHORS@1.1, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +2 -0 libopts/AUTHORS@1.0, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/AUTHORS + libopts/COPYING@1.1, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +502 -0 + + libopts/COPYING@1.0, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/COPYING + libopts/COPYING.lgpl@1.1, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +502 -0 libopts/COPYING.lgpl@1.0, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +0 -0 @@ -17288,11 +19023,6 @@ ChangeSet@1.1283, 2005-07-04 04:15:16-04:00, stenn@pogo.udel.edu +86 -0 libopts/COPYING.mbsd@1.0, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/COPYING.mbsd - libopts/COPYING@1.1, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +502 -0 - - libopts/COPYING@1.0, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/COPYING - libopts/ChangeLog@1.1, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +4 -0 libopts/ChangeLog@1.0, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +0 -0 @@ -17308,11 +19038,6 @@ ChangeSet@1.1283, 2005-07-04 04:15:16-04:00, stenn@pogo.udel.edu +86 -0 libopts/MakeDefs.inc@1.0, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/MakeDefs.inc - libopts/libopts/Makefile.am@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +12 -0 - - libopts/libopts/Makefile.am@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/Makefile.am - libopts/Makefile.am@1.1, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +4 -0 libopts/Makefile.am@1.0, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +0 -0 @@ -17338,25 +19063,20 @@ ChangeSet@1.1283, 2005-07-04 04:15:16-04:00, stenn@pogo.udel.edu +86 -0 libopts/autoopts.c@1.0, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/autoopts.c - libopts/libopts/autoopts.c@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +1033 -0 - - libopts/libopts/autoopts.c@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/autoopts.c - - libopts/libopts/autoopts.h@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +337 -0 - - libopts/libopts/autoopts.h@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/autoopts.h - libopts/autoopts.h@1.1, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +337 -0 libopts/autoopts.h@1.0, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/autoopts.h - libopts/libopts/boolean.c@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +102 -0 + libopts/autoopts/options.h@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +864 -0 - libopts/libopts/boolean.c@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/boolean.c + libopts/autoopts/options.h@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/autoopts/options.h + + libopts/autoopts/usage-txt.h@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +479 -0 + + libopts/autoopts/usage-txt.h@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/autoopts/usage-txt.h libopts/boolean.c@1.1, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +102 -0 @@ -17373,10 +19093,10 @@ ChangeSet@1.1283, 2005-07-04 04:15:16-04:00, stenn@pogo.udel.edu +86 -0 libopts/compat/compat.h@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/compat/compat.h - libopts/m4/compile@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +142 -0 + libopts/compat/pathfind.c@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +332 -0 - libopts/m4/compile@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/compile + libopts/compat/pathfind.c@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/compat/pathfind.c libopts/config-h.in@1.1, 2005-07-04 04:10:36-04:00, stenn@pogo.udel.edu +140 -0 @@ -17388,56 +19108,26 @@ ChangeSet@1.1283, 2005-07-04 04:15:16-04:00, stenn@pogo.udel.edu +86 -0 libopts/config-h.in~@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/config-h.in~ - libopts/m4/config.guess@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +1495 -0 - - libopts/m4/config.guess@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/config.guess - - libopts/m4/config.sub@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +1570 -0 - - libopts/m4/config.sub@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/config.sub - - libopts/libopts/configfile.c@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +1282 -0 - - libopts/libopts/configfile.c@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/configfile.c - libopts/configfile.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +1282 -0 libopts/configfile.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/configfile.c - libopts/configure.ac@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +54 -0 - - libopts/configure.ac@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/configure.ac - libopts/configure@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +23905 -0 libopts/configure@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/configure + libopts/configure.ac@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +54 -0 + + libopts/configure.ac@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/configure.ac + libopts/cook.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +355 -0 libopts/cook.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/cook.c - libopts/libopts/cook.c@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +355 -0 - - libopts/libopts/cook.c@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/cook.c - - libopts/m4/depcomp@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +522 -0 - - libopts/m4/depcomp@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/depcomp - - libopts/libopts/enumeration.c@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +449 -0 - - libopts/libopts/enumeration.c@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/enumeration.c - libopts/enumeration.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +449 -0 libopts/enumeration.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 @@ -17448,6 +19138,61 @@ ChangeSet@1.1283, 2005-07-04 04:15:16-04:00, stenn@pogo.udel.edu +86 -0 libopts/environment.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/environment.c + libopts/genshell.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +300 -0 + + libopts/genshell.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/genshell.c + + libopts/genshell.h@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +143 -0 + + libopts/genshell.h@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/genshell.h + + libopts/libopts.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +29 -0 + + libopts/libopts.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts.c + + libopts/libopts.m4@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +387 -0 + + libopts/libopts.m4@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts.m4 + + libopts/libopts/Makefile.am@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +12 -0 + + libopts/libopts/Makefile.am@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/Makefile.am + + libopts/libopts/autoopts.c@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +1033 -0 + + libopts/libopts/autoopts.c@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/autoopts.c + + libopts/libopts/autoopts.h@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +337 -0 + + libopts/libopts/autoopts.h@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/autoopts.h + + libopts/libopts/boolean.c@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +102 -0 + + libopts/libopts/boolean.c@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/boolean.c + + libopts/libopts/configfile.c@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +1282 -0 + + libopts/libopts/configfile.c@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/configfile.c + + libopts/libopts/cook.c@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +355 -0 + + libopts/libopts/cook.c@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/cook.c + + libopts/libopts/enumeration.c@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +449 -0 + + libopts/libopts/enumeration.c@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/enumeration.c + libopts/libopts/environment.c@1.1, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +261 -0 libopts/libopts/environment.c@1.0, 2005-07-04 04:12:37-04:00, stenn@pogo.udel.edu +0 -0 @@ -17458,151 +19203,56 @@ ChangeSet@1.1283, 2005-07-04 04:15:16-04:00, stenn@pogo.udel.edu +86 -0 libopts/libopts/genshell.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/genshell.c - libopts/genshell.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +300 -0 - - libopts/genshell.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/genshell.c - libopts/libopts/genshell.h@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +143 -0 libopts/libopts/genshell.h@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/genshell.h - libopts/genshell.h@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +143 -0 - - libopts/genshell.h@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/genshell.h - - libopts/m4/install-sh@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +323 -0 - - libopts/m4/install-sh@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/install-sh - - libopts/libopts.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +29 -0 - - libopts/libopts.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts.c - libopts/libopts/libopts.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +29 -0 libopts/libopts/libopts.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/libopts.c - libopts/libopts.m4@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +387 -0 - - libopts/libopts.m4@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts.m4 - - libopts/m4/libopts.m4@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +331 -0 - - libopts/m4/libopts.m4@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/libopts.m4 - libopts/libopts/load.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +470 -0 libopts/libopts/load.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/load.c - libopts/load.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +470 -0 - - libopts/load.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/load.c - - libopts/m4/ltmain.sh@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +6500 -0 - - libopts/m4/ltmain.sh@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/ltmain.sh - libopts/libopts/makeshell.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +1100 -0 libopts/libopts/makeshell.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/makeshell.c - libopts/makeshell.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +1100 -0 - - libopts/makeshell.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/makeshell.c - - libopts/m4/missing@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +353 -0 - - libopts/m4/missing@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/missing - libopts/libopts/nested.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +707 -0 libopts/libopts/nested.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/nested.c - libopts/nested.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +707 -0 - - libopts/nested.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/nested.c - - libopts/numeric.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +89 -0 - - libopts/numeric.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/numeric.c - libopts/libopts/numeric.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +89 -0 libopts/libopts/numeric.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/numeric.c - libopts/autoopts/options.h@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +864 -0 - - libopts/autoopts/options.h@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/autoopts/options.h - - libopts/compat/pathfind.c@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +332 -0 - - libopts/compat/pathfind.c@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/compat/pathfind.c - libopts/libopts/pgusage.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +154 -0 libopts/libopts/pgusage.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/pgusage.c - libopts/pgusage.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +154 -0 - - libopts/pgusage.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/pgusage.c - libopts/libopts/proto.h@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +124 -0 libopts/libopts/proto.h@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/proto.h - libopts/proto.h@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +124 -0 - - libopts/proto.h@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/proto.h - libopts/libopts/putshell.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +333 -0 libopts/libopts/putshell.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/putshell.c - libopts/putshell.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +333 -0 - - libopts/putshell.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/putshell.c - libopts/libopts/restore.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +207 -0 libopts/libopts/restore.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/restore.c - libopts/restore.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +207 -0 - - libopts/restore.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/restore.c - - libopts/save.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +499 -0 - - libopts/save.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/save.c - libopts/libopts/save.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +499 -0 libopts/libopts/save.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 @@ -17613,16 +19263,6 @@ ChangeSet@1.1283, 2005-07-04 04:15:16-04:00, stenn@pogo.udel.edu +86 -0 libopts/libopts/sort.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/sort.c - libopts/sort.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +369 -0 - - libopts/sort.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/sort.c - - libopts/stack.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +224 -0 - - libopts/stack.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/stack.c - libopts/libopts/stack.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +224 -0 libopts/libopts/stack.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 @@ -17633,41 +19273,16 @@ ChangeSet@1.1283, 2005-07-04 04:15:16-04:00, stenn@pogo.udel.edu +86 -0 libopts/libopts/streqvcmp.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/streqvcmp.c - libopts/streqvcmp.c@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +292 -0 - - libopts/streqvcmp.c@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/streqvcmp.c - libopts/libopts/text_mmap.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +312 -0 libopts/libopts/text_mmap.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/text_mmap.c - libopts/text_mmap.c@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +312 -0 - - libopts/text_mmap.c@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/text_mmap.c - - libopts/tokenize.c@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +322 -0 - - libopts/tokenize.c@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/tokenize.c - libopts/libopts/tokenize.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +322 -0 libopts/libopts/tokenize.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/tokenize.c - libopts/autoopts/usage-txt.h@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +479 -0 - - libopts/autoopts/usage-txt.h@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/autoopts/usage-txt.h - - libopts/usage.c@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +651 -0 - - libopts/usage.c@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/usage.c - libopts/libopts/usage.c@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +651 -0 libopts/libopts/usage.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 @@ -17678,17 +19293,126 @@ ChangeSet@1.1283, 2005-07-04 04:15:16-04:00, stenn@pogo.udel.edu +86 -0 libopts/libopts/version.c@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts/version.c + libopts/load.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +470 -0 + + libopts/load.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/load.c + + libopts/m4/compile@1.1, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +142 -0 + + libopts/m4/compile@1.0, 2005-07-04 04:12:38-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/compile + + libopts/m4/config.guess@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +1495 -0 + + libopts/m4/config.guess@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/config.guess + + libopts/m4/config.sub@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +1570 -0 + + libopts/m4/config.sub@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/config.sub + + libopts/m4/depcomp@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +522 -0 + + libopts/m4/depcomp@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/depcomp + + libopts/m4/install-sh@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +323 -0 + + libopts/m4/install-sh@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/install-sh + + libopts/m4/libopts.m4@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +331 -0 + + libopts/m4/libopts.m4@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/libopts.m4 + + libopts/m4/ltmain.sh@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +6500 -0 + + libopts/m4/ltmain.sh@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/ltmain.sh + + libopts/m4/missing@1.1, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +353 -0 + + libopts/m4/missing@1.0, 2005-07-04 04:12:39-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/m4/missing + + libopts/makeshell.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +1100 -0 + + libopts/makeshell.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/makeshell.c + + libopts/nested.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +707 -0 + + libopts/nested.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/nested.c + + libopts/numeric.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +89 -0 + + libopts/numeric.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/numeric.c + + libopts/pgusage.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +154 -0 + + libopts/pgusage.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/pgusage.c + + libopts/proto.h@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +124 -0 + + libopts/proto.h@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/proto.h + + libopts/putshell.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +333 -0 + + libopts/putshell.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/putshell.c + + libopts/restore.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +207 -0 + + libopts/restore.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/restore.c + + libopts/save.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +499 -0 + + libopts/save.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/save.c + + libopts/sort.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +369 -0 + + libopts/sort.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/sort.c + + libopts/stack.c@1.1, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +224 -0 + + libopts/stack.c@1.0, 2005-07-04 04:10:37-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/stack.c + + libopts/streqvcmp.c@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +292 -0 + + libopts/streqvcmp.c@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/streqvcmp.c + + libopts/text_mmap.c@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +312 -0 + + libopts/text_mmap.c@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/text_mmap.c + + libopts/tokenize.c@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +322 -0 + + libopts/tokenize.c@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/tokenize.c + + libopts/usage.c@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +651 -0 + + libopts/usage.c@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/usage.c + libopts/version.c@1.1, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +177 -0 libopts/version.c@1.0, 2005-07-04 04:10:38-04:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/version.c - Makefile.am@1.51, 2005-07-04 04:09:28-04:00, stenn@pogo.udel.edu +2 -2 - Cleanup - - configure.ac@1.371, 2005-07-04 04:09:29-04:00, stenn@pogo.udel.edu +2 -0 - Cleanup - ntpdc/ntpdc-opts.def@1.3, 2005-07-04 04:09:16-04:00, stenn@pogo.udel.edu +22 -7 Cleanup @@ -18178,6 +19902,15 @@ ChangeSet@1.1251.26.12, 2005-05-21 10:53:09+00:00, kardel@pogo.udel.edu +39 -0 libntp/binio.c@1.5, 2005-05-21 10:29:41+00:00, kardel@pogo.udel.edu +3 -3 copyright maintenance + libntp/gpstolfp.c@1.7, 2005-05-21 10:29:41+00:00, kardel@pogo.udel.edu +6 -3 + copyright maintenance + + libntp/ieee754io.c@1.7, 2005-05-21 10:29:42+00:00, kardel@pogo.udel.edu +6 -3 + copyright maintenance + + libntp/mfp_mul.c@1.5, 2005-05-21 10:29:42+00:00, kardel@pogo.udel.edu +6 -3 + copyright maintenance + libparse/clk_computime.c@1.8, 2005-05-21 10:22:58+00:00, kardel@pogo.udel.edu +6 -3 copyright maintenance @@ -18214,18 +19947,9 @@ ChangeSet@1.1251.26.12, 2005-05-21 10:53:09+00:00, kardel@pogo.udel.edu +39 -0 libparse/data_mbg.c@1.5, 2005-05-21 10:22:59+00:00, kardel@pogo.udel.edu +6 -3 copyright maintenance - libntp/gpstolfp.c@1.7, 2005-05-21 10:29:41+00:00, kardel@pogo.udel.edu +6 -3 - copyright maintenance - - libntp/ieee754io.c@1.7, 2005-05-21 10:29:42+00:00, kardel@pogo.udel.edu +6 -3 - copyright maintenance - libparse/info_trimble.c@1.4, 2005-05-21 10:22:59+00:00, kardel@pogo.udel.edu +6 -4 copyright maintenance - libntp/mfp_mul.c@1.5, 2005-05-21 10:29:42+00:00, kardel@pogo.udel.edu +6 -3 - copyright maintenance - libparse/parse.c@1.10, 2005-05-21 10:22:59+00:00, kardel@pogo.udel.edu +7 -4 copyright maintenance @@ -18258,15 +19982,15 @@ ChangeSet@1.1251.26.12, 2005-05-21 10:53:09+00:00, kardel@pogo.udel.edu +39 -0 ChangeSet@1.1251.26.11, 2005-05-18 05:36:08-04:00, stenn@whimsy.udel.edu +3 -0 [Bug 408] fix based on proposed patch from cipo - ntpq/ntpq_ops.c@1.20.2.1, 2005-05-18 05:35:39-04:00, stenn@whimsy.udel.edu +1 -1 - [Bug 408] fix based on proposed patch from cipo - ntpq/ntpq.c@1.55.1.2, 2005-05-18 05:35:39-04:00, stenn@whimsy.udel.edu +10 -4 [Bug 408] fix based on proposed patch from cipo ntpq/ntpq.h@1.5, 2005-05-18 05:35:39-04:00, stenn@whimsy.udel.edu +1 -1 [Bug 408] fix based on proposed patch from cipo + ntpq/ntpq_ops.c@1.20.2.1, 2005-05-18 05:35:39-04:00, stenn@whimsy.udel.edu +1 -1 + [Bug 408] fix based on proposed patch from cipo + ChangeSet@1.1251.26.10, 2005-05-17 01:17:18-04:00, stenn@whimsy.udel.edu +6 -0 Stuff from Dave Mills @@ -19160,12 +20884,12 @@ ChangeSet@1.1251.1.61, 2005-01-11 16:02:59-05:00, mayer@pogo.udel.edu +1 -0 ChangeSet@1.1261, 2005-01-10 04:19:21-05:00, stenn@pogo.udel.edu +2 -0 fixes - m4/libopts.m4@1.3, 2005-01-10 04:18:45-05:00, stenn@pogo.udel.edu +2 -5 - fix from bkorb - configure.ac@1.364, 2005-01-10 04:19:11-05:00, stenn@pogo.udel.edu +7 -0 disable shared libraries on OSF4.0 + m4/libopts.m4@1.3, 2005-01-10 04:18:45-05:00, stenn@pogo.udel.edu +2 -5 + fix from bkorb + ChangeSet@1.1260, 2005-01-09 06:23:02-05:00, stenn@pogo.udel.edu +27 -0 autogen-5.6.5 @@ -19184,6 +20908,9 @@ ChangeSet@1.1260, 2005-01-09 06:23:02-05:00, stenn@pogo.udel.edu +27 -0 libopts/compat/compat.h@1.2, 2005-01-09 06:19:27-05:00, stenn@pogo.udel.edu +1 -1 autogen-5.6.5 + libopts/compat/pathfind.c@1.2, 2005-01-09 06:19:27-05:00, stenn@pogo.udel.edu +2 -2 + autogen-5.6.5 + libopts/enumeration.c@1.2, 2005-01-09 06:18:14-05:00, stenn@pogo.udel.edu +1 -1 autogen-5.6.5 @@ -19196,9 +20923,6 @@ ChangeSet@1.1260, 2005-01-09 06:23:02-05:00, stenn@pogo.udel.edu +27 -0 libopts/genshell.h@1.2, 2005-01-09 06:22:16-05:00, stenn@pogo.udel.edu +1 -1 autogen-5.6.5 - m4/libopts.m4@1.2, 2005-01-09 06:18:07-05:00, stenn@pogo.udel.edu +2 -29 - autogen-5.6.5 - libopts/libopts.m4@1.2, 2005-01-09 06:18:14-05:00, stenn@pogo.udel.edu +2 -29 autogen-5.6.5 @@ -19214,9 +20938,6 @@ ChangeSet@1.1260, 2005-01-09 06:23:02-05:00, stenn@pogo.udel.edu +27 -0 libopts/options.h@1.2, 2005-01-09 06:22:17-05:00, stenn@pogo.udel.edu +3 -3 autogen-5.6.5 - libopts/compat/pathfind.c@1.2, 2005-01-09 06:19:27-05:00, stenn@pogo.udel.edu +2 -2 - autogen-5.6.5 - libopts/pgusage.c@1.2, 2005-01-09 06:18:14-05:00, stenn@pogo.udel.edu +1 -1 autogen-5.6.5 @@ -19250,6 +20971,9 @@ ChangeSet@1.1260, 2005-01-09 06:23:02-05:00, stenn@pogo.udel.edu +27 -0 libopts/version.c@1.2, 2005-01-09 06:18:15-05:00, stenn@pogo.udel.edu +1 -1 autogen-5.6.5 + m4/libopts.m4@1.2, 2005-01-09 06:18:07-05:00, stenn@pogo.udel.edu +2 -29 + autogen-5.6.5 + ChangeSet@1.1251.7.31, 2005-01-09 02:05:42-05:00, stenn@whimsy.udel.edu +1 -0 Happy New Year @@ -19397,6 +21121,9 @@ ChangeSet@1.1255, 2004-12-30 19:47:48-05:00, stenn@pogo.udel.edu +4 -0 ChangeSet@1.1253, 2004-12-30 17:53:32-05:00, stenn@pogo.udel.edu +39 -0 AutoOpts conversion - starting with ntpq + Makefile.am@1.49, 2004-12-30 17:50:45-05:00, stenn@pogo.udel.edu +8 -1 + AutoOpts conversion + libopts/COPYING.lgpl@1.1, 2004-12-30 17:52:50-05:00, stenn@pogo.udel.edu +504 -0 libopts/COPYING.lgpl@1.0, 2004-12-30 17:52:50-05:00, stenn@pogo.udel.edu +0 -0 @@ -19447,6 +21174,11 @@ ChangeSet@1.1253, 2004-12-30 17:53:32-05:00, stenn@pogo.udel.edu +39 -0 libopts/compat/compat.h@1.0, 2004-12-30 17:52:51-05:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/compat/compat.h + libopts/compat/pathfind.c@1.1, 2004-12-30 17:52:51-05:00, stenn@pogo.udel.edu +278 -0 + + libopts/compat/pathfind.c@1.0, 2004-12-30 17:52:51-05:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/compat/pathfind.c + libopts/enumeration.c@1.1, 2004-12-30 17:52:50-05:00, stenn@pogo.udel.edu +448 -0 libopts/enumeration.c@1.0, 2004-12-30 17:52:50-05:00, stenn@pogo.udel.edu +0 -0 @@ -19472,11 +21204,6 @@ ChangeSet@1.1253, 2004-12-30 17:53:32-05:00, stenn@pogo.udel.edu +39 -0 libopts/libopts.c@1.0, 2004-12-30 17:52:50-05:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/libopts.c - m4/libopts.m4@1.1, 2004-12-30 17:51:53-05:00, stenn@pogo.udel.edu +395 -0 - - m4/libopts.m4@1.0, 2004-12-30 17:51:53-05:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/m4/libopts.m4 - libopts/libopts.m4@1.1, 2004-12-30 17:52:50-05:00, stenn@pogo.udel.edu +395 -0 libopts/libopts.m4@1.0, 2004-12-30 17:52:50-05:00, stenn@pogo.udel.edu +0 -0 @@ -19502,11 +21229,6 @@ ChangeSet@1.1253, 2004-12-30 17:53:32-05:00, stenn@pogo.udel.edu +39 -0 libopts/options.h@1.0, 2004-12-30 17:52:50-05:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/options.h - libopts/compat/pathfind.c@1.1, 2004-12-30 17:52:51-05:00, stenn@pogo.udel.edu +278 -0 - - libopts/compat/pathfind.c@1.0, 2004-12-30 17:52:51-05:00, stenn@pogo.udel.edu +0 -0 - BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/compat/pathfind.c - libopts/pgusage.c@1.1, 2004-12-30 17:52:50-05:00, stenn@pogo.udel.edu +156 -0 libopts/pgusage.c@1.0, 2004-12-30 17:52:50-05:00, stenn@pogo.udel.edu +0 -0 @@ -19572,8 +21294,10 @@ ChangeSet@1.1253, 2004-12-30 17:53:32-05:00, stenn@pogo.udel.edu +39 -0 libopts/version.c@1.0, 2004-12-30 17:52:51-05:00, stenn@pogo.udel.edu +0 -0 BitKeeper file /pogo/users/stenn/ntp-dev-ag/libopts/version.c - Makefile.am@1.49, 2004-12-30 17:50:45-05:00, stenn@pogo.udel.edu +8 -1 - AutoOpts conversion + m4/libopts.m4@1.1, 2004-12-30 17:51:53-05:00, stenn@pogo.udel.edu +395 -0 + + m4/libopts.m4@1.0, 2004-12-30 17:51:53-05:00, stenn@pogo.udel.edu +0 -0 + BitKeeper file /pogo/users/stenn/ntp-dev-ag/m4/libopts.m4 ntpq/Makefile.am@1.11.1.1, 2004-12-30 17:51:34-05:00, stenn@pogo.udel.edu +18 -4 AutoOpts conversion @@ -20066,10 +21790,10 @@ ChangeSet@1.1251.1.33, 2004-11-30 05:20:17-05:00, stenn@pogo.udel.edu +16 -0 ntpdc/ntpdc_ops.c@1.38, 2004-11-30 05:18:53-05:00, stenn@pogo.udel.edu +0 -1 netdb.h cleanup - ntpq/ntpq_ops.c@1.20.1.2, 2004-11-30 05:18:54-05:00, stenn@pogo.udel.edu +0 -1 + ntpq/ntpq.c@1.53, 2004-11-30 05:18:54-05:00, stenn@pogo.udel.edu +0 -1 netdb.h cleanup - ntpq/ntpq.c@1.53, 2004-11-30 05:18:54-05:00, stenn@pogo.udel.edu +0 -1 + ntpq/ntpq_ops.c@1.20.1.2, 2004-11-30 05:18:54-05:00, stenn@pogo.udel.edu +0 -1 netdb.h cleanup ChangeSet@1.1251.6.1, 2004-11-29 22:45:56-05:00, stenn@pogo.udel.edu +1 -0 @@ -20230,18 +21954,27 @@ ChangeSet@1.1251.4.1, 2004-11-19 03:04:35-05:00, stenn@whimsy.udel.edu +46 -0 kernel/sys/parsestreams.h@1.5, 2004-11-19 03:03:00-05:00, stenn@whimsy.udel.edu +1 -1 [Bug 341] Patches from Frank Kardel + libntp/binio.c@1.4, 2004-11-19 03:03:02-05:00, stenn@whimsy.udel.edu +29 -2 + [Bug 341] Patches from Frank Kardel + libntp/buftvtots.c@1.4, 2004-11-19 03:03:02-05:00, stenn@whimsy.udel.edu +12 -83 [Bug 341] Patches from Frank Kardel + libntp/gpstolfp.c@1.6, 2004-11-19 03:03:04-05:00, stenn@whimsy.udel.edu +34 -2 + [Bug 341] Patches from Frank Kardel + + libntp/ieee754io.c@1.6, 2004-11-19 03:03:04-05:00, stenn@whimsy.udel.edu +34 -2 + [Bug 341] Patches from Frank Kardel + + libntp/mfp_mul.c@1.4, 2004-11-19 03:03:05-05:00, stenn@whimsy.udel.edu +34 -2 + [Bug 341] Patches from Frank Kardel + libntp/mktime.c@1.8, 2004-11-19 03:03:05-05:00, stenn@whimsy.udel.edu +0 -1 [Bug 341] Patches from Frank Kardel libparse/README@1.3, 2004-11-19 03:03:08-05:00, stenn@whimsy.udel.edu +2 -2 [Bug 341] Patches from Frank Kardel - libntp/binio.c@1.4, 2004-11-19 03:03:02-05:00, stenn@whimsy.udel.edu +29 -2 - [Bug 341] Patches from Frank Kardel - libparse/clk_computime.c@1.7, 2004-11-19 03:03:08-05:00, stenn@whimsy.udel.edu +32 -9 [Bug 341] Patches from Frank Kardel @@ -20278,18 +22011,9 @@ ChangeSet@1.1251.4.1, 2004-11-19 03:04:35-05:00, stenn@whimsy.udel.edu +46 -0 libparse/data_mbg.c@1.4, 2004-11-19 03:03:10-05:00, stenn@whimsy.udel.edu +32 -2 [Bug 341] Patches from Frank Kardel - libntp/gpstolfp.c@1.6, 2004-11-19 03:03:04-05:00, stenn@whimsy.udel.edu +34 -2 - [Bug 341] Patches from Frank Kardel - - libntp/ieee754io.c@1.6, 2004-11-19 03:03:04-05:00, stenn@whimsy.udel.edu +34 -2 - [Bug 341] Patches from Frank Kardel - libparse/info_trimble.c@1.3, 2004-11-19 03:03:10-05:00, stenn@whimsy.udel.edu +0 -2 [Bug 341] Patches from Frank Kardel - libntp/mfp_mul.c@1.4, 2004-11-19 03:03:05-05:00, stenn@whimsy.udel.edu +34 -2 - [Bug 341] Patches from Frank Kardel - libparse/parse.c@1.9, 2004-11-19 03:03:10-05:00, stenn@whimsy.udel.edu +35 -9 [Bug 341] Patches from Frank Kardel @@ -20557,15 +22281,15 @@ ChangeSet@1.1249.1.9, 2004-11-04 00:03:35-05:00, mayer@tecotoo. +6 -0 ntpdc/ntpdc_ops.c@1.37, 2004-11-04 00:02:42-05:00, mayer@tecotoo. +21 -21 Prefix constants with NTP_ to avoid collisions with VS.NET - ntpq/ntpq_ops.c@1.20.1.1, 2004-11-04 00:03:09-05:00, mayer@tecotoo. +17 -17 - Prefix constants with NTP_ to avoid collisions with VS.NET - ntpq/ntpq.c@1.50, 2004-11-04 00:03:08-05:00, mayer@tecotoo. +18 -17 Prefix constants with NTP_ to avoid collisions with VS.NET ntpq/ntpq.h@1.4, 2004-11-04 00:03:08-05:00, mayer@tecotoo. +10 -7 Prefix constants with NTP_ to avoid collisions with VS.NET + ntpq/ntpq_ops.c@1.20.1.1, 2004-11-04 00:03:09-05:00, mayer@tecotoo. +17 -17 + Prefix constants with NTP_ to avoid collisions with VS.NET + ChangeSet@1.1202.1.47, 2004-11-03 02:43:58-05:00, stenn@pogo.udel.edu +2 -0 autogen @@ -20635,10 +22359,10 @@ ChangeSet@1.1249.1.3, 2004-11-02 23:07:27-05:00, mayer@tecotoo. +1 -0 ChangeSet@1.1249.1.2, 2004-11-02 23:05:22-05:00, mayer@tecotoo. +3 -0 Remove unnecessary time variable references - libntp/ranny.c@1.3, 2004-11-02 23:04:56-05:00, mayer@tecotoo. +0 -2 + libntp/mktime.c@1.7, 2004-11-02 23:04:56-05:00, mayer@tecotoo. +3 -5 Remove unnecessary time variable references - libntp/mktime.c@1.7, 2004-11-02 23:04:56-05:00, mayer@tecotoo. +3 -5 + libntp/ranny.c@1.3, 2004-11-02 23:04:56-05:00, mayer@tecotoo. +0 -2 Remove unnecessary time variable references ports/winnt/ntpd/nt_clockstuff.c@1.14, 2004-11-02 23:04:57-05:00, mayer@tecotoo. +25 -27 @@ -20746,14 +22470,14 @@ ChangeSet@1.1202.6.1, 2004-10-28 20:49:19-04:00, mayer@pogo.udel.edu +2 -0 ChangeSet@1.1202.5.6, 2004-10-27 19:52:51-04:00, stenn@whimsy.udel.edu +6 -0 Updates from Dave Mills + html/copyright.html@1.28, 2004-10-27 19:52:28-04:00, stenn@whimsy.udel.edu +2 -2 + Updates from Dave Mills + html/drivers/footer.txt@1.1, 2004-10-27 19:50:59-04:00, stenn@whimsy.udel.edu +7 -0 html/drivers/footer.txt@1.0, 2004-10-27 19:50:59-04:00, stenn@whimsy.udel.edu +0 -0 BitKeeper file /deacon/backroom/ntp-dev/html/drivers/footer.txt - html/copyright.html@1.28, 2004-10-27 19:52:28-04:00, stenn@whimsy.udel.edu +2 -2 - Updates from Dave Mills - html/drivers/tf582_4.html@1.1, 2004-10-27 19:50:59-04:00, stenn@whimsy.udel.edu +72 -0 html/drivers/tf582_4.html@1.0, 2004-10-27 19:50:59-04:00, stenn@whimsy.udel.edu +0 -0 @@ -21783,10 +23507,10 @@ ChangeSet@1.1152.34.1, 2004-04-11 18:53:56+01:00, mbrett@rgs16.fordson.demon.co. ntpdc/ntpdc_ops.c@1.29.1.1, 2004-04-11 18:51:44+01:00, mbrett@rgs16.fordson.demon.co.uk +17 -17 Changes for type-paranoid MIPSpro compiler. - ntpq/ntpq_ops.c@1.20, 2004-04-11 18:52:47+01:00, mbrett@rgs16.fordson.demon.co.uk +1 -1 + ntpq/ntpq.c@1.45.1.1, 2004-04-11 18:52:43+01:00, mbrett@rgs16.fordson.demon.co.uk +2 -2 Changes for type-paranoid MIPSpro compiler. - ntpq/ntpq.c@1.45.1.1, 2004-04-11 18:52:43+01:00, mbrett@rgs16.fordson.demon.co.uk +2 -2 + ntpq/ntpq_ops.c@1.20, 2004-04-11 18:52:47+01:00, mbrett@rgs16.fordson.demon.co.uk +1 -1 Changes for type-paranoid MIPSpro compiler. ChangeSet@1.1178.1.4, 2004-04-07 20:45:38-04:00, stenn@whimsy.udel.edu +1 -0 @@ -22003,12 +23727,6 @@ ChangeSet@1.1152.31.5, 2004-03-25 21:17:21-05:00, stenn@whimsy.udel.edu +1 -0 ChangeSet@1.1152.31.4, 2004-03-25 21:13:54-05:00, stenn@whimsy.udel.edu +46 -0 Documentation cleanup/resync with Dave. - html/drivers/driver23.html@1.12, 2004-03-25 21:12:21-05:00, stenn@whimsy.udel.edu +2 -2 - Documentation cleanup/resync with Dave. - - html/drivers/driver24.html@1.9, 2004-03-25 21:12:21-05:00, stenn@whimsy.udel.edu +2 -2 - Documentation cleanup/resync with Dave. - html/build/build.html@1.20, 2004-03-25 21:12:17-05:00, stenn@whimsy.udel.edu +12 -12 Documentation cleanup/resync with Dave. @@ -22066,6 +23784,12 @@ ChangeSet@1.1152.31.4, 2004-03-25 21:13:54-05:00, stenn@whimsy.udel.edu +46 -0 html/drivers/driver22.html@1.15, 2004-03-25 21:12:21-05:00, stenn@whimsy.udel.edu +2 -2 Documentation cleanup/resync with Dave. + html/drivers/driver23.html@1.12, 2004-03-25 21:12:21-05:00, stenn@whimsy.udel.edu +2 -2 + Documentation cleanup/resync with Dave. + + html/drivers/driver24.html@1.9, 2004-03-25 21:12:21-05:00, stenn@whimsy.udel.edu +2 -2 + Documentation cleanup/resync with Dave. + html/drivers/driver26.html@1.9, 2004-03-25 21:12:22-05:00, stenn@whimsy.udel.edu +2 -2 Documentation cleanup/resync with Dave. @@ -23010,9 +24734,15 @@ ChangeSet@1.1152.15.5, 2003-12-25 18:46:06-05:00, mayer@tecotoo.myibg.com +1 -0 ChangeSet@1.1152.14.9, 2003-12-24 00:41:50-05:00, stenn@whimsy.udel.edu +4 -0 Cleanups, fix [Bug 320] + Makefile.am@1.45, 2003-12-24 00:38:57-05:00, stenn@whimsy.udel.edu +1 -1 + [Bug 230] Require automake-1.8. + acinclude.m4@1.12, 2003-12-24 00:39:20-05:00, stenn@whimsy.udel.edu +2 -2 Quote auto* stuff properly. + configure.in@1.336.1.1, 2003-12-24 00:40:35-05:00, stenn@whimsy.udel.edu +5 -4 + Require autoconf-2.58. Use version.m4. Cleanup. + version.m4@1.2, 2003-12-24 00:40:05-05:00, stenn@whimsy.udel.edu +1 -1 4.2.0a @@ -23021,12 +24751,6 @@ ChangeSet@1.1152.14.9, 2003-12-24 00:41:50-05:00, stenn@whimsy.udel.edu +4 -0 version.m4@1.0, 2003-12-24 00:10:17-05:00, stenn@whimsy.udel.edu +0 -0 BitKeeper file /backroom/ntp-stable/version.m4 - Makefile.am@1.45, 2003-12-24 00:38:57-05:00, stenn@whimsy.udel.edu +1 -1 - [Bug 230] Require automake-1.8. - - configure.in@1.336.1.1, 2003-12-24 00:40:35-05:00, stenn@whimsy.udel.edu +5 -4 - Require autoconf-2.58. Use version.m4. Cleanup. - ChangeSet@1.1152.14.8, 2003-12-20 20:28:35-05:00, stenn@whimsy.udel.edu +2 -0 [Bug 259] Marc Brett: lint @@ -23530,10 +25254,10 @@ ChangeSet@1.1152.8.1, 2003-10-22 11:13:33-04:00, blu@corwin. +2 -0 ntpq_ops.c, ntpq.c: Change formatting for multiple servers and add assID for multiple association output. - ntpq/ntpq_ops.c@1.19, 2003-10-22 11:12:55-04:00, blu@corwin. +38 -4 + ntpq/ntpq.c@1.44, 2003-10-22 11:12:09-04:00, blu@corwin. +2 -0 Change formatting for multiple servers and add assID for multiple association output. - ntpq/ntpq.c@1.44, 2003-10-22 11:12:09-04:00, blu@corwin. +2 -0 + ntpq/ntpq_ops.c@1.19, 2003-10-22 11:12:55-04:00, blu@corwin. +38 -4 Change formatting for multiple servers and add assID for multiple association output. ChangeSet@1.1152.1.13, 2003-10-22 13:16:39+02:00, peda@sectra.se +1 -0 diff --git a/contrib/ntp/Makefile.in b/contrib/ntp/Makefile.in index beb62007edc..42b2e2e79db 100644 --- a/contrib/ntp/Makefile.in +++ b/contrib/ntp/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -13,15 +14,12 @@ # PARTICULAR PURPOSE. @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = . +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -36,11 +34,11 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @NEED_LIBOPTS_TRUE@am__append_1 = libopts +subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/configure ChangeLog INSTALL NEWS TODO compile \ config.guess config.sub depcomp install-sh ltmain.sh missing -subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/libopts/m4/libopts.m4 \ $(top_srcdir)/m4/define_dir.m4 \ @@ -50,34 +48,64 @@ am__aclocal_m4_deps = $(top_srcdir)/libopts/m4/libopts.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno configure.status.lineno + configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -93,10 +121,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -109,11 +133,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -127,6 +150,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -140,8 +164,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -151,6 +174,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -164,16 +188,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -185,29 +204,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ #AUTOMAKE_OPTIONS = util/ansi2knr foreign dist-tarZ no-dependencies AUTOMAKE_OPTIONS = util/ansi2knr foreign 1.8 @@ -299,15 +330,15 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ - cd $(srcdir) && $(AUTOMAKE) --foreign \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -323,21 +354,22 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) + $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ - $(MAKE) stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ @@ -351,8 +383,7 @@ clean-libtool: -rm -rf .libs _libs distclean-libtool: - -rm -f libtool -uninstall-info-am: + -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -378,15 +409,14 @@ $(RECURSIVE_TARGETS): else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -413,16 +443,16 @@ maintainer-clean-recursive: else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -430,14 +460,14 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -449,84 +479,103 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) - mkdir $(distdir) - $(mkdir_p) $(distdir)/libopts/m4 $(distdir)/m4 $(distdir)/ntpdc $(distdir)/scripts - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ @@ -534,11 +583,12 @@ distdir: $(DISTFILES) $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) @@ -547,6 +597,14 @@ dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) @@ -573,6 +631,10 @@ distcheck: dist GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ @@ -584,9 +646,11 @@ distcheck: dist mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && cd $(distdir)/_build \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ @@ -608,13 +672,15 @@ distcheck: dist && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: - @cd $(distuninstallcheck_dir) \ + @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ @@ -658,6 +724,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -680,18 +747,38 @@ dvi-am: html: html-recursive +html-am: + info: info-recursive info-am: install-data-am: +install-dvi: install-dvi-recursive + +install-dvi-am: + install-exec-am: +install-html: install-html-recursive + +install-html-am: + install-info: install-info-recursive +install-info-am: + install-man: +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -712,24 +799,27 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-strip \ + tags-recursive -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ - check-am clean clean-generic clean-libtool clean-recursive \ - ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ - dist-hook dist-shar dist-tarZ dist-zip distcheck distclean \ - distclean-generic distclean-hdr distclean-libtool \ - distclean-recursive distclean-tags distcleancheck distdir \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-generic \ + clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ + dist-gzip dist-hook dist-lzma dist-shar dist-tarZ dist-xz \ + dist-zip distcheck distclean distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ - maintainer-clean-recursive mostlyclean mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ - tags tags-recursive uninstall uninstall-am uninstall-info-am + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am tags tags-recursive uninstall uninstall-am $(srcdir)/COPYRIGHT: $(srcdir)/html/copyright.html @@ -803,6 +893,7 @@ FRC.CommitLog FRC.distwarn FRC.checkcvo FRC.checkhost FRC.version: # HMS: what was I trying to do with this? #dot.emacs: FRC.distwarn + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/NEWS b/contrib/ntp/NEWS index 6290fb5b202..729a91f0f7a 100644 --- a/contrib/ntp/NEWS +++ b/contrib/ntp/NEWS @@ -1,3 +1,91 @@ +NTP 4.2.4p8 (Harlan Stenn , 2009/12/08) + +Focus: Security Fixes + +Severity: HIGH + +This release fixes the following high-severity vulnerability: + +* [Sec 1331] DoS with mode 7 packets - CVE-2009-3563. + + See http://support.ntp.org/security for more information. + + NTP mode 7 (MODE_PRIVATE) is used by the ntpdc query and control utility. + In contrast, ntpq uses NTP mode 6 (MODE_CONTROL), while routine NTP time + transfers use modes 1 through 5. Upon receipt of an incorrect mode 7 + request or a mode 7 error response from an address which is not listed + in a "restrict ... noquery" or "restrict ... ignore" statement, ntpd will + reply with a mode 7 error response (and log a message). In this case: + + * If an attacker spoofs the source address of ntpd host A in a + mode 7 response packet sent to ntpd host B, both A and B will + continuously send each other error responses, for as long as + those packets get through. + + * If an attacker spoofs an address of ntpd host A in a mode 7 + response packet sent to ntpd host A, A will respond to itself + endlessly, consuming CPU and logging excessively. + + Credit for finding this vulnerability goes to Robin Park and Dmitri + Vinokurov of Alcatel-Lucent. + +THIS IS A STRONGLY RECOMMENDED UPGRADE. + +--- +NTP 4.2.4p7 (Harlan Stenn , 2009/05/04) + +Focus: Security and Bug Fixes + +Severity: HIGH + +This release fixes the following high-severity vulnerability: + +* [Sec 1151] Remote exploit if autokey is enabled. CVE-2009-1252 + + See http://support.ntp.org/security for more information. + + If autokey is enabled (if ntp.conf contains a "crypto pw whatever" + line) then a carefully crafted packet sent to the machine will cause + a buffer overflow and possible execution of injected code, running + with the privileges of the ntpd process (often root). + + Credit for finding this vulnerability goes to Chris Ries of CMU. + +This release fixes the following low-severity vulnerabilities: + +* [Sec 1144] limited (two byte) buffer overflow in ntpq. CVE-2009-0159 + Credit for finding this vulnerability goes to Geoff Keating of Apple. + +* [Sec 1149] use SO_EXCLUSIVEADDRUSE on Windows + Credit for finding this issue goes to Dave Hart. + +This release fixes a number of bugs and adds some improvements: + +* Improved logging +* Fix many compiler warnings +* Many fixes and improvements for Windows +* Adds support for AIX 6.1 +* Resolves some issues under MacOS X and Solaris + +THIS IS A STRONGLY RECOMMENDED UPGRADE. + +--- +NTP 4.2.4p6 (Harlan Stenn , 2009/01/07) + +Focus: Security Fix + +Severity: Low + +This release fixes oCERT.org's CVE-2009-0021, a vulnerability affecting +the OpenSSL library relating to the incorrect checking of the return +value of EVP_VerifyFinal function. + +Credit for finding this issue goes to the Google Security Team for +finding the original issue with OpenSSL, and to ocert.org for finding +the problem in NTP and telling us about it. + +This is a recommended upgrade. +--- NTP 4.2.4p5 (Harlan Stenn , 2008/08/17) Focus: Minor Bugfixes diff --git a/contrib/ntp/README b/contrib/ntp/README index daa85824e94..dde61e269ad 100644 --- a/contrib/ntp/README +++ b/contrib/ntp/README @@ -1,7 +1,7 @@ Submit patches, bug reports, and enhancement requests via - http://bugs.ntp.isc.org + http://bugs.ntp.org The ntp Distribution Base Directory diff --git a/contrib/ntp/README.bk b/contrib/ntp/README.bk index dc867b52ecf..8d8b2961eda 100644 --- a/contrib/ntp/README.bk +++ b/contrib/ntp/README.bk @@ -1,6 +1,6 @@ In order to use the BitKeeper repository version of NTP you should visit - http://ntp.isc.org/Main/SoftwareDevelopment + http://support.ntp.org/Main/SoftwareDevelopment for important information. diff --git a/contrib/ntp/README.patches b/contrib/ntp/README.patches index 476bc69a151..f4cf755ae6c 100644 --- a/contrib/ntp/README.patches +++ b/contrib/ntp/README.patches @@ -2,7 +2,7 @@ See README.hackers for notes on coding styles. The master copy of this information can be found at: - http://ntp.isc.org/bin/view/Dev/MaintainerIssues#How_to_work_on_a_bug_using_BitKe + http://support.ntp.org/Dev/MaintainerIssues#How_to_work_on_a_bug_using_BitKe If you are going to patch both ntp-stable and ntp-dev please do it this way: diff --git a/contrib/ntp/WHERE-TO-START b/contrib/ntp/WHERE-TO-START index 0814557854b..fb96137b0ac 100644 --- a/contrib/ntp/WHERE-TO-START +++ b/contrib/ntp/WHERE-TO-START @@ -15,7 +15,7 @@ bugfixes and drivers for new and exotic radios, telephones and sundials. This distribution is normally available by anonymous ftp as the compressed tar archive ntp-.tar.gz in the pub/ntp directory on huey.udel.edu and is the version number. The current stable -and development version numbers can be found at . +and development version numbers can be found at . A considerable amount of documentation, including build instructions, configuration advice, program usage and miscellaneous information is diff --git a/contrib/ntp/aclocal.m4 b/contrib/ntp/aclocal.m4 index b90f615a0ca..69c28495dcd 100644 --- a/contrib/ntp/aclocal.m4 +++ b/contrib/ntp/aclocal.m4 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.9.6 -*- Autoconf -*- +# generated automatically by aclocal 1.11 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,6 +11,14 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # serial 47 AC_PROG_LIBTOOL @@ -6175,7 +6183,7 @@ SED=$lt_cv_path_SED AC_MSG_RESULT([$SED]) ]) -# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6185,14 +6193,31 @@ AC_MSG_RESULT([$SED]) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. -AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.9.6])]) +[AM_AUTOMAKE_VERSION([1.11])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- @@ -6249,14 +6274,14 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -6265,8 +6290,11 @@ AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE]) -AC_SUBST([$1_FALSE]) +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -6280,15 +6308,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -6316,6 +6343,7 @@ AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) @@ -6344,6 +6372,16 @@ AC_CACHE_CHECK([dependency style of $depcc], if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -6361,7 +6399,17 @@ AC_CACHE_CHECK([dependency style of $depcc], done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -6371,18 +6419,23 @@ AC_CACHE_CHECK([dependency style of $depcc], break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -6433,61 +6486,74 @@ if test "x$enable_dependency_tracking" != xno; then AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -6518,14 +6584,14 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -6542,16 +6608,20 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.58])dnl +[AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi fi # test whether we have cygpath @@ -6571,6 +6641,9 @@ m4_ifval([$2], AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl @@ -6586,8 +6659,8 @@ AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -6595,20 +6668,37 @@ AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header @@ -6619,18 +6709,19 @@ AC_PROVIDE_IFELSE([AC_PROG_CXX], # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $1 | $1:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6641,7 +6732,14 @@ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"$am_aux_dir/install-sh"} +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. @@ -6667,13 +6765,13 @@ AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -6682,7 +6780,7 @@ AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. @@ -6692,24 +6790,24 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) @@ -6717,16 +6815,51 @@ AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 6 + +# AM_PROG_CC_C_O +# -------------- +# Like AC_PROG_CC_C_O, but changed for automake. +AC_DEFUN([AM_PROG_CC_C_O], +[AC_REQUIRE([AC_PROG_CC_C_O])dnl +AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([compile])dnl +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi +dnl Make sure AC_PROG_CC is never called again, or it will override our +dnl setting of CC. +m4_define([AC_PROG_CC], + [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -6742,7 +6875,15 @@ AC_SUBST($1)]) # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " @@ -6752,7 +6893,7 @@ else fi ]) -# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6760,70 +6901,33 @@ fi # AM_PROG_MKDIR_P # --------------- -# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. -# -# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories -# created by `make install' are always world readable, even if the -# installer happens to have an overly restrictive umask (e.g. 077). -# This was a mistake. There are at least two reasons why we must not -# use `-m 0755': -# - it causes special bits like SGID to be ignored, -# - it may be too restrictive (some setups expect 775 directories). -# -# Do not use -m 0755 and let people choose whatever they expect by -# setting umask. -# -# We cannot accept any implementation of `mkdir' that recognizes `-p'. -# Some implementations (such as Solaris 8's) are not thread-safe: if a -# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' -# concurrently, both version can detect that a/ is missing, but only -# one can create it and the other will error out. Consequently we -# restrict ourselves to GNU make (using the --version option ensures -# this.) +# Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], -[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' -else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d - done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' - else - mkdir_p='$(install_sh) -d' - fi -fi -AC_SUBST([mkdir_p])]) +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -6840,7 +6944,7 @@ AC_DEFUN([_AM_SET_OPTION], # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -6848,14 +6952,14 @@ AC_DEFUN([_AM_SET_OPTIONS], AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005 +# Copyright (C) 1996, 1997, 1998, 2000, 2001, 2002, 2003, 2005, 2006 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 AC_DEFUN([AM_C_PROTOTYPES], [AC_REQUIRE([AC_C_PROTOTYPES]) @@ -6866,23 +6970,24 @@ else fi # Ensure some checks needed by ansi2knr itself. AC_REQUIRE([AC_HEADER_STDC]) -AC_CHECK_HEADERS(string.h) -AC_SUBST(U)dnl -AC_SUBST(ANSI2KNR)dnl +AC_CHECK_HEADERS([string.h]) +AC_SUBST([U])dnl +AC_SUBST([ANSI2KNR])dnl +_AM_SUBST_NOTMAKE([ANSI2KNR])dnl ]) AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_SANITY_CHECK # --------------- @@ -6891,16 +6996,29 @@ AC_DEFUN([AM_SANITY_CHECK], # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ @@ -6950,9 +7068,28 @@ dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. diff --git a/contrib/ntp/adjtimed/Makefile.in b/contrib/ntp/adjtimed/Makefile.in index 7c16debc5ae..2fde4c6d8d0 100644 --- a/contrib/ntp/adjtimed/Makefile.in +++ b/contrib/ntp/adjtimed/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -18,15 +19,12 @@ # in sbindir. Now that we offer a choice, look in the "other" installation # subdir to warn folks if there is another version there. -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -41,7 +39,6 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ ANSI2KNR = ../util/ansi2knr -bin_PROGRAMS = @MAKE_ADJTIMED@ EXTRA_PROGRAMS = adjtimed$(EXEEXT) DIST_COMMON = README $(srcdir)/../bincheck.mf $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in @@ -57,32 +54,32 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) adjtimed_SOURCES = adjtimed.c adjtimed_OBJECTS = adjtimed$U.$(OBJEXT) adjtimed_LDADD = $(LDADD) adjtimed_DEPENDENCIES = ../libntp/libntp.a -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = adjtimed.c DIST_SOURCES = adjtimed.c ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -98,10 +95,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -114,11 +107,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -132,6 +124,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -145,8 +138,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -156,6 +148,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -169,16 +162,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -190,30 +178,43 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = ../util/ansi2knr +bin_PROGRAMS = @MAKE_ADJTIMED@ AM_CPPFLAGS = -I$(top_srcdir)/include LDADD = ../libntp/libntp.a ETAGS_ARGS = Makefile.am @@ -225,14 +226,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../bincheck.mf $(am__con @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign adjtimed/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign adjtimed/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign adjtimed/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign adjtimed/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -250,37 +251,53 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - || test -f $$p1 \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list adjtimed$(EXEEXT): $(adjtimed_OBJECTS) $(adjtimed_DEPENDENCIES) @rm -f adjtimed$(EXEEXT) - $(LINK) $(adjtimed_LDFLAGS) $(adjtimed_OBJECTS) $(adjtimed_LDADD) $(LIBS) + $(LINK) $(adjtimed_OBJECTS) $(adjtimed_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -288,7 +305,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c ../util/ansi2knr: - cd ../util && $(MAKE) $(AM_MAKEFLAGS) ansi2knr + $(am__cd) ../util && $(MAKE) $(AM_MAKEFLAGS) ./ansi2knr mostlyclean-kr: -test "$U" = "" || rm -f *_.c @@ -296,22 +313,22 @@ mostlyclean-kr: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adjtimed$U.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -325,83 +342,85 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -410,7 +429,7 @@ check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -432,6 +451,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -444,7 +464,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -452,20 +472,39 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: install-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-am + +install-html-am: install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -486,19 +525,23 @@ ps: ps-am ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-info-am +uninstall-am: uninstall-binPROGRAMS + +.MAKE: ../util/ansi2knr install-am install-exec-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-exec \ - install-exec-am install-exec-hook install-info install-info-am \ - install-man install-strip installcheck installcheck-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-hook \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-kr mostlyclean-libtool pdf pdf-am ps ps-am tags \ - uninstall uninstall-am uninstall-binPROGRAMS uninstall-info-am + uninstall uninstall-am uninstall-binPROGRAMS install-exec-hook: @@ -512,6 +555,7 @@ install-exec-hook: done # + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/arlib/Makefile.in b/contrib/ntp/arlib/Makefile.in index ad2e1c496fc..590880f3fd2 100644 --- a/contrib/ntp/arlib/Makefile.in +++ b/contrib/ntp/arlib/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -16,15 +17,12 @@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = . +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -47,9 +45,10 @@ am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno configure.status.lineno + configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru @@ -61,9 +60,10 @@ PROGRAMS = $(noinst_PROGRAMS) am_example_OBJECTS = sample.$(OBJEXT) example_OBJECTS = $(am_example_OBJECTS) example_DEPENDENCIES = libares.a -DEFAULT_INCLUDES = -I. -I$(srcdir) +DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) @@ -77,16 +77,14 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ @@ -103,6 +101,7 @@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EXEEXT = @EXEEXT@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -112,12 +111,14 @@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ @@ -125,11 +126,11 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -137,24 +138,36 @@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign # ansi2knr #lib_LIBRARIES = libares.a @@ -178,15 +191,15 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ - cd $(srcdir) && $(AUTOMAKE) --foreign \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -202,9 +215,10 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) + $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) @@ -217,7 +231,7 @@ clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) example$(EXEEXT): $(example_OBJECTS) $(example_DEPENDENCIES) @rm -f example$(EXEEXT) - $(LINK) $(example_LDFLAGS) $(example_OBJECTS) $(example_LDADD) $(LIBS) + $(LINK) $(example_OBJECTS) $(example_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -229,102 +243,109 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sample.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` -uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) - mkdir $(distdir) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) @@ -333,6 +354,14 @@ dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) @@ -359,6 +388,10 @@ distcheck: dist GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ @@ -370,9 +403,11 @@ distcheck: dist mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && cd $(distdir)/_build \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ @@ -394,13 +429,15 @@ distcheck: dist && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: - @cd $(distuninstallcheck_dir) \ + @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ @@ -441,6 +478,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -463,18 +501,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -496,20 +554,26 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ - dist dist-all dist-bzip2 dist-gzip dist-shar dist-tarZ \ - dist-zip distcheck distclean distclean-compile \ - distclean-generic distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-info-am + dist dist-all dist-bzip2 dist-gzip dist-lzma dist-shar \ + dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-tags \ + distcleancheck distdir distuninstallcheck dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/ntp/arlib/aclocal.m4 b/contrib/ntp/arlib/aclocal.m4 index aef181a6ddb..fb69e8e2c0f 100644 --- a/contrib/ntp/arlib/aclocal.m4 +++ b/contrib/ntp/arlib/aclocal.m4 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.9.6 -*- Autoconf -*- +# generated automatically by aclocal 1.11 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,7 +11,15 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. -# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -21,14 +29,31 @@ # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. -AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.9.6])]) +[AM_AUTOMAKE_VERSION([1.11])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- @@ -85,14 +110,14 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -101,8 +126,11 @@ AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE]) -AC_SUBST([$1_FALSE]) +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -116,15 +144,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -152,6 +179,7 @@ AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) @@ -180,6 +208,16 @@ AC_CACHE_CHECK([dependency style of $depcc], if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -197,7 +235,17 @@ AC_CACHE_CHECK([dependency style of $depcc], done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -207,18 +255,23 @@ AC_CACHE_CHECK([dependency style of $depcc], break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -269,61 +322,74 @@ if test "x$enable_dependency_tracking" != xno; then AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -342,14 +408,14 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -366,16 +432,20 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.58])dnl +[AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi fi # test whether we have cygpath @@ -395,6 +465,9 @@ m4_ifval([$2], AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl @@ -410,8 +483,8 @@ AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -419,20 +492,37 @@ AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header @@ -443,18 +533,19 @@ AC_PROVIDE_IFELSE([AC_PROG_CXX], # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $1 | $1:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -465,7 +556,14 @@ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"$am_aux_dir/install-sh"} +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. @@ -491,13 +589,13 @@ AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -506,7 +604,7 @@ AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. @@ -516,24 +614,24 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) @@ -543,14 +641,14 @@ rm -f confinc confmf # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -566,7 +664,15 @@ AC_SUBST($1)]) # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " @@ -576,7 +682,7 @@ else fi ]) -# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -584,70 +690,33 @@ fi # AM_PROG_MKDIR_P # --------------- -# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. -# -# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories -# created by `make install' are always world readable, even if the -# installer happens to have an overly restrictive umask (e.g. 077). -# This was a mistake. There are at least two reasons why we must not -# use `-m 0755': -# - it causes special bits like SGID to be ignored, -# - it may be too restrictive (some setups expect 775 directories). -# -# Do not use -m 0755 and let people choose whatever they expect by -# setting umask. -# -# We cannot accept any implementation of `mkdir' that recognizes `-p'. -# Some implementations (such as Solaris 8's) are not thread-safe: if a -# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' -# concurrently, both version can detect that a/ is missing, but only -# one can create it and the other will error out. Consequently we -# restrict ourselves to GNU make (using the --version option ensures -# this.) +# Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], -[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' -else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d - done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' - else - mkdir_p='$(install_sh) -d' - fi -fi -AC_SUBST([mkdir_p])]) +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -664,7 +733,7 @@ AC_DEFUN([_AM_SET_OPTION], # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -674,14 +743,14 @@ AC_DEFUN([_AM_IF_OPTION], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_SANITY_CHECK # --------------- @@ -690,16 +759,29 @@ AC_DEFUN([AM_SANITY_CHECK], # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ @@ -749,9 +831,28 @@ dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. diff --git a/contrib/ntp/arlib/configure b/contrib/ntp/arlib/configure index 1ab68269311..95e8a849e7c 100755 --- a/contrib/ntp/arlib/configure +++ b/contrib/ntp/arlib/configure @@ -1,81 +1,414 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59. +# Generated by GNU Autoconf 2.65. +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# # -# Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset + setopt NO_GLOB_SUBST else - as_unset=false + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` - -# PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' @@ -83,146 +416,107 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop - s,-$,, - s,^['$as_cr_digits']*\n,, + s/-\n.*// ' >$as_me.lineno && - chmod +x $as_me.lineno || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" # Exit status is that of the last command. exit } - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln else as_ln_s='cp -p' fi -rm -f conf$$ conf$$.exe conf$$.file +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -231,38 +525,25 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - +test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` -exec 6>&1 - # # Initializations. # ac_default_prefix=/usr/local +ac_clean_files= ac_config_libobj_dir=. +LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Maximum number of lines to put in a shell here document. -# This variable seems obsolete. It should probably be removed, and -# only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= @@ -270,14 +551,111 @@ PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= +PACKAGE_URL= ac_unique_file="arlib.c" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE RANLIB ac_ct_RANLIB LIBOBJS LTLIBOBJS' +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +RANLIB +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS' + # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -300,34 +678,48 @@ x_libraries=NONE # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' +datarootdir='${prefix}/share' +datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' ac_prev= +ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" + eval $ac_prev=\$ac_option ac_prev= continue fi - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_option in + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; @@ -349,33 +741,59 @@ do --config-cache | -C) cache_file=config.cache ;; - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) + -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - eval "enable_$ac_feature=no" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "enable_$ac_feature='$ac_optarg'" ;; + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -402,6 +820,12 @@ do -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; @@ -426,13 +850,16 @@ do | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) + | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) @@ -497,6 +924,16 @@ do | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; @@ -547,26 +984,36 @@ do ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "with_$ac_package='$ac_optarg'" ;; + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/-/_/g'` - eval "with_$ac_package=no" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -586,26 +1033,25 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -614,31 +1060,36 @@ done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } + as_fn_error "missing argument to $ac_option" fi -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac -done +fi -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir do - eval ac_val=$`echo $ac_var` + eval ac_val=\$$ac_var + # Remove trailing slashes. case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -652,7 +1103,7 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -665,70 +1116,72 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_confdir=`(dirname "$0") 2>/dev/null || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then + if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 - { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias -ac_env_CC_set=${CC+set} -ac_env_CC_value=$CC -ac_cv_env_CC_set=${CC+set} -ac_cv_env_CC_value=$CC -ac_env_CFLAGS_set=${CFLAGS+set} -ac_env_CFLAGS_value=$CFLAGS -ac_cv_env_CFLAGS_set=${CFLAGS+set} -ac_cv_env_CFLAGS_value=$CFLAGS -ac_env_LDFLAGS_set=${LDFLAGS+set} -ac_env_LDFLAGS_value=$LDFLAGS -ac_cv_env_LDFLAGS_set=${LDFLAGS+set} -ac_cv_env_LDFLAGS_value=$LDFLAGS -ac_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_env_CPPFLAGS_value=$CPPFLAGS -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done # # Report the --help message. @@ -757,14 +1210,11 @@ Configuration: -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] -_ACEOF - - cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -774,18 +1224,25 @@ for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data [PREFIX/share] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --infodir=DIR info documentation [PREFIX/info] - --mandir=DIR man documentation [PREFIX/man] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -802,6 +1259,7 @@ if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build @@ -812,125 +1270,259 @@ Some influential environment variables: CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory - CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have - headers in a nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. +Report bugs to the package provider. _ACEOF +ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. - ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue ac_builddir=. -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # We are building in place. ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - cd $ac_dir - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_srcdir/configure.gnu; then - echo - $SHELL $ac_srcdir/configure.gnu --help=recursive - elif test -f $ac_srcdir/configure; then - echo - $SHELL $ac_srcdir/configure --help=recursive - elif test -f $ac_srcdir/configure.ac || - test -f $ac_srcdir/configure.in; then - echo - $ac_configure --help + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } done fi -test -n "$ac_init_help" && exit 0 +test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF +configure +generated by GNU Autoconf 2.65 -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF - exit 0 + exit fi -exec 5>config.log -cat >&5 <<_ACEOF + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_type +cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ _ACEOF +exec 5>>config.log { cat <<_ASUNAME ## --------- ## @@ -949,7 +1541,7 @@ uname -v = `(uname -v) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` @@ -961,8 +1553,9 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS } >&5 @@ -984,7 +1577,6 @@ _ACEOF ac_configure_args= ac_configure_args0= ac_configure_args1= -ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do @@ -995,13 +1587,13 @@ do -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -1017,21 +1609,19 @@ do -* ) ac_must_keep_next=true ;; esac fi - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - # Get rid of the leading space. - ac_sep=" " + as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { @@ -1044,20 +1634,35 @@ trap 'exit_status=$? _ASBOX echo # The following way of writing the cache mishandles newlines in values, -{ +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( *) - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} + esac | + sort +) echo cat <<\_ASBOX @@ -1068,22 +1673,28 @@ _ASBOX echo for ac_var in $ac_subst_vars do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## +## ------------------- ## +## File substitutions. ## +## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1095,26 +1706,26 @@ _ASBOX ## ----------- ## _ASBOX echo - sed "/^$/d" confdefs.h | sort + cat confdefs.h echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status - ' 0 +' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. @@ -1122,112 +1733,128 @@ cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do +for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -1236,48 +1863,30 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu +am__api_version='1.11' - - - - - - - - - - - - - - - - -am__api_version="1.9" ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f $ac_dir/shtool; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 -echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -1292,22 +1901,23 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -1315,7 +1925,7 @@ case $as_dir/ in # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -1325,30 +1935,43 @@ case $as_dir/ in # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is - # removed, or if the path is relative. + # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -1358,21 +1981,34 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ @@ -1382,11 +2018,8 @@ if ( # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file @@ -1395,81 +2028,206 @@ then # Ok. : else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } test "$program_prefix" != NONE && - program_transform_name="s,^,$program_prefix,;$program_transform_name" + program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && - program_transform_name="s,\$,$program_suffix,;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. # By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm conftest.sed +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi -if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" else - mkdir_p='$(install_sh) -d' + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -1479,55 +2237,59 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$AWK" && break done -echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF +SHELL = /bin/sh all: - @echo 'ac_maketemp="$(MAKE)"' + @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac rm -f conftest.make fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -1540,12 +2302,14 @@ else fi rmdir .tst 2>/dev/null -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi fi # test whether we have cygpath @@ -1588,96 +2352,6 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -install_sh=${install_sh-"$am_aux_dir/install-sh"} - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - STRIP=$ac_ct_STRIP -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" - # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. @@ -1702,10 +2376,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1715,35 +2389,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -1753,39 +2429,50 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1795,77 +2482,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi - fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1876,18 +2523,19 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. @@ -1905,24 +2553,25 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -1932,39 +2581,41 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -1974,66 +2625,78 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_CC" && break done - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi fi -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2045,112 +2708,109 @@ main () } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 - (eval $ac_link_default) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Find the output, starting from the most likely. This scheme is -# not robust to junk in `.', hence go to wildcards (a.*) only as a last -# resort. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# Be careful to initialize this variable, since it used to be cached. -# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. -ac_cv_exeext= -# b.out is created by i960 compilers. -for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) - ;; - conftest.$ac_ext ) - # This is the source file. + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - # FIXME: I believe we export ac_cv_exeext for Libtool, - # but it would be cool to find out if it's true. Does anybody - # maintain Libtool? --akim. - export ac_cv_exeext + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. break;; * ) break;; esac done +test "$ac_cv_exeext" = no && ac_cv_exeext= + else - echo "$as_me: failed program was:" >&5 + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi - +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6 -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6 - -echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -2158,38 +2818,90 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - export ac_cv_exeext break;; * ) break;; esac done else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } fi - -rm -f conftest$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2201,45 +2913,46 @@ main () } _ACEOF rm -f conftest.o conftest.obj -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2253,55 +2966,34 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no + ac_compiler_gnu=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -GCC=`test $ac_compiler_gnu = yes && echo yes` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -CFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2312,39 +3004,49 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -ac_cv_prog_cc_g=no +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -2360,18 +3062,14 @@ else CFLAGS= fi fi -echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 -echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_prog_cc_stdc=no + ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -2399,12 +3097,17 @@ static char *f (char * (*g) (char **, int), char **p, ...) /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std1 is added to get + as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ + that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; @@ -2419,205 +3122,37 @@ return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; return 0; } _ACEOF -# Don't try gcc -ansi; that turns off useful extensions and -# breaks some systems' header files. -# AIX -qlanglvl=ansi -# Ultrix and OSF/1 -std1 -# HP-UX 10.20 and later -Ae -# HP-UX older versions -Aa -D_HPUX_SOURCE -# SVR4 -Xc -D__EXTENSIONS__ -for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_stdc=$ac_arg -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg fi -rm -f conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done -rm -f conftest.$ac_ext conftest.$ac_objext +rm -f conftest.$ac_ext CC=$ac_save_CC fi - -case "x$ac_cv_prog_cc_stdc" in - x|xno) - echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6 ;; +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) - echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 - CC="$CC $ac_cv_prog_cc_stdc" ;; + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac - -# Some people use a C++ compiler to compile C. Since we use `exit', -# in C++ we need to declare it. In case someone uses the same compiler -# for both compiling C and C++ we need to have the C++ compiler decide -# the declaration of exit, since it's the most demanding environment. -cat >conftest.$ac_ext <<_ACEOF -#ifndef __cplusplus - choke me -#endif -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if test "x$ac_cv_prog_cc_c89" != xno; then : fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -2625,60 +3160,58 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" - ac_config_commands="$ac_config_commands depfiles" +ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. -echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi -echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf -# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then - enableval="$enable_dependency_tracking" +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi -fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi - - -if test "x$enable_dependency_tracking" != xno; then + if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else @@ -2688,13 +3221,12 @@ fi - depcc="$CC" am_compiler_list= -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -2719,6 +3251,11 @@ else if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -2736,7 +3273,17 @@ else done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -2746,18 +3293,23 @@ else break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -2781,13 +3333,11 @@ else fi fi -echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - -if + if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= @@ -2801,10 +3351,10 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -2814,35 +3364,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. @@ -2852,194 +3404,132 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - RANLIB=$ac_ct_RANLIB + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi else RANLIB="$ac_cv_prog_RANLIB" fi # Checks for libraries. -echo "$as_me:$LINENO: checking for gethostent" >&5 -echo $ECHO_N "checking for gethostent... $ECHO_C" >&6 -if test "${ac_cv_func_gethostent+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_fn_c_check_func "$LINENO" "gethostent" "ac_cv_func_gethostent" +if test "x$ac_cv_func_gethostent" = x""yes; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define gethostent to an innocuous variant, in case declares gethostent. - For example, HP-UX 11i declares gettimeofday. */ -#define gethostent innocuous_gethostent - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char gethostent (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef gethostent - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char gethostent (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_gethostent) || defined (__stub___gethostent) -choke me -#else -char (*f) () = gethostent; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != gethostent; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_gethostent=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_gethostent=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_gethostent" >&5 -echo "${ECHO_T}$ac_cv_func_gethostent" >&6 -if test $ac_cv_func_gethostent = yes; then - : -else - -echo "$as_me:$LINENO: checking for gethostent in -lnsl" >&5 -echo $ECHO_N "checking for gethostent in -lnsl... $ECHO_C" >&6 -if test "${ac_cv_lib_nsl_gethostent+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostent in -lnsl" >&5 +$as_echo_n "checking for gethostent in -lnsl... " >&6; } +if test "${ac_cv_lib_nsl_gethostent+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl -lsocket $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char gethostent (); int main () { -gethostent (); +return gethostent (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostent=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_nsl_gethostent=no + ac_cv_lib_nsl_gethostent=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostent" >&5 -echo "${ECHO_T}$ac_cv_lib_nsl_gethostent" >&6 -if test $ac_cv_lib_nsl_gethostent = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostent" >&5 +$as_echo "$ac_cv_lib_nsl_gethostent" >&6; } +if test "x$ac_cv_lib_nsl_gethostent" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBNSL 1 _ACEOF @@ -3050,165 +3540,47 @@ fi fi -echo "$as_me:$LINENO: checking for setsockopt" >&5 -echo $ECHO_N "checking for setsockopt... $ECHO_C" >&6 -if test "${ac_cv_func_setsockopt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_fn_c_check_func "$LINENO" "setsockopt" "ac_cv_func_setsockopt" +if test "x$ac_cv_func_setsockopt" = x""yes; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define setsockopt to an innocuous variant, in case declares setsockopt. - For example, HP-UX 11i declares gettimeofday. */ -#define setsockopt innocuous_setsockopt - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char setsockopt (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef setsockopt - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char setsockopt (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_setsockopt) || defined (__stub___setsockopt) -choke me -#else -char (*f) () = setsockopt; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != setsockopt; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_setsockopt=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_setsockopt=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_setsockopt" >&5 -echo "${ECHO_T}$ac_cv_func_setsockopt" >&6 -if test $ac_cv_func_setsockopt = yes; then - : -else - -echo "$as_me:$LINENO: checking for setsockopt in -lsocket" >&5 -echo $ECHO_N "checking for setsockopt in -lsocket... $ECHO_C" >&6 -if test "${ac_cv_lib_socket_setsockopt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 +$as_echo_n "checking for setsockopt in -lsocket... " >&6; } +if test "${ac_cv_lib_socket_setsockopt+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char setsockopt (); int main () { -setsockopt (); +return setsockopt (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_setsockopt=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_socket_setsockopt=no + ac_cv_lib_socket_setsockopt=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_socket_setsockopt" >&5 -echo "${ECHO_T}$ac_cv_lib_socket_setsockopt" >&6 -if test $ac_cv_lib_socket_setsockopt = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 +$as_echo "$ac_cv_lib_socket_setsockopt" >&6; } +if test "x$ac_cv_lib_socket_setsockopt" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBSOCKET 1 _ACEOF @@ -3219,165 +3591,47 @@ fi fi -echo "$as_me:$LINENO: checking for res_init" >&5 -echo $ECHO_N "checking for res_init... $ECHO_C" >&6 -if test "${ac_cv_func_res_init+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_fn_c_check_func "$LINENO" "res_init" "ac_cv_func_res_init" +if test "x$ac_cv_func_res_init" = x""yes; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define res_init to an innocuous variant, in case declares res_init. - For example, HP-UX 11i declares gettimeofday. */ -#define res_init innocuous_res_init - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char res_init (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef res_init - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char res_init (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_res_init) || defined (__stub___res_init) -choke me -#else -char (*f) () = res_init; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != res_init; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_res_init=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_res_init=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_res_init" >&5 -echo "${ECHO_T}$ac_cv_func_res_init" >&6 -if test $ac_cv_func_res_init = yes; then - : -else - -echo "$as_me:$LINENO: checking for res_init in -lresolv" >&5 -echo $ECHO_N "checking for res_init in -lresolv... $ECHO_C" >&6 -if test "${ac_cv_lib_resolv_res_init+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for res_init in -lresolv" >&5 +$as_echo_n "checking for res_init in -lresolv... " >&6; } +if test "${ac_cv_lib_resolv_res_init+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lresolv $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char res_init (); int main () { -res_init (); +return res_init (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_resolv_res_init=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_resolv_res_init=no + ac_cv_lib_resolv_res_init=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_resolv_res_init" >&5 -echo "${ECHO_T}$ac_cv_lib_resolv_res_init" >&6 -if test $ac_cv_lib_resolv_res_init = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_resolv_res_init" >&5 +$as_echo "$ac_cv_lib_resolv_res_init" >&6; } +if test "x$ac_cv_lib_resolv_res_init" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBRESOLV 1 _ACEOF @@ -3393,88 +3647,27 @@ fi # Checks for typedefs, structures, and compiler characteristics. -echo "$as_me:$LINENO: checking for u_int32_t" >&5 -echo $ECHO_N "checking for u_int32_t... $ECHO_C" >&6 -if test "${ac_cv_type_u_int32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - +ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" " #include #include +" +if test "x$ac_cv_type_u_int32_t" = x""yes; then : -int -main () -{ -if ((u_int32_t *) 0) - return 0; -if (sizeof (u_int32_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_u_int32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_u_int32_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_u_int32_t" >&5 -echo "${ECHO_T}$ac_cv_type_u_int32_t" >&6 -if test $ac_cv_type_u_int32_t = yes; then - : else -cat >>confdefs.h <<\_ACEOF -#define u_int32_t unsigned int -_ACEOF +$as_echo "#define u_int32_t unsigned int" >>confdefs.h fi -echo "$as_me:$LINENO: checking for name of NS address list" >&5 -echo $ECHO_N "checking for name of NS address list... $ECHO_C" >&6 -if test "${ac_cv_var_ns_addr_list+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for name of NS address list" >&5 +$as_echo_n "checking for name of NS address list... " >&6; } +if test "${ac_cv_var_ns_addr_list+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans='' # Normal -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -3489,39 +3682,11 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ans=nsaddr_list else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -# Ultrix -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + # Ultrix +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -3536,49 +3701,22 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ans=ns_list -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext case "$ans" in - '') echo "$as_me:$LINENO: result: ???" >&5 -echo "${ECHO_T}???" >&6 - { { echo "$as_me:$LINENO: error: Can't find nameserver address list in _res" >&5 -echo "$as_me: error: Can't find nameserver address list in _res" >&2;} - { (exit 1); exit 1; }; } + '') { $as_echo "$as_me:${as_lineno-$LINENO}: result: ???" >&5 +$as_echo "???" >&6; } + as_fn_error "Can't find nameserver address list in _res" "$LINENO" 5 ;; esac ac_cv_var_ns_addr_list=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_ns_addr_list" >&5 -echo "${ECHO_T}$ac_cv_var_ns_addr_list" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_ns_addr_list" >&5 +$as_echo "$ac_cv_var_ns_addr_list" >&6; } cat >>confdefs.h <<_ACEOF #define NS_ADDR_LIST $ans @@ -3587,7 +3725,7 @@ _ACEOF # Checks for library functions. - ac_config_files="$ac_config_files Makefile" +ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -3607,39 +3745,59 @@ _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. +# So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -{ +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; + ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} | + esac | + sort +) | sed ' + /^ac_cv_env_/b end t clear - : clear + :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end - /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - : end' >>confcache -if diff $cache_file confcache >/dev/null 2>&1; then :; else - if test -w $cache_file; then - test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - echo "not updating unwritable cache $cache_file" + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -3648,90 +3806,85 @@ test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; -}' -fi - # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that -# take arguments), then we branch to the quote section. Otherwise, +# take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. -cat >confdef2opt.sed <<\_ACEOF +ac_script=' +:mline +/\\$/{ + N + s,\\\n,, + b mline +} t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g +:clear +s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g +s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote -d -: quote -s,[ `~#$^&*(){}\\|;'"<>?],\\&,g -s,\[,\\&,g -s,\],\\&,g -s,\$,$$,g -p -_ACEOF -# We use echo to avoid assuming a particular line-breaking character. -# The extra dot is to prevent the shell from consuming trailing -# line-breaks from the sub-command output. A line-break within -# single-quotes doesn't work because, if this script is created in a -# platform that uses two characters for line-breaks (e.g., DOS), tr -# would break. -ac_LF_and_DOT=`echo; echo .` -DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` -rm -f confdef2opt.sed +b any +:quote +s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g +s/\[/\\&/g +s/\]/\\&/g +s/\$/$$/g +H +:any +${ + g + s/^\n// + s/\n/ /g + p +} +' +DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. - ac_i=`echo "$ac_i" | - sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Add them. - ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -3741,81 +3894,252 @@ cat >$CONFIG_STATUS <<_ACEOF debug=false ac_cs_recheck=false ac_cs_silent=false + SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset + setopt NO_GLOB_SUBST else - as_unset=false + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` - -# PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' @@ -3823,148 +4147,123 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln else as_ln_s='cp -p' fi -rm -f conf$$ conf$$.exe conf$$.file +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -3973,31 +4272,20 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -# Open the log real soon, to keep \$[0] and so on meaningful, and to +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - +# values after options handling. +ac_log=" This file was extended by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -4005,43 +4293,41 @@ generated by GNU Autoconf 2.59. Invocation command line was CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + _ACEOF +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi +config_files="$ac_config_files" +config_commands="$ac_config_commands" -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS -fi - -cat >>$CONFIG_STATUS <<\_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE Configuration files: $config_files @@ -4049,84 +4335,75 @@ $config_files Configuration commands: $config_commands -Report bugs to ." -_ACEOF +Report bugs to the package provider." -cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; - -*) + *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_option=$1 - ac_need_defaults=false;; esac case $ac_option in # Handling of the options. -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:$LINENO: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" - ac_need_defaults=false;; - --header | --heade | --head | --hea ) - $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; + --he | --h | --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; } ;; + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" ;; + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; esac shift @@ -4140,38 +4417,50 @@ if $ac_cs_silent; then fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" fi _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 -cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # -# INIT-COMMANDS section. +# INIT-COMMANDS # - AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF +# Handling of arguments. for ac_config_target in $ac_config_targets do - case "$ac_config_target" in - # Handling of arguments. - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; + case $ac_config_target in + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done + # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely @@ -4182,564 +4471,515 @@ if $ac_need_defaults; then fi # Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason to put it here, and in addition, +# simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. -# Create a temporary directory, and hook for its removal unless debugging. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. $debug || { - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 } - # Create a (secure) tmp directory for tmp files. { - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + { - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi -# -# CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@CYGPATH_W@,$CYGPATH_W,;t t -s,@PACKAGE@,$PACKAGE,;t t -s,@VERSION@,$VERSION,;t t -s,@ACLOCAL@,$ACLOCAL,;t t -s,@AUTOCONF@,$AUTOCONF,;t t -s,@AUTOMAKE@,$AUTOMAKE,;t t -s,@AUTOHEADER@,$AUTOHEADER,;t t -s,@MAKEINFO@,$MAKEINFO,;t t -s,@install_sh@,$install_sh,;t t -s,@STRIP@,$STRIP,;t t -s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t -s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t -s,@mkdir_p@,$mkdir_p,;t t -s,@AWK@,$AWK,;t t -s,@SET_MAKE@,$SET_MAKE,;t t -s,@am__leading_dot@,$am__leading_dot,;t t -s,@AMTAR@,$AMTAR,;t t -s,@am__tar@,$am__tar,;t t -s,@am__untar@,$am__untar,;t t -s,@CC@,$CC,;t t -s,@CFLAGS@,$CFLAGS,;t t -s,@LDFLAGS@,$LDFLAGS,;t t -s,@CPPFLAGS@,$CPPFLAGS,;t t -s,@ac_ct_CC@,$ac_ct_CC,;t t -s,@EXEEXT@,$EXEEXT,;t t -s,@OBJEXT@,$OBJEXT,;t t -s,@DEPDIR@,$DEPDIR,;t t -s,@am__include@,$am__include,;t t -s,@am__quote@,$am__quote,;t t -s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t -s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t -s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t -s,@CCDEPMODE@,$CCDEPMODE,;t t -s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t -s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t -s,@RANLIB@,$RANLIB,;t t -s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -CEOF - -_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat - fi +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; + +eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; esac - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || + ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # We are building in place. ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac + case $ac_mode in + :F) + # + # CONFIG_FILE + # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;t t -s,@srcdir@,$ac_srcdir,;t t -s,@abs_srcdir@,$ac_abs_srcdir,;t t -s,@top_srcdir@,$ac_top_srcdir,;t t -s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t -s,@builddir@,$ac_builddir,;t t -s,@abs_builddir@,$ac_abs_builddir,;t t -s,@top_builddir@,$ac_top_builddir,;t t -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file - else - cat $tmp/out - rm -f $tmp/out - fi +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} -# -# CONFIG_COMMANDS section. -# -for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue - ac_dest=`echo "$ac_file" | sed 's,:.*,,'` - ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_dir=`(dirname "$ac_dest") 2>/dev/null || -$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_dest" : 'X\(//\)[^/]' \| \ - X"$ac_dest" : 'X\(//\)$' \| \ - X"$ac_dest" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_dest" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; - { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 -echo "$as_me: executing $ac_dest commands" >&6;} - case $ac_dest in - depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`(dirname "$mf") 2>/dev/null || + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`(dirname "$file") 2>/dev/null || + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p $dirpart/$fdir - else - as_dir=$dirpart/$fdir - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 -echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} - { (exit 1); exit 1; }; }; } - - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" done -done +} ;; + esac -done -_ACEOF +done # for ac_tag -cat >>$CONFIG_STATUS <<\_ACEOF -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -4759,6 +4999,10 @@ if test "$no_create" != yes; then exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi diff --git a/contrib/ntp/build b/contrib/ntp/build index 4eab58e0d37..2a65d867826 100755 --- a/contrib/ntp/build +++ b/contrib/ntp/build @@ -2,13 +2,15 @@ LOGF=make.log IAM=`hostname || uname -n` +MYNAME=`IFS=. ; set $IAM ; echo $1` +SIG= case "$1" in 0.*) SIG=$1 shift CONFIG_ARGS="$@" - KEY=`sed -e q < .buildkey` + KEY=`sed -e q < .buildkey-$MYNAME` case "$SIG" in $KEY) ;; *) @@ -36,8 +38,6 @@ case "$CVO" in ;; esac -MYNAME=`IFS=. ; set $IAM ; echo $1` - case "$IAM" in *.udel.edu) BDIR=A.$MYNAME @@ -90,17 +90,33 @@ BDIR="$BDIR$KEYSUF$CCSUF" [ -f "$BDIR/.buildcvo" ] || echo $CVO > $BDIR/.buildcvo [ -f "$BDIR/.buildhost" ] || echo $IAM > $BDIR/.buildhost + cd $BDIR -( -[ -f config.status ] || ../configure $CONFIG_ARGS +# +# make sure we have a nice that works, +# +nice true && NICEB=nice +nice true || NICEB=./.nicebuild-$MYNAME-$SIG && ( + cat > .nicebuild-$MYNAME-$SIG < $LOGF 2>&1 diff --git a/contrib/ntp/clockstuff/Makefile.in b/contrib/ntp/clockstuff/Makefile.in index 4ee3a5b4488..ba4e4cdd679 100644 --- a/contrib/ntp/clockstuff/Makefile.in +++ b/contrib/ntp/clockstuff/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +15,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -37,7 +35,6 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ ANSI2KNR = ../util/ansi2knr -noinst_PROGRAMS = @PROPDELAY@ @CHUTEST@ @CLKTEST@ EXTRA_PROGRAMS = propdelay$(EXEEXT) chutest$(EXEEXT) clktest$(EXEEXT) subdir = clockstuff DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -52,6 +49,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) chutest_SOURCES = chutest.c chutest_OBJECTS = chutest$U.$(OBJEXT) @@ -62,25 +60,25 @@ clktest_DEPENDENCIES = ../libntp/libntp.a propdelay_SOURCES = propdelay.c propdelay_OBJECTS = propdelay$U.$(OBJEXT) propdelay_DEPENDENCIES = ../libntp/libntp.a -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = chutest.c clktest.c propdelay.c DIST_SOURCES = chutest.c clktest.c propdelay.c ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -96,10 +94,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -112,11 +106,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -130,6 +123,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -143,8 +137,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -154,6 +147,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -167,16 +161,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -188,32 +177,45 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ #AUTOMAKE_OPTIONS = ../ansi2knr no-dependencies AUTOMAKE_OPTIONS = ../util/ansi2knr +noinst_PROGRAMS = @PROPDELAY@ @CHUTEST@ @CLKTEST@ INCLUDES = -I$(top_srcdir)/include # We need -lm (and perhaps $(COMPAT) for propdelay, -lntp for {chu,clk}test propdelay_LDADD = -lm ../libntp/libntp.a @@ -228,14 +230,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign clockstuff/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign clockstuff/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign clockstuff/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign clockstuff/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -253,16 +255,19 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list propdelay$(EXEEXT): $(propdelay_OBJECTS) $(propdelay_DEPENDENCIES) @rm -f propdelay$(EXEEXT) - $(LINK) $(propdelay_LDFLAGS) $(propdelay_OBJECTS) $(propdelay_LDADD) $(LIBS) + $(LINK) $(propdelay_OBJECTS) $(propdelay_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -270,7 +275,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c ../util/ansi2knr: - cd ../util && $(MAKE) $(AM_MAKEFLAGS) ansi2knr + $(am__cd) ../util && $(MAKE) $(AM_MAKEFLAGS) ./ansi2knr mostlyclean-kr: -test "$U" = "" || rm -f *_.c @@ -280,22 +285,22 @@ mostlyclean-kr: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/propdelay$U.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -314,82 +319,85 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -417,6 +425,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -430,7 +439,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -438,18 +447,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -470,19 +499,23 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: ../util/ansi2knr install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-kr \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-info-am + uninstall-am #EXTRA_DIST = TAGS @@ -491,6 +524,7 @@ uninstall-am: uninstall-info-am chutest$(EXEEXT): ../libntp/libntp.a clktest$(EXEEXT): ../libntp/libntp.a + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/config.h.in b/contrib/ntp/config.h.in index c8bfb41640d..84e57fd8e8e 100644 --- a/contrib/ntp/config.h.in +++ b/contrib/ntp/config.h.in @@ -1,5 +1,8 @@ /* config.h.in. Generated from configure.ac by autoheader. */ +/* Define if building universal (internal helper macro) */ +#undef AC_APPLE_UNIVERSAL_BUILD + /* Is adjtime() accurate? */ #undef ADJTIME_IS_ACCURATE @@ -325,7 +328,7 @@ /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT -/* Can we drop root privileges? */ +/* [Can we drop root privileges?] */ #undef HAVE_DROPROOT /* Define to 1 if you have the header file. */ @@ -370,9 +373,12 @@ /* Define to 1 if you have the header file. */ #undef HAVE_IEEEFP_H -/* ISC: Use iflist_sysctl? */ +/* have iflist_sysctl? */ #undef HAVE_IFLIST_SYSCTL +/* inline keyword or macro available */ +#undef HAVE_INLINE + /* Define to 1 if the system has the type `int16_t'. */ #undef HAVE_INT16_T @@ -388,6 +394,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H +/* Do we have IPTOS support? */ +#undef HAVE_IPTOS_SUPPORT + /* Define to 1 if you have the `isfinite' function. */ #undef HAVE_ISFINITE @@ -421,18 +430,9 @@ /* Define to 1 if you have the `ld' library (-lld). */ #undef HAVE_LIBLD -/* Define to 1 if you have the `md' library (-lmd). */ -#undef HAVE_LIBMD - -/* Define to 1 if you have the `md5' library (-lmd5). */ -#undef HAVE_LIBMD5 - /* Define to 1 if you have the `mld' library (-lmld). */ #undef HAVE_LIBMLD -/* Define to 1 if you have the `nsl' library (-lnsl). */ -#undef HAVE_LIBNSL - /* Define to 1 if you have the `posix4' library (-lposix4). */ #undef HAVE_LIBPOSIX4 @@ -442,19 +442,13 @@ /* Define to 1 if you have the `rt' library (-lrt). */ #undef HAVE_LIBRT -/* Define to 1 if you have the `socket' library (-lsocket). */ -#undef HAVE_LIBSOCKET - -/* Define to 1 if you have the `syslog' library (-lsyslog). */ -#undef HAVE_LIBSYSLOG - -/* Define to 1 if you have the `xnet' library (-lxnet). */ -#undef HAVE_LIBXNET +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBSCF_H /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H -/* Do we have Linux capabilities? */ +/* [Do we have Linux capabilities?] */ #undef HAVE_LINUX_CAPABILITIES /* Define to 1 if you have the header file. */ @@ -544,6 +538,9 @@ /* Define to 1 if you have the `ntp_gettime' function. */ #undef HAVE_NTP_GETTIME +/* Do we want support for Samba's signing daemon? */ +#undef HAVE_NTP_SIGND + /* Define this if pathfind(3) works */ #undef HAVE_PATHFIND @@ -646,6 +643,9 @@ /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF +/* [Are Solaris privileges available?] */ +#undef HAVE_SOLARIS_PRIVS + /* Does struct sockaddr_storage have ss_family? */ #undef HAVE_SS_FAMILY_IN_SS @@ -691,7 +691,7 @@ /* Do we have struct ntptimeval? */ #undef HAVE_STRUCT_NTPTIMEVAL -/* Define to 1 if `time.tv_nsec' is member of `struct ntptimeval'. */ +/* Define to 1 if `time.tv_nsec' is a member of `struct ntptimeval'. */ #undef HAVE_STRUCT_NTPTIMEVAL_TIME_TV_NSEC /* Does a system header define struct ppsclockev? */ @@ -700,9 +700,6 @@ /* Do we have struct snd_size? */ #undef HAVE_STRUCT_SND_SIZE -/* Define to 1 if `sin6_scope_id' is member of `struct sockaddr_in6'. */ -#undef HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID - /* Does a system header define struct sockaddr_storage? */ #undef HAVE_STRUCT_SOCKADDR_STORAGE @@ -978,6 +975,9 @@ /* Does struct sockaddr_storage have __ss_len? */ #undef HAVE___SS_LEN_IN_SS +/* [Retry queries on _any_ DNS error?] */ +#undef IGNORE_DNS_ERRORS + /* Should we use the IRIG sawtooth filter? */ #undef IRIG_SUCKS @@ -987,30 +987,33 @@ /* ISC: do we have if_nametoindex()? */ #undef ISC_PLATFORM_HAVEIFNAMETOINDEX -/* ISC: have struct if_laddrconf? */ +/* have struct if_laddrconf? */ #undef ISC_PLATFORM_HAVEIF_LADDRCONF -/* ISC: have struct if_laddrreq? */ +/* have struct if_laddrreq? */ #undef ISC_PLATFORM_HAVEIF_LADDRREQ -/* ISC: Have struct in6_pktinfo? */ +/* have struct in6_pktinfo? */ #undef ISC_PLATFORM_HAVEIN6PKTINFO -/* ISC: Have IPv6? */ +/* have IPv6? */ #undef ISC_PLATFORM_HAVEIPV6 /* ISC: struct sockaddr as sa_len? */ #undef ISC_PLATFORM_HAVESALEN -/* ISC: Have sin6_scope_id? */ +/* have sin6_scope_id? */ #undef ISC_PLATFORM_HAVESCOPEID /* ISC: provide inet_aton() */ #undef ISC_PLATFORM_NEEDATON -/* ISC: Need in6addr_any? */ +/* missing in6addr_any? */ #undef ISC_PLATFORM_NEEDIN6ADDRANY +/* Do we need netinet6/in6.h? */ +#undef ISC_PLATFORM_NEEDNETINET6IN6H + /* ISC: provide inet_ntop() */ #undef ISC_PLATFORM_NEEDNTOP @@ -1089,6 +1092,9 @@ /* Default location of crypto key info */ #undef NTP_KEYSDIR +/* Path to sign daemon rendezvous socket */ +#undef NTP_SIGND_PATH + /* Do we have ntp_{adj,get}time in libc? */ #undef NTP_SYSCALLS_LIBC @@ -1129,6 +1135,9 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION @@ -1171,22 +1180,22 @@ /* Do we want the SCO clock hacks? */ #undef SCO5_CLOCK -/* The size of a `char*', as computed by sizeof. */ +/* The size of `char*', as computed by sizeof. */ #undef SIZEOF_CHARP -/* The size of a `int', as computed by sizeof. */ +/* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT -/* The size of a `long', as computed by sizeof. */ +/* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG -/* The size of a `short', as computed by sizeof. */ +/* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT -/* The size of a `signed char', as computed by sizeof. */ +/* The size of `signed char', as computed by sizeof. */ #undef SIZEOF_SIGNED_CHAR -/* The size of a `time_t', as computed by sizeof. */ +/* The size of `time_t', as computed by sizeof. */ #undef SIZEOF_TIME_T /* Does SIOCGIFCONF return size in the buffer? */ @@ -1249,6 +1258,28 @@ typedef unsigned int uintptr_t; /* Must we have a CTTY for fsetown? */ #undef USE_FSETOWNCTTY +/* Enable extensions on AIX 3, Interix. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# undef _GNU_SOURCE +#endif +/* Enable threading extensions on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# undef _POSIX_PTHREAD_SEMANTICS +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# undef _TANDEM_SOURCE +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# undef __EXTENSIONS__ +#endif + + /* Can we use SIGPOLL for tty IO? */ #undef USE_TTY_SIGPOLL @@ -1258,15 +1289,26 @@ typedef unsigned int uintptr_t; /* Version number of package */ #undef VERSION -/* ISC: Want IPv6? */ +/* configure --enable-ipv6 */ #undef WANT_IPV6 +/* Do we want the windows symmetric client hack? */ +#undef WINTIME + /* Define this if a working libregex can be found */ #undef WITH_LIBREGEX -/* Define to 1 if your processor stores words with the most significant byte - first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined AC_APPLE_UNIVERSAL_BUILD +# if defined __BIG_ENDIAN__ +# define WORDS_BIGENDIAN 1 +# endif +#else +# ifndef WORDS_BIGENDIAN +# undef WORDS_BIGENDIAN +# endif +#endif /* Handle ss_family */ #if !defined(HAVE_SS_FAMILY_IN_SS) && defined(HAVE___SS_FAMILY_IN_SS) @@ -1278,13 +1320,6 @@ typedef unsigned int uintptr_t; # define ss_len __ss_len #endif /* !defined(HAVE_SS_LEN_IN_SS) && defined(HAVE_SA_LEN_IN_SS) */ -/* Define to 1 if on AIX 3. - System headers sometimes define this. - We just want to avoid a redefinition error message. */ -#ifndef _ALL_SOURCE -# undef _ALL_SOURCE -#endif - /* Define to 1 if on MINIX. */ #undef _MINIX @@ -1315,10 +1350,10 @@ typedef unsigned int uintptr_t; #undef inline #endif -/* Define to `long' if does not define. */ +/* Define to `long int' if does not define. */ #undef off_t -/* Define to `unsigned' if does not define. */ +/* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `long' if does not define. */ diff --git a/contrib/ntp/configure b/contrib/ntp/configure index 03c099aad0d..fa7716da51a 100755 --- a/contrib/ntp/configure +++ b/contrib/ntp/configure @@ -1,81 +1,415 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59 for ntp 4.2.4p5. +# Generated by GNU Autoconf 2.65 for ntp 4.2.4p8. +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# # -# Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset + setopt NO_GLOB_SUBST else - as_unset=false + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` - -# PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' @@ -83,146 +417,107 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop - s,-$,, - s,^['$as_cr_digits']*\n,, + s/-\n.*// ' >$as_me.lineno && - chmod +x $as_me.lineno || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" # Exit status is that of the last command. exit } - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln else as_ln_s='cp -p' fi -rm -f conf$$ conf$$.exe conf$$.file +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -231,16 +526,6 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - - # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} @@ -391,84 +676,326 @@ fi -tagnames=${tagnames+${tagnames},}CXX - -tagnames=${tagnames+${tagnames},}F77 +test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` -exec 6>&1 - # # Initializations. # ac_default_prefix=/usr/local +ac_clean_files= ac_config_libobj_dir=. +LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Maximum number of lines to put in a shell here document. -# This variable seems obsolete. It should probably be removed, and -# only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME='ntp' PACKAGE_TARNAME='ntp' -PACKAGE_VERSION='4.2.4p5' -PACKAGE_STRING='ntp 4.2.4p5' +PACKAGE_VERSION='4.2.4p8' +PACKAGE_STRING='ntp 4.2.4p8' PACKAGE_BUGREPORT='' +PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include -#if HAVE_SYS_TYPES_H +#ifdef HAVE_SYS_TYPES_H # include #endif -#if HAVE_SYS_STAT_H +#ifdef HAVE_SYS_STAT_H # include #endif -#if STDC_HEADERS +#ifdef STDC_HEADERS # include # include #else -# if HAVE_STDLIB_H +# ifdef HAVE_STDLIB_H # include # endif #endif -#if HAVE_STRING_H -# if !STDC_HEADERS && HAVE_MEMORY_H +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif -#if HAVE_STRINGS_H +#ifdef HAVE_STRINGS_H # include #endif -#if HAVE_INTTYPES_H +#ifdef HAVE_INTTYPES_H # include -#else -# if HAVE_STDINT_H -# include -# endif #endif -#if HAVE_UNISTD_H +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H # include #endif" -ac_subdirs_all="$ac_subdirs_all arlib" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP LIBOPTS_DIR INSTALL_LIBOPTS_TRUE INSTALL_LIBOPTS_FALSE NEED_LIBOPTS_TRUE NEED_LIBOPTS_FALSE LIBOPTS_LDADD LIBOPTS_CFLAGS BINSUBDIR subdirs ARLIB_DIR LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL PATH_SH PATH_PERL READLINE_LIBS U ANSI2KNR LIBPARSE MAKE_LIBPARSE MAKE_LIBPARSE_KERNEL MAKE_CHECK_Y2K OPENSSL OPENSSL_INC OPENSSL_LIB LCRYPTO EF_PROGS EF_LIBS MAKE_CHECK_LAYOUT TESTDCF DCFD MAKE_PARSEKMODULE PROPDELAY CHUTEST CLKTEST MAKE_ADJTIMED MAKE_NTPTIME MAKE_TICKADJ MAKE_TIMETRIM MAKE_LIBNTPSIM MAKE_NTPDSIM LIBOBJS LTLIBOBJS' +enable_option_checking=no +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +LSCF +MAKE_NTPDSIM +MAKE_LIBNTPSIM +MAKE_TIMETRIM +MAKE_TICKADJ +MAKE_NTPTIME +MAKE_ADJTIMED +CLKTEST +CHUTEST +PROPDELAY +MAKE_PARSEKMODULE +DCFD +TESTDCF +MAKE_CHECK_LAYOUT +EF_LIBS +EF_PROGS +LCRYPTO +OPENSSL_LIB +OPENSSL_INC +OPENSSL +MAKE_CHECK_Y2K +MAKE_LIBPARSE_KERNEL +MAKE_LIBPARSE +LIBPARSE +HAVE_INLINE +ANSI2KNR +U +READLINE_LIBS +PATH_PERL +PATH_SH +LIBTOOL +RANLIB +AR +ECHO +LN_S +ARLIB_DIR +subdirs +BINSUBDIR +LIBOPTS_CFLAGS +LIBOPTS_LDADD +NEED_LIBOPTS_FALSE +NEED_LIBOPTS_TRUE +INSTALL_LIBOPTS_FALSE +INSTALL_LIBOPTS_TRUE +LIBOPTS_DIR +EGREP +GREP +CPP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_local_libopts +enable_libopts_install +with_autoopts_config +with_regex_header +with_libregex +with_libregex_cflags +with_libregex_libs +enable_optional_args +with_binsubdir +with_arlib +with_rpath +enable_static +enable_fast_install +with_gnu_ld +enable_libtool_lock +with_pic +with_tags +enable_getifaddrs +enable_debugging +enable_debug_timing +enable_dst_minutes +enable_ignore_dns_errors +enable_BANCOMM +enable_GPSVME +enable_all_clocks +enable_ACTS +enable_ARBITER +enable_ARCRON_MSF +enable_AS2201 +enable_ATOM +enable_CHRONOLOG +enable_CHU +enable_AUDIO_CHU +enable_DATUM +enable_DUMBCLOCK +enable_FG +enable_HEATH +enable_HOPFSERIAL +enable_HOPFPCI +enable_HPGPS +enable_IRIG +enable_JJY +enable_JUPITER +enable_LEITCH +enable_LOCAL_CLOCK +enable_MX4200 +enable_NEOCLOCK4X +enable_NMEA +enable_ONCORE +enable_PALISADE +enable_PCF +enable_PST +enable_RIPENCC +enable_SHM +enable_SPECTRACOM +enable_TPRO +enable_TRUETIME +enable_TT560 +enable_ULINK +enable_WWV +enable_ZYFER +enable_parse_clocks +enable_COMPUTIME +enable_DCF7000 +enable_HOPF6021 +enable_MEINBERG +enable_RAWDCF +enable_RCC8000 +enable_SCHMID +enable_TRIMTAIP +enable_TRIMTSIP +enable_WHARTON +enable_VARITEXT +with_openssl_libdir +with_openssl_incdir +with_crypto +with_electricfence +enable_kmem +enable_accurate_adjtime +enable_tick +enable_tickadj +enable_simulator +enable_slew_always +enable_step_slew +enable_ntpdate_step +enable_hourly_todr_sync +enable_kernel_fll_bug +enable_irig_sawtooth +enable_nist +enable_ntp_signd +enable_wintime +enable_clockctl +enable_linuxcaps +enable_ipv6 +with_kame +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' +ac_subdirs_all='arlib +sntp' # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -491,34 +1018,48 @@ x_libraries=NONE # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' +datarootdir='${prefix}/share' +datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' ac_prev= +ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" + eval $ac_prev=\$ac_option ac_prev= continue fi - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_option in + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; @@ -540,33 +1081,59 @@ do --config-cache | -C) cache_file=config.cache ;; - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) + -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - eval "enable_$ac_feature=no" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "enable_$ac_feature='$ac_optarg'" ;; + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -593,6 +1160,12 @@ do -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; @@ -617,13 +1190,16 @@ do | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) + | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) @@ -688,6 +1264,16 @@ do | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; @@ -738,26 +1324,36 @@ do ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "with_$ac_package='$ac_optarg'" ;; + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/-/_/g'` - eval "with_$ac_package=no" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -777,26 +1373,25 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -805,31 +1400,36 @@ done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } + as_fn_error "missing argument to $ac_option" fi -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac -done +fi -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir do - eval ac_val=$`echo $ac_var` + eval ac_val=\$$ac_var + # Remove trailing slashes. case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -843,7 +1443,7 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -856,94 +1456,72 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_confdir=`(dirname "$0") 2>/dev/null || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then + if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 - { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias -ac_env_CC_set=${CC+set} -ac_env_CC_value=$CC -ac_cv_env_CC_set=${CC+set} -ac_cv_env_CC_value=$CC -ac_env_CFLAGS_set=${CFLAGS+set} -ac_env_CFLAGS_value=$CFLAGS -ac_cv_env_CFLAGS_set=${CFLAGS+set} -ac_cv_env_CFLAGS_value=$CFLAGS -ac_env_LDFLAGS_set=${LDFLAGS+set} -ac_env_LDFLAGS_value=$LDFLAGS -ac_cv_env_LDFLAGS_set=${LDFLAGS+set} -ac_cv_env_LDFLAGS_value=$LDFLAGS -ac_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_env_CPPFLAGS_value=$CPPFLAGS -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_cv_env_CPPFLAGS_value=$CPPFLAGS -ac_env_CPP_set=${CPP+set} -ac_env_CPP_value=$CPP -ac_cv_env_CPP_set=${CPP+set} -ac_cv_env_CPP_value=$CPP -ac_env_CXX_set=${CXX+set} -ac_env_CXX_value=$CXX -ac_cv_env_CXX_set=${CXX+set} -ac_cv_env_CXX_value=$CXX -ac_env_CXXFLAGS_set=${CXXFLAGS+set} -ac_env_CXXFLAGS_value=$CXXFLAGS -ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} -ac_cv_env_CXXFLAGS_value=$CXXFLAGS -ac_env_CXXCPP_set=${CXXCPP+set} -ac_env_CXXCPP_value=$CXXCPP -ac_cv_env_CXXCPP_set=${CXXCPP+set} -ac_cv_env_CXXCPP_value=$CXXCPP -ac_env_F77_set=${F77+set} -ac_env_F77_value=$F77 -ac_cv_env_F77_set=${F77+set} -ac_cv_env_F77_value=$F77 -ac_env_FFLAGS_set=${FFLAGS+set} -ac_env_FFLAGS_value=$FFLAGS -ac_cv_env_FFLAGS_set=${FFLAGS+set} -ac_cv_env_FFLAGS_value=$FFLAGS +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done # # Report the --help message. @@ -952,7 +1530,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures ntp 4.2.4p5 to adapt to many kinds of systems. +\`configure' configures ntp 4.2.4p8 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -972,14 +1550,11 @@ Configuration: -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] -_ACEOF - - cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -989,18 +1564,25 @@ for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data [PREFIX/share] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --infodir=DIR info documentation [PREFIX/info] - --mandir=DIR man documentation [PREFIX/man] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/ntp] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -1018,35 +1600,34 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of ntp 4.2.4p5:";; + short | recursive ) echo "Configuration of ntp 4.2.4p8:";; esac cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=no] --enable-local-libopts Force using the supplied libopts tearoff code --disable-libopts-install Do not install libopts with client installation --disable-optional-args not wanting optional option args - --enable-clockctl s Use /dev/clockctl for non-root clock control - --enable-linuxcaps s Use Linux capabilities for non-root clock control - --enable-shared[=PKGS] - build shared libraries [default=no] - --enable-static[=PKGS] - build static libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) - --enable-getifaddrs s Enable the use of getifaddrs() [yes|no|glibc]. + --enable-getifaddrs s Enable the use of getifaddrs() [[yes|no|glibc]]. glibc: Use getifaddrs() in glibc if you know it supports IPv6. --enable-debugging + include debugging code --enable-debug-timing - include processing time debugging code (costs performance) - --enable-dst-minutes=60 + minutes per DST adjustment + --enable-dst-minutes n minutes per DST adjustment [60] + --enable-ignore-dns-errors + - retry DNS queries on any error --enable-BANCOMM - Datum/Bancomm bc635/VME interface --enable-GPSVME - TrueTime GPS receiver/VME interface --enable-all-clocks + include all suitable non-PARSE clocks: @@ -1112,6 +1693,11 @@ Optional Features: --enable-kernel-fll-bug s if we should avoid a kernel FLL bug --enable-irig-sawtooth s if we should enable the IRIG sawtooth filter --enable-nist - if we should enable the NIST lockclock scheme + --enable-ntp-signd - Provide support for Samba's signing daemon, + =/var/run/ntp_signd + --enable-wintime - Provide the windows symmetric client hack + --enable-clockctl s Use /dev/clockctl for non-root clock control + --enable-linuxcaps + Use Linux capabilities for non-root clock control --enable-ipv6 s use IPv6? Optional Packages: @@ -1128,8 +1714,7 @@ Optional Packages: --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] - --with-tags[=TAGS] - include additional configurations [automatic] + --with-tags[=TAGS] include additional configurations [automatic] --with-openssl-libdir + =/something/reasonable --with-openssl-incdir + =/something/reasonable --with-crypto + =openssl @@ -1141,133 +1726,738 @@ Some influential environment variables: CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory - CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have - headers in a nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - F77 Fortran 77 compiler command - FFLAGS Fortran 77 compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. +Report bugs to the package provider. _ACEOF +ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. - ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue ac_builddir=. -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # We are building in place. ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - cd $ac_dir - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_srcdir/configure.gnu; then - echo - $SHELL $ac_srcdir/configure.gnu --help=recursive - elif test -f $ac_srcdir/configure; then - echo - $SHELL $ac_srcdir/configure --help=recursive - elif test -f $ac_srcdir/configure.ac || - test -f $ac_srcdir/configure.in; then - echo - $ac_configure --help + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } done fi -test -n "$ac_init_help" && exit 0 +test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -ntp configure 4.2.4p5 -generated by GNU Autoconf 2.59 +ntp configure 4.2.4p8 +generated by GNU Autoconf 2.65 -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF - exit 0 + exit fi -exec 5>config.log -cat >&5 <<_ACEOF + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_type + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_member +cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by ntp $as_me 4.2.4p5, which was -generated by GNU Autoconf 2.59. Invocation command line was +It was created by ntp $as_me 4.2.4p8, which was +generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ _ACEOF +exec 5>>config.log { cat <<_ASUNAME ## --------- ## @@ -1286,7 +2476,7 @@ uname -v = `(uname -v) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` @@ -1298,8 +2488,9 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS } >&5 @@ -1321,7 +2512,6 @@ _ACEOF ac_configure_args= ac_configure_args0= ac_configure_args1= -ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do @@ -1332,13 +2522,13 @@ do -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -1354,21 +2544,19 @@ do -* ) ac_must_keep_next=true ;; esac fi - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - # Get rid of the leading space. - ac_sep=" " + as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { @@ -1381,20 +2569,35 @@ trap 'exit_status=$? _ASBOX echo # The following way of writing the cache mishandles newlines in values, -{ +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( *) - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} + esac | + sort +) echo cat <<\_ASBOX @@ -1405,22 +2608,28 @@ _ASBOX echo for ac_var in $ac_subst_vars do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## +## ------------------- ## +## File substitutions. ## +## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1432,26 +2641,26 @@ _ASBOX ## ----------- ## _ASBOX echo - sed "/^$/d" confdefs.h | sort + cat confdefs.h echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status - ' 0 +' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. @@ -1459,112 +2668,128 @@ cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do +for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -1573,56 +2798,30 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu +am__api_version='1.11' - - - - - - - - - - - - - - - - - - - - - - - - -am__api_version="1.9" ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f $ac_dir/shtool; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 -echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -1637,22 +2836,23 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -1660,7 +2860,7 @@ case $as_dir/ in # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -1670,30 +2870,43 @@ case $as_dir/ in # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is - # removed, or if the path is relative. + # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -1703,21 +2916,34 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ @@ -1727,11 +2953,8 @@ if ( # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file @@ -1740,81 +2963,206 @@ then # Ok. : else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } test "$program_prefix" != NONE && - program_transform_name="s,^,$program_prefix,;$program_transform_name" + program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && - program_transform_name="s,\$,$program_suffix,;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. # By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm conftest.sed +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi -if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" else - mkdir_p='$(install_sh) -d' + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -1824,55 +3172,59 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$AWK" && break done -echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF +SHELL = /bin/sh all: - @echo 'ac_maketemp="$(MAKE)"' + @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac rm -f conftest.make fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -1885,12 +3237,14 @@ else fi rmdir .tst 2>/dev/null -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi fi # test whether we have cygpath @@ -1905,7 +3259,7 @@ fi # Define the identity of the package. PACKAGE='ntp' - VERSION='4.2.4p5' + VERSION='4.2.4p8' cat >>confdefs.h <<_ACEOF @@ -1933,96 +3287,6 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -install_sh=${install_sh-"$am_aux_dir/install-sh"} - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - STRIP=$ac_ct_STRIP -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" - # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. @@ -2036,57 +3300,74 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' # Make sure we can run config.sub. -$ac_config_sub sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 -echo "$as_me: error: cannot run $ac_config_sub" >&2;} - { (exit 1); exit 1; }; } +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6 -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_build_alias=$build_alias -test -z "$ac_cv_build_alias" && - ac_cv_build_alias=`$ac_config_guess` -test -z "$ac_cv_build_alias" && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } -ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} - { (exit 1); exit 1; }; } + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi -echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac build=$ac_cv_build -build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6 -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_host_alias=$host_alias -test -z "$ac_cv_host_alias" && - ac_cv_host_alias=$ac_cv_build_alias -ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} - { (exit 1); exit 1; }; } + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi fi -echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac host=$ac_cv_host -host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac @@ -2094,7 +3375,7 @@ cat >>confdefs.h <<_ACEOF #define STR_SYSTEM "$host" _ACEOF - ac_config_headers="$ac_config_headers config.h" +ac_config_headers="$ac_config_headers config.h" @@ -2108,60 +3389,58 @@ iCFLAGS="$CFLAGS" DEPDIR="${am__leading_dot}deps" - ac_config_commands="$ac_config_commands depfiles" +ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. -echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi -echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf -# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then - enableval="$enable_dependency_tracking" +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi -fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi - - -if test "x$enable_dependency_tracking" != xno; then + if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else @@ -2170,7 +3449,6 @@ else fi - ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -2179,10 +3457,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2192,35 +3470,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2230,39 +3510,50 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2272,77 +3563,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi - fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2353,18 +3604,19 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. @@ -2382,24 +3634,25 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2409,39 +3662,41 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2451,66 +3706,78 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_CC" && break done - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi fi -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2522,112 +3789,109 @@ main () } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 - (eval $ac_link_default) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Find the output, starting from the most likely. This scheme is -# not robust to junk in `.', hence go to wildcards (a.*) only as a last -# resort. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# Be careful to initialize this variable, since it used to be cached. -# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. -ac_cv_exeext= -# b.out is created by i960 compilers. -for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) - ;; - conftest.$ac_ext ) - # This is the source file. + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - # FIXME: I believe we export ac_cv_exeext for Libtool, - # but it would be cool to find out if it's true. Does anybody - # maintain Libtool? --akim. - export ac_cv_exeext + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. break;; * ) break;; esac done +test "$ac_cv_exeext" = no && ac_cv_exeext= + else - echo "$as_me: failed program was:" >&5 + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi - +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6 -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6 - -echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -2635,38 +3899,90 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - export ac_cv_exeext break;; * ) break;; esac done else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } fi - -rm -f conftest$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2678,45 +3994,46 @@ main () } _ACEOF rm -f conftest.o conftest.obj -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2730,55 +4047,34 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no + ac_compiler_gnu=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -GCC=`test $ac_compiler_gnu = yes && echo yes` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -CFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2789,39 +4085,49 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -ac_cv_prog_cc_g=no +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -2837,18 +4143,14 @@ else CFLAGS= fi fi -echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 -echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_prog_cc_stdc=no + ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -2876,12 +4178,17 @@ static char *f (char * (*g) (char **, int), char **p, ...) /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std1 is added to get + as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ + that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; @@ -2896,205 +4203,37 @@ return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; return 0; } _ACEOF -# Don't try gcc -ansi; that turns off useful extensions and -# breaks some systems' header files. -# AIX -qlanglvl=ansi -# Ultrix and OSF/1 -std1 -# HP-UX 10.20 and later -Ae -# HP-UX older versions -Aa -D_HPUX_SOURCE -# SVR4 -Xc -D__EXTENSIONS__ -for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_stdc=$ac_arg -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg fi -rm -f conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done -rm -f conftest.$ac_ext conftest.$ac_objext +rm -f conftest.$ac_ext CC=$ac_save_CC fi - -case "x$ac_cv_prog_cc_stdc" in - x|xno) - echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6 ;; +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) - echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 - CC="$CC $ac_cv_prog_cc_stdc" ;; + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac - -# Some people use a C++ compiler to compile C. Since we use `exit', -# in C++ we need to declare it. In case someone uses the same compiler -# for both compiling C and C++ we need to have the C++ compiler decide -# the declaration of exit, since it's the most demanding environment. -cat >conftest.$ac_ext <<_ACEOF -#ifndef __cplusplus - choke me -#endif -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if test "x$ac_cv_prog_cc_c89" != xno; then : fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -3103,10 +4242,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3131,6 +4270,11 @@ else if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3148,7 +4292,17 @@ else done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3158,18 +4312,23 @@ else break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3193,13 +4352,11 @@ else fi fi -echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - -if + if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= @@ -3216,15 +4373,15 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" @@ -3238,11 +4395,7 @@ do # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -3251,68 +4404,24 @@ cat >>conftest.$ac_ext <<_ACEOF #endif Syntax error _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext - # OK, works on sane cases. Now check whether non-existent headers + # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Passes both tests. ac_preproc_ok=: break @@ -3322,7 +4431,7 @@ rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then +if $ac_preproc_ok; then : break fi @@ -3334,8 +4443,8 @@ fi else ac_cv_prog_CPP=$CPP fi -echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do @@ -3345,11 +4454,7 @@ do # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -3358,68 +4463,24 @@ cat >>conftest.$ac_ext <<_ACEOF #endif Syntax error _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext - # OK, works on sane cases. Now check whether non-existent headers + # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Passes both tests. ac_preproc_ok=: break @@ -3429,14 +4490,13 @@ rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : +if $ac_preproc_ok; then : + else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } fi ac_ext=c @@ -3446,60 +4506,142 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6 -if test "${ac_cv_prog_egrep+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count fi -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 -echo "${ECHO_T}$ac_cv_prog_egrep" >&6 - EGREP=$ac_cv_prog_egrep - - - -echo "$as_me:$LINENO: checking for AIX" >&5 -echo $ECHO_N "checking for AIX... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef _AIX - yes -#endif - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -cat >>confdefs.h <<\_ACEOF -#define _ALL_SOURCE 1 -_ACEOF + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + ac_cv_path_GREP=$GREP fi -rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" -echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -3514,51 +4656,23 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no + ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -3568,18 +4682,14 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -3589,16 +4699,13 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include +#include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) @@ -3618,109 +4725,40 @@ main () for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); + return 2; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -ac_cv_header_stdc=no +else + ac_cv_header_stdc=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + fi fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -3728,167 +4766,96 @@ fi done -if test "${ac_cv_header_minix_config_h+set}" = set; then - echo "$as_me:$LINENO: checking for minix/config.h" >&5 -echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6 -if test "${ac_cv_header_minix_config_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 -echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking minix/config.h usability" >&5 -echo $ECHO_N "checking minix/config.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking minix/config.h presence" >&5 -echo $ECHO_N "checking minix/config.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: minix/config.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: minix/config.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for minix/config.h" >&5 -echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6 -if test "${ac_cv_header_minix_config_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_minix_config_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5 -echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6 - -fi -if test $ac_cv_header_minix_config_h = yes; then + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = x""yes; then : MINIX=yes else MINIX= fi -if test "$MINIX" = yes; then + if test "$MINIX" = yes; then -cat >>confdefs.h <<\_ACEOF -#define _POSIX_SOURCE 1 +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if test "${ac_cv_safe_to_define___extensions__+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} _ACEOF - - -cat >>confdefs.h <<\_ACEOF -#define _POSIX_1_SOURCE 2 -_ACEOF - - -cat >>confdefs.h <<\_ACEOF -#define _MINIX 1 -_ACEOF - +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + + + + +# So far, the only shared library we might use is libopts. +# It's a small library - we might as well use a static version of it. +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=no +fi + + ac_ext=c @@ -3899,10 +4866,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -3912,35 +4879,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -3950,39 +4919,50 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -3992,77 +4972,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi - fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -4073,18 +5013,19 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. @@ -4102,24 +5043,25 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -4129,39 +5071,41 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -4171,71 +5115,83 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_CC" && break done - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi fi -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4249,55 +5205,34 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no + ac_compiler_gnu=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -GCC=`test $ac_compiler_gnu = yes && echo yes` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -CFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4308,39 +5243,49 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -ac_cv_prog_cc_g=no +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -4356,18 +5301,14 @@ else CFLAGS= fi fi -echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 -echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_prog_cc_stdc=no + ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -4395,12 +5336,17 @@ static char *f (char * (*g) (char **, int), char **p, ...) /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std1 is added to get + as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ + that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; @@ -4415,205 +5361,37 @@ return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; return 0; } _ACEOF -# Don't try gcc -ansi; that turns off useful extensions and -# breaks some systems' header files. -# AIX -qlanglvl=ansi -# Ultrix and OSF/1 -std1 -# HP-UX 10.20 and later -Ae -# HP-UX older versions -Aa -D_HPUX_SOURCE -# SVR4 -Xc -D__EXTENSIONS__ -for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_stdc=$ac_arg -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg fi -rm -f conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done -rm -f conftest.$ac_ext conftest.$ac_objext +rm -f conftest.$ac_ext CC=$ac_save_CC fi - -case "x$ac_cv_prog_cc_stdc" in - x|xno) - echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6 ;; +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) - echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 - CC="$CC $ac_cv_prog_cc_stdc" ;; + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac - -# Some people use a C++ compiler to compile C. Since we use `exit', -# in C++ we need to declare it. In case someone uses the same compiler -# for both compiling C and C++ we need to have the C++ compiler decide -# the declaration of exit, since it's the most demanding environment. -cat >conftest.$ac_ext <<_ACEOF -#ifndef __cplusplus - choke me -#endif -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if test "x$ac_cv_prog_cc_c89" != xno; then : fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -4622,10 +5400,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -4650,6 +5428,11 @@ else if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -4667,7 +5450,17 @@ else done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -4677,18 +5470,23 @@ else break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -4712,13 +5510,11 @@ else fi fi -echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - -if + if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= @@ -4730,23 +5526,20 @@ fi # Ralf Wildenhues: With per-target flags we need CC_C_O +# AM_PROG_CC_C_O supersets AC_PROG_CC_C_O if test "x$CC" != xcc; then - echo "$as_me:$LINENO: checking whether $CC and cc understand -c and -o together" >&5 -echo $ECHO_N "checking whether $CC and cc understand -c and -o together... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 +$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else - echo "$as_me:$LINENO: checking whether cc understands -c and -o together" >&5 -echo $ECHO_N "checking whether cc understands -c and -o together... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 +$as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi -set dummy $CC; ac_cc=`echo $2 | +set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` -if eval "test \"\${ac_cv_prog_cc_${ac_cc}_c_o+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -4760,38 +5553,65 @@ _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. -ac_try='$CC -c conftest.$ac_ext -o conftest.$ac_objext >&5' -if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 +ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' +rm -f conftest2.* +if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_try='cc -c conftest.$ac_ext -o conftest.$ac_objext >&5' - if { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' + rm -f conftest2.* + if { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - test -f conftest.$ac_objext && { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && + test -f conftest2.$ac_objext && { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then # cc works too. : @@ -4804,37 +5624,342 @@ then else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi -rm -f conftest* +rm -f core conftest* fi -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } -cat >>confdefs.h <<\_ACEOF -#define NO_MINUS_C_MINUS_O 1 -_ACEOF +$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi +# FIXME: we rely on the cache variable name because +# there is no other way. +set dummy $CC +am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` +eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o +if test "$am_t" != yes; then + # Losing compiler, so override with the script. + # FIXME: It is wrong to rewrite CC. + # But if we don't then we get into trouble of one sort or another. + # A longer-term fix would be to have automake use am__CC in this case, + # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" + CC="$am_aux_dir/compile $CC" +fi + + + case $ac_cv_prog_cc_stdc in #( + no) : + ac_cv_prog_cc_c99=no; ac_cv_prog_cc_c89=no ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 +$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } +if test "${ac_cv_prog_cc_c99+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c99=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +#include + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +#define debug(...) fprintf (stderr, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + your preprocessor is broken; +#endif +#if BIG_OK +#else + your preprocessor is broken; +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\0'; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static void +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str; + int number; + float fnumber; + + while (*format) + { + switch (*format++) + { + case 's': // string + str = va_arg (args_copy, const char *); + break; + case 'd': // int + number = va_arg (args_copy, int); + break; + case 'f': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); +} + +int +main () +{ + + // Check bool. + _Bool success = false; + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + test_varargs ("s, d' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' + || dynamic_array[ni.number - 1] != 543); + + ; + return 0; +} +_ACEOF +for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -xc99=all -qlanglvl=extc99 +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c99=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c99" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c99" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c99" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c99" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 +else + ac_cv_prog_cc_stdc=no +fi + +fi + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO Standard C" >&5 +$as_echo_n "checking for $CC option to accept ISO Standard C... " >&6; } + if test "${ac_cv_prog_cc_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +fi + + case $ac_cv_prog_cc_stdc in #( + no) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; #( + '') : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; #( + *) : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_stdc" >&5 +$as_echo "$ac_cv_prog_cc_stdc" >&6; } ;; +esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" @@ -4848,11 +5973,7 @@ do # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -4861,68 +5982,24 @@ cat >>conftest.$ac_ext <<_ACEOF #endif Syntax error _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext - # OK, works on sane cases. Now check whether non-existent headers + # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Passes both tests. ac_preproc_ok=: break @@ -4932,7 +6009,7 @@ rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then +if $ac_preproc_ok; then : break fi @@ -4944,8 +6021,8 @@ fi else ac_cv_prog_CPP=$CPP fi -echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do @@ -4955,11 +6032,7 @@ do # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -4968,68 +6041,24 @@ cat >>conftest.$ac_ext <<_ACEOF #endif Syntax error _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext - # OK, works on sane cases. Now check whether non-existent headers + # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Passes both tests. ac_preproc_ok=: break @@ -5039,14 +6068,13 @@ rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : +if $ac_preproc_ok; then : + else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } fi ac_ext=c @@ -5095,10 +6123,10 @@ case "$host" in esac -echo "$as_me:$LINENO: checking additional compiler flags" >&5 -echo $ECHO_N "checking additional compiler flags... $ECHO_C" >&6 -if test "${ac_cv_os_cflags+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking additional compiler flags" >&5 +$as_echo_n "checking additional compiler flags... " >&6; } +if test "${ac_cv_os_cflags+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "${host_os}" in @@ -5178,8 +6206,8 @@ case "${host_os}" in esac fi -echo "$as_me:$LINENO: result: $ac_cv_os_cflags" >&5 -echo "${ECHO_T}$ac_cv_os_cflags" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cflags" >&5 +$as_echo "$ac_cv_os_cflags" >&6; } CFLAGS="$CFLAGS $ac_cv_os_cflags" @@ -5201,27 +6229,25 @@ esac LIBOPTS_DIR=libopts - # Check whether --enable-local-libopts or --disable-local-libopts was given. -if test "${enable_local_libopts+set}" = set; then - enableval="$enable_local_libopts" - + # Check whether --enable-local-libopts was given. +if test "${enable_local_libopts+set}" = set; then : + enableval=$enable_local_libopts; if test x$enableval = xyes ; then - { echo "$as_me:$LINENO: Using supplied libopts tearoff" >&5 -echo "$as_me: Using supplied libopts tearoff" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Using supplied libopts tearoff" >&5 +$as_echo "$as_me: Using supplied libopts tearoff" >&6;} LIBOPTS_LDADD='$(top_builddir)/libopts/libopts.la' LIBOPTS_CFLAGS='-I$(top_srcdir)/libopts' NEED_LIBOPTS_DIR=true fi -fi; - - # Check whether --enable-libopts-install or --disable-libopts-install was given. -if test "${enable_libopts_install+set}" = set; then - enableval="$enable_libopts_install" - -fi; +fi -if test "X${enable_libopts_install}" != Xno; then + # Check whether --enable-libopts-install was given. +if test "${enable_libopts_install+set}" = set; then : + enableval=$enable_libopts_install; +fi + + if test "X${enable_libopts_install}" != Xno; then INSTALL_LIBOPTS_TRUE= INSTALL_LIBOPTS_FALSE='#' else @@ -5231,18 +6257,17 @@ fi if test -z "${NEED_LIBOPTS_DIR}" ; then - echo "$as_me:$LINENO: checking whether autoopts-config can be found" >&5 -echo $ECHO_N "checking whether autoopts-config can be found... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether autoopts-config can be found" >&5 +$as_echo_n "checking whether autoopts-config can be found... " >&6; } -# Check whether --with-autoopts-config or --without-autoopts-config was given. -if test "${with_autoopts_config+set}" = set; then - withval="$with_autoopts_config" - lo_cv_with_autoopts_config=${with_autoopts_config} +# Check whether --with-autoopts-config was given. +if test "${with_autoopts_config+set}" = set; then : + withval=$with_autoopts_config; lo_cv_with_autoopts_config=${with_autoopts_config} else - echo "$as_me:$LINENO: checking whether autoopts-config is specified" >&5 -echo $ECHO_N "checking whether autoopts-config is specified... $ECHO_C" >&6 -if test "${lo_cv_with_autoopts_config+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether autoopts-config is specified" >&5 +$as_echo_n "checking whether autoopts-config is specified... " >&6; } +if test "${lo_cv_with_autoopts_config+set}" = set; then : + $as_echo_n "(cached) " >&6 else if autoopts-config --help 2>/dev/null 1>&2 then lo_cv_with_autoopts_config=autoopts-config @@ -5250,13 +6275,14 @@ else then lo_cv_with_autoopts_config=libopts-config else lo_cv_with_autoopts_config=no ; fi fi -echo "$as_me:$LINENO: result: $lo_cv_with_autoopts_config" >&5 -echo "${ECHO_T}$lo_cv_with_autoopts_config" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lo_cv_with_autoopts_config" >&5 +$as_echo "$lo_cv_with_autoopts_config" >&6; } -fi; # end of AC_ARG_WITH +fi + # end of AC_ARG_WITH - if test "${lo_cv_test_autoopts+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "${lo_cv_test_autoopts+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "${lo_cv_with_autoopts_config}" \ @@ -5275,8 +6301,8 @@ else fi # end of CACHE_VAL - echo "$as_me:$LINENO: result: ${lo_cv_test_autoopts}" >&5 -echo "${ECHO_T}${lo_cv_test_autoopts}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lo_cv_test_autoopts}" >&5 +$as_echo "${lo_cv_test_autoopts}" >&6; } if test "X${lo_cv_test_autoopts}" != Xno then @@ -5289,9 +6315,7 @@ echo "${ECHO_T}${lo_cv_test_autoopts}" >&6 fi fi # end of if test -z "${NEED_LIBOPTS_DIR}" - - -if test -n "${NEED_LIBOPTS_DIR}"; then + if test -n "${NEED_LIBOPTS_DIR}"; then NEED_LIBOPTS_TRUE= NEED_LIBOPTS_FALSE='#' else @@ -5303,7 +6327,7 @@ fi LIBOPTS_DIR=libopts - ac_config_files="$ac_config_files libopts/Makefile" + ac_config_files="$ac_config_files libopts/Makefile" @@ -5314,16 +6338,12 @@ if test X${INVOKE_LIBOPTS_MACROS_FIRST_done} != Xyes ; then # ================= # AC_HEADER_STDC # ================= - echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -5338,51 +6358,23 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no + ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -5392,18 +6384,14 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -5413,16 +6401,13 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include +#include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) @@ -5442,65 +6427,41 @@ main () for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); + return 2; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -ac_cv_header_stdc=no +else + ac_cv_header_stdc=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + fi fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # ================= # AC_HEADER_DIRENT # ================= - - - - - -ac_header_dirent=no + ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 -echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> @@ -5514,42 +6475,20 @@ return 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" + eval "$as_ac_Header=no" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break @@ -5558,256 +6497,116 @@ fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then - echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -ac_cv_search_opendir=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char opendir (); int main () { -opendir (); +return opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_opendir" = no; then - for ac_lib in dir; do +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break +fi +done +if test "${ac_cv_search_opendir+set}" = set; then : -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="-l$ac_lib" -break else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done + ac_cv_search_opendir=no fi +rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6 -if test "$ac_cv_search_opendir" != no; then - test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else - echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -ac_cv_search_opendir=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char opendir (); int main () { -opendir (); +return opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_opendir" = no; then - for ac_lib in x; do +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break +fi +done +if test "${ac_cv_search_opendir+set}" = set; then : -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="-l$ac_lib" -break else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done + ac_cv_search_opendir=no fi +rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6 -if test "$ac_cv_search_opendir" != no; then - test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi @@ -5817,172 +6616,17 @@ fi # ================= # AC_CHECK_HEADERS # ================= - - - - - - - - - - - - - - - - - - - - -for ac_header in dlfcn.h errno.h fcntl.h libgen.h memory.h netinet/in.h \ + for ac_header in dlfcn.h errno.h fcntl.h libgen.h memory.h netinet/in.h \ setjmp.h sys/mman.h sys/param.h sys/poll.h sys/procset.h sys/select.h \ sys/socket.h sys/stropts.h sys/time.h sys/un.h sys/wait.h unistd.h \ utime.h sysexits.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -5997,160 +6641,21 @@ done string errno stdlib memory setjmp do eval as_ac_var=\${ac_cv_header_${f}_h+set} test "${as_ac_var}" = set || \ - { { echo "$as_me:$LINENO: error: You must have ${f}.h on your system" >&5 -echo "$as_me: error: You must have ${f}.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have ${f}.h on your system" "$LINENO" 5 done # ================================================ # AC_CHECK_HEADERS: stdarg.h is present define HAVE_STDARG_H, otherwise # if varargs.h is present define HAVE_VARARGS_H. # ================================================ - - -for ac_header in stdarg.h varargs.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in stdarg.h varargs.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -6158,159 +6663,20 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have stdarg.h or varargs.h on your system" >&5 -echo "$as_me: error: You must have stdarg.h or varargs.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have stdarg.h or varargs.h on your system" "$LINENO" 5 fi # ================================================ # Similarly for the string.h and strings.h headers # ================================================ - - -for ac_header in string.h strings.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in string.h strings.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -6318,160 +6684,20 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have string.h or strings.h on your system" >&5 -echo "$as_me: error: You must have string.h or strings.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have string.h or strings.h on your system" "$LINENO" 5 fi # ===================== # ...and limits headers # ===================== - - - -for ac_header in limits.h sys/limits.h values.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in limits.h sys/limits.h values.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -6479,222 +6705,28 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have one of limits.h, sys/limits.h or values.h" >&5 -echo "$as_me: error: You must have one of limits.h, sys/limits.h or values.h" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have one of limits.h, sys/limits.h or values.h" "$LINENO" 5 fi # ======================== # ...and int types headers # ======================== - - -for ac_header in stdint.h inttypes.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in stdint.h inttypes.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi done - echo "$as_me:$LINENO: checking for int8_t" >&5 -echo $ECHO_N "checking for int8_t... $ECHO_C" >&6 -if test "${ac_cv_type_int8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int8_t *) 0) - return 0; -if (sizeof (int8_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int8_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int8_t" >&5 -echo "${ECHO_T}$ac_cv_type_int8_t" >&6 -if test $ac_cv_type_int8_t = yes; then + ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default" +if test "x$ac_cv_type_int8_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT8_T 1 @@ -6702,63 +6734,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint8_t" >&5 -echo $ECHO_N "checking for uint8_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint8_t *) 0) - return 0; -if (sizeof (uint8_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint8_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint8_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint8_t" >&6 -if test $ac_cv_type_uint8_t = yes; then +ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default" +if test "x$ac_cv_type_uint8_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT8_T 1 @@ -6766,63 +6743,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for int16_t" >&5 -echo $ECHO_N "checking for int16_t... $ECHO_C" >&6 -if test "${ac_cv_type_int16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int16_t *) 0) - return 0; -if (sizeof (int16_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int16_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int16_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int16_t" >&5 -echo "${ECHO_T}$ac_cv_type_int16_t" >&6 -if test $ac_cv_type_int16_t = yes; then +ac_fn_c_check_type "$LINENO" "int16_t" "ac_cv_type_int16_t" "$ac_includes_default" +if test "x$ac_cv_type_int16_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT16_T 1 @@ -6830,63 +6752,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint16_t" >&5 -echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint16_t *) 0) - return 0; -if (sizeof (uint16_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint16_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint16_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint16_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint16_t" >&6 -if test $ac_cv_type_uint16_t = yes; then +ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default" +if test "x$ac_cv_type_uint16_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT16_T 1 @@ -6894,63 +6761,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for int32_t" >&5 -echo $ECHO_N "checking for int32_t... $ECHO_C" >&6 -if test "${ac_cv_type_int32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int32_t *) 0) - return 0; -if (sizeof (int32_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int32_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5 -echo "${ECHO_T}$ac_cv_type_int32_t" >&6 -if test $ac_cv_type_int32_t = yes; then +ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default" +if test "x$ac_cv_type_int32_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT32_T 1 @@ -6958,63 +6770,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint32_t" >&5 -echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint32_t *) 0) - return 0; -if (sizeof (uint32_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint32_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint32_t" >&6 -if test $ac_cv_type_uint32_t = yes; then +ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default" +if test "x$ac_cv_type_uint32_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT32_T 1 @@ -7022,63 +6779,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for intptr_t" >&5 -echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6 -if test "${ac_cv_type_intptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((intptr_t *) 0) - return 0; -if (sizeof (intptr_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_intptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_intptr_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_intptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_intptr_t" >&6 -if test $ac_cv_type_intptr_t = yes; then +ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default" +if test "x$ac_cv_type_intptr_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INTPTR_T 1 @@ -7086,63 +6788,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint_t" >&5 -echo $ECHO_N "checking for uint_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint_t *) 0) - return 0; -if (sizeof (uint_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint_t" >&6 -if test $ac_cv_type_uint_t = yes; then +ac_fn_c_check_type "$LINENO" "uint_t" "ac_cv_type_uint_t" "$ac_includes_default" +if test "x$ac_cv_type_uint_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT_T 1 @@ -7155,63 +6802,8 @@ fi # ==================== # uintptr type & sizes # ==================== - echo "$as_me:$LINENO: checking for uintptr_t" >&5 -echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6 -if test "${ac_cv_type_uintptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uintptr_t *) 0) - return 0; -if (sizeof (uintptr_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uintptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uintptr_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6 -if test $ac_cv_type_uintptr_t = yes; then + ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" +if test "x$ac_cv_type_uintptr_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINTPTR_T 1 @@ -7220,1663 +6812,141 @@ _ACEOF else -cat >>confdefs.h <<\_ACEOF -#define uintptr_t unsigned long -_ACEOF +$as_echo "#define uintptr_t unsigned long" >>confdefs.h fi - echo "$as_me:$LINENO: checking for char*" >&5 -echo $ECHO_N "checking for char*... $ECHO_C" >&6 -if test "${ac_cv_type_charp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char*" >&5 +$as_echo_n "checking size of char*... " >&6; } +if test "${ac_cv_sizeof_charp+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((char* *) 0) - return 0; -if (sizeof (char*)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_charp=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char*))" "ac_cv_sizeof_charp" "$ac_includes_default"; then : -ac_cv_type_charp=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_charp" >&5 -echo "${ECHO_T}$ac_cv_type_charp" >&6 - -echo "$as_me:$LINENO: checking size of char*" >&5 -echo $ECHO_N "checking size of char*... $ECHO_C" >&6 -if test "${ac_cv_sizeof_charp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_charp" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (char*) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_charp=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_charp" >&5 +$as_echo "$ac_cv_sizeof_charp" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_charp=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (char*)); } -unsigned long ulongval () { return (long) (sizeof (char*)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (char*))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (char*)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (char*)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_charp=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_charp=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_charp" >&5 -echo "${ECHO_T}$ac_cv_sizeof_charp" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_CHARP $ac_cv_sizeof_charp _ACEOF - echo "$as_me:$LINENO: checking for int" >&5 -echo $ECHO_N "checking for int... $ECHO_C" >&6 -if test "${ac_cv_type_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if test "${ac_cv_sizeof_int+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int *) 0) - return 0; -if (sizeof (int)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : -ac_cv_type_int=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 -echo "${ECHO_T}$ac_cv_type_int" >&6 - -echo "$as_me:$LINENO: checking size of int" >&5 -echo $ECHO_N "checking size of int... $ECHO_C" >&6 -if test "${ac_cv_sizeof_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (int) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_int=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_int=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (int)); } -unsigned long ulongval () { return (long) (sizeof (int)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (int))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_int=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF - echo "$as_me:$LINENO: checking for long" >&5 -echo $ECHO_N "checking for long... $ECHO_C" >&6 -if test "${ac_cv_type_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if test "${ac_cv_sizeof_long+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((long *) 0) - return 0; -if (sizeof (long)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : -ac_cv_type_long=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 -echo "${ECHO_T}$ac_cv_type_long" >&6 - -echo "$as_me:$LINENO: checking size of long" >&5 -echo $ECHO_N "checking size of long... $ECHO_C" >&6 -if test "${ac_cv_sizeof_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_long=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (long)); } -unsigned long ulongval () { return (long) (sizeof (long)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (long))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_long=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_long=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF - echo "$as_me:$LINENO: checking for short" >&5 -echo $ECHO_N "checking for short... $ECHO_C" >&6 -if test "${ac_cv_type_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if test "${ac_cv_sizeof_short+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((short *) 0) - return 0; -if (sizeof (short)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_short=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : -ac_cv_type_short=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 -echo "${ECHO_T}$ac_cv_type_short" >&6 - -echo "$as_me:$LINENO: checking size of short" >&5 -echo $ECHO_N "checking size of short... $ECHO_C" >&6 -if test "${ac_cv_sizeof_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_short" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (short) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_short=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_short=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (short)); } -unsigned long ulongval () { return (long) (sizeof (short)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (short))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (short)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (short)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_short=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_short=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 -echo "${ECHO_T}$ac_cv_sizeof_short" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF @@ -8886,72 +6956,43 @@ _ACEOF # ---------------------------------------------------------------------- # AC_CHECK_LIB for SVR4 libgen, and use it if it defines pathfind. # ---------------------------------------------------------------------- - -echo "$as_me:$LINENO: checking for pathfind in -lgen" >&5 -echo $ECHO_N "checking for pathfind in -lgen... $ECHO_C" >&6 -if test "${ac_cv_lib_gen_pathfind+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pathfind in -lgen" >&5 +$as_echo_n "checking for pathfind in -lgen... " >&6; } +if test "${ac_cv_lib_gen_pathfind+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char pathfind (); int main () { -pathfind (); +return pathfind (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_pathfind=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_gen_pathfind=no + ac_cv_lib_gen_pathfind=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_gen_pathfind" >&5 -echo "${ECHO_T}$ac_cv_lib_gen_pathfind" >&6 -if test $ac_cv_lib_gen_pathfind = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_pathfind" >&5 +$as_echo "$ac_cv_lib_gen_pathfind" >&6; } +if test "x$ac_cv_lib_gen_pathfind" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGEN 1 _ACEOF @@ -8960,200 +7001,18 @@ _ACEOF fi - -for ac_func in vprintf -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in vprintf +do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +if test "x$ac_cv_func_vprintf" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_VPRINTF 1 _ACEOF -echo "$as_me:$LINENO: checking for _doprnt" >&5 -echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6 -if test "${ac_cv_func__doprnt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define _doprnt to an innocuous variant, in case declares _doprnt. - For example, HP-UX 11i declares gettimeofday. */ -#define _doprnt innocuous__doprnt +ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = x""yes; then : -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char _doprnt (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef _doprnt - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char _doprnt (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub__doprnt) || defined (__stub____doprnt) -choke me -#else -char (*f) () = _doprnt; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != _doprnt; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func__doprnt=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func__doprnt=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 -echo "${ECHO_T}$ac_cv_func__doprnt" >&6 -if test $ac_cv_func__doprnt = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_DOPRNT 1 -_ACEOF +$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi @@ -9161,108 +7020,14 @@ fi done - - - - - - -for ac_func in mmap canonicalize_file_name snprintf strdup strchr strrchr -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in mmap canonicalize_file_name snprintf strdup strchr strrchr +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -9273,22 +7038,22 @@ fi # Check to see if a reg expr header is specified. -# Check whether --with-regex-header or --without-regex-header was given. -if test "${with_regex_header+set}" = set; then - withval="$with_regex_header" - libopts_cv_with_regex_header=${with_regex_header} +# Check whether --with-regex-header was given. +if test "${with_regex_header+set}" = set; then : + withval=$with_regex_header; libopts_cv_with_regex_header=${with_regex_header} else - echo "$as_me:$LINENO: checking whether a reg expr header is specified" >&5 -echo $ECHO_N "checking whether a reg expr header is specified... $ECHO_C" >&6 -if test "${libopts_cv_with_regex_header+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a reg expr header is specified" >&5 +$as_echo_n "checking whether a reg expr header is specified... " >&6; } +if test "${libopts_cv_with_regex_header+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_with_regex_header=no fi -echo "$as_me:$LINENO: result: $libopts_cv_with_regex_header" >&5 -echo "${ECHO_T}$libopts_cv_with_regex_header" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libopts_cv_with_regex_header" >&5 +$as_echo "$libopts_cv_with_regex_header" >&6; } -fi; # end of AC_ARG_WITH +fi + # end of AC_ARG_WITH if test "X${libopts_cv_with_regex_header}" != Xno then @@ -9298,9 +7063,7 @@ _ACEOF else -cat >>confdefs.h <<\_ACEOF -#define REGEX_HEADER -_ACEOF +$as_echo "#define REGEX_HEADER " >>confdefs.h fi @@ -9309,22 +7072,22 @@ _ACEOF # Check to see if a working libregex can be found. -# Check whether --with-libregex or --without-libregex was given. -if test "${with_libregex+set}" = set; then - withval="$with_libregex" - libopts_cv_with_libregex_root=${with_libregex} +# Check whether --with-libregex was given. +if test "${with_libregex+set}" = set; then : + withval=$with_libregex; libopts_cv_with_libregex_root=${with_libregex} else - echo "$as_me:$LINENO: checking whether with-libregex was specified" >&5 -echo $ECHO_N "checking whether with-libregex was specified... $ECHO_C" >&6 -if test "${libopts_cv_with_libregex_root+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether with-libregex was specified" >&5 +$as_echo_n "checking whether with-libregex was specified... " >&6; } +if test "${libopts_cv_with_libregex_root+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_with_libregex_root=no fi -echo "$as_me:$LINENO: result: $libopts_cv_with_libregex_root" >&5 -echo "${ECHO_T}$libopts_cv_with_libregex_root" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libopts_cv_with_libregex_root" >&5 +$as_echo "$libopts_cv_with_libregex_root" >&6; } -fi; # end of AC_ARG_WITH libregex +fi + # end of AC_ARG_WITH libregex if test "${with_libguile+set}" = set && \ test "${withval}" = no @@ -9335,40 +7098,40 @@ fi; # end of AC_ARG_WITH libregex else -# Check whether --with-libregex-cflags or --without-libregex-cflags was given. -if test "${with_libregex_cflags+set}" = set; then - withval="$with_libregex_cflags" - libopts_cv_with_libregex_cflags=${with_regex_cflags} +# Check whether --with-libregex-cflags was given. +if test "${with_libregex_cflags+set}" = set; then : + withval=$with_libregex_cflags; libopts_cv_with_libregex_cflags=${with_regex_cflags} else - echo "$as_me:$LINENO: checking whether with-libregex-cflags was specified" >&5 -echo $ECHO_N "checking whether with-libregex-cflags was specified... $ECHO_C" >&6 -if test "${libopts_cv_with_libregex_cflags+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether with-libregex-cflags was specified" >&5 +$as_echo_n "checking whether with-libregex-cflags was specified... " >&6; } +if test "${libopts_cv_with_libregex_cflags+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_with_libregex_cflags=no fi -echo "$as_me:$LINENO: result: $libopts_cv_with_libregex_cflags" >&5 -echo "${ECHO_T}$libopts_cv_with_libregex_cflags" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libopts_cv_with_libregex_cflags" >&5 +$as_echo "$libopts_cv_with_libregex_cflags" >&6; } -fi; # end of AC_ARG_WITH libregex-cflags +fi + # end of AC_ARG_WITH libregex-cflags -# Check whether --with-libregex-libs or --without-libregex-libs was given. -if test "${with_libregex_libs+set}" = set; then - withval="$with_libregex_libs" - libopts_cv_with_libregex_libs=${with_regex_libs} +# Check whether --with-libregex-libs was given. +if test "${with_libregex_libs+set}" = set; then : + withval=$with_libregex_libs; libopts_cv_with_libregex_libs=${with_regex_libs} else - echo "$as_me:$LINENO: checking whether with-libregex-libs was specified" >&5 -echo $ECHO_N "checking whether with-libregex-libs was specified... $ECHO_C" >&6 -if test "${libopts_cv_with_libregex_libs+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether with-libregex-libs was specified" >&5 +$as_echo_n "checking whether with-libregex-libs was specified... " >&6; } +if test "${libopts_cv_with_libregex_libs+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_with_libregex_libs=no fi -echo "$as_me:$LINENO: result: $libopts_cv_with_libregex_libs" >&5 -echo "${ECHO_T}$libopts_cv_with_libregex_libs" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libopts_cv_with_libregex_libs" >&5 +$as_echo "$libopts_cv_with_libregex_libs" >&6; } -fi; # end of AC_ARG_WITH libregex-libs +fi + # end of AC_ARG_WITH libregex-libs case "X${libopts_cv_with_libregex_cflags}" in Xyes|Xno|X ) @@ -9401,20 +7164,16 @@ fi; # end of AC_ARG_WITH libregex-libs esac LIBREGEX_CFLAGS="" LIBREGEX_LIBS="" - echo "$as_me:$LINENO: checking whether libregex functions properly" >&5 -echo $ECHO_N "checking whether libregex functions properly... $ECHO_C" >&6 - if test "${libopts_cv_with_libregex+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libregex functions properly" >&5 +$as_echo_n "checking whether libregex functions properly... " >&6; } + if test "${libopts_cv_with_libregex+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_with_libregex=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -9437,40 +7196,25 @@ int main() { } return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_with_libregex=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_with_libregex=no + libopts_cv_with_libregex=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of AC_TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of AC_TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_with_libregex - echo "$as_me:$LINENO: result: ${libopts_cv_with_libregex}" >&5 -echo "${ECHO_T}${libopts_cv_with_libregex}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_with_libregex}" >&5 +$as_echo "${libopts_cv_with_libregex}" >&6; } if test "X${libopts_cv_with_libregex}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define WITH_LIBREGEX 1 -_ACEOF +$as_echo "#define WITH_LIBREGEX 1" >>confdefs.h else CPPFLAGS="${libopts_save_CPPFLAGS}" @@ -9481,21 +7225,17 @@ _ACEOF # Check to see if pathfind(3) works. - echo "$as_me:$LINENO: checking whether pathfind(3) works" >&5 -echo $ECHO_N "checking whether pathfind(3) works... $ECHO_C" >&6 - if test "${libopts_cv_run_pathfind+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pathfind(3) works" >&5 +$as_echo_n "checking whether pathfind(3) works... " >&6; } + if test "${libopts_cv_run_pathfind+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_run_pathfind=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -9504,40 +7244,25 @@ int main (int argc, char** argv) { return (pz == 0) ? 1 : 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_run_pathfind=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_run_pathfind=no + libopts_cv_run_pathfind=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_run_pathfind - echo "$as_me:$LINENO: result: ${libopts_cv_run_pathfind}" >&5 -echo "${ECHO_T}${libopts_cv_run_pathfind}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_run_pathfind}" >&5 +$as_echo "${libopts_cv_run_pathfind}" >&6; } if test "X${libopts_cv_run_pathfind}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PATHFIND 1 -_ACEOF +$as_echo "#define HAVE_PATHFIND 1" >>confdefs.h fi @@ -9545,10 +7270,10 @@ _ACEOF # Check to see if /dev/zero is readable device. - echo "$as_me:$LINENO: checking whether /dev/zero is readable device" >&5 -echo $ECHO_N "checking whether /dev/zero is readable device... $ECHO_C" >&6 - if test "${libopts_cv_test_dev_zero+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /dev/zero is readable device" >&5 +$as_echo_n "checking whether /dev/zero is readable device... " >&6; } + if test "${libopts_cv_test_dev_zero+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_test_dev_zero=`exec 2> /dev/null @@ -9563,15 +7288,13 @@ echo ${dzero}` fi # end of CACHE_VAL of libopts_cv_test_dev_zero - echo "$as_me:$LINENO: result: ${libopts_cv_test_dev_zero}" >&5 -echo "${ECHO_T}${libopts_cv_test_dev_zero}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_test_dev_zero}" >&5 +$as_echo "${libopts_cv_test_dev_zero}" >&6; } if test "X${libopts_cv_test_dev_zero}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define HAVE_DEV_ZERO 1 -_ACEOF +$as_echo "#define HAVE_DEV_ZERO 1" >>confdefs.h fi @@ -9579,21 +7302,17 @@ _ACEOF # Check to see if we have a functional realpath(3C). - echo "$as_me:$LINENO: checking whether we have a functional realpath(3C)" >&5 -echo $ECHO_N "checking whether we have a functional realpath(3C)... $ECHO_C" >&6 - if test "${libopts_cv_run_realpath+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we have a functional realpath(3C)" >&5 +$as_echo_n "checking whether we have a functional realpath(3C)... " >&6; } + if test "${libopts_cv_run_realpath+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_run_realpath=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -9607,40 +7326,25 @@ choke me!! return (pz == zPath) ? 0 : 1; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_run_realpath=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_run_realpath=no + libopts_cv_run_realpath=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_run_realpath - echo "$as_me:$LINENO: result: ${libopts_cv_run_realpath}" >&5 -echo "${ECHO_T}${libopts_cv_run_realpath}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_run_realpath}" >&5 +$as_echo "${libopts_cv_run_realpath}" >&6; } if test "X${libopts_cv_run_realpath}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define HAVE_REALPATH 1 -_ACEOF +$as_echo "#define HAVE_REALPATH 1" >>confdefs.h fi @@ -9648,21 +7352,17 @@ _ACEOF # Check to see if strftime() works. - echo "$as_me:$LINENO: checking whether strftime() works" >&5 -echo $ECHO_N "checking whether strftime() works... $ECHO_C" >&6 - if test "${libopts_cv_run_strftime+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strftime() works" >&5 +$as_echo_n "checking whether strftime() works... " >&6; } + if test "${libopts_cv_run_strftime+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_run_strftime=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -9682,40 +7382,25 @@ int main() { strftime( t_buf, sizeof( t_buf ), "%A %b %d %j", &tm ); return (strcmp( t_buf, z ) != 0); } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_run_strftime=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_run_strftime=no + libopts_cv_run_strftime=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_run_strftime - echo "$as_me:$LINENO: result: ${libopts_cv_run_strftime}" >&5 -echo "${ECHO_T}${libopts_cv_run_strftime}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_run_strftime}" >&5 +$as_echo "${libopts_cv_run_strftime}" >&6; } if test "X${libopts_cv_run_strftime}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define HAVE_STRFTIME 1 -_ACEOF +$as_echo "#define HAVE_STRFTIME 1" >>confdefs.h fi @@ -9723,67 +7408,46 @@ _ACEOF # Check to see if fopen accepts "b" mode. - echo "$as_me:$LINENO: checking whether fopen accepts \"b\" mode" >&5 -echo $ECHO_N "checking whether fopen accepts \"b\" mode... $ECHO_C" >&6 - if test "${libopts_cv_run_fopen_binary+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fopen accepts \"b\" mode" >&5 +$as_echo_n "checking whether fopen accepts \"b\" mode... " >&6; } + if test "${libopts_cv_run_fopen_binary+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_run_fopen_binary=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (int argc, char** argv) { FILE* fp = fopen("conftest.$ac_ext", "rb"); return (fp == NULL) ? 1 : fclose(fp); } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_run_fopen_binary=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_run_fopen_binary=no + libopts_cv_run_fopen_binary=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_run_fopen_binary - echo "$as_me:$LINENO: result: ${libopts_cv_run_fopen_binary}" >&5 -echo "${ECHO_T}${libopts_cv_run_fopen_binary}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_run_fopen_binary}" >&5 +$as_echo "${libopts_cv_run_fopen_binary}" >&6; } if test "X${libopts_cv_run_fopen_binary}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define FOPEN_BINARY_FLAG "b" -_ACEOF +$as_echo "#define FOPEN_BINARY_FLAG \"b\"" >>confdefs.h else -cat >>confdefs.h <<\_ACEOF -#define FOPEN_BINARY_FLAG "" -_ACEOF +$as_echo "#define FOPEN_BINARY_FLAG \"\"" >>confdefs.h fi @@ -9791,67 +7455,46 @@ _ACEOF # Check to see if fopen accepts "t" mode. - echo "$as_me:$LINENO: checking whether fopen accepts \"t\" mode" >&5 -echo $ECHO_N "checking whether fopen accepts \"t\" mode... $ECHO_C" >&6 - if test "${libopts_cv_run_fopen_text+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fopen accepts \"t\" mode" >&5 +$as_echo_n "checking whether fopen accepts \"t\" mode... " >&6; } + if test "${libopts_cv_run_fopen_text+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_run_fopen_text=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (int argc, char** argv) { FILE* fp = fopen("conftest.$ac_ext", "rt"); return (fp == NULL) ? 1 : fclose(fp); } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_run_fopen_text=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_run_fopen_text=no + libopts_cv_run_fopen_text=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_run_fopen_text - echo "$as_me:$LINENO: result: ${libopts_cv_run_fopen_text}" >&5 -echo "${ECHO_T}${libopts_cv_run_fopen_text}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_run_fopen_text}" >&5 +$as_echo "${libopts_cv_run_fopen_text}" >&6; } if test "X${libopts_cv_run_fopen_text}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define FOPEN_TEXT_FLAG "t" -_ACEOF +$as_echo "#define FOPEN_TEXT_FLAG \"t\"" >>confdefs.h else -cat >>confdefs.h <<\_ACEOF -#define FOPEN_TEXT_FLAG "" -_ACEOF +$as_echo "#define FOPEN_TEXT_FLAG \"\"" >>confdefs.h fi @@ -9859,29 +7502,27 @@ _ACEOF # Check to see if not wanting optional option args. - # Check whether --enable-optional-args or --disable-optional-args was given. -if test "${enable_optional_args+set}" = set; then - enableval="$enable_optional_args" - libopts_cv_enable_optional_args=${enable_optional_args} + # Check whether --enable-optional-args was given. +if test "${enable_optional_args+set}" = set; then : + enableval=$enable_optional_args; libopts_cv_enable_optional_args=${enable_optional_args} else - echo "$as_me:$LINENO: checking whether not wanting optional option args" >&5 -echo $ECHO_N "checking whether not wanting optional option args... $ECHO_C" >&6 -if test "${libopts_cv_enable_optional_args+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether not wanting optional option args" >&5 +$as_echo_n "checking whether not wanting optional option args... " >&6; } +if test "${libopts_cv_enable_optional_args+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_enable_optional_args=yes fi -echo "$as_me:$LINENO: result: $libopts_cv_enable_optional_args" >&5 -echo "${ECHO_T}$libopts_cv_enable_optional_args" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libopts_cv_enable_optional_args" >&5 +$as_echo "$libopts_cv_enable_optional_args" >&6; } -fi; # end of AC_ARG_ENABLE +fi + # end of AC_ARG_ENABLE if test "X${libopts_cv_enable_optional_args}" = Xno then -cat >>confdefs.h <<\_ACEOF -#define NO_OPTIONAL_OPT_ARGS 1 -_ACEOF +$as_echo "#define NO_OPTIONAL_OPT_ARGS 1" >>confdefs.h fi @@ -9894,16 +7535,12 @@ if test X${INVOKE_LIBOPTS_MACROS_FIRST_done} != Xyes ; then # ================= # AC_HEADER_STDC # ================= - echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -9918,51 +7555,23 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no + ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -9972,18 +7581,14 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -9993,16 +7598,13 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include +#include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) @@ -10022,65 +7624,41 @@ main () for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); + return 2; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -ac_cv_header_stdc=no +else + ac_cv_header_stdc=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + fi fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # ================= # AC_HEADER_DIRENT # ================= - - - - - -ac_header_dirent=no + ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 -echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> @@ -10094,42 +7672,20 @@ return 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" + eval "$as_ac_Header=no" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break @@ -10138,256 +7694,116 @@ fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then - echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -ac_cv_search_opendir=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char opendir (); int main () { -opendir (); +return opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_opendir" = no; then - for ac_lib in dir; do +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break +fi +done +if test "${ac_cv_search_opendir+set}" = set; then : -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="-l$ac_lib" -break else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done + ac_cv_search_opendir=no fi +rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6 -if test "$ac_cv_search_opendir" != no; then - test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else - echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -ac_cv_search_opendir=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char opendir (); int main () { -opendir (); +return opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_opendir" = no; then - for ac_lib in x; do +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break +fi +done +if test "${ac_cv_search_opendir+set}" = set; then : -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="-l$ac_lib" -break else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done + ac_cv_search_opendir=no fi +rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6 -if test "$ac_cv_search_opendir" != no; then - test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi @@ -10397,172 +7813,17 @@ fi # ================= # AC_CHECK_HEADERS # ================= - - - - - - - - - - - - - - - - - - - - -for ac_header in dlfcn.h errno.h fcntl.h libgen.h memory.h netinet/in.h \ + for ac_header in dlfcn.h errno.h fcntl.h libgen.h memory.h netinet/in.h \ setjmp.h sys/mman.h sys/param.h sys/poll.h sys/procset.h sys/select.h \ sys/socket.h sys/stropts.h sys/time.h sys/un.h sys/wait.h unistd.h \ utime.h sysexits.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -10577,160 +7838,21 @@ done string errno stdlib memory setjmp do eval as_ac_var=\${ac_cv_header_${f}_h+set} test "${as_ac_var}" = set || \ - { { echo "$as_me:$LINENO: error: You must have ${f}.h on your system" >&5 -echo "$as_me: error: You must have ${f}.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have ${f}.h on your system" "$LINENO" 5 done # ================================================ # AC_CHECK_HEADERS: stdarg.h is present define HAVE_STDARG_H, otherwise # if varargs.h is present define HAVE_VARARGS_H. # ================================================ - - -for ac_header in stdarg.h varargs.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in stdarg.h varargs.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -10738,159 +7860,20 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have stdarg.h or varargs.h on your system" >&5 -echo "$as_me: error: You must have stdarg.h or varargs.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have stdarg.h or varargs.h on your system" "$LINENO" 5 fi # ================================================ # Similarly for the string.h and strings.h headers # ================================================ - - -for ac_header in string.h strings.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in string.h strings.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -10898,160 +7881,20 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have string.h or strings.h on your system" >&5 -echo "$as_me: error: You must have string.h or strings.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have string.h or strings.h on your system" "$LINENO" 5 fi # ===================== # ...and limits headers # ===================== - - - -for ac_header in limits.h sys/limits.h values.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in limits.h sys/limits.h values.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -11059,222 +7902,28 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have one of limits.h, sys/limits.h or values.h" >&5 -echo "$as_me: error: You must have one of limits.h, sys/limits.h or values.h" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have one of limits.h, sys/limits.h or values.h" "$LINENO" 5 fi # ======================== # ...and int types headers # ======================== - - -for ac_header in stdint.h inttypes.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in stdint.h inttypes.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi done - echo "$as_me:$LINENO: checking for int8_t" >&5 -echo $ECHO_N "checking for int8_t... $ECHO_C" >&6 -if test "${ac_cv_type_int8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int8_t *) 0) - return 0; -if (sizeof (int8_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int8_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int8_t" >&5 -echo "${ECHO_T}$ac_cv_type_int8_t" >&6 -if test $ac_cv_type_int8_t = yes; then + ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default" +if test "x$ac_cv_type_int8_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT8_T 1 @@ -11282,63 +7931,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint8_t" >&5 -echo $ECHO_N "checking for uint8_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint8_t *) 0) - return 0; -if (sizeof (uint8_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint8_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint8_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint8_t" >&6 -if test $ac_cv_type_uint8_t = yes; then +ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default" +if test "x$ac_cv_type_uint8_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT8_T 1 @@ -11346,63 +7940,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for int16_t" >&5 -echo $ECHO_N "checking for int16_t... $ECHO_C" >&6 -if test "${ac_cv_type_int16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int16_t *) 0) - return 0; -if (sizeof (int16_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int16_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int16_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int16_t" >&5 -echo "${ECHO_T}$ac_cv_type_int16_t" >&6 -if test $ac_cv_type_int16_t = yes; then +ac_fn_c_check_type "$LINENO" "int16_t" "ac_cv_type_int16_t" "$ac_includes_default" +if test "x$ac_cv_type_int16_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT16_T 1 @@ -11410,63 +7949,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint16_t" >&5 -echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint16_t *) 0) - return 0; -if (sizeof (uint16_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint16_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint16_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint16_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint16_t" >&6 -if test $ac_cv_type_uint16_t = yes; then +ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default" +if test "x$ac_cv_type_uint16_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT16_T 1 @@ -11474,63 +7958,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for int32_t" >&5 -echo $ECHO_N "checking for int32_t... $ECHO_C" >&6 -if test "${ac_cv_type_int32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int32_t *) 0) - return 0; -if (sizeof (int32_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int32_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5 -echo "${ECHO_T}$ac_cv_type_int32_t" >&6 -if test $ac_cv_type_int32_t = yes; then +ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default" +if test "x$ac_cv_type_int32_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT32_T 1 @@ -11538,63 +7967,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint32_t" >&5 -echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint32_t *) 0) - return 0; -if (sizeof (uint32_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint32_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint32_t" >&6 -if test $ac_cv_type_uint32_t = yes; then +ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default" +if test "x$ac_cv_type_uint32_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT32_T 1 @@ -11602,63 +7976,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for intptr_t" >&5 -echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6 -if test "${ac_cv_type_intptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((intptr_t *) 0) - return 0; -if (sizeof (intptr_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_intptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_intptr_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_intptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_intptr_t" >&6 -if test $ac_cv_type_intptr_t = yes; then +ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default" +if test "x$ac_cv_type_intptr_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INTPTR_T 1 @@ -11666,63 +7985,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint_t" >&5 -echo $ECHO_N "checking for uint_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint_t *) 0) - return 0; -if (sizeof (uint_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint_t" >&6 -if test $ac_cv_type_uint_t = yes; then +ac_fn_c_check_type "$LINENO" "uint_t" "ac_cv_type_uint_t" "$ac_includes_default" +if test "x$ac_cv_type_uint_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT_T 1 @@ -11735,63 +7999,8 @@ fi # ==================== # uintptr type & sizes # ==================== - echo "$as_me:$LINENO: checking for uintptr_t" >&5 -echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6 -if test "${ac_cv_type_uintptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uintptr_t *) 0) - return 0; -if (sizeof (uintptr_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uintptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uintptr_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6 -if test $ac_cv_type_uintptr_t = yes; then + ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" +if test "x$ac_cv_type_uintptr_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINTPTR_T 1 @@ -11800,1663 +8009,141 @@ _ACEOF else -cat >>confdefs.h <<\_ACEOF -#define uintptr_t unsigned long -_ACEOF +$as_echo "#define uintptr_t unsigned long" >>confdefs.h fi - echo "$as_me:$LINENO: checking for char*" >&5 -echo $ECHO_N "checking for char*... $ECHO_C" >&6 -if test "${ac_cv_type_charp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char*" >&5 +$as_echo_n "checking size of char*... " >&6; } +if test "${ac_cv_sizeof_charp+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((char* *) 0) - return 0; -if (sizeof (char*)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_charp=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char*))" "ac_cv_sizeof_charp" "$ac_includes_default"; then : -ac_cv_type_charp=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_charp" >&5 -echo "${ECHO_T}$ac_cv_type_charp" >&6 - -echo "$as_me:$LINENO: checking size of char*" >&5 -echo $ECHO_N "checking size of char*... $ECHO_C" >&6 -if test "${ac_cv_sizeof_charp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_charp" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (char*) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_charp=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_charp" >&5 +$as_echo "$ac_cv_sizeof_charp" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_charp=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (char*)); } -unsigned long ulongval () { return (long) (sizeof (char*)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (char*))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (char*)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (char*)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_charp=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_charp=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_charp" >&5 -echo "${ECHO_T}$ac_cv_sizeof_charp" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_CHARP $ac_cv_sizeof_charp _ACEOF - echo "$as_me:$LINENO: checking for int" >&5 -echo $ECHO_N "checking for int... $ECHO_C" >&6 -if test "${ac_cv_type_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if test "${ac_cv_sizeof_int+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int *) 0) - return 0; -if (sizeof (int)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : -ac_cv_type_int=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 -echo "${ECHO_T}$ac_cv_type_int" >&6 - -echo "$as_me:$LINENO: checking size of int" >&5 -echo $ECHO_N "checking size of int... $ECHO_C" >&6 -if test "${ac_cv_sizeof_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (int) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_int=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_int=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (int)); } -unsigned long ulongval () { return (long) (sizeof (int)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (int))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_int=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF - echo "$as_me:$LINENO: checking for long" >&5 -echo $ECHO_N "checking for long... $ECHO_C" >&6 -if test "${ac_cv_type_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if test "${ac_cv_sizeof_long+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((long *) 0) - return 0; -if (sizeof (long)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : -ac_cv_type_long=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 -echo "${ECHO_T}$ac_cv_type_long" >&6 - -echo "$as_me:$LINENO: checking size of long" >&5 -echo $ECHO_N "checking size of long... $ECHO_C" >&6 -if test "${ac_cv_sizeof_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_long=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (long)); } -unsigned long ulongval () { return (long) (sizeof (long)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (long))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_long=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_long=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF - echo "$as_me:$LINENO: checking for short" >&5 -echo $ECHO_N "checking for short... $ECHO_C" >&6 -if test "${ac_cv_type_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if test "${ac_cv_sizeof_short+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((short *) 0) - return 0; -if (sizeof (short)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_short=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : -ac_cv_type_short=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 -echo "${ECHO_T}$ac_cv_type_short" >&6 - -echo "$as_me:$LINENO: checking size of short" >&5 -echo $ECHO_N "checking size of short... $ECHO_C" >&6 -if test "${ac_cv_sizeof_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_short" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (short) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_short=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_short=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (short)); } -unsigned long ulongval () { return (long) (sizeof (short)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (short))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (short)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (short)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_short=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_short=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 -echo "${ECHO_T}$ac_cv_sizeof_short" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF @@ -13466,72 +8153,43 @@ _ACEOF # ---------------------------------------------------------------------- # AC_CHECK_LIB for SVR4 libgen, and use it if it defines pathfind. # ---------------------------------------------------------------------- - -echo "$as_me:$LINENO: checking for pathfind in -lgen" >&5 -echo $ECHO_N "checking for pathfind in -lgen... $ECHO_C" >&6 -if test "${ac_cv_lib_gen_pathfind+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pathfind in -lgen" >&5 +$as_echo_n "checking for pathfind in -lgen... " >&6; } +if test "${ac_cv_lib_gen_pathfind+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char pathfind (); int main () { -pathfind (); +return pathfind (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_pathfind=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_gen_pathfind=no + ac_cv_lib_gen_pathfind=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_gen_pathfind" >&5 -echo "${ECHO_T}$ac_cv_lib_gen_pathfind" >&6 -if test $ac_cv_lib_gen_pathfind = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_pathfind" >&5 +$as_echo "$ac_cv_lib_gen_pathfind" >&6; } +if test "x$ac_cv_lib_gen_pathfind" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGEN 1 _ACEOF @@ -13540,200 +8198,18 @@ _ACEOF fi - -for ac_func in vprintf -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in vprintf +do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +if test "x$ac_cv_func_vprintf" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_VPRINTF 1 _ACEOF -echo "$as_me:$LINENO: checking for _doprnt" >&5 -echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6 -if test "${ac_cv_func__doprnt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define _doprnt to an innocuous variant, in case declares _doprnt. - For example, HP-UX 11i declares gettimeofday. */ -#define _doprnt innocuous__doprnt +ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = x""yes; then : -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char _doprnt (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef _doprnt - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char _doprnt (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub__doprnt) || defined (__stub____doprnt) -choke me -#else -char (*f) () = _doprnt; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != _doprnt; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func__doprnt=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func__doprnt=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 -echo "${ECHO_T}$ac_cv_func__doprnt" >&6 -if test $ac_cv_func__doprnt = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_DOPRNT 1 -_ACEOF +$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi @@ -13741,108 +8217,14 @@ fi done - - - - - - -for ac_func in mmap canonicalize_file_name snprintf strdup strchr strrchr -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in mmap canonicalize_file_name snprintf strdup strchr strrchr +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -13854,13 +8236,13 @@ fi # end of AC_DEFUN of LIBOPTS_CHECK -echo "$as_me:$LINENO: checking if $CC can handle #warning" >&5 -echo $ECHO_N "checking if $CC can handle #warning... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC can handle #warning" >&5 +$as_echo_n "checking if $CC can handle #warning... " >&6; } +if test "${ac_cv_cpp_warning+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -13871,61 +8253,120 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cpp_warning=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_cpp_warning=no + ac_cv_cpp_warning=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_cv_cpp_warning" >&5 -echo "${ECHO_T}$ac_cv_cpp_warning" >&6 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cpp_warning" >&5 +$as_echo "$ac_cv_cpp_warning" >&6; } case "$ac_cv_cpp_warning" in no) -cat >>confdefs.h <<\_ACEOF -#define NO_OPTION_NAME_WARNINGS 1 -_ACEOF +$as_echo "#define NO_OPTION_NAME_WARNINGS 1" >>confdefs.h - echo "$as_me:$LINENO: result: Enabling NO_OPTION_NAME_WARNINGS as #warning does not work" >&5 -echo "${ECHO_T}Enabling NO_OPTION_NAME_WARNINGS as #warning does not work" >&6 - ;; esac -echo "$as_me:$LINENO: checking for bin subdirectory" >&5 -echo $ECHO_N "checking for bin subdirectory... $ECHO_C" >&6 +case "$GCC" in + yes) + SAVED_CFLAGS_AC="$CFLAGS" + CFLAGS="$CFLAGS -Wstrict-overflow" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC can handle -Wstrict-overflow" >&5 +$as_echo_n "checking if $CC can handle -Wstrict-overflow... " >&6; } +if test "${ac_cv_gcc_Wstrict_overflow+set}" = set; then : + $as_echo_n "(cached) " >&6 +else -# Check whether --with-binsubdir or --without-binsubdir was given. -if test "${with_binsubdir+set}" = set; then - withval="$with_binsubdir" - use_binsubdir="$withval" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_gcc_Wstrict_overflow=yes +else + ac_cv_gcc_Wstrict_overflow=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_Wstrict_overflow" >&5 +$as_echo "$ac_cv_gcc_Wstrict_overflow" >&6; } + CFLAGS="$SAVED_CFLAGS_AC" + unset SAVED_CFLAGS_AC + # + # $ac_cv_gcc_Wstrict_overflow is tested later to add the + # flag to CFLAGS. + # +esac + + +case "$GCC" in + yes) + SAVED_CFLAGS_AC="$CFLAGS" + CFLAGS="$CFLAGS -Winit-self" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC can handle -Winit-self" >&5 +$as_echo_n "checking if $CC can handle -Winit-self... " >&6; } +if test "${ac_cv_gcc_Winit_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_gcc_Winit_self=yes +else + ac_cv_gcc_Winit_self=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gcc_Winit_self" >&5 +$as_echo "$ac_cv_gcc_Winit_self" >&6; } + CFLAGS="$SAVED_CFLAGS_AC" + unset SAVED_CFLAGS_AC + # + # $ac_cv_gcc_Winit_self is tested later to add the + # flag to CFLAGS. + # +esac + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bin subdirectory" >&5 +$as_echo_n "checking for bin subdirectory... " >&6; } + +# Check whether --with-binsubdir was given. +if test "${with_binsubdir+set}" = set; then : + withval=$with_binsubdir; use_binsubdir="$withval" else use_binsubdir="bin" -fi; +fi + case "$use_binsubdir" in bin) @@ -13933,28 +8374,26 @@ case "$use_binsubdir" in sbin) ;; *) - { { echo "$as_me:$LINENO: error: <$use_binsubdir> is illegal - must be \"bin\" or \"sbin\"" >&5 -echo "$as_me: error: <$use_binsubdir> is illegal - must be \"bin\" or \"sbin\"" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "<$use_binsubdir> is illegal - must be \"bin\" or \"sbin\"" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: result: $use_binsubdir" >&5 -echo "${ECHO_T}$use_binsubdir" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_binsubdir" >&5 +$as_echo "$use_binsubdir" >&6; } BINSUBDIR=$use_binsubdir -echo "$as_me:$LINENO: checking if we want to use arlib" >&5 -echo $ECHO_N "checking if we want to use arlib... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want to use arlib" >&5 +$as_echo_n "checking if we want to use arlib... " >&6; } -# Check whether --with-arlib or --without-arlib was given. -if test "${with_arlib+set}" = set; then - withval="$with_arlib" - ans=$withval +# Check whether --with-arlib was given. +if test "${with_arlib+set}" = set; then : + withval=$with_arlib; ans=$withval else ans=no -fi; -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } if test -d $srcdir/arlib then @@ -13971,13 +8410,13 @@ fi -# Check whether --with-rpath or --without-rpath was given. -if test "${with_rpath+set}" = set; then - withval="$with_rpath" - ans=$withval +# Check whether --with-rpath was given. +if test "${with_rpath+set}" = set; then : + withval=$with_rpath; ans=$withval else ans=x -fi; +fi + case "$ans" in no) need_dash_r= @@ -14007,522 +8446,6 @@ case "$host" in ;; esac -echo "$as_me:$LINENO: checking if we should use /dev/clockctl" >&5 -echo $ECHO_N "checking if we should use /dev/clockctl... $ECHO_C" >&6 -if test "${ac_clockctl+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-clockctl or --disable-clockctl was given. -if test "${enable_clockctl+set}" = set; then - enableval="$enable_clockctl" - ans=$enableval -else - case "$host" in - *-*-netbsd*) - ans=yes - ;; - *) ans=no - ;; - esac - -fi; -ac_clockctl=$ans -fi -echo "$as_me:$LINENO: result: $ac_clockctl" >&5 -echo "${ECHO_T}$ac_clockctl" >&6 -# End of AC_CACHE_CHECK for clockctl - -for ac_header in sys/clockctl.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -case "$ac_clockctl$ac_cv_header_sys_clockctl_h" in - yesyes) - -cat >>confdefs.h <<\_ACEOF -#define HAVE_DROPROOT -_ACEOF - - ;; -esac - -echo "$as_me:$LINENO: checking if we have linux capabilities (libcap)" >&5 -echo $ECHO_N "checking if we have linux capabilities (libcap)... $ECHO_C" >&6 -if test "${ac_linuxcaps+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-linuxcaps or --disable-linuxcaps was given. -if test "${enable_linuxcaps+set}" = set; then - enableval="$enable_linuxcaps" - ans=$enableval -else - ans=no -fi; -ac_linuxcaps=$ans -fi -echo "$as_me:$LINENO: result: $ac_linuxcaps" >&5 -echo "${ECHO_T}$ac_linuxcaps" >&6 -# End of AC_CACHE_CHECK for linuxcaps - -for ac_header in sys/capability.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - - -for ac_header in sys/prctl.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then - cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF - -fi - -done - -case "$ac_linuxcaps$ac_cv_header_sys_capability_h$ac_cv_header_sys_prctl_h" in - yesyesyes) - -cat >>confdefs.h <<\_ACEOF -#define HAVE_LINUX_CAPABILITIES -_ACEOF - - -cat >>confdefs.h <<\_ACEOF -#define HAVE_DROPROOT -_ACEOF - - LIBS="$LIBS -lcap" - ;; -esac case "$build" in $host) @@ -14531,9 +8454,7 @@ case "$build" in *-*-vxworks*) # Quick and dirty sanity check case "$VX_KERNEL" in - '') { { echo "$as_me:$LINENO: error: Please follow the directions in html/build/hints/vxworks.html!" >&5 -echo "$as_me: error: Please follow the directions in html/build/hints/vxworks.html!" >&2;} - { (exit 1); exit 1; }; } + '') as_fn_error "Please follow the directions in html/build/hints/vxworks.html!" "$LINENO" 5 ;; esac CFLAGS="$CFLAGS -DSYS_VXWORKS" @@ -14546,10 +8467,10 @@ for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -14559,55 +8480,59 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$AWK" && break done -echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF +SHELL = /bin/sh all: - @echo 'ac_maketemp="$(MAKE)"' + @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac rm -f conftest.make fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -14626,10 +8551,26 @@ case "$GCC" in CFLAGS="$CFLAGS -Wmissing-prototypes" CFLAGS="$CFLAGS -Wpointer-arith" CFLAGS="$CFLAGS -Wshadow" - CFLAGS="$CFLAGS -Wstrict-prototypes" + # + # OpenSSL has a number of callback prototypes + # inside other function prototypes which trigger + # warnings with -Wstrict-prototypes, such as: + # + # int i2d_RSA_NET(const RSA *a, unsigned char **pp, + # int (*cb)(), int sgckey); + # ^^^^^^^^^^^ + # + CFLAGS="$CFLAGS -Wno-strict-prototypes" # CFLAGS="$CFLAGS -Wtraditional" # CFLAGS="$CFLAGS -Wwrite-strings" - + case "$ac_cv_gcc_Winit_self" in + yes) + CFLAGS="$CFLAGS -Winit-self" + esac + case "$ac_cv_gcc_Wstrict_overflow" in + yes) + #not yet: CFLAGS="$CFLAGS -Wstrict-overflow" + esac ;; esac @@ -14661,9 +8602,7 @@ case "$ac_busted_vpath_in_make$srcdir" in yes.) ;; *) case "`${MAKE-make} -v -f /dev/null 2>/dev/null | sed -e 's/GNU Make version \(1-9.]*\).*/\1/' -e q`" in '') - { { echo "$as_me:$LINENO: error: building outside of the main directory requires GNU make" >&5 -echo "$as_me: error: building outside of the main directory requires GNU make" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "building outside of the main directory requires GNU make" "$LINENO" 5 ;; *) ;; esac @@ -14671,69 +8610,12 @@ echo "$as_me: error: building outside of the main directory requires GNU make" > esac -# HMS: From bunnylou/cowbird -case "$host" in - alpha-dec-osf4.0) - # Check whether --enable-shared or --disable-shared was given. -if test "${enable_shared+set}" = set; then - enableval="$enable_shared" - p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=no -fi; - ;; - *) # So far, the only shared library we might use is libopts. - # It's a small library - we might as well use a static version of it. - # Check whether --enable-shared or --disable-shared was given. -if test "${enable_shared+set}" = set; then - enableval="$enable_shared" - p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=no -fi; - - ;; -esac - -# Check whether --enable-static or --disable-static was given. -if test "${enable_static+set}" = set; then - enableval="$enable_static" - p=${PACKAGE-default} +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; @@ -14752,12 +8634,12 @@ if test "${enable_static+set}" = set; then esac else enable_static=yes -fi; +fi -# Check whether --enable-fast-install or --disable-fast-install was given. -if test "${enable_fast_install+set}" = set; then - enableval="$enable_fast_install" - p=${PACKAGE-default} + +# Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; @@ -14776,12 +8658,13 @@ if test "${enable_fast_install+set}" = set; then esac else enable_fast_install=yes -fi; +fi -echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 -echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 -if test "${lt_cv_path_SED+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${lt_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. @@ -14832,22 +8715,22 @@ done fi SED=$lt_cv_path_SED -echo "$as_me:$LINENO: result: $SED" >&5 -echo "${ECHO_T}$SED" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5 +$as_echo "$SED" >&6; } -# Check whether --with-gnu-ld or --without-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval="$with_gnu_ld" - test "$withval" = no || with_gnu_ld=yes +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no -fi; +fi + ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. - echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw @@ -14876,14 +8759,14 @@ echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 ;; esac elif test "$with_gnu_ld" = yes; then - echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } else - echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR @@ -14913,19 +8796,17 @@ fi LD="$lt_cv_path_LD" if test -n "$LD"; then - echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld -echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 -echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 -if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi -echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; @@ -14967,10 +8848,10 @@ case $host_os in ;; esac -echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 -echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 -if test "${lt_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD-compatible nm" >&5 +$as_echo_n "checking for BSD-compatible nm... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. @@ -15009,25 +8890,25 @@ else test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi -echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 -echo "${ECHO_T}$lt_cv_path_NM" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } NM="$lt_cv_path_NM" -echo "$as_me:$LINENO: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } fi -echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 -echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 -if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognise dependent libraries" >&5 +$as_echo_n "checking how to recognise dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= @@ -15196,8 +9077,8 @@ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) esac fi -echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown @@ -15211,11 +9092,11 @@ LTCC=${LTCC-"$CC"} # Allow CC to be a program name with arguments. compiler=$CC -# Check whether --enable-libtool-lock or --disable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval="$enable_libtool_lock" +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi -fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good @@ -15224,11 +9105,11 @@ case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" @@ -15242,12 +9123,12 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 15245 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + echo '#line 9126 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) @@ -15280,11 +9161,11 @@ ia64-*-hpux*) x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in @@ -15327,10 +9208,10 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" - echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 -echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 -if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -15338,11 +9219,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -15353,37 +9230,13 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -lt_cv_cc_needs_belf=no + lt_cv_cc_needs_belf=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -15391,8 +9244,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" @@ -15404,1103 +9257,26 @@ esac need_locks="$enable_libtool_lock" - for ac_header in dlfcn.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_DLFCN_H 1 _ACEOF fi done -ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_CXX" && break -done -test -n "$ac_ct_CXX" || ac_ct_CXX="g++" - - CXX=$ac_ct_CXX -fi - - -# Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 -GXX=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -CXXFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_prog_cxx_g=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi - -ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -depcc="$CXX" am_compiler_list= - -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - - -if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - - - -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 -echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -echo "$as_me:$LINENO: result: $CXXCPP" >&5 -echo "${ECHO_T}$CXXCPP" >&6 -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -fi - - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$F77"; then - ac_cv_prog_F77="$F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_F77="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -F77=$ac_cv_prog_F77 -if test -n "$F77"; then - echo "$as_me:$LINENO: result: $F77" >&5 -echo "${ECHO_T}$F77" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$F77" && break - done -fi -if test -z "$F77"; then - ac_ct_F77=$F77 - for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_F77"; then - ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_F77="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_F77=$ac_cv_prog_ac_ct_F77 -if test -n "$ac_ct_F77"; then - echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 -echo "${ECHO_T}$ac_ct_F77" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_F77" && break -done - - F77=$ac_ct_F77 -fi - - -# Provide some information about the compiler. -echo "$as_me:16351:" \ - "checking for Fortran 77 compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -rm -f a.out - -# If we don't use `.F' as extension, the preprocessor is not run on the -# input file. (Note that this only needs to work for GNU compilers.) -ac_save_ext=$ac_ext -ac_ext=F -echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 -if test "${ac_cv_f77_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF - program main -#ifndef __GNUC__ - choke me -#endif - - end -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_f77_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 -ac_ext=$ac_save_ext -ac_test_FFLAGS=${FFLAGS+set} -ac_save_FFLAGS=$FFLAGS -FFLAGS= -echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 -echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_f77_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - FFLAGS=-g -cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_f77_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_prog_f77_g=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 -echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 -if test "$ac_test_FFLAGS" = set; then - FFLAGS=$ac_save_FFLAGS -elif test $ac_cv_prog_f77_g = yes; then - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-g -O2" - else - FFLAGS="-g" - fi -else - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-O2" - else - FFLAGS= - fi -fi - -G77=`test $ac_compiler_gnu = yes && echo yes` -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments -echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 -echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 -if test "${lt_cv_sys_max_cmd_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" @@ -16589,21 +9365,21 @@ else fi if test -n $lt_cv_sys_max_cmd_len ; then - echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 -echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } else - echo "$as_me:$LINENO: result: none" >&5 -echo "${ECHO_T}none" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } fi # Check for command to grab the raw symbol name followed by C symbol from nm. -echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 -echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. @@ -16696,18 +9472,18 @@ void nm_test_func(){} int main(){nm_test_var='a';nm_test_func();return(0);} EOF - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm - if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s "$nlist"; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" @@ -16758,11 +9534,11 @@ EOF lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext}; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" @@ -16796,17 +9572,17 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - echo "$as_me:$LINENO: result: failed" >&5 -echo "${ECHO_T}failed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } else - echo "$as_me:$LINENO: result: ok" >&5 -echo "${ECHO_T}ok" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } fi -echo "$as_me:$LINENO: checking for objdir" >&5 -echo $ECHO_N "checking for objdir... $ECHO_C" >&6 -if test "${lt_cv_objdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null @@ -16818,8 +9594,8 @@ else fi rmdir .libs 2>/dev/null fi -echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 -echo "${ECHO_T}$lt_cv_objdir" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir @@ -16870,10 +9646,10 @@ with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. @@ -16883,35 +9659,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. @@ -16921,28 +9699,38 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 -echo "${ECHO_T}$ac_ct_AR" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - AR=$ac_ct_AR + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi else AR="$ac_cv_prog_AR" fi @@ -16950,10 +9738,10 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -16963,35 +9751,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. @@ -17001,28 +9791,38 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - RANLIB=$ac_ct_RANLIB + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi else RANLIB="$ac_cv_prog_RANLIB" fi @@ -17030,10 +9830,10 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. @@ -17043,35 +9843,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. @@ -17081,28 +9883,38 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - STRIP=$ac_ct_STRIP + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi else STRIP="$ac_cv_prog_STRIP" fi @@ -17160,10 +9972,10 @@ cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 -echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) @@ -17213,19 +10025,19 @@ fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then - echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - echo "$as_me:$LINENO: checking for file" >&5 -echo $ECHO_N "checking for file... $ECHO_C" >&6 -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) @@ -17275,11 +10087,11 @@ fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then - echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi else @@ -17294,21 +10106,21 @@ esac enable_dlopen=no enable_win32_dll=no -# Check whether --enable-libtool-lock or --disable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval="$enable_libtool_lock" +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi -fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes -# Check whether --with-pic or --without-pic was given. -if test "${with_pic+set}" = set; then - withval="$with_pic" - pic_mode="$withval" +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" else pic_mode=default -fi; +fi + test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script @@ -17368,12 +10180,12 @@ if test "$GCC" = no; then esac fi if test -n "$lt_prog_cc_shlib"; then - { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 -echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 +$as_echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : else - { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 -echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 +$as_echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} lt_cv_prog_cc_can_build_shared=no fi fi @@ -17382,10 +10194,10 @@ fi # # Check to make sure the static flag actually works. # -echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 -if test "${lt_prog_compiler_static_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_prog_compiler_static works" >&5 +$as_echo_n "checking if $compiler static flag $lt_prog_compiler_static works... " >&6; } +if test "${lt_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" @@ -17410,8 +10222,8 @@ else LDFLAGS="$save_LDFLAGS" fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_static_works" >&5 +$as_echo "$lt_prog_compiler_static_works" >&6; } if test x"$lt_prog_compiler_static_works" = xyes; then : @@ -17428,10 +10240,10 @@ if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' -echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext @@ -17446,11 +10258,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17449: $lt_compile\"" >&5) + (eval echo "\"\$as_me:10261: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:17453: \$? = $ac_status" >&5 + echo "$as_me:10265: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -17463,8 +10275,8 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -17478,8 +10290,8 @@ lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' @@ -17682,18 +10494,18 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 esac fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext @@ -17708,11 +10520,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17711: $lt_compile\"" >&5) + (eval echo "\"\$as_me:10523: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:17715: \$? = $ac_status" >&5 + echo "$as_me:10527: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -17725,8 +10537,8 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_works" >&5 +$as_echo "$lt_prog_compiler_pic_works" >&6; } if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in @@ -17749,10 +10561,10 @@ case $host_os in ;; esac -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null @@ -17770,11 +10582,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:17773: $lt_compile\"" >&5) + (eval echo "\"\$as_me:10585: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:17777: \$? = $ac_status" >&5 + echo "$as_me:10589: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17796,34 +10608,34 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -18174,11 +10986,7 @@ EOF # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -18189,41 +10997,16 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -18235,11 +11018,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -18250,41 +11029,16 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -18718,8 +11472,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi esac fi -echo "$as_me:$LINENO: result: $ld_shlibs" >&5 -echo "${ECHO_T}$ld_shlibs" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -18744,16 +11498,16 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext @@ -18766,11 +11520,11 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >& libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } then archive_cmds_need_lc=no else @@ -18781,16 +11535,16 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >& cat conftest.err 1>&5 fi $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 -echo "${ECHO_T}$archive_cmds_need_lc" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= @@ -19343,12 +12097,12 @@ uts4*) dynamic_linker=no ;; esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ @@ -19372,8 +12126,8 @@ else # directories. hardcode_action=unsupported fi -echo "$as_me:$LINENO: result: $hardcode_action" >&5 -echo "${ECHO_T}$hardcode_action" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink; then # Fast installation is not supported @@ -19386,29 +12140,29 @@ fi striplib= old_striplib= -echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi ;; *) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac fi @@ -19440,71 +12194,43 @@ else darwin*) # if libdl is installed we need to link against it - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else @@ -19517,458 +12243,168 @@ fi ;; *) - echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shl_load - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_shl_load) || defined (__stub___shl_load) -choke me -#else -char (*f) () = shl_load; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != shl_load; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_shl_load=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6 -if test $ac_cv_func_shl_load = yes; then + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" else - echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char shl_load (); int main () { -shl_load (); +return shl_load (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_shl_load=no + ac_cv_lib_dld_shl_load=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 -if test $ac_cv_lib_dld_shl_load = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else - echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_dlopen) || defined (__stub___dlopen) -choke me -#else -char (*f) () = dlopen; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != dlopen; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6 -if test $ac_cv_func_dlopen = yes; then + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" else - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else - echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_svld_dlopen=no + ac_cv_lib_svld_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 -if test $ac_cv_lib_svld_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else - echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dld_link (); int main () { -dld_link (); +return dld_link (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_dld_link=no + ac_cv_lib_dld_dld_link=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 -if test $ac_cv_lib_dld_dld_link = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi @@ -20007,10 +12443,10 @@ fi save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" - echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross @@ -20018,7 +12454,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -20100,15 +12536,15 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" - echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross @@ -20116,7 +12552,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -20198,8 +12634,8 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" @@ -20221,13 +12657,13 @@ fi # Report which librarie types wil actually be built -echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } -echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -20247,15 +12683,15 @@ aix4* | aix5*) fi ;; esac -echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } -echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes -echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh @@ -20346,8 +12782,8 @@ if test -f "$ltmain"; then cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" - { echo "$as_me:$LINENO: creating $ofile" >&5 -echo "$as_me: creating $ofile" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ofile" >&5 +$as_echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL @@ -20744,26 +13180,26 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" -# Check whether --with-tags or --without-tags was given. -if test "${with_tags+set}" = set; then - withval="$with_tags" - tagnames="$withval" -fi; +# Check whether --with-tags was given. +if test "${with_tags+set}" = set; then : + withval=$with_tags; tagnames="$withval" +fi + if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: output file \`$ofile' does not exist" >&5 +$as_echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: output file \`$ofile' does not look like a libtool script" >&5 +$as_echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else - { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 -echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 +$as_echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi @@ -20777,17 +13213,13 @@ echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; - *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 -echo "$as_me: error: invalid tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } + *) as_fn_error "invalid tag name: $tagname" "$LINENO" 5 ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then - { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 -echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "tag name \"$tagname\" already exists" "$LINENO" 5 fi # Update the list of available tags. @@ -20799,3641 +13231,7 @@ echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then - ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_flag_spec_ld_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_automatic_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *) { return(0); }\n' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -compiler_CXX=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' -else - lt_prog_compiler_no_builtin_flag_CXX= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - -# Check whether --with-gnu-ld or --without-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval="$with_gnu_ld" - test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi; -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 -else - echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -echo "${ECHO_T}$LD" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 -ld_shlibs_CXX=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct_CXX=yes - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - # -bexpall does not export symbols beginning with underscore (_) - always_export_symbols_CXX=yes - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX=' ' - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - else - ld_shlibs_CXX=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - whole_archive_flag_spec_CXX='' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_CXX=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - freebsd[12]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - ld_shlibs_CXX=no - ;; - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - freebsd* | kfreebsd*-gnu | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - gnu*) - ;; - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld_CXX='+b $libdir' - hardcode_libdir_separator_CXX=: - ;; - ia64*) - hardcode_libdir_flag_spec_CXX='-L$libdir' - ;; - *) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - *) - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*|ia64*) - archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - ia64*|hppa*64*) - archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - ;; - linux*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - openbsd*) - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - sco*) - archive_cmds_need_lc_CXX=no - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The C++ compiler is used as linker so we must use $wl - # flag to pass the commands to the underlying system - # linker. We must also pass each convience library through - # to the system linker between allextract/defaultextract. - # The C++ compiler will combine linker options so we - # cannot just pass the convience library names through - # without $wl. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - fi - ;; - esac - ;; - sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) - archive_cmds_need_lc_CXX=no - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; -esac -echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6 -test "$ld_shlibs_CXX" = no && can_build_shared=no - -GCC_CXX="$GXX" -LD_CXX="$LD" - - -cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - # The `*' in the case matches for architectures that use `case' in - # $output_verbose_cmd can trigger glob expansion during the loop - # eval without this substitution. - output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` - - for p in `eval $output_verbose_link_cmd`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" \ - || test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$rm -f confest.$objext - -# PORTME: override above test on systems where it is broken -case $host_os in -solaris*) - case $cc_basename in - CC*) - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - postdeps_CXX='-lCstd -lCrun' - ;; - esac -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - -lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_CXX='-qnocommon' - lt_prog_compiler_wl_CXX='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | kfreebsd*-gnu | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - sco*) - case $cc_basename in - CC*) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - *) - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - unixware*) - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:22374: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:22378: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp - $SED '/^$/d' conftest.err >conftest.er2 - if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_CXX=yes - fi - fi - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 - -if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:22436: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:22440: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp - $SED '/^$/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw*) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6 -test "$ld_shlibs_CXX" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_CXX=no - else - archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 - ;; - esac - fi - ;; -esac - -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -kfreebsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - *) # from 3.2 on - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -knetbsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -sco3.2v5*) - version_type=osf - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 -test "$dynamic_linker" = no && can_build_shared=no - -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || \ - test -n "$runpath_var_CXX" || \ - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 -echo "${ECHO_T}$hardcode_action_CXX" >&6 - -if test "$hardcode_action_CXX" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -striplib= -old_striplib= -echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - ;; - *) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - ;; - esac -fi - -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main () -{ -dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shl_load - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_shl_load) || defined (__stub___shl_load) -choke me -#else -char (*f) () = shl_load; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != shl_load; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_shl_load=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6 -if test $ac_cv_func_shl_load = yes; then - lt_cv_dlopen="shl_load" -else - echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -int -main () -{ -shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dld_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_shl_load=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 -if test $ac_cv_lib_dld_shl_load = yes; then - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" -else - echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_dlopen) || defined (__stub___dlopen) -choke me -#else -char (*f) () = dlopen; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != dlopen; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6 -if test $ac_cv_func_dlopen = yes; then - lt_cv_dlopen="dlopen" -else - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main () -{ -dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main () -{ -dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_svld_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_svld_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 -if test $ac_cv_lib_svld_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dld_link (); -int -main () -{ -dld_link (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dld_dld_link=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_dld_link=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 -if test $ac_cv_lib_dld_dld_link = yes; then - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_unknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6 - - if test "x$lt_cv_dlopen_self" = xyes; then - LDFLAGS="$LDFLAGS $link_static_flag" - echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_CXX \ - CC_CXX \ - LD_CXX \ - lt_prog_compiler_wl_CXX \ - lt_prog_compiler_pic_CXX \ - lt_prog_compiler_static_CXX \ - lt_prog_compiler_no_builtin_flag_CXX \ - export_dynamic_flag_spec_CXX \ - thread_safe_flag_spec_CXX \ - whole_archive_flag_spec_CXX \ - enable_shared_with_static_runtimes_CXX \ - old_archive_cmds_CXX \ - old_archive_from_new_cmds_CXX \ - predep_objects_CXX \ - postdep_objects_CXX \ - predeps_CXX \ - postdeps_CXX \ - compiler_lib_search_path_CXX \ - archive_cmds_CXX \ - archive_expsym_cmds_CXX \ - postinstall_cmds_CXX \ - postuninstall_cmds_CXX \ - old_archive_from_expsyms_cmds_CXX \ - allow_undefined_flag_CXX \ - no_undefined_flag_CXX \ - export_symbols_cmds_CXX \ - hardcode_libdir_flag_spec_CXX \ - hardcode_libdir_flag_spec_ld_CXX \ - hardcode_libdir_separator_CXX \ - hardcode_automatic_CXX \ - module_cmds_CXX \ - module_expsym_cmds_CXX \ - lt_cv_prog_compiler_c_o_CXX \ - exclude_expsyms_CXX \ - include_expsyms_CXX; do - - case $var in - old_archive_cmds_CXX | \ - old_archive_from_new_cmds_CXX | \ - archive_cmds_CXX | \ - archive_expsym_cmds_CXX | \ - module_cmds_CXX | \ - module_expsym_cmds_CXX | \ - old_archive_from_expsyms_cmds_CXX | \ - export_symbols_cmds_CXX | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# A language-specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_CXX - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_CXX -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_CXX - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_CXX" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld - + : else tagname="" fi @@ -24441,2458 +13239,7 @@ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld F77) if test -n "$F77" && test "X$F77" != "Xno"; then - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu - - -archive_cmds_need_lc_F77=no -allow_undefined_flag_F77= -always_export_symbols_F77=no -archive_expsym_cmds_F77= -export_dynamic_flag_spec_F77= -hardcode_direct_F77=no -hardcode_libdir_flag_spec_F77= -hardcode_libdir_flag_spec_ld_F77= -hardcode_libdir_separator_F77= -hardcode_minus_L_F77=no -hardcode_automatic_F77=no -module_cmds_F77= -module_expsym_cmds_F77= -link_all_deplibs_F77=unknown -old_archive_cmds_F77=$old_archive_cmds -no_undefined_flag_F77= -whole_archive_flag_spec_F77= -enable_shared_with_static_runtimes_F77=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -objext_F77=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code=" subroutine t\n return\n end\n" - -# Code to be used in simple link tests -lt_simple_link_test_code=" program t\n end\n" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -compiler_F77=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6 - -echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6 - -echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6 - -test "$ld_shlibs_F77" = no && can_build_shared=no - -GCC_F77="$G77" -LD_F77="$LD" - -lt_prog_compiler_wl_F77= -lt_prog_compiler_pic_F77= -lt_prog_compiler_static_F77= - -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 - - if test "$GCC" = yes; then - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_static_F77='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_F77='-fno-common' - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_F77=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_F77=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_F77='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - else - lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_F77='-qnocommon' - lt_prog_compiler_wl_F77='-Wl,' - ;; - esac - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_F77='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_F77='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - linux*) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-fpic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_F77='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_F77='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - - sco3.2v5*) - lt_prog_compiler_pic_F77='-Kpic' - lt_prog_compiler_static_F77='-dn' - ;; - - solaris*) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_F77='-Qoption ld ';; - *) - lt_prog_compiler_wl_F77='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_F77='-Qoption ld ' - lt_prog_compiler_pic_F77='-PIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_F77='-Kconform_pic' - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - unicos*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_can_build_shared_F77=no - ;; - - uts4*) - lt_prog_compiler_pic_F77='-pic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_F77=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_F77"; then - -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_F77=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_F77" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:24796: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:24800: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp - $SED '/^$/d' conftest.err >conftest.er2 - if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_F77=yes - fi - fi - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 - -if test x"$lt_prog_compiler_pic_works_F77" = xyes; then - case $lt_prog_compiler_pic_F77 in - "" | " "*) ;; - *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; - esac -else - lt_prog_compiler_pic_F77= - lt_prog_compiler_can_build_shared_F77=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_F77= - ;; - *) - lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" - ;; -esac - -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_F77=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:24858: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:24862: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp - $SED '/^$/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_F77=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 - - runpath_var= - allow_undefined_flag_F77= - enable_shared_with_static_runtimes_F77=no - archive_cmds_F77= - archive_expsym_cmds_F77= - old_archive_From_new_cmds_F77= - old_archive_from_expsyms_cmds_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - thread_safe_flag_spec_F77= - hardcode_libdir_flag_spec_F77= - hardcode_libdir_flag_spec_ld_F77= - hardcode_libdir_separator_F77= - hardcode_direct_F77=no - hardcode_minus_L_F77=no - hardcode_shlibpath_var_F77=unsupported - link_all_deplibs_F77=unknown - hardcode_automatic_F77=no - module_cmds_F77= - module_expsym_cmds_F77= - always_export_symbols_F77=no - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_F77= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_F77=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_F77='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_F77= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_F77=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_F77=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_F77='-L$libdir' - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=no - enable_shared_with_static_runtimes_F77=yes - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - else - ld_shlibs_F77=no - fi - ;; - - linux*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs_F77=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris* | sysv5*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - sunos4*) - archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - - if test "$ld_shlibs_F77" = no; then - runpath_var= - hardcode_libdir_flag_spec_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=yes - archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_F77=yes - if test "$GCC" = yes && test -z "$link_static_flag"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_F77=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_F77='' - hardcode_direct_F77=yes - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct_F77=yes - else - # We have old collect2 - hardcode_direct_F77=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_F77=yes - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_libdir_separator_F77= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_F77=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_F77='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_F77="-z nodefs" - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_F77=' ${wl}-bernotok' - allow_undefined_flag_F77=' ${wl}-berok' - # -bexpall does not export symbols beginning with underscore (_) - always_export_symbols_F77=yes - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_F77=' ' - archive_cmds_need_lc_F77=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_F77=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_F77=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_F77=' ' - allow_undefined_flag_F77=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_F77='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_F77='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_F77=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_F77=no - hardcode_direct_F77=no - hardcode_automatic_F77=yes - hardcode_shlibpath_var_F77=unsupported - whole_archive_flag_spec_F77='' - link_all_deplibs_F77=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_F77=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - freebsd1*) - ld_shlibs_F77=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | kfreebsd*-gnu | dragonfly*) - archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - ;; - - hpux10* | hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*|ia64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*|ia64*) - archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' - ;; - *) - archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld_F77='+b $libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - ;; - ia64*) - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - ;; - *) - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - link_all_deplibs_F77=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - newsos6) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_shlibpath_var_F77=no - ;; - - openbsd*) - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - ;; - *) - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - ;; - esac - fi - ;; - - os2*) - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - allow_undefined_flag_F77=unsupported - archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_F77='-rpath $libdir' - fi - hardcode_libdir_separator_F77=: - ;; - - sco3.2v5*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - export_dynamic_flag_spec_F77='${wl}-Bexport' - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ;; - - solaris*) - no_undefined_flag_F77=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_shlibpath_var_F77=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. - # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; - *) - whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; - esac - link_all_deplibs_F77=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_F77='$CC -r -o $output$reload_objs' - hardcode_direct_F77=no - ;; - motorola) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_F77=no - ;; - - sysv4.3*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - export_dynamic_flag_spec_F77='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_F77=yes - fi - ;; - - sysv4.2uw2*) - archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_minus_L_F77=no - hardcode_shlibpath_var_F77=no - hardcode_runpath_var=yes - runpath_var=LD_RUN_PATH - ;; - - sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) - no_undefined_flag_F77='${wl}-z ${wl}text' - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_F77=no - ;; - - sysv5*) - no_undefined_flag_F77=' -z text' - # $CC -shared without GNU ld will not create a library from C++ - # object files and a static libstdc++, better avoid it by now - archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - hardcode_libdir_flag_spec_F77= - hardcode_shlibpath_var_F77=no - runpath_var='LD_RUN_PATH' - ;; - - uts4*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - *) - ld_shlibs_F77=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 -echo "${ECHO_T}$ld_shlibs_F77" >&6 -test "$ld_shlibs_F77" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_F77" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_F77=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_F77 in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_F77 - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_F77 - allow_undefined_flag_F77= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_F77=no - else - archive_cmds_need_lc_F77=yes - fi - allow_undefined_flag_F77=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 - ;; - esac - fi - ;; -esac - -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -kfreebsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - *) # from 3.2 on - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -knetbsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -sco3.2v5*) - version_type=osf - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 -test "$dynamic_linker" = no && can_build_shared=no - -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 -hardcode_action_F77= -if test -n "$hardcode_libdir_flag_spec_F77" || \ - test -n "$runpath_var_F77" || \ - test "X$hardcode_automatic_F77" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct_F77" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && - test "$hardcode_minus_L_F77" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_F77=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_F77=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_F77=unsupported -fi -echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 -echo "${ECHO_T}$hardcode_action_F77" >&6 - -if test "$hardcode_action_F77" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -striplib= -old_striplib= -echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - ;; - *) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - ;; - esac -fi - - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_F77 \ - CC_F77 \ - LD_F77 \ - lt_prog_compiler_wl_F77 \ - lt_prog_compiler_pic_F77 \ - lt_prog_compiler_static_F77 \ - lt_prog_compiler_no_builtin_flag_F77 \ - export_dynamic_flag_spec_F77 \ - thread_safe_flag_spec_F77 \ - whole_archive_flag_spec_F77 \ - enable_shared_with_static_runtimes_F77 \ - old_archive_cmds_F77 \ - old_archive_from_new_cmds_F77 \ - predep_objects_F77 \ - postdep_objects_F77 \ - predeps_F77 \ - postdeps_F77 \ - compiler_lib_search_path_F77 \ - archive_cmds_F77 \ - archive_expsym_cmds_F77 \ - postinstall_cmds_F77 \ - postuninstall_cmds_F77 \ - old_archive_from_expsyms_cmds_F77 \ - allow_undefined_flag_F77 \ - no_undefined_flag_F77 \ - export_symbols_cmds_F77 \ - hardcode_libdir_flag_spec_F77 \ - hardcode_libdir_flag_spec_ld_F77 \ - hardcode_libdir_separator_F77 \ - hardcode_automatic_F77 \ - module_cmds_F77 \ - module_expsym_cmds_F77 \ - lt_cv_prog_compiler_c_o_F77 \ - exclude_expsyms_F77 \ - include_expsyms_F77; do - - case $var in - old_archive_cmds_F77 | \ - old_archive_from_new_cmds_F77 | \ - archive_cmds_F77 | \ - archive_expsym_cmds_F77 | \ - module_cmds_F77 | \ - module_expsym_cmds_F77 | \ - old_archive_from_expsyms_cmds_F77 | \ - export_symbols_cmds_F77 | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_F77 - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# A language-specific compiler. -CC=$lt_compiler_F77 - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_F77 - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_F77 - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_F77 - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_F77 -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_F77 - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_F77 -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_F77 -archive_expsym_cmds=$lt_archive_expsym_cmds_F77 -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_F77 -module_expsym_cmds=$lt_module_expsym_cmds_F77 - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_F77 - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_F77 - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_F77 - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_F77 - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_F77 - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_F77 - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_F77 - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_F77 - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_F77 - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_F77 - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_F77" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_F77 - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_F77 - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_F77 - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_F77 - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - + : else tagname="" fi @@ -26902,7 +13249,6 @@ CC="$lt_save_CC" if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - # Source file extension for Java test sources. ac_ext=java @@ -26967,10 +13313,10 @@ if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' -echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext @@ -26985,11 +13331,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:26988: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13334: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:26992: \$? = $ac_status" >&5 + echo "$as_me:13338: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -27002,8 +13348,8 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" @@ -27017,8 +13363,8 @@ lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' @@ -27221,18 +13567,18 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 esac fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_GCJ" >&5 +$as_echo "$lt_prog_compiler_pic_GCJ" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... " >&6; } +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext @@ -27247,11 +13593,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:27250: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13596: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:27254: \$? = $ac_status" >&5 + echo "$as_me:13600: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -27264,8 +13610,8 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_works_GCJ" >&5 +$as_echo "$lt_prog_compiler_pic_works_GCJ" >&6; } if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in @@ -27288,10 +13634,10 @@ case $host_os in ;; esac -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null @@ -27309,11 +13655,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:27312: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13658: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:27316: \$? = $ac_status" >&5 + echo "$as_me:13662: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -27335,34 +13681,34 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_GCJ" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag_GCJ= @@ -27713,11 +14059,7 @@ EOF # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -27728,41 +14070,16 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -27774,11 +14091,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -27789,41 +14102,16 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -28257,8 +14545,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi esac fi -echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 -echo "${ECHO_T}$ld_shlibs_GCJ" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_GCJ" >&5 +$as_echo "$ld_shlibs_GCJ" >&6; } test "$ld_shlibs_GCJ" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -28283,16 +14571,16 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext @@ -28305,11 +14593,11 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >& libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } then archive_cmds_need_lc_GCJ=no else @@ -28320,16 +14608,16 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >& cat conftest.err 1>&5 fi $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_GCJ" >&5 +$as_echo "$archive_cmds_need_lc_GCJ" >&6; } ;; esac fi ;; esac -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= @@ -28882,12 +15170,12 @@ uts4*) dynamic_linker=no ;; esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ @@ -28911,8 +15199,8 @@ else # directories. hardcode_action_GCJ=unsupported fi -echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 -echo "${ECHO_T}$hardcode_action_GCJ" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_GCJ" >&5 +$as_echo "$hardcode_action_GCJ" >&6; } if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported @@ -28925,29 +15213,29 @@ fi striplib= old_striplib= -echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi ;; *) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac fi @@ -28979,71 +15267,43 @@ else darwin*) # if libdl is installed we need to link against it - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else @@ -29056,458 +15316,168 @@ fi ;; *) - echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shl_load - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_shl_load) || defined (__stub___shl_load) -choke me -#else -char (*f) () = shl_load; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != shl_load; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_shl_load=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6 -if test $ac_cv_func_shl_load = yes; then + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" else - echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char shl_load (); int main () { -shl_load (); +return shl_load (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_shl_load=no + ac_cv_lib_dld_shl_load=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 -if test $ac_cv_lib_dld_shl_load = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else - echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_dlopen) || defined (__stub___dlopen) -choke me -#else -char (*f) () = dlopen; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != dlopen; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6 -if test $ac_cv_func_dlopen = yes; then + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" else - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else - echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_svld_dlopen=no + ac_cv_lib_svld_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 -if test $ac_cv_lib_svld_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else - echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dld_link (); int main () { -dld_link (); +return dld_link (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_dld_link=no + ac_cv_lib_dld_dld_link=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 -if test $ac_cv_lib_dld_dld_link = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi @@ -29546,10 +15516,10 @@ fi save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" - echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross @@ -29557,7 +15527,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -29639,15 +15609,15 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" - echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross @@ -29655,7 +15625,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -29737,8 +15707,8 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" @@ -30180,7 +16150,6 @@ CC="$lt_save_CC" RC) - # Source file extension for RC test sources. ac_ext=rc @@ -30650,9 +16619,7 @@ CC="$lt_save_CC" ;; *) - { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 -echo "$as_me: error: Unsupported tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "Unsupported tag name: $tagname" "$LINENO" 5 ;; esac @@ -30670,9 +16637,7 @@ echo "$as_me: error: Unsupported tag name: $tagname" >&2;} chmod +x "$ofile" else rm -f "${ofile}T" - { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 -echo "$as_me: error: unable to update list of available tagged configurations." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "unable to update list of available tagged configurations." "$LINENO" 5 fi fi @@ -30695,45 +16660,31 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - -echo "$as_me:$LINENO: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } fi if test $ac_cv_c_compiler_gnu = yes; then - echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5 -echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6 -if test "${ac_cv_prog_gcc_traditional+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 +$as_echo_n "checking whether $CC needs -traditional... " >&6; } +if test "${ac_cv_prog_gcc_traditional+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1; then + $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no @@ -30742,40 +16693,32 @@ rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "$ac_pattern" >/dev/null 2>&1; then + $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi -echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5 -echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 +$as_echo "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi -echo "$as_me:$LINENO: checking for working volatile" >&5 -echo $ECHO_N "checking for working volatile... $ECHO_C" >&6 -if test "${ac_cv_c_volatile+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 +$as_echo_n "checking for working volatile... " >&6; } +if test "${ac_cv_c_volatile+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -30783,184 +16726,89 @@ main () { volatile int x; -int * volatile y; +int * volatile y = (int *) 0; +return !x && !y; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_volatile=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_c_volatile=no + ac_cv_c_volatile=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_c_volatile" >&5 -echo "${ECHO_T}$ac_cv_c_volatile" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 +$as_echo "$ac_cv_c_volatile" >&6; } if test $ac_cv_c_volatile = no; then -cat >>confdefs.h <<\_ACEOF -#define volatile -_ACEOF +$as_echo "#define volatile /**/" >>confdefs.h fi -echo "$as_me:$LINENO: checking for library containing strerror" >&5 -echo $ECHO_N "checking for library containing strerror... $ECHO_C" >&6 -if test "${ac_cv_search_strerror+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 +$as_echo_n "checking for library containing strerror... " >&6; } +if test "${ac_cv_search_strerror+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -ac_cv_search_strerror=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char strerror (); int main () { -strerror (); +return strerror (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_strerror="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_strerror" = no; then - for ac_lib in cposix; do +for ac_lib in '' cposix; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_strerror=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_strerror+set}" = set; then : + break +fi +done +if test "${ac_cv_search_strerror+set}" = set; then : -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char strerror (); -int -main () -{ -strerror (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_strerror="-l$ac_lib" -break else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done + ac_cv_search_strerror=no fi +rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_search_strerror" >&5 -echo "${ECHO_T}$ac_cv_search_strerror" >&6 -if test "$ac_cv_search_strerror" != no; then - test "$ac_cv_search_strerror" = "none required" || LIBS="$ac_cv_search_strerror $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 +$as_echo "$ac_cv_search_strerror" >&6; } +ac_res=$ac_cv_search_strerror +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi # Extract the first word of "sh", so it can be a program name with args. set dummy sh; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_PATH_SH+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PATH_SH+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $PATH_SH in [\\/]* | ?:[\\/]*) @@ -30972,34 +16820,35 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PATH_SH="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi PATH_SH=$ac_cv_path_PATH_SH - if test -n "$PATH_SH"; then - echo "$as_me:$LINENO: result: $PATH_SH" >&5 -echo "${ECHO_T}$PATH_SH" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PATH_SH" >&5 +$as_echo "$PATH_SH" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_path_PATH_PERL+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PATH_PERL+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $PATH_PERL in [\\/]* | ?:[\\/]*) @@ -31011,74 +16860,60 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PATH_PERL="$as_dir/$ac_word$ac_exec_ext" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS ;; esac fi PATH_PERL=$ac_cv_path_PATH_PERL - if test -n "$PATH_PERL"; then - echo "$as_me:$LINENO: result: $PATH_PERL" >&5 -echo "${ECHO_T}$PATH_PERL" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PATH_PERL" >&5 +$as_echo "$PATH_PERL" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define ACAT(a,b)a ## b ACAT(Cir,cus) _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Circus" >/dev/null 2>&1; then - cat >>confdefs.h <<\_ACEOF -#define ULONG_CONST(a) a ## UL -_ACEOF + $EGREP "Circus" >/dev/null 2>&1; then : + $as_echo "#define ULONG_CONST(a) a ## UL" >>confdefs.h else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define RCAT(a,b)a/**/b RCAT(Rei,ser) _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "Reiser" >/dev/null 2>&1; then - cat >>confdefs.h <<\_ACEOF -#define ULONG_CONST(a) a/**/L -_ACEOF + $EGREP "Reiser" >/dev/null 2>&1; then : + $as_echo "#define ULONG_CONST(a) a/**/L" >>confdefs.h else - { { echo "$as_me:$LINENO: error: How do we create an unsigned long constant?" >&5 -echo "$as_me: error: How do we create an unsigned long constant?" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "How do we create an unsigned long constant?" "$LINENO" 5 fi rm -f conftest* fi rm -f conftest* - + # remove for 4.2.5 case "$host" in *-*-vxworks*) @@ -31086,148 +16921,41 @@ case "$host" in ;; esac -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 -if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - done - done - ;; -esac -done - - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL=$ac_install_sh - fi -fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' case "$host" in *-pc-cygwin*) - -echo "$as_me:$LINENO: checking for main in -ladvapi32" >&5 -echo $ECHO_N "checking for main in -ladvapi32... $ECHO_C" >&6 -if test "${ac_cv_lib_advapi32_main+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ladvapi32" >&5 +$as_echo_n "checking for main in -ladvapi32... " >&6; } +if test "${ac_cv_lib_advapi32_main+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ladvapi32 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { -main (); +return main (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_advapi32_main=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_advapi32_main=no + ac_cv_lib_advapi32_main=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_advapi32_main" >&5 -echo "${ECHO_T}$ac_cv_lib_advapi32_main" >&6 -if test $ac_cv_lib_advapi32_main = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_advapi32_main" >&5 +$as_echo "$ac_cv_lib_advapi32_main" >&6; } +if test "x$ac_cv_lib_advapi32_main" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBADVAPI32 1 _ACEOF @@ -31239,412 +16967,180 @@ fi ;; esac -echo "$as_me:$LINENO: checking for gethostent" >&5 -echo $ECHO_N "checking for gethostent... $ECHO_C" >&6 -if test "${ac_cv_func_gethostent+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_fn_c_check_func "$LINENO" "gethostent" "ac_cv_func_gethostent" +if test "x$ac_cv_func_gethostent" = x""yes; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostent" >&5 +$as_echo_n "checking for library containing gethostent... " >&6; } +if test "${ac_cv_search_gethostent+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Define gethostent to an innocuous variant, in case declares gethostent. - For example, HP-UX 11i declares gettimeofday. */ -#define gethostent innocuous_gethostent -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char gethostent (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef gethostent - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -char gethostent (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_gethostent) || defined (__stub___gethostent) -choke me -#else -char (*f) () = gethostent; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != gethostent; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_gethostent=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_gethostent=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_gethostent" >&5 -echo "${ECHO_T}$ac_cv_func_gethostent" >&6 -if test $ac_cv_func_gethostent = yes; then - : -else - -echo "$as_me:$LINENO: checking for gethostent in -lnsl" >&5 -echo $ECHO_N "checking for gethostent in -lnsl... $ECHO_C" >&6 -if test "${ac_cv_lib_nsl_gethostent+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl $libxnet -lsocket $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char gethostent (); int main () { -gethostent (); +return gethostent (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_nsl_gethostent=yes +for ac_lib in '' nsl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $libxnet -lsocket $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_gethostent=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_gethostent+set}" = set; then : + break +fi +done +if test "${ac_cv_search_gethostent+set}" = set; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_nsl_gethostent=no + ac_cv_search_gethostent=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostent" >&5 -echo "${ECHO_T}$ac_cv_lib_nsl_gethostent" >&6 -if test $ac_cv_lib_nsl_gethostent = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBNSL 1 -_ACEOF - - LIBS="-lnsl $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostent" >&5 +$as_echo "$ac_cv_search_gethostent" >&6; } +ac_res=$ac_cv_search_gethostent +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi -echo "$as_me:$LINENO: checking for openlog" >&5 -echo $ECHO_N "checking for openlog... $ECHO_C" >&6 -if test "${ac_cv_func_openlog+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_fn_c_check_func "$LINENO" "openlog" "ac_cv_func_openlog" +if test "x$ac_cv_func_openlog" = x""yes; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing openlog" >&5 +$as_echo_n "checking for library containing openlog... " >&6; } +if test "${ac_cv_search_openlog+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Define openlog to an innocuous variant, in case declares openlog. - For example, HP-UX 11i declares gettimeofday. */ -#define openlog innocuous_openlog -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char openlog (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef openlog - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -char openlog (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_openlog) || defined (__stub___openlog) -choke me -#else -char (*f) () = openlog; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != openlog; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_openlog=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_openlog=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_openlog" >&5 -echo "${ECHO_T}$ac_cv_func_openlog" >&6 -if test $ac_cv_func_openlog = yes; then - : -else - -echo "$as_me:$LINENO: checking for openlog in -lgen" >&5 -echo $ECHO_N "checking for openlog in -lgen... $ECHO_C" >&6 -if test "${ac_cv_lib_gen_openlog+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lgen $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char openlog (); int main () { -openlog (); +return openlog (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_gen_openlog=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_gen_openlog=no +for ac_lib in '' gen; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_openlog=$ac_res fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_openlog+set}" = set; then : + break fi -echo "$as_me:$LINENO: result: $ac_cv_lib_gen_openlog" >&5 -echo "${ECHO_T}$ac_cv_lib_gen_openlog" >&6 -if test $ac_cv_lib_gen_openlog = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBGEN 1 -_ACEOF - - LIBS="-lgen $LIBS" +done +if test "${ac_cv_search_openlog+set}" = set; then : else + ac_cv_search_openlog=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_openlog" >&5 +$as_echo "$ac_cv_search_openlog" >&6; } +ac_res=$ac_cv_search_openlog +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" -echo "$as_me:$LINENO: checking for openlog in -lsyslog" >&5 -echo $ECHO_N "checking for openlog in -lsyslog... $ECHO_C" >&6 -if test "${ac_cv_lib_syslog_openlog+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsyslog $libxnet -lsocket $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing openlog" >&5 +$as_echo_n "checking for library containing openlog... " >&6; } +if test "${ac_cv_search_openlog+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char openlog (); int main () { -openlog (); +return openlog (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_syslog_openlog=yes +for ac_lib in '' syslog; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $libxnet -lsocket $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_openlog=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_openlog+set}" = set; then : + break +fi +done +if test "${ac_cv_search_openlog+set}" = set; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_syslog_openlog=no + ac_cv_search_openlog=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_syslog_openlog" >&5 -echo "${ECHO_T}$ac_cv_lib_syslog_openlog" >&6 -if test $ac_cv_lib_syslog_openlog = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBSYSLOG 1 -_ACEOF - - LIBS="-lsyslog $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_openlog" >&5 +$as_echo "$ac_cv_search_openlog" >&6; } +ac_res=$ac_cv_search_openlog +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi @@ -31652,402 +17148,83 @@ fi fi - -echo "$as_me:$LINENO: checking for MD5Init in -lmd5" >&5 -echo $ECHO_N "checking for MD5Init in -lmd5... $ECHO_C" >&6 -if test "${ac_cv_lib_md5_MD5Init+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing MD5Init" >&5 +$as_echo_n "checking for library containing MD5Init... " >&6; } +if test "${ac_cv_search_MD5Init+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmd5 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char MD5Init (); int main () { -MD5Init (); +return MD5Init (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_md5_MD5Init=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_md5_MD5Init=no +for ac_lib in '' md5 md; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_MD5Init=$ac_res fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_MD5Init+set}" = set; then : + break fi -echo "$as_me:$LINENO: result: $ac_cv_lib_md5_MD5Init" >&5 -echo "${ECHO_T}$ac_cv_lib_md5_MD5Init" >&6 -if test $ac_cv_lib_md5_MD5Init = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBMD5 1 -_ACEOF - - LIBS="-lmd5 $LIBS" +done +if test "${ac_cv_search_MD5Init+set}" = set; then : else - -echo "$as_me:$LINENO: checking for MD5Init in -lmd" >&5 -echo $ECHO_N "checking for MD5Init in -lmd... $ECHO_C" >&6 -if test "${ac_cv_lib_md_MD5Init+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lmd $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char MD5Init (); -int -main () -{ -MD5Init (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_md_MD5Init=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_md_MD5Init=no + ac_cv_search_MD5Init=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_md_MD5Init" >&5 -echo "${ECHO_T}$ac_cv_lib_md_MD5Init" >&6 -if test $ac_cv_lib_md_MD5Init = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBMD 1 -_ACEOF - - LIBS="-lmd $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_MD5Init" >&5 +$as_echo "$ac_cv_search_MD5Init" >&6; } +ac_res=$ac_cv_search_MD5Init +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi -fi - - for ac_func in MD5Init -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "MD5Init" "ac_cv_func_MD5Init" +if test "x$ac_cv_func_MD5Init" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_MD5INIT 1 _ACEOF fi done - +# following block becomes on 4.2.5: NTP_LINEEDITLIBS for ac_header in readline/history.h readline/readline.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -32060,72 +17237,43 @@ case "$ac_cv_header_readline_history_h$ac_cv_header_readline_readline_h" in LIBS= # Ralf Wildenhues: either unset ... or cache READLINE_LIBS unset ac_cv_lib_readline_readline - -echo "$as_me:$LINENO: checking for readline in -lreadline" >&5 -echo $ECHO_N "checking for readline in -lreadline... $ECHO_C" >&6 -if test "${ac_cv_lib_readline_readline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 +$as_echo_n "checking for readline in -lreadline... " >&6; } +if test "${ac_cv_lib_readline_readline+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char readline (); int main () { -readline (); +return readline (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_readline_readline=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_readline_readline=no + ac_cv_lib_readline_readline=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_readline_readline" >&5 -echo "${ECHO_T}$ac_cv_lib_readline_readline" >&6 -if test $ac_cv_lib_readline_readline = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5 +$as_echo "$ac_cv_lib_readline_readline" >&6; } +if test "x$ac_cv_lib_readline_readline" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBREADLINE 1 _ACEOF @@ -32133,160 +17281,96 @@ _ACEOF LIBS="-lreadline $LIBS" else - { echo "$as_me:$LINENO: Trying again with -lcurses" >&5 -echo "$as_me: Trying again with -lcurses" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Trying again with -lcurses" >&5 +$as_echo "$as_me: Trying again with -lcurses" >&6;} unset ac_cv_lib_readline_readline - echo "$as_me:$LINENO: checking for readline in -lreadline" >&5 -echo $ECHO_N "checking for readline in -lreadline... $ECHO_C" >&6 -if test "${ac_cv_lib_readline_readline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5 +$as_echo_n "checking for readline in -lreadline... " >&6; } +if test "${ac_cv_lib_readline_readline+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lreadline -lcurses $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char readline (); int main () { -readline (); +return readline (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_readline_readline=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_readline_readline=no + ac_cv_lib_readline_readline=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_readline_readline" >&5 -echo "${ECHO_T}$ac_cv_lib_readline_readline" >&6 -if test $ac_cv_lib_readline_readline = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5 +$as_echo "$ac_cv_lib_readline_readline" >&6; } +if test "x$ac_cv_lib_readline_readline" = x""yes; then : LIBS="-lreadline -lcurses $LIBS" - cat >>confdefs.h <<\_ACEOF -#define HAVE_LIBREADLINE 1 -_ACEOF + $as_echo "#define HAVE_LIBREADLINE 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define HAVE_LIBCURSES -_ACEOF +$as_echo "#define HAVE_LIBCURSES /**/" >>confdefs.h else - echo "$as_me:$LINENO: checking for readline in -ledit" >&5 -echo $ECHO_N "checking for readline in -ledit... $ECHO_C" >&6 -if test "${ac_cv_lib_edit_readline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -ledit" >&5 +$as_echo_n "checking for readline in -ledit... " >&6; } +if test "${ac_cv_lib_edit_readline+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ledit -lcurses $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char readline (); int main () { -readline (); +return readline (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_edit_readline=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_edit_readline=no + ac_cv_lib_edit_readline=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_edit_readline" >&5 -echo "${ECHO_T}$ac_cv_lib_edit_readline" >&6 -if test $ac_cv_lib_edit_readline = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_edit_readline" >&5 +$as_echo "$ac_cv_lib_edit_readline" >&6; } +if test "x$ac_cv_lib_edit_readline" = x""yes; then : LIBS="-ledit -lcurses" -cat >>confdefs.h <<\_ACEOF -#define HAVE_LIBEDIT -_ACEOF +$as_echo "#define HAVE_LIBEDIT /**/" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define HAVE_LIBCURSES -_ACEOF +$as_echo "#define HAVE_LIBCURSES /**/" >>confdefs.h fi @@ -32304,74 +17388,45 @@ esac case "$host" in - *-*-linux*) ;; + *-*-*linux*) ;; *) - -echo "$as_me:$LINENO: checking for sched_setscheduler in -lrt" >&5 -echo $ECHO_N "checking for sched_setscheduler in -lrt... $ECHO_C" >&6 -if test "${ac_cv_lib_rt_sched_setscheduler+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_setscheduler in -lrt" >&5 +$as_echo_n "checking for sched_setscheduler in -lrt... " >&6; } +if test "${ac_cv_lib_rt_sched_setscheduler+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char sched_setscheduler (); int main () { -sched_setscheduler (); +return sched_setscheduler (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_sched_setscheduler=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_rt_sched_setscheduler=no + ac_cv_lib_rt_sched_setscheduler=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_rt_sched_setscheduler" >&5 -echo "${ECHO_T}$ac_cv_lib_rt_sched_setscheduler" >&6 -if test $ac_cv_lib_rt_sched_setscheduler = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sched_setscheduler" >&5 +$as_echo "$ac_cv_lib_rt_sched_setscheduler" >&6; } +if test "x$ac_cv_lib_rt_sched_setscheduler" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBRT 1 _ACEOF @@ -32379,72 +17434,43 @@ _ACEOF LIBS="-lrt $LIBS" else - -echo "$as_me:$LINENO: checking for sched_setscheduler in -lposix4" >&5 -echo $ECHO_N "checking for sched_setscheduler in -lposix4... $ECHO_C" >&6 -if test "${ac_cv_lib_posix4_sched_setscheduler+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sched_setscheduler in -lposix4" >&5 +$as_echo_n "checking for sched_setscheduler in -lposix4... " >&6; } +if test "${ac_cv_lib_posix4_sched_setscheduler+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix4 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char sched_setscheduler (); int main () { -sched_setscheduler (); +return sched_setscheduler (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix4_sched_setscheduler=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_posix4_sched_setscheduler=no + ac_cv_lib_posix4_sched_setscheduler=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_posix4_sched_setscheduler" >&5 -echo "${ECHO_T}$ac_cv_lib_posix4_sched_setscheduler" >&6 -if test $ac_cv_lib_posix4_sched_setscheduler = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sched_setscheduler" >&5 +$as_echo "$ac_cv_lib_posix4_sched_setscheduler" >&6; } +if test "x$ac_cv_lib_posix4_sched_setscheduler" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBPOSIX4 1 _ACEOF @@ -32458,260 +17484,75 @@ fi ;; esac -echo "$as_me:$LINENO: checking for setsockopt" >&5 -echo $ECHO_N "checking for setsockopt... $ECHO_C" >&6 -if test "${ac_cv_func_setsockopt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_fn_c_check_func "$LINENO" "setsockopt" "ac_cv_func_setsockopt" +if test "x$ac_cv_func_setsockopt" = x""yes; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing setsockopt" >&5 +$as_echo_n "checking for library containing setsockopt... " >&6; } +if test "${ac_cv_search_setsockopt+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Define setsockopt to an innocuous variant, in case declares setsockopt. - For example, HP-UX 11i declares gettimeofday. */ -#define setsockopt innocuous_setsockopt -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char setsockopt (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef setsockopt - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -char setsockopt (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_setsockopt) || defined (__stub___setsockopt) -choke me -#else -char (*f) () = setsockopt; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != setsockopt; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_setsockopt=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_setsockopt=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_setsockopt" >&5 -echo "${ECHO_T}$ac_cv_func_setsockopt" >&6 -if test $ac_cv_func_setsockopt = yes; then - : -else - -echo "$as_me:$LINENO: checking for setsockopt in -lsocket" >&5 -echo $ECHO_N "checking for setsockopt in -lsocket... $ECHO_C" >&6 -if test "${ac_cv_lib_socket_setsockopt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char setsockopt (); int main () { -setsockopt (); +return setsockopt (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_socket_setsockopt=yes +for ac_lib in '' socket xnet; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_setsockopt=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_setsockopt+set}" = set; then : + break +fi +done +if test "${ac_cv_search_setsockopt+set}" = set; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_socket_setsockopt=no + ac_cv_search_setsockopt=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_socket_setsockopt" >&5 -echo "${ECHO_T}$ac_cv_lib_socket_setsockopt" >&6 -if test $ac_cv_lib_socket_setsockopt = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBSOCKET 1 -_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_setsockopt" >&5 +$as_echo "$ac_cv_search_setsockopt" >&6; } +ac_res=$ac_cv_search_setsockopt +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - LIBS="-lsocket $LIBS" +fi fi -echo "$as_me:$LINENO: checking for setsockopt in -lxnet" >&5 -echo $ECHO_N "checking for setsockopt in -lxnet... $ECHO_C" >&6 -if test "${ac_cv_lib_xnet_setsockopt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lxnet $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char setsockopt (); -int -main () -{ -setsockopt (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_xnet_setsockopt=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_xnet_setsockopt=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_xnet_setsockopt" >&5 -echo "${ECHO_T}$ac_cv_lib_xnet_setsockopt" >&6 -if test $ac_cv_lib_xnet_setsockopt = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBXNET 1 -_ACEOF - - LIBS="-lxnet $LIBS" - -fi - -fi - - -echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -32726,51 +17567,23 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no + ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -32780,18 +17593,14 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -32801,16 +17610,13 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include +#include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) @@ -32830,401 +17636,82 @@ main () for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); + return 2; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -ac_cv_header_stdc=no +else + ac_cv_header_stdc=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + fi fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi - for ac_header in bstring.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + ac_fn_c_check_header_mongrel "$LINENO" "bstring.h" "ac_cv_header_bstring_h" "$ac_includes_default" +if test "x$ac_cv_header_bstring_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_BSTRING_H 1 _ACEOF fi done -if test "${ac_cv_header_dns_sd_h+set}" = set; then - echo "$as_me:$LINENO: checking for dns_sd.h" >&5 -echo $ECHO_N "checking for dns_sd.h... $ECHO_C" >&6 -if test "${ac_cv_header_dns_sd_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_dns_sd_h" >&5 -echo "${ECHO_T}$ac_cv_header_dns_sd_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking dns_sd.h usability" >&5 -echo $ECHO_N "checking dns_sd.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking dns_sd.h presence" >&5 -echo $ECHO_N "checking dns_sd.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: dns_sd.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: dns_sd.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: dns_sd.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: dns_sd.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: dns_sd.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: dns_sd.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: dns_sd.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: dns_sd.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: dns_sd.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: dns_sd.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: dns_sd.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: dns_sd.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: dns_sd.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: dns_sd.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: dns_sd.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: dns_sd.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for dns_sd.h" >&5 -echo $ECHO_N "checking for dns_sd.h... $ECHO_C" >&6 -if test "${ac_cv_header_dns_sd_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_dns_sd_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_dns_sd_h" >&5 -echo "${ECHO_T}$ac_cv_header_dns_sd_h" >&6 - -fi -if test $ac_cv_header_dns_sd_h = yes; then - echo "$as_me:$LINENO: checking for DNSServiceRegister in -ldns_sd" >&5 -echo $ECHO_N "checking for DNSServiceRegister in -ldns_sd... $ECHO_C" >&6 -if test "${ac_cv_lib_dns_sd_DNSServiceRegister+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_fn_c_check_header_mongrel "$LINENO" "dns_sd.h" "ac_cv_header_dns_sd_h" "$ac_includes_default" +if test "x$ac_cv_header_dns_sd_h" = x""yes; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DNSServiceRegister in -ldns_sd" >&5 +$as_echo_n "checking for DNSServiceRegister in -ldns_sd... " >&6; } +if test "${ac_cv_lib_dns_sd_DNSServiceRegister+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldns_sd $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char DNSServiceRegister (); int main () { -DNSServiceRegister (); +return DNSServiceRegister (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dns_sd_DNSServiceRegister=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dns_sd_DNSServiceRegister=no + ac_cv_lib_dns_sd_DNSServiceRegister=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dns_sd_DNSServiceRegister" >&5 -echo "${ECHO_T}$ac_cv_lib_dns_sd_DNSServiceRegister" >&6 -if test $ac_cv_lib_dns_sd_DNSServiceRegister = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dns_sd_DNSServiceRegister" >&5 +$as_echo "$ac_cv_lib_dns_sd_DNSServiceRegister" >&6; } +if test "x$ac_cv_lib_dns_sd_DNSServiceRegister" = x""yes; then : -cat >>confdefs.h <<\_ACEOF -#define HAVE_DNSREGISTRATION 1 -_ACEOF +$as_echo "#define HAVE_DNSREGISTRATION 1" >>confdefs.h fi @@ -33234,153 +17721,14 @@ fi case "$ac_cv_lib_dns_sd_DNSServiceRegister" in yes) LIBS="-ldns_sd $LIBS" ;; esac - - - - for ac_header in errno.h fcntl.h ieeefp.h math.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -33393,64 +17741,16 @@ if test -f /etc/redhat-release then : else - -for ac_header in md5.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if HAVE_SYS_TYPES_H + for ac_header in md5.h +do : + ac_fn_c_check_header_compile "$LINENO" "md5.h" "ac_cv_header_md5_h" "#if HAVE_SYS_TYPES_H #include #endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +" +if test "x$ac_cv_header_md5_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_MD5_H 1 _ACEOF fi @@ -33458,459 +17758,42 @@ fi done fi - - - for ac_header in memory.h netdb.h poll.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done - - - - - for ac_header in sched.h sgtty.h stdlib.h string.h termio.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done - - - - for ac_header in termios.h timepps.h timex.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -33919,150 +17802,12 @@ done case "$host" in *-*-aix*) - -for ac_header in utmpx.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in utmpx.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "utmpx.h" "ac_cv_header_utmpx_h" "$ac_includes_default" +if test "x$ac_cv_header_utmpx_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_UTMPX_H 1 _ACEOF fi @@ -34071,150 +17816,12 @@ done case "$ac_cv_header_utmpx_h" in yes) ;; - *) -for ac_header in utmp.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + *) for ac_header in utmp.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "utmp.h" "ac_cv_header_utmp_h" "$ac_includes_default" +if test "x$ac_cv_header_utmp_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_UTMP_H 1 _ACEOF fi @@ -34223,151 +17830,14 @@ done ;; esac ;; - *) - -for ac_header in utmp.h utmpx.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + *) for ac_header in utmp.h utmpx.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -34375,902 +17845,104 @@ fi done ;; esac - for ac_header in arpa/nameser.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + ac_fn_c_check_header_mongrel "$LINENO" "arpa/nameser.h" "ac_cv_header_arpa_nameser_h" "$ac_includes_default" +if test "x$ac_cv_header_arpa_nameser_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_ARPA_NAMESER_H 1 _ACEOF fi done - for ac_header in sys/socket.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/socket.h" "ac_cv_header_sys_socket_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_socket_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_SOCKET_H 1 _ACEOF fi done - for ac_header in net/if.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if HAVE_SYS_SOCKET_H +do : + ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "#if HAVE_SYS_SOCKET_H #include #endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +" +if test "x$ac_cv_header_net_if_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_NET_IF_H 1 _ACEOF fi done - for ac_header in net/if6.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + ac_fn_c_check_header_mongrel "$LINENO" "net/if6.h" "ac_cv_header_net_if6_h" "$ac_includes_default" +if test "x$ac_cv_header_net_if6_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_NET_IF6_H 1 _ACEOF fi done - for ac_header in net/route.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - +do : + ac_fn_c_check_header_compile "$LINENO" "net/route.h" "ac_cv_header_net_route_h" " #include #include #include - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +" +if test "x$ac_cv_header_net_route_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_NET_ROUTE_H 1 _ACEOF fi done - - for ac_header in netinet/in_system.h netinet/in_systm.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done - for ac_header in netinet/in.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + ac_fn_c_check_header_mongrel "$LINENO" "netinet/in.h" "ac_cv_header_netinet_in_h" "$ac_includes_default" +if test "x$ac_cv_header_netinet_in_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_NETINET_IN_H 1 _ACEOF fi done - for ac_header in netinet/ip.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if HAVE_SYS_TYPES_H +do : + ac_fn_c_check_header_compile "$LINENO" "netinet/ip.h" "ac_cv_header_netinet_ip_h" "#if HAVE_SYS_TYPES_H #include #endif #if HAVE_NETINET_IN_H @@ -35280,45 +17952,10 @@ cat >>conftest.$ac_ext <<_ACEOF #include #endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +" +if test "x$ac_cv_header_netinet_ip_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_NETINET_IP_H 1 _ACEOF fi @@ -35326,455 +17963,86 @@ fi done +# Check for IPTOS_PREC +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking IPPROTO_IP IP_TOS IPTOS_LOWDELAY" >&5 +$as_echo_n "checking IPPROTO_IP IP_TOS IPTOS_LOWDELAY... " >&6; } +if test "${ac_cv_ip_tos+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #if HAVE_SYS_TYPES_H + #include + #endif + #if HAVE_NETINET_IP_H + #include + #include + #endif + #if defined(IPPROTO_IP) && defined(IP_TOS) && defined(IPTOS_LOWDELAY) + yes + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ac_cv_ip_tos=yes +else + ac_cv_ip_tos=no + +fi +rm -f conftest* + + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_ip_tos" >&5 +$as_echo "$ac_cv_ip_tos" >&6; } + +case "$ac_cv_ip_tos" in + yes) + +$as_echo "#define HAVE_IPTOS_SUPPORT 1" >>confdefs.h + +esac + for ac_header in netinfo/ni.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + ac_fn_c_check_header_mongrel "$LINENO" "netinfo/ni.h" "ac_cv_header_netinfo_ni_h" "$ac_includes_default" +if test "x$ac_cv_header_netinfo_ni_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_NETINFO_NI_H 1 _ACEOF -cat >>confdefs.h <<\_ACEOF -#define HAVE_NETINFO 1 -_ACEOF +$as_echo "#define HAVE_NETINFO 1" >>confdefs.h fi done - - for ac_header in sun/audioio.h sys/audioio.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done - - for ac_header in sys/clkdefs.h sys/file.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -35783,150 +18051,12 @@ done case "$host" in *-*-sunos4*) ;; - *) -for ac_header in sys/ioctl.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + *) for ac_header in sys/ioctl.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/ioctl.h" "ac_cv_header_sys_ioctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ioctl_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_IOCTL_H 1 _ACEOF fi @@ -35935,304 +18065,26 @@ done ;; esac - for ac_header in sys/ipc.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/ipc.h" "ac_cv_header_sys_ipc_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ipc_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_IPC_H 1 _ACEOF fi done - - - - - for ac_header in sys/lock.h sys/mman.h sys/modem.h sys/param.h sys/ppsclock.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -36240,150 +18092,12 @@ fi done # HMS: Check sys/proc.h and sys/resource.h after some others - for ac_header in sys/ppstime.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/ppstime.h" "ac_cv_header_sys_ppstime_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_ppstime_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_PPSTIME_H 1 _ACEOF fi @@ -36392,150 +18106,12 @@ done case "$ac_cv_header_sched_h" in yes) ;; - *) -for ac_header in sys/sched.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + *) for ac_header in sys/sched.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/sched.h" "ac_cv_header_sys_sched_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sched_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_SCHED_H 1 _ACEOF fi @@ -36545,150 +18121,12 @@ done esac case "$host" in *-*-sco*) - -for ac_header in sys/sio.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in sys/sio.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/sio.h" "ac_cv_header_sys_sio_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sio_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_SIO_H 1 _ACEOF fi @@ -36698,152 +18136,14 @@ done ;; esac # HMS: Check sys/shm.h after some others - - - for ac_header in sys/select.h sys/signal.h sys/sockio.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -36853,151 +18153,14 @@ done # HMS: Checked sys/socket.h earlier case "$host" in *-*-netbsd*) ;; - *) - -for ac_header in machine/soundcard.h sys/soundcard.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + *) for ac_header in machine/soundcard.h sys/soundcard.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -37006,467 +18169,49 @@ done ;; esac - - for ac_header in sys/stat.h sys/stream.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done - - - - for ac_header in sys/stropts.h sys/sysctl.h sys/syssgi.h sys/systune.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done - - - for ac_header in sys/termios.h sys/time.h sys/signal.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_SYS_TIME_H # include @@ -37481,68 +18226,20 @@ yes _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then - -for ac_header in sys/timepps.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if HAVE_SYS_TIME_H + $EGREP "yes" >/dev/null 2>&1; then : + for ac_header in sys/timepps.h +do : + ac_fn_c_check_header_compile "$LINENO" "sys/timepps.h" "ac_cv_header_sys_timepps_h" "#if HAVE_SYS_TIME_H # include #endif #if HAVE_ERRNO_H # include #endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +" +if test "x$ac_cv_header_sys_timepps_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_TIMEPPS_H 1 _ACEOF fi @@ -37553,169 +18250,26 @@ done fi rm -f conftest* - - - - for ac_header in sys/timers.h sys/tpro.h sys/types.h sys/wait.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done -echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 -echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 -if test "${ac_cv_header_time+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if test "${ac_cv_header_time+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -37730,194 +18284,31 @@ return 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_time=no + ac_cv_header_time=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 -echo "${ECHO_T}$ac_cv_header_time" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then -cat >>confdefs.h <<\_ACEOF -#define TIME_WITH_SYS_TIME 1 -_ACEOF +$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi case "$host" in *-convex-*) - - -for ac_header in /sys/sync/queue.h /sys/sync/sema.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in /sys/sync/queue.h /sys/sync/sema.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -37926,152 +18317,14 @@ done ;; *-*-bsdi*) - - - -for ac_header in machine/inline.h sys/pcl720.h sys/i8253.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in machine/inline.h sys/pcl720.h sys/i8253.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -38082,105 +18335,15 @@ done esac case "$host" in - *-*-linux*) - - -for ac_func in __adjtimex __ntp_gettime -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + *-*-*linux*) + for ac_func in __adjtimex __ntp_gettime +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -38191,72 +18354,43 @@ esac case "$ac_cv_func___adjtimex" in yes) ;; *) - -echo "$as_me:$LINENO: checking for nlist in -lelf" >&5 -echo $ECHO_N "checking for nlist in -lelf... $ECHO_C" >&6 -if test "${ac_cv_lib_elf_nlist+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nlist in -lelf" >&5 +$as_echo_n "checking for nlist in -lelf... " >&6; } +if test "${ac_cv_lib_elf_nlist+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lelf $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char nlist (); int main () { -nlist (); +return nlist (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_elf_nlist=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_elf_nlist=no + ac_cv_lib_elf_nlist=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_elf_nlist" >&5 -echo "${ECHO_T}$ac_cv_lib_elf_nlist" >&6 -if test $ac_cv_lib_elf_nlist = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_elf_nlist" >&5 +$as_echo "$ac_cv_lib_elf_nlist" >&6; } +if test "x$ac_cv_lib_elf_nlist" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBELF 1 _ACEOF @@ -38264,66 +18398,37 @@ _ACEOF LIBS="-lelf $LIBS" fi - -echo "$as_me:$LINENO: checking for main in -lkvm" >&5 -echo $ECHO_N "checking for main in -lkvm... $ECHO_C" >&6 -if test "${ac_cv_lib_kvm_main+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lkvm" >&5 +$as_echo_n "checking for main in -lkvm... " >&6; } +if test "${ac_cv_lib_kvm_main+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lkvm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { -main (); +return main (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_kvm_main=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_kvm_main=no + ac_cv_lib_kvm_main=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_kvm_main" >&5 -echo "${ECHO_T}$ac_cv_lib_kvm_main" >&6 -if test $ac_cv_lib_kvm_main = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kvm_main" >&5 +$as_echo "$ac_cv_lib_kvm_main" >&6; } +if test "x$ac_cv_lib_kvm_main" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBKVM 1 _ACEOF @@ -38331,72 +18436,43 @@ _ACEOF LIBS="-lkvm $LIBS" fi - -echo "$as_me:$LINENO: checking for nlist in -lld" >&5 -echo $ECHO_N "checking for nlist in -lld... $ECHO_C" >&6 -if test "${ac_cv_lib_ld_nlist+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nlist in -lld" >&5 +$as_echo_n "checking for nlist in -lld... " >&6; } +if test "${ac_cv_lib_ld_nlist+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char nlist (); int main () { -nlist (); +return nlist (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ld_nlist=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_ld_nlist=no + ac_cv_lib_ld_nlist=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_ld_nlist" >&5 -echo "${ECHO_T}$ac_cv_lib_ld_nlist" >&6 -if test $ac_cv_lib_ld_nlist = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ld_nlist" >&5 +$as_echo "$ac_cv_lib_ld_nlist" >&6; } +if test "x$ac_cv_lib_ld_nlist" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBLD 1 _ACEOF @@ -38405,72 +18481,43 @@ _ACEOF fi - -echo "$as_me:$LINENO: checking for nlist in -lmld" >&5 -echo $ECHO_N "checking for nlist in -lmld... $ECHO_C" >&6 -if test "${ac_cv_lib_mld_nlist+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nlist in -lmld" >&5 +$as_echo_n "checking for nlist in -lmld... " >&6; } +if test "${ac_cv_lib_mld_nlist+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char nlist (); int main () { -nlist (); +return nlist (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mld_nlist=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_mld_nlist=no + ac_cv_lib_mld_nlist=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_mld_nlist" >&5 -echo "${ECHO_T}$ac_cv_lib_mld_nlist" >&6 -if test $ac_cv_lib_mld_nlist = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mld_nlist" >&5 +$as_echo "$ac_cv_lib_mld_nlist" >&6; } +if test "x$ac_cv_lib_mld_nlist" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBMLD 1 _ACEOF @@ -38479,159 +18526,17 @@ _ACEOF fi - if test "${ac_cv_header_nlist_h+set}" = set; then - echo "$as_me:$LINENO: checking for nlist.h" >&5 -echo $ECHO_N "checking for nlist.h... $ECHO_C" >&6 -if test "${ac_cv_header_nlist_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_nlist_h" >&5 -echo "${ECHO_T}$ac_cv_header_nlist_h" >&6 + ac_fn_c_check_header_mongrel "$LINENO" "nlist.h" "ac_cv_header_nlist_h" "$ac_includes_default" +if test "x$ac_cv_header_nlist_h" = x""yes; then : + +$as_echo "#define NLIST_STRUCT 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for n_un in struct nlist" >&5 +$as_echo_n "checking for n_un in struct nlist... " >&6; } +if test "${ac_cv_struct_nlist_n_un+set}" = set; then : + $as_echo_n "(cached) " >&6 else - # Is the header compilable? -echo "$as_me:$LINENO: checking nlist.h usability" >&5 -echo $ECHO_N "checking nlist.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking nlist.h presence" >&5 -echo $ECHO_N "checking nlist.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: nlist.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: nlist.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: nlist.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: nlist.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: nlist.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: nlist.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: nlist.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: nlist.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: nlist.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: nlist.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: nlist.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: nlist.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: nlist.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: nlist.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: nlist.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: nlist.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for nlist.h" >&5 -echo $ECHO_N "checking for nlist.h... $ECHO_C" >&6 -if test "${ac_cv_header_nlist_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_nlist_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_nlist_h" >&5 -echo "${ECHO_T}$ac_cv_header_nlist_h" >&6 - -fi -if test $ac_cv_header_nlist_h = yes; then - -cat >>confdefs.h <<\_ACEOF -#define NLIST_STRUCT 1 -_ACEOF - - echo "$as_me:$LINENO: checking for n_un in struct nlist" >&5 -echo $ECHO_N "checking for n_un in struct nlist... $ECHO_C" >&6 -if test "${ac_cv_struct_nlist_n_un+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -38642,44 +18547,18 @@ struct nlist n; n.n_un.n_name = 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_nlist_n_un=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_nlist_n_un=no + ac_cv_struct_nlist_n_un=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_nlist_n_un" >&5 -echo "${ECHO_T}$ac_cv_struct_nlist_n_un" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_nlist_n_un" >&5 +$as_echo "$ac_cv_struct_nlist_n_un" >&6; } if test $ac_cv_struct_nlist_n_un = yes; then -cat >>confdefs.h <<\_ACEOF -#define NLIST_NAME_UNION 1 -_ACEOF +$as_echo "#define NLIST_NAME_UNION 1" >>confdefs.h fi @@ -38689,67 +18568,19 @@ fi esac - for ac_header in sys/proc.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if HAVE_SYS_TYPES_H +do : + ac_fn_c_check_header_compile "$LINENO" "sys/proc.h" "ac_cv_header_sys_proc_h" "#if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_TIME_H # include #endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +" +if test "x$ac_cv_header_sys_proc_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_PROC_H 1 _ACEOF fi @@ -38757,64 +18588,16 @@ fi done - for ac_header in sys/resource.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if HAVE_SYS_TIME_H +do : + ac_fn_c_check_header_compile "$LINENO" "sys/resource.h" "ac_cv_header_sys_resource_h" "#if HAVE_SYS_TIME_H # include #endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +" +if test "x$ac_cv_header_sys_resource_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_RESOURCE_H 1 _ACEOF fi @@ -38822,67 +18605,19 @@ fi done - for ac_header in sys/shm.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if HAVE_SYS_TYPES_H +do : + ac_fn_c_check_header_compile "$LINENO" "sys/shm.h" "ac_cv_header_sys_shm_h" "#if HAVE_SYS_TYPES_H # include #endif #if HAVE_SYS_IPC_H # include #endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +" +if test "x$ac_cv_header_sys_shm_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_SHM_H 1 _ACEOF fi @@ -38890,64 +18625,16 @@ fi done - for ac_header in sys/timex.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if HAVE_SYS_TIME_H +do : + ac_fn_c_check_header_compile "$LINENO" "sys/timex.h" "ac_cv_header_sys_timex_h" "#if HAVE_SYS_TIME_H # include #endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +" +if test "x$ac_cv_header_sys_timex_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_SYS_TIMEX_H 1 _ACEOF fi @@ -38955,22 +18642,9 @@ fi done - for ac_header in resolv.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#if HAVE_SYS_TYPES_H +do : + ac_fn_c_check_header_compile "$LINENO" "resolv.h" "ac_cv_header_resolv_h" "#if HAVE_SYS_TYPES_H #include #endif #if HAVE_NETINET_IN_H @@ -38980,45 +18654,10 @@ cat >>conftest.$ac_ext <<_ACEOF #include #endif - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +" +if test "x$ac_cv_header_resolv_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_RESOLV_H 1 _ACEOF fi @@ -39026,16 +18665,12 @@ fi done -echo "$as_me:$LINENO: checking for basic volatile support" >&5 -echo $ECHO_N "checking for basic volatile support... $ECHO_C" >&6 -if test "${ac_cv_c_volatile+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for basic volatile support" >&5 +$as_echo_n "checking for basic volatile support... " >&6; } +if test "${ac_cv_c_volatile+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -39047,75 +18682,48 @@ volatile int x; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_volatile=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_c_volatile=no + ac_cv_c_volatile=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_c_volatile" >&5 -echo "${ECHO_T}$ac_cv_c_volatile" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 +$as_echo "$ac_cv_c_volatile" >&6; } case "$ac_cv_c_volatile" in yes) ;; *) -cat >>confdefs.h <<\_ACEOF -#define volatile -_ACEOF +$as_echo "#define volatile /**/" >>confdefs.h ;; esac +# +# following block goes away in 4.2.5 +# # AM_C_PROTOTYPES gives us ansi2knr case "$build" in *-*-solaris2*) # Assume that solaris2 is Ansi C... ;; *) - echo "$as_me:$LINENO: checking for function prototypes" >&5 -echo $ECHO_N "checking for function prototypes... $ECHO_C" >&6 -if test "$ac_cv_prog_cc_stdc" != no; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for function prototypes" >&5 +$as_echo_n "checking for function prototypes... " >&6; } +if test "$ac_cv_prog_cc_c89" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } -cat >>confdefs.h <<\_ACEOF -#define PROTOTYPES 1 -_ACEOF +$as_echo "#define PROTOTYPES 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define __PROTOTYPES 1 -_ACEOF +$as_echo "#define __PROTOTYPES 1" >>confdefs.h else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi @@ -39126,150 +18734,12 @@ else fi # Ensure some checks needed by ansi2knr itself. - for ac_header in string.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + ac_fn_c_check_header_mongrel "$LINENO" "string.h" "ac_cv_header_string_h" "$ac_includes_default" +if test "x$ac_cv_header_string_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_STRING_H 1 _ACEOF fi @@ -39279,16 +18749,12 @@ done ;; esac -echo "$as_me:$LINENO: checking if C compiler permits function prototypes" >&5 -echo $ECHO_N "checking if C compiler permits function prototypes... $ECHO_C" >&6 -if test "${ac_cv_have_prototypes+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if C compiler permits function prototypes" >&5 +$as_echo_n "checking if C compiler permits function prototypes... " >&6; } +if test "${ac_cv_have_prototypes+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern int foo (short); @@ -39302,58 +18768,31 @@ int i; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_prototypes=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_prototypes=no + ac_cv_have_prototypes=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_prototypes" >&5 -echo "${ECHO_T}$ac_cv_have_prototypes" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_prototypes" >&5 +$as_echo "$ac_cv_have_prototypes" >&6; } if test "$ac_cv_have_prototypes" = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PROTOTYPES 1 -_ACEOF +$as_echo "#define HAVE_PROTOTYPES 1" >>confdefs.h fi +# +# end block +# -echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 -echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 -if test "${ac_cv_c_const+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if test "${ac_cv_c_const+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -39363,10 +18802,10 @@ main () #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; - const charset x; + const charset cs; /* SunOS 4.1.1 cc rejects this. */ - char const *const *ccp; - char **p; + char const *const *pcpcc; + char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; @@ -39375,16 +18814,17 @@ main () an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; - ccp = &g + (g ? g-g : 0); + pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ - ++ccp; - p = (char**) ccp; - ccp = (char const *const *) p; + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; + if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; @@ -39403,543 +18843,312 @@ main () } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; + if (!foo) return 0; } + return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_c_const=no + ac_cv_c_const=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 -echo "${ECHO_T}$ac_cv_c_const" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then -cat >>confdefs.h <<\_ACEOF -#define const -_ACEOF +$as_echo "#define const /**/" >>confdefs.h fi -echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5 -echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6 -if test "${ac_cv_c_bigendian+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if test "${ac_cv_c_bigendian+set}" = set; then : + $as_echo_n "(cached) " >&6 else - # See if sys/param.h defines the BYTE_ORDER macro. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { -#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN - bogus endian macros -#endif +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include -#include + #include int main () { #if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif + not big endian + #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_bigendian=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_c_bigendian=no + ac_cv_c_bigendian=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -# It does not; compile a test program. -if test "$cross_compiling" = yes; then - # try to guess the endianness by grepping values into an object file - ac_cv_c_bigendian=unknown - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; -short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; -void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; } -short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; -short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; -void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; } +#include + int main () { - _ascii (); _ebcdic (); +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then - ac_cv_c_bigendian=yes -fi -if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then - if test "$ac_cv_c_bigendian" = unknown; then - ac_cv_c_bigendian=no - else - # finding both strings is unlikely to happen, but who knows? - ac_cv_c_bigendian=unknown - fi -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +#include + int main () { - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long l; - char c[sizeof (long)]; - } u; - u.l = 1; - exit (u.c[sizeof (long) - 1] == 1); +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_bigendian=no else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi -( exit $ac_status ) -ac_cv_c_bigendian=yes + fi fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5 -echo "${ECHO_T}$ac_cv_c_bigendian" >&6 -case $ac_cv_c_bigendian in - yes) +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) -cat >>confdefs.h <<\_ACEOF -#define WORDS_BIGENDIAN 1 -_ACEOF - ;; - no) - ;; - *) - { { echo "$as_me:$LINENO: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&5 -echo "$as_me: error: unknown endianness -presetting ac_cv_c_bigendian=no (or yes) will help" >&2;} - { (exit 1); exit 1; }; } ;; -esac +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h -echo "$as_me:$LINENO: checking return type of signal handlers" >&5 -echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 -if test "${ac_cv_type_signal+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + ;; #( + *) + as_fn_error "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 +$as_echo_n "checking return type of signal handlers... " >&6; } +if test "${ac_cv_type_signal+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include -#ifdef signal -# undef signal -#endif -#ifdef __cplusplus -extern "C" void (*signal (int, void (*)(int)))(int); -#else -void (*signal ()) (); -#endif int main () { -int i; +return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_signal=void +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_signal=int else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_signal=int + ac_cv_type_signal=void fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 -echo "${ECHO_T}$ac_cv_type_signal" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 +$as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF -echo "$as_me:$LINENO: checking for off_t" >&5 -echo $ECHO_N "checking for off_t... $ECHO_C" >&6 -if test "${ac_cv_type_off_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((off_t *) 0) - return 0; -if (sizeof (off_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_off_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = x""yes; then : -ac_cv_type_off_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5 -echo "${ECHO_T}$ac_cv_type_off_t" >&6 -if test $ac_cv_type_off_t = yes; then - : else cat >>confdefs.h <<_ACEOF -#define off_t long +#define off_t long int _ACEOF fi -echo "$as_me:$LINENO: checking for size_t" >&5 -echo $ECHO_N "checking for size_t... $ECHO_C" >&6 -if test "${ac_cv_type_size_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((size_t *) 0) - return 0; -if (sizeof (size_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_size_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = x""yes; then : -ac_cv_type_size_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 -echo "${ECHO_T}$ac_cv_type_size_t" >&6 -if test $ac_cv_type_size_t = yes; then - : else cat >>confdefs.h <<_ACEOF -#define size_t unsigned +#define size_t unsigned int _ACEOF fi -echo "$as_me:$LINENO: checking for time_t" >&5 -echo $ECHO_N "checking for time_t... $ECHO_C" >&6 -if test "${ac_cv_type_time_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((time_t *) 0) - return 0; -if (sizeof (time_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_time_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +ac_fn_c_check_type "$LINENO" "time_t" "ac_cv_type_time_t" "$ac_includes_default" +if test "x$ac_cv_type_time_t" = x""yes; then : -ac_cv_type_time_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_time_t" >&5 -echo "${ECHO_T}$ac_cv_type_time_t" >&6 -if test $ac_cv_type_time_t = yes; then - : else cat >>confdefs.h <<_ACEOF @@ -39948,477 +19157,42 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for time_t" >&5 -echo $ECHO_N "checking for time_t... $ECHO_C" >&6 -if test "${ac_cv_type_time_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 +$as_echo_n "checking size of time_t... " >&6; } +if test "${ac_cv_sizeof_time_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((time_t *) 0) - return 0; -if (sizeof (time_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_time_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "$ac_includes_default"; then : -ac_cv_type_time_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_time_t" >&5 -echo "${ECHO_T}$ac_cv_type_time_t" >&6 - -echo "$as_me:$LINENO: checking size of time_t" >&5 -echo $ECHO_N "checking size of time_t... $ECHO_C" >&6 -if test "${ac_cv_sizeof_time_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_time_t" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (time_t))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (time_t))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (time_t) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_time_t=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (time_t))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (time_t))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 +$as_echo "$ac_cv_sizeof_time_t" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (time_t))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_time_t=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (time_t), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (time_t), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (time_t)); } -unsigned long ulongval () { return (long) (sizeof (time_t)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (time_t))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (time_t)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (time_t)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_time_t=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (time_t), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (time_t), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_time_t=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_time_t" >&5 -echo "${ECHO_T}$ac_cv_sizeof_time_t" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_TIME_T $ac_cv_sizeof_time_t _ACEOF -echo "$as_me:$LINENO: checking for uintptr_t" >&5 -echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6 -if test "${ac_cv_type_uintptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uintptr_t *) 0) - return 0; -if (sizeof (uintptr_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uintptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uintptr_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6 -if test $ac_cv_type_uintptr_t = yes; then +ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" +if test "x$ac_cv_type_uintptr_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINTPTR_T 1 @@ -40430,17 +19204,12 @@ fi - -echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 -echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 -if test "${ac_cv_struct_tm+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 +$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } +if test "${ac_cv_struct_tm+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -40448,63 +19217,35 @@ cat >>conftest.$ac_ext <<_ACEOF int main () { -struct tm *tp; tp->tm_sec; +struct tm tm; + int *p = &tm.tm_sec; + return !p; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_tm=sys/time.h + ac_cv_struct_tm=sys/time.h fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 -echo "${ECHO_T}$ac_cv_struct_tm" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 +$as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then -cat >>confdefs.h <<\_ACEOF -#define TM_IN_SYS_TIME 1 -_ACEOF +$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for u_int8_t" >&5 -echo $ECHO_N "checking for u_int8_t... $ECHO_C" >&6 -if test "${ac_cv_type_u_int8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for u_int8_t" >&5 +$as_echo_n "checking for u_int8_t... " >&6; } +if test "${ac_cv_type_u_int8_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -40515,58 +19256,28 @@ u_int8_t len = 42; return 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_u_int8_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_u_int8_t=no + ac_cv_type_u_int8_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_type_u_int8_t" >&5 -echo "${ECHO_T}$ac_cv_type_u_int8_t" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_u_int8_t" >&5 +$as_echo "$ac_cv_type_u_int8_t" >&6; } if test $ac_cv_type_u_int8_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_TYPE_U_INT8_T 1 -_ACEOF +$as_echo "#define HAVE_TYPE_U_INT8_T 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for u_int64_t" >&5 -echo $ECHO_N "checking for u_int64_t... $ECHO_C" >&6 -if test "${ac_cv_type_u_int64_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for u_int64_t" >&5 +$as_echo_n "checking for u_int64_t... " >&6; } +if test "${ac_cv_type_u_int64_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -40577,58 +19288,28 @@ u_int64_t len = 42; return 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_u_int64_t=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_u_int64_t=no + ac_cv_type_u_int64_t=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_type_u_int64_t" >&5 -echo "${ECHO_T}$ac_cv_type_u_int64_t" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_u_int64_t" >&5 +$as_echo "$ac_cv_type_u_int64_t" >&6; } if test $ac_cv_type_u_int64_t = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_TYPE_U_INT64_T 1 -_ACEOF +$as_echo "#define HAVE_TYPE_U_INT64_T 1" >>confdefs.h fi # # Look for in_port_t. # -echo "$as_me:$LINENO: checking for in_port_t" >&5 -echo $ECHO_N "checking for in_port_t... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for in_port_t" >&5 +$as_echo_n "checking for in_port_t... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -40641,50 +19322,24 @@ in_port_t port = 25; return (0); return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +if ac_fn_c_try_compile "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } -echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_NEEDPORTT 1 -_ACEOF +$as_echo "#define ISC_PLATFORM_NEEDPORTT 1" >>confdefs.h fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: checking for a fallback value for HZ" >&5 -echo $ECHO_N "checking for a fallback value for HZ... $ECHO_C" >&6 -if test "${ac_cv_var_default_hz+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a fallback value for HZ" >&5 +$as_echo_n "checking for a fallback value for HZ... " >&6; } +if test "${ac_cv_var_default_hz+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_var_default_hz=100 case "$host" in @@ -40696,18 +19351,18 @@ case "$host" in ;; esac fi -echo "$as_me:$LINENO: result: $ac_cv_var_default_hz" >&5 -echo "${ECHO_T}$ac_cv_var_default_hz" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_default_hz" >&5 +$as_echo "$ac_cv_var_default_hz" >&6; } cat >>confdefs.h <<_ACEOF #define DEFAULT_HZ $ac_cv_var_default_hz _ACEOF -echo "$as_me:$LINENO: checking if we need to override the system's value for HZ" >&5 -echo $ECHO_N "checking if we need to override the system's value for HZ... $ECHO_C" >&6 -if test "${ac_cv_var_override_hz+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need to override the system's value for HZ" >&5 +$as_echo_n "checking if we need to override the system's value for HZ... " >&6; } +if test "${ac_cv_var_override_hz+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_var_override_hz=no case "$host" in @@ -40725,30 +19380,24 @@ case "$host" in ;; esac fi -echo "$as_me:$LINENO: result: $ac_cv_var_override_hz" >&5 -echo "${ECHO_T}$ac_cv_var_override_hz" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_override_hz" >&5 +$as_echo "$ac_cv_var_override_hz" >&6; } case "$ac_cv_var_override_hz" in yes) -cat >>confdefs.h <<\_ACEOF -#define OVERRIDE_HZ 1 -_ACEOF +$as_echo "#define OVERRIDE_HZ 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking for struct rt_msghdr" >&5 -echo $ECHO_N "checking for struct rt_msghdr... $ECHO_C" >&6 -if test "${ac_cv_struct_rt_msghdr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct rt_msghdr" >&5 +$as_echo_n "checking for struct rt_msghdr... " >&6; } +if test "${ac_cv_struct_rt_msghdr+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -40763,59 +19412,30 @@ struct rt_msghdr p; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_rt_msghdr=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_rt_msghdr=no + ac_cv_struct_rt_msghdr=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_rt_msghdr" >&5 -echo "${ECHO_T}$ac_cv_struct_rt_msghdr" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_rt_msghdr" >&5 +$as_echo "$ac_cv_struct_rt_msghdr" >&6; } + if test $ac_cv_struct_rt_msghdr = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAS_ROUTING_SOCKET 1 -_ACEOF +$as_echo "#define HAS_ROUTING_SOCKET 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking struct sigaction for sa_sigaction" >&5 -echo $ECHO_N "checking struct sigaction for sa_sigaction... $ECHO_C" >&6 -if test "${ac_cv_struct_sigaction_has_sa_sigaction+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking struct sigaction for sa_sigaction" >&5 +$as_echo_n "checking struct sigaction for sa_sigaction... " >&6; } +if test "${ac_cv_struct_sigaction_has_sa_sigaction+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -40826,60 +19446,30 @@ struct sigaction act; act.sa_sigaction = 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_sigaction_has_sa_sigaction=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_sigaction_has_sa_sigaction=no + ac_cv_struct_sigaction_has_sa_sigaction=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_sigaction_has_sa_sigaction" >&5 -echo "${ECHO_T}$ac_cv_struct_sigaction_has_sa_sigaction" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sigaction_has_sa_sigaction" >&5 +$as_echo "$ac_cv_struct_sigaction_has_sa_sigaction" >&6; } if test $ac_cv_struct_sigaction_has_sa_sigaction = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_SA_SIGACTION_IN_STRUCT_SIGACTION 1 -_ACEOF +$as_echo "#define HAVE_SA_SIGACTION_IN_STRUCT_SIGACTION 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for struct ppsclockev" >&5 -echo $ECHO_N "checking for struct ppsclockev... $ECHO_C" >&6 -if test "${ac_cv_struct_ppsclockev+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct ppsclockev" >&5 +$as_echo_n "checking for struct ppsclockev... " >&6; } +if test "${ac_cv_struct_ppsclockev+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -40902,58 +19492,28 @@ return pce->serial; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_ppsclockev=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_ppsclockev=no + ac_cv_struct_ppsclockev=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_ppsclockev" >&5 -echo "${ECHO_T}$ac_cv_struct_ppsclockev" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_ppsclockev" >&5 +$as_echo "$ac_cv_struct_ppsclockev" >&6; } if test $ac_cv_struct_ppsclockev = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_STRUCT_PPSCLOCKEV 1 -_ACEOF +$as_echo "#define HAVE_STRUCT_PPSCLOCKEV 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking struct sockaddr for sa_len" >&5 -echo $ECHO_N "checking struct sockaddr for sa_len... $ECHO_C" >&6 -if test "${ac_cv_struct_sockaddr_has_sa_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking struct sockaddr for sa_len" >&5 +$as_echo_n "checking struct sockaddr for sa_len... " >&6; } +if test "${ac_cv_struct_sockaddr_has_sa_len+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -40968,58 +19528,28 @@ return ps->sa_len; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_sockaddr_has_sa_len=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_sockaddr_has_sa_len=no + ac_cv_struct_sockaddr_has_sa_len=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_sockaddr_has_sa_len" >&5 -echo "${ECHO_T}$ac_cv_struct_sockaddr_has_sa_len" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_has_sa_len" >&5 +$as_echo "$ac_cv_struct_sockaddr_has_sa_len" >&6; } if test $ac_cv_struct_sockaddr_has_sa_len = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_SA_LEN_IN_STRUCT_SOCKADDR 1 -_ACEOF +$as_echo "#define HAVE_SA_LEN_IN_STRUCT_SOCKADDR 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for struct sockaddr_storage" >&5 -echo $ECHO_N "checking for struct sockaddr_storage... $ECHO_C" >&6 -if test "${ac_cv_struct_sockaddr_storage+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct sockaddr_storage" >&5 +$as_echo_n "checking for struct sockaddr_storage... " >&6; } +if test "${ac_cv_struct_sockaddr_storage+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -41035,59 +19565,29 @@ struct sockaddr_storage n; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_sockaddr_storage=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_sockaddr_storage=no + ac_cv_struct_sockaddr_storage=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_sockaddr_storage" >&5 -echo "${ECHO_T}$ac_cv_struct_sockaddr_storage" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_sockaddr_storage" >&5 +$as_echo "$ac_cv_struct_sockaddr_storage" >&6; } if test $ac_cv_struct_sockaddr_storage = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_STRUCT_SOCKADDR_STORAGE 1 -_ACEOF +$as_echo "#define HAVE_STRUCT_SOCKADDR_STORAGE 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for ss_family field in struct sockaddr_storage" >&5 -echo $ECHO_N "checking for ss_family field in struct sockaddr_storage... $ECHO_C" >&6 -if test "${ac_cv_have_ss_family_in_struct_ss+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ss_family field in struct sockaddr_storage" >&5 +$as_echo_n "checking for ss_family field in struct sockaddr_storage... " >&6; } +if test "${ac_cv_have_ss_family_in_struct_ss+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -41101,45 +19601,19 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_ss_family_in_struct_ss="yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_have_ss_family_in_struct_ss="no" + ac_cv_have_ss_family_in_struct_ss="no" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_ss_family_in_struct_ss" >&5 -echo "${ECHO_T}$ac_cv_have_ss_family_in_struct_ss" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_ss_family_in_struct_ss" >&5 +$as_echo "$ac_cv_have_ss_family_in_struct_ss" >&6; } if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_SS_FAMILY_IN_SS 1 -_ACEOF +$as_echo "#define HAVE_SS_FAMILY_IN_SS 1" >>confdefs.h else # Hack around a problem... @@ -41152,17 +19626,13 @@ else esac fi -echo "$as_me:$LINENO: checking for __ss_family field in struct sockaddr_storage" >&5 -echo $ECHO_N "checking for __ss_family field in struct sockaddr_storage... $ECHO_C" >&6 -if test "${ac_cv_have___ss_family_in_struct_ss+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __ss_family field in struct sockaddr_storage" >&5 +$as_echo_n "checking for __ss_family field in struct sockaddr_storage... " >&6; } +if test "${ac_cv_have___ss_family_in_struct_ss+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -41176,63 +19646,32 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have___ss_family_in_struct_ss="yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_have___ss_family_in_struct_ss="no" + ac_cv_have___ss_family_in_struct_ss="no" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have___ss_family_in_struct_ss" >&5 -echo "${ECHO_T}$ac_cv_have___ss_family_in_struct_ss" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have___ss_family_in_struct_ss" >&5 +$as_echo "$ac_cv_have___ss_family_in_struct_ss" >&6; } if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define HAVE___SS_FAMILY_IN_SS 1 -_ACEOF +$as_echo "#define HAVE___SS_FAMILY_IN_SS 1" >>confdefs.h fi - -echo "$as_me:$LINENO: checking for ss_len field in struct sockaddr_storage" >&5 -echo $ECHO_N "checking for ss_len field in struct sockaddr_storage... $ECHO_C" >&6 -if test "${ac_cv_have_ss_len_in_struct_ss+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ss_len field in struct sockaddr_storage" >&5 +$as_echo_n "checking for ss_len field in struct sockaddr_storage... " >&6; } +if test "${ac_cv_have_ss_len_in_struct_ss+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -41246,59 +19685,29 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_ss_len_in_struct_ss="yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_have_ss_len_in_struct_ss="no" + ac_cv_have_ss_len_in_struct_ss="no" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_ss_len_in_struct_ss" >&5 -echo "${ECHO_T}$ac_cv_have_ss_len_in_struct_ss" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_ss_len_in_struct_ss" >&5 +$as_echo "$ac_cv_have_ss_len_in_struct_ss" >&6; } if test "x$ac_cv_have_ss_len_in_struct_ss" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_SS_LEN_IN_SS 1 -_ACEOF +$as_echo "#define HAVE_SS_LEN_IN_SS 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for __ss_len field in struct sockaddr_storage" >&5 -echo $ECHO_N "checking for __ss_len field in struct sockaddr_storage... $ECHO_C" >&6 -if test "${ac_cv_have___ss_len_in_struct_ss+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __ss_len field in struct sockaddr_storage" >&5 +$as_echo_n "checking for __ss_len field in struct sockaddr_storage... " >&6; } +if test "${ac_cv_have___ss_len_in_struct_ss+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -41312,64 +19721,33 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have___ss_len_in_struct_ss="yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_have___ss_len_in_struct_ss="no" + ac_cv_have___ss_len_in_struct_ss="no" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have___ss_len_in_struct_ss" >&5 -echo "${ECHO_T}$ac_cv_have___ss_len_in_struct_ss" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have___ss_len_in_struct_ss" >&5 +$as_echo "$ac_cv_have___ss_len_in_struct_ss" >&6; } if test "x$ac_cv_have___ss_len_in_struct_ss" = "xyes" ; then -cat >>confdefs.h <<\_ACEOF -#define HAVE___SS_LEN_IN_SS 1 -_ACEOF +$as_echo "#define HAVE___SS_LEN_IN_SS 1" >>confdefs.h fi - case "$ac_cv_header_machine_soundcard_h$ac_cv_header_sys_soundcard_h" in *yes*) - echo "$as_me:$LINENO: checking for struct snd_size" >&5 -echo $ECHO_N "checking for struct snd_size... $ECHO_C" >&6 -if test "${ac_cv_struct_snd_size+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct snd_size" >&5 +$as_echo_n "checking for struct snd_size... " >&6; } +if test "${ac_cv_struct_snd_size+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_MACHINE_SOUNDCARD_H @@ -41388,60 +19766,30 @@ return ss->rec_size; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_snd_size=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_snd_size=no + ac_cv_struct_snd_size=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_snd_size" >&5 -echo "${ECHO_T}$ac_cv_struct_snd_size" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_snd_size" >&5 +$as_echo "$ac_cv_struct_snd_size" >&6; } case "$ac_cv_struct_snd_size" in yes) -cat >>confdefs.h <<\_ACEOF -#define HAVE_STRUCT_SND_SIZE 1 -_ACEOF +$as_echo "#define HAVE_STRUCT_SND_SIZE 1" >>confdefs.h ;; esac ;; esac -echo "$as_me:$LINENO: checking struct clockinfo for hz" >&5 -echo $ECHO_N "checking struct clockinfo for hz... $ECHO_C" >&6 -if test "${ac_cv_struct_clockinfo_has_hz+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking struct clockinfo for hz" >&5 +$as_echo_n "checking struct clockinfo for hz... " >&6; } +if test "${ac_cv_struct_clockinfo_has_hz+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -41455,58 +19803,28 @@ return pc->hz; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_clockinfo_has_hz=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_clockinfo_has_hz=no + ac_cv_struct_clockinfo_has_hz=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_clockinfo_has_hz" >&5 -echo "${ECHO_T}$ac_cv_struct_clockinfo_has_hz" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_clockinfo_has_hz" >&5 +$as_echo "$ac_cv_struct_clockinfo_has_hz" >&6; } if test $ac_cv_struct_clockinfo_has_hz = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_HZ_IN_STRUCT_CLOCKINFO 1 -_ACEOF +$as_echo "#define HAVE_HZ_IN_STRUCT_CLOCKINFO 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking struct clockinfo for tickadj" >&5 -echo $ECHO_N "checking struct clockinfo for tickadj... $ECHO_C" >&6 -if test "${ac_cv_struct_clockinfo_has_tickadj+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking struct clockinfo for tickadj" >&5 +$as_echo_n "checking struct clockinfo for tickadj... " >&6; } +if test "${ac_cv_struct_clockinfo_has_tickadj+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -41520,58 +19838,28 @@ return pc->tickadj; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_clockinfo_has_tickadj=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_clockinfo_has_tickadj=no + ac_cv_struct_clockinfo_has_tickadj=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_clockinfo_has_tickadj" >&5 -echo "${ECHO_T}$ac_cv_struct_clockinfo_has_tickadj" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_clockinfo_has_tickadj" >&5 +$as_echo "$ac_cv_struct_clockinfo_has_tickadj" >&6; } if test $ac_cv_struct_clockinfo_has_tickadj = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_TICKADJ_IN_STRUCT_CLOCKINFO 1 -_ACEOF +$as_echo "#define HAVE_TICKADJ_IN_STRUCT_CLOCKINFO 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for struct timespec" >&5 -echo $ECHO_N "checking for struct timespec... $ECHO_C" >&6 -if test "${ac_cv_struct_timespec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct timespec" >&5 +$as_echo_n "checking for struct timespec... " >&6; } +if test "${ac_cv_struct_timespec+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -41591,57 +19879,27 @@ struct timespec n; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_timespec=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_timespec=no + ac_cv_struct_timespec=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_timespec" >&5 -echo "${ECHO_T}$ac_cv_struct_timespec" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_timespec" >&5 +$as_echo "$ac_cv_struct_timespec" >&6; } if test $ac_cv_struct_timespec = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_STRUCT_TIMESPEC 1 -_ACEOF +$as_echo "#define HAVE_STRUCT_TIMESPEC 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for struct ntptimeval" >&5 -echo $ECHO_N "checking for struct ntptimeval... $ECHO_C" >&6 -if test "${ac_cv_struct_ntptimeval+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct ntptimeval" >&5 +$as_echo_n "checking for struct ntptimeval... " >&6; } +if test "${ac_cv_struct_ntptimeval+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -41654,59 +19912,22 @@ struct ntptimeval n; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_ntptimeval=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_ntptimeval=no + ac_cv_struct_ntptimeval=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_ntptimeval" >&5 -echo "${ECHO_T}$ac_cv_struct_ntptimeval" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_ntptimeval" >&5 +$as_echo "$ac_cv_struct_ntptimeval" >&6; } if test $ac_cv_struct_ntptimeval = yes; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_STRUCT_NTPTIMEVAL 1 -_ACEOF +$as_echo "#define HAVE_STRUCT_NTPTIMEVAL 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for struct ntptimeval.time.tv_nsec" >&5 -echo $ECHO_N "checking for struct ntptimeval.time.tv_nsec... $ECHO_C" >&6 -if test "${ac_cv_member_struct_ntptimeval_time_tv_nsec+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TIME_H +ac_fn_c_check_member "$LINENO" "struct ntptimeval" "time.tv_nsec" "ac_cv_member_struct_ntptimeval_time_tv_nsec" "#ifdef HAVE_SYS_TIME_H #include #else # ifdef HAVE_TIME_H @@ -41720,111 +19941,8 @@ cat >>conftest.$ac_ext <<_ACEOF # include # endif #endif - -int -main () -{ -static struct ntptimeval ac_aggr; -if (ac_aggr.time.tv_nsec) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_member_struct_ntptimeval_time_tv_nsec=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef HAVE_SYS_TIME_H -#include -#else -# ifdef HAVE_TIME_H -# include -# endif -#endif -#ifdef HAVE_SYS_TIMEX_H -#include -#else -# ifdef HAVE_TIMEX_H -# include -# endif -#endif - -int -main () -{ -static struct ntptimeval ac_aggr; -if (sizeof ac_aggr.time.tv_nsec) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_member_struct_ntptimeval_time_tv_nsec=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_member_struct_ntptimeval_time_tv_nsec=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_member_struct_ntptimeval_time_tv_nsec" >&5 -echo "${ECHO_T}$ac_cv_member_struct_ntptimeval_time_tv_nsec" >&6 -if test $ac_cv_member_struct_ntptimeval_time_tv_nsec = yes; then +" +if test "x$ac_cv_member_struct_ntptimeval_time_tv_nsec" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_NTPTIMEVAL_TIME_TV_NSEC 1 @@ -41834,18 +19952,14 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for inline" >&5 -echo $ECHO_N "checking for inline... $ECHO_C" >&6 -if test "${ac_cv_c_inline+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if test "${ac_cv_c_inline+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; @@ -41854,41 +19968,16 @@ $ac_kw foo_t foo () {return 0; } #endif _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_c_inline=$ac_kw; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break done fi -echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5 -echo "${ECHO_T}$ac_cv_c_inline" >&6 - +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; @@ -41906,16 +19995,22 @@ _ACEOF esac -echo "$as_me:$LINENO: checking whether char is unsigned" >&5 -echo $ECHO_N "checking whether char is unsigned... $ECHO_C" >&6 -if test "${ac_cv_c_char_unsigned+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +case "$ac_cv_c_inline" in + '') + ;; + *) + +$as_echo "#define HAVE_INLINE 1" >>confdefs.h + + +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 +$as_echo_n "checking whether char is unsigned... " >&6; } +if test "${ac_cv_c_char_unsigned+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int @@ -41928,1345 +20023,124 @@ test_array [0] = 0 return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_char_unsigned=no else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_c_char_unsigned=yes + ac_cv_c_char_unsigned=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_c_char_unsigned" >&5 -echo "${ECHO_T}$ac_cv_c_char_unsigned" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 +$as_echo "$ac_cv_c_char_unsigned" >&6; } if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then - cat >>confdefs.h <<\_ACEOF -#define __CHAR_UNSIGNED__ 1 -_ACEOF + $as_echo "#define __CHAR_UNSIGNED__ 1" >>confdefs.h fi - echo "$as_me:$LINENO: checking for signed char" >&5 -echo $ECHO_N "checking for signed char... $ECHO_C" >&6 -if test "${ac_cv_type_signed_char+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of signed char" >&5 +$as_echo_n "checking size of signed char... " >&6; } +if test "${ac_cv_sizeof_signed_char+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((signed char *) 0) - return 0; -if (sizeof (signed char)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_signed_char=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (signed char))" "ac_cv_sizeof_signed_char" "$ac_includes_default"; then : -ac_cv_type_signed_char=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_signed_char" >&5 -echo "${ECHO_T}$ac_cv_type_signed_char" >&6 - -echo "$as_me:$LINENO: checking size of signed char" >&5 -echo $ECHO_N "checking size of signed char... $ECHO_C" >&6 -if test "${ac_cv_sizeof_signed_char+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_signed_char" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (signed char))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (signed char))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (signed char) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_signed_char=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (signed char))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (signed char))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_signed_char" >&5 +$as_echo "$ac_cv_sizeof_signed_char" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (signed char))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_signed_char=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (signed char), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (signed char), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (signed char)); } -unsigned long ulongval () { return (long) (sizeof (signed char)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (signed char))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (signed char)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (signed char)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_signed_char=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (signed char), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (signed char), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_signed_char=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_signed_char" >&5 -echo "${ECHO_T}$ac_cv_sizeof_signed_char" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_SIGNED_CHAR $ac_cv_sizeof_signed_char _ACEOF -echo "$as_me:$LINENO: checking for int" >&5 -echo $ECHO_N "checking for int... $ECHO_C" >&6 -if test "${ac_cv_type_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if test "${ac_cv_sizeof_int+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int *) 0) - return 0; -if (sizeof (int)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : -ac_cv_type_int=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 -echo "${ECHO_T}$ac_cv_type_int" >&6 - -echo "$as_me:$LINENO: checking size of int" >&5 -echo $ECHO_N "checking size of int... $ECHO_C" >&6 -if test "${ac_cv_sizeof_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (int) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_int=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_int=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (int)); } -unsigned long ulongval () { return (long) (sizeof (int)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (int))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_int=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF -echo "$as_me:$LINENO: checking for long" >&5 -echo $ECHO_N "checking for long... $ECHO_C" >&6 -if test "${ac_cv_type_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if test "${ac_cv_sizeof_long+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((long *) 0) - return 0; -if (sizeof (long)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : -ac_cv_type_long=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 -echo "${ECHO_T}$ac_cv_type_long" >&6 - -echo "$as_me:$LINENO: checking size of long" >&5 -echo $ECHO_N "checking size of long... $ECHO_C" >&6 -if test "${ac_cv_sizeof_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_long=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (long)); } -unsigned long ulongval () { return (long) (sizeof (long)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (long))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_long=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_long=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF -echo "$as_me:$LINENO: checking for s_char" >&5 -echo $ECHO_N "checking for s_char... $ECHO_C" >&6 -if test "${ac_cv_type_s_char+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((s_char *) 0) - return 0; -if (sizeof (s_char)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_s_char=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_s_char=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_s_char" >&5 -echo "${ECHO_T}$ac_cv_type_s_char" >&6 -if test $ac_cv_type_s_char = yes; then +ac_fn_c_check_type "$LINENO" "s_char" "ac_cv_type_s_char" "$ac_includes_default" +if test "x$ac_cv_type_s_char" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_S_CHAR 1 @@ -43282,48 +20156,36 @@ case "$ac_cv_c_char_unsigned$ac_cv_sizeof_signed_char$ac_cv_type_s_char" in no0no) # We have signed chars, can't say 'signed char', no s_char typedef. -cat >>confdefs.h <<\_ACEOF -#define NEED_S_CHAR_TYPEDEF 1 -_ACEOF +$as_echo "#define NEED_S_CHAR_TYPEDEF 1" >>confdefs.h ;; no1no) # We have signed chars, can say 'signed char', no s_char typedef. - cat >>confdefs.h <<\_ACEOF -#define NEED_S_CHAR_TYPEDEF 1 -_ACEOF + $as_echo "#define NEED_S_CHAR_TYPEDEF 1" >>confdefs.h ;; yes0no) # We have unsigned chars, can't say 'signed char', no s_char typedef. - { { echo "$as_me:$LINENO: error: No way to specify a signed character!" >&5 -echo "$as_me: error: No way to specify a signed character!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "No way to specify a signed character!" "$LINENO" 5 ;; yes1no) # We have unsigned chars, can say 'signed char', no s_char typedef. - cat >>confdefs.h <<\_ACEOF -#define NEED_S_CHAR_TYPEDEF 1 -_ACEOF + $as_echo "#define NEED_S_CHAR_TYPEDEF 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5 -echo $ECHO_N "checking for uid_t in sys/types.h... $ECHO_C" >&6 -if test "${ac_cv_type_uid_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 +$as_echo_n "checking for uid_t in sys/types.h... " >&6; } +if test "${ac_cv_type_uid_t+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "uid_t" >/dev/null 2>&1; then + $EGREP "uid_t" >/dev/null 2>&1; then : ac_cv_type_uid_t=yes else ac_cv_type_uid_t=no @@ -43331,128 +20193,34 @@ fi rm -f conftest* fi -echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5 -echo "${ECHO_T}$ac_cv_type_uid_t" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 +$as_echo "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then -cat >>confdefs.h <<\_ACEOF -#define uid_t int -_ACEOF +$as_echo "#define uid_t int" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define gid_t int -_ACEOF +$as_echo "#define gid_t int" >>confdefs.h fi case "$host" in - *-*-aix[45]*) + *-*-aix[456]*) # (prr) aix 4.1 doesn't have clock_settime, but in aix 4.3 it's a stub # (returning ENOSYS). I didn't check 4.2. If, in the future, # IBM pulls its thumbs out long enough to implement clock_settime, # this conditional will need to change. Maybe use AC_TRY_RUN # instead to try to set the time to itself and check errno. ;; - *) - -for ac_func in clock_gettime clock_settime -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + *) for ac_func in clock_gettime clock_settime +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -43460,317 +20228,40 @@ done ;; esac - for ac_func in daemon -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "daemon" "ac_cv_func_daemon" +if test "x$ac_cv_func_daemon" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_DAEMON 1 _ACEOF fi done - for ac_func in finite -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "finite" "ac_cv_func_finite" +if test "x$ac_cv_func_finite" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_FINITE 1 _ACEOF else - -for ac_func in isfinite -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in isfinite +do : + ac_fn_c_check_func "$LINENO" "isfinite" "ac_cv_func_isfinite" +if test "x$ac_cv_func_isfinite" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_ISFINITE 1 _ACEOF else - echo "$as_me:$LINENO: checking for isfinite with " >&5 -echo $ECHO_N "checking for isfinite with ... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for isfinite with " >&5 +$as_echo_n "checking for isfinite with ... " >&6; } _libs=$LIBS LIBS="$LIBS -lm" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -43781,43 +20272,17 @@ float f = 0.0; isfinite(f) return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - cat >>confdefs.h <<\_ACEOF -#define HAVE_ISFINITE 1 -_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + $as_echo "#define HAVE_ISFINITE 1" >>confdefs.h else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$_libs fi done @@ -43825,118 +20290,27 @@ done fi done - - - for ac_func in getbootfile getclock getdtablesize -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done -# Check whether --enable-getifaddrs or --disable-getifaddrs was given. -if test "${enable_getifaddrs+set}" = set; then - enableval="$enable_getifaddrs" - want_getifaddrs="$enableval" +# Check whether --enable-getifaddrs was given. +if test "${enable_getifaddrs+set}" = set; then : + enableval=$enable_getifaddrs; want_getifaddrs="$enableval" else want_getifaddrs="yes" -fi; +fi + case $want_getifaddrs in yes|glibc) @@ -43944,7 +20318,7 @@ yes|glibc) # Do we have getifaddrs() ? # case $host in -*-linux*) +*-*linux*) # Some recent versions of glibc support getifaddrs() which does not # provide AF_INET6 addresses while the function provided by the USAGI # project handles the AF_INET6 case correctly. We need to avoid @@ -43952,103 +20326,12 @@ case $host in # --enable-getifaddrs=glibc. if test $want_getifaddrs = glibc then - -for ac_func in getifaddrs -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in getifaddrs +do : + ac_fn_c_check_func "$LINENO" "getifaddrs" "ac_cv_func_getifaddrs" +if test "x$ac_cv_func_getifaddrs" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_GETIFADDRS 1 _ACEOF fi @@ -44057,75 +20340,45 @@ done else save_LIBS="$LIBS" LIBS="-L/usr/local/v6/lib $LIBS" - echo "$as_me:$LINENO: checking for getifaddrs in -linet6" >&5 -echo $ECHO_N "checking for getifaddrs in -linet6... $ECHO_C" >&6 -if test "${ac_cv_lib_inet6_getifaddrs+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getifaddrs in -linet6" >&5 +$as_echo_n "checking for getifaddrs in -linet6... " >&6; } +if test "${ac_cv_lib_inet6_getifaddrs+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-linet6 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char getifaddrs (); int main () { -getifaddrs (); +return getifaddrs (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_inet6_getifaddrs=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_inet6_getifaddrs=no + ac_cv_lib_inet6_getifaddrs=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_inet6_getifaddrs" >&5 -echo "${ECHO_T}$ac_cv_lib_inet6_getifaddrs" >&6 -if test $ac_cv_lib_inet6_getifaddrs = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_inet6_getifaddrs" >&5 +$as_echo "$ac_cv_lib_inet6_getifaddrs" >&6; } +if test "x$ac_cv_lib_inet6_getifaddrs" = x""yes; then : LIBS="$LIBS -linet6" - cat >>confdefs.h <<\_ACEOF -#define HAVE_GETIFADDRS 1 -_ACEOF + $as_echo "#define HAVE_GETIFADDRS 1" >>confdefs.h else LIBS=${save_LIBS} @@ -44134,103 +20387,12 @@ fi fi ;; *) - -for ac_func in getifaddrs -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in getifaddrs +do : + ac_fn_c_check_func "$LINENO" "getifaddrs" "ac_cv_func_getifaddrs" +if test "x$ac_cv_func_getifaddrs" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_GETIFADDRS 1 _ACEOF fi @@ -44243,21 +20405,17 @@ no) ;; esac -echo "$as_me:$LINENO: checking type of socklen arg for getsockname()" >&5 -echo $ECHO_N "checking type of socklen arg for getsockname()... $ECHO_C" >&6 -if test "${ac_cv_func_getsockname_arg2+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking type of socklen arg for getsockname()" >&5 +$as_echo_n "checking type of socklen arg for getsockname()... " >&6; } +if test "${ac_cv_func_getsockname_arg2+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "${ac_cv_func_getsockname_socklen_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "${ac_cv_func_getsockname_socklen_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else for ac_cv_func_getsockname_arg2 in 'struct sockaddr *' 'void *'; do for ac_cv_func_getsockname_socklen_type in 'socklen_t' 'size_t' 'unsigned int' 'int'; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_SYS_TYPES_H #include @@ -44274,36 +20432,12 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_not_found=no ; break 2 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_not_found=yes + ac_not_found=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done done @@ -44313,208 +20447,28 @@ fi if test "$ac_not_found" = yes; then ac_cv_func_getsockname_socklen_type='socklen_t' fi -echo "$as_me:$LINENO: result: $ac_cv_func_getsockname_socklen_type" >&5 -echo "${ECHO_T}$ac_cv_func_getsockname_socklen_type" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getsockname_socklen_type" >&5 +$as_echo "$ac_cv_func_getsockname_socklen_type" >&6; } cat >>confdefs.h <<_ACEOF #define GETSOCKNAME_SOCKLEN_TYPE $ac_cv_func_getsockname_socklen_type _ACEOF - for ac_func in getrusage -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage" +if test "x$ac_cv_func_getrusage" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_GETRUSAGE 1 _ACEOF fi done -echo "$as_me:$LINENO: checking for gettimeofday" >&5 -echo $ECHO_N "checking for gettimeofday... $ECHO_C" >&6 -if test "${ac_cv_func_gettimeofday+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define gettimeofday to an innocuous variant, in case declares gettimeofday. - For example, HP-UX 11i declares gettimeofday. */ -#define gettimeofday innocuous_gettimeofday +ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday" +if test "x$ac_cv_func_gettimeofday" = x""yes; then : -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char gettimeofday (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef gettimeofday - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char gettimeofday (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_gettimeofday) || defined (__stub___gettimeofday) -choke me -#else -char (*f) () = gettimeofday; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != gettimeofday; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_gettimeofday=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_gettimeofday=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_gettimeofday" >&5 -echo "${ECHO_T}$ac_cv_func_gettimeofday" >&6 -if test $ac_cv_func_gettimeofday = yes; then - : else case "$host" in @@ -44526,103 +20480,12 @@ fi case "$host" in *-pc-cygwin*) ;; - *) -for ac_func in getuid -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + *) for ac_func in getuid +do : + ac_fn_c_check_func "$LINENO" "getuid" "ac_cv_func_getuid" +if test "x$ac_cv_func_getuid" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_GETUID 1 _ACEOF fi @@ -44630,103 +20493,12 @@ done ;; esac - for ac_func in hstrerror -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "hstrerror" "ac_cv_func_hstrerror" +if test "x$ac_cv_func_hstrerror" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_HSTRERROR 1 _ACEOF fi @@ -44736,97 +20508,8 @@ done # # Check for if_nametoindex() for IPv6 scoped addresses support # -echo "$as_me:$LINENO: checking for if_nametoindex" >&5 -echo $ECHO_N "checking for if_nametoindex... $ECHO_C" >&6 -if test "${ac_cv_func_if_nametoindex+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define if_nametoindex to an innocuous variant, in case declares if_nametoindex. - For example, HP-UX 11i declares gettimeofday. */ -#define if_nametoindex innocuous_if_nametoindex - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char if_nametoindex (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef if_nametoindex - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char if_nametoindex (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_if_nametoindex) || defined (__stub___if_nametoindex) -choke me -#else -char (*f) () = if_nametoindex; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != if_nametoindex; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_if_nametoindex=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_if_nametoindex=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_if_nametoindex" >&5 -echo "${ECHO_T}$ac_cv_func_if_nametoindex" >&6 -if test $ac_cv_func_if_nametoindex = yes; then +ac_fn_c_check_func "$LINENO" "if_nametoindex" "ac_cv_func_if_nametoindex" +if test "x$ac_cv_func_if_nametoindex" = x""yes; then : ac_cv_have_if_nametoindex=yes else ac_cv_have_if_nametoindex=no @@ -44836,71 +20519,43 @@ case $ac_cv_have_if_nametoindex in no) case "$host" in *-hp-hpux*) - echo "$as_me:$LINENO: checking for if_nametoindex in -lipv6" >&5 -echo $ECHO_N "checking for if_nametoindex in -lipv6... $ECHO_C" >&6 -if test "${ac_cv_lib_ipv6_if_nametoindex+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for if_nametoindex in -lipv6" >&5 +$as_echo_n "checking for if_nametoindex in -lipv6... " >&6; } +if test "${ac_cv_lib_ipv6_if_nametoindex+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipv6 $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char if_nametoindex (); int main () { -if_nametoindex (); +return if_nametoindex (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipv6_if_nametoindex=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_ipv6_if_nametoindex=no + ac_cv_lib_ipv6_if_nametoindex=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_ipv6_if_nametoindex" >&5 -echo "${ECHO_T}$ac_cv_lib_ipv6_if_nametoindex" >&6 -if test $ac_cv_lib_ipv6_if_nametoindex = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipv6_if_nametoindex" >&5 +$as_echo "$ac_cv_lib_ipv6_if_nametoindex" >&6; } +if test "x$ac_cv_lib_ipv6_if_nametoindex" = x""yes; then : ac_cv_have_if_nametoindex=yes LIBS="-lipv6 $LIBS" fi @@ -44911,414 +20566,46 @@ esac case $ac_cv_have_if_nametoindex in yes) -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_HAVEIFNAMETOINDEX 1 -_ACEOF +$as_echo "#define ISC_PLATFORM_HAVEIFNAMETOINDEX 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking for inet_ntop" >&5 -echo $ECHO_N "checking for inet_ntop... $ECHO_C" >&6 -if test "${ac_cv_func_inet_ntop+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define inet_ntop to an innocuous variant, in case declares inet_ntop. - For example, HP-UX 11i declares gettimeofday. */ -#define inet_ntop innocuous_inet_ntop +ac_fn_c_check_func "$LINENO" "inet_ntop" "ac_cv_func_inet_ntop" +if test "x$ac_cv_func_inet_ntop" = x""yes; then : -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char inet_ntop (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef inet_ntop - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char inet_ntop (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_inet_ntop) || defined (__stub___inet_ntop) -choke me -#else -char (*f) () = inet_ntop; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != inet_ntop; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_inet_ntop=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_inet_ntop=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_inet_ntop" >&5 -echo "${ECHO_T}$ac_cv_func_inet_ntop" >&6 -if test $ac_cv_func_inet_ntop = yes; then - : else -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_NEEDNTOP 1 -_ACEOF +$as_echo "#define ISC_PLATFORM_NEEDNTOP 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for inet_pton" >&5 -echo $ECHO_N "checking for inet_pton... $ECHO_C" >&6 -if test "${ac_cv_func_inet_pton+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define inet_pton to an innocuous variant, in case declares inet_pton. - For example, HP-UX 11i declares gettimeofday. */ -#define inet_pton innocuous_inet_pton +ac_fn_c_check_func "$LINENO" "inet_pton" "ac_cv_func_inet_pton" +if test "x$ac_cv_func_inet_pton" = x""yes; then : -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char inet_pton (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef inet_pton - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char inet_pton (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_inet_pton) || defined (__stub___inet_pton) -choke me -#else -char (*f) () = inet_pton; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != inet_pton; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_inet_pton=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_inet_pton=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_inet_pton" >&5 -echo "${ECHO_T}$ac_cv_func_inet_pton" >&6 -if test $ac_cv_func_inet_pton = yes; then - : else -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_NEEDPTON 1 -_ACEOF +$as_echo "#define ISC_PLATFORM_NEEDPTON 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for inet_aton" >&5 -echo $ECHO_N "checking for inet_aton... $ECHO_C" >&6 -if test "${ac_cv_func_inet_aton+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define inet_aton to an innocuous variant, in case declares inet_aton. - For example, HP-UX 11i declares gettimeofday. */ -#define inet_aton innocuous_inet_aton +ac_fn_c_check_func "$LINENO" "inet_aton" "ac_cv_func_inet_aton" +if test "x$ac_cv_func_inet_aton" = x""yes; then : -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char inet_aton (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef inet_aton - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char inet_aton (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_inet_aton) || defined (__stub___inet_aton) -choke me -#else -char (*f) () = inet_aton; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != inet_aton; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_inet_aton=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_inet_aton=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_inet_aton" >&5 -echo "${ECHO_T}$ac_cv_func_inet_aton" >&6 -if test $ac_cv_func_inet_aton = yes; then - : else -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_NEEDATON 1 -_ACEOF +$as_echo "#define ISC_PLATFORM_NEEDATON 1" >>confdefs.h fi - - - - - for ac_func in K_open kvm_open memcpy memmove memset -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -45328,103 +20615,12 @@ case "$host" in *-*-sco3.2v5.0.*) # Just stubs. Idiots. ;; - *) -for ac_func in mkstemp -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + *) for ac_func in mkstemp +do : + ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp" +if test "x$ac_cv_func_mkstemp" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_MKSTEMP 1 _ACEOF fi @@ -45432,116 +20628,25 @@ done ;; esac - for ac_func in mktime -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "mktime" "ac_cv_func_mktime" +if test "x$ac_cv_func_mktime" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_MKTIME 1 _ACEOF fi done case "$host" in - *-*-aix[45]*) + *-*-aix[456]*) # Just a stub. Idiots. ;; *-*-irix[45]*) # Just a stub in "old" Irix. Idiots. ;; - *-*-linux*) + *-*-*linux*) # there, but more trouble than it is worth for now (resolver problems) ;; *-*-qnx*) @@ -45553,308 +20658,35 @@ case "$host" in alpha*-dec-osf4*|alpha*-dec-osf5*) # mlockall is there, as a #define calling memlk via # Not easy to test for - cheat. - -for ac_func in memlk -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in memlk +do : + ac_fn_c_check_func "$LINENO" "memlk" "ac_cv_func_memlk" +if test "x$ac_cv_func_memlk" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_MEMLK 1 _ACEOF ac_cv_func_mlockall='yes' fi done - -for ac_func in mlockall -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in mlockall +do : + ac_fn_c_check_func "$LINENO" "mlockall" "ac_cv_func_mlockall" +if test "x$ac_cv_func_mlockall" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_MLOCKALL 1 _ACEOF fi done ;; - *) -for ac_func in mlockall -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + *) for ac_func in mlockall +do : + ac_fn_c_check_func "$LINENO" "mlockall" "ac_cv_func_mlockall" +if test "x$ac_cv_func_mlockall" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_MLOCKALL 1 _ACEOF fi @@ -45862,104 +20694,14 @@ done ;; esac - - for ac_func in nice nlist -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -45969,104 +20711,14 @@ case "$host" in *-*-solaris2.6) # Broken... ;; - *) - -for ac_func in ntp_adjtime ntp_gettime -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + *) for ac_func in ntp_adjtime ntp_gettime +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -46074,217 +20726,32 @@ done ;; esac - - - - - - for ac_func in plock pututline pututxline readlink recvmsg rtprio -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done case "$host" in - *-*-aix[45]*) + *-*-aix[456]*) # Just a stub in AIX 4. Idiots. ;; *-*-solaris2.5*) # Just stubs in solaris2.5. Idiots. ;; - *) -for ac_func in sched_setscheduler -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + *) for ac_func in sched_setscheduler +do : + ac_fn_c_check_func "$LINENO" "sched_setscheduler" "ac_cv_func_sched_setscheduler" +if test "x$ac_cv_func_sched_setscheduler" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_SCHED_SETSCHEDULER 1 _ACEOF fi @@ -46292,310 +20759,36 @@ done ;; esac - - - - for ac_func in setlinebuf setpgid setpriority setsid -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done - for ac_func in setrlimit -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "setrlimit" "ac_cv_func_setrlimit" +if test "x$ac_cv_func_setrlimit" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_SETRLIMIT 1 _ACEOF fi done - for ac_func in settimeofday -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "settimeofday" "ac_cv_func_settimeofday" +if test "x$ac_cv_func_settimeofday" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_SETTIMEOFDAY 1 _ACEOF else @@ -46607,426 +20800,58 @@ esac fi done - - for ac_func in setvbuf sigaction -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done - - - - - - - for ac_func in sigvec sigset sigsuspend stime strchr sysconf sysctl -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done - - - - for ac_func in snprintf strdup strerror strstr -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done - for ac_func in timegm -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm" +if test "x$ac_cv_func_timegm" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_TIMEGM 1 _ACEOF fi done case "$host" in - *-*-aix[45]*) + *-*-aix[456]*) # Just stubs. Idiots. ;; *-*-netbsd1*) @@ -47038,104 +20863,14 @@ case "$host" in *-*-openbsd*) # Just stubs. Idiots. ;; - *) - -for ac_func in timer_create timer_settime -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + *) for ac_func in timer_create timer_settime +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -47147,103 +20882,12 @@ case "$host" in *-pc-cygwin*) # I have no idea... ;; - *) -for ac_func in umask -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + *) for ac_func in umask +do : + ac_fn_c_check_func "$LINENO" "umask" "ac_cv_func_umask" +if test "x$ac_cv_func_umask" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_UMASK 1 _ACEOF fi @@ -47251,107 +20895,14 @@ done ;; esac - - - - - for ac_func in uname updwtmp updwtmpx vsnprintf vsprintf -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -47360,20 +20911,16 @@ done ### -# http://bugs.ntp.isc.org/737 +# http://bugs.ntp.org/737 case "$ac_cv_func_recvmsg" in yes) - echo "$as_me:$LINENO: checking if we need extra help to define struct iovec" >&5 -echo $ECHO_N "checking if we need extra help to define struct iovec... $ECHO_C" >&6 - if test "${ac_cv_struct_iovec_help+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need extra help to define struct iovec" >&5 +$as_echo_n "checking if we need extra help to define struct iovec... " >&6; } + if test "${ac_cv_struct_iovec_help+set}" = set; then : + $as_echo_n "(cached) " >&6 else for ac_cv_struct_iovec_help in '0' '1'; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_SYS_TYPES_H #include @@ -47404,75 +20951,43 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_worked=yes ; break 1 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_worked=no + ac_worked=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done fi case "$ac_worked$ac_cv_struct_iovec_help" in yes1) -cat >>confdefs.h <<\_ACEOF -#define HAVE_SYS_UIO_H 1 -_ACEOF +$as_echo "#define HAVE_SYS_UIO_H 1" >>confdefs.h ans=yes ;; *) ans=no esac - echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } ;; esac case "$host" in *-*-sunos4*) -cat >>confdefs.h <<\_ACEOF -#define SPRINTF_CHAR 1 -_ACEOF +$as_echo "#define SPRINTF_CHAR 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking number of arguments to gettimeofday()" >&5 -echo $ECHO_N "checking number of arguments to gettimeofday()... $ECHO_C" >&6 -if test "${ac_cv_func_Xettimeofday_nargs+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking number of arguments to gettimeofday()" >&5 +$as_echo_n "checking number of arguments to gettimeofday()... " >&6; } +if test "${ac_cv_func_Xettimeofday_nargs+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int @@ -47486,58 +21001,28 @@ settimeofday((struct timeval*)0,(struct timezone*)0); return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_Xettimeofday_nargs=2 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_Xettimeofday_nargs=1 + ac_cv_func_Xettimeofday_nargs=1 fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_func_Xettimeofday_nargs" >&5 -echo "${ECHO_T}$ac_cv_func_Xettimeofday_nargs" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_Xettimeofday_nargs" >&5 +$as_echo "$ac_cv_func_Xettimeofday_nargs" >&6; } if test $ac_cv_func_Xettimeofday_nargs = 1; then -cat >>confdefs.h <<\_ACEOF -#define SYSV_TIMEOFDAY 1 -_ACEOF +$as_echo "#define SYSV_TIMEOFDAY 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking number of arguments taken by setpgrp()" >&5 -echo $ECHO_N "checking number of arguments taken by setpgrp()... $ECHO_C" >&6 -if test "${ac_cv_func_setpgrp_nargs+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking number of arguments taken by setpgrp()" >&5 +$as_echo_n "checking number of arguments taken by setpgrp()... " >&6; } +if test "${ac_cv_func_setpgrp_nargs+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_SYS_TYPES_H @@ -47555,61 +21040,31 @@ setpgrp(0,0); return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_setpgrp_nargs=2 else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_setpgrp_nargs=0 + ac_cv_func_setpgrp_nargs=0 fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_func_setpgrp_nargs" >&5 -echo "${ECHO_T}$ac_cv_func_setpgrp_nargs" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_setpgrp_nargs" >&5 +$as_echo "$ac_cv_func_setpgrp_nargs" >&6; } if test $ac_cv_func_setpgrp_nargs = 0; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_SETPGRP_0 1 -_ACEOF +$as_echo "#define HAVE_SETPGRP_0 1" >>confdefs.h fi save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -I$srcdir/include" -echo "$as_me:$LINENO: checking argument pointer type of qsort()'s compare function and base" >&5 -echo $ECHO_N "checking argument pointer type of qsort()'s compare function and base... $ECHO_C" >&6 -if test "${ac_cv_func_qsort_argtype+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking argument pointer type of qsort()'s compare function and base" >&5 +$as_echo_n "checking argument pointer type of qsort()'s compare function and base... " >&6; } +if test "${ac_cv_func_qsort_argtype+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include "l_stdlib.h" @@ -47636,62 +21091,32 @@ qsort(base, 2, sizeof(char *), sortfunc); return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_qsort_argtype=void else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_qsort_argtype=char + ac_cv_func_qsort_argtype=char fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_func_qsort_argtype" >&5 -echo "${ECHO_T}$ac_cv_func_qsort_argtype" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_qsort_argtype" >&5 +$as_echo "$ac_cv_func_qsort_argtype" >&6; } case "$ac_cv_func_qsort_argtype" in void) -cat >>confdefs.h <<\_ACEOF -#define QSORT_USES_VOID_P 1 -_ACEOF +$as_echo "#define QSORT_USES_VOID_P 1" >>confdefs.h ;; esac CFLAGS=$save_CFLAGS -echo "$as_me:$LINENO: checking if we need to declare 'errno'" >&5 -echo $ECHO_N "checking if we need to declare 'errno'... $ECHO_C" >&6 -if test "${ac_cv_decl_errno+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need to declare 'errno'" >&5 +$as_echo_n "checking if we need to declare 'errno'... " >&6; } +if test "${ac_cv_decl_errno+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_ERRNO_H #include @@ -47704,57 +21129,27 @@ errno = 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_decl_errno=no else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_decl_errno=yes + ac_cv_decl_errno=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_decl_errno" >&5 -echo "${ECHO_T}$ac_cv_decl_errno" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_errno" >&5 +$as_echo "$ac_cv_decl_errno" >&6; } case "$ac_cv_decl_errno" in yes) -cat >>confdefs.h <<\_ACEOF -#define DECL_ERRNO 1 -_ACEOF +$as_echo "#define DECL_ERRNO 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if we may declare 'h_errno'" >&5 -echo $ECHO_N "checking if we may declare 'h_errno'... $ECHO_C" >&6 -if test "${ac_cv_decl_h_errno+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we may declare 'h_errno'" >&5 +$as_echo_n "checking if we may declare 'h_errno'... " >&6; } +if test "${ac_cv_decl_h_errno+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_NETINET_IN_H @@ -47777,57 +21172,27 @@ extern int h_errno; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_decl_h_errno=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_decl_h_errno=no + ac_cv_decl_h_errno=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_decl_h_errno" >&5 -echo "${ECHO_T}$ac_cv_decl_h_errno" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_h_errno" >&5 +$as_echo "$ac_cv_decl_h_errno" >&6; } case "$ac_cv_decl_h_errno" in yes) -cat >>confdefs.h <<\_ACEOF -#define DECL_H_ERRNO 1 -_ACEOF +$as_echo "#define DECL_H_ERRNO 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if declaring 'char *sys_errlist[]' is ok" >&5 -echo $ECHO_N "checking if declaring 'char *sys_errlist[]' is ok... $ECHO_C" >&6 -if test "${ac_cv_decl_sys_errlist+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if declaring 'char *sys_errlist[]' is ok" >&5 +$as_echo_n "checking if declaring 'char *sys_errlist[]' is ok... " >&6; } +if test "${ac_cv_decl_sys_errlist+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_ERRNO_H @@ -47842,57 +21207,27 @@ extern char *sys_errlist[]; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_decl_sys_errlist=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_decl_sys_errlist=no + ac_cv_decl_sys_errlist=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_decl_sys_errlist" >&5 -echo "${ECHO_T}$ac_cv_decl_sys_errlist" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_sys_errlist" >&5 +$as_echo "$ac_cv_decl_sys_errlist" >&6; } case "$ac_cv_decl_sys_errlist" in yes) -cat >>confdefs.h <<\_ACEOF -#define CHAR_SYS_ERRLIST 1 -_ACEOF +$as_echo "#define CHAR_SYS_ERRLIST 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if declaring 'syscall()' is ok" >&5 -echo $ECHO_N "checking if declaring 'syscall()' is ok... $ECHO_C" >&6 -if test "${ac_cv_decl_syscall+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if declaring 'syscall()' is ok" >&5 +$as_echo_n "checking if declaring 'syscall()' is ok... " >&6; } +if test "${ac_cv_decl_syscall+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_SYS_TYPES_H @@ -47915,395 +21250,239 @@ extern int syscall P((int, ...)); return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_decl_syscall=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_decl_syscall=no + ac_cv_decl_syscall=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_decl_syscall" >&5 -echo "${ECHO_T}$ac_cv_decl_syscall" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_decl_syscall" >&5 +$as_echo "$ac_cv_decl_syscall" >&6; } case "$ac_cv_decl_syscall" in yes) -cat >>confdefs.h <<\_ACEOF -#define DECL_SYSCALL 1 -_ACEOF +$as_echo "#define DECL_SYSCALL 1" >>confdefs.h ;; esac case "$host" in *-*-aix4.3.*) -cat >>confdefs.h <<\_ACEOF -#define DECL_HSTRERROR_0 1 -_ACEOF +$as_echo "#define DECL_HSTRERROR_0 1" >>confdefs.h # Needed for XLC under AIX 4.3.2 ;; *-*-mpeix*) -cat >>confdefs.h <<\_ACEOF -#define DECL_ADJTIME_0 1 -_ACEOF +$as_echo "#define DECL_ADJTIME_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_INET_NTOA_0 1 -_ACEOF +$as_echo "#define DECL_INET_NTOA_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_MKTEMP_0 1 -_ACEOF +$as_echo "#define DECL_MKTEMP_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SELECT_0 1 -_ACEOF +$as_echo "#define DECL_SELECT_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SETITIMER_0 1 -_ACEOF +$as_echo "#define DECL_SETITIMER_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SYSLOG_0 1 -_ACEOF +$as_echo "#define DECL_SYSLOG_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_TIMEOFDAY_0 1 -_ACEOF +$as_echo "#define DECL_TIMEOFDAY_0 1" >>confdefs.h ;; *-*-osf[45]*) -cat >>confdefs.h <<\_ACEOF -#define DECL_PLOCK_0 1 -_ACEOF +$as_echo "#define DECL_PLOCK_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_STIME_1 1 -_ACEOF +$as_echo "#define DECL_STIME_1 1" >>confdefs.h ;; *-*-qnx*) -cat >>confdefs.h <<\_ACEOF -#define DECL_ADJTIME_0 1 -_ACEOF +$as_echo "#define DECL_ADJTIME_0 1" >>confdefs.h ;; *-*-riscos4*) -cat >>confdefs.h <<\_ACEOF -#define DECL_ADJTIME_0 1 -_ACEOF +$as_echo "#define DECL_ADJTIME_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_BZERO_0 1 -_ACEOF +$as_echo "#define DECL_BZERO_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_IOCTL_0 1 -_ACEOF +$as_echo "#define DECL_IOCTL_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_IPC_0 1 -_ACEOF +$as_echo "#define DECL_IPC_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_MEMMOVE_0 1 -_ACEOF +$as_echo "#define DECL_MEMMOVE_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_MKTEMP_0 1 -_ACEOF +$as_echo "#define DECL_MKTEMP_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_RENAME_0 1 -_ACEOF +$as_echo "#define DECL_RENAME_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SELECT_0 1 -_ACEOF +$as_echo "#define DECL_SELECT_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SETITIMER_0 1 -_ACEOF +$as_echo "#define DECL_SETITIMER_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SETPRIORITY_0 1 -_ACEOF +$as_echo "#define DECL_SETPRIORITY_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_STDIO_0 1 -_ACEOF +$as_echo "#define DECL_STDIO_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_STRTOL_0 1 -_ACEOF +$as_echo "#define DECL_STRTOL_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SYSLOG_0 1 -_ACEOF +$as_echo "#define DECL_SYSLOG_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_TIME_0 1 -_ACEOF +$as_echo "#define DECL_TIME_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_TIMEOFDAY_0 1 -_ACEOF +$as_echo "#define DECL_TIMEOFDAY_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_TOLOWER_0 1 -_ACEOF +$as_echo "#define DECL_TOLOWER_0 1" >>confdefs.h ;; *-*-solaris2*) -cat >>confdefs.h <<\_ACEOF -#define DECL_MKSTEMP_0 1 -_ACEOF +$as_echo "#define DECL_MKSTEMP_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SETPRIORITY_1 1 -_ACEOF +$as_echo "#define DECL_SETPRIORITY_1 1" >>confdefs.h case "$host" in *-*-solaris2.4) -cat >>confdefs.h <<\_ACEOF -#define DECL_TIMEOFDAY_0 1 -_ACEOF +$as_echo "#define DECL_TIMEOFDAY_0 1" >>confdefs.h ;; esac ;; *-*-sunos4*) -cat >>confdefs.h <<\_ACEOF -#define DECL_ADJTIME_0 1 -_ACEOF +$as_echo "#define DECL_ADJTIME_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_BCOPY_0 1 -_ACEOF +$as_echo "#define DECL_BCOPY_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_BZERO_0 1 -_ACEOF +$as_echo "#define DECL_BZERO_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_IOCTL_0 1 -_ACEOF +$as_echo "#define DECL_IOCTL_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_IPC_0 1 -_ACEOF +$as_echo "#define DECL_IPC_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_MEMMOVE_0 1 -_ACEOF +$as_echo "#define DECL_MEMMOVE_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_MKTEMP_0 1 -_ACEOF +$as_echo "#define DECL_MKTEMP_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_MKSTEMP_0 1 -_ACEOF +$as_echo "#define DECL_MKSTEMP_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_RENAME_0 1 -_ACEOF +$as_echo "#define DECL_RENAME_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SELECT_0 1 -_ACEOF +$as_echo "#define DECL_SELECT_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SETITIMER_0 1 -_ACEOF +$as_echo "#define DECL_SETITIMER_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SETPRIORITY_0 1 -_ACEOF +$as_echo "#define DECL_SETPRIORITY_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SIGVEC_0 1 -_ACEOF +$as_echo "#define DECL_SIGVEC_0 1" >>confdefs.h case "`basename $ac_cv_prog_CC`" in acc*) ;; *) -cat >>confdefs.h <<\_ACEOF -#define DECL_STDIO_0 1 -_ACEOF +$as_echo "#define DECL_STDIO_0 1" >>confdefs.h ;; esac -cat >>confdefs.h <<\_ACEOF -#define DECL_STRTOL_0 1 -_ACEOF +$as_echo "#define DECL_STRTOL_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SYSLOG_0 1 -_ACEOF +$as_echo "#define DECL_SYSLOG_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_TIME_0 1 -_ACEOF +$as_echo "#define DECL_TIME_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_TIMEOFDAY_0 1 -_ACEOF +$as_echo "#define DECL_TIMEOFDAY_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_TOLOWER_0 1 -_ACEOF +$as_echo "#define DECL_TOLOWER_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_TOUPPER_0 1 -_ACEOF +$as_echo "#define DECL_TOUPPER_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_STRERROR_0 1 -_ACEOF +$as_echo "#define DECL_STRERROR_0 1" >>confdefs.h ;; *-*-ultrix4*) -cat >>confdefs.h <<\_ACEOF -#define DECL_ADJTIME_0 1 -_ACEOF +$as_echo "#define DECL_ADJTIME_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_BZERO_0 1 -_ACEOF +$as_echo "#define DECL_BZERO_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_CFSETISPEED_0 1 -_ACEOF +$as_echo "#define DECL_CFSETISPEED_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_IOCTL_0 1 -_ACEOF +$as_echo "#define DECL_IOCTL_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_IPC_0 1 -_ACEOF +$as_echo "#define DECL_IPC_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_MKTEMP_0 1 -_ACEOF +$as_echo "#define DECL_MKTEMP_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_NLIST_0 1 -_ACEOF +$as_echo "#define DECL_NLIST_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_PLOCK_0 1 -_ACEOF +$as_echo "#define DECL_PLOCK_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SELECT_0 1 -_ACEOF +$as_echo "#define DECL_SELECT_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SETITIMER_0 1 -_ACEOF +$as_echo "#define DECL_SETITIMER_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SETPRIORITY_0 1 -_ACEOF +$as_echo "#define DECL_SETPRIORITY_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_STIME_0 1 -_ACEOF +$as_echo "#define DECL_STIME_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_SYSLOG_0 1 -_ACEOF +$as_echo "#define DECL_SYSLOG_0 1" >>confdefs.h -cat >>confdefs.h <<\_ACEOF -#define DECL_TIMEOFDAY_0 1 -_ACEOF +$as_echo "#define DECL_TIMEOFDAY_0 1" >>confdefs.h ;; esac @@ -48311,17 +21490,15 @@ esac case "$host" in *-*-sco3.2*) -cat >>confdefs.h <<\_ACEOF -#define TERMIOS_NEEDS__SVID3 1 -_ACEOF +$as_echo "#define TERMIOS_NEEDS__SVID3 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if we need extra room for SO_RCVBUF" >&5 -echo $ECHO_N "checking if we need extra room for SO_RCVBUF... $ECHO_C" >&6 -if test "${ac_cv_var_rcvbuf_slop+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need extra room for SO_RCVBUF" >&5 +$as_echo_n "checking if we need extra room for SO_RCVBUF... " >&6; } +if test "${ac_cv_var_rcvbuf_slop+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=no case "$host" in @@ -48331,20 +21508,18 @@ case "$host" in esac ac_cv_var_rcvbuf_slop=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_rcvbuf_slop" >&5 -echo "${ECHO_T}$ac_cv_var_rcvbuf_slop" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_rcvbuf_slop" >&5 +$as_echo "$ac_cv_var_rcvbuf_slop" >&6; } case "$ac_cv_var_rcvbuf_slop" in yes) -cat >>confdefs.h <<\_ACEOF -#define NEED_RCVBUF_SLOP 1 -_ACEOF +$as_echo "#define NEED_RCVBUF_SLOP 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if we will open the broadcast socket" >&5 -echo $ECHO_N "checking if we will open the broadcast socket... $ECHO_C" >&6 -if test "${ac_cv_var_open_bcast_socket+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we will open the broadcast socket" >&5 +$as_echo_n "checking if we will open the broadcast socket... " >&6; } +if test "${ac_cv_var_open_bcast_socket+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=yes case "$host" in @@ -48354,20 +21529,18 @@ case "$host" in esac ac_cv_var_open_bcast_socket=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_open_bcast_socket" >&5 -echo "${ECHO_T}$ac_cv_var_open_bcast_socket" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_open_bcast_socket" >&5 +$as_echo "$ac_cv_var_open_bcast_socket" >&6; } case "$ac_cv_var_open_bcast_socket" in yes) -cat >>confdefs.h <<\_ACEOF -#define OPEN_BCAST_SOCKET 1 -_ACEOF +$as_echo "#define OPEN_BCAST_SOCKET 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if we want the HPUX version of FindConfig()" >&5 -echo $ECHO_N "checking if we want the HPUX version of FindConfig()... $ECHO_C" >&6 -if test "${ac_cv_var_hpux_findconfig+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want the HPUX version of FindConfig()" >&5 +$as_echo_n "checking if we want the HPUX version of FindConfig()... " >&6; } +if test "${ac_cv_var_hpux_findconfig+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=no case "$host" in @@ -48377,20 +21550,18 @@ case "$host" in esac ac_cv_var_hpux_findconfig=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_hpux_findconfig" >&5 -echo "${ECHO_T}$ac_cv_var_hpux_findconfig" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_hpux_findconfig" >&5 +$as_echo "$ac_cv_var_hpux_findconfig" >&6; } case "$ac_cv_var_hpux_findconfig" in yes) -cat >>confdefs.h <<\_ACEOF -#define NEED_HPUX_FINDCONFIG 1 -_ACEOF +$as_echo "#define NEED_HPUX_FINDCONFIG 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if process groups are set with -pid" >&5 -echo $ECHO_N "checking if process groups are set with -pid... $ECHO_C" >&6 -if test "${ac_cv_arg_setpgrp_negpid+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if process groups are set with -pid" >&5 +$as_echo_n "checking if process groups are set with -pid... " >&6; } +if test "${ac_cv_arg_setpgrp_negpid+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$host" in *-*-hpux[567]*) @@ -48399,7 +21570,7 @@ else *-*-hpux*) ans=yes ;; - *-*-linux*) + *-*-*linux*) ans=yes ;; *-*-sunos3*) @@ -48414,20 +21585,18 @@ else esac ac_cv_arg_setpgrp_negpid=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_arg_setpgrp_negpid" >&5 -echo "${ECHO_T}$ac_cv_arg_setpgrp_negpid" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_arg_setpgrp_negpid" >&5 +$as_echo "$ac_cv_arg_setpgrp_negpid" >&6; } case "$ac_cv_arg_setpgrp_negpid" in yes) -cat >>confdefs.h <<\_ACEOF -#define UDP_BACKWARDS_SETOWN 1 -_ACEOF +$as_echo "#define UDP_BACKWARDS_SETOWN 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if we need a ctty for F_SETOWN" >&5 -echo $ECHO_N "checking if we need a ctty for F_SETOWN... $ECHO_C" >&6 -if test "${ac_cv_func_ctty_for_f_setown+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need a ctty for F_SETOWN" >&5 +$as_echo_n "checking if we need a ctty for F_SETOWN... " >&6; } +if test "${ac_cv_func_ctty_for_f_setown+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$host" in *-*-bsdi[23]*) @@ -48445,25 +21614,26 @@ else *-*-osf*) ans=yes ;; + *-*-darwin*) + ans=yes + ;; *) ans=no ;; esac ac_cv_func_ctty_for_f_setown=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_func_ctty_for_f_setown" >&5 -echo "${ECHO_T}$ac_cv_func_ctty_for_f_setown" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_ctty_for_f_setown" >&5 +$as_echo "$ac_cv_func_ctty_for_f_setown" >&6; } case "$ac_cv_func_ctty_for_f_setown" in yes) -cat >>confdefs.h <<\_ACEOF -#define USE_FSETOWNCTTY 1 -_ACEOF +$as_echo "#define USE_FSETOWNCTTY 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if the OS misses to clear cached routes when more specific routes become available" >&5 -echo $ECHO_N "checking if the OS misses to clear cached routes when more specific routes become available... $ECHO_C" >&6 -if test "${ac_cv_os_routeupdates+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the OS fails to clear cached routes when more specific routes become available" >&5 +$as_echo_n "checking if the OS fails to clear cached routes when more specific routes become available... " >&6; } +if test "${ac_cv_os_routeupdates+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$host" in *-*-netbsd*) @@ -48474,23 +21644,21 @@ else esac ac_cv_os_routeupdates=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_os_routeupdates" >&5 -echo "${ECHO_T}$ac_cv_os_routeupdates" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_routeupdates" >&5 +$as_echo "$ac_cv_os_routeupdates" >&6; } case "$ac_cv_os_routeupdates" in yes) -cat >>confdefs.h <<\_ACEOF -#define OS_MISSES_SPECIFIC_ROUTE_UPDATES 1 -_ACEOF +$as_echo "#define OS_MISSES_SPECIFIC_ROUTE_UPDATES 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if the OS needs the wildcard socket set to REUSEADDR for binding interface addresses" >&5 -echo $ECHO_N "checking if the OS needs the wildcard socket set to REUSEADDR for binding interface addresses... $ECHO_C" >&6 -if test "${ac_cv_os_wildcardreuse+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the OS needs the wildcard socket set to REUSEADDR for binding interface addresses" >&5 +$as_echo_n "checking if the OS needs the wildcard socket set to REUSEADDR for binding interface addresses... " >&6; } +if test "${ac_cv_os_wildcardreuse+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$host" in - *-*-linux*) + *-*-*linux*) ans=yes ;; *) ans=no @@ -48498,19 +21666,17 @@ else esac ac_cv_os_wildcardreuse=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_os_wildcardreuse" >&5 -echo "${ECHO_T}$ac_cv_os_wildcardreuse" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_wildcardreuse" >&5 +$as_echo "$ac_cv_os_wildcardreuse" >&6; } case "$ac_cv_os_wildcardreuse" in yes) -cat >>confdefs.h <<\_ACEOF -#define OS_NEEDS_REUSEADDR_FOR_IFADDRBIND 1 -_ACEOF +$as_echo "#define OS_NEEDS_REUSEADDR_FOR_IFADDRBIND 1" >>confdefs.h ;; esac ntp_warning='GRONK' -echo "$as_me:$LINENO: checking if we'll use clock_settime or settimeofday or stime" >&5 -echo $ECHO_N "checking if we'll use clock_settime or settimeofday or stime... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we'll use clock_settime or settimeofday or stime" >&5 +$as_echo_n "checking if we'll use clock_settime or settimeofday or stime... " >&6; } case "$ac_cv_func_clock_settime$ac_cv_func_settimeofday$ac_cv_func_stime" in yes*) ntp_warning='' @@ -48531,19 +21697,19 @@ case "$ac_cv_func_clock_settime$ac_cv_func_settimeofday$ac_cv_func_stime" in ;; esac esac -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } case "$ntp_warning" in '') ;; - *) { echo "$as_me:$LINENO: WARNING: *** $ntp_warning ***" >&5 -echo "$as_me: WARNING: *** $ntp_warning ***" >&2;} + *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** $ntp_warning ***" >&5 +$as_echo "$as_me: WARNING: *** $ntp_warning ***" >&2;} ;; esac -echo "$as_me:$LINENO: checking if we have a losing syscall()" >&5 -echo $ECHO_N "checking if we have a losing syscall()... $ECHO_C" >&6 -if test "${ac_cv_var_syscall_bug+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we have a losing syscall()" >&5 +$as_echo_n "checking if we have a losing syscall()... " >&6; } +if test "${ac_cv_var_syscall_bug+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$host" in *-*-solaris2.4*) @@ -48554,26 +21720,20 @@ else esac ac_cv_var_syscall_bug=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_syscall_bug" >&5 -echo "${ECHO_T}$ac_cv_var_syscall_bug" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_syscall_bug" >&5 +$as_echo "$ac_cv_var_syscall_bug" >&6; } case "$ac_cv_var_syscall_bug" in yes) -cat >>confdefs.h <<\_ACEOF -#define SYSCALL_BUG 1 -_ACEOF +$as_echo "#define SYSCALL_BUG 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking for SIGIO" >&5 -echo $ECHO_N "checking for SIGIO... $ECHO_C" >&6 -if test "${ac_cv_hdr_def_sigio+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIGIO" >&5 +$as_echo_n "checking for SIGIO... " >&6; } +if test "${ac_cv_hdr_def_sigio+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef SIGIO @@ -48582,7 +21742,7 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ac_cv_hdr_def_sigio=yes else ac_cv_hdr_def_sigio=no @@ -48590,13 +21750,13 @@ fi rm -f conftest* fi -echo "$as_me:$LINENO: result: $ac_cv_hdr_def_sigio" >&5 -echo "${ECHO_T}$ac_cv_hdr_def_sigio" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_hdr_def_sigio" >&5 +$as_echo "$ac_cv_hdr_def_sigio" >&6; } -echo "$as_me:$LINENO: checking if we want to use signalled IO" >&5 -echo $ECHO_N "checking if we want to use signalled IO... $ECHO_C" >&6 -if test "${ac_cv_var_signalled_io+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want to use signalled IO" >&5 +$as_echo_n "checking if we want to use signalled IO... " >&6; } +if test "${ac_cv_var_signalled_io+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=no case "$ac_cv_hdr_def_sigio" in @@ -48627,7 +21787,7 @@ case "$ac_cv_hdr_def_sigio" in *-*-freebsd*) ans=no ;; - *-*-linux*) + *-*-*linux*) ans=no ;; *-*-unicosmp*) @@ -48638,26 +21798,20 @@ case "$ac_cv_hdr_def_sigio" in esac ac_cv_var_signalled_io=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_signalled_io" >&5 -echo "${ECHO_T}$ac_cv_var_signalled_io" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_signalled_io" >&5 +$as_echo "$ac_cv_var_signalled_io" >&6; } case "$ac_cv_var_signalled_io" in yes) -cat >>confdefs.h <<\_ACEOF -#define HAVE_SIGNALED_IO 1 -_ACEOF +$as_echo "#define HAVE_SIGNALED_IO 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking for SIGPOLL" >&5 -echo $ECHO_N "checking for SIGPOLL... $ECHO_C" >&6 -if test "${ac_cv_hdr_def_sigpoll+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIGPOLL" >&5 +$as_echo_n "checking for SIGPOLL... " >&6; } +if test "${ac_cv_hdr_def_sigpoll+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef SIGPOLL @@ -48666,7 +21820,7 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ac_cv_hdr_def_sigpoll=yes else ac_cv_hdr_def_sigpoll=no @@ -48674,19 +21828,15 @@ fi rm -f conftest* fi -echo "$as_me:$LINENO: result: $ac_cv_hdr_def_sigpoll" >&5 -echo "${ECHO_T}$ac_cv_hdr_def_sigpoll" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_hdr_def_sigpoll" >&5 +$as_echo "$ac_cv_hdr_def_sigpoll" >&6; } -echo "$as_me:$LINENO: checking for SIGSYS" >&5 -echo $ECHO_N "checking for SIGSYS... $ECHO_C" >&6 -if test "${ac_cv_hdr_def_sigsys+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIGSYS" >&5 +$as_echo_n "checking for SIGSYS... " >&6; } +if test "${ac_cv_hdr_def_sigsys+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef SIGSYS @@ -48695,7 +21845,7 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ac_cv_hdr_def_sigsys=yes else ac_cv_hdr_def_sigsys=no @@ -48703,13 +21853,13 @@ fi rm -f conftest* fi -echo "$as_me:$LINENO: result: $ac_cv_hdr_def_sigsys" >&5 -echo "${ECHO_T}$ac_cv_hdr_def_sigsys" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_hdr_def_sigsys" >&5 +$as_echo "$ac_cv_hdr_def_sigsys" >&6; } -echo "$as_me:$LINENO: checking if we can use SIGPOLL for UDP I/O" >&5 -echo $ECHO_N "checking if we can use SIGPOLL for UDP I/O... $ECHO_C" >&6 -if test "${ac_cv_var_use_udp_sigpoll+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can use SIGPOLL for UDP I/O" >&5 +$as_echo_n "checking if we can use SIGPOLL for UDP I/O... " >&6; } +if test "${ac_cv_var_use_udp_sigpoll+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=no case "$ac_cv_hdr_def_sigpoll" in @@ -48727,13 +21877,13 @@ case "$ac_cv_hdr_def_sigpoll" in *-sni-sysv*) ans=no ;; - *-*-aix[45]*) + *-*-aix[456]*) ans=no ;; *-*-hpux*) ans=no ;; - *-*-linux*) + *-*-*linux*) ans=no ;; *-*-osf*) @@ -48745,6 +21895,9 @@ case "$ac_cv_hdr_def_sigpoll" in *-*-sunos*) ans=no ;; + *-*-solaris*) + ans=no + ;; *-*-ultrix*) ans=no ;; @@ -48758,20 +21911,18 @@ case "$ac_cv_hdr_def_sigpoll" in esac ac_cv_var_use_udp_sigpoll=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_use_udp_sigpoll" >&5 -echo "${ECHO_T}$ac_cv_var_use_udp_sigpoll" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_use_udp_sigpoll" >&5 +$as_echo "$ac_cv_var_use_udp_sigpoll" >&6; } case "$ac_cv_var_use_udp_sigpoll" in yes) -cat >>confdefs.h <<\_ACEOF -#define USE_UDP_SIGPOLL 1 -_ACEOF +$as_echo "#define USE_UDP_SIGPOLL 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if we can use SIGPOLL for TTY I/O" >&5 -echo $ECHO_N "checking if we can use SIGPOLL for TTY I/O... $ECHO_C" >&6 -if test "${ac_cv_var_use_tty_sigpoll+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can use SIGPOLL for TTY I/O" >&5 +$as_echo_n "checking if we can use SIGPOLL for TTY I/O... " >&6; } +if test "${ac_cv_var_use_tty_sigpoll+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=no case "$ac_cv_hdr_def_sigpoll" in @@ -48789,13 +21940,13 @@ case "$ac_cv_hdr_def_sigpoll" in *-sni-sysv*) ans=no ;; - *-*-aix[45]*) + *-*-aix[456]*) ans=no ;; *-*-hpux*) ans=no ;; - *-*-linux*) + *-*-*linux*) ans=no ;; *-*-osf*) @@ -48820,28 +21971,22 @@ case "$ac_cv_hdr_def_sigpoll" in esac ac_cv_var_use_tty_sigpoll=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_use_tty_sigpoll" >&5 -echo "${ECHO_T}$ac_cv_var_use_tty_sigpoll" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_use_tty_sigpoll" >&5 +$as_echo "$ac_cv_var_use_tty_sigpoll" >&6; } case "$ac_cv_var_use_tty_sigpoll" in yes) -cat >>confdefs.h <<\_ACEOF -#define USE_TTY_SIGPOLL 1 -_ACEOF +$as_echo "#define USE_TTY_SIGPOLL 1" >>confdefs.h ;; esac case "$ac_cv_header_sys_sio_h" in yes) - echo "$as_me:$LINENO: checking sys/sio.h for TIOCDCDTIMESTAMP" >&5 -echo $ECHO_N "checking sys/sio.h for TIOCDCDTIMESTAMP... $ECHO_C" >&6 -if test "${ac_cv_hdr_def_tiocdcdtimestamp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking sys/sio.h for TIOCDCDTIMESTAMP" >&5 +$as_echo_n "checking sys/sio.h for TIOCDCDTIMESTAMP... " >&6; } +if test "${ac_cv_hdr_def_tiocdcdtimestamp+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef TIOCDCDTIMESTAMP @@ -48850,7 +21995,7 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ac_cv_hdr_def_tiocdcdtimestamp=yes else ac_cv_hdr_def_tiocdcdtimestamp=no @@ -48858,8 +22003,8 @@ fi rm -f conftest* fi -echo "$as_me:$LINENO: result: $ac_cv_hdr_def_tiocdcdtimestamp" >&5 -echo "${ECHO_T}$ac_cv_hdr_def_tiocdcdtimestamp" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_hdr_def_tiocdcdtimestamp" >&5 +$as_echo "$ac_cv_hdr_def_tiocdcdtimestamp" >&6; } ;; esac @@ -48869,10 +22014,10 @@ case "$ac_cv_hdr_def_tiocdcdtimestamp" in ;; esac -echo "$as_me:$LINENO: checking if nlist() values might require extra indirection" >&5 -echo $ECHO_N "checking if nlist() values might require extra indirection... $ECHO_C" >&6 -if test "${ac_cv_var_nlist_extra_indirection+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if nlist() values might require extra indirection" >&5 +$as_echo_n "checking if nlist() values might require extra indirection... " >&6; } +if test "${ac_cv_var_nlist_extra_indirection+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=no case "$host" in @@ -48882,20 +22027,18 @@ case "$host" in esac ac_cv_var_nlist_extra_indirection=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_nlist_extra_indirection" >&5 -echo "${ECHO_T}$ac_cv_var_nlist_extra_indirection" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_nlist_extra_indirection" >&5 +$as_echo "$ac_cv_var_nlist_extra_indirection" >&6; } case "$ac_cv_var_nlist_extra_indirection" in yes) -cat >>confdefs.h <<\_ACEOF -#define NLIST_EXTRA_INDIRECTION 1 -_ACEOF +$as_echo "#define NLIST_EXTRA_INDIRECTION 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking for a minimum recommended value of tickadj" >&5 -echo $ECHO_N "checking for a minimum recommended value of tickadj... $ECHO_C" >&6 -if test "${ac_cv_var_min_rec_tickadj+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a minimum recommended value of tickadj" >&5 +$as_echo_n "checking for a minimum recommended value of tickadj... " >&6; } +if test "${ac_cv_var_min_rec_tickadj+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=no case "$host" in @@ -48905,8 +22048,8 @@ case "$host" in esac ac_cv_var_min_rec_tickadj=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_min_rec_tickadj" >&5 -echo "${ECHO_T}$ac_cv_var_min_rec_tickadj" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_min_rec_tickadj" >&5 +$as_echo "$ac_cv_var_min_rec_tickadj" >&6; } case "$ac_cv_var_min_rec_tickadj" in ''|no) ;; *) @@ -48916,14 +22059,14 @@ _ACEOF ;; esac -echo "$as_me:$LINENO: checking if the TTY code permits PARENB and IGNPAR" >&5 -echo $ECHO_N "checking if the TTY code permits PARENB and IGNPAR... $ECHO_C" >&6 -if test "${ac_cv_var_no_parenb_ignpar+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the TTY code permits PARENB and IGNPAR" >&5 +$as_echo_n "checking if the TTY code permits PARENB and IGNPAR... " >&6; } +if test "${ac_cv_var_no_parenb_ignpar+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=no case "$host" in - i?86-*-linux*) + i?86-*-*linux*) ans=yes ;; mips-sgi-irix*) @@ -48940,120 +22083,127 @@ case "$host" in esac ac_cv_var_no_parenb_ignpar=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_no_parenb_ignpar" >&5 -echo "${ECHO_T}$ac_cv_var_no_parenb_ignpar" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_no_parenb_ignpar" >&5 +$as_echo "$ac_cv_var_no_parenb_ignpar" >&6; } case "$ac_cv_var_no_parenb_ignpar" in yes) -cat >>confdefs.h <<\_ACEOF -#define NO_PARENB_IGNPAR 1 -_ACEOF +$as_echo "#define NO_PARENB_IGNPAR 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if we're including debugging code" >&5 -echo $ECHO_N "checking if we're including debugging code... $ECHO_C" >&6 -# Check whether --enable-debugging or --disable-debugging was given. -if test "${enable_debugging+set}" = set; then - enableval="$enable_debugging" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we're including debugging code" >&5 +$as_echo_n "checking if we're including debugging code... " >&6; } +# Check whether --enable-debugging was given. +if test "${enable_debugging+set}" = set; then : + enableval=$enable_debugging; ntp_ok=$enableval else ntp_ok=yes -fi; +fi + if test "$ntp_ok" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define DEBUG 1 -_ACEOF +$as_echo "#define DEBUG 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking if we including processing time debugging code" >&5 -echo $ECHO_N "checking if we including processing time debugging code... $ECHO_C" >&6 -# Check whether --enable-debug-timing or --disable-debug-timing was given. -if test "${enable_debug_timing+set}" = set; then - enableval="$enable_debug_timing" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we including processing time debugging code" >&5 +$as_echo_n "checking if we including processing time debugging code... " >&6; } +# Check whether --enable-debug-timing was given. +if test "${enable_debug_timing+set}" = set; then : + enableval=$enable_debug_timing; ntp_ok=$enableval else ntp_ok=no -fi; +fi + if test "$ntp_ok" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define DEBUG_TIMING 1 -_ACEOF +$as_echo "#define DEBUG_TIMING 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking for a the number of minutes in a DST adjustment" >&5 -echo $ECHO_N "checking for a the number of minutes in a DST adjustment... $ECHO_C" >&6 -# Check whether --enable-dst_minutes or --disable-dst_minutes was given. -if test "${enable_dst_minutes+set}" = set; then - enableval="$enable_dst_minutes" - ans=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a the number of minutes in a DST adjustment" >&5 +$as_echo_n "checking for a the number of minutes in a DST adjustment... " >&6; } +# Check whether --enable-dst_minutes was given. +if test "${enable_dst_minutes+set}" = set; then : + enableval=$enable_dst_minutes; ans=$enableval else ans=60 -fi; + +fi + cat >>confdefs.h <<_ACEOF #define DSTMINUTES $ans _ACEOF -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } -echo "$as_me:$LINENO: checking if we have the tty_clk line discipline/streams module" >&5 -echo $ECHO_N "checking if we have the tty_clk line discipline/streams module... $ECHO_C" >&6 -if test "${ac_cv_var_tty_clk+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if ntpd will retry on permanent DNS errors" >&5 +$as_echo_n "checking if ntpd will retry on permanent DNS errors... " >&6; } +# Check whether --enable-ignore-dns-errors was given. +if test "${enable_ignore_dns_errors+set}" = set; then : + enableval=$enable_ignore_dns_errors; ans=$enableval +else + ans=no + +fi + +case "$ans" in + yes) + +$as_echo "#define IGNORE_DNS_ERRORS 1" >>confdefs.h + +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we have the tty_clk line discipline/streams module" >&5 +$as_echo_n "checking if we have the tty_clk line discipline/streams module... " >&6; } +if test "${ac_cv_var_tty_clk+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$ac_cv_header_sys_clkdefs_h$ac_cv_hdr_def_tiocdcdtimestamp" in *yes*) ac_cv_var_tty_clk=yes ;; + *) ac_cv_var_tty_clk=no ;; esac fi -echo "$as_me:$LINENO: result: $ac_cv_var_tty_clk" >&5 -echo "${ECHO_T}$ac_cv_var_tty_clk" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tty_clk" >&5 +$as_echo "$ac_cv_var_tty_clk" >&6; } case "$ac_cv_var_tty_clk" in yes) -cat >>confdefs.h <<\_ACEOF -#define TTYCLK 1 -_ACEOF +$as_echo "#define TTYCLK 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking for the ppsclock streams module" >&5 -echo $ECHO_N "checking for the ppsclock streams module... $ECHO_C" >&6 -if test "${ac_cv_var_ppsclock+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the ppsclock streams module" >&5 +$as_echo_n "checking for the ppsclock streams module... " >&6; } +if test "${ac_cv_var_ppsclock+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_var_ppsclock=$ac_cv_struct_ppsclockev fi -echo "$as_me:$LINENO: result: $ac_cv_var_ppsclock" >&5 -echo "${ECHO_T}$ac_cv_var_ppsclock" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_ppsclock" >&5 +$as_echo "$ac_cv_var_ppsclock" >&6; } case "$ac_cv_var_ppsclock" in yes) -cat >>confdefs.h <<\_ACEOF -#define PPS 1 -_ACEOF +$as_echo "#define PPS 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking for kernel multicast support" >&5 -echo $ECHO_N "checking for kernel multicast support... $ECHO_C" >&6 -if test "${ac_cv_var_mcast+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for kernel multicast support" >&5 +$as_echo_n "checking for kernel multicast support... " >&6; } +if test "${ac_cv_var_mcast+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_var_mcast=no case "$host" in i386-sequent-sysv4) ;; - *) cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + *) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef IP_ADD_MEMBERSHIP @@ -49062,29 +22212,27 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ac_cv_var_mcast=yes fi rm -f conftest* ;; esac fi -echo "$as_me:$LINENO: result: $ac_cv_var_mcast" >&5 -echo "${ECHO_T}$ac_cv_var_mcast" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_mcast" >&5 +$as_echo "$ac_cv_var_mcast" >&6; } case "$ac_cv_var_mcast" in yes) -cat >>confdefs.h <<\_ACEOF -#define MCAST 1 -_ACEOF +$as_echo "#define MCAST 1" >>confdefs.h - echo "$as_me:$LINENO: checking arg type needed for IP*_MULTICAST_LOOP for setsockopt()" >&5 -echo $ECHO_N "checking arg type needed for IP*_MULTICAST_LOOP for setsockopt()... $ECHO_C" >&6 -if test "${ac_cv_var_typeof_ip_multicast_loop+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking arg type needed for IP*_MULTICAST_LOOP for setsockopt()" >&5 +$as_echo_n "checking arg type needed for IP*_MULTICAST_LOOP for setsockopt()... " >&6; } +if test "${ac_cv_var_typeof_ip_multicast_loop+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$host" in - *-*-netbsd*|*-*-linux*) + *-*-netbsd*|*-*-*linux*) ac_cv_var_typeof_ip_multicast_loop=u_int ;; *-*-winnt*) @@ -49094,8 +22242,8 @@ else ;; esac fi -echo "$as_me:$LINENO: result: $ac_cv_var_typeof_ip_multicast_loop" >&5 -echo "${ECHO_T}$ac_cv_var_typeof_ip_multicast_loop" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_typeof_ip_multicast_loop" >&5 +$as_echo "$ac_cv_var_typeof_ip_multicast_loop" >&6; } cat >>confdefs.h <<_ACEOF #define TYPEOF_IP_MULTICAST_LOOP $ac_cv_var_typeof_ip_multicast_loop @@ -49104,10 +22252,10 @@ _ACEOF ;; esac -echo "$as_me:$LINENO: checking availability of ntp_{adj,get}time()" >&5 -echo $ECHO_N "checking availability of ntp_{adj,get}time()... $ECHO_C" >&6 -if test "${ac_cv_var_ntp_syscalls+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking availability of ntp_{adj,get}time()" >&5 +$as_echo_n "checking availability of ntp_{adj,get}time()... " >&6; } +if test "${ac_cv_var_ntp_syscalls+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_var_ntp_syscalls=no case "$ac_cv_func_ntp_adjtime$ac_cv_func_ntp_gettime$ac_cv_func___adjtimex" in @@ -49117,11 +22265,7 @@ else *yes) ac_cv_var_ntp_syscalls=inline ;; - *) cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + *) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if defined(SYS_ntp_gettime) && defined(SYS_ntp_adjtime) @@ -49130,7 +22274,7 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ac_cv_var_ntp_syscalls=kernel fi rm -f conftest* @@ -49138,37 +22282,29 @@ rm -f conftest* ;; esac fi -echo "$as_me:$LINENO: result: $ac_cv_var_ntp_syscalls" >&5 -echo "${ECHO_T}$ac_cv_var_ntp_syscalls" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_ntp_syscalls" >&5 +$as_echo "$ac_cv_var_ntp_syscalls" >&6; } case "$ac_cv_var_ntp_syscalls" in libc) -cat >>confdefs.h <<\_ACEOF -#define NTP_SYSCALLS_LIBC 1 -_ACEOF +$as_echo "#define NTP_SYSCALLS_LIBC 1" >>confdefs.h ;; kernel) -cat >>confdefs.h <<\_ACEOF -#define NTP_SYSCALLS_STD 1 -_ACEOF +$as_echo "#define NTP_SYSCALLS_STD 1" >>confdefs.h ;; *) ;; esac -echo "$as_me:$LINENO: checking if sys/timex.h has STA_FLL" >&5 -echo $ECHO_N "checking if sys/timex.h has STA_FLL... $ECHO_C" >&6 -if test "${ac_cv_var_sta_fll+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if sys/timex.h has STA_FLL" >&5 +$as_echo_n "checking if sys/timex.h has STA_FLL... " >&6; } +if test "${ac_cv_var_sta_fll+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef STA_FLL @@ -49177,7 +22313,7 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ac_cv_var_sta_fll=yes else ac_cv_var_sta_fll=no @@ -49185,13 +22321,13 @@ fi rm -f conftest* fi -echo "$as_me:$LINENO: result: $ac_cv_var_sta_fll" >&5 -echo "${ECHO_T}$ac_cv_var_sta_fll" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_sta_fll" >&5 +$as_echo "$ac_cv_var_sta_fll" >&6; } -echo "$as_me:$LINENO: checking if we have kernel PLL support" >&5 -echo $ECHO_N "checking if we have kernel PLL support... $ECHO_C" >&6 -if test "${ac_cv_var_kernel_pll+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we have kernel PLL support" >&5 +$as_echo_n "checking if we have kernel PLL support... " >&6; } +if test "${ac_cv_var_kernel_pll+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$ac_cv_header_sys_timex_h$ac_cv_struct_ntptimeval$ac_cv_var_sta_fll$ac_cv_var_ntp_syscalls" in *no*) @@ -49201,22 +22337,20 @@ else ;; esac fi -echo "$as_me:$LINENO: result: $ac_cv_var_kernel_pll" >&5 -echo "${ECHO_T}$ac_cv_var_kernel_pll" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_kernel_pll" >&5 +$as_echo "$ac_cv_var_kernel_pll" >&6; } case "$ac_cv_var_kernel_pll" in yes) -cat >>confdefs.h <<\_ACEOF -#define KERNEL_PLL 1 -_ACEOF +$as_echo "#define KERNEL_PLL 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if SIOCGIFCONF returns buffer size in the buffer" >&5 -echo $ECHO_N "checking if SIOCGIFCONF returns buffer size in the buffer... $ECHO_C" >&6 -if test "${ac_cv_var_size_returned_in_buffer+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if SIOCGIFCONF returns buffer size in the buffer" >&5 +$as_echo_n "checking if SIOCGIFCONF returns buffer size in the buffer... " >&6; } +if test "${ac_cv_var_size_returned_in_buffer+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=no case "$host" in @@ -49232,26 +22366,20 @@ else esac ac_cv_var_size_returned_in_buffer=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_size_returned_in_buffer" >&5 -echo "${ECHO_T}$ac_cv_var_size_returned_in_buffer" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_size_returned_in_buffer" >&5 +$as_echo "$ac_cv_var_size_returned_in_buffer" >&6; } case "$ac_cv_var_size_returned_in_buffer" in yes) -cat >>confdefs.h <<\_ACEOF -#define SIZE_RETURNED_IN_BUFFER 1 -_ACEOF +$as_echo "#define SIZE_RETURNED_IN_BUFFER 1" >>confdefs.h ;; esac # Check for ioctls TIOCGPPSEV -echo "$as_me:$LINENO: checking ioctl TIOCGPPSEV" >&5 -echo $ECHO_N "checking ioctl TIOCGPPSEV... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ioctl TIOCGPPSEV" >&5 +$as_echo_n "checking ioctl TIOCGPPSEV... " >&6; } if test "$ac_cv_header_termios_h" = "yes"; then - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef TIOCGPPSEV @@ -49260,7 +22388,7 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ntp_ok=yes else ntp_ok=no @@ -49272,24 +22400,18 @@ ntp_ok=no fi if test "$ntp_ok" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_TIOCGPPSEV 1 -_ACEOF +$as_echo "#define HAVE_TIOCGPPSEV 1" >>confdefs.h ac_cv_var_oncore_ok=yes fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } # Check for ioctls TIOCSPPS -echo "$as_me:$LINENO: checking ioctl TIOCSPPS" >&5 -echo $ECHO_N "checking ioctl TIOCSPPS... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ioctl TIOCSPPS" >&5 +$as_echo_n "checking ioctl TIOCSPPS... " >&6; } if test "$ac_cv_header_termios_h" = "yes"; then - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef TIOCSPPS @@ -49298,7 +22420,7 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ntp_ok=yes else ntp_ok=no @@ -49311,23 +22433,17 @@ fi if test "$ntp_ok" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_TIOCSPPS 1 -_ACEOF +$as_echo "#define HAVE_TIOCSPPS 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } # Check for ioctls CIOGETEV -echo "$as_me:$LINENO: checking ioctl CIOGETEV" >&5 -echo $ECHO_N "checking ioctl CIOGETEV... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ioctl CIOGETEV" >&5 +$as_echo_n "checking ioctl CIOGETEV... " >&6; } if test "$ac_cv_header_sys_ppsclock_h" = "yes"; then - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef CIOGETEV @@ -49336,7 +22452,7 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ntp_ok=yes else ntp_ok=no @@ -49349,13 +22465,11 @@ fi if test "$ntp_ok" = "yes"; then ac_cv_var_oncore_ok=yes -cat >>confdefs.h <<\_ACEOF -#define HAVE_CIOGETEV 1 -_ACEOF +$as_echo "#define HAVE_CIOGETEV 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } # ATOM/PPSAPI stuff. @@ -49382,9 +22496,7 @@ case "$ac_cv_c_inline$ac_cv_struct_timespec" in case "$ac_cv_header_timepps_h$ac_cv_header_sys_timepps_h$host_os" in *yes* | *sunos* | *solaris* | *sco* | *netbsd* ) -cat >>confdefs.h <<\_ACEOF -#define HAVE_PPSAPI 1 -_ACEOF +$as_echo "#define HAVE_PPSAPI 1" >>confdefs.h ac_cv_var_jupiter_ok=yes ac_cv_var_oncore_ok=yes @@ -49396,154 +22508,17 @@ _ACEOF esac # Check for ioctls TIOCGSERIAL, TIOCSSERIAL, ASYNC_PPS_CD_POS, ASYNC_PPS_CD_NEG -if test "${ac_cv_header_linux_serial_h+set}" = set; then - echo "$as_me:$LINENO: checking for linux/serial.h" >&5 -echo $ECHO_N "checking for linux/serial.h... $ECHO_C" >&6 -if test "${ac_cv_header_linux_serial_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: $ac_cv_header_linux_serial_h" >&5 -echo "${ECHO_T}$ac_cv_header_linux_serial_h" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking linux/serial.h usability" >&5 -echo $ECHO_N "checking linux/serial.h usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking linux/serial.h presence" >&5 -echo $ECHO_N "checking linux/serial.h presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: linux/serial.h: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: linux/serial.h: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/serial.h: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: linux/serial.h: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: linux/serial.h: present but cannot be compiled" >&5 -echo "$as_me: WARNING: linux/serial.h: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/serial.h: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: linux/serial.h: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/serial.h: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: linux/serial.h: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/serial.h: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: linux/serial.h: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/serial.h: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: linux/serial.h: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: linux/serial.h: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: linux/serial.h: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------ ## -## Report this to the ntp lists. ## -## ------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for linux/serial.h" >&5 -echo $ECHO_N "checking for linux/serial.h... $ECHO_C" >&6 -if test "${ac_cv_header_linux_serial_h+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_cv_header_linux_serial_h=$ac_header_preproc -fi -echo "$as_me:$LINENO: result: $ac_cv_header_linux_serial_h" >&5 -echo "${ECHO_T}$ac_cv_header_linux_serial_h" >&6 +ac_fn_c_check_header_mongrel "$LINENO" "linux/serial.h" "ac_cv_header_linux_serial_h" "$ac_includes_default" +if test "x$ac_cv_header_linux_serial_h" = x""yes; then : fi -echo "$as_me:$LINENO: checking ioctl TIOCGSERIAL" >&5 -echo $ECHO_N "checking ioctl TIOCGSERIAL... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ioctl TIOCGSERIAL, TIOCSSERIAL, ASYNC_PPS_CD_POS, ASYNC_PPS_CD_NEG" >&5 +$as_echo_n "checking ioctl TIOCGSERIAL, TIOCSSERIAL, ASYNC_PPS_CD_POS, ASYNC_PPS_CD_NEG... " >&6; } case "$ac_cv_header_sys_ppsclock_h$ac_cv_header_linux_serial_h" in yesyes) - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include typedef int u_int; @@ -49565,7 +22540,7 @@ typedef int u_int; _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ntp_ok=yes fi rm -f conftest* @@ -49577,94 +22552,84 @@ rm -f conftest* esac if test "$ntp_ok" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define HAVE_TIO_SERIAL_STUFF 1 -_ACEOF +$as_echo "#define HAVE_TIO_SERIAL_STUFF 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } # Check for SHMEM_STATUS support -echo "$as_me:$LINENO: checking SHMEM_STATUS support" >&5 -echo $ECHO_N "checking SHMEM_STATUS support... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking SHMEM_STATUS support" >&5 +$as_echo_n "checking SHMEM_STATUS support... " >&6; } case "$ac_cv_header_sys_mman_h" in yes) ntp_ok=yes ;; *) ntp_ok=no ;; esac if test "$ntp_ok" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define ONCORE_SHMEM_STATUS 1 -_ACEOF +$as_echo "#define ONCORE_SHMEM_STATUS 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } ntp_refclock=no # HPUX only, and by explicit request -echo "$as_me:$LINENO: checking Datum/Bancomm bc635/VME interface" >&5 -echo $ECHO_N "checking Datum/Bancomm bc635/VME interface... $ECHO_C" >&6 -# Check whether --enable-BANCOMM or --disable-BANCOMM was given. -if test "${enable_BANCOMM+set}" = set; then - enableval="$enable_BANCOMM" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Datum/Bancomm bc635/VME interface" >&5 +$as_echo_n "checking Datum/Bancomm bc635/VME interface... " >&6; } +# Check whether --enable-BANCOMM was given. +if test "${enable_BANCOMM+set}" = set; then : + enableval=$enable_BANCOMM; ntp_ok=$enableval else ntp_ok=no -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_BANC 1 -_ACEOF +$as_echo "#define CLOCK_BANC 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$host" in yes*-*-hpux*) ;; - yes*) { echo "$as_me:$LINENO: WARNING: *** But the expected answer is... no ***" >&5 -echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; + yes*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** But the expected answer is... no ***" >&5 +$as_echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; esac #HPUX only, and only by explicit request -echo "$as_me:$LINENO: checking TrueTime GPS receiver/VME interface" >&5 -echo $ECHO_N "checking TrueTime GPS receiver/VME interface... $ECHO_C" >&6 -# Check whether --enable-GPSVME or --disable-GPSVME was given. -if test "${enable_GPSVME+set}" = set; then - enableval="$enable_GPSVME" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking TrueTime GPS receiver/VME interface" >&5 +$as_echo_n "checking TrueTime GPS receiver/VME interface... " >&6; } +# Check whether --enable-GPSVME was given. +if test "${enable_GPSVME+set}" = set; then : + enableval=$enable_GPSVME; ntp_ok=$enableval else ntp_ok=no -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_GPSVME 1 -_ACEOF +$as_echo "#define CLOCK_GPSVME 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$host" in yes*-*-hpux*) ;; - yes*) { echo "$as_me:$LINENO: WARNING: *** But the expected answer is... no ***" >&5 -echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; + yes*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** But the expected answer is... no ***" >&5 +$as_echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; esac -echo "$as_me:$LINENO: checking for PCL720 clock support" >&5 -echo $ECHO_N "checking for PCL720 clock support... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for PCL720 clock support" >&5 +$as_echo_n "checking for PCL720 clock support... " >&6; } case "$ac_cv_header_machine_inline_h$ac_cv_header_sys_pcl720_h$ac_cv_header_sys_i8253_h" in yesyesyes) -cat >>confdefs.h <<\_ACEOF -#define CLOCK_PPS720 1 -_ACEOF +$as_echo "#define CLOCK_PPS720 1" >>confdefs.h ans=yes ;; @@ -49672,24 +22637,24 @@ _ACEOF ans=no ;; esac -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } -echo "$as_me:$LINENO: checking for default inclusion of all suitable non-PARSE clocks" >&5 -echo $ECHO_N "checking for default inclusion of all suitable non-PARSE clocks... $ECHO_C" >&6 -# Check whether --enable-all-clocks or --disable-all-clocks was given. -if test "${enable_all_clocks+set}" = set; then - enableval="$enable_all_clocks" - ntp_eac=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default inclusion of all suitable non-PARSE clocks" >&5 +$as_echo_n "checking for default inclusion of all suitable non-PARSE clocks... " >&6; } +# Check whether --enable-all-clocks was given. +if test "${enable_all_clocks+set}" = set; then : + enableval=$enable_all_clocks; ntp_eac=$enableval else ntp_eac=yes -fi; -echo "$as_me:$LINENO: result: $ntp_eac" >&5 -echo "${ECHO_T}$ntp_eac" >&6 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_eac" >&5 +$as_echo "$ntp_eac" >&6; } # HMS: Should we also require ac_cv_var_parse_ok? -echo "$as_me:$LINENO: checking if we have support for PARSE clocks" >&5 -echo $ECHO_N "checking if we have support for PARSE clocks... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we have support for PARSE clocks" >&5 +$as_echo_n "checking if we have support for PARSE clocks... " >&6; } case "$ac_cv_var_atom_ok$ac_cv_header_termio_h$ac_cv_header_termios_h" in yes*yes*) ntp_canparse=yes @@ -49697,49 +22662,42 @@ case "$ac_cv_var_atom_ok$ac_cv_header_termio_h$ac_cv_header_termios_h" in *) ntp_canparse=no ;; esac -echo "$as_me:$LINENO: result: $ntp_canparse" >&5 -echo "${ECHO_T}$ntp_canparse" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_canparse" >&5 +$as_echo "$ntp_canparse" >&6; } -echo "$as_me:$LINENO: checking if we have support for audio clocks" >&5 -echo $ECHO_N "checking if we have support for audio clocks... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we have support for audio clocks" >&5 +$as_echo_n "checking if we have support for audio clocks... " >&6; } case "$ac_cv_header_sun_audioio_h$ac_cv_header_sys_audioio_h$ac_cv_header_machine_soundcard_h$ac_cv_header_sys_soundcard_h" in *yes*) ntp_canaudio=yes -cat >>confdefs.h <<\_ACEOF -#define HAVE_AUDIO -_ACEOF +$as_echo "#define HAVE_AUDIO /**/" >>confdefs.h ;; *) ntp_canaudio=no ;; esac -echo "$as_me:$LINENO: result: $ntp_canaudio" >&5 -echo "${ECHO_T}$ntp_canaudio" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_canaudio" >&5 +$as_echo "$ntp_canaudio" >&6; } -echo "$as_me:$LINENO: checking if we have support for the SHM refclock interface" >&5 -echo $ECHO_N "checking if we have support for the SHM refclock interface... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we have support for the SHM refclock interface" >&5 +$as_echo_n "checking if we have support for the SHM refclock interface... " >&6; } case "$ac_cv_header_sys_ipc_h$ac_cv_header_sys_shm_h" in yesyes) ntp_canshm=yes ;; *) ntp_canshm=no ;; esac -echo "$as_me:$LINENO: result: $ntp_canshm" >&5 -echo "${ECHO_T}$ntp_canshm" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_canshm" >&5 +$as_echo "$ntp_canshm" >&6; } # Requires modem control -echo "$as_me:$LINENO: checking ACTS modem service" >&5 -echo $ECHO_N "checking ACTS modem service... $ECHO_C" >&6 -# Check whether --enable-ACTS or --disable-ACTS was given. -if test "${enable_ACTS+set}" = set; then - enableval="$enable_ACTS" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ACTS modem service" >&5 +$as_echo_n "checking ACTS modem service... " >&6; } +# Check whether --enable-ACTS was given. +if test "${enable_ACTS+set}" = set; then : + enableval=$enable_ACTS; ntp_ok=$enableval else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_SYS_IOCTL_H @@ -49751,183 +22709,167 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ntp_ok=$ntp_eac else ntp_ok=no fi rm -f conftest* -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_ACTS 1 -_ACEOF +$as_echo "#define CLOCK_ACTS 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking Arbiter 1088A/B GPS receiver" >&5 -echo $ECHO_N "checking Arbiter 1088A/B GPS receiver... $ECHO_C" >&6 -# Check whether --enable-ARBITER or --disable-ARBITER was given. -if test "${enable_ARBITER+set}" = set; then - enableval="$enable_ARBITER" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Arbiter 1088A/B GPS receiver" >&5 +$as_echo_n "checking Arbiter 1088A/B GPS receiver... " >&6; } +# Check whether --enable-ARBITER was given. +if test "${enable_ARBITER+set}" = set; then : + enableval=$enable_ARBITER; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_ARBITER 1 -_ACEOF +$as_echo "#define CLOCK_ARBITER 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking Arcron MSF receiver" >&5 -echo $ECHO_N "checking Arcron MSF receiver... $ECHO_C" >&6 -# Check whether --enable-ARCRON_MSF or --disable-ARCRON_MSF was given. -if test "${enable_ARCRON_MSF+set}" = set; then - enableval="$enable_ARCRON_MSF" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Arcron MSF receiver" >&5 +$as_echo_n "checking Arcron MSF receiver... " >&6; } +# Check whether --enable-ARCRON_MSF was given. +if test "${enable_ARCRON_MSF+set}" = set; then : + enableval=$enable_ARCRON_MSF; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_ARCRON_MSF 1 -_ACEOF +$as_echo "#define CLOCK_ARCRON_MSF 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking Austron 2200A/2201A GPS receiver" >&5 -echo $ECHO_N "checking Austron 2200A/2201A GPS receiver... $ECHO_C" >&6 -# Check whether --enable-AS2201 or --disable-AS2201 was given. -if test "${enable_AS2201+set}" = set; then - enableval="$enable_AS2201" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Austron 2200A/2201A GPS receiver" >&5 +$as_echo_n "checking Austron 2200A/2201A GPS receiver... " >&6; } +# Check whether --enable-AS2201 was given. +if test "${enable_AS2201+set}" = set; then : + enableval=$enable_AS2201; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_AS2201 1 -_ACEOF +$as_echo "#define CLOCK_AS2201 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking ATOM PPS interface" >&5 -echo $ECHO_N "checking ATOM PPS interface... $ECHO_C" >&6 -# Check whether --enable-ATOM or --disable-ATOM was given. -if test "${enable_ATOM+set}" = set; then - enableval="$enable_ATOM" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ATOM PPS interface" >&5 +$as_echo_n "checking ATOM PPS interface... " >&6; } +# Check whether --enable-ATOM was given. +if test "${enable_ATOM+set}" = set; then : + enableval=$enable_ATOM; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + case "$ac_cv_var_atom_ok" in no) ntp_ok=no ;; esac if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_ATOM 1 -_ACEOF +$as_echo "#define CLOCK_ATOM 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking Chrono-log K-series WWVB receiver" >&5 -echo $ECHO_N "checking Chrono-log K-series WWVB receiver... $ECHO_C" >&6 -# Check whether --enable-CHRONOLOG or --disable-CHRONOLOG was given. -if test "${enable_CHRONOLOG+set}" = set; then - enableval="$enable_CHRONOLOG" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Chrono-log K-series WWVB receiver" >&5 +$as_echo_n "checking Chrono-log K-series WWVB receiver... " >&6; } +# Check whether --enable-CHRONOLOG was given. +if test "${enable_CHRONOLOG+set}" = set; then : + enableval=$enable_CHRONOLOG; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_CHRONOLOG 1 -_ACEOF +$as_echo "#define CLOCK_CHRONOLOG 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking CHU modem/decoder" >&5 -echo $ECHO_N "checking CHU modem/decoder... $ECHO_C" >&6 -# Check whether --enable-CHU or --disable-CHU was given. -if test "${enable_CHU+set}" = set; then - enableval="$enable_CHU" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CHU modem/decoder" >&5 +$as_echo_n "checking CHU modem/decoder... " >&6; } +# Check whether --enable-CHU was given. +if test "${enable_CHU+set}" = set; then : + enableval=$enable_CHU; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_CHU 1 -_ACEOF +$as_echo "#define CLOCK_CHU 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } ac_refclock_chu=$ntp_ok -echo "$as_me:$LINENO: checking CHU audio/decoder" >&5 -echo $ECHO_N "checking CHU audio/decoder... $ECHO_C" >&6 -# Check whether --enable-AUDIO-CHU or --disable-AUDIO-CHU was given. -if test "${enable_AUDIO_CHU+set}" = set; then - enableval="$enable_AUDIO_CHU" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking CHU audio/decoder" >&5 +$as_echo_n "checking CHU audio/decoder... " >&6; } +# Check whether --enable-AUDIO-CHU was given. +if test "${enable_AUDIO_CHU+set}" = set; then : + enableval=$enable_AUDIO_CHU; ntp_ok=$enableval else case "$ntp_eac$ac_refclock_chu$ntp_canaudio" in *no*) ntp_ok=no ;; *) ntp_ok=yes ;; esac -fi; +fi + if test "$ntp_ok" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define AUDIO_CHU 1 -_ACEOF +$as_echo "#define AUDIO_CHU 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } # We used to check for sunos/solaris target... case "$ntp_ok$ac_refclock_chu$ntp_canaudio" in - yes*no*) { echo "$as_me:$LINENO: WARNING: *** But the expected answer is...no ***" >&5 -echo "$as_me: WARNING: *** But the expected answer is...no ***" >&2;} ;; + yes*no*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** But the expected answer is...no ***" >&5 +$as_echo "$as_me: WARNING: *** But the expected answer is...no ***" >&2;} ;; esac # Not under HP-UX -echo "$as_me:$LINENO: checking Datum Programmable Time System" >&5 -echo $ECHO_N "checking Datum Programmable Time System... $ECHO_C" >&6 -# Check whether --enable-DATUM or --disable-DATUM was given. -if test "${enable_DATUM+set}" = set; then - enableval="$enable_DATUM" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Datum Programmable Time System" >&5 +$as_echo_n "checking Datum Programmable Time System... " >&6; } +# Check whether --enable-DATUM was given. +if test "${enable_DATUM+set}" = set; then : + enableval=$enable_DATUM; ntp_ok=$enableval else case "$ac_cv_header_termios_h" in yes) @@ -49936,71 +22878,61 @@ else *) ntp_ok=no ;; esac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_DATUM 1 -_ACEOF +$as_echo "#define CLOCK_DATUM 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking Dumb generic hh:mm:ss local clock" >&5 -echo $ECHO_N "checking Dumb generic hh:mm:ss local clock... $ECHO_C" >&6 -# Check whether --enable-DUMBCLOCK or --disable-DUMBCLOCK was given. -if test "${enable_DUMBCLOCK+set}" = set; then - enableval="$enable_DUMBCLOCK" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Dumb generic hh:mm:ss local clock" >&5 +$as_echo_n "checking Dumb generic hh:mm:ss local clock... " >&6; } +# Check whether --enable-DUMBCLOCK was given. +if test "${enable_DUMBCLOCK+set}" = set; then : + enableval=$enable_DUMBCLOCK; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_DUMBCLOCK 1 -_ACEOF +$as_echo "#define CLOCK_DUMBCLOCK 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking Forum Graphic GPS" >&5 -echo $ECHO_N "checking Forum Graphic GPS... $ECHO_C" >&6 -# Check whether --enable-FG or --disable-FG was given. -if test "${enable_FG+set}" = set; then - enableval="$enable_FG" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Forum Graphic GPS" >&5 +$as_echo_n "checking Forum Graphic GPS... " >&6; } +# Check whether --enable-FG was given. +if test "${enable_FG+set}" = set; then : + enableval=$enable_FG; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_FG 1 -_ACEOF +$as_echo "#define CLOCK_FG 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } # Requires modem control -echo "$as_me:$LINENO: checking Heath GC-1000 WWV/WWVH receiver" >&5 -echo $ECHO_N "checking Heath GC-1000 WWV/WWVH receiver... $ECHO_C" >&6 -# Check whether --enable-HEATH or --disable-HEATH was given. -if test "${enable_HEATH+set}" = set; then - enableval="$enable_HEATH" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Heath GC-1000 WWV/WWVH receiver" >&5 +$as_echo_n "checking Heath GC-1000 WWV/WWVH receiver... " >&6; } +# Check whether --enable-HEATH was given. +if test "${enable_HEATH+set}" = set; then : + enableval=$enable_HEATH; ntp_ok=$enableval else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_SYS_IOCTL_H @@ -50012,203 +22944,185 @@ cat >>conftest.$ac_ext <<_ACEOF _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then + $EGREP "yes" >/dev/null 2>&1; then : ntp_ok=$ntp_eac else ntp_ok=no fi rm -f conftest* -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_HEATH 1 -_ACEOF +$as_echo "#define CLOCK_HEATH 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking for hopf serial clock device" >&5 -echo $ECHO_N "checking for hopf serial clock device... $ECHO_C" >&6 -# Check whether --enable-HOPFSERIAL or --disable-HOPFSERIAL was given. -if test "${enable_HOPFSERIAL+set}" = set; then - enableval="$enable_HOPFSERIAL" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for hopf serial clock device" >&5 +$as_echo_n "checking for hopf serial clock device... " >&6; } +# Check whether --enable-HOPFSERIAL was given. +if test "${enable_HOPFSERIAL+set}" = set; then : + enableval=$enable_HOPFSERIAL; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_HOPF_SERIAL 1 -_ACEOF +$as_echo "#define CLOCK_HOPF_SERIAL 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking for hopf PCI clock 6039" >&5 -echo $ECHO_N "checking for hopf PCI clock 6039... $ECHO_C" >&6 -# Check whether --enable-HOPFPCI or --disable-HOPFPCI was given. -if test "${enable_HOPFPCI+set}" = set; then - enableval="$enable_HOPFPCI" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for hopf PCI clock 6039" >&5 +$as_echo_n "checking for hopf PCI clock 6039... " >&6; } +# Check whether --enable-HOPFPCI was given. +if test "${enable_HOPFPCI+set}" = set; then : + enableval=$enable_HOPFPCI; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_HOPF_PCI 1 -_ACEOF +$as_echo "#define CLOCK_HOPF_PCI 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking HP 58503A GPS receiver" >&5 -echo $ECHO_N "checking HP 58503A GPS receiver... $ECHO_C" >&6 -# Check whether --enable-HPGPS or --disable-HPGPS was given. -if test "${enable_HPGPS+set}" = set; then - enableval="$enable_HPGPS" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking HP 58503A GPS receiver" >&5 +$as_echo_n "checking HP 58503A GPS receiver... " >&6; } +# Check whether --enable-HPGPS was given. +if test "${enable_HPGPS+set}" = set; then : + enableval=$enable_HPGPS; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_HPGPS 1 -_ACEOF +$as_echo "#define CLOCK_HPGPS 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking IRIG audio decoder" >&5 -echo $ECHO_N "checking IRIG audio decoder... $ECHO_C" >&6 -# Check whether --enable-IRIG or --disable-IRIG was given. -if test "${enable_IRIG+set}" = set; then - enableval="$enable_IRIG" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking IRIG audio decoder" >&5 +$as_echo_n "checking IRIG audio decoder... " >&6; } +# Check whether --enable-IRIG was given. +if test "${enable_IRIG+set}" = set; then : + enableval=$enable_IRIG; ntp_ok=$enableval else case "$ntp_eac$ntp_canaudio" in *no*) ntp_ok=no ;; *) ntp_ok=yes ;; esac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_IRIG 1 -_ACEOF +$as_echo "#define CLOCK_IRIG 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canaudio" in - yesno) { echo "$as_me:$LINENO: WARNING: *** But the expected answer is... no ***" >&5 -echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; + yesno) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** But the expected answer is... no ***" >&5 +$as_echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; esac -echo "$as_me:$LINENO: checking for JJY receiver" >&5 -echo $ECHO_N "checking for JJY receiver... $ECHO_C" >&6 -# Check whether --enable-JJY or --disable-JJY was given. -if test "${enable_JJY+set}" = set; then - enableval="$enable_JJY" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for JJY receiver" >&5 +$as_echo_n "checking for JJY receiver... " >&6; } +# Check whether --enable-JJY was given. +if test "${enable_JJY+set}" = set; then : + enableval=$enable_JJY; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_JJY 1 -_ACEOF +$as_echo "#define CLOCK_JJY 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking Rockwell Jupiter GPS receiver" >&5 -echo $ECHO_N "checking Rockwell Jupiter GPS receiver... $ECHO_C" >&6 -# Check whether --enable-JUPITER or --disable-JUPITER was given. -if test "${enable_JUPITER+set}" = set; then - enableval="$enable_JUPITER" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Rockwell Jupiter GPS receiver" >&5 +$as_echo_n "checking Rockwell Jupiter GPS receiver... " >&6; } +# Check whether --enable-JUPITER was given. +if test "${enable_JUPITER+set}" = set; then : + enableval=$enable_JUPITER; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + case "$ac_cv_var_jupiter_ok" in no) ntp_ok=no ;; esac if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_JUPITER 1 -_ACEOF +$as_echo "#define CLOCK_JUPITER 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking Leitch CSD 5300 Master Clock System Driver" >&5 -echo $ECHO_N "checking Leitch CSD 5300 Master Clock System Driver... $ECHO_C" >&6 -# Check whether --enable-LEITCH or --disable-LEITCH was given. -if test "${enable_LEITCH+set}" = set; then - enableval="$enable_LEITCH" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Leitch CSD 5300 Master Clock System Driver" >&5 +$as_echo_n "checking Leitch CSD 5300 Master Clock System Driver... " >&6; } +# Check whether --enable-LEITCH was given. +if test "${enable_LEITCH+set}" = set; then : + enableval=$enable_LEITCH; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_LEITCH 1 -_ACEOF +$as_echo "#define CLOCK_LEITCH 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking local clock reference" >&5 -echo $ECHO_N "checking local clock reference... $ECHO_C" >&6 -# Check whether --enable-LOCAL-CLOCK or --disable-LOCAL-CLOCK was given. -if test "${enable_LOCAL_CLOCK+set}" = set; then - enableval="$enable_LOCAL_CLOCK" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking local clock reference" >&5 +$as_echo_n "checking local clock reference... " >&6; } +# Check whether --enable-LOCAL-CLOCK was given. +if test "${enable_LOCAL_CLOCK+set}" = set; then : + enableval=$enable_LOCAL_CLOCK; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_LOCAL 1 -_ACEOF +$as_echo "#define CLOCK_LOCAL 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } # Not Ultrix -echo "$as_me:$LINENO: checking Magnavox MX4200 GPS receiver" >&5 -echo $ECHO_N "checking Magnavox MX4200 GPS receiver... $ECHO_C" >&6 -# Check whether --enable-MX4200 or --disable-MX4200 was given. -if test "${enable_MX4200+set}" = set; then - enableval="$enable_MX4200" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Magnavox MX4200 GPS receiver" >&5 +$as_echo_n "checking Magnavox MX4200 GPS receiver... " >&6; } +# Check whether --enable-MX4200 was given. +if test "${enable_MX4200+set}" = set; then : + enableval=$enable_MX4200; ntp_ok=$enableval else case "$ac_cv_var_ppsclock" in yes) ntp_ok=$ntp_eac @@ -50216,91 +23130,83 @@ else *) ntp_ok=no ;; esac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_MX4200 1 -_ACEOF +$as_echo "#define CLOCK_MX4200 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$host" in - yes*-*-ultrix*) { echo "$as_me:$LINENO: WARNING: *** But the expected answer is... no ***" >&5 -echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; + yes*-*-ultrix*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** But the expected answer is... no ***" >&5 +$as_echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; esac -echo "$as_me:$LINENO: checking for NeoClock4X receiver" >&5 -echo $ECHO_N "checking for NeoClock4X receiver... $ECHO_C" >&6 -# Check whether --enable-NEOCLOCK4X or --disable-NEOCLOCK4X was given. -if test "${enable_NEOCLOCK4X+set}" = set; then - enableval="$enable_NEOCLOCK4X" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NeoClock4X receiver" >&5 +$as_echo_n "checking for NeoClock4X receiver... " >&6; } +# Check whether --enable-NEOCLOCK4X was given. +if test "${enable_NEOCLOCK4X+set}" = set; then : + enableval=$enable_NEOCLOCK4X; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_NEOCLOCK4X 1 -_ACEOF +$as_echo "#define CLOCK_NEOCLOCK4X 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking NMEA GPS receiver" >&5 -echo $ECHO_N "checking NMEA GPS receiver... $ECHO_C" >&6 -# Check whether --enable-NMEA or --disable-NMEA was given. -if test "${enable_NMEA+set}" = set; then - enableval="$enable_NMEA" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking NMEA GPS receiver" >&5 +$as_echo_n "checking NMEA GPS receiver... " >&6; } +# Check whether --enable-NMEA was given. +if test "${enable_NMEA+set}" = set; then : + enableval=$enable_NMEA; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_NMEA 1 -_ACEOF +$as_echo "#define CLOCK_NMEA 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking for ONCORE Motorola VP/UT Oncore GPS" >&5 -echo $ECHO_N "checking for ONCORE Motorola VP/UT Oncore GPS... $ECHO_C" >&6 -# Check whether --enable-ONCORE or --disable-ONCORE was given. -if test "${enable_ONCORE+set}" = set; then - enableval="$enable_ONCORE" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ONCORE Motorola VP/UT Oncore GPS" >&5 +$as_echo_n "checking for ONCORE Motorola VP/UT Oncore GPS... " >&6; } +# Check whether --enable-ONCORE was given. +if test "${enable_ONCORE+set}" = set; then : + enableval=$enable_ONCORE; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + case "$ac_cv_var_oncore_ok" in no) ntp_ok=no ;; esac if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_ONCORE 1 -_ACEOF +$as_echo "#define CLOCK_ONCORE 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking for Palisade clock" >&5 -echo $ECHO_N "checking for Palisade clock... $ECHO_C" >&6 -# Check whether --enable-PALISADE or --disable-PALISADE was given. -if test "${enable_PALISADE+set}" = set; then - enableval="$enable_PALISADE" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Palisade clock" >&5 +$as_echo_n "checking for Palisade clock... " >&6; } +# Check whether --enable-PALISADE was given. +if test "${enable_PALISADE+set}" = set; then : + enableval=$enable_PALISADE; ntp_ok=$enableval else case "$ac_cv_header_termios_h" in yes) @@ -50309,68 +23215,63 @@ else *) ntp_ok=no ;; esac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_PALISADE 1 -_ACEOF +$as_echo "#define CLOCK_PALISADE 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking Conrad parallel port radio clock" >&5 -echo $ECHO_N "checking Conrad parallel port radio clock... $ECHO_C" >&6 -# Check whether --enable-PCF or --disable-PCF was given. -if test "${enable_PCF+set}" = set; then - enableval="$enable_PCF" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Conrad parallel port radio clock" >&5 +$as_echo_n "checking Conrad parallel port radio clock... " >&6; } +# Check whether --enable-PCF was given. +if test "${enable_PCF+set}" = set; then : + enableval=$enable_PCF; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_PCF 1 -_ACEOF +$as_echo "#define CLOCK_PCF 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking PST/Traconex 1020 WWV/WWVH receiver" >&5 -echo $ECHO_N "checking PST/Traconex 1020 WWV/WWVH receiver... $ECHO_C" >&6 -# Check whether --enable-PST or --disable-PST was given. -if test "${enable_PST+set}" = set; then - enableval="$enable_PST" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking PST/Traconex 1020 WWV/WWVH receiver" >&5 +$as_echo_n "checking PST/Traconex 1020 WWV/WWVH receiver... " >&6; } +# Check whether --enable-PST was given. +if test "${enable_PST+set}" = set; then : + enableval=$enable_PST; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_PST 1 -_ACEOF +$as_echo "#define CLOCK_PST 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking RIPENCC specific Trimble driver" >&5 -echo $ECHO_N "checking RIPENCC specific Trimble driver... $ECHO_C" >&6 -# Check whether --enable-RIPENCC or --disable-RIPENCC was given. -if test "${enable_RIPENCC+set}" = set; then - enableval="$enable_RIPENCC" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking RIPENCC specific Trimble driver" >&5 +$as_echo_n "checking RIPENCC specific Trimble driver... " >&6; } +# Check whether --enable-RIPENCC was given. +if test "${enable_RIPENCC+set}" = set; then : + enableval=$enable_RIPENCC; ntp_ok=$enableval else ntp_ok=no -fi; +fi + # 020629: HMS: s/$ntp_eac -> -/no because of ptr += sprintf(ptr, ...) usage case "$ac_cv_var_ripe_ncc_ok" in no) ntp_ok=no ;; @@ -50378,65 +23279,58 @@ esac if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_RIPENCC -_ACEOF +$as_echo "#define CLOCK_RIPENCC /**/" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } # Danny Meyer says SHM compiles (with a few warnings) under Win32. # For *IX, we need sys/ipc.h and sys/shm.h. -echo "$as_me:$LINENO: checking for SHM clock attached thru shared memory" >&5 -echo $ECHO_N "checking for SHM clock attached thru shared memory... $ECHO_C" >&6 -# Check whether --enable-SHM or --disable-SHM was given. -if test "${enable_SHM+set}" = set; then - enableval="$enable_SHM" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SHM clock attached thru shared memory" >&5 +$as_echo_n "checking for SHM clock attached thru shared memory... " >&6; } +# Check whether --enable-SHM was given. +if test "${enable_SHM+set}" = set; then : + enableval=$enable_SHM; ntp_ok=$enableval else case "$ntp_eac$ntp_canshm" in *no*) ntp_ok=no ;; *) ntp_ok=yes ;; esac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_SHM 1 -_ACEOF +$as_echo "#define CLOCK_SHM 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking Spectracom 8170/Netclock/2 WWVB receiver" >&5 -echo $ECHO_N "checking Spectracom 8170/Netclock/2 WWVB receiver... $ECHO_C" >&6 -# Check whether --enable-SPECTRACOM or --disable-SPECTRACOM was given. -if test "${enable_SPECTRACOM+set}" = set; then - enableval="$enable_SPECTRACOM" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Spectracom 8170/Netclock/2 WWVB receiver" >&5 +$as_echo_n "checking Spectracom 8170/Netclock/2 WWVB receiver... " >&6; } +# Check whether --enable-SPECTRACOM was given. +if test "${enable_SPECTRACOM+set}" = set; then : + enableval=$enable_SPECTRACOM; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_SPECTRACOM 1 -_ACEOF +$as_echo "#define CLOCK_SPECTRACOM 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking KSI/Odetics TPRO/S GPS receiver/IRIG interface" >&5 -echo $ECHO_N "checking KSI/Odetics TPRO/S GPS receiver/IRIG interface... $ECHO_C" >&6 -# Check whether --enable-TPRO or --disable-TPRO was given. -if test "${enable_TPRO+set}" = set; then - enableval="$enable_TPRO" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking KSI/Odetics TPRO/S GPS receiver/IRIG interface" >&5 +$as_echo_n "checking KSI/Odetics TPRO/S GPS receiver/IRIG interface... " >&6; } +# Check whether --enable-TPRO was given. +if test "${enable_TPRO+set}" = set; then : + enableval=$enable_TPRO; ntp_ok=$enableval else case "$ac_cv_header_sys_tpro_h" in yes) @@ -50445,30 +23339,28 @@ else *) ntp_ok=no ;; esac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_TPRO 1 -_ACEOF +$as_echo "#define CLOCK_TPRO 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ac_cv_header_sys_tpro" in - yesno) { echo "$as_me:$LINENO: WARNING: *** But the expected answer is... no ***" >&5 -echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; + yesno) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** But the expected answer is... no ***" >&5 +$as_echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; esac # Not on a vax-dec-bsd -echo "$as_me:$LINENO: checking Kinemetrics/TrueTime receivers" >&5 -echo $ECHO_N "checking Kinemetrics/TrueTime receivers... $ECHO_C" >&6 -# Check whether --enable-TRUETIME or --disable-TRUETIME was given. -if test "${enable_TRUETIME+set}" = set; then - enableval="$enable_TRUETIME" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Kinemetrics/TrueTime receivers" >&5 +$as_echo_n "checking Kinemetrics/TrueTime receivers... " >&6; } +# Check whether --enable-TRUETIME was given. +if test "${enable_TRUETIME+set}" = set; then : + enableval=$enable_TRUETIME; ntp_ok=$enableval else case "$host" in vax-dec-bsd) @@ -50478,115 +23370,106 @@ else ntp_ok=$ntp_eac ;; esac -fi; +fi + + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_TRUETIME 1 -_ACEOF +$as_echo "#define CLOCK_TRUETIME 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$host" in - yesvax-dec-bsd) { echo "$as_me:$LINENO: WARNING: *** But the expected answer is... no ***" >&5 -echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; + yesvax-dec-bsd) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** But the expected answer is... no ***" >&5 +$as_echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; esac -echo "$as_me:$LINENO: checking TrueTime 560 IRIG-B decoder" >&5 -echo $ECHO_N "checking TrueTime 560 IRIG-B decoder... $ECHO_C" >&6 -# Check whether --enable-TT560 or --disable-TT560 was given. -if test "${enable_TT560+set}" = set; then - enableval="$enable_TT560" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking TrueTime 560 IRIG-B decoder" >&5 +$as_echo_n "checking TrueTime 560 IRIG-B decoder... " >&6; } +# Check whether --enable-TT560 was given. +if test "${enable_TT560+set}" = set; then : + enableval=$enable_TT560; ntp_ok=$enableval else ntp_ok=no -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_TT560 -_ACEOF +$as_echo "#define CLOCK_TT560 /**/" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking Ultralink M320 WWVB receiver" >&5 -echo $ECHO_N "checking Ultralink M320 WWVB receiver... $ECHO_C" >&6 -# Check whether --enable-ULINK or --disable-ULINK was given. -if test "${enable_ULINK+set}" = set; then - enableval="$enable_ULINK" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Ultralink M320 WWVB receiver" >&5 +$as_echo_n "checking Ultralink M320 WWVB receiver... " >&6; } +# Check whether --enable-ULINK was given. +if test "${enable_ULINK+set}" = set; then : + enableval=$enable_ULINK; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_ULINK 1 -_ACEOF +$as_echo "#define CLOCK_ULINK 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking WWV receiver" >&5 -echo $ECHO_N "checking WWV receiver... $ECHO_C" >&6 -# Check whether --enable-WWV or --disable-WWV was given. -if test "${enable_WWV+set}" = set; then - enableval="$enable_WWV" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking WWV receiver" >&5 +$as_echo_n "checking WWV receiver... " >&6; } +# Check whether --enable-WWV was given. +if test "${enable_WWV+set}" = set; then : + enableval=$enable_WWV; ntp_ok=$enableval else case "$ntp_eac$ntp_canaudio" in *no*) ntp_ok=no ;; *) ntp_ok=yes ;; esac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_WWV 1 -_ACEOF +$as_echo "#define CLOCK_WWV 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canaudio" in - yesno) { echo "$as_me:$LINENO: WARNING: *** But the expected answer is... no ***" >&5 -echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; + yesno) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** But the expected answer is... no ***" >&5 +$as_echo "$as_me: WARNING: *** But the expected answer is... no ***" >&2;} ;; esac -echo "$as_me:$LINENO: checking for Zyfer receiver" >&5 -echo $ECHO_N "checking for Zyfer receiver... $ECHO_C" >&6 -# Check whether --enable-ZYFER or --disable-ZYFER was given. -if test "${enable_ZYFER+set}" = set; then - enableval="$enable_ZYFER" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Zyfer receiver" >&5 +$as_echo_n "checking for Zyfer receiver... " >&6; } +# Check whether --enable-ZYFER was given. +if test "${enable_ZYFER+set}" = set; then : + enableval=$enable_ZYFER; ntp_ok=$enableval else ntp_ok=$ntp_eac -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_ZYFER 1 -_ACEOF +$as_echo "#define CLOCK_ZYFER 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } -echo "$as_me:$LINENO: checking for default inclusion of all suitable PARSE clocks" >&5 -echo $ECHO_N "checking for default inclusion of all suitable PARSE clocks... $ECHO_C" >&6 -# Check whether --enable-parse-clocks or --disable-parse-clocks was given. -if test "${enable_parse_clocks+set}" = set; then - enableval="$enable_parse_clocks" - ntp_eapc=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for default inclusion of all suitable PARSE clocks" >&5 +$as_echo_n "checking for default inclusion of all suitable PARSE clocks... " >&6; } +# Check whether --enable-parse-clocks was given. +if test "${enable_parse_clocks+set}" = set; then : + enableval=$enable_parse_clocks; ntp_eapc=$enableval else case "$ntp_eac" in yes) ntp_eapc=$ntp_canparse ;; @@ -50594,20 +23477,17 @@ else esac # Delete the next line one of these days ntp_eapc=no -fi; -echo "$as_me:$LINENO: result: $ntp_eapc" >&5 -echo "${ECHO_T}$ntp_eapc" >&6 +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_eapc" >&5 +$as_echo "$ntp_eapc" >&6; } case "$ntp_eac$ntp_eapc$ntp_canparse" in noyes*) - { { echo "$as_me:$LINENO: error: \"--enable-parse-clocks\" requires \"--enable-all-clocks\"." >&5 -echo "$as_me: error: \"--enable-parse-clocks\" requires \"--enable-all-clocks\"." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "\"--enable-parse-clocks\" requires \"--enable-all-clocks\"." "$LINENO" 5 ;; yesyesno) - { { echo "$as_me:$LINENO: error: You said \"--enable-parse-clocks\" but PARSE isn't supported on this platform!" >&5 -echo "$as_me: error: You said \"--enable-parse-clocks\" but PARSE isn't supported on this platform!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You said \"--enable-parse-clocks\" but PARSE isn't supported on this platform!" "$LINENO" 5 ;; *) ;; esac @@ -50616,170 +23496,148 @@ ntp_libparse=no ntp_parseutil=no ntp_rawdcf=no -echo "$as_me:$LINENO: checking Diem Computime Radio Clock" >&5 -echo $ECHO_N "checking Diem Computime Radio Clock... $ECHO_C" >&6 -# Check whether --enable-COMPUTIME or --disable-COMPUTIME was given. -if test "${enable_COMPUTIME+set}" = set; then - enableval="$enable_COMPUTIME" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Diem Computime Radio Clock" >&5 +$as_echo_n "checking Diem Computime Radio Clock... " >&6; } +# Check whether --enable-COMPUTIME was given. +if test "${enable_COMPUTIME+set}" = set; then : + enableval=$enable_COMPUTIME; ntp_ok=$enableval else ntp_ok=$ntp_eapc -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_libparse=yes ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_COMPUTIME 1 -_ACEOF +$as_echo "#define CLOCK_COMPUTIME 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canparse" in yesno) - { { echo "$as_me:$LINENO: error: That's a parse clock and this system doesn't support it!" >&5 -echo "$as_me: error: That's a parse clock and this system doesn't support it!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "That's a parse clock and this system doesn't support it!" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: checking ELV/DCF7000 clock" >&5 -echo $ECHO_N "checking ELV/DCF7000 clock... $ECHO_C" >&6 -# Check whether --enable-DCF7000 or --disable-DCF7000 was given. -if test "${enable_DCF7000+set}" = set; then - enableval="$enable_DCF7000" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking ELV/DCF7000 clock" >&5 +$as_echo_n "checking ELV/DCF7000 clock... " >&6; } +# Check whether --enable-DCF7000 was given. +if test "${enable_DCF7000+set}" = set; then : + enableval=$enable_DCF7000; ntp_ok=$enableval else ntp_ok=$ntp_eapc -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_libparse=yes ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_DCF7000 1 -_ACEOF +$as_echo "#define CLOCK_DCF7000 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canparse" in yesno) - { { echo "$as_me:$LINENO: error: That's a parse clock and this system doesn't support it!" >&5 -echo "$as_me: error: That's a parse clock and this system doesn't support it!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "That's a parse clock and this system doesn't support it!" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: checking HOPF 6021 clock" >&5 -echo $ECHO_N "checking HOPF 6021 clock... $ECHO_C" >&6 -# Check whether --enable-HOPF6021 or --disable-HOPF6021 was given. -if test "${enable_HOPF6021+set}" = set; then - enableval="$enable_HOPF6021" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking HOPF 6021 clock" >&5 +$as_echo_n "checking HOPF 6021 clock... " >&6; } +# Check whether --enable-HOPF6021 was given. +if test "${enable_HOPF6021+set}" = set; then : + enableval=$enable_HOPF6021; ntp_ok=$enableval else ntp_ok=$ntp_eapc -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_libparse=yes ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_HOPF6021 1 -_ACEOF +$as_echo "#define CLOCK_HOPF6021 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canparse" in yesno) - { { echo "$as_me:$LINENO: error: That's a parse clock and this system doesn't support it!" >&5 -echo "$as_me: error: That's a parse clock and this system doesn't support it!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "That's a parse clock and this system doesn't support it!" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: checking Meinberg clocks" >&5 -echo $ECHO_N "checking Meinberg clocks... $ECHO_C" >&6 -# Check whether --enable-MEINBERG or --disable-MEINBERG was given. -if test "${enable_MEINBERG+set}" = set; then - enableval="$enable_MEINBERG" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Meinberg clocks" >&5 +$as_echo_n "checking Meinberg clocks... " >&6; } +# Check whether --enable-MEINBERG was given. +if test "${enable_MEINBERG+set}" = set; then : + enableval=$enable_MEINBERG; ntp_ok=$enableval else ntp_ok=$ntp_eapc -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_libparse=yes ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_MEINBERG 1 -_ACEOF +$as_echo "#define CLOCK_MEINBERG 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canparse" in yesno) - { { echo "$as_me:$LINENO: error: That's a parse clock and this system doesn't support it!" >&5 -echo "$as_me: error: That's a parse clock and this system doesn't support it!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "That's a parse clock and this system doesn't support it!" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: checking DCF77 raw time code" >&5 -echo $ECHO_N "checking DCF77 raw time code... $ECHO_C" >&6 -# Check whether --enable-RAWDCF or --disable-RAWDCF was given. -if test "${enable_RAWDCF+set}" = set; then - enableval="$enable_RAWDCF" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking DCF77 raw time code" >&5 +$as_echo_n "checking DCF77 raw time code... " >&6; } +# Check whether --enable-RAWDCF was given. +if test "${enable_RAWDCF+set}" = set; then : + enableval=$enable_RAWDCF; ntp_ok=$enableval else ntp_ok=$ntp_eapc -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_libparse=yes ntp_parseutil=yes ntp_refclock=yes ntp_rawdcf=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_RAWDCF 1 -_ACEOF +$as_echo "#define CLOCK_RAWDCF 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canparse" in yesno) - { { echo "$as_me:$LINENO: error: That's a parse clock and this system doesn't support it!" >&5 -echo "$as_me: error: That's a parse clock and this system doesn't support it!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "That's a parse clock and this system doesn't support it!" "$LINENO" 5 ;; esac case "$ntp_rawdcf" in yes) - echo "$as_me:$LINENO: checking if we must enable parity for RAWDCF" >&5 -echo $ECHO_N "checking if we must enable parity for RAWDCF... $ECHO_C" >&6 -if test "${ac_cv_var_rawdcf_parity+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we must enable parity for RAWDCF" >&5 +$as_echo_n "checking if we must enable parity for RAWDCF... " >&6; } +if test "${ac_cv_var_rawdcf_parity+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=no case "$host" in - *-*-linux*) + *-*-*linux*) ans=yes ;; esac ac_cv_var_rawdcf_parity=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_rawdcf_parity" >&5 -echo "${ECHO_T}$ac_cv_var_rawdcf_parity" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_rawdcf_parity" >&5 +$as_echo "$ac_cv_var_rawdcf_parity" >&6; } case "$ac_cv_var_rawdcf_parity" in yes) -cat >>confdefs.h <<\_ACEOF -#define RAWDCF_NO_IGNPAR 1 -_ACEOF +$as_echo "#define RAWDCF_NO_IGNPAR 1" >>confdefs.h ;; esac ;; @@ -50789,205 +23647,175 @@ _ACEOF ;; esac -echo "$as_me:$LINENO: checking RCC 8000 clock" >&5 -echo $ECHO_N "checking RCC 8000 clock... $ECHO_C" >&6 -# Check whether --enable-RCC8000 or --disable-RCC8000 was given. -if test "${enable_RCC8000+set}" = set; then - enableval="$enable_RCC8000" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking RCC 8000 clock" >&5 +$as_echo_n "checking RCC 8000 clock... " >&6; } +# Check whether --enable-RCC8000 was given. +if test "${enable_RCC8000+set}" = set; then : + enableval=$enable_RCC8000; ntp_ok=$enableval else ntp_ok=$ntp_eapc -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_libparse=yes ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_RCC8000 1 -_ACEOF +$as_echo "#define CLOCK_RCC8000 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canparse" in yesno) - { { echo "$as_me:$LINENO: error: That's a parse clock and this system doesn't support it!" >&5 -echo "$as_me: error: That's a parse clock and this system doesn't support it!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "That's a parse clock and this system doesn't support it!" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: checking Schmid DCF77 clock" >&5 -echo $ECHO_N "checking Schmid DCF77 clock... $ECHO_C" >&6 -# Check whether --enable-SCHMID or --disable-SCHMID was given. -if test "${enable_SCHMID+set}" = set; then - enableval="$enable_SCHMID" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Schmid DCF77 clock" >&5 +$as_echo_n "checking Schmid DCF77 clock... " >&6; } +# Check whether --enable-SCHMID was given. +if test "${enable_SCHMID+set}" = set; then : + enableval=$enable_SCHMID; ntp_ok=$enableval else ntp_ok=$ntp_eapc -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_libparse=yes ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_SCHMID 1 -_ACEOF +$as_echo "#define CLOCK_SCHMID 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canparse" in yesno) - { { echo "$as_me:$LINENO: error: That's a parse clock and this system doesn't support it!" >&5 -echo "$as_me: error: That's a parse clock and this system doesn't support it!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "That's a parse clock and this system doesn't support it!" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: checking Trimble GPS receiver/TAIP protocol" >&5 -echo $ECHO_N "checking Trimble GPS receiver/TAIP protocol... $ECHO_C" >&6 -# Check whether --enable-TRIMTAIP or --disable-TRIMTAIP was given. -if test "${enable_TRIMTAIP+set}" = set; then - enableval="$enable_TRIMTAIP" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Trimble GPS receiver/TAIP protocol" >&5 +$as_echo_n "checking Trimble GPS receiver/TAIP protocol... " >&6; } +# Check whether --enable-TRIMTAIP was given. +if test "${enable_TRIMTAIP+set}" = set; then : + enableval=$enable_TRIMTAIP; ntp_ok=$enableval else ntp_ok=$ntp_eapc -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_libparse=yes ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_TRIMTAIP 1 -_ACEOF +$as_echo "#define CLOCK_TRIMTAIP 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canparse" in yesno) - { { echo "$as_me:$LINENO: error: That's a parse clock and this system doesn't support it!" >&5 -echo "$as_me: error: That's a parse clock and this system doesn't support it!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "That's a parse clock and this system doesn't support it!" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: checking Trimble GPS receiver/TSIP protocol" >&5 -echo $ECHO_N "checking Trimble GPS receiver/TSIP protocol... $ECHO_C" >&6 -# Check whether --enable-TRIMTSIP or --disable-TRIMTSIP was given. -if test "${enable_TRIMTSIP+set}" = set; then - enableval="$enable_TRIMTSIP" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Trimble GPS receiver/TSIP protocol" >&5 +$as_echo_n "checking Trimble GPS receiver/TSIP protocol... " >&6; } +# Check whether --enable-TRIMTSIP was given. +if test "${enable_TRIMTSIP+set}" = set; then : + enableval=$enable_TRIMTSIP; ntp_ok=$enableval else ntp_ok=$ntp_eapc -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_libparse=yes ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_TRIMTSIP 1 -_ACEOF +$as_echo "#define CLOCK_TRIMTSIP 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canparse" in yesno) - { { echo "$as_me:$LINENO: error: That's a parse clock and this system doesn't support it!" >&5 -echo "$as_me: error: That's a parse clock and this system doesn't support it!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "That's a parse clock and this system doesn't support it!" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: checking WHARTON 400A Series clock" >&5 -echo $ECHO_N "checking WHARTON 400A Series clock... $ECHO_C" >&6 -# Check whether --enable-WHARTON or --disable-WHARTON was given. -if test "${enable_WHARTON+set}" = set; then - enableval="$enable_WHARTON" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking WHARTON 400A Series clock" >&5 +$as_echo_n "checking WHARTON 400A Series clock... " >&6; } +# Check whether --enable-WHARTON was given. +if test "${enable_WHARTON+set}" = set; then : + enableval=$enable_WHARTON; ntp_ok=$enableval else ntp_ok=$ntp_eapc -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_libparse=yes ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_WHARTON_400A 1 -_ACEOF +$as_echo "#define CLOCK_WHARTON_400A 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canparse" in yesno) - { { echo "$as_me:$LINENO: error: That's a parse clock and this system doesn't support it!" >&5 -echo "$as_me: error: That's a parse clock and this system doesn't support it!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "That's a parse clock and this system doesn't support it!" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: checking VARITEXT clock" >&5 -echo $ECHO_N "checking VARITEXT clock... $ECHO_C" >&6 -# Check whether --enable-VARITEXT or --disable-VARITEXT was given. -if test "${enable_VARITEXT+set}" = set; then - enableval="$enable_VARITEXT" - ntp_ok=$enableval +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking VARITEXT clock" >&5 +$as_echo_n "checking VARITEXT clock... " >&6; } +# Check whether --enable-VARITEXT was given. +if test "${enable_VARITEXT+set}" = set; then : + enableval=$enable_VARITEXT; ntp_ok=$enableval else ntp_ok=$ntp_eapc -fi; +fi + if test "$ntp_ok" = "yes"; then ntp_libparse=yes ntp_refclock=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_VARITEXT 1 -_ACEOF +$as_echo "#define CLOCK_VARITEXT 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_ok" >&5 -echo "${ECHO_T}$ntp_ok" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ok" >&5 +$as_echo "$ntp_ok" >&6; } case "$ntp_ok$ntp_canparse" in yesno) - { { echo "$as_me:$LINENO: error: That's a parse clock and this system doesn't support it!" >&5 -echo "$as_me: error: That's a parse clock and this system doesn't support it!" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "That's a parse clock and this system doesn't support it!" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: checking if we need to make and use the parse libraries" >&5 -echo $ECHO_N "checking if we need to make and use the parse libraries... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need to make and use the parse libraries" >&5 +$as_echo_n "checking if we need to make and use the parse libraries... " >&6; } ans=no case "$ntp_libparse" in yes) ans=yes -cat >>confdefs.h <<\_ACEOF -#define CLOCK_PARSE 1 -_ACEOF +$as_echo "#define CLOCK_PARSE 1" >>confdefs.h LIBPARSE=../libparse/libparse.a MAKE_LIBPARSE=libparse.a # HMS: check_y2k trips the 34 year problem now... false && MAKE_CHECK_Y2K=check_y2k -cat >>confdefs.h <<\_ACEOF -#define PPS_SAMPLE 1 -_ACEOF +$as_echo "#define PPS_SAMPLE 1" >>confdefs.h - cat >>confdefs.h <<\_ACEOF -#define CLOCK_ATOM 1 -_ACEOF + $as_echo "#define CLOCK_ATOM 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } # AC_SUBST(RSAOBJS) # AC_SUBST(RSASRCS) @@ -51000,19 +23828,19 @@ echo "${ECHO_T}$ans" >&6 -echo "$as_me:$LINENO: checking for openssl library directory" >&5 -echo $ECHO_N "checking for openssl library directory... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl library directory" >&5 +$as_echo_n "checking for openssl library directory... " >&6; } -# Check whether --with-openssl-libdir or --without-openssl-libdir was given. -if test "${with_openssl_libdir+set}" = set; then - withval="$with_openssl_libdir" - ans=$withval +# Check whether --with-openssl-libdir was given. +if test "${with_openssl_libdir+set}" = set; then : + withval=$with_openssl_libdir; ans=$withval else case "$build" in $host) ans=yes ;; *) ans=no ;; esac -fi; +fi + case "$ans" in no) ;; yes) # Look in: @@ -51047,22 +23875,22 @@ case "$ans" in esac ;; esac -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } -echo "$as_me:$LINENO: checking for openssl include directory" >&5 -echo $ECHO_N "checking for openssl include directory... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for openssl include directory" >&5 +$as_echo_n "checking for openssl include directory... " >&6; } -# Check whether --with-openssl-incdir or --without-openssl-incdir was given. -if test "${with_openssl_incdir+set}" = set; then - withval="$with_openssl_incdir" - ans=$withval +# Check whether --with-openssl-incdir was given. +if test "${with_openssl_incdir+set}" = set; then : + withval=$with_openssl_incdir; ans=$withval else case "$build" in $host) ans=yes ;; *) ans=no ;; esac -fi; +fi + case "$ans" in no) ;; yes) # look in: @@ -51089,17 +23917,17 @@ case "$ans" in esac ;; esac -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } -# Check whether --with-crypto or --without-crypto was given. -if test "${with_crypto+set}" = set; then - withval="$with_crypto" - ans=$withval +# Check whether --with-crypto was given. +if test "${with_crypto+set}" = set; then : + withval=$with_crypto; ans=$withval else ans=yes -fi; +fi + case "$ans" in no) ;; yes|openssl) @@ -51118,108 +23946,16 @@ case "$ans" in LCRYPTO=-lcrypto -cat >>confdefs.h <<\_ACEOF -#define OPENSSL -_ACEOF +$as_echo "#define OPENSSL /**/" >>confdefs.h - - -for ac_func in EVP_md2 EVP_mdc2 -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in EVP_md2 EVP_mdc2 +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -51228,21 +23964,21 @@ done fi ;; esac -echo "$as_me:$LINENO: checking for the level of crypto support" >&5 -echo $ECHO_N "checking for the level of crypto support... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the level of crypto support" >&5 +$as_echo_n "checking for the level of crypto support... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } -echo "$as_me:$LINENO: checking if we want to compile with ElectricFence" >&5 -echo $ECHO_N "checking if we want to compile with ElectricFence... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want to compile with ElectricFence" >&5 +$as_echo_n "checking if we want to compile with ElectricFence... " >&6; } -# Check whether --with-electricfence or --without-electricfence was given. -if test "${with_electricfence+set}" = set; then - withval="$with_electricfence" - ans=$withval +# Check whether --with-electricfence was given. +if test "${with_electricfence+set}" = set; then : + withval=$with_electricfence; ans=$withval else ans=no -fi; +fi + case "$ans" in no) ;; *) @@ -51254,12 +23990,12 @@ case "$ans" in ans=yes ;; esac -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } -echo "$as_me:$LINENO: checking if we want to run check-layout" >&5 -echo $ECHO_N "checking if we want to run check-layout... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want to run check-layout" >&5 +$as_echo_n "checking if we want to run check-layout... " >&6; } case "$cross_compiling$PATH_PERL" in no/*) MAKE_CHECK_LAYOUT=check-layout @@ -51269,30 +24005,30 @@ case "$cross_compiling$PATH_PERL" in ans=no ;; esac -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } -echo "$as_me:$LINENO: checking if we can make dcf parse utilities" >&5 -echo $ECHO_N "checking if we can make dcf parse utilities... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can make dcf parse utilities" >&5 +$as_echo_n "checking if we can make dcf parse utilities... " >&6; } ans=no if test "$ntp_parseutil" = "yes"; then case "$host" in - *-*-sunos4*|*-*-solaris2*|*-*-linux*|*-*-netbsd*) + *-*-sunos4*|*-*-solaris2*|*-*-*linux*|*-*-netbsd*) ans="dcfd testdcf" DCFD=dcfd TESTDCF=testdcf ;; esac fi -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } -echo "$as_me:$LINENO: checking if we can build kernel streams modules for parse" >&5 -echo $ECHO_N "checking if we can build kernel streams modules for parse... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can build kernel streams modules for parse" >&5 +$as_echo_n "checking if we can build kernel streams modules for parse... " >&6; } ans=no case "$ntp_parseutil$ac_cv_header_sys_stropts_h" in yesyes) @@ -51301,9 +24037,7 @@ case "$ntp_parseutil$ac_cv_header_sys_stropts_h" in case "$ac_cv_var_kernel_pll" in yes) -cat >>confdefs.h <<\_ACEOF -#define PPS_SYNC 1 -_ACEOF +$as_echo "#define PPS_SYNC 1" >>confdefs.h ;; esac @@ -51317,25 +24051,23 @@ _ACEOF esac ;; esac -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } -echo "$as_me:$LINENO: checking if we need basic refclock support" >&5 -echo $ECHO_N "checking if we need basic refclock support... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we need basic refclock support" >&5 +$as_echo_n "checking if we need basic refclock support... " >&6; } if test "$ntp_refclock" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define REFCLOCK 1 -_ACEOF +$as_echo "#define REFCLOCK 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ntp_refclock" >&5 -echo "${ECHO_T}$ntp_refclock" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_refclock" >&5 +$as_echo "$ntp_refclock" >&6; } -echo "$as_me:$LINENO: checking if we want HP-UX adjtimed support" >&5 -echo $ECHO_N "checking if we want HP-UX adjtimed support... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want HP-UX adjtimed support" >&5 +$as_echo_n "checking if we want HP-UX adjtimed support... " >&6; } case "$host" in *-*-hpux[56789]*) ans=yes @@ -51346,16 +24078,14 @@ esac if test "$ans" = "yes"; then MAKE_ADJTIMED=adjtimed -cat >>confdefs.h <<\_ACEOF -#define NEED_HPUX_ADJTIME 1 -_ACEOF +$as_echo "#define NEED_HPUX_ADJTIME 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } -echo "$as_me:$LINENO: checking if we want QNX adjtime support" >&5 -echo $ECHO_N "checking if we want QNX adjtime support... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want QNX adjtime support" >&5 +$as_echo_n "checking if we want QNX adjtime support... " >&6; } case "$host" in *-*-qnx*) ans=yes @@ -51365,129 +24095,130 @@ case "$host" in esac if test "$ans" = "yes"; then -cat >>confdefs.h <<\_ACEOF -#define NEED_QNX_ADJTIME 1 -_ACEOF +$as_echo "#define NEED_QNX_ADJTIME 1" >>confdefs.h fi -echo "$as_me:$LINENO: result: $ans" >&5 -echo "${ECHO_T}$ans" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } -echo "$as_me:$LINENO: checking if we can read kmem" >&5 -echo $ECHO_N "checking if we can read kmem... $ECHO_C" >&6 -if test "${ac_cv_var_can_kmem+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-kmem or --disable-kmem was given. -if test "${enable_kmem+set}" = set; then - enableval="$enable_kmem" - ans=$enableval -else - case "$ac_cv_func_nlist$ac_cv_func_K_open$ac_cv_func_kvm_open" in - *yes*) - ans=yes - ;; - *) ans=no - ;; - esac - case "$host" in - *-*-aix*) - #ans=no - ;; - *-*-domainos) # Won't be found... - ans=no - ;; - *-*-hpux*) - #ans=no - ;; - *-*-irix[456]*) - ans=no - ;; - *-*-linux*) - ans=no - ;; - *-*-winnt3.5) - ans=no - ;; - *-*-unicosmp*) - ans=no - ;; - esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can read kmem" >&5 +$as_echo_n "checking if we can read kmem... " >&6; } -fi; -ac_cv_var_can_kmem=$ans -fi -echo "$as_me:$LINENO: result: $ac_cv_var_can_kmem" >&5 -echo "${ECHO_T}$ac_cv_var_can_kmem" >&6 +# the default is to enable it if the system has the capability -case "$ac_cv_var_can_kmem" in - *yes*) ;; - *) -cat >>confdefs.h <<\_ACEOF -#define NOKMEM 1 -_ACEOF - ;; +case "$ac_cv_func_nlist$ac_cv_func_K_open$ac_cv_func_kvm_open" in + *yes*) + ans=yes + ;; + *) ans=no esac -echo "$as_me:$LINENO: checking if adjtime is accurate" >&5 -echo $ECHO_N "checking if adjtime is accurate... $ECHO_C" >&6 -if test "${ac_cv_var_adjtime_is_accurate+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-accurate-adjtime or --disable-accurate-adjtime was given. -if test "${enable_accurate_adjtime+set}" = set; then - enableval="$enable_accurate_adjtime" - ans=$enableval -else - case "$host" in - i386-sequent-ptx*) - ans=no - ;; - i386-unknown-osf1*) - ans=yes - ;; - mips-sgi-irix[456]*) - ans=yes - ;; - *-fujitsu-uxp*) - ans=yes - ;; - *-ibm-aix[45]*) - ans=yes - ;; - *-*-linux*) - ans=yes - ;; - *-*-solaris2.[01]) - ans=no - ;; - *-*-solaris2*) - ans=yes - ;; - *-*-unicosmp*) - ans=yes - ;; - *) ans=no - ;; - esac +case "$host" in + *-*-domainos) # Won't be found... + ans=no + ;; + *-*-hpux*) + #ans=no + ;; + *-*-irix[456]*) + ans=no + ;; + *-*-*linux*) + ans=no + ;; + *-*-winnt3.5) + ans=no + ;; + *-*-unicosmp*) + ans=no + ;; +esac + +# --enable-kmem / --disable-kmem controls if present +# Check whether --enable-kmem was given. +if test "${enable_kmem+set}" = set; then : + enableval=$enable_kmem; ans=$enableval -fi; -ac_cv_var_adjtime_is_accurate=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_adjtime_is_accurate" >&5 -echo "${ECHO_T}$ac_cv_var_adjtime_is_accurate" >&6 -case "$ac_cv_var_adjtime_is_accurate" in + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in yes) -cat >>confdefs.h <<\_ACEOF -#define ADJTIME_IS_ACCURATE 1 -_ACEOF - ;; + can_kmem=yes + ;; + *) + can_kmem=no + +$as_echo "#define NOKMEM 1" >>confdefs.h + esac -echo "$as_me:$LINENO: checking the name of 'tick' in the kernel" >&5 -echo $ECHO_N "checking the name of 'tick' in the kernel... $ECHO_C" >&6 -if test "${ac_cv_var_nlist_tick+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if adjtime is accurate" >&5 +$as_echo_n "checking if adjtime is accurate... " >&6; } + +# target-dependent defaults + +case "$host" in + i386-sequent-ptx*) + ans=no + ;; + i386-unknown-osf1*) + ans=yes + ;; + mips-sgi-irix[456]*) + ans=yes + ;; + *-fujitsu-uxp*) + ans=yes + ;; + *-ibm-aix[456]*) + ans=yes + ;; + *-*-*linux*) + ans=yes + ;; + *-*-solaris2.[01]) + ans=no + ;; + *-*-solaris2*) + ans=yes + ;; + *-*-unicosmp*) + ans=yes + ;; + *) ans=no +esac + +# --enable-accurate-adjtime / --disable-accurate-adjtime +# override the default +# Check whether --enable-accurate-adjtime was given. +if test "${enable_accurate_adjtime+set}" = set; then : + enableval=$enable_accurate_adjtime; ans=$enableval +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in + yes) + +$as_echo "#define ADJTIME_IS_ACCURATE 1" >>confdefs.h + + adjtime_is_accurate=yes + ;; + *) + adjtime_is_accurate=no +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name of 'tick' in the kernel" >&5 +$as_echo_n "checking the name of 'tick' in the kernel... " >&6; } +if test "${ac_cv_var_nlist_tick+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=_tick case "$host" in @@ -51500,7 +24231,7 @@ case "$host" in *-hp-hpux*) ans=old_tick ;; - *-ibm-aix[345]*) + *-ibm-aix[3456]*) ans=no ;; *-*-mpeix*) @@ -51521,8 +24252,8 @@ case "$host" in esac ac_cv_var_nlist_tick=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_nlist_tick" >&5 -echo "${ECHO_T}$ac_cv_var_nlist_tick" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_nlist_tick" >&5 +$as_echo "$ac_cv_var_nlist_tick" >&6; } case "$ac_cv_var_nlist_tick" in ''|no) ;; # HMS: I think we can only get 'no' here... *) @@ -51532,10 +24263,10 @@ _ACEOF ;; esac # -echo "$as_me:$LINENO: checking for the units of 'tick'" >&5 -echo $ECHO_N "checking for the units of 'tick'... $ECHO_C" >&6 -if test "${ac_cv_var_tick_nano+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the units of 'tick'" >&5 +$as_echo_n "checking for the units of 'tick'... " >&6; } +if test "${ac_cv_var_tick_nano+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=usec case "$host" in @@ -51545,22 +24276,20 @@ case "$host" in esac ac_cv_var_tick_nano=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_tick_nano" >&5 -echo "${ECHO_T}$ac_cv_var_tick_nano" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tick_nano" >&5 +$as_echo "$ac_cv_var_tick_nano" >&6; } case "$ac_cv_var_tick_nano" in nsec) -cat >>confdefs.h <<\_ACEOF -#define TICK_NANO 1 -_ACEOF +$as_echo "#define TICK_NANO 1" >>confdefs.h ;; esac # -echo "$as_me:$LINENO: checking the name of 'tickadj' in the kernel" >&5 -echo $ECHO_N "checking the name of 'tickadj' in the kernel... $ECHO_C" >&6 -if test "${ac_cv_var_nlist_tickadj+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name of 'tickadj' in the kernel" >&5 +$as_echo_n "checking the name of 'tickadj' in the kernel... " >&6; } +if test "${ac_cv_var_nlist_tickadj+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=_tickadj case "$host" in @@ -51603,8 +24332,8 @@ case "$host" in esac ac_cv_var_nlist_tickadj=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_nlist_tickadj" >&5 -echo "${ECHO_T}$ac_cv_var_nlist_tickadj" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_nlist_tickadj" >&5 +$as_echo "$ac_cv_var_nlist_tickadj" >&6; } case "$ac_cv_var_nlist_tickadj" in ''|no) ;; # HMS: I think we can only get 'no' here... *) @@ -51614,10 +24343,10 @@ _ACEOF ;; esac # -echo "$as_me:$LINENO: checking for the units of 'tickadj'" >&5 -echo $ECHO_N "checking for the units of 'tickadj'... $ECHO_C" >&6 -if test "${ac_cv_var_tickadj_nano+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the units of 'tickadj'" >&5 +$as_echo_n "checking for the units of 'tickadj'... " >&6; } +if test "${ac_cv_var_tickadj_nano+set}" = set; then : + $as_echo_n "(cached) " >&6 else ans=usec case "$host" in @@ -51627,22 +24356,20 @@ case "$host" in esac ac_cv_var_tickadj_nano=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_tickadj_nano" >&5 -echo "${ECHO_T}$ac_cv_var_tickadj_nano" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_tickadj_nano" >&5 +$as_echo "$ac_cv_var_tickadj_nano" >&6; } case "$ac_cv_var_tickadj_nano" in nsec) -cat >>confdefs.h <<\_ACEOF -#define TICKADJ_NANO 1 -_ACEOF +$as_echo "#define TICKADJ_NANO 1" >>confdefs.h ;; esac # -echo "$as_me:$LINENO: checking half-heartedly for 'dosynctodr' in the kernel" >&5 -echo $ECHO_N "checking half-heartedly for 'dosynctodr' in the kernel... $ECHO_C" >&6 -if test "${ac_cv_var_nlist_dosynctodr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking half-heartedly for 'dosynctodr' in the kernel" >&5 +$as_echo_n "checking half-heartedly for 'dosynctodr' in the kernel... " >&6; } +if test "${ac_cv_var_nlist_dosynctodr+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$host" in *-apple-aux[23]*) @@ -51684,8 +24411,8 @@ else esac ac_cv_var_nlist_dosynctodr=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_nlist_dosynctodr" >&5 -echo "${ECHO_T}$ac_cv_var_nlist_dosynctodr" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_nlist_dosynctodr" >&5 +$as_echo "$ac_cv_var_nlist_dosynctodr" >&6; } case "$ac_cv_var_nlist_dosynctodr" in no) ;; *) @@ -51696,10 +24423,10 @@ _ACEOF ;; esac # -echo "$as_me:$LINENO: checking half-heartedly for 'noprintf' in the kernel" >&5 -echo $ECHO_N "checking half-heartedly for 'noprintf' in the kernel... $ECHO_C" >&6 -if test "${ac_cv_var_nlist_noprintf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking half-heartedly for 'noprintf' in the kernel" >&5 +$as_echo_n "checking half-heartedly for 'noprintf' in the kernel... " >&6; } +if test "${ac_cv_var_nlist_noprintf+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$host" in *-apple-aux[23]*) @@ -51735,8 +24462,8 @@ else esac ac_cv_var_nlist_noprintf=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_nlist_noprintf" >&5 -echo "${ECHO_T}$ac_cv_var_nlist_noprintf" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_var_nlist_noprintf" >&5 +$as_echo "$ac_cv_var_nlist_noprintf" >&6; } case "$ac_cv_var_nlist_noprintf" in no) ;; *) @@ -51750,127 +24477,129 @@ esac -echo "$as_me:$LINENO: checking for a default value for 'tick'" >&5 -echo $ECHO_N "checking for a default value for 'tick'... $ECHO_C" >&6 -if test "${ac_cv_var_tick+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-tick or --disable-tick was given. -if test "${enable_tick+set}" = set; then - enableval="$enable_tick" - ans=$enableval -else - ans=no - case "$host" in - XXX-*-pc-cygwin*) - ;; - *-univel-sysv*) - ans=10000 - ;; - *-*-irix*) - ans=10000 - ;; - *-*-linux*) - ans=txc.tick - ;; - *-*-mpeix*) - ans=no - ;; - *-*-winnt3.5) - ans='(every / 10)' - ;; - *-*-unicosmp*) - ans=10000 - ;; - *) - ans='1000000L/hz' - ;; - esac -fi; -ac_cv_var_tick=$ans +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a default value for 'tick'" >&5 +$as_echo_n "checking for a default value for 'tick'... " >&6; } + +# target-dependent default for tick + +case "$host" in + *-*-pc-cygwin*) + as_fn_error "tick needs work for cygwin" "$LINENO" 5 + ;; + *-univel-sysv*) + ans=10000 + ;; + *-*-irix*) + ans=10000 + ;; + *-*-*linux*) + ans=txc.tick + ;; + *-*-mpeix*) + ans=no + ;; + *-*-winnt3.5) + ans='(every / 10)' + ;; + *-*-unicosmp*) + ans=10000 + ;; + *) + ans='1000000L/hz' + ;; +esac + +# Check whether --enable-tick was given. +if test "${enable_tick+set}" = set; then : + enableval=$enable_tick; ans=$enableval + fi -echo "$as_me:$LINENO: result: $ac_cv_var_tick" >&5 -echo "${ECHO_T}$ac_cv_var_tick" >&6 -case "$ac_cv_var_tick" in + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in ''|no) ;; # HMS: I think we can only get 'no' here... *) cat >>confdefs.h <<_ACEOF -#define PRESET_TICK $ac_cv_var_tick +#define PRESET_TICK $ans _ACEOF ;; esac -echo "$as_me:$LINENO: checking for a default value for 'tickadj'" >&5 -echo $ECHO_N "checking for a default value for 'tickadj'... $ECHO_C" >&6 -if test "${ac_cv_var_tickadj+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-tickadj or --disable-tickadj was given. -if test "${enable_tickadj+set}" = set; then - enableval="$enable_tickadj" - ans=$enableval -else - ans='500/hz' - case "$host" in - *-fujitsu-uxp*) - case "$ac_cv_var_adjtime_is_accurate" in - yes) ans='tick/16' ;; - esac - ;; - XXX-*-pc-cygwin*) - ans=no - ;; - *-univel-sysv*) - ans=80 - ;; - *-*-aix*) - case "$ac_cv_var_can_kmem" in - no) ans=1000 ;; - esac - ;; - *-*-domainos) # Skippy: won't be found... - case "$ac_cv_var_can_kmem" in - no) ans=668 ;; - esac - ;; - *-*-hpux*) - case "$ac_cv_var_adjtime_is_accurate" in - yes) ans='tick/16' ;; - esac - ;; - *-*-irix*) - ans=150 - ;; - *-*-mpeix*) - ans=no - ;; - *-*-sco3.2v5.0*) - ans=10000L/hz - ;; - *-*-solaris2*) - case "$ac_cv_var_adjtime_is_accurate" in - yes) - #ans='tick/16' - ;; - esac - ;; - *-*-winnt3.5) - ans=50 - ;; - *-*-unicosmp*) - ans=150 - ;; - esac -fi; -ac_cv_var_tickadj=$ans + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a default value for 'tickadj'" >&5 +$as_echo_n "checking for a default value for 'tickadj'... " >&6; } + +# target-specific default + +ans='500/hz' + +case "$host" in + *-fujitsu-uxp*) + case "$adjtime_is_accurate" in + yes) + ans='tick/16' + esac + ;; + XXX-*-pc-cygwin*) + ans=no + ;; + *-univel-sysv*) + ans=80 + ;; + *-*-aix*) + case "$can_kmem" in + no) + ans=1000 + esac + ;; + *-*-domainos) # Skippy: won't be found... + case "$can_kmem" in + no) + ans=668 + esac + ;; + *-*-hpux*) + case "$adjtime_is_accurate" in + yes) + ans='tick/16' + esac + ;; + *-*-irix*) + ans=150 + ;; + *-*-mpeix*) + ans=no + ;; + *-*-sco3.2v5.0*) + ans=10000L/hz + ;; + *-*-winnt3.5) + ans=50 + ;; + *-*-unicosmp*) + ans=150 +esac + +# Check whether --enable-tickadj was given. +if test "${enable_tickadj+set}" = set; then : + enableval=$enable_tickadj; ans=$enableval + fi -echo "$as_me:$LINENO: result: $ac_cv_var_tickadj" >&5 -echo "${ECHO_T}$ac_cv_var_tickadj" >&6 -case "$ac_cv_var_tickadj" in + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +default_tickadj=$ans + +case "$default_tickadj" in ''|no) ;; # HMS: I think we can only get 'no' here... *) cat >>confdefs.h <<_ACEOF -#define PRESET_TICKADJ $ac_cv_var_tickadj +#define PRESET_TICKADJ $default_tickadj _ACEOF ;; esac @@ -51881,35 +24610,31 @@ esac # has this "feature" or any obvious way to test for it. case "$host" in mips-sni-sysv4*) -cat >>confdefs.h <<\_ACEOF -#define RELIANTUNIX_CLOCK 1 -_ACEOF +$as_echo "#define RELIANTUNIX_CLOCK 1" >>confdefs.h ;; esac case "$host" in *-*-sco3.2v5*) -cat >>confdefs.h <<\_ACEOF -#define SCO5_CLOCK 1 -_ACEOF +$as_echo "#define SCO5_CLOCK 1" >>confdefs.h ;; esac ac_cv_make_tickadj=yes -case "$ac_cv_var_can_kmem$ac_cv_var_tick$ac_cv_var_tickadj" in +case "$can_kmem$ac_cv_var_tick$default_tickadj" in nonono) # Don't read KMEM, no presets. Bogus. - { echo "$as_me:$LINENO: WARNING: Can't read kmem" >&5 -echo "$as_me: WARNING: Can't read kmem" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't read kmem, no PRESET_TICK or PRESET_TICKADJ. No tickadj." >&5 +$as_echo "$as_me: WARNING: Can't read kmem, no PRESET_TICK or PRESET_TICKADJ. No tickadj." >&2;} ac_cv_make_tickadj=no ;; nono*) # Don't read KMEM, no PRESET_TICK but PRESET_TICKADJ. Bogus. - { echo "$as_me:$LINENO: WARNING: Can't read kmem but no PRESET_TICK. No tickadj." >&5 -echo "$as_me: WARNING: Can't read kmem but no PRESET_TICK. No tickadj." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't read kmem but no PRESET_TICK. No tickadj." >&5 +$as_echo "$as_me: WARNING: Can't read kmem but no PRESET_TICK. No tickadj." >&2;} ac_cv_make_tickadj=no ;; no*no) # Don't read KMEM, PRESET_TICK but no PRESET_TICKADJ. Bogus. - { echo "$as_me:$LINENO: WARNING: Can't read kmem but no PRESET_TICKADJ. No tickadj." >&5 -echo "$as_me: WARNING: Can't read kmem but no PRESET_TICKADJ. No tickadj." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Can't read kmem but no PRESET_TICKADJ. No tickadj." >&5 +$as_echo "$as_me: WARNING: Can't read kmem but no PRESET_TICKADJ. No tickadj." >&2;} ac_cv_make_tickadj=no ;; no*) # Don't read KMEM, PRESET_TICK and PRESET_TICKADJ. Cool. @@ -51917,25 +24642,23 @@ echo "$as_me: WARNING: Can't read kmem but no PRESET_TICKADJ. No tickadj." >&2; yesnono) # Read KMEM, no presets. Cool. ;; yesno*) # Read KMEM, no PRESET_TICK but PRESET_TICKADJ. Bogus. - { echo "$as_me:$LINENO: WARNING: PRESET_TICKADJ is defined but not PRESET_TICK. Please report this." >&5 -echo "$as_me: WARNING: PRESET_TICKADJ is defined but not PRESET_TICK. Please report this." >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: PRESET_TICKADJ is defined but not PRESET_TICK. Please report this." >&5 +$as_echo "$as_me: WARNING: PRESET_TICKADJ is defined but not PRESET_TICK. Please report this." >&2;} ;; yes*no) # Read KMEM, PRESET_TICK but no PRESET_TICKADJ. Cool. ;; yes*) # READ KMEM, PRESET_TICK and PRESET_TICKADJ. ;; *) # Generally bogus. - { { echo "$as_me:$LINENO: error: This shouldn't happen." >&5 -echo "$as_me: error: This shouldn't happen." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "This shouldn't happen." "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: checking if we want and can make the ntptime utility" >&5 -echo $ECHO_N "checking if we want and can make the ntptime utility... $ECHO_C" >&6 -if test "${ac_cv_make_ntptime+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want and can make the ntptime utility" >&5 +$as_echo_n "checking if we want and can make the ntptime utility... " >&6; } +if test "${ac_cv_make_ntptime+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$host" in *) case "$ac_cv_struct_ntptimeval$ac_cv_var_kernel_pll" in @@ -51950,8 +24673,8 @@ else esac ac_cv_make_ntptime=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_make_ntptime" >&5 -echo "${ECHO_T}$ac_cv_make_ntptime" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_make_ntptime" >&5 +$as_echo "$ac_cv_make_ntptime" >&6; } case "$ac_cv_make_ntptime" in yes) MAKE_NTPTIME=ntptime @@ -51982,15 +24705,25 @@ case "$host" in ac_cv_make_tickadj=no ;; esac -echo "$as_me:$LINENO: checking if we want and can make the tickadj utility" >&5 -echo $ECHO_N "checking if we want and can make the tickadj utility... $ECHO_C" >&6 -if test "${ac_cv_make_tickadj+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +# +# Despite all the above, we always make tickadj. Setting +# ac_cv_make_tickadj before AC_CACHE_CHECK will cause a false +# report that the configuration variable was cached. It may +# be better to simply remove the hunk above, I did not want +# to remove it if there is hope it will be used again. +# +unset ac_cv_make_tickadj + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want and can make the tickadj utility" >&5 +$as_echo_n "checking if we want and can make the tickadj utility... " >&6; } +if test "${ac_cv_make_tickadj+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_make_tickadj=yes fi -echo "$as_me:$LINENO: result: $ac_cv_make_tickadj" >&5 -echo "${ECHO_T}$ac_cv_make_tickadj" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_make_tickadj" >&5 +$as_echo "$ac_cv_make_tickadj" >&6; } case "$ac_cv_make_tickadj" in yes) MAKE_TICKADJ=tickadj @@ -51998,10 +24731,10 @@ case "$ac_cv_make_tickadj" in esac -echo "$as_me:$LINENO: checking if we want and can make the timetrim utility" >&5 -echo $ECHO_N "checking if we want and can make the timetrim utility... $ECHO_C" >&6 -if test "${ac_cv_make_timetrim+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want and can make the timetrim utility" >&5 +$as_echo_n "checking if we want and can make the timetrim utility... " >&6; } +if test "${ac_cv_make_timetrim+set}" = set; then : + $as_echo_n "(cached) " >&6 else case "$host" in *-*-irix*) @@ -52015,8 +24748,8 @@ else ;; esac fi -echo "$as_me:$LINENO: result: $ac_cv_make_timetrim" >&5 -echo "${ECHO_T}$ac_cv_make_timetrim" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_make_timetrim" >&5 +$as_echo "$ac_cv_make_timetrim" >&6; } case "$ac_cv_make_timetrim" in yes) MAKE_TIMETRIM=timetrim @@ -52025,23 +24758,23 @@ esac -echo "$as_me:$LINENO: checking if we want to build the NTPD simulator" >&5 -echo $ECHO_N "checking if we want to build the NTPD simulator... $ECHO_C" >&6 -if test "${ac_cv_var_ntpd_sim+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-simulator or --disable-simulator was given. -if test "${enable_simulator+set}" = set; then - enableval="$enable_simulator" - ans=$enableval + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want to build the NTPD simulator" >&5 +$as_echo_n "checking if we want to build the NTPD simulator... " >&6; } + +# Check whether --enable-simulator was given. +if test "${enable_simulator+set}" = set; then : + enableval=$enable_simulator; ans=$enableval else ans=no -fi; -ac_cv_var_ntpd_sim=$ans + fi -echo "$as_me:$LINENO: result: $ac_cv_var_ntpd_sim" >&5 -echo "${ECHO_T}$ac_cv_var_ntpd_sim" >&6 -case "$ac_cv_var_ntpd_sim" in + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in yes) MAKE_NTPDSIM=ntpdsim MAKE_LIBNTPSIM=libntpsim.a @@ -52053,305 +24786,483 @@ case "$build" in ;; *) case "$host" in *-*-vxworks*) - LDFLAGS="$LDFLAGS -r" - ;; + LDFLAGS="$LDFLAGS -r" + ;; esac ;; esac -echo "$as_me:$LINENO: checking if we should always slew the time" >&5 -echo $ECHO_N "checking if we should always slew the time... $ECHO_C" >&6 -if test "${ac_cv_var_slew_always+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-slew-always or --disable-slew-always was given. -if test "${enable_slew_always+set}" = set; then - enableval="$enable_slew_always" - ans=$enableval -else - case "$host" in - *-apple-aux[23]*) - ans=yes - ;; - *-*-bsdi[012]*) - ans=no - ;; - *-*-bsdi*) - ans=yes - ;; - *-*-openvms*) # HMS: won't be found - ans=yes - ;; - *) ans=no - ;; - esac -fi; -ac_cv_var_slew_always=$ans +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should always slew the time" >&5 +$as_echo_n "checking if we should always slew the time... " >&6; } + +# target-specific defaults + +case "$host" in + *-apple-aux[23]*) + ans=yes + ;; + *-*-bsdi[012]*) + ans=no + ;; + *-*-bsdi*) + ans=yes + ;; + *-*-openvms*) # HMS: won't be found + ans=yes + ;; + *) ans=no + ;; +esac + +# --enable-slew-always / --disable-slew-always overrides default + +# Check whether --enable-slew-always was given. +if test "${enable_slew_always+set}" = set; then : + enableval=$enable_slew_always; ans=$enableval + fi -echo "$as_me:$LINENO: result: $ac_cv_var_slew_always" >&5 -echo "${ECHO_T}$ac_cv_var_slew_always" >&6 -case "$ac_cv_var_slew_always" in + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in yes) -cat >>confdefs.h <<\_ACEOF -#define SLEWALWAYS 1 -_ACEOF +$as_echo "#define SLEWALWAYS 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if we should step and slew the time" >&5 -echo $ECHO_N "checking if we should step and slew the time... $ECHO_C" >&6 -if test "${ac_cv_var_step_slew+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-step-slew or --disable-step-slew was given. -if test "${enable_step_slew+set}" = set; then - enableval="$enable_step_slew" - ans=$enableval -else - case "$host" in - *-sni-sysv*) - ans=yes - ;; - *-univel-sysv*) - ans=no - ;; - *-*-ptx*) - ans=yes - ;; - *-*-solaris2.1[0-9]*) - ans=no - ;; - *-*-solaris2.[012]*) - ans=yes - ;; - *-*-sysv4*) # HMS: Does this catch Fujitsu UXP? - ans=yes - ;; - *) ans=no - ;; - esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should step and slew the time" >&5 +$as_echo_n "checking if we should step and slew the time... " >&6; } + +case "$host" in + *-sni-sysv*) + ans=yes + ;; + *-univel-sysv*) + ans=no + ;; + *-*-ptx*) + ans=yes + ;; + *-*-solaris2.1[0-9]*) + ans=no + ;; + *-*-solaris2.[012]*) + ans=yes + ;; + *-*-sysv4*) # HMS: Does this catch Fujitsu UXP? + ans=yes + ;; + *) ans=no + ;; +esac + + +# Check whether --enable-step-slew was given. +if test "${enable_step_slew+set}" = set; then : + enableval=$enable_step_slew; ans=$enableval -fi; -ac_cv_var_step_slew=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_step_slew" >&5 -echo "${ECHO_T}$ac_cv_var_step_slew" >&6 -case "$ac_cv_var_step_slew" in + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in yes) -cat >>confdefs.h <<\_ACEOF -#define STEP_SLEW 1 -_ACEOF +$as_echo "#define STEP_SLEW 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if ntpdate should step the time" >&5 -echo $ECHO_N "checking if ntpdate should step the time... $ECHO_C" >&6 -if test "${ac_cv_var_ntpdate_step+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-ntpdate-step or --disable-ntpdate-step was given. -if test "${enable_ntpdate_step+set}" = set; then - enableval="$enable_ntpdate_step" - ans=$enableval -else - case "$host" in - *-apple-aux[23]*) - ans=yes - ;; - *) ans=no - ;; - esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if ntpdate should step the time" >&5 +$as_echo_n "checking if ntpdate should step the time... " >&6; } + +case "$host" in + *-apple-aux[23]*) + ans=yes + ;; + *) ans=no +esac + +# Check whether --enable-ntpdate-step was given. +if test "${enable_ntpdate_step+set}" = set; then : + enableval=$enable_ntpdate_step; ans=$enableval -fi; -ac_cv_var_ntpdate_step=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_ntpdate_step" >&5 -echo "${ECHO_T}$ac_cv_var_ntpdate_step" >&6 -case "$ac_cv_var_ntpdate_step" in + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in yes) -cat >>confdefs.h <<\_ACEOF -#define FORCE_NTPDATE_STEP 1 -_ACEOF +$as_echo "#define FORCE_NTPDATE_STEP 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if we should sync TODR clock every hour" >&5 -echo $ECHO_N "checking if we should sync TODR clock every hour... $ECHO_C" >&6 -if test "${ac_cv_var_sync_todr+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-hourly-todr-sync or --disable-hourly-todr-sync was given. -if test "${enable_hourly_todr_sync+set}" = set; then - enableval="$enable_hourly_todr_sync" - ans=$enableval -else - case "$host" in - *-*-nextstep*) - ans=yes - ;; - *-*-openvms*) # HMS: won't be found - ans=yes - ;; - *) ans=no - ;; - esac -fi; -ac_cv_var_sync_todr=$ans + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should sync TODR clock every hour" >&5 +$as_echo_n "checking if we should sync TODR clock every hour... " >&6; } + +case "$host" in + *-*-nextstep*) + ans=yes + ;; + *-*-openvms*) # HMS: won't be found + ans=yes + ;; + *) + ans=no +esac + +# Check whether --enable-hourly-todr-sync was given. +if test "${enable_hourly_todr_sync+set}" = set; then : + enableval=$enable_hourly_todr_sync; ans=$enableval + fi -echo "$as_me:$LINENO: result: $ac_cv_var_sync_todr" >&5 -echo "${ECHO_T}$ac_cv_var_sync_todr" >&6 + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + case "$ac_cv_var_sync_todr" in yes) -cat >>confdefs.h <<\_ACEOF -#define DOSYNCTODR 1 -_ACEOF +$as_echo "#define DOSYNCTODR 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if we should avoid kernel FLL bug" >&5 -echo $ECHO_N "checking if we should avoid kernel FLL bug... $ECHO_C" >&6 -if test "${ac_cv_var_kernel_fll_bug+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-kernel-fll-bug or --disable-kernel-fll-bug was given. -if test "${enable_kernel_fll_bug+set}" = set; then - enableval="$enable_kernel_fll_bug" - ans=$enableval -else - case "$host" in - *-*-solaris2.6) - unamev=`uname -v` - case "$unamev" in - Generic_105181-*) - old_IFS="$IFS" - IFS="-" - set $unamev - IFS="$old_IFS" - if test "$2" -ge 17 - then - # Generic_105181-17 and higher - ans=no - else - ans=yes - fi - ;; - *) ans=yes - ;; - esac - ;; - *-*-solaris2.7) - unamev=`uname -v` - case "$unamev" in - Generic_106541-*) - old_IFS="$IFS" - IFS="-" - set $unamev - IFS="$old_IFS" - if test "$2" -ge 07 - then - # Generic_106541-07 and higher - ans=no - else - ans=yes - fi - ;; - *) ans=yes - ;; - esac - ;; - *) ans=no - ;; - esac -fi; -ac_cv_var_kernel_fll_bug=$ans -fi -echo "$as_me:$LINENO: result: $ac_cv_var_kernel_fll_bug" >&5 -echo "${ECHO_T}$ac_cv_var_kernel_fll_bug" >&6 -case "$ac_cv_var_kernel_fll_bug" in - yes) -cat >>confdefs.h <<\_ACEOF -#define KERNEL_FLL_BUG 1 -_ACEOF - ;; -esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should avoid kernel FLL bug" >&5 +$as_echo_n "checking if we should avoid kernel FLL bug... " >&6; } -echo "$as_me:$LINENO: checking if we should use the IRIG sawtooth filter" >&5 -echo $ECHO_N "checking if we should use the IRIG sawtooth filter... $ECHO_C" >&6 -if test "${ac_cv_var_irig_sucks+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-irig-sawtooth or --disable-irig-sawtooth was given. -if test "${enable_irig_sawtooth+set}" = set; then - enableval="$enable_irig_sawtooth" - ans=$enableval -else - case "$host" in - *-*-solaris2.[89]) +case "$host" in + *-*-solaris2.6) + unamev=`uname -v` + case "$unamev" in + Generic_105181-*) + old_IFS="$IFS" + IFS="-" + set $unamev + IFS="$old_IFS" + if test "$2" -ge 17 + then + # Generic_105181-17 and higher + ans=no + else + ans=yes + fi + ;; + *) ans=yes - ;; - *-*-solaris2.1[0-9]*) - ans=yes - ;; - *) ans=no - ;; esac + ;; + *-*-solaris2.7) + unamev=`uname -v` + case "$unamev" in + Generic_106541-*) + old_IFS="$IFS" + IFS="-" + set $unamev + IFS="$old_IFS" + if test "$2" -ge 07 + then + # Generic_106541-07 and higher + ans=no + else + ans=yes + fi + ;; + *) + ans=yes + esac + ;; + *) + ans=no +esac + +# Check whether --enable-kernel-fll-bug was given. +if test "${enable_kernel_fll_bug+set}" = set; then : + enableval=$enable_kernel_fll_bug; ans=$enableval -fi; -ac_cv_var_irig_sucks=$ans fi -echo "$as_me:$LINENO: result: $ac_cv_var_irig_sucks" >&5 -echo "${ECHO_T}$ac_cv_var_irig_sucks" >&6 -case "$ac_cv_var_irig_sucks" in + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in yes) -cat >>confdefs.h <<\_ACEOF -#define IRIG_SUCKS 1 -_ACEOF +$as_echo "#define KERNEL_FLL_BUG 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking if we should enable NIST lockclock scheme" >&5 -echo $ECHO_N "checking if we should enable NIST lockclock scheme... $ECHO_C" >&6 -if test "${ac_cv_var_nist_lockclock+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Check whether --enable-nist or --disable-nist was given. -if test "${enable_nist+set}" = set; then - enableval="$enable_nist" - ans=$enableval + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should use the IRIG sawtooth filter" >&5 +$as_echo_n "checking if we should use the IRIG sawtooth filter... " >&6; } + +case "$host" in + *-*-solaris2.[89]) + ans=yes + ;; + *-*-solaris2.1[0-9]*) + ans=yes + ;; + *) ans=no +esac + +# Check whether --enable-irig-sawtooth was given. +if test "${enable_irig_sawtooth+set}" = set; then : + enableval=$enable_irig_sawtooth; ans=$enableval + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in + yes) +$as_echo "#define IRIG_SUCKS 1" >>confdefs.h + ;; +esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should enable NIST lockclock scheme" >&5 +$as_echo_n "checking if we should enable NIST lockclock scheme... " >&6; } + +# Check whether --enable-nist was given. +if test "${enable_nist+set}" = set; then : + enableval=$enable_nist; ans=$enableval else ans=no -fi; -ac_cv_var_nist_lockclock=$ans + fi -echo "$as_me:$LINENO: result: $ac_cv_var_nist_lockclock" >&5 -echo "${ECHO_T}$ac_cv_var_nist_lockclock" >&6 -case "$ac_cv_var_nist_lockclock" in + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in yes) -cat >>confdefs.h <<\_ACEOF -#define LOCKCLOCK 1 -_ACEOF +$as_echo "#define LOCKCLOCK 1" >>confdefs.h ;; esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want support for Samba's signing daemon" >&5 +$as_echo_n "checking if we want support for Samba's signing daemon... " >&6; } + +# Check whether --enable-ntp-signd was given. +if test "${enable_ntp_signd+set}" = set; then : + enableval=$enable_ntp_signd; ans=$enableval +else + ans=no + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in + no) + ntp_signd_path= + ;; + yes) + ntp_signd_path=/var/run/ntp_signd + ;; + *) + ntp_signd_path="$ans" +esac + +case "$ntp_signd_path" in + '') + wintime_default=no + ;; + *) + wintime_default=yes + +$as_echo "#define HAVE_NTP_SIGND /**/" >>confdefs.h + + +cat >>confdefs.h <<_ACEOF +#define NTP_SIGND_PATH "$ntp_signd_path" +_ACEOF + +esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want the windows symmetric client hack" >&5 +$as_echo_n "checking if we want the windows symmetric client hack... " >&6; } + +# default is no, unless --enable-ntp-signd was given +ans=$wintime_default +unset wintime_default + +# Check whether --enable-wintime was given. +if test "${enable_wintime+set}" = set; then : + enableval=$enable_wintime; ans=$enableval +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ans" >&5 +$as_echo "$ans" >&6; } + +case "$ans" in + yes) + +$as_echo "#define WINTIME /**/" >>confdefs.h + +esac + + +for ac_header in sys/clockctl.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/clockctl.h" "ac_cv_header_sys_clockctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_clockctl_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_CLOCKCTL_H 1 +_ACEOF + +fi + +done + + +case "$host" in + *-*-netbsd*) + ans=yes + ;; + *) ans=no + ;; +esac + +# Check whether --enable-clockctl was given. +if test "${enable_clockctl+set}" = set; then : + enableval=$enable_clockctl; ntp_use_dev_clockctl=$enableval +else + ntp_use_dev_clockctl=$ac_cv_header_sys_clockctl_h + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we should use /dev/clockctl" >&5 +$as_echo_n "checking if we should use /dev/clockctl... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_use_dev_clockctl" >&5 +$as_echo "$ntp_use_dev_clockctl" >&6; } + + +for ac_header in sys/capability.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_capability_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_CAPABILITY_H 1 +_ACEOF + +fi + +done + +for ac_header in sys/prctl.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "sys/prctl.h" "ac_cv_header_sys_prctl_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_prctl_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_SYS_PRCTL_H 1 +_ACEOF + +fi + +done + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we have linux capabilities (libcap)" >&5 +$as_echo_n "checking if we have linux capabilities (libcap)... " >&6; } + +case "$ac_cv_header_sys_capability_h$ac_cv_header_sys_prctl_h" in + yesyes) + ntp_have_linuxcaps=yes + ;; + *) + ntp_have_linuxcaps=no +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_have_linuxcaps" >&5 +$as_echo "$ntp_have_linuxcaps" >&6; } + + +# Check whether --enable-linuxcaps was given. +if test "${enable_linuxcaps+set}" = set; then : + enableval=$enable_linuxcaps; ntp_have_linuxcaps=$enableval + +fi + + + +case "$ntp_have_linuxcaps" in + yes) + +$as_echo "#define HAVE_LINUX_CAPABILITIES /**/" >>confdefs.h + + LIBS="$LIBS -lcap" +esac + + +case "$ntp_use_dev_clockctl$ntp_have_linuxcaps" in + *yes*) + +$as_echo "#define HAVE_DROPROOT /**/" >>confdefs.h + +esac + + +for ac_header in libscf.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "libscf.h" "ac_cv_header_libscf_h" "$ac_includes_default" +if test "x$ac_cv_header_libscf_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSCF_H 1 +_ACEOF + +fi + +done + + +case "$ac_cv_header_libscf_h" in + yes) + LSCF=-lscf + +esac + +ac_fn_c_check_func "$LINENO" "setppriv" "ac_cv_func_setppriv" +if test "x$ac_cv_func_setppriv" = x""yes; then : + +$as_echo "#define HAVE_SOLARIS_PRIVS /**/" >>confdefs.h + + +fi + + + # # ISC stuff # if test $ac_cv_struct_sockaddr_has_sa_len = yes; then -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_HAVESALEN -_ACEOF +$as_echo "#define ISC_PLATFORM_HAVESALEN /**/" >>confdefs.h fi -# Check whether --enable-ipv6 or --disable-ipv6 was given. -if test "${enable_ipv6+set}" = set; then - enableval="$enable_ipv6" +# Check whether --enable-ipv6 was given. +if test "${enable_ipv6+set}" = set; then : + enableval=$enable_ipv6; +fi -fi; case "$enable_ipv6" in yes|''|autodetect) @@ -52359,9 +25270,7 @@ case "$enable_ipv6" in powerpc-ibm-aix4*) ;; *) -cat >>confdefs.h <<\_ACEOF -#define WANT_IPV6 -_ACEOF +$as_echo "#define WANT_IPV6 /**/" >>confdefs.h ;; esac @@ -52370,113 +25279,91 @@ _ACEOF ;; esac -echo "$as_me:$LINENO: checking for IPv6 structures" >&5 -echo $ECHO_N "checking for IPv6 structures... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for IPv6 structures" >&5 +$as_echo_n "checking for IPv6 structures... " >&6; } +if test "${ac_cv_isc_found_ipv6+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#include + + #include + #include + #include + int main () { -struct sockaddr_in6 sin6; return (0); + + struct sockaddr_in6 sin6; + + ; return 0; } -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - found_ipv6=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - found_ipv6=no +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_isc_found_ipv6=yes +else + ac_cv_isc_found_ipv6=no + fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_isc_found_ipv6" >&5 +$as_echo "$ac_cv_isc_found_ipv6" >&6; } # # See whether IPv6 support is provided via a Kame add-on. # This is done before other IPv6 linking tests so LIBS is properly set. # -echo "$as_me:$LINENO: checking for Kame IPv6 support" >&5 -echo $ECHO_N "checking for Kame IPv6 support... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Kame IPv6 support" >&5 +$as_echo_n "checking for Kame IPv6 support... " >&6; } -# Check whether --with-kame or --without-kame was given. -if test "${with_kame+set}" = set; then - withval="$with_kame" - use_kame="$withval" +# Check whether --with-kame was given. +if test "${with_kame+set}" = set; then : + withval=$with_kame; use_kame="$withval" else use_kame="no" -fi; +fi + case "$use_kame" in - no) - ;; - yes) - kame_path=/usr/local/v6 - ;; - *) - kame_path="$use_kame" - ;; + no) + ;; + yes) + kame_path=/usr/local/v6 + ;; + *) + kame_path="$use_kame" + ;; esac case "$use_kame" in - no) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - ;; - *) - if test -f $kame_path/lib/libinet6.a; then - echo "$as_me:$LINENO: result: $kame_path/lib/libinet6.a" >&5 -echo "${ECHO_T}$kame_path/lib/libinet6.a" >&6 - LIBS="-L$kame_path/lib -linet6 $LIBS" - else - { { echo "$as_me:$LINENO: error: $kame_path/lib/libinet6.a not found. + no) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + *) + if test -f $kame_path/lib/libinet6.a; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kame_path/lib/libinet6.a" >&5 +$as_echo "$kame_path/lib/libinet6.a" >&6; } + LIBS="-L$kame_path/lib -linet6 $LIBS" + else + as_fn_error "$kame_path/lib/libinet6.a not found. Please choose the proper path with the following command: configure --with-kame=PATH -" >&5 -echo "$as_me: error: $kame_path/lib/libinet6.a not found. - -Please choose the proper path with the following command: - - configure --with-kame=PATH -" >&2;} - { (exit 1); exit 1; }; } - fi - ;; +" "$LINENO" 5 + fi + ;; esac # @@ -52488,520 +25375,321 @@ esac # netinet6/in6.h is needed for. # case "$host" in -*-bsdi4.[01]*) - ISC_PLATFORM_NEEDNETINET6IN6H="#define ISC_PLATFORM_NEEDNETINET6IN6H 1" - LWRES_PLATFORM_NEEDNETINET6IN6H="#define LWRES_PLATFORM_NEEDNETINET6IN6H 1" - isc_netinet6in6_hack="#include " - ;; -*) - ISC_PLATFORM_NEEDNETINET6IN6H="#undef ISC_PLATFORM_NEEDNETINET6IN6H" - LWRES_PLATFORM_NEEDNETINET6IN6H="#undef LWRES_PLATFORM_NEEDNETINET6IN6H" - isc_netinet6in6_hack="" - ;; + *-bsdi4.[01]*) + +$as_echo "#define ISC_PLATFORM_NEEDNETINET6IN6H 1" >>confdefs.h + + isc_netinet6in6_hack="#include " + ;; + *) + isc_netinet6in6_hack="" esac # # This is similar to the netinet6/in6.h issue. # case "$host" in -*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) - # UnixWare - # ISC_PLATFORM_NEEDNETINETIN6H="#define ISC_PLATFORM_NEEDNETINETIN6H 1" - # LWRES_PLATFORM_NEEDNETINETIN6H="#define LWRES_PLATFORM_NEEDNETINETIN6H 1" + *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_FIXIN6ISADDR 1 -_ACEOF +$as_echo "#define ISC_PLATFORM_FIXIN6ISADDR 1" >>confdefs.h - isc_netinetin6_hack="#include " - ;; -*) - # ISC_PLATFORM_NEEDNETINETIN6H="#undef ISC_PLATFORM_NEEDNETINETIN6H" - # LWRES_PLATFORM_NEEDNETINETIN6H="#undef LWRES_PLATFORM_NEEDNETINETIN6H" - # ISC_PLATFORM_FIXIN6ISADDR="#undef ISC_PLATFORM_FIXIN6ISADDR" - isc_netinetin6_hack="" - ;; + isc_netinetin6_hack="#include " + ;; + *) + isc_netinetin6_hack="" esac -echo "$as_me:$LINENO: checking for struct if_laddrconf" >&5 -echo $ECHO_N "checking for struct if_laddrconf... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - struct if_laddrconf a; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_HAVEIF_LADDRCONF -_ACEOF - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -echo "$as_me:$LINENO: checking for struct if_laddrreq" >&5 -echo $ECHO_N "checking for struct if_laddrreq... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#include -#include - -int -main () -{ - struct if_laddrreq a; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_HAVEIF_LADDRREQ -_ACEOF - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - -case "$found_ipv6" in +case "$ac_cv_isc_found_ipv6" in yes) -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_HAVEIPV6 -_ACEOF +$as_echo "#define ISC_PLATFORM_HAVEIPV6 /**/" >>confdefs.h - echo "$as_me:$LINENO: checking for struct sockaddr_in6.sin6_scope_id" >&5 -echo $ECHO_N "checking for struct sockaddr_in6.sin6_scope_id... $ECHO_C" >&6 -if test "${ac_cv_member_struct_sockaddr_in6_sin6_scope_id+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for in6_pktinfo" >&5 +$as_echo_n "checking for in6_pktinfo... " >&6; } +if test "${ac_cv_have_in6_pktinfo+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#include -$isc_netinetin6_hack -$isc_netinet6in6_hack + #include + #include + #include + $isc_netinetin6_hack + $isc_netinet6in6_hack int main () { -static struct sockaddr_in6 ac_aggr; -if (ac_aggr.sin6_scope_id) -return 0; + + struct in6_pktinfo xyzzy; + + ; return 0; } + _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_member_struct_sockaddr_in6_sin6_scope_id=yes +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_have_in6_pktinfo=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_have_in6_pktinfo=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#include -#include -#include -$isc_netinetin6_hack -$isc_netinet6in6_hack - - -int -main () -{ -static struct sockaddr_in6 ac_aggr; -if (sizeof ac_aggr.sin6_scope_id) -return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_member_struct_sockaddr_in6_sin6_scope_id=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_member_struct_sockaddr_in6_sin6_scope_id=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_member_struct_sockaddr_in6_sin6_scope_id" >&5 -echo "${ECHO_T}$ac_cv_member_struct_sockaddr_in6_sin6_scope_id" >&6 -if test $ac_cv_member_struct_sockaddr_in6_sin6_scope_id = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID 1 -_ACEOF +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_in6_pktinfo" >&5 +$as_echo "$ac_cv_have_in6_pktinfo" >&6; } + case "$ac_cv_have_in6_pktinfo" in + yes) - echo "$as_me:$LINENO: checking for in6_pktinfo" >&5 -echo $ECHO_N "checking for in6_pktinfo... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ +$as_echo "#define ISC_PLATFORM_HAVEIN6PKTINFO /**/" >>confdefs.h -#include -#include -#include -$isc_netinetin6_hack -$isc_netinet6in6_hack + esac -int -main () -{ -struct in6_pktinfo xyzzy; return (0); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_HAVEIN6PKTINFO -_ACEOF - -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -echo "$as_me:$LINENO: result: no -- disabling runtime ipv6 support" >&5 -echo "${ECHO_T}no -- disabling runtime ipv6 support" >&6 -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext # HMS: Use HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID instead? - echo "$as_me:$LINENO: checking for sin6_scope_id in struct sockaddr_in6" >&5 -echo $ECHO_N "checking for sin6_scope_id in struct sockaddr_in6... $ECHO_C" >&6 - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sockaddr_in6.sin6_scope_id" >&5 +$as_echo_n "checking for sockaddr_in6.sin6_scope_id... " >&6; } +if test "${ac_cv_have_sin6_scope_id+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#include -$isc_netinetin6_hack -$isc_netinet6in6_hack + + #include + #include + #include + $isc_netinetin6_hack + $isc_netinet6in6_hack int main () { -struct sockaddr_in6 xyzzy; xyzzy.sin6_scope_id = 0; return (0); + + struct sockaddr_in6 xyzzy; + xyzzy.sin6_scope_id = 0; + + ; return 0; } -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_HAVESCOPEID _ACEOF - +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_have_sin6_scope_id=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_have_sin6_scope_id=no -result="#define LWRES_HAVE_SIN6_SCOPE_ID 1" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - LWRES_HAVE_SIN6_SCOPE_ID="$result" +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ;; + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_sin6_scope_id" >&5 +$as_echo "$ac_cv_have_sin6_scope_id" >&6; } + + case "$ac_cv_have_sin6_scope_id" in + yes) + +$as_echo "#define ISC_PLATFORM_HAVESCOPEID /**/" >>confdefs.h + + esac esac -# We need this check run all the time... -echo "$as_me:$LINENO: checking for in6addr_any" >&5 -echo $ECHO_N "checking for in6addr_any... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + +# We need this check run even without ac_cv_isc_found_ipv6=yes + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for in6addr_any" >&5 +$as_echo_n "checking for in6addr_any... " >&6; } +if test "${ac_cv_have_in6addr_any+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#include -$isc_netinetin6_hack -$isc_netinet6in6_hack -$isc_in_addr6_hack + + #include + #include + #include + $isc_netinetin6_hack + $isc_netinet6in6_hack int main () { -struct in6_addr in6; in6 = in6addr_any; return (in6.s6_addr[0]); + + struct in6_addr in6; + in6 = in6addr_any; + + ; return 0; } + _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_have_in6addr_any=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + ac_cv_have_in6addr_any=no -echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - -cat >>confdefs.h <<\_ACEOF -#define ISC_PLATFORM_NEEDIN6ADDRANY -_ACEOF +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_in6addr_any" >&5 +$as_echo "$ac_cv_have_in6addr_any" >&6; } + +case "$ac_cv_have_in6addr_any" in + no) + +$as_echo "#define ISC_PLATFORM_NEEDIN6ADDRANY /**/" >>confdefs.h + +esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct if_laddrconf" >&5 +$as_echo_n "checking for struct if_laddrconf... " >&6; } +if test "${ac_cv_isc_struct_if_laddrconf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + #include + +int +main () +{ + + struct if_laddrconf a; + + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_isc_struct_if_laddrconf=yes +else + ac_cv_isc_struct_if_laddrconf=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_isc_struct_if_laddrconf" >&5 +$as_echo "$ac_cv_isc_struct_if_laddrconf" >&6; } + +case "$ac_cv_isc_struct_if_laddrconf" in + yes) + +$as_echo "#define ISC_PLATFORM_HAVEIF_LADDRCONF /**/" >>confdefs.h + +esac + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct if_laddrreq" >&5 +$as_echo_n "checking for struct if_laddrreq... " >&6; } +if test "${ac_cv_isc_struct_if_laddrreq+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + + #include + #include + +int +main () +{ + + struct if_laddrreq a; + + + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_isc_struct_if_laddrreq=yes +else + ac_cv_isc_struct_if_laddrreq=no + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_isc_struct_if_laddrreq" >&5 +$as_echo "$ac_cv_isc_struct_if_laddrreq" >&6; } + +case "$ac_cv_isc_struct_if_laddrreq" in + yes) + +$as_echo "#define ISC_PLATFORM_HAVEIF_LADDRREQ /**/" >>confdefs.h + +esac # # Look for a sysctl call to get the list of network interfaces. # -echo "$as_me:$LINENO: checking for interface list sysctl" >&5 -echo $ECHO_N "checking for interface list sysctl... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for interface list sysctl" >&5 +$as_echo_n "checking for interface list sysctl... " >&6; } +if test "${ac_cv_iflist_sysctl+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include -#include -#include -#ifdef NET_RT_IFLIST -found_rt_iflist -#endif + #include + #include + #include + #ifdef NET_RT_IFLIST + found_rt_iflist + #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "found_rt_iflist" >/dev/null 2>&1; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -cat >>confdefs.h <<\_ACEOF -#define HAVE_IFLIST_SYSCTL 1 -_ACEOF - + $EGREP "found_rt_iflist" >/dev/null 2>&1; then : + ac_cv_iflist_sysctl=yes else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + ac_cv_iflist_sysctl=no + fi rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_iflist_sysctl" >&5 +$as_echo "$ac_cv_iflist_sysctl" >&6; } + +case "$ac_cv_iflist_sysctl" in + yes) + +$as_echo "#define HAVE_IFLIST_SYSCTL 1" >>confdefs.h + +esac + + ### @@ -53017,68 +25705,65 @@ _ACEOF - ac_config_files="$ac_config_files Makefile" +ac_config_files="$ac_config_files Makefile" - ac_config_files="$ac_config_files ElectricFence/Makefile" +ac_config_files="$ac_config_files ElectricFence/Makefile" - ac_config_files="$ac_config_files adjtimed/Makefile" +ac_config_files="$ac_config_files adjtimed/Makefile" - ac_config_files="$ac_config_files clockstuff/Makefile" +ac_config_files="$ac_config_files clockstuff/Makefile" - ac_config_files="$ac_config_files include/Makefile" +ac_config_files="$ac_config_files include/Makefile" - ac_config_files="$ac_config_files include/isc/Makefile" +ac_config_files="$ac_config_files include/isc/Makefile" - ac_config_files="$ac_config_files kernel/Makefile" +ac_config_files="$ac_config_files kernel/Makefile" - ac_config_files="$ac_config_files kernel/sys/Makefile" +ac_config_files="$ac_config_files kernel/sys/Makefile" - ac_config_files="$ac_config_files libntp/Makefile" +ac_config_files="$ac_config_files libntp/Makefile" - ac_config_files="$ac_config_files libparse/Makefile" +ac_config_files="$ac_config_files libparse/Makefile" - ac_config_files="$ac_config_files ntpd/Makefile" +ac_config_files="$ac_config_files ntpd/Makefile" - ac_config_files="$ac_config_files ntpdate/Makefile" +ac_config_files="$ac_config_files ntpdate/Makefile" - ac_config_files="$ac_config_files ntpdc/Makefile" +ac_config_files="$ac_config_files ntpdc/Makefile" - ac_config_files="$ac_config_files ntpdc/nl.pl" +ac_config_files="$ac_config_files ntpdc/nl.pl" - ac_config_files="$ac_config_files ntpq/Makefile" +ac_config_files="$ac_config_files ntpq/Makefile" - ac_config_files="$ac_config_files parseutil/Makefile" +ac_config_files="$ac_config_files parseutil/Makefile" - ac_config_files="$ac_config_files scripts/Makefile" +ac_config_files="$ac_config_files scripts/Makefile" - ac_config_files="$ac_config_files scripts/calc_tickadj" +ac_config_files="$ac_config_files scripts/calc_tickadj" - ac_config_files="$ac_config_files scripts/checktime" +ac_config_files="$ac_config_files scripts/checktime" - ac_config_files="$ac_config_files scripts/freq_adj" +ac_config_files="$ac_config_files scripts/freq_adj" - ac_config_files="$ac_config_files scripts/html2man" +ac_config_files="$ac_config_files scripts/html2man" - ac_config_files="$ac_config_files scripts/mkver" +ac_config_files="$ac_config_files scripts/mkver" - ac_config_files="$ac_config_files scripts/ntp-wait" +ac_config_files="$ac_config_files scripts/ntp-wait" - ac_config_files="$ac_config_files scripts/ntpsweep" +ac_config_files="$ac_config_files scripts/ntpsweep" - ac_config_files="$ac_config_files scripts/ntptrace" +ac_config_files="$ac_config_files scripts/ntptrace" - ac_config_files="$ac_config_files scripts/ntpver" +ac_config_files="$ac_config_files scripts/ntpver" - ac_config_files="$ac_config_files scripts/plot_summary" +ac_config_files="$ac_config_files scripts/plot_summary" - ac_config_files="$ac_config_files scripts/summary" +ac_config_files="$ac_config_files scripts/summary" - ac_config_files="$ac_config_files util/Makefile" +ac_config_files="$ac_config_files util/Makefile" - -ac_subdirs_all="$ac_subdirs_all sntp" - subdirs="$subdirs sntp" @@ -53100,39 +25785,59 @@ _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. +# So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -{ +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *]) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; + ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} | + esac | + sort +) | sed ' + /^ac_cv_env_/b end t clear - : clear + :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end - /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - : end' >>confcache -if diff $cache_file confcache >/dev/null 2>&1; then :; else - if test -w $cache_file; then - test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - echo "not updating unwritable cache $cache_file" + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -53141,87 +25846,62 @@ test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; -}' -fi - DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. - ac_i=`echo "$ac_i" | - sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Add them. - ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${INSTALL_LIBOPTS_TRUE}" && test -z "${INSTALL_LIBOPTS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"INSTALL_LIBOPTS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"INSTALL_LIBOPTS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${NEED_LIBOPTS_TRUE}" && test -z "${NEED_LIBOPTS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"NEED_LIBOPTS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"NEED_LIBOPTS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= fi +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${INSTALL_LIBOPTS_TRUE}" && test -z "${INSTALL_LIBOPTS_FALSE}"; then + as_fn_error "conditional \"INSTALL_LIBOPTS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${NEED_LIBOPTS_TRUE}" && test -z "${NEED_LIBOPTS_FALSE}"; then + as_fn_error "conditional \"NEED_LIBOPTS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + + : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -53231,81 +25911,252 @@ cat >$CONFIG_STATUS <<_ACEOF debug=false ac_cs_recheck=false ac_cs_silent=false + SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset + setopt NO_GLOB_SUBST else - as_unset=false + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` - -# PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' @@ -53313,148 +26164,123 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln else as_ln_s='cp -p' fi -rm -f conf$$ conf$$.exe conf$$.file +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -53463,31 +26289,20 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -# Open the log real soon, to keep \$[0] and so on meaningful, and to +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - -This file was extended by ntp $as_me 4.2.4p5, which was -generated by GNU Autoconf 2.59. Invocation command line was +# values after options handling. +ac_log=" +This file was extended by ntp $as_me 4.2.4p8, which was +generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -53495,45 +26310,47 @@ generated by GNU Autoconf 2.59. Invocation command line was CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + _ACEOF +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS -fi - -cat >>$CONFIG_STATUS <<\_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE Configuration files: $config_files @@ -53544,84 +26361,86 @@ $config_headers Configuration commands: $config_commands -Report bugs to ." +Report bugs to the package provider." + _ACEOF - -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -ntp config.status 4.2.4p5 -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" +ntp config.status 4.2.4p8 +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; - -*) + *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_option=$1 - ac_need_defaults=false;; esac case $ac_option in # Handling of the options. -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:$LINENO: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; } ;; + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" ;; + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; esac shift @@ -53635,68 +26454,80 @@ if $ac_cs_silent; then fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" fi _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 -cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # -# INIT-COMMANDS section. +# INIT-COMMANDS # - AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF +# Handling of arguments. for ac_config_target in $ac_config_targets do - case "$ac_config_target" in - # Handling of arguments. - "libopts/Makefile" ) CONFIG_FILES="$CONFIG_FILES libopts/Makefile" ;; - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "ElectricFence/Makefile" ) CONFIG_FILES="$CONFIG_FILES ElectricFence/Makefile" ;; - "adjtimed/Makefile" ) CONFIG_FILES="$CONFIG_FILES adjtimed/Makefile" ;; - "clockstuff/Makefile" ) CONFIG_FILES="$CONFIG_FILES clockstuff/Makefile" ;; - "include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; - "include/isc/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/isc/Makefile" ;; - "kernel/Makefile" ) CONFIG_FILES="$CONFIG_FILES kernel/Makefile" ;; - "kernel/sys/Makefile" ) CONFIG_FILES="$CONFIG_FILES kernel/sys/Makefile" ;; - "libntp/Makefile" ) CONFIG_FILES="$CONFIG_FILES libntp/Makefile" ;; - "libparse/Makefile" ) CONFIG_FILES="$CONFIG_FILES libparse/Makefile" ;; - "ntpd/Makefile" ) CONFIG_FILES="$CONFIG_FILES ntpd/Makefile" ;; - "ntpdate/Makefile" ) CONFIG_FILES="$CONFIG_FILES ntpdate/Makefile" ;; - "ntpdc/Makefile" ) CONFIG_FILES="$CONFIG_FILES ntpdc/Makefile" ;; - "ntpdc/nl.pl" ) CONFIG_FILES="$CONFIG_FILES ntpdc/nl.pl" ;; - "ntpq/Makefile" ) CONFIG_FILES="$CONFIG_FILES ntpq/Makefile" ;; - "parseutil/Makefile" ) CONFIG_FILES="$CONFIG_FILES parseutil/Makefile" ;; - "scripts/Makefile" ) CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; - "scripts/calc_tickadj" ) CONFIG_FILES="$CONFIG_FILES scripts/calc_tickadj" ;; - "scripts/checktime" ) CONFIG_FILES="$CONFIG_FILES scripts/checktime" ;; - "scripts/freq_adj" ) CONFIG_FILES="$CONFIG_FILES scripts/freq_adj" ;; - "scripts/html2man" ) CONFIG_FILES="$CONFIG_FILES scripts/html2man" ;; - "scripts/mkver" ) CONFIG_FILES="$CONFIG_FILES scripts/mkver" ;; - "scripts/ntp-wait" ) CONFIG_FILES="$CONFIG_FILES scripts/ntp-wait" ;; - "scripts/ntpsweep" ) CONFIG_FILES="$CONFIG_FILES scripts/ntpsweep" ;; - "scripts/ntptrace" ) CONFIG_FILES="$CONFIG_FILES scripts/ntptrace" ;; - "scripts/ntpver" ) CONFIG_FILES="$CONFIG_FILES scripts/ntpver" ;; - "scripts/plot_summary" ) CONFIG_FILES="$CONFIG_FILES scripts/plot_summary" ;; - "scripts/summary" ) CONFIG_FILES="$CONFIG_FILES scripts/summary" ;; - "util/Makefile" ) CONFIG_FILES="$CONFIG_FILES util/Makefile" ;; - "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libopts/Makefile") CONFIG_FILES="$CONFIG_FILES libopts/Makefile" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "ElectricFence/Makefile") CONFIG_FILES="$CONFIG_FILES ElectricFence/Makefile" ;; + "adjtimed/Makefile") CONFIG_FILES="$CONFIG_FILES adjtimed/Makefile" ;; + "clockstuff/Makefile") CONFIG_FILES="$CONFIG_FILES clockstuff/Makefile" ;; + "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; + "include/isc/Makefile") CONFIG_FILES="$CONFIG_FILES include/isc/Makefile" ;; + "kernel/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/Makefile" ;; + "kernel/sys/Makefile") CONFIG_FILES="$CONFIG_FILES kernel/sys/Makefile" ;; + "libntp/Makefile") CONFIG_FILES="$CONFIG_FILES libntp/Makefile" ;; + "libparse/Makefile") CONFIG_FILES="$CONFIG_FILES libparse/Makefile" ;; + "ntpd/Makefile") CONFIG_FILES="$CONFIG_FILES ntpd/Makefile" ;; + "ntpdate/Makefile") CONFIG_FILES="$CONFIG_FILES ntpdate/Makefile" ;; + "ntpdc/Makefile") CONFIG_FILES="$CONFIG_FILES ntpdc/Makefile" ;; + "ntpdc/nl.pl") CONFIG_FILES="$CONFIG_FILES ntpdc/nl.pl" ;; + "ntpq/Makefile") CONFIG_FILES="$CONFIG_FILES ntpq/Makefile" ;; + "parseutil/Makefile") CONFIG_FILES="$CONFIG_FILES parseutil/Makefile" ;; + "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; + "scripts/calc_tickadj") CONFIG_FILES="$CONFIG_FILES scripts/calc_tickadj" ;; + "scripts/checktime") CONFIG_FILES="$CONFIG_FILES scripts/checktime" ;; + "scripts/freq_adj") CONFIG_FILES="$CONFIG_FILES scripts/freq_adj" ;; + "scripts/html2man") CONFIG_FILES="$CONFIG_FILES scripts/html2man" ;; + "scripts/mkver") CONFIG_FILES="$CONFIG_FILES scripts/mkver" ;; + "scripts/ntp-wait") CONFIG_FILES="$CONFIG_FILES scripts/ntp-wait" ;; + "scripts/ntpsweep") CONFIG_FILES="$CONFIG_FILES scripts/ntpsweep" ;; + "scripts/ntptrace") CONFIG_FILES="$CONFIG_FILES scripts/ntptrace" ;; + "scripts/ntpver") CONFIG_FILES="$CONFIG_FILES scripts/ntpver" ;; + "scripts/plot_summary") CONFIG_FILES="$CONFIG_FILES scripts/plot_summary" ;; + "scripts/summary") CONFIG_FILES="$CONFIG_FILES scripts/summary" ;; + "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done + # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely @@ -53708,887 +26539,692 @@ if $ac_need_defaults; then fi # Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason to put it here, and in addition, +# simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. -# Create a temporary directory, and hook for its removal unless debugging. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. $debug || { - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 } - # Create a (secure) tmp directory for tmp files. { - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + { - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi -# -# CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@CYGPATH_W@,$CYGPATH_W,;t t -s,@PACKAGE@,$PACKAGE,;t t -s,@VERSION@,$VERSION,;t t -s,@ACLOCAL@,$ACLOCAL,;t t -s,@AUTOCONF@,$AUTOCONF,;t t -s,@AUTOMAKE@,$AUTOMAKE,;t t -s,@AUTOHEADER@,$AUTOHEADER,;t t -s,@MAKEINFO@,$MAKEINFO,;t t -s,@install_sh@,$install_sh,;t t -s,@STRIP@,$STRIP,;t t -s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t -s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t -s,@mkdir_p@,$mkdir_p,;t t -s,@AWK@,$AWK,;t t -s,@SET_MAKE@,$SET_MAKE,;t t -s,@am__leading_dot@,$am__leading_dot,;t t -s,@AMTAR@,$AMTAR,;t t -s,@am__tar@,$am__tar,;t t -s,@am__untar@,$am__untar,;t t -s,@build@,$build,;t t -s,@build_cpu@,$build_cpu,;t t -s,@build_vendor@,$build_vendor,;t t -s,@build_os@,$build_os,;t t -s,@host@,$host,;t t -s,@host_cpu@,$host_cpu,;t t -s,@host_vendor@,$host_vendor,;t t -s,@host_os@,$host_os,;t t -s,@CC@,$CC,;t t -s,@CFLAGS@,$CFLAGS,;t t -s,@LDFLAGS@,$LDFLAGS,;t t -s,@CPPFLAGS@,$CPPFLAGS,;t t -s,@ac_ct_CC@,$ac_ct_CC,;t t -s,@EXEEXT@,$EXEEXT,;t t -s,@OBJEXT@,$OBJEXT,;t t -s,@DEPDIR@,$DEPDIR,;t t -s,@am__include@,$am__include,;t t -s,@am__quote@,$am__quote,;t t -s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t -s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t -s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t -s,@CCDEPMODE@,$CCDEPMODE,;t t -s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t -s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t -s,@CPP@,$CPP,;t t -s,@EGREP@,$EGREP,;t t -s,@LIBOPTS_DIR@,$LIBOPTS_DIR,;t t -s,@INSTALL_LIBOPTS_TRUE@,$INSTALL_LIBOPTS_TRUE,;t t -s,@INSTALL_LIBOPTS_FALSE@,$INSTALL_LIBOPTS_FALSE,;t t -s,@NEED_LIBOPTS_TRUE@,$NEED_LIBOPTS_TRUE,;t t -s,@NEED_LIBOPTS_FALSE@,$NEED_LIBOPTS_FALSE,;t t -s,@LIBOPTS_LDADD@,$LIBOPTS_LDADD,;t t -s,@LIBOPTS_CFLAGS@,$LIBOPTS_CFLAGS,;t t -s,@BINSUBDIR@,$BINSUBDIR,;t t -s,@subdirs@,$subdirs,;t t -s,@ARLIB_DIR@,$ARLIB_DIR,;t t -s,@LN_S@,$LN_S,;t t -s,@ECHO@,$ECHO,;t t -s,@AR@,$AR,;t t -s,@ac_ct_AR@,$ac_ct_AR,;t t -s,@RANLIB@,$RANLIB,;t t -s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t -s,@CXX@,$CXX,;t t -s,@CXXFLAGS@,$CXXFLAGS,;t t -s,@ac_ct_CXX@,$ac_ct_CXX,;t t -s,@CXXDEPMODE@,$CXXDEPMODE,;t t -s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t -s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t -s,@CXXCPP@,$CXXCPP,;t t -s,@F77@,$F77,;t t -s,@FFLAGS@,$FFLAGS,;t t -s,@ac_ct_F77@,$ac_ct_F77,;t t -s,@LIBTOOL@,$LIBTOOL,;t t -s,@PATH_SH@,$PATH_SH,;t t -s,@PATH_PERL@,$PATH_PERL,;t t -s,@READLINE_LIBS@,$READLINE_LIBS,;t t -s,@U@,$U,;t t -s,@ANSI2KNR@,$ANSI2KNR,;t t -s,@LIBPARSE@,$LIBPARSE,;t t -s,@MAKE_LIBPARSE@,$MAKE_LIBPARSE,;t t -s,@MAKE_LIBPARSE_KERNEL@,$MAKE_LIBPARSE_KERNEL,;t t -s,@MAKE_CHECK_Y2K@,$MAKE_CHECK_Y2K,;t t -s,@OPENSSL@,$OPENSSL,;t t -s,@OPENSSL_INC@,$OPENSSL_INC,;t t -s,@OPENSSL_LIB@,$OPENSSL_LIB,;t t -s,@LCRYPTO@,$LCRYPTO,;t t -s,@EF_PROGS@,$EF_PROGS,;t t -s,@EF_LIBS@,$EF_LIBS,;t t -s,@MAKE_CHECK_LAYOUT@,$MAKE_CHECK_LAYOUT,;t t -s,@TESTDCF@,$TESTDCF,;t t -s,@DCFD@,$DCFD,;t t -s,@MAKE_PARSEKMODULE@,$MAKE_PARSEKMODULE,;t t -s,@PROPDELAY@,$PROPDELAY,;t t -s,@CHUTEST@,$CHUTEST,;t t -s,@CLKTEST@,$CLKTEST,;t t -s,@MAKE_ADJTIMED@,$MAKE_ADJTIMED,;t t -s,@MAKE_NTPTIME@,$MAKE_NTPTIME,;t t -s,@MAKE_TICKADJ@,$MAKE_TICKADJ,;t t -s,@MAKE_TIMETRIM@,$MAKE_TIMETRIM,;t t -s,@MAKE_LIBNTPSIM@,$MAKE_LIBNTPSIM,;t t -s,@MAKE_NTPDSIM@,$MAKE_NTPDSIM,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -CEOF - -_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat - fi +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; esac - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || + ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # We are building in place. ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac + case $ac_mode in + :F) + # + # CONFIG_FILE + # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;t t -s,@srcdir@,$ac_srcdir,;t t -s,@abs_srcdir@,$ac_abs_srcdir,;t t -s,@top_srcdir@,$ac_top_srcdir,;t t -s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t -s,@builddir@,$ac_builddir,;t t -s,@abs_builddir@,$ac_abs_builddir,;t t -s,@top_builddir@,$ac_top_builddir,;t t -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file - else - cat $tmp/out - rm -f $tmp/out - fi +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 - # Run the commands associated with the file. +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" case $ac_file in - ntpdc/nl.pl ) chmod +x ntpdc/nl.pl ;; - scripts/calc_tickadj ) chmod +x scripts/calc_tickadj ;; - scripts/checktime ) chmod +x scripts/checktime ;; - scripts/freq_adj ) chmod +x scripts/freq_adj ;; - scripts/html2man ) chmod +x scripts/html2man ;; - scripts/mkver ) chmod +x scripts/mkver ;; - scripts/ntp-wait ) chmod +x scripts/ntp-wait ;; - scripts/ntpsweep ) chmod +x scripts/ntpsweep ;; - scripts/ntptrace ) chmod +x scripts/ntptrace ;; - scripts/ntpver ) chmod +x scripts/ntpver ;; - scripts/plot_summary ) chmod +x scripts/plot_summary ;; - scripts/summary ) chmod +x scripts/summary ;; - esac -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF - -# -# CONFIG_HEADER section. -# - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='[ ].*$,\1#\2' -ac_dC=' ' -ac_dD=',;t' -# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='$,\1#\2define\3' -ac_uC=' ' -ac_uD=',;t' - -for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - # Do quote $f, to prevent DOS paths from being IFS'd. - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } - # Remove the trailing spaces. - sed 's/[ ]*$//' $ac_file_inputs >$tmp/in - -_ACEOF - -# Transform confdefs.h into two sed scripts, `conftest.defines' and -# `conftest.undefs', that substitutes the proper values into -# config.h.in to produce config.h. The first handles `#define' -# templates, and the second `#undef' templates. -# And first: Protect against being on the right side of a sed subst in -# config.status. Protect against being in an unquoted here document -# in config.status. -rm -f conftest.defines conftest.undefs -# Using a here document instead of a string reduces the quoting nightmare. -# Putting comments in sed scripts is not portable. -# -# `end' is used to avoid that the second main sed command (meant for -# 0-ary CPP macros) applies to n-ary macro definitions. -# See the Autoconf documentation for `clear'. -cat >confdef2sed.sed <<\_ACEOF -s/[\\&,]/\\&/g -s,[\\$`],\\&,g -t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp -t end -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp -: end -_ACEOF -# If some macros were called several times there might be several times -# the same #defines, which is useless. Nevertheless, we may not want to -# sort them, since we want the *last* AC-DEFINE to be honored. -uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines -sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs -rm -f confdef2sed.sed - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >>conftest.undefs <<\_ACEOF -s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, -_ACEOF - -# Break up conftest.defines because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS -echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS -echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS -echo ' :' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.defines >/dev/null -do - # Write a limited-size here document to $tmp/defines.sed. - echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#define' lines. - echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/defines.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines -echo ' fi # grep' >>$CONFIG_STATUS -echo >>$CONFIG_STATUS - -# Break up conftest.undefs because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #undef templates' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.undefs >/dev/null -do - # Write a limited-size here document to $tmp/undefs.sed. - echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#undef' - echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/undefs.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail - rm -f conftest.undefs - mv conftest.tail conftest.undefs -done -rm -f conftest.undefs - -cat >>$CONFIG_STATUS <<\_ACEOF - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - echo "/* Generated by configure. */" >$tmp/config.h - else - echo "/* $ac_file. Generated by configure. */" >$tmp/config.h - fi - cat $tmp/in >>$tmp/config.h - rm -f $tmp/in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # if test x"$ac_file" != x-; then - if diff $ac_file $tmp/config.h >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - rm -f $ac_file - mv $tmp/config.h $ac_file + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else - cat $tmp/config.h - rm -f $tmp/config.h + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 fi -# Compute $ac_file's index in $config_headers. +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $ac_file | $ac_file:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || -$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ - X$ac_file : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X$ac_file | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'`/stamp-h$_am_stamp_count -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; -# -# CONFIG_COMMANDS section. -# -for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue - ac_dest=`echo "$ac_file" | sed 's,:.*,,'` - ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_dir=`(dirname "$ac_dest") 2>/dev/null || -$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_dest" : 'X\(//\)[^/]' \| \ - X"$ac_dest" : 'X\(//\)$' \| \ - X"$ac_dest" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_dest" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac - { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 -echo "$as_me: executing $ac_dest commands" >&6;} - case $ac_dest in - depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`(dirname "$mf") 2>/dev/null || + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`(dirname "$file") 2>/dev/null || + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p $dirpart/$fdir - else - as_dir=$dirpart/$fdir - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 -echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} - { (exit 1); exit 1; }; }; } - - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" done -done +} ;; + "ntpdc/nl.pl":F) chmod +x ntpdc/nl.pl ;; + "scripts/calc_tickadj":F) chmod +x scripts/calc_tickadj ;; + "scripts/checktime":F) chmod +x scripts/checktime ;; + "scripts/freq_adj":F) chmod +x scripts/freq_adj ;; + "scripts/html2man":F) chmod +x scripts/html2man ;; + "scripts/mkver":F) chmod +x scripts/mkver ;; + "scripts/ntp-wait":F) chmod +x scripts/ntp-wait ;; + "scripts/ntpsweep":F) chmod +x scripts/ntpsweep ;; + "scripts/ntptrace":F) chmod +x scripts/ntptrace ;; + "scripts/ntpver":F) chmod +x scripts/ntpver ;; + "scripts/plot_summary":F) chmod +x scripts/plot_summary ;; + "scripts/summary":F) chmod +x scripts/summary ;; + esac -done -_ACEOF +done # for ac_tag -cat >>$CONFIG_STATUS <<\_ACEOF -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -54608,7 +27244,7 @@ if test "$no_create" != yes; then exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } + $ac_cs_success || as_fn_exit $? fi # @@ -54616,10 +27252,14 @@ fi # if test "$no_recursion" != yes; then - # Remove --cache-file and --srcdir arguments so they do not pile up. + # Remove --cache-file, --srcdir, and --disable-option-checking arguments + # so they do not pile up. ac_sub_configure_args= ac_prev= - for ac_arg in $ac_configure_args; do + eval "set x $ac_configure_args" + shift + for ac_arg + do if test -n "$ac_prev"; then ac_prev= continue @@ -54642,126 +27282,92 @@ if test "$no_recursion" != yes; then ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) ;; - *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; + --disable-option-checking) + ;; + *) + case $ac_arg in + *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_sub_configure_args " '$ac_arg'" ;; esac done # Always prepend --prefix to ensure using the same prefix # in subdir configurations. - ac_sub_configure_args="--prefix=$prefix $ac_sub_configure_args" + ac_arg="--prefix=$prefix" + case $ac_arg in + *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" + + # Pass --silent + if test "$silent" = yes; then + ac_sub_configure_args="--silent $ac_sub_configure_args" + fi + + # Always prepend --disable-option-checking to silence warnings, since + # different subdirs can have different --enable and --with options. + ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" ac_popdir=`pwd` for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue # Do not complain, so a configure script can configure whichever # parts of a large source tree are present. - test -d $srcdir/$ac_dir || continue - - { echo "$as_me:$LINENO: configuring in $ac_dir" >&5 -echo "$as_me: configuring in $ac_dir" >&6;} - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } + test -d "$srcdir/$ac_dir" || continue + ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" + $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 + $as_echo "$ac_msg" >&6 + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # We are building in place. ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - cd $ac_dir + cd "$ac_dir" # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_srcdir/configure.gnu; then - ac_sub_configure="$SHELL '$ac_srcdir/configure.gnu'" - elif test -f $ac_srcdir/configure; then - ac_sub_configure="$SHELL '$ac_srcdir/configure'" - elif test -f $ac_srcdir/configure.in; then - ac_sub_configure=$ac_configure + if test -f "$ac_srcdir/configure.gnu"; then + ac_sub_configure=$ac_srcdir/configure.gnu + elif test -f "$ac_srcdir/configure"; then + ac_sub_configure=$ac_srcdir/configure + elif test -f "$ac_srcdir/configure.in"; then + # This should be Cygnus configure. + ac_sub_configure=$ac_aux_dir/configure else - { echo "$as_me:$LINENO: WARNING: no configuration information is in $ac_dir" >&5 -echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 +$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} ac_sub_configure= fi @@ -54770,21 +27376,23 @@ echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} # Make the cache file name correct relative to the subdirectory. case $cache_file in [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; - *) # Relative path. - ac_sub_cache_file=$ac_top_builddir$cache_file ;; + *) # Relative name. + ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; esac - { echo "$as_me:$LINENO: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 -echo "$as_me: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 +$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} # The eval makes quoting arguments work. - eval $ac_sub_configure $ac_sub_configure_args \ - --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir || - { { echo "$as_me:$LINENO: error: $ac_sub_configure failed for $ac_dir" >&5 -echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;} - { (exit 1); exit 1; }; } + eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ + --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || + as_fn_error "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 fi - cd $ac_popdir + cd "$ac_popdir" done fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi diff --git a/contrib/ntp/configure.ac b/contrib/ntp/configure.ac index 4c6ba13b0bb..49cc9ae8dc4 100644 --- a/contrib/ntp/configure.ac +++ b/contrib/ntp/configure.ac @@ -7,7 +7,7 @@ AC_CANONICAL_HOST dnl the 'build' machine is where we run configure and compile dnl the 'host' machine is where the resulting stuff runs. AC_DEFINE_UNQUOTED(STR_SYSTEM, "$host", [canonical system (cpu-vendor-os) of where we should run]) -AM_CONFIG_HEADER(config.h) +AM_CONFIG_HEADER([config.h]) dnl AC_ARG_PROGRAM AC_PREREQ(2.53) @@ -24,10 +24,15 @@ dnl check these early to avoid autoconf warnings AC_AIX AC_MINIX +# So far, the only shared library we might use is libopts. +# It's a small library - we might as well use a static version of it. +AC_DISABLE_SHARED + dnl we need to check for cross compile tools for vxWorks here AC_PROG_CC # Ralf Wildenhues: With per-target flags we need CC_C_O -AC_PROG_CC_C_O +# AM_PROG_CC_C_O supersets AC_PROG_CC_C_O +AM_PROG_CC_C_O AC_PROG_CC_STDC AC_PROG_CPP @@ -86,18 +91,73 @@ case "${enable_libopts_install+set}" in esac LIBOPTS_CHECK(libopts) -AC_MSG_CHECKING([[if $CC can handle #warning]]) -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[#warning foo]])],[ac_cv_cpp_warning=yes],[ac_cv_cpp_warning=no]) -AC_MSG_RESULT([$ac_cv_cpp_warning]) +AC_CACHE_CHECK( + [if $CC can handle @%:@warning], + ac_cv_cpp_warning, + [ + AC_COMPILE_IFELSE( + AC_LANG_PROGRAM([], [#warning foo]), + [ac_cv_cpp_warning=yes], + [ac_cv_cpp_warning=no], + ) + ] +) case "$ac_cv_cpp_warning" in no) - AC_DEFINE([NO_OPTION_NAME_WARNINGS], [1], [Should we avoid #warning on option name collisions?]) - AC_MSG_RESULT([[Enabling NO_OPTION_NAME_WARNINGS as #warning does not work]]) - ;; + AC_DEFINE([NO_OPTION_NAME_WARNINGS], [1], [Should we avoid @%:@warning on option name collisions?]) esac -AC_MSG_CHECKING(for bin subdirectory) +case "$GCC" in + yes) + SAVED_CFLAGS_AC="$CFLAGS" + CFLAGS="$CFLAGS -Wstrict-overflow" + AC_CACHE_CHECK( + [if $CC can handle -Wstrict-overflow], + ac_cv_gcc_Wstrict_overflow, + [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([], [])], + [ac_cv_gcc_Wstrict_overflow=yes], + [ac_cv_gcc_Wstrict_overflow=no] + ) + ] + ) + CFLAGS="$SAVED_CFLAGS_AC" + unset SAVED_CFLAGS_AC + # + # $ac_cv_gcc_Wstrict_overflow is tested later to add the + # flag to CFLAGS. + # +esac + + +case "$GCC" in + yes) + SAVED_CFLAGS_AC="$CFLAGS" + CFLAGS="$CFLAGS -Winit-self" + AC_CACHE_CHECK( + [if $CC can handle -Winit-self], + ac_cv_gcc_Winit_self, + [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([], [])], + [ac_cv_gcc_Winit_self=yes], + [ac_cv_gcc_Winit_self=no] + ) + ] + ) + CFLAGS="$SAVED_CFLAGS_AC" + unset SAVED_CFLAGS_AC + # + # $ac_cv_gcc_Winit_self is tested later to add the + # flag to CFLAGS. + # +esac + + + +AC_MSG_CHECKING([for bin subdirectory]) AC_ARG_WITH(binsubdir, AC_HELP_STRING([--with-binsubdir], [bin ={bin,sbin}]), use_binsubdir="$withval", use_binsubdir="bin") @@ -115,11 +175,11 @@ AC_MSG_RESULT($use_binsubdir) BINSUBDIR=$use_binsubdir AC_SUBST(BINSUBDIR) -AC_MSG_CHECKING(if we want to use arlib) +AC_MSG_CHECKING([if we want to use arlib]) AC_ARG_WITH(arlib, AC_HELP_STRING([--with-arlib], [- Compile the async resolver library?]), [ans=$withval], [ans=no]) -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) if test -d $srcdir/arlib then @@ -164,43 +224,6 @@ case "$host" in ;; esac -AC_CACHE_CHECK(if we should use /dev/clockctl, ac_clockctl, -[AC_ARG_ENABLE(clockctl, - AC_HELP_STRING([--enable-clockctl], [s Use /dev/clockctl for non-root clock control]), - [ans=$enableval], - [case "$host" in - *-*-netbsd*) - ans=yes - ;; - *) ans=no - ;; - esac - ]) -ac_clockctl=$ans]) -# End of AC_CACHE_CHECK for clockctl -AC_CHECK_HEADERS(sys/clockctl.h) -case "$ac_clockctl$ac_cv_header_sys_clockctl_h" in - yesyes) - AC_DEFINE(HAVE_DROPROOT, ,[Can we drop root privileges?]) - ;; -esac - -AC_CACHE_CHECK(if we have linux capabilities (libcap), ac_linuxcaps, -[AC_ARG_ENABLE(linuxcaps, - AC_HELP_STRING([--enable-linuxcaps], [s Use Linux capabilities for non-root clock control]), - [ans=$enableval], - [ans=no]) -ac_linuxcaps=$ans]) -# End of AC_CACHE_CHECK for linuxcaps -AC_CHECK_HEADERS(sys/capability.h) -AC_CHECK_HEADERS(sys/prctl.h) -case "$ac_linuxcaps$ac_cv_header_sys_capability_h$ac_cv_header_sys_prctl_h" in - yesyesyes) - AC_DEFINE(HAVE_LINUX_CAPABILITIES, ,[Do we have Linux capabilities?]) - AC_DEFINE(HAVE_DROPROOT, ,[Can we drop root privileges?]) - LIBS="$LIBS -lcap" - ;; -esac case "$build" in $host) @@ -236,10 +259,26 @@ case "$GCC" in CFLAGS="$CFLAGS -Wmissing-prototypes" CFLAGS="$CFLAGS -Wpointer-arith" CFLAGS="$CFLAGS -Wshadow" - CFLAGS="$CFLAGS -Wstrict-prototypes" + # + # OpenSSL has a number of callback prototypes + # inside other function prototypes which trigger + # warnings with -Wstrict-prototypes, such as: + # + # int i2d_RSA_NET(const RSA *a, unsigned char **pp, + # int (*cb)(), int sgckey); + # ^^^^^^^^^^^ + # + CFLAGS="$CFLAGS -Wno-strict-prototypes" # CFLAGS="$CFLAGS -Wtraditional" # CFLAGS="$CFLAGS -Wwrite-strings" - + case "$ac_cv_gcc_Winit_self" in + yes) + CFLAGS="$CFLAGS -Winit-self" + esac + case "$ac_cv_gcc_Wstrict_overflow" in + yes) + #not yet: CFLAGS="$CFLAGS -Wstrict-overflow" + esac ;; esac @@ -284,7 +323,7 @@ case "$ac_busted_vpath_in_make$srcdir" in yes.) ;; *) case "`${MAKE-make} -v -f /dev/null 2>/dev/null | sed -e 's/GNU Make version \(1-9.]*\).*/\1/' -e q`" in '') - AC_MSG_ERROR(building outside of the main directory requires GNU make) + AC_MSG_ERROR([building outside of the main directory requires GNU make]) ;; *) ;; esac @@ -294,18 +333,11 @@ esac AC_SUBST(CFLAGS)dnl AC_SUBST(LDFLAGS)dnl -# HMS: From bunnylou/cowbird -case "$host" in - alpha-dec-osf4.0) - AC_DISABLE_SHARED - ;; - *) # So far, the only shared library we might use is libopts. - # It's a small library - we might as well use a static version of it. - AC_DISABLE_SHARED - ;; -esac +m4_defun([_LT_AC_LANG_CXX_CONFIG], [:]) +m4_defun([_LT_AC_LANG_F77_CONFIG], [:]) AC_PROG_LIBTOOL + AC_PROG_LN_S AC_PROG_GCC_TRADITIONAL AC_C_VOLATILE @@ -313,7 +345,7 @@ AC_ISC_POSIX AC_PATH_PROG(PATH_SH, sh) AC_PATH_PROG(PATH_PERL, perl) -hs_ULONG_CONST +hs_ULONG_CONST # remove for 4.2.5 case "$host" in *-*-vxworks*) @@ -329,14 +361,15 @@ case "$host" in ;; esac -AC_CHECK_FUNC(gethostent, , - AC_CHECK_LIB(nsl, gethostent, , , $libxnet -lsocket)) -AC_CHECK_FUNC(openlog, , - AC_CHECK_LIB(gen, openlog, , - AC_CHECK_LIB(syslog, openlog, , , $libxnet -lsocket))) -AC_CHECK_LIB(md5, MD5Init, , - AC_CHECK_LIB(md, MD5Init)) +AC_CHECK_FUNC([gethostent], , + AC_SEARCH_LIBS([gethostent], [nsl], , , [$libxnet -lsocket])) +AC_CHECK_FUNC([openlog], , + AC_SEARCH_LIBS([openlog], [gen], , + AC_SEARCH_LIBS([openlog], [syslog], , , [$libxnet -lsocket]))) +AC_SEARCH_LIBS([MD5Init], [md5 md]) AC_CHECK_FUNCS(MD5Init) + +# following block becomes on 4.2.5: NTP_LINEEDITLIBS dnl HMS: What a hack... AC_CHECK_HEADERS(readline/history.h readline/readline.h) case "$ac_cv_header_readline_history_h$ac_cv_header_readline_readline_h" in @@ -371,7 +404,7 @@ dnl does Strange Things with extra processes using the Posix-compatibility dnl real-time library, so we don't want to use it. case "$host" in - *-*-linux*) ;; + *-*-*linux*) ;; *) AC_CHECK_LIB(rt, sched_setscheduler, , AC_CHECK_LIB(posix4, sched_setscheduler)) @@ -379,8 +412,7 @@ case "$host" in esac AC_CHECK_FUNC(setsockopt, , - [AC_CHECK_LIB(socket, setsockopt) - AC_CHECK_LIB(xnet, setsockopt)]) + [AC_SEARCH_LIBS([setsockopt], [socket xnet])]) AC_HEADER_STDC AC_CHECK_HEADERS(bstring.h) @@ -444,6 +476,37 @@ AC_CHECK_HEADERS(netinet/ip.h, [], [], #include #endif ]) + +# Check for IPTOS_PREC +AC_CACHE_CHECK( + [IPPROTO_IP IP_TOS IPTOS_LOWDELAY], + ac_cv_ip_tos, + [ + AC_EGREP_CPP( + [yes], + [ + #if HAVE_SYS_TYPES_H + #include + #endif + #if HAVE_NETINET_IP_H + #include + #include + #endif + #if defined(IPPROTO_IP) && defined(IP_TOS) && defined(IPTOS_LOWDELAY) + yes + #endif + ], + [ac_cv_ip_tos=yes], + [ac_cv_ip_tos=no] + ) + ] +) + +case "$ac_cv_ip_tos" in + yes) + AC_DEFINE(HAVE_IPTOS_SUPPORT, 1, [Do we have IPTOS support?]) +esac + AC_CHECK_HEADERS(netinfo/ni.h, [AC_DEFINE(HAVE_NETINFO, 1, [NetInfo support?])]) AC_CHECK_HEADERS(sun/audioio.h sys/audioio.h) dnl AC_CHECK_HEADERS(sys/chudefs.h) @@ -509,7 +572,7 @@ case "$host" in esac case "$host" in - *-*-linux*) + *-*-*linux*) AC_CHECK_FUNCS(__adjtimex __ntp_gettime) ;; esac @@ -585,7 +648,7 @@ AC_CHECK_HEADERS(resolv.h, [], [], #endif ]) -AC_CACHE_CHECK(for basic volatile support, ac_cv_c_volatile, +AC_CACHE_CHECK([for basic volatile support], ac_cv_c_volatile, [AC_TRY_COMPILE([],[ volatile int x;], ac_cv_c_volatile=yes, @@ -598,6 +661,9 @@ case "$ac_cv_c_volatile" in ;; esac +# +# following block goes away in 4.2.5 +# # AM_C_PROTOTYPES gives us ansi2knr case "$build" in *-*-solaris2*) @@ -616,6 +682,9 @@ int i;], ac_cv_have_prototypes=yes, ac_cv_have_prototypes=no) if test "$ac_cv_have_prototypes" = yes; then AC_DEFINE(HAVE_PROTOTYPES, 1, [Are function prototypes OK?]) fi +# +# end block +# AC_C_CONST AC_C_BIGENDIAN @@ -658,7 +727,7 @@ fi # # Look for in_port_t. # -AC_MSG_CHECKING(for in_port_t) +AC_MSG_CHECKING([for in_port_t]) AC_TRY_COMPILE([ #include #include ], @@ -669,7 +738,7 @@ AC_TRY_COMPILE([ AC_DEFINE(ISC_PLATFORM_NEEDPORTT, 1, [Do we need our own in_port_t?]) ]) -AC_CACHE_CHECK(for a fallback value for HZ, ac_cv_var_default_hz, +AC_CACHE_CHECK([for a fallback value for HZ], ac_cv_var_default_hz, [ac_cv_var_default_hz=100 case "$host" in alpha*-dec-osf4*|alpha*-dec-osf5*) @@ -681,7 +750,7 @@ case "$host" in esac]) AC_DEFINE_UNQUOTED(DEFAULT_HZ, $ac_cv_var_default_hz, [What is the fallback value for HZ?]) -AC_CACHE_CHECK(if we need to override the system's value for HZ, ac_cv_var_override_hz, +AC_CACHE_CHECK([if we need to override the system's value for HZ], ac_cv_var_override_hz, [ac_cv_var_override_hz=no case "$host" in alpha*-dec-osf4*|alpha*-dec-osf5*) @@ -725,7 +794,7 @@ dnl #endif dnl ], su_cv_have_boot_time=yes, su_cv_have_boot_time=no)]) dnl AC_MSG_RESULT($su_cv_have_boot_time) -AC_CACHE_CHECK(for struct rt_msghdr, ac_cv_struct_rt_msghdr, +AC_CACHE_CHECK([for struct rt_msghdr], ac_cv_struct_rt_msghdr, [AC_TRY_COMPILE([ #include #include @@ -735,12 +804,13 @@ AC_CACHE_CHECK(for struct rt_msghdr, ac_cv_struct_rt_msghdr, ac_cv_struct_rt_msghdr=yes, ac_cv_struct_rt_msghdr=no) ]) + if test $ac_cv_struct_rt_msghdr = yes; then AC_DEFINE(HAS_ROUTING_SOCKET, 1, [Do we have a routing socket (struct rt_msghdr)?]) fi AC_CACHE_CHECK( - struct sigaction for sa_sigaction, + [struct sigaction for sa_sigaction], ac_cv_struct_sigaction_has_sa_sigaction, [ AC_TRY_COMPILE( @@ -755,7 +825,7 @@ if test $ac_cv_struct_sigaction_has_sa_sigaction = yes; then AC_DEFINE(HAVE_SA_SIGACTION_IN_STRUCT_SIGACTION, 1, [Obvious...]) fi -AC_CACHE_CHECK(for struct ppsclockev, ac_cv_struct_ppsclockev, +AC_CACHE_CHECK([for struct ppsclockev], ac_cv_struct_ppsclockev, [AC_TRY_COMPILE([ #include #ifdef HAVE_SYS_TERMIOS_H @@ -776,7 +846,7 @@ if test $ac_cv_struct_ppsclockev = yes; then AC_DEFINE(HAVE_STRUCT_PPSCLOCKEV, 1, [Does a system header define struct ppsclockev?]) fi -AC_CACHE_CHECK(struct sockaddr for sa_len, ac_cv_struct_sockaddr_has_sa_len, +AC_CACHE_CHECK([struct sockaddr for sa_len], ac_cv_struct_sockaddr_has_sa_len, [AC_TRY_COMPILE([ #include #include ],[ @@ -789,7 +859,7 @@ if test $ac_cv_struct_sockaddr_has_sa_len = yes; then AC_DEFINE(HAVE_SA_LEN_IN_STRUCT_SOCKADDR, 1, [Should be obvious...]) fi -AC_CACHE_CHECK(for struct sockaddr_storage, ac_cv_struct_sockaddr_storage, +AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_struct_sockaddr_storage, [AC_TRY_COMPILE([ #include #include @@ -909,7 +979,7 @@ return ss->rec_size;], ;; esac -AC_CACHE_CHECK(struct clockinfo for hz, ac_cv_struct_clockinfo_has_hz, +AC_CACHE_CHECK([struct clockinfo for hz], ac_cv_struct_clockinfo_has_hz, [AC_TRY_COMPILE([ #include ],[ extern struct clockinfo *pc; @@ -921,7 +991,7 @@ if test $ac_cv_struct_clockinfo_has_hz = yes; then AC_DEFINE(HAVE_HZ_IN_STRUCT_CLOCKINFO, 1, [Obvious...]) fi -AC_CACHE_CHECK(struct clockinfo for tickadj, ac_cv_struct_clockinfo_has_tickadj, +AC_CACHE_CHECK([struct clockinfo for tickadj], ac_cv_struct_clockinfo_has_tickadj, [AC_TRY_COMPILE([ #include ],[ extern struct clockinfo *pc; @@ -977,6 +1047,15 @@ AC_CHECK_MEMBERS([struct ntptimeval.time.tv_nsec], , , #endif]) AC_C_INLINE + +case "$ac_cv_c_inline" in + '') + ;; + *) + AC_DEFINE(HAVE_INLINE,1,[inline keyword or macro available]) + AC_SUBST(HAVE_INLINE) +esac + AC_C_CHAR_UNSIGNED dnl CROSS_COMPILE? AC_CHECK_SIZEOF(signed char) AC_CHECK_SIZEOF(int) @@ -1007,7 +1086,7 @@ esac AC_TYPE_UID_T case "$host" in - *-*-aix[[45]]*) + *-*-aix[[456]]*) # (prr) aix 4.1 doesn't have clock_settime, but in aix 4.3 it's a stub # (returning ENOSYS). I didn't check 4.2. If, in the future, # IBM pulls its thumbs out long enough to implement clock_settime, @@ -1020,7 +1099,7 @@ esac AC_CHECK_FUNCS(daemon) AC_CHECK_FUNCS(finite, , [AC_CHECK_FUNCS(isfinite, , - [AC_MSG_CHECKING(for isfinite with ) + [AC_MSG_CHECKING([for isfinite with ]) _libs=$LIBS LIBS="$LIBS -lm" AC_TRY_LINK([#include ], [float f = 0.0; isfinite(f)], @@ -1042,7 +1121,7 @@ yes|glibc) # Do we have getifaddrs() ? # case $host in -*-linux*) +*-*linux*) # Some recent versions of glibc support getifaddrs() which does not # provide AF_INET6 addresses while the function provided by the USAGI # project handles the AF_INET6 case correctly. We need to avoid @@ -1143,13 +1222,13 @@ case "$host" in esac AC_CHECK_FUNCS(mktime) case "$host" in - *-*-aix[[45]]*) + *-*-aix[[456]]*) # Just a stub. Idiots. ;; *-*-irix[[45]]*) # Just a stub in "old" Irix. Idiots. ;; - *-*-linux*) + *-*-*linux*) # there, but more trouble than it is worth for now (resolver problems) ;; *-*-qnx*) @@ -1177,7 +1256,7 @@ case "$host" in esac AC_CHECK_FUNCS(plock pututline pututxline readlink recvmsg rtprio) case "$host" in - *-*-aix[[45]]*) + *-*-aix[[456]]*) # Just a stub in AIX 4. Idiots. ;; *-*-solaris2.5*) @@ -1198,7 +1277,7 @@ AC_CHECK_FUNCS(sigvec sigset sigsuspend stime strchr sysconf sysctl) AC_CHECK_FUNCS(snprintf strdup strerror strstr) AC_CHECK_FUNCS(timegm) case "$host" in - *-*-aix[[45]]*) + *-*-aix[[456]]*) # Just stubs. Idiots. ;; *-*-netbsd1*) @@ -1224,7 +1303,7 @@ AC_CHECK_FUNCS(uname updwtmp updwtmpx vsnprintf vsprintf) ### -# http://bugs.ntp.isc.org/737 +# http://bugs.ntp.org/737 case "$ac_cv_func_recvmsg" in yes) AC_MSG_CHECKING([if we need extra help to define struct iovec]) @@ -1272,7 +1351,7 @@ case "$host" in ;; esac -AC_CACHE_CHECK(number of arguments to gettimeofday(), ac_cv_func_Xettimeofday_nargs, +AC_CACHE_CHECK([number of arguments to gettimeofday()], ac_cv_func_Xettimeofday_nargs, [AC_TRY_COMPILE([#include ],[ gettimeofday((struct timeval*)0,(struct timezone*)0); settimeofday((struct timeval*)0,(struct timezone*)0); @@ -1283,7 +1362,7 @@ if test $ac_cv_func_Xettimeofday_nargs = 1; then AC_DEFINE(SYSV_TIMEOFDAY, 1, [Does Xettimeofday take 1 arg?]) fi -AC_CACHE_CHECK(number of arguments taken by setpgrp(), ac_cv_func_setpgrp_nargs, +AC_CACHE_CHECK([number of arguments taken by setpgrp()], ac_cv_func_setpgrp_nargs, [AC_TRY_COMPILE([ #ifdef HAVE_SYS_TYPES_H # include @@ -1301,7 +1380,7 @@ fi save_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -I$srcdir/include" -AC_CACHE_CHECK(argument pointer type of qsort()'s compare function and base, +AC_CACHE_CHECK([argument pointer type of qsort()'s compare function and base], ac_cv_func_qsort_argtype, [AC_TRY_COMPILE([ #include "l_stdlib.h" @@ -1330,7 +1409,7 @@ esac CFLAGS=$save_CFLAGS -AC_CACHE_CHECK(if we need to declare 'errno', ac_cv_decl_errno, +AC_CACHE_CHECK([if we need to declare 'errno'], ac_cv_decl_errno, [AC_TRY_COMPILE([#ifdef HAVE_ERRNO_H #include #endif], @@ -1348,7 +1427,7 @@ dnl MT purposes. This makes the line "extern int h_errno" choke dnl the compiler. Hopefully adding !defined(h_errno) fixes this dnl without breaking any other platforms. dnl -AC_CACHE_CHECK(if we may declare 'h_errno', ac_cv_decl_h_errno, +AC_CACHE_CHECK([if we may declare 'h_errno'], ac_cv_decl_h_errno, [AC_TRY_COMPILE([#include #ifdef HAVE_NETINET_IN_H #include @@ -1381,7 +1460,7 @@ case "$ac_cv_decl_sys_errlist" in yes) AC_DEFINE(CHAR_SYS_ERRLIST, 1, [Declare char *sys_errlist array]) ;; esac -AC_CACHE_CHECK(if declaring 'syscall()' is ok, ac_cv_decl_syscall, +AC_CACHE_CHECK([if declaring 'syscall()' is ok], ac_cv_decl_syscall, [AC_TRY_COMPILE([ #ifdef HAVE_SYS_TYPES_H # include @@ -1499,7 +1578,7 @@ case "$host" in ;; esac -AC_CACHE_CHECK(if we need extra room for SO_RCVBUF, ac_cv_var_rcvbuf_slop, +AC_CACHE_CHECK([if we need extra room for SO_RCVBUF], ac_cv_var_rcvbuf_slop, [ans=no case "$host" in *-*-hpux[[567]]*) @@ -1511,7 +1590,7 @@ case "$ac_cv_var_rcvbuf_slop" in yes) AC_DEFINE(NEED_RCVBUF_SLOP, 1, [Do we need extra room for SO_RCVBUF? (HPUX <8)]) ;; esac -AC_CACHE_CHECK(if we will open the broadcast socket, ac_cv_var_open_bcast_socket, +AC_CACHE_CHECK([if we will open the broadcast socket], ac_cv_var_open_bcast_socket, [ans=yes case "$host" in *-*-domainos) @@ -1523,7 +1602,7 @@ case "$ac_cv_var_open_bcast_socket" in yes) AC_DEFINE(OPEN_BCAST_SOCKET, 1, [Should we open the broadcast socket?]) ;; esac -AC_CACHE_CHECK(if we want the HPUX version of FindConfig(), ac_cv_var_hpux_findconfig, +AC_CACHE_CHECK([if we want the HPUX version of FindConfig()], ac_cv_var_hpux_findconfig, [ans=no case "$host" in *-*-hpux*) @@ -1535,7 +1614,7 @@ case "$ac_cv_var_hpux_findconfig" in yes) AC_DEFINE(NEED_HPUX_FINDCONFIG, 1, [Do we want the HPUX FindConfig()?]) ;; esac -AC_CACHE_CHECK(if process groups are set with -pid, ac_cv_arg_setpgrp_negpid, +AC_CACHE_CHECK([if process groups are set with -pid], ac_cv_arg_setpgrp_negpid, [case "$host" in *-*-hpux[[567]]*) ans=no @@ -1543,7 +1622,7 @@ AC_CACHE_CHECK(if process groups are set with -pid, ac_cv_arg_setpgrp_negpid, *-*-hpux*) ans=yes ;; - *-*-linux*) + *-*-*linux*) ans=yes ;; *-*-sunos3*) @@ -1561,7 +1640,7 @@ case "$ac_cv_arg_setpgrp_negpid" in yes) AC_DEFINE(UDP_BACKWARDS_SETOWN, 1, [Do we set process groups with -pid?]) ;; esac -AC_CACHE_CHECK(if we need a ctty for F_SETOWN, ac_cv_func_ctty_for_f_setown, +AC_CACHE_CHECK([if we need a ctty for F_SETOWN], ac_cv_func_ctty_for_f_setown, [[case "$host" in *-*-bsdi[23]*) ans=yes @@ -1578,6 +1657,9 @@ AC_CACHE_CHECK(if we need a ctty for F_SETOWN, ac_cv_func_ctty_for_f_setown, *-*-osf*) ans=yes ;; + *-*-darwin*) + ans=yes + ;; *) ans=no ;; esac @@ -1586,7 +1668,7 @@ case "$ac_cv_func_ctty_for_f_setown" in yes) AC_DEFINE(USE_FSETOWNCTTY, 1, [Must we have a CTTY for fsetown?]) ;; esac -AC_CACHE_CHECK(if the OS misses to clear cached routes when more specific routes become available, ac_cv_os_routeupdates, +AC_CACHE_CHECK([if the OS fails to clear cached routes when more specific routes become available], ac_cv_os_routeupdates, [[case "$host" in *-*-netbsd*) ans=yes @@ -1599,9 +1681,9 @@ case "$ac_cv_os_routeupdates" in yes) AC_DEFINE(OS_MISSES_SPECIFIC_ROUTE_UPDATES, 1, [need to recreate sockets on changed routing?]) ;; esac -AC_CACHE_CHECK(if the OS needs the wildcard socket set to REUSEADDR for binding interface addresses, ac_cv_os_wildcardreuse, +AC_CACHE_CHECK([if the OS needs the wildcard socket set to REUSEADDR for binding interface addresses], ac_cv_os_wildcardreuse, [[case "$host" in - *-*-linux*) + *-*-*linux*) ans=yes ;; *) ans=no @@ -1613,7 +1695,7 @@ case "$ac_cv_os_wildcardreuse" in esac ntp_warning='GRONK' -AC_MSG_CHECKING(if we'll use clock_settime or settimeofday or stime) +AC_MSG_CHECKING([if we'll use clock_settime or settimeofday or stime]) case "$ac_cv_func_clock_settime$ac_cv_func_settimeofday$ac_cv_func_stime" in yes*) ntp_warning='' @@ -1634,14 +1716,14 @@ case "$ac_cv_func_clock_settime$ac_cv_func_settimeofday$ac_cv_func_stime" in ;; esac esac -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) case "$ntp_warning" in '') ;; - *) AC_MSG_WARN(*** $ntp_warning ***) + *) AC_MSG_WARN([*** $ntp_warning ***]) ;; esac -AC_CACHE_CHECK(if we have a losing syscall(), ac_cv_var_syscall_bug, +AC_CACHE_CHECK([if we have a losing syscall()], ac_cv_var_syscall_bug, [case "$host" in *-*-solaris2.4*) ans=yes @@ -1654,7 +1736,7 @@ case "$ac_cv_var_syscall_bug" in yes) AC_DEFINE(SYSCALL_BUG, 1, [Buggy syscall() (Solaris2.4)?]) ;; esac -AC_CACHE_CHECK(for SIGIO, ac_cv_hdr_def_sigio, +AC_CACHE_CHECK([for SIGIO], ac_cv_hdr_def_sigio, AC_EGREP_CPP(yes, [#include #ifdef SIGIO @@ -1663,7 +1745,7 @@ AC_CACHE_CHECK(for SIGIO, ac_cv_hdr_def_sigio, ], ac_cv_hdr_def_sigio=yes, ac_cv_hdr_def_sigio=no)) dnl Override those system that have a losing SIGIO -AC_CACHE_CHECK(if we want to use signalled IO, ac_cv_var_signalled_io, +AC_CACHE_CHECK([if we want to use signalled IO], ac_cv_var_signalled_io, [ans=no case "$ac_cv_hdr_def_sigio" in yes) @@ -1693,7 +1775,7 @@ case "$ac_cv_hdr_def_sigio" in *-*-freebsd*) ans=no ;; - *-*-linux*) + *-*-*linux*) ans=no ;; *-*-unicosmp*) @@ -1707,7 +1789,7 @@ case "$ac_cv_var_signalled_io" in yes) AC_DEFINE(HAVE_SIGNALED_IO, 1, [Can we use SIGIO for tcp and udp IO?]) ;; esac -AC_CACHE_CHECK(for SIGPOLL, ac_cv_hdr_def_sigpoll, +AC_CACHE_CHECK([for SIGPOLL], ac_cv_hdr_def_sigpoll, AC_EGREP_CPP(yes, [#include #ifdef SIGPOLL @@ -1715,7 +1797,7 @@ AC_CACHE_CHECK(for SIGPOLL, ac_cv_hdr_def_sigpoll, #endif ], ac_cv_hdr_def_sigpoll=yes, ac_cv_hdr_def_sigpoll=no)) -AC_CACHE_CHECK(for SIGSYS, ac_cv_hdr_def_sigsys, +AC_CACHE_CHECK([for SIGSYS], ac_cv_hdr_def_sigsys, AC_EGREP_CPP(yes, [#include #ifdef SIGSYS @@ -1723,7 +1805,7 @@ AC_CACHE_CHECK(for SIGSYS, ac_cv_hdr_def_sigsys, #endif ], ac_cv_hdr_def_sigsys=yes, ac_cv_hdr_def_sigsys=no)) -AC_CACHE_CHECK(if we can use SIGPOLL for UDP I/O, ac_cv_var_use_udp_sigpoll, +AC_CACHE_CHECK([if we can use SIGPOLL for UDP I/O], ac_cv_var_use_udp_sigpoll, [ans=no case "$ac_cv_hdr_def_sigpoll" in yes) @@ -1740,13 +1822,13 @@ case "$ac_cv_hdr_def_sigpoll" in *-sni-sysv*) ans=no ;; - *-*-aix[[45]]*) + *-*-aix[[456]]*) ans=no ;; *-*-hpux*) ans=no ;; - *-*-linux*) + *-*-*linux*) ans=no ;; *-*-osf*) @@ -1758,6 +1840,9 @@ case "$ac_cv_hdr_def_sigpoll" in *-*-sunos*) ans=no ;; + *-*-solaris*) + ans=no + ;; *-*-ultrix*) ans=no ;; @@ -1774,7 +1859,7 @@ case "$ac_cv_var_use_udp_sigpoll" in yes) AC_DEFINE(USE_UDP_SIGPOLL, 1, [Can we use SIGPOLL for UDP?]) ;; esac -AC_CACHE_CHECK(if we can use SIGPOLL for TTY I/O, ac_cv_var_use_tty_sigpoll, +AC_CACHE_CHECK([if we can use SIGPOLL for TTY I/O], ac_cv_var_use_tty_sigpoll, [ans=no case "$ac_cv_hdr_def_sigpoll" in yes) @@ -1791,13 +1876,13 @@ case "$ac_cv_hdr_def_sigpoll" in *-sni-sysv*) ans=no ;; - *-*-aix[[45]]*) + *-*-aix[[456]]*) ans=no ;; *-*-hpux*) ans=no ;; - *-*-linux*) + *-*-*linux*) ans=no ;; *-*-osf*) @@ -1827,7 +1912,7 @@ esac case "$ac_cv_header_sys_sio_h" in yes) - AC_CACHE_CHECK(sys/sio.h for TIOCDCDTIMESTAMP, ac_cv_hdr_def_tiocdcdtimestamp, + AC_CACHE_CHECK([sys/sio.h for TIOCDCDTIMESTAMP], ac_cv_hdr_def_tiocdcdtimestamp, AC_EGREP_CPP(yes, [#include #ifdef TIOCDCDTIMESTAMP @@ -1843,7 +1928,7 @@ case "$ac_cv_hdr_def_tiocdcdtimestamp" in ;; esac -AC_CACHE_CHECK(if nlist() values might require extra indirection, +AC_CACHE_CHECK([if nlist() values might require extra indirection], ac_cv_var_nlist_extra_indirection, [ans=no case "$host" in @@ -1856,7 +1941,7 @@ case "$ac_cv_var_nlist_extra_indirection" in yes) AC_DEFINE(NLIST_EXTRA_INDIRECTION, 1, [Might nlist() values require an extra level of indirection (AIX)?]) ;; esac -AC_CACHE_CHECK(for a minimum recommended value of tickadj, +AC_CACHE_CHECK([for a minimum recommended value of tickadj], ac_cv_var_min_rec_tickadj, [ans=no case "$host" in @@ -1870,11 +1955,11 @@ case "$ac_cv_var_min_rec_tickadj" in *) AC_DEFINE_UNQUOTED(MIN_REC_TICKADJ, $ac_cv_var_min_rec_tickadj, [Should we recommend a minimum value for tickadj?]) ;; esac -AC_CACHE_CHECK(if the TTY code permits PARENB and IGNPAR, +AC_CACHE_CHECK([if the TTY code permits PARENB and IGNPAR], ac_cv_var_no_parenb_ignpar, [ans=no case "$host" in - i?86-*-linux*) + i?86-*-*linux*) ans=yes ;; mips-sgi-irix*) @@ -1894,7 +1979,7 @@ case "$ac_cv_var_no_parenb_ignpar" in yes) AC_DEFINE(NO_PARENB_IGNPAR, 1, [Is there a problem using PARENB and IGNPAR (IRIX)?]) ;; esac -AC_MSG_CHECKING(if we're including debugging code) +AC_MSG_CHECKING([if we're including debugging code]) AC_ARG_ENABLE(debugging, AC_HELP_STRING([--enable-debugging], [+ include debugging code]), [ntp_ok=$enableval], [ntp_ok=yes]) @@ -1903,7 +1988,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(if we including processing time debugging code) +AC_MSG_CHECKING([if we including processing time debugging code]) AC_ARG_ENABLE(debug-timing, AC_HELP_STRING([--enable-debug-timing], [- include processing time debugging code (costs performance)]), [ntp_ok=$enableval], [ntp_ok=no]) @@ -1912,30 +1997,53 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(for a the number of minutes in a DST adjustment) -AC_ARG_ENABLE(dst_minutes, - AC_HELP_STRING([--enable-dst-minutes=60], [+ minutes per DST adjustment]), - [ans=$enableval], [ans=60]) +AC_MSG_CHECKING([[for a the number of minutes in a DST adjustment]]) +AC_ARG_ENABLE( + [dst_minutes], + AS_HELP_STRING( + [--enable-dst-minutes], + [n minutes per DST adjustment @<:@60@:>@] dnl @<:@ is [ + ), + [ans=$enableval], + [ans=60] +) AC_DEFINE_UNQUOTED(DSTMINUTES, $ans, [The number of minutes in a DST adjustment]) -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) -AC_CACHE_CHECK(if we have the tty_clk line discipline/streams module, +AC_MSG_CHECKING([[if ntpd will retry on permanent DNS errors]]) +AC_ARG_ENABLE( + [ignore-dns-errors], + AS_HELP_STRING( + [--enable-ignore-dns-errors], + [- retry DNS queries on any error] + ), + [ans=$enableval], + [ans=no] +) +case "$ans" in + yes) + AC_DEFINE(IGNORE_DNS_ERRORS, 1, [[Retry queries on _any_ DNS error?]]) +esac +AC_MSG_RESULT([$ans]) + +AC_CACHE_CHECK([if we have the tty_clk line discipline/streams module], ac_cv_var_tty_clk, [case "$ac_cv_header_sys_clkdefs_h$ac_cv_hdr_def_tiocdcdtimestamp" in *yes*) ac_cv_var_tty_clk=yes ;; + *) ac_cv_var_tty_clk=no ;; esac]) case "$ac_cv_var_tty_clk" in yes) AC_DEFINE(TTYCLK, 1, [Do we have the tty_clk line discipline/streams module?]) ;; esac -AC_CACHE_CHECK(for the ppsclock streams module, +AC_CACHE_CHECK([for the ppsclock streams module], ac_cv_var_ppsclock, ac_cv_var_ppsclock=$ac_cv_struct_ppsclockev) case "$ac_cv_var_ppsclock" in yes) AC_DEFINE(PPS, 1, [Do we have the ppsclock streams module?]) ;; esac -AC_CACHE_CHECK(for kernel multicast support, ac_cv_var_mcast, +AC_CACHE_CHECK([for kernel multicast support], ac_cv_var_mcast, [ac_cv_var_mcast=no case "$host" in i386-sequent-sysv4) ;; @@ -1952,7 +2060,7 @@ case "$ac_cv_var_mcast" in AC_CACHE_CHECK([[arg type needed for IP*_MULTICAST_LOOP for setsockopt()]], ac_cv_var_typeof_ip_multicast_loop, [case "$host" in - *-*-netbsd*|*-*-linux*) + *-*-netbsd*|*-*-*linux*) ac_cv_var_typeof_ip_multicast_loop=u_int ;; *-*-winnt*) @@ -2036,6 +2144,7 @@ case "$ac_cv_var_size_returned_in_buffer" in yes) AC_DEFINE(SIZE_RETURNED_IN_BUFFER, 1, [Does SIOCGIFCONF return size in the buffer?]) ;; esac +dnl vvvvv-- this is wrong, if you re-enable the switch do not cache the result dnl AC_CACHE_CHECK(if we want GDT surveying code, ac_cv_var_gdt_surveying, dnl [AC_ARG_ENABLE(gdt-surveying, [ --enable-gdt-surveying - include GDT survey code], dnl [ans=$enableval], [ans=no]) @@ -2081,7 +2190,7 @@ fi AC_MSG_RESULT($ntp_ok) # Check for ioctls CIOGETEV -AC_MSG_CHECKING(ioctl CIOGETEV) +AC_MSG_CHECKING([ioctl CIOGETEV]) if test "$ac_cv_header_sys_ppsclock_h" = "yes"; then AC_EGREP_CPP(yes, [#include @@ -2134,7 +2243,7 @@ esac # Check for ioctls TIOCGSERIAL, TIOCSSERIAL, ASYNC_PPS_CD_POS, ASYNC_PPS_CD_NEG AC_CHECK_HEADER(linux/serial.h) -AC_MSG_CHECKING(ioctl TIOCGSERIAL, TIOCSSERIAL, ASYNC_PPS_CD_POS, ASYNC_PPS_CD_NEG) +AC_MSG_CHECKING([ioctl TIOCGSERIAL, TIOCSSERIAL, ASYNC_PPS_CD_POS, ASYNC_PPS_CD_NEG]) case "$ac_cv_header_sys_ppsclock_h$ac_cv_header_linux_serial_h" in yesyes) AC_EGREP_CPP(yes, @@ -2167,7 +2276,7 @@ fi AC_MSG_RESULT($ntp_ok) # Check for SHMEM_STATUS support -AC_MSG_CHECKING(SHMEM_STATUS support) +AC_MSG_CHECKING([SHMEM_STATUS support]) case "$ac_cv_header_sys_mman_h" in yes) ntp_ok=yes ;; *) ntp_ok=no ;; @@ -2193,7 +2302,7 @@ dnl AC_SUBST(UNIXCERT) ntp_refclock=no # HPUX only, and by explicit request -AC_MSG_CHECKING(Datum/Bancomm bc635/VME interface) +AC_MSG_CHECKING([Datum/Bancomm bc635/VME interface]) AC_ARG_ENABLE(BANCOMM, AC_HELP_STRING([--enable-BANCOMM], [- Datum/Bancomm bc635/VME interface]), [ntp_ok=$enableval], [ntp_ok=no]) @@ -2204,11 +2313,11 @@ fi AC_MSG_RESULT($ntp_ok) case "$ntp_ok$host" in yes*-*-hpux*) ;; - yes*) AC_MSG_WARN(*** But the expected answer is... no ***) ;; + yes*) AC_MSG_WARN([*** But the expected answer is... no ***]) ;; esac #HPUX only, and only by explicit request -AC_MSG_CHECKING(TrueTime GPS receiver/VME interface) +AC_MSG_CHECKING([TrueTime GPS receiver/VME interface]) AC_ARG_ENABLE(GPSVME, AC_HELP_STRING([--enable-GPSVME], [- TrueTime GPS receiver/VME interface]), [ntp_ok=$enableval], [ntp_ok=no]) @@ -2219,10 +2328,10 @@ fi AC_MSG_RESULT($ntp_ok) case "$ntp_ok$host" in yes*-*-hpux*) ;; - yes*) AC_MSG_WARN(*** But the expected answer is... no ***) ;; + yes*) AC_MSG_WARN([*** But the expected answer is... no ***]) ;; esac -AC_MSG_CHECKING(for PCL720 clock support) +AC_MSG_CHECKING([for PCL720 clock support]) case "$ac_cv_header_machine_inline_h$ac_cv_header_sys_pcl720_h$ac_cv_header_sys_i8253_h" in yesyesyes) AC_DEFINE(CLOCK_PPS720, 1, [PCL 720 clock support]) @@ -2232,16 +2341,16 @@ case "$ac_cv_header_machine_inline_h$ac_cv_header_sys_pcl720_h$ac_cv_header_sys_ ans=no ;; esac -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) -AC_MSG_CHECKING(for default inclusion of all suitable non-PARSE clocks) +AC_MSG_CHECKING([for default inclusion of all suitable non-PARSE clocks]) AC_ARG_ENABLE(all-clocks, AC_HELP_STRING([--enable-all-clocks], [+ include all suitable non-PARSE clocks:]), [ntp_eac=$enableval], [ntp_eac=yes]) AC_MSG_RESULT($ntp_eac) # HMS: Should we also require ac_cv_var_parse_ok? -AC_MSG_CHECKING(if we have support for PARSE clocks) +AC_MSG_CHECKING([if we have support for PARSE clocks]) case "$ac_cv_var_atom_ok$ac_cv_header_termio_h$ac_cv_header_termios_h" in yes*yes*) ntp_canparse=yes @@ -2271,7 +2380,7 @@ esac AC_MSG_RESULT($ntp_canshm) # Requires modem control -AC_MSG_CHECKING(ACTS modem service) +AC_MSG_CHECKING([ACTS modem service]) AC_ARG_ENABLE(ACTS, AC_HELP_STRING([--enable-ACTS], [s ACTS modem service]), [ntp_ok=$enableval], @@ -2290,7 +2399,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(Arbiter 1088A/B GPS receiver) +AC_MSG_CHECKING([Arbiter 1088A/B GPS receiver]) AC_ARG_ENABLE(ARBITER, AC_HELP_STRING([--enable-ARBITER], [+ Arbiter 1088A/B GPS receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2300,7 +2409,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(Arcron MSF receiver) +AC_MSG_CHECKING([Arcron MSF receiver]) AC_ARG_ENABLE(ARCRON_MSF, AC_HELP_STRING([--enable-ARCRON-MSF], [+ Arcron MSF receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2310,7 +2419,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(Austron 2200A/2201A GPS receiver) +AC_MSG_CHECKING([Austron 2200A/2201A GPS receiver]) AC_ARG_ENABLE(AS2201, AC_HELP_STRING([--enable-AS2201], [+ Austron 2200A/2201A GPS receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2320,7 +2429,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(ATOM PPS interface) +AC_MSG_CHECKING([ATOM PPS interface]) AC_ARG_ENABLE(ATOM, AC_HELP_STRING([--enable-ATOM], [s ATOM PPS interface]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2333,7 +2442,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(Chrono-log K-series WWVB receiver) +AC_MSG_CHECKING([Chrono-log K-series WWVB receiver]) AC_ARG_ENABLE(CHRONOLOG, AC_HELP_STRING([--enable-CHRONOLOG], [+ Chrono-log K-series WWVB receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2343,7 +2452,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(CHU modem/decoder) +AC_MSG_CHECKING([CHU modem/decoder]) AC_ARG_ENABLE(CHU, AC_HELP_STRING([--enable-CHU], [+ CHU modem/decoder]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2354,7 +2463,7 @@ fi AC_MSG_RESULT($ntp_ok) ac_refclock_chu=$ntp_ok -AC_MSG_CHECKING(CHU audio/decoder) +AC_MSG_CHECKING([CHU audio/decoder]) AC_ARG_ENABLE(AUDIO-CHU, AC_HELP_STRING([--enable-AUDIO-CHU], [s CHU audio/decoder]), [ntp_ok=$enableval], @@ -2368,11 +2477,11 @@ fi AC_MSG_RESULT($ntp_ok) # We used to check for sunos/solaris target... case "$ntp_ok$ac_refclock_chu$ntp_canaudio" in - yes*no*) AC_MSG_WARN(*** But the expected answer is...no ***) ;; + yes*no*) AC_MSG_WARN([*** But the expected answer is...no ***]) ;; esac # Not under HP-UX -AC_MSG_CHECKING(Datum Programmable Time System) +AC_MSG_CHECKING([Datum Programmable Time System]) AC_ARG_ENABLE(DATUM, AC_HELP_STRING([--enable-DATUM], [s Datum Programmable Time System]), [ntp_ok=$enableval], @@ -2389,7 +2498,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(Dumb generic hh:mm:ss local clock) +AC_MSG_CHECKING([Dumb generic hh:mm:ss local clock]) AC_ARG_ENABLE(DUMBCLOCK, AC_HELP_STRING([--enable-DUMBCLOCK], [+ Dumb generic hh:mm:ss local clock]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2399,7 +2508,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(Forum Graphic GPS) +AC_MSG_CHECKING([Forum Graphic GPS]) AC_ARG_ENABLE(FG, AC_HELP_STRING([--enable-FG], [+ Forum Graphic GPS]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2410,7 +2519,7 @@ fi AC_MSG_RESULT($ntp_ok) # Requires modem control -AC_MSG_CHECKING(Heath GC-1000 WWV/WWVH receiver) +AC_MSG_CHECKING([Heath GC-1000 WWV/WWVH receiver]) AC_ARG_ENABLE(HEATH, AC_HELP_STRING([--enable-HEATH], [s Heath GC-1000 WWV/WWVH receiver]), [ntp_ok=$enableval], @@ -2429,7 +2538,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(for hopf serial clock device) +AC_MSG_CHECKING([for hopf serial clock device]) AC_ARG_ENABLE(HOPFSERIAL, AC_HELP_STRING([--enable-HOPFSERIAL], [+ hopf serial clock device]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2439,7 +2548,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(for hopf PCI clock 6039) +AC_MSG_CHECKING([for hopf PCI clock 6039]) AC_ARG_ENABLE(HOPFPCI, AC_HELP_STRING([--enable-HOPFPCI], [+ hopf 6039 PCI board]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2449,7 +2558,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(HP 58503A GPS receiver) +AC_MSG_CHECKING([HP 58503A GPS receiver]) AC_ARG_ENABLE(HPGPS, AC_HELP_STRING([--enable-HPGPS], [+ HP 58503A GPS receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2459,7 +2568,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(IRIG audio decoder) +AC_MSG_CHECKING([IRIG audio decoder]) AC_ARG_ENABLE(IRIG, AC_HELP_STRING([--enable-IRIG], [s IRIG audio decoder]), [ntp_ok=$enableval], @@ -2473,10 +2582,10 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) case "$ntp_ok$ntp_canaudio" in - yesno) AC_MSG_WARN(*** But the expected answer is... no ***) ;; + yesno) AC_MSG_WARN([*** But the expected answer is... no ***]) ;; esac -AC_MSG_CHECKING(for JJY receiver) +AC_MSG_CHECKING([for JJY receiver]) AC_ARG_ENABLE(JJY, AC_HELP_STRING([--enable-JJY], [+ JJY receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2486,7 +2595,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(Rockwell Jupiter GPS receiver) +AC_MSG_CHECKING([Rockwell Jupiter GPS receiver]) AC_ARG_ENABLE(JUPITER, AC_HELP_STRING([--enable-JUPITER], [s Rockwell Jupiter GPS receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2499,7 +2608,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(Leitch CSD 5300 Master Clock System Driver) +AC_MSG_CHECKING([Leitch CSD 5300 Master Clock System Driver]) AC_ARG_ENABLE(LEITCH, AC_HELP_STRING([--enable-LEITCH], [+ Leitch CSD 5300 Master Clock System Driver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2509,7 +2618,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(local clock reference) +AC_MSG_CHECKING([local clock reference]) AC_ARG_ENABLE(LOCAL-CLOCK, AC_HELP_STRING([--enable-LOCAL-CLOCK], [+ local clock reference]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2531,7 +2640,7 @@ dnl fi dnl AC_MSG_RESULT($ntp_ok) # Not Ultrix -AC_MSG_CHECKING(Magnavox MX4200 GPS receiver) +AC_MSG_CHECKING([Magnavox MX4200 GPS receiver]) AC_ARG_ENABLE(MX4200, AC_HELP_STRING([--enable-MX4200 ], [s Magnavox MX4200 GPS receiver]), [ntp_ok=$enableval], @@ -2550,7 +2659,7 @@ case "$ntp_ok$host" in yes*-*-ultrix*) AC_MSG_WARN(*** But the expected answer is... no ***) ;; esac -AC_MSG_CHECKING(for NeoClock4X receiver) +AC_MSG_CHECKING([for NeoClock4X receiver]) AC_ARG_ENABLE(NEOCLOCK4X, AC_HELP_STRING([--enable-NEOCLOCK4X], [+ NeoClock4X DCF77 / TDF receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2560,7 +2669,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(NMEA GPS receiver) +AC_MSG_CHECKING([NMEA GPS receiver]) AC_ARG_ENABLE(NMEA, AC_HELP_STRING([--enable-NMEA], [+ NMEA GPS receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2570,7 +2679,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(for ONCORE Motorola VP/UT Oncore GPS) +AC_MSG_CHECKING([for ONCORE Motorola VP/UT Oncore GPS]) AC_ARG_ENABLE(ONCORE, AC_HELP_STRING([--enable-ONCORE], [s Motorola VP/UT Oncore GPS receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2583,7 +2692,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(for Palisade clock) +AC_MSG_CHECKING([for Palisade clock]) AC_ARG_ENABLE(PALISADE, AC_HELP_STRING([--enable-PALISADE], [s Palisade clock]), [ntp_ok=$enableval], @@ -2601,7 +2710,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(Conrad parallel port radio clock) +AC_MSG_CHECKING([Conrad parallel port radio clock]) AC_ARG_ENABLE(PCF, AC_HELP_STRING([--enable-PCF ], [+ Conrad parallel port radio clock]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2611,7 +2720,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(PST/Traconex 1020 WWV/WWVH receiver) +AC_MSG_CHECKING([PST/Traconex 1020 WWV/WWVH receiver]) AC_ARG_ENABLE(PST, AC_HELP_STRING([--enable-PST], [+ PST/Traconex 1020 WWV/WWVH receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2621,7 +2730,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(RIPENCC specific Trimble driver) +AC_MSG_CHECKING([RIPENCC specific Trimble driver]) AC_ARG_ENABLE(RIPENCC, AC_HELP_STRING([--enable-RIPENCC], [- RIPENCC specific Trimble driver]), [ntp_ok=$enableval], [ntp_ok=no]) @@ -2637,7 +2746,7 @@ AC_MSG_RESULT($ntp_ok) # Danny Meyer says SHM compiles (with a few warnings) under Win32. # For *IX, we need sys/ipc.h and sys/shm.h. -AC_MSG_CHECKING(for SHM clock attached thru shared memory) +AC_MSG_CHECKING([for SHM clock attached thru shared memory]) AC_ARG_ENABLE(SHM, AC_HELP_STRING([--enable-SHM], [s SHM clock attached thru shared memory]), [ntp_ok=$enableval], @@ -2651,7 +2760,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(Spectracom 8170/Netclock/2 WWVB receiver) +AC_MSG_CHECKING([Spectracom 8170/Netclock/2 WWVB receiver]) AC_ARG_ENABLE(SPECTRACOM, AC_HELP_STRING([--enable-SPECTRACOM], [+ Spectracom 8170/Netclock/2 WWVB receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2661,7 +2770,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(KSI/Odetics TPRO/S GPS receiver/IRIG interface) +AC_MSG_CHECKING([KSI/Odetics TPRO/S GPS receiver/IRIG interface]) AC_ARG_ENABLE(TPRO, AC_HELP_STRING([--enable-TPRO], [s KSI/Odetics TPRO/S GPS receiver/IRIG interface]), [ntp_ok=$enableval], @@ -2678,7 +2787,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) case "$ntp_ok$ac_cv_header_sys_tpro" in - yesno) AC_MSG_WARN(*** But the expected answer is... no ***) ;; + yesno) AC_MSG_WARN([*** But the expected answer is... no ***]) ;; esac dnl Bug 342: longstanding unfixed bugs @@ -2693,7 +2802,7 @@ dnl fi dnl AC_MSG_RESULT($ntp_ok) # Not on a vax-dec-bsd -AC_MSG_CHECKING(Kinemetrics/TrueTime receivers) +AC_MSG_CHECKING([Kinemetrics/TrueTime receivers]) AC_ARG_ENABLE(TRUETIME, AC_HELP_STRING([--enable-TRUETIME], [s Kinemetrics/TrueTime receivers]), [ntp_ok=$enableval], @@ -2705,16 +2814,17 @@ AC_ARG_ENABLE(TRUETIME, ntp_ok=$ntp_eac ;; esac]) + if test "$ntp_ok" = "yes"; then ntp_refclock=yes AC_DEFINE(CLOCK_TRUETIME, 1, [Kinemetrics/TrueTime receivers]) fi AC_MSG_RESULT($ntp_ok) case "$ntp_ok$host" in - yesvax-dec-bsd) AC_MSG_WARN(*** But the expected answer is... no ***) ;; + yesvax-dec-bsd) AC_MSG_WARN([*** But the expected answer is... no ***]) ;; esac -AC_MSG_CHECKING(TrueTime 560 IRIG-B decoder) +AC_MSG_CHECKING([TrueTime 560 IRIG-B decoder]) AC_ARG_ENABLE(TT560, AC_HELP_STRING([--enable-TT560], [- TrueTime 560 IRIG-B decoder]), [ntp_ok=$enableval], [ntp_ok=no]) @@ -2724,7 +2834,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(Ultralink M320 WWVB receiver) +AC_MSG_CHECKING([Ultralink M320 WWVB receiver]) AC_ARG_ENABLE(ULINK, AC_HELP_STRING([--enable-ULINK], [+ Ultralink WWVB receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2734,7 +2844,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(WWV receiver) +AC_MSG_CHECKING([WWV receiver]) AC_ARG_ENABLE(WWV, AC_HELP_STRING([--enable-WWV], [s WWV Audio receiver]), [ntp_ok=$enableval], @@ -2751,7 +2861,7 @@ case "$ntp_ok$ntp_canaudio" in yesno) AC_MSG_WARN(*** But the expected answer is... no ***) ;; esac -AC_MSG_CHECKING(for Zyfer receiver) +AC_MSG_CHECKING([for Zyfer receiver]) AC_ARG_ENABLE(ZYFER, AC_HELP_STRING([--enable-ZYFER], [+ Zyfer GPStarplus receiver]), [ntp_ok=$enableval], [ntp_ok=$ntp_eac]) @@ -2761,7 +2871,7 @@ if test "$ntp_ok" = "yes"; then fi AC_MSG_RESULT($ntp_ok) -AC_MSG_CHECKING(for default inclusion of all suitable PARSE clocks) +AC_MSG_CHECKING([for default inclusion of all suitable PARSE clocks]) AC_ARG_ENABLE(parse-clocks, AC_HELP_STRING([--enable-parse-clocks], [- include all suitable PARSE clocks:]), [ntp_eapc=$enableval], @@ -2775,10 +2885,10 @@ AC_MSG_RESULT($ntp_eapc) case "$ntp_eac$ntp_eapc$ntp_canparse" in noyes*) - AC_MSG_ERROR("--enable-parse-clocks" requires "--enable-all-clocks".) + AC_MSG_ERROR(["--enable-parse-clocks" requires "--enable-all-clocks".]) ;; yesyesno) - AC_MSG_ERROR(You said "--enable-parse-clocks" but PARSE isn't supported on this platform!) + AC_MSG_ERROR([You said "--enable-parse-clocks" but PARSE isn't supported on this platform!]) ;; *) ;; esac @@ -2787,7 +2897,7 @@ ntp_libparse=no ntp_parseutil=no ntp_rawdcf=no -AC_MSG_CHECKING(Diem Computime Radio Clock) +AC_MSG_CHECKING([Diem Computime Radio Clock]) AC_ARG_ENABLE(COMPUTIME, AC_HELP_STRING([--enable-COMPUTIME], [s Diem Computime Radio Clock]), [ntp_ok=$enableval], [ntp_ok=$ntp_eapc]) @@ -2799,11 +2909,11 @@ fi AC_MSG_RESULT($ntp_ok) case "$ntp_ok$ntp_canparse" in yesno) - AC_MSG_ERROR(That's a parse clock and this system doesn't support it!) + AC_MSG_ERROR([That's a parse clock and this system doesn't support it!]) ;; esac -AC_MSG_CHECKING(ELV/DCF7000 clock) +AC_MSG_CHECKING([ELV/DCF7000 clock]) AC_ARG_ENABLE(DCF7000, AC_HELP_STRING([--enable-DCF7000], [s ELV/DCF7000 clock]), [ntp_ok=$enableval], [ntp_ok=$ntp_eapc]) @@ -2815,11 +2925,11 @@ fi AC_MSG_RESULT($ntp_ok) case "$ntp_ok$ntp_canparse" in yesno) - AC_MSG_ERROR(That's a parse clock and this system doesn't support it!) + AC_MSG_ERROR([That's a parse clock and this system doesn't support it!]) ;; esac -AC_MSG_CHECKING(HOPF 6021 clock) +AC_MSG_CHECKING([HOPF 6021 clock]) AC_ARG_ENABLE(HOPF6021, AC_HELP_STRING([--enable-HOPF6021 ], [s HOPF 6021 clock]), [ntp_ok=$enableval], [ntp_ok=$ntp_eapc]) @@ -2831,11 +2941,11 @@ fi AC_MSG_RESULT($ntp_ok) case "$ntp_ok$ntp_canparse" in yesno) - AC_MSG_ERROR(That's a parse clock and this system doesn't support it!) + AC_MSG_ERROR([That's a parse clock and this system doesn't support it!]) ;; esac -AC_MSG_CHECKING(Meinberg clocks) +AC_MSG_CHECKING([Meinberg clocks]) AC_ARG_ENABLE(MEINBERG, AC_HELP_STRING([--enable-MEINBERG], [s Meinberg clocks]), [ntp_ok=$enableval], [ntp_ok=$ntp_eapc]) @@ -2847,11 +2957,11 @@ fi AC_MSG_RESULT($ntp_ok) case "$ntp_ok$ntp_canparse" in yesno) - AC_MSG_ERROR(That's a parse clock and this system doesn't support it!) + AC_MSG_ERROR([That's a parse clock and this system doesn't support it!]) ;; esac -AC_MSG_CHECKING(DCF77 raw time code) +AC_MSG_CHECKING([DCF77 raw time code]) AC_ARG_ENABLE(RAWDCF, AC_HELP_STRING([--enable-RAWDCF], [s DCF77 raw time code]), [ntp_ok=$enableval], [ntp_ok=$ntp_eapc]) @@ -2871,11 +2981,11 @@ esac case "$ntp_rawdcf" in yes) - AC_CACHE_CHECK(if we must enable parity for RAWDCF, + AC_CACHE_CHECK([if we must enable parity for RAWDCF], ac_cv_var_rawdcf_parity, [ans=no case "$host" in - *-*-linux*) + *-*-*linux*) ans=yes ;; esac @@ -2890,7 +3000,7 @@ case "$ntp_rawdcf" in ;; esac -AC_MSG_CHECKING(RCC 8000 clock) +AC_MSG_CHECKING([RCC 8000 clock]) AC_ARG_ENABLE(RCC8000, AC_HELP_STRING([--enable-RCC8000], [s RCC 8000 clock]), [ntp_ok=$enableval], [ntp_ok=$ntp_eapc]) @@ -2906,7 +3016,7 @@ case "$ntp_ok$ntp_canparse" in ;; esac -AC_MSG_CHECKING(Schmid DCF77 clock) +AC_MSG_CHECKING([Schmid DCF77 clock]) AC_ARG_ENABLE(SCHMID, AC_HELP_STRING([--enable-SCHMID ], [s Schmid DCF77 clock]), [ntp_ok=$enableval], [ntp_ok=$ntp_eapc]) @@ -2922,7 +3032,7 @@ case "$ntp_ok$ntp_canparse" in ;; esac -AC_MSG_CHECKING(Trimble GPS receiver/TAIP protocol) +AC_MSG_CHECKING([Trimble GPS receiver/TAIP protocol]) AC_ARG_ENABLE(TRIMTAIP, AC_HELP_STRING([--enable-TRIMTAIP], [s Trimble GPS receiver/TAIP protocol]), [ntp_ok=$enableval], [ntp_ok=$ntp_eapc]) @@ -2938,7 +3048,7 @@ case "$ntp_ok$ntp_canparse" in ;; esac -AC_MSG_CHECKING(Trimble GPS receiver/TSIP protocol) +AC_MSG_CHECKING([Trimble GPS receiver/TSIP protocol]) AC_ARG_ENABLE(TRIMTSIP, AC_HELP_STRING([--enable-TRIMTSIP], [s Trimble GPS receiver/TSIP protocol]), [ntp_ok=$enableval], [ntp_ok=$ntp_eapc]) @@ -2954,7 +3064,7 @@ case "$ntp_ok$ntp_canparse" in ;; esac -AC_MSG_CHECKING(WHARTON 400A Series clock) +AC_MSG_CHECKING([WHARTON 400A Series clock]) AC_ARG_ENABLE(WHARTON, AC_HELP_STRING([--enable-WHARTON], [s WHARTON 400A Series clock]), [ntp_ok=$enableval], [ntp_ok=$ntp_eapc]) @@ -2970,7 +3080,7 @@ case "$ntp_ok$ntp_canparse" in ;; esac -AC_MSG_CHECKING(VARITEXT clock) +AC_MSG_CHECKING([VARITEXT clock]) AC_ARG_ENABLE(VARITEXT, AC_HELP_STRING([--enable-VARITEXT], [s VARITEXT clock]), [ntp_ok=$enableval], [ntp_ok=$ntp_eapc]) @@ -2982,14 +3092,14 @@ fi AC_MSG_RESULT($ntp_ok) case "$ntp_ok$ntp_canparse" in yesno) - AC_MSG_ERROR(That's a parse clock and this system doesn't support it!) + AC_MSG_ERROR([That's a parse clock and this system doesn't support it!]) ;; esac AC_SUBST(LIBPARSE) AC_SUBST(MAKE_LIBPARSE) AC_SUBST(MAKE_LIBPARSE_KERNEL) AC_SUBST(MAKE_CHECK_Y2K) -AC_MSG_CHECKING(if we need to make and use the parse libraries) +AC_MSG_CHECKING([if we need to make and use the parse libraries]) ans=no case "$ntp_libparse" in yes) @@ -3003,7 +3113,7 @@ case "$ntp_libparse" in AC_DEFINE(CLOCK_ATOM) ;; esac -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) # AC_SUBST(RSAOBJS) # AC_SUBST(RSASRCS) @@ -3016,7 +3126,7 @@ AC_SUBST(OPENSSL) AC_SUBST(OPENSSL_INC) AC_SUBST(OPENSSL_LIB) -AC_MSG_CHECKING(for openssl library directory) +AC_MSG_CHECKING([for openssl library directory]) AC_ARG_WITH(openssl-libdir, AC_HELP_STRING([--with-openssl-libdir], [+ =/something/reasonable]), [ans=$withval], @@ -3058,9 +3168,9 @@ case "$ans" in esac ;; esac -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) -AC_MSG_CHECKING(for openssl include directory) +AC_MSG_CHECKING([for openssl include directory]) AC_ARG_WITH(openssl-incdir, AC_HELP_STRING([--with-openssl-incdir], [+ =/something/reasonable]), [ans=$withval], @@ -3094,7 +3204,7 @@ case "$ans" in esac ;; esac -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) AC_ARG_WITH(crypto, AC_HELP_STRING([--with-crypto], [+ =openssl]), @@ -3121,9 +3231,9 @@ case "$ans" in ;; esac AC_MSG_CHECKING(for the level of crypto support) -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) -AC_MSG_CHECKING(if we want to compile with ElectricFence) +AC_MSG_CHECKING([if we want to compile with ElectricFence]) AC_ARG_WITH(electricfence, AC_HELP_STRING([--with-electricfence], [- compile with ElectricFence malloc debugger]), [ans=$withval], [ans=no]) @@ -3138,10 +3248,10 @@ case "$ans" in ans=yes ;; esac -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) AC_SUBST(MAKE_CHECK_LAYOUT) -AC_MSG_CHECKING(if we want to run check-layout) +AC_MSG_CHECKING([if we want to run check-layout]) case "$cross_compiling$PATH_PERL" in no/*) MAKE_CHECK_LAYOUT=check-layout @@ -3151,26 +3261,26 @@ case "$cross_compiling$PATH_PERL" in ans=no ;; esac -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) AC_SUBST(TESTDCF) AC_SUBST(DCFD) -AC_MSG_CHECKING(if we can make dcf parse utilities) +AC_MSG_CHECKING([if we can make dcf parse utilities]) ans=no if test "$ntp_parseutil" = "yes"; then case "$host" in - *-*-sunos4*|*-*-solaris2*|*-*-linux*|*-*-netbsd*) + *-*-sunos4*|*-*-solaris2*|*-*-*linux*|*-*-netbsd*) ans="dcfd testdcf" DCFD=dcfd TESTDCF=testdcf ;; esac fi -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) AC_SUBST(MAKE_PARSEKMODULE) -AC_MSG_CHECKING(if we can build kernel streams modules for parse) +AC_MSG_CHECKING([if we can build kernel streams modules for parse]) ans=no case "$ntp_parseutil$ac_cv_header_sys_stropts_h" in yesyes) @@ -3191,9 +3301,9 @@ case "$ntp_parseutil$ac_cv_header_sys_stropts_h" in esac ;; esac -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) -AC_MSG_CHECKING(if we need basic refclock support) +AC_MSG_CHECKING([if we need basic refclock support]) if test "$ntp_refclock" = "yes"; then AC_DEFINE(REFCLOCK, 1, [Basic refclock support?]) fi @@ -3217,9 +3327,9 @@ if test "$ans" = "yes"; then MAKE_ADJTIMED=adjtimed AC_DEFINE(NEED_HPUX_ADJTIME, 1, [Do we need HPUX adjtime() library support?]) fi -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) -AC_MSG_CHECKING(if we want QNX adjtime support) +AC_MSG_CHECKING([if we want QNX adjtime support]) case "$host" in *-*-qnx*) ans=yes @@ -3230,89 +3340,116 @@ esac if test "$ans" = "yes"; then AC_DEFINE(NEED_QNX_ADJTIME, 1, [Do we need the qnx adjtime call?]) fi -AC_MSG_RESULT($ans) +AC_MSG_RESULT([$ans]) -AC_CACHE_CHECK(if we can read kmem, ac_cv_var_can_kmem, -[AC_ARG_ENABLE(kmem, - AC_HELP_STRING([--enable-kmem], [s read /dev/kmem for tick and/or tickadj]), - [ans=$enableval], - [case "$ac_cv_func_nlist$ac_cv_func_K_open$ac_cv_func_kvm_open" in - *yes*) - ans=yes - ;; - *) ans=no - ;; - esac - case "$host" in - *-*-aix*) - #ans=no - ;; - *-*-domainos) # Won't be found... - ans=no - ;; - *-*-hpux*) - #ans=no - ;; - *-*-irix[[456]]*) - ans=no - ;; - *-*-linux*) - ans=no - ;; - *-*-winnt3.5) - ans=no - ;; - *-*-unicosmp*) - ans=no - ;; - esac - ]) -ac_cv_var_can_kmem=$ans]) +AC_MSG_CHECKING([if we can read kmem]) -case "$ac_cv_var_can_kmem" in - *yes*) ;; - *) AC_DEFINE(NOKMEM, 1, [Should we NOT read /dev/kmem?]) ;; +# the default is to enable it if the system has the capability + +case "$ac_cv_func_nlist$ac_cv_func_K_open$ac_cv_func_kvm_open" in + *yes*) + ans=yes + ;; + *) ans=no esac -AC_CACHE_CHECK(if adjtime is accurate, ac_cv_var_adjtime_is_accurate, -[AC_ARG_ENABLE(accurate-adjtime, - AC_HELP_STRING([--enable-accurate-adjtime], [s the adjtime() call is accurate]), +case "$host" in + *-*-domainos) # Won't be found... + ans=no + ;; + *-*-hpux*) + #ans=no + ;; + *-*-irix[[456]]*) + ans=no + ;; + *-*-*linux*) + ans=no + ;; + *-*-winnt3.5) + ans=no + ;; + *-*-unicosmp*) + ans=no + ;; +esac + +# --enable-kmem / --disable-kmem controls if present +AC_ARG_ENABLE( + [kmem], + AC_HELP_STRING( + [--enable-kmem], + [s read /dev/kmem for tick and/or tickadj] + ), + [ans=$enableval] +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in + yes) + can_kmem=yes + ;; + *) + can_kmem=no + AC_DEFINE(NOKMEM, 1, [Should we NOT read /dev/kmem?]) +esac + + +AC_MSG_CHECKING([if adjtime is accurate]) + +# target-dependent defaults + +case "$host" in + i386-sequent-ptx*) + ans=no + ;; + i386-unknown-osf1*) + ans=yes + ;; + mips-sgi-irix[[456]]*) + ans=yes + ;; + *-fujitsu-uxp*) + ans=yes + ;; + *-ibm-aix[[456]]*) + ans=yes + ;; + *-*-*linux*) + ans=yes + ;; + *-*-solaris2.[[01]]) + ans=no + ;; + *-*-solaris2*) + ans=yes + ;; + *-*-unicosmp*) + ans=yes + ;; + *) ans=no +esac + +# --enable-accurate-adjtime / --disable-accurate-adjtime +# override the default +AC_ARG_ENABLE([accurate-adjtime], + AC_HELP_STRING( + [--enable-accurate-adjtime], + [s the adjtime() call is accurate] + ), [ans=$enableval], - [case "$host" in - i386-sequent-ptx*) - ans=no - ;; - i386-unknown-osf1*) - ans=yes - ;; - mips-sgi-irix[[456]]*) - ans=yes - ;; - *-fujitsu-uxp*) - ans=yes - ;; - *-ibm-aix[[45]]*) - ans=yes - ;; - *-*-linux*) - ans=yes - ;; - *-*-solaris2.[[01]]) - ans=no - ;; - *-*-solaris2*) - ans=yes - ;; - *-*-unicosmp*) - ans=yes - ;; - *) ans=no - ;; - esac - ]) -ac_cv_var_adjtime_is_accurate=$ans]) -case "$ac_cv_var_adjtime_is_accurate" in - yes) AC_DEFINE(ADJTIME_IS_ACCURATE, 1, [Is adjtime() accurate?]) ;; +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in + yes) + AC_DEFINE(ADJTIME_IS_ACCURATE, 1, [Is adjtime() accurate?]) + adjtime_is_accurate=yes + ;; + *) + adjtime_is_accurate=no esac AC_CACHE_CHECK([the name of 'tick' in the kernel], @@ -3328,7 +3465,7 @@ case "$host" in *-hp-hpux*) ans=old_tick ;; - *-ibm-aix[[345]]*) + *-ibm-aix[[3456]]*) ans=no ;; *-*-mpeix*) @@ -3535,101 +3672,123 @@ dnl (RS6000 && !NOKMEM), SINIX MIPS dnl But we'll only use these "values" if we can't find anything else. -AC_CACHE_CHECK(for a default value for 'tick', ac_cv_var_tick, -[AC_ARG_ENABLE(tick, - AC_HELP_STRING([--enable-tick=VALUE], [s force a value for 'tick']), - [ans=$enableval], - [ans=no - case "$host" in - XXX-*-pc-cygwin*) - ;; - *-univel-sysv*) - ans=10000 - ;; - *-*-irix*) - ans=10000 - ;; - *-*-linux*) - ans=txc.tick - ;; - *-*-mpeix*) - ans=no - ;; - *-*-winnt3.5) - ans='(every / 10)' - ;; - *-*-unicosmp*) - ans=10000 - ;; - *) - ans='1000000L/hz' - ;; - esac]) -ac_cv_var_tick=$ans]) -case "$ac_cv_var_tick" in - ''|no) ;; # HMS: I think we can only get 'no' here... - *) AC_DEFINE_UNQUOTED(PRESET_TICK, $ac_cv_var_tick, [Preset a value for 'tick'?]) ;; +AC_MSG_CHECKING([for a default value for 'tick']) + +# target-dependent default for tick + +case "$host" in + *-*-pc-cygwin*) + AC_MSG_ERROR([tick needs work for cygwin]) + ;; + *-univel-sysv*) + ans=10000 + ;; + *-*-irix*) + ans=10000 + ;; + *-*-*linux*) + ans=txc.tick + ;; + *-*-mpeix*) + ans=no + ;; + *-*-winnt3.5) + ans='(every / 10)' + ;; + *-*-unicosmp*) + ans=10000 + ;; + *) + ans='1000000L/hz' + ;; esac -AC_CACHE_CHECK(for a default value for 'tickadj', ac_cv_var_tickadj, -[AC_ARG_ENABLE(tickadj, - AC_HELP_STRING([--enable-tickadj=VALUE], [s force a value for 'tickadj']), - [ans=$enableval], - [ans='500/hz' - case "$host" in - *-fujitsu-uxp*) - case "$ac_cv_var_adjtime_is_accurate" in - yes) ans='tick/16' ;; - esac - ;; - XXX-*-pc-cygwin*) - ans=no - ;; - *-univel-sysv*) - ans=80 - ;; - *-*-aix*) - case "$ac_cv_var_can_kmem" in - no) ans=1000 ;; - esac - ;; - *-*-domainos) # Skippy: won't be found... - case "$ac_cv_var_can_kmem" in - no) ans=668 ;; - esac - ;; - *-*-hpux*) - case "$ac_cv_var_adjtime_is_accurate" in - yes) ans='tick/16' ;; - esac - ;; - *-*-irix*) - ans=150 - ;; - *-*-mpeix*) - ans=no - ;; - *-*-sco3.2v5.0*) - ans=10000L/hz - ;; - *-*-solaris2*) - case "$ac_cv_var_adjtime_is_accurate" in - yes) - #ans='tick/16' - ;; - esac - ;; - *-*-winnt3.5) - ans=50 - ;; - *-*-unicosmp*) - ans=150 - ;; - esac]) -ac_cv_var_tickadj=$ans]) -case "$ac_cv_var_tickadj" in +AC_ARG_ENABLE( + [tick], + AC_HELP_STRING( + [--enable-tick=VALUE], + [s force a value for 'tick'] + ), + [ans=$enableval] +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in ''|no) ;; # HMS: I think we can only get 'no' here... - *) AC_DEFINE_UNQUOTED(PRESET_TICKADJ, $ac_cv_var_tickadj, [Preset a value for 'tickadj'?]) ;; + *) AC_DEFINE_UNQUOTED(PRESET_TICK, [$ans], [Preset a value for 'tick'?]) ;; +esac + + +AC_MSG_CHECKING([for a default value for 'tickadj']) + +# target-specific default + +ans='500/hz' + +case "$host" in + *-fujitsu-uxp*) + case "$adjtime_is_accurate" in + yes) + ans='tick/16' + esac + ;; + XXX-*-pc-cygwin*) + ans=no + ;; + *-univel-sysv*) + ans=80 + ;; + *-*-aix*) + case "$can_kmem" in + no) + ans=1000 + esac + ;; + *-*-domainos) # Skippy: won't be found... + case "$can_kmem" in + no) + ans=668 + esac + ;; + *-*-hpux*) + case "$adjtime_is_accurate" in + yes) + ans='tick/16' + esac + ;; + *-*-irix*) + ans=150 + ;; + *-*-mpeix*) + ans=no + ;; + *-*-sco3.2v5.0*) + ans=10000L/hz + ;; + *-*-winnt3.5) + ans=50 + ;; + *-*-unicosmp*) + ans=150 +esac + +AC_ARG_ENABLE( + [tickadj], + AC_HELP_STRING( + [--enable-tickadj=VALUE], + [s force a value for 'tickadj'] + ), + [ans=$enableval] +) + +AC_MSG_RESULT([$ans]) + +default_tickadj=$ans + +case "$default_tickadj" in + ''|no) ;; # HMS: I think we can only get 'no' here... + *) AC_DEFINE_UNQUOTED(PRESET_TICKADJ, $default_tickadj, [Preset a value for 'tickadj'?]) ;; esac # Newer versions of ReliantUNIX round adjtime() values down to @@ -3645,17 +3804,17 @@ case "$host" in esac ac_cv_make_tickadj=yes -case "$ac_cv_var_can_kmem$ac_cv_var_tick$ac_cv_var_tickadj" in +case "$can_kmem$ac_cv_var_tick$default_tickadj" in nonono) # Don't read KMEM, no presets. Bogus. - AC_MSG_WARN(Can't read kmem, no PRESET_TICK or PRESET_TICKADJ. No tickadj.) + AC_MSG_WARN([Can't read kmem, no PRESET_TICK or PRESET_TICKADJ. No tickadj.]) ac_cv_make_tickadj=no ;; nono*) # Don't read KMEM, no PRESET_TICK but PRESET_TICKADJ. Bogus. - AC_MSG_WARN(Can't read kmem but no PRESET_TICK. No tickadj.) + AC_MSG_WARN([Can't read kmem but no PRESET_TICK. No tickadj.]) ac_cv_make_tickadj=no ;; no*no) # Don't read KMEM, PRESET_TICK but no PRESET_TICKADJ. Bogus. - AC_MSG_WARN(Can't read kmem but no PRESET_TICKADJ. No tickadj.) + AC_MSG_WARN([Can't read kmem but no PRESET_TICKADJ. No tickadj.]) ac_cv_make_tickadj=no ;; no*) # Don't read KMEM, PRESET_TICK and PRESET_TICKADJ. Cool. @@ -3663,19 +3822,19 @@ case "$ac_cv_var_can_kmem$ac_cv_var_tick$ac_cv_var_tickadj" in yesnono) # Read KMEM, no presets. Cool. ;; yesno*) # Read KMEM, no PRESET_TICK but PRESET_TICKADJ. Bogus. - AC_MSG_WARN(PRESET_TICKADJ is defined but not PRESET_TICK. Please report this.) + AC_MSG_WARN([PRESET_TICKADJ is defined but not PRESET_TICK. Please report this.]) ;; yes*no) # Read KMEM, PRESET_TICK but no PRESET_TICKADJ. Cool. ;; yes*) # READ KMEM, PRESET_TICK and PRESET_TICKADJ. ;; *) # Generally bogus. - AC_MSG_ERROR(This shouldn't happen.) + AC_MSG_ERROR([This shouldn't happen.]) ;; esac AC_SUBST(MAKE_NTPTIME) -AC_CACHE_CHECK(if we want and can make the ntptime utility, ac_cv_make_ntptime, +AC_CACHE_CHECK([if we want and can make the ntptime utility], ac_cv_make_ntptime, [case "$host" in *) case "$ac_cv_struct_ntptimeval$ac_cv_var_kernel_pll" in yesyes) @@ -3718,7 +3877,17 @@ case "$host" in ac_cv_make_tickadj=no ;; esac -AC_CACHE_CHECK(if we want and can make the tickadj utility, ac_cv_make_tickadj, + +# +# Despite all the above, we always make tickadj. Setting +# ac_cv_make_tickadj before AC_CACHE_CHECK will cause a false +# report that the configuration variable was cached. It may +# be better to simply remove the hunk above, I did not want +# to remove it if there is hope it will be used again. +# +unset ac_cv_make_tickadj + +AC_CACHE_CHECK([if we want and can make the tickadj utility], ac_cv_make_tickadj, ac_cv_make_tickadj=yes) case "$ac_cv_make_tickadj" in yes) @@ -3727,7 +3896,7 @@ case "$ac_cv_make_tickadj" in esac AC_SUBST(MAKE_TIMETRIM) -AC_CACHE_CHECK(if we want and can make the timetrim utility, ac_cv_make_timetrim, +AC_CACHE_CHECK([if we want and can make the timetrim utility], ac_cv_make_timetrim, [case "$host" in *-*-irix*) ac_cv_make_timetrim=yes @@ -3747,12 +3916,22 @@ esac AC_SUBST(MAKE_LIBNTPSIM) AC_SUBST(MAKE_NTPDSIM) -AC_CACHE_CHECK([if we want to build the NTPD simulator], ac_cv_var_ntpd_sim, -[AC_ARG_ENABLE(simulator, - AC_HELP_STRING([--enable-simulator], [- build/install the NTPD simulator?]), - [ans=$enableval], [ans=no]) -ac_cv_var_ntpd_sim=$ans]) -case "$ac_cv_var_ntpd_sim" in + +AC_MSG_CHECKING([if we want to build the NTPD simulator]) + +AC_ARG_ENABLE( + [simulator], + AC_HELP_STRING( + [--enable-simulator], + [- build/install the NTPD simulator?] + ), + [ans=$enableval], + [ans=no] +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in yes) MAKE_NTPDSIM=ntpdsim MAKE_LIBNTPSIM=libntpsim.a @@ -3764,193 +3943,391 @@ case "$build" in ;; *) case "$host" in *-*-vxworks*) - LDFLAGS="$LDFLAGS -r" - ;; + LDFLAGS="$LDFLAGS -r" + ;; esac ;; esac -AC_CACHE_CHECK(if we should always slew the time, ac_cv_var_slew_always, -[AC_ARG_ENABLE(slew-always, - AC_HELP_STRING([--enable-slew-always], [s always slew the time]), - [ans=$enableval], - [case "$host" in - *-apple-aux[[23]]*) - ans=yes - ;; - *-*-bsdi[[012]]*) - ans=no - ;; - *-*-bsdi*) - ans=yes - ;; - *-*-openvms*) # HMS: won't be found - ans=yes - ;; - *) ans=no - ;; - esac - ]) -ac_cv_var_slew_always=$ans]) -case "$ac_cv_var_slew_always" in + +AC_MSG_CHECKING([if we should always slew the time]) + +# target-specific defaults + +case "$host" in + *-apple-aux[[23]]*) + ans=yes + ;; + *-*-bsdi[[012]]*) + ans=no + ;; + *-*-bsdi*) + ans=yes + ;; + *-*-openvms*) # HMS: won't be found + ans=yes + ;; + *) ans=no + ;; +esac + +# --enable-slew-always / --disable-slew-always overrides default + +AC_ARG_ENABLE( + [slew-always], + AC_HELP_STRING( + [--enable-slew-always], + [s always slew the time] + ), + [ans=$enableval] +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in yes) AC_DEFINE(SLEWALWAYS, 1, [Slew always?]) ;; esac -AC_CACHE_CHECK(if we should step and slew the time, ac_cv_var_step_slew, -[AC_ARG_ENABLE(step-slew, - AC_HELP_STRING([--enable-step-slew], [s step and slew the time]), - [ans=$enableval], - [case "$host" in - *-sni-sysv*) - ans=yes - ;; - *-univel-sysv*) - ans=no - ;; - *-*-ptx*) - ans=yes - ;; - *-*-solaris2.1[[0-9]]*) - ans=no - ;; - *-*-solaris2.[[012]]*) - ans=yes - ;; - *-*-sysv4*) # HMS: Does this catch Fujitsu UXP? - ans=yes - ;; - *) ans=no - ;; - esac - ]) -ac_cv_var_step_slew=$ans]) -case "$ac_cv_var_step_slew" in +AC_MSG_CHECKING([if we should step and slew the time]) + +case "$host" in + *-sni-sysv*) + ans=yes + ;; + *-univel-sysv*) + ans=no + ;; + *-*-ptx*) + ans=yes + ;; + *-*-solaris2.1[[0-9]]*) + ans=no + ;; + *-*-solaris2.[[012]]*) + ans=yes + ;; + *-*-sysv4*) # HMS: Does this catch Fujitsu UXP? + ans=yes + ;; + *) ans=no + ;; +esac + + +AC_ARG_ENABLE( + [step-slew], + AC_HELP_STRING( + [--enable-step-slew], + [s step and slew the time] + ), + [ans=$enableval] +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in yes) AC_DEFINE(STEP_SLEW, 1, [Step, then slew the clock?]) ;; esac -AC_CACHE_CHECK(if ntpdate should step the time, ac_cv_var_ntpdate_step, -[AC_ARG_ENABLE(ntpdate-step, - AC_HELP_STRING([--enable-ntpdate-step], [s if ntpdate should step the time]), - [ans=$enableval], - [case "$host" in - *-apple-aux[[23]]*) - ans=yes - ;; - *) ans=no - ;; - esac - ]) -ac_cv_var_ntpdate_step=$ans]) -case "$ac_cv_var_ntpdate_step" in +AC_MSG_CHECKING([if ntpdate should step the time]) + +case "$host" in + *-apple-aux[[23]]*) + ans=yes + ;; + *) ans=no +esac + +AC_ARG_ENABLE( + [ntpdate-step], + AC_HELP_STRING( + [--enable-ntpdate-step], + [s if ntpdate should step the time] + ), + [ans=$enableval] +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in yes) AC_DEFINE(FORCE_NTPDATE_STEP, 1, [force ntpdate to step the clock if !defined(STEP_SLEW) ?]) ;; esac -AC_CACHE_CHECK(if we should sync TODR clock every hour, ac_cv_var_sync_todr, -[AC_ARG_ENABLE(hourly-todr-sync, - AC_HELP_STRING([--enable-hourly-todr-sync], - [s if we should sync TODR hourly]), - [ans=$enableval], - [case "$host" in - *-*-nextstep*) - ans=yes - ;; - *-*-openvms*) # HMS: won't be found - ans=yes - ;; - *) ans=no - ;; - esac]) -ac_cv_var_sync_todr=$ans]) + +AC_MSG_CHECKING([if we should sync TODR clock every hour]) + +case "$host" in + *-*-nextstep*) + ans=yes + ;; + *-*-openvms*) # HMS: won't be found + ans=yes + ;; + *) + ans=no +esac + +AC_ARG_ENABLE( + [hourly-todr-sync], + AC_HELP_STRING( + [--enable-hourly-todr-sync], + [s if we should sync TODR hourly] + ), + [ans=$enableval] +) + +AC_MSG_RESULT([$ans]) + case "$ac_cv_var_sync_todr" in yes) AC_DEFINE(DOSYNCTODR, 1, [synch TODR hourly?]) ;; esac -AC_CACHE_CHECK(if we should avoid kernel FLL bug, ac_cv_var_kernel_fll_bug, -[AC_ARG_ENABLE(kernel-fll-bug, - AC_HELP_STRING([--enable-kernel-fll-bug], - [s if we should avoid a kernel FLL bug]), - [ans=$enableval], - [case "$host" in - *-*-solaris2.6) - unamev=`uname -v` - case "$unamev" in - Generic_105181-*) - old_IFS="$IFS" - IFS="-" - set $unamev - IFS="$old_IFS" - if test "$2" -ge 17 - then - # Generic_105181-17 and higher - ans=no - else - ans=yes - fi - ;; - *) ans=yes - ;; - esac - ;; - *-*-solaris2.7) - unamev=`uname -v` - case "$unamev" in - Generic_106541-*) - old_IFS="$IFS" - IFS="-" - set $unamev - IFS="$old_IFS" - if test "$2" -ge 07 - then - # Generic_106541-07 and higher - ans=no - else - ans=yes - fi - ;; - *) ans=yes - ;; - esac - ;; - *) ans=no - ;; + +AC_MSG_CHECKING([if we should avoid kernel FLL bug]) + +case "$host" in + *-*-solaris2.6) + unamev=`uname -v` + case "$unamev" in + Generic_105181-*) + old_IFS="$IFS" + IFS="-" + set $unamev + IFS="$old_IFS" + if test "$2" -ge 17 + then + # Generic_105181-17 and higher + ans=no + else + ans=yes + fi + ;; + *) + ans=yes esac - ]) -ac_cv_var_kernel_fll_bug=$ans]) -case "$ac_cv_var_kernel_fll_bug" in + ;; + *-*-solaris2.7) + unamev=`uname -v` + case "$unamev" in + Generic_106541-*) + old_IFS="$IFS" + IFS="-" + set $unamev + IFS="$old_IFS" + if test "$2" -ge 07 + then + # Generic_106541-07 and higher + ans=no + else + ans=yes + fi + ;; + *) + ans=yes + esac + ;; + *) + ans=no +esac + +AC_ARG_ENABLE( + [kernel-fll-bug], + AC_HELP_STRING( + [--enable-kernel-fll-bug], + [s if we should avoid a kernel FLL bug] + ), + [ans=$enableval] +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in yes) AC_DEFINE(KERNEL_FLL_BUG, 1, [Does the kernel have an FLL bug?]) ;; esac -AC_CACHE_CHECK(if we should use the IRIG sawtooth filter, ac_cv_var_irig_sucks, -[AC_ARG_ENABLE(irig-sawtooth, - AC_HELP_STRING([--enable-irig-sawtooth], - [s if we should enable the IRIG sawtooth filter]), - [ans=$enableval], - [case "$host" in - *-*-solaris2.[[89]]) - ans=yes - ;; - *-*-solaris2.1[[0-9]]*) - ans=yes - ;; - *) ans=no - ;; - esac - ]) -ac_cv_var_irig_sucks=$ans]) -case "$ac_cv_var_irig_sucks" in + +AC_MSG_CHECKING([if we should use the IRIG sawtooth filter]) + +case "$host" in + *-*-solaris2.[[89]]) + ans=yes + ;; + *-*-solaris2.1[[0-9]]*) + ans=yes + ;; + *) ans=no +esac + +AC_ARG_ENABLE( + [irig-sawtooth], + AC_HELP_STRING( + [--enable-irig-sawtooth], + [s if we should enable the IRIG sawtooth filter] + ), + [ans=$enableval] +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in yes) AC_DEFINE(IRIG_SUCKS, 1, [Should we use the IRIG sawtooth filter?]) ;; esac -AC_CACHE_CHECK(if we should enable NIST lockclock scheme, ac_cv_var_nist_lockclock, -[AC_ARG_ENABLE(nist, - AC_HELP_STRING([--enable-nist], - [- if we should enable the NIST lockclock scheme]), - [ans=$enableval],[ans=no]) -ac_cv_var_nist_lockclock=$ans]) -case "$ac_cv_var_nist_lockclock" in + +AC_MSG_CHECKING([if we should enable NIST lockclock scheme]) + +AC_ARG_ENABLE( + [nist], + AC_HELP_STRING( + [--enable-nist], + [- if we should enable the NIST lockclock scheme] + ), + [ans=$enableval], + [ans=no] +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in yes) AC_DEFINE(LOCKCLOCK, 1, [Should we align with the NIST lockclock scheme?]) ;; esac + +AC_MSG_CHECKING([if we want support for Samba's signing daemon]) + +AC_ARG_ENABLE( + [ntp-signd], + AC_HELP_STRING( + [--enable-ntp-signd], + [- Provide support for Samba's signing daemon, =/var/run/ntp_signd] + ), + [ans=$enableval], + [ans=no] +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in + no) + ntp_signd_path= + ;; + yes) + ntp_signd_path=/var/run/ntp_signd + ;; + *) + ntp_signd_path="$ans" +esac + +case "$ntp_signd_path" in + '') + wintime_default=no + ;; + *) + wintime_default=yes + AC_DEFINE(HAVE_NTP_SIGND, ,[Do we want support for Samba's signing daemon?]) + AC_DEFINE_UNQUOTED(NTP_SIGND_PATH, "$ntp_signd_path", [Path to sign daemon rendezvous socket]) +esac + + +AC_MSG_CHECKING([if we want the windows symmetric client hack]) + +# default is no, unless --enable-ntp-signd was given +ans=$wintime_default +unset wintime_default + +AC_ARG_ENABLE( + [wintime], + AC_HELP_STRING( + [--enable-wintime], + [- Provide the windows symmetric client hack] + ), + [ans=$enableval], +) + +AC_MSG_RESULT([$ans]) + +case "$ans" in + yes) + AC_DEFINE(WINTIME, ,[Do we want the windows symmetric client hack?]) +esac + + +AC_CHECK_HEADERS(sys/clockctl.h) + +case "$host" in + *-*-netbsd*) + ans=yes + ;; + *) ans=no + ;; +esac + +AC_ARG_ENABLE( + [clockctl], + AC_HELP_STRING( + [--enable-clockctl], + [s Use /dev/clockctl for non-root clock control] + ), + [ntp_use_dev_clockctl=$enableval], + [ntp_use_dev_clockctl=$ac_cv_header_sys_clockctl_h] +) + +AC_MSG_CHECKING([[if we should use /dev/clockctl]]) +AC_MSG_RESULT([$ntp_use_dev_clockctl]) + + +AC_CHECK_HEADERS([sys/capability.h]) +AC_CHECK_HEADERS([sys/prctl.h]) + +AC_MSG_CHECKING([[if we have linux capabilities (libcap)]]) + +case "$ac_cv_header_sys_capability_h$ac_cv_header_sys_prctl_h" in + yesyes) + ntp_have_linuxcaps=yes + ;; + *) + ntp_have_linuxcaps=no +esac + +AC_MSG_RESULT([$ntp_have_linuxcaps]) + + +AC_ARG_ENABLE( + [linuxcaps], + AC_HELP_STRING( + [--enable-linuxcaps], + [+ Use Linux capabilities for non-root clock control] + ), + [ntp_have_linuxcaps=$enableval] +) + + +case "$ntp_have_linuxcaps" in + yes) + AC_DEFINE(HAVE_LINUX_CAPABILITIES, ,[[Do we have Linux capabilities?]]) + LIBS="$LIBS -lcap" +esac + + +case "$ntp_use_dev_clockctl$ntp_have_linuxcaps" in + *yes*) + AC_DEFINE(HAVE_DROPROOT, ,[[Can we drop root privileges?]]) +esac + + +AC_CHECK_HEADERS([libscf.h]) + +case "$ac_cv_header_libscf_h" in + yes) + AC_SUBST(LSCF, [-lscf]) +esac + +AC_CHECK_FUNC( + [setppriv], + AC_DEFINE(HAVE_SOLARIS_PRIVS, ,[[Are Solaris privileges available?]]) +) + + # # ISC stuff # @@ -3966,7 +4343,7 @@ case "$enable_ipv6" in case "$host" in powerpc-ibm-aix4*) ;; *) - AC_DEFINE(WANT_IPV6, ,[ISC: Want IPv6?]) + AC_DEFINE(WANT_IPV6, ,[configure --enable-ipv6]) ;; esac ;; @@ -3974,54 +4351,67 @@ case "$enable_ipv6" in ;; esac -AC_MSG_CHECKING(for IPv6 structures) -AC_TRY_COMPILE([ -#include -#include -#include ], -[struct sockaddr_in6 sin6; return (0);], - [AC_MSG_RESULT(yes) - found_ipv6=yes], - [AC_MSG_RESULT(no) - found_ipv6=no]) + +AC_CACHE_CHECK( + [for IPv6 structures], + ac_cv_isc_found_ipv6, + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [ + #include + #include + #include + ], + [ + struct sockaddr_in6 sin6; + ] + ) + ], + [ac_cv_isc_found_ipv6=yes], + [ac_cv_isc_found_ipv6=no] + ) + ] +) # # See whether IPv6 support is provided via a Kame add-on. # This is done before other IPv6 linking tests so LIBS is properly set. # -AC_MSG_CHECKING(for Kame IPv6 support) +AC_MSG_CHECKING([for Kame IPv6 support]) AC_ARG_WITH(kame, - AC_HELP_STRING([--with-kame], [- =/usr/local/v6]), + [AC_HELP_STRING([--with-kame], [- =/usr/local/v6])], use_kame="$withval", use_kame="no") case "$use_kame" in - no) - ;; - yes) - kame_path=/usr/local/v6 - ;; - *) - kame_path="$use_kame" - ;; + no) + ;; + yes) + kame_path=/usr/local/v6 + ;; + *) + kame_path="$use_kame" + ;; esac case "$use_kame" in - no) - AC_MSG_RESULT(no) - ;; - *) - if test -f $kame_path/lib/libinet6.a; then - AC_MSG_RESULT($kame_path/lib/libinet6.a) - LIBS="-L$kame_path/lib -linet6 $LIBS" - else - AC_MSG_ERROR([$kame_path/lib/libinet6.a not found. + no) + AC_MSG_RESULT(no) + ;; + *) + if test -f $kame_path/lib/libinet6.a; then + AC_MSG_RESULT($kame_path/lib/libinet6.a) + LIBS="-L$kame_path/lib -linet6 $LIBS" + else + AC_MSG_ERROR([$kame_path/lib/libinet6.a not found. Please choose the proper path with the following command: configure --with-kame=PATH ]) - fi - ;; + fi + ;; esac # @@ -4033,139 +4423,210 @@ esac # netinet6/in6.h is needed for. # case "$host" in -*-bsdi4.[[01]]*) - ISC_PLATFORM_NEEDNETINET6IN6H="#define ISC_PLATFORM_NEEDNETINET6IN6H 1" - LWRES_PLATFORM_NEEDNETINET6IN6H="#define LWRES_PLATFORM_NEEDNETINET6IN6H 1" - isc_netinet6in6_hack="#include " - ;; -*) - ISC_PLATFORM_NEEDNETINET6IN6H="#undef ISC_PLATFORM_NEEDNETINET6IN6H" - LWRES_PLATFORM_NEEDNETINET6IN6H="#undef LWRES_PLATFORM_NEEDNETINET6IN6H" - isc_netinet6in6_hack="" - ;; + *-bsdi4.[[01]]*) + AC_DEFINE(ISC_PLATFORM_NEEDNETINET6IN6H, 1, [Do we need netinet6/in6.h?]) + isc_netinet6in6_hack="#include " + ;; + *) + isc_netinet6in6_hack="" esac # # This is similar to the netinet6/in6.h issue. # case "$host" in -*-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) - # UnixWare - # ISC_PLATFORM_NEEDNETINETIN6H="#define ISC_PLATFORM_NEEDNETINETIN6H 1" - # LWRES_PLATFORM_NEEDNETINETIN6H="#define LWRES_PLATFORM_NEEDNETINETIN6H 1" - AC_DEFINE(ISC_PLATFORM_FIXIN6ISADDR, 1,[Do we need to fix in6isaddr?]) - isc_netinetin6_hack="#include " - ;; -*) - # ISC_PLATFORM_NEEDNETINETIN6H="#undef ISC_PLATFORM_NEEDNETINETIN6H" - # LWRES_PLATFORM_NEEDNETINETIN6H="#undef LWRES_PLATFORM_NEEDNETINETIN6H" - # ISC_PLATFORM_FIXIN6ISADDR="#undef ISC_PLATFORM_FIXIN6ISADDR" - isc_netinetin6_hack="" - ;; + *-sco-sysv*uw*|*-*-sysv*UnixWare*|*-*-sysv*OpenUNIX*) + AC_DEFINE(ISC_PLATFORM_FIXIN6ISADDR, 1,[Do we need to fix in6isaddr?]) + isc_netinetin6_hack="#include " + ;; + *) + isc_netinetin6_hack="" esac -AC_MSG_CHECKING([for struct if_laddrconf]) -AC_TRY_LINK([ -#include -#include -],[ struct if_laddrconf a; ], - [AC_MSG_RESULT(yes) - AC_DEFINE(ISC_PLATFORM_HAVEIF_LADDRCONF, , - [ISC: have struct if_laddrconf?])], - [AC_MSG_RESULT(no)]) - -AC_MSG_CHECKING([for struct if_laddrreq]) -AC_TRY_LINK([ -#include -#include -],[ struct if_laddrreq a; ], - [AC_MSG_RESULT(yes) - AC_DEFINE(ISC_PLATFORM_HAVEIF_LADDRREQ, , - [ISC: have struct if_laddrreq?])], - [AC_MSG_RESULT(no)]) - -case "$found_ipv6" in +case "$ac_cv_isc_found_ipv6" in yes) - AC_DEFINE(ISC_PLATFORM_HAVEIPV6, ,[ISC: Have IPv6?]) + AC_DEFINE(ISC_PLATFORM_HAVEIPV6, ,[have IPv6?]) - AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_scope_id], , , -[ -#include -#include -#include -$isc_netinetin6_hack -$isc_netinet6in6_hack -]) + AC_CACHE_CHECK( + [for in6_pktinfo], + ac_cv_have_in6_pktinfo, + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [ + #include + #include + #include + $isc_netinetin6_hack + $isc_netinet6in6_hack + ], + [ + struct in6_pktinfo xyzzy; + ] + ) + ], + [ac_cv_have_in6_pktinfo=yes], + [ac_cv_have_in6_pktinfo=no] + ) + ] + ) + + case "$ac_cv_have_in6_pktinfo" in + yes) + AC_DEFINE(ISC_PLATFORM_HAVEIN6PKTINFO, , [have struct in6_pktinfo?]) + esac - AC_MSG_CHECKING(for in6_pktinfo) - AC_TRY_COMPILE([ -#include -#include -#include -$isc_netinetin6_hack -$isc_netinet6in6_hack -], - [struct in6_pktinfo xyzzy; return (0);], - [AC_MSG_RESULT(yes) - AC_DEFINE(ISC_PLATFORM_HAVEIN6PKTINFO, , - [ISC: Have struct in6_pktinfo?])], - [AC_MSG_RESULT(no -- disabling runtime ipv6 support)]) # HMS: Use HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID instead? - AC_MSG_CHECKING(for sin6_scope_id in struct sockaddr_in6) - AC_TRY_COMPILE([ -#include -#include -#include -$isc_netinetin6_hack -$isc_netinet6in6_hack -], - [struct sockaddr_in6 xyzzy; xyzzy.sin6_scope_id = 0; return (0);], - [AC_MSG_RESULT(yes) - AC_DEFINE(ISC_PLATFORM_HAVESCOPEID, , - [ISC: Have sin6_scope_id?])], - result="#define LWRES_HAVE_SIN6_SCOPE_ID 1"], - [AC_MSG_RESULT(no) - ISC_PLATFORM_HAVESCOPEID="#undef ISC_PLATFORM_HAVESCOPEID" - result="#undef LWRES_HAVE_SIN6_SCOPE_ID"]) - LWRES_HAVE_SIN6_SCOPE_ID="$result" + AC_CACHE_CHECK( + [for sockaddr_in6.sin6_scope_id], + ac_cv_have_sin6_scope_id, + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [ + #include + #include + #include + $isc_netinetin6_hack + $isc_netinet6in6_hack + ], + [ + struct sockaddr_in6 xyzzy; + xyzzy.sin6_scope_id = 0; + ] + ) + ], + [ac_cv_have_sin6_scope_id=yes], + [ac_cv_have_sin6_scope_id=no] + ) + ] + ) - ;; + case "$ac_cv_have_sin6_scope_id" in + yes) + AC_DEFINE(ISC_PLATFORM_HAVESCOPEID, , [have sin6_scope_id?]) + esac esac -# We need this check run all the time... -AC_MSG_CHECKING(for in6addr_any) -AC_TRY_LINK([ -#include -#include -#include -$isc_netinetin6_hack -$isc_netinet6in6_hack -$isc_in_addr6_hack -], - [[struct in6_addr in6; in6 = in6addr_any; return (in6.s6_addr[0]);]], - [AC_MSG_RESULT(yes)], - [AC_MSG_RESULT(no) - AC_DEFINE(ISC_PLATFORM_NEEDIN6ADDRANY, , - [ISC: Need in6addr_any?])] + +# We need this check run even without ac_cv_isc_found_ipv6=yes + +AC_CACHE_CHECK( + [for in6addr_any], + ac_cv_have_in6addr_any, + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [ + #include + #include + #include + $isc_netinetin6_hack + $isc_netinet6in6_hack + ], + [ + struct in6_addr in6; + in6 = in6addr_any; + ] + ) + ], + [ac_cv_have_in6addr_any=yes], + [ac_cv_have_in6addr_any=no] + ) + ] ) +case "$ac_cv_have_in6addr_any" in + no) + AC_DEFINE(ISC_PLATFORM_NEEDIN6ADDRANY, , [missing in6addr_any?]) +esac + + +AC_CACHE_CHECK( + [for struct if_laddrconf], + ac_cv_isc_struct_if_laddrconf, + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [ + #include + #include + ], + [ + struct if_laddrconf a; + ] + ) + ], + [ac_cv_isc_struct_if_laddrconf=yes], + [ac_cv_isc_struct_if_laddrconf=no] + ) + ] +) + +case "$ac_cv_isc_struct_if_laddrconf" in + yes) + AC_DEFINE(ISC_PLATFORM_HAVEIF_LADDRCONF, , [have struct if_laddrconf?]) +esac + +AC_CACHE_CHECK( + [for struct if_laddrreq], + ac_cv_isc_struct_if_laddrreq, + [ + AC_COMPILE_IFELSE( + [ + AC_LANG_PROGRAM( + [ + #include + #include + ], + [ + struct if_laddrreq a; + ] + ) + ], + [ac_cv_isc_struct_if_laddrreq=yes], + [ac_cv_isc_struct_if_laddrreq=no] + ) + ] +) + +case "$ac_cv_isc_struct_if_laddrreq" in + yes) + AC_DEFINE(ISC_PLATFORM_HAVEIF_LADDRREQ, , [have struct if_laddrreq?]) +esac + # # Look for a sysctl call to get the list of network interfaces. # -AC_MSG_CHECKING(for interface list sysctl) -AC_EGREP_CPP(found_rt_iflist, [ -#include -#include -#include -#ifdef NET_RT_IFLIST -found_rt_iflist -#endif -], - [AC_MSG_RESULT(yes) - AC_DEFINE(HAVE_IFLIST_SYSCTL,1,[ISC: Use iflist_sysctl?])], - [AC_MSG_RESULT(no)]) +AC_CACHE_CHECK( + [for interface list sysctl], + ac_cv_iflist_sysctl, + AC_EGREP_CPP( + [found_rt_iflist], + [ + #include + #include + #include + #ifdef NET_RT_IFLIST + found_rt_iflist + #endif + ], + [ac_cv_iflist_sysctl=yes], + [ac_cv_iflist_sysctl=no] + ) +) + +case "$ac_cv_iflist_sysctl" in + yes) + AC_DEFINE(HAVE_IFLIST_SYSCTL,1,[have iflist_sysctl?]) +esac + ### diff --git a/contrib/ntp/flock-build b/contrib/ntp/flock-build index 557809d346c..d80fc6d3d48 100755 --- a/contrib/ntp/flock-build +++ b/contrib/ntp/flock-build @@ -5,14 +5,26 @@ PARSE="--enable-parse-clocks" #PARSE= STD="--enable-simulator" +case "$SIMUL" in + '') PARALLEL_BUILDS=1 + ;; + *) PARALLEL_BUILDS=$SIMUL +esac + +case "$PARALLEL_BUILDS" in + 1) ;; + *) echo Launching $PARALLEL_BUILDS parallel builds on each machine +esac + # Backroom: -# beauregard freebsd-6 -# o churchy alpha-dec-osf5.1 +# barnstable freebsd-6.1 +# beauregard freebsd-6.0 +# X churchy alpha-dec-osf5.1 # deacon sparc-sun-solaris2.10 -# grundoon freebsd-6.1 +# grundoon freebsd-6.2 # howland freebsd-6.1 -# o macabre sparc-sun-solaris2.8 -# o mort sparc-sun-solaris2.8 +# o macabre freebsd-6.1-STABLE +# o mort freebsd-6.1 # whimsy sparc-sun-solaris2.10 # Campus: @@ -23,10 +35,11 @@ STD="--enable-simulator" # * pogo sparc-sun-solaris2.10 # * rackety freebsd-6.1 +# HMS: we need $PWD because solaris produces /deacon/backroom when +# we are in /backroom and in general there is no /deacon/backroom. c_d=${PWD:-`pwd`} SIG=`perl -e 'print rand'` -echo $SIG > .buildkey case "$LIST" in '') LIST="baldwin bridgeport cowbird malarky pogo rackety" ;; @@ -34,19 +47,60 @@ esac for i in $LIST do - echo $i - case "1" in - 0) - ssh $i "cd $c_d ; ./build $SIG $PARSE $STD $BUILD_ARGS" & - ssh $i "cd $c_d ; ./build $SIG $PARSE $STD --without-crypto $BUILD_ARGS" & - ssh $i "cd $c_d ; ./build $SIG $STD --disable-all-clocks $BUILD_ARGS" & - ;; - 1) ssh $i "cd $c_d ; \ -./build $SIG $PARSE $STD $BUILD_ARGS ; \ -./build $SIG $PARSE $STD --disable-debugging $BUILD_ARGS ; \ -./build $SIG $PARSE $STD --without-crypto $BUILD_ARGS ; \ -./build $SIG $STD --disable-all-clocks $BUILD_ARGS" \ -& - ;; + SKIPTHIS=0 + [ -f .buildkey-$i ] && SKIPTHIS=1 + case "$SKIPTHIS" in + 1) + echo flock-build running on $i? check LIST, skipping + ;; + 0) + echo $i + echo $SIG > .buildkey-$i + case "1" in + 0) + ssh $i "cd $c_d ; ./build $SIG $PARSE $STD $BUILD_ARGS" & + ssh $i "cd $c_d ; ./build $SIG $PARSE $STD --without-crypto $BUILD_ARGS" & + ssh $i "cd $c_d ; ./build $SIG $STD --disable-all-clocks $BUILD_ARGS" & + ;; + 1) + cat > .flockbuild-$i-$SIG </dev/null & + esac esac done +echo `date -u '+%H:%M:%S'` flock-build launched diff --git a/contrib/ntp/html/build/hints/solaris.xtra.4095849 b/contrib/ntp/html/build/hints/solaris.xtra.4095849 new file mode 100644 index 00000000000..8d3ce8074cf --- /dev/null +++ b/contrib/ntp/html/build/hints/solaris.xtra.4095849 @@ -0,0 +1,74 @@ + Bug Id: 4095849 + Category: kernel + Subcategory: syscall + State: evaluated + Synopsis: time_constant value >6 with PLL in use leads to integer divide + zero trap panic + Description: +If the time_constant parameter is 7 or higher, and the phase-lock looping model +is in use, the system will take a "integer divide zero trap" panic in +the clock routine as soon as the time_offset becomes non-zero. + +time_constant defaults to 0. The only place it is set is in the ntp_adjtime +system call, from the 'constant' element of the timex structure argument. + + Work around: +Never set the constant element of the timex structure passed to ntp_adjtime to +a value larger than 6. + +satish.mynam@Eng 1998-04-30 +1. Use Sun's version of NTP software instead of PD version. This problem +is not seen with Sun's NTP version (which is mostly eqivalent to PD NTP 3.4 +plus some Sun's local functionality futures). + +2. Workaround for the public domain NTP version ONLY: + ===================================================== +The workaround for public domain NTP version is to disable the +KERNEL_PLL from the NTP code. This way ntp_Adjtime() system call is +totally bypassed without sacrificing any of the functionality of the +NTP. The only hit you might see is the way kernel precision timminig +is done without the PLL algorithm in the kernel. + + The easiest way to disable ntp_adjtime option is(without changing + any makefiles or other config files) to disable the KERNEL_PLL + value in the ./config.h file. + +After doing a ./configure for probing for all the necessary tools(compilers, +os version, libraries), please comment out KERNEL_PLL macro in +the ./config.h file. This will disable the KERNEL_PLL part of the source +code and the newly obtained xntpd is just similar to the old one but it +does not use ntp_adjtime() system call. This prevents it from panic'ng +the kernel. + +/*#define KERNEL_PLL 1*/ + +I complied a new xntpd binary this way and it does nothave any ntp_adjtime() +related stuff. + +Default: +======= +/net/divya/export/home/mynam/public_domain/ntp/xntp3-5.92/xntpd>strings +xntpd | +grep ntp_adjtime +354:adj_frequency: ntp_adjtime failed: %m +357:loop_config: ntp_adjtime() failed: %m +435:get_kernel_info: ntp_adjtime() failed: %m + +With KERNEL_PLL disabled in config.h file +-======================= + +/net/divya/export/home/mynam/public_domain/ntp/xntp3-5.92/xntpd>strings +xntpd.nopll | grep ntp_adjtime + + Integrated in releases: + Duplicate of: + Patch id: + See also: 4133517 + Summary: +If the time_constant parameter is 7 or higher, and the phase-lock looping model +is in use, the system will take a "integer divide zero trap" panic in +the clock routine as soon as the time_offset becomes non-zero. + +time_constant defaults to 0. The only place it is set is in the ntp_adjtime +system call, from the 'constant' element of the timex structure argument. +---------------------------------------------------------------------------- diff --git a/contrib/ntp/html/copyright.html b/contrib/ntp/html/copyright.html index 471069abcc0..cf34979060d 100644 --- a/contrib/ntp/html/copyright.html +++ b/contrib/ntp/html/copyright.html @@ -19,7 +19,7 @@
 ***********************************************************************
 *                                                                     *
-* Copyright (c) David L. Mills 1992-2008                              *
+* Copyright (c) David L. Mills 1992-2009                              *
 *                                                                     *
 * Permission to use, copy, modify, and distribute this software and   *
 * its documentation for any purpose with or without fee is hereby     *
diff --git a/contrib/ntp/html/drivers/driver40.html b/contrib/ntp/html/drivers/driver40.html
index 54e17474659..1901dcdbff7 100644
--- a/contrib/ntp/html/drivers/driver40.html
+++ b/contrib/ntp/html/drivers/driver40.html
@@ -5,7 +5,10 @@
 	
 		
 		
+		
 		JJY Receivers
+		
+		
 		
 	
 
@@ -13,122 +16,174 @@
 		

JJY Receivers


Synopsis

- Address: 127.127.40.u
- Reference ID: JJY
- Driver ID: JJY
- Serial Port: /dev/jjyu; 9600 baud, 8-bits, no parity, 1 stop bit + Address: 127.127.40.u
+ Reference ID: JJY
+ Driver ID: JJY
+ Serial Port: /dev/jjyu; 9600|4800(See corresponding receiver) baud, 8-bits, no parity, 1 stop bit

Description

This driver supports the following JJY receivers sold in Japan.

  • Tristate Ltd. JJY01 http://www.tristate.ne.jp/ (Japanese only)
    -
    Time code format -

    - - - - - - - - - - - - - - - - -
    Command Reply
    date<CR><LF> YYYY/MM/DD WWW<CR><LF>
    stim<CR><LF> HH:MM:SS<CR><LF>
    -
    -
    NTP configuration ( ntp.conf ) +
    NTP configuration ( ntp.conf )

    server   127.127.40.X   mode 1


    -
    -
  • C-DEX Co.,Ltd. JST2000 http://www.c-dex.co.jp/ (Japanese only)
    -
    -
    Time code format -

    - - - - - - - - - - - -
    Command Reply
    <ENQ>1J<ETX> <STX>JYYMMDD HHMMSSS<ETX>
    -
    -
    NTP configuration ( ntp.conf ) + +
    RS-232C
    -

    server   127.127.40.X   mode 2

    +

    9600 Baud


    -
    -
  • -

    Echo Keisokuki Co.,Ltd. LT-2000 http://www.clock.co.jp/ (Japanese only)

    -
    -
    Time code format + +
    Time code format

    - + + + + + + + + + + + + + +
    Command  --> Reply
    date<CR><LF> --> YYYY/MM/DD WWW<CR><LF>
    stim<CR><LF> --> HH:MM:SS<CR><LF>
    +
    +
    +
    +
  • C-DEX Co.,Ltd. JST2000 http://www.c-dex.co.jp/ (Japanese only)
    +
    +
    NTP configuration ( ntp.conf )
    +
    +

    server   127.127.40.X   mode 2

    +
    +
    +
    RS-232C
    +
    +

    9600 Baud

    +
    +
    +
    Time code format
    +

    + + + + + + + + + + + +
    Command --> Reply
    <ENQ>1J<ETX> --> <STX>JYYMMDD HHMMSSS<ETX>
    +
    +
    +
    +
  • +

    Echo Keisokuki Co.,Ltd. LT-2000 http://www.clock.co.jp/ (Japanese only)

    +
    +
    NTP configuration ( ntp.conf )
    +
    +

    server   127.127.40.X   mode 3

    +
    +
    +
    RS-232C
    +
    +

    9600 Baud

    +
    +
    +
    Time code format
    +

    + + + + - + - + - - + +
    Command -->  Reply
    C -->  ( Mode 2 : Continuous )
    ( Every second before 0.5 second ) YYMMDDWHHMMSS<ST1><ST2><ST3><ST4><CR>
    #( Mode 1 : Request&Send ) --> ( Mode 1 : Request&Send )

    -
    NTP configuration ( ntp.conf ) + +
    +
  • +

    CITIZEN T.I.C. CO.,LTD. JJY-200 http://www.tic-citizen.co.jp/ (Japanese only)

    +
    +
    NTP configuration ( ntp.conf )
    -

    server   127.127.40.X   mode 3

    +

    server   127.127.40.X   mode 4

    +
    +
    +
    RS-232C
    +
    +

    4800 Baud

    +
    +
    +
    Time code format
    +

    + + + + + + + + + + + +
    Command --> Reply
    ( Every second )'XX YY/MM/DD W HH:MM:SS<CR>
    +
    +

JJY is the radio station which transmites the JST (Japan Standard Time) in long wave radio. The station JJY is operated by the National Institute of Information and Communications Technology. An operating announcement and some information are avaiable from http://www.nict.go.jp/ (English and Japanese) and http://jjy.nict.go.jp/ (English and Japanese)

The user is expected to provide a symbolic link to an available serial port device. This is typically performed by a command such as:

-

ln -s /dev/ttyS0 /dev/jjy0

-

Windows NT does not support symbolic links to device files. COMX: is the unit used by the driver, based on the refclock unit number, where unit 1 corresponds to COM1: and unit 3 corresponds to COM3:

+

ln -s /dev/ttyS0 /dev/jjy0

+

Windows NT does not support symbolic links to device files. COMX: is the unit used by the driver, based on the refclock unit number, where unit 1 corresponds to COM1: and unit 3 corresponds to COM3:

Monitor Data

-

The driver writes each timecode as received to the clockstats file.

+

The driver writes each timecode as received to the clockstats file.

Fudge Factors

-
time1 time +
time1 time
Specifies the time offset calibration factor, in seconds and fraction, with default 0.0. -
time2 time +
time2 time
Not used by this driver. -
stratum number +
stratum number
Specifies the driver stratum, in decimal from 0 to 15, with default 0. -
refid string -
Specifies the driver reference identifier, an ASCII string from one to four characters, with default JJY. -
flag1 0 | 1 +
refid string +
Specifies the driver reference identifier, an ASCII string from one to four characters, with default JJY. +
flag1 0 | 1
Not used by this driver. -
flag2 0 | 1 +
flag2 0 | 1
Not used by this driver. -
flag3 0 | 1 +
flag3 0 | 1
Not used by this driver. -
flag4 0 | 1 +
flag4 0 | 1
Not used by this driver.

- \ No newline at end of file + diff --git a/contrib/ntp/include/Makefile.in b/contrib/ntp/include/Makefile.in index b65fac86507..70b0330d768 100644 --- a/contrib/ntp/include/Makefile.in +++ b/contrib/ntp/include/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +15,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -50,22 +48,52 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive HEADERS = $(noinst_HEADERS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -81,10 +109,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -97,11 +121,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -115,6 +138,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -128,8 +152,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -139,6 +162,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -152,16 +176,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -173,29 +192,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ #AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies AUTOMAKE_OPTIONS = ../util/ansi2knr @@ -265,14 +296,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign include/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -290,6 +321,7 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo @@ -297,10 +329,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -325,15 +353,14 @@ $(RECURSIVE_TARGETS): else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -360,16 +387,16 @@ maintainer-clean-recursive: else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -377,14 +404,14 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -396,81 +423,101 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ @@ -500,6 +547,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -510,8 +558,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -519,18 +566,38 @@ dvi-am: html: html-recursive +html-am: + info: info-recursive info-am: install-data-am: +install-dvi: install-dvi-recursive + +install-dvi-am: + install-exec-am: +install-html: install-html-recursive + +install-html-am: + install-info: install-info-recursive +install-info-am: + install-man: +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -549,22 +616,25 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/ntp/include/copyright.def b/contrib/ntp/include/copyright.def index f86034bc3ac..ccc3e91cf21 100644 --- a/contrib/ntp/include/copyright.def +++ b/contrib/ntp/include/copyright.def @@ -1,9 +1,9 @@ /* -*- Mode: Text -*- */ copyright = { - date = "1970-2008"; + date = "1970-2009"; owner = "David L. Mills and/or others"; - eaddr = "http://bugs.ntp.isc.org, bugs@ntp.org"; + eaddr = "http://bugs.ntp.org, bugs@ntp.org"; type = note; text = "see html/copyright.html"; }; diff --git a/contrib/ntp/include/isc/Makefile.in b/contrib/ntp/include/isc/Makefile.in index 26ea36f2acf..531da09b454 100644 --- a/contrib/ntp/include/isc/Makefile.in +++ b/contrib/ntp/include/isc/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +15,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -50,6 +48,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = HEADERS = $(noinst_HEADERS) @@ -57,8 +56,6 @@ ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -74,10 +71,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -90,11 +83,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -108,6 +100,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -121,8 +114,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -132,6 +124,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -145,16 +138,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -166,29 +154,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ #AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies AUTOMAKE_OPTIONS = ../util/ansi2knr @@ -234,14 +234,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/isc/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign include/isc/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/isc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign include/isc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -259,6 +259,7 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo @@ -266,82 +267,85 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -369,6 +373,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -379,8 +384,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am @@ -388,18 +392,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -418,18 +442,23 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-info-am + uninstall-am + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/ntp/include/ntp_debug.h b/contrib/ntp/include/ntp_debug.h index 376b24b957d..55b2e1a76d8 100644 --- a/contrib/ntp/include/ntp_debug.h +++ b/contrib/ntp/include/ntp_debug.h @@ -13,11 +13,13 @@ */ #ifdef DEBUG -#define DPRINTF(_lvl_, _arg_) \ - if (debug >= (_lvl_)) \ - printf _arg_; +#define DPRINTF(_lvl_, _arg_) \ + do { \ + if (debug >= (_lvl_)) \ + printf _arg_; \ + } while (0) #else -#define DPRINTF(_lvl_, _arg_) +#define DPRINTF(_lvl_, _arg_) do {} while (0) #endif #endif diff --git a/contrib/ntp/include/version.def b/contrib/ntp/include/version.def index b17d656155f..f0dc444146e 100644 --- a/contrib/ntp/include/version.def +++ b/contrib/ntp/include/version.def @@ -1 +1 @@ -version = '4.2.4p5'; +version = '4.2.4p8'; diff --git a/contrib/ntp/kernel/Makefile.in b/contrib/ntp/kernel/Makefile.in index 1f39c1adf59..b00e41a72d2 100644 --- a/contrib/ntp/kernel/Makefile.in +++ b/contrib/ntp/kernel/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -13,15 +14,12 @@ # PARTICULAR PURPOSE. @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -48,21 +46,51 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -78,10 +106,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -94,11 +118,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -112,6 +135,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -125,8 +149,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -136,6 +159,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -149,16 +173,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -170,29 +189,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ #AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies AUTOMAKE_OPTIONS = ../util/ansi2knr @@ -206,14 +237,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign kernel/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign kernel/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign kernel/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign kernel/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -231,6 +262,7 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo @@ -238,10 +270,6 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, @@ -266,15 +294,14 @@ $(RECURSIVE_TARGETS): else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -301,16 +328,16 @@ maintainer-clean-recursive: else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -318,14 +345,14 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -337,81 +364,101 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ @@ -441,6 +488,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -451,8 +499,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive @@ -460,18 +507,38 @@ dvi-am: html: html-recursive +html-am: + info: info-recursive info-am: install-data-am: +install-dvi: install-dvi-recursive + +install-dvi-am: + install-exec-am: +install-html: install-html-recursive + +install-html-am: + install-info: install-info-recursive +install-info-am: + install-man: +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -490,22 +557,25 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-info-am +uninstall-am: -uninstall-info: uninstall-info-recursive +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ - clean clean-generic clean-libtool clean-recursive ctags \ - ctags-recursive distclean distclean-generic distclean-libtool \ - distclean-recursive distclean-tags distdir dvi dvi-am html \ +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-generic mostlyclean-libtool \ - mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ - uninstall uninstall-am uninstall-info-am + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/ntp/kernel/sys/Makefile.in b/contrib/ntp/kernel/sys/Makefile.in index e24a0e3049b..4565a2e8a76 100644 --- a/contrib/ntp/kernel/sys/Makefile.in +++ b/contrib/ntp/kernel/sys/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +15,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = ../.. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -50,6 +48,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = HEADERS = $(noinst_HEADERS) @@ -57,8 +56,6 @@ ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -74,10 +71,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -90,11 +83,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -108,6 +100,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -121,8 +114,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -132,6 +124,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -145,16 +138,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -166,29 +154,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ #AUTOMAKE_OPTIONS = ../../util/ansi2knr no-dependencies AUTOMAKE_OPTIONS = ../../util/ansi2knr @@ -206,14 +206,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign kernel/sys/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign kernel/sys/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign kernel/sys/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign kernel/sys/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -231,6 +231,7 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo @@ -238,82 +239,85 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -341,6 +345,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -351,8 +356,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool \ - distclean-tags +distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am @@ -360,18 +364,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -390,18 +414,23 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-info-am + uninstall-am + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/ntp/libntp/Makefile.in b/contrib/ntp/libntp/Makefile.in index 802ba71913b..e91e0a3fb3b 100644 --- a/contrib/ntp/libntp/Makefile.in +++ b/contrib/ntp/libntp/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,15 +16,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -52,6 +50,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru libntp_a_AR = $(AR) $(ARFLAGS) @@ -93,17 +92,19 @@ libntpsim_a_AR = $(AR) $(ARFLAGS) libntpsim_a_LIBADD = am_libntpsim_a_OBJECTS = systime_s$U.$(OBJEXT) $(am__objects_1) libntpsim_a_OBJECTS = $(am_libntpsim_a_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libntp_a_SOURCES) $(EXTRA_libntp_a_SOURCES) \ $(libntpsim_a_SOURCES) DIST_SOURCES = $(libntp_a_SOURCES) $(EXTRA_libntp_a_SOURCES) \ @@ -113,8 +114,6 @@ ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -130,10 +129,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -146,11 +141,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -164,6 +158,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -177,8 +172,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -188,6 +182,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -201,16 +196,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -222,29 +212,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ #AUTOMAKE_OPTIONS = ../ansi2knr no-dependencies AUTOMAKE_OPTIONS = ../util/ansi2knr @@ -287,14 +289,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libntp/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign libntp/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libntp/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign libntp/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -312,6 +314,7 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) @@ -330,7 +333,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c ../util/ansi2knr: - cd ../util && $(MAKE) $(AM_MAKEFLAGS) ansi2knr + $(am__cd) ../util && $(MAKE) $(AM_MAKEFLAGS) ./ansi2knr mostlyclean-kr: -test "$U" = "" || rm -f *_.c @@ -418,386 +421,386 @@ mostlyclean-kr: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ymd2yd$U.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< assertions_.o: assertions_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assertions_.o -MD -MP -MF "$(DEPDIR)/assertions_.Tpo" -c -o assertions_.o `test -f 'assertions_.c' || echo '$(srcdir)/'`assertions_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/assertions_.Tpo" "$(DEPDIR)/assertions_.Po"; else rm -f "$(DEPDIR)/assertions_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assertions_.o -MD -MP -MF $(DEPDIR)/assertions_.Tpo -c -o assertions_.o `test -f 'assertions_.c' || echo '$(srcdir)/'`assertions_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/assertions_.Tpo $(DEPDIR)/assertions_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='assertions_.c' object='assertions_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o assertions_.o `test -f 'assertions_.c' || echo '$(srcdir)/'`assertions_.c assertions_.obj: assertions_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assertions_.obj -MD -MP -MF "$(DEPDIR)/assertions_.Tpo" -c -o assertions_.obj `if test -f 'assertions_.c'; then $(CYGPATH_W) 'assertions_.c'; else $(CYGPATH_W) '$(srcdir)/assertions_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/assertions_.Tpo" "$(DEPDIR)/assertions_.Po"; else rm -f "$(DEPDIR)/assertions_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assertions_.obj -MD -MP -MF $(DEPDIR)/assertions_.Tpo -c -o assertions_.obj `if test -f 'assertions_.c'; then $(CYGPATH_W) 'assertions_.c'; else $(CYGPATH_W) '$(srcdir)/assertions_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/assertions_.Tpo $(DEPDIR)/assertions_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='assertions_.c' object='assertions_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o assertions_.obj `if test -f 'assertions_.c'; then $(CYGPATH_W) 'assertions_.c'; else $(CYGPATH_W) '$(srcdir)/assertions_.c'; fi` assertions.o: $(srcdir)/../libisc/assertions.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assertions.o -MD -MP -MF "$(DEPDIR)/assertions.Tpo" -c -o assertions.o `test -f '$(srcdir)/../libisc/assertions.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/assertions.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/assertions.Tpo" "$(DEPDIR)/assertions.Po"; else rm -f "$(DEPDIR)/assertions.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assertions.o -MD -MP -MF $(DEPDIR)/assertions.Tpo -c -o assertions.o `test -f '$(srcdir)/../libisc/assertions.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/assertions.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/assertions.Tpo $(DEPDIR)/assertions.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/assertions.c' object='assertions.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o assertions.o `test -f '$(srcdir)/../libisc/assertions.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/assertions.c assertions.obj: $(srcdir)/../libisc/assertions.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assertions.obj -MD -MP -MF "$(DEPDIR)/assertions.Tpo" -c -o assertions.obj `if test -f '$(srcdir)/../libisc/assertions.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/assertions.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/assertions.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/assertions.Tpo" "$(DEPDIR)/assertions.Po"; else rm -f "$(DEPDIR)/assertions.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT assertions.obj -MD -MP -MF $(DEPDIR)/assertions.Tpo -c -o assertions.obj `if test -f '$(srcdir)/../libisc/assertions.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/assertions.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/assertions.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/assertions.Tpo $(DEPDIR)/assertions.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/assertions.c' object='assertions.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o assertions.obj `if test -f '$(srcdir)/../libisc/assertions.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/assertions.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/assertions.c'; fi` error_.o: error_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error_.o -MD -MP -MF "$(DEPDIR)/error_.Tpo" -c -o error_.o `test -f 'error_.c' || echo '$(srcdir)/'`error_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/error_.Tpo" "$(DEPDIR)/error_.Po"; else rm -f "$(DEPDIR)/error_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error_.o -MD -MP -MF $(DEPDIR)/error_.Tpo -c -o error_.o `test -f 'error_.c' || echo '$(srcdir)/'`error_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/error_.Tpo $(DEPDIR)/error_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='error_.c' object='error_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o error_.o `test -f 'error_.c' || echo '$(srcdir)/'`error_.c error_.obj: error_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error_.obj -MD -MP -MF "$(DEPDIR)/error_.Tpo" -c -o error_.obj `if test -f 'error_.c'; then $(CYGPATH_W) 'error_.c'; else $(CYGPATH_W) '$(srcdir)/error_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/error_.Tpo" "$(DEPDIR)/error_.Po"; else rm -f "$(DEPDIR)/error_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error_.obj -MD -MP -MF $(DEPDIR)/error_.Tpo -c -o error_.obj `if test -f 'error_.c'; then $(CYGPATH_W) 'error_.c'; else $(CYGPATH_W) '$(srcdir)/error_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/error_.Tpo $(DEPDIR)/error_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='error_.c' object='error_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o error_.obj `if test -f 'error_.c'; then $(CYGPATH_W) 'error_.c'; else $(CYGPATH_W) '$(srcdir)/error_.c'; fi` error.o: $(srcdir)/../libisc/error.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error.o -MD -MP -MF "$(DEPDIR)/error.Tpo" -c -o error.o `test -f '$(srcdir)/../libisc/error.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/error.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/error.Tpo" "$(DEPDIR)/error.Po"; else rm -f "$(DEPDIR)/error.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error.o -MD -MP -MF $(DEPDIR)/error.Tpo -c -o error.o `test -f '$(srcdir)/../libisc/error.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/error.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/error.Tpo $(DEPDIR)/error.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/error.c' object='error.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o error.o `test -f '$(srcdir)/../libisc/error.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/error.c error.obj: $(srcdir)/../libisc/error.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error.obj -MD -MP -MF "$(DEPDIR)/error.Tpo" -c -o error.obj `if test -f '$(srcdir)/../libisc/error.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/error.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/error.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/error.Tpo" "$(DEPDIR)/error.Po"; else rm -f "$(DEPDIR)/error.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT error.obj -MD -MP -MF $(DEPDIR)/error.Tpo -c -o error.obj `if test -f '$(srcdir)/../libisc/error.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/error.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/error.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/error.Tpo $(DEPDIR)/error.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/error.c' object='error.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o error.obj `if test -f '$(srcdir)/../libisc/error.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/error.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/error.c'; fi` interfaceiter_.o: interfaceiter_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT interfaceiter_.o -MD -MP -MF "$(DEPDIR)/interfaceiter_.Tpo" -c -o interfaceiter_.o `test -f 'interfaceiter_.c' || echo '$(srcdir)/'`interfaceiter_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/interfaceiter_.Tpo" "$(DEPDIR)/interfaceiter_.Po"; else rm -f "$(DEPDIR)/interfaceiter_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT interfaceiter_.o -MD -MP -MF $(DEPDIR)/interfaceiter_.Tpo -c -o interfaceiter_.o `test -f 'interfaceiter_.c' || echo '$(srcdir)/'`interfaceiter_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/interfaceiter_.Tpo $(DEPDIR)/interfaceiter_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='interfaceiter_.c' object='interfaceiter_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o interfaceiter_.o `test -f 'interfaceiter_.c' || echo '$(srcdir)/'`interfaceiter_.c interfaceiter_.obj: interfaceiter_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT interfaceiter_.obj -MD -MP -MF "$(DEPDIR)/interfaceiter_.Tpo" -c -o interfaceiter_.obj `if test -f 'interfaceiter_.c'; then $(CYGPATH_W) 'interfaceiter_.c'; else $(CYGPATH_W) '$(srcdir)/interfaceiter_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/interfaceiter_.Tpo" "$(DEPDIR)/interfaceiter_.Po"; else rm -f "$(DEPDIR)/interfaceiter_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT interfaceiter_.obj -MD -MP -MF $(DEPDIR)/interfaceiter_.Tpo -c -o interfaceiter_.obj `if test -f 'interfaceiter_.c'; then $(CYGPATH_W) 'interfaceiter_.c'; else $(CYGPATH_W) '$(srcdir)/interfaceiter_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/interfaceiter_.Tpo $(DEPDIR)/interfaceiter_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='interfaceiter_.c' object='interfaceiter_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o interfaceiter_.obj `if test -f 'interfaceiter_.c'; then $(CYGPATH_W) 'interfaceiter_.c'; else $(CYGPATH_W) '$(srcdir)/interfaceiter_.c'; fi` interfaceiter.o: $(srcdir)/../libisc/interfaceiter.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT interfaceiter.o -MD -MP -MF "$(DEPDIR)/interfaceiter.Tpo" -c -o interfaceiter.o `test -f '$(srcdir)/../libisc/interfaceiter.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/interfaceiter.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/interfaceiter.Tpo" "$(DEPDIR)/interfaceiter.Po"; else rm -f "$(DEPDIR)/interfaceiter.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT interfaceiter.o -MD -MP -MF $(DEPDIR)/interfaceiter.Tpo -c -o interfaceiter.o `test -f '$(srcdir)/../libisc/interfaceiter.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/interfaceiter.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/interfaceiter.Tpo $(DEPDIR)/interfaceiter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/interfaceiter.c' object='interfaceiter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o interfaceiter.o `test -f '$(srcdir)/../libisc/interfaceiter.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/interfaceiter.c interfaceiter.obj: $(srcdir)/../libisc/interfaceiter.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT interfaceiter.obj -MD -MP -MF "$(DEPDIR)/interfaceiter.Tpo" -c -o interfaceiter.obj `if test -f '$(srcdir)/../libisc/interfaceiter.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/interfaceiter.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/interfaceiter.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/interfaceiter.Tpo" "$(DEPDIR)/interfaceiter.Po"; else rm -f "$(DEPDIR)/interfaceiter.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT interfaceiter.obj -MD -MP -MF $(DEPDIR)/interfaceiter.Tpo -c -o interfaceiter.obj `if test -f '$(srcdir)/../libisc/interfaceiter.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/interfaceiter.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/interfaceiter.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/interfaceiter.Tpo $(DEPDIR)/interfaceiter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/interfaceiter.c' object='interfaceiter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o interfaceiter.obj `if test -f '$(srcdir)/../libisc/interfaceiter.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/interfaceiter.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/interfaceiter.c'; fi` lib_.o: lib_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_.o -MD -MP -MF "$(DEPDIR)/lib_.Tpo" -c -o lib_.o `test -f 'lib_.c' || echo '$(srcdir)/'`lib_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_.Tpo" "$(DEPDIR)/lib_.Po"; else rm -f "$(DEPDIR)/lib_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_.o -MD -MP -MF $(DEPDIR)/lib_.Tpo -c -o lib_.o `test -f 'lib_.c' || echo '$(srcdir)/'`lib_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lib_.Tpo $(DEPDIR)/lib_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib_.c' object='lib_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_.o `test -f 'lib_.c' || echo '$(srcdir)/'`lib_.c lib_.obj: lib_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_.obj -MD -MP -MF "$(DEPDIR)/lib_.Tpo" -c -o lib_.obj `if test -f 'lib_.c'; then $(CYGPATH_W) 'lib_.c'; else $(CYGPATH_W) '$(srcdir)/lib_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib_.Tpo" "$(DEPDIR)/lib_.Po"; else rm -f "$(DEPDIR)/lib_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib_.obj -MD -MP -MF $(DEPDIR)/lib_.Tpo -c -o lib_.obj `if test -f 'lib_.c'; then $(CYGPATH_W) 'lib_.c'; else $(CYGPATH_W) '$(srcdir)/lib_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lib_.Tpo $(DEPDIR)/lib_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib_.c' object='lib_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib_.obj `if test -f 'lib_.c'; then $(CYGPATH_W) 'lib_.c'; else $(CYGPATH_W) '$(srcdir)/lib_.c'; fi` lib.o: $(srcdir)/../libisc/lib.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib.o -MD -MP -MF "$(DEPDIR)/lib.Tpo" -c -o lib.o `test -f '$(srcdir)/../libisc/lib.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/lib.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib.Tpo" "$(DEPDIR)/lib.Po"; else rm -f "$(DEPDIR)/lib.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib.o -MD -MP -MF $(DEPDIR)/lib.Tpo -c -o lib.o `test -f '$(srcdir)/../libisc/lib.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/lib.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lib.Tpo $(DEPDIR)/lib.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/lib.c' object='lib.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib.o `test -f '$(srcdir)/../libisc/lib.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/lib.c lib.obj: $(srcdir)/../libisc/lib.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib.obj -MD -MP -MF "$(DEPDIR)/lib.Tpo" -c -o lib.obj `if test -f '$(srcdir)/../libisc/lib.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/lib.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/lib.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/lib.Tpo" "$(DEPDIR)/lib.Po"; else rm -f "$(DEPDIR)/lib.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib.obj -MD -MP -MF $(DEPDIR)/lib.Tpo -c -o lib.obj `if test -f '$(srcdir)/../libisc/lib.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/lib.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/lib.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/lib.Tpo $(DEPDIR)/lib.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/lib.c' object='lib.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib.obj `if test -f '$(srcdir)/../libisc/lib.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/lib.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/lib.c'; fi` mem_.o: mem_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mem_.o -MD -MP -MF "$(DEPDIR)/mem_.Tpo" -c -o mem_.o `test -f 'mem_.c' || echo '$(srcdir)/'`mem_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mem_.Tpo" "$(DEPDIR)/mem_.Po"; else rm -f "$(DEPDIR)/mem_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mem_.o -MD -MP -MF $(DEPDIR)/mem_.Tpo -c -o mem_.o `test -f 'mem_.c' || echo '$(srcdir)/'`mem_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mem_.Tpo $(DEPDIR)/mem_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mem_.c' object='mem_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mem_.o `test -f 'mem_.c' || echo '$(srcdir)/'`mem_.c mem_.obj: mem_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mem_.obj -MD -MP -MF "$(DEPDIR)/mem_.Tpo" -c -o mem_.obj `if test -f 'mem_.c'; then $(CYGPATH_W) 'mem_.c'; else $(CYGPATH_W) '$(srcdir)/mem_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mem_.Tpo" "$(DEPDIR)/mem_.Po"; else rm -f "$(DEPDIR)/mem_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mem_.obj -MD -MP -MF $(DEPDIR)/mem_.Tpo -c -o mem_.obj `if test -f 'mem_.c'; then $(CYGPATH_W) 'mem_.c'; else $(CYGPATH_W) '$(srcdir)/mem_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mem_.Tpo $(DEPDIR)/mem_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mem_.c' object='mem_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mem_.obj `if test -f 'mem_.c'; then $(CYGPATH_W) 'mem_.c'; else $(CYGPATH_W) '$(srcdir)/mem_.c'; fi` mem.o: $(srcdir)/../libisc/mem.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mem.o -MD -MP -MF "$(DEPDIR)/mem.Tpo" -c -o mem.o `test -f '$(srcdir)/../libisc/mem.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/mem.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mem.Tpo" "$(DEPDIR)/mem.Po"; else rm -f "$(DEPDIR)/mem.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mem.o -MD -MP -MF $(DEPDIR)/mem.Tpo -c -o mem.o `test -f '$(srcdir)/../libisc/mem.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/mem.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mem.Tpo $(DEPDIR)/mem.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/mem.c' object='mem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mem.o `test -f '$(srcdir)/../libisc/mem.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/mem.c mem.obj: $(srcdir)/../libisc/mem.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mem.obj -MD -MP -MF "$(DEPDIR)/mem.Tpo" -c -o mem.obj `if test -f '$(srcdir)/../libisc/mem.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/mem.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/mem.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/mem.Tpo" "$(DEPDIR)/mem.Po"; else rm -f "$(DEPDIR)/mem.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT mem.obj -MD -MP -MF $(DEPDIR)/mem.Tpo -c -o mem.obj `if test -f '$(srcdir)/../libisc/mem.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/mem.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/mem.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/mem.Tpo $(DEPDIR)/mem.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/mem.c' object='mem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o mem.obj `if test -f '$(srcdir)/../libisc/mem.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/mem.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/mem.c'; fi` msgcat_.o: msgcat_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT msgcat_.o -MD -MP -MF "$(DEPDIR)/msgcat_.Tpo" -c -o msgcat_.o `test -f 'msgcat_.c' || echo '$(srcdir)/'`msgcat_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/msgcat_.Tpo" "$(DEPDIR)/msgcat_.Po"; else rm -f "$(DEPDIR)/msgcat_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT msgcat_.o -MD -MP -MF $(DEPDIR)/msgcat_.Tpo -c -o msgcat_.o `test -f 'msgcat_.c' || echo '$(srcdir)/'`msgcat_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/msgcat_.Tpo $(DEPDIR)/msgcat_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='msgcat_.c' object='msgcat_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o msgcat_.o `test -f 'msgcat_.c' || echo '$(srcdir)/'`msgcat_.c msgcat_.obj: msgcat_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT msgcat_.obj -MD -MP -MF "$(DEPDIR)/msgcat_.Tpo" -c -o msgcat_.obj `if test -f 'msgcat_.c'; then $(CYGPATH_W) 'msgcat_.c'; else $(CYGPATH_W) '$(srcdir)/msgcat_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/msgcat_.Tpo" "$(DEPDIR)/msgcat_.Po"; else rm -f "$(DEPDIR)/msgcat_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT msgcat_.obj -MD -MP -MF $(DEPDIR)/msgcat_.Tpo -c -o msgcat_.obj `if test -f 'msgcat_.c'; then $(CYGPATH_W) 'msgcat_.c'; else $(CYGPATH_W) '$(srcdir)/msgcat_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/msgcat_.Tpo $(DEPDIR)/msgcat_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='msgcat_.c' object='msgcat_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o msgcat_.obj `if test -f 'msgcat_.c'; then $(CYGPATH_W) 'msgcat_.c'; else $(CYGPATH_W) '$(srcdir)/msgcat_.c'; fi` msgcat.o: $(srcdir)/../libisc/msgcat.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT msgcat.o -MD -MP -MF "$(DEPDIR)/msgcat.Tpo" -c -o msgcat.o `test -f '$(srcdir)/../libisc/msgcat.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/msgcat.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/msgcat.Tpo" "$(DEPDIR)/msgcat.Po"; else rm -f "$(DEPDIR)/msgcat.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT msgcat.o -MD -MP -MF $(DEPDIR)/msgcat.Tpo -c -o msgcat.o `test -f '$(srcdir)/../libisc/msgcat.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/msgcat.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/msgcat.Tpo $(DEPDIR)/msgcat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/msgcat.c' object='msgcat.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o msgcat.o `test -f '$(srcdir)/../libisc/msgcat.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/msgcat.c msgcat.obj: $(srcdir)/../libisc/msgcat.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT msgcat.obj -MD -MP -MF "$(DEPDIR)/msgcat.Tpo" -c -o msgcat.obj `if test -f '$(srcdir)/../libisc/msgcat.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/msgcat.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/msgcat.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/msgcat.Tpo" "$(DEPDIR)/msgcat.Po"; else rm -f "$(DEPDIR)/msgcat.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT msgcat.obj -MD -MP -MF $(DEPDIR)/msgcat.Tpo -c -o msgcat.obj `if test -f '$(srcdir)/../libisc/msgcat.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/msgcat.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/msgcat.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/msgcat.Tpo $(DEPDIR)/msgcat.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/msgcat.c' object='msgcat.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o msgcat.obj `if test -f '$(srcdir)/../libisc/msgcat.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/msgcat.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/msgcat.c'; fi` net_.o: net_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net_.o -MD -MP -MF "$(DEPDIR)/net_.Tpo" -c -o net_.o `test -f 'net_.c' || echo '$(srcdir)/'`net_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/net_.Tpo" "$(DEPDIR)/net_.Po"; else rm -f "$(DEPDIR)/net_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net_.o -MD -MP -MF $(DEPDIR)/net_.Tpo -c -o net_.o `test -f 'net_.c' || echo '$(srcdir)/'`net_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/net_.Tpo $(DEPDIR)/net_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='net_.c' object='net_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o net_.o `test -f 'net_.c' || echo '$(srcdir)/'`net_.c net_.obj: net_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net_.obj -MD -MP -MF "$(DEPDIR)/net_.Tpo" -c -o net_.obj `if test -f 'net_.c'; then $(CYGPATH_W) 'net_.c'; else $(CYGPATH_W) '$(srcdir)/net_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/net_.Tpo" "$(DEPDIR)/net_.Po"; else rm -f "$(DEPDIR)/net_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net_.obj -MD -MP -MF $(DEPDIR)/net_.Tpo -c -o net_.obj `if test -f 'net_.c'; then $(CYGPATH_W) 'net_.c'; else $(CYGPATH_W) '$(srcdir)/net_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/net_.Tpo $(DEPDIR)/net_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='net_.c' object='net_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o net_.obj `if test -f 'net_.c'; then $(CYGPATH_W) 'net_.c'; else $(CYGPATH_W) '$(srcdir)/net_.c'; fi` net.o: $(srcdir)/../libisc/net.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net.o -MD -MP -MF "$(DEPDIR)/net.Tpo" -c -o net.o `test -f '$(srcdir)/../libisc/net.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/net.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/net.Tpo" "$(DEPDIR)/net.Po"; else rm -f "$(DEPDIR)/net.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net.o -MD -MP -MF $(DEPDIR)/net.Tpo -c -o net.o `test -f '$(srcdir)/../libisc/net.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/net.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/net.Tpo $(DEPDIR)/net.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/net.c' object='net.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o net.o `test -f '$(srcdir)/../libisc/net.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/net.c net.obj: $(srcdir)/../libisc/net.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net.obj -MD -MP -MF "$(DEPDIR)/net.Tpo" -c -o net.obj `if test -f '$(srcdir)/../libisc/net.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/net.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/net.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/net.Tpo" "$(DEPDIR)/net.Po"; else rm -f "$(DEPDIR)/net.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT net.obj -MD -MP -MF $(DEPDIR)/net.Tpo -c -o net.obj `if test -f '$(srcdir)/../libisc/net.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/net.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/net.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/net.Tpo $(DEPDIR)/net.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/net.c' object='net.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o net.obj `if test -f '$(srcdir)/../libisc/net.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/net.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/net.c'; fi` isc_strerror_.o: isc_strerror_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isc_strerror_.o -MD -MP -MF "$(DEPDIR)/isc_strerror_.Tpo" -c -o isc_strerror_.o `test -f 'isc_strerror_.c' || echo '$(srcdir)/'`isc_strerror_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/isc_strerror_.Tpo" "$(DEPDIR)/isc_strerror_.Po"; else rm -f "$(DEPDIR)/isc_strerror_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isc_strerror_.o -MD -MP -MF $(DEPDIR)/isc_strerror_.Tpo -c -o isc_strerror_.o `test -f 'isc_strerror_.c' || echo '$(srcdir)/'`isc_strerror_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/isc_strerror_.Tpo $(DEPDIR)/isc_strerror_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isc_strerror_.c' object='isc_strerror_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isc_strerror_.o `test -f 'isc_strerror_.c' || echo '$(srcdir)/'`isc_strerror_.c isc_strerror_.obj: isc_strerror_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isc_strerror_.obj -MD -MP -MF "$(DEPDIR)/isc_strerror_.Tpo" -c -o isc_strerror_.obj `if test -f 'isc_strerror_.c'; then $(CYGPATH_W) 'isc_strerror_.c'; else $(CYGPATH_W) '$(srcdir)/isc_strerror_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/isc_strerror_.Tpo" "$(DEPDIR)/isc_strerror_.Po"; else rm -f "$(DEPDIR)/isc_strerror_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isc_strerror_.obj -MD -MP -MF $(DEPDIR)/isc_strerror_.Tpo -c -o isc_strerror_.obj `if test -f 'isc_strerror_.c'; then $(CYGPATH_W) 'isc_strerror_.c'; else $(CYGPATH_W) '$(srcdir)/isc_strerror_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/isc_strerror_.Tpo $(DEPDIR)/isc_strerror_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isc_strerror_.c' object='isc_strerror_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isc_strerror_.obj `if test -f 'isc_strerror_.c'; then $(CYGPATH_W) 'isc_strerror_.c'; else $(CYGPATH_W) '$(srcdir)/isc_strerror_.c'; fi` isc_strerror.o: $(srcdir)/../libisc/isc_strerror.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isc_strerror.o -MD -MP -MF "$(DEPDIR)/isc_strerror.Tpo" -c -o isc_strerror.o `test -f '$(srcdir)/../libisc/isc_strerror.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/isc_strerror.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/isc_strerror.Tpo" "$(DEPDIR)/isc_strerror.Po"; else rm -f "$(DEPDIR)/isc_strerror.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isc_strerror.o -MD -MP -MF $(DEPDIR)/isc_strerror.Tpo -c -o isc_strerror.o `test -f '$(srcdir)/../libisc/isc_strerror.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/isc_strerror.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/isc_strerror.Tpo $(DEPDIR)/isc_strerror.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/isc_strerror.c' object='isc_strerror.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isc_strerror.o `test -f '$(srcdir)/../libisc/isc_strerror.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/isc_strerror.c isc_strerror.obj: $(srcdir)/../libisc/isc_strerror.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isc_strerror.obj -MD -MP -MF "$(DEPDIR)/isc_strerror.Tpo" -c -o isc_strerror.obj `if test -f '$(srcdir)/../libisc/isc_strerror.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/isc_strerror.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/isc_strerror.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/isc_strerror.Tpo" "$(DEPDIR)/isc_strerror.Po"; else rm -f "$(DEPDIR)/isc_strerror.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT isc_strerror.obj -MD -MP -MF $(DEPDIR)/isc_strerror.Tpo -c -o isc_strerror.obj `if test -f '$(srcdir)/../libisc/isc_strerror.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/isc_strerror.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/isc_strerror.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/isc_strerror.Tpo $(DEPDIR)/isc_strerror.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/isc_strerror.c' object='isc_strerror.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o isc_strerror.obj `if test -f '$(srcdir)/../libisc/isc_strerror.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/isc_strerror.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/isc_strerror.c'; fi` inet_ntop_.o: inet_ntop_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_ntop_.o -MD -MP -MF "$(DEPDIR)/inet_ntop_.Tpo" -c -o inet_ntop_.o `test -f 'inet_ntop_.c' || echo '$(srcdir)/'`inet_ntop_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/inet_ntop_.Tpo" "$(DEPDIR)/inet_ntop_.Po"; else rm -f "$(DEPDIR)/inet_ntop_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_ntop_.o -MD -MP -MF $(DEPDIR)/inet_ntop_.Tpo -c -o inet_ntop_.o `test -f 'inet_ntop_.c' || echo '$(srcdir)/'`inet_ntop_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/inet_ntop_.Tpo $(DEPDIR)/inet_ntop_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_ntop_.c' object='inet_ntop_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o inet_ntop_.o `test -f 'inet_ntop_.c' || echo '$(srcdir)/'`inet_ntop_.c inet_ntop_.obj: inet_ntop_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_ntop_.obj -MD -MP -MF "$(DEPDIR)/inet_ntop_.Tpo" -c -o inet_ntop_.obj `if test -f 'inet_ntop_.c'; then $(CYGPATH_W) 'inet_ntop_.c'; else $(CYGPATH_W) '$(srcdir)/inet_ntop_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/inet_ntop_.Tpo" "$(DEPDIR)/inet_ntop_.Po"; else rm -f "$(DEPDIR)/inet_ntop_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_ntop_.obj -MD -MP -MF $(DEPDIR)/inet_ntop_.Tpo -c -o inet_ntop_.obj `if test -f 'inet_ntop_.c'; then $(CYGPATH_W) 'inet_ntop_.c'; else $(CYGPATH_W) '$(srcdir)/inet_ntop_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/inet_ntop_.Tpo $(DEPDIR)/inet_ntop_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_ntop_.c' object='inet_ntop_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o inet_ntop_.obj `if test -f 'inet_ntop_.c'; then $(CYGPATH_W) 'inet_ntop_.c'; else $(CYGPATH_W) '$(srcdir)/inet_ntop_.c'; fi` inet_ntop.o: $(srcdir)/../libisc/inet_ntop.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_ntop.o -MD -MP -MF "$(DEPDIR)/inet_ntop.Tpo" -c -o inet_ntop.o `test -f '$(srcdir)/../libisc/inet_ntop.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/inet_ntop.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/inet_ntop.Tpo" "$(DEPDIR)/inet_ntop.Po"; else rm -f "$(DEPDIR)/inet_ntop.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_ntop.o -MD -MP -MF $(DEPDIR)/inet_ntop.Tpo -c -o inet_ntop.o `test -f '$(srcdir)/../libisc/inet_ntop.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/inet_ntop.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/inet_ntop.Tpo $(DEPDIR)/inet_ntop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/inet_ntop.c' object='inet_ntop.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o inet_ntop.o `test -f '$(srcdir)/../libisc/inet_ntop.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/inet_ntop.c inet_ntop.obj: $(srcdir)/../libisc/inet_ntop.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_ntop.obj -MD -MP -MF "$(DEPDIR)/inet_ntop.Tpo" -c -o inet_ntop.obj `if test -f '$(srcdir)/../libisc/inet_ntop.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/inet_ntop.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/inet_ntop.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/inet_ntop.Tpo" "$(DEPDIR)/inet_ntop.Po"; else rm -f "$(DEPDIR)/inet_ntop.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_ntop.obj -MD -MP -MF $(DEPDIR)/inet_ntop.Tpo -c -o inet_ntop.obj `if test -f '$(srcdir)/../libisc/inet_ntop.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/inet_ntop.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/inet_ntop.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/inet_ntop.Tpo $(DEPDIR)/inet_ntop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/inet_ntop.c' object='inet_ntop.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o inet_ntop.obj `if test -f '$(srcdir)/../libisc/inet_ntop.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/inet_ntop.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/inet_ntop.c'; fi` inet_pton_.o: inet_pton_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_pton_.o -MD -MP -MF "$(DEPDIR)/inet_pton_.Tpo" -c -o inet_pton_.o `test -f 'inet_pton_.c' || echo '$(srcdir)/'`inet_pton_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/inet_pton_.Tpo" "$(DEPDIR)/inet_pton_.Po"; else rm -f "$(DEPDIR)/inet_pton_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_pton_.o -MD -MP -MF $(DEPDIR)/inet_pton_.Tpo -c -o inet_pton_.o `test -f 'inet_pton_.c' || echo '$(srcdir)/'`inet_pton_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/inet_pton_.Tpo $(DEPDIR)/inet_pton_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_pton_.c' object='inet_pton_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o inet_pton_.o `test -f 'inet_pton_.c' || echo '$(srcdir)/'`inet_pton_.c inet_pton_.obj: inet_pton_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_pton_.obj -MD -MP -MF "$(DEPDIR)/inet_pton_.Tpo" -c -o inet_pton_.obj `if test -f 'inet_pton_.c'; then $(CYGPATH_W) 'inet_pton_.c'; else $(CYGPATH_W) '$(srcdir)/inet_pton_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/inet_pton_.Tpo" "$(DEPDIR)/inet_pton_.Po"; else rm -f "$(DEPDIR)/inet_pton_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_pton_.obj -MD -MP -MF $(DEPDIR)/inet_pton_.Tpo -c -o inet_pton_.obj `if test -f 'inet_pton_.c'; then $(CYGPATH_W) 'inet_pton_.c'; else $(CYGPATH_W) '$(srcdir)/inet_pton_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/inet_pton_.Tpo $(DEPDIR)/inet_pton_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='inet_pton_.c' object='inet_pton_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o inet_pton_.obj `if test -f 'inet_pton_.c'; then $(CYGPATH_W) 'inet_pton_.c'; else $(CYGPATH_W) '$(srcdir)/inet_pton_.c'; fi` inet_pton.o: $(srcdir)/../libisc/inet_pton.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_pton.o -MD -MP -MF "$(DEPDIR)/inet_pton.Tpo" -c -o inet_pton.o `test -f '$(srcdir)/../libisc/inet_pton.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/inet_pton.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/inet_pton.Tpo" "$(DEPDIR)/inet_pton.Po"; else rm -f "$(DEPDIR)/inet_pton.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_pton.o -MD -MP -MF $(DEPDIR)/inet_pton.Tpo -c -o inet_pton.o `test -f '$(srcdir)/../libisc/inet_pton.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/inet_pton.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/inet_pton.Tpo $(DEPDIR)/inet_pton.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/inet_pton.c' object='inet_pton.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o inet_pton.o `test -f '$(srcdir)/../libisc/inet_pton.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/inet_pton.c inet_pton.obj: $(srcdir)/../libisc/inet_pton.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_pton.obj -MD -MP -MF "$(DEPDIR)/inet_pton.Tpo" -c -o inet_pton.obj `if test -f '$(srcdir)/../libisc/inet_pton.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/inet_pton.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/inet_pton.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/inet_pton.Tpo" "$(DEPDIR)/inet_pton.Po"; else rm -f "$(DEPDIR)/inet_pton.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT inet_pton.obj -MD -MP -MF $(DEPDIR)/inet_pton.Tpo -c -o inet_pton.obj `if test -f '$(srcdir)/../libisc/inet_pton.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/inet_pton.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/inet_pton.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/inet_pton.Tpo $(DEPDIR)/inet_pton.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/inet_pton.c' object='inet_pton.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o inet_pton.obj `if test -f '$(srcdir)/../libisc/inet_pton.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/inet_pton.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/inet_pton.c'; fi` netaddr_.o: netaddr_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netaddr_.o -MD -MP -MF "$(DEPDIR)/netaddr_.Tpo" -c -o netaddr_.o `test -f 'netaddr_.c' || echo '$(srcdir)/'`netaddr_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/netaddr_.Tpo" "$(DEPDIR)/netaddr_.Po"; else rm -f "$(DEPDIR)/netaddr_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netaddr_.o -MD -MP -MF $(DEPDIR)/netaddr_.Tpo -c -o netaddr_.o `test -f 'netaddr_.c' || echo '$(srcdir)/'`netaddr_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/netaddr_.Tpo $(DEPDIR)/netaddr_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='netaddr_.c' object='netaddr_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o netaddr_.o `test -f 'netaddr_.c' || echo '$(srcdir)/'`netaddr_.c netaddr_.obj: netaddr_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netaddr_.obj -MD -MP -MF "$(DEPDIR)/netaddr_.Tpo" -c -o netaddr_.obj `if test -f 'netaddr_.c'; then $(CYGPATH_W) 'netaddr_.c'; else $(CYGPATH_W) '$(srcdir)/netaddr_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/netaddr_.Tpo" "$(DEPDIR)/netaddr_.Po"; else rm -f "$(DEPDIR)/netaddr_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netaddr_.obj -MD -MP -MF $(DEPDIR)/netaddr_.Tpo -c -o netaddr_.obj `if test -f 'netaddr_.c'; then $(CYGPATH_W) 'netaddr_.c'; else $(CYGPATH_W) '$(srcdir)/netaddr_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/netaddr_.Tpo $(DEPDIR)/netaddr_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='netaddr_.c' object='netaddr_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o netaddr_.obj `if test -f 'netaddr_.c'; then $(CYGPATH_W) 'netaddr_.c'; else $(CYGPATH_W) '$(srcdir)/netaddr_.c'; fi` netaddr.o: $(srcdir)/../libisc/netaddr.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netaddr.o -MD -MP -MF "$(DEPDIR)/netaddr.Tpo" -c -o netaddr.o `test -f '$(srcdir)/../libisc/netaddr.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/netaddr.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/netaddr.Tpo" "$(DEPDIR)/netaddr.Po"; else rm -f "$(DEPDIR)/netaddr.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netaddr.o -MD -MP -MF $(DEPDIR)/netaddr.Tpo -c -o netaddr.o `test -f '$(srcdir)/../libisc/netaddr.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/netaddr.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/netaddr.Tpo $(DEPDIR)/netaddr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/netaddr.c' object='netaddr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o netaddr.o `test -f '$(srcdir)/../libisc/netaddr.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/netaddr.c netaddr.obj: $(srcdir)/../libisc/netaddr.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netaddr.obj -MD -MP -MF "$(DEPDIR)/netaddr.Tpo" -c -o netaddr.obj `if test -f '$(srcdir)/../libisc/netaddr.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/netaddr.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/netaddr.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/netaddr.Tpo" "$(DEPDIR)/netaddr.Po"; else rm -f "$(DEPDIR)/netaddr.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netaddr.obj -MD -MP -MF $(DEPDIR)/netaddr.Tpo -c -o netaddr.obj `if test -f '$(srcdir)/../libisc/netaddr.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/netaddr.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/netaddr.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/netaddr.Tpo $(DEPDIR)/netaddr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/netaddr.c' object='netaddr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o netaddr.obj `if test -f '$(srcdir)/../libisc/netaddr.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/netaddr.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/netaddr.c'; fi` sockaddr_.o: sockaddr_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sockaddr_.o -MD -MP -MF "$(DEPDIR)/sockaddr_.Tpo" -c -o sockaddr_.o `test -f 'sockaddr_.c' || echo '$(srcdir)/'`sockaddr_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockaddr_.Tpo" "$(DEPDIR)/sockaddr_.Po"; else rm -f "$(DEPDIR)/sockaddr_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sockaddr_.o -MD -MP -MF $(DEPDIR)/sockaddr_.Tpo -c -o sockaddr_.o `test -f 'sockaddr_.c' || echo '$(srcdir)/'`sockaddr_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sockaddr_.Tpo $(DEPDIR)/sockaddr_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sockaddr_.c' object='sockaddr_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sockaddr_.o `test -f 'sockaddr_.c' || echo '$(srcdir)/'`sockaddr_.c sockaddr_.obj: sockaddr_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sockaddr_.obj -MD -MP -MF "$(DEPDIR)/sockaddr_.Tpo" -c -o sockaddr_.obj `if test -f 'sockaddr_.c'; then $(CYGPATH_W) 'sockaddr_.c'; else $(CYGPATH_W) '$(srcdir)/sockaddr_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockaddr_.Tpo" "$(DEPDIR)/sockaddr_.Po"; else rm -f "$(DEPDIR)/sockaddr_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sockaddr_.obj -MD -MP -MF $(DEPDIR)/sockaddr_.Tpo -c -o sockaddr_.obj `if test -f 'sockaddr_.c'; then $(CYGPATH_W) 'sockaddr_.c'; else $(CYGPATH_W) '$(srcdir)/sockaddr_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sockaddr_.Tpo $(DEPDIR)/sockaddr_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sockaddr_.c' object='sockaddr_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sockaddr_.obj `if test -f 'sockaddr_.c'; then $(CYGPATH_W) 'sockaddr_.c'; else $(CYGPATH_W) '$(srcdir)/sockaddr_.c'; fi` sockaddr.o: $(srcdir)/../libisc/sockaddr.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sockaddr.o -MD -MP -MF "$(DEPDIR)/sockaddr.Tpo" -c -o sockaddr.o `test -f '$(srcdir)/../libisc/sockaddr.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/sockaddr.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockaddr.Tpo" "$(DEPDIR)/sockaddr.Po"; else rm -f "$(DEPDIR)/sockaddr.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sockaddr.o -MD -MP -MF $(DEPDIR)/sockaddr.Tpo -c -o sockaddr.o `test -f '$(srcdir)/../libisc/sockaddr.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/sockaddr.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sockaddr.Tpo $(DEPDIR)/sockaddr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/sockaddr.c' object='sockaddr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sockaddr.o `test -f '$(srcdir)/../libisc/sockaddr.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/sockaddr.c sockaddr.obj: $(srcdir)/../libisc/sockaddr.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sockaddr.obj -MD -MP -MF "$(DEPDIR)/sockaddr.Tpo" -c -o sockaddr.obj `if test -f '$(srcdir)/../libisc/sockaddr.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/sockaddr.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/sockaddr.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/sockaddr.Tpo" "$(DEPDIR)/sockaddr.Po"; else rm -f "$(DEPDIR)/sockaddr.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sockaddr.obj -MD -MP -MF $(DEPDIR)/sockaddr.Tpo -c -o sockaddr.obj `if test -f '$(srcdir)/../libisc/sockaddr.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/sockaddr.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/sockaddr.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/sockaddr.Tpo $(DEPDIR)/sockaddr.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/sockaddr.c' object='sockaddr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sockaddr.obj `if test -f '$(srcdir)/../libisc/sockaddr.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/sockaddr.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/sockaddr.c'; fi` netscope_.o: netscope_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netscope_.o -MD -MP -MF "$(DEPDIR)/netscope_.Tpo" -c -o netscope_.o `test -f 'netscope_.c' || echo '$(srcdir)/'`netscope_.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/netscope_.Tpo" "$(DEPDIR)/netscope_.Po"; else rm -f "$(DEPDIR)/netscope_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netscope_.o -MD -MP -MF $(DEPDIR)/netscope_.Tpo -c -o netscope_.o `test -f 'netscope_.c' || echo '$(srcdir)/'`netscope_.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/netscope_.Tpo $(DEPDIR)/netscope_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='netscope_.c' object='netscope_.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o netscope_.o `test -f 'netscope_.c' || echo '$(srcdir)/'`netscope_.c netscope_.obj: netscope_.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netscope_.obj -MD -MP -MF "$(DEPDIR)/netscope_.Tpo" -c -o netscope_.obj `if test -f 'netscope_.c'; then $(CYGPATH_W) 'netscope_.c'; else $(CYGPATH_W) '$(srcdir)/netscope_.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/netscope_.Tpo" "$(DEPDIR)/netscope_.Po"; else rm -f "$(DEPDIR)/netscope_.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netscope_.obj -MD -MP -MF $(DEPDIR)/netscope_.Tpo -c -o netscope_.obj `if test -f 'netscope_.c'; then $(CYGPATH_W) 'netscope_.c'; else $(CYGPATH_W) '$(srcdir)/netscope_.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/netscope_.Tpo $(DEPDIR)/netscope_.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='netscope_.c' object='netscope_.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o netscope_.obj `if test -f 'netscope_.c'; then $(CYGPATH_W) 'netscope_.c'; else $(CYGPATH_W) '$(srcdir)/netscope_.c'; fi` netscope.o: $(srcdir)/../libisc/netscope.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netscope.o -MD -MP -MF "$(DEPDIR)/netscope.Tpo" -c -o netscope.o `test -f '$(srcdir)/../libisc/netscope.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/netscope.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/netscope.Tpo" "$(DEPDIR)/netscope.Po"; else rm -f "$(DEPDIR)/netscope.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netscope.o -MD -MP -MF $(DEPDIR)/netscope.Tpo -c -o netscope.o `test -f '$(srcdir)/../libisc/netscope.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/netscope.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/netscope.Tpo $(DEPDIR)/netscope.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/netscope.c' object='netscope.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o netscope.o `test -f '$(srcdir)/../libisc/netscope.c' || echo '$(srcdir)/'`$(srcdir)/../libisc/netscope.c netscope.obj: $(srcdir)/../libisc/netscope.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netscope.obj -MD -MP -MF "$(DEPDIR)/netscope.Tpo" -c -o netscope.obj `if test -f '$(srcdir)/../libisc/netscope.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/netscope.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/netscope.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/netscope.Tpo" "$(DEPDIR)/netscope.Po"; else rm -f "$(DEPDIR)/netscope.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT netscope.obj -MD -MP -MF $(DEPDIR)/netscope.Tpo -c -o netscope.obj `if test -f '$(srcdir)/../libisc/netscope.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/netscope.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/netscope.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/netscope.Tpo $(DEPDIR)/netscope.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$(srcdir)/../libisc/netscope.c' object='netscope.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o netscope.obj `if test -f '$(srcdir)/../libisc/netscope.c'; then $(CYGPATH_W) '$(srcdir)/../libisc/netscope.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libisc/netscope.c'; fi` @@ -1012,82 +1015,85 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -1115,6 +1121,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -1128,7 +1135,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -1136,18 +1143,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -1168,23 +1195,28 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: ../util/ansi2knr install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-kr \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-info-am + uninstall-am ../include/des.h: touch ../include/des.h + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/libopts/Makefile.in b/contrib/ntp/libopts/Makefile.in index 06b52a214a9..6a4d03e36b8 100644 --- a/contrib/ntp/libopts/Makefile.in +++ b/contrib/ntp/libopts/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +15,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -49,39 +47,57 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" -libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) libopts_la_LIBADD = am_libopts_la_OBJECTS = libopts_la-libopts.lo libopts_la_OBJECTS = $(am_libopts_la_OBJECTS) +libopts_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libopts_la_LDFLAGS) $(LDFLAGS) -o $@ @INSTALL_LIBOPTS_FALSE@am_libopts_la_rpath = @INSTALL_LIBOPTS_TRUE@am_libopts_la_rpath = -rpath $(libdir) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libopts_la_SOURCES) DIST_SOURCES = $(libopts_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -97,10 +113,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -113,11 +125,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -131,6 +142,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -144,8 +156,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -155,6 +166,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -168,16 +180,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -189,29 +196,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ MAINTAINERCLEANFILES = Makefile.in @INSTALL_LIBOPTS_TRUE@lib_LTLIBRARIES = libopts.la @INSTALL_LIBOPTS_FALSE@noinst_LTLIBRARIES = libopts.la @@ -241,14 +260,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libopts/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign libopts/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libopts/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign libopts/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -266,23 +285,28 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ if test -f $$p; then \ - f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + list2="$$list2 $$p"; \ else :; fi; \ - done + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: @@ -303,7 +327,7 @@ clean-noinstLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libopts.la: $(libopts_la_OBJECTS) $(libopts_la_DEPENDENCIES) - $(LINK) $(am_libopts_la_rpath) $(libopts_la_LDFLAGS) $(libopts_la_OBJECTS) $(libopts_la_LIBADD) $(LIBS) + $(libopts_la_LINK) $(am_libopts_la_rpath) $(libopts_la_OBJECTS) $(libopts_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -314,32 +338,32 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libopts_la-libopts.Plo@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< libopts_la-libopts.lo: libopts.c -@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libopts_la-libopts.lo -MD -MP -MF "$(DEPDIR)/libopts_la-libopts.Tpo" -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libopts_la-libopts.Tpo" "$(DEPDIR)/libopts_la-libopts.Plo"; else rm -f "$(DEPDIR)/libopts_la-libopts.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libopts_la-libopts.lo -MD -MP -MF $(DEPDIR)/libopts_la-libopts.Tpo -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libopts_la-libopts.Tpo $(DEPDIR)/libopts_la-libopts.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libopts.c' object='libopts_la-libopts.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c mostlyclean-libtool: -rm -f *.lo @@ -347,83 +371,85 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/autoopts $(distdir)/compat $(distdir)/m4 - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -432,7 +458,7 @@ check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -454,6 +480,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -468,7 +495,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -476,18 +503,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: install-libLTLIBRARIES +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -508,20 +555,24 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-libLTLIBRARIES install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am uninstall-libLTLIBRARIES + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libLTLIBRARIES + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/ntp/libparse/Makefile.am b/contrib/ntp/libparse/Makefile.am index c2c403637dc..8e21463b23e 100644 --- a/contrib/ntp/libparse/Makefile.am +++ b/contrib/ntp/libparse/Makefile.am @@ -165,4 +165,4 @@ parsesolaris.o: sys/systm.h sys/systm.h: mkdir sys && \ - sed -e 's/ffs(long)/ffs(int)/' < /usr/include/sys/systm.h > sys/systm.h + sed -e '/ffs(.*)/d' < /usr/include/sys/systm.h > sys/systm.h diff --git a/contrib/ntp/libparse/Makefile.in b/contrib/ntp/libparse/Makefile.in index 47ddec9e52d..4b42f7471ab 100644 --- a/contrib/ntp/libparse/Makefile.in +++ b/contrib/ntp/libparse/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,15 +16,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -39,7 +37,6 @@ build_triplet = @build@ host_triplet = @host@ ANSI2KNR = ../util/ansi2knr EXTRA_PROGRAMS = parsestreams$(EXEEXT) parsesolaris$(EXEEXT) -noinst_PROGRAMS = @MAKE_PARSEKMODULE@ subdir = libparse DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -53,6 +50,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru libparse_a_AR = $(AR) $(ARFLAGS) @@ -84,17 +82,19 @@ parsesolaris_LDADD = $(LDADD) parsestreams_SOURCES = parsestreams.c parsestreams_OBJECTS = parsestreams$U.$(OBJEXT) parsestreams_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libparse_a_SOURCES) $(libparse_kernel_a_SOURCES) \ parsesolaris.c parsestreams.c DIST_SOURCES = $(libparse_a_SOURCES) $(libparse_kernel_a_SOURCES) \ @@ -103,8 +103,6 @@ ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -120,10 +118,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -136,11 +130,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -154,6 +147,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -167,8 +161,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -178,6 +171,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -191,16 +185,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -212,34 +201,47 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ #AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies AUTOMAKE_OPTIONS = ../util/ansi2knr noinst_LIBRARIES = @MAKE_LIBPARSE@ @MAKE_LIBPARSE_KERNEL@ EXTRA_LIBRARIES = libparse.a libparse_kernel.a +noinst_PROGRAMS = @MAKE_PARSEKMODULE@ CLEANFILES = libparse.a libparse_kernel.a K_CFLAGS = -DPARSESTREAM -DNTP_NEED_BOPS libparse_a_SOURCES = parse.c \ @@ -293,14 +295,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libparse/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign libparse/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign libparse/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign libparse/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -318,6 +320,7 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) @@ -331,17 +334,19 @@ libparse_kernel.a: $(libparse_kernel_a_OBJECTS) $(libparse_kernel_a_DEPENDENCIES $(RANLIB) libparse_kernel.a clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list parsesolaris$(EXEEXT): $(parsesolaris_OBJECTS) $(parsesolaris_DEPENDENCIES) @rm -f parsesolaris$(EXEEXT) - $(LINK) $(parsesolaris_LDFLAGS) $(parsesolaris_OBJECTS) $(parsesolaris_LDADD) $(LIBS) + $(LINK) $(parsesolaris_OBJECTS) $(parsesolaris_LDADD) $(LIBS) parsestreams$(EXEEXT): $(parsestreams_OBJECTS) $(parsestreams_DEPENDENCIES) @rm -f parsestreams$(EXEEXT) - $(LINK) $(parsestreams_LDFLAGS) $(parsestreams_OBJECTS) $(parsestreams_LDADD) $(LIBS) + $(LINK) $(parsestreams_OBJECTS) $(parsestreams_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -349,7 +354,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c ../util/ansi2knr: - cd ../util && $(MAKE) $(AM_MAKEFLAGS) ansi2knr + $(am__cd) ../util && $(MAKE) $(AM_MAKEFLAGS) ./ansi2knr mostlyclean-kr: -test "$U" = "" || rm -f *_.c @@ -378,22 +383,22 @@ mostlyclean-kr: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trim_info$U.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -462,82 +467,85 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -566,6 +574,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -579,7 +588,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -587,18 +596,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -619,19 +648,23 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: ../util/ansi2knr install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-kr mostlyclean-libtool pdf \ - pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am + pdf-am ps ps-am tags uninstall uninstall-am # @@ -745,7 +778,8 @@ parsesolaris.o: sys/systm.h sys/systm.h: mkdir sys && \ - sed -e 's/ffs(long)/ffs(int)/' < /usr/include/sys/systm.h > sys/systm.h + sed -e '/ffs(.*)/d' < /usr/include/sys/systm.h > sys/systm.h + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/libparse/clk_rawdcf.c b/contrib/ntp/libparse/clk_rawdcf.c index 3465e8dfbad..3ef36c43ea3 100644 --- a/contrib/ntp/libparse/clk_rawdcf.c +++ b/contrib/ntp/libparse/clk_rawdcf.c @@ -229,7 +229,7 @@ convert_rawdcf( unsigned char *c = dcfprm->zerobits; int i; - parseprintf(DD_RAWDCF,("parse: convert_rawdcf: \"%.*s\"\n", size, buffer)); + parseprintf(DD_RAWDCF,("parse: convert_rawdcf: \"%s\"\n", buffer)); if (size < 57) { @@ -320,7 +320,7 @@ convert_rawdcf( * bad format - not for us */ #ifndef PARSEKERNEL - msyslog(LOG_ERR, "parse: convert_rawdcf: parity check FAILED for \"%.*s\"\n", size, buffer); + msyslog(LOG_ERR, "parse: convert_rawdcf: parity check FAILED for \"%s\"\n", buffer); #endif return CVT_FAIL|CVT_BADFMT; } diff --git a/contrib/ntp/ntpd/Makefile.in b/contrib/ntp/ntpd/Makefile.in index ad079300d0a..f92b31fa3b7 100644 --- a/contrib/ntp/ntpd/Makefile.in +++ b/contrib/ntp/ntpd/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -19,15 +20,12 @@ # subdir to warn folks if there is another version there. -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -43,7 +41,6 @@ build_triplet = @build@ host_triplet = @host@ ANSI2KNR = ../util/ansi2knr bin_PROGRAMS = ntpd$(EXEEXT) @MAKE_NTPDSIM@ -check_PROGRAMS = @MAKE_CHECK_Y2K@ EXTRA_PROGRAMS = check_y2k$(EXEEXT) ntpdsim$(EXEEXT) DIST_COMMON = $(srcdir)/../bincheck.mf $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in @@ -59,6 +56,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru libntpd_a_AR = $(AR) $(ARFLAGS) @@ -91,7 +89,6 @@ am_libntpd_a_OBJECTS = ntp_control$U.$(OBJEXT) ntp_crypto$U.$(OBJEXT) \ refclock_wwvb$U.$(OBJEXT) refclock_zyfer$U.$(OBJEXT) libntpd_a_OBJECTS = $(am_libntpd_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) check_y2k_SOURCES = check_y2k.c check_y2k_OBJECTS = check_y2k$U.$(OBJEXT) @@ -111,21 +108,47 @@ am_ntpdsim_OBJECTS = $(am__objects_1) ntpdsim-ntpsim$U.$(OBJEXT) \ ntpdsim_OBJECTS = $(am_ntpdsim_OBJECTS) ntpdsim_DEPENDENCIES = $(am__DEPENDENCIES_1) ../libntp/libntpsim.a \ $(am__DEPENDENCIES_2) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +ntpdsim_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(ntpdsim_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libntpd_a_SOURCES) check_y2k.c $(ntpd_SOURCES) \ $(ntpdsim_SOURCES) DIST_SOURCES = $(libntpd_a_SOURCES) check_y2k.c $(ntpd_SOURCES) \ $(ntpdsim_SOURCES) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) @@ -133,8 +156,6 @@ ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -150,10 +171,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -166,11 +183,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -184,6 +200,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -197,8 +214,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -208,6 +224,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -221,16 +238,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -242,29 +254,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = ../util/ansi2knr noinst_LIBRARIES = libntpd.a AM_CPPFLAGS = -I$(top_srcdir)/include -I../include $(LIBOPTS_CFLAGS) @@ -291,6 +315,8 @@ EXTRA_DIST = ntpd-opts.def ntpdbase-opts.def ntpdsim-opts.def \ $(BUILT_SOURCES) ETAGS_ARGS = Makefile.am +### Y2Kfixes +check_PROGRAMS = @MAKE_CHECK_Y2K@ run_ag = cd $(srcdir) && autogen -L ../include --writable std_def_list = $(top_srcdir)/include/debug-opt.def \ $(top_srcdir)/include/autogen-version.def \ @@ -331,14 +357,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../bincheck.mf $(am__con @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ntpd/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign ntpd/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ntpd/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign ntpd/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -356,6 +382,7 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) @@ -365,48 +392,65 @@ libntpd.a: $(libntpd_a_OBJECTS) $(libntpd_a_DEPENDENCIES) $(RANLIB) libntpd.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - || test -f $$p1 \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list clean-checkPROGRAMS: - @list='$(check_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list check_y2k$(EXEEXT): $(check_y2k_OBJECTS) $(check_y2k_DEPENDENCIES) @rm -f check_y2k$(EXEEXT) - $(LINK) $(check_y2k_LDFLAGS) $(check_y2k_OBJECTS) $(check_y2k_LDADD) $(LIBS) + $(LINK) $(check_y2k_OBJECTS) $(check_y2k_LDADD) $(LIBS) ntpd$(EXEEXT): $(ntpd_OBJECTS) $(ntpd_DEPENDENCIES) @rm -f ntpd$(EXEEXT) - $(LINK) $(ntpd_LDFLAGS) $(ntpd_OBJECTS) $(ntpd_LDADD) $(LIBS) + $(LINK) $(ntpd_OBJECTS) $(ntpd_LDADD) $(LIBS) ntpdsim$(EXEEXT): $(ntpdsim_OBJECTS) $(ntpdsim_DEPENDENCIES) @rm -f ntpdsim$(EXEEXT) - $(LINK) $(ntpdsim_LDFLAGS) $(ntpdsim_OBJECTS) $(ntpdsim_LDADD) $(LIBS) + $(ntpdsim_LINK) $(ntpdsim_OBJECTS) $(ntpdsim_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -414,7 +458,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c ../util/ansi2knr: - cd ../util && $(MAKE) $(AM_MAKEFLAGS) ansi2knr + $(am__cd) ../util && $(MAKE) $(AM_MAKEFLAGS) ./ansi2knr mostlyclean-kr: -test "$U" = "" || rm -f *_.c @@ -486,120 +530,120 @@ mostlyclean-kr: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/refclock_zyfer$U.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< ntpdsim-cmd_args$U.o: cmd_args$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-cmd_args$U.o -MD -MP -MF "$(DEPDIR)/ntpdsim-cmd_args$U.Tpo" -c -o ntpdsim-cmd_args$U.o `test -f 'cmd_args$U.c' || echo '$(srcdir)/'`cmd_args$U.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-cmd_args$U.Tpo" "$(DEPDIR)/ntpdsim-cmd_args$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-cmd_args$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-cmd_args$U.o -MD -MP -MF $(DEPDIR)/ntpdsim-cmd_args$U.Tpo -c -o ntpdsim-cmd_args$U.o `test -f 'cmd_args$U.c' || echo '$(srcdir)/'`cmd_args$U.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-cmd_args$U.Tpo $(DEPDIR)/ntpdsim-cmd_args$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmd_args$U.c' object='ntpdsim-cmd_args$U.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-cmd_args$U.o `test -f 'cmd_args$U.c' || echo '$(srcdir)/'`cmd_args$U.c ntpdsim-cmd_args$U.obj: cmd_args$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-cmd_args$U.obj -MD -MP -MF "$(DEPDIR)/ntpdsim-cmd_args$U.Tpo" -c -o ntpdsim-cmd_args$U.obj `if test -f 'cmd_args$U.c'; then $(CYGPATH_W) 'cmd_args$U.c'; else $(CYGPATH_W) '$(srcdir)/cmd_args$U.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-cmd_args$U.Tpo" "$(DEPDIR)/ntpdsim-cmd_args$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-cmd_args$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-cmd_args$U.obj -MD -MP -MF $(DEPDIR)/ntpdsim-cmd_args$U.Tpo -c -o ntpdsim-cmd_args$U.obj `if test -f 'cmd_args$U.c'; then $(CYGPATH_W) 'cmd_args$U.c'; else $(CYGPATH_W) '$(srcdir)/cmd_args$U.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-cmd_args$U.Tpo $(DEPDIR)/ntpdsim-cmd_args$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmd_args$U.c' object='ntpdsim-cmd_args$U.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-cmd_args$U.obj `if test -f 'cmd_args$U.c'; then $(CYGPATH_W) 'cmd_args$U.c'; else $(CYGPATH_W) '$(srcdir)/cmd_args$U.c'; fi` ntpdsim-ntp_config$U.o: ntp_config$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_config$U.o -MD -MP -MF "$(DEPDIR)/ntpdsim-ntp_config$U.Tpo" -c -o ntpdsim-ntp_config$U.o `test -f 'ntp_config$U.c' || echo '$(srcdir)/'`ntp_config$U.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntp_config$U.Tpo" "$(DEPDIR)/ntpdsim-ntp_config$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntp_config$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_config$U.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_config$U.Tpo -c -o ntpdsim-ntp_config$U.o `test -f 'ntp_config$U.c' || echo '$(srcdir)/'`ntp_config$U.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntp_config$U.Tpo $(DEPDIR)/ntpdsim-ntp_config$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_config$U.c' object='ntpdsim-ntp_config$U.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_config$U.o `test -f 'ntp_config$U.c' || echo '$(srcdir)/'`ntp_config$U.c ntpdsim-ntp_config$U.obj: ntp_config$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_config$U.obj -MD -MP -MF "$(DEPDIR)/ntpdsim-ntp_config$U.Tpo" -c -o ntpdsim-ntp_config$U.obj `if test -f 'ntp_config$U.c'; then $(CYGPATH_W) 'ntp_config$U.c'; else $(CYGPATH_W) '$(srcdir)/ntp_config$U.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntp_config$U.Tpo" "$(DEPDIR)/ntpdsim-ntp_config$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntp_config$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_config$U.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_config$U.Tpo -c -o ntpdsim-ntp_config$U.obj `if test -f 'ntp_config$U.c'; then $(CYGPATH_W) 'ntp_config$U.c'; else $(CYGPATH_W) '$(srcdir)/ntp_config$U.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntp_config$U.Tpo $(DEPDIR)/ntpdsim-ntp_config$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_config$U.c' object='ntpdsim-ntp_config$U.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_config$U.obj `if test -f 'ntp_config$U.c'; then $(CYGPATH_W) 'ntp_config$U.c'; else $(CYGPATH_W) '$(srcdir)/ntp_config$U.c'; fi` ntpdsim-ntp_io$U.o: ntp_io$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_io$U.o -MD -MP -MF "$(DEPDIR)/ntpdsim-ntp_io$U.Tpo" -c -o ntpdsim-ntp_io$U.o `test -f 'ntp_io$U.c' || echo '$(srcdir)/'`ntp_io$U.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntp_io$U.Tpo" "$(DEPDIR)/ntpdsim-ntp_io$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntp_io$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_io$U.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_io$U.Tpo -c -o ntpdsim-ntp_io$U.o `test -f 'ntp_io$U.c' || echo '$(srcdir)/'`ntp_io$U.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntp_io$U.Tpo $(DEPDIR)/ntpdsim-ntp_io$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_io$U.c' object='ntpdsim-ntp_io$U.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_io$U.o `test -f 'ntp_io$U.c' || echo '$(srcdir)/'`ntp_io$U.c ntpdsim-ntp_io$U.obj: ntp_io$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_io$U.obj -MD -MP -MF "$(DEPDIR)/ntpdsim-ntp_io$U.Tpo" -c -o ntpdsim-ntp_io$U.obj `if test -f 'ntp_io$U.c'; then $(CYGPATH_W) 'ntp_io$U.c'; else $(CYGPATH_W) '$(srcdir)/ntp_io$U.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntp_io$U.Tpo" "$(DEPDIR)/ntpdsim-ntp_io$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntp_io$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntp_io$U.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntp_io$U.Tpo -c -o ntpdsim-ntp_io$U.obj `if test -f 'ntp_io$U.c'; then $(CYGPATH_W) 'ntp_io$U.c'; else $(CYGPATH_W) '$(srcdir)/ntp_io$U.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntp_io$U.Tpo $(DEPDIR)/ntpdsim-ntp_io$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntp_io$U.c' object='ntpdsim-ntp_io$U.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntp_io$U.obj `if test -f 'ntp_io$U.c'; then $(CYGPATH_W) 'ntp_io$U.c'; else $(CYGPATH_W) '$(srcdir)/ntp_io$U.c'; fi` ntpdsim-ntpd$U.o: ntpd$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd$U.o -MD -MP -MF "$(DEPDIR)/ntpdsim-ntpd$U.Tpo" -c -o ntpdsim-ntpd$U.o `test -f 'ntpd$U.c' || echo '$(srcdir)/'`ntpd$U.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntpd$U.Tpo" "$(DEPDIR)/ntpdsim-ntpd$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntpd$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd$U.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntpd$U.Tpo -c -o ntpdsim-ntpd$U.o `test -f 'ntpd$U.c' || echo '$(srcdir)/'`ntpd$U.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntpd$U.Tpo $(DEPDIR)/ntpdsim-ntpd$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpd$U.c' object='ntpdsim-ntpd$U.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd$U.o `test -f 'ntpd$U.c' || echo '$(srcdir)/'`ntpd$U.c ntpdsim-ntpd$U.obj: ntpd$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd$U.obj -MD -MP -MF "$(DEPDIR)/ntpdsim-ntpd$U.Tpo" -c -o ntpdsim-ntpd$U.obj `if test -f 'ntpd$U.c'; then $(CYGPATH_W) 'ntpd$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpd$U.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntpd$U.Tpo" "$(DEPDIR)/ntpdsim-ntpd$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntpd$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd$U.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntpd$U.Tpo -c -o ntpdsim-ntpd$U.obj `if test -f 'ntpd$U.c'; then $(CYGPATH_W) 'ntpd$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpd$U.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntpd$U.Tpo $(DEPDIR)/ntpdsim-ntpd$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpd$U.c' object='ntpdsim-ntpd$U.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd$U.obj `if test -f 'ntpd$U.c'; then $(CYGPATH_W) 'ntpd$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpd$U.c'; fi` ntpdsim-ntpd-opts$U.o: ntpd-opts$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd-opts$U.o -MD -MP -MF "$(DEPDIR)/ntpdsim-ntpd-opts$U.Tpo" -c -o ntpdsim-ntpd-opts$U.o `test -f 'ntpd-opts$U.c' || echo '$(srcdir)/'`ntpd-opts$U.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntpd-opts$U.Tpo" "$(DEPDIR)/ntpdsim-ntpd-opts$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntpd-opts$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd-opts$U.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntpd-opts$U.Tpo -c -o ntpdsim-ntpd-opts$U.o `test -f 'ntpd-opts$U.c' || echo '$(srcdir)/'`ntpd-opts$U.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntpd-opts$U.Tpo $(DEPDIR)/ntpdsim-ntpd-opts$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpd-opts$U.c' object='ntpdsim-ntpd-opts$U.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd-opts$U.o `test -f 'ntpd-opts$U.c' || echo '$(srcdir)/'`ntpd-opts$U.c ntpdsim-ntpd-opts$U.obj: ntpd-opts$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd-opts$U.obj -MD -MP -MF "$(DEPDIR)/ntpdsim-ntpd-opts$U.Tpo" -c -o ntpdsim-ntpd-opts$U.obj `if test -f 'ntpd-opts$U.c'; then $(CYGPATH_W) 'ntpd-opts$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpd-opts$U.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntpd-opts$U.Tpo" "$(DEPDIR)/ntpdsim-ntpd-opts$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntpd-opts$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpd-opts$U.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntpd-opts$U.Tpo -c -o ntpdsim-ntpd-opts$U.obj `if test -f 'ntpd-opts$U.c'; then $(CYGPATH_W) 'ntpd-opts$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpd-opts$U.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntpd-opts$U.Tpo $(DEPDIR)/ntpdsim-ntpd-opts$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpd-opts$U.c' object='ntpdsim-ntpd-opts$U.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpd-opts$U.obj `if test -f 'ntpd-opts$U.c'; then $(CYGPATH_W) 'ntpd-opts$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpd-opts$U.c'; fi` ntpdsim-ntpsim$U.o: ntpsim$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpsim$U.o -MD -MP -MF "$(DEPDIR)/ntpdsim-ntpsim$U.Tpo" -c -o ntpdsim-ntpsim$U.o `test -f 'ntpsim$U.c' || echo '$(srcdir)/'`ntpsim$U.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntpsim$U.Tpo" "$(DEPDIR)/ntpdsim-ntpsim$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntpsim$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpsim$U.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntpsim$U.Tpo -c -o ntpdsim-ntpsim$U.o `test -f 'ntpsim$U.c' || echo '$(srcdir)/'`ntpsim$U.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntpsim$U.Tpo $(DEPDIR)/ntpdsim-ntpsim$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpsim$U.c' object='ntpdsim-ntpsim$U.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpsim$U.o `test -f 'ntpsim$U.c' || echo '$(srcdir)/'`ntpsim$U.c ntpdsim-ntpsim$U.obj: ntpsim$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpsim$U.obj -MD -MP -MF "$(DEPDIR)/ntpdsim-ntpsim$U.Tpo" -c -o ntpdsim-ntpsim$U.obj `if test -f 'ntpsim$U.c'; then $(CYGPATH_W) 'ntpsim$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpsim$U.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntpsim$U.Tpo" "$(DEPDIR)/ntpdsim-ntpsim$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntpsim$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpsim$U.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntpsim$U.Tpo -c -o ntpdsim-ntpsim$U.obj `if test -f 'ntpsim$U.c'; then $(CYGPATH_W) 'ntpsim$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpsim$U.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntpsim$U.Tpo $(DEPDIR)/ntpdsim-ntpsim$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpsim$U.c' object='ntpdsim-ntpsim$U.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpsim$U.obj `if test -f 'ntpsim$U.c'; then $(CYGPATH_W) 'ntpsim$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpsim$U.c'; fi` ntpdsim-ntpdsim-opts$U.o: ntpdsim-opts$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpdsim-opts$U.o -MD -MP -MF "$(DEPDIR)/ntpdsim-ntpdsim-opts$U.Tpo" -c -o ntpdsim-ntpdsim-opts$U.o `test -f 'ntpdsim-opts$U.c' || echo '$(srcdir)/'`ntpdsim-opts$U.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntpdsim-opts$U.Tpo" "$(DEPDIR)/ntpdsim-ntpdsim-opts$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntpdsim-opts$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpdsim-opts$U.o -MD -MP -MF $(DEPDIR)/ntpdsim-ntpdsim-opts$U.Tpo -c -o ntpdsim-ntpdsim-opts$U.o `test -f 'ntpdsim-opts$U.c' || echo '$(srcdir)/'`ntpdsim-opts$U.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntpdsim-opts$U.Tpo $(DEPDIR)/ntpdsim-ntpdsim-opts$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpdsim-opts$U.c' object='ntpdsim-ntpdsim-opts$U.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpdsim-opts$U.o `test -f 'ntpdsim-opts$U.c' || echo '$(srcdir)/'`ntpdsim-opts$U.c ntpdsim-ntpdsim-opts$U.obj: ntpdsim-opts$U.c -@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpdsim-opts$U.obj -MD -MP -MF "$(DEPDIR)/ntpdsim-ntpdsim-opts$U.Tpo" -c -o ntpdsim-ntpdsim-opts$U.obj `if test -f 'ntpdsim-opts$U.c'; then $(CYGPATH_W) 'ntpdsim-opts$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpdsim-opts$U.c'; fi`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ntpdsim-ntpdsim-opts$U.Tpo" "$(DEPDIR)/ntpdsim-ntpdsim-opts$U.Po"; else rm -f "$(DEPDIR)/ntpdsim-ntpdsim-opts$U.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -MT ntpdsim-ntpdsim-opts$U.obj -MD -MP -MF $(DEPDIR)/ntpdsim-ntpdsim-opts$U.Tpo -c -o ntpdsim-ntpdsim-opts$U.obj `if test -f 'ntpdsim-opts$U.c'; then $(CYGPATH_W) 'ntpdsim-opts$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpdsim-opts$U.c'; fi` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ntpdsim-ntpdsim-opts$U.Tpo $(DEPDIR)/ntpdsim-ntpdsim-opts$U.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ntpdsim-opts$U.c' object='ntpdsim-ntpdsim-opts$U.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ntpdsim_CFLAGS) $(CFLAGS) -c -o ntpdsim-ntpdsim-opts$U.obj `if test -f 'ntpdsim-opts$U.c'; then $(CYGPATH_W) 'ntpdsim-opts$U.c'; else $(CYGPATH_W) '$(srcdir)/ntpdsim-opts$U.c'; fi` @@ -772,129 +816,137 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-man1: $(man1_MANS) $(man_MANS) +install-man1: $(man_MANS) @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + uninstall-man1: @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -906,7 +958,7 @@ check: $(BUILT_SOURCES) all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -929,6 +981,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -944,7 +997,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -952,20 +1005,39 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: install-man +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: install-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-am + +install-html-am: install-info: install-info-am +install-info-am: + install-man: install-man1 +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -986,24 +1058,29 @@ ps: ps-am ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man +uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 +.MAKE: ../util/ansi2knr all check check-am install install-am \ + install-exec-am install-strip + .PHONY: CTAGS GTAGS all all-am check check-am check-local clean \ clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-libtool clean-noinstLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ - install-data-am install-exec install-exec-am install-exec-hook \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-exec-hook install-html install-html-am \ install-info install-info-am install-man install-man1 \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-kr \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-binPROGRAMS uninstall-info-am \ - uninstall-man uninstall-man1 + uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 check-local: @MAKE_CHECK_Y2K@ @@ -1058,6 +1135,7 @@ install-exec-hook: done # + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/ntpd/cmd_args.c b/contrib/ntp/ntpd/cmd_args.c index 760bcede584..7843bc31716 100644 --- a/contrib/ntp/ntpd/cmd_args.c +++ b/contrib/ntp/ntpd/cmd_args.c @@ -87,6 +87,16 @@ getCmdOpts( droproot = 1; chrootdir = OPT_ARG( JAILDIR ); #else + fprintf(stderr, + "command line -i option (jaildir) is not supported by this binary" +# ifndef SYS_WINNT + ",\n" "can not drop root privileges. See configure options\n" + "--enable-clockctl and --enable-linuxcaps.\n"); +# else + ".\n"); +# endif + msyslog(LOG_ERR, + "command line -i option (jaildir) is not supported by this binary."); errflg++; #endif } @@ -118,8 +128,8 @@ getCmdOpts( stats_config(STATS_STATSDIR, OPT_ARG( STATSDIR )); if (HAVE_OPT( TRUSTEDKEY )) { - int ct = STACKCT_OPT( TRUSTEDKEY ); - const char** pp = STACKLST_OPT( TRUSTEDKEY ); + int ct = STACKCT_OPT( TRUSTEDKEY ); + const char** pp = STACKLST_OPT( TRUSTEDKEY ); do { u_long tkey; @@ -141,23 +151,29 @@ getCmdOpts( char *ntp_optarg = OPT_ARG( USER ); droproot = 1; - user = malloc(strlen(ntp_optarg) + 1); - if (user == NULL) { - errflg++; - } else { - (void)strncpy(user, ntp_optarg, strlen(ntp_optarg) + 1); - group = rindex(user, ':'); - if (group) - *group++ = '\0'; /* get rid of the ':' */ - } + user = emalloc(strlen(ntp_optarg) + 1); + (void)strncpy(user, ntp_optarg, strlen(ntp_optarg) + 1); + group = rindex(user, ':'); + if (group) + *group++ = '\0'; /* get rid of the ':' */ #else + fprintf(stderr, + "command line -u/--user option is not supported by this binary" +# ifndef SYS_WINNT + ",\n" "can not drop root privileges. See configure options\n" + "--enable-clockctl and --enable-linuxcaps.\n"); +# else + ".\n"); +# endif + msyslog(LOG_ERR, + "command line -u/--user option is not supported by this binary."); errflg++; #endif } if (HAVE_OPT( VAR )) { - int ct = STACKCT_OPT( VAR ); - const char** pp = STACKLST_OPT( VAR ); + int ct = STACKCT_OPT( VAR ); + const char** pp = STACKLST_OPT( VAR ); do { const char* my_ntp_optarg = *pp++; @@ -168,8 +184,8 @@ getCmdOpts( } if (HAVE_OPT( DVAR )) { - int ct = STACKCT_OPT( DVAR ); - const char** pp = STACKLST_OPT( DVAR ); + int ct = STACKCT_OPT( DVAR ); + const char** pp = STACKLST_OPT( DVAR ); do { const char* my_ntp_optarg = *pp++; @@ -188,9 +204,12 @@ getCmdOpts( if (val >= 0) interface_interval = val; else { - msyslog(LOG_ERR, - "command line interface update interval %ld must be greater or equal to 0", - val); + fprintf(stderr, + "command line interface update interval %ld must not be negative\n", + val); + msyslog(LOG_ERR, + "command line interface update interval %ld must not be negative", + val); errflg++; } } @@ -225,7 +244,8 @@ getCmdOpts( #endif /* SIM */ if (errflg || argc) { - printf("argc is <%d>\n", argc); + if (argc) + fprintf(stderr, "argc after processing is <%d>\n", argc); optionUsage(myOptions, 2); } return; diff --git a/contrib/ntp/ntpd/ntp_crypto.c b/contrib/ntp/ntpd/ntp_crypto.c index b3b9b6059f7..cce95a8e1ea 100644 --- a/contrib/ntp/ntpd/ntp_crypto.c +++ b/contrib/ntp/ntpd/ntp_crypto.c @@ -3618,7 +3618,7 @@ crypto_key( if (debug) printf("crypto_key: %s\n", statstr); if (debug > 1) { - if (EVP_MD_type(pkey) == EVP_PKEY_DSA) + if (pkey->type == EVP_PKEY_DSA) DSA_print_fp(stdout, pkey->pkey.dsa, 0); else RSA_print_fp(stdout, pkey->pkey.rsa, 0); @@ -3946,7 +3946,7 @@ crypto_setup(void) sign_pkey = pkey; sstamp = fstamp; hostval.fstamp = htonl(fstamp); - if (EVP_MD_type(host_pkey) != EVP_PKEY_RSA) { + if (host_pkey->type != EVP_PKEY_RSA) { msyslog(LOG_ERR, "crypto_setup: host key is not RSA key type"); exit (-1); diff --git a/contrib/ntp/ntpd/ntp_intres.c b/contrib/ntp/ntpd/ntp_intres.c index 2a4b51fef7c..5facc85693c 100644 --- a/contrib/ntp/ntpd/ntp_intres.c +++ b/contrib/ntp/ntpd/ntp_intres.c @@ -15,11 +15,6 @@ * might go about autoconfiguring an NTP distribution network. * */ - /* - * For special situations define the FORCE_DNSRETRY Macro - * to force retries even if it fails the lookup. - * Use with extreme caution since it will then retry forever. - */ #ifdef HAVE_CONFIG_H # include @@ -463,8 +458,10 @@ findhostaddr( struct conf_entry *entry ) { + static int eai_again_seen = 0; struct addrinfo *addr; struct addrinfo hints; + int again; int error; checkparent(); /* make sure our guy is still running */ @@ -475,17 +472,14 @@ findhostaddr( return 1; } - if (entry->ce_name == NULL && SOCKNUL(&entry->peer_store)) { + if (entry->ce_name == NULL && SOCKNUL(&entry->peer_store)) { msyslog(LOG_ERR, "findhostaddr: both ce_name and ce_peeraddr are undefined!"); return 0; } if (entry->ce_name) { -#ifdef DEBUG - if (debug > 2) - msyslog(LOG_INFO, "findhostaddr: Resolving <%s>", - entry->ce_name); -#endif /* DEBUG */ + DPRINTF(2, ("findhostaddr: Resolving <%s>\n", + entry->ce_name)); memset(&hints, 0, sizeof(hints)); hints.ai_family = AF_UNSPEC; @@ -508,68 +502,72 @@ findhostaddr( entry->ce_config.v6_flag = 1; } } - else if (error == EAI_NONAME) - { - msyslog(LOG_ERR, "host name not found: %s", entry->ce_name); - } } else { -#ifdef DEBUG - if (debug > 2) - msyslog(LOG_INFO, "findhostaddr: Resolving %s>", - stoa(&entry->peer_store)); -#endif + DPRINTF(2, ("findhostaddr: Resolving <%s>\n", + stoa(&entry->peer_store))); + entry->ce_name = emalloc(MAXHOSTNAMELEN); error = getnameinfo((const struct sockaddr *)&entry->peer_store, SOCKLEN(&entry->peer_store), (char *)&entry->ce_name, MAXHOSTNAMELEN, NULL, 0, 0); } -#ifdef DEBUG - if (debug > 2) - printf("intres: got error status of: %d\n", error); -#endif - /* - * If the resolver failed, see if the failure is - * temporary. If so, return success. - */ - if (error != 0) { - switch (error) - { + if (0 == error) { + + /* again is our return value, for success it is 1 */ + again = 1; + + DPRINTF(2, ("findhostaddr: %s resolved.\n", + (entry->ce_name) ? "name" : "address")); + } else { + /* + * If the resolver failed, see if the failure is + * temporary. If so, return success. + */ + again = 0; + + switch (error) { + + case EAI_FAIL: + again = 1; + break; + case EAI_AGAIN: - return (1); + again = 1; + eai_again_seen = 1; + break; + case EAI_NONAME: -#ifndef FORCE_DNSRETRY - return (0); -#else - return (1); -#endif #if defined(EAI_NODATA) && (EAI_NODATA != EAI_NONAME) case EAI_NODATA: #endif - case EAI_FAIL: + msyslog(LOG_ERR, "host name not found%s%s: %s", + (EAI_NONAME == error) ? "" : " EAI_NODATA", + (eai_again_seen) ? " (permanent)" : "", + entry->ce_name); + again = !eai_again_seen; + break; + #ifdef EAI_SYSTEM case EAI_SYSTEM: - return (1); + /* + * EAI_SYSTEM means the real error is in errno. We should be more + * discriminating about which errno values require retrying, but + * this matches existing behavior. + */ + again = 1; + DPRINTF(1, ("intres: EAI_SYSTEM errno %d (%s) means try again, right?\n", + errno, strerror(errno))); + break; #endif - default: - return (0); } + + /* do this here to avoid perturbing errno earlier */ + DPRINTF(2, ("intres: got error status of: %d\n", error)); } - if (entry->ce_name) { -#ifdef DEBUG - if (debug > 2) - msyslog(LOG_INFO, "findhostaddr: name resolved."); -#endif - -#ifdef DEBUG - if (debug > 2) - msyslog(LOG_INFO, "findhostaddr: address resolved."); -#endif - } - - return (1); + return again; } @@ -579,12 +577,14 @@ findhostaddr( static void openntp(void) { - struct addrinfo hints; - struct addrinfo *addrResult; - const char *localhost = "127.0.0.1"; /* Use IPv6 loopback */ + const char *localhost = "127.0.0.1"; /* Use IPv4 loopback */ + struct addrinfo hints; + struct addrinfo *addr; + u_long on; + int err; if (sockfd != INVALID_SOCKET) - return; + return; memset(&hints, 0, sizeof(hints)); @@ -592,52 +592,81 @@ openntp(void) * For now only bother with IPv4 */ hints.ai_family = AF_INET; - hints.ai_socktype = SOCK_DGRAM; - if (getaddrinfo(localhost, "ntp", &hints, &addrResult)!=0) { - msyslog(LOG_ERR, "getaddrinfo failed: %m"); + + err = getaddrinfo(localhost, "ntp", &hints, &addr); + + if (err) { +#ifdef EAI_SYSTEM + if (EAI_SYSTEM == err) + msyslog(LOG_ERR, "getaddrinfo(%s) failed: %m", + localhost); + else +#endif + msyslog(LOG_ERR, "getaddrinfo(%s) failed: %s", + localhost, gai_strerror(err)); resolver_exit(1); } - sockfd = socket(addrResult->ai_family, addrResult->ai_socktype, 0); - if (sockfd == -1) { + sockfd = socket(addr->ai_family, addr->ai_socktype, 0); + + if (INVALID_SOCKET == sockfd) { msyslog(LOG_ERR, "socket() failed: %m"); resolver_exit(1); } +#ifndef SYS_WINNT + /* + * On Windows only the count of sockets must be less than + * FD_SETSIZE. On Unix each descriptor's value must be less + * than FD_SETSIZE, as fd_set is a bit array. + */ + if (sockfd >= FD_SETSIZE) { + msyslog(LOG_ERR, "socket fd %d too large, FD_SETSIZE %d", + (int)sockfd, FD_SETSIZE); + resolver_exit(1); + } + /* * Make the socket non-blocking. We'll wait with select() + * Unix: fcntl(O_NONBLOCK) or fcntl(FNDELAY) */ -#ifndef SYS_WINNT -#if defined(O_NONBLOCK) +# ifdef O_NONBLOCK if (fcntl(sockfd, F_SETFL, O_NONBLOCK) == -1) { msyslog(LOG_ERR, "fcntl(O_NONBLOCK) failed: %m"); resolver_exit(1); } -#else -#if defined(FNDELAY) +# else +# ifdef FNDELAY if (fcntl(sockfd, F_SETFL, FNDELAY) == -1) { msyslog(LOG_ERR, "fcntl(FNDELAY) failed: %m"); resolver_exit(1); } -#else -# include "Bletch: NEED NON BLOCKING IO" -#endif /* FNDDELAY */ -#endif /* O_NONBLOCK */ -#else /* SYS_WINNT */ - { - int on = 1; - if (ioctlsocket(sockfd,FIONBIO,(u_long *) &on) == SOCKET_ERROR) { - msyslog(LOG_ERR, "ioctlsocket(FIONBIO) fails: %m"); - resolver_exit(1); /* Windows NT - set socket in non-blocking mode */ - } +# else +# include "Bletch: NEED NON BLOCKING IO" +# endif /* FNDDELAY */ +# endif /* O_NONBLOCK */ + (void)on; /* quiet unused warning */ +#else /* !SYS_WINNT above */ + /* + * Make the socket non-blocking. We'll wait with select() + * Windows: ioctlsocket(FIONBIO) + */ + on = 1; + err = ioctlsocket(sockfd, FIONBIO, &on); + if (SOCKET_ERROR == err) { + msyslog(LOG_ERR, "ioctlsocket(FIONBIO) fails: %m"); + resolver_exit(1); } #endif /* SYS_WINNT */ - if (connect(sockfd, addrResult->ai_addr, addrResult->ai_addrlen) == -1) { + + err = connect(sockfd, addr->ai_addr, addr->ai_addrlen); + if (SOCKET_ERROR == err) { msyslog(LOG_ERR, "openntp: connect() failed: %m"); resolver_exit(1); } - freeaddrinfo(addrResult); + + freeaddrinfo(addr); } @@ -664,7 +693,7 @@ request( checkparent(); /* make sure our guy is still running */ if (sockfd == INVALID_SOCKET) - openntp(); + openntp(); #ifdef SYS_WINNT hReadWriteEvent = CreateEvent(NULL, FALSE, FALSE, NULL); @@ -1110,6 +1139,7 @@ doconfigure( #endif if (dores && SOCKNUL(&(ce->peer_store))) { if (!findhostaddr(ce)) { +#ifndef IGNORE_DNS_ERRORS msyslog(LOG_ERR, "couldn't resolve `%s', giving up on it", ce->ce_name); @@ -1117,6 +1147,7 @@ doconfigure( ce = ceremove->ce_next; removeentry(ceremove); continue; +#endif } } diff --git a/contrib/ntp/ntpd/ntp_io.c b/contrib/ntp/ntpd/ntp_io.c index faa46461f48..71ee15fef6f 100644 --- a/contrib/ntp/ntpd/ntp_io.c +++ b/contrib/ntp/ntpd/ntp_io.c @@ -65,6 +65,12 @@ #endif /* IPV6 Multicast Support */ #endif /* IPv6 Support */ +#ifdef INCLUDE_IPV6_SUPPORT +#include +#include +#include +#endif /* !INCLUDE_IPV6_SUPPORT */ + extern int listen_to_virtual_ips; extern const char *specific_interface; @@ -94,7 +100,12 @@ extern const char *specific_interface; #define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12) #endif -#endif +/* + * Windows C runtime ioctl() can't deal properly with sockets, + * map to ioctlsocket for this source file. + */ +#define ioctl(fd, opt, val) ioctlsocket((fd), (opt), (u_long *)(val)) +#endif /* SYS_WINNT */ /* * We do asynchronous input using the SIGIO facility. A number of @@ -194,7 +205,7 @@ static isc_boolean_t socket_multicast_disable P((struct interface *, struct sock static void print_interface P((struct interface *, char *, char *)); #define DPRINT_INTERFACE(_LVL_, _ARGS_) do { if (debug >= (_LVL_)) { print_interface _ARGS_; } } while (0) #else -#define DPRINT_INTERFACE(_LVL_, _ARGS_) +#define DPRINT_INTERFACE(_LVL_, _ARGS_) do {} while (0) #endif typedef struct vsock vsock_t; @@ -289,23 +300,29 @@ static inline int read_refclock_packet P((SOCKET, struct refclockio *, l_fp) * systems are not affected by this and work correctly. * See Microsoft Knowledge Base Article Q263823 for details of this. */ -isc_result_t -connection_reset_fix(SOCKET fd) { +void +connection_reset_fix( + SOCKET fd, + struct sockaddr_storage *addr + ) +{ DWORD dwBytesReturned = 0; BOOL bNewBehavior = FALSE; DWORD status; - if(isc_win32os_majorversion() < 5) - return (ISC_R_SUCCESS); /* NT 4.0 has no problem */ - - /* disable bad behavior using IOCTL: SIO_UDP_CONNRESET */ - status = WSAIoctl(fd, SIO_UDP_CONNRESET, &bNewBehavior, - sizeof(bNewBehavior), NULL, 0, - &dwBytesReturned, NULL, NULL); - if (status != SOCKET_ERROR) - return (ISC_R_SUCCESS); - else - return (ISC_R_UNEXPECTED); + /* + * disable bad behavior using IOCTL: SIO_UDP_CONNRESET + * NT 4.0 has no problem + */ + if (isc_win32os_majorversion() >= 5) { + status = WSAIoctl(fd, SIO_UDP_CONNRESET, &bNewBehavior, + sizeof(bNewBehavior), NULL, 0, + &dwBytesReturned, NULL, NULL); + if (SOCKET_ERROR == status) + netsyslog(LOG_ERR, "connection_reset_fix() " + "failed for address %s: %m", + stoa(addr)); + } } #endif @@ -477,6 +494,8 @@ void init_io(void) { #ifdef SYS_WINNT + init_io_completion_port(); + if (!Win32InitSockets()) { netsyslog(LOG_ERR, "No useable winsock.dll: %m"); @@ -748,6 +767,24 @@ delete_interface(struct interface *interface) static void add_interface(struct interface *interface) { + static struct interface *listhead = NULL; + + /* + * For ntpd, the first few interfaces (wildcard, localhost) + * will never be removed. This means inter_list.head is + * unchanging once initialized. Take advantage of that to + * watch for changes and catch corruption earlier. This + * helped track down corruption caused by using FD_SET with + * a descriptor numerically larger than FD_SETSIZE. + */ + if (NULL == listhead) + listhead = inter_list.head; + + if (listhead != inter_list.head) { + msyslog(LOG_ERR, "add_interface inter_list.head corrupted: was %p now %p", + listhead, inter_list.head); + exit(1); + } /* * Calculate the address hash */ @@ -1137,6 +1174,36 @@ set_wildcard_reuse(int family, int on) } #endif /* OS_NEEDS_REUSEADDR_FOR_IFADDRBIND */ +#ifdef INCLUDE_IPV6_SUPPORT +static isc_boolean_t +is_anycast(struct sockaddr *sa, char *name) +{ +#if defined(SIOCGIFAFLAG_IN6) && defined(IN6_IFF_ANYCAST) + struct in6_ifreq ifr6; + int fd; + u_int32_t flags6; + + if (sa->sa_family != AF_INET6) + return ISC_FALSE; + if ((fd = socket(AF_INET6, SOCK_DGRAM, 0)) < 0) + return ISC_FALSE; + memset(&ifr6, 0, sizeof(ifr6)); + memcpy(&ifr6.ifr_addr, (struct sockaddr_in6 *)sa, + sizeof(struct sockaddr_in6)); + strlcpy(ifr6.ifr_name, name, IF_NAMESIZE); + if (ioctl(fd, SIOCGIFAFLAG_IN6, &ifr6) < 0) { + close(fd); + return ISC_FALSE; + } + close(fd); + flags6 = ifr6.ifr_ifru.ifru_flags6; + if ((flags6 & IN6_IFF_ANYCAST) != 0) + return ISC_TRUE; +#endif /* !SIOCGIFAFLAG_IN6 || !IN6_IFF_ANYCAST */ + return ISC_FALSE; +} +#endif /* !INCLUDE_IPV6_SUPPORT */ + /* * update_interface strategy * @@ -1184,7 +1251,7 @@ update_interfaces( scan_ipv6 = ISC_TRUE; #if defined(DEBUG) else - if(debug) + if (debug) netsyslog(LOG_ERR, "no IPv6 interfaces found"); #endif #endif @@ -1192,7 +1259,7 @@ update_interfaces( scan_ipv6 = ISC_TRUE; #if defined(ISC_PLATFORM_HAVEIPV6) && defined(DEBUG) else - if(debug) + if (debug) netsyslog(LOG_ERR, "no IPv6 interfaces found"); #endif @@ -1276,6 +1343,11 @@ update_interfaces( if (is_wildcard_addr(&interface.sin)) continue; +#ifdef INCLUDE_IPV6_SUPPORT + if (is_anycast((struct sockaddr *)&interface.sin, isc_if.name)) + continue; +#endif /* !INCLUDE_IPV6_SUPPORT */ + /* * map to local *address* in order * to map all duplicate interfaces to an interface structure @@ -1501,6 +1573,24 @@ create_interface( return interface; } + +#ifdef SO_EXCLUSIVEADDRUSE +static void +set_excladdruse(int fd) +{ + int one = 1; + int failed; + + failed = setsockopt(fd, SOL_SOCKET, SO_EXCLUSIVEADDRUSE, + (char *)&one, sizeof(one)); + + if (failed) + netsyslog(LOG_ERR, + "setsockopt(%d, SO_EXCLUSIVEADDRUSE, on): %m", fd); +} +#endif /* SO_EXCLUSIVEADDRUSE */ + + /* * set_reuseaddr() - set/clear REUSEADDR on all sockets * NB possible hole - should we be doing this on broadcast @@ -1508,13 +1598,16 @@ create_interface( */ static void set_reuseaddr(int flag) { - struct interface *interf; + struct interface *interf; + +#ifndef SO_EXCLUSIVEADDRUSE for (interf = ISC_LIST_HEAD(inter_list); interf != NULL; interf = ISC_LIST_NEXT(interf, link)) { - if (interf->flags & INT_WILDCARD) - continue; + + if (interf->flags & INT_WILDCARD) + continue; /* * if interf->fd is INVALID_SOCKET, we might have a adapter @@ -1530,6 +1623,7 @@ set_reuseaddr(int flag) { } } } +#endif /* ! SO_EXCLUSIVEADDRUSE */ } /* @@ -1691,7 +1785,7 @@ enable_multicast_if(struct interface *iface, struct sockaddr_storage *maddr) case AF_INET6: #ifdef INCLUDE_IPV6_MULTICAST_SUPPORT if (setsockopt(iface->fd, IPPROTO_IPV6, IPV6_MULTICAST_IF, - &iface->scopeid, sizeof(iface->scopeid)) == -1) { + (char *) &iface->scopeid, sizeof(iface->scopeid)) == -1) { netsyslog(LOG_ERR, "setsockopt IPV6_MULTICAST_IF failure: %m on socket %d, addr %s, scope %d for multicast address %s", iface->fd, stoa(&iface->sin), iface->scopeid, @@ -1703,7 +1797,7 @@ enable_multicast_if(struct interface *iface, struct sockaddr_storage *maddr) * Don't send back to itself, but allow it to fail to set it */ if (setsockopt(iface->fd, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, - &off, sizeof(off)) == -1) { + (char *) &off, sizeof(off)) == -1) { netsyslog(LOG_ERR, "setsockopt IP_MULTICAST_LOOP failure: %m on socket %d, addr %s for multicast address %s", iface->fd, stoa(&iface->sin), stoa(maddr)); @@ -1981,7 +2075,10 @@ io_multicast_add( ) { #ifdef MCAST - struct interface *interface, *iface; + struct interface *interface; +#ifndef MULTICAST_NONEWSOCKET + struct interface *iface; +#endif int lscope = 0; /* @@ -2058,7 +2155,7 @@ io_multicast_add( } else { - delete_interface(interface); /* re-use existing interface */ + delete_interface(interface); /* re-use existing interface */ interface = NULL; if (addr.ss_family == AF_INET) interface = wildipv4; @@ -2227,12 +2324,7 @@ static void init_nonblocking_io(SOCKET fd) #elif defined(FIONBIO) { int on = 1; -# if defined(SYS_WINNT) - - if (ioctlsocket(fd,FIONBIO,(u_long *) &on) == SOCKET_ERROR) -# else if (ioctl(fd,FIONBIO,&on) < 0) -# endif { netsyslog(LOG_ERR, "ioctl(FIONBIO) fails on fd #%d: %m", fd); @@ -2267,8 +2359,13 @@ open_socket( { int errval; SOCKET fd; - int on = 1, off = 0; /* int is OK for REUSEADR per */ - /* http://www.kohala.com/start/mcast.api.txt */ + /* + * int is OK for REUSEADR per + * http://www.kohala.com/start/mcast.api.txt + */ + int on = 1; + int off = 0; + #if defined(IPTOS_LOWDELAY) && defined(IPPROTO_IP) && defined(IP_TOS) int tos; #endif /* IPTOS_LOWDELAY && IPPROTO_IP && IP_TOS */ @@ -2277,38 +2374,30 @@ open_socket( return (INVALID_SOCKET); /* create a datagram (UDP) socket */ + fd = socket(addr->ss_family, SOCK_DGRAM, 0); + if (INVALID_SOCKET == fd) { #ifndef SYS_WINNT - if ( (fd = socket(addr->ss_family, SOCK_DGRAM, 0)) < 0) { errval = errno; #else - if ( (fd = socket(addr->ss_family, SOCK_DGRAM, 0)) == INVALID_SOCKET) { errval = WSAGetLastError(); #endif - if(addr->ss_family == AF_INET) - netsyslog(LOG_ERR, "socket(AF_INET, SOCK_DGRAM, 0) failed on address %s: %m", - stoa(addr)); - else if(addr->ss_family == AF_INET6) - netsyslog(LOG_ERR, "socket(AF_INET6, SOCK_DGRAM, 0) failed on address %s: %m", - stoa(addr)); -#ifndef SYS_WINNT - if (errval == EPROTONOSUPPORT || errval == EAFNOSUPPORT || + netsyslog(LOG_ERR, + "socket(AF_INET%s, SOCK_DGRAM, 0) failed on address %s: %m", + (addr->ss_family == AF_INET6) ? "6" : "", + stoa(addr)); + + if (errval == EPROTONOSUPPORT || + errval == EAFNOSUPPORT || errval == EPFNOSUPPORT) -#else - if (errval == WSAEPROTONOSUPPORT || errval == WSAEAFNOSUPPORT || - errval == WSAEPFNOSUPPORT) -#endif return (INVALID_SOCKET); msyslog(LOG_ERR, "unexpected error code %d (not PROTONOSUPPORT|AFNOSUPPORT|FPNOSUPPORT) - exiting", errval); exit(1); /*NOTREACHED*/ } -#ifdef SYS_WINNT - if (connection_reset_fix(fd) != ISC_R_SUCCESS) { - netsyslog(LOG_ERR, "connection_reset_fix(fd) failed on address %s: %m", - stoa(addr)); - } -#endif /* SYS_WINNT */ +#ifdef SYS_WINNT + connection_reset_fix(fd, addr); +#endif /* * Fixup the file descriptor for some systems * See bug #530 for details of the issue. @@ -2317,18 +2406,36 @@ open_socket( /* * set SO_REUSEADDR since we will be binding the same port - * number on each interface according to flag + * number on each interface according to turn_off_reuse. + * This is undesirable on Windows versions starting with + * Windows XP (numeric version 5.1). */ - if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, - turn_off_reuse ? (char *)&off : (char *)&on, sizeof(on))) - { - netsyslog(LOG_ERR, "setsockopt SO_REUSEADDR %s on fails on address %s: %m", - turn_off_reuse ? "off" : "on", stoa(addr)); +#ifdef SYS_WINNT + if (isc_win32os_versioncheck(5, 1, 0, 0) < 0) /* before 5.1 */ +#endif + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, + (char *)(turn_off_reuse + ? &off + : &on), + sizeof(on))) { - closesocket(fd); - - return INVALID_SOCKET; - } + netsyslog(LOG_ERR, "setsockopt SO_REUSEADDR %s" + " fails for address %s: %m", + turn_off_reuse + ? "off" + : "on", + stoa(addr)); + closesocket(fd); + return INVALID_SOCKET; + } +#ifdef SO_EXCLUSIVEADDRUSE + /* + * setting SO_EXCLUSIVEADDRUSE on the wildcard we open + * first will cause more specific binds to fail. + */ + if (!(interf->flags & INT_WILDCARD)) + set_excladdruse(fd); +#endif /* * IPv4 specific options go here @@ -2406,22 +2513,24 @@ open_socket( ) { if (addr->ss_family == AF_INET) netsyslog(LOG_ERR, - "bind() fd %d, family %d, port %d, addr %s, in_classd=%d flags=0x%x fails: %m", - fd, addr->ss_family, (int)ntohs(((struct sockaddr_in*)addr)->sin_port), + "bind() fd %d, family AF_INET, port %d, addr %s, in_classd=%d flags=0x%x fails: %m", + fd, (int)ntohs(((struct sockaddr_in*)addr)->sin_port), stoa(addr), - IN_CLASSD(ntohl(((struct sockaddr_in*)addr)->sin_addr.s_addr)), flags); + IN_CLASSD(ntohl(((struct sockaddr_in*)addr)->sin_addr.s_addr)), + flags); #ifdef INCLUDE_IPV6_SUPPORT else if (addr->ss_family == AF_INET6) - netsyslog(LOG_ERR, - "bind() fd %d, family %d, port %d, scope %d, addr %s, in6_is_addr_multicast=%d flags=0x%x fails: %m", - fd, addr->ss_family, (int)ntohs(((struct sockaddr_in6*)addr)->sin6_port), + netsyslog(LOG_ERR, + "bind() fd %d, family AF_INET6, port %d, scope %d, addr %s, mcast=%d flags=0x%x fails: %m", + fd, (int)ntohs(((struct sockaddr_in6*)addr)->sin6_port), # ifdef ISC_PLATFORM_HAVESCOPEID ((struct sockaddr_in6*)addr)->sin6_scope_id # else -1 # endif , stoa(addr), - IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6*)addr)->sin6_addr), flags); + IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6*)addr)->sin6_addr), + flags); #endif } @@ -2452,7 +2561,7 @@ open_socket( addr->ss_family, (int)ntohs(((struct sockaddr_in*)addr)->sin_port), stoa(addr), - flags)); + interf->flags)); init_nonblocking_io(fd); @@ -2496,9 +2605,6 @@ sendpkt( ) { int cc, slot; -#ifdef SYS_WINNT - DWORD err; -#endif /* SYS_WINNT */ /* * Send error caches. Empty slots have port == 0 @@ -2618,8 +2724,8 @@ sendpkt( #endif /* INCLUDE_IPV6_SUPPORT */ #if defined(HAVE_IO_COMPLETION_PORT) - err = io_completion_port_sendto(inter, pkt, len, dest); - if (err != ERROR_SUCCESS) + cc = io_completion_port_sendto(inter, pkt, len, dest); + if (cc != ERROR_SUCCESS) #else #ifdef SIM cc = srvr_rply(&ntp_node, dest, inter, pkt); @@ -2632,9 +2738,9 @@ sendpkt( { inter->notsent++; packets_notsent++; + #if defined(HAVE_IO_COMPLETION_PORT) - err = WSAGetLastError(); - if (err != WSAEWOULDBLOCK && err != WSAENOBUFS && slot < 0) + if (cc != WSAEWOULDBLOCK && cc != WSAENOBUFS && slot < 0) #else if (errno != EWOULDBLOCK && errno != ENOBUFS && slot < 0) #endif @@ -2659,13 +2765,13 @@ sendpkt( case AF_INET6 : for (slot = ERRORCACHESIZE; --slot >= 0; ) - if (badaddrs6[slot].port == 0) - { - badaddrs6[slot].port = SRCPORT(dest); - badaddrs6[slot].addr = ((struct sockaddr_in6*)dest)->sin6_addr; - break; - } - break; + if (badaddrs6[slot].port == 0) + { + badaddrs6[slot].port = SRCPORT(dest); + badaddrs6[slot].addr = ((struct sockaddr_in6*)dest)->sin6_addr; + break; + } + break; #endif /* INCLUDE_IPV6_SUPPORT */ default: /* don't care if not supported */ break; @@ -3207,7 +3313,7 @@ findlocalinterface( struct interface *iface; DPRINTF(4, ("Finding interface for addr %s in list of addresses\n", - stoa(addr));) + stoa(addr))); memset(&saddr, 0, sizeof(saddr)); saddr.ss_family = addr->ss_family; @@ -3624,6 +3730,11 @@ add_fd_to_list(SOCKET fd, enum desc_type type) { * I/O Completion Ports don't care about the select and FD_SET */ #ifndef HAVE_IO_COMPLETION_PORT + if (fd < 0 || fd >= FD_SETSIZE) { + msyslog(LOG_ERR, "Too many sockets in use, FD_SETSIZE %d exceeded", + FD_SETSIZE); + exit(1); + } /* * keep activefds in sync */ diff --git a/contrib/ntp/ntpd/ntp_request.c b/contrib/ntp/ntpd/ntp_request.c index b1bc99d6f3f..f5eed4449d9 100644 --- a/contrib/ntp/ntpd/ntp_request.c +++ b/contrib/ntp/ntpd/ntp_request.c @@ -409,6 +409,7 @@ process_private( int mod_okay ) { + static u_long quiet_until; struct req_pkt *inpkt; struct req_pkt_tail *tailinpkt; struct sockaddr_storage *srcadr; @@ -444,8 +445,14 @@ process_private( || (++ec, INFO_MBZ(inpkt->mbz_itemsize) != 0) || (++ec, rbufp->recv_length < REQ_LEN_HDR) ) { - msyslog(LOG_ERR, "process_private: INFO_ERR_FMT: test %d failed, pkt from %s", ec, stoa(srcadr)); - req_ack(srcadr, inter, inpkt, INFO_ERR_FMT); + NLOG(NLOG_SYSEVENT) + if (current_time >= quiet_until) { + msyslog(LOG_ERR, + "process_private: drop test %d" + " failed, pkt from %s", + ec, stoa(srcadr)); + quiet_until = current_time + 60; + } return; } @@ -496,10 +503,10 @@ process_private( */ temp_size = INFO_ITEMSIZE(inpkt->mbz_itemsize); if ((temp_size != proc->sizeofitem && - temp_size != proc->v6_sizeofitem) && + temp_size != proc->v6_sizeofitem) && !(inpkt->implementation == IMPL_XNTPD && - inpkt->request == REQ_CONFIG && - temp_size == sizeof(struct old_conf_peer))) { + inpkt->request == REQ_CONFIG && + temp_size == sizeof(struct old_conf_peer))) { #ifdef DEBUG if (debug > 2) printf("process_private: wrong item size, received %d, should be %d or %d\n", @@ -1319,6 +1326,7 @@ do_conf( struct req_pkt *inpkt ) { + static u_long soonest_ifrescan_time = 0; int items; u_int fl; struct conf_peer *cp; @@ -1412,6 +1420,23 @@ do_conf( req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA); return; } + + /* + * ntp_intres.c uses REQ_CONFIG/doconf() to add each + * server after its name is resolved. If we have been + * disconnected from the network, it may notice the + * network has returned and add the first server while + * the relevant interface is still disabled, awaiting + * the next interface rescan. To get things moving + * more quickly, trigger an interface scan now, except + * if we have done so in the last half minute. + */ + if (soonest_ifrescan_time < current_time) { + soonest_ifrescan_time = current_time + 30; + timer_interfacetimeout(current_time); + DPRINTF(1, ("do_conf triggering interface rescan\n")); + } + cp = (struct conf_peer *) ((char *)cp + INFO_ITEMSIZE(inpkt->mbz_itemsize)); } diff --git a/contrib/ntp/ntpd/ntp_timer.c b/contrib/ntp/ntpd/ntp_timer.c index fb6de702ac8..812206ad262 100644 --- a/contrib/ntp/ntpd/ntp_timer.c +++ b/contrib/ntp/ntpd/ntp_timer.c @@ -343,12 +343,10 @@ timer(void) * interface update timer */ if (interface_interval && interface_timer <= current_time) { + timer_interfacetimeout(current_time + interface_interval); -#ifdef DEBUG - if (debug) - printf("timer: interface update\n"); -#endif - interface_update(NULL, NULL); + DPRINTF(1, ("timer: interface update\n")); + interface_update(NULL, NULL); } /* diff --git a/contrib/ntp/ntpd/ntpd-opts.c b/contrib/ntp/ntpd/ntpd-opts.c index eae28cb301c..4d23d667427 100644 --- a/contrib/ntp/ntpd/ntpd-opts.c +++ b/contrib/ntp/ntpd/ntpd-opts.c @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (ntpd-opts.c) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:20:10 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:13:10 AM EST * From the definitions ntpd-opts.def * and the template file options * @@ -19,7 +19,7 @@ * * This source file is copyrighted and licensed under the following terms: * - * ntpd copyright 1970-2008 David L. Mills and/or others - all rights reserved + * ntpd copyright 1970-2009 David L. Mills and/or others - all rights reserved * * see html/copyright.html */ @@ -34,7 +34,7 @@ extern "C" { #endif tSCC zCopyright[] = - "ntpd copyright (c) 1970-2008 David L. Mills and/or others, all rights reserved"; + "ntpd copyright (c) 1970-2009 David L. Mills and/or others, all rights reserved"; tSCC zCopyrightNotice[] = /* extracted from ../include/copyright.def near line 8 */ @@ -835,16 +835,16 @@ static tOptDesc optDesc[ OPTION_CT ] = { */ tSCC zPROGNAME[] = "NTPD"; tSCC zUsageTitle[] = -"ntpd - NTP daemon program - Ver. 4.2.4p5\n\ +"ntpd - NTP daemon program - Ver. 4.2.4p8\n\ USAGE: %s [ - [] | --[{=| }] ]...\n"; #define zRcName NULL #define apzHomeList NULL -tSCC zBugsAddr[] = "http://bugs.ntp.isc.org, bugs@ntp.org"; +tSCC zBugsAddr[] = "http://bugs.ntp.org, bugs@ntp.org"; #define zExplain NULL tSCC zDetail[] = "\n\n"; tSCC zFullVersion[] = NTPD_FULL_VERSION; -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 408 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 408 */ #if defined(ENABLE_NLS) # define OPTPROC_BASE OPTPROC_TRANSLATE @@ -914,7 +914,7 @@ DESC(DEBUG_LEVEL).optOccCt = atoi( pOptDesc->pzLastArg ); #endif /* defined(TEST_NTPD_OPTS) */ -/* extracted from /usr/local/gnu/share/autogen/optmain.tpl near line 92 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optmain.tpl near line 92 */ #if defined(TEST_NTPD_OPTS) /* TEST MAIN PROCEDURE: */ @@ -930,7 +930,7 @@ main( int argc, char** argv ) return res; } #endif /* defined TEST_NTPD_OPTS */ -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 514 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 514 */ #if ENABLE_NLS #include diff --git a/contrib/ntp/ntpd/ntpd-opts.h b/contrib/ntp/ntpd/ntpd-opts.h index 45d0de5a5e0..0347f333aa8 100644 --- a/contrib/ntp/ntpd/ntpd-opts.h +++ b/contrib/ntp/ntpd/ntpd-opts.h @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (ntpd-opts.h) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:20:09 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:13:09 AM EST * From the definitions ntpd-opts.def * and the template file options * @@ -19,7 +19,7 @@ * * This source file is copyrighted and licensed under the following terms: * - * ntpd copyright 1970-2008 David L. Mills and/or others - all rights reserved + * ntpd copyright 1970-2009 David L. Mills and/or others - all rights reserved * * see html/copyright.html */ @@ -87,8 +87,8 @@ typedef enum { } teOptIndex; #define OPTION_CT 32 -#define NTPD_VERSION "4.2.4p5" -#define NTPD_FULL_VERSION "ntpd - NTP daemon program - Ver. 4.2.4p5" +#define NTPD_VERSION "4.2.4p8" +#define NTPD_FULL_VERSION "ntpd - NTP daemon program - Ver. 4.2.4p8" /* * Interface defines for all options. Replace "n" with the UPPER_CASED @@ -319,7 +319,7 @@ typedef enum { ntpdOptions.pzCurOpt = NULL ) #define START_OPT RESTART_OPT(1) #define USAGE(c) (*ntpdOptions.pUsageProc)( &ntpdOptions, c ) -/* extracted from /usr/local/gnu/share/autogen/opthead.tpl near line 360 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/opthead.tpl near line 360 */ /* * * * * * * diff --git a/contrib/ntp/ntpd/ntpd-opts.texi b/contrib/ntp/ntpd/ntpd-opts.texi index 5a99b58abca..04912945b24 100644 --- a/contrib/ntp/ntpd/ntpd-opts.texi +++ b/contrib/ntp/ntpd/ntpd-opts.texi @@ -6,7 +6,7 @@ # # EDIT THIS FILE WITH CAUTION (ntpd-opts.texi) # -# It has been AutoGen-ed Sunday August 17, 2008 at 05:20:12 AM EDT +# It has been AutoGen-ed Tuesday December 8, 2009 at 08:13:12 AM EST # From the definitions ntpd-opts.def # and the template file aginfo.tpl @end ignore @@ -60,12 +60,15 @@ This is the automatically generated usage text for ntpd: @exampleindent 0 @example -ntpd - NTP daemon program - Ver. 4.2.5p113 +ntpd - NTP daemon program - Ver. 4.2.5p247-RC USAGE: ntpd [ - [] | --[@{=| @}] ]... Flg Arg Option-Name Description -4 no ipv4 Force IPv4 DNS name resolution + - prohibits these options: + ipv6 -6 no ipv6 Force IPv6 DNS name resolution - - an alternate for ipv4 + - prohibits these options: + ipv4 -a no authreq Require crypto authentication - prohibits these options: authnoreq @@ -80,20 +83,24 @@ USAGE: ntpd [ - [] | --[@{=| @}] ]... - may appear multiple times -f Str driftfile frequency drift file name -g no panicgate Allow the first adjustment to be Big - -I Str interface Listen on the specified interface or IP + - may appear multiple times + -i --- jaildir built without --enable-clockctl or --enable-linuxcaps + -I Str interface Listen on an interface name or address - may appear multiple times -k Str keyfile path to symmetric keys -l Str logfile path to the log file - -L no novirtualips Do not listen to virtual IPs + -L no novirtualips Do not listen to virtual interfaces -n no nofork Do not fork -N no nice Run at high priority -p Str pidfile path to the PID file -P Num priority Process priority -q no quit Set the time and quit -r Str propagationdelay Broadcast/propagation delay + Str saveconfigquit Save parsed configuration and quit -s Str statsdir Statistics file location -t Str trustedkey Trusted key number - may appear multiple times + -u --- user built without --enable-clockctl or --enable-linuxcaps -U Num updateinterval interval in seconds between scans for new or dropped interfaces Str var make ARG an ntp variable (RW) - may appear multiple times @@ -101,7 +108,7 @@ USAGE: ntpd [ - [] | --[@{=| @}] ]... - may appear multiple times -x no slew Slew up to 600 seconds opt version Output version information and exit - -? no help Display usage information and exit + -? no help Display extended usage information and exit -! no more-help Extended usage information passed thru pager Options are specified by doubled hyphens and their name diff --git a/contrib/ntp/ntpd/ntpd.1 b/contrib/ntp/ntpd/ntpd.1 index 25aee4117f5..ec0a0ed75fa 100644 --- a/contrib/ntp/ntpd/ntpd.1 +++ b/contrib/ntp/ntpd/ntpd.1 @@ -1,7 +1,7 @@ -.TH NTPD 1 2008-08-17 "( 4.2.4p5)" "Programmer's Manual" +.TH NTPD 1 2009-12-08 "( 4.2.4p8)" "Programmer's Manual" .\" EDIT THIS FILE WITH CAUTION (ntpd.1) .\" -.\" It has been AutoGen-ed Sunday August 17, 2008 at 05:20:11 AM EDT +.\" It has been AutoGen-ed Tuesday December 8, 2009 at 08:13:11 AM EST .\" From the definitions ntpd-opts.def .\" and the template file agman1.tpl .\" @@ -283,7 +283,7 @@ by loading values from environment variables named: .SH AUTHOR David L. Mills and/or others .br -Please send bug reports to: http://bugs.ntp.isc.org, bugs@ntp.org +Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org .PP .nf diff --git a/contrib/ntp/ntpd/ntpd.c b/contrib/ntp/ntpd/ntpd.c index 04e0d07f94c..02a5198b087 100644 --- a/contrib/ntp/ntpd/ntpd.c +++ b/contrib/ntp/ntpd/ntpd.c @@ -26,30 +26,22 @@ # include #endif #include -#ifndef SYS_WINNT -# if !defined(VMS) /*wjm*/ -# ifdef HAVE_SYS_PARAM_H -# include -# endif -# endif /* VMS */ -# ifdef HAVE_SYS_SIGNAL_H -# include -# else -# include +#if !defined(VMS) /*wjm*/ +# ifdef HAVE_SYS_PARAM_H +# include # endif -# ifdef HAVE_SYS_IOCTL_H -# include -# endif /* HAVE_SYS_IOCTL_H */ -# ifdef HAVE_SYS_RESOURCE_H -# include -# endif /* HAVE_SYS_RESOURCE_H */ +#endif /* VMS */ +#ifdef HAVE_SYS_SIGNAL_H +# include #else # include -# include -# include -# include -#include "ntp_iocompletionport.h" -#endif /* SYS_WINNT */ +#endif +#ifdef HAVE_SYS_IOCTL_H +# include +#endif /* HAVE_SYS_IOCTL_H */ +#ifdef HAVE_SYS_RESOURCE_H +# include +#endif /* HAVE_SYS_RESOURCE_H */ #if defined(HAVE_RTPRIO) # ifdef HAVE_SYS_RESOURCE_H # include @@ -821,9 +813,6 @@ ntpdmain( init_restrict(); init_mon(); init_timer(); -#if defined (HAVE_IO_COMPLETION_PORT) - init_io_completion_port(); -#endif init_lib(); init_request(); init_control(); @@ -993,7 +982,7 @@ getgroup: #if defined(HAVE_IO_COMPLETION_PORT) for (;;) { - int tot_full_recvbufs = GetReceivedBuffers(); + GetReceivedBuffers(); #else /* normal I/O */ BLOCK_IO_AND_ALARM(); diff --git a/contrib/ntp/ntpd/ntpdsim-opts.c b/contrib/ntp/ntpd/ntpdsim-opts.c index 4f09c0fa9d6..d9ef1b22e05 100644 --- a/contrib/ntp/ntpd/ntpdsim-opts.c +++ b/contrib/ntp/ntpd/ntpdsim-opts.c @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (ntpdsim-opts.c) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:20:14 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:13:13 AM EST * From the definitions ntpdsim-opts.def * and the template file options * @@ -19,7 +19,7 @@ * * This source file is copyrighted and licensed under the following terms: * - * ntpdsim copyright 1970-2008 David L. Mills and/or others - all rights reserved + * ntpdsim copyright 1970-2009 David L. Mills and/or others - all rights reserved * * see html/copyright.html */ @@ -34,7 +34,7 @@ extern "C" { #endif tSCC zCopyright[] = - "ntpdsim copyright (c) 1970-2008 David L. Mills and/or others, all rights reserved"; + "ntpdsim copyright (c) 1970-2009 David L. Mills and/or others, all rights reserved"; tSCC zCopyrightNotice[] = /* extracted from ../include/copyright.def near line 8 */ @@ -1072,7 +1072,7 @@ static tOptDesc optDesc[ OPTION_CT ] = { */ tSCC zPROGNAME[] = "NTPDSIM"; tSCC zUsageTitle[] = -"ntpdsim - NTP daemon simulation program - Ver. 4.2.4p5\n\ +"ntpdsim - NTP daemon simulation program - Ver. 4.2.4p8\n\ USAGE: %s [ - [] | --[{=| }] ]...\n"; tSCC zRcName[] = ".ntprc"; tSCC* apzHomeList[] = { @@ -1080,11 +1080,11 @@ tSCC* apzHomeList[] = { ".", NULL }; -tSCC zBugsAddr[] = "http://bugs.ntp.isc.org, bugs@ntp.org"; +tSCC zBugsAddr[] = "http://bugs.ntp.org, bugs@ntp.org"; #define zExplain NULL tSCC zDetail[] = "\n\n"; tSCC zFullVersion[] = NTPDSIM_FULL_VERSION; -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 408 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 408 */ #if defined(ENABLE_NLS) # define OPTPROC_BASE OPTPROC_TRANSLATE @@ -1155,7 +1155,7 @@ DESC(DEBUG_LEVEL).optOccCt = atoi( pOptDesc->pzLastArg ); #endif /* defined(TEST_NTPDSIM_OPTS) */ -/* extracted from /usr/local/gnu/share/autogen/optmain.tpl near line 92 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optmain.tpl near line 92 */ #if defined(TEST_NTPDSIM_OPTS) /* TEST MAIN PROCEDURE: */ @@ -1171,7 +1171,7 @@ main( int argc, char** argv ) return res; } #endif /* defined TEST_NTPDSIM_OPTS */ -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 514 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 514 */ #if ENABLE_NLS #include diff --git a/contrib/ntp/ntpd/ntpdsim-opts.h b/contrib/ntp/ntpd/ntpdsim-opts.h index 1c63654d778..3458bbfd0de 100644 --- a/contrib/ntp/ntpd/ntpdsim-opts.h +++ b/contrib/ntp/ntpd/ntpdsim-opts.h @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (ntpdsim-opts.h) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:20:13 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:13:12 AM EST * From the definitions ntpdsim-opts.def * and the template file options * @@ -19,7 +19,7 @@ * * This source file is copyrighted and licensed under the following terms: * - * ntpdsim copyright 1970-2008 David L. Mills and/or others - all rights reserved + * ntpdsim copyright 1970-2009 David L. Mills and/or others - all rights reserved * * see html/copyright.html */ @@ -98,8 +98,8 @@ typedef enum { } teOptIndex; #define OPTION_CT 43 -#define NTPDSIM_VERSION "4.2.4p5" -#define NTPDSIM_FULL_VERSION "ntpdsim - NTP daemon simulation program - Ver. 4.2.4p5" +#define NTPDSIM_VERSION "4.2.4p8" +#define NTPDSIM_FULL_VERSION "ntpdsim - NTP daemon simulation program - Ver. 4.2.4p8" /* * Interface defines for all options. Replace "n" with the UPPER_CASED @@ -390,7 +390,7 @@ typedef enum { ntpdsimOptions.pzCurOpt = NULL ) #define START_OPT RESTART_OPT(1) #define USAGE(c) (*ntpdsimOptions.pUsageProc)( &ntpdsimOptions, c ) -/* extracted from /usr/local/gnu/share/autogen/opthead.tpl near line 360 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/opthead.tpl near line 360 */ /* * * * * * * diff --git a/contrib/ntp/ntpd/ntpdsim-opts.texi b/contrib/ntp/ntpd/ntpdsim-opts.texi index 49b54398dd5..ed522106276 100644 --- a/contrib/ntp/ntpd/ntpdsim-opts.texi +++ b/contrib/ntp/ntpd/ntpdsim-opts.texi @@ -6,7 +6,7 @@ # # EDIT THIS FILE WITH CAUTION (ntpdsim-opts.texi) # -# It has been AutoGen-ed Sunday August 17, 2008 at 05:20:17 AM EDT +# It has been AutoGen-ed Tuesday December 8, 2009 at 08:13:15 AM EST # From the definitions ntpdsim-opts.def # and the template file aginfo.tpl @end ignore @@ -69,7 +69,66 @@ This is the automatically generated usage text for ntpdsim: @exampleindent 0 @example -ntpdsim is unavailable - no --help +ntpd - NTP daemon program - Ver. 4.2.5p247-RC +USAGE: ntpdsim [ - [] | --[@{=| @}] ]... + Flg Arg Option-Name Description + -4 no ipv4 Force IPv4 DNS name resolution + - prohibits these options: + ipv6 + -6 no ipv6 Force IPv6 DNS name resolution + - prohibits these options: + ipv4 + -a no authreq Require crypto authentication + - prohibits these options: + authnoreq + -A no authnoreq Do not require crypto authentication + - prohibits these options: + authreq + -b no bcastsync Allow us to sync to broadcast servers + -c Str configfile configuration file name + -d no debug-level Increase output debug message level + - may appear multiple times + -D Str set-debug-level Set the output debug message level + - may appear multiple times + -f Str driftfile frequency drift file name + -g no panicgate Allow the first adjustment to be Big + - may appear multiple times + -i --- jaildir built without --enable-clockctl or --enable-linuxcaps + -I Str interface Listen on an interface name or address + - may appear multiple times + -k Str keyfile path to symmetric keys + -l Str logfile path to the log file + -L no novirtualips Do not listen to virtual interfaces + -n no nofork Do not fork + -N no nice Run at high priority + -p Str pidfile path to the PID file + -P Num priority Process priority + -q no quit Set the time and quit + -r Str propagationdelay Broadcast/propagation delay + Str saveconfigquit Save parsed configuration and quit + -s Str statsdir Statistics file location + -t Str trustedkey Trusted key number + - may appear multiple times + -u --- user built without --enable-clockctl or --enable-linuxcaps + -U Num updateinterval interval in seconds between scans for new or dropped interfaces + Str var make ARG an ntp variable (RW) + - may appear multiple times + Str dvar make ARG an ntp variable (RW|DEF) + - may appear multiple times + -x no slew Slew up to 600 seconds + opt version Output version information and exit + -? no help Display extended usage information and exit + -! no more-help Extended usage information passed thru pager + +Options are specified by doubled hyphens and their name +or by a single hyphen and the flag character. + +The following option preset mechanisms are supported: + - examining environment variables named NTPD_* + + + +please send bug reports to: http://bugs.ntp.org, bugs@@ntp.org @end example @exampleindent 4 diff --git a/contrib/ntp/ntpd/ntpdsim.1 b/contrib/ntp/ntpd/ntpdsim.1 index 2a7ea4667d2..202876418f2 100644 --- a/contrib/ntp/ntpd/ntpdsim.1 +++ b/contrib/ntp/ntpd/ntpdsim.1 @@ -1,7 +1,7 @@ -.TH NTPDSIM 1 2008-08-17 "( 4.2.4p5)" "Programmer's Manual" +.TH NTPDSIM 1 2009-12-08 "( 4.2.4p8)" "Programmer's Manual" .\" EDIT THIS FILE WITH CAUTION (ntpdsim.1) .\" -.\" It has been AutoGen-ed Sunday August 17, 2008 at 05:20:16 AM EDT +.\" It has been AutoGen-ed Tuesday December 8, 2009 at 08:13:14 AM EST .\" From the definitions ntpdsim-opts.def .\" and the template file agman1.tpl .\" @@ -344,7 +344,7 @@ is searched for within those directories. .SH AUTHOR David L. Mills and/or others .br -Please send bug reports to: http://bugs.ntp.isc.org, bugs@ntp.org +Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org .PP .nf diff --git a/contrib/ntp/ntpd/refclock_dumbclock.c b/contrib/ntp/ntpd/refclock_dumbclock.c index 2788649ac3a..10ff2cfe893 100644 --- a/contrib/ntp/ntpd/refclock_dumbclock.c +++ b/contrib/ntp/ntpd/refclock_dumbclock.c @@ -12,11 +12,6 @@ #include #endif -#if defined(SYS_WINNT) -#undef close -#define close closesocket -#endif - #if defined(REFCLOCK) && defined(CLOCK_DUMBCLOCK) #include "ntpd.h" @@ -28,6 +23,12 @@ #include #include +#ifdef SYS_WINNT +extern int async_write(int, const void *, unsigned int); +#undef write +#define write(fd, data, octets) async_write(fd, data, octets) +#endif + /* * This driver supports a generic dumb clock that only outputs hh:mm:ss, * in local time, no less. diff --git a/contrib/ntp/ntpd/refclock_hopfser.c b/contrib/ntp/ntpd/refclock_hopfser.c index 94b660be236..9037d4a9222 100644 --- a/contrib/ntp/ntpd/refclock_hopfser.c +++ b/contrib/ntp/ntpd/refclock_hopfser.c @@ -14,11 +14,6 @@ # include "config.h" #endif -#if defined(SYS_WINNT) -#undef close -#define close closesocket -#endif - #if defined(REFCLOCK) && (defined(CLOCK_HOPF_SERIAL)) #include "ntpd.h" @@ -51,6 +46,12 @@ # include #endif +#ifdef SYS_WINNT +extern int async_write(int, const void *, unsigned int); +#undef write +#define write(fd, data, octets) async_write(fd, data, octets) +#endif + /* * clock definitions */ diff --git a/contrib/ntp/ntpd/refclock_jjy.c b/contrib/ntp/ntpd/refclock_jjy.c index 9d1419a6f6b..d1707ced0f2 100644 --- a/contrib/ntp/ntpd/refclock_jjy.c +++ b/contrib/ntp/ntpd/refclock_jjy.c @@ -74,6 +74,9 @@ /* [Fix] C-DEX JST2000 */ /* Thanks to Hideo Kuramatsu for the patch */ /* */ +/* 2009/04/05 */ +/* [Add] Support the CITIZEN T.I.C JJY-200 receiver */ +/* */ /**********************************************************************/ #ifdef HAVE_CONFIG_H @@ -131,12 +134,26 @@ /* Second signal */ /* */ /**********************************************************************/ +/* */ +/* The CITIZEN T.I.C CO., LTD. JJY receiver JJY200 */ +/* */ +/* Command Response Remarks */ +/* ------------ ---------------------- --------------------- */ +/* 'XX YY/MM/DD W HH:MM:SS */ +/* XX: OK|NG|ER */ +/* W: 0(Monday)-6(Sunday) */ +/* */ +/**********************************************************************/ /* * Interface definitions */ #define DEVICE "/dev/jjy%d" /* device name and unit */ #define SPEED232 B9600 /* uart speed (9600 baud) */ +#define SPEED232_TRISTATE_JJY01 B9600 /* UART speed (9600 baud) */ +#define SPEED232_CDEX_JST2000 B9600 /* UART speed (9600 baud) */ +#define SPEED232_ECHOKEISOKUKI_LT2000 B9600 /* UART speed (9600 baud) */ +#define SPEED232_CITIZENTIC_JJY200 B4800 /* UART speed (4800 baud) */ #define REFID "JJY" /* reference ID */ #define DESCRIPTION "JJY Receiver" #define PRECISION (-3) /* precision assumed (about 100 ms) */ @@ -149,6 +166,7 @@ struct jjyunit { short operationmode ; /* Echo Keisokuki LT-2000 : 1 or 2 */ short version ; short linediscipline ; /* LDISC_CLK or LDISC_RAW */ + char bPollFlag ; /* Set by jjy_pool and Reset by jjy_receive */ int linecount ; int lineerror ; int year, month, day, hour, minute, second, msecond ; @@ -164,6 +182,7 @@ struct jjyunit { #define UNITTYPE_TRISTATE_JJY01 1 #define UNITTYPE_CDEX_JST2000 2 #define UNITTYPE_ECHOKEISOKUKI_LT2000 3 +#define UNITTYPE_CITIZENTIC_JJY200 4 /* * Function prototypes @@ -174,10 +193,12 @@ static void jjy_poll P((int, struct peer *)); static void jjy_poll_tristate_jjy01 P((int, struct peer *)); static void jjy_poll_cdex_jst2000 P((int, struct peer *)); static void jjy_poll_echokeisokuki_lt2000 P((int, struct peer *)); +static void jjy_poll_citizentic_jjy200 P((int, struct peer *)); static void jjy_receive P((struct recvbuf *)); static int jjy_receive_tristate_jjy01 P((struct recvbuf *)); static int jjy_receive_cdex_jst2000 P((struct recvbuf *)); static int jjy_receive_echokeisokuki_lt2000 P((struct recvbuf *)); +static int jjy_receive_citizentic_jjy200 P((struct recvbuf *)); /* * Transfer vector @@ -217,6 +238,7 @@ jjy_start ( int unit, struct peer *peer ) int fd ; char *pDeviceName ; short iDiscipline ; + int iSpeed232 ; #ifdef DEBUG if ( debug ) { @@ -238,9 +260,22 @@ jjy_start ( int unit, struct peer *peer ) */ switch ( peer->ttl ) { case 0 : - case 1 : iDiscipline = LDISC_CLK ; break ; - case 2 : iDiscipline = LDISC_RAW ; break ; - case 3 : iDiscipline = LDISC_CLK ; break ; + case 1 : + iDiscipline = LDISC_CLK ; + iSpeed232 = SPEED232_TRISTATE_JJY01 ; + break ; + case 2 : + iDiscipline = LDISC_RAW ; + iSpeed232 = SPEED232_CDEX_JST2000 ; + break ; + case 3 : + iDiscipline = LDISC_CLK ; + iSpeed232 = SPEED232_ECHOKEISOKUKI_LT2000 ; + break ; + case 4 : + iDiscipline = LDISC_CLK ; + iSpeed232 = SPEED232_CITIZENTIC_JJY200 ; + break ; default : msyslog ( LOG_ERR, "JJY receiver [ %s mode %d ] : Unsupported mode", ntoa(&peer->srcadr), peer->ttl ) ; @@ -248,7 +283,7 @@ jjy_start ( int unit, struct peer *peer ) return RC_START_ERROR ; } - if ( ! ( fd = refclock_open ( pDeviceName, SPEED232, iDiscipline ) ) ) { + if ( ! ( fd = refclock_open ( pDeviceName, iSpeed232, iDiscipline ) ) ) { free ( (void*) pDeviceName ) ; return RC_START_ERROR ; } @@ -299,6 +334,11 @@ jjy_start ( int unit, struct peer *peer ) break ; } break ; + case 4 : + up->unittype = UNITTYPE_CITIZENTIC_JJY200 ; + up->lineexpect = 1 ; + up->charexpect[0] = 23 ; /* 'XX YY/MM/DD W HH:MM:SS */ + break ; default : msyslog ( LOG_ERR, "JJY receiver [ %s mode %d ] : Unsupported mode", ntoa(&peer->srcadr), peer->ttl ) ; @@ -434,6 +474,10 @@ jjy_receive ( struct recvbuf *rbufp ) rc = jjy_receive_echokeisokuki_lt2000 ( rbufp ) ; break ; + case UNITTYPE_CITIZENTIC_JJY200 : + rc = jjy_receive_citizentic_jjy200 ( rbufp ) ; + break ; + default : rc = 0 ; break ; @@ -453,6 +497,8 @@ jjy_receive ( struct recvbuf *rbufp ) if ( rc == 0 ) return ; + up->bPollFlag = 0 ; + if ( up->lineerror != 0 ) { refclock_report ( peer, CEVNT_BADREPLY ) ; strcpy ( sLogText, "BAD REPLY [" ) ; @@ -865,6 +911,93 @@ jjy_receive_echokeisokuki_lt2000 ( struct recvbuf *rbufp ) } +/**************************************************************************************************/ + +static int +jjy_receive_citizentic_jjy200 ( struct recvbuf *rbufp ) +{ + + static char *sFunctionName = "jjy_receive_citizentic_jjy200" ; + + struct jjyunit *up ; + struct refclockproc *pp ; + struct peer *peer; + + char *pBuf ; + int iLen ; + int rc ; + char cApostrophe, sStatus[3] ; + int iWeekday ; + + /* + * Initialize pointers and read the timecode and timestamp + */ + peer = (struct peer *) rbufp->recv_srcclock ; + pp = peer->procptr ; + up = (struct jjyunit *) pp->unitptr ; + + if ( up->linediscipline == LDISC_RAW ) { + pBuf = up->rawbuf ; + iLen = up->charcount ; + } else { + pBuf = pp->a_lastcode ; + iLen = pp->lencode ; + } + + /* + * JJY-200 sends a timestamp every second. + * So, a timestamp is ignored unless it is right after polled. + */ + if ( ! up->bPollFlag ) return 0 ; + + switch ( up->linecount ) { + + case 1 : /* 'XX YY/MM/DD W HH:MM:SS */ + + if ( iLen != 23 ) { +#ifdef DEBUG + if ( debug >= 2 ) { + printf ( "%s (refclock_jjy.c) : Reply length error ( iLen=%d )\n", sFunctionName, iLen ) ; + } +#endif + up->lineerror = 1 ; + break ; + } + + rc = sscanf ( pBuf, "%c%2s %2d/%2d/%2d %1d %2d:%2d:%2d", + &cApostrophe, sStatus, + &up->year, &up->month, &up->day, &iWeekday, &up->hour, &up->minute, &up->second ) ; + sStatus[2] = 0 ; + if ( rc != 9 || cApostrophe != '\'' || strcmp( sStatus, "OK" ) != 0 + || up->month < 1 || up->month > 12 || up->day < 1 || up->day > 31 + || iWeekday > 6 + || up->hour > 23 || up->minute > 59 || up->second > 60 ) { +#ifdef DEBUG + if ( debug >= 2 ) { + printf ( "%s (refclock_jjy.c) : Time error (rc=%d) [ %c %2s %02d %02d %02d %d %02d %02d %02d ]\n", sFunctionName, + rc, cApostrophe, sStatus, up->year, up->month, up->day, iWeekday, up->hour, up->minute, up->second ) ; + } +#endif + up->lineerror = 1 ; + break ; + } + + up->year += 2000 ; + up->msecond = 0 ; + + break ; + + default : /* Unexpected reply */ + + up->lineerror = 1 ; + break ; + + } + + return 1 ; + +} + /**************************************************************************************************/ /* jjy_poll - called by the transmit procedure */ /**************************************************************************************************/ @@ -893,6 +1026,7 @@ jjy_poll ( int unit, struct peer *peer ) pp->polls ++ ; + up->bPollFlag = 1 ; up->linecount = 0 ; up->lineerror = 0 ; up->charcount = 0 ; @@ -911,6 +1045,10 @@ jjy_poll ( int unit, struct peer *peer ) jjy_poll_echokeisokuki_lt2000 ( unit, peer ) ; break ; + case UNITTYPE_CITIZENTIC_JJY200 : + jjy_poll_citizentic_jjy200 ( unit, peer ) ; + break ; + default : break ; @@ -1006,6 +1144,16 @@ jjy_poll_echokeisokuki_lt2000 ( int unit, struct peer *peer ) } +/**************************************************************************************************/ + +static void +jjy_poll_citizentic_jjy200 ( int unit, struct peer *peer ) +{ + + /* Do nothing ( up->bPollFlag is set by the jjy_poll ) */ + +} + #else int refclock_jjy_bs ; #endif /* REFCLOCK */ diff --git a/contrib/ntp/ntpd/refclock_nmea.c b/contrib/ntp/ntpd/refclock_nmea.c index 5b124cb0c3f..a176ee86c13 100644 --- a/contrib/ntp/ntpd/refclock_nmea.c +++ b/contrib/ntp/ntpd/refclock_nmea.c @@ -7,11 +7,6 @@ #include #endif -#if defined(SYS_WINNT) -#undef close -#define close closesocket -#endif - #if defined(REFCLOCK) && defined(CLOCK_NMEA) #include @@ -27,6 +22,12 @@ # include "ppsapi_timepps.h" #endif /* HAVE_PPSAPI */ +#ifdef SYS_WINNT +extern int async_write(int, const void *, unsigned int); +#undef write +#define write(fd, data, octets) async_write(fd, data, octets) +#endif + /* * This driver supports the NMEA GPS Receiver with * diff --git a/contrib/ntp/ntpd/refclock_palisade.c b/contrib/ntp/ntpd/refclock_palisade.c index 217ec104dcf..adb4659f97b 100644 --- a/contrib/ntp/ntpd/refclock_palisade.c +++ b/contrib/ntp/ntpd/refclock_palisade.c @@ -56,13 +56,14 @@ #include "config.h" #endif -#if defined(SYS_WINNT) -#undef close -#define close closesocket -#endif - #if defined(REFCLOCK) && (defined(PALISADE) || defined(CLOCK_PALISADE)) +#ifdef SYS_WINNT +extern int async_write(int, const void *, unsigned int); +#undef write +#define write(fd, data, octets) async_write(fd, data, octets) +#endif + #include "refclock_palisade.h" /* Table to get from month to day of the year */ const int days_of_year [12] = { diff --git a/contrib/ntp/ntpdate/Makefile.in b/contrib/ntp/ntpdate/Makefile.in index fadcd184cbf..d127815b087 100644 --- a/contrib/ntp/ntpdate/Makefile.in +++ b/contrib/ntp/ntpdate/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -21,15 +22,12 @@ # subdir to warn folks if there is another version there. -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -59,8 +57,8 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) ntpdate_SOURCES = ntpdate.c ntpdate_OBJECTS = ntpdate.$(OBJEXT) @@ -70,17 +68,19 @@ am_ntptimeset_OBJECTS = ntptimeset.$(OBJEXT) ntptime_config.$(OBJEXT) ntptimeset_OBJECTS = $(am_ntptimeset_OBJECTS) ntptimeset_LDADD = $(LDADD) ntptimeset_DEPENDENCIES = version.o ../libntp/libntp.a -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = ntpdate.c $(ntptimeset_SOURCES) DIST_SOURCES = ntpdate.c $(ntptimeset_SOURCES) HEADERS = $(noinst_HEADERS) @@ -88,8 +88,6 @@ ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -105,10 +103,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -121,11 +115,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -139,6 +132,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -152,8 +146,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -163,6 +156,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -176,16 +170,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -197,29 +186,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ ntptimeset_SOURCES = ntptimeset.c ntptime_config.c AM_CPPFLAGS = -I$(top_srcdir)/include # LDADD might need RESLIB and ADJLIB @@ -235,14 +236,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../bincheck.mf $(am__con @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ntpdate/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign ntpdate/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ntpdate/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign ntpdate/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -260,40 +261,56 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - || test -f $$p1 \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list ntpdate$(EXEEXT): $(ntpdate_OBJECTS) $(ntpdate_DEPENDENCIES) @rm -f ntpdate$(EXEEXT) - $(LINK) $(ntpdate_LDFLAGS) $(ntpdate_OBJECTS) $(ntpdate_LDADD) $(LIBS) + $(LINK) $(ntpdate_OBJECTS) $(ntpdate_LDADD) $(LIBS) ntptimeset$(EXEEXT): $(ntptimeset_OBJECTS) $(ntptimeset_DEPENDENCIES) @rm -f ntptimeset$(EXEEXT) - $(LINK) $(ntptimeset_LDFLAGS) $(ntptimeset_OBJECTS) $(ntptimeset_LDADD) $(LIBS) + $(LINK) $(ntptimeset_OBJECTS) $(ntptimeset_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -306,22 +323,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntptimeset.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -332,83 +349,85 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -417,7 +436,7 @@ check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -439,6 +458,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -452,7 +472,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -460,20 +480,39 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: install-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-am + +install-html-am: install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -494,19 +533,23 @@ ps: ps-am ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-info-am +uninstall-am: uninstall-binPROGRAMS + +.MAKE: install-am install-exec-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-exec \ - install-exec-am install-exec-hook install-info install-info-am \ - install-man install-strip installcheck installcheck-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-hook \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ - uninstall-am uninstall-binPROGRAMS uninstall-info-am + uninstall-am uninstall-binPROGRAMS $(PROGRAMS): $(LDADD) @@ -532,6 +575,7 @@ install-exec-hook: done # + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/ntpdc/Makefile.in b/contrib/ntp/ntpdc/Makefile.in index 30c96acc8a7..0e4ce77f0f5 100644 --- a/contrib/ntp/ntpdc/Makefile.in +++ b/contrib/ntp/ntpdc/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -19,15 +20,12 @@ # subdir to warn folks if there is another version there. -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -58,8 +56,8 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = nl.pl +CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_ntpdc_OBJECTS = ntpdc$U.$(OBJEXT) ntpdc_ops$U.$(OBJEXT) \ ntpdc-opts$U.$(OBJEXT) @@ -70,19 +68,42 @@ ntpdc_DEPENDENCIES = version.o $(am__DEPENDENCIES_1) \ ntpdc_layout_SOURCES = ntpdc-layout.c ntpdc_layout_OBJECTS = ntpdc-layout$U.$(OBJEXT) ntpdc_layout_DEPENDENCIES = -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(ntpdc_SOURCES) ntpdc-layout.c DIST_SOURCES = $(ntpdc_SOURCES) ntpdc-layout.c +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) @@ -91,8 +112,6 @@ ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -108,10 +127,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -124,11 +139,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -142,6 +156,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -155,8 +170,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -166,6 +180,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -179,16 +194,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -200,29 +210,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = ../util/ansi2knr EXTRA_DATA = check-layout BUILT_SOURCES = @MAKE_CHECK_LAYOUT@ ntpdc-opts.c ntpdc-opts.h ntpdc.1 \ @@ -257,14 +279,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/../bincheck.mf $(am__con @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ntpdc/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign ntpdc/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ntpdc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign ntpdc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -282,42 +304,58 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): nl.pl: $(top_builddir)/config.status $(srcdir)/nl.pl.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - || test -f $$p1 \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list ntpdc$(EXEEXT): $(ntpdc_OBJECTS) $(ntpdc_DEPENDENCIES) @rm -f ntpdc$(EXEEXT) - $(LINK) $(ntpdc_LDFLAGS) $(ntpdc_OBJECTS) $(ntpdc_LDADD) $(LIBS) + $(LINK) $(ntpdc_OBJECTS) $(ntpdc_LDADD) $(LIBS) ntpdc-layout$(EXEEXT): $(ntpdc_layout_OBJECTS) $(ntpdc_layout_DEPENDENCIES) @rm -f ntpdc-layout$(EXEEXT) - $(LINK) $(ntpdc_layout_LDFLAGS) $(ntpdc_layout_OBJECTS) $(ntpdc_layout_LDADD) $(LIBS) + $(LINK) $(ntpdc_layout_OBJECTS) $(ntpdc_layout_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -325,7 +363,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c ../util/ansi2knr: - cd ../util && $(MAKE) $(AM_MAKEFLAGS) ansi2knr + $(am__cd) ../util && $(MAKE) $(AM_MAKEFLAGS) ./ansi2knr mostlyclean-kr: -test "$U" = "" || rm -f *_.c @@ -336,22 +374,22 @@ mostlyclean-kr: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntpdc_ops$U.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -372,129 +410,137 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-man1: $(man1_MANS) $(man_MANS) +install-man1: $(man_MANS) @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + uninstall-man1: @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/.. - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -504,7 +550,7 @@ check: $(BUILT_SOURCES) all-am: Makefile $(PROGRAMS) $(MANS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -528,6 +574,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -542,7 +589,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -550,20 +597,39 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: install-man +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: install-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-am + +install-html-am: install-info: install-info-am +install-info-am: + install-man: install-man1 +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -584,22 +650,26 @@ ps: ps-am ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man +uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 +.MAKE: ../util/ansi2knr all check install install-am install-exec-am \ + install-strip + .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-exec \ - install-exec-am install-exec-hook install-info install-info-am \ - install-man install-man1 install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-kr mostlyclean-libtool pdf \ - pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-info-am uninstall-man \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-hook \ + install-html install-html-am install-info install-info-am \ + install-man install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-kr mostlyclean-libtool pdf pdf-am ps ps-am tags \ + uninstall uninstall-am uninstall-binPROGRAMS uninstall-man \ uninstall-man1 @@ -649,6 +719,7 @@ install-exec-hook: done # + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/ntpdc/ntpdc-opts.c b/contrib/ntp/ntpdc/ntpdc-opts.c index d3c2549af81..41be37ec9e5 100644 --- a/contrib/ntp/ntpdc/ntpdc-opts.c +++ b/contrib/ntp/ntpdc/ntpdc-opts.c @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (ntpdc-opts.c) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:26:25 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:00 AM EST * From the definitions ntpdc-opts.def * and the template file options * @@ -19,7 +19,7 @@ * * This source file is copyrighted and licensed under the following terms: * - * ntpdc copyright 1970-2008 David L. Mills and/or others - all rights reserved + * ntpdc copyright 1970-2009 David L. Mills and/or others - all rights reserved * * see html/copyright.html */ @@ -34,7 +34,7 @@ extern "C" { #endif tSCC zCopyright[] = - "ntpdc copyright (c) 1970-2008 David L. Mills and/or others, all rights reserved"; + "ntpdc copyright (c) 1970-2009 David L. Mills and/or others, all rights reserved"; tSCC zCopyrightNotice[] = /* extracted from ../include/copyright.def near line 8 */ @@ -462,7 +462,7 @@ static tOptDesc optDesc[ OPTION_CT ] = { */ tSCC zPROGNAME[] = "NTPDC"; tSCC zUsageTitle[] = -"ntpdc - vendor-specific NTP query program - Ver. 4.2.4p5\n\ +"ntpdc - vendor-specific NTP query program - Ver. 4.2.4p8\n\ USAGE: %s [ - [] | --[{=| }] ]... [ host ...]\n"; tSCC zRcName[] = ".ntprc"; tSCC* apzHomeList[] = { @@ -470,7 +470,7 @@ tSCC* apzHomeList[] = { ".", NULL }; -tSCC zBugsAddr[] = "http://bugs.ntp.isc.org, bugs@ntp.org"; +tSCC zBugsAddr[] = "http://bugs.ntp.org, bugs@ntp.org"; #define zExplain NULL tSCC zDetail[] = "\n\ The\n\ @@ -490,7 +490,7 @@ configuration options which can be specified at startup using\n\ ntpd's configuration file may also be specified at run time using\n\ [= prog-name =] .\n"; tSCC zFullVersion[] = NTPDC_FULL_VERSION; -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 408 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 408 */ #if defined(ENABLE_NLS) # define OPTPROC_BASE OPTPROC_TRANSLATE @@ -560,7 +560,7 @@ DESC(DEBUG_LEVEL).optOccCt = atoi( pOptDesc->pzLastArg ); #endif /* defined(TEST_NTPDC_OPTS) */ -/* extracted from /usr/local/gnu/share/autogen/optmain.tpl near line 92 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optmain.tpl near line 92 */ #if defined(TEST_NTPDC_OPTS) /* TEST MAIN PROCEDURE: */ @@ -576,7 +576,7 @@ main( int argc, char** argv ) return res; } #endif /* defined TEST_NTPDC_OPTS */ -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 514 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 514 */ #if ENABLE_NLS #include diff --git a/contrib/ntp/ntpdc/ntpdc-opts.h b/contrib/ntp/ntpdc/ntpdc-opts.h index a4bf99fd1e8..f6eef6575fa 100644 --- a/contrib/ntp/ntpdc/ntpdc-opts.h +++ b/contrib/ntp/ntpdc/ntpdc-opts.h @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (ntpdc-opts.h) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:26:25 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:00 AM EST * From the definitions ntpdc-opts.def * and the template file options * @@ -19,7 +19,7 @@ * * This source file is copyrighted and licensed under the following terms: * - * ntpdc copyright 1970-2008 David L. Mills and/or others - all rights reserved + * ntpdc copyright 1970-2009 David L. Mills and/or others - all rights reserved * * see html/copyright.html */ @@ -70,8 +70,8 @@ typedef enum { } teOptIndex; #define OPTION_CT 15 -#define NTPDC_VERSION "4.2.4p5" -#define NTPDC_FULL_VERSION "ntpdc - vendor-specific NTP query program - Ver. 4.2.4p5" +#define NTPDC_VERSION "4.2.4p8" +#define NTPDC_FULL_VERSION "ntpdc - vendor-specific NTP query program - Ver. 4.2.4p8" /* * Interface defines for all options. Replace "n" with the UPPER_CASED @@ -190,7 +190,7 @@ typedef enum { ntpdcOptions.pzCurOpt = NULL ) #define START_OPT RESTART_OPT(1) #define USAGE(c) (*ntpdcOptions.pUsageProc)( &ntpdcOptions, c ) -/* extracted from /usr/local/gnu/share/autogen/opthead.tpl near line 360 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/opthead.tpl near line 360 */ /* * * * * * * diff --git a/contrib/ntp/ntpdc/ntpdc-opts.texi b/contrib/ntp/ntpdc/ntpdc-opts.texi index dbce64c9cfe..121c270df17 100644 --- a/contrib/ntp/ntpdc/ntpdc-opts.texi +++ b/contrib/ntp/ntpdc/ntpdc-opts.texi @@ -6,7 +6,7 @@ # # EDIT THIS FILE WITH CAUTION (ntpdc-opts.texi) # -# It has been AutoGen-ed Sunday August 17, 2008 at 05:26:27 AM EDT +# It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:02 AM EST # From the definitions ntpdc-opts.def # and the template file aginfo.tpl @end ignore @@ -58,12 +58,15 @@ This is the automatically generated usage text for ntpdc: @exampleindent 0 @example -ntpdc - vendor-specific NTP query program - Ver. 4.2.5p113 +ntpdc - vendor-specific NTP query program - Ver. 4.2.5p247-RC USAGE: ntpdc [ - [] | --[@{=| @}] ]... [ host ...] Flg Arg Option-Name Description -4 no ipv4 Force IPv4 DNS name resolution + - prohibits these options: + ipv6 -6 no ipv6 Force IPv6 DNS name resolution - - an alternate for ipv4 + - prohibits these options: + ipv4 -c Str command run a command and exit - may appear multiple times -l no listpeers Print a list of the peers @@ -87,7 +90,7 @@ USAGE: ntpdc [ - [] | --[@{=| @}] ]... [ host ...] - may appear multiple times -n no numeric numeric host addresses opt version Output version information and exit - -? no help Display usage information and exit + -? no help Display extended usage information and exit -! no more-help Extended usage information passed thru pager -> opt save-opts Save the option state to a config file -< Str load-opts Load options from a config file diff --git a/contrib/ntp/ntpdc/ntpdc.1 b/contrib/ntp/ntpdc/ntpdc.1 index c653b62f947..42270651849 100644 --- a/contrib/ntp/ntpdc/ntpdc.1 +++ b/contrib/ntp/ntpdc/ntpdc.1 @@ -1,7 +1,7 @@ -.TH NTPDC 1 2008-08-17 "( 4.2.4p5)" "Programmer's Manual" +.TH NTPDC 1 2009-12-08 "( 4.2.4p8)" "Programmer's Manual" .\" EDIT THIS FILE WITH CAUTION (ntpdc.1) .\" -.\" It has been AutoGen-ed Sunday August 17, 2008 at 05:26:27 AM EDT +.\" It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:01 AM EST .\" From the definitions ntpdc-opts.def .\" and the template file agman1.tpl .\" @@ -145,7 +145,7 @@ is searched for within those directories. .SH AUTHOR David L. Mills and/or others .br -Please send bug reports to: http://bugs.ntp.isc.org, bugs@ntp.org +Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org .PP .nf diff --git a/contrib/ntp/ntpq/Makefile.in b/contrib/ntp/ntpq/Makefile.in index 32616a95f37..0c5fcaeb684 100644 --- a/contrib/ntp/ntpq/Makefile.in +++ b/contrib/ntp/ntpq/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -15,15 +16,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -53,27 +51,50 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am_ntpq_OBJECTS = ntpq$U.$(OBJEXT) ntpq-subs$U.$(OBJEXT) \ ntpq-opts$U.$(OBJEXT) ntpq_OBJECTS = $(am_ntpq_OBJECTS) am__DEPENDENCIES_1 = ntpq_DEPENDENCIES = version.o $(am__DEPENDENCIES_1) ../libntp/libntp.a -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(ntpq_SOURCES) DIST_SOURCES = $(ntpq_SOURCES) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) @@ -82,8 +103,6 @@ ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -99,10 +118,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -115,11 +130,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -133,6 +147,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -146,8 +161,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -157,6 +171,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -170,16 +185,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -191,29 +201,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = ../util/ansi2knr AM_CPPFLAGS = -I$(top_srcdir)/include $(LIBOPTS_CFLAGS) @@ -242,14 +264,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ntpq/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign ntpq/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ntpq/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign ntpq/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -267,37 +289,53 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - || test -f $$p1 \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list ntpq$(EXEEXT): $(ntpq_OBJECTS) $(ntpq_DEPENDENCIES) @rm -f ntpq$(EXEEXT) - $(LINK) $(ntpq_LDFLAGS) $(ntpq_OBJECTS) $(ntpq_LDADD) $(LIBS) + $(LINK) $(ntpq_OBJECTS) $(ntpq_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -305,7 +343,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c ../util/ansi2knr: - cd ../util && $(MAKE) $(AM_MAKEFLAGS) ansi2knr + $(am__cd) ../util && $(MAKE) $(AM_MAKEFLAGS) ./ansi2knr mostlyclean-kr: -test "$U" = "" || rm -f *_.c @@ -315,22 +353,22 @@ mostlyclean-kr: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntpq-subs$U.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -348,128 +386,137 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-man1: $(man1_MANS) $(man_MANS) +install-man1: $(man_MANS) @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + uninstall-man1: @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -479,7 +526,7 @@ check: $(BUILT_SOURCES) all-am: Makefile $(PROGRAMS) $(MANS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -502,6 +549,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -516,7 +564,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -524,18 +572,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: install-man +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: install-binPROGRAMS +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: install-man1 +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -556,22 +624,26 @@ ps: ps-am ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man +uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 +.MAKE: ../util/ansi2knr all check install install-am install-strip + .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ - install-binPROGRAMS install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ - install-man1 install-strip installcheck installcheck-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-kr mostlyclean-libtool pdf pdf-am ps ps-am tags \ - uninstall uninstall-am uninstall-binPROGRAMS uninstall-info-am \ - uninstall-man uninstall-man1 + uninstall uninstall-am uninstall-binPROGRAMS uninstall-man \ + uninstall-man1 $(srcdir)/ntpq-opts.h: $(srcdir)/ntpq-opts.c @@ -595,6 +667,7 @@ $(top_srcdir)/version : version.o: $(ntpq_OBJECTS) ../libntp/libntp.a Makefile $(top_srcdir)/version env CSET=`cat $(top_srcdir)/version` $(top_builddir)/scripts/mkver ntpq $(COMPILE) -c version.c + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/ntpq/ntpq-opts.c b/contrib/ntp/ntpq/ntpq-opts.c index 0e73886b723..868ef29a019 100644 --- a/contrib/ntp/ntpq/ntpq-opts.c +++ b/contrib/ntp/ntpq/ntpq-opts.c @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (ntpq-opts.c) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:26:55 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:26 AM EST * From the definitions ntpq-opts.def * and the template file options * @@ -19,7 +19,7 @@ * * This source file is copyrighted and licensed under the following terms: * - * ntpq copyright 1970-2008 David L. Mills and/or others - all rights reserved + * ntpq copyright 1970-2009 David L. Mills and/or others - all rights reserved * * see html/copyright.html */ @@ -34,7 +34,7 @@ extern "C" { #endif tSCC zCopyright[] = - "ntpq copyright (c) 1970-2008 David L. Mills and/or others, all rights reserved"; + "ntpq copyright (c) 1970-2009 David L. Mills and/or others, all rights reserved"; tSCC zCopyrightNotice[] = /* extracted from ../include/copyright.def near line 8 */ @@ -410,7 +410,7 @@ static tOptDesc optDesc[ OPTION_CT ] = { */ tSCC zPROGNAME[] = "NTPQ"; tSCC zUsageTitle[] = -"ntpq - standard NTP query program - Ver. 4.2.4p5\n\ +"ntpq - standard NTP query program - Ver. 4.2.4p8\n\ USAGE: %s [ - [] | --[{=| }] ]... [ host ...]\n"; tSCC zRcName[] = ".ntprc"; tSCC* apzHomeList[] = { @@ -418,7 +418,7 @@ tSCC* apzHomeList[] = { ".", NULL }; -tSCC zBugsAddr[] = "http://bugs.ntp.isc.org, bugs@ntp.org"; +tSCC zBugsAddr[] = "http://bugs.ntp.org, bugs@ntp.org"; #define zExplain NULL tSCC zDetail[] = "\n\ The\n\ @@ -430,7 +430,7 @@ information about current state and/or changes in that state.\n\ The same formats are used in NTPv4, although some of the\n\ variables have changed and new ones added.\n"; tSCC zFullVersion[] = NTPQ_FULL_VERSION; -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 408 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 408 */ #if defined(ENABLE_NLS) # define OPTPROC_BASE OPTPROC_TRANSLATE @@ -500,7 +500,7 @@ DESC(DEBUG_LEVEL).optOccCt = atoi( pOptDesc->pzLastArg ); #endif /* defined(TEST_NTPQ_OPTS) */ -/* extracted from /usr/local/gnu/share/autogen/optmain.tpl near line 92 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optmain.tpl near line 92 */ #if defined(TEST_NTPQ_OPTS) /* TEST MAIN PROCEDURE: */ @@ -516,7 +516,7 @@ main( int argc, char** argv ) return res; } #endif /* defined TEST_NTPQ_OPTS */ -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 514 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 514 */ #if ENABLE_NLS #include diff --git a/contrib/ntp/ntpq/ntpq-opts.h b/contrib/ntp/ntpq/ntpq-opts.h index bbd35ca3439..2badce79077 100644 --- a/contrib/ntp/ntpq/ntpq-opts.h +++ b/contrib/ntp/ntpq/ntpq-opts.h @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (ntpq-opts.h) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:26:55 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:26 AM EST * From the definitions ntpq-opts.def * and the template file options * @@ -19,7 +19,7 @@ * * This source file is copyrighted and licensed under the following terms: * - * ntpq copyright 1970-2008 David L. Mills and/or others - all rights reserved + * ntpq copyright 1970-2009 David L. Mills and/or others - all rights reserved * * see html/copyright.html */ @@ -68,8 +68,8 @@ typedef enum { } teOptIndex; #define OPTION_CT 13 -#define NTPQ_VERSION "4.2.4p5" -#define NTPQ_FULL_VERSION "ntpq - standard NTP query program - Ver. 4.2.4p5" +#define NTPQ_VERSION "4.2.4p8" +#define NTPQ_FULL_VERSION "ntpq - standard NTP query program - Ver. 4.2.4p8" /* * Interface defines for all options. Replace "n" with the UPPER_CASED @@ -176,7 +176,7 @@ typedef enum { ntpqOptions.pzCurOpt = NULL ) #define START_OPT RESTART_OPT(1) #define USAGE(c) (*ntpqOptions.pUsageProc)( &ntpqOptions, c ) -/* extracted from /usr/local/gnu/share/autogen/opthead.tpl near line 360 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/opthead.tpl near line 360 */ /* * * * * * * diff --git a/contrib/ntp/ntpq/ntpq-opts.texi b/contrib/ntp/ntpq/ntpq-opts.texi index 0c4ca7d9c66..a0618cead0c 100644 --- a/contrib/ntp/ntpq/ntpq-opts.texi +++ b/contrib/ntp/ntpq/ntpq-opts.texi @@ -6,7 +6,7 @@ # # EDIT THIS FILE WITH CAUTION (ntpq-opts.texi) # -# It has been AutoGen-ed Sunday August 17, 2008 at 05:26:58 AM EDT +# It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:28 AM EST # From the definitions ntpq-opts.def # and the template file aginfo.tpl @end ignore @@ -46,12 +46,15 @@ This is the automatically generated usage text for ntpq: @exampleindent 0 @example -ntpq - standard NTP query program - Ver. 4.2.5p113 +ntpq - standard NTP query program - Ver. 4.2.5p247-RC USAGE: ntpq [ - [] | --[@{=| @}] ]... [ host ...] Flg Arg Option-Name Description -4 no ipv4 Force IPv4 DNS name resolution + - prohibits these options: + ipv6 -6 no ipv6 Force IPv6 DNS name resolution - - an alternate for ipv4 + - prohibits these options: + ipv4 -c Str command run a command and exit - may appear multiple times -d no debug-level Increase output debug message level @@ -66,8 +69,9 @@ USAGE: ntpq [ - [] | --[@{=| @}] ]... [ host ...] command peers -n no numeric numeric host addresses + no old-rv Always output status line with readvar opt version Output version information and exit - -? no help Display usage information and exit + -? no help Display extended usage information and exit -! no more-help Extended usage information passed thru pager -> opt save-opts Save the option state to a config file -< Str load-opts Load options from a config file diff --git a/contrib/ntp/ntpq/ntpq.1 b/contrib/ntp/ntpq/ntpq.1 index d418636715b..f65ae9aa422 100644 --- a/contrib/ntp/ntpq/ntpq.1 +++ b/contrib/ntp/ntpq/ntpq.1 @@ -1,7 +1,7 @@ -.TH NTPQ 1 2008-08-17 "( 4.2.4p5)" "Programmer's Manual" +.TH NTPQ 1 2009-12-08 "( 4.2.4p8)" "Programmer's Manual" .\" EDIT THIS FILE WITH CAUTION (ntpq.1) .\" -.\" It has been AutoGen-ed Sunday August 17, 2008 at 05:26:57 AM EDT +.\" It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:27 AM EST .\" From the definitions ntpq-opts.def .\" and the template file agman1.tpl .\" @@ -372,7 +372,7 @@ is searched for within those directories. .SH AUTHOR David L. Mills and/or others .br -Please send bug reports to: http://bugs.ntp.isc.org, bugs@ntp.org +Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org .PP .nf diff --git a/contrib/ntp/ntpq/ntpq.c b/contrib/ntp/ntpq/ntpq.c index 4835d7e3546..2e51b35efad 100644 --- a/contrib/ntp/ntpq/ntpq.c +++ b/contrib/ntp/ntpq/ntpq.c @@ -3187,7 +3187,7 @@ cookedprint( else { char b[12]; - (void) snprintf(b, sizeof(b), "%03lo", uval); + (void) snprintf(b, sizeof b, "%03lo", uval); output(fp, name, b); } break; diff --git a/contrib/ntp/packageinfo.sh b/contrib/ntp/packageinfo.sh index fe1a4ba1f53..702373fd36b 100644 --- a/contrib/ntp/packageinfo.sh +++ b/contrib/ntp/packageinfo.sh @@ -9,21 +9,21 @@ version=${proto}.${major}.${minor} # - Numeric values increment # - empty 'increments' to 1 # - NEW 'increments' to empty -point=5 +point=8 # Special. Normally unused. A suffix. #special=ag special= # [???] To start an RC cycle: RC->yes # To release from an RC cycle: rcpoint-> GO # ReleaseCandidate. 'yes' or 'no'. +#releasecandidate=yes releasecandidate=no -#releasecandidate=no # ChangeLog tag CLTAG=NTP_4_2_0 ### # The following is for ntp-stable. 2 cases: # - Numeric values increment -# - GO triggers a release +# - GO triggers a release (from releasecandidate=yes) # - - rcpoint gets set to 0 # - - releasecandidate gets set to no # - GRONK is for -dev diff --git a/contrib/ntp/parseutil/Makefile.in b/contrib/ntp/parseutil/Makefile.in index ce97f1c1648..3f56f677c75 100644 --- a/contrib/ntp/parseutil/Makefile.in +++ b/contrib/ntp/parseutil/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +15,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -37,7 +35,6 @@ POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ ANSI2KNR = ../util/ansi2knr -noinst_PROGRAMS = @TESTDCF@ @DCFD@ EXTRA_PROGRAMS = testdcf$(EXEEXT) dcfd$(EXEEXT) subdir = parseutil DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in @@ -52,6 +49,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) dcfd_SOURCES = dcfd.c dcfd_OBJECTS = dcfd$U.$(OBJEXT) @@ -59,25 +57,25 @@ dcfd_LDADD = $(LDADD) testdcf_SOURCES = testdcf.c testdcf_OBJECTS = testdcf$U.$(OBJEXT) testdcf_LDADD = $(LDADD) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = dcfd.c testdcf.c DIST_SOURCES = dcfd.c testdcf.c ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -93,10 +91,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -109,11 +103,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -127,6 +120,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -140,8 +134,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -151,6 +144,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -164,16 +158,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -185,32 +174,45 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ #AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies AUTOMAKE_OPTIONS = ../util/ansi2knr +noinst_PROGRAMS = @TESTDCF@ @DCFD@ INCLUDES = -I$(top_srcdir)/include ETAGS_ARGS = Makefile.am DISTCLEANFILES = $(EXTRA_PROGRAMS) @@ -222,14 +224,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign parseutil/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign parseutil/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign parseutil/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign parseutil/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -247,19 +249,22 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): clean-noinstPROGRAMS: - @list='$(noinst_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list dcfd$(EXEEXT): $(dcfd_OBJECTS) $(dcfd_DEPENDENCIES) @rm -f dcfd$(EXEEXT) - $(LINK) $(dcfd_LDFLAGS) $(dcfd_OBJECTS) $(dcfd_LDADD) $(LIBS) + $(LINK) $(dcfd_OBJECTS) $(dcfd_LDADD) $(LIBS) testdcf$(EXEEXT): $(testdcf_OBJECTS) $(testdcf_DEPENDENCIES) @rm -f testdcf$(EXEEXT) - $(LINK) $(testdcf_LDFLAGS) $(testdcf_OBJECTS) $(testdcf_LDADD) $(LIBS) + $(LINK) $(testdcf_OBJECTS) $(testdcf_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -267,7 +272,7 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c ../util/ansi2knr: - cd ../util && $(MAKE) $(AM_MAKEFLAGS) ansi2knr + $(am__cd) ../util && $(MAKE) $(AM_MAKEFLAGS) ./ansi2knr mostlyclean-kr: -test "$U" = "" || rm -f *_.c @@ -276,22 +281,22 @@ mostlyclean-kr: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testdcf$U.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -307,82 +312,85 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -411,6 +419,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @@ -425,7 +434,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -433,18 +442,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -465,19 +494,23 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am +uninstall-am: + +.MAKE: ../util/ansi2knr check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am check-local clean \ clean-generic clean-libtool clean-noinstPROGRAMS ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-strip installcheck \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-kr mostlyclean-libtool pdf \ - pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am + pdf-am ps ps-am tags uninstall uninstall-am #EXTRA_DIST= TAGS @@ -485,6 +518,7 @@ check-local: @DCFD@ case "$(noinst_PROGRAMS)" in \ *dcfd*) ./dcfd -Y ;; \ esac + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/scripts/Makefile.in b/contrib/ntp/scripts/Makefile.in index 7aee5f7374e..8577e771b5d 100644 --- a/contrib/ntp/scripts/Makefile.in +++ b/contrib/ntp/scripts/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +15,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -55,15 +53,34 @@ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = calc_tickadj checktime freq_adj html2man mkver \ ntp-wait ntpsweep ntptrace ntpver plot_summary summary +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(bindir)" -binSCRIPT_INSTALL = $(INSTALL_SCRIPT) SCRIPTS = $(bin_SCRIPTS) $(noinst_SCRIPTS) SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -79,10 +96,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -95,11 +108,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -113,6 +125,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -126,8 +139,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -137,6 +149,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -150,16 +163,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -171,29 +179,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ bin_SCRIPTS = ntp-wait ntptrace noinst_SCRIPTS = calc_tickadj checktime freq_adj html2man mkver ntpsweep ntpver plot_summary summary EXTRA_DIST = VersionName fixautomakedepsmagic genCommitLog genver \ @@ -207,14 +227,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign scripts/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign scripts/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -232,6 +252,7 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): calc_tickadj: $(top_builddir)/config.status $(srcdir)/calc_tickadj.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ checktime: $(top_builddir)/config.status $(srcdir)/checktime.in @@ -256,33 +277,44 @@ summary: $(top_builddir)/config.status $(srcdir)/summary.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_SCRIPTS)'; for p in $$list; do \ + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ - if test -f $$d$$p; then \ - f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ - echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \ - else :; fi; \ - done + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) - @list='$(bin_SCRIPTS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done + @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: tags: TAGS TAGS: @@ -291,29 +323,32 @@ CTAGS: distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -322,7 +357,7 @@ check: check-am all-am: Makefile $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -344,6 +379,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -354,7 +390,7 @@ clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile -distclean-am: clean-am distclean-generic distclean-libtool +distclean-am: clean-am distclean-generic dvi: dvi-am @@ -362,18 +398,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: install-binSCRIPTS +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -392,17 +448,22 @@ ps: ps-am ps-am: -uninstall-am: uninstall-binSCRIPTS uninstall-info-am +uninstall-am: uninstall-binSCRIPTS + +.MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ - install-binSCRIPTS install-data install-data-am install-exec \ - install-exec-am install-info install-info-am install-man \ + install-binSCRIPTS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - uninstall uninstall-am uninstall-binSCRIPTS uninstall-info-am + uninstall uninstall-am uninstall-binSCRIPTS + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/ntp/sntp/Makefile.in b/contrib/ntp/sntp/Makefile.in index a3efa6a0251..62acb87ad64 100644 --- a/contrib/ntp/sntp/Makefile.in +++ b/contrib/ntp/sntp/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -22,15 +23,12 @@ # in sbindir. Now that we offer a choice, look in the "other" installation # subdir to warn folks if there is another version there. -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = . +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -58,12 +56,12 @@ am__aclocal_m4_deps = $(top_srcdir)/libopts/m4/libopts.m4 \ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno configure.status.lineno + configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am__objects_1 = am_sntp_OBJECTS = internet.$(OBJEXT) main.$(OBJEXT) \ @@ -73,28 +71,57 @@ sntp_OBJECTS = $(am_sntp_OBJECTS) sntp_LDADD = $(LDADD) am__DEPENDENCIES_1 = sntp_DEPENDENCIES = $(am__DEPENDENCIES_1) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I. +DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(sntp_SOURCES) DIST_SOURCES = $(sntp_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ - install-exec-recursive install-info-recursive \ - install-recursive installcheck-recursive installdirs-recursive \ - pdf-recursive ps-recursive uninstall-info-recursive \ - uninstall-recursive + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) $(man_MANS) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = libopts . @@ -102,16 +129,39 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ - { test ! -d $(distdir) \ - || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -fr $(distdir); }; } + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -124,10 +174,6 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -137,11 +183,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -155,14 +200,14 @@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ @@ -170,16 +215,11 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -191,28 +231,40 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign ACLOCAL_AMFLAGS = -I libopts/m4 AM_CPPFLAGS = $(LIBOPTS_CFLAGS) @@ -255,15 +307,15 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/bincheck.mf $(am__config @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign '; \ - cd $(srcdir) && $(AUTOMAKE) --foreign \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -279,21 +331,22 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) - cd $(srcdir) && $(AUTOCONF) + $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ - $(MAKE) stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) - cd $(top_srcdir) && $(AUTOHEADER) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ @@ -301,35 +354,50 @@ distclean-hdr: -rm -f config.h stamp-h1 install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - || test -f $$p1 \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list sntp$(EXEEXT): $(sntp_OBJECTS) $(sntp_DEPENDENCIES) @rm -f sntp$(EXEEXT) - $(LINK) $(sntp_LDFLAGS) $(sntp_OBJECTS) $(sntp_LDADD) $(LIBS) + $(LINK) $(sntp_OBJECTS) $(sntp_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -345,22 +413,22 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unix.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -372,53 +440,45 @@ clean-libtool: -rm -rf .libs _libs distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-man1: $(man1_MANS) $(man_MANS) + -rm -f libtool config.lt +install-man1: $(dist_man_MANS) $(man_MANS) @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS) $(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + uninstall-man1: @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(dist_man_MANS) $(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. @@ -444,15 +504,14 @@ $(RECURSIVE_TARGETS): else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" -mostlyclean-recursive clean-recursive distclean-recursive \ -maintainer-clean-recursive: +$(RECURSIVE_CLEAN_TARGETS): @failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ @@ -479,16 +538,16 @@ maintainer-clean-recursive: else \ local_target="$$target"; \ fi; \ - (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ - test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) @@ -496,14 +555,14 @@ ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ @@ -515,93 +574,126 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ - tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi $(am__remove_distdir) - mkdir $(distdir) - $(mkdir_p) $(distdir)/libopts/m4 - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done - list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ - || $(mkdir_p) "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ - distdir=`$(am__cd) $(distdir) && pwd`; \ - top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ - (cd $$subdir && \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ - top_distdir="$$top_distdir" \ - distdir="$$distdir/$$subdir" \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done - -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r $(distdir) + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) @@ -610,6 +702,14 @@ dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) @@ -636,6 +736,10 @@ distcheck: dist GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ @@ -647,9 +751,11 @@ distcheck: dist mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && cd $(distdir)/_build \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ @@ -671,13 +777,15 @@ distcheck: dist && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: - @cd $(distuninstallcheck_dir) \ + @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ @@ -701,7 +809,7 @@ all-am: Makefile $(PROGRAMS) $(MANS) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive @@ -724,6 +832,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -746,20 +855,39 @@ dvi-am: html: html-recursive +html-am: + info: info-recursive info-am: install-data-am: install-man +install-dvi: install-dvi-recursive + +install-dvi-am: + install-exec-am: install-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook +install-html: install-html-recursive + +install-html-am: install-info: install-info-recursive +install-info-am: + install-man: install-man1 +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-recursive @@ -782,30 +910,32 @@ ps: ps-recursive ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man - -uninstall-info: uninstall-info-recursive +uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 -.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ - check-am clean clean-binPROGRAMS clean-generic clean-libtool \ - clean-recursive ctags ctags-recursive dist dist-all dist-bzip2 \ - dist-gzip dist-shar dist-tarZ dist-zip distcheck distclean \ - distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-recursive distclean-tags \ - distcleancheck distdir distuninstallcheck dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ - install-data install-data-am install-exec install-exec-am \ - install-exec-hook install-info install-info-am install-man \ - install-man1 install-strip installcheck installcheck-am \ +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all check \ + ctags-recursive install install-am install-exec-am \ + install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool ctags ctags-recursive dist \ + dist-all dist-bzip2 dist-gzip dist-lzma dist-shar dist-tarZ \ + dist-xz dist-zip distcheck distclean distclean-compile \ + distclean-generic distclean-hdr distclean-libtool \ + distclean-tags distcleancheck distdir distuninstallcheck dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-exec-hook \ + install-html install-html-am install-info install-info-am \ + install-man install-man1 install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ - maintainer-clean-generic maintainer-clean-recursive \ - mostlyclean mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool mostlyclean-recursive pdf pdf-am ps ps-am \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-info-am uninstall-man \ - uninstall-man1 + uninstall-binPROGRAMS uninstall-man uninstall-man1 FRC: @@ -848,6 +978,7 @@ install-exec-hook: done # + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/sntp/aclocal.m4 b/contrib/ntp/sntp/aclocal.m4 index 21cd96033bd..1994696b450 100644 --- a/contrib/ntp/sntp/aclocal.m4 +++ b/contrib/ntp/sntp/aclocal.m4 @@ -1,7 +1,7 @@ -# generated automatically by aclocal 1.9.6 -*- Autoconf -*- +# generated automatically by aclocal 1.11 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, -# 2005 Free Software Foundation, Inc. +# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -11,6 +11,14 @@ # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # serial 47 AC_PROG_LIBTOOL @@ -6175,7 +6183,7 @@ SED=$lt_cv_path_SED AC_MSG_RESULT([$SED]) ]) -# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6185,14 +6193,31 @@ AC_MSG_RESULT([$SED]) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. -AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- -# Call AM_AUTOMAKE_VERSION so it can be traced. -# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], - [AM_AUTOMAKE_VERSION([1.9.6])]) +[AM_AUTOMAKE_VERSION([1.11])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- @@ -6249,14 +6274,14 @@ am_aux_dir=`cd $ac_aux_dir && pwd` # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 7 +# serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- @@ -6265,8 +6290,11 @@ AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE]) -AC_SUBST([$1_FALSE]) +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' @@ -6280,15 +6308,14 @@ AC_CONFIG_COMMANDS_PRE( Usually this means the macro was only invoked conditionally.]]) fi])]) - -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 8 +# serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, @@ -6316,6 +6343,7 @@ AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) @@ -6344,6 +6372,16 @@ AC_CACHE_CHECK([dependency style of $depcc], if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -6361,7 +6399,17 @@ AC_CACHE_CHECK([dependency style of $depcc], done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -6371,18 +6419,23 @@ AC_CACHE_CHECK([dependency style of $depcc], break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -6433,61 +6486,74 @@ if test "x$enable_dependency_tracking" != xno; then AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -#serial 3 +#serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done done -done +} ])# _AM_OUTPUT_DEPENDENCY_COMMANDS @@ -6518,14 +6584,14 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 12 +# serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. @@ -6542,16 +6608,20 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.58])dnl +[AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi fi # test whether we have cygpath @@ -6571,6 +6641,9 @@ m4_ifval([$2], AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl @@ -6586,8 +6659,8 @@ AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) -AM_PROG_INSTALL_SH -AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. @@ -6595,20 +6668,37 @@ AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES(CC)], - [define([AC_PROG_CC], - defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES(CXX)], - [define([AC_PROG_CXX], - defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header @@ -6619,18 +6709,19 @@ AC_PROVIDE_IFELSE([AC_PROG_CXX], # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $1 | $1:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6641,7 +6732,14 @@ echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -install_sh=${install_sh-"$am_aux_dir/install-sh"} +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. @@ -6667,13 +6765,13 @@ AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # AM_MAKE_INCLUDE() # ----------------- @@ -6682,7 +6780,7 @@ AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. @@ -6692,24 +6790,24 @@ am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) @@ -6719,14 +6817,14 @@ rm -f confinc confmf # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ @@ -6742,7 +6840,15 @@ AC_SUBST($1)]) # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " @@ -6752,7 +6858,7 @@ else fi ]) -# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -6760,70 +6866,33 @@ fi # AM_PROG_MKDIR_P # --------------- -# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. -# -# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories -# created by `make install' are always world readable, even if the -# installer happens to have an overly restrictive umask (e.g. 077). -# This was a mistake. There are at least two reasons why we must not -# use `-m 0755': -# - it causes special bits like SGID to be ignored, -# - it may be too restrictive (some setups expect 775 directories). -# -# Do not use -m 0755 and let people choose whatever they expect by -# setting umask. -# -# We cannot accept any implementation of `mkdir' that recognizes `-p'. -# Some implementations (such as Solaris 8's) are not thread-safe: if a -# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' -# concurrently, both version can detect that a/ is missing, but only -# one can create it and the other will error out. Consequently we -# restrict ourselves to GNU make (using the --version option ensures -# this.) +# Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], -[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' -else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d - done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' - else - mkdir_p='$(install_sh) -d' - fi -fi -AC_SUBST([mkdir_p])]) +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- @@ -6840,7 +6909,7 @@ AC_DEFUN([_AM_SET_OPTION], # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], -[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- @@ -6850,14 +6919,14 @@ AC_DEFUN([_AM_IF_OPTION], # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 4 +# serial 5 # AM_SANITY_CHECK # --------------- @@ -6866,16 +6935,29 @@ AC_DEFUN([AM_SANITY_CHECK], # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ @@ -6925,9 +7007,28 @@ dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) +# Copyright (C) 2006, 2008 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. diff --git a/contrib/ntp/sntp/config.h.in b/contrib/ntp/sntp/config.h.in index 067a3de20a8..ae394d728ab 100644 --- a/contrib/ntp/sntp/config.h.in +++ b/contrib/ntp/sntp/config.h.in @@ -43,6 +43,9 @@ /* Define to 1 if you have the `inet_ntoa' function. */ #undef HAVE_INET_NTOA +/* inline keyword or macro available */ +#undef HAVE_INLINE + /* Define to 1 if the system has the type `int16_t'. */ #undef HAVE_INT16_T @@ -64,15 +67,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LIBGEN_H -/* Define to 1 if you have the `m' library (-lm). */ -#undef HAVE_LIBM - -/* Define to 1 if you have the `nsl' library (-lnsl). */ -#undef HAVE_LIBNSL - -/* Define to 1 if you have the `socket' library (-lsocket). */ -#undef HAVE_LIBSOCKET - /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H @@ -249,33 +243,28 @@ /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME +/* Define to the home page for this package. */ +#undef PACKAGE_URL + /* Define to the version of this package. */ #undef PACKAGE_VERSION -/* Define to 1 if the C compiler supports function prototypes. */ -#undef PROTOTYPES - /* name of regex header file */ #undef REGEX_HEADER /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE -/* Define to 1 if the `setvbuf' function takes the buffering type as its - second argument and the buffer pointer as the third, as on System V before - release 3. */ -#undef SETVBUF_REVERSED - -/* The size of a `char*', as computed by sizeof. */ +/* The size of `char*', as computed by sizeof. */ #undef SIZEOF_CHARP -/* The size of a `int', as computed by sizeof. */ +/* The size of `int', as computed by sizeof. */ #undef SIZEOF_INT -/* The size of a `long', as computed by sizeof. */ +/* The size of `long', as computed by sizeof. */ #undef SIZEOF_LONG -/* The size of a `short', as computed by sizeof. */ +/* The size of `short', as computed by sizeof. */ #undef SIZEOF_SHORT /* Define to 1 if you have the ANSI C header files. */ @@ -293,13 +282,16 @@ /* Define this if a working libregex can be found */ #undef WITH_LIBREGEX -/* Define like PROTOTYPES; this can be used by system headers. */ -#undef __PROTOTYPES - /* Define to empty if `const' does not conform to ANSI C. */ #undef const -/* Define to `unsigned' if does not define. */ +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to `unsigned int' if does not define. */ #undef size_t /* normalize ss_family access */ diff --git a/contrib/ntp/sntp/configure b/contrib/ntp/sntp/configure index fd313847a8f..1bcdaf7abcc 100755 --- a/contrib/ntp/sntp/configure +++ b/contrib/ntp/sntp/configure @@ -1,81 +1,415 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.59. +# Generated by GNU Autoconf 2.65. +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# # -# Copyright (C) 2003 Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset + setopt NO_GLOB_SUBST else - as_unset=false + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` - -# PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' @@ -83,146 +417,107 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop - s,-$,, - s,^['$as_cr_digits']*\n,, + s/-\n.*// ' >$as_me.lineno && - chmod +x $as_me.lineno || - { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 - { (exit 1); exit 1; }; } + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" # Exit status is that of the last command. exit } - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln else as_ln_s='cp -p' fi -rm -f conf$$ conf$$.exe conf$$.file +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -231,16 +526,6 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - - # Check that we are running under the correct shell. SHELL=${CONFIG_SHELL-/bin/sh} @@ -391,32 +676,25 @@ fi -tagnames=${tagnames+${tagnames},}CXX - -tagnames=${tagnames+${tagnames},}F77 +test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` -exec 6>&1 - # # Initializations. # ac_default_prefix=/usr/local +ac_clean_files= ac_config_libobj_dir=. +LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} - -# Maximum number of lines to put in a shell here document. -# This variable seems obsolete. It should probably be removed, and -# only ac_max_sed_lines should be used. -: ${ac_max_here_lines=38} # Identity of this package. PACKAGE_NAME= @@ -424,52 +702,189 @@ PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= +PACKAGE_URL= ac_unique_file="main.c" ac_unique_file="header.h" # Factoring default headers for most tests. ac_includes_default="\ #include -#if HAVE_SYS_TYPES_H +#ifdef HAVE_SYS_TYPES_H # include #endif -#if HAVE_SYS_STAT_H +#ifdef HAVE_SYS_STAT_H # include #endif -#if STDC_HEADERS +#ifdef STDC_HEADERS # include # include #else -# if HAVE_STDLIB_H +# ifdef HAVE_STDLIB_H # include # endif #endif -#if HAVE_STRING_H -# if !STDC_HEADERS && HAVE_MEMORY_H +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif -#if HAVE_STRINGS_H +#ifdef HAVE_STRINGS_H # include #endif -#if HAVE_INTTYPES_H +#ifdef HAVE_INTTYPES_H # include -#else -# if HAVE_STDINT_H -# include -# endif #endif -#if HAVE_UNISTD_H +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE EGREP LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CPP CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL LIBOPTS_DIR INSTALL_LIBOPTS_TRUE INSTALL_LIBOPTS_FALSE NEED_LIBOPTS_TRUE NEED_LIBOPTS_FALSE LIBOPTS_LDADD LIBOPTS_CFLAGS LIBOBJS BINSUBDIR LTLIBOBJS' +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIBOBJS +BINSUBDIR +HAVE_INLINE +LIBOPTS_CFLAGS +LIBOPTS_LDADD +NEED_LIBOPTS_FALSE +NEED_LIBOPTS_TRUE +INSTALL_LIBOPTS_FALSE +INSTALL_LIBOPTS_TRUE +LIBOPTS_DIR +LIBTOOL +CPP +RANLIB +AR +ECHO +LN_S +EGREP +GREP +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +enable_fast_install +with_gnu_ld +enable_libtool_lock +with_pic +with_tags +enable_local_libopts +enable_libopts_install +with_autoopts_config +with_regex_header +with_libregex +with_libregex_cflags +with_libregex_libs +enable_optional_args +with_binsubdir +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP' + # Initialize some variables set by options. ac_init_help= ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null @@ -492,34 +907,48 @@ x_libraries=NONE # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' +datarootdir='${prefix}/share' +datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' includedir='${prefix}/include' oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' ac_prev= +ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" + eval $ac_prev=\$ac_option ac_prev= continue fi - ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_option in + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; @@ -541,33 +970,59 @@ do --config-cache | -C) cache_file=config.cache ;; - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) + -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + -disable-* | --disable-*) - ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - eval "enable_$ac_feature=no" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; -enable-* | --enable-*) - ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid feature name: $ac_feature" >&2 - { (exit 1); exit 1; }; } - ac_feature=`echo $ac_feature | sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "enable_$ac_feature='$ac_optarg'" ;; + eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -594,6 +1049,12 @@ do -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; @@ -618,13 +1079,16 @@ do | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) + | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) @@ -689,6 +1153,16 @@ do | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; @@ -739,26 +1213,36 @@ do ac_init_version=: ;; -with-* | --with-*) - ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package| sed 's/-/_/g'` - case $ac_option in - *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; - *) ac_optarg=yes ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; esac - eval "with_$ac_package='$ac_optarg'" ;; + eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) - ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid package name: $ac_package" >&2 - { (exit 1); exit 1; }; } - ac_package=`echo $ac_package | sed 's/-/_/g'` - eval "with_$ac_package=no" ;; + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. @@ -778,26 +1262,25 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) { echo "$as_me: error: unrecognized option: $ac_option -Try \`$0 --help' for more information." >&2 - { (exit 1); exit 1; }; } + -*) as_fn_error "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. - expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && - { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 - { (exit 1); exit 1; }; } - ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` - eval "$ac_envvar='$ac_optarg'" + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. - echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; @@ -806,31 +1289,36 @@ done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - { echo "$as_me: error: missing argument to $ac_option" >&2 - { (exit 1); exit 1; }; } + as_fn_error "missing argument to $ac_option" fi -# Be sure to have absolute paths. -for ac_var in exec_prefix prefix -do - eval ac_val=$`echo $ac_var` - case $ac_val in - [\\/$]* | ?:[\\/]* | NONE | '' ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac -done +fi -# Be sure to have absolute paths. -for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ - localstatedir libdir includedir oldincludedir infodir mandir +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir do - eval ac_val=$`echo $ac_var` + eval ac_val=\$$ac_var + # Remove trailing slashes. case $ac_val in - [\\/$]* | ?:[\\/]* ) ;; - *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 - { (exit 1); exit 1; }; };; + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -844,7 +1332,7 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes @@ -857,94 +1345,72 @@ test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error "pwd does not report name of working directory" + + # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_confdir=`(dirname "$0") 2>/dev/null || -$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$0" : 'X\(//\)[^/]' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$0" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then + if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 - { (exit 1); exit 1; }; } - else - { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 - { (exit 1); exit 1; }; } - fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi -(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || - { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 - { (exit 1); exit 1; }; } -srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` -ac_env_build_alias_set=${build_alias+set} -ac_env_build_alias_value=$build_alias -ac_cv_env_build_alias_set=${build_alias+set} -ac_cv_env_build_alias_value=$build_alias -ac_env_host_alias_set=${host_alias+set} -ac_env_host_alias_value=$host_alias -ac_cv_env_host_alias_set=${host_alias+set} -ac_cv_env_host_alias_value=$host_alias -ac_env_target_alias_set=${target_alias+set} -ac_env_target_alias_value=$target_alias -ac_cv_env_target_alias_set=${target_alias+set} -ac_cv_env_target_alias_value=$target_alias -ac_env_CC_set=${CC+set} -ac_env_CC_value=$CC -ac_cv_env_CC_set=${CC+set} -ac_cv_env_CC_value=$CC -ac_env_CFLAGS_set=${CFLAGS+set} -ac_env_CFLAGS_value=$CFLAGS -ac_cv_env_CFLAGS_set=${CFLAGS+set} -ac_cv_env_CFLAGS_value=$CFLAGS -ac_env_LDFLAGS_set=${LDFLAGS+set} -ac_env_LDFLAGS_value=$LDFLAGS -ac_cv_env_LDFLAGS_set=${LDFLAGS+set} -ac_cv_env_LDFLAGS_value=$LDFLAGS -ac_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_env_CPPFLAGS_value=$CPPFLAGS -ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} -ac_cv_env_CPPFLAGS_value=$CPPFLAGS -ac_env_CPP_set=${CPP+set} -ac_env_CPP_value=$CPP -ac_cv_env_CPP_set=${CPP+set} -ac_cv_env_CPP_value=$CPP -ac_env_CXX_set=${CXX+set} -ac_env_CXX_value=$CXX -ac_cv_env_CXX_set=${CXX+set} -ac_cv_env_CXX_value=$CXX -ac_env_CXXFLAGS_set=${CXXFLAGS+set} -ac_env_CXXFLAGS_value=$CXXFLAGS -ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set} -ac_cv_env_CXXFLAGS_value=$CXXFLAGS -ac_env_CXXCPP_set=${CXXCPP+set} -ac_env_CXXCPP_value=$CXXCPP -ac_cv_env_CXXCPP_set=${CXXCPP+set} -ac_cv_env_CXXCPP_value=$CXXCPP -ac_env_F77_set=${F77+set} -ac_env_F77_value=$F77 -ac_cv_env_F77_set=${F77+set} -ac_cv_env_F77_value=$F77 -ac_env_FFLAGS_set=${FFLAGS+set} -ac_env_FFLAGS_value=$FFLAGS -ac_cv_env_FFLAGS_set=${FFLAGS+set} -ac_cv_env_FFLAGS_value=$FFLAGS +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done # # Report the --help message. @@ -973,14 +1439,11 @@ Configuration: -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] -_ACEOF - - cat <<_ACEOF Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] + [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] + [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify @@ -990,18 +1453,25 @@ for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data [PREFIX/share] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --infodir=DIR info documentation [PREFIX/info] - --mandir=DIR man documentation [PREFIX/man] + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF @@ -1022,14 +1492,13 @@ if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors - --enable-shared[=PKGS] - build shared libraries [default=no] - --enable-static[=PKGS] - build static libraries [default=yes] + --enable-shared[=PKGS] build shared libraries [default=no] + --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) @@ -1044,8 +1513,7 @@ Optional Packages: --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-pic try to use only PIC/non-PIC objects [default=use both] - --with-tags[=TAGS] - include additional configurations [automatic] + --with-tags[=TAGS] include additional configurations [automatic] --with-autoopts-config specify the config-info script --with-regex-header a reg expr header is specified --with-libregex libregex installation prefix @@ -1058,131 +1526,681 @@ Some influential environment variables: CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory - CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have - headers in a nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory CPP C preprocessor - CXX C++ compiler command - CXXFLAGS C++ compiler flags - CXXCPP C++ preprocessor - F77 Fortran 77 compiler command - FFLAGS Fortran 77 compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. +Report bugs to the package provider. _ACEOF +ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. - ac_popdir=`pwd` for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d $ac_dir || continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue ac_builddir=. -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # We are building in place. ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac - - cd $ac_dir - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_srcdir/configure.gnu; then - echo - $SHELL $ac_srcdir/configure.gnu --help=recursive - elif test -f $ac_srcdir/configure; then - echo - $SHELL $ac_srcdir/configure --help=recursive - elif test -f $ac_srcdir/configure.ac || - test -f $ac_srcdir/configure.in; then - echo - $ac_configure --help + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive else - echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi - cd $ac_popdir + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } done fi -test -n "$ac_init_help" && exit 0 +test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF +configure +generated by GNU Autoconf 2.65 -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF - exit 0 + exit fi -exec 5>config.log -cat >&5 <<_ACEOF + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } >/dev/null && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_type + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ _ACEOF +exec 5>>config.log { cat <<_ASUNAME ## --------- ## @@ -1201,7 +2219,7 @@ uname -v = `(uname -v) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` @@ -1213,8 +2231,9 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - echo "PATH: $as_dir" -done + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS } >&5 @@ -1236,7 +2255,6 @@ _ACEOF ac_configure_args= ac_configure_args0= ac_configure_args1= -ac_sep= ac_must_keep_next=false for ac_pass in 1 2 do @@ -1247,13 +2265,13 @@ do -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in - 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) - ac_configure_args1="$ac_configure_args1 '$ac_arg'" + as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else @@ -1269,21 +2287,19 @@ do -* ) ac_must_keep_next=true ;; esac fi - ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" - # Get rid of the leading space. - ac_sep=" " + as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done -$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } -$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. -# WARNING: Be sure not to use single quotes in there, as some shells, -# such as our DU 5.0 friend, will then `close' the trap. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { @@ -1296,20 +2312,35 @@ trap 'exit_status=$? _ASBOX echo # The following way of writing the cache mishandles newlines in values, -{ +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done (set) 2>&1 | - case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in - *ac_space=\ *) + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) sed -n \ - "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" - ;; + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( *) - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} + esac | + sort +) echo cat <<\_ASBOX @@ -1320,22 +2351,28 @@ _ASBOX echo for ac_var in $ac_subst_vars do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX -## ------------- ## -## Output files. ## -## ------------- ## +## ------------------- ## +## File substitutions. ## +## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do - eval ac_val=$`echo $ac_var` - echo "$ac_var='"'"'$ac_val'"'"'" + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi @@ -1347,26 +2384,26 @@ _ASBOX ## ----------- ## _ASBOX echo - sed "/^$/d" confdefs.h | sort + cat confdefs.h echo fi test "$ac_signal" != 0 && - echo "$as_me: caught signal $ac_signal" - echo "$as_me: exit $exit_status" + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" } >&5 - rm -f core *.core && - rm -rf conftest* confdefs* conf$$* $ac_clean_files && + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status - ' 0 +' 0 for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo >confdefs.h +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. @@ -1374,112 +2411,128 @@ cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF - cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + # Let the site file select an alternate cache file if it wants to. -# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + ac_site_file1=$CONFIG_SITE +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 -echo "$as_me: loading site script $ac_site_file" >&6;} +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then - { echo "$as_me:$LINENO: loading cache $cache_file" >&5 -echo "$as_me: loading cache $cache_file" >&6;} + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in - [\\/]* | ?:[\\/]* ) . $cache_file;; - *) . ./$cache_file;; + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; esac fi else - { echo "$as_me:$LINENO: creating cache $cache_file" >&5 -echo "$as_me: creating cache $cache_file" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false -for ac_var in `(set) 2>&1 | - sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do +for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val="\$ac_cv_env_${ac_var}_value" - eval ac_new_val="\$ac_env_${ac_var}_value" + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 -echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then - { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 -echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 -echo "$as_me: former value: $ac_old_val" >&2;} - { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 -echo "$as_me: current value: $ac_new_val" >&2;} - ac_cache_corrupted=: + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) - ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then - { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 -echo "$as_me: error: changes in the environment can compromise the build" >&2;} - { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 -echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} - { (exit 1); exit 1; }; } + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -1488,48 +2541,30 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu +am__api_version='1.11' - - - - - - - - - - - - - - - - -am__api_version="1.9" ac_aux_dir= -for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f $ac_dir/shtool; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done done if test -z "$ac_aux_dir"; then - { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 -echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi -ac_config_guess="$SHELL $ac_aux_dir/config.guess" -ac_config_sub="$SHELL $ac_aux_dir/config.sub" -ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or @@ -1544,22 +2579,23 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. -echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 -echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if test "${ac_cv_path_install+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in - ./ | .// | /cC/* | \ + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. @@ -1567,7 +2603,7 @@ case $as_dir/ in # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. @@ -1577,30 +2613,43 @@ case $as_dir/ in # program-specific install script used by HP pwplus--don't use. : else - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi fi fi done done ;; esac -done + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is - # removed, or if the path is relative. + # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi -echo "$as_me:$LINENO: result: $INSTALL" >&5 -echo "${ECHO_T}$INSTALL" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -1610,21 +2659,34 @@ test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -echo "$as_me:$LINENO: checking whether build environment is sane" >&5 -echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( - set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. - set X `ls -t $srcdir/configure conftest.file` + set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ @@ -1634,11 +2696,8 @@ if ( # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&5 -echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken -alias in your environment" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file @@ -1647,81 +2706,206 @@ then # Ok. : else - { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! -Check your system clock" >&5 -echo "$as_me: error: newly created file is older than distributed files! -Check your system clock" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } test "$program_prefix" != NONE && - program_transform_name="s,^,$program_prefix,;$program_transform_name" + program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && - program_transform_name="s,\$,$program_suffix,;$program_transform_name" -# Double any \ or $. echo might interpret backslashes. + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. # By default was `s,x,x', remove it if useless. -cat <<\_ACEOF >conftest.sed -s/[\\$]/&&/g;s/;s,x,x,$// -_ACEOF -program_transform_name=`echo $program_transform_name | sed -f conftest.sed` -rm conftest.sed +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` -test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= - { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 -echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi -if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then - # We used to keeping the `.' as first argument, in order to - # allow $(mkdir_p) to be used without argument. As in - # $(mkdir_p) $(somedir) - # where $(somedir) is conditionally defined. However this is wrong - # for two reasons: - # 1. if the package is installed by a user who cannot write `.' - # make install will fail, - # 2. the above comment should most certainly read - # $(mkdir_p) $(DESTDIR)$(somedir) - # so it does not work when $(somedir) is undefined and - # $(DESTDIR) is not. - # To support the latter case, we have to write - # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), - # so the `.' trick is pointless. - mkdir_p='mkdir -p --' +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else - # On NextStep and OpenStep, the `mkdir' command does not - # recognize any option. It will interpret all options as - # directories to create, and then abort because `.' already - # exists. - for d in ./-p ./--version; - do - test -d $d && rmdir $d + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done done - # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. - if test -f "$ac_aux_dir/mkinstalldirs"; then - mkdir_p='$(mkinstalldirs)' +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" else - mkdir_p='$(install_sh) -d' + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" fi fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AWK+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. @@ -1731,55 +2915,59 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then - echo "$as_me:$LINENO: result: $AWK" >&5 -echo "${ECHO_T}$AWK" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$AWK" && break done -echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 -echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 -set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` -if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF +SHELL = /bin/sh all: - @echo 'ac_maketemp="$(MAKE)"' + @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac rm -f conftest.make fi -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } SET_MAKE= else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi @@ -1792,12 +2980,14 @@ else fi rmdir .tst 2>/dev/null -# test to see if srcdir already configured -if test "`cd $srcdir && pwd`" != "`pwd`" && - test -f $srcdir/config.status; then - { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 -echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} - { (exit 1); exit 1; }; } +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi fi # test whether we have cygpath @@ -1840,96 +3030,6 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -install_sh=${install_sh-"$am_aux_dir/install-sh"} - -# Installed binaries are usually stripped using `strip' when the user -# run `make install-strip'. However `strip' might not be the right -# tool to use in cross-compilation environments, therefore Automake -# will honor the `STRIP' environment variable to overrule this program. -if test "$cross_compiling" != no; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. -set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$STRIP"; then - ac_cv_prog_STRIP="$STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -STRIP=$ac_cv_prog_STRIP -if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -fi -if test -z "$ac_cv_prog_STRIP"; then - ac_ct_STRIP=$STRIP - # Extract the first word of "strip", so it can be a program name with args. -set dummy strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_STRIP"; then - ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - - test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" -fi -fi -ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP -if test -n "$ac_ct_STRIP"; then - echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - STRIP=$ac_ct_STRIP -else - STRIP="$ac_cv_prog_STRIP" -fi - -fi -INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" - # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. @@ -1944,60 +3044,77 @@ am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' # Make sure we can run config.sub. -$ac_config_sub sun4 >/dev/null 2>&1 || - { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 -echo "$as_me: error: cannot run $ac_config_sub" >&2;} - { (exit 1); exit 1; }; } +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 -echo "$as_me:$LINENO: checking build system type" >&5 -echo $ECHO_N "checking build system type... $ECHO_C" >&6 -if test "${ac_cv_build+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_build_alias=$build_alias -test -z "$ac_cv_build_alias" && - ac_cv_build_alias=`$ac_config_guess` -test -z "$ac_cv_build_alias" && - { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 -echo "$as_me: error: cannot guess build type; you must specify one" >&2;} - { (exit 1); exit 1; }; } -ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} - { (exit 1); exit 1; }; } + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi -echo "$as_me:$LINENO: result: $ac_cv_build" >&5 -echo "${ECHO_T}$ac_cv_build" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +esac build=$ac_cv_build -build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -echo "$as_me:$LINENO: checking host system type" >&5 -echo $ECHO_N "checking host system type... $ECHO_C" >&6 -if test "${ac_cv_host+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_host_alias=$host_alias -test -z "$ac_cv_host_alias" && - ac_cv_host_alias=$ac_cv_build_alias -ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || - { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 -echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} - { (exit 1); exit 1; }; } + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi fi -echo "$as_me:$LINENO: result: $ac_cv_host" >&5 -echo "${ECHO_T}$ac_cv_host" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +esac host=$ac_cv_host -host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - ac_config_headers="$ac_config_headers config.h" +ac_config_headers="$ac_config_headers config.h" # Checks for programs. @@ -2009,10 +3126,10 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2022,35 +3139,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2060,39 +3179,50 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2102,77 +3232,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 + fi -done -done - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - CC=$ac_ct_CC -else - CC="$ac_cv_prog_CC" -fi - fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2183,18 +3273,19 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. @@ -2212,24 +3303,25 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. @@ -2239,39 +3331,41 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - echo "$as_me:$LINENO: result: $CC" >&5 -echo "${ECHO_T}$CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl + for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CC+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. @@ -2281,66 +3375,78 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 -echo "${ECHO_T}$ac_ct_CC" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + test -n "$ac_ct_CC" && break done - CC=$ac_ct_CC + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi fi fi -test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&5 -echo "$as_me: error: no acceptable C compiler found in \$PATH -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "no acceptable C compiler found in \$PATH +See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2352,112 +3458,109 @@ main () } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.exe b.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 -echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 -ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 - (eval $ac_link_default) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Find the output, starting from the most likely. This scheme is -# not robust to junk in `.', hence go to wildcards (a.*) only as a last -# resort. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` -# Be careful to initialize this variable, since it used to be cached. -# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. -ac_cv_exeext= -# b.out is created by i960 compilers. -for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) - ;; - conftest.$ac_ext ) - # This is the source file. + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - # FIXME: I believe we export ac_cv_exeext for Libtool, - # but it would be cool to find out if it's true. Does anybody - # maintain Libtool? --akim. - export ac_cv_exeext + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. break;; * ) break;; esac done +test "$ac_cv_exeext" = no && ac_cv_exeext= + else - echo "$as_me: failed program was:" >&5 + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: C compiler cannot create executables -See \`config.log' for more details." >&5 -echo "$as_me: error: C compiler cannot create executables -See \`config.log' for more details." >&2;} - { (exit 77); exit 77; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "C compiler cannot create executables +See \`config.log' for more details." "$LINENO" 5; }; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi - +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_file" >&5 -echo "${ECHO_T}$ac_file" >&6 -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether the C compiler works" >&5 -echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 -# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { echo "$as_me:$LINENO: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } - fi - fi -fi -echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -rm -f a.out a.exe conftest$ac_cv_exeext b.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -# Check the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 -echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $cross_compiling" >&5 -echo "${ECHO_T}$cross_compiling" >&6 - -echo "$as_me:$LINENO: checking for suffix of executables" >&5 -echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -2465,38 +3568,90 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - export ac_cv_exeext break;; * ) break;; esac done else - { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." "$LINENO" 5; } fi - -rm -f conftest$ac_cv_exeext -echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 -echo "${ECHO_T}$ac_cv_exeext" >&6 +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT -echo "$as_me:$LINENO: checking for suffix of object files" >&5 -echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 -if test "${ac_cv_objext+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} _ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2508,45 +3663,46 @@ main () } _ACEOF rm -f conftest.o conftest.obj -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else - echo "$as_me: failed program was:" >&5 + $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute suffix of object files: cannot compile -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "cannot compute suffix of object files: cannot compile +See \`config.log' for more details." "$LINENO" 5; } fi - rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 -echo "${ECHO_T}$ac_cv_objext" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 -if test "${ac_cv_c_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2560,55 +3716,34 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no + ac_compiler_gnu=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 -GCC=`test $ac_compiler_gnu = yes && echo yes` +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS -CFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 -echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -2619,39 +3754,49 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ -ac_cv_prog_cc_g=no +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then @@ -2667,18 +3812,14 @@ else CFLAGS= fi fi -echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 -echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 -if test "${ac_cv_prog_cc_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_cv_prog_cc_stdc=no + ac_cv_prog_cc_c89=no ac_save_CC=$CC -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -2706,12 +3847,17 @@ static char *f (char * (*g) (char **, int), char **p, ...) /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std1 is added to get + as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std1. */ + that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; @@ -2726,205 +3872,37 @@ return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; return 0; } _ACEOF -# Don't try gcc -ansi; that turns off useful extensions and -# breaks some systems' header files. -# AIX -qlanglvl=ansi -# Ultrix and OSF/1 -std1 -# HP-UX 10.20 and later -Ae -# HP-UX older versions -Aa -D_HPUX_SOURCE -# SVR4 -Xc -D__EXTENSIONS__ -for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" - rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cc_stdc=$ac_arg -break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg fi -rm -f conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break done -rm -f conftest.$ac_ext conftest.$ac_objext +rm -f conftest.$ac_ext CC=$ac_save_CC fi - -case "x$ac_cv_prog_cc_stdc" in - x|xno) - echo "$as_me:$LINENO: result: none needed" >&5 -echo "${ECHO_T}none needed" >&6 ;; +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; *) - echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 -echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 - CC="$CC $ac_cv_prog_cc_stdc" ;; + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac - -# Some people use a C++ compiler to compile C. Since we use `exit', -# in C++ we need to declare it. In case someone uses the same compiler -# for both compiling C and C++ we need to have the C++ compiler decide -# the declaration of exit, since it's the most demanding environment. -cat >conftest.$ac_ext <<_ACEOF -#ifndef __cplusplus - choke me -#endif -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if test "x$ac_cv_prog_cc_c89" != xno; then : fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -2932,60 +3910,58 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" - ac_config_commands="$ac_config_commands depfiles" +ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: - @echo done + @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. -echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 -echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf -# We grep out `Entering directory' and `Leaving directory' -# messages which can occur if `w' ends up in MAKEFLAGS. -# In particular we don't look at `^make:' because GNU make might -# be invoked under some other name (usually "gmake"), in which -# case it prints its new name instead of `make'. -if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then - am__include=include - am__quote= - _am_result=GNU -fi +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf - if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then - am__include=.include - am__quote="\"" - _am_result=BSD - fi + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac fi -echo "$as_me:$LINENO: result: $_am_result" >&5 -echo "${ECHO_T}$_am_result" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } rm -f confinc confmf -# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then - enableval="$enable_dependency_tracking" +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi -fi; if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi - - -if test "x$enable_dependency_tracking" != xno; then + if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else @@ -2995,13 +3971,12 @@ fi - depcc="$CC" am_compiler_list= -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up @@ -3026,6 +4001,11 @@ else if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and @@ -3043,7 +4023,17 @@ else done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested @@ -3053,18 +4043,23 @@ else break fi ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; none) break ;; esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message @@ -3088,13 +4083,11 @@ else fi fi -echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type - - -if + if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= @@ -3108,10 +4101,9 @@ fi # So far, the only shared library we might use is libopts. # It's a small library - we might as well use a static version of it. -# Check whether --enable-shared or --disable-shared was given. -if test "${enable_shared+set}" = set; then - enableval="$enable_shared" - p=${PACKAGE-default} +# Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; @@ -3130,14 +4122,17 @@ if test "${enable_shared+set}" = set; then esac else enable_shared=no -fi; +fi -# Check whether --enable-static or --disable-static was given. -if test "${enable_static+set}" = set; then - enableval="$enable_static" - p=${PACKAGE-default} + + + + +# Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; @@ -3156,12 +4151,12 @@ if test "${enable_static+set}" = set; then esac else enable_static=yes -fi; +fi -# Check whether --enable-fast-install or --disable-fast-install was given. -if test "${enable_fast_install+set}" = set; then - enableval="$enable_fast_install" - p=${PACKAGE-default} + +# Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; @@ -3180,12 +4175,13 @@ if test "${enable_fast_install+set}" = set; then esac else enable_fast_install=yes -fi; +fi -echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5 -echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6 -if test "${lt_cv_path_SED+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${lt_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 else # Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. @@ -3236,37 +4232,152 @@ done fi SED=$lt_cv_path_SED -echo "$as_me:$LINENO: result: $SED" >&5 -echo "${ECHO_T}$SED" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5 +$as_echo "$SED" >&6; } -echo "$as_me:$LINENO: checking for egrep" >&5 -echo $ECHO_N "checking for egrep... $ECHO_C" >&6 -if test "${ac_cv_prog_egrep+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if echo a | (grep -E '(a|b)') >/dev/null 2>&1 - then ac_cv_prog_egrep='grep -E' - else ac_cv_prog_egrep='egrep' + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP fi -echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 -echo "${ECHO_T}$ac_cv_prog_egrep" >&6 - EGREP=$ac_cv_prog_egrep + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" -# Check whether --with-gnu-ld or --without-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval="$with_gnu_ld" - test "$withval" = no || with_gnu_ld=yes +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no -fi; +fi + ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. - echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw @@ -3295,14 +4406,14 @@ echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 ;; esac elif test "$with_gnu_ld" = yes; then - echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } else - echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR @@ -3332,19 +4443,17 @@ fi LD="$lt_cv_path_LD" if test -n "$LD"; then - echo "$as_me:$LINENO: result: $LD" >&5 -echo "${ECHO_T}$LD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 +$as_echo "$LD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld -echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5 -echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6 -if test "${lt_cv_ld_reload_flag+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi -echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5 -echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; @@ -3386,10 +4495,10 @@ case $host_os in ;; esac -echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5 -echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6 -if test "${lt_cv_path_NM+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD-compatible nm" >&5 +$as_echo_n "checking for BSD-compatible nm... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. @@ -3428,25 +4537,25 @@ else test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm fi fi -echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5 -echo "${ECHO_T}$lt_cv_path_NM" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } NM="$lt_cv_path_NM" -echo "$as_me:$LINENO: checking whether ln -s works" >&5 -echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no, using $LN_S" >&5 -echo "${ECHO_T}no, using $LN_S" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } fi -echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5 -echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6 -if test "${lt_cv_deplibs_check_method+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognise dependent libraries" >&5 +$as_echo_n "checking how to recognise dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= @@ -3615,8 +4724,8 @@ sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7* | sysv4*uw2*) esac fi -echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5 -echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown @@ -3631,11 +4740,11 @@ LTCC=${LTCC-"$CC"} compiler=$CC -# Check whether --enable-libtool-lock or --disable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval="$enable_libtool_lock" +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi -fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good @@ -3644,11 +4753,11 @@ case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" @@ -3662,12 +4771,12 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 3665 "configure"' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + echo '#line 4774 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) @@ -3700,11 +4809,11 @@ ia64-*-hpux*) x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in @@ -3747,10 +4856,10 @@ x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" - echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5 -echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6 -if test "${lt_cv_cc_needs_belf+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' @@ -3758,11 +4867,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -3773,37 +4878,13 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -lt_cv_cc_needs_belf=no + lt_cv_cc_needs_belf=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -3811,8 +4892,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu fi -echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5 -echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" @@ -3829,15 +4910,15 @@ ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 -echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then - if test "${ac_cv_prog_CPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" @@ -3851,11 +4932,7 @@ do # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -3864,68 +4941,24 @@ cat >>conftest.$ac_ext <<_ACEOF #endif Syntax error _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext - # OK, works on sane cases. Now check whether non-existent headers + # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Passes both tests. ac_preproc_ok=: break @@ -3935,7 +4968,7 @@ rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then +if $ac_preproc_ok; then : break fi @@ -3947,8 +4980,8 @@ fi else ac_cv_prog_CPP=$CPP fi -echo "$as_me:$LINENO: result: $CPP" >&5 -echo "${ECHO_T}$CPP" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do @@ -3958,11 +4991,7 @@ do # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include @@ -3971,68 +5000,24 @@ cat >>conftest.$ac_ext <<_ACEOF #endif Syntax error _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_cpp "$LINENO"; then : +else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext - # OK, works on sane cases. Now check whether non-existent headers + # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then +if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - # Passes both tests. ac_preproc_ok=: break @@ -4042,14 +5027,13 @@ rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : +if $ac_preproc_ok; then : + else - { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." "$LINENO" 5; } fi ac_ext=c @@ -4059,16 +5043,12 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $ ac_compiler_gnu=$ac_cv_c_compiler_gnu -echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -4083,51 +5063,23 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no + ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -4137,18 +5089,14 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -4158,16 +5106,13 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include +#include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) @@ -4187,109 +5132,40 @@ main () for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); + return 2; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -ac_cv_header_stdc=no +else + ac_cv_header_stdc=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + fi fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. - - - - - - - - - for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default - -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_Header=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -4297,1103 +5173,26 @@ fi done - for ac_header in dlfcn.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define HAVE_DLFCN_H 1 _ACEOF fi done -ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$CXX"; then - ac_cv_prog_CXX="$CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -CXX=$ac_cv_prog_CXX -if test -n "$CXX"; then - echo "$as_me:$LINENO: result: $CXX" >&5 -echo "${ECHO_T}$CXX" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$CXX" && break - done -fi -if test -z "$CXX"; then - ac_ct_CXX=$CXX - for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_CXX"; then - ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CXX="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_CXX=$ac_cv_prog_ac_ct_CXX -if test -n "$ac_ct_CXX"; then - echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5 -echo "${ECHO_T}$ac_ct_CXX" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_CXX" && break -done -test -n "$ac_ct_CXX" || ac_ct_CXX="g++" - - CXX=$ac_ct_CXX -fi - - -# Provide some information about the compiler. -echo "$as_me:$LINENO:" \ - "checking for C++ compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - -echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6 -if test "${ac_cv_cxx_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_cxx_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6 -GXX=`test $ac_compiler_gnu = yes && echo yes` -ac_test_CXXFLAGS=${CXXFLAGS+set} -ac_save_CXXFLAGS=$CXXFLAGS -CXXFLAGS="-g" -echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5 -echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_cxx_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_cxx_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_prog_cxx_g=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5 -echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6 -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS=$ac_save_CXXFLAGS -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -for ac_declaration in \ - '' \ - 'extern "C" void std::exit (int) throw (); using std::exit;' \ - 'extern "C" void std::exit (int); using std::exit;' \ - 'extern "C" void exit (int) throw ();' \ - 'extern "C" void exit (int);' \ - 'void exit (int);' -do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -#include -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -continue -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_declaration -int -main () -{ -exit (42); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -rm -f conftest* -if test -n "$ac_declaration"; then - echo '#ifdef __cplusplus' >>confdefs.h - echo $ac_declaration >>confdefs.h - echo '#endif' >>confdefs.h -fi - -ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -depcc="$CXX" am_compiler_list= - -echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 -echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 -if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named `D' -- because `-MD' means `put the output - # in D'. - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CXX_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with - # Solaris 8's {/usr,}/bin/sh. - touch sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - case $depmode in - nosideeffect) - # after this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - none) break ;; - esac - # We check with `-c' and `-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle `-M -o', and we need to detect this. - if depmode=$depmode \ - source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CXX_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CXX_dependencies_compiler_type=none -fi - -fi -echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5 -echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6 -CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type - - - -if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then - am__fastdepCXX_TRUE= - am__fastdepCXX_FALSE='#' -else - am__fastdepCXX_TRUE='#' - am__fastdepCXX_FALSE= -fi - - - - -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5 -echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6 -if test -z "$CXXCPP"; then - if test "${ac_cv_prog_CXXCPP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - break -fi - - done - ac_cv_prog_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -echo "$as_me:$LINENO: result: $CXXCPP" >&5 -echo "${ECHO_T}$CXXCPP" >&6 -ac_preproc_ok=false -for ac_cxx_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer to if __STDC__ is defined, since - # exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#ifdef __STDC__ -# include -#else -# include -#endif - Syntax error -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - : -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.$ac_ext - - # OK, works on sane cases. Now check whether non-existent headers - # can be detected and how. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_cxx_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - # Broken: success on invalid input. -continue -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext -if $ac_preproc_ok; then - : -else - { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&5 -echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi - -ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - -fi - - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu -if test -n "$ac_tool_prefix"; then - for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$F77"; then - ac_cv_prog_F77="$F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_F77="$ac_tool_prefix$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -F77=$ac_cv_prog_F77 -if test -n "$F77"; then - echo "$as_me:$LINENO: result: $F77" >&5 -echo "${ECHO_T}$F77" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$F77" && break - done -fi -if test -z "$F77"; then - ac_ct_F77=$F77 - for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -n "$ac_ct_F77"; then - ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_F77="$ac_prog" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done -done - -fi -fi -ac_ct_F77=$ac_cv_prog_ac_ct_F77 -if test -n "$ac_ct_F77"; then - echo "$as_me:$LINENO: result: $ac_ct_F77" >&5 -echo "${ECHO_T}$ac_ct_F77" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - - test -n "$ac_ct_F77" && break -done - - F77=$ac_ct_F77 -fi - - -# Provide some information about the compiler. -echo "$as_me:5244:" \ - "checking for Fortran 77 compiler version" >&5 -ac_compiler=`set X $ac_compile; echo $2` -{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 - (eval $ac_compiler --version &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 - (eval $ac_compiler -v &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 - (eval $ac_compiler -V &5) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } -rm -f a.out - -# If we don't use `.F' as extension, the preprocessor is not run on the -# input file. (Note that this only needs to work for GNU compilers.) -ac_save_ext=$ac_ext -ac_ext=F -echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5 -echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6 -if test "${ac_cv_f77_compiler_gnu+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF - program main -#ifndef __GNUC__ - choke me -#endif - - end -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_compiler_gnu=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_compiler_gnu=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_f77_compiler_gnu=$ac_compiler_gnu - -fi -echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5 -echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6 -ac_ext=$ac_save_ext -ac_test_FFLAGS=${FFLAGS+set} -ac_save_FFLAGS=$FFLAGS -FFLAGS= -echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5 -echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6 -if test "${ac_cv_prog_f77_g+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - FFLAGS=-g -cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_prog_f77_g=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_prog_f77_g=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5 -echo "${ECHO_T}$ac_cv_prog_f77_g" >&6 -if test "$ac_test_FFLAGS" = set; then - FFLAGS=$ac_save_FFLAGS -elif test $ac_cv_prog_f77_g = yes; then - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-g -O2" - else - FFLAGS="-g" - fi -else - if test "x$ac_cv_f77_compiler_gnu" = xyes; then - FFLAGS="-O2" - else - FFLAGS= - fi -fi - -G77=`test $ac_compiler_gnu = yes && echo yes` -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! # find the maximum length of command line arguments -echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5 -echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6 -if test "${lt_cv_sys_max_cmd_len+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" @@ -5482,21 +5281,21 @@ else fi if test -n $lt_cv_sys_max_cmd_len ; then - echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5 -echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } else - echo "$as_me:$LINENO: result: none" >&5 -echo "${ECHO_T}none" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } fi # Check for command to grab the raw symbol name followed by C symbol from nm. -echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5 -echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6 -if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. @@ -5589,18 +5388,18 @@ void nm_test_func(){} int main(){nm_test_var='a';nm_test_func();return(0);} EOF - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm - if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s "$nlist"; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" @@ -5651,11 +5450,11 @@ EOF lt_save_CFLAGS="$CFLAGS" LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext}; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS="$lt_save_LIBS" @@ -5689,17 +5488,17 @@ if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - echo "$as_me:$LINENO: result: failed" >&5 -echo "${ECHO_T}failed" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } else - echo "$as_me:$LINENO: result: ok" >&5 -echo "${ECHO_T}ok" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } fi -echo "$as_me:$LINENO: checking for objdir" >&5 -echo $ECHO_N "checking for objdir... $ECHO_C" >&6 -if test "${lt_cv_objdir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null @@ -5711,8 +5510,8 @@ else fi rmdir .libs 2>/dev/null fi -echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5 -echo "${ECHO_T}$lt_cv_objdir" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir @@ -5763,10 +5562,10 @@ with_gnu_ld="$lt_cv_prog_gnu_ld" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. @@ -5776,35 +5575,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AR="${ac_tool_prefix}ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - echo "$as_me:$LINENO: result: $AR" >&5 -echo "${ECHO_T}$AR" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_AR+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. @@ -5814,28 +5615,38 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_AR="ar" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false" fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - echo "$as_me:$LINENO: result: $ac_ct_AR" >&5 -echo "${ECHO_T}$ac_ct_AR" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - AR=$ac_ct_AR + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi else AR="$ac_cv_prog_AR" fi @@ -5843,10 +5654,10 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. @@ -5856,35 +5667,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - echo "$as_me:$LINENO: result: $RANLIB" >&5 -echo "${ECHO_T}$RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. @@ -5894,28 +5707,38 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 -echo "${ECHO_T}$ac_ct_RANLIB" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - RANLIB=$ac_ct_RANLIB + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi else RANLIB="$ac_cv_prog_RANLIB" fi @@ -5923,10 +5746,10 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. @@ -5936,35 +5759,37 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then - echo "$as_me:$LINENO: result: $STRIP" >&5 -echo "${ECHO_T}$STRIP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi + fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 -echo "$as_me:$LINENO: checking for $ac_word" >&5 -echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 -if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. @@ -5974,28 +5799,38 @@ for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" - echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done -done + done +IFS=$as_save_IFS - test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then - echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 -echo "${ECHO_T}$ac_ct_STRIP" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi - STRIP=$ac_ct_STRIP + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi else STRIP="$ac_cv_prog_STRIP" fi @@ -6053,10 +5888,10 @@ cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then - echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5 -echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6 -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) @@ -6106,19 +5941,19 @@ fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then - echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then - echo "$as_me:$LINENO: checking for file" >&5 -echo $ECHO_N "checking for file... $ECHO_C" >&6 -if test "${lt_cv_path_MAGIC_CMD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) @@ -6168,11 +6003,11 @@ fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then - echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5 -echo "${ECHO_T}$MAGIC_CMD" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi else @@ -6187,21 +6022,21 @@ esac enable_dlopen=no enable_win32_dll=no -# Check whether --enable-libtool-lock or --disable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then - enableval="$enable_libtool_lock" +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi -fi; test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes -# Check whether --with-pic or --without-pic was given. -if test "${with_pic+set}" = set; then - withval="$with_pic" - pic_mode="$withval" +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" else pic_mode=default -fi; +fi + test -z "$pic_mode" && pic_mode=default # Use C for the default configuration in the libtool script @@ -6261,12 +6096,12 @@ if test "$GCC" = no; then esac fi if test -n "$lt_prog_cc_shlib"; then - { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 -echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&5 +$as_echo "$as_me: WARNING: \`$CC' requires \`$lt_prog_cc_shlib' to build shared libraries" >&2;} if echo "$old_CC $old_CFLAGS " | grep "[ ]$lt_prog_cc_shlib[ ]" >/dev/null; then : else - { echo "$as_me:$LINENO: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 -echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5 +$as_echo "$as_me: WARNING: add \`$lt_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;} lt_cv_prog_cc_can_build_shared=no fi fi @@ -6275,10 +6110,10 @@ fi # # Check to make sure the static flag actually works. # -echo "$as_me:$LINENO: checking if $compiler static flag $lt_prog_compiler_static works" >&5 -echo $ECHO_N "checking if $compiler static flag $lt_prog_compiler_static works... $ECHO_C" >&6 -if test "${lt_prog_compiler_static_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_prog_compiler_static works" >&5 +$as_echo_n "checking if $compiler static flag $lt_prog_compiler_static works... " >&6; } +if test "${lt_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" @@ -6303,8 +6138,8 @@ else LDFLAGS="$save_LDFLAGS" fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_static_works" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_static_works" >&5 +$as_echo "$lt_prog_compiler_static_works" >&6; } if test x"$lt_prog_compiler_static_works" = xyes; then : @@ -6321,10 +6156,10 @@ if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag=' -fno-builtin' -echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext @@ -6339,11 +6174,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6342: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6177: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6346: \$? = $ac_status" >&5 + echo "$as_me:6181: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -6356,8 +6191,8 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" @@ -6371,8 +6206,8 @@ lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' @@ -6575,18 +6410,18 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 esac fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext @@ -6601,11 +6436,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6604: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6439: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6608: \$? = $ac_status" >&5 + echo "$as_me:6443: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -6618,8 +6453,8 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_works" >&5 +$as_echo "$lt_prog_compiler_pic_works" >&6; } if test x"$lt_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in @@ -6642,10 +6477,10 @@ case $host_os in ;; esac -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $rm -r conftest 2>/dev/null @@ -6663,11 +6498,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6666: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6501: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:6670: \$? = $ac_status" >&5 + echo "$as_me:6505: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -6689,34 +6524,34 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= @@ -7067,11 +6902,7 @@ EOF # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7082,41 +6913,16 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -7128,11 +6934,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -7143,41 +6945,16 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -7611,8 +7388,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi esac fi -echo "$as_me:$LINENO: result: $ld_shlibs" >&5 -echo "${ECHO_T}$ld_shlibs" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -7637,16 +7414,16 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext @@ -7659,11 +7436,11 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >& libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } then archive_cmds_need_lc=no else @@ -7674,16 +7451,16 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >& cat conftest.err 1>&5 fi $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5 -echo "${ECHO_T}$archive_cmds_need_lc" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } ;; esac fi ;; esac -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= @@ -8236,12 +8013,12 @@ uts4*) dynamic_linker=no ;; esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || \ test -n "$runpath_var" || \ @@ -8265,8 +8042,8 @@ else # directories. hardcode_action=unsupported fi -echo "$as_me:$LINENO: result: $hardcode_action" >&5 -echo "${ECHO_T}$hardcode_action" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink; then # Fast installation is not supported @@ -8279,29 +8056,29 @@ fi striplib= old_striplib= -echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi ;; *) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac fi @@ -8333,71 +8110,43 @@ else darwin*) # if libdl is installed we need to link against it - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else @@ -8410,458 +8159,168 @@ fi ;; *) - echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shl_load - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_shl_load) || defined (__stub___shl_load) -choke me -#else -char (*f) () = shl_load; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != shl_load; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_shl_load=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6 -if test $ac_cv_func_shl_load = yes; then + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" else - echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char shl_load (); int main () { -shl_load (); +return shl_load (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_shl_load=no + ac_cv_lib_dld_shl_load=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 -if test $ac_cv_lib_dld_shl_load = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else - echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_dlopen) || defined (__stub___dlopen) -choke me -#else -char (*f) () = dlopen; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != dlopen; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6 -if test $ac_cv_func_dlopen = yes; then + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" else - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else - echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_svld_dlopen=no + ac_cv_lib_svld_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 -if test $ac_cv_lib_svld_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else - echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dld_link (); int main () { -dld_link (); +return dld_link (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_dld_link=no + ac_cv_lib_dld_dld_link=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 -if test $ac_cv_lib_dld_dld_link = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi @@ -8900,10 +8359,10 @@ fi save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" - echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross @@ -8911,7 +8370,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -8993,15 +8452,15 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" - echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross @@ -9009,7 +8468,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -9091,8 +8550,8 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" @@ -9114,13 +8573,13 @@ fi # Report which librarie types wil actually be built -echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } -echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and @@ -9140,15 +8599,15 @@ aix4* | aix5*) fi ;; esac -echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } -echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes -echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } # The else clause should only fire when bootstrapping the # libtool distribution, otherwise you forgot to ship ltmain.sh @@ -9239,8 +8698,8 @@ if test -f "$ltmain"; then cfgfile="${ofile}T" trap "$rm \"$cfgfile\"; exit 1" 1 2 15 $rm -f "$cfgfile" - { echo "$as_me:$LINENO: creating $ofile" >&5 -echo "$as_me: creating $ofile" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ofile" >&5 +$as_echo "$as_me: creating $ofile" >&6;} cat <<__EOF__ >> "$cfgfile" #! $SHELL @@ -9637,26 +9096,26 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu CC="$lt_save_CC" -# Check whether --with-tags or --without-tags was given. -if test "${with_tags+set}" = set; then - withval="$with_tags" - tagnames="$withval" -fi; +# Check whether --with-tags was given. +if test "${with_tags+set}" = set; then : + withval=$with_tags; tagnames="$withval" +fi + if test -f "$ltmain" && test -n "$tagnames"; then if test ! -f "${ofile}"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: output file \`$ofile' does not exist" >&5 +$as_echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;} fi if test -z "$LTCC"; then eval "`$SHELL ${ofile} --config | grep '^LTCC='`" if test -z "$LTCC"; then - { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5 -echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: output file \`$ofile' does not look like a libtool script" >&5 +$as_echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;} else - { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 -echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5 +$as_echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} fi fi @@ -9670,17 +9129,13 @@ echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;} # Check whether tagname contains only valid characters case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in "") ;; - *) { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5 -echo "$as_me: error: invalid tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } + *) as_fn_error "invalid tag name: $tagname" "$LINENO" 5 ;; esac if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null then - { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5 -echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "tag name \"$tagname\" already exists" "$LINENO" 5 fi # Update the list of available tags. @@ -9692,3641 +9147,7 @@ echo "$as_me: error: tag name \"$tagname\" already exists" >&2;} if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then - ac_ext=cc -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - - - - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_flag_spec_ld_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_automatic_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;\n" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(int, char *) { return(0); }\n' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_LD=$LD -lt_save_GCC=$GCC -GCC=$GXX -lt_save_with_gnu_ld=$with_gnu_ld -lt_save_path_LD=$lt_cv_path_LD -if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx -else - unset lt_cv_prog_gnu_ld -fi -if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX -else - unset lt_cv_path_LD -fi -test -z "${LDCXX+set}" || LD=$LDCXX -CC=${CXX-"c++"} -compiler=$CC -compiler_CXX=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -# We don't want -fno-exception wen compiling C++ code, so set the -# no_builtin_flag separately -if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' -else - lt_prog_compiler_no_builtin_flag_CXX= -fi - -if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - -# Check whether --with-gnu-ld or --without-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then - withval="$with_gnu_ld" - test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi; -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - echo "$as_me:$LINENO: checking for ld used by $CC" >&5 -echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6 - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'` - while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do - ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - echo "$as_me:$LINENO: checking for GNU ld" >&5 -echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 -else - echo "$as_me:$LINENO: checking for non-GNU ld" >&5 -echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 -fi -if test "${lt_cv_path_LD+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -echo "${ECHO_T}$LD" >&6 -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi -test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 -echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} - { (exit 1); exit 1; }; } -echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 -echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 -if test "${lt_cv_prog_gnu_ld+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6 -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | \ - grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - -else - GXX=no - with_gnu_ld=no - wlarc= -fi - -# PORTME: fill in a description of your system's C++ link characteristics -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 -ld_shlibs_CXX=yes -case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct_CXX=yes - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - # -bexpall does not export symbols beginning with underscore (_) - always_export_symbols_CXX=yes - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX=' ' - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - else - ld_shlibs_CXX=no - fi - ;; - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - whole_archive_flag_spec_CXX='' - link_all_deplibs_CXX=yes - - if test "$GXX" = yes ; then - lt_int_apple_cc_single_mod=no - output_verbose_link_cmd='echo' - if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then - lt_int_apple_cc_single_mod=yes - fi - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - else - archive_cmds_CXX='$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - fi - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - if test "X$lt_int_apple_cc_single_mod" = Xyes ; then - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r -keep_private_externs -nostdlib -o ${lib}-master.o $libobjs~$CC -dynamiclib $allow_undefined_flag -o $lib ${lib}-master.o $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_CXX=no - ;; - esac - fi - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - freebsd[12]*) - # C++ shared libraries reported to be fairly broken before switch to ELF - ld_shlibs_CXX=no - ;; - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - freebsd* | kfreebsd*-gnu | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - gnu*) - ;; - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "[-]L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld_CXX='+b $libdir' - hardcode_libdir_separator_CXX=: - ;; - ia64*) - hardcode_libdir_flag_spec_CXX='-L$libdir' - ;; - *) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - *) - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*|ia64*) - archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | grep "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - ia64*|hppa*64*) - archive_cmds_CXX='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - ;; - linux*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | grep "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc*) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC*) - # Portland Group C++ compiler - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - esac - ;; - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - openbsd*) - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd='echo' - ;; - osf3*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname -Wl,-input -Wl,$lib.exp `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~ - $rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "ld" | grep -v "ld:"`; templist=`echo $templist | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - sco*) - archive_cmds_need_lc_CXX=no - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The C++ compiler is used as linker so we must use $wl - # flag to pass the commands to the underlying system - # linker. We must also pass each convience library through - # to the system linker between allextract/defaultextract. - # The C++ compiler will combine linker options so we - # cannot just pass the convience library names through - # without $wl. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='echo' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | grep -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\"" - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - fi - ;; - esac - ;; - sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) - archive_cmds_need_lc_CXX=no - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; -esac -echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6 -test "$ld_shlibs_CXX" = no && can_build_shared=no - -GCC_CXX="$GXX" -LD_CXX="$LD" - - -cat > conftest.$ac_ext <&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - # The `*' in the case matches for architectures that use `case' in - # $output_verbose_cmd can trigger glob expansion during the loop - # eval without this substitution. - output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"` - - for p in `eval $output_verbose_link_cmd`; do - case $p in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" \ - || test $p = "-R"; then - prev=$p - continue - else - prev= - fi - - if test "$pre_test_object_deps_done" = no; then - case $p in - -L* | -R*) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - ;; - - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$rm -f confest.$objext - -# PORTME: override above test on systems where it is broken -case $host_os in -solaris*) - case $cc_basename in - CC*) - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - postdeps_CXX='-lCstd -lCrun' - ;; - esac -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - -lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | os2* | pw32*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix4* | aix5*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_AC_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_CXX='-qnocommon' - lt_prog_compiler_wl_CXX='-Wl,' - ;; - esac - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | kfreebsd*-gnu | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux*) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - icpc* | ecpc*) - # Intel C++ - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC*) - # Portland Group C++ compiler. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - sco*) - case $cc_basename in - CC*) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - *) - ;; - esac - ;; - solaris*) - case $cc_basename in - CC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - unixware*) - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6 - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11267: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:11271: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp - $SED '/^$/d' conftest.err >conftest.er2 - if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_CXX=yes - fi - fi - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6 - -if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:11329: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:11333: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp - $SED '/^$/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6 - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - case $host_os in - aix4* | aix5*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw*) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5 -echo "${ECHO_T}$ld_shlibs_CXX" >&6 -test "$ld_shlibs_CXX" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_CXX=no - else - archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6 - ;; - esac - fi - ;; -esac - -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -kfreebsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - *) # from 3.2 on - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -knetbsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -sco3.2v5*) - version_type=osf - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 -test "$dynamic_linker" = no && can_build_shared=no - -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || \ - test -n "$runpath_var_CXX" || \ - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5 -echo "${ECHO_T}$hardcode_action_CXX" >&6 - -if test "$hardcode_action_CXX" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -striplib= -old_striplib= -echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - ;; - *) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - ;; - esac -fi - -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main () -{ -dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shl_load - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_shl_load) || defined (__stub___shl_load) -choke me -#else -char (*f) () = shl_load; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != shl_load; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_shl_load=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6 -if test $ac_cv_func_shl_load = yes; then - lt_cv_dlopen="shl_load" -else - echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -int -main () -{ -shl_load (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dld_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_shl_load=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 -if test $ac_cv_lib_dld_shl_load = yes; then - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" -else - echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_dlopen) || defined (__stub___dlopen) -choke me -#else -char (*f) () = dlopen; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != dlopen; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6 -if test $ac_cv_func_dlopen = yes; then - lt_cv_dlopen="dlopen" -else - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main () -{ -dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dl_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -int -main () -{ -dlopen (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_svld_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_svld_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 -if test $ac_cv_lib_svld_dlopen = yes; then - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dld_link (); -int -main () -{ -dld_link (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_cxx_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_dld_dld_link=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_dld_link=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 -if test $ac_cv_lib_dld_dld_link = yes; then - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_unknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6 - - if test "x$lt_cv_dlopen_self" = xyes; then - LDFLAGS="$LDFLAGS $link_static_flag" - echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext < -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -#ifdef __cplusplus -extern "C" void exit (int); -#endif - -void fnord() { int i=42;} -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - /* dlclose (self); */ - } - - exit (status); -} -EOF - if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_CXX \ - CC_CXX \ - LD_CXX \ - lt_prog_compiler_wl_CXX \ - lt_prog_compiler_pic_CXX \ - lt_prog_compiler_static_CXX \ - lt_prog_compiler_no_builtin_flag_CXX \ - export_dynamic_flag_spec_CXX \ - thread_safe_flag_spec_CXX \ - whole_archive_flag_spec_CXX \ - enable_shared_with_static_runtimes_CXX \ - old_archive_cmds_CXX \ - old_archive_from_new_cmds_CXX \ - predep_objects_CXX \ - postdep_objects_CXX \ - predeps_CXX \ - postdeps_CXX \ - compiler_lib_search_path_CXX \ - archive_cmds_CXX \ - archive_expsym_cmds_CXX \ - postinstall_cmds_CXX \ - postuninstall_cmds_CXX \ - old_archive_from_expsyms_cmds_CXX \ - allow_undefined_flag_CXX \ - no_undefined_flag_CXX \ - export_symbols_cmds_CXX \ - hardcode_libdir_flag_spec_CXX \ - hardcode_libdir_flag_spec_ld_CXX \ - hardcode_libdir_separator_CXX \ - hardcode_automatic_CXX \ - module_cmds_CXX \ - module_expsym_cmds_CXX \ - lt_cv_prog_compiler_c_o_CXX \ - exclude_expsyms_CXX \ - include_expsyms_CXX; do - - case $var in - old_archive_cmds_CXX | \ - old_archive_from_new_cmds_CXX | \ - archive_cmds_CXX | \ - archive_expsym_cmds_CXX | \ - module_cmds_CXX | \ - module_expsym_cmds_CXX | \ - old_archive_from_expsyms_cmds_CXX | \ - export_symbols_cmds_CXX | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# A language-specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_CXX - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_CXX -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_CXX - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_CXX - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_CXX" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC=$lt_save_CC -LDCXX=$LD -LD=$lt_save_LD -GCC=$lt_save_GCC -with_gnu_ldcxx=$with_gnu_ld -with_gnu_ld=$lt_save_with_gnu_ld -lt_cv_path_LDCXX=$lt_cv_path_LD -lt_cv_path_LD=$lt_save_path_LD -lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld -lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld - + : else tagname="" fi @@ -13334,2458 +9155,7 @@ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld F77) if test -n "$F77" && test "X$F77" != "Xno"; then - -ac_ext=f -ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5' -ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_f77_compiler_gnu - - -archive_cmds_need_lc_F77=no -allow_undefined_flag_F77= -always_export_symbols_F77=no -archive_expsym_cmds_F77= -export_dynamic_flag_spec_F77= -hardcode_direct_F77=no -hardcode_libdir_flag_spec_F77= -hardcode_libdir_flag_spec_ld_F77= -hardcode_libdir_separator_F77= -hardcode_minus_L_F77=no -hardcode_automatic_F77=no -module_cmds_F77= -module_expsym_cmds_F77= -link_all_deplibs_F77=unknown -old_archive_cmds_F77=$old_archive_cmds -no_undefined_flag_F77= -whole_archive_flag_spec_F77= -enable_shared_with_static_runtimes_F77=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -objext_F77=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code=" subroutine t\n return\n end\n" - -# Code to be used in simple link tests -lt_simple_link_test_code=" program t\n end\n" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -printf "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$rm conftest* - -ac_outfile=conftest.$ac_objext -printf "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$rm conftest* - - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -CC=${F77-"f77"} -compiler=$CC -compiler_F77=$CC -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - -echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5 -echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6 -echo "$as_me:$LINENO: result: $can_build_shared" >&5 -echo "${ECHO_T}$can_build_shared" >&6 - -echo "$as_me:$LINENO: checking whether to build shared libraries" >&5 -echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6 -test "$can_build_shared" = "no" && enable_shared=no - -# On AIX, shared libraries and static libraries use the same namespace, and -# are all built from PIC. -case $host_os in -aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; -aix4* | aix5*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; -esac -echo "$as_me:$LINENO: result: $enable_shared" >&5 -echo "${ECHO_T}$enable_shared" >&6 - -echo "$as_me:$LINENO: checking whether to build static libraries" >&5 -echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6 -# Make sure either enable_shared or enable_static is yes. -test "$enable_shared" = yes || enable_static=yes -echo "$as_me:$LINENO: result: $enable_static" >&5 -echo "${ECHO_T}$enable_static" >&6 - -test "$ld_shlibs_F77" = no && can_build_shared=no - -GCC_F77="$G77" -LD_F77="$LD" - -lt_prog_compiler_wl_F77= -lt_prog_compiler_pic_F77= -lt_prog_compiler_static_F77= - -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 - - if test "$GCC" = yes; then - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_static_F77='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - amigaos*) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4' - ;; - - beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_F77='-fno-common' - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared_F77=no - enable_shared=no - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_F77=-Kconform_pic - fi - ;; - - hpux*) - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - ;; - - *) - lt_prog_compiler_pic_F77='-fPIC' - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl_F77='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_F77='-Bstatic' - else - lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp' - fi - ;; - darwin*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - case $cc_basename in - xlc*) - lt_prog_compiler_pic_F77='-qnocommon' - lt_prog_compiler_wl_F77='-Wl,' - ;; - esac - ;; - - mingw* | pw32* | os2*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_F77='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_F77='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static_F77='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl_F77='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static_F77='-non_shared' - ;; - - newsos6) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - linux*) - case $cc_basename in - icc* | ecc*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-static' - ;; - pgcc* | pgf77* | pgf90* | pgf95*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-fpic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl_F77='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - esac - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl_F77='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static_F77='-non_shared' - ;; - - sco3.2v5*) - lt_prog_compiler_pic_F77='-Kpic' - lt_prog_compiler_static_F77='-dn' - ;; - - solaris*) - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - case $cc_basename in - f77* | f90* | f95*) - lt_prog_compiler_wl_F77='-Qoption ld ';; - *) - lt_prog_compiler_wl_F77='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl_F77='-Qoption ld ' - lt_prog_compiler_pic_F77='-PIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_pic_F77='-KPIC' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic_F77='-Kconform_pic' - lt_prog_compiler_static_F77='-Bstatic' - fi - ;; - - unicos*) - lt_prog_compiler_wl_F77='-Wl,' - lt_prog_compiler_can_build_shared_F77=no - ;; - - uts4*) - lt_prog_compiler_pic_F77='-pic' - lt_prog_compiler_static_F77='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared_F77=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6 - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_F77"; then - -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_prog_compiler_pic_works_F77=no - ac_outfile=conftest.$ac_objext - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_F77" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13689: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:13693: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $echo "X$_lt_compiler_boilerplate" | $Xsed >conftest.exp - $SED '/^$/d' conftest.err >conftest.er2 - if test ! -s conftest.err || diff conftest.exp conftest.er2 >/dev/null; then - lt_prog_compiler_pic_works_F77=yes - fi - fi - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6 - -if test x"$lt_prog_compiler_pic_works_F77" = xyes; then - case $lt_prog_compiler_pic_F77 in - "" | " "*) ;; - *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;; - esac -else - lt_prog_compiler_pic_F77= - lt_prog_compiler_can_build_shared_F77=no -fi - -fi -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_F77= - ;; - *) - lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77" - ;; -esac - -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - lt_cv_prog_compiler_c_o_F77=no - $rm -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13751: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:13755: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $echo "X$_lt_compiler_boilerplate" | $Xsed > out/conftest.exp - $SED '/^$/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.err || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_F77=yes - fi - fi - chmod u+w . 2>&5 - $rm conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files - $rm out/* && rmdir out - cd .. - rmdir conftest - $rm conftest* - -fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6 - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 - hard_links=yes - $rm conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 - if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 - - runpath_var= - allow_undefined_flag_F77= - enable_shared_with_static_runtimes_F77=no - archive_cmds_F77= - archive_expsym_cmds_F77= - old_archive_From_new_cmds_F77= - old_archive_from_expsyms_cmds_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - thread_safe_flag_spec_F77= - hardcode_libdir_flag_spec_F77= - hardcode_libdir_flag_spec_ld_F77= - hardcode_libdir_separator_F77= - hardcode_direct_F77=no - hardcode_minus_L_F77=no - hardcode_shlibpath_var_F77=unsupported - link_all_deplibs_F77=unknown - hardcode_automatic_F77=no - module_cmds_F77= - module_expsym_cmds_F77= - always_export_symbols_F77=no - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms_F77= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_" - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - extract_expsyms_cmds= - # Just being paranoid about ensuring that cc_basename is set. - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` - - case $host_os in - cygwin* | mingw* | pw32*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs_F77=yes - if test "$with_gnu_ld" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_F77='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_F77= - fi - supports_anon_versioning=no - case `$LD -v 2>/dev/null` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix3* | aix4* | aix5*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: the GNU linker, at least up to release 2.9.1, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to modify your PATH -*** so that a non-GNU linker is found, and then restart. - -EOF - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - - # Samuel A. Falvo II reports - # that the semantics of dynamic libraries on AmigaOS, at least up - # to version 4, is to share data among multiple programs linked - # with the same dynamic library. Since this doesn't match the - # behavior of shared libraries on other platforms, we can't use - # them. - ld_shlibs_F77=no - ;; - - beos*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_F77=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - cygwin* | mingw* | pw32*) - # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_F77='-L$libdir' - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=no - enable_shared_with_static_runtimes_F77=yes - export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols' - - if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' - else - ld_shlibs_F77=no - fi - ;; - - linux*) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - tmp_addflag= - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers - whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - esac - archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test $supports_anon_versioning = yes; then - archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - $echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - else - ld_shlibs_F77=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris* | sysv5*) - if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then - ld_shlibs_F77=no - cat <&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -EOF - elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - - sunos4*) - archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - *) - if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs_F77=no - fi - ;; - esac - - if test "$ld_shlibs_F77" = no; then - runpath_var= - hardcode_libdir_flag_spec_F77= - export_dynamic_flag_spec_F77= - whole_archive_flag_spec_F77= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag_F77=unsupported - always_export_symbols_F77=yes - archive_expsym_cmds_F77='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L_F77=yes - if test "$GCC" = yes && test -z "$link_static_flag"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct_F77=unsupported - fi - ;; - - aix4* | aix5*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - if $NM -V 2>&1 | grep 'GNU' > /dev/null; then - export_symbols_cmds_F77='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_F77='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$2 == "T") || (\$2 == "D") || (\$2 == "B")) && (substr(\$3,1,1) != ".")) { print \$3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix5*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_F77='' - hardcode_direct_F77=yes - hardcode_libdir_separator_F77=':' - link_all_deplibs_F77=yes - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && \ - strings "$collect2name" | grep resolve_lib_name >/dev/null - then - # We have reworked collect2 - hardcode_direct_F77=yes - else - # We have old collect2 - hardcode_direct_F77=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_F77=yes - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_libdir_separator_F77= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols_F77=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_F77='-berok' - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_F77="-z nodefs" - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF - program main - - end -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_f77_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - -aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'` -# Check for a 64-bit object if we didn't find anything. -if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } -}'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi - - hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_F77=' ${wl}-bernotok' - allow_undefined_flag_F77=' ${wl}-berok' - # -bexpall does not export symbols beginning with underscore (_) - always_export_symbols_F77=yes - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_F77=' ' - archive_cmds_need_lc_F77=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds_F77="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - archive_cmds_F77='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - # see comment about different semantics on the GNU ld section - ld_shlibs_F77=no - ;; - - bsdi[45]*) - export_dynamic_flag_spec_F77=-rdynamic - ;; - - cygwin* | mingw* | pw32*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_F77=' ' - allow_undefined_flag_F77=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_From_new_cmds_F77='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs' - fix_srcfile_path_F77='`cygpath -w "$srcfile"`' - enable_shared_with_static_runtimes_F77=yes - ;; - - darwin* | rhapsody*) - case $host_os in - rhapsody* | darwin1.[012]) - allow_undefined_flag_F77='${wl}-undefined ${wl}suppress' - ;; - *) # Darwin 1.3 on - if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - else - case ${MACOSX_DEPLOYMENT_TARGET} in - 10.[012]) - allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' - ;; - 10.*) - allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup' - ;; - esac - fi - ;; - esac - archive_cmds_need_lc_F77=no - hardcode_direct_F77=no - hardcode_automatic_F77=yes - hardcode_shlibpath_var_F77=unsupported - whole_archive_flag_spec_F77='' - link_all_deplibs_F77=yes - if test "$GCC" = yes ; then - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - else - case $cc_basename in - xlc*) - output_verbose_link_cmd='echo' - archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring' - module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags' - # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds - archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - module_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' - ;; - *) - ld_shlibs_F77=no - ;; - esac - fi - ;; - - dgux*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - freebsd1*) - ld_shlibs_F77=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | kfreebsd*-gnu | dragonfly*) - archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds_F77='$rm $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds_F77='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - ;; - - hpux10* | hpux11*) - if test "$GCC" = yes -a "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*|ia64*) - archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*|ia64*) - archive_cmds_F77='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' - ;; - *) - archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - ;; - esac - fi - if test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_flag_spec_ld_F77='+b $libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - ;; - ia64*) - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_direct_F77=no - hardcode_shlibpath_var_F77=no - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - ;; - *) - hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_direct_F77=yes - export_dynamic_flag_spec_F77='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L_F77=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_F77='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_ld_F77='-rpath $libdir' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - link_all_deplibs_F77=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - newsos6) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - hardcode_shlibpath_var_F77=no - ;; - - openbsd*) - hardcode_direct_F77=yes - hardcode_shlibpath_var_F77=no - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - export_dynamic_flag_spec_F77='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-R$libdir' - ;; - *) - archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir' - ;; - esac - fi - ;; - - os2*) - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_minus_L_F77=yes - allow_undefined_flag_F77=unsupported - archive_cmds_F77='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - fi - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_F77=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_F77='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag_F77=' -expect_unresolved \*' - archive_cmds_F77='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_F77='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~ - $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec_F77='-rpath $libdir' - fi - hardcode_libdir_separator_F77=: - ;; - - sco3.2v5*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - export_dynamic_flag_spec_F77='${wl}-Bexport' - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ;; - - solaris*) - no_undefined_flag_F77=' -z text' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' - else - wlarc='' - archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - fi - hardcode_libdir_flag_spec_F77='-R$libdir' - hardcode_shlibpath_var_F77=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine linker options so we - # cannot just pass the convience library names through - # without $wl, iff we do not link with $LD. - # Luckily, gcc supports the same syntax we need for Sun Studio. - # Supported since Solaris 2.6 (maybe 2.5.1?) - case $wlarc in - '') - whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;; - *) - whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;; - esac ;; - esac - link_all_deplibs_F77=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_direct_F77=yes - hardcode_minus_L_F77=yes - hardcode_shlibpath_var_F77=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds_F77='$CC -r -o $output$reload_objs' - hardcode_direct_F77=no - ;; - motorola) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_F77=no - ;; - - sysv4.3*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - export_dynamic_flag_spec_F77='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var_F77=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs_F77=yes - fi - ;; - - sysv4.2uw2*) - archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct_F77=yes - hardcode_minus_L_F77=no - hardcode_shlibpath_var_F77=no - hardcode_runpath_var=yes - runpath_var=LD_RUN_PATH - ;; - - sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) - no_undefined_flag_F77='${wl}-z ${wl}text' - if test "$GCC" = yes; then - archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds_F77='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var_F77=no - ;; - - sysv5*) - no_undefined_flag_F77=' -z text' - # $CC -shared without GNU ld will not create a library from C++ - # object files and a static libstdc++, better avoid it by now - archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp' - hardcode_libdir_flag_spec_F77= - hardcode_shlibpath_var_F77=no - runpath_var='LD_RUN_PATH' - ;; - - uts4*) - archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec_F77='-L$libdir' - hardcode_shlibpath_var_F77=no - ;; - - *) - ld_shlibs_F77=no - ;; - esac - fi - -echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5 -echo "${ECHO_T}$ld_shlibs_F77" >&6 -test "$ld_shlibs_F77" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_F77" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_F77=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_F77 in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 - $rm conftest* - printf "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_F77 - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_F77 - allow_undefined_flag_F77= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 - (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } - then - archive_cmds_need_lc_F77=no - else - archive_cmds_need_lc_F77=yes - fi - allow_undefined_flag_F77=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6 - ;; - esac - fi - ;; -esac - -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix4* | aix5*) - version_type=linux - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$host_os in - yes,cygwin* | yes,mingw* | yes,pw32*) - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $rm \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" - ;; - mingw*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` - if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH printed by - # mingw gcc, but we are running on Cygwin. Gcc prints its search - # path with ; separators, and with drive letters. We can handle the - # drive letters (cygwin fileutils understands them), so leave them, - # especially as we might pass files found there to a mingw objdump, - # which wouldn't understand a cygwinified path. Ahh. - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - ;; - - *) - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - ;; - esac - dynamic_linker='Win32 ld.exe' - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. - if test "$GCC" = yes; then - sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` - else - sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib' - fi - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd1*) - dynamic_linker=no - ;; - -kfreebsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[123]*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - *) # from 3.2 on - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555. - postinstall_cmds='chmod 555 $lib' - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be Linux ELF. -linux*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -knetbsd*-gnu) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='GNU ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -nto-qnx*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -openbsd*) - version_type=sunos - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -sco3.2v5*) - version_type=osf - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - ;; - -solaris*) - version_type=linux - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - export_dynamic_flag_spec='${wl}-Blargedynsym' - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -uts4*) - version_type=linux - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 -test "$dynamic_linker" = no && can_build_shared=no - -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 -hardcode_action_F77= -if test -n "$hardcode_libdir_flag_spec_F77" || \ - test -n "$runpath_var_F77" || \ - test "X$hardcode_automatic_F77" = "Xyes" ; then - - # We can hardcode non-existant directories. - if test "$hardcode_direct_F77" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no && - test "$hardcode_minus_L_F77" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_F77=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_F77=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_F77=unsupported -fi -echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5 -echo "${ECHO_T}$hardcode_action_F77" >&6 - -if test "$hardcode_action_F77" = relink; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - -striplib= -old_striplib= -echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 -if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - ;; - *) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 - ;; - esac -fi - - - -# The else clause should only fire when bootstrapping the -# libtool distribution, otherwise you forgot to ship ltmain.sh -# with your package, and you will get complaints that there are -# no rules to generate ltmain.sh. -if test -f "$ltmain"; then - # See if we are running on zsh, and set the options which allow our commands through - # without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - # Now quote all the things that may contain metacharacters while being - # careful not to overquote the AC_SUBSTed values. We take copies of the - # variables and quote the copies for generation of the libtool script. - for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC NM \ - SED SHELL STRIP \ - libname_spec library_names_spec soname_spec extract_expsyms_cmds \ - old_striplib striplib file_magic_cmd finish_cmds finish_eval \ - deplibs_check_method reload_flag reload_cmds need_locks \ - lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \ - lt_cv_sys_global_symbol_to_c_name_address \ - sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ - old_postinstall_cmds old_postuninstall_cmds \ - compiler_F77 \ - CC_F77 \ - LD_F77 \ - lt_prog_compiler_wl_F77 \ - lt_prog_compiler_pic_F77 \ - lt_prog_compiler_static_F77 \ - lt_prog_compiler_no_builtin_flag_F77 \ - export_dynamic_flag_spec_F77 \ - thread_safe_flag_spec_F77 \ - whole_archive_flag_spec_F77 \ - enable_shared_with_static_runtimes_F77 \ - old_archive_cmds_F77 \ - old_archive_from_new_cmds_F77 \ - predep_objects_F77 \ - postdep_objects_F77 \ - predeps_F77 \ - postdeps_F77 \ - compiler_lib_search_path_F77 \ - archive_cmds_F77 \ - archive_expsym_cmds_F77 \ - postinstall_cmds_F77 \ - postuninstall_cmds_F77 \ - old_archive_from_expsyms_cmds_F77 \ - allow_undefined_flag_F77 \ - no_undefined_flag_F77 \ - export_symbols_cmds_F77 \ - hardcode_libdir_flag_spec_F77 \ - hardcode_libdir_flag_spec_ld_F77 \ - hardcode_libdir_separator_F77 \ - hardcode_automatic_F77 \ - module_cmds_F77 \ - module_expsym_cmds_F77 \ - lt_cv_prog_compiler_c_o_F77 \ - exclude_expsyms_F77 \ - include_expsyms_F77; do - - case $var in - old_archive_cmds_F77 | \ - old_archive_from_new_cmds_F77 | \ - archive_cmds_F77 | \ - archive_expsym_cmds_F77 | \ - module_cmds_F77 | \ - module_expsym_cmds_F77 | \ - old_archive_from_expsyms_cmds_F77 | \ - export_symbols_cmds_F77 | \ - extract_expsyms_cmds | reload_cmds | finish_cmds | \ - postinstall_cmds | postuninstall_cmds | \ - old_postinstall_cmds | old_postuninstall_cmds | \ - sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) - # Double-quote double-evaled strings. - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" - ;; - *) - eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" - ;; - esac - done - - case $lt_echo in - *'\$0 --fallback-echo"') - lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` - ;; - esac - -cfgfile="$ofile" - - cat <<__EOF__ >> "$cfgfile" -# ### BEGIN LIBTOOL TAG CONFIG: $tagname - -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_F77 - -# Whether or not to disallow shared libs when runtime libs are static -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77 - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# An echo program that does not interpret backslashes. -echo=$lt_echo - -# The archiver. -AR=$lt_AR -AR_FLAGS=$lt_AR_FLAGS - -# A C compiler. -LTCC=$lt_LTCC - -# A language-specific compiler. -CC=$lt_compiler_F77 - -# Is the compiler the GNU C compiler? -with_gcc=$GCC_F77 - -# An ERE matcher. -EGREP=$lt_EGREP - -# The linker used to build libraries. -LD=$lt_LD_F77 - -# Whether we need hard or soft links. -LN_S=$lt_LN_S - -# A BSD-compatible nm program. -NM=$lt_NM - -# A symbol stripping program -STRIP=$lt_STRIP - -# Used to examine libraries when file_magic_cmd begins "file" -MAGIC_CMD=$MAGIC_CMD - -# Used on cygwin: DLL creation program. -DLLTOOL="$DLLTOOL" - -# Used on cygwin: object dumper. -OBJDUMP="$OBJDUMP" - -# Used on cygwin: assembler. -AS="$AS" - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_F77 - -# Object file suffix (normally "o"). -objext="$ac_objext" - -# Old archive suffix (normally "a"). -libext="$libext" - -# Shared library suffix (normally ".so"). -shrext_cmds='$shrext_cmds' - -# Executable file suffix (normally ""). -exeext="$exeext" - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_F77 -pic_mode=$pic_mode - -# What is the maximum length of a command? -max_cmd_len=$lt_cv_sys_max_cmd_len - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77 - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Do we need the lib prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_F77 - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77 - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77 - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77 - -# Compiler flag to generate thread-safe objects. -thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77 - -# Library versioning type. -version_type=$version_type - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME. -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Commands used to build and install an old-style archive. -RANLIB=$lt_RANLIB -old_archive_cmds=$lt_old_archive_cmds_F77 -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77 - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77 - -# Commands used to build and install a shared archive. -archive_cmds=$lt_archive_cmds_F77 -archive_expsym_cmds=$lt_archive_expsym_cmds_F77 -postinstall_cmds=$lt_postinstall_cmds -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to build a loadable module (assumed same as above if empty) -module_cmds=$lt_module_cmds_F77 -module_expsym_cmds=$lt_module_expsym_cmds_F77 - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - -# Dependencies to place before the objects being linked to create a -# shared library. -predep_objects=$lt_predep_objects_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdep_objects=$lt_postdep_objects_F77 - -# Dependencies to place before the objects being linked to create a -# shared library. -predeps=$lt_predeps_F77 - -# Dependencies to place after the objects being linked to create a -# shared library. -postdeps=$lt_postdeps_F77 - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_F77 - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method == file_magic. -file_magic_cmd=$lt_file_magic_cmd - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_F77 - -# Flag that forces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_F77 - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# Same as above, but a single script fragment to be evaled but not shown. -finish_eval=$lt_finish_eval - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# This is the shared library runtime path variable. -runpath_var=$runpath_var - -# This is the shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_F77 - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist. -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77 - -# If ld is used when linking, flag to hardcode \$libdir into -# a binary during linking. This must work even if \$libdir does -# not exist. -hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77 - -# Whether we need a single -rpath flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77 - -# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the -# resulting binary. -hardcode_direct=$hardcode_direct_F77 - -# Set to yes if using the -LDIR flag during linking hardcodes DIR into the -# resulting binary. -hardcode_minus_L=$hardcode_minus_L_F77 - -# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into -# the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_F77 - -# Set to yes if building a shared library automatically hardcodes DIR into the library -# and all subsequent libraries and executables linked against it. -hardcode_automatic=$hardcode_automatic_F77 - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at relink time. -variables_saved_for_relink="$variables_saved_for_relink" - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_F77 - -# Compile-time system search path for libraries -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Fix the shell variable \$srcfile for the compiler. -fix_srcfile_path="$fix_srcfile_path_F77" - -# Set to yes if exported symbols are required. -always_export_symbols=$always_export_symbols_F77 - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_F77 - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_F77 - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_F77 - -# ### END LIBTOOL TAG CONFIG: $tagname - -__EOF__ - - -else - # If there is no Makefile yet, we rely on a make rule to execute - # `config.status --recheck' to rerun these tests and create the - # libtool script then. - ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'` - if test -f "$ltmain_in"; then - test -f Makefile && make "$ltmain" - fi -fi - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -CC="$lt_save_CC" - + : else tagname="" fi @@ -15795,7 +9165,6 @@ CC="$lt_save_CC" if test -n "$GCJ" && test "X$GCJ" != "Xno"; then - # Source file extension for Java test sources. ac_ext=java @@ -15860,10 +9229,10 @@ if test "$GCC" = yes; then lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin' -echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext @@ -15878,11 +9247,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15881: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9250: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15885: \$? = $ac_status" >&5 + echo "$as_me:9254: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -15895,8 +9264,8 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions" @@ -15910,8 +9279,8 @@ lt_prog_compiler_wl_GCJ= lt_prog_compiler_pic_GCJ= lt_prog_compiler_static_GCJ= -echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5 -echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } if test "$GCC" = yes; then lt_prog_compiler_wl_GCJ='-Wl,' @@ -16114,18 +9483,18 @@ echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6 esac fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_GCJ" >&5 +$as_echo "$lt_prog_compiler_pic_GCJ" >&6; } # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_GCJ"; then -echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 -echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6 -if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... " >&6; } +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_prog_compiler_pic_works_GCJ=no ac_outfile=conftest.$ac_objext @@ -16140,11 +9509,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16143: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9512: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:16147: \$? = $ac_status" >&5 + echo "$as_me:9516: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -16157,8 +9526,8 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5 -echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_works_GCJ" >&5 +$as_echo "$lt_prog_compiler_pic_works_GCJ" >&6; } if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then case $lt_prog_compiler_pic_GCJ in @@ -16181,10 +9550,10 @@ case $host_os in ;; esac -echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5 -echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6 -if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then : + $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_GCJ=no $rm -r conftest 2>/dev/null @@ -16202,11 +9571,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:16205: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9574: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:16209: \$? = $ac_status" >&5 + echo "$as_me:9578: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -16228,34 +9597,34 @@ else $rm conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 -echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_GCJ" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_GCJ" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user - echo "$as_me:$LINENO: checking if we can lock with hard links" >&5 -echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $rm conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no - echo "$as_me:$LINENO: result: $hard_links" >&5 -echo "${ECHO_T}$hard_links" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } if test "$hard_links" = no; then - { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi -echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag_GCJ= @@ -16606,11 +9975,7 @@ EOF # -berok will link without error, but may produce a broken library. allow_undefined_flag_GCJ='-berok' # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -16621,41 +9986,16 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -16667,11 +10007,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi archive_expsym_cmds_GCJ="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an empty executable. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -16682,41 +10018,16 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` # Check for a 64-bit object if we didn't find anything. if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'`; fi -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath" @@ -17150,8 +10461,8 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi esac fi -echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5 -echo "${ECHO_T}$ld_shlibs_GCJ" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_GCJ" >&5 +$as_echo "$ld_shlibs_GCJ" >&6; } test "$ld_shlibs_GCJ" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" @@ -17176,16 +10487,16 @@ x|xyes) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. - echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5 -echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } $rm conftest* printf "$lt_simple_compile_test_code" > conftest.$ac_ext - if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } 2>conftest.err; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext @@ -17198,11 +10509,11 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >& libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ allow_undefined_flag_GCJ= - if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } then archive_cmds_need_lc_GCJ=no else @@ -17213,16 +10524,16 @@ echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >& cat conftest.err 1>&5 fi $rm conftest* - echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5 -echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_GCJ" >&5 +$as_echo "$archive_cmds_need_lc_GCJ" >&6; } ;; esac fi ;; esac -echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5 -echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= @@ -17775,12 +11086,12 @@ uts4*) dynamic_linker=no ;; esac -echo "$as_me:$LINENO: result: $dynamic_linker" >&5 -echo "${ECHO_T}$dynamic_linker" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no -echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5 -echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_GCJ= if test -n "$hardcode_libdir_flag_spec_GCJ" || \ test -n "$runpath_var_GCJ" || \ @@ -17804,8 +11115,8 @@ else # directories. hardcode_action_GCJ=unsupported fi -echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5 -echo "${ECHO_T}$hardcode_action_GCJ" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_GCJ" >&5 +$as_echo "$hardcode_action_GCJ" >&6; } if test "$hardcode_action_GCJ" = relink; then # Fast installation is not supported @@ -17818,29 +11129,29 @@ fi striplib= old_striplib= -echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5 -echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } fi ;; *) - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } ;; esac fi @@ -17872,71 +11183,43 @@ else darwin*) # if libdl is installed we need to link against it - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else @@ -17949,458 +11232,168 @@ fi ;; *) - echo "$as_me:$LINENO: checking for shl_load" >&5 -echo $ECHO_N "checking for shl_load... $ECHO_C" >&6 -if test "${ac_cv_func_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define shl_load to an innocuous variant, in case declares shl_load. - For example, HP-UX 11i declares gettimeofday. */ -#define shl_load innocuous_shl_load - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char shl_load (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef shl_load - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char shl_load (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_shl_load) || defined (__stub___shl_load) -choke me -#else -char (*f) () = shl_load; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != shl_load; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_shl_load=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_shl_load=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5 -echo "${ECHO_T}$ac_cv_func_shl_load" >&6 -if test $ac_cv_func_shl_load = yes; then + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" else - echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5 -echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_shl_load+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char shl_load (); int main () { -shl_load (); +return shl_load (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_shl_load=no + ac_cv_lib_dld_shl_load=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6 -if test $ac_cv_lib_dld_shl_load = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld" else - echo "$as_me:$LINENO: checking for dlopen" >&5 -echo $ECHO_N "checking for dlopen... $ECHO_C" >&6 -if test "${ac_cv_func_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define dlopen to an innocuous variant, in case declares dlopen. - For example, HP-UX 11i declares gettimeofday. */ -#define dlopen innocuous_dlopen - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char dlopen (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef dlopen - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char dlopen (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_dlopen) || defined (__stub___dlopen) -choke me -#else -char (*f) () = dlopen; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != dlopen; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_dlopen=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_dlopen=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5 -echo "${ECHO_T}$ac_cv_func_dlopen" >&6 -if test $ac_cv_func_dlopen = yes; then + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" else - echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5 -echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6 -if test "${ac_cv_lib_dl_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dl_dlopen=no + ac_cv_lib_dl_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6 -if test $ac_cv_lib_dl_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else - echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5 -echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6 -if test "${ac_cv_lib_svld_dlopen+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dlopen (); int main () { -dlopen (); +return dlopen (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_svld_dlopen=no + ac_cv_lib_svld_dlopen=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5 -echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6 -if test $ac_cv_lib_svld_dlopen = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else - echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5 -echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6 -if test "${ac_cv_lib_dld_dld_link+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char dld_link (); int main () { -dld_link (); +return dld_link (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_dld_dld_link=no + ac_cv_lib_dld_dld_link=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5 -echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6 -if test $ac_cv_lib_dld_dld_link = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld" fi @@ -18439,10 +11432,10 @@ fi save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" - echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5 -echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross @@ -18450,7 +11443,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -18532,15 +11525,15 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then LDFLAGS="$LDFLAGS $link_static_flag" - echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5 -echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6 -if test "${lt_cv_dlopen_self_static+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross @@ -18548,7 +11541,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <&5 + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in @@ -18630,8 +11623,8 @@ rm -fr conftest* fi -echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5 -echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" @@ -19073,7 +12066,6 @@ CC="$lt_save_CC" RC) - # Source file extension for RC test sources. ac_ext=rc @@ -19543,9 +12535,7 @@ CC="$lt_save_CC" ;; *) - { { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5 -echo "$as_me: error: Unsupported tag name: $tagname" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "Unsupported tag name: $tagname" "$LINENO" 5 ;; esac @@ -19563,9 +12553,7 @@ echo "$as_me: error: Unsupported tag name: $tagname" >&2;} chmod +x "$ofile" else rm -f "${ofile}T" - { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5 -echo "$as_me: error: unable to update list of available tagged configurations." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "unable to update list of available tagged configurations." "$LINENO" 5 fi fi @@ -19587,17 +12575,6 @@ LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - # NTP has (so far) been relying on leading-edge autogen. # Therefore, by default: @@ -19617,27 +12594,25 @@ esac LIBOPTS_DIR=libopts - # Check whether --enable-local-libopts or --disable-local-libopts was given. -if test "${enable_local_libopts+set}" = set; then - enableval="$enable_local_libopts" - + # Check whether --enable-local-libopts was given. +if test "${enable_local_libopts+set}" = set; then : + enableval=$enable_local_libopts; if test x$enableval = xyes ; then - { echo "$as_me:$LINENO: Using supplied libopts tearoff" >&5 -echo "$as_me: Using supplied libopts tearoff" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Using supplied libopts tearoff" >&5 +$as_echo "$as_me: Using supplied libopts tearoff" >&6;} LIBOPTS_LDADD='$(top_builddir)/libopts/libopts.la' LIBOPTS_CFLAGS='-I$(top_srcdir)/libopts' NEED_LIBOPTS_DIR=true fi -fi; - - # Check whether --enable-libopts-install or --disable-libopts-install was given. -if test "${enable_libopts_install+set}" = set; then - enableval="$enable_libopts_install" - -fi; +fi -if test "X${enable_libopts_install}" != Xno; then + # Check whether --enable-libopts-install was given. +if test "${enable_libopts_install+set}" = set; then : + enableval=$enable_libopts_install; +fi + + if test "X${enable_libopts_install}" != Xno; then INSTALL_LIBOPTS_TRUE= INSTALL_LIBOPTS_FALSE='#' else @@ -19647,18 +12622,17 @@ fi if test -z "${NEED_LIBOPTS_DIR}" ; then - echo "$as_me:$LINENO: checking whether autoopts-config can be found" >&5 -echo $ECHO_N "checking whether autoopts-config can be found... $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether autoopts-config can be found" >&5 +$as_echo_n "checking whether autoopts-config can be found... " >&6; } -# Check whether --with-autoopts-config or --without-autoopts-config was given. -if test "${with_autoopts_config+set}" = set; then - withval="$with_autoopts_config" - lo_cv_with_autoopts_config=${with_autoopts_config} +# Check whether --with-autoopts-config was given. +if test "${with_autoopts_config+set}" = set; then : + withval=$with_autoopts_config; lo_cv_with_autoopts_config=${with_autoopts_config} else - echo "$as_me:$LINENO: checking whether autoopts-config is specified" >&5 -echo $ECHO_N "checking whether autoopts-config is specified... $ECHO_C" >&6 -if test "${lo_cv_with_autoopts_config+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether autoopts-config is specified" >&5 +$as_echo_n "checking whether autoopts-config is specified... " >&6; } +if test "${lo_cv_with_autoopts_config+set}" = set; then : + $as_echo_n "(cached) " >&6 else if autoopts-config --help 2>/dev/null 1>&2 then lo_cv_with_autoopts_config=autoopts-config @@ -19666,13 +12640,14 @@ else then lo_cv_with_autoopts_config=libopts-config else lo_cv_with_autoopts_config=no ; fi fi -echo "$as_me:$LINENO: result: $lo_cv_with_autoopts_config" >&5 -echo "${ECHO_T}$lo_cv_with_autoopts_config" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lo_cv_with_autoopts_config" >&5 +$as_echo "$lo_cv_with_autoopts_config" >&6; } -fi; # end of AC_ARG_WITH +fi + # end of AC_ARG_WITH - if test "${lo_cv_test_autoopts+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + if test "${lo_cv_test_autoopts+set}" = set; then : + $as_echo_n "(cached) " >&6 else if test -z "${lo_cv_with_autoopts_config}" \ @@ -19691,8 +12666,8 @@ else fi # end of CACHE_VAL - echo "$as_me:$LINENO: result: ${lo_cv_test_autoopts}" >&5 -echo "${ECHO_T}${lo_cv_test_autoopts}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lo_cv_test_autoopts}" >&5 +$as_echo "${lo_cv_test_autoopts}" >&6; } if test "X${lo_cv_test_autoopts}" != Xno then @@ -19705,9 +12680,7 @@ echo "${ECHO_T}${lo_cv_test_autoopts}" >&6 fi fi # end of if test -z "${NEED_LIBOPTS_DIR}" - - -if test -n "${NEED_LIBOPTS_DIR}"; then + if test -n "${NEED_LIBOPTS_DIR}"; then NEED_LIBOPTS_TRUE= NEED_LIBOPTS_FALSE='#' else @@ -19719,7 +12692,7 @@ fi LIBOPTS_DIR=libopts - ac_config_files="$ac_config_files libopts/Makefile" + ac_config_files="$ac_config_files libopts/Makefile" @@ -19730,16 +12703,12 @@ if test X${INVOKE_LIBOPTS_MACROS_FIRST_done} != Xyes ; then # ================= # AC_HEADER_STDC # ================= - echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -19754,51 +12723,23 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no + ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -19808,18 +12749,14 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -19829,16 +12766,13 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include +#include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) @@ -19858,65 +12792,41 @@ main () for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); + return 2; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -ac_cv_header_stdc=no +else + ac_cv_header_stdc=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + fi fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # ================= # AC_HEADER_DIRENT # ================= - - - - - -ac_header_dirent=no + ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 -echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> @@ -19930,42 +12840,20 @@ return 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" + eval "$as_ac_Header=no" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break @@ -19974,256 +12862,116 @@ fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then - echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -ac_cv_search_opendir=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char opendir (); int main () { -opendir (); +return opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_opendir" = no; then - for ac_lib in dir; do +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break +fi +done +if test "${ac_cv_search_opendir+set}" = set; then : -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="-l$ac_lib" -break else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done + ac_cv_search_opendir=no fi +rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6 -if test "$ac_cv_search_opendir" != no; then - test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else - echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -ac_cv_search_opendir=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char opendir (); int main () { -opendir (); +return opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_opendir" = no; then - for ac_lib in x; do +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break +fi +done +if test "${ac_cv_search_opendir+set}" = set; then : -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="-l$ac_lib" -break else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done + ac_cv_search_opendir=no fi +rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6 -if test "$ac_cv_search_opendir" != no; then - test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi @@ -20233,172 +12981,17 @@ fi # ================= # AC_CHECK_HEADERS # ================= - - - - - - - - - - - - - - - - - - - - -for ac_header in dlfcn.h errno.h fcntl.h libgen.h memory.h netinet/in.h \ + for ac_header in dlfcn.h errno.h fcntl.h libgen.h memory.h netinet/in.h \ setjmp.h sys/mman.h sys/param.h sys/poll.h sys/procset.h sys/select.h \ sys/socket.h sys/stropts.h sys/time.h sys/un.h sys/wait.h unistd.h \ utime.h sysexits.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -20413,160 +13006,21 @@ done string errno stdlib memory setjmp do eval as_ac_var=\${ac_cv_header_${f}_h+set} test "${as_ac_var}" = set || \ - { { echo "$as_me:$LINENO: error: You must have ${f}.h on your system" >&5 -echo "$as_me: error: You must have ${f}.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have ${f}.h on your system" "$LINENO" 5 done # ================================================ # AC_CHECK_HEADERS: stdarg.h is present define HAVE_STDARG_H, otherwise # if varargs.h is present define HAVE_VARARGS_H. # ================================================ - - -for ac_header in stdarg.h varargs.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in stdarg.h varargs.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -20574,159 +13028,20 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have stdarg.h or varargs.h on your system" >&5 -echo "$as_me: error: You must have stdarg.h or varargs.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have stdarg.h or varargs.h on your system" "$LINENO" 5 fi # ================================================ # Similarly for the string.h and strings.h headers # ================================================ - - -for ac_header in string.h strings.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in string.h strings.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -20734,160 +13049,20 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have string.h or strings.h on your system" >&5 -echo "$as_me: error: You must have string.h or strings.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have string.h or strings.h on your system" "$LINENO" 5 fi # ===================== # ...and limits headers # ===================== - - - -for ac_header in limits.h sys/limits.h values.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in limits.h sys/limits.h values.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -20895,222 +13070,28 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have one of limits.h, sys/limits.h or values.h" >&5 -echo "$as_me: error: You must have one of limits.h, sys/limits.h or values.h" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have one of limits.h, sys/limits.h or values.h" "$LINENO" 5 fi # ======================== # ...and int types headers # ======================== - - -for ac_header in stdint.h inttypes.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in stdint.h inttypes.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi done - echo "$as_me:$LINENO: checking for int8_t" >&5 -echo $ECHO_N "checking for int8_t... $ECHO_C" >&6 -if test "${ac_cv_type_int8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int8_t *) 0) - return 0; -if (sizeof (int8_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int8_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int8_t" >&5 -echo "${ECHO_T}$ac_cv_type_int8_t" >&6 -if test $ac_cv_type_int8_t = yes; then + ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default" +if test "x$ac_cv_type_int8_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT8_T 1 @@ -21118,63 +13099,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint8_t" >&5 -echo $ECHO_N "checking for uint8_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint8_t *) 0) - return 0; -if (sizeof (uint8_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint8_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint8_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint8_t" >&6 -if test $ac_cv_type_uint8_t = yes; then +ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default" +if test "x$ac_cv_type_uint8_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT8_T 1 @@ -21182,63 +13108,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for int16_t" >&5 -echo $ECHO_N "checking for int16_t... $ECHO_C" >&6 -if test "${ac_cv_type_int16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int16_t *) 0) - return 0; -if (sizeof (int16_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int16_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int16_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int16_t" >&5 -echo "${ECHO_T}$ac_cv_type_int16_t" >&6 -if test $ac_cv_type_int16_t = yes; then +ac_fn_c_check_type "$LINENO" "int16_t" "ac_cv_type_int16_t" "$ac_includes_default" +if test "x$ac_cv_type_int16_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT16_T 1 @@ -21246,63 +13117,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint16_t" >&5 -echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint16_t *) 0) - return 0; -if (sizeof (uint16_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint16_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint16_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint16_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint16_t" >&6 -if test $ac_cv_type_uint16_t = yes; then +ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default" +if test "x$ac_cv_type_uint16_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT16_T 1 @@ -21310,63 +13126,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for int32_t" >&5 -echo $ECHO_N "checking for int32_t... $ECHO_C" >&6 -if test "${ac_cv_type_int32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int32_t *) 0) - return 0; -if (sizeof (int32_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int32_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5 -echo "${ECHO_T}$ac_cv_type_int32_t" >&6 -if test $ac_cv_type_int32_t = yes; then +ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default" +if test "x$ac_cv_type_int32_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT32_T 1 @@ -21374,63 +13135,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint32_t" >&5 -echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint32_t *) 0) - return 0; -if (sizeof (uint32_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint32_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint32_t" >&6 -if test $ac_cv_type_uint32_t = yes; then +ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default" +if test "x$ac_cv_type_uint32_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT32_T 1 @@ -21438,63 +13144,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for intptr_t" >&5 -echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6 -if test "${ac_cv_type_intptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((intptr_t *) 0) - return 0; -if (sizeof (intptr_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_intptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_intptr_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_intptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_intptr_t" >&6 -if test $ac_cv_type_intptr_t = yes; then +ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default" +if test "x$ac_cv_type_intptr_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INTPTR_T 1 @@ -21502,63 +13153,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint_t" >&5 -echo $ECHO_N "checking for uint_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint_t *) 0) - return 0; -if (sizeof (uint_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint_t" >&6 -if test $ac_cv_type_uint_t = yes; then +ac_fn_c_check_type "$LINENO" "uint_t" "ac_cv_type_uint_t" "$ac_includes_default" +if test "x$ac_cv_type_uint_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT_T 1 @@ -21571,63 +13167,8 @@ fi # ==================== # uintptr type & sizes # ==================== - echo "$as_me:$LINENO: checking for uintptr_t" >&5 -echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6 -if test "${ac_cv_type_uintptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uintptr_t *) 0) - return 0; -if (sizeof (uintptr_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uintptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uintptr_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6 -if test $ac_cv_type_uintptr_t = yes; then + ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" +if test "x$ac_cv_type_uintptr_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINTPTR_T 1 @@ -21636,1663 +13177,141 @@ _ACEOF else -cat >>confdefs.h <<\_ACEOF -#define uintptr_t unsigned long -_ACEOF +$as_echo "#define uintptr_t unsigned long" >>confdefs.h fi - echo "$as_me:$LINENO: checking for char*" >&5 -echo $ECHO_N "checking for char*... $ECHO_C" >&6 -if test "${ac_cv_type_charp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char*" >&5 +$as_echo_n "checking size of char*... " >&6; } +if test "${ac_cv_sizeof_charp+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((char* *) 0) - return 0; -if (sizeof (char*)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_charp=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char*))" "ac_cv_sizeof_charp" "$ac_includes_default"; then : -ac_cv_type_charp=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_charp" >&5 -echo "${ECHO_T}$ac_cv_type_charp" >&6 - -echo "$as_me:$LINENO: checking size of char*" >&5 -echo $ECHO_N "checking size of char*... $ECHO_C" >&6 -if test "${ac_cv_sizeof_charp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_charp" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (char*) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_charp=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_charp" >&5 +$as_echo "$ac_cv_sizeof_charp" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_charp=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (char*)); } -unsigned long ulongval () { return (long) (sizeof (char*)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (char*))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (char*)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (char*)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_charp=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_charp=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_charp" >&5 -echo "${ECHO_T}$ac_cv_sizeof_charp" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_CHARP $ac_cv_sizeof_charp _ACEOF - echo "$as_me:$LINENO: checking for int" >&5 -echo $ECHO_N "checking for int... $ECHO_C" >&6 -if test "${ac_cv_type_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if test "${ac_cv_sizeof_int+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int *) 0) - return 0; -if (sizeof (int)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : -ac_cv_type_int=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 -echo "${ECHO_T}$ac_cv_type_int" >&6 - -echo "$as_me:$LINENO: checking size of int" >&5 -echo $ECHO_N "checking size of int... $ECHO_C" >&6 -if test "${ac_cv_sizeof_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (int) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_int=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_int=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (int)); } -unsigned long ulongval () { return (long) (sizeof (int)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (int))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_int=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF - echo "$as_me:$LINENO: checking for long" >&5 -echo $ECHO_N "checking for long... $ECHO_C" >&6 -if test "${ac_cv_type_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if test "${ac_cv_sizeof_long+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((long *) 0) - return 0; -if (sizeof (long)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : -ac_cv_type_long=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 -echo "${ECHO_T}$ac_cv_type_long" >&6 - -echo "$as_me:$LINENO: checking size of long" >&5 -echo $ECHO_N "checking size of long... $ECHO_C" >&6 -if test "${ac_cv_sizeof_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_long=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (long)); } -unsigned long ulongval () { return (long) (sizeof (long)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (long))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_long=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_long=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF - echo "$as_me:$LINENO: checking for short" >&5 -echo $ECHO_N "checking for short... $ECHO_C" >&6 -if test "${ac_cv_type_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if test "${ac_cv_sizeof_short+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((short *) 0) - return 0; -if (sizeof (short)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_short=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : -ac_cv_type_short=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 -echo "${ECHO_T}$ac_cv_type_short" >&6 - -echo "$as_me:$LINENO: checking size of short" >&5 -echo $ECHO_N "checking size of short... $ECHO_C" >&6 -if test "${ac_cv_sizeof_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_short" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (short) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_short=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_short=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (short)); } -unsigned long ulongval () { return (long) (sizeof (short)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (short))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (short)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (short)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_short=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_short=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 -echo "${ECHO_T}$ac_cv_sizeof_short" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF @@ -23302,72 +13321,43 @@ _ACEOF # ---------------------------------------------------------------------- # AC_CHECK_LIB for SVR4 libgen, and use it if it defines pathfind. # ---------------------------------------------------------------------- - -echo "$as_me:$LINENO: checking for pathfind in -lgen" >&5 -echo $ECHO_N "checking for pathfind in -lgen... $ECHO_C" >&6 -if test "${ac_cv_lib_gen_pathfind+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pathfind in -lgen" >&5 +$as_echo_n "checking for pathfind in -lgen... " >&6; } +if test "${ac_cv_lib_gen_pathfind+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char pathfind (); int main () { -pathfind (); +return pathfind (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_pathfind=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_gen_pathfind=no + ac_cv_lib_gen_pathfind=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_gen_pathfind" >&5 -echo "${ECHO_T}$ac_cv_lib_gen_pathfind" >&6 -if test $ac_cv_lib_gen_pathfind = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_pathfind" >&5 +$as_echo "$ac_cv_lib_gen_pathfind" >&6; } +if test "x$ac_cv_lib_gen_pathfind" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGEN 1 _ACEOF @@ -23376,200 +13366,18 @@ _ACEOF fi - -for ac_func in vprintf -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in vprintf +do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +if test "x$ac_cv_func_vprintf" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_VPRINTF 1 _ACEOF -echo "$as_me:$LINENO: checking for _doprnt" >&5 -echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6 -if test "${ac_cv_func__doprnt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define _doprnt to an innocuous variant, in case declares _doprnt. - For example, HP-UX 11i declares gettimeofday. */ -#define _doprnt innocuous__doprnt +ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = x""yes; then : -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char _doprnt (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef _doprnt - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char _doprnt (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub__doprnt) || defined (__stub____doprnt) -choke me -#else -char (*f) () = _doprnt; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != _doprnt; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func__doprnt=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func__doprnt=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 -echo "${ECHO_T}$ac_cv_func__doprnt" >&6 -if test $ac_cv_func__doprnt = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_DOPRNT 1 -_ACEOF +$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi @@ -23577,108 +13385,14 @@ fi done - - - - - - -for ac_func in mmap canonicalize_file_name snprintf strdup strchr strrchr -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in mmap canonicalize_file_name snprintf strdup strchr strrchr +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -23689,22 +13403,22 @@ fi # Check to see if a reg expr header is specified. -# Check whether --with-regex-header or --without-regex-header was given. -if test "${with_regex_header+set}" = set; then - withval="$with_regex_header" - libopts_cv_with_regex_header=${with_regex_header} +# Check whether --with-regex-header was given. +if test "${with_regex_header+set}" = set; then : + withval=$with_regex_header; libopts_cv_with_regex_header=${with_regex_header} else - echo "$as_me:$LINENO: checking whether a reg expr header is specified" >&5 -echo $ECHO_N "checking whether a reg expr header is specified... $ECHO_C" >&6 -if test "${libopts_cv_with_regex_header+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a reg expr header is specified" >&5 +$as_echo_n "checking whether a reg expr header is specified... " >&6; } +if test "${libopts_cv_with_regex_header+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_with_regex_header=no fi -echo "$as_me:$LINENO: result: $libopts_cv_with_regex_header" >&5 -echo "${ECHO_T}$libopts_cv_with_regex_header" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libopts_cv_with_regex_header" >&5 +$as_echo "$libopts_cv_with_regex_header" >&6; } -fi; # end of AC_ARG_WITH +fi + # end of AC_ARG_WITH if test "X${libopts_cv_with_regex_header}" != Xno then @@ -23714,9 +13428,7 @@ _ACEOF else -cat >>confdefs.h <<\_ACEOF -#define REGEX_HEADER -_ACEOF +$as_echo "#define REGEX_HEADER " >>confdefs.h fi @@ -23725,22 +13437,22 @@ _ACEOF # Check to see if a working libregex can be found. -# Check whether --with-libregex or --without-libregex was given. -if test "${with_libregex+set}" = set; then - withval="$with_libregex" - libopts_cv_with_libregex_root=${with_libregex} +# Check whether --with-libregex was given. +if test "${with_libregex+set}" = set; then : + withval=$with_libregex; libopts_cv_with_libregex_root=${with_libregex} else - echo "$as_me:$LINENO: checking whether with-libregex was specified" >&5 -echo $ECHO_N "checking whether with-libregex was specified... $ECHO_C" >&6 -if test "${libopts_cv_with_libregex_root+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether with-libregex was specified" >&5 +$as_echo_n "checking whether with-libregex was specified... " >&6; } +if test "${libopts_cv_with_libregex_root+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_with_libregex_root=no fi -echo "$as_me:$LINENO: result: $libopts_cv_with_libregex_root" >&5 -echo "${ECHO_T}$libopts_cv_with_libregex_root" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libopts_cv_with_libregex_root" >&5 +$as_echo "$libopts_cv_with_libregex_root" >&6; } -fi; # end of AC_ARG_WITH libregex +fi + # end of AC_ARG_WITH libregex if test "${with_libguile+set}" = set && \ test "${withval}" = no @@ -23751,40 +13463,40 @@ fi; # end of AC_ARG_WITH libregex else -# Check whether --with-libregex-cflags or --without-libregex-cflags was given. -if test "${with_libregex_cflags+set}" = set; then - withval="$with_libregex_cflags" - libopts_cv_with_libregex_cflags=${with_regex_cflags} +# Check whether --with-libregex-cflags was given. +if test "${with_libregex_cflags+set}" = set; then : + withval=$with_libregex_cflags; libopts_cv_with_libregex_cflags=${with_regex_cflags} else - echo "$as_me:$LINENO: checking whether with-libregex-cflags was specified" >&5 -echo $ECHO_N "checking whether with-libregex-cflags was specified... $ECHO_C" >&6 -if test "${libopts_cv_with_libregex_cflags+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether with-libregex-cflags was specified" >&5 +$as_echo_n "checking whether with-libregex-cflags was specified... " >&6; } +if test "${libopts_cv_with_libregex_cflags+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_with_libregex_cflags=no fi -echo "$as_me:$LINENO: result: $libopts_cv_with_libregex_cflags" >&5 -echo "${ECHO_T}$libopts_cv_with_libregex_cflags" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libopts_cv_with_libregex_cflags" >&5 +$as_echo "$libopts_cv_with_libregex_cflags" >&6; } -fi; # end of AC_ARG_WITH libregex-cflags +fi + # end of AC_ARG_WITH libregex-cflags -# Check whether --with-libregex-libs or --without-libregex-libs was given. -if test "${with_libregex_libs+set}" = set; then - withval="$with_libregex_libs" - libopts_cv_with_libregex_libs=${with_regex_libs} +# Check whether --with-libregex-libs was given. +if test "${with_libregex_libs+set}" = set; then : + withval=$with_libregex_libs; libopts_cv_with_libregex_libs=${with_regex_libs} else - echo "$as_me:$LINENO: checking whether with-libregex-libs was specified" >&5 -echo $ECHO_N "checking whether with-libregex-libs was specified... $ECHO_C" >&6 -if test "${libopts_cv_with_libregex_libs+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether with-libregex-libs was specified" >&5 +$as_echo_n "checking whether with-libregex-libs was specified... " >&6; } +if test "${libopts_cv_with_libregex_libs+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_with_libregex_libs=no fi -echo "$as_me:$LINENO: result: $libopts_cv_with_libregex_libs" >&5 -echo "${ECHO_T}$libopts_cv_with_libregex_libs" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libopts_cv_with_libregex_libs" >&5 +$as_echo "$libopts_cv_with_libregex_libs" >&6; } -fi; # end of AC_ARG_WITH libregex-libs +fi + # end of AC_ARG_WITH libregex-libs case "X${libopts_cv_with_libregex_cflags}" in Xyes|Xno|X ) @@ -23817,20 +13529,16 @@ fi; # end of AC_ARG_WITH libregex-libs esac LIBREGEX_CFLAGS="" LIBREGEX_LIBS="" - echo "$as_me:$LINENO: checking whether libregex functions properly" >&5 -echo $ECHO_N "checking whether libregex functions properly... $ECHO_C" >&6 - if test "${libopts_cv_with_libregex+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libregex functions properly" >&5 +$as_echo_n "checking whether libregex functions properly... " >&6; } + if test "${libopts_cv_with_libregex+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_with_libregex=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -23853,40 +13561,25 @@ int main() { } return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_with_libregex=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_with_libregex=no + libopts_cv_with_libregex=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of AC_TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of AC_TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_with_libregex - echo "$as_me:$LINENO: result: ${libopts_cv_with_libregex}" >&5 -echo "${ECHO_T}${libopts_cv_with_libregex}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_with_libregex}" >&5 +$as_echo "${libopts_cv_with_libregex}" >&6; } if test "X${libopts_cv_with_libregex}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define WITH_LIBREGEX 1 -_ACEOF +$as_echo "#define WITH_LIBREGEX 1" >>confdefs.h else CPPFLAGS="${libopts_save_CPPFLAGS}" @@ -23897,21 +13590,17 @@ _ACEOF # Check to see if pathfind(3) works. - echo "$as_me:$LINENO: checking whether pathfind(3) works" >&5 -echo $ECHO_N "checking whether pathfind(3) works... $ECHO_C" >&6 - if test "${libopts_cv_run_pathfind+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pathfind(3) works" >&5 +$as_echo_n "checking whether pathfind(3) works... " >&6; } + if test "${libopts_cv_run_pathfind+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_run_pathfind=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -23920,40 +13609,25 @@ int main (int argc, char** argv) { return (pz == 0) ? 1 : 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_run_pathfind=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_run_pathfind=no + libopts_cv_run_pathfind=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_run_pathfind - echo "$as_me:$LINENO: result: ${libopts_cv_run_pathfind}" >&5 -echo "${ECHO_T}${libopts_cv_run_pathfind}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_run_pathfind}" >&5 +$as_echo "${libopts_cv_run_pathfind}" >&6; } if test "X${libopts_cv_run_pathfind}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define HAVE_PATHFIND 1 -_ACEOF +$as_echo "#define HAVE_PATHFIND 1" >>confdefs.h fi @@ -23961,10 +13635,10 @@ _ACEOF # Check to see if /dev/zero is readable device. - echo "$as_me:$LINENO: checking whether /dev/zero is readable device" >&5 -echo $ECHO_N "checking whether /dev/zero is readable device... $ECHO_C" >&6 - if test "${libopts_cv_test_dev_zero+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether /dev/zero is readable device" >&5 +$as_echo_n "checking whether /dev/zero is readable device... " >&6; } + if test "${libopts_cv_test_dev_zero+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_test_dev_zero=`exec 2> /dev/null @@ -23979,15 +13653,13 @@ echo ${dzero}` fi # end of CACHE_VAL of libopts_cv_test_dev_zero - echo "$as_me:$LINENO: result: ${libopts_cv_test_dev_zero}" >&5 -echo "${ECHO_T}${libopts_cv_test_dev_zero}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_test_dev_zero}" >&5 +$as_echo "${libopts_cv_test_dev_zero}" >&6; } if test "X${libopts_cv_test_dev_zero}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define HAVE_DEV_ZERO 1 -_ACEOF +$as_echo "#define HAVE_DEV_ZERO 1" >>confdefs.h fi @@ -23995,21 +13667,17 @@ _ACEOF # Check to see if we have a functional realpath(3C). - echo "$as_me:$LINENO: checking whether we have a functional realpath(3C)" >&5 -echo $ECHO_N "checking whether we have a functional realpath(3C)... $ECHO_C" >&6 - if test "${libopts_cv_run_realpath+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we have a functional realpath(3C)" >&5 +$as_echo_n "checking whether we have a functional realpath(3C)... " >&6; } + if test "${libopts_cv_run_realpath+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_run_realpath=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -24023,40 +13691,25 @@ choke me!! return (pz == zPath) ? 0 : 1; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_run_realpath=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_run_realpath=no + libopts_cv_run_realpath=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_run_realpath - echo "$as_me:$LINENO: result: ${libopts_cv_run_realpath}" >&5 -echo "${ECHO_T}${libopts_cv_run_realpath}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_run_realpath}" >&5 +$as_echo "${libopts_cv_run_realpath}" >&6; } if test "X${libopts_cv_run_realpath}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define HAVE_REALPATH 1 -_ACEOF +$as_echo "#define HAVE_REALPATH 1" >>confdefs.h fi @@ -24064,21 +13717,17 @@ _ACEOF # Check to see if strftime() works. - echo "$as_me:$LINENO: checking whether strftime() works" >&5 -echo $ECHO_N "checking whether strftime() works... $ECHO_C" >&6 - if test "${libopts_cv_run_strftime+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strftime() works" >&5 +$as_echo_n "checking whether strftime() works... " >&6; } + if test "${libopts_cv_run_strftime+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_run_strftime=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -24098,40 +13747,25 @@ int main() { strftime( t_buf, sizeof( t_buf ), "%A %b %d %j", &tm ); return (strcmp( t_buf, z ) != 0); } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_run_strftime=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_run_strftime=no + libopts_cv_run_strftime=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_run_strftime - echo "$as_me:$LINENO: result: ${libopts_cv_run_strftime}" >&5 -echo "${ECHO_T}${libopts_cv_run_strftime}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_run_strftime}" >&5 +$as_echo "${libopts_cv_run_strftime}" >&6; } if test "X${libopts_cv_run_strftime}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define HAVE_STRFTIME 1 -_ACEOF +$as_echo "#define HAVE_STRFTIME 1" >>confdefs.h fi @@ -24139,67 +13773,46 @@ _ACEOF # Check to see if fopen accepts "b" mode. - echo "$as_me:$LINENO: checking whether fopen accepts \"b\" mode" >&5 -echo $ECHO_N "checking whether fopen accepts \"b\" mode... $ECHO_C" >&6 - if test "${libopts_cv_run_fopen_binary+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fopen accepts \"b\" mode" >&5 +$as_echo_n "checking whether fopen accepts \"b\" mode... " >&6; } + if test "${libopts_cv_run_fopen_binary+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_run_fopen_binary=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (int argc, char** argv) { FILE* fp = fopen("conftest.$ac_ext", "rb"); return (fp == NULL) ? 1 : fclose(fp); } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_run_fopen_binary=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_run_fopen_binary=no + libopts_cv_run_fopen_binary=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_run_fopen_binary - echo "$as_me:$LINENO: result: ${libopts_cv_run_fopen_binary}" >&5 -echo "${ECHO_T}${libopts_cv_run_fopen_binary}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_run_fopen_binary}" >&5 +$as_echo "${libopts_cv_run_fopen_binary}" >&6; } if test "X${libopts_cv_run_fopen_binary}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define FOPEN_BINARY_FLAG "b" -_ACEOF +$as_echo "#define FOPEN_BINARY_FLAG \"b\"" >>confdefs.h else -cat >>confdefs.h <<\_ACEOF -#define FOPEN_BINARY_FLAG "" -_ACEOF +$as_echo "#define FOPEN_BINARY_FLAG \"\"" >>confdefs.h fi @@ -24207,67 +13820,46 @@ _ACEOF # Check to see if fopen accepts "t" mode. - echo "$as_me:$LINENO: checking whether fopen accepts \"t\" mode" >&5 -echo $ECHO_N "checking whether fopen accepts \"t\" mode... $ECHO_C" >&6 - if test "${libopts_cv_run_fopen_text+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fopen accepts \"t\" mode" >&5 +$as_echo_n "checking whether fopen accepts \"t\" mode... " >&6; } + if test "${libopts_cv_run_fopen_text+set}" = set; then : + $as_echo_n "(cached) " >&6 else - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : libopts_cv_run_fopen_text=no else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (int argc, char** argv) { FILE* fp = fopen("conftest.$ac_ext", "rt"); return (fp == NULL) ? 1 : fclose(fp); } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_run "$LINENO"; then : libopts_cv_run_fopen_text=yes else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -libopts_cv_run_fopen_text=no + libopts_cv_run_fopen_text=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi # end of TRY_RUN +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + # end of TRY_RUN fi # end of AC_CACHE_VAL for libopts_cv_run_fopen_text - echo "$as_me:$LINENO: result: ${libopts_cv_run_fopen_text}" >&5 -echo "${ECHO_T}${libopts_cv_run_fopen_text}" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${libopts_cv_run_fopen_text}" >&5 +$as_echo "${libopts_cv_run_fopen_text}" >&6; } if test "X${libopts_cv_run_fopen_text}" != Xno then -cat >>confdefs.h <<\_ACEOF -#define FOPEN_TEXT_FLAG "t" -_ACEOF +$as_echo "#define FOPEN_TEXT_FLAG \"t\"" >>confdefs.h else -cat >>confdefs.h <<\_ACEOF -#define FOPEN_TEXT_FLAG "" -_ACEOF +$as_echo "#define FOPEN_TEXT_FLAG \"\"" >>confdefs.h fi @@ -24275,29 +13867,27 @@ _ACEOF # Check to see if not wanting optional option args. - # Check whether --enable-optional-args or --disable-optional-args was given. -if test "${enable_optional_args+set}" = set; then - enableval="$enable_optional_args" - libopts_cv_enable_optional_args=${enable_optional_args} + # Check whether --enable-optional-args was given. +if test "${enable_optional_args+set}" = set; then : + enableval=$enable_optional_args; libopts_cv_enable_optional_args=${enable_optional_args} else - echo "$as_me:$LINENO: checking whether not wanting optional option args" >&5 -echo $ECHO_N "checking whether not wanting optional option args... $ECHO_C" >&6 -if test "${libopts_cv_enable_optional_args+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether not wanting optional option args" >&5 +$as_echo_n "checking whether not wanting optional option args... " >&6; } +if test "${libopts_cv_enable_optional_args+set}" = set; then : + $as_echo_n "(cached) " >&6 else libopts_cv_enable_optional_args=yes fi -echo "$as_me:$LINENO: result: $libopts_cv_enable_optional_args" >&5 -echo "${ECHO_T}$libopts_cv_enable_optional_args" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libopts_cv_enable_optional_args" >&5 +$as_echo "$libopts_cv_enable_optional_args" >&6; } -fi; # end of AC_ARG_ENABLE +fi + # end of AC_ARG_ENABLE if test "X${libopts_cv_enable_optional_args}" = Xno then -cat >>confdefs.h <<\_ACEOF -#define NO_OPTIONAL_OPT_ARGS 1 -_ACEOF +$as_echo "#define NO_OPTIONAL_OPT_ARGS 1" >>confdefs.h fi @@ -24310,16 +13900,12 @@ if test X${INVOKE_LIBOPTS_MACROS_FIRST_done} != Xyes ; then # ================= # AC_HEADER_STDC # ================= - echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -24334,51 +13920,23 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no + ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -24388,18 +13946,14 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -24409,16 +13963,13 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include +#include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) @@ -24438,65 +13989,41 @@ main () for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); + return 2; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -ac_cv_header_stdc=no +else + ac_cv_header_stdc=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + fi fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # ================= # AC_HEADER_DIRENT # ================= - - - - - -ac_header_dirent=no + ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - as_ac_Header=`echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_hdr that defines DIR" >&5 -echo $ECHO_N "checking for $ac_hdr that defines DIR... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 +$as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> @@ -24510,42 +14037,20 @@ return 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_Header=no" + eval "$as_ac_Header=no" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -if test `eval echo '${'$as_ac_Header'}'` = yes; then +eval ac_res=\$$as_ac_Header + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break @@ -24554,256 +14059,116 @@ fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then - echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -ac_cv_search_opendir=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char opendir (); int main () { -opendir (); +return opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_opendir" = no; then - for ac_lib in dir; do +for ac_lib in '' dir; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break +fi +done +if test "${ac_cv_search_opendir+set}" = set; then : -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="-l$ac_lib" -break else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done + ac_cv_search_opendir=no fi +rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6 -if test "$ac_cv_search_opendir" != no; then - test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else - echo "$as_me:$LINENO: checking for library containing opendir" >&5 -echo $ECHO_N "checking for library containing opendir... $ECHO_C" >&6 -if test "${ac_cv_search_opendir+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 +$as_echo_n "checking for library containing opendir... " >&6; } +if test "${ac_cv_search_opendir+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS -ac_cv_search_opendir=no -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char opendir (); int main () { -opendir (); +return opendir (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="none required" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -if test "$ac_cv_search_opendir" = no; then - for ac_lib in x; do +for ac_lib in '' x; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_opendir=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_opendir+set}" = set; then : + break +fi +done +if test "${ac_cv_search_opendir+set}" = set; then : -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char opendir (); -int -main () -{ -opendir (); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_search_opendir="-l$ac_lib" -break else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - done + ac_cv_search_opendir=no fi +rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_search_opendir" >&5 -echo "${ECHO_T}$ac_cv_search_opendir" >&6 -if test "$ac_cv_search_opendir" != no; then - test "$ac_cv_search_opendir" = "none required" || LIBS="$ac_cv_search_opendir $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 +$as_echo "$ac_cv_search_opendir" >&6; } +ac_res=$ac_cv_search_opendir +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi @@ -24813,172 +14178,17 @@ fi # ================= # AC_CHECK_HEADERS # ================= - - - - - - - - - - - - - - - - - - - - -for ac_header in dlfcn.h errno.h fcntl.h libgen.h memory.h netinet/in.h \ + for ac_header in dlfcn.h errno.h fcntl.h libgen.h memory.h netinet/in.h \ setjmp.h sys/mman.h sys/param.h sys/poll.h sys/procset.h sys/select.h \ sys/socket.h sys/stropts.h sys/time.h sys/un.h sys/wait.h unistd.h \ utime.h sysexits.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -24993,160 +14203,21 @@ done string errno stdlib memory setjmp do eval as_ac_var=\${ac_cv_header_${f}_h+set} test "${as_ac_var}" = set || \ - { { echo "$as_me:$LINENO: error: You must have ${f}.h on your system" >&5 -echo "$as_me: error: You must have ${f}.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have ${f}.h on your system" "$LINENO" 5 done # ================================================ # AC_CHECK_HEADERS: stdarg.h is present define HAVE_STDARG_H, otherwise # if varargs.h is present define HAVE_VARARGS_H. # ================================================ - - -for ac_header in stdarg.h varargs.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in stdarg.h varargs.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -25154,159 +14225,20 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have stdarg.h or varargs.h on your system" >&5 -echo "$as_me: error: You must have stdarg.h or varargs.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have stdarg.h or varargs.h on your system" "$LINENO" 5 fi # ================================================ # Similarly for the string.h and strings.h headers # ================================================ - - -for ac_header in string.h strings.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in string.h strings.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -25314,160 +14246,20 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have string.h or strings.h on your system" >&5 -echo "$as_me: error: You must have string.h or strings.h on your system" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have string.h or strings.h on your system" "$LINENO" 5 fi # ===================== # ...and limits headers # ===================== - - - -for ac_header in limits.h sys/limits.h values.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in limits.h sys/limits.h values.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi @@ -25475,222 +14267,28 @@ fi done if test `eval echo '${'$as_ac_Header'}'` != yes; then - { { echo "$as_me:$LINENO: error: You must have one of limits.h, sys/limits.h or values.h" >&5 -echo "$as_me: error: You must have one of limits.h, sys/limits.h or values.h" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "You must have one of limits.h, sys/limits.h or values.h" "$LINENO" 5 fi # ======================== # ...and int types headers # ======================== - - -for ac_header in stdint.h inttypes.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then + for ac_header in stdint.h inttypes.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF break fi done - echo "$as_me:$LINENO: checking for int8_t" >&5 -echo $ECHO_N "checking for int8_t... $ECHO_C" >&6 -if test "${ac_cv_type_int8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int8_t *) 0) - return 0; -if (sizeof (int8_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int8_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int8_t" >&5 -echo "${ECHO_T}$ac_cv_type_int8_t" >&6 -if test $ac_cv_type_int8_t = yes; then + ac_fn_c_check_type "$LINENO" "int8_t" "ac_cv_type_int8_t" "$ac_includes_default" +if test "x$ac_cv_type_int8_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT8_T 1 @@ -25698,63 +14296,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint8_t" >&5 -echo $ECHO_N "checking for uint8_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint8_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint8_t *) 0) - return 0; -if (sizeof (uint8_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint8_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint8_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint8_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint8_t" >&6 -if test $ac_cv_type_uint8_t = yes; then +ac_fn_c_check_type "$LINENO" "uint8_t" "ac_cv_type_uint8_t" "$ac_includes_default" +if test "x$ac_cv_type_uint8_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT8_T 1 @@ -25762,63 +14305,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for int16_t" >&5 -echo $ECHO_N "checking for int16_t... $ECHO_C" >&6 -if test "${ac_cv_type_int16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int16_t *) 0) - return 0; -if (sizeof (int16_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int16_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int16_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int16_t" >&5 -echo "${ECHO_T}$ac_cv_type_int16_t" >&6 -if test $ac_cv_type_int16_t = yes; then +ac_fn_c_check_type "$LINENO" "int16_t" "ac_cv_type_int16_t" "$ac_includes_default" +if test "x$ac_cv_type_int16_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT16_T 1 @@ -25826,63 +14314,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint16_t" >&5 -echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint16_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint16_t *) 0) - return 0; -if (sizeof (uint16_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint16_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint16_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint16_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint16_t" >&6 -if test $ac_cv_type_uint16_t = yes; then +ac_fn_c_check_type "$LINENO" "uint16_t" "ac_cv_type_uint16_t" "$ac_includes_default" +if test "x$ac_cv_type_uint16_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT16_T 1 @@ -25890,63 +14323,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for int32_t" >&5 -echo $ECHO_N "checking for int32_t... $ECHO_C" >&6 -if test "${ac_cv_type_int32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int32_t *) 0) - return 0; -if (sizeof (int32_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_int32_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5 -echo "${ECHO_T}$ac_cv_type_int32_t" >&6 -if test $ac_cv_type_int32_t = yes; then +ac_fn_c_check_type "$LINENO" "int32_t" "ac_cv_type_int32_t" "$ac_includes_default" +if test "x$ac_cv_type_int32_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INT32_T 1 @@ -25954,63 +14332,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint32_t" >&5 -echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint32_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint32_t *) 0) - return 0; -if (sizeof (uint32_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint32_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint32_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint32_t" >&6 -if test $ac_cv_type_uint32_t = yes; then +ac_fn_c_check_type "$LINENO" "uint32_t" "ac_cv_type_uint32_t" "$ac_includes_default" +if test "x$ac_cv_type_uint32_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT32_T 1 @@ -26018,63 +14341,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for intptr_t" >&5 -echo $ECHO_N "checking for intptr_t... $ECHO_C" >&6 -if test "${ac_cv_type_intptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((intptr_t *) 0) - return 0; -if (sizeof (intptr_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_intptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_intptr_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_intptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_intptr_t" >&6 -if test $ac_cv_type_intptr_t = yes; then +ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default" +if test "x$ac_cv_type_intptr_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INTPTR_T 1 @@ -26082,63 +14350,8 @@ _ACEOF fi -echo "$as_me:$LINENO: checking for uint_t" >&5 -echo $ECHO_N "checking for uint_t... $ECHO_C" >&6 -if test "${ac_cv_type_uint_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uint_t *) 0) - return 0; -if (sizeof (uint_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uint_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uint_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uint_t" >&5 -echo "${ECHO_T}$ac_cv_type_uint_t" >&6 -if test $ac_cv_type_uint_t = yes; then +ac_fn_c_check_type "$LINENO" "uint_t" "ac_cv_type_uint_t" "$ac_includes_default" +if test "x$ac_cv_type_uint_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINT_T 1 @@ -26151,63 +14364,8 @@ fi # ==================== # uintptr type & sizes # ==================== - echo "$as_me:$LINENO: checking for uintptr_t" >&5 -echo $ECHO_N "checking for uintptr_t... $ECHO_C" >&6 -if test "${ac_cv_type_uintptr_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((uintptr_t *) 0) - return 0; -if (sizeof (uintptr_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_uintptr_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_uintptr_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_uintptr_t" >&5 -echo "${ECHO_T}$ac_cv_type_uintptr_t" >&6 -if test $ac_cv_type_uintptr_t = yes; then + ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" +if test "x$ac_cv_type_uintptr_t" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UINTPTR_T 1 @@ -26216,1663 +14374,141 @@ _ACEOF else -cat >>confdefs.h <<\_ACEOF -#define uintptr_t unsigned long -_ACEOF +$as_echo "#define uintptr_t unsigned long" >>confdefs.h fi - echo "$as_me:$LINENO: checking for char*" >&5 -echo $ECHO_N "checking for char*... $ECHO_C" >&6 -if test "${ac_cv_type_charp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of char*" >&5 +$as_echo_n "checking size of char*... " >&6; } +if test "${ac_cv_sizeof_charp+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((char* *) 0) - return 0; -if (sizeof (char*)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_charp=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (char*))" "ac_cv_sizeof_charp" "$ac_includes_default"; then : -ac_cv_type_charp=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_charp" >&5 -echo "${ECHO_T}$ac_cv_type_charp" >&6 - -echo "$as_me:$LINENO: checking size of char*" >&5 -echo $ECHO_N "checking size of char*... $ECHO_C" >&6 -if test "${ac_cv_sizeof_charp+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_charp" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (char*) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_charp=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_charp" >&5 +$as_echo "$ac_cv_sizeof_charp" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (char*))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_charp=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (char*)); } -unsigned long ulongval () { return (long) (sizeof (char*)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (char*))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (char*)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (char*)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_charp=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (char*), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_charp=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_charp" >&5 -echo "${ECHO_T}$ac_cv_sizeof_charp" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_CHARP $ac_cv_sizeof_charp _ACEOF - echo "$as_me:$LINENO: checking for int" >&5 -echo $ECHO_N "checking for int... $ECHO_C" >&6 -if test "${ac_cv_type_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if test "${ac_cv_sizeof_int+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((int *) 0) - return 0; -if (sizeof (int)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_int=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : -ac_cv_type_int=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5 -echo "${ECHO_T}$ac_cv_type_int" >&6 - -echo "$as_me:$LINENO: checking size of int" >&5 -echo $ECHO_N "checking size of int... $ECHO_C" >&6 -if test "${ac_cv_sizeof_int+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_int" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (int) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_int=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_int=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (int)); } -unsigned long ulongval () { return (long) (sizeof (int)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (int))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (int)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_int=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (int), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_int=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5 -echo "${ECHO_T}$ac_cv_sizeof_int" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_INT $ac_cv_sizeof_int _ACEOF - echo "$as_me:$LINENO: checking for long" >&5 -echo $ECHO_N "checking for long... $ECHO_C" >&6 -if test "${ac_cv_type_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if test "${ac_cv_sizeof_long+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((long *) 0) - return 0; -if (sizeof (long)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_long=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : -ac_cv_type_long=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5 -echo "${ECHO_T}$ac_cv_type_long" >&6 - -echo "$as_me:$LINENO: checking size of long" >&5 -echo $ECHO_N "checking size of long... $ECHO_C" >&6 -if test "${ac_cv_sizeof_long+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_long" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (long) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_long=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_long=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (long)); } -unsigned long ulongval () { return (long) (sizeof (long)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (long))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (long)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_long=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (long), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_long=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5 -echo "${ECHO_T}$ac_cv_sizeof_long" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_LONG $ac_cv_sizeof_long _ACEOF - echo "$as_me:$LINENO: checking for short" >&5 -echo $ECHO_N "checking for short... $ECHO_C" >&6 -if test "${ac_cv_type_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + # The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if test "${ac_cv_sizeof_short+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((short *) 0) - return 0; -if (sizeof (short)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_short=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : -ac_cv_type_short=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5 -echo "${ECHO_T}$ac_cv_type_short" >&6 - -echo "$as_me:$LINENO: checking size of short" >&5 -echo $ECHO_N "checking size of short... $ECHO_C" >&6 -if test "${ac_cv_sizeof_short+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 else if test "$ac_cv_type_short" = yes; then - # The cast to unsigned long works around a bug in the HP C Compiler - # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects - # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. - # This bug is HP SR number 8606223364. - if test "$cross_compiling" = yes; then - # Depending upon the size, compute the lo and hi bounds. -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=0 ac_mid=0 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_lo=`expr $ac_mid + 1` - if test $ac_lo -le $ac_mid; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid + 1` + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ as_fn_set_status 77 +as_fn_error "cannot compute sizeof (short) +See \`config.log' for more details." "$LINENO" 5; }; } + else + ac_cv_sizeof_short=0 + fi fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=-1 ac_mid=-1 - while :; do - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)]; -test_array [0] = 0 - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_lo=$ac_mid; break -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_hi=`expr '(' $ac_mid ')' - 1` - if test $ac_mid -le $ac_hi; then - ac_lo= ac_hi= - break - fi - ac_mid=`expr 2 '*' $ac_mid` fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext - done -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } -ac_lo= ac_hi= -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -# Binary search between lo and hi bounds. -while test "x$ac_lo" != "x$ac_hi"; do - ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo` - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)]; -test_array [0] = 0 - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_hi=$ac_mid -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 -ac_lo=`expr '(' $ac_mid ')' + 1` -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -done -case $ac_lo in -?*) ac_cv_sizeof_short=$ac_lo;; -'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } ;; -esac -else - if test "$cross_compiling" = yes; then - { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot run test program while cross compiling -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -long longval () { return (long) (sizeof (short)); } -unsigned long ulongval () { return (long) (sizeof (short)); } -#include -#include -int -main () -{ - - FILE *f = fopen ("conftest.val", "w"); - if (! f) - exit (1); - if (((long) (sizeof (short))) < 0) - { - long i = longval (); - if (i != ((long) (sizeof (short)))) - exit (1); - fprintf (f, "%ld\n", i); - } - else - { - unsigned long i = ulongval (); - if (i != ((long) (sizeof (short)))) - exit (1); - fprintf (f, "%lu\n", i); - } - exit (ferror (f) || fclose (f) != 0); - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_sizeof_short=`cat conftest.val` -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&5 -echo "$as_me: error: cannot compute sizeof (short), 77 -See \`config.log' for more details." >&2;} - { (exit 1); exit 1; }; } -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -rm -f conftest.val -else - ac_cv_sizeof_short=0 -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5 -echo "${ECHO_T}$ac_cv_sizeof_short" >&6 cat >>confdefs.h <<_ACEOF #define SIZEOF_SHORT $ac_cv_sizeof_short _ACEOF @@ -27882,72 +14518,43 @@ _ACEOF # ---------------------------------------------------------------------- # AC_CHECK_LIB for SVR4 libgen, and use it if it defines pathfind. # ---------------------------------------------------------------------- - -echo "$as_me:$LINENO: checking for pathfind in -lgen" >&5 -echo $ECHO_N "checking for pathfind in -lgen... $ECHO_C" >&6 -if test "${ac_cv_lib_gen_pathfind+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pathfind in -lgen" >&5 +$as_echo_n "checking for pathfind in -lgen... " >&6; } +if test "${ac_cv_lib_gen_pathfind+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgen $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char pathfind (); int main () { -pathfind (); +return pathfind (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gen_pathfind=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_gen_pathfind=no + ac_cv_lib_gen_pathfind=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_gen_pathfind" >&5 -echo "${ECHO_T}$ac_cv_lib_gen_pathfind" >&6 -if test $ac_cv_lib_gen_pathfind = yes; then +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gen_pathfind" >&5 +$as_echo "$ac_cv_lib_gen_pathfind" >&6; } +if test "x$ac_cv_lib_gen_pathfind" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGEN 1 _ACEOF @@ -27956,200 +14563,18 @@ _ACEOF fi - -for ac_func in vprintf -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in vprintf +do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +if test "x$ac_cv_func_vprintf" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_VPRINTF 1 _ACEOF -echo "$as_me:$LINENO: checking for _doprnt" >&5 -echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6 -if test "${ac_cv_func__doprnt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define _doprnt to an innocuous variant, in case declares _doprnt. - For example, HP-UX 11i declares gettimeofday. */ -#define _doprnt innocuous__doprnt +ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = x""yes; then : -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char _doprnt (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef _doprnt - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char _doprnt (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub__doprnt) || defined (__stub____doprnt) -choke me -#else -char (*f) () = _doprnt; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != _doprnt; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func__doprnt=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func__doprnt=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 -echo "${ECHO_T}$ac_cv_func__doprnt" >&6 -if test $ac_cv_func__doprnt = yes; then - -cat >>confdefs.h <<\_ACEOF -#define HAVE_DOPRNT 1 -_ACEOF +$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi @@ -28157,108 +14582,14 @@ fi done - - - - - - -for ac_func in mmap canonicalize_file_name snprintf strdup strchr strrchr -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then + for ac_func in mmap canonicalize_file_name snprintf strdup strchr strrchr +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi @@ -28270,13 +14601,9 @@ fi # end of AC_DEFUN of LIBOPTS_CHECK -echo "$as_me:$LINENO: checking if $CC can handle #warning" >&5 -echo $ECHO_N "checking if $CC can handle #warning... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC can handle #warning" >&5 +$as_echo_n "checking if $CC can handle #warning... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -28287,64 +14614,88 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_cpp_warning=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_cpp_warning=no + ac_cv_cpp_warning=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_cv_cpp_warning" >&5 -echo "${ECHO_T}$ac_cv_cpp_warning" >&6 +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cpp_warning" >&5 +$as_echo "$ac_cv_cpp_warning" >&6; } case "$ac_cv_cpp_warning" in no) -cat >>confdefs.h <<\_ACEOF -#define NO_OPTION_NAME_WARNINGS 1 -_ACEOF +$as_echo "#define NO_OPTION_NAME_WARNINGS 1" >>confdefs.h - echo "$as_me:$LINENO: result: Enabling NO_OPTION_NAME_WARNINGS as #warning does not work" >&5 -echo "${ECHO_T}Enabling NO_OPTION_NAME_WARNINGS as #warning does not work" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling NO_OPTION_NAME_WARNINGS as #warning does not work" >&5 +$as_echo "Enabling NO_OPTION_NAME_WARNINGS as #warning does not work" >&6; } ;; esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if test "${ac_cv_c_inline+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + + +case "$ac_cv_c_inline" in + '') + ;; + *) + +$as_echo "#define HAVE_INLINE 1" >>confdefs.h + + +esac + + # Checks for libraries. # Checks for header files. -echo "$as_me:$LINENO: checking for ANSI C header files" >&5 -echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 -if test "${ac_cv_header_stdc+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -28359,51 +14710,23 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_stdc=no + ac_cv_header_stdc=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then - : + $EGREP "memchr" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -28413,18 +14736,14 @@ fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then - : + $EGREP "free" >/dev/null 2>&1; then : + else ac_cv_header_stdc=no fi @@ -28434,16 +14753,13 @@ fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then + if test "$cross_compiling" = yes; then : : else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include +#include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) @@ -28463,199 +14779,37 @@ main () for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) - exit(2); - exit (0); + return 2; + return 0; } _ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - : -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +if ac_fn_c_try_run "$LINENO"; then : -( exit $ac_status ) -ac_cv_header_stdc=no +else + ac_cv_header_stdc=no fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + fi fi -fi -echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 -echo "${ECHO_T}$ac_cv_header_stdc" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then -cat >>confdefs.h <<\_ACEOF -#define STDC_HEADERS 1 -_ACEOF +$as_echo "#define STDC_HEADERS 1" >>confdefs.h fi - - - - - - - - - - - - for ac_header in arpa/inet.h fcntl.h float.h limits.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h syslog.h unistd.h -do -as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -else - # Is the header compilable? -echo "$as_me:$LINENO: checking $ac_header usability" >&5 -echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -#include <$ac_header> -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_header_compiler=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_header_compiler=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 -echo "${ECHO_T}$ac_header_compiler" >&6 - -# Is the header present? -echo "$as_me:$LINENO: checking $ac_header presence" >&5 -echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include <$ac_header> -_ACEOF -if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 - (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } >/dev/null; then - if test -s conftest.err; then - ac_cpp_err=$ac_c_preproc_warn_flag - ac_cpp_err=$ac_cpp_err$ac_c_werror_flag - else - ac_cpp_err= - fi -else - ac_cpp_err=yes -fi -if test -z "$ac_cpp_err"; then - ac_header_preproc=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_header_preproc=no -fi -rm -f conftest.err conftest.$ac_ext -echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 -echo "${ECHO_T}$ac_header_preproc" >&6 - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in - yes:no: ) - { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 -echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} - ac_header_preproc=yes - ;; - no:yes:* ) - { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 -echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 -echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 -echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 -echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 -echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} - { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 -echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} - ( - cat <<\_ASBOX -## ------------------------------------------ ## -## Report this to the AC_PACKAGE_NAME lists. ## -## ------------------------------------------ ## -_ASBOX - ) | - sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac -echo "$as_me:$LINENO: checking for $ac_header" >&5 -echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 -if eval "test \"\${$as_ac_Header+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - eval "$as_ac_Header=\$ac_header_preproc" -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 - -fi -if test `eval echo '${'$as_ac_Header'}'` = yes; then +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi @@ -28664,16 +14818,12 @@ done # Checks for typedefs, structures, and compiler characteristics. -echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5 -echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6 -if test "${ac_cv_c_const+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 +$as_echo_n "checking for an ANSI C-conforming const... " >&6; } +if test "${ac_cv_c_const+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int @@ -28683,10 +14833,10 @@ main () #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; - const charset x; + const charset cs; /* SunOS 4.1.1 cc rejects this. */ - char const *const *ccp; - char **p; + char const *const *pcpcc; + char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; @@ -28695,16 +14845,17 @@ main () an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; - ccp = &g + (g ? g-g : 0); + pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ - ++ccp; - p = (char**) ccp; - ccp = (char const *const *) p; + ++pcpcc; + ppc = (char**) pcpcc; + pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; + if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; @@ -28723,130 +14874,47 @@ main () } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; + if (!foo) return 0; } + return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_c_const=no + ac_cv_c_const=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5 -echo "${ECHO_T}$ac_cv_c_const" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 +$as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then -cat >>confdefs.h <<\_ACEOF -#define const -_ACEOF +$as_echo "#define const /**/" >>confdefs.h fi -echo "$as_me:$LINENO: checking for size_t" >&5 -echo $ECHO_N "checking for size_t... $ECHO_C" >&6 -if test "${ac_cv_type_size_t+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ -if ((size_t *) 0) - return 0; -if (sizeof (size_t)) - return 0; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_size_t=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = x""yes; then : -ac_cv_type_size_t=no -fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5 -echo "${ECHO_T}$ac_cv_type_size_t" >&6 -if test $ac_cv_type_size_t = yes; then - : else cat >>confdefs.h <<_ACEOF -#define size_t unsigned +#define size_t unsigned int _ACEOF fi -echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5 -echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6 -if test "${ac_cv_header_time+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 +$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } +if test "${ac_cv_header_time+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -28861,57 +14929,27 @@ return 0; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_header_time=no + ac_cv_header_time=no fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5 -echo "${ECHO_T}$ac_cv_header_time" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 +$as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then -cat >>confdefs.h <<\_ACEOF -#define TIME_WITH_SYS_TIME 1 -_ACEOF +$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5 -echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6 -if test "${ac_cv_struct_tm+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 +$as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; } +if test "${ac_cv_struct_tm+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include @@ -28919,64 +14957,36 @@ cat >>conftest.$ac_ext <<_ACEOF int main () { -struct tm *tp; tp->tm_sec; +struct tm tm; + int *p = &tm.tm_sec; + return !p; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_struct_tm=time.h else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_struct_tm=sys/time.h + ac_cv_struct_tm=sys/time.h fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5 -echo "${ECHO_T}$ac_cv_struct_tm" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_struct_tm" >&5 +$as_echo "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then -cat >>confdefs.h <<\_ACEOF -#define TM_IN_SYS_TIME 1 -_ACEOF +$as_echo "#define TM_IN_SYS_TIME 1" >>confdefs.h fi -echo "$as_me:$LINENO: checking for ss_family field in struct sockaddr_storage" >&5 -echo $ECHO_N "checking for ss_family field in struct sockaddr_storage... $ECHO_C" >&6 -if test "${ac_cv_have_ss_family_in_struct_ss+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ss_family field in struct sockaddr_storage" >&5 +$as_echo_n "checking for ss_family field in struct sockaddr_storage... " >&6; } +if test "${ac_cv_have_ss_family_in_struct_ss+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -28990,61 +15000,31 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_ss_family_in_struct_ss="yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_have_ss_family_in_struct_ss="no" + ac_cv_have_ss_family_in_struct_ss="no" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have_ss_family_in_struct_ss" >&5 -echo "${ECHO_T}$ac_cv_have_ss_family_in_struct_ss" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_ss_family_in_struct_ss" >&5 +$as_echo "$ac_cv_have_ss_family_in_struct_ss" >&6; } case "$ac_cv_have_ss_family_in_struct_ss" in yes) -cat >>confdefs.h <<\_ACEOF -#define HAVE_SS_FAMILY_IN_SS 1 -_ACEOF +$as_echo "#define HAVE_SS_FAMILY_IN_SS 1" >>confdefs.h ;; esac -echo "$as_me:$LINENO: checking for __ss_family field in struct sockaddr_storage" >&5 -echo $ECHO_N "checking for __ss_family field in struct sockaddr_storage... $ECHO_C" >&6 -if test "${ac_cv_have___ss_family_in_struct_ss+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __ss_family field in struct sockaddr_storage" >&5 +$as_echo_n "checking for __ss_family field in struct sockaddr_storage... " >&6; } +if test "${ac_cv_have___ss_family_in_struct_ss+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include @@ -29058,47 +15038,21 @@ main () return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then +if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have___ss_family_in_struct_ss="yes" else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_cv_have___ss_family_in_struct_ss="no" + ac_cv_have___ss_family_in_struct_ss="no" fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_have___ss_family_in_struct_ss" >&5 -echo "${ECHO_T}$ac_cv_have___ss_family_in_struct_ss" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have___ss_family_in_struct_ss" >&5 +$as_echo "$ac_cv_have___ss_family_in_struct_ss" >&6; } case "$ac_cv_have___ss_family_in_struct_ss" in yes) -cat >>confdefs.h <<\_ACEOF -#define HAVE___SS_FAMILY_IN_SS 1 -_ACEOF +$as_echo "#define HAVE___SS_FAMILY_IN_SS 1" >>confdefs.h ;; esac @@ -29119,1164 +15073,275 @@ _ACEOF esac # Checks for library functions. -echo "$as_me:$LINENO: checking for working memcmp" >&5 -echo $ECHO_N "checking for working memcmp... $ECHO_C" >&6 -if test "${ac_cv_func_memcmp_working+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - if test "$cross_compiling" = yes; then - ac_cv_func_memcmp_working=no -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -$ac_includes_default -int -main () -{ - - /* Some versions of memcmp are not 8-bit clean. */ - char c0 = 0x40, c1 = 0x80, c2 = 0x81; - if (memcmp(&c0, &c2, 1) >= 0 || memcmp(&c1, &c2, 1) >= 0) - exit (1); - - /* The Next x86 OpenStep bug shows up only when comparing 16 bytes - or more and with at least one buffer not starting on a 4-byte boundary. - William Lewis provided this test program. */ - { - char foo[21]; - char bar[21]; - int i; - for (i = 0; i < 4; i++) - { - char *a = foo + i; - char *b = bar + i; - strcpy (a, "--------01111111"); - strcpy (b, "--------10000000"); - if (memcmp (a, b, 16) >= 0) - exit (1); - } - exit (0); - } - - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_memcmp_working=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -ac_cv_func_memcmp_working=no -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi -fi -echo "$as_me:$LINENO: result: $ac_cv_func_memcmp_working" >&5 -echo "${ECHO_T}$ac_cv_func_memcmp_working" >&6 -test $ac_cv_func_memcmp_working = no && case $LIBOBJS in - "memcmp.$ac_objext" | \ - *" memcmp.$ac_objext" | \ - "memcmp.$ac_objext "* | \ - *" memcmp.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS memcmp.$ac_objext" ;; -esac - - -echo "$as_me:$LINENO: checking for function prototypes" >&5 -echo $ECHO_N "checking for function prototypes... $ECHO_C" >&6 -if test "$ac_cv_prog_cc_stdc" != no; then - echo "$as_me:$LINENO: result: yes" >&5 -echo "${ECHO_T}yes" >&6 - -cat >>confdefs.h <<\_ACEOF -#define PROTOTYPES 1 -_ACEOF - - -cat >>confdefs.h <<\_ACEOF -#define __PROTOTYPES 1 -_ACEOF - -else - echo "$as_me:$LINENO: result: no" >&5 -echo "${ECHO_T}no" >&6 -fi - -echo "$as_me:$LINENO: checking whether setvbuf arguments are reversed" >&5 -echo $ECHO_N "checking whether setvbuf arguments are reversed... $ECHO_C" >&6 -if test "${ac_cv_func_setvbuf_reversed+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +#AC_FUNC_MEMCMP dnl HMS: we don't have a memcmp.c to use here, so why bother? +if test "${ac_cv_func_setvbuf_reversed+set}" = set; then : + $as_echo_n "(cached) " >&6 else ac_cv_func_setvbuf_reversed=no - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -# if PROTOTYPES - int (setvbuf) (FILE *, int, char *, size_t); -# endif -int -main () -{ -char buf; return setvbuf (stdout, _IOLBF, &buf, 1); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -# if PROTOTYPES - int (setvbuf) (FILE *, int, char *, size_t); -# endif -int -main () -{ -char buf; return setvbuf (stdout, &buf, _IOLBF, 1); - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - # It compiles and links either way, so it must not be declared - # with a prototype and most likely this is a K&R C compiler. - # Try running it. - if test "$cross_compiling" = yes; then - : # Assume setvbuf is not reversed when cross-compiling. +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 +$as_echo_n "checking return type of signal handlers... " >&6; } +if test "${ac_cv_type_signal+set}" = set; then : + $as_echo_n "(cached) " >&6 else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -#include -int -main () -{ -/* This call has the arguments reversed. - A reversed system may check and see that the address of buf - is not _IOLBF, _IONBF, or _IOFBF, and return nonzero. */ - char buf; - if (setvbuf (stdout, _IOLBF, &buf, 1) != 0) - exit (1); - putchar ('\r'); - exit (0); /* Non-reversed systems SEGV here. */ - ; - return 0; -} -_ACEOF -rm -f conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && { ac_try='./conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_setvbuf_reversed=yes -else - echo "$as_me: program exited with status $ac_status" >&5 -echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -( exit $ac_status ) -rm -f core *.core -fi -rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext -fi - ac_cv_func_setvbuf_reversed=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_setvbuf_reversed" >&5 -echo "${ECHO_T}$ac_cv_func_setvbuf_reversed" >&6 -if test $ac_cv_func_setvbuf_reversed = yes; then - -cat >>confdefs.h <<\_ACEOF -#define SETVBUF_REVERSED 1 -_ACEOF - -fi - -echo "$as_me:$LINENO: checking return type of signal handlers" >&5 -echo $ECHO_N "checking return type of signal handlers... $ECHO_C" >&6 -if test "${ac_cv_type_signal+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include -#ifdef signal -# undef signal -#endif -#ifdef __cplusplus -extern "C" void (*signal (int, void (*)(int)))(int); -#else -void (*signal ()) (); -#endif int main () { -int i; +return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_type_signal=void +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_type_signal=int else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_type_signal=int + ac_cv_type_signal=void fi -rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi -echo "$as_me:$LINENO: result: $ac_cv_type_signal" >&5 -echo "${ECHO_T}$ac_cv_type_signal" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 +$as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF - for ac_func in alarm -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "alarm" "ac_cv_func_alarm" +if test "x$ac_cv_func_alarm" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_ALARM 1 _ACEOF fi done -echo "$as_me:$LINENO: checking for gethostent" >&5 -echo $ECHO_N "checking for gethostent... $ECHO_C" >&6 -if test "${ac_cv_func_gethostent+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 +ac_fn_c_check_func "$LINENO" "gethostent" "ac_cv_func_gethostent" +if test "x$ac_cv_func_gethostent" = x""yes; then : + else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostent" >&5 +$as_echo_n "checking for library containing gethostent... " >&6; } +if test "${ac_cv_search_gethostent+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Define gethostent to an innocuous variant, in case declares gethostent. - For example, HP-UX 11i declares gettimeofday. */ -#define gethostent innocuous_gethostent -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char gethostent (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef gethostent - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -char gethostent (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_gethostent) || defined (__stub___gethostent) -choke me -#else -char (*f) () = gethostent; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != gethostent; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_func_gethostent=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_func_gethostent=no -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_func_gethostent" >&5 -echo "${ECHO_T}$ac_cv_func_gethostent" >&6 -if test $ac_cv_func_gethostent = yes; then - : -else - -echo "$as_me:$LINENO: checking for gethostent in -lnsl" >&5 -echo $ECHO_N "checking for gethostent in -lnsl... $ECHO_C" >&6 -if test "${ac_cv_lib_nsl_gethostent+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lnsl -lsocket $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -/* Override any gcc2 internal prototype to avoid an error. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char gethostent (); int main () { -gethostent (); +return gethostent (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_nsl_gethostent=yes +for ac_lib in '' nsl; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib -lsocket $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_gethostent=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_gethostent+set}" = set; then : + break +fi +done +if test "${ac_cv_search_gethostent+set}" = set; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_nsl_gethostent=no + ac_cv_search_gethostent=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostent" >&5 -echo "${ECHO_T}$ac_cv_lib_nsl_gethostent" >&6 -if test $ac_cv_lib_nsl_gethostent = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBNSL 1 -_ACEOF - - LIBS="-lnsl $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostent" >&5 +$as_echo "$ac_cv_search_gethostent" >&6; } +ac_res=$ac_cv_search_gethostent +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi - - - for ac_func in gettimeofday inet_ntoa memset -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done - for ac_func in socket -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "socket" "ac_cv_func_socket" +if test "x$ac_cv_func_socket" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_SOCKET 1 _ACEOF else - -echo "$as_me:$LINENO: checking for socket in -lsocket" >&5 -echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6 -if test "${ac_cv_lib_socket_socket+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 +$as_echo_n "checking for library containing socket... " >&6; } +if test "${ac_cv_search_socket+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsocket $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char socket (); int main () { -socket (); +return socket (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_socket_socket=yes +for ac_lib in '' socket; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_socket=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_socket+set}" = set; then : + break +fi +done +if test "${ac_cv_search_socket+set}" = set; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_socket_socket=no + ac_cv_search_socket=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5 -echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6 -if test $ac_cv_lib_socket_socket = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBSOCKET 1 -_ACEOF - - LIBS="-lsocket $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 +$as_echo "$ac_cv_search_socket" >&6; } +ac_res=$ac_cv_search_socket +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi done - for ac_func in sqrt -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "sqrt" "ac_cv_func_sqrt" +if test "x$ac_cv_func_sqrt" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_SQRT 1 _ACEOF else - -echo "$as_me:$LINENO: checking for sqrt in -lm" >&5 -echo $ECHO_N "checking for sqrt in -lm... $ECHO_C" >&6 -if test "${ac_cv_lib_m_sqrt+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing sqrt" >&5 +$as_echo_n "checking for library containing sqrt... " >&6; } +if test "${ac_cv_search_sqrt+set}" = set; then : + $as_echo_n "(cached) " >&6 else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lm $LIBS" -cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any gcc2 internal prototype to avoid an error. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char sqrt (); int main () { -sqrt (); +return sqrt (); ; return 0; } _ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_lib_m_sqrt=yes +for ac_lib in '' m; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_sqrt=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if test "${ac_cv_search_sqrt+set}" = set; then : + break +fi +done +if test "${ac_cv_search_sqrt+set}" = set; then : + else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_lib_m_sqrt=no + ac_cv_search_sqrt=no fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS fi -echo "$as_me:$LINENO: result: $ac_cv_lib_m_sqrt" >&5 -echo "${ECHO_T}$ac_cv_lib_m_sqrt" >&6 -if test $ac_cv_lib_m_sqrt = yes; then - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBM 1 -_ACEOF - - LIBS="-lm $LIBS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_sqrt" >&5 +$as_echo "$ac_cv_search_sqrt" >&6; } +ac_res=$ac_cv_search_sqrt +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi done - for ac_func in strrchr -do -as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` -echo "$as_me:$LINENO: checking for $ac_func" >&5 -echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 -if eval "test \"\${$as_ac_var+set}\" = set"; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ -/* Define $ac_func to an innocuous variant, in case declares $ac_func. - For example, HP-UX 11i declares gettimeofday. */ -#define $ac_func innocuous_$ac_func - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $ac_func (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $ac_func - -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $ac_func (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$ac_func) || defined (__stub___$ac_func) -choke me -#else -char (*f) () = $ac_func; -#endif -#ifdef __cplusplus -} -#endif - -int -main () -{ -return f != $ac_func; - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext conftest$ac_exeext -if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 - (eval $ac_link) 2>conftest.er1 - ac_status=$? - grep -v '^ *+' conftest.er1 >conftest.err - rm -f conftest.er1 - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -z "$ac_c_werror_flag" - || test ! -s conftest.err' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; } && - { ac_try='test -s conftest$ac_exeext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - eval "$as_ac_var=yes" -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -eval "$as_ac_var=no" -fi -rm -f conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 -echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 -if test `eval echo '${'$as_ac_var'}'` = yes; then +do : + ac_fn_c_check_func "$LINENO" "strrchr" "ac_cv_func_strrchr" +if test "x$ac_cv_func_strrchr" = x""yes; then : cat >>confdefs.h <<_ACEOF -#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define HAVE_STRRCHR 1 _ACEOF fi @@ -30300,16 +15365,16 @@ case "$host" in ;; esac -echo "$as_me:$LINENO: checking for bin subdirectory" >&5 -echo $ECHO_N "checking for bin subdirectory... $ECHO_C" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for bin subdirectory" >&5 +$as_echo_n "checking for bin subdirectory... " >&6; } -# Check whether --with-binsubdir or --without-binsubdir was given. -if test "${with_binsubdir+set}" = set; then - withval="$with_binsubdir" - use_binsubdir="$withval" +# Check whether --with-binsubdir was given. +if test "${with_binsubdir+set}" = set; then : + withval=$with_binsubdir; use_binsubdir="$withval" else use_binsubdir="bin" -fi; +fi + case "$use_binsubdir" in bin) @@ -30317,17 +15382,15 @@ case "$use_binsubdir" in sbin) ;; *) - { { echo "$as_me:$LINENO: error: <$use_binsubdir> is illegal - must be \"bin\" or \"sbin\"" >&5 -echo "$as_me: error: <$use_binsubdir> is illegal - must be \"bin\" or \"sbin\"" >&2;} - { (exit 1); exit 1; }; } + as_fn_error "<$use_binsubdir> is illegal - must be \"bin\" or \"sbin\"" "$LINENO" 5 ;; esac -echo "$as_me:$LINENO: result: $use_binsubdir" >&5 -echo "${ECHO_T}$use_binsubdir" >&6 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_binsubdir" >&5 +$as_echo "$use_binsubdir" >&6; } BINSUBDIR=$use_binsubdir - ac_config_files="$ac_config_files Makefile" +ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure @@ -30347,39 +15410,59 @@ _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. +# So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. -{ +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \). + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; + ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n \ - "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; - esac; -} | + esac | + sort +) | sed ' + /^ac_cv_env_/b end t clear - : clear + :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end - /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - : end' >>confcache -if diff $cache_file confcache >/dev/null 2>&1; then :; else - if test -w $cache_file; then - test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else - echo "not updating unwritable cache $cache_file" + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -30388,80 +15471,57 @@ test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/; -s/:*\${srcdir}:*/:/; -s/:*@srcdir@:*/:/; -s/^\([^=]*=[ ]*\):*/\1/; -s/:*$//; -s/^[^=]*=[ ]*$//; -}' -fi - DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. - ac_i=`echo "$ac_i" | - sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Add them. - ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } -fi -if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${INSTALL_LIBOPTS_TRUE}" && test -z "${INSTALL_LIBOPTS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"INSTALL_LIBOPTS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"INSTALL_LIBOPTS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"INSTALL_LIBOPTS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NEED_LIBOPTS_TRUE}" && test -z "${NEED_LIBOPTS_FALSE}"; then - { { echo "$as_me:$LINENO: error: conditional \"NEED_LIBOPTS\" was never defined. -Usually this means the macro was only invoked conditionally." >&5 -echo "$as_me: error: conditional \"NEED_LIBOPTS\" was never defined. -Usually this means the macro was only invoked conditionally." >&2;} - { (exit 1); exit 1; }; } + as_fn_error "conditional \"NEED_LIBOPTS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : ${CONFIG_STATUS=./config.status} +ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 -echo "$as_me: creating $CONFIG_STATUS" >&6;} -cat >$CONFIG_STATUS <<_ACEOF +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. @@ -30471,81 +15531,252 @@ cat >$CONFIG_STATUS <<_ACEOF debug=false ac_cs_recheck=false ac_cs_silent=false + SHELL=\${CONFIG_SHELL-$SHELL} -_ACEOF +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## -cat >>$CONFIG_STATUS <<\_ACEOF -## --------------------- ## -## M4sh Initialization. ## -## --------------------- ## - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: - # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' -elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then - set -o posix -fi -DUALCASE=1; export DUALCASE # for MKS sh - -# Support unset when possible. -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - as_unset=unset + setopt NO_GLOB_SUBST else - as_unset=false + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac fi -# Work around bugs in pre-3.0 UWIN ksh. -$as_unset ENV MAIL MAILPATH +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. -for as_var in \ - LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ - LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ - LC_TELEPHONE LC_TIME -do - if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then - eval $as_var=C; export $as_var - else - $as_unset $as_var - fi -done +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE -# Required to use basename. -if expr a : '\(a\)' >/dev/null 2>&1; then +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error ERROR [LINENO LOG_FD] +# --------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with status $?, using 1 if that was 0. +as_fn_error () +{ + as_status=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi -if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi -# Name of the executable. -as_me=`$as_basename "$0" || +as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)$' \| \ - . : '\(.\)' 2>/dev/null || -echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } - /^X\/\(\/\/\)$/{ s//\1/; q; } - /^X\/\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` - -# PATH needs CR, and LINENO needs CR and PATH. # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' @@ -30553,148 +15784,123 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - echo "#! /bin/sh" >conf$$.sh - echo "exit 0" >>conf$$.sh - chmod +x conf$$.sh - if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then - PATH_SEPARATOR=';' - else - PATH_SEPARATOR=: - fi - rm -f conf$$.sh -fi - - - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" || { - # Find who we are. Look in the path if we contain no path at all - # relative or not. - case $0 in - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break -done - - ;; - esac - # We did not find ourselves, most probably we were run as `sh COMMAND' - # in which case we are not to be found in the path. - if test "x$as_myself" = x; then - as_myself=$0 - fi - if test ! -f "$as_myself"; then - { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 -echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} - { (exit 1); exit 1; }; } - fi - case $CONFIG_SHELL in - '') - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for as_base in sh bash ksh sh5; do - case $as_dir in - /*) - if ("$as_dir/$as_base" -c ' - as_lineno_1=$LINENO - as_lineno_2=$LINENO - as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` - test "x$as_lineno_1" != "x$as_lineno_2" && - test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then - $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } - $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } - CONFIG_SHELL=$as_dir/$as_base - export CONFIG_SHELL - exec "$CONFIG_SHELL" "$0" ${1+"$@"} - fi;; - esac - done -done -;; - esac - - # Create $as_me.lineno as a copy of $as_myself, but with $LINENO - # uniformly replaced by the line number. The first 'sed' inserts a - # line-number line before each line; the second 'sed' does the real - # work. The second script uses 'N' to pair each line-number line - # with the numbered line, and appends trailing '-' during - # substitution so that $LINENO is not a special case at line end. - # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the - # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) - sed '=' <$as_myself | - sed ' - N - s,$,-, - : loop - s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, - t loop - s,-$,, - s,^['$as_cr_digits']*\n,, - ' >$as_me.lineno && - chmod +x $as_me.lineno || - { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 -echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} - { (exit 1); exit 1; }; } - - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensible to this). - . ./$as_me.lineno - # Exit status is that of the last command. - exit -} - - -case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in - *c*,-n*) ECHO_N= ECHO_C=' -' ECHO_T=' ' ;; - *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; - *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; esac -if expr a : '\(a\)' >/dev/null 2>&1; then - as_expr=expr -else - as_expr=false -fi - rm -f conf$$ conf$$.exe conf$$.file -echo >conf$$.file -if ln -s conf$$.file conf$$ 2>/dev/null; then - # We could just check for DJGPP; but this test a) works b) is more generic - # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). - if test -f conf$$.exe; then - # Don't use ln at all; we don't have any links - as_ln_s='cp -p' - else +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' fi -elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln else as_ln_s='cp -p' fi -rm -f conf$$ conf$$.exe conf$$.file +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + + +} # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then - as_mkdir_p=: + as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi -as_executable_p="test -f" +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" @@ -30703,31 +15909,20 @@ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -# IFS -# We need space, tab and new line, in precisely that order. -as_nl=' -' -IFS=" $as_nl" - -# CDPATH. -$as_unset CDPATH - exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 -# Open the log real soon, to keep \$[0] and so on meaningful, and to +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. Logging --version etc. is OK. -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX -} >&5 -cat >&5 <<_CSEOF - +# values after options handling. +ac_log=" This file was extended by $as_me, which was -generated by GNU Autoconf 2.59. Invocation command line was +generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -30735,45 +15930,47 @@ generated by GNU Autoconf 2.59. Invocation command line was CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ -_CSEOF -echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 -echo >&5 +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + _ACEOF +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. -if test -n "$ac_config_files"; then - echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS -fi +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" -if test -n "$ac_config_headers"; then - echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_links"; then - echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS -fi - -if test -n "$ac_config_commands"; then - echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS -fi - -cat >>$CONFIG_STATUS <<\_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ -\`$as_me' instantiates files from templates according to the -current configuration. +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. -Usage: $0 [OPTIONS] [FILE]... +Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE Configuration files: $config_files @@ -30784,84 +15981,86 @@ $config_headers Configuration commands: $config_commands -Report bugs to ." -_ACEOF +Report bugs to the package provider." -cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status -configured by $0, generated by GNU Autoconf 2.59, - with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" -Copyright (C) 2003 Free Software Foundation, Inc. +Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." -srcdir=$srcdir -INSTALL="$INSTALL" + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -# If no file are specified by the user, then we need to provide default -# value. By we need to know if files were specified by the user. +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) - ac_option=`expr "x$1" : 'x\([^=]*\)='` - ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; - -*) + *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; - *) # This is not an option, so the user has probably given explicit - # arguments. - ac_option=$1 - ac_need_defaults=false;; esac case $ac_option in # Handling of the options. -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; - --version | --vers* | -V ) - echo "$ac_cs_version"; exit 0 ;; - --he | --h) - # Conflict between --help and --header - { { echo "$as_me:$LINENO: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: ambiguous option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; };; - --help | --hel | -h ) - echo "$ac_cs_usage"; exit 0 ;; - --debug | --d* | -d ) + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift - CONFIG_FILES="$CONFIG_FILES $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift - CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. - -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&5 -echo "$as_me: error: unrecognized option: $1 -Try \`$0 --help' for more information." >&2;} - { (exit 1); exit 1; }; } ;; + -*) as_fn_error "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; - *) ac_config_targets="$ac_config_targets $1" ;; + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; esac shift @@ -30875,40 +16074,52 @@ if $ac_cs_silent; then fi _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then - echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 - exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" fi _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 -cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # -# INIT-COMMANDS section. +# INIT-COMMANDS # - AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF +# Handling of arguments. for ac_config_target in $ac_config_targets do - case "$ac_config_target" in - # Handling of arguments. - "libopts/Makefile" ) CONFIG_FILES="$CONFIG_FILES libopts/Makefile" ;; - "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; - "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 -echo "$as_me: error: invalid argument: $ac_config_target" >&2;} - { (exit 1); exit 1; }; };; + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libopts/Makefile") CONFIG_FILES="$CONFIG_FILES libopts/Makefile" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done + # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely @@ -30920,842 +16131,680 @@ if $ac_need_defaults; then fi # Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason to put it here, and in addition, +# simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. -# Create a temporary directory, and hook for its removal unless debugging. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. $debug || { - trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 - trap '{ (exit 1); exit 1; }' 1 2 13 15 + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 } - # Create a (secure) tmp directory for tmp files. { - tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { - tmp=./confstat$$-$RANDOM - (umask 077 && mkdir $tmp) -} || + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + { - echo "$me: cannot create a temporary directory in ." >&2 - { (exit 1); exit 1; } + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi -# -# CONFIG_FILES section. -# - -# No need to generate the scripts if there are no CONFIG_FILES. -# This happens for instance when ./config.status config.h -if test -n "\$CONFIG_FILES"; then - # Protect against being on the right side of a sed subst in config.status. - sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; - s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF -s,@SHELL@,$SHELL,;t t -s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t -s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t -s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t -s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t -s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t -s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t -s,@exec_prefix@,$exec_prefix,;t t -s,@prefix@,$prefix,;t t -s,@program_transform_name@,$program_transform_name,;t t -s,@bindir@,$bindir,;t t -s,@sbindir@,$sbindir,;t t -s,@libexecdir@,$libexecdir,;t t -s,@datadir@,$datadir,;t t -s,@sysconfdir@,$sysconfdir,;t t -s,@sharedstatedir@,$sharedstatedir,;t t -s,@localstatedir@,$localstatedir,;t t -s,@libdir@,$libdir,;t t -s,@includedir@,$includedir,;t t -s,@oldincludedir@,$oldincludedir,;t t -s,@infodir@,$infodir,;t t -s,@mandir@,$mandir,;t t -s,@build_alias@,$build_alias,;t t -s,@host_alias@,$host_alias,;t t -s,@target_alias@,$target_alias,;t t -s,@DEFS@,$DEFS,;t t -s,@ECHO_C@,$ECHO_C,;t t -s,@ECHO_N@,$ECHO_N,;t t -s,@ECHO_T@,$ECHO_T,;t t -s,@LIBS@,$LIBS,;t t -s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t -s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t -s,@INSTALL_DATA@,$INSTALL_DATA,;t t -s,@CYGPATH_W@,$CYGPATH_W,;t t -s,@PACKAGE@,$PACKAGE,;t t -s,@VERSION@,$VERSION,;t t -s,@ACLOCAL@,$ACLOCAL,;t t -s,@AUTOCONF@,$AUTOCONF,;t t -s,@AUTOMAKE@,$AUTOMAKE,;t t -s,@AUTOHEADER@,$AUTOHEADER,;t t -s,@MAKEINFO@,$MAKEINFO,;t t -s,@install_sh@,$install_sh,;t t -s,@STRIP@,$STRIP,;t t -s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t -s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t -s,@mkdir_p@,$mkdir_p,;t t -s,@AWK@,$AWK,;t t -s,@SET_MAKE@,$SET_MAKE,;t t -s,@am__leading_dot@,$am__leading_dot,;t t -s,@AMTAR@,$AMTAR,;t t -s,@am__tar@,$am__tar,;t t -s,@am__untar@,$am__untar,;t t -s,@build@,$build,;t t -s,@build_cpu@,$build_cpu,;t t -s,@build_vendor@,$build_vendor,;t t -s,@build_os@,$build_os,;t t -s,@host@,$host,;t t -s,@host_cpu@,$host_cpu,;t t -s,@host_vendor@,$host_vendor,;t t -s,@host_os@,$host_os,;t t -s,@CC@,$CC,;t t -s,@CFLAGS@,$CFLAGS,;t t -s,@LDFLAGS@,$LDFLAGS,;t t -s,@CPPFLAGS@,$CPPFLAGS,;t t -s,@ac_ct_CC@,$ac_ct_CC,;t t -s,@EXEEXT@,$EXEEXT,;t t -s,@OBJEXT@,$OBJEXT,;t t -s,@DEPDIR@,$DEPDIR,;t t -s,@am__include@,$am__include,;t t -s,@am__quote@,$am__quote,;t t -s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t -s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t -s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t -s,@CCDEPMODE@,$CCDEPMODE,;t t -s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t -s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t -s,@EGREP@,$EGREP,;t t -s,@LN_S@,$LN_S,;t t -s,@ECHO@,$ECHO,;t t -s,@AR@,$AR,;t t -s,@ac_ct_AR@,$ac_ct_AR,;t t -s,@RANLIB@,$RANLIB,;t t -s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t -s,@CPP@,$CPP,;t t -s,@CXX@,$CXX,;t t -s,@CXXFLAGS@,$CXXFLAGS,;t t -s,@ac_ct_CXX@,$ac_ct_CXX,;t t -s,@CXXDEPMODE@,$CXXDEPMODE,;t t -s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t -s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t -s,@CXXCPP@,$CXXCPP,;t t -s,@F77@,$F77,;t t -s,@FFLAGS@,$FFLAGS,;t t -s,@ac_ct_F77@,$ac_ct_F77,;t t -s,@LIBTOOL@,$LIBTOOL,;t t -s,@LIBOPTS_DIR@,$LIBOPTS_DIR,;t t -s,@INSTALL_LIBOPTS_TRUE@,$INSTALL_LIBOPTS_TRUE,;t t -s,@INSTALL_LIBOPTS_FALSE@,$INSTALL_LIBOPTS_FALSE,;t t -s,@NEED_LIBOPTS_TRUE@,$NEED_LIBOPTS_TRUE,;t t -s,@NEED_LIBOPTS_FALSE@,$NEED_LIBOPTS_FALSE,;t t -s,@LIBOPTS_LDADD@,$LIBOPTS_LDADD,;t t -s,@LIBOPTS_CFLAGS@,$LIBOPTS_CFLAGS,;t t -s,@LIBOBJS@,$LIBOBJS,;t t -s,@BINSUBDIR@,$BINSUBDIR,;t t -s,@LTLIBOBJS@,$LTLIBOBJS,;t t -CEOF - -_ACEOF - - cat >>$CONFIG_STATUS <<\_ACEOF - # Split the substitutions into bite-sized pieces for seds with - # small command number limits, like on Digital OSF/1 and HP-UX. - ac_max_sed_lines=48 - ac_sed_frag=1 # Number of current file. - ac_beg=1 # First line for current file. - ac_end=$ac_max_sed_lines # Line after last line for current file. - ac_more_lines=: - ac_sed_cmds= - while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - else - sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag - fi - if test ! -s $tmp/subs.frag; then - ac_more_lines=false - else - # The purpose of the label and of the branching condition is to - # speed up the sed processing (if there are no `@' at all, there - # is no need to browse any of the substitutions). - # These are the two extra sed commands mentioned above. - (echo ':t - /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" - else - ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" - fi - ac_sed_frag=`expr $ac_sed_frag + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_lines` - fi - done - if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat - fi +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF -for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; esac - # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. - ac_dir=`(dirname "$ac_file") 2>/dev/null || + ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix case $srcdir in - .) # No --srcdir option. We are building in place. + .) # We are building in place. ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac + case $ac_mode in + :F) + # + # CONFIG_FILE + # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac - - if test x"$ac_file" != x-; then - { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - rm -f "$ac_file" - fi - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - configure_input= - else - configure_input="$ac_file. " - fi - configure_input=$configure_input"Generated from `echo $ac_file_in | - sed 's,.*/,,'` by configure." - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } _ACEOF -cat >>$CONFIG_STATUS <<_ACEOF - sed "$ac_vpsub + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub $extrasub _ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s,@configure_input@,$configure_input,;t t -s,@srcdir@,$ac_srcdir,;t t -s,@abs_srcdir@,$ac_abs_srcdir,;t t -s,@top_srcdir@,$ac_top_srcdir,;t t -s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t -s,@builddir@,$ac_builddir,;t t -s,@abs_builddir@,$ac_abs_builddir,;t t -s,@top_builddir@,$ac_top_builddir,;t t -s,@abs_top_builddir@,$ac_abs_top_builddir,;t t -s,@INSTALL@,$ac_INSTALL,;t t -" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out - rm -f $tmp/stdin - if test x"$ac_file" != x-; then - mv $tmp/out $ac_file - else - cat $tmp/out - rm -f $tmp/out - fi +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} -# -# CONFIG_HEADER section. -# - -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='[ ].*$,\1#\2' -ac_dC=' ' -ac_dD=',;t' -# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='$,\1#\2define\3' -ac_uC=' ' -ac_uD=',;t' - -for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + rm -f "$tmp/stdin" case $ac_file in - - | *:- | *:-:* ) # input from stdin - cat >$tmp/stdin - ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; - * ) ac_file_in=$ac_file.in ;; - esac - - test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 -echo "$as_me: creating $ac_file" >&6;} - - # First look for the input files in the build tree, otherwise in the - # src tree. - ac_file_inputs=`IFS=: - for f in $ac_file_in; do - case $f in - -) echo $tmp/stdin ;; - [\\/$]*) - # Absolute (can't be DOS-style, as IFS=:) - test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - # Do quote $f, to prevent DOS paths from being IFS'd. - echo "$f";; - *) # Relative - if test -f "$f"; then - # Build tree - echo "$f" - elif test -f "$srcdir/$f"; then - # Source tree - echo "$srcdir/$f" - else - # /dev/null tree - { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 -echo "$as_me: error: cannot find input file: $f" >&2;} - { (exit 1); exit 1; }; } - fi;; - esac - done` || { (exit 1); exit 1; } - # Remove the trailing spaces. - sed 's/[ ]*$//' $ac_file_inputs >$tmp/in - -_ACEOF - -# Transform confdefs.h into two sed scripts, `conftest.defines' and -# `conftest.undefs', that substitutes the proper values into -# config.h.in to produce config.h. The first handles `#define' -# templates, and the second `#undef' templates. -# And first: Protect against being on the right side of a sed subst in -# config.status. Protect against being in an unquoted here document -# in config.status. -rm -f conftest.defines conftest.undefs -# Using a here document instead of a string reduces the quoting nightmare. -# Putting comments in sed scripts is not portable. -# -# `end' is used to avoid that the second main sed command (meant for -# 0-ary CPP macros) applies to n-ary macro definitions. -# See the Autoconf documentation for `clear'. -cat >confdef2sed.sed <<\_ACEOF -s/[\\&,]/\\&/g -s,[\\$`],\\&,g -t clear -: clear -s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp -t end -s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp -: end -_ACEOF -# If some macros were called several times there might be several times -# the same #defines, which is useless. Nevertheless, we may not want to -# sort them, since we want the *last* AC-DEFINE to be honored. -uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines -sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs -rm -f confdef2sed.sed - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >>conftest.undefs <<\_ACEOF -s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, -_ACEOF - -# Break up conftest.defines because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS -echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS -echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS -echo ' :' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.defines >/dev/null -do - # Write a limited-size here document to $tmp/defines.sed. - echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#define' lines. - echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/defines.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail - rm -f conftest.defines - mv conftest.tail conftest.defines -done -rm -f conftest.defines -echo ' fi # grep' >>$CONFIG_STATUS -echo >>$CONFIG_STATUS - -# Break up conftest.undefs because some shells have a limit on the size -# of here documents, and old seds have small limits too (100 cmds). -echo ' # Handle all the #undef templates' >>$CONFIG_STATUS -rm -f conftest.tail -while grep . conftest.undefs >/dev/null -do - # Write a limited-size here document to $tmp/undefs.sed. - echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS - # Speed up: don't consider the non `#undef' - echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS - # Work around the forget-to-reset-the-flag bug. - echo 't clr' >>$CONFIG_STATUS - echo ': clr' >>$CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS - echo 'CEOF - sed -f $tmp/undefs.sed $tmp/in >$tmp/out - rm -f $tmp/in - mv $tmp/out $tmp/in -' >>$CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail - rm -f conftest.undefs - mv conftest.tail conftest.undefs -done -rm -f conftest.undefs - -cat >>$CONFIG_STATUS <<\_ACEOF - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - if test x"$ac_file" = x-; then - echo "/* Generated by configure. */" >$tmp/config.h - else - echo "/* $ac_file. Generated by configure. */" >$tmp/config.h - fi - cat $tmp/in >>$tmp/config.h - rm -f $tmp/in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # if test x"$ac_file" != x-; then - if diff $ac_file $tmp/config.h >/dev/null 2>&1; then - { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 -echo "$as_me: $ac_file is unchanged" >&6;} + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} else - ac_dir=`(dirname "$ac_file") 2>/dev/null || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - rm -f $ac_file - mv $tmp/config.h $ac_file + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else - cat $tmp/config.h - rm -f $tmp/config.h + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 fi -# Compute $ac_file's index in $config_headers. +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in - $ac_file | $ac_file:* ) + $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done -echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || -$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X$ac_file : 'X\(//\)[^/]' \| \ - X$ac_file : 'X\(//\)$' \| \ - X$ac_file : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X$ac_file | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'`/stamp-h$_am_stamp_count -done -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; -# -# CONFIG_COMMANDS section. -# -for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue - ac_dest=`echo "$ac_file" | sed 's,:.*,,'` - ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` - ac_dir=`(dirname "$ac_dest") 2>/dev/null || -$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_dest" : 'X\(//\)[^/]' \| \ - X"$ac_dest" : 'X\(//\)$' \| \ - X"$ac_dest" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$ac_dest" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p "$ac_dir" - else - as_dir="$ac_dir" - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 -echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} - { (exit 1); exit 1; }; }; } - - ac_builddir=. - -if test "$ac_dir" != .; then - ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` - # A "../" for each directory in $ac_dir_suffix. - ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` -else - ac_dir_suffix= ac_top_builddir= -fi - -case $srcdir in - .) # No --srcdir option. We are building in place. - ac_srcdir=. - if test -z "$ac_top_builddir"; then - ac_top_srcdir=. - else - ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` - fi ;; - [\\/]* | ?:[\\/]* ) # Absolute path. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir ;; - *) # Relative path. - ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_builddir$srcdir ;; -esac - -# Do not use `cd foo && pwd` to compute absolute paths, because -# the directories may not exist. -case `pwd` in -.) ac_abs_builddir="$ac_dir";; -*) - case "$ac_dir" in - .) ac_abs_builddir=`pwd`;; - [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; - *) ac_abs_builddir=`pwd`/"$ac_dir";; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_builddir=${ac_top_builddir}.;; -*) - case ${ac_top_builddir}. in - .) ac_abs_top_builddir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; - *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_srcdir=$ac_srcdir;; -*) - case $ac_srcdir in - .) ac_abs_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; - *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; - esac;; -esac -case $ac_abs_builddir in -.) ac_abs_top_srcdir=$ac_top_srcdir;; -*) - case $ac_top_srcdir in - .) ac_abs_top_srcdir=$ac_abs_builddir;; - [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; - *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; - esac;; -esac + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac - { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 -echo "$as_me: executing $ac_dest commands" >&6;} - case $ac_dest in - depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named `Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # So let's grep whole file. - if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then - dirpart=`(dirname "$mf") 2>/dev/null || + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running `make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # When using ansi2knr, U may be empty or an underscore; expand it - U=`sed -n 's/^U = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`(dirname "$file") 2>/dev/null || + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` - { if $as_mkdir_p; then - mkdir -p $dirpart/$fdir - else - as_dir=$dirpart/$fdir - as_dirs= - while test ! -d "$as_dir"; do - as_dirs="$as_dir $as_dirs" - as_dir=`(dirname "$as_dir") 2>/dev/null || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| \ - . : '\(.\)' 2>/dev/null || -echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } - /^X\(\/\/\)[^/].*/{ s//\1/; q; } - /^X\(\/\/\)$/{ s//\1/; q; } - /^X\(\/\).*/{ s//\1/; q; } - s/.*/./; q'` + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" done - test ! -n "$as_dirs" || mkdir $as_dirs - fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 -echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} - { (exit 1); exit 1; }; }; } - - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" done -done +} ;; + esac -done -_ACEOF +done # for ac_tag -cat >>$CONFIG_STATUS <<\_ACEOF -{ (exit 0); exit 0; } +as_fn_exit 0 _ACEOF -chmod +x $CONFIG_STATUS ac_clean_files=$ac_clean_files_save +test $ac_write_fail = 0 || + as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. @@ -31775,6 +16824,10 @@ if test "$no_create" != yes; then exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || { (exit 1); exit 1; } + $ac_cs_success || as_fn_exit $? +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi diff --git a/contrib/ntp/sntp/configure.ac b/contrib/ntp/sntp/configure.ac index 5cc52b12db9..be6943ff9d4 100644 --- a/contrib/ntp/sntp/configure.ac +++ b/contrib/ntp/sntp/configure.ac @@ -12,6 +12,9 @@ AC_PROG_CC # It's a small library - we might as well use a static version of it. AC_DISABLE_SHARED +m4_defun([_LT_AC_LANG_CXX_CONFIG], [:]) +m4_defun([_LT_AC_LANG_F77_CONFIG], [:]) + AC_PROG_LIBTOOL # NTP has (so far) been relying on leading-edge autogen. @@ -40,6 +43,17 @@ case "$ac_cv_cpp_warning" in ;; esac +AC_C_INLINE + +case "$ac_cv_c_inline" in + '') + ;; + *) + AC_DEFINE(HAVE_INLINE,1,[inline keyword or macro available]) + AC_SUBST(HAVE_INLINE) +esac + + # Checks for libraries. # Checks for header files. @@ -96,14 +110,14 @@ case "$ac_cv_have_ss_family_in_struct_ss$ac_cv_have___ss_family_in_struct_ss" in esac # Checks for library functions. -AC_FUNC_MEMCMP +#AC_FUNC_MEMCMP dnl HMS: we don't have a memcmp.c to use here, so why bother? AC_FUNC_SETVBUF_REVERSED AC_TYPE_SIGNAL AC_CHECK_FUNCS([alarm]) -AC_CHECK_FUNC(gethostent, , AC_CHECK_LIB(nsl, gethostent, , , -lsocket)) +AC_CHECK_FUNC([gethostent], , AC_SEARCH_LIBS([gethostent], [nsl], , , [-lsocket])) AC_CHECK_FUNCS([gettimeofday inet_ntoa memset]) -AC_CHECK_FUNCS(socket, , AC_CHECK_LIB(socket, socket)) -AC_CHECK_FUNCS(sqrt, , AC_CHECK_LIB(m, sqrt)) +AC_CHECK_FUNCS([socket], , AC_SEARCH_LIBS([socket], [socket])) +AC_CHECK_FUNCS([sqrt], , AC_SEARCH_LIBS([sqrt], [m])) AC_CHECK_FUNCS([strrchr]) case "$host" in diff --git a/contrib/ntp/sntp/libopts/Makefile.in b/contrib/ntp/sntp/libopts/Makefile.in index 2a7eca38a35..b5f27c67bb3 100644 --- a/contrib/ntp/sntp/libopts/Makefile.in +++ b/contrib/ntp/sntp/libopts/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +15,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -46,39 +44,57 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; -am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(libdir)" -libLTLIBRARIES_INSTALL = $(INSTALL) LTLIBRARIES = $(lib_LTLIBRARIES) $(noinst_LTLIBRARIES) libopts_la_LIBADD = am_libopts_la_OBJECTS = libopts_la-libopts.lo libopts_la_OBJECTS = $(am_libopts_la_OBJECTS) +libopts_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(libopts_la_LDFLAGS) $(LDFLAGS) -o $@ @INSTALL_LIBOPTS_FALSE@am_libopts_la_rpath = @INSTALL_LIBOPTS_TRUE@am_libopts_la_rpath = -rpath $(libdir) -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = $(libopts_la_SOURCES) DIST_SOURCES = $(libopts_la_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AUTOCONF = @AUTOCONF@ @@ -91,10 +107,6 @@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ @@ -104,11 +116,10 @@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -122,14 +133,14 @@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ @@ -137,16 +148,11 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -158,28 +164,40 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ MAINTAINERCLEANFILES = Makefile.in @INSTALL_LIBOPTS_TRUE@lib_LTLIBRARIES = libopts.la @INSTALL_LIBOPTS_FALSE@noinst_LTLIBRARIES = libopts.la @@ -209,14 +227,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libopts/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --gnu libopts/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libopts/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu libopts/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -234,23 +252,28 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) - test -z "$(libdir)" || $(mkdir_p) "$(DESTDIR)$(libdir)" - @list='$(lib_LTLIBRARIES)'; for p in $$list; do \ + test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + list2=; for p in $$list; do \ if test -f $$p; then \ - f=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \ + list2="$$list2 $$p"; \ else :; fi; \ - done + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ + } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) - @set -x; list='$(lib_LTLIBRARIES)'; for p in $$list; do \ - p=$(am__strip_dir) \ - echo " $(LIBTOOL) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \ - $(LIBTOOL) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \ + @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: @@ -271,7 +294,7 @@ clean-noinstLTLIBRARIES: rm -f "$${dir}/so_locations"; \ done libopts.la: $(libopts_la_OBJECTS) $(libopts_la_DEPENDENCIES) - $(LINK) $(am_libopts_la_rpath) $(libopts_la_LDFLAGS) $(libopts_la_OBJECTS) $(libopts_la_LIBADD) $(LIBS) + $(libopts_la_LINK) $(am_libopts_la_rpath) $(libopts_la_OBJECTS) $(libopts_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) @@ -282,32 +305,32 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libopts_la-libopts.Plo@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< libopts_la-libopts.lo: libopts.c -@am__fastdepCC_TRUE@ if $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libopts_la-libopts.lo -MD -MP -MF "$(DEPDIR)/libopts_la-libopts.Tpo" -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libopts_la-libopts.Tpo" "$(DEPDIR)/libopts_la-libopts.Plo"; else rm -f "$(DEPDIR)/libopts_la-libopts.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libopts_la-libopts.lo -MD -MP -MF $(DEPDIR)/libopts_la-libopts.Tpo -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/libopts_la-libopts.Tpo $(DEPDIR)/libopts_la-libopts.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libopts.c' object='libopts_la-libopts.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c +@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libopts_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libopts_la-libopts.lo `test -f 'libopts.c' || echo '$(srcdir)/'`libopts.c mostlyclean-libtool: -rm -f *.lo @@ -315,83 +338,85 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -distclean-libtool: - -rm -f libtool -uninstall-info-am: - ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - $(mkdir_p) $(distdir)/autoopts $(distdir)/compat $(distdir)/m4 - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -400,7 +425,7 @@ check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am @@ -422,6 +447,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -436,7 +462,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -444,18 +470,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: install-libLTLIBRARIES +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -476,20 +522,24 @@ ps: ps-am ps-am: -uninstall-am: uninstall-info-am uninstall-libLTLIBRARIES +uninstall-am: uninstall-libLTLIBRARIES + +.MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstLTLIBRARIES \ ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-libLTLIBRARIES install-man \ - install-strip installcheck installcheck-am installdirs \ - maintainer-clean maintainer-clean-generic mostlyclean \ - mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ - pdf pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-info-am uninstall-libLTLIBRARIES + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-libLTLIBRARIES install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-libLTLIBRARIES + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/contrib/ntp/sntp/sntp-opts.c b/contrib/ntp/sntp/sntp-opts.c index 939c9772cce..37c4e7cf108 100644 --- a/contrib/ntp/sntp/sntp-opts.c +++ b/contrib/ntp/sntp/sntp-opts.c @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (sntp-opts.c) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:27:24 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:49 AM EST * From the definitions sntp-opts.def * and the template file options * @@ -513,7 +513,7 @@ static tOptDesc optDesc[ OPTION_CT ] = { */ tSCC zPROGNAME[] = "SNTP"; tSCC zUsageTitle[] = -"sntp - standard SNTP program - Ver. 4.2.4p5\n\ +"sntp - standard SNTP program - Ver. 4.2.4p8\n\ USAGE: %s [ - | -- ]...\n"; tSCC zRcName[] = ".ntprc"; tSCC* apzHomeList[] = { @@ -521,7 +521,7 @@ tSCC* apzHomeList[] = { ".", NULL }; -tSCC zBugsAddr[] = "http://bugs.ntp.isc.org, bugs@ntp.org"; +tSCC zBugsAddr[] = "http://bugs.ntp.org, bugs@ntp.org"; #define zExplain NULL tSCC zDetail[] = "\n\ .I sntp\n\ @@ -533,7 +533,7 @@ job.\n\ NTP is the Network Time Protocol (RFC 1305) and SNTP is the\n\ Simple Network Time Protocol (RFC 2030, which supersedes RFC 1769).\n"; tSCC zFullVersion[] = SNTP_FULL_VERSION; -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 408 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 408 */ #if defined(ENABLE_NLS) # define OPTPROC_BASE OPTPROC_TRANSLATE @@ -584,7 +584,7 @@ doUsageOpt( { USAGE( EXIT_SUCCESS ); } -/* extracted from /usr/local/gnu/share/autogen/optmain.tpl near line 92 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optmain.tpl near line 92 */ #if defined(TEST_SNTP_OPTS) /* TEST MAIN PROCEDURE: */ @@ -600,7 +600,7 @@ main( int argc, char** argv ) return res; } #endif /* defined TEST_SNTP_OPTS */ -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 514 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 514 */ #if ENABLE_NLS #include diff --git a/contrib/ntp/sntp/sntp-opts.def b/contrib/ntp/sntp/sntp-opts.def index d0ee84fbc10..b4c7f6b044e 100644 --- a/contrib/ntp/sntp/sntp-opts.def +++ b/contrib/ntp/sntp/sntp-opts.def @@ -7,7 +7,7 @@ autogen definitions options; copyright = { date = "1970-2006"; owner = "ntp.org"; - eaddr = "http://bugs.ntp.isc.org, bugs@ntp.org"; + eaddr = "http://bugs.ntp.org, bugs@ntp.org"; type = note; text = `cat COPYRIGHT`; }; diff --git a/contrib/ntp/sntp/sntp-opts.h b/contrib/ntp/sntp/sntp-opts.h index 3c701241ebc..e73737a7b88 100644 --- a/contrib/ntp/sntp/sntp-opts.h +++ b/contrib/ntp/sntp/sntp-opts.h @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (sntp-opts.h) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:27:23 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:49 AM EST * From the definitions sntp-opts.def * and the template file options * @@ -147,8 +147,8 @@ typedef enum { } teOptIndex; #define OPTION_CT 13 -#define SNTP_VERSION "4.2.4p5" -#define SNTP_FULL_VERSION "sntp - standard SNTP program - Ver. 4.2.4p5" +#define SNTP_VERSION "4.2.4p8" +#define SNTP_FULL_VERSION "sntp - standard SNTP program - Ver. 4.2.4p8" /* * Interface defines for all options. Replace "n" with the UPPER_CASED @@ -251,7 +251,7 @@ typedef enum { sntpOptions.pzCurOpt = NULL ) #define START_OPT RESTART_OPT(1) #define USAGE(c) (*sntpOptions.pUsageProc)( &sntpOptions, c ) -/* extracted from /usr/local/gnu/share/autogen/opthead.tpl near line 360 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/opthead.tpl near line 360 */ /* * * * * * * diff --git a/contrib/ntp/sntp/sntp-opts.texi b/contrib/ntp/sntp/sntp-opts.texi index 8cc0d2c74fd..7ba2e213d65 100644 --- a/contrib/ntp/sntp/sntp-opts.texi +++ b/contrib/ntp/sntp/sntp-opts.texi @@ -6,7 +6,7 @@ # # EDIT THIS FILE WITH CAUTION (sntp-opts.texi) # -# It has been AutoGen-ed Sunday August 17, 2008 at 05:27:25 AM EDT +# It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:51 AM EST # From the definitions sntp-opts.def # and the template file aginfo.tpl @end ignore @@ -46,7 +46,59 @@ This is the automatically generated usage text for sntp: @exampleindent 0 @example -sntp is unavailable - no --help +sntp - standard SNTP program - Ver. 4.2.5p247-RC +USAGE: sntp [ - [] | --[@{=| @}] ]... ... + Flg Arg Option-Name Description + -4 no ipv4 Force IPv4 DNS name resolution + - prohibits these options: + ipv6 + -6 no ipv6 Force IPv6 DNS name resolution + - prohibits these options: + ipv4 + -d no normalverbose Normal verbose + -K Str kod KoD history filename + -p no syslog Logging with syslog + - prohibits these options: + filelog + -l Str filelog Logging to specified logfile + - prohibits these options: + syslog + -s no settod Set (step) the time with settimeofday() + - prohibits these options: + adjtime + -j no adjtime Set (slew) the time with adjtime() + - prohibits these options: + settod + -b Str broadcast Use broadcasts to the address specified for synchronisation + -t Num timeout Specify the number of seconds to wait for broadcasts + -a Num authentication Enable authentication with the key keyno. This option is used as -a keyno + -k Str keyfile Specify a keyfile. SNTP will look in this file for the key specified with -a + opt version Output version information and exit + -? no help Display extended usage information and exit + -! no more-help Extended usage information passed thru pager + -> opt save-opts Save the option state to a config file + -< Str load-opts Load options from a config file + - disabled as --no-load-opts + - may appear multiple times + +Options are specified by doubled hyphens and their name +or by a single hyphen and the flag character. + +The following option preset mechanisms are supported: + - reading file /users/stenn/.ntprc + - reading file /deacon/backroom/snaps/ntp-stable/sntp/.ntprc + - examining environment variables named SNTP_* + +.I sntp +can be used as a SNTP client to query a NTP or SNTP server and either display +the time or set the local system's time (given suitable privilege). It can be +run as an interactive command or in a +.I cron +job. +NTP is the Network Time Protocol (RFC 1305) and SNTP is the +Simple Network Time Protocol (RFC 2030, which supersedes RFC 1769). + +please send bug reports to: http://bugs.ntp.org, bugs@@ntp.org @end example @exampleindent 4 diff --git a/contrib/ntp/sntp/sntp.1 b/contrib/ntp/sntp/sntp.1 index b6ccda23f15..20c7d801646 100644 --- a/contrib/ntp/sntp/sntp.1 +++ b/contrib/ntp/sntp/sntp.1 @@ -1,7 +1,7 @@ -.TH SNTP 1 2008-08-17 "( 4.2.4p5)" "Programmer's Manual" +.TH SNTP 1 2009-12-08 "( 4.2.4p8)" "Programmer's Manual" .\" EDIT THIS FILE WITH CAUTION (sntp.1) .\" -.\" It has been AutoGen-ed Sunday August 17, 2008 at 05:27:25 AM EDT +.\" It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:50 AM EST .\" From the definitions sntp-opts.def .\" and the template file agman1.tpl .\" @@ -308,7 +308,7 @@ is searched for within those directories. .SH AUTHOR ntp.org .br -Please send bug reports to: http://bugs.ntp.isc.org, bugs@ntp.org +Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org .PP .nf diff --git a/contrib/ntp/sntp/version.def b/contrib/ntp/sntp/version.def index b17d656155f..f0dc444146e 100644 --- a/contrib/ntp/sntp/version.def +++ b/contrib/ntp/sntp/version.def @@ -1 +1 @@ -version = '4.2.4p5'; +version = '4.2.4p8'; diff --git a/contrib/ntp/util/Makefile.in b/contrib/ntp/util/Makefile.in index 4c511d74e56..75830d0b29e 100644 --- a/contrib/ntp/util/Makefile.in +++ b/contrib/ntp/util/Makefile.in @@ -1,8 +1,9 @@ -# Makefile.in generated by automake 1.9.6 from Makefile.am. +# Makefile.in generated by automake 1.11 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005 Free Software Foundation, Inc. +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. @@ -14,15 +15,12 @@ @SET_MAKE@ -srcdir = @srcdir@ -top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ -top_builddir = .. +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c @@ -58,8 +56,8 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" -binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) audio_pcm_SOURCES = audio-pcm.c audio_pcm_OBJECTS = audio-pcm$U.$(OBJEXT) @@ -121,23 +119,46 @@ timetrim_SOURCES = timetrim.c timetrim_OBJECTS = timetrim$U.$(OBJEXT) timetrim_LDADD = $(LDADD) timetrim_DEPENDENCIES = ../libntp/libntp.a -DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles +am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(DEFS) \ - $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ - $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ + $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ - $(AM_LDFLAGS) $(LDFLAGS) -o $@ +LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ + --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ + $(LDFLAGS) -o $@ SOURCES = audio-pcm.c byteorder.c hist.c $(jitter_SOURCES) kern.c \ longsize.c $(ntp_keygen_SOURCES) ntptime.c pps-api.c \ precision.c sht.c testrs6000.c tg.c tickadj.c timetrim.c DIST_SOURCES = audio-pcm.c byteorder.c hist.c $(jitter_SOURCES) kern.c \ longsize.c $(ntp_keygen_SOURCES) ntptime.c pps-api.c \ precision.c sht.c testrs6000.c tg.c tickadj.c timetrim.c +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) @@ -145,8 +166,6 @@ ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ -AMDEP_FALSE = @AMDEP_FALSE@ -AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ ARLIB_DIR = @ARLIB_DIR@ @@ -162,10 +181,6 @@ CHUTEST = @CHUTEST@ CLKTEST = @CLKTEST@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXDEPMODE = @CXXDEPMODE@ -CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DCFD = @DCFD@ DEFS = @DEFS@ @@ -178,11 +193,10 @@ EF_LIBS = @EF_LIBS@ EF_PROGS = @EF_PROGS@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ -F77 = @F77@ -FFLAGS = @FFLAGS@ +GREP = @GREP@ +HAVE_INLINE = @HAVE_INLINE@ +INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ -INSTALL_LIBOPTS_FALSE = @INSTALL_LIBOPTS_FALSE@ -INSTALL_LIBOPTS_TRUE = @INSTALL_LIBOPTS_TRUE@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ @@ -196,6 +210,7 @@ LIBPARSE = @LIBPARSE@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ +LSCF = @LSCF@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MAKE_ADJTIMED = @MAKE_ADJTIMED@ @@ -209,8 +224,7 @@ MAKE_NTPTIME = @MAKE_NTPTIME@ MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@ MAKE_TICKADJ = @MAKE_TICKADJ@ MAKE_TIMETRIM = @MAKE_TIMETRIM@ -NEED_LIBOPTS_FALSE = @NEED_LIBOPTS_FALSE@ -NEED_LIBOPTS_TRUE = @NEED_LIBOPTS_TRUE@ +MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ OPENSSL = @OPENSSL@ OPENSSL_INC = @OPENSSL_INC@ @@ -220,6 +234,7 @@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_PERL = @PATH_PERL@ PATH_SEPARATOR = @PATH_SEPARATOR@ @@ -233,16 +248,11 @@ STRIP = @STRIP@ TESTDCF = @TESTDCF@ U = @U@ VERSION = @VERSION@ -ac_ct_AR = @ac_ct_AR@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ -am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ -am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ -am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ @@ -254,29 +264,41 @@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ +builddir = @builddir@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ #AUTOMAKE_OPTIONS = ../ansi2knr no-dependencies AUTOMAKE_OPTIONS = ansi2knr @@ -310,14 +332,14 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign util/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign util/Makefile + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign util/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign util/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ @@ -335,86 +357,102 @@ $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) - test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - if test -f $$p \ - || test -f $$p1 \ - ; then \ - f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ - $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ - else :; fi; \ - done + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ - echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ - rm -f "$(DESTDIR)$(bindir)/$$f"; \ - done + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: - @list='$(bin_PROGRAMS)'; for p in $$list; do \ - f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ - echo " rm -f $$p $$f"; \ - rm -f $$p $$f ; \ - done + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list audio-pcm$(EXEEXT): $(audio_pcm_OBJECTS) $(audio_pcm_DEPENDENCIES) @rm -f audio-pcm$(EXEEXT) - $(LINK) $(audio_pcm_LDFLAGS) $(audio_pcm_OBJECTS) $(audio_pcm_LDADD) $(LIBS) + $(LINK) $(audio_pcm_OBJECTS) $(audio_pcm_LDADD) $(LIBS) byteorder$(EXEEXT): $(byteorder_OBJECTS) $(byteorder_DEPENDENCIES) @rm -f byteorder$(EXEEXT) - $(LINK) $(byteorder_LDFLAGS) $(byteorder_OBJECTS) $(byteorder_LDADD) $(LIBS) + $(LINK) $(byteorder_OBJECTS) $(byteorder_LDADD) $(LIBS) hist$(EXEEXT): $(hist_OBJECTS) $(hist_DEPENDENCIES) @rm -f hist$(EXEEXT) - $(LINK) $(hist_LDFLAGS) $(hist_OBJECTS) $(hist_LDADD) $(LIBS) + $(LINK) $(hist_OBJECTS) $(hist_LDADD) $(LIBS) jitter$(EXEEXT): $(jitter_OBJECTS) $(jitter_DEPENDENCIES) @rm -f jitter$(EXEEXT) - $(LINK) $(jitter_LDFLAGS) $(jitter_OBJECTS) $(jitter_LDADD) $(LIBS) + $(LINK) $(jitter_OBJECTS) $(jitter_LDADD) $(LIBS) kern$(EXEEXT): $(kern_OBJECTS) $(kern_DEPENDENCIES) @rm -f kern$(EXEEXT) - $(LINK) $(kern_LDFLAGS) $(kern_OBJECTS) $(kern_LDADD) $(LIBS) + $(LINK) $(kern_OBJECTS) $(kern_LDADD) $(LIBS) longsize$(EXEEXT): $(longsize_OBJECTS) $(longsize_DEPENDENCIES) @rm -f longsize$(EXEEXT) - $(LINK) $(longsize_LDFLAGS) $(longsize_OBJECTS) $(longsize_LDADD) $(LIBS) + $(LINK) $(longsize_OBJECTS) $(longsize_LDADD) $(LIBS) ntp-keygen$(EXEEXT): $(ntp_keygen_OBJECTS) $(ntp_keygen_DEPENDENCIES) @rm -f ntp-keygen$(EXEEXT) - $(LINK) $(ntp_keygen_LDFLAGS) $(ntp_keygen_OBJECTS) $(ntp_keygen_LDADD) $(LIBS) + $(LINK) $(ntp_keygen_OBJECTS) $(ntp_keygen_LDADD) $(LIBS) ntptime$(EXEEXT): $(ntptime_OBJECTS) $(ntptime_DEPENDENCIES) @rm -f ntptime$(EXEEXT) - $(LINK) $(ntptime_LDFLAGS) $(ntptime_OBJECTS) $(ntptime_LDADD) $(LIBS) + $(LINK) $(ntptime_OBJECTS) $(ntptime_LDADD) $(LIBS) pps-api$(EXEEXT): $(pps_api_OBJECTS) $(pps_api_DEPENDENCIES) @rm -f pps-api$(EXEEXT) - $(LINK) $(pps_api_LDFLAGS) $(pps_api_OBJECTS) $(pps_api_LDADD) $(LIBS) + $(LINK) $(pps_api_OBJECTS) $(pps_api_LDADD) $(LIBS) precision$(EXEEXT): $(precision_OBJECTS) $(precision_DEPENDENCIES) @rm -f precision$(EXEEXT) - $(LINK) $(precision_LDFLAGS) $(precision_OBJECTS) $(precision_LDADD) $(LIBS) + $(LINK) $(precision_OBJECTS) $(precision_LDADD) $(LIBS) sht$(EXEEXT): $(sht_OBJECTS) $(sht_DEPENDENCIES) @rm -f sht$(EXEEXT) - $(LINK) $(sht_LDFLAGS) $(sht_OBJECTS) $(sht_LDADD) $(LIBS) + $(LINK) $(sht_OBJECTS) $(sht_LDADD) $(LIBS) testrs6000$(EXEEXT): $(testrs6000_OBJECTS) $(testrs6000_DEPENDENCIES) @rm -f testrs6000$(EXEEXT) - $(LINK) $(testrs6000_LDFLAGS) $(testrs6000_OBJECTS) $(testrs6000_LDADD) $(LIBS) + $(LINK) $(testrs6000_OBJECTS) $(testrs6000_LDADD) $(LIBS) tg$(EXEEXT): $(tg_OBJECTS) $(tg_DEPENDENCIES) @rm -f tg$(EXEEXT) - $(LINK) $(tg_LDFLAGS) $(tg_OBJECTS) $(tg_LDADD) $(LIBS) + $(LINK) $(tg_OBJECTS) $(tg_LDADD) $(LIBS) tickadj$(EXEEXT): $(tickadj_OBJECTS) $(tickadj_DEPENDENCIES) @rm -f tickadj$(EXEEXT) - $(LINK) $(tickadj_LDFLAGS) $(tickadj_OBJECTS) $(tickadj_LDADD) $(LIBS) + $(LINK) $(tickadj_OBJECTS) $(tickadj_LDADD) $(LIBS) timetrim$(EXEEXT): $(timetrim_OBJECTS) $(timetrim_DEPENDENCIES) @rm -f timetrim$(EXEEXT) - $(LINK) $(timetrim_LDFLAGS) $(timetrim_OBJECTS) $(timetrim_LDADD) $(LIBS) + $(LINK) $(timetrim_OBJECTS) $(timetrim_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c -ansi2knr: ansi2knr.$(OBJEXT) +./ansi2knr: ansi2knr.$(OBJEXT) $(LINK) ansi2knr.$(OBJEXT) $(LIBS) ansi2knr.$(OBJEXT): $(CONFIG_HEADER) @@ -442,22 +480,22 @@ mostlyclean-kr: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timetrim$U.Po@am__quote@ .c.o: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: -@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: -@am__fastdepCC_TRUE@ if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ -@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< @@ -508,128 +546,137 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool -uninstall-info-am: -install-man1: $(man1_MANS) $(man_MANS) +install-man1: $(man_MANS) @$(NORMAL_INSTALL) - test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ + test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" + @list=''; test -n "$(man1dir)" || exit 0; \ + { for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | while read p; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; echo "$$p"; \ + done | \ + sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ + sed 'N;N;s,\n, ,g' | { \ + list=; while read file base inst; do \ + if test "$$base" = "$$inst"; then list="$$list $$file"; else \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ + fi; \ done; \ - for i in $$list; do \ - if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ - else file=$$i; fi; \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ - $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ - done + for i in $$list; do echo "$$i"; done | $(am__base_list) | \ + while read files; do \ + test -z "$$files" || { \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ + done; } + uninstall-man1: @$(NORMAL_UNINSTALL) - @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ - l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ - for i in $$l2; do \ - case "$$i" in \ - *.1*) list="$$list $$i" ;; \ - esac; \ - done; \ - for i in $$list; do \ - ext=`echo $$i | sed -e 's/^.*\\.//'`; \ - case "$$ext" in \ - 1*) ;; \ - *) ext='1' ;; \ - esac; \ - inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ - inst=`echo $$inst | sed -e 's/^.*\///'`; \ - inst=`echo $$inst | sed '$(transform)'`.$$ext; \ - echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ - rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ - done + @list=''; test -n "$(man1dir)" || exit 0; \ + files=`{ for i in $$list; do echo "$$i"; done; \ + l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ + sed -n '/\.1[a-z]*$$/p'; \ + } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ + -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ + test -z "$$files" || { \ + echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ + set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique + $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ - list='$(DISTFILES)'; for file in $$list; do \ - case $$file in \ - $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ - $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ - esac; \ + @list='$(MANS)'; if test -n "$$list"; then \ + list=`for p in $$list; do \ + if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ + if test -n "$$list" && \ + grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ + echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ + grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ + echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ + echo " typically \`make maintainer-clean' will remove them" >&2; \ + exit 1; \ + else :; fi; \ + else :; fi + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test "$$dir" != "$$file" && test "$$dir" != "."; then \ - dir="/$$dir"; \ - $(mkdir_p) "$(distdir)$$dir"; \ - else \ - dir=''; \ - fi; \ if test -d $$d/$$file; then \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @@ -639,7 +686,7 @@ check: $(BUILT_SOURCES) all-am: Makefile $(ANSI2KNR) $(PROGRAMS) $(MANS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \ - test -z "$$dir" || $(mkdir_p) "$$dir"; \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am @@ -662,6 +709,7 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -676,7 +724,7 @@ distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ - distclean-libtool distclean-tags + distclean-tags dvi: dvi-am @@ -684,18 +732,38 @@ dvi-am: html: html-am +html-am: + info: info-am info-am: install-data-am: install-man +install-dvi: install-dvi-am + +install-dvi-am: + install-exec-am: install-binPROGRAMS +install-html: install-html-am + +install-html-am: + install-info: install-info-am +install-info-am: + install-man: install-man1 +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + installcheck-am: maintainer-clean: maintainer-clean-am @@ -716,23 +784,26 @@ ps: ps-am ps-am: -uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man +uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man1 +.MAKE: all check install install-am install-strip + .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-krextra clean-libtool ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ - install-data-am install-exec install-exec-am install-info \ - install-info-am install-man install-man1 install-strip \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-man1 install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-kr mostlyclean-libtool pdf \ pdf-am ps ps-am tags uninstall uninstall-am \ - uninstall-binPROGRAMS uninstall-info-am uninstall-man \ - uninstall-man1 + uninstall-binPROGRAMS uninstall-man uninstall-man1 $(srcdir)/ntp-keygen-opts.h: $(srcdir)/ntp-keygen-opts.c @@ -750,6 +821,7 @@ $(srcdir)/ntp-keygen-opts.texi $(srcdir)/ntp-keygen-opts.menu: $(srcdir)/ntp-key kern.o: kern.c $(COMPILE) -DHAVE_TIMEX_H -c kern.c + # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/contrib/ntp/util/ntp-keygen-opts.c b/contrib/ntp/util/ntp-keygen-opts.c index edc9c5b41d5..cb242c07ae1 100644 --- a/contrib/ntp/util/ntp-keygen-opts.c +++ b/contrib/ntp/util/ntp-keygen-opts.c @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.c) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:27:33 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:56 AM EST * From the definitions ntp-keygen-opts.def * and the template file options * @@ -19,7 +19,7 @@ * * This source file is copyrighted and licensed under the following terms: * - * ntp-keygen copyright 1970-2008 David L. Mills and/or others - all rights reserved + * ntp-keygen copyright 1970-2009 David L. Mills and/or others - all rights reserved * * see html/copyright.html */ @@ -34,7 +34,7 @@ extern "C" { #endif tSCC zCopyright[] = - "ntp-keygen copyright (c) 1970-2008 David L. Mills and/or others, all rights reserved"; + "ntp-keygen copyright (c) 1970-2009 David L. Mills and/or others, all rights reserved"; tSCC zCopyrightNotice[] = /* extracted from ../include/copyright.def near line 8 */ @@ -799,7 +799,7 @@ static tOptDesc optDesc[ OPTION_CT ] = { */ tSCC zPROGNAME[] = "NTP_KEYGEN"; tSCC zUsageTitle[] = -"ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.4p5\n\ +"ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.4p8\n\ USAGE: %s [ - [] | --[{=| }] ]...\n"; tSCC zRcName[] = ".ntprc"; tSCC* apzHomeList[] = { @@ -807,13 +807,13 @@ tSCC* apzHomeList[] = { ".", NULL }; -tSCC zBugsAddr[] = "http://bugs.ntp.isc.org, bugs@ntp.org"; +tSCC zBugsAddr[] = "http://bugs.ntp.org, bugs@ntp.org"; #define zExplain NULL tSCC zDetail[] = "\n\ If there is no new host key, look for an existing one.\n\ If one is not found, create it.\n"; tSCC zFullVersion[] = NTP_KEYGEN_FULL_VERSION; -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 408 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 408 */ #if defined(ENABLE_NLS) # define OPTPROC_BASE OPTPROC_TRANSLATE @@ -937,7 +937,7 @@ doOptModulus( } #endif /* defined OPENSSL */ -/* extracted from /usr/local/gnu/share/autogen/optmain.tpl near line 92 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optmain.tpl near line 92 */ #if defined(TEST_NTP_KEYGEN_OPTS) /* TEST MAIN PROCEDURE: */ @@ -953,7 +953,7 @@ main( int argc, char** argv ) return res; } #endif /* defined TEST_NTP_KEYGEN_OPTS */ -/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 514 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/optcode.tpl near line 514 */ #if ENABLE_NLS #include diff --git a/contrib/ntp/util/ntp-keygen-opts.h b/contrib/ntp/util/ntp-keygen-opts.h index a22a5e7fe64..e34a0a7e036 100644 --- a/contrib/ntp/util/ntp-keygen-opts.h +++ b/contrib/ntp/util/ntp-keygen-opts.h @@ -1,7 +1,7 @@ /* * EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.h) * - * It has been AutoGen-ed Sunday August 17, 2008 at 05:27:32 AM EDT + * It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:55 AM EST * From the definitions ntp-keygen-opts.def * and the template file options * @@ -19,7 +19,7 @@ * * This source file is copyrighted and licensed under the following terms: * - * ntp-keygen copyright 1970-2008 David L. Mills and/or others - all rights reserved + * ntp-keygen copyright 1970-2009 David L. Mills and/or others - all rights reserved * * see html/copyright.html */ @@ -79,8 +79,8 @@ typedef enum { } teOptIndex; #define OPTION_CT 24 -#define NTP_KEYGEN_VERSION "4.2.4p5" -#define NTP_KEYGEN_FULL_VERSION "ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.4p5" +#define NTP_KEYGEN_VERSION "4.2.4p8" +#define NTP_KEYGEN_FULL_VERSION "ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.4p8" /* * Interface defines for all options. Replace "n" with the UPPER_CASED @@ -286,7 +286,7 @@ typedef enum { ntp_keygenOptions.pzCurOpt = NULL ) #define START_OPT RESTART_OPT(1) #define USAGE(c) (*ntp_keygenOptions.pUsageProc)( &ntp_keygenOptions, c ) -/* extracted from /usr/local/gnu/share/autogen/opthead.tpl near line 360 */ +/* extracted from /usr/local/gnu/autogen-5.9.1/share/autogen/opthead.tpl near line 360 */ /* * * * * * * diff --git a/contrib/ntp/util/ntp-keygen-opts.texi b/contrib/ntp/util/ntp-keygen-opts.texi index 19b77f8095e..d54e9ba5a10 100644 --- a/contrib/ntp/util/ntp-keygen-opts.texi +++ b/contrib/ntp/util/ntp-keygen-opts.texi @@ -6,7 +6,7 @@ # # EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.texi) # -# It has been AutoGen-ed Sunday August 17, 2008 at 05:27:34 AM EDT +# It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:57 AM EST # From the definitions ntp-keygen-opts.def # and the template file aginfo.tpl @end ignore @@ -52,7 +52,7 @@ This is the automatically generated usage text for ntp-keygen: @exampleindent 0 @example Using OpenSSL version 90704f -ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.5p113 +ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.5p247-RC USAGE: ntp-keygen [ - [] | --[@{=| @}] ]... Flg Arg Option-Name Description -c Str certificate certificate scheme @@ -67,7 +67,7 @@ USAGE: ntp-keygen [ - [] | --[@{=| @}] ]... -i Str issuer-name set issuer name -M no md5key generate MD5 keys -m Num modulus modulus - it must lie in the range: 256 to 2048 + - it must be: 256 to 2048 -P no pvt-cert generate PC private certificate -p Str pvt-passwd output private password -q Str get-pvt-passwd input private password @@ -77,7 +77,7 @@ USAGE: ntp-keygen [ - [] | --[@{=| @}] ]... -V Num mv-params generate MV parameters -v Num mv-keys update MV keys opt version Output version information and exit - -? no help Display usage information and exit + -? no help Display extended usage information and exit -! no more-help Extended usage information passed thru pager -> opt save-opts Save the option state to a config file -< Str load-opts Load options from a config file diff --git a/contrib/ntp/util/ntp-keygen.1 b/contrib/ntp/util/ntp-keygen.1 index 3bf7d0cd86d..90f8d5cceae 100644 --- a/contrib/ntp/util/ntp-keygen.1 +++ b/contrib/ntp/util/ntp-keygen.1 @@ -1,7 +1,7 @@ -.TH NTP-KEYGEN 1 2008-08-17 "(ntp 4.2.4p5)" "Programmer's Manual" +.TH NTP-KEYGEN 1 2009-12-08 "(ntp 4.2.4p8)" "Programmer's Manual" .\" EDIT THIS FILE WITH CAUTION (ntp-keygen.1) .\" -.\" It has been AutoGen-ed Sunday August 17, 2008 at 05:27:34 AM EDT +.\" It has been AutoGen-ed Tuesday December 8, 2009 at 08:14:57 AM EST .\" From the definitions ntp-keygen-opts.def .\" and the template file agman1.tpl .\" @@ -163,7 +163,7 @@ is searched for within those directories. .SH AUTHOR David L. Mills and/or others .br -Please send bug reports to: http://bugs.ntp.isc.org, bugs@ntp.org +Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org .PP .nf diff --git a/contrib/ntp/version b/contrib/ntp/version index 188972adf43..1308e7358a2 100644 --- a/contrib/ntp/version +++ b/contrib/ntp/version @@ -1 +1 @@ -1.1541 +1.1612 diff --git a/contrib/ntp/version.m4 b/contrib/ntp/version.m4 index 124fa7f1541..7d687b905c1 100644 --- a/contrib/ntp/version.m4 +++ b/contrib/ntp/version.m4 @@ -1 +1 @@ -m4_define([VERSION_NUMBER],[4.2.4p5]) +m4_define([VERSION_NUMBER],[4.2.4p8]) diff --git a/contrib/pf/man/pf.conf.5 b/contrib/pf/man/pf.conf.5 index 67cb717540e..98c3d0ea878 100644 --- a/contrib/pf/man/pf.conf.5 +++ b/contrib/pf/man/pf.conf.5 @@ -28,7 +28,7 @@ .\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\" POSSIBILITY OF SUCH DAMAGE. .\" -.Dd October 30, 2006 +.Dd June 10, 2008 .Dt PF.CONF 5 .Os .Sh NAME @@ -2059,6 +2059,13 @@ Changes the timeout values used for states created by this rule. For a list of all valid timeout names, see .Sx OPTIONS above. +.It Ar sloppy +Uses a sloppy TCP connection tracker that does not check sequence +numbers at all, which makes insertion and ICMP teardown attacks way +easier. +This is intended to be used in situations where one does not see all +packets of a connection, i.e. in asymmetric routing situations. +Cannot be used with modulate or synproxy state. .El .Pp Multiple options can be specified, separated by commas: @@ -2923,7 +2930,7 @@ tos = "tos" ( "lowdelay" | "throughput" | "reliability" | [ "0x" ] number ) state-opts = state-opt [ [ "," ] state-opts ] -state-opt = ( "max" number | "no-sync" | timeout | +state-opt = ( "max" number | "no-sync" | timeout | sloppy | "source-track" [ ( "rule" | "global" ) ] | "max-src-nodes" number | "max-src-states" number | "max-src-conn" number | diff --git a/contrib/pf/pfctl/parse.y b/contrib/pf/pfctl/parse.y index 9817e8e2378..c22a0b662e6 100644 --- a/contrib/pf/pfctl/parse.y +++ b/contrib/pf/pfctl/parse.y @@ -128,7 +128,7 @@ enum { PF_STATE_OPT_MAX, PF_STATE_OPT_NOSYNC, PF_STATE_OPT_SRCTRACK, PF_STATE_OPT_MAX_SRC_STATES, PF_STATE_OPT_MAX_SRC_CONN, PF_STATE_OPT_MAX_SRC_CONN_RATE, PF_STATE_OPT_MAX_SRC_NODES, PF_STATE_OPT_OVERLOAD, PF_STATE_OPT_STATELOCK, - PF_STATE_OPT_TIMEOUT }; + PF_STATE_OPT_TIMEOUT, PF_STATE_OPT_SLOPPY }; enum { PF_SRCTRACK_NONE, PF_SRCTRACK, PF_SRCTRACK_GLOBAL, PF_SRCTRACK_RULE }; @@ -423,7 +423,7 @@ typedef struct { %token QUEUE PRIORITY QLIMIT RTABLE %token LOAD RULESET_OPTIMIZATION %token STICKYADDRESS MAXSRCSTATES MAXSRCNODES SOURCETRACK GLOBAL RULE -%token MAXSRCCONN MAXSRCCONNRATE OVERLOAD FLUSH +%token MAXSRCCONN MAXSRCCONNRATE OVERLOAD FLUSH SLOPPY %token TAGGED TAG IFBOUND FLOATING STATEPOLICY ROUTE %token STRING %token PORTBINARY @@ -1891,6 +1891,14 @@ pfrule : action dir logquick interface route af proto fromto statelock = 1; r.rule_flag |= o->data.statelock; break; + case PF_STATE_OPT_SLOPPY: + if (r.rule_flag & PFRULE_STATESLOPPY) { + yyerror("state sloppy option: " + "multiple definitions"); + YYERROR; + } + r.rule_flag |= PFRULE_STATESLOPPY; + break; case PF_STATE_OPT_TIMEOUT: if (o->data.timeout.number == PFTM_ADAPTIVE_START || @@ -3216,6 +3224,14 @@ state_opt_item : MAXIMUM number { $$->next = NULL; $$->tail = $$; } + | SLOPPY { + $$ = calloc(1, sizeof(struct node_state_opt)); + if ($$ == NULL) + err(1, "state_opt_item: calloc"); + $$->type = PF_STATE_OPT_SLOPPY; + $$->next = NULL; + $$->tail = $$; + } | STRING number { int i; @@ -4101,6 +4117,13 @@ filter_consistent(struct pf_rule *r, int anchor_call) yyerror("keep state on block rules doesn't make sense"); problems++; } + if (r->rule_flag & PFRULE_STATESLOPPY && + (r->keep_state == PF_STATE_MODULATE || + r->keep_state == PF_STATE_SYNPROXY)) { + yyerror("sloppy state matching cannot be used with " + "synproxy state or modulate state"); + problems++; + } return (-problems); } @@ -4969,6 +4992,7 @@ lookup(char *s) { "scrub", SCRUB}, { "set", SET}, { "skip", SKIP}, + { "sloppy", SLOPPY}, { "source-hash", SOURCEHASH}, { "source-track", SOURCETRACK}, { "state", STATE}, diff --git a/contrib/pf/pfctl/pf_print_state.c b/contrib/pf/pfctl/pf_print_state.c index b3a693a5986..02a39b32156 100644 --- a/contrib/pf/pfctl/pf_print_state.c +++ b/contrib/pf/pfctl/pf_print_state.c @@ -294,6 +294,8 @@ print_state(struct pf_state *s, int opts) printf(", anchor %u", s->anchor.nr); if (s->rule.nr != -1) printf(", rule %u", s->rule.nr); + if (s->state_flags & PFSTATE_SLOPPY) + printf(", sloppy"); if (s->src_node != NULL) printf(", source-track"); if (s->nat_src_node != NULL) diff --git a/contrib/pf/pfctl/pfctl_parser.c b/contrib/pf/pfctl/pfctl_parser.c index 9f232bdb783..c9b2e1189b6 100644 --- a/contrib/pf/pfctl/pfctl_parser.c +++ b/contrib/pf/pfctl/pfctl_parser.c @@ -873,6 +873,8 @@ print_rule(struct pf_rule *r, const char *anchor_call, int verbose) opts = 1; if (r->rule_flag & PFRULE_IFBOUND) opts = 1; + if (r->rule_flag & PFRULE_STATESLOPPY) + opts = 1; for (i = 0; !opts && i < PFTM_MAX; ++i) if (r->timeout[i]) opts = 1; @@ -939,6 +941,12 @@ print_rule(struct pf_rule *r, const char *anchor_call, int verbose) printf("if-bound"); opts = 0; } + if (r->rule_flag & PFRULE_STATESLOPPY) { + if (!opts) + printf(", "); + printf("sloppy"); + opts = 0; + } for (i = 0; i < PFTM_MAX; ++i) if (r->timeout[i]) { int j; diff --git a/contrib/telnet/telnet/externs.h b/contrib/telnet/telnet/externs.h index 73743c025ed..cfa1aec372d 100644 --- a/contrib/telnet/telnet/externs.h +++ b/contrib/telnet/telnet/externs.h @@ -57,7 +57,7 @@ #include #ifdef USE_TERMIO # ifndef VINTR -# include +# include # endif # define termio termios #endif diff --git a/contrib/telnet/telnetd/sys_term.c b/contrib/telnet/telnetd/sys_term.c index 7b2dbdb2dfa..498c3427b26 100644 --- a/contrib/telnet/telnetd/sys_term.c +++ b/contrib/telnet/telnetd/sys_term.c @@ -43,7 +43,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include "telnetd.h" #include "pathnames.h" @@ -55,19 +54,6 @@ __FBSDID("$FreeBSD$"); int cleanopen(char *); void scrub_env(void); -struct utmp wtmp; - -#ifdef _PATH_WTMP -char wtmpf[] = _PATH_WTMP; -#else -char wtmpf[] = "/var/log/wtmp"; -#endif -#ifdef _PATH_UTMP -char utmpf[] = _PATH_UTMP; -#else -char utmpf[] = "/var/run/utmp"; -#endif - char *envinit[3]; extern char **environ; diff --git a/contrib/top/username.c b/contrib/top/username.c index 23591866eb8..77f1517b706 100644 --- a/contrib/top/username.c +++ b/contrib/top/username.c @@ -30,17 +30,17 @@ * This makes the table size independent of the passwd file size. */ +#include #include #include #include -#include #include "top.local.h" #include "utils.h" struct hash_el { int uid; - char name[UT_NAMESIZE + 1]; + char name[MAXLOGNAME]; }; #define is_empty_hash(x) (hash_table[x].name[0] == 0) @@ -129,7 +129,7 @@ int wecare; /* 1 = enter it always, 0 = nice to have */ /* empty or wrong slot -- fill it with new value */ hash_table[hashindex].uid = uid; - (void) strncpy(hash_table[hashindex].name, name, UT_NAMESIZE); + (void) strncpy(hash_table[hashindex].name, name, MAXLOGNAME - 1); return(hashindex); } diff --git a/crypto/heimdal/kcm/connect.c b/crypto/heimdal/kcm/connect.c index b3a21aa66a0..edad6fcdf25 100644 --- a/crypto/heimdal/kcm/connect.c +++ b/crypto/heimdal/kcm/connect.c @@ -149,7 +149,7 @@ update_client_creds(int s, kcm_client *peer) struct sockcred *sc; memset(&msg, 0, sizeof(msg)); - crmsgsize = CMSG_SPACE(SOCKCREDSIZE(NGROUPS)); + crmsgsize = CMSG_SPACE(SOCKCREDSIZE(CMGROUP_MAX)); if (crmsgsize == 0) return 1 ; diff --git a/crypto/openssh/sshd.c b/crypto/openssh/sshd.c index 249e20f355c..422f0cb17a7 100644 --- a/crypto/openssh/sshd.c +++ b/crypto/openssh/sshd.c @@ -47,6 +47,7 @@ __RCSID("$FreeBSD$"); #include #include +#include #include #ifdef HAVE_SYS_STAT_H # include @@ -1293,6 +1294,10 @@ main(int ac, char **av) /* Initialize configuration options to their default values. */ initialize_server_options(&options); + /* Avoid killing the process in high-pressure swapping environments. */ + if (madvise(NULL, 0, MADV_PROTECT) != 0) + debug("madvise(): %.200s", strerror(errno)); + /* Parse command-line arguments. */ while ((opt = getopt(ac, av, "f:p:b:k:h:g:u:o:C:dDeiqrtQRT46")) != -1) { switch (opt) { diff --git a/crypto/openssl/ssl/s3_lib.c b/crypto/openssl/ssl/s3_lib.c index 8916a0b1b3c..1b38f72d086 100644 --- a/crypto/openssl/ssl/s3_lib.c +++ b/crypto/openssl/ssl/s3_lib.c @@ -2592,6 +2592,9 @@ int ssl3_renegotiate(SSL *s) if (s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) return(0); + if (1) + return(0); + s->s3->renegotiate=1; return(1); } diff --git a/crypto/openssl/ssl/s3_pkt.c b/crypto/openssl/ssl/s3_pkt.c index 9476dcddf6e..1644f19d49c 100644 --- a/crypto/openssl/ssl/s3_pkt.c +++ b/crypto/openssl/ssl/s3_pkt.c @@ -983,9 +983,7 @@ start: if (s->msg_callback) s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, s->s3->handshake_fragment, 4, s, s->msg_callback_arg); - if (SSL_is_init_finished(s) && - !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && - !s->s3->renegotiate) + if (0) { ssl3_renegotiate(s); if (ssl3_renegotiate_check(s)) @@ -1116,8 +1114,7 @@ start: /* Unexpected handshake message (Client Hello, or protocol violation) */ if ((s->s3->handshake_fragment_len >= 4) && !s->in_handshake) { - if (((s->state&SSL_ST_MASK) == SSL_ST_OK) && - !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS)) + if (0) { #if 0 /* worked only because C operator preferences are not as expected (and * because this is not really needed for clients except for detecting diff --git a/crypto/openssl/ssl/s3_srvr.c b/crypto/openssl/ssl/s3_srvr.c index 80b45eb86ff..b2ba9ffeb03 100644 --- a/crypto/openssl/ssl/s3_srvr.c +++ b/crypto/openssl/ssl/s3_srvr.c @@ -718,6 +718,13 @@ int ssl3_get_client_hello(SSL *s) #endif STACK_OF(SSL_CIPHER) *ciphers=NULL; + if (s->new_session) + { + al=SSL_AD_HANDSHAKE_FAILURE; + SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, ERR_R_INTERNAL_ERROR); + goto f_err; + } + /* We do this so that we will respond with our native type. * If we are TLSv1 and we get SSLv3, we will respond with TLSv1, * This down switching should be handled by a different method. diff --git a/etc/Makefile b/etc/Makefile index 1181104a3a4..42221a809c5 100644 --- a/etc/Makefile +++ b/etc/Makefile @@ -15,11 +15,16 @@ BIN1= auth.conf \ inetd.conf libalias.conf login.access login.conf mac.conf motd \ netconfig network.subr networks newsyslog.conf nsswitch.conf \ phones profile protocols \ - rc rc.bsdextended rc.firewall rc.firewall6 rc.initdiskless \ + rc rc.bsdextended rc.firewall rc.initdiskless \ rc.sendmail rc.shutdown \ rc.subr remote rpc services shells \ - sysctl.conf syslog.conf \ - etc.${MACHINE_ARCH}/ttys + sysctl.conf syslog.conf + +.if exists(${.CURDIR}/etc.${MACHINE}/ttys) +BIN1+= etc.${MACHINE}/ttys +.else +BIN1+= etc.${MACHINE_ARCH}/ttys +.endif OPENBSMDIR= ${.CURDIR}/../contrib/openbsm BSM_ETC_OPEN_FILES= ${OPENBSMDIR}/etc/audit_class \ diff --git a/etc/defaults/devfs.rules b/etc/defaults/devfs.rules index a00b75d9247..a3e30b776b1 100644 --- a/etc/defaults/devfs.rules +++ b/etc/defaults/devfs.rules @@ -44,6 +44,14 @@ add path 'ptyP*' unhide add path 'ptyQ*' unhide add path 'ptyR*' unhide add path 'ptyS*' unhide +add path 'ptyl*' unhide +add path 'ptym*' unhide +add path 'ptyn*' unhide +add path 'ptyo*' unhide +add path 'ptyL*' unhide +add path 'ptyM*' unhide +add path 'ptyN*' unhide +add path 'ptyO*' unhide add path 'ttyp*' unhide add path 'ttyq*' unhide add path 'ttyr*' unhide @@ -52,6 +60,14 @@ add path 'ttyP*' unhide add path 'ttyQ*' unhide add path 'ttyR*' unhide add path 'ttyS*' unhide +add path 'ttyl*' unhide +add path 'ttym*' unhide +add path 'ttyn*' unhide +add path 'ttyo*' unhide +add path 'ttyL*' unhide +add path 'ttyM*' unhide +add path 'ttyN*' unhide +add path 'ttyO*' unhide add path ptmx unhide add path pts unhide add path 'pts/*' unhide diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf index c094303de38..b061d386834 100644 --- a/etc/defaults/rc.conf +++ b/etc/defaults/rc.conf @@ -118,7 +118,10 @@ firewall_type="UNKNOWN" # Firewall type (see /etc/rc.firewall) firewall_quiet="NO" # Set to YES to suppress rule display firewall_logging="NO" # Set to YES to enable events logging firewall_flags="" # Flags passed to ipfw when type is a file -firewall_client_net="192.0.2.0/24" # Network address for "client" firewall. +firewall_client_net="192.0.2.0/24" # IPv4 Network address for "client" + # firewall. +#firewall_client_net_ipv6="2001:db8:2:1::/64" # IPv6 network prefix for + # "client" firewall. firewall_simple_iif="ed1" # Inside network interface for "simple" # firewall. firewall_simple_inet="192.0.2.16/28" # Inside network address for "simple" @@ -127,12 +130,22 @@ firewall_simple_oif="ed0" # Outside network interface for "simple" # firewall. firewall_simple_onet="192.0.2.0/28" # Outside network address for "simple" # firewall. +#firewall_simple_iif_ipv6="ed1" # Inside IPv6 network interface for "simple" + # firewall. +#firewall_simple_inet_ipv6="2001:db8:2:800::/56" # Inside IPv6 network prefix + # for "simple" firewall. +#firewall_simple_oif_ipv6="ed0" # Outside IPv6 network interface for "simple" + # firewall. +#firewall_simple_onet_ipv6="2001:db8:2:0::/56" # Outside IPv6 network prefix + # for "simple" firewall. firewall_myservices="" # List of TCP ports on which this host # offers services for "workstation" firewall. firewall_allowservices="" # List of IPs which have access to # $firewall_myservices for "workstation" # firewall. -firewall_trusted="" # List of IPs which have full access to this +firewall_trusted="" # List of IPv4s which have full access to this + # host for "workstation" firewall. +firewall_trusted_ipv6="" # List of IPv6s which have full access to this # host for "workstation" firewall. firewall_logdeny="NO" # Set to YES to log default denied incoming # packets for "workstation" firewall. @@ -200,6 +213,8 @@ ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration. #ifconfig_ed0_ipv6="inet6 2001:db8:1::1 prefixlen 64" # Sample IPv6 addr entry #ifconfig_ed0_alias0="inet6 2001:db8:2::1 prefixlen 64" # Sample IPv6 alias #ifconfig_fxp0_name="net0" # Change interface name from fxp0 to net0. +#vlans_fxp0="101 vlan0" # vlan(4) interfaces for fxp0 device +#create_arg_vlan0="vlan 102" # vlan tag for vlan0 device #wlans_ath0="wlan0" # wlan(4) interfaces for ath0 device #wlandebug_wlan0="scan+auth+assoc" # Set debug flags with wlanddebug(8) #ipv4_addrs_fxp0="192.168.0.1/24 192.168.1.1-5/28" # example IPv4 address entry. @@ -252,7 +267,7 @@ inetd_flags="-wW -C 60" # Optional flags to inetd named_enable="NO" # Run named, the DNS server (or NO). named_program="/usr/sbin/named" # Path to named, if you want a different one. named_conf="/etc/namedb/named.conf" # Path to the configuration file -#named_flags="-c /etc/namedb/named.conf" # Uncomment for named not in /usr/sbin +#named_flags="" # Use this for flags OTHER than -u and -c named_pidfile="/var/run/named/pid" # Must set this in named.conf as well named_uid="bind" # User to run named as named_chrootdir="/var/named" # Chroot directory (or "" not to auto-chroot it) @@ -472,13 +487,6 @@ ipv6_faith_prefix="NO" # Set faith prefix to enable a FAITH # faithd(8) setup. ipv6_ipv4mapping="NO" # Set to "YES" to enable IPv4 mapped IPv6 addr # communication. (like ::ffff:a.b.c.d) -ipv6_firewall_enable="NO" # Set to YES to enable IPv6 firewall - # functionality -ipv6_firewall_script="/etc/rc.firewall6" # Which script to run to set up the IPv6 firewall -ipv6_firewall_type="UNKNOWN" # IPv6 Firewall type (see /etc/rc.firewall6) -ipv6_firewall_quiet="NO" # Set to YES to suppress rule display -ipv6_firewall_logging="NO" # Set to YES to enable events logging -ipv6_firewall_flags="" # Flags passed to ip6fw when type is a file ipv6_ipfilter_rules="/etc/ipf6.rules" # rules definition file for ipfilter, # see /usr/src/contrib/ipfilter/rules # for examples diff --git a/etc/etc.amd64/ttys b/etc/etc.amd64/ttys index c4650cbdb03..b76d6cbd6dc 100644 --- a/etc/etc.amd64/ttys +++ b/etc/etc.amd64/ttys @@ -15,7 +15,7 @@ # # type The initial terminal type for this port. For hardwired # terminal lines, this will contain the type of terminal used. -# For virtual consoles, the correct type is typically cons25. +# For virtual consoles, the correct type is typically xterm. # Other common values include network for network connections on # pseudo-terminals, dialup for incoming modem ports, and unknown # when the terminal type cannot be predetermined. @@ -30,15 +30,15 @@ # when going to single-user mode. console none unknown off secure # -ttyv0 "/usr/libexec/getty Pc" cons25 on secure +ttyv0 "/usr/libexec/getty Pc" xterm on secure # Virtual terminals -ttyv1 "/usr/libexec/getty Pc" cons25 on secure -ttyv2 "/usr/libexec/getty Pc" cons25 on secure -ttyv3 "/usr/libexec/getty Pc" cons25 on secure -ttyv4 "/usr/libexec/getty Pc" cons25 on secure -ttyv5 "/usr/libexec/getty Pc" cons25 on secure -ttyv6 "/usr/libexec/getty Pc" cons25 on secure -ttyv7 "/usr/libexec/getty Pc" cons25 on secure +ttyv1 "/usr/libexec/getty Pc" xterm on secure +ttyv2 "/usr/libexec/getty Pc" xterm on secure +ttyv3 "/usr/libexec/getty Pc" xterm on secure +ttyv4 "/usr/libexec/getty Pc" xterm on secure +ttyv5 "/usr/libexec/getty Pc" xterm on secure +ttyv6 "/usr/libexec/getty Pc" xterm on secure +ttyv7 "/usr/libexec/getty Pc" xterm on secure ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure # Serial terminals # The 'dialup' keyword identifies dialin lines to login, fingerd etc. diff --git a/etc/etc.arm/ttys b/etc/etc.arm/ttys index 7c3b3341a15..9c9cb9598bf 100644 --- a/etc/etc.arm/ttys +++ b/etc/etc.arm/ttys @@ -15,7 +15,7 @@ # # type The initial terminal type for this port. For hardwired # terminal lines, this will contain the type of terminal used. -# For virtual consoles, the correct type is typically cons25. +# For virtual consoles, the correct type is typically xterm. # Other common values include network for network connections on # pseudo-terminals, dialup for incoming modem ports, and unknown # when the terminal type cannot be predetermined. @@ -30,15 +30,15 @@ # when going to single-user mode. console none unknown off secure # -ttyv0 "/usr/libexec/getty Pc" cons25 off secure +ttyv0 "/usr/libexec/getty Pc" xterm off secure # Virtual terminals -ttyv1 "/usr/libexec/getty Pc" cons25 off secure -ttyv2 "/usr/libexec/getty Pc" cons25 off secure -ttyv3 "/usr/libexec/getty Pc" cons25 off secure -ttyv4 "/usr/libexec/getty Pc" cons25 off secure -ttyv5 "/usr/libexec/getty Pc" cons25 off secure -ttyv6 "/usr/libexec/getty Pc" cons25 off secure -ttyv7 "/usr/libexec/getty Pc" cons25 off secure +ttyv1 "/usr/libexec/getty Pc" xterm off secure +ttyv2 "/usr/libexec/getty Pc" xterm off secure +ttyv3 "/usr/libexec/getty Pc" xterm off secure +ttyv4 "/usr/libexec/getty Pc" xterm off secure +ttyv5 "/usr/libexec/getty Pc" xterm off secure +ttyv6 "/usr/libexec/getty Pc" xterm off secure +ttyv7 "/usr/libexec/getty Pc" xterm off secure #ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure # Serial terminals # The 'dialup' keyword identifies dialin lines to login, fingerd etc. diff --git a/etc/etc.i386/ttys b/etc/etc.i386/ttys index c4650cbdb03..b76d6cbd6dc 100644 --- a/etc/etc.i386/ttys +++ b/etc/etc.i386/ttys @@ -15,7 +15,7 @@ # # type The initial terminal type for this port. For hardwired # terminal lines, this will contain the type of terminal used. -# For virtual consoles, the correct type is typically cons25. +# For virtual consoles, the correct type is typically xterm. # Other common values include network for network connections on # pseudo-terminals, dialup for incoming modem ports, and unknown # when the terminal type cannot be predetermined. @@ -30,15 +30,15 @@ # when going to single-user mode. console none unknown off secure # -ttyv0 "/usr/libexec/getty Pc" cons25 on secure +ttyv0 "/usr/libexec/getty Pc" xterm on secure # Virtual terminals -ttyv1 "/usr/libexec/getty Pc" cons25 on secure -ttyv2 "/usr/libexec/getty Pc" cons25 on secure -ttyv3 "/usr/libexec/getty Pc" cons25 on secure -ttyv4 "/usr/libexec/getty Pc" cons25 on secure -ttyv5 "/usr/libexec/getty Pc" cons25 on secure -ttyv6 "/usr/libexec/getty Pc" cons25 on secure -ttyv7 "/usr/libexec/getty Pc" cons25 on secure +ttyv1 "/usr/libexec/getty Pc" xterm on secure +ttyv2 "/usr/libexec/getty Pc" xterm on secure +ttyv3 "/usr/libexec/getty Pc" xterm on secure +ttyv4 "/usr/libexec/getty Pc" xterm on secure +ttyv5 "/usr/libexec/getty Pc" xterm on secure +ttyv6 "/usr/libexec/getty Pc" xterm on secure +ttyv7 "/usr/libexec/getty Pc" xterm on secure ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure # Serial terminals # The 'dialup' keyword identifies dialin lines to login, fingerd etc. diff --git a/etc/etc.ia64/ttys b/etc/etc.ia64/ttys index acacb90aa3b..6a1b473cc9d 100644 --- a/etc/etc.ia64/ttys +++ b/etc/etc.ia64/ttys @@ -15,7 +15,7 @@ # # type The initial terminal type for this port. For hardwired # terminal lines, this will contain the type of terminal used. -# For virtual consoles, the correct type is typically cons25. +# For virtual consoles, the correct type is typically xterm. # Other common values include network for network connections on # pseudo-terminals, dialup for incoming modem ports, and unknown # when the terminal type cannot be predetermined. @@ -30,15 +30,15 @@ # when going to single-user mode. console none unknown off secure # -ttyv0 "/usr/libexec/getty Pc" cons25 off secure -# Virtual terminals. -ttyv1 "/usr/libexec/getty Pc" cons25 off secure -ttyv2 "/usr/libexec/getty Pc" cons25 off secure -ttyv3 "/usr/libexec/getty Pc" cons25 off secure -ttyv4 "/usr/libexec/getty Pc" cons25 off secure -ttyv5 "/usr/libexec/getty Pc" cons25 off secure -ttyv6 "/usr/libexec/getty Pc" cons25 off secure -ttyv7 "/usr/libexec/getty Pc" cons25 off secure +ttyv0 "/usr/libexec/getty Pc" xterm off secure +# Virtual terminals +ttyv1 "/usr/libexec/getty Pc" xterm off secure +ttyv2 "/usr/libexec/getty Pc" xterm off secure +ttyv3 "/usr/libexec/getty Pc" xterm off secure +ttyv4 "/usr/libexec/getty Pc" xterm off secure +ttyv5 "/usr/libexec/getty Pc" xterm off secure +ttyv6 "/usr/libexec/getty Pc" xterm off secure +ttyv7 "/usr/libexec/getty Pc" xterm off secure ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure # Serial terminals. The 'dialup' keyword identifies dialin lines to login, # fingerd etc. diff --git a/etc/etc.mips/ttys b/etc/etc.mips/ttys index 55e58ae2a14..af67a240857 100644 --- a/etc/etc.mips/ttys +++ b/etc/etc.mips/ttys @@ -15,7 +15,7 @@ # # type The initial terminal type for this port. For hardwired # terminal lines, this will contain the type of terminal used. -# For virtual consoles, the correct type is typically cons25. +# For virtual consoles, the correct type is typically xterm. # Other common values include network for network connections on # pseudo-terminals, dialup for incoming modem ports, and unknown # when the terminal type cannot be predetermined. diff --git a/etc/etc.pc98/ttys b/etc/etc.pc98/ttys new file mode 100644 index 00000000000..248a0e534e5 --- /dev/null +++ b/etc/etc.pc98/ttys @@ -0,0 +1,307 @@ +# +# $FreeBSD$ +# @(#)ttys 5.1 (Berkeley) 4/17/89 +# +# This file specifies various information about terminals on the system. +# It is used by several different programs. Common entries for the +# various columns include: +# +# name The name of the terminal device. +# +# getty The program to start running on the terminal. Typically a +# getty program, as the name implies. Other common entries +# include none, when no getty is needed, and xdm, to start the +# X Window System. +# +# type The initial terminal type for this port. For hardwired +# terminal lines, this will contain the type of terminal used. +# For virtual consoles, the correct type is typically cons25w. +# Other common values include network for network connections on +# pseudo-terminals, dialup for incoming modem ports, and unknown +# when the terminal type cannot be predetermined. +# +# status Must be on or off. If on, init will run the getty program on +# the specified port. If the word "secure" appears, this tty +# allows root login. +# +# name getty type status comments +# +# If console is marked "insecure", then init will ask for the root password +# when going to single-user mode. +console none unknown off secure +# +ttyv0 "/usr/libexec/getty Pc" cons25w on secure +# Virtual terminals +ttyv1 "/usr/libexec/getty Pc" cons25w on secure +ttyv2 "/usr/libexec/getty Pc" cons25w on secure +ttyv3 "/usr/libexec/getty Pc" cons25w on secure +ttyv4 "/usr/libexec/getty Pc" cons25w on secure +ttyv5 "/usr/libexec/getty Pc" cons25w on secure +ttyv6 "/usr/libexec/getty Pc" cons25w on secure +ttyv7 "/usr/libexec/getty Pc" cons25w on secure +ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure +# Serial terminals +# The 'dialup' keyword identifies dialin lines to login, fingerd etc. +ttyu0 "/usr/libexec/getty std.9600" dialup off secure +ttyu1 "/usr/libexec/getty std.9600" dialup off secure +ttyu2 "/usr/libexec/getty std.9600" dialup off secure +ttyu3 "/usr/libexec/getty std.9600" dialup off secure +# Dumb console +dcons "/usr/libexec/getty std.9600" vt100 off secure +# Pseudo terminals +ttyp0 none network +ttyp1 none network +ttyp2 none network +ttyp3 none network +ttyp4 none network +ttyp5 none network +ttyp6 none network +ttyp7 none network +ttyp8 none network +ttyp9 none network +ttypa none network +ttypb none network +ttypc none network +ttypd none network +ttype none network +ttypf none network +ttypg none network +ttyph none network +ttypi none network +ttypj none network +ttypk none network +ttypl none network +ttypm none network +ttypn none network +ttypo none network +ttypp none network +ttypq none network +ttypr none network +ttyps none network +ttypt none network +ttypu none network +ttypv none network +ttyq0 none network +ttyq1 none network +ttyq2 none network +ttyq3 none network +ttyq4 none network +ttyq5 none network +ttyq6 none network +ttyq7 none network +ttyq8 none network +ttyq9 none network +ttyqa none network +ttyqb none network +ttyqc none network +ttyqd none network +ttyqe none network +ttyqf none network +ttyqg none network +ttyqh none network +ttyqi none network +ttyqj none network +ttyqk none network +ttyql none network +ttyqm none network +ttyqn none network +ttyqo none network +ttyqp none network +ttyqq none network +ttyqr none network +ttyqs none network +ttyqt none network +ttyqu none network +ttyqv none network +ttyr0 none network +ttyr1 none network +ttyr2 none network +ttyr3 none network +ttyr4 none network +ttyr5 none network +ttyr6 none network +ttyr7 none network +ttyr8 none network +ttyr9 none network +ttyra none network +ttyrb none network +ttyrc none network +ttyrd none network +ttyre none network +ttyrf none network +ttyrg none network +ttyrh none network +ttyri none network +ttyrj none network +ttyrk none network +ttyrl none network +ttyrm none network +ttyrn none network +ttyro none network +ttyrp none network +ttyrq none network +ttyrr none network +ttyrs none network +ttyrt none network +ttyru none network +ttyrv none network +ttys0 none network +ttys1 none network +ttys2 none network +ttys3 none network +ttys4 none network +ttys5 none network +ttys6 none network +ttys7 none network +ttys8 none network +ttys9 none network +ttysa none network +ttysb none network +ttysc none network +ttysd none network +ttyse none network +ttysf none network +ttysg none network +ttysh none network +ttysi none network +ttysj none network +ttysk none network +ttysl none network +ttysm none network +ttysn none network +ttyso none network +ttysp none network +ttysq none network +ttysr none network +ttyss none network +ttyst none network +ttysu none network +ttysv none network +ttyP0 none network +ttyP1 none network +ttyP2 none network +ttyP3 none network +ttyP4 none network +ttyP5 none network +ttyP6 none network +ttyP7 none network +ttyP8 none network +ttyP9 none network +ttyPa none network +ttyPb none network +ttyPc none network +ttyPd none network +ttyPe none network +ttyPf none network +ttyPg none network +ttyPh none network +ttyPi none network +ttyPj none network +ttyPk none network +ttyPl none network +ttyPm none network +ttyPn none network +ttyPo none network +ttyPp none network +ttyPq none network +ttyPr none network +ttyPs none network +ttyPt none network +ttyPu none network +ttyPv none network +ttyQ0 none network +ttyQ1 none network +ttyQ2 none network +ttyQ3 none network +ttyQ4 none network +ttyQ5 none network +ttyQ6 none network +ttyQ7 none network +ttyQ8 none network +ttyQ9 none network +ttyQa none network +ttyQb none network +ttyQc none network +ttyQd none network +ttyQe none network +ttyQf none network +ttyQg none network +ttyQh none network +ttyQi none network +ttyQj none network +ttyQk none network +ttyQl none network +ttyQm none network +ttyQn none network +ttyQo none network +ttyQp none network +ttyQq none network +ttyQr none network +ttyQs none network +ttyQt none network +ttyQu none network +ttyQv none network +ttyR0 none network +ttyR1 none network +ttyR2 none network +ttyR3 none network +ttyR4 none network +ttyR5 none network +ttyR6 none network +ttyR7 none network +ttyR8 none network +ttyR9 none network +ttyRa none network +ttyRb none network +ttyRc none network +ttyRd none network +ttyRe none network +ttyRf none network +ttyRg none network +ttyRh none network +ttyRi none network +ttyRj none network +ttyRk none network +ttyRl none network +ttyRm none network +ttyRn none network +ttyRo none network +ttyRp none network +ttyRq none network +ttyRr none network +ttyRs none network +ttyRt none network +ttyRu none network +ttyRv none network +ttyS0 none network +ttyS1 none network +ttyS2 none network +ttyS3 none network +ttyS4 none network +ttyS5 none network +ttyS6 none network +ttyS7 none network +ttyS8 none network +ttyS9 none network +ttySa none network +ttySb none network +ttySc none network +ttySd none network +ttySe none network +ttySf none network +ttySg none network +ttySh none network +ttySi none network +ttySj none network +ttySk none network +ttySl none network +ttySm none network +ttySn none network +ttySo none network +ttySp none network +ttySq none network +ttySr none network +ttySs none network +ttySt none network +ttySu none network +ttySv none network diff --git a/etc/etc.powerpc/ttys b/etc/etc.powerpc/ttys index 96408ed7830..b85b2bfdac5 100644 --- a/etc/etc.powerpc/ttys +++ b/etc/etc.powerpc/ttys @@ -15,7 +15,7 @@ # # type The initial terminal type for this port. For hardwired # terminal lines, this will contain the type of terminal used. -# For virtual consoles, the correct type is typically cons25. +# For virtual consoles, the correct type is typically xterm. # Other common values include network for network connections on # pseudo-terminals, dialup for incoming modem ports, and unknown # when the terminal type cannot be predetermined. @@ -30,15 +30,15 @@ # when going to single-user mode. console none unknown off secure # -ttyv0 "/usr/libexec/getty Pc" cons25 on secure +ttyv0 "/usr/libexec/getty Pc" xterm on secure # Virtual terminals -ttyv1 "/usr/libexec/getty Pc" cons25 on secure -ttyv2 "/usr/libexec/getty Pc" cons25 on secure -ttyv3 "/usr/libexec/getty Pc" cons25 on secure -ttyv4 "/usr/libexec/getty Pc" cons25 on secure -ttyv5 "/usr/libexec/getty Pc" cons25 on secure -ttyv6 "/usr/libexec/getty Pc" cons25 on secure -ttyv7 "/usr/libexec/getty Pc" cons25 on secure +ttyv1 "/usr/libexec/getty Pc" xterm on secure +ttyv2 "/usr/libexec/getty Pc" xterm on secure +ttyv3 "/usr/libexec/getty Pc" xterm on secure +ttyv4 "/usr/libexec/getty Pc" xterm on secure +ttyv5 "/usr/libexec/getty Pc" xterm on secure +ttyv6 "/usr/libexec/getty Pc" xterm on secure +ttyv7 "/usr/libexec/getty Pc" xterm on secure #ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure # Serial terminals # The 'dialup' keyword identifies dialin lines to login, fingerd etc. diff --git a/etc/etc.sparc64/ttys b/etc/etc.sparc64/ttys index 99533a4b6eb..3deebf32563 100644 --- a/etc/etc.sparc64/ttys +++ b/etc/etc.sparc64/ttys @@ -15,7 +15,7 @@ # # type The initial terminal type for this port. For hardwired # terminal lines, this will contain the type of terminal used. -# For virtual consoles, the correct type is typically cons25. +# For virtual consoles, the correct type is typically xterm. # Other common values include network for network connections on # pseudo-terminals, dialup for incoming modem ports, and unknown # when the terminal type cannot be predetermined. @@ -34,15 +34,15 @@ screen "/usr/libexec/getty Pc" vt100 off secure ttya "/usr/libexec/getty 3wire.9600" vt100 off secure ttyb "/usr/libexec/getty 3wire.9600" vt100 off secure # syscons(4) -ttyv0 "/usr/libexec/getty Pc" cons25 on secure +ttyv0 "/usr/libexec/getty Pc" xterm on secure # Virtual terminals -ttyv1 "/usr/libexec/getty Pc" cons25 on secure -ttyv2 "/usr/libexec/getty Pc" cons25 on secure -ttyv3 "/usr/libexec/getty Pc" cons25 on secure -ttyv4 "/usr/libexec/getty Pc" cons25 on secure -ttyv5 "/usr/libexec/getty Pc" cons25 on secure -ttyv6 "/usr/libexec/getty Pc" cons25 on secure -ttyv7 "/usr/libexec/getty Pc" cons25 on secure +ttyv1 "/usr/libexec/getty Pc" xterm on secure +ttyv2 "/usr/libexec/getty Pc" xterm on secure +ttyv3 "/usr/libexec/getty Pc" xterm on secure +ttyv4 "/usr/libexec/getty Pc" xterm on secure +ttyv5 "/usr/libexec/getty Pc" xterm on secure +ttyv6 "/usr/libexec/getty Pc" xterm on secure +ttyv7 "/usr/libexec/getty Pc" xterm on secure ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure # Serial terminals # The 'dialup' keyword identifies dialin lines to login, fingerd etc. diff --git a/etc/mtree/BIND.chroot.dist b/etc/mtree/BIND.chroot.dist index e41a369a426..95423db5cd2 100644 --- a/etc/mtree/BIND.chroot.dist +++ b/etc/mtree/BIND.chroot.dist @@ -15,6 +15,8 @@ .. slave uname=bind .. + working uname=bind + .. .. .. /set type=dir uname=bind gname=wheel mode=0755 diff --git a/etc/mtree/BSD.usr.dist b/etc/mtree/BSD.usr.dist index d603ef0bb77..a0c18f205de 100644 --- a/etc/mtree/BSD.usr.dist +++ b/etc/mtree/BSD.usr.dist @@ -230,6 +230,12 @@ .. dyn_sysctl .. + firmware + fwconsumer + .. + fwimage + .. + .. syscall module .. @@ -259,8 +265,6 @@ .. ppp .. - pppd - .. printing .. scsi_target @@ -277,16 +281,10 @@ srcs .. .. - slattach - .. - sliplogin - .. smbfs print .. .. - startslip - .. sunrpc dir .. diff --git a/etc/mtree/BSD.var.dist b/etc/mtree/BSD.var.dist index 29b48622199..f55fbbb23b7 100644 --- a/etc/mtree/BSD.var.dist +++ b/etc/mtree/BSD.var.dist @@ -32,7 +32,7 @@ db entropy uname=operator gname=operator mode=0700 .. - freebsd-update + freebsd-update mode=0700 .. ipf mode=0700 .. diff --git a/etc/namedb/named.conf b/etc/namedb/named.conf index c9b09cba7ce..2fb72d8fce1 100644 --- a/etc/namedb/named.conf +++ b/etc/namedb/named.conf @@ -9,8 +9,9 @@ // or cause huge amounts of useless Internet traffic. options { - // Relative to the chroot directory, if any - directory "/etc/namedb"; + // All file and path names are relative to the chroot directory, + // if any, and should be fully qualified. + directory "/etc/namedb/working"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; @@ -74,7 +75,7 @@ options { // Also, make sure to enable it in /etc/rc.conf. // The traditional root hints mechanism. Use this, OR the slave zones below. -zone "." { type hint; file "named.root"; }; +zone "." { type hint; file "/etc/namedb/named.root"; }; /* Slaving the following zones from the root name servers has some significant advantages: @@ -94,7 +95,7 @@ zone "." { type hint; file "named.root"; }; /* zone "." { type slave; - file "slave/root.slave"; + file "/etc/namedb/slave/root.slave"; masters { 192.5.5.241; // F.ROOT-SERVERS.NET. }; @@ -102,7 +103,7 @@ zone "." { }; zone "arpa" { type slave; - file "slave/arpa.slave"; + file "/etc/namedb/slave/arpa.slave"; masters { 192.5.5.241; // F.ROOT-SERVERS.NET. }; @@ -110,7 +111,7 @@ zone "arpa" { }; zone "in-addr.arpa" { type slave; - file "slave/in-addr.arpa.slave"; + file "/etc/namedb/slave/in-addr.arpa.slave"; masters { 192.5.5.241; // F.ROOT-SERVERS.NET. }; @@ -125,116 +126,116 @@ zone "in-addr.arpa" { 2. No spurious traffic will be sent from your network to the roots */ // RFC 1912 -zone "localhost" { type master; file "master/localhost-forward.db"; }; -zone "127.in-addr.arpa" { type master; file "master/localhost-reverse.db"; }; -zone "255.in-addr.arpa" { type master; file "master/empty.db"; }; +zone "localhost" { type master; file "/etc/namedb/master/localhost-forward.db"; }; +zone "127.in-addr.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; +zone "255.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // RFC 1912-style zone for IPv6 localhost address -zone "0.ip6.arpa" { type master; file "master/localhost-reverse.db"; }; +zone "0.ip6.arpa" { type master; file "/etc/namedb/master/localhost-reverse.db"; }; // "This" Network (RFCs 1912 and 3330) -zone "0.in-addr.arpa" { type master; file "master/empty.db"; }; +zone "0.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // Private Use Networks (RFC 1918) -zone "10.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "16.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "17.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "18.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "19.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "20.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "21.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "22.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "23.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "24.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "25.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "26.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "27.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "28.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "29.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "30.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "31.172.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "168.192.in-addr.arpa" { type master; file "master/empty.db"; }; +zone "10.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "16.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "17.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "18.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "19.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "20.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "21.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "22.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "23.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "24.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "25.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "26.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "27.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "28.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "29.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "30.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "31.172.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "168.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // Link-local/APIPA (RFCs 3330 and 3927) -zone "254.169.in-addr.arpa" { type master; file "master/empty.db"; }; +zone "254.169.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // TEST-NET for Documentation (RFC 3330) -zone "2.0.192.in-addr.arpa" { type master; file "master/empty.db"; }; +zone "2.0.192.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // Router Benchmark Testing (RFC 3330) -zone "18.198.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "19.198.in-addr.arpa" { type master; file "master/empty.db"; }; +zone "18.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "19.198.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IANA Reserved - Old Class E Space -zone "240.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "241.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "242.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "243.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "244.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "245.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "246.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "247.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "248.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "249.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "250.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "251.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "252.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "253.in-addr.arpa" { type master; file "master/empty.db"; }; -zone "254.in-addr.arpa" { type master; file "master/empty.db"; }; +zone "240.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "241.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "242.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "243.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "244.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "245.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "246.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "247.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "248.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "249.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "250.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "251.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "252.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "253.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "254.in-addr.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IPv6 Unassigned Addresses (RFC 4291) -zone "1.ip6.arpa" { type master; file "master/empty.db"; }; -zone "3.ip6.arpa" { type master; file "master/empty.db"; }; -zone "4.ip6.arpa" { type master; file "master/empty.db"; }; -zone "5.ip6.arpa" { type master; file "master/empty.db"; }; -zone "6.ip6.arpa" { type master; file "master/empty.db"; }; -zone "7.ip6.arpa" { type master; file "master/empty.db"; }; -zone "8.ip6.arpa" { type master; file "master/empty.db"; }; -zone "9.ip6.arpa" { type master; file "master/empty.db"; }; -zone "a.ip6.arpa" { type master; file "master/empty.db"; }; -zone "b.ip6.arpa" { type master; file "master/empty.db"; }; -zone "c.ip6.arpa" { type master; file "master/empty.db"; }; -zone "d.ip6.arpa" { type master; file "master/empty.db"; }; -zone "e.ip6.arpa" { type master; file "master/empty.db"; }; -zone "0.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "1.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "2.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "3.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "4.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "5.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "6.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "7.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "8.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "9.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "a.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "b.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "0.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "1.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "2.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "3.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "4.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "5.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "6.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "7.e.f.ip6.arpa" { type master; file "master/empty.db"; }; +zone "1.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "3.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "4.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "5.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "6.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "7.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "8.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "9.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "a.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "b.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "c.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "d.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "e.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "0.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "1.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "2.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "3.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "4.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "5.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "6.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "7.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "8.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "9.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "a.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "b.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "0.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "1.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "2.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "3.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "4.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "5.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "6.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "7.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IPv6 ULA (RFC 4193) -zone "c.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "d.f.ip6.arpa" { type master; file "master/empty.db"; }; +zone "c.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "d.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IPv6 Link Local (RFC 4291) -zone "8.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "9.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "a.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "b.e.f.ip6.arpa" { type master; file "master/empty.db"; }; +zone "8.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "9.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "a.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "b.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IPv6 Deprecated Site-Local Addresses (RFC 3879) -zone "c.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "d.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "e.e.f.ip6.arpa" { type master; file "master/empty.db"; }; -zone "f.e.f.ip6.arpa" { type master; file "master/empty.db"; }; +zone "c.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "d.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "e.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; +zone "f.e.f.ip6.arpa" { type master; file "/etc/namedb/master/empty.db"; }; // IP6.INT is Deprecated (RFC 4159) -zone "ip6.int" { type master; file "master/empty.db"; }; +zone "ip6.int" { type master; file "/etc/namedb/master/empty.db"; }; // NB: Do not use the IP addresses below, they are faked, and only // serve demonstration/documentation purposes! @@ -265,17 +266,16 @@ zone "example.org" { allow-update { key "exampleorgkey"; }; - file "dynamic/example.org"; + file "/etc/namedb/dynamic/example.org"; }; */ /* Example of a slave reverse zone zone "1.168.192.in-addr.arpa" { type slave; - file "slave/1.168.192.in-addr.arpa"; + file "/etc/namedb/slave/1.168.192.in-addr.arpa"; masters { 192.168.1.1; }; }; */ - diff --git a/etc/namedb/named.root b/etc/namedb/named.root index 274a3eefd55..1c41c0e3fec 100644 --- a/etc/namedb/named.root +++ b/etc/namedb/named.root @@ -13,8 +13,8 @@ ; on server FTP.INTERNIC.NET ; -OR- RS.INTERNIC.NET ; -; last update: Feb 04, 2008 -; related version of root zone: 2008020400 +; last update: Dec 12, 2008 +; related version of root zone: 2008121200 ; ; formerly NS.INTERNIC.NET ; @@ -22,68 +22,69 @@ A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 A.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:BA3E::2:30 ; -; formerly NS1.ISI.EDU +; FORMERLY NS1.ISI.EDU ; . 3600000 NS B.ROOT-SERVERS.NET. B.ROOT-SERVERS.NET. 3600000 A 192.228.79.201 ; -; formerly C.PSI.NET +; FORMERLY C.PSI.NET ; . 3600000 NS C.ROOT-SERVERS.NET. C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 ; -; formerly TERP.UMD.EDU +; FORMERLY TERP.UMD.EDU ; . 3600000 NS D.ROOT-SERVERS.NET. D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 ; -; formerly NS.NASA.GOV +; FORMERLY NS.NASA.GOV ; . 3600000 NS E.ROOT-SERVERS.NET. E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 ; -; formerly NS.ISC.ORG +; FORMERLY NS.ISC.ORG ; . 3600000 NS F.ROOT-SERVERS.NET. F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 -F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2f::f +F.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:2F::F ; -; formerly NS.NIC.DDN.MIL +; FORMERLY NS.NIC.DDN.MIL ; . 3600000 NS G.ROOT-SERVERS.NET. G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 ; -; formerly AOS.ARL.ARMY.MIL +; FORMERLY AOS.ARL.ARMY.MIL ; . 3600000 NS H.ROOT-SERVERS.NET. H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53 -H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::803f:235 +H.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:1::803F:235 ; -; formerly NIC.NORDU.NET +; FORMERLY NIC.NORDU.NET ; . 3600000 NS I.ROOT-SERVERS.NET. I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 ; -; operated by VeriSign, Inc. +; OPERATED BY VERISIGN, INC. ; . 3600000 NS J.ROOT-SERVERS.NET. J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30 J.ROOT-SERVERS.NET. 3600000 AAAA 2001:503:C27::2:30 ; -; operated by RIPE NCC +; OPERATED BY RIPE NCC ; . 3600000 NS K.ROOT-SERVERS.NET. K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129 -K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7fd::1 +K.ROOT-SERVERS.NET. 3600000 AAAA 2001:7FD::1 ; -; operated by ICANN +; OPERATED BY ICANN ; . 3600000 NS L.ROOT-SERVERS.NET. L.ROOT-SERVERS.NET. 3600000 A 199.7.83.42 +L.ROOT-SERVERS.NET. 3600000 AAAA 2001:500:3::42 ; -; operated by WIDE +; OPERATED BY WIDE ; . 3600000 NS M.ROOT-SERVERS.NET. M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33 -M.ROOT-SERVERS.NET. 3600000 AAAA 2001:dc3::35 +M.ROOT-SERVERS.NET. 3600000 AAAA 2001:DC3::35 ; End of File diff --git a/etc/network.subr b/etc/network.subr index d2c2111d5f8..633559f8b96 100644 --- a/etc/network.subr +++ b/etc/network.subr @@ -971,7 +971,7 @@ clone_down() # childif_create() { - local cfg child child_wlans create_args debug_flags ifn i + local cfg child child_vlans child_wlans create_args debug_flags ifn i cfg=1 ifn=$1 @@ -999,6 +999,32 @@ childif_create() fi done + # Create vlan interfaces + child_vlans=`get_if_var $ifn vlans_IF` + + if [ -n "${child_vlans}" ]; then + load_kld if_vlan + fi + + for child in ${child_vlans}; do + if expr $child : '[1-9][0-9]*$' >/dev/null 2>&1; then + child="${ifn}.${child}" + create_args=`get_if_var $child create_args_IF` + ifconfig $child create ${create_args} && cfg=0 + else + create_args="vlandev $ifn `get_if_var $child create_args_IF`" + if expr $child : 'vlan[0-9][0-9]*$' >/dev/null 2>&1; then + ifconfig $child create ${create_args} && cfg=0 + else + i=`ifconfig vlan create ${create_args}` + ifconfig $i name $child && cfg=0 + fi + fi + if autoif $child; then + ifn_start $child + fi + done + return ${cfg} } @@ -1007,11 +1033,31 @@ childif_create() # childif_destroy() { - local cfg child child_wlans ifn + local cfg child child_vlans child_wlans ifn cfg=1 - child_wlans="`get_if_var $ifn wlans_IF` `get_if_var $ifn vaps_IF`" + child_wlans=`get_if_var $ifn wlans_IF` for child in ${child_wlans}; do + if ! ifexists $child; then + continue + fi + if autoif $child; then + ifn_stop $child + fi + ifconfig $child destroy && cfg=0 + done + + child_vlans=`get_if_var $ifn vlans_IF` + for child in ${child_vlans}; do + if expr $child : '[1-9][0-9]*$' >/dev/null 2>&1; then + child="${ifn}.${child}" + fi + if ! ifexists $child; then + continue + fi + if autoif $child; then + ifn_stop $child + fi ifconfig $child destroy && cfg=0 done diff --git a/etc/rc.d/Makefile b/etc/rc.d/Makefile index fbfac8ac83d..7f72303cf01 100755 --- a/etc/rc.d/Makefile +++ b/etc/rc.d/Makefile @@ -15,7 +15,7 @@ FILES= DAEMON FILESYSTEMS LOGIN NETWORKING SERVERS \ hcsecd \ hostapd hostid hostid_save hostname \ inetd initrandom \ - ip6addrctl ip6fw ipfilter ipfs ipfw ipmon \ + ip6addrctl ipfilter ipfs ipfw ipmon \ ipnat ipsec ipxrouted \ jail \ kadmind kerberos keyserv kldxref kpasswdd \ diff --git a/etc/rc.d/ip6fw b/etc/rc.d/ip6fw deleted file mode 100755 index ca95d368a2f..00000000000 --- a/etc/rc.d/ip6fw +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# - -# PROVIDE: ip6fw -# REQUIRE: routing -# KEYWORD: nojail - -. /etc/rc.subr - -name="ip6fw" -rcvar=`set_rcvar ipv6_firewall` -start_cmd="ip6fw_start" -stop_cmd="${SYSCTL_W} net.inet6.ip6.fw.enable=0" -required_modules="ipfw" - -ip6fw_start() -{ - # Specify default rules file if none provided - if [ -z "${ipv6_firewall_script}" ]; then - ipv6_firewall_script=/etc/rc.firewall6 - fi - - # Load rules - # - if [ -r "${ipv6_firewall_script}" ]; then - /bin/sh "${ipv6_firewall_script}" - echo 'IPv6 Firewall rules loaded.' - elif [ "`ipfw show 65535`" = "65535 deny ip from any to any" ]; then - warn 'IPv6 firewall rules have not been loaded. Default' \ - ' to DENY all access.' - fi - - # Enable firewall logging - # - if checkyesno ipv6_firewall_logging; then - echo 'IPv6 Firewall logging=YES' - sysctl net.inet.ip.fw.verbose=1 >/dev/null - fi - - # Enable the firewall - # - ${SYSCTL_W} net.inet6.ip6.fw.enable=1 -} - -load_rc_config $name -run_rc_command "$1" diff --git a/etc/rc.d/ipfw b/etc/rc.d/ipfw index 872f2787ab3..dd7ab55a400 100755 --- a/etc/rc.d/ipfw +++ b/etc/rc.d/ipfw @@ -17,6 +17,8 @@ start_precmd="ipfw_prestart" stop_cmd="ipfw_stop" required_modules="ipfw" +set_rcvar_obsolete ipv6_firewall_enable + ipfw_prestart() { if checkyesno dummynet_enable; then @@ -61,7 +63,13 @@ ipfw_start() # Enable the firewall # if ! ${SYSCTL_W} net.inet.ip.fw.enable=1 1>/dev/null 2>&1; then - warn "failed to enable firewall" + warn "failed to enable IPv4 firewall" + fi + if afexists inet6; then + if ! ${SYSCTL_W} net.inet6.ip6.fw.enable=1 1>/dev/null 2>&1 + then + warn "failed to enable IPv6 firewall" + fi fi } @@ -70,6 +78,9 @@ ipfw_stop() # Disable the firewall # ${SYSCTL_W} net.inet.ip.fw.enable=0 + if afexists inet6; then + ${SYSCTL_W} net.inet6.ip6.fw.enable=0 + fi if [ -f /etc/rc.d/natd ] ; then /etc/rc.d/natd quietstop fi diff --git a/etc/rc.d/named b/etc/rc.d/named index 65a13a54eb9..346b6fc9dd4 100755 --- a/etc/rc.d/named +++ b/etc/rc.d/named @@ -12,10 +12,9 @@ name="named" rcvar=named_enable -command="/usr/sbin/named" extra_commands="reload" -start_precmd="named_precmd" +start_precmd="named_prestart" start_postcmd="named_poststart" reload_cmd="named_reload" stop_cmd="named_stop" @@ -44,19 +43,19 @@ chroot_autoupdate() warn "chroot directory structure not updated" fi - # Create /etc/namedb symlink + # Create (or update) the configuration directory symlink # - if [ ! -L /etc/namedb ]; then - if [ -d /etc/namedb ]; then - warn "named chroot: /etc/namedb is a directory!" - elif [ -e /etc/namedb ]; then - warn "named chroot: /etc/namedb exists!" + if [ ! -L "${named_conf%/*}" ]; then + if [ -d "${named_conf%/*}" ]; then + warn "named chroot: ${named_conf%/*} is a directory!" + elif [ -e "${named_conf%/*}" ]; then + warn "named chroot: ${named_conf%/*} exists!" else - ln -s ${named_chrootdir}/etc/namedb /etc/namedb + ln -s ${named_confdir} ${named_conf%/*} fi else # Make sure it points to the right place. - ln -shf ${named_chrootdir}/etc/namedb /etc/namedb + ln -shf ${named_confdir} ${named_conf%/*} fi # Mount a devfs in the chroot directory if needed @@ -155,8 +154,17 @@ create_file () { chmod 644 $1 } -named_precmd() +named_prestart() { + command_args="-u ${named_uid:=root}" + + if [ ! "$named_conf" = '/etc/namedb/named.conf' ]; then + case "$named_flags" in + -c*|*' -c'*) ;; # No need to add it + *) command_args="-c $named_conf $command_args" ;; + esac + fi + local line nsip firstns # Is the user using a sandbox? @@ -170,13 +178,13 @@ named_precmd() # Create an rndc.key file for the user if none exists # - if [ -s "${named_chrootdir}/etc/namedb/rndc.conf" ]; then - return 0 - fi confgen_command="${command%/named}/rndc-confgen -a -b256 -u $named_uid \ - -c ${named_chrootdir}/etc/namedb/rndc.key" - if [ -s "${named_chrootdir}/etc/namedb/rndc.key" ]; then - case `stat -f%Su ${named_chrootdir}/etc/namedb/rndc.key` in + -c ${named_confdir}/rndc.key" + if [ -s "${named_confdir}/rndc.conf" ]; then + unset confgen_command + fi + if [ -s "${named_confdir}/rndc.key" ]; then + case `stat -f%Su ${named_confdir}/rndc.key` in root|$named_uid) ;; *) $confgen_command ;; esac @@ -190,8 +198,8 @@ named_precmd() warn "named_auto_forward enabled, but no /etc/resolv.conf" # Empty the file in case it is included in named.conf - [ -s "${named_chrootdir}/etc/namedb/auto_forward.conf" ] && - create_file ${named_chrootdir}/etc/namedb/auto_forward.conf + [ -s "${named_confdir}/auto_forward.conf" ] && + create_file ${named_confdir}/auto_forward.conf ${command%/named}/named-checkconf $named_conf || err 3 'named-checkconf for $named_conf failed' @@ -240,19 +248,19 @@ named_precmd() mv /var/run/naf-resolv.conf /etc/resolv.conf fi - if cmp -s ${named_chrootdir}/etc/namedb/auto_forward.conf \ + if cmp -s ${named_confdir}/auto_forward.conf \ /var/run/auto_forward.conf; then unlink /var/run/auto_forward.conf else - [ -e "${named_chrootdir}/etc/namedb/auto_forward.conf" ] && - unlink ${named_chrootdir}/etc/namedb/auto_forward.conf + [ -e "${named_confdir}/auto_forward.conf" ] && + unlink ${named_confdir}/auto_forward.conf mv /var/run/auto_forward.conf \ - ${named_chrootdir}/etc/namedb/auto_forward.conf + ${named_confdir}/auto_forward.conf fi else # Empty the file in case it is included in named.conf - [ -s "${named_chrootdir}/etc/namedb/auto_forward.conf" ] && - create_file ${named_chrootdir}/etc/namedb/auto_forward.conf + [ -s "${named_confdir}/auto_forward.conf" ] && + create_file ${named_confdir}/auto_forward.conf fi ${command%/named}/named-checkconf $named_conf || @@ -260,10 +268,12 @@ named_precmd() } load_rc_config $name + # Updating the following variables requires that rc.conf be loaded first # required_dirs="$named_chrootdir" # if it is set, it must exist +required_files="${named_conf:=/etc/namedb/named.conf}" pidfile="${named_pidfile:-/var/run/named/pid}" -command_args="-u ${named_uid:=root}" +named_confdir="${named_chrootdir}${named_conf%/*}" run_rc_command "$1" diff --git a/etc/rc.d/nsswitch b/etc/rc.d/nsswitch index 1540583c163..8b0b228d77d 100755 --- a/etc/rc.d/nsswitch +++ b/etc/rc.d/nsswitch @@ -77,10 +77,10 @@ generate_host_conf() nis) echo "nis" >> $host_conf ;; - *=*) + cache | *=*) ;; *) - printf "Warning: unrecognized source [%s]", $_s > "/dev/stderr" + printf "Warning: unrecognized source [%s]\n" $_s >&2 ;; esac done diff --git a/etc/rc.firewall b/etc/rc.firewall index bc700d1f8b2..639f559c538 100644 --- a/etc/rc.firewall +++ b/etc/rc.firewall @@ -85,12 +85,42 @@ setup_loopback () { ${fwcmd} add 100 pass all from any to any via lo0 ${fwcmd} add 200 deny all from any to 127.0.0.0/8 ${fwcmd} add 300 deny ip from 127.0.0.0/8 to any + if [ $ipv6_available -eq 0 ]; then + ${fwcmd} add 400 deny all from any to ::1 + ${fwcmd} add 500 deny all from ::1 to any + fi +} + +setup_ipv6_mandatory () { + [ $ipv6_available -eq 0 ] || return 0 + + ############ + # Only in rare cases do you want to change these rules + # + # ND + # + # DAD + ${fwcmd} add pass ipv6-icmp from :: to ff02::/16 + # RS, RA, NS, NA, redirect... + ${fwcmd} add pass ipv6-icmp from fe80::/10 to fe80::/10 + ${fwcmd} add pass ipv6-icmp from fe80::/10 to ff02::/16 + + # Allow ICMPv6 destination unreach + ${fwcmd} add pass ipv6-icmp from any to any icmp6types 1 + + # Allow NS/NA/toobig (don't filter it out) + ${fwcmd} add pass ipv6-icmp from any to any icmp6types 2,135,136 } if [ -n "${1}" ]; then firewall_type="${1}" fi +. /etc/rc.subr +. /etc/network.subr +afexists inet6 +ipv6_available=$? + ############ # Set quiet mode if requested # @@ -109,6 +139,7 @@ esac ${fwcmd} -f flush setup_loopback +setup_ipv6_mandatory ############ # Network Address Translation. All packets are passed to natd(8) @@ -166,11 +197,13 @@ case ${firewall_type} in # against people from outside your own network. # # Configuration: - # firewall_client_net: Network address of local network. + # firewall_client_net: Network address of local IPv4 network. + # firewall_client_net_ipv6: Network address of local IPv6 network. ############ # set this to your local network net="$firewall_client_net" + net6="$firewall_client_net_ipv6" # Allow limited broadcast traffic from my own net. ${fwcmd} add pass all from ${net} to 255.255.255.255 @@ -178,6 +211,16 @@ case ${firewall_type} in # Allow any traffic to or from my own net. ${fwcmd} add pass all from me to ${net} ${fwcmd} add pass all from ${net} to me + if [ -n "$net6" ]; then + ${fwcmd} add pass all from me6 to ${net6} + ${fwcmd} add pass all from ${net6} to me6 + fi + + if [ -n "$net6" ]; then + # Allow any link-local multicast traffic + ${fwcmd} add pass all from fe80::/10 to ff02::/16 + ${fwcmd} add pass all from ${net6} to ff02::/16 + fi # Allow TCP through if setup succeeded ${fwcmd} add pass tcp from any to any established @@ -187,18 +230,30 @@ case ${firewall_type} in # Allow setup of incoming email ${fwcmd} add pass tcp from any to me 25 setup + if [ -n "$net6" ]; then + ${fwcmd} add pass tcp from any to me6 25 setup + fi # Allow setup of outgoing TCP connections only ${fwcmd} add pass tcp from me to any setup + if [ -n "$net6" ]; then + ${fwcmd} add pass tcp from me6 to any setup + fi # Disallow setup of all other TCP connections ${fwcmd} add deny tcp from any to any setup # Allow DNS queries out in the world ${fwcmd} add pass udp from me to any 53 keep-state + if [ -n "$net6" ]; then + ${fwcmd} add pass udp from me6 to any 53 keep-state + fi # Allow NTP queries out in the world ${fwcmd} add pass udp from me to any 123 keep-state + if [ -n "$net6" ]; then + ${fwcmd} add pass udp from me6 to any 123 keep-state + fi # Everything else is denied by default, unless the # IPFIREWALL_DEFAULT_TO_ACCEPT option is set in your kernel @@ -212,23 +267,38 @@ case ${firewall_type} in # on the inside at this machine for those services. # # Configuration: - # firewall_simple_iif: Inside network interface. - # firewall_simple_inet: Inside network address. - # firewall_simple_oif: Outside network interface. - # firewall_simple_onet: Outside network address. + # firewall_simple_iif: Inside IPv4 network interface. + # firewall_simple_inet: Inside IPv4 network address. + # firewall_simple_oif: Outside IPv4 network interface. + # firewall_simple_onet: Outside IPv4 network address. + # firewall_simple_iif_ipv6: Inside IPv6 network interface. + # firewall_simple_inet_ipv6: Inside IPv6 network prefix. + # firewall_simple_oif_ipv6: Outside IPv6 network interface. + # firewall_simple_onet_ipv6: Outside IPv6 network prefix. ############ # set these to your outside interface network oif="$firewall_simple_oif" onet="$firewall_simple_onet" + oif6="${firewall_simple_oif_ipv6:-$firewall_simple_oif}" + onet6="$firewall_simple_onet_ipv6" # set these to your inside interface network iif="$firewall_simple_iif" inet="$firewall_simple_inet" + iif6="${firewall_simple_iif_ipv6:-$firewall_simple_iif}" + inet6="$firewall_simple_inet_ipv6" # Stop spoofing ${fwcmd} add deny all from ${inet} to any in via ${oif} ${fwcmd} add deny all from ${onet} to any in via ${iif} + if [ -n "$inet6" ]; then + ${fwcmd} add deny all from ${inet6} to any in via ${oif6} + if [ -n "$onet6" ]; then + ${fwcmd} add deny all from ${onet6} to any in \ + via ${iif6} + fi + fi # Stop RFC1918 nets on the outside interface ${fwcmd} add deny all from any to 10.0.0.0/8 via ${oif} @@ -254,7 +324,7 @@ case ${firewall_type} in case ${natd_enable} in [Yy][Ee][Ss]) if [ -n "${natd_interface}" ]; then - ${fwcmd} add divert natd all from any to any via ${natd_interface} + ${fwcmd} add divert natd ip4 from any to any via ${natd_interface} fi ;; esac @@ -273,6 +343,55 @@ case ${firewall_type} in ${fwcmd} add deny all from 224.0.0.0/4 to any via ${oif} ${fwcmd} add deny all from 240.0.0.0/4 to any via ${oif} + if [ -n "$inet6" ]; then + # Stop unique local unicast address on the outside interface + ${fwcmd} add deny all from fc00::/7 to any via ${oif6} + ${fwcmd} add deny all from any to fc00::/7 via ${oif6} + + # Stop site-local on the outside interface + ${fwcmd} add deny all from fec0::/10 to any via ${oif6} + ${fwcmd} add deny all from any to fec0::/10 via ${oif6} + + # Disallow "internal" addresses to appear on the wire. + ${fwcmd} add deny all from ::ffff:0.0.0.0/96 to any \ + via ${oif6} + ${fwcmd} add deny all from any to ::ffff:0.0.0.0/96 \ + via ${oif6} + + # Disallow packets to malicious IPv4 compatible prefix. + ${fwcmd} add deny all from ::224.0.0.0/100 to any via ${oif6} + ${fwcmd} add deny all from any to ::224.0.0.0/100 via ${oif6} + ${fwcmd} add deny all from ::127.0.0.0/104 to any via ${oif6} + ${fwcmd} add deny all from any to ::127.0.0.0/104 via ${oif6} + ${fwcmd} add deny all from ::0.0.0.0/104 to any via ${oif6} + ${fwcmd} add deny all from any to ::0.0.0.0/104 via ${oif6} + ${fwcmd} add deny all from ::255.0.0.0/104 to any via ${oif6} + ${fwcmd} add deny all from any to ::255.0.0.0/104 via ${oif6} + + ${fwcmd} add deny all from ::0.0.0.0/96 to any via ${oif6} + ${fwcmd} add deny all from any to ::0.0.0.0/96 via ${oif6} + + # Disallow packets to malicious 6to4 prefix. + ${fwcmd} add deny all from 2002:e000::/20 to any via ${oif6} + ${fwcmd} add deny all from any to 2002:e000::/20 via ${oif6} + ${fwcmd} add deny all from 2002:7f00::/24 to any via ${oif6} + ${fwcmd} add deny all from any to 2002:7f00::/24 via ${oif6} + ${fwcmd} add deny all from 2002:0000::/24 to any via ${oif6} + ${fwcmd} add deny all from any to 2002:0000::/24 via ${oif6} + ${fwcmd} add deny all from 2002:ff00::/24 to any via ${oif6} + ${fwcmd} add deny all from any to 2002:ff00::/24 via ${oif6} + + ${fwcmd} add deny all from 2002:0a00::/24 to any via ${oif6} + ${fwcmd} add deny all from any to 2002:0a00::/24 via ${oif6} + ${fwcmd} add deny all from 2002:ac10::/28 to any via ${oif6} + ${fwcmd} add deny all from any to 2002:ac10::/28 via ${oif6} + ${fwcmd} add deny all from 2002:c0a8::/32 to any via ${oif6} + ${fwcmd} add deny all from any to 2002:c0a8::/32 via ${oif6} + + ${fwcmd} add deny all from ff05::/16 to any via ${oif6} + ${fwcmd} add deny all from any to ff05::/16 via ${oif6} + fi + # Allow TCP through if setup succeeded ${fwcmd} add pass tcp from any to any established @@ -281,26 +400,47 @@ case ${firewall_type} in # Allow setup of incoming email ${fwcmd} add pass tcp from any to me 25 setup + if [ -n "$inet6" ]; then + ${fwcmd} add pass tcp from any to me6 25 setup + fi # Allow access to our DNS ${fwcmd} add pass tcp from any to me 53 setup ${fwcmd} add pass udp from any to me 53 ${fwcmd} add pass udp from me 53 to any + if [ -n "$inet6" ]; then + ${fwcmd} add pass tcp from any to me6 53 setup + ${fwcmd} add pass udp from any to me6 53 + ${fwcmd} add pass udp from me6 53 to any + fi # Allow access to our WWW ${fwcmd} add pass tcp from any to me 80 setup + if [ -n "$inet6" ]; then + ${fwcmd} add pass tcp from any to me6 80 setup + fi # Reject&Log all setup of incoming connections from the outside - ${fwcmd} add deny log tcp from any to any in via ${oif} setup + ${fwcmd} add deny log ip4 from any to any in via ${oif} setup proto tcp + if [ -n "$inet6" ]; then + ${fwcmd} add deny log ip6 from any to any in via ${oif6} \ + setup proto tcp + fi # Allow setup of any other TCP connection ${fwcmd} add pass tcp from any to any setup # Allow DNS queries out in the world ${fwcmd} add pass udp from me to any 53 keep-state + if [ -n "$inet6" ]; then + ${fwcmd} add pass udp from me6 to any 53 keep-state + fi # Allow NTP queries out in the world ${fwcmd} add pass udp from me to any 123 keep-state + if [ -n "$inet6" ]; then + ${fwcmd} add pass udp from me6 to any 123 keep-state + fi # Everything else is denied by default, unless the # IPFIREWALL_DEFAULT_TO_ACCEPT option is set in your kernel @@ -313,7 +453,7 @@ case ${firewall_type} in # offers services. # firewall_allowservices: List of IPs which has access to # $firewall_myservices. - # firewall_trusted: List of IPs which has full access + # firewall_trusted: List of IPv4s which has full access # to this host. Be very carefull # when setting this. This option can # seriously degrade the level of @@ -324,25 +464,44 @@ case ${firewall_type} in # firewall_nologports: List of TCP/UDP ports for which # denied incomming packets are not # logged. - + # firewall_trusted_ipv6: List of IPv6s which has full access + # to this host. Be very carefull + # when setting this. This option can + # seriously degrade the level of + # protection provided by the firewall. + # Allow packets for which a state has been built. ${fwcmd} add check-state # For services permitted below. ${fwcmd} add pass tcp from me to any established + if [ $ipv6_available -eq 0 ]; then + ${fwcmd} add pass tcp from me6 to any established + fi # Allow any connection out, adding state for each. ${fwcmd} add pass tcp from me to any setup keep-state ${fwcmd} add pass udp from me to any keep-state ${fwcmd} add pass icmp from me to any keep-state + if [ $ipv6_available -eq 0 ]; then + ${fwcmd} add pass tcp from me6 to any setup keep-state + ${fwcmd} add pass udp from me6 to any keep-state + ${fwcmd} add pass ipv6-icmp from me6 to any keep-state + fi # Allow DHCP. ${fwcmd} add pass udp from 0.0.0.0 68 to 255.255.255.255 67 out ${fwcmd} add pass udp from any 67 to me 68 in ${fwcmd} add pass udp from any 67 to 255.255.255.255 68 in + if [ $ipv6_available -eq 0 ]; then + ${fwcmd} add pass udp from fe80::/10 to me6 546 in + fi # Some servers will ping the IP while trying to decide if it's # still in use. ${fwcmd} add pass icmp from any to any icmptype 8 + if [ $ipv6_available -eq 0 ]; then + ${fwcmd} add pass ipv6-icmp from any to any icmp6type 128,129 + fi # Allow "mandatory" ICMP in. ${fwcmd} add pass icmp from any to any icmptype 3,4,11 @@ -361,6 +520,9 @@ case ${firewall_type} in for i in ${firewall_allowservices} ; do for j in ${firewall_myservices} ; do ${fwcmd} add pass tcp from $i to me $j + if [ $ipv6_available -eq 0 ]; then + ${fwcmd} add pass tcp from $i to me6 $j + fi done done @@ -370,7 +532,10 @@ case ${firewall_type} in for i in ${firewall_trusted} ; do ${fwcmd} add pass ip from $i to me done - + for i in ${firewall_trusted_ipv6} ; do + ${fwcmd} add pass all from $i to me6 + done + ${fwcmd} add 65000 count ip from any to any # Drop packets to ports where we don't want logging diff --git a/etc/rc.firewall6 b/etc/rc.firewall6 deleted file mode 100644 index 7498bbc68f5..00000000000 --- a/etc/rc.firewall6 +++ /dev/null @@ -1,295 +0,0 @@ -#!/bin/sh - -############ -# Setup system for IPv6 firewall service. -# $FreeBSD$ - -# Suck in the configuration variables. -if [ -z "${source_rc_confs_defined}" ]; then - if [ -r /etc/defaults/rc.conf ]; then - . /etc/defaults/rc.conf - source_rc_confs - elif [ -r /etc/rc.conf ]; then - . /etc/rc.conf - fi -fi - -############ -# Define the firewall type in /etc/rc.conf. Valid values are: -# open - will allow anyone in -# client - will try to protect just this machine -# simple - will try to protect a whole network -# closed - totally disables IP services except via lo0 interface -# UNKNOWN - disables the loading of firewall rules. -# filename - will load the rules in the given filename (full path required) -# -# For ``client'' and ``simple'' the entries below should be customized -# appropriately. - -############ -# -# If you don't know enough about packet filtering, we suggest that you -# take time to read this book: -# -# Building Internet Firewalls, 2nd Edition -# Brent Chapman and Elizabeth Zwicky -# -# O'Reilly & Associates, Inc -# ISBN 1-56592-871-7 -# http://www.ora.com/ -# http://www.oreilly.com/catalog/fire2/ -# -# For a more advanced treatment of Internet Security read: -# -# Firewalls and Internet Security: Repelling the Wily Hacker, 2nd Edition -# William R. Cheswick, Steven M. Bellowin, Aviel D. Rubin -# -# Addison-Wesley / Prentice Hall -# ISBN 0-201-63466-X -# http://www.pearsonhighered.com/ -# http://www.pearsonhighered.com/educator/academic/product/0,3110,020163466X,00.html -# - -setup_local () { - ############ - # Only in rare cases do you want to change these rules - # - ${fw6cmd} add 100 pass ip6 from any to any via lo0 - ${fw6cmd} add 200 deny ip6 from any to ::1 - ${fw6cmd} add 300 deny ip6 from ::1 to any - # - # ND - # - # DAD - ${fw6cmd} add pass ip6 from :: to ff02::/16 proto ipv6-icmp - # RS, RA, NS, NA, redirect... - ${fw6cmd} add pass ip6 from fe80::/10 to fe80::/10 proto ipv6-icmp - ${fw6cmd} add pass ip6 from fe80::/10 to ff02::/16 proto ipv6-icmp -} - -if [ -n "${1}" ]; then - ipv6_firewall_type="${1}" -fi - -############ -# Set quiet mode if requested -# -case ${ipv6_firewall_quiet} in -[Yy][Ee][Ss]) - fw6cmd="/sbin/ipfw -q" - ;; -*) - fw6cmd="/sbin/ipfw" - ;; -esac - -############ -# Flush out the list before we begin. -# -${fw6cmd} -f flush - -############ -# If you just configured ipfw in the kernel as a tool to solve network -# problems or you just want to disallow some particular kinds of traffic -# then you will want to change the default policy to open. You can also -# do this as your only action by setting the ipv6_firewall_type to ``open''. -# -# ${fw6cmd} add 65000 pass all from any to any - - -# Prototype setups. -# -case ${ipv6_firewall_type} in -[Oo][Pp][Ee][Nn]) - setup_local - ${fw6cmd} add 65000 pass ip6 from any to any - ;; - -[Cc][Ll][Ii][Ee][Nn][Tt]) - ############ - # This is a prototype setup that will protect your system somewhat - # against people from outside your own network. - ############ - - # set these to your network and prefixlen and ip - # - # This needs more work - # - net="2001:db8:2:1::" - prefixlen="64" - ip="2001:db8:2:1::1" - - setup_local - - # Allow any traffic to or from my own net. - ${fw6cmd} add pass ip6 from ${ip} to ${net}/${prefixlen} - ${fw6cmd} add pass ip6 from ${net}/${prefixlen} to ${ip} - - # Allow any link-local multicast traffic - ${fw6cmd} add pass ip6 from fe80::/10 to ff02::/16 - ${fw6cmd} add pass ip6 from ${net}/${prefixlen} to ff02::/16 - - # Allow TCP through if setup succeeded - ${fw6cmd} add pass ip6 from any to any established proto tcp - - # Allow IP fragments to pass through - ${fw6cmd} add pass ip6 from any to any frag - - # Allow setup of incoming email - ${fw6cmd} add pass ip6 from any to ${ip} 25 setup proto tcp - - # Allow setup of outgoing TCP connections only - ${fw6cmd} add pass ip6 from ${ip} to any setup proto tcp - - # Disallow setup of all other TCP connections - ${fw6cmd} add deny ip6 from any to any setup proto tcp - - # Allow DNS queries out in the world - ${fw6cmd} add pass ip6 from any 53 to ${ip} proto udp - ${fw6cmd} add pass ip6 from ${ip} to any 53 proto udp - - # Allow NTP queries out in the world - ${fw6cmd} add pass ip6 from any 123 to ${ip} proto udp - ${fw6cmd} add pass ip6 from ${ip} to any 123 proto udp - - # Allow ICMPv6 destination unreach - ${fw6cmd} add pass ip6 from any to any icmp6types 1 proto ipv6-icmp - - # Allow NS/NA/toobig (don't filter it out) - ${fw6cmd} add pass ip6 from any to any icmp6types 2,135,136 \ - proto ipv6-icmp - - # Everything else is denied by default, unless the - # IPV6FIREWALL_DEFAULT_TO_ACCEPT option is set in your kernel - # config file. - ;; - -[Ss][Ii][Mm][Pp][Ll][Ee]) - ############ - # This is a prototype setup for a simple firewall. Configure this - # machine as a DNS and NTP server, and point all the machines - # on the inside at this machine for those services. - ############ - - # set these to your outside interface network and prefixlen and ip - oif="ed0" - onet="2001:db8:2:1::" - oprefixlen="64" - oip="2001:db8:2:1::1" - - # set these to your inside interface network and prefixlen and ip - iif="ed1" - inet="2001:db8:2:2::" - iprefixlen="64" - iip="2001:db8:2:2::1" - - setup_local - - # Stop spoofing - ${fw6cmd} add deny ip6 from ${inet}/${iprefixlen} to any in via ${oif} - ${fw6cmd} add deny ip6 from ${onet}/${oprefixlen} to any in via ${iif} - - # Stop unique local unicast address on the outside interface - ${fw6cmd} add deny ip6 from fc00::/7 to any via ${oif} - ${fw6cmd} add deny ip6 from any to fc00::/7 via ${oif} - - # Stop site-local on the outside interface - ${fw6cmd} add deny ip6 from fec0::/10 to any via ${oif} - ${fw6cmd} add deny ip6 from any to fec0::/10 via ${oif} - - # Disallow "internal" addresses to appear on the wire. - ${fw6cmd} add deny ip6 from ::ffff:0.0.0.0/96 to any via ${oif} - ${fw6cmd} add deny ip6 from any to ::ffff:0.0.0.0/96 via ${oif} - - # Disallow packets to malicious IPv4 compatible prefix. - ${fw6cmd} add deny ip6 from ::224.0.0.0/100 to any via ${oif} - ${fw6cmd} add deny ip6 from any to ::224.0.0.0/100 via ${oif} - ${fw6cmd} add deny ip6 from ::127.0.0.0/104 to any via ${oif} - ${fw6cmd} add deny ip6 from any to ::127.0.0.0/104 via ${oif} - ${fw6cmd} add deny ip6 from ::0.0.0.0/104 to any via ${oif} - ${fw6cmd} add deny ip6 from any to ::0.0.0.0/104 via ${oif} - ${fw6cmd} add deny ip6 from ::255.0.0.0/104 to any via ${oif} - ${fw6cmd} add deny ip6 from any to ::255.0.0.0/104 via ${oif} - - ${fw6cmd} add deny ip6 from ::0.0.0.0/96 to any via ${oif} - ${fw6cmd} add deny ip6 from any to ::0.0.0.0/96 via ${oif} - - # Disallow packets to malicious 6to4 prefix. - ${fw6cmd} add deny ip6 from 2002:e000::/20 to any via ${oif} - ${fw6cmd} add deny ip6 from any to 2002:e000::/20 via ${oif} - ${fw6cmd} add deny ip6 from 2002:7f00::/24 to any via ${oif} - ${fw6cmd} add deny ip6 from any to 2002:7f00::/24 via ${oif} - ${fw6cmd} add deny ip6 from 2002:0000::/24 to any via ${oif} - ${fw6cmd} add deny ip6 from any to 2002:0000::/24 via ${oif} - ${fw6cmd} add deny ip6 from 2002:ff00::/24 to any via ${oif} - ${fw6cmd} add deny ip6 from any to 2002:ff00::/24 via ${oif} - - ${fw6cmd} add deny ip6 from 2002:0a00::/24 to any via ${oif} - ${fw6cmd} add deny ip6 from any to 2002:0a00::/24 via ${oif} - ${fw6cmd} add deny ip6 from 2002:ac10::/28 to any via ${oif} - ${fw6cmd} add deny ip6 from any to 2002:ac10::/28 via ${oif} - ${fw6cmd} add deny ip6 from 2002:c0a8::/32 to any via ${oif} - ${fw6cmd} add deny ip6 from any to 2002:c0a8::/32 via ${oif} - - ${fw6cmd} add deny ip6 from ff05::/16 to any via ${oif} - ${fw6cmd} add deny ip6 from any to ff05::/16 via ${oif} - - # Allow TCP through if setup succeeded - ${fw6cmd} add pass tcp from any to any established - - # Allow IP fragments to pass through - ${fw6cmd} add pass ip6 from any to any frag - - # Allow setup of incoming email - ${fw6cmd} add pass ip6 from any to ${oip} 25 setup proto tcp - - # Allow access to our DNS - ${fw6cmd} add pass ip6 from any to ${oip} 53 setup proto tcp - ${fw6cmd} add pass ip6 from any to ${oip} 53 proto udp - ${fw6cmd} add pass ip6 from ${oip} 53 to any proto udp - - # Allow access to our WWW - ${fw6cmd} add pass ip6 from any to ${oip} 80 setup proto tcp - - # Reject&Log all setup of incoming connections from the outside - ${fw6cmd} add deny log ip6 from any to any in via ${oif} setup \ - proto tcp - - # Allow setup of any other TCP connection - ${fw6cmd} add pass ip6 from any to any setup proto tcp - - # Allow DNS queries out in the world - ${fw6cmd} add pass ip6 from any 53 to ${oip} proto udp - ${fw6cmd} add pass ip6 from ${oip} to any 53 proto udp - - # Allow NTP queries out in the world - ${fw6cmd} add pass ip6 from any 123 to ${oip} proto udp - ${fw6cmd} add pass ip6 from ${oip} to any 123 proto udp - - # Allow RIPng - #${fw6cmd} add pass ip6 from fe80::/10 521 to ff02::9 521 proto udp - #${fw6cmd} add pass ip6 from fe80::/10 521 to fe80::/10 521 proto udp - - # Allow ICMPv6 destination unreach - ${fw6cmd} add pass ip6 from any to any icmp6types 1 proto ipv6-icmp - - # Allow NS/NA/toobig (don't filter it out) - ${fw6cmd} add pass ip6 from any to any icmp6types 2,135,136 \ - proto ipv6-icmp - - # Everything else is denied by default, unless the - # IPV6FIREWALL_DEFAULT_TO_ACCEPT option is set in your kernel - # config file. - ;; - -[Cc][Ll][Oo][Ss][Ee][Dd]) - # Only enable the loopback interface - ${fw6cmd} add 100 pass ip6 from any to any via lo0 - ;; -[Uu][Nn][Kk][Nn][Oo][Ww][Nn]) - ;; -*) - if [ -r "${ipv6_firewall_type}" ]; then - ${fw6cmd} ${ipv6_firewall_flags} ${ipv6_firewall_type} - fi - ;; -esac diff --git a/etc/rc.subr b/etc/rc.subr index f0a4b58eeb1..7c48c4e4654 100644 --- a/etc/rc.subr +++ b/etc/rc.subr @@ -390,7 +390,7 @@ wait_for_pids() _list=$_nlist echo -n ${_prefix:-"Waiting for PIDS: "}$_list _prefix=", " - sleep 2 + pwait $_list 2>/dev/null || sleep 2 done if [ -n "$_prefix" ]; then echo "." @@ -738,7 +738,7 @@ $command $rc_flags $command_args" if [ -n "$_nice" ]; then if [ -z "$_user" ]; then _doit="sh -c \"$_doit\"" - fi + fi _doit="nice -n $_nice $_doit" fi fi @@ -958,10 +958,11 @@ _run_rc_killcmd() # # run_rc_script file arg # Start the script `file' with `arg', and correctly handle the -# return value from the script. If `file' ends with `.sh', it's -# sourced into the current environment. If `file' appears to be -# a backup or scratch file, ignore it. Otherwise if it's -# executable run as a child process. +# return value from the script. +# If `file' ends with `.sh', it's sourced into the current environment +# when $rc_fast_and_loose is set, otherwise it is run as a child process. +# If `file' appears to be a backup or scratch file, ignore it. +# Otherwise if it is executable run as a child process. # run_rc_script() { @@ -1063,7 +1064,7 @@ load_rc_config() esac done } - + # # load_rc_config_var name var # Read the rc.conf(5) var for name and set in the diff --git a/etc/root/dot.profile b/etc/root/dot.profile index ab8431959c7..1fca58edc87 100644 --- a/etc/root/dot.profile +++ b/etc/root/dot.profile @@ -4,7 +4,7 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:~/b export PATH HOME=/root export HOME -TERM=${TERM:-cons25} +TERM=${TERM:-xterm} export TERM PAGER=more export PAGER diff --git a/etc/termcap.small b/etc/termcap.small index e2b35b8f5d0..d5114711759 100644 --- a/etc/termcap.small +++ b/etc/termcap.small @@ -291,32 +291,37 @@ pc3|ibmpc3|IBM PC 386BSD Console:\ :up=\E[A:\ :ut: -# $XFree86: xc/programs/xterm/termcap,v 3.28 2001/01/17 23:46:39 dawes Exp $ +# $XTermId: termcap,v 1.78 2009/11/09 00:24:26 tom Exp $ # -xterm-xfree86|XFree86 xterm:\ - :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\ - :k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\ - :k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:\ - :@7=\EOF:@8=\EOM:kI=\E[2~:\ - :kh=\EOH:kP=\E[5~:kN=\E[6~:\ - :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:Km=\E[M:tc=xterm-basic: +xterm-new|modern xterm:\ + :*6=\EOF:@7=\EOF:F1=\E[23~:F2=\E[24~:K2=\EOE:Km=\E[M:\ + :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:\ + :k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:kH=\EOF:kI=\E[2~:\ + :kN=\E[6~:kP=\E[5~:kd=\EOB:kh=\EOH:kl=\EOD:kr=\EOC:ku=\EOA:\ + :tc=xterm-basic: # # This chunk is used for building the VT220/Sun/PC keyboard variants. -xterm-basic|xterm common (XFree86):\ - :li#24:co#80:am:kn#12:km:mi:ms:xn:AX:bl=^G:\ - :is=\E[!p\E[?3;4l\E[4l\E>:rs=\E[!p\E[?3;4l\E[4l\E>:le=^H:\ - :AL=\E[%dL:DL=\E[%dM:DC=\E[%dP:al=\E[L:dc=\E[P:dl=\E[M:\ - :UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:\ - :ho=\E[H:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:\ - :im=\E[4h:ei=\E[4l:ks=\E[?1h\E=:ke=\E[?1l\E>:kD=\E[3~:kb=^H:\ - :sf=\n:sr=\EM:st=\EH:ct=\E[3g:sc=\E7:rc=\E8:\ - :eA=\E(B\E)0:as=\E(0:ae=\E(B:ml=\El:mu=\Em:up=\E[A:nd=\E[C:\ - :md=\E[1m:me=\E[m:mr=\E[7m:so=\E[7m:se=\E[27m:us=\E[4m:ue=\E[24m:\ - :ti=\E[?1049h:te=\E[?1049l:vi=\E[?25l:ve=\E[?25h:\ - :ut:Co#8:pa#64:op=\E[39;49m:AB=\E[4%dm:AF=\E[3%dm:\ +xterm-basic|modern xterm common:\ + :am:bs:km:mi:ms:ut:xn:AX:\ + :Co#8:co#80:kn#12:li#24:pa#64:\ + :AB=\E[4%dm:AF=\E[3%dm:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:\ + :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=\E(B:al=\E[L:\ + :as=\E(0:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\ + :cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:\ + :ei=\E[4l:ho=\E[H:im=\E[4h:is=\E[!p\E[?3;4l\E[4l\E>:\ + :kD=\E[3~:kb=^H:ke=\E[?1l\E>:ks=\E[?1h\E=:le=^H:md=\E[1m:\ + :me=\E[m:ml=\El:mr=\E[7m:mu=\Em:nd=\E[C:op=\E[39;49m:\ + :rc=\E8:rs=\E[!p\E[?3;4l\E[4l\E>:sc=\E7:se=\E[27m:sf=^J:\ + :so=\E[7m:sr=\EM:st=\EH:\ + :ue=\E[24m:up=\E[A:us=\E[4m:ve=\E[?12l\E[?25h:vi=\E[?25l:vs=\E[?12;25h: # # This is the only entry which you should have to customize, since "xterm" # is widely used for a variety of incompatible terminal emulations including # color_xterm and rxvt. -xterm|xterm-color|X11 terminal emulator:\ - :ti@:te@:tc=xterm-xfree86: +xterm|X11 terminal emulator:\ + :tc=xterm-new: +# +# Add the capability to "clear the screen" after exiting vi, more/less, etc. +xterm-clear:\ + :te=\E[?1049l:ti=\E[?1049h:\ + :tc=xterm-new: diff --git a/games/factor/factor.c b/games/factor/factor.c index e3aa90cb8be..1444d0be202 100644 --- a/games/factor/factor.c +++ b/games/factor/factor.c @@ -13,11 +13,7 @@ * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by the University of - * California, Berkeley and its contributors. - * 4. Neither the name of the University nor the names of its contributors + * 3. 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. * @@ -35,18 +31,20 @@ */ #ifndef lint -static const char copyright[] = -"@(#) Copyright (c) 1989, 1993\n\ - The Regents of the University of California. All rights reserved.\n"; -#endif /* not lint */ - -#ifndef lint -#if 0 -static char sccsid[] = "@(#)factor.c 8.4 (Berkeley) 5/4/95"; -__RCSID("$NetBSD: factor.c,v 1.13 2002/06/18 23:07:36 simonb Exp $"); +#include +#ifdef __COPYRIGHT +__COPYRIGHT("@(#) Copyright (c) 1989, 1993\ + The Regents of the University of California. All rights reserved."); +#endif +#ifdef __SCCSID +__SCCSID("@(#)factor.c 8.4 (Berkeley) 5/4/95"); +#endif +#ifdef __RCSID +__RCSID("$NetBSD: factor.c,v 1.19 2009/08/12 05:54:31 dholland Exp $"); +#endif +#ifdef __FBSDID +__FBSDID("$FreeBSD$"); #endif -static const char rcsid[] = - "$FreeBSD$"; #endif /* not lint */ /* @@ -63,7 +61,7 @@ static const char rcsid[] = * * number: factor1 factor1 factor2 factor3 factor3 factor3 ... * - * where factor1 < factor2 < factor3 < ... + * where factor1 <= factor2 <= factor3 <= ... * * If no args are given, the list of numbers are read from stdin. */ @@ -214,7 +212,9 @@ pr_fact(BIGNUM *val) bnfact = BN_new(); BN_set_word(bnfact, *(fact - 1)); BN_sqr(bnfact, bnfact, ctx); - if (BN_cmp(bnfact, val) > 0) + if (BN_cmp(bnfact, val) > 0 || + BN_is_prime(val, PRIME_CHECKS, + NULL, NULL, NULL) == 1) pr_print(val); else pollard_pminus1(val); @@ -257,22 +257,28 @@ usage(void) #ifdef HAVE_OPENSSL -/* pollard rho, algorithm from Jim Gillogly, May 2000 */ +/* pollard p-1, algorithm from Jim Gillogly, May 2000 */ static void pollard_pminus1(BIGNUM *val) { - BIGNUM *base, *num, *i, *x; + BIGNUM *base, *rbase, *num, *i, *x; base = BN_new(); + rbase = BN_new(); num = BN_new(); i = BN_new(); x = BN_new(); + BN_set_word(rbase, 1); +newbase: + BN_add_word(rbase, 1); BN_set_word(i, 2); - BN_set_word(base, 2); + BN_copy(base, rbase); for (;;) { BN_mod_exp(base, base, i, val, ctx); + if (BN_is_one(base)) + goto newbase; BN_copy(x, base); BN_sub_word(x, 1); diff --git a/games/fortune/datfiles/fortunes b/games/fortune/datfiles/fortunes index 7458fdaac66..06ec724f958 100644 --- a/games/fortune/datfiles/fortunes +++ b/games/fortune/datfiles/fortunes @@ -1695,14 +1695,6 @@ the Cat. "I don't care much where--" said Alice. "Then it doesn't matter which way you go," said the Cat. -- Lewis Carroll -% - COMMENT - -Oh, life is a glorious cycle of song, -A medley of extemporanea; -And love is thing that can never go wrong; -And I am Marie of Roumania. - -- Dorothy Parker % Concerning the war in Vietnam, Senator George Aiken of Vermont noted in January, 1966, "I'm not very keen for doves or hawks. I think we need more @@ -1922,22 +1914,6 @@ Christmas tree. The piano is missing. You want to keep your party somewhere around level 3, unless you rent your home and own Firearms, in which case you can go to level 4. The best way to get to level 3 is egg-nog. -% - FIGHTING WORDS - -Say my love is easy had, - Say I'm bitten raw with pride, -Say I am too often sad -- - Still behold me at your side. - -Say I'm neither brave nor young, - Say I woo and coddle care, -Say the devil touched my tongue -- - Still you have my heart to wear. - -But say my verses do not scan, - And I get me another man! - -- Dorothy Parker % "For I perceive that behind this seemingly unrelated sequence of events, there lurks a singular, sinister attitude of mind." @@ -2209,20 +2185,6 @@ full of money before." "Ran over a bottle." "Didn't you see it?" "Damn kid had it under his coat." -% - Hug O' War - -I will not play at tug o' war. -I'd rather play at hug o' war, -Where everyone hugs -Instead of tugs, -Where everyone giggles -And rolls on the rug, -Where everyone kisses, -And everyone grins, -And everyone cuddles, -And everyone wins. - -- Shel Silverstein % Human thinking can skip over a great deal, leap over small misunderstandings, can contain ifs and buts in untroubled corners of @@ -2676,33 +2638,6 @@ right any day." "Pity," said Arthur with sympathy. "It sounded like quite a good life-style otherwise." -- Douglas Adams, "The Hitchhiker's Guide to the Galaxy" -% - Insofar as I may be heard by anything, which may or may not care -what I say, I ask, if it matters, that you be forgiven for anything you -may have done or failed to do which requires forgiveness. Conversely, if -not forgiveness but something else may be required to insure any possible -benefit for which you may be eligible after the destruction of your body, -I ask this, whatever it may be, be granted or withheld, as the case may be, -in such a manner as to insure your receiving said benefit. I ask this in my -capacity as your elected intermediary between yourself and that which may -not be yourself, but which may have an interest in the matter of your -receiving as much as it is possible for you to receive of this thing, and -which may in some way be influenced by this ceremony. - Amen. - -- Roger Zelazny, "Creatures of Light and Darkness", 1969 -% - INVENTORY -Four be the things I am wiser to know: -Idleness, sorrow, a friend, and a foe. - -Four be the things I'd been better without: -Love, curiosity, freckles, and doubt. - -Three be the things I shall never attain: -Envy, content, and sufficient champagne. - -Three be the things I shall have till I die: -Laughter and hope and a sock in the eye. % "Is there any point to which you would wish to draw my attention?" "To the curious incident of the dog in the night-time." @@ -3982,28 +3917,6 @@ The center is very pleased with progress to date. They say they have almost succeeded in getting a VAX to think. However, sources inside the organization say that each time the machine fails to think it ceases to exist. -% - THE LESSER-KNOWN PROGRAMMING LANGUAGES #5: VALGOL -From its modest beginnings in Southern California's San Fernando Valley, -VALGOL is enjoying a dramatic surge of popularity across the industry. - -Here is a sample program: - LIKE, Y*KNOW(I MEAN)START - IF PIZZA = LIKE BITCHEN AND GUY = LIKE TUBULAR AND - VALLEY GIRL = LIKE GRODY**MAX(FERSURE)**2 THEN - FOR I = LIKE 1 TO OH*MAYBE 100 - DO*WAH - (DITTY**2) - BARF(I)=TOTALLY GROSS(OUT) - SURE - LIKE BAG THIS PROGRAM - REALLY - LIKE TOTALLY (Y*KNOW) - IM*SURE - GOTO THE MALL - -When the user makes a syntax error, the interpreter displays the message: - - GAG ME WITH A SPOON!! % THE LESSER-KNOWN PROGRAMMING LANGUAGES #8: LAIDBACK @@ -5335,9 +5248,6 @@ that he didn't force you down on the asking price. -- A plethora of individuals wither expertise in culinary techniques vitiated the potable concoction produced by steeping certain coupestibles. -- Eleemosynary deeds have their initial incidence intramurally. --- Male cadavers are incapable of yielding testimony. --- Individuals who make their abode in vitreous edifices would be well - advised to refrain from catapulting projectiles. % =============== ALL FRESHMEN PLEASE NOTE =============== @@ -11076,9 +10986,6 @@ Armstrong's Collection Law: If the check is truly in the mail, it is surely made out to someone else. % -Arnold's Addendum: - Anything not fitting into these categories causes cancer in rats. -% Arnold's Laws of Documentation: 1.) If it should exist, it doesn't. 2.) If it does exist, it's out of date. @@ -12654,7 +12561,7 @@ Boren's Laws: (2) When in trouble, delegate. (3) When in doubt, mumble. % -boss, n: +Boss, n: According to the Oxford English Dictionary, in the Middle Ages the words "boss" and "botch" were largely synonymous, except that boss, in addition to meaning "a supervisor of workers" also meant "an @@ -12935,7 +12842,7 @@ wrote the program. Fortunately, the second-to-last bug has just been fixed. -- Ray Simard % -bug, n: +Bug, n: An elusive creature living in a program that makes it incorrect. The activity of "debugging", or removing bugs from a program, ends when people get tired of doing it, not when the bugs are removed. @@ -13524,14 +13431,14 @@ only robust persons doing this thing is that it has killed all the others who have tried it. -- Ambrose Bierce, "The Devil's Dictionary" % - -Certain passages in several laws have always defied interpretation and the -most inexplicable must be a matter of opinion. A judge of the Court of -Session of Scotland has sent the editors of this book his candidate which -reads, "In the Nuts (unground), (other than ground nuts) Order, the expression -nuts shall have reference to such nuts, other than ground nuts, as would -but for this amending Order not qualify as nuts (unground) (other than ground -nuts) by reason of their being nuts (unground)." +Certain passages in several laws have always defied interpretation and +the most inexplicable must be a matter of opinion. A judge of the Court +of Session of Scotland has sent the editors of this book his candidate +which reads, "In the Nuts (unground), (other than ground nuts) Order, +the expression nuts shall have reference to such nuts, other than ground +nuts, as would but for this amending Order not qualify as nuts +(unground) (other than ground nuts) by reason of their being nuts +(unground)." -- Guinness Book of World Records, 1973 % Certainly the game is rigged. @@ -15057,17 +14964,6 @@ letter, or even 25 cents on a stamp! so post it as many places as you can. -- Emily Postnews Answers Your Questions on Netiquette % -Dear Sir, - I am firmly opposed to the spread of microchips either to the home or -to the office. We have more than enough of them foisted upon us in public -places. They are a disgusting Americanism, and can only result in the farmers -being forced to grow smaller potatoes, which in turn will cause massive un- -employment in the already severely depressed agricultural industry. - Yours faithfully, - Capt. Quinton D'Arcy, J.P. - Sevenoaks - -- Letters To The Editor, The Times of London -% Death before dishonor. But neither before breakfast. % @@ -17837,9 +17733,6 @@ Finagle's Eleventh Law: No matter what occurs, someone believes it happened according to his pet theory. % -Finagle's First Law: - If an experiment works, something has gone wrong. -% Finagle's First Law: To study a subject best, understand it thoroughly before you start. @@ -18173,9 +18066,6 @@ For children with short attention spans: boomerangs that don't come back. For courage mounteth with occasion. -- William Shakespeare, "King John" % -For every action, there is an equal and opposite criticism. - -- Harrison -% For every bloke who makes his mark, there's half a dozen waiting to rub it out. -- Andy Capp @@ -19520,17 +19410,6 @@ Your butt is on the menu And the check is in the mail. -- The Piranha Club Anthem, to the tune of "De Camptown Races" % -From the "Guinness Book of World Records", 1973: - -Certain passages in several laws have always defied interpretation and -the most inexplicable must be a matter of opinion. A judge of the -Court of Session of Scotland has sent the editors of this book his -candidate which reads, "In the Nuts (unground), (other than ground -nuts) Order, the expression nuts shall have reference to such nuts, -other than ground nuts, as would but for this amending Order not -qualify as nuts (unground)(other than ground nuts) by reason of their -being nuts (unground)." -% From the moment I picked your book up until I put it down I was convulsed with laughter. Some day I intend reading it. -- Groucho Marx, from "The Book of Insults" @@ -24035,21 +23914,6 @@ I may not be totally perfect, but parts of me are excellent. I met a wonderful new man. He's fictional, but you can't have everything. -- Cecelia, "The Purple Rose of Cairo" % -I met him in a swamp down in Dagobah -Where it bubbles all the time like a giant cabinet soda - S-O-D-A soda -I saw the little runt sitting there on a log -I asked him his name and in a raspy voice he said Yoda - Y-O-D-A Yoda, Yo-Yo-Yo-Yo Yoda - -Well I've been around but I ain't never seen -A guy who looks like a Muppet but he's wrinkled and green - Oh my Yoda, Yo-Yo-Yo-Yo Yoda -Well I'm not dumb but I can't understand -How he can raise me in the air just by raising his hand - Oh my Yoda, Yo-Yo-Yo-Yo Yoda, Yo-Yo-Yo-Yo Yoda - -- The STAR WARS Song, to "Lola", by the Kinks -% I met my latest girl friend in a department store. She was looking at clothes, and I was putting Slinkys on the escalators. -- Steven Wright @@ -24524,10 +24388,6 @@ are worth considering, to wit: "When paying tolls, remember that it is necessary to release the quarter a full 3 seconds before passing the basket if you are traveling more than 60 MPH." - -[110.13]: - "When traveling on a one-way street, stay to the right, so as not - to interfere with oncoming traffic." % I suppose some of the variation between Boston drivers and the rest of the country is due to the progressive Massachusetts Driver Education Manual which @@ -24620,12 +24480,6 @@ But only Schlitz can make a beer. I think that I shall never see A billboard lovely as a tree. Indeed, unless the billboards fall -I'll never see a tree at all. - -- Nash -% -I think that I shall never see -A billboard lovely as a tree. -Perhaps, unless the billboards fall I'll never see a tree at all. -- Ogden Nash % @@ -25892,21 +25746,6 @@ this is the case, then programmers stand on one another's toes, and software engineers dig each other's graves. -- Unknown % -If I have seen farther than others, it is because I was standing on the -shoulders of giants. - -- Isaac Newton - -In the sciences, we are now uniquely privileged to sit side by side -with the giants on whose shoulders we stand. - -- Gerald Holton - -If I have not seen as far as others, it is because giants were standing -on my shoulders. - -- Hal Abelson - -In computer science, we stand on each other's feet. - -- Brian K. Reid -% If I have to lay an egg for my country, I'll do it. -- Bob Hope % @@ -37634,7 +37473,7 @@ Pardo's First Postulate: fattening. Arnold's Addendum: - Everything else causes cancer in rats. + Anything not fitting into these categories causes cancer in rats. % Parents often talk about the younger generation as if they didn't have much of anything to do with it. @@ -39431,10 +39270,6 @@ A: A dope ring. Q: Why do blondes put their hair in ponytails? A: To cover up the valve stem. - -Q: Why did the blonde get so excited after she finished her jigsaw - puzzle in only 6 months? -A: Because on the box it said "From 2-4 years". % Q: What do you call a blind pre-historic animal? A: Diyathinkhesaurus. @@ -41467,25 +41302,6 @@ Spock: Affirmative. Kirk: Mr. Sulu, go to pass two. Sulu: Aye aye, sir, going to pass two. % -Scratch the disks, dump the core, Shut it down, pull the plug -Roll the tapes across the floor, Give the core an extra tug -And the system is going to crash. And the system is going to crash. -Teletypes smashed to bits. Mem'ry cards, one and all, -Give the scopes some nasty hits Toss out halfway down the hall -And the system is going to crash. And the system is going to crash. -And we've also found Just flip one switch -When you turn the power down, And the lights will cease to twitch -You turn the disk readers into trash. And the tape drives will crumble -Oh, it's so much fun, in a flash. -Now the CPU won't run When the CPU -And the system is going to crash. Can print nothing out but "foo," - The system is going to crash. - -- To The Caissons Go Rolling Along -% -Scratch the disks! -Drop the core! -Roll the tapes across the floor! -% Screw up your courage! You've screwed up everything else. % Scribline, n.: @@ -46662,7 +46478,8 @@ often turn to a related (but infinitely faster) language, COCAINE. % THE LESSER-KNOWN PROGRAMMING LANGUAGES #14 -- VALGOL - VALGOL is enjoying a dramatic surge of popularity across the + From its modest beginnings in Southern California's San Fernando +Valley VALGOL is enjoying a dramatic surge of popularity across the industry. VALGOL commands include REALLY, LIKE, WELL, and Y*KNOW. Variables are assigned with the =LIKE and =TOTALLY operators. Other operators include the "California booleans", AX and NOWAY. Loops are @@ -48369,9 +48186,6 @@ and peculiar sort of voluntary thinking. The solution of this problem is trivial and is left as an exercise for the reader. % -The solution to a problem changes the nature of the problem. - -- Peer -% The somewhat old and crusty vicar was taking a well-earned retirement from his rather old and crusty parish. As is usual in these cases, a locum was sent to cover the transition period. This particular man was young and @@ -52040,7 +51854,7 @@ yourself and that which may have an interest in the matter of your receiving as much as it is possible for you to receive of this thing, and which may in some way be influenced by this ceremony. Amen. - -- Roger Zelazny, "Creatures of Light and Darkness" + -- Roger Zelazny, "Creatures of Light and Darkness", 1969 % To understand a program you must become both the machine and the program. % @@ -56789,22 +56603,6 @@ I'd LOVE to, but... -- I'm teaching my ferret to yodel. -- My crayons all melted together. % -Why I Can't Go Out With You: - -I'd LOVE to, but ... - -- I have to floss my cat. - -- I've dedicated my life to linguini. - -- I need to spend more time with my blender. - -- it wouldn't be fair to the other Beautiful People. - -- it's my night to pet the dog/ferret/goldfish. - -- I'm going downtown to try on some gloves. - -- I have to check the freshness dates on my dairy products. - -- I'm going down to the bakery to watch the buns rise. - -- I have an appointment with a cuticle specialist. - -- I have some really hard words to look up. - -- I've got a Friends of the Lowly Rutabaga meeting. - -- I promised to help a friend fold road maps. -% Why is it called a funny bone when it hurts so much? % Why is it taking so long for her to bring out all the good in you? @@ -57859,9 +57657,6 @@ a private eye. Yeah, there are more important things in life than money, but they won't go out with you if you don't have any. % -YEAR: - A period of three hundred and sixty-five disappointments. -% Year Name James Bond Book ---- -------------------------------- -------------- ---- 50's James Bond TV Series Barry Nelson diff --git a/games/fortune/datfiles/fortunes-o.real b/games/fortune/datfiles/fortunes-o.real index dbfafcae703..a4fa29d01ca 100644 --- a/games/fortune/datfiles/fortunes-o.real +++ b/games/fortune/datfiles/fortunes-o.real @@ -662,6 +662,13 @@ posh hotel. "Anything for your wife, sir?" the bellhop asked. "Why, yes, young man," said the gentleman. "Would you bring me a postcard?" +% + As we know, there are known knowns. There are things we know we +know. We also know there are known unknowns. That is to say, we know +there're some things we do not know. But there're also unknown unknowns; +the ones we don't know we don't know." + -- United States Secretary of Defense Donald Rumsfeld + 12 February 2002, on the invasion to Iraq. % "Are pirates an ethnic group? Or are they just people who burn illegal cds?" @@ -12873,6 +12880,14 @@ Contraception", has been withdrawn after the Pope advised them to pull it out at the last minute. -- Not the Nine O'Clock News % +The investment community feels very putupon. They feel there is no +reason why they shouldn't earn $1 million to $200 million a year, +and they don't want to be held responsible for the global financial +meltdown. + -- Daniel Fass, Chairman of United States President + Barack Obama's financial-industry fundraising party + 20 October 2009 +% The king arranged a regal marriage for his daughter -- a bond that would unite two great kingdoms. Yet, because the young couple seemed so formal to each other, he posted a spy outside the royal wedding chamber and demanded a full diff --git a/games/fortune/strfile/strfile.c b/games/fortune/strfile/strfile.c index 2f09e3d6dd0..dd254a30dfd 100644 --- a/games/fortune/strfile/strfile.c +++ b/games/fortune/strfile/strfile.c @@ -146,7 +146,8 @@ static void usage(void); * CHUNKSIZE blocks; if the latter, we just write each pointer, * and then seek back to the beginning to write in the table. */ -int main(int ac, char *av[]) +int +main(int ac, char *av[]) { char *sp, dc; FILE *inf, *outf; @@ -264,9 +265,8 @@ int main(int ac, char *av[]) /* * This routine evaluates arguments from the command line */ -void getargs(argc, argv) -int argc; -char **argv; +void +getargs(int argc, char **argv) { int ch; @@ -318,7 +318,8 @@ char **argv; } } -void usage() +void +usage(void) { (void) fprintf(stderr, "strfile [-Ciorsx] [-c char] source_file [output_file]\n"); @@ -329,9 +330,8 @@ void usage() * add_offset: * Add an offset to the list, or write it out, as appropriate. */ -void add_offset(fp, off) -FILE *fp; -off_t off; +void +add_offset(FILE *fp, off_t off) { off_t beoff; @@ -349,7 +349,8 @@ off_t off; * do_order: * Order the strings alphabetically (possibly ignoring case). */ -void do_order() +void +do_order(void) { uint32_t i; off_t *lp; @@ -368,8 +369,8 @@ void do_order() Tbl.str_flags |= STR_ORDERED; } -static int stable_collate_range_cmp(c1, c2) - int c1, c2; +static int +stable_collate_range_cmp(int c1, int c2) { static char s1[2], s2[2]; int ret; @@ -385,8 +386,8 @@ static int stable_collate_range_cmp(c1, c2) * cmp_str: * Compare two strings in the file */ -int cmp_str(s1, s2) -const void *s1, *s2; +int +cmp_str(const void *s1, const void *s2) { const STR *p1, *p2; int c1, c2; @@ -441,7 +442,8 @@ const void *s1, *s2; * not to randomize across delimiter boundaries. All * randomization is done within each block. */ -void randomize() +void +randomize(void) { uint32_t cnt, i; off_t tmp; diff --git a/games/fortune/unstr/unstr.c b/games/fortune/unstr/unstr.c index 25996f4f6b9..fa7da82e8c1 100644 --- a/games/fortune/unstr/unstr.c +++ b/games/fortune/unstr/unstr.c @@ -79,7 +79,8 @@ FILE *Inf, *Dataf; void order_unstr(STRFILE *); /* ARGSUSED */ -int main(int ac, char **av) +int +main(int ac, char **av) { static STRFILE tbl; /* description table */ @@ -109,8 +110,8 @@ int main(int ac, char **av) exit(0); } -void order_unstr(tbl) -STRFILE *tbl; +void +order_unstr(STRFILE *tbl) { uint32_t i; char *sp; diff --git a/games/number/number.c b/games/number/number.c index d195a4f1e78..d30639e7e8c 100644 --- a/games/number/number.c +++ b/games/number/number.c @@ -125,8 +125,7 @@ main(int argc, char *argv[]) } void -convert(line) - char *line; +convert(char *line) { int flen, len, rval; char *p, *fraction; @@ -194,9 +193,7 @@ badnum: errx(1, "illegal number: %s", line); } int -unit(len, p) - int len; - char *p; +unit(int len, char *p) { int off, rval; @@ -230,9 +227,7 @@ unit(len, p) } int -number(p, len) - char *p; - int len; +number(char *p, int len) { int val, rval; @@ -270,8 +265,7 @@ number(p, len) } void -pfract(len) - int len; +pfract(int len) { static char const * const pref[] = { "", "ten-", "hundred-" }; @@ -289,7 +283,7 @@ pfract(len) } void -usage() +usage(void) { (void)fprintf(stderr, "usage: number [-l] [# ...]\n"); exit(1); diff --git a/games/pom/pom.6 b/games/pom/pom.6 index 1a5325b4b5a..e6bc957518c 100644 --- a/games/pom/pom.6 +++ b/games/pom/pom.6 @@ -32,15 +32,34 @@ .\" @(#)pom.6 8.1 (Berkeley) 5/31/93 .\" $FreeBSD$ .\" -.TH POM 6 "May 31, 1993" +.Dd May 31, 1993 +.Dt POM 6 .UC 7 -.SH NAME -pom \- display the phase of the moon -.SH SYNOPSIS -.B pom -.SH DESCRIPTION +.Sh NAME +.Nm pom +.Nd display the phase of the moon +.Sh SYNOPSIS +.Nm +.Op Fl d Ar yyyy.mm.dd +.Op Fl t Ar hh:mm:ss +.Sh DESCRIPTION The -.I pom +.Nm utility displays the current phase of the moon. Useful for selecting software completion target dates and predicting managerial behavior. +.Pp +Use the arguments +.Fl d +and +.Fl o +to specify a specific date and time for which the phase of the moon +has to be calculated. +If +.Fl d +but not +.Fl t +has been specified, it will calculate the phase of the moon on that +day at midnight. +.Sh SEE ALSO +`Practical Astronomy with Your Calculator' by Duffett-Smith. diff --git a/games/pom/pom.c b/games/pom/pom.c index d245f34bd7f..e9b2a5c286b 100644 --- a/games/pom/pom.c +++ b/games/pom/pom.c @@ -57,9 +57,13 @@ __FBSDID("$FreeBSD$"); * */ -#include #include +#include #include +#include +#include +#include +#include #ifndef PI #define PI 3.14159265358979323846 @@ -76,20 +80,62 @@ __FBSDID("$FreeBSD$"); static void adj360(double *); static double dtor(double); static double potm(double); +static void usage(char *progname); int -main(void) +main(int argc, char **argv) { time_t tt; - struct tm *GMT; + struct tm GMT, tmd; double days, today, tomorrow; - int cnt; + int ch, cnt; + char *odate = NULL, *otime = NULL; - (void) time(&tt); - GMT = gmtime(&tt); - days = (GMT->tm_yday + 1) + ((GMT->tm_hour + - (GMT->tm_min / 60.0) + (GMT->tm_sec / 3600.0)) / 24.0); - for (cnt = EPOCH; cnt < GMT->tm_year; ++cnt) + while ((ch = getopt(argc, argv, "d:t:")) != -1) + switch (ch) { + case 'd': + odate = optarg; + break; + case 't': + otime = optarg; + break; + default: + usage(argv[0]); + } + + argc -= optind; + argv += optind; + + if (argc) + usage(argv[0]); + + /* Adjust based on users preferences */ + time(&tt); + if (otime != NULL || odate != NULL) { + /* Save today in case -d isn't specified */ + localtime_r(&tt, &tmd); + + if (odate != NULL) { + tmd.tm_year = strtol(odate, NULL, 10) - 1900; + tmd.tm_mon = strtol(odate + 5, NULL, 10) - 1; + tmd.tm_mday = strtol(odate + 8, NULL, 10); + /* Use midnight as the middle of the night */ + tmd.tm_hour = 0; + tmd.tm_min = 0; + tmd.tm_sec = 0; + } + if (otime != NULL) { + tmd.tm_hour = strtol(otime, NULL, 10); + tmd.tm_min = strtol(otime + 3, NULL, 10); + tmd.tm_sec = strtol(otime + 6, NULL, 10); + } + tt = mktime(&tmd); + } + + gmtime_r(&tt, &GMT); + days = (GMT.tm_yday + 1) + ((GMT.tm_hour + + (GMT.tm_min / 60.0) + (GMT.tm_sec / 3600.0)) / 24.0); + for (cnt = EPOCH; cnt < GMT.tm_year; ++cnt) days += isleap(1900 + cnt) ? 366 : 365; today = potm(days) + .5; (void)printf("The Moon is "); @@ -160,6 +206,7 @@ potm(double days) static double dtor(double deg) { + return(deg * PI / 180); } @@ -170,6 +217,7 @@ dtor(double deg) static void adj360(double *deg) { + for (;;) if (*deg < 0) *deg += 360; @@ -178,3 +226,11 @@ adj360(double *deg) else break; } + +static void +usage(char *progname) +{ + + fprintf(stderr, "Usage: %s [-d yyyy.mm.dd] [-t hh:mm:ss]\n", progname); + exit(EX_USAGE); +} diff --git a/gnu/lib/libgcc/Makefile b/gnu/lib/libgcc/Makefile index 89e0edd21c1..51e76304655 100644 --- a/gnu/lib/libgcc/Makefile +++ b/gnu/lib/libgcc/Makefile @@ -301,7 +301,7 @@ CLEANFILES += cs-*.h option* #----------------------------------------------------------------------- # -# Build additional static libgcc_eh[_p].a librarries. +# Build symbol version map # SHLIB_MKMAP = ${GCCDIR}/mkmap-symver.awk SHLIB_MKMAP_OPTS = @@ -320,7 +320,7 @@ CLEANFILES += libgcc.map #----------------------------------------------------------------------- # -# Build additional static libgcc_eh[_p].a librarries. +# Build additional static libgcc_eh[_p].a libraries. # lib${LIB}_eh.a: ${EH_OBJS_T} @${ECHO} building static ${LIB}_eh library diff --git a/include/Makefile b/include/Makefile index 08ef6a5c768..68a7e8da035 100644 --- a/include/Makefile +++ b/include/Makefile @@ -18,20 +18,20 @@ INCS= a.out.h ar.h assert.h bitstring.h complex.h cpio.h _ctype.h ctype.h \ netdb.h nl_types.h nlist.h nss.h nsswitch.h paths.h \ printf.h proc_service.h pthread.h \ pthread_np.h pwd.h ranlib.h readpassphrase.h regex.h regexp.h \ - res_update.h resolv.h runetype.h search.h setjmp.h \ + res_update.h resolv.h runetype.h search.h semaphore.h setjmp.h \ signal.h spawn.h stab.h \ stdbool.h stddef.h stdio.h stdlib.h string.h stringlist.h \ - strings.h sysexits.h tar.h tgmath.h \ + strings.h sysexits.h tar.h termios.h tgmath.h \ time.h timeconv.h timers.h ttyent.h \ ulimit.h unistd.h utime.h utmp.h uuid.h varargs.h vis.h wchar.h \ wctype.h wordexp.h MHDRS= float.h floatingpoint.h stdarg.h -PHDRS= sched.h semaphore.h _semaphore.h +PHDRS= sched.h _semaphore.h LHDRS= aio.h errno.h fcntl.h linker_set.h poll.h stdint.h syslog.h \ - termios.h ucontext.h + ucontext.h LDIRS= bsm cam geom net net80211 netatalk netgraph netinet netinet6 \ netipsec ${_netipx} netnatm ${_netncp} netsmb \ diff --git a/include/dirent.h b/include/dirent.h index 63626b59bc7..375a3d2301b 100644 --- a/include/dirent.h +++ b/include/dirent.h @@ -93,9 +93,11 @@ typedef void * DIR; #ifndef _KERNEL __BEGIN_DECLS +#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 700 +int alphasort(const struct dirent **, const struct dirent **); +#endif #if __BSD_VISIBLE DIR *__opendir2(const char *, int); -int alphasort(const void *, const void *); int getdents(int, char *, int); int getdirentries(int, char *, int, long *); #endif @@ -107,9 +109,10 @@ struct dirent * int readdir_r(DIR *, struct dirent *, struct dirent **); #endif void rewinddir(DIR *); -#if __BSD_VISIBLE +#if __POSIX_VISIBLE >= 200809 || __XSI_VISIBLE >= 700 int scandir(const char *, struct dirent ***, - int (*)(struct dirent *), int (*)(const void *, const void *)); + int (*)(const struct dirent *), int (*)(const struct dirent **, + const struct dirent **)); #endif #if __XSI_VISIBLE void seekdir(DIR *, long); diff --git a/include/paths.h b/include/paths.h index a8a68a036dc..611021aed9a 100644 --- a/include/paths.h +++ b/include/paths.h @@ -42,7 +42,7 @@ /* Default search path. */ #define _PATH_DEFPATH "/usr/bin:/bin" /* All standard utilities path. */ -#define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin:" +#define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin" /* Locate system binaries. */ #define _PATH_SYSPATH "/sbin:/usr/sbin" diff --git a/include/semaphore.h b/include/semaphore.h new file mode 100644 index 00000000000..3531353d0d3 --- /dev/null +++ b/include/semaphore.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2010 David Xu + * + * 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 unmodified, 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* semaphore.h: POSIX 1003.1b semaphores */ + +#ifndef _SEMAPHORE_H_ +#define _SEMAPHORE_H_ + +#include +#include +#include + +struct _sem { + __uint32_t _magic; + struct _usem _kern; +}; + +typedef struct _sem sem_t; + +#define SEM_FAILED ((sem_t *)0) +#define SEM_VALUE_MAX __INT_MAX + +struct timespec; + +__BEGIN_DECLS +int sem_close(sem_t *); +int sem_destroy(sem_t *); +int sem_getvalue(sem_t * __restrict, int * __restrict); +int sem_init(sem_t *, int, unsigned int); +sem_t *sem_open(const char *, int, ...); +int sem_post(sem_t *); +int sem_timedwait(sem_t * __restrict, const struct timespec * __restrict); +int sem_trywait(sem_t *); +int sem_unlink(const char *); +int sem_wait(sem_t *); +__END_DECLS + +#endif /* !_SEMAPHORE_H_ */ diff --git a/include/signal.h b/include/signal.h index fdb4b3ed6d0..13742c6c631 100644 --- a/include/signal.h +++ b/include/signal.h @@ -99,7 +99,12 @@ int sigwaitinfo(const sigset_t * __restrict, siginfo_t * __restrict); #if __XSI_VISIBLE int killpg(__pid_t, int); int sigaltstack(const stack_t * __restrict, stack_t * __restrict); +int sighold(int); +int sigignore(int); int sigpause(int); +int sigrelse(int); +void (*sigset(int, void (*)(int)))(int); +int xsi_sigpause(int); #endif #if __XSI_VISIBLE >= 600 diff --git a/include/strings.h b/include/strings.h index 078ce1b5f5f..f2720786f09 100644 --- a/include/strings.h +++ b/include/strings.h @@ -46,7 +46,7 @@ void bzero(void *, size_t); /* LEGACY */ #if __XSI_VISIBLE int ffs(int) __pure2; #endif -#ifdef __BSD_VISIBLE +#if __BSD_VISIBLE int ffsl(long) __pure2; int ffsll(long long) __pure2; int fls(int) __pure2; diff --git a/include/termios.h b/include/termios.h new file mode 100644 index 00000000000..d8c901050eb --- /dev/null +++ b/include/termios.h @@ -0,0 +1,100 @@ +/*- + * Copyright (c) 1988, 1989, 1993, 1994 + * The 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. + * + * @(#)termios.h 8.3 (Berkeley) 3/28/94 + * $FreeBSD$ + */ + +#ifndef _TERMIOS_H_ +#define _TERMIOS_H_ + +#include +#include +#include + +#ifndef _PID_T_DECLARED +typedef __pid_t pid_t; +#define _PID_T_DECLARED +#endif + +#ifndef _POSIX_SOURCE +#define OXTABS TAB3 +#define MDMBUF CCAR_OFLOW +#endif + +#ifndef _POSIX_SOURCE +#define CCEQ(val, c) ((c) == (val) && (val) != _POSIX_VDISABLE) +#endif + +/* + * Commands passed to tcsetattr() for setting the termios structure. + */ +#define TCSANOW 0 /* make change immediate */ +#define TCSADRAIN 1 /* drain output, then change */ +#define TCSAFLUSH 2 /* drain output, flush input */ +#ifndef _POSIX_SOURCE +#define TCSASOFT 0x10 /* flag - don't alter h.w. state */ +#endif + +#define TCIFLUSH 1 +#define TCOFLUSH 2 +#define TCIOFLUSH 3 +#define TCOOFF 1 +#define TCOON 2 +#define TCIOFF 3 +#define TCION 4 + +__BEGIN_DECLS +speed_t cfgetispeed(const struct termios *); +speed_t cfgetospeed(const struct termios *); +int cfsetispeed(struct termios *, speed_t); +int cfsetospeed(struct termios *, speed_t); +int tcgetattr(int, struct termios *); +int tcsetattr(int, int, const struct termios *); +int tcdrain(int); +int tcflow(int, int); +int tcflush(int, int); +int tcsendbreak(int, int); + +#if __POSIX_VISIBLE >= 200112 || __BSD_VISIBLE +pid_t tcgetsid(int); +#endif +#if __BSD_VISIBLE +int tcsetsid(int, pid_t); + +void cfmakeraw(struct termios *); +int cfsetspeed(struct termios *, speed_t); +#endif +__END_DECLS + +#endif /* !_TERMIOS_H_ */ + +#ifndef _POSIX_SOURCE +#include +#include +#endif diff --git a/lib/Makefile b/lib/Makefile index 00b1c6089b3..07fe026366f 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -21,6 +21,7 @@ # librpcsvc must be built before libpam. # libsbuf must be built before libcam. # libtacplus must be built before libpam. +# libulog must be built before libpam. # libutil must be built before libpam. # libypclnt must be built before libpam. # libgssapi must be built before librpcsec_gss @@ -30,8 +31,8 @@ SUBDIR= ${_csu} libc libbsm libauditd libcom_err libcrypt libelf libkvm msun \ libmd \ ncurses ${_libnetgraph} libradius librpcsvc libsbuf \ - libtacplus libutil ${_libypclnt} libalias libarchive ${_libatm} \ - libbegemot ${_libbluetooth} ${_libbsnmp} libbz2 \ + libtacplus libulog libutil ${_libypclnt} libalias libarchive \ + ${_libatm} libbegemot ${_libbluetooth} ${_libbsnmp} libbz2 \ libcalendar libcam libcompat libdevinfo libdevstat libdisk \ libdwarf libedit libexpat libfetch libftpio libgeom ${_libgpib} \ ${_libgssapi} ${_librpcsec_gss} libipsec \ diff --git a/lib/Makefile.inc b/lib/Makefile.inc index e9cf750939c..d77e2dbd15d 100644 --- a/lib/Makefile.inc +++ b/lib/Makefile.inc @@ -1,3 +1,5 @@ # $FreeBSD$ # Default version for system libs (override in /Makefile if necessary) SHLIB_MAJOR?= 5 + +WARNS?= 6 diff --git a/lib/bind/config.h b/lib/bind/config.h index 8e524266918..1d68450eafb 100644 --- a/lib/bind/config.h +++ b/lib/bind/config.h @@ -277,6 +277,10 @@ int sigwait(const unsigned int *set, int *sig); /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + /* Defined if extern char *optarg is not declared. */ /* #undef NEED_OPTARG */ diff --git a/lib/csu/Makefile.inc b/lib/csu/Makefile.inc index 3545446762d..51e9fdfa747 100644 --- a/lib/csu/Makefile.inc +++ b/lib/csu/Makefile.inc @@ -1,3 +1,5 @@ # $FreeBSD$ SSP_CFLAGS= + +WARNS?= 6 diff --git a/lib/csu/amd64/Makefile b/lib/csu/amd64/Makefile index 71ccd675b31..1a74efcbcab 100644 --- a/lib/csu/amd64/Makefile +++ b/lib/csu/amd64/Makefile @@ -4,7 +4,7 @@ SRCS= crt1.c crti.S crtn.S OBJS= ${SRCS:N*.h:R:S/$/.o/g} -OBJS+= gcrt1.o +OBJS+= Scrt1.o gcrt1.o CFLAGS+= -I${.CURDIR}/../common \ -I${.CURDIR}/../../libc/include CFLAGS+= -fno-omit-frame-pointer @@ -16,6 +16,9 @@ CLEANFILES= ${OBJS} gcrt1.o: crt1.c ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.CURDIR}/crt1.c +Scrt1.o: crt1.c + ${CC} ${CFLAGS} -fPIC -DPIC -c -o Scrt1.o ${.CURDIR}/crt1.c + realinstall: ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ ${OBJS} ${DESTDIR}${LIBDIR} diff --git a/lib/csu/arm/Makefile b/lib/csu/arm/Makefile index 23954e840f3..da0eb125ce8 100644 --- a/lib/csu/arm/Makefile +++ b/lib/csu/arm/Makefile @@ -4,11 +4,13 @@ SRCS= crt1.c crti.S crtn.S OBJS= ${SRCS:N*.h:R:S/$/.o/g} -OBJS+= gcrt1.o +OBJS+= Scrt1.o gcrt1.o CFLAGS+= -Wall -Wno-unused \ -I${.CURDIR}/../common \ -I${.CURDIR}/../../libc/include +WARNS?= 2 + all: ${OBJS} CLEANFILES= ${OBJS} @@ -16,6 +18,9 @@ CLEANFILES= ${OBJS} gcrt1.o: crt1.c ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.ALLSRC} +Scrt1.o: crt1.c + ${CC} ${CFLAGS} -fPIC -DPIC -c -o Scrt1.o ${.ALLSRC} + realinstall: ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ ${OBJS} ${DESTDIR}${LIBDIR} diff --git a/lib/csu/i386-elf/Makefile b/lib/csu/i386-elf/Makefile index 8598ce8552f..8e6f50d57dd 100644 --- a/lib/csu/i386-elf/Makefile +++ b/lib/csu/i386-elf/Makefile @@ -2,18 +2,31 @@ .PATH: ${.CURDIR}/../common -SRCS= crt1.c crti.S crtn.S -FILES= ${SRCS:N*.h:R:S/$/.o/g} gcrt1.o +SRCS= crti.S crtn.S +FILES= ${SRCS:N*.h:R:S/$/.o/g} gcrt1.o crt1.o Scrt1.o FILESOWN= ${LIBOWN} FILESGRP= ${LIBGRP} FILESMODE= ${LIBMODE} FILESDIR= ${LIBDIR} -WARNS?= 6 CFLAGS+= -I${.CURDIR}/../common \ -I${.CURDIR}/../../libc/include -CLEANFILES= ${FILES} +CLEANFILES= ${FILES} crt1_c.o crt1_s.o gcrt1_c.o Scrt1_c.o -gcrt1.o: crt1.c - ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.CURDIR}/crt1.c +gcrt1_c.o: crt1_c.c + ${CC} ${CFLAGS} -DGCRT -c -o gcrt1_c.o ${.CURDIR}/crt1_c.c + +gcrt1.o: gcrt1_c.o crt1_s.o + ${LD} ${LDFLAGS} -o gcrt1.o -r crt1_s.o gcrt1_c.o + +crt1.o: crt1_c.o crt1_s.o + ${LD} ${LDFLAGS} -o crt1.o -r crt1_s.o crt1_c.o + objcopy --localize-symbol _start1 crt1.o + +Scrt1_c.o: crt1_c.c + ${CC} ${CFLAGS} -DGCRT -fPIC -DPIC -c -o Scrt1_c.o ${.CURDIR}/crt1_c.c + +Scrt1.o: Scrt1_c.o crt1_s.o + ${LD} ${LDFLAGS} -o Scrt1.o -r crt1_s.o Scrt1_c.o + objcopy --localize-symbol _start1 Scrt1.o .include diff --git a/lib/csu/i386-elf/crt1.c b/lib/csu/i386-elf/crt1_c.c similarity index 83% rename from lib/csu/i386-elf/crt1.c rename to lib/csu/i386-elf/crt1_c.c index 093433330e3..c38f267c8e3 100644 --- a/lib/csu/i386-elf/crt1.c +++ b/lib/csu/i386-elf/crt1_c.c @@ -22,6 +22,8 @@ * 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. + * + * $FreeBSD$ */ #ifndef lint @@ -55,35 +57,15 @@ extern int etext; char **environ; const char *__progname = ""; -static __inline fptr -get_rtld_cleanup(void) -{ - fptr retval; +void _start1(fptr, int, char *[]) __dead2; -#ifdef __GNUC__ - __asm__("movl %%edx,%0" : "=rm"(retval)); -#else - retval = (fptr)0; /* XXXX Fix this for other compilers */ -#endif - return(retval); -} - -/* The entry function. */ +/* The entry function, C part. */ void -_start(char *ap, ...) +_start1(fptr cleanup, int argc, char *argv[]) { - fptr cleanup; - int argc; - char **argv; char **env; const char *s; -#ifdef __GNUC__ - __asm__("and $0xfffffff0,%esp"); -#endif - cleanup = get_rtld_cleanup(); - argv = ≈ - argc = *(long *)(void *)(argv - 1); env = argv + argc + 1; environ = env; if (argc > 0 && argv[0] != NULL) { @@ -110,4 +92,4 @@ __asm__("eprol:"); exit( main(argc, argv, env) ); } -__asm__(".ident\t\"$FreeBSD$\""); +__asm(".hidden _start1"); diff --git a/sys/boot/pc98/boot2/probe_keyboard.c b/lib/csu/i386-elf/crt1_s.S similarity index 70% rename from sys/boot/pc98/boot2/probe_keyboard.c rename to lib/csu/i386-elf/crt1_s.S index f10329683a8..2af8a1bc83a 100644 --- a/sys/boot/pc98/boot2/probe_keyboard.c +++ b/lib/csu/i386-elf/crt1_s.S @@ -1,18 +1,16 @@ -/* - * Copyright (c) KATO Takenori, 1994-1995. All rights reserved. - * +/*- + * Copyright 2009 Konstantin Belousov. + * 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 as - * the first lines of this file unmodified. + * 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. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. @@ -23,20 +21,24 @@ * 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. + * + * $FreeBSD$ */ -#include -__FBSDID("$FreeBSD$"); -#include "boot.h" - -int probe_keyboard(void) -{ - /* - * New type (RA and later) keyboard only! - */ - if (*(unsigned char*)V(0xA1481) & 0x48) - return 0; - return 1; /* keyboard not found */ -} + .text + .align 4 + .globl _start + .type _start, @function +_start: xorl %ebp,%ebp + pushl %ebp + movl %esp,%ebp + andl $0xfffffff0,%esp # align stack + leal 8(%ebp),%eax + pushl %eax # argv + pushl 4(%ebp) # argc + pushl %edx # rtld cleanup + call _start1 + .size _start, . - _start + .ident "$FreeBSD$" diff --git a/lib/csu/ia64/Makefile b/lib/csu/ia64/Makefile index c906c094267..d79510399db 100644 --- a/lib/csu/ia64/Makefile +++ b/lib/csu/ia64/Makefile @@ -4,7 +4,7 @@ SRCS= crt1.S crti.S crtn.S OBJS= ${SRCS:N*.h:R:S/$/.o/g} -OBJS+= gcrt1.o +OBJS+= Scrt1.o gcrt1.o CFLAGS+= -Wall -Wno-unused \ -I${.CURDIR}/../common \ -I${.CURDIR}/../../libc/include @@ -16,6 +16,9 @@ CLEANFILES= ${OBJS} gcrt1.o: crt1.S ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.ALLSRC} +Scrt1.o: crt1.S + ${CC} ${CFLAGS} -fPIC -DPIC -c -o Scrt1.o ${.ALLSRC} + realinstall: ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ ${OBJS} ${DESTDIR}${LIBDIR} diff --git a/lib/csu/mips/Makefile b/lib/csu/mips/Makefile index 23954e840f3..da0eb125ce8 100644 --- a/lib/csu/mips/Makefile +++ b/lib/csu/mips/Makefile @@ -4,11 +4,13 @@ SRCS= crt1.c crti.S crtn.S OBJS= ${SRCS:N*.h:R:S/$/.o/g} -OBJS+= gcrt1.o +OBJS+= Scrt1.o gcrt1.o CFLAGS+= -Wall -Wno-unused \ -I${.CURDIR}/../common \ -I${.CURDIR}/../../libc/include +WARNS?= 2 + all: ${OBJS} CLEANFILES= ${OBJS} @@ -16,6 +18,9 @@ CLEANFILES= ${OBJS} gcrt1.o: crt1.c ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.ALLSRC} +Scrt1.o: crt1.c + ${CC} ${CFLAGS} -fPIC -DPIC -c -o Scrt1.o ${.ALLSRC} + realinstall: ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ ${OBJS} ${DESTDIR}${LIBDIR} diff --git a/lib/csu/powerpc/Makefile b/lib/csu/powerpc/Makefile index 23954e840f3..097f82df1f9 100644 --- a/lib/csu/powerpc/Makefile +++ b/lib/csu/powerpc/Makefile @@ -4,7 +4,7 @@ SRCS= crt1.c crti.S crtn.S OBJS= ${SRCS:N*.h:R:S/$/.o/g} -OBJS+= gcrt1.o +OBJS+= Scrt1.o gcrt1.o CFLAGS+= -Wall -Wno-unused \ -I${.CURDIR}/../common \ -I${.CURDIR}/../../libc/include @@ -16,6 +16,9 @@ CLEANFILES= ${OBJS} gcrt1.o: crt1.c ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.ALLSRC} +Scrt1.o: crt1.c + ${CC} ${CFLAGS} -fPIC -DPIC -c -o Scrt1.o ${.ALLSRC} + realinstall: ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ ${OBJS} ${DESTDIR}${LIBDIR} diff --git a/lib/csu/sparc64/Makefile b/lib/csu/sparc64/Makefile index 2e1d03f9cb6..7f8dd7a5483 100644 --- a/lib/csu/sparc64/Makefile +++ b/lib/csu/sparc64/Makefile @@ -4,7 +4,7 @@ SRCS= crt1.c crti.S crtn.S OBJS= ${SRCS:N*.h:R:S/$/.o/g} -OBJS+= gcrt1.o +OBJS+= Scrt1.o gcrt1.o CFLAGS+= -I${.CURDIR}/../common -I${.CURDIR}/../../libc/include all: ${OBJS} @@ -14,6 +14,9 @@ CLEANFILES= ${OBJS} gcrt1.o: crt1.c ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.ALLSRC} +Scrt1.o: crt1.c + ${CC} ${CFLAGS} -fPIC -DPIC -c -o Scrt1.o ${.ALLSRC} + realinstall: ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ ${OBJS} ${DESTDIR}${LIBDIR} diff --git a/lib/libarchive/Makefile b/lib/libarchive/Makefile index c377f9b2d47..8de8247b64d 100644 --- a/lib/libarchive/Makefile +++ b/lib/libarchive/Makefile @@ -22,8 +22,6 @@ DPADD+= ${LIBCRYPTO} LDADD+= -lcrypto .endif -WARNS?= 6 - # Headers to be installed in /usr/include INCS= archive.h archive_entry.h @@ -34,6 +32,7 @@ SRCS= archive_check_magic.c \ archive_entry_stat.c \ archive_entry_strmode.c \ archive_entry_link_resolver.c \ + archive_entry_xattr.c \ archive_read.c \ archive_read_data_into_fd.c \ archive_read_disk.c \ @@ -50,6 +49,7 @@ SRCS= archive_check_magic.c \ archive_read_support_compression_gzip.c \ archive_read_support_compression_none.c \ archive_read_support_compression_program.c \ + archive_read_support_compression_uu.c \ archive_read_support_compression_xz.c \ archive_read_support_format_all.c \ archive_read_support_format_ar.c \ @@ -86,6 +86,7 @@ SRCS= archive_check_magic.c \ archive_write_set_format_pax.c \ archive_write_set_format_shar.c \ archive_write_set_format_ustar.c \ + archive_write_set_format_zip.c \ filter_fork.c # Man pages to be installed. @@ -223,6 +224,7 @@ MLINKS+= archive_util.3 archive_compression.3 MLINKS+= archive_util.3 archive_compression_name.3 MLINKS+= archive_util.3 archive_errno.3 MLINKS+= archive_util.3 archive_error_string.3 +MLINKS+= archive_util.3 archive_file_count.3 MLINKS+= archive_util.3 archive_format.3 MLINKS+= archive_util.3 archive_format_name.3 MLINKS+= archive_util.3 archive_set_error.3 diff --git a/lib/libarchive/archive.h b/lib/libarchive/archive.h index f438f22b313..23095313f99 100644 --- a/lib/libarchive/archive.h +++ b/lib/libarchive/archive.h @@ -35,12 +35,16 @@ * this header! If you must conditionalize, use predefined compiler and/or * platform macros. */ +#if defined(__BORLANDC__) && __BORLANDC__ >= 0x560 +# define __LA_STDINT_H +#elif !defined(__WATCOMC__) && !defined(_MSC_VER) && !defined(__INTERIX) && !defined(__BORLANDC__) +# define __LA_STDINT_H +#endif #include #include /* Linux requires this for off_t */ -#if !defined(__WATCOMC__) && !defined(_MSC_VER) && !defined(__INTERIX) -/* Header unavailable on Watcom C or MS Visual C++ or SFU. */ -#include /* int64_t, etc. */ +#ifdef __LA_STDINT_H +# include __LA_STDINT_H /* int64_t, etc. */ #endif #include /* For FILE * */ @@ -53,8 +57,13 @@ # else # define __LA_SSIZE_T long # endif -#define __LA_UID_T unsigned int -#define __LA_GID_T unsigned int +# if defined(__BORLANDC__) +# define __LA_UID_T uid_t +# define __LA_GID_T gid_t +# else +# define __LA_UID_T short +# define __LA_GID_T short +# endif #else #include /* ssize_t, uid_t, and gid_t */ #define __LA_INT64_T int64_t @@ -118,13 +127,13 @@ extern "C" { * (ARCHIVE_API_VERSION * 1000000 + ARCHIVE_API_FEATURE * 1000) * #endif */ -#define ARCHIVE_VERSION_NUMBER 2007000 +#define ARCHIVE_VERSION_NUMBER 2007901 __LA_DECL int archive_version_number(void); /* * Textual name/version of the library, useful for version displays. */ -#define ARCHIVE_VERSION_STRING "libarchive 2.7.0" +#define ARCHIVE_VERSION_STRING "libarchive 2.7.901a" __LA_DECL const char * archive_version_string(void); #if ARCHIVE_VERSION_NUMBER < 3000000 @@ -232,6 +241,8 @@ typedef int archive_close_callback(struct archive *, void *_client_data); #define ARCHIVE_COMPRESSION_PROGRAM 4 #define ARCHIVE_COMPRESSION_LZMA 5 #define ARCHIVE_COMPRESSION_XZ 6 +#define ARCHIVE_COMPRESSION_UU 7 +#define ARCHIVE_COMPRESSION_RPM 8 /* * Codes returned by archive_format. @@ -273,6 +284,7 @@ typedef int archive_close_callback(struct archive *, void *_client_data); #define ARCHIVE_FORMAT_AR_BSD (ARCHIVE_FORMAT_AR | 2) #define ARCHIVE_FORMAT_MTREE 0x80000 #define ARCHIVE_FORMAT_RAW 0x90000 +#define ARCHIVE_FORMAT_XAR 0xA0000 /*- * Basic outline for reading an archive: @@ -307,6 +319,7 @@ __LA_DECL int archive_read_support_compression_program_signature (struct archive *, const char *, const void * /* match */, size_t); +__LA_DECL int archive_read_support_compression_uu(struct archive *); __LA_DECL int archive_read_support_compression_xz(struct archive *); __LA_DECL int archive_read_support_format_all(struct archive *); @@ -529,6 +542,7 @@ __LA_DECL int archive_write_set_format_pax_restricted(struct archive *); __LA_DECL int archive_write_set_format_shar(struct archive *); __LA_DECL int archive_write_set_format_shar_dump(struct archive *); __LA_DECL int archive_write_set_format_ustar(struct archive *); +__LA_DECL int archive_write_set_format_zip(struct archive *); __LA_DECL int archive_write_open(struct archive *, void *, archive_open_callback *, archive_write_callback *, archive_close_callback *); @@ -704,6 +718,7 @@ __LA_DECL void archive_set_error(struct archive *, int _err, const char *fmt, ...); __LA_DECL void archive_copy_error(struct archive *dest, struct archive *src); +__LA_DECL int archive_file_count(struct archive *); #ifdef __cplusplus } diff --git a/lib/libarchive/archive_check_magic.c b/lib/libarchive/archive_check_magic.c index 8f1fa2f00ad..1381a186be8 100644 --- a/lib/libarchive/archive_check_magic.c +++ b/lib/libarchive/archive_check_magic.c @@ -50,7 +50,16 @@ __FBSDID("$FreeBSD$"); static void errmsg(const char *m) { - write(2, m, strlen(m)); + size_t s = strlen(m); + ssize_t written; + + while (s > 0) { + written = write(2, m, strlen(m)); + if (written <= 0) + return; + m += written; + s -= written; + } } static void @@ -60,8 +69,7 @@ diediedie(void) /* Cause a breakpoint exception */ DebugBreak(); #endif - *(char *)0 = 1; /* Deliberately segfault and force a coredump. */ - _exit(1); /* If that didn't work, just exit with an error. */ + abort(); /* Terminate the program abnormally. */ } static const char * @@ -85,7 +93,7 @@ write_all_states(unsigned int states) unsigned int lowbit; /* A trick for computing the lowest set bit. */ - while ((lowbit = states & (-states)) != 0) { + while ((lowbit = states & (1 + ~states)) != 0) { states &= ~lowbit; /* Clear the low bit. */ errmsg(state_name(lowbit)); if (states != 0) diff --git a/lib/libarchive/archive_crc32.h b/lib/libarchive/archive_crc32.h new file mode 100644 index 00000000000..771575476d9 --- /dev/null +++ b/lib/libarchive/archive_crc32.h @@ -0,0 +1,66 @@ +/*- + * Copyright (c) 2009 Joerg Sonnenberger + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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. + * + * $FreeBSD$ + */ + +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + +/* + * When zlib is unavailable, we should still be able to validate + * uncompressed zip archives. That requires us to be able to compute + * the CRC32 check value. This is a drop-in compatible replacement + * for crc32() from zlib. It's slower than the zlib implementation, + * but still pretty fast: This runs about 300MB/s on my 3GHz P4 + * compared to about 800MB/s for the zlib implementation. + */ +static unsigned long +crc32(unsigned long crc, const void *_p, size_t len) +{ + unsigned long crc2, b, i; + const unsigned char *p = _p; + static volatile int crc_tbl_inited = 0; + static unsigned long crc_tbl[256]; + + if (!crc_tbl_inited) { + for (b = 0; b < 256; ++b) { + crc2 = b; + for (i = 8; i > 0; --i) { + if (crc2 & 1) + crc2 = (crc2 >> 1) ^ 0xedb88320UL; + else + crc2 = (crc2 >> 1); + } + crc_tbl[b] = crc2; + } + crc_tbl_inited = 1; + } + + crc = crc ^ 0xffffffffUL; + while (len--) + crc = crc_tbl[(crc ^ *p++) & 0xff] ^ (crc >> 8); + return (crc ^ 0xffffffffUL); +} diff --git a/lib/libarchive/archive_endian.h b/lib/libarchive/archive_endian.h index 47739c0d246..9d013654479 100644 --- a/lib/libarchive/archive_endian.h +++ b/lib/libarchive/archive_endian.h @@ -28,6 +28,10 @@ * Borrowed from FreeBSD's */ +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + /* Note: This is a purely internal header! */ /* Do not use this outside of libarchive internal code! */ @@ -41,7 +45,7 @@ * - SGI MIPSpro * - Microsoft Visual C++ 6.0 (supposedly newer versions too) */ -#if defined(__WATCOMC__) || defined(__sgi) +#if defined(__WATCOMC__) || defined(__sgi) || defined(__hpux) || defined(__BORLANDC__) #define inline #elif defined(_MSC_VER) #define inline __inline diff --git a/lib/libarchive/archive_entry.c b/lib/libarchive/archive_entry.c index 16166aa85ae..1202a8a2829 100644 --- a/lib/libarchive/archive_entry.c +++ b/lib/libarchive/archive_entry.c @@ -32,12 +32,12 @@ __FBSDID("$FreeBSD$"); #ifdef HAVE_SYS_TYPES_H #include #endif -#ifdef MAJOR_IN_MKDEV +#if MAJOR_IN_MKDEV #include -#else -#ifdef MAJOR_IN_SYSMACROS +#define HAVE_MAJOR +#elif MAJOR_IN_SYSMACROS #include -#endif +#define HAVE_MAJOR #endif #ifdef HAVE_LIMITS_H #include @@ -75,6 +75,13 @@ __FBSDID("$FreeBSD$"); #undef max #define max(a, b) ((a)>(b)?(a):(b)) +#if !defined(HAVE_MAJOR) && !defined(major) +/* Replacement for major/minor/makedev. */ +#define major(x) ((int)(0x00ff & ((x) >> 8))) +#define minor(x) ((int)(0xffff00ff & (x))) +#define makedev(maj,min) ((0xff00 & ((maj)<<8)) | (0xffff00ff & (min))) +#endif + /* Play games to come up with a suitable makedev() definition. */ #ifdef __QNXNTO__ /* QNX. */ @@ -215,7 +222,7 @@ static const wchar_t * aes_get_wcs(struct aes *aes) { wchar_t *w; - int r; + size_t r; /* Return WCS form if we already have it. */ if (aes->aes_set & AES_SET_WCS) @@ -233,7 +240,7 @@ aes_get_wcs(struct aes *aes) if (w == NULL) __archive_errx(1, "No memory for aes_get_wcs()"); r = mbstowcs(w, aes->aes_mbs.s, wcs_length); - if (r > 0) { + if (r != (size_t)-1 && r != 0) { w[r] = 0; aes->aes_set |= AES_SET_WCS; return (aes->aes_wcs = w); @@ -618,6 +625,12 @@ archive_entry_ino(struct archive_entry *entry) return (entry->ae_stat.aest_ino); } +int64_t +archive_entry_ino64(struct archive_entry *entry) +{ + return (entry->ae_stat.aest_ino); +} + mode_t archive_entry_mode(struct archive_entry *entry) { @@ -817,6 +830,13 @@ archive_entry_set_ino(struct archive_entry *entry, unsigned long ino) entry->ae_stat.aest_ino = ino; } +void +archive_entry_set_ino64(struct archive_entry *entry, int64_t ino) +{ + entry->stat_valid = 0; + entry->ae_stat.aest_ino = ino; +} + void archive_entry_set_hardlink(struct archive_entry *entry, const char *target) { @@ -847,6 +867,16 @@ archive_entry_copy_hardlink_w(struct archive_entry *entry, const wchar_t *target entry->ae_set &= ~AE_SET_HARDLINK; } +int +archive_entry_update_hardlink_utf8(struct archive_entry *entry, const char *target) +{ + if (target != NULL) + entry->ae_set |= AE_SET_HARDLINK; + else + entry->ae_set &= ~AE_SET_HARDLINK; + return (aes_update_utf8(&entry->ae_hardlink, target)); +} + void archive_entry_set_atime(struct archive_entry *entry, time_t t, long ns) { @@ -1095,6 +1125,16 @@ archive_entry_copy_symlink_w(struct archive_entry *entry, const wchar_t *linknam entry->ae_set &= ~AE_SET_SYMLINK; } +int +archive_entry_update_symlink_utf8(struct archive_entry *entry, const char *linkname) +{ + if (linkname != NULL) + entry->ae_set |= AE_SET_SYMLINK; + else + entry->ae_set &= ~AE_SET_SYMLINK; + return (aes_update_utf8(&entry->ae_symlink, linkname)); +} + void archive_entry_set_uid(struct archive_entry *entry, uid_t u) { @@ -1186,7 +1226,7 @@ archive_entry_acl_add_entry_w(struct archive_entry *entry, archive_entry_acl_add_entry_w_len(entry, type, permset, tag, id, name, wcslen(name)); } -void +static void archive_entry_acl_add_entry_w_len(struct archive_entry *entry, int type, int permset, int tag, int id, const wchar_t *name, size_t len) { @@ -1595,7 +1635,7 @@ __archive_entry_acl_parse_w(struct archive_entry *entry, const wchar_t *end; } field[4], name; - int fields; + int fields, n; int type, tag, permset, id; wchar_t sep; @@ -1615,6 +1655,10 @@ __archive_entry_acl_parse_w(struct archive_entry *entry, ++fields; } while (sep == L':'); + /* Set remaining fields to blank. */ + for (n = fields; n < 4; ++n) + field[n].start = field[n].end = NULL; + /* Check for a numeric ID in field 1 or 3. */ id = -1; isint_w(field[1].start, field[1].end, &id); @@ -1626,7 +1670,7 @@ __archive_entry_acl_parse_w(struct archive_entry *entry, * Solaris extension: "defaultuser::rwx" is the * default ACL corresponding to "user::rwx", etc. */ - if (field[0].end-field[0].start > 7 + if (field[0].end - field[0].start > 7 && wmemcmp(field[0].start, L"default", 7) == 0) { type = ARCHIVE_ENTRY_ACL_TYPE_DEFAULT; field[0].start += 7; @@ -1653,7 +1697,7 @@ __archive_entry_acl_parse_w(struct archive_entry *entry, } else if (prefix_w(field[0].start, field[0].end, L"other")) { if (fields == 2 && field[1].start < field[1].end - && ismode_w(field[1].start, field[2].end, &permset)) { + && ismode_w(field[1].start, field[1].end, &permset)) { /* This is Solaris-style "other:rwx" */ } else if (fields == 3 && field[1].start == field[1].end @@ -1686,98 +1730,6 @@ __archive_entry_acl_parse_w(struct archive_entry *entry, return (ARCHIVE_OK); } -/* - * extended attribute handling - */ - -void -archive_entry_xattr_clear(struct archive_entry *entry) -{ - struct ae_xattr *xp; - - while (entry->xattr_head != NULL) { - xp = entry->xattr_head->next; - free(entry->xattr_head->name); - free(entry->xattr_head->value); - free(entry->xattr_head); - entry->xattr_head = xp; - } - - entry->xattr_head = NULL; -} - -void -archive_entry_xattr_add_entry(struct archive_entry *entry, - const char *name, const void *value, size_t size) -{ - struct ae_xattr *xp; - - for (xp = entry->xattr_head; xp != NULL; xp = xp->next) - ; - - if ((xp = (struct ae_xattr *)malloc(sizeof(struct ae_xattr))) == NULL) - /* XXX Error XXX */ - return; - - xp->name = strdup(name); - if ((xp->value = malloc(size)) != NULL) { - memcpy(xp->value, value, size); - xp->size = size; - } else - xp->size = 0; - - xp->next = entry->xattr_head; - entry->xattr_head = xp; -} - - -/* - * returns number of the extended attribute entries - */ -int -archive_entry_xattr_count(struct archive_entry *entry) -{ - struct ae_xattr *xp; - int count = 0; - - for (xp = entry->xattr_head; xp != NULL; xp = xp->next) - count++; - - return count; -} - -int -archive_entry_xattr_reset(struct archive_entry * entry) -{ - entry->xattr_p = entry->xattr_head; - - return archive_entry_xattr_count(entry); -} - -int -archive_entry_xattr_next(struct archive_entry * entry, - const char **name, const void **value, size_t *size) -{ - if (entry->xattr_p) { - *name = entry->xattr_p->name; - *value = entry->xattr_p->value; - *size = entry->xattr_p->size; - - entry->xattr_p = entry->xattr_p->next; - - return (ARCHIVE_OK); - } else { - *name = NULL; - *value = NULL; - *size = (size_t)0; - return (ARCHIVE_WARN); - } -} - -/* - * end of xattr handling - */ - /* * Parse a string to a positive decimal integer. Returns true if * the string is non-empty and consists only of decimal digits, @@ -1814,6 +1766,8 @@ ismode_w(const wchar_t *start, const wchar_t *end, int *permset) { const wchar_t *p; + if (start >= end) + return (0); p = start; *permset = 0; while (p < end) { @@ -1988,6 +1942,18 @@ static struct flag { { "nouunlnk", L"nouunlnk", UF_NOUNLINK, 0 }, { "nouunlink", L"nouunlink", UF_NOUNLINK, 0 }, #endif +#ifdef EXT2_UNRM_FL + { "nouunlink", L"nouunlink", EXT2_UNRM_FL, 0}, +#endif + +#ifdef EXT2_BTREE_FL + { "nobtree", L"nobtree", EXT2_BTREE_FL, 0 }, +#endif + +#ifdef EXT2_ECOMPR_FL + { "nocomperr", L"nocomperr", EXT2_ECOMPR_FL, 0 }, +#endif + #ifdef EXT2_COMPR_FL /* 'c' */ { "nocompress", L"nocompress", EXT2_COMPR_FL, 0 }, #endif @@ -1995,6 +1961,46 @@ static struct flag { #ifdef EXT2_NOATIME_FL /* 'A' */ { "noatime", L"noatime", 0, EXT2_NOATIME_FL}, #endif + +#ifdef EXT2_DIRTY_FL + { "nocompdirty",L"nocompdirty", EXT2_DIRTY_FL, 0}, +#endif + +#ifdef EXT2_COMPRBLK_FL +#ifdef EXT2_NOCOMPR_FL + { "nocomprblk", L"nocomprblk", EXT2_COMPRBLK_FL, EXT2_NOCOMPR_FL}, +#else + { "nocomprblk", L"nocomprblk", EXT2_COMPRBLK_FL, 0}, +#endif +#endif +#ifdef EXT2_DIRSYNC_FL + { "nodirsync", L"nodirsync", EXT2_DIRSYNC_FL, 0}, +#endif +#ifdef EXT2_INDEX_FL + { "nohashidx", L"nohashidx", EXT2_INDEX_FL, 0}, +#endif +#ifdef EXT2_IMAGIC_FL + { "noimagic", L"noimagic", EXT2_IMAGIC_FL, 0}, +#endif +#ifdef EXT3_JOURNAL_DATA_FL + { "nojournal", L"nojournal", EXT3_JOURNAL_DATA_FL, 0}, +#endif +#ifdef EXT2_SECRM_FL + { "nosecuredeletion",L"nosecuredeletion",EXT2_SECRM_FL, 0}, +#endif +#ifdef EXT2_SYNC_FL + { "nosync", L"nosync", EXT2_SYNC_FL, 0}, +#endif +#ifdef EXT2_NOTAIL_FL + { "notail", L"notail", 0, EXT2_NOTAIL_FL}, +#endif +#ifdef EXT2_TOPDIR_FL + { "notopdir", L"notopdir", EXT2_TOPDIR_FL, 0}, +#endif +#ifdef EXT2_RESERVED_FL + { "noreserved", L"noreserved", EXT2_RESERVED_FL, 0}, +#endif + { NULL, NULL, 0, 0 } }; diff --git a/lib/libarchive/archive_entry.h b/lib/libarchive/archive_entry.h index a2748fdff67..7ed2dde2c42 100644 --- a/lib/libarchive/archive_entry.h +++ b/lib/libarchive/archive_entry.h @@ -40,14 +40,25 @@ #include /* for wchar_t */ #include +#if defined(_WIN32) && !defined(__CYGWIN__) +#include +#endif + /* Get appropriate definitions of standard POSIX-style types. */ /* These should match the types used in 'struct stat' */ #if defined(_WIN32) && !defined(__CYGWIN__) #define __LA_INT64_T __int64 -#define __LA_UID_T unsigned int -#define __LA_GID_T unsigned int -#define __LA_DEV_T unsigned int -#define __LA_MODE_T unsigned short +# if defined(__BORLANDC__) +# define __LA_UID_T uid_t +# define __LA_GID_T gid_t +# define __LA_DEV_T dev_t +# define __LA_MODE_T mode_t +# else +# define __LA_UID_T short +# define __LA_GID_T short +# define __LA_DEV_T unsigned int +# define __LA_MODE_T unsigned short +# endif #else #include #define __LA_INT64_T int64_t @@ -194,6 +205,7 @@ __LA_DECL const wchar_t *archive_entry_gname_w(struct archive_entry *); __LA_DECL const char *archive_entry_hardlink(struct archive_entry *); __LA_DECL const wchar_t *archive_entry_hardlink_w(struct archive_entry *); __LA_DECL __LA_INO_T archive_entry_ino(struct archive_entry *); +__LA_DECL __LA_INT64_T archive_entry_ino64(struct archive_entry *); __LA_DECL __LA_MODE_T archive_entry_mode(struct archive_entry *); __LA_DECL time_t archive_entry_mtime(struct archive_entry *); __LA_DECL long archive_entry_mtime_nsec(struct archive_entry *); @@ -227,6 +239,10 @@ __LA_DECL const wchar_t *archive_entry_uname_w(struct archive_entry *); __LA_DECL void archive_entry_set_atime(struct archive_entry *, time_t, long); __LA_DECL void archive_entry_unset_atime(struct archive_entry *); +#if defined(_WIN32) && !defined(__CYGWIN__) +__LA_DECL void archive_entry_copy_bhfi(struct archive_entry *, + BY_HANDLE_FILE_INFORMATION *); +#endif __LA_DECL void archive_entry_set_birthtime(struct archive_entry *, time_t, long); __LA_DECL void archive_entry_unset_birthtime(struct archive_entry *); __LA_DECL void archive_entry_set_ctime(struct archive_entry *, time_t, long); @@ -251,7 +267,14 @@ __LA_DECL int archive_entry_update_gname_utf8(struct archive_entry *, const char __LA_DECL void archive_entry_set_hardlink(struct archive_entry *, const char *); __LA_DECL void archive_entry_copy_hardlink(struct archive_entry *, const char *); __LA_DECL void archive_entry_copy_hardlink_w(struct archive_entry *, const wchar_t *); +__LA_DECL int archive_entry_update_hardlink_utf8(struct archive_entry *, const char *); +#if ARCHIVE_VERSION_NUMBER >= 3000000 +/* Starting with libarchive 3.0, this will be synonym for ino64. */ +__LA_DECL void archive_entry_set_ino(struct archive_entry *, __LA_INT64_T); +#else __LA_DECL void archive_entry_set_ino(struct archive_entry *, unsigned long); +#endif +__LA_DECL void archive_entry_set_ino64(struct archive_entry *, __LA_INT64_T); __LA_DECL void archive_entry_set_link(struct archive_entry *, const char *); __LA_DECL void archive_entry_copy_link(struct archive_entry *, const char *); __LA_DECL void archive_entry_copy_link_w(struct archive_entry *, const wchar_t *); @@ -274,6 +297,7 @@ __LA_DECL void archive_entry_copy_sourcepath(struct archive_entry *, const char __LA_DECL void archive_entry_set_symlink(struct archive_entry *, const char *); __LA_DECL void archive_entry_copy_symlink(struct archive_entry *, const char *); __LA_DECL void archive_entry_copy_symlink_w(struct archive_entry *, const wchar_t *); +__LA_DECL int archive_entry_update_symlink_utf8(struct archive_entry *, const char *); __LA_DECL void archive_entry_set_uid(struct archive_entry *, __LA_UID_T); __LA_DECL void archive_entry_set_uname(struct archive_entry *, const char *); __LA_DECL void archive_entry_copy_uname(struct archive_entry *, const char *); diff --git a/lib/libarchive/archive_entry_link_resolver.c b/lib/libarchive/archive_entry_link_resolver.c index e7758d66d90..c190108cd26 100644 --- a/lib/libarchive/archive_entry_link_resolver.c +++ b/lib/libarchive/archive_entry_link_resolver.c @@ -249,7 +249,7 @@ find_entry(struct archive_entry_linkresolver *res, struct links_entry *le; int hash, bucket; dev_t dev; - ino_t ino; + int64_t ino; /* Free a held entry. */ if (res->spare != NULL) { @@ -264,15 +264,15 @@ find_entry(struct archive_entry_linkresolver *res, return (NULL); dev = archive_entry_dev(entry); - ino = archive_entry_ino(entry); - hash = dev ^ ino; + ino = archive_entry_ino64(entry); + hash = (int)(dev ^ ino); /* Try to locate this entry in the links cache. */ bucket = hash % res->number_buckets; for (le = res->buckets[bucket]; le != NULL; le = le->next) { if (le->hash == hash && dev == archive_entry_dev(le->canonical) - && ino == archive_entry_ino(le->canonical)) { + && ino == archive_entry_ino64(le->canonical)) { /* * Decrement link count each time and release * the entry if it hits zero. This saves @@ -350,7 +350,7 @@ insert_entry(struct archive_entry_linkresolver *res, if (res->number_entries > res->number_buckets * 2) grow_hash(res); - hash = archive_entry_dev(entry) ^ archive_entry_ino(entry); + hash = archive_entry_dev(entry) ^ archive_entry_ino64(entry); bucket = hash % res->number_buckets; /* If we could allocate the entry, record it. */ diff --git a/lib/libarchive/archive_entry_private.h b/lib/libarchive/archive_entry_private.h index 4614a4f8e2d..d59021c2487 100644 --- a/lib/libarchive/archive_entry_private.h +++ b/lib/libarchive/archive_entry_private.h @@ -25,6 +25,10 @@ * $FreeBSD$ */ +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + #ifndef ARCHIVE_ENTRY_PRIVATE_H_INCLUDED #define ARCHIVE_ENTRY_PRIVATE_H_INCLUDED @@ -115,7 +119,7 @@ struct archive_entry { int64_t aest_birthtime; uint32_t aest_birthtime_nsec; gid_t aest_gid; - ino_t aest_ino; + int64_t aest_ino; mode_t aest_mode; uint32_t aest_nlink; uint64_t aest_size; diff --git a/lib/libarchive/archive_entry_stat.c b/lib/libarchive/archive_entry_stat.c index 8b58658017d..cdaeac3429a 100644 --- a/lib/libarchive/archive_entry_stat.c +++ b/lib/libarchive/archive_entry_stat.c @@ -72,7 +72,7 @@ archive_entry_stat(struct archive_entry *entry) st->st_dev = archive_entry_dev(entry); st->st_gid = archive_entry_gid(entry); st->st_uid = archive_entry_uid(entry); - st->st_ino = archive_entry_ino(entry); + st->st_ino = archive_entry_ino64(entry); st->st_nlink = archive_entry_nlink(entry); st->st_rdev = archive_entry_rdev(entry); st->st_size = archive_entry_size(entry); diff --git a/lib/libarchive/archive_entry_xattr.c b/lib/libarchive/archive_entry_xattr.c new file mode 100644 index 00000000000..b7e53e31544 --- /dev/null +++ b/lib/libarchive/archive_entry_xattr.c @@ -0,0 +1,158 @@ +/*- + * Copyright (c) 2003-2007 Tim Kientzle + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "archive_platform.h" +__FBSDID("$FreeBSD$"); + +#ifdef HAVE_SYS_STAT_H +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_LIMITS_H +#include +#endif +#ifdef HAVE_LINUX_FS_H +#include /* for Linux file flags */ +#endif +/* + * Some Linux distributions have both linux/ext2_fs.h and ext2fs/ext2_fs.h. + * As the include guards don't agree, the order of include is important. + */ +#ifdef HAVE_LINUX_EXT2_FS_H +#include /* for Linux file flags */ +#endif +#if defined(HAVE_EXT2FS_EXT2_FS_H) && !defined(__CYGWIN__) +#include /* for Linux file flags */ +#endif +#include +#include +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_WCHAR_H +#include +#endif + +#include "archive.h" +#include "archive_entry.h" +#include "archive_private.h" +#include "archive_entry_private.h" + +/* + * extended attribute handling + */ + +void +archive_entry_xattr_clear(struct archive_entry *entry) +{ + struct ae_xattr *xp; + + while (entry->xattr_head != NULL) { + xp = entry->xattr_head->next; + free(entry->xattr_head->name); + free(entry->xattr_head->value); + free(entry->xattr_head); + entry->xattr_head = xp; + } + + entry->xattr_head = NULL; +} + +void +archive_entry_xattr_add_entry(struct archive_entry *entry, + const char *name, const void *value, size_t size) +{ + struct ae_xattr *xp; + + for (xp = entry->xattr_head; xp != NULL; xp = xp->next) + ; + + if ((xp = (struct ae_xattr *)malloc(sizeof(struct ae_xattr))) == NULL) + /* XXX Error XXX */ + return; + + xp->name = strdup(name); + if ((xp->value = malloc(size)) != NULL) { + memcpy(xp->value, value, size); + xp->size = size; + } else + xp->size = 0; + + xp->next = entry->xattr_head; + entry->xattr_head = xp; +} + + +/* + * returns number of the extended attribute entries + */ +int +archive_entry_xattr_count(struct archive_entry *entry) +{ + struct ae_xattr *xp; + int count = 0; + + for (xp = entry->xattr_head; xp != NULL; xp = xp->next) + count++; + + return count; +} + +int +archive_entry_xattr_reset(struct archive_entry * entry) +{ + entry->xattr_p = entry->xattr_head; + + return archive_entry_xattr_count(entry); +} + +int +archive_entry_xattr_next(struct archive_entry * entry, + const char **name, const void **value, size_t *size) +{ + if (entry->xattr_p) { + *name = entry->xattr_p->name; + *value = entry->xattr_p->value; + *size = entry->xattr_p->size; + + entry->xattr_p = entry->xattr_p->next; + + return (ARCHIVE_OK); + } else { + *name = NULL; + *value = NULL; + *size = (size_t)0; + return (ARCHIVE_WARN); + } +} + +/* + * end of xattr handling + */ diff --git a/lib/libarchive/archive_hash.h b/lib/libarchive/archive_hash.h new file mode 100644 index 00000000000..9dc4d5e9941 --- /dev/null +++ b/lib/libarchive/archive_hash.h @@ -0,0 +1,196 @@ +/*- + * Copyright (c) 2009 Joerg Sonnenberger + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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. + * + * $FreeBSD$ + */ + +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + +/* + * Hash function support in various Operating Systems: + * + * NetBSD: + * - MD5 and SHA1 in libc: without _ after algorithm name + * - SHA2 in libc: with _ after algorithm name + * + * OpenBSD: + * - MD5, SHA1 and SHA2 in libc: without _ after algorithm name + * - OpenBSD 4.4 and earlier have SHA2 in libc with _ after algorithm name + * + * DragonFly and FreeBSD (XXX not used yet): + * - MD5 and SHA1 in libmd: without _ after algorithm name + * - SHA256: with _ after algorithm name + * + * OpenSSL: + * - MD5, SHA1 and SHA2 in libcrypto: with _ after algorithm name + */ + +#if defined(HAVE_MD5_H) && defined(HAVE_MD5INIT) +# include +# define ARCHIVE_HAS_MD5 +typedef MD5_CTX archive_md5_ctx; +# define archive_md5_init(ctx) MD5Init(ctx) +# define archive_md5_final(ctx, buf) MD5Final(buf, ctx) +# define archive_md5_update(ctx, buf, n) MD5Update(ctx, buf, n) +#elif defined(HAVE_OPENSSL_MD5_H) +# include +# define ARCHIVE_HAS_MD5 +typedef MD5_CTX archive_md5_ctx; +# define archive_md5_init(ctx) MD5_Init(ctx) +# define archive_md5_final(ctx, buf) MD5_Final(buf, ctx) +# define archive_md5_update(ctx, buf, n) MD5_Update(ctx, buf, n) +#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(CALG_MD5) +# define ARCHIVE_HAS_MD5 +typedef MD5_CTX archive_md5_ctx; +# define archive_md5_init(ctx) MD5_Init(ctx) +# define archive_md5_final(ctx, buf) MD5_Final(buf, ctx) +# define archive_md5_update(ctx, buf, n) MD5_Update(ctx, buf, n) +#endif + +#if defined(HAVE_RMD160_H) && defined(HAVE_RMD160INIT) +# include +# define ARCHIVE_HAS_RMD160 +typedef RMD160_CTX archive_rmd160_ctx; +# define archive_rmd160_init(ctx) RMD160Init(ctx) +# define archive_rmd160_final(ctx, buf) RMD160Final(buf, ctx) +# define archive_rmd160_update(ctx, buf, n) RMD160Update(ctx, buf, n) +#elif defined(HAVE_OPENSSL_RIPEMD_H) +# include +# define ARCHIVE_HAS_RMD160 +typedef RIPEMD160_CTX archive_rmd160_ctx; +# define archive_rmd160_init(ctx) RIPEMD160_Init(ctx) +# define archive_rmd160_final(ctx, buf) RIPEMD160_Final(buf, ctx) +# define archive_rmd160_update(ctx, buf, n) RIPEMD160_Update(ctx, buf, n) +#endif + +#if defined(HAVE_SHA1_H) && defined(HAVE_SHA1INIT) +# include +# define ARCHIVE_HAS_SHA1 +typedef SHA1_CTX archive_sha1_ctx; +# define archive_sha1_init(ctx) SHA1Init(ctx) +# define archive_sha1_final(ctx, buf) SHA1Final(buf, ctx) +# define archive_sha1_update(ctx, buf, n) SHA1Update(ctx, buf, n) +#elif defined(HAVE_OPENSSL_SHA_H) +# include +# define ARCHIVE_HAS_SHA1 +typedef SHA_CTX archive_sha1_ctx; +# define archive_sha1_init(ctx) SHA1_Init(ctx) +# define archive_sha1_final(ctx, buf) SHA1_Final(buf, ctx) +# define archive_sha1_update(ctx, buf, n) SHA1_Update(ctx, buf, n) +#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(CALG_SHA1) +# define ARCHIVE_HAS_SHA1 +typedef SHA1_CTX archive_sha1_ctx; +# define archive_sha1_init(ctx) SHA1_Init(ctx) +# define archive_sha1_final(ctx, buf) SHA1_Final(buf, ctx) +# define archive_sha1_update(ctx, buf, n) SHA1_Update(ctx, buf, n) +#endif + +#if defined(HAVE_SHA2_H) && defined(HAVE_SHA256_INIT) +# include +# define ARCHIVE_HAS_SHA256 +typedef SHA256_CTX archive_sha256_ctx; +# define archive_sha256_init(ctx) SHA256_Init(ctx) +# define archive_sha256_final(ctx, buf) SHA256_Final(buf, ctx) +# define archive_sha256_update(ctx, buf, n) SHA256_Update(ctx, buf, n) +#elif defined(HAVE_SHA2_H) && defined(HAVE_SHA256INIT) +# include +# define ARCHIVE_HAS_SHA256 +typedef SHA256_CTX archive_sha256_ctx; +# define archive_sha256_init(ctx) SHA256Init(ctx) +# define archive_sha256_final(ctx, buf) SHA256Final(buf, ctx) +# define archive_sha256_update(ctx, buf, n) SHA256Update(ctx, buf, n) +#elif defined(HAVE_OPENSSL_SHA_H) && defined(HAVE_OPENSSL_SHA256_INIT) +# include +# define ARCHIVE_HAS_SHA256 +typedef SHA256_CTX archive_sha256_ctx; +# define archive_sha256_init(ctx) SHA256_Init(ctx) +# define archive_sha256_final(ctx, buf) SHA256_Final(buf, ctx) +# define archive_sha256_update(ctx, buf, n) SHA256_Update(ctx, buf, n) +#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(CALG_SHA_256) +# define ARCHIVE_HAS_SHA256 +typedef SHA256_CTX archive_sha256_ctx; +# define archive_sha256_init(ctx) SHA256_Init(ctx) +# define archive_sha256_final(ctx, buf) SHA256_Final(buf, ctx) +# define archive_sha256_update(ctx, buf, n) SHA256_Update(ctx, buf, n) +#endif + +#if defined(HAVE_SHA2_H) && defined(HAVE_SHA384_INIT) +# include +# define ARCHIVE_HAS_SHA384 +typedef SHA384_CTX archive_sha384_ctx; +# define archive_sha384_init(ctx) SHA384_Init(ctx) +# define archive_sha384_final(ctx, buf) SHA384_Final(buf, ctx) +# define archive_sha384_update(ctx, buf, n) SHA384_Update(ctx, buf, n) +#elif defined(HAVE_SHA2_H) && defined(HAVE_SHA384INIT) +# include +# define ARCHIVE_HAS_SHA384 +typedef SHA384_CTX archive_sha384_ctx; +# define archive_sha384_init(ctx) SHA384Init(ctx) +# define archive_sha384_final(ctx, buf) SHA384Final(buf, ctx) +# define archive_sha384_update(ctx, buf, n) SHA384Update(ctx, buf, n) +#elif defined(HAVE_OPENSSL_SHA_H) && defined(HAVE_OPENSSL_SHA384_INIT) +# include +# define ARCHIVE_HAS_SHA384 +typedef SHA512_CTX archive_sha384_ctx; +# define archive_sha384_init(ctx) SHA384_Init(ctx) +# define archive_sha384_final(ctx, buf) SHA384_Final(buf, ctx) +# define archive_sha384_update(ctx, buf, n) SHA384_Update(ctx, buf, n) +#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(CALG_SHA_384) +# define ARCHIVE_HAS_SHA384 +typedef SHA512_CTX archive_sha384_ctx; +# define archive_sha384_init(ctx) SHA384_Init(ctx) +# define archive_sha384_final(ctx, buf) SHA384_Final(buf, ctx) +# define archive_sha384_update(ctx, buf, n) SHA384_Update(ctx, buf, n) +#endif + +#if defined(HAVE_SHA2_H) && defined(HAVE_SHA512_INIT) +# include +# define ARCHIVE_HAS_SHA512 +typedef SHA512_CTX archive_sha512_ctx; +# define archive_sha512_init(ctx) SHA512_Init(ctx) +# define archive_sha512_final(ctx, buf) SHA512_Final(buf, ctx) +# define archive_sha512_update(ctx, buf, n) SHA512_Update(ctx, buf, n) +#elif defined(HAVE_SHA2_H) && defined(HAVE_SHA512INIT) +# include +# define ARCHIVE_HAS_SHA512 +typedef SHA512_CTX archive_sha512_ctx; +# define archive_sha512_init(ctx) SHA512Init(ctx) +# define archive_sha512_final(ctx, buf) SHA512Final(buf, ctx) +# define archive_sha512_update(ctx, buf, n) SHA512Update(ctx, buf, n) +#elif defined(HAVE_OPENSSL_SHA_H) && defined(HAVE_OPENSSL_SHA512_INIT) +# include +# define ARCHIVE_HAS_SHA512 +typedef SHA512_CTX archive_sha512_ctx; +# define archive_sha512_init(ctx) SHA512_Init(ctx) +# define archive_sha512_final(ctx, buf) SHA512_Final(buf, ctx) +# define archive_sha512_update(ctx, buf, n) SHA512_Update(ctx, buf, n) +#elif defined(_WIN32) && !defined(__CYGWIN__) && defined(CALG_SHA_512) +# define ARCHIVE_HAS_SHA512 +typedef SHA512_CTX archive_sha512_ctx; +# define archive_sha512_init(ctx) SHA512_Init(ctx) +# define archive_sha512_final(ctx, buf) SHA512_Final(buf, ctx) +# define archive_sha512_update(ctx, buf, n) SHA512_Update(ctx, buf, n) +#endif diff --git a/lib/libarchive/archive_platform.h b/lib/libarchive/archive_platform.h index dbf51145a0b..9dc4643644b 100644 --- a/lib/libarchive/archive_platform.h +++ b/lib/libarchive/archive_platform.h @@ -25,6 +25,8 @@ * $FreeBSD$ */ +/* !!ONLY FOR USE INTERNALLY TO LIBARCHIVE!! */ + /* * This header is the first thing included in any of the libarchive * source files. As far as possible, platform-specific issues should @@ -50,17 +52,27 @@ #error Oops: No config.h and no pre-built configuration in archive_platform.h. #endif +/* It should be possible to get rid of this by extending the feature-test + * macros to cover Windows API functions, probably along with non-trivial + * refactoring of code to find structures that sit more cleanly on top of + * either Windows or Posix APIs. */ +#if (defined(__WIN32__) || defined(_WIN32) || defined(__WIN32)) && !defined(__CYGWIN__) +#include "archive_windows.h" +#endif + /* * The config files define a lot of feature macros. The following * uses those macros to select/define replacements and include key * headers as required. */ -/* No non-FreeBSD platform will have __FBSDID, so just define it here. */ -#ifdef __FreeBSD__ -#include /* For __FBSDID */ -#else -/* Just leaving this macro replacement empty leads to a dangling semicolon. */ +/* Get a real definition for __FBSDID if we can */ +#if HAVE_SYS_CDEFS_H +#include +#endif + +/* If not, define it so as to avoid dangling semicolons. */ +#ifndef __FBSDID #define __FBSDID(a) struct _undefined_hack #endif @@ -72,6 +84,26 @@ #include #endif +/* Borland warns about its own constants! */ +#if defined(__BORLANDC__) +# if HAVE_DECL_UINT64_MAX +# undef UINT64_MAX +# undef HAVE_DECL_UINT64_MAX +# endif +# if HAVE_DECL_UINT64_MIN +# undef UINT64_MIN +# undef HAVE_DECL_UINT64_MIN +# endif +# if HAVE_DECL_INT64_MAX +# undef INT64_MAX +# undef HAVE_DECL_INT64_MAX +# endif +# if HAVE_DECL_INT64_MIN +# undef INT64_MIN +# undef HAVE_DECL_INT64_MIN +# endif +#endif + /* Some platforms lack the standard *_MAX definitions. */ #if !HAVE_DECL_SIZE_MAX #define SIZE_MAX (~(size_t)0) diff --git a/lib/libarchive/archive_private.h b/lib/libarchive/archive_private.h index 1b031332c7a..e09ddce0f51 100644 --- a/lib/libarchive/archive_private.h +++ b/lib/libarchive/archive_private.h @@ -25,6 +25,10 @@ * $FreeBSD$ */ +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + #ifndef ARCHIVE_PRIVATE_H_INCLUDED #define ARCHIVE_PRIVATE_H_INCLUDED @@ -87,9 +91,11 @@ struct archive { const char *compression_name; /* Position in UNCOMPRESSED data stream. */ - off_t file_position; + int64_t file_position; /* Position in COMPRESSED data stream. */ - off_t raw_position; + int64_t raw_position; + /* Number of file entries processed. */ + int file_count; int archive_error_number; const char *error; @@ -107,4 +113,12 @@ int __archive_parse_options(const char *p, const char *fn, #define err_combine(a,b) ((a) < (b) ? (a) : (b)) +#if defined(__BORLANDC__) || (defined(_MSC_VER) && _MSC_VER <= 1300) +# define ARCHIVE_LITERAL_LL(x) x##i64 +# define ARCHIVE_LITERAL_ULL(x) x##ui64 +#else +# define ARCHIVE_LITERAL_LL(x) x##ll +# define ARCHIVE_LITERAL_ULL(x) x##ull +#endif + #endif diff --git a/lib/libarchive/archive_read.c b/lib/libarchive/archive_read.c index fd4f888867b..fd56dc60719 100644 --- a/lib/libarchive/archive_read.c +++ b/lib/libarchive/archive_read.c @@ -121,6 +121,9 @@ archive_read_set_format_options(struct archive *_a, const char *s) size_t i; int len, r; + __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW, + "archive_read_set_format_options"); + if (s == NULL || *s == '\0') return (ARCHIVE_OK); a = (struct archive_read *)_a; @@ -165,12 +168,14 @@ archive_read_set_filter_options(struct archive *_a, const char *s) char key[64], val[64]; int len, r; + __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW, + "archive_read_set_filter_options"); + if (s == NULL || *s == '\0') return (ARCHIVE_OK); a = (struct archive_read *)_a; __archive_check_magic(&a->archive, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW, "archive_read_set_filter_options"); - filter = a->filter; len = 0; for (filter = a->filter; filter != NULL; filter = filter->upstream) { bidder = filter->bidder; @@ -206,6 +211,10 @@ archive_read_set_options(struct archive *_a, const char *s) { int r; + __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW, + "archive_read_set_options"); + archive_clear_error(_a); + r = archive_read_set_format_options(_a, s); if (r != ARCHIVE_OK) return (r); @@ -242,13 +251,26 @@ client_read_proxy(struct archive_read_filter *self, const void **buff) static int64_t client_skip_proxy(struct archive_read_filter *self, int64_t request) { - int64_t r; + int64_t ask, get, total; + /* Limit our maximum seek request to 1GB on platforms + * with 32-bit off_t (such as Windows). */ + int64_t skip_limit = ((int64_t)1) << (sizeof(off_t) * 8 - 2); + if (self->archive->client.skipper == NULL) return (0); - r = (self->archive->client.skipper)(&self->archive->archive, - self->data, request); - self->archive->archive.raw_position += r; - return (r); + total = 0; + for (;;) { + ask = request; + if (ask > skip_limit) + ask = skip_limit; + get = (self->archive->client.skipper)(&self->archive->archive, + self->data, ask); + if (get == 0) + return (total); + request -= get; + self->archive->archive.raw_position += get; + total += get; + } } static int @@ -277,6 +299,7 @@ archive_read_open2(struct archive *_a, void *client_data, __archive_check_magic(_a, ARCHIVE_READ_MAGIC, ARCHIVE_STATE_NEW, "archive_read_open"); + archive_clear_error(&a->archive); if (client_reader == NULL) __archive_errx(1, @@ -331,6 +354,7 @@ build_stream(struct archive_read *a) int number_bidders, i, bid, best_bid; struct archive_read_filter_bidder *bidder, *best_bidder; struct archive_read_filter *filter; + ssize_t avail; int r; for (;;) { @@ -369,6 +393,13 @@ build_stream(struct archive_read *a) free(filter); return (r); } + /* Verify the filter by asking it for some data. */ + __archive_read_filter_ahead(filter, 1, &avail); + if (avail < 0) { + /* If the read failed, bail out now. */ + free(filter); + return (avail); + } a->filter = filter; } } @@ -386,6 +417,7 @@ archive_read_next_header2(struct archive *_a, struct archive_entry *entry) ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA, "archive_read_next_header"); + ++_a->file_count; archive_entry_clear(entry); archive_clear_error(&a->archive); @@ -735,7 +767,7 @@ _archive_read_close(struct archive *_a) /* * Release memory and other resources. */ -int +static int _archive_read_finish(struct archive *_a) { struct archive_read *a = (struct archive_read *)_a; @@ -1120,6 +1152,8 @@ __archive_read_skip(struct archive_read *a, int64_t request) if (skipped == request) return (skipped); /* We hit EOF before we satisfied the skip request. */ + if (skipped < 0) // Map error code to 0 for error message below. + skipped = 0; archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, "Truncated input file (needed %jd bytes, only %jd available)", @@ -1139,7 +1173,7 @@ __archive_read_skip_lenient(struct archive_read *a, int64_t request) int64_t __archive_read_filter_skip(struct archive_read_filter *filter, int64_t request) { - off_t bytes_skipped, total_bytes_skipped = 0; + int64_t bytes_skipped, total_bytes_skipped = 0; size_t min; if (filter->fatal) @@ -1154,7 +1188,7 @@ __archive_read_filter_skip(struct archive_read_filter *filter, int64_t request) total_bytes_skipped += bytes_skipped; } if (filter->client_avail > 0) { - min = minimum(request, (off_t)filter->client_avail); + min = minimum(request, (int64_t)filter->client_avail); bytes_skipped = __archive_read_filter_consume(filter, min); request -= bytes_skipped; total_bytes_skipped += bytes_skipped; @@ -1188,10 +1222,8 @@ __archive_read_filter_skip(struct archive_read_filter *filter, int64_t request) * have to use ordinary reads to finish out the request. */ while (request > 0) { - const void* dummy_buffer; ssize_t bytes_read; - dummy_buffer = __archive_read_filter_ahead(filter, - 1, &bytes_read); + (void)__archive_read_filter_ahead(filter, 1, &bytes_read); if (bytes_read < 0) return (bytes_read); if (bytes_read == 0) { diff --git a/lib/libarchive/archive_read_disk_entry_from_file.c b/lib/libarchive/archive_read_disk_entry_from_file.c index 8f90191352a..a8337650eef 100644 --- a/lib/libarchive/archive_read_disk_entry_from_file.c +++ b/lib/libarchive/archive_read_disk_entry_from_file.c @@ -103,7 +103,7 @@ archive_read_disk_entry_from_file(struct archive *_a, * open file descriptor which we can use in the subsequent lookups. */ if ((S_ISREG(st->st_mode) || S_ISDIR(st->st_mode))) { if (fd < 0) - fd = open(pathname, O_RDONLY | O_NONBLOCK); + fd = open(pathname, O_RDONLY | O_NONBLOCK | O_BINARY); if (fd >= 0) { unsigned long stflags; int r = ioctl(fd, EXT2_IOC_GETFLAGS, &stflags); @@ -114,6 +114,11 @@ archive_read_disk_entry_from_file(struct archive *_a, #endif if (st == NULL) { + /* TODO: On Windows, use GetFileInfoByHandle() here. + * Using Windows stat() call is badly broken, but + * even the stat() wrapper has problems because + * 'struct stat' is broken on Windows. + */ #if HAVE_FSTAT if (fd >= 0) { if (fstat(fd, &s) != 0) diff --git a/lib/libarchive/archive_read_disk_private.h b/lib/libarchive/archive_read_disk_private.h index fd385a6b77e..3e8884b613c 100644 --- a/lib/libarchive/archive_read_disk_private.h +++ b/lib/libarchive/archive_read_disk_private.h @@ -26,6 +26,10 @@ * $FreeBSD$ */ +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + #ifndef ARCHIVE_READ_DISK_PRIVATE_H_INCLUDED #define ARCHIVE_READ_DISK_PRIVATE_H_INCLUDED diff --git a/lib/libarchive/archive_read_disk_set_standard_lookup.c b/lib/libarchive/archive_read_disk_set_standard_lookup.c index 60054f918f0..dc2f67f8f07 100644 --- a/lib/libarchive/archive_read_disk_set_standard_lookup.c +++ b/lib/libarchive/archive_read_disk_set_standard_lookup.c @@ -195,6 +195,7 @@ lookup_uname_helper(struct name_cache *cache, id_t id) if (cache->buff == NULL) return (NULL); for (;;) { + result = &pwent; /* Old getpwuid_r ignores last arg. */ r = getpwuid_r((uid_t)id, &pwent, cache->buff, cache->buff_size, &result); if (r == 0) @@ -243,6 +244,7 @@ lookup_gname_helper(struct name_cache *cache, id_t id) if (cache->buff == NULL) return (NULL); for (;;) { + result = &grent; /* Old getgrgid_r ignores last arg. */ r = getgrgid_r((gid_t)id, &grent, cache->buff, cache->buff_size, &result); if (r == 0) diff --git a/lib/libarchive/archive_read_open_fd.c b/lib/libarchive/archive_read_open_fd.c index 259ddc28be5..8a7829b7fb0 100644 --- a/lib/libarchive/archive_read_open_fd.c +++ b/lib/libarchive/archive_read_open_fd.c @@ -32,6 +32,12 @@ __FBSDID("$FreeBSD$"); #ifdef HAVE_ERRNO_H #include #endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_IO_H +#include +#endif #ifdef HAVE_STDLIB_H #include #endif @@ -95,6 +101,9 @@ archive_read_open_fd(struct archive *a, int fd, size_t block_size) mine->can_skip = 1; } else mine->can_skip = 0; +#if defined(__CYGWIN__) || defined(_WIN32) + setmode(mine->fd, O_BINARY); +#endif return (archive_read_open2(a, mine, NULL, file_read, file_skip, file_close)); diff --git a/lib/libarchive/archive_read_open_file.c b/lib/libarchive/archive_read_open_file.c index 37039e95a11..1575f94ca44 100644 --- a/lib/libarchive/archive_read_open_file.c +++ b/lib/libarchive/archive_read_open_file.c @@ -35,6 +35,9 @@ __FBSDID("$FreeBSD$"); #ifdef HAVE_FCNTL_H #include #endif +#ifdef HAVE_IO_H +#include +#endif #ifdef HAVE_STDLIB_H #include #endif @@ -94,6 +97,10 @@ archive_read_open_FILE(struct archive *a, FILE *f) } else mine->can_skip = 0; +#if defined(__CYGWIN__) || defined(_WIN32) + setmode(fileno(mine->f), O_BINARY); +#endif + return (archive_read_open2(a, mine, NULL, file_read, file_skip, file_close)); } diff --git a/lib/libarchive/archive_read_open_filename.c b/lib/libarchive/archive_read_open_filename.c index 64a89b52b3c..ec0bb369e03 100644 --- a/lib/libarchive/archive_read_open_filename.c +++ b/lib/libarchive/archive_read_open_filename.c @@ -35,6 +35,9 @@ __FBSDID("$FreeBSD$"); #ifdef HAVE_FCNTL_H #include #endif +#ifdef HAVE_IO_H +#include +#endif #ifdef HAVE_STDLIB_H #include #endif @@ -96,6 +99,9 @@ archive_read_open_filename(struct archive *a, const char *filename, */ filename = ""; /* Normalize NULL to "" */ fd = 0; +#if defined(__CYGWIN__) || defined(_WIN32) + setmode(0, O_BINARY); +#endif } else { fd = open(filename, O_RDONLY | O_BINARY); if (fd < 0) { diff --git a/lib/libarchive/archive_read_private.h b/lib/libarchive/archive_read_private.h index 394d6afc9d3..ed8a889d418 100644 --- a/lib/libarchive/archive_read_private.h +++ b/lib/libarchive/archive_read_private.h @@ -25,6 +25,10 @@ * $FreeBSD$ */ +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + #ifndef ARCHIVE_READ_PRIVATE_H_INCLUDED #define ARCHIVE_READ_PRIVATE_H_INCLUDED @@ -160,7 +164,7 @@ struct archive_read { int (*read_data)(struct archive_read *, const void **, size_t *, off_t *); int (*read_data_skip)(struct archive_read *); int (*cleanup)(struct archive_read *); - } formats[8]; + } formats[9]; struct archive_format_descriptor *format; /* Active format. */ /* diff --git a/lib/libarchive/archive_read_support_compression_all.c b/lib/libarchive/archive_read_support_compression_all.c index 284eab5cb98..bb7b66cf929 100644 --- a/lib/libarchive/archive_read_support_compression_all.c +++ b/lib/libarchive/archive_read_support_compression_all.c @@ -44,11 +44,15 @@ archive_read_support_compression_all(struct archive *a) archive_read_support_compression_lzma(a); /* Xz falls back to "unxz" command-line program. */ archive_read_support_compression_xz(a); + /* The decode code doesn't use an outside library. */ + archive_read_support_compression_uu(a); /* Note: We always return ARCHIVE_OK here, even if some of the * above return ARCHIVE_WARN. The intent here is to enable * "as much as possible." Clients who need specific * compression should enable those individually so they can * verify the level of support. */ + /* Clear any warning messages set by the above functions. */ + archive_clear_error(a); return (ARCHIVE_OK); } diff --git a/lib/libarchive/archive_read_support_compression_bzip2.c b/lib/libarchive/archive_read_support_compression_bzip2.c index 693bdd63b70..e72e1c5adc8 100644 --- a/lib/libarchive/archive_read_support_compression_bzip2.c +++ b/lib/libarchive/archive_read_support_compression_bzip2.c @@ -210,12 +210,11 @@ static ssize_t bzip2_filter_read(struct archive_read_filter *self, const void **p) { struct private_data *state; - size_t read_avail, decompressed; + size_t decompressed; const char *read_buf; ssize_t ret; state = (struct private_data *)self->data; - read_avail = 0; if (state->eof) { *p = NULL; @@ -348,7 +347,7 @@ bzip2_filter_close(struct archive_read_filter *self) free(state->out_block); free(state); - return (ARCHIVE_OK); + return (ret); } #endif /* HAVE_BZLIB_H */ diff --git a/lib/libarchive/archive_read_support_compression_compress.c b/lib/libarchive/archive_read_support_compression_compress.c index e115d25a242..c6d4e8550e3 100644 --- a/lib/libarchive/archive_read_support_compression_compress.c +++ b/lib/libarchive/archive_read_support_compression_compress.c @@ -229,8 +229,8 @@ compress_bidder_init(struct archive_read_filter *self) /* XXX MOVE THE FOLLOWING OUT OF INIT() XXX */ - code = getbits(self, 8); /* Skip first signature byte. */ - code = getbits(self, 8); /* Skip second signature byte. */ + (void)getbits(self, 8); /* Skip first signature byte. */ + (void)getbits(self, 8); /* Skip second signature byte. */ code = getbits(self, 8); state->maxcode_bits = code & 0x1f; diff --git a/lib/libarchive/archive_read_support_compression_gzip.c b/lib/libarchive/archive_read_support_compression_gzip.c index b20c7697b14..bf6ee468be7 100644 --- a/lib/libarchive/archive_read_support_compression_gzip.c +++ b/lib/libarchive/archive_read_support_compression_gzip.c @@ -411,6 +411,8 @@ gzip_filter_read(struct archive_read_filter *self, const void **p) /* Consume the stream trailer; release the * decompression library. */ ret = consume_trailer(self); + if (ret < ARCHIVE_OK) + return (ret); break; default: /* Return an error. */ diff --git a/lib/libarchive/archive_read_support_compression_program.c b/lib/libarchive/archive_read_support_compression_program.c index 21c2377b53f..01552ba69e9 100644 --- a/lib/libarchive/archive_read_support_compression_program.c +++ b/lib/libarchive/archive_read_support_compression_program.c @@ -205,7 +205,7 @@ program_bidder_bid(struct archive_read_filter_bidder *self, /* No match, so don't bid. */ if (memcmp(p, state->signature, state->signature_len) != 0) return (0); - return (state->signature_len * 8); + return ((int)state->signature_len * 8); } /* Otherwise, bid once and then never bid again. */ @@ -251,6 +251,7 @@ child_stop(struct archive_read_filter *self, struct program_filter *state) return (ARCHIVE_WARN); } +#if !defined(_WIN32) || defined(__CYGWIN__) if (WIFSIGNALED(state->exit_status)) { #ifdef SIGPIPE /* If the child died because we stopped reading before @@ -267,6 +268,7 @@ child_stop(struct archive_read_filter *self, struct program_filter *state) WTERMSIG(state->exit_status)); return (ARCHIVE_WARN); } +#endif /* !_WIN32 || __CYGWIN__ */ if (WIFEXITED(state->exit_status)) { if (WEXITSTATUS(state->exit_status) == 0) diff --git a/lib/libarchive/archive_read_support_compression_uu.c b/lib/libarchive/archive_read_support_compression_uu.c new file mode 100644 index 00000000000..5f397d67d3c --- /dev/null +++ b/lib/libarchive/archive_read_support_compression_uu.c @@ -0,0 +1,627 @@ +/*- + * Copyright (c) 2009 Michihiro NAKAJIMA + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "archive_platform.h" +__FBSDID("$FreeBSD$"); + +#ifdef HAVE_ERRNO_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif + +#include "archive.h" +#include "archive_private.h" +#include "archive_read_private.h" + +struct uudecode { + int64_t total; + unsigned char *in_buff; +#define IN_BUFF_SIZE (1024) + int in_cnt; + size_t in_allocated; + unsigned char *out_buff; +#define OUT_BUFF_SIZE (64 * 1024) + int state; +#define ST_FIND_HEAD 0 +#define ST_READ_UU 1 +#define ST_UUEND 2 +#define ST_READ_BASE64 3 +}; + +static int uudecode_bidder_bid(struct archive_read_filter_bidder *, + struct archive_read_filter *filter); +static int uudecode_bidder_init(struct archive_read_filter *); + +static ssize_t uudecode_filter_read(struct archive_read_filter *, + const void **); +static int uudecode_filter_close(struct archive_read_filter *); + +int +archive_read_support_compression_uu(struct archive *_a) +{ + struct archive_read *a = (struct archive_read *)_a; + struct archive_read_filter_bidder *bidder; + + bidder = __archive_read_get_bidder(a); + archive_clear_error(_a); + if (bidder == NULL) + return (ARCHIVE_FATAL); + + bidder->data = NULL; + bidder->bid = uudecode_bidder_bid; + bidder->init = uudecode_bidder_init; + bidder->options = NULL; + bidder->free = NULL; + return (ARCHIVE_OK); +} + +static const unsigned char ascii[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '\n', 0, 0, '\r', 0, 0, /* 00 - 0F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 - 1F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 20 - 2F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 30 - 3F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 40 - 4F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 50 - 5F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 60 - 6F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, /* 70 - 7F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 8F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 9F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* A0 - AF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* B0 - BF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* C0 - CF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* D0 - DF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* E0 - EF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* F0 - FF */ +}; + +static const unsigned char uuchar[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 00 - 0F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 - 1F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 20 - 2F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 30 - 3F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 40 - 4F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 50 - 5F */ + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 60 - 6F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 70 - 7F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 8F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 9F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* A0 - AF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* B0 - BF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* C0 - CF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* D0 - DF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* E0 - EF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* F0 - FF */ +}; + +static const unsigned char base64[256] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 00 - 0F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 10 - 1F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, /* 20 - 2F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, /* 30 - 3F */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 40 - 4F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 50 - 5F */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 60 - 6F */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 70 - 7F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 80 - 8F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 90 - 9F */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* A0 - AF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* B0 - BF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* C0 - CF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* D0 - DF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* E0 - EF */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* F0 - FF */ +}; + +static const int base64num[128] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, /* 00 - 0F */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, /* 10 - 1F */ + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 62, 0, 0, 0, 63, /* 20 - 2F */ + 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 0, 0, 0, 0, 0, 0, /* 30 - 3F */ + 0, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, /* 40 - 4F */ + 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 0, 0, 0, 0, 0, /* 50 - 5F */ + 0, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, /* 60 - 6F */ + 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 0, 0, 0, 0, 0, /* 70 - 7F */ +}; + +static ssize_t +get_line(const unsigned char *b, ssize_t avail, ssize_t *nlsize) +{ + ssize_t len; + + len = 0; + while (len < avail) { + switch (ascii[*b]) { + case 0: /* Non-ascii character or control character. */ + if (nlsize != NULL) + *nlsize = 0; + return (-1); + case '\r': + if (avail-len > 1 && b[1] == '\n') { + if (nlsize != NULL) + *nlsize = 2; + return (len+2); + } + /* FALL THROUGH */ + case '\n': + if (nlsize != NULL) + *nlsize = 1; + return (len+1); + case 1: + b++; + len++; + break; + } + } + if (nlsize != NULL) + *nlsize = 0; + return (avail); +} + +static ssize_t +bid_get_line(struct archive_read_filter *filter, + const unsigned char **b, ssize_t *avail, ssize_t *ravail, ssize_t *nl) +{ + ssize_t len; + int quit; + + quit = 0; + if (*avail == 0) { + *nl = 0; + len = 0; + } else + len = get_line(*b, *avail, nl); + /* + * Read bytes more while it does not reach the end of line. + */ + while (*nl == 0 && len == *avail && !quit) { + ssize_t diff = *ravail - *avail; + + *b = __archive_read_filter_ahead(filter, 160 + *ravail, avail); + if (*b == NULL) { + if (*ravail >= *avail) + return (0); + /* Reading bytes reaches the end of file. */ + *b = __archive_read_filter_ahead(filter, *avail, avail); + quit = 1; + } + *ravail = *avail; + *b += diff; + *avail -= diff; + len = get_line(*b, *avail, nl); + } + return (len); +} + +#define UUDECODE(c) (((c) - 0x20) & 0x3f) + +static int +uudecode_bidder_bid(struct archive_read_filter_bidder *self, + struct archive_read_filter *filter) +{ + const unsigned char *b; + ssize_t avail, ravail; + ssize_t len, nl; + int l; + int firstline; + + (void)self; /* UNUSED */ + + b = __archive_read_filter_ahead(filter, 1, &avail); + if (b == NULL) + return (0); + + firstline = 20; + ravail = avail; + for (;;) { + len = bid_get_line(filter, &b, &avail, &ravail, &nl); + if (len < 0 || nl == 0) + return (0);/* Binary data. */ + if (memcmp(b, "begin ", 6) == 0 && len - nl >= 11) + l = 6; + else if (memcmp(b, "begin-base64 ", 13) == 0 && len - nl >= 18) + l = 13; + else + l = 0; + + if (l > 0 && (b[l] < '0' || b[l] > '7' || + b[l+1] < '0' || b[l+1] > '7' || + b[l+2] < '0' || b[l+2] > '7' || b[l+3] != ' ')) + l = 0; + + b += len; + avail -= len; + if (l) + break; + firstline = 0; + } + if (!avail) + return (0); + len = bid_get_line(filter, &b, &avail, &ravail, &nl); + if (len < 0 || nl == 0) + return (0);/* There are non-ascii characters. */ + avail -= len; + + if (l == 6) { + if (!uuchar[*b]) + return (0); + /* Get a length of decoded bytes. */ + l = UUDECODE(*b++); len--; + if (l > 45) + /* Normally, maximum length is 45(character 'M'). */ + return (0); + while (l && len-nl > 0) { + if (l > 0) { + if (!uuchar[*b++]) + return (0); + if (!uuchar[*b++]) + return (0); + len -= 2; + --l; + } + if (l > 0) { + if (!uuchar[*b++]) + return (0); + --len; + --l; + } + if (l > 0) { + if (!uuchar[*b++]) + return (0); + --len; + --l; + } + } + if (len-nl < 0) + return (0); + if (len-nl == 1 && + (uuchar[*b] || /* Check sum. */ + (*b >= 'a' && *b <= 'z'))) {/* Padding data(MINIX). */ + ++b; + --len; + } + b += nl; + if (avail && uuchar[*b]) + return (firstline+30); + } + if (l == 13) { + while (len-nl > 0) { + if (!base64[*b++]) + return (0); + --len; + } + b += nl; + + if (avail >= 5 && memcmp(b, "====\n", 5) == 0) + return (firstline+40); + if (avail >= 6 && memcmp(b, "====\r\n", 6) == 0) + return (firstline+40); + if (avail > 0 && base64[*b]) + return (firstline+30); + } + + return (0); +} + +static int +uudecode_bidder_init(struct archive_read_filter *self) +{ + struct uudecode *uudecode; + void *out_buff; + void *in_buff; + + self->code = ARCHIVE_COMPRESSION_UU; + self->name = "uu"; + self->read = uudecode_filter_read; + self->skip = NULL; /* not supported */ + self->close = uudecode_filter_close; + + uudecode = (struct uudecode *)calloc(sizeof(*uudecode), 1); + out_buff = malloc(OUT_BUFF_SIZE); + in_buff = malloc(IN_BUFF_SIZE); + if (uudecode == NULL || out_buff == NULL || in_buff == NULL) { + archive_set_error(&self->archive->archive, ENOMEM, + "Can't allocate data for uudecode"); + free(uudecode); + free(out_buff); + free(in_buff); + return (ARCHIVE_FATAL); + } + + self->data = uudecode; + uudecode->in_buff = in_buff; + uudecode->in_cnt = 0; + uudecode->in_allocated = IN_BUFF_SIZE; + uudecode->out_buff = out_buff; + uudecode->state = ST_FIND_HEAD; + + return (ARCHIVE_OK); +} + +static int +ensure_in_buff_size(struct archive_read_filter *self, + struct uudecode *uudecode, size_t size) +{ + + if (size > uudecode->in_allocated) { + unsigned char *ptr; + size_t newsize; + + newsize = uudecode->in_allocated << 1; + ptr = malloc(newsize); + if (ptr == NULL || + newsize < uudecode->in_allocated) { + free(ptr); + archive_set_error(&self->archive->archive, + ENOMEM, + "Can't allocate data for uudecode"); + return (ARCHIVE_FATAL); + } + if (uudecode->in_cnt) + memmove(ptr, uudecode->in_buff, + uudecode->in_cnt); + free(uudecode->in_buff); + uudecode->in_buff = ptr; + uudecode->in_allocated = newsize; + } + return (ARCHIVE_OK); +} + +static ssize_t +uudecode_filter_read(struct archive_read_filter *self, const void **buff) +{ + struct uudecode *uudecode; + const unsigned char *b, *d; + unsigned char *out; + ssize_t avail_in, ravail; + ssize_t used; + ssize_t total; + ssize_t len, llen, nl; + + uudecode = (struct uudecode *)self->data; + +read_more: + d = __archive_read_filter_ahead(self->upstream, 1, &avail_in); + if (d == NULL && avail_in < 0) + return (ARCHIVE_FATAL); + /* Quiet a code analyzer; make sure avail_in must be zero + * when d is NULL. */ + if (d == NULL) + avail_in = 0; + used = 0; + total = 0; + out = uudecode->out_buff; + ravail = avail_in; + if (uudecode->in_cnt) { + /* + * If there is remaining data which is saved by + * previous calling, use it first. + */ + if (ensure_in_buff_size(self, uudecode, + avail_in + uudecode->in_cnt) != ARCHIVE_OK) + return (ARCHIVE_FATAL); + memcpy(uudecode->in_buff + uudecode->in_cnt, + d, avail_in); + d = uudecode->in_buff; + avail_in += uudecode->in_cnt; + uudecode->in_cnt = 0; + } + for (;used < avail_in; d += llen, used += llen) { + int l, body; + + b = d; + len = get_line(b, avail_in - used, &nl); + if (len < 0) { + /* Non-ascii character is found. */ + archive_set_error(&self->archive->archive, + ARCHIVE_ERRNO_MISC, + "Insufficient compressed data"); + return (ARCHIVE_FATAL); + } + llen = len; + if (nl == 0) { + /* + * Save remaining data which does not contain + * NL('\n','\r'). + */ + if (ensure_in_buff_size(self, uudecode, len) + != ARCHIVE_OK) + return (ARCHIVE_FATAL); + if (uudecode->in_buff != b) + memmove(uudecode->in_buff, b, len); + uudecode->in_cnt = len; + if (total == 0) { + /* Do not return 0; it means end-of-file. + * We should try to read bytes more. */ + __archive_read_filter_consume( + self->upstream, ravail); + goto read_more; + } + break; + } + if (total + len * 2 > OUT_BUFF_SIZE) + break; + switch (uudecode->state) { + default: + case ST_FIND_HEAD: + if (len - nl > 13 && memcmp(b, "begin ", 6) == 0) + l = 6; + else if (len - nl > 18 && + memcmp(b, "begin-base64 ", 13) == 0) + l = 13; + else + l = 0; + if (l != 0 && b[l] >= '0' && b[l] <= '7' && + b[l+1] >= '0' && b[l+1] <= '7' && + b[l+2] >= '0' && b[l+2] <= '7' && b[l+3] == ' ') { + if (l == 6) + uudecode->state = ST_READ_UU; + else + uudecode->state = ST_READ_BASE64; + } + break; + case ST_READ_UU: + body = len - nl; + if (!uuchar[*b] || body <= 0) { + archive_set_error(&self->archive->archive, + ARCHIVE_ERRNO_MISC, + "Insufficient compressed data"); + return (ARCHIVE_FATAL); + } + /* Get length of undecoded bytes of curent line. */ + l = UUDECODE(*b++); + body--; + if (l > body) { + archive_set_error(&self->archive->archive, + ARCHIVE_ERRNO_MISC, + "Insufficient compressed data"); + return (ARCHIVE_FATAL); + } + if (l == 0) { + uudecode->state = ST_UUEND; + break; + } + while (l > 0) { + int n = 0; + + if (l > 0) { + if (!uuchar[b[0]] || !uuchar[b[1]]) + break; + n = UUDECODE(*b++) << 18; + n |= UUDECODE(*b++) << 12; + *out++ = n >> 16; total++; + --l; + } + if (l > 0) { + if (!uuchar[b[0]]) + break; + n |= UUDECODE(*b++) << 6; + *out++ = (n >> 8) & 0xFF; total++; + --l; + } + if (l > 0) { + if (!uuchar[b[0]]) + break; + n |= UUDECODE(*b++); + *out++ = n & 0xFF; total++; + --l; + } + } + if (l) { + archive_set_error(&self->archive->archive, + ARCHIVE_ERRNO_MISC, + "Insufficient compressed data"); + return (ARCHIVE_FATAL); + } + break; + case ST_UUEND: + if (len - nl == 3 && memcmp(b, "end ", 3) == 0) + uudecode->state = ST_FIND_HEAD; + else { + archive_set_error(&self->archive->archive, + ARCHIVE_ERRNO_MISC, + "Insufficient compressed data"); + return (ARCHIVE_FATAL); + } + break; + case ST_READ_BASE64: + l = len - nl; + if (l >= 3 && b[0] == '=' && b[1] == '=' && + b[2] == '=') { + uudecode->state = ST_FIND_HEAD; + break; + } + while (l > 0) { + int n = 0; + + if (l > 0) { + if (!base64[b[0]] || !base64[b[1]]) + break; + n = base64num[*b++] << 18; + n |= base64num[*b++] << 12; + *out++ = n >> 16; total++; + l -= 2; + } + if (l > 0) { + if (*b == '=') + break; + if (!base64[*b]) + break; + n |= base64num[*b++] << 6; + *out++ = (n >> 8) & 0xFF; total++; + --l; + } + if (l > 0) { + if (*b == '=') + break; + if (!base64[*b]) + break; + n |= base64num[*b++]; + *out++ = n & 0xFF; total++; + --l; + } + } + if (l && *b != '=') { + archive_set_error(&self->archive->archive, + ARCHIVE_ERRNO_MISC, + "Insufficient compressed data"); + return (ARCHIVE_FATAL); + } + break; + } + } + + __archive_read_filter_consume(self->upstream, ravail); + + *buff = uudecode->out_buff; + uudecode->total += total; + return (total); +} + +static int +uudecode_filter_close(struct archive_read_filter *self) +{ + struct uudecode *uudecode; + + uudecode = (struct uudecode *)self->data; + free(uudecode->in_buff); + free(uudecode->out_buff); + free(uudecode); + + return (ARCHIVE_OK); +} + diff --git a/lib/libarchive/archive_read_support_compression_xz.c b/lib/libarchive/archive_read_support_compression_xz.c index d3f42978679..1554d99b38d 100644 --- a/lib/libarchive/archive_read_support_compression_xz.c +++ b/lib/libarchive/archive_read_support_compression_xz.c @@ -48,6 +48,7 @@ __FBSDID("$FreeBSD$"); #endif #include "archive.h" +#include "archive_endian.h" #include "archive_private.h" #include "archive_read_private.h" @@ -205,37 +206,100 @@ lzma_bidder_bid(struct archive_read_filter_bidder *self, { const unsigned char *buffer; ssize_t avail; + uint32_t dicsize; + uint64_t uncompressed_size; int bits_checked; (void)self; /* UNUSED */ - buffer = __archive_read_filter_ahead(filter, 6, &avail); + buffer = __archive_read_filter_ahead(filter, 14, &avail); if (buffer == NULL) return (0); - /* First byte of raw LZMA stream is always 0x5d. */ + /* First byte of raw LZMA stream is commonly 0x5d. + * The first byte is a special number, which consists of + * three parameters of LZMA compression, a number of literal + * context bits(which is from 0 to 8, default is 3), a number + * of literal pos bits(which is from 0 to 4, default is 0), + * a number of pos bits(which is from 0 to 4, default is 2). + * The first byte is made by + * (pos bits * 5 + literal pos bit) * 9 + * literal contest bit, + * and so the default value in this field is + * (2 * 5 + 0) * 9 + 3 = 0x5d. + * lzma of LZMA SDK has options to change those parameters. + * It means a range of this field is from 0 to 224. And lzma of + * XZ Utils with option -e records 0x5e in this field. */ + /* NOTE: If this checking of the first byte increases false + * recognition, we should allow only 0x5d and 0x5e for the first + * byte of LZMA stream. */ bits_checked = 0; - if (buffer[0] != 0x5d) + if (buffer[0] > (4 * 5 + 4) * 9 + 8) return (0); - bits_checked += 8; + /* Most likely value in the first byte of LZMA stream. */ + if (buffer[0] == 0x5d || buffer[0] == 0x5e) + bits_checked += 8; - /* Second through fifth bytes are dictionary code, stored in - * little-endian order. The two least-significant bytes are - * always zero. */ - if (buffer[1] != 0 || buffer[2] != 0) - return (0); - bits_checked += 16; + /* Sixth through fourteenth bytes are uncompressed size, + * stored in little-endian order. `-1' means uncompressed + * size is unknown and lzma of XZ Utils always records `-1' + * in this field. */ + uncompressed_size = archive_le64dec(buffer+5); + if (uncompressed_size == (uint64_t)ARCHIVE_LITERAL_LL(-1)) + bits_checked += 64; - /* ??? TODO: Fix this. ??? */ - /* NSIS format check uses this, but I've seen tar.lzma - * archives where this byte is 0xff, not 0. Can it - * ever be anything other than 0 or 0xff? - */ -#if 0 - if (buffer[5] != 0) + /* Second through fifth bytes are dictionary size, stored in + * little-endian order. The minimum dictionary size is + * 1 << 12(4KiB) which the lzma of LZMA SDK uses with option + * -d12 and the maxinam dictionary size is 1 << 27(128MiB) + * which the one uses with option -d27. + * NOTE: A comment of LZMA SDK source code says this dictionary + * range is from 1 << 12 to 1 << 30. */ + dicsize = archive_le32dec(buffer+1); + switch (dicsize) { + case 0x00001000:/* lzma of LZMA SDK option -d12. */ + case 0x00002000:/* lzma of LZMA SDK option -d13. */ + case 0x00004000:/* lzma of LZMA SDK option -d14. */ + case 0x00008000:/* lzma of LZMA SDK option -d15. */ + case 0x00010000:/* lzma of XZ Utils option -0 and -1. + * lzma of LZMA SDK option -d16. */ + case 0x00020000:/* lzma of LZMA SDK option -d17. */ + case 0x00040000:/* lzma of LZMA SDK option -d18. */ + case 0x00080000:/* lzma of XZ Utils option -2. + * lzma of LZMA SDK option -d19. */ + case 0x00100000:/* lzma of XZ Utils option -3. + * lzma of LZMA SDK option -d20. */ + case 0x00200000:/* lzma of XZ Utils option -4. + * lzma of LZMA SDK option -d21. */ + case 0x00400000:/* lzma of XZ Utils option -5. + * lzma of LZMA SDK option -d22. */ + case 0x00800000:/* lzma of XZ Utils option -6. + * lzma of LZMA SDK option -d23. */ + case 0x01000000:/* lzma of XZ Utils option -7. + * lzma of LZMA SDK option -d24. */ + case 0x02000000:/* lzma of XZ Utils option -8. + * lzma of LZMA SDK option -d25. */ + case 0x04000000:/* lzma of XZ Utils option -9. + * lzma of LZMA SDK option -d26. */ + case 0x08000000:/* lzma of LZMA SDK option -d27. */ + bits_checked += 32; + break; + default: + /* If a memory usage for encoding was not enough on + * the platform where LZMA stream was made, lzma of + * XZ Utils automatically decreased the dictionary + * size to enough memory for encoding by 1Mi bytes + * (1 << 20).*/ + if (dicsize <= 0x03F00000 && dicsize >= 0x00300000 && + (dicsize & ((1 << 20)-1)) == 0 && + bits_checked == 8 + 64) { + bits_checked += 32; + break; + } + /* Otherwise dictionary size is unlikely. But it is + * possible that someone makes lzma stream with + * liblzma/LZMA SDK in one's dictionary size. */ return (0); - bits_checked += 8; -#endif + } /* TODO: The above test is still very weak. It would be * good to do better. */ @@ -304,11 +368,11 @@ xz_lzma_bidder_init(struct archive_read_filter *self) */ if (self->code == ARCHIVE_COMPRESSION_XZ) ret = lzma_stream_decoder(&(state->stream), - (1U << 23) + (1U << 21),/* memlimit */ + (1U << 30),/* memlimit */ LZMA_CONCATENATED); else ret = lzma_alone_decoder(&(state->stream), - (1U << 23) + (1U << 21));/* memlimit */ + (1U << 30));/* memlimit */ if (ret == LZMA_OK) return (ARCHIVE_OK); diff --git a/lib/libarchive/archive_read_support_format_ar.c b/lib/libarchive/archive_read_support_format_ar.c index 0992b277e72..8b95f2216ed 100644 --- a/lib/libarchive/archive_read_support_format_ar.c +++ b/lib/libarchive/archive_read_support_format_ar.c @@ -40,6 +40,9 @@ __FBSDID("$FreeBSD$"); #ifdef HAVE_STRING_H #include #endif +#ifdef HAVE_LIMITS_H +#include +#endif #include "archive.h" #include "archive_entry.h" @@ -134,7 +137,6 @@ archive_read_format_ar_cleanup(struct archive_read *a) static int archive_read_format_ar_bid(struct archive_read *a) { - struct ar *ar; const void *h; if (a->archive.archive_format != 0 && @@ -142,8 +144,6 @@ archive_read_format_ar_bid(struct archive_read *a) ARCHIVE_FORMAT_AR) return(0); - ar = (struct ar *)(a->format->data); - /* * Verify the 8-byte file signature. * TODO: Do we need to check more than this? diff --git a/lib/libarchive/archive_read_support_format_cpio.c b/lib/libarchive/archive_read_support_format_cpio.c index 3bf05ce977e..7e52fbe1b81 100644 --- a/lib/libarchive/archive_read_support_format_cpio.c +++ b/lib/libarchive/archive_read_support_format_cpio.c @@ -92,7 +92,7 @@ struct links_entry { struct links_entry *previous; int links; dev_t dev; - ino_t ino; + int64_t ino; char *name; }; @@ -356,7 +356,7 @@ find_newc_header(struct archive_read *a) * Scan ahead until we find something that looks * like an odc header. */ - while (p + sizeof(struct cpio_newc_header) < q) { + while (p + sizeof(struct cpio_newc_header) <= q) { switch (p[5]) { case '1': case '2': @@ -490,7 +490,7 @@ find_odc_header(struct archive_read *a) * Scan ahead until we find something that looks * like an odc header. */ - while (p + sizeof(struct cpio_odc_header) < q) { + while (p + sizeof(struct cpio_odc_header) <= q) { switch (p[5]) { case '7': if (memcmp("070707", p, 6) == 0 @@ -727,48 +727,51 @@ atol16(const char *p, unsigned char_cnt) static void record_hardlink(struct cpio *cpio, struct archive_entry *entry) { - struct links_entry *le; + struct links_entry *le; dev_t dev; - ino_t ino; + int64_t ino; + + if (archive_entry_nlink(entry) <= 1) + return; dev = archive_entry_dev(entry); - ino = archive_entry_ino(entry); + ino = archive_entry_ino64(entry); - /* - * First look in the list of multiply-linked files. If we've - * already dumped it, convert this entry to a hard link entry. - */ - for (le = cpio->links_head; le; le = le->next) { - if (le->dev == dev && le->ino == ino) { - archive_entry_copy_hardlink(entry, le->name); + /* + * First look in the list of multiply-linked files. If we've + * already dumped it, convert this entry to a hard link entry. + */ + for (le = cpio->links_head; le; le = le->next) { + if (le->dev == dev && le->ino == ino) { + archive_entry_copy_hardlink(entry, le->name); - if (--le->links <= 0) { - if (le->previous != NULL) - le->previous->next = le->next; - if (le->next != NULL) - le->next->previous = le->previous; - if (cpio->links_head == le) - cpio->links_head = le->next; + if (--le->links <= 0) { + if (le->previous != NULL) + le->previous->next = le->next; + if (le->next != NULL) + le->next->previous = le->previous; + if (cpio->links_head == le) + cpio->links_head = le->next; free(le->name); - free(le); - } + free(le); + } - return; - } - } + return; + } + } - le = (struct links_entry *)malloc(sizeof(struct links_entry)); + le = (struct links_entry *)malloc(sizeof(struct links_entry)); if (le == NULL) __archive_errx(1, "Out of memory adding file to list"); - if (cpio->links_head != NULL) - cpio->links_head->previous = le; - le->next = cpio->links_head; - le->previous = NULL; - cpio->links_head = le; - le->dev = dev; - le->ino = ino; - le->links = archive_entry_nlink(entry) - 1; - le->name = strdup(archive_entry_pathname(entry)); + if (cpio->links_head != NULL) + cpio->links_head->previous = le; + le->next = cpio->links_head; + le->previous = NULL; + cpio->links_head = le; + le->dev = dev; + le->ino = ino; + le->links = archive_entry_nlink(entry) - 1; + le->name = strdup(archive_entry_pathname(entry)); if (le->name == NULL) __archive_errx(1, "Out of memory adding file to list"); } diff --git a/lib/libarchive/archive_read_support_format_iso9660.c b/lib/libarchive/archive_read_support_format_iso9660.c index efc39b46e47..b1cdda0ee1d 100644 --- a/lib/libarchive/archive_read_support_format_iso9660.c +++ b/lib/libarchive/archive_read_support_format_iso9660.c @@ -1,6 +1,7 @@ /*- * Copyright (c) 2003-2007 Tim Kientzle * Copyright (c) 2009 Andreas Henriksson + * Copyright (c) 2009 Michihiro NAKAJIMA * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -39,8 +40,12 @@ __FBSDID("$FreeBSD$"); #include #endif #include +#ifdef HAVE_ZLIB_H +#include +#endif #include "archive.h" +#include "archive_endian.h" #include "archive_entry.h" #include "archive_private.h" #include "archive_read_private.h" @@ -73,6 +78,8 @@ __FBSDID("$FreeBSD$"); * the file body. This strategy allows us to read most compliant * CDs with a single pass through the data, as required by libarchive. */ +#define LOGICAL_BLOCK_SIZE 2048 +#define SYSTEM_AREA_BLOCK 16 /* Structure of on-disk primary volume descriptor. */ #define PVD_type_offset 0 @@ -158,6 +165,8 @@ __FBSDID("$FreeBSD$"); #define SVD_version_offset (SVD_id_offset + SVD_id_size) #define SVD_version_size 1 /* ... */ +#define SVD_reserved1_offset 72 +#define SVD_reserved1_size 8 #define SVD_volume_space_size_offset 80 #define SVD_volume_space_size_size 8 #define SVD_escape_sequences_offset (SVD_volume_space_size_offset + SVD_volume_space_size_size) @@ -165,9 +174,16 @@ __FBSDID("$FreeBSD$"); /* ... */ #define SVD_logical_block_size_offset 128 #define SVD_logical_block_size_size 4 +#define SVD_type_L_path_table_offset 140 +#define SVD_type_M_path_table_offset 148 /* ... */ #define SVD_root_directory_record_offset 156 #define SVD_root_directory_record_size 34 +#define SVD_file_structure_version_offset 881 +#define SVD_reserved2_offset 882 +#define SVD_reserved2_size 1 +#define SVD_reserved3_offset 1395 +#define SVD_reserved3_size 653 /* ... */ /* FIXME: validate correctness of last SVD entry offset. */ @@ -198,60 +214,145 @@ __FBSDID("$FreeBSD$"); #define DR_name_len_size 1 #define DR_name_offset 33 +#ifdef HAVE_ZLIB_H +static const unsigned char zisofs_magic[8] = { + 0x37, 0xE4, 0x53, 0x96, 0xC9, 0xDB, 0xD6, 0x07 +}; + +struct zisofs { + /* Set 1 if this file compressed by paged zlib */ + int pz; + int pz_log2_bs; /* Log2 of block size */ + uint64_t pz_uncompressed_size; + + int initialized; + unsigned char *uncompressed_buffer; + size_t uncompressed_buffer_size; + + uint32_t pz_offset; + unsigned char header[16]; + size_t header_avail; + int header_passed; + unsigned char *block_pointers; + size_t block_pointers_alloc; + size_t block_pointers_size; + size_t block_pointers_avail; + size_t block_off; + uint32_t block_avail; + + z_stream stream; + int stream_valid; +}; +#else +struct zisofs { + /* Set 1 if this file compressed by paged zlib */ + int pz; +}; +#endif + +struct content { + uint64_t offset;/* Offset on disk. */ + uint64_t size; /* File size in bytes. */ + struct content *next; +}; + /* In-memory storage for a directory record. */ struct file_info { struct file_info *parent; + struct file_info *next; int refcount; - uint64_t offset; /* Offset on disk. */ - uint64_t size; /* File size in bytes. */ - uint64_t ce_offset; /* Offset of CE */ - uint64_t ce_size; /* Size of CE */ - time_t birthtime; /* File created time. */ - time_t mtime; /* File last modified time. */ - time_t atime; /* File last accessed time. */ - time_t ctime; /* File attribute change time. */ - uint64_t rdev; /* Device number */ + int subdirs; + uint64_t key; /* Heap Key. */ + uint64_t offset; /* Offset on disk. */ + uint64_t size; /* File size in bytes. */ + uint32_t ce_offset; /* Offset of CE. */ + uint32_t ce_size; /* Size of CE. */ + char re; /* Having RRIP "RE" extension. */ + uint64_t cl_offset; /* Having RRIP "CL" extension. */ + int birthtime_is_set; + time_t birthtime; /* File created time. */ + time_t mtime; /* File last modified time. */ + time_t atime; /* File last accessed time. */ + time_t ctime; /* File attribute change time. */ + uint64_t rdev; /* Device number. */ mode_t mode; uid_t uid; gid_t gid; - ino_t inode; + int64_t number; int nlinks; struct archive_string name; /* Pathname */ char name_continues; /* Non-zero if name continues */ struct archive_string symlink; char symlink_continues; /* Non-zero if link continues */ + /* Set 1 if this file compressed by paged zlib(zisofs) */ + int pz; + int pz_log2_bs; /* Log2 of block size */ + uint64_t pz_uncompressed_size; + /* Set 1 if this file is multi extent. */ + int multi_extent; + struct { + struct content *first; + struct content **last; + } contents; + char exposed; }; +struct heap_queue { + struct file_info **files; + int allocated; + int used; +}; struct iso9660 { int magic; #define ISO9660_MAGIC 0x96609660 - int option_ignore_joliet; + int opt_support_joliet; + int opt_support_rockridge; struct archive_string pathname; - char seenRockridge; /* Set true if RR extensions are used. */ - unsigned char suspOffset; + char seenRockridge; /* Set true if RR extensions are used. */ + char seenSUSP; /* Set true if SUSP is beging used. */ char seenJoliet; - uint64_t previous_offset; - uint64_t previous_size; + unsigned char suspOffset; + struct file_info *rr_moved; + struct heap_queue re_dirs; + struct heap_queue cl_files; + struct read_ce_queue { + struct read_ce_req { + uint64_t offset;/* Offset of CE on disk. */ + struct file_info *file; + } *reqs; + int cnt; + int allocated; + } read_ce_req; + + int64_t previous_number; struct archive_string previous_pathname; - /* TODO: Make this a heap for fast inserts and deletions. */ - struct file_info **pending_files; - int pending_files_allocated; - int pending_files_used; + struct heap_queue pending_files; + struct { + struct file_info *first; + struct file_info **last; + } cache_files; uint64_t current_position; ssize_t logical_block_size; uint64_t volume_size; /* Total size of volume in bytes. */ + int32_t volume_block;/* Total size of volume in logical blocks. */ + + struct vd { + int location; /* Location of Extent. */ + uint32_t size; + } primary, joliet; off_t entry_sparse_offset; int64_t entry_bytes_remaining; + struct zisofs entry_zisofs; + struct content *entry_content; }; -static void add_entry(struct iso9660 *iso9660, struct file_info *file); static int archive_read_format_iso9660_bid(struct archive_read *); static int archive_read_format_iso9660_options(struct archive_read *, const char *, const char *); @@ -268,25 +369,48 @@ static void dump_isodirrec(FILE *, const unsigned char *isodirrec); static time_t time_from_tm(struct tm *); static time_t isodate17(const unsigned char *); static time_t isodate7(const unsigned char *); +static int isBootRecord(struct iso9660 *, const unsigned char *); +static int isVolumePartition(struct iso9660 *, const unsigned char *); +static int isVDSetTerminator(struct iso9660 *, const unsigned char *); static int isJolietSVD(struct iso9660 *, const unsigned char *); +static int isSVD(struct iso9660 *, const unsigned char *); +static int isEVD(struct iso9660 *, const unsigned char *); static int isPVD(struct iso9660 *, const unsigned char *); -static struct file_info *next_entry(struct iso9660 *); +static struct file_info *next_cache_entry(struct iso9660 *iso9660); static int next_entry_seek(struct archive_read *a, struct iso9660 *iso9660, struct file_info **pfile); static struct file_info * - parse_file_info(struct iso9660 *iso9660, + parse_file_info(struct archive_read *a, struct file_info *parent, const unsigned char *isodirrec); -static void parse_rockridge(struct iso9660 *iso9660, +static int parse_rockridge(struct archive_read *a, struct file_info *file, const unsigned char *start, const unsigned char *end); +static int register_CE(struct archive_read *a, int32_t location, + struct file_info *file); +static int read_CE(struct archive_read *a, struct iso9660 *iso9660); static void parse_rockridge_NM1(struct file_info *, const unsigned char *, int); static void parse_rockridge_SL1(struct file_info *, const unsigned char *, int); static void parse_rockridge_TF1(struct file_info *, const unsigned char *, int); +static void parse_rockridge_ZF1(struct file_info *, + const unsigned char *, int); static void release_file(struct iso9660 *, struct file_info *); static unsigned toi(const void *p, int n); +static inline void cache_add_entry(struct iso9660 *iso9660, + struct file_info *file); +static inline void cache_add_to_next_of_parent(struct iso9660 *iso9660, + struct file_info *file); +static inline struct file_info *cache_get_entry(struct iso9660 *iso9660); +static void heap_add_entry(struct heap_queue *heap, + struct file_info *file, uint64_t key); +static struct file_info *heap_get_entry(struct heap_queue *heap); + +#define add_entry(iso9660, file) \ + heap_add_entry(&((iso9660)->pending_files), file, file->offset) +#define next_entry(iso9660) \ + heap_get_entry(&((iso9660)->pending_files)) int archive_read_support_format_iso9660(struct archive *_a) @@ -302,6 +426,12 @@ archive_read_support_format_iso9660(struct archive *_a) } memset(iso9660, 0, sizeof(*iso9660)); iso9660->magic = ISO9660_MAGIC; + iso9660->cache_files.first = NULL; + iso9660->cache_files.last = &(iso9660->cache_files.first); + /* Enable to support Joliet extensions by default. */ + iso9660->opt_support_joliet = 1; + /* Enable to support Rock Ridge extensions by default. */ + iso9660->opt_support_rockridge = 1; r = __archive_read_register_format(a, iso9660, @@ -325,10 +455,10 @@ static int archive_read_format_iso9660_bid(struct archive_read *a) { struct iso9660 *iso9660; - ssize_t bytes_read, brsvd; + ssize_t bytes_read; const void *h; - const unsigned char *p, *psvd; - int bid; + const unsigned char *p; + int seenTerminator; iso9660 = (struct iso9660 *)(a->format->data); @@ -337,34 +467,56 @@ archive_read_format_iso9660_bid(struct archive_read *a) * 8 sectors of the volume descriptor table. Of course, * if the I/O layer gives us more, we'll take it. */ - h = __archive_read_ahead(a, 32768 + 8*2048, &bytes_read); +#define RESERVED_AREA (SYSTEM_AREA_BLOCK * LOGICAL_BLOCK_SIZE) + h = __archive_read_ahead(a, + RESERVED_AREA + 8 * LOGICAL_BLOCK_SIZE, + &bytes_read); if (h == NULL) return (-1); p = (const unsigned char *)h; /* Skip the reserved area. */ - bytes_read -= 32768; - p += 32768; + bytes_read -= RESERVED_AREA; + p += RESERVED_AREA; - /* Check each volume descriptor to locate possible SVD with Joliet. */ - for (brsvd = bytes_read, psvd = p; - !iso9660->option_ignore_joliet && brsvd > 2048; - brsvd -= 2048, psvd += 2048) { - bid = isJolietSVD(iso9660, psvd); - if (bid > 0) - return (bid); - if (*p == '\177') /* End-of-volume-descriptor marker. */ - break; - } - - /* Check each volume descriptor to locate the PVD. */ - for (; bytes_read > 2048; bytes_read -= 2048, p += 2048) { - bid = isPVD(iso9660, p); - if (bid > 0) - return (bid); - if (*p == '\177') /* End-of-volume-descriptor marker. */ + /* Check each volume descriptor. */ + seenTerminator = 0; + for (; bytes_read > LOGICAL_BLOCK_SIZE; + bytes_read -= LOGICAL_BLOCK_SIZE, p += LOGICAL_BLOCK_SIZE) { + /* Do not handle undefined Volume Descriptor Type. */ + if (p[0] >= 4 && p[0] <= 254) + return (0); + /* Standard Identifier must be "CD001" */ + if (memcmp(p + 1, "CD001", 5) != 0) + return (0); + if (!iso9660->primary.location) { + if (isPVD(iso9660, p)) + continue; + } + if (!iso9660->joliet.location) { + if (isJolietSVD(iso9660, p)) + continue; + } + if (isBootRecord(iso9660, p)) + continue; + if (isEVD(iso9660, p)) + continue; + if (isSVD(iso9660, p)) + continue; + if (isVolumePartition(iso9660, p)) + continue; + if (isVDSetTerminator(iso9660, p)) { + seenTerminator = 1; break; + } + return (0); } + /* + * ISO 9660 format must have Primary Volume Descriptor and + * Volume Descriptor Set Terminator. + */ + if (seenTerminator && iso9660->primary.location > 16) + return (48); /* We didn't find a valid PVD; return a bid of zero. */ return (0); @@ -383,9 +535,14 @@ archive_read_format_iso9660_options(struct archive_read *a, strcmp(val, "ignore") == 0 || strcmp(val, "disable") == 0 || strcmp(val, "0") == 0) - iso9660->option_ignore_joliet = 1; + iso9660->opt_support_joliet = 0; else - iso9660->option_ignore_joliet = 0; + iso9660->opt_support_joliet = 1; + return (ARCHIVE_OK); + } + if (strcmp(key, "rockridge") == 0 || + strcmp(key, "Rockridge") == 0) { + iso9660->opt_support_rockridge = val != NULL; return (ARCHIVE_OK); } @@ -396,17 +553,80 @@ archive_read_format_iso9660_options(struct archive_read *a, } static int -isJolietSVD(struct iso9660 *iso9660, const unsigned char *h) +isBootRecord(struct iso9660 *iso9660, const unsigned char *h) { - struct file_info *file; - const unsigned char *p; + (void)iso9660; /* UNUSED */ - /* Type 2 means it's a SVD. */ - if (h[SVD_type_offset] != 2) + /* Type of the Volume Descriptor Boot Record must be 0. */ + if (h[0] != 0) return (0); - /* ID must be "CD001" */ - if (memcmp(h + SVD_id_offset, "CD001", 5) != 0) + /* Volume Descriptor Version must be 1. */ + if (h[6] != 1) + return (0); + + return (1); +} + +static int +isVolumePartition(struct iso9660 *iso9660, const unsigned char *h) +{ + int32_t location; + + /* Type of the Volume Partition Descriptor must be 3. */ + if (h[0] != 3) + return (0); + + /* Volume Descriptor Version must be 1. */ + if (h[6] != 1) + return (0); + /* Unused Field */ + if (h[7] != 0) + return (0); + + location = archive_le32dec(h + 72); + if (location <= SYSTEM_AREA_BLOCK || + location >= iso9660->volume_block) + return (0); + if ((uint32_t)location != archive_be32dec(h + 76)) + return (0); + + return (1); +} + +static int +isVDSetTerminator(struct iso9660 *iso9660, const unsigned char *h) +{ + int i; + + (void)iso9660; /* UNUSED */ + + /* Type of the Volume Descriptor Set Terminator must be 255. */ + if (h[0] != 255) + return (0); + + /* Volume Descriptor Version must be 1. */ + if (h[6] != 1) + return (0); + + /* Reserved field must be 0. */ + for (i = 7; i < 2048; ++i) + if (h[i] != 0) + return (0); + + return (1); +} + +static int +isJolietSVD(struct iso9660 *iso9660, const unsigned char *h) +{ + const unsigned char *p; + ssize_t logical_block_size; + int32_t volume_block; + + /* Check if current sector is a kind of Supplementary Volume + * Descriptor. */ + if (!isSVD(iso9660, h)) return (0); /* FIXME: do more validations according to joliet spec. */ @@ -431,23 +651,160 @@ isJolietSVD(struct iso9660 *iso9660, const unsigned char *h) } else /* not joliet */ return (0); - iso9660->logical_block_size = toi(h + SVD_logical_block_size_offset, 2); - if (iso9660->logical_block_size <= 0) + logical_block_size = + archive_le16dec(h + SVD_logical_block_size_offset); + volume_block = archive_le32dec(h + SVD_volume_space_size_offset); + + iso9660->logical_block_size = logical_block_size; + iso9660->volume_block = volume_block; + iso9660->volume_size = logical_block_size * (uint64_t)volume_block; + /* Read Root Directory Record in Volume Descriptor. */ + p = h + SVD_root_directory_record_offset; + iso9660->joliet.location = archive_le32dec(p + DR_extent_offset); + iso9660->joliet.size = archive_le32dec(p + DR_size_offset); + + return (48); +} + +static int +isSVD(struct iso9660 *iso9660, const unsigned char *h) +{ + const unsigned char *p; + ssize_t logical_block_size; + int32_t volume_block; + int32_t location; + int i; + + (void)iso9660; /* UNUSED */ + + /* Type 2 means it's a SVD. */ + if (h[SVD_type_offset] != 2) return (0); - iso9660->volume_size = iso9660->logical_block_size - * (uint64_t)toi(h + SVD_volume_space_size_offset, 4); + /* Reserved field must be 0. */ + for (i = 0; i < SVD_reserved1_size; ++i) + if (h[SVD_reserved1_offset + i] != 0) + return (0); + for (i = 0; i < SVD_reserved2_size; ++i) + if (h[SVD_reserved2_offset + i] != 0) + return (0); + for (i = 0; i < SVD_reserved3_size; ++i) + if (h[SVD_reserved3_offset + i] != 0) + return (0); -#if DEBUG - fprintf(stderr, "Joliet UCS-2 level %d with " - "logical block size:%d, volume size:%d\n", - iso9660->seenJoliet, - iso9660->logical_block_size, iso9660->volume_size); -#endif + /* File structure version must be 1 for ISO9660/ECMA119. */ + if (h[SVD_file_structure_version_offset] != 1) + return (0); - /* Store the root directory in the pending list. */ - file = parse_file_info(iso9660, NULL, h + SVD_root_directory_record_offset); - add_entry(iso9660, file); + logical_block_size = + archive_le16dec(h + SVD_logical_block_size_offset); + if (logical_block_size <= 0) + return (0); + + volume_block = archive_le32dec(h + SVD_volume_space_size_offset); + if (volume_block <= SYSTEM_AREA_BLOCK+4) + return (0); + + /* Location of Occurrence of Type L Path Table must be + * available location, + * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */ + location = archive_le32dec(h+SVD_type_L_path_table_offset); + if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block) + return (0); + + /* Location of Occurrence of Type M Path Table must be + * available location, + * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */ + location = archive_be32dec(h+SVD_type_M_path_table_offset); + if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block) + return (0); + + /* Read Root Directory Record in Volume Descriptor. */ + p = h + SVD_root_directory_record_offset; + if (p[DR_length_offset] != 34) + return (0); + + return (48); +} + +static int +isEVD(struct iso9660 *iso9660, const unsigned char *h) +{ + const unsigned char *p; + ssize_t logical_block_size; + int32_t volume_block; + int32_t location; + int i; + + (void)iso9660; /* UNUSED */ + + /* Type of the Enhanced Volume Descriptor must be 2. */ + if (h[PVD_type_offset] != 2) + return (0); + + /* EVD version must be 2. */ + if (h[PVD_version_offset] != 2) + return (0); + + /* Reserved field must be 0. */ + if (h[PVD_reserved1_offset] != 0) + return (0); + + /* Reserved field must be 0. */ + for (i = 0; i < PVD_reserved2_size; ++i) + if (h[PVD_reserved2_offset + i] != 0) + return (0); + + /* Reserved field must be 0. */ + for (i = 0; i < PVD_reserved3_size; ++i) + if (h[PVD_reserved3_offset + i] != 0) + return (0); + + /* Logical block size must be > 0. */ + /* I've looked at Ecma 119 and can't find any stronger + * restriction on this field. */ + logical_block_size = + archive_le16dec(h + PVD_logical_block_size_offset); + if (logical_block_size <= 0) + return (0); + + volume_block = + archive_le32dec(h + PVD_volume_space_size_offset); + if (volume_block <= SYSTEM_AREA_BLOCK+4) + return (0); + + /* File structure version must be 2 for ISO9660:1999. */ + if (h[PVD_file_structure_version_offset] != 2) + return (0); + + /* Location of Occurrence of Type L Path Table must be + * available location, + * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */ + location = archive_le32dec(h+PVD_type_1_path_table_offset); + if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block) + return (0); + + /* Location of Occurrence of Type M Path Table must be + * available location, + * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */ + location = archive_be32dec(h+PVD_type_m_path_table_offset); + if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block) + return (0); + + /* Reserved field must be 0. */ + for (i = 0; i < PVD_reserved4_size; ++i) + if (h[PVD_reserved4_offset + i] != 0) + return (0); + + /* Reserved field must be 0. */ + for (i = 0; i < PVD_reserved5_size; ++i) + if (h[PVD_reserved5_offset + i] != 0) + return (0); + + /* Read Root Directory Record in Volume Descriptor. */ + p = h + PVD_root_directory_record_offset; + if (p[DR_length_offset] != 34) + return (0); return (48); } @@ -455,17 +812,16 @@ isJolietSVD(struct iso9660 *iso9660, const unsigned char *h) static int isPVD(struct iso9660 *iso9660, const unsigned char *h) { - struct file_info *file; + const unsigned char *p; + ssize_t logical_block_size; + int32_t volume_block; + int32_t location; int i; /* Type of the Primary Volume Descriptor must be 1. */ if (h[PVD_type_offset] != 1) return (0); - /* ID must be "CD001" */ - if (memcmp(h + PVD_id_offset, "CD001", 5) != 0) - return (0); - /* PVD version must be 1. */ if (h[PVD_version_offset] != 1) return (0); @@ -487,17 +843,32 @@ isPVD(struct iso9660 *iso9660, const unsigned char *h) /* Logical block size must be > 0. */ /* I've looked at Ecma 119 and can't find any stronger * restriction on this field. */ - iso9660->logical_block_size = toi(h + PVD_logical_block_size_offset, 2); - if (iso9660->logical_block_size <= 0) + logical_block_size = + archive_le16dec(h + PVD_logical_block_size_offset); + if (logical_block_size <= 0) return (0); - iso9660->volume_size = iso9660->logical_block_size - * (uint64_t)toi(h + PVD_volume_space_size_offset, 4); + volume_block = archive_le32dec(h + PVD_volume_space_size_offset); + if (volume_block <= SYSTEM_AREA_BLOCK+4) + return (0); /* File structure version must be 1 for ISO9660/ECMA119. */ if (h[PVD_file_structure_version_offset] != 1) return (0); + /* Location of Occurrence of Type L Path Table must be + * available location, + * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */ + location = archive_le32dec(h+PVD_type_1_path_table_offset); + if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block) + return (0); + + /* Location of Occurrence of Type M Path Table must be + * available location, + * > SYSTEM_AREA_BLOCK(16) + 2 and < Volume Space Size. */ + location = archive_be32dec(h+PVD_type_m_path_table_offset); + if (location <= SYSTEM_AREA_BLOCK+2 || location >= volume_block) + return (0); /* Reserved field must be 0. */ for (i = 0; i < PVD_reserved4_size; ++i) @@ -512,19 +883,239 @@ isPVD(struct iso9660 *iso9660, const unsigned char *h) /* XXX TODO: Check other values for sanity; reject more * malformed PVDs. XXX */ - /* Store the root directory in the pending list. */ - file = parse_file_info(iso9660, NULL, h + PVD_root_directory_record_offset); - add_entry(iso9660, file); + /* Read Root Directory Record in Volume Descriptor. */ + p = h + PVD_root_directory_record_offset; + if (p[DR_length_offset] != 34) + return (0); + + iso9660->logical_block_size = logical_block_size; + iso9660->volume_block = volume_block; + iso9660->volume_size = logical_block_size * (uint64_t)volume_block; + iso9660->primary.location = archive_le32dec(p + DR_extent_offset); + iso9660->primary.size = archive_le32dec(p + DR_size_offset); + return (48); } +static int +read_children(struct archive_read *a, struct file_info *parent) +{ + struct iso9660 *iso9660; + const unsigned char *b, *p; + struct file_info *multi; + size_t step; + + iso9660 = (struct iso9660 *)(a->format->data); + if (iso9660->current_position > parent->offset) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Ignoring out-of-order directory (%s) %jd > %jd", + parent->name.s, + iso9660->current_position, + parent->offset); + return (ARCHIVE_WARN); + } + if (parent->offset + parent->size > iso9660->volume_size) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Directory is beyond end-of-media: %s", + parent->name); + return (ARCHIVE_WARN); + } + if (iso9660->current_position < parent->offset) { + int64_t skipsize; + + skipsize = parent->offset - iso9660->current_position; + skipsize = __archive_read_skip(a, skipsize); + if (skipsize < 0) + return ((int)skipsize); + iso9660->current_position = parent->offset; + } + + step = ((parent->size + iso9660->logical_block_size -1) / + iso9660->logical_block_size) * iso9660->logical_block_size; + b = __archive_read_ahead(a, step, NULL); + if (b == NULL) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Failed to read full block when scanning " + "ISO9660 directory list"); + return (ARCHIVE_FATAL); + } + __archive_read_consume(a, step); + iso9660->current_position += step; + multi = NULL; + while (step) { + p = b; + b += iso9660->logical_block_size; + step -= iso9660->logical_block_size; + for (; *p != 0 && p < b && p + *p <= b; p += *p) { + struct file_info *child; + + /* N.B.: these special directory identifiers + * are 8 bit "values" even on a + * Joliet CD with UCS-2 (16bit) encoding. + */ + + /* Skip '.' entry. */ + if (*(p + DR_name_len_offset) == 1 + && *(p + DR_name_offset) == '\0') + continue; + /* Skip '..' entry. */ + if (*(p + DR_name_len_offset) == 1 + && *(p + DR_name_offset) == '\001') + continue; + child = parse_file_info(a, parent, p); + if (child == NULL) + return (ARCHIVE_FATAL); + if (child->cl_offset) + heap_add_entry(&(iso9660->cl_files), + child, child->cl_offset); + else { + if (child->multi_extent || multi != NULL) { + struct content *con; + + if (multi == NULL) { + multi = child; + multi->contents.first = NULL; + multi->contents.last = + &(multi->contents.first); + } + con = malloc(sizeof(struct content)); + if (con == NULL) { + release_file(iso9660, child); + archive_set_error( + &a->archive, ENOMEM, + "No memory for " + "multi extent"); + return (ARCHIVE_FATAL); + } + con->offset = child->offset; + con->size = child->size; + con->next = NULL; + *multi->contents.last = con; + multi->contents.last = &(con->next); + if (multi == child) + add_entry(iso9660, child); + else { + multi->size += child->size; + if (!child->multi_extent) + multi = NULL; + release_file(iso9660, child); + } + } else + add_entry(iso9660, child); + } + } + } + + /* Read data which recorded by RRIP "CE" extension. */ + if (read_CE(a, iso9660) != ARCHIVE_OK) + return (ARCHIVE_FATAL); + + return (ARCHIVE_OK); +} + +static int +relocate_dir(struct iso9660 *iso9660, struct file_info *file) +{ + struct file_info *re; + + re = heap_get_entry(&(iso9660->re_dirs)); + while (re != NULL && re->offset < file->cl_offset) { + /* This case is wrong pattern. + * But dont't reject this directory entry to be robust. */ + cache_add_entry(iso9660, re); + re = heap_get_entry(&(iso9660->re_dirs)); + } + if (re == NULL) + /* This case is wrong pattern. */ + return (0); + if (re->offset == file->cl_offset) { + re->parent->refcount--; + re->parent->subdirs--; + re->parent = file->parent; + re->parent->refcount++; + re->parent->subdirs++; + cache_add_to_next_of_parent(iso9660, re); + return (1); + } else + /* This case is wrong pattern. */ + heap_add_entry(&(iso9660->re_dirs), re, re->offset); + return (0); +} + +static int +read_entries(struct archive_read *a) +{ + struct iso9660 *iso9660; + struct file_info *file; + int r; + + iso9660 = (struct iso9660 *)(a->format->data); + + while ((file = next_entry(iso9660)) != NULL && + (file->mode & AE_IFMT) == AE_IFDIR) { + r = read_children(a, file); + if (r != ARCHIVE_OK) + return (r); + + if (iso9660->seenRockridge && + file->parent != NULL && + file->parent->parent == NULL && + iso9660->rr_moved == NULL && + (strcmp(file->name.s, "rr_moved") == 0 || + strcmp(file->name.s, ".rr_moved") == 0)) { + iso9660->rr_moved = file; + } else if (file->re) + heap_add_entry(&(iso9660->re_dirs), file, + file->offset); + else + cache_add_entry(iso9660, file); + } + if (file != NULL) + add_entry(iso9660, file); + + if (iso9660->rr_moved != NULL) { + /* + * Relocate directory which rr_moved has. + */ + while ((file = heap_get_entry(&(iso9660->cl_files))) != NULL) { + relocate_dir(iso9660, file); + release_file(iso9660, file); + } + + /* If rr_moved directory still has children, + * Add rr_moved into pending_files to show + */ + if (iso9660->rr_moved->subdirs) { + cache_add_entry(iso9660, iso9660->rr_moved); + /* If entries which have "RE" extension are still + * remaining(this case is unlikely except ISO image + * is broken), the entries won't be exposed. */ + while ((file = heap_get_entry(&(iso9660->re_dirs))) != NULL) + cache_add_entry(iso9660, file); + } else { + iso9660->rr_moved->parent->subdirs--; + release_file(iso9660, iso9660->rr_moved); + } + } else { + /* + * In case ISO image is broken. If the name of rr_moved + * directory has been changed by damage, subdirectories + * of rr_moved entry won't be exposed. + */ + while ((file = heap_get_entry(&(iso9660->re_dirs))) != NULL) + cache_add_entry(iso9660, file); + } + + return (ARCHIVE_OK); +} + static int archive_read_format_iso9660_read_header(struct archive_read *a, struct archive_entry *entry) { struct iso9660 *iso9660; struct file_info *file; - int r; + int r, rd_r; iso9660 = (struct iso9660 *)(a->format->data); @@ -533,6 +1124,94 @@ archive_read_format_iso9660_read_header(struct archive_read *a, a->archive.archive_format_name = "ISO9660"; } + if (iso9660->current_position == 0) { + int64_t skipsize; + struct vd *vd; + const void *block; + char seenJoliet; + + vd = &(iso9660->primary); + if (!iso9660->opt_support_joliet) + iso9660->seenJoliet = 0; + if (iso9660->seenJoliet && + vd->location > iso9660->joliet.location) + /* This condition is unlikely; by way of caution. */ + vd = &(iso9660->joliet); + + skipsize = LOGICAL_BLOCK_SIZE * vd->location; + skipsize = __archive_read_skip(a, skipsize); + if (skipsize < 0) + return ((int)skipsize); + iso9660->current_position = skipsize; + + block = __archive_read_ahead(a, vd->size, NULL); + if (block == NULL) { + archive_set_error(&a->archive, + ARCHIVE_ERRNO_MISC, + "Failed to read full block when scanning " + "ISO9660 directory list"); + return (ARCHIVE_FATAL); + } + + /* + * While reading Root Directory, flag seenJoliet + * must be zero to avoid converting special name + * 0x00(Current Directory) and next byte to UCS2. + */ + seenJoliet = iso9660->seenJoliet;/* Save flag. */ + iso9660->seenJoliet = 0; + file = parse_file_info(a, NULL, block); + if (file == NULL) + return (ARCHIVE_FATAL); + iso9660->seenJoliet = seenJoliet; + if (vd == &(iso9660->primary) && iso9660->seenRockridge + && iso9660->seenJoliet) + /* + * If iso image has RockRidge and Joliet, + * we use RockRidge Extensions. + */ + iso9660->seenJoliet = 0; + if (vd == &(iso9660->primary) && !iso9660->seenRockridge + && iso9660->seenJoliet) { + /* Switch reading data from primary to joliet. */ + release_file(iso9660, file); + vd = &(iso9660->joliet); + skipsize = LOGICAL_BLOCK_SIZE * vd->location; + skipsize -= iso9660->current_position; + skipsize = __archive_read_skip(a, skipsize); + if (skipsize < 0) + return ((int)skipsize); + iso9660->current_position += skipsize; + + block = __archive_read_ahead(a, vd->size, NULL); + if (block == NULL) { + archive_set_error(&a->archive, + ARCHIVE_ERRNO_MISC, + "Failed to read full block when scanning " + "ISO9660 directory list"); + return (ARCHIVE_FATAL); + } + seenJoliet = iso9660->seenJoliet;/* Save flag. */ + iso9660->seenJoliet = 0; + file = parse_file_info(a, NULL, block); + if (file == NULL) + return (ARCHIVE_FATAL); + iso9660->seenJoliet = seenJoliet; + } + /* Store the root directory in the pending list. */ + add_entry(iso9660, file); + if (iso9660->seenRockridge) { + a->archive.archive_format = + ARCHIVE_FORMAT_ISO9660_ROCKRIDGE; + a->archive.archive_format_name = + "ISO9660 with Rockridge extensions"; + } + rd_r = read_entries(a); + if (rd_r == ARCHIVE_FATAL) + return (ARCHIVE_FATAL); + } else + rd_r = ARCHIVE_OK; + /* Get the next entry that appears after the current offset. */ r = next_entry_seek(a, iso9660, &file); if (r != ARCHIVE_OK) { @@ -557,8 +1236,10 @@ archive_read_format_iso9660_read_header(struct archive_read *a, archive_entry_set_uid(entry, file->uid); archive_entry_set_gid(entry, file->gid); archive_entry_set_nlink(entry, file->nlinks); - archive_entry_set_ino(entry, file->inode); - archive_entry_set_birthtime(entry, file->birthtime, 0); + if (file->birthtime_is_set) + archive_entry_set_birthtime(entry, file->birthtime, 0); + else + archive_entry_unset_birthtime(entry); archive_entry_set_mtime(entry, file->mtime, 0); archive_entry_set_ctime(entry, file->ctime, 0); archive_entry_set_atime(entry, file->atime, 0); @@ -575,12 +1256,8 @@ archive_read_format_iso9660_read_header(struct archive_read *a, * return the same body again, so if the next entry refers to * the same data, we have to return it as a hardlink to the * original entry. */ - /* TODO: We have enough information here to compute an - * accurate value for nlinks. We should do so and ignore - * nlinks from the RR extensions. */ - if (file->offset == iso9660->previous_offset - && file->size == iso9660->previous_size - && file->size > 0) { + if (file->number != -1 && + file->number == iso9660->previous_number) { archive_entry_set_hardlink(entry, iso9660->previous_pathname.s); archive_entry_unset_size(entry); @@ -605,7 +1282,8 @@ archive_read_format_iso9660_read_header(struct archive_read *a, * will give us support for whacky ISO images that require * seeking while retaining the ability to read almost all ISO * images in a streaming fashion. */ - if (file->offset < iso9660->current_position) { + if ((file->mode & AE_IFMT) != AE_IFDIR && + file->offset < iso9660->current_position) { archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, "Ignoring out-of-order file @%x (%s) %jd < %jd", file, @@ -617,59 +1295,46 @@ archive_read_format_iso9660_read_header(struct archive_read *a, return (ARCHIVE_WARN); } - iso9660->previous_size = file->size; - iso9660->previous_offset = file->offset; + /* Initialize zisofs variables. */ + iso9660->entry_zisofs.pz = file->pz; + if (file->pz) { +#ifdef HAVE_ZLIB_H + struct zisofs *zisofs; + + zisofs = &iso9660->entry_zisofs; + zisofs->initialized = 0; + zisofs->pz_log2_bs = file->pz_log2_bs; + zisofs->pz_uncompressed_size = file->pz_uncompressed_size; + zisofs->pz_offset = 0; + zisofs->header_avail = 0; + zisofs->header_passed = 0; + zisofs->block_pointers_avail = 0; +#endif + archive_entry_set_size(entry, file->pz_uncompressed_size); + } + + iso9660->previous_number = file->number; archive_strcpy(&iso9660->previous_pathname, iso9660->pathname.s); - /* If this is a directory, read in all of the entries right now. */ + /* Reset entry_bytes_remaining if the file is multi extent. */ + iso9660->entry_content = file->contents.first; + if (iso9660->entry_content != NULL) + iso9660->entry_bytes_remaining = iso9660->entry_content->size; + if (archive_entry_filetype(entry) == AE_IFDIR) { - while (iso9660->entry_bytes_remaining > 0) { - const void *block; - const unsigned char *p; - ssize_t step = iso9660->logical_block_size; - if (step > iso9660->entry_bytes_remaining) - step = iso9660->entry_bytes_remaining; - block = __archive_read_ahead(a, step, NULL); - if (block == NULL) { - archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, - "Failed to read full block when scanning ISO9660 directory list"); - release_file(iso9660, file); - return (ARCHIVE_FATAL); - } - __archive_read_consume(a, step); - iso9660->current_position += step; - iso9660->entry_bytes_remaining -= step; - for (p = (const unsigned char *)block; - *p != 0 && p < (const unsigned char *)block + step; - p += *p) { - struct file_info *child; - - /* N.B.: these special directory identifiers - * are 8 bit "values" even on a - * Joliet CD with UCS-2 (16bit) encoding. - */ - - /* Skip '.' entry. */ - if (*(p + DR_name_len_offset) == 1 - && *(p + DR_name_offset) == '\0') - continue; - /* Skip '..' entry. */ - if (*(p + DR_name_len_offset) == 1 - && *(p + DR_name_offset) == '\001') - continue; - child = parse_file_info(iso9660, file, p); - add_entry(iso9660, child); - if (iso9660->seenRockridge) { - a->archive.archive_format = - ARCHIVE_FORMAT_ISO9660_ROCKRIDGE; - a->archive.archive_format_name = - "ISO9660 with Rockridge extensions"; - } - } - } + /* Overwrite nlinks by proper link number which is + * calculated from number of sub directories. */ + archive_entry_set_nlink(entry, 2 + file->subdirs); + /* Directory data has been read completely. */ + iso9660->entry_bytes_remaining = 0; + iso9660->entry_sparse_offset = 0; + file->exposed = 1; } release_file(iso9660, file); + + if (rd_r != ARCHIVE_OK) + return (rd_r); return (ARCHIVE_OK); } @@ -682,6 +1347,241 @@ archive_read_format_iso9660_read_data_skip(struct archive_read *a) return (ARCHIVE_OK); } +#ifdef HAVE_ZLIB_H + +static int +zisofs_read_data(struct archive_read *a, + const void **buff, size_t *size, off_t *offset) +{ + struct iso9660 *iso9660; + struct zisofs *zisofs; + const unsigned char *p; + size_t avail; + ssize_t bytes_read; + size_t uncompressed_size; + int r; + + iso9660 = (struct iso9660 *)(a->format->data); + zisofs = &iso9660->entry_zisofs; + + p = __archive_read_ahead(a, 1, &bytes_read); + if (bytes_read <= 0) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Truncated zisofs file body"); + return (ARCHIVE_FATAL); + } + if (bytes_read > iso9660->entry_bytes_remaining) + bytes_read = iso9660->entry_bytes_remaining; + avail = bytes_read; + uncompressed_size = 0; + + if (!zisofs->initialized) { + size_t ceil, xsize; + + /* Allocate block pointers buffer. */ + ceil = (zisofs->pz_uncompressed_size + + (1LL << zisofs->pz_log2_bs) - 1) + >> zisofs->pz_log2_bs; + xsize = (ceil + 1) * 4; + if (zisofs->block_pointers_alloc < xsize) { + size_t alloc; + + if (zisofs->block_pointers != NULL) + free(zisofs->block_pointers); + alloc = ((xsize >> 10) + 1) << 10; + zisofs->block_pointers = malloc(alloc); + if (zisofs->block_pointers == NULL) { + archive_set_error(&a->archive, ENOMEM, + "No memory for zisofs decompression"); + return (ARCHIVE_FATAL); + } + zisofs->block_pointers_alloc = alloc; + } + zisofs->block_pointers_size = xsize; + + /* Allocate uncompressed data buffer. */ + xsize = 1UL << zisofs->pz_log2_bs; + if (zisofs->uncompressed_buffer_size < xsize) { + if (zisofs->uncompressed_buffer != NULL) + free(zisofs->uncompressed_buffer); + zisofs->uncompressed_buffer = malloc(xsize); + if (zisofs->uncompressed_buffer == NULL) { + archive_set_error(&a->archive, ENOMEM, + "No memory for zisofs decompression"); + return (ARCHIVE_FATAL); + } + } + zisofs->uncompressed_buffer_size = xsize; + + /* + * Read the file header, and check the magic code of zisofs. + */ + if (zisofs->header_avail < sizeof(zisofs->header)) { + xsize = sizeof(zisofs->header) - zisofs->header_avail; + if (avail < xsize) + xsize = avail; + memcpy(zisofs->header + zisofs->header_avail, p, xsize); + zisofs->header_avail += xsize; + avail -= xsize; + p += xsize; + } + if (!zisofs->header_passed && + zisofs->header_avail == sizeof(zisofs->header)) { + int err = 0; + + if (memcmp(zisofs->header, zisofs_magic, + sizeof(zisofs_magic)) != 0) + err = 1; + if (archive_le32dec(zisofs->header + 8) + != zisofs->pz_uncompressed_size) + err = 1; + if (zisofs->header[12] != 4) + err = 1; + if (zisofs->header[13] != zisofs->pz_log2_bs) + err = 1; + if (err) { + archive_set_error(&a->archive, + ARCHIVE_ERRNO_FILE_FORMAT, + "Illegal zisofs file body"); + return (ARCHIVE_FATAL); + } + zisofs->header_passed = 1; + } + /* + * Read block pointers. + */ + if (zisofs->header_passed && + zisofs->block_pointers_avail < zisofs->block_pointers_size) { + xsize = zisofs->block_pointers_size + - zisofs->block_pointers_avail; + if (avail < xsize) + xsize = avail; + memcpy(zisofs->block_pointers + + zisofs->block_pointers_avail, p, xsize); + zisofs->block_pointers_avail += xsize; + avail -= xsize; + p += xsize; + if (zisofs->block_pointers_avail + == zisofs->block_pointers_size) { + /* We've got all block pointers and initialize + * related variables. */ + zisofs->block_off = 0; + zisofs->block_avail = 0; + /* Complete a initialization */ + zisofs->initialized = 1; + } + } + + if (!zisofs->initialized) + goto next_data; /* We need more datas. */ + } + + /* + * Get block offsets from block pointers. + */ + if (zisofs->block_avail == 0) { + uint32_t bst, bed; + + if (zisofs->block_off + 4 >= zisofs->block_pointers_size) { + /* There isn't a pair of offsets. */ + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Illegal zisofs block pointers"); + return (ARCHIVE_FATAL); + } + bst = archive_le32dec(zisofs->block_pointers + zisofs->block_off); + if (bst != zisofs->pz_offset + (bytes_read - avail)) { + /* TODO: Should we seek offset of current file by bst ? */ + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Illegal zisofs block pointers(cannot seek)"); + return (ARCHIVE_FATAL); + } + bed = archive_le32dec( + zisofs->block_pointers + zisofs->block_off + 4); + if (bed < bst) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "Illegal zisofs block pointers"); + return (ARCHIVE_FATAL); + } + zisofs->block_avail = bed - bst; + zisofs->block_off += 4; + + /* Initialize compression library for new block. */ + if (zisofs->stream_valid) + r = inflateReset(&zisofs->stream); + else + r = inflateInit(&zisofs->stream); + if (r != Z_OK) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Can't initialize zisofs decompression."); + return (ARCHIVE_FATAL); + } + zisofs->stream_valid = 1; + zisofs->stream.total_in = 0; + zisofs->stream.total_out = 0; + } + + /* + * Make uncompressed datas. + */ + if (zisofs->block_avail == 0) { + memset(zisofs->uncompressed_buffer, 0, + zisofs->uncompressed_buffer_size); + uncompressed_size = zisofs->uncompressed_buffer_size; + } else { + zisofs->stream.next_in = (Bytef *)(uintptr_t)(const void *)p; + if (avail > zisofs->block_avail) + zisofs->stream.avail_in = zisofs->block_avail; + else + zisofs->stream.avail_in = avail; + zisofs->stream.next_out = zisofs->uncompressed_buffer; + zisofs->stream.avail_out = zisofs->uncompressed_buffer_size; + + r = inflate(&zisofs->stream, 0); + switch (r) { + case Z_OK: /* Decompressor made some progress.*/ + case Z_STREAM_END: /* Found end of stream. */ + break; + default: + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "zisofs decompression failed (%d)", r); + return (ARCHIVE_FATAL); + } + uncompressed_size = + zisofs->uncompressed_buffer_size - zisofs->stream.avail_out; + avail -= zisofs->stream.next_in - p; + zisofs->block_avail -= zisofs->stream.next_in - p; + } +next_data: + bytes_read -= avail; + *buff = zisofs->uncompressed_buffer; + *size = uncompressed_size; + *offset = iso9660->entry_sparse_offset; + iso9660->entry_sparse_offset += uncompressed_size; + iso9660->entry_bytes_remaining -= bytes_read; + iso9660->current_position += bytes_read; + zisofs->pz_offset += bytes_read; + __archive_read_consume(a, bytes_read); + + return (ARCHIVE_OK); +} + +#else /* HAVE_ZLIB_H */ + +static int +zisofs_read_data(struct archive_read *a, + const void **buff, size_t *size, off_t *offset) +{ + + (void)buff;/* UNUSED */ + (void)size;/* UNUSED */ + (void)offset;/* UNUSED */ + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, + "zisofs is not supported on this platform."); + return (ARCHIVE_FAILED); +} + +#endif /* HAVE_ZLIB_H */ + static int archive_read_format_iso9660_read_data(struct archive_read *a, const void **buff, size_t *size, off_t *offset) @@ -691,11 +1591,41 @@ archive_read_format_iso9660_read_data(struct archive_read *a, iso9660 = (struct iso9660 *)(a->format->data); if (iso9660->entry_bytes_remaining <= 0) { - *buff = NULL; - *size = 0; - *offset = iso9660->entry_sparse_offset; - return (ARCHIVE_EOF); + if (iso9660->entry_content != NULL) + iso9660->entry_content = iso9660->entry_content->next; + if (iso9660->entry_content == NULL) { + *buff = NULL; + *size = 0; + *offset = iso9660->entry_sparse_offset; + return (ARCHIVE_EOF); + } + /* Seek forward to the start of the entry. */ + if (iso9660->current_position < iso9660->entry_content->offset) { + int64_t step; + + step = iso9660->entry_content->offset - + iso9660->current_position; + step = __archive_read_skip(a, step); + if (step < 0) + return ((int)step); + iso9660->current_position = + iso9660->entry_content->offset; + } + if (iso9660->entry_content->offset < iso9660->current_position) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Ignoring out-of-order file (%s) %jd < %jd", + iso9660->pathname.s, + iso9660->entry_content->offset, + iso9660->current_position); + *buff = NULL; + *size = 0; + *offset = iso9660->entry_sparse_offset; + return (ARCHIVE_WARN); + } + iso9660->entry_bytes_remaining = iso9660->entry_content->size; } + if (iso9660->entry_zisofs.pz) + return (zisofs_read_data(a, buff, size, offset)); *buff = __archive_read_ahead(a, 1, &bytes_read); if (bytes_read == 0) @@ -719,17 +1649,36 @@ archive_read_format_iso9660_cleanup(struct archive_read *a) { struct iso9660 *iso9660; struct file_info *file; + int r = ARCHIVE_OK; iso9660 = (struct iso9660 *)(a->format->data); + while ((file = cache_get_entry(iso9660)) != NULL) + release_file(iso9660, file); while ((file = next_entry(iso9660)) != NULL) release_file(iso9660, file); + free(iso9660->read_ce_req.reqs); archive_string_free(&iso9660->pathname); archive_string_free(&iso9660->previous_pathname); - if (iso9660->pending_files) - free(iso9660->pending_files); + if (iso9660->pending_files.files) + free(iso9660->pending_files.files); + if (iso9660->re_dirs.files) + free(iso9660->re_dirs.files); + if (iso9660->cl_files.files) + free(iso9660->cl_files.files); +#ifdef HAVE_ZLIB_H + free(iso9660->entry_zisofs.uncompressed_buffer); + free(iso9660->entry_zisofs.block_pointers); + if (iso9660->entry_zisofs.stream_valid) { + if (inflateEnd(&iso9660->entry_zisofs.stream) != Z_OK) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Failed to clean up zlib decompressor"); + r = ARCHIVE_FATAL; + } + } +#endif free(iso9660); (a->format->data) = NULL; - return (ARCHIVE_OK); + return (r); } /* @@ -737,47 +1686,80 @@ archive_read_format_iso9660_cleanup(struct archive_read *a) * of any extensions, and stores the result in memory. */ static struct file_info * -parse_file_info(struct iso9660 *iso9660, struct file_info *parent, +parse_file_info(struct archive_read *a, struct file_info *parent, const unsigned char *isodirrec) { + struct iso9660 *iso9660; struct file_info *file; size_t name_len; const unsigned char *rr_start, *rr_end; const unsigned char *p; + size_t dr_len; + int32_t location; int flags; - /* TODO: Sanity check that name_len doesn't exceed length, etc. */ + iso9660 = (struct iso9660 *)(a->format->data); + + dr_len = (size_t)isodirrec[DR_length_offset]; + name_len = (size_t)isodirrec[DR_name_len_offset]; + location = archive_le32dec(isodirrec + DR_extent_offset); + /* Sanity check that dr_len needs at least 34. */ + if (dr_len < 34) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Invalid length of directory record"); + return (NULL); + } + /* Sanity check that name_len doesn't exceed dr_len. */ + if (dr_len - 33 < name_len || name_len == 0) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Invalid length of file identifier"); + return (NULL); + } + /* Sanity check that location doesn't exceed volume block. + * Don't check lower limit of location; it's possibility + * the location has negative value when file type is symbolic + * link or file size is zero. As far as I know latest mkisofs + * do that. + */ + if (location >= iso9660->volume_block) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Invalid location of extent of file"); + return (NULL); + } /* Create a new file entry and copy data from the ISO dir record. */ file = (struct file_info *)malloc(sizeof(*file)); - if (file == NULL) + if (file == NULL) { + archive_set_error(&a->archive, ENOMEM, + "No memory for file entry"); return (NULL); + } memset(file, 0, sizeof(*file)); file->parent = parent; if (parent != NULL) parent->refcount++; - file->offset = (uint64_t)toi(isodirrec + DR_extent_offset, DR_extent_size) - * iso9660->logical_block_size; + file->offset = iso9660->logical_block_size * (uint64_t)location; file->size = toi(isodirrec + DR_size_offset, DR_size_size); file->mtime = isodate7(isodirrec + DR_date_offset); file->ctime = file->atime = file->mtime; - name_len = (size_t)isodirrec[DR_name_len_offset]; p = isodirrec + DR_name_offset; /* Rockridge extensions (if any) follow name. Compute this * before fidgeting the name_len below. */ - rr_start = p + name_len + (name_len & 1 ? 0 : 1) + iso9660->suspOffset; - rr_end = isodirrec + isodirrec[DR_length_offset]; + rr_start = p + name_len + (name_len & 1 ? 0 : 1); + rr_end = isodirrec + dr_len; if (iso9660->seenJoliet) { /* Joliet names are max 64 chars (128 bytes) according to spec, - * but genisoimage (and others?) will allow you to have more. + * but genisoimage/mkisofs allows recording longer Joliet + * names which are 103 UCS2 characters(206 bytes) by their + * option '-joliet-long'. */ - wchar_t wbuff[64+1], *wp; + wchar_t wbuff[103+1], *wp; const unsigned char *c; - /* TODO: warn when name_len > 128 ? */ - + if (name_len > 206) + name_len = 206; /* convert BE UTF-16 to wchar_t */ for (c = p, wp = wbuff; c < (p + name_len) && @@ -828,9 +1810,79 @@ parse_file_info(struct iso9660 *iso9660, struct file_info *parent, file->mode = AE_IFDIR | 0700; else file->mode = AE_IFREG | 0400; + if (flags & 0x80) + file->multi_extent = 1; + else + file->multi_extent = 0; + /* + * Use location for file number. + * File number is treated as inode number to find out harlink + * target. If Rockridge extensions is being used, file number + * will be overwritten by FILE SERIAL NUMBER of RRIP "PX" + * extension. + * NOTE: Old mkisofs did not record that FILE SERIAL NUMBER + * in ISO images. + */ + if (file->size == 0 && location >= 0) + /* If file->size is zero, its location points wrong place. + * Dot not use it for file number. + * When location has negative value, it can be used + * for file number. + */ + file->number = -1; + else + file->number = (int64_t)(uint32_t)location; /* Rockridge extensions overwrite information from above. */ - parse_rockridge(iso9660, file, rr_start, rr_end); + if (iso9660->opt_support_rockridge) { + if (parent == NULL && rr_end - rr_start >= 7) { + p = rr_start; + if (p[0] == 'S' && p[1] == 'P' + && p[2] == 7 && p[3] == 1 + && p[4] == 0xBE && p[5] == 0xEF) { + /* + * SP extension stores the suspOffset + * (Number of bytes to skip between + * filename and SUSP records.) + * It is mandatory by the SUSP standard + * (IEEE 1281). + * + * It allows SUSP to coexist with + * non-SUSP uses of the System + * Use Area by placing non-SUSP data + * before SUSP data. + * + * SP extension must be in the root + * directory entry, disable all SUSP + * processing if not found. + */ + iso9660->suspOffset = p[6]; + iso9660->seenSUSP = 1; + rr_start += 7; + } + } + if (iso9660->seenSUSP) { + int r; + + file->name_continues = 0; + file->symlink_continues = 0; + rr_start += iso9660->suspOffset; + r = parse_rockridge(a, file, rr_start, rr_end); + if (r != ARCHIVE_OK) { + if (parent != NULL) + parent->refcount--; + free(file); + return (NULL); + } + } else + /* If there isn't SUSP, disable parsing + * rock ridge extensions. */ + iso9660->opt_support_rockridge = 0; + } + + /* Tell file's parent how many children that parent has. */ + if (parent != NULL && (flags & 0x02) && file->cl_offset == 0) + parent->subdirs++; #if DEBUG /* DEBUGGING: Warn about attributes I don't yet fully support. */ @@ -859,42 +1911,15 @@ parse_file_info(struct iso9660 *iso9660, struct file_info *parent, return (file); } -static void -add_entry(struct iso9660 *iso9660, struct file_info *file) -{ - /* Expand our pending files list as necessary. */ - if (iso9660->pending_files_used >= iso9660->pending_files_allocated) { - struct file_info **new_pending_files; - int new_size = iso9660->pending_files_allocated * 2; - - if (iso9660->pending_files_allocated < 1024) - new_size = 1024; - /* Overflow might keep us from growing the list. */ - if (new_size <= iso9660->pending_files_allocated) - __archive_errx(1, "Out of memory"); - new_pending_files = (struct file_info **)malloc(new_size * sizeof(new_pending_files[0])); - if (new_pending_files == NULL) - __archive_errx(1, "Out of memory"); - memcpy(new_pending_files, iso9660->pending_files, - iso9660->pending_files_allocated * sizeof(new_pending_files[0])); - if (iso9660->pending_files != NULL) - free(iso9660->pending_files); - iso9660->pending_files = new_pending_files; - iso9660->pending_files_allocated = new_size; - } - - iso9660->pending_files[iso9660->pending_files_used++] = file; -} - -static void -parse_rockridge(struct iso9660 *iso9660, struct file_info *file, +static int +parse_rockridge(struct archive_read *a, struct file_info *file, const unsigned char *p, const unsigned char *end) { - (void)iso9660; /* UNUSED */ - file->name_continues = 0; - file->symlink_continues = 0; + struct iso9660 *iso9660; - while (p + 4 < end /* Enough space for another entry. */ + iso9660 = (struct iso9660 *)(a->format->data); + + while (p + 4 <= end /* Enough space for another entry. */ && p[0] >= 'A' && p[0] <= 'Z' /* Sanity-check 1st char of name. */ && p[1] >= 'A' && p[1] <= 'Z' /* Sanity-check 2nd char of name. */ && p[2] >= 4 /* Sanity-check length. */ @@ -918,26 +1943,35 @@ parse_rockridge(struct iso9660 *iso9660, struct file_info *file, * 8 byte offset w/in above sector * 8 byte length of continuation */ - file->ce_offset = (uint64_t)toi(data, 4) - * iso9660->logical_block_size - + toi(data + 8, 4); - file->ce_size = toi(data + 16, 4); - /* If the result is rediculous, - * ignore it. */ - if (file->ce_offset + file->ce_size - > iso9660->volume_size) { - file->ce_offset = 0; - file->ce_size = 0; - } + int32_t location = + archive_le32dec(data); + file->ce_offset = + archive_le32dec(data+8); + file->ce_size = + archive_le32dec(data+16); + if (register_CE(a, location, file) + != ARCHIVE_OK) + return (ARCHIVE_FATAL); + } + break; + } + if (p[0] == 'C' && p[1] == 'L') { + if (version == 1 && data_length == 8) { + file->cl_offset = (uint64_t) + iso9660->logical_block_size * + (uint64_t)archive_le32dec(data); + iso9660->seenRockridge = 1; } break; } /* FALLTHROUGH */ case 'N': if (p[0] == 'N' && p[1] == 'M') { - if (version == 1) + if (version == 1) { parse_rockridge_NM1(file, data, data_length); + iso9660->seenRockridge = 1; + } break; } /* FALLTHROUGH */ @@ -954,6 +1988,7 @@ parse_rockridge(struct iso9660 *iso9660, struct file_info *file, file->rdev = toi(data,4); file->rdev <<= 32; file->rdev |= toi(data + 8, 4); + iso9660->seenRockridge = 1; } break; } @@ -980,51 +2015,36 @@ parse_rockridge(struct iso9660 *iso9660, struct file_info *file, file->gid = toi(data + 24, 4); if (data_length >= 40) - file->inode + file->number = toi(data + 32, 4); + iso9660->seenRockridge = 1; } break; } /* FALLTHROUGH */ case 'R': - if (p[0] == 'R' && p[1] == 'R' && version == 1) { + if (p[0] == 'R' && p[1] == 'E' && version == 1) { + file->re = 1; iso9660->seenRockridge = 1; + break; + } + if (p[0] == 'R' && p[1] == 'R' && version == 1) { /* * RR extension comprises: * one byte flag value + * This extension is obsolete, + * so contents are always ignored. */ - /* TODO: Handle RR extension. */ break; } /* FALLTHROUGH */ case 'S': if (p[0] == 'S' && p[1] == 'L') { - if (version == 1) + if (version == 1) { parse_rockridge_SL1(file, data, data_length); - break; - } - if (p[0] == 'S' && p[1] == 'P' - && version == 1 && data_length == 3 - && data[0] == (unsigned char)'\xbe' - && data[1] == (unsigned char)'\xef') { - /* - * SP extension stores the suspOffset - * (Number of bytes to skip between - * filename and SUSP records.) - * It is mandatory by the SUSP standard - * (IEEE 1281). - * - * It allows SUSP to coexist with - * non-SUSP uses of the System - * Use Area by placing non-SUSP data - * before SUSP data. - * - * TODO: Add a check for 'SP' in - * first directory entry, disable all SUSP - * processing if not found. - */ - iso9660->suspOffset = data[2]; + iso9660->seenRockridge = 1; + } break; } if (p[0] == 'S' && p[1] == 'T' @@ -1038,29 +2058,31 @@ parse_rockridge(struct iso9660 *iso9660, struct file_info *file, * Use Area by placing non-SUSP data * after SUSP data. */ - return; + iso9660->seenSUSP = 0; + iso9660->seenRockridge = 0; + return (ARCHIVE_OK); } case 'T': if (p[0] == 'T' && p[1] == 'F') { - if (version == 1) + if (version == 1) { parse_rockridge_TF1(file, data, data_length); + iso9660->seenRockridge = 1; + } + break; + } + /* FALLTHROUGH */ + case 'Z': + if (p[0] == 'Z' && p[1] == 'F') { + if (version == 1) + parse_rockridge_ZF1(file, + data, data_length); break; } /* FALLTHROUGH */ default: /* The FALLTHROUGHs above leave us here for * any unsupported extension. */ -#if DEBUG - { - const unsigned char *t; - fprintf(stderr, "\nUnsupported RRIP extension for %s\n", file->name.s); - fprintf(stderr, " %c%c(%d):", p[0], p[1], data_length); - for (t = data; t < data + data_length && t < data + 16; t++) - fprintf(stderr, " %02x", *t); - fprintf(stderr, "\n"); - } -#endif break; } @@ -1068,6 +2090,155 @@ parse_rockridge(struct iso9660 *iso9660, struct file_info *file, p += p[2]; } + return (ARCHIVE_OK); +} + +static int +register_CE(struct archive_read *a, int32_t location, + struct file_info *file) +{ + struct iso9660 *iso9660; + struct read_ce_queue *heap; + struct read_ce_req *p; + uint64_t offset, parent_offset; + int hole, parent; + + iso9660 = (struct iso9660 *)(a->format->data); + offset = ((uint64_t)location) * (uint64_t)iso9660->logical_block_size; + if (((file->mode & AE_IFMT) == AE_IFREG && + offset >= file->offset) || + offset < iso9660->current_position) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Invalid location in SUSP \"CE\" extension"); + return (ARCHIVE_FATAL); + } + + /* Expand our CE list as necessary. */ + heap = &(iso9660->read_ce_req); + if (heap->cnt >= heap->allocated) { + int new_size; + + if (heap->allocated < 16) + new_size = 16; + else + new_size = heap->allocated * 2; + /* Overflow might keep us from growing the list. */ + if (new_size <= heap->allocated) + __archive_errx(1, "Out of memory"); + p = malloc(new_size * sizeof(p[0])); + if (p == NULL) + __archive_errx(1, "Out of memory"); + if (heap->reqs != NULL) { + memcpy(p, heap->reqs, heap->cnt * sizeof(*p)); + free(heap->reqs); + } + heap->reqs = p; + heap->allocated = new_size; + } + + /* + * Start with hole at end, walk it up tree to find insertion point. + */ + hole = heap->cnt++; + while (hole > 0) { + parent = (hole - 1)/2; + parent_offset = heap->reqs[parent].offset; + if (offset >= parent_offset) { + heap->reqs[hole].offset = offset; + heap->reqs[hole].file = file; + return (ARCHIVE_OK); + } + // Move parent into hole <==> move hole up tree. + heap->reqs[hole] = heap->reqs[parent]; + hole = parent; + } + heap->reqs[0].offset = offset; + heap->reqs[0].file = file; + return (ARCHIVE_OK); +} + +static void +next_CE(struct read_ce_queue *heap) +{ + uint64_t a_offset, b_offset, c_offset; + int a, b, c; + struct read_ce_req tmp; + + if (heap->cnt < 1) + return; + + /* + * Move the last item in the heap to the root of the tree + */ + heap->reqs[0] = heap->reqs[--(heap->cnt)]; + + /* + * Rebalance the heap. + */ + a = 0; // Starting element and its offset + a_offset = heap->reqs[a].offset; + for (;;) { + b = a + a + 1; // First child + if (b >= heap->cnt) + return; + b_offset = heap->reqs[b].offset; + c = b + 1; // Use second child if it is smaller. + if (c < heap->cnt) { + c_offset = heap->reqs[c].offset; + if (c_offset < b_offset) { + b = c; + b_offset = c_offset; + } + } + if (a_offset <= b_offset) + return; + tmp = heap->reqs[a]; + heap->reqs[a] = heap->reqs[b]; + heap->reqs[b] = tmp; + a = b; + } +} + + +static int +read_CE(struct archive_read *a, struct iso9660 *iso9660) +{ + struct read_ce_queue *heap; + const unsigned char *b, *p, *end; + struct file_info *file; + size_t step; + int r; + + /* Read data which RRIP "CE" extension points. */ + heap = &(iso9660->read_ce_req); + step = iso9660->logical_block_size; + while (heap->cnt && + heap->reqs[0].offset == iso9660->current_position) { + b = __archive_read_ahead(a, step, NULL); + if (b == NULL) { + archive_set_error(&a->archive, + ARCHIVE_ERRNO_MISC, + "Failed to read full block when scanning " + "ISO9660 directory list"); + return (ARCHIVE_FATAL); + } + do { + file = heap->reqs[0].file; + p = b + file->ce_offset; + end = p + file->ce_size; + next_CE(heap); + r = parse_rockridge(a, file, p, end); + if (r != ARCHIVE_OK) + return (ARCHIVE_FATAL); + } while (heap->cnt && + heap->reqs[0].offset == iso9660->current_position); + /* NOTE: Do not move this consume's code to fron of + * do-while loop. Registration of nested CE extension + * might cause error because of current position. */ + __archive_read_consume(a, step); + iso9660->current_position += step; + } + return (ARCHIVE_OK); } static void @@ -1137,6 +2308,7 @@ parse_rockridge_TF1(struct file_info *file, const unsigned char *data, /* Use 17-byte time format. */ if ((flag & 1) && data_length >= 17) { /* Create time. */ + file->birthtime_is_set = 1; file->birthtime = isodate17(data); data += 17; data_length -= 17; @@ -1156,14 +2328,13 @@ parse_rockridge_TF1(struct file_info *file, const unsigned char *data, if ((flag & 8) && data_length >= 17) { /* Attribute change time. */ file->ctime = isodate17(data); - data += 17; - data_length -= 17; } } else { /* Use 7-byte time format. */ if ((flag & 1) && data_length >= 7) { /* Create time. */ - file->birthtime = isodate17(data); + file->birthtime_is_set = 1; + file->birthtime = isodate7(data); data += 7; data_length -= 7; } @@ -1182,8 +2353,6 @@ parse_rockridge_TF1(struct file_info *file, const unsigned char *data, if ((flag & 8) && data_length >= 7) { /* Attribute change time. */ file->ctime = isodate7(data); - data += 7; - data_length -= 7; } } } @@ -1196,7 +2365,8 @@ parse_rockridge_SL1(struct file_info *file, const unsigned char *data, if (!file->symlink_continues || file->symlink.length < 1) archive_string_empty(&file->symlink); - else if (file->symlink.s[file->symlink.length - 1] != '/') + else if (!file->symlink_continues && + file->symlink.s[file->symlink.length - 1] != '/') separator = "/"; file->symlink_continues = 0; @@ -1258,7 +2428,6 @@ parse_rockridge_SL1(struct file_info *file, const unsigned char *data, archive_strcat(&file->symlink, ".."); break; case 0x08: /* Root of filesystem. */ - archive_string_empty(&file->symlink); archive_strcat(&file->symlink, "/"); separator = ""; break; @@ -1278,11 +2447,25 @@ parse_rockridge_SL1(struct file_info *file, const unsigned char *data, } } +static void +parse_rockridge_ZF1(struct file_info *file, const unsigned char *data, + int data_length) +{ + + if (data[0] == 0x70 && data[1] == 0x7a && data_length == 12) { + /* paged zlib */ + file->pz = 1; + file->pz_log2_bs = data[3]; + file->pz_uncompressed_size = archive_le32dec(&data[4]); + } +} + static void release_file(struct iso9660 *iso9660, struct file_info *file) { struct file_info *parent; + struct content *con, *connext; if (file == NULL) return; @@ -1291,6 +2474,12 @@ release_file(struct iso9660 *iso9660, struct file_info *file) parent = file->parent; archive_string_free(&file->name); archive_string_free(&file->symlink); + con = file->contents.first; + while (con != NULL) { + connext = con->next; + free(con); + con = connext; + } free(file); if (parent != NULL) { parent->refcount--; @@ -1304,101 +2493,248 @@ next_entry_seek(struct archive_read *a, struct iso9660 *iso9660, struct file_info **pfile) { struct file_info *file; - uint64_t offset; - *pfile = NULL; - for (;;) { - *pfile = file = next_entry(iso9660); - if (file == NULL) - return (ARCHIVE_EOF); + *pfile = file = next_cache_entry(iso9660); + if (file == NULL) + return (ARCHIVE_EOF); - /* CE area precedes actual file data? Ignore it. */ - if (file->ce_offset > file->offset) { - /* fprintf(stderr, " *** Discarding CE data.\n"); */ - file->ce_offset = 0; - file->ce_size = 0; - } + /* Don't waste time seeking for zero-length bodies. */ + if (file->size == 0) + file->offset = iso9660->current_position; - /* Don't waste time seeking for zero-length bodies. */ - if (file->size == 0) { - file->offset = iso9660->current_position; - } + /* Seek forward to the start of the entry. */ + if (iso9660->current_position < file->offset) { + int64_t step; - /* If CE exists, find and read it now. */ - if (file->ce_offset > 0) - offset = file->ce_offset; - else - offset = file->offset; - - /* Seek forward to the start of the entry. */ - if (iso9660->current_position < offset) { - off_t step = offset - iso9660->current_position; - off_t bytes_read; - bytes_read = __archive_read_skip(a, step); - if (bytes_read < 0) - return (bytes_read); - iso9660->current_position = offset; - } - - /* We found body of file; handle it now. */ - if (offset == file->offset) - return (ARCHIVE_OK); - - /* Found CE? Process it and push the file back onto list. */ - if (offset == file->ce_offset) { - const void *p; - ssize_t size = file->ce_size; - const unsigned char *rr_start; - - file->ce_offset = 0; - file->ce_size = 0; - p = __archive_read_ahead(a, size, NULL); - if (p == NULL) - return (ARCHIVE_FATAL); - rr_start = (const unsigned char *)p; - parse_rockridge(iso9660, file, rr_start, - rr_start + size); - __archive_read_consume(a, size); - iso9660->current_position += size; - add_entry(iso9660, file); - } + step = file->offset - iso9660->current_position; + step = __archive_read_skip(a, step); + if (step < 0) + return ((int)step); + iso9660->current_position = file->offset; } + + /* We found body of file; handle it now. */ + return (ARCHIVE_OK); } static struct file_info * -next_entry(struct iso9660 *iso9660) +next_cache_entry(struct iso9660 *iso9660) { - int least_index; - uint64_t least_end_offset; - int i; - struct file_info *r; + struct file_info *file; + struct { + struct file_info *first; + struct file_info **last; + } empty_files; + int64_t number; + int count; - if (iso9660->pending_files_used < 1) + file = cache_get_entry(iso9660); + if (file != NULL) { + while (file->parent != NULL && !file->parent->exposed) { + /* If file's parent is not exposed, it's moved + * to next entry of its parent. */ + cache_add_to_next_of_parent(iso9660, file); + file = cache_get_entry(iso9660); + } + return (file); + } + + file = next_entry(iso9660); + if (file == NULL) return (NULL); - /* Assume the first file in the list is the earliest on disk. */ - least_index = 0; - least_end_offset = iso9660->pending_files[0]->offset - + iso9660->pending_files[0]->size; + if ((file->mode & AE_IFMT) != AE_IFREG || file->number == -1) + return (file); - /* Now, try to find an earlier one. */ - for (i = 0; i < iso9660->pending_files_used; i++) { - /* Use the position of the file *end* as our comparison. */ - uint64_t end_offset = iso9660->pending_files[i]->offset - + iso9660->pending_files[i]->size; - if (iso9660->pending_files[i]->ce_offset > 0 - && iso9660->pending_files[i]->ce_offset < iso9660->pending_files[i]->offset) - end_offset = iso9660->pending_files[i]->ce_offset - + iso9660->pending_files[i]->ce_size; - if (least_end_offset > end_offset) { - least_index = i; - least_end_offset = end_offset; + count = 0; + number = file->number; + iso9660->cache_files.first = NULL; + iso9660->cache_files.last = &(iso9660->cache_files.first); + empty_files.first = NULL; + empty_files.last = &empty_files.first; + /* Collect files which has the same file serial number. + * Peek pending_files so that file which number is different + * is not put bak. */ + while (iso9660->pending_files.used > 0 && + (iso9660->pending_files.files[0]->number == -1 || + iso9660->pending_files.files[0]->number == number)) { + if (file->number == -1) { + /* This file has the same offset + * but it's wrong offset which empty files + * and symlink files have. + * NOTE: This wrong offse was recorded by + * old mkisofs utility. If ISO images is + * created by latest mkisofs, this does not + * happen. + */ + file->next = NULL; + file->refcount++; + *empty_files.last = file; + empty_files.last = &(file->next); + } else { + count++; + cache_add_entry(iso9660, file); } + file = next_entry(iso9660); + } + + if (count == 0) + return (file); + if (file->number == -1) { + file->next = NULL; + *empty_files.last = file; + empty_files.last = &(file->next); + } else { + count++; + cache_add_entry(iso9660, file); + } + + if (count > 1) { + /* The count is the same as number of hardlink, + * so much so that each nlinks of files in cache_file + * is overwritten by value of the count. + */ + for (file = iso9660->cache_files.first; + file != NULL; file = file->next) + file->nlinks = count; + } + /* If there are empty files, that files are added + * to the tail of the cache_files. */ + if (empty_files.first != NULL) { + *iso9660->cache_files.last = empty_files.first; + iso9660->cache_files.last = empty_files.last; + } + return (cache_get_entry(iso9660)); +} + +static inline void +cache_add_entry(struct iso9660 *iso9660, struct file_info *file) +{ + file->next = NULL; + file->refcount++; + *iso9660->cache_files.last = file; + iso9660->cache_files.last = &(file->next); +} + +static inline void +cache_add_to_next_of_parent(struct iso9660 *iso9660, struct file_info *file) +{ + file->next = file->parent->next; + file->parent->next = file; + file->refcount++; + if (iso9660->cache_files.last == &(file->parent->next)) + iso9660->cache_files.last = &(file->next); +} + +static inline struct file_info * +cache_get_entry(struct iso9660 *iso9660) +{ + struct file_info *file; + + if ((file = iso9660->cache_files.first) != NULL) { + iso9660->cache_files.first = file->next; + file->refcount--; + if (iso9660->cache_files.first == NULL) + iso9660->cache_files.last = &(iso9660->cache_files.first); + } + return (file); +} + +static void +heap_add_entry(struct heap_queue *heap, struct file_info *file, uint64_t key) +{ + uint64_t file_key, parent_key; + int hole, parent; + + /* Expand our pending files list as necessary. */ + if (heap->used >= heap->allocated) { + struct file_info **new_pending_files; + int new_size = heap->allocated * 2; + + if (heap->allocated < 1024) + new_size = 1024; + /* Overflow might keep us from growing the list. */ + if (new_size <= heap->allocated) + __archive_errx(1, "Out of memory"); + new_pending_files = (struct file_info **) + malloc(new_size * sizeof(new_pending_files[0])); + if (new_pending_files == NULL) + __archive_errx(1, "Out of memory"); + memcpy(new_pending_files, heap->files, + heap->allocated * sizeof(new_pending_files[0])); + if (heap->files != NULL) + free(heap->files); + heap->files = new_pending_files; + heap->allocated = new_size; + } + + file_key = file->key = key; + file->refcount++; + + /* + * Start with hole at end, walk it up tree to find insertion point. + */ + hole = heap->used++; + while (hole > 0) { + parent = (hole - 1)/2; + parent_key = heap->files[parent]->key; + if (file_key >= parent_key) { + heap->files[hole] = file; + return; + } + // Move parent into hole <==> move hole up tree. + heap->files[hole] = heap->files[parent]; + hole = parent; + } + heap->files[0] = file; +} + +static struct file_info * +heap_get_entry(struct heap_queue *heap) +{ + uint64_t a_key, b_key, c_key; + int a, b, c; + struct file_info *r, *tmp; + + if (heap->used < 1) + return (NULL); + + /* + * The first file in the list is the earliest; we'll return this. + */ + r = heap->files[0]; + r->refcount--; + + /* + * Move the last item in the heap to the root of the tree + */ + heap->files[0] = heap->files[--(heap->used)]; + + /* + * Rebalance the heap. + */ + a = 0; // Starting element and its heap key + a_key = heap->files[a]->key; + for (;;) { + b = a + a + 1; // First child + if (b >= heap->used) + return (r); + b_key = heap->files[b]->key; + c = b + 1; // Use second child if it is smaller. + if (c < heap->used) { + c_key = heap->files[c]->key; + if (c_key < b_key) { + b = c; + b_key = c_key; + } + } + if (a_key <= b_key) + return (r); + tmp = heap->files[a]; + heap->files[a] = heap->files[b]; + heap->files[b] = tmp; + a = b; } - r = iso9660->pending_files[least_index]; - iso9660->pending_files[least_index] - = iso9660->pending_files[--iso9660->pending_files_used]; - return (r); } static unsigned int diff --git a/lib/libarchive/archive_read_support_format_mtree.c b/lib/libarchive/archive_read_support_format_mtree.c index 95094aea875..5efe4a8a8a7 100644 --- a/lib/libarchive/archive_read_support_format_mtree.c +++ b/lib/libarchive/archive_read_support_format_mtree.c @@ -196,7 +196,7 @@ mtree_bid(struct archive_read *a) return (-1); if (strncmp(p, signature, strlen(signature)) == 0) - return (8 * strlen(signature)); + return (8 * (int)strlen(signature)); return (0); } @@ -398,7 +398,6 @@ read_mtree(struct archive_read *a, struct mtree *mtree) global = NULL; last_entry = NULL; - r = ARCHIVE_OK; for (counter = 1; ; ++counter) { len = readline(a, mtree, &p, 256); @@ -588,8 +587,7 @@ parse_file(struct archive_read *a, struct archive_entry *entry, if (archive_entry_filetype(entry) == AE_IFREG || archive_entry_filetype(entry) == AE_IFDIR) { - mtree->fd = open(path, - O_RDONLY | O_BINARY); + mtree->fd = open(path, O_RDONLY | O_BINARY); if (mtree->fd == -1 && (errno != ENOENT || archive_strlen(&mtree->contents_name) > 0)) { @@ -1038,11 +1036,7 @@ parse_escapes(char *src, struct mtree_entry *mentry) char *dest = src; char c; - /* - * The current directory is somewhat special, it should be archived - * only once as it will confuse extraction otherwise. - */ - if (strcmp(src, ".") == 0) + if (mentry != NULL && strcmp(src, ".") == 0) mentry->full = 1; while (*src != '\0') { @@ -1161,7 +1155,7 @@ mtree_atol10(char **p) digit = **p - '0'; while (digit >= 0 && digit < base) { if (l > limit || (l == limit && digit > last_digit_limit)) { - l = UINT64_MAX; /* Truncate on overflow. */ + l = INT64_MAX; /* Truncate on overflow. */ break; } l = (l * base) + digit; @@ -1202,7 +1196,7 @@ mtree_atol16(char **p) digit = -1; while (digit >= 0 && digit < base) { if (l > limit || (l == limit && digit > last_digit_limit)) { - l = UINT64_MAX; /* Truncate on overflow. */ + l = INT64_MAX; /* Truncate on overflow. */ break; } l = (l * base) + digit; diff --git a/lib/libarchive/archive_read_support_format_raw.c b/lib/libarchive/archive_read_support_format_raw.c index 7fcfcc1984b..c994a5deb95 100644 --- a/lib/libarchive/archive_read_support_format_raw.c +++ b/lib/libarchive/archive_read_support_format_raw.c @@ -1,187 +1,185 @@ -/*- - * Copyright (c) 2003-2009 Tim Kientzle - * 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. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR(S) 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 "archive_platform.h" -__FBSDID("$FreeBSD$"); - -#ifdef HAVE_ERRNO_H -#include -#endif -#include -#ifdef HAVE_STDLIB_H -#include -#endif - -#include "archive.h" -#include "archive_entry.h" -#include "archive_private.h" -#include "archive_read_private.h" - -struct raw_info { - int64_t offset; /* Current position in the file. */ - int end_of_file; -}; - -static int archive_read_format_raw_bid(struct archive_read *); -static int archive_read_format_raw_cleanup(struct archive_read *); -static int archive_read_format_raw_read_data(struct archive_read *, - const void **, size_t *, off_t *); -static int archive_read_format_raw_read_data_skip(struct archive_read *); -static int archive_read_format_raw_read_header(struct archive_read *, - struct archive_entry *); - -int -archive_read_support_format_raw(struct archive *_a) -{ - struct raw_info *info; - struct archive_read *a = (struct archive_read *)_a; - int r; - - info = (struct raw_info *)calloc(1, sizeof(*info)); - if (info == NULL) { - archive_set_error(&a->archive, ENOMEM, - "Can't allocate raw_info data"); - return (ARCHIVE_FATAL); - } - - r = __archive_read_register_format(a, - info, - "raw", - archive_read_format_raw_bid, - NULL, - archive_read_format_raw_read_header, - archive_read_format_raw_read_data, - archive_read_format_raw_read_data_skip, - archive_read_format_raw_cleanup); - if (r != ARCHIVE_OK) - free(info); - return (r); -} - -/* - * Bid 1 if this is a non-empty file. Anyone who can really support - * this should outbid us, so it should generally be safe to use "raw" - * in conjunction with other formats. But, this could really confuse - * folks if there are bid errors or minor file damage, so we don't - * include "raw" as part of support_format_all(). - */ -static int -archive_read_format_raw_bid(struct archive_read *a) -{ - const char *p; - - if ((p = __archive_read_ahead(a, 1, NULL)) == NULL) - return (-1); - return (1); -} - -/* - * Mock up a fake header. - */ -static int -archive_read_format_raw_read_header(struct archive_read *a, - struct archive_entry *entry) -{ - struct raw_info *info; - - info = (struct raw_info *)(a->format->data); - if (info->end_of_file) - return (ARCHIVE_EOF); - - a->archive.archive_format = ARCHIVE_FORMAT_RAW; - a->archive.archive_format_name = "Raw data"; - archive_entry_set_pathname(entry, "data"); - /* XXX should we set mode to mimic a regular file? XXX */ - /* I'm deliberately leaving most fields unset here. */ - return (ARCHIVE_OK); -} - -static int -archive_read_format_raw_read_data(struct archive_read *a, - const void **buff, size_t *size, off_t *offset) -{ - struct raw_info *info; - ssize_t avail; - - info = (struct raw_info *)(a->format->data); - if (info->end_of_file) - return (ARCHIVE_EOF); - - /* Get whatever bytes are immediately available. */ - *buff = __archive_read_ahead(a, 1, &avail); - if (avail > 0) { - /* Consume and return the bytes we just read */ - __archive_read_consume(a, avail); - *size = avail; - *offset = info->offset; - info->offset += *size; - return (ARCHIVE_OK); - } else if (0 == avail) { - /* Record and return end-of-file. */ - info->end_of_file = 1; - *size = 0; - *offset = info->offset; - return (ARCHIVE_EOF); - } else { - /* Record and return an error. */ - *size = 0; - *offset = info->offset; - return (avail); - } - return (ARCHIVE_OK); -} - -static int -archive_read_format_raw_read_data_skip(struct archive_read *a) -{ - struct raw_info *info; - off_t bytes_skipped; - int64_t request = 1024 * 1024 * 1024UL; /* Skip 1 GB at a time. */ - - info = (struct raw_info *)(a->format->data); - if (info->end_of_file) - return (ARCHIVE_EOF); - info->end_of_file = 1; - - for (;;) { - bytes_skipped = __archive_read_skip_lenient(a, request); - if (bytes_skipped < 0) - return (ARCHIVE_FATAL); - if (bytes_skipped < request) - return (ARCHIVE_OK); - /* We skipped all the bytes we asked for. There might - * be more, so try again. */ - } -} - -static int -archive_read_format_raw_cleanup(struct archive_read *a) -{ - struct raw_info *info; - - info = (struct raw_info *)(a->format->data); - free(info); - a->format->data = NULL; - return (ARCHIVE_OK); -} +/*- + * Copyright (c) 2003-2009 Tim Kientzle + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "archive_platform.h" +__FBSDID("$FreeBSD$"); + +#ifdef HAVE_ERRNO_H +#include +#endif +#include +#ifdef HAVE_STDLIB_H +#include +#endif + +#include "archive.h" +#include "archive_entry.h" +#include "archive_private.h" +#include "archive_read_private.h" + +struct raw_info { + int64_t offset; /* Current position in the file. */ + int end_of_file; +}; + +static int archive_read_format_raw_bid(struct archive_read *); +static int archive_read_format_raw_cleanup(struct archive_read *); +static int archive_read_format_raw_read_data(struct archive_read *, + const void **, size_t *, off_t *); +static int archive_read_format_raw_read_data_skip(struct archive_read *); +static int archive_read_format_raw_read_header(struct archive_read *, + struct archive_entry *); + +int +archive_read_support_format_raw(struct archive *_a) +{ + struct raw_info *info; + struct archive_read *a = (struct archive_read *)_a; + int r; + + info = (struct raw_info *)calloc(1, sizeof(*info)); + if (info == NULL) { + archive_set_error(&a->archive, ENOMEM, + "Can't allocate raw_info data"); + return (ARCHIVE_FATAL); + } + + r = __archive_read_register_format(a, + info, + "raw", + archive_read_format_raw_bid, + NULL, + archive_read_format_raw_read_header, + archive_read_format_raw_read_data, + archive_read_format_raw_read_data_skip, + archive_read_format_raw_cleanup); + if (r != ARCHIVE_OK) + free(info); + return (r); +} + +/* + * Bid 1 if this is a non-empty file. Anyone who can really support + * this should outbid us, so it should generally be safe to use "raw" + * in conjunction with other formats. But, this could really confuse + * folks if there are bid errors or minor file damage, so we don't + * include "raw" as part of support_format_all(). + */ +static int +archive_read_format_raw_bid(struct archive_read *a) +{ + + if (__archive_read_ahead(a, 1, NULL) == NULL) + return (-1); + return (1); +} + +/* + * Mock up a fake header. + */ +static int +archive_read_format_raw_read_header(struct archive_read *a, + struct archive_entry *entry) +{ + struct raw_info *info; + + info = (struct raw_info *)(a->format->data); + if (info->end_of_file) + return (ARCHIVE_EOF); + + a->archive.archive_format = ARCHIVE_FORMAT_RAW; + a->archive.archive_format_name = "Raw data"; + archive_entry_set_pathname(entry, "data"); + /* XXX should we set mode to mimic a regular file? XXX */ + /* I'm deliberately leaving most fields unset here. */ + return (ARCHIVE_OK); +} + +static int +archive_read_format_raw_read_data(struct archive_read *a, + const void **buff, size_t *size, off_t *offset) +{ + struct raw_info *info; + ssize_t avail; + + info = (struct raw_info *)(a->format->data); + if (info->end_of_file) + return (ARCHIVE_EOF); + + /* Get whatever bytes are immediately available. */ + *buff = __archive_read_ahead(a, 1, &avail); + if (avail > 0) { + /* Consume and return the bytes we just read */ + __archive_read_consume(a, avail); + *size = avail; + *offset = info->offset; + info->offset += *size; + return (ARCHIVE_OK); + } else if (0 == avail) { + /* Record and return end-of-file. */ + info->end_of_file = 1; + *size = 0; + *offset = info->offset; + return (ARCHIVE_EOF); + } else { + /* Record and return an error. */ + *size = 0; + *offset = info->offset; + return (avail); + } +} + +static int +archive_read_format_raw_read_data_skip(struct archive_read *a) +{ + struct raw_info *info; + off_t bytes_skipped; + int64_t request = 1024 * 1024 * 1024UL; /* Skip 1 GB at a time. */ + + info = (struct raw_info *)(a->format->data); + if (info->end_of_file) + return (ARCHIVE_EOF); + info->end_of_file = 1; + + for (;;) { + bytes_skipped = __archive_read_skip_lenient(a, request); + if (bytes_skipped < 0) + return (ARCHIVE_FATAL); + if (bytes_skipped < request) + return (ARCHIVE_OK); + /* We skipped all the bytes we asked for. There might + * be more, so try again. */ + } +} + +static int +archive_read_format_raw_cleanup(struct archive_read *a) +{ + struct raw_info *info; + + info = (struct raw_info *)(a->format->data); + free(info); + a->format->data = NULL; + return (ARCHIVE_OK); +} diff --git a/lib/libarchive/archive_read_support_format_tar.c b/lib/libarchive/archive_read_support_format_tar.c index 57f420f86c2..20e1293c15c 100644 --- a/lib/libarchive/archive_read_support_format_tar.c +++ b/lib/libarchive/archive_read_support_format_tar.c @@ -159,10 +159,10 @@ struct tar { wchar_t *pax_entry; size_t pax_entry_length; int header_recursion_depth; - off_t entry_bytes_remaining; - off_t entry_offset; - off_t entry_padding; - off_t realsize; + int64_t entry_bytes_remaining; + int64_t entry_offset; + int64_t entry_padding; + int64_t realsize; struct sparse_block *sparse_list; struct sparse_block *sparse_last; int64_t sparse_offset; @@ -509,7 +509,7 @@ archive_read_format_tar_read_data(struct archive_read *a, static int archive_read_format_tar_skip(struct archive_read *a) { - off_t bytes_skipped; + int64_t bytes_skipped; struct tar* tar; tar = (struct tar *)(a->format->data); @@ -552,7 +552,7 @@ tar_read_header(struct archive_read *a, struct tar *tar, return (bytes); if (bytes < 512) { /* Short read or EOF. */ /* Try requesting just one byte and see what happens. */ - h = __archive_read_ahead(a, 1, &bytes); + (void)__archive_read_ahead(a, 1, &bytes); if (bytes == 0) { /* * The archive ends at a 512-byte boundary but @@ -773,7 +773,7 @@ header_Solaris_ACL(struct archive_read *a, struct tar *tar, } p++; } - switch (type & ~0777777) { + switch ((int)type & ~0777777) { case 01000000: /* POSIX.1e ACL */ break; @@ -1196,7 +1196,7 @@ pax_header(struct archive_read *a, struct tar *tar, struct archive_entry *entry, char *attr) { size_t attr_length, l, line_length; - char *line, *p; + char *p; char *key, *value; int err, err2; @@ -1212,7 +1212,7 @@ pax_header(struct archive_read *a, struct tar *tar, /* Parse decimal length field at start of line. */ line_length = 0; l = attr_length; - line = p = attr; /* Record start of line. */ + p = attr; /* Record start of line. */ while (l>0) { if (*p == ' ') { p++; @@ -1630,7 +1630,7 @@ pax_time(const char *p, int64_t *ps, long *pn) digit = *p - '0'; if (s > limit || (s == limit && digit > last_digit_limit)) { - s = UINT64_MAX; + s = INT64_MAX; break; } s = (s * 10) + digit; @@ -1929,7 +1929,7 @@ gnu_sparse_10_atol(struct archive_read *a, struct tar *tar, return (ARCHIVE_WARN); digit = *p - '0'; if (l > limit || (l == limit && digit > last_digit_limit)) - l = UINT64_MAX; /* Truncate on overflow. */ + l = INT64_MAX; /* Truncate on overflow. */ else l = (l * base) + digit; p++; @@ -2035,7 +2035,7 @@ tar_atol8(const char *p, unsigned char_cnt) digit = *p - '0'; while (digit >= 0 && digit < base && char_cnt-- > 0) { if (l>limit || (l == limit && digit > last_digit_limit)) { - l = UINT64_MAX; /* Truncate on overflow. */ + l = INT64_MAX; /* Truncate on overflow. */ break; } l = (l * base) + digit; @@ -2071,7 +2071,7 @@ tar_atol10(const char *p, unsigned char_cnt) digit = *p - '0'; while (digit >= 0 && digit < base && char_cnt-- > 0) { if (l > limit || (l == limit && digit > last_digit_limit)) { - l = UINT64_MAX; /* Truncate on overflow. */ + l = INT64_MAX; /* Truncate on overflow. */ break; } l = (l * base) + digit; @@ -2189,7 +2189,7 @@ utf8_decode(struct tar *tar, const char *src, size_t length) /* Ensure pax_entry buffer is big enough. */ if (tar->pax_entry_length <= length) { - wchar_t *old_entry = tar->pax_entry; + wchar_t *old_entry; if (tar->pax_entry_length <= 0) tar->pax_entry_length = 1024; @@ -2217,7 +2217,7 @@ utf8_decode(struct tar *tar, const char *src, size_t length) src += n; length -= n; } - *dest++ = L'\0'; + *dest = L'\0'; return (tar->pax_entry); } @@ -2318,7 +2318,7 @@ base64_decode(const char *s, size_t len, size_t *out_len) /* If the decode table is not yet initialized, prepare it. */ if (decode_table[digits[1]] != 1) { - size_t i; + unsigned i; memset(decode_table, 0xff, sizeof(decode_table)); for (i = 0; i < sizeof(digits); i++) decode_table[digits[i]] = i; diff --git a/lib/libarchive/archive_read_support_format_zip.c b/lib/libarchive/archive_read_support_format_zip.c index ccb675d3674..4a24cc80930 100644 --- a/lib/libarchive/archive_read_support_format_zip.c +++ b/lib/libarchive/archive_read_support_format_zip.c @@ -36,10 +36,6 @@ __FBSDID("$FreeBSD$"); #include #ifdef HAVE_ZLIB_H #include -#else -/* Hmmm... This is necessary, but means that we can't correctly extract - * even uncompressed entries on platforms that lack zlib. */ -#define crc32(crc, buf, len) (unsigned long)0 #endif #include "archive.h" @@ -48,6 +44,10 @@ __FBSDID("$FreeBSD$"); #include "archive_read_private.h" #include "archive_endian.h" +#ifndef HAVE_ZLIB_H +#include "archive_crc32.h" +#endif + struct zip { /* entry_bytes_remaining is the number of bytes we expect. */ int64_t entry_bytes_remaining; @@ -540,8 +540,7 @@ archive_read_format_zip_read_data(struct archive_read *a, return (r); /* Update checksum */ if (*size) - zip->entry_crc32 = - crc32(zip->entry_crc32, *buff, *size); + zip->entry_crc32 = crc32(zip->entry_crc32, *buff, *size); /* If we hit the end, swallow any end-of-data marker. */ if (zip->end_of_entry) { if (zip->flags & ZIP_LENGTH_AT_END) { diff --git a/lib/libarchive/archive_string.c b/lib/libarchive/archive_string.c index 111dcb1291d..d68ad5875ae 100644 --- a/lib/libarchive/archive_string.c +++ b/lib/libarchive/archive_string.c @@ -291,12 +291,10 @@ __archive_string_utf8_w(struct archive_string *as) int wc, wc2;/* Must be large enough for a 21-bit Unicode code point. */ const char *src; int n; - int err; ws = (wchar_t *)malloc((as->length + 1) * sizeof(wchar_t)); if (ws == NULL) __archive_errx(1, "Out of memory"); - err = 0; dest = ws; src = as->s; while (*src != '\0') { @@ -344,7 +342,7 @@ __archive_string_utf8_w(struct archive_string *as) } else *dest++ = wc; } - *dest++ = L'\0'; + *dest = L'\0'; return (ws); } diff --git a/lib/libarchive/archive_string.h b/lib/libarchive/archive_string.h index 56ca7ca3180..68fbf167e73 100644 --- a/lib/libarchive/archive_string.h +++ b/lib/libarchive/archive_string.h @@ -26,6 +26,10 @@ * */ +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + #ifndef ARCHIVE_STRING_H_INCLUDED #define ARCHIVE_STRING_H_INCLUDED diff --git a/lib/libarchive/archive_util.3 b/lib/libarchive/archive_util.3 index 831355d8dcf..18234af7099 100644 --- a/lib/libarchive/archive_util.3 +++ b/lib/libarchive/archive_util.3 @@ -34,6 +34,7 @@ .Nm archive_copy_error , .Nm archive_errno , .Nm archive_error_string , +.Nm archive_file_count , .Nm archive_format , .Nm archive_format_name , .Nm archive_set_error @@ -53,6 +54,8 @@ .Ft const char * .Fn archive_error_string "struct archive *" .Ft int +.Fn archive_file_count "struct archive *" +.Ft int .Fn archive_format "struct archive *" .Ft const char * .Fn archive_format_name "struct archive *" @@ -92,6 +95,12 @@ obtained from passing the result of .Fn archive_errno to .Xr strerror 3 . +.It Fn archive_file_count +Returns a count of the number of files processed by this archive object. +The count is incremented by calls to +.Xr archive_write_header +or +.Xr archive_read_next_header . .It Fn archive_format Returns a numeric code indicating the format of the current archive entry. diff --git a/lib/libarchive/archive_util.c b/lib/libarchive/archive_util.c index 1c171b90379..4c0de025dda 100644 --- a/lib/libarchive/archive_util.c +++ b/lib/libarchive/archive_util.c @@ -100,6 +100,11 @@ archive_error_string(struct archive *a) return ("(Empty error message)"); } +int +archive_file_count(struct archive *a) +{ + return (a->file_count); +} int archive_format(struct archive *a) @@ -182,9 +187,14 @@ void __archive_errx(int retvalue, const char *msg) { static const char *msg1 = "Fatal Internal Error in libarchive: "; - write(2, msg1, strlen(msg1)); - write(2, msg, strlen(msg)); - write(2, "\n", 1); + size_t s; + + s = write(2, msg1, strlen(msg1)); + (void)s; /* UNUSED */ + s = write(2, msg, strlen(msg)); + (void)s; /* UNUSED */ + s = write(2, "\n", 1); + (void)s; /* UNUSED */ exit(retvalue); } diff --git a/lib/libarchive/archive_virtual.c b/lib/libarchive/archive_virtual.c index 214e381710c..9ea24d09378 100644 --- a/lib/libarchive/archive_virtual.c +++ b/lib/libarchive/archive_virtual.c @@ -66,6 +66,7 @@ archive_read_finish(struct archive *a) int archive_write_header(struct archive *a, struct archive_entry *entry) { + ++a->file_count; return ((a->vtable->archive_write_header)(a, entry)); } diff --git a/lib/libarchive/archive_write.3 b/lib/libarchive/archive_write.3 index 8228903dc17..7c33a74ff8f 100644 --- a/lib/libarchive/archive_write.3 +++ b/lib/libarchive/archive_write.3 @@ -453,6 +453,9 @@ and .Xr close 2 system calls. .Bd -literal -offset indent +#ifdef __linux__ +#define _FILE_OFFSET_BITS 64 +#endif #include #include #include diff --git a/lib/libarchive/archive_write.c b/lib/libarchive/archive_write.c index ef349291848..cd53fa1a642 100644 --- a/lib/libarchive/archive_write.c +++ b/lib/libarchive/archive_write.c @@ -312,7 +312,6 @@ archive_write_open(struct archive *_a, void *client_data, struct archive_write *a = (struct archive_write *)_a; int ret; - ret = ARCHIVE_OK; __archive_check_magic(&a->archive, ARCHIVE_WRITE_MAGIC, ARCHIVE_STATE_NEW, "archive_write_open"); archive_clear_error(&a->archive); @@ -423,7 +422,7 @@ _archive_write_header(struct archive *_a, struct archive_entry *entry) if (a->skip_file_dev != 0 && archive_entry_dev(entry) == a->skip_file_dev && a->skip_file_ino != 0 && - archive_entry_ino(entry) == a->skip_file_ino) { + archive_entry_ino64(entry) == a->skip_file_ino) { archive_set_error(&a->archive, 0, "Can't add archive to itself"); return (ARCHIVE_FAILED); diff --git a/lib/libarchive/archive_write_disk.c b/lib/libarchive/archive_write_disk.c index 80b1b6a69e6..6abd195dd21 100644 --- a/lib/libarchive/archive_write_disk.c +++ b/lib/libarchive/archive_write_disk.c @@ -442,20 +442,23 @@ _archive_write_header(struct archive *_a, struct archive_entry *entry) ret = restore_entry(a); /* - * On the GNU tar mailing list, some people working with new - * Linux filesystems observed that system xattrs used as - * layout hints need to be restored before the file contents - * are written, so this can't be done at file close. + * TODO: There are rumours that some extended attributes must + * be restored before file data is written. If this is true, + * then we either need to write all extended attributes both + * before and after restoring the data, or find some rule for + * determining which must go first and which last. Due to the + * many ways people are using xattrs, this may prove to be an + * intractable problem. */ - if (a->todo & TODO_XATTR) { - int r2 = set_xattrs(a); - if (r2 < ret) ret = r2; - } #ifdef HAVE_FCHDIR /* If we changed directory above, restore it here. */ if (a->restore_pwd >= 0) { - fchdir(a->restore_pwd); + r = fchdir(a->restore_pwd); + if (r != 0) { + archive_set_error(&a->archive, errno, "chdir() failure"); + ret = ARCHIVE_FATAL; + } close(a->restore_pwd); a->restore_pwd = -1; } @@ -692,15 +695,18 @@ _archive_write_finish_entry(struct archive *_a) } #endif /* - * Explicitly stat the file as some platforms might not - * implement the XSI option to extend files via ftruncate. + * Not all platforms implement the XSI option to + * extend files via ftruncate. Stat() the file again + * to see what happened. */ a->pst = NULL; if ((ret = _archive_write_disk_lazy_stat(a)) != ARCHIVE_OK) return (ret); - if (a->st.st_size != a->filesize) { + /* We can use lseek()/write() to extend the file if + * ftruncate didn't work or isn't available. */ + if (a->st.st_size < a->filesize) { const char nul = '\0'; - if (lseek(a->fd, a->st.st_size - 1, SEEK_SET) < 0) { + if (lseek(a->fd, a->filesize - 1, SEEK_SET) < 0) { archive_set_error(&a->archive, errno, "Seek failed"); return (ARCHIVE_FATAL); @@ -747,6 +753,17 @@ _archive_write_finish_entry(struct archive *_a) int r2 = set_acls(a); if (r2 < ret) ret = r2; } + + /* + * Security-related extended attributes (such as + * security.capability on Linux) have to be restored last, + * since they're implicitly removed by other file changes. + */ + if (a->todo & TODO_XATTR) { + int r2 = set_xattrs(a); + if (r2 < ret) ret = r2; + } + /* * Some flags prevent file modification; they must be restored after * file contents are written. @@ -1057,7 +1074,7 @@ restore_entry(struct archive_write_disk *a) * the failed system call. Note: This function should only ever perform * a single system call. */ -int +static int create_filesystem_object(struct archive_write_disk *a) { /* Create the entry. */ @@ -1069,6 +1086,9 @@ create_filesystem_object(struct archive_write_disk *a) /* Since link(2) and symlink(2) don't handle modes, we're done here. */ linkname = archive_entry_hardlink(a->entry); if (linkname != NULL) { +#if !HAVE_LINK + return (EPERM); +#else r = link(linkname, a->name) ? errno : 0; /* * New cpio and pax formats allow hardlink entries @@ -1091,10 +1111,16 @@ create_filesystem_object(struct archive_write_disk *a) r = errno; } return (r); +#endif } linkname = archive_entry_symlink(a->entry); - if (linkname != NULL) + if (linkname != NULL) { +#if HAVE_SYMLINK return symlink(linkname, a->name) ? errno : 0; +#else + return (EPERM); +#endif + } /* * The remaining system calls all set permissions, so let's @@ -1126,22 +1152,22 @@ create_filesystem_object(struct archive_write_disk *a) * S_IFCHR for the mknod() call. This is correct. */ r = mknod(a->name, mode | S_IFCHR, archive_entry_rdev(a->entry)); + break; #else /* TODO: Find a better way to warn about our inability * to restore a char device node. */ return (EINVAL); #endif /* HAVE_MKNOD */ - break; case AE_IFBLK: #ifdef HAVE_MKNOD r = mknod(a->name, mode | S_IFBLK, archive_entry_rdev(a->entry)); + break; #else /* TODO: Find a better way to warn about our inability * to restore a block device node. */ return (EINVAL); #endif /* HAVE_MKNOD */ - break; case AE_IFDIR: mode = (mode | MINIMUM_DIR_MODE) & MAXIMUM_DIR_MODE; r = mkdir(a->name, mode); @@ -1161,12 +1187,12 @@ create_filesystem_object(struct archive_write_disk *a) case AE_IFIFO: #ifdef HAVE_MKFIFO r = mkfifo(a->name, mode); + break; #else /* TODO: Find a better way to warn about our inability * to restore a fifo. */ return (EINVAL); #endif /* HAVE_MKFIFO */ - break; } /* All the system calls above set errno on failure. */ @@ -1394,9 +1420,15 @@ current_fixup(struct archive_write_disk *a, const char *pathname) * scan the path and both can be optimized by comparing against other * recent paths. */ +/* TODO: Extend this to support symlinks on Windows Vista and later. */ static int check_symlinks(struct archive_write_disk *a) { +#if !defined(HAVE_LSTAT) + /* Platform doesn't have lstat, so we can't look for symlinks. */ + (void)a; /* UNUSED */ + return (ARCHIVE_OK); +#else char *pn, *p; char c; int r; @@ -1477,6 +1509,7 @@ check_symlinks(struct archive_write_disk *a) /* We've checked and/or cleaned the whole path, so remember it. */ archive_strcpy(&a->path_safe, a->name); return (ARCHIVE_OK); +#endif } #if defined(_WIN32) || defined(__CYGWIN__) @@ -1661,8 +1694,6 @@ create_dir(struct archive_write_disk *a, char *path) mode_t mode_final, mode; int r; - r = ARCHIVE_OK; - /* Check for special names and just skip them. */ slash = strrchr(path, '/'); if (slash == NULL) @@ -1806,11 +1837,31 @@ set_ownership(struct archive_write_disk *a) return (ARCHIVE_WARN); } -#ifdef HAVE_UTIMES + +#if defined(HAVE_UTIMENSAT) && defined(HAVE_FUTIMENS) +/* + * utimensat() and futimens() are defined in POSIX.1-2008. They provide ns + * resolution and setting times on fd and on symlinks, too. + */ +static int +set_time(int fd, int mode, const char *name, + time_t atime, long atime_nsec, + time_t mtime, long mtime_nsec) +{ + struct timespec ts[2]; + ts[0].tv_sec = atime; + ts[0].tv_nsec = atime_nsec; + ts[1].tv_sec = mtime; + ts[1].tv_nsec = mtime_nsec; + if (fd >= 0) + return futimens(fd, ts); + return utimensat(AT_FDCWD, name, ts, AT_SYMLINK_NOFOLLOW); +} +#elif HAVE_UTIMES /* - * The utimes()-family functions provide high resolution and + * The utimes()-family functions provide µs-resolution and * a way to set time on an fd or a symlink. We prefer them - * when they're available. + * when they're available and utimensat/futimens aren't there. */ static int set_time(int fd, int mode, const char *name, diff --git a/lib/libarchive/archive_write_disk_private.h b/lib/libarchive/archive_write_disk_private.h index 562229b2e53..8ec6391e8b9 100644 --- a/lib/libarchive/archive_write_disk_private.h +++ b/lib/libarchive/archive_write_disk_private.h @@ -26,6 +26,10 @@ * $FreeBSD$ */ +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + #ifndef ARCHIVE_WRITE_DISK_PRIVATE_H_INCLUDED #define ARCHIVE_WRITE_DISK_PRIVATE_H_INCLUDED diff --git a/lib/libarchive/archive_write_disk_set_standard_lookup.c b/lib/libarchive/archive_write_disk_set_standard_lookup.c index 59f6e172e7f..1842cbd8f06 100644 --- a/lib/libarchive/archive_write_disk_set_standard_lookup.c +++ b/lib/libarchive/archive_write_disk_set_standard_lookup.c @@ -125,6 +125,7 @@ lookup_gid(void *private_data, const char *gname, gid_t gid) int r; for (;;) { + result = &grent; /* Old getgrnam_r ignores last arg. */ r = getgrnam_r(gname, &grent, buffer, bufsize, &result); if (r == 0) break; @@ -184,6 +185,7 @@ lookup_uid(void *private_data, const char *uname, uid_t uid) int r; for (;;) { + result = &pwent; /* Old getpwnam_r ignores last arg. */ r = getpwnam_r(uname, &pwent, buffer, bufsize, &result); if (r == 0) break; @@ -230,8 +232,8 @@ hash(const char *p) as used by ELF for hashing function names. */ unsigned g, h = 0; while (*p != '\0') { - h = ( h << 4 ) + *p++; - if (( g = h & 0xF0000000 )) { + h = (h << 4) + *p++; + if ((g = h & 0xF0000000) != 0) { h ^= g >> 24; h &= 0x0FFFFFFF; } diff --git a/lib/libarchive/archive_write_open_fd.c b/lib/libarchive/archive_write_open_fd.c index f4cc6ac1c54..b0793a26bc8 100644 --- a/lib/libarchive/archive_write_open_fd.c +++ b/lib/libarchive/archive_write_open_fd.c @@ -32,6 +32,12 @@ __FBSDID("$FreeBSD$"); #ifdef HAVE_ERRNO_H #include #endif +#ifdef HAVE_FCNTL_H +#include +#endif +#ifdef HAVE_IO_H +#include +#endif #ifdef HAVE_STDLIB_H #include #endif @@ -64,6 +70,9 @@ archive_write_open_fd(struct archive *a, int fd) return (ARCHIVE_FATAL); } mine->fd = fd; +#if defined(__CYGWIN__) || defined(_WIN32) + setmode(mine->fd, O_BINARY); +#endif return (archive_write_open(a, mine, file_open, file_write, file_close)); } diff --git a/lib/libarchive/archive_write_private.h b/lib/libarchive/archive_write_private.h index 0f7215f9219..f902f08a3c4 100644 --- a/lib/libarchive/archive_write_private.h +++ b/lib/libarchive/archive_write_private.h @@ -25,6 +25,10 @@ * $FreeBSD$ */ +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + #ifndef ARCHIVE_WRITE_PRIVATE_H_INCLUDED #define ARCHIVE_WRITE_PRIVATE_H_INCLUDED @@ -37,7 +41,7 @@ struct archive_write { /* Dev/ino of the archive being written. */ dev_t skip_file_dev; - ino_t skip_file_ino; + int64_t skip_file_ino; /* Utility: Pointer to a block of nulls. */ const unsigned char *nulls; diff --git a/lib/libarchive/archive_write_set_compression_bzip2.c b/lib/libarchive/archive_write_set_compression_bzip2.c index ccf2229d6d9..c8b502e5167 100644 --- a/lib/libarchive/archive_write_set_compression_bzip2.c +++ b/lib/libarchive/archive_write_set_compression_bzip2.c @@ -291,7 +291,6 @@ archive_compressor_bzip2_finish(struct archive_write *a) block_length = state->stream.next_out - state->compressed; /* Tricky calculation to determine size of last block. */ - target_block_length = block_length; if (a->bytes_in_last_block <= 0) /* Default or Zero: pad to full block */ target_block_length = a->bytes_per_block; diff --git a/lib/libarchive/archive_write_set_compression_compress.c b/lib/libarchive/archive_write_set_compression_compress.c index fe6b905ee4a..da44b04f629 100644 --- a/lib/libarchive/archive_write_set_compression_compress.c +++ b/lib/libarchive/archive_write_set_compression_compress.c @@ -243,7 +243,6 @@ output_code(struct archive_write *a, int ocode) int bits, ret, clear_flg, bit_offset; clear_flg = ocode == CLEAR; - bits = state->code_len; /* * Since ocode is always >= 8 bits, only need to mask the first @@ -426,10 +425,9 @@ archive_compressor_compress_finish(struct archive_write *a) ssize_t block_length, target_block_length, bytes_written; int ret; struct private_data *state; - unsigned tocopy; + size_t tocopy; state = (struct private_data *)a->compressor.data; - ret = 0; if (a->client_writer == NULL) { archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, "No write callback is registered? " diff --git a/lib/libarchive/archive_write_set_compression_gzip.c b/lib/libarchive/archive_write_set_compression_gzip.c index 701d6a8d9da..6ecb4eab420 100644 --- a/lib/libarchive/archive_write_set_compression_gzip.c +++ b/lib/libarchive/archive_write_set_compression_gzip.c @@ -365,7 +365,6 @@ archive_compressor_gzip_finish(struct archive_write *a) block_length = state->stream.next_out - state->compressed; /* Tricky calculation to determine size of last block. */ - target_block_length = block_length; if (a->bytes_in_last_block <= 0) /* Default or Zero: pad to full block */ target_block_length = a->bytes_per_block; diff --git a/lib/libarchive/archive_write_set_compression_none.c b/lib/libarchive/archive_write_set_compression_none.c index 36828c28fa5..4527485264b 100644 --- a/lib/libarchive/archive_write_set_compression_none.c +++ b/lib/libarchive/archive_write_set_compression_none.c @@ -208,11 +208,10 @@ archive_compressor_none_finish(struct archive_write *a) ssize_t target_block_length; ssize_t bytes_written; int ret; - int ret2; struct archive_none *state; state = (struct archive_none *)a->compressor.data; - ret = ret2 = ARCHIVE_OK; + ret = ARCHIVE_OK; if (a->client_writer == NULL) { archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, "No write callback is registered? " @@ -225,7 +224,6 @@ archive_compressor_none_finish(struct archive_write *a) block_length = state->buffer_size - state->avail; /* Tricky calculation to determine size of last block */ - target_block_length = block_length; if (a->bytes_in_last_block <= 0) /* Default or Zero: pad to full block */ target_block_length = a->bytes_per_block; diff --git a/lib/libarchive/archive_write_set_compression_program.c b/lib/libarchive/archive_write_set_compression_program.c index e612f3be922..68c86cc4854 100644 --- a/lib/libarchive/archive_write_set_compression_program.c +++ b/lib/libarchive/archive_write_set_compression_program.c @@ -230,11 +230,9 @@ static int archive_compressor_program_write(struct archive_write *a, const void *buff, size_t length) { - struct private_data *state; ssize_t ret; const char *buf; - state = (struct private_data *)a->compressor.data; if (a->client_writer == NULL) { archive_set_error(&a->archive, ARCHIVE_ERRNO_PROGRAMMER, "No write callback is registered? " diff --git a/lib/libarchive/archive_write_set_compression_xz.c b/lib/libarchive/archive_write_set_compression_xz.c index 8396252527c..81733170b6a 100644 --- a/lib/libarchive/archive_write_set_compression_xz.c +++ b/lib/libarchive/archive_write_set_compression_xz.c @@ -323,7 +323,6 @@ archive_compressor_xz_finish(struct archive_write *a) block_length = state->stream.next_out - state->compressed; /* Tricky calculation to determine size of last block. */ - target_block_length = block_length; if (a->bytes_in_last_block <= 0) /* Default or Zero: pad to full block */ target_block_length = a->bytes_per_block; diff --git a/lib/libarchive/archive_write_set_format.c b/lib/libarchive/archive_write_set_format.c index 369f2c9399e..dd91d44c33f 100644 --- a/lib/libarchive/archive_write_set_format.c +++ b/lib/libarchive/archive_write_set_format.c @@ -53,6 +53,7 @@ struct { int code; int (*setter)(struct archive *); } codes[] = { ARCHIVE_FORMAT_TAR_PAX_RESTRICTED, archive_write_set_format_pax_restricted }, { ARCHIVE_FORMAT_TAR_USTAR, archive_write_set_format_ustar }, + { ARCHIVE_FORMAT_ZIP, archive_write_set_format_zip }, { 0, NULL } }; diff --git a/lib/libarchive/archive_write_set_format_ar.c b/lib/libarchive/archive_write_set_format_ar.c index f9dd546592f..bffe07cba8f 100644 --- a/lib/libarchive/archive_write_set_format_ar.c +++ b/lib/libarchive/archive_write_set_format_ar.c @@ -145,7 +145,6 @@ archive_write_ar_header(struct archive_write *a, struct archive_entry *entry) const char *filename; int64_t size; - ret = 0; append_fn = 0; ar = (struct ar_w *)a->format_data; ar->is_strtab = 0; diff --git a/lib/libarchive/archive_write_set_format_by_name.c b/lib/libarchive/archive_write_set_format_by_name.c index d5be6c0d961..593f544f157 100644 --- a/lib/libarchive/archive_write_set_format_by_name.c +++ b/lib/libarchive/archive_write_set_format_by_name.c @@ -57,6 +57,7 @@ struct { const char *name; int (*setter)(struct archive *); } names[] = { "shar", archive_write_set_format_shar }, { "shardump", archive_write_set_format_shar_dump }, { "ustar", archive_write_set_format_ustar }, + { "zip", archive_write_set_format_zip }, { NULL, NULL } }; diff --git a/lib/libarchive/archive_write_set_format_cpio.c b/lib/libarchive/archive_write_set_format_cpio.c index fd7e8a9a2dc..a0bccc508d0 100644 --- a/lib/libarchive/archive_write_set_format_cpio.c +++ b/lib/libarchive/archive_write_set_format_cpio.c @@ -54,6 +54,12 @@ static int64_t format_octal_recursive(int64_t, char *, int); struct cpio { uint64_t entry_bytes_remaining; + + int64_t ino_next; + + struct { int64_t old; int new;} *ino_list; + size_t ino_list_size; + size_t ino_list_next; }; struct cpio_header { @@ -103,35 +109,102 @@ archive_write_set_format_cpio(struct archive *_a) return (ARCHIVE_OK); } +/* + * Ino values are as long as 64 bits on some systems; cpio format + * only allows 18 bits and relies on the ino values to identify hardlinked + * files. So, we can't merely "hash" the ino numbers since collisions + * would corrupt the archive. Instead, we generate synthetic ino values + * to store in the archive and maintain a map of original ino values to + * synthetic ones so we can preserve hardlink information. + * + * TODO: Make this more efficient. It's not as bad as it looks (most + * files don't have any hardlinks and we don't do any work here for those), + * but it wouldn't be hard to do better. + * + * TODO: Work with dev/ino pairs here instead of just ino values. + */ +static int +synthesize_ino_value(struct cpio *cpio, struct archive_entry *entry) +{ + int64_t ino = archive_entry_ino64(entry); + int ino_new; + size_t i; + + /* + * If no index number was given, don't assign one. In + * particular, this handles the end-of-archive marker + * correctly by giving it a zero index value. (This is also + * why we start our synthetic index numbers with one below.) + */ + if (ino == 0) + return (0); + + /* Don't store a mapping if we don't need to. */ + if (archive_entry_nlink(entry) < 2) { + return ++cpio->ino_next; + } + + /* Look up old ino; if we have it, this is a hardlink + * and we reuse the same value. */ + for (i = 0; i < cpio->ino_list_next; ++i) { + if (cpio->ino_list[i].old == ino) + return (cpio->ino_list[i].new); + } + + /* Assign a new index number. */ + ino_new = ++cpio->ino_next; + + /* Ensure space for the new mapping. */ + if (cpio->ino_list_size <= cpio->ino_list_next) { + size_t newsize = cpio->ino_list_size < 512 + ? 512 : cpio->ino_list_size * 2; + void *newlist = realloc(cpio->ino_list, + sizeof(cpio->ino_list[0]) * newsize); + if (newlist == NULL) + return (-1); + + cpio->ino_list_size = newsize; + cpio->ino_list = newlist; + } + + /* Record and return the new value. */ + cpio->ino_list[cpio->ino_list_next].old = ino; + cpio->ino_list[cpio->ino_list_next].new = ino_new; + ++cpio->ino_list_next; + return (ino_new); +} + static int archive_write_cpio_header(struct archive_write *a, struct archive_entry *entry) { struct cpio *cpio; const char *p, *path; - int pathlength, ret; + int pathlength, ret, ret2; + int64_t ino; struct cpio_header h; cpio = (struct cpio *)a->format_data; - ret = 0; + ret2 = ARCHIVE_OK; path = archive_entry_pathname(entry); - pathlength = strlen(path) + 1; /* Include trailing null. */ + pathlength = (int)strlen(path) + 1; /* Include trailing null. */ memset(&h, 0, sizeof(h)); format_octal(070707, &h.c_magic, sizeof(h.c_magic)); format_octal(archive_entry_dev(entry), &h.c_dev, sizeof(h.c_dev)); - /* - * TODO: Generate artificial inode numbers rather than just - * re-using the ones off the disk. That way, the 18-bit c_ino - * field only limits the number of files in the archive. - */ - if ((int)archive_entry_ino(entry) > 0777777) { - archive_set_error(&a->archive, ERANGE, - "large inode number truncated"); - ret = ARCHIVE_WARN; - } - format_octal(archive_entry_ino(entry) & 0777777, &h.c_ino, sizeof(h.c_ino)); + ino = synthesize_ino_value(cpio, entry); + if (ino < 0) { + archive_set_error(&a->archive, ENOMEM, + "No memory for ino translation table"); + return (ARCHIVE_FATAL); + } else if (ino > 0777777) { + archive_set_error(&a->archive, ERANGE, + "Too many files for this cpio format"); + return (ARCHIVE_FATAL); + } + format_octal(ino & 0777777, &h.c_ino, sizeof(h.c_ino)); + format_octal(archive_entry_mode(entry), &h.c_mode, sizeof(h.c_mode)); format_octal(archive_entry_uid(entry), &h.c_uid, sizeof(h.c_uid)); format_octal(archive_entry_gid(entry), &h.c_gid, sizeof(h.c_gid)); @@ -170,6 +243,8 @@ archive_write_cpio_header(struct archive_write *a, struct archive_entry *entry) if (p != NULL && *p != '\0') ret = (a->compressor.write)(a, p, strlen(p)); + if (ret == ARCHIVE_OK) + ret = ret2; return (ret); } @@ -218,17 +293,15 @@ format_octal_recursive(int64_t v, char *p, int s) return (v); v = format_octal_recursive(v, p+1, s-1); *p = '0' + (v & 7); - return (v >>= 3); + return (v >> 3); } static int archive_write_cpio_finish(struct archive_write *a) { - struct cpio *cpio; int er; struct archive_entry *trailer; - cpio = (struct cpio *)a->format_data; trailer = archive_entry_new(); /* nlink = 1 here for GNU cpio compat. */ archive_entry_set_nlink(trailer, 1); @@ -244,6 +317,7 @@ archive_write_cpio_destroy(struct archive_write *a) struct cpio *cpio; cpio = (struct cpio *)a->format_data; + free(cpio->ino_list); free(cpio); a->format_data = NULL; return (ARCHIVE_OK); @@ -253,7 +327,8 @@ static int archive_write_cpio_finish_entry(struct archive_write *a) { struct cpio *cpio; - int to_write, ret; + size_t to_write; + int ret; cpio = (struct cpio *)a->format_data; ret = ARCHIVE_OK; diff --git a/lib/libarchive/archive_write_set_format_cpio_newc.c b/lib/libarchive/archive_write_set_format_cpio_newc.c index 9df79e7ca00..187e7d692b4 100644 --- a/lib/libarchive/archive_write_set_format_cpio_newc.c +++ b/lib/libarchive/archive_write_set_format_cpio_newc.c @@ -75,6 +75,9 @@ struct cpio_header_newc { char c_checksum[8]; }; +/* Logic trick: difference between 'n' and next multiple of 4 */ +#define PAD4(n) (3 & (1 + ~(n))) + /* * Set output format to 'cpio' format. */ @@ -111,28 +114,34 @@ archive_write_set_format_cpio_newc(struct archive *_a) static int archive_write_newc_header(struct archive_write *a, struct archive_entry *entry) { + int64_t ino; struct cpio *cpio; const char *p, *path; - int pathlength, ret; + int pathlength, ret, ret2; struct cpio_header_newc h; int pad; cpio = (struct cpio *)a->format_data; - ret = 0; + ret2 = ARCHIVE_OK; path = archive_entry_pathname(entry); - pathlength = strlen(path) + 1; /* Include trailing null. */ + pathlength = (int)strlen(path) + 1; /* Include trailing null. */ memset(&h, 0, sizeof(h)); format_hex(0x070701, &h.c_magic, sizeof(h.c_magic)); - format_hex(archive_entry_devmajor(entry), &h.c_devmajor, sizeof(h.c_devmajor)); - format_hex(archive_entry_devminor(entry), &h.c_devminor, sizeof(h.c_devminor)); - if (archive_entry_ino(entry) > 0xffffffff) { - archive_set_error(&a->archive, ERANGE, "large inode number truncated"); - ret = ARCHIVE_WARN; + format_hex(archive_entry_devmajor(entry), &h.c_devmajor, + sizeof(h.c_devmajor)); + format_hex(archive_entry_devminor(entry), &h.c_devminor, + sizeof(h.c_devminor)); + + ino = archive_entry_ino64(entry); + if (ino > 0xffffffff) { + archive_set_error(&a->archive, ERANGE, + "large inode number truncated"); + ret2 = ARCHIVE_WARN; } - format_hex(archive_entry_ino(entry) & 0xffffffff, &h.c_ino, sizeof(h.c_ino)); + format_hex(ino & 0xffffffff, &h.c_ino, sizeof(h.c_ino)); format_hex(archive_entry_mode(entry), &h.c_mode, sizeof(h.c_mode)); format_hex(archive_entry_uid(entry), &h.c_uid, sizeof(h.c_uid)); format_hex(archive_entry_gid(entry), &h.c_gid, sizeof(h.c_gid)); @@ -169,24 +178,26 @@ archive_write_newc_header(struct archive_write *a, struct archive_entry *entry) ret = (a->compressor.write)(a, path, pathlength); if (ret != ARCHIVE_OK) return (ARCHIVE_FATAL); - pad = 0x3 & - (pathlength + sizeof(struct cpio_header_newc)); + pad = PAD4(pathlength + sizeof(struct cpio_header_newc)); if (pad) ret = (a->compressor.write)(a, "\0\0\0", pad); if (ret != ARCHIVE_OK) return (ARCHIVE_FATAL); cpio->entry_bytes_remaining = archive_entry_size(entry); - cpio->padding = 3 & (-cpio->entry_bytes_remaining); + cpio->padding = PAD4(cpio->entry_bytes_remaining); /* Write the symlink now. */ if (p != NULL && *p != '\0') { ret = (a->compressor.write)(a, p, strlen(p)); if (ret != ARCHIVE_OK) return (ARCHIVE_FATAL); - pad = 0x3 & -strlen(p); + pad = PAD4(strlen(p)); ret = (a->compressor.write)(a, "\0\0\0", pad); } + if (ret == ARCHIVE_OK) + ret = ret2; return (ret); } @@ -235,17 +246,15 @@ format_hex_recursive(int64_t v, char *p, int s) return (v); v = format_hex_recursive(v, p+1, s-1); *p = "0123456789abcdef"[v & 0xf]; - return (v >>= 4); + return (v >> 4); } static int archive_write_newc_finish(struct archive_write *a) { - struct cpio *cpio; int er; struct archive_entry *trailer; - cpio = (struct cpio *)a->format_data; trailer = archive_entry_new(); archive_entry_set_nlink(trailer, 1); archive_entry_set_pathname(trailer, "TRAILER!!!"); @@ -269,10 +278,10 @@ static int archive_write_newc_finish_entry(struct archive_write *a) { struct cpio *cpio; - int to_write, ret; + size_t to_write; + int ret; cpio = (struct cpio *)a->format_data; - ret = ARCHIVE_OK; while (cpio->entry_bytes_remaining > 0) { to_write = cpio->entry_bytes_remaining < a->null_length ? cpio->entry_bytes_remaining : a->null_length; diff --git a/lib/libarchive/archive_write_set_format_mtree.c b/lib/libarchive/archive_write_set_format_mtree.c index 377fa606f38..1b46147a652 100644 --- a/lib/libarchive/archive_write_set_format_mtree.c +++ b/lib/libarchive/archive_write_set_format_mtree.c @@ -33,45 +33,14 @@ __FBSDID("$FreeBSD$"); #include #include #include -#ifdef HAVE_MD5_H -#include -#else -#ifdef HAVE_OPENSSL_MD5_H -#include -#endif /* HAVE_OPENSSL_MD5_H */ -#endif /* HAVE_MD5_H */ -#ifdef HAVE_OPENSSL_RIPEMD_H -#include -#else /* HAVE_OPENSSL_RIPEMD_H */ -#ifdef HAVE_RIPEMD_H -#include -#endif -#ifdef HAVE_RMD160_H -#include -#endif -#endif /* HAVE_OPENSSL_RIPEMD_H */ -#ifdef HAVE_OPENSSL_SHA_H -#include -#else /* HAVE_OPENSSL_SHA_H */ -#ifdef HAVE_SHA_H -#include -#endif -#ifdef HAVE_SHA1_H -#include -#endif -#ifdef HAVE_SHA2_H -#include -#endif -#ifdef HAVE_SHA256_H -#include -#endif -#endif /* HAVE_OPENSSL_SHA_H */ #include "archive.h" #include "archive_entry.h" #include "archive_private.h" #include "archive_write_private.h" +#include "archive_hash.h" + #define INDENTNAMELEN 15 #define MAXLINELEN 80 @@ -97,33 +66,23 @@ struct mtree_writer { int compute_sum; uint32_t crc; uint64_t crc_len; -#ifdef HAVE_MD5 - MD5_CTX md5ctx; +#ifdef ARCHIVE_HAS_MD5 + archive_md5_ctx md5ctx; #endif -#if defined(HAVE_OPENSSL_RIPEMD_H) || defined(HAVE_RIPEMD_H) - RIPEMD160_CTX rmd160ctx; -#elif defined(HAVE_RMD160_H) - RMD160_CTX rmd160ctx; +#ifdef ARCHIVE_HAS_RMD160 + archive_rmd160_ctx rmd160ctx; #endif -#ifdef HAVE_SHA1 -#if defined(HAVE_OPENSSL_SHA_H) || defined(HAVE_SHA_H) - SHA_CTX sha1ctx; -#else - SHA1_CTX sha1ctx; +#ifdef ARCHIVE_HAS_SHA1 + archive_sha1_ctx sha1ctx; #endif +#ifdef ARCHIVE_HAS_SHA256 + archive_sha256_ctx sha256ctx; #endif -#ifdef HAVE_SHA256 - SHA256_CTX sha256ctx; +#ifdef ARCHIVE_HAS_SHA384 + archive_sha384_ctx sha384ctx; #endif -#ifdef HAVE_SHA384 -#if defined(HAVE_OPENSSL_SHA_H) - SHA512_CTX sha384ctx; -#else - SHA384_CTX sha384ctx; -#endif -#endif -#ifdef HAVE_SHA512 - SHA512_CTX sha512ctx; +#ifdef ARCHIVE_HAS_SHA512 + archive_sha512_ctx sha512ctx; #endif /* Keyword options */ int keys; @@ -614,51 +573,51 @@ archive_write_mtree_header(struct archive_write *a, mtree->crc_len = 0; } else mtree->compute_sum &= ~F_CKSUM; -#ifdef HAVE_MD5 +#ifdef ARCHIVE_HAS_MD5 if ((mtree->keys & F_MD5) != 0 && archive_entry_filetype(entry) == AE_IFREG) { mtree->compute_sum |= F_MD5; - MD5Init(&mtree->md5ctx); + archive_md5_init(&mtree->md5ctx); } else mtree->compute_sum &= ~F_MD5; #endif -#ifdef HAVE_RMD160 +#ifdef ARCHIVE_HAS_RMD160 if ((mtree->keys & F_RMD160) != 0 && archive_entry_filetype(entry) == AE_IFREG) { mtree->compute_sum |= F_RMD160; - RIPEMD160_Init(&mtree->rmd160ctx); + archive_rmd160_init(&mtree->rmd160ctx); } else mtree->compute_sum &= ~F_RMD160; #endif -#ifdef HAVE_SHA1 +#ifdef ARCHIVE_HAS_SHA1 if ((mtree->keys & F_SHA1) != 0 && archive_entry_filetype(entry) == AE_IFREG) { mtree->compute_sum |= F_SHA1; - SHA1_Init(&mtree->sha1ctx); + archive_sha1_init(&mtree->sha1ctx); } else mtree->compute_sum &= ~F_SHA1; #endif -#ifdef HAVE_SHA256 +#ifdef ARCHIVE_HAS_SHA256 if ((mtree->keys & F_SHA256) != 0 && archive_entry_filetype(entry) == AE_IFREG) { mtree->compute_sum |= F_SHA256; - SHA256_Init(&mtree->sha256ctx); + archive_sha256_init(&mtree->sha256ctx); } else mtree->compute_sum &= ~F_SHA256; #endif -#ifdef HAVE_SHA384 +#ifdef ARCHIVE_HAS_SHA384 if ((mtree->keys & F_SHA384) != 0 && archive_entry_filetype(entry) == AE_IFREG) { mtree->compute_sum |= F_SHA384; - SHA384_Init(&mtree->sha384ctx); + archive_sha384_init(&mtree->sha384ctx); } else mtree->compute_sum &= ~F_SHA384; #endif -#ifdef HAVE_SHA512 +#ifdef ARCHIVE_HAS_SHA512 if ((mtree->keys & F_SHA512) != 0 && archive_entry_filetype(entry) == AE_IFREG) { mtree->compute_sum |= F_SHA512; - SHA512_Init(&mtree->sha512ctx); + archive_sha512_init(&mtree->sha512ctx); } else mtree->compute_sum &= ~F_SHA512; #endif @@ -666,7 +625,9 @@ archive_write_mtree_header(struct archive_write *a, return (ARCHIVE_OK); } -#if defined(HAVE_MD5) || defined(HAVE_RMD160) || defined(HAVE_SHA1) || defined(HAVE_SHA256) || defined(HAVE_SHA384) || defined(HAVE_SHA512) +#if defined(ARCHIVE_HAS_MD5) || defined(ARCHIVE_HAS_RMD160) || \ + defined(ARCHIVE_HAS_SHA1) || defined(ARCHIVE_HAS_SHA256) || \ + defined(ARCHIVE_HAS_SHA384) || defined(ARCHIVE_HAS_SHA512) static void strappend_bin(struct archive_string *s, const unsigned char *bin, int n) { @@ -799,56 +760,56 @@ archive_write_mtree_finish_entry(struct archive_write *a) archive_string_sprintf(str, " cksum=%ju", (uintmax_t)mtree->crc); } -#ifdef HAVE_MD5 +#ifdef ARCHIVE_HAS_MD5 if (mtree->compute_sum & F_MD5) { unsigned char buf[16]; - MD5Final(buf, &mtree->md5ctx); + archive_md5_final(&mtree->md5ctx, buf); archive_strcat(str, " md5digest="); strappend_bin(str, buf, sizeof(buf)); } #endif -#ifdef HAVE_RMD160 +#ifdef ARCHIVE_HAS_RMD160 if (mtree->compute_sum & F_RMD160) { unsigned char buf[20]; - RIPEMD160_Final(buf, &mtree->rmd160ctx); + archive_rmd160_final(&mtree->rmd160ctx, buf); archive_strcat(str, " rmd160digest="); strappend_bin(str, buf, sizeof(buf)); } #endif -#ifdef HAVE_SHA1 +#ifdef ARCHIVE_HAS_SHA1 if (mtree->compute_sum & F_SHA1) { unsigned char buf[20]; - SHA1_Final(buf, &mtree->sha1ctx); + archive_sha1_final(&mtree->sha1ctx, buf); archive_strcat(str, " sha1digest="); strappend_bin(str, buf, sizeof(buf)); } #endif -#ifdef HAVE_SHA256 +#ifdef ARCHIVE_HAS_SHA256 if (mtree->compute_sum & F_SHA256) { unsigned char buf[32]; - SHA256_Final(buf, &mtree->sha256ctx); + archive_sha256_final(&mtree->sha256ctx, buf); archive_strcat(str, " sha256digest="); strappend_bin(str, buf, sizeof(buf)); } #endif -#ifdef HAVE_SHA384 +#ifdef ARCHIVE_HAS_SHA384 if (mtree->compute_sum & F_SHA384) { unsigned char buf[48]; - SHA384_Final(buf, &mtree->sha384ctx); + archive_sha384_final(&mtree->sha384ctx, buf); archive_strcat(str, " sha384digest="); strappend_bin(str, buf, sizeof(buf)); } #endif -#ifdef HAVE_SHA512 +#ifdef ARCHIVE_HAS_SHA512 if (mtree->compute_sum & F_SHA512) { unsigned char buf[64]; - SHA512_Final(buf, &mtree->sha512ctx); + archive_sha512_final(&mtree->sha512ctx, buf); archive_strcat(str, " sha512digest="); strappend_bin(str, buf, sizeof(buf)); } @@ -893,35 +854,35 @@ archive_write_mtree_data(struct archive_write *a, const void *buff, size_t n) * Compute a POSIX 1003.2 checksum */ const unsigned char *p; - int nn; + size_t nn; for (nn = n, p = buff; nn--; ++p) COMPUTE_CRC(mtree->crc, *p); mtree->crc_len += n; } -#ifdef HAVE_MD5 +#ifdef ARCHIVE_HAS_MD5 if (mtree->compute_sum & F_MD5) - MD5Update(&mtree->md5ctx, buff, n); + archive_md5_update(&mtree->md5ctx, buff, n); #endif -#ifdef HAVE_RMD160 +#ifdef ARCHIVE_HAS_RMD160 if (mtree->compute_sum & F_RMD160) - RIPEMD160_Update(&mtree->rmd160ctx, buff, n); + archive_rmd160_update(&mtree->rmd160ctx, buff, n); #endif -#ifdef HAVE_SHA1 +#ifdef ARCHIVE_HAS_SHA1 if (mtree->compute_sum & F_SHA1) - SHA1_Update(&mtree->sha1ctx, buff, n); + archive_sha1_update(&mtree->sha1ctx, buff, n); #endif -#ifdef HAVE_SHA256 +#ifdef ARCHIVE_HAS_SHA256 if (mtree->compute_sum & F_SHA256) - SHA256_Update(&mtree->sha256ctx, buff, n); + archive_sha256_update(&mtree->sha256ctx, buff, n); #endif -#ifdef HAVE_SHA384 +#ifdef ARCHIVE_HAS_SHA384 if (mtree->compute_sum & F_SHA384) - SHA384_Update(&mtree->sha384ctx, buff, n); + archive_sha384_update(&mtree->sha384ctx, buff, n); #endif -#ifdef HAVE_SHA512 +#ifdef ARCHIVE_HAS_SHA512 if (mtree->compute_sum & F_SHA512) - SHA512_Update(&mtree->sha512ctx, buff, n); + archive_sha512_update(&mtree->sha512ctx, buff, n); #endif return (n); } @@ -988,11 +949,9 @@ archive_write_mtree_options(struct archive_write *a, const char *key, keybit = F_SLINK; break; case 'm': -#ifdef HAVE_MD5 if (strcmp(key, "md5") == 0 || strcmp(key, "md5digest") == 0) keybit = F_MD5; -#endif if (strcmp(key, "mode") == 0) keybit = F_MODE; break; @@ -1000,35 +959,25 @@ archive_write_mtree_options(struct archive_write *a, const char *key, if (strcmp(key, "nlink") == 0) keybit = F_NLINK; break; -#ifdef HAVE_RMD160 case 'r': if (strcmp(key, "ripemd160digest") == 0 || strcmp(key, "rmd160") == 0 || strcmp(key, "rmd160digest") == 0) keybit = F_RMD160; break; -#endif case 's': -#ifdef HAVE_SHA1 if (strcmp(key, "sha1") == 0 || strcmp(key, "sha1digest") == 0) keybit = F_SHA1; -#endif -#ifdef HAVE_SHA256 if (strcmp(key, "sha256") == 0 || strcmp(key, "sha256digest") == 0) keybit = F_SHA256; -#endif -#ifdef HAVE_SHA384 if (strcmp(key, "sha384") == 0 || strcmp(key, "sha384digest") == 0) keybit = F_SHA384; -#endif -#ifdef HAVE_SHA384 if (strcmp(key, "sha512") == 0 || strcmp(key, "sha512digest") == 0) keybit = F_SHA512; -#endif if (strcmp(key, "size") == 0) keybit = F_SIZE; break; diff --git a/lib/libarchive/archive_write_set_format_pax.c b/lib/libarchive/archive_write_set_format_pax.c index e768a7dc3a8..29291793a73 100644 --- a/lib/libarchive/archive_write_set_format_pax.c +++ b/lib/libarchive/archive_write_set_format_pax.c @@ -307,7 +307,7 @@ add_pax_attr(struct archive_string *as, const char *key, const char *value) * PAX attributes have the following layout: * <=> */ - len = 1 + strlen(key) + 1 + strlen(value) + 1; + len = 1 + (int)strlen(key) + 1 + (int)strlen(value) + 1; /* * The field includes the length of the field, so @@ -362,7 +362,7 @@ archive_write_pax_header_xattrs(struct pax *pax, struct archive_entry *entry) url_encoded_name = url_encode(name); if (url_encoded_name != NULL) { /* Convert narrow-character to wide-character. */ - int wcs_length = strlen(url_encoded_name); + size_t wcs_length = strlen(url_encoded_name); wcs_name = (wchar_t *)malloc((wcs_length + 1) * sizeof(wchar_t)); if (wcs_name == NULL) __archive_errx(1, "No memory for xattr conversion"); @@ -479,7 +479,7 @@ archive_write_pax_header(struct archive_write *a, path = archive_entry_pathname(entry_main); path_w = archive_entry_pathname_w(entry_main); if (path != NULL && path_w == NULL) { - archive_set_error(&a->archive, EILSEQ, + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Can't translate pathname '%s' to UTF-8", path); ret = ARCHIVE_WARN; hdrcharset = "BINARY"; @@ -487,7 +487,7 @@ archive_write_pax_header(struct archive_write *a, uname = archive_entry_uname(entry_main); uname_w = archive_entry_uname_w(entry_main); if (uname != NULL && uname_w == NULL) { - archive_set_error(&a->archive, EILSEQ, + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Can't translate uname '%s' to UTF-8", uname); ret = ARCHIVE_WARN; hdrcharset = "BINARY"; @@ -495,7 +495,7 @@ archive_write_pax_header(struct archive_write *a, gname = archive_entry_gname(entry_main); gname_w = archive_entry_gname_w(entry_main); if (gname != NULL && gname_w == NULL) { - archive_set_error(&a->archive, EILSEQ, + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Can't translate gname '%s' to UTF-8", gname); ret = ARCHIVE_WARN; hdrcharset = "BINARY"; @@ -509,7 +509,7 @@ archive_write_pax_header(struct archive_write *a, linkpath_w = archive_entry_symlink_w(entry_main); } if (linkpath != NULL && linkpath_w == NULL) { - archive_set_error(&a->archive, EILSEQ, + archive_set_error(&a->archive, ARCHIVE_ERRNO_FILE_FORMAT, "Can't translate linkpath '%s' to UTF-8", linkpath); ret = ARCHIVE_WARN; hdrcharset = "BINARY"; @@ -625,7 +625,7 @@ archive_write_pax_header(struct archive_write *a, } /* If numeric GID is too large, add 'gid' to pax extended attrs. */ - if (archive_entry_gid(entry_main) >= (1 << 18)) { + if ((unsigned int)archive_entry_gid(entry_main) >= (1 << 18)) { add_pax_attr_int(&(pax->pax_header), "gid", archive_entry_gid(entry_main)); need_extension = 1; @@ -650,7 +650,7 @@ archive_write_pax_header(struct archive_write *a, } /* If numeric UID is too large, add 'uid' to pax extended attrs. */ - if (archive_entry_uid(entry_main) >= (1 << 18)) { + if ((unsigned int)archive_entry_uid(entry_main) >= (1 << 18)) { add_pax_attr_int(&(pax->pax_header), "uid", archive_entry_uid(entry_main)); need_extension = 1; @@ -819,7 +819,7 @@ archive_write_pax_header(struct archive_write *a, add_pax_attr_int(&(pax->pax_header), "SCHILY.dev", archive_entry_dev(entry_main)); add_pax_attr_int(&(pax->pax_header), "SCHILY.ino", - archive_entry_ino(entry_main)); + archive_entry_ino64(entry_main)); add_pax_attr_int(&(pax->pax_header), "SCHILY.nlink", archive_entry_nlink(entry_main)); @@ -887,7 +887,6 @@ archive_write_pax_header(struct archive_write *a, uid_t uid; gid_t gid; mode_t mode; - long ns; pax_attr_entry = archive_entry_new(); p = archive_entry_pathname(entry_main); @@ -897,12 +896,12 @@ archive_write_pax_header(struct archive_write *a, archive_strlen(&(pax->pax_header))); /* Copy uid/gid (but clip to ustar limits). */ uid = archive_entry_uid(entry_main); - if (uid >= 1 << 18) - uid = (1 << 18) - 1; + if ((unsigned int)uid >= 1 << 18) + uid = (uid_t)(1 << 18) - 1; archive_entry_set_uid(pax_attr_entry, uid); gid = archive_entry_gid(entry_main); - if (gid >= 1 << 18) - gid = (1 << 18) - 1; + if ((unsigned int)gid >= 1 << 18) + gid = (gid_t)(1 << 18) - 1; archive_entry_set_gid(pax_attr_entry, gid); /* Copy mode over (but not setuid/setgid bits) */ mode = archive_entry_mode(entry_main); @@ -925,17 +924,12 @@ archive_write_pax_header(struct archive_write *a, /* Copy mtime, but clip to ustar limits. */ s = archive_entry_mtime(entry_main); - ns = archive_entry_mtime_nsec(entry_main); - if (s < 0) { s = 0; ns = 0; } - if (s > 0x7fffffff) { s = 0x7fffffff; ns = 0; } - archive_entry_set_mtime(pax_attr_entry, s, ns); + if (s < 0) { s = 0; } + if (s >= 0x7fffffff) { s = 0x7fffffff; } + archive_entry_set_mtime(pax_attr_entry, s, 0); - /* Ditto for atime. */ - s = archive_entry_atime(entry_main); - ns = archive_entry_atime_nsec(entry_main); - if (s < 0) { s = 0; ns = 0; } - if (s > 0x7fffffff) { s = 0x7fffffff; ns = 0; } - archive_entry_set_atime(pax_attr_entry, s, ns); + /* Standard ustar doesn't support atime. */ + archive_entry_set_atime(pax_attr_entry, 0, 0); /* Standard ustar doesn't support ctime. */ archive_entry_set_ctime(pax_attr_entry, 0, 0); @@ -949,7 +943,8 @@ archive_write_pax_header(struct archive_write *a, if (r != 0) { const char *msg = "archive_write_pax_header: " "'x' header failed?! This can't happen.\n"; - write(2, msg, strlen(msg)); + size_t u = write(2, msg, strlen(msg)); + (void)u; /* UNUSED */ exit(1); } r = (a->compressor.write)(a, paxbuff, 512); @@ -1030,7 +1025,7 @@ build_ustar_entry_name(char *dest, const char *src, size_t src_length, char *p; int need_slash = 0; /* Was there a trailing slash? */ size_t suffix_length = 99; - int insert_length; + size_t insert_length; /* Length of additional dir element to be added. */ if (insert == NULL) @@ -1124,7 +1119,7 @@ build_ustar_entry_name(char *dest, const char *src, size_t src_length, p += filename_end - filename; if (need_slash) *p++ = '/'; - *p++ = '\0'; + *p = '\0'; return (dest); } @@ -1215,13 +1210,11 @@ build_pax_attribute_name(char *dest, const char *src) static int archive_write_pax_finish(struct archive_write *a) { - struct pax *pax; int r; if (a->compressor.write == NULL) return (ARCHIVE_OK); - pax = (struct pax *)a->format_data; r = write_nulls(a, 512 * 2); return (r); } @@ -1256,7 +1249,8 @@ archive_write_pax_finish_entry(struct archive_write *a) static int write_nulls(struct archive_write *a, size_t padding) { - int ret, to_write; + int ret; + size_t to_write; while (padding > 0) { to_write = padding < a->null_length ? padding : a->null_length; @@ -1387,6 +1381,6 @@ base64_encode(const char *s, size_t len) break; } /* Add trailing NUL character so output is a valid C string. */ - *d++ = '\0'; + *d = '\0'; return (out); } diff --git a/lib/libarchive/archive_write_set_format_zip.c b/lib/libarchive/archive_write_set_format_zip.c new file mode 100644 index 00000000000..877ae09316b --- /dev/null +++ b/lib/libarchive/archive_write_set_format_zip.c @@ -0,0 +1,667 @@ +/*- + * Copyright (c) 2008 Anselm Strauss + * Copyright (c) 2009 Joerg Sonnenberger + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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. + */ + +/* + * Development supported by Google Summer of Code 2008. + */ + +/* + * The current implementation is very limited: + * + * - No encryption support. + * - No ZIP64 support. + * - No support for splitting and spanning. + * - Only supports regular file and folder entries. + * + * Note that generally data in ZIP files is little-endian encoded, + * with some exceptions. + * + * TODO: Since Libarchive is generally 64bit oriented, but this implementation + * does not yet support sizes exceeding 32bit, it is highly fragile for + * big archives. This should change when ZIP64 is finally implemented, otherwise + * some serious checking has to be done. + * + */ + +#include "archive_platform.h" +__FBSDID("$FreeBSD$"); + +#ifdef HAVE_ERRNO_H +#include +#endif +#include +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_ZLIB_H +#include +#endif + +#include "archive.h" +#include "archive_endian.h" +#include "archive_entry.h" +#include "archive_private.h" +#include "archive_write_private.h" + +#ifndef HAVE_ZLIB_H +#include "archive_crc32.h" +#endif + +#define ZIP_SIGNATURE_LOCAL_FILE_HEADER 0x04034b50 +#define ZIP_SIGNATURE_DATA_DESCRIPTOR 0x08074b50 +#define ZIP_SIGNATURE_FILE_HEADER 0x02014b50 +#define ZIP_SIGNATURE_CENTRAL_DIRECTORY_END 0x06054b50 +#define ZIP_SIGNATURE_EXTRA_TIMESTAMP 0x5455 +#define ZIP_SIGNATURE_EXTRA_UNIX 0x7855 +#define ZIP_VERSION_EXTRACT 0x0014 /* ZIP version 2.0 is needed. */ +#define ZIP_VERSION_BY 0x0314 /* Made by UNIX, using ZIP version 2.0. */ +#define ZIP_FLAGS 0x08 /* Flagging bit 3 (count from 0) for using data descriptor. */ + +enum compression { + COMPRESSION_STORE = 0 +#ifdef HAVE_ZLIB_H + , + COMPRESSION_DEFLATE = 8 +#endif +}; + +static ssize_t archive_write_zip_data(struct archive_write *, const void *buff, size_t s); +static int archive_write_zip_finish(struct archive_write *); +static int archive_write_zip_destroy(struct archive_write *); +static int archive_write_zip_finish_entry(struct archive_write *); +static int archive_write_zip_header(struct archive_write *, struct archive_entry *); +static unsigned int dos_time(const time_t); +static size_t path_length(struct archive_entry *); +static int write_path(struct archive_entry *, struct archive_write *); + +struct zip_local_file_header { + char signature[4]; + char version[2]; + char flags[2]; + char compression[2]; + char timedate[4]; + char crc32[4]; + char compressed_size[4]; + char uncompressed_size[4]; + char filename_length[2]; + char extra_length[2]; +}; + +struct zip_file_header { + char signature[4]; + char version_by[2]; + char version_extract[2]; + char flags[2]; + char compression[2]; + char timedate[4]; + char crc32[4]; + char compressed_size[4]; + char uncompressed_size[4]; + char filename_length[2]; + char extra_length[2]; + char comment_length[2]; + char disk_number[2]; + char attributes_internal[2]; + char attributes_external[4]; + char offset[4]; +}; + +struct zip_data_descriptor { + char signature[4]; /* Not mandatory, but recommended by specification. */ + char crc32[4]; + char compressed_size[4]; + char uncompressed_size[4]; +}; + +struct zip_extra_data_local { + char time_id[2]; + char time_size[2]; + char time_flag[1]; + char mtime[4]; + char atime[4]; + char ctime[4]; + char unix_id[2]; + char unix_size[2]; + char unix_uid[2]; + char unix_gid[2]; +}; + +struct zip_extra_data_central { + char time_id[2]; + char time_size[2]; + char time_flag[1]; + char mtime[4]; + char unix_id[2]; + char unix_size[2]; +}; + +struct zip_file_header_link { + struct zip_file_header_link *next; + struct archive_entry *entry; + off_t offset; + unsigned long crc32; + off_t compressed_size; + enum compression compression; +}; + +struct zip { + struct zip_data_descriptor data_descriptor; + struct zip_file_header_link *central_directory; + struct zip_file_header_link *central_directory_end; + int64_t offset; + int64_t written_bytes; + int64_t remaining_data_bytes; + enum compression compression; + +#ifdef HAVE_ZLIB_H + z_stream stream; + size_t len_buf; + unsigned char *buf; +#endif +}; + +struct zip_central_directory_end { + char signature[4]; + char disk[2]; + char start_disk[2]; + char entries_disk[2]; + char entries[2]; + char size[4]; + char offset[4]; + char comment_length[2]; +}; + +static int +archive_write_zip_options(struct archive_write *a, const char *key, + const char *value) +{ + struct zip *zip = a->format_data; + + if (strcmp(key, "compression") == 0) { + if (strcmp(value, "deflate") == 0) { +#ifdef HAVE_ZLIB_H + zip->compression = COMPRESSION_DEFLATE; +#else + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "deflate compression not supported"); + return ARCHIVE_WARN; +#endif + } else if (strcmp(value, "store") == 0) + zip->compression = COMPRESSION_STORE; + else + return (ARCHIVE_WARN); + return (ARCHIVE_OK); + } + return (ARCHIVE_WARN); +} + +int +archive_write_set_format_zip(struct archive *_a) +{ + struct archive_write *a = (struct archive_write *)_a; + struct zip *zip; + + /* If another format was already registered, unregister it. */ + if (a->format_destroy != NULL) + (a->format_destroy)(a); + + zip = (struct zip *) malloc(sizeof(*zip)); + if (zip == NULL) { + archive_set_error(&a->archive, ENOMEM, "Can't allocate zip data"); + return (ARCHIVE_FATAL); + } + zip->central_directory = NULL; + zip->central_directory_end = NULL; + zip->offset = 0; + zip->written_bytes = 0; + zip->remaining_data_bytes = 0; + +#ifdef HAVE_ZLIB_H + zip->compression = COMPRESSION_DEFLATE; + zip->len_buf = 65536; + zip->buf = malloc(zip->len_buf); + if (zip->buf == NULL) { + archive_set_error(&a->archive, ENOMEM, "Can't allocate compression buffer"); + return (ARCHIVE_FATAL); + } +#else + zip->compression = COMPRESSION_STORE; +#endif + + a->format_data = zip; + + a->pad_uncompressed = 0; /* Actually not needed for now, since no compression support yet. */ + a->format_name = "zip"; + a->format_options = archive_write_zip_options; + a->format_write_header = archive_write_zip_header; + a->format_write_data = archive_write_zip_data; + a->format_finish_entry = archive_write_zip_finish_entry; + a->format_finish = archive_write_zip_finish; + a->format_destroy = archive_write_zip_destroy; + a->archive.archive_format = ARCHIVE_FORMAT_ZIP; + a->archive.archive_format_name = "ZIP"; + + archive_le32enc(&zip->data_descriptor.signature, + ZIP_SIGNATURE_DATA_DESCRIPTOR); + + return (ARCHIVE_OK); +} + +static int +archive_write_zip_header(struct archive_write *a, struct archive_entry *entry) +{ + struct zip *zip; + struct zip_local_file_header h; + struct zip_extra_data_local e; + struct zip_data_descriptor *d; + struct zip_file_header_link *l; + int ret; + int64_t size; + mode_t type; + + /* Entries other than a regular file or a folder are skipped. */ + type = archive_entry_filetype(entry); + if ((type != AE_IFREG) & (type != AE_IFDIR)) { + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, "Filetype not supported"); + return ARCHIVE_FAILED; + }; + + /* Directory entries should have a size of 0. */ + if (type == AE_IFDIR) + archive_entry_set_size(entry, 0); + + zip = a->format_data; + d = &zip->data_descriptor; + size = archive_entry_size(entry); + zip->remaining_data_bytes = size; + + /* Append archive entry to the central directory data. */ + l = (struct zip_file_header_link *) malloc(sizeof(*l)); + if (l == NULL) { + archive_set_error(&a->archive, ENOMEM, "Can't allocate zip header data"); + return (ARCHIVE_FATAL); + } + l->entry = archive_entry_clone(entry); + /* Initialize the CRC variable and potentially the local crc32(). */ + l->crc32 = crc32(0, NULL, 0); + l->compression = zip->compression; + l->compressed_size = 0; + l->next = NULL; + if (zip->central_directory == NULL) { + zip->central_directory = l; + } else { + zip->central_directory_end->next = l; + } + zip->central_directory_end = l; + + /* Store the offset of this header for later use in central directory. */ + l->offset = zip->written_bytes; + + memset(&h, 0, sizeof(h)); + archive_le32enc(&h.signature, ZIP_SIGNATURE_LOCAL_FILE_HEADER); + archive_le16enc(&h.version, ZIP_VERSION_EXTRACT); + archive_le16enc(&h.flags, ZIP_FLAGS); + archive_le16enc(&h.compression, zip->compression); + archive_le32enc(&h.timedate, dos_time(archive_entry_mtime(entry))); + archive_le16enc(&h.filename_length, (uint16_t)path_length(entry)); + + switch (zip->compression) { + case COMPRESSION_STORE: + /* Setting compressed and uncompressed sizes even when specification says + * to set to zero when using data descriptors. Otherwise the end of the + * data for an entry is rather difficult to find. */ + archive_le32enc(&h.compressed_size, size); + archive_le32enc(&h.uncompressed_size, size); + break; +#ifdef HAVE_ZLIB_H + case COMPRESSION_DEFLATE: + archive_le32enc(&h.uncompressed_size, size); + + zip->stream.zalloc = Z_NULL; + zip->stream.zfree = Z_NULL; + zip->stream.opaque = Z_NULL; + zip->stream.next_out = zip->buf; + zip->stream.avail_out = zip->len_buf; + if (deflateInit2(&zip->stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, + -15, 8, Z_DEFAULT_STRATEGY) != Z_OK) { + archive_set_error(&a->archive, ENOMEM, "Can't init deflate compressor"); + return (ARCHIVE_FATAL); + } + break; +#endif + } + + /* Formatting extra data. */ + archive_le16enc(&h.extra_length, sizeof(e)); + archive_le16enc(&e.time_id, ZIP_SIGNATURE_EXTRA_TIMESTAMP); + archive_le16enc(&e.time_size, sizeof(e.time_flag) + + sizeof(e.mtime) + sizeof(e.atime) + sizeof(e.ctime)); + e.time_flag[0] = 0x07; + archive_le32enc(&e.mtime, archive_entry_mtime(entry)); + archive_le32enc(&e.atime, archive_entry_atime(entry)); + archive_le32enc(&e.ctime, archive_entry_ctime(entry)); + + archive_le16enc(&e.unix_id, ZIP_SIGNATURE_EXTRA_UNIX); + archive_le16enc(&e.unix_size, sizeof(e.unix_uid) + sizeof(e.unix_gid)); + archive_le16enc(&e.unix_uid, archive_entry_uid(entry)); + archive_le16enc(&e.unix_gid, archive_entry_gid(entry)); + + archive_le32enc(&d->uncompressed_size, size); + + ret = (a->compressor.write)(a, &h, sizeof(h)); + if (ret != ARCHIVE_OK) + return (ARCHIVE_FATAL); + zip->written_bytes += sizeof(h); + + ret = write_path(entry, a); + if (ret <= ARCHIVE_OK) + return (ARCHIVE_FATAL); + zip->written_bytes += ret; + + ret = (a->compressor.write)(a, &e, sizeof(e)); + if (ret != ARCHIVE_OK) + return (ARCHIVE_FATAL); + zip->written_bytes += sizeof(e); + + return (ARCHIVE_OK); +} + +static ssize_t +archive_write_zip_data(struct archive_write *a, const void *buff, size_t s) +{ + int ret; + struct zip *zip = a->format_data; + struct zip_file_header_link *l = zip->central_directory_end; + + if ((int64_t)s > zip->remaining_data_bytes) + s = (size_t)zip->remaining_data_bytes; + + if (s == 0) return 0; + + switch (zip->compression) { + case COMPRESSION_STORE: + ret = (a->compressor.write)(a, buff, s); + if (ret != ARCHIVE_OK) return (ret); + zip->written_bytes += s; + zip->remaining_data_bytes -= s; + l->compressed_size += s; + l->crc32 = crc32(l->crc32, buff, s); + return (s); +#if HAVE_ZLIB_H + case COMPRESSION_DEFLATE: + zip->stream.next_in = (unsigned char*)(uintptr_t)buff; + zip->stream.avail_in = s; + do { + ret = deflate(&zip->stream, Z_NO_FLUSH); + if (ret == Z_STREAM_ERROR) + return (ARCHIVE_FATAL); + if (zip->stream.avail_out == 0) { + ret = (a->compressor.write)(a, zip->buf, zip->len_buf); + if (ret != ARCHIVE_OK) + return (ret); + l->compressed_size += zip->len_buf; + zip->written_bytes += zip->len_buf; + zip->stream.next_out = zip->buf; + zip->stream.avail_out = zip->len_buf; + } + } while (zip->stream.avail_in != 0); + zip->remaining_data_bytes -= s; + /* If we have it, use zlib's fast crc32() */ + l->crc32 = crc32(l->crc32, buff, s); + return (s); +#endif + + default: + archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC, + "Invalid ZIP compression type"); + return ARCHIVE_FATAL; + } +} + +static int +archive_write_zip_finish_entry(struct archive_write *a) +{ + /* Write the data descripter after file data has been written. */ + int ret; + struct zip *zip = a->format_data; + struct zip_data_descriptor *d = &zip->data_descriptor; + struct zip_file_header_link *l = zip->central_directory_end; +#if HAVE_ZLIB_H + size_t reminder; +#endif + + switch(zip->compression) { + case COMPRESSION_STORE: + break; +#if HAVE_ZLIB_H + case COMPRESSION_DEFLATE: + for (;;) { + ret = deflate(&zip->stream, Z_FINISH); + if (ret == Z_STREAM_ERROR) + return (ARCHIVE_FATAL); + reminder = zip->len_buf - zip->stream.avail_out; + ret = (a->compressor.write)(a, zip->buf, reminder); + if (ret != ARCHIVE_OK) + return (ret); + l->compressed_size += reminder; + zip->written_bytes += reminder; + zip->stream.next_out = zip->buf; + if (zip->stream.avail_out != 0) + break; + zip->stream.avail_out = zip->len_buf; + } + deflateEnd(&zip->stream); + break; +#endif + } + + archive_le32enc(&d->crc32, l->crc32); + archive_le32enc(&d->compressed_size, l->compressed_size); + ret = (a->compressor.write)(a, d, sizeof(*d)); + if (ret != ARCHIVE_OK) + return (ARCHIVE_FATAL); + zip->written_bytes += sizeof(*d); + return (ARCHIVE_OK); +} + +static int +archive_write_zip_finish(struct archive_write *a) +{ + struct zip *zip; + struct zip_file_header_link *l; + struct zip_file_header h; + struct zip_central_directory_end end; + struct zip_extra_data_central e; + off_t offset_start, offset_end; + int entries; + int ret; + + zip = a->format_data; + l = zip->central_directory; + + /* + * Formatting central directory file header fields that are fixed for all entries. + * Fields not used (and therefor 0) are: + * + * - comment_length + * - disk_number + * - attributes_internal + */ + memset(&h, 0, sizeof(h)); + archive_le32enc(&h.signature, ZIP_SIGNATURE_FILE_HEADER); + archive_le16enc(&h.version_by, ZIP_VERSION_BY); + archive_le16enc(&h.version_extract, ZIP_VERSION_EXTRACT); + archive_le16enc(&h.flags, ZIP_FLAGS); + + entries = 0; + offset_start = zip->written_bytes; + + /* Formatting individual header fields per entry and + * writing each entry. */ + while (l != NULL) { + archive_le16enc(&h.compression, l->compression); + archive_le32enc(&h.timedate, dos_time(archive_entry_mtime(l->entry))); + archive_le32enc(&h.crc32, l->crc32); + archive_le32enc(&h.compressed_size, l->compressed_size); + archive_le32enc(&h.uncompressed_size, archive_entry_size(l->entry)); + archive_le16enc(&h.filename_length, (uint16_t)path_length(l->entry)); + archive_le16enc(&h.extra_length, sizeof(e)); + archive_le16enc(&h.attributes_external[2], archive_entry_mode(l->entry)); + archive_le32enc(&h.offset, l->offset); + + /* Formatting extra data. */ + archive_le16enc(&e.time_id, ZIP_SIGNATURE_EXTRA_TIMESTAMP); + archive_le16enc(&e.time_size, sizeof(e.mtime) + sizeof(e.time_flag)); + e.time_flag[0] = 0x07; + archive_le32enc(&e.mtime, archive_entry_mtime(l->entry)); + archive_le16enc(&e.unix_id, ZIP_SIGNATURE_EXTRA_UNIX); + archive_le16enc(&e.unix_size, 0x0000); + + ret = (a->compressor.write)(a, &h, sizeof(h)); + if (ret != ARCHIVE_OK) + return (ARCHIVE_FATAL); + zip->written_bytes += sizeof(h); + + ret = write_path(l->entry, a); + if (ret <= ARCHIVE_OK) + return (ARCHIVE_FATAL); + zip->written_bytes += ret; + + ret = (a->compressor.write)(a, &e, sizeof(e)); + if (ret != ARCHIVE_OK) + return (ARCHIVE_FATAL); + zip->written_bytes += sizeof(e); + + l = l->next; + entries++; + } + offset_end = zip->written_bytes; + + /* Formatting end of central directory. */ + memset(&end, 0, sizeof(end)); + archive_le32enc(&end.signature, ZIP_SIGNATURE_CENTRAL_DIRECTORY_END); + archive_le16enc(&end.entries_disk, entries); + archive_le16enc(&end.entries, entries); + archive_le32enc(&end.size, offset_end - offset_start); + archive_le32enc(&end.offset, offset_start); + + /* Writing end of central directory. */ + ret = (a->compressor.write)(a, &end, sizeof(end)); + if (ret != ARCHIVE_OK) + return (ARCHIVE_FATAL); + zip->written_bytes += sizeof(end); + return (ARCHIVE_OK); +} + +static int +archive_write_zip_destroy(struct archive_write *a) +{ + struct zip *zip; + struct zip_file_header_link *l; + + zip = a->format_data; + while (zip->central_directory != NULL) { + l = zip->central_directory; + zip->central_directory = l->next; + archive_entry_free(l->entry); + free(l); + } +#ifdef HAVE_ZLIB_H + free(zip->buf); +#endif + free(zip); + a->format_data = NULL; + return (ARCHIVE_OK); +} + +/* Convert into MSDOS-style date/time. */ +static unsigned int +dos_time(const time_t unix_time) +{ + struct tm *t; + unsigned int dt; + + /* This will not preserve time when creating/extracting the archive + * on two systems with different time zones. */ + t = localtime(&unix_time); + + dt = 0; + dt += ((t->tm_year - 80) & 0x7f) << 9; + dt += ((t->tm_mon + 1) & 0x0f) << 5; + dt += (t->tm_mday & 0x1f); + dt <<= 16; + dt += (t->tm_hour & 0x1f) << 11; + dt += (t->tm_min & 0x3f) << 5; + dt += (t->tm_sec & 0x3e) >> 1; /* Only counting every 2 seconds. */ + return dt; +} + +static size_t +path_length(struct archive_entry *entry) +{ + mode_t type; + const char *path; + + type = archive_entry_filetype(entry); + path = archive_entry_pathname(entry); + + if ((type == AE_IFDIR) & (path[strlen(path) - 1] != '/')) { + return strlen(path) + 1; + } else { + return strlen(path); + } +} + +static int +write_path(struct archive_entry *entry, struct archive_write *archive) +{ + int ret; + const char *path; + mode_t type; + size_t written_bytes; + + path = archive_entry_pathname(entry); + type = archive_entry_filetype(entry); + written_bytes = 0; + + ret = (archive->compressor.write)(archive, path, strlen(path)); + if (ret != ARCHIVE_OK) + return (ARCHIVE_FATAL); + written_bytes += strlen(path); + + /* Folders are recognized by a traling slash. */ + if ((type == AE_IFDIR) & (path[strlen(path) - 1] != '/')) { + ret = (archive->compressor.write)(archive, "/", 1); + if (ret != ARCHIVE_OK) + return (ARCHIVE_FATAL); + written_bytes += 1; + } + + return ((int)written_bytes); +} diff --git a/lib/libarchive/config_freebsd.h b/lib/libarchive/config_freebsd.h index 484b8662ea2..10b399a25db 100644 --- a/lib/libarchive/config_freebsd.h +++ b/lib/libarchive/config_freebsd.h @@ -28,6 +28,7 @@ /* FreeBSD 5.0 and later have ACL and extattr support. */ #if __FreeBSD__ > 4 #define HAVE_ACL_CREATE_ENTRY 1 +#define HAVE_ACL_GET_LINK_NP 1 #define HAVE_ACL_GET_PERM_NP 1 #define HAVE_ACL_INIT 1 #define HAVE_ACL_SET_FD 1 @@ -50,6 +51,7 @@ #define HAVE_SHA512 1 #endif +#define HAVE_BSDXML_H 1 #define HAVE_BZLIB_H 1 #define HAVE_CHFLAGS 1 #define HAVE_CHOWN 1 @@ -60,6 +62,7 @@ #define HAVE_DECL_STRERROR_R 1 #define HAVE_DECL_UINT32_MAX 1 #define HAVE_DECL_UINT64_MAX 1 +#define HAVE_DIRENT_H 1 #define HAVE_EFTYPE 1 #define HAVE_EILSEQ 1 #define HAVE_ERRNO_H 1 @@ -81,12 +84,13 @@ #define HAVE_LCHMOD 1 #define HAVE_LCHOWN 1 #define HAVE_LIMITS_H 1 +#define HAVE_LINK 1 +#define HAVE_LSTAT 1 #define HAVE_LUTIMES 1 #define HAVE_MALLOC 1 #define HAVE_MD5 1 #define HAVE_MD5_H 1 #define HAVE_MEMMOVE 1 -#define HAVE_MEMSET 1 #define HAVE_MKDIR 1 #define HAVE_MKFIFO 1 #define HAVE_MKNOD 1 @@ -95,7 +99,6 @@ #define HAVE_POLL_H 1 #define HAVE_PWD_H 1 #define HAVE_READLINK 1 -#define HAVE_RIPEMD_H #define HAVE_RMD160 1 #define HAVE_SELECT 1 #define HAVE_SETENV 1 @@ -118,6 +121,8 @@ #define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1 #define HAVE_STRUCT_STAT_ST_FLAGS 1 #define HAVE_STRUCT_STAT_ST_MTIMESPEC_TV_NSEC 1 +#define HAVE_SYMLINK 1 +#define HAVE_SYS_CDEFS_H 1 #define HAVE_SYS_IOCTL_H 1 #define HAVE_SYS_SELECT_H 1 #define HAVE_SYS_STAT_H 1 @@ -140,7 +145,6 @@ #define HAVE_WMEMCMP 1 #define HAVE_WMEMCPY 1 #define HAVE_ZLIB_H 1 -#define STDC_HEADERS 1 #define TIME_WITH_SYS_TIME 1 /* FreeBSD 4 and earlier lack intmax_t/uintmax_t */ diff --git a/lib/libarchive/filter_fork.h b/lib/libarchive/filter_fork.h index d34ae22c36c..77ff71b1534 100644 --- a/lib/libarchive/filter_fork.h +++ b/lib/libarchive/filter_fork.h @@ -25,6 +25,10 @@ * $FreeBSD$ */ +#ifndef __LIBARCHIVE_BUILD +#error This header is only to be used internally to libarchive. +#endif + #ifndef FILTER_FORK_H #define FILTER_FORK_H diff --git a/lib/libarchive/libarchive-formats.5 b/lib/libarchive/libarchive-formats.5 index d76515fe0e5..8661df08665 100644 --- a/lib/libarchive/libarchive-formats.5 +++ b/lib/libarchive/libarchive-formats.5 @@ -1,4 +1,4 @@ -.\" Copyright (c) 2003-2007 Tim Kientzle +.\" Copyright (c) 2003-2009 Tim Kientzle .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 17, 2009 +.Dd December 27, 2009 .Dt libarchive-formats 5 .Os .Sh NAME @@ -45,7 +45,8 @@ limitations of the current library support. Note that just because a format is supported by libarchive does not imply that a program that uses libarchive will support that format. Applications that use libarchive specify which formats they wish -to support. +to support, though many programs do use libarchive convenience +functions to enable all supported formats. .Ss Tar Formats The .Xr libarchive 3 @@ -83,8 +84,8 @@ library can read and write POSIX-compliant pax interchange format archives. Pax interchange format archives are an extension of the older ustar format that adds a separate entry with additional attributes stored -as key/value pairs. -The presence of this additional entry is the only difference between +as key/value pairs immediately before each regular entry. +The presence of these additional entries is the only difference between pax interchange format and the older ustar format. The extended attributes are of unlimited length and are stored as UTF-8 Unicode strings. @@ -131,16 +132,30 @@ This name is limited to 100 bytes. Extended attributes, file flags, and other extended security information cannot be stored. .It -Archive entries are limited to 2 gigabytes in size. +Archive entries are limited to 8 gigabytes in size. .El Note that the pax interchange format has none of these restrictions. .El .Pp -The libarchive library can also read a variety of commonly-used extensions to +The libarchive library also reads a variety of commonly-used extensions to the basic tar format. -In particular, it supports base-256 values in certain numeric fields. -This essentially removes the limitations on file size, modification time, +These extensions are recognized automatically whenever they appear. +.Bl -tag -width indent +.It Numeric extensions. +The POSIX standards require fixed-length numeric fields to be written with +some character position reserved for terminators. +Libarchive allows these fields to be written without terminator characters. +This extends the allowable range; in particular, ustar archives with this +extension can support entries up to 64 gigabytes in size. +Libarchive also recognizes base-256 values in most numeric fields. +This essentially removes all limitations on file size, modification time, and device numbers. +.It Solaris extensions +Libarchive recognizes ACL and extended attribute records written +by Solaris tar. +Currently, libarchive only has support for old-style ACLs; the +newer NFSv4 ACLs are recognized but discarded. +.El .Pp The first tar program appeared in Seventh Edition Unix in 1979. The first official standard for the tar file format was the @@ -159,13 +174,13 @@ A cpio archive stores each entry as a fixed-size header followed by a variable-length filename and variable-length data. Unlike the tar format, the cpio format does only minimal padding of the header or file data. -There are a variety of cpio formats, which differ primarily in +There are several cpio variants, which differ primarily in how they store the initial header: some store the values as octal or hexadecimal numbers in ASCII, others as binary values of varying byte order and length. .Bl -tag -width indent .It Cm binary -The libarchive library can read both big-endian and little-endian +The libarchive library transparently reads both big-endian and little-endian variants of the original binary cpio format. This format used 32-bit binary values for file size and mtime, and 16-bit binary values for the other fields. @@ -243,20 +258,24 @@ shardump archives less portable than plain shar archives. .Ss ISO9660 format Libarchive can read and extract from files containing ISO9660-compliant CDROM images. -It also has partial support for Rockridge extensions. In many cases, this can remove the need to burn a physical CDROM just in order to read the files contained in an ISO9660 image. It also avoids security and complexity issues that come with virtual mounts and loopback devices. +Libarchive supports the most common Rockridge extensions and has partial +support for Joliet extensions. +If both extensions are present, the Joliet extensions will be +used and the Rockridge extensions will be ignored. +In particular, this can create problems with hardlinks and symlinks, +which are supported by Rockridge but not by Joliet. .Ss Zip format -Libarchive can extract from most zip format archives, including -jar archives, archives that use Zip64 extensions and many -self-extracting zip archives. -It currently only supports uncompressed entries and entries -compressed with the +Libarchive can read and write zip format archives that have +uncompressed entries and entries compressed with the .Dq deflate algorithm. Older zip compression algorithms are not supported. +It can extract jar archives, archives that use Zip64 extensions and many +self-extracting zip archives. Libarchive reads Zip archives as they are being streamed, which allows it to read archives of arbitrary size. It currently does not use the central directory; this @@ -273,7 +292,20 @@ The ar format has never been standardised. There are two common variants: the GNU format derived from SVR4, and the BSD format, which first appeared in 4.4BSD. -Libarchive provides read and write support for both variants. +The two differ primarily in their handling of filenames +longer than 15 characters: +the GNU/SVR4 variant writes a filename table at the beginning of the archive; +the BSD format stores each long filename in an extension +area adjacent to the entry. +Libarchive can read both extensions, +including archives that may include both types of long filenames. +Programs using libarchive can write GNU/SVR4 format +if they provide a filename table to be written into +the archive before any of the entries. +Any entries whose names are not in the filename table +will be written using BSD-style long filenames. +This can cause problems for programs such as +GNU ld that do not support the BSD-style long filenames. .Ss mtree Libarchive can read and write files in .Xr mtree 5 @@ -287,20 +319,29 @@ the NetBSD and FreeBSD versions of although many of the keywords cannot currently be stored in an .Tn archive_entry object. -When reading, libarchive supports an extension that allows it -to obtain the contents of the files described by the -.Xr mtree 5 -description from files on disk. When writing, libarchive supports use of the .Xr archive_write_set_options 3 interface to specify which keywords should be included in the output. -This includes the ability to compute hash entries such -as +If libarchive was compiled with access to suitable +cryptographic libraries (such as the OpenSSL libraries), +it can compute hash entries such as .Cm sha512 or .Cm md5 from file data being written to the mtree writer. +.Pp +When reading an mtree file, libarchive will locate the corresponding +files on disk using the +.Cm contents +keyword if present or the regular filename. +If it can locate and open the file on disk, it will use that +to fill in any metadata that is missing from the mtree file +and will read the file contents and return those to the program +using libarchive. +If it cannot locate and open the file on disk, libarchive +will return an error for any attempt to read the entry +body. .Sh SEE ALSO .Xr ar 1 , .Xr cpio 1 , diff --git a/lib/libarchive/tar.5 b/lib/libarchive/tar.5 index 7927b04f331..bd56d262d80 100644 --- a/lib/libarchive/tar.5 +++ b/lib/libarchive/tar.5 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 19, 2009 +.Dd December 27, 2009 .Dt tar 5 .Os .Sh NAME @@ -55,8 +55,11 @@ number of records with each I/O operation. These .Dq blocks are always a multiple of the record size. -The most common block size\(emand the maximum supported by historic -implementations\(emis 10240 bytes or 20 records. +The maximum block size supported by early +implementations was 10240 bytes or 20 records. +This is still the default for most implementations +although block sizes of 1MiB (2048 records) or larger are +commonly used with modern high-speed tape drives. (Note: the terms .Dq block and @@ -272,16 +275,19 @@ when they are set and the corresponding names exist on the system. .It Va devmajor , Va devminor Major and minor numbers for character device or block device entry. -.It Va prefix -First part of pathname. +.It Va name , Va prefix If the pathname is too long to fit in the 100 bytes provided by the standard format, it can be split at any .Pa / -character with the first portion going here. +character with the first portion going into the prefix field. If the prefix field is not empty, the reader will prepend the prefix value and a .Pa / character to the regular name field to obtain the full pathname. +The standard does not require a trailing +.Pa / +character on directory names, though most implementations still +include this for compatibility reasons. .El .Pp Note that all unused bytes must be set to @@ -308,7 +314,7 @@ unless they fill the entire field. happens to have a .Pa / as the 156th character.) -POSIX requires numeric fields to be zero-padded in the front, and allows +POSIX requires numeric fields to be zero-padded in the front, and requires them to be terminated with either space or .Dv NUL characters. @@ -809,9 +815,17 @@ John Gilmore's .Nm pdtar public-domain implementation (circa 1987) was highly influential and formed the basis of -.Nm GNU tar . +.Nm GNU tar +(circa 1988). Joerg Shilling's .Nm star archiver is another open-source (GPL) archiver (originally developed circa 1985) which features complete support for pax interchange format. +.Pp +This documentation was written as part of the +.Nm libarchive +and +.Nm bsdtar +project by +.An Tim Kientzle Aq kientzle@FreeBSD.org . diff --git a/lib/libarchive/test/Makefile b/lib/libarchive/test/Makefile index dec95fdb151..ab65da3b2ab 100644 --- a/lib/libarchive/test/Makefile +++ b/lib/libarchive/test/Makefile @@ -14,8 +14,10 @@ TESTS= \ test_archive_api_feature.c \ test_bad_fd.c \ test_compat_bzip2.c \ + test_compat_cpio.c \ test_compat_gtar.c \ test_compat_gzip.c \ + test_compat_lzma.c \ test_compat_solaris_tar_acl.c \ test_compat_tar_hardlink.c \ test_compat_xz.c \ @@ -42,6 +44,7 @@ TESTS= \ test_read_format_cpio_bin_be.c \ test_read_format_cpio_bin_bz2.c \ test_read_format_cpio_bin_gz.c \ + test_read_format_cpio_bin_lzma.c \ test_read_format_cpio_bin_xz.c \ test_read_format_cpio_odc.c \ test_read_format_cpio_svr4_gzip.c \ @@ -51,8 +54,15 @@ TESTS= \ test_read_format_gtar_lzma.c \ test_read_format_gtar_sparse.c \ test_read_format_iso_gz.c \ + test_read_format_iso_multi_extent.c \ + test_read_format_isorr_rr_moved.c \ test_read_format_isojoliet_bz2.c \ + test_read_format_isojoliet_long.c \ + test_read_format_isojoliet_rr.c \ test_read_format_isorr_bz2.c \ + test_read_format_isorr_ce.c \ + test_read_format_isorr_new_bz2.c \ + test_read_format_isozisofs_bz2.c \ test_read_format_mtree.c \ test_read_format_pax_bz2.c \ test_read_format_raw.c \ @@ -60,6 +70,7 @@ TESTS= \ test_read_format_tar_empty_filename.c \ test_read_format_tbz.c \ test_read_format_tgz.c \ + test_read_format_tlz.c \ test_read_format_txz.c \ test_read_format_tz.c \ test_read_format_zip.c \ @@ -67,6 +78,7 @@ TESTS= \ test_read_pax_truncated.c \ test_read_position.c \ test_read_truncated.c \ + test_read_uu.c \ test_tar_filenames.c \ test_tar_large.c \ test_ustar_filenames.c \ @@ -82,6 +94,7 @@ TESTS= \ test_write_disk_perms.c \ test_write_disk_secure.c \ test_write_disk_sparse.c \ + test_write_disk_symlink.c \ test_write_disk_times.c \ test_write_format_ar.c \ test_write_format_cpio.c \ @@ -94,6 +107,9 @@ TESTS= \ test_write_format_tar.c \ test_write_format_tar_empty.c \ test_write_format_tar_ustar.c \ + test_write_format_zip.c \ + test_write_format_zip_empty.c \ + test_write_format_zip_no_compression.c \ test_write_open_memory.c @@ -108,16 +124,12 @@ NO_MAN=yes PROG=libarchive_test INTERNALPROG=yes # Don't install this; it's just for testing -DPADD=${LIBBZ2} ${LIBZ} +DPADD=${LIBBZ2} ${LIBZ} ${LIBMD} ${LIBCRYPTO} ${LIBBSDXML} CFLAGS+= -DPLATFORM_CONFIG_H=\"config_freebsd.h\" -LDADD= -lz -lbz2 -lmd -lcrypto +LDADD= -lz -lbz2 -lmd -lcrypto -lbsdxml CFLAGS+= -g CFLAGS+= -I${LA_SRCDIR} -I. -# Uncomment to build and test lzma support via liblzmadec -#CFLAGS+= -I/usr/local/include -DHAVE_LIBLZMADEC=1 -DHAVE_LZMADEC_H=1 -#LDADD+= -L/usr/local/lib -llzmadec - # Uncomment to build and test lzma and xz support via liblzma #CFLAGS+= -I/usr/local/include -DHAVE_LIBLZMA=1 -DHAVE_LZMA_H=1 #LDADD+= -L/usr/local/lib -llzma @@ -125,11 +137,11 @@ CFLAGS+= -I${LA_SRCDIR} -I. # Uncomment to link against dmalloc #LDADD+= -L/usr/local/lib -ldmalloc #CFLAGS+= -I/usr/local/include -DUSE_DMALLOC -WARNS=6 +#WARNS=6 # Build libarchive_test and run it. check test: libarchive_test - ./libarchive_test -v -r ${.CURDIR} + ./libarchive_test -r ${.CURDIR} # list.h is just a list of all tests, as indicated by DEFINE_TEST macro lines list.h: ${TESTS} Makefile diff --git a/lib/libarchive/test/main.c b/lib/libarchive/test/main.c index 0d16c81edd1..5f8cbc311a5 100644 --- a/lib/libarchive/test/main.c +++ b/lib/libarchive/test/main.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003-2007 Tim Kientzle + * Copyright (c) 2003-2009 Tim Kientzle * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -23,74 +23,142 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/* - * Various utility routines useful for test programs. - * Each test program is linked against this file. - */ #include "test.h" - #include #include #include #include -#if defined(_WIN32) && !defined(__CYGWIN__) -#include -#include -#include -#endif /* * This same file is used pretty much verbatim for all test harnesses. * * The next few lines are the only differences. + * TODO: Move this into a separate configuration header, have all test + * suites share one copy of this file. */ +__FBSDID("$FreeBSD$"); +#define KNOWNREF "test_compat_gtar_1.tar.uu" +#define ENVBASE "LIBARCHIVE" /* Prefix for environment variables. */ #undef PROGRAM /* Testing a library, not a program. */ #define LIBRARY "libarchive" -#define ENVBASE "LIBARCHIVE" /* Prefix for environment variables. */ #define EXTRA_DUMP(x) archive_error_string((struct archive *)(x)) #define EXTRA_VERSION archive_version() -#define KNOWNREF "test_compat_gtar_1.tar.uu" -__FBSDID("$FreeBSD$"); /* - * "list.h" is simply created by "grep DEFINE_TEST"; it has - * a line like - * DEFINE_TEST(test_function) - * for each test. - * Include it here with a suitable DEFINE_TEST to declare all of the - * test functions. + * + * Windows support routines + * + * Note: Configuration is a tricky issue. Using HAVE_* feature macros + * in the test harness is dangerous because they cover up + * configuration errors. The classic example of this is omitting a + * configure check. If libarchive and libarchive_test both look for + * the same feature macro, such errors are hard to detect. Platform + * macros (e.g., _WIN32 or __GNUC__) are a little better, but can + * easily lead to very messy code. It's best to limit yourself + * to only the most generic programming techniques in the test harness + * and thus avoid conditionals altogether. Where that's not possible, + * try to minimize conditionals by grouping platform-specific tests in + * one place (e.g., test_acl_freebsd) or by adding new assert() + * functions (e.g., assertMakeHardlink()) to cover up platform + * differences. Platform-specific coding in libarchive_test is often + * a symptom that some capability is missing from libarchive itself. */ -#undef DEFINE_TEST -#define DEFINE_TEST(name) void name(void); -#include "list.h" - -/* Interix doesn't define these in a standard header. */ -#if __INTERIX__ -extern char *optarg; -extern int optind; +#if defined(_WIN32) && !defined(__CYGWIN__) +#include +#include +#ifndef F_OK +#define F_OK (0) +#endif +#ifndef S_ISDIR +#define S_ISDIR(m) ((m) & _S_IFDIR) +#endif +#ifndef S_ISREG +#define S_ISREG(m) ((m) & _S_IFREG) +#endif +#if !defined(__BORLANDC__) +#define access _access +#define chdir _chdir +#endif +#ifndef fileno +#define fileno _fileno +#endif +/*#define fstat _fstat64*/ +#if !defined(__BORLANDC__) +#define getcwd _getcwd +#endif +#define lstat stat +/*#define lstat _stat64*/ +/*#define stat _stat64*/ +#define rmdir _rmdir +#if !defined(__BORLANDC__) +#define strdup _strdup +#define umask _umask +#endif +#define int64_t __int64 #endif -/* Enable core dump on failure. */ -static int dump_on_failure = 0; -/* Default is to remove temp dirs for successful tests. */ -static int keep_temp_files = 0; -/* Default is to print some basic information about each test. */ -static int quiet_flag = 0; -/* Default is to summarize repeated failures. */ -static int verbose = 0; -/* Cumulative count of component failures. */ -static int failures = 0; -/* Cumulative count of skipped component tests. */ -static int skips = 0; -/* Cumulative count of assertions. */ -static int assertions = 0; - -/* Directory where uuencoded reference files can be found. */ -static const char *refdir; - +#if defined(HAVE__CrtSetReportMode) +# include +#endif #if defined(_WIN32) && !defined(__CYGWIN__) +void *GetFunctionKernel32(const char *name) +{ + static HINSTANCE lib; + static int set; + if (!set) { + set = 1; + lib = LoadLibrary("kernel32.dll"); + } + if (lib == NULL) { + fprintf(stderr, "Can't load kernel32.dll?!\n"); + exit(1); + } + return (void *)GetProcAddress(lib, name); +} +static int +my_CreateSymbolicLinkA(const char *linkname, const char *target, int flags) +{ + static BOOLEAN (WINAPI *f)(LPCSTR, LPCSTR, DWORD); + static int set; + if (!set) { + set = 1; + f = GetFunctionKernel32("CreateSymbolicLinkA"); + } + return f == NULL ? 0 : (*f)(linkname, target, flags); +} + +static int +my_CreateHardLinkA(const char *linkname, const char *target) +{ + static BOOLEAN (WINAPI *f)(LPCSTR, LPCSTR, LPSECURITY_ATTRIBUTES); + static int set; + if (!set) { + set = 1; + f = GetFunctionKernel32("CreateHardLinkA"); + } + return f == NULL ? 0 : (*f)(linkname, target, NULL); +} + +int +my_GetFileInformationByName(const char *path, BY_HANDLE_FILE_INFORMATION *bhfi) +{ + HANDLE h; + int r; + + memset(bhfi, 0, sizeof(*bhfi)); + h = CreateFile(path, FILE_READ_ATTRIBUTES, 0, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (h == INVALID_HANDLE_VALUE) + return (0); + r = GetFileInformationByHandle(h, bhfi); + CloseHandle(h); + return (r); +} +#endif + +#if defined(HAVE__CrtSetReportMode) static void invalid_parameter_handler(const wchar_t * expression, const wchar_t * function, const wchar_t * file, @@ -98,123 +166,181 @@ invalid_parameter_handler(const wchar_t * expression, { /* nop */ } - #endif /* - * My own implementation of the standard assert() macro emits the - * message in the same format as GCC (file:line: message). - * It also includes some additional useful information. - * This makes it a lot easier to skim through test failures in - * Emacs. ;-) * - * It also supports a few special features specifically to simplify - * test harnesses: - * failure(fmt, args) -- Stores a text string that gets - * printed if the following assertion fails, good for - * explaining subtle tests. + * OPTIONS FLAGS + * */ -static char msg[4096]; + +/* Enable core dump on failure. */ +static int dump_on_failure = 0; +/* Default is to remove temp dirs and log data for successful tests. */ +static int keep_temp_files = 0; +/* Default is to just report pass/fail for each test. */ +static int verbosity = 0; +#define VERBOSITY_SUMMARY_ONLY -1 /* -q */ +#define VERBOSITY_PASSFAIL 0 /* Default */ +#define VERBOSITY_LIGHT_REPORT 1 /* -v */ +#define VERBOSITY_FULL 2 /* -vv */ +/* A few places generate even more output for verbosity > VERBOSITY_FULL, + * mostly for debugging the test harness itself. */ +/* Cumulative count of assertion failures. */ +static int failures = 0; +/* Cumulative count of reported skips. */ +static int skips = 0; +/* Cumulative count of assertions checked. */ +static int assertions = 0; + +/* Directory where uuencoded reference files can be found. */ +static const char *refdir; /* - * For each test source file, we remember how many times each - * failure was reported. - */ -static const char *failed_filename = NULL; -static struct line { - int line; - int count; - int critical; -} failed_lines[1000]; - -/* - * Called at the beginning of each assert() function. + * Report log information selectively to console and/or disk log. */ +static int log_console = 0; +static FILE *logfile; static void -count_assertion(const char *file, int line) +vlogprintf(const char *fmt, va_list ap) +{ +#ifdef va_copy + va_list lfap; + va_copy(lfap, ap); +#endif + if (log_console) + vfprintf(stdout, fmt, ap); + if (logfile != NULL) +#ifdef va_copy + vfprintf(logfile, fmt, lfap); + va_end(lfap); +#else + vfprintf(logfile, fmt, ap); +#endif +} + +static void +logprintf(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vlogprintf(fmt, ap); + va_end(ap); +} + +/* Set up a message to display only if next assertion fails. */ +static char msgbuff[4096]; +static const char *msg, *nextmsg; +void +failure(const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vsprintf(msgbuff, fmt, ap); + va_end(ap); + nextmsg = msgbuff; +} + +/* + * Copy arguments into file-local variables. + * This was added to permit vararg assert() functions without needing + * variadic wrapper macros. Turns out that the vararg capability is almost + * never used, so almost all of the vararg assertions can be simplified + * by removing the vararg capability and reworking the wrapper macro to + * pass __FILE__, __LINE__ directly into the function instead of using + * this hook. I suspect this machinery is used so rarely that we + * would be better off just removing it entirely. That would simplify + * the code here noticably. + */ +static const char *test_filename; +static int test_line; +static void *test_extra; +void assertion_setup(const char *filename, int line) +{ + test_filename = filename; + test_line = line; +} + +/* Called at the beginning of each assert() function. */ +static void +assertion_count(const char *file, int line) { (void)file; /* UNUSED */ (void)line; /* UNUSED */ ++assertions; + /* Proper handling of "failure()" message. */ + msg = nextmsg; + nextmsg = NULL; /* Uncomment to print file:line after every assertion. * Verbose, but occasionally useful in tracking down crashes. */ /* printf("Checked %s:%d\n", file, line); */ } /* - * Count this failure; return the number of previous failures. + * For each test source file, we remember how many times each + * assertion was reported. Cleared before each new test, + * used by test_summarize(). */ -static int -previous_failures(const char *filename, int line, int critical) -{ - unsigned int i; +static struct line { int count; + int skip; +} failed_lines[10000]; - if (failed_filename == NULL || strcmp(failed_filename, filename) != 0) - memset(failed_lines, 0, sizeof(failed_lines)); - failed_filename = filename; - - for (i = 0; i < sizeof(failed_lines)/sizeof(failed_lines[0]); i++) { - if (failed_lines[i].line == line) { - count = failed_lines[i].count; - failed_lines[i].count++; - return (count); - } - if (failed_lines[i].line == 0) { - failed_lines[i].line = line; - failed_lines[i].count = 1; - failed_lines[i].critical = critical; - return (0); - } - } - return (0); -} - -/* - * Copy arguments into file-local variables. - */ -static const char *test_filename; -static int test_line; -static void *test_extra; -void test_setup(const char *filename, int line) -{ - test_filename = filename; - test_line = line; -} - -/* - * Inform user that we're skipping a test. - */ -void -test_skipping(const char *fmt, ...) +/* Count this failure, setup up log destination and handle initial report. */ +static void +failure_start(const char *filename, int line, const char *fmt, ...) { va_list ap; - if (previous_failures(test_filename, test_line, 0)) - return; + /* Record another failure for this line. */ + ++failures; + /* test_filename = filename; */ + failed_lines[line].count++; - va_start(ap, fmt); - fprintf(stderr, " *** SKIPPING: "); - vfprintf(stderr, fmt, ap); - fprintf(stderr, "\n"); - va_end(ap); - ++skips; -} - -/* Common handling of failed tests. */ -static void -report_failure(void *extra) -{ - if (msg[0] != '\0') { - fprintf(stderr, " Description: %s\n", msg); - msg[0] = '\0'; + /* Determine whether to log header to console. */ + switch (verbosity) { + case VERBOSITY_LIGHT_REPORT: + log_console = (failed_lines[line].count < 2); + break; + default: + log_console = (verbosity >= VERBOSITY_FULL); } + /* Log file:line header for this failure */ + va_start(ap, fmt); +#if _MSC_VER + logprintf("%s(%d): ", filename, line); +#else + logprintf("%s:%d: ", filename, line); +#endif + vlogprintf(fmt, ap); + va_end(ap); + logprintf("\n"); + + if (msg != NULL && msg[0] != '\0') { + logprintf(" Description: %s\n", msg); + msg = NULL; + } + + /* Determine whether to log details to console. */ + if (verbosity == VERBOSITY_LIGHT_REPORT) + log_console = 0; +} + +/* Complete reporting of failed tests. */ +/* + * The 'extra' hook here is used by libarchive to include libarchive + * error messages with assertion failures. It could also be used + * to add strerror() output, for example. Just define the EXTRA_DUMP() + * macro appropriately. + */ +static void +failure_finish(void *extra) +{ + (void)extra; /* UNUSED (maybe) */ #ifdef EXTRA_DUMP if (extra != NULL) - fprintf(stderr, " detail: %s\n", EXTRA_DUMP(extra)); -#else - (void)extra; /* UNUSED */ + logprintf(" detail: %s\n", EXTRA_DUMP(extra)); #endif if (dump_on_failure) { @@ -225,203 +351,154 @@ report_failure(void *extra) } } -/* - * Summarize repeated failures in the just-completed test file. - * The reports above suppress multiple failures from the same source - * line; this reports on any tests that did fail multiple times. - */ -static int -summarize_comparator(const void *a0, const void *b0) -{ - const struct line *a = a0, *b = b0; - if (a->line == 0 && b->line == 0) - return (0); - if (a->line == 0) - return (1); - if (b->line == 0) - return (-1); - return (a->line - b->line); -} - -static void -summarize(void) -{ - unsigned int i; - - qsort(failed_lines, sizeof(failed_lines)/sizeof(failed_lines[0]), - sizeof(failed_lines[0]), summarize_comparator); - for (i = 0; i < sizeof(failed_lines)/sizeof(failed_lines[0]); i++) { - if (failed_lines[i].line == 0) - break; - if (failed_lines[i].count > 1 && failed_lines[i].critical) - fprintf(stderr, "%s:%d: Failed %d times\n", - failed_filename, failed_lines[i].line, - failed_lines[i].count); - } - /* Clear the failure history for the next file. */ - memset(failed_lines, 0, sizeof(failed_lines)); -} - -/* Set up a message to display only after a test fails. */ +/* Inform user that we're skipping some checks. */ void -failure(const char *fmt, ...) +test_skipping(const char *fmt, ...) { + char buff[1024]; va_list ap; + va_start(ap, fmt); - vsprintf(msg, fmt, ap); + vsprintf(buff, fmt, ap); va_end(ap); + /* failure_start() isn't quite right, but is awfully convenient. */ + failure_start(test_filename, test_line, "SKIPPING: %s", buff); + --failures; /* Undo failures++ in failure_start() */ + /* Don't failure_finish() here. */ + /* Mark as skip, so doesn't count as failed test. */ + failed_lines[test_line].skip = 1; + ++skips; } +/* + * + * ASSERTIONS + * + */ + /* Generic assert() just displays the failed condition. */ int -test_assert(const char *file, int line, int value, const char *condition, void *extra) +assertion_assert(const char *file, int line, int value, + const char *condition, void *extra) { - count_assertion(file, line); - if (value) { - msg[0] = '\0'; - return (value); + assertion_count(file, line); + if (!value) { + failure_start(file, line, "Assertion failed: %s", condition); + failure_finish(extra); } - failures ++; - if (!verbose && previous_failures(file, line, 1)) - return (value); - fprintf(stderr, "%s:%d: Assertion failed\n", file, line); - fprintf(stderr, " Condition: %s\n", condition); - report_failure(extra); return (value); } -/* assertEqualInt() displays the values of the two integers. */ +/* chdir() and report any errors */ int -test_assert_equal_int(const char *file, int line, - int v1, const char *e1, int v2, const char *e2, void *extra) +assertion_chdir(const char *file, int line, const char *pathname) { - count_assertion(file, line); - if (v1 == v2) { - msg[0] = '\0'; + assertion_count(file, line); + if (chdir(pathname) == 0) return (1); - } - failures ++; - if (!verbose && previous_failures(file, line, 1)) - return (0); - fprintf(stderr, "%s:%d: Assertion failed: Ints not equal\n", - file, line); - fprintf(stderr, " %s=%d\n", e1, v1); - fprintf(stderr, " %s=%d\n", e2, v2); - report_failure(extra); + failure_start(file, line, "chdir(\"%s\")", pathname); + failure_finish(NULL); + return (0); + +} + +/* Verify two integers are equal. */ +int +assertion_equal_int(const char *file, int line, + long long v1, const char *e1, long long v2, const char *e2, void *extra) +{ + assertion_count(file, line); + if (v1 == v2) + return (1); + failure_start(file, line, "%s != %s", e1, e2); + logprintf(" %s=%lld (0x%llx, 0%llo)\n", e1, v1, v1, v1); + logprintf(" %s=%lld (0x%llx, 0%llo)\n", e2, v2, v2, v2); + failure_finish(extra); return (0); } -static void strdump(const char *p) +static void strdump(const char *e, const char *p) { + const char *q = p; + + logprintf(" %s = ", e); if (p == NULL) { - fprintf(stderr, "(null)"); + logprintf("NULL"); return; } - fprintf(stderr, "\""); + logprintf("\""); while (*p != '\0') { unsigned int c = 0xff & *p++; switch (c) { - case '\a': fprintf(stderr, "\a"); break; - case '\b': fprintf(stderr, "\b"); break; - case '\n': fprintf(stderr, "\n"); break; - case '\r': fprintf(stderr, "\r"); break; + case '\a': printf("\a"); break; + case '\b': printf("\b"); break; + case '\n': printf("\n"); break; + case '\r': printf("\r"); break; default: if (c >= 32 && c < 127) - fprintf(stderr, "%c", c); + logprintf("%c", c); else - fprintf(stderr, "\\x%02X", c); + logprintf("\\x%02X", c); } } - fprintf(stderr, "\""); + logprintf("\""); + logprintf(" (length %d)\n", q == NULL ? -1 : (int)strlen(q)); } -/* assertEqualString() displays the values of the two strings. */ +/* Verify two strings are equal, dump them if not. */ int -test_assert_equal_string(const char *file, int line, +assertion_equal_string(const char *file, int line, const char *v1, const char *e1, const char *v2, const char *e2, void *extra) { - count_assertion(file, line); - if (v1 == NULL || v2 == NULL) { - if (v1 == v2) { - msg[0] = '\0'; - return (1); - } - } else if (strcmp(v1, v2) == 0) { - msg[0] = '\0'; + assertion_count(file, line); + if (v1 == v2 || (v1 != NULL && v2 != NULL && strcmp(v1, v2) == 0)) return (1); - } - failures ++; - if (!verbose && previous_failures(file, line, 1)) - return (0); - fprintf(stderr, "%s:%d: Assertion failed: Strings not equal\n", - file, line); - fprintf(stderr, " %s = ", e1); - strdump(v1); - fprintf(stderr, " (length %d)\n", v1 == NULL ? 0 : (int)strlen(v1)); - fprintf(stderr, " %s = ", e2); - strdump(v2); - fprintf(stderr, " (length %d)\n", v2 == NULL ? 0 : (int)strlen(v2)); - report_failure(extra); + failure_start(file, line, "%s != %s", e1, e2); + strdump(e1, v1); + strdump(e2, v2); + failure_finish(extra); return (0); } -static void wcsdump(const wchar_t *w) +static void +wcsdump(const char *e, const wchar_t *w) { + logprintf(" %s = ", e); if (w == NULL) { - fprintf(stderr, "(null)"); + logprintf("(null)"); return; } - fprintf(stderr, "\""); + logprintf("\""); while (*w != L'\0') { unsigned int c = *w++; if (c >= 32 && c < 127) - fprintf(stderr, "%c", c); + logprintf("%c", c); else if (c < 256) - fprintf(stderr, "\\x%02X", c); + logprintf("\\x%02X", c); else if (c < 0x10000) - fprintf(stderr, "\\u%04X", c); + logprintf("\\u%04X", c); else - fprintf(stderr, "\\U%08X", c); + logprintf("\\U%08X", c); } - fprintf(stderr, "\""); + logprintf("\"\n"); } -/* assertEqualWString() displays the values of the two strings. */ +/* Verify that two wide strings are equal, dump them if not. */ int -test_assert_equal_wstring(const char *file, int line, +assertion_equal_wstring(const char *file, int line, const wchar_t *v1, const char *e1, const wchar_t *v2, const char *e2, void *extra) { - count_assertion(file, line); - if (v1 == NULL) { - if (v2 == NULL) { - msg[0] = '\0'; - return (1); - } - } else if (v2 == NULL) { - if (v1 == NULL) { - msg[0] = '\0'; - return (1); - } - } else if (wcscmp(v1, v2) == 0) { - msg[0] = '\0'; + assertion_count(file, line); + if (v1 == v2 || wcscmp(v1, v2) == 0) return (1); - } - failures ++; - if (!verbose && previous_failures(file, line, 1)) - return (0); - fprintf(stderr, "%s:%d: Assertion failed: Unicode strings not equal\n", - file, line); - fprintf(stderr, " %s = ", e1); - wcsdump(v1); - fprintf(stderr, "\n"); - fprintf(stderr, " %s = ", e2); - wcsdump(v2); - fprintf(stderr, "\n"); - report_failure(extra); + failure_start(file, line, "%s != %s", e1, e2); + wcsdump(e1, v1); + wcsdump(e2, v2); + failure_finish(extra); return (0); } @@ -436,35 +513,40 @@ hexdump(const char *p, const char *ref, size_t l, size_t offset) size_t i, j; char sep; + if (p == NULL) { + logprintf("(null)\n"); + return; + } for(i=0; i < l; i+=16) { - fprintf(stderr, "%04x", (unsigned)(i + offset)); + logprintf("%04x", (unsigned)(i + offset)); sep = ' '; for (j = 0; j < 16 && i + j < l; j++) { if (ref != NULL && p[i + j] != ref[i + j]) sep = '_'; - fprintf(stderr, "%c%02x", sep, 0xff & (int)p[i+j]); + logprintf("%c%02x", sep, 0xff & (int)p[i+j]); if (ref != NULL && p[i + j] == ref[i + j]) sep = ' '; } for (; j < 16; j++) { - fprintf(stderr, "%c ", sep); + logprintf("%c ", sep); sep = ' '; } - fprintf(stderr, "%c", sep); + logprintf("%c", sep); for (j=0; j < 16 && i + j < l; j++) { int c = p[i + j]; if (c >= ' ' && c <= 126) - fprintf(stderr, "%c", c); + logprintf("%c", c); else - fprintf(stderr, "."); + logprintf("."); } - fprintf(stderr, "\n"); + logprintf("\n"); } } -/* assertEqualMem() displays the values of the two memory blocks. */ +/* Verify that two blocks of memory are the same, display the first + * block of differences if they're not. */ int -test_assert_equal_mem(const char *file, int line, +assertion_equal_mem(const char *file, int line, const void *_v1, const char *e1, const void *_v2, const char *e2, size_t l, const char *ld, void *extra) @@ -473,202 +555,908 @@ test_assert_equal_mem(const char *file, int line, const char *v2 = (const char *)_v2; size_t offset; - count_assertion(file, line); - if (v1 == NULL || v2 == NULL) { - if (v1 == v2) { - msg[0] = '\0'; - return (1); - } - } else if (memcmp(v1, v2, l) == 0) { - msg[0] = '\0'; + assertion_count(file, line); + if (v1 == v2 || (v1 != NULL && v2 != NULL && memcmp(v1, v2, l) == 0)) return (1); - } - failures ++; - if (!verbose && previous_failures(file, line, 1)) - return (0); - fprintf(stderr, "%s:%d: Assertion failed: memory not equal\n", - file, line); - fprintf(stderr, " size %s = %d\n", ld, (int)l); + + failure_start(file, line, "%s != %s", e1, e2); + logprintf(" size %s = %d\n", ld, (int)l); /* Dump 48 bytes (3 lines) so that the first difference is * in the second line. */ offset = 0; while (l > 64 && memcmp(v1, v2, 32) == 0) { - /* The first two lines agree, so step forward one line. */ + /* Two lines agree, so step forward one line. */ v1 += 16; v2 += 16; l -= 16; offset += 16; } - fprintf(stderr, " Dump of %s\n", e1); + logprintf(" Dump of %s\n", e1); hexdump(v1, v2, l < 64 ? l : 64, offset); - fprintf(stderr, " Dump of %s\n", e2); + logprintf(" Dump of %s\n", e2); hexdump(v2, v1, l < 64 ? l : 64, offset); - fprintf(stderr, "\n"); - report_failure(extra); + logprintf("\n"); + failure_finish(extra); return (0); } +/* Verify that the named file exists and is empty. */ int -test_assert_empty_file(const char *f1fmt, ...) +assertion_empty_file(const char *f1fmt, ...) { char buff[1024]; char f1[1024]; struct stat st; va_list ap; ssize_t s; - int fd; - + FILE *f; + assertion_count(test_filename, test_line); va_start(ap, f1fmt); vsprintf(f1, f1fmt, ap); va_end(ap); if (stat(f1, &st) != 0) { - fprintf(stderr, "%s:%d: Could not stat: %s\n", test_filename, test_line, f1); - report_failure(NULL); + failure_start(test_filename, test_line, "Stat failed: %s", f1); + failure_finish(NULL); return (0); } if (st.st_size == 0) return (1); - failures ++; - if (!verbose && previous_failures(test_filename, test_line, 1)) - return (0); - - fprintf(stderr, "%s:%d: File not empty: %s\n", test_filename, test_line, f1); - fprintf(stderr, " File size: %d\n", (int)st.st_size); - fprintf(stderr, " Contents:\n"); - fd = open(f1, O_RDONLY); - if (fd < 0) { - fprintf(stderr, " Unable to open %s\n", f1); + failure_start(test_filename, test_line, "File should be empty: %s", f1); + logprintf(" File size: %d\n", (int)st.st_size); + logprintf(" Contents:\n"); + f = fopen(f1, "rb"); + if (f == NULL) { + logprintf(" Unable to open %s\n", f1); } else { - s = sizeof(buff) < st.st_size ? sizeof(buff) : st.st_size; - s = read(fd, buff, s); + s = ((off_t)sizeof(buff) < st.st_size) ? + (ssize_t)sizeof(buff) : (ssize_t)st.st_size; + s = fread(buff, 1, s, f); hexdump(buff, NULL, s, 0); + fclose(f); } - report_failure(NULL); + failure_finish(NULL); return (0); } -/* assertEqualFile() asserts that two files have the same contents. */ +/* Verify that the named file exists and is not empty. */ +int +assertion_non_empty_file(const char *f1fmt, ...) +{ + char f1[1024]; + struct stat st; + va_list ap; + + assertion_count(test_filename, test_line); + va_start(ap, f1fmt); + vsprintf(f1, f1fmt, ap); + va_end(ap); + + if (stat(f1, &st) != 0) { + failure_start(test_filename, test_line, "Stat failed: %s", f1); + failure_finish(NULL); + return (0); + } + if (st.st_size == 0) { + failure_start(test_filename, test_line, "File empty: %s", f1); + failure_finish(NULL); + return (0); + } + return (1); +} + +/* Verify that two files have the same contents. */ /* TODO: hexdump the first bytes that actually differ. */ int -test_assert_equal_file(const char *f1, const char *f2pattern, ...) +assertion_equal_file(const char *fn1, const char *f2pattern, ...) { - char f2[1024]; + char fn2[1024]; va_list ap; char buff1[1024]; char buff2[1024]; - int fd1, fd2; + FILE *f1, *f2; int n1, n2; + assertion_count(test_filename, test_line); va_start(ap, f2pattern); - vsprintf(f2, f2pattern, ap); + vsprintf(fn2, f2pattern, ap); va_end(ap); - fd1 = open(f1, O_RDONLY); - fd2 = open(f2, O_RDONLY); + f1 = fopen(fn1, "rb"); + f2 = fopen(fn2, "rb"); for (;;) { - n1 = read(fd1, buff1, sizeof(buff1)); - n2 = read(fd2, buff2, sizeof(buff2)); + n1 = fread(buff1, 1, sizeof(buff1), f1); + n2 = fread(buff2, 1, sizeof(buff2), f2); if (n1 != n2) break; - if (n1 == 0 && n2 == 0) + if (n1 == 0 && n2 == 0) { + fclose(f1); + fclose(f2); return (1); + } if (memcmp(buff1, buff2, n1) != 0) break; } - failures ++; - if (!verbose && previous_failures(test_filename, test_line, 1)) - return (0); - fprintf(stderr, "%s:%d: Files are not identical\n", - test_filename, test_line); - fprintf(stderr, " file1=\"%s\"\n", f1); - fprintf(stderr, " file2=\"%s\"\n", f2); - report_failure(test_extra); + fclose(f1); + fclose(f2); + failure_start(test_filename, test_line, "Files not identical"); + logprintf(" file1=\"%s\"\n", fn1); + logprintf(" file2=\"%s\"\n", fn2); + failure_finish(test_extra); return (0); } +/* Verify that the named file does exist. */ int -test_assert_file_exists(const char *fpattern, ...) +assertion_file_exists(const char *fpattern, ...) { char f[1024]; va_list ap; + assertion_count(test_filename, test_line); va_start(ap, fpattern); vsprintf(f, fpattern, ap); va_end(ap); +#if defined(_WIN32) && !defined(__CYGWIN__) + if (!_access(f, 0)) + return (1); +#else if (!access(f, F_OK)) return (1); - if (!previous_failures(test_filename, test_line, 1)) { - fprintf(stderr, "%s:%d: File doesn't exist\n", - test_filename, test_line); - fprintf(stderr, " file=\"%s\"\n", f); - report_failure(test_extra); - } +#endif + failure_start(test_filename, test_line, "File should exist: %s", f); + failure_finish(test_extra); return (0); } +/* Verify that the named file doesn't exist. */ int -test_assert_file_not_exists(const char *fpattern, ...) +assertion_file_not_exists(const char *fpattern, ...) { char f[1024]; va_list ap; + assertion_count(test_filename, test_line); va_start(ap, fpattern); vsprintf(f, fpattern, ap); va_end(ap); +#if defined(_WIN32) && !defined(__CYGWIN__) + if (_access(f, 0)) + return (1); +#else if (access(f, F_OK)) return (1); - if (!previous_failures(test_filename, test_line, 1)) { - fprintf(stderr, "%s:%d: File exists and shouldn't\n", - test_filename, test_line); - fprintf(stderr, " file=\"%s\"\n", f); - report_failure(test_extra); - } +#endif + failure_start(test_filename, test_line, "File should not exist: %s", f); + failure_finish(test_extra); return (0); } -/* assertFileContents() asserts the contents of a file. */ +/* Compare the contents of a file to a block of memory. */ int -test_assert_file_contents(const void *buff, int s, const char *fpattern, ...) +assertion_file_contents(const void *buff, int s, const char *fpattern, ...) { - char f[1024]; + char fn[1024]; va_list ap; char *contents; - int fd; + FILE *f; int n; + assertion_count(test_filename, test_line); va_start(ap, fpattern); - vsprintf(f, fpattern, ap); + vsprintf(fn, fpattern, ap); va_end(ap); - fd = open(f, O_RDONLY); + f = fopen(fn, "rb"); + if (f == NULL) { + failure_start(test_filename, test_line, + "File should exist: %s", fn); + failure_finish(test_extra); + return (0); + } contents = malloc(s * 2); - n = read(fd, contents, s * 2); + n = fread(contents, 1, s * 2, f); + fclose(f); if (n == s && memcmp(buff, contents, s) == 0) { free(contents); return (1); } - failures ++; - if (!previous_failures(test_filename, test_line, 1)) { - fprintf(stderr, "%s:%d: File contents don't match\n", - test_filename, test_line); - fprintf(stderr, " file=\"%s\"\n", f); - if (n > 0) - hexdump(contents, buff, n, 0); - else { - fprintf(stderr, " File empty, contents should be:\n"); - hexdump(buff, NULL, s, 0); - } - report_failure(test_extra); + failure_start(test_filename, test_line, "File contents don't match"); + logprintf(" file=\"%s\"\n", fn); + if (n > 0) + hexdump(contents, buff, n > 512 ? 512 : n, 0); + else { + logprintf(" File empty, contents should be:\n"); + hexdump(buff, NULL, s > 512 ? 512 : n, 0); } + failure_finish(test_extra); free(contents); return (0); } +/* Check the contents of a text file, being tolerant of line endings. */ +int +assertion_text_file_contents(const char *buff, const char *fn) +{ + char *contents; + const char *btxt, *ftxt; + FILE *f; + int n, s; + + assertion_count(test_filename, test_line); + f = fopen(fn, "r"); + s = strlen(buff); + contents = malloc(s * 2 + 128); + n = fread(contents, 1, s * 2 + 128 - 1, f); + if (n >= 0) + contents[n] = '\0'; + fclose(f); + /* Compare texts. */ + btxt = buff; + ftxt = (const char *)contents; + while (*btxt != '\0' && *ftxt != '\0') { + if (*btxt == *ftxt) { + ++btxt; + ++ftxt; + continue; + } + if (btxt[0] == '\n' && ftxt[0] == '\r' && ftxt[1] == '\n') { + /* Pass over different new line characters. */ + ++btxt; + ftxt += 2; + continue; + } + break; + } + if (*btxt == '\0' && *ftxt == '\0') { + free(contents); + return (1); + } + failure_start(test_filename, test_line, "Contents don't match"); + logprintf(" file=\"%s\"\n", fn); + if (n > 0) + hexdump(contents, buff, n, 0); + else { + logprintf(" File empty, contents should be:\n"); + hexdump(buff, NULL, s, 0); + } + failure_finish(test_extra); + free(contents); + return (0); +} + +/* Test that two paths point to the same file. */ +/* As a side-effect, asserts that both files exist. */ +static int +is_hardlink(const char *file, int line, + const char *path1, const char *path2) +{ +#if defined(_WIN32) && !defined(__CYGWIN__) + BY_HANDLE_FILE_INFORMATION bhfi1, bhfi2; + int r; + + assertion_count(file, line); + r = my_GetFileInformationByName(path1, &bhfi1); + if (r == 0) { + failure_start(file, line, "File %s can't be inspected?", path1); + failure_finish(NULL); + return (0); + } + r = my_GetFileInformationByName(path2, &bhfi2); + if (r == 0) { + failure_start(file, line, "File %s can't be inspected?", path2); + failure_finish(NULL); + return (0); + } + return (bhfi1.dwVolumeSerialNumber == bhfi2.dwVolumeSerialNumber + && bhfi1.nFileIndexHigh == bhfi2.nFileIndexHigh + && bhfi1.nFileIndexLow == bhfi2.nFileIndexLow); +#else + struct stat st1, st2; + int r; + + assertion_count(file, line); + r = lstat(path1, &st1); + if (r != 0) { + failure_start(file, line, "File should exist: %s", path1); + failure_finish(NULL); + return (0); + } + r = lstat(path2, &st2); + if (r != 0) { + failure_start(file, line, "File should exist: %s", path2); + failure_finish(NULL); + return (0); + } + return (st1.st_ino == st2.st_ino && st1.st_dev == st2.st_dev); +#endif +} + +int +assertion_is_hardlink(const char *file, int line, + const char *path1, const char *path2) +{ + if (is_hardlink(file, line, path1, path2)) + return (1); + failure_start(file, line, + "Files %s and %s are not hardlinked", path1, path2); + failure_finish(NULL); + return (0); +} + +int +assertion_is_not_hardlink(const char *file, int line, + const char *path1, const char *path2) +{ + if (!is_hardlink(file, line, path1, path2)) + return (1); + failure_start(file, line, + "Files %s and %s should not be hardlinked", path1, path2); + failure_finish(NULL); + return (0); +} + +/* Verify a/b/mtime of 'pathname'. */ +/* If 'recent', verify that it's within last 10 seconds. */ +static int +assertion_file_time(const char *file, int line, + const char *pathname, long t, long nsec, char type, int recent) +{ + long long filet, filet_nsec; + int r; + +#if defined(_WIN32) && !defined(__CYGWIN__) +#define EPOC_TIME (116444736000000000ULL) + FILETIME ftime, fbirthtime, fatime, fmtime; + ULARGE_INTEGER wintm; + HANDLE h; + ftime.dwLowDateTime = 0; + ftime.dwHighDateTime = 0; + + assertion_count(file, line); + h = CreateFile(pathname, FILE_READ_ATTRIBUTES, 0, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (h == INVALID_HANDLE_VALUE) { + failure_start(file, line, "Can't access %s\n", pathname); + failure_finish(NULL); + return (0); + } + r = GetFileTime(h, &fbirthtime, &fatime, &fmtime); + switch (type) { + case 'a': ftime = fatime; break; + case 'b': ftime = fbirthtime; break; + case 'm': ftime = fmtime; break; + } + CloseHandle(h); + if (r == 0) { + failure_start(file, line, "Can't GetFileTime %s\n", pathname); + failure_finish(NULL); + return (0); + } + wintm.LowPart = ftime.dwLowDateTime; + wintm.HighPart = ftime.dwHighDateTime; + filet = (wintm.QuadPart - EPOC_TIME) / 10000000; + filet_nsec = ((wintm.QuadPart - EPOC_TIME) % 10000000) * 100; + nsec = (nsec / 100) * 100; /* Round the request */ +#else + struct stat st; + + assertion_count(file, line); + r = lstat(pathname, &st); + if (r != 0) { + failure_start(file, line, "Can't stat %s\n", pathname); + failure_finish(NULL); + return (0); + } + switch (type) { + case 'a': filet = st.st_atime; break; + case 'm': filet = st.st_mtime; break; + case 'b': filet = 0; break; + default: fprintf(stderr, "INTERNAL: Bad type %c for file time", type); + exit(1); + } +#if defined(__FreeBSD__) + switch (type) { + case 'a': filet_nsec = st.st_atimespec.tv_nsec; break; + case 'b': filet = st.st_birthtime; + filet_nsec = st.st_birthtimespec.tv_nsec; break; + case 'm': filet_nsec = st.st_mtimespec.tv_nsec; break; + default: fprintf(stderr, "INTERNAL: Bad type %c for file time", type); + exit(1); + } + /* FreeBSD generally only stores to microsecond res, so round. */ + filet_nsec = (filet_nsec / 1000) * 1000; + nsec = (nsec / 1000) * 1000; +#else + filet_nsec = nsec = 0; /* Generic POSIX only has whole seconds. */ + if (type == 'b') return (1); /* Generic POSIX doesn't have birthtime */ +#if defined(__HAIKU__) + if (type == 'a') return (1); /* Haiku doesn't have atime. */ +#endif +#endif +#endif + if (recent) { + /* Check that requested time is up-to-date. */ + time_t now = time(NULL); + if (filet < now - 10 || filet > now + 1) { + failure_start(file, line, + "File %s has %ctime %ld, %ld seconds ago\n", + pathname, type, filet, now - filet); + failure_finish(NULL); + return (0); + } + } else if (filet != t || filet_nsec != nsec) { + failure_start(file, line, + "File %s has %ctime %ld.%09ld, expected %ld.%09ld", + pathname, type, filet, filet_nsec, t, nsec); + failure_finish(NULL); + return (0); + } + return (1); +} + +/* Verify atime of 'pathname'. */ +int +assertion_file_atime(const char *file, int line, + const char *pathname, long t, long nsec) +{ + return assertion_file_time(file, line, pathname, t, nsec, 'a', 0); +} + +/* Verify atime of 'pathname' is up-to-date. */ +int +assertion_file_atime_recent(const char *file, int line, const char *pathname) +{ + return assertion_file_time(file, line, pathname, 0, 0, 'a', 1); +} + +/* Verify birthtime of 'pathname'. */ +int +assertion_file_birthtime(const char *file, int line, + const char *pathname, long t, long nsec) +{ + return assertion_file_time(file, line, pathname, t, nsec, 'b', 0); +} + +/* Verify birthtime of 'pathname' is up-to-date. */ +int +assertion_file_birthtime_recent(const char *file, int line, + const char *pathname) +{ + return assertion_file_time(file, line, pathname, 0, 0, 'b', 1); +} + +/* Verify mtime of 'pathname'. */ +int +assertion_file_mtime(const char *file, int line, + const char *pathname, long t, long nsec) +{ + return assertion_file_time(file, line, pathname, t, nsec, 'm', 0); +} + +/* Verify mtime of 'pathname' is up-to-date. */ +int +assertion_file_mtime_recent(const char *file, int line, const char *pathname) +{ + return assertion_file_time(file, line, pathname, 0, 0, 'm', 1); +} + +/* Verify number of links to 'pathname'. */ +int +assertion_file_nlinks(const char *file, int line, + const char *pathname, int nlinks) +{ +#if defined(_WIN32) && !defined(__CYGWIN__) + BY_HANDLE_FILE_INFORMATION bhfi; + int r; + + assertion_count(file, line); + r = my_GetFileInformationByName(pathname, &bhfi); + if (r != 0 && bhfi.nNumberOfLinks == (DWORD)nlinks) + return (1); + failure_start(file, line, "File %s has %d links, expected %d", + pathname, bhfi.nNumberOfLinks, nlinks); + failure_finish(NULL); + return (0); +#else + struct stat st; + int r; + + assertion_count(file, line); + r = lstat(pathname, &st); + if (r == 0 && st.st_nlink == nlinks) + return (1); + failure_start(file, line, "File %s has %d links, expected %d", + pathname, st.st_nlink, nlinks); + failure_finish(NULL); + return (0); +#endif +} + +/* Verify size of 'pathname'. */ +int +assertion_file_size(const char *file, int line, const char *pathname, long size) +{ + int64_t filesize; + int r; + + assertion_count(file, line); +#if defined(_WIN32) && !defined(__CYGWIN__) + { + BY_HANDLE_FILE_INFORMATION bhfi; + r = !my_GetFileInformationByName(pathname, &bhfi); + filesize = ((int64_t)bhfi.nFileSizeHigh << 32) + bhfi.nFileSizeLow; + } +#else + { + struct stat st; + r = lstat(pathname, &st); + filesize = st.st_size; + } +#endif + if (r == 0 && filesize == size) + return (1); + failure_start(file, line, "File %s has size %ld, expected %ld", + pathname, (long)filesize, (long)size); + failure_finish(NULL); + return (0); +} + +/* Assert that 'pathname' is a dir. If mode >= 0, verify that too. */ +int +assertion_is_dir(const char *file, int line, const char *pathname, int mode) +{ + struct stat st; + int r; + +#if defined(_WIN32) && !defined(__CYGWIN__) + (void)mode; /* UNUSED */ +#endif + assertion_count(file, line); + r = lstat(pathname, &st); + if (r != 0) { + failure_start(file, line, "Dir should exist: %s", pathname); + failure_finish(NULL); + return (0); + } + if (!S_ISDIR(st.st_mode)) { + failure_start(file, line, "%s is not a dir", pathname); + failure_finish(NULL); + return (0); + } +#if !defined(_WIN32) || defined(__CYGWIN__) + /* Windows doesn't handle permissions the same way as POSIX, + * so just ignore the mode tests. */ + /* TODO: Can we do better here? */ + if (mode >= 0 && mode != (st.st_mode & 07777)) { + failure_start(file, line, "Dir %s has wrong mode", pathname); + logprintf(" Expected: 0%3o\n", mode); + logprintf(" Found: 0%3o\n", st.st_mode & 07777); + failure_finish(NULL); + return (0); + } +#endif + return (1); +} + +/* Verify that 'pathname' is a regular file. If 'mode' is >= 0, + * verify that too. */ +int +assertion_is_reg(const char *file, int line, const char *pathname, int mode) +{ + struct stat st; + int r; + +#if defined(_WIN32) && !defined(__CYGWIN__) + (void)mode; /* UNUSED */ +#endif + assertion_count(file, line); + r = lstat(pathname, &st); + if (r != 0 || !S_ISREG(st.st_mode)) { + failure_start(file, line, "File should exist: %s", pathname); + failure_finish(NULL); + return (0); + } +#if !defined(_WIN32) || defined(__CYGWIN__) + /* Windows doesn't handle permissions the same way as POSIX, + * so just ignore the mode tests. */ + /* TODO: Can we do better here? */ + if (mode >= 0 && mode != (st.st_mode & 07777)) { + failure_start(file, line, "File %s has wrong mode", pathname); + logprintf(" Expected: 0%3o\n", mode); + logprintf(" Found: 0%3o\n", st.st_mode & 07777); + failure_finish(NULL); + return (0); + } +#endif + return (1); +} + +/* Check whether 'pathname' is a symbolic link. If 'contents' is + * non-NULL, verify that the symlink has those contents. */ +static int +is_symlink(const char *file, int line, + const char *pathname, const char *contents) +{ +#if defined(_WIN32) && !defined(__CYGWIN__) + (void)pathname; /* UNUSED */ + (void)contents; /* UNUSED */ + assertion_count(file, line); + /* Windows sort-of has real symlinks, but they're only usable + * by privileged users and are crippled even then, so there's + * really not much point in bothering with this. */ + return (0); +#else + char buff[300]; + struct stat st; + ssize_t linklen; + int r; + + assertion_count(file, line); + r = lstat(pathname, &st); + if (r != 0) { + failure_start(file, line, + "Symlink should exist: %s", pathname); + failure_finish(NULL); + return (0); + } + if (!S_ISLNK(st.st_mode)) + return (0); + if (contents == NULL) + return (1); + linklen = readlink(pathname, buff, sizeof(buff)); + if (linklen < 0) { + failure_start(file, line, "Can't read symlink %s", pathname); + failure_finish(NULL); + return (0); + } + buff[linklen] = '\0'; + if (strcmp(buff, contents) != 0) + return (0); + return (1); +#endif +} + +/* Assert that path is a symlink that (optionally) contains contents. */ +int +assertion_is_symlink(const char *file, int line, + const char *path, const char *contents) +{ + if (is_symlink(file, line, path, contents)) + return (1); + if (contents) + failure_start(file, line, "File %s is not a symlink to %s", + path, contents); + else + failure_start(file, line, "File %s is not a symlink", path); + failure_finish(NULL); + return (0); +} + + +/* Create a directory and report any errors. */ +int +assertion_make_dir(const char *file, int line, const char *dirname, int mode) +{ + assertion_count(file, line); +#if defined(_WIN32) && !defined(__CYGWIN__) + (void)mode; /* UNUSED */ + if (0 == _mkdir(dirname)) + return (1); +#else + if (0 == mkdir(dirname, mode)) + return (1); +#endif + failure_start(file, line, "Could not create directory %s", dirname); + failure_finish(NULL); + return(0); +} + +/* Create a file with the specified contents and report any failures. */ +int +assertion_make_file(const char *file, int line, + const char *path, int mode, const char *contents) +{ +#if defined(_WIN32) && !defined(__CYGWIN__) + /* TODO: Rework this to set file mode as well. */ + FILE *f; + (void)mode; /* UNUSED */ + assertion_count(file, line); + f = fopen(path, "wb"); + if (f == NULL) { + failure_start(file, line, "Could not create file %s", path); + failure_finish(NULL); + return (0); + } + if (contents != NULL) { + if (strlen(contents) + != fwrite(contents, 1, strlen(contents), f)) { + fclose(f); + failure_start(file, line, + "Could not write file %s", path); + failure_finish(NULL); + return (0); + } + } + fclose(f); + return (1); +#else + int fd; + assertion_count(file, line); + fd = open(path, O_CREAT | O_WRONLY, mode >= 0 ? mode : 0644); + if (fd < 0) { + failure_start(file, line, "Could not create %s", path); + failure_finish(NULL); + return (0); + } + if (contents != NULL) { + if ((ssize_t)strlen(contents) + != write(fd, contents, strlen(contents))) { + close(fd); + failure_start(file, line, "Could not write to %s", path); + failure_finish(NULL); + return (0); + } + } + close(fd); + return (1); +#endif +} + +/* Create a hardlink and report any failures. */ +int +assertion_make_hardlink(const char *file, int line, + const char *newpath, const char *linkto) +{ + int succeeded; + + assertion_count(file, line); +#if defined(_WIN32) && !defined(__CYGWIN__) + succeeded = my_CreateHardLinkA(newpath, linkto); +#elif HAVE_LINK + succeeded = !link(linkto, newpath); +#else + succeeded = 0; +#endif + if (succeeded) + return (1); + failure_start(file, line, "Could not create hardlink"); + logprintf(" New link: %s\n", newpath); + logprintf(" Old name: %s\n", linkto); + failure_finish(NULL); + return(0); +} + +/* Create a symlink and report any failures. */ +int +assertion_make_symlink(const char *file, int line, + const char *newpath, const char *linkto) +{ +#if defined(_WIN32) && !defined(__CYGWIN__) + int targetIsDir = 0; /* TODO: Fix this */ + assertion_count(file, line); + if (my_CreateSymbolicLinkA(newpath, linkto, targetIsDir)) + return (1); +#elif HAVE_SYMLINK + assertion_count(file, line); + if (0 == symlink(linkto, newpath)) + return (1); +#endif + failure_start(file, line, "Could not create symlink"); + logprintf(" New link: %s\n", newpath); + logprintf(" Old name: %s\n", linkto); + failure_finish(NULL); + return(0); +} + +/* Set umask, report failures. */ +int +assertion_umask(const char *file, int line, int mask) +{ + assertion_count(file, line); + (void)file; /* UNUSED */ + (void)line; /* UNUSED */ + umask(mask); + return (1); +} + +/* + * + * UTILITIES for use by tests. + * + */ + +/* + * Check whether platform supports symlinks. This is intended + * for tests to use in deciding whether to bother testing symlink + * support; if the platform doesn't support symlinks, there's no point + * in checking whether the program being tested can create them. + * + * Note that the first time this test is called, we actually go out to + * disk to create and verify a symlink. This is necessary because + * symlink support is actually a property of a particular filesystem + * and can thus vary between directories on a single system. After + * the first call, this returns the cached result from memory, so it's + * safe to call it as often as you wish. + */ +int +canSymlink(void) +{ + /* Remember the test result */ + static int value = 0, tested = 0; + if (tested) + return (value); + + ++tested; + assertion_make_file(__FILE__, __LINE__, "canSymlink.0", 0644, "a"); + /* Note: Cygwin has its own symlink() emulation that does not + * use the Win32 CreateSymbolicLink() function. */ +#if defined(_WIN32) && !defined(__CYGWIN__) + value = my_CreateSymbolicLinkA("canSymlink.1", "canSymlink.0", 0) + && is_symlink(__FILE__, __LINE__, "canSymlink.1", "canSymlink.0"); +#elif HAVE_SYMLINK + value = (0 == symlink("canSymlink.0", "canSymlink.1")) + && is_symlink(__FILE__, __LINE__, "canSymlink.1","canSymlink.0"); +#endif + return (value); +} + +/* + * Can this platform run the gzip program? + */ +/* Platform-dependent options for hiding the output of a subcommand. */ +#if defined(_WIN32) && !defined(__CYGWIN__) +static const char *redirectArgs = ">NUL 2>NUL"; /* Win32 cmd.exe */ +#else +static const char *redirectArgs = ">/dev/null 2>/dev/null"; /* POSIX 'sh' */ +#endif +int +canGzip(void) +{ + static int tested = 0, value = 0; + if (!tested) { + tested = 1; + if (systemf("gzip -V %s", redirectArgs) == 0) + value = 1; + } + return (value); +} + +/* + * Can this platform run the gunzip program? + */ +int +canGunzip(void) +{ + static int tested = 0, value = 0; + if (!tested) { + tested = 1; + if (systemf("gunzip -V %s", redirectArgs) == 0) + value = 1; + } + return (value); +} + +/* + * Sleep as needed; useful for verifying disk timestamp changes by + * ensuring that the wall-clock time has actually changed before we + * go back to re-read something from disk. + */ +void +sleepUntilAfter(time_t t) +{ + while (t >= time(NULL)) +#if defined(_WIN32) && !defined(__CYGWIN__) + Sleep(500); +#else + sleep(1); +#endif +} + /* * Call standard system() call, but build up the command line using * sprintf() conventions. @@ -682,6 +1470,8 @@ systemf(const char *fmt, ...) va_start(ap, fmt); vsprintf(buff, fmt, ap); + if (verbosity > VERBOSITY_FULL) + logprintf("Cmd: %s\n", buff); r = system(buff); va_end(ap); return (r); @@ -700,176 +1490,48 @@ slurpfile(size_t * sizep, const char *fmt, ...) va_list ap; char *p; ssize_t bytes_read; - int fd; + FILE *f; int r; va_start(ap, fmt); vsprintf(filename, fmt, ap); va_end(ap); - fd = open(filename, O_RDONLY); - if (fd < 0) { + f = fopen(filename, "rb"); + if (f == NULL) { /* Note: No error; non-existent file is okay here. */ return (NULL); } - r = fstat(fd, &st); + r = fstat(fileno(f), &st); if (r != 0) { - fprintf(stderr, "Can't stat file %s\n", filename); - close(fd); + logprintf("Can't stat file %s\n", filename); + fclose(f); return (NULL); } - p = malloc(st.st_size + 1); + p = malloc((size_t)st.st_size + 1); if (p == NULL) { - fprintf(stderr, "Can't allocate %ld bytes of memory to read file %s\n", (long int)st.st_size, filename); - close(fd); + logprintf("Can't allocate %ld bytes of memory to read file %s\n", + (long int)st.st_size, filename); + fclose(f); return (NULL); } - bytes_read = read(fd, p, st.st_size); + bytes_read = fread(p, 1, (size_t)st.st_size, f); if (bytes_read < st.st_size) { - fprintf(stderr, "Can't read file %s\n", filename); - close(fd); + logprintf("Can't read file %s\n", filename); + fclose(f); free(p); return (NULL); } p[st.st_size] = '\0'; if (sizep != NULL) *sizep = (size_t)st.st_size; - close(fd); + fclose(f); return (p); } -/* - * "list.h" is automatically generated; it just has a lot of lines like: - * DEFINE_TEST(function_name) - * It's used above to declare all of the test functions. - * We reuse it here to define a list of all tests (functions and names). - */ -#undef DEFINE_TEST -#define DEFINE_TEST(n) { n, #n }, -struct { void (*func)(void); const char *name; } tests[] = { - #include "list.h" -}; - -/* - * This is well-intentioned, but sometimes the standard libraries - * leave open file descriptors and expect to be able to come back to - * them (e.g., for username lookups or logging). Closing these - * descriptors out from under those libraries creates havoc. - * - * Maybe there's some reasonably portable way to tell if a descriptor - * is open without using close()? - */ -#if 0 -static void -close_descriptors(int warn) -{ - int i; - int left_open = 0; - - for (i = 3; i < 100; ++i) { - if (close(i) == 0) - ++left_open; - } - if (warn && left_open > 0) { - fprintf(stderr, " ** %d descriptors unclosed\n", left_open); - failures += left_open; - report_failure(NULL); - } -} -#endif - -/* - * Each test is run in a private work dir. Those work dirs - * do have consistent and predictable names, in case a group - * of tests need to collaborate. However, there is no provision - * for requiring that tests run in a certain order. - */ -static int test_run(int i, const char *tmpdir) -{ - int failures_before = failures; - - if (!quiet_flag) { - printf("%d: %s\n", i, tests[i].name); - fflush(stdout); - } - - /* - * Always explicitly chdir() in case the last test moved us to - * a strange place. - */ - if (chdir(tmpdir)) { - fprintf(stderr, - "ERROR: Couldn't chdir to temp dir %s\n", - tmpdir); - exit(1); - } - /* Create a temp directory for this specific test. */ - if (mkdir(tests[i].name, 0755)) { - fprintf(stderr, - "ERROR: Couldn't create temp dir ``%s''\n", - tests[i].name); - exit(1); - } - /* Chdir() to that work directory. */ - if (chdir(tests[i].name)) { - fprintf(stderr, - "ERROR: Couldn't chdir to temp dir ``%s''\n", - tests[i].name); - exit(1); - } - /* Explicitly reset the locale before each test. */ - setlocale(LC_ALL, "C"); - /* Make sure there are no stray descriptors going into the test. */ - /* TODO: Find a better way to identify file descriptor leaks. */ - //close_descriptors(0); - /* Run the actual test. */ - (*tests[i].func)(); - /* Close stray descriptors, record as errors against this test. */ - //close_descriptors(1); - /* Summarize the results of this test. */ - summarize(); - /* If there were no failures, we can remove the work dir. */ - if (failures == failures_before) { - if (!keep_temp_files && chdir(tmpdir) == 0) { -#if !defined(_WIN32) || defined(__CYGWIN__) - systemf("rm -rf %s", tests[i].name); -#else - systemf("rmdir /S /Q %s", tests[i].name); -#endif - } - } - /* Return appropriate status. */ - return (failures == failures_before ? 0 : 1); -} - -static void usage(const char *program) -{ - static const int limit = sizeof(tests) / sizeof(tests[0]); - int i; - - printf("Usage: %s [options] ...\n", program); - printf("Default is to run all tests.\n"); - printf("Otherwise, specify the numbers of the tests you wish to run.\n"); - printf("Options:\n"); - printf(" -d Dump core after any failure, for debugging.\n"); - printf(" -k Keep all temp files.\n"); - printf(" Default: temp files for successful tests deleted.\n"); -#ifdef PROGRAM - printf(" -p Path to executable to be tested.\n"); - printf(" Default: path taken from " ENVBASE " environment variable.\n"); -#endif - printf(" -q Quiet.\n"); - printf(" -r Path to dir containing reference files.\n"); - printf(" Default: Current directory.\n"); - printf(" -v Verbose.\n"); - printf("Available tests:\n"); - for (i = 0; i < limit; i++) - printf(" %d: %s\n", i, tests[i].name); - exit(1); -} - +/* Read a uuencoded file from the reference directory, decode, and + * write the result into the current directory. */ #define UUDECODE(c) (((c) - 0x20) & 0x3f) - void extract_reference_file(const char *name) { @@ -893,7 +1555,7 @@ extract_reference_file(const char *name) } /* Now, decode the rest and write it. */ /* Not a lot of error checking here; the input better be right. */ - out = fopen(name, "w"); + out = fopen(name, "wb"); while (fgets(buff, sizeof(buff), in) != NULL) { char *p = buff; int bytes; @@ -927,48 +1589,211 @@ extract_reference_file(const char *name) fclose(in); } +/* + * + * TEST management + * + */ -/* Since gzip is by far the most popular external compression program - * available, we try to use it in the read_program and write_program - * tests. But if it's not available, then we can't use it. This - * function just tries to run gzip/gunzip to see if they're available. - * If not, some of the external compression program tests will be - * skipped. */ -const char * -external_gzip_program(int un) +/* + * "list.h" is simply created by "grep DEFINE_TEST test_*.c"; it has + * a line like + * DEFINE_TEST(test_function) + * for each test. + */ + +/* Use "list.h" to declare all of the test functions. */ +#undef DEFINE_TEST +#define DEFINE_TEST(name) void name(void); +#include "list.h" + +/* Use "list.h" to create a list of all tests (functions and names). */ +#undef DEFINE_TEST +#define DEFINE_TEST(n) { n, #n, 0 }, +struct { void (*func)(void); const char *name; int failures; } tests[] = { + #include "list.h" +}; + +/* + * Summarize repeated failures in the just-completed test. + */ +static void +test_summarize(const char *filename, int failed) { - static int tested = 0; - static const char *compress_prog = NULL; - static const char *decompress_prog = NULL; - /* Args vary depending on the command interpreter we're using. */ -#if defined(_WIN32) && !defined(__CYGWIN__) - static const char *args = "-V >NUL 2>NUL"; /* Win32 cmd.exe */ -#else - static const char *args = "-V >/dev/null 2>/dev/null"; /* POSIX 'sh' */ -#endif + unsigned int i; - if (!tested) { - if (systemf("gunzip %s", args) == 0) - decompress_prog = "gunzip"; - if (systemf("gzip %s", args) == 0) - compress_prog = "gzip"; - tested = 1; + switch (verbosity) { + case VERBOSITY_SUMMARY_ONLY: + printf(failed ? "E" : "."); + fflush(stdout); + break; + case VERBOSITY_PASSFAIL: + printf(failed ? "FAIL\n" : "ok\n"); + break; } - return (un ? decompress_prog : compress_prog); + + log_console = (verbosity == VERBOSITY_LIGHT_REPORT); + + for (i = 0; i < sizeof(failed_lines)/sizeof(failed_lines[0]); i++) { + if (failed_lines[i].count > 1 && !failed_lines[i].skip) + logprintf("%s:%d: Summary: Failed %d times\n", + filename, i, failed_lines[i].count); + } + /* Clear the failure history for the next file. */ + memset(failed_lines, 0, sizeof(failed_lines)); +} + +/* + * Actually run a single test, with appropriate setup and cleanup. + */ +static int +test_run(int i, const char *tmpdir) +{ + char logfilename[64]; + int failures_before = failures; + int oldumask; + + switch (verbosity) { + case VERBOSITY_SUMMARY_ONLY: /* No per-test reports at all */ + break; + case VERBOSITY_PASSFAIL: /* rest of line will include ok/FAIL marker */ + printf("%3d: %-50s", i, tests[i].name); + fflush(stdout); + break; + default: /* Title of test, details will follow */ + printf("%3d: %s\n", i, tests[i].name); + } + + /* Chdir to the top-level work directory. */ + if (!assertChdir(tmpdir)) { + fprintf(stderr, + "ERROR: Can't chdir to top work dir %s\n", tmpdir); + exit(1); + } + /* Create a log file for this test. */ + sprintf(logfilename, "%s.log", tests[i].name); + logfile = fopen(logfilename, "w"); + fprintf(logfile, "%s\n\n", tests[i].name); + /* Chdir() to a work dir for this specific test. */ + if (!assertMakeDir(tests[i].name, 0755) + || !assertChdir(tests[i].name)) { + fprintf(stderr, + "ERROR: Can't chdir to work dir %s/%s\n", + tmpdir, tests[i].name); + exit(1); + } + /* Explicitly reset the locale before each test. */ + setlocale(LC_ALL, "C"); + /* Record the umask before we run the test. */ + umask(oldumask = umask(0)); + /* + * Run the actual test. + */ + (*tests[i].func)(); + /* + * Clean up and report afterwards. + */ + /* Restore umask */ + umask(oldumask); + /* Reset locale. */ + setlocale(LC_ALL, "C"); + /* Reset directory. */ + if (!assertChdir(tmpdir)) { + fprintf(stderr, "ERROR: Couldn't chdir to temp dir %s\n", + tmpdir); + exit(1); + } + /* Report per-test summaries. */ + tests[i].failures = failures - failures_before; + test_summarize(test_filename, tests[i].failures); + /* Close the per-test log file. */ + fclose(logfile); + logfile = NULL; + /* If there were no failures, we can remove the work dir and logfile. */ + if (tests[i].failures == 0) { + if (!keep_temp_files && assertChdir(tmpdir)) { +#if defined(_WIN32) && !defined(__CYGWIN__) + /* Make sure not to leave empty directories. + * Sometimes a processing of closing files used by tests + * is not done, then rmdir will be failed and it will + * leave a empty test directory. So we should wait a few + * seconds and retry rmdir. */ + int r, t; + for (t = 0; t < 10; t++) { + if (t > 0) + Sleep(1000); + r = systemf("rmdir /S /Q %s", tests[i].name); + if (r == 0) + break; + } + systemf("del %s", logfilename); +#else + systemf("rm -rf %s", tests[i].name); + systemf("rm %s", logfilename); +#endif + } + } + /* Return appropriate status. */ + return (tests[i].failures); +} + +/* + * + * + * MAIN and support routines. + * + * + */ + +static void +usage(const char *program) +{ + static const int limit = sizeof(tests) / sizeof(tests[0]); + int i; + + printf("Usage: %s [options] ...\n", program); + printf("Default is to run all tests.\n"); + printf("Otherwise, specify the numbers of the tests you wish to run.\n"); + printf("Options:\n"); + printf(" -d Dump core after any failure, for debugging.\n"); + printf(" -k Keep all temp files.\n"); + printf(" Default: temp files for successful tests deleted.\n"); +#ifdef PROGRAM + printf(" -p Path to executable to be tested.\n"); + printf(" Default: path taken from " ENVBASE " environment variable.\n"); +#endif + printf(" -q Quiet.\n"); + printf(" -r Path to dir containing reference files.\n"); + printf(" Default: Current directory.\n"); + printf(" -v Verbose.\n"); + printf("Available tests:\n"); + for (i = 0; i < limit; i++) + printf(" %d: %s\n", i, tests[i].name); + exit(1); } static char * -get_refdir(void) +get_refdir(const char *d) { char tried[512] = { '\0' }; char buff[128]; char *pwd, *p; + /* If a dir was specified, try that */ + if (d != NULL) { + pwd = NULL; + snprintf(buff, sizeof(buff), "%s", d); + p = slurpfile(NULL, "%s/%s", buff, KNOWNREF); + if (p != NULL) goto success; + strncat(tried, buff, sizeof(tried) - strlen(tried) - 1); + strncat(tried, "\n", sizeof(tried) - strlen(tried) - 1); + goto failure; + } + /* Get the current dir. */ pwd = getcwd(NULL, 0); while (pwd[strlen(pwd) - 1] == '\n') pwd[strlen(pwd) - 1] = '\0'; - printf("PWD: %s\n", pwd); /* Look for a known file. */ snprintf(buff, sizeof(buff), "%s", pwd); @@ -983,7 +1808,11 @@ get_refdir(void) strncat(tried, buff, sizeof(tried) - strlen(tried) - 1); strncat(tried, "\n", sizeof(tried) - strlen(tried) - 1); +#if defined(LIBRARY) snprintf(buff, sizeof(buff), "%s/%s/test", pwd, LIBRARY); +#else + snprintf(buff, sizeof(buff), "%s/%s/test", pwd, PROGRAM); +#endif p = slurpfile(NULL, "%s/%s", buff, KNOWNREF); if (p != NULL) goto success; strncat(tried, buff, sizeof(tried) - strlen(tried) - 1); @@ -1003,11 +1832,12 @@ get_refdir(void) strncat(tried, "\n", sizeof(tried) - strlen(tried) - 1); } +failure: + printf("Unable to locate known reference file %s\n", KNOWNREF); + printf(" Checked following directories:\n%s\n", tried); #if defined(_WIN32) && !defined(__CYGWIN__) && defined(_DEBUG) DebugBreak(); #endif - printf("Unable to locate known reference file %s\n", KNOWNREF); - printf(" Checked following directories:\n%s\n", tried); exit(1); success: @@ -1016,31 +1846,42 @@ success: return strdup(buff); } -int main(int argc, char **argv) +int +main(int argc, char **argv) { static const int limit = sizeof(tests) / sizeof(tests[0]); int i, tests_run = 0, tests_failed = 0, option; time_t now; char *refdir_alloc = NULL; - const char *progname = LIBRARY "_test"; + const char *progname; const char *tmp, *option_arg, *p; char tmpdir[256]; char tmpdir_timestamp[256]; (void)argc; /* UNUSED */ -#if defined(_WIN32) && !defined(__CYGWIN__) +#if defined(HAVE__CrtSetReportMode) /* To stop to run the default invalid parameter handler. */ _set_invalid_parameter_handler(invalid_parameter_handler); - /* for open() to a binary mode. */ - _set_fmode(_O_BINARY); /* Disable annoying assertion message box. */ _CrtSetReportMode(_CRT_ASSERT, 0); #endif + /* + * Name of this program, used to build root of our temp directory + * tree. + */ + progname = p = argv[0]; + while (*p != '\0') { + /* Support \ or / dir separators for Windows compat. */ + if (*p == '/' || *p == '\\') + progname = p + 1; + ++p; + } + #ifdef PROGRAM /* Get the target program from environment, if available. */ - testprog = getenv(ENVBASE); + testprogfile = getenv(ENVBASE); #endif if (getenv("TMPDIR") != NULL) @@ -1098,19 +1939,19 @@ int main(int argc, char **argv) break; case 'p': #ifdef PROGRAM - testprog = option_arg; + testprogfile = option_arg; #else usage(progname); #endif break; case 'q': - quiet_flag++; + verbosity--; break; case 'r': refdir = option_arg; break; case 'v': - verbose = 1; + verbosity++; break; default: usage(progname); @@ -1122,8 +1963,26 @@ int main(int argc, char **argv) * Sanity-check that our options make sense. */ #ifdef PROGRAM - if (testprog == NULL) + if (testprogfile == NULL) usage(progname); + { + char *testprg; +#if defined(_WIN32) && !defined(__CYGWIN__) + /* Command.com sometimes rejects '/' separators. */ + testprg = strdup(testprogfile); + for (i = 0; testprg[i] != '\0'; i++) { + if (testprg[i] == '/') + testprg[i] = '\\'; + } + testprogfile = testprg; +#endif + /* Quote the name that gets put into shell command lines. */ + testprg = malloc(strlen(testprogfile) + 3); + strcpy(testprg, "\""); + strcat(testprg, testprogfile); + strcat(testprg, "\""); + testprog = testprg; + } #endif /* @@ -1132,19 +1991,20 @@ int main(int argc, char **argv) * to make it easier to track the results of multiple tests. */ now = time(NULL); - for (i = 0; i < 1000; i++) { + for (i = 0; ; i++) { strftime(tmpdir_timestamp, sizeof(tmpdir_timestamp), "%Y-%m-%dT%H.%M.%S", localtime(&now)); sprintf(tmpdir, "%s/%s.%s-%03d", tmp, progname, tmpdir_timestamp, i); - if (mkdir(tmpdir,0755) == 0) + if (assertMakeDir(tmpdir,0755)) break; - if (errno == EEXIST) - continue; - fprintf(stderr, "ERROR: Unable to create temp directory %s\n", - tmpdir); - exit(1); + if (i >= 999) { + fprintf(stderr, + "ERROR: Unable to create temp directory %s\n", + tmpdir); + exit(1); + } } /* @@ -1152,14 +2012,16 @@ int main(int argc, char **argv) * reference files, try to find the reference files in * the "usual places." */ - if (refdir == NULL) - refdir = refdir_alloc = get_refdir(); + refdir = refdir_alloc = get_refdir(refdir); /* * Banner with basic information. */ - if (!quiet_flag) { - printf("Running tests in: %s\n", tmpdir); + printf("\n"); + printf("If tests fail or crash, details will be in:\n"); + printf(" %s\n", tmpdir); + printf("\n"); + if (verbosity > VERBOSITY_SUMMARY_ONLY) { printf("Reference files will be read from: %s\n", refdir); #ifdef PROGRAM printf("Running tests on: %s\n", testprog); @@ -1167,6 +2029,9 @@ int main(int argc, char **argv) printf("Exercising: "); fflush(stdout); printf("%s\n", EXTRA_VERSION); + } else { + printf("Running "); + fflush(stdout); } /* @@ -1212,20 +2077,38 @@ int main(int argc, char **argv) /* * Report summary statistics. */ - if (!quiet_flag) { + if (verbosity > VERBOSITY_SUMMARY_ONLY) { printf("\n"); - printf("%d of %d tests reported failures\n", - tests_failed, tests_run); - printf(" Total of %d assertions checked.\n", assertions); - printf(" Total of %d assertions failed.\n", failures); - printf(" Total of %d reported skips.\n", skips); + printf("Totals:\n"); + printf(" Tests run: %8d\n", tests_run); + printf(" Tests failed: %8d\n", tests_failed); + printf(" Assertions checked:%8d\n", assertions); + printf(" Assertions failed: %8d\n", failures); + printf(" Skips reported: %8d\n", skips); + } + if (failures) { + printf("\n"); + printf("Failing tests:\n"); + for (i = 0; i < limit; ++i) { + if (tests[i].failures) + printf(" %d: %s (%d failures)\n", i, + tests[i].name, tests[i].failures); + } + printf("\n"); + printf("Details for failing tests: %s\n", tmpdir); + printf("\n"); + } else { + if (verbosity == VERBOSITY_SUMMARY_ONLY) + printf("\n"); + printf("%d tests passed, no failures\n", tests_run); } free(refdir_alloc); /* If the final tmpdir is empty, we can remove it. */ /* This should be the usual case when all tests succeed. */ + assertChdir(".."); rmdir(tmpdir); - return (tests_failed); + return (tests_failed ? 1 : 0); } diff --git a/lib/libarchive/test/test.h b/lib/libarchive/test/test.h index 94c66e8d3bc..6ea7b571f3f 100644 --- a/lib/libarchive/test/test.h +++ b/lib/libarchive/test/test.h @@ -45,43 +45,85 @@ #error Oops: No config.h and no pre-built configuration in test.h. #endif -#if !defined(_WIN32) || defined(__CYGWIN__) -#include -#else -#include -#endif -#include -#include -#include -#include -#include +#include /* Windows requires this before sys/stat.h */ #include -#if !defined(_WIN32) || defined(__CYGWIN__) -#include -#endif -#include #ifdef USE_DMALLOC #include #endif +#if HAVE_DIRENT_H +#include +#endif +#ifdef HAVE_DIRECT_H +#include +#define dirent direct +#endif +#include +#include +#ifdef HAVE_IO_H +#include +#endif +#ifdef HAVE_STDINT_H +#include +#endif +#include +#include +#include +#include +#ifdef HAVE_UNISTD_H +#include +#endif +#include +#ifdef HAVE_WINDOWS_H +#include +#endif -/* No non-FreeBSD platform will have __FBSDID, so just define it here. */ -#ifdef __FreeBSD__ -#include /* For __FBSDID */ -#else -/* Some non-FreeBSD platforms such as newlib-derived ones like - * cygwin, have __FBSDID, so this definition must be guarded. +/* + * System-specific tweaks. We really want to minimize these + * as much as possible, since they make it harder to understand + * the mainline code. */ -#ifndef __FBSDID -#define __FBSDID(a) /* null */ + +/* Windows (including Visual Studio and MinGW but not Cygwin) */ +#if defined(_WIN32) && !defined(__CYGWIN__) +#if !defined(__BORLANDC__) +#define strdup _strdup #endif +#define LOCALE_UTF8 NULL +#else +#define LOCALE_UTF8 "de_DE.UTF-8" #endif -#if defined(_WIN32) && !defined(__CYGWIN__) +/* Visual Studio */ +#ifdef _MSC_VER #define snprintf sprintf_s -#define LOCALE_DE "deu" -#else -#define LOCALE_DE "de_DE.UTF-8" +#endif + +#if defined(__BORLANDC__) +#pragma warn -8068 /* Constant out of range in comparison. */ +#endif + +/* Cygwin */ +#if defined(__CYGWIN__) +/* Cygwin-1.7.x is lazy about populating nlinks, so don't + * expect it to be accurate. */ +# define NLINKS_INACCURATE_FOR_DIRS +#endif + +/* Haiku OS */ +#if defined(__HAIKU__) +/* Haiku has typedefs in stdint.h (needed for int64_t) */ +#include +#endif + +/* Get a real definition for __FBSDID if we can */ +#if HAVE_SYS_CDEFS_H +#include +#endif + +/* If not, define it so as to avoid dangling semicolons. */ +#ifndef __FBSDID +#define __FBSDID(a) struct _undefined_hack #endif #ifndef O_BINARY @@ -95,38 +137,81 @@ #define DEFINE_TEST(name) void name(void); void name(void) /* An implementation of the standard assert() macro */ -#define assert(e) test_assert(__FILE__, __LINE__, (e), #e, NULL) - +#define assert(e) assertion_assert(__FILE__, __LINE__, (e), #e, NULL) +/* chdir() and error if it fails */ +#define assertChdir(path) \ + assertion_chdir(__FILE__, __LINE__, path) /* Assert two integers are the same. Reports value of each one if not. */ -#define assertEqualInt(v1,v2) \ - test_assert_equal_int(__FILE__, __LINE__, (v1), #v1, (v2), #v2, NULL) - +#define assertEqualInt(v1,v2) \ + assertion_equal_int(__FILE__, __LINE__, (v1), #v1, (v2), #v2, NULL) /* Assert two strings are the same. Reports value of each one if not. */ #define assertEqualString(v1,v2) \ - test_assert_equal_string(__FILE__, __LINE__, (v1), #v1, (v2), #v2, NULL) + assertion_equal_string(__FILE__, __LINE__, (v1), #v1, (v2), #v2, NULL) /* As above, but v1 and v2 are wchar_t * */ #define assertEqualWString(v1,v2) \ - test_assert_equal_wstring(__FILE__, __LINE__, (v1), #v1, (v2), #v2, NULL) + assertion_equal_wstring(__FILE__, __LINE__, (v1), #v1, (v2), #v2, NULL) /* As above, but raw blocks of bytes. */ #define assertEqualMem(v1, v2, l) \ - test_assert_equal_mem(__FILE__, __LINE__, (v1), #v1, (v2), #v2, (l), #l, NULL) + assertion_equal_mem(__FILE__, __LINE__, (v1), #v1, (v2), #v2, (l), #l, NULL) /* Assert two files are the same; allow printf-style expansion of second name. * See below for comments about variable arguments here... */ #define assertEqualFile \ - test_setup(__FILE__, __LINE__);test_assert_equal_file + assertion_setup(__FILE__, __LINE__);assertion_equal_file /* Assert that a file is empty; supports printf-style arguments. */ #define assertEmptyFile \ - test_setup(__FILE__, __LINE__);test_assert_empty_file + assertion_setup(__FILE__, __LINE__);assertion_empty_file +/* Assert that a file is not empty; supports printf-style arguments. */ +#define assertNonEmptyFile \ + assertion_setup(__FILE__, __LINE__);assertion_non_empty_file +#define assertFileAtime(pathname, sec, nsec) \ + assertion_file_atime(__FILE__, __LINE__, pathname, sec, nsec) +#define assertFileAtimeRecent(pathname) \ + assertion_file_atime_recent(__FILE__, __LINE__, pathname) +#define assertFileBirthtime(pathname, sec, nsec) \ + assertion_file_birthtime(__FILE__, __LINE__, pathname, sec, nsec) +#define assertFileBirthtimeRecent(pathname) \ + assertion_file_birthtime_recent(__FILE__, __LINE__, pathname) /* Assert that a file exists; supports printf-style arguments. */ #define assertFileExists \ - test_setup(__FILE__, __LINE__);test_assert_file_exists + assertion_setup(__FILE__, __LINE__);assertion_file_exists /* Assert that a file exists; supports printf-style arguments. */ #define assertFileNotExists \ - test_setup(__FILE__, __LINE__);test_assert_file_not_exists + assertion_setup(__FILE__, __LINE__);assertion_file_not_exists /* Assert that file contents match a string; supports printf-style arguments. */ #define assertFileContents \ - test_setup(__FILE__, __LINE__);test_assert_file_contents + assertion_setup(__FILE__, __LINE__);assertion_file_contents +#define assertFileMtime(pathname, sec, nsec) \ + assertion_file_mtime(__FILE__, __LINE__, pathname, sec, nsec) +#define assertFileMtimeRecent(pathname) \ + assertion_file_mtime_recent(__FILE__, __LINE__, pathname) +#define assertFileNLinks(pathname, nlinks) \ + assertion_file_nlinks(__FILE__, __LINE__, pathname, nlinks) +#define assertFileSize(pathname, size) \ + assertion_file_size(__FILE__, __LINE__, pathname, size) +#define assertTextFileContents \ + assertion_setup(__FILE__, __LINE__);assertion_text_file_contents +#define assertIsDir(pathname, mode) \ + assertion_is_dir(__FILE__, __LINE__, pathname, mode) +#define assertIsHardlink(path1, path2) \ + assertion_is_hardlink(__FILE__, __LINE__, path1, path2) +#define assertIsNotHardlink(path1, path2) \ + assertion_is_not_hardlink(__FILE__, __LINE__, path1, path2) +#define assertIsReg(pathname, mode) \ + assertion_is_reg(__FILE__, __LINE__, pathname, mode) +#define assertIsSymlink(pathname, contents) \ + assertion_is_symlink(__FILE__, __LINE__, pathname, contents) +/* Create a directory, report error if it fails. */ +#define assertMakeDir(dirname, mode) \ + assertion_make_dir(__FILE__, __LINE__, dirname, mode) +#define assertMakeFile(path, mode, contents) \ + assertion_make_file(__FILE__, __LINE__, path, mode, contents) +#define assertMakeHardlink(newfile, oldfile) \ + assertion_make_hardlink(__FILE__, __LINE__, newfile, oldfile) +#define assertMakeSymlink(newfile, linkto) \ + assertion_make_symlink(__FILE__, __LINE__, newfile, linkto) +#define assertUmask(mask) \ + assertion_umask(__FILE__, __LINE__, mask) /* * This would be simple with C99 variadic macros, but I don't want to @@ -135,26 +220,60 @@ * but effective. */ #define skipping \ - test_setup(__FILE__, __LINE__);test_skipping + assertion_setup(__FILE__, __LINE__);test_skipping /* Function declarations. These are defined in test_utility.c. */ void failure(const char *fmt, ...); -void test_setup(const char *, int); +int assertion_assert(const char *, int, int, const char *, void *); +int assertion_chdir(const char *, int, const char *); +int assertion_empty_file(const char *, ...); +int assertion_equal_file(const char *, const char *, ...); +int assertion_equal_int(const char *, int, long long, const char *, long long, const char *, void *); +int assertion_equal_mem(const char *, int, const void *, const char *, const void *, const char *, size_t, const char *, void *); +int assertion_equal_string(const char *, int, const char *v1, const char *, const char *v2, const char *, void *); +int assertion_equal_wstring(const char *, int, const wchar_t *v1, const char *, const wchar_t *v2, const char *, void *); +int assertion_file_atime(const char *, int, const char *, long, long); +int assertion_file_atime_recent(const char *, int, const char *); +int assertion_file_birthtime(const char *, int, const char *, long, long); +int assertion_file_birthtime_recent(const char *, int, const char *); +int assertion_file_contents(const void *, int, const char *, ...); +int assertion_file_exists(const char *, ...); +int assertion_file_mtime(const char *, int, const char *, long, long); +int assertion_file_mtime_recent(const char *, int, const char *); +int assertion_file_nlinks(const char *, int, const char *, int); +int assertion_file_not_exists(const char *, ...); +int assertion_file_size(const char *, int, const char *, long); +int assertion_is_dir(const char *, int, const char *, int); +int assertion_is_hardlink(const char *, int, const char *, const char *); +int assertion_is_not_hardlink(const char *, int, const char *, const char *); +int assertion_is_reg(const char *, int, const char *, int); +int assertion_is_symlink(const char *, int, const char *, const char *); +int assertion_make_dir(const char *, int, const char *, int); +int assertion_make_file(const char *, int, const char *, int, const char *); +int assertion_make_hardlink(const char *, int, const char *newpath, const char *); +int assertion_make_symlink(const char *, int, const char *newpath, const char *); +int assertion_non_empty_file(const char *, ...); +int assertion_text_file_contents(const char *buff, const char *f); +int assertion_umask(const char *, int, int); +void assertion_setup(const char *, int); + void test_skipping(const char *fmt, ...); -int test_assert(const char *, int, int, const char *, void *); -int test_assert_empty_file(const char *, ...); -int test_assert_equal_file(const char *, const char *, ...); -int test_assert_equal_int(const char *, int, int, const char *, int, const char *, void *); -int test_assert_equal_string(const char *, int, const char *v1, const char *, const char *v2, const char *, void *); -int test_assert_equal_wstring(const char *, int, const wchar_t *v1, const char *, const wchar_t *v2, const char *, void *); -int test_assert_equal_mem(const char *, int, const void *, const char *, const void *, const char *, size_t, const char *, void *); -int test_assert_file_contents(const void *, int, const char *, ...); -int test_assert_file_exists(const char *, ...); -int test_assert_file_not_exists(const char *, ...); /* Like sprintf, then system() */ int systemf(const char * fmt, ...); +/* Delay until time() returns a value after this. */ +void sleepUntilAfter(time_t); + +/* Return true if this platform can create symlinks. */ +int canSymlink(void); + +/* Return true if this platform can run the "gzip" program. */ +int canGzip(void); + +/* Return true if this platform can run the "gunzip" program. */ +int canGunzip(void); + /* Suck file into string allocated via malloc(). Call free() when done. */ /* Supports printf-style args: slurpfile(NULL, "%s/myfile", refdir); */ char *slurpfile(size_t *, const char *fmt, ...); @@ -162,9 +281,6 @@ char *slurpfile(size_t *, const char *fmt, ...); /* Extracts named reference file to the current directory. */ void extract_reference_file(const char *); -/* Get external gzip program name */ -const char *external_gzip_program(int un); - /* * Special interfaces for libarchive test harness. */ @@ -177,20 +293,9 @@ int read_open_memory(struct archive *, void *, size_t, size_t); /* "2" version exercises a slightly different set of libarchive APIs. */ int read_open_memory2(struct archive *, void *, size_t, size_t); -/* - * ARCHIVE_VERSION_STAMP first appeared in 1.9 and libarchive 2.2.4. - * We can approximate it for earlier versions, though. - * This is used to disable tests of features not present in the current - * version. - */ -#ifndef ARCHIVE_VERSION_STAMP -#define ARCHIVE_VERSION_STAMP \ - (ARCHIVE_API_VERSION * 1000000 + ARCHIVE_API_FEATURE * 1000) -#endif - /* Versions of above that accept an archive argument for additional info. */ -#define assertA(e) test_assert(__FILE__, __LINE__, (e), #e, (a)) +#define assertA(e) assertion_assert(__FILE__, __LINE__, (e), #e, (a)) #define assertEqualIntA(a,v1,v2) \ - test_assert_equal_int(__FILE__, __LINE__, (v1), #v1, (v2), #v2, (a)) + assertion_equal_int(__FILE__, __LINE__, (v1), #v1, (v2), #v2, (a)) #define assertEqualStringA(a,v1,v2) \ - test_assert_equal_string(__FILE__, __LINE__, (v1), #v1, (v2), #v2, (a)) + assertion_equal_string(__FILE__, __LINE__, (v1), #v1, (v2), #v2, (a)) diff --git a/lib/libarchive/test/test_acl_pax.c b/lib/libarchive/test/test_acl_pax.c index 5898a6626d7..f6b065d2a68 100644 --- a/lib/libarchive/test/test_acl_pax.c +++ b/lib/libarchive/test/test_acl_pax.c @@ -406,7 +406,7 @@ DEFINE_TEST(test_acl_pax) struct archive *a; struct archive_entry *ae; size_t used; - int fd; + FILE *f; /* Write an archive to memory. */ assert(NULL != (a = archive_write_new())); @@ -453,14 +453,14 @@ DEFINE_TEST(test_acl_pax) #endif /* Write out the data we generated to a file for manual inspection. */ - assert(-1 < (fd = open("testout", O_WRONLY | O_CREAT | O_TRUNC, 0775))); - assert(used == (size_t)write(fd, buff, (unsigned int)used)); - close(fd); + assert(NULL != (f = fopen("testout", "wb"))); + assertEqualInt(used, (size_t)fwrite(buff, 1, (unsigned int)used, f)); + fclose(f); /* Write out the reference data to a file for manual inspection. */ - assert(-1 < (fd = open("reference", O_WRONLY | O_CREAT | O_TRUNC, 0775))); - assert(sizeof(reference) == write(fd, reference, sizeof(reference))); - close(fd); + assert(NULL != (f = fopen("reference", "wb"))); + assert(sizeof(reference) == fwrite(reference, 1, sizeof(reference), f)); + fclose(f); /* Assert that the generated data matches the built-in reference data.*/ failure("Generated pax archive does not match reference; check 'testout' and 'reference' files."); diff --git a/lib/libarchive/test/test_compat_bzip2.c b/lib/libarchive/test/test_compat_bzip2.c index cbd113b0153..96eacad79cc 100644 --- a/lib/libarchive/test/test_compat_bzip2.c +++ b/lib/libarchive/test/test_compat_bzip2.c @@ -47,7 +47,10 @@ compat_bzip2(const char *name) int i; assert((a = archive_read_new()) != NULL); - assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a)); + if (ARCHIVE_OK != archive_read_support_compression_bzip2(a)) { + skipping("Unsupported bzip2"); + return; + } assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); extract_reference_file(name); assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 2)); diff --git a/lib/libarchive/test/test_compat_cpio.c b/lib/libarchive/test/test_compat_cpio.c new file mode 100644 index 00000000000..b0ead3901e1 --- /dev/null +++ b/lib/libarchive/test/test_compat_cpio.c @@ -0,0 +1,106 @@ +/*- + * Copyright (c) 2003-2009 Tim Kientzle + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "test.h" +__FBSDID("$FreeBSD$"); + +/* + * Verify our ability to read various sample files. + * It should be easy to add any new sample files sent in by users + * to this collection of tests. + */ + +/* Copy this function for each test file and adjust it accordingly. */ + +/* + * test_compat_cpio_1.cpio checks heuristics for avoiding false + * hardlinks. foo1 and foo2 are files that have nlinks=1 and so + * should not be marked as hardlinks even though they have identical + * ino values. bar1 and bar2 have nlinks=2 so should be marked + * as hardlinks. + */ +static void +test_compat_cpio_1(void) +{ + char name[] = "test_compat_cpio_1.cpio"; + struct archive_entry *ae; + struct archive *a; + + assert((a = archive_read_new()) != NULL); + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a)); + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); + extract_reference_file(name); + assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 17)); + + /* Read first entry. */ + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("foo1", archive_entry_pathname(ae)); + assertEqualString(NULL, archive_entry_hardlink(ae)); + assertEqualInt(1260250228, archive_entry_mtime(ae)); + assertEqualInt(1000, archive_entry_uid(ae)); + assertEqualInt(1000, archive_entry_gid(ae)); + assertEqualInt(0100644, archive_entry_mode(ae)); + + /* Read second entry. */ + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("foo2", archive_entry_pathname(ae)); + assertEqualString(NULL, archive_entry_hardlink(ae)); + assertEqualInt(1260250228, archive_entry_mtime(ae)); + assertEqualInt(1000, archive_entry_uid(ae)); + assertEqualInt(1000, archive_entry_gid(ae)); + assertEqualInt(0100644, archive_entry_mode(ae)); + + /* Read third entry. */ + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("bar1", archive_entry_pathname(ae)); + assertEqualString(NULL, archive_entry_hardlink(ae)); + assertEqualInt(1260250228, archive_entry_mtime(ae)); + assertEqualInt(1000, archive_entry_uid(ae)); + assertEqualInt(1000, archive_entry_gid(ae)); + assertEqualInt(0100644, archive_entry_mode(ae)); + + /* Read fourth entry. */ + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualString("bar2", archive_entry_pathname(ae)); + assertEqualString("bar1", archive_entry_hardlink(ae)); + assertEqualInt(1260250228, archive_entry_mtime(ae)); + assertEqualInt(1000, archive_entry_uid(ae)); + assertEqualInt(1000, archive_entry_gid(ae)); + assertEqualInt(0100644, archive_entry_mode(ae)); + + /* Verify that the format detection worked. */ + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_NONE); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_CPIO_SVR4_NOCRC); + + assertEqualInt(ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); +} + + +DEFINE_TEST(test_compat_cpio) +{ + test_compat_cpio_1(); +} + + diff --git a/lib/libarchive/test/test_compat_cpio_1.cpio.uu b/lib/libarchive/test/test_compat_cpio_1.cpio.uu new file mode 100644 index 00000000000..3f0ee524c9f --- /dev/null +++ b/lib/libarchive/test/test_compat_cpio_1.cpio.uu @@ -0,0 +1,19 @@ +$FreeBSD$ + +begin 644 test_compat_cpio_1.cpio +M,# $dir/f1 +echo "f2" > $dir/f2 +echo "f3" > $dir/f3 +mkdir $dir/d1 +echo "f1" > $dir/d1/f1 +echo "f2" > $dir/d1/f2 +echo "f3" > $dir/d1/f3 +(cd $dir; tar cf ../$name.tar f1 f2 f3 d1/f1 d1/f2 d1/f3) +rm -r $dir +} +mktarfile +$zcmd $name.tar +mv $name.tar.$zsuffix $name.$ztar_suffix +echo "This is unrelated junk data at the end of the file" >> $name.$ztar_suffix +uuencode $name.$ztar_suffix $name.$ztar_suffix > $name.$ztar_suffix.uu +rm -f $name.$ztar_suffix +# +# Use option -e +# +name=test_compat_lzma_2 +dir="$name`date +%Y%m%d%H%M%S`.$USER" +mktarfile +$zcmd -e $name.tar +mv $name.tar.$zsuffix $name.$ztar_suffix +uuencode $name.$ztar_suffix $name.$ztar_suffix > $name.$ztar_suffix.uu +rm -f $name.$ztar_suffix +# +# Use lzma command of LZMA SDK with option -d12. +# +name=test_compat_lzma_3 +zcmd=lzmasdk # Change this path to use lzma of LZMA SDK. +dir="$name`date +%Y%m%d%H%M%S`.$USER" +mktarfile +$zcmd e -d12 $name.tar $name.$ztar_suffix +rm -f $name.tar +uuencode $name.$ztar_suffix $name.$ztar_suffix > $name.$ztar_suffix.uu +rm -f $name.$ztar_suffix + +exit 0 +*/ + +/* + * Verify our ability to read sample files compatibly with unlzma. + * + * In particular: + * * unlzma will read multiple lzma streams, concatenating the output + * * unlzma will read lzma streams which is made by lzma with option -e, + * concatenating the output + * + * Verify our ability to read sample files compatibly with lzma of + * LZMA SDK. + * * lzma will read lzma streams which is made by lzma with option -d12, + * concatenating the output + */ + +/* + * All of the sample files have the same contents; they're just + * compressed in different ways. + */ +static void +compat_lzma(const char *name) +{ + const char *n[7] = { "f1", "f2", "f3", "d1/f1", "d1/f2", "d1/f3", NULL }; + struct archive_entry *ae; + struct archive *a; + int i, r; + + assert((a = archive_read_new()) != NULL); + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a)); + r = archive_read_support_compression_lzma(a); + if (r == ARCHIVE_WARN) { + skipping("lzma reading not fully supported on this platform"); + assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); + return; + } + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); + extract_reference_file(name); + assertEqualIntA(a, ARCHIVE_OK, archive_read_open_filename(a, name, 2)); + + /* Read entries, match up names with list above. */ + for (i = 0; i < 6; ++i) { + failure("Could not read file %d (%s) from %s", i, n[i], name); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_next_header(a, &ae)); + assertEqualString(n[i], archive_entry_pathname(ae)); + } + + /* Verify the end-of-archive. */ + assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + + /* Verify that the format detection worked. */ + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_LZMA); + assertEqualString(archive_compression_name(a), "lzma"); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR_USTAR); + + assertEqualInt(ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); +} + + +DEFINE_TEST(test_compat_lzma) +{ + /* This sample has been added junk datas to its tail. */ + compat_lzma("test_compat_lzma_1.tlz"); + /* This sample has been made by lzma with option -e, + * the first byte of which is 0x5e. + * Not supported in libarchive 2.7.* and earlier */ + compat_lzma("test_compat_lzma_2.tlz"); + /* This sample has been made by lzma of LZMA SDK with + * option -d12, second byte and third byte of which is + * not zero. + * Not supported in libarchive 2.7.* and earlier */ + compat_lzma("test_compat_lzma_3.tlz"); +} diff --git a/lib/libarchive/test/test_compat_lzma_1.tlz.uu b/lib/libarchive/test/test_compat_lzma_1.tlz.uu new file mode 100644 index 00000000000..3b632111422 --- /dev/null +++ b/lib/libarchive/test/test_compat_lzma_1.tlz.uu @@ -0,0 +1,10 @@ +$FreeBSD$ + +begin 644 test_compat_lzma_1.tlz +M70``@`#__________P`S##P;IXPT!HUK`DO\DC[V2OB%Z^'=ZT59ANYMTD(/ +M^W;\8!%O7<+P&=#(9W<_!$Z.7/Y<&\(8+E0^,_-\Z"D^P'N0J^4-UH"WMJ<& +MV-P6=Y[-FY$IFNZ="RF24TO.B7EP[F]BGMJSP[]OZ_P9/#J'T=;7E&&A@J<[ +MA^C'Q*/Y&I)2^T930'MJTK-98U0D9R*-X2^5__6H:+A4:&ES(&ES('5N`W2"/3R1F1:P:&Q9A +MGH2JJI9$C?8.=WTE:O<1WA@X>DK-Y#SW;I2!P;NYG^2"-(D9/E(D_0XK_H,\ +95*/V"T#E9ZO][@'R,6E&^A([.##_\M#YU@`` +` +end diff --git a/lib/libarchive/test/test_compat_lzma_3.tlz.uu b/lib/libarchive/test/test_compat_lzma_3.tlz.uu new file mode 100644 index 00000000000..b8d61b70afd --- /dev/null +++ b/lib/libarchive/test/test_compat_lzma_3.tlz.uu @@ -0,0 +1,9 @@ +$FreeBSD$ + +begin 644 test_compat_lzma_3.tlz +M70`0````'``````````S##P;IXPT!HUK`DO\DC[V2OB%Z^'=ZT59ANYMTD(1 +M$Y^=;\4%U_CXKQ*F$OFZKEQUG)1U8="](V<2K"U1\Z6%H(UNQ[Y3.=D'>_G- +MCO71X+M*7WH7$D1&E9Y$XHW,(`[X";GGTO+,'&1?F%<@`.$-OV;8P1?*M$A" +:MA+1XONREMK,1('455L=X1>WC#1YW"('I@`` +` +end diff --git a/lib/libarchive/test/test_compat_solaris_tar_acl.c b/lib/libarchive/test/test_compat_solaris_tar_acl.c index ec3955ecd7f..af4f9d3825d 100644 --- a/lib/libarchive/test/test_compat_solaris_tar_acl.c +++ b/lib/libarchive/test/test_compat_solaris_tar_acl.c @@ -50,9 +50,9 @@ DEFINE_TEST(test_compat_solaris_tar_acl) /* Archive has 1 entry with some ACLs set on it. */ assertA(0 == archive_read_next_header(a, &ae)); - failure("Basic ACLs should set mode to 0640, not %04o", + failure("Basic ACLs should set mode to 0644, not %04o", archive_entry_mode(ae)&0777); - assertEqualInt((archive_entry_mode(ae) & 0777), 0640); + assertEqualInt((archive_entry_mode(ae) & 0777), 0644); assertEqualInt(7, archive_entry_acl_reset(ae, ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); assertEqualInt(ARCHIVE_OK, archive_entry_acl_next(ae, @@ -77,7 +77,7 @@ DEFINE_TEST(test_compat_solaris_tar_acl) ARCHIVE_ENTRY_ACL_TYPE_ACCESS, &type, &permset, &tag, &qual, &name)); assertEqualInt(ARCHIVE_ENTRY_ACL_TYPE_ACCESS, type); - assertEqualInt(000, permset); + assertEqualInt(004, permset); assertEqualInt(ARCHIVE_ENTRY_ACL_OTHER, tag); assertEqualInt(-1, qual); assert(name == NULL); diff --git a/lib/libarchive/test/test_entry.c b/lib/libarchive/test/test_entry.c index b79e822cc72..bd946c44a9e 100644 --- a/lib/libarchive/test/test_entry.c +++ b/lib/libarchive/test/test_entry.c @@ -51,12 +51,39 @@ DEFINE_TEST(test_entry) const char *xname; /* For xattr tests. */ const void *xval; /* For xattr tests. */ size_t xsize; /* For xattr tests. */ - int c; wchar_t wc; long l; assert((e = archive_entry_new()) != NULL); + /* + * Verify that the AE_IF* defines match S_IF* defines + * on this platform. See comments in archive_entry.h. + */ +#ifdef S_IFREG + assertEqualInt(S_IFREG, AE_IFREG); +#endif +#ifdef S_IFLNK + assertEqualInt(S_IFLNK, AE_IFLNK); +#endif +#ifdef S_IFSOCK + assertEqualInt(S_IFSOCK, AE_IFSOCK); +#endif +#ifdef S_IFCHR + assertEqualInt(S_IFCHR, AE_IFCHR); +#endif +/* Work around MinGW, which defines S_IFBLK wrong. */ +/* sourceforge.net/tracker/?func=detail&atid=102435&aid=1942809&group_id=2435 */ +#if defined(S_IFBLK) && !defined(_WIN32) + assertEqualInt(S_IFBLK, AE_IFBLK); +#endif +#ifdef S_IFDIR + assertEqualInt(S_IFDIR, AE_IFDIR); +#endif +#ifdef S_IFIFO + assertEqualInt(S_IFIFO, AE_IFIFO); +#endif + /* * Basic set/read tests for all fields. * We should be able to set any field and read @@ -414,7 +441,7 @@ DEFINE_TEST(test_entry) skipping("ACL preserved by archive_entry_clone()"); #else /* Verify ACL was copied. */ - assertEqualInt(4, c = archive_entry_acl_reset(e2, + assertEqualInt(4, archive_entry_acl_reset(e2, ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); /* First three are standard permission bits. */ assertEqualInt(0, archive_entry_acl_next(e2, @@ -455,7 +482,7 @@ DEFINE_TEST(test_entry) skipping("xattr data preserved by archive_entry_clone"); #else /* Verify xattr was copied. */ - assertEqualInt(1, c = archive_entry_xattr_reset(e2)); + assertEqualInt(1, archive_entry_xattr_reset(e2)); assertEqualInt(0, archive_entry_xattr_next(e2, &xname, &xval, &xsize)); assertEqualString(xname, "xattr1"); assertEqualString(xval, "xattrvalue"); @@ -539,7 +566,7 @@ DEFINE_TEST(test_entry) skipping("ACL held by clone of archive_entry"); #else /* Verify ACL was unchanged. */ - assertEqualInt(4, c = archive_entry_acl_reset(e2, + assertEqualInt(4, archive_entry_acl_reset(e2, ARCHIVE_ENTRY_ACL_TYPE_ACCESS)); /* First three are standard permission bits. */ assertEqualInt(0, archive_entry_acl_next(e2, @@ -807,7 +834,7 @@ DEFINE_TEST(test_entry) /* * Exercise the character-conversion logic, if we can. */ - if (NULL == setlocale(LC_ALL, LOCALE_DE)) { + if (NULL == LOCALE_UTF8 || NULL == setlocale(LC_ALL, LOCALE_UTF8)) { skipping("Can't exercise charset-conversion logic without" " a suitable locale."); } else { diff --git a/lib/libarchive/test/test_entry_strmode.c b/lib/libarchive/test/test_entry_strmode.c index 5ede8b6f217..70c0e755696 100644 --- a/lib/libarchive/test/test_entry_strmode.c +++ b/lib/libarchive/test/test_entry_strmode.c @@ -31,11 +31,11 @@ DEFINE_TEST(test_entry_strmode) assert((entry = archive_entry_new()) != NULL); - archive_entry_set_mode(entry, S_IFREG | 0642); + archive_entry_set_mode(entry, AE_IFREG | 0642); assertEqualString(archive_entry_strmode(entry), "-rw-r---w- "); /* Regular file + hardlink still shows as regular file. */ - archive_entry_set_mode(entry, S_IFREG | 0644); + archive_entry_set_mode(entry, AE_IFREG | 0644); archive_entry_set_hardlink(entry, "link"); assertEqualString(archive_entry_strmode(entry), "-rw-r--r-- "); @@ -44,22 +44,22 @@ DEFINE_TEST(test_entry_strmode) assertEqualString(archive_entry_strmode(entry), "hrw-r----- "); archive_entry_set_hardlink(entry, NULL); - archive_entry_set_mode(entry, S_IFDIR | 0777); + archive_entry_set_mode(entry, AE_IFDIR | 0777); assertEqualString(archive_entry_strmode(entry), "drwxrwxrwx "); - archive_entry_set_mode(entry, S_IFBLK | 03642); + archive_entry_set_mode(entry, AE_IFBLK | 03642); assertEqualString(archive_entry_strmode(entry), "brw-r-S-wT "); - archive_entry_set_mode(entry, S_IFCHR | 05777); + archive_entry_set_mode(entry, AE_IFCHR | 05777); assertEqualString(archive_entry_strmode(entry), "crwsrwxrwt "); - archive_entry_set_mode(entry, S_IFSOCK | 0222); + archive_entry_set_mode(entry, AE_IFSOCK | 0222); assertEqualString(archive_entry_strmode(entry), "s-w--w--w- "); - archive_entry_set_mode(entry, S_IFIFO | 0444); + archive_entry_set_mode(entry, AE_IFIFO | 0444); assertEqualString(archive_entry_strmode(entry), "pr--r--r-- "); - archive_entry_set_mode(entry, S_IFLNK | 04000); + archive_entry_set_mode(entry, AE_IFLNK | 04000); assertEqualString(archive_entry_strmode(entry), "l--S------ "); archive_entry_acl_add_entry(entry, ARCHIVE_ENTRY_ACL_TYPE_ACCESS, diff --git a/lib/libarchive/test/test_extattr_freebsd.c b/lib/libarchive/test/test_extattr_freebsd.c index 19881c2ece5..de3ae2a586d 100644 --- a/lib/libarchive/test/test_extattr_freebsd.c +++ b/lib/libarchive/test/test_extattr_freebsd.c @@ -85,7 +85,7 @@ DEFINE_TEST(test_extattr_freebsd) n = extattr_set_fd(fd, EXTATTR_NAMESPACE_USER, "testattr", "1234", 4); if (n != 4) { - skipping("Restoring xattr to an unwritable file (broken in some versions of FreeBSD"); + skipping("Restoring xattr to an unwritable file seems to be broken on this platform"); extattr_privilege_bug = 1; } close(fd); @@ -114,17 +114,15 @@ DEFINE_TEST(test_extattr_freebsd) archive_entry_set_size(ae, 0); archive_entry_set_mode(ae, 0); archive_entry_xattr_add_entry(ae, "user.bar", "123456", 6); - if (extattr_privilege_bug) - /* If the bug is here, write_header will return warning. */ - assertEqualIntA(a, ARCHIVE_WARN, - archive_write_header(a, ae)); - else - assertEqualIntA(a, ARCHIVE_OK, - archive_write_header(a, ae)); + assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); archive_entry_free(ae); /* Close the archive. */ - assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); + if (extattr_privilege_bug) + /* If the bug is here, write_close will return warning. */ + assertEqualIntA(a, ARCHIVE_WARN, archive_write_close(a)); + else + assertEqualIntA(a, ARCHIVE_OK, archive_write_close(a)); assertEqualInt(ARCHIVE_OK, archive_write_finish(a)); /* Verify the data on disk. */ diff --git a/lib/libarchive/test/test_fuzz.c b/lib/libarchive/test/test_fuzz.c index 9c5a0561590..7e3f28d0bb3 100644 --- a/lib/libarchive/test/test_fuzz.c +++ b/lib/libarchive/test/test_fuzz.c @@ -44,86 +44,87 @@ __FBSDID("$FreeBSD$"); * post-failure diagnostics. */ -/* Because this works for any archive, I can just re-use the archives - * developed for other tests. I've not included all of the compressed - * archives here, though; I don't want to spend all of my test time - * testing zlib and bzlib. */ -static const char * -files[] = { - "test_fuzz_1.iso", - "test_compat_bzip2_1.tbz", - "test_compat_gtar_1.tar", - "test_compat_tar_hardlink_1.tar", - "test_compat_zip_1.zip", - "test_read_format_gtar_sparse_1_17_posix10_modified.tar", - "test_read_format_tar_empty_filename.tar", - "test_read_format_zip.zip", - NULL +/* Because this works for any archive, we can just re-use the archives + * developed for other tests. */ +static struct { + int uncompress; /* If 1, decompress the file before fuzzing. */ + const char *name; +} files[] = { + {0, "test_fuzz_1.iso.Z"}, /* Exercise compress decompressor. */ + {1, "test_fuzz_1.iso.Z"}, + {0, "test_compat_bzip2_1.tbz"}, /* Exercise bzip2 decompressor. */ + {1, "test_compat_bzip2_1.tbz"}, + {0, "test_compat_gtar_1.tar"}, + {0, "test_compat_gzip_1.tgz"}, /* Exercise gzip decompressor. */ + {0, "test_compat_gzip_2.tgz"}, /* Exercise gzip decompressor. */ + {0, "test_compat_tar_hardlink_1.tar"}, + {0, "test_compat_xz_1.txz"}, /* Exercise xz decompressor. */ + {0, "test_compat_zip_1.zip"}, + {0, "test_read_format_ar.ar"}, + {0, "test_read_format_cpio_bin_be.cpio"}, + {0, "test_read_format_gtar_sparse_1_17_posix10_modified.tar"}, + {0, "test_read_format_mtree.mtree"}, + {0, "test_read_format_tar_empty_filename.tar"}, + {0, "test_read_format_zip.zip"}, + {1, NULL} }; -#define UnsupportedCompress(r, a) \ - (r != ARCHIVE_OK && \ - (strcmp(archive_error_string(a), \ - "Unrecognized archive format") == 0 && \ - archive_compression(a) == ARCHIVE_COMPRESSION_NONE)) - DEFINE_TEST(test_fuzz) { - const char **filep; const void *blk; size_t blk_size; off_t blk_offset; + int n; - for (filep = files; *filep != NULL; ++filep) { + for (n = 0; files[n].name != NULL; ++n) { + const size_t buffsize = 30000000; + const char *filename = files[n].name; struct archive_entry *ae; struct archive *a; char *rawimage, *image; size_t size; - int i, r; + int i; - extract_reference_file(*filep); - rawimage = slurpfile(&size, *filep); - assert(rawimage != NULL); - image = malloc(size); - assert(image != NULL); - srand(time(NULL)); - - assert((a = archive_read_new()) != NULL); - assert(0 == archive_read_support_compression_all(a)); - assert(0 == archive_read_support_format_all(a)); - assert(0 == archive_read_open_memory(a, rawimage, size)); - r = archive_read_next_header(a, &ae); - if (UnsupportedCompress(r, a)) { - skipping("Skipping GZIP/BZIP2 compression check: " - "This version of libarchive was compiled " - "without gzip/bzip2 support"); - assert(0 == archive_read_close(a)); - assert(0 == archive_read_finish(a)); - continue; - } - assert(0 == r); - if (r == ARCHIVE_OK) { - char buff[20]; - - r = archive_read_data(a, buff, 19); - if (r < ARCHIVE_OK && strcmp(archive_error_string(a), - "libarchive compiled without deflate support (no libz)") == 0) { - skipping("Skipping ZIP compression check: %s", - archive_error_string(a)); - assert(0 == archive_read_close(a)); - assert(0 == archive_read_finish(a)); + extract_reference_file(filename); + if (files[n].uncompress) { + int r; + /* Use format_raw to decompress the data. */ + assert((a = archive_read_new()) != NULL); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_support_compression_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_support_format_raw(a)); + r = archive_read_open_filename(a, filename, 16384); + if (r != ARCHIVE_OK) { + archive_read_finish(a); + skipping("Cannot uncompress %s", filename); continue; } - while (0 == archive_read_data_block(a, &blk, - &blk_size, &blk_offset)) + assertEqualIntA(a, ARCHIVE_OK, + archive_read_next_header(a, &ae)); + rawimage = malloc(buffsize); + size = archive_read_data(a, rawimage, buffsize); + assertEqualIntA(a, ARCHIVE_EOF, + archive_read_next_header(a, &ae)); + assertEqualInt(ARCHIVE_OK, + archive_read_finish(a)); + assert(size > 0); + failure("Internal buffer is not big enough for " + "uncompressed test file: %s", filename); + if (!assert(size < buffsize)) + continue; + } else { + rawimage = slurpfile(&size, filename); + if (!assert(rawimage != NULL)) continue; - } - assert(0 == archive_read_close(a)); - assert(0 == archive_read_finish(a)); + image = malloc(size); + assert(image != NULL); + srand((unsigned)time(NULL)); for (i = 0; i < 100; ++i) { - int j, fd, numbytes; + FILE *f; + int j, numbytes; /* Fuzz < 1% of the bytes in the archive. */ memcpy(image, rawimage, size); @@ -133,11 +134,10 @@ DEFINE_TEST(test_fuzz) /* Save the messed-up image to a file. * If we crash, that file will be useful. */ - fd = open("after.test.failure.send.this.file." - "to.libarchive.maintainers.with.system.details", - O_WRONLY | O_CREAT | O_TRUNC, 0744); - write(fd, image, (off_t)size); - close(fd); + f = fopen("after.test.failure.send.this.file." + "to.libarchive.maintainers.with.system.details", "wb"); + fwrite(image, 1, (size_t)size, f); + fclose(f); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, diff --git a/lib/libarchive/test/test_fuzz_1.iso.Z.uu b/lib/libarchive/test/test_fuzz_1.iso.Z.uu new file mode 100644 index 00000000000..6044296c1ad --- /dev/null +++ b/lib/libarchive/test/test_fuzz_1.iso.Z.uu @@ -0,0 +1,495 @@ +$FreeBSD$ + +begin 644 test_fuzz_1.iso.Z +M'YV0``(*'$BPH,&#"!,J7,BPH<.'$"-*G$BQHL6+&#-JW,BQH\>/($.*'$FR +MI,F3*%.J7,FRIO8,.*'4NVK-FS:-.J7//JW/'D"-+GDRYLN7+F#-KWLRY +ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ +MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ +MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$;(44890DQ!!`@01BCA +MA!1***`43S11X88<1GA0%`(,)$`4'QT(0``F'H@``@"(PJ)`"(A"04(6#"0" +M`!P4E..+`;'(Q@(6),!``^"$>&)`*`+0X9),-NGDDU!&*>645%9IY9589JGE +MEEQ>V<0224SQA!%3@!#F$R#D8(,-,+R`!)D@&)$$$T5,D<445!2AH1!5S$E$ +M$5*`8`((%Q8QQ!-2/"A@"U*\0(05BDI11!!4(`H""D.D`$(,.>0P`PA%N)#% +M$U4X<0010=!Y:::;=GH#"$JX`,6D4HCIQ`NQ3C$$$G,RD82I708K;+`R$(A# +M##'(4&P.R<8P`X'@%`O#L,L<,Y`&"#VP#``,`7`"!A=L(.`SPV +M$P"4G'`69%/1=\8,'UR%V`#PO7#)%CML`L,3+VQQR1-C;/'"$E/<0L5S4VP% +MQ9E/#D`074-=^M2G,QTNLN.6>VZVJU=+[K70>FO[MN`:R[JUYF(+3KKV!B_\ +M\,07;_SQR",K`QD.-`Z!A(B#`%B'0`800A3Z\(_\A4#DAM%<""0&[YR%0&3PSE8(!)D8/85` +MM(K14`BD!N_AM%*".0&[WR$0'#PSD0(I&T8'81`K(K1/@AD!^^\@T!X +M\,XX"*0'[UR#0'SP3H(%Y)<8I5M`I(I1P`6$=!A-6$`.AE&-!61B&#V"0!:& +M4=(%I&08A>V_WHG9@$@7HX`-B-TPF@*!C`VCYA"($MZ)U8"$#:/>$`C?,(H- +M@6@,H](0B!/>R0R!8`RCQA`(%-X)#(&0"*.Z$(C%,$H+@20,HZX0B.`PB@J! +M'`ZCHA#(YS#*"8&D$J.6$(A0,0H)@0`.HXH0B!;>20B!;.&=?A`(%]Z)!X&4 +M$J,,!(!/,.>2`A.&=*PZ(&-XIN("$$J/[#8A.,6JW@!`, +MHP<+2)`Q2MN`G.&=;PL(&MXIMX!T$J-L#8A-,7H.@>@6HUP-2(\Q^@V!M.&= +MV1"(&]XY#8%D$J/-$(A,,7H,@=@6H\$0B,`PN@N!S.&=M1`('=[Y"H%4$J.I +M$(A+,3H*@<@6HYT02(TQ>@F!Y.&=D1"('MZY"(%$$J.%$(A*,?H'@;@6HZ<. +M2(PQ^NB`U!JC=PX((-[YY8`T$J-'#HA),?KB@*@6HX<+2(LQBK&`Q!JC8PN( +M(=XYL8`D$J.X#8A(,0K:@)@6HX@-2(HQ"M>`M!JCZ!`((][YN(`4$J/@$(A' +M,:H-@8@6H]002(DQZ@R!I!JCR!"()-XI#($$$J.\$(A&,6H+@7@6H[`02(@Q +MJ@J!E!JCI!`()M[I"8'T$:,C#TA%,;KP@&@6H_,.2( +M@$@6HPL+2(4QRMN`9!JCI`U(QS'*V(#$$:-T#4A"K3O!NMO][GC/>WBDAZ,C +M^3T@&0P`#@7R0<%_\_`CS-E/3]3"%\9PA@.IH0`&'Q`=#@#QF/\[`(9(`-(5 +M42!)[#P3!^)$T1?H\P&9HNFM.!`LFGZ+`^FBZ;\XD#":?HP#*:/ISSB0-)I^ +MC0-IH^G?.)`XFGZ.`ZFCZ>\XD#R:?H\#Z:/I_SB00)I^D`,II.D/.9!$FGZ1 +M`VFDZ1\YD$B:?I(#J:3I+SF03)I^DP/II.D_.9!0FGZ4`RFEZ4\YD%2:?I4# +M02*F)TL#$3:FATL#43*FUTL#\4NF%TP#T3:F9TP#@4RFITP#L3FF]TP#$4VF +M-TT#44T%0'D`H$T&@'F(IWDW<@`8)1#GE``M&!#LI``Q"$\`L``U6$\,4(/Y +MU``UV$\.4(,!]0`U6%`04(,)%0$UV%`24(,1-0$U6%$44(,:50$UZ%$64(,B +M=0$U:%(84(,JE0$UZ%(:4(,RM0$U:%,<4(,ZU0$UZ%,>4(-"]0$UV#@UR#90(U*%8G4(-FA0(U2%4J4(-NM0(U*%=0,U*%HX4(.FE0,UJ%HZ4(.NM0,U*%L\4(.VU0,UJ%L^4(,$\P,U2#=` +M4(,G5H,)(P0UJ#%#4(/2A2J:1SJ3HGFP900UB%E'4(.`A00U6%Y)4(/II00U +MB%5+4(/QQ00U6%]-4(/YY00UV%]/4(,!!@4U6&!14(,))@4UV&!34(,11@4U +M6&%54(,99@4UV&%74(,AA@4U6&)94(,II@4UV&);4(,QQ@4U6&-=4(,"XP4U +MV&-?4(-!!@8U.&1A4(,K)@8U*#AC4(/[108U:#=E4(,'8P8U2%MG4(-O@P8U +M*#=I4(-LI08UV&9K4(-+4(/QQ@@U^#B-4(/YY@@UV&^/4(,!!PDU +M6'"14(,))PDUV'"34(,11PDU6'&54(,99PDUV'&74(,AAPDU6'*94(,CIPDU +MN'";4(/SQ@DUN&V=4(/#Y@DUN&J?4(.3!@HUN&>A4(-C)@HUN&2C4(,S1@HU +M^#FE4(,#9@HUN%ZG4(,+@PHUR%NI4(.DI0HUR%BK4(-TQ0ITIW<8FJ$:NJ$< +MRAL'4C,7!``A`@LH,SK#=@LEBEQ&I*(LNJ(NVJ(P^J(R&J,T.J,V6J,X>J,Z +M&@0A$@LF8B1!,&RX8"(\M*-&FJ-(>J1*FJ1,NJ0K&B*R8"*?%Z0`D`LF^J0`,`LFPDVC$R*T8"(OPJ,`4`LFPC)E"@"V8"+N]*;O($_' +M%2+P8$]W"@#QH$][*@_^M*?S(%![2@\&M:?UH%![:@\.M:?W(%%[B@\6M:?Y +ML%%[J@\?M:?[,%)[R@\GM:?]L%)[Z@\OM:?_,%-[ZG<6I*9)`@`\]:8"8"(K +M]*8#8"(=]*8$$#1[6@`F,D1O:@`F(DYJ>@`FHE9JB@`FTEYJF@`F$F=JJ@`F +M4F]JN@`F$DUOR@`F(E9OV@`F4EYOZ@`FDF9J^@`FTFYJ"@$F$G=J&@$FPDQJ +M*@$FXE5O.@$F$EYJ2@$F4F9J6@$FDFYJ:@$FTG9J>@$F@DQOB@$FHE5OF@$F +MTEUJJ@$F$F9JN@$F4FYJR@$FDG9JV@$F,DQJZ@$F8E5O^@$FHEUJ"@(FTF5J +M&@(F$FYJ*@(F4G9J.@(F\DMO2@(F(E5O6@(F8EUJ:@(FDF5J>@(FTFUJB@(F +M$G9JF@(FHDMJJ@(FXE1JN@(F(EUOR@(F4F5JV@(FDFUJZ@(FTG5J^@(F0DMJ +M"@,FHE1JZB^$\Z8R8")1IJ8S8"+5IJ8T8")9IZ8U8"*MI*8V8")&I:8W8"+* +MI:8X8")-IJ8Y8"+1IJ8Z8")5IZ8[8"*I]*8\8")"]:8]8"+&I:8^8"))IJ8_ +M8"+-IJ9`8")1IZ9!8"*E]*9"8"(^]:9#8"+"I:9$8")%IJ9%8"+)IJ9&8")- +MIZ9'8"*A]*9(8"(Z]:9)8"*^I:9*8")!]J9+8"+%IJ9,8"))IZ9-8"*=]*9. +M8"(V]:9/8"*Z]:908"(]]J918"+!IJ928")%IZ938"*9]*948"(R]:958"*V +M]:8@&#![>@4FTFMJB@4F$G1JF@4F4DEOJ@4FXE)ON@4F(EMOR@4F4F-OV@4F +MDFMJZ@4FTG-J^@4F$DEO"@8FHE)O&@8FXEIO*@8F$F-O.@8F4FMO"GD`D'-J +M6@8FTDAO:@8F8E)O>@8FHEIOB@8FTF)OF@8F$FMOJ@8F4G-JN@8FDDAOR@8F +M(E)OV@8F8EIOZ@8FDF)O^@8FTFIO"@@@@FTFEOB@@F$G)OF@@F4D=OJ@@F +MTE!ON@@F(EEOR@@F4F%OV@@FDFEOZ@@FTG%O^@@F$D=O"@DFDE!O&@DFXEAO +M*@DF$F%O.@DF4FEO2@DFDG%O6@DFTD9O:@DF4E!O>@DFHEAOB@DFTF!OF@DF +M$FEOJ@DF4G%ON@DFDD9OR@DF$E!OV@DF8EAOZ@DFDF!O^@DFTFAO"@HF$G%O +M&@HF4D9O*@HFTD]O.@HF(EAO2@HF4F!O6@HFDFAO:@HFTG!O>@HF$D9OB@HF +MDD]OF@HFXE=OJ@HF$F!ON@HF4FAOR@HFDG!OV@HFTD5OZ@HF4D]O^@HFHE=& +MU*%F?=9HG=;LP7$K=>%?=@WRMD^DW:?[1-J`^D^D/:@#1=J&>E"DG:@+1=J,^E"D_:@3 +M1=J2>E%\#0"5RE&DC:D@-=R;2E*D[:DH-=RARE*D3:HP-=RG2E.=;2(XI=@' +MPE/9'2)`I=@\1%2*741(I=C7Q%2*S4U0I=CD1%79S2)8E=TLPU79[4Y@I=CS +M1%:*?4]HI=C[5%[9_4]LE=T#!5?9?5!TE=T+A5>*_5!\I=@3!5C9/2.$I=@< +MA5C972.,E=TD!5F*#3.4I=@LA5G9+3.*+3B#IMB'H3.L'\] +M(_\!C0````4@`32`"%`!%H0&^``!0`0\"!30`G9`#0@#B<00U!D`((,0A`R" +M,^H?S\!_%P1%!($:&``2@1-H`L!J=-S``'``!T("[($0T`$.A!\X`2M@`+B` +M19`(/D$UF`$!@*3Z(`3A@S3!%[@&9>")H$,HZ)M002O8!`2:X06P4,%[()9<@6S$I>L`VHE8$P`L3@#D$'KC`,!L$S.`1K81IT?[@P%^K" +MQG`%W5@W*83`,!@*PQ&R!;N@0/B"!2$"]D`R6!!F(1I<@[9P#>[":4@-JZ$U +MO(8X(HX$3$@AOD(OK#X180!,!&9(8$X1TBQ)VX!D7B@9@T3H0@.)&46`>C +MH.E!+"Z1(L;$T#C0T02NZ2,:V'2L+'LDR.9(^/HD621/+)(9/@BT>-:5(_L\3^* +M2+@(`*A8]VF2%Q)@K,C\:!ZKY)"\DC(R2Q[)$)&Z$)79C3OY&.VDE!X).Q(YJTCTRL/3C)T_$^K&//E)* +MDDD.22C/I*%DBXA22]9(+EF_VD^C#`#O!U)&R049)!LD1_R0$+(P6I'):ITC@>QLK5?Y(E#-@OS))2OL([>2FQI*;$E5FQE00@:VDY +MH&2LG)2E,E@^2SQ)+%5E5J0E!HPXF1EUT4)"Q#T8*=$FQUR70K-=2L.E23@+I^$\G)DAR-Q- +M@7`C\B:*I)K[T&^>S+E9,PVFFI2'FZ<@0$T8(37UY@RLFANR7D+,CADX/V;/ +M0()J,R!0%<=Y"04/WQR5H?-J:L2L63DG)HA$G+@S=^K.W=D8@DSJ!`"K,VK> +MQA,A#B-G['R86)-@UDZ5>3L59T%HG,)S;)X,?6@#C^??I)D`P&9>SEO88]K+ +M0,`JK#,<1D1>Q0?/)9U$GK-3>69/RZDO;R'O?)_P,W[*S[D09+SG5?F4Q;-Z +MRLKK23G7I^V$C0#`=ZI#_$D]`P`_1)>R,SB23JTI.-M@CXDS`X&KA$^R.3Y! +M(>S,0))6$(Z@^*2"F:!O6L\BVC:/:,\8`G$S`.S,L=)$^Z@?_:.`M",$F3T: +M$*+)#P4:)U1RVE`SFD/;H,#PF@``;%9"Z2E&>=79/)Z_HZT&@E@YI,2S@@K1'SDH1^<579Y;T#0[2@F!(P>C4K*0&5)&646#:2$]GC_%6`Z&\H%(I^#K-9RM- +MGA$3EC;0TWE+NZDW_::!-,A`4X$@38VIYR2>B72.+E)FVDF%*0#0I0'AE)K3 +MQXE,4>@U39_9U'\R3P#:8]+,0&`KT]1U!E$Y2D9=*?;DI+<3G"K4A0 +M\:<"`:#.T]:93@LJ-EV@VC2+YAMQ6A#**><!=2>`LME6E*;J1;M,7%G(-`5EEI-A^@]M:('E7VV4VYZ4[NJ5_VJZR_( +M1-6YPE.3J3IEJD#5I`I5E%H05NI$#8=)59D:U!NJ56]G&EVC!\&-4E`XZE)' +M*EHMG3(U`^)1;.4R[PI8/:R(-;%FCR!36`/"Y@BH%=6G_E4L&EA/YR,M")+4 +M&W9.>HI4S2;:S*1L,ZTZ57#P20/`6`T(=*7'R*N!X%6HZD"]H))UKC+2K:I% +M%:MMO:VX-3\$F=6Z5\JJ4FV6LI6=-D\`T%B)*P$5J5DQX&0B` +MQ;62S[Z:7&FG/HVE:C*W:M?MREWM0Y!YKG_%M\K5B_I*K^LV7:N\-2"TUK=* +M-N/J60VN396V-M>X41#DAG2UH-9TJ<)7T2I?NZM__:\`UCP$F3(S$.PK>X6< +M/=6O[M?EJE8W*@``KP$ANA[8>CI>\2E&-:\:%0FFFX&`6.[K*I64"I:\9M7_ +MR34#K(D]L2BV.@29#7M8Q.M[%;%TE<3*T@%;7X]K+PVQ%K:\(E1^"BX*`F/Q +ML-15O\+8V9I04ZR1/;)(EC@$F;8S$'[LA$6GR%7(YM@1NT^YYHHM"!WVR8;4 +M&UM=-VE=!:!W=2`$`#9*$/0J$.55<12VXEBL&F.K[(PF<[K:?]M(D3`%#:R>)B+>J4;;/8]5MN43T+`/BL +MEBV;7%;*LEDBRV.[RT#`+)!NYUJK*6N5*69FKL/VVX#;<&H8@8VTW +MR[%=L]PVHU;6M5IL`P*N?;9^5ELF6_YZ.WM,N1D(H"7;LM)MVVB_K*\5MP`W +MX`I<^@D`[NUG.;>9]L)NVNQ*;@L"MH6WL7;72EMERV/3SD`@+?H6Q"9<'>MO +M.>W`_;@@-^22A2!C<4<+PN6W7E;&,MR"6Q#R+<1-L!N7RJ9:(PD`PJP&(;,# +MP5I$KM$]NDA7*009HAL0VD:?C;@_=^+26T$; +M23&KH0V;F[5U%E!%2T49;HS(&@A6)>-66*G+8$=KTGV[ +M<#?NZH0@L*MJ):_K?;VPMR0$&=,[6RZOZ)RW;;>_4MZ"D'@_[]K-O*.7YO:8 +M<#,0<$OJ1;:,=^HZWMC+?)NO\XT(08;XWA;;FT"!+^NEN;.W(*!>W[MXV6ZW +M;;!(L.P,!-YR?-'MZIVY>O7YJM_URWX'0I`1O[N%^E91ZXM^;V'T+0C&E_NJ +MWJ];?]$H`%"C8A;G"@2=FTKY*J9%N9I6\WY+.*LP!4(#;K\0.`(?W2#S@`'` +M+WFZ,!&WZ)<(_),@/A +M8$!A,CR$,^P5?L-P&-P&&30L$-0P$(ZWMS?YYM[AFOZ,2$"%MDF8_IIA`-!M +M!L+$6,.AMPWOW3C,B!NQIPTRA5@@'.([#'7SL!+6N]YV#A<$.VQ41?"6'<.) +M&`5?WR/88\+.0%@8B-@2"V(W[(A;L2M&L4'&%$^7+0Q3]S``A<0%81)WXC`Z +M@D&Q*B[#&=;F(@D!+&[9<"`1J_XFE,C6]JD)'& +M@P,#!]Y`#(P7L0?FAE@7I,):2_I9U>$JWKNE518'A(718YS*0``8J;CZ=F-O +M6XWKL3U>J$'&'0L$>$R)?;$\5L29>'`0A)+QA_'P/V;&@]AJ#03I$H_G[SP& +MO_!L+882<8?-Q0>#'N_B8]F*-3(-[K2SM,55F(-B- +MALR%E:_'G<@P.2;7TB"3D@7"2L[(H/<7`V3P6Y$+`D8.R>?T$Y/D*"QS!W&V +M&0AC@R77XN_K=F6R4W[*?33('&7S0HM_JBVVLG6C(-QDH,Q9A7)./L@;>`KK +M4`#0=0;">E'*5IDI]U>HS);;L@<-,F59O53ER;J$>3+B(`A)&0EOY+`\BF^A +M,#X1Q'BS@I`"_`F3\;Y=QGRY&=_1/`HO!4)C=LN0.3)?PR#SF`%`V-#&7]DA +M[V2W^XV_)@C6K.)XZY9C@J!).3(ZSJ-Q.2"LEQZC5`8"WT#+=!D30V3)3)MK +MS:8YS+0-`8L)DWU^6F;)N;LW.>AD'& +M.-N7W8Q[>_,M3AP%X34'9Z)<@S-LCXDR`V&_).?JO)S7\G,^S^A9_049\*Q? +MJ+,>MLY863H'!.2\G1&S%.[+8[G:#`2,,9[?*[/H3@Q#^*L,Q`&3'].T!PX_0[H#]N_/&;SJC'>N0;8YZ9H":U1X:RX-#`=.D?K:/\09&YT0"`1 +MF/GW/F3.7'4)[6>^NJ'9LV)2],-@A"PK#231I`;^DY3:?I0Y!1 +M+@/A38?I[GNEW6Z7+@A@FBMK78.LF54T^.TQ3<90XL^6>H#5='=>Q'4Z4DMJ +M]Q!D$K6$$=%Q^CKC:0>#IC-S2[[*)QD`1)N!<#C@])B6TY,Z5:OJ\!!D1K6% +MP=2G^CI;ZIK9J<6TH7:[/:;J#(3/8:IOM7E>U<`Z6&N'(*.K-0RL]M7#U54' +MA%*-HL'R?5;,6I1%!V8"3$T+T$P[(`QMJAV;%?01E-8N +M>J8>8\.L<;GSV1Z"91L!X09TV-BUT#P*5Q[.'MMO\VY._>XU3$%`7/OZ<+]L,ETX`8` +M@YMM*V?9#+&%RT"@&YF["V=7STV[:_=B"#*NV\>8;%H(,_Q8(_MM]"V?9K6K5=T%HW_5[AE9B9XVSP2_< +M-@C46J"BV6L=H>$WZ+M(?F%TK +M;I',N)`=P$T[$B[A3"#(^7"``<05NMWDW +MYDSA*WQ[^^?\S6-]RT`@&$&QR.%^0)[K`).<1..@-A +MS"CR#,W('[DI/^4V(QE!WL)+MUW]OW@5@[]HPKS! +M&[4EO]MI$,ZR2H$PS%&Y,3_F(B'(%',`T$E8^/NNX_U572?NK"N\27#C7IOH +M>D:6UE4N9I!@^!H(-F64BV4DBLS+N3G?"$'FFPN$<.[**?@E)]/+O)E+<0P] +MSD]J^1H(ND6NO]-7SHWC +MKU5&NW-@/E/_N46_Z!0AR#CT`4S0R;=!%^@!(9_/@+O*`+7P!0=`;"GDGI%]NE"_6A#L=[NIZ9 +MZ4+R+O(4" +M@,`>$/1Z8G?AH3K'*!J(/EU]^2O'Z@!TLJOV[<#]D0>9W>YH,#LIU^RN'8!MKY6B7M`Z.VX/:Z#65P>@.,V.9_;'/RT._=;"6<7 +MI:6Q[O!]@`<9]QX0*DEL+^.S_19*\R,]PX,R6W?K?1&NH_9'FT>S>T"8-#T& +M@@T$ES+=[7A\?_"V.\@H>$VSW??YZ9SO!<&^A_(KN0`%`KAD(IZ;&IW8U.!TV:[3WS9YO[GFG:NB=],^T;6\,\96 +M?-+5B/D]'[.#3)X/")'DOO]R.V]9T;IGEN'4W'Y; +M@\(&@DKY\B^9SVMZ5&_YO%[F^>>`("%#037@NF'^*9_ +M]1H[R*AZ6P/J`[*G#PB7/LOG][$,PP9"C&GUFQO6"WN,'61ZO4#X]5*>>!/V +ME3OK`P*KU_6G?BS3L(%0:X`]S1WVV%Y@!YEI+Q"J?;+'WYG=G1I[75/J!_VN +M+_)R32`,&VNOH;.]NP?602;="YM:;Y>YO:\I]^J=RD?K-S^,XWQMW:O6FLY/ +M>4+O`?-HFQ0(!__=*_P<'602/@!H)((^WQ/\?+/?$7V27O2+EDDK]D>?1^7] +M#4."0&P@F!1V7\H7OLD/T`RO((S\;U^UE[U!=_@0']J;=5(,`(C80%`M)+^B +MG_R=KZ6#C,T7"#B?Y;?MX^Y.0[Y`6/D1G,*R<="^V)'80&@Q.9^?\_RIS_`! +M@-,7"%!?Z*_N<%_E?[ZSP?=U_MR?5"8V$&)-U.>J5#_M;^@@0_8%@MG7^MR; +MZZ_5JR]MP/[`%_M/%0#4G(&P;<[^OU?[@#\]!YF]+Q#Z/MR?XG+?P;9]:V/W +ME7WBM_(`&,[K^D2RMA%_;($$L-A!$BM]?Z:`_]\/D($/[!8+M/_STW,*OU=&? +M2)9[FC;WT;[(<[&!8%INO^Y__I(YR"Q_@=#\@3])Q\J]7]PT?G"?^?,^&!L( +M*<;Y0__QSY:#S/<7".'?^COZ!3W]S0L8'0:L0_^;__,3G(S'^! +M4/_5O^O'G.>?NO'^#7WNA:.N6O_W36G.EU_VEP>]0`&!/-&CP''#`0>A0)X`@Z!$EB0\0/J&Q'@ +M<*4"LH`R'TVWT]$Q`X%H(002@53@&Q9D0('^1A)XG1V!`4$0V`0F=3L='C,0 +ME!A38!5H!N9@0888*'!H@5@9%A@02(%?H,NWT_$Q`T&J40:>@7A@^Q5DT($& +M!QOHA:F!`0$9&`?&?P!`RS$0+!QW8!ZH"#I?088AJ'#X@2L7'Q@0V(&#X`4( +M^>5R4AWEQ\MU@`(?YE<`PEDWDL.Q"(Z"D5>0$0H&!(%$"WCW@8!:5,4W`WIB +M-2#K=P.N?RH8MN((!@0+1X^!R`P$&D4B2`K^@B!7D+$+2AR0H$%W"@(`J6`E +M6``B08S,0.!9^(+`8#3X=@49S:#%40PN:,-@0-`+*H/"WWP%R0P$(08T*`V. +M@R)7D/$-:AS7(.94#08$SR`WJ.+U&)3,0%!JB(/D8#TH<`49\:#'D0Z><>=@ +M0!`.NH.#6,HQ$(P<]*`]:!#*80"`0"AR[(.:73X8$,R#`&$PQN\!9O[>2C?G +M77[81Y5()L=!Z!$&6T$&1Q@0]!&JH"?8#79-5I?%1P.*9K(@\(0#AEUY +ME$(8$(P%.Z!0F64&&4B@0,(5!86Z'E?F$*H=1B/@AA0``*C,0=!A-X5,H%L)B +M76%!`!96A>(=5B85NAQ:8?#W#@(`K,Q`$&J$A6-A7?A?!1EQH4`P%Z*%'-[* +MY14*!&=ATC>2>6H9X4G88\`R`T')01?:A8RA=A5D((8"@6+(%\)X*U=>:'.T +MA2^AJI4!YEP;(,_E`:Z"+^`:!&=-2`(!:=@8GH:X59!A&@(`>41)6!BJ>*Z@ +M6D?#Q8(9WPU'"Z9!I15DJ',@0;C,0!!1+(:H87`(3@49O:%`\!M.AOJ>@[4: +MMH81X2+68_`R`X%E`1P*A]2A315D0(<"@72('$Y\6U1Q*'1@AK?A6`;,#`09 +MQG18'9Z'^%B+4!"4A]LAWN=@88=&!WCX_Z%ZQ,Q`T&F8A^AA?MA-!1GUH4!P +M'[:'K*"#-1X*!.RA8.B5V6I68:B&S`P$(0=^J!\^B+-4D+$@"@0-(H`8&KI3 +M_:'3(1\*A3379CB`=88QFC*&_%V((>"`)!"8B!!BBFA+!1DH(@!01[B&\)\E +M&!N"9BNADE8;-GKSH2>51TV(4@<2!,T,!`V%@Z@B#HF\4Y#Q(PH$0:*%Z`1B +M3BWBB]@<,F$``#4S$$@60B*1:"6^95%B04`E*HE@(.9T)&H=&V*"N-AA,P-! +MA5$E7HEH(OP49)")`H&9R"7*@9B3E"@0;(D&(EM'&,:(RV"/P*;^/BMB06!FU@G`F(+77*(!($S`T''X2<"BI1BX11D0(H" +M@:1H*%J"@F)!4"@NBO<;GG@2>HC%F"9(U7&"&*&HJ-+!6?"10-`J5HJP8I'X +M'A4$<02,2`">A#-BNP8+LH0W8NO'(=:"`0"FJ'8@0>C,0)!03(JQ8K(85@$` +MQ:)`<"QNBLM@D/$JSHK&WYUX*[Z%[,Q`X%@@B\IBM[@+!1G9HD"P+4*+)V&0 +MT2S*'6%B6ABJP3,#083!+7J+\&+[$V2PBP*!NT@NJGC@8D$P+H**G)Q)^!;2 +M,P-!I?$NQHL$8UH39`",`H'`>"_Z>```O1@0V(O\(G/G+PYBC9!`D'$,C`5C +MQLBA!!D58T!P,2Z,(1O"&!`HC!'C\2?QN8>78'DW^9UWE5]5)R*>C`$BG,4= +M"00SH\9H,]YF`$#-F#,RA(Y4##C-77RK7Z\X"^:(&5!IU3$"`!E'CP'0#`0% +M!<9X,SZ-UD.0L30*!$TCR!CJZ8QM1+6((*J+BQU!,Q`H%DXCU"@V0A!!AMF8.6)REF-`@#DJ +MCDN?F*@93H0MVLHHY[6,J.++&#IVB<%<'H4<"03#8^IH/$X004;Q"`"D$;8B +MW(@K^HRHW^<(X#E%`AYER/%A*ZQC0%!Q]!@8S4`04)R.QV/XN!X$&=VC0/`] +MOHYDFO+(/#Z)A1Q',Q`8%N"C^"@_,$V2'BCM,:B&CY^8Z@H>AXYP4`M)%`$$2ND$2D;@4`#)%'9`?9"D*/*N&N +M:"-V71K?KX@;YE$N9$`04<:='1D0&!'\I%L'HF8]_$T`T&B,4@6DICD)#E?`34#0<-Q26:2K*1Q$&2@D@*!*OE)8DZ< +M9$#@29*2(Z(/>3J1BH+9&[5#SG$PHRD)9WE&`@$QV4H>DZP:`&!,*I-*),7' +M1+Z":QVO"$7:AD1CSU!:P9(!0 +M!]4,!`&&/$E/'I2S09`Q4`H$!:4^Z4[=DP%!/OE/_HYP(JI'U0P$A89!B5!N +ME*Y!D'%1"@09I4-9Y2V4`4%#.5'VD'YDD8?5#`0)AT;)4;Z4J4&0L5(*!"VE +M2+E6?90!04AY4DZ,$F'DU^_ICO_>165!P%<*EJKB(!9H$`2!!F*I6&Z6 +MD4&0<5D.!)DE9`D`-)8"P6-)6>:-;%K!01`4')HE9^E:,@9!AFHY$+"6HN5G +M*1"$EJ>E\ZCB\9(9G&?8"0Z6-5H>)1>U'J]E<5D;!!G#I4!`%_65N6)_UY71 +MAM,DCBA%ZHC8BFPI$!0E=IF\VR'8)52*7!<%RF5L>A7&C +M74$0V!7=Y7?I7OH%089Z.1"PEZ*E=CD0<)?L(\267Q`$^45[^5[^EWE!D+%? +M#@3]I6@I7PH$].5YN17&C7T&0=!G^)<`9H1)%P09#>9`\&"*E@.F0%!@*IAN +MX2`6$*6&.F&]!D/%A#@0AIFA980H$%R:'F1G>D#XE10A46H2\(]VV +M.*J1>%L>M14-!#LFB>EC:@9!1H^9>D"5S67JEVC9@"YA>%@TYE$GID`07$$0R!54II5I9H8%08:8 +M.1"0F:)EEBD0;)DNII)Y4M47!$%]46:>F7@F5Q!DT)D#@9TI6JJ9`@&;&6=6 +MDWE?GD$0Y!EW9IZI:%X%08:A.1`@FJ(EGRD0^)F#YG19Y/4;!$&_D6@NFIRF +M5!!D8)H#@:8I6CJ:`@&D66EBE6Y>C)D[9H(LXR9H8]:08*9HF$<%1:1'IVEK +M%@9!!JTI$`Q%S.4S*1OZ=]*D54E-6IK69!X%:@H$_4:/<4X0!.?$IGEK/IL] +M09"Q;`X$S:9HJ6L&!+SFJ6E#TGQN!4'@5CB;T&:X210$&=WF0/!MBI;3I@OR +M9>*8J%Y\01#$%^"FN"EO_@1!AKLY$,";HF6Y*1"HF7@*1`,GF4G7`D`M!D$09O1 +M>#Z>H&=&MWD6!)ZG:"EY"@249^89(")! +MJJ71SE-2T7L:7PV!4$&'#00R$%.)SWD5N9`4V=` +M$!`1FUJ4I*)#$`0ZQ#2%!PU#C)H?Q'U^G^!G^%D('4(!@#I0$)B?!L'1>#0> +MGW=E+[1!B)_P9_QI0MR8CB+[:7]F!T'&]3D09)^BI?))>*R;CJ*D<@(-!-J$ +M]@E^OD[>I_RI@"Z@\"?YR0X4!`]H^ED0K)_WYU+I?OY"#&@&"@RA33AGU:GS +M5:`@:-)9@IA`\E<'JG,Z6/JG0,!_YIX!I=$9@KZ@KL&-`*(,!#<#$":#V@P$ +M%%9!HHA9'Z.!>$.HARB*F+4^&H@'#V5CA$HV2*B3`H,NH7+!C5"G$`1U"F1U +M(\0I8I;KN"AB%7D*09"G3%,_*!/JA4H0-T(6.A!LH39H:5,01*'/%E;1IQ`$ +M?0H76M9\H7!H`W$CK*$#01M:AHJA`@$9>H4"`(`*00"HN*%]6!PJB#8/-T(? +M.A#\H64H'2H0V*%[Z*!"$`PJ@.@@*HE2#S>"(SH00*)EJ"$J$""B>ZBA0A`8 +M*I'H)"J*X@LW@B@L*HS:!S>"+SH0`*-EJ"TJ$."B>^BC0A`\*L'H,"J- +MQ@@X*H^>!S>".SH0P*-EJ#DJ$*"C>RBF0A!@*O'H/"J0B@VBH0A"$*B'I2"J33@E0*I4F +M!S>"4SH00*5EJ%$J$""E>ZCF@:9H65WH5"J6/@?BQ`CD`@F.56E!@)7NH:T* +M(A65CJ5P*7!P([2EZ)04&J+X'7\85A&KB%DAPEL:E_ZEN\&-L)=J$'UI&4J7 +M)@EYJ0\T`O$0?BE@ZIC:!C="K2)F,:9EZ&"*)!2F>^A(I$$4$8WI8^J9Q@8W +M@F:*&YE0D>EBFH,"`+R*F'5-=*:?:6O*&MP(J:D&L9J6H:*IHW2:9D$:!#?! +MFKJFO.EI<"/@IDB";EJ&QJ9(PFRZAQ(K8A8YL9OVILRI:+""C$#*:1D*G)X( +MPND>BJR(62S"=0>,T`F6G92ARJD%$IWLHLR)FL0S:*7>JGF(&-X)Y +MJD&@IV7H=:I!@*=[*+0B9KD3Z>EZJI].!C>"?:I!X*=EJ'N*),"G>RBU(F;- +M$_GI?JJ@.@8W@H&J02"H9:A_BB0`J'LHMB)FW1,)ZH*JH28&-X*%JD%@J&6H +M@XHD0*A[J"BD0>P3&>J&JJ(2!C>"B8HDH*AEJ(>*)("H>RBX(F;]$RGJBJJC +M_@4W@HVJ0>"H9:B+>B+`J'LHN2)F#10YZHZJI.H%-X*1JD$@J66HCXHD`*E[ +M*+HB9AT42>J2JJ76!3>"E:I!8*EEJ).*)$"I>RB[(F8M%%GJEJJFP@4W@IFJ +M0:"I9:B7BB2`J7LHO")F/11IZIJJIZX%-X*=JD'@J66HFXHDP*E[*+TB9DT4 +M>>J>JJB:!3>"H:I!(*IEJ)^*)`"J>RB^(F;-"(GJHJJIA@4W@J6J06"J9:BC +MBB1`JGLHOR)F<129ZJ:JJG(%-X*IJD&@JF6HIXHD@*I[*,`B9M4(J>JJJJM> +M!3>"K:I!X*IEJ*N*),"J>RC!(F:1%+GJKJJL2@4W@K&J02"K9:BOBB0`JWLH +MPB)FP0S)ZK*JK38%-X*UJD%@JV6HLXHD0*M[*,,B9K$4V>JVJJXB!3>"N:I! +MH*MEJ+>*)("K>RC$(F;)#.GJNJJO#@4W@KVJ0>"K9:B[BB3`JWLHQ2)FT13Y +MZKZJL/H$-X+!JD$@K&6HOXHD`*Q[*,8B9D6=GJ.[%I8NK!RK5W`C6*P:!,9J +M#]&``$##.@)!K'LHQR)F\10):\?JLM8$-X+*JD&PK&4HR(HDB*R,D<^)58`L +M8M8*T;*^K$`K3'`C\*P:A,]:ALJL2`+-NH>2+&)6!_&S!JU0ZTIP(S"M&H33 +M6H82K4B"T;J'HBQBEL/PM$:M8*M)<"-PK1J$UUJ&4JU(@M6ZA[(L8M;FE+%Z +M8AMKV"JW)@4W`MNJ0;BM(RLL6+(J"2.0V;J'PBQB%O3D@[ZA&O."FQB%32+F!4\#:Z!J.&JN3*LP-,(=+DRKK/AWIJX +M(@F+:]X:36(5.(N8!4-AKIMKZQH4W`BIJP:QNH*N_MW>6KEJ$)^KZ:JSPA.\CVL:R*`LIILW#`"9;*,+%*%5;PM8I:3%\LB";FL+XLB8!5WBYCE;`VSQ.PD>R-$ +MLQK$-)O*'K,:1#+KS.ZQ>XN8]6Y1L]4L('LCA+,:Q#B;RF*S2((V^\UB%7^+ +MF/5PD;/EK!M[(\2S&L0\F\JBLTB".OO.%EPCD,M%S]:S7.R-,+B(60)M*HO/ +M(@GZ[#][N(A9&-<62]`2LS?"0ZM!1+3;ZT&K022T_^SB(F;]70/M1'O#W@@> +MK08!TJ:R%BV2@-'JL5C%XR)F>5XAK4A+PMX(+JT&`=.FLB4MDG#2_K.3BYC5 +M>\6T,NT#>R/TM!K$3YO*UK1(PDW[SUXN8M;V!=0&M?CKC<#4:A!.;2I+U"() +M1NT_N[F(6?G74PO5DJ\WPE:K072UJ>Q4BR14M?_LYR)FD5\2[5<;R`(Y(Q!; +MN[V*M4@"6?O/CBYBUA'FU;JUU>N-@-=J$'IM*JO6:A!R+4O[A8U`/]A>R]<" +MKS?"Z2)F);:I[%^+)`2V_^SJ(F8]86WM8MO%0A4C$&:[O3JV&@1D^\^^+F(6 +M)W;&-K":[4AK,(Q`IJTSN[=:MAJ$9VO8SBYBEBYVVHJPJ:T->R/0MAJ$;>O: +MW@BDK0;1V@JQ&^SM(F:A8IEM;JO:&K<:!'*[O?*V2()O2]RV5UC%[B)F$63) +MK7([T_8-(Q!VN[TRMTB"B.0MQJ$>?O;,0%N9?7O?ZK8#KIA5X+ZW +M^BV2P-\&N(VLV#`"Y66*[8$+MMX(RXN81>&FLL>+@GN:/B]BUEF6W5JX8"U9 +M-@*)N-MKAJM!;+C_[/0B9@%G%2Z)&[3>""ZN!@'CIK(@K@:!XAJVUXN8I9W% +MN#+NRWHC]+@:Q(^;RM:X2,*-^\]N+V(6?0;D!KD=ZXW`Y&H03FXJ2^0B"4;N +M/_N]B%D/VI,+Y2ZL-\*6JT%TN:GLE(LD5+G_[/@B9IUH7NZ7NZ_>"&JN!L'F +MIK)B+I)`YOZSYXN89:&-N&YNZWHCY+D:Q)Z[O<:Y2,*<^\^N+V(6D,;G]KF: +MZXV`Z&H0BN[V"N@B"8*N8?N^B%F!FH'+Z`:O-\*EJT%DNN_MHXLD1+J&[?PB +M9NEI;>ZFJZW>"*:N!H'JIK*>+I(`ZD*XKFSV-`()#E^KJKNDW@CWBYB%ZY:A +MK2Z2\.K^L_N+F,6LI;JZ[JYZ(Q2[&L2QF\KVNAK$K[N'_B](`J^VZ":[%RX` +M0.V>"-;N]LKL(@G.[C\KP(A9#!NRB^VJJC?"N*M!E+NI[+8;`'2[AJT!(V:5 +M;.;NN:NIW@CRK@9![Z:RZBZ2P.[^LPJ,F,6SU;OVKJ)Z(P2\&L3`F\KFNTC" +MOOO/.C!BUM1&\!:\>NJ-`/%J$!)O*HOP(@D*[S\KP8A9:]O$2_&JJ3?"QZM! +MA+RI[,6+)&2\_ZP%(V9M;=?NR!OE8FTC$,R[O9J\2`+*^\]J,&)6ZB;RRKR[ +M+NHV`OF\J:S+JT'8O(:M!R-F`6^:+M`+M=X(2J\&P?2^MSRO!D'T_K,BC)BE +MO?V\3J^.>B-DO1K$UIO*1KU(PM1+Z_ZR)HR81;\UO5VOD`L`I+T:Q-K[WH*] +M2(+8^\^J,&(6!,?VMKTS+]ZK0>B][RWZ@1(V:UL`8!`I>A +M%C"2@`'_LUJ,F-742<`B\%]Z([3`&L0+G,J6P$C"";R'>C%BUD\7\\;`!B]/ +M-P+YP-LK#8PDV,#_K!@C9B%V,#`0/);>"$JP!L$$I[(\L`9!!!NV9HR8Y=DU +MP4[P5'HC9,$:Q!:+)/>"(:P!H$( +MI[)^,.-QFMHQ8I9TIP(61I>(HP)3Z0W +MPBBL093"J>PFC"1TPH:M'R-FN7BF\"D\D-X(LK`&00NGLJHPDL`*_[."C)@E +MY-7"MO`\>B,$PQK$,)S*YL)(PB[\SQHR8A:61PP7P^/HC0`-:Q#2<"J+#",) +MRO`_J\B(65'>-$P-3Z,WPC>L083#J>PUC"1DP_^L(R-F>7F7\#B\H-X([K`& +M`0]OK^8PDH`._[.2C)@5Z,7#\O!^>B/TPQK$/[R]UL-(PCULV%HR8E:N)PX' +MQ+/HC<`0:Q`.<2I+$",)!K%AJ\F(6<_>0PP1CZ(WPD:L073$J>Q$C"14Q/^L +M)R-F(7L>\4<\B=X(*K$&P1*GLB(QDD`2_[.BC)CE[;7$+O$@>B/DQ!K$3IS* +MQL1(PDS\SYHR8M:Z!Q#WQ-CO#3,"*<7;*U",)`C%_ZPJ(V;%?#PQ4PR'W@A6 +ML0:!%:>R2+$&`14;MJZ,F(7T[;U:\3P,`)3%&L19_-YVQ4C"5_S/RC)B5M"7 +M%:?%3.B-0!=K$'9Q*LL6(PEN<>6+5=@R8E;6=Q?CQ3#HC4`8:Q"&<2J[%R,) +M??$_J\N(66_?88P8AZ`WPF2L053&J>QBC"0TQO^L+R-F&7Z6\65<@=X(HK$& +M01JGLIHQDL`9_[/"C)A5_"W%IC$%W"6-0+/Q]IH:(PFK\3]KS(A9OU]I7!NS +MGS?";ZQ!!,>I;&RL0>3&AJTR(V95?\+Q<&Q\W@C.L08!':>RQC&2@!S_L\Z, +MF)7^1QY(W3'&L1WG,I6QTC"=?S/2C-B5O\''H?'H.>-P!YK$.YQ*DL> +M(PGF\3]KS8A9"2!M#!\_P0#`?JQ!],?;ZWR,)-3'_ZPV(V8Q@>_Q?^QWW@@* +ML@;!(*>R`C*20"`;MMZ,F.4%-L@.-@")K$"IR*@LB(PDB\C]KSHA9@N"*S"(CG3?"C:Q!Y,BI[(N,),3( +M_ZPZ(V91@CKRCAQSW@A&L@:!)*>R/C*2`"3_L^Z,F(4(^L=*\B)<"(Y`5_+V +MVB0C"4_R/RO/B%G)8)*<)5N<-\*8K$&4R:ELE:Q!=,F&K3TC9FV#9O*93'#> +M"'*R!D$GI[)J,I+`)O^S^HR8U0[6R7:RO'DC!,H:Q*"_,_Z,V+6 +M/T@H%\KAYHT`*6L0DG(JBR@C"8KR/RO0B%D0X:1,*3^;-\*GK$&$RJGLI8PD +M9,K_K$$C9A&$6/*H;`PGA",0K+R]FLI(`JK\SRHT8A9)&"O+RM4PB30"^RO+(&02P;MA*-F$45-LO.LJ)Y +M(V3+&L2VG,I&RTC"M/S/6C1B5F"(%G?+0NF-@"YK$.KR>PLN(PGB\C^KT8A9 +M>R&WS"Z?F3?"O:Q!Y,NI[+N,),3+@C$`X-&(69*AOKPO6YDWPL&L023,J:R_ +MC"0`S/^L2"-F,8<*\\+\8]X(%K,&@3&GL@XSD@`Q_[,FC9AU'&;,&C.)>2.4 +MS!K$R9S*=LQ(PL?\SZHT8I9VB#*GS!+FC4`S:Q`VR=C.2@#?_LT*-F$4G&LV",SD< +M)8Y`C_-[6S@C"8?S/VO4B%F*(N0<.0^C-\+FK$%TSN]MXZQ!5,X%LU(C9GV* +MGO/G'!$#`*JS!L$ZO[>B,Y)`.A?,3HV8I2D&SJZS8GDCY,X:Q.Z".:S!H$^O[?>,Y(`/O^S7HV8!3&FS^JS +M('HCU,\:Q/W\WK;/2,+[7#"+-6(6R8@_Y\];,0!`0&L0!O1[RS\C"?YSY8M` +MZ[Y(XPC4@Z:R,ZA`4(/NH3Z*F)4U+L\3M/UY(W30&L0'O;WNH&_-:1JEB%EM +MXP$=0C?/`,`*K4&TT.\M"8TDF-"&K9@B9B6.+O0+_8+>"#JT!L%#O[]M%JU!A-$%\Q,Z$*"AVC,; +M/4_>"$&H!C&$8M`XZ!^680PI8A;_>,86H4EH(GV$+M(QBAXM-MX(A+0&84B_ +MMWTTDO!'?[,9AI4B9D&0AS0C[4DKTJ`T;NM(%XPW@B:M07#2[VTDC21,TA+T +M*/V8`@KM0`"@`%`!P@P`E`1``5\`I\`L4`I(0!$``F`(0\`2\$LG`43`$>!+ +M_PIY@A2P*P0!IH(O#05@")7"H<`$@`#/]!-@!1#3=4+W4`5``5``HD`%Q`F6 +M0C<]!20!6$"<,"?XTG8"GJ`G=`]Z`C--!20!0\`4`#=-"E.`+WTH.`$.R1#P +M31,!8<(00$U7`4*`KS`%]-*!@A%@*N5*_]1`=5`M5`_51'51;50? +MU4AU4JU4+]5,=5/M5#_54'54+55/U51U56U57]58=5:M56_57'57[55_U6!U +M6"U6C]5D=5EM5I_5:'5:K5:OU6QU6^U6O]5P=5PM5\_5='5=;5??U7AU7JU7 +M[]5\=5_M5__5@'5@+5@/UH1U86U8']:(=6*M6"_6C'5C[5@_UI!U9"U93]:4 +M=65M65_6F'5FK5EOUIQU9^U9?]:@=6@M6H_6I'5I;5J?UJAU:JU:K]:L=6OM +M6K_6L'5L+5O/UK1U;6U;W]:X=6ZM6^_6O'5O[5O_UL!U<"U<#]?$=7%M7!_7 +MR'5RK5POU\QU<^U6U>G]?H=7JM7J_7['5[[5Z_U_!U?"U?S]?T=7UM7]_7^'5^K5_O +MU_QU?^U?_]<`=H`M8`_8!':!;6`?V`AV@JU@+]@,=H/M8#_8$':$+6%/V!1V +MA6UA7]@8=H:M86_8'':'[6%_V"!VB"UBC]@D=HEM8I_8*':*K6*OV"QVB^UB +4O]@P=HPM8\_8-':-;6/?V#BVW0$` +` +end diff --git a/lib/libarchive/test/test_fuzz_1.iso.uu b/lib/libarchive/test/test_fuzz_1.iso.uu deleted file mode 100644 index 42e9300d593..00000000000 --- a/lib/libarchive/test/test_fuzz_1.iso.uu +++ /dev/null @@ -1,26993 +0,0 @@ -$FreeBSD$ -begin 644 test_fuzz_1.iso -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````!0T0P,#$!`$9R965"4T0@("`@("`@("`@("`@("`@("`@("`@ -M("`@0T123TT@("`@("`@("`@("`@("`@("`@("`@("`@("```````````%$" -M``````)1```````````````````````````````````````````!```!`0`` -M`0`("`"B"``````(HA0`````````````%@`````B`!P````````<``@````` -M"`!L"Q8)#`W@`@```0```0$`("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@34M) -M4T]&4R!)4T\@.38V,"](1E,@1DE,15-94U1%32!"54E,1$52("8@0T1214-/ -M4D0@0T0M4B]$5D0@0U)%051/4B`H0RD@,3DY,R!%+EE/54Y'1$%,12`H0RD@ -M,3DY-R!*+E!%05)33TXO2BY30TA)3$Q)3D<@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`R,#`X,3$R,C`Y,3(Q,S`PX#(P,#@Q,3(R,#DQ,C$S,##@ -M,#`P,#`P,#`P,#`P,#`P,``R,#`X,3$R,C`Y,3(Q,S`PX`$`("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````)#1#`P,0$``$8`<@!E -M`&4`0@!3`$0`(``@`"``(``@`"``(``@`"``0P!$`%(`3P!-`"``(``@`"`` -M(``@`"``(``@`"``(```````````40(``````E$E+T4````````````````` -M``````````````````````$```$!```!``@(`'()``````ER&``````````` -M```:`````"(`[@```````.X`"``````(`&P+%@D,#>`"```!```!`0``(``@ -M`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"`` -M(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@ -M`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"`` -M(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@ -M`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"`` -M(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@ -M`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"`` -M(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@ -M`"``(``@`"``(``@`"``(``@`"``30!+`$D`4P!/`$8`4P`@`$D`4P!/`"`` -M.0`V`#8`,`!?`$@`1@!3`"``1@!)`$P`10!3`%D`4P!4`$4`30`@`$(`50!) -M`$P`1`!%`%(`(``F`"``0P!$`%(`10!#`$\`4@!$`"``0P!$`"T`4@!?`$0` -M5@!$`"``0P!2`$4`00`@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@ -M`"``(```(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`"```"`` -M(``@`"``(``@`"``(``@`"``(``@`"``(``@`"``(``@`#(P,#@Q,3(R,#DQ -M,C$S,##@,C`P.#$Q,C(P.3$R,3,P,.`P,#`P,#`P,#`P,#`P,#`P`#(P,#@Q -M,3(R,#DQ,C$S,##@`0`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@ -M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(``````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````_T-$,#`Q`0`````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````!-2TD@4V%T($YO=B`R -M,B`P.3HQ,CHQ,R`R,#`X"FUK:7-O9G,@,BXP,2`M52`M4B`M2B`M;R!C9"YI -M`$$` -M`0!8````'P!!``$`4@```"``00`!`$P````A`$$``0!&````(@!!``$`0``` -M`",`00`!`#H````D`$$``0`T````)0!!``$`+@```"8`00`!`"@````G`$$` -M`0#E````*`!!``$`(P```"H`00`!`-T````K`$$``0#7````+`!!``$`T0`` -M`"T`00`!`,L````N`$$``0#%````+P!!``$`OP```#``00`!`+D````Q`$$` -M`0"S````,@!!``$`K0```#,`00`!`*<````T`$$``0"A````-0!!``$`FP`` -M`#8`00`!`)4````W`$$``0"/````.`!!``$`B0```#D`00`!`(,````Z`$$` -M`0!]````.P!!``$`=P```#P`00`!`'$````]`$$``0!K````/@!!``$`90`` -M`#\`00`!`%\```!``$$``0!9````00!!``$`4P```$(`00`!`$T```!#`$$` -M`0!'````1`!!``$`00```$4`00`!`#L```!&`$$``0`U````1P!!``$`+P`` -M`$@`00`!`"D```!)`$$``0#F````2@!!``$`)````$L`00`!`-X```!,`$$` -M`0#8````30!!``$`T@```$X`00`!`,P```!/`$$``0#&````4`!!``$`P``` -M`%$`00`!`+H```!2`$$``0"T````4P!!``$`K@```%0`00`!`*@```!5`$$` -M`0"B````5@!!``$`G````%<`00`!`)8```!8`$$``0"0````60!!``$`B@`` -M`%H`00`!`(0```!;`$$``0!^````7`!!``$`>````%T`00`!`'(```!>`$$` -M`0!L````7P!!``$`9@```&``00`!`&````!A`$$``0!:````8@!!``$`5``` -M`&,`00`!`$X```!D`$$``0!(````90!!``$`0@```&8`00`!`#P```!G`$$` -M`0`V````:`!!``$`,````&D`00`!`"H```!J`$$``0#G````:P!!``$`)0`` -M`&P`00`!`-\```!M`$$``0#9````;@!!``$`TP```&\`00`!`,T```!P`$$` -M`0#'````<0!!``$`P0```'(`00`!`+L```!S`$$``0"U````=`!!``$`KP`` -M`'4`00`!`*D```!V`$$``0"C````=P!!``$`G0```'@`00`!`)<```!Y`$$` -M`0"1````>@!!``$`BP```'L`00`!`(4```!\`$$``0!_````?0!!``$`>0`` -M`'X`00`!`',```!_`$$``0!M````@`!!``$`9P```($`00`!`&$```""`$$` -M`0!;````@P!!``$`50```(0`00`!`$\```"%`$$``0!)````A@!!``$`0P`` -M`(<`00`!`#T```"(`$$``0`W````B0!!``$`,0```(H`00`!`"L```"+`$$` -M`0#H````C`!!``$`)@```(T`00`!`.````".`$$``0#:````CP!!``$`U``` -M`)``00`!`,X```"1`$$``0#(````D@!!``$`P@```),`00`!`+P```"4`$$` -M`0"V````E0!!``$`L````)8`00`!`*H```"7`$$``0"D````F`!!``$`G@`` -M`)D`00`!`)@```":`$$``0"2````FP!!``$`C````)P`00`!`(8```"=`$$` -M`0"`````G@!!``$`>@```)\`00`!`'0```"@`$$``0!N````H0!!``$`:``` -M`*(`00`!`&(```"C`$$``0!<````I`!!``$`5@```*4`00`!`%````"F`$$` -M`0!*````IP!!``$`1````*@`00`!`#X```"I`$$``0`X````J@!!``$`,@`` -M`*L`00`!`"P```"L`$$````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````!`````!P``0```0````#B``%!`!\`````Z0`!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%!00`(`````!X``7)R7VUO=F5D`0`` -M``#C``)!`!\`````ZP`#04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M00`!`````"$`!$$`!`````#A``1!,#`P!`````#;``1!,#`Q!`````#5``1! -M,#`R!`````#/``1!,#`S!`````#)``1!,#`T!`````##``1!,#`U!`````"] -M``1!,#`V!`````"W``1!,#`W!`````"Q``1!,#`X!`````"K``1!,#`Y!``` -M``"E``1!,#!!!`````"?``1!,#!"!`````"9``1!,#!#!`````"3``1!,#!$ -M!`````"-``1!,#!%!`````"'``1!,#!&!`````"!``1!,#!'!`````![``1! -M,#!(!`````!U``1!,#!)!`````!O``1!,#!*!`````!I``1!,#!+!`````!C -M``1!,#!,!`````!=``1!,#!-!`````!7``1!,#!.!`````!1``1!,#!/!``` -M``!+``1!,#!0!`````!%``1!,#!1!``````_``1!,#!2!``````Y``1!,#!3 -M!``````S``1!,#!4!``````M``1!,#!5!``````G``1!,#!6`0````#D``5! -M`!\`````[0`&04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!00`!```` -M`"(`!T$``0````#<``E!``$`````U@`*00`!`````-``"T$``0````#*``Q! -M``$`````Q``-00`!`````+X`#D$``0````"X``]!``$`````L@`000`!```` -M`*P`$4$``0````"F`!)!``$`````H``300`!`````)H`%$$``0````"4`!5! -M``$`````C@`600`!`````(@`%T$``0````""`!A!``$`````?``900`!```` -M`'8`&D$``0````!P`!M!``$`````:@`<00`!`````&0`'4$``0````!>`!Y! -M``$`````6``?00`!`````%(`($$``0````!,`"%!``$`````1@`B00`!```` -M`$``(T$``0`````Z`"1!``$`````-``E00`!`````"X`)D$``0`````H`"=! -M``$`````Y0`H00`!`````",`*D$``0````#=`"M!``$`````UP`L00`!```` -M`-$`+4$``0````#+`"Y!``$`````Q0`O00`!`````+\`,$$``0````"Y`#%! -M``$`````LP`R00`!`````*T`,T$``0````"G`#1!``$`````H0`U00`!```` -M`)L`-D$``0````"5`#=!``$`````CP`X00`!`````(D`.4$``0````"#`#I! -M``$`````?0`[00`!`````'<`/$$``0````!Q`#U!``$`````:P`^00`!```` -M`&4`/T$``0````!?`$!!``$`````60!!00`!`````%,`0D$``0````!-`$-! -M``$`````1P!$00`!`````$$`14$``0`````[`$9!``$`````-0!'00`!```` -M`"\`2$$``0`````I`$E!``$`````Y@!*00`!`````"0`2T$``0````#>`$Q! -M``$`````V`!-00`!`````-(`3D$``0````#,`$]!``$`````Q@!000`!```` -M`,``44$``0````"Z`%)!``$`````M`!300`!`````*X`5$$``0````"H`%5! -M``$`````H@!600`!`````)P`5T$``0````"6`%A!``$`````D`!900`!```` -M`(H`6D$``0````"$`%M!``$`````?@!<00`!`````'@`74$``0````!R`%Y! -M``$`````;`!?00`!`````&8`8$$``0````!@`&%!``$`````6@!B00`!```` -M`%0`8T$``0````!.`&1!``$`````2`!E00`!`````$(`9D$``0`````\`&=! -M``$`````-@!H00`!`````#``:4$``0`````J`&I!``$`````YP!K00`!```` -M`"4`;$$``0````#?`&U!``$`````V0!N00`!`````-,`;T$``0````#-`'!! -M``$`````QP!Q00`!`````,$`$$``0````"7`'E! -M``$`````D0!Z00`!`````(L`>T$``0````"%`'Q!``$`````?P!]00`!```` -M`'D`?D$``0````!S`']!``$`````;0"`00`!`````&<`@4$``0````!A`()! -M``$`````6P"#00`!`````%4`A$$``0````!/`(5!``$`````20"&00`!```` -M`$,`AT$``0`````]`(A!``$`````-P")00`!`````#$`BD$``0`````K`(M! -M``$`````Z`",00`!`````"8`C4$``0````#@`(Y!``$`````V@"/00`!```` -M`-0`D$$``0````#.`)%!``$`````R`"200`!`````,(`DT$``0````"\`)1! -M``$`````M@"500`!`````+``ED$``0````"J`)=!``$`````I`"800`!```` -M`)X`F4$``0````"8`)I!``$`````D@";00`!`````(P`G$$``0````"&`)U! -M``$`````@`">00`!`````'H`GT$``0````!T`*!!``$`````;@"A00`!```` -M`&@`HD$``0````!B`*-!``$`````7`"D00`!`````%8`I4$``0````!0`*9! -M``$`````2@"G00`!`````$0`J$$``0`````^`*E!``$`````.`"J00`!```` -M`#(`JT$``0`````L`*Q!```````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````0#N`````0````(`L`$```$``$&``+```00(`70$``'D``$$"`%X!``!Z``!! -M`@!?`0``>P``00(`8`$``'P``$$"`&$!``!]``!!`@!B`0``?@``00(`8P$` -M`'\``$$"`&0!``"```!!`@!E`0``@0``00(`9@$``((``$$"`&`$``)0``$$"`'D!``"5``!! -M`@!Z`0``E@``00(`>P$``)<``$$"`'P!``"8``!!`@!]`0``F0``00(`?@$` -M`)H``$$"`'\!``";``!!`@"``0``G```00(`@0$``)T``$$"`((!``">``!! -M`@"#`0``GP``00(`A`$``*```$$"`(4!``"A``!!`@"&`0``H@``00(`AP$` -M`*,``$$"`(@!``"D``!!`@")`0``I0``00(`B@$``*8``$$"`(L!``"G``!! -M`@",`0``J```00(`C0$``*D``$$"`(X!``"J``!!`@"/`0``JP``00(`D`$` -M`*P``$$"`)$!``"M``!!`@"2`0``K@``00(`DP$``*\``$$"`)0!``"P``!! -M`@"5`0``L0``00(`E@$``+(``$$"`)`0``N@``00(`GP$``+L``$$"`*`!``"\``!!`@"A`0``O0``00(`H@$` -M`+X``$$"`*,!``"_``!!`@"D`0``P```00(`I0$``,$``$$"`*8!``#"``!! -M`@"G`0``PP``00(`J`$``,0``$$"`*D!``#%``!!`@"J`0``Q@``00(`JP$` -M`,<``$$"`*P!``#(``!!`@"M`0``R0``00(`K@$``,H``$$"`*\!``#+``!! -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````$`````[@`!```"`````;```0!!@`````&W``$`00!! -M`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$` -M00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!! -M`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00(````!L0`"`$&` -M`````;@``P!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!! -M`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$` -M00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!! -M`@````&R``0`08`````!N0`%`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$` -M00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!! -M`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$` -M00!!`$$`00!!`$$"`````;,`!@!!`@````&T``@`00(````!M0`)`$$"```` -M`;8`"@!!`@````#O``L`00(`````\``,`$$"`````/$`#0!!`@````#R``X` -M00(`````\P`/`$$"`````/0`$`!!`@````#U`!$`00(`````]@`2`$$"```` -M`/<`$P!!`@````#X`!0`00(`````^0`5`$$"`````/H`%@!!`@````#[`!<` -M00(`````_``8`$$"`````/T`&0!!`@````#^`!H`00(`````_P`;`$$"```` -M`0``'`!!`@````$!`!T`00(````!`@`>`$$"`````0,`'P!!`@````$$`"`` -M00(````!!0`A`$$"`````08`(@!!`@````$'`",`00(````!"``D`$$"```` -M`0D`)0!!`@````$*`"8`00(````!"P`G`$$"`````0P`*`!!`@````$-`"D` -M00(````!#@`J`$$"`````0\`*P!!`@````$0`"P`00(````!$0`M`$$"```` -M`1(`+@!!`@````$3`"\`00(````!%``P`$$"`````14`,0!!`@````$6`#(` -M00(````!%P`S`$$"`````1@`-`!!`@````$9`#4`00(````!&@`V`$$"```` -M`1L`-P!!`@````$<`#@`00(````!'0`Y`$$"`````1X`.@!!`@````$?`#L` -M00(````!(``\`$$"`````2$`/0!!`@````$B`#X`00(````!(P`_`$$"```` -M`20`0`!!`@````$E`$$`00(````!)@!"`$$"`````2<`0P!!`@````$H`$0` -M00(````!*0!%`$$"`````2H`1@!!`@````$K`$<`00(````!+`!(`$$"```` -M`2T`20!!`@````$N`$H`00(````!+P!+`$$"`````3``3`!!`@````$Q`$T` -M00(````!,@!.`$$"`````3,`3P!!`@````$T`%``00(````!-0!1`$$"```` -M`38`4@!!`@````$W`%,`00(````!.`!4`$$"`````3D`50!!`@````$Z`%8` -M00(````!.P!7`$$"`````3P`6`!!`@````$]`%D`00(````!/@!:`$$"```` -M`3\`6P!!`@````%``%P`00(````!00!=`$$"`````4(`7@!!`@````%#`%\` -M00(````!1`!@`$$"`````44`80!!`@````%&`&(`00(````!1P!C`$$"```` -M`4@`9`!!`@````%)`&4`00(````!2@!F`$$"`````4L`9P!!`@````%,`&@` -M00(````!30!I`$$"`````4X`:@!!`@````%/`&L`00(````!4`!L`$$"```` -M`5$`;0!!`@````%2`&X`00(````!4P!O`$$"`````50`<`!!`@````%5`'$` -M00(````!5@!R`$$"`````5<`0!!`@````%>`'H` -M00(````!7P![`$$"`````6``?`!!`@````%A`'T`00(````!8@!^`$$"```` -M`6,`?P!!`@````%D`(``00(````!90"!`$$"`````68`@@!!`@````%G`(,` -M00(````!:`"$`$$"`````6D`A0!!`@````%J`(8`00(````!:P"'`$$"```` -M`6P`B`!!`@````%M`(D`00(````!;@"*`$$"`````6\`BP!!`@````%P`(P` -M00(````!<0"-`$$"`````7(`C@!!`@````%S`(\`00(````!=`"0`$$"```` -M`74`D0!!`@````%V`)(`00(````!=P"3`$$"`````7@`E`!!`@````%Y`)4` -M00(````!>@"6`$$"`````7L`EP!!`@````%\`)@`00(````!?0"9`$$"```` -M`7X`F@!!`@````%_`)L`00(````!@`"<`$$"`````8$`G0!!`@````&"`)X` -M00(````!@P"?`$$"`````80`H`!!`@````&%`*$`00(````!A@"B`$$"```` -M`8<`HP!!`@````&(`*0`00(````!B0"E`$$"`````8H`I@!!`@````&+`*<` -M00(````!C`"H`$$"`````8T`J0!!`@````&.`*H`00(````!CP"K`$$"```` -M`9``K`!!`@````&1`*T`00(````!D@"N`$$"`````9,`KP!!`@````&4`+`` -M00(````!E0"Q`$$"`````98`L@!!`@````&7`+,`00(````!F`"T`$$"```` -M`9D`M0!!`@````&:`+8`00(````!FP"W`$$"`````9P`N`!!`@````&=`+D` -M00(````!G@"Z`$$"`````9\`NP!!`@````&@`+P`00(````!H0"]`$$"```` -M`:(`O@!!`@````&C`+\`00(````!I`#``$$"`````:4`P0!!`@````&F`,(` -M00(````!IP##`$$"`````:@`Q`!!`@````&I`,4`00(````!J@#&`$$"```` -M`:L`QP!!`@````&L`,@`00(````!K0#)`$$"`````:X`R@!!`@````&O`,L` -M00`````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````"(`!P````````<``@`````"`!L"Q8)#`W@`@```0`` -M`0$`4U`'`;[O`%)2!0&!4%@D`>U!`````$'M!0````````7H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!#11P!N@$``````;H` -M`````````.T```````#M9@`<````````'``(``````@`;`L6"0P-X`(```$` -M``$!`5)2!0&!4%@D`>U!`````$'M!0````````7H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`#B````````X@`(``````@` -M;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M^`#I````````Z0`(``````@`;`L6"0P-X`(```$```$?04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!05)2!0&)3DV7`0%!04%!04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04-%'`$= -M````````'0``````````L````````+!Z`!X````````>`!@`````&`!L"Q8) -M#`W@`@```0```0AR!L"Q8) -M#`W@;`L6"0P-X``````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````$Y-<@$`04%! -M04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!04%!04%!04%!04%!05!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````9@`>````````'@`8`````!@`;`L6"0P-X`(```$` -M``$!`%)2!0&!4%@D`6U!`````$%M(P```````"/H`P`````#Z.@#``````/H -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@`<````````'``(``````@` -M;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M!0````````7H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<``A```` -M````(0`(``````@`;`L6"0P-X`(```$```$!05)2!0')3DT&`0!!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>!2100!`'0`X0```````.$`"``````(`&P+%@D,#>`"```! -M```!!$$P,#``4E(%`T"`````````N@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X%)%!`$`=`#; -M````````VP`(``````@`;`L6"0P-X`(```$```$$03`P,0!24@4!R4Y-!@$` -M05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@4D4$`0!T`-4```````#5``@`````"`!L"Q8) -M#`W@`@```0```01!,#`R`%)2!0')3DT&`0!!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!2 -M100!`'0`SP```````,\`"``````(`&P+%@D,#>`"```!```!!$$P,#,`4E(% -M`T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X%)%!`$`=`#)````````R0`(```` -M``@`;`L6"0P-X`(```$```$$03`P-`!24@4!R4Y-!@$`05!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@4D4$`0!T`,,```````##``@`````"`!L"Q8)#`W@`@```0```01! -M,#`U`%)2!0')3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!2100!`'0`O0`````` -M`+T`"``````(`&P+%@D,#>`"```!```!!$$P,#8`4E(%`T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X%)%!`$`=`"W````````MP`(``````@`;`L6"0P-X`(` -M``$```$$03`P-P!24@4!R4Y-!@$`05!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@4D4$`0!T -M`+$```````"Q``@`````"`!L"Q8)#`W@`@```0```01!,#`X`%)2!0')3DT& -M`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>!2100!`'0`JP```````*L`"``````(`&P+ -M%@D,#>`"```!```!!$$P,#D`4E(%`T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX%)%!`$`=`"E````````I0`(``````@`;`L6"0P-X`(```$```$$03`P00!2 -M4@4!R4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@4D4$`0!T`)\```````"?``@` -M````"`!L"Q8)#`W@`@```0```01!,#!"`%)2!0')3DT&`0!!4%@D`>U!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>!2100!`'0`F0```````)D`"``````(`&P+%@D,#>`"```!```! -M!$$P,$,`4E(%`T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X%)%!`$`=`"3```` -M````DP`(``````@`;`L6"0P-X`(```$```$$03`P1`!24@4!R4Y-!@$`05!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@4D4$`0`````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````!T`(T````` -M``"-``@`````"`!L"Q8)#`W@`@```0```01!,#!%`%)2!0')3DT&`0!!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>!2100!`'0`AP```````(<`"``````(`&P+%@D,#>`" -M```!```!!$$P,$8`4E(%`T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X%)%!`$` -M=`"!````````@0`(``````@`;`L6"0P-X`(```$```$$03`P1P!24@4!R4Y- -M!@$`05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@4D4$`0!T`'L```````![``@`````"`!L -M"Q8)#`W@`@```0```01!,#!(`%)2!0')3DT&`0!!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>!2100!`'0`=0```````'4`"``````(`&P+%@D,#>`"```!```!!$$P,$D` -M4E(%`T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X%)%!`$`=`!O````````;P`( -M``````@`;`L6"0P-X`(```$```$$03`P2@!24@4!R4Y-!@$`05!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@4D4$`0!T`&D```````!I``@`````"`!L"Q8)#`W@`@```0`` -M`01!,#!+`%)2!0')3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!2100!`'0`8P`` -M`````&,`"``````(`&P+%@D,#>`"```!```!!$$P,$P`4E(%`T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X%)%!`$`=`!=````````70`(``````@`;`L6"0P- -MX`(```$```$$03`P30!24@4!R4Y-!@$`05!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@4D4$ -M`0!T`%<```````!7``@`````"`!L"Q8)#`W@`@```0```01!,#!.`%)2!0') -M3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!2100!`'0`40```````%$`"``````( -M`&P+%@D,#>`"```!```!!$$P,$\`4E(%`T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X%)%!`$`=`!+````````2P`(``````@`;`L6"0P-X`(```$```$$03`P -M4`!24@4!R4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@4D4$`0!T`$4```````!% -M``@`````"`!L"Q8)#`W@`@```0```01!,#!1`%)2!0')3DT&`0!!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>!2100!`'0`/P```````#\`"``````(`&P+%@D,#>`"```! -M```!!$$P,%(`4E(%`T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X%)%!`$`=``Y -M````````.0`(``````@`;`L6"0P-X`(```$```$$03`P4P!24@4!R4Y-!@$` -M05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@4D4$`0!T`#,````````S``@`````"`!L"Q8) -M#`W@`@```0```01!,#!4`%)2!0')3DT&`0!!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!2 -M100!`'0`+0```````"T`"``````(`&P+%@D,#>`"```!```!!$$P,%4`4E(% -M`T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X%)%!`$````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````'0`)P```````"<`"``````(`&P+%@D,#>`"```! -M```!!$$P,%8`4E(%`T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X%)%!`$````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````9@`A```` -M````(0`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A -M4%@D`>U!`````$'M(P```````"/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>!03`P!Z````````.@`;``B````````(@`(```` -M``@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>`````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````!F`"(````````B``@`````"`!L"Q8)#`W@`@`` -M`0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`"$````````A``@````` -M"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`",` -M```````C``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X``````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````&8`(P`` -M`````",`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@`&8`(@```````"(`"``````(`&P+%@D,#>`"```!```!`0%24@4! -M@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@`&P`)````````"0`"``````(`&P+%@D,#>`" -M```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````9@`D````````)``(``````@`;`L6"0P-X`(` -M``$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@`C````````(P`(```` -M``@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;``E -M````````)0`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>`````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````````!F`"4` -M```````E``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X`!F`"0````````D``@`````"`!L"Q8)#`W@`@```0```0$!4E(% -M`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`"8````````F``@`````"`!L"Q8)#`W@ -M`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````&8`)@```````"8`"``````(`&P+%@D,#>`" -M```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`)0```````"4`"``` -M```(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@` -MNP$``````;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@0TP,`2<````````G```````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````````9@`G -M````````)P`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2 -M!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!)@```````"8`;``H````````*``( -M``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>`````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````!F`"@````````H``@`````"`!L"Q8)#`W@ -M`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`"<````````G``@` -M````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L -M`"D````````I``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````````&8` -M*0```````"D`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@`&8`*````````"@`"``````(`&P+%@D,#>`"```!```!`0%2 -M4@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`*@```````"H`"``````(`&P+%@D, -M#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````9@`J````````*@`(``````@`;`L6"0P- -MX`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@`I````````*0`( -M``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M;``K````````*P`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!! -M4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````````````!F -M`"L````````K``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X`!F`"H````````J``@`````"`!L"Q8)#`W@`@```0```0$! -M4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`"P````````L``@`````"`!L"Q8) -M#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````&8`+````````"P`"``````(`&P+%@D, -M#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`*P```````"L` -M"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M`'@`NP$``````;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$` -M05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`2T````````M```````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M9@`M````````+0`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$! -M`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!+````````"P`;``N```````` -M+@`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>`````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````!F`"X````````N``@`````"`!L"Q8) -M#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`"T````````M -M``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX`!L`"\````````O``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308! -M`$%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`&8`+P```````"\`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@`&8`+@```````"X`"``````(`&P+%@D,#>`"```!```! -M`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`,````````#``"``````(`&P+ -M%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````9@`P````````,``(``````@`;`L6 -M"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@`O```````` -M+P`(``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>``;``Q````````,0`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT& -M`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``!F`#$````````Q``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X`!F`#`````````P``@`````"`!L"Q8)#`W@`@```0`` -M`0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`#(````````R``@`````"`!L -M"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````&8`,@```````#(`"``````(`&P+ -M%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`,0`````` -M`#$`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@`'@`NP$``````;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y- -M!@$`05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`3,````````S```````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````9@`S````````,P`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$` -M``$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!,@```````#(`;``T```` -M````-``(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>`````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````!F`#0````````T``@`````"`!L -M"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`#,````` -M```S``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X`!L`#4````````U``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E. -M308!`$%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````&8`-0```````#4`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@`&8`-````````#0`"``````(`&P+%@D,#>`"```! -M```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`-@```````#8`"``````( -M`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````9@`V````````-@`(``````@` -M;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@`U```` -M````-0`(``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>``;``W````````-P`(``````@`;`L6"0P-X`(```$```$!05)2!0&) -M3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````!F`#<````````W``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X`!F`#8````````V``@`````"`!L"Q8)#`W@`@`` -M`0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`#@````````X``@````` -M"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX``````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````&8`.````````#@`"``````( -M`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`-P`` -M`````#<`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@`'@`NP$``````;L``````````&P+%@D,#>`````!```!`4%24@4! -MF4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`3D````````Y```````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````9@`Y````````.0`(``````@`;`L6"0P-X`(```$```$!`%)2!0&! -M4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(` -M``$```$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!.````````#@`;``Z -M````````.@`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>`````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````!F`#H````````Z``@````` -M"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`#D` -M```````Y``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X`!L`#L````````[``@`````"`!L"Q8)#`W@`@```0```0%!4E(% -M`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````&8`.P```````#L`"``````(`&P+%@D,#>`"```!```!`0!24@4! -M@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@`&8`.@```````#H`"``````(`&P+%@D,#>`" -M```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`/````````#P`"``` -M```(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@```````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````9@`\````````/``(```` -M``@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@`[ -M````````.P`(``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>``;``]````````/0`(``````@`;`L6"0P-X`(```$```$!05)2 -M!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````!F`#T````````]``@`````"`!L"Q8)#`W@`@```0```0$`4E(% -M`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`#P````````\``@`````"`!L"Q8)#`W@ -M`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`#X````````^``@` -M````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X``````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````&8`/@```````#X`"``` -M```(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8` -M/0```````#T`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+%@D,#>`````!```!`4%2 -M4@4!F4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`3\````````_```````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````9@`_````````/P`(``````@`;`L6"0P-X`(```$```$!`%)2 -M!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P- -MX`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!/@```````#X` -M;`!`````````0``(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!! -M4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````!F`$````````!```@` -M````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F -M`#\````````_``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X`!L`$$```````!!``@`````"`!L"Q8)#`W@`@```0```0%! -M4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````&8`00```````$$`"``````(`&P+%@D,#>`"```!```!`0!2 -M4@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`0````````$``"``````(`&P+%@D, -M#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`0@```````$(` -M"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@```````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````9@!"````````0@`( -M``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M9@!!````````00`(``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>``;`!#````````0P`(``````@`;`L6"0P-X`(```$```$! -M05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````!F`$,```````!#``@`````"`!L"Q8)#`W@`@```0```0$` -M4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`$(```````!"``@`````"`!L"Q8) -M#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`$0```````!$ -M``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X``````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````&8`1````````$0` -M"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M`&8`0P```````$,`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+%@D,#>`````!```! -M`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`44```````!%```` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````9@!%````````10`(``````@`;`L6"0P-X`(```$```$! -M`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8`````!@`;`L6 -M"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!1``````` -M`$0`;`!&````````1@`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT& -M`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````!F`$8```````!& -M``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX`!F`$4```````!%``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X`!L`$<```````!'``@`````"`!L"Q8)#`W@`@```0`` -M`0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````&8`1P```````$<`"``````(`&P+%@D,#>`"```!```! -M`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`1@```````$8`"``````(`&P+ -M%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`2``````` -M`$@`"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@```````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````9@!(```````` -M2``(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>``9@!'````````1P`(``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>``;`!)````````20`(``````@`;`L6"0P-X`(```$` -M``$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````!F`$D```````!)``@`````"`!L"Q8)#`W@`@```0`` -M`0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`$@```````!(``@`````"`!L -M"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`$H````` -M``!*``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X``````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````&8`2@`````` -M`$H`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@`&8`20```````$D`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+%@D,#>`````! -M```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`4L```````!+ -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````9@!+````````2P`(``````@`;`L6"0P-X`(```$` -M``$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8`````!@` -M;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!2@`` -M`````$H`;`!,````````3``(``````@`;`L6"0P-X`(```$```$!05)2!0&) -M3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````!F`$P````` -M``!,``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X`!F`$L```````!+``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X`!L`$T```````!-``@`````"`!L"Q8)#`W@`@`` -M`0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````&8`30```````$T`"``````(`&P+%@D,#>`"```! -M```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`3````````$P`"``````( -M`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`3@`` -M`````$X`"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@```````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````9@!.```` -M````3@`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>``9@!-````````30`(``````@`;`L6"0P-X`(```$```$!`5)2!0&! -M4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>``;`!/````````3P`(``````@`;`L6"0P-X`(` -M``$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````!F`$\```````!/``@`````"`!L"Q8)#`W@`@`` -M`0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`$X```````!.``@````` -M"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`%`` -M``````!0``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X``````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````&8`4``` -M`````%``"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@`&8`3P```````$\`"``````(`&P+%@D,#>`"```!```!`0%24@4! -M@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+%@D,#>`` -M```!```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`5$````` -M``!1```````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````9@!1````````40`(``````@`;`L6"0P-X`(` -M``$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8```` -M`!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P! -M4````````%``;`!2````````4@`(``````@`;`L6"0P-X`(```$```$!05)2 -M!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````````!F`%(` -M``````!2``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X`!F`%$```````!1``@`````"`!L"Q8)#`W@`@```0```0$!4E(% -M`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`%,```````!3``@`````"`!L"Q8)#`W@ -M`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````&8`4P```````%,`"``````(`&P+%@D,#>`" -M```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`4@```````%(`"``` -M```(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P` -M5````````%0`"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@```````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````````9@!4 -M````````5``(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>``9@!3````````4P`(``````@`;`L6"0P-X`(```$```$!`5)2 -M!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`!5````````50`(``````@`;`L6"0P- -MX`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````!F`%4```````!5``@`````"`!L"Q8)#`W@ -M`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`%0```````!4``@` -M````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L -M`%8```````!6``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````````&8` -M5@```````%8`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@`&8`50```````%4`"``````(`&P+%@D,#>`"```!```!`0%2 -M4@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+%@D, -M#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`5<` -M``````!7```````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````9@!7````````5P`(``````@`;`L6"0P- -MX`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8 -M`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P`````` -M`"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!0 -M3`P!5@```````%8`;`!8````````6``(``````@`;`L6"0P-X`(```$```$! -M05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````````````!F -M`%@```````!8``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X`!F`%<```````!7``@`````"`!L"Q8)#`W@`@```0```0$! -M4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`%D```````!9``@`````"`!L"Q8) -M#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````&8`60```````%D`"``````(`&P+%@D, -M#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`6````````%@` -M"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M`&P`6@```````%H`"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$` -M05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M9@!:````````6@`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>``9@!9````````60`(``````@`;`L6"0P-X`(```$```$! -M`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`!;````````6P`(``````@`;`L6 -M"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````!F`%L```````!;``@`````"`!L"Q8) -M#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`%H```````!: -M``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX`!L`%P```````!<``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308! -M`$%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`&8`7````````%P`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@`&8`6P```````%L`"``````(`&P+%@D,#>`"```!```! -M`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+ -M%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP, -M`5T```````!=```````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````9@!=````````70`(``````@`;`L6 -M"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>```````` -M'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P`` -M`````"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>!03`P!7````````%P`;`!>````````7@`(``````@`;`L6"0P-X`(```$` -M``$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``!F`%X```````!>``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X`!F`%T```````!=``@`````"`!L"Q8)#`W@`@```0`` -M`0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`%\```````!?``@`````"`!L -M"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````&8`7P```````%\`"``````(`&P+ -M%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`7@`````` -M`%X`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@`&P`8````````&``"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y- -M!@$`05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````9@!@````````8``(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>``9@!?````````7P`(``````@`;`L6"0P-X`(```$` -M``$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`!A````````80`(``````@` -M;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````!F`&$```````!A``@`````"`!L -M"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`&`````` -M``!@``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X`!L`&(```````!B``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E. -M308!`$%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````&8`8@```````&(`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@`&8`80```````&$`"``````(`&P+%@D,#>`"```! -M```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L````````` -M`&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M0TP,`6,```````!C```````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````9@!C````````8P`(``````@` -M;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>```` -M````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M -M(P```````"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>!03`P!8@```````&(`;`!D````````9``(``````@`;`L6"0P-X`(` -M``$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````!F`&0```````!D``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X`!F`&,```````!C``@`````"`!L"Q8)#`W@`@`` -M`0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`&4```````!E``@````` -M"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX``````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````&8`90```````&4`"``````( -M`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`9``` -M`````&0`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@`&P`9@```````&8`"``````(`&P+%@D,#>`"```!```!`4%24@4! -MB4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````9@!F````````9@`(``````@`;`L6"0P-X`(```$```$!`%)2!0&! -M4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>``9@!E````````90`(``````@`;`L6"0P-X`(` -M``$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`!G````````9P`(```` -M``@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>`````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````!F`&<```````!G``@````` -M"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`&8` -M``````!F``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X`!L`&@```````!H``@`````"`!L"Q8)#`W@`@```0```0%!4E(% -M`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````&8`:````````&@`"``````(`&P+%@D,#>`"```!```!`0!24@4! -M@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@`&8`9P```````&<`"``````(`&P+%@D,#>`" -M```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L````` -M`````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@0TP,`6D```````!I```````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````9@!I````````:0`(```` -M``@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`> -M````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!```` -M`$'M(P```````"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>!03`P!:````````&@`;`!J````````:@`(``````@`;`L6"0P- -MX`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````!F`&H```````!J``@`````"`!L"Q8)#`W@`@```0```0$`4E(% -M`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`&D```````!I``@`````"`!L"Q8)#`W@ -M`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`&L```````!K``@` -M````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X``````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````&8`:P```````&L`"``` -M```(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8` -M:@```````&H`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@`&P`;````````&P`"``````(`&P+%@D,#>`"```!```!`4%2 -M4@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````9@!L````````;``(``````@`;`L6"0P-X`(```$```$!`%)2 -M!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@!K````````:P`(``````@`;`L6"0P- -MX`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`!M````````;0`( -M``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>`````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````!F`&T```````!M``@` -M````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F -M`&P```````!L``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X`!L`&X```````!N``@`````"`!L"Q8)#`W@`@```0```0%! -M4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````&8`;@```````&X`"``````(`&P+%@D,#>`"```!```!`0!2 -M4@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`;0```````&T`"``````(`&P+%@D, -M#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L` -M`````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@0TP,`6\```````!O```````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````9@!O````````;P`( -M``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U! -M`````$'M(P```````"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>!03`P!;@```````&X`;`!P````````<``(``````@`;`L6 -M"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````!F`'````````!P``@`````"`!L"Q8)#`W@`@```0```0$` -M4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`&\```````!O``@`````"`!L"Q8) -M#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`'$```````!Q -M``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X``````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````&8`<0```````'$` -M"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M`&8`<````````'``"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@`&P`<@```````'(`"``````(`&P+%@D,#>`"```!```! -M`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````9@!R````````<@`(``````@`;`L6"0P-X`(```$```$! -M`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@!Q````````<0`(``````@`;`L6 -M"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`!S```````` -MU!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>`````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````!F`',```````!S -M``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX`!F`'(```````!R``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X`!L`'0```````!T``@`````"`!L"Q8)#`W@`@```0`` -M`0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````&8`=````````'0`"``````(`&P+%@D,#>`"```!```! -M`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8``"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$````` -M`;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@0TP,`74```````!U```````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````9@!U```````` -M=0`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D -M`>U!`````$'M(P```````"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>!03`P!=````````'0`;`!V````````=@`(``````@` -M;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````!F`'8```````!V``@`````"`!L"Q8)#`W@`@```0`` -M`0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`'4```````!U``@`````"`!L -M"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`'<````` -M``!W``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X``````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````&8`=P`````` -M`'<`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@`&8`=@```````'8`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@`&P`>````````'@`"``````(`&P+%@D,#>`"```! -M```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````9@!X````````>``(``````@`;`L6"0P-X`(```$` -M``$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@!W````````=P`(``````@` -M;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`!Y```` -M````>0`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>`````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````!F`'D````` -M``!Y``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X`!F`'@```````!X``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X`!L`'H```````!Z``@`````"`!L"Q8)#`W@`@`` -M`0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````&8`>@```````'H`"``````(`&P+%@D,#>`"```! -M```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`>0```````'D`"``````( -M`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$` -M`````;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@0TP,`7L```````![```````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````9@![```` -M````>P`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A -M4%@D`>U!`````$'M(P```````"/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>!03`P!>@```````'H`;`!\````````?``(```` -M``@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>`````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````!F`'P```````!\``@`````"`!L"Q8)#`W@`@`` -M`0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`'L```````![``@````` -M"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`'T` -M``````!]``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X``````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````&8`?0`` -M`````'T`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@`&8`?````````'P`"``````(`&P+%@D,#>`"```!```!`0%24@4! -M@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@`&P`?@```````'X`"``````(`&P+%@D,#>`" -M```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````9@!^````````?@`(``````@`;`L6"0P-X`(` -M``$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@!]````````?0`(```` -M``@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`!_ -M````````?P`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>`````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````````!F`'\` -M``````!_``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X`!F`'X```````!^``@`````"`!L"Q8)#`W@`@```0```0$!4E(% -M`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`(````````"```@`````"`!L"Q8)#`W@ -M`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````&8`@````````(``"``````(`&P+%@D,#>`" -M```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`?P```````'\`"``` -M```(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@` -MNP$``````;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@0TP,`8$```````"!```````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````````9@"! -M````````@0`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2 -M!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!@````````(``;`""````````@@`( -M``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>`````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````!F`((```````""``@`````"`!L"Q8)#`W@ -M`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`($```````"!``@` -M````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L -M`(,```````"#``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````````&8` -M@P```````(,`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@`&8`@@```````((`"``````(`&P+%@D,#>`"```!```!`0%2 -M4@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`A````````(0`"``````(`&P+%@D, -M#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````9@"$````````A``(``````@`;`L6"0P- -MX`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@"#````````@P`( -M``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M;`"%````````A0`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!! -M4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````````````!F -M`(4```````"%``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X`!F`(0```````"$``@`````"`!L"Q8)#`W@`@```0```0$! -M4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`(8```````"&``@`````"`!L"Q8) -M#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````&8`A@```````(8`"``````(`&P+%@D, -M#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`A0```````(4` -M"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M`'@`NP$``````;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$` -M05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`8<```````"'```````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M9@"'````````AP`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$! -M`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!A@```````(8`;`"(```````` -MB``(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>`````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````!F`(@```````"(``@`````"`!L"Q8) -M#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`(<```````"' -M``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX`!L`(D```````")``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308! -M`$%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`&8`B0```````(D`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@`&8`B````````(@`"``````(`&P+%@D,#>`"```!```! -M`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`B@```````(H`"``````(`&P+ -M%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````9@"*````````B@`(``````@`;`L6 -M"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@")```````` -MB0`(``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>``;`"+````````BP`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT& -M`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``!F`(L```````"+``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X`!F`(H```````"*``@`````"`!L"Q8)#`W@`@```0`` -M`0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`(P```````",``@`````"`!L -M"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````&8`C````````(P`"``````(`&P+ -M%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`BP`````` -M`(L`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@`'@`NP$``````;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y- -M!@$`05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`8T```````"-```````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````9@"-````````C0`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$` -M``$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!C````````(P`;`".```` -M````C@`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>`````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````!F`(X```````".``@`````"`!L -M"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`(T````` -M``"-``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X`!L`(\```````"/``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E. -M308!`$%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````&8`CP```````(\`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@`&8`C@```````(X`"``````(`&P+%@D,#>`"```! -M```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`D````````)``"``````( -M`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````9@"0````````D``(``````@` -M;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@"/```` -M````CP`(``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>``;`"1````````D0`(``````@`;`L6"0P-X`(```$```$!05)2!0&) -M3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````!F`)$```````"1``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X`!F`)````````"0``@`````"`!L"Q8)#`W@`@`` -M`0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`)(```````"2``@````` -M"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX``````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````&8`D@```````)(`"``````( -M`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`D0`` -M`````)$`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@`'@`NP$``````;L``````````&P+%@D,#>`````!```!`4%24@4! -MF4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`9,```````"3```````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````9@"3````````DP`(``````@`;`L6"0P-X`(```$```$!`%)2!0&! -M4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(` -M``$```$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!D@```````)(`;`"4 -M````````E``(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>`````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````!F`)0```````"4``@````` -M"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`),` -M``````"3``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X`!L`)4```````"5``@`````"`!L"Q8)#`W@`@```0```0%!4E(% -M`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````&8`E0```````)4`"``````(`&P+%@D,#>`"```!```!`0!24@4! -M@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@`&8`E````````)0`"``````(`&P+%@D,#>`" -M```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`E@```````)8`"``` -M```(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@```````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````9@"6````````E@`(```` -M``@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@"5 -M````````E0`(``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>``;`"7````````EP`(``````@`;`L6"0P-X`(```$```$!05)2 -M!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````!F`)<```````"7``@`````"`!L"Q8)#`W@`@```0```0$`4E(% -M`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`)8```````"6``@`````"`!L"Q8)#`W@ -M`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`)@```````"8``@` -M````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X``````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````&8`F````````)@`"``` -M```(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8` -MEP```````)<`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+%@D,#>`````!```!`4%2 -M4@4!F4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`9D```````"9```````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````9@"9````````F0`(``````@`;`L6"0P-X`(```$```$!`%)2 -M!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P- -MX`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!F````````)@` -M;`":````````F@`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!! -M4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````!F`)H```````":``@` -M````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F -M`)D```````"9``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X`!L`)L```````";``@`````"`!L"Q8)#`W@`@```0```0%! -M4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````&8`FP```````)L`"``````(`&P+%@D,#>`"```!```!`0!2 -M4@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`F@```````)H`"``````(`&P+%@D, -M#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`G````````)P` -M"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@```````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````9@"<````````G``( -M``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M9@";````````FP`(``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>``;`"=````````G0`(``````@`;`L6"0P-X`(```$```$! -M05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````!F`)T```````"=``@`````"`!L"Q8)#`W@`@```0```0$` -M4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`)P```````"<``@`````"`!L"Q8) -M#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`)X```````"> -M``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X``````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````&8`G@```````)X` -M"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M`&8`G0```````)T`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+%@D,#>`````!```! -M`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`9\```````"?```` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````9@"?````````GP`(``````@`;`L6"0P-X`(```$```$! -M`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8`````!@`;`L6 -M"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!G@`````` -M`)X`;`"@````````H``(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT& -M`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````!F`*````````"@ -M``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX`!F`)\```````"?``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X`!L`*$```````"A``@`````"`!L"Q8)#`W@`@```0`` -M`0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````&8`H0```````*$`"``````(`&P+%@D,#>`"```!```! -M`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`H````````*``"``````(`&P+ -M%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`H@`````` -M`*(`"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@```````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````9@"B```````` -MH@`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>``9@"A````````H0`(``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>``;`"C````````HP`(``````@`;`L6"0P-X`(```$` -M``$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````!F`*,```````"C``@`````"`!L"Q8)#`W@`@```0`` -M`0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`*(```````"B``@`````"`!L -M"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`*0````` -M``"D``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X``````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````&8`I``````` -M`*0`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@`&8`HP```````*,`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+%@D,#>`````! -M```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`:4```````"E -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````9@"E````````I0`(``````@`;`L6"0P-X`(```$` -M``$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8`````!@` -M;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!I``` -M`````*0`;`"F````````I@`(``````@`;`L6"0P-X`(```$```$!05)2!0&) -M3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````!F`*8````` -M``"F``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X`!F`*4```````"E``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X`!L`*<```````"G``@`````"`!L"Q8)#`W@`@`` -M`0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````&8`IP```````*<`"``````(`&P+%@D,#>`"```! -M```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`I@```````*8`"``````( -M`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`J``` -M`````*@`"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@```````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````9@"H```` -M````J``(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>``9@"G````````IP`(``````@`;`L6"0P-X`(```$```$!`5)2!0&! -M4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>``;`"I````````J0`(``````@`;`L6"0P-X`(` -M``$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````!F`*D```````"I``@`````"`!L"Q8)#`W@`@`` -M`0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`*@```````"H``@````` -M"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`*H` -M``````"J``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X``````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````&8`J@`` -M`````*H`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@`&8`J0```````*D`"``````(`&P+%@D,#>`"```!```!`0%24@4! -M@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+%@D,#>`` -M```!```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`:L````` -M``"K```````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````9@"K````````JP`(``````@`;`L6"0P-X`(` -M``$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8```` -M`!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P```````"/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P! -MJ@```````*H`;`"L````````K``(``````@`;`L6"0P-X`(```$```$!05)2 -M!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````````!F`*P` -M``````"L``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X`!F`*L```````"K``@`````"`!L"Q8)#`W@`@```0```0$!4E(% -M`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`*T```````"M``@`````"`!L"Q8)#`W@ -M`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````&8`K0```````*T`"``````(`&P+%@D,#>`" -M```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`K````````*P`"``` -M```(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P` -MK@```````*X`"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@```````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````````9@"N -M````````K@`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>``9@"M````````K0`(``````@`;`L6"0P-X`(```$```$!`5)2 -M!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`"O````````KP`(``````@`;`L6"0P- -MX`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````!F`*\```````"O``@`````"`!L"Q8)#`W@ -M`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`*X```````"N``@` -M````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L -M`+````````"P``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````````&8` -ML````````+``"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@`&8`KP```````*\`"``````(`&P+%@D,#>`"```!```!`0%2 -M4@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+%@D, -M#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`;$` -M``````"Q```````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````9@"Q````````L0`(``````@`;`L6"0P- -MX`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>````````'@`8 -M`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P`````` -M`"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!0 -M3`P!L````````+``;`"R````````L@`(``````@`;`L6"0P-X`(```$```$! -M05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````````````!F -M`+(```````"R``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X`!F`+$```````"Q``@`````"`!L"Q8)#`W@`@```0```0$! -M4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`+,```````"S``@`````"`!L"Q8) -M#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````&8`LP```````+,`"``````(`&P+%@D, -M#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`L@```````+(` -M"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M`&P`M````````+0`"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y-!@$` -M05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M9@"T````````M``(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>``9@"S````````LP`(``````@`;`L6"0P-X`(```$```$! -M`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`"U````````M0`(``````@`;`L6 -M"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````!F`+4```````"U``@`````"`!L"Q8) -M#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`+0```````"T -M``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX`!L`+8```````"V``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308! -M`$%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`&8`M@```````+8`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@`&8`M0```````+4`"``````(`&P+%@D,#>`"```!```! -M`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L``````````&P+ -M%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@0TP, -M`;<```````"W```````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````9@"W````````MP`(``````@`;`L6 -M"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>```````` -M'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M(P`` -M`````"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>!03`P!M@```````+8`;`"X````````N``(``````@`;`L6"0P-X`(```$` -M``$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``!F`+@```````"X``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X`!F`+<```````"W``@`````"`!L"Q8)#`W@`@```0`` -M`0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`+D```````"Y``@`````"`!L -M"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````&8`N0```````+D`"``````(`&P+ -M%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`N``````` -M`+@`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@`&P`N@```````+H`"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y- -M!@$`05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````9@"Z````````N@`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>``9@"Y````````N0`(``````@`;`L6"0P-X`(```$` -M``$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`"[````````NP`(``````@` -M;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````!F`+L```````"[``@`````"`!L -M"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`+H````` -M``"Z``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X`!L`+P```````"\``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E. -M308!`$%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````&8`O````````+P`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@`&8`NP```````+L`"``````(`&P+%@D,#>`"```! -M```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L````````` -M`&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M0TP,`;T```````"]```````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````9@"]````````O0`(``````@` -M;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`>```` -M````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!`````$'M -M(P```````"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>!03`P!O````````+P`;`"^````````O@`(``````@`;`L6"0P-X`(` -M``$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````!F`+X```````"^``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X`!F`+T```````"]``@`````"`!L"Q8)#`W@`@`` -M`0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`+\```````"_``@````` -M"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX``````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````&8`OP```````+\`"``````( -M`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`O@`` -M`````+X`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@`&P`P````````,``"``````(`&P+%@D,#>`"```!```!`4%24@4! -MB4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````9@#`````````P``(``````@`;`L6"0P-X`(```$```$!`%)2!0&! -M4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>``9@"_````````OP`(``````@`;`L6"0P-X`(` -M``$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`#!````````P0`(```` -M``@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>`````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````!F`,$```````#!``@````` -M"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`,`` -M``````#```@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X`!L`,(```````#"``@`````"`!L"Q8)#`W@`@```0```0%!4E(% -M`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````&8`P@```````,(`"``````(`&P+%@D,#>`"```!```!`0!24@4! -M@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@`&8`P0```````,$`"``````(`&P+%@D,#>`" -M```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L````` -M`````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@0TP,`<,```````##```````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````9@##````````PP`(```` -M``@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``<@`> -M````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U!```` -M`$'M(P```````"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>!03`P!P@```````,(`;`#$````````Q``(``````@`;`L6"0P- -MX`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````!F`,0```````#$``@`````"`!L"Q8)#`W@`@```0```0$`4E(% -M`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`,,```````##``@`````"`!L"Q8)#`W@ -M`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`,4```````#%``@` -M````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X``````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````&8`Q0```````,4`"``` -M```(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8` -MQ````````,0`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@`&P`Q@```````,8`"``````(`&P+%@D,#>`"```!```!`4%2 -M4@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````9@#&````````Q@`(``````@`;`L6"0P-X`(```$```$!`%)2 -M!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@#%````````Q0`(``````@`;`L6"0P- -MX`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`#'````````QP`( -M``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>`````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````!F`,<```````#'``@` -M````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F -M`,8```````#&``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X`!L`,@```````#(``@`````"`!L"Q8)#`W@`@```0```0%! -M4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````&8`R````````,@`"``````(`&P+%@D,#>`"```!```!`0!2 -M4@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`QP```````,<`"``````(`&P+%@D, -M#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$``````;L` -M`````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@0TP,`U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D`>U! -M`````$'M(P```````"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>!03`P!R````````,@`;`#*````````R@`(``````@`;`L6 -M"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P````````/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````!F`,H```````#*``@`````"`!L"Q8)#`W@`@```0```0$` -M4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`,D```````#)``@`````"`!L"Q8) -M#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`,L```````#+ -M``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X``````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````&8`RP```````,L` -M"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M`&8`R@```````,H`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@`&P`S````````,P`"``````(`&P+%@D,#>`"```!```! -M`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````9@#,````````S``(``````@`;`L6"0P-X`(```$```$! -M`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@#+````````RP`(``````@`;`L6 -M"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`#-```````` -MS0`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>`````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````!F`,T```````#- -M``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#```` -M`````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX`!F`,P```````#,``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X`!L`,X```````#.``@`````"`!L"Q8)#`W@`@```0`` -M`0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````&8`S@```````,X`"``````(`&P+%@D,#>`"```!```! -M`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`S0```````,T`"``````(`&P+ -M%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$````` -M`;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@0TP,`<\```````#/```````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````9@#/```````` -MSP`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A4%@D -M`>U!`````$'M(P```````"/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>!03`P!S@```````,X`;`#0````````T``(``````@` -M;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````!F`-````````#0``@`````"`!L"Q8)#`W@`@```0`` -M`0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`,\```````#/``@`````"`!L -M"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`-$````` -M``#1``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X``````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````&8`T0`````` -M`-$`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@`&8`T````````-``"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@`&P`T@```````-(`"``````(`&P+%@D,#>`"```! -M```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````9@#2````````T@`(``````@`;`L6"0P-X`(```$` -M``$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@#1````````T0`(``````@` -M;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`` -M```#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`#3```` -M````TP`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U! -M`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>`````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````!F`-,````` -M``#3``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X`!F`-(```````#2``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X`!L`-0```````#4``@`````"`!L"Q8)#`W@`@`` -M`0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````&8`U````````-0`"``````(`&P+%@D,#>`"```! -M```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`TP```````-,`"``````( -M`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@`NP$` -M`````;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@0TP,`=4```````#5```````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````9@#5```` -M````U0`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2!0&A -M4%@D`>U!`````$'M(P```````"/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>!03`P!U````````-0`;`#6````````U@`(```` -M``@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>`````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````!F`-8```````#6``@`````"`!L"Q8)#`W@`@`` -M`0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`-4```````#5``@````` -M"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`-<` -M``````#7``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X``````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````&8`UP`` -M`````-<`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!! -M[0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L -M"Q8)#`W@`&8`U@```````-8`"``````(`&P+%@D,#>`"```!```!`0%24@4! -M@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@`&P`V````````-@`"``````(`&P+%@D,#>`" -M```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````9@#8````````V``(``````@`;`L6"0P-X`(` -M``$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@#7````````UP`(```` -M``@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H -M`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`#9 -M````````V0`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>`````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````````!F`-D` -M``````#9``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$````` -M0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@ -M;`L6"0P-X`!F`-@```````#8``@`````"`!L"Q8)#`W@`@```0```0$!4E(% -M`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`-H```````#:``@`````"`!L"Q8)#`W@ -M`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````&8`V@```````-H`"``````(`&P+%@D,#>`" -M```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@````` -M`````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`V0```````-D`"``` -M```(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`'@` -MNP$``````;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$`05!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@0TP,`=L```````#;```````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````````9@#; -M````````VP`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U!```` -M`$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P- -MX&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$!`5)2 -M!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!V@```````-H`;`#<````````W``( -M``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M -M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+ -M%@D,#>`````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````!F`-P```````#<``@`````"`!L"Q8)#`W@ -M`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```` -M``````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`-L```````#;``@` -M````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L -M`-T```````#=``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````````&8` -MW0```````-T`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M00`` -M``!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D, -M#>!L"Q8)#`W@`&8`W````````-P`"``````(`&P+%@D,#>`"```!```!`0%2 -M4@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`W@```````-X`"``````(`&P+%@D, -M#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````#Z`,` -M`````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````9@#>````````W@`(``````@`;`L6"0P- -MX`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``` -M````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@#=````````W0`( -M``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M;`#?````````WP`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!! -M4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````````````!F -M`-\```````#?``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$` -M````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8) -M#`W@;`L6"0P-X`!F`-X```````#>``@`````"`!L"Q8)#`W@`@```0```0$! -M4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`.````````#@``@`````"`!L"Q8) -M#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#`````````^@# -M``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````&8`X````````.``"``````(`&P+%@D, -M#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,``````^@` -M`````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`WP```````-\` -M"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,````` -M```#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@ -M`'@`NP$``````;L``````````&P+%@D,#>`````!```!`4%24@4!F4Y-!@$` -M05!8)`'M00````!![0(````````"Z`,``````^@``````````%1&&@$.;`L6 -M"0P-X&P+%@D,#>!L"Q8)#`W@0TP,`>$```````#A```````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M9@#A````````X0`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D`>U! -M`````$'M`@````````+H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6 -M"0P-X&P+%@D,#>``<@`>````````'@`8`````!@`;`L6"0P-X`(```$```$! -M`5)2!0&A4%@D`>U!`````$'M(P```````"/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>!03`P!X````````.`````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````!F`.(```````#B``@`````"`!L"Q8) -M#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#``````/H -M``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`!P````````< -M``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T%```` -M````!>@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P- -MX`!L`.,```````#C``@`````"`!L"Q8)#`W@`@```0```0%!4E(%`8E.308! -M`$%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+ -M%@D,#>!L"Q8)#`W@;`L6"0P-X``````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`&8`XP```````.,`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8)`'M -M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+ -M%@D,#>!L"Q8)#`W@`&8`X@```````.(`"``````(`&P+%@D,#>`"```!```! -M`0%24@4!@5!8)`'M00````!![0,````````#Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&P`Y````````.0`"``````(`&P+ -M%@D,#>`"```!```!`4%24@4!B4Y-!@$`05!8)`'M00````!![0,````````# -MZ`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````9@#D````````Y``(``````@`;`L6 -M"0P-X`(```$```$!`%)2!0&!4%@D`>U!`````$'M`P````````/H`P`````# -MZ```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``9@#C```````` -MXP`(``````@`;`L6"0P-X`(```$```$!`5)2!0&!4%@D`>U!`````$'M`P`` -M``````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D, -M#>``;`#E````````Y0`(``````@`;`L6"0P-X`(```$```$!05)2!0&)3DT& -M`0!!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL -M"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``!F`.4```````#E``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%06"0! -M[4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L -M"Q8)#`W@;`L6"0P-X`!F`.0```````#D``@`````"`!L"Q8)#`W@`@```0`` -M`0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H``````````!4 -M1AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!L`.8```````#F``@`````"`!L -M"Q8)#`W@`@```0```0%!4E(%`8E.308!`$%06"0![4$`````0>T#```````` -M`^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X``` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````&8`Y@```````.8`"``````(`&P+ -M%@D,#>`"```!```!`0!24@4!@5!8)`'M00````!![0,````````#Z`,````` -M`^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`&8`Y0`````` -M`.4`"``````(`&P+%@D,#>`"```!```!`0%24@4!@5!8)`'M00````!![0,` -M```````#Z`,``````^@``````````%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8) -M#`W@`&P`YP```````.<`"``````(`&P+%@D,#>`"```!```!`4%24@4!B4Y- -M!@$`05!8)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$. -M;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````9@#G````````YP`(``````@`;`L6"0P-X`(```$```$!`%)2!0&!4%@D -M`>U!`````$'M`P````````/H`P`````#Z```````````5$8:`0YL"Q8)#`W@ -M;`L6"0P-X&P+%@D,#>``9@#F````````Y@`(``````@`;`L6"0P-X`(```$` -M``$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````````` -M5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>``;`#H````````Z``(``````@` -M;`L6"0P-X`(```$```$!05)2!0&)3DT&`0!!4%@D`>U!`````$'M`P`````` -M``/H`P`````#Z```````````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````!F`.@```````#H``@`````"`!L -M"Q8)#`W@`@```0```0$`4E(%`8%06"0![4$`````0>T#`````````^@#```` -M``/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`!F`.<````` -M``#G``@`````"`!L"Q8)#`W@`@```0```0$!4E(%`8%06"0![4$`````0>T# -M`````````^@#``````/H``````````!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6 -M"0P-X`!X`+L!``````&[``````````!L"Q8)#`W@`````0```0%!4E(%`9E. -M308!`$%06"0![4$`````0>T#`````````^@#``````/H``````````!41AH! -M#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X$-,#`$A````````(0`````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````&8`Z0```````.D`"``````(`&P+%@D,#>`"```!```!`0!24@4!@5!8 -M)`'M00````!![0,````````#Z`,``````^@``````````%1&&@$.;`L6"0P- -MX&P+%@D,#>!L"Q8)#`W@`&8`'````````!P`"``````(`&P+%@D,#>`"```! -M```!`0%24@4!@5!8)`'M00````!![04````````%Z`,``````^@````````` -M`%1&&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@`/@`ZP```````.L`"``````( -M`&P+%@D,#>`"```!```!'T%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%24@4!B4Y-EP$!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%#11P!Z@```````.H``````````+`` -M``````"P```````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````3DUR`0!!04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!04%!4%@D`>U!`````$'M`P````````/H`P`````#Z```````````5$8: -M`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````!F`.L```````#K``@`````"`!L"Q8)#`W@`@```0```0$`4E(%`8%0 -M6"0![4$`````0>T#`````````^@#``````/H``````````!41AH!#FP+%@D, -M#>!L"Q8)#`W@;`L6"0P-X`!F`.D```````#I``@`````"`!L"Q8)#`W@`@`` -M`0```0$!4E(%`8%06"0![4$`````0>T#`````````^@#``````/H```````` -M``!41AH!#FP+%@D,#>!L"Q8)#`W@;`L6"0P-X`#X`.T```````#M``@````` -M"`!L"Q8)#`W@`@```0```1]!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!4E(%`8E.39P```````#L``````````"P -M````````L``````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````$Y-<@$`04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%!04%! -M04%!04%!05!8)`'M00````!![0(````````"Z`,``````^@``````````%1& -M&@$.;`L6"0P-X&P+%@D,#>!L"Q8)#`W@```````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````9@#M````````[0`(``````@`;`L6"0P-X`(```$```$!`%)2!0&! -M4%@D`>U!`````$'M`@````````+H`P`````#Z```````````5$8:`0YL"Q8) -M#`W@;`L6"0P-X&P+%@D,#>``9@#K````````ZP`(``````@`;`L6"0P-X`(` -M``$```$!`5)2!0&!4%@D`>U!`````$'M`P````````/H`P`````#Z``````` -M````5$8:`0YL"Q8)#`W@;`L6"0P-X&P+%@D,#>`````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````B`.X```````#N``@````` -M"`!L"Q8)#`W@`@```0```0$`(@#N````````[@`(``````@`;`L6"0P-X`(` -M``$```$!`20`L`$``````;``"``````(`&P+%@D,#>`"```!```!`@!!`*(` -MMP$``````;<`"``````(`&P+%@D,#>`"```!```!@`!!`$$`00!!`$$`00!! -M`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$` -M00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!! -M`$$`00!!`$$`00!!`$$`00!!`$$`00!!```````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````"(`[P```````.\`"``````(`&P+%@D,#>`"```!```!`0`B`+8! -M``````&V``@`````"`!L"Q8)#`W@`@```0```0$!)`#P````````\``(```` -M``@`;`L6"0P-X`(```$```$"`$$````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````(@#P````````\``(```` -M``@`;`L6"0P-X`(```$```$!`"(`[P```````.\`"``````(`&P+%@D,#>`" -M```!```!`0$D`/$```````#Q``@`````"`!L"Q8)#`W@`@```0```0(`00`` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````B`/$```````#Q``@`````"`!L"Q8)#`W@`@```0```0$`(@#P -M````````\``(``````@`;`L6"0P-X`(```$```$!`20`\@```````/(`"``` -M```(`&P+%@D,#>`"```!```!`@!!```````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````"(`\@```````/(`"``` -M```(`&P+%@D,#>`"```!```!`0`B`/$```````#Q``@`````"`!L"Q8)#`W@ -M`@```0```0$!)`#S````````\P`(``````@`;`L6"0P-X`(```$```$"`$$` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````(@#S````````\P`(``````@`;`L6"0P-X`(```$```$!`"(` -M\@```````/(`"``````(`&P+%@D,#>`"```!```!`0$D`/0```````#T``@` -M````"`!L"Q8)#`W@`@```0```0(`00`````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````B`/0```````#T``@` -M````"`!L"Q8)#`W@`@```0```0$`(@#S````````\P`(``````@`;`L6"0P- -MX`(```$```$!`20`]0```````/4`"``````(`&P+%@D,#>`"```!```!`@!! -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````"(`]0```````/4`"``````(`&P+%@D,#>`"```!```!`0`B -M`/0```````#T``@`````"`!L"Q8)#`W@`@```0```0$!)`#V````````]@`( -M``````@`;`L6"0P-X`(```$```$"`$$````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````(@#V````````]@`( -M``````@`;`L6"0P-X`(```$```$!`"(`]0```````/4`"``````(`&P+%@D, -M#>`"```!```!`0$D`/<```````#W``@`````"`!L"Q8)#`W@`@```0```0(` -M00`````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````B`/<```````#W``@`````"`!L"Q8)#`W@`@```0```0$` -M(@#V````````]@`(``````@`;`L6"0P-X`(```$```$!`20`^````````/@` -M"``````(`&P+%@D,#>`"```!```!`@!!```````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````"(`^````````/@` -M"``````(`&P+%@D,#>`"```!```!`0`B`/<```````#W``@`````"`!L"Q8) -M#`W@`@```0```0$!)`#Y````````^0`(``````@`;`L6"0P-X`(```$```$" -M`$$````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````(@#Y````````^0`(``````@`;`L6"0P-X`(```$```$! -M`"(`^````````/@`"``````(`&P+%@D,#>`"```!```!`0$D`/H```````#Z -M``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````B`/H```````#Z -M``@`````"`!L"Q8)#`W@`@```0```0$`(@#Y````````^0`(``````@`;`L6 -M"0P-X`(```$```$!`20`^P```````/L`"``````(`&P+%@D,#>`"```!```! -M`@!!```````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````"(`^P```````/L`"``````(`&P+%@D,#>`"```!```! -M`0`B`/H```````#Z``@`````"`!L"Q8)#`W@`@```0```0$!)`#\```````` -M_``(``````@`;`L6"0P-X`(```$```$"`$$````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````(@#\```````` -M_``(``````@`;`L6"0P-X`(```$```$!`"(`^P```````/L`"``````(`&P+ -M%@D,#>`"```!```!`0$D`/T```````#]``@`````"`!L"Q8)#`W@`@```0`` -M`0(`00`````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````B`/T```````#]``@`````"`!L"Q8)#`W@`@```0`` -M`0$`(@#\````````_``(``````@`;`L6"0P-X`(```$```$!`20`_@`````` -M`/X`"``````(`&P+%@D,#>`"```!```!`@!!```````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````"(`_@`````` -M`/X`"``````(`&P+%@D,#>`"```!```!`0`B`/T```````#]``@`````"`!L -M"Q8)#`W@`@```0```0$!)`#_````````_P`(``````@`;`L6"0P-X`(```$` -M``$"`$$````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````(@#_````````_P`(``````@`;`L6"0P-X`(```$` -M``$!`"(`_@```````/X`"``````(`&P+%@D,#>`"```!```!`0$D```!```` -M``$```@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````B```!```` -M``$```@`````"`!L"Q8)#`W@`@```0```0$`(@#_````````_P`(``````@` -M;`L6"0P-X`(```$```$!`20``0$``````0$`"``````(`&P+%@D,#>`"```! -M```!`@!!```````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````"(``0$``````0$`"``````(`&P+%@D,#>`"```! -M```!`0`B```!``````$```@`````"`!L"Q8)#`W@`@```0```0$!)``"`0`` -M```!`@`(``````@`;`L6"0P-X`(```$```$"`$$````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````(@`"`0`` -M```!`@`(``````@`;`L6"0P-X`(```$```$!`"(``0$``````0$`"``````( -M`&P+%@D,#>`"```!```!`0$D``,!``````$#``@`````"`!L"Q8)#`W@`@`` -M`0```0(`00`````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````B``,!``````$#``@`````"`!L"Q8)#`W@`@`` -M`0```0$`(@`"`0`````!`@`(``````@`;`L6"0P-X`(```$```$!`20`!`$` -M`````00`"``````(`&P+%@D,#>`"```!```!`@!!```````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````"(`!`$` -M`````00`"``````(`&P+%@D,#>`"```!```!`0`B``,!``````$#``@````` -M"`!L"Q8)#`W@`@```0```0$!)``%`0`````!!0`(``````@`;`L6"0P-X`(` -M``$```$"`$$````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````(@`%`0`````!!0`(``````@`;`L6"0P-X`(` -M``$```$!`"(`!`$``````00`"``````(`&P+%@D,#>`"```!```!`0$D``8! -M``````$&``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````B``8! -M``````$&``@`````"`!L"Q8)#`W@`@```0```0$`(@`%`0`````!!0`(```` -M``@`;`L6"0P-X`(```$```$!`20`!P$``````0<`"``````(`&P+%@D,#>`" -M```!```!`@!!```````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````"(`!P$``````0<`"``````(`&P+%@D,#>`" -M```!```!`0`B``8!``````$&``@`````"`!L"Q8)#`W@`@```0```0$!)``( -M`0`````!"``(``````@`;`L6"0P-X`(```$```$"`$$````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````````(@`( -M`0`````!"``(``````@`;`L6"0P-X`(```$```$!`"(`!P$``````0<`"``` -M```(`&P+%@D,#>`"```!```!`0$D``D!``````$)``@`````"`!L"Q8)#`W@ -M`@```0```0(`00`````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````B``D!``````$)``@`````"`!L"Q8)#`W@ -M`@```0```0$`(@`(`0`````!"``(``````@`;`L6"0P-X`(```$```$!`20` -M"@$``````0H`"``````(`&P+%@D,#>`"```!```!`@!!```````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````````"(` -M"@$``````0H`"``````(`&P+%@D,#>`"```!```!`0`B``D!``````$)``@` -M````"`!L"Q8)#`W@`@```0```0$!)``+`0`````!"P`(``````@`;`L6"0P- -MX`(```$```$"`$$````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````(@`+`0`````!"P`(``````@`;`L6"0P- -MX`(```$```$!`"(`"@$``````0H`"``````(`&P+%@D,#>`"```!```!`0$D -M``P!``````$,``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````B -M``P!``````$,``@`````"`!L"Q8)#`W@`@```0```0$`(@`+`0`````!"P`( -M``````@`;`L6"0P-X`(```$```$!`20`#0$``````0T`"``````(`&P+%@D, -M#>`"```!```!`@!!```````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````"(`#0$``````0T`"``````(`&P+%@D, -M#>`"```!```!`0`B``P!``````$,``@`````"`!L"Q8)#`W@`@```0```0$! -M)``.`0`````!#@`(``````@`;`L6"0P-X`(```$```$"`$$````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M(@`.`0`````!#@`(``````@`;`L6"0P-X`(```$```$!`"(`#0$``````0T` -M"``````(`&P+%@D,#>`"```!```!`0$D``\!``````$/``@`````"`!L"Q8) -M#`W@`@```0```0(`00`````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````B``\!``````$/``@`````"`!L"Q8) -M#`W@`@```0```0$`(@`.`0`````!#@`(``````@`;`L6"0P-X`(```$```$! -M`20`$`$``````1``"``````(`&P+%@D,#>`"```!```!`@!!```````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`"(`$`$``````1``"``````(`&P+%@D,#>`"```!```!`0`B``\!``````$/ -M``@`````"`!L"Q8)#`W@`@```0```0$!)``1`0`````!$0`(``````@`;`L6 -M"0P-X`(```$```$"`$$````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````(@`1`0`````!$0`(``````@`;`L6 -M"0P-X`(```$```$!`"(`$`$``````1``"``````(`&P+%@D,#>`"```!```! -M`0$D`!(!``````$2``@`````"`!L"Q8)#`W@`@```0```0(`00`````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```B`!(!``````$2``@`````"`!L"Q8)#`W@`@```0```0$`(@`1`0`````! -M$0`(``````@`;`L6"0P-X`(```$```$!`20`$P$``````1,`"``````(`&P+ -M%@D,#>`"```!```!`@!!```````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````"(`$P$``````1,`"``````(`&P+ -M%@D,#>`"```!```!`0`B`!(!``````$2``@`````"`!L"Q8)#`W@`@```0`` -M`0$!)``4`0`````!%``(``````@`;`L6"0P-X`(```$```$"`$$````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````(@`4`0`````!%``(``````@`;`L6"0P-X`(```$```$!`"(`$P$````` -M`1,`"``````(`&P+%@D,#>`"```!```!`0$D`!4!``````$5``@`````"`!L -M"Q8)#`W@`@```0```0(`00`````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````B`!4!``````$5``@`````"`!L -M"Q8)#`W@`@```0```0$`(@`4`0`````!%``(``````@`;`L6"0P-X`(```$` -M``$!`20`%@$``````18`"``````(`&P+%@D,#>`"```!```!`@!!```````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````"(`%@$``````18`"``````(`&P+%@D,#>`"```!```!`0`B`!4!```` -M``$5``@`````"`!L"Q8)#`W@`@```0```0$!)``7`0`````!%P`(``````@` -M;`L6"0P-X`(```$```$"`$$````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````(@`7`0`````!%P`(``````@` -M;`L6"0P-X`(```$```$!`"(`%@$``````18`"``````(`&P+%@D,#>`"```! -M```!`0$D`!@!``````$8``@`````"`!L"Q8)#`W@`@```0```0(`00`````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````B`!@!``````$8``@`````"`!L"Q8)#`W@`@```0```0$`(@`7`0`` -M```!%P`(``````@`;`L6"0P-X`(```$```$!`20`&0$``````1D`"``````( -M`&P+%@D,#>`"```!```!`@!!```````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````"(`&0$``````1D`"``````( -M`&P+%@D,#>`"```!```!`0`B`!@!``````$8``@`````"`!L"Q8)#`W@`@`` -M`0```0$!)``:`0`````!&@`(``````@`;`L6"0P-X`(```$```$"`$$````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````(@`:`0`````!&@`(``````@`;`L6"0P-X`(```$```$!`"(`&0$` -M`````1D`"``````(`&P+%@D,#>`"```!```!`0$D`!L!``````$;``@````` -M"`!L"Q8)#`W@`@```0```0(`00`````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````B`!L!``````$;``@````` -M"`!L"Q8)#`W@`@```0```0$`(@`:`0`````!&@`(``````@`;`L6"0P-X`(` -M``$```$!`20`'`$``````1P`"``````(`&P+%@D,#>`"```!```!`@!!```` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````"(`'`$``````1P`"``````(`&P+%@D,#>`"```!```!`0`B`!L! -M``````$;``@`````"`!L"Q8)#`W@`@```0```0$!)``=`0`````!'0`(```` -M``@`;`L6"0P-X`(```$```$"`$$````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````(@`=`0`````!'0`(```` -M``@`;`L6"0P-X`(```$```$!`"(`'`$``````1P`"``````(`&P+%@D,#>`" -M```!```!`0$D`!X!``````$>``@`````"`!L"Q8)#`W@`@```0```0(`00`` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````B`!X!``````$>``@`````"`!L"Q8)#`W@`@```0```0$`(@`= -M`0`````!'0`(``````@`;`L6"0P-X`(```$```$!`20`'P$``````1\`"``` -M```(`&P+%@D,#>`"```!```!`@!!```````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````"(`'P$``````1\`"``` -M```(`&P+%@D,#>`"```!```!`0`B`!X!``````$>``@`````"`!L"Q8)#`W@ -M`@```0```0$!)``@`0`````!(``(``````@`;`L6"0P-X`(```$```$"`$$` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````(@`@`0`````!(``(``````@`;`L6"0P-X`(```$```$!`"(` -M'P$``````1\`"``````(`&P+%@D,#>`"```!```!`0$D`"$!``````$A``@` -M````"`!L"Q8)#`W@`@```0```0(`00`````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````B`"$!``````$A``@` -M````"`!L"Q8)#`W@`@```0```0$`(@`@`0`````!(``(``````@`;`L6"0P- -MX`(```$```$!`20`(@$``````2(`"``````(`&P+%@D,#>`"```!```!`@!! -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````"(`(@$``````2(`"``````(`&P+%@D,#>`"```!```!`0`B -M`"$!``````$A``@`````"`!L"Q8)#`W@`@```0```0$!)``C`0`````!(P`( -M``````@`;`L6"0P-X`(```$```$"`$$````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````(@`C`0`````!(P`( -M``````@`;`L6"0P-X`(```$```$!`"(`(@$``````2(`"``````(`&P+%@D, -M#>`"```!```!`0$D`"0!``````$D``@`````"`!L"Q8)#`W@`@```0```0(` -M00`````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````B`"0!``````$D``@`````"`!L"Q8)#`W@`@```0```0$` -M(@`C`0`````!(P`(``````@`;`L6"0P-X`(```$```$!`20`)0$``````24` -M"``````(`&P+%@D,#>`"```!```!`@!!```````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````"(`)0$``````24` -M"``````(`&P+%@D,#>`"```!```!`0`B`"0!``````$D``@`````"`!L"Q8) -M#`W@`@```0```0$!)``F`0`````!)@`(``````@`;`L6"0P-X`(```$```$" -M`$$````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````(@`F`0`````!)@`(``````@`;`L6"0P-X`(```$```$! -M`"(`)0$``````24`"``````(`&P+%@D,#>`"```!```!`0$D`"`"```!```! -M`@!!```````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````"(`*`$``````2@`"``````(`&P+%@D,#>`"```!```! -M`0`B`"`"```!```!`0$D`"H!``````$J``@`````"`!L"Q8)#`W@`@```0`` -M`0(`00`````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````B`"H!``````$J``@`````"`!L"Q8)#`W@`@```0`` -M`0$`(@`I`0`````!*0`(``````@`;`L6"0P-X`(```$```$!`20`*P$````` -M`2L`"``````(`&P+%@D,#>`"```!```!`@!!```````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````"(`*P$````` -M`2L`"``````(`&P+%@D,#>`"```!```!`0`B`"H!``````$J``@`````"`!L -M"Q8)#`W@`@```0```0$!)``L`0`````!+``(``````@`;`L6"0P-X`(```$` -M``$"`$$````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````(@`L`0`````!+``(``````@`;`L6"0P-X`(```$` -M``$!`"(`*P$``````2L`"``````(`&P+%@D,#>`"```!```!`0$D`"T!```` -M``$M``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````B`"T!```` -M``$M``@`````"`!L"Q8)#`W@`@```0```0$`(@`L`0`````!+``(``````@` -M;`L6"0P-X`(```$```$!`20`+@$``````2X`"``````(`&P+%@D,#>`"```! -M```!`@!!```````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````"(`+@$``````2X`"``````(`&P+%@D,#>`"```! -M```!`0`B`"T!``````$M``@`````"`!L"Q8)#`W@`@```0```0$!)``O`0`` -M```!+P`(``````@`;`L6"0P-X`(```$```$"`$$````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````(@`O`0`` -M```!+P`(``````@`;`L6"0P-X`(```$```$!`"(`+@$``````2X`"``````( -M`&P+%@D,#>`"```!```!`0$D`#`!``````$P``@`````"`!L"Q8)#`W@`@`` -M`0```0(`00`````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````B`#`!``````$P``@`````"`!L"Q8)#`W@`@`` -M`0```0$`(@`O`0`````!+P`(``````@`;`L6"0P-X`(```$```$!`20`,0$` -M`````3$`"``````(`&P+%@D,#>`"```!```!`@!!```````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````"(`,0$` -M`````3$`"``````(`&P+%@D,#>`"```!```!`0`B`#`!``````$P``@````` -M"`!L"Q8)#`W@`@```0```0$!)``R`0`````!,@`(``````@`;`L6"0P-X`(` -M``$```$"`$$````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````(@`R`0`````!,@`(``````@`;`L6"0P-X`(` -M``$```$!`"(`,0$``````3$`"``````(`&P+%@D,#>`"```!```!`0$D`#,! -M``````$S``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````B`#,! -M``````$S``@`````"`!L"Q8)#`W@`@```0```0$`(@`R`0`````!,@`(```` -M``@`;`L6"0P-X`(```$```$!`20`-`$``````30`"``````(`&P+%@D,#>`" -M```!```!`@!!```````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````"(`-`$``````30`"``````(`&P+%@D,#>`" -M```!```!`0`B`#,!``````$S``@`````"`!L"Q8)#`W@`@```0```0$!)``U -M`0`````!-0`(``````@`;`L6"0P-X`(```$```$"`$$````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````````(@`U -M`0`````!-0`(``````@`;`L6"0P-X`(```$```$!`"(`-`$``````30`"``` -M```(`&P+%@D,#>`"```!```!`0$D`#8!``````$V``@`````"`!L"Q8)#`W@ -M`@```0```0(`00`````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````B`#8!``````$V``@`````"`!L"Q8)#`W@ -M`@```0```0$`(@`U`0`````!-0`(``````@`;`L6"0P-X`(```$```$!`20` -M-P$``````3<`"``````(`&P+%@D,#>`"```!```!`@!!```````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````````"(` -M-P$``````3<`"``````(`&P+%@D,#>`"```!```!`0`B`#8!``````$V``@` -M````"`!L"Q8)#`W@`@```0```0$!)``X`0`````!.``(``````@`;`L6"0P- -MX`(```$```$"`$$````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````(@`X`0`````!.``(``````@`;`L6"0P- -MX`(```$```$!`"(`-P$``````3<`"``````(`&P+%@D,#>`"```!```!`0$D -M`#D!``````$Y``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````B -M`#D!``````$Y``@`````"`!L"Q8)#`W@`@```0```0$`(@`X`0`````!.``( -M``````@`;`L6"0P-X`(```$```$!`20`.@$``````3H`"``````(`&P+%@D, -M#>`"```!```!`@!!```````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````"(`.@$``````3H`"``````(`&P+%@D, -M#>`"```!```!`0`B`#D!``````$Y``@`````"`!L"Q8)#`W@`@```0```0$! -M)``[`0`````!.P`(``````@`;`L6"0P-X`(```$```$"`$$````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M(@`[`0`````!.P`(``````@`;`L6"0P-X`(```$```$!`"(`.@$``````3H` -M"``````(`&P+%@D,#>`"```!```!`0$D`#P!``````$\``@`````"`!L"Q8) -M#`W@`@```0```0(`00`````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````B`#P!``````$\``@`````"`!L"Q8) -M#`W@`@```0```0$`(@`[`0`````!.P`(``````@`;`L6"0P-X`(```$```$! -M`20`/0$``````3T`"``````(`&P+%@D,#>`"```!```!`@!!```````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`"(`/0$``````3T`"``````(`&P+%@D,#>`"```!```!`0`B`#P!``````$\ -M``@`````"`!L"Q8)#`W@`@```0```0$!)``^`0`````!/@`(``````@`;`L6 -M"0P-X`(```$```$"`$$````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````(@`^`0`````!/@`(``````@`;`L6 -M"0P-X`(```$```$!`"(`/0$``````3T`"``````(`&P+%@D,#>`"```!```! -M`0$D`#\!``````$_``@`````"`!L"Q8)#`W@`@```0```0(`00`````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```B`#\!``````$_``@`````"`!L"Q8)#`W@`@```0```0$`(@`^`0`````! -M/@`(``````@`;`L6"0P-X`(```$```$!`20`0`$``````4``"``````(`&P+ -M%@D,#>`"```!```!`@!!```````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````"(`0`$``````4``"``````(`&P+ -M%@D,#>`"```!```!`0`B`#\!``````$_``@`````"`!L"Q8)#`W@`@```0`` -M`0$!)`!!`0`````!00`(``````@`;`L6"0P-X`(```$```$"`$$````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````(@!!`0`````!00`(``````@`;`L6"0P-X`(```$```$!`"(`0`$````` -M`4``"``````(`&P+%@D,#>`"```!```!`0$D`$(!``````%"``@`````"`!L -M"Q8)#`W@`@```0```0(`00`````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````B`$(!``````%"``@`````"`!L -M"Q8)#`W@`@```0```0$`(@!!`0`````!00`(``````@`;`L6"0P-X`(```$` -M``$!`20`0P$``````4,`"``````(`&P+%@D,#>`"```!```!`@!!```````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````"(`0P$``````4,`"``````(`&P+%@D,#>`"```!```!`0`B`$(!```` -M``%"``@`````"`!L"Q8)#`W@`@```0```0$!)`!$`0`````!1``(``````@` -M;`L6"0P-X`(```$```$"`$$````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````(@!$`0`````!1``(``````@` -M;`L6"0P-X`(```$```$!`"(`0P$``````4,`"``````(`&P+%@D,#>`"```! -M```!`0$D`$4!``````%%``@`````"`!L"Q8)#`W@`@```0```0(`00`````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````B`$4!``````%%``@`````"`!L"Q8)#`W@`@```0```0$`(@!$`0`` -M```!1``(``````@`;`L6"0P-X`(```$```$!`20`1@$``````48`"``````( -M`&P+%@D,#>`"```!```!`@!!```````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````"(`1@$``````48`"``````( -M`&P+%@D,#>`"```!```!`0`B`$4!``````%%``@`````"`!L"Q8)#`W@`@`` -M`0```0$!)`!'`0`````!1P`(``````@`;`L6"0P-X`(```$```$"`$$````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````(@!'`0`````!1P`(``````@`;`L6"0P-X`(```$```$!`"(`1@$` -M`````48`"``````(`&P+%@D,#>`"```!```!`0$D`$@!``````%(``@````` -M"`!L"Q8)#`W@`@```0```0(`00`````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````B`$@!``````%(``@````` -M"`!L"Q8)#`W@`@```0```0$`(@!'`0`````!1P`(``````@`;`L6"0P-X`(` -M``$```$!`20`20$``````4D`"``````(`&P+%@D,#>`"```!```!`@!!```` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````"(`20$``````4D`"``````(`&P+%@D,#>`"```!```!`0`B`$@! -M``````%(``@`````"`!L"Q8)#`W@`@```0```0$!)`!*`0`````!2@`(```` -M``@`;`L6"0P-X`(```$```$"`$$````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````(@!*`0`````!2@`(```` -M``@`;`L6"0P-X`(```$```$!`"(`20$``````4D`"``````(`&P+%@D,#>`" -M```!```!`0$D`$L!``````%+``@`````"`!L"Q8)#`W@`@```0```0(`00`` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````B`$L!``````%+``@`````"`!L"Q8)#`W@`@```0```0$`(@!* -M`0`````!2@`(``````@`;`L6"0P-X`(```$```$!`20`3`$``````4P`"``` -M```(`&P+%@D,#>`"```!```!`@!!```````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````"(`3`$``````4P`"``` -M```(`&P+%@D,#>`"```!```!`0`B`$L!``````%+``@`````"`!L"Q8)#`W@ -M`@```0```0$!)`!-`0`````!30`(``````@`;`L6"0P-X`(```$```$"`$$` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````(@!-`0`````!30`(``````@`;`L6"0P-X`(```$```$!`"(` -M3`$``````4P`"``````(`&P+%@D,#>`"```!```!`0$D`$X!``````%.``@` -M````"`!L"Q8)#`W@`@```0```0(`00`````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````B`$X!``````%.``@` -M````"`!L"Q8)#`W@`@```0```0$`(@!-`0`````!30`(``````@`;`L6"0P- -MX`(```$```$!`20`3P$``````4\`"``````(`&P+%@D,#>`"```!```!`@!! -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````"(`3P$``````4\`"``````(`&P+%@D,#>`"```!```!`0`B -M`$X!``````%.``@`````"`!L"Q8)#`W@`@```0```0$!)`!0`0`````!4``( -M``````@`;`L6"0P-X`(```$```$"`$$````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````(@!0`0`````!4``( -M``````@`;`L6"0P-X`(```$```$!`"(`3P$``````4\`"``````(`&P+%@D, -M#>`"```!```!`0$D`%$!``````%1``@`````"`!L"Q8)#`W@`@```0```0(` -M00`````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````B`%$!``````%1``@`````"`!L"Q8)#`W@`@```0```0$` -M(@!0`0`````!4``(``````@`;`L6"0P-X`(```$```$!`20`4@$``````5(` -M"``````(`&P+%@D,#>`"```!```!`@!!```````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````"(`4@$``````5(` -M"``````(`&P+%@D,#>`"```!```!`0`B`%$!``````%1``@`````"`!L"Q8) -M#`W@`@```0```0$!)`!3`0`````!4P`(``````@`;`L6"0P-X`(```$```$" -M`$$````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````(@!3`0`````!4P`(``````@`;`L6"0P-X`(```$```$! -M`"(`4@$``````5(`"``````(`&P+%@D,#>`"```!```!`0$D`%0!``````%4 -M``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````B`%0!``````%4 -M``@`````"`!L"Q8)#`W@`@```0```0$`(@!3`0`````!4P`(``````@`;`L6 -M"0P-X`(```$```$!`20`50$``````54`"``````(`&P+%@D,#>`"```!```! -M`@!!```````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````"(`50$``````54`"``````(`&P+%@D,#>`"```!```! -M`0`B`%0!``````%4``@`````"`!L"Q8)#`W@`@```0```0$!)`!6`0`````! -M5@`(``````@`;`L6"0P-X`(```$```$"`$$````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````(@!6`0`````! -M5@`(``````@`;`L6"0P-X`(```$```$!`"(`50$``````54`"``````(`&P+ -M%@D,#>`"```!```!`0$D`%`"```!```!`@!!```````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````"(`6`$````` -M`5@`"``````(`&P+%@D,#>`"```!```!`0`B`%`"```!```!`0$D`%H!```` -M``%:``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````B`%H!```` -M``%:``@`````"`!L"Q8)#`W@`@```0```0$`(@!9`0`````!60`(``````@` -M;`L6"0P-X`(```$```$!`20`6P$``````5L`"``````(`&P+%@D,#>`"```! -M```!`@!!```````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````"(`6P$``````5L`"``````(`&P+%@D,#>`"```! -M```!`0`B`%H!``````%:``@`````"`!L"Q8)#`W@`@```0```0$!)`!<`0`` -M```!7``(``````@`;`L6"0P-X`(```$```$"`$$````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````(@!<`0`` -M```!7``(``````@`;`L6"0P-X`(```$```$!`"(`6P$``````5L`"``````( -M`&P+%@D,#>`"```!```!`0$D`%T!``````%=``@`````"`!L"Q8)#`W@`@`` -M`0```0(`00`````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````B`%T!``````%=``@`````"`!L"Q8)#`W@`@`` -M`0```0$`(@!<`0`````!7``(``````@`;`L6"0P-X`(```$```$!`20`7@$` -M`````5X`"``````(`&P+%@D,#>`"```!```!`@!!```````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````"(`7@$` -M`````5X`"``````(`&P+%@D,#>`"```!```!`0`B`%T!``````%=``@````` -M"`!L"Q8)#`W@`@```0```0$!)`!?`0`````!7P`(``````@`;`L6"0P-X`(` -M``$```$"`$$````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````(@!?`0`````!7P`(``````@`;`L6"0P-X`(` -M``$```$!`"(`7@$``````5X`"``````(`&P+%@D,#>`"```!```!`0$D`&`! -M``````%@``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````B`&`! -M``````%@``@`````"`!L"Q8)#`W@`@```0```0$`(@!?`0`````!7P`(```` -M``@`;`L6"0P-X`(```$```$!`20`80$``````6$`"``````(`&P+%@D,#>`" -M```!```!`@!!```````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````"(`80$``````6$`"``````(`&P+%@D,#>`" -M```!```!`0`B`&`!``````%@``@`````"`!L"Q8)#`W@`@```0```0$!)`!B -M`0`````!8@`(``````@`;`L6"0P-X`(```$```$"`$$````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````````(@!B -M`0`````!8@`(``````@`;`L6"0P-X`(```$```$!`"(`80$``````6$`"``` -M```(`&P+%@D,#>`"```!```!`0$D`&,!``````%C``@`````"`!L"Q8)#`W@ -M`@```0```0(`00`````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````B`&,!``````%C``@`````"`!L"Q8)#`W@ -M`@```0```0$`(@!B`0`````!8@`(``````@`;`L6"0P-X`(```$```$!`20` -M9`$``````60`"``````(`&P+%@D,#>`"```!```!`@!!```````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````````"(` -M9`$``````60`"``````(`&P+%@D,#>`"```!```!`0`B`&,!``````%C``@` -M````"`!L"Q8)#`W@`@```0```0$!)`!E`0`````!90`(``````@`;`L6"0P- -MX`(```$```$"`$$````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````(@!E`0`````!90`(``````@`;`L6"0P- -MX`(```$```$!`"(`9`$``````60`"``````(`&P+%@D,#>`"```!```!`0$D -M`&8!``````%F``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````B -M`&8!``````%F``@`````"`!L"Q8)#`W@`@```0```0$`(@!E`0`````!90`( -M``````@`;`L6"0P-X`(```$```$!`20`9P$``````6<`"``````(`&P+%@D, -M#>`"```!```!`@!!```````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````"(`9P$``````6<`"``````(`&P+%@D, -M#>`"```!```!`0`B`&8!``````%F``@`````"`!L"Q8)#`W@`@```0```0$! -M)`!H`0`````!:``(``````@`;`L6"0P-X`(```$```$"`$$````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M(@!H`0`````!:``(``````@`;`L6"0P-X`(```$```$!`"(`9P$``````6<` -M"``````(`&P+%@D,#>`"```!```!`0$D`&D!``````%I``@`````"`!L"Q8) -M#`W@`@```0```0(`00`````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````B`&D!``````%I``@`````"`!L"Q8) -M#`W@`@```0```0$`(@!H`0`````!:``(``````@`;`L6"0P-X`(```$```$! -M`20`:@$``````6H`"``````(`&P+%@D,#>`"```!```!`@!!```````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`"(`:@$``````6H`"``````(`&P+%@D,#>`"```!```!`0`B`&D!``````%I -M``@`````"`!L"Q8)#`W@`@```0```0$!)`!K`0`````!:P`(``````@`;`L6 -M"0P-X`(```$```$"`$$````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````(@!K`0`````!:P`(``````@`;`L6 -M"0P-X`(```$```$!`"(`:@$``````6H`"``````(`&P+%@D,#>`"```!```! -M`0$D`&P!``````%L``@`````"`!L"Q8)#`W@`@```0```0(`00`````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```B`&P!``````%L``@`````"`!L"Q8)#`W@`@```0```0$`(@!K`0`````! -M:P`(``````@`;`L6"0P-X`(```$```$!`20`;0$``````6T`"``````(`&P+ -M%@D,#>`"```!```!`@!!```````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````"(`;0$``````6T`"``````(`&P+ -M%@D,#>`"```!```!`0`B`&P!``````%L``@`````"`!L"Q8)#`W@`@```0`` -M`0$!)`!N`0`````!;@`(``````@`;`L6"0P-X`(```$```$"`$$````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````(@!N`0`````!;@`(``````@`;`L6"0P-X`(```$```$!`"(`;0$````` -M`6T`"``````(`&P+%@D,#>`"```!```!`0$D`&\!``````%O``@`````"`!L -M"Q8)#`W@`@```0```0(`00`````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````B`&\!``````%O``@`````"`!L -M"Q8)#`W@`@```0```0$`(@!N`0`````!;@`(``````@`;`L6"0P-X`(```$` -M``$!`20`<`$``````7``"``````(`&P+%@D,#>`"```!```!`@!!```````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````"(`<`$``````7``"``````(`&P+%@D,#>`"```!```!`0`B`&\!```` -M``%O``@`````"`!L"Q8)#`W@`@```0```0$!)`!Q`0`````!<0`(``````@` -M;`L6"0P-X`(```$```$"`$$````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````(@!Q`0`````!<0`(``````@` -M;`L6"0P-X`(```$```$!`"(`<`$``````7``"``````(`&P+%@D,#>`"```! -M```!`0$D`'(!``````%R``@`````"`!L"Q8)#`W@`@```0```0(`00`````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````B`'(!``````%R``@`````"`!L"Q8)#`W@`@```0```0$`(@!Q`0`` -M```!<0`(``````@`;`L6"0P-X`(```$```$!`20``"```!```!`@!!```````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````"(``"```!```!`0`B`'(!``````%R``@`````"`!L"Q8)#`W@`@`` -M`0```0$!)`!T`0`````!=``(``````@`;`L6"0P-X`(```$```$"`$$````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````(@!T`0`````!=``(``````@`;`L6"0P-X`(```$```$!`"(``"```!```!`0$D`'4!``````%U``@````` -M"`!L"Q8)#`W@`@```0```0(`00`````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````B`'4!``````%U``@````` -M"`!L"Q8)#`W@`@```0```0$`(@!T`0`````!=``(``````@`;`L6"0P-X`(` -M``$```$!`20`=@$``````78`"``````(`&P+%@D,#>`"```!```!`@!!```` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````"(`=@$``````78`"``````(`&P+%@D,#>`"```!```!`0`B`'4! -M``````%U``@`````"`!L"Q8)#`W@`@```0```0$!)`!W`0`````!=P`(```` -M``@`;`L6"0P-X`(```$```$"`$$````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````(@!W`0`````!=P`(```` -M``@`;`L6"0P-X`(```$```$!`"(`=@$``````78`"``````(`&P+%@D,#>`" -M```!```!`0$D`'@!``````%X``@`````"`!L"Q8)#`W@`@```0```0(`00`` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````B`'@!``````%X``@`````"`!L"Q8)#`W@`@```0```0$`(@!W -M`0`````!=P`(``````@`;`L6"0P-X`(```$```$!`20`>0$``````7D`"``` -M```(`&P+%@D,#>`"```!```!`@!!```````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````"(`>0$``````7D`"``` -M```(`&P+%@D,#>`"```!```!`0`B`'@!``````%X``@`````"`!L"Q8)#`W@ -M`@```0```0$!)`!Z`0`````!>@`(``````@`;`L6"0P-X`(```$```$"`$$` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````(@!Z`0`````!>@`(``````@`;`L6"0P-X`(```$```$!`"(` -M>0$``````7D`"``````(`&P+%@D,#>`"```!```!`0$D`'L!``````%[``@` -M````"`!L"Q8)#`W@`@```0```0(`00`````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````B`'L!``````%[``@` -M````"`!L"Q8)#`W@`@```0```0$`(@!Z`0`````!>@`(``````@`;`L6"0P- -MX`(```$```$!`20`?`$``````7P`"``````(`&P+%@D,#>`"```!```!`@!! -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````"(`?`$``````7P`"``````(`&P+%@D,#>`"```!```!`0`B -M`'L!``````%[``@`````"`!L"Q8)#`W@`@```0```0$!)`!]`0`````!?0`( -M``````@`;`L6"0P-X`(```$```$"`$$````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````(@!]`0`````!?0`( -M``````@`;`L6"0P-X`(```$```$!`"(`?`$``````7P`"``````(`&P+%@D, -M#>`"```!```!`0$D`'X!``````%^``@`````"`!L"Q8)#`W@`@```0```0(` -M00`````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````B`'X!``````%^``@`````"`!L"Q8)#`W@`@```0```0$` -M(@!]`0`````!?0`(``````@`;`L6"0P-X`(```$```$!`20`?P$``````7\` -M"``````(`&P+%@D,#>`"```!```!`@!!```````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````"(`?P$``````7\` -M"``````(`&P+%@D,#>`"```!```!`0`B`'X!``````%^``@`````"`!L"Q8) -M#`W@`@```0```0$!)`"``0`````!@``(``````@`;`L6"0P-X`(```$```$" -M`$$````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````(@"``0`````!@``(``````@`;`L6"0P-X`(```$```$! -M`"(`?P$``````7\`"``````(`&P+%@D,#>`"```!```!`0$D`($!``````&! -M``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````B`($!``````&! -M``@`````"`!L"Q8)#`W@`@```0```0$`(@"``0`````!@``(``````@`;`L6 -M"0P-X`(```$```$!`20`@@$``````8(`"``````(`&P+%@D,#>`"```!```! -M`@!!```````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````"(`@@$``````8(`"``````(`&P+%@D,#>`"```!```! -M`0`B`($!``````&!``@`````"`!L"Q8)#`W@`@```0```0$!)`"#`0`````! -M@P`(``````@`;`L6"0P-X`(```$```$"`$$````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````(@"#`0`````! -M@P`(``````@`;`L6"0P-X`(```$```$!`"(`@@$``````8(`"``````(`&P+ -M%@D,#>`"```!```!`0$D`(0!``````&$``@`````"`!L"Q8)#`W@`@```0`` -M`0(`00`````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````B`(0!``````&$``@`````"`!L"Q8)#`W@`@```0`` -M`0$`(@"#`0`````!@P`(``````@`;`L6"0P-X`(```$```$!`20`A0$````` -M`84`"``````(`&P+%@D,#>`"```!```!`@!!```````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````"(`A0$````` -M`84`"``````(`&P+%@D,#>`"```!```!`0`B`(0!``````&$``@`````"`!L -M"Q8)#`W@`@```0```0$!)`"&`0`````!A@`(``````@`;`L6"0P-X`(```$` -M``$"`$$````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````(@"&`0`````!A@`(``````@`;`L6"0P-X`(```$` -M``$!`"(`A0$``````84`"``````(`&P+%@D,#>`"```!```!`0$D`(`"```! -M```!`@!!```````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````"(`B`$``````8@`"``````(`&P+%@D,#>`"```! -M```!`0`B`(`"```!```!`0$D`(H!``````&*``@`````"`!L"Q8)#`W@`@`` -M`0```0(`00`````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````B`(H!``````&*``@`````"`!L"Q8)#`W@`@`` -M`0```0$`(@")`0`````!B0`(``````@`;`L6"0P-X`(```$```$!`20`BP$` -M`````8L`"``````(`&P+%@D,#>`"```!```!`@!!```````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````"(`BP$` -M`````8L`"``````(`&P+%@D,#>`"```!```!`0`B`(H!``````&*``@````` -M"`!L"Q8)#`W@`@```0```0$!)`",`0`````!C``(``````@`;`L6"0P-X`(` -M``$```$"`$$````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````(@",`0`````!C``(``````@`;`L6"0P-X`(` -M``$```$!`"(`BP$``````8L`"``````(`&P+%@D,#>`"```!```!`0$D`(T! -M``````&-``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````B`(T! -M``````&-``@`````"`!L"Q8)#`W@`@```0```0$`(@",`0`````!C``(```` -M``@`;`L6"0P-X`(```$```$!`20`C@$``````8X`"``````(`&P+%@D,#>`" -M```!```!`@!!```````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````"(`C@$``````8X`"``````(`&P+%@D,#>`" -M```!```!`0`B`(T!``````&-``@`````"`!L"Q8)#`W@`@```0```0$!)`"/ -M`0`````!CP`(``````@`;`L6"0P-X`(```$```$"`$$````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````````(@"/ -M`0`````!CP`(``````@`;`L6"0P-X`(```$```$!`"(`C@$``````8X`"``` -M```(`&P+%@D,#>`"```!```!`0$D`)`!``````&0``@`````"`!L"Q8)#`W@ -M`@```0```0(`00`````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````B`)`!``````&0``@`````"`!L"Q8)#`W@ -M`@```0```0$`(@"/`0`````!CP`(``````@`;`L6"0P-X`(```$```$!`20` -MD0$``````9$`"``````(`&P+%@D,#>`"```!```!`@!!```````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````````"(` -MD0$``````9$`"``````(`&P+%@D,#>`"```!```!`0`B`)`!``````&0``@` -M````"`!L"Q8)#`W@`@```0```0$!)`"2`0`````!D@`(``````@`;`L6"0P- -MX`(```$```$"`$$````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````(@"2`0`````!D@`(``````@`;`L6"0P- -MX`(```$```$!`"(`D0$``````9$`"``````(`&P+%@D,#>`"```!```!`0$D -M`),!``````&3``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````B -M`),!``````&3``@`````"`!L"Q8)#`W@`@```0```0$`(@"2`0`````!D@`( -M``````@`;`L6"0P-X`(```$```$!`20`E`$``````90`"``````(`&P+%@D, -M#>`"```!```!`@!!```````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````"(`E`$``````90`"``````(`&P+%@D, -M#>`"```!```!`0`B`),!``````&3``@`````"`!L"Q8)#`W@`@```0```0$! -M)`"5`0`````!E0`(``````@`;`L6"0P-X`(```$```$"`$$````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M(@"5`0`````!E0`(``````@`;`L6"0P-X`(```$```$!`"(`E`$``````90` -M"``````(`&P+%@D,#>`"```!```!`0$D`)8!``````&6``@`````"`!L"Q8) -M#`W@`@```0```0(`00`````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````B`)8!``````&6``@`````"`!L"Q8) -M#`W@`@```0```0$`(@"5`0`````!E0`(``````@`;`L6"0P-X`(```$```$! -M`20`EP$``````9<`"``````(`&P+%@D,#>`"```!```!`@!!```````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`"(`EP$``````9<`"``````(`&P+%@D,#>`"```!```!`0`B`)8!``````&6 -M``@`````"`!L"Q8)#`W@`@```0```0$!)`"8`0`````!F``(``````@`;`L6 -M"0P-X`(```$```$"`$$````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````(@"8`0`````!F``(``````@`;`L6 -M"0P-X`(```$```$!`"(`EP$``````9<`"``````(`&P+%@D,#>`"```!```! -M`0$D`)D!``````&9``@`````"`!L"Q8)#`W@`@```0```0(`00`````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```B`)D!``````&9``@`````"`!L"Q8)#`W@`@```0```0$`(@"8`0`````! -MF``(``````@`;`L6"0P-X`(```$```$!`20`F@$``````9H`"``````(`&P+ -M%@D,#>`"```!```!`@!!```````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````"(`F@$``````9H`"``````(`&P+ -M%@D,#>`"```!```!`0`B`)D!``````&9``@`````"`!L"Q8)#`W@`@```0`` -M`0$!)`";`0`````!FP`(``````@`;`L6"0P-X`(```$```$"`$$````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````(@";`0`````!FP`(``````@`;`L6"0P-X`(```$```$!`"(`F@$````` -M`9H`"``````(`&P+%@D,#>`"```!```!`0$D`)P!``````&<``@`````"`!L -M"Q8)#`W@`@```0```0(`00`````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````B`)P!``````&<``@`````"`!L -M"Q8)#`W@`@```0```0$`(@";`0`````!FP`(``````@`;`L6"0P-X`(```$` -M``$!`20`G0$``````9T`"``````(`&P+%@D,#>`"```!```!`@!!```````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````"(`G0$``````9T`"``````(`&P+%@D,#>`"```!```!`0`B`)P!```` -M``&<``@`````"`!L"Q8)#`W@`@```0```0$!)`">`0`````!G@`(``````@` -M;`L6"0P-X`(```$```$"`$$````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````(@">`0`````!G@`(``````@` -M;`L6"0P-X`(```$```$!`"(`G0$``````9T`"``````(`&P+%@D,#>`"```! -M```!`0$D`)\!``````&?``@`````"`!L"Q8)#`W@`@```0```0(`00`````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````B`)\!``````&?``@`````"`!L"Q8)#`W@`@```0```0$`(@">`0`` -M```!G@`(``````@`;`L6"0P-X`(```$```$!`20`H`$``````:``"``````( -M`&P+%@D,#>`"```!```!`@!!```````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````"(`H`$``````:``"``````( -M`&P+%@D,#>`"```!```!`0`B`)\!``````&?``@`````"`!L"Q8)#`W@`@`` -M`0```0$!)`"A`0`````!H0`(``````@`;`L6"0P-X`(```$```$"`$$````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````(@"A`0`````!H0`(``````@`;`L6"0P-X`(```$```$!`"(`H`$` -M`````:``"``````(`&P+%@D,#>`"```!```!`0$D`*(!``````&B``@````` -M"`!L"Q8)#`W@`@```0```0(`00`````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````B`*(!``````&B``@````` -M"`!L"Q8)#`W@`@```0```0$`(@"A`0`````!H0`(``````@`;`L6"0P-X`(` -M``$```$!`20`HP$``````:,`"``````(`&P+%@D,#>`"```!```!`@!!```` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````"(`HP$``````:,`"``````(`&P+%@D,#>`"```!```!`0`B`*(! -M``````&B``@`````"`!L"Q8)#`W@`@```0```0$!)`"D`0`````!I``(```` -M``@`;`L6"0P-X`(```$```$"`$$````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````(@"D`0`````!I``(```` -M``@`;`L6"0P-X`(```$```$!`"(`HP$``````:,`"``````(`&P+%@D,#>`" -M```!```!`0$D`*4!``````&E``@`````"`!L"Q8)#`W@`@```0```0(`00`` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````B`*4!``````&E``@`````"`!L"Q8)#`W@`@```0```0$`(@"D -M`0`````!I``(``````@`;`L6"0P-X`(```$```$!`20`I@$``````:8`"``` -M```(`&P+%@D,#>`"```!```!`@!!```````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````"(`I@$``````:8`"``` -M```(`&P+%@D,#>`"```!```!`0`B`*4!``````&E``@`````"`!L"Q8)#`W@ -M`@```0```0$!)`"G`0`````!IP`(``````@`;`L6"0P-X`(```$```$"`$$` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````(@"G`0`````!IP`(``````@`;`L6"0P-X`(```$```$!`"(` -MI@$``````:8`"``````(`&P+%@D,#>`"```!```!`0$D`*@!``````&H``@` -M````"`!L"Q8)#`W@`@```0```0(`00`````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````B`*@!``````&H``@` -M````"`!L"Q8)#`W@`@```0```0$`(@"G`0`````!IP`(``````@`;`L6"0P- -MX`(```$```$!`20`J0$``````:D`"``````(`&P+%@D,#>`"```!```!`@!! -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````"(`J0$``````:D`"``````(`&P+%@D,#>`"```!```!`0`B -M`*@!``````&H``@`````"`!L"Q8)#`W@`@```0```0$!)`"J`0`````!J@`( -M``````@`;`L6"0P-X`(```$```$"`$$````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````(@"J`0`````!J@`( -M``````@`;`L6"0P-X`(```$```$!`"(`J0$``````:D`"``````(`&P+%@D, -M#>`"```!```!`0$D`*L!``````&K``@`````"`!L"Q8)#`W@`@```0```0(` -M00`````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````B`*L!``````&K``@`````"`!L"Q8)#`W@`@```0```0$` -M(@"J`0`````!J@`(``````@`;`L6"0P-X`(```$```$!`20`K`$``````:P` -M"``````(`&P+%@D,#>`"```!```!`@!!```````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````"(`K`$``````:P` -M"``````(`&P+%@D,#>`"```!```!`0`B`*L!``````&K``@`````"`!L"Q8) -M#`W@`@```0```0$!)`"M`0`````!K0`(``````@`;`L6"0P-X`(```$```$" -M`$$````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````(@"M`0`````!K0`(``````@`;`L6"0P-X`(```$```$! -M`"(`K`$``````:P`"``````(`&P+%@D,#>`"```!```!`0$D`*X!``````&N -M``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````B`*X!``````&N -M``@`````"`!L"Q8)#`W@`@```0```0$`(@"M`0`````!K0`(``````@`;`L6 -M"0P-X`(```$```$!`20`KP$``````:\`"``````(`&P+%@D,#>`"```!```! -M`@!!```````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````"(`KP$``````:\`"``````(`&P+%@D,#>`"```!```! -M`0`B`*X!``````&N``@`````"`!L"Q8)#`W@`@```0```0$!```````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````(@"P`0`````! -ML``(``````@`;`L6"0P-X`(```$```$!`"(`[@```````.X`"``````(`&P+ -M%@D,#>`"```!```!`0$D`+$!``````&Q``@`````"`!L"Q8)#`W@`@```0`` -M`0(`00`````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````B`+$!``````&Q``@`````"`!L"Q8)#`W@`@```0`` -M`0$`(@"P`0`````!L``(``````@`;`L6"0P-X`(```$```$!`20`L@$````` -M`;(`"``````(`&P+%@D,#>`"```!```!`@!!```````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````"(`L@$````` -M`;(`"``````(`&P+%@D,#>`"```!```!`0`B`+$!``````&Q``@`````"`!L -M"Q8)#`W@`@```0```0$!)`"S`0`````!LP`(``````@`;`L6"0P-X`(```$` -M``$"`$$````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````(@"S`0`````!LP`(``````@`;`L6"0P-X`(```$` -M``$!`"(`L@$``````;(`"``````(`&P+%@D,#>`"```!```!`0$D`+0!```` -M``&T``@`````"`!L"Q8)#`W@`@```0```0(`00`````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````B`+0!```` -M``&T``@`````"`!L"Q8)#`W@`@```0```0$`(@"S`0`````!LP`(``````@` -M;`L6"0P-X`(```$```$!`20`M0$``````;4`"``````(`&P+%@D,#>`"```! -M```!`@!!```````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````"(`M0$``````;4`"``````(`&P+%@D,#>`"```! -M```!`0`B`+0!``````&T``@`````"`!L"Q8)#`W@`@```0```0$!)`"V`0`` -M```!M@`(``````@`;`L6"0P-X`(```$```$"`$$````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M````````````````````````````````````````````````````(@"V`0`` -M```!M@`(``````@`;`L6"0P-X`(```$```$!`"(`M0$``````;4`"``````( -M`&P+%@D,#>`"```!```!`0$D`.\```````#O``@`````"`!L"Q8)#`W@`@`` -M`0```0(`00`````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````B`+`"```!```!@`!!`$$`00!!`$$`00!!`$$` -M00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!! -M`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$`00!!`$$` -M00!!`$$`00!!`$$`00!!`$$`00!!```````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M`````````````````````````````````````````````````````"(`N`$` -M`````;@`"``````(`&P+%@D,#>`"```!```!`0`B`+`"```!```!`0$````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M``````````````````````````````````````````````````````!%4NT! -M"E2'`5)225!?,3DY,4%42$4@4D]#2R!2241'12!)3E1%4D-(04Y'12!04D]4 -M3T-/3"!04D]6241%4R!355!03U)4($9/4B!03U-)6"!&24Q%(%-94U1%32!3 -M14U!3E1)0U-03$5!4T4@0T].5$%#5"!$25-#(%!50DQ)4TA%4B!&3U(@4U!% -M0TE&24-!5$E/3B!33U520T4N("!3144@4%5"3$E32$52($E$14Y4249)15(@ -M24X@4%))34%262!63TQ5344@1$530U))4%1/4B!&3U(@0T].5$%#5"!)3D9/ -M4DU!5$E/3BX````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -M```````````````````````````````````````````````````````````` -$```````` -` -end diff --git a/lib/libarchive/test/test_open_fd.c b/lib/libarchive/test/test_open_fd.c index 0aec1d5e9fc..7551dd01a16 100644 --- a/lib/libarchive/test/test_open_fd.c +++ b/lib/libarchive/test/test_open_fd.c @@ -25,6 +25,13 @@ #include "test.h" __FBSDID("$FreeBSD$"); +#if defined(_WIN32) && !defined(__CYGWIN__) +#define open _open +#if !defined(__BORLANDC__) +#define lseek _lseek +#endif +#define close _close +#endif DEFINE_TEST(test_open_fd) { @@ -33,7 +40,11 @@ DEFINE_TEST(test_open_fd) struct archive *a; int fd; - fd = open("test.tar", O_RDWR | O_CREAT, 0777); +#if defined(__BORLANDC__) + fd = open("test.tar", O_RDWR | O_CREAT | O_BINARY); +#else + fd = open("test.tar", O_RDWR | O_CREAT | O_BINARY, 0777); +#endif assert(fd >= 0); if (fd < 0) return; diff --git a/lib/libarchive/test/test_open_file.c b/lib/libarchive/test/test_open_file.c index e931163de21..7e6c5719a26 100644 --- a/lib/libarchive/test/test_open_file.c +++ b/lib/libarchive/test/test_open_file.c @@ -32,7 +32,7 @@ DEFINE_TEST(test_open_file) struct archive *a; FILE *f; - f = fopen("test.tar", "w"); + f = fopen("test.tar", "wb"); assert(f != NULL); if (f == NULL) return; @@ -73,7 +73,7 @@ DEFINE_TEST(test_open_file) /* * Now, read the data back. */ - f = fopen("test.tar", "r"); + f = fopen("test.tar", "rb"); assert(f != NULL); if (f == NULL) return; diff --git a/lib/libarchive/test/test_pax_filename_encoding.c b/lib/libarchive/test/test_pax_filename_encoding.c index 45f984839ca..5affe9f3915 100644 --- a/lib/libarchive/test/test_pax_filename_encoding.c +++ b/lib/libarchive/test/test_pax_filename_encoding.c @@ -107,9 +107,10 @@ test_pax_filename_encoding_2(void) * de_DE.UTF-8 seems to be commonly supported. */ /* If it doesn't exist, just warn and return. */ - if (NULL == setlocale(LC_ALL, LOCALE_DE)) { + if (LOCALE_UTF8 == NULL + || NULL == setlocale(LC_ALL, LOCALE_UTF8)) { skipping("invalid encoding tests require a suitable locale;" - " %s not available on this system", LOCALE_DE); + " %s not available on this system", LOCALE_UTF8); return; } @@ -151,11 +152,7 @@ test_pax_filename_encoding_2(void) archive_entry_free(entry); assertEqualInt(0, archive_write_close(a)); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_write_finish(a); -#else assertEqualInt(0, archive_write_finish(a)); -#endif /* * Now read the entries back. @@ -181,11 +178,7 @@ test_pax_filename_encoding_2(void) assertEqualString(longname, archive_entry_pathname(entry)); assertEqualInt(0, archive_read_close(a)); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_read_finish(a); -#else assertEqualInt(0, archive_read_finish(a)); -#endif } /* @@ -227,6 +220,15 @@ test_pax_filename_encoding_3(void) return; } + /* Skip test if archive_entry_update_pathname_utf8() is broken. */ + /* In particular, this is currently broken on Win32 because + * setlocale() does not set the default encoding for CP_ACP. */ + entry = archive_entry_new(); + if (archive_entry_update_pathname_utf8(entry, badname_utf8)) { + skipping("Cannot test conversion failures."); + return; + } + assert((a = archive_write_new()) != NULL); assertEqualIntA(a, 0, archive_write_set_format_pax(a)); assertEqualIntA(a, 0, archive_write_set_compression_none(a)); @@ -274,11 +276,7 @@ test_pax_filename_encoding_3(void) archive_entry_free(entry); assertEqualInt(0, archive_write_close(a)); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_write_finish(a); -#else assertEqualInt(0, archive_write_finish(a)); -#endif /* * Now read the entries back. @@ -322,11 +320,7 @@ test_pax_filename_encoding_3(void) assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &entry)); assertEqualInt(0, archive_read_close(a)); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_read_finish(a); -#else assertEqualInt(0, archive_read_finish(a)); -#endif } DEFINE_TEST(test_pax_filename_encoding) diff --git a/lib/libarchive/test/test_read_compress_program.c b/lib/libarchive/test/test_read_compress_program.c index 042c6159c48..12e6afc2cc1 100644 --- a/lib/libarchive/test/test_read_compress_program.c +++ b/lib/libarchive/test/test_read_compress_program.c @@ -37,7 +37,6 @@ DEFINE_TEST(test_read_compress_program) int r; struct archive_entry *ae; struct archive *a; - const char *extprog; /* * First, test handling when a non-existent compression @@ -53,26 +52,23 @@ DEFINE_TEST(test_read_compress_program) assertEqualIntA(a, ARCHIVE_OK, r); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); - assertEqualIntA(a, ARCHIVE_OK, - archive_read_open_memory(a, archive, sizeof(archive))); assertEqualIntA(a, ARCHIVE_FATAL, - archive_read_next_header(a, &ae)); - assertEqualIntA(a, ARCHIVE_WARN, archive_read_close(a)); + archive_read_open_memory(a, archive, sizeof(archive))); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); /* * If we have "gzip -d", try using that. */ - if ((extprog = external_gzip_program(1)) == NULL) { - skipping("There is no gzip uncompression " - "program in this platform"); + if (!canGunzip()) { + skipping("Can't run gunzip program on this platform"); return; } assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_none(a)); assertEqualIntA(a, ARCHIVE_OK, - archive_read_support_compression_program(a, extprog)); + archive_read_support_compression_program(a, "gunzip")); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); assertEqualIntA(a, ARCHIVE_OK, diff --git a/lib/libarchive/test/test_read_data_large.c b/lib/libarchive/test/test_read_data_large.c index 76b9e128378..ecacf65e7e9 100644 --- a/lib/libarchive/test/test_read_data_large.c +++ b/lib/libarchive/test/test_read_data_large.c @@ -33,6 +33,11 @@ __FBSDID("$FreeBSD$"); * had a bug relating to this, fixed in Nov 2006). */ +#if defined(_WIN32) && !defined(__CYGWIN__) +#define open _open +#define close _close +#endif + char buff1[11000000]; char buff2[10000000]; char buff3[10000000]; @@ -43,6 +48,7 @@ DEFINE_TEST(test_read_data_large) struct archive *a; char tmpfilename[] = "largefile"; int tmpfilefd; + FILE *f; unsigned int i; size_t used; @@ -96,7 +102,11 @@ DEFINE_TEST(test_read_data_large) assertA(0 == archive_read_support_compression_all(a)); assertA(0 == archive_read_open_memory(a, buff1, sizeof(buff1))); assertA(0 == archive_read_next_header(a, &ae)); - tmpfilefd = open(tmpfilename, O_WRONLY | O_CREAT, 0777); +#if defined(__BORLANDC__) + tmpfilefd = open(tmpfilename, O_WRONLY | O_CREAT | O_BINARY); +#else + tmpfilefd = open(tmpfilename, O_WRONLY | O_CREAT | O_BINARY, 0777); +#endif assert(tmpfilefd != 0); assertEqualIntA(a, 0, archive_read_data_into_fd(a, tmpfilefd)); assert(0 == archive_read_close(a)); @@ -107,11 +117,9 @@ DEFINE_TEST(test_read_data_large) #endif close(tmpfilefd); - tmpfilefd = open(tmpfilename, O_RDONLY); - assert(tmpfilefd != 0); - assertEqualIntA(NULL, sizeof(buff3), read(tmpfilefd, buff3, sizeof(buff3))); - close(tmpfilefd); + f = fopen(tmpfilename, "rb"); + assert(f != NULL); + assertEqualInt(sizeof(buff3), fread(buff3, 1, sizeof(buff3), f)); + fclose(f); assert(0 == memcmp(buff2, buff3, sizeof(buff3))); - - unlink(tmpfilename); } diff --git a/lib/libarchive/test/test_read_disk.c b/lib/libarchive/test/test_read_disk.c index cd87c5ba39c..5666656d538 100644 --- a/lib/libarchive/test/test_read_disk.c +++ b/lib/libarchive/test/test_read_disk.c @@ -111,8 +111,10 @@ DEFINE_TEST(test_read_disk) if (archive_read_disk_set_standard_lookup(a) != ARCHIVE_OK) { skipping("standard uname/gname lookup"); } else { -#if defined(__CYGWIN__) - skipping("standard uname/gname lookup; typically no user with uid=0 on cygwin platform"); +#if defined(__CYGWIN__) || defined(__HAIKU__) + /* Some platforms don't have predictable names for + * uid=0, so we skip this part of the test. */ + skipping("standard uname/gname lookup"); i = 0; p = zero_groups[0]; /* avoid unused warnings */ #else diff --git a/lib/libarchive/test/test_read_disk_entry_from_file.c b/lib/libarchive/test/test_read_disk_entry_from_file.c index 8b3b6d79c56..652b5e4a590 100644 --- a/lib/libarchive/test/test_read_disk_entry_from_file.c +++ b/lib/libarchive/test/test_read_disk_entry_from_file.c @@ -45,7 +45,7 @@ DEFINE_TEST(test_read_disk_entry_from_file) { struct archive *a; struct archive_entry *entry; - int fd; + FILE *f; assert((a = archive_read_disk_new()) != NULL); @@ -57,10 +57,10 @@ DEFINE_TEST(test_read_disk_entry_from_file) assertEqualString(archive_read_disk_gname(a, 0), "FOOGROUP"); /* Create a file on disk. */ - fd = open("foo", O_WRONLY | O_CREAT, 0777); - assert(fd >= 0); - assertEqualInt(4, write(fd, "1234", 4)); - close(fd); + f = fopen("foo", "wb"); + assert(f != NULL); + assertEqualInt(4, fwrite("1234", 1, 4, f)); + fclose(f); /* Use archive_read_disk_entry_from_file to get information about it. */ entry = archive_entry_new(); diff --git a/lib/libarchive/test/test_read_extract.c b/lib/libarchive/test/test_read_extract.c index 887ddfde685..10bd014ac1e 100644 --- a/lib/libarchive/test/test_read_extract.c +++ b/lib/libarchive/test/test_read_extract.c @@ -32,22 +32,15 @@ DEFINE_TEST(test_read_extract) { struct archive_entry *ae; struct archive *a; -#if !defined(_WIN32) || defined(__CYGWIN__) - struct stat st; -#endif size_t used; - int i; + int i, numEntries = 0; char *buff, *file_buff; -#if !defined(_WIN32) || defined(__CYGWIN__) - int fd; - ssize_t bytes_read; -#endif buff = malloc(BUFF_SIZE); file_buff = malloc(FILE_BUFF_SIZE); /* Force the umask to something predictable. */ - umask(022); + assertUmask(022); /* Create a new archive in memory containing various types of entries. */ assert((a = archive_write_new()) != NULL); @@ -55,12 +48,14 @@ DEFINE_TEST(test_read_extract) assertA(0 == archive_write_set_compression_none(a)); assertA(0 == archive_write_open_memory(a, buff, BUFF_SIZE, &used)); /* A directory to be restored with EXTRACT_PERM. */ + ++numEntries; assert((ae = archive_entry_new()) != NULL); archive_entry_copy_pathname(ae, "dir_0775"); archive_entry_set_mode(ae, S_IFDIR | 0775); assertA(0 == archive_write_header(a, ae)); archive_entry_free(ae); /* A regular file. */ + ++numEntries; assert((ae = archive_entry_new()) != NULL); archive_entry_copy_pathname(ae, "file"); archive_entry_set_mode(ae, S_IFREG | 0755); @@ -71,49 +66,53 @@ DEFINE_TEST(test_read_extract) assertA(FILE_BUFF_SIZE == archive_write_data(a, file_buff, FILE_BUFF_SIZE)); archive_entry_free(ae); /* A directory that should obey umask when restored. */ + ++numEntries; assert((ae = archive_entry_new()) != NULL); archive_entry_copy_pathname(ae, "dir"); archive_entry_set_mode(ae, S_IFDIR | 0777); assertA(0 == archive_write_header(a, ae)); archive_entry_free(ae); /* A file in the directory. */ + ++numEntries; assert((ae = archive_entry_new()) != NULL); archive_entry_copy_pathname(ae, "dir/file"); archive_entry_set_mode(ae, S_IFREG | 0700); assertA(0 == archive_write_header(a, ae)); archive_entry_free(ae); /* A file in a dir that is not already in the archive. */ + ++numEntries; assert((ae = archive_entry_new()) != NULL); archive_entry_copy_pathname(ae, "dir2/file"); archive_entry_set_mode(ae, S_IFREG | 0000); assertA(0 == archive_write_header(a, ae)); archive_entry_free(ae); /* A dir with a trailing /. */ + ++numEntries; assert((ae = archive_entry_new()) != NULL); archive_entry_copy_pathname(ae, "dir3/."); archive_entry_set_mode(ae, S_IFDIR | 0710); assertA(0 == archive_write_header(a, ae)); archive_entry_free(ae); /* Multiple dirs with a single entry. */ + ++numEntries; assert((ae = archive_entry_new()) != NULL); archive_entry_copy_pathname(ae, "dir4/a/../b/../c/"); archive_entry_set_mode(ae, S_IFDIR | 0711); assertA(0 == archive_write_header(a, ae)); archive_entry_free(ae); /* A symlink. */ - assert((ae = archive_entry_new()) != NULL); - archive_entry_copy_pathname(ae, "symlink"); - archive_entry_set_mode(ae, S_IFLNK | 0755); - archive_entry_set_symlink(ae, "file"); - assertA(0 == archive_write_header(a, ae)); - archive_entry_free(ae); + if (canSymlink()) { + ++numEntries; + assert((ae = archive_entry_new()) != NULL); + archive_entry_copy_pathname(ae, "symlink"); + archive_entry_set_mode(ae, AE_IFLNK | 0755); + archive_entry_set_symlink(ae, "file"); + assertA(0 == archive_write_header(a, ae)); + archive_entry_free(ae); + } /* Close out the archive. */ assertA(0 == archive_write_close(a)); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_write_finish(a); -#else assertA(0 == archive_write_finish(a)); -#endif /* Extract the entries to disk. */ assert((a = archive_read_new()) != NULL); @@ -125,75 +124,44 @@ DEFINE_TEST(test_read_extract) assertA(0 == archive_read_next_header(a, &ae)); assertA(0 == archive_read_extract(a, ae, ARCHIVE_EXTRACT_PERM)); /* Rest of entries get restored with no flags. */ - for (i = 0; i < 7; i++) { - failure("Error reading entry %d", i+1); + for (i = 1; i < numEntries; i++) { + failure("Error reading entry %d", i); assertA(0 == archive_read_next_header(a, &ae)); + failure("Failed to extract entry %d: %s", i, + archive_entry_pathname(ae)); assertA(0 == archive_read_extract(a, ae, 0)); } assertA(ARCHIVE_EOF == archive_read_next_header(a, &ae)); assert(0 == archive_read_close(a)); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_read_finish(a); -#else assert(0 == archive_read_finish(a)); -#endif -#if !defined(_WIN32) || defined(__CYGWIN__) /* Test the entries on disk. */ /* This first entry was extracted with ARCHIVE_EXTRACT_PERM, * so the permissions should have been restored exactly, * including resetting the gid bit on those platforms * where gid is inherited by subdirs. */ - assert(0 == stat("dir_0775", &st)); failure("This was 0775 in archive, and should be 0775 on disk"); - assertEqualInt(st.st_mode, S_IFDIR | 0775); + assertIsDir("dir_0775", 0775); /* Everything else was extracted without ARCHIVE_EXTRACT_PERM, * so there may be some sloppiness about gid bits on directories. */ - assert(0 == stat("file", &st)); - failure("st.st_mode=%o should be %o", st.st_mode, S_IFREG | 0755); - assertEqualInt(st.st_mode, S_IFREG | 0755); - failure("The file extracted to disk is the wrong size."); - assert(st.st_size == FILE_BUFF_SIZE); - fd = open("file", O_RDONLY); - failure("The file on disk could not be opened."); - assert(fd != 0); - bytes_read = read(fd, buff, FILE_BUFF_SIZE); - close(fd); - failure("The file contents read from disk are the wrong size"); - assert(bytes_read == FILE_BUFF_SIZE); - failure("The file contents on disk do not match the file contents that were put into the archive."); - assert(memcmp(buff, file_buff, FILE_BUFF_SIZE) == 0); - assert(0 == stat("dir", &st)); - failure("This was 0777 in archive, but umask should make it 0755"); + assertIsReg("file", 0755); + assertFileSize("file", FILE_BUFF_SIZE); + assertFileContents(file_buff, FILE_BUFF_SIZE, "file"); /* If EXTRACT_PERM wasn't used, be careful to ignore sgid bit * when checking dir modes, as some systems inherit sgid bit * from the parent dir. */ - assertEqualInt(0755, st.st_mode & 0777); - assert(0 == stat("dir/file", &st)); - assert(st.st_mode == (S_IFREG | 0700)); - assert(0 == stat("dir2", &st)); - assertEqualInt(0755, st.st_mode & 0777); - assert(0 == stat("dir2/file", &st)); - assert(st.st_mode == (S_IFREG | 0000)); - assert(0 == stat("dir3", &st)); - assertEqualInt(0710, st.st_mode & 0777); - assert(0 == stat("dir4", &st)); - assertEqualInt(0755, st.st_mode & 0777); - assert(0 == stat("dir4/a", &st)); - assertEqualInt(0755, st.st_mode & 0777); - assert(0 == stat("dir4/b", &st)); - assertEqualInt(0755, st.st_mode & 0777); - assert(0 == stat("dir4/c", &st)); - assertEqualInt(0711, st.st_mode & 0777); - assert(0 == lstat("symlink", &st)); - assert(S_ISLNK(st.st_mode)); -#if HAVE_LCHMOD - /* Systems that lack lchmod() can't set symlink perms, so skip this. */ - assert((st.st_mode & 07777) == 0755); -#endif - assert(0 == stat("symlink", &st)); - assert(st.st_mode == (S_IFREG | 0755)); -#endif + failure("This was 0777 in archive, but umask should make it 0755"); + assertIsDir("dir", 0755); + assertIsReg("dir/file", 0700); + assertIsDir("dir2", 0755); + assertIsReg("dir2/file", 0000); + assertIsDir("dir3", 0710); + assertIsDir("dir4", 0755); + assertIsDir("dir4/a", 0755); + assertIsDir("dir4/b", 0755); + assertIsDir("dir4/c", 0711); + if (canSymlink()) + assertIsSymlink("symlink", "file"); free(buff); free(file_buff); diff --git a/lib/libarchive/test/test_read_format_ar.ar.uu b/lib/libarchive/test/test_read_format_ar.ar.uu new file mode 100644 index 00000000000..70507cc1da9 --- /dev/null +++ b/lib/libarchive/test/test_read_format_ar.ar.uu @@ -0,0 +1,12 @@ +$FreeBSD$ + +begin 755 test_read_format_ar.ar +M(3QA7ET='1S= 1009000 -/* - * This "archive" is created by "GNU ar". Here we try to verify - * our GNU format handling functionality. - */ -static unsigned char archive[] = { -'!','<','a','r','c','h','>',10,'/','/',' ',' ',' ',' ',' ',' ',' ', -' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', -' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', -' ',' ',' ',' ',' ','4','0',' ',' ',' ',' ',' ',' ',' ',' ','`',10, -'y','y','y','t','t','t','s','s','s','a','a','a','f','f','f','.','o', -'/',10,'h','h','h','h','j','j','j','j','k','k','k','k','l','l','l', -'l','.','o','/',10,10,'/','0',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', -' ',' ',' ',' ','1','1','7','5','4','6','5','6','5','2',' ',' ','1', -'0','0','1',' ',' ','0',' ',' ',' ',' ',' ','1','0','0','6','4','4', -' ',' ','8',' ',' ',' ',' ',' ',' ',' ',' ',' ','`',10,'5','5','6', -'6','7','7','8','8','g','g','h','h','.','o','/',' ',' ',' ',' ',' ', -' ',' ',' ',' ','1','1','7','5','4','6','5','6','6','8',' ',' ','1', -'0','0','1',' ',' ','0',' ',' ',' ',' ',' ','1','0','0','6','4','4', -' ',' ','4',' ',' ',' ',' ',' ',' ',' ',' ',' ','`',10,'3','3','3', -'3','/','1','9',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ', -'1','1','7','5','4','6','5','7','1','3',' ',' ','1','0','0','1',' ', -' ','0',' ',' ',' ',' ',' ','1','0','0','6','4','4',' ',' ','9',' ', -' ',' ',' ',' ',' ',' ',' ',' ','`',10,'9','8','7','6','5','4','3', -'2','1',10}; - -char buff[64]; -#endif DEFINE_TEST(test_read_format_ar) { -#if ARCHIVE_VERSION_NUMBER < 1009000 - skipping("test_read_support_format_ar()"); -#else + char buff[64]; + const char reffile[] = "test_read_format_ar.ar"; struct archive_entry *ae; struct archive *a; + + extract_reference_file(reffile); assert((a = archive_read_new()) != NULL); assertA(0 == archive_read_support_compression_all(a)); assertA(0 == archive_read_support_format_all(a)); - assertA(0 == archive_read_open_memory(a, archive, sizeof(archive))); + assertA(0 == archive_read_open_file(a, reffile, 7)); /* Filename table. */ assertA(0 == archive_read_next_header(a, &ae)); @@ -110,10 +83,5 @@ DEFINE_TEST(test_read_format_ar) /* Test EOF */ assertA(1 == archive_read_next_header(a, &ae)); assert(0 == archive_read_close(a)); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_read_finish(a); -#else assert(0 == archive_read_finish(a)); -#endif -#endif } diff --git a/lib/libarchive/test/test_read_format_cpio_bin_bz2.c b/lib/libarchive/test/test_read_format_cpio_bin_bz2.c index 90270c8f53b..f7c4efb0a08 100644 --- a/lib/libarchive/test/test_read_format_cpio_bin_bz2.c +++ b/lib/libarchive/test/test_read_format_cpio_bin_bz2.c @@ -36,10 +36,15 @@ DEFINE_TEST(test_read_format_cpio_bin_bz2) { struct archive_entry *ae; struct archive *a; + int r; assert((a = archive_read_new()) != NULL); - assertEqualIntA(a, ARCHIVE_OK, - archive_read_support_compression_all(a)); + r = archive_read_support_compression_bzip2(a); + if (r != ARCHIVE_OK) { + skipping("bzip2 support unavailable"); + archive_read_close(a); + return; + } assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_open_memory(a, archive, sizeof(archive))); diff --git a/lib/libarchive/test/test_read_format_cpio_bin_lzma.c b/lib/libarchive/test/test_read_format_cpio_bin_lzma.c new file mode 100644 index 00000000000..26c04404383 --- /dev/null +++ b/lib/libarchive/test/test_read_format_cpio_bin_lzma.c @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2009 Michihiro NAKAJIMA + * Copyright (c) 2003-2007 Tim Kientzle + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "test.h" +__FBSDID("$FreeBSD$"); + +static unsigned char archive[] = { + 93, 0, 0,128, 0,255,255,255,255,255,255,255,255, 0, 99,156, + 62,160, 67,124,230, 93,220,235,118, 29, 75, 27,226,158, 67,149, +151, 96, 22, 54,198,209, 63,104,209,148,249,238, 71,187,201,243, +162, 1, 42, 47, 43,178, 35, 90, 6,156,208, 74,107, 91,229,126, + 5, 85,255,136,255, 64, 0 +}; + +DEFINE_TEST(test_read_format_cpio_bin_lzma) +{ + struct archive_entry *ae; + struct archive *a; + int r; + + assert((a = archive_read_new()) != NULL); + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a)); + r = archive_read_support_compression_lzma(a); + if (r == ARCHIVE_WARN) { + skipping("lzma reading not fully supported on this platform"); + assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); + return; + } + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_open_memory(a, archive, sizeof(archive))); + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_LZMA); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_CPIO_BIN_LE); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); +} + diff --git a/lib/libarchive/test/test_read_format_iso.iso.Z.uu b/lib/libarchive/test/test_read_format_iso.iso.Z.uu new file mode 100644 index 00000000000..2f5cbd79204 --- /dev/null +++ b/lib/libarchive/test/test_read_format_iso.iso.Z.uu @@ -0,0 +1,26 @@ +$FreeBSD$ + +begin 644 test_read_format_iso.iso.Z +M'YV0``(*'$BPH,&#"!,J7,BPH<.'$"-*G$BQHL6+&#-JW,BQH\>/($.*'$FR +MI,F3*%.J7,FRIO8,.*'4NVK-FS:-.J7//JW/'D"-+GDRYLN7+F#-KWLRY +ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ +MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ +MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$;(44890DQ!!`@01BCA +MA!1***`43S11X88<1G@0#`6!Z-&!``1`XH$((`"``@4I,$%"%0PD`@`7%%2C +MB@*IF,8"!UR``0O@"!#0B0=V:.212":IY)),-NGDDU!&*>645%9IY952-K%$ +M$E,\8<04('#Y!`@YV&`##"\@\24(1B3!1!%39#$%%45H*$05;A)1A!0@F`#" +MA44,\804#PK8@A0O$&%%H5(4$005@X*`PA`I@!!##CG,`$(1+F3Q1!5.'$%$ +M$&]*2JFEF-X`@A(N0.&H%%TZ\0*K4PR!A)M,)!$JEKSVRJL,!-800PPPW"## +M##+04,,-!((#+`S"$FLLLLHR"P,X!&:K[;8$`O!LM,4>F^RRS1;IZ[GHIJON +MNNRVZ^Z[\,8K+Y/_U;O8/P(2:*"]_/;K[[\`!UR=EDF`T,0;;H#@Q!MV0*CJ +ML3HDJ\.R('RK0!MKI#''&V;,4;$+,+B@:0MO@$!'&7/0T8*"89#QA1EOR-%& +M&'2XH'')80BL\\X\]^SSSV<=6..00!=M]-%()ZWTTDPW[?334$?=&XD!U4BU +MU%AGK?767'?M]==@ARWVV%K/./1`-PZD(X\^`BEDB4,>:+:-`.`8T-H]_A@D +MT26:2/;?@`N^>:<=^[Y +MYZ"'+OKHI)=N^NFHIZ[ZZJRW[OKKL,O_/+,-^_\\]!'+_WTU%=O_?789Z_]]MQW[_WWX(BGK_[Z[+?O_OOPQR___/37;__]^.>O__[\]^___P`,H``'2,`"&O"`]`,` +` +end diff --git a/lib/libarchive/test/test_read_format_iso_gz.c b/lib/libarchive/test/test_read_format_iso_gz.c index 73c841588c5..22893790c30 100644 --- a/lib/libarchive/test/test_read_format_iso_gz.c +++ b/lib/libarchive/test/test_read_format_iso_gz.c @@ -29,20 +29,13 @@ DEFINE_TEST(test_read_format_iso_gz) { struct archive_entry *ae; struct archive *a; - int r; - const char *name = "test_read_format_iso_gz.iso.gz"; + const char *name = "test_read_format_iso.iso.Z"; extract_reference_file(name); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a)); - r = archive_read_support_compression_gzip(a); - if (r == ARCHIVE_WARN) { - skipping("gzip reading not fully supported on this platform"); - assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); - return; - } assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); assertEqualIntA(a, ARCHIVE_OK, @@ -50,7 +43,7 @@ DEFINE_TEST(test_read_format_iso_gz) assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); assertEqualInt(archive_compression(a), - ARCHIVE_COMPRESSION_GZIP); + ARCHIVE_COMPRESSION_COMPRESS); assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ISO9660); assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); diff --git a/lib/libarchive/test/test_read_format_iso_gz.iso.gz.uu b/lib/libarchive/test/test_read_format_iso_gz.iso.gz.uu deleted file mode 100644 index 759e5b64adf..00000000000 --- a/lib/libarchive/test/test_read_format_iso_gz.iso.gz.uu +++ /dev/null @@ -1,16 +0,0 @@ -$FreeBSD$ -begin 755 test_read_format_iso_gz.iso.gz -M'XL(",E2<$,``W1EDDV&5W;&L+J>O%OV0WW+;;E'I7+4>6RJO+\5_.+9?(J -MJEX>5:/R,BM'Q\^>5E^^.W^R.O^&`?$7C-X/\DD_#T4:NAL;<7VW..@/AFE^ -MF.^GH[!],!@F:19>+Y^?M#?)DJ*PEM63CT4A2[?V)UEXTWL;&MUN*Z2UP\G! -M>"?9&J:KRD[8JWU(M[)\,J[OU?+>[F`X'(QW'FJZS3AN-QIQI]EJKK<[<7Q^ -MI2+^0W2E1REZJ-'S;[B/US;+^=$B-&MQK176YN%LMCA;.YU-/W\ZFI^>3,]J17N8/O0<`("[ -M*5VLL8O_`0``X#&[B/RK%@````#@,;O]'[M;>U@[```````````````````` -M`````````````````````````````````````````````.#.?@")(\.V`(`! -!```` -` -end diff --git a/lib/libarchive/test/test_read_format_iso_joliet.iso.Z.uu b/lib/libarchive/test/test_read_format_iso_joliet.iso.Z.uu new file mode 100644 index 00000000000..b6ac2520083 --- /dev/null +++ b/lib/libarchive/test/test_read_format_iso_joliet.iso.Z.uu @@ -0,0 +1,66 @@ +$FreeBSD$ + +begin 644 test_read_format_iso_joliet.iso.Z +M'YV0``(*'$BPH,&#"!,J7,BPH<.'$"-*G$BQHL6+&#-JW,BQH\>/($.*'$FR +MI,F3*%.J7,FRIO8,.*'4NVK-FS:-.J7//JW/'D"-+GDRYLN7+F#-KWLRY +ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ +MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ +MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$PDX4056(#@X(,01BBA +MA`)*\403$V:HX8,'X5*0AQX="$``(AZ(``(`6%"0!10DI*)`(@#`04$SHB@0 +MBD8$(,"!`1`@0$`E'KCAD$06:>212":IY)),-NGDDU!&*>645#YY1!%.)#'% +M$TDT$<25(&CY!`@YV&`##"\@8<04(!B1!!-%3)'%%%04@>$04A01!!5/2`$" +M"D.D`$(,.>0P`PA%N)#%$U4X<0010<#Y9Z"#%GI#"S(0:`,(2K@`A9Y2;.G$ +M"YU.,002;R;HZ*2"9@J##9@2>`,(%2Z1!!4@U!D$AE7VZJN3KN8`0Z8TR!!# +M#3+,0`.!!`0[+`S%'IOLLC`00."UV&9+(`#.$FLLLLHR*^2OY)9K[KGHIJON +MNNRVZ^Z[2?XG[V(""$B@@0$Q`4`2`#@!0!4`8`$`"`,73/#!!B=,\!``$`&` +M%``\`4`3"E>,\,4=?EC""T5P%"20`)P(``8%84`R0AH,%*,'!;%L8T`XZLBC +MCR"/*"+&.%NL<\X\[^QSST#_+'301`]M=-%('ZUTTDPO[7334#\M-<9'`-"Q +MO_Q.$?&^$P,0!`!5=TQPUEL3G`,`-J`-``P`?`$`$@`8`8#6!,O-K[X=:YW% +MW`!08777"S_\]]=^2PPQP2@`P'`*!<<`P-EGSU!PQRX`L+?$`/M;M<-?XSVU +MT9\7';K0W4+[[;3,EAXMN-1:J^WKVZI^>KC5C@OO[;CGKOONO/?N^^]'SBO\ +M8?_86Z"(PR>O_/+,-^_\\]!'+_WTU%=O?50'SE@S``,`T(%`!Q*1!,37EV_^ +M^>BGK_[Z[+?O_OOPQT\8\C*.&%#W`GT?@/CDR^___P`,H``'2,`"&O"`"$Q@ +M>P[$LNT9```?`%]`R`"`-`!`#@K,H`8WR,$.>O"#(`RA"$=(PJ'0CV4B>J!` +M(G@@"EH0@R6,H0QG2,,:VO"&.,RA#G<('D34CR`U&DC,=C0BFMG/9G.#P@$" +MX(MW/$P*!0A`(*"`!1($H!U?$T@0VH&_@0R`?D#Z$4$$0`4C:"``#L@1$7ND +MQIFU00`$J``-1$"`(12!`P$@&$'T6)!V]-$,/QQ($&\4-YD548Q!"H`4H"A% +M*EH1BP/98A<%\L6"Z*@@9#0C&MM81$[VZ(UQG",!```'[Q7D>R\+62'7:,02 +M#8!_BXQB(IS0!`2T,`UR<.05LQB0+8IQ($0DR"7'6,8SIM&0;$0F`4`I1SH" +M@`\`"$%!0J#"@1@@1Y6$HP1'M``D!$$*1%#5$ERP@QC$,@"S;$(##H2&,,B! +M#&Q(@QO6H$M2!&(@@2#%+P42S($,$YC%W&0`LDD`;!X(CLP4I26B.L_^"+H$<5EG<6O=`"0N@@2)8"J'^%F*/M"%%^060PE"S8)`E*#;#``$`(`& +M`(0AO11D0P4!X`8`K`$`7ECO0-I+D/=*-+X\`(!^W\!?`)P!`"T`@!H`P&#] +M6K`,`*`#A&6[7_UB.,+]O6\;`(#ARFD8PWC(,(V2NTOD*EOY +MREB67A&DT(X`*(`*A]AM$J#P!4+E(`9[0D(10&"A(2R!S4D@`I@45"J9"$(4P!"G`*PA36[&^F0406&&C56C" +MFI5M*FE#@4^S=G2I3YWJ9]/:2YR^:.6RS.YVN_O=2D%#&=A@4@7`^][XSK>^ +M]\WO?OO[WP`/N,`'3O""&_S@"$^XPA?.\(8[_.$0C[C$)T[QBEO\XAC/N,8W +MSO&.>_SC(`^YR$=.\I*;_.0H3[G*5\[REKO\Y3"/NI8S[K6M\[U +MKGO]ZV`/N]C'3O:RF_WL:$^[VM?.]K:[_>UPC[O^ +M^_WO@`^\X`=/^,(;_O"(3[SB%\_XQCO^\9"/O.0G3_G*6_[RF,^\YC?/^I7S_K6N_[UL(^][&=/^]K;_O:XS[WN=\_[WOO^ +M]\`/OO"'3_SB&__XR$^^\I?/_.8[__G0C[[TIT_]ZEO_^MC/OO:WS_WN>__[ +MX`^_^,=/_O*;__SH3[_ZU\_^]KO__?"/O_SG3__ZV__^^,^__O?/__[[__\` +M&(`".(`$6(`&>(`(F(`*N(`,V(`.^(`0&($2.($46($6>($8F($:N($ +M^($@&((B.((D6((F>((HF((JN((LV((N^((P&(,R.(,T6(,V>(,XF(,ZN(,\ +MV(,^^(-`&(1".(1$6(1&>(1(F(1*N(1,V(1.^(10&(52.(546(56>(58F(5: +MN(5^(5@&(9B.(9D6(9F>(9HF(9JN(9LV(9N^(9P&(=R.(=T6(=V>(=X +MF(=ZN(=\V(=^^(>`&(B".(B$6(B&>(B(F(B*N(B,V(B.^(B0&(F2.(F46(F6 +M>(F8F(F:N(F^(F@&(JB.(JD6(JF>(JHF(JJN(JLV(JN^(JP&(NR.(NT +M6(NV>(NXF(NZN(N\V(N^^(O`&(S".(S$6(S&>(S(F(S*N(S,V(S.^(S0&(W2 +M.(W46(W6>(W8F(W:N(W^(W@&([B.([D6([F>([HF([JN([LV([N^([P +(&(_R.(_T:!4` +` +end diff --git a/lib/libarchive/test/test_read_format_iso_joliet_long.iso.Z.uu b/lib/libarchive/test/test_read_format_iso_joliet_long.iso.Z.uu new file mode 100644 index 00000000000..9babf696e12 --- /dev/null +++ b/lib/libarchive/test/test_read_format_iso_joliet_long.iso.Z.uu @@ -0,0 +1,71 @@ +$FreeBSD$ + +begin 644 test_read_format_iso_joliet_long.iso.Z +M'YV0``(*'$BPH,&#"!,J7,BPH<.'$"-*G$BQHL6+&#-JW,BQH\>/($.*'$FR +MI,F3*%.J7,FRIO8,.*'4NVK-FS:-.J7//JW/'D"-+GDRYLN7+F#-KWLRY +ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ +MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ +MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$;(44890DQ!!`@01BCA +MA!1***`43S11X88<1GA0+@6!Z-&!``1`XH$((`"`!@5I0$%"%@PD`@`<%%2C +MB@*I:$0``B10(@D"!'3B@1T6:>212":IY)),-NGDDU!&*>645%9I991-+)'$ +M%$\8,04(6SX!0@XVV`##"TAX"8(123!1Q!193$%%$1H*446;1!0A!0@F@'!A +M$4,\(<6#`K8@Q0M$6$&H%$4$086@(*`P1`H@Q)!##C.`4(0+63Q1A1-'$!&$ +MFY%.6NFE-X"@A`M0-"H%ETZ\L.H40R#1)A-)@'KEKKSN*@.!.<1`(`XPX!!# +M##7D0"`)O\(0[+#%'IOLL@16:^VU!`+0[+/%1HNLLC"00&2OY)9K[KGHIJON +MNNRVZ^Z[2_XG[V(""$B@@0$9`8`<`)31+P!"`#`%`$0``(+!"!^L<,((#T$P +M`%(`\`0`33"\\,46(VR0B`/E4L(+17`TI)``I`@`.`6!@T%"+`HTXP<%P8QC +M0#KRZ&,`0))<(HD8]YRQST#_+'301`]M=-%('ZUTTDPO[7334#\M==143VUU +MU557O`0`20@L,8)>']SUP!,?G`,`-J`-``P`?`$`$F`/?+"^73,!0,@#9^$U +M%7=3C'#`57`-@-T%AQSQP28T_'#$(3L\<<0%'^QPP2U`W/;#5CPLN>4A!W&U +MU)\W';K3VPK;K;'?+ELZM*A/&RZVL%>K+;"F$]LZN.(:#._NO/?N^^_`!R_\ +M\$K.:_QA_]A;((G'-^_\\]!'+WUQ628!`A5HU`'"$V/0`2$.(!2KP[$Z)`O" +MM@K(X$*!Z\<0A@V9MJ`$""VH\08;:91!1PMLO.'&&?2K0QK(4"GZG6&`YP.! +M"Q;X@C3,X0W3BZ`$)TC!"EK0*;B8P8%JI+.2`<`#`CE0#&0P`QK4P`8WP,$% +M5\C"%KKPA3",H0QG2,,:VO"&CF$>C4I$LX&`,``C+.$)4XC#(AKQB$A,HA*7 +MR,0F.O&)4+S/@6#606=HC(<`B(&V`#`#`-```#50VPT`H,*SL4V+,N"B%\$H +M1C("P(Q9W&(7OQC&M(VQC&N+8QKGR$8[NA&.:%0C'=N(QS/*<8UU!,`=WYC' +M0/(QD8L$Y"$'Z<="ZE&0?53D'QLYR4Q&,H]D`$`:]A7%4IKRE*A,I2I7R%[4@SE"D,WLJ3,3!4`*`1UH00^:T($PU*$$@6A!>%20BMHHHQOM +MZ$Y!*E($D-2D5;TJ`'#QP8*`<&8>].C-M=\RK$M/)UKG@MD%[]*MB^TK6P@/WK7A&[6#*D00XJ96D' +M"C)9@^B+(/K2!0!F1!`1&*`@!A#KCT(HI`78-:TNV$$,UAJ`MKXUKH8-[&D/ +M.UO9#I:VM[5M;!5+V-KR%K>[+6QD`U#9@73@L@,Q`G(%HB]";+8@G@6M:'%& +MVA(M``E!&!2NG+"$U*XVJ*YMP('0$`8YD`%_;EC#4`-`BD`,)!"DF*A`!!#1 +M$LDW(`+@K(R@RM'IDL"_)[5J2=M)X`*+<[U%76@[[@L`^BZ5P0(`(4$\P%^I +M?O2_4\4J2DFPWO:^-[Y-K2]3"9)?Z%;8OP#.ZH`-S.(6N_C%\JJIA'V(TQ[Z +M]YXC8RU!#8I0A0:$H1`6,81G+!`*:[2_&0[P594\X)I:5"#RS.F->VHB'2/8 +MQP`XZD.%W-0G!P2C1[;P6)FL80&3`,9H3K.:UYR9E\6LQF'-,(Z%="`W$T1F +M\]3IA>>\LP#`X[F=_2Q!0IOAZ@;`BMNL)C2I.4QM1O.8S!2F-(.I3$A/4]*6 +MIC0VNWE-;EHST8V.=*6S*6H`_/E@!#D86.DY5CX?NM.*=C2C)PWK4%]ZU)P& +M-:UUG>E:[_K1I+[UIC\-;$Y_DY1IU*_+!#T00E_8T!```!H`$`92AI(-H@1` +M3=?`YFY[^]M!"("YFI,4:A4$4!T<"AAZ5*"8 +M``*,/\$*#7\3"*90!2A`05!46!.D3CZ%)&!A36TZ.)SD1*>1TZGB5$C"$*8` +M!3<%80H'#Y03J!"$(:2<"%L:0L>K(`1<3<'@>S("I'@.J"2P:0B.2L(3G#!R +M3TU\4Q`"^L69[G2H@RE/0[=Z$O0$)JYC/`E-R&X60&"%)S"A"DTX>)YH]6\H +M/"KJD!(ZT8W>=JE+(>XYW[H+[,WXQCO^\4%!0QG8T#\%0/[RF,^\YC?/^I7S_K6N_[UL(^][&=/^]K;_O:XS[WN=\_[WOO^ +M]\`/OO"'3_SB&__XR$^^\I?/_.8[__G0C[[TIT_]ZEO_^MC/OO:WS_WN>__[ +MX`^_^,=/_O*;__SH3[_ZU\_^]KO__?"/O_SG3__ZV__^^,^__O?/__[[__\` +M&(`".(`$6(`&>(`(F(`*N(`,V(`.^(`0&($2.($46($6>($8F($:N($ +M^($@&((B.((D6((F>((HF((JN((LV((N^((P&(,R.(,T6(,V>(,XF(,ZN(,\ +MV(,^^(-`&(1".(1$6(1&>(1(F(1*N(1,V(1.^(10&(52.(546(56>(58F(5: +MN(5^(5@&(9B.(9D6(9F>(9HF(9JN(9LV(9N^(9P&(=R.(=T6(=V>(=X +MF(=ZN(=\V(=^^(>`&(B".(B$6(B&>(B(F(B*N(B,V(B.^(B0&(F2.(F46(F6 +M>(F8F(F:N(F^(F@&(JB.(JD6(JF>(JHF(JJN(JLV(JN^(JP&(NR.(NT +M6(NV>(NXF(NZN(N\V(N^^(O`&(S".(S$6(S&>(S(F(S*N(S,V(S.^(S0&(W2 +M.(W46(W6>(W8F(W:N(W^(W@&([B.([D6([F>([HF([JN([LV([N^([P +M&(_R.(_T6(_V>(_XF(_ZN(_\V(_^^(\`&9`".9`$69`&>9`(F9`*N9`,V9`. +M^9`0&9$2.9$469$6>9$8F9$:N9$^9$@&9(B.9(D69(F>9(HF9(JN9(L +MV9(N^9(P&9,R.9,T69,V>9,XF9,ZN9,\V9,^^9-`&91".91$691&>91(F91* +MN91,V91.^910&952.9546956>958F95:N95^95@&99B.99D699F>99H +MF99JN99LV99N^99P&9=R.9=T69=V>9=XF9=ZN9=\V9=^^9>`&9B".9B$69B& +4>9B(F9B*N9B,V9B.^9B0&9F2J90` +` +end diff --git a/lib/libarchive/test/test_read_format_iso_joliet_rockridge.iso.Z.uu b/lib/libarchive/test/test_read_format_iso_joliet_rockridge.iso.Z.uu new file mode 100644 index 00000000000..fdccb0cf714 --- /dev/null +++ b/lib/libarchive/test/test_read_format_iso_joliet_rockridge.iso.Z.uu @@ -0,0 +1,68 @@ +$FreeBSD$ + +begin 644 test_read_format_iso_joliet_rockridge.iso.Z +M'YV0``(*'$BPH,&#"!,J7,BPH<.'$"-*G$BQHL6+&#-JW,BQH\>/($.*'$FR +MI,F3*%.J7,FRIO8,.*'4NVK-FS:-.J7//JW/'D"-+GDRYLN7+F#-KWLRY +ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ +MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ +MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$;(44890DQ!!`@01BCA +MA!1***`43S11X88<1G@0+@6!Z-&!``1`XH$((`"`!0590$%"+`HD`@`<%%2C +MB@*I:$0``B10(@D"!'3B@1T6:>212":IY)),-NGDDU!&*>645%9I991-+)'$ +M%$\8,04(6SX!0@XVV`##"TAX"8(123!1Q!193$%%$1H*446;1!0A!0@F@'!A +M$4,\(<6#`K8@Q0M$6$&H%$4$086@(*`P1`H@Q)!##C.`4(0+63Q1A1-'$!&$ +MFY%.6NFE-X"@A`M0-"H%ETZ\L.H40R#1)A-)@'KEKKSN*@.!.<1`(`XQU""# +M##340"`)O\(0[+#%'IOLL@16:^VU!`+0[+,P$&LLLLK"0`*1O99K[KGHIJON +MNNRVZ^Z[\"[YW[R+"2`@@08&9`0`<@!0AK\`"`'`%``0`0`(!R>,\,(*)SQ$ +MP0!(`<`3`#31,,,87YRP02(.A$L)+Q3!T9!"`I`B`!@4A$'*"&DPT(P>%!0S +MC@'IR*./`0!927BQP$ +MUE.#[K3H3V\K;+?1@KNLZ=!^.ZVXV,9>K;;`GNZMM.&.>W"\O/?N^^_`!R_\ +M\,0K2>_QA_US;X$D(N_\\]!'+_WTQ669!`A4H%$'"$^,00>$.%1:@P['ZI`L +M"-LJ((,+!;(?0Q@V9-J"$B"T4$<:9%1:_QGXHP^""P!\01KF\`;J&?"`"$R@ +M`A>X%5QHX$`UVAD`!@"`#@CD0$1(@L08R,$.>O"#(`RA"$=(PA*:\(0HE$SS +M:%2B@%!0(!8,0`8WF,(:VO"&.,RA#G?(PQ[Z\(=`U,^!8B9!`P#@`Q<,"!D` +MD`9^!?&)4(RB%*=(Q2I:\8I8S*(6H;+"F)'(B`)!XH&6V,1^;?&,:$RC&M?( +MQC:Z\8UPC"-[(,%"@MQH(#;KT8^"U$*>#0P*!PB`+]X1,2D4(`"!@`(66!"` +M=GQ.($%HQPL',H`5"HF/`Q%`!`?"`2H8X8$.V)$><]8&!2#@`19H`0E*>!``!!&$%H6I!VW=$,=.6DR/"+H9GO1)4(H29ZLT)2I5R*A@02Q(LUY>,YA]#,``9EC,0R;" +M"4U`P!C3(`=D-O*1`8DD)@4B`$N6:)\!$8`%"=*!:@8@E,#,V3E)J4U7`H`0 +M``A!04(`QH$88*'?%.8"D!"$0>'*"4MPP0YBT,X`O+,)#3@0&L(@!S*P(0UN +M6(,]21&(@02"%``%0#^AF5,!2)0@(3`H0D=)`HQVTY6>B.A$*RJ0BR8TH^ET +M`!.>`*HO*.$)3'#!G+`PTD*Z$YXC.!`;WN"&,[1`#6]X:1GHT`(SI($-96B! +M&\+0AC*X@`YEP`,=W`K7F=94(#?MJ3^C21"?3E2HJ0U6)"@#`XQ^0C2P\ +M#H+1))9(`7!JPD=#VM62-@*>##C0'/+0AI?&U)[M",5`0M&.P0ZVIX^-+&3A +M,04FE(!$'AAK6<^:UC2LM:UOC>M2A.[,$PN48_*S<5^4Y>;%,@=<_1+ +MHG972";Z+FKQ"0!F%N29!"%L)N,;D$Y^\J"*C2YTO5G=!COXP1!N#8!YHP06:VW:?>EV6N]S$+[/-L;*=+66?6F,'`&`. +M`,@#`,A\92`#0,@1#K2@!TWHHPJ"`%74TCUGHP`J6\#*@EL&H*C +MDD!58WO*UIN"T+AU[6YXRQM,>3(WOI.@)S`Y`=BB;D)'LP`"*V"U"DU0=9YH +M)6HH/&K>D"KWN=/M<'I+0>+I8S[K6M\[U +MKGO]ZV`/N]C'3O:RF_WL:$^[VM?.]K:[_>UPC[O^ +M^_WO@`^\X`=/^,(;_O"(3[SB%\_XQCO^\9"/O.0G3_G*6_[RF,^\YC?/^I7S_K6N_[UL(^][&=/^]K;_O:XS[WN=\_[WOO^ +M]\`/OO"'3_SB&__XR$^^\I?/_.8[__G0C[[TIT_]ZEO_^MC/OO:WS_WN>__[ +MX`^_^,=/_O*;__SH3[_ZU\_^]KO__?"/O_SG3__ZV__^^,^__O?/__[[__\` +M&(`".(`$6(`&>(`(F(`*N(`,V(`.^(`0&($2.($46($6>($8F($:N($ +M^($@&((B.((D6((F>((HF((JN((LV((N^((P&(,R.(,T6(,V>(,XF(,ZN(,\ +MV(,^^(-`&(1".(1$6(1&>(1(F(1*N(1,V(1.^(10&(52.(546(56>(58F(5: +MN(5^(5@&(9B.(9D6(9F>(9HF(9JN(9LV(9N^(9P&(=R.(=T6(=V>(=X +MF(=ZN(=\V(=^^(>`&(B".(B$6(B&>(B(F(B*N(B,V(B.^(B0&(F2.(F46(F6 +M>(F8F(F:N(F^(F@&(JB.(JD6(JF>(JHF(JJN(JLV(JN^(JP&(NR.(NT +M6(NV>(NXF(NZN(N\V(N^^(O`&(S".(S$6(S&>(S(F(S*N(S,V(S.^(S0&(W2 +M.(W46(W6>(W8F(W:N(W^(W@&([B.([D6([F>([HF([JN([LV([N^([P +M&(_R.(_T6(_V>(_XF(_ZN(_\V(_^^(\`&9`".9`$69`&>9`(F9`*N9`,V9`. +M^9`0&9$2.9$469$6>9$8F9$:N9$^9$@&9(B.9(D69(F>9(HF9(JN9(L +.V9(N^9(P&9,R.9,T^8(` +` +end diff --git a/lib/libarchive/test/test_read_format_iso_multi_extent.c b/lib/libarchive/test/test_read_format_iso_multi_extent.c new file mode 100644 index 00000000000..9697a4b5de6 --- /dev/null +++ b/lib/libarchive/test/test_read_format_iso_multi_extent.c @@ -0,0 +1,94 @@ +/*- + * Copyright (c) 2003-2007 Tim Kientzle + * Copyright (c) 2009 Michihiro NAKAJIMA + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "test.h" +__FBSDID("$FreeBSD$"); + +DEFINE_TEST(test_read_format_iso_multi_extent) +{ + const char *refname = "test_read_format_iso_multi_extent.iso.Z"; + struct archive_entry *ae; + struct archive *a; + const void *p; + size_t size; + off_t offset; + int i; + + extract_reference_file(refname); + assert((a = archive_read_new()) != NULL); + assertEqualInt(0, archive_read_support_compression_all(a)); + assertEqualInt(0, archive_read_support_format_all(a)); + assertEqualInt(ARCHIVE_OK, + archive_read_open_filename(a, refname, 10240)); + + /* Retrieve each of the 2 files on the ISO image and + * verify that each one is what we expect. */ + for (i = 0; i < 2; ++i) { + assertEqualInt(0, archive_read_next_header(a, &ae)); + + if (strcmp(".", archive_entry_pathname(ae)) == 0) { + /* '.' root directory. */ + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(0, archive_entry_mtime_nsec(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualIntA(a, ARCHIVE_EOF, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt((int)size, 0); + } else if (strcmp("file", archive_entry_pathname(ae)) == 0) { + /* A regular file. */ + assertEqualString("file", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualInt(262280, archive_entry_size(ae)); + assertEqualInt(0, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt(0, offset); + assertEqualMem(p, "head--head--head", 16); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else { + failure("Saw a file that shouldn't have been there"); + assertEqualString(archive_entry_pathname(ae), ""); + } + } + + /* End of archive. */ + assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &ae)); + + /* Verify archive format. */ + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_COMPRESS); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ISO9660_ROCKRIDGE); + + /* Close the archive. */ + assertEqualInt(0, archive_read_close(a)); + assertEqualInt(0, archive_read_finish(a)); +} + + diff --git a/lib/libarchive/test/test_read_format_iso_multi_extent.iso.Z.uu b/lib/libarchive/test/test_read_format_iso_multi_extent.iso.Z.uu new file mode 100644 index 00000000000..3ce33dc2001 --- /dev/null +++ b/lib/libarchive/test/test_read_format_iso_multi_extent.iso.Z.uu @@ -0,0 +1,67 @@ +$FreeBSD$ + +begin 644 test_read_format_iso_multi_extent.iso.Z +M'YV0``(*'$BPH,&#"!,J7,BPH<.'$"-*G$BQHL6+&#-JW,BQH\>/($.*'$FR +MI,F3*%.J7,FRIO8,.*'4NVK-FS:-.J7//JW/'D"-+GDRYLN7+F#-KWLRY +ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ +MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ +MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$;(44890DQ!!`@01BCA +MA!1***`43S11X88<1GB0#0<*%(`-'X48@(D`((````H4I``%"5DPD`@`<%"0 +MC2L*M*(1`0B0```!D"!`0"8>V.&12":IY)),-NGDDU!&*>645%9IY9583LE$ +M$D($(<402"1A11$@)#'%$R#D8(,-,(!@1!),%#%%%E-0482&5TB1A)U29.GG +MGX`&*FB2,A"80PP%WD!@#&PJ"@,)A<)P:**+-DH@"01FJNFF!`(0Z:0Q.,HH +M#(Z28.2@J*:JZJJLMNKJJ[#&*FN5_]6ZF``"+AJB$0#(`4`9OP(@!`!3`$`$ +M`"`@JVRRS"ZK[!#&`B`%`$\`T(2SS6:+K;(&@3C0B"6\4`1'11*9XHHM$J0` +M!@EI,",`'104;XX![=CCCT$."221(6KK[[;_!@SPP`(73/#!!B>,\,(*-\SP +MPPY'#/'$$E=,\<466\P$`$D("T`0T@(`+1(<`V`%`.,FVW&QU2:;`P`DD@B# +MLKQVO/&XQ69!+`!4H&RMLE>$W''/XTZ;,<9('ZUMT@\SK?"GB(9:*:F70DUI +M@98^RNG6F7IJ:-2B9FTJLK.6;?;9:*>M]MILIVWKVX?]DVN!(<)M]]UXYZWW +MWL4EX801:$X1!AT@/#$&X:&"0*`.C.I`*@B?*L!&&F*$(<<8:*1A1QF0NW"# +M"SD0&`8(:O_/+,-^_\\]"#5G>-^T9O_?789Z_]]MQW[_WWX(>O]X'Q#B_^ +M^>BGK_[Z[+?O_OOPQR__5]/'._W\^.>O__[\]^___P`,H`#S`PGJ$01'`[&7 +MCX`DI.&=B%A0.$``?/$.:4FA``$(!!2PP((`M`%D`@E"&_0U$`'<#T@D%(@` +MA#<0#E#!"!H(@`-XM,`@T1!?)&B#`B(```@<@`1#*`('`N"!@A31(.TH2#O< +M8,`6IBB!"+H7`_55I`!(X8(9W&`'/S@0$:8P("8L2(\*LL(;O3"&,Y2B#=68 +MPQWV\(<`X`,`/E`0.N+#1/B(8@U)``@''N!-<7+!#F)P10PFP@E-2,"!S)"& +MU&DQ2($82"#&1I`'5O*+`!``'0GR@3/*\(8,!&60=,A#'Y)`CEXH2"KO2*0\ +MBI*/?@1D$01)2"P>,I&+;&09'DF"2`IDDB>TY+> +M$@"=*$@G$`&!@4``$:\4$9'^"*=9#K*0`;BE(@'`2$=R$)*2I.2W@DG,:!*D +M$\E\)3/=:,H!VO.>^'P+C,(0GL`$KV+("DD@@IQ`,(4J0`$*3Y`" +M%=P45Z\^80I)P(*;NLE6.ME)0U.XTU:ID(0A3`$*<0I"8$$P5B=0(0A#F"L1 +MS#0$KU9!"%N:@E/[!+@^';8(0TC"FX;`U"0\P0EL?4(5OC1+"`663%"X;&8W +M6R:U.E:T2?!IF5#[U20TP4M9`($5R%J%)I!)K5,8@E'#RMFZ-O:QD=UM9W]+ +MV-.Z@*?8S:YVM]L7-)0A#&1H00N\"U[QDC>\X_TN>L]K7O6&X;WPC:]\YTO? +M^7+WOOC-KW[WR]_^^O>_``ZP@`=,X`(;^,`(3K""%\S@!COXP1".L(0G3.$* +M6_C"&,ZPAC?,X0Y[^,,@#K&(1TSB$IOXQ"A.L8I7S.(6N_C%,(ZQC&=,XQK; +M^,8XSK&.=\SC'OOXQT`.LI"'3.0B&_G(2$ZRDI?,Y"8[^_G+8`ZSF,=,YC*;^,ZSGO?,YS[[^<^`#K2@!TWH0AOZT(A.M*(7S>A&._K1D(ZTI"=-Z4I;^M*8 +MSK2F-\WI3GOZTZ`.M:A'3>I2F_K4J$ZUJE?-ZE:[^M6PCK6L9TWK6MOZUKC. +MM:YWS>M>^_K7P`ZVL(=-[&(;^]C(3K:RE\WL9CO[V=".MK2G3>UJ6_O:V,ZV +MMK?-[6Y[^]O@#K>XQTWNYVN_O=\(ZWO.=-[WK;^][XSK>^ +M]\WO?OO[WP`/N,`'3O""&_S@"$^XPA?.\(8[_.$0C[C$)T[QBEO\XAC/N,8W +MSO&.>_SC(`^YR$=.\I*;_.0H3[G*5\[REKO\Y3"/NI8S[K6M\[U +MKGO]ZV`/N]C'3O:RF_WL:$^[VM?.]K:[_>UPC[O^ +M^_WO@`^\X`=/^,(;_O"(3[SB%\_XQCO^\9"/O.0G3_G*6_[RF,^\YC?/^I7S_K6N_[UL(^][&=/^]K;_O:XS[WN=\_[WOO^ +M]\`/?FOJ2_SBTY<.86BD>)&O_!8PGPW+3S[TG2_]Z#=2^-C/OO:WS_WN>__[ +MX`^_^,=/_O*;__SH3[_ZU\_^]KO__?"/O_SG3__ZV__^^,^__O?/__[[__\` +M&(`".(`$6(`&>(`(F(`*N(`,V(`.^(`0&($2.($46($6>($8F($:N($ +M^($@&((B.((D6((F>((HF((JN((LV((N^((P&(,R.(,T6(,V>(,XF(,ZN(,\ +MV(,^^(-`&(1".(1$6(1&>(1(F(1*N(1,V(1.^(10&(52.(546(56>(58F(5: +MN(5^(5@&(9B.(9D6(9F>(9HF(9JN(9LV(9N^(9P&(=R.(=T6(=V>(=X +MF(=ZN(=\V(=^^(>`&(B".(B$6(B&>(B(F(B*N(B,V(B.^(B0&(F2.(F46(F6 +M>(F8F(F:N(F^(F@&(JB.(JD6(JF>(JHF(JJN(JLV(JN^(JP&(NR.(NT +M6(NV>(NXF(NZN(N\V(N^^(O`&(S".(S$6(S&>(S(F(S*N(S,V(S.^(S0&(W2 +M.(W46(W6>(W8F(W:N(W^(W@&([B.([D6([F>([HF([JN([LV([N^([P +M&(_R.(_T6(_V>(_XF(_ZN(_\V(_^^(\`&9`".9`$69`&>9`(F9`*N9`,V9`. +0^9`0&9$2.9$469$6>9%O"``` +` +end diff --git a/lib/libarchive/test/test_read_format_iso_rockridge.iso.Z.uu b/lib/libarchive/test/test_read_format_iso_rockridge.iso.Z.uu new file mode 100644 index 00000000000..218631ca2c3 --- /dev/null +++ b/lib/libarchive/test/test_read_format_iso_rockridge.iso.Z.uu @@ -0,0 +1,206 @@ +$FreeBSD$ + +begin 644 test_read_format_iso_rockridge.iso.Z +M'YV0``(*'$BPH,&#"!,J7,BPH<.'$"-*G$BQHL6+&#-JW,BQH\>/($.*'$FR +MI,F3*%.J7,FRIO8,.*'4NVK-FS:-.J7//JW/'D"-+GDRYLN7+F#-KWLRY +ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ +MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ +MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$;(44890DQ!!`@01BCA +MA!1***`43S11X88<1GA0#Q@,A$$/'QT(0``F'H@``@!84)`%$R14P4`B`'!! +M03>R*!"+1@0@0`(GDB!`0"D>V.&12":IY)),-NGDDU!&*>645%9IY9583MG$ +M$DE,\8014X#0Y1,@Y&"##3"\@`28(!B1!!-%3)'%%%04H:$05;Q)1!%2@&`" +M"!<6,<034CPH8`M2O$"$%89*44005!`*`@I#I`!"##GD,`,(1;B0Q1-5.'$$ +M$4'`.6FEEV9Z`PA*N`#%HU)XZ<0+K4XQ!!)O,I&$J%GVZFNO,A"8`PPYR'`# +MIC'4,$.P,)#`[+#%'IM#LLL22`*!V&:K+8$`/$NLL<@JRRP)1OYJ[KGHIJON +MNNRVZ^Z[\,;;Y'_T+O:/@`0:6.^^_/;K[[\`5[=E$B!,48<;!9-B(TX`J!C0#SZ"&0`0NY\XH%30'%` +M`+Z\`X`44A000"!08$%N.T$,%$0[5P\TP-0"^5B0`%08H4$`#O3X8Y!M)+#! +M!`^`0$+GGX=.PA!%2)1*((N."$&QX` +MXHHS7M#C!4E.$.668Z[YW*-[#KKHI$]/`@!P^%Q0B&^[C:#<0>Z>X@!;_QY` +M(DXT@<"!9*0A1^&')R[0XKL/)`#D1-8O$/.79PX^W<_CG/1,!P`Z`$`#!=$` +M%<+`BX#P(@R5^]_U[!:``[@)3B[800S,A[XF).!`9D@#&\H`OP"0(A`#"00I +M]!>0^R6/A0#@G_,D&$"Z5<]T?#A@`A?80``\,(*YFR#O3K0`)`2A4+IRPA(R +MN,'`G2]]#3@0&L(@!S*P(0UN6$,)3YC"%4X.?R>"H0S]%\0:1J]THC,$`$ZA +M,ZJ=XB!FC!R1%""G)B1QB1K\FQ,;D3X&'&@.>6C#%;-8PG:$8B"A:`<84?3" +MR4V!"0LP$0%".,+*]:]'`P"2`$B`24V>T7IK8^-`+O!&@]Q0='(D8AWO*`,F +MFH^/38@B```I2"RN00:%/*1`$KG(18KQD7[T'@`&0(X3B'P,YR#7,()>(5&3R?.E()CA` +M10$AIC$)``!D.D"9^!R@Z!CQS%%*DR#*3&4`MID%.W:3!N`4'"QE20Z#G,8AZS>??4YS*I)U)']%,@I(2C!`5*4(,JL08) +M#`&8'3:KAU7MFY.O= +M`F"^X,6O>(WC65D-"U(S)I:``(3JM`$V^[)5JZ%0J3Z*ZGWQG>^&?:O%#I\W@.[ +MP+0XSK&.=QPS-)2!#6QX@P)X3.0B&_G(2$ZRDI?,Y"8[^_G+8`ZSF,=,YC*;^,ZSGO?,YS[[^<^`#K2@!TWH0AOZT(A.M*(7S>A&._K1D(ZTI"=-Z4I;^M*8 +MSK2F-\WI3GOZTZ`.M:A'3>I2F_K4J$ZUJE?-ZE:[^M6PCK6L9TWK6MOZUKC. +MM:YWS>M>^_K7P`ZVL(=-[&(;^]C(3K:RE\WL9CO[V=".MK2G3>UJ6_O:V,ZV +MMK?-[6Y[^]O@#K>XQTWNYVN_O=\(ZWO.=-[WK;^][XSK>^ +M]\WO?OO[WP`/N,`'3O""&_S@"$^XPA?.\(8[_.$0C[C$)T[QBEO\XAC/N,8W +MSO&.>_SC(`^YR$=.\I*;_.0H3[G*5\[REKO\Y3"/NI8S[K6M\[U +MKGO]ZV`/N]C'3O:RF_WL:$^[VM?.]K:[_>UPC[O^ +M^_WO@`^\X`=/^,(;_O"(3[SB%\_XQCO^\9"/O.0G3_G*6_[RF,^\YC?/^I7S_K6N_[UL(^][&=/^]K;_O:XS[WN=\_[WOO^ +M]\`/OO"'3_SB&__XR$^^\I?/_.8[__G0C[[TIT_]ZEO_^MC/OO:WS_WN>__[ +MX`^_^,=/_O*;__SH3[_ZU\_^]KO__?"/O_SG3__ZV__^^,^__O?/__[[__\` +M&(`".(`$6(`&>(`(F(`*N(`,V(`.^(`0&($2.($46($6>($8F($:N($ +M^($@&((B.((D6((F>((HF((JN((LV((N^((P&(,R.(,T6(,V>(,XF(,ZN(,\ +MV(,^^(-`&(1".(1$6(1&>(1(F(1*N(1,V(1.^(10&(52.(546(56>(58F(5: +MN(5^(5@&(9B.(9D6(9F>(9HF(9JN(9LV(9N^(9P&(=R.(=T6(=V>(=X +MF(=ZN(=\V(=^^(>`&(B".(B$6(B&>(B(F(B*N(B,V(B.^(B0&(F2.(F46(F6 +M>(F8F(F:N(F^(F@&(JB.(JD6(JF>(JHF(JJN(JLV(JN^(JP&(NR.(NT +M6(NV>(NXF(NZN(N\V(N^^(O`&(S".(S$6(S&>(S(F(S*N(S,V(S.^(S0&(W2 +M.(W46(W6>(W8F(W:N(W^(W@&([B.([D6([F>([HF([JN([LV([N^([P +M&(_R.(_T6(_V>(_XF(_ZN(_\V(_^^(\`&9`".9`$69`&>9`(F9`*N9`,V9`. +M^9`0&9$2.9$469$6>9$8F9$:N9$^9$@&9(B.9(D69(F>9(HF9(JN9(L +MV9(N^9(P&9,R.9,T69,V>9,XF9,ZN9,\V9,^^9-`&91".91$691&>91(F91* +MN91,V91.^910&952.9546956>958F95:N95^95@&99B.99D699F>99H +MF99JN99LV99N^99P&9=R.9=T69=V>9=XF9=ZN9=\V9=^^9>`&9B".9B$69B& +M>9B(F9B*N9B,V9B.^9B0&9F2.9F469F6>9F8F9F:N9F^9F@&9JB.9JD +M69JF>9JHF9JJN9JLV9JN^9JP&9NR.9NT69NV>9NXF9NZN9N\V9N^^9O`&9S" +M.9S$69S&>9S(F9S*N9S,V9S.^9S0&9W2.9W469W6>9W8F9W:N9W^9W@ +M&9[B.9[D69[F>9[HF9[JN9[LV9[N^9[P&9_R.9_T69_V>9_XF9_ZN9_\V9_^ +M^9\`&J`".J`$6J`&>J`(FJ`*NJ`,VJ`.^J`0&J$2.J$46J$6>J$8FJ$:NJ$< +MVJ$>^J$@&J(B.J(D6J(F>J(HFJ(JNJ(LVJ(N^J(P&J,R.J,T6J,V>J,XFJ,Z +MNJ,\VJ,^^J-`&J1".J1$6J1&>J1(FJ1*NJ1,VJ1.^J10&J52.J546J56>J58 +MFJ5:NJ5^J5@&J9B.J9D6J9F>J9HFJ9JNJ9LVJ9N^J9P&J=R.J=T6J=V +M>J=XFJ=ZNJ=\VJ=^^J>`&JB".JB$6JB&>JB(FJB*NJB,VJB.^JB0&JF2.JF4 +M6JF6>JF8FJF:NJF^JF@&JJB.JJD6JJF>JJHFJJJNJJLVJJN^JJP&JNR +M.JNT6JNV>JNXFJNZNJN\VJN^^JO`&JS".JS$6JS&>JS(FJS*NJS,VJS.^JS0 +M&JW2.JW46JW6>JW8FJW:NJW^JW@&J[B.J[D6J[F>J[HFJ[JNJ[LVJ[N +M^J[P&J_R.J_T6J_V>J_XFJ_ZNJ_\VJ_^^J\`&[`".[`$6[`&>[`(F[`*N[`, +MV[`.^[`0&[$2.[$46[$6>[$8F[$:N[$^[$@&[(B.[(D6[(F>[(HF[(J +MN[(LV[(N^[(P&[,R.[,T6[,V>[,XF[,ZN[,\V[,^^[-`&[1".[1$6[1&>[1( +MF[1*N[1,V[1.^[10&[52.[546[56>[58F[5:N[5^[5@&[9B.[9D6[9F +M>[9HF[9JN[9LV[9N^[9P&[=R.[=T6[=V>[=XF[=ZN[=\V[=^^[>`&[B".[B$ +M6[B&>[B(F[B*N[B,V[B.^[B0&[F2.[F46[F6>[F8F[F:N[F^[F@&[JB +M.[JD6[JF>[JHF[JJN[JLV[JN^[JP&[NR.[NT6[NV>[NXF[NZN[N\V[N^^[O` +M&[S".[S$6[S&>[S(F[S*N[S,V[S.^[S0&[W2.[W46[W6>[W8F[W:N[W +M^[W@&[[B.[[D6[[F>[[HF[[JN[[LV[[N^[[P&[_R.[_T6[_V>[_XF[_ZN[_\ +MV[_^^[\`',`"/,`$7,`&?,`(G,`*O,`,W,`._,`0',$2/,$47,$6?,$8G,$: +MO,$_,$@',(B/,(D7,(F?,(HG,(JO,(LW,(N_,(P',,R/,,T7,,V?,,X +MG,,ZO,,\W,,^_,-`',1"/,1$7,1&?,1(G,1*O,1,W,1._,10',52/,547,56 +M?,58G,5:O,5_,5@',9B/,9D7,9F?,9HG,9JO,9LW,9N_,9P',=R/,=T +M7,=V?,=XG,=ZO,=\W,=^_,>`',B"/,B$7,B&?,B(G,B*O,B,W,B._,B0',F2 +M/,F47,F6?,F8G,F:O,F_,F@',JB/,JD7,JF?,JHG,JJO,JLW,JN_,JP +M',NR/,NT7,NV?,NXG,NZO,N\W,N^_,O`',S"/,S$7,S&?,S(G,S*O,S,W,S. +M_,S0',W2/,W47,W6?,W8G,W:O,W_,W@',[B/,[D7,[F?,[HG,[JO,[L +MW,[N_,[P',_R/,_T7,_V?,_XG,_ZO,_\W,_^_,\`'=`"/=`$7=`&?=`(G=`* +MO=`,W=`._=`0'=$2/=$47=$6?=$8G=$:O=$_=$@'=(B/=(D7=(F?=(H +MG=(JO=(LW=(N_=(P'=,R/=,T7=,V?=,XG=,ZO=,\W=,^_=-`'=1"/=1$7=1& +M?=1(G=1*O=1,W=1._=10'=52/=547=56?=58G=5:O=5_=5@'=9B/=9D +M7=9F?=9HG=9JO=9LW=9N_=9P'==R/==T7==V?==XG==ZO==\W==^_=>`'=B" +M/=B$7=B&?=B(G=B*O=B,W=B._=B0'=F2/=F47=F6?=F8G=F:O=F_=F@ +M'=JB/=JD7=JF?=JHG=JJO=JLW=JN_=JP'=NR/=NT7=NV?=NXG=NZO=N\W=N^ +M_=O`'=S"/=S$7=S&?=S(G=S*O=S,W=S._=S0'=W2/=W47=W6?=W8G=W:O=W< +MW=W>_=W@'=[B/=[D7=[F?=[HG=[JO=[LW=[N_=[P'=_R/=_T7=_V?=_XG=_Z +MO=_\W=_^_=\`'N`"/N`$7N`&?N`(GN`*ON`,WN`._N`0'N$2/N$47N$6?N$8 +MGN$:ON$_N$@'N(B/N(D7N(F?N(HGN(JON(LWN(N_N(P'N,R/N,T7N,V +M?N,XGN,ZON,\WN,^_N-`'N1"/N1$7N1&?N1(GN1*ON1,WN1._N10'N52/N54 +M7N56?N58GN5:ON5_N5@'N9B/N9D7N9F?N9HGN9JON9LWN9N_N9P'N=R +M/N=T7N=V?N=XGN=ZON=\WN=^_N>`'NB"/NB$7NB&?NB(GNB*ONB,WNB._NB0 +M'NF2/NF47NF6?NF8GNF:ONF_NF@'NJB/NJD7NJF?NJHGNJJONJLWNJN +M_NJP'NNR/NNT7NNV?NNXGNNZONN\WNN^_NO`'NS"/NS$7NS&?NS(GNS*ONS, +MWNS._NS0'NW2/NW47NW6?NW8GNW:ONW_NW@'N[B/N[D7N[F?N[HGN[J +MON[LWN[N_N[P'N_R/N_T7N_V?N_XGN_ZON_\WN_^_N\`'_`"/_`$7_`&?_`( +MG_`*O_`,W_`.__`0'_$2/_$47_$6?_$8G_$:O_$__$@'_(B/_(D7_(F +M?_(HG_(JO_(LW_(N__(P'_,R/_,T7_,V?_,XG_,ZO_,\W_,^__-`'_1"/_1$ +M7_1&?_1(G_1*O_1,W_1.__10'_52/_547_56?_58G_5:O_5__5@'_9B +M/_9D7_9F?_9HG_9JO_9LW_9N__9P'_=R/_=T7_=V?_=XG_=ZO_=\W_=^__>` +M'_B"/_B$7_B&?_B(G_B*O_B,W_B.__B0'_F2/_F47_F6?_F8G_F:O_F +M__F@'_JB/_JD7_JF?_JHG_JJO_JLW_JN__JP'_NR/_NT7_NV?_NXG_NZO_N\ +MW_N^__O`'_S"/_S$7_S&?_S(G_S*O_S,W_S.__S0'_W2/_W47_W6?_W8G_W: +MO_W__W@'_[B/_[D7_[F?_[HG_[JO_[LW_[N__[P'__R/__T7__V?__X +MG__ZO__\W__^__\`,``*P`%(``N@`3R`"#`!*L`%R``;H`-\@!`P`DK`"4@! +M*Z`%O(`8,`-JP`W(`3N@!_R`(#`$BL`12`)+H`D\@2@P!:K`%<@"6Z`+?($P +M,`;*P!E(`VN@#;R!.#`'ZL`=R`-[H`_\@4`P"`K!(4@$BZ`1/()(,`DJP27( +M!)N@$WR"4#`*2L$I2`6KH!6\@E@P"VK!+<@%NZ`7_()@,`R*P3%(!LN@&3R# +M:#`-JL$UR`;;H!M\@W`P#LK!.4@'ZZ`=O(-X,`_JP3W(!_N@'_R#@#`0"L)! +M2`@+H2$\A(@P$2K"1<@(&Z$C?(20,!)*PDE("2NA);R$F#`3:L)-R`D[H2?\ +MA*`P%(K"44@*2Z$I/(6H,!6JPE7("ENA*WR%L#`6RL)92`MKH2V\A;@P%^K" +M7<@+>Z$O_(7`,!@*PV%(#(NA,3R&R#`9*L-ER`R;H3-\AM`P&DK#:4@-JZ$U +MO(;8,!MJPVW(#;NA-_R&X#`3R/Z#$]JL?U +MR![;HWM\C_`Q/LK'^4@?ZZ-]O(_X,3_JQ_W('_NC?_R/`#)`"L@!22`+I($\ +MD`@R02K(!Z2/ +M_)%`,D@*R2%))(NDD3R22#))*LDER22;I)-\DE`R2DK)*4DEJZ25O))8,DMJ +MR2W));NDE_R28#),BLDQ22;+I)D\DV@R3:K)-#)/ZLD]R2?[I)_\DX`R4`K*04DH"Z6A/)2(,E$JRD7)*!NEHWR4D#)2 +M2LI)22DKI:6\E)@R4VK*3RLMY22_KI;V\E_@R7^K+?Z?O_)W`,W@* +MS^%)/(NG\3R>R#-Y*L_ER3R;I_-\GM`S>DK/Z4D]JZ?UO)[8,WMJS^W)/;NG +M]_R>X#-\BL_Q23[+I_D\G^@S?:K/]4I/ZZD]O:?X-)_JTWW*3_NI/_VG`#6@"M2!2E`+JD$]J`@UH2K4AZI/_:E`-:@*U:%*5(NJ +M43VJ2#6I*M6ERE2;JE-]JE`UJDK5J4I5JZI5O:I8-:MJU:W*5;NJ5_VJ8#6L +MBM6Q2E;+JED]JV@UK:K5M#6OZM6]RE?[ +MJE_]JX`UL`K6P4I8"ZMA/:R(-;$JUL7*6!NK8WVLD#6R2M;)2EDKJV6]K)@U +MLVK6SRZMY/:_H-;VJU_7* +M7MNK>WVO\#6^RM?Y2E_KJWV]K_@UO^K7_ZVO_;7`-M@*VV%+;(NML3VVR#;9 +M*MMERVR;K;-]MM`VVDK;:4MMJZVUO;;8-MMJVVW+;;NMM_VVX#;`NOX3V\B#?Q*M[% +MRW@;K^-]O)`W\DK>R4MY*Z_EO;R8-_-JWLW+>3NOY_V\H#?TBM[12WI+K^D] +MO:@W]:K>UVNO[;V]N#?WZM[=RWM[K^_]O<`W^`K? +MX4M\BZ_Q/;[(-_DJW^7+?)NO\WV^T#?Z2M_I2WVKK_6]OM@W^VK?[[`/_L%`.`@+X2%,A(NP$3["2#@)*^$ES(2; +ML!-^PE`X"DOA*4R%J[`5OL)8.`MKX2W,A;NP%_["8#@,B^$Q3(;+L!D^PV@X +M#:OA-#@/Z^$]S(?[L!_^PX`X$`OB04R( +M"[$A/L2(.!$KXD7,B!NQ(W[$D#@22^))3(DKL26^Q)@X$VOB3/($.*'$FR +MI,F3*%.J7,FRIO8,.*'4NVK-FS:-.J7//JW/'D"-+GDRYLN7+F#-KWLRY +ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ +MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ +MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$;(44890DQ!!`@01BCA +MA!1***`43S11X88<1GC0+06!Z-&!``1`XH$((`"`!059,$%"%0PD`@`7%%2C +MB@*I:$0``B10(@D"!'3B@1T6:>212":IY)),-NGDDU!&*>645%9I991-+)'$ +M%$\8,04(6SX!0@XVV`##"TAX"8(123!1Q!193$%%$1H*446;1!0A!0@F@'!A +M$4,\(<6#`K8@Q0M$6$&H%$4$086@(*`P1`H@Q)!##C.`4(0+63Q1A1-'$!&$ +MFY%.6NFE-X"@A`M0-"H%ETZ\L.H40R#1)A-)@'KEKKSN*@.!.<10H`PQR%## +MKV;"0,*O,`0[;+''PI`L"016:^VU!`+`K+/%0HLL@200V>NXY)9K[KGHIJON +MNNRVZ^Z2_\6[V#\"$FB@O/CFJ^^^_/9;799)@-#$&VZ`\,08=%0J@\(Z'*N# +MM"!LJX`,+A18<0QAV)"IH2"T4$<:9%3:\1D@1PR""RB_D,8<;_CK\LLPQRSS +MS&G=0L^!-0HIT```9"#0@40D(07-1!=M]-%()ZWTTDPW[?334+]&8D`UDLBS +M0#X'$/3047?M]==@ARWVV&27;?;9:"<-"8TV`H!C0#KRZ&,`0.I,&VP3=.%#EQSHAT0^3IKJL!'X2\"!YI"'-L3`CH@+Q4!"T0X_ +MFJ@@/"J(`"(Y24G"8PI,$(.)`K`%*_KREV'`(@3I41!Z=*$@77CD.VHI2;\9 +MY)+KTV06FD"Q^=4/E$T0)0!(V089H+(=JA0(*UWI2D`"0`#+9.8[<*E+$_42 +MF/"4HC`)@L/(!<\+!?'"(]W!S'^XPY)IQ*0TFS`#3PH.F]KDY@R^&!``40E*0(QD$"0@IRP +M-*<`P$>0#1B2>KTC@2*UISK\+0"E_U,I2P7B4I@2)):4NR!!.G!31>Z4D:8# +M`/X4`-3^";6E+X5H3&4)1()\H*EI?&KJ3(?+(9"(!QJ5(5@'X",!+'*L;]T> +M`'!)!!+U(*UJU=PA`\#6<\95=3PEJYM(Y`.\YG5Z.^JK6P/[UZB2]+&0C:QD +M$W*[00ZDC+M#8TY_)Z0#U8]X=SQ>0!@GTXA2SK)8`VM.&*B1A"'ES4Q"FP-U` +M.8$*01B"?X-&*_E600BXFL)V]V0$2.4-4$E@TQ`+ISB).@)3"]N;Q*:$`0I9`$$5G@"$ZK0!.[FB592J.ZC2`PI"V-8 +MPT`NL12([&`7NZ"Y8`ZSF,>L'S24@0UL>$.E:C`#!9#YS7".LYSG3.,[S>\R,9C7'X%ANUK.@!TWH0AOZT(A.M*(7S6BO\#G-:XY!H!M-Z4I;^M*8 +MSK2F-\WI3GOZTZ`.M:A'3>I2F_K4J$ZUJE?-ZE:[^M6PCK6L9TWK6MOZUKC. +MM:YWS>M>^_K7P`ZVL(=-[&(;^]C(3K:RE\WL9CO[V=".MK2G3>UJ6_O:V,ZV +MMK?-[6Y[^]O@#K>XQTWNYVN_O=\(ZWO.=-[WK;^][XSK>^ +M]\WO?OO[WP`/N,`'3O""&_S@"$^XPA?.\(8[_.$0C[C$)T[QBEO\XAC/N,8W +MSO&.>_SC(`^YR$=.\I*;_.0H3[G*5\[REKO\Y3"/NI8S[K6M\[U +MKGO]ZV`/N]C'3O:RF_WL:$^[VM?.]K:[_>UPC[O^ +M^_WO@`^\X`=/^,(;_O"(3[SB%\_XQCO^\9"/O.0G3_G*6_[RF,^\YC?/^I7S_K6N_[UL(^][&=/^]K;_O:XS[WN=\_[WOO^ +M]\`/OO"'3_SB&__XR$^^\I?/_.8[__G0C[[TIT_]ZEO_^MC/OO:WS_WN>__[ +MX`^_^,=/_O*;__SH3[_ZU\_^]KO__?"/O_SG3__ZV__^^,^__O?/__[[__\` +M&(`".(`$6(`&>(`(F(`*N(`,V(`.^(`0&($2.($46($6>($8F($:N($ +M^($@&((B.((D6((F>((HF((JN((LV((N^((P&(,R.(,T6(,V>(,XF(,ZN(,\ +MV(,^^(-`&(1".(1$6(1&>(1(F(1*N(1,V(1.^(10&(52.(546(56>(58F(5: +MN(5^(5@&(9B.(9D6(9F>(9HF(9JN(9LV(9N^(9P&(=R.(=T6(=V>(=X +MF(=ZN(=\V(=^^(>`&(B".(B$6(B&>(B(F(B*N(B,V(B.^(B0&(F2.(F46(F6 +(>(F8F(F:^!,` +` +end diff --git a/lib/libarchive/test/test_read_format_iso_rockridge_new.iso.Z.uu b/lib/libarchive/test/test_read_format_iso_rockridge_new.iso.Z.uu new file mode 100644 index 00000000000..dd013ffc84d --- /dev/null +++ b/lib/libarchive/test/test_read_format_iso_rockridge_new.iso.Z.uu @@ -0,0 +1,208 @@ +$FreeBSD$ + +begin 644 test_read_format_iso_rockridge_new.iso.Z +M'YV0``(*'$BPH,&#"!,J7,BPH<.'$"-*G$BQHL6+&#-JW,BQH\>/($.*'$FR +MI,F3*%.J7,FRIO8,.*'4NVK-FS:-.J7//JW/'D"-+GDRYLN7+F#-KWLRY +ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ +MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ +MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$;(44890DQ!!`@01BCA +MA!1***`43S11X88<1GA0#Q@,A$$/'QT(0``F'H@``@!84)`%$R14P4`B`'!! +M03>R*!"+1@0@0`(GDB!`0"D>V.&12":IY)),-NGDDU!&*>645%9IY9583MG$ +M$DE,\8014X#0Y1,@Y&"##3"\@`28(!B1!!-%3)'%%%04H:$05;Q)1!%2@&`" +M"!<6,<034CPH8`M2O$"$%89*44005!`*`@I#I`!"##GD,`,(1;B0Q1-5.'$$ +M$4'`.6FEEV9Z`PA*N`#%HU)XZ<0+K4XQ!!)O,I&$J%GVZFNO,A"8`PPYR'"# +M##/$,,.R!)(0++'$&HNLLLS"0`*!V&:K+8$`/#MLL<M]MI,0V(CC@#H&!"//@(9@)`^GWC@ +M%%`<$(`O[P`@A10%!!`(%%BP$$`[00P41#M:#S2`U0+Y6)``/0]T`15&:!"` +M`SW^&&0;"6QP00,AD$"ZZ:B3,$01'`2004&S&]1.0>VX\39!.0Y$M^AW#WDB +MD2@.7OCAB2_>N$"/1_XSY40*/Q#F.'+N.>AUCU[ZZ:FOSCT)`.`1=$$ARATW +M@MD'GW<``WAM?`").-$$`@>2D88B1:`A"`42E=.6`()34@X^,FO`0="0QCD0`8VI,$-:X"A#&EH +MP\L%<(?3\^%`@'@](C+0@T9,G2,``(]_^/&/\#B('2M')`7(J0E8U&()!=?% +M1LB/`0>:0Q[:8$8TPK`=H1A(*-KQQC?>4`!]_*,?X3$%)BS`1`1@H0L1B+T! +M`$D`=W0E#E6WO=9)`@#O$*4?`V<0(X(@BBE:P"$3B;$2OL^130`C`"1)R3.N +M00:7S*1`-ME)'7XRE[I\1RD=H**`#(`.;8!#0%B91UH^T)S?HP0`W*'+?[CC +M(*3#@`,*<`)@$DF864#DKI8P@RT>\XN1G&0EUS"#:&J2DSKTY.78J4MWE!(" +MW03`-\-)`(&0LY;=PR@Z6V<)`+2CG;?K92U_2<@I#G.?-/!G(P&Z3($ZDP8& +MG29""8(B:U[NH[IL1RDE<*"*#JFB$@6G.`%PT7.6LYP=94<[V2%(#Y8T`/C4 +M9Q9KH-+"(5.9S!QH#6(:$&HFU*8\5*HNV5'*"!SHAJEL81E8V2-9PK*MK]PH +M!#NZCG:N`YX)D"<][6G2?";2!E4-P%4#VDPTVH"K`/`J317*P[KJA$ +MAPI4H@;1`4?5:#G9AA[=&7!KY]L1^J`HO"(Q\GB77%Y`'O=)QD[OLP'!`%OQ +MJ%F-`D!WF1-([T1KQ](2+P#O0Y[^5`N`YA5DHVA$^<5``5#@%<*20!"E_`5`YB`"DD%`$$&!K"$M";!"(>5$YWL9#`[ +MU9<*21@"W^`4A"F<=U!.H$(0AH!@HMFJOU40@JZF8-X^&4%2?!-4$MPT!$@E +MX0E.,!BHYMLI"'GXOBE><8O%M*<0SS@)?!)3CO&;A"98,0L@L,(3F%"%)IQW +M3[;R+A0BY6))@5C$)%;RBZ7@9`SCV`763;.:U\SFFZ&A#&Q@PQL4T.8ZV_G. +M>,ZSGO?,YS[[^<^`#K2@!TWH0AOZT(A.M*(7S>A&._K1D(ZTI"=-Z4I;^M*8 +MSK2F-\WI3GOZTZ`.M:A'3>I2F_K4J$ZUJE?-ZE:[^M6PCK6L9TWK6MOZUKC. +MM:YWS>M>^_K7P`ZVL(=-[&(;^]C(3K:RE\WL9CO[V=".MK2G3>UJ6_O:V,ZV +MMK?-[6Y[^]O@#K>XQTWNYVN_O=\(ZWO.=-[WK;^][XSK>^ +M]\WO?OO[WP`/N,`'3O""&_S@"$^XPA?.\(8[_.$0C[C$)T[QBEO\XAC/N,8W +MSO&.>_SC(`^YR$=.\I*;_.0H3[G*5\[REKO\Y3"/NI8S[K6M\[U +MKGO]ZV`/N]C'3O:RF_WL:$^[VM?.]K:[_>UPC[O^ +M^_WO@`^\X`=/^,(;_O"(3[SB%\_XQCO^\9"/O.0G3_G*6_[RF,^\YC?/^I7S_K6N_[UL(^][&=/^]K;_O:XS[WN=\_[WOO^ +M]\`/OO"'3_SB&__XR$^^\I?/_.8[__G0C[[TIT_]ZEO_^MC/OO:WS_WN>__[ +MX`^_^,=/_O*;__SH3[_ZU\_^]KO__?"/O_SG3__ZV__^^,^__O?/__[[__\` +M&(`".(`$6(`&>(`(F(`*N(`,V(`.^(`0&($2.($46($6>($8F($:N($ +M^($@&((B.((D6((F>((HF((JN((LV((N^((P&(,R.(,T6(,V>(,XF(,ZN(,\ +MV(,^^(-`&(1".(1$6(1&>(1(F(1*N(1,V(1.^(10&(52.(546(56>(58F(5: +MN(5^(5@&(9B.(9D6(9F>(9HF(9JN(9LV(9N^(9P&(=R.(=T6(=V>(=X +MF(=ZN(=\V(=^^(>`&(B".(B$6(B&>(B(F(B*N(B,V(B.^(B0&(F2.(F46(F6 +M>(F8F(F:N(F^(F@&(JB.(JD6(JF>(JHF(JJN(JLV(JN^(JP&(NR.(NT +M6(NV>(NXF(NZN(N\V(N^^(O`&(S".(S$6(S&>(S(F(S*N(S,V(S.^(S0&(W2 +M.(W46(W6>(W8F(W:N(W^(W@&([B.([D6([F>([HF([JN([LV([N^([P +M&(_R.(_T6(_V>(_XF(_ZN(_\V(_^^(\`&9`".9`$69`&>9`(F9`*N9`,V9`. +M^9`0&9$2.9$469$6>9$8F9$:N9$^9$@&9(B.9(D69(F>9(HF9(JN9(L +MV9(N^9(P&9,R.9,T69,V>9,XF9,ZN9,\V9,^^9-`&91".91$691&>91(F91* +MN91,V91.^910&952.9546956>958F95:N95^95@&99B.99D699F>99H +MF99JN99LV99N^99P&9=R.9=T69=V>9=XF9=ZN9=\V9=^^9>`&9B".9B$69B& +M>9B(F9B*N9B,V9B.^9B0&9F2.9F469F6>9F8F9F:N9F^9F@&9JB.9JD +M69JF>9JHF9JJN9JLV9JN^9JP&9NR.9NT69NV>9NXF9NZN9N\V9N^^9O`&9S" +M.9S$69S&>9S(F9S*N9S,V9S.^9S0&9W2.9W469W6>9W8F9W:N9W^9W@ +M&9[B.9[D69[F>9[HF9[JN9[LV9[N^9[P&9_R.9_T69_V>9_XF9_ZN9_\V9_^ +M^9\`&J`".J`$6J`&>J`(FJ`*NJ`,VJ`.^J`0&J$2.J$46J$6>J$8FJ$:NJ$< +MVJ$>^J$@&J(B.J(D6J(F>J(HFJ(JNJ(LVJ(N^J(P&J,R.J,T6J,V>J,XFJ,Z +MNJ,\VJ,^^J-`&J1".J1$6J1&>J1(FJ1*NJ1,VJ1.^J10&J52.J546J56>J58 +MFJ5:NJ5^J5@&J9B.J9D6J9F>J9HFJ9JNJ9LVJ9N^J9P&J=R.J=T6J=V +M>J=XFJ=ZNJ=\VJ=^^J>`&JB".JB$6JB&>JB(FJB*NJB,VJB.^JB0&JF2.JF4 +M6JF6>JF8FJF:NJF^JF@&JJB.JJD6JJF>JJHFJJJNJJLVJJN^JJP&JNR +M.JNT6JNV>JNXFJNZNJN\VJN^^JO`&JS".JS$6JS&>JS(FJS*NJS,VJS.^JS0 +M&JW2.JW46JW6>JW8FJW:NJW^JW@&J[B.J[D6J[F>J[HFJ[JNJ[LVJ[N +M^J[P&J_R.J_T6J_V>J_XFJ_ZNJ_\VJ_^^J\`&[`".[`$6[`&>[`(F[`*N[`, +MV[`.^[`0&[$2.[$46[$6>[$8F[$:N[$^[$@&[(B.[(D6[(F>[(HF[(J +MN[(LV[(N^[(P&[,R.[,T6[,V>[,XF[,ZN[,\V[,^^[-`&[1".[1$6[1&>[1( +MF[1*N[1,V[1.^[10&[52.[546[56>[58F[5:N[5^[5@&[9B.[9D6[9F +M>[9HF[9JN[9LV[9N^[9P&[=R.[=T6[=V>[=XF[=ZN[=\V[=^^[>`&[B".[B$ +M6[B&>[B(F[B*N[B,V[B.^[B0&[F2.[F46[F6>[F8F[F:N[F^[F@&[JB +M.[JD6[JF>[JHF[JJN[JLV[JN^[JP&[NR.[NT6[NV>[NXF[NZN[N\V[N^^[O` +M&[S".[S$6[S&>[S(F[S*N[S,V[S.^[S0&[W2.[W46[W6>[W8F[W:N[W +M^[W@&[[B.[[D6[[F>[[HF[[JN[[LV[[N^[[P&[_R.[_T6[_V>[_XF[_ZN[_\ +MV[_^^[\`',`"/,`$7,`&?,`(G,`*O,`,W,`._,`0',$2/,$47,$6?,$8G,$: +MO,$_,$@',(B/,(D7,(F?,(HG,(JO,(LW,(N_,(P',,R/,,T7,,V?,,X +MG,,ZO,,\W,,^_,-`',1"/,1$7,1&?,1(G,1*O,1,W,1._,10',52/,547,56 +M?,58G,5:O,5_,5@',9B/,9D7,9F?,9HG,9JO,9LW,9N_,9P',=R/,=T +M7,=V?,=XG,=ZO,=\W,=^_,>`',B"/,B$7,B&?,B(G,B*O,B,W,B._,B0',F2 +M/,F47,F6?,F8G,F:O,F_,F@',JB/,JD7,JF?,JHG,JJO,JLW,JN_,JP +M',NR/,NT7,NV?,NXG,NZO,N\W,N^_,O`',S"/,S$7,S&?,S(G,S*O,S,W,S. +M_,S0',W2/,W47,W6?,W8G,W:O,W_,W@',[B/,[D7,[F?,[HG,[JO,[L +MW,[N_,[P',_R/,_T7,_V?,_XG,_ZO,_\W,_^_,\`'=`"/=`$7=`&?=`(G=`* +MO=`,W=`._=`0'=$2/=$47=$6?=$8G=$:O=$_=$@'=(B/=(D7=(F?=(H +MG=(JO=(LW=(N_=(P'=,R/=,T7=,V?=,XG=,ZO=,\W=,^_=-`'=1"/=1$7=1& +M?=1(G=1*O=1,W=1._=10'=52/=547=56?=58G=5:O=5_=5@'=9B/=9D +M7=9F?=9HG=9JO=9LW=9N_=9P'==R/==T7==V?==XG==ZO==\W==^_=>`'=B" +M/=B$7=B&?=B(G=B*O=B,W=B._=B0'=F2/=F47=F6?=F8G=F:O=F_=F@ +M'=JB/=JD7=JF?=JHG=JJO=JLW=JN_=JP'=NR/=NT7=NV?=NXG=NZO=N\W=N^ +M_=O`'=S"/=S$7=S&?=S(G=S*O=S,W=S._=S0'=W2/=W47=W6?=W8G=W:O=W< +MW=W>_=W@'=[B/=[D7=[F?=[HG=[JO=[LW=[N_=[P'=_R/=_T7=_V?=_XG=_Z +MO=_\W=_^_=\`'N`"/N`$7N`&?N`(GN`*ON`,WN`._N`0'N$2/N$47N$6?N$8 +MGN$:ON$_N$@'N(B/N(D7N(F?N(HGN(JON(LWN(N_N(P'N,R/N,T7N,V +M?N,XGN,ZON,\WN,^_N-`'N1"/N1$7N1&?N1(GN1*ON1,WN1._N10'N52/N54 +M7N56?N58GN5:ON5_N5@'N9B/N9D7N9F?N9HGN9JON9LWN9N_N9P'N=R +M/N=T7N=V?N=XGN=ZON=\WN=^_N>`'NB"/NB$7NB&?NB(GNB*ONB,WNB._NB0 +M'NF2/NF47NF6?NF8GNF:ONF_NF@'NJB/NJD7NJF?NJHGNJJONJLWNJN +M_NJP'NNR/NNT7NNV?NNXGNNZONN\WNN^_NO`'NS"/NS$7NS&?NS(GNS*ONS, +MWNS._NS0'NW2/NW47NW6?NW8GNW:ONW_NW@'N[B/N[D7N[F?N[HGN[J +MON[LWN[N_N[P'N_R/N_T7N_V?N_XGN_ZON_\WN_^_N\`'_`"/_`$7_`&?_`( +MG_`*O_`,W_`.__`0'_$2/_$47_$6?_$8G_$:O_$__$@'_(B/_(D7_(F +M?_(HG_(JO_(LW_(N__(P'_,R/_,T7_,V?_,XG_,ZO_,\W_,^__-`'_1"/_1$ +M7_1&?_1(G_1*O_1,W_1.__10'_52/_547_56?_58G_5:O_5__5@'_9B +M/_9D7_9F?_9HG_9JO_9LW_9N__9P'_=R/_=T7_=V?_=XG_=ZO_=\W_=^__>` +M'_B"/_B$7_B&?_B(G_B*O_B,W_B.__B0'_F2/_F47_F6?_F8G_F:O_F +M__F@'_JB/_JD7_JF?_JHG_JJO_JLW_JN__JP'_NR/_NT7_NV?_NXG_NZO_N\ +MW_N^__O`'_S"/_S$7_S&?_S(G_S*O_S,W_S.__S0'_W2/_W47_W6?_W8G_W: +MO_W__W@'_[B/_[D7_[F?_[HG_[JO_[LW_[N__[P'__R/__T7__V?__X +MG__ZO__\W__^__\`,``*P`%(``N@`3R`"#`!*L`%R``;H`-\@!`P`DK`"4@! +M*Z`%O(`8,`-JP`W(`3N@!_R`(#`$BL`12`)+H`D\@2@P!:K`%<@"6Z`+?($P +M,`;*P!E(`VN@#;R!.#`'ZL`=R`-[H`_\@4`P"`K!(4@$BZ`1/()(,`DJP27( +M!)N@$WR"4#`*2L$I2`6KH!6\@E@P"VK!+<@%NZ`7_()@,`R*P3%(!LN@&3R# +M:#`-JL$UR`;;H!M\@W`P#LK!.4@'ZZ`=O(-X,`_JP3W(!_N@'_R#@#`0"L)! +M2`@+H2$\A(@P$2K"1<@(&Z$C?(20,!)*PDE("2NA);R$F#`3:L)-R`D[H2?\ +MA*`P%(K"44@*2Z$I/(6H,!6JPE7("ENA*WR%L#`6RL)92`MKH2V\A;@P%^K" +M7<@+>Z$O_(7`,!@*PV%(#(NA,3R&R#`9*L-ER`R;H3-\AM`P&DK#:4@-JZ$U +MO(;8,!MJPVW(#;NA-_R&X#`3R/Z#$]JL?U +MR![;HWM\C_`Q/LK'^4@?ZZ-]O(_X,3_JQ_W('_NC?_R/`#)`"L@!22`+I($\ +MD`@R02K(!Z2/ +M_)%`,D@*R2%))(NDD3R22#))*LDER22;I)-\DE`R2DK)*4DEJZ25O))8,DMJ +MR2W));NDE_R28#),BLDQ22;+I)D\DV@R3:K)-#)/ZLD]R2?[I)_\DX`R4`K*04DH"Z6A/)2(,E$JRD7)*!NEHWR4D#)2 +M2LI)22DKI:6\E)@R4VK*3RLMY22_KI;V\E_@R7^K+?Z?O_)W`,W@* +MS^%)/(NG\3R>R#-Y*L_ER3R;I_-\GM`S>DK/Z4D]JZ?UO)[8,WMJS^W)/;NG +M]_R>X#-\BL_Q23[+I_D\G^@S?:K/]4I/ZZD]O:?X-)_JTWW*3_NI/_VG`#6@"M2!2E`+JD$]J`@UH2K4AZI/_:E`-:@*U:%*5(NJ +M43VJ2#6I*M6ERE2;JE-]JE`UJDK5J4I5JZI5O:I8-:MJU:W*5;NJ5_VJ8#6L +MBM6Q2E;+JED]JV@UK:K5M#6OZM6]RE?[ +MJE_]JX`UL`K6P4I8"ZMA/:R(-;$JUL7*6!NK8WVLD#6R2M;)2EDKJV6]K)@U +MLVK6SRZMY/:_H-;VJU_7* +M7MNK>WVO\#6^RM?Y2E_KJWV]K_@UO^K7_ZVO_;7`-M@*VV%+;(NML3VVR#;9 +M*MMERVR;K;-]MM`VVDK;:4MMJZVUO;;8-MMJVVW+;;NMM_VVX#;`NOX3V\B#?Q*M[% +MRW@;K^-]O)`W\DK>R4MY*Z_EO;R8-_-JWLW+>3NOY_V\H#?TBM[12WI+K^D] +MO:@W]:K>UVNO[;V]N#?WZM[=RWM[K^_]O<`W^`K? +MX4M\BZ_Q/;[(-_DJW^7+?)NO\WV^T#?Z2M_I2WVKK_6]OM@W^VK?[[`/_L%`.`@+X2%,A(NP$3["2#@)*^$ES(2; +ML!-^PE`X"DOA*4R%J[`5OL)8.`MKX2W,A;NP%_["8#@,B^$Q3(;+L!D^PV@X +M#:OA-#@/Z^$]S(?[L!_^PX`X$`OB04R( +M"[$A/L2(.!$KXD7,B!NQ(W[$D#@22^))3(DKL26^Q)@X$VOB3/($.*'$FR +MI,F3*%.J7,FRIO8,.*'4NVK-FS:-.J7//JW/'D"-+GDRYLN7+F#-KWLRY +ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ +MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ +MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$;(44890DQ!!`@01BCA +MA!1***`43S11X88<1G@0-2\,]`(U'QT(0``F'H@``@!04A`E$R14P4`B`'!! +M03>R*!"+1@0@0`(GDB!`0"D>V.&12":IY)),-NGDDU!&*>645%9IY9583MG$ +M$DE,\8014X#0Y1,@Y&"##3"\@`28(!B1!!-%3)'%%%04H:$05;Q)1!%2@&`" +M"!<6,<034CPH8`M2O$"$%89*44005!`*`@I#I`!"##GD,`,(1;B0Q1-5.'$$ +M$4'`.6FEEV9Z`PA*N`#%HU)XZ<0+K4XQ!!)O,I&$J%GVZFNO,A"80PP%RA`# +M#C/0(`,-!)(0+`S#%GMLLLLV2^"UV&9+(`#/1AN#L<@JRRP,)!CYZ[GHIJON +MNNRVZ^Z[\,8K;Y/_U;O8/P(2:*"]_/;K[[\`!US=EDF`T,0;;H#PQ!AT7"K# +MI3CHD*P.RX+0K0(RN%"@QC&$8<.FB(+00AUID'&IR&>4;#$(+K3\0AISO"'P +MS#37;//-.*>5BR8'WDBD0`0`P(%`!Q*1A!0QL(@!T0!((<4733QA11%$!-V! +M0$,:+84,06<@T```:(U#T!X`'?;1,P2M@4`%G"U%#D%_()`!;M/0]@8"'>`V +ML0`$#<*.;M<0=`@"*>"V#4'7&-`";M^0\^.01R[YY)17;OGEF&>N^>8PF1C0 +MC28&+=#0`6B=]$!+!^`TU%)3+7I`5PN@-=<#>3V`V*\#4#8!6J<]T-H%:`WW +M0'(;H+7=`^%]@.DP]#W0WPAH+?A`A"N@->(T`K"`UHYS[OWWX(BG;QDD-N((@(X!\>@CD`$(^?.)!TX!Q0$!^/).TU(H0``"`04LL"``[0C" +M0(+0#K`19`">(]J0""(`GPWD`E0P@@8"X(`>_2A(;5```R0@`@R0((0C+"$) +MAE`$#@1@!`6!H4':49!VN*%]!,G10.3WP?I-L$BJ"^``"WC`!"ZP@06!8$%\ +M5)`*XBB#&^S@_$`H0A*:$(56)`$`]""T@@P-?N]#T!1]>+\`\.YH,0"@`!/A +MA"8DX$!D2(,<8D!$!"I0(`QTX$"42!`F4G!H!.$`%#GH0?J1H)!43*$)^0`` +M+1*$!%0(`R\"PHLP9'",CCP1D0[@)CBY8`8(^,QG.D?C`AC81I[6+ +M:2\Q.<\BK%2?6,VJ5K?ZFAM"52`Z!:A'!XJB@B;5I'ED*$N?6I`,2+6'\*3I +M.[`!OX +MREC.LI;+`V]<2V]/+H,KQEM\'KW*D3?6I?$ +M*>V;DXFKT<^QV<4TI>O5"'*U.(MYO4"5P69).5\9C#BM9Q9N$P<]D`[XM\59 +MW+*F-\WI3D/EAI062*'#'"2]/KBD9LXNFK$6:MC].8O,[6(@GQL_,E>-Y'<`8M*8E$GY;#0!+SSN1L'8M%^5&$+DI&]T_/9ZSBRQ'&D@;X-5F./&T +M/>Q,A_OC(`^YR#MR0XT+Q.'G]JDLU7UG2*M:TA0T>4`^\&IYNEEW!3&WOB$N +MRWY?G->GI2"\=5?S*RH<`'\C"/123E:@UF#B\ZW!S]L==%LF_7DW1\[U +MKGO]ZP.YX=4%LO2=JYR@N5[W=3&^:I>./2`@*'I<,UWR@J#<["&N\]1?[NZ8 +MVUWN<^4BX0A"N(>?W8S7@[IGY6B#O9L8YK88$4 +MGNECUGN9V!O_G:DTSJ,E^5WVEL^[=)6N_5Q/[ARB3U>+D)6 +M(#4R?-.YI_C/WL#QU&X[<7\?$!%0?O<>U[STIT]]V-Z0^0`(/NC3/?M_`UW@ +M3<2^\W4_=YO;&P"H1__K>7AH7(M>UVO_/BV;F'[5DU_#6A0F//[!__[#XR`> +MM6.(=S1"Q5>9P&B+)P=(-7KQ1W7@1T'[UW_\!P_/5WXF-`2-%0#<=5/5UX$> +M^(&:PR?M$``*0`6'$$1)``5?@"G#`BE(4`0@@"%#L`0QF`1$<`0PN"MU(@6W +M$@2B`H-0@"&1,BA,``)!*#4V&"<@,`55``500"A4T":2\H13D`18T"9O`H-R +M0B=VLH1VXH-4D`1#H#]P$@13`(.#X@14$`1#$(5&8RM&6`5"H"M3\()]8@22 +MHC^"D@1N,@20D@1/X`1+""H\V"D0V(@4I&"EW*"EIN(9M.(EX*`67&(:!Z`(@.(NT +M6(NVF!%H4`9LP`9O8#BW^(O`&(S".(S$6(S&>(S(F(S*N(S,V(S.^(S0&(W2 +M.(W46(W6>(W8F(W:N(W^(W@&([B.([D6([F>([HF([JN([LV([N^([P +M&(_R.(_T6(_V>(_XF(_ZN(_\V(_^^(\`&9`".9`$69`&>9`(F9`*N9`,V9`. +M^9`0&9$2.9$469$6>9$8F9$:N9$^9$@&9(B.9(D69(F>9(HF9(JN9(L +MV9(N^9(P&9,R.9,T69,V>9,XF9,ZN9,\V9,^^9-`&91".91$691&>91(F91* +MN91,V91.^910&952.9546956>958F95:N95^95@&99B.99D699F>99H +MF99JN99LV99N^99P&9=R.9=T69=V>9=XF9=ZN9=\V9=^^9>`&9B".9B$69B& +M>9B(F9B*N9B,V9B.^9B0&9F2.9F469F6>9F8F9F:N9F^9F@&9JB.9JD +M69JF>9JHF9JJN9JLV9JN^9JP&9NR.9NT69NV>9NXF9NZN9N\V9N^^9O`&9S" +M.9S$69S&>9S(F9S*N9S,V9S.^9S0&9W2.9W469W6>9W8F9W:N9W^9W@ +M&9[B.9[D69[F>9[HF9[JN9[LV9[N^9[P&9_R.9_T69_V>9_XF9_ZN9_\V9_^ +M^9\`&J`".J`$6J`&>J`(FJ`*NJ`,VJ`.^J`0&J$2.J$46J$6>J$8FJ$:NJ$< +MVJ$>^J$@&J(B.J(D6J(F>J(HFJ(JNJ(LVJ(N^J(P&J,R.J,T6J,V>J,XFJ,Z +MNJ,\VJ,^^J-`&J1".J1$6J1&>J1(FJ1*NJ1,VJ1.^J10&J52.J546J56>J58 +MFJ5:NJ5^J5@&J9B.J9D6J9F>J9HFJ9JNJ9LVJ9N^J9P&J=R.J=T6J=V +M>J=XFJ=ZNJ=\VJ=^^J>`&JB".JB$6JB&>JB(FJB*NJB,VJB.^JB0&JF2.JF4 +M6JF6>JF8FJF:NJF^JF@&JJB.JJD6JJF>JJHFJJJNJJLVJJN^JJP&JNR +M.JNT6JNV>JNXFJNZNJN\VJN^^JO`&JS".JS$6JS&>JS(FJS*NJS,VJS.^JS0 +M&JW2.JW46JW6>JW8FJW:NJW^JW@&J[B.J[D6J[F>J[HFJ[JNJ[LVJ[N +M^J[P&J_R.J_T6J_V>J_XFJ_ZNJ_\VJ_^^J\`&[`".[`$6[`&>[`(F[`*N[`, +MV[`.^[`0&[$2.[$46[$6>[$8F[$:N[$^[$@&[(B.[(D6[(F>[(HF[(J +MN[(LV[(N^[(P&[,R.[,T6[,V>[,XF[,ZN[,\V[,^^[-`&[1".[1$6[1&>[1( +MF[1*N[1,V[1.^[10&[52.[546[56>[58F[5:N[5^[5@&[9B.[9D6[9F +M>[9HF[9JN[9LV[9N^[9P&[=R.[=T6[=V>[=XF[=ZN[=\V[=^^[>`&[B".[B$ +M6[B&>[B(F[B*N[B,V[B.^[B0&[F2.[F46[F6>[F8F[F:N[F^[F@&[JB +M.[JD6[JF>[JHF[JJN[JLV[JN^[JP&[NR.[NT6[NV>[NXF[NZN[N\V[N^^[O` +M&[S".[S$6[S&>[S(F[S*N[S,V[S.^[S0&[W2.[W46[W6>[W8F[W:N[W +M^[W@&[[B.[[D6[[F>[[HF[[JN[[LV[[N^[[P&[_R.[_T6[_V>[_XF[_ZN[_\ +MV[_^^[\`',`"/,`$7,`&?,`(G,`*O,`,W,`._,`0',$2/,$47,$6?,$8G,$: +MO,$_,$@',(B/,(D7,(F?,(HG,(JO,(LW,(N_,(P',,R/,,T7,,V?,,X +MG,,ZO,,\W,,^_,-`',1"/,1$7,1&?,1(G,1*O,1,W,1._,10',52/,547,56 +M?,58G,5:O,5_,5@',9B/,9D7,9F?,9HG,9JO,9LW,9N_,9P',=R/,=T +M7,=V?,=XG,=ZO,=\W,=^_,>`',B"/,B$7,B&?,B(G,B*O,B,W,B._,B0',F2 +M/,F47,F6?,F8G,F:O,F_,F@',JB/,JD7,JF?,JHG,JJO,JLW,JN_,JP +M',NR/,NT7,NV?,NXG,NZO,N\W,N^_,O`',S"/,S$7,S&?,S(G,S*O,S,W,S. +M_,S0',W2/,W47,W6?,W8G,W:O,W_,W@',[B/,[D7,[F?,[HG,[JO,[L +MW,[N_,[P',_R/,_T7,_V?,_XG,_ZO,_\W,_^_,\`'=`"/=`$7=`&?=`(G=`* +MO=`,W=`._=`0'=$2/=$47=$6?=$8G=$:O=$_=$@'=(B/=(D7=(F?=(H +MG=(JO=(LW=(N_=(P'=,R/=,T7=,V?=,XG=,ZO=,\W=,^_=-`'=1"/=1$7=1& +M?=1(G=1*O=1,W=1._=10'=52/=547=56?=58G=5:O=5_=5@'=9B/=9D +M7=9F?=9HG=9JO=9LW=9N_=9P'==R/==T7==V?==XG==ZO==\W==^_=>`'=B" +M/=B$7=B&?=B(G=B*O=B,W=B._=B0'=F2/=F47=F6?=F8G=F:O=F_=F@ +M'=JB/=JD7=JF?=JHG=JJO=JLW=JN_=JP'=NR/=NT7=NV?=NXG=NZO=N\W=N^ +M_=O`'=S"/=S$7=S&?=S(G=S*O=S,W=S._=S0'=W2/=W47=W6?=W8G=W:O=W< +MW=W>_=W@'=[B/=[D7=[F?=[HG=[JO=[LW=[N_=[P'=_R/=_T7=_V?=_XG=_Z +MO=_\W=_^_=\`'N`"/N`$7N`&?N`(GN`*ON`,WN`._N`0'N$2/N$47N$6?N$8 +MGN$:ON$_N$@'N(B/N(D7N(F?N(HGN(JON(LWN(N_N(P'N,R/N,T7N,V +M?N,XGN,ZON,\WN,^_N-`'N1"/N1$7N1&?N1(GN1*ON1,WN1._N10'N52/N54 +M7N56?N58GN5:ON5_N5@'N9B/N9D7N9F?N9HGN9JON9LWN9N_N9P'N=R +M/N=T7N=V?N=XGN=ZON=\WN=^_N>`'NB"/NB$7NB&?NB(GNB*ONB,WNB._NB0 +M'NF2/NF47NF6?NF8GNF:ONF_NF@'NJB/NJD7NJF?NJHGNJJONJLWNJN +M_NJP'NNR/NNT7NNV?NNXGNNZONN\WNN^_NO`'NS"/NS$7NS&?NS(GNS*ONS, +MWNS._NS0'NW2/NW47NW6?NW8GNW:ONW_NW@'N[B/N[D7N[F?N[HGN[J +MON[LWN[N_N[P'N_R/N_T7N_V?N_XGN_ZON_\WN_^_N\`'_`"/_`$7_`&?_`( +MG_`*O_`,W_`.__`0'_$2/_$47_$6?_$8G_$:O_$__$@'_(B/_(D7_(F +M?_(HG_(JO_(LW_(N__(P'_,R/_,T7_,V?_,XG_,ZO_,\W_,^__-`'_1"/_1$ +M7_1&?_1(G_1*O_1,W_1.__10'_52/_547_56?_58G_5:O_5__5@'_9B +M/_9D7_9F?_9HG_9JO_9LW_9N__9P'_=R/_=T7_=V?_=XG_=ZO_=\W_=^__>` +M'_B"/_B$7_B&?_B(G_B*O_B,W_B.__B0'_F2/_F47_F6?_F8G_F:O_F +M__F@'_JB/_JD7_JF?_JHG_JJO_JLW_JN__JP'_NR/_NT7_NV?_NXG_NZO_N\ +MW_N^__O`'_S"/_S$7_S&?_S(G_S*O_S,W_S.__S0'_W2/_W47_W6?_W8G_W: +MO_W__W@'_[B/_[D7_[F?_[HG_[JO_[LW_[N__[P'__R/__T7__V?__X +MG__ZO__\W__^__\`,``*P`%(``N@`3R`"#`!*L`%R``;H`-\@!`P`DK`"4@! +M*Z`%O(`8,`-JP`W(`3N@!_R`(#`$BL`12`)+H`D\@2@P!:K`%<@"6Z`+?($P +M,`;*P!E(`VN@#;R!.#`'ZL`=R`-[H`_\@4`P"`K!(4@$BZ`1/()(,`DJP27( +M!)N@$WR"4#`*2L$I2`6KH!6\@E@P"VK!+<@%NZ`7_()@,`R*P3%(!LN@&3R# +M:#`-JL$UR`;;H!M\@W`P#LK!.4@'ZZ`=O(-X,`_JP3W(!_N@'_R#@#`0"L)! +M2`@+H2$\A(@P$2K"1<@(&Z$C?(20,!)*PDE("2NA);R$F#`3:L)-R`D[H2?\ +MA*`P%(K"44@*2Z$I/(6H,!6JPE7("ENA*WR%L#`6RL)92`MKH2V\A;@P%^K" +M7<@+>Z$O_(7`,!@*PV%(#(NA,3R&R#`9*L-ER`R;H3-\AM`P&DK#:4@-JZ$U +MO(;8,!MJPVW(#;NA-_R&X#`3R/Z#$]JL?U +MR![;HWM\C_`Q/LK'^4@?ZZ-]O(_X,3_JQ_W('_NC?_R/`#)`"L@!22`+I($\ +MD`@R02K(!Z2/ +M_)%`,D@*R2%))(NDD3R22#))*LDER22;I)-\DE`R2DK)*4DEJZ25O))8,DMJ +MR2W));NDE_R28#),BLDQ22;+I)D\DV@R3:K)-#)/ZLD]R2?[I)_\DX`R4`K*04DH"Z6A/)2(,E$JRD7)*!NEHWR4D#)2 +M2LI)22DKI:6\E)@R4VK*3RLMY22_KI;V\E_@R7^K+?Z?O_)W`,W@* +MS^%)/(NG\3R>R#-Y*L_ER3R;I_-\GM`S>DK/Z4D]JZ?UO)[8,WMJS^W)/;NG +M]_R>X#-\BL_Q23[+I_D\G^@S?:K/]4I/ZZD]O:?X-)_JTWW*3_NI/_VG`#6@"M2!2E`+JD$]J`@UH2K4AZI/_:E`-:@*U:%*5(NJ +M43VJ2#6I*M6ERE2;JE-]JE`UJDK5J4I5JZI5O:I8-:MJU:W*5;NJ5_VJ8#6L +MBM6Q2E;+JED]JV@UK:K5M#6OZM6]RE?[ +MJE_]JX`UL`K6P4I8"ZMA/:R(-;$JUL7*6!NK8WVLD#6R2M;)2EDKJV6]K)@U +MLVK6SRZMY/:_H-;VJU_7* +M7MNK>WVO\#6^RM?Y2E_KJWV]K_@UO^K7_ZVO_;7`-M@*VV%+;(NML3VVR#;9 +M*MMERVR;K;-]MM`VVDK;:4MMJZVUO;;8-MMJVVW+;;NMM_VVX#;`NOX3V\B#?Q*M[% +MRW@;K^-]O)`W\DK>R4MY*Z_EO;R8-_-JWLW+>3NOY_V\H#?TBM[12WI+K^D] +MO:@W]:K>UVNO[;V]N#?WZM[=RWM[K^_]O<`W^`K? +MX4M\BZ_Q/;[(-_DJW^7+?)NO\WV^T#?Z2M_I2WVKK_6]OM@W^VK?[[`/_L%`.`@+X2%,A(NP$3["2#@)*^$ES(2; +ML!-^PE`X"DOA*4R%J[`5OL)8.`MKX2W,A;NP%_["8#@,B^$Q3(;+L!D^PV@X +M#:OA-#@/Z^$]S(?[L!_^PX`X$`OB04R( +M"[$A/L2(.!$KXD7,B!NQ(W[$D#@22^))3(DKL26^Q)@X$VOB3R^-Y +M3(_KL3V^Q_@X'^OC?[-O_LW`.3@+Y^%,G(NS<3[.R#DY*^?ES)R;LW-^SM`Y +M.DOGZ4R=J[-UOL[8.3MKY^W,G;NS=_[.X#D\B^?Q3)[+LWD^S^@Y/:OG] +MV[-[?L_P.3[+Y_E,G^NS?;[/^#D_Z^?]S)_[LW_^SP`Z0`OH`4V@"[2!/M`( +M.D$KZ`7-H!NT@W[0$#I"2^@)3:$KM(6^T!@Z0VOH#4VOZ[6]OM?X.E_KZWW-K_NUO_[7`#M@ +M"^R!3;`+ML$^V`@[82OLA[;/_ME`.V@+[:%-M(NVT3[:2#MI*^VES;2;MM-^VE`[:DOMJ4VU +MJ[;5OMI8.VMK[:W-M;NVU_[:8#MLB^VQ3;;+MMD^VV@[;:OMM#MOZ^V]S;?[MM_^VX`[<`ONP4VX"[?A/MR(.W$K[L7- +MN!NWXW[2OOYV#M[:^_MS;V[M_?^ +MWN`[?(OO\4V^R[?Y/M_H.WVK[_7-OMNW^W[?\#M^R^_Y3;_KM_V^W_@[?^OO +M_[DO_^7`/)@+\V%.S(NY,3_FR#R9*_-ESLR;N3-_YM`\FDOS:4[-J[DUO^;8 +M/)MK\VW.S;NY-__FX#R3_OZ#V]J_?USM[; +MNWM_[_`]OLOW^4[?Z[M]O^_X/;_K]_W.W_N[?__O`#[`"_@!3^`+O($_\`@^ +MP2OX!<_@&[R#?_`0/L)+^`E/X2N\A;_P&#[#:_@-S^$[O(?_\"`^Q(OX$4_B +M2[R)/_$H/L6K^!7/XEN\BW_Q,#[&R_@93^-KO(V_\3@^Q^OX'<_C>[R/__%` +M/L@+^2%/Y(N\D3_R2#[)*_DES^2;O)-_\E`^RDOY*4_EJ[R5O_)8/LMK^2W/ +MY;N\E__R8#[,B_DQ3^;+O)D_\V@^S:OY-<_FV[R;?_-P/L[+^3E/Y^N\G;_S +M>#[/Z_D]S^?[O)__\X`^T`OZ04_H"[VA/_2(/M$K^D7/Z!N]HW_TD#[22_I) +M3^DKO:6_])@^TVOZ3<_I.[VG__2@/M2+^E%/ZDN]J3_UJ#[5J_I5S^I;O:M_ +M];`^ULOZ64_K:[VMO_6X/M?K^EW/ZWN]K__UP#[8"_MA3^R+O;$_]L@^V2O[ +M9<_LF[VS?_;0/MI+^VE/[:N]M;_VV#[;:_MMS^V[O;?_]N`^W(O[<4_NR[VY +M/_?H/MVK^W7/[MN]NW_W\#[>R_MY3^_KO;V_]_@^W^O[?<_O^[V___<`/^`+ +M_(%/\`N^P3_X"#_A*_R%S_`;OL-_^!`_XDO\B4_Q*[[%O_@8/^-K_(W/\3N^ +MQ__X(#_DB_R13_)+OLD_^2@_Y:O\E<_R6[[+?_DP/^;+_)E/\VN^S;_Y.#_G +MZ_R=S_-[OL__^4`_Z`O]H4_TB[[1/_I(/^DK_:7/])N^TW_Z4#_J2_VI3_6K +MOM6_^E@_ZVO]K<_UN[[7__I@/^R+_;%/]LN^V3_[:#_MJ_VUS_;;OMM_^W`_ +M[LO]N4_WZ[[=O_MX/^_K_;W/]_N^W__[@#_P"_[!3_@+O^$__(@_\2O^Q<_X +M&[_C?_R0/_)+_LE/^2N_Y;_\F#_S:_[-S_D[O^?__*`_](O^T4_Z2[_I/_VH +M/_6K_M7/^EN_ZW_]L#_VR_[93_MKO^V__;@_]^O^W<_[>[_O__W`/_@+_^%/ +M_(N_\3_^R#_Y*__ES_R;O_-__M`_^DO_Z4_]J[_UO_[8/_MK_^W/_;N_]__^ +MX#_\B__Q3_[+O_D__^@__:O_]<_^V[_[?__P/_[+__E/_^N__;__^#__Z__] +MS__[O____P!@`"@`#H`$8`%H`!Z`"&`"J``N@`Q@`^@`/H`08`0H`4Z`%&`% +M:`%>@!A@!J@!;H`<8`?H`7Z`(&`(*`*.@"1@"6@"GH`H8`JH`JZ`+&`+Z`*^ +M@#!@#"@#SH`T8`UH`]Z`.&`.J`/N@#Q@#^@#_H!`8!`H!`Z!1&`1:`0>@4A@ +M$J@$+H%,8!/H!#Z!4&`4*`5.@51@%6@%7H%88!:H!6Z!7&`7Z`5^@6!@&"@& +MCH%D8!EH!IZ!:&`:J`:N@6Q@&^@&OH%P8!PH!\Z!=&`=:`?>@7A@'J@'[H%\ +M8!_H!_Z!@&`@*`@.@H1@(6@('H*(8"*H""Z"C&`CZ`@^@I!@)"@)3H*48"5H +M"5Z"F&`FJ`EN@IQ@)^@)?H*@8"@H"HZ"I&`I:`J>@JA@*J@*KH*L8"OH"KZ" +ML&`L*`O.@K1@+6@+WH*X8"ZH"^Z"O&`OZ`O^@L!@,"@,#H/$8#%H#!Z#R&`R +MJ`PN@\Q@,^@,/H/08#0H#4Z#U&`U:`U>@]A@-J@-;H/<8#?H#7Z#X&`X*`Z. +M@^1@.6@.GH/H8#JH#JZ#[&`[Z`Z^@_!@/"@/SH/T8#UH#]Z#^&`^J`_N@_Q@ +M/^@/_H,`84`H$`Z$!&%!:!`>A`AA0J@0+H0,84/H$#Z$$&%$*!%.A!1A16@1 +M7H0884:H$6Z$'&%'Z!%^A"!A2"@2CH0D84EH$IZ$*&%*J!*NA"QA2^@2OH0P +M84PH$\Z$-&%-:!/>A#AA3J@3[H0\84_H$_Z$0&%0*!0.A41A46@4'H5(85*H +M%"Z%3&%3Z!0^A5!A5"@53H54855H%5Z%6&%6J!5NA5QA5^@5?H5@85@H%HZ% +M9&%9:!:>A6AA6J@6KH5L85OH%KZ%<&%<*!?.A71A76@7WH5X85ZH%^Z%?&%? +MZ!?^A8!A8"@8#H:$86%H&!Z&B&%BJ!@NAHQA8^@8/H:0860H&4Z&E&%E:!E> +MAIAA9J@9;H:<86?H&7Z&H&%H*!J.AJ1A:6@:GH:H86JH&JZ&K&%KZ!J^AK!A +M;"@;SH:T86UH&]Z&N&%NJ!ONAKQA;^@;_H;`87`H'`Z'Q&%Q:!P>A\AA"@>CH?D +M87EH'IZ'Z&%ZJ!ZNA^QA>^@>OH?P87PH'\Z']&%]:!_>A_AA?J@?[H?\87_H +M'_Z'`&*`*"`.B`1B@6@@'H@(8H*H("Z(#&*#Z"`^B!!BA"@A3H@48H5H(5Z( +M&&*&J"%NB!QBA^@A?H@@8H@H(HZ()&*):"*>B"ABBJ@BKH@L8HOH(KZ(,&*, +M*"/.B#1BC6@CWH@X8HZH(^Z(/&*/Z"/^B$!BD"@D#HE$8I%H)!Z)2&*2J"0N +MB4QBD^@D/HE08I0H)4Z)5&*5:"5>B5ABEJ@E;HE<8I?H)7Z)8&*8*":.B61B +MF6@FGHEH8IJH)JZ);&*;Z":^B7!BG"@GSHET8IUH)]Z)>&*>J"?NB7QBG^@G +M_HF`8J`H*`Z*A&*A:"@>BHABHJ@H+HJ,8J/H*#Z*D&*D*"E.BI1BI6@I7HJ8 +M8J:H*6Z*G&*GZ"E^BJ!BJ"@JCHJD8JEH*IZ*J&*JJ"JNBJQBJ^@JOHJP8JPH +M*\Z*M&*M:"O>BKABKJ@K[HJ\8J_H*_Z*P&*P*"P.B\1BL6@L'HO(8K*H+"Z+ +MS&*SZ"P^B]!BM"@M3HO48K5H+5Z+V&*VJ"UNB]QBM^@M?HO@8K@H+HZ+Y&*Y +M:"Z>B^ABNJ@NKHOL8KOH+KZ+\&*\*"_.B_1BO6@OWHOX8KZH+^Z+_&*_Z"_^ +'BP!CP+@7`0`` +` +end diff --git a/lib/libarchive/test/test_read_format_iso_zisofs.iso.Z.uu b/lib/libarchive/test/test_read_format_iso_zisofs.iso.Z.uu new file mode 100644 index 00000000000..00896e1f67e --- /dev/null +++ b/lib/libarchive/test/test_read_format_iso_zisofs.iso.Z.uu @@ -0,0 +1,63 @@ +$FreeBSD$ + +begin 644 test_read_format_iso_zisofs.iso.Z +M'YV0``(*'$BPH,&#"!,J7,BPH<.'$"-*G$BQHL6+&#-JW,BQH\>/($.*'$FR +MI,F3*%.J7,FRIO8,.*'4NVK-FS:-.J7//JW/'D"-+GDRYLN7+F#-KWLRY +ML^?/H$.+'DVZM.G3J%.K7LVZM>O7L&/+GDV[MNW;N'/KWLV[M^_?P(,+'TZ\ +MN/'CR),K7\Z\N?/GT*-+GTZ]NO7KV+-KW\Z]N_?OX,.+'T^^O/GSZ-.K7\^^ +MO?OW\./+GT^_OOW[^//KW\^_O_^_`0Q!!`PPQ!```$;(44890DQ!!`@01BCA +MA!1***`43S11X88<1GA0+`6!Z-&!``1`XH$((`"`!059,$%"%0PD`@`7%%2C +MB@*I:$0``B10(@D"!'3B@1T6:>212":IY)),-NGDDU!&*>645%9I991-+)'$ +M%$\8,04(6SX!0@XVV`##"TAX"8(123!1Q!193$%%$1H*446;1!0A!0@F@'!A +M$4,\(<6#`K8@Q0M$6$&H%$4$086@(*`P1`H@Q)!##C.`4(0+63Q1A1-'$!&$ +MFY%.6NFE-X"@A`M0-"H%ETZ\L.H40R#1)A-)@'KEKKSN*@.!.<`0K`PRQ$!# +M#300"`,)OPKK++'&(JLL"NXY)9K[KGHIJON +MNNRVZ^Z2_\6[V#\"$FB@O/CFJ^^^_/9;799)@'!%&62`,$49<$`H`PC%ZG"L +MPS`P#*P";:R1QAQOF#$'PRX4"(*A']>11L$Q?'S&R`Q_K`<(+K3\@AX7O^'O +MS#37;//-.)=U8(U""C0``!@(="`124B1\]%()ZWTTDPW[?334$M]MI,(T*CC0#@&)".//H8`)`]EWC@ +M%%`<$(`O[P`@A10%!!`(%%B$VTX0`P71CM8##6"UT$$2)``51F@0@`,[]OAC +M&PD(4$$+*)``NNBDDS!$$1P$D$%!KQO43D'MF/$V03<.1+?G=U<^9`"#%WYX +MX@$LWOCC!4E>$(\%79[YYIW;;7KHHY=^>O4D```'T`4%+7?<"-;]H^]"#N!U +M\`$DXD03"!Q(1AIR(*XXXP(Y7OE``DPNY/T".:\YY^*[6_0^1[W4`8`0`-!` +M031@`P,,Q``V&.#=A":D`[#)32[800S0I[XF).!`9D@#&\H@OP"0(A`#"00I +M^!>0_"V/A0#P'_0"2`()3@]UI=."$2`0`#CH@0`/H$(8>!$07H2!"HQ(X`(; +M^,`(TI"")5H`$H(P*%PY80D9W"#ATK>^!AP(#6&0`QG8D`8WK*&$)TSA"ING +MOQ+!4(8`Y-T-L7>]U.F0ASX$HA")"``C4L$0`-A`001I$!M",0`*@%,3K(A% +M#0INBXU8'P,.-(<\M(&,9BPA,$(QD%``HXTF>F'SIL"$!9"(`"$<(>;^MZ,! +M^$@`-0R`*V,XQ]2YC9`#P25!ZEBZ0RY`D8R401;1%\DF>!$`E;QD&=<@`TUR +M4B">!"4HWTC*28(/``.@0QO@L,K-\;*6UBM@Z101R$$>Y'0%^%GV\A:`7V9A +MD;E:P@R&"%HA4`^+TK&A-JUK7:A$]M0.15#B$ +M5I,`A2]8*@C``IO@$J"6P:@J.2\`0G&,Q3B-T4A&;+ +M6-\"5[A@RI-MD9L$/8')N8U-0A.HF`406.$)3*A"$_B:)UI)@:Z/&BZD:GO; +MW'Z7N%(8;VN;ZP*V^O>_``[PS&Y`CBE8(AG;L,8!]JC2!P0$'P4("!,!,.$* +M.Y#"%[:PA#/,X0U[&,,?UC"(1RSB$G>8Q"9 +MRE>VQG+7]8RF,I2F_K4J$ZUJE?-ZE:[^M6PCK6L9TWK6MOZUKC. +MM:YWS>M>^_K7P`ZVL(=-[&(;^]C(3K:RE\WL9CO[V=".MK2G3>UJ6_O:V,ZV +MMK?-[6Y[^]O@#K>XQTWNYVN_O=\(ZWO.=-[WK;^][XSK>^ +M]\WO?OO[WP`/N,`'3O""&_S@"$^XPA?.\(8[_.$0C[C$)T[QBEO\XAC/N,8W +MSO&.>_SC(`^YR$=.\I*;_.0H3[G*5\[REKO\Y3"/NI8S[K6M\[U +MKGO]ZV`/N]C'3O:RF_WL:$^[VM?.]K:[_>UPC[O^ +M^_WO@`^\X`=/^,(;_O"(3[SB%\_XQCO^\9"/O.0G3_G*6_[RF,^\YC?/^I7S_K6N_[UL(^][&=/^]K;_O:XS[WN=\_[WOO^ +M]\`/OO"'3_SB&__XR$^^\I?/_.8[__G0C[[TIT_]ZEO_^MC/OO:WS_WN>__[ +MX`^_^,=/_O*;__SH3[_ZU\_^]KO__?"/O_SG3__ZV__^^,^__O?/__[[__\` +M&(`".(`$6(`&>(`(F(`*N(`,V(`.^(`0&($2.($46($6>($8F($:N($ +M^($@&((B.((D6((F>((HF((JN((LV((N^((P&(,R.(,T6(,V>(,XF(,ZN(,\ +MV(,^^(-`&(1".(1$6(1&>(1(F(1*N(1,V(1.^(10&(52.(546(56>(58F(5: +MN(5^(5@&(9B.(9D6(9F>(9HF(9JN(9LV(9N^(9P&(=R.(=T6(=V>(=X +MF(=ZN(=\V(=^^(>`&(B".(B$6(B&>(B(F(B*N(B,V(B.^(B0&(F2.(F46(F6 +@>(F8F(F:N(F^(F@&(JB.(JD6(JF>(JHF(JJN'`` +` +end diff --git a/lib/libarchive/test/test_read_format_isojoliet_bz2.c b/lib/libarchive/test/test_read_format_isojoliet_bz2.c index 9ee87c91cba..b2f22a7a597 100644 --- a/lib/libarchive/test/test_read_format_isojoliet_bz2.c +++ b/lib/libarchive/test/test_read_format_isojoliet_bz2.c @@ -46,49 +46,39 @@ else TZ=utc touch -afhm -t 197001020000.01 /tmp/iso /tmp/iso/long-joliet-file-name.textfile /tmp/iso/dir TZ=utc touch -afhm -t 197001030000.02 /tmp/iso/symlink fi -mkhybrid -J -uid 1 -gid 2 /tmp/iso | bzip2 > test_read_format_isojoliet_bz2.iso.bz2 -F=test_read_format_isojoliet_bz2.iso.bz2 +F=test_read_format_iso_joliet.iso.Z +mkhybrid -J -uid 1 -gid 2 /tmp/iso | compress > $F uuencode $F $F > $F.uu exit 1 */ -static void -joliettest(int withrr) +DEFINE_TEST(test_read_format_isojoliet_bz2) { - const char *refname = "test_read_format_isojoliet_bz2.iso.bz2"; + const char *refname = "test_read_format_iso_joliet.iso.Z"; struct archive_entry *ae; struct archive *a; const void *p; size_t size; off_t offset; - int r; - - if (withrr) { - refname = "test_read_format_isojolietrr_bz2.iso.bz2"; - } extract_reference_file(refname); assert((a = archive_read_new()) != NULL); - r = archive_read_support_compression_bzip2(a); - if (r == ARCHIVE_WARN) { - skipping("bzip2 reading not fully supported on this platform"); - assertEqualInt(0, archive_read_finish(a)); - return; - } - assertEqualInt(0, r); + assertEqualInt(0, archive_read_support_compression_all(a)); assertEqualInt(0, archive_read_support_format_all(a)); + assertEqualInt(ARCHIVE_OK, + archive_read_set_options(a, "iso9660:!rockridge")); assertEqualInt(ARCHIVE_OK, archive_read_open_filename(a, refname, 10240)); /* First entry is '.' root directory. */ assertEqualInt(0, archive_read_next_header(a, &ae)); assertEqualString(".", archive_entry_pathname(ae)); - assert(S_ISDIR(archive_entry_stat(ae)->st_mode)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); assertEqualInt(2048, archive_entry_size(ae)); assertEqualInt(86401, archive_entry_mtime(ae)); assertEqualInt(0, archive_entry_mtime_nsec(ae)); assertEqualInt(86401, archive_entry_ctime(ae)); - assertEqualInt(0, archive_entry_stat(ae)->st_nlink); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); assertEqualInt(0, archive_entry_uid(ae)); assertEqualIntA(a, ARCHIVE_EOF, archive_read_data_block(a, &p, &size, &offset)); @@ -97,100 +87,48 @@ joliettest(int withrr) /* A directory. */ assertEqualInt(0, archive_read_next_header(a, &ae)); assertEqualString("dir", archive_entry_pathname(ae)); - assert(S_ISDIR(archive_entry_stat(ae)->st_mode)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); assertEqualInt(2048, archive_entry_size(ae)); assertEqualInt(86401, archive_entry_mtime(ae)); assertEqualInt(86401, archive_entry_atime(ae)); - if (withrr) { - assertEqualInt(2, archive_entry_stat(ae)->st_nlink); - assertEqualInt(1, archive_entry_uid(ae)); - assertEqualInt(2, archive_entry_gid(ae)); - } /* A regular file with two names ("hardlink" gets returned * first, so it's not marked as a hardlink). */ assertEqualInt(0, archive_read_next_header(a, &ae)); - assertEqualString("hardlink", archive_entry_pathname(ae)); - assert(S_ISREG(archive_entry_stat(ae)->st_mode)); + assertEqualString("long-joliet-file-name.textfile", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); assert(archive_entry_hardlink(ae) == NULL); assertEqualInt(6, archive_entry_size(ae)); assertEqualInt(0, archive_read_data_block(a, &p, &size, &offset)); assertEqualInt(6, (int)size); assertEqualInt(0, offset); assertEqualInt(0, memcmp(p, "hello\n", 6)); - if (withrr) { - assertEqualInt(86401, archive_entry_mtime(ae)); - assertEqualInt(86401, archive_entry_atime(ae)); - /* TODO: Actually, libarchive should be able to - * compute nlinks correctly even without RR - * extensions. See comments in libarchive source. */ - assertEqualInt(2, archive_entry_nlink(ae)); - assertEqualInt(1, archive_entry_uid(ae)); - assertEqualInt(2, archive_entry_gid(ae)); - } /* Second name for the same regular file (this happens to be * returned second, so does get marked as a hardlink). */ assertEqualInt(0, archive_read_next_header(a, &ae)); + assertEqualString("hardlink", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); assertEqualString("long-joliet-file-name.textfile", - archive_entry_pathname(ae)); - assert(S_ISREG(archive_entry_stat(ae)->st_mode)); - assertEqualString("hardlink", archive_entry_hardlink(ae)); + archive_entry_hardlink(ae)); assert(!archive_entry_size_is_set(ae)); - if (withrr) { - assertEqualInt(86401, archive_entry_mtime(ae)); - assertEqualInt(86401, archive_entry_atime(ae)); - /* TODO: See above. */ - assertEqualInt(2, archive_entry_nlink(ae)); - assertEqualInt(1, archive_entry_uid(ae)); - assertEqualInt(2, archive_entry_gid(ae)); - } /* A symlink to the regular file. */ assertEqualInt(0, archive_read_next_header(a, &ae)); assertEqualString("symlink", archive_entry_pathname(ae)); - if (withrr) { - assert(S_ISLNK(archive_entry_stat(ae)->st_mode)); - assertEqualString("long-joliet-file-name.textfile", - archive_entry_symlink(ae)); - } assertEqualInt(0, archive_entry_size(ae)); assertEqualInt(172802, archive_entry_mtime(ae)); assertEqualInt(172802, archive_entry_atime(ae)); - if (withrr) { - assertEqualInt(1, archive_entry_nlink(ae)); - assertEqualInt(1, archive_entry_uid(ae)); - assertEqualInt(2, archive_entry_gid(ae)); - } /* End of archive. */ assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &ae)); /* Verify archive format. */ - assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_BZIP2); - if (withrr) { - assertEqualInt(archive_format(a), - ARCHIVE_FORMAT_ISO9660_ROCKRIDGE); - } + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_COMPRESS); /* Close the archive. */ assertEqualInt(0, archive_read_close(a)); assertEqualInt(0, archive_read_finish(a)); } - -DEFINE_TEST(test_read_format_isojoliet_bz2) -{ - joliettest(0); - - /* XXXX This doesn't work today; can it be made to work? */ -#if 0 - joliettest(1); -#else - skipping("Mixed Joliet/RR not fully supported yet."); -#endif -} - - - - diff --git a/lib/libarchive/test/test_read_format_isojoliet_bz2.iso.bz2.uu b/lib/libarchive/test/test_read_format_isojoliet_bz2.iso.bz2.uu deleted file mode 100644 index 0cf1de8b8ab..00000000000 --- a/lib/libarchive/test/test_read_format_isojoliet_bz2.iso.bz2.uu +++ /dev/null @@ -1,30 +0,0 @@ -$FreeBSD$ -begin 644 test_read_format_isojoliet_bz2.iso.bz2 -M0EIH.3%!62936??^FX(``/9_^__?1_?^8__L/__?8:?_W&8@Z@$`9``008"` -M``+)"-`$/@=NN!W8[`8#23*GY-3U$](,0:`:`&"`9``9``T-'J::>B/4``#0 -MIM$9&IA-!-0'I`>HT`&1Z@``T`!H`:#0'H(,E-(-3-$-&AB-`8C0`R9#1A`# -M1A/1`&@,@!H'``#0`-`&@``-&(`!H`````&@`D1)H0B-1O)&4V2:9#"9/4/2 -M`/4>H'J-#(83U/$R@WZJ#>J&CREP**.W2R[".$_:J#$"N5P7:?.#4-4/..?K -M!KG\G]P="PX^ADTP4^Y%[1+0V,;$*HTA&\V'@+*$<.M-0L@CLZ\Z(B=]`3`4%B"00B`FF@!-]HK<2. -M)?&IAD^/KKM>TRY#@+H5W781AM)P\\-4$&88^S$WX"2$=(X7(?,=$?H.A')A -M`%2T4:GEQRL:WS4Q=4SU(F>*JM1UEK\V`5P$L[9[D*;FBNEC^GPMAH8T>K&> -MQ)_.TSB;5G`P>)20L5V6':NL^M38\&.')5))BO/*5`\P%H!`D7B2](0T)?Y0"`M3A6)'=($UL$@I$0$RBA0F4.!DAM`/@ -M!V,L#/`+FC!;C.K58BA"1P\H1LVXG\@^"8IJ@0*0>TP@8F#0R^(M($"`"#I" -M`.FD45RN3EH2^8X6C/LKMKA;@K,T&ZZ%&PIJW%:>FG[.F=KGJ_O.(K`+0#!@ -MQK&-G6!">H`4_/.<\CK)K+S/I/"?`9JG,TS^C1FI[O3NN(`Q^:*`Z1WEO()6 -MZ*!0@MSD*1?AE*V5[='!>>O%XL8LXIOQB\@CIBM%\0JD'+MAR$"@T'8M;JFM -MLHN7HG1S:F]+B'BZ)SJ(=0,6*Z791QW+3RNI(7!E!)'@.B$(934!)D0=U#%# -MV21)DA=@4;RM?@RLG1[`,A:"YQF2!`P`2B)#APE)`^\F8V -M5_U]0O,4AE6?->8U4$<2N%TC-HD%($@9'E1DCQZ&B:X4\IUV83HQ7)A'8I511-P`;=!!).^8X*0NHMB+.&!W"009 -M,<;0G^>BA6F[;A;X2B!%?BP&(G7&@(,*O-QP;;1*`*6"F:X8D"Y$/T,(1JM' -M$>\,IQ&V6;/)!\)0C$,[;`O,`9A-HRHQ8@^PLT.?=7RL[2789J_J86!HF0T" -M3%@,A$VPC(:A@3(\&9-TZP2>KA*D>D;<^L4(H=EUT419R5`$A(R(Y-^O -+_B[DBG"A(>_]-P0` -` -end diff --git a/lib/libarchive/test/test_read_format_isojoliet_long.c b/lib/libarchive/test/test_read_format_isojoliet_long.c new file mode 100644 index 00000000000..acd220f4b6e --- /dev/null +++ b/lib/libarchive/test/test_read_format_isojoliet_long.c @@ -0,0 +1,141 @@ +/*- + * Copyright (c) 2003-2007 Tim Kientzle + * Copyright (c) 2009 Michihiro NAKAJIMA + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "test.h" +__FBSDID("$FreeBSD$"); + +/* +Execute the following to rebuild the data for this program: + tail -n +35 test_read_format_isojoliet_long.c | /bin/sh + +rm -rf /tmp/iso +mkdir /tmp/iso +num=0 +file=""; +while [ $num -lt 100 ] +do + num=$((num+10)) + file="${file}1234567890" +done +dir="${file}dir" +mkdir /tmp/iso/${dir} +file="${file}123" +echo "hello" > /tmp/iso/${file} +ln /tmp/iso/${file} /tmp/iso/hardlink +if [ "$(uname -s)" = "Linux" ]; then # gnu coreutils touch doesn't have -h +TZ=utc touch -afm -t 197001020000.01 /tmp/iso /tmp/iso/${file} /tmp/iso/${dir} +else +TZ=utc touch -afhm -t 197001020000.01 /tmp/iso /tmp/iso/${file} /tmp/iso/${dir} +fi +F=test_read_format_iso_joliet_long.iso.Z +mkhybrid -J -joliet-long -uid 1 -gid 2 /tmp/iso | compress > $F +uuencode $F $F > $F.uu +rm -rf /tmp/iso +exit 1 + */ + +DEFINE_TEST(test_read_format_isojoliet_long) +{ + const char *refname = "test_read_format_iso_joliet_long.iso.Z"; + char pathname[104]; + struct archive_entry *ae; + struct archive *a; + const void *p; + size_t size; + off_t offset; + int i; + + for (i = 0; i < 100; i++) + pathname[i] = '0' + ((i+1) % 10); + extract_reference_file(refname); + assert((a = archive_read_new()) != NULL); + assertEqualInt(0, archive_read_support_compression_all(a)); + assertEqualInt(0, archive_read_support_format_all(a)); + assertEqualInt(ARCHIVE_OK, + archive_read_set_options(a, "iso9660:!rockridge")); + assertEqualInt(ARCHIVE_OK, + archive_read_open_filename(a, refname, 10240)); + + /* First entry is '.' root directory. */ + assertEqualInt(0, archive_read_next_header(a, &ae)); + assertEqualString(".", archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(0, archive_entry_mtime_nsec(ae)); + assertEqualInt(86401, archive_entry_ctime(ae)); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(0, archive_entry_uid(ae)); + assertEqualIntA(a, ARCHIVE_EOF, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt((int)size, 0); + + /* A directory. */ + pathname[100] = 'd'; + pathname[101] = 'i'; + pathname[102] = 'r'; + pathname[103] = '\0'; + assertEqualInt(0, archive_read_next_header(a, &ae)); + assertEqualString(pathname, archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + + /* A regular file with two names (pathname gets returned + * first, so it's not marked as a hardlink). */ + pathname[100] = '1'; + pathname[101] = '2'; + pathname[102] = '3'; + pathname[103] = '\0'; + assertEqualInt(0, archive_read_next_header(a, &ae)); + assertEqualString(pathname, archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assert(archive_entry_hardlink(ae) == NULL); + assertEqualInt(6, archive_entry_size(ae)); + assertEqualInt(0, archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt(6, (int)size); + assertEqualInt(0, offset); + assertEqualInt(0, memcmp(p, "hello\n", 6)); + + /* Second name for the same regular file (this happens to be + * returned second, so does get marked as a hardlink). */ + assertEqualInt(0, archive_read_next_header(a, &ae)); + assertEqualString("hardlink", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualString(pathname, archive_entry_hardlink(ae)); + assert(!archive_entry_size_is_set(ae)); + + /* End of archive. */ + assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &ae)); + + /* Verify archive format. */ + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_COMPRESS); + + /* Close the archive. */ + assertEqualInt(0, archive_read_close(a)); + assertEqualInt(0, archive_read_finish(a)); +} + diff --git a/lib/libarchive/test/test_read_format_isojoliet_rr.c b/lib/libarchive/test/test_read_format_isojoliet_rr.c new file mode 100644 index 00000000000..394df144f3c --- /dev/null +++ b/lib/libarchive/test/test_read_format_isojoliet_rr.c @@ -0,0 +1,159 @@ +/*- + * Copyright (c) 2003-2007 Tim Kientzle + * All rights reserved. + * + * Based on libarchive/test/test_read_format_isorr_bz2.c with + * bugs introduced by Andreas Henriksson for + * testing ISO9660 image with Joliet extension. + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "test.h" +__FBSDID("$FreeBSD$"); + +/* +Execute the following to rebuild the data for this program: + tail -n +35 test_read_format_isojoliet_rr.c | /bin/sh + +rm -rf /tmp/iso +mkdir /tmp/iso +mkdir /tmp/iso/dir +file="long-joliet-file-name.textfile" +echo "hello" >/tmp/iso/$file +ln /tmp/iso/$file /tmp/iso/hardlink +(cd /tmp/iso; ln -s $file symlink) +if [ "$(uname -s)" = "Linux" ]; then # gnu coreutils touch doesn't have -h +TZ=utc touch -afm -t 197001020000.01 /tmp/iso/hardlink /tmp/iso/$file /tmp/iso/dir +TZ=utc touch -afm -t 197001030000.02 /tmp/iso/symlink +TZ=utc touch -afm -t 197001020000.01 /tmp/iso +else +TZ=utc touch -afhm -t 197001020000.01 /tmp/iso/hardlink /tmp/iso/$file /tmp/iso/dir +TZ=utc touch -afhm -t 197001030000.02 /tmp/iso/symlink +TZ=utc touch -afhm -t 197001020000.01 /tmp/iso +fi +F=test_read_format_iso_joliet_rockridge.iso.Z +mkhybrid -J -uid 1 -gid 2 /tmp/iso | compress > $F +uuencode $F $F > $F.uu +exit 1 + */ + +DEFINE_TEST(test_read_format_isojoliet_rr) +{ + const char *refname = "test_read_format_iso_joliet_rockridge.iso.Z"; + struct archive_entry *ae; + struct archive *a; + const void *p; + size_t size; + off_t offset; + + extract_reference_file(refname); + assert((a = archive_read_new()) != NULL); + assertEqualInt(0, archive_read_support_compression_all(a)); + assertEqualInt(0, archive_read_support_format_all(a)); + assertEqualInt(ARCHIVE_OK, + archive_read_open_filename(a, refname, 10240)); + + /* First entry is '.' root directory. */ + assertEqualInt(0, archive_read_next_header(a, &ae)); + assertEqualString(".", archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(0, archive_entry_mtime_nsec(ae)); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualIntA(a, ARCHIVE_EOF, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt((int)size, 0); + + /* A directory. */ + assertEqualInt(0, archive_read_next_header(a, &ae)); + assertEqualString("dir", archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + + /* A regular file with two names ("hardlink" gets returned + * first, so it's not marked as a hardlink). */ + assertEqualInt(0, archive_read_next_header(a, &ae)); + assertEqualString("long-joliet-file-name.textfile", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assert(archive_entry_hardlink(ae) == NULL); + assertEqualInt(6, archive_entry_size(ae)); + assertEqualInt(0, archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt(6, (int)size); + assertEqualInt(0, offset); + assertEqualInt(0, memcmp(p, "hello\n", 6)); + assertEqualInt(86401, archive_entry_mtime(ae)); + /* mkisofs records their access time. */ + /*assertEqualInt(86401, archive_entry_atime(ae));*/ + /* TODO: Actually, libarchive should be able to + * compute nlinks correctly even without RR + * extensions. See comments in libarchive source. */ + assertEqualInt(2, archive_entry_nlink(ae)); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + + /* Second name for the same regular file (this happens to be + * returned second, so does get marked as a hardlink). */ + assertEqualInt(0, archive_read_next_header(a, &ae)); + assertEqualString("hardlink", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualString("long-joliet-file-name.textfile", + archive_entry_hardlink(ae)); + assert(!archive_entry_size_is_set(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + /* TODO: See above. */ + assertEqualInt(2, archive_entry_nlink(ae)); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + + /* A symlink to the regular file. */ + assertEqualInt(0, archive_read_next_header(a, &ae)); + assertEqualString("symlink", archive_entry_pathname(ae)); + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("long-joliet-file-name.textfile", + archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(172802, archive_entry_mtime(ae)); + assertEqualInt(172802, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_nlink(ae)); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + + /* End of archive. */ + assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &ae)); + + /* Verify archive format. */ + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_COMPRESS); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ISO9660_ROCKRIDGE); + + /* Close the archive. */ + assertEqualInt(0, archive_read_close(a)); + assertEqualInt(0, archive_read_finish(a)); +} + diff --git a/lib/libarchive/test/test_read_format_isojolietrr_bz2.iso.bz2.uu b/lib/libarchive/test/test_read_format_isojolietrr_bz2.iso.bz2.uu deleted file mode 100644 index 9258c186595..00000000000 --- a/lib/libarchive/test/test_read_format_isojolietrr_bz2.iso.bz2.uu +++ /dev/null @@ -1,29 +0,0 @@ -$FreeBSD$ -begin 644 test_read_format_isojolietrr_bz2.iso.bz2 -M0EIH.3%!6293695"/:0``/9_^__?1??^8_WL/__?8:?_W&8@Z@$`9``008"` -M``+)"-`$/@36`T;`8#*3*GY3U-$R`T::`&F@`!HQ`T9&FC0T!Z@8C0``-"-$ -M9&IA-!3U`9`:-``]0``#0T!H`](`'J9!P`---``9```-```-```R``&AH`<` -M#330`&0``#0``#0``,@`!H:`"1$FIBFBGE/&H;4/5!H&GJ9,C(&3]4>H&T@! -MX4S4_23)^I!^J&,I:"BCP:NQU49CQU07@K5:%N+FASC:#&<_H!T3^C_8,EAR -M>AAY@*??BYHEH;&-B%4:0N+*$9NC-0L@CJ9)U!$ST`F*D.$$@A"`320`3$S7*"&2:*6P36])5 -M/UEPPP-G5GGH*!-7B20Y.4AU"9MM0?K(C+%&%#XTJCZZ.GH)4JHJ2)5-QVD^9IA` -MJ%BPT5G;#K;5KM8^'@["26TJX1E,$$=G]($UUB04B("910H3*'`R0R@/,#L98&B`7-& -M"[C.G57E"$CP=BMVJ(CYQYJ5$37&!`J`\K""HB!0#0RZ(M($"`9Q##2WW*HJ -M);;2U[_KWUN>.EE\=W@T_FK1D:C59VF:FHGY.JASX+#OO(K0+@#!@Q]C&S&H -M`7LV-TZ>LFMC7W3@.V;-37Q'^&I-3X>E;:0!I<(H#U#>7?02J"@4(*Z"%P[! -M6EG=HX+CKQ:+0*\$Q3=05!208:0Y"@I%)<\JQ^N8_<147'#8&2%E+]X01#.8H+0J!NJ=8/99+F^C?B4L"NABYS:$@T -M'/CG%2[+1.R0(O$0N!93,D"!H`F$B'`C,2"&!,YML_<*Q@:I#GK1GP-FSA<4[2H)(;4,0KAA2WE9%>%ON#\AF6`/K>AZ1ANTM,HF-?E[&N9,4K"B`+BOD -M8@EUE%*/R3*BB??@W::!E$)SBI"^BVHM`:'\%!%LYRN"?R"*%<;]L%PA*8D6 -M&308D=DJ0@QK`WG%UU,P`J:*I[QA@7209C/",;1QGP#*<9E+.QRP=LH1>,W6 -M!<9P9GG`,J,5X?86:?0MKY&=E+J,Q^(SV!J&$TR2_.,A$X(1A-HSDR/.S#PG -ILA)[>>5(]8W)ZY0BAMDR3TMM%$6/tmp/iso/file -dd if=/dev/zero bs=1 count=12345678 >>/tmp/iso/file +dd if=/dev/zero count=1 bs=12345678 >>/tmp/iso/file ln /tmp/iso/file /tmp/iso/hardlink (cd /tmp/iso; ln -s file symlink) +(cd /tmp/iso; ln -s /tmp/ symlink2) +(cd /tmp/iso; ln -s /tmp/../ symlink3) +(cd /tmp/iso; ln -s .././../tmp/ symlink4) +(cd /tmp/iso; ln -s .///file symlink5) +(cd /tmp/iso; ln -s /tmp//../ symlink6) TZ=utc touch -afhm -t 197001020000.01 /tmp/iso /tmp/iso/file /tmp/iso/dir -TZ=utc touch -afhm -t 197001030000.02 /tmp/iso/symlink -mkhybrid -R -uid 1 -gid 2 /tmp/iso | bzip2 > test_read_format_isorr_bz2.iso.bz2 -F=test_read_format_isorr_bz2.iso.bz2 +TZ=utc touch -afhm -t 197001030000.02 /tmp/iso/symlink /tmp/iso/symlink5 +F=test_read_format_iso_rockridge.iso.Z +mkhybrid -R -uid 1 -gid 2 /tmp/iso | compress > $F uuencode $F $F > $F.uu exit 1 */ DEFINE_TEST(test_read_format_isorr_bz2) { - const char *refname = "test_read_format_isorr_bz2.iso.bz2"; + const char *refname = "test_read_format_iso_rockridge.iso.Z"; struct archive_entry *ae; struct archive *a; const void *p; size_t size; off_t offset; - int r; + int i; extract_reference_file(refname); assert((a = archive_read_new()) != NULL); - r = archive_read_support_compression_bzip2(a); - if (r == ARCHIVE_WARN) { - skipping("bzip2 reading not fully supported on this platform"); - assertEqualInt(0, archive_read_finish(a)); - return; - } - assertEqualInt(0, r); + assertEqualInt(0, archive_read_support_compression_all(a)); assertEqualInt(0, archive_read_support_format_all(a)); assertEqualInt(ARCHIVE_OK, archive_read_open_filename(a, refname, 10240)); - /* First entry is '.' root directory. */ - assertEqualInt(0, archive_read_next_header(a, &ae)); - assertEqualString(".", archive_entry_pathname(ae)); - assert(S_ISDIR(archive_entry_stat(ae)->st_mode)); - assertEqualInt(2048, archive_entry_size(ae)); - assertEqualInt(86401, archive_entry_mtime(ae)); - assertEqualInt(0, archive_entry_mtime_nsec(ae)); - assertEqualInt(86401, archive_entry_ctime(ae)); - assertEqualInt(0, archive_entry_stat(ae)->st_nlink); - assertEqualInt(0, archive_entry_uid(ae)); - assertEqualIntA(a, ARCHIVE_EOF, - archive_read_data_block(a, &p, &size, &offset)); - assertEqualInt((int)size, 0); + /* Retrieve each of the 8 files on the ISO image and + * verify that each one is what we expect. */ + for (i = 0; i < 10; ++i) { + assertEqualInt(0, archive_read_next_header(a, &ae)); - /* A directory. */ - assertEqualInt(0, archive_read_next_header(a, &ae)); - assertEqualString("dir", archive_entry_pathname(ae)); - assert(S_ISDIR(archive_entry_stat(ae)->st_mode)); - assertEqualInt(2048, archive_entry_size(ae)); - assertEqualInt(86401, archive_entry_mtime(ae)); - assertEqualInt(86401, archive_entry_atime(ae)); - assertEqualInt(2, archive_entry_stat(ae)->st_nlink); - assertEqualInt(1, archive_entry_uid(ae)); - assertEqualInt(2, archive_entry_gid(ae)); - - /* A regular file. */ - assertEqualInt(0, archive_read_next_header(a, &ae)); - assertEqualString("file", archive_entry_pathname(ae)); - assert(S_ISREG(archive_entry_stat(ae)->st_mode)); - assertEqualInt(12345684, archive_entry_size(ae)); - assertEqualInt(0, archive_read_data_block(a, &p, &size, &offset)); - assertEqualInt(0, offset); - assertEqualMem(p, "hello\n", 6); - assertEqualInt(86401, archive_entry_mtime(ae)); - assertEqualInt(86401, archive_entry_atime(ae)); - assertEqualInt(2, archive_entry_stat(ae)->st_nlink); - assertEqualInt(1, archive_entry_uid(ae)); - assertEqualInt(2, archive_entry_gid(ae)); - - /* A hardlink to the regular file. */ - assertEqualInt(0, archive_read_next_header(a, &ae)); - assertEqualString("hardlink", archive_entry_pathname(ae)); - assert(S_ISREG(archive_entry_stat(ae)->st_mode)); - assertEqualString("file", archive_entry_hardlink(ae)); - assert(!archive_entry_size_is_set(ae)); - assertEqualInt(86401, archive_entry_mtime(ae)); - assertEqualInt(86401, archive_entry_atime(ae)); - assertEqualInt(2, archive_entry_stat(ae)->st_nlink); - assertEqualInt(1, archive_entry_uid(ae)); - assertEqualInt(2, archive_entry_gid(ae)); - - /* A symlink to the regular file. */ - assertEqualInt(0, archive_read_next_header(a, &ae)); - assertEqualString("symlink", archive_entry_pathname(ae)); - assert(S_ISLNK(archive_entry_stat(ae)->st_mode)); - assertEqualString("file", archive_entry_symlink(ae)); - assertEqualInt(0, archive_entry_size(ae)); - assertEqualInt(172802, archive_entry_mtime(ae)); - assertEqualInt(172802, archive_entry_atime(ae)); - assertEqualInt(1, archive_entry_stat(ae)->st_nlink); - assertEqualInt(1, archive_entry_uid(ae)); - assertEqualInt(2, archive_entry_gid(ae)); + if (strcmp(".", archive_entry_pathname(ae)) == 0) { + /* '.' root directory. */ + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + /* Now, we read timestamp recorded by RRIP "TF". */ + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(0, archive_entry_mtime_nsec(ae)); + /* Now, we read links recorded by RRIP "PX". */ + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualIntA(a, ARCHIVE_EOF, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt((int)size, 0); + } else if (strcmp("dir", archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir", archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("hardlink", archive_entry_pathname(ae)) == 0) { + /* A regular file. */ + assertEqualString("hardlink", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualInt(12345684, archive_entry_size(ae)); + assertEqualInt(0, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt(0, offset); + assertEqualMem(p, "hello\n", 6); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("file", archive_entry_pathname(ae)) == 0) { + /* A hardlink to the regular file. */ + /* Note: If "hardlink" gets returned before "file", + * then "hardlink" will get returned as a regular file + * and "file" will get returned as the hardlink. + * This test should tolerate that, since it's a + * perfectly permissible thing for libarchive to do. */ + assertEqualString("file", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualString("hardlink", archive_entry_hardlink(ae)); + assertEqualInt(0, archive_entry_size_is_set(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink", archive_entry_pathname(ae)) == 0) { + /* A symlink to the regular file. */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("file", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(172802, archive_entry_mtime(ae)); + assertEqualInt(172802, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink2", archive_entry_pathname(ae)) == 0) { + /* A symlink to /tmp (an absolute path) */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("/tmp", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink3", archive_entry_pathname(ae)) == 0) { + /* A symlink to /tmp/.. (with a ".." component) */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("/tmp/..", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink4", archive_entry_pathname(ae)) == 0) { + /* A symlink to a path with ".." and "." components */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString(".././../tmp", + archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink5", archive_entry_pathname(ae)) == 0) { + /* A symlink to the regular file with "/" components. */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString(".///file", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(172802, archive_entry_mtime(ae)); + assertEqualInt(172802, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink6", archive_entry_pathname(ae)) == 0) { + /* A symlink to /tmp//.. + * (with "/" and ".." components) */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("/tmp//..", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else { + failure("Saw a file that shouldn't have been there"); + assertEqualString(archive_entry_pathname(ae), ""); + } + } /* End of archive. */ assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &ae)); /* Verify archive format. */ - assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_BZIP2); + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_COMPRESS); assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ISO9660_ROCKRIDGE); /* Close the archive. */ assertEqualInt(0, archive_read_close(a)); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_read_finish(a); -#else assertEqualInt(0, archive_read_finish(a)); -#endif } diff --git a/lib/libarchive/test/test_read_format_isorr_bz2.iso.bz2.uu b/lib/libarchive/test/test_read_format_isorr_bz2.iso.bz2.uu deleted file mode 100644 index f675794de00..00000000000 --- a/lib/libarchive/test/test_read_format_isorr_bz2.iso.bz2.uu +++ /dev/null @@ -1,24 +0,0 @@ -$FreeBSD$ -begin 644 test_read_format_isorr_bz2.iso.bz2 -M0EIH.3%!629363S[0-4``,?_W?__R_158__Z/__?8*?OWB8AZB2```4@`,0" -M@0C0`SX`6UH$P:F@32FCU-D1Z@#U'J!HT>H#0`!H`T9`#U-#33(-`-3TFA#1 -MJ933TFR%#(&@`#0-````'J`T``,.-#1HT&C0-``````R````-`9``8<:&C1H -M-&@:`````!D````:`R``P1*(1$]3U,C(--``T!H:9``````:``&F)?&F1;DY -M&:FB?6\AB@WG9X@8AM,HTK/Q9EXPZD#E2A$D)(@;F(G^B.92GLB`=H@`+I1! -M1$`';Y%%P_YU^!0+8BJ(@#DC&D@D4"1D4?Z1!$1`&Z`V[]0H($(!6L90;:>A0V<))XH7BH%"KAF8!:H8\].K:4`Y`,4,!RN:#SL[!;-"!6%0F?`H -M2_2AM@*%/%<\*!XL/C2%A1AI$8/AF(#SZ;]:>$5^/NKNO<+EH@_CS4XUI(Q* -M123&G=9T]QQR?"=WMV(,&60`1D0:U043)E&22GWA);Z:"9R.A@,4,IL+O=L7 -MACF:V5C!L"HB&,82/[./'>PAEG-"PA,D6T1+ -M2<\S]-*$,]X-XF%:_)1,W,=`,^+.N0""6@"85=H@<2FZ=HI-GDHK&)>/T74Y -M+5>[4:S`Z`M87AHD`H6BE*8R%X=9AS$7&+Z?F%A.`AX!"XZRR@C5_?4^P".90`*]#[D(PA*&MPV7U2 -M;.]7.&/5!?P@C:J)S&T%=%,KJ@X0[""E8G!I!/I%`KSMA<#^!%C+Y*")'1]( -MJ06:CXD^5K*:`$E`B`0$P5;&R;BF<5/Y7&(5A`?:!J@`` -` -end diff --git a/lib/libarchive/test/test_read_format_isorr_ce.c b/lib/libarchive/test/test_read_format_isorr_ce.c new file mode 100644 index 00000000000..c9cd059f0f0 --- /dev/null +++ b/lib/libarchive/test/test_read_format_isorr_ce.c @@ -0,0 +1,223 @@ +/*- + * Copyright (c) 2003-2007 Tim Kientzle + * Copyright (c) 2009 Michihiro NAKAJIMA + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "test.h" +__FBSDID("$FreeBSD$"); + +/* +Execute the following command to rebuild the data for this program: + tail -n +32 test_read_format_isorr_ce.c | /bin/sh + +dirname=/tmp/iso +# +rm -rf $dirname +mkdir $dirname +# +num=0 +file="" +while [ $num -lt 150 ] +do + num=$((num+1)) + file="a$file" +done +# +num=0 +while [ $num -lt 3 ] +do + num=$((num+1)) + file="a$file" + echo "hello $((num+150))" > $dirname/$file + dd if=/dev/zero count=1 bs=4080 >> $dirname/$file + (cd $dirname; ln -s $file sym$num) +done +# +mkdir $dirname/dir +# +time1="197001020000.01" +time2="197001030000.02" +TZ=utc touch -afhm -t $time1 $dirname/dir $dirname/aaaa* +TZ=utc touch -afhm -t $time2 $dirname/sym* +TZ=utc touch -afhm -t $time1 $dirname +# +F=test_read_format_iso_rockridge_ce.iso.Z +mkisofs -R -uid 1 -gid 2 $dirname | compress > $F +uuencode $F $F > $F.uu +rm -rf $dirname +exit 1 + */ + +/* + * Test reading SUSP "CE" extension is works fine. + */ + +static void +mkpath(char *p, int len) +{ + int i; + + for (i = 0; i < len; i++) + p[i] = 'a'; + p[len] = '\0'; +} + +DEFINE_TEST(test_read_format_isorr_ce) +{ + const char *refname = "test_read_format_iso_rockridge_ce.iso.Z"; + char path1[160]; + char path2[160]; + char path3[160]; + struct archive_entry *ae; + struct archive *a; + const void *p; + size_t size; + off_t offset; + int i; + + mkpath(path1, 151); + mkpath(path2, 152); + mkpath(path3, 153); + extract_reference_file(refname); + assert((a = archive_read_new()) != NULL); + assertEqualInt(0, archive_read_support_compression_all(a)); + assertEqualInt(0, archive_read_support_format_all(a)); + assertEqualInt(ARCHIVE_OK, + archive_read_open_filename(a, refname, 10240)); + + /* Retrieve each of the 8 files on the ISO image and + * verify that each one is what we expect. */ + for (i = 0; i < 8; ++i) { + assertEqualInt(0, archive_read_next_header(a, &ae)); + + if (strcmp(".", archive_entry_pathname(ae)) == 0) { + /* '.' root directory. */ + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + /* Now, we read timestamp recorded by RRIP "TF". */ + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(0, archive_entry_mtime_nsec(ae)); + /* Now, we read links recorded by RRIP "PX". */ + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualIntA(a, ARCHIVE_EOF, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt((int)size, 0); + } else if (strcmp("dir", archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir", archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp(path1, archive_entry_pathname(ae)) == 0) { + /* A regular file. */ + assertEqualString(path1, archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualInt(4090, archive_entry_size(ae)); + assertEqualInt(0, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt(0, offset); + assertEqualMem(p, "hello 151\n", 10); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp(path2, archive_entry_pathname(ae)) == 0) { + /* A regular file. */ + assertEqualString(path2, archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualInt(4090, archive_entry_size(ae)); + assertEqualInt(0, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt(0, offset); + assertEqualMem(p, "hello 152\n", 10); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp(path3, archive_entry_pathname(ae)) == 0) { + /* A regular file. */ + assertEqualString(path3, archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualInt(4090, archive_entry_size(ae)); + assertEqualInt(0, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt(0, offset); + assertEqualMem(p, "hello 153\n", 10); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("sym1", archive_entry_pathname(ae)) == 0) { + /* A symlink to the regular file. */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString(path1, archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(172802, archive_entry_mtime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("sym2", archive_entry_pathname(ae)) == 0) { + /* A symlink to the regular file. */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString(path2, archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(172802, archive_entry_mtime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("sym3", archive_entry_pathname(ae)) == 0) { + /* A symlink to the regular file. */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString(path3, archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(172802, archive_entry_mtime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else { + failure("Saw a file that shouldn't have been there"); + assertEqualString(archive_entry_pathname(ae), ""); + } + } + + /* End of archive. */ + assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &ae)); + + /* Verify archive format. */ + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_COMPRESS); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ISO9660_ROCKRIDGE); + + /* Close the archive. */ + assertEqualInt(0, archive_read_close(a)); + assertEqualInt(0, archive_read_finish(a)); +} + + diff --git a/lib/libarchive/test/test_read_format_isorr_new_bz2.c b/lib/libarchive/test/test_read_format_isorr_new_bz2.c new file mode 100644 index 00000000000..5fa2492ec26 --- /dev/null +++ b/lib/libarchive/test/test_read_format_isorr_new_bz2.c @@ -0,0 +1,204 @@ +/*- + * Copyright (c) 2003-2007 Tim Kientzle + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "test.h" +__FBSDID("$FreeBSD$"); + + +/* +PLEASE use latest cdrtools at least mkisofs version is 2.01.01a63 or later. +Old version mkisofs made wrong "SL" System Use Entry of RRIP. + +Execute the following command to rebuild the data for this program: + tail -n +34 test_read_format_isorr_new_bz2.c | /bin/sh + +rm -rf /tmp/iso +mkdir /tmp/iso +mkdir /tmp/iso/dir +echo "hello" >/tmp/iso/file +dd if=/dev/zero count=1 bs=12345678 >>/tmp/iso/file +ln /tmp/iso/file /tmp/iso/hardlink +(cd /tmp/iso; ln -s file symlink) +(cd /tmp/iso; ln -s /tmp/ symlink2) +(cd /tmp/iso; ln -s /tmp/../ symlink3) +(cd /tmp/iso; ln -s .././../tmp/ symlink4) +(cd /tmp/iso; ln -s .///file symlink5) +(cd /tmp/iso; ln -s /tmp//../ symlink6) +TZ=utc touch -afhm -t 197001020000.01 /tmp/iso /tmp/iso/file /tmp/iso/dir +TZ=utc touch -afhm -t 197001030000.02 /tmp/iso/symlink +F=test_read_format_iso_rockridge_new.iso.Z +mkhybrid -R -uid 1 -gid 2 /tmp/iso | compress > $F +uuencode $F $F > $F.uu +exit 1 + */ + +DEFINE_TEST(test_read_format_isorr_new_bz2) +{ + const char *refname = "test_read_format_iso_rockridge_new.iso.Z"; + struct archive_entry *ae; + struct archive *a; + const void *p; + size_t size; + off_t offset; + int i; + + extract_reference_file(refname); + assert((a = archive_read_new()) != NULL); + assertEqualInt(0, archive_read_support_compression_all(a)); + assertEqualInt(0, archive_read_support_format_all(a)); + assertEqualInt(ARCHIVE_OK, + archive_read_open_filename(a, refname, 10240)); + + /* Retrieve each of the 8 files on the ISO image and + * verify that each one is what we expect. */ + for (i = 0; i < 10; ++i) { + assertEqualInt(0, archive_read_next_header(a, &ae)); + + if (strcmp(".", archive_entry_pathname(ae)) == 0) { + /* '.' root directory. */ + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + /* Now, we read timestamp recorded by RRIP "TF". */ + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(0, archive_entry_mtime_nsec(ae)); + /* Now, we read links recorded by RRIP "PX". */ + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualIntA(a, ARCHIVE_EOF, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt((int)size, 0); + } else if (strcmp("dir", archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir", archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("hardlink", archive_entry_pathname(ae)) == 0) { + /* A regular file. */ + assertEqualString("hardlink", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualInt(12345684, archive_entry_size(ae)); + assertEqualInt(0, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt(0, offset); + assertEqualMem(p, "hello\n", 6); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("file", archive_entry_pathname(ae)) == 0) { + /* A hardlink to the regular file. */ + /* Note: If "hardlink" gets returned before "file", + * then "hardlink" will get returned as a regular file + * and "file" will get returned as the hardlink. + * This test should tolerate that, since it's a + * perfectly permissible thing for libarchive to do. */ + assertEqualString("file", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualString("hardlink", archive_entry_hardlink(ae)); + assertEqualInt(0, archive_entry_size_is_set(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink", archive_entry_pathname(ae)) == 0) { + /* A symlink to the regular file. */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("file", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(172802, archive_entry_mtime(ae)); + assertEqualInt(172802, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink2", archive_entry_pathname(ae)) == 0) { + /* A symlink to /tmp/ (an absolute path) */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("/tmp/", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink3", archive_entry_pathname(ae)) == 0) { + /* A symlink to /tmp/../ (with a ".." component) */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("/tmp/../", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink4", archive_entry_pathname(ae)) == 0) { + /* A symlink to a path with ".." and "." components */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString(".././../tmp/", + archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink5", archive_entry_pathname(ae)) == 0) { + /* A symlink to the regular file with "/" components. */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString(".///file", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(172802, archive_entry_mtime(ae)); + assertEqualInt(172802, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink6", archive_entry_pathname(ae)) == 0) { + /* A symlink to /tmp//../ + * (with "/" and ".." components) */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("/tmp//../", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else { + failure("Saw a file that shouldn't have been there"); + assertEqualString(archive_entry_pathname(ae), ""); + } + } + + /* End of archive. */ + assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &ae)); + + /* Verify archive format. */ + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_COMPRESS); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ISO9660_ROCKRIDGE); + + /* Close the archive. */ + assertEqualInt(0, archive_read_close(a)); + assertEqualInt(0, archive_read_finish(a)); +} + + diff --git a/lib/libarchive/test/test_read_format_isorr_rr_moved.c b/lib/libarchive/test/test_read_format_isorr_rr_moved.c new file mode 100644 index 00000000000..0aeb2260fc8 --- /dev/null +++ b/lib/libarchive/test/test_read_format_isorr_rr_moved.c @@ -0,0 +1,270 @@ +/*- + * Copyright (c) 2003-2007 Tim Kientzle + * Copyright (c) 2009 Michihiro NAKAJIMA + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "test.h" +__FBSDID("$FreeBSD$"); + +/* +Execute the following command to rebuild the data for this program: + tail -n +32 test_read_format_isorr_rr_moved.c | /bin/sh + +dirname=/tmp/iso +rm -rf $dirname +mkdir -p $dirname/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dir10 +echo "hello" >$dirname/file +dd if=/dev/zero count=1 bs=12345678 >>$dirname/file +deepfile=$dirname/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dir10/deep +echo "hello" >$deepfile +dd if=/dev/zero count=1 bs=12345678 >>$deepfile +time="197001020000.01" +TZ=utc touch -afhm -t $time $deepfile +TZ=utc touch -afhm -t $time $dirname/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9/dir10 +TZ=utc touch -afhm -t $time $dirname/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8/dir9 +TZ=utc touch -afhm -t $time $dirname/dir1/dir2/dir3/dir4/dir5/dir6/dir7/dir8 +TZ=utc touch -afhm -t $time $dirname/dir1/dir2/dir3/dir4/dir5/dir6/dir7 +TZ=utc touch -afhm -t $time $dirname/dir1/dir2/dir3/dir4/dir5/dir6 +TZ=utc touch -afhm -t $time $dirname/dir1/dir2/dir3/dir4/dir5 +TZ=utc touch -afhm -t $time $dirname/dir1/dir2/dir3/dir4 +TZ=utc touch -afhm -t $time $dirname/dir1/dir2/dir3 +TZ=utc touch -afhm -t $time $dirname/dir1/dir2 +TZ=utc touch -afhm -t $time $dirname/dir1 +TZ=utc touch -afhm -t $time $dirname/file +TZ=utc touch -afhm -t $time $dirname +F=test_read_format_isorr_rockridge_moved.iso.Z +mkhybrid -R -uid 1 -gid 2 $dirname | compress > $F +uuencode $F $F > $F.uu +exit 1 + */ + +DEFINE_TEST(test_read_format_isorr_rr_moved) +{ + const char *refname = "test_read_format_iso_rockridge_rr_moved.iso.Z"; + struct archive_entry *ae; + struct archive *a; + const void *p; + size_t size; + off_t offset; + int i; + + extract_reference_file(refname); + assert((a = archive_read_new()) != NULL); + assertEqualInt(0, archive_read_support_compression_all(a)); + assertEqualInt(0, archive_read_support_format_all(a)); + assertEqualInt(ARCHIVE_OK, + archive_read_open_filename(a, refname, 10240)); + + /* Retrieve each of the 8 files on the ISO image and + * verify that each one is what we expect. */ + for (i = 0; i < 13; ++i) { + assertEqualInt(0, archive_read_next_header(a, &ae)); + + if (strcmp(".", archive_entry_pathname(ae)) == 0) { + /* '.' root directory. */ + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + /* Now, we read timestamp recorded by RRIP "TF". */ + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(0, archive_entry_mtime_nsec(ae)); + /* Now, we read links recorded by RRIP "PX". */ + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualIntA(a, ARCHIVE_EOF, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt((int)size, 0); + } else if (strcmp("dir1", archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir1", archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("dir1/dir2", + archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir1/dir2", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("dir1/dir2/dir3", + archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir1/dir2/dir3", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("dir1/dir2/dir3/dir4", + archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir1/dir2/dir3/dir4", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("dir1/dir2/dir3/dir4/dir5", + archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir1/dir2/dir3/dir4/dir5", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("dir1/dir2/dir3/dir4/dir5/dir6", + archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir1/dir2/dir3/dir4/dir5/dir6", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("dir1/dir2/dir3/dir4/dir5/dir6/dir7", + archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir1/dir2/dir3/dir4/dir5/dir6/dir7", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("dir1/dir2/dir3/dir4/dir5/dir6/dir7" + "/dir8", + archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir1/dir2/dir3/dir4/dir5/dir6/dir7" + "/dir8", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("dir1/dir2/dir3/dir4/dir5/dir6/dir7" + "/dir8/dir9", + archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir1/dir2/dir3/dir4/dir5/dir6/dir7" + "/dir8/dir9", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("dir1/dir2/dir3/dir4/dir5/dir6/dir7" + "/dir8/dir9/dir10", + archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir1/dir2/dir3/dir4/dir5/dir6/dir7" + "/dir8/dir9/dir10", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("file", archive_entry_pathname(ae)) == 0) { + /* A regular file. */ + assertEqualString("file", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualInt(12345684, archive_entry_size(ae)); + assertEqualInt(0, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt(0, offset); + assertEqualMem(p, "hello\n", 6); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("dir1/dir2/dir3/dir4/dir5/dir6/dir7" + "/dir8/dir9/dir10/deep", + archive_entry_pathname(ae)) == 0) { + /* A regular file. */ + assertEqualString("dir1/dir2/dir3/dir4/dir5/dir6/dir7" + "/dir8/dir9/dir10/deep", + archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualInt(12345684, archive_entry_size(ae)); + assertEqualInt(0, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt(0, offset); + assertEqualMem(p, "hello\n", 6); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else { + failure("Saw a file that shouldn't have been there"); + assertEqualString(archive_entry_pathname(ae), ""); + } + } + + /* End of archive. */ + assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &ae)); + + /* Verify archive format. */ + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_COMPRESS); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ISO9660_ROCKRIDGE); + + /* Close the archive. */ + assertEqualInt(0, archive_read_close(a)); + assertEqualInt(0, archive_read_finish(a)); +} + + diff --git a/lib/libarchive/test/test_read_format_isozisofs_bz2.c b/lib/libarchive/test/test_read_format_isozisofs_bz2.c new file mode 100644 index 00000000000..56c39c0be22 --- /dev/null +++ b/lib/libarchive/test/test_read_format_isozisofs_bz2.c @@ -0,0 +1,187 @@ +/*- + * Copyright (c) 2003-2007 Tim Kientzle + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "test.h" +__FBSDID("$FreeBSD$"); + +/* +Execute the following command to rebuild the data for this program: + tail -n +32 test_read_format_isozisofs_bz2.c | /bin/sh + +rm -rf /tmp/iso /tmp/ziso +mkdir /tmp/iso +mkdir /tmp/iso/dir +echo "hello" >/tmp/iso/file +dd if=/dev/zero count=1 bs=12345678 >>/tmp/iso/file +ln /tmp/iso/file /tmp/iso/hardlink +(cd /tmp/iso; ln -s file symlink) +(cd /tmp/iso; ln -s /tmp/ symlink2) +(cd /tmp/iso; ln -s /tmp/../ symlink3) +(cd /tmp/iso; ln -s .././../tmp/ symlink4) +TZ=utc touch -afhm -t 197001020000.01 /tmp/iso /tmp/iso/file /tmp/iso/dir +TZ=utc touch -afhm -t 197001030000.02 /tmp/iso/symlink +mkzftree /tmp/iso /tmp/ziso +TZ=utc touch -afhm -t 197001020000.01 /tmp/ziso /tmp/ziso/file /tmp/ziso/dir +TZ=utc touch -afhm -t 197001030000.02 /tmp/ziso/symlink +F=test_read_format_iso_zisofs.iso.Z +mkhybrid -R -uid 1 -gid 2 -z /tmp/ziso | compress > $F +uuencode $F $F > $F.uu +exit 1 + + */ + +DEFINE_TEST(test_read_format_isozisofs_bz2) +{ + const char *refname = "test_read_format_iso_zisofs.iso.Z"; + struct archive_entry *ae; + struct archive *a; + const void *p; + size_t size; + off_t offset; + int i; + + extract_reference_file(refname); + assert((a = archive_read_new()) != NULL); + assertEqualInt(0, archive_read_support_compression_all(a)); + assertEqualInt(0, archive_read_support_format_all(a)); + assertEqualInt(ARCHIVE_OK, + archive_read_open_filename(a, refname, 10240)); + + /* Retrieve each of the 8 files on the ISO image and + * verify that each one is what we expect. */ + for (i = 0; i < 8; ++i) { + assertEqualInt(0, archive_read_next_header(a, &ae)); + + if (strcmp(".", archive_entry_pathname(ae)) == 0) { + /* '.' root directory. */ + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + /* Now, we read timestamp recorded by RRIP "TF". */ + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(0, archive_entry_mtime_nsec(ae)); + /* Now, we read links recorded by RRIP "PX". */ + assertEqualInt(3, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualIntA(a, ARCHIVE_EOF, + archive_read_data_block(a, &p, &size, &offset)); + assertEqualInt((int)size, 0); + } else if (strcmp("dir", archive_entry_pathname(ae)) == 0) { + /* A directory. */ + assertEqualString("dir", archive_entry_pathname(ae)); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); + assertEqualInt(2048, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("hardlink", archive_entry_pathname(ae)) == 0) { + int r; + /* A regular file. */ + assertEqualString("hardlink", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualInt(12345684, archive_entry_size(ae)); + r = archive_read_data_block(a, &p, &size, &offset); + if (r == ARCHIVE_FAILED) { + skipping("Can't read body of ZISOFS entry."); + } else { + assertEqualInt(ARCHIVE_OK, r); + assertEqualInt(0, offset); + assertEqualMem(p, "hello\n", 6); + } + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("file", archive_entry_pathname(ae)) == 0) { + /* A hardlink to the regular file. */ + /* Note: If "hardlink" gets returned before "file", + * then "hardlink" will get returned as a regular file + * and "file" will get returned as the hardlink. + * This test should tolerate that, since it's a + * perfectly permissible thing for libarchive to do. */ + assertEqualString("file", archive_entry_pathname(ae)); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); + assertEqualString("hardlink", archive_entry_hardlink(ae)); + assertEqualInt(0, archive_entry_size_is_set(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(86401, archive_entry_mtime(ae)); + assertEqualInt(86401, archive_entry_atime(ae)); + assertEqualInt(2, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink", archive_entry_pathname(ae)) == 0) { + /* A symlink to the regular file. */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("file", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(172802, archive_entry_mtime(ae)); + assertEqualInt(172802, archive_entry_atime(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink2", archive_entry_pathname(ae)) == 0) { + /* A symlink to /tmp (an absolute path) */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("/tmp", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink3", archive_entry_pathname(ae)) == 0) { + /* A symlink to /tmp/.. (with a ".." component) */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString("/tmp/..", archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else if (strcmp("symlink4", archive_entry_pathname(ae)) == 0) { + /* A symlink to a path with ".." and "." components */ + assertEqualInt(AE_IFLNK, archive_entry_filetype(ae)); + assertEqualString(".././../tmp", + archive_entry_symlink(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualInt(1, archive_entry_stat(ae)->st_nlink); + assertEqualInt(1, archive_entry_uid(ae)); + assertEqualInt(2, archive_entry_gid(ae)); + } else { + failure("Saw a file that shouldn't have been there"); + assertEqualString(archive_entry_pathname(ae), ""); + } + } + + /* End of archive. */ + assertEqualInt(ARCHIVE_EOF, archive_read_next_header(a, &ae)); + + /* Verify archive format. */ + assertEqualInt(archive_compression(a), ARCHIVE_COMPRESSION_COMPRESS); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_ISO9660_ROCKRIDGE); + + /* Close the archive. */ + assertEqualInt(0, archive_read_close(a)); + assertEqualInt(0, archive_read_finish(a)); +} + + diff --git a/lib/libarchive/test/test_read_format_mtree.c b/lib/libarchive/test/test_read_format_mtree.c index b13034fbf4d..5001e4d8a7a 100644 --- a/lib/libarchive/test/test_read_format_mtree.c +++ b/lib/libarchive/test/test_read_format_mtree.c @@ -25,34 +25,16 @@ #include "test.h" __FBSDID("$FreeBSD$"); -/* Single entry with a hardlink. */ -static unsigned char archive[] = { - "#mtree\n" - "file type=file uid=18 mode=0123 size=3\n" - "dir type=dir\n" - " file\\040with\\040space type=file uid=18\n" - " ..\n" - "file\\04with\\040space type=file\n" - "dir2 type=dir\n" - " dir3a type=dir\n" - " indir3a type=file\n" - "dir2/fullindir2 type=file mode=0777\n" - " ..\n" - " indir2 type=file\n" - " dir3b type=dir\n" - " indir3b type=file\n" - " ..\n" - " ..\n" - "notindir type=file\n" - "dir2/fullindir2 mode=0644\n" -}; - -DEFINE_TEST(test_read_format_mtree) +static void +test_read_format_mtree1(void) { + const char reffile[] = "test_read_format_mtree.mtree"; char buff[16]; struct archive_entry *ae; struct archive *a; - int fd; + FILE *f; + + extract_reference_file(reffile); /* * An access error occurred on some platform when mtree @@ -60,29 +42,28 @@ DEFINE_TEST(test_read_format_mtree) * the routine which open a directory that we create * "dir" and "dir2" directories. */ - assertEqualInt(0, mkdir("dir", 0775)); - assertEqualInt(0, mkdir("dir2", 0775)); + assertMakeDir("dir", 0775); + assertMakeDir("dir2", 0775); assert((a = archive_read_new()) != NULL); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_compression_all(a)); assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); - assertEqualIntA(a, ARCHIVE_OK, - archive_read_open_memory(a, archive, sizeof(archive))); + assertEqualIntA(a, ARCHIVE_OK, archive_read_open_file(a, reffile, 11)); /* * Read "file", whose data is available on disk. */ - fd = open("file", O_WRONLY | O_CREAT, 0777); - assert(fd >= 0); - assertEqualInt(3, write(fd, "hi\n", 3)); - close(fd); + f = fopen("file", "wb"); + assert(f != NULL); + assertEqualInt(3, fwrite("hi\n", 1, 3, f)); + fclose(f); assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); assertEqualInt(archive_format(a), ARCHIVE_FORMAT_MTREE); assertEqualString(archive_entry_pathname(ae), "file"); assertEqualInt(archive_entry_uid(ae), 18); - assert(S_ISREG(archive_entry_mode(ae))); + assertEqualInt(AE_IFREG, archive_entry_filetype(ae)); assertEqualInt(archive_entry_mode(ae), AE_IFREG | 0123); assertEqualInt(archive_entry_size(ae), 3); assertEqualInt(3, archive_read_data(a, buff, 3)); @@ -90,13 +71,13 @@ DEFINE_TEST(test_read_format_mtree) assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); assertEqualString(archive_entry_pathname(ae), "dir"); - assert(S_ISDIR(archive_entry_mode(ae))); + assertEqualInt(AE_IFDIR, archive_entry_filetype(ae)); assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); assertEqualString(archive_entry_pathname(ae), "dir/file with space"); assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); - assertEqualString(archive_entry_pathname(ae), "file\\04with space"); + assertEqualString(archive_entry_pathname(ae), "file with space"); assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); assertEqualString(archive_entry_pathname(ae), "dir2"); @@ -125,11 +106,38 @@ DEFINE_TEST(test_read_format_mtree) assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); assertEqualInt(ARCHIVE_OK, archive_read_close(a)); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_read_finish(a); -#else assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); -#endif +} + +static void +test_read_format_mtree2(void) +{ + static char archive[] = + "#mtree\n" + "d type=dir content=.\n"; + struct archive_entry *ae; + struct archive *a; + + assert((a = archive_read_new()) != NULL); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_support_compression_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_support_format_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_open_memory(a, archive, sizeof(archive))); + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_MTREE); + assertEqualString(archive_entry_pathname(ae), "d"); + assertEqualInt(archive_entry_filetype(ae), AE_IFDIR); + assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + assertEqualInt(ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); } + +DEFINE_TEST(test_read_format_mtree) +{ + test_read_format_mtree1(); + test_read_format_mtree2(); +} diff --git a/lib/libarchive/test/test_read_format_mtree.mtree.uu b/lib/libarchive/test/test_read_format_mtree.mtree.uu new file mode 100644 index 00000000000..9fa0d9b04d5 --- /dev/null +++ b/lib/libarchive/test/test_read_format_mtree.mtree.uu @@ -0,0 +1,13 @@ +$FreeBSD$ + +begin 644 test_read_format_mtree.mtree +M(VUT7!E/61I<@H@9FEL95PP-#!W:71H7#`T,'-P86-E('1Y<&4]9FEL +M92!U:60],3@*("XN"F9I;&5<,#0P=VET:%PP-#!S<&%C92!T>7!E/69I;&4* +M9&ER,B!T>7!E/61I<@H@9&ER,V$@='EP93UD:7(*("!I;F1I7!E/61I<@H@(&EN9&ER,V(@ +M='EP93UF:6QE"B`@+BX*("XN"FYO=&EN9&ER('1Y<&4]9FEL90ID:7(R+V9U +3;&QI;F1I/1A2\n" +"IHU\"0%9=*G4JUJM6K6+-JWO8,.*'4NVK-FS:-.J7\n" +"Received: from libarchive (localhost [127.0.0.1])\n" +" by libarchive (8.14.2/8.14.2) with ESMTP id m5233UT1006448\n" +" for ; Mon, 2 Jun 2008 03:03:31 GMT\n" +" (envelope-from uudecode@libarchive)\n" +"Received: (from uudecode@localhost)\n" +" by libarchive (8.14.2/8.14.2/Submit) id m5233U3e006406\n" +" for uudecode; Mon, 2 Jun 2008 03:03:30 GMT\n" +" (envelope-from root)\n" +"Date: Mon, 2 Jun 2008 03:03:30 GMT\n" +"From: Libarchive Test \n" +"Message-Id: <200806020303.m5233U3e006406@libarchive>\n" +"To: uudecode@libarchive\n" +"Subject: Libarchive uudecode test\n" +"\n" +"* Redistribution and use in source and binary forms, with or without\n" +"* modification, are permitted provided that the following conditions\n" +"* are met:\n" +"\n" +"01234567890abcdeghijklmnopqrstuvwxyz\n" +"01234567890ABCEFGHIJKLMNOPQRSTUVWXYZ\n" +"\n" +}; + +static void +test_read_uu_sub(const char *uudata, size_t uusize) +{ + struct archive_entry *ae; + struct archive *a; + char *buff; + int extra; + + assert(NULL != (buff = malloc(uusize + 64 * 1024))); + if (buff == NULL) + return; + for (extra = 0; extra <= 64; extra = extra==0?1:extra*2) { + size_t size = extra * 1024; + char *p = buff; + + /* Add extra text size of which is from 1K bytes to + * 64Kbytes before uuencoded data. */ + while (size) { + if (size > sizeof(extradata)-1) { + memcpy(p, extradata, sizeof(extradata)-1); + p += sizeof(extradata)-1; + size -= sizeof(extradata)-1; + } else { + memcpy(p, extradata, size-1); + p += size-1; + *p++ = '\n';/* the last of extra text must have + * '\n' character. */ + break; + } + } + memcpy(p, uudata, uusize); + size = extra * 1024 + uusize; + + assert((a = archive_read_new()) != NULL); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_support_compression_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_support_format_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + read_open_memory(a, buff, size, 2)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_next_header(a, &ae)); + failure("archive_compression_name(a)=\"%s\"", + archive_compression_name(a)); + assertEqualInt(archive_compression(a), + ARCHIVE_COMPRESSION_COMPRESS); + failure("archive_format_name(a)=\"%s\"", + archive_format_name(a)); + assertEqualInt(archive_format(a), ARCHIVE_FORMAT_TAR_USTAR); + assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); + } + free(buff); +} + +DEFINE_TEST(test_read_uu) +{ + /* Read the traditional uuencoded data. */ + test_read_uu_sub(archive, sizeof(archive)-1); + /* Read the Base64 uuencoded data. */ + test_read_uu_sub(archive64, sizeof(archive64)-1); +} + diff --git a/lib/libarchive/test/test_tar_large.c b/lib/libarchive/test/test_tar_large.c index b2b8e5dbfdc..92ca8399317 100644 --- a/lib/libarchive/test/test_tar_large.c +++ b/lib/libarchive/test/test_tar_large.c @@ -190,7 +190,7 @@ memory_read_skip(struct archive *a, void *_private, off_t skip) } if (private->filebytes > 0) { if (private->filebytes < skip) - skip = private->filebytes; + skip = (off_t)private->filebytes; private->filebytes -= skip; } else { skip = 0; diff --git a/lib/libarchive/test/test_write_compress_program.c b/lib/libarchive/test/test_write_compress_program.c index 713638e7eb6..34d0680489e 100644 --- a/lib/libarchive/test/test_write_compress_program.c +++ b/lib/libarchive/test/test_write_compress_program.c @@ -38,12 +38,9 @@ DEFINE_TEST(test_write_compress_program) size_t used; int blocksize = 1024; int r; - const char *compprog, *decompprog; - decompprog = external_gzip_program(1); - if ((compprog = external_gzip_program(0)) == NULL) { - skipping("There is no gzip compression " - "program in this platform"); + if (!canGzip()) { + skipping("Cannot run 'gzip'"); return; } @@ -51,7 +48,7 @@ DEFINE_TEST(test_write_compress_program) /* Write it through an external "gzip" program. */ assert((a = archive_write_new()) != NULL); assertA(0 == archive_write_set_format_ustar(a)); - r = archive_write_set_compression_program(a, compprog); + r = archive_write_set_compression_program(a, "gzip"); if (r == ARCHIVE_FATAL) { skipping("Write compression via external " "program unsupported on this platform"); @@ -91,8 +88,8 @@ DEFINE_TEST(test_write_compress_program) /* The compression_gzip() handler will fall back to gunzip * automatically, but if we know gunzip isn't available, then * skip the rest. */ - if (r != ARCHIVE_OK && decompprog == NULL) { - skipping("No gzip decompression is available; " + if (r != ARCHIVE_OK && !canGunzip()) { + skipping("No libz and no gunzip program, " "unable to verify gzip compression"); assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); return; diff --git a/lib/libarchive/test/test_write_disk.c b/lib/libarchive/test/test_write_disk.c index c0b22e58a12..f3f4e56ee78 100644 --- a/lib/libarchive/test/test_write_disk.c +++ b/lib/libarchive/test/test_write_disk.c @@ -28,6 +28,14 @@ __FBSDID("$FreeBSD$"); #if ARCHIVE_VERSION_NUMBER >= 1009000 #define UMASK 022 +/* + * When comparing mode values, ignore high-order bits + * that are set on some OSes. This should cover the bits + * we're interested in (standard mode bits + file type bits) + * while ignoring extra markers such as Haiku/BeOS index + * flags. + */ +#define MODE_MASK 0777777 static void create(struct archive_entry *ae, const char *msg) { @@ -46,14 +54,15 @@ static void create(struct archive_entry *ae, const char *msg) #endif /* Test the entries on disk. */ assert(0 == stat(archive_entry_pathname(ae), &st)); - failure("st.st_mode=%o archive_entry_mode(ae)=%o", - st.st_mode, archive_entry_mode(ae)); + failure("%s", msg); + +#if !defined(_WIN32) || defined(__CYGWIN__) /* When verifying a dir, ignore the S_ISGID bit, as some systems set * that automatically. */ if (archive_entry_filetype(ae) == AE_IFDIR) st.st_mode &= ~S_ISGID; -#if !defined(_WIN32) || defined(__CYGWIN__) - assertEqualInt(st.st_mode, archive_entry_mode(ae) & ~UMASK); + assertEqualInt(st.st_mode & MODE_MASK, + archive_entry_mode(ae) & ~UMASK & MODE_MASK); #endif } @@ -61,8 +70,6 @@ static void create_reg_file(struct archive_entry *ae, const char *msg) { static const char data[]="abcdefghijklmnopqrstuvwxyz"; struct archive *ad; - struct stat st; - time_t now; /* Write the entry to disk. */ assert((ad = archive_write_disk_new()) != NULL); @@ -96,28 +103,20 @@ static void create_reg_file(struct archive_entry *ae, const char *msg) assertEqualInt(0, archive_write_finish(ad)); #endif /* Test the entries on disk. */ - assert(0 == stat(archive_entry_pathname(ae), &st)); - failure("st.st_mode=%o archive_entry_mode(ae)=%o", - st.st_mode, archive_entry_mode(ae)); -#if !defined(_WIN32) || defined(__CYGWIN__) - assertEqualInt(st.st_mode, (archive_entry_mode(ae) & ~UMASK)); -#endif - assertEqualInt(st.st_size, sizeof(data)); + assertIsReg(archive_entry_pathname(ae), archive_entry_mode(ae) & 0777); + assertFileSize(archive_entry_pathname(ae), sizeof(data)); /* test_write_disk_times has more detailed tests of this area. */ - assertEqualInt(st.st_mtime, 123456789); - failure("No atime was specified, so atime should get set to current time"); - now = time(NULL); - assert(st.st_atime <= now && st.st_atime > now - 5); + assertFileMtime(archive_entry_pathname(ae), 123456789, 0); + failure("No atime given, so atime should get set to current time"); + assertFileAtimeRecent(archive_entry_pathname(ae)); } static void create_reg_file2(struct archive_entry *ae, const char *msg) { const int datasize = 100000; char *data; - char *compare; struct archive *ad; - struct stat st; - int i, fd; + int i; data = malloc(datasize); for (i = 0; i < datasize; i++) @@ -137,26 +136,12 @@ static void create_reg_file2(struct archive_entry *ae, const char *msg) archive_write_data_block(ad, data + i, 1000, i)); } assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_write_finish(ad); -#else assertEqualInt(0, archive_write_finish(ad)); -#endif - /* Test the entries on disk. */ - assert(0 == stat(archive_entry_pathname(ae), &st)); - failure("st.st_mode=%o archive_entry_mode(ae)=%o", - st.st_mode, archive_entry_mode(ae)); -#if !defined(_WIN32) || defined(__CYGWIN__) - assertEqualInt(st.st_mode, (archive_entry_mode(ae) & ~UMASK)); -#endif - assertEqualInt(st.st_size, i); - compare = malloc(datasize); - fd = open(archive_entry_pathname(ae), O_RDONLY); - assertEqualInt(datasize, read(fd, compare, datasize)); - close(fd); - assert(memcmp(compare, data, datasize) == 0); - free(compare); + /* Test the entries on disk. */ + assertIsReg(archive_entry_pathname(ae), archive_entry_mode(ae) & 0777); + assertFileSize(archive_entry_pathname(ae), i); + assertFileContents(data, datasize, archive_entry_pathname(ae)); free(data); } @@ -268,7 +253,7 @@ DEFINE_TEST(test_write_disk) struct archive_entry *ae; /* Force the umask to something predictable. */ - umask(UMASK); + assertUmask(UMASK); /* A regular file. */ assert((ae = archive_entry_new()) != NULL); diff --git a/lib/libarchive/test/test_write_disk_failures.c b/lib/libarchive/test/test_write_disk_failures.c index 1befbac61d8..f74c947ab36 100644 --- a/lib/libarchive/test/test_write_disk_failures.c +++ b/lib/libarchive/test/test_write_disk_failures.c @@ -42,13 +42,13 @@ DEFINE_TEST(test_write_disk_failures) int fd; /* Force the umask to something predictable. */ - umask(UMASK); + assertUmask(UMASK); /* A directory that we can't write to. */ - assertEqualInt(0, mkdir("dir", 0555)); + assertMakeDir("dir", 0555); /* Can we? */ - fd = open("dir/testfile", O_WRONLY | O_CREAT, 0777); + fd = open("dir/testfile", O_WRONLY | O_CREAT | O_BINARY, 0777); if (fd >= 0) { /* Apparently, we can, so the test below won't work. */ close(fd); diff --git a/lib/libarchive/test/test_write_disk_hardlink.c b/lib/libarchive/test/test_write_disk_hardlink.c index 2ab242093a6..5756602d28e 100644 --- a/lib/libarchive/test/test_write_disk_hardlink.c +++ b/lib/libarchive/test/test_write_disk_hardlink.c @@ -43,16 +43,16 @@ __FBSDID("$FreeBSD$"); */ DEFINE_TEST(test_write_disk_hardlink) { -#if ARCHIVE_VERSION_NUMBER < 1009000 - skipping("archive_write_disk_hardlink tests"); +#if defined(__HAIKU__) + skipping("archive_write_disk_hardlink; hardlinks are not supported on bfs"); #else static const char data[]="abcdefghijklmnopqrstuvwxyz"; struct archive *ad; struct archive_entry *ae; - struct stat st, st2; + int r; /* Force the umask to something predictable. */ - umask(UMASK); + assertUmask(UMASK); /* Write entries to disk. */ assert((ad = archive_write_disk_new()) != NULL); @@ -79,10 +79,12 @@ DEFINE_TEST(test_write_disk_hardlink) archive_entry_set_mode(ae, S_IFREG | 0642); archive_entry_set_size(ae, 0); archive_entry_copy_hardlink(ae, "link1a"); - assertEqualIntA(ad, 0, archive_write_header(ad, ae)); - assertEqualInt(ARCHIVE_WARN, - archive_write_data(ad, data, sizeof(data))); - assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + assertEqualIntA(ad, 0, r = archive_write_header(ad, ae)); + if (r >= ARCHIVE_WARN) { + assertEqualInt(ARCHIVE_WARN, + archive_write_data(ad, data, sizeof(data))); + assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + } archive_entry_free(ae); /* @@ -107,10 +109,12 @@ DEFINE_TEST(test_write_disk_hardlink) archive_entry_set_mode(ae, S_IFREG | 0642); archive_entry_unset_size(ae); archive_entry_copy_hardlink(ae, "link2a"); - assertEqualIntA(ad, 0, archive_write_header(ad, ae)); - assertEqualInt(ARCHIVE_WARN, - archive_write_data(ad, data, sizeof(data))); - assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + assertEqualIntA(ad, 0, r = archive_write_header(ad, ae)); + if (r >= ARCHIVE_WARN) { + assertEqualInt(ARCHIVE_WARN, + archive_write_data(ad, data, sizeof(data))); + assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + } archive_entry_free(ae); /* @@ -134,9 +138,12 @@ DEFINE_TEST(test_write_disk_hardlink) archive_entry_set_mode(ae, S_IFREG | 0755); archive_entry_set_size(ae, sizeof(data)); archive_entry_copy_hardlink(ae, "link3a"); - assertEqualIntA(ad, 0, archive_write_header(ad, ae)); - assertEqualInt(sizeof(data), archive_write_data(ad, data, sizeof(data))); - assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + assertEqualIntA(ad, 0, r = archive_write_header(ad, ae)); + if (r > ARCHIVE_WARN) { + assertEqualInt(sizeof(data), + archive_write_data(ad, data, sizeof(data))); + assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + } archive_entry_free(ae); /* @@ -164,34 +171,26 @@ DEFINE_TEST(test_write_disk_hardlink) archive_entry_set_mode(ae, S_IFREG | 0755); archive_entry_set_size(ae, sizeof(data)); archive_entry_copy_hardlink(ae, "link4a"); - assertEqualIntA(ad, 0, archive_write_header(ad, ae)); - assertEqualInt(sizeof(data), archive_write_data(ad, data, sizeof(data))); - assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + assertEqualIntA(ad, 0, r = archive_write_header(ad, ae)); + if (r > ARCHIVE_FAILED) { + assertEqualInt(sizeof(data), + archive_write_data(ad, data, sizeof(data))); + assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + } archive_entry_free(ae); -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_write_finish(ad); -#else assertEqualInt(0, archive_write_finish(ad)); -#endif /* Test the entries on disk. */ /* Test #1 */ - assert(0 == stat("link1a", &st)); /* If the hardlink was successfully created and the archive * doesn't carry data for it, we consider it to be * non-authoritive for meta data as well. This is consistent * with GNU tar and BSD pax. */ - assertEqualInt(st.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); - assertEqualInt(st.st_size, sizeof(data)); - assertEqualInt(st.st_nlink, 2); - - assert(0 == stat("link1b", &st2)); - assertEqualInt(st.st_mode, st2.st_mode); - assertEqualInt(st.st_size, st2.st_size); - assertEqualInt(st.st_nlink, st2.st_nlink); - assertEqualInt(st.st_ino, st2.st_ino); - assertEqualInt(st.st_dev, st2.st_dev); + assertIsReg("link1a", 0755 & ~UMASK); + assertFileSize("link1a", sizeof(data)); + assertFileNLinks("link1a", 2); + assertIsHardlink("link1a", "link1b"); /* Test #2: Should produce identical results to test #1 */ /* Note that marking a hardlink with size = 0 is treated the @@ -200,42 +199,21 @@ DEFINE_TEST(test_write_disk_hardlink) * relied on size == 0) and partly to match the model used by * common file formats that store a size of zero for * hardlinks. */ - assert(0 == stat("link2a", &st)); - assertEqualInt(st.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); - assertEqualInt(st.st_size, sizeof(data)); - assertEqualInt(st.st_nlink, 2); - - assert(0 == stat("link2b", &st2)); - assertEqualInt(st.st_mode, st2.st_mode); - assertEqualInt(st.st_size, st2.st_size); - assertEqualInt(st.st_nlink, st2.st_nlink); - assertEqualInt(st.st_ino, st2.st_ino); - assertEqualInt(st.st_dev, st2.st_dev); + assertIsReg("link2a", 0755 & ~UMASK); + assertFileSize("link2a", sizeof(data)); + assertFileNLinks("link2a", 2); + assertIsHardlink("link2a", "link2b"); /* Test #3 */ - assert(0 == stat("link3a", &st)); - assertEqualInt(st.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); - assertEqualInt(st.st_size, sizeof(data)); - assertEqualInt(st.st_nlink, 2); - - assert(0 == stat("link3b", &st2)); - assertEqualInt(st2.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); - assertEqualInt(st2.st_size, sizeof(data)); - assertEqualInt(st2.st_nlink, 2); - assertEqualInt(st.st_ino, st2.st_ino); - assertEqualInt(st.st_dev, st2.st_dev); + assertIsReg("link3a", 0755 & ~UMASK); + assertFileSize("link3a", sizeof(data)); + assertFileNLinks("link3a", 2); + assertIsHardlink("link3a", "link3b"); /* Test #4 */ - assert(0 == stat("link4a", &st)); - assertEqualInt(st.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); - assertEqualInt(st.st_size, sizeof(data)); - assertEqualInt(st.st_nlink, 2); - - assert(0 == stat("link4b", &st2)); - assertEqualInt(st2.st_mode & E_MASK, (S_IFREG | 0755) & ~UMASK); - assertEqualInt(st2.st_size, sizeof(data)); - assertEqualInt(st2.st_nlink, 2); - assertEqualInt(st.st_ino, st2.st_ino); - assertEqualInt(st.st_dev, st2.st_dev); + assertIsReg("link4a", 0755 & ~UMASK); + assertFileNLinks("link4a", 2); + assertFileSize("link4a", sizeof(data)); + assertIsHardlink("link4a", "link4b"); #endif } diff --git a/lib/libarchive/test/test_write_disk_perms.c b/lib/libarchive/test/test_write_disk_perms.c index 3d9be27e596..f53ce1946bd 100644 --- a/lib/libarchive/test/test_write_disk_perms.c +++ b/lib/libarchive/test/test_write_disk_perms.c @@ -60,7 +60,7 @@ searchgid(void) _searched = 1; /* Create a file on disk in the current default dir. */ - fd = open("test_gid", O_CREAT, 0664); + fd = open("test_gid", O_CREAT | O_BINARY, 0664); failure("Couldn't create a file for gid testing."); assert(fd > 0); @@ -132,6 +132,8 @@ DEFINE_TEST(test_write_disk_perms) struct archive_entry *ae; struct stat st; + assertUmask(UMASK); + /* * Set ownership of the current directory to the group of this * process. Otherwise, the SGID tests below fail if the @@ -182,7 +184,7 @@ DEFINE_TEST(test_write_disk_perms) /* Overwrite an existing dir. */ /* For dir, the first perms should get left. */ - assert(mkdir("dir_overwrite_0744", 0744) == 0); + assertMakeDir("dir_overwrite_0744", 0744); /* Check original perms. */ assert(0 == stat("dir_overwrite_0744", &st)); failure("dir_overwrite_0744: st.st_mode=%o", st.st_mode); diff --git a/lib/libarchive/test/test_write_disk_secure.c b/lib/libarchive/test/test_write_disk_secure.c index d41748907b8..74506f1bccb 100644 --- a/lib/libarchive/test/test_write_disk_secure.c +++ b/lib/libarchive/test/test_write_disk_secure.c @@ -36,13 +36,13 @@ DEFINE_TEST(test_write_disk_secure) { #if ARCHIVE_VERSION_NUMBER < 1009000 skipping("archive_write_disk interface"); -#else +#elif !defined(_WIN32) || defined(__CYGWIN__) struct archive *a; struct archive_entry *ae; struct stat st; /* Start with a known umask. */ - umask(UMASK); + assertUmask(UMASK); /* Create an archive_write_disk object. */ assert((a = archive_write_disk_new()) != NULL); @@ -55,7 +55,6 @@ DEFINE_TEST(test_write_disk_secure) archive_entry_free(ae); assert(0 == archive_write_finish_entry(a)); -#if !defined(_WIN32) || defined(__CYGWIN__) /* Write a symlink to the dir above. */ assert((ae = archive_entry_new()) != NULL); archive_entry_copy_pathname(ae, "link_to_dir"); @@ -150,7 +149,6 @@ DEFINE_TEST(test_write_disk_secure) assertEqualInt(0, lstat("link_to_dir4", &st)); assert(S_ISDIR(st.st_mode)); archive_entry_free(ae); -#endif /* * As above, but a link to a non-dir, so the link should get replaced. @@ -180,14 +178,8 @@ DEFINE_TEST(test_write_disk_secure) assert(S_ISDIR(st.st_mode)); archive_entry_free(ae); - -#if ARCHIVE_VERSION_NUMBER < 2000000 - archive_write_finish(a); -#else assert(0 == archive_write_finish(a)); -#endif -#if !defined(_WIN32) || defined(__CYGWIN__) /* Test the entries on disk. */ assert(0 == lstat("dir", &st)); failure("dir: st.st_mode=%o", st.st_mode); @@ -220,5 +212,4 @@ DEFINE_TEST(test_write_disk_secure) failure("link_to_dir2/filec: st.st_mode=%o", st.st_mode); assert((st.st_mode & 07777) == 0755); #endif -#endif } diff --git a/lib/libarchive/test/test_write_disk_sparse.c b/lib/libarchive/test/test_write_disk_sparse.c index c9c00d3d1e6..b613f56c026 100644 --- a/lib/libarchive/test/test_write_disk_sparse.c +++ b/lib/libarchive/test/test_write_disk_sparse.c @@ -40,7 +40,7 @@ verify_write_data(struct archive *a, int sparse) size_t buff_size = 64 * 1024; char *buff, *p; const char *msg = sparse ? "sparse" : "non-sparse"; - int fd; + FILE *f; buff = malloc(buff_size); assert(buff != NULL); @@ -78,12 +78,12 @@ verify_write_data(struct archive *a, int sparse) /* Test the entry on disk. */ assert(0 == stat(archive_entry_pathname(ae), &st)); assertEqualInt(st.st_size, 8 * buff_size); - fd = open(archive_entry_pathname(ae), O_RDONLY); - if (!assert(fd >= 0)) + f = fopen(archive_entry_pathname(ae), "rb"); + if (!assert(f != NULL)) return; /* Check first block. */ - assertEqualInt(buff_size, read(fd, buff, buff_size)); + assertEqualInt(buff_size, fread(buff, 1, buff_size, f)); failure("%s", msg); assertEqualMem(buff, data, sizeof(data)); for (p = buff + sizeof(data); p < buff + buff_size; ++p) { @@ -93,7 +93,7 @@ verify_write_data(struct archive *a, int sparse) } /* Check second block. */ - assertEqualInt(buff_size, read(fd, buff, buff_size)); + assertEqualInt(buff_size, fread(buff, 1, buff_size, f)); for (p = buff; p < buff + buff_size; ++p) { failure("offset: %d, %s", (int)(p - buff), msg); if (p == buff + buff_size / 2 - 3) { @@ -104,7 +104,7 @@ verify_write_data(struct archive *a, int sparse) } /* Check third block. */ - assertEqualInt(buff_size, read(fd, buff, buff_size)); + assertEqualInt(buff_size, fread(buff, 1, buff_size, f)); for (p = buff; p < buff + buff_size - sizeof(data); ++p) { failure("offset: %d, %s", (int)(p - buff), msg); if (!assertEqualInt(0, *p)) @@ -115,7 +115,7 @@ verify_write_data(struct archive *a, int sparse) /* XXX more XXX */ - assertEqualInt(0, close(fd)); + assertEqualInt(0, fclose(f)); archive_entry_free(ae); free(buff); } @@ -132,7 +132,7 @@ verify_write_data_block(struct archive *a, int sparse) size_t buff_size = 64 * 1024; char *buff, *p; const char *msg = sparse ? "sparse" : "non-sparse"; - int fd; + FILE *f; buff = malloc(buff_size); assert(buff != NULL); @@ -174,12 +174,12 @@ verify_write_data_block(struct archive *a, int sparse) /* Test the entry on disk. */ assert(0 == stat(archive_entry_pathname(ae), &st)); assertEqualInt(st.st_size, 8 * buff_size); - fd = open(archive_entry_pathname(ae), O_RDONLY); - if (!assert(fd >= 0)) + f = fopen(archive_entry_pathname(ae), "rb"); + if (!assert(f != NULL)) return; /* Check 100-byte gap at beginning */ - assertEqualInt(100, read(fd, buff, 100)); + assertEqualInt(100, fread(buff, 1, 100, f)); failure("%s", msg); for (p = buff; p < buff + 100; ++p) { failure("offset: %d, %s", (int)(p - buff), msg); @@ -188,7 +188,7 @@ verify_write_data_block(struct archive *a, int sparse) } /* Check first block. */ - assertEqualInt(buff_size, read(fd, buff, buff_size)); + assertEqualInt(buff_size, fread(buff, 1, buff_size, f)); failure("%s", msg); assertEqualMem(buff, data, sizeof(data)); for (p = buff + sizeof(data); p < buff + buff_size; ++p) { @@ -198,7 +198,7 @@ verify_write_data_block(struct archive *a, int sparse) } /* Check 100-byte gap */ - assertEqualInt(100, read(fd, buff, 100)); + assertEqualInt(100, fread(buff, 1, 100, f)); failure("%s", msg); for (p = buff; p < buff + 100; ++p) { failure("offset: %d, %s", (int)(p - buff), msg); @@ -207,7 +207,7 @@ verify_write_data_block(struct archive *a, int sparse) } /* Check second block. */ - assertEqualInt(buff_size, read(fd, buff, buff_size)); + assertEqualInt(buff_size, fread(buff, 1, buff_size, f)); for (p = buff; p < buff + buff_size; ++p) { failure("offset: %d, %s", (int)(p - buff), msg); if (p == buff + buff_size / 2 - 3) { @@ -218,7 +218,7 @@ verify_write_data_block(struct archive *a, int sparse) } /* Check 100-byte gap */ - assertEqualInt(100, read(fd, buff, 100)); + assertEqualInt(100, fread(buff, 1, 100, f)); failure("%s", msg); for (p = buff; p < buff + 100; ++p) { failure("offset: %d, %s", (int)(p - buff), msg); @@ -227,7 +227,7 @@ verify_write_data_block(struct archive *a, int sparse) } /* Check third block. */ - assertEqualInt(buff_size, read(fd, buff, buff_size)); + assertEqualInt(buff_size, fread(buff, 1, buff_size, f)); for (p = buff; p < buff + buff_size - sizeof(data); ++p) { failure("offset: %d, %s", (int)(p - buff), msg); if (!assertEqualInt(0, *p)) @@ -237,7 +237,7 @@ verify_write_data_block(struct archive *a, int sparse) assertEqualMem(buff + buff_size - sizeof(data), data, sizeof(data)); /* Check another block size beyond last we wrote. */ - assertEqualInt(buff_size, read(fd, buff, buff_size)); + assertEqualInt(buff_size, fread(buff, 1, buff_size, f)); failure("%s", msg); for (p = buff; p < buff + buff_size; ++p) { failure("offset: %d, %s", (int)(p - buff), msg); @@ -248,7 +248,7 @@ verify_write_data_block(struct archive *a, int sparse) /* XXX more XXX */ - assertEqualInt(0, close(fd)); + assertEqualInt(0, fclose(f)); free(buff); archive_entry_free(ae); } diff --git a/lib/libarchive/test/test_write_disk_symlink.c b/lib/libarchive/test/test_write_disk_symlink.c new file mode 100644 index 00000000000..861f3bf6704 --- /dev/null +++ b/lib/libarchive/test/test_write_disk_symlink.c @@ -0,0 +1,117 @@ +/*- + * Copyright (c) 2003-2007 Tim Kientzle + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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 "test.h" +__FBSDID("$FreeBSD$"); + +/* + * Exercise symlink recreation. + */ +DEFINE_TEST(test_write_disk_symlink) +{ + static const char data[]="abcdefghijklmnopqrstuvwxyz"; + struct archive *ad; + struct archive_entry *ae; + int r; + + if (!canSymlink()) { + skipping("Symlinks not supported"); + return; + } + + /* Write entries to disk. */ + assert((ad = archive_write_disk_new()) != NULL); + + /* + * First, create a regular file then a symlink to that file. + */ + + /* Regular file: link1a */ + assert((ae = archive_entry_new()) != NULL); + archive_entry_copy_pathname(ae, "link1a"); + archive_entry_set_mode(ae, AE_IFREG | 0755); + archive_entry_set_size(ae, sizeof(data)); + assertEqualIntA(ad, 0, archive_write_header(ad, ae)); + assertEqualInt(sizeof(data), + archive_write_data(ad, data, sizeof(data))); + assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + archive_entry_free(ae); + + /* Symbolic Link: link1b -> link1a */ + assert((ae = archive_entry_new()) != NULL); + archive_entry_copy_pathname(ae, "link1b"); + archive_entry_set_mode(ae, AE_IFLNK | 0642); + archive_entry_set_size(ae, 0); + archive_entry_copy_symlink(ae, "link1a"); + assertEqualIntA(ad, 0, r = archive_write_header(ad, ae)); + if (r >= ARCHIVE_WARN) + assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + archive_entry_free(ae); + + /* + * We should be able to do this in the other order as well, + * of course. + */ + + /* Symbolic link: link2b -> link2a */ + assert((ae = archive_entry_new()) != NULL); + archive_entry_copy_pathname(ae, "link2b"); + archive_entry_set_mode(ae, AE_IFLNK | 0642); + archive_entry_unset_size(ae); + archive_entry_copy_symlink(ae, "link2a"); + assertEqualIntA(ad, 0, r = archive_write_header(ad, ae)); + if (r >= ARCHIVE_WARN) { + assertEqualInt(ARCHIVE_WARN, + archive_write_data(ad, data, sizeof(data))); + assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + } + archive_entry_free(ae); + + /* File: link2a */ + assert((ae = archive_entry_new()) != NULL); + archive_entry_copy_pathname(ae, "link2a"); + archive_entry_set_mode(ae, AE_IFREG | 0755); + archive_entry_set_size(ae, sizeof(data)); + assertEqualIntA(ad, 0, archive_write_header(ad, ae)); + assertEqualInt(sizeof(data), + archive_write_data(ad, data, sizeof(data))); + assertEqualIntA(ad, 0, archive_write_finish_entry(ad)); + archive_entry_free(ae); + + assertEqualInt(ARCHIVE_OK, archive_write_finish(ad)); + + /* Test the entries on disk. */ + + /* Test #1 */ + assertIsReg("link1a", -1); + assertFileSize("link1a", sizeof(data)); + assertFileNLinks("link1a", 1); + assertIsSymlink("link1b", "link1a"); + + /* Test #2: Should produce identical results to test #1 */ + assertIsReg("link2a", -1); + assertFileSize("link2a", sizeof(data)); + assertFileNLinks("link2a", 1); + assertIsSymlink("link2b", "link2a"); +} diff --git a/lib/libarchive/test/test_write_disk_times.c b/lib/libarchive/test/test_write_disk_times.c index 2891e3612af..13841cfddaf 100644 --- a/lib/libarchive/test/test_write_disk_times.c +++ b/lib/libarchive/test/test_write_disk_times.c @@ -35,8 +35,6 @@ DEFINE_TEST(test_write_disk_times) { struct archive *a; struct archive_entry *ae; - struct stat st; - time_t now = time(NULL); /* Create an archive_write_disk object. */ assert((a = archive_write_disk_new()) != NULL); @@ -55,9 +53,8 @@ DEFINE_TEST(test_write_disk_times) assertEqualInt(ARCHIVE_OK, archive_write_finish_entry(a)); archive_entry_free(ae); /* Verify */ - assertEqualInt(0, stat("file1", &st)); - assertEqualInt(123456, st.st_atime); - assertEqualInt(234567, st.st_mtime); + assertFileAtime("file1", 123456, 0); + assertFileMtime("file1", 234567, 0); /* * mtime specified, but not atime @@ -69,11 +66,8 @@ DEFINE_TEST(test_write_disk_times) assertEqualInt(ARCHIVE_OK, archive_write_header(a, ae)); assertEqualInt(ARCHIVE_OK, archive_write_finish_entry(a)); archive_entry_free(ae); - /* Verify: Current atime and mtime as specified. */ - assertEqualInt(0, stat("file2", &st)); - assertEqualInt(234567, st.st_mtime); - failure("now: %ld st.st_atime: %ld", (long)now, (long)st.st_atime); - assert(st.st_atime >= now && st.st_atime < now + 3); + assertFileMtime("file2", 234567, 0); + assertFileAtimeRecent("file2"); /* * atime specified, but not mtime @@ -86,10 +80,8 @@ DEFINE_TEST(test_write_disk_times) assertEqualInt(ARCHIVE_OK, archive_write_finish_entry(a)); archive_entry_free(ae); /* Verify: Current mtime and atime as specified. */ - assertEqualInt(0, stat("file3", &st)); - assertEqualInt(345678, st.st_atime); - failure("now: %ld st.st_mtime: %ld", (long)now, (long)st.st_mtime); - assert(st.st_mtime >= now && st.st_mtime < now + 3); + assertFileAtime("file3", 345678, 0); + assertFileMtimeRecent("file3"); /* * Neither atime nor mtime specified. @@ -101,11 +93,8 @@ DEFINE_TEST(test_write_disk_times) assertEqualInt(ARCHIVE_OK, archive_write_finish_entry(a)); archive_entry_free(ae); /* Verify: Current mtime and atime. */ - assertEqualInt(0, stat("file4", &st)); - failure("now: %ld st.st_atime: %ld", (long)now, (long)st.st_atime); - assert(st.st_atime >= now && st.st_atime < now + 3); - failure("now: %ld st.st_mtime: %ld", (long)now, (long)st.st_mtime); - assert(st.st_mtime >= now && st.st_mtime < now + 3); + assertFileAtimeRecent("file4"); + assertFileMtimeRecent("file4"); #if defined(__FreeBSD__) /* @@ -120,12 +109,8 @@ DEFINE_TEST(test_write_disk_times) assertEqualInt(ARCHIVE_OK, archive_write_finish_entry(a)); archive_entry_free(ae); /* Verify */ - /* FreeBSD can only store usec resolution, hence rounding here. */ - assertEqualInt(0, stat("file10", &st)); - assertEqualInt(1234567, st.st_atime); - assertEqualInt(23000, st.st_atimespec.tv_nsec); - assertEqualInt(2345678, st.st_mtime); - assertEqualInt(4000, st.st_mtimespec.tv_nsec); + assertFileMtime("file10", 2345678, 4567); + assertFileAtime("file10", 1234567, 23456); /* * Birthtime, mtime and atime on FreeBSD @@ -141,14 +126,9 @@ DEFINE_TEST(test_write_disk_times) assertEqualInt(ARCHIVE_OK, archive_write_finish_entry(a)); archive_entry_free(ae); /* Verify */ - /* FreeBSD can only store usec resolution, hence rounding here. */ - assertEqualInt(0, stat("file11", &st)); - assertEqualInt(1234567, st.st_atime); - assertEqualInt(23000, st.st_atimespec.tv_nsec); - assertEqualInt(3456789, st.st_birthtime); - assertEqualInt(12000, st.st_birthtimespec.tv_nsec); - assertEqualInt(12345678, st.st_mtime); - assertEqualInt(4000, st.st_mtimespec.tv_nsec); + assertFileAtime("file11", 1234567, 23456); + assertFileBirthtime("file11", 3456789, 12345); + assertFileMtime("file11", 12345678, 4567); /* * Birthtime only on FreeBSD. @@ -161,14 +141,9 @@ DEFINE_TEST(test_write_disk_times) assertEqualInt(ARCHIVE_OK, archive_write_finish_entry(a)); archive_entry_free(ae); /* Verify */ - /* FreeBSD can only store usec resolution, hence rounding here. */ - assertEqualInt(0, stat("file12", &st)); - assertEqualInt(3456789, st.st_birthtime); - assertEqualInt(12000, st.st_birthtimespec.tv_nsec); - failure("now: %ld st.st_atime: %ld", (long)now, (long)st.st_atime); - assert(st.st_atime >= now && st.st_atime < now + 3); - failure("now: %ld st.st_mtime: %ld", (long)now, (long)st.st_mtime); - assert(st.st_mtime >= now && st.st_mtime < now + 3); + assertFileAtimeRecent("file12"); + assertFileBirthtime("file12", 3456789, 12345); + assertFileMtimeRecent("file12"); /* * mtime only on FreeBSD. @@ -181,14 +156,9 @@ DEFINE_TEST(test_write_disk_times) assertEqualInt(ARCHIVE_OK, archive_write_finish_entry(a)); archive_entry_free(ae); /* Verify */ - /* FreeBSD can only store usec resolution, hence rounding here. */ - assertEqualInt(0, stat("file13", &st)); - assertEqualInt(4567890, st.st_birthtime); - assertEqualInt(23000, st.st_birthtimespec.tv_nsec); - assertEqualInt(4567890, st.st_mtime); - assertEqualInt(23000, st.st_mtimespec.tv_nsec); - failure("now: %ld st.st_atime: %ld", (long)now, (long)st.st_atime); - assert(st.st_atime >= now && st.st_atime < now + 3); + assertFileAtimeRecent("file13"); + assertFileBirthtime("file13", 4567890, 23456); + assertFileMtime("file13", 4567890, 23456); #else skipping("Platform-specific time restore tests"); #endif diff --git a/lib/libarchive/test/test_write_format_cpio_empty.c b/lib/libarchive/test/test_write_format_cpio_empty.c index 81f17a415ac..fed26ec0402 100644 --- a/lib/libarchive/test/test_write_format_cpio_empty.c +++ b/lib/libarchive/test/test_write_format_cpio_empty.c @@ -71,5 +71,5 @@ DEFINE_TEST(test_write_format_cpio_empty) failure("Empty cpio archive should be exactly 87 bytes, was %d.", used); assert(used == 87); failure("Empty cpio archive is incorrectly formatted."); - assert(memcmp(buff, ref, 87) == 0); + assertEqualMem(buff, ref, 87); } diff --git a/lib/libarchive/test/test_write_format_cpio_newc.c b/lib/libarchive/test/test_write_format_cpio_newc.c index 512df742291..447d111420d 100644 --- a/lib/libarchive/test/test_write_format_cpio_newc.c +++ b/lib/libarchive/test/test_write_format_cpio_newc.c @@ -52,7 +52,7 @@ DEFINE_TEST(test_write_format_cpio_newc) { struct archive *a; struct archive_entry *entry; - char *buff, *e; + char *buff, *e, *file; size_t buffsize = 100000; size_t used; @@ -99,7 +99,8 @@ DEFINE_TEST(test_write_format_cpio_newc) assert((entry = archive_entry_new()) != NULL); archive_entry_set_mtime(entry, 3, 30); archive_entry_set_pathname(entry, "lnk"); - archive_entry_set_mode(entry, S_IFLNK | 0664); + archive_entry_set_mode(entry, 0664); + archive_entry_set_filetype(entry, AE_IFLNK); archive_entry_set_size(entry, 0); archive_entry_set_uid(entry, 83); archive_entry_set_gid(entry, 93); @@ -123,9 +124,10 @@ DEFINE_TEST(test_write_format_cpio_newc) e = buff; /* First entry is "file" */ + file = e; assert(is_hex(e, 110)); /* Entire header is hex digits. */ assertEqualMem(e + 0, "070701", 6); /* Magic */ - assertEqualMem(e + 6, "00000059", 8); /* ino */ + assert(memcmp(e + 6, "00000000", 8) != 0); /* ino != 0 */ assertEqualMem(e + 14, "000081b4", 8); /* Mode */ assertEqualMem(e + 22, "00000050", 8); /* uid */ assertEqualMem(e + 30, "0000005a", 8); /* gid */ @@ -166,7 +168,8 @@ DEFINE_TEST(test_write_format_cpio_newc) /* Third entry is "lnk" */ assert(is_hex(e, 110)); /* Entire header is hex digits. */ assertEqualMem(e + 0, "070701", 6); /* Magic */ - assertEqualMem(e + 6, "00000058", 8); /* ino */ + assert(memcmp(e + 6, file + 6, 8) != 0); /* ino != file ino */ + assert(memcmp(e + 6, "00000000", 8) != 0); /* ino != 0 */ assertEqualMem(e + 14, "0000a1b4", 8); /* Mode */ assertEqualMem(e + 22, "00000053", 8); /* uid */ assertEqualMem(e + 30, "0000005d", 8); /* gid */ diff --git a/lib/libarchive/test/test_write_format_cpio_odc.c b/lib/libarchive/test/test_write_format_cpio_odc.c index 73cc3e6218c..309e003e18b 100644 --- a/lib/libarchive/test/test_write_format_cpio_odc.c +++ b/lib/libarchive/test/test_write_format_cpio_odc.c @@ -46,7 +46,7 @@ DEFINE_TEST(test_write_format_cpio_odc) { struct archive *a; struct archive_entry *entry; - char *buff, *e; + char *buff, *e, *file; size_t buffsize = 100000; size_t used; @@ -109,7 +109,8 @@ DEFINE_TEST(test_write_format_cpio_odc) assert((entry = archive_entry_new()) != NULL); archive_entry_set_mtime(entry, 3, 30); archive_entry_set_pathname(entry, "symlink"); - archive_entry_set_mode(entry, S_IFLNK | 0664); + archive_entry_set_mode(entry, 0664); + archive_entry_set_filetype(entry, AE_IFLNK); archive_entry_set_symlink(entry,"file"); archive_entry_set_size(entry, 0); archive_entry_set_uid(entry, 88); @@ -130,14 +131,29 @@ DEFINE_TEST(test_write_format_cpio_odc) /* * Verify the archive format. + * + * Notes on the ino validation: cpio does not actually require + * that the ino values written to the archive match those read + * from disk. It really requires that: + * * matching non-zero ino values be written as matching + * non-zero values + * * non-matching non-zero ino values be written as non-matching + * non-zero values + * Libarchive further ensures that zero ino values get written + * as zeroes. This allows the cpio writer to generate + * synthetic ino values for the archive that may be different + * than those on disk in order to avoid problems due to truncation. + * This is especially needed for odc (POSIX format) that + * only supports 18-bit ino values. */ e = buff; /* "file" */ + file = e; /* Remember where this starts... */ assert(is_octal(e, 76)); /* Entire header is octal digits. */ assertEqualMem(e + 0, "070707", 6); /* Magic */ assertEqualMem(e + 6, "000014", 6); /* dev */ - assertEqualMem(e + 12, "000131", 6); /* ino */ + assert(memcmp(e + 12, "000000", 6) != 0); /* ino must be != 0 */ assertEqualMem(e + 18, "100664", 6); /* Mode */ assertEqualMem(e + 24, "000120", 6); /* uid */ assertEqualMem(e + 30, "000132", 6); /* gid */ @@ -154,7 +170,7 @@ DEFINE_TEST(test_write_format_cpio_odc) assert(is_octal(e, 76)); /* Entire header is octal digits. */ assertEqualMem(e + 0, "070707", 6); /* Magic */ assertEqualMem(e + 6, "000014", 6); /* dev */ - assertEqualMem(e + 12, "000131", 6); /* ino */ + assertEqualMem(e + 12, file + 12, 6); /* ino must match above */ assertEqualMem(e + 18, "100664", 6); /* Mode */ assertEqualMem(e + 24, "000120", 6); /* uid */ assertEqualMem(e + 30, "000132", 6); /* gid */ @@ -187,7 +203,8 @@ DEFINE_TEST(test_write_format_cpio_odc) assert(is_octal(e, 76)); /* Entire header is octal digits. */ assertEqualMem(e + 0, "070707", 6); /* Magic */ assertEqualMem(e + 6, "000014", 6); /* dev */ - assertEqualMem(e + 12, "000132", 6); /* ino */ + assert(memcmp(e + 12, file + 12, 6) != 0); /* ino must != file ino */ + assert(memcmp(e + 12, "000000", 6) != 0); /* ino must != 0 */ assertEqualMem(e + 18, "120664", 6); /* Mode */ assertEqualMem(e + 24, "000130", 6); /* uid */ assertEqualMem(e + 30, "000142", 6); /* gid */ diff --git a/lib/libarchive/test/test_write_format_tar_ustar.c b/lib/libarchive/test/test_write_format_tar_ustar.c index 3adacb4e90d..f66fd7ad82b 100644 --- a/lib/libarchive/test/test_write_format_tar_ustar.c +++ b/lib/libarchive/test/test_write_format_tar_ustar.c @@ -133,7 +133,8 @@ DEFINE_TEST(test_write_format_tar_ustar) assert((entry = archive_entry_new()) != NULL); archive_entry_set_mtime(entry, 3, 30); archive_entry_set_pathname(entry, "symlink"); - archive_entry_set_mode(entry, S_IFLNK | 0664); + archive_entry_set_mode(entry, 0664); + archive_entry_set_filetype(entry, AE_IFLNK); archive_entry_set_symlink(entry,"file"); archive_entry_set_size(entry, 0); archive_entry_set_uid(entry, 88); diff --git a/lib/libarchive/test/test_write_format_zip.c b/lib/libarchive/test/test_write_format_zip.c new file mode 100644 index 00000000000..f4c51f34ba9 --- /dev/null +++ b/lib/libarchive/test/test_write_format_zip.c @@ -0,0 +1,180 @@ +/*- + * Copyright (c) 2003-2008 Tim Kientzle + * Copyright (c) 2008 Anselm Strauss + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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. + */ + +/* + * Development supported by Google Summer of Code 2008. + */ + +/* TODO: reader does not yet restore permissions. */ + +#include "test.h" +__FBSDID("$FreeBSD$"); + +DEFINE_TEST(test_write_format_zip) +{ + char filedata[64]; + struct archive_entry *ae; + struct archive *a; + size_t used; + size_t buffsize = 1000000; + char *buff; + const char *compression_type; + + buff = malloc(buffsize); + + /* Create a new archive in memory. */ + assert((a = archive_write_new()) != NULL); + assertEqualIntA(a, ARCHIVE_OK, archive_write_set_format_zip(a)); +#ifdef HAVE_ZLIB_H + compression_type = "zip:compression=deflate"; +#else + compression_type = "zip:compression=store"; +#endif + assertEqualIntA(a, ARCHIVE_OK, + archive_write_set_format_options(a, compression_type)); + assertEqualIntA(a, ARCHIVE_OK, archive_write_set_compression_none(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_write_open_memory(a, buff, buffsize, &used)); + + /* + * Write a file to it. + */ + assert((ae = archive_entry_new()) != NULL); + archive_entry_set_mtime(ae, 1, 10); + assertEqualInt(1, archive_entry_mtime(ae)); + assertEqualInt(10, archive_entry_mtime_nsec(ae)); + archive_entry_copy_pathname(ae, "file"); + assertEqualString("file", archive_entry_pathname(ae)); + archive_entry_set_mode(ae, S_IFREG | 0755); + assertEqualInt((S_IFREG | 0755), archive_entry_mode(ae)); + archive_entry_set_size(ae, 8); + + assertEqualInt(0, archive_write_header(a, ae)); + archive_entry_free(ae); + assertEqualInt(8, archive_write_data(a, "12345678", 9)); + assertEqualInt(0, archive_write_data(a, "1", 1)); + + /* + * Write another file to it. + */ + assert((ae = archive_entry_new()) != NULL); + archive_entry_set_mtime(ae, 1, 10); + assertEqualInt(1, archive_entry_mtime(ae)); + assertEqualInt(10, archive_entry_mtime_nsec(ae)); + archive_entry_copy_pathname(ae, "file2"); + assertEqualString("file2", archive_entry_pathname(ae)); + archive_entry_set_mode(ae, S_IFREG | 0755); + assertEqualInt((S_IFREG | 0755), archive_entry_mode(ae)); + archive_entry_set_size(ae, 4); + + assertEqualInt(ARCHIVE_OK, archive_write_header(a, ae)); + archive_entry_free(ae); + assertEqualInt(4, archive_write_data(a, "1234", 5)); + + /* + * Write a directory to it. + */ + assert((ae = archive_entry_new()) != NULL); + archive_entry_set_mtime(ae, 11, 110); + archive_entry_copy_pathname(ae, "dir"); + archive_entry_set_mode(ae, S_IFDIR | 0755); + archive_entry_set_size(ae, 512); + + assertEqualIntA(a, ARCHIVE_OK, archive_write_header(a, ae)); + failure("size should be zero so that applications know not to write"); + assertEqualInt(0, archive_entry_size(ae)); + archive_entry_free(ae); + assertEqualIntA(a, 0, archive_write_data(a, "12345678", 9)); + + /* Close out the archive. */ + assertEqualInt(ARCHIVE_OK, archive_write_close(a)); + assertEqualInt(ARCHIVE_OK, archive_write_finish(a)); + + /* + * Now, read the data back. + */ + ae = NULL; + assert((a = archive_read_new()) != NULL); + assertEqualIntA(a, ARCHIVE_OK, archive_read_support_format_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_support_compression_all(a)); + assertEqualIntA(a, ARCHIVE_OK, + archive_read_open_memory(a, buff, used)); + + /* + * Read and verify first file. + */ + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualInt(1, archive_entry_mtime(ae)); + /* Zip doesn't store high-resolution mtime. */ + assertEqualInt(0, archive_entry_mtime_nsec(ae)); + assertEqualInt(0, archive_entry_atime(ae)); + assertEqualInt(0, archive_entry_ctime(ae)); + assertEqualString("file", archive_entry_pathname(ae)); + //assertEqualInt((S_IFREG | 0755), archive_entry_mode(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualIntA(a, 8, + archive_read_data(a, filedata, sizeof(filedata))); + assertEqualMem(filedata, "12345678", 8); + + + /* + * Read the second file back. + */ + if (!assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae))){ + free(buff); + return; + } + assertEqualInt(1, archive_entry_mtime(ae)); + assertEqualInt(0, archive_entry_mtime_nsec(ae)); + assertEqualInt(0, archive_entry_atime(ae)); + assertEqualInt(0, archive_entry_ctime(ae)); + assertEqualString("file2", archive_entry_pathname(ae)); + //assert((S_IFREG | 0755) == archive_entry_mode(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualIntA(a, 4, + archive_read_data(a, filedata, sizeof(filedata))); + assertEqualMem(filedata, "1234", 4); + + /* + * Read the dir entry back. + */ + assertEqualIntA(a, ARCHIVE_OK, archive_read_next_header(a, &ae)); + assertEqualInt(11, archive_entry_mtime(ae)); + assertEqualInt(0, archive_entry_mtime_nsec(ae)); + assertEqualInt(0, archive_entry_atime(ae)); + assertEqualInt(0, archive_entry_ctime(ae)); + assertEqualString("dir/", archive_entry_pathname(ae)); + //assertEqualInt((S_IFDIR | 0755), archive_entry_mode(ae)); + assertEqualInt(0, archive_entry_size(ae)); + assertEqualIntA(a, 0, archive_read_data(a, filedata, 10)); + + /* Verify the end of the archive. */ + assertEqualIntA(a, ARCHIVE_EOF, archive_read_next_header(a, &ae)); + assertEqualInt(ARCHIVE_OK, archive_read_close(a)); + assertEqualInt(ARCHIVE_OK, archive_read_finish(a)); + free(buff); +} diff --git a/lib/libarchive/test/test_write_format_zip_empty.c b/lib/libarchive/test/test_write_format_zip_empty.c new file mode 100644 index 00000000000..ef90b8d9655 --- /dev/null +++ b/lib/libarchive/test/test_write_format_zip_empty.c @@ -0,0 +1,56 @@ +/*- + * Copyright (c) 2008 Anselm Strauss + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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. + */ + +/* + * Development supported by Google Summer of Code 2008. + */ + +#include "test.h" +__FBSDID("$FreeBSD$"); + +DEFINE_TEST(test_write_format_zip_empty) +{ + struct archive *a; + char buff[256]; + size_t used; + + /* Zip format: Create a new archive in memory. */ + assert((a = archive_write_new()) != NULL); + assertA(0 == archive_write_set_format_zip(a)); + assertA(0 == archive_write_set_compression_none(a)); + assertA(0 == archive_write_set_bytes_per_block(a, 1)); + assertA(0 == archive_write_set_bytes_in_last_block(a, 1)); + assertA(0 == archive_write_open_memory(a, buff, sizeof(buff), &used)); + + /* Close out the archive without writing anything. */ + assertA(0 == archive_write_close(a)); + assertA(0 == archive_write_finish(a)); + + /* Verify the correct format for an empy Zip archive. */ + assertEqualInt(used, 22); + assertEqualMem(buff, + "PK\005\006\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", + 22); +} diff --git a/lib/libarchive/test/test_write_format_zip_no_compression.c b/lib/libarchive/test/test_write_format_zip_no_compression.c new file mode 100644 index 00000000000..63e76b67038 --- /dev/null +++ b/lib/libarchive/test/test_write_format_zip_no_compression.c @@ -0,0 +1,304 @@ +/*- + * Copyright (c) 2008 Anselm Strauss + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR(S) 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. + */ + +/* + * Development supported by Google Summer of Code 2008. + */ + +#include "test.h" +__FBSDID("$FreeBSD$"); + +static unsigned long +bitcrc32(unsigned long c, void *_p, size_t s) +{ + /* This is a drop-in replacement for crc32() from zlib. + * Libarchive should be able to correctly generate + * uncompressed zip archives (including correct CRCs) even + * when zlib is unavailable, and this function helps us verify + * that. Yes, this is very, very slow and unsuitable for + * production use, but it's correct, compact, and works well + * enough for this particular usage. Libarchive internally + * uses a much more efficient implementation. */ + const unsigned char *p = _p; + int bitctr; + + if (p == NULL) + return (0); + + for (; s > 0; --s) { + c ^= *p++; + for (bitctr = 8; bitctr > 0; --bitctr) { + if (c & 1) c = (c >> 1); + else c = (c >> 1) ^ 0xedb88320; + c ^= 0x80000000; + } + } + return (c); +} + +/* Quick and dirty: Read 2-byte and 4-byte integers from Zip file. */ +static int i2(const char *p) { return ((p[0] & 0xff) | ((p[1] & 0xff) << 8)); } +static int i4(const char *p) { return (i2(p) | (i2(p + 2) << 16)); } + +DEFINE_TEST(test_write_format_zip_no_compression) +{ + /* Buffer data */ + struct archive *a; + struct archive_entry *entry; + char buff[100000]; + const char *buffend; + /* p is the pointer to walk over the central directory, + * q walks over the local headers, the data and the data descriptors. */ + const char *p, *q; + size_t used; + + /* File data */ + char file_name[] = "file"; + char file_data1[] = {'1', '2', '3', '4', '5'}; + char file_data2[] = {'6', '7', '8', '9', '0'}; + int file_perm = 00644; + short file_uid = 10; + short file_gid = 20; + + /* Folder data */ + char folder_name[] = "folder/"; + int folder_perm = 00755; + short folder_uid = 30; + short folder_gid = 40; + + /* Time data */ + time_t t = time(NULL); + struct tm *tm = localtime(&t); + + /* Misc variables */ + unsigned long crc; + + /* Create new ZIP archive in memory without padding. */ + assert((a = archive_write_new()) != NULL); + assertA(0 == archive_write_set_format_zip(a)); + assertA(0 == archive_write_set_format_options(a, "zip:compression=store")); + assertA(0 == archive_write_set_compression_none(a)); + assertA(0 == archive_write_set_bytes_per_block(a, 1)); + assertA(0 == archive_write_set_bytes_in_last_block(a, 1)); + assertA(0 == archive_write_open_memory(a, buff, sizeof(buff), &used)); + + /* Write entries. */ + + /* Regular file */ + assert((entry = archive_entry_new()) != NULL); + archive_entry_set_pathname(entry, file_name); + archive_entry_set_mode(entry, S_IFREG | 0644); + archive_entry_set_size(entry, sizeof(file_data1) + sizeof(file_data2)); + archive_entry_set_uid(entry, file_uid); + archive_entry_set_gid(entry, file_gid); + archive_entry_set_mtime(entry, t, 0); + archive_entry_set_atime(entry, t, 0); + archive_entry_set_ctime(entry, t, 0); + assertEqualIntA(a, 0, archive_write_header(a, entry)); + assertEqualIntA(a, sizeof(file_data1), archive_write_data(a, file_data1, sizeof(file_data1))); + assertEqualIntA(a, sizeof(file_data2), archive_write_data(a, file_data2, sizeof(file_data2))); + archive_entry_free(entry); + + /* Folder */ + assert((entry = archive_entry_new()) != NULL); + archive_entry_set_pathname(entry, folder_name); + archive_entry_set_mode(entry, S_IFDIR | folder_perm); + archive_entry_set_size(entry, 0); + archive_entry_set_uid(entry, folder_uid); + archive_entry_set_gid(entry, folder_gid); + archive_entry_set_mtime(entry, t, 0); + archive_entry_set_atime(entry, t, 0); + archive_entry_set_ctime(entry, t, 0); + assertEqualIntA(a, 0, archive_write_header(a, entry)); + archive_entry_free(entry); + + /* Close the archive . */ + assertA(0 == archive_write_close(a)); + assertA(0 == archive_write_finish(a)); + + /* Remember the end of the archive in memory. */ + buffend = buff + used; + + /* Verify "End of Central Directory" record. */ + /* Get address of end-of-central-directory record. */ + p = buffend - 22; /* Assumes there is no zip comment field. */ + failure("End-of-central-directory begins with PK\\005\\006 signature"); + assertEqualMem(p, "PK\005\006", 4); + failure("This must be disk 0"); + assertEqualInt(i2(p + 4), 0); + failure("Central dir must start on disk 0"); + assertEqualInt(i2(p + 6), 0); + failure("All central dir entries are on this disk"); + assertEqualInt(i2(p + 8), i2(p + 10)); + failure("CD start (%d) + CD length (%d) should == archive size - 22", + i4(p + 12), i4(p + 16)); + assertEqualInt(i4(p + 12) + i4(p + 16), used - 22); + failure("no zip comment"); + assertEqualInt(i2(p + 20), 0); + + /* Get address of first entry in central directory. */ + p = buff + i4(buffend - 6); + failure("Central file record at offset %d should begin with" + " PK\\001\\002 signature", + i4(buffend - 10)); + + /* Verify file entry in central directory. */ + assertEqualMem(p, "PK\001\002", 4); /* Signature */ + assertEqualInt(i2(p + 4), 3 * 256 + 20); /* Version made by */ + assertEqualInt(i2(p + 6), 20); /* Version needed to extract */ + assertEqualInt(i2(p + 8), 8); /* Flags */ + assertEqualInt(i2(p + 10), 0); /* Compression method */ + assertEqualInt(i2(p + 12), (tm->tm_hour * 2048) + (tm->tm_min * 32) + (tm->tm_sec / 2)); /* File time */ + assertEqualInt(i2(p + 14), ((tm->tm_year - 80) * 512) + ((tm->tm_mon + 1) * 32) + tm->tm_mday); /* File date */ + crc = bitcrc32(0, file_data1, sizeof(file_data1)); + crc = bitcrc32(crc, file_data2, sizeof(file_data2)); + assertEqualInt(i4(p + 16), crc); /* CRC-32 */ + assertEqualInt(i4(p + 20), sizeof(file_data1) + sizeof(file_data2)); /* Compressed size */ + assertEqualInt(i4(p + 24), sizeof(file_data1) + sizeof(file_data2)); /* Uncompressed size */ + assertEqualInt(i2(p + 28), strlen(file_name)); /* Pathname length */ + assertEqualInt(i2(p + 30), 13); /* Extra field length */ + assertEqualInt(i2(p + 32), 0); /* File comment length */ + assertEqualInt(i2(p + 34), 0); /* Disk number start */ + assertEqualInt(i2(p + 36), 0); /* Internal file attrs */ + assertEqualInt(i4(p + 38) >> 16 & 01777, file_perm); /* External file attrs */ + assertEqualInt(i4(p + 42), 0); /* Offset of local header */ + assertEqualMem(p + 46, file_name, strlen(file_name)); /* Pathname */ + p = p + 46 + strlen(file_name); + assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */ + assertEqualInt(i2(p + 2), 5); /* 'UT' size */ + assertEqualInt(p[4], 7); /* 'UT' flags */ + assertEqualInt(i4(p + 5), t); /* 'UT' mtime */ + p = p + 9; + assertEqualInt(i2(p), 0x7855); /* 'Ux' extension header */ + assertEqualInt(i2(p + 2), 0); /* 'Ux' size */ + p = p + 4; + + /* Verify local header of file entry. */ + q = buff; + assertEqualMem(q, "PK\003\004", 4); /* Signature */ + assertEqualInt(i2(q + 4), 20); /* Version needed to extract */ + assertEqualInt(i2(q + 6), 8); /* Flags */ + assertEqualInt(i2(q + 8), 0); /* Compression method */ + assertEqualInt(i2(q + 10), (tm->tm_hour * 2048) + (tm->tm_min * 32) + (tm->tm_sec / 2)); /* File time */ + assertEqualInt(i2(q + 12), ((tm->tm_year - 80) * 512) + ((tm->tm_mon + 1) * 32) + tm->tm_mday); /* File date */ + assertEqualInt(i4(q + 14), 0); /* CRC-32 */ + assertEqualInt(i4(q + 18), sizeof(file_data1) + sizeof(file_data2)); /* Compressed size */ + assertEqualInt(i4(q + 22), sizeof(file_data1) + sizeof(file_data2)); /* Uncompressed size */ + assertEqualInt(i2(q + 26), strlen(file_name)); /* Pathname length */ + assertEqualInt(i2(q + 28), 25); /* Extra field length */ + assertEqualMem(q + 30, file_name, strlen(file_name)); /* Pathname */ + q = q + 30 + strlen(file_name); + assertEqualInt(i2(q), 0x5455); /* 'UT' extension header */ + assertEqualInt(i2(q + 2), 13); /* 'UT' size */ + assertEqualInt(q[4], 7); /* 'UT' flags */ + assertEqualInt(i4(q + 5), t); /* 'UT' mtime */ + assertEqualInt(i4(q + 9), t); /* 'UT' atime */ + assertEqualInt(i4(q + 13), t); /* 'UT' ctime */ + q = q + 17; + assertEqualInt(i2(q), 0x7855); /* 'Ux' extension header */ + assertEqualInt(i2(q + 2), 4); /* 'Ux' size */ + assertEqualInt(i2(q + 4), file_uid); /* 'Ux' UID */ + assertEqualInt(i2(q + 6), file_gid); /* 'Ux' GID */ + q = q + 8; + + /* Verify data of file entry. */ + assertEqualMem(q, file_data1, sizeof(file_data1)); + assertEqualMem(q + sizeof(file_data1), file_data2, sizeof(file_data2)); + q = q + sizeof(file_data1) + sizeof(file_data2); + + /* Verify data descriptor of file entry. */ + assertEqualMem(q, "PK\007\010", 4); /* Signature */ + assertEqualInt(i4(q + 4), crc); /* CRC-32 */ + assertEqualInt(i4(q + 8), sizeof(file_data1) + sizeof(file_data2)); /* Compressed size */ + assertEqualInt(i4(q + 12), sizeof(file_data1) + sizeof(file_data2)); /* Uncompressed size */ + q = q + 16; + + /* Verify folder entry in central directory. */ + assertEqualMem(p, "PK\001\002", 4); /* Signature */ + assertEqualInt(i2(p + 4), 3 * 256 + 20); /* Version made by */ + assertEqualInt(i2(p + 6), 20); /* Version needed to extract */ + assertEqualInt(i2(p + 8), 8); /* Flags */ + assertEqualInt(i2(p + 10), 0); /* Compression method */ + assertEqualInt(i2(p + 12), (tm->tm_hour * 2048) + (tm->tm_min * 32) + (tm->tm_sec / 2)); /* File time */ + assertEqualInt(i2(p + 14), ((tm->tm_year - 80) * 512) + ((tm->tm_mon + 1) * 32) + tm->tm_mday); /* File date */ + crc = 0; + assertEqualInt(i4(p + 16), crc); /* CRC-32 */ + assertEqualInt(i4(p + 20), 0); /* Compressed size */ + assertEqualInt(i4(p + 24), 0); /* Uncompressed size */ + assertEqualInt(i2(p + 28), strlen(folder_name)); /* Pathname length */ + assertEqualInt(i2(p + 30), 13); /* Extra field length */ + assertEqualInt(i2(p + 32), 0); /* File comment length */ + assertEqualInt(i2(p + 34), 0); /* Disk number start */ + assertEqualInt(i2(p + 36), 0); /* Internal file attrs */ + assertEqualInt(i4(p + 38) >> 16 & 01777, folder_perm); /* External file attrs */ + assertEqualInt(i4(p + 42), q - buff); /* Offset of local header */ + assertEqualMem(p + 46, folder_name, strlen(folder_name)); /* Pathname */ + p = p + 46 + strlen(folder_name); + assertEqualInt(i2(p), 0x5455); /* 'UT' extension header */ + assertEqualInt(i2(p + 2), 5); /* 'UT' size */ + assertEqualInt(p[4], 7); /* 'UT' flags */ + assertEqualInt(i4(p + 5), t); /* 'UT' mtime */ + p = p + 9; + assertEqualInt(i2(p), 0x7855); /* 'Ux' extension header */ + assertEqualInt(i2(p + 2), 0); /* 'Ux' size */ + p = p + 4; + + /* Verify local header of folder entry. */ + assertEqualMem(q, "PK\003\004", 4); /* Signature */ + assertEqualInt(i2(q + 4), 20); /* Version needed to extract */ + assertEqualInt(i2(q + 6), 8); /* Flags */ + assertEqualInt(i2(q + 8), 0); /* Compression method */ + assertEqualInt(i2(q + 10), (tm->tm_hour * 2048) + (tm->tm_min * 32) + (tm->tm_sec / 2)); /* File time */ + assertEqualInt(i2(q + 12), ((tm->tm_year - 80) * 512) + ((tm->tm_mon + 1) * 32) + tm->tm_mday); /* File date */ + assertEqualInt(i4(q + 14), 0); /* CRC-32 */ + assertEqualInt(i4(q + 18), 0); /* Compressed size */ + assertEqualInt(i4(q + 22), 0); /* Uncompressed size */ + assertEqualInt(i2(q + 26), strlen(folder_name)); /* Pathname length */ + assertEqualInt(i2(q + 28), 25); /* Extra field length */ + assertEqualMem(q + 30, folder_name, strlen(folder_name)); /* Pathname */ + q = q + 30 + strlen(folder_name); + assertEqualInt(i2(q), 0x5455); /* 'UT' extension header */ + assertEqualInt(i2(q + 2), 13); /* 'UT' size */ + assertEqualInt(q[4], 7); /* 'UT' flags */ + assertEqualInt(i4(q + 5), t); /* 'UT' mtime */ + assertEqualInt(i4(q + 9), t); /* 'UT' atime */ + assertEqualInt(i4(q + 13), t); /* 'UT' ctime */ + q = q + 17; + assertEqualInt(i2(q), 0x7855); /* 'Ux' extension header */ + assertEqualInt(i2(q + 2), 4); /* 'Ux' size */ + assertEqualInt(i2(q + 4), folder_uid); /* 'Ux' UID */ + assertEqualInt(i2(q + 6), folder_gid); /* 'Ux' GID */ + q = q + 8; + + /* There should not be any data in the folder entry, + * meaning next is the data descriptor header. */ + + /* Verify data descriptor of folder entry. */ + assertEqualMem(q, "PK\007\010", 4); /* Signature */ + assertEqualInt(i4(q + 4), crc); /* CRC-32 */ + assertEqualInt(i4(q + 8), 0); /* Compressed size */ + assertEqualInt(i4(q + 12), 0); /* Uncompressed size */ + q = q + 16; +} diff --git a/lib/libauditd/Makefile b/lib/libauditd/Makefile index 48ec4b14313..24873836394 100644 --- a/lib/libauditd/Makefile +++ b/lib/libauditd/Makefile @@ -17,6 +17,8 @@ SRCS= auditd_lib.c # CFLAGS+= -I${OPENBSMDIR} -I${LIBBSMDIR} +WARNS?= 3 + NO_MAN= .include diff --git a/lib/libautofs/Makefile b/lib/libautofs/Makefile index ea4d8cfa176..19758569976 100644 --- a/lib/libautofs/Makefile +++ b/lib/libautofs/Makefile @@ -3,7 +3,6 @@ LIB= autofs SHLIB_MAJOR= 3 -WARNS?= 4 SRCS= libautofs.c INCS= libautofs.h diff --git a/lib/libbegemot/Makefile b/lib/libbegemot/Makefile index b964e6bd611..27baf563cff 100644 --- a/lib/libbegemot/Makefile +++ b/lib/libbegemot/Makefile @@ -8,8 +8,6 @@ LIB= begemot SHLIB_MAJOR= 4 SHLIBDIR?= /lib -# WARNS?= 6 - CFLAGS+= -DUSE_SELECT -DQUADFMT='"ll"' SRCS= rpoll.c INCS= rpoll.h diff --git a/lib/libbsm/Makefile b/lib/libbsm/Makefile index 157b61ead3b..eec2c409144 100644 --- a/lib/libbsm/Makefile +++ b/lib/libbsm/Makefile @@ -33,6 +33,8 @@ SRCS= bsm_audit.c \ # CFLAGS+= -I${OPENBSMDIR} -I${LIBBSMDIR} +WARNS?= 1 + INCS= audit_uevents.h libbsm.h INCSDIR= ${INCLUDEDIR}/bsm diff --git a/lib/libbz2/Makefile b/lib/libbz2/Makefile index 6ea018bcfa4..b505927b4fb 100644 --- a/lib/libbz2/Makefile +++ b/lib/libbz2/Makefile @@ -10,4 +10,6 @@ SRCS= bzlib.c blocksort.c compress.c crctable.c decompress.c \ INCS= bzlib.h CFLAGS+= -I${BZ2DIR} +WARNS?= 3 + .include diff --git a/lib/libc/compat-43/Makefile.inc b/lib/libc/compat-43/Makefile.inc index 836f0a60ca5..8505ff22787 100644 --- a/lib/libc/compat-43/Makefile.inc +++ b/lib/libc/compat-43/Makefile.inc @@ -13,6 +13,11 @@ MAN+= creat.2 killpg.2 sigpause.2 sigsetmask.2 sigvec.2 MAN+= gethostid.3 setruid.3 MLINKS+=gethostid.3 sethostid.3 +MLINKS+=sigpause.2 sighold.2 +MLINKS+=sigpause.2 sigignore.2 +MLINKS+=sigpause.2 sigrelse.2 +MLINKS+=sigpause.2 sigset.2 +MLINKS+=sigpause.2 xsi_sigpause.2 MLINKS+=setruid.3 setrgid.3 MLINKS+=sigsetmask.2 sigblock.2 diff --git a/lib/libc/compat-43/Symbol.map b/lib/libc/compat-43/Symbol.map index e859a310cb0..bd49f99e2df 100644 --- a/lib/libc/compat-43/Symbol.map +++ b/lib/libc/compat-43/Symbol.map @@ -17,6 +17,14 @@ FBSD_1.0 { sigvec; }; +FBSD_1.2 { + sighold; + sigignore; + sigrelse; + sigset; + xsi_sigpause; +}; + FBSDprivate_1.0 { __creat; _creat; diff --git a/lib/libc/compat-43/sigcompat.c b/lib/libc/compat-43/sigcompat.c index 6280183238f..c3ba30a41f4 100644 --- a/lib/libc/compat-43/sigcompat.c +++ b/lib/libc/compat-43/sigcompat.c @@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$"); #include "namespace.h" #include #include +#include #include "un-namespace.h" #include "libc_private.h" @@ -97,8 +98,7 @@ sigblock(mask) } int -sigpause(mask) - int mask; +sigpause(int mask) { sigset_t set; @@ -106,3 +106,84 @@ sigpause(mask) set.__bits[0] = mask; return (_sigsuspend(&set)); } + +int +xsi_sigpause(int sig) +{ + sigset_t set; + + sigemptyset(&set); + sigaddset(&set, sig); + return (_sigsuspend(&set)); +} + +int +sighold(int sig) +{ + sigset_t set; + + sigemptyset(&set); + sigaddset(&set, sig); + return (_sigprocmask(SIG_BLOCK, &set, NULL)); +} + +int +sigignore(int sig) +{ + struct sigaction sa; + + bzero(&sa, sizeof(sa)); + sa.sa_handler = SIG_IGN; + return (_sigaction(sig, &sa, NULL)); +} + +int +sigrelse(int sig) +{ + sigset_t set; + + sigemptyset(&set); + sigaddset(&set, sig); + return (_sigprocmask(SIG_UNBLOCK, &set, NULL)); +} + +void +(*sigset(int sig, void (*disp)(int)))(int) +{ + sigset_t set, pset; + struct sigaction sa, psa; + int error; + + sigemptyset(&set); + sigaddset(&set, sig); + error = _sigprocmask(SIG_BLOCK, NULL, &pset); + if (error == -1) + return (SIG_ERR); + if ((__sighandler_t *)disp == SIG_HOLD) { + error = _sigprocmask(SIG_BLOCK, &set, &pset); + if (error == -1) + return (SIG_ERR); + if (sigismember(&pset, sig)) + return (SIG_HOLD); + else { + error = _sigaction(sig, NULL, &psa); + if (error == -1) + return (SIG_ERR); + return (psa.sa_handler); + } + } else { + error = _sigprocmask(SIG_UNBLOCK, &set, &pset); + if (error == -1) + return (SIG_ERR); + } + + bzero(&sa, sizeof(sa)); + sa.sa_handler = disp; + error = _sigaction(sig, &sa, &psa); + if (error == -1) + return (SIG_ERR); + if (sigismember(&pset, sig)) + return (SIG_HOLD); + else + return (psa.sa_handler); +} diff --git a/lib/libc/compat-43/sigpause.2 b/lib/libc/compat-43/sigpause.2 index 39edb0b5c18..bf3cf0bef8f 100644 --- a/lib/libc/compat-43/sigpause.2 +++ b/lib/libc/compat-43/sigpause.2 @@ -28,21 +28,118 @@ .\" @(#)sigpause.2 8.1 (Berkeley) 6/2/93 .\" $FreeBSD$ .\" +.\" Part of the content of the man page was derived from +.\" The Open Group Base Specifications Issue 7 +.\" IEEE Std 1003.1-2008 +.\" .Dd June 2, 1993 .Dt SIGPAUSE 2 .Os .Sh NAME -.Nm sigpause -.Nd atomically release blocked signals and wait for interrupt +.Nm sighold , +.Nm sigignore , +.Nm sigpause , +.Nm sigrelse , +.Nm sigset +.Nd legacy interface for signal management .Sh LIBRARY .Lb libc .Sh SYNOPSIS .In signal.h .Ft int +.Fn sighold "int sig" +.Ft int +.Fn sigignore "int sig" +.Ft int +.Fn xsi_sigpause "int sigmask" +.Ft int +.Fn sigrelse "int sig" +.Ft void (*)(int) +.Fn sigset "int" "void (*disp)(int)" +.Ft int .Fn sigpause "int sigmask" .Sh DESCRIPTION .Sy This interface is made obsolete by -.Xr sigsuspend 2 . +.Xr sigsuspend 2 +.Sy and +.Xr sigaction 2 +.Pp +The +.Fn sigset +function modifies signal dispositions. +The +.Fa sig +argument specifies the signal, which may be any signal except +.Dv SIGKILL +and +.Dv SIGSTOP . +The +.Fa disp +argument specifies the signal's disposition, +which may be +.Dv SIG_DFL , +.Dv SIG_IGN , +or the address of a signal handler. +If +.Fn sigset +is used, and +.Fa disp +is the address of a signal handler, the +system adds +.Fa sig +to the signal mask of the calling process before executing the signal +handler; when the signal handler returns, the system restores the +signal mask of the calling process to its state prior to the delivery +of the signal. +In addition, if +.Fn sigset +is used, and +.Fa disp +is equal to +.Dv SIG_HOLD , +.Fa sig +is added to the signal +mask of the calling process and +.Fa sig 's +disposition remains unchanged. +If +.Fn sigset +is used, and +.Fa disp +is not equal to +.Dv SIG_HOLD , +.Fa sig +is removed from the signal mask of the calling process. +.Pp +The +.Fn sighold +function adds +.Fa sig +to the signal mask of the calling process. +.Pp +The +.Fn sigrelse +function removes +.Fa sig +from the signal mask of the calling process. +.Pp +The +.Fn sigignore +function sets the disposition of +.Fa sig +to +.Dv SIG_IGN . +.Pp +The +.Fn xsi_sigpause +function removes +.Fa sig +from the signal mask of the calling process and suspend the calling process +until a signal is received. +The +.Fn xsi_sigpause +function restores the signal mask of the process to its original state before +returning. .Pp The .Fn sigpause @@ -57,13 +154,47 @@ The argument is usually 0 to indicate that no signals are to be blocked. +.Sh RETURN VALUES The .Fn sigpause -function -always terminates by being interrupted, returning -1 with +and +.Fn xsi_sigpause +functions +always terminate by being interrupted, returning -1 with .Va errno set to -.Er EINTR +.Er EINTR . +.Pp +Upon successful completion, +.Fn sigset +returns +.Dv SIG_HOLD +if the signal had been blocked and the signal's previous disposition if +it had not been blocked. +Otherwise, +.Dv SIG_ERR is returned and +.Va errno +set to indicate the error. +.Pp +For all other functions, upon successful completion, 0 is returned. +Otherwise, -1 is returned and +.Va errno +is set to indicate the error: +.Bl -tag -width Er +.It Bq Er EINVAL +The +.Fa sig +argument +is not a valid signal number. +.It Bq Er EINVAL +For +.Fn sigset +and +.Fn sigignore +functions, an attempt was made to catch or ignore +.Dv SIGKILL +or +.Dv SIGSTOP . .Sh SEE ALSO .Xr kill 2 , .Xr sigaction 2 , @@ -85,9 +216,26 @@ and was copied from there into the .Pq Tn XSI option of .St -p1003.1-2001 . +.Fx +implements it under the name +.Fn xsi_sigpause . +The +.Fn sighold , +.Fn sigignore , +.Fn sigrelse +and +.Fn sigset +functions are implemented for compatibility with +.Sy System V +and +.Sy XSI +interfaces. .Sh HISTORY The .Fn sigpause function appeared in .Bx 4.2 and has been deprecated. +All other functions appeared in +.Fx 9.0 +and were deprecated before being implemented. diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc index 0bdee9ddd84..2abfe57d8ef 100644 --- a/lib/libc/gen/Makefile.inc +++ b/lib/libc/gen/Makefile.inc @@ -5,7 +5,8 @@ .PATH: ${.CURDIR}/${MACHINE_ARCH}/gen ${.CURDIR}/gen SRCS+= __getosreldate.c __xuname.c \ - _pthread_stubs.c _rand48.c _spinlock_stub.c _thread_init.c \ + _once_stub.c _pthread_stubs.c _rand48.c _spinlock_stub.c \ + _thread_init.c \ alarm.c arc4random.c assert.c basename.c check_utility_compat.c \ clock.c closedir.c confstr.c \ crypt.c ctermid.c daemon.c devname.c dirname.c disklabel.c \ @@ -24,7 +25,7 @@ SRCS+= __getosreldate.c __xuname.c \ pause.c pmadvise.c popen.c posix_spawn.c \ psignal.c pw_scan.c pwcache.c \ raise.c readdir.c readpassphrase.c rewinddir.c \ - scandir.c seed48.c seekdir.c sem.c semctl.c \ + scandir.c seed48.c seekdir.c sem.c sem_new.c semctl.c \ setdomainname.c sethostname.c setjmperr.c setmode.c \ setproctitle.c setprogname.c siginterrupt.c siglist.c signal.c \ sigsetops.c sleep.c srand48.c statvfs.c stringlist.c strtofflags.c \ diff --git a/lib/libc/gen/Symbol.map b/lib/libc/gen/Symbol.map index a3ea75b0b01..e7d59bb7126 100644 --- a/lib/libc/gen/Symbol.map +++ b/lib/libc/gen/Symbol.map @@ -236,16 +236,6 @@ FBSD_1.0 { seekdir; user_from_uid; group_from_gid; - sem_init; - sem_destroy; - sem_open; - sem_close; - sem_unlink; - sem_wait; - sem_trywait; - sem_timedwait; - sem_post; - sem_getvalue; setdomainname; sethostname; longjmperror; @@ -363,11 +353,23 @@ FBSD_1.1 { semctl; tcgetsid; tcsetsid; + __pthread_cleanup_pop_imp; + __pthread_cleanup_push_imp; }; FBSD_1.2 { basename_r; getpagesizes; + sem_close; + sem_destroy; + sem_getvalue; + sem_init; + sem_open; + sem_timedwait; + sem_trywait; + sem_post; + sem_wait; + sem_unlink; }; FBSDprivate_1.0 { @@ -456,16 +458,6 @@ FBSDprivate_1.0 { __pw_scan; /* Used by (at least) libutil */ __raise; _raise; - __sem_init; - __sem_destroy; - __sem_open; - __sem_close; - __sem_unlink; - __sem_wait; - __sem_trywait; - __sem_timedwait; - __sem_post; - __sem_getvalue; __sleep; _sleep; _rtld_allocate_tls; @@ -482,4 +474,15 @@ FBSDprivate_1.0 { _wait; __waitpid; _waitpid; + + _libc_sem_init_compat; + _libc_sem_destroy_compat; + _libc_sem_open_compat; + _libc_sem_close_compat; + _libc_sem_unlink_compat; + _libc_sem_wait_compat; + _libc_sem_trywait_compat; + _libc_sem_timedwait_compat; + _libc_sem_post_compat; + _libc_sem_getvalue_compat; }; diff --git a/lib/libc/gen/_once_stub.c b/lib/libc/gen/_once_stub.c new file mode 100644 index 00000000000..d2acc29f32c --- /dev/null +++ b/lib/libc/gen/_once_stub.c @@ -0,0 +1,64 @@ +/*- + * Copyright (c) 2009 Advanced Computing Technologies LLC + * Written by: John H. Baldwin + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 +__FBSDID("$FreeBSD$"); + +#include "namespace.h" +#include +#include "un-namespace.h" +#include "libc_private.h" + +/* This implements pthread_once() for the single-threaded case. */ +static int +_libc_once(pthread_once_t *once_control, void (*init_routine)(void)) +{ + + if (once_control->state == PTHREAD_DONE_INIT) + return (0); + init_routine(); + once_control->state = PTHREAD_DONE_INIT; + return (0); +} + +/* + * This is the internal interface provided to libc. It will use + * pthread_once() from the threading library in a multi-threaded + * process and _libc_once() for a single-threaded library. Because + * _libc_once() uses the same ABI for the values in the pthread_once_t + * structure as the threading library, it is safe for a process to + * switch from _libc_once() to pthread_once() when threading is + * enabled. + */ +int +_once(pthread_once_t *once_control, void (*init_routine)(void)) +{ + + if (__isthreaded) + return (_pthread_once(once_control, init_routine)); + return (_libc_once(once_control, init_routine)); +} diff --git a/lib/libc/gen/_pthread_stubs.c b/lib/libc/gen/_pthread_stubs.c index 147235e485f..044e299e75a 100644 --- a/lib/libc/gen/_pthread_stubs.c +++ b/lib/libc/gen/_pthread_stubs.c @@ -119,6 +119,8 @@ pthread_func_entry_t __thr_jtable[PJT_MAX] = { {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_SETSPECIFIC */ {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_SIGMASK */ {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_TESTCANCEL */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_CLEANUP_POP_IMP */ + {PJT_DUAL_ENTRY(stub_zero)}, /* PJT_CLEANUP_PUSH_IMP */ }; /* @@ -265,6 +267,8 @@ STUB_FUNC2(pthread_kill, PJT_KILL, int, void *, int) STUB_FUNC2(pthread_setcancelstate, PJT_SETCANCELSTATE, int, int, void *) STUB_FUNC2(pthread_setcanceltype, PJT_SETCANCELTYPE, int, int, void *) STUB_FUNC(pthread_testcancel, PJT_TESTCANCEL, void) +STUB_FUNC1(__pthread_cleanup_pop_imp, PJT_CLEANUP_POP_IMP, int, int) +STUB_FUNC2(__pthread_cleanup_push_imp, PJT_CLEANUP_PUSH_IMP, void, void*, void *); static int stub_zero(void) diff --git a/lib/libc/gen/exec.c b/lib/libc/gen/exec.c index 985a09a4fcf..b83136eb510 100644 --- a/lib/libc/gen/exec.c +++ b/lib/libc/gen/exec.c @@ -54,7 +54,7 @@ int execl(const char *name, const char *arg, ...) { va_list ap; - char **argv; + const char **argv; int n; va_start(ap, arg); @@ -69,18 +69,19 @@ execl(const char *name, const char *arg, ...) } va_start(ap, arg); n = 1; - argv[0] = (char *)arg; + argv[0] = arg; while ((argv[n] = va_arg(ap, char *)) != NULL) n++; va_end(ap); - return (_execve(name, argv, environ)); + return (_execve(name, __DECONST(char **, argv), environ)); } int execle(const char *name, const char *arg, ...) { va_list ap; - char **argv, **envp; + const char **argv; + char **envp; int n; va_start(ap, arg); @@ -95,19 +96,19 @@ execle(const char *name, const char *arg, ...) } va_start(ap, arg); n = 1; - argv[0] = (char *)arg; + argv[0] = arg; while ((argv[n] = va_arg(ap, char *)) != NULL) n++; envp = va_arg(ap, char **); va_end(ap); - return (_execve(name, argv, envp)); + return (_execve(name, __DECONST(char **, argv), envp)); } int execlp(const char *name, const char *arg, ...) { va_list ap; - char **argv; + const char **argv; int n; va_start(ap, arg); @@ -122,11 +123,11 @@ execlp(const char *name, const char *arg, ...) } va_start(ap, arg); n = 1; - argv[0] = (char *)arg; + argv[0] = arg; while ((argv[n] = va_arg(ap, char *)) != NULL) n++; va_end(ap); - return (execvp(name, argv)); + return (execvp(name, __DECONST(char **, argv))); } int @@ -145,24 +146,21 @@ execvp(const char *name, char * const *argv) } static int -execvPe(name, path, argv, envp) - const char *name; - const char *path; - char * const *argv; - char * const *envp; +execvPe(const char *name, const char *path, char * const *argv, + char * const *envp) { - char **memp; - int cnt, lp, ln; - char *p; + const char **memp; + size_t cnt, lp, ln; int eacces, save_errno; - char *bp, *cur, buf[MAXPATHLEN]; + char *cur, buf[MAXPATHLEN]; + const char *p, *bp; struct stat sb; eacces = 0; /* If it's an absolute or relative path name, it's easy. */ if (index(name, '/')) { - bp = (char *)name; + bp = name; cur = NULL; goto retry; } @@ -209,7 +207,7 @@ execvPe(name, path, argv, envp) bcopy(name, buf + lp + 1, ln); buf[lp + ln + 1] = '\0'; -retry: (void)_execve(bp, argv, environ); +retry: (void)_execve(bp, argv, envp); switch (errno) { case E2BIG: goto done; @@ -228,7 +226,8 @@ retry: (void)_execve(bp, argv, environ); memp[0] = "sh"; memp[1] = bp; bcopy(argv + 1, memp + 2, cnt * sizeof(char *)); - (void)_execve(_PATH_BSHELL, memp, environ); + (void)_execve(_PATH_BSHELL, + __DECONST(char **, memp), envp); goto done; case ENOMEM: goto done; diff --git a/lib/libc/gen/fdevname.c b/lib/libc/gen/fdevname.c index be235f78916..d60da70d84e 100644 --- a/lib/libc/gen/fdevname.c +++ b/lib/libc/gen/fdevname.c @@ -30,6 +30,7 @@ __FBSDID("$FreeBSD$"); #include "namespace.h" #include #include +#include #include "un-namespace.h" char * diff --git a/lib/libc/gen/fts.3 b/lib/libc/gen/fts.3 index dfe2de02dce..4b051578c1e 100644 --- a/lib/libc/gen/fts.3 +++ b/lib/libc/gen/fts.3 @@ -28,7 +28,7 @@ .\" @(#)fts.3 8.5 (Berkeley) 4/16/94 .\" $FreeBSD$ .\" -.Dd October 5, 2009 +.Dd November 25, 2009 .Dt FTS 3 .Os .Sh NAME @@ -198,10 +198,9 @@ A directory being visited in post-order. The contents of the .Vt FTSENT structure will be unchanged from when -it was returned in pre-order, i.e., with the +the directory was visited in pre-order, except for the .Fa fts_info -field set to -.Dv FTS_D . +field. .It Dv FTS_ERR This is an error return, and the .Fa fts_errno diff --git a/lib/libc/gen/fts.c b/lib/libc/gen/fts.c index 392bda94138..1c547a10722 100644 --- a/lib/libc/gen/fts.c +++ b/lib/libc/gen/fts.c @@ -842,11 +842,8 @@ mem1: saved_errno = errno; * If not changing directories, reset the path back to original * state. */ - if (ISSET(FTS_NOCHDIR)) { - if (len == sp->fts_pathlen || nitems == 0) - --cp; - *cp = '\0'; - } + if (ISSET(FTS_NOCHDIR)) + sp->fts_path[cur->fts_pathlen] = '\0'; /* * If descended after called from fts_children or after called from diff --git a/lib/libc/gen/getcap.c b/lib/libc/gen/getcap.c index 32d66d484f5..2700d3d1031 100644 --- a/lib/libc/gen/getcap.c +++ b/lib/libc/gen/getcap.c @@ -647,7 +647,7 @@ int cgetnext(char **bp, char **db_array) { size_t len; - int done, hadreaderr, i, savederrno, status; + int done, hadreaderr, savederrno, status; char *cp, *line, *rp, *np, buf[BSIZE], nbuf[BSIZE]; u_int dummy; @@ -658,7 +658,7 @@ cgetnext(char **bp, char **db_array) (void)cgetclose(); return (-1); } - for(;;) { + for (;;) { if (toprec && !gottoprec) { gottoprec = 1; line = toprec; @@ -709,7 +709,6 @@ cgetnext(char **bp, char **db_array) /* * Line points to a name line. */ - i = 0; done = 0; np = nbuf; for (;;) { diff --git a/lib/libc/gen/getlogin.c b/lib/libc/gen/getlogin.c index dc85d3a6952..569cf4276ad 100644 --- a/lib/libc/gen/getlogin.c +++ b/lib/libc/gen/getlogin.c @@ -36,7 +36,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include diff --git a/lib/libc/gen/getttyent.c b/lib/libc/gen/getttyent.c index 9152626213e..99d9821edb9 100644 --- a/lib/libc/gen/getttyent.c +++ b/lib/libc/gen/getttyent.c @@ -55,8 +55,7 @@ static char *skip(char *); static char *value(char *); struct ttyent * -getttynam(tty) - const char *tty; +getttynam(const char *tty) { struct ttyent *t; @@ -71,7 +70,7 @@ getttynam(tty) } struct ttyent * -getttyent() +getttyent(void) { static struct ttyent tty; static char devpts_name[] = "pts/4294967295"; @@ -178,8 +177,7 @@ getttyent() * the next field. */ static char * -skip(p) - char *p; +skip(char *p) { char *t; int c, q; @@ -212,15 +210,14 @@ skip(p) } static char * -value(p) - char *p; +value(char *p) { return ((p = index(p, '=')) ? ++p : NULL); } int -setttyent() +setttyent(void) { DIR *devpts_dir; @@ -254,7 +251,7 @@ setttyent() } int -endttyent() +endttyent(void) { int rval; @@ -272,9 +269,7 @@ endttyent() } static int -isttystat(tty, flag) - const char *tty; - int flag; +isttystat(const char *tty, int flag) { struct ttyent *t; @@ -283,15 +278,14 @@ isttystat(tty, flag) int -isdialuptty(tty) - const char *tty; +isdialuptty(const char *tty) { return isttystat(tty, TTY_DIALUP); } -int isnettty(tty) - const char *tty; +int +isnettty(const char *tty) { return isttystat(tty, TTY_NETWORK); diff --git a/lib/libc/gen/getusershell.c b/lib/libc/gen/getusershell.c index b0da2a1d5cd..d09b50ca6b2 100644 --- a/lib/libc/gen/getusershell.c +++ b/lib/libc/gen/getusershell.c @@ -124,7 +124,7 @@ _local_initshells(rv, cb_data, ap) if ((fp = fopen(_PATH_SHELLS, "r")) == NULL) return NS_UNAVAIL; - sp = cp = line; + cp = line; while (fgets(cp, MAXPATHLEN + 1, fp) != NULL) { while (*cp != '#' && *cp != '/' && *cp != '\0') cp++; diff --git a/lib/libc/gen/nlist.c b/lib/libc/gen/nlist.c index 690e0b0a7c0..1361af3366c 100644 --- a/lib/libc/gen/nlist.c +++ b/lib/libc/gen/nlist.c @@ -209,8 +209,7 @@ static void elf_sym_to_nlist(struct nlist *, Elf_Sym *, Elf_Shdr *, int); * as such its use should be restricted. */ int -__elf_is_okay__(ehdr) - Elf_Ehdr *ehdr; +__elf_is_okay__(Elf_Ehdr *ehdr) { int retval = 0; /* diff --git a/lib/libc/gen/opendir.c b/lib/libc/gen/opendir.c index 9625ec69094..c192ab2af69 100644 --- a/lib/libc/gen/opendir.c +++ b/lib/libc/gen/opendir.c @@ -92,6 +92,18 @@ __opendir2(const char *name, int flags) return __opendir_common(fd, name, flags); } +/* + * POSIX 2008 and XSI 7 require alphasort() to call strcoll() for + * directory entries ordering. Use local copy that uses strcmp(). + */ +static int +opendir_alphasort(const void *p1, const void *p2) +{ + + return (strcmp((*(const struct dirent **)p1)->d_name, + (*(const struct dirent **)p2)->d_name)); +} + /* * Common routine for opendir(3), __opendir2(3) and fdopendir(3). */ @@ -240,7 +252,8 @@ __opendir_common(int fd, const char *name, int flags) /* * This sort must be stable. */ - mergesort(dpv, n, sizeof(*dpv), alphasort); + mergesort(dpv, n, sizeof(*dpv), + opendir_alphasort); dpv[n] = NULL; xp = NULL; diff --git a/lib/libc/gen/pause.c b/lib/libc/gen/pause.c index 86d3643435d..00bf8339a7c 100644 --- a/lib/libc/gen/pause.c +++ b/lib/libc/gen/pause.c @@ -40,7 +40,7 @@ __FBSDID("$FreeBSD$"); * Backwards compatible pause. */ int -__pause() +__pause(void) { return sigpause(sigblock(0L)); } diff --git a/lib/libc/gen/pwcache.c b/lib/libc/gen/pwcache.c index 501d6ba9cd7..a8a73f16cd8 100644 --- a/lib/libc/gen/pwcache.c +++ b/lib/libc/gen/pwcache.c @@ -33,13 +33,13 @@ static char sccsid[] = "@(#)pwcache.c 8.1 (Berkeley) 6/4/93"; #include __FBSDID("$FreeBSD$"); +#include #include #include #include #include #include -#include #define NCACHE 64 /* power of 2 */ #define MASK (NCACHE - 1) /* bits to store with */ @@ -50,7 +50,7 @@ user_from_uid(uid_t uid, int nouser) static struct ncache { uid_t uid; int found; - char name[UT_NAMESIZE + 1]; + char name[MAXLOGNAME]; } c_uid[NCACHE]; static int pwopen; struct passwd *pw; @@ -66,11 +66,11 @@ user_from_uid(uid_t uid, int nouser) cp->uid = uid; if (pw != NULL) { cp->found = 1; - (void)strncpy(cp->name, pw->pw_name, UT_NAMESIZE); - cp->name[UT_NAMESIZE] = '\0'; + (void)strncpy(cp->name, pw->pw_name, MAXLOGNAME - 1); + cp->name[MAXLOGNAME - 1] = '\0'; } else { cp->found = 0; - (void)snprintf(cp->name, UT_NAMESIZE, "%u", uid); + (void)snprintf(cp->name, MAXLOGNAME - 1, "%u", uid); if (nouser) return (NULL); } @@ -84,7 +84,7 @@ group_from_gid(gid_t gid, int nogroup) static struct ncache { gid_t gid; int found; - char name[UT_NAMESIZE + 1]; + char name[MAXLOGNAME]; } c_gid[NCACHE]; static int gropen; struct group *gr; @@ -100,11 +100,11 @@ group_from_gid(gid_t gid, int nogroup) cp->gid = gid; if (gr != NULL) { cp->found = 1; - (void)strncpy(cp->name, gr->gr_name, UT_NAMESIZE); - cp->name[UT_NAMESIZE] = '\0'; + (void)strncpy(cp->name, gr->gr_name, MAXLOGNAME - 1); + cp->name[MAXLOGNAME - 1] = '\0'; } else { cp->found = 0; - (void)snprintf(cp->name, UT_NAMESIZE, "%u", gid); + (void)snprintf(cp->name, MAXLOGNAME - 1, "%u", gid); if (nogroup) return (NULL); } diff --git a/lib/libc/gen/raise.c b/lib/libc/gen/raise.c index 12bd31fc7f1..b3d0aaed3ed 100644 --- a/lib/libc/gen/raise.c +++ b/lib/libc/gen/raise.c @@ -40,8 +40,7 @@ __weak_reference(__raise, raise); __weak_reference(__raise, _raise); int -__raise(s) - int s; +__raise(int s) { return(kill(getpid(), s)); } diff --git a/lib/libc/gen/scandir.3 b/lib/libc/gen/scandir.3 index 42ccac2465c..5e177b9fa1a 100644 --- a/lib/libc/gen/scandir.3 +++ b/lib/libc/gen/scandir.3 @@ -28,7 +28,7 @@ .\" @(#)scandir.3 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd June 4, 1993 +.Dd January 3, 2010 .Dt SCANDIR 3 .Os .Sh NAME @@ -38,12 +38,11 @@ .Sh LIBRARY .Lb libc .Sh SYNOPSIS -.In sys/types.h .In dirent.h .Ft int -.Fn scandir "const char *dirname" "struct dirent ***namelist" "int \\*(lp*select\\*(rp\\*(lpstruct dirent *\\*(rp" "int \\*(lp*compar\\*(rp\\*(lpconst void *, const void *\\*(rp" +.Fn scandir "const char *dirname" "struct dirent ***namelist" "int \\*(lp*select\\*(rp\\*(lpconst struct dirent *\\*(rp" "int \\*(lp*compar\\*(rp\\*(lpconst struct dirent **, const struct dirent **\\*(rp" .Ft int -.Fn alphasort "const void *d1" "const void *d2" +.Fn alphasort "const struct dirent **d1" "const struct dirent **d2" .Sh DESCRIPTION The .Fn scandir diff --git a/lib/libc/gen/scandir.c b/lib/libc/gen/scandir.c index 1dae85d12a9..b6f76bacebb 100644 --- a/lib/libc/gen/scandir.c +++ b/lib/libc/gen/scandir.c @@ -46,6 +46,8 @@ __FBSDID("$FreeBSD$"); #include #include "un-namespace.h" +static int alphasort_thunk(void *thunk, const void *p1, const void *p2); + /* * The DIRSIZ macro is the minimum record length which will hold the directory * entry. This requires the amount of space in struct dirent without the @@ -58,11 +60,9 @@ __FBSDID("$FreeBSD$"); (((dp)->d_namlen + 1 + 3) &~ 3)) int -scandir(dirname, namelist, select, dcomp) - const char *dirname; - struct dirent ***namelist; - int (*select)(struct dirent *); - int (*dcomp)(const void *, const void *); +scandir(const char *dirname, struct dirent ***namelist, + int (*select)(const struct dirent *), int (*dcomp)(const struct dirent **, + const struct dirent **)) { struct dirent *d, *p, **names = NULL; size_t nitems = 0; @@ -111,26 +111,40 @@ scandir(dirname, namelist, select, dcomp) } closedir(dirp); if (nitems && dcomp != NULL) - qsort(names, nitems, sizeof(struct dirent *), dcomp); + qsort_r(names, nitems, sizeof(struct dirent *), + &dcomp, alphasort_thunk); *namelist = names; - return(nitems); + return (nitems); fail: while (nitems > 0) free(names[--nitems]); free(names); closedir(dirp); - return -1; + return (-1); } /* * Alphabetic order comparison routine for those who want it. + * + * XXXKIB POSIX 2008 requires the alphasort() to use strcoll(). Keep + * strcmp() for now, since environment locale settings could have no + * relevance for the byte sequence of the file name. Moreover, it + * might be even invalid sequence in current locale, and then + * behaviour of alphasort would be undefined. */ int -alphasort(d1, d2) - const void *d1; - const void *d2; +alphasort(const struct dirent **d1, const struct dirent **d2) { - return(strcmp((*(struct dirent **)d1)->d_name, - (*(struct dirent **)d2)->d_name)); + + return (strcmp((*d1)->d_name, (*d2)->d_name)); +} + +static int +alphasort_thunk(void *thunk, const void *p1, const void *p2) +{ + int (*dc)(const struct dirent **, const struct dirent **); + + dc = *(int (**)(const struct dirent **, const struct dirent **))thunk; + return (dc((const struct dirent **)p1, (const struct dirent **)p2)); } diff --git a/lib/libc/gen/sem.c b/lib/libc/gen/sem.c index 439f0fe5c41..7cb021c6a7d 100644 --- a/lib/libc/gen/sem.c +++ b/lib/libc/gen/sem.c @@ -1,4 +1,5 @@ /* + * Copyright (C) 2010 David Xu . * Copyright (C) 2000 Jason Evans . * All rights reserved. * @@ -59,34 +60,65 @@ #include "namespace.h" #include #include +#include #include +#include +#include +#include #include #include -#include #include #include #include -#include <_semaphore.h> #include "un-namespace.h" #include "libc_private.h" +/* + * Old semaphore definitions. + */ +struct sem { +#define SEM_MAGIC ((u_int32_t) 0x09fa4012) + u_int32_t magic; + pthread_mutex_t lock; + pthread_cond_t gtzero; + u_int32_t count; + u_int32_t nwaiters; +#define SEM_USER (NULL) + semid_t semid; /* semaphore id if kernel (shared) semaphore */ + int syssem; /* 1 if kernel (shared) semaphore */ + LIST_ENTRY(sem) entry; + struct sem **backpointer; +}; + +typedef struct sem* sem_t; + +#define SEM_FAILED ((sem_t *)0) +#define SEM_VALUE_MAX __INT_MAX + +#define SYM_FB10(sym) __CONCAT(sym, _fb10) +#define WEAK_REF(sym, alias) __weak_reference(sym, alias) +#define SYM_COMPAT(sym, impl, ver) __sym_compat(sym, impl, ver) + +#define FB10_COMPAT(func, sym) \ + WEAK_REF(func, SYM_FB10(sym)); \ + SYM_COMPAT(sym, SYM_FB10(sym), FBSD_1.0) + static sem_t sem_alloc(unsigned int value, semid_t semid, int system_sem); static void sem_free(sem_t sem); static LIST_HEAD(, sem) named_sems = LIST_HEAD_INITIALIZER(&named_sems); static pthread_mutex_t named_sems_mtx = PTHREAD_MUTEX_INITIALIZER; -__weak_reference(__sem_init, sem_init); -__weak_reference(__sem_destroy, sem_destroy); -__weak_reference(__sem_open, sem_open); -__weak_reference(__sem_close, sem_close); -__weak_reference(__sem_unlink, sem_unlink); -__weak_reference(__sem_wait, sem_wait); -__weak_reference(__sem_trywait, sem_trywait); -__weak_reference(__sem_timedwait, sem_timedwait); -__weak_reference(__sem_post, sem_post); -__weak_reference(__sem_getvalue, sem_getvalue); - +FB10_COMPAT(_libc_sem_init_compat, sem_init); +FB10_COMPAT(_libc_sem_destroy_compat, sem_destroy); +FB10_COMPAT(_libc_sem_open_compat, sem_open); +FB10_COMPAT(_libc_sem_close_compat, sem_close); +FB10_COMPAT(_libc_sem_unlink_compat, sem_unlink); +FB10_COMPAT(_libc_sem_wait_compat, sem_wait); +FB10_COMPAT(_libc_sem_trywait_compat, sem_trywait); +FB10_COMPAT(_libc_sem_timedwait_compat, sem_timedwait); +FB10_COMPAT(_libc_sem_post_compat, sem_post); +FB10_COMPAT(_libc_sem_getvalue_compat, sem_getvalue); static inline int sem_check_validity(sem_t *sem) @@ -104,8 +136,6 @@ static void sem_free(sem_t sem) { - _pthread_mutex_destroy(&sem->lock); - _pthread_cond_destroy(&sem->gtzero); sem->magic = 0; free(sem); } @@ -131,13 +161,11 @@ sem_alloc(unsigned int value, semid_t semid, int system_sem) sem->magic = SEM_MAGIC; sem->semid = semid; sem->syssem = system_sem; - sem->lock = PTHREAD_MUTEX_INITIALIZER; - sem->gtzero = PTHREAD_COND_INITIALIZER; return (sem); } int -__sem_init(sem_t *sem, int pshared, unsigned int value) +_libc_sem_init_compat(sem_t *sem, int pshared, unsigned int value) { semid_t semid; @@ -147,26 +175,27 @@ __sem_init(sem_t *sem, int pshared, unsigned int value) * pthread_cond_wait() is just a stub that doesn't really * wait. */ - if (ksem_init(&semid, value) != 0) + semid = (semid_t)SEM_USER; + if ((pshared != 0) && ksem_init(&semid, value) != 0) return (-1); - (*sem) = sem_alloc(value, semid, 1); + *sem = sem_alloc(value, semid, pshared); if ((*sem) == NULL) { - ksem_destroy(semid); + if (pshared != 0) + ksem_destroy(semid); return (-1); } return (0); } int -__sem_destroy(sem_t *sem) +_libc_sem_destroy_compat(sem_t *sem) { int retval; if (sem_check_validity(sem) != 0) return (-1); - _pthread_mutex_lock(&(*sem)->lock); /* * If this is a system semaphore let the kernel track it otherwise * make sure there are no waiters. @@ -181,18 +210,14 @@ __sem_destroy(sem_t *sem) retval = 0; (*sem)->magic = 0; } - _pthread_mutex_unlock(&(*sem)->lock); - if (retval == 0) { - _pthread_mutex_destroy(&(*sem)->lock); - _pthread_cond_destroy(&(*sem)->gtzero); + if (retval == 0) sem_free(*sem); - } return (retval); } sem_t * -__sem_open(const char *name, int oflag, ...) +_libc_sem_open_compat(const char *name, int oflag, ...) { sem_t *sem; sem_t s; @@ -255,7 +280,7 @@ err: } int -__sem_close(sem_t *sem) +_libc_sem_close_compat(sem_t *sem) { if (sem_check_validity(sem) != 0) @@ -280,68 +305,156 @@ __sem_close(sem_t *sem) } int -__sem_unlink(const char *name) +_libc_sem_unlink_compat(const char *name) { return (ksem_unlink(name)); } -int -__sem_wait(sem_t *sem) +static int +enable_async_cancel(void) { + int old; - if (sem_check_validity(sem) != 0) + _pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &old); + return (old); +} + +static void +restore_async_cancel(int val) +{ + _pthread_setcanceltype(val, NULL); +} + +static int +_umtx_wait_uint(volatile unsigned *mtx, unsigned id, const struct timespec *timeout) +{ + if (timeout && (timeout->tv_sec < 0 || (timeout->tv_sec == 0 && + timeout->tv_nsec <= 0))) { + errno = ETIMEDOUT; return (-1); + } + return _umtx_op(__DEVOLATILE(void *, mtx), + UMTX_OP_WAIT_UINT_PRIVATE, id, NULL, __DECONST(void*, timeout)); +} - return (ksem_wait((*sem)->semid)); +static int +_umtx_wake(volatile void *mtx) +{ + return _umtx_op(__DEVOLATILE(void *, mtx), UMTX_OP_WAKE_PRIVATE, + 1, NULL, NULL); +} + +#define TIMESPEC_SUB(dst, src, val) \ + do { \ + (dst)->tv_sec = (src)->tv_sec - (val)->tv_sec; \ + (dst)->tv_nsec = (src)->tv_nsec - (val)->tv_nsec; \ + if ((dst)->tv_nsec < 0) { \ + (dst)->tv_sec--; \ + (dst)->tv_nsec += 1000000000; \ + } \ + } while (0) + + +static void +sem_cancel_handler(void *arg) +{ + sem_t *sem = arg; + + atomic_add_int(&(*sem)->nwaiters, -1); + if ((*sem)->nwaiters && (*sem)->count) + _umtx_wake(&(*sem)->count); } int -__sem_trywait(sem_t *sem) +_libc_sem_timedwait_compat(sem_t * __restrict sem, + const struct timespec * __restrict abstime) { - int retval; + struct timespec ts, ts2; + int val, retval, saved_cancel; if (sem_check_validity(sem) != 0) return (-1); - if ((*sem)->syssem != 0) - retval = ksem_trywait((*sem)->semid); - else { - _pthread_mutex_lock(&(*sem)->lock); - if ((*sem)->count > 0) { - (*sem)->count--; - retval = 0; - } else { - errno = EAGAIN; - retval = -1; + if ((*sem)->syssem != 0) { + saved_cancel = enable_async_cancel(); + retval = ksem_wait((*sem)->semid); + restore_async_cancel(saved_cancel); + return (retval); + } + + retval = 0; + _pthread_testcancel(); + for (;;) { + while ((val = (*sem)->count) > 0) { + if (atomic_cmpset_acq_int(&(*sem)->count, val, val - 1)) + return (0); } - _pthread_mutex_unlock(&(*sem)->lock); + if (retval) + break; + if (abstime) { + if (abstime->tv_nsec >= 1000000000 || abstime->tv_nsec < 0) { + errno = EINVAL; + return (-1); + } + clock_gettime(CLOCK_REALTIME, &ts); + TIMESPEC_SUB(&ts2, abstime, &ts); + } + atomic_add_int(&(*sem)->nwaiters, 1); + pthread_cleanup_push(sem_cancel_handler, sem); + saved_cancel = enable_async_cancel(); + retval = _umtx_wait_uint(&(*sem)->count, 0, abstime ? &ts2 : NULL); + restore_async_cancel(saved_cancel); + pthread_cleanup_pop(0); + atomic_add_int(&(*sem)->nwaiters, -1); } return (retval); } int -__sem_timedwait(sem_t * __restrict sem, - const struct timespec * __restrict abs_timeout) +_libc_sem_wait_compat(sem_t *sem) { - if (sem_check_validity(sem) != 0) - return (-1); - - return (ksem_timedwait((*sem)->semid, abs_timeout)); + return _libc_sem_timedwait_compat(sem, NULL); } int -__sem_post(sem_t *sem) +_libc_sem_trywait_compat(sem_t *sem) +{ + int val; + + if (sem_check_validity(sem) != 0) + return (-1); + + if ((*sem)->syssem != 0) + return ksem_trywait((*sem)->semid); + + while ((val = (*sem)->count) > 0) { + if (atomic_cmpset_acq_int(&(*sem)->count, val, val - 1)) + return (0); + } + errno = EAGAIN; + return (-1); +} + +int +_libc_sem_post_compat(sem_t *sem) { if (sem_check_validity(sem) != 0) return (-1); - return (ksem_post((*sem)->semid)); + if ((*sem)->syssem != 0) + return ksem_post((*sem)->semid); + + atomic_add_rel_int(&(*sem)->count, 1); + + if ((*sem)->nwaiters) + return _umtx_wake(&(*sem)->count); + return (0); } int -__sem_getvalue(sem_t * __restrict sem, int * __restrict sval) +_libc_sem_getvalue_compat(sem_t * __restrict sem, int * __restrict sval) { int retval; @@ -351,10 +464,7 @@ __sem_getvalue(sem_t * __restrict sem, int * __restrict sval) if ((*sem)->syssem != 0) retval = ksem_getvalue((*sem)->semid, sval); else { - _pthread_mutex_lock(&(*sem)->lock); *sval = (int)(*sem)->count; - _pthread_mutex_unlock(&(*sem)->lock); - retval = 0; } return (retval); diff --git a/lib/libc/gen/sem_init.3 b/lib/libc/gen/sem_init.3 index d765a574e67..202612a3649 100644 --- a/lib/libc/gen/sem_init.3 +++ b/lib/libc/gen/sem_init.3 @@ -27,7 +27,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 15, 2000 +.Dd December 8, 2009 .Dt SEM_INIT 3 .Os .Sh NAME @@ -48,8 +48,7 @@ to have the value .Fa value . A non-zero value for .Fa pshared -specifies a shared semaphore that can be used by multiple processes, which this -implementation is not capable of. +specifies a shared semaphore that can be used by multiple processes. .Pp Following a successful call to .Fn sem_init , @@ -78,8 +77,6 @@ argument exceeds .Dv SEM_VALUE_MAX . .It Bq Er ENOSPC Memory allocation error. -.It Bq Er EPERM -Unable to initialize a shared semaphore. .El .Sh SEE ALSO .Xr sem_destroy 3 , @@ -93,16 +90,10 @@ The .Fn sem_init function conforms to .St -p1003.1-96 . -.Pp -This implementation does not support shared semaphores, and reports this fact -by setting -.Va errno -to -.Er EPERM . -This is perhaps a stretch of the intention of -.Tn POSIX , -but is -compliant, with the caveat that -.Fn sem_init -always reports a permissions error when an attempt to create a shared semaphore -is made. +.Sh BUGS +A sem_t is a pointer to a separately allocated structure, +therefore process shared semaphores only work between related processes +and do not perform very well +(each operation is a system call, +while single-process semaphores only do a system call +if they need to block or wake up a thread). diff --git a/lib/libc/gen/sem_new.c b/lib/libc/gen/sem_new.c new file mode 100644 index 00000000000..dbaf6e14aa7 --- /dev/null +++ b/lib/libc/gen/sem_new.c @@ -0,0 +1,457 @@ +/* + * Copyright (C) 2010 David Xu . + * 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(s), this list of conditions and the following disclaimer as + * the first lines of this file unmodified other than the possible + * addition of one or more copyright notices. + * 2. Redistributions in binary form must reproduce the above copyright + * notice(s), this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) 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. + * + * $FreeBSD$ + */ + +#include "namespace.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "un-namespace.h" + +__weak_reference(_sem_close, sem_close); +__weak_reference(_sem_destroy, sem_destroy); +__weak_reference(_sem_getvalue, sem_getvalue); +__weak_reference(_sem_init, sem_init); +__weak_reference(_sem_open, sem_open); +__weak_reference(_sem_post, sem_post); +__weak_reference(_sem_timedwait, sem_timedwait); +__weak_reference(_sem_trywait, sem_trywait); +__weak_reference(_sem_unlink, sem_unlink); +__weak_reference(_sem_wait, sem_wait); + +#define SEM_PREFIX "/tmp/SEMD" +#define SEM_MAGIC ((u_int32_t)0x73656d31) + +struct sem_nameinfo { + int open_count; + char *name; + sem_t *sem; + LIST_ENTRY(sem_nameinfo) next; +}; + +static pthread_once_t once = PTHREAD_ONCE_INIT; +static pthread_mutex_t sem_llock; +static LIST_HEAD(,sem_nameinfo) sem_list = LIST_HEAD_INITIALIZER(sem_list); + +static void +sem_prefork() +{ + + _pthread_mutex_lock(&sem_llock); +} + +static void +sem_postfork() +{ + _pthread_mutex_unlock(&sem_llock); +} + +static void +sem_child_postfork() +{ + _pthread_mutex_unlock(&sem_llock); +} + +static void +sem_module_init(void) +{ + pthread_mutexattr_t ma; + + _pthread_mutexattr_init(&ma); + _pthread_mutexattr_settype(&ma, PTHREAD_MUTEX_RECURSIVE); + _pthread_mutex_init(&sem_llock, &ma); + _pthread_mutexattr_destroy(&ma); + _pthread_atfork(sem_prefork, sem_postfork, sem_child_postfork); +} + +static inline int +sem_check_validity(sem_t *sem) +{ + + if (sem->_magic == SEM_MAGIC) + return (0); + else { + errno = EINVAL; + return (-1); + } +} + +int +_sem_init(sem_t *sem, int pshared, unsigned int value) +{ + + if (value > SEM_VALUE_MAX) { + errno = EINVAL; + return (-1); + } + + bzero(sem, sizeof(sem_t)); + sem->_magic = SEM_MAGIC; + sem->_kern._count = (u_int32_t)value; + sem->_kern._has_waiters = 0; + sem->_kern._flags = pshared ? USYNC_PROCESS_SHARED : 0; + return (0); +} + +sem_t * +_sem_open(const char *name, int flags, ...) +{ + char path[PATH_MAX]; + + struct stat sb; + va_list ap; + struct sem_nameinfo *ni = NULL; + sem_t *sem = NULL; + int fd = -1, mode, len; + + if (name[0] != '/') { + errno = EINVAL; + return (NULL); + } + name++; + + if (flags & ~(O_CREAT|O_EXCL)) { + errno = EINVAL; + return (NULL); + } + + _pthread_once(&once, sem_module_init); + + _pthread_mutex_lock(&sem_llock); + LIST_FOREACH(ni, &sem_list, next) { + if (strcmp(name, ni->name) == 0) { + ni->open_count++; + sem = ni->sem; + _pthread_mutex_unlock(&sem_llock); + return (sem); + } + } + + if (flags & O_CREAT) { + va_start(ap, flags); + mode = va_arg(ap, int); + va_end(ap); + } + + len = sizeof(*ni) + strlen(name) + 1; + ni = (struct sem_nameinfo *)malloc(len); + if (ni == NULL) { + errno = ENOSPC; + goto error; + } + + ni->name = (char *)(ni+1); + strcpy(ni->name, name); + + strcpy(path, SEM_PREFIX); + if (strlcat(path, name, sizeof(path)) >= sizeof(path)) { + errno = ENAMETOOLONG; + goto error; + } + + fd = _open(path, flags|O_RDWR, mode); + if (fd == -1) + goto error; + if (flock(fd, LOCK_EX) == -1) + goto error; + if (_fstat(fd, &sb)) { + flock(fd, LOCK_UN); + goto error; + } + if (sb.st_size < sizeof(sem_t)) { + sem_t tmp; + + tmp._magic = SEM_MAGIC; + tmp._kern._has_waiters = 0; + tmp._kern._count = 0; + tmp._kern._flags = USYNC_PROCESS_SHARED | SEM_NAMED; + if (_write(fd, &tmp, sizeof(tmp)) != sizeof(tmp)) { + flock(fd, LOCK_UN); + goto error; + } + } + flock(fd, LOCK_UN); + sem = (sem_t *)mmap(NULL, sizeof(sem_t), PROT_READ|PROT_WRITE, + MAP_SHARED|MAP_NOSYNC, fd, 0); + if (sem == MAP_FAILED) { + sem = NULL; + if (errno == ENOMEM) + errno = ENOSPC; + goto error; + } + if (sem->_magic != SEM_MAGIC) { + errno = EINVAL; + goto error; + } + ni->open_count = 1; + ni->sem = sem; + LIST_INSERT_HEAD(&sem_list, ni, next); + _pthread_mutex_unlock(&sem_llock); + _close(fd); + return (sem); + +error: + _pthread_mutex_unlock(&sem_llock); + if (fd != -1) + _close(fd); + if (sem != NULL) + munmap(sem, sizeof(sem_t)); + free(ni); + return (SEM_FAILED); +} + +int +_sem_close(sem_t *sem) +{ + struct sem_nameinfo *ni; + + if (sem_check_validity(sem) != 0) + return (-1); + + if (!(sem->_kern._flags & SEM_NAMED)) { + errno = EINVAL; + return (-1); + } + + _pthread_mutex_lock(&sem_llock); + LIST_FOREACH(ni, &sem_list, next) { + if (sem == ni->sem) { + if (--ni->open_count > 0) { + _pthread_mutex_unlock(&sem_llock); + return (0); + } + else + break; + } + } + + if (ni) { + LIST_REMOVE(ni, next); + _pthread_mutex_unlock(&sem_llock); + munmap(sem, sizeof(*sem)); + free(ni); + return (0); + } + _pthread_mutex_unlock(&sem_llock); + return (-1); +} + +int +_sem_unlink(const char *name) +{ + char path[PATH_MAX]; + + if (name[0] != '/') { + errno = ENOENT; + return -1; + } + name++; + + strcpy(path, SEM_PREFIX); + if (strlcat(path, name, sizeof(path)) >= sizeof(path)) { + errno = ENAMETOOLONG; + return (-1); + } + return unlink(path); +} + +int +_sem_destroy(sem_t *sem) +{ + + if (sem_check_validity(sem) != 0) + return (-1); + + if (sem->_kern._flags & SEM_NAMED) { + errno = EINVAL; + return (-1); + } + sem->_magic = 0; + return (0); +} + +int +_sem_getvalue(sem_t * __restrict sem, int * __restrict sval) +{ + + if (sem_check_validity(sem) != 0) + return (-1); + + *sval = (int)sem->_kern._count; + return (0); +} + +static __inline int +usem_wake(struct _usem *sem) +{ + if (!sem->_has_waiters) + return (0); + return _umtx_op(sem, UMTX_OP_SEM_WAKE, 0, NULL, NULL); +} + +static __inline int +usem_wait(struct _usem *sem, const struct timespec *timeout) +{ + if (timeout && (timeout->tv_sec < 0 || (timeout->tv_sec == 0 && + timeout->tv_nsec <= 0))) { + errno = ETIMEDOUT; + return (-1); + } + return _umtx_op(sem, UMTX_OP_SEM_WAIT, 0, NULL, + __DECONST(void*, timeout)); +} + +int +_sem_trywait(sem_t *sem) +{ + int val; + + if (sem_check_validity(sem) != 0) + return (-1); + + while ((val = sem->_kern._count) > 0) { + if (atomic_cmpset_acq_int(&sem->_kern._count, val, val - 1)) + return (0); + } + errno = EAGAIN; + return (-1); +} + +static void +sem_cancel_handler(void *arg) +{ + sem_t *sem = arg; + + if (sem->_kern._has_waiters && sem->_kern._count) + usem_wake(&sem->_kern); +} + +#define TIMESPEC_SUB(dst, src, val) \ + do { \ + (dst)->tv_sec = (src)->tv_sec - (val)->tv_sec; \ + (dst)->tv_nsec = (src)->tv_nsec - (val)->tv_nsec; \ + if ((dst)->tv_nsec < 0) { \ + (dst)->tv_sec--; \ + (dst)->tv_nsec += 1000000000; \ + } \ + } while (0) + + +static __inline int +enable_async_cancel(void) +{ + int old; + + _pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &old); + return (old); +} + +static __inline void +restore_async_cancel(int val) +{ + _pthread_setcanceltype(val, NULL); +} + +int +_sem_timedwait(sem_t * __restrict sem, + const struct timespec * __restrict abstime) +{ + struct timespec ts, ts2; + int val, retval, saved_cancel; + + if (sem_check_validity(sem) != 0) + return (-1); + + retval = 0; + for (;;) { + while ((val = sem->_kern._count) > 0) { + if (atomic_cmpset_acq_int(&sem->_kern._count, val, val - 1)) + return (0); + } + + if (retval) + break; + + /* + * The timeout argument is only supposed to + * be checked if the thread would have blocked. + */ + if (abstime != NULL) { + if (abstime->tv_nsec >= 1000000000 || abstime->tv_nsec < 0) { + errno = EINVAL; + return (-1); + } + clock_gettime(CLOCK_REALTIME, &ts); + TIMESPEC_SUB(&ts2, abstime, &ts); + } + pthread_cleanup_push(sem_cancel_handler, sem); + saved_cancel = enable_async_cancel(); + retval = usem_wait(&sem->_kern, abstime ? &ts2 : NULL); + restore_async_cancel(saved_cancel); + pthread_cleanup_pop(0); + } + return (retval); +} + +int +_sem_wait(sem_t *sem) +{ + return _sem_timedwait(sem, NULL); +} + +/* + * POSIX: + * The sem_post() interface is reentrant with respect to signals and may be + * invoked from a signal-catching function. + * The implementation does not use lock, so it should be safe. + */ +int +_sem_post(sem_t *sem) +{ + + if (sem_check_validity(sem) != 0) + return (-1); + + atomic_add_rel_int(&sem->_kern._count, 1); + return usem_wake(&sem->_kern); +} diff --git a/lib/libc/gen/sleep.c b/lib/libc/gen/sleep.c index cdf5828404a..b807c2d1d53 100644 --- a/lib/libc/gen/sleep.c +++ b/lib/libc/gen/sleep.c @@ -41,8 +41,7 @@ __FBSDID("$FreeBSD$"); #include "un-namespace.h" unsigned int -__sleep(seconds) - unsigned int seconds; +__sleep(unsigned int seconds) { struct timespec time_to_sleep; struct timespec time_remaining; diff --git a/lib/libc/gen/termios.c b/lib/libc/gen/termios.c index 85ca4e335d3..fc21757d106 100644 --- a/lib/libc/gen/termios.c +++ b/lib/libc/gen/termios.c @@ -45,18 +45,14 @@ __FBSDID("$FreeBSD$"); #include "un-namespace.h" int -tcgetattr(fd, t) - int fd; - struct termios *t; +tcgetattr(int fd, struct termios *t) { return (_ioctl(fd, TIOCGETA, t)); } int -tcsetattr(fd, opt, t) - int fd, opt; - const struct termios *t; +tcsetattr(int fd, int opt, const struct termios *t) { struct termios localterm; @@ -88,8 +84,7 @@ tcsetpgrp(int fd, pid_t pgrp) } pid_t -tcgetpgrp(fd) - int fd; +tcgetpgrp(int fd) { int s; @@ -123,25 +118,21 @@ tcsetsid(int fd, pid_t pid) } speed_t -cfgetospeed(t) - const struct termios *t; +cfgetospeed(const struct termios *t) { return (t->c_ospeed); } speed_t -cfgetispeed(t) - const struct termios *t; +cfgetispeed(const struct termios *t) { return (t->c_ispeed); } int -cfsetospeed(t, speed) - struct termios *t; - speed_t speed; +cfsetospeed(struct termios *t, speed_t speed) { t->c_ospeed = speed; @@ -149,9 +140,7 @@ cfsetospeed(t, speed) } int -cfsetispeed(t, speed) - struct termios *t; - speed_t speed; +cfsetispeed(struct termios *t, speed_t speed) { t->c_ispeed = speed; @@ -159,9 +148,7 @@ cfsetispeed(t, speed) } int -cfsetspeed(t, speed) - struct termios *t; - speed_t speed; +cfsetspeed(struct termios *t, speed_t speed) { t->c_ispeed = t->c_ospeed = speed; @@ -173,8 +160,7 @@ cfsetspeed(t, speed) * mode with no characters interpreted, 8-bit data path. */ void -cfmakeraw(t) - struct termios *t; +cfmakeraw(struct termios *t) { t->c_iflag &= ~(IMAXBEL|IXOFF|INPCK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON|IGNPAR); @@ -188,8 +174,7 @@ cfmakeraw(t) } int -tcsendbreak(fd, len) - int fd, len; +tcsendbreak(int fd, int len __unused) { struct timeval sleepytime; @@ -204,8 +189,7 @@ tcsendbreak(fd, len) } int -__tcdrain(fd) - int fd; +__tcdrain(int fd) { return (_ioctl(fd, TIOCDRAIN, 0)); } @@ -214,8 +198,7 @@ __weak_reference(__tcdrain, tcdrain); __weak_reference(__tcdrain, _tcdrain); int -tcflush(fd, which) - int fd, which; +tcflush(int fd, int which) { int com; @@ -237,8 +220,7 @@ tcflush(fd, which) } int -tcflow(fd, action) - int fd, action; +tcflow(int fd, int action) { struct termios term; u_char c; diff --git a/lib/libc/gen/time.3 b/lib/libc/gen/time.3 index 2770e49f386..d022e0611c4 100644 --- a/lib/libc/gen/time.3 +++ b/lib/libc/gen/time.3 @@ -66,6 +66,7 @@ The function may fail for any of the reasons described in .Xr gettimeofday 2 . .Sh SEE ALSO +.Xr clock_gettime 2 , .Xr gettimeofday 2 , .Xr ctime 3 .Sh STANDARDS diff --git a/lib/libc/gen/time.c b/lib/libc/gen/time.c index 840f9b6b7bc..214dfce1bb8 100644 --- a/lib/libc/gen/time.c +++ b/lib/libc/gen/time.c @@ -37,13 +37,12 @@ __FBSDID("$FreeBSD$"); #include time_t -time(t) - time_t *t; +time(time_t *t) { - struct timeval tt; + struct timespec tt; time_t retval; - if (gettimeofday(&tt, (struct timezone *)0) < 0) + if (clock_gettime(CLOCK_SECOND, &tt) < 0) retval = -1; else retval = tt.tv_sec; diff --git a/lib/libc/gen/timezone.c b/lib/libc/gen/timezone.c index c59ae6b6087..5f0fa667ea4 100644 --- a/lib/libc/gen/timezone.c +++ b/lib/libc/gen/timezone.c @@ -40,7 +40,7 @@ __FBSDID("$FreeBSD$"); #include #define TZ_MAX_CHARS 255 -char *_tztab(); +char *_tztab(int, int); /* * timezone -- @@ -53,9 +53,7 @@ char *_tztab(); static char czone[TZ_MAX_CHARS]; /* space for zone name */ char * -timezone(zone, dst) - int zone, - dst; +timezone(int zone, int dst) { char *beg, *end; @@ -106,9 +104,7 @@ static struct zone { * STANDARD LIBRARY. */ char * -_tztab(zone,dst) - int zone; - int dst; +_tztab(int zone, int dst) { struct zone *zp; char sign; diff --git a/lib/libc/gen/tzset.3 b/lib/libc/gen/tzset.3 index 34ca238e1c1..8d37fcaf9db 100644 --- a/lib/libc/gen/tzset.3 +++ b/lib/libc/gen/tzset.3 @@ -310,14 +310,14 @@ time zone directory rules for .Tn POSIX Ns -style .Tn TZ Ns 's -.It Pa /usr/share/zoneinfo/GMT +.It Pa /usr/share/zoneinfo/Etc/GMT for .Tn UTC leap seconds .El .Pp If the file -.Pa /usr/share/zoneinfo/GMT +.Pa /usr/share/zoneinfo/UTC does not exist, .Tn UTC leap seconds are loaded from diff --git a/lib/libc/gen/usleep.c b/lib/libc/gen/usleep.c index 0454665b280..7d6559be22a 100644 --- a/lib/libc/gen/usleep.c +++ b/lib/libc/gen/usleep.c @@ -39,8 +39,7 @@ __FBSDID("$FreeBSD$"); #include "un-namespace.h" int -__usleep(useconds) - useconds_t useconds; +__usleep(useconds_t useconds) { struct timespec time_to_sleep; diff --git a/lib/libc/gen/wordexp.c b/lib/libc/gen/wordexp.c index 06abdc796ae..bcab1f5e815 100644 --- a/lib/libc/gen/wordexp.c +++ b/lib/libc/gen/wordexp.c @@ -320,7 +320,7 @@ we_check(const char *words, int flags) if (c == '\0' || level != 0) return (WRDE_SYNTAX); } else - c = *--words; + --words; break; default: break; diff --git a/lib/libc/gmon/gmon.c b/lib/libc/gmon/gmon.c index dd85eec48c1..fe769e88bdc 100644 --- a/lib/libc/gmon/gmon.c +++ b/lib/libc/gmon/gmon.c @@ -132,7 +132,7 @@ monstartup(lowpc, highpc) } void -_mcleanup() +_mcleanup(void) { int fd; int fromindex; diff --git a/lib/libc/include/libc_private.h b/lib/libc/include/libc_private.h index 50903f3c74f..cb0b40740f4 100644 --- a/lib/libc/include/libc_private.h +++ b/lib/libc/include/libc_private.h @@ -34,6 +34,7 @@ #ifndef _LIBC_PRIVATE_H_ #define _LIBC_PRIVATE_H_ +#include /* * This global flag is non-zero when a process has created one @@ -126,6 +127,8 @@ typedef enum { PJT_SETSPECIFIC, PJT_SIGMASK, PJT_TESTCANCEL, + PJT_CLEANUP_POP_IMP, + PJT_CLEANUP_PUSH_IMP, PJT_MAX } pjt_index_t; @@ -146,6 +149,12 @@ int _yp_check(char **); */ void _init_tls(void); +/* + * Provides pthread_once()-like functionality for both single-threaded + * and multi-threaded applications. + */ +int _once(pthread_once_t *, void (*)(void)); + /* * Set the TLS thread pointer */ diff --git a/lib/libc/locale/isgraph.3 b/lib/libc/locale/isgraph.3 index 4ba78e3c4d9..5e06e2e498d 100644 --- a/lib/libc/locale/isgraph.3 +++ b/lib/libc/locale/isgraph.3 @@ -50,7 +50,7 @@ The function tests for any printing character except space .Pq Ql "\ " and other -locale specific space-like characters. +locale-specific space-like characters. The value of the argument must be representable as an .Vt "unsigned char" or the value of diff --git a/lib/libc/locale/isprint.3 b/lib/libc/locale/isprint.3 index f3408501c29..d8adf1da37f 100644 --- a/lib/libc/locale/isprint.3 +++ b/lib/libc/locale/isprint.3 @@ -47,7 +47,7 @@ .Sh DESCRIPTION The .Fn isprint -function tests for any printing character including space +function tests for any printing character, including space .Pq Ql "\ " . The value of the argument must be representable as an .Vt "unsigned char" diff --git a/lib/libc/locale/nl_langinfo.3 b/lib/libc/locale/nl_langinfo.3 index 8de168206c2..789cac24fd1 100644 --- a/lib/libc/locale/nl_langinfo.3 +++ b/lib/libc/locale/nl_langinfo.3 @@ -53,7 +53,7 @@ with a category corresponding to the category of or to the category .Dv LC_ALL , -may overwrite buffer pointed by the return value. +may overwrite the buffer pointed to by the return value. .Sh RETURN VALUES In a locale where langinfo data is not defined, .Fn nl_langinfo diff --git a/lib/libc/net/getnameinfo.c b/lib/libc/net/getnameinfo.c index 0b595866add..ffd34a137ec 100644 --- a/lib/libc/net/getnameinfo.c +++ b/lib/libc/net/getnameinfo.c @@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -385,6 +386,7 @@ getnameinfo_link(const struct sockaddr *sa, socklen_t salen, { const struct sockaddr_dl *sdl = (const struct sockaddr_dl *)(const void *)sa; + const struct fw_hwaddr *iha; int n; if (serv != NULL && servlen > 0) @@ -400,6 +402,15 @@ getnameinfo_link(const struct sockaddr *sa, socklen_t salen, } switch (sdl->sdl_type) { + case IFT_IEEE1394: + if (sdl->sdl_alen < sizeof(iha->sender_unique_ID_hi) + + sizeof(iha->sender_unique_ID_lo)) + return EAI_FAMILY; + iha = (const struct fw_hwaddr *)(const void *)LLADDR(sdl); + return hexname((const u_int8_t *)&iha->sender_unique_ID_hi, + sizeof(iha->sender_unique_ID_hi) + + sizeof(iha->sender_unique_ID_lo), + host, hostlen); /* * The following have zero-length addresses. * IFT_ATM (net/if_atmsubr.c) diff --git a/lib/libc/net/sctp_send.3 b/lib/libc/net/sctp_send.3 index 230173024f0..2191ea12bba 100644 --- a/lib/libc/net/sctp_send.3 +++ b/lib/libc/net/sctp_send.3 @@ -111,7 +111,7 @@ The argument is an opaque 32 bit value that is passed transparently through the stack to the peer endpoint. It will be available on reception of a message (see -.Xr sctp_recvmsg 2 ) . +.Xr sctp_recvmsg 3 ) . Note that the stack passes this value without regard to byte order. .Pp diff --git a/lib/libc/net/sctp_sendmsg.3 b/lib/libc/net/sctp_sendmsg.3 index 61eec224cad..6c48d5ed38a 100644 --- a/lib/libc/net/sctp_sendmsg.3 +++ b/lib/libc/net/sctp_sendmsg.3 @@ -103,13 +103,13 @@ is set to the message is not transmitted. .Pp No indication of failure to deliver is implicit in a -.Xr sctp_sendmsg 2 +.Xr sctp_sendmsg 3 call. Locally detected errors are indicated by a return value of -1. .Pp If no space is available at the socket to hold the message to be transmitted, then -.Xr sctp_sendmsg 2 +.Xr sctp_sendmsg 3 normally blocks, unless the socket has been placed in non-blocking I/O mode. The @@ -123,7 +123,7 @@ argument is an opaque 32 bit value that is passed transparently through the stack to the peer endpoint. It will be available on reception of a message (see -.Xr sctp_recvmsg 2 ) . +.Xr sctp_recvmsg 3 ) . Note that the stack passes this value without regard to byte order. .Pp diff --git a/lib/libc/nls/es_ES.ISO8859-1.msg b/lib/libc/nls/es_ES.ISO8859-1.msg index 8fc9c7df2ac..2687c177fd5 100644 --- a/lib/libc/nls/es_ES.ISO8859-1.msg +++ b/lib/libc/nls/es_ES.ISO8859-1.msg @@ -62,7 +62,7 @@ $ EFBIG $ ENOSPC 28 No queda espacio libre en el dispositivo $ ESPIPE -29 Illegal seek +29 Búsqueda ilegal $ EROFS 30 Sistema de ficheros de solo lectura $ EMLINK @@ -88,7 +88,7 @@ $ EMSGSIZE $ EPROTOTYPE 41 Tipo erróneo de protocolo para el socket $ ENOPROTOOPT -42 protocolo no disponible +42 Protocolo no disponible $ EPROTONOSUPPORT 43 Protocolo no contemplado $ ESOCKTNOSUPPORT @@ -176,23 +176,33 @@ $ EOVERFLOW $ ECANCELED 85 Operación cancelada $ EILSEQ -86 Illegal byte sequence +86 Secuencia de bytes ilegal $ ENOATTR 87 Atributo no encontrado $ EDOOFUS 88 Error de programación +$ EBADMSG +89 Mensaje inválido +$ EMULTIHOP +90 Intento de hop multiple +$ ENOLINK +91 El enlace se ha roto +$ EPROTO +92 Fallo de protocolo +$ ENOTCAPABLE +93 Habilidades insuficientes $ $ strsignal() support catalog $ $set 2 $ SIGHUP -1 Fín de línea (Hangup) +1 Fin de línea (Hangup) $ SIGINT 2 Interrumpido $ SIGQUIT 3 Terminado $ SIGILL -4 Illegal instruction +4 Instrucción ilegal $ SIGTRAP 5 Trace/BPT trap $ SIGABRT @@ -247,3 +257,39 @@ $ SIGUSR1 30 Señal definida por el usuario n1 $ SIGUSR2 31 Señal definida por el usuario n2 +$ +$ gai_strerror() support catalog +$ +$set 3 +$ 1 (obsoleto) +1 Tipo de dirección no contemplado +$ EAI_AGAIN +2 Error transitorio en la resolución de nombres +$ EAI_BADFLAGS +3 Valor inválido de ai_flags +$ EAI_FAIL +4 Error no recuperable en la resolución de nombres +$ EAI_FAMILY +5 ai_family no contemplado +$ EAI_MEMORY +6 Error en la asignación de memoria +$ 7 (obsoleto) +7 No hay dirección asociada con el nombre de máquina +$ EAI_NONAME +8 No se dispone nombre de máquina, ni nombre de servicio +$ EAI_SERVICE +9 Nombre de servicio no contemplado en ai_socktype +$ EAI_SOCKTYPE +10 ai_socktype no contemplado +$ EAI_SYSTEM +11 Error de sistema devuelto en errno +$ EAI_BADHINTS +12 Valor inválido de hints +$ EAI_PROTOCOL +13 Protocolo resuelto desconocido +$ EAI_OVERFLOW +14 Búfer de argumentos sobrepasado +$ 0 +32766 Éxito +$ NL_MSGMAX +32767 Error desconocido diff --git a/lib/libc/nls/hu_HU.ISO8859-2.msg b/lib/libc/nls/hu_HU.ISO8859-2.msg index 90b597b2c51..330d486a7b8 100644 --- a/lib/libc/nls/hu_HU.ISO8859-2.msg +++ b/lib/libc/nls/hu_HU.ISO8859-2.msg @@ -181,6 +181,16 @@ $ ENOATTR 87 Attribútum nem található $ EDOOFUS 88 Programozási hiba +$ EBADMSG +89 Helytelen üzenet +$ EMULTIHOP +90 Multihop kísérlet +$ ENOLINK +91 A kapcsolat szigorítva lett +$ EPROTO +92 Protokol hiba +$ ENOTCAPABLE +93 Elégtelen képességek $ $ strsignal() support catalog $ @@ -247,3 +257,39 @@ $ SIGUSR1 30 Felhasználói szignál 1 $ SIGUSR2 31 Felhasználói szignál 2 +$ +$ gai_strerror() support catalog +$ +$set 3 +$ 1 (elavult) +1 A hosztnévhez tartozó címcsalád nem támogatott +$ EAI_AGAIN +2 Ideiglenes hiba a névfeloldáskor +$ EAI_BADFLAGS +3 Érvénytelen ai_flags érték +$ EAI_FAIL +4 Nem helyreállítható hiba a névfeloldásban +$ EAI_FAMILY +5 ai_family nem támogatott +$ EAI_MEMORY +6 Memóriafoglalási hiba +$ 7 (elavult) +7 Nem tartozik cím í hosztnévhez +$ EAI_NONAME +8 Se hosztnév, se szolgáltatásnév nem áll rendelkezésre +$ EAI_SERVICE +9 Nem támogatott ai_socktype szolgáltatásnév +$ EAI_SOCKTYPE +10 ai_socktype nem támogatott +$ EAI_SYSTEM +11 Rendszerhiba jött vissza az errno változóban +$ EAI_BADHINTS +12 Érvénytelen hint érték +$ EAI_PROTOCOL +13 A feloldott protokol ismeretlen +$ EAI_OVERFLOW +14 Az argumentumok puffere túlcsordult +$ 0 +32766 Siker +$ NL_MSGMAX +32767 Ismeretlen hiba diff --git a/lib/libc/nls/ko_KR.UTF-8.msg b/lib/libc/nls/ko_KR.UTF-8.msg index 4fc4e78e624..60e8a121dfe 100644 --- a/lib/libc/nls/ko_KR.UTF-8.msg +++ b/lib/libc/nls/ko_KR.UTF-8.msg @@ -181,6 +181,16 @@ $ ENOATTR 87 ì†ì„±ì„ ì°¾ì„ ìˆ˜ 없습니다 $ EDOOFUS 88 í”„ë¡œê·¸ëž¨ìƒ ì˜¤ë¥˜ìž…ë‹ˆë‹¤ +$ EBADMSG +89 ìž˜ëª»ëœ ë©”ì‹œì§€ìž…ë‹ˆë‹¤ +$ EMULTIHOP +90 ë©€í‹°í™‰ì´ ì‹œë„ë˜ì—ˆìŠµë‹ˆë‹¤ +$ ENOLINK +91 ì—°ê²°ì´ ëŠê²¼ìŠµë‹ˆë‹¤ +$ EPROTO +92 í”„ë¡œí† ì½œì´ ìž˜ëª»ë˜ì—ˆìŠµë‹ˆë‹¤ +$ ENOTCAPABLE +93 ì ‘ê·¼ ëŠ¥ë ¥ì´ ì¶©ë¶„ì¹˜ 않습니다 $ $ strsignal() support catalog $ @@ -230,7 +240,7 @@ $ SIGTTIN $ SIGTTOU 22 ì •ì§€ (í„°ë¯¸ë„ ì¶œë ¥) $ SIGIO -23 I/O possible +23 I/O 가능 $ SIGXCPU 24 CPU 사용 시간 초과 $ SIGXFSZ @@ -247,3 +257,39 @@ $ SIGUSR1 30 ì‚¬ìš©ìž ì •ì˜ ì‹œê·¸ë„ 1 $ SIGUSR2 31 ì‚¬ìš©ìž ì •ì˜ ì‹œê·¸ë„ 2 +$ +$ gai_strerror() support catalog +$ +$set 3 +$ 1 (obsolete) +1 호스트 ì´ë¦„ì´ ì§€ì›í•˜ì§€ 않는 주소군입니다 +$ EAI_AGAIN +2 주소 ë³€í™˜ì— ì¼ì‹œì ìœ¼ë¡œ 실패했습니다 +$ EAI_BADFLAGS +3 ìž˜ëª»ëœ ai_flags입니다 +$ EAI_FAIL +4 주소 ë³€í™˜ì— ì™„ì „ížˆ 실패했습니다 +$ EAI_FAMILY +5 ì§€ì›ë˜ì§€ 않는 ai_family입니다 +$ EAI_MEMORY +6 메모리 í• ë‹¹ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤ +$ 7 (obsolete) +7 호스트 ì´ë¦„ê³¼ ì¼ì¹˜í•˜ëŠ” 주소가 없습니다 +$ EAI_NONAME +8 호스트 ì´ë¦„ ë˜ëŠ” 서비스 ì´ë¦„ì´ ì§€ì •ë˜ì§€ 않았거나 알 수 없습니다 +$ EAI_SERVICE +9 서비스 ì´ë¦„ì€ ai_socktypeì—서 ì§€ì›ë˜ì§€ 않습니다 +$ EAI_SOCKTYPE +10 ì§€ì›ë˜ì§€ 않는 ai_socktype입니다 +$ EAI_SYSTEM +11 시스템 오류가 errnoì— ë°˜í™˜ë˜ì—ˆìŠµë‹ˆë‹¤ +$ EAI_BADHINTS +12 ìž˜ëª»ëœ hints입니다 +$ EAI_PROTOCOL +13 알 수 없는 í”„ë¡œí† ì½œì´ ë³€í™˜ë˜ì—ˆìŠµë‹ˆë‹¤ +$ EAI_OVERFLOW +14 ì¸ìž ë²„í¼ ê³µê°„ì´ ëª¨ìžëžë‹ˆë‹¤ +$ 0 +32766 성공 +$ NL_MSGMAX +32767 알 수 없는 오류 diff --git a/lib/libc/nls/ko_KR.eucKR.msg b/lib/libc/nls/ko_KR.eucKR.msg index c2ca1a06b18..bb1fa300b16 100644 --- a/lib/libc/nls/ko_KR.eucKR.msg +++ b/lib/libc/nls/ko_KR.eucKR.msg @@ -181,6 +181,16 @@ $ ENOATTR 87 ¼Ó¼ºÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù $ EDOOFUS 88 ÇÁ·Î±×·¥»ó ¿À·ùÀÔ´Ï´Ù +$ EBADMSG +89 À߸øµÈ ¸Þ½ÃÁöÀÔ´Ï´Ù +$ EMULTIHOP +90 ¸ÖƼȩÀÌ ½ÃµµµÇ¾ú½À´Ï´Ù +$ ENOLINK +91 ¿¬°áÀÌ ²÷°å½À´Ï´Ù +$ EPROTO +92 ÇÁ·ÎÅäÄÝÀÌ À߸øµÇ¾ú½À´Ï´Ù +$ ENOTCAPABLE +93 Á¢±Ù ´É·ÂÀÌ ÃæºÐÄ¡ ¾Ê½À´Ï´Ù $ $ strsignal() support catalog $ @@ -230,7 +240,7 @@ $ SIGTTIN $ SIGTTOU 22 Á¤Áö (Å͹̳ΠÃâ·Â) $ SIGIO -23 I/O possible +23 I/O °¡´É $ SIGXCPU 24 CPU »ç¿ë ½Ã°£ Ãʰú $ SIGXFSZ @@ -247,3 +257,39 @@ $ SIGUSR1 30 »ç¿ëÀÚ Á¤ÀÇ ½Ã±×³Î 1 $ SIGUSR2 31 »ç¿ëÀÚ Á¤ÀÇ ½Ã±×³Î 2 +$ +$ gai_strerror() support catalog +$ +$set 3 +$ 1 (obsolete) +1 È£½ºÆ® À̸§ÀÌ Áö¿øÇÏÁö ¾Ê´Â ÁÖ¼Ò±ºÀÔ´Ï´Ù +$ EAI_AGAIN +2 ÁÖ¼Ò º¯È¯¿¡ ÀϽÃÀûÀ¸·Î ½ÇÆÐÇß½À´Ï´Ù +$ EAI_BADFLAGS +3 À߸øµÈ ai_flagsÀÔ´Ï´Ù +$ EAI_FAIL +4 ÁÖ¼Ò º¯È¯¿¡ ¿ÏÀüÈ÷ ½ÇÆÐÇß½À´Ï´Ù +$ EAI_FAMILY +5 Áö¿øµÇÁö ¾Ê´Â ai_familyÀÔ´Ï´Ù +$ EAI_MEMORY +6 ¸Þ¸ð¸® ÇÒ´ç¿¡ ½ÇÆÐÇß½À´Ï´Ù +$ 7 (obsolete) +7 È£½ºÆ® À̸§°ú ÀÏÄ¡ÇÏ´Â ÁÖ¼Ò°¡ ¾ø½À´Ï´Ù +$ EAI_NONAME +8 È£½ºÆ® À̸§ ¶Ç´Â ¼­ºñ½º À̸§ÀÌ ÁöÁ¤µÇÁö ¾Ê¾Ò°Å³ª ¾Ë ¼ö ¾ø½À´Ï´Ù +$ EAI_SERVICE +9 ¼­ºñ½º À̸§Àº ai_socktype¿¡¼­ Áö¿øµÇÁö ¾Ê½À´Ï´Ù +$ EAI_SOCKTYPE +10 Áö¿øµÇÁö ¾Ê´Â ai_socktypeÀÔ´Ï´Ù +$ EAI_SYSTEM +11 ½Ã½ºÅÛ ¿À·ù°¡ errno¿¡ ¹ÝȯµÇ¾ú½À´Ï´Ù +$ EAI_BADHINTS +12 À߸øµÈ hintsÀÔ´Ï´Ù +$ EAI_PROTOCOL +13 ¾Ë ¼ö ¾ø´Â ÇÁ·ÎÅäÄÝÀÌ º¯È¯µÇ¾ú½À´Ï´Ù +$ EAI_OVERFLOW +14 ÀÎÀÚ ¹öÆÛ °ø°£ÀÌ ¸ðÀÚ¶ø´Ï´Ù +$ 0 +32766 ¼º°ø +$ NL_MSGMAX +32767 ¾Ë ¼ö ¾ø´Â ¿À·ù diff --git a/lib/libc/posix1e/Makefile.inc b/lib/libc/posix1e/Makefile.inc index c9e78bda89d..30e39864a0e 100644 --- a/lib/libc/posix1e/Makefile.inc +++ b/lib/libc/posix1e/Makefile.inc @@ -119,3 +119,5 @@ MLINKS+=acl_create_entry.3 acl_create_entry_np.3\ mac_set.3 mac_set_proc.3 \ mac_text.3 mac_from_text.3 \ mac_text.3 mac_to_text.3 + +CLEANFILES+= subr_acl_nfs4.c diff --git a/lib/libc/posix1e/acl_delete_entry.c b/lib/libc/posix1e/acl_delete_entry.c index 7dd60b82182..09b450729aa 100644 --- a/lib/libc/posix1e/acl_delete_entry.c +++ b/lib/libc/posix1e/acl_delete_entry.c @@ -75,6 +75,7 @@ int acl_delete_entry(acl_t acl, acl_entry_t entry_d) { struct acl *acl_int; + struct acl_entry entry_int; int i, j, found = 0; if (acl == NULL || entry_d == NULL) { @@ -94,8 +95,12 @@ acl_delete_entry(acl_t acl, acl_entry_t entry_d) errno = EINVAL; return (-1); } + + /* Use a local copy to prevent deletion of more than this entry */ + entry_int = *entry_d; + for (i = 0; i < acl->ats_acl.acl_cnt;) { - if (_entry_matches(&(acl->ats_acl.acl_entry[i]), entry_d)) { + if (_entry_matches(&(acl->ats_acl.acl_entry[i]), &entry_int)) { /* ...shift the remaining entries... */ for (j = i; j < acl->ats_acl.acl_cnt - 1; ++j) acl->ats_acl.acl_entry[j] = diff --git a/lib/libc/posix1e/acl_from_text.c b/lib/libc/posix1e/acl_from_text.c index 98c54261d55..c600987f9f6 100644 --- a/lib/libc/posix1e/acl_from_text.c +++ b/lib/libc/posix1e/acl_from_text.c @@ -257,6 +257,7 @@ acl_from_text(const char *buf_p) } #endif + free(mybuf_p); return(acl); error_label: diff --git a/lib/libc/posix1e/acl_to_text.c b/lib/libc/posix1e/acl_to_text.c index 79a950a543c..e5fd1f79d1c 100644 --- a/lib/libc/posix1e/acl_to_text.c +++ b/lib/libc/posix1e/acl_to_text.c @@ -39,7 +39,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include "acl_support.h" @@ -58,7 +57,7 @@ _posix1e_acl_to_text(acl_t acl, ssize_t *len_p, int flags) { struct acl *acl_int; char *buf, *tmpbuf; - char name_buf[UT_NAMESIZE+1]; + char name_buf[MAXLOGNAME]; char perm_buf[_POSIX1E_ACL_STRING_PERM_MAXSIZE+1], effective_perm_buf[_POSIX1E_ACL_STRING_PERM_MAXSIZE+1]; int i, error, len; @@ -103,7 +102,7 @@ _posix1e_acl_to_text(acl_t acl, ssize_t *len_p, int flags) goto error_label; error = _posix1e_acl_id_to_name(ae_tag, ae_id, - UT_NAMESIZE+1, name_buf, flags); + MAXLOGNAME, name_buf, flags); if (error) goto error_label; @@ -163,7 +162,7 @@ _posix1e_acl_to_text(acl_t acl, ssize_t *len_p, int flags) goto error_label; error = _posix1e_acl_id_to_name(ae_tag, ae_id, - UT_NAMESIZE+1, name_buf, flags); + MAXLOGNAME, name_buf, flags); if (error) goto error_label; diff --git a/lib/libc/rpc/clnt_raw.c b/lib/libc/rpc/clnt_raw.c index 9d34a3d445c..cd3a384ea3c 100644 --- a/lib/libc/rpc/clnt_raw.c +++ b/lib/libc/rpc/clnt_raw.c @@ -92,13 +92,13 @@ clnt_raw_create(prog, vers) rpcprog_t prog; rpcvers_t vers; { - struct clntraw_private *clp = clntraw_private; + struct clntraw_private *clp; struct rpc_msg call_msg; - XDR *xdrs = &clp->xdr_stream; - CLIENT *client = &clp->client_object; + XDR *xdrs; + CLIENT *client; mutex_lock(&clntraw_lock); - if (clp == NULL) { + if ((clp = clntraw_private) == NULL) { clp = (struct clntraw_private *)calloc(1, sizeof (*clp)); if (clp == NULL) { mutex_unlock(&clntraw_lock); @@ -110,6 +110,9 @@ clnt_raw_create(prog, vers) clp->_raw_buf = __rpc_rawcombuf; clntraw_private = clp; } + xdrs = &clp->xdr_stream; + client = &clp->client_object; + /* * pre-serialize the static part of the call msg and stash it away */ diff --git a/lib/libc/rpc/getnetconfig.c b/lib/libc/rpc/getnetconfig.c index 9baa22495c5..e5db51ac3a3 100644 --- a/lib/libc/rpc/getnetconfig.c +++ b/lib/libc/rpc/getnetconfig.c @@ -412,13 +412,13 @@ void *handlep; * Noone needs these entries anymore, then frees them. * Make sure all info in netconfig_info structure has been reinitialized. */ - q = p = ni.head; + q = ni.head; ni.eof = ni.ref = 0; ni.head = NULL; ni.tail = NULL; mutex_unlock(&ni_lock); - while (q) { + while (q != NULL) { p = q->next; if (q->ncp->nc_lookups != NULL) free(q->ncp->nc_lookups); free(q->ncp); diff --git a/lib/libc/rpc/getnetpath.c b/lib/libc/rpc/getnetpath.c index 0563544df2a..d1ea554aa7b 100644 --- a/lib/libc/rpc/getnetpath.c +++ b/lib/libc/rpc/getnetpath.c @@ -101,7 +101,7 @@ setnetpath() if ((np_sessionp->nc_handlep = setnetconfig()) == NULL) { free(np_sessionp); syslog (LOG_ERR, "rpc: failed to open " NETCONFIG); - goto failed; + return (NULL); } np_sessionp->valid = NP_VALID; np_sessionp->ncp_list = NULL; diff --git a/lib/libc/rpc/getrpcent.c b/lib/libc/rpc/getrpcent.c index abee480b35f..1f198fa9a0b 100644 --- a/lib/libc/rpc/getrpcent.c +++ b/lib/libc/rpc/getrpcent.c @@ -698,7 +698,7 @@ rpc_marshal_func(char *buffer, size_t *buffer_size, void *retval, va_list ap, return (NS_RETURN); } - memcpy(&new_rpc, rpc, sizeof(struct rpcent)); + new_rpc = *rpc; *buffer_size = desired_size; memset(buffer, 0, desired_size); diff --git a/lib/libc/rpc/key_call.c b/lib/libc/rpc/key_call.c index 615f24d9e86..6cc1139ab52 100644 --- a/lib/libc/rpc/key_call.c +++ b/lib/libc/rpc/key_call.c @@ -302,7 +302,7 @@ int vers; void *localhandle; struct netconfig *nconf; struct netconfig *tpconf; - struct key_call_private *kcp = key_call_private_main; + struct key_call_private *kcp; struct timeval wait_time; struct utsname u; int main_thread; diff --git a/lib/libc/rpc/svc.c b/lib/libc/rpc/svc.c index d2051218f49..282c2be2e19 100644 --- a/lib/libc/rpc/svc.c +++ b/lib/libc/rpc/svc.c @@ -627,8 +627,8 @@ svc_getreqset(readfds) maskp = readfds->fds_bits; for (sock = 0; sock < FD_SETSIZE; sock += NFDBITS) { - for (mask = *maskp++; (bit = ffs(mask)) != 0; - mask ^= (1 << (bit - 1))) { + for (mask = *maskp++; (bit = ffsl(mask)) != 0; + mask ^= (1ul << (bit - 1))) { /* sock has input waiting */ fd = sock + bit - 1; svc_getreq_common(fd); diff --git a/lib/libc/rpc/svc_raw.c b/lib/libc/rpc/svc_raw.c index 7492046a888..67bcba1c868 100644 --- a/lib/libc/rpc/svc_raw.c +++ b/lib/libc/rpc/svc_raw.c @@ -176,9 +176,8 @@ svc_raw_reply(xprt, msg) msg->acpted_rply.ar_results.proc = (xdrproc_t) xdr_void; msg->acpted_rply.ar_results.where = NULL; - if (!xdr_replymsg(xdrs, msg) || - !SVCAUTH_WRAP(&SVC_AUTH(xprt), xdrs, xdr_proc, xdr_where)) - stat = FALSE; + stat = xdr_replymsg(xdrs, msg) && + SVCAUTH_WRAP(&SVC_AUTH(xprt), xdrs, xdr_proc, xdr_where); } else { stat = xdr_replymsg(xdrs, msg); } diff --git a/lib/libc/stdio/fgetws.c b/lib/libc/stdio/fgetws.c index bbc0299d773..550843dff67 100644 --- a/lib/libc/stdio/fgetws.c +++ b/lib/libc/stdio/fgetws.c @@ -89,7 +89,7 @@ fgetws(wchar_t * __restrict ws, int n, FILE * __restrict fp) if (!__mbsinit(&fp->_mbstate)) /* Incomplete character */ goto error; - *wsp++ = L'\0'; + *wsp = L'\0'; FUNLOCKFILE(fp); return (ws); diff --git a/lib/libc/stdio/findfp.c b/lib/libc/stdio/findfp.c index 586e15c4f8b..5bc4af73a35 100644 --- a/lib/libc/stdio/findfp.c +++ b/lib/libc/stdio/findfp.c @@ -168,7 +168,7 @@ __warn_references(f_prealloc, "warning: this program uses f_prealloc(), which is not recommended."); void -f_prealloc() +f_prealloc(void) { struct glue *g; int n; diff --git a/lib/libc/stdio/funopen.c b/lib/libc/stdio/funopen.c index 9535340cb26..573589f14d5 100644 --- a/lib/libc/stdio/funopen.c +++ b/lib/libc/stdio/funopen.c @@ -42,11 +42,11 @@ __FBSDID("$FreeBSD$"); #include "local.h" FILE * -funopen(cookie, readfn, writefn, seekfn, closefn) - const void *cookie; - int (*readfn)(), (*writefn)(); - fpos_t (*seekfn)(void *cookie, fpos_t off, int whence); - int (*closefn)(); +funopen(const void *cookie, + int (*readfn)(void *, char *, int), + int (*writefn)(void *, const char *, int), + fpos_t (*seekfn)(void *, fpos_t, int), + int (*closefn)(void *)) { FILE *fp; int flags; diff --git a/lib/libc/stdio/fvwrite.c b/lib/libc/stdio/fvwrite.c index fd69eb95420..7206676869e 100644 --- a/lib/libc/stdio/fvwrite.c +++ b/lib/libc/stdio/fvwrite.c @@ -60,7 +60,7 @@ __sfvwrite(fp, uio) char *nl; int nlknown, nldist; - if ((len = uio->uio_resid) == 0) + if (uio->uio_resid == 0) return (0); /* make sure we can write */ if (prepwrite(fp) != 0) diff --git a/lib/libc/stdio/getline.3 b/lib/libc/stdio/getline.3 index 0465f9350ee..a5b39da4251 100644 --- a/lib/libc/stdio/getline.3 +++ b/lib/libc/stdio/getline.3 @@ -78,7 +78,8 @@ and .Fn getline functions return the number of characters written, excluding the terminating -.Dv NUL . +.Dv NUL +character. The value \-1 is returned if an error occurs, or if end-of-file is reached. .Sh EXAMPLES The following code fragment reads lines from a file and diff --git a/lib/libc/stdio/printf.3 b/lib/libc/stdio/printf.3 index 27d5bf0d7e0..2587aa2f0d9 100644 --- a/lib/libc/stdio/printf.3 +++ b/lib/libc/stdio/printf.3 @@ -32,7 +32,7 @@ .\" @(#)printf.3 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd March 3, 2009 +.Dd December 2, 2009 .Dt PRINTF 3 .Os .Sh NAME @@ -55,7 +55,7 @@ .Ft int .Fn asprintf "char **ret" "const char *format" ... .Ft int -.Fn dprintf "int" "const char * restrict format" ... +.Fn dprintf "int fd" "const char * restrict format" ... .In stdarg.h .Ft int .Fn vprintf "const char * restrict format" "va_list ap" diff --git a/lib/libc/stdio/sprintf.c b/lib/libc/stdio/sprintf.c index aaaae5535d2..b55bd6cfa2c 100644 --- a/lib/libc/stdio/sprintf.c +++ b/lib/libc/stdio/sprintf.c @@ -46,17 +46,9 @@ sprintf(char * __restrict str, char const * __restrict fmt, ...) { int ret; va_list ap; - FILE f; - f._file = -1; - f._flags = __SWR | __SSTR; - f._bf._base = f._p = (unsigned char *)str; - f._bf._size = f._w = INT_MAX; - f._orientation = 0; - memset(&f._mbstate, 0, sizeof(mbstate_t)); va_start(ap, fmt); - ret = __vfprintf(&f, fmt, ap); + ret = vsprintf(str, fmt, ap); va_end(ap); - *f._p = 0; return (ret); } diff --git a/lib/libc/stdio/sscanf.c b/lib/libc/stdio/sscanf.c index 3c792e054ba..c793b86699c 100644 --- a/lib/libc/stdio/sscanf.c +++ b/lib/libc/stdio/sscanf.c @@ -41,37 +41,14 @@ __FBSDID("$FreeBSD$"); #include #include "local.h" -static int eofread(void *, char *, int); - -/* ARGSUSED */ -static int -eofread(cookie, buf, len) - void *cookie; - char *buf; - int len; -{ - - return (0); -} - int sscanf(const char * __restrict str, char const * __restrict fmt, ...) { int ret; va_list ap; - FILE f; - f._file = -1; - f._flags = __SRD; - f._bf._base = f._p = (unsigned char *)str; - f._bf._size = f._r = strlen(str); - f._read = eofread; - f._ub._base = NULL; - f._lb._base = NULL; - f._orientation = 0; - memset(&f._mbstate, 0, sizeof(mbstate_t)); va_start(ap, fmt); - ret = __svfscanf(&f, fmt, ap); + ret = vsscanf(str, fmt, ap); va_end(ap); return (ret); } diff --git a/lib/libc/stdio/vfwprintf.c b/lib/libc/stdio/vfwprintf.c index f3768de8d19..d34f559a8f3 100644 --- a/lib/libc/stdio/vfwprintf.c +++ b/lib/libc/stdio/vfwprintf.c @@ -293,7 +293,7 @@ __mbsconv(char *mbsarg, int prec) * number of characters to print. */ p = mbsarg; - insize = nchars = 0; + insize = nchars = nconv = 0; mbs = initial_mbs; while (nchars != (size_t)prec) { nconv = mbrlen(p, MB_CUR_MAX, &mbs); diff --git a/lib/libc/stdio/vsscanf.c b/lib/libc/stdio/vsscanf.c index e5e96917b42..22b5d2bdac0 100644 --- a/lib/libc/stdio/vsscanf.c +++ b/lib/libc/stdio/vsscanf.c @@ -45,20 +45,15 @@ eofread(void *, char *, int); /* ARGSUSED */ static int -eofread(cookie, buf, len) - void *cookie; - char *buf; - int len; +eofread(void *cookie, char *buf, int len) { return (0); } int -vsscanf(str, fmt, ap) - const char * __restrict str; - const char * __restrict fmt; - __va_list ap; +vsscanf(const char * __restrict str, const char * __restrict fmt, + __va_list ap) { FILE f; diff --git a/lib/libc/stdio/xprintf_time.c b/lib/libc/stdio/xprintf_time.c index 81697f165a4..9d732fe4f41 100644 --- a/lib/libc/stdio/xprintf_time.c +++ b/lib/libc/stdio/xprintf_time.c @@ -64,7 +64,6 @@ __printf_render_time(struct __printf_io *io, const struct printf_info *pi, const intmax_t t, tx; int i, prec, nsec; - prec = 0; if (pi->is_long) { tv = *((struct timeval **)arg[0]); t = tv->tv_sec; @@ -78,6 +77,8 @@ __printf_render_time(struct __printf_io *io, const struct printf_info *pi, const } else { tp = *((time_t **)arg[0]); t = *tp; + nsec = 0; + prec = 0; } p = buf; diff --git a/lib/libc/stdlib/getenv.3 b/lib/libc/stdlib/getenv.3 index 33d9c36f3a7..fd7d856f048 100644 --- a/lib/libc/stdlib/getenv.3 +++ b/lib/libc/stdlib/getenv.3 @@ -107,6 +107,15 @@ function deletes all instances of the variable name pointed to by .Fa name from the list. +.Pp +If corruption (e.g., a name without a value) is detected while making a copy of +environ for internal usage, then +.Fn setenv , +.Fn unsetenv +and +.Fn putenv +will output a warning to stderr about the issue, drop the corrupt entry and +complete the task without error. .Sh RETURN VALUES The .Fn getenv @@ -159,15 +168,6 @@ The function or .Fn putenv failed because they were unable to allocate memory for the environment. -.It Bq Er EFAULT -The functions -.Fn setenv , -.Fn unsetenv -or -.Fn putenv -failed to make a valid copy of the environment due to the environment being -corrupt (i.e., a name without a value). A warning will be output to stderr with -information about the issue. .El .Sh SEE ALSO .Xr csh 1 , diff --git a/lib/libc/stdlib/getenv.c b/lib/libc/stdlib/getenv.c index 2abf7fc7b01..b7826d72a5d 100644 --- a/lib/libc/stdlib/getenv.c +++ b/lib/libc/stdlib/getenv.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2007-2008 Sean C. Farley + * Copyright (c) 2007-2009 Sean C. Farley * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -160,7 +160,7 @@ __findenv(const char *name, size_t nameLen, int *envNdx, bool onlyActive) /* * Find environment variable from end of array (more likely to be - * active). A variable created by putenv is always active or it is not + * active). A variable created by putenv is always active, or it is not * tracked in the array. */ for (ndx = *envNdx; ndx >= 0; ndx--) @@ -426,13 +426,14 @@ getenv(const char *name) } /* - * An empty environment (environ or its first value) regardless if - * environ has been copied before will return a NULL. + * Variable search order: + * 1. Check for an empty environ. This allows an application to clear + * the environment. + * 2. Search the external environ array. + * 3. Search the internal environment. * - * If the environment is not empty, find an environment variable via - * environ if environ has not been copied via an *env() call or been - * replaced by a running program, otherwise, use the rebuilt - * environment. + * Since malloc() depends upon getenv(), getenv() must never cause the + * internal environment storage to be generated. */ if (environ == NULL || environ[0] == NULL) return (NULL); diff --git a/lib/libc/stdlib/malloc.c b/lib/libc/stdlib/malloc.c index bdc26b657dc..e1b3f33c2c2 100644 --- a/lib/libc/stdlib/malloc.c +++ b/lib/libc/stdlib/malloc.c @@ -2419,7 +2419,7 @@ arena_run_reg_alloc(arena_run_t *run, arena_bin_t *bin) static inline void arena_run_reg_dalloc(arena_run_t *run, arena_bin_t *bin, void *ptr, size_t size) { - unsigned diff, regind, elm, bit; + unsigned shift, diff, regind, elm, bit; assert(run->magic == ARENA_RUN_MAGIC); @@ -2428,31 +2428,16 @@ arena_run_reg_dalloc(arena_run_t *run, arena_bin_t *bin, void *ptr, size_t size) * actual division here can reduce allocator throughput by over 20%! */ diff = (unsigned)((uintptr_t)ptr - (uintptr_t)run - bin->reg0_offset); - if ((size & (size - 1)) == 0) { - /* - * log2_table allows fast division of a power of two in the - * [1..128] range. - * - * (x / divisor) becomes (x >> log2_table[divisor - 1]). - */ - static const unsigned char log2_table[] = { - 0, 1, 0, 2, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7 - }; - if (size <= 128) - regind = (diff >> log2_table[size - 1]); - else if (size <= 32768) - regind = diff >> (8 + log2_table[(size >> 8) - 1]); - else - regind = diff / size; - } else if (size < qspace_max) { + /* Rescale (factor powers of 2 out of the numerator and denominator). */ + shift = ffs(size) - 1; + diff >>= shift; + size >>= shift; + + if (size == 1) { + /* The divisor was a power of 2. */ + regind = diff; + } else { /* * To divide by a number D that is not a power of two we * multiply by (2^21 / D) and then right shift by 21 positions. @@ -2461,78 +2446,32 @@ arena_run_reg_dalloc(arena_run_t *run, arena_bin_t *bin, void *ptr, size_t size) * * becomes * - * (X * qsize_invs[(D >> QUANTUM_2POW) - 3]) - * >> SIZE_INV_SHIFT + * (X * size_invs[D - 3]) >> SIZE_INV_SHIFT * * We can omit the first three elements, because we never - * divide by 0, and QUANTUM and 2*QUANTUM are both powers of - * two, which are handled above. + * divide by 0, and 1 and 2 are both powers of two, which are + * handled above. */ #define SIZE_INV_SHIFT 21 -#define QSIZE_INV(s) (((1U << SIZE_INV_SHIFT) / (s << QUANTUM_2POW)) + 1) - static const unsigned qsize_invs[] = { - QSIZE_INV(3), - QSIZE_INV(4), QSIZE_INV(5), QSIZE_INV(6), QSIZE_INV(7) -#if (QUANTUM_2POW < 4) - , - QSIZE_INV(8), QSIZE_INV(9), QSIZE_INV(10), QSIZE_INV(11), - QSIZE_INV(12),QSIZE_INV(13), QSIZE_INV(14), QSIZE_INV(15) -#endif +#define SIZE_INV(s) (((1U << SIZE_INV_SHIFT) / (s)) + 1) + static const unsigned size_invs[] = { + SIZE_INV(3), + SIZE_INV(4), SIZE_INV(5), SIZE_INV(6), SIZE_INV(7), + SIZE_INV(8), SIZE_INV(9), SIZE_INV(10), SIZE_INV(11), + SIZE_INV(12), SIZE_INV(13), SIZE_INV(14), SIZE_INV(15), + SIZE_INV(16), SIZE_INV(17), SIZE_INV(18), SIZE_INV(19), + SIZE_INV(20), SIZE_INV(21), SIZE_INV(22), SIZE_INV(23), + SIZE_INV(24), SIZE_INV(25), SIZE_INV(26), SIZE_INV(27), + SIZE_INV(28), SIZE_INV(29), SIZE_INV(30), SIZE_INV(31) }; - assert(QUANTUM * (((sizeof(qsize_invs)) / sizeof(unsigned)) + 3) - >= (1U << QSPACE_MAX_2POW_DEFAULT)); - if (size <= (((sizeof(qsize_invs) / sizeof(unsigned)) + 2) << - QUANTUM_2POW)) { - regind = qsize_invs[(size >> QUANTUM_2POW) - 3] * diff; - regind >>= SIZE_INV_SHIFT; - } else + if (size <= ((sizeof(size_invs) / sizeof(unsigned)) + 2)) + regind = (diff * size_invs[size - 3]) >> SIZE_INV_SHIFT; + else regind = diff / size; -#undef QSIZE_INV - } else if (size < cspace_max) { -#define CSIZE_INV(s) (((1U << SIZE_INV_SHIFT) / (s << CACHELINE_2POW)) + 1) - static const unsigned csize_invs[] = { - CSIZE_INV(3), - CSIZE_INV(4), CSIZE_INV(5), CSIZE_INV(6), CSIZE_INV(7) - }; - assert(CACHELINE * (((sizeof(csize_invs)) / sizeof(unsigned)) + - 3) >= (1U << CSPACE_MAX_2POW_DEFAULT)); - - if (size <= (((sizeof(csize_invs) / sizeof(unsigned)) + 2) << - CACHELINE_2POW)) { - regind = csize_invs[(size >> CACHELINE_2POW) - 3] * - diff; - regind >>= SIZE_INV_SHIFT; - } else - regind = diff / size; -#undef CSIZE_INV - } else { -#define SSIZE_INV(s) (((1U << SIZE_INV_SHIFT) / (s << SUBPAGE_2POW)) + 1) - static const unsigned ssize_invs[] = { - SSIZE_INV(3), - SSIZE_INV(4), SSIZE_INV(5), SSIZE_INV(6), SSIZE_INV(7), - SSIZE_INV(8), SSIZE_INV(9), SSIZE_INV(10), SSIZE_INV(11), - SSIZE_INV(12), SSIZE_INV(13), SSIZE_INV(14), SSIZE_INV(15) -#if (PAGE_SHIFT == 13) - , - SSIZE_INV(16), SSIZE_INV(17), SSIZE_INV(18), SSIZE_INV(19), - SSIZE_INV(20), SSIZE_INV(21), SSIZE_INV(22), SSIZE_INV(23), - SSIZE_INV(24), SSIZE_INV(25), SSIZE_INV(26), SSIZE_INV(27), - SSIZE_INV(28), SSIZE_INV(29), SSIZE_INV(29), SSIZE_INV(30) -#endif - }; - assert(SUBPAGE * (((sizeof(ssize_invs)) / sizeof(unsigned)) + 3) - >= PAGE_SIZE); - - if (size < (((sizeof(ssize_invs) / sizeof(unsigned)) + 2) << - SUBPAGE_2POW)) { - regind = ssize_invs[(size >> SUBPAGE_2POW) - 3] * diff; - regind >>= SIZE_INV_SHIFT; - } else - regind = diff / size; -#undef SSIZE_INV - } +#undef SIZE_INV #undef SIZE_INV_SHIFT + } assert(diff == regind * size); assert(regind < bin->nregs); @@ -5116,7 +5055,7 @@ MALLOC_OUT: arena_maxclass = chunksize - (arena_chunk_header_npages << PAGE_SHIFT); - UTRACE(0, 0, 0); + UTRACE((void *)(intptr_t)(-1), 0, 0); #ifdef MALLOC_STATS memset(&stats_chunks, 0, sizeof(chunk_stats_t)); @@ -5340,6 +5279,7 @@ posix_memalign(void **memptr, size_t alignment, size_t size) size = 1; else { result = NULL; + *memptr = NULL; ret = 0; goto RETURN; } diff --git a/lib/libc/stdlib/system.c b/lib/libc/stdlib/system.c index 08de6300919..4f47edffe19 100644 --- a/lib/libc/stdlib/system.c +++ b/lib/libc/stdlib/system.c @@ -46,8 +46,7 @@ __FBSDID("$FreeBSD$"); #include "libc_private.h" int -__system(command) - const char *command; +__system(const char *command) { pid_t pid, savedpid; int pstat; diff --git a/lib/libc/stdtime/localtime.c b/lib/libc/stdtime/localtime.c index 9fc5f3ee99b..ad26f7e8da4 100644 --- a/lib/libc/stdtime/localtime.c +++ b/lib/libc/stdtime/localtime.c @@ -235,9 +235,14 @@ static struct state gmtmem; static char lcl_TZname[TZ_STRLEN_MAX + 1]; static int lcl_is_set; -static int gmt_is_set; +static pthread_once_t gmt_once = PTHREAD_ONCE_INIT; static pthread_rwlock_t lcl_rwlock = PTHREAD_RWLOCK_INITIALIZER; -static pthread_mutex_t gmt_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_once_t gmtime_once = PTHREAD_ONCE_INIT; +static pthread_key_t gmtime_key; +static int gmtime_key_error; +static pthread_once_t localtime_once = PTHREAD_ONCE_INIT; +static pthread_key_t localtime_key; +static int localtime_key_error; char * tzname[2] = { wildabbr, @@ -1407,27 +1412,24 @@ struct tm * const tmp; return result; } +static void +localtime_key_init(void) +{ + + localtime_key_error = _pthread_key_create(&localtime_key, free); +} + struct tm * localtime(timep) const time_t * const timep; { - static pthread_mutex_t localtime_mutex = PTHREAD_MUTEX_INITIALIZER; - static pthread_key_t localtime_key = -1; struct tm *p_tm; - int r; if (__isthreaded != 0) { - if (localtime_key < 0) { - _pthread_mutex_lock(&localtime_mutex); - if (localtime_key < 0) { - if ((r = _pthread_key_create(&localtime_key, - free)) != 0) { - _pthread_mutex_unlock(&localtime_mutex); - errno = r; - return(NULL); - } - } - _pthread_mutex_unlock(&localtime_mutex); + _once(&localtime_once, localtime_key_init); + if (localtime_key_error != 0) { + errno = localtime_key_error; + return(NULL); } p_tm = _pthread_getspecific(localtime_key); if (p_tm == NULL) { @@ -1464,6 +1466,17 @@ struct tm * tmp; return tmp; } +static void +gmt_init(void) +{ + +#ifdef ALL_STATE + gmtptr = (struct state *) malloc(sizeof *gmtptr); + if (gmtptr != NULL) +#endif /* defined ALL_STATE */ + gmtload(gmtptr); +} + /* ** gmtsub is to gmtime as localsub is to localtime. */ @@ -1476,16 +1489,7 @@ struct tm * const tmp; { register struct tm * result; - _MUTEX_LOCK(&gmt_mutex); - if (!gmt_is_set) { -#ifdef ALL_STATE - gmtptr = (struct state *) malloc(sizeof *gmtptr); - if (gmtptr != NULL) -#endif /* defined ALL_STATE */ - gmtload(gmtptr); - gmt_is_set = TRUE; - } - _MUTEX_UNLOCK(&gmt_mutex); + _once(&gmt_once, gmt_init); result = timesub(timep, offset, gmtptr, tmp); #ifdef TM_ZONE /* @@ -1509,27 +1513,24 @@ struct tm * const tmp; return result; } +static void +gmtime_key_init(void) +{ + + gmtime_key_error = _pthread_key_create(&gmtime_key, free); +} + struct tm * gmtime(timep) const time_t * const timep; { - static pthread_mutex_t gmtime_mutex = PTHREAD_MUTEX_INITIALIZER; - static pthread_key_t gmtime_key = -1; struct tm *p_tm; - int r; if (__isthreaded != 0) { - if (gmtime_key < 0) { - _pthread_mutex_lock(&gmtime_mutex); - if (gmtime_key < 0) { - if ((r = _pthread_key_create(&gmtime_key, - free)) != 0) { - _pthread_mutex_unlock(&gmtime_mutex); - errno = r; - return(NULL); - } - } - _pthread_mutex_unlock(&gmtime_mutex); + _once(&gmtime_once, gmtime_key_init); + if (gmtime_key_error != 0) { + errno = gmtime_key_error; + return(NULL); } /* * Changed to follow POSIX.1 threads standard, which diff --git a/lib/libc/stdtime/tzfile.5 b/lib/libc/stdtime/tzfile.5 index 15625d273c9..1606b5ae8c4 100644 --- a/lib/libc/stdtime/tzfile.5 +++ b/lib/libc/stdtime/tzfile.5 @@ -147,6 +147,6 @@ such instants). .Xr ctime 3 , .Xr time2posix 3 , .Xr zic 8 -.\" @(#)tzfile.5 8.2 +.\" @(#)tzfile.5 8.3 .\" This file is in the public domain, so clarified as of .\" 1996-06-05 by Arthur David Olson. diff --git a/lib/libc/string/strcat.3 b/lib/libc/string/strcat.3 index 029099418a7..4c9fec9acbe 100644 --- a/lib/libc/string/strcat.3 +++ b/lib/libc/string/strcat.3 @@ -32,11 +32,12 @@ .\" @(#)strcat.3 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd June 4, 1993 +.Dd December 1, 2009 .Dt STRCAT 3 .Os .Sh NAME -.Nm strcat +.Nm strcat , +.Nm strncat .Nd concatenate strings .Sh LIBRARY .Lb libc diff --git a/lib/libc/string/strcmp.3 b/lib/libc/string/strcmp.3 index 1e13ed8b596..74d1a5c4d18 100644 --- a/lib/libc/string/strcmp.3 +++ b/lib/libc/string/strcmp.3 @@ -75,7 +75,7 @@ The .Fn strcmp and .Fn strncmp -return an integer greater than, equal to, or less than 0, according +functions return an integer greater than, equal to, or less than 0, according as the string .Fa s1 is greater than, equal to, or less than the string diff --git a/lib/libc/sys/__error.c b/lib/libc/sys/__error.c index d7b5529f999..c3f59f8bf82 100644 --- a/lib/libc/sys/__error.c +++ b/lib/libc/sys/__error.c @@ -39,7 +39,7 @@ extern int errno; __weak_reference(__error_unthreaded, __error); int * -__error_unthreaded() +__error_unthreaded(void) { return(&errno); } diff --git a/lib/libc/sys/clock_gettime.2 b/lib/libc/sys/clock_gettime.2 index 242af1c702f..a2fa62490ec 100644 --- a/lib/libc/sys/clock_gettime.2 +++ b/lib/libc/sys/clock_gettime.2 @@ -29,7 +29,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 4, 2006 +.Dd December 29, 2009 .Dt CLOCK_GETTIME 2 .Os .Sh NAME @@ -59,21 +59,43 @@ used by a clock which is specified by The .Fa clock_id argument -can be one of five values: -.Dv CLOCK_REALTIME +can be one of the following values: +.Dv CLOCK_REALTIME , +.Dv CLOCK_REALTIME_PRECISE , +.Dv CLOCK_REALTIME_FAST for time that increments as -a wall clock should, -.Dv CLOCK_MONOTONIC -which increments in SI seconds, -.Dv CLOCK_UPTIME +a wall clock should; +.Dv CLOCK_MONOTONIC , +.Dv CLOCK_MONOTONIC_PRECISE , +.Dv CLOCK_MONOTONIC_FAST +which increments in SI seconds; +.Dv CLOCK_UPTIME , +.Dv CLOCK_UPTIME_PRECISE , +.Dv CLOCK_UPTIME_FAST which starts at zero when the kernel boots and increments -monotonically in SI seconds while the machine is running, +monotonically in SI seconds while the machine is running; .Dv CLOCK_VIRTUAL for time that increments only when -the CPU is running in user mode on behalf of the calling process, or +the CPU is running in user mode on behalf of the calling process; .Dv CLOCK_PROF for time that increments when the CPU is running in user or -kernel mode. +kernel mode; or +.Dv CLOCK_SECOND +which returns the current second without performing a full time counter +query, using in-kernel cached value of current second. +.Pp +The clock IDs +.Fa CLOCK_REALTIME_FAST , +.Fa CLOCK_MONOTONIC_FAST , +.Fa CLOCK_UPTIME_FAST +are analogs of corresponding IDs without _FAST suffix but do not perform +a full time counter query, so their accuracy is one timer tick. +Similarly, +.Fa CLOCK_REALTIME_PRECISE , +.Fa CLOCK_MONOTONIC_PRECISE , +.Fa CLOCK_UPTIME_PRECISE +are used to get the most exact value as possible, at the expense of +execution time. .Pp The structure pointed to by .Fa tp @@ -88,7 +110,8 @@ struct timespec { }; .Ed .Pp -Only the super-user may set the time of day. +Only the super-user may set the time of day, using only +.Fa CLOCK_REALTIME . If the system securelevel is greater than 1 (see .Xr init 8 ) , the time may only be advanced. @@ -134,3 +157,13 @@ and .Fn clock_getres system calls conform to .St -p1003.1b-93 . +The clock IDs +.Fa CLOCK_REALTIME_FAST , +.Fa CLOCK_REALTIME_PRECISE , +.Fa CLOCK_MONOTONIC_FAST , +.Fa CLOCK_MONOTONIC_PRECISE , +.Fa CLOCK_UPTIME , +.Fa CLOCK_UPTIME_FAST , +.Fa CLOCK_UPTIME_PRECISE , +.Fa CLOCK_SECOND +are FreeBSD extensions to the POSIX interface. diff --git a/lib/libc/sys/cpuset.2 b/lib/libc/sys/cpuset.2 index c07f8d9a781..fb9a7709cd2 100644 --- a/lib/libc/sys/cpuset.2 +++ b/lib/libc/sys/cpuset.2 @@ -96,7 +96,7 @@ The .Fa which argument may have the following values: .Bl -column CPU_WHICH_CPUSET -offset indent -.It Dv CPU_WHICH_TID Ta "id is lpwid_t (thread id)" +.It Dv CPU_WHICH_TID Ta "id is lwpid_t (thread id)" .It Dv CPU_WHICH_PID Ta "id is pid_t (process id)" .It Dv CPU_WHICH_CPUSET Ta "id is a cpusetid_t (cpuset id)" .It Dv CPU_WHICH_IRQ Ta "id is an irq number" @@ -209,7 +209,7 @@ The calling process did not have the credentials required to complete the operation. .It Bq Er ENFILE There was no free -.Fn cpusetid_t +.Ft cpusetid_t for allocation. .El .Sh SEE ALSO diff --git a/lib/libc/sys/kqueue.2 b/lib/libc/sys/kqueue.2 index e899a1befe8..326632d440a 100644 --- a/lib/libc/sys/kqueue.2 +++ b/lib/libc/sys/kqueue.2 @@ -438,19 +438,6 @@ There is a system wide limit on the number of timers which is controlled by the .Va kern.kq_calloutmax sysctl. -.It Dv EVFILT_NETDEV -Takes a descriptor to a network interface as the identifier, and the events to watch for in -.Va fflags . -It returns, when one or more of the requested events occur on the descriptor. -The events to monitor are: -.Bl -tag -width XXNOTE_LINKDOWN -.It Dv NOTE_LINKUP -The link is up. -.It Dv NOTE_LINKDOWN -The link is down. -.It Dv NOTE_LINKINV -The link state is invalid. -.El .Pp On return, .Va fflags @@ -595,13 +582,6 @@ system and this manual page were written by .An Jonathan Lemon Aq jlemon@FreeBSD.org . .Sh BUGS The -.Dv EVFILT_NETDEV -filter is currently only implemented for devices that use the -.Xr miibus 4 -driver for LINKUP and LINKDOWN operations. -Therefore, it will not work with many non-ethernet devices. -.Pp -The .Fa timeout value is limited to 24 hours; longer timeouts will be silently reinterpreted as 24 hours. diff --git a/lib/libc/sys/setpgid.2 b/lib/libc/sys/setpgid.2 index a56d83123d3..4ad89de3263 100644 --- a/lib/libc/sys/setpgid.2 +++ b/lib/libc/sys/setpgid.2 @@ -54,6 +54,11 @@ to the specified If .Fa pid is zero, then the call applies to the current process. +If +.Fa pgrp +is zero, then the process id of the process specified by +.Fa pid +is used instead. .Pp If the affected process is not the invoking process, then it must be a child of the invoking process, it must not have performed an diff --git a/lib/libc/sys/vfork.2 b/lib/libc/sys/vfork.2 index 928130b5d78..3cd33686edc 100644 --- a/lib/libc/sys/vfork.2 +++ b/lib/libc/sys/vfork.2 @@ -28,12 +28,12 @@ .\" @(#)vfork.2 8.1 (Berkeley) 6/4/93 .\" $FreeBSD$ .\" -.Dd June 4, 1993 +.Dd November 13, 2009 .Dt VFORK 2 .Os .Sh NAME .Nm vfork -.Nd spawn new process in a virtual memory efficient way +.Nd create a new process without copying the address space .Sh LIBRARY .Lb libc .Sh SYNOPSIS @@ -113,14 +113,6 @@ The system call appeared in .Bx 2.9 . .Sh BUGS -This system call will be eliminated when proper system sharing -mechanisms are implemented. -Users should not depend on the memory -sharing semantics of -.Fn vfork -as it will, in that case, be made synonymous to -.Xr fork 2 . -.Pp To avoid a possible deadlock situation, processes that are children in the middle of a diff --git a/lib/libc/yp/yplib.c b/lib/libc/yp/yplib.c index eb5c34c1670..87d16ddece1 100644 --- a/lib/libc/yp/yplib.c +++ b/lib/libc/yp/yplib.c @@ -241,7 +241,7 @@ static bool_t ypmatch_cache_lookup(struct dom_binding *ypdb, char *map, keydat *key, valdat *val) { - struct ypmatch_ent *c = ypdb->cache; + struct ypmatch_ent *c; ypmatch_cache_expire(ypdb); diff --git a/lib/libcalendar/Makefile b/lib/libcalendar/Makefile index 8bba20b726b..b0ae002fd5e 100644 --- a/lib/libcalendar/Makefile +++ b/lib/libcalendar/Makefile @@ -1,7 +1,6 @@ # $FreeBSD$ LIB= calendar -WARNS?= 2 SRCS= calendar.c easter.c INCS= calendar.h diff --git a/lib/libcam/Makefile b/lib/libcam/Makefile index 2bbad9ab6fc..1f819d08590 100644 --- a/lib/libcam/Makefile +++ b/lib/libcam/Makefile @@ -11,6 +11,7 @@ LDADD= -lsbuf MAN= cam.3 cam_cdbparse.3 +WARNS?= 2 MLINKS+= cam.3 cam_open_device.3 \ cam.3 cam_open_spec_device.3 \ diff --git a/lib/libcompat/Makefile b/lib/libcompat/Makefile index 106bab970af..2ca46f0eb57 100644 --- a/lib/libcompat/Makefile +++ b/lib/libcompat/Makefile @@ -5,6 +5,8 @@ LIB=compat CFLAGS+=-DLIBC_SCCS -DSYSLIBC_SCCS -I${.CURDIR}/../libc/locale NO_PIC= +WARNS?= 1 + .PATH: ${.CURDIR}/4.1/${MACHINE_ARCH} ${.CURDIR}/4.1 \ ${.CURDIR}/4.3/${MACHINE_ARCH} ${.CURDIR}/4.3 \ ${.CURDIR}/4.4/${MACHINE_ARCH} ${.CURDIR}/4.4 \ diff --git a/lib/libcrypt/Makefile b/lib/libcrypt/Makefile index be0826dc99e..285f6728203 100644 --- a/lib/libcrypt/Makefile +++ b/lib/libcrypt/Makefile @@ -33,6 +33,8 @@ SRCS+= auth.c property.c CFLAGS+= -D${sym}=__${sym} .endfor +WARNS?= 2 + PRECIOUSLIB= .include diff --git a/lib/libdevinfo/Makefile b/lib/libdevinfo/Makefile index 0615195f938..9e755d73b0d 100644 --- a/lib/libdevinfo/Makefile +++ b/lib/libdevinfo/Makefile @@ -5,4 +5,6 @@ SRCS= devinfo.c INCS= devinfo.h MAN= devinfo.3 +WARNS?= 3 + .include diff --git a/lib/libdevinfo/devinfo.h b/lib/libdevinfo/devinfo.h index 3e580f20d50..2b497431909 100644 --- a/lib/libdevinfo/devinfo.h +++ b/lib/libdevinfo/devinfo.h @@ -32,20 +32,12 @@ #include #include +#include typedef __uintptr_t devinfo_handle_t; #define DEVINFO_ROOT_DEVICE ((devinfo_handle_t)0) -/* - * State of the device. - */ -/* XXX not sure if I want a copy here, or expose sys/bus.h */ -typedef enum devinfo_state { - DIS_NOTPRESENT = 10, /* not probed or probe failed */ - DIS_ALIVE = 20, /* probe succeeded */ - DIS_ATTACHED = 30, /* attach method called */ - DIS_BUSY = 40 /* device is open */ -} devinfo_state_t; +typedef enum device_state devinfo_state_t; struct devinfo_dev { devinfo_handle_t dd_handle; /* device handle */ diff --git a/lib/libdevstat/Makefile b/lib/libdevstat/Makefile index c6233c2331a..aeb07b9f064 100644 --- a/lib/libdevstat/Makefile +++ b/lib/libdevstat/Makefile @@ -33,6 +33,6 @@ MLINKS+=devstat.3 compute_etime.3 CFLAGS+=-I${.CURDIR} -WARNS?= 2 +WARNS?= 3 .include diff --git a/lib/libdwarf/Makefile b/lib/libdwarf/Makefile index 9a1a5498efc..86c707a641e 100644 --- a/lib/libdwarf/Makefile +++ b/lib/libdwarf/Makefile @@ -23,8 +23,6 @@ CFLAGS+= -I. -I${.CURDIR} SHLIB_MAJOR= 2 -WARNS?= 6 - WITHOUT_MAN= yes .include diff --git a/lib/libedit/Makefile b/lib/libedit/Makefile index ece60329bac..97c1f920787 100644 --- a/lib/libedit/Makefile +++ b/lib/libedit/Makefile @@ -35,6 +35,8 @@ CFLAGS+= -I. -I${.CURDIR} CFLAGS+= #-DDEBUG_TTY -DDEBUG_KEY -DDEBUG_READ -DDEBUG -DDEBUG_REFRESH CFLAGS+= #-DDEBUG_PASTE -DDEBUG_EDIT +WARNS?= 1 + AHDR= vi.h emacs.h common.h ASRC= ${.CURDIR}/vi.c ${.CURDIR}/emacs.c ${.CURDIR}/common.c diff --git a/lib/libelf/Makefile b/lib/libelf/Makefile index b22148d5971..30e508076a8 100644 --- a/lib/libelf/Makefile +++ b/lib/libelf/Makefile @@ -60,8 +60,6 @@ CFLAGS+= -I. -I${.CURDIR} SHLIB_MAJOR= 1 -WARNS?= 6 - MAN= elf.3 \ elf_begin.3 \ elf_cntl.3 \ diff --git a/lib/libexpat/Makefile b/lib/libexpat/Makefile index e39368497e1..ab9b0e80d68 100644 --- a/lib/libexpat/Makefile +++ b/lib/libexpat/Makefile @@ -14,6 +14,8 @@ MAN= libbsdxml.3 CFLAGS+= -I${.CURDIR} -DHAVE_EXPAT_CONFIG_H CLEANFILES= bsdxml.h bsdxml_external.h +WARNS?= 2 + # OK, so it is not entirely unadultered: we ammend the COPYING # to point people to the right place, get rid of some VMS stuff # and use FreeBSD style indempotency #ifndefs. We also want to diff --git a/lib/libexpat/libbsdxml.3 b/lib/libexpat/libbsdxml.3 index 7d7b0e71909..555bc9ae1b4 100644 --- a/lib/libexpat/libbsdxml.3 +++ b/lib/libexpat/libbsdxml.3 @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\"/ -.Dd May 5, 2008 +.Dd December 12, 2009 .Dt LIBBSDXML 3 .Os .Sh NAME @@ -38,6 +38,15 @@ The .Nm library is a verbatim copy of the eXpat XML library version 2.0.1. .Pp +The +.Nm +library is intended to be used within the +.Fx +base system only. +Use of the +.Nm +library for other purposes is not supported and discouraged. +.Pp To avoid version and autoconfiguration issues, the library has been renamed to .Nm diff --git a/lib/libfetch/ftp.c b/lib/libfetch/ftp.c index d0d597f0f9e..a0ba5108d82 100644 --- a/lib/libfetch/ftp.c +++ b/lib/libfetch/ftp.c @@ -1122,17 +1122,19 @@ ftp_request(struct url *url, const char *op, struct url_stat *us, /* change directory */ if (ftp_cwd(conn, url->doc) == -1) - return (NULL); + goto errsock; /* stat file */ if (us && ftp_stat(conn, url->doc, us) == -1 && fetchLastErrCode != FETCH_PROTO && fetchLastErrCode != FETCH_UNAVAIL) - return (NULL); + goto errsock; /* just a stat */ - if (strcmp(op, "STAT") == 0) + if (strcmp(op, "STAT") == 0) { + ftp_disconnect(conn); return (FILE *)1; /* bogus return value */ + } if (strcmp(op, "STOR") == 0 || strcmp(op, "APPE") == 0) oflag = O_WRONLY; else @@ -1140,6 +1142,10 @@ ftp_request(struct url *url, const char *op, struct url_stat *us, /* initiate the transfer */ return (ftp_transfer(conn, op, url->doc, oflag, url->offset, flags)); + +errsock: + ftp_disconnect(conn); + return (NULL); } /* diff --git a/lib/libftpio/Makefile b/lib/libftpio/Makefile index bb9c9eb6e5d..2082ec57b03 100644 --- a/lib/libftpio/Makefile +++ b/lib/libftpio/Makefile @@ -15,6 +15,8 @@ CLEANFILES= ftperr.c CFLAGS+= -DINET6 .endif +WARNS?= 2 + ftperr.c: ftp.errors @echo '#include ' > ${.TARGET} @echo '#include "ftpio.h"' >> ${.TARGET} diff --git a/lib/libgeom/geom_getxml.c b/lib/libgeom/geom_getxml.c index b27696d2165..17e04761b8a 100644 --- a/lib/libgeom/geom_getxml.c +++ b/lib/libgeom/geom_getxml.c @@ -36,7 +36,7 @@ #include "libgeom.h" char * -geom_getxml() +geom_getxml(void) { char *p; size_t l = 0; diff --git a/lib/libgpib/Makefile b/lib/libgpib/Makefile index 5465d8b993a..caf6bcfaa2a 100644 --- a/lib/libgpib/Makefile +++ b/lib/libgpib/Makefile @@ -5,6 +5,5 @@ SHLIB_MAJOR= 3 INCS= gpib.h INCSDIR= ${INCLUDEDIR}/gpib SRCS= ibfoo.c -WARNS?= 6 .include diff --git a/lib/libgssapi/Makefile b/lib/libgssapi/Makefile index 63d441c34b9..3f016b49bb7 100644 --- a/lib/libgssapi/Makefile +++ b/lib/libgssapi/Makefile @@ -2,7 +2,6 @@ LIB= gssapi SHLIB_MAJOR= 10 -WARNS= 6 VERSION_DEF= ${.CURDIR}/../libc/Versions.def SYMBOL_MAPS= ${.CURDIR}/Symbol.map diff --git a/lib/libgssapi/gss_mech_switch.c b/lib/libgssapi/gss_mech_switch.c index feb88f1a68c..d07db8865d3 100644 --- a/lib/libgssapi/gss_mech_switch.c +++ b/lib/libgssapi/gss_mech_switch.c @@ -42,7 +42,7 @@ #endif struct _gss_mech_switch_list _gss_mechs = - SLIST_HEAD_INITIALIZER(&_gss_mechs); + SLIST_HEAD_INITIALIZER(_gss_mechs); gss_OID_set _gss_mech_oids; /* diff --git a/lib/libipsec/Makefile b/lib/libipsec/Makefile index 5455945ddd7..840aefa54f2 100644 --- a/lib/libipsec/Makefile +++ b/lib/libipsec/Makefile @@ -48,6 +48,8 @@ CLEANFILES+= y.tab.c y.tab.h YFLAGS+=-d -p __libipsecyy LFLAGS+=-P__libipsecyy +WARNS?= 2 + MAN= ipsec_set_policy.3 ipsec_strerror.3 MLINKS+=ipsec_set_policy.3 ipsec_get_policylen.3 \ ipsec_set_policy.3 ipsec_dump_policy.3 diff --git a/lib/libipx/Makefile b/lib/libipx/Makefile index 66f566a4bd0..b816ba306b7 100644 --- a/lib/libipx/Makefile +++ b/lib/libipx/Makefile @@ -6,4 +6,6 @@ SRCS= ipx_addr.c ipx_ntoa.c MAN= ipx.3 MLINKS+=ipx.3 ipx_addr.3 ipx.3 ipx_ntoa.3 +WARNS?= 2 + .include diff --git a/lib/libjail/Makefile b/lib/libjail/Makefile index 678d59e0801..442274ae35d 100644 --- a/lib/libjail/Makefile +++ b/lib/libjail/Makefile @@ -24,6 +24,4 @@ MLINKS+=jail.3 jailparam_free.3 CFLAGS+=-I${.CURDIR} -WARNS?= 6 - .include diff --git a/lib/libjail/jail.c b/lib/libjail/jail.c index 9411b88bdf6..39c88d098ed 100644 --- a/lib/libjail/jail.c +++ b/lib/libjail/jail.c @@ -532,7 +532,7 @@ jailparam_get(struct jailparam *jp, unsigned njp, int flags) } jp_key = jp_lastjid ? jp_lastjid : jp_jid && jp_jid->jp_valuelen == sizeof(int) && - *(int *)jp_jid->jp_value ? jp_jid : jp_name; + jp_jid->jp_value && *(int *)jp_jid->jp_value ? jp_jid : jp_name; if (jp_key == NULL || jp_key->jp_value == NULL) { strlcpy(jail_errmsg, "no jail specified", JAIL_ERRMSGLEN); errno = ENOENT; diff --git a/lib/libkiconv/Makefile b/lib/libkiconv/Makefile index 2a0bd6a4212..4ba860ef903 100644 --- a/lib/libkiconv/Makefile +++ b/lib/libkiconv/Makefile @@ -15,4 +15,6 @@ MLINKS+= kiconv.3 kiconv_add_xlat16_cspair.3 \ CFLAGS+= -I${.CURDIR}/../../sys +WARNS?= 1 + .include diff --git a/lib/libkvm/Makefile b/lib/libkvm/Makefile index 47dc613ab7e..0cb3ad7e305 100644 --- a/lib/libkvm/Makefile +++ b/lib/libkvm/Makefile @@ -9,6 +9,8 @@ CFLAGS+=-DLIBC_SCCS -I${.CURDIR} CFLAGS+=-DSUN4V .endif +WARNS?= 0 + SRCS= kvm.c kvm_${MACHINE_ARCH}.c kvm_cptime.c kvm_file.c kvm_getloadavg.c \ kvm_getswapinfo.c kvm_pcpu.c kvm_proc.c kvm_vnet.c .if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "arm" diff --git a/lib/libkvm/kvm_proc.c b/lib/libkvm/kvm_proc.c index 071f859e002..f8f84830d0a 100644 --- a/lib/libkvm/kvm_proc.c +++ b/lib/libkvm/kvm_proc.c @@ -149,7 +149,7 @@ kvm_proclist(kd, what, arg, p, bp, maxcnt) if (ucred.cr_ngroups > KI_NGROUPS) { kp->ki_ngroups = KI_NGROUPS; kp->ki_cr_flags |= KI_CRF_GRP_OVERFLOW; - } + } else kp->ki_ngroups = ucred.cr_ngroups; kvm_read(kd, (u_long)ucred.cr_groups, kp->ki_groups, kp->ki_ngroups * sizeof(gid_t)); diff --git a/lib/libmagic/Makefile b/lib/libmagic/Makefile index 618a6f5b427..ef7cc2b6803 100644 --- a/lib/libmagic/Makefile +++ b/lib/libmagic/Makefile @@ -20,6 +20,8 @@ MAGICPATH?= /usr/share/misc CFLAGS+= -DMAGIC='"${MAGICPATH}/magic"' -DHAVE_CONFIG_H CFLAGS+= -I${.CURDIR} -I${CONTRDIR} +WARNS?= 1 + CLEANFILES+= magic magic.mgc FILES= magic magic.mgc diff --git a/lib/libmd/Makefile b/lib/libmd/Makefile index cf9d4434543..ba1ebc03417 100644 --- a/lib/libmd/Makefile +++ b/lib/libmd/Makefile @@ -8,6 +8,8 @@ SRCS= md2c.c md4c.c md5c.c md2hl.c md4hl.c md5hl.c \ sha256c.c sha256hl.c INCS= md2.h md4.h md5.h ripemd.h sha.h sha256.h +WARNS?= 0 + MAN+= md2.3 md4.3 md5.3 ripemd.3 sha.3 sha256.3 MLINKS+=md2.3 MD2Init.3 md2.3 MD2Update.3 md2.3 MD2Final.3 MLINKS+=md2.3 MD2End.3 md2.3 MD2File.3 md2.3 MD2FileChunk.3 diff --git a/lib/libmilter/Makefile b/lib/libmilter/Makefile index 75c93333fc5..0e625d0812a 100644 --- a/lib/libmilter/Makefile +++ b/lib/libmilter/Makefile @@ -27,6 +27,8 @@ SRCS+= main.c engine.c listener.c handler.c comm.c monitor.c smfi.c \ signal.c sm_gethost.c errstring.c strl.c worker.c CLEANFILES+=sm_os.h +WARNS?= 0 + sm_os.h: ln -sf ${SENDMAIL_DIR}/include/sm/os/sm_os_freebsd.h sm_os.h diff --git a/lib/libmp/Makefile b/lib/libmp/Makefile index 6c51c5787f0..a9001a10c37 100644 --- a/lib/libmp/Makefile +++ b/lib/libmp/Makefile @@ -8,7 +8,6 @@ MAN= libmp.3 INCS= mp.h SRCS= mpasbn.c -WARNS?= 6 CFLAGS+= -I${.CURDIR}/../../crypto VERSION_DEF= ${.CURDIR}/../libc/Versions.def diff --git a/lib/libncp/Makefile b/lib/libncp/Makefile index 1a7ad6b679c..d7870a029db 100644 --- a/lib/libncp/Makefile +++ b/lib/libncp/Makefile @@ -11,4 +11,6 @@ SRCS= ncpl_subr.c ncpl_bind.c ncpl_queue.c ncpl_file.c ncpl_misc.c \ ncpl_net.c ncpl_rcfile.c ncpl_conn.c ncpl_nls.c ncpl_msg.c \ ncpl_rpc.c ncpl_crypt.c ipx.c sap.c +WARNS?= 0 + .include diff --git a/lib/libngatm/Makefile b/lib/libngatm/Makefile index dfa33212eb1..85294b0471d 100644 --- a/lib/libngatm/Makefile +++ b/lib/libngatm/Makefile @@ -5,7 +5,6 @@ LIB= ngatm SHLIB_MAJOR= 4 MAN= libngatm.3 uniaddr.3 unifunc.3 unimsg.3 unisap.3 unistruct.3 -WARNS?= 6 # source of the library lives in contrib SDIR= ${.CURDIR}/../../sys diff --git a/lib/libopie/Makefile b/lib/libopie/Makefile index 59406df0bc0..01ee1b1b994 100644 --- a/lib/libopie/Makefile +++ b/lib/libopie/Makefile @@ -26,6 +26,8 @@ CFLAGS+=-I${.CURDIR} -I${OPIE_DIST} -I${DIST_DIR} \ ACCESSFILE?= \"/etc/opieaccess\" CFLAGS+= -DINSECURE_OVERRIDE -DPATH_ACCESS_FILE=${ACCESSFILE} +WARNS?= 0 + DPADD= ${LIBMD} LDADD= -lmd diff --git a/lib/libpam/modules/Makefile.inc b/lib/libpam/modules/Makefile.inc index 248ad10b636..c352f42c3f3 100644 --- a/lib/libpam/modules/Makefile.inc +++ b/lib/libpam/modules/Makefile.inc @@ -6,7 +6,7 @@ NO_INSTALLLIB= NO_PROFILE= CFLAGS+= -I${PAMDIR}/include -I${.CURDIR}/../../libpam -WARNS?= 4 +WARNS?= 6 # This is nasty. # For the static case, libpam.a depends on the modules. diff --git a/lib/libpam/modules/pam_exec/Makefile b/lib/libpam/modules/pam_exec/Makefile index 0cf4268a27a..143f1a6cd6d 100644 --- a/lib/libpam/modules/pam_exec/Makefile +++ b/lib/libpam/modules/pam_exec/Makefile @@ -4,6 +4,6 @@ LIB= pam_exec SRCS= pam_exec.c MAN= pam_exec.8 -WARNS?= 0 +WARNS?= 1 .include diff --git a/lib/libpam/modules/pam_krb5/Makefile b/lib/libpam/modules/pam_krb5/Makefile index a376f7e2bce..989e9aa59df 100644 --- a/lib/libpam/modules/pam_krb5/Makefile +++ b/lib/libpam/modules/pam_krb5/Makefile @@ -29,7 +29,6 @@ SRCS= pam_krb5.c MAN= pam_krb5.8 .if defined(_FREEFALL_CONFIG) CFLAGS+=-D_FREEFALL_CONFIG -WARNS= 0 .endif DPADD= ${LIBKRB5} ${LIBHX509} ${LIBASN1} ${LIBROKEN} ${LIBCOM_ERR} ${LIBCRYPT} ${LIBCRYPTO} diff --git a/lib/libpam/modules/pam_lastlog/Makefile b/lib/libpam/modules/pam_lastlog/Makefile index f0b96c4d7da..616c113c7f4 100644 --- a/lib/libpam/modules/pam_lastlog/Makefile +++ b/lib/libpam/modules/pam_lastlog/Makefile @@ -28,7 +28,7 @@ LIB= pam_lastlog SRCS= pam_lastlog.c MAN= pam_lastlog.8 -DPADD= ${LIBUTIL} -LDADD= -lutil +DPADD= ${LIBULOG} +LDADD= -lulog .include diff --git a/lib/libpam/modules/pam_lastlog/pam_lastlog.c b/lib/libpam/modules/pam_lastlog/pam_lastlog.c index 9899f8d16fa..47c1e99ebe1 100644 --- a/lib/libpam/modules/pam_lastlog/pam_lastlog.c +++ b/lib/libpam/modules/pam_lastlog/pam_lastlog.c @@ -46,19 +46,9 @@ __FBSDID("$FreeBSD$"); #define _BSD_SOURCE -#include - -#include -#include -#include #include -#include -#include -#include -#include #include -#include -#include +#include #define PAM_SM_SESSION @@ -71,13 +61,11 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, int argc __unused, const char *argv[] __unused) { struct passwd *pwd; - struct utmp utmp; - struct lastlog ll; + struct ulog_utmpx *utx; time_t t; const char *user; const void *rhost, *tty; - off_t llpos; - int fd, pam_err; + int pam_err; pam_err = pam_get_user(pamh, &user, NULL); if (pam_err != PAM_SUCCESS) @@ -101,72 +89,29 @@ pam_sm_open_session(pam_handle_t *pamh, int flags, pam_err = PAM_SERVICE_ERR; goto err; } - if (strncmp(tty, _PATH_DEV, strlen(_PATH_DEV)) == 0) - tty = (const char *)tty + strlen(_PATH_DEV); - if (*(const char *)tty == '\0') - return (PAM_SERVICE_ERR); - fd = open(_PATH_LASTLOG, O_RDWR|O_CREAT, 0644); - if (fd == -1) { - PAM_LOG("Failed to open %s", _PATH_LASTLOG); - goto file_err; - } - - /* - * Record session in lastlog(5). - */ - llpos = (off_t)(pwd->pw_uid * sizeof(ll)); - if (lseek(fd, llpos, L_SET) != llpos) - goto file_err; if ((flags & PAM_SILENT) == 0) { - if (read(fd, &ll, sizeof ll) == sizeof ll && ll.ll_time != 0) { - t = ll.ll_time; - if (*ll.ll_host != '\0') - pam_info(pamh, "Last login: %.*s from %.*s", - 24 - 5, ctime(&t), - (int)sizeof(ll.ll_host), ll.ll_host); - else - pam_info(pamh, "Last login: %.*s on %.*s", - 24 - 5, ctime(&t), - (int)sizeof(ll.ll_line), ll.ll_line); + if (ulog_setutxfile(UTXI_USER, NULL) != 0) { + PAM_LOG("Failed to open lastlog database"); + } else { + utx = ulog_getutxuser(user); + if (utx != NULL && utx->ut_type == USER_PROCESS) { + t = utx->ut_tv.tv_sec; + if (*utx->ut_host != '\0') + pam_info(pamh, "Last login: %.*s from %s", + 24 - 5, ctime(&t), utx->ut_host); + else + pam_info(pamh, "Last login: %.*s on %s", + 24 - 5, ctime(&t), utx->ut_line); + } + ulog_endutxent(); } - if (lseek(fd, llpos, L_SET) != llpos) - goto file_err; } - bzero(&ll, sizeof(ll)); - ll.ll_time = time(NULL); - - /* note: does not need to be NUL-terminated */ - strncpy(ll.ll_line, tty, sizeof(ll.ll_line)); - if (rhost != NULL && *(const char *)rhost != '\0') - /* note: does not need to be NUL-terminated */ - strncpy(ll.ll_host, rhost, sizeof(ll.ll_host)); - - if (write(fd, (char *)&ll, sizeof(ll)) != sizeof(ll) || close(fd) != 0) - goto file_err; - - PAM_LOG("Login recorded in %s", _PATH_LASTLOG); - - /* - * Record session in utmp(5) and wtmp(5). - */ - bzero(&utmp, sizeof(utmp)); - utmp.ut_time = time(NULL); - /* note: does not need to be NUL-terminated */ - strncpy(utmp.ut_name, user, sizeof(utmp.ut_name)); - if (rhost != NULL && *(const char *)rhost != '\0') - strncpy(utmp.ut_host, rhost, sizeof(utmp.ut_host)); - (void)strncpy(utmp.ut_line, tty, sizeof(utmp.ut_line)); - login(&utmp); + ulog_login(tty, user, rhost); return (PAM_SUCCESS); -file_err: - syslog(LOG_ERR, "%s: %m", _PATH_LASTLOG); - if (fd != -1) - close(fd); - pam_err = PAM_SYSTEM_ERR; err: if (openpam_get_option(pamh, "no_fail")) return (PAM_SUCCESS); @@ -174,7 +119,7 @@ err: } PAM_EXTERN int -pam_sm_close_session(pam_handle_t *pamh __unused, int flags __unused, +pam_sm_close_session(pam_handle_t *pamh, int flags __unused, int argc __unused, const char *argv[] __unused) { const void *tty; @@ -188,14 +133,7 @@ pam_sm_close_session(pam_handle_t *pamh __unused, int flags __unused, pam_err = PAM_SERVICE_ERR; goto err; } - if (strncmp(tty, _PATH_DEV, strlen(_PATH_DEV)) == 0) - tty = (const char *)tty + strlen(_PATH_DEV); - if (*(const char *)tty == '\0') - return (PAM_SERVICE_ERR); - if (logout(tty) != 1) - syslog(LOG_ERR, "%s(): no utmp record for %s", - __func__, (const char *)tty); - logwtmp(tty, "", ""); + ulog_logout(tty); return (PAM_SUCCESS); err: diff --git a/lib/libpam/modules/pam_radius/Makefile b/lib/libpam/modules/pam_radius/Makefile index 88e4357a4b2..2fac8334e20 100644 --- a/lib/libpam/modules/pam_radius/Makefile +++ b/lib/libpam/modules/pam_radius/Makefile @@ -27,7 +27,7 @@ LIB= pam_radius SRCS= pam_radius.c MAN= pam_radius.8 -WARNS= 0 +WARNS?= 3 DPADD= ${LIBRADIUS} LDADD= -lradius diff --git a/lib/libpam/modules/pam_ssh/Makefile b/lib/libpam/modules/pam_ssh/Makefile index b638d8b052b..d00652a8c21 100644 --- a/lib/libpam/modules/pam_ssh/Makefile +++ b/lib/libpam/modules/pam_ssh/Makefile @@ -10,7 +10,7 @@ SRCS= pam_ssh.c # required when linking with a dynamic libssh SRCS+= roaming_dummy.c -WARNS?= 0 +WARNS?= 3 CFLAGS+= -I${SSHDIR} -include ssh_namespace.h DPADD= ${LIBSSH} ${LIBCRYPTO} ${LIBCRYPT} diff --git a/lib/libpam/modules/pam_unix/pam_unix.8 b/lib/libpam/modules/pam_unix/pam_unix.8 index eec0e0e20d7..82354d57715 100644 --- a/lib/libpam/modules/pam_unix/pam_unix.8 +++ b/lib/libpam/modules/pam_unix/pam_unix.8 @@ -105,6 +105,17 @@ sufficient. If the password database has no password for the entity being authenticated, then this option will forgo password prompting, and silently allow authentication to succeed. +.Pp +.Sy NOTE: +If +.Nm +is invoked by a process that does not have the privileges required to +access the password database (in most cases, this means root +privileges), the +.Cm nullok +option may cause +.Nm +to allow any user to log in with any password. .It Cm local_pass Use only the local password database, even if NIS is in use. This will cause an authentication failure if the system is configured diff --git a/lib/libpcap/Makefile b/lib/libpcap/Makefile index 44ae23cd4b7..42540f565b1 100644 --- a/lib/libpcap/Makefile +++ b/lib/libpcap/Makefile @@ -97,6 +97,8 @@ CFLAGS+=-DINET6 CFLAGS+=-DHAVE_NET_PFVAR_H .endif +WARNS?= 0 + SHLIB_MAJOR=7 # diff --git a/lib/libpmc/Makefile b/lib/libpmc/Makefile index d307b4916db..09a23e3852d 100644 --- a/lib/libpmc/Makefile +++ b/lib/libpmc/Makefile @@ -5,8 +5,6 @@ LIB= pmc SRCS= libpmc.c pmclog.c INCS= pmc.h pmclog.h -WARNS?= 6 - MAN= pmc.3 MAN+= pmc_allocate.3 MAN+= pmc_attach.3 @@ -35,6 +33,8 @@ MAN+= pmc.p4.3 MAN+= pmc.p5.3 MAN+= pmc.p6.3 MAN+= pmc.tsc.3 +.elif ${MACHINE_ARCH} == "arm" && ${CPUTYPE} == "xscale" +MAN+= pmc.xscale.3 .endif MLINKS+= \ diff --git a/lib/libpmc/libpmc.c b/lib/libpmc/libpmc.c index ecc697da203..a4cce1fe156 100644 --- a/lib/libpmc/libpmc.c +++ b/lib/libpmc/libpmc.c @@ -69,6 +69,10 @@ static int p6_allocate_pmc(enum pmc_event _pe, char *_ctrspec, static int tsc_allocate_pmc(enum pmc_event _pe, char *_ctrspec, struct pmc_op_pmcallocate *_pmc_config); #endif +#if defined(__XSCALE__) +static int xscale_allocate_pmc(enum pmc_event _pe, char *_ctrspec, + struct pmc_op_pmcallocate *_pmc_config); +#endif #define PMC_CALL(cmd, params) \ syscall(pmc_syscall, PMC_OP_##cmd, (params)) @@ -132,6 +136,7 @@ PMC_CLASSDEP_TABLE(k8, K8); PMC_CLASSDEP_TABLE(p4, P4); PMC_CLASSDEP_TABLE(p5, P5); PMC_CLASSDEP_TABLE(p6, P6); +PMC_CLASSDEP_TABLE(xscale, XSCALE); #undef __PMC_EV_ALIAS #define __PMC_EV_ALIAS(N,CODE) { N, PMC_EV_##CODE }, @@ -176,6 +181,7 @@ PMC_MDEP_TABLE(k8, K8, PMC_CLASS_TSC); PMC_MDEP_TABLE(p4, P4, PMC_CLASS_TSC); PMC_MDEP_TABLE(p5, P5, PMC_CLASS_TSC); PMC_MDEP_TABLE(p6, P6, PMC_CLASS_TSC); +PMC_MDEP_TABLE(xscale, XSCALE, PMC_CLASS_XSCALE); static const struct pmc_event_descr tsc_event_table[] = { @@ -216,6 +222,9 @@ PMC_CLASS_TABLE_DESC(p6, P6, p6, p6); #if defined(__i386__) || defined(__amd64__) PMC_CLASS_TABLE_DESC(tsc, TSC, tsc, tsc); #endif +#if defined(__XSCALE__) +PMC_CLASS_TABLE_DESC(xscale, XSCALE, xscale, xscale); +#endif #undef PMC_CLASS_TABLE_DESC @@ -2008,6 +2017,29 @@ tsc_allocate_pmc(enum pmc_event pe, char *ctrspec, } #endif +#if defined(__XSCALE__) + +static struct pmc_event_alias xscale_aliases[] = { + EV_ALIAS("branches", "BRANCH_RETIRED"), + EV_ALIAS("branch-mispredicts", "BRANCH_MISPRED"), + EV_ALIAS("dc-misses", "DC_MISS"), + EV_ALIAS("ic-misses", "IC_MISS"), + EV_ALIAS("instructions", "INSTR_RETIRED"), + EV_ALIAS(NULL, NULL) +}; +static int +xscale_allocate_pmc(enum pmc_event pe, char *ctrspec __unused, + struct pmc_op_pmcallocate *pmc_config __unused) +{ + switch (pe) { + default: + break; + } + + return (0); +} +#endif + /* * Match an event name `name' with its canonical form. * @@ -2335,6 +2367,10 @@ pmc_event_names_of_class(enum pmc_class cl, const char ***eventnames, ev = p6_event_table; count = PMC_EVENT_TABLE_SIZE(p6); break; + case PMC_CLASS_XSCALE: + ev = xscale_event_table; + count = PMC_EVENT_TABLE_SIZE(xscale); + break; default: errno = EINVAL; return (-1); @@ -2520,6 +2556,12 @@ pmc_init(void) pmc_class_table[n] = &p4_class_table_descr; break; #endif +#if defined(__XSCALE__) + case PMC_CPU_INTEL_XSCALE: + PMC_MDEP_INIT(xscale); + pmc_class_table[n] = &xscale_class_table_descr; + break; +#endif default: @@ -2635,6 +2677,9 @@ _pmc_name_of_event(enum pmc_event pe, enum pmc_cputype cpu) } else if (pe >= PMC_EV_P6_FIRST && pe <= PMC_EV_P6_LAST) { ev = p6_event_table; evfence = p6_event_table + PMC_EVENT_TABLE_SIZE(p6); + } else if (pe >= PMC_EV_XSCALE_FIRST && pe <= PMC_EV_XSCALE_LAST) { + ev = xscale_event_table; + evfence = xscale_event_table + PMC_EVENT_TABLE_SIZE(xscale); } else if (pe == PMC_EV_TSC_TSC) { ev = tsc_event_table; evfence = tsc_event_table + PMC_EVENT_TABLE_SIZE(tsc); diff --git a/lib/libpmc/pmc.xscale.3 b/lib/libpmc/pmc.xscale.3 new file mode 100644 index 00000000000..fc9d16ee430 --- /dev/null +++ b/lib/libpmc/pmc.xscale.3 @@ -0,0 +1,39 @@ +.\" Copyright (c) 2009 Rui Paulo. 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. +.\" +.\" This software is provided by Joseph Koshy ``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 Joseph Koshy 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. +.\" +.\" $FreeBSD$ +.\" +.Dd December 23, 2009 +.Os +.Dt PMC.XSCALE 3 +.Sh NAME +.Nm pmc.xscale +.Nd measurement events for +.Tn Intel +.Tn XScale +family CPUs +.Sh LIBRARY +.Lb libpmc +.Sh SYNOPSIS +.In pmc.h +.Sh DESCRIPTION diff --git a/lib/libproc/Makefile b/lib/libproc/Makefile index d6d29b3eaaf..1c5be4e7abd 100644 --- a/lib/libproc/Makefile +++ b/lib/libproc/Makefile @@ -13,8 +13,6 @@ CFLAGS+= -I. -I${.CURDIR} SHLIB_MAJOR= 2 -WARNS?= 6 - WITHOUT_MAN= yes .include diff --git a/lib/libradius/Makefile b/lib/libradius/Makefile index 5054ea0b928..f49f65c0cfe 100644 --- a/lib/libradius/Makefile +++ b/lib/libradius/Makefile @@ -33,6 +33,8 @@ CFLAGS+= -Wall SHLIB_MAJOR= 4 MAN= libradius.3 radius.conf.5 +WARNS?= 3 + .if ${MK_OPENSSL} == "no" DPADD= ${LIBMD} LDADD= -lmd diff --git a/lib/librpcsec_gss/Makefile b/lib/librpcsec_gss/Makefile index 90f7bd7210d..cc14a7b4173 100644 --- a/lib/librpcsec_gss/Makefile +++ b/lib/librpcsec_gss/Makefile @@ -2,7 +2,6 @@ LIB= rpcsec_gss SHLIB_MAJOR= 1 -WARNS?= 6 SRCS+= rpcsec_gss.c rpcsec_gss_prot.c rpcsec_gss_conf.c rpcsec_gss_misc.c \ svc_rpcsec_gss.c diff --git a/lib/librpcsec_gss/rpcsec_gss_conf.c b/lib/librpcsec_gss/rpcsec_gss_conf.c index 4a0349be152..14e063c60d8 100644 --- a/lib/librpcsec_gss/rpcsec_gss_conf.c +++ b/lib/librpcsec_gss/rpcsec_gss_conf.c @@ -55,7 +55,7 @@ struct mech_info { }; SLIST_HEAD(mech_info_list, mech_info); -static struct mech_info_list mechs = SLIST_HEAD_INITIALIZER(&mechs); +static struct mech_info_list mechs = SLIST_HEAD_INITIALIZER(mechs); static const char **mech_names; struct qop_info { @@ -66,7 +66,7 @@ struct qop_info { }; SLIST_HEAD(qop_info_list, qop_info); -static struct qop_info_list qops = SLIST_HEAD_INITIALIZER(&qops); +static struct qop_info_list qops = SLIST_HEAD_INITIALIZER(qops); static int _rpc_gss_string_to_oid(const char* s, gss_OID oid) diff --git a/lib/librpcsec_gss/svc_rpcsec_gss.c b/lib/librpcsec_gss/svc_rpcsec_gss.c index 276126b59cf..d0599be0330 100644 --- a/lib/librpcsec_gss/svc_rpcsec_gss.c +++ b/lib/librpcsec_gss/svc_rpcsec_gss.c @@ -90,7 +90,7 @@ struct svc_rpc_gss_callback { rpc_gss_callback_t cb_callback; }; static SLIST_HEAD(svc_rpc_gss_callback_list, svc_rpc_gss_callback) - svc_rpc_gss_callbacks = SLIST_HEAD_INITIALIZER(&svc_rpc_gss_callbacks); + svc_rpc_gss_callbacks = SLIST_HEAD_INITIALIZER(svc_rpc_gss_callbacks); struct svc_rpc_gss_svc_name { SLIST_ENTRY(svc_rpc_gss_svc_name) sn_link; @@ -102,7 +102,7 @@ struct svc_rpc_gss_svc_name { u_int sn_version; }; static SLIST_HEAD(svc_rpc_gss_svc_name_list, svc_rpc_gss_svc_name) - svc_rpc_gss_svc_names = SLIST_HEAD_INITIALIZER(&svc_rpc_gss_svc_names); + svc_rpc_gss_svc_names = SLIST_HEAD_INITIALIZER(svc_rpc_gss_svc_names); enum svc_rpc_gss_client_state { CLIENT_NEW, /* still authenticating */ diff --git a/lib/librt/Makefile b/lib/librt/Makefile index 00d8cda009e..e2ac3749fe3 100644 --- a/lib/librt/Makefile +++ b/lib/librt/Makefile @@ -4,6 +4,9 @@ LIB=rt SHLIB_MAJOR= 1 CFLAGS+=-I${.CURDIR}/../libc/include -I${.CURDIR} CFLAGS+=-Winline -Wall -g +LDADD+=-lpthread + +WARNS?= 2 #MAN= libthr.3 diff --git a/lib/librt/mq.c b/lib/librt/mq.c index 9bdb5037cd4..f2e01ca0f2b 100644 --- a/lib/librt/mq.c +++ b/lib/librt/mq.c @@ -33,6 +33,7 @@ #include "namespace.h" #include +#include #include #include #include @@ -66,15 +67,15 @@ __weak_reference(__mq_getattr, mq_getattr); __weak_reference(__mq_getattr, _mq_getattr); __weak_reference(__mq_setattr, mq_setattr); __weak_reference(__mq_setattr, _mq_setattr); -__weak_reference(__mq_timedreceive, mq_timedreceive); +__weak_reference(__mq_timedreceive_cancel, mq_timedreceive); __weak_reference(__mq_timedreceive, _mq_timedreceive); -__weak_reference(__mq_timedsend, mq_timedsend); +__weak_reference(__mq_timedsend_cancel, mq_timedsend); __weak_reference(__mq_timedsend, _mq_timedsend); __weak_reference(__mq_unlink, mq_unlink); __weak_reference(__mq_unlink, _mq_unlink); -__weak_reference(__mq_send, mq_send); +__weak_reference(__mq_send_cancel, mq_send); __weak_reference(__mq_send, _mq_send); -__weak_reference(__mq_receive, mq_receive); +__weak_reference(__mq_receive_cancel, mq_receive); __weak_reference(__mq_receive, _mq_receive); mqd_t @@ -195,6 +196,19 @@ __mq_timedreceive(mqd_t mqd, char *buf, size_t len, return __sys_kmq_timedreceive(mqd->oshandle, buf, len, prio, timeout); } +ssize_t +__mq_timedreceive_cancel(mqd_t mqd, char *buf, size_t len, + unsigned *prio, const struct timespec *timeout) +{ + int oldtype; + int ret; + + _pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype); + ret = __sys_kmq_timedreceive(mqd->oshandle, buf, len, prio, timeout); + _pthread_setcanceltype(oldtype, NULL); + return (ret); +} + ssize_t __mq_receive(mqd_t mqd, char *buf, size_t len, unsigned *prio) { @@ -202,6 +216,17 @@ __mq_receive(mqd_t mqd, char *buf, size_t len, unsigned *prio) return __sys_kmq_timedreceive(mqd->oshandle, buf, len, prio, NULL); } +ssize_t +__mq_receive_cancel(mqd_t mqd, char *buf, size_t len, unsigned *prio) +{ + int oldtype; + int ret; + + _pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype); + ret = __sys_kmq_timedreceive(mqd->oshandle, buf, len, prio, NULL); + _pthread_setcanceltype(oldtype, NULL); + return (ret); +} ssize_t __mq_timedsend(mqd_t mqd, char *buf, size_t len, unsigned prio, const struct timespec *timeout) @@ -210,6 +235,19 @@ __mq_timedsend(mqd_t mqd, char *buf, size_t len, return __sys_kmq_timedsend(mqd->oshandle, buf, len, prio, timeout); } +ssize_t +__mq_timedsend_cancel(mqd_t mqd, char *buf, size_t len, + unsigned prio, const struct timespec *timeout) +{ + int oldtype; + int ret; + + _pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype); + ret = __sys_kmq_timedsend(mqd->oshandle, buf, len, prio, timeout); + _pthread_setcanceltype(oldtype, NULL); + return (ret); +} + ssize_t __mq_send(mqd_t mqd, char *buf, size_t len, unsigned prio) { @@ -217,6 +255,19 @@ __mq_send(mqd_t mqd, char *buf, size_t len, unsigned prio) return __sys_kmq_timedsend(mqd->oshandle, buf, len, prio, NULL); } + +ssize_t +__mq_send_cancel(mqd_t mqd, char *buf, size_t len, unsigned prio) +{ + int oldtype; + int ret; + + _pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &oldtype); + ret = __sys_kmq_timedsend(mqd->oshandle, buf, len, prio, NULL); + _pthread_setcanceltype(oldtype, NULL); + return (ret); +} + int __mq_unlink(const char *path) { diff --git a/lib/librt/sigev_thread.c b/lib/librt/sigev_thread.c index d2e25959576..227733069b9 100644 --- a/lib/librt/sigev_thread.c +++ b/lib/librt/sigev_thread.c @@ -439,9 +439,9 @@ worker_routine(void *arg) { struct sigev_node *sn = arg; - _pthread_cleanup_push(worker_cleanup, sn); + pthread_cleanup_push(worker_cleanup, sn); sn->sn_dispatch(sn); - _pthread_cleanup_pop(1); + pthread_cleanup_pop(1); return (0); } diff --git a/lib/libsbuf/Makefile b/lib/libsbuf/Makefile index b166befc287..5d96c0e983e 100644 --- a/lib/libsbuf/Makefile +++ b/lib/libsbuf/Makefile @@ -3,7 +3,6 @@ LIB= sbuf SHLIBDIR?= /lib SRCS= subr_sbuf.c -WARNS?= 2 .PATH: ${.CURDIR}/../../sys/kern diff --git a/lib/libsm/Makefile b/lib/libsm/Makefile index 38c780617e7..ae76e91ccd1 100644 --- a/lib/libsm/Makefile +++ b/lib/libsm/Makefile @@ -15,6 +15,8 @@ CFLAGS+=-DNETINET6 # User customizations to the sendmail build environment CFLAGS+=${SENDMAIL_CFLAGS} +WARNS?= 2 + LIB= sm SRCS+= sm_os.h diff --git a/lib/libsmdb/Makefile b/lib/libsmdb/Makefile index b796deb5acd..976282c5d69 100644 --- a/lib/libsmdb/Makefile +++ b/lib/libsmdb/Makefile @@ -9,6 +9,8 @@ CFLAGS+=-DNEWDB -DNOT_SENDMAIL # User customizations to the sendmail build environment CFLAGS+=${SENDMAIL_CFLAGS} +WARNS?= 3 + LIB= smdb SRCS+= sm_os.h diff --git a/lib/libsmutil/Makefile b/lib/libsmutil/Makefile index 2e835fd76fd..b7e5a694e4f 100644 --- a/lib/libsmutil/Makefile +++ b/lib/libsmutil/Makefile @@ -9,6 +9,8 @@ CFLAGS+=-DNEWDB -DNIS -DMAP_REGEX -DNOT_SENDMAIL # User customizations to the sendmail build environment CFLAGS+=${SENDMAIL_CFLAGS} +WARNS?= 2 + LIB= smutil SRCS+= sm_os.h diff --git a/lib/libstand/Makefile b/lib/libstand/Makefile index 81b132dc7f8..1e4f9771aba 100644 --- a/lib/libstand/Makefile +++ b/lib/libstand/Makefile @@ -15,6 +15,8 @@ NO_PIC= INCS= stand.h MAN= libstand.3 +WARNS?= 0 + CFLAGS+= -ffreestanding -Wformat CFLAGS+= -I${.CURDIR} diff --git a/lib/libstand/bzipfs.c b/lib/libstand/bzipfs.c index 47c799f5734..46a151bc1cd 100644 --- a/lib/libstand/bzipfs.c +++ b/lib/libstand/bzipfs.c @@ -31,6 +31,7 @@ __FBSDID("$FreeBSD$"); #ifndef REGRESSION #include "stand.h" #else +#include #include #include #include @@ -42,7 +43,7 @@ struct open_file { }; #define F_READ 0x0001 /* file opened for reading */ #define EOFFSET (ELAST+8) /* relative seek not supported */ -static inline u_int min(u_int a, u_int b) { return (a < b ? a : b); } +static inline u_int min(u_int a, u_int b) { return(a < b ? a : b); } #define panic(x, y) abort() #endif @@ -174,6 +175,8 @@ bzf_open(const char *fname, struct open_file *f) /* Construct new name */ bzfname = malloc(strlen(fname) + 5); + if (bzfname == NULL) + return(ENOMEM); sprintf(bzfname, "%s.bz2", fname); /* Try to open the compressed datafile */ @@ -195,13 +198,14 @@ bzf_open(const char *fname, struct open_file *f) /* Allocate a bz_file structure, populate it */ bzf = malloc(sizeof(struct bz_file)); + if (bzf == NULL) + return(ENOMEM); bzero(bzf, sizeof(struct bz_file)); bzf->bzf_rawfd = rawfd; - /* Verify that the file is bzipped (XXX why do this afterwards?) */ + /* Verify that the file is bzipped */ if (check_header(bzf)) { close(bzf->bzf_rawfd); - BZ2_bzDecompressEnd(&(bzf->bzf_bzstream)); free(bzf); return(EFTYPE); } @@ -247,7 +251,7 @@ bzf_read(struct open_file *f, void *buf, size_t size, size_t *resid) if (bzf->bzf_bzstream.avail_in == 0) { /* oops, unexpected EOF */ printf("bzf_read: unexpected EOF\n"); if (bzf->bzf_bzstream.avail_out == size) - return (EIO); + return(EIO); break; } @@ -266,6 +270,50 @@ bzf_read(struct open_file *f, void *buf, size_t size, size_t *resid) return(0); } +static int +bzf_rewind(struct open_file *f) +{ + struct bz_file *bzf = (struct bz_file *)f->f_fsdata; + struct bz_file *bzf_tmp; + + /* + * Since bzip2 does not have an equivalent inflateReset function a crude + * one needs to be provided. The functions all called in such a way that + * at any time an error occurs a role back can be done (effectively making + * this rewind 'atomic', either the reset occurs successfully or not at all, + * with no 'undefined' state happening). + */ + + /* Allocate a bz_file structure, populate it */ + bzf_tmp = malloc(sizeof(struct bz_file)); + if (bzf_tmp == NULL) + return(-1); + bzero(bzf_tmp, sizeof(struct bz_file)); + bzf_tmp->bzf_rawfd = bzf->bzf_rawfd; + + /* Initialise the inflation engine */ + if (BZ2_bzDecompressInit(&(bzf_tmp->bzf_bzstream), 0, 1) != BZ_OK) { + free(bzf_tmp); + return(-1); + } + + /* Seek back to the beginning of the file */ + if (lseek(bzf->bzf_rawfd, 0, SEEK_SET) == -1) { + BZ2_bzDecompressEnd(&(bzf_tmp->bzf_bzstream)); + free(bzf_tmp); + return(-1); + } + + /* Free old bz_file data */ + BZ2_bzDecompressEnd(&(bzf->bzf_bzstream)); + free(bzf); + + /* Use the new bz_file data */ + f->f_fsdata = bzf_tmp; + + return(0); +} + static off_t bzf_seek(struct open_file *f, off_t offset, int where) { @@ -284,14 +332,17 @@ bzf_seek(struct open_file *f, off_t offset, int where) target = -1; default: errno = EINVAL; - return (-1); + return(-1); } /* Can we get there from here? */ - if (target < bzf->bzf_bzstream.total_out_lo32) { + if (target < bzf->bzf_bzstream.total_out_lo32 && bzf_rewind(f) != 0) { errno = EOFFSET; return -1; - } + } + + /* if bzf_rewind was called then bzf has changed */ + bzf = (struct bz_file *)f->f_fsdata; /* skip forwards if required */ while (target > bzf->bzf_bzstream.total_out_lo32) { @@ -301,7 +352,7 @@ bzf_seek(struct open_file *f, off_t offset, int where) return(-1); } /* This is where we are (be honest if we overshot) */ - return (bzf->bzf_bzstream.total_out_lo32); + return(bzf->bzf_bzstream.total_out_lo32); } static int diff --git a/lib/libstand/gzipfs.c b/lib/libstand/gzipfs.c index 4f40a4ae3b3..9ff7985636b 100644 --- a/lib/libstand/gzipfs.c +++ b/lib/libstand/gzipfs.c @@ -212,10 +212,9 @@ zf_open(const char *fname, struct open_file *f) bzero(zf, sizeof(struct z_file)); zf->zf_rawfd = rawfd; - /* Verify that the file is gzipped (XXX why do this afterwards?) */ + /* Verify that the file is gzipped */ if (check_header(zf)) { close(zf->zf_rawfd); - inflateEnd(&(zf->zf_zstream)); free(zf); return(EFTYPE); } @@ -261,7 +260,7 @@ zf_read(struct open_file *f, void *buf, size_t size, size_t *resid) if (zf->zf_zstream.avail_in == 0) { /* oops, unexpected EOF */ printf("zf_read: unexpected EOF\n"); if (zf->zf_zstream.avail_out == size) - return (EIO); + return(EIO); break; } @@ -286,12 +285,13 @@ zf_rewind(struct open_file *f) struct z_file *zf = (struct z_file *)f->f_fsdata; if (lseek(zf->zf_rawfd, zf->zf_dataoffset, SEEK_SET) == -1) - return -1; + return(-1); zf->zf_zstream.avail_in = 0; zf->zf_zstream.next_in = NULL; + zf->zf_endseen = 0; (void)inflateReset(&zf->zf_zstream); - return 0; + return(0); } static off_t @@ -312,12 +312,12 @@ zf_seek(struct open_file *f, off_t offset, int where) target = -1; default: errno = EINVAL; - return (-1); + return(-1); } /* rewind if required */ if (target < zf->zf_zstream.total_out && zf_rewind(f) != 0) - return -1; + return(-1); /* skip forwards if required */ while (target > zf->zf_zstream.total_out) { @@ -327,7 +327,7 @@ zf_seek(struct open_file *f, off_t offset, int where) return(-1); } /* This is where we are (be honest if we overshot) */ - return (zf->zf_zstream.total_out); + return(zf->zf_zstream.total_out); } diff --git a/lib/libtacplus/Makefile b/lib/libtacplus/Makefile index 13ceb4327ef..617f8773708 100644 --- a/lib/libtacplus/Makefile +++ b/lib/libtacplus/Makefile @@ -33,4 +33,6 @@ LDADD= -lmd SHLIB_MAJOR= 4 MAN= libtacplus.3 tacplus.conf.5 +WARNS?= 2 + .include diff --git a/lib/libtacplus/libtacplus.3 b/lib/libtacplus/libtacplus.3 index 9ce6c4a1746..f76bc9d53e4 100644 --- a/lib/libtacplus/libtacplus.3 +++ b/lib/libtacplus/libtacplus.3 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd September 2, 1998 +.Dd December 11, 2009 .Dt LIBTACPLUS 3 .Os .Sh NAME @@ -44,6 +44,8 @@ .Fn tac_create_authen "struct tac_handle *h" "int action" "int type" "int service" .Ft int .Fn tac_create_author "struct tac_handle *h" "int method" "int type" "int service" +.Ft int +.Fn tac_create_acct "struct tac_handle *h" "int acct" "int action" "int type" "int service" .Ft char * .Fn tac_get_av "struct tac_handle *h" "u_int index" .Ft char * @@ -59,6 +61,8 @@ .Ft int .Fn tac_send_author "struct tac_handle *h" .Ft int +.Fn tac_send_acct "struct tac_handle *h" +.Ft int .Fn tac_set_av "struct tac_handle *h" "u_int index" "const char *av_pair" .Ft int .Fn tac_set_data "struct tac_handle *h" "const void *data" "size_t data_len" @@ -193,6 +197,20 @@ TACACS+ protocol specification. The .In taclib.h header file contains symbolic constants for these values. +.Sh CREATING A TACACS+ ACCOUNTING REQUEST +To begin constructing a new accounting request, call +.Fn tac_create_acct . +The +.Va acct , +.Va action , +.Va type , +and +.Va service +arguments must be set to appropriate values as defined in the +TACACS+ protocol specification. +The +.In taclib.h +header file contains symbolic constants for these values. .Sh SETTING OPTIONAL PARAMETERS ON A REQUEST After creating a request, various optional parameters may be attached to it through calls to @@ -354,6 +372,29 @@ include: .Pp The number of AV pairs received is obtained using .Fn TAC_AUTHEN_AV_COUNT . +.Sh SENDING THE ACCOUNTING REQUEST AND RECEIVING THE RESPONSE +After the TACACS+ authorization request has been constructed, it +is sent by means of +.Fn tac_send_acct . +This function connects to a server if not already connected, sends +the request, and waits for a reply. +On failure, +.Fn tac_send_acct +returns \-1. +Otherwise, it returns the TACACS+ status code +Possible status codes, defined in +.In taclib.h , +include: +.Pp +.Bl -item -compact -offset indent +.It +.Dv TAC_ACCT_STATUS_SUCCESS +.It +.Dv TAC_ACCT_STATUS_ERROR +.It +.Dv TAC_ACCT_STATUS_FOLLOW +.El +.Pp .Sh EXTRACTING INFORMATION FROM THE SERVER'S AUTHORIZATION RESPONSE Like an authentication response packet, an authorization response packet from the @@ -418,10 +459,14 @@ which can be retrieved using .It .Fn tac_create_author .It +.Fn tac_create_acct +.It .Fn tac_send_authen .It .Fn tac_send_author .It +.Fn tac_send_acct +.It .Fn tac_set_av .It .Fn tac_set_data diff --git a/lib/libtacplus/taclib.c b/lib/libtacplus/taclib.c index 6ac3c72501c..ffe371a7f89 100644 --- a/lib/libtacplus/taclib.c +++ b/lib/libtacplus/taclib.c @@ -211,6 +211,8 @@ protocol_version(int msg_type, int var, int type) } break; + case TAC_ACCT: + default: minor = 0; break; @@ -967,6 +969,23 @@ tac_create_author(struct tac_handle *h, int method, int type, int service) return 0; } +int +tac_create_acct(struct tac_handle *h, int acct, int action, int type, int service) +{ + struct tac_acct_start *as; + + create_msg(h, TAC_ACCT, action, type); + + as = &h->request.u.acct_start; + as->action = acct; + as->authen_action = action; + as->priv_lvl = TAC_PRIV_LVL_USER; + as->authen_type = type; + as->authen_service = service; + + return 0; +} + static void create_msg(struct tac_handle *h, int msg_type, int var, int type) { @@ -1157,6 +1176,49 @@ tac_send_author(struct tac_handle *h) return ares->av_cnt << 8 | ares->status; } +int +tac_send_acct(struct tac_handle *h) +{ + register int i, current; + struct tac_acct_start *as = &h->request.u.acct_start; + struct tac_acct_reply *ar = &h->response.u.acct_reply; + + /* start */ + as = &h->request.u.acct_start; + h->request.length = htonl(offsetof(struct tac_acct_start, rest[0])); + for (as->av_cnt = 0, i = 0; i < MAXAVPAIRS; i++) + if (h->avs[i].len && h->avs[i].data) + as->av_cnt++; + h->request.length = ntohl(htonl(h->request.length) + as->av_cnt); + + if (add_str_8(h, &as->user_len, &h->user) == -1 || + add_str_8(h, &as->port_len, &h->port) == -1 || + add_str_8(h, &as->rem_addr_len, &h->rem_addr) == -1) + return -1; + + for (i = current = 0; i < MAXAVPAIRS; i++) + if (h->avs[i].len && h->avs[i].data) + if (add_str_8(h, &as->rest[current++], &(h->avs[i])) == -1) + return -1; + + /* send */ + if (send_msg(h) == -1 || recv_msg(h) == -1) + return -1; + + /* reply */ + h->srvr_pos = offsetof(struct tac_acct_reply, rest[0]); + if (get_srvr_str(h, "msg", &h->srvr_msg, ntohs(ar->msg_len)) == -1 || + get_srvr_str(h, "data", &h->srvr_data, ntohs(ar->data_len)) == -1 || + get_srvr_end(h) == -1) + return -1; + + /* Sanity checks */ + if (!h->single_connect) + close_connection(h); + + return ar->status; +} + int tac_set_rem_addr(struct tac_handle *h, const char *addr) { @@ -1263,8 +1325,13 @@ tac_get_av_value(struct tac_handle *h, const char *attribute) * h->srvr_avs[0] = "foobie=var1" * h->srvr_avs[1] = "foo=var2" * is handled. + * + * Note that for empty string attribute values a + * 0-length string is returned in order to distinguish + * against unset values. + * dump_str() will handle srvr.len == 0 correctly. */ - if (found_seperator == 1 && ch != end) { + if (found_seperator == 1) { srvr.len = end - ch; srvr.data = ch; return dup_str(h, &srvr, NULL); diff --git a/lib/libtacplus/taclib.h b/lib/libtacplus/taclib.h index 2ef36b9efd5..46b9a59d80a 100644 --- a/lib/libtacplus/taclib.h +++ b/lib/libtacplus/taclib.h @@ -103,6 +103,17 @@ struct tac_handle; #define TAC_AUTHOR_STATUS_FAIL 0x10 #define TAC_AUTHOR_STATUS_ERROR 0x11 +/* Accounting actions */ +#define TAC_ACCT_MORE 0x1 +#define TAC_ACCT_START 0x2 +#define TAC_ACCT_STOP 0x4 +#define TAC_ACCT_WATCHDOG 0x8 + +/* Accounting status */ +#define TAC_ACCT_STATUS_SUCCESS 0x1 +#define TAC_ACCT_STATUS_ERROR 0x2 +#define TAC_ACCT_STATUS_FOLLOW 0x21 + __BEGIN_DECLS int tac_add_server(struct tac_handle *, const char *, int, const char *, int, int); @@ -127,6 +138,8 @@ int tac_set_av(struct tac_handle *, u_int, const char *); char *tac_get_av(struct tac_handle *, u_int); char *tac_get_av_value(struct tac_handle *, const char *); void tac_clear_avs(struct tac_handle *); +int tac_create_acct(struct tac_handle *, int, int, int, int); +int tac_send_acct(struct tac_handle *); __END_DECLS #endif /* _TACLIB_H_ */ diff --git a/lib/libtacplus/taclib_private.h b/lib/libtacplus/taclib_private.h index bbc1990c926..2730023a632 100644 --- a/lib/libtacplus/taclib_private.h +++ b/lib/libtacplus/taclib_private.h @@ -132,6 +132,26 @@ struct tac_author_response { unsigned char rest[1]; }; +struct tac_acct_start { + u_int8_t action; + u_int8_t authen_action; + u_int8_t priv_lvl; + u_int8_t authen_type; + u_int8_t authen_service; + u_int8_t user_len; + u_int8_t port_len; + u_int8_t rem_addr_len; + u_int8_t av_cnt; + unsigned char rest[1]; +}; + +struct tac_acct_reply { + u_int16_t msg_len; + u_int16_t data_len; + u_int8_t status; + unsigned char rest[1]; +}; + struct tac_msg { u_int8_t version; u_int8_t type; @@ -145,6 +165,8 @@ struct tac_msg { struct tac_authen_cont authen_cont; struct tac_author_request author_request; struct tac_author_response author_response; + struct tac_acct_start acct_start; + struct tac_acct_reply acct_reply; unsigned char body[BODYSIZE]; } u; }; diff --git a/lib/libthr/pthread.map b/lib/libthr/pthread.map index 62f3ff581d1..6460bec514a 100644 --- a/lib/libthr/pthread.map +++ b/lib/libthr/pthread.map @@ -145,13 +145,6 @@ FBSD_1.0 { recvfrom; recvmsg; select; - sem_destroy; - sem_getvalue; - sem_init; - sem_post; - sem_timedwait; - sem_trywait; - sem_wait; sendmsg; sendto; sigaction; @@ -348,13 +341,6 @@ FBSDprivate_1.0 { _pthread_timedjoin_np; _pthread_yield; _raise; - _sem_destroy; - _sem_getvalue; - _sem_init; - _sem_post; - _sem_timedwait; - _sem_trywait; - _sem_wait; _sigaction; _sigprocmask; _sigsuspend; diff --git a/lib/libthr/thread/thr_init.c b/lib/libthr/thread/thr_init.c index f96bba9c617..1bfdd287c20 100644 --- a/lib/libthr/thread/thr_init.c +++ b/lib/libthr/thread/thr_init.c @@ -246,7 +246,9 @@ static pthread_func_t jmp_table[][2] = { {DUAL_ENTRY(_pthread_setcanceltype)}, /* PJT_SETCANCELTYPE */ {DUAL_ENTRY(_pthread_setspecific)}, /* PJT_SETSPECIFIC */ {DUAL_ENTRY(_pthread_sigmask)}, /* PJT_SIGMASK */ - {DUAL_ENTRY(_pthread_testcancel)} /* PJT_TESTCANCEL */ + {DUAL_ENTRY(_pthread_testcancel)}, /* PJT_TESTCANCEL */ + {DUAL_ENTRY(__pthread_cleanup_pop_imp)},/* PJT_CLEANUP_POP_IMP */ + {DUAL_ENTRY(__pthread_cleanup_push_imp)}/* PJT_CLEANUP_PUSH_IMP */ }; static int init_once = 0; diff --git a/lib/libthr/thread/thr_private.h b/lib/libthr/thread/thr_private.h index 57be0ae0894..415c1ecc4ec 100644 --- a/lib/libthr/thread/thr_private.h +++ b/lib/libthr/thread/thr_private.h @@ -52,6 +52,20 @@ #include #include +#define SYM_FB10(sym) __CONCAT(sym, _fb10) +#define SYM_FBP10(sym) __CONCAT(sym, _fbp10) +#define WEAK_REF(sym, alias) __weak_reference(sym, alias) +#define SYM_COMPAT(sym, impl, ver) __sym_compat(sym, impl, ver) +#define SYM_DEFAULT(sym, impl, ver) __sym_default(sym, impl, ver) + +#define FB10_COMPAT(func, sym) \ + WEAK_REF(func, SYM_FB10(sym)); \ + SYM_COMPAT(sym, SYM_FB10(sym), FBSD_1.0) + +#define FB10_COMPAT_PRIVATE(func, sym) \ + WEAK_REF(func, SYM_FBP10(sym)); \ + SYM_DEFAULT(sym, SYM_FBP10(sym), FBSDprivate_1.0) + #ifndef __hidden #define __hidden __attribute__((visibility("hidden"))) #endif @@ -660,6 +674,9 @@ int _schedparam_to_rtp(int policy, const struct sched_param *param, void _thread_bp_create(void); void _thread_bp_death(void); int _sched_yield(void); +void _thr_sem_prefork(void); +void _thr_sem_postfork(void); +void _thr_sem_child_postfork(void); void _pthread_cleanup_push(void (*)(void *), void *); void _pthread_cleanup_pop(int); diff --git a/lib/libthr/thread/thr_sem.c b/lib/libthr/thread/thr_sem.c index 0dd5599976f..f20bde36a33 100644 --- a/lib/libthr/thread/thr_sem.c +++ b/lib/libthr/thread/thr_sem.c @@ -36,7 +36,6 @@ #include #include #include -#include #include #include #include <_semaphore.h> @@ -44,248 +43,73 @@ #include "thr_private.h" +FB10_COMPAT(_sem_init_compat, sem_init); +FB10_COMPAT(_sem_destroy_compat, sem_destroy); +FB10_COMPAT(_sem_getvalue_compat, sem_getvalue); +FB10_COMPAT(_sem_trywait_compat, sem_trywait); +FB10_COMPAT(_sem_wait_compat, sem_wait); +FB10_COMPAT(_sem_timedwait_compat, sem_timedwait); +FB10_COMPAT(_sem_post_compat, sem_post); -__weak_reference(_sem_init, sem_init); -__weak_reference(_sem_destroy, sem_destroy); -__weak_reference(_sem_getvalue, sem_getvalue); -__weak_reference(_sem_trywait, sem_trywait); -__weak_reference(_sem_wait, sem_wait); -__weak_reference(_sem_timedwait, sem_timedwait); -__weak_reference(_sem_post, sem_post); +typedef struct sem *sem_t; +extern int _libc_sem_init_compat(sem_t *sem, int pshared, unsigned int value); +extern int _libc_sem_destroy_compat(sem_t *sem); +extern int _libc_sem_getvalue_compat(sem_t * __restrict sem, int * __restrict sval); +extern int _libc_sem_trywait_compat(sem_t *sem); +extern int _libc_sem_wait_compat(sem_t *sem); +extern int _libc_sem_timedwait_compat(sem_t * __restrict sem, + const struct timespec * __restrict abstime); +extern int _libc_sem_post_compat(sem_t *sem); -static inline int -sem_check_validity(sem_t *sem) +int _sem_init_compat(sem_t *sem, int pshared, unsigned int value); +int _sem_destroy_compat(sem_t *sem); +int _sem_getvalue_compat(sem_t * __restrict sem, int * __restrict sval); +int _sem_trywait_compat(sem_t *sem); +int _sem_wait_compat(sem_t *sem); +int _sem_timedwait_compat(sem_t * __restrict sem, + const struct timespec * __restrict abstime); +int _sem_post_compat(sem_t *sem); + +int +_sem_init_compat(sem_t *sem, int pshared, unsigned int value) { - - if ((sem != NULL) && ((*sem)->magic == SEM_MAGIC)) - return (0); - else { - errno = EINVAL; - return (-1); - } -} - -static sem_t -sem_alloc(unsigned int value, semid_t semid, int system_sem) -{ - sem_t sem; - - if (value > SEM_VALUE_MAX) { - errno = EINVAL; - return (NULL); - } - - sem = (sem_t)malloc(sizeof(struct sem)); - if (sem == NULL) { - errno = ENOSPC; - return (NULL); - } - bzero(sem, sizeof(*sem)); - /* - * Fortunatly count and nwaiters are adjacency, so we can - * use umtx_wait to wait on it, umtx_wait needs an address - * can be accessed as a long interger. - */ - sem->count = (u_int32_t)value; - sem->nwaiters = 0; - sem->magic = SEM_MAGIC; - sem->semid = semid; - sem->syssem = system_sem; - return (sem); + return _libc_sem_init_compat(sem, pshared, value); } int -_sem_init(sem_t *sem, int pshared, unsigned int value) +_sem_destroy_compat(sem_t *sem) { - semid_t semid; - - semid = (semid_t)SEM_USER; - if ((pshared != 0) && (ksem_init(&semid, value) != 0)) - return (-1); - - (*sem) = sem_alloc(value, semid, pshared); - if ((*sem) == NULL) { - if (pshared != 0) - ksem_destroy(semid); - return (-1); - } - return (0); + return _libc_sem_destroy_compat(sem); } int -_sem_destroy(sem_t *sem) +_sem_getvalue_compat(sem_t * __restrict sem, int * __restrict sval) { - int retval; - - if (sem_check_validity(sem) != 0) - return (-1); - - /* - * If this is a system semaphore let the kernel track it otherwise - * make sure there are no waiters. - */ - if ((*sem)->syssem != 0) - retval = ksem_destroy((*sem)->semid); - else { - retval = 0; - (*sem)->magic = 0; - } - if (retval == 0) - free(*sem); - return (retval); + return _libc_sem_getvalue_compat(sem, sval); } int -_sem_getvalue(sem_t * __restrict sem, int * __restrict sval) +_sem_trywait_compat(sem_t *sem) { - int retval; - - if (sem_check_validity(sem) != 0) - return (-1); - - if ((*sem)->syssem != 0) - retval = ksem_getvalue((*sem)->semid, sval); - else { - *sval = (int)(*sem)->count; - retval = 0; - } - return (retval); + return _libc_sem_trywait_compat(sem); } int -_sem_trywait(sem_t *sem) +_sem_wait_compat(sem_t *sem) { - int val; - - if (sem_check_validity(sem) != 0) - return (-1); - - if ((*sem)->syssem != 0) - return (ksem_trywait((*sem)->semid)); - - while ((val = (*sem)->count) > 0) { - if (atomic_cmpset_acq_int(&(*sem)->count, val, val - 1)) - return (0); - } - errno = EAGAIN; - return (-1); -} - -static void -sem_cancel_handler(void *arg) -{ - sem_t *sem = arg; - - atomic_add_int(&(*sem)->nwaiters, -1); - if ((*sem)->nwaiters && (*sem)->count) - _thr_umtx_wake(&(*sem)->count, 1, 0); + return _libc_sem_wait_compat(sem); } int -_sem_wait(sem_t *sem) -{ - struct pthread *curthread; - int val, retval; - - if (sem_check_validity(sem) != 0) - return (-1); - - curthread = _get_curthread(); - if ((*sem)->syssem != 0) { - _thr_cancel_enter(curthread); - retval = ksem_wait((*sem)->semid); - _thr_cancel_leave(curthread); - return (retval); - } - - _pthread_testcancel(); - do { - while ((val = (*sem)->count) > 0) { - if (atomic_cmpset_acq_int(&(*sem)->count, val, val - 1)) - return (0); - } - atomic_add_int(&(*sem)->nwaiters, 1); - THR_CLEANUP_PUSH(curthread, sem_cancel_handler, sem); - _thr_cancel_enter(curthread); - retval = _thr_umtx_wait_uint(&(*sem)->count, 0, NULL, 0); - _thr_cancel_leave(curthread); - THR_CLEANUP_POP(curthread, 0); - atomic_add_int(&(*sem)->nwaiters, -1); - } while (retval == 0); - errno = retval; - return (-1); -} - -int -_sem_timedwait(sem_t * __restrict sem, +_sem_timedwait_compat(sem_t * __restrict sem, const struct timespec * __restrict abstime) { - struct timespec ts, ts2; - struct pthread *curthread; - int val, retval; - - if (sem_check_validity(sem) != 0) - return (-1); - - curthread = _get_curthread(); - if ((*sem)->syssem != 0) { - _thr_cancel_enter(curthread); - retval = ksem_timedwait((*sem)->semid, abstime); - _thr_cancel_leave(curthread); - return (retval); - } - - /* - * The timeout argument is only supposed to - * be checked if the thread would have blocked. - */ - _pthread_testcancel(); - do { - while ((val = (*sem)->count) > 0) { - if (atomic_cmpset_acq_int(&(*sem)->count, val, val - 1)) - return (0); - } - if (abstime == NULL) { - errno = EINVAL; - return (-1); - } - clock_gettime(CLOCK_REALTIME, &ts); - TIMESPEC_SUB(&ts2, abstime, &ts); - atomic_add_int(&(*sem)->nwaiters, 1); - THR_CLEANUP_PUSH(curthread, sem_cancel_handler, sem); - _thr_cancel_enter(curthread); - retval = _thr_umtx_wait_uint((uint32_t*)&(*sem)->count, 0, &ts2, 0); - _thr_cancel_leave(curthread); - THR_CLEANUP_POP(curthread, 0); - atomic_add_int(&(*sem)->nwaiters, -1); - } while (retval == 0); - errno = retval; - return (-1); + return _libc_sem_timedwait_compat(sem, abstime); } -/* - * sem_post() is required to be safe to call from within - * signal handlers, these code should work as that. - */ - int -_sem_post(sem_t *sem) +_sem_post_compat(sem_t *sem) { - int retval = 0; - - if (sem_check_validity(sem) != 0) - return (-1); - - if ((*sem)->syssem != 0) - return (ksem_post((*sem)->semid)); - - atomic_add_rel_int(&(*sem)->count, 1); - - if ((*sem)->nwaiters) { - retval = _thr_umtx_wake(&(*sem)->count, 1, 0); - if (retval != 0) - retval = -1; - } - return (retval); + return _libc_sem_post_compat(sem); } diff --git a/lib/libthr/thread/thr_umtx.c b/lib/libthr/thread/thr_umtx.c index 7c59bb78ccb..5af923dce4f 100644 --- a/lib/libthr/thread/thr_umtx.c +++ b/lib/libthr/thread/thr_umtx.c @@ -112,10 +112,13 @@ __thr_umutex_timedlock(struct umutex *mtx, uint32_t id, int __thr_umutex_unlock(struct umutex *mtx, uint32_t id) { +#ifndef __ia64__ + /* XXX this logic has a race-condition on ia64. */ if ((mtx->m_flags & (UMUTEX_PRIO_PROTECT | UMUTEX_PRIO_INHERIT)) == 0) { atomic_cmpset_rel_32(&mtx->m_owner, id | UMUTEX_CONTESTED, UMUTEX_CONTESTED); return _umtx_op_err(mtx, UMTX_OP_MUTEX_WAKE, 0, 0, 0); } +#endif /* __ia64__ */ return _umtx_op_err(mtx, UMTX_OP_MUTEX_UNLOCK, 0, 0, 0); } diff --git a/lib/libthread_db/Makefile b/lib/libthread_db/Makefile index 22868c31458..7aaefd7cfd4 100644 --- a/lib/libthread_db/Makefile +++ b/lib/libthread_db/Makefile @@ -9,7 +9,6 @@ SRCS+= libpthread_md.c SRCS+= libpthread_db.c SRCS+= libthr_db.c INCS= thread_db.h -WARNS?= 6 CFLAGS+=-I. -I${.CURDIR} SYM_MAPS+=${.CURDIR}/Symbol.map diff --git a/lib/libufs/Makefile b/lib/libufs/Makefile index 10726e4247e..c9232ef54ad 100644 --- a/lib/libufs/Makefile +++ b/lib/libufs/Makefile @@ -16,7 +16,7 @@ MLINKS+= ufs_disk_close.3 ufs_disk_fillout.3 MLINKS+= ufs_disk_close.3 ufs_disk_fillout_blank.3 MLINKS+= ufs_disk_close.3 ufs_disk_write.3 -WARNS?= 2 +WARNS?= 3 CFLAGS+= -D_LIBUFS .if defined(LIBUFS_DEBUG) diff --git a/lib/libugidfw/Makefile b/lib/libugidfw/Makefile index 23c5ea7aaf5..2e095657552 100644 --- a/lib/libugidfw/Makefile +++ b/lib/libugidfw/Makefile @@ -5,6 +5,8 @@ SHLIB_MAJOR= 4 SRCS= ugidfw.c INCS= ugidfw.h +WARNS?= 2 + MAN+= bsde_get_rule.3 bsde_get_rule_count.3 bsde_parse_rule.3 \ bsde_rule_to_string.3 libugidfw.3 diff --git a/lib/libugidfw/ugidfw.c b/lib/libugidfw/ugidfw.c index 341ac25f4a6..49c987dc3f6 100644 --- a/lib/libugidfw/ugidfw.c +++ b/lib/libugidfw/ugidfw.c @@ -770,7 +770,6 @@ bsde_parse_fsid(char *spec, struct fsid *fsid, size_t buflen, char *errstr) { size_t len; struct statfs buf; - int i; if (statfs(spec, &buf) < 0) { len = snprintf(errstr, buflen, "Unable to get id for %s: %s", diff --git a/lib/libulog/Makefile b/lib/libulog/Makefile new file mode 100644 index 00000000000..c05e156da3f --- /dev/null +++ b/lib/libulog/Makefile @@ -0,0 +1,49 @@ +# $FreeBSD$ + +SHLIBDIR?=/lib + +.include + +LIB= ulog +SHLIB_MAJOR= 0 +INCS= ulog.h utempter.h +SRCS= ulog.h ulog_getutxent.c ulog_internal.h ulog_login.c \ + ulog_login_pseudo.c ulog_pututxline.c ulog_util.c utempter.c + +MAN= ulog_getutxent.3 ulog_login.3 ulog_setutxfile.3 \ + utempter_add_record.3 +MLINKS+=ulog_getutxent.3 ulog_endutxent.3 \ + ulog_getutxent.3 ulog_getutxline.3 \ + ulog_getutxent.3 ulog_pututxline.3 \ + ulog_getutxent.3 ulog_setutxent.3 \ + ulog_login.3 ulog_login_pseudo.3 \ + ulog_login.3 ulog_logout.3 \ + ulog_login.3 ulog_logout_pseudo.3 \ + ulog_setutxfile.3 ulog_getutxuser.3 \ + utempter_add_record.3 utempter_remove_added_record.3 \ + utempter_add_record.3 utempter_remove_record.3 \ + utempter_add_record.3 addToUtmp.3 \ + utempter_remove_added_record.3 removeFromUtmp.3 \ + utempter_remove_record.3 removeLineFromUtmp.3 + +# Add links to -style functions. +MLINKS+=ulog_endutxent.3 endutxent.3 \ + ulog_getutxent.3 getutxent.3 \ + ulog_getutxline.3 getutxline.3 \ + ulog_pututxline.3 pututxline.3 \ + ulog_setutxent.3 setutxent.3 + +VERSION_DEF= ${.CURDIR}/../libc/Versions.def +SYMBOL_MAPS= ${.CURDIR}/Symbol.map + +.if ${MK_INSTALLLIB} != "no" +SYMLINKS+=libulog.a ${LIBDIR}/libutempter.a +.endif +.if !defined(NO_PIC) +SYMLINKS+=libulog.so ${LIBDIR}/libutempter.so +.endif +.if ${MK_PROFILE} != "no" +SYMLINKS+=libulog_p.a ${LIBDIR}/libutempter_p.a +.endif + +.include diff --git a/lib/libulog/Symbol.map b/lib/libulog/Symbol.map new file mode 100644 index 00000000000..38f2df8425a --- /dev/null +++ b/lib/libulog/Symbol.map @@ -0,0 +1,24 @@ +/* + * $FreeBSD$ + */ + +FBSD_1.2 { + ulog_endutxent; + ulog_getutxent; + ulog_getutxline; + ulog_getutxuser; + ulog_login; + ulog_login_pseudo; + ulog_logout; + ulog_logout_pseudo; + ulog_pututxline; + ulog_setutxent; + ulog_setutxfile; + + addToUtmp; + removeFromUtmp; + removeLineFromUtmp; + utempter_add_record; + utempter_remove_added_record; + utempter_remove_record; +}; diff --git a/lib/libulog/ulog.h b/lib/libulog/ulog.h new file mode 100644 index 00000000000..b57c0e0eb12 --- /dev/null +++ b/lib/libulog/ulog.h @@ -0,0 +1,108 @@ +/*- + * Copyright (c) 2009 Ed Schouten + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $FreeBSD$ + */ + +#ifndef _ULOG_H_ +#define _ULOG_H_ + +#include +#include +#include + +#ifndef _PID_T_DECLARED +typedef __pid_t pid_t; +#define _PID_T_DECLARED +#endif + +/* + * libulog. + * + * This library is provided as a migratory tool towards . We + * cannot yet implement , because our on-disk file format lacks + * various fields. also has some shortcomings. Ideally we + * want to allow logging of user login records generated by unprivileged + * processes as well, provided that they hold a file descriptor to a + * pseudo-terminal master device. + * + * This library (or at least parts of it) will hopefully deprecate over + * time, when we provide the API. + */ + +struct ulog_utmpx { + char ut_user[32]; + char ut_id[8]; /* XXX: unsupported. */ + char ut_line[32]; + char ut_host[256]; + pid_t ut_pid; /* XXX: unsupported. */ + short ut_type; +#define EMPTY 0 +#define BOOT_TIME 1 +#define OLD_TIME 2 +#define NEW_TIME 3 +#define USER_PROCESS 4 +#define INIT_PROCESS 5 /* XXX: unsupported. */ +#define LOGIN_PROCESS 6 /* XXX: unsupported. */ +#define DEAD_PROCESS 7 +#define SHUTDOWN_TIME 8 + struct timeval ut_tv; +}; + +__BEGIN_DECLS +/* POSIX routines. */ +void ulog_endutxent(void); +struct ulog_utmpx *ulog_getutxent(void); +#if 0 +struct ulog_utmpx *ulog_getutxid(const struct ulog_utmpx *); +#endif +struct ulog_utmpx *ulog_getutxline(const struct ulog_utmpx *); +struct ulog_utmpx *ulog_pututxline(const struct ulog_utmpx *); +void ulog_setutxent(void); + +/* Extensions. */ +struct ulog_utmpx *ulog_getutxuser(const char *); +int ulog_setutxfile(int, const char *); +#define UTXI_TTY 0 +#define UTXI_TIME 1 +#define UTXI_USER 2 + +/* Login/logout utility functions. */ +void ulog_login(const char *, const char *, const char *); +void ulog_login_pseudo(int, const char *); +void ulog_logout(const char *); +void ulog_logout_pseudo(int); +__END_DECLS + +#ifdef _ULOG_POSIX_NAMES +#define utmpx ulog_utmpx +#define endutxent ulog_endutxent +#define getutxent ulog_getutxent +#define getutxline ulog_getutxline +#define pututxline ulog_pututxline +#define setutxent ulog_setutxent +#endif /* _ULOG_POSIX_NAMES */ + +#endif /* !_ULOG_H_ */ diff --git a/lib/libulog/ulog_getutxent.3 b/lib/libulog/ulog_getutxent.3 new file mode 100644 index 00000000000..99c1ea17380 --- /dev/null +++ b/lib/libulog/ulog_getutxent.3 @@ -0,0 +1,183 @@ +.\" Copyright (c) 2009 Ed Schouten +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. +.\" +.\" $FreeBSD$ +.\" +.Dd December 5, 2009 +.Os +.Dt ULOG_GETUTXENT 3 +.Sh NAME +.Nm ulog_getutxent , +.Nm ulog_getutxline , +.Nm ulog_pututxline , +.Nm ulog_setutxent , +.Nm ulog_endutxent +.Nd read user login records +.Sh LIBRARY +.Lb libulog +.Sh SYNOPSIS +.In ulog.h +.Ft struct ulog_utmpx * +.Fn ulog_getutxent "void" +.Ft struct ulog_utmpx * +.Fn ulog_getutxline "const struct ulog_utmpx *line" +.Ft struct ulog_utmpx * +.Fn ulog_pututxline "const struct ulog_utmpx *utmpx" +.Ft void +.Fn ulog_setutxent "void" +.Ft void +.Fn ulog_endutxent "void" +.Sh DESCRIPTION +The +.Fn ulog_getutxent +function returns a pointer to an object, with the following structure, +containing stored information of an active user login session. +.Bd -literal +struct ulog_utmpx { + char ut_user[]; /* Username. */ + char ut_id[]; /* Private data. */ + char ut_line[]; /* TTY device. */ + char ut_host[]; /* Remote hostname. */ + pid_t ut_pid; /* Process identifier. */ + short ut_type; /* Type of entry. */ + struct timeval ut_tv; /* Timestamp. */ +}; +.Ed +.Pp +The fields are as follows: +.Bl -tag -width ut_user +.It Fa ut_user +The username of the logged in user. +.It Fa ut_id +Private data that can be used to later identify the record. +This implementation is not capable of storing this value on disk. +.It Fa ut_line +The pathname of the TTY device, without the leading +.Pa /dev/ +directory. +.It Fa ut_host +An optional hostname of a remote system, if the login session is +provided through a networked login service. +.It Fa ut_pid +Process identifier of the session leader of the login session. +This implementation is not capable of storing this value on disk. +.It Fa ut_type +The +.Fa ut_type +field contains the type of the message, which may have one of the +following values: +.Bl -tag -width SHUTDOWN_TIME +.It Dv EMPTY +No valid user accounting information. +.It Dv BOOT_TIME +Identifies time of system boot. +.It Dv OLD_TIME +Identifies time when system clock changed. +.It Dv NEW_TIME +Identifies time after system clock changed. +.It Dv USER_PROCESS +Identifies a process. +.It Dv INIT_PROCESS +Identifies a process spawned by the init process. +.It Dv LOGIN_PROCESS +Identifies the session leader of a logged-in user. +.It Dv DEAD_PROCESS +Identifies a session leader who has exited. +.It Dv SHUTDOWN_TIME +Identifies time when system was shut down. +.El +.It Fa ut_tv +Timestamp indicating when the entry was last modified. +.El +.Pp +This implementation guarantees all strings returned in the structure to +be null terminated. +.Pp +The +.Fn ulog_getutxent +function reads the next entry from the utmp file, opening the file if +necessary. +The +.Fn ulog_getutxline +function reads entries from the utmp file, until finding an entry which +shares the same +.Fa ut_line +as the structure +.Fa line . +The +.Fn ulog_setutxent +opens the file, closing it first if already opened. +The +.Fn ulog_endutxent +function closes any open files. +.Pp +The +.Fn ulog_getutxent +and +.Fn ulog_getutxline +functions read from the beginning of the file until and EOF is +encountered. +.Pp +The +.Fn ulog_pututxline +function writes a new entry to the file. +.Sh RETURN VALUES +The +.Fn ulog_getutxent +and +.Fn ulog_getutxline +functions return a null pointer on EOF or error. +.Sh SEE ALSO +.Xr ulog_login 3 , +.Xr ulog_setutxfile 3 , +.Xr utmp 5 +.Sh STANDARDS +This interface is similar to +.In utmpx.h +described in +.St -p1003.1-2008 , +but incompatible. +The underlying file format does not allow a correctly behaving +implementation of the standardized interface. +.Pp +This programming interface has been designed to ease the migration +towards +.In utmpx.h . +If +.Dv _ULOG_POSIX_NAMES +is set before inclusion of +.In ulog.h , +it is also possible to use the +.Vt utmpx +structure and the +.Fn getutxent , +.Fn getutxline , +.Fn pututxline , +.Fn setutxent +and +.Fn endutxent +functions. +.Sh HISTORY +These functions appeared in +.Fx 9.0 . diff --git a/lib/libulog/ulog_getutxent.c b/lib/libulog/ulog_getutxent.c new file mode 100644 index 00000000000..c606ac91167 --- /dev/null +++ b/lib/libulog/ulog_getutxent.c @@ -0,0 +1,317 @@ +/*- + * Copyright (c) 2009 Ed Schouten + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 +__FBSDID("$FreeBSD$"); + +#include + +#include +#include +#include +#include +#include + +#include "ulog_internal.h" + +static FILE *ufile; +static int ufileindex = -1; + +void +ulog_endutxent(void) +{ + if (ufile != NULL) + fclose(ufile); + ufile = NULL; +} + +/* + * Conversion from on-disk formats to generic ulog_utmpx structure. + */ + +static void +ulog_futmp_to_utmpx(const struct futmp *ut, struct ulog_utmpx *utx) +{ + + memset(utx, 0, sizeof *utx); +#define COPY_STRING(field) do { \ + strncpy(utx->ut_ ## field, ut->ut_ ## field, \ + MIN(sizeof utx->ut_ ## field - 1, sizeof ut->ut_ ## field));\ +} while (0) +#define MATCH(field, value) (strncmp(ut->ut_ ## field, (value), \ + sizeof(ut->ut_ ## field)) == 0) + if (MATCH(user, "reboot") && MATCH(line, "~")) + utx->ut_type = BOOT_TIME; + else if (MATCH(user, "date") && MATCH(line, "|")) + utx->ut_type = OLD_TIME; + else if (MATCH(user, "date") && MATCH(line, "{")) + utx->ut_type = NEW_TIME; + else if (MATCH(user, "shutdown") && MATCH(line, "~")) + utx->ut_type = SHUTDOWN_TIME; + else if (MATCH(user, "") && MATCH(host, "") && !MATCH(line, "")) { + utx->ut_type = DEAD_PROCESS; + /* XXX: ut_id and ut_pid missing. ut_line not needed. */ + COPY_STRING(line); + } else if (!MATCH(user, "") && !MATCH(line, "") && ut->ut_time != 0) { + utx->ut_type = USER_PROCESS; + /* XXX: ut_id and ut_pid missing. */ + COPY_STRING(user); + COPY_STRING(line); + COPY_STRING(host); + } else { + /* Only set ut_type for EMPTY. */ + utx->ut_type = EMPTY; + return; + } +#undef COPY_STRING +#undef MATCH + utx->ut_tv.tv_sec = _time32_to_time(ut->ut_time); + utx->ut_tv.tv_usec = 0; +} + +static void +ulog_flastlog_to_utmpx(const struct flastlog *ll, struct ulog_utmpx *utx) +{ + + memset(utx, 0, sizeof *utx); +#define COPY_STRING(field) do { \ + strncpy(utx->ut_ ## field, ll->ll_ ## field, \ + MIN(sizeof utx->ut_ ## field - 1, sizeof ll->ll_ ## field));\ +} while (0) +#define MATCH(field, value) (strncmp(ll->ll_ ## field, (value), \ + sizeof(ll->ll_ ## field)) == 0) + if (!MATCH(line, "") && ll->ll_time != 0) { + utx->ut_type = USER_PROCESS; + /* XXX: ut_id and ut_pid missing. */ + COPY_STRING(line); + COPY_STRING(host); + } else { + /* Only set ut_type for EMPTY. */ + utx->ut_type = EMPTY; + return; + } +#undef COPY_STRING +#undef MATCH + utx->ut_tv.tv_sec = _time32_to_time(ll->ll_time); + utx->ut_tv.tv_usec = 0; +} + +/* + * File I/O. + */ + +static inline off_t +ulog_tell(void) +{ + + if (ufileindex == UTXI_USER) + return (ftello(ufile) / sizeof(struct flastlog)); + else + return (ftello(ufile) / sizeof(struct futmp)); +} + +static struct ulog_utmpx * +ulog_read(off_t off, int whence, int resolve_user) +{ + static struct ulog_utmpx utx; + + if (ufile == NULL) + ulog_setutxent(); + if (ufile == NULL) + return (NULL); + + /* Only allow seeking to move forward. */ + if (whence == SEEK_SET && ulog_tell() > off) + return (NULL); + + if (ufileindex == UTXI_USER) { + struct flastlog ll; + struct passwd *pw = NULL; + uid_t uid; + + if (fseeko(ufile, off * sizeof ll, whence) != 0) + return (NULL); + uid = ulog_tell(); + if (fread(&ll, sizeof ll, 1, ufile) != 1) + return (NULL); + ulog_flastlog_to_utmpx(&ll, &utx); + if (utx.ut_type == USER_PROCESS && resolve_user) + pw = getpwuid(uid); + if (pw != NULL) + strlcpy(utx.ut_user, pw->pw_name, sizeof utx.ut_user); + else + sprintf(utx.ut_user, "%u", (unsigned int)uid); + } else { + struct futmp ut; + + if (fseeko(ufile, off * sizeof(struct futmp), whence) != 0) + return (NULL); + if (fread(&ut, sizeof ut, 1, ufile) != 1) + return (NULL); + ulog_futmp_to_utmpx(&ut, &utx); + } + return (&utx); +} + +/* + * getutxent(). + * + * Read the next entry from the file. + */ + +struct ulog_utmpx * +ulog_getutxent(void) +{ + + return ulog_read(0, SEEK_CUR, 1); +} + +/* + * ulog_getutxline(). + * + * Read entries from the file, until reaching an entry which matches the + * provided TTY device name. We can optimize the case for utmp files, + * because they are indexed by TTY device name. + */ + +struct ulog_utmpx * +ulog_getutxline(const struct ulog_utmpx *line) +{ + struct ulog_utmpx *utx; + + if (ufile == NULL) + ulog_setutxent(); + if (ufile == NULL) + return (NULL); + + if (ufileindex == UTXI_TTY) { + unsigned int slot; + + slot = ulog_ttyslot(line->ut_line); + if (slot == 0) + return (NULL); + utx = ulog_read(slot, SEEK_SET, 1); + if (utx->ut_type == USER_PROCESS && + strcmp(utx->ut_line, line->ut_line) == 0) + return (utx); + return (NULL); + } else { + for (;;) { + utx = ulog_read(0, SEEK_CUR, 1); + if (utx == NULL) + return (NULL); + if (utx->ut_type == USER_PROCESS && + strcmp(utx->ut_line, line->ut_line) == 0) + return (utx); + } + } +} + +/* + * ulog_getutxuser(). + * + * Read entries from the file, until reaching an entry which matches the + * provided username. We can optimize the case for lastlog files, + * because they are indexed by user ID. + */ + +struct ulog_utmpx * +ulog_getutxuser(const char *user) +{ + struct ulog_utmpx *utx; + + if (ufileindex == UTXI_USER) { + struct passwd *pw; + + pw = getpwnam(user); + if (pw == NULL) + return (NULL); + utx = ulog_read(pw->pw_uid, SEEK_SET, 0); + if (utx != NULL) + strlcpy(utx->ut_user, user, sizeof utx->ut_user); + return (utx); + } else { + for (;;) { + utx = ulog_read(0, SEEK_CUR, 1); + if (utx == NULL) + return (NULL); + if (utx->ut_type == USER_PROCESS && + strcmp(utx->ut_user, user) == 0) + return (utx); + } + } +} + +/* + * ulog_setutxfile(). + * + * Switch to a different record file. When no filename is provided, the + * system default is opened. + */ + +int +ulog_setutxfile(int uidx, const char *file) +{ + + /* Supply default files. */ + switch (uidx) { + case UTXI_TTY: + if (file == NULL) + file = _PATH_UTMP; + break; + case UTXI_TIME: + if (file == NULL) + file = _PATH_WTMP; + break; + case UTXI_USER: + if (file == NULL) + file = _PATH_LASTLOG; + break; + default: + return (-1); + } + + if (ufile != NULL) + fclose(ufile); + ufile = fopen(file, "r"); + ufileindex = uidx; + if (ufile == NULL) + return (-1); + return (0); +} + +/* + * ulog_endutxfile(). + * + * Close any opened files. + */ + +void +ulog_setutxent(void) +{ + + ulog_setutxfile(UTXI_TTY, NULL); +} diff --git a/lib/libulog/ulog_internal.h b/lib/libulog/ulog_internal.h new file mode 100644 index 00000000000..4969ea3dfd6 --- /dev/null +++ b/lib/libulog/ulog_internal.h @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2009 Ed Schouten + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $FreeBSD$ + */ + +#ifndef _ULOG_INTERNAL_H_ +#define _ULOG_INTERNAL_H_ + +#include + +#include "ulog.h" + +unsigned int ulog_ttyslot(const char *); + +/* + * On-disk format. + */ + +#define _PATH_UTMP "/var/run/utmp" +#define _PATH_WTMP "/var/log/wtmp" + +struct futmp { + char ut_line[8]; + char ut_user[16]; + char ut_host[16]; + int32_t ut_time; +}; + +#define _PATH_LASTLOG "/var/log/lastlog" + +struct flastlog { + int32_t ll_time; + char ll_line[8]; + char ll_host[16]; +}; + +#endif /* !_ULOG_INTERNAL_H_ */ diff --git a/lib/libulog/ulog_login.3 b/lib/libulog/ulog_login.3 new file mode 100644 index 00000000000..45dba935ea5 --- /dev/null +++ b/lib/libulog/ulog_login.3 @@ -0,0 +1,102 @@ +.\" Copyright (c) 2009 Ed Schouten +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. +.\" +.\" $FreeBSD$ +.\" +.Dd December 5, 2009 +.Os +.Dt ULOG_LOGIN 3 +.Sh NAME +.Nm ulog_login , +.Nm ulog_login_pseudo , +.Nm ulog_logout , +.Nm ulog_logout_pseudo +.Nd manage user login records +.Sh LIBRARY +.Lb libulog +.Sh SYNOPSIS +.In ulog.h +.Ft void +.Fn ulog_login "const char *line" "const char *user" "const char *host" +.Ft void +.Fn ulog_login_pseudo "int fd" "const char *host" +.Ft void +.Fn ulog_logout "const char *line" +.Ft void +.Fn ulog_logout_pseudo "int fd" +.Sh DESCRIPTION +The +.Fn ulog_login +and +.Fn ulog_login_pseudo +functions register a login session on a TTY. +The +.Fn ulog_login +function adds an entry for TTY +.Fa line +and username +.Fa user . +The +.Fn ulog_login_pseudo +function uses file descriptor to a pseudo-terminal master device +.Fa fd +to determine the TTY name, while using the username belonging to the +real user ID of the calling process. +The optional +.Fa host +argument denotes a remote hostname, in case the login session is +provided by a network service. +.Pp +The +.Fn ulog_logout +and +.Fn ulog_logout_pseudo +functions mark the previously registered login session as being +terminated. +.Pp +Because the +.Fa line +and +.Fa user +arguments of +.Fn ulog_login +and +.Fn ulog_logout +cannot be trusted, these functions require administrative privileges. +The +.Fn ulog_login_pseudo +and +.Fn ulog_logout_pseudo +functions spawn a privileged process to perform the actual logging. +.Sh SEE ALSO +.Xr getuid 3 , +.Xr login 3 , +.Xr logout 3 , +.Xr posix_openpt 2 , +.Xr ptsname 3 , +.Xr ulog_getutxent 3 , +.Xr utmp 5 +.Sh HISTORY +These functions appeared in +.Fx 9.0 . diff --git a/lib/libulog/ulog_login.c b/lib/libulog/ulog_login.c new file mode 100644 index 00000000000..15d607e088f --- /dev/null +++ b/lib/libulog/ulog_login.c @@ -0,0 +1,75 @@ +/*- + * Copyright (c) 2009 Ed Schouten + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 +__FBSDID("$FreeBSD$"); + +#include +#include +#include + +#include "ulog_internal.h" + +void +ulog_login(const char *line, const char *user, const char *host) +{ + struct ulog_utmpx utx; + + /* Remove /dev/ component. */ + if (strncmp(line, _PATH_DEV, sizeof _PATH_DEV - 1) == 0) + line += sizeof _PATH_DEV - 1; + + memset(&utx, 0, sizeof utx); + + /* XXX: ut_id, ut_pid missing. */ + utx.ut_type = USER_PROCESS; + strncpy(utx.ut_line, line, sizeof utx.ut_line); + strncpy(utx.ut_user, user, sizeof utx.ut_user); + if (host != NULL) + strncpy(utx.ut_host, host, sizeof utx.ut_host); + gettimeofday(&utx.ut_tv, NULL); + + ulog_pututxline(&utx); +} + +void +ulog_logout(const char *line) +{ + struct ulog_utmpx utx; + + /* Remove /dev/ component. */ + if (strncmp(line, _PATH_DEV, sizeof _PATH_DEV - 1) == 0) + line += sizeof _PATH_DEV - 1; + + memset(&utx, 0, sizeof utx); + + /* XXX: ut_id, ut_pid missing. ut_line not needed */ + utx.ut_type = DEAD_PROCESS; + strncpy(utx.ut_line, line, sizeof utx.ut_line); + gettimeofday(&utx.ut_tv, NULL); + + ulog_pututxline(&utx); +} diff --git a/lib/libulog/ulog_login_pseudo.c b/lib/libulog/ulog_login_pseudo.c new file mode 100644 index 00000000000..841a2dbaba8 --- /dev/null +++ b/lib/libulog/ulog_login_pseudo.c @@ -0,0 +1,93 @@ +/*- + * Copyright (c) 2009 Ed Schouten + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 +__FBSDID("$FreeBSD$"); + +#include + +#include +#include +#include +#include +#include + +#include "ulog_internal.h" + +#define _PATH_ULOG_HELPER "/usr/libexec/ulog-helper" + +/* + * Registering login sessions. + */ + +static void +ulog_exec_helper(int fd, char const * const argv[]) +{ + sigset_t oblock, nblock; + pid_t pid, wpid; + int status; + + /* Block SIGCHLD. */ + sigemptyset(&nblock); + sigaddset(&nblock, SIGCHLD); + sigprocmask(SIG_BLOCK, &nblock, &oblock); + + switch (pid = fork()) { + case -1: + break; + case 0: + /* Execute helper program. */ + if (dup2(fd, STDIN_FILENO) == -1) + exit(EX_UNAVAILABLE); + sigprocmask(SIG_SETMASK, &oblock, NULL); + execv(_PATH_ULOG_HELPER, __DECONST(char * const *, argv)); + exit(EX_UNAVAILABLE); + default: + /* Wait for helper to finish. */ + do { + wpid = waitpid(pid, &status, 0); + } while (wpid == -1 && errno == EINTR); + break; + } + + sigprocmask(SIG_SETMASK, &oblock, NULL); +} + +void +ulog_login_pseudo(int fd, const char *host) +{ + char const * const args[4] = { "ulog-helper", "login", host, NULL }; + + ulog_exec_helper(fd, args); +} + +void +ulog_logout_pseudo(int fd) +{ + char const * const args[3] = { "ulog-helper", "logout", NULL }; + + ulog_exec_helper(fd, args); +} diff --git a/lib/libulog/ulog_pututxline.c b/lib/libulog/ulog_pututxline.c new file mode 100644 index 00000000000..d0e79512f5a --- /dev/null +++ b/lib/libulog/ulog_pututxline.c @@ -0,0 +1,208 @@ +/*- + * Copyright (c) 2009 Ed Schouten + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include + +#include "ulog_internal.h" + +static void +ulog_utmpx_to_futmp(const struct ulog_utmpx *utx, struct futmp *ut) +{ + + memset(ut, 0, sizeof *ut); +#define COPY_STRING(field) do { \ + strncpy(ut->ut_ ## field, utx->ut_ ## field, \ + MIN(sizeof ut->ut_ ## field, sizeof utx->ut_ ## field)); \ +} while (0) + switch (utx->ut_type) { + case BOOT_TIME: + strcpy(ut->ut_user, "reboot"); + ut->ut_line[0] = '~'; + break; + case OLD_TIME: + strcpy(ut->ut_user, "date"); + ut->ut_line[0] = '|'; + break; + case NEW_TIME: + strcpy(ut->ut_user, "date"); + ut->ut_line[0] = '{'; + break; + case USER_PROCESS: + COPY_STRING(user); + COPY_STRING(line); + COPY_STRING(host); + break; + case DEAD_PROCESS: + COPY_STRING(line); + break; + case SHUTDOWN_TIME: + strcpy(ut->ut_user, "shutdown"); + ut->ut_line[0] = '~'; + break; + } +#undef COPY_STRING + ut->ut_time = _time_to_time32(utx->ut_tv.tv_sec); +} + +static void +ulog_utmpx_to_flastlog(const struct ulog_utmpx *utx, struct flastlog *ll) +{ + + memset(ll, 0, sizeof *ll); +#define COPY_STRING(field) do { \ + strncpy(ll->ll_ ## field, utx->ut_ ## field, \ + MIN(sizeof ll->ll_ ## field, sizeof utx->ut_ ## field)); \ +} while (0) + switch (utx->ut_type) { + case USER_PROCESS: + COPY_STRING(line); + COPY_STRING(host); + break; + } +#undef COPY_STRING + ll->ll_time = _time_to_time32(utx->ut_tv.tv_sec); +} + +static void +ulog_write_utmp_fast(const struct futmp *ut) +{ + unsigned int idx; + char line[sizeof ut->ut_line + 1]; + int fd; + + if ((fd = open(_PATH_UTMP, O_WRONLY|O_CREAT, 0644)) < 0) + return; + strlcpy(line, ut->ut_line, sizeof line); + idx = ulog_ttyslot(line); + if (idx > 0) { + lseek(fd, (off_t)(idx * sizeof *ut), SEEK_SET); + write(fd, ut, sizeof *ut); + } + close(fd); +} + +static int +ulog_write_utmp_slow(const struct futmp *ut) +{ + struct futmp utf; + int fd, found; + + if ((fd = open(_PATH_UTMP, O_RDWR, 0)) < 0) + return (0); + found = 0; + while (read(fd, &utf, sizeof utf) == sizeof utf) { + if (utf.ut_user[0] == '\0' || + strncmp(utf.ut_line, ut->ut_line, sizeof utf.ut_line) != 0) + continue; + lseek(fd, -(off_t)sizeof utf, SEEK_CUR); + write(fd, ut, sizeof *ut); + found = 1; + } + close(fd); + return (found); +} + +static void +ulog_write_wtmp(const struct futmp *ut) +{ + int fd; + + if ((fd = open(_PATH_WTMP, O_WRONLY|O_APPEND, 0)) < 0) + return; + write(fd, ut, sizeof *ut); + close(fd); +} + +static void +ulog_write_lastlog(const struct flastlog *ll, const char *user) +{ + struct passwd *pw; + int fd; + + if ((fd = open(_PATH_LASTLOG, O_WRONLY, 0)) < 0) + return; + pw = getpwnam(user); + if (pw != NULL) { + lseek(fd, (off_t)(pw->pw_uid * sizeof *ll), SEEK_SET); + write(fd, ll, sizeof *ll); + } + close(fd); +} + +struct ulog_utmpx * +ulog_pututxline(const struct ulog_utmpx *utmpx) +{ + static struct ulog_utmpx utx; + struct futmp ut; + struct flastlog ll; + char user[sizeof utmpx->ut_user + 1]; + + switch (utmpx->ut_type) { + case BOOT_TIME: + case OLD_TIME: + case NEW_TIME: + case SHUTDOWN_TIME: + ulog_utmpx_to_futmp(utmpx, &ut); + + /* Only log to wtmp. */ + ulog_write_wtmp(&ut); + break; + case USER_PROCESS: + ulog_utmpx_to_futmp(utmpx, &ut); + ulog_utmpx_to_flastlog(utmpx, &ll); + + /* Log to utmp, wtmp and lastlog. */ + ulog_write_utmp_fast(&ut); + ulog_write_wtmp(&ut); + strlcpy(user, utmpx->ut_user, sizeof user); + ulog_write_lastlog(&ll, user); + break; + case DEAD_PROCESS: + ulog_utmpx_to_futmp(utmpx, &ut); + + /* Only log to wtmp if logged in utmp. */ + if (ulog_write_utmp_slow(&ut)) + ulog_write_wtmp(&ut); + break; + default: + return (NULL); + } + + /* XXX: Can't we just return utmpx itself? */ + memcpy(&utx, utmpx, sizeof utx); + utx.ut_user[sizeof utx.ut_user - 1] = '\0'; + utx.ut_line[sizeof utx.ut_line - 1] = '\0'; + utx.ut_host[sizeof utx.ut_host - 1] = '\0'; + return (&utx); +} diff --git a/lib/libulog/ulog_setutxfile.3 b/lib/libulog/ulog_setutxfile.3 new file mode 100644 index 00000000000..e26380ca5fd --- /dev/null +++ b/lib/libulog/ulog_setutxfile.3 @@ -0,0 +1,94 @@ +.\" Copyright (c) 2009 Ed Schouten +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. +.\" +.\" $FreeBSD$ +.\" +.Dd December 5, 2009 +.Os +.Dt ULOG_SETUTXFILE 3 +.Sh NAME +.Nm ulog_setutxfile , +.Nm ulog_getutxuser +.Nd additional user login records management +.Sh LIBRARY +.Lb libulog +.Sh SYNOPSIS +.In ulog.h +.Ft int +.Fn ulog_setutxfile "int index" "const char *file" +.Ft struct ulog_utmpx * +.Fn ulog_getutxuser "const char *user" +.Sh DESCRIPTION +The +.Fn ulog_setutxfile +and +.Fn ulog_getutxuser +functions are extensions to the standard +.In ulog.h +interface. +.Pp +The +.Fn ulog_setutxfile +function is similar to +.Fn ulog_setutxent , +but is capable of returning an error code and also gives access to other +login record files by using one of the following values for +.Fa index : +.Bl -tag -width UTXI_TIME +.It Dv UTXI_TTY +Open the default +.Nm utmp +file, which is indexed by TTY device. +.It Dv UTXI_TIME +Open the +.Nm wtmp +file, which is indexed by time. +.It Dv UTXI_USER +Open the +.Nm lastlog +file, which is indexed by user ID. +.El +.Pp +The +.Fa file +argument determines the file to be opened. +If left null, an implementation-defined default file is opened. +.Pp +The +.Fn ulog_getutxuser +searches the currently opened file until an entry is found whose +.Fa ut_user +is equal to the +.Fa user +argument. +.Sh RETURN VALUES +If succesful, +.Fn ulog_setutxfile +returns 0. +It returns -1 on failure. +.Sh SEE ALSO +.Xr ulog_getutxent 3 +.Sh HISTORY +These functions appeared in +.Fx 9.0 . diff --git a/lib/libulog/ulog_util.c b/lib/libulog/ulog_util.c new file mode 100644 index 00000000000..b14920ca412 --- /dev/null +++ b/lib/libulog/ulog_util.c @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2009 Ed Schouten + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 +__FBSDID("$FreeBSD$"); + +#include +#include + +#include "ulog_internal.h" + +unsigned int +ulog_ttyslot(const char *name) +{ + struct ttyent *ty; + unsigned int slot; + + setttyent(); + for (slot = 1; (ty = getttyent()) != NULL; ++slot) + if (strcmp(ty->ty_name, name) == 0) { + endttyent(); + return (slot); + } + endttyent(); + return (0); +} diff --git a/lib/libulog/utempter.c b/lib/libulog/utempter.c new file mode 100644 index 00000000000..bb0eb2bc270 --- /dev/null +++ b/lib/libulog/utempter.c @@ -0,0 +1,84 @@ +/*- + * Copyright (c) 2009 Ed Schouten + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 +__FBSDID("$FreeBSD$"); + +#include "ulog_internal.h" +#include "utempter.h" + +static int last_fd = -1; + +int +utempter_add_record(int fd, const char *host) +{ + + ulog_login_pseudo(fd, host); + last_fd = fd; + return (0); +} + +int +utempter_remove_added_record(void) +{ + + if (last_fd < 0) + return (0); + ulog_logout_pseudo(last_fd); + last_fd = -1; + return (0); +} + +int +utempter_remove_record(int fd) +{ + + ulog_logout_pseudo(fd); + if (last_fd == fd) + last_fd = -1; + return (0); +} + +void +addToUtmp(const char *pty __unused, const char *host, int fd) +{ + + utempter_add_record(fd, host); +} + +void +removeFromUtmp(void) +{ + + utempter_remove_added_record(); +} + +void +removeLineFromUtmp(const char *pty __unused, int fd) +{ + + utempter_remove_record(fd); +} diff --git a/lib/libulog/utempter.h b/lib/libulog/utempter.h new file mode 100644 index 00000000000..0e0274cf04f --- /dev/null +++ b/lib/libulog/utempter.h @@ -0,0 +1,44 @@ +/*- + * Copyright (c) 2009 Ed Schouten + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + * + * $FreeBSD$ + */ + +#ifndef _UTEMPTER_H_ +#define _UTEMPTER_H_ + +#include + +__BEGIN_DECLS +int utempter_add_record(int, const char *); +int utempter_remove_added_record(void); +int utempter_remove_record(int); + +void addToUtmp(const char *, const char *, int); +void removeFromUtmp(void); +void removeLineFromUtmp(const char *, int); +__END_DECLS + +#endif /* !_UTEMPTER_H_ */ diff --git a/lib/libulog/utempter_add_record.3 b/lib/libulog/utempter_add_record.3 new file mode 100644 index 00000000000..fdaa00e379b --- /dev/null +++ b/lib/libulog/utempter_add_record.3 @@ -0,0 +1,106 @@ +.\" Copyright (c) 2009 Ed Schouten +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. +.\" +.\" $FreeBSD$ +.\" +.Dd December 6, 2009 +.Os +.Dt UTEMPTER_ADD_RECORD 3 +.Sh NAME +.Nm utempter_add_record , +.Nm utempter_remove_added_record , +.Nm utempter_remove_record , +.Nm addToUtmp , +.Nm removeFromUtmp , +.Nm removeLineFromUtmp +.Nd utempter compatibility interface +.Sh LIBRARY +.Lb libulog +.Sh SYNOPSIS +.In utempter.h +.Ft int +.Fn utempter_add_record "int fd" "const char *host" +.Ft int +.Fn utempter_remove_added_record "void" +.Ft int +.Fn utempter_remove_record "int fd" +.Ft void +.Fn addToUtmp "const char *pty" "const char *host" "int fd" +.Ft void +.Fn removeFromUtmp "void" +.Ft void +.Fn removeLineFromUtmp "const char *pty" "int fd" +.Sh DESCRIPTION +The +.Fn utempter_add_record +and +.Fn addToUtmp +functions add a login record to the database for the TTY belonging to +the pseudo-terminal master file descriptor +.Fa fd , +using the username corresponding with the real user ID of the calling +process and the optional hostname +.Fa host . +These functions are equivalent to +.Xr ulog_login_pseudo 3 . +.Pp +The +.Fn utempter_remove_record +and +.Fn removeLineFromUtmp +functions mark the login session as being closed for the TTY belonging +to the pseudo-terminal master file descriptor +.Fa fd . +These functions are equivalent to +.Xr ulog_logout_pseudo 3 . +.Pp +The +.Fn utempter_remove_added_record +and +.Fn removeFromUtmp +functions have the same properties as the previously mentioned +functions, except that they use an internally cached value of the file +descriptor passed to the login functions. +.Pp +The +.Fa pty +arguments of +.Fn addToUtmp +and +.Fn removeLineFromUtmp +are unused. +.Sh RETURN VALUES +In this implementation, the +.Fn utempter_add_record , +.Fn utempter_remove_added_record +and +.Fn utempter_remove_record +always return a value of 0. +.Sh SEE ALSO +.Xr ulog_login_pseudo 3 , +.Xr ulog_setutxfile 3 , +.Xr utmp 5 +.Sh HISTORY +These functions appeared in +.Fx 9.0 . diff --git a/lib/libusb/Makefile b/lib/libusb/Makefile index b06f7746082..7405ef33054 100644 --- a/lib/libusb/Makefile +++ b/lib/libusb/Makefile @@ -16,6 +16,8 @@ MAN= libusb.3 libusb20.3 MKLINT= no NOGCCERROR= +WARNS?= 2 + MLINKS+= libusb.3 usb.3 # libusb 0.1 compat diff --git a/lib/libusb/libusb10.c b/lib/libusb/libusb10.c index 55ee1c509e7..25520d2ab5e 100644 --- a/lib/libusb/libusb10.c +++ b/lib/libusb/libusb10.c @@ -379,8 +379,6 @@ libusb_open_device_with_vid_pid(libusb_context *ctx, uint16_t vendor_id, if ((i = libusb_get_device_list(ctx, &devs)) < 0) return (NULL); - pdev = NULL; - for (j = 0; j < i; j++) { pdev = devs[j]->os_priv; pdesc = libusb20_dev_get_device_desc(pdev); @@ -396,6 +394,8 @@ libusb_open_device_with_vid_pid(libusb_context *ctx, uint16_t vendor_id, break; } } + if (j == i) + pdev = NULL; libusb_free_device_list(devs, 1); DPRINTF(ctx, LIBUSB_DEBUG_FUNCTION, "libusb_open_device_width_vid_pid leave"); @@ -833,8 +833,12 @@ libusb10_complete_transfer(struct libusb20_transfer *pxfer, if (pxfer != NULL) libusb20_tr_set_priv_sc1(pxfer, NULL); + /* set transfer status */ uxfer->status = status; + /* update super transfer state */ + sxfer->state = LIBUSB_SUPER_XFER_ST_NONE; + dev = libusb_get_device(uxfer->dev_handle); TAILQ_INSERT_TAIL(&dev->ctx->tr_done, sxfer, entry); @@ -1111,6 +1115,8 @@ libusb10_submit_transfer_sub(struct libusb20_device *pdev, uint8_t endpoint) return; case 2: sxfer = libusb20_tr_get_priv_sc1(pxfer1); + if (sxfer == NULL) + return; /* cancelling */ if (sxfer->rem_len) return; /* cannot queue another one */ /* swap transfers */ @@ -1118,6 +1124,8 @@ libusb10_submit_transfer_sub(struct libusb20_device *pdev, uint8_t endpoint) break; case 1: sxfer = libusb20_tr_get_priv_sc1(pxfer0); + if (sxfer == NULL) + return; /* cancelling */ if (sxfer->rem_len) return; /* cannot queue another one */ /* swap transfers */ @@ -1229,12 +1237,18 @@ libusb_submit_transfer(struct libusb_transfer *uxfer) if (pxfer0 == NULL || pxfer1 == NULL) { err = LIBUSB_ERROR_OTHER; } else if ((sxfer->entry.tqe_prev != NULL) || - (libusb20_tr_get_priv_sc1(pxfer0) == sxfer) || + (libusb20_tr_get_priv_sc1(pxfer0) == sxfer) || (libusb20_tr_get_priv_sc1(pxfer1) == sxfer)) { err = LIBUSB_ERROR_BUSY; } else { + + /* set pending state */ + sxfer->state = LIBUSB_SUPER_XFER_ST_PEND; + + /* insert transfer into transfer head list */ TAILQ_INSERT_TAIL(&dev->tr_head, sxfer, entry); + /* start work transfers */ libusb10_submit_transfer_sub( uxfer->dev_handle, endpoint); @@ -1258,12 +1272,14 @@ libusb_cancel_transfer(struct libusb_transfer *uxfer) struct libusb_super_transfer *sxfer; struct libusb_device *dev; uint32_t endpoint; + int retval; if (uxfer == NULL) return (LIBUSB_ERROR_INVALID_PARAM); + /* check if not initialised */ if (uxfer->dev_handle == NULL) - return (LIBUSB_ERROR_INVALID_PARAM); + return (LIBUSB_ERROR_NOT_FOUND); endpoint = uxfer->endpoint; @@ -1277,39 +1293,50 @@ libusb_cancel_transfer(struct libusb_transfer *uxfer) sxfer = (struct libusb_super_transfer *)( (uint8_t *)uxfer - sizeof(*sxfer)); + retval = 0; + CTX_LOCK(dev->ctx); pxfer0 = libusb10_get_transfer(uxfer->dev_handle, endpoint, 0); pxfer1 = libusb10_get_transfer(uxfer->dev_handle, endpoint, 1); - if (sxfer->entry.tqe_prev != NULL) { + if (sxfer->state != LIBUSB_SUPER_XFER_ST_PEND) { + /* only update the transfer status */ + uxfer->status = LIBUSB_TRANSFER_CANCELLED; + retval = LIBUSB_ERROR_NOT_FOUND; + } else if (sxfer->entry.tqe_prev != NULL) { /* we are lucky - transfer is on a queue */ TAILQ_REMOVE(&dev->tr_head, sxfer, entry); sxfer->entry.tqe_prev = NULL; - libusb10_complete_transfer(NULL, sxfer, LIBUSB_TRANSFER_CANCELLED); + libusb10_complete_transfer(NULL, + sxfer, LIBUSB_TRANSFER_CANCELLED); } else if (pxfer0 == NULL || pxfer1 == NULL) { /* not started */ + retval = LIBUSB_ERROR_NOT_FOUND; } else if (libusb20_tr_get_priv_sc1(pxfer0) == sxfer) { - libusb10_complete_transfer(pxfer0, sxfer, LIBUSB_TRANSFER_CANCELLED); + libusb10_complete_transfer(pxfer0, + sxfer, LIBUSB_TRANSFER_CANCELLED); libusb20_tr_stop(pxfer0); /* make sure the queue doesn't stall */ libusb10_submit_transfer_sub( uxfer->dev_handle, endpoint); } else if (libusb20_tr_get_priv_sc1(pxfer1) == sxfer) { - libusb10_complete_transfer(pxfer1, sxfer, LIBUSB_TRANSFER_CANCELLED); + libusb10_complete_transfer(pxfer1, + sxfer, LIBUSB_TRANSFER_CANCELLED); libusb20_tr_stop(pxfer1); /* make sure the queue doesn't stall */ libusb10_submit_transfer_sub( uxfer->dev_handle, endpoint); } else { /* not started */ + retval = LIBUSB_ERROR_NOT_FOUND; } CTX_UNLOCK(dev->ctx); DPRINTF(dev->ctx, LIBUSB_DEBUG_FUNCTION, "libusb_cancel_transfer leave"); - return (0); + return (retval); } UNEXPORTED void diff --git a/lib/libusb/libusb10.h b/lib/libusb/libusb10.h index 338c2aab888..d2a2bd7c150 100644 --- a/lib/libusb/libusb10.h +++ b/lib/libusb/libusb10.h @@ -65,7 +65,9 @@ struct libusb_super_transfer { uint8_t *curr_data; uint32_t rem_len; uint32_t last_len; - uint8_t flags; + uint8_t state; +#define LIBUSB_SUPER_XFER_ST_NONE 0 +#define LIBUSB_SUPER_XFER_ST_PEND 1 }; struct libusb_context { diff --git a/lib/libusb/libusb20.3 b/lib/libusb/libusb20.3 index f902883107b..5404013ee99 100644 --- a/lib/libusb/libusb20.3 +++ b/lib/libusb/libusb20.3 @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 22, 2009 +.Dd November 18, 2009 .Dt LIBUSB20 3 .Os .Sh NAME @@ -98,6 +98,8 @@ USB access library (libusb -lusb) .Fn libusb20_tr_setup_intr "struct libusb20_transfer *xfer" "void *pbuf" "uint32_t length" "uint32_t timeout" .Ft void .Fn libusb20_tr_setup_isoc "struct libusb20_transfer *xfer" "void *pbuf" "uint32_t length" "uint61_t fr_index" +.Ft uint8_t +.Fn libusb20_tr_bulk_intr_sync "struct libusb20_transfer *xfer" "void *pbuf" "uint32_t length" "uint32_t *pactlen" "uint32_t timeout" .Ft void .Fn libusb20_tr_start "struct libusb20_transfer *xfer" .Ft void @@ -451,6 +453,29 @@ is a helper function for setting up a multi frame USB ISOCHRONOUS transfer. . .Pp . +.Fn libusb20_tr_bulk_intr_sync +will perform a synchronous BULK or INTERRUPT transfer having length given by the +.Fa length +argument and buffer pointer given by the +.Fa pbuf +argument on the USB transfer given by the +.Fa xfer +argument. +. +If the +.Fa pactlen +argument is non-NULL the actual transfer length will be stored at the given pointer destination. +. +If the +.Fa timeout +argument is non-zero the transfer will timeout after the given value in milliseconds. +. +This function does not change the transfer flags, like short packet not ok. +. +This function returns zero on success else a LIBUSB20_TRANSFER_XXX value is returned. +. +.Pp +. .Fn libusb20_tr_start will get the USB transfer started, if not already started. diff --git a/lib/libusb/libusb20.c b/lib/libusb/libusb20.c index 1a338052c93..41f9ac72de6 100644 --- a/lib/libusb/libusb20.c +++ b/lib/libusb/libusb20.c @@ -1,6 +1,6 @@ /* $FreeBSD$ */ /*- - * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. + * Copyright (c) 2008-2009 Hans Petter Selasky. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -263,6 +263,10 @@ libusb20_tr_get_priv_sc1(struct libusb20_transfer *xfer) void libusb20_tr_stop(struct libusb20_transfer *xfer) { + if (!xfer->is_opened) { + /* transfer is not opened */ + return; + } if (!xfer->is_pending) { /* transfer not pending */ return; @@ -280,6 +284,10 @@ libusb20_tr_stop(struct libusb20_transfer *xfer) void libusb20_tr_drain(struct libusb20_transfer *xfer) { + if (!xfer->is_opened) { + /* transfer is not opened */ + return; + } /* make sure that we are cancelling */ libusb20_tr_stop(xfer); @@ -415,9 +423,79 @@ libusb20_tr_setup_isoc(struct libusb20_transfer *xfer, void *pBuf, uint32_t leng return; } +uint8_t +libusb20_tr_bulk_intr_sync(struct libusb20_transfer *xfer, + void *pbuf, uint32_t length, uint32_t *pactlen, + uint32_t timeout) +{ + struct libusb20_device *pdev = xfer->pdev; + uint32_t transfer_max; + uint32_t transfer_act; + uint8_t retval; + + /* set some sensible default value */ + if (pactlen != NULL) + *pactlen = 0; + + /* check for error condition */ + if (libusb20_tr_pending(xfer)) + return (LIBUSB20_ERROR_OTHER); + + do { + /* compute maximum transfer length */ + transfer_max = + libusb20_tr_get_max_total_length(xfer); + + if (transfer_max > length) + transfer_max = length; + + /* setup bulk or interrupt transfer */ + libusb20_tr_setup_bulk(xfer, pbuf, + transfer_max, timeout); + + /* start the transfer */ + libusb20_tr_start(xfer); + + /* wait for transfer completion */ + while (libusb20_dev_process(pdev) == 0) { + + if (libusb20_tr_pending(xfer) == 0) + break; + + libusb20_dev_wait_process(pdev, -1); + } + + transfer_act = libusb20_tr_get_actual_length(xfer); + + /* update actual length, if any */ + if (pactlen != NULL) + pactlen[0] += transfer_act; + + /* check transfer status */ + retval = libusb20_tr_get_status(xfer); + if (retval) + break; + + /* check for short transfer */ + if (transfer_act != transfer_max) + break; + + /* update buffer pointer and length */ + pbuf = ((uint8_t *)pbuf) + transfer_max; + length = length - transfer_max; + + } while (length != 0); + + return (retval); +} + void libusb20_tr_submit(struct libusb20_transfer *xfer) { + if (!xfer->is_opened) { + /* transfer is not opened */ + return; + } if (xfer->is_pending) { /* should not happen */ return; @@ -433,6 +511,10 @@ libusb20_tr_submit(struct libusb20_transfer *xfer) void libusb20_tr_start(struct libusb20_transfer *xfer) { + if (!xfer->is_opened) { + /* transfer is not opened */ + return; + } if (xfer->is_pending) { if (xfer->is_cancel) { /* cancelling - restart */ @@ -461,7 +543,14 @@ libusb20_dev_close(struct libusb20_device *pdev) for (x = 0; x != pdev->nTransfer; x++) { xfer = pdev->pTransfer + x; + if (!xfer->is_opened) { + /* transfer is not opened */ + continue; + } + libusb20_tr_drain(xfer); + + libusb20_tr_close(xfer); } if (pdev->pTransfer != NULL) { diff --git a/lib/libusb/libusb20.h b/lib/libusb/libusb20.h index 9f45861f738..bb7d8a4ab3d 100644 --- a/lib/libusb/libusb20.h +++ b/lib/libusb/libusb20.h @@ -1,6 +1,6 @@ /* $FreeBSD$ */ /*- - * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. + * Copyright (c) 2008-2009 Hans Petter Selasky. All rights reserved. * Copyright (c) 2007-2008 Daniel Drake. All rights reserved. * Copyright (c) 2001 Johannes Erdfelt. All rights reserved. * @@ -226,6 +226,7 @@ void libusb20_tr_setup_bulk(struct libusb20_transfer *xfer, void *pbuf, uint32_t void libusb20_tr_setup_control(struct libusb20_transfer *xfer, void *psetup, void *pbuf, uint32_t timeout); void libusb20_tr_setup_intr(struct libusb20_transfer *xfer, void *pbuf, uint32_t length, uint32_t timeout); void libusb20_tr_setup_isoc(struct libusb20_transfer *xfer, void *pbuf, uint32_t length, uint16_t fr_index); +uint8_t libusb20_tr_bulk_intr_sync(struct libusb20_transfer *xfer, void *pbuf, uint32_t length, uint32_t *pactlen, uint32_t timeout); void libusb20_tr_start(struct libusb20_transfer *xfer); void libusb20_tr_stop(struct libusb20_transfer *xfer); void libusb20_tr_submit(struct libusb20_transfer *xfer); diff --git a/lib/libutil/Makefile b/lib/libutil/Makefile index 29336498f59..eaf6120c0a7 100644 --- a/lib/libutil/Makefile +++ b/lib/libutil/Makefile @@ -16,8 +16,6 @@ SRCS= _secure_path.c auth.c expand_number.c flopen.c fparseln.c gr_util.c \ stub.c trimdomain.c uucplock.c INCS= libutil.h login_cap.h -WARNS?= 6 - CFLAGS+= -DLIBC_SCCS .if ${MK_INET6_SUPPORT} != "no" diff --git a/lib/libutil/gr_util.c b/lib/libutil/gr_util.c index 77e06531f70..633f435eea2 100644 --- a/lib/libutil/gr_util.c +++ b/lib/libutil/gr_util.c @@ -117,8 +117,8 @@ gr_make(const struct group *gr) /* Create the group line and fill it. */ if ((line = malloc(line_size)) == NULL) return (NULL); - line_size = snprintf(line, line_size, group_line_format, gr->gr_name, - gr->gr_passwd, (uintmax_t)gr->gr_gid); + snprintf(line, line_size, group_line_format, gr->gr_name, gr->gr_passwd, + (uintmax_t)gr->gr_gid); if (gr->gr_mem != NULL) for (ndx = 0; gr->gr_mem[ndx] != NULL; ndx++) { strcat(line, gr->gr_mem[ndx]); diff --git a/lib/libutil/libutil.h b/lib/libutil/libutil.h index 3187fb37349..fca133f0d14 100644 --- a/lib/libutil/libutil.h +++ b/lib/libutil/libutil.h @@ -39,6 +39,34 @@ #ifndef _LIBUTIL_H_ #define _LIBUTIL_H_ +#include +#include + +#ifndef _GID_T_DECLARED +typedef __gid_t gid_t; +#define _GID_T_DECLARED +#endif + +#ifndef _INT64_T_DECLARED +typedef __int64_t int64_t; +#define _INT64_T_DECLARED +#endif + +#ifndef _PID_T_DECLARED +typedef __pid_t pid_t; +#define _PID_T_DECLARED +#endif + +#ifndef _SIZE_T_DECLARED +typedef __size_t size_t; +#define _SIZE_T_DECLARED +#endif + +#ifndef _UID_T_DECLARED +typedef __uid_t uid_t; +#define _UID_T_DECLARED +#endif + #define PROPERTY_MAX_NAME 64 #define PROPERTY_MAX_VALUE 512 diff --git a/lib/libutil/pw_util.c b/lib/libutil/pw_util.c index 69232fb512c..75459e338b1 100644 --- a/lib/libutil/pw_util.c +++ b/lib/libutil/pw_util.c @@ -289,7 +289,7 @@ int pw_edit(int notsetuid) { struct sigaction sa, sa_int, sa_quit; - sigset_t oldsigset, sigset; + sigset_t oldsigset, nsigset; struct stat st1, st2; const char *editor; int pstat; @@ -303,9 +303,9 @@ pw_edit(int notsetuid) sa.sa_flags = 0; sigaction(SIGINT, &sa, &sa_int); sigaction(SIGQUIT, &sa, &sa_quit); - sigemptyset(&sigset); - sigaddset(&sigset, SIGCHLD); - sigprocmask(SIG_BLOCK, &sigset, &oldsigset); + sigemptyset(&nsigset); + sigaddset(&nsigset, SIGCHLD); + sigprocmask(SIG_BLOCK, &nsigset, &oldsigset); switch ((editpid = fork())) { case -1: return (-1); diff --git a/lib/libvgl/Makefile b/lib/libvgl/Makefile index a379bd0b293..dfc4e81f33b 100644 --- a/lib/libvgl/Makefile +++ b/lib/libvgl/Makefile @@ -5,6 +5,7 @@ CFLAGS+=-Wall -I${.CURDIR} SRCS= main.c simple.c bitmap.c text.c mouse.c keyboard.c INCS= vgl.h MAN= vgl.3 +WARNS?= 2 MLINKS+= vgl.3 VGLBitmapAllocateBits.3 \ vgl.3 VGLBitmapCopy.3 \ vgl.3 VGLBitmapCreate.3 \ diff --git a/lib/libwrap/Makefile b/lib/libwrap/Makefile index 456582765f5..2ae6821d775 100644 --- a/lib/libwrap/Makefile +++ b/lib/libwrap/Makefile @@ -28,6 +28,8 @@ CFLAGS+= -DUSE_GETDOMAIN CFLAGS+=-DINET6 .endif +WARNS?= 0 + SRCS= clean_exit.c diag.c eval.c fix_options.c fromhost.c \ hosts_access.c hosts_ctl.c misc.c myvsyslog.c options.c \ percent_m.c percent_x.c refuse.c rfc931.c shell_cmd.c \ diff --git a/lib/liby/Makefile b/lib/liby/Makefile index b7a3aff578d..34939452dd7 100644 --- a/lib/liby/Makefile +++ b/lib/liby/Makefile @@ -1,7 +1,9 @@ # $FreeBSD$ -LIB= y +LIB= y SRCS= main.c yyerror.c NO_PIC= +WARNS?= 1 + .include diff --git a/lib/libypclnt/Makefile b/lib/libypclnt/Makefile index 53d6a637754..5a3ecb42aa2 100644 --- a/lib/libypclnt/Makefile +++ b/lib/libypclnt/Makefile @@ -12,7 +12,6 @@ CLEANFILES+= ${GENSRCS} INCS= ypclnt.h CFLAGS+= -I. -WARNS?= 5 GENSRCS=yp.h \ yp_clnt.c \ diff --git a/lib/libz/Makefile b/lib/libz/Makefile index 63383b4d97b..595b4f3d546 100644 --- a/lib/libz/Makefile +++ b/lib/libz/Makefile @@ -13,6 +13,8 @@ MAN= zlib.3 CFLAGS+= -DHAS_snprintf -DHAS_vsnprintf +WARNS?= 3 + CLEANFILES+= example.o example foo.gz minigzip.o minigzip SRCS = adler32.c compress.c crc32.c gzio.c uncompr.c deflate.c trees.c \ diff --git a/lib/ncurses/Makefile.inc b/lib/ncurses/Makefile.inc index 89c6348a5d8..5c1487cbc76 100644 --- a/lib/ncurses/Makefile.inc +++ b/lib/ncurses/Makefile.inc @@ -2,4 +2,6 @@ # This is to include src/lib/Makefile.inc +WARNS?= 3 + .include "../Makefile.inc" diff --git a/libexec/Makefile b/libexec/Makefile index 26a8ff236a2..78953b4e26a 100644 --- a/libexec/Makefile +++ b/libexec/Makefile @@ -29,6 +29,7 @@ SUBDIR= ${_atrun} \ ${_telnetd} \ tftpd \ ${_tftp-proxy} \ + ulog-helper \ ${_ypxfr} .if ${MK_AT} != "no" diff --git a/libexec/Makefile.inc b/libexec/Makefile.inc index 05deedc6127..7b6a65fc717 100644 --- a/libexec/Makefile.inc +++ b/libexec/Makefile.inc @@ -2,4 +2,6 @@ # $FreeBSD$ BINDIR?= /usr/libexec + +WARNS?= 6 WFORMAT?= 1 diff --git a/libexec/atrun/Makefile b/libexec/atrun/Makefile index 4e3d4ccace5..273055997c0 100644 --- a/libexec/atrun/Makefile +++ b/libexec/atrun/Makefile @@ -13,6 +13,8 @@ CLEANFILES= ${MAN} CFLAGS+=-I${MAINSRC} -I${.CURDIR} CFLAGS+=-DLOGIN_CAP -DPAM + +WARNS?= 2 WFORMAT=0 DPADD= ${LIBPAM} ${LIBUTIL} diff --git a/libexec/atrun/atrun.c b/libexec/atrun/atrun.c index a7cef873eee..e4fc625fe3e 100644 --- a/libexec/atrun/atrun.c +++ b/libexec/atrun/atrun.c @@ -49,7 +49,6 @@ static const char rcsid[] = #include #include #include -#include #ifdef __FreeBSD__ #include #else @@ -63,12 +62,6 @@ static const char rcsid[] = #include #endif -#if (MAXLOGNAME-1) > UT_NAMESIZE -#define LOGNAMESIZE UT_NAMESIZE -#else -#define LOGNAMESIZE (MAXLOGNAME-1) -#endif - /* Local headers */ #include "gloadavg.h" @@ -130,7 +123,7 @@ run_file(const char *filename, uid_t uid, gid_t gid) pid_t pid; int fd_out, fd_in; int queue; - char mailbuf[LOGNAMESIZE + 1], fmt[49]; + char mailbuf[MAXLOGNAME], fmt[49]; char *mailname = NULL; FILE *stream; int send_mail = 0; @@ -231,7 +224,7 @@ run_file(const char *filename, uid_t uid, gid_t gid) snprintf(fmt, sizeof(fmt), "#!/bin/sh\n# atrun uid=%%ld gid=%%ld\n# mail %%%ds %%d", - LOGNAMESIZE); + MAXLOGNAME - 1); if (fscanf(stream, fmt, &nuid, &ngid, mailbuf, &send_mail) != 4) perrx("File %s is in wrong format - aborting", filename); diff --git a/libexec/bootpd/Makefile b/libexec/bootpd/Makefile index 830577a57de..6f02477d466 100644 --- a/libexec/bootpd/Makefile +++ b/libexec/bootpd/Makefile @@ -5,6 +5,8 @@ PROG= bootpd CFLAGS+= -DETC_ETHERS CFLAGS+= -DSYSLOG -DDEBUG -DVEND_CMU +WARNS?= 2 + SUBDIR= bootpgw tools SRCS= bootpd.c dovend.c readfile.c hash.c dumptab.c \ diff --git a/libexec/bootpd/Makefile.inc b/libexec/bootpd/Makefile.inc index 829da300445..899c9b53689 100644 --- a/libexec/bootpd/Makefile.inc +++ b/libexec/bootpd/Makefile.inc @@ -1,3 +1,5 @@ # $FreeBSD$ BINDIR?= /usr/libexec + +WARNS?= 1 diff --git a/libexec/bootpd/tools/Makefile.inc b/libexec/bootpd/tools/Makefile.inc index 4d7876162d2..f4a306f1a32 100644 --- a/libexec/bootpd/tools/Makefile.inc +++ b/libexec/bootpd/tools/Makefile.inc @@ -2,3 +2,5 @@ # $FreeBSD$ BINDIR= /usr/sbin + +WARNS?= 1 diff --git a/libexec/comsat/comsat.c b/libexec/comsat/comsat.c index fd7cc8d4dc3..1700ef681b3 100644 --- a/libexec/comsat/comsat.c +++ b/libexec/comsat/comsat.c @@ -85,7 +85,7 @@ void onalrm(int); void reapchildren(int); int -main(int argc, char *argv[]) +main(int argc __unused, char *argv[] __unused) { struct sockaddr_in from; socklen_t fromlen; @@ -132,16 +132,16 @@ main(int argc, char *argv[]) } void -reapchildren(int signo) +reapchildren(int signo __unused) { while (wait3(NULL, WNOHANG, NULL) > 0); } void -onalrm(int signo) +onalrm(int signo __unused) { - static u_int utmpsize; /* last malloced size for utmp */ - static u_int utmpmtime; /* last modification time for utmp */ + static off_t utmpsize; /* last malloced size for utmp */ + static time_t utmpmtime; /* last modification time for utmp */ struct stat statbf; if (time(NULL) - lastmsgtime >= MAXIDLE) @@ -194,7 +194,7 @@ mailfor(char *name) notify(utp, file, offset, folder); } -static char *cr; +static const char *cr; void notify(struct utmp *utp, char file[], off_t offset, int folder) @@ -203,11 +203,11 @@ notify(struct utmp *utp, char file[], off_t offset, int folder) struct stat stb; struct termios tio; char tty[20], name[sizeof(utmp[0].ut_name) + 1]; - const char *cr = utp->ut_line; + const char *line = utp->ut_line; - if (strncmp(cr, "pts/", 4) == 0) - cr += 4; - if (strchr(cr, '/')) { + if (strncmp(line, "pts/", 4) == 0) + line += 4; + if (strchr(line, '/')) { /* A slash is an attempt to break security... */ syslog(LOG_AUTH | LOG_NOTICE, "Unexpected `/' in `%s'", utp->ut_line); diff --git a/libexec/fingerd/Makefile b/libexec/fingerd/Makefile index ae92564cda9..b6382ad7970 100644 --- a/libexec/fingerd/Makefile +++ b/libexec/fingerd/Makefile @@ -5,8 +5,8 @@ PROG= fingerd DPADD= ${LIBUTIL} LDADD= -lutil MAN= fingerd.8 -WARNS?= 2 +WARNS?= 2 WFORMAT=0 .include diff --git a/libexec/getty/Makefile b/libexec/getty/Makefile index 697e81ae0bb..f9679586a48 100644 --- a/libexec/getty/Makefile +++ b/libexec/getty/Makefile @@ -6,6 +6,8 @@ SRCS= main.c init.c subr.c chat.c DPADD= ${LIBUTIL} LDADD= -lutil MAN= gettytab.5 ttys.5 getty.8 + +WARNS?= 1 WFORMAT=0 .include diff --git a/libexec/mail.local/Makefile b/libexec/mail.local/Makefile index 57837d11166..3e59609e893 100644 --- a/libexec/mail.local/Makefile +++ b/libexec/mail.local/Makefile @@ -8,6 +8,8 @@ PROG= mail.local SRCS= mail.local.c MAN= mail.local.8 CFLAGS+=-I${SENDMAIL_DIR}/include -I. + +WARNS?= 2 WFORMAT=0 LIBSMDIR= ${.OBJDIR}/../../lib/libsm diff --git a/libexec/mknetid/Makefile b/libexec/mknetid/Makefile index 6941b8fde41..5ca06621376 100644 --- a/libexec/mknetid/Makefile +++ b/libexec/mknetid/Makefile @@ -5,4 +5,6 @@ SRCS= mknetid.c hash.c parse_group.c MAN= netid.5 mknetid.8 +WARNS?= 2 + .include diff --git a/libexec/pppoed/Makefile b/libexec/pppoed/Makefile index 0f0c78eda4f..1ffaffe3eed 100644 --- a/libexec/pppoed/Makefile +++ b/libexec/pppoed/Makefile @@ -5,6 +5,7 @@ DPADD= ${LIBNETGRAPH} LDADD= -lnetgraph MAN= pppoed.8 +WARNS?= 1 WFORMAT=0 .include diff --git a/libexec/rbootd/Makefile b/libexec/rbootd/Makefile index 3a4099e4a8b..70b6555c964 100644 --- a/libexec/rbootd/Makefile +++ b/libexec/rbootd/Makefile @@ -5,6 +5,7 @@ PROG= rbootd SRCS= bpf.c conf.c parseconf.c rbootd.c rmpproto.c utils.c MAN= rbootd.8 +WARNS?= 1 WFORMAT=0 .include diff --git a/libexec/revnetgroup/Makefile b/libexec/revnetgroup/Makefile index 70883714134..d3b36fa98b1 100644 --- a/libexec/revnetgroup/Makefile +++ b/libexec/revnetgroup/Makefile @@ -5,4 +5,6 @@ SRCS= revnetgroup.c hash.c parse_netgroup.c MAN= revnetgroup.8 +WARNS?= 2 + .include diff --git a/libexec/rpc.rquotad/Makefile b/libexec/rpc.rquotad/Makefile index feacce57ef4..331f6ab6e2b 100644 --- a/libexec/rpc.rquotad/Makefile +++ b/libexec/rpc.rquotad/Makefile @@ -4,8 +4,6 @@ PROG = rpc.rquotad SRCS = rquotad.c MAN = rpc.rquotad.8 -WARNS ?= 6 - DPADD= ${LIBRPCSVC} LDADD= -lrpcsvc diff --git a/libexec/rpc.rstatd/Makefile b/libexec/rpc.rstatd/Makefile index 1083447dd39..d1a12eaec5f 100644 --- a/libexec/rpc.rstatd/Makefile +++ b/libexec/rpc.rstatd/Makefile @@ -7,4 +7,6 @@ MAN = rpc.rstatd.8 DPADD= ${LIBRPCSVC} ${LIBUTIL} ${LIBDEVSTAT} LDADD= -lrpcsvc -lutil -ldevstat +WARNS?= 1 + .include diff --git a/libexec/rpc.rusersd/Makefile b/libexec/rpc.rusersd/Makefile index af43bd3e7cf..18918944d9d 100644 --- a/libexec/rpc.rusersd/Makefile +++ b/libexec/rpc.rusersd/Makefile @@ -4,13 +4,12 @@ PROG = rpc.rusersd SRCS = rusersd.c rusers_proc.c MAN = rpc.rusersd.8 -DPADD= ${LIBRPCSVC} ${LIBUTIL} -LDADD= -lrpcsvc -lutil +DPADD= ${LIBRPCSVC} ${LIBULOG} ${LIBUTIL} +LDADD= -lrpcsvc -lulog -lutil #.if exists(/usr/X11R6/include/X11/extensions/xidle.h) #CFLAGS+= -DXIDLE #LDADD+= -L/usr/X11R6/lib -lXext -lX11 #.endif - .include diff --git a/libexec/rpc.rusersd/rusers_proc.c b/libexec/rpc.rusersd/rusers_proc.c index 8bd96924b29..9b5486ffef0 100644 --- a/libexec/rpc.rusersd/rusers_proc.c +++ b/libexec/rpc.rusersd/rusers_proc.c @@ -45,56 +45,29 @@ static const char rcsid[] = #include #include #include -#include +#define _ULOG_POSIX_NAMES +#include #ifdef XIDLE #include #include #include #endif -#define utmp rutmp #include -#undef utmp - -#define IGNOREUSER "sleeper" - -#ifdef OSF -#define _PATH_UTMP UTMP_FILE -#endif - -#ifndef _PATH_UTMP -#define _PATH_UTMP "/etc/utmp" -#endif #ifndef _PATH_DEV #define _PATH_DEV "/dev" #endif -#ifndef UT_LINESIZE -#define UT_LINESIZE sizeof(((struct utmp *)0)->ut_line) -#endif -#ifndef UT_NAMESIZE -#define UT_NAMESIZE sizeof(((struct utmp *)0)->ut_name) -#endif -#ifndef UT_HOSTSIZE -#define UT_HOSTSIZE sizeof(((struct utmp *)0)->ut_host) -#endif - -typedef char ut_line_t[UT_LINESIZE+1]; -typedef char ut_name_t[UT_NAMESIZE+1]; -typedef char ut_host_t[UT_HOSTSIZE+1]; - -utmpidle utmp_idle[MAXUSERS]; -rutmp old_utmp[MAXUSERS]; -ut_line_t line[MAXUSERS]; -ut_name_t name[MAXUSERS]; -ut_host_t host[MAXUSERS]; +static utmpidle utmp_idle[MAXUSERS]; +static utmp old_utmp[MAXUSERS]; +static struct utmpx utmp_list[MAXUSERS]; extern int from_inetd; -FILE *ufp; +void rusers_service(struct svc_req *, SVCXPRT *); #ifdef XIDLE -Display *dpy; +static Display *dpy; static jmp_buf openAbort; @@ -106,211 +79,187 @@ abortOpen(void) XqueryIdle(char *display) { - int first_event, first_error; - Time IdleTime; + int first_event, first_error; + Time IdleTime; - (void) signal (SIGALRM, abortOpen); - (void) alarm ((unsigned) 10); - if (!setjmp (openAbort)) { - if (!(dpy= XOpenDisplay(display))) { - syslog(LOG_ERR, "Cannot open display %s", display); - return(-1); - } - if (XidleQueryExtension(dpy, &first_event, &first_error)) { - if (!XGetIdleTime(dpy, &IdleTime)) { - syslog(LOG_ERR, "%s: unable to get idle time", display); - return(-1); - } - } - else { - syslog(LOG_ERR, "%s: Xidle extension not loaded", display); - return(-1); - } - XCloseDisplay(dpy); - } - else { - syslog(LOG_ERR, "%s: server grabbed for over 10 seconds", display); - return(-1); - } - (void) signal (SIGALRM, SIG_DFL); - (void) alarm ((unsigned) 0); + (void) signal (SIGALRM, abortOpen); + (void) alarm ((unsigned) 10); + if (!setjmp (openAbort)) { + if (!(dpy= XOpenDisplay(display))) { + syslog(LOG_ERR, "Cannot open display %s", display); + return(-1); + } + if (XidleQueryExtension(dpy, &first_event, &first_error)) { + if (!XGetIdleTime(dpy, &IdleTime)) { + syslog(LOG_ERR, "%s: unable to get idle time", display); + return(-1); + } + } else { + syslog(LOG_ERR, "%s: Xidle extension not loaded", display); + return(-1); + } + XCloseDisplay(dpy); + } else { + syslog(LOG_ERR, "%s: server grabbed for over 10 seconds", display); + return(-1); + } + (void) signal (SIGALRM, SIG_DFL); + (void) alarm ((unsigned) 0); - IdleTime /= 1000; - return((IdleTime + 30) / 60); + IdleTime /= 1000; + return((IdleTime + 30) / 60); } #endif static u_int -getidle(char *tty, char *display) +getidle(const char *tty, const char *display __unused) { - struct stat st; - char devname[PATH_MAX]; - time_t now; - u_long idle; + struct stat st; + char ttyname[PATH_MAX]; + time_t now; + u_long idle; - /* - * If this is an X terminal or console, then try the - * XIdle extension - */ + /* + * If this is an X terminal or console, then try the + * XIdle extension + */ #ifdef XIDLE - if (display && *display && (idle = XqueryIdle(display)) >= 0) - return(idle); + if (display && *display && (idle = XqueryIdle(display)) >= 0) + return(idle); #endif - idle = 0; - if (*tty == 'X') { - u_long kbd_idle, mouse_idle; + idle = 0; + if (*tty == 'X') { + u_long kbd_idle, mouse_idle; #if !defined(__FreeBSD__) - kbd_idle = getidle("kbd", NULL); + kbd_idle = getidle("kbd", NULL); #else - kbd_idle = getidle("vga", NULL); + kbd_idle = getidle("vga", NULL); #endif - mouse_idle = getidle("mouse", NULL); - idle = (kbd_idle < mouse_idle)?kbd_idle:mouse_idle; - } - else { - sprintf(devname, "%s/%s", _PATH_DEV, tty); - if (stat(devname, &st) < 0) { + mouse_idle = getidle("mouse", NULL); + idle = (kbd_idle < mouse_idle)?kbd_idle:mouse_idle; + } else { + sprintf(ttyname, "%s/%s", _PATH_DEV, tty); + if (stat(ttyname, &st) < 0) { #ifdef DEBUG - printf("%s: %s\n", devname, strerror(errno)); + printf("%s: %s\n", ttyname, strerror(errno)); #endif - return(-1); - } - time(&now); + return(-1); + } + time(&now); #ifdef DEBUG - printf("%s: now=%d atime=%d\n", devname, now, - st.st_atime); + printf("%s: now=%d atime=%d\n", ttyname, now, + st.st_atime); #endif - idle = now - st.st_atime; - idle = (idle + 30) / 60; /* secs->mins */ - } - if (idle < 0) idle = 0; + idle = now - st.st_atime; + idle = (idle + 30) / 60; /* secs->mins */ + } - return(idle); + return(idle); } static utmpidlearr * -do_names_2(int all) +do_names_2(void) { - static utmpidlearr ut; - struct utmp usr; - int nusers = 0; + static utmpidlearr ut; + struct utmpx *usr; + int nusers = 0; - bzero((char *)&ut, sizeof(ut)); - ut.utmpidlearr_val = &utmp_idle[0]; + memset(&ut, 0, sizeof(ut)); + ut.utmpidlearr_val = &utmp_idle[0]; - ufp = fopen(_PATH_UTMP, "r"); - if (!ufp) { - syslog(LOG_ERR, "%m"); - return(&ut); - } + setutxent(); + while ((usr = getutxent()) != NULL && nusers < MAXUSERS) { + if (usr->ut_type != USER_PROCESS) + continue; - /* only entries with both name and line fields */ - while (fread((char *)&usr, sizeof(usr), 1, ufp) == 1 && - nusers < MAXUSERS) - if (*usr.ut_name && *usr.ut_line && - strncmp(usr.ut_name, IGNOREUSER, - sizeof(usr.ut_name)) -#ifdef OSF - && usr.ut_type == USER_PROCESS -#endif - ) { - utmp_idle[nusers].ui_utmp.ut_time = - usr.ut_time; - utmp_idle[nusers].ui_idle = - getidle(usr.ut_line, usr.ut_host); - utmp_idle[nusers].ui_utmp.ut_line = line[nusers]; - strncpy(line[nusers], usr.ut_line, UT_LINESIZE); - utmp_idle[nusers].ui_utmp.ut_name = name[nusers]; - strncpy(name[nusers], usr.ut_name, UT_NAMESIZE); - utmp_idle[nusers].ui_utmp.ut_host = host[nusers]; - strncpy(host[nusers], usr.ut_host, UT_HOSTSIZE); + memcpy(&utmp_list[nusers], usr, sizeof(*usr)); + utmp_idle[nusers].ui_utmp.ut_time = usr->ut_tv.tv_sec; + utmp_idle[nusers].ui_idle = + getidle(usr->ut_line, usr->ut_host); + utmp_idle[nusers].ui_utmp.ut_line = + utmp_list[nusers].ut_line; + utmp_idle[nusers].ui_utmp.ut_name = + utmp_list[nusers].ut_user; + utmp_idle[nusers].ui_utmp.ut_host = + utmp_list[nusers].ut_host; - /* Make sure entries are NUL terminated */ - line[nusers][UT_LINESIZE] = - name[nusers][UT_NAMESIZE] = - host[nusers][UT_HOSTSIZE] = '\0'; - nusers++; - } + nusers++; + } + endutxent(); - ut.utmpidlearr_len = nusers; - fclose(ufp); - return(&ut); + ut.utmpidlearr_len = nusers; + return(&ut); } -int * -rusers_num(void) +static int * +rusers_num(void *argp __unused, struct svc_req *rqstp __unused) { - static int num_users = 0; - struct utmp usr; - - ufp = fopen(_PATH_UTMP, "r"); - if (!ufp) { - syslog(LOG_ERR, "%m"); - return(NULL); - } - - /* only entries with both name and line fields */ - while (fread((char *)&usr, sizeof(usr), 1, ufp) == 1) - if (*usr.ut_name && *usr.ut_line && - strncmp(usr.ut_name, IGNOREUSER, - sizeof(usr.ut_name)) -#ifdef OSF - && usr.ut_type == USER_PROCESS -#endif - ) { - num_users++; - } - - fclose(ufp); - return(&num_users); + static int num_users = 0; + struct utmpx *usr; + + setutxent(); + while ((usr = getutxent()) != NULL) { + if (usr->ut_type != USER_PROCESS) + continue; + num_users++; + } + endutxent(); + + return(&num_users); } static utmparr * -do_names_1(int all) +do_names_1(void) { - utmpidlearr *utidle; - static utmparr ut; - int i; + utmpidlearr *utidle; + static utmparr ut; + unsigned int i; - bzero((char *)&ut, sizeof(ut)); + bzero((char *)&ut, sizeof(ut)); - utidle = do_names_2(all); - if (utidle) { - ut.utmparr_len = utidle->utmpidlearr_len; - ut.utmparr_val = &old_utmp[0]; - for (i = 0; i < ut.utmparr_len; i++) - bcopy(&utmp_idle[i].ui_utmp, &old_utmp[i], - sizeof(old_utmp[0])); + utidle = do_names_2(); + if (utidle) { + ut.utmparr_len = utidle->utmpidlearr_len; + ut.utmparr_val = &old_utmp[0]; + for (i = 0; i < ut.utmparr_len; i++) + bcopy(&utmp_idle[i].ui_utmp, &old_utmp[i], + sizeof(old_utmp[0])); - } + } - return(&ut); + return(&ut); } utmpidlearr * -rusersproc_names_2_svc(void *argp, struct svc_req *rqstp) +rusersproc_names_2_svc(void *argp __unused, struct svc_req *rqstp __unused) { - return(do_names_2(0)); + + return (do_names_2()); } utmpidlearr * -rusersproc_allnames_2_svc(void *argp, struct svc_req *rqstp) +rusersproc_allnames_2_svc(void *argp __unused, struct svc_req *rqstp __unused) { - return(do_names_2(1)); + + return (do_names_2()); } utmparr * -rusersproc_names_1_svc(void *argp, struct svc_req *rqstp) +rusersproc_names_1_svc(void *argp __unused, struct svc_req *rqstp __unused) { - return(do_names_1(0)); + + return (do_names_1()); } utmparr * -rusersproc_allnames_1_svc(void *argp, struct svc_req *rqstp) +rusersproc_allnames_1_svc(void *argp __unused, struct svc_req *rqstp __unused) { - return(do_names_1(1)); + + return (do_names_1()); } +typedef void *(*rusersproc_t)(void *, struct svc_req *); + void rusers_service(struct svc_req *rqstp, SVCXPRT *transp) { @@ -318,8 +267,8 @@ rusers_service(struct svc_req *rqstp, SVCXPRT *transp) int fill; } argument; char *result; - bool_t (*xdr_argument)(), (*xdr_result)(); - char *(*local)(); + xdrproc_t xdr_argument, xdr_result; + rusersproc_t local; switch (rqstp->rq_proc) { case NULLPROC: @@ -327,43 +276,43 @@ rusers_service(struct svc_req *rqstp, SVCXPRT *transp) goto leave; case RUSERSPROC_NUM: - xdr_argument = xdr_void; - xdr_result = xdr_int; - local = (char *(*)()) rusers_num; + xdr_argument = (xdrproc_t)xdr_void; + xdr_result = (xdrproc_t)xdr_int; + local = (rusersproc_t)rusers_num; break; case RUSERSPROC_NAMES: - xdr_argument = xdr_void; - xdr_result = xdr_utmpidlearr; - switch (rqstp->rq_vers) { - case RUSERSVERS_ORIG: - local = (char *(*)()) rusersproc_names_1_svc; - break; - case RUSERSVERS_IDLE: - local = (char *(*)()) rusersproc_names_2_svc; - break; - default: - svcerr_progvers(transp, RUSERSVERS_ORIG, RUSERSVERS_IDLE); - goto leave; - /*NOTREACHED*/ - } + xdr_argument = (xdrproc_t)xdr_void; + xdr_result = (xdrproc_t)xdr_utmpidlearr; + switch (rqstp->rq_vers) { + case RUSERSVERS_ORIG: + local = (rusersproc_t)rusersproc_names_1_svc; + break; + case RUSERSVERS_IDLE: + local = (rusersproc_t)rusersproc_names_2_svc; + break; + default: + svcerr_progvers(transp, RUSERSVERS_ORIG, RUSERSVERS_IDLE); + goto leave; + /*NOTREACHED*/ + } break; case RUSERSPROC_ALLNAMES: - xdr_argument = xdr_void; - xdr_result = xdr_utmpidlearr; - switch (rqstp->rq_vers) { - case RUSERSVERS_ORIG: - local = (char *(*)()) rusersproc_allnames_1_svc; - break; - case RUSERSVERS_IDLE: - local = (char *(*)()) rusersproc_allnames_2_svc; - break; - default: - svcerr_progvers(transp, RUSERSVERS_ORIG, RUSERSVERS_IDLE); - goto leave; - /*NOTREACHED*/ - } + xdr_argument = (xdrproc_t)xdr_void; + xdr_result = (xdrproc_t)xdr_utmpidlearr; + switch (rqstp->rq_vers) { + case RUSERSVERS_ORIG: + local = (rusersproc_t)rusersproc_allnames_1_svc; + break; + case RUSERSVERS_IDLE: + local = (rusersproc_t)rusersproc_allnames_2_svc; + break; + default: + svcerr_progvers(transp, RUSERSVERS_ORIG, RUSERSVERS_IDLE); + goto leave; + /*NOTREACHED*/ + } break; default: @@ -385,6 +334,6 @@ rusers_service(struct svc_req *rqstp, SVCXPRT *transp) exit(1); } leave: - if (from_inetd) - exit(0); + if (from_inetd) + exit(0); } diff --git a/libexec/rpc.rusersd/rusersd.c b/libexec/rpc.rusersd/rusersd.c index 1835e8e27ae..009bbfde85e 100644 --- a/libexec/rpc.rusersd/rusersd.c +++ b/libexec/rpc.rusersd/rusersd.c @@ -41,50 +41,48 @@ static const char rcsid[] = #include #include #include -#define utmp rutmp #include -#undef utmp extern void rusers_service(struct svc_req *, SVCXPRT *); int from_inetd = 1; -void +static void cleanup(int sig __unused) { - (void) rpcb_unset(RUSERSPROG, RUSERSVERS_IDLE, NULL); - (void) rpcb_unset(RUSERSPROG, RUSERSVERS_ORIG, NULL); - exit(0); + (void) rpcb_unset(RUSERSPROG, RUSERSVERS_IDLE, NULL); + (void) rpcb_unset(RUSERSPROG, RUSERSVERS_ORIG, NULL); + exit(0); } int -main(int argc, char *argv[]) +main(int argc __unused, char *argv[] __unused) { - SVCXPRT *transp; + SVCXPRT *transp = NULL; /* Keep compiler happy. */ int ok; struct sockaddr_storage from; socklen_t fromlen; - /* - * See if inetd started us - */ + /* + * See if inetd started us + */ fromlen = sizeof(from); - if (getsockname(0, (struct sockaddr *)&from, &fromlen) < 0) { - from_inetd = 0; - } + if (getsockname(0, (struct sockaddr *)&from, &fromlen) < 0) { + from_inetd = 0; + } - if (!from_inetd) { - daemon(0, 0); + if (!from_inetd) { + daemon(0, 0); - (void) rpcb_unset(RUSERSPROG, RUSERSVERS_IDLE, NULL); - (void) rpcb_unset(RUSERSPROG, RUSERSVERS_ORIG, NULL); + (void) rpcb_unset(RUSERSPROG, RUSERSVERS_IDLE, NULL); + (void) rpcb_unset(RUSERSPROG, RUSERSVERS_ORIG, NULL); (void) signal(SIGINT, cleanup); (void) signal(SIGTERM, cleanup); (void) signal(SIGHUP, cleanup); - } + } - openlog("rpc.rusersd", LOG_CONS|LOG_PID, LOG_DAEMON); + openlog("rpc.rusersd", LOG_CONS|LOG_PID, LOG_DAEMON); if (from_inetd) { transp = svc_tli_create(0, NULL, NULL, 0, 0); @@ -112,7 +110,7 @@ main(int argc, char *argv[]) exit(1); } - svc_run(); + svc_run(); syslog(LOG_ERR, "svc_run returned"); exit(1); } diff --git a/libexec/rpc.rwalld/Makefile b/libexec/rpc.rwalld/Makefile index 83182e904b3..b09d6635855 100644 --- a/libexec/rpc.rwalld/Makefile +++ b/libexec/rpc.rwalld/Makefile @@ -7,4 +7,6 @@ MAN = rpc.rwalld.8 DPADD= ${LIBUTIL} LDADD= -lutil +WARNS?= 2 + .include diff --git a/libexec/rpc.sprayd/Makefile b/libexec/rpc.sprayd/Makefile index 1dd582de008..5b1cb241c25 100644 --- a/libexec/rpc.sprayd/Makefile +++ b/libexec/rpc.sprayd/Makefile @@ -7,5 +7,6 @@ MAN = rpc.sprayd.8 DPADD= ${LIBRPCSVC} LDADD= -lrpcsvc -.include +WARNS?= 2 +.include diff --git a/libexec/rshd/Makefile b/libexec/rshd/Makefile index 155314ad611..f6881e8e1c5 100644 --- a/libexec/rshd/Makefile +++ b/libexec/rshd/Makefile @@ -4,6 +4,7 @@ PROG= rshd MAN= rshd.8 +WARNS?= 3 WFORMAT=0 DPADD= ${LIBUTIL} ${LIBPAM} diff --git a/libexec/rtld-aout/shlib.c b/libexec/rtld-aout/shlib.c index 39ec792a72c..f2c74a4e9a8 100644 --- a/libexec/rtld-aout/shlib.c +++ b/libexec/rtld-aout/shlib.c @@ -82,8 +82,7 @@ add_search_dir(const char *name) } void -add_search_path(path) -char *path; +add_search_path(char *path) { register char *cp, *dup; @@ -98,7 +97,7 @@ char *path; } void -std_search_path() +std_search_path(void) { int i, n; @@ -115,9 +114,7 @@ std_search_path() */ int -getdewey(dewey, cp) -int dewey[]; -char *cp; +getdewey(int dewey[], char *cp) { int i, n; @@ -142,9 +139,7 @@ char *cp; * Return 0 if equal. */ int -cmpndewey(d1, n1, d2, n2) -int d1[], d2[]; -int n1, n2; +cmpndewey(int d1[], int n1, int d2[], int n2) { register int i; @@ -185,10 +180,7 @@ int n1, n2; */ char * -findshlib(name, majorp, minorp, do_dot_a) -char *name; -int *majorp, *minorp; -int do_dot_a; +findshlib(char *name, int *majorp, int *minorp, int do_dot_a) { int i; @@ -212,8 +204,7 @@ int do_dot_a; */ char * -find_lib_file(name) - const char *name; +find_lib_file(const char *name) { int i; @@ -261,12 +252,7 @@ find_lib_file(name) */ char * -search_lib_dir(dir, name, majorp, minorp, do_dot_a) - char *dir; - char *name; - int *majorp; - int *minorp; - int do_dot_a; +search_lib_dir(char *dir, char *name, int *majorp, int *minorp, int do_dot_a) { size_t namelen; DIR *dd; diff --git a/libexec/rtld-aout/support.c b/libexec/rtld-aout/support.c index 71a84ffa129..eb8bd29673e 100644 --- a/libexec/rtld-aout/support.c +++ b/libexec/rtld-aout/support.c @@ -38,8 +38,7 @@ #include "support.h" char * -concat(s1, s2, s3) - const char *s1, *s2, *s3; +concat(const char *s1, const char *s2, const char *s3) { int len = 1; char *s; @@ -61,8 +60,7 @@ concat(s1, s2, s3) } void * -xmalloc(n) - size_t n; +xmalloc(size_t n) { char *p = malloc(n); @@ -73,9 +71,7 @@ xmalloc(n) } void * -xrealloc(p, n) - void *p; - size_t n; +xrealloc(void *p, size_t n) { p = realloc(p, n); diff --git a/libexec/rtld-elf/Makefile b/libexec/rtld-elf/Makefile index 5e9729c68bd..d6df617d424 100644 --- a/libexec/rtld-elf/Makefile +++ b/libexec/rtld-elf/Makefile @@ -12,6 +12,7 @@ CSTD?= gnu99 CFLAGS+= -Wall -DFREEBSD_ELF -DIN_RTLD CFLAGS+= -I${.CURDIR}/${MACHINE_ARCH} -I${.CURDIR} LDFLAGS+= -nostdlib -e .rtld_start +WARNS?= 2 INSTALLFLAGS= -C -b PRECIOUSPROG= BINDIR= /libexec diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index 2eebf220b5c..cab8c87d86f 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -87,7 +87,7 @@ static void die(void) __dead2; static void digest_dynamic(Obj_Entry *, int); static Obj_Entry *digest_phdr(const Elf_Phdr *, int, caddr_t, const char *); static Obj_Entry *dlcheck(void *); -static Obj_Entry *do_load_object(int, const char *, char *, struct stat *); +static Obj_Entry *do_load_object(int, const char *, char *, struct stat *, int); static int do_search_info(const Obj_Entry *obj, int, struct dl_serinfo *); static bool donelist_check(DoneList *, const Obj_Entry *); static void errmsg_restore(char *); @@ -103,7 +103,7 @@ static void initlist_add_objects(Obj_Entry *, Obj_Entry **, Objlist *); static bool is_exported(const Elf_Sym *); static void linkmap_add(Obj_Entry *); static void linkmap_delete(Obj_Entry *); -static int load_needed_objects(Obj_Entry *); +static int load_needed_objects(Obj_Entry *, int); static int load_preload_objects(void); static Obj_Entry *load_object(const char *, const Obj_Entry *, int); static Obj_Entry *obj_from_addr(const void *); @@ -366,12 +366,12 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp) * future processes to honor the potentially un-safe variables. */ if (!trust) { - unsetenv(LD_ "PRELOAD"); - unsetenv(LD_ "LIBMAP"); - unsetenv(LD_ "LIBRARY_PATH"); - unsetenv(LD_ "LIBMAP_DISABLE"); - unsetenv(LD_ "DEBUG"); - unsetenv(LD_ "ELF_HINTS_PATH"); + if (unsetenv(LD_ "PRELOAD") || unsetenv(LD_ "LIBMAP") || + unsetenv(LD_ "LIBRARY_PATH") || unsetenv(LD_ "LIBMAP_DISABLE") || + unsetenv(LD_ "DEBUG") || unsetenv(LD_ "ELF_HINTS_PATH")) { + _rtld_error("environment corrupt; aborting"); + die(); + } } ld_debug = getenv(LD_ "DEBUG"); libmap_disable = getenv(LD_ "LIBMAP_DISABLE") != NULL; @@ -485,7 +485,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp) preload_tail = obj_tail; dbg("loading needed objects"); - if (load_needed_objects(obj_main) == -1) + if (load_needed_objects(obj_main, 0) == -1) die(); /* Make a list of all objects loaded at startup. */ @@ -898,7 +898,7 @@ digest_dynamic(Obj_Entry *obj, int early) #endif case DT_FLAGS: - if ((dynp->d_un.d_val & DF_1_ORIGIN) && trust) + if ((dynp->d_un.d_val & DF_ORIGIN) && trust) obj->z_origin = true; if (dynp->d_un.d_val & DF_SYMBOLIC) obj->symbolic = true; @@ -932,6 +932,8 @@ digest_dynamic(Obj_Entry *obj, int early) #endif case DT_FLAGS_1: + if (dynp->d_un.d_val & DF_1_NOOPEN) + obj->z_noopen = true; if ((dynp->d_un.d_val & DF_1_ORIGIN) && trust) obj->z_origin = true; if (dynp->d_un.d_val & DF_1_GLOBAL) @@ -1425,7 +1427,7 @@ is_exported(const Elf_Sym *def) * returns -1 on failure. */ static int -load_needed_objects(Obj_Entry *first) +load_needed_objects(Obj_Entry *first, int flags) { Obj_Entry *obj, *obj1; @@ -1434,7 +1436,7 @@ load_needed_objects(Obj_Entry *first) for (needed = obj->needed; needed != NULL; needed = needed->next) { obj1 = needed->obj = load_object(obj->strtab + needed->name, obj, - false); + flags & ~RTLD_LO_NOLOAD); if (obj1 == NULL && !ld_tracing) return -1; if (obj1 != NULL && obj1->z_nodelete && !obj1->ref_nodel) { @@ -1465,7 +1467,7 @@ load_preload_objects(void) savech = p[len]; p[len] = '\0'; - if (load_object(p, NULL, false) == NULL) + if (load_object(p, NULL, 0) == NULL) return -1; /* XXX - cleanup */ p[len] = savech; p += len; @@ -1482,7 +1484,7 @@ load_preload_objects(void) * on failure. */ static Obj_Entry * -load_object(const char *name, const Obj_Entry *refobj, int noload) +load_object(const char *name, const Obj_Entry *refobj, int flags) { Obj_Entry *obj; int fd = -1; @@ -1528,11 +1530,11 @@ load_object(const char *name, const Obj_Entry *refobj, int noload) close(fd); return obj; } - if (noload) + if (flags & RTLD_LO_NOLOAD) return (NULL); /* First use of this object, so we must map it in */ - obj = do_load_object(fd, name, path, &sb); + obj = do_load_object(fd, name, path, &sb, flags); if (obj == NULL) free(path); close(fd); @@ -1541,7 +1543,8 @@ load_object(const char *name, const Obj_Entry *refobj, int noload) } static Obj_Entry * -do_load_object(int fd, const char *name, char *path, struct stat *sbp) +do_load_object(int fd, const char *name, char *path, struct stat *sbp, + int flags) { Obj_Entry *obj; struct statfs fs; @@ -1568,6 +1571,14 @@ do_load_object(int fd, const char *name, char *path, struct stat *sbp) object_add_name(obj, name); obj->path = path; digest_dynamic(obj, 0); + if (obj->z_noopen && (flags & (RTLD_LO_DLOPEN | RTLD_LO_TRACE)) == + RTLD_LO_DLOPEN) { + dbg("refusing to load non-loadable \"%s\"", obj->path); + _rtld_error("Cannot dlopen non-loadable %s", obj->path); + munmap(obj->mapbase, obj->mapsize); + obj_free(obj); + return (NULL); + } *obj_tail = obj; obj_tail = &obj->next; @@ -1986,14 +1997,18 @@ dlopen(const char *name, int mode) Obj_Entry **old_obj_tail; Obj_Entry *obj; Objlist initlist; - int result, lockstate, nodelete, noload; + int result, lockstate, nodelete, lo_flags; LD_UTRACE(UTRACE_DLOPEN_START, NULL, NULL, 0, mode, name); ld_tracing = (mode & RTLD_TRACE) == 0 ? NULL : "1"; if (ld_tracing != NULL) environ = (char **)*get_program_var_addr("environ"); nodelete = mode & RTLD_NODELETE; - noload = mode & RTLD_NOLOAD; + lo_flags = RTLD_LO_DLOPEN; + if (mode & RTLD_NOLOAD) + lo_flags |= RTLD_LO_NOLOAD; + if (ld_tracing != NULL) + lo_flags |= RTLD_LO_TRACE; objlist_init(&initlist); @@ -2006,7 +2021,7 @@ dlopen(const char *name, int mode) obj = obj_main; obj->refcount++; } else { - obj = load_object(name, obj_main, noload); + obj = load_object(name, obj_main, lo_flags); } if (obj) { @@ -2016,7 +2031,7 @@ dlopen(const char *name, int mode) mode &= RTLD_MODEMASK; if (*old_obj_tail != NULL) { /* We loaded something new. */ assert(*old_obj_tail == obj); - result = load_needed_objects(obj); + result = load_needed_objects(obj, RTLD_LO_DLOPEN); init_dag(obj); if (result != -1) result = rtld_verify_versions(&obj->dagmembers); @@ -3425,7 +3440,7 @@ locate_dependency(const Obj_Entry *obj, const char *name) if (object_match_name(needed->obj, name)) return needed->obj; } - _rtld_error("%s: Unexpected inconsistency: dependency %s not found", + _rtld_error("%s: Unexpected inconsistency: dependency %s not found", obj->path, name); die(); } diff --git a/libexec/rtld-elf/rtld.h b/libexec/rtld-elf/rtld.h index 06086b4b92e..875e84bc7e6 100644 --- a/libexec/rtld-elf/rtld.h +++ b/libexec/rtld-elf/rtld.h @@ -218,6 +218,7 @@ typedef struct Struct_Obj_Entry { bool phdr_alloc : 1; /* Phdr is allocated and needs to be freed. */ bool z_origin : 1; /* Process rpath and soname tokens */ bool z_nodelete : 1; /* Do not unload the object and dependencies */ + bool z_noopen : 1; /* Do not load on dlopen */ bool ref_nodel : 1; /* Refcount increased to prevent dlclose */ bool init_scanned: 1; /* Object is already on init list. */ bool on_fini_list: 1; /* Object is already on fini list. */ @@ -240,6 +241,11 @@ typedef struct Struct_Obj_Entry { #define SYMLOOK_DLSYM 0x02 /* Return newes versioned symbol. Used by dlsym. */ +/* Flags for load_object(). */ +#define RTLD_LO_NOLOAD 0x01 /* dlopen() specified RTLD_NOLOAD. */ +#define RTLD_LO_DLOPEN 0x02 /* Load_object() called from dlopen(). */ +#define RTLD_LO_TRACE 0x04 /* Only tracing. */ + /* * Symbol cache entry used during relocation to avoid multiple lookups * of the same symbol. diff --git a/libexec/smrsh/Makefile b/libexec/smrsh/Makefile index 6fd2801f780..ae86155d0d0 100644 --- a/libexec/smrsh/Makefile +++ b/libexec/smrsh/Makefile @@ -15,6 +15,8 @@ LIBSM= ${LIBSMDIR}/libsm.a DPADD= ${LIBSM} LDADD= ${LIBSM} +WARNS?= 2 + SRCS+= sm_os.h CLEANFILES+=sm_os.h diff --git a/libexec/talkd/Makefile b/libexec/talkd/Makefile index aa6df1bb9b6..7f82f1f217d 100644 --- a/libexec/talkd/Makefile +++ b/libexec/talkd/Makefile @@ -6,6 +6,9 @@ SRCS= talkd.c announce.c process.c table.c print.c ttymsg.c .PATH: ${.CURDIR}/../../usr.bin/wall MAN= talkd.8 CFLAGS+=-I${.CURDIR}/../../usr.bin/wall -WFORMAT=0 + + +DPADD= ${LIBULOG} +LDADD= -lulog .include diff --git a/libexec/talkd/process.c b/libexec/talkd/process.c index d77f8a168bf..d796cd59659 100644 --- a/libexec/talkd/process.c +++ b/libexec/talkd/process.c @@ -59,6 +59,8 @@ static const char rcsid[] = #include #include #include +#define _ULOG_POSIX_NAMES +#include #include "extern.h" @@ -153,8 +155,8 @@ do_announce(CTL_MSG *mp, CTL_RESPONSE *rp) rp->answer = result; return; } -#define satosin(sa) ((struct sockaddr_in *)(sa)) - hp = gethostbyaddr((char *)&satosin(&mp->ctl_addr)->sin_addr, +#define satosin(sa) ((struct sockaddr_in *)(void *)(sa)) + hp = gethostbyaddr(&satosin(&mp->ctl_addr)->sin_addr, sizeof (struct in_addr), AF_INET); if (hp == (struct hostent *)0) { rp->answer = MACHINE_UNKNOWN; @@ -181,55 +183,46 @@ do_announce(CTL_MSG *mp, CTL_RESPONSE *rp) } } -#include - /* * Search utmp for the local user */ int find_user(const char *name, char *tty) { - struct utmp ubuf; + struct utmpx *ut; int status; - FILE *fd; struct stat statb; time_t best = 0; - char line[sizeof(ubuf.ut_line) + 1]; - char ftty[sizeof(_PATH_DEV) - 1 + sizeof(line)]; + char ftty[sizeof(_PATH_DEV) - 1 + sizeof(ut->ut_line)]; - if ((fd = fopen(_PATH_UTMP, "r")) == NULL) { - warnx("can't read %s", _PATH_UTMP); - return (FAILED); - } -#define SCMPN(a, b) strncmp(a, b, sizeof (a)) + setutxent(); status = NOT_HERE; (void) strcpy(ftty, _PATH_DEV); - while (fread((char *) &ubuf, sizeof ubuf, 1, fd) == 1) - if (SCMPN(ubuf.ut_name, name) == 0) { - strncpy(line, ubuf.ut_line, sizeof(ubuf.ut_line)); - line[sizeof(ubuf.ut_line)] = '\0'; + while ((ut = getutxent()) != NULL) + if (ut->ut_type == USER_PROCESS && + strcmp(ut->ut_user, name) == 0) { if (*tty == '\0' || best != 0) { if (best == 0) status = PERMISSION_DENIED; /* no particular tty was requested */ (void) strcpy(ftty + sizeof(_PATH_DEV) - 1, - line); + ut->ut_line); if (stat(ftty, &statb) == 0) { if (!(statb.st_mode & 020)) continue; if (statb.st_atime > best) { best = statb.st_atime; - (void) strcpy(tty, line); + (void) strcpy(tty, ut->ut_line); status = SUCCESS; continue; } } } - if (strcmp(line, tty) == 0) { + if (strcmp(ut->ut_line, tty) == 0) { status = SUCCESS; break; } } - fclose(fd); + endutxent(); return (status); } diff --git a/libexec/tcpd/Makefile b/libexec/tcpd/Makefile index 6bb6080e3a3..e707a4e334e 100644 --- a/libexec/tcpd/Makefile +++ b/libexec/tcpd/Makefile @@ -18,4 +18,6 @@ CFLAGS+=-DINET6 DPADD= ${LIBWRAP} LDADD= -lwrap +WARNS?= 1 + .include diff --git a/libexec/tftp-proxy/Makefile b/libexec/tftp-proxy/Makefile index 45d806857ef..d8541c4b818 100644 --- a/libexec/tftp-proxy/Makefile +++ b/libexec/tftp-proxy/Makefile @@ -6,4 +6,6 @@ PROG= tftp-proxy SRCS= tftp-proxy.c filter.c MAN= tftp-proxy.8 +WARNS?= 3 + .include diff --git a/libexec/tftpd/Makefile b/libexec/tftpd/Makefile index 6036d4c0df4..6c29243a666 100644 --- a/libexec/tftpd/Makefile +++ b/libexec/tftpd/Makefile @@ -5,7 +5,10 @@ PROG= tftpd SRCS= tftpd.c tftpsubs.c DPADD= ${LIBUTIL} LDADD= -lutil + +WARNS?= 1 WFORMAT=0 + MAN= tftpd.8 CFLAGS+=-I${.CURDIR}/../../usr.bin/tftp .PATH: ${.CURDIR}/../../usr.bin/tftp diff --git a/libexec/ulog-helper/Makefile b/libexec/ulog-helper/Makefile new file mode 100644 index 00000000000..c1697c8fd12 --- /dev/null +++ b/libexec/ulog-helper/Makefile @@ -0,0 +1,11 @@ +# $FreeBSD$ + +PROG= ulog-helper +BINOWN= root +BINMODE=4555 +NO_MAN= + +DPADD= ${LIBULOG} +LDADD= -lulog + +.include diff --git a/libexec/ulog-helper/ulog-helper.c b/libexec/ulog-helper/ulog-helper.c new file mode 100644 index 00000000000..eaef7780854 --- /dev/null +++ b/libexec/ulog-helper/ulog-helper.c @@ -0,0 +1,79 @@ +/*- + * Copyright (c) 2009 Ed Schouten + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include + +/* + * This setuid helper utility writes user login records to disk. + * Unprivileged processes are not capable of writing records to utmp, + * wtmp and lastlog, but we do want to allow this for pseudo-terminals. + * Because a file descriptor to a pseudo-terminal master device can only + * be obtained by processes using the pseudo-terminal, we expect such a + * descriptor on stdin. + * + * It uses the real user ID of the calling process to determine the + * username. It does allow users to log arbitrary hostnames. + */ + +int +main(int argc, char *argv[]) +{ + const char *line; + + /* Device line name. */ + if ((line = ptsname(STDIN_FILENO)) == NULL) + return (EX_USAGE); + + if ((argc == 2 || argc == 3) && strcmp(argv[1], "login") == 0) { + struct passwd *pwd; + const char *host = NULL; + + /* Username. */ + pwd = getpwuid(getuid()); + if (pwd == NULL) + return (EX_OSERR); + + /* Hostname. */ + if (argc == 3) + host = argv[2]; + + ulog_login(line, pwd->pw_name, host); + return (EX_OK); + } else if (argc == 2 && strcmp(argv[1], "logout") == 0) { + ulog_logout(line); + return (EX_OK); + } + + return (EX_USAGE); +} diff --git a/libexec/ypxfr/Makefile b/libexec/ypxfr/Makefile index 72978eb17d9..91a42eff177 100644 --- a/libexec/ypxfr/Makefile +++ b/libexec/ypxfr/Makefile @@ -12,7 +12,10 @@ GENSRCS=yp.h yp_clnt.c ypxfr_clnt.c MAN= ypxfr.8 CFLAGS+= -I. + +WARNS?= 2 WFORMAT=0 + DPADD= ${LIBRPCSVC} LDADD= -lrpcsvc diff --git a/release/Makefile b/release/Makefile index d2f0dbcba3e..53b53a7ea37 100644 --- a/release/Makefile +++ b/release/Makefile @@ -1128,36 +1128,36 @@ iso.1: .if defined(CD_BOOT) @sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \ FreeBSD_bootonly \ - ${CD}/${BUILDNAME}-${TARGET}-bootonly.iso ${CD_BOOT} + ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-bootonly.iso ${CD_BOOT} .endif @sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \ FreeBSD_Install \ - ${CD}/${BUILDNAME}-${TARGET}-disc1.iso ${CD_DISC1} \ + ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-disc1.iso ${CD_DISC1} \ ${CD_DISC1_PKGS} @sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh \ FreeBSD_Packages \ - ${CD}/${BUILDNAME}-${TARGET}-disc2.iso ${CD_DISC2} \ + ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-disc2.iso ${CD_DISC2} \ ${CD_DISC2_PKGS} .if defined(MAKE_DVD) @sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \ FreeBSD_Install \ - ${CD}/${BUILDNAME}-${TARGET}-dvd1.iso ${CD_DVD1} \ + ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-dvd1.iso ${CD_DVD1} \ ${CD_DVD1_PKGS} .endif .if !defined(NODOC) @sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh \ FreeBSD_Documentation \ - ${CD}/${BUILDNAME}-${TARGET}-disc3.iso ${CD_DOCS} \ + ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-disc3.iso ${CD_DOCS} \ ${CD_DOCS_PKGS} .endif .if defined(SEPARATE_LIVEFS) @sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \ FreeBSD_LiveFS \ - ${CD}/${BUILDNAME}-${TARGET}-livefs.iso ${CD_LIVEFS} + ${CD}/FreeBSD-${BUILDNAME}-${TARGET}-livefs.iso ${CD_LIVEFS} .endif @echo "Generating MD5 and SHA256 sums..." - @(cd ${CD} && md5 *.iso > ${BUILDNAME}-${TARGET}-iso.CHECKSUM.MD5) - @(cd ${CD} && sha256 *.iso > ${BUILDNAME}-${TARGET}-iso.CHECKSUM.SHA256) + @(cd ${CD} && md5 *.iso > FreeBSD-${BUILDNAME}-${TARGET}-iso.CHECKSUM.MD5) + @(cd ${CD} && sha256 *.iso > FreeBSD-${BUILDNAME}-${TARGET}-iso.CHECKSUM.SHA256) touch ${.TARGET} .else @echo "Do not know how to create an ISO for ${TARGET_ARCH}." @@ -1347,7 +1347,7 @@ buildBootFloppy: @mkdir ${IMAGEDIR} @echo "Setting up /boot directory for ${FSIMAGE} floppy" @mkdir -p ${IMAGEDIR}/boot -.if ${TARGET} == "i386" +.if ${TARGET_ARCH} == "i386" @${WMAKEENV} kgzip -v -l ${RD}/trees/base/usr/lib/kgzldr.o -o \ ${IMAGEDIR}/boot/loader ${BOOTDIR}/loader .else diff --git a/release/i386/fixit_crunch.conf b/release/i386/fixit_crunch.conf index 703ae847a6e..896d46304a4 100644 --- a/release/i386/fixit_crunch.conf +++ b/release/i386/fixit_crunch.conf @@ -46,4 +46,4 @@ progs chown progs chroot ln chown chgrp -libs -ledit -lgeom -lbsdxml -lsbuf -lkiconv -lkvm -lncurses -lutil +libs -ledit -lgeom -lbsdxml -lsbuf -lkiconv -lkvm -lncurses -lulog -lutil diff --git a/release/pc98/fixit-small_crunch.conf b/release/pc98/fixit-small_crunch.conf index 111f1cdcda5..b9a48cae3c9 100644 --- a/release/pc98/fixit-small_crunch.conf +++ b/release/pc98/fixit-small_crunch.conf @@ -40,4 +40,4 @@ srcdirs /usr/src/usr.sbin progs chown ln chown chgrp -libs -lgeom -lbsdxml -lsbuf -lkiconv -lkvm -lncurses -lutil +libs -lgeom -lbsdxml -lsbuf -lkiconv -lkvm -lncurses -lulog -lutil diff --git a/release/pc98/fixit_crunch.conf b/release/pc98/fixit_crunch.conf index c03db1c1878..e1566023fb4 100644 --- a/release/pc98/fixit_crunch.conf +++ b/release/pc98/fixit_crunch.conf @@ -44,4 +44,4 @@ srcdirs /usr/src/usr.sbin progs chown ln chown chgrp -libs -ledit -lgeom -lbsdxml -lsbuf -lkiconv -lkvm -lncurses -lutil +libs -ledit -lgeom -lbsdxml -lsbuf -lkiconv -lkvm -lncurses -lulog -lutil diff --git a/release/picobsd/bridge/PICOBSD b/release/picobsd/bridge/PICOBSD index 6aeac14da11..47f88963265 100644 --- a/release/picobsd/bridge/PICOBSD +++ b/release/picobsd/bridge/PICOBSD @@ -46,6 +46,8 @@ options IPDIVERT # divert (for natd) # Support for bridging and bandwidth limiting options DUMMYNET device if_bridge +# Running with less than 1000 seems to give poor timing on +# qemu, so we set HZ explicitly. options HZ=1000 device random # used by ssh diff --git a/release/picobsd/bridge/crunch.conf b/release/picobsd/bridge/crunch.conf index aa3f45b5e47..fa24f10f766 100644 --- a/release/picobsd/bridge/crunch.conf +++ b/release/picobsd/bridge/crunch.conf @@ -98,13 +98,15 @@ progs cat tail tee progs test ln test [ +progs less +ln less more progs mount progs minigzip ln minigzip gzip progs kill progs df progs ps -progs ns # this is the +progs ns # this is the picobsd version ln ns netstat progs vm progs hostname @@ -179,3 +181,4 @@ libs_so -lz libs_so -lbsdxml libs_so -lsbuf libs_so -ljail # used by ifconfig +libs_so -lulog # used by ifconfig diff --git a/release/picobsd/build/mfs.mtree b/release/picobsd/build/mfs.mtree index 5c8e70ce6b2..9d6748adf52 100644 --- a/release/picobsd/build/mfs.mtree +++ b/release/picobsd/build/mfs.mtree @@ -58,6 +58,8 @@ var db .. + empty + .. run .. spool diff --git a/release/picobsd/build/picobsd b/release/picobsd/build/picobsd index 9bc08df947f..153f47ccb86 100755 --- a/release/picobsd/build/picobsd +++ b/release/picobsd/build/picobsd @@ -167,7 +167,7 @@ create_includes_and_libraries2() { # opt_dir opt_target local no log "create_includes_and_libraries2() for ${SRC}" if [ ${OSVERSION} -ge 600000 ] ; then - no="-DNO_CLEAN -DNO_PROFILE -DNO_GAMES -DNO_LIBC_R" + no="-DNO_CLEAN -DNO_PROFILE -DNO_GAMES -DNO_LIBC_R" # WITHOUT_CDDL=1" else no="-DNOCLEAN -DNOPROFILE -DNOGAMES -DNOLIBC_R" fi @@ -568,10 +568,17 @@ do_links() { # rootdir varname # find_progs is a helper function to locate the named programs # or libraries in ${o_objdir} or ${_SHLIBDIRPREFIX}, # and return the full pathnames. -# Sets ${u_progs} to the list of programs, and ${u_libs} +# Called as "find_progs [-L libpath] [-P binpath] prog1 prog2 ... " +# On return it sets ${u_progs} to the list of programs, and ${u_libs} # to the list of shared libraries used. +# +# '-L path' can be used to specify a search path for libraries +# (which searches in $path/lib:$path/usr/lib:$path/usr/local/lib +# '-P binpath' can be used to specify a search path for programs +# (which searches in a lot of places in the subtree) +# -L must be the first, followed by -P # -# You can use it e.g. in a local configuration file by writing +# You can use it e.g. in a local confign file by writing # # do_copyfiles_user() { # local dst=$1 @@ -580,40 +587,61 @@ do_links() { # rootdir varname # cp -p ${u_libs} ${dst}/lib # mkdir -p ${dst}/libexec # find_progs ld-elf.so.1 -# cp -p ${u_progs} ${dst}/libexec +# cp -p ${u_progs} ${dst}/libexec # ignore errors # } find_progs() { # programs local i + local oo=${o_objdir:-${_SHLIBDIRPREFIX}} # default objdir + local lp=$oo/lib # default lib.prefix + local o="" # additional objdir + if [ x"$1" = "x-L" -a -d "$2" ] ; then # set lib search path + o=$2; shift; shift + lp="$lp:$o/lib:$o/usr/lib:$o/usr/local/lib" + o="-P $o" + fi + u_libs="" u_progs="`find_progs_helper $*`" - local o=${o_objdir:-${_SHLIBDIRPREFIX}} + log "looking for libs for <$u_progs> in $lp" [ -z "${u_progs}" ] && return 1 # not found, error - i="`ldd ${u_progs} | grep -v '^/' | awk '{print $1}' | sort | uniq`" - u_libs="`find_progs_helper $i`" + i="`( LD_LIBRARY_PATH=$lp ldd ${u_progs} ) | \ + grep -v '^/' | awk '{print $1}' | sort | uniq`" + u_libs="`find_progs_helper $o $i`" return 0 } find_progs_helper() { # programs + local dir=${o_objdir:-${_SHLIBDIRPREFIX}/..} + local ldir="" + if [ x"$1" = "x-P" -a -d "$2" ] ; then # set path + ldir=$2; shift; shift + fi local progs="$*" - local i o places names - local subdirs="bin sbin usr.bin usr.sbin libexec lib \ + local subdirs=". local/bin local/sbin local/lib local/libexec \ + bin sbin usr.bin usr.sbin libexec lib \ gnu/usr.bin gnu/lib \ secure/usr.bin secure/usr.sbin secure/libexec secure/lib" - names="" # files to search - o="" + local names="" # files to search + local o="" + local i for i in $progs ; do - # plain programs come out verbatim + # full pathnames are just listed [ -f "$i" ] && echo $i && continue names="${names} ${o} -name $i" o="-o" done [ -z "${names}" ] && return 0 - places="" # places to search - o=${o_objdir:-${_SHLIBDIRPREFIX}/..} + local places="" # places to search for i in $subdirs ; do - [ -d "${o}/${i}" ] && places="${places} ${o}/${i}" + [ -d "${dir}/${i}" ] && places="${places} ${dir}/${i}" done - find ${places} -type f \( ${names} \) + if [ -n "${ldir}" ] ; then + for i in $subdirs ; do + [ -d "${ldir}/${i}" ] && places="${places} ${ldir}/${i}" + done + fi + # use maxdepth 3 because some libs are way down + find ${places} -maxdepth 3 -type f \( ${names} \) } # Populate the memory filesystem with binaries and non-variable @@ -719,8 +747,7 @@ populate_mfs_tree() { (cd ${dst}; chown -R root . ) fi - # If we are building a shared 'crunch', take the libraries - # and the dynamic loader as well + log "for a shared 'crunch' take libraries and dynamic loader as well" find_progs ${dst}/stand/crunch if [ -n "${u_libs}" ] ; then mkdir -p ${dst}/lib && cp -p ${u_libs} ${dst}/lib diff --git a/release/picobsd/floppy.tree/etc/master.passwd b/release/picobsd/floppy.tree/etc/master.passwd index e9bb1cee3bd..e649b84d847 100644 --- a/release/picobsd/floppy.tree/etc/master.passwd +++ b/release/picobsd/floppy.tree/etc/master.passwd @@ -1,3 +1,4 @@ +# $FreeBSD$ root:$1$xOOaGnKU$U9QdsCI40XXcCUMBN.7Az.:0:0::0:0:Charlie &:/root:/bin/sh toor:*:0:0::0:0:Bourne-again Superuser:/root: daemon:*:1:1::0:0:Owner of many system processes:/root:/nonexistent @@ -5,4 +6,5 @@ operator:*:2:20::0:0:System &:/usr/guest/operator:/bin/csh bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/nonexistent tty:*:4:65533::0:0:Tty Sandbox:/:/nonexistent nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/nonexistent +_dhcp:*:65:65::0:0:dhcp programs:/var/empty:/usr/sbin/nologin user:*:1002:1002:Sample User:0:0:user:/home/user:/bin/sh diff --git a/release/picobsd/floppy.tree/etc/ttys b/release/picobsd/floppy.tree/etc/ttys index dcfac7a9c9b..09f42fb2ef8 100644 --- a/release/picobsd/floppy.tree/etc/ttys +++ b/release/picobsd/floppy.tree/etc/ttys @@ -8,19 +8,19 @@ # This entry needed for asking password when init goes to single-user mode # If you want to be asked for password, change "secure" to "insecure" here #console none unknown off secure -vga none cons25 off secure +vga none xterm off secure # -ttyv0 "/usr/libexec/getty Pc" cons25 on secure +ttyv0 "/usr/libexec/getty Pc" xterm on secure # Virtual terminals -ttyv1 "/usr/libexec/getty Pc" cons25 on secure -ttyv2 "/usr/libexec/getty Pc" cons25 on secure -ttyv3 "/usr/libexec/getty Pc" cons25 on secure -ttyv4 "/usr/libexec/getty Pc" cons25 on secure -ttyv5 "/usr/libexec/getty Pc" cons25 on secure -ttyv6 "/usr/libexec/getty Pc" cons25 on secure -ttyv7 "/usr/libexec/getty Pc" cons25 on secure -#ttyv8 "/usr/libexec/getty Pc" cons25 on secure -#ttyv9 "/usr/libexec/getty Pc" cons25 on secure +ttyv1 "/usr/libexec/getty Pc" xterm on secure +ttyv2 "/usr/libexec/getty Pc" xterm on secure +ttyv3 "/usr/libexec/getty Pc" xterm on secure +ttyv4 "/usr/libexec/getty Pc" xterm on secure +ttyv5 "/usr/libexec/getty Pc" xterm on secure +ttyv6 "/usr/libexec/getty Pc" xterm on secure +ttyv7 "/usr/libexec/getty Pc" xterm on secure +#ttyv8 "/usr/libexec/getty Pc" xterm on secure +#ttyv9 "/usr/libexec/getty Pc" xterm on secure # Pseudo terminals ttyp0 none network secure ttyp1 none network secure diff --git a/release/picobsd/floppy.tree/sbin/dhclient-script b/release/picobsd/floppy.tree/sbin/dhclient-script new file mode 100755 index 00000000000..c457bf46530 --- /dev/null +++ b/release/picobsd/floppy.tree/sbin/dhclient-script @@ -0,0 +1,384 @@ +#!/bin/sh +# +# $OpenBSD: dhclient-script,v 1.6 2004/05/06 18:22:41 claudio Exp $ +# $FreeBSD$ +# +# Copyright (c) 2003 Kenneth R Westerback +# +# Permission to use, copy, modify, and distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# +# + +ARP=/usr/sbin/arp +HOSTNAME=/bin/hostname +IFCONFIG='/sbin/ifconfig -n' + +LOCALHOST=127.0.0.1 + +if [ -x /usr/bin/logger ]; then + LOGGER="/usr/bin/logger -s -p user.notice -t dhclient" +else + LOGGER=echo +fi + +# +# Helper functions that implement common actions. +# + +check_hostname() { + current_hostname=`$HOSTNAME` + if [ -z "$current_hostname" ]; then + $LOGGER "New Hostname ($interface): $new_host_name" + $HOSTNAME $new_host_name + elif [ "$current_hostname" = "$old_host_name" -a \ + "$new_host_name" != "$old_host_name" ]; then + $LOGGER "New Hostname ($interface): $new_host_name" + $HOSTNAME $new_host_name + fi +} + +arp_flush() { + arp -an -i $interface | \ + sed -n -e 's/^.*(\(.*\)) at .*$/arp -d \1/p' | \ + sh >/dev/null 2>&1 +} + +delete_old_address() { + eval "$IFCONFIG $interface inet -alias $old_ip_address $medium" +} + +add_new_address() { + eval "$IFCONFIG $interface \ + inet $new_ip_address \ + netmask $new_subnet_mask \ + broadcast $new_broadcast_address \ + $medium" + + $LOGGER "New IP Address ($interface): $new_ip_address" + $LOGGER "New Subnet Mask ($interface): $new_subnet_mask" + $LOGGER "New Broadcast Address ($interface): $new_broadcast_address" + $LOGGER "New Routers ($interface): $new_routers" +} + +delete_old_alias() { + if [ -n "$alias_ip_address" ]; then + $IFCONFIG $interface inet -alias $alias_ip_address > /dev/null 2>&1 + #route delete $alias_ip_address $LOCALHOST > /dev/null 2>&1 + fi +} + +add_new_alias() { + if [ -n "$alias_ip_address" ]; then + $IFCONFIG $interface inet alias $alias_ip_address netmask \ + $alias_subnet_mask + #route add $alias_ip_address $LOCALHOST + fi +} + +fill_classless_routes() { + set $1 + while [ $# -ge 5 ]; do + if [ $1 -eq 0 ]; then + route="default" + elif [ $1 -le 8 ]; then + route="$2.0.0.0/$1" + shift + elif [ $1 -le 16 ]; then + route="$2.$3.0.0/$1" + shift; shift + elif [ $1 -le 24 ]; then + route="$2.$3.$4.0/$1" + shift; shift; shift + else + route="$2.$3.$4.$5/$1" + shift; shift; shift; shift + fi + shift + router="$1.$2.$3.$4" + classless_routes="$classless_routes $route $router" + shift; shift; shift; shift + done +} + +delete_old_routes() { + #route delete "$old_ip_address" $LOCALHOST >/dev/null 2>&1 + if [ -n "$old_classless_routes" ]; then + fill_classless_routes "$old_classless_routes" + set $classless_routes + while [ $# -gt 1 ]; do + route delete "$1" "$2" + shift; shift + done + return 0; + fi + + # If we supported multiple default routes, we'd be removing each + # one here. We don't so just delete the default route if it's + # through our interface. + if is_default_interface; then + route delete default >/dev/null 2>&1 + fi + + if [ -n "$old_static_routes" ]; then + set $old_static_routes + while [ $# -gt 1 ]; do + route delete "$1" "$2" + shift; shift + done + fi + + arp_flush +} + +add_new_routes() { + #route add $new_ip_address $LOCALHOST >/dev/null 2>&1 + + # RFC 3442: If the DHCP server returns both a Classless Static + # Routes option and a Router option, the DHCP client MUST ignore + # the Router option. + # + # DHCP clients that support this option (Classless Static Routes) + # MUST NOT install the routes specified in the Static Routes + # option (option code 33) if both a Static Routes option and the + # Classless Static Routes option are provided. + + if [ -n "$new_classless_routes" ]; then + fill_classless_routes "$new_classless_routes" + $LOGGER "New Classless Static Routes ($interface): $classless_routes" + set $classless_routes + while [ $# -gt 1 ]; do + if [ "0.0.0.0" = "$2" ]; then + route add "$1" -iface "$interface" + else + route add "$1" "$2" + fi + shift; shift + done + return + fi + + for router in $new_routers; do + if is_default_interface; then + + if [ "$new_ip_address" = "$router" ]; then + route add default -iface $router >/dev/null 2>&1 + else + route add default $router >/dev/null 2>&1 + fi + fi + # 2nd and subsequent default routers error out, so explicitly + # stop processing the list after the first one. + break + done + + if [ -n "$new_static_routes" ]; then + $LOGGER "New Static Routes ($interface): $new_static_routes" + set $new_static_routes + while [ $# -gt 1 ]; do + route add $1 $2 + shift; shift + done + fi +} + +add_new_resolv_conf() { + # XXX Old code did not create/update resolv.conf unless both + # $new_domain_name and $new_domain_name_servers were provided. PR + # #3135 reported some ISP's only provide $new_domain_name_servers and + # thus broke the script. This code creates the resolv.conf if either + # are provided. + + local tmpres=/var/run/resolv.conf.${interface} + rm -f $tmpres + + if [ -n "$new_domain_name" ]; then + echo "search $new_domain_name" >>$tmpres + fi + + if [ -n "$new_domain_name_servers" ]; then + for nameserver in $new_domain_name_servers; do + echo "nameserver $nameserver" >>$tmpres + done + fi + + if [ -f $tmpres ]; then + if [ -f /etc/resolv.conf.tail ]; then + cat /etc/resolv.conf.tail >>$tmpres + fi + + # When resolv.conf is not changed actually, we don't + # need to update it. + # If /usr is not mounted yet, we cannot use cmp, then + # the following test fails. In such case, we simply + # ignore an error and do update resolv.conf. + if cmp -s $tmpres /etc/resolv.conf; then + rm -f $tmpres + return 0 + fi 2>/dev/null + + # In case (e.g. during OpenBSD installs) /etc/resolv.conf + # is a symbolic link, take care to preserve the link and write + # the new data in the correct location. + + if [ -f /etc/resolv.conf ]; then + cat /etc/resolv.conf > /etc/resolv.conf.save + fi + cat $tmpres > /etc/resolv.conf + rm -f $tmpres + + # Try to ensure correct ownership and permissions. + chown -RL root:wheel /etc/resolv.conf + chmod -RL 644 /etc/resolv.conf + + return 0 + fi + + return 1 +} + +# Must be used on exit. Invokes the local dhcp client exit hooks, if any. +exit_with_hooks() { + exit_status=$1 + if [ -f /etc/dhclient-exit-hooks ]; then + . /etc/dhclient-exit-hooks + fi + # probably should do something with exit status of the local script + exit $exit_status +} + +# Get the interface with the current ipv4 default route on it using only +# commands that are available prior to /usr being mounted. +is_default_interface() +{ + routeget="`route -n get -inet default`" + oldifs="$IFS" + IFS=" +" + defif= + for line in $routeget ; do + case $line in + *interface:*) + defif=${line##*: } + ;; + esac + done + IFS=${oldifs} + + if [ -z "$defif" -o "$defif" = "$interface" ]; then + return 0 + else + return 1 + fi +} + +# +# Start of active code. +# + +# Invoke the local dhcp client enter hooks, if they exist. +if [ -f /etc/dhclient-enter-hooks ]; then + exit_status=0 + . /etc/dhclient-enter-hooks + # allow the local script to abort processing of this state + # local script must set exit_status variable to nonzero. + if [ $exit_status -ne 0 ]; then + exit $exit_status + fi +fi + +case $reason in +MEDIUM) + eval "$IFCONFIG $interface $medium" + eval "$IFCONFIG $interface inet -alias 0.0.0.0 $medium" >/dev/null 2>&1 + sleep 1 + ;; + +PREINIT) + delete_old_alias + $IFCONFIG $interface inet alias 0.0.0.0 netmask 0.0.0.0 broadcast 255.255.255.255 up + ;; + +ARPCHECK|ARPSEND) + ;; + +BOUND|RENEW|REBIND|REBOOT) + check_hostname + if [ -n "$old_ip_address" ]; then + if [ "$old_ip_address" != "$alias_ip_address" ]; then + delete_old_alias + fi + if [ "$old_ip_address" != "$new_ip_address" ]; then + delete_old_address + delete_old_routes + fi + fi + if [ "$reason" = BOUND ] || \ + [ "$reason" = REBOOT ] || \ + [ -z "$old_ip_address" ] || \ + [ "$old_ip_address" != "$new_ip_address" ]; then + add_new_address + add_new_routes + fi + if [ "$new_ip_address" != "$alias_ip_address" ]; then + add_new_alias + fi + if is_default_interface; then + add_new_resolv_conf + fi + ;; + +EXPIRE|FAIL) + delete_old_alias + if [ -n "$old_ip_address" ]; then + delete_old_address + delete_old_routes + fi + if [ -x $ARP ]; then + $ARP -d -a -i $interface + fi + # XXX Why add alias we just deleted above? + add_new_alias + if is_default_interface; then + if [ -f /etc/resolv.conf.save ]; then + cat /etc/resolv.conf.save > /etc/resolv.conf + fi + fi + ;; + +TIMEOUT) + delete_old_alias + add_new_address + sleep 1 + if [ -n "$new_routers" ]; then + $LOGGER "New Routers ($interface): $new_routers" + set "$new_routers" + if ping -q -c 1 -t 1 "$1"; then + if [ "$new_ip_address" != "$alias_ip_address" ]; then + add_new_alias + fi + add_new_routes + if ! is_default_interface; then + exit_with_hooks 0 + fi + if add_new_resolv_conf; then + exit_with_hooks 0 + fi + fi + fi + eval "$IFCONFIG $interface inet -alias $new_ip_address $medium" + delete_old_routes + exit_with_hooks 1 + ;; +esac + +exit_with_hooks 0 diff --git a/release/picobsd/qemu/PICOBSD b/release/picobsd/qemu/PICOBSD new file mode 100644 index 00000000000..837e902d797 --- /dev/null +++ b/release/picobsd/qemu/PICOBSD @@ -0,0 +1,122 @@ +# +# $FreeBSD$ +# A configuration file to run tests on qemu. +# We disable SMP because it does not work well with qemu, and set HZ=1000 +# to avoid it being overridden. +# +# Line starting with #PicoBSD contains PicoBSD build parameters +#marker def_sz init MFS_inodes floppy_inodes +#PicoBSD 18000 init 8192 32768 +options MD_ROOT_SIZE=18000 # same as def_sz + +hints "PICOBSD.hints" + +# values accessible through getenv() +# env "PICOBSD.env" + +#cpu I486_CPU +cpu I586_CPU +cpu I686_CPU +ident PICOBSD + +#options SMP +#device apic + +options SCHED_4BSD # mandatory to have one scheduler +#options MATH_EMULATE #Support for x87 emulation +options INET #InterNETworking +#options INET6 +options FFS #Berkeley Fast Filesystem +#options BOOTP #Use BOOTP to obtain IP address/hostname +options MD_ROOT #MD is a potential root device + +#options NFS #Network Filesystem +#options NFS_ROOT #NFS usable as root device, NFS required + +#options MSDOSFS #MSDOS Filesystem +#options CD9660 #ISO 9660 Filesystem +#options CD9660_ROOT #CD-ROM usable as root, CD9660 required +#options DEVFS #Device Filesystem +#options PROCFS #Process filesystem +options COMPAT_43 #Compatible with BSD 4.3 [KEEP THIS!] + +options KDB +options DDB + +options IPFIREWALL +options IPFIREWALL_DEFAULT_TO_ACCEPT +options IPDIVERT # divert (for natd) + +# Support for bridging and bandwidth limiting +options DUMMYNET +device if_bridge +# Running with less than 1000 seems to give poor timing on +# qemu, so we set HZ explicitly. +options HZ=1000 + +device random # used by ssh +device pci + +# Floppy drives +device fdc + +# ATA and ATAPI devices +#device ata +#device atadisk # ATA disk drives +#device atapicd # ATAPI CDROM drives +#options ATA_STATIC_ID #Static device numbering + +# atkbdc0 controls both the keyboard and the PS/2 mouse +device atkbdc # At keyboard controller +device atkbd +#device psm # do we need the mouse ?? + +device vga # VGA screen + +# syscons is the default console driver, resembling an SCO console +device sc + +# Serial (COM) ports +device uart + +# Audio support +#device pcm + +# PCCARD (PCMCIA) support +#device card # pccard bus +#device pcic # PCMCIA bridge + +# Parallel port +#device ppc +#device ppbus # Parallel port bus (required) +#device lpt # Printer +#device plip # TCP/IP over parallel +#device ppi # Parallel port interface device + +# +# The following Ethernet NICs are all PCI devices. +# +device miibus +device fxp # Intel EtherExpress PRO/100B (82557, 82558) +device nfe # nVidia nForce MCP on-board Ethernet +#device xl # 3Com +device rl # RealTek 8129/8139 +device re # RealTek 8139C+/8169/8169S/8110S +device sis # National/SiS +device dc # DEC/Intel 21143 and various workalikes +device ed + +device loop # Network loopback +device ether # Ethernet support +device tun # Packet tunnel. +device pty # Pseudo-ttys (telnet etc) +device md # Memory "disks" +#device gif 4 # IPv6 and IPv4 tunneling +#device faith 1 # IPv6-to-IPv4 relaying (translation) +device tap + +#options DEVICE_POLLING + +# The `bpf' device enables the Berkeley Packet Filter. +# Be aware of the administrative consequences of enabling this! +device bpf # Berkeley packet filter diff --git a/release/picobsd/qemu/PICOBSD.hints b/release/picobsd/qemu/PICOBSD.hints new file mode 100644 index 00000000000..4f1b40380e5 --- /dev/null +++ b/release/picobsd/qemu/PICOBSD.hints @@ -0,0 +1,39 @@ +# $FreeBSD$ +hint.fdc.0.at="isa" +hint.fdc.0.port="0x3F0" +hint.fdc.0.irq="6" +hint.fdc.0.drq="2" +hint.fd.0.at="fdc0" +hint.fd.0.drive="0" +hint.ata.0.at="isa" +hint.ata.0.port="0x1F0" +hint.ata.0.irq="14" +hint.ata.1.at="isa" +hint.ata.1.port="0x170" +hint.ata.1.irq="15" +hint.atkbdc.0.at="isa" +hint.atkbdc.0.port="0x060" +hint.atkbd.0.at="atkbdc" +hint.atkbd.0.irq="1" +hint.psm.0.at="atkbdc" +hint.psm.0.irq="12" +hint.vga.0.at="isa" +hint.sc.0.at="isa" +hint.npx.0.at="nexus" +hint.npx.0.port="0x0F0" +hint.npx.0.irq="13" +hint.uart.0.at="isa" +hint.uart.0.port="0x3F8" +hint.uart.0.flags="0x10" +hint.uart.0.irq="4" +hint.uart.1.at="isa" +hint.uart.1.port="0x2F8" +hint.uart.1.irq="3" +hint.ed.0.at="isa" +hint.ed.0.port="0x280" +hint.ed.0.irq="5" +hint.ed.0.maddr="0xd8000" +hint.ed.1.at="isa" +hint.ed.1.port="0x300" +hint.ed.1.irq="5" +hint.ed.1.maddr="0xd0000" diff --git a/release/picobsd/qemu/config b/release/picobsd/qemu/config new file mode 100644 index 00000000000..88f1954d7ab --- /dev/null +++ b/release/picobsd/qemu/config @@ -0,0 +1,26 @@ +# configuration for picobsd build script. +# $FreeBSD$ +# it should only contain variable definitions -- it is sourced +# by the shell much like rc.conf* files + +fd_size="8192" + +# To copy individual files you can use the function do_copyfiles_user +# as below (find_progs locates the programs and their libraries, +# then you manually copy them. +#copy_files=" +#" +do_copyfiles_user() { + local dst=$1 # the destination root + log "--- put the libraries in /usr/lib to avoid conflicts" + mkdir -p ${dst}/usr/lib + log "-- import dropbear from its build directory --" + find_progs -L / -P /usr/ports/security/dropbear/work/dropbear-0.52 \ + dbclient dropbear + cp -p ${u_progs} ${dst}/bin + cp -p ${u_libs} ${dst}/usr/lib + log "--- also import ssh, scp and sshd ---" + find_progs -L / /usr/bin/ssh /usr/bin/scp /usr/sbin/sshd + cp -p ${u_progs} ${dst}/bin + cp -p ${u_libs} ${dst}/usr/lib +} diff --git a/release/picobsd/qemu/crunch.conf b/release/picobsd/qemu/crunch.conf new file mode 100644 index 00000000000..9e72cb14ed2 --- /dev/null +++ b/release/picobsd/qemu/crunch.conf @@ -0,0 +1,192 @@ +# +# $FreeBSD$ +# +# Configuration file for "qemu" images.. +# +# Depending on your needs, you will almost surely need to +# add/remove/change programs according to your needs. +# Remember that some programs require matching kernel options to +# enable device drivers etc. +# +# To figure out how much space is used by each program, do +# +# size build_dir-bridge/crunch/*lo +# +# Remember that programs require libraries, which add up to the +# total size. The final binary is build_dir-bridge/mfs.tree/stand/crunch +# and you can check which libraries it uses with +# +# ldd build_dir-bridge/mfs.tree/stand/crunch + +# crunchgen configuration to build the crunched binary, see "man crunchgen" +# We need to specify generic build options, the places where to look +# for sources, and the list of program and libraries we want to put +# in the crunched binary. +# +# NOTE: the string "/usr/src" below will be automatically replaced with +# the path set in the 'build' script. + +# Default build options. Basically tell the Makefiles +# that to use the most compact possible version of the code. + +buildopts -DNO_PAM -DRELEASE_CRUNCH -DPPP_NO_NETGRAPH +buildopts -DTRACEROUTE_NO_IPSEC -DNO_INET6 +buildopts -DWITHOUT_IPX + +# Directories where to look for sources of various binaries. +# @__CWD__@ is a magic keyword in the picobsd's (Makefile.conf) +# which is replaced with the directory with the picobsd configuration +# corresponding to your image. This way you can have custom sources +# in that directory overriding system programs. + +srcdirs @__CWD__@/src + +# Some programs are especially written for PicoBSD and reside in +# release/picobsd/tinyware. +# Put this entry near the head of the list to override standard binaries. + +srcdirs /usr/src/release/picobsd/tinyware + +# Other standard locations for sources. +# If a program uses its own source directory, add + +srcdirs /usr/src/bin +srcdirs /usr/src/sbin/i386 +srcdirs /usr/src/sbin +srcdirs /usr/src/usr.bin +srcdirs /usr/src/gnu/usr.bin +srcdirs /usr/src/usr.sbin +srcdirs /usr/src/libexec + +# For programs that reside in different places, the best option +# is to use the command "special XXX srcdir YYY" where XXX is the +# program name and YYY is the directory path. +# "special XXX ..." can be used to specify more options, see again +# the crunchgen manpage. + +#--- Basic configuraton +# init is always necessary (unless you have a replacement, oinit) +progs init + +# fsck is almost always necessary, unless you have everything on the +# image and use 'tar' or something similar to read/write raw blocks +# from the floppy. + +progs fsck + +# ifconfig is needed if you want to configure interfaces. +progs ifconfig + +# You will also need a shell and a bunch of utilities. +# The standard shell is not that large, but you need many +# external programs. In fact most of them do not take much space +# as they merely issue a system call, and print the result. +# For a more compact version of shell and utilities, you could +# try busybox, however most system management commands in busybox +# will not work as they use linux-specific interfaces. + +progs sh +ln sh -sh + +# the small utilities +progs echo +progs pwd mkdir rmdir +progs chmod chown +ln chown chgrp +progs mv ln cp rm ls +progs cat tail tee +progs test +ln test [ + +progs less +ln less more +progs mount +progs minigzip +ln minigzip gzip +progs kill +progs df +progs ps +progs ns # this is the picobsd version +ln ns netstat +progs vm +progs hostname +progs login +progs getty +progs stty +progs w +progs msg +ln msg dmesg +progs reboot + +progs sysctl +progs swapon +progs pwd_mkdb +progs umount +progs du +progs passwd + +progs route + +# If you want to run natd, remember the alias library +progs natd +libs_so -lalias # natd +progs tcpdump +special tcpdump srcdir /usr/src/usr.sbin/tcpdump/tcpdump +libs_so -lpcap # used by tcpdump + +# ppp is rather large. Note that as of Jan.01, RELEASE_CRUNCH +# makes ppp not use libalias, so you cannot have aliasing. +#progs ppp + +# You need an editor. ee is relatively small, though there are +# smaller ones. vi is much larger. +# The editor also usually need a curses library. +progs ee + +progs arp + +# these require libgeom +# progs bsdlabel fdisk mdconfig + +progs kldload kldunload kldstat +progs kldxref +progs grep +libs_so -lgnuregex -lbz2 +# dhclient-script requires 'sed' +progs dhclient +progs sed +progs date +progs time +progs ping +#progs routed +progs ipfw +progs traceroute +progs mdmfs +ln mdmfs mount_mfs +# Various filesystem support -- remember to enable the kernel parts +# progs mount_msdosfs +progs mount_nfs +# progs mount_cd9660 +ln mount_nfs nfs +ln mount_cd9660 cd9660 +#progs newfs +#ln newfs mount_mfs +# ln mount_msdosfs msdos + +# For a small ssh client/server use dropbear + +# Now the libraries +libs_so -lc # the C library +libs_so -ll # used by sh (really ?) +libs_so -lufs # used by mount +### ee uses ncurses but as a dependency +#libs_so -lncurses +libs_so -lm +libs_so -ledit -lutil +libs_so -lcrypt +libs_so -lkvm +libs_so -lz +libs_so -lbsdxml +libs_so -lsbuf +libs_so -ljail # used by ifconfig +libs_so -lulog diff --git a/release/picobsd/qemu/floppy.tree.exclude b/release/picobsd/qemu/floppy.tree.exclude new file mode 100644 index 00000000000..adfc6cc7542 --- /dev/null +++ b/release/picobsd/qemu/floppy.tree.exclude @@ -0,0 +1,2 @@ +etc/snmpd.conf +etc/ppp diff --git a/release/picobsd/tinyware/oinit/oinit.c b/release/picobsd/tinyware/oinit/oinit.c index b02434a7132..7715f3e67a5 100644 --- a/release/picobsd/tinyware/oinit/oinit.c +++ b/release/picobsd/tinyware/oinit/oinit.c @@ -116,7 +116,7 @@ struct command bltins[]={ {"cd","Change working directory","cd [dir]","cd /etc",cd}, {"pwd","Print current directory","pwd","pwd",pwd}, {"exit","Exit from shell()","exit","exit",xit}, - {"set","Set environment variable","set [VAR=value]","set TERM=cons25",set}, + {"set","Set environment variable","set [VAR=value]","set TERM=xterm",set}, {"unset","Unset environment variable","unset VAR","unset EDITOR",unset}, {"echo","Echo arguments on stdout","echo arg1 arg2 ...","echo Hello World!",echo}, {"env","Print all environment variables","env","env",env}, @@ -572,7 +572,7 @@ start_session(int vty, int argc, char **argv) if(fd>2) close(fd); login_tty(fd); setpgid(0,getpid()); - putenv("TERM=cons25"); + putenv("TERM=xterm"); putenv("HOME=/"); putenv("PATH=/stand:/bin:/usr/bin:/sbin:."); signal(SIGHUP,SIG_DFL); diff --git a/rescue/rescue/Makefile b/rescue/rescue/Makefile index afb15b09404..c5edaf808ec 100644 --- a/rescue/rescue/Makefile +++ b/rescue/rescue/Makefile @@ -72,7 +72,7 @@ CRUNCH_SRCDIRS+= bin CRUNCH_PROGS_bin= cat chflags chio chmod cp date dd df echo \ ed expr getfacl hostname kenv kill ln ls mkdir mv \ pkill ps pwd realpath rm rmdir setfacl sh stty sync test -CRUNCH_LIBS+= -lcrypt -ledit -lkvm -ll -ltermcap -lutil +CRUNCH_LIBS+= -lcrypt -ledit -lkvm -ll -ltermcap -lulog -lutil # Additional options for specific programs CRUNCH_ALIAS_test= [ diff --git a/sbin/atacontrol/atacontrol.c b/sbin/atacontrol/atacontrol.c index f68596c9981..29599eb3dc4 100644 --- a/sbin/atacontrol/atacontrol.c +++ b/sbin/atacontrol/atacontrol.c @@ -42,28 +42,40 @@ static const char * mode2str(int mode) { - switch (mode) { + switch (mode & 0xff) { case ATA_PIO: return "BIOSPIO"; case ATA_PIO0: return "PIO0"; case ATA_PIO1: return "PIO1"; case ATA_PIO2: return "PIO2"; case ATA_PIO3: return "PIO3"; case ATA_PIO4: return "PIO4"; + case ATA_WDMA0: return "WDMA0"; + case ATA_WDMA1: return "WDMA1"; case ATA_WDMA2: return "WDMA2"; + case ATA_UDMA0: return "UDMA0"; + case ATA_UDMA1: return "UDMA1"; case ATA_UDMA2: return "UDMA33"; + case ATA_UDMA3: return "UDMA44"; case ATA_UDMA4: return "UDMA66"; case ATA_UDMA5: return "UDMA100"; case ATA_UDMA6: return "UDMA133"; - case ATA_SA150: return "SATA150"; - case ATA_SA300: return "SATA300"; - case ATA_USB: return "USB"; - case ATA_USB1: return "USB1"; - case ATA_USB2: return "USB2"; case ATA_DMA: return "BIOSDMA"; default: return "???"; } } +static const char * +satarev2str(int mode) +{ + switch ((mode & 0xff00) >> 8) { + case 0: return ""; + case 1: return "SATA 1.5Gb/s"; + case 2: return "SATA 3Gb/s"; + case 3: return "SATA 6Gb/s"; + default: return "???"; + } +} + static int str2mode(char *str) { @@ -73,20 +85,23 @@ str2mode(char *str) if (!strcasecmp(str, "PIO2")) return ATA_PIO2; if (!strcasecmp(str, "PIO3")) return ATA_PIO3; if (!strcasecmp(str, "PIO4")) return ATA_PIO4; + if (!strcasecmp(str, "WDMA0")) return ATA_WDMA0; + if (!strcasecmp(str, "WDMA1")) return ATA_WDMA1; if (!strcasecmp(str, "WDMA2")) return ATA_WDMA2; + if (!strcasecmp(str, "UDMA0")) return ATA_UDMA0; + if (!strcasecmp(str, "UDMA16")) return ATA_UDMA0; + if (!strcasecmp(str, "UDMA1")) return ATA_UDMA1; + if (!strcasecmp(str, "UDMA25")) return ATA_UDMA1; if (!strcasecmp(str, "UDMA2")) return ATA_UDMA2; if (!strcasecmp(str, "UDMA33")) return ATA_UDMA2; + if (!strcasecmp(str, "UDMA3")) return ATA_UDMA3; + if (!strcasecmp(str, "UDMA44")) return ATA_UDMA3; if (!strcasecmp(str, "UDMA4")) return ATA_UDMA4; if (!strcasecmp(str, "UDMA66")) return ATA_UDMA4; if (!strcasecmp(str, "UDMA5")) return ATA_UDMA5; if (!strcasecmp(str, "UDMA100")) return ATA_UDMA5; if (!strcasecmp(str, "UDMA6")) return ATA_UDMA6; if (!strcasecmp(str, "UDMA133")) return ATA_UDMA6; - if (!strcasecmp(str, "SATA150")) return ATA_SA150; - if (!strcasecmp(str, "SATA300")) return ATA_SA300; - if (!strcasecmp(str, "USB")) return ATA_USB; - if (!strcasecmp(str, "USB1")) return ATA_USB1; - if (!strcasecmp(str, "USB2")) return ATA_USB2; if (!strcasecmp(str, "BIOSDMA")) return ATA_DMA; return -1; } @@ -377,7 +392,8 @@ main(int argc, char **argv) if (argc == 3 || argc == 4) { if (ioctl(fd, IOCATAGMODE, &mode) < 0) err(1, "ioctl(IOCATAGMODE)"); - printf("current mode = %s\n", mode2str(mode)); + printf("current mode = %s %s\n", + mode2str(mode), satarev2str(mode)); } exit(EX_OK); } diff --git a/sbin/camcontrol/camcontrol.8 b/sbin/camcontrol/camcontrol.8 index a0871ac7f3f..0509ef7372c 100644 --- a/sbin/camcontrol/camcontrol.8 +++ b/sbin/camcontrol/camcontrol.8 @@ -149,6 +149,7 @@ .Op generic args .Op Fl c .Op Fl D Ar enable|disable +.Op Fl M Ar mode .Op Fl O Ar offset .Op Fl q .Op Fl R Ar syncrate @@ -705,6 +706,8 @@ Show or set current negotiation settings. This is the default. .It Fl D Ar enable|disable Enable or disable disconnection. +.It Fl M Ar mode +Set ATA mode. .It Fl O Ar offset Set the command delay offset. .It Fl q diff --git a/sbin/camcontrol/camcontrol.c b/sbin/camcontrol/camcontrol.c index 7d88998a237..1e71ae0caae 100644 --- a/sbin/camcontrol/camcontrol.c +++ b/sbin/camcontrol/camcontrol.c @@ -125,7 +125,7 @@ struct camcontrol_opts { #ifndef MINIMALISTIC static const char scsicmd_opts[] = "a:c:i:o:r"; static const char readdefect_opts[] = "f:GP"; -static const char negotiate_opts[] = "acD:O:qR:T:UW:"; +static const char negotiate_opts[] = "acD:M:O:qR:T:UW:"; #endif struct camcontrol_opts option_table[] = { @@ -226,6 +226,12 @@ static int scsireadcapacity(struct cam_device *device, int argc, char **argv, static int atapm(struct cam_device *device, int argc, char **argv, char *combinedopt, int retry_count, int timeout); #endif /* MINIMALISTIC */ +#ifndef min +#define min(a,b) (((a)<(b))?(a):(b)) +#endif +#ifndef max +#define max(a,b) (((a)>(b))?(a):(b)) +#endif camcontrol_optret getoption(char *arg, cam_cmdmask *cmdnum, cam_argmask *argnum, @@ -950,21 +956,27 @@ camxferrate(struct cam_device *device) if (sas->valid & CTS_SAS_VALID_SPEED) speed = sas->bitrate; + } else if (ccb->cts.transport == XPORT_ATA) { + struct ccb_trans_settings_ata *ata = + &ccb->cts.xport_specific.ata; + + if (ata->valid & CTS_ATA_VALID_MODE) + speed = ata_mode2speed(ata->mode); } else if (ccb->cts.transport == XPORT_SATA) { - struct ccb_trans_settings_sata *sata = + struct ccb_trans_settings_sata *sata = &ccb->cts.xport_specific.sata; - if (sata->valid & CTS_SATA_VALID_SPEED) - speed = sata->bitrate; + if (sata->valid & CTS_SATA_VALID_REVISION) + speed = ata_revision2speed(sata->revision); } mb = speed / 1000; if (mb > 0) { - fprintf(stdout, "%s%d: %d.%03dMB/s transfers ", + fprintf(stdout, "%s%d: %d.%03dMB/s transfers", device->device_name, device->dev_unit_num, mb, speed % 1000); } else { - fprintf(stdout, "%s%d: %dKB/s transfers ", + fprintf(stdout, "%s%d: %dKB/s transfers", device->device_name, device->dev_unit_num, speed); } @@ -975,7 +987,7 @@ camxferrate(struct cam_device *device) if (((spi->valid & CTS_SPI_VALID_SYNC_OFFSET) != 0) && (spi->sync_offset != 0)) - fprintf(stdout, "(%d.%03dMHz, offset %d", freq / 1000, + fprintf(stdout, " (%d.%03dMHz, offset %d", freq / 1000, freq % 1000, spi->sync_offset); if (((spi->valid & CTS_SPI_VALID_BUS_WIDTH) != 0) @@ -995,18 +1007,24 @@ camxferrate(struct cam_device *device) struct ccb_trans_settings_ata *ata = &ccb->cts.xport_specific.ata; - if (ata->valid & CTS_ATA_VALID_BYTECOUNT) { - fprintf(stdout, "(PIO size %dbytes)", - ata->bytecount); - } + printf(" ("); + if (ata->valid & CTS_ATA_VALID_MODE) + printf("%s, ", ata_mode2string(ata->mode)); + if (ata->valid & CTS_ATA_VALID_BYTECOUNT) + printf("PIO size %dbytes", ata->bytecount); + printf(")"); } else if (ccb->cts.transport == XPORT_SATA) { struct ccb_trans_settings_sata *sata = &ccb->cts.xport_specific.sata; - if (sata->valid & CTS_SATA_VALID_BYTECOUNT) { - fprintf(stdout, "(PIO size %dbytes)", - sata->bytecount); - } + printf(" ("); + if (sata->valid & CTS_SATA_VALID_REVISION) + printf("SATA %d.x, ", sata->revision); + if (sata->valid & CTS_SATA_VALID_MODE) + printf("%s, ", ata_mode2string(sata->mode)); + if (sata->valid & CTS_SATA_VALID_BYTECOUNT) + printf("PIO size %dbytes", sata->bytecount); + printf(")"); } if (ccb->cts.protocol == PROTO_SCSI) { @@ -2757,7 +2775,44 @@ cts_print(struct cam_device *device, struct ccb_trans_settings *cts) "enabled" : "disabled"); } } + if (cts->transport == XPORT_ATA) { + struct ccb_trans_settings_ata *ata = + &cts->xport_specific.ata; + if ((ata->valid & CTS_ATA_VALID_MODE) != 0) { + fprintf(stdout, "%sATA mode: %s\n", pathstr, + ata_mode2string(ata->mode)); + } + if ((ata->valid & CTS_ATA_VALID_BYTECOUNT) != 0) { + fprintf(stdout, "%sPIO transaction length: %d\n", + pathstr, ata->bytecount); + } + } + if (cts->transport == XPORT_SATA) { + struct ccb_trans_settings_sata *sata = + &cts->xport_specific.sata; + + if ((sata->valid & CTS_SATA_VALID_REVISION) != 0) { + fprintf(stdout, "%sSATA revision: %d.x\n", pathstr, + sata->revision); + } + if ((sata->valid & CTS_SATA_VALID_MODE) != 0) { + fprintf(stdout, "%sATA mode: %s\n", pathstr, + ata_mode2string(sata->mode)); + } + if ((sata->valid & CTS_SATA_VALID_BYTECOUNT) != 0) { + fprintf(stdout, "%sPIO transaction length: %d\n", + pathstr, sata->bytecount); + } + if ((sata->valid & CTS_SATA_VALID_PM) != 0) { + fprintf(stdout, "%sPMP presence: %d\n", pathstr, + sata->pm_present); + } + if ((sata->valid & CTS_SATA_VALID_TAGS) != 0) { + fprintf(stdout, "%sNumber of tags: %d\n", pathstr, + sata->tags); + } + } if (cts->protocol == PROTO_SCSI) { struct ccb_trans_settings_scsi *scsi= &cts->proto_specific.scsi; @@ -3057,6 +3112,7 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, int user_settings = 0; int retval = 0; int disc_enable = -1, tag_enable = -1; + int mode = -1; int offset = -1; double syncrate = -1; int bus_width = -1; @@ -3065,12 +3121,10 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, struct ccb_pathinq cpi; ccb = cam_getccb(device); - if (ccb == NULL) { warnx("ratecontrol: error allocating ccb"); return(1); } - while ((c = getopt(argc, argv, combinedopt)) != -1) { switch(c){ case 'a': @@ -3091,6 +3145,15 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, } change_settings = 1; break; + case 'M': + mode = ata_string2mode(optarg); + if (mode < 0) { + warnx("unknown mode '%s'", optarg); + retval = 1; + goto ratecontrol_bailout; + } + change_settings = 1; + break; case 'O': offset = strtol(optarg, NULL, 0); if (offset < 0) { @@ -3105,7 +3168,6 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, break; case 'R': syncrate = atof(optarg); - if (syncrate < 0) { warnx("sync rate %f is < 0", syncrate); retval = 1; @@ -3141,17 +3203,14 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, break; } } - bzero(&(&ccb->ccb_h)[1], sizeof(struct ccb_pathinq) - sizeof(struct ccb_hdr)); - /* * Grab path inquiry information, so we can determine whether * or not the initiator is capable of the things that the user * requests. */ ccb->ccb_h.func_code = XPT_PATH_INQ; - if (cam_send_ccb(device, ccb) < 0) { perror("error sending XPT_PATH_INQ CCB"); if (arglist & CAM_ARG_VERBOSE) { @@ -3161,7 +3220,6 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, retval = 1; goto ratecontrol_bailout; } - if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { warnx("XPT_PATH_INQ CCB failed"); if (arglist & CAM_ARG_VERBOSE) { @@ -3171,17 +3229,14 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, retval = 1; goto ratecontrol_bailout; } - bcopy(&ccb->cpi, &cpi, sizeof(struct ccb_pathinq)); - bzero(&(&ccb->ccb_h)[1], sizeof(struct ccb_trans_settings) - sizeof(struct ccb_hdr)); - - if (quiet == 0) - fprintf(stdout, "Current Parameters:\n"); - + if (quiet == 0) { + fprintf(stdout, "%s parameters:\n", + user_settings ? "User" : "Current"); + } retval = get_print_cts(device, user_settings, quiet, &ccb->cts); - if (retval != 0) goto ratecontrol_bailout; @@ -3191,16 +3246,20 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, if (change_settings) { int didsettings = 0; struct ccb_trans_settings_spi *spi = NULL; + struct ccb_trans_settings_ata *ata = NULL; + struct ccb_trans_settings_sata *sata = NULL; struct ccb_trans_settings_scsi *scsi = NULL; - if (ccb->cts.transport == XPORT_SPI) { + if (ccb->cts.transport == XPORT_SPI) spi = &ccb->cts.xport_specific.spi; - spi->valid = 0; - } - if (ccb->cts.protocol == PROTO_SCSI) { + if (ccb->cts.transport == XPORT_ATA) + ata = &ccb->cts.xport_specific.ata; + if (ccb->cts.transport == XPORT_SATA) + sata = &ccb->cts.xport_specific.sata; + if (ccb->cts.protocol == PROTO_SCSI) scsi = &ccb->cts.proto_specific.scsi; - scsi->valid = 0; - } + ccb->cts.xport_specific.valid = 0; + ccb->cts.proto_specific.valid = 0; if (spi && disc_enable != -1) { spi->valid |= CTS_SPI_VALID_DISC; if (disc_enable == 0) @@ -3208,7 +3267,6 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, else spi->flags |= CTS_SPI_FLAGS_DISC_ENB; } - if (scsi && tag_enable != -1) { if ((cpi.hba_inquiry & PI_TAG_ABLE) == 0) { warnx("HBA does not support tagged queueing, " @@ -3216,21 +3274,16 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, retval = 1; goto ratecontrol_bailout; } - scsi->valid |= CTS_SCSI_VALID_TQ; - if (tag_enable == 0) scsi->flags &= ~CTS_SCSI_FLAGS_TAG_ENB; else scsi->flags |= CTS_SCSI_FLAGS_TAG_ENB; didsettings++; } - if (spi && offset != -1) { if ((cpi.hba_inquiry & PI_SDTR_ABLE) == 0) { - warnx("HBA at %s%d is not cable of changing " - "offset", cpi.dev_name, - cpi.unit_number); + warnx("HBA is not capable of changing offset"); retval = 1; goto ratecontrol_bailout; } @@ -3238,28 +3291,23 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, spi->sync_offset = offset; didsettings++; } - if (spi && syncrate != -1) { int prelim_sync_period; u_int freq; if ((cpi.hba_inquiry & PI_SDTR_ABLE) == 0) { - warnx("HBA at %s%d is not cable of changing " - "transfer rates", cpi.dev_name, - cpi.unit_number); + warnx("HBA is not capable of changing " + "transfer rates"); retval = 1; goto ratecontrol_bailout; } - spi->valid |= CTS_SPI_VALID_SYNC_RATE; - /* * The sync rate the user gives us is in MHz. * We need to translate it into KHz for this * calculation. */ syncrate *= 1000; - /* * Next, we calculate a "preliminary" sync period * in tenths of a nanosecond. @@ -3268,14 +3316,43 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, prelim_sync_period = 0; else prelim_sync_period = 10000000 / syncrate; - spi->sync_period = scsi_calc_syncparam(prelim_sync_period); - freq = scsi_calc_syncsrate(spi->sync_period); didsettings++; } - + if (sata && syncrate != -1) { + if ((cpi.hba_inquiry & PI_SDTR_ABLE) == 0) { + warnx("HBA is not capable of changing " + "transfer rates"); + retval = 1; + goto ratecontrol_bailout; + } + sata->revision = ata_speed2revision(syncrate * 100); + if (sata->revision < 0) { + warnx("Invalid rate %f", syncrate); + retval = 1; + goto ratecontrol_bailout; + } + sata->valid |= CTS_SATA_VALID_REVISION; + didsettings++; + } + if ((ata || sata) && mode != -1) { + if ((cpi.hba_inquiry & PI_SDTR_ABLE) == 0) { + warnx("HBA is not capable of changing " + "transfer rates"); + retval = 1; + goto ratecontrol_bailout; + } + if (ata) { + ata->mode = mode; + ata->valid |= CTS_ATA_VALID_MODE; + } else { + sata->mode = mode; + sata->valid |= CTS_SATA_VALID_MODE; + } + didsettings++; + } /* * The bus_width argument goes like this: * 0 == 8 bit @@ -3286,7 +3363,6 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, * number. */ if (spi && bus_width != -1) { - /* * We might as well validate things here with a * decipherable error message, rather than what @@ -3310,17 +3386,19 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, retval = 1; goto ratecontrol_bailout; } - spi->valid |= CTS_SPI_VALID_BUS_WIDTH; spi->bus_width = bus_width >> 4; didsettings++; } - if (didsettings == 0) { goto ratecontrol_bailout; } + if (!user_settings && (ata || sata)) { + warnx("You can modify only user settings for ATA/SATA"); + retval = 1; + goto ratecontrol_bailout; + } ccb->ccb_h.func_code = XPT_SET_TRAN_SETTINGS; - if (cam_send_ccb(device, ccb) < 0) { perror("error sending XPT_SET_TRAN_SETTINGS CCB"); if (arglist & CAM_ARG_VERBOSE) { @@ -3330,7 +3408,6 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, retval = 1; goto ratecontrol_bailout; } - if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { warnx("XPT_SET_TRANS_SETTINGS CCB failed"); if (arglist & CAM_ARG_VERBOSE) { @@ -3341,11 +3418,9 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, goto ratecontrol_bailout; } } - if (send_tur) { retval = testunitready(device, retry_count, timeout, (arglist & CAM_ARG_VERBOSE) ? 0 : 1); - /* * If the TUR didn't succeed, just bail. */ @@ -3354,7 +3429,6 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, fprintf(stderr, "Test Unit Ready failed\n"); goto ratecontrol_bailout; } - /* * If the user wants things quiet, there's no sense in * getting the transfer settings, if we're not going @@ -3362,13 +3436,11 @@ ratecontrol(struct cam_device *device, int retry_count, int timeout, */ if (quiet != 0) goto ratecontrol_bailout; - - fprintf(stdout, "New Parameters:\n"); + fprintf(stdout, "New parameters:\n"); retval = get_print_cts(device, user_settings, 0, NULL); } ratecontrol_bailout: - cam_freeccb(ccb); return(retval); } @@ -4255,8 +4327,8 @@ usage(int verbose) " \n" " camcontrol tags [dev_id][generic args] [-N tags] [-q] [-v]\n" " camcontrol negotiate [dev_id][generic args] [-a][-c]\n" -" [-D ][-O offset][-q]\n" -" [-R syncrate][-v][-T ]\n" +" [-D ][-M mode][-O offset]\n" +" [-q][-R syncrate][-v][-T ]\n" " [-U][-W bus_width]\n" " camcontrol format [dev_id][generic args][-q][-r][-w][-y]\n" " camcontrol idle [dev_id][generic args][-t time]\n" @@ -4347,6 +4419,7 @@ usage(int verbose) "-a send a test unit ready after negotiation\n" "-c report/set current negotiation settings\n" "-D \"enable\" or \"disable\" disconnection\n" +"-M mode set ATA mode\n" "-O offset set command delay offset\n" "-q be quiet, don't report anything\n" "-R syncrate synchronization rate in MHz\n" diff --git a/sbin/comcontrol/comcontrol.c b/sbin/comcontrol/comcontrol.c index 753ded36d1a..a7c696ce679 100644 --- a/sbin/comcontrol/comcontrol.c +++ b/sbin/comcontrol/comcontrol.c @@ -43,7 +43,7 @@ __FBSDID("$FreeBSD$"); static void usage(void); static void -usage() +usage(void) { fprintf(stderr, "usage: comcontrol [dtrwait ] [drainwait ]\n"); diff --git a/sbin/dumpfs/dumpfs.c b/sbin/dumpfs/dumpfs.c index 4bcbe5fef03..b7f6d39d481 100644 --- a/sbin/dumpfs/dumpfs.c +++ b/sbin/dumpfs/dumpfs.c @@ -251,8 +251,11 @@ dumpfs(const char *name) printf("gjournal "); if (fsflags & FS_FLAGS_UPDATED) printf("fs_flags expanded "); + if (fsflags & FS_NFS4ACLS) + printf("nfsv4acls "); fsflags &= ~(FS_UNCLEAN | FS_DOSOFTDEP | FS_NEEDSFSCK | FS_INDEXDIRS | - FS_ACLS | FS_MULTILABEL | FS_GJOURNAL | FS_FLAGS_UPDATED); + FS_ACLS | FS_MULTILABEL | FS_GJOURNAL | FS_FLAGS_UPDATED | + FS_NFS4ACLS); if (fsflags != 0) printf("unknown flags (%#x)", fsflags); putchar('\n'); diff --git a/sbin/fsck/fsck.c b/sbin/fsck/fsck.c index 13eb9f06e06..24c4e13124a 100644 --- a/sbin/fsck/fsck.c +++ b/sbin/fsck/fsck.c @@ -543,8 +543,10 @@ getfslab(const char *str) if ((fd = open(str, O_RDONLY)) == -1) err(1, "cannot open `%s'", str); - if (ioctl(fd, DIOCGDINFO, &dl) == -1) + if (ioctl(fd, DIOCGDINFO, &dl) == -1) { + (void) close(fd); return(NULL); + } (void) close(fd); diff --git a/sbin/fsck_ffs/gjournal.c b/sbin/fsck_ffs/gjournal.c index 903763ddea2..bd887cab850 100644 --- a/sbin/fsck_ffs/gjournal.c +++ b/sbin/fsck_ffs/gjournal.c @@ -86,7 +86,7 @@ struct cgchain { #define MAX_CACHED_CGS 1024 static unsigned ncgs = 0; -static LIST_HEAD(, cgchain) cglist = LIST_HEAD_INITIALIZER(&cglist); +static LIST_HEAD(, cgchain) cglist = LIST_HEAD_INITIALIZER(cglist); static const char *devnam; static struct uufsd *disk = NULL; diff --git a/sbin/geom/class/cache/Makefile b/sbin/geom/class/cache/Makefile index 6ca37e6c05e..615c927588c 100644 --- a/sbin/geom/class/cache/Makefile +++ b/sbin/geom/class/cache/Makefile @@ -3,6 +3,5 @@ .PATH: ${.CURDIR}/../../misc CLASS= cache -NO_MAN= # notyet .include diff --git a/sbin/geom/class/cache/gcache.8 b/sbin/geom/class/cache/gcache.8 new file mode 100644 index 00000000000..d3f782c9a3d --- /dev/null +++ b/sbin/geom/class/cache/gcache.8 @@ -0,0 +1,192 @@ +.\"- +.\" Copyright (c) 2010 Edward Tomasz Napierala +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR OR THE VOICES IN HIS HEAD 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. +.\" +.\" $FreeBSD$ +.\" +.Dd January 3, 2010 +.Dt GCACHE 8 +.Os +.Sh NAME +.Nm gcache +.Nd "control utility for CACHE GEOM class" +.Sh SYNOPSIS +.Nm +.Cm create +.Op Fl v +.Op Fl b Ar blocksize +.Op Fl s Ar size +.Ar name +.Ar prov +.Nm +.Cm configure +.Op Fl v +.Op Fl b Ar blocksize +.Op Fl s Ar size +.Ar name +.Nm +.Cm destroy +.Op Fl fv +.Ar name +.Nm +.Cm label +.Op Fl v +.Op Fl b Ar blocksize +.Op Fl s Ar size +.Ar name +.Ar prov +.Nm +.Cm stop +.Op Fl fv +.Ar name ... +.Nm +.Cm clear +.Op Fl v +.Ar prov ... +.Nm +.Cm dump +.Ar prov ... +.Nm +.Cm list +.Nm +.Cm status +.Op Fl s Ar name +.Nm +.Cm load +.Op Fl v +.Nm +.Cm unload +.Op Fl v +.Sh DESCRIPTION +The +.Nm +utility is used to control GEOM cache, which can +speed up read performance by sending fixed size +read requests to its consumer. It has been developed to address +the problem of a horrible read performance of a 64k blocksize FS +residing on a RAID3 array with 8 data components, where a single +disk component would only get 8k read requests, thus effectively +killing disk performance under high load. +.Pp +Caching can be configured using two different methods: +.Dq manual +or +.Dq automatic . +When using the +.Dq manual +method, no metadata are stored on the devices, so the cached +device has to be configured by hand every time it is needed. +The +.Dq automatic +method uses on-disk metadata to detect devices. +Once devices are labeled, they will be automatically detected and +configured. +.Pp +The first argument to +.Nm +indicates an action to be performed: +.Bl -tag -width ".Cm destroy" +.It Cm create +Cache the given devices with specified +.Ar name . +This is the +.Dq manual +method. +The kernel module +.Pa geom_cache.ko +will be loaded if it is not loaded already. +.It Cm label +Cache the given devices with the specified +.Ar name . +This is the +.Dq automatic +method, where metadata are stored in every device's last sector. +The kernel module +.Pa geom_cache.ko +will be loaded if it is not loaded already. +.It Cm stop +Turn off existing cache device by its +.Ar name . +This command does not touch on-disk metadata! +.It Cm destroy +Same as +.Cm stop . +.It Cm clear +Clear metadata on the given devices. +.It Cm dump +Dump metadata stored on the given devices. +.It Cm list +See +.Xr geom 8 . +.It Cm status +See +.Xr geom 8 . +.It Cm load +See +.Xr geom 8 . +.It Cm unload +See +.Xr geom 8 . +.El +.Pp +Additional options: +.Bl -tag -width indent +.It Fl f +Force the removal of the specified cache device. +.It Fl v +Be more verbose. +.El +.Sh SYSCTL VARIABLES +The following +.Xr sysctl 8 +variables can be used to control the behavior of the +.Nm CACHE +GEOM class. +The default value is shown next to each variable. +.Bl -tag -width indent +.It Va kern.geom.cache.used_hi : No 20 +.It Va kern.geom.cache.used_lo : No 5 +.It Va kern.geom.cache.idletime : No 5 +.It Va kern.geom.cache.timeout : No 10 +.It Va kern.geom.cache.enable : No 1 +.It Va kern.geom.cache.debug : No 0 +Debug level of the +.Nm CACHE +GEOM class. +This can be set to a number between 0 and 3 inclusive. +If set to 0 minimal debug information is printed, and if set to 3 the +maximum amount of debug information is printed. +.El +.Sh EXIT STATUS +Exit status is 0 on success, and 1 if the command fails. +.Sh SEE ALSO +.Xr geom 4 , +.Xr geom 8 +.Sh HISTORY +The +.Nm +utility appeared in +.Fx 7.0 . +.Sh AUTHORS +.An Ruslan Ermilov Aq ru@FreeBSD.org diff --git a/sbin/geom/class/mirror/geom_mirror.c b/sbin/geom/class/mirror/geom_mirror.c index 6ac4fb9a775..cf15c60af9d 100644 --- a/sbin/geom/class/mirror/geom_mirror.c +++ b/sbin/geom/class/mirror/geom_mirror.c @@ -44,7 +44,7 @@ __FBSDID("$FreeBSD$"); uint32_t lib_version = G_LIB_VERSION; uint32_t version = G_MIRROR_VERSION; -static char label_balance[] = "split", configure_balance[] = "none"; +static char label_balance[] = "load", configure_balance[] = "none"; static intmax_t label_slice = 4096, configure_slice = -1; static intmax_t insert_priority = 0, configure_priority = -1; diff --git a/sbin/geom/class/mirror/gmirror.8 b/sbin/geom/class/mirror/gmirror.8 index ea0cb9a865a..baaa827daf2 100644 --- a/sbin/geom/class/mirror/gmirror.8 +++ b/sbin/geom/class/mirror/gmirror.8 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 1, 2009 +.Dd December 8, 2009 .Dt GMIRROR 8 .Os .Sh NAME @@ -135,6 +135,7 @@ Specifies balance algorithm to use, one of: .Bl -tag -width ".Cm round-robin" .It Cm load Read from the component with the lowest load. +This is the default balance algorithm. .It Cm prefer Read from the component with the biggest priority. .It Cm round-robin @@ -142,7 +143,6 @@ Use round-robin algorithm when choosing component to read. .It Cm split Split read requests, which are bigger than or equal to slice size on N pieces, where N is the number of active components. -This is the default balance algorithm. .El .It Fl F Do not synchronize after a power failure or system crash. diff --git a/sbin/geom/class/raid3/geom_raid3.c b/sbin/geom/class/raid3/geom_raid3.c index 4a2dbe201ef..89ce1689ba8 100644 --- a/sbin/geom/class/raid3/geom_raid3.c +++ b/sbin/geom/class/raid3/geom_raid3.c @@ -45,6 +45,8 @@ __FBSDID("$FreeBSD$"); uint32_t lib_version = G_LIB_VERSION; uint32_t version = G_RAID3_VERSION; +static intmax_t default_blocksize = 0; + static void raid3_main(struct gctl_req *req, unsigned f); static void raid3_clear(struct gctl_req *req); static void raid3_dump(struct gctl_req *req); @@ -87,10 +89,11 @@ struct g_command class_commands[] = { { 'F', "nofailsync", NULL, G_TYPE_BOOL }, { 'n', "noautosync", NULL, G_TYPE_BOOL }, { 'r', "round_robin", NULL, G_TYPE_BOOL }, + { 's', "blocksize", &default_blocksize, G_TYPE_NUMBER }, { 'w', "verify", NULL, G_TYPE_BOOL }, G_OPT_SENTINEL }, - NULL, "[-hFnrvw] name prov prov prov ..." + NULL, "[-hFnrvw] [-s blocksize] name prov prov prov ..." }, { "rebuild", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL, "[-v] name prov" @@ -190,7 +193,7 @@ raid3_label(struct gctl_req *req) * sectorsizes of every disk and find the smallest mediasize. */ mediasize = 0; - sectorsize = 0; + sectorsize = gctl_get_intmax(req, "blocksize"); for (i = 1; i < nargs; i++) { str = gctl_get_ascii(req, "arg%d", i); msize = g_get_mediasize(str); diff --git a/sbin/geom/class/raid3/graid3.8 b/sbin/geom/class/raid3/graid3.8 index 21c6f181e77..f9ea0cace59 100644 --- a/sbin/geom/class/raid3/graid3.8 +++ b/sbin/geom/class/raid3/graid3.8 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 1, 2006 +.Dd January 5, 2010 .Dt GRAID3 8 .Os .Sh NAME @@ -34,6 +34,7 @@ .Nm .Cm label .Op Fl Fhnrvw +.Op Fl s Ar blocksize .Ar name .Ar prov prov prov ... .Nm @@ -113,6 +114,12 @@ but sequential reads are slower. One cannot use this option if the .Fl w option is also specified. +.It Fl s +Manually specify array block size. Block size will be set equal to least +common multiple of all component's sector sizes and specified value. +Note that array sector size calculated as multiple of block size and number +of regular data components. Big values may decrease performance and compatibility, +as all I/O requests have to be multiple of sector size. .It Fl w Use verify reading feature. When reading from a device in a complete state, also read data from the parity component diff --git a/sbin/geom/core/geom.8 b/sbin/geom/core/geom.8 index 8477205244b..c80816d1fd7 100644 --- a/sbin/geom/core/geom.8 +++ b/sbin/geom/core/geom.8 @@ -166,7 +166,7 @@ geom md unload .Sh SEE ALSO .Xr libgeom 3 , .Xr geom 4 , -.\" .Xr gcache 8 , +.Xr gcache 8 , .Xr gconcat 8 , .Xr geli 8 , .Xr gjournal 8 , diff --git a/sbin/ggate/ggated/ggated.c b/sbin/ggate/ggated/ggated.c index 52d2428a052..3b2a0a574c9 100644 --- a/sbin/ggate/ggated/ggated.c +++ b/sbin/ggate/ggated/ggated.c @@ -99,8 +99,8 @@ static TAILQ_HEAD(, ggd_request) outqueue = TAILQ_HEAD_INITIALIZER(outqueue); pthread_mutex_t inqueue_mtx, outqueue_mtx; pthread_cond_t inqueue_cond, outqueue_cond; -static SLIST_HEAD(, ggd_export) exports = SLIST_HEAD_INITIALIZER(&exports); -static LIST_HEAD(, ggd_connection) connections = LIST_HEAD_INITIALIZER(&connection); +static SLIST_HEAD(, ggd_export) exports = SLIST_HEAD_INITIALIZER(exports); +static LIST_HEAD(, ggd_connection) connections = LIST_HEAD_INITIALIZER(connections); static void *recv_thread(void *arg); static void *disk_thread(void *arg); diff --git a/sbin/growfs/growfs.c b/sbin/growfs/growfs.c index 96b5c6ca405..ee37a88e339 100644 --- a/sbin/growfs/growfs.c +++ b/sbin/growfs/growfs.c @@ -376,7 +376,6 @@ initcg(int cylno, time_t utime, int fso, unsigned int Nflag) long d, dlower, dupper, blkno, start; ufs2_daddr_t i, cbase, dmax; struct ufs1_dinode *dp1; - struct ufs2_dinode *dp2; struct csum *cs; if (iobuf == NULL && (iobuf = malloc(sblock.fs_bsize)) == NULL) { @@ -460,16 +459,11 @@ initcg(int cylno, time_t utime, int fso, unsigned int Nflag) for (i = 2 * sblock.fs_frag; i < sblock.fs_ipg / INOPF(&sblock); i += sblock.fs_frag) { dp1 = (struct ufs1_dinode *)iobuf; - dp2 = (struct ufs2_dinode *)iobuf; #ifdef FSIRAND - for (j = 0; j < INOPB(&sblock); j++) - if (sblock.fs_magic == FS_UFS1_MAGIC) { - dp1->di_gen = random(); - dp1++; - } else { - dp2->di_gen = random(); - dp2++; - } + for (j = 0; j < INOPB(&sblock); j++) { + dp1->di_gen = random(); + dp1++; + } #endif wtfs(fsbtodb(&sblock, cgimin(&sblock, cylno) + i), sblock.fs_bsize, iobuf, fso, Nflag); diff --git a/sbin/ifconfig/ifconfig.8 b/sbin/ifconfig/ifconfig.8 index 211b1ef08be..220bd9f415c 100644 --- a/sbin/ifconfig/ifconfig.8 +++ b/sbin/ifconfig/ifconfig.8 @@ -28,7 +28,7 @@ .\" From: @(#)ifconfig.8 8.3 (Berkeley) 1/5/94 .\" $FreeBSD$ .\" -.Dd November 11, 2009 +.Dd September 23, 2009 .Dt IFCONFIG 8 .Os .Sh NAME @@ -258,12 +258,6 @@ Disable permanently promiscuous mode. Another name for the .Fl alias parameter. -.It Cm description Ar value -Specify a description of the interface. -This can be used to label interfaces in situations where they may -otherwise be difficult to distinguish. -.It Cm -description -Clear the interface description. .It Cm down Mark an interface .Dq down . @@ -2518,10 +2512,6 @@ Configure the interface to use 100baseTX, full duplex Ethernet media options: .Dl # ifconfig xl0 media 100baseTX mediaopt full-duplex .Pp -Label the em0 interface as an uplink: -.Pp -.Dl # ifconfig em0 description \&"Uplink to Gigabit Switch 2\&" -.Pp Create the software network interface .Li gif1 : .Dl # ifconfig gif1 create diff --git a/sbin/ifconfig/ifconfig.c b/sbin/ifconfig/ifconfig.c index e08bb4f86fa..b77a27789b2 100644 --- a/sbin/ifconfig/ifconfig.c +++ b/sbin/ifconfig/ifconfig.c @@ -83,8 +83,6 @@ static const char rcsid[] = struct ifreq ifr; char name[IFNAMSIZ]; -char *descr = NULL; -size_t descrlen = 64; int setaddr; int setmask; int doalias; @@ -149,7 +147,7 @@ main(int argc, char *argv[]) struct ifaddrs *ifap, *ifa; struct ifreq paifr; const struct sockaddr_dl *sdl; - char options[1024], *cp; + char options[1024], *cp, *namecp = NULL; const char *ifname; struct option *p; size_t iflen; @@ -296,7 +294,7 @@ main(int argc, char *argv[]) sdl = (const struct sockaddr_dl *) ifa->ifa_addr; else sdl = NULL; - if (cp != NULL && strcmp(cp, ifa->ifa_name) == 0) + if (cp != NULL && strcmp(cp, ifa->ifa_name) == 0 && !namesonly) continue; iflen = strlcpy(name, ifa->ifa_name, sizeof(name)); if (iflen >= sizeof(name)) { @@ -310,16 +308,32 @@ main(int argc, char *argv[]) continue; if (uponly && (ifa->ifa_flags & IFF_UP) == 0) continue; - ifindex++; /* * Are we just listing the interfaces? */ if (namesonly) { + if (namecp == cp) + continue; + if (afp != NULL) { + /* special case for "ether" address family */ + if (!strcmp(afp->af_name, "ether")) { + if (sdl == NULL || + sdl->sdl_type != IFT_ETHER || + sdl->sdl_alen != ETHER_ADDR_LEN) + continue; + } else { + if (ifa->ifa_addr->sa_family != afp->af_af) + continue; + } + } + namecp = cp; + ifindex++; if (ifindex > 1) printf(" "); fputs(name, stdout); continue; } + ifindex++; if (argc > 0) ifconfig(argc, argv, 0, afp); @@ -824,36 +838,6 @@ setifname(const char *val, int dummy __unused, int s, free(newname); } -/* ARGSUSED */ -static void -setifdescr(const char *val, int dummy __unused, int s, - const struct afswtch *afp) -{ - char *newdescr; - - newdescr = strdup(val); - if (newdescr == NULL) { - warn("no memory to set ifdescr"); - return; - } - ifr.ifr_buffer.buffer = newdescr; - ifr.ifr_buffer.length = strlen(newdescr); - if (ioctl(s, SIOCSIFDESCR, (caddr_t)&ifr) < 0) { - warn("ioctl (set descr)"); - free(newdescr); - return; - } - free(newdescr); -} - -/* ARGSUSED */ -static void -unsetifdescr(const char *val, int value, int s, const struct afswtch *afp) -{ - - setifdescr("", 0, s, 0); -} - #define IFFBITS \ "\020\1UP\2BROADCAST\3DEBUG\4LOOPBACK\5POINTOPOINT\6SMART\7RUNNING" \ "\10NOARP\11PROMISC\12ALLMULTI\13OACTIVE\14SIMPLEX\15LINK0\16LINK1\17LINK2" \ @@ -898,23 +882,6 @@ status(const struct afswtch *afp, const struct sockaddr_dl *sdl, printf(" mtu %d", ifr.ifr_mtu); putchar('\n'); - descr = reallocf(descr, descrlen); - if (descr != NULL) { - do { - ifr.ifr_buffer.buffer = descr; - ifr.ifr_buffer.length = descrlen; - if (ioctl(s, SIOCGIFDESCR, &ifr) == 0) { - if (strlen(descr) > 0) - printf("\tdescription: %s\n", descr); - break; - } - if (errno == ENAMETOOLONG) { - descrlen *= 2; - descr = reallocf(descr, descrlen); - } - } while (errno == ENAMETOOLONG); - } - if (ioctl(s, SIOCGIFCAP, (caddr_t)&ifr) == 0) { if (ifr.ifr_curcap != 0) { printb("\toptions", ifr.ifr_curcap, IFCAPBITS); @@ -1084,10 +1051,6 @@ static struct cmd basic_cmds[] = { DEF_CMD("-arp", IFF_NOARP, setifflags), DEF_CMD("debug", IFF_DEBUG, setifflags), DEF_CMD("-debug", -IFF_DEBUG, setifflags), - DEF_CMD_ARG("description", setifdescr), - DEF_CMD_ARG("descr", setifdescr), - DEF_CMD("-description", 0, unsetifdescr), - DEF_CMD("-descr", 0, unsetifdescr), DEF_CMD("promisc", IFF_PPROMISC, setifflags), DEF_CMD("-promisc", -IFF_PPROMISC, setifflags), DEF_CMD("add", IFF_UP, notealias), diff --git a/sbin/ifconfig/regdomain.c b/sbin/ifconfig/regdomain.c index a06ba552d8c..414028958e5 100644 --- a/sbin/ifconfig/regdomain.c +++ b/sbin/ifconfig/regdomain.c @@ -694,8 +694,11 @@ lib80211_country_findbyname(const struct regdata *rdp, const char *name) len = strlen(name); LIST_FOREACH(cp, &rdp->countries, next) { - if (strcasecmp(cp->isoname, name) == 0 || - strncasecmp(cp->name, name, len) == 0) + if (strcasecmp(cp->isoname, name) == 0) + return cp; + } + LIST_FOREACH(cp, &rdp->countries, next) { + if (strncasecmp(cp->name, name, len) == 0) return cp; } return NULL; diff --git a/sbin/init/Makefile b/sbin/init/Makefile index 7497a4b54fd..7778c714a51 100644 --- a/sbin/init/Makefile +++ b/sbin/init/Makefile @@ -6,8 +6,8 @@ MAN= init.8 PRECIOUSPROG= INSTALLFLAGS=-b -B.bak CFLAGS+=-DDEBUGSHELL -DSECURE -DLOGIN_CAP -DCOMPAT_SYSV_INIT -DPADD= ${LIBUTIL} ${LIBCRYPT} -LDADD= -lutil -lcrypt +DPADD= ${LIBUTIL} ${LIBULOG} ${LIBCRYPT} +LDADD= -lutil -lulog -lcrypt NO_SHARED?= YES diff --git a/sbin/init/init.c b/sbin/init/init.c index 8629b90890c..58e67396889 100644 --- a/sbin/init/init.c +++ b/sbin/init/init.c @@ -65,6 +65,8 @@ static const char rcsid[] = #include #include #include +#define _ULOG_POSIX_NAMES +#include #include #include #include @@ -569,10 +571,8 @@ transition(state_t s) static void clear_session_logs(session_t *sp) { - char *line = sp->se_device + sizeof(_PATH_DEV) - 1; - if (logout(line)) - logwtmp(line, "", ""); + ulog_logout(sp->se_device); } /* @@ -775,6 +775,7 @@ single_user(void) static state_func_t runcom(void) { + struct utmpx utx; state_func_t next_transition; if ((next_transition = run_script(_PATH_RUNCOM)) != 0) @@ -782,7 +783,9 @@ runcom(void) runcom_mode = AUTOBOOT; /* the default */ /* NB: should send a message to the session logger to avoid blocking. */ - logwtmp("~", "reboot", ""); + utx.ut_type = BOOT_TIME; + gettimeofday(&utx.ut_tv, NULL); + pututxline(&utx); return (state_func_t) read_ttys; } @@ -1487,13 +1490,16 @@ alrm_handler(int sig) static state_func_t death(void) { + struct utmpx utx; session_t *sp; int i; pid_t pid; static const int death_sigs[2] = { SIGTERM, SIGKILL }; /* NB: should send a message to the session logger to avoid blocking. */ - logwtmp("~", "shutdown", ""); + utx.ut_type = SHUTDOWN_TIME; + gettimeofday(&utx.ut_tv, NULL); + pututxline(&utx); /* * Also revoke the TTY here. Because runshutdown() may reopen diff --git a/sbin/ipfw/dummynet.c b/sbin/ipfw/dummynet.c index 147328460eb..490aa53fd87 100644 --- a/sbin/ipfw/dummynet.c +++ b/sbin/ipfw/dummynet.c @@ -78,7 +78,7 @@ static struct _s_x dummynet_params[] = { }; static int -sort_q(const void *pa, const void *pb) +sort_q(void *arg, const void *pa, const void *pb) { int rev = (co.do_sort < 0); int field = rev ? -co.do_sort : co.do_sort; @@ -121,7 +121,7 @@ list_queues(struct dn_flow_set *fs, struct dn_flow_queue *q) return; if (co.do_sort != 0) - heapsort(q, fs->rq_elements, sizeof *q, sort_q); + qsort_r(q, fs->rq_elements, sizeof *q, NULL, sort_q); /* Print IPv4 flows */ index_printed = 0; @@ -486,7 +486,7 @@ is_valid_number(const char *s) * and return the numeric bandwidth value. * set clocking interface or bandwidth value */ -void +static void read_bandwidth(char *arg, int *bandwidth, char *if_name, int namelen) { if (*bandwidth != -1) @@ -530,7 +530,7 @@ struct point { double delay; }; -int +static int compare_points(const void *vp1, const void *vp2) { const struct point *p1 = vp1; @@ -650,6 +650,8 @@ load_extra_delays(const char *filename, struct dn_pipe *p) } } + fclose (f); + if (samples == -1) { warnx("'%s' not found, assuming 100", ED_TOK_SAMPLES); samples = 100; @@ -948,7 +950,7 @@ end_mask: errx(EX_DATAERR, "burst only valid for pipes"); NEED1("burst needs argument\n"); errno = 0; - if (expand_number(av[0], &p.burst) < 0) + if (expand_number(av[0], (int64_t *)&p.burst) < 0) if (errno != ERANGE) errx(EX_DATAERR, "burst: invalid argument"); diff --git a/sbin/ipfw/ipfw.8 b/sbin/ipfw/ipfw.8 index f8b0746a25a..fc83ecc34a9 100644 --- a/sbin/ipfw/ipfw.8 +++ b/sbin/ipfw/ipfw.8 @@ -1002,6 +1002,7 @@ The second format with multiple addresses) is provided for convenience only and its use is discouraged. .It Ar addr : Oo Cm not Oc Bro +.Bl -tag -width indent .Cm any | me | me6 | .Cm table Ns Pq Ar number Ns Op , Ns Ar value .Ar | addr-list | addr-set @@ -1023,6 +1024,7 @@ is also specified, an entry will match only if it has this value. See the .Sx LOOKUP TABLES section below for more information on lookup tables. +.El .It Ar addr-list : ip-addr Ns Op Ns , Ns Ar addr-list .It Ar ip-addr : A host or subnet address specified in one of the following ways: @@ -1389,6 +1391,20 @@ of source and destination addresses and ports can be specified. Currently, only IPv4 flows are supported. +.It Cm lookup Bro Cm dst-ip | dst-port | src-ip | src-port | uid | jail Brc Ar N +Search an entry in lookup table +.Ar N +that matches the field specified as argument. +If not found, the match fails. +Otherwise, the match succeeds and +.Cm tablearg +is set to the value extracted from the table. +.Br +This option can be useful to quickly dispatch traffic based on +certain packet fields. +See the +.Sx LOOKUP TABLES +section below for more information on lookup tables. .It Cm { MAC | mac } Ar dst-mac src-mac Match packets with a given .Ar dst-mac diff --git a/sbin/ipfw/ipfw2.c b/sbin/ipfw/ipfw2.c index 58094a18e97..d4740c9f855 100644 --- a/sbin/ipfw/ipfw2.c +++ b/sbin/ipfw/ipfw2.c @@ -224,6 +224,15 @@ static struct _s_x rule_action_params[] = { { NULL, 0 } /* terminator */ }; +/* + * The 'lookup' instruction accepts one of the following arguments. + * -1 is a terminator for the list. + * Arguments are passed as v[1] in O_DST_LOOKUP options. + */ +static int lookup_key[] = { + TOK_DSTIP, TOK_SRCIP, TOK_DSTPORT, TOK_SRCPORT, + TOK_UID, TOK_JAIL, -1 }; + static struct _s_x rule_options[] = { { "tagged", TOK_TAGGED }, { "uid", TOK_UID }, @@ -290,6 +299,7 @@ static struct _s_x rule_options[] = { { "dst-ip6", TOK_DSTIP6}, { "src-ipv6", TOK_SRCIP6}, { "src-ip6", TOK_SRCIP6}, + { "lookup", TOK_LOOKUP}, { "//", TOK_COMMENT }, { "not", TOK_NOT }, /* pseudo option */ @@ -742,6 +752,16 @@ print_ip(ipfw_insn_ip *cmd, char const *s) int len = F_LEN((ipfw_insn *)cmd); uint32_t *a = ((ipfw_insn_u32 *)cmd)->d; + if (cmd->o.opcode == O_IP_DST_LOOKUP && len > F_INSN_SIZE(ipfw_insn_u32)) { + uint32_t d = a[1]; + const char *arg = ""; + + if (d < sizeof(lookup_key)/sizeof(lookup_key[0])) + arg = match_value(rule_options, lookup_key[d]); + printf("%s lookup %s %d", cmd->o.len & F_NOT ? " not": "", + arg, cmd->o.arg1); + return; + } printf("%s%s ", cmd->o.len & F_NOT ? " not": "", s); if (cmd->o.opcode == O_IP_SRC_ME || cmd->o.opcode == O_IP_DST_ME) { @@ -2740,9 +2760,11 @@ chkarg: /* * In the kernel we assume AF_INET and use only - * sin_port and sin_addr. + * sin_port and sin_addr. Remember to set sin_len as + * the routing code seems to use it too. */ p->sa.sin_family = AF_INET; + p->sa.sin_len = sizeof(struct sockaddr_in); p->sa.sin_port = 0; /* * locate the address-port separator (':' or ',') @@ -3477,6 +3499,31 @@ read_options: ac--; av++; break; + case TOK_LOOKUP: { + ipfw_insn_u32 *c = (ipfw_insn_u32 *)cmd; + char *p; + int j; + + if (ac < 2) + errx(EX_USAGE, "format: lookup argument tablenum"); + cmd->opcode = O_IP_DST_LOOKUP; + cmd->len |= F_INSN_SIZE(ipfw_insn) + 2; + i = match_token(rule_options, *av); + for (j = 0; lookup_key[j] >= 0 ; j++) { + if (i == lookup_key[j]) + break; + } + if (lookup_key[j] <= 0) + errx(EX_USAGE, "format: cannot lookup on %s", *av); + c->d[1] = j; // i converted to option + ac--; av++; + cmd->arg1 = strtoul(*av, &p, 0); + if (p && *p) + errx(EX_USAGE, "format: lookup argument tablenum"); + ac--; av++; + } + break; + default: errx(EX_USAGE, "unrecognised option [%d] %s\n", i, s); } diff --git a/sbin/ipfw/ipfw2.h b/sbin/ipfw/ipfw2.h index d3ce7fb6e08..b393a7d62fe 100644 --- a/sbin/ipfw/ipfw2.h +++ b/sbin/ipfw/ipfw2.h @@ -186,6 +186,7 @@ enum tokens { TOK_FIB, TOK_SETFIB, + TOK_LOOKUP, }; /* * the following macro returns an error message if we run out of diff --git a/sbin/ldconfig/ldconfig.c b/sbin/ldconfig/ldconfig.c index 6364653880c..7fc64818d28 100644 --- a/sbin/ldconfig/ldconfig.c +++ b/sbin/ldconfig/ldconfig.c @@ -222,7 +222,7 @@ main(int argc, char **argv) } static void -usage() +usage(void) { fprintf(stderr, "usage: ldconfig [-32] [-aout | -elf] [-Rimrsv] [-f hints_file] [directory | file ...]\n"); @@ -230,9 +230,7 @@ usage() } int -dofile(fname, silent) -char *fname; -int silent; +dofile(char *fname, int silent) { FILE *hfp; char buf[MAXPATHLEN]; @@ -269,9 +267,7 @@ int silent; } int -dodir(dir, silent) -char *dir; -int silent; +dodir(char *dir, int silent) { DIR *dd; struct dirent *dp; @@ -328,9 +324,7 @@ int silent; } static void -enter(dir, file, name, dewey, ndewey) -char *dir, *file, *name; -int dewey[], ndewey; +enter(char *dir, char *file, char *name, int dewey[], int ndewey) { struct shlib_list *shp; @@ -391,7 +385,7 @@ hinthash(char *cp, int vmajor) } int -buildhints() +buildhints(void) { struct hints_header hdr; struct hints_bucket *blist; @@ -523,7 +517,7 @@ buildhints() } static int -readhints() +readhints(void) { int fd; void *addr; @@ -623,7 +617,7 @@ readhints() } static void -listhints() +listhints(void) { struct shlib_list *shp; int i; diff --git a/sbin/mount/mntopts.h b/sbin/mount/mntopts.h index 2fcbbddbbc1..2903d553f4e 100644 --- a/sbin/mount/mntopts.h +++ b/sbin/mount/mntopts.h @@ -54,6 +54,7 @@ struct mntopt { #define MOPT_SNAPSHOT { "snapshot", 0, MNT_SNAPSHOT, 0 } #define MOPT_MULTILABEL { "multilabel", 0, MNT_MULTILABEL, 0 } #define MOPT_ACLS { "acls", 0, MNT_ACLS, 0 } +#define MOPT_NFS4ACLS { "nfsv4acls", 0, MNT_NFS4ACLS, 0 } /* Control flags. */ #define MOPT_FORCE { "force", 0, MNT_FORCE, 0 } @@ -87,7 +88,8 @@ struct mntopt { MOPT_NOCLUSTERR, \ MOPT_NOCLUSTERW, \ MOPT_MULTILABEL, \ - MOPT_ACLS + MOPT_ACLS, \ + MOPT_NFS4ACLS void getmntopts(const char *, const struct mntopt *, int *, int *); void rmslashes(char *, char *); diff --git a/sbin/mount/mount.8 b/sbin/mount/mount.8 index 3efc9f1f6e5..ea014554dd6 100644 --- a/sbin/mount/mount.8 +++ b/sbin/mount/mount.8 @@ -120,11 +120,14 @@ takes effect. The following options are available: .Bl -tag -width indent .It Cm acls -Enable Access Control Lists, or ACLS, which can be customized via the +Enable POSIX.1e Access Control Lists, or ACLs, which can be customized via the .Xr setfacl 1 and .Xr getfacl 1 commands. +This flag is mutually exclusive with +.Cm nfsv4acls +flag. .It Cm async All .Tn I/O @@ -186,6 +189,15 @@ See .Xr mac 4 for more information, which cause the multilabel mount flag to be set automatically at mount-time. +.It Cm nfsv4acls +Enable NFSv4 ACLs, which can be customized via the +.Xr setfacl 1 +and +.Xr getfacl 1 +commands. +This flag is mutually exclusive with +.Cm acls +flag. .It Cm noasync Metadata I/O should be done synchronously, while data I/O should be done asynchronously. diff --git a/sbin/mount/mount.c b/sbin/mount/mount.c index 0bd553377bb..907f7541bf7 100644 --- a/sbin/mount/mount.c +++ b/sbin/mount/mount.c @@ -111,6 +111,7 @@ static struct opt { { MNT_SOFTDEP, "soft-updates" }, { MNT_MULTILABEL, "multilabel" }, { MNT_ACLS, "acls" }, + { MNT_NFS4ACLS, "nfsv4acls" }, { MNT_GJOURNAL, "gjournal" }, { 0, NULL } }; @@ -918,6 +919,7 @@ flags2opts(int flags) if (flags & MNT_SUIDDIR) res = catopt(res, "suiddir"); if (flags & MNT_MULTILABEL) res = catopt(res, "multilabel"); if (flags & MNT_ACLS) res = catopt(res, "acls"); + if (flags & MNT_NFS4ACLS) res = catopt(res, "nfsv4acls"); return (res); } diff --git a/sbin/mount/vfslist.c b/sbin/mount/vfslist.c index f95a76efdb2..fa5fdf6d954 100644 --- a/sbin/mount/vfslist.c +++ b/sbin/mount/vfslist.c @@ -44,9 +44,7 @@ __FBSDID("$FreeBSD$"); static int skipvfs; int -checkvfsname(vfsname, vfslist) - const char *vfsname; - const char **vfslist; +checkvfsname(const char *vfsname, const char **vfslist) { if (vfslist == NULL) @@ -60,8 +58,7 @@ checkvfsname(vfsname, vfslist) } const char ** -makevfslist(fslist) - char *fslist; +makevfslist(char *fslist) { const char **av; int i; diff --git a/sbin/mount_cd9660/mount_cd9660.c b/sbin/mount_cd9660/mount_cd9660.c index 9a9bd9d0455..922f6cf7321 100644 --- a/sbin/mount_cd9660/mount_cd9660.c +++ b/sbin/mount_cd9660/mount_cd9660.c @@ -251,8 +251,10 @@ set_charset(struct iovec **iov, int *iovlen, const char *localcs) if ((cs_disk = malloc(ICONV_CSNMAXLEN)) == NULL) return (-1); - if ((cs_local = malloc(ICONV_CSNMAXLEN)) == NULL) + if ((cs_local = malloc(ICONV_CSNMAXLEN)) == NULL) { + free(cs_disk); return (-1); + } strncpy(cs_disk, ENCODING_UNICODE, ICONV_CSNMAXLEN); strncpy(cs_local, kiconv_quirkcs(localcs, KICONV_VENDOR_MICSFT), ICONV_CSNMAXLEN); diff --git a/sbin/mount_msdosfs/mount_msdosfs.8 b/sbin/mount_msdosfs/mount_msdosfs.8 index 857899b392a..9a3be1377eb 100644 --- a/sbin/mount_msdosfs/mount_msdosfs.8 +++ b/sbin/mount_msdosfs/mount_msdosfs.8 @@ -205,14 +205,6 @@ The use of the flag could result in damaged file systems, albeit the damage is in part taken care of by procedures similar to the ones used in Win'95. -.Pp -.Fx 2.1 -and earlier versions could not handle cluster sizes larger than 16K. -Just mounting an MS-DOS file system could cause corruption to any -mounted file system. -Cluster sizes larger than 16K are unavoidable for file system sizes -larger than 1G, and also occur when file systems larger than 1G are -shrunk to smaller than 1G using FIPS. .Sh HISTORY The .Nm diff --git a/sbin/mount_msdosfs/mount_msdosfs.c b/sbin/mount_msdosfs/mount_msdosfs.c index 096f04a683a..3ba67ea60eb 100644 --- a/sbin/mount_msdosfs/mount_msdosfs.c +++ b/sbin/mount_msdosfs/mount_msdosfs.c @@ -229,8 +229,7 @@ main(int argc, char **argv) } gid_t -a_gid(s) - char *s; +a_gid(char *s) { struct group *gr; char *gname; @@ -249,8 +248,7 @@ a_gid(s) } uid_t -a_uid(s) - char *s; +a_uid(char *s) { struct passwd *pw; char *uname; @@ -269,8 +267,7 @@ a_uid(s) } mode_t -a_mask(s) - char *s; +a_mask(char *s) { int done, rv; char *ep; @@ -287,7 +284,7 @@ a_mask(s) } void -usage() +usage(void) { fprintf(stderr, "%s\n%s\n%s\n", "usage: mount_msdosfs [-9ls] [-D DOS_codepage] [-g gid] [-L locale]", diff --git a/sbin/mount_nullfs/mount_nullfs.c b/sbin/mount_nullfs/mount_nullfs.c index a0ad5f68190..abca9fabe06 100644 --- a/sbin/mount_nullfs/mount_nullfs.c +++ b/sbin/mount_nullfs/mount_nullfs.c @@ -116,9 +116,7 @@ main(int argc, char *argv[]) } int -subdir(p, dir) - const char *p; - const char *dir; +subdir(const char *p, const char *dir) { int l; @@ -133,7 +131,7 @@ subdir(p, dir) } static void -usage() +usage(void) { (void)fprintf(stderr, "usage: mount_nullfs [-o options] target mount-point\n"); diff --git a/sbin/natd/natd.c b/sbin/natd/natd.c index 445077f4fbe..f6b3fdb78f9 100644 --- a/sbin/natd/natd.c +++ b/sbin/natd/natd.c @@ -68,7 +68,7 @@ struct instance { int divertInOut; }; -static LIST_HEAD(, instance) root = LIST_HEAD_INITIALIZER(&root); +static LIST_HEAD(, instance) root = LIST_HEAD_INITIALIZER(root); struct libalias *mla; struct instance *mip; diff --git a/sbin/newfs/mkfs.c b/sbin/newfs/mkfs.c index f99cb14c5d3..85777f3c88e 100644 --- a/sbin/newfs/mkfs.c +++ b/sbin/newfs/mkfs.c @@ -557,7 +557,7 @@ mkfs(struct partition *pp, char *fsys) sblock.fs_cssize - i : sblock.fs_bsize, ((char *)fscs) + i); /* - * Update information about this partion in pack + * Update information about this partition in pack * label, to that it may be updated on disk. */ if (pp != NULL) { diff --git a/sbin/nfsiod/nfsiod.8 b/sbin/nfsiod/nfsiod.8 index 44bf1af28ad..20a2c9db8e9 100644 --- a/sbin/nfsiod/nfsiod.8 +++ b/sbin/nfsiod/nfsiod.8 @@ -28,7 +28,7 @@ .\" From: @(#)nfsiod.8 8.2 (Berkeley) 2/22/94 .\" $FreeBSD$ .\" -.Dd September 22, 1994 +.Dd December 26, 2009 .Dt NFSIOD 8 .Os .Sh NAME @@ -42,33 +42,39 @@ asynchronous I/O server .Sh DESCRIPTION The .Nm -utility is a kernel process which runs on an +utility controls the maximum number of +.Nm +kernel processes which run on an .Tn NFS client machine to service asynchronous I/O requests to its server. -It improves performance but is not required for correct operation. +Having +.Nm +kernel processes +improves performance but is not required for correct operation. .Pp -This program controls the maximum number of processes that the kernel runs. -.Pp -The options are as follows: +The option is as follows: .Bl -tag -width indent .It Fl n -Specify how many servers are permitted to be started. +Specify how many processes are permitted to be started. .El .Pp -A client should run enough daemons to handle its maximum +Without an option, +.Nm +displays the current settings. +A client should allow enough number of processes to handle its maximum level of concurrency, typically four to six. .Pp If .Nm detects that the running kernel does not include .Tn NFS -support, it will attempt to load a loadable kernel module containing +support, it will attempt to load a kernel module containing .Tn NFS code, using .Xr kldload 2 . If this fails, or no .Tn NFS -KLD was available, +module was available, .Nm exits with an error. .Sh EXIT STATUS @@ -85,3 +91,10 @@ The .Nm utility first appeared in .Bx 4.4 . +.Pp +Starting with +.Fx 5.0 , +the utility no longer starts daemons, but only serves as a vfs +loader and +.Xr sysctl 3 +wrapper. diff --git a/sbin/nfsiod/nfsiod.c b/sbin/nfsiod/nfsiod.c index 31559cc61bd..b1db1f1615b 100644 --- a/sbin/nfsiod/nfsiod.c +++ b/sbin/nfsiod/nfsiod.c @@ -89,12 +89,12 @@ main(int argc, char *argv[]) case 'n': num_servers = atoi(optarg); if (num_servers < 1) { - warnx("nfsiod count %d; reset to %d", + warnx("nfsiod count %u; reset to %d", num_servers, 1); num_servers = 1; } if (num_servers > MAXNFSDCNT) { - warnx("nfsiod count %d; reset to %d", + warnx("nfsiod count %u; reset to %d", num_servers, MAXNFSDCNT); num_servers = MAXNFSDCNT; } @@ -109,9 +109,6 @@ main(int argc, char *argv[]) if (argc > 0) usage(); - if (num_servers == 0) - exit(0); /* no change */ - len = sizeof iodmin; error = sysctlbyname("vfs.nfs.iodmin", &iodmin, &len, NULL, 0); if (error < 0) @@ -120,6 +117,11 @@ main(int argc, char *argv[]) error = sysctlbyname("vfs.nfs.iodmax", &iodmax, &len, NULL, 0); if (error < 0) err(1, "sysctlbyname(\"vfs.nfs.iodmax\")"); + if (num_servers == 0) { /* no change */ + printf("vfs.nfs.iodmin=%u\nvfs.nfs.iodmax=%u\n", + iodmin, iodmax); + exit(0); + } /* Catch the case where we're lowering num_servers below iodmin */ if (iodmin > num_servers) { iodmin = num_servers; diff --git a/sbin/rcorder/ealloc.c b/sbin/rcorder/ealloc.c index a7cf6bc4a71..99711931553 100644 --- a/sbin/rcorder/ealloc.c +++ b/sbin/rcorder/ealloc.c @@ -58,7 +58,7 @@ static void enomem(void); * die when out of memory. */ static void -enomem() +enomem(void) { errx(2, "Cannot allocate memory."); } @@ -68,8 +68,7 @@ enomem() * malloc, but die on error. */ void * -emalloc(len) - size_t len; +emalloc(size_t len) { void *p; @@ -83,8 +82,7 @@ emalloc(len) * strdup, but die on error. */ char * -estrdup(str) - const char *str; +estrdup(const char *str) { char *p; @@ -98,9 +96,7 @@ estrdup(str) * realloc, but die on error. */ void * -erealloc(ptr, size) - void *ptr; - size_t size; +erealloc(void *ptr, size_t size) { if ((ptr = realloc(ptr, size)) == NULL) enomem(); @@ -112,9 +108,7 @@ erealloc(ptr, size) * calloc, but die on error. */ void * -ecalloc(nmemb, size) - size_t nmemb; - size_t size; +ecalloc(size_t nmemb, size_t size) { void *ptr; diff --git a/sbin/rcorder/hash.c b/sbin/rcorder/hash.c index bc882b92d6b..34b95ce82f7 100644 --- a/sbin/rcorder/hash.c +++ b/sbin/rcorder/hash.c @@ -103,9 +103,9 @@ static void RebuildTable(Hash_Table *); */ void -Hash_InitTable(t, numBuckets) - register Hash_Table *t; /* Structure to use to hold table. */ - int numBuckets; /* How many buckets to create for starters. +Hash_InitTable( + register Hash_Table *t, /* Structure to use to hold table. */ + int numBuckets) /* How many buckets to create for starters. * This number is rounded up to a power of * two. If <= 0, a reasonable default is * chosen. The table will grow in size later @@ -150,8 +150,7 @@ Hash_InitTable(t, numBuckets) */ void -Hash_DeleteTable(t) - Hash_Table *t; +Hash_DeleteTable(Hash_Table *t) { register struct Hash_Entry **hp, *h, *nexth = NULL; register int i; @@ -190,9 +189,9 @@ Hash_DeleteTable(t) */ Hash_Entry * -Hash_FindEntry(t, key) - Hash_Table *t; /* Hash table to search. */ - char *key; /* A hash key. */ +Hash_FindEntry( + Hash_Table *t, /* Hash table to search. */ + char *key) /* A hash key. */ { register Hash_Entry *e; register unsigned h; @@ -227,10 +226,10 @@ Hash_FindEntry(t, key) */ Hash_Entry * -Hash_CreateEntry(t, key, newPtr) - register Hash_Table *t; /* Hash table to search. */ - char *key; /* A hash key. */ - Boolean *newPtr; /* Filled in with TRUE if new entry created, +Hash_CreateEntry( + register Hash_Table *t, /* Hash table to search. */ + char *key, /* A hash key. */ + Boolean *newPtr) /* Filled in with TRUE if new entry created, * FALSE otherwise. */ { register Hash_Entry *e; @@ -294,9 +293,7 @@ Hash_CreateEntry(t, key, newPtr) */ void -Hash_DeleteEntry(t, e) - Hash_Table *t; - Hash_Entry *e; +Hash_DeleteEntry(Hash_Table *t, Hash_Entry *e) { register Hash_Entry **hp, *p; @@ -335,9 +332,9 @@ Hash_DeleteEntry(t, e) */ Hash_Entry * -Hash_EnumFirst(t, searchPtr) - Hash_Table *t; /* Table to be searched. */ - register Hash_Search *searchPtr;/* Area in which to keep state +Hash_EnumFirst( + Hash_Table *t, /* Table to be searched. */ + register Hash_Search *searchPtr)/* Area in which to keep state * about search.*/ { searchPtr->tablePtr = t; @@ -365,8 +362,8 @@ Hash_EnumFirst(t, searchPtr) */ Hash_Entry * -Hash_EnumNext(searchPtr) - register Hash_Search *searchPtr; /* Area used to keep state about +Hash_EnumNext( + register Hash_Search *searchPtr) /* Area used to keep state about search. */ { register Hash_Entry *e; @@ -411,8 +408,7 @@ Hash_EnumNext(searchPtr) */ static void -RebuildTable(t) - register Hash_Table *t; +RebuildTable(register Hash_Table *t) { register Hash_Entry *e, *next = NULL, **hp, **xp; register int i, mask; diff --git a/sbin/rcorder/rcorder.c b/sbin/rcorder/rcorder.c index bf8e9fbd5c0..9a9959b6255 100644 --- a/sbin/rcorder/rcorder.c +++ b/sbin/rcorder/rcorder.c @@ -153,9 +153,7 @@ void generate_ordering(void); int main(int, char *[]); int -main(argc, argv) - int argc; - char *argv[]; +main(int argc, char *argv[]) { int ch; @@ -199,7 +197,7 @@ main(argc, argv) * initialise various variables. */ void -initialize() +initialize(void) { fn_head = &fn_head_s; @@ -210,10 +208,7 @@ initialize() /* generic function to insert a new strnodelist element */ void -strnode_add(listp, s, fnode) - strnodelist **listp; - char *s; - filenode *fnode; +strnode_add(strnodelist **listp, char *s, filenode *fnode) { strnodelist *ent; @@ -235,8 +230,7 @@ strnode_add(listp, s, fnode) * fill in the bits, and put it in the filenode linked list */ filenode * -filenode_new(filename) - char *filename; +filenode_new(char *filename) { filenode *temp; @@ -264,9 +258,7 @@ filenode_new(filename) * add a requirement to a filenode. */ void -add_require(fnode, s) - filenode *fnode; - char *s; +add_require(filenode *fnode, char *s) { Hash_Entry *entry; f_reqnode *rnode; @@ -286,9 +278,7 @@ add_require(fnode, s) * have a head node, create one here. */ void -add_provide(fnode, s) - filenode *fnode; - char *s; +add_provide(filenode *fnode, char *s) { Hash_Entry *entry; f_provnode *f_pnode; @@ -367,9 +357,7 @@ add_provide(fnode, s) * put the BEFORE: lines to a list and handle them later. */ void -add_before(fnode, s) - filenode *fnode; - char *s; +add_before(filenode *fnode, char *s) { strnodelist *bf_ent; @@ -384,9 +372,7 @@ add_before(fnode, s) * add a key to a filenode. */ void -add_keyword(fnode, s) - filenode *fnode; - char *s; +add_keyword(filenode *fnode, char *s) { strnode_add(&fnode->keyword_list, s, fnode); @@ -397,9 +383,7 @@ add_keyword(fnode, s) * add_require() to do the real work. */ void -parse_require(node, buffer) - filenode *node; - char *buffer; +parse_require(filenode *node, char *buffer) { char *s; @@ -413,9 +397,7 @@ parse_require(node, buffer) * add_provide() to do the real work. */ void -parse_provide(node, buffer) - filenode *node; - char *buffer; +parse_provide(filenode *node, char *buffer) { char *s; @@ -429,9 +411,7 @@ parse_provide(node, buffer) * add_before() to do the real work. */ void -parse_before(node, buffer) - filenode *node; - char *buffer; +parse_before(filenode *node, char *buffer) { char *s; @@ -445,9 +425,7 @@ parse_before(node, buffer) * add_keyword() to do the real work. */ void -parse_keywords(node, buffer) - filenode *node; - char *buffer; +parse_keywords(filenode *node, char *buffer) { char *s; @@ -461,8 +439,7 @@ parse_keywords(node, buffer) * for provision and requirement lines, building the graphs as needed. */ void -crunch_file(filename) - char *filename; +crunch_file(char *filename) { FILE *fp; char *buf; @@ -534,8 +511,7 @@ crunch_file(filename) } Hash_Entry * -make_fake_provision(node) - filenode *node; +make_fake_provision(filenode *node) { Hash_Entry *entry; f_provnode *f_pnode; @@ -581,7 +557,7 @@ make_fake_provision(node) * that provisions filenode for P. */ void -insert_before() +insert_before(void) { Hash_Entry *entry, *fake_prov_entry; provnode *pnode; @@ -619,7 +595,7 @@ insert_before() * lines into graph(s). */ void -crunch_all_files() +crunch_all_files(void) { int i; @@ -644,9 +620,7 @@ crunch_all_files() * provision. */ void -satisfy_req(rnode, filename) - f_reqnode *rnode; - char *filename; +satisfy_req(f_reqnode *rnode, char *filename) { Hash_Entry *entry; provnode *head; @@ -687,8 +661,7 @@ satisfy_req(rnode, filename) } int -skip_ok(fnode) - filenode *fnode; +skip_ok(filenode *fnode) { strnodelist *s; strnodelist *k; @@ -702,8 +675,7 @@ skip_ok(fnode) } int -keep_ok(fnode) - filenode *fnode; +keep_ok(filenode *fnode) { strnodelist *s; strnodelist *k; @@ -728,8 +700,7 @@ keep_ok(fnode) * Circular dependancies will cause problems if we do. */ void -do_file(fnode) - filenode *fnode; +do_file(filenode *fnode) { f_reqnode *r, *r_tmp; f_provnode *p, *p_tmp; @@ -812,7 +783,7 @@ do_file(fnode) } void -generate_ordering() +generate_ordering(void) { /* diff --git a/sbin/reboot/Makefile b/sbin/reboot/Makefile index fe02f26add0..2a2f6f18717 100644 --- a/sbin/reboot/Makefile +++ b/sbin/reboot/Makefile @@ -2,8 +2,8 @@ # $FreeBSD$ PROG= reboot -DPADD= ${LIBUTIL} -LDADD= -lutil +DPADD= ${LIBULOG} +LDADD= -lulog MAN= reboot.8 nextboot.8 MLINKS= reboot.8 halt.8 reboot.8 fastboot.8 reboot.8 fasthalt.8 diff --git a/sbin/reboot/reboot.c b/sbin/reboot/reboot.c index cae709f3b06..1124ec6b6e0 100644 --- a/sbin/reboot/reboot.c +++ b/sbin/reboot/reboot.c @@ -42,18 +42,20 @@ static char sccsid[] = "@(#)reboot.c 8.1 (Berkeley) 6/5/93"; __FBSDID("$FreeBSD$"); #include +#include #include #include #include #include #include #include -#include #include #include #include #include #include +#define _ULOG_POSIX_NAMES +#include #include static void usage(void); @@ -64,6 +66,7 @@ int dohalt; int main(int argc, char *argv[]) { + struct utmpx utx; const struct passwd *pw; int ch, howto, i, fd, lflag, nflag, qflag, sverrno; u_int pageins; @@ -140,7 +143,9 @@ main(int argc, char *argv[]) syslog(LOG_CRIT, "rebooted by %s", user); } } - logwtmp("~", "shutdown", ""); + utx.ut_type = SHUTDOWN_TIME; + gettimeofday(&utx.ut_tv, NULL); + pututxline(&utx); /* * Do a sync early on, so disks start transfers while we're off @@ -226,7 +231,7 @@ usage(void) } static u_int -get_pageins() +get_pageins(void) { u_int pageins; size_t len; diff --git a/sbin/routed/if.c b/sbin/routed/if.c index 61ac412b2e1..1c185d76fe5 100644 --- a/sbin/routed/if.c +++ b/sbin/routed/if.c @@ -42,7 +42,7 @@ __RCSID("$Revision: 2.27 $"); #endif struct ifhead ifnet = LIST_HEAD_INITIALIZER(ifnet); /* all interfaces */ -struct ifhead remote_if = LIST_HEAD_INITIALIZER(ifnet); /* remote interfaces */ +struct ifhead remote_if = LIST_HEAD_INITIALIZER(remote_if); /* remote interfaces */ /* hash table for all interfaces, big enough to tolerate ridiculous * numbers of IP aliases. Crazy numbers of aliases such as 7000 diff --git a/sbin/shutdown/shutdown.c b/sbin/shutdown/shutdown.c index de3adec90b8..9032866f945 100644 --- a/sbin/shutdown/shutdown.c +++ b/sbin/shutdown/shutdown.c @@ -93,7 +93,7 @@ static char mbuf[BUFSIZ]; static const char *nosync, *whom; static void badtime(void); -static void die_you_gravy_sucking_pig_dog(void); +static void perform_shutdown(void); static void finish(int); static void getoffset(char *); static void loop(void); @@ -258,7 +258,7 @@ loop(void) if (!tp->timeleft) break; } - die_you_gravy_sucking_pig_dog(); + perform_shutdown(); } static jmp_buf alarmbuf; @@ -325,7 +325,7 @@ timeout(int signo __unused) } static void -die_you_gravy_sucking_pig_dog() +perform_shutdown(void) { char *empty_environ[] = { NULL }; @@ -499,7 +499,7 @@ finish(int signo __unused) } static void -badtime() +badtime(void) { errx(1, "bad time format"); } diff --git a/sbin/tunefs/tunefs.8 b/sbin/tunefs/tunefs.8 index e2664e3edeb..53e463cfc70 100644 --- a/sbin/tunefs/tunefs.8 +++ b/sbin/tunefs/tunefs.8 @@ -44,6 +44,7 @@ .Op Fl L Ar volname .Op Fl l Cm enable | disable .Op Fl m Ar minfree +.Op Fl N Cm enable | disable .Op Fl n Cm enable | disable .Op Fl o Cm space | time .Op Fl p @@ -70,7 +71,7 @@ this option will cause all backups to be modified as well as the primary super-block. This is potentially dangerous - use with caution. .It Fl a Cm enable | disable -Turn on/off the administrative ACL enable flag. +Turn on/off the administrative POSIX.1e ACL enable flag. .It Fl e Ar maxbpg Indicate the maximum number of blocks any single file can allocate out of a cylinder group before it is forced to begin @@ -114,6 +115,8 @@ factor of three over the performance obtained at a 10% threshold. If the value is raised above the current usage level, users will be unable to allocate files until enough files have been deleted to get under the higher threshold. +.It Fl N Cm enable | disable +Turn on/off the administrative NFSv4 ACL enable flag. .It Fl n Cm enable | disable Turn on/off soft updates. .It Fl o Cm space | time diff --git a/sbin/tunefs/tunefs.c b/sbin/tunefs/tunefs.c index 2b263bb343c..1b5f21ae375 100644 --- a/sbin/tunefs/tunefs.c +++ b/sbin/tunefs/tunefs.c @@ -76,12 +76,12 @@ void printfs(void); int main(int argc, char *argv[]) { - char *avalue, *Jvalue, *Lvalue, *lvalue, *nvalue; + char *avalue, *Jvalue, *Lvalue, *lvalue, *Nvalue, *nvalue; const char *special, *on; const char *name; int active; int Aflag, aflag, eflag, evalue, fflag, fvalue, Jflag, Lflag, lflag; - int mflag, mvalue, nflag, oflag, ovalue, pflag, sflag, svalue; + int mflag, mvalue, Nflag, nflag, oflag, ovalue, pflag, sflag, svalue; int ch, found_arg, i; const char *chg[2]; struct ufs_args args; @@ -90,12 +90,12 @@ main(int argc, char *argv[]) if (argc < 3) usage(); Aflag = aflag = eflag = fflag = Jflag = Lflag = lflag = mflag = 0; - nflag = oflag = pflag = sflag = 0; - avalue = Jvalue = Lvalue = lvalue = nvalue = NULL; + Nflag = nflag = oflag = pflag = sflag = 0; + avalue = Jvalue = Lvalue = lvalue = Nvalue = nvalue = NULL; evalue = fvalue = mvalue = ovalue = svalue = 0; active = 0; found_arg = 0; /* At least one arg is required. */ - while ((ch = getopt(argc, argv, "Aa:e:f:J:L:l:m:n:o:ps:")) != -1) + while ((ch = getopt(argc, argv, "Aa:e:f:J:L:l:m:N:n:o:ps:")) != -1) switch (ch) { case 'A': @@ -105,7 +105,7 @@ main(int argc, char *argv[]) case 'a': found_arg = 1; - name = "ACLs"; + name = "POSIX.1e ACLs"; avalue = optarg; if (strcmp(avalue, "enable") && strcmp(avalue, "disable")) { @@ -187,6 +187,18 @@ main(int argc, char *argv[]) mflag = 1; break; + case 'N': + found_arg = 1; + name = "NFSv4 ACLs"; + Nvalue = optarg; + if (strcmp(Nvalue, "enable") && + strcmp(Nvalue, "disable")) { + errx(10, "bad %s (options are %s)", + name, "`enable' or `disable'"); + } + Nflag = 1; + break; + case 'n': found_arg = 1; name = "soft updates"; @@ -255,10 +267,13 @@ main(int argc, char *argv[]) strlcpy(sblock.fs_volname, Lvalue, MAXVOLLEN); } if (aflag) { - name = "ACLs"; + name = "POSIX.1e ACLs"; if (strcmp(avalue, "enable") == 0) { if (sblock.fs_flags & FS_ACLS) { warnx("%s remains unchanged as enabled", name); + } else if (sblock.fs_flags & FS_NFS4ACLS) { + warnx("%s and NFSv4 ACLs are mutually " + "exclusive", name); } else { sblock.fs_flags |= FS_ACLS; warnx("%s set", name); @@ -349,6 +364,29 @@ main(int argc, char *argv[]) warnx(OPTWARN, "space", "<", MINFREE); } } + if (Nflag) { + name = "NFSv4 ACLs"; + if (strcmp(Nvalue, "enable") == 0) { + if (sblock.fs_flags & FS_NFS4ACLS) { + warnx("%s remains unchanged as enabled", name); + } else if (sblock.fs_flags & FS_ACLS) { + warnx("%s and POSIX.1e ACLs are mutually " + "exclusive", name); + } else { + sblock.fs_flags |= FS_NFS4ACLS; + warnx("%s set", name); + } + } else if (strcmp(Nvalue, "disable") == 0) { + if ((~sblock.fs_flags & FS_NFS4ACLS) == + FS_NFS4ACLS) { + warnx("%s remains unchanged as disabled", + name); + } else { + sblock.fs_flags &= ~FS_NFS4ACLS; + warnx("%s cleared", name); + } + } + } if (nflag) { name = "soft updates"; if (strcmp(nvalue, "enable") == 0) { @@ -423,16 +461,18 @@ usage(void) fprintf(stderr, "%s\n%s\n%s\n%s\n", "usage: tunefs [-A] [-a enable | disable] [-e maxbpg] [-f avgfilesize]", " [-J enable | disable ] [-L volname] [-l enable | disable]", -" [-m minfree] [-n enable | disable] [-o space | time] [-p]", -" [-s avgfpdir] special | filesystem"); +" [-m minfree] [-N enable | disable] [-n enable | disable]", +" [-o space | time] [-p] [-s avgfpdir] special | filesystem"); exit(2); } void printfs(void) { - warnx("ACLs: (-a) %s", + warnx("POSIX.1e ACLs: (-a) %s", (sblock.fs_flags & FS_ACLS)? "enabled" : "disabled"); + warnx("NFSv4 ACLs: (-N) %s", + (sblock.fs_flags & FS_NFS4ACLS)? "enabled" : "disabled"); warnx("MAC multilabel: (-l) %s", (sblock.fs_flags & FS_MULTILABEL)? "enabled" : "disabled"); warnx("soft updates: (-n) %s", diff --git a/sbin/umount/Makefile b/sbin/umount/Makefile index 70ccc5a0662..e472b41de49 100644 --- a/sbin/umount/Makefile +++ b/sbin/umount/Makefile @@ -4,7 +4,6 @@ PROG= umount SRCS= umount.c vfslist.c mounttab.c -WARNS?= 0 MAN= umount.8 MOUNT= ${.CURDIR}/../mount diff --git a/sbin/umount/umount.c b/sbin/umount/umount.c index cbacb4bcb25..eb51f2a2465 100644 --- a/sbin/umount/umount.c +++ b/sbin/umount/umount.c @@ -75,7 +75,7 @@ char **makevfslist (const char *); size_t mntinfo (struct statfs **); int namematch (struct addrinfo *); int parsehexfsid(const char *hex, fsid_t *fsid); -int sacmp (struct sockaddr *, struct sockaddr *); +int sacmp (void *, void *); int umountall (char **); int checkname (char *, char **); int umountfs(struct statfs *sfs); @@ -225,7 +225,7 @@ umountall(char **typelist) * Do magic checks on mountpoint/device/fsid, and then call unmount(2). */ int -checkname(char *name, char **typelist) +checkname(char *mntname, char **typelist) { char buf[MAXPATHLEN]; struct statfs sfsbuf; @@ -238,25 +238,25 @@ checkname(char *name, char **typelist) /* * 1. Check if the name exists in the mounttable. */ - sfs = checkmntlist(name); + sfs = checkmntlist(mntname); /* * 2. Remove trailing slashes if there are any. After that * we look up the name in the mounttable again. */ if (sfs == NULL) { - len = strlen(name); - while (len > 1 && name[len - 1] == '/') - name[--len] = '\0'; - sfs = checkmntlist(name); + len = strlen(mntname); + while (len > 1 && mntname[len - 1] == '/') + mntname[--len] = '\0'; + sfs = checkmntlist(mntname); } /* * 3. Check if the deprecated NFS syntax with an '@' has been used * and translate it to the ':' syntax. Look up the name in the * mount table again. */ - if (sfs == NULL && (delimp = strrchr(name, '@')) != NULL) { - snprintf(buf, sizeof(buf), "%s:%.*s", delimp + 1, delimp - name, - name); + if (sfs == NULL && (delimp = strrchr(mntname, '@')) != NULL) { + snprintf(buf, sizeof(buf), "%s:%.*s", delimp + 1, + (int)(delimp - mntname), mntname); len = strlen(buf); while (len > 1 && buf[len - 1] == '/') buf[--len] = '\0'; @@ -271,28 +271,28 @@ checkname(char *name, char **typelist) * mount list and reality. * We also do this if an ambiguous mount point was specified. */ - if (sfs == NULL || (getmntentry(NULL, name, NULL, FIND) != NULL && - getmntentry(NULL, name, NULL, CHECKUNIQUE) == NULL)) { - if (statfs(name, &sfsbuf) != 0) { - warn("%s: statfs", name); - } else if (stat(name, &sb) != 0) { - warn("%s: stat", name); + if (sfs == NULL || (getmntentry(NULL, mntname, NULL, FIND) != NULL && + getmntentry(NULL, mntname, NULL, CHECKUNIQUE) == NULL)) { + if (statfs(mntname, &sfsbuf) != 0) { + warn("%s: statfs", mntname); + } else if (stat(mntname, &sb) != 0) { + warn("%s: stat", mntname); } else if (S_ISDIR(sb.st_mode)) { - /* Check that `name' is the root directory. */ + /* Check that `mntname' is the root directory. */ dev = sb.st_dev; - snprintf(buf, sizeof(buf), "%s/..", name); + snprintf(buf, sizeof(buf), "%s/..", mntname); if (stat(buf, &sb) != 0) { warn("%s: stat", buf); } else if (sb.st_dev == dev) { warnx("%s: not a file system root directory", - name); + mntname); return (1); } else sfs = &sfsbuf; } } if (sfs == NULL) { - warnx("%s: unknown file system", name); + warnx("%s: unknown file system", mntname); return (1); } if (checkvfsname(sfs->f_fstypename, typelist)) @@ -469,15 +469,16 @@ getmntentry(const char *fromname, const char *onname, fsid_t *fsid, dowhat what) } int -sacmp(struct sockaddr *sa1, struct sockaddr *sa2) +sacmp(void *sa1, void *sa2) { void *p1, *p2; int len; - if (sa1->sa_family != sa2->sa_family) + if (((struct sockaddr *)sa1)->sa_family != + ((struct sockaddr *)sa2)->sa_family) return (1); - switch (sa1->sa_family) { + switch (((struct sockaddr *)sa1)->sa_family) { case AF_INET: p1 = &((struct sockaddr_in *)sa1)->sin_addr; p2 = &((struct sockaddr_in *)sa2)->sin_addr; @@ -520,18 +521,18 @@ namematch(struct addrinfo *ai) } struct statfs * -checkmntlist(char *name) +checkmntlist(char *mntname) { struct statfs *sfs; fsid_t fsid; sfs = NULL; - if (parsehexfsid(name, &fsid) == 0) + if (parsehexfsid(mntname, &fsid) == 0) sfs = getmntentry(NULL, NULL, &fsid, FIND); if (sfs == NULL) - sfs = getmntentry(NULL, name, NULL, FIND); + sfs = getmntentry(NULL, mntname, NULL, FIND); if (sfs == NULL) - sfs = getmntentry(name, NULL, NULL, FIND); + sfs = getmntentry(mntname, NULL, NULL, FIND); return (sfs); } @@ -587,7 +588,7 @@ xdr_dir(XDR *xdrsp, char *dirp) } void -usage() +usage(void) { (void)fprintf(stderr, "%s\n%s\n", diff --git a/secure/Makefile b/secure/Makefile index 7a78d947c55..7342709e1f7 100644 --- a/secure/Makefile +++ b/secure/Makefile @@ -7,8 +7,7 @@ SUBDIR= lib libexec usr.bin usr.sbin # These are the programs which depend on crypto, but not Kerberos. SPROGS= lib/libfetch lib/libpam lib/libradius lib/libtelnet \ bin/ed libexec/telnetd usr.bin/fetch usr.bin/telnet \ - usr.sbin/pkg_install usr.sbin/ppp usr.sbin/pppd \ - usr.sbin/tcpdump/tcpdump + usr.sbin/pkg_install usr.sbin/ppp usr.sbin/tcpdump/tcpdump .if ${MK_SENDMAIL} != "no" SPROGS+=usr.sbin/sendmail .endif diff --git a/secure/Makefile.inc b/secure/Makefile.inc index 7b9cb987e71..0bd84f1c02e 100644 --- a/secure/Makefile.inc +++ b/secure/Makefile.inc @@ -15,3 +15,5 @@ CFLAGS+= -DNO_IDEA .if ${MK_OPENSSH} != "no" SSHDIR= ${.CURDIR}/../../../crypto/openssh .endif + +WARNS?= 0 diff --git a/share/examples/Makefile b/share/examples/Makefile index b5e2ab3ac0a..315eb913519 100644 --- a/share/examples/Makefile +++ b/share/examples/Makefile @@ -24,13 +24,9 @@ LDIRS= BSD_daemon \ portal \ ppi \ ppp \ - pppd \ printing \ ses \ scsi_target \ - slattach \ - sliplogin \ - startslip \ sunrpc XFILES= BSD_daemon/FreeBSD.pfa \ @@ -88,6 +84,12 @@ XFILES= BSD_daemon/FreeBSD.pfa \ kld/dyn_sysctl/Makefile \ kld/dyn_sysctl/README \ kld/dyn_sysctl/dyn_sysctl.c \ + kld/firmware/Makefile \ + kld/firmware/README \ + kld/firmware/fwconsumer/Makefile \ + kld/firmware/fwconsumer/fw_consumer.c \ + kld/firmware/fwimage/Makefile \ + kld/firmware/fwimage/firmware.img \ kld/syscall/Makefile \ kld/syscall/module/Makefile \ kld/syscall/module/syscall.c \ @@ -129,16 +131,6 @@ XFILES= BSD_daemon/FreeBSD.pfa \ ppp/ppp.secret.sample \ ppp/ppp.secret.span-isp \ ppp/ppp.secret.span-isp.working \ - pppd/auth-down.sample \ - pppd/auth-up.sample \ - pppd/chap-secrets.sample \ - pppd/chat.sh.sample \ - pppd/ip-down.sample \ - pppd/ip-up.sample \ - pppd/options.sample \ - pppd/pap-secrets.sample \ - pppd/ppp.deny.sample \ - pppd/ppp.shells.sample \ printing/README \ printing/diablo-if-net \ printing/hpdf \ @@ -181,14 +173,6 @@ XFILES= BSD_daemon/FreeBSD.pfa \ scsi_target/scsi_target.h \ scsi_target/scsi_target.8 \ scsi_target/scsi_cmds.c \ - slattach/unit-command.sh \ - sliplogin/slip.hosts \ - sliplogin/slip.login \ - sliplogin/slip.logout \ - sliplogin/slip.slparms \ - startslip/sldown.sh \ - startslip/slip.sh \ - startslip/slup.sh \ sunrpc/Makefile \ sunrpc/dir/Makefile \ sunrpc/dir/dir.x \ diff --git a/share/examples/etc/make.conf b/share/examples/etc/make.conf index 1e08f79c8a9..631610acf0a 100644 --- a/share/examples/etc/make.conf +++ b/share/examples/etc/make.conf @@ -36,7 +36,6 @@ # pentium3m pentium3 pentium-m pentium2 # pentiumpro pentium-mmx pentium i486 i386 # (Via CPUs) c3 c3-2 -# Alpha/AXP architecture: ev67 ev6 pca56 ev56 ev5 ev45 ev4 # AMD64 architecture: opteron, athlon64, nocona, prescott, core2 # Intel ia64 architecture: itanium2, itanium # diff --git a/share/examples/pppd/auth-down.sample b/share/examples/pppd/auth-down.sample deleted file mode 100644 index b2da150dc04..00000000000 --- a/share/examples/pppd/auth-down.sample +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# -# Example for /etc/ppp/auth-down file. - -/usr/bin/logger -p daemon.notice -t pppd "User $2 is logged off" diff --git a/share/examples/pppd/auth-up.sample b/share/examples/pppd/auth-up.sample deleted file mode 100644 index 3d9c07e8034..00000000000 --- a/share/examples/pppd/auth-up.sample +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# -# Example for /etc/ppp/auth-up file. - -/usr/bin/logger -p daemon.notice -t pppd "User $2 is logged in" diff --git a/share/examples/pppd/chap-secrets.sample b/share/examples/pppd/chap-secrets.sample deleted file mode 100644 index 40d5dfdc86e..00000000000 --- a/share/examples/pppd/chap-secrets.sample +++ /dev/null @@ -1,17 +0,0 @@ -# $FreeBSD$ -# -# Example for /etc/ppp/chap-secrets file. -# -# This file should be owned by root and not readable or -# writable by any other user. -# -# Dialin format: -# -joe server password 192.168.0.0/24 192.168.2.2 -lisa server l1z4 * !192.168.0.1 -mike server secret * -luser server nopass - -# -# Dialout format: -# -jane isp password diff --git a/share/examples/pppd/chat.sh.sample b/share/examples/pppd/chat.sh.sample deleted file mode 100644 index 6418ebfdf6a..00000000000 --- a/share/examples/pppd/chat.sh.sample +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# -# Example for chat.sh file. - -INIT='at&f' - -dial(){ - /usr/bin/chat -v \ - ABORT "ERROR" \ - ABORT "NO DIALTONE" \ - TIMEOUT 5 \ - "" "AT" \ - "OK" "${INIT}" \ - "OK"-"+++"-"" "ATH" \ - ABORT "BUSY" \ - ABORT "NO ANSWER" \ - ABORT "NO CARRIER" \ - "OK" "ATDP$1" \ - TIMEOUT 70 \ - "ogin:" "username" \ - "word:" "pasword" \ - TIMEOUT 50 \ - "PPP" "\c" - - [ $? -eq 0 ] && exit 0 - - echo "$1 failed" 1>&2 - exit 1 -} - -dial 1234567 diff --git a/share/examples/pppd/ip-down.sample b/share/examples/pppd/ip-down.sample deleted file mode 100644 index 45b8eb45675..00000000000 --- a/share/examples/pppd/ip-down.sample +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# -# Example for /etc/ppp/ip-down file. - -/usr/bin/logger -p daemon.notice -t pppd "$1 is down" diff --git a/share/examples/pppd/ip-up.sample b/share/examples/pppd/ip-up.sample deleted file mode 100644 index a0fc1b02aaa..00000000000 --- a/share/examples/pppd/ip-up.sample +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -# -# $FreeBSD$ -# -# Example for /etc/ppp/ip-up file. - -/usr/bin/logger -p daemon.notice -t pppd "$1 is up" -/usr/sbin/ntpdate ntpserver diff --git a/share/examples/pppd/options.sample b/share/examples/pppd/options.sample deleted file mode 100644 index fd0a927c57c..00000000000 --- a/share/examples/pppd/options.sample +++ /dev/null @@ -1,16 +0,0 @@ -# $FreeBSD$ -# -# Example for /etc/ppp/options file. -# -/dev/cuad4 -115200 -modem -crtscts -asyncmap 0 -connect '/etc/ppp/chat.sh' -defaultroute -noipdefault -persist -holdoff 5 -mtu 250 -mru 250 diff --git a/share/examples/pppd/pap-secrets.sample b/share/examples/pppd/pap-secrets.sample deleted file mode 100644 index 8896bdd7a65..00000000000 --- a/share/examples/pppd/pap-secrets.sample +++ /dev/null @@ -1,17 +0,0 @@ -# $FreeBSD$ -# -# Example for /etc/ppp/pap-secrets file. -# -# This file should be owned by root and not readable or -# writable by any other user. -# -# Dialin format: -# -joe server password 192.168.0.1/24 192.168.2.2 -lisa server l1z4 * !192.168.0.1 -mike server secret * -luser server nopass - -# -# Dialout format: -# -jane isp password diff --git a/share/examples/pppd/ppp.deny.sample b/share/examples/pppd/ppp.deny.sample deleted file mode 100644 index 948e11527cd..00000000000 --- a/share/examples/pppd/ppp.deny.sample +++ /dev/null @@ -1,27 +0,0 @@ -# $FreeBSD$ -# -# list of users disallowed any pppd access via 'system -# password login'. -# read by pppd(8). -root -toor -daemon -operator -bin -tty -kmem -games -news -man -sshd -smmsp -mailnull -bind -proxy -_pflogd -_dhcp -ftp -uucp -pop -www -nobody diff --git a/share/examples/pppd/ppp.shells.sample b/share/examples/pppd/ppp.shells.sample deleted file mode 100644 index 93b68406c21..00000000000 --- a/share/examples/pppd/ppp.shells.sample +++ /dev/null @@ -1,14 +0,0 @@ -# $FreeBSD$ -# -# List of acceptable shells for pppd(8). -# Pppd will not accept a system password login -# by a user whose shell is not listed below. - -/bin/sh -/bin/csh -/bin/tcsh -/usr/local/bin/ksh -/usr/local/bin/zsh -/usr/local/bin/bash -/usr/local/bin/tcsh -/usr/local/bin/ppplogin.sh diff --git a/share/examples/slattach/unit-command.sh b/share/examples/slattach/unit-command.sh deleted file mode 100755 index 9e97ffdcd69..00000000000 --- a/share/examples/slattach/unit-command.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -old_unit=$1 -new_unit=$2 - -if [ $old_unit != -1 ]; then - ifconfig sl$old_unit delete down - if [ $new_unit == -1 ]; then - route delete default - fi -fi - -if [ $new_unit != -1 ]; then - ifconfig sl$new_unit - if [ $old_unit == -1 ]; then - route add default - fi -fi diff --git a/share/examples/sliplogin/slip.hosts b/share/examples/sliplogin/slip.hosts deleted file mode 100644 index b20d7c8b416..00000000000 --- a/share/examples/sliplogin/slip.hosts +++ /dev/null @@ -1,16 +0,0 @@ -# @(#)slip.hosts 8.1 (Berkeley) 6/6/93 -# -# option(s) consist of the following: (see the sliplogin man page) -# normal - no header compression -# compress - compress headers -# autocomp - compress headers if remote end allows it -# noicmp - disable ICMP packets (such as 'ping' or 'traceroute' packets) -# -#login local-address remote-address netmask option(s) -#------ ---------- ----------- ------- --------- -Schez vangogh chez 0xffffff00 compress -Sjun vangogh 128.32.130.36 0xffffff00 normal -Sleconte vangogh leconte 0xffffff00 compress -Sleeb vangogh leeb 0xffffff00 compress -Smjk vangogh pissaro-sl 0xffffff00 noicmp -Soxford vangogh oxford 0xffffff00 autocomp diff --git a/share/examples/sliplogin/slip.login b/share/examples/sliplogin/slip.login deleted file mode 100644 index 81102280acb..00000000000 --- a/share/examples/sliplogin/slip.login +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -# -# @(#)slip.login 8.1 (Berkeley) 6/6/93 - -# -# generic login file for a slip line. sliplogin invokes this with -# the parameters: -# 1 2 3 4 5 6 7-n -# slipunit ttyspeed loginname local-addr remote-addr mask opt-args -# -# Delete any arp table entries for this site, just in case -/usr/sbin/arp -d $5 -# Bringup the line -/sbin/ifconfig sl$1 inet $4 $5 netmask $6 -# Answer ARP request for the SLIP client with our Ethernet addr -# XXX - Must be filled in with the ethernet address of the local machine -# /usr/sbin/arp -s $5 00:00:c0:50:b9:0a pub -exit diff --git a/share/examples/sliplogin/slip.logout b/share/examples/sliplogin/slip.logout deleted file mode 100644 index b27fe09d099..00000000000 --- a/share/examples/sliplogin/slip.logout +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -# -# slip.logout - -# -# logout file for a slip line. sliplogin invokes this with -# the parameters: -# 1 2 3 4 5 6 7-n -# slipunit ttyspeed loginname local-addr remote-addr mask opt-args -# -/sbin/ifconfig sl$1 delete -# Remove the ARP table entry for the host -/usr/sbin/arp -d $5 -exit diff --git a/share/examples/sliplogin/slip.slparms b/share/examples/sliplogin/slip.slparms deleted file mode 100644 index a87c7c3cc7b..00000000000 --- a/share/examples/sliplogin/slip.slparms +++ /dev/null @@ -1,12 +0,0 @@ -# -# Additional SLIP configuration (for all login names). -# Use slip.slparms. for particular login. -# -# Format: -# keepalive [outfill [slunit]] -# (seconds) (seconds) (number) -# -# Default values: -# 0 0 -# -600 300 diff --git a/share/examples/startslip/sldown.sh b/share/examples/startslip/sldown.sh deleted file mode 100755 index 1f342a47b0c..00000000000 --- a/share/examples/startslip/sldown.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -/sbin/ifconfig $1 $2 -/sbin/route delete default diff --git a/share/examples/startslip/slip.sh b/share/examples/startslip/slip.sh deleted file mode 100755 index 2b4254e88f6..00000000000 --- a/share/examples/startslip/slip.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -# $FreeBSD$ -startslip -b 57600 -U ./slup.sh -D ./sldown.sh \ - -s atd -s atd -s atd \ - -h -t 60 -w 2 -W 20 /dev/cuad1 diff --git a/share/examples/startslip/slup.sh b/share/examples/startslip/slup.sh deleted file mode 100755 index 79cded33955..00000000000 --- a/share/examples/startslip/slup.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -myname= -gateway= -netmask=255.255.255.248 -tune1="link0 -link2" # force headers compression -tune2="mtu 296" # for FreeBSD 1.x host - -case $LINE in - 0) tune=$tune1;; # 1st phone connected - 1) tune=$tune2;; # 2nd phone connected - *) tune=;; # others -esac - -/sbin/ifconfig $1 $2 $tune -/sbin/ifconfig $1 inet $myname $gateway netmask $netmask -/sbin/route add default $gateway diff --git a/share/man/man3/queue.3 b/share/man/man3/queue.3 index 763ae42ed8d..234da680171 100644 --- a/share/man/man3/queue.3 +++ b/share/man/man3/queue.3 @@ -233,7 +233,7 @@ O(1) removal of any entry in the list. However: .Bl -enum -compact -offset indent .It -Each elements requires two pointers rather than one. +Each element requires two pointers rather than one. .It Code size and execution time of operations (except for removal) is about twice that of the singly-linked data-structures. diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile index defdf3ab276..30f2ca5d64d 100644 --- a/share/man/man4/Makefile +++ b/share/man/man4/Makefile @@ -15,6 +15,7 @@ MAN= aac.4 \ ${_acpi_toshiba.4} \ acpi_video.4 \ ${_acpi_wmi.4} \ + ada.4 \ adv.4 \ adw.4 \ ae.4 \ @@ -30,6 +31,7 @@ MAN= aac.4 \ ale.4 \ altq.4 \ amd.4 \ + ${_amdsbwd.4} \ ${_amdsmb.4} \ ${_amdtemp.4} \ amr.4 \ @@ -44,6 +46,7 @@ MAN= aac.4 \ ath_hal.4 \ atkbd.4 \ atkbdc.4 \ + ${_atp.4} \ audit.4 \ auditpipe.4 \ aue.4 \ @@ -198,6 +201,7 @@ MAN= aac.4 \ meteor.4 \ mfi.4 \ miibus.4 \ + mk48txx.4 \ mld.4 \ mlx.4 \ mly.4 \ @@ -608,9 +612,11 @@ _acpi_panasonic.4=acpi_panasonic.4 _acpi_sony.4= acpi_sony.4 _acpi_toshiba.4=acpi_toshiba.4 _acpi_wmi.4= acpi_wmi.4 +_amdsbwd.4= amdsbwd.4 _amdsmb.4= amdsmb.4 _amdtemp.4= amdtemp.4 _asmc.4= asmc.4 +_atp.4= atp.4 _coretemp.4= coretemp.4 _cpuctl.4= cpuctl.4 _dpms.4= dpms.4 @@ -642,6 +648,10 @@ _wpi.4= wpi.4 MLINKS+=lindev.4 full.4 .endif +.if ${MACHINE_ARCH} == "powerpc" +_atp.4= atp.4 +.endif + .if exists(${.CURDIR}/man4.${MACHINE_ARCH}) SUBDIR= man4.${MACHINE_ARCH} .endif diff --git a/share/man/man4/ada.4 b/share/man/man4/ada.4 new file mode 100644 index 00000000000..65cd53fc699 --- /dev/null +++ b/share/man/man4/ada.4 @@ -0,0 +1,138 @@ +.\" Copyright (c) 2009 Alexander Motin +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. +.\" +.\" $FreeBSD$ +.\" +.Dd November 19, 2009 +.Dt ADA 4 +.Os +.Sh NAME +.Nm ada +.Nd ATA Direct Access device driver +.Sh SYNOPSIS +.Cd device ada +.Sh DESCRIPTION +The +.Nm +driver provides support for direct access devices, implementing the +.Tn ATA +command protocol, that are attached to the system through a host adapter +supported by the CAM subsystem. +.Pp +The host adapter must also be separately configured into the system before an +.Tn ATA +direct access device can be configured. +.Sh COMMAND QUEUING +Command queueing allows the device to process multiple transactions +concurrently, often re-ordering them to reduce the number and length of +seeks. +.Tn ATA +defines two types of queueing: +.Tn TCQ (Tagged Command Queueing, PATA legacy) +and +.Tn NCQ (Native Command Queueing, SATA) . +The +.Nm +device driver takes full advantage of NCQ, when supported. +To ensure that transactions to distant parts of the media, +which may be deferred indefinitely by servicing requests closer to the current +head position, are completed in a timely fashion, an ordered +transaction is sent every 7 seconds during continuous device operation. +.Sh CACHE EFFECTS +Many direct access devices are equipped with read and/or write caches. +Parameters affecting the device's cache are reported in device IDENTIFY data +and can be examined and modified via the +.Xr camcontrol 8 +utility. +.Pp +The read cache is used to store data from device-initiated read ahead +operations as well as frequently used data. +The read cache is transparent +to the user and can be enabled without any adverse effect. +Most devices +with a read cache come from the factory with it enabled. +.Pp +The write cache can greatly decrease the latency of write operations +and allows the device to reorganize writes to increase efficiency and +performance. +This performance gain comes at a price. +Should the device +lose power while its cache contains uncommitted write operations, these +writes will be lost. +The effect of a loss of write transactions on +a file system is non-deterministic and can cause corruption. +Most +devices age write transactions to limit the vulnerability to a few transactions +recently reported as complete, but it is nonetheless recommended that +systems with write cache enabled devices reside on an Uninterruptible +Power Supply (UPS). +The +.Nm +device driver ensures that the cache and media are synchronized upon +final close of the device or an unexpected shutdown (panic) event. +This ensures that it is safe to disconnect power once the operating system +has reported that it has halted. +.Sh SYSCTL VARIABLES +The following variables are available as both +.Xr sysctl 8 +variables and +.Xr loader 8 +tunables: +.Bl -tag -width 12 +.It kern.cam.ada.retry_count +.Pp +This variable determines how many times the +.Nm +driver will retry a READ or WRITE command. +This does not affect the number of retries used during probe time or for +the +.Nm +driver dump routine. +This value currently defaults to 4. +.It kern.cam.ada.default_timeout +.Pp +This variable determines how long the +.Nm +driver will wait before timing out an outstanding command. +The units for this value are seconds, and the default is currently 30 +seconds. +.El +.Sh FILES +.Bl -tag -width ".Pa /dev/ada*" -compact +.It Pa /dev/ada* +ATA device nodes +.El +.Sh SEE ALSO +.Xr ad 4 , +.Xr ahci 4 , +.Xr da 4 , +.Xr siis 4 +.Sh HISTORY +The +.Nm +driver first appeared in +.Fx 8.0 . +.Sh AUTHORS +.An Alexander Motin Aq mav@FreeBSD.org diff --git a/share/man/man4/amdsbwd.4 b/share/man/man4/amdsbwd.4 new file mode 100644 index 00000000000..370cfa8220c --- /dev/null +++ b/share/man/man4/amdsbwd.4 @@ -0,0 +1,72 @@ +.\"- +.\" Copyright (c) 2009 Andriy Gapon +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. +.\" +.\" $FreeBSD$ +.\" +.Dd November 30, 2009 +.Dt AMDSBWD 4 +.Os +.Sh NAME +.Nm amdsbwd +.Nd device driver for the AMD SB600/SB700/SB710/SB750 watchdog timer +.Sh SYNOPSIS +To compile this driver into the kernel, +place the following line in your +kernel configuration file: +.Bd -ragged -offset indent +.Cd "device amdsbwd" +.Ed +.Pp +Alternatively, to load the driver as a +module at boot time, place the following line in +.Xr loader.conf 5 : +.Bd -literal -offset indent +amdsbwd_load="YES" +.Ed +.Sh DESCRIPTION +The +.Nm +driver provides +.Xr watchdog 4 +support for the watchdog timers present on +AMD SB600 and SB7xx south bridge chips. +.Sh SEE ALSO +.Xr watchdog 4 , +.Xr watchdog 8 , +.Xr watchdogd 8 , +.Xr watchdog 9 +.Sh HISTORY +The +.Nm +driver first appeared in +.Fx 9.0 . +.Sh AUTHORS +.An -nosplit +The +.Nm +driver was written by +.An Andiry Gapon Aq avg@FreeBSD.org . +This manual page was written by +.An Andiry Gapon Aq avg@FreeBSD.org . diff --git a/share/man/man4/ata.4 b/share/man/man4/ata.4 index f23a4d2be1a..303e63291bb 100644 --- a/share/man/man4/ata.4 +++ b/share/man/man4/ata.4 @@ -27,7 +27,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 6, 2009 +.Dd November 23, 2009 .Dt ATA 4 .Os .Sh NAME @@ -146,7 +146,7 @@ IT8211F, IT8212F, IT8213F. JMB360, JMB361, JMB363, JMB365, JMB366, JMB368. .It Marvell 88SX5040, 88SX5041, 88SX5080, 88SX5081, 88SX6041, 88SX6042, 88SX6081, 88SX6101, -88SX6141, 88SX7042. +88SX6102, 88SX6111, 88SX6121, 88SX6141, 88SX6145, 88SX7042. .It National: SC1100. .It NetCell: diff --git a/share/man/man4/atp.4 b/share/man/man4/atp.4 new file mode 100644 index 00000000000..670080253b0 --- /dev/null +++ b/share/man/man4/atp.4 @@ -0,0 +1,180 @@ +.\" Copyright (c) 2009 Rohit Grover . +.\" 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. +.\" 3. Neither the name of the author nor the names of any co-contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. +.\" +.\" $FreeBSD$ +.\" +.Dd November 12, 2009 +.Dt ATP 4 +.Os +.Sh NAME +.Nm atp +.Nd Apple touchpad driver +.Sh SYNOPSIS +To compile this driver into the kernel, place the following lines into +your kernel configuration file: +.Bd -ragged -offset indent +.Cd "device atp" +.Cd "device usb" +.Ed +.Pp +Alternatively, to load the driver as a +module at boot time, place the following line in +.Xr loader.conf 5 : +.Bd -literal -offset indent +atp_load="YES" +.Ed +.Sh DESCRIPTION +The +.Nm +driver provides support for the Apple Internal Trackpad +device found in many Apple laptops. +.Pp +The driver simulates a three\-button mouse using multi\-finger tap +detection. +. +A single\-finger tap generates a left button click; +two\-finger tap maps to the middle button; whereas a three\-finger tap +gets treated as a right button click. +. +A double\-tap followed by a drag is treated as a selection gesture; a +virtual left\-button click is assumed for the lifespan of the drag. +. +.Nm +attempts to filter away activity at the horizontal edges of the +trackpad\-\-this is to keep unintentional palm movement from being +considered as user input. +. +.Pp +.Nm +supports dynamic reconfiguration using +.Xr sysctl 8 ; +through nodes under +.Nm hw.usb.atp . +Pointer sensitivity can be controlled using the sysctl tunable +.Nm hw.usb.atp.scale_factor . +. +.Sh HARDWARE +The +.Nm +driver provides support for the following Product IDs: +.Pp +.Bl -bullet -compact +.It +Core Duo MacBook & MacBook Pro (IDs: 0x0217, 0x0218, 0x0219) +.It +Core2 Duo MacBook & MacBook Pro (IDs: 0x021a, 0x021b, 0x021c) +.It +Core2 Duo MacBook3,1 (IDs: 0x0229, 0x022a, 0x022b) +.It +12 inch PowerBook and iBook (IDs: 0x030a, 0x030b) +.It +15 inch PowerBook (IDs: 0x020e, 0x020f, 0x0215) +.It +17 inch PowerBook (ID: 0x020d) +.El +.Pp +To discover the product\-id of a touchpad, search for 'Trackpad' in the +output of +.Xr lshal 1 +and look up the property +.Nm usb_device.product_id . +.Sh FILES +.Nm +creates a blocking pseudo\-device file, +.Pa /dev/atp0 , +which presents the mouse as a +.Ar sysmouse +or +.Ar mousesystems +type device\-\-see +.Xr moused 8 +for an explanation of these mouse +types. +.Xr moused 8 +can be configured to read touchpad data from +.Pa /dev/atp0 +and pass it along to the +.Xr sysmouse 4 +driver so that any process wanting to utilize mouse operation (such as +an X server) may fetch it from +.Pa /dev/sysmouse ; +alternatively, +.Pa /dev/atp0 +may be manipulated via +.Xr read 2 +and +.Xr ioctl 2 +calls to get mouse data directly. +.Sh EXAMPLES +To use a compatible Apple Trackpad as your console mouse: +.Pp +.Dl moused -p /dev/atp0 -t auto +.Pp +To launch +.Xr moused 8 +automatically upon boot, add the following to +.Pa /etc/rc.conf : +.Pp +.Dl moused_enable="YES" +.Dl moused_type="auto" +.Dl moused_port="/dev/atp0" +.Pp +If you want +.Xr moused 8 +to also probe for external USB mice or other devices, then add the +following to +.Pa /etc/rc.conf : +.Pp +.Dl moused_nondefault_enable="YES" +.Dl moused_ums0_enable="YES" +.Dl moused_ums1_enable="YES" +.Pp +To be able to use the trackpad under X, change the "Pointer" section in +.Nm xorg.conf +to the following: +.Pp +.Dl Device "/dev/atp0" +.Dl Protocol "Auto" +.Pp +Better still, if you want to be able to use the mouse in both virtual +consoles as well as in X change it to: +.Pp +.Dl Device "/dev/sysmouse" +.Dl Protocol "Auto" +.Sh SEE ALSO +.Xr sysmouse 4 , +.Xr usb 4 , +.Xr loader.conf 5 , +.Xr xorg.conf 5 Pq Pa ports/x11/xorg , +.Xr moused 8 , +.Xr sysctl 8 . +.Sh AUTHORS +.An -nosplit +The +.Nm +driver was written by +.An Rohit Grover Aq rgrover1@gmail.com diff --git a/share/man/man4/gem.4 b/share/man/man4/gem.4 index 1a6ea4bec0f..314d95f81d0 100644 --- a/share/man/man4/gem.4 +++ b/share/man/man4/gem.4 @@ -33,7 +33,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 14, 2009 +.Dd December 25, 2009 .Dt GEM 4 .Os .Sh NAME @@ -150,7 +150,7 @@ by .Aq tmm@FreeBSD.org and later on improved by .An Marius Strobl -.Aq marus@FreeBSD.org . +.Aq marius@FreeBSD.org . The man page was written by .An Thomas Klausner .Aq wiz@NetBSD.org . diff --git a/share/man/man4/ifmib.4 b/share/man/man4/ifmib.4 index 3cffbeab181..3d12a96bea0 100644 --- a/share/man/man4/ifmib.4 +++ b/share/man/man4/ifmib.4 @@ -27,7 +27,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 15, 1996 +.Dd October 28, 2009 .Dt IFMIB 4 .Os .Sh NAME @@ -165,12 +165,6 @@ interfaces, the structure is called and implements a superset of the .Tn "RFC 1650" MIB for Ethernet-like networks. -.\" This will eventually be defined in an ethermib(4) page. -For -.Dv IFT_SLIP , -the structure is a -.Dq Li struct sl_softc -.Pq In net/if_slvar.h . .Sh SEE ALSO .Xr sysctl 3 , .Xr intro 4 , diff --git a/share/man/man4/ipsec.4 b/share/man/man4/ipsec.4 index 47ccdb1082b..112fadb9522 100644 --- a/share/man/man4/ipsec.4 +++ b/share/man/man4/ipsec.4 @@ -29,7 +29,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 23, 2009 +.Dd November 29, 2009 .Dt IPSEC 4 .Os .Sh NAME @@ -215,7 +215,7 @@ To selectively enable/disable protocols, use .It Sy "Name Default" .It "net.inet.esp.esp_enable On" .It "net.inet.ah.ah_enable On" -.It "net.inet.ipcomp.ipcomp_enable Off" +.It "net.inet.ipcomp.ipcomp_enable On" .El .Pp In addition the following variables are accessible via @@ -408,6 +408,8 @@ size may alleviate this problem. .Pp The .Tn IPcomp -protocol support is currently broken. +protocol may occasionally error because of +.Xr zlib 3 +problems. .Pp This documentation needs more review. diff --git a/share/man/man4/iwnfw.4 b/share/man/man4/iwnfw.4 index c7ff0666ce9..700d20ab40e 100644 --- a/share/man/man4/iwnfw.4 +++ b/share/man/man4/iwnfw.4 @@ -60,4 +60,4 @@ It may be statically linked into the kernel, or loaded as a module. .Sh SEE ALSO .Xr iwn 4 , -.Xr firmware 8 +.Xr firmware 9 diff --git a/share/man/man4/man4.powerpc/Makefile b/share/man/man4/man4.powerpc/Makefile index 8d9977186c0..d213d83fe68 100644 --- a/share/man/man4/man4.powerpc/Makefile +++ b/share/man/man4/man4.powerpc/Makefile @@ -1,6 +1,10 @@ # $FreeBSD$ -MAN= bm.4 \ +MAN= adb.4 \ + akbd.4 \ + ams.4 \ + bm.4 \ + cuda.4 \ pmu.4 \ powermac_nvram.4 \ snd_ai2s.4 \ diff --git a/share/man/man4/man4.powerpc/adb.4 b/share/man/man4/man4.powerpc/adb.4 new file mode 100644 index 00000000000..eb34ecaf0c4 --- /dev/null +++ b/share/man/man4/man4.powerpc/adb.4 @@ -0,0 +1,70 @@ +.\"- +.\" Copyright (c) 2009 Nathan Whitehorn +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd December 3, 2009 +.Dt ADB 4 +.Os +.Sh NAME +.Nm adb +.Nd Apple Desktop Bus +.Sh SYNOPSIS +To compile this driver into the kernel, +place the following lines in your +kernel configuration file: +.Bd -ragged -offset indent +.Cd "device adb" +.Ed +.Sh DESCRIPTION +The +.Nm +driver provides support for the Apple Desktop Bus, which is a simple +multi-drop bus used in general for input peripherals in older Apple +Macintosh hardware. +.Pp +The Apple Desktop Bus provides attachment for up to 16 devices, +including multiple devices of a single type, but not does support +hot-plugging. +.Sh SEE ALSO +Apple Tech Note HW01: ADB - The Untold Story: Space Aliens Ate My Mouse: +.Pa http://developer.apple.com/legacy/mac/library/technotes/hw/hw_01.html +.Pp +.Xr akbd 4 , +.Xr ams 4 , +.Xr cuda 4 , +.Xr pmu 4 +.Sh HISTORY +The +.Nm +device driver appeared in +.Fx 8.0 . +.Sh AUTHORS +.An -nosplit +The +.Nm +driver was written by +.An Nathan Whitehorn +.Aq nwhitehorn@FreeBSD.org . diff --git a/share/man/man4/man4.powerpc/akbd.4 b/share/man/man4/man4.powerpc/akbd.4 new file mode 100644 index 00000000000..aea2fa01f50 --- /dev/null +++ b/share/man/man4/man4.powerpc/akbd.4 @@ -0,0 +1,76 @@ +.\"- +.\" Copyright (c) 2009 Nathan Whitehorn +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd December 3, 2009 +.Dt AKBD 4 +.Os +.Sh NAME +.Nm akbd +.Nd ADB Keyboard Driver +.Sh SYNOPSIS +To compile this driver into the kernel, +place the following lines in your +kernel configuration file: +.Bd -ragged -offset indent +.Cd "device adb" +.Ed +.Sh DESCRIPTION +The +.Nm +driver provides support for all keyboards attached to the Apple Desktop +Bus (ADB). +.Sh HARDWARE +Devices supported by the +.Nm +driver include: +.Pp +.Bl -bullet -compact +.It +Apple Extended Keyboard +.It +Apple Keyboard II +.It +Apple iBook Keyboard +.It +Apple PowerBook Keyboard +.El +.Sh SEE ALSO +.Xr adb 4 , +.Xr cuda 4 , +.Xr pmu 4 +.Sh HISTORY +The +.Nm +device driver appeared in +.Fx 8.0 . +.Sh AUTHORS +.An -nosplit +The +.Nm +driver was written by +.An Nathan Whitehorn +.Aq nwhitehorn@FreeBSD.org . diff --git a/share/man/man4/man4.powerpc/ams.4 b/share/man/man4/man4.powerpc/ams.4 new file mode 100644 index 00000000000..15560cf3d9e --- /dev/null +++ b/share/man/man4/man4.powerpc/ams.4 @@ -0,0 +1,87 @@ +.\"- +.\" Copyright (c) 2009 Nathan Whitehorn +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd December 3, 2009 +.Dt AMS 4 +.Os +.Sh NAME +.Nm ams +.Nd ADB Mouse Driver +.Sh SYNOPSIS +To compile this driver into the kernel, +place the following lines in your +kernel configuration file: +.Bd -ragged -offset indent +.Cd "device adb" +.Ed +.Sh DESCRIPTION +The +.Nm +driver provides support for mice and trackpads attached to the Apple Desktop +Bus (ADB) implementing both the base and extended ADB mouse protocols. +.Sh HARDWARE +Devices supported by the +.Nm +driver include: +.Pp +.Bl -bullet -compact +.It +Apple Mouse +.It +ADB Extended Mouse +.It +MacAlly 2-Button Mouse +.It +Apple iBook Trackpad +.It +Apple PowerBook Trackpad +.El +.Sh SYSCTL VARIABLES +.Bl -tag -width indent +.It Va dev.ams.%d.tapping +On ADB trackpads, setting this sysctl to 1 causes taps on the trackpad to +be interpreted as button clicks. +.El +.Sh SEE ALSO +Apple Tech Note HW01: ADB - The Untold Story: Space Aliens Ate My Mouse: +.Pa http://developer.apple.com/legacy/mac/library/technotes/hw/hw_01.html +.Pp +.Xr adb 4 , +.Xr cuda 4 , +.Xr pmu 4 +.Sh HISTORY +The +.Nm +device driver appeared in +.Fx 8.0 . +.Sh AUTHORS +.An -nosplit +The +.Nm +driver was written by +.An Nathan Whitehorn +.Aq nwhitehorn@FreeBSD.org . diff --git a/share/man/man4/man4.powerpc/cuda.4 b/share/man/man4/man4.powerpc/cuda.4 new file mode 100644 index 00000000000..4b4b2180cce --- /dev/null +++ b/share/man/man4/man4.powerpc/cuda.4 @@ -0,0 +1,79 @@ +.\"- +.\" Copyright (c) 2009 Nathan Whitehorn +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.\" $FreeBSD$ +.\" +.Dd December 3, 2009 +.Dt CUDA 4 +.Os +.Sh NAME +.Nm cuda +.Nd Apple CUDA I/O Controller Driver +.Sh SYNOPSIS +To compile this driver into the kernel, +place the following lines in your +kernel configuration file: +.Bd -ragged -offset indent +.Cd "device adb" +.Cd "device cuda" +.Ed +.Sh DESCRIPTION +The +.Nm +driver provides support for the CUDA VIA (Versatile Interface Attachment) +chip found in pre-Core99 Apple hardware, such as the Power Macintosh G3. +.Pp +The Apple CUDA controller is a multi-purpose ASIC that provides power +control and an +.Xr adb 4 +interface. +.Sh HARDWARE +Chips supported by the +.Nm +driver include: +.Pp +.Bl -bullet -compact +.It +Apple CUDA I/O Controller +.El +.Sh SEE ALSO +.Xr adb 4 +.Sh HISTORY +The +.Nm +device driver appeared in +.Nx 4.0 , +and then in +.Fx 8.0 . +.Sh AUTHORS +.An -nosplit +The +.Nm +driver was written by +.An Michael Lorenz +.Aq macallan@NetBSD.org +and ported to FreeBSD by +.An Nathan Whitehorn +.Aq nwhitehorn@FreeBSD.org . diff --git a/share/man/man4/man4.powerpc/pmu.4 b/share/man/man4/man4.powerpc/pmu.4 index 872f8ac3d9c..ab998772a6f 100644 --- a/share/man/man4/man4.powerpc/pmu.4 +++ b/share/man/man4/man4.powerpc/pmu.4 @@ -95,7 +95,8 @@ Current fraction of the battery's maximum charge, in percent. .El .Sh SEE ALSO .Xr acpi 4 , -.Xr adb 4 +.Xr adb 4 , +.Xr led 4 .Sh HISTORY The .Nm diff --git a/share/man/man4/mfi.4 b/share/man/man4/mfi.4 index 8ab8d938100..d34eb273f24 100644 --- a/share/man/man4/mfi.4 +++ b/share/man/man4/mfi.4 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 15, 2009 +.Dd January 2, 2010 .Dt MFI 4 .Os .Sh NAME @@ -79,15 +79,21 @@ driver supports the following hardware: .Pp .Bl -bullet -compact .It +LSI MegaRAID SAS 1078 +.It LSI MegaRAID SAS 8408E .It LSI MegaRAID SAS 8480E .It -LSI MegaRAID SAS 1078 +LSI MegaRAID SAS 9260 .It Dell PERC5 .It Dell PERC6 +.It +IBM ServeRAID-MR10i +.It +Intel RAID Controller SROMBSAS18E .El .Sh FILES .Bl -tag -width ".Pa /dev/mfid?" -compact diff --git a/share/man/man4/mk48txx.4 b/share/man/man4/mk48txx.4 new file mode 100644 index 00000000000..5706924bfcf --- /dev/null +++ b/share/man/man4/mk48txx.4 @@ -0,0 +1,230 @@ +.\" $NetBSD: mk48txx.4,v 1.16 2009/04/10 17:14:07 joerg Exp $ +.\" +.\" Copyright (c) 2000, 2002 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to The NetBSD Foundation +.\" by Paul Kranenburg. +.\" +.\" 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. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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. +.\" +.\" $FreeBSD$ +.\" +.Dd December 25, 2009 +.Dt MK48TXX 4 +.Os +.Sh NAME +.Nm mk48txx +.Nd +.Tn Mostek +time-of-day clock driver +.Sh SYNOPSIS +.In sys/eventhandler.h +.In sys/lock.h +.In sys/mutex.h +.In dev/mk48txx/mk48txxvar.h +.Pp +To compile this driver into the kernel, +place the following line in your +kernel configuration file: +.Bd -ragged -offset indent +.Cd "device mk48txx" +.Ed +.Sh DESCRIPTION +The +.Nm +driver is a back-end for several models of +.Tn Mostek +time-of-day clock chips. +It provides access methods to retrieve and set date and time for use with the +.Dq Li clock +KOBJ interface. +.Pp +To tie an instance of this device to the system, use the +.Fn mk48txx_attach +function and the mk48txx_softc structure defined as follows: +.Pp +.Ft "int" +.Fn mk48txx_attach "device_t dev" +.Pp +.Bd -literal +typedef uint8_t (*mk48txx_nvrd_t)(device_t dev, int off); +typedef void (*mk48txx_nvwr_t)(device_t dev, int off, uint8_t v); +.Ed +.Bd -literal +struct mk48txx_softc { + struct resource sc_res; + struct mtx sc_mtx; + eventhandler_tag sc_wet; + const char *sc_model; + bus_size_t sc_nvramsz; + bus_size_t sc_clkoffset; + u_int sc_year0; + u_int sc_flag; + mk48txx_nvrd_t sc_nvrd; + mk48txx_nvwr_t sc_nvwr; +}; +.Ed +.Pp +.Bl -tag -width indent +.It Fa sc_res +The bus resource used for accessing the chip's non-volatile memory +.Pq including the clock registers , +which must be supplied by the front-end when using the default access methods +.Pq see below . +Otherwise this member is optional. +.It Fa sc_mtx +The hardware mutex used when accessing the chip's non-volatile memory +.Pq including the clock registers , +which must be initialized with +.Dv MTX_DEF +by the front-end. +.It Fa sc_wet +The event handler tag for the watchdog functionality, +which is registered by the +.Fn mk48txx_attach +function if supported by the chip and specified as part of the +machine-dependent features +.Pq see below . +.It Fa sc_model +The chip model which this instance should serve. +This member must be set to one of +.Dq mk48t02 , +.Dq mk48t08 , +.Dq mk48t18 , +or +.Dq mk48t59 +by the front-end. +.It Fa sc_nvramsz +The size of the non-volatile RAM in the +.Tn Mostek +chip, +which is set by the +.Fn mk48txx_attach +function. +.It Fa sc_clkoffset +The offset into the control registers of the +.Tn Mostek +chip, +which is set by the the +.Fn mk48txx_attach +function. +.It Fa sc_year0 +The year offset to be used with the +.Sq year +counter of the clock, +which must be set by the front-end. +This value is generally dependent on the system configuration in which +the clock device is mounted. +For instance, on +.Tn Sun Microsystems +machines the convention is to have clock's two-digit year represent +the year since 1968. +.It Fa sc_flag +This flag is used to specify machine-dependent features. +The following flags are supported: +.Bl -tag -width ".Dv MK48TXX_WDOG_ENABLE_WDS" +.It Dv MK48TXX_NO_CENT_ADJUST +If the resulting date retrieved with the +.Dq Li clock_gettime() method +would be earlier than January 1, 1970, +the driver will assume that the chip's year counter actually represents a +year in the 21st century. +This behavior can be overridden by setting this flag, +which causes the +.Nm +driver to respect the clock's century bit instead. +.It Dv MK48TXX_WDOG_REGISTER +When this flag is set, +the +.Nm +driver will register as a watchdog via the interface defined in +.Xr 9 watchdog +if supported by the specific chip model. +.It Dv MK48TXX_WDOG_ENABLE_WDS +When this flag is set, +the +.Nm +driver will set the watchdog steering +.Pq WDS +bit when enabling the watchdog functionality of the chip. +enabled +.Pq see the chip documentation for further information regarding the WDS bit . +.El +.It Fa sc_nvread +.It Fa sc_nvwrite +These members specify the access methods for reading respectively writing +clock device registers. +The default, +when +.Dv NULL +is passed as an access method, +is to access the chip memory +.Pq and clock registers +as if they were direct-mapped using the specified bus resource. +.Pp +Otherwise, the driver will call the respective function supplied by the +front-end to perform the access, +passing it the offset +.Va off +of the chip memory +.Pq or clock register +location to be read from or written to, respectively. +.El +.Sh HARDWARE +The following models are supported: +.Pp +.Bl -tag -width indent -offset indent -compact +.It Tn Mostek MK48T02 +.It Tn Mostek MK48T08 +.It Tn Mostek MK48T18 +.It Tn Mostek MK48T59 +.El +.Sh SEE ALSO +.Xr intro 4 , +.Xr watchdog 9 +.Sh HISTORY +The +.Nm mk48txx +driver appeared in +.Nx 1.5 . +The first +.Fx +version to include it was +.Fx 5.0 . +.Sh AUTHORS +.An -nosplit +The +.Nm +driver was written for +.Nx +by +.An Paul Kranenburg +.Aq pk@NetBSD.org . +It was ported to +.Fx +by +.An Thomas Moestl +.Aq tmm@FreeBSD.org +and later on improved by +.An Marius Strobl +.Aq marius@FreeBSD.org . diff --git a/share/man/man4/mwlfw.4 b/share/man/man4/mwlfw.4 index e2a9c5362ef..5e557bfc307 100644 --- a/share/man/man4/mwlfw.4 +++ b/share/man/man4/mwlfw.4 @@ -49,4 +49,4 @@ It may be statically linked into the kernel, or loaded as a module. .Sh SEE ALSO .Xr mwl 4 , -.Xr firmware 8 +.Xr firmware 9 diff --git a/share/man/man4/netintro.4 b/share/man/man4/netintro.4 index aa38429c00c..f5d479bc18c 100644 --- a/share/man/man4/netintro.4 +++ b/share/man/man4/netintro.4 @@ -32,7 +32,7 @@ .\" @(#)netintro.4 8.2 (Berkeley) 11/30/93 .\" $FreeBSD$ .\" -.Dd November 11, 2009 +.Dd June 18, 2004 .Dt NETINTRO 4 .Os .Sh NAME @@ -277,25 +277,6 @@ and fields of the .Vt ifreq structure, respectively. -.It Dv SIOCGIFDESCR -Get the interface description, returned in the -.Va buffer -field of -.Va ifru_buffer -struct. -The user supplied buffer length should defined in the -.Va length -field of -.Va ifru_buffer -struct passed in as parameter. -.It Dv SIOCSIFDESCR -Set the interface description to the value of the -.Va buffer -field of -.Va ifru_buffer -struct, with -.Va length -field specifying its length. .It Dv SIOCSIFFLAGS Set interface flags field. If the interface is marked down, diff --git a/share/man/man4/psm.4 b/share/man/man4/psm.4 index 01cbd9c0e03..48a87525f5e 100644 --- a/share/man/man4/psm.4 +++ b/share/man/man4/psm.4 @@ -359,6 +359,18 @@ at boot-time. This will enable .Nm to handle packets from guest devices (sticks) and extra buttons. +.Pp +Tap and drag gestures can be disabled by setting +.Va hw.psm.tap_enabled +to +.Em 0 +at boot-time. +Currently, this is only supported on Synaptics touchpads with Extended +support disabled. The behaviour may be changed after boot by setting +the sysctl with the same name and by restarting +.Xr moused 8 +using +.Pa /etc/rc.d/moused . .Sh IOCTLS There are a few .Xr ioctl 2 diff --git a/share/man/man4/sctp.4 b/share/man/man4/sctp.4 index d5f4d3c5b31..226fc3cefc7 100644 --- a/share/man/man4/sctp.4 +++ b/share/man/man4/sctp.4 @@ -179,7 +179,7 @@ supports a number of socket options which can be set with and tested with .Xr getsockopt 2 or -.Xr sctp_opt_info 2 : +.Xr sctp_opt_info 3 : .Bl -tag -width ".Dv SCTP_SET_PEER_PRIMARY_ADDR" .It Dv SCTP_NODELAY Under most circumstances, diff --git a/share/man/man4/snd_hda.4 b/share/man/man4/snd_hda.4 index dacc5146be7..4734f45f5c0 100644 --- a/share/man/man4/snd_hda.4 +++ b/share/man/man4/snd_hda.4 @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 7, 2009 +.Dd November 13, 2009 .Dt SND_HDA 4 .Os .Sh NAME @@ -59,7 +59,7 @@ driver that allows the generic audio driver, to be used with this hardware. Only audio functions are supported by .Nm . -Modem, HDMI and other possible functions are not implemented. +Modem and other possible functions are not implemented. .Pp The .Nm @@ -500,6 +500,14 @@ nVidia MCP68 .It nVidia MCP69 .It +nVidia MCP73 +.It +nVidia MCP78 +.It +nVidia MCP79 +.It +nVidia MCP89 +.It SiS 966 .It VIA VT8251/8237A @@ -626,5 +634,11 @@ trying to fix problem that way, make sure that problem is really exists and the PCM audio device you are using really corresponds to expected audio connector. .Pp +Some vendors use non-standardized General Purpose I/O (GPIO) pins of codec +to control external amplifiers. In some cases setting proper combination of +GPIO bits may be needed to make sound work on specific device. +.Pp +HDMI and DisplayPort audio may also require support from video driver. +.Pp Due to OSS limitation multichannel (not multidevice) playback is not supported. diff --git a/share/man/man4/ste.4 b/share/man/man4/ste.4 index 1e652df8df6..b5ea1abe777 100644 --- a/share/man/man4/ste.4 +++ b/share/man/man4/ste.4 @@ -30,7 +30,7 @@ .\" .\" $FreeBSD$ .\" -.Dd July 16, 2005 +.Dd December 24, 2009 .Dt STE 4 .Os .Sh NAME @@ -126,6 +126,23 @@ D-Link DFE-550TX .It D-Link DFE-580TX .El +.Sh SYSCTL VARIABLES +The following variables are available as both +.Xr sysctl 8 +variables and +.Xr loader 8 +tunables: +.Bl -tag -width "xxxxxx" +.It Va dev.ste.%d.int_rx_mod +Maximum number of time to delay RX interrupts. +The valid range is 0 to 209712 in units of 1us, the default is +150 (150us). +The value 0 effectively disables the RX interrupt moderation. +The resolution of of timer is about 3.2us so finer tuning than +3.2us wouldn't be available. +The interface does not need to be brought down and up again before +a change takes effect. +.El .Sh DIAGNOSTICS .Bl -diag .It "ste%d: couldn't map ports/memory" @@ -171,6 +188,7 @@ the card should be configured correctly. .Xr netintro 4 , .Xr ng_ether 4 , .Xr polling 4 , +.Xr vlan 4 , .Xr ifconfig 8 .Rs .%T Sundance ST201 data sheet diff --git a/share/man/man4/termios.4 b/share/man/man4/termios.4 index cda16731235..5e589b102ff 100644 --- a/share/man/man4/termios.4 +++ b/share/man/man4/termios.4 @@ -32,7 +32,7 @@ .\" @(#)termios.4 8.4 (Berkeley) 4/19/94 .\" $FreeBSD$ .\" -.Dd August 20, 2008 +.Dd December 26, 2009 .Dt TERMIOS 4 .Os .Sh NAME @@ -1577,3 +1577,10 @@ after is set according to the values in the header .In sys/ttydefaults.h . +.Sh SEE ALSO +.Xr stty 1 , +.Xr tcgetsid 3 , +.Xr tcsendbreak 3 , +.Xr tcsetattr 3 , +.Xr tcsetsid 3 , +.Xr tty 4 diff --git a/share/man/man4/tty.4 b/share/man/man4/tty.4 index 6e8cd8ee329..6e7c8527684 100644 --- a/share/man/man4/tty.4 +++ b/share/man/man4/tty.4 @@ -32,7 +32,7 @@ .\" @(#)tty.4 8.3 (Berkeley) 4/19/94 .\" $FreeBSD$ .\" -.Dd June 27, 2007 +.Dd December 26, 2009 .Dt TTY 4 .Os .Sh NAME @@ -88,47 +88,6 @@ The remainder of this man page is concerned with describing details of using and controlling terminal devices at a low level, such as that possibly required by a program wishing to provide features similar to those provided by the system. -.Ss Line disciplines -A terminal file is used like any other file in the system in that -it can be opened, read, and written to using standard system -calls. -For each existing terminal file, there is a software processing module -called a -.Em "line discipline" -is associated with it. -The -.Em "line discipline" -essentially glues the low level device driver code with the high -level generic interface routines (such as -.Xr read 2 -and -.Xr write 2 ) , -and is responsible for implementing the semantics associated -with the device. -When a terminal file is first opened by a program, the default -.Em "line discipline" -called the -.Dv termios -line discipline is associated with the file. -This is the primary -line discipline that is used in most cases and provides the semantics -that users normally associate with a terminal. -When the -.Dv termios -line discipline is in effect, the terminal file behaves and is -operated according to the rules described in -.Xr termios 4 . -Please refer to that man page for a full description of the terminal -semantics. -The operations described here -generally represent features common -across all -.Em "line disciplines" , -however some of these calls may not -make sense in conjunction with a line discipline other than -.Dv termios , -and some may not be supported by the underlying -hardware (or lack thereof, as in the case of ptys). .Ss Terminal File Operations All of the following operations are invoked using the .Xr ioctl 2 @@ -154,39 +113,24 @@ parameter (if any) are listed. For example, the first entry says .Pp -.D1 Em "TIOCSETD int *ldisc" +.D1 Em "TIOCSPGRP int *tpgrp" .Pp and would be called on the terminal associated with file descriptor zero by the following code fragment: .Bd -literal - int ldisc; + int pgrp; - ldisc = TTYDISC; - ioctl(0, TIOCSETD, &ldisc); + pgrp = getpgrp(); + ioctl(0, TIOCSPGRP, &pgrp); .Ed .Ss Terminal File Request Descriptions .Bl -tag -width TIOCGWINSZ .It Dv TIOCSETD Fa int *ldisc -Change to the new line discipline pointed to by +This call is obsolete but left for compatibility. +Before +.Fx 8.0 , +it would change to the new line discipline pointed to by .Fa ldisc . -The available line disciplines are listed in -.In sys/ttycom.h -and currently are: -.Pp -.Bl -tag -width NETGRAPHDISC -compact -.It TTYDISC -Termios interactive line discipline. -.It TABLDISC -Tablet line discipline. -.It SLIPDISC -Serial IP line discipline. -.It PPPDISC -PPP line discipline. -.It NETGRAPHDISC -Netgraph -.Xr ng_tty 4 -line discipline. -.El .Pp .It Dv TIOCGETD Fa int *ldisc Return the current line discipline in the integer pointed to by diff --git a/share/man/man4/u3g.4 b/share/man/man4/u3g.4 index 2b63c5e124c..47a34a117ae 100644 --- a/share/man/man4/u3g.4 +++ b/share/man/man4/u3g.4 @@ -76,7 +76,7 @@ Sierra MC875U, MC8775U, etc. for the complete list of supported cards for each vendor mentioned above.) .Pp -The supported 3G cards provide the necessary modem port for ppp, pppd, or mpd +The supported 3G cards provide the necessary modem port for ppp, or mpd connections as well as extra ports (depending on the specific device) to provide other functions (additional command port, diagnostic port, SIM toolkit port). diff --git a/share/man/man4/ucom.4 b/share/man/man4/ucom.4 index 5d531e43c7b..c060cacace6 100644 --- a/share/man/man4/ucom.4 +++ b/share/man/man4/ucom.4 @@ -68,7 +68,7 @@ driver shows a behavior like a This means that normal programs such as .Xr tip 1 or -.Xr pppd 8 +.Xr ppp 8 can be used to access the device. .Pp The diff --git a/share/man/man4/vge.4 b/share/man/man4/vge.4 index 2e9c7a57488..7efc99ee121 100644 --- a/share/man/man4/vge.4 +++ b/share/man/man4/vge.4 @@ -30,12 +30,12 @@ .\" .\" $FreeBSD$ .\" -.Dd February 21, 2007 +.Dd December 18, 2009 .Dt VGE 4 .Os .Sh NAME .Nm vge -.Nd "VIA Networking Technologies VT6122 PCI Gigabit Ethernet adapter driver" +.Nd "VIA Networking Technologies Velocity Gigabit Ethernet adapter driver" .Sh SYNOPSIS To compile this driver into the kernel, place the following lines in your @@ -55,22 +55,23 @@ if_vge_load="YES" The .Nm driver provides support for various NICs and embedded Ethernet interfaces -based on the VIA Networking Technologies VT6122 Gigabit Ethernet -controller chips. +based on the VIA Technologies VT6120, VT6122, VT6130 and VT6132 Velocity +Family Gigabit Ethernet controller chips. .Pp -The VT6122 is a 33/66Mhz 64-bit PCI device which combines a tri-speed MAC with -an integrated 10/100/1000 copper PHY. +The VT6120/VT6122 is a 33/66Mhz 64-bit PCI device which combines a tri-speed +MAC with an integrated 10/100/1000 copper PHY. (Some older cards use an external PHY.) +The VT6130/VT6132 is the PCI express version of Velocity family. The MAC supports TCP/IP hardware checksums (IPv4 only), TCP large send, VLAN tag insertion and stripping, as well as VLAN filtering, a 64-entry CAM filter and a 64-entry VLAN filter, 64-bit multicast hash filter, 4 separate transmit DMA queues, flow control and jumbo frames up to 16K in size. -The VT6122 has a 16K receive FIFO and 48K transmit FIFO. +The Velocity family controllers have a 16K receive FIFO and 48K transmit FIFO. .Pp The .Nm -driver takes advantage of the VT6122's checksum offload and VLAN +driver takes advantage of the controller's checksum offload and VLAN tagging features, as well as the jumbo frame and CAM filter support. The CAM filter is used for multicast address filtering to provide 64 perfect multicast address filter support. @@ -162,7 +163,7 @@ For more information on configuring this device, see .Sh HARDWARE The .Nm -driver supports VIA Networking VT3119 and VT6122 based +driver supports VIA Networking VT6120, VT6122, VT6130 and VT6132 based Gigabit Ethernet adapters including: .Pp .Bl -bullet -compact @@ -173,6 +174,38 @@ ZyXEL GN650-T 64-bit PCI Gigabit Ethernet NIC (ZX1701) .It ZyXEL GN670-T 32-bit PCI Gigabit Ethernet NIC (ZX1702) .El +.Sh LOADER TUNABLES +Tunables can be set at the +.Xr loader 8 +prompt before booting the kernel or stored in +.Xr loader.conf 5 . +.Bl -tag -width "xxxxxx" +.It Va hw.vge.msi_disable +This tunable disables MSI support on the Ethernet hardware. +The default value is 0. +.El +.Sh SYSCTL VARIABLES +The following variables are available as both +.Xr sysctl 8 +variables and +.Xr loader 8 +tunables: +.Bl -tag -width "xxxxxx" +.It Va dev.vge.%d.int_holdoff +Maximum number of time to delay interrupts. +The valid range is 0 to 5100 in units of 1us, the default is +150 (150us). +The resolution of of timer is about 20us so finer tuning than +20us wouldn't be available. +The interface should be brought down and up again before a change +takes effect. +.It Va dev.vge.%d.rx_coal_pkt +Maximum number of packets to fire Rx completion interrupt. +The valid range is 1 to 255, the default is 64. +.It Va dev.vge.%d.tx_coal_pkt +Maximum number of packets to fire Tx completion interrupt. +The valid range is 1 to 255, the default is 128. +.El .Sh DIAGNOSTICS .Bl -diag .It "vge%d: couldn't map memory" diff --git a/share/man/man4/watchdog.4 b/share/man/man4/watchdog.4 index f19f3a60f6e..b0a52b17990 100644 --- a/share/man/man4/watchdog.4 +++ b/share/man/man4/watchdog.4 @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 25, 2003 +.Dd December 21, 2009 .Dt WATCHDOG 4 .Os .Sh NAME @@ -62,8 +62,10 @@ The .Xr ioctl 2 call will return success if just one of the available .Xr watchdog 9 -implementations supports setting the timeout to the specified timeout. This -means that at least one watchdog is armed. If the call fails, for instance if +implementations supports setting the timeout to the specified timeout. +This +means that at least one watchdog is armed. +If the call fails, for instance if none of .Xr watchdog 9 implementations support the timeout length, all watchdogs are disabled and must @@ -71,19 +73,20 @@ be explicitly re-enabled. .Pp To disable the watchdogs pass .Dv WD_TO_NEVER . -If disarming the watchdog(s) failed an error is returned. The watchdog might +If disarming the watchdog(s) failed an error is returned. +The watchdog might still be armed! .Sh RETURN VALUES The ioctl returns zero on success and non-zero on failure. .Bl -tag -width Er .It Bq Er EOPNOTSUPP -No watchdog present in the kernel (timeout value other than 0). +No watchdog present in the kernel or +none of the watchdogs supports the requested timeout value +(timeout value other than 0). .It Bq Er EOPNOTSUPP Watchdog could not be disabled (timeout value of 0). -.It Bq Er EINVALID +.It Bq Er EINVAL Invalid flag combination passed. -.It Bq Er EINVALID -None of the watchdogs supports the requested timeout value. .El .Sh EXAMPLES .Bd -literal -offset indent @@ -94,7 +97,7 @@ None of the watchdogs supports the requested timeout value. int wdfd = -1; static void -wd_init(void) +wd_init(void) { wdfd = open(WDPATH, O_RDWR); if (wdfd == -1) @@ -116,9 +119,7 @@ wd_reset(WD_TO_NEVER); .Pp Enables a watchdog to recover from a potentially freezing piece of code. .Pp -.Bd -literal -offset indent -options SW_WATCHDOG -.Ed +.Dl "options SW_WATCHDOG" .Pp in your kernel config adds a software watchdog in the kernel, dropping to KDB or panic-ing when firing. @@ -130,10 +131,6 @@ The .Nm code first appeared in .Fx 5.1 . -.Sh BUGS -The -.Dv WD_PASSIVE -option has not yet been implemented. .Sh AUTHORS .An -nosplit The @@ -144,3 +141,7 @@ The software watchdog code and this manual page were written by .An Sean Kelly Aq smkelly@FreeBSD.org . Some contributions were made by .An Jeff Roberson Aq jeff@FreeBSD.org . +.Sh BUGS +The +.Dv WD_PASSIVE +option has not yet been implemented. diff --git a/share/man/man4/wi.4 b/share/man/man4/wi.4 index 68479aeea11..e6f5a485597 100644 --- a/share/man/man4/wi.4 +++ b/share/man/man4/wi.4 @@ -253,6 +253,7 @@ Join a specific BSS network with network name .Bd -literal -offset indent ifconfig wlan create wlandev wi0 inet 192.168.0.20 \e netmask 0xffffff00 ssid my_net +.Ed .Pp Join a specific BSS network with WEP encryption: .Bd -literal -offset indent diff --git a/share/man/man5/make.conf.5 b/share/man/man5/make.conf.5 index 505af4f7d4a..a6a32593e36 100644 --- a/share/man/man5/make.conf.5 +++ b/share/man/man5/make.conf.5 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd September 1, 2009 +.Dd December 15, 2009 .Dt MAKE.CONF 5 .Os .Sh NAME @@ -369,6 +369,12 @@ It defaults to .It Va MODULES_OVERRIDE .Pq Vt str Set to a list of modules to build instead of all of them. +.It Va NO_KERNELCLEAN +.Pq Vt bool +Set this to skip running +.Dq Li "${MAKE} clean" +during +.Dq Li "${MAKE} buildkernel" . .It Va NO_KERNELCONFIG .Pq Vt bool Set this to skip running @@ -381,6 +387,12 @@ Set this to skip running .Dq Li "${MAKE} depend" during .Dq Li "${MAKE} buildkernel" . +.It Va NO_KERNELOBJ +.Pq Vt bool +Set this to skip running +.Dq Li "${MAKE} obj" +during +.Dq Li "${MAKE} buildkernel" . .It Va NO_MODULES .Pq Vt bool Set to not build modules with the kernel. diff --git a/share/man/man5/rc.conf.5 b/share/man/man5/rc.conf.5 index 7f90f4cac9c..8dc67084952 100644 --- a/share/man/man5/rc.conf.5 +++ b/share/man/man5/rc.conf.5 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd September 23, 2009 +.Dd November 11, 2009 .Dt RC.CONF 5 .Os .Sh NAME @@ -1156,6 +1156,45 @@ and variables. .Pp If a +.Va vlans_ Ns Aq Ar interface +variable is set, +a +.Xr vlan 4 +interface will be created for each item in the list with the +.Ar vlandev +argument set to +.Ar interface . +If a vlan interface's name is a number, +then that number is used as the vlan tag and the new vlan interface is +named +.Ar interface . Ns Ar tag . +Otherwise, +the vlan tag must be specified via a +.Va vlan +parameter in the +.Va create_args_ Ns Aq Ar interface +variable. +.Pp +To create a vlan device named +.Li em0.101 +on +.Li em0 +with the vlan tag 101: +.Bd -literal +vlans_em0="101" +.Ed +.Pp +To create a vlan device named +.Li myvlan +on +.Li em0 +with the vlan tag 102: +.Bd -literal +vlans_em0="myvlan" +create_args_myvlan="vlan 102" +.Ed +.Pp +If a .Va wlans_ Ns Aq Ar interface variable is set, an @@ -1222,7 +1261,7 @@ Finally, you can add options in this variable, in addition to the .Pa /etc/start_if. Ns Aq Ar interface file. -For instance, configure an +For instance, to configure an .Xr ath 4 wireless device in station mode with an address obtained via DHCP, using WPA authentication and 802.11b mode, it is @@ -1244,7 +1283,7 @@ This is intended to replace the no longer supported .Va pccard_ifconfig variable. .Pp -It is also possible to rename interface by doing: +It is also possible to rename an interface by doing: .Bd -literal ifconfig_ed0_name="net0" ifconfig_net0="inet 192.0.2.1 netmask 0xffffff00" @@ -1355,6 +1394,12 @@ the IPv6-preferred one is used. Default is IPv4-preferred. .It Va cloned_interfaces .Pq Vt str Set to the list of clonable network interfaces to create on this host. +Further cloning arguments may be passed to the +.Xr ifconfig 8 +.Cm create +command for each interface by setting the +.Va create_args_ Ns Aq Ar interface +variable. Entries in .Va cloned_interfaces are automatically appended to diff --git a/share/man/man7/build.7 b/share/man/man7/build.7 index 4a94a0ab434..28151b687ce 100644 --- a/share/man/man7/build.7 +++ b/share/man/man7/build.7 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 23, 2009 +.Dd December 15, 2009 .Dt BUILD 7 .Os .Sh NAME @@ -345,9 +345,10 @@ If set, the build target .Cm buildkernel defaults to setting .Va NO_KERNELCLEAN , -.Va NO_KERNELCONFIG +.Va NO_KERNELCONFIG , +.Va NO_KERNELDEPEND and -.Va NO_KERNELDEPEND . +.Va NO_KERNELOBJ . When set to a value other than .Cm 1 then @@ -444,6 +445,12 @@ If set, the build process does not run as part of the .Cm buildkernel target. +.It Va NO_KERNELOBJ +If set, the build process does not run +.Dq make obj +as part of the +.Cm buildkernel +target. .It Va NO_DOCUPDATE If set, the update process does not update the source of the .Fx diff --git a/share/man/man7/security.7 b/share/man/man7/security.7 index 9a4a4afcd57..101dcd76b53 100644 --- a/share/man/man7/security.7 +++ b/share/man/man7/security.7 @@ -88,7 +88,7 @@ incur on the system under adverse conditions. Brute-force network attacks are harder to deal with. A spoofed-packet attack, for example, is nearly impossible to stop short of cutting your system off from the Internet. -It may not be able to take your machine down, but it can fill up Internet +It may not be able to take your machine down, but it can fill up your Internet pipe. .Pp A user account compromise is even more common than a DoS attack. diff --git a/share/man/man8/Makefile b/share/man/man8/Makefile index 0b1654443fb..279a87403ef 100644 --- a/share/man/man8/Makefile +++ b/share/man/man8/Makefile @@ -16,7 +16,6 @@ MAN= crash.8 \ MLINKS= rc.8 rc.atm.8 \ rc.8 rc.d.8 \ - rc.8 rc.early.8 \ rc.8 rc.firewall.8 \ rc.8 rc.local.8 \ rc.8 rc.network.8 \ diff --git a/share/man/man8/rc.8 b/share/man/man8/rc.8 index aa607beb554..4f24a363980 100644 --- a/share/man/man8/rc.8 +++ b/share/man/man8/rc.8 @@ -35,7 +35,7 @@ .\" @(#)rc.8 8.2 (Berkeley) 12/11/93 .\" $FreeBSD$ .\" -.Dd May 18, 2007 +.Dd November 17, 2009 .Dt RC 8 .Os .Sh NAME @@ -394,20 +394,6 @@ is not set, when going from single-user to multi-user mode for example, the script does not do anything. .Pp The -.Nm rc.early -script is run very early in the startup process, immediately before the -file system check. -The -.Nm rc.early -script is deprecated. -Any commands in this -file should be separated out into -.Nm rc.d/ -style scripts and integrated into the -.Nm -system. -.Pp -The .Pa /etc/rc.d/local script can execute scripts from multiple .Nm rc.d/ diff --git a/share/man/man9/LOCK_PROFILING.9 b/share/man/man9/LOCK_PROFILING.9 index 23aba541d3f..cdb78b315a2 100644 --- a/share/man/man9/LOCK_PROFILING.9 +++ b/share/man/man9/LOCK_PROFILING.9 @@ -114,6 +114,8 @@ The columns are as follows, from left to right: .Bl -tag -width ".Va cnt_hold" .It Va max The longest continuous hold time in microseconds. +.It Va wait_max +The longest continuous wait time in microseconds. .It Va total The total (accumulated) hold time in microseconds. .It Va wait_total diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile index 09df65b649e..df049f51cc1 100644 --- a/share/man/man9/Makefile +++ b/share/man/man9/Makefile @@ -394,14 +394,14 @@ MLINKS+=atomic.9 atomic_add.9 \ atomic.9 atomic_set.9 \ atomic.9 atomic_store.9 \ atomic.9 atomic_subtract.9 -MLINKS+=bpf.9 bpf_filter.9 \ +MLINKS+=bpf.9 bpfattach.9 \ + bpf.9 bpfattach2.9 \ + bpf.9 bpfdetach.9 \ + bpf.9 bpf_filter.9 \ bpf.9 bpf_mtap.9 \ bpf.9 bpf_mtap2.9 \ bpf.9 bpf_tap.9 \ - bpf.9 bpf_validate.9 \ - bpf.9 bpfattach.9 \ - bpf.9 bpfattach2.9 \ - bpf.9 bpfdetach.9 + bpf.9 bpf_validate.9 MLINKS+=buf.9 bp.9 MLINKS+=bus_activate_resource.9 bus_deactivate_resource.9 MLINKS+=bus_alloc_resource.9 bus_alloc_resource_any.9 @@ -563,11 +563,11 @@ MLINKS+=crypto.9 crypto_dispatch.9 \ crypto.9 crypto_unblock.9 \ crypto.9 crypto_unregister.9 \ crypto.9 crypto_unregister_all.9 -MLINKS+=DB_COMMAND.9 DB_SHOW_COMMAND.9 \ - DB_COMMAND.9 DB_SHOW_ALL_COMMAND.9 +MLINKS+=DB_COMMAND.9 DB_SHOW_ALL_COMMAND.9 \ + DB_COMMAND.9 DB_SHOW_COMMAND.9 MLINKS+=dev_clone.9 drain_dev_clone_events.9 -MLINKS+=devfs_set_cdevpriv.9 devfs_get_cdevpriv.9 \ - devfs_set_cdevpriv.9 devfs_clear_cdevpriv.9 +MLINKS+=devfs_set_cdevpriv.9 devfs_clear_cdevpriv.9 \ + devfs_set_cdevpriv.9 devfs_get_cdevpriv.9 MLINKS+=device_add_child.9 device_add_child_ordered.9 MLINKS+=device_enable.9 device_disable.9 \ device_enable.9 device_is_enabled.9 @@ -591,8 +591,8 @@ MLINKS+=devstat.9 devicestat.9 \ devstat.9 devstat_start_transaction.9 MLINKS+=disk.9 disk_alloc.9 \ disk.9 disk_create.9 \ - disk.9 disk_gone.9 \ - disk.9 disk_destroy.9 + disk.9 disk_destroy.9 \ + disk.9 disk_gone.9 MLINKS+=domain.9 DOMAIN_SET.9 \ domain.9 net_add_domain.9 \ domain.9 pfctlinput.9 \ @@ -642,60 +642,60 @@ MLINKS+=hashinit.9 hashdestroy.9 \ hashinit.9 phashinit.9 MLINKS+=ieee80211.9 ieee80211_ifattach.9 \ ieee80211.9 ieee80211_ifdetach.9 -MLINKS+=ieee80211_amrr.9 ieee80211_amrr_init.9 \ - ieee80211_amrr.9 ieee80211_amrr_cleanup.9 \ - ieee80211_amrr.9 ieee80211_amrr_setinterval.9 \ +MLINKS+=ieee80211_amrr.9 ieee80211_amrr_cleanup.9 \ + ieee80211_amrr.9 ieee80211_amrr_init.9 \ ieee80211_amrr.9 ieee80211_amrr_node_init.9 \ + ieee80211_amrr.9 ieee80211_amrr_setinterval.9 \ ieee80211_amrr.9 ieee80211_amrr_tx_complete.9 \ ieee80211_amrr.9 ieee80211_amrr_tx_update.9 MLINKS+=ieee80211_beacon.9 ieee80211_beacon_alloc.9 \ - ieee80211_beacon.9 ieee80211_beacon_update.9 \ - ieee80211_beacon.9 ieee80211_beacon_notify.9 + ieee80211_beacon.9 ieee80211_beacon_notify.9 \ + ieee80211_beacon.9 ieee80211_beacon_update.9 MLINKS+=ieee80211_bmiss.9 ieee80211_beacon_miss.9 -MLINKS+=ieee80211_crypto.9 ieee80211_key_update_begin.9 \ - ieee80211_crypto.9 ieee80211_key_update_end.9 \ - ieee80211_crypto.9 ieee80211_crypto_newkey.9 \ - ieee80211_crypto.9 ieee80211_crypto_setkey.9 \ - ieee80211_crypto.9 ieee80211_crypto_delglobalkeys.9 \ - ieee80211_crypto.9 ieee80211_crypto_reload_keys.9 \ +MLINKS+=ieee80211_crypto.9 ieee80211_crypto_available.9 \ ieee80211_crypto.9 ieee80211_crypto_decap.9 \ - ieee80211_crypto.9 ieee80211_crypto_encap.9 \ + ieee80211_crypto.9 ieee80211_crypto_delglobalkeys.9 \ ieee80211_crypto.9 ieee80211_crypto_demic.9 \ + ieee80211_crypto.9 ieee80211_crypto_encap.9 \ ieee80211_crypto.9 ieee80211_crypto_enmic.9 \ - ieee80211_crypto.9 ieee80211_notify_michael_failure.9 \ - ieee80211_crypto.9 ieee80211_notify_replay_failure.9 \ + ieee80211_crypto.9 ieee80211_crypto_newkey.9 \ ieee80211_crypto.9 ieee80211_crypto_register.9 \ + ieee80211_crypto.9 ieee80211_crypto_reload_keys.9 \ + ieee80211_crypto.9 ieee80211_crypto_setkey.9 \ ieee80211_crypto.9 ieee80211_crypto_unregister.9 \ - ieee80211_crypto.9 ieee80211_crypto_available.9 + ieee80211_crypto.9 ieee80211_key_update_begin.9 \ + ieee80211_crypto.9 ieee80211_key_update_end.9 \ + ieee80211_crypto.9 ieee80211_notify_michael_failure.9 \ + ieee80211_crypto.9 ieee80211_notify_replay_failure.9 MLINKS+=ieee80211_input.9 ieee80211_input_all.9 -MLINKS+=ieee80211_node.9 ieee80211_find_rxnode.9 \ +MLINKS+=ieee80211_node.9 ieee80211_dump_node.9 \ + ieee80211_node.9 ieee80211_dump_nodes.9 \ + ieee80211_node.9 ieee80211_find_rxnode.9 \ ieee80211_node.9 ieee80211_find_rxnode_withkey.9 \ - ieee80211_node.9 ieee80211_ref_node.9 \ - ieee80211_node.9 ieee80211_unref_node.9 \ ieee80211_node.9 ieee80211_free_node.9 \ ieee80211_node.9 ieee80211_iterate_nodes.9 \ - ieee80211_node.9 ieee80211_dump_node.9 \ - ieee80211_node.9 ieee80211_dump_nodes.9 -MLINKS+=ieee80211_output.9 M_WME_GETAC.9 \ + ieee80211_node.9 ieee80211_ref_node.9 \ + ieee80211_node.9 ieee80211_unref_node.9 +MLINKS+=ieee80211_output.9 ieee80211_process_callback.9 \ ieee80211_output.9 M_SEQNO_GET.9 \ - ieee80211_output.9 ieee80211_process_callback.9 + ieee80211_output.9 M_WME_GETAC.9 MLINKS+=ieee80211_proto.9 ieee80211_new_state.9 \ + ieee80211_proto.9 ieee80211_resume_all.9 \ ieee80211_proto.9 ieee80211_start_all.9 \ ieee80211_proto.9 ieee80211_stop_all.9 \ ieee80211_proto.9 ieee80211_suspend_all.9 \ - ieee80211_proto.9 ieee80211_resume_all.9 \ ieee80211_proto.9 ieee80211_waitfor_parent.9 -MLINKS+=ieee80211_radiotap.9 radiotap.9 \ - ieee80211_radiotap.9 ieee80211_radiotap_attach.9 \ +MLINKS+=ieee80211_radiotap.9 ieee80211_radiotap_active.9 \ ieee80211_radiotap.9 ieee80211_radiotap_active_vap.9 \ - ieee80211_radiotap.9 ieee80211_radiotap_active.9 \ - ieee80211_radiotap.9 ieee80211_radiotap_tx.9 -MLINKS+=ieee80211_regdomain.9 ieee80211_init_channels.9 \ - ieee80211_regdomain.9 ieee80211_sort_channels.9 \ - ieee80211_regdomain.9 ieee80211_alloc_countryie.9 -MLINKS+=ieee80211_vap.9 ieee80211_vap_setup.9 \ - ieee80211_vap.9 ieee80211_vap_attach.9 \ - ieee80211_vap.9 ieee80211_vap_detach.9 + ieee80211_radiotap.9 ieee80211_radiotap_attach.9 \ + ieee80211_radiotap.9 ieee80211_radiotap_tx.9 \ + ieee80211_radiotap.9 radiotap.9 +MLINKS+=ieee80211_regdomain.9 ieee80211_alloc_countryie.9 \ + ieee80211_regdomain.9 ieee80211_init_channels.9 \ + ieee80211_regdomain.9 ieee80211_sort_channels.9 +MLINKS+=ieee80211_vap.9 ieee80211_vap_attach.9 \ + ieee80211_vap.9 ieee80211_vap_detach.9 \ + ieee80211_vap.9 ieee80211_vap_setup.9 MLINKS+=ifnet.9 ifaddr.9 \ ifnet.9 if_data.9 \ ifnet.9 ifqueue.9 @@ -720,13 +720,13 @@ MLINKS+=kobj.9 DEFINE_CLASS.9 \ kobj.9 kobj_delete.9 \ kobj.9 kobj_init.9 MLINKS+=kproc.9 kproc_create.9 \ - kproc.9 kthread_create.9 \ kproc.9 kproc_exit.9 \ kproc.9 kproc_resume.9 \ kproc.9 kproc_shutdown.9 \ kproc.9 kproc_start.9 \ kproc.9 kproc_suspend.9 \ - kproc.9 kproc_suspend_check.9 + kproc.9 kproc_suspend_check.9 \ + kproc.9 kthread_create.9 MLINKS+=kqueue.9 knlist_add.9 \ kqueue.9 knlist_clear.9 \ kqueue.9 knlist_delete.9 \ @@ -1237,23 +1237,7 @@ MLINKS+=uidinfo.9 uifind.9 \ uidinfo.9 uihashinit.9 \ uidinfo.9 uihold.9 MLINKS+=uio.9 uiomove.9 -MLINKS+=usbdi.9 usb_fifo_alloc_buffer.9 \ - usbdi.9 usb_fifo_attach.9 \ - usbdi.9 usb_fifo_detach.9 \ - usbdi.9 usb_fifo_free_buffer.9 \ - usbdi.9 usb_fifo_get_data.9 \ - usbdi.9 usb_fifo_get_data_buffer.9 \ - usbdi.9 usb_fifo_get_data_error.9 \ - usbdi.9 usb_fifo_get_data_linear.9 \ - usbdi.9 usb_fifo_put_bytes_max.9 \ - usbdi.9 usb_fifo_put_data.9 \ - usbdi.9 usb_fifo_put_data_buffer.9 \ - usbdi.9 usb_fifo_put_data_error.9 \ - usbdi.9 usb_fifo_put_data_linear.9 \ - usbdi.9 usb_fifo_reset.9 \ - usbdi.9 usb_fifo_softc.9 \ - usbdi.9 usb_fifo_wakeup.9 \ - usbdi.9 usbd_do_request.9 \ +MLINKS+=usbdi.9 usbd_do_request.9 \ usbdi.9 usbd_do_request_flags.9 \ usbdi.9 usbd_errstr.9 \ usbdi.9 usbd_lookup_id_by_info.9 \ @@ -1287,8 +1271,23 @@ MLINKS+=usbdi.9 usb_fifo_alloc_buffer.9 \ usbdi.9 usbd_xfer_set_timeout.9 \ usbdi.9 usbd_xfer_softc.9 \ usbdi.9 usbd_xfer_state.9 \ - usbdi.9 usbd_xfer_state.9 \ - usbdi.9 usbd_xfer_status.9 + usbdi.9 usbd_xfer_status.9 \ + usbdi.9 usb_fifo_alloc_buffer.9 \ + usbdi.9 usb_fifo_attach.9 \ + usbdi.9 usb_fifo_detach.9 \ + usbdi.9 usb_fifo_free_buffer.9 \ + usbdi.9 usb_fifo_get_data.9 \ + usbdi.9 usb_fifo_get_data_buffer.9 \ + usbdi.9 usb_fifo_get_data_error.9 \ + usbdi.9 usb_fifo_get_data_linear.9 \ + usbdi.9 usb_fifo_put_bytes_max.9 \ + usbdi.9 usb_fifo_put_data.9 \ + usbdi.9 usb_fifo_put_data_buffer.9 \ + usbdi.9 usb_fifo_put_data_error.9 \ + usbdi.9 usb_fifo_put_data_linear.9 \ + usbdi.9 usb_fifo_reset.9 \ + usbdi.9 usb_fifo_softc.9 \ + usbdi.9 usb_fifo_wakeup.9 MLINKS+=vcount.9 count_dev.9 MLINKS+=vfsconf.9 vfs_modevent.9 \ vfsconf.9 vfs_register.9 \ @@ -1304,8 +1303,8 @@ MLINKS+=vfs_getopt.9 vfs_copyopt.9 \ MLINKS+=VFS_LOCK_GIANT.9 VFS_UNLOCK_GIANT.9 MLINKS+=vgone.9 vgonel.9 MLINKS+=vhold.9 vdrop.9 \ - vhold.9 vholdl.9 \ - vhold.9 vdropl.9 + vhold.9 vdropl.9 \ + vhold.9 vholdl.9 MLINKS+=vm_map_lock.9 vm_map_lock_downgrade.9 \ vm_map_lock.9 vm_map_lock_read.9 \ vm_map_lock.9 vm_map_lock_upgrade.9 \ diff --git a/share/man/man9/VFS.9 b/share/man/man9/VFS.9 index 21e609e8269..54bdd0ce135 100644 --- a/share/man/man9/VFS.9 +++ b/share/man/man9/VFS.9 @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd July 24, 1996 +.Dd January 4, 2010 .Os .Dt VFS 9 .Sh NAME @@ -53,7 +53,7 @@ rather than implementing empty functions or casting to .Xr VFS_SYNC 9 , .Xr VFS_UNMOUNT 9 , .Xr VFS_VGET 9 , -.Xr VFS_VPTOFH 9 , +.Xr VOP_VPTOFH 9 , .Xr vnode 9 .Sh AUTHORS This manual page was written by diff --git a/share/man/man9/VFS_CHECKEXP.9 b/share/man/man9/VFS_CHECKEXP.9 index a3afd2e0e45..92afda86d69 100644 --- a/share/man/man9/VFS_CHECKEXP.9 +++ b/share/man/man9/VFS_CHECKEXP.9 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 7, 2005 +.Dd January 4, 2010 .Os .Dt VFS_CHECKEXP 9 .Sh NAME @@ -81,7 +81,7 @@ and .Sh SEE ALSO .Xr VFS 9 , .Xr VFS_FHTOVP 9 , -.Xr VFS_VPTOFH 9 , +.Xr VOP_VPTOFH 9 , .Xr vnode 9 .Sh AUTHORS This manual page was written by diff --git a/share/man/man9/VFS_FHTOVP.9 b/share/man/man9/VFS_FHTOVP.9 index e17133e5ce2..f6f88d204ee 100644 --- a/share/man/man9/VFS_FHTOVP.9 +++ b/share/man/man9/VFS_FHTOVP.9 @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 7, 2005 +.Dd January 4, 2010 .Os .Dt VFS_FHTOVP 9 .Sh NAME @@ -76,7 +76,7 @@ The locked vnode for the file will be returned in .Sh SEE ALSO .Xr VFS 9 , .Xr VFS_CHECKEXP 9 , -.Xr VFS_VPTOFH 9 , +.Xr VOP_VPTOFH 9 , .Xr vnode 9 .Sh AUTHORS This manual page was written by diff --git a/share/man/man9/VOP_OPENCLOSE.9 b/share/man/man9/VOP_OPENCLOSE.9 index 58e601b51aa..7430da70f3e 100644 --- a/share/man/man9/VOP_OPENCLOSE.9 +++ b/share/man/man9/VOP_OPENCLOSE.9 @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 5, 2007 +.Dd December 2, 2009 .Os .Dt VOP_OPEN 9 .Sh NAME @@ -55,6 +55,8 @@ The arguments are: The vnode of the file. .It Fa mode The access mode required by the calling process. +.It Fa cred +The caller's credentials. .It Fa td The thread which is accessing the file. .It Fa fp diff --git a/share/man/man9/ifnet.9 b/share/man/man9/ifnet.9 index 532f6cd6e41..4f0ff98ac6a 100644 --- a/share/man/man9/ifnet.9 +++ b/share/man/man9/ifnet.9 @@ -28,7 +28,7 @@ .\" .\" $FreeBSD$ .\" -.Dd March 14, 2007 +.Dd December 1, 2009 .Os .Dt IFNET 9 .Sh NAME @@ -279,13 +279,6 @@ to refer to a particular interface by index .Xr link_addr 3 ) . (Initialized by .Fn if_alloc . ) -.It Va if_timer -.Pq Vt short -Number of seconds until the watchdog timer -.Fn if_watchdog -is called, or zero if the timer is disabled. -(Set by driver, -decremented by generic watchdog code.) .It Va if_flags .Pq Vt int Flags describing operational parameters of this interface (see below). @@ -401,11 +394,6 @@ flags and flushing queues. See the description of .Fn ifioctl below for more information. -.It Fn if_watchdog -Routine called by the generic code when the watchdog timer, -.Va if_timer , -expires. -Usually this will reset the interface. .\" .It Fn if_poll_recv .\" .It Fn if_poll_xmit .\" .It Fn if_poll_slowinput @@ -415,7 +403,7 @@ Usually this will reset the interface. .\" section, below. .It Fn if_init Initialize and bring up the hardware, -e.g., reset the chip and the watchdog timer and enable the receiver unit. +e.g., reset the chip and enable the receiver unit. Should mark the interface running, but not active .Dv ( IFF_RUNNING , ~IIF_OACTIVE ) . diff --git a/share/man/man9/sleep.9 b/share/man/man9/sleep.9 index a9f08735151..8fb7f88a320 100644 --- a/share/man/man9/sleep.9 +++ b/share/man/man9/sleep.9 @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 4, 2008 +.Dd December 12, 2009 .Os .Dt SLEEP 9 .Sh NAME @@ -97,6 +97,7 @@ when it resumes. should never be used, as it is for compatibility only. A new priority of 0 means to use the thread's current priority when it is made runnable again. +.Pp If .Fa priority includes the @@ -113,6 +114,17 @@ possible, and is returned if the system call should be interrupted by the signal (return .Er EINTR ) . +If +.Dv PBDRY +flag is specified in addition to +.Dv PCATCH , +then the sleeping thread is not stopped while sleeping upon delivery of +.Dv SIGSTOP +or other stop action. +Instead, it is waken up, assuming that stop occurs on reaching a stop +point when returning to usermode. +The flag should be used when sleeping thread owns resources, for instance +vnode locks, that should be freed timely. .Pp The parameter .Fa wmesg diff --git a/share/man/man9/sleepqueue.9 b/share/man/man9/sleepqueue.9 index e2e3a4b4150..36cab697933 100644 --- a/share/man/man9/sleepqueue.9 +++ b/share/man/man9/sleepqueue.9 @@ -23,7 +23,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 13, 2007 +.Dd December 12, 2009 .Dt SLEEPQUEUE 9 .Os .Sh NAME @@ -41,6 +41,7 @@ .Nm sleepq_remove , .Nm sleepq_signal , .Nm sleepq_set_timeout , +.Nm sleepq_sleepcnt , .Nm sleepq_timedwait , .Nm sleepq_timedwait_sig , .Nm sleepq_wait , @@ -77,6 +78,8 @@ .Fn sleepq_signal "void *wchan" "int flags" "int pri" "int queue" .Ft void .Fn sleepq_set_timeout "void *wchan" "int timo" +.Ft u_int +.Fn sleepq_sleepcnt "void *wchan" "int queue" .Ft int .Fn sleepq_timedwait "void *wchan" .Ft int @@ -195,12 +198,19 @@ A sleep queue used to implement .Xr pause 9 . .El .Pp -There is currently only one optional flag: +There are currently two optional flag: .Pp .Bl -tag -width ".Dv SLEEPQ_INTERRUPTIBLE" -compact .It Dv SLEEPQ_INTERRUPTIBLE The current thread is entering an interruptible sleep. .El +.Bl -tag -width ".Dv SLEEPQ_STOP_ON_BDRY" -compact +.It Dv SLEEPQ_STOP_ON_BDRY +When thread is entering an interruptible sleep, do not stop it upon +arrival of stop action, like +.Dv SIGSTOP . +Wake it up instead. +.El .Pp A timeout on the sleep may be specified by calling .Fn sleepq_set_timeout @@ -348,6 +358,14 @@ One possible use is waking up a specific thread from a widely shared sleep channel. .Pp The +.Fn sleepq_sleepcnt +function offer a simple way to retrieve the number of threads sleeping for +the specified +.Fa queue , +given a +.Fa wchan . +.Pp +The .Fn sleepq_abort , .Fn sleepq_broadcast , and diff --git a/share/man/man9/usbdi.9 b/share/man/man9/usbdi.9 index d58e5994058..100c53c439b 100644 --- a/share/man/man9/usbdi.9 +++ b/share/man/man9/usbdi.9 @@ -78,7 +78,6 @@ .Nm usbd_xfer_set_timeout , .Nm usbd_xfer_softc , .Nm usbd_xfer_state , -.Nm usbd_xfer_state , .Nm usbd_xfer_status .Nd Universal Serial Bus driver programming interface .Sh SYNOPSIS diff --git a/share/man/man9/vm_page_bits.9 b/share/man/man9/vm_page_bits.9 index 991c7637e53..fdee5afd295 100644 --- a/share/man/man9/vm_page_bits.9 +++ b/share/man/man9/vm_page_bits.9 @@ -94,7 +94,7 @@ is zero and .Fa size is one page, the modified bit in the page map is cleared; as well, the -.Dv PG_NOSYNC +.Dv VPO_NOSYNC flag is cleared. .Pp .Fn vm_page_clear_dirty diff --git a/share/misc/bsd-family-tree b/share/misc/bsd-family-tree index fa74abd61d9..6fb2742f1b2 100644 --- a/share/misc/bsd-family-tree +++ b/share/misc/bsd-family-tree @@ -232,7 +232,12 @@ FreeBSD 5.2 | | | | | | | | | DragonFly 2.4.0 | V | | OpenBSD 4.6 | | | | | | -FreeBSD 8 -current | NetBSD -current OpenBSD -current | + *--FreeBSD | | | | + | 8.0 | | | | + | | | | | | + | V | | | | + | | | | | +FreeBSD 9 -current | NetBSD -current OpenBSD -current | | | | | | v v v v v @@ -505,6 +510,7 @@ OpenBSD 4.5 2009-05-01 [OBD] FreeBSD 7.2 2009-05-04 [FBD] DragonFly 2.4.0 2009-09-16 [DFB] OpenBSD 4.6 2009-10-18 [OBD] +FreeBSD 8.0 2009-11-26 [FBD] Bibliography ------------------------ @@ -537,7 +543,7 @@ Andreas Klemm, Lars K Die freien BSD-Varianten von Unix. c't April 1997, page 368ff. BSD Release Announcements collection. -URL: http://www.de.FreeBSD.org/de/ftp/releases/ +URL: http://www.FreeBSD.org/releases/ BSD Hypertext Man Pages URL: http://www.FreeBSD.org/cgi/man.cgi diff --git a/share/misc/committers-doc.dot b/share/misc/committers-doc.dot index 083800feef4..b9bef23441f 100644 --- a/share/misc/committers-doc.dot +++ b/share/misc/committers-doc.dot @@ -35,6 +35,7 @@ node [color=lightblue2, style=filled, bgcolor=black]; ache [label="Andrey Chernov\nache@FreeBSD.org\n1997/06/13"] ale [label="Alex Dupre\nale@FreeBSD.org\n2003/12/22"] +bcr [label="Benedict Reuschling\nbcr@FreeBSD.org\n2009/12/24"] blackend [label="Marc Fonvieille\nblackend@FreeBSD.org\n2002/06/16"] bmah [label="Bruce A. Mah\nbmah@FreeBSD.org\n2000/08/22"] brd [label="Brad Davis\nbrd@FreeBSD.org\n2005/06/01"] @@ -98,6 +99,7 @@ jesusr -> jcamou jim -> trhodes jkois -> miwi +jkois -> bcr keramida -> blackend keramida -> danger diff --git a/share/misc/committers-ports.dot b/share/misc/committers-ports.dot index 4d6b8c59101..e976ea004fc 100644 --- a/share/misc/committers-ports.dot +++ b/share/misc/committers-ports.dot @@ -109,7 +109,8 @@ lth [label="Lars Thegler\nlth@FreeBSD.org\n2004/05/04"] lwhsu [label="Li-Wen Hsu\nlwhsu@FreeBSD.org\n2007/04/03"] lx [label="David Thiel\nlx@FreeBSD.org\n2006/11/29"] maho [label="Maho Nakata\nmaho@FreeBSD.org\n2002/10/17"] -makc [label="Max Brazhnikov\makc@FreeBSD.org\n2008/08/25"] +makc [label="Max Brazhnikov\nmakc@FreeBSD.org\n2008/08/25"] +mandree [label="Matthias Andree\nmandree@FreeBSD.org\n2009/11/18"] marcus [label="Joe Marcus Clarke\nmarcus@FreeBSD.org\n2002/04/05"] markus [label="Markus Brueffer\nmarkus@FreeBSD.org\n2004/02/21"] mat [label="Mathieu Arnold\nmat@FreeBSD.org\n2003/08/15"] @@ -225,6 +226,7 @@ gabor -> pgj garga -> acm garga -> alepulver +garga -> mandree garga -> mm garga -> rnoland garga -> vd @@ -280,6 +282,7 @@ miwi -> beat miwi -> farrokhi miwi -> gahr miwi -> makc +miwi -> mandree miwi -> mva miwi -> nox miwi -> tabthorpe diff --git a/share/misc/committers-src.dot b/share/misc/committers-src.dot index 7636b66f243..e6de41c35d0 100644 --- a/share/misc/committers-src.dot +++ b/share/misc/committers-src.dot @@ -94,6 +94,7 @@ fjoe [label="Max Khon\nfjoe@FreeBSD.org\n2001/08/06"] flz [label="Florent Thoumie\nflz@FreeBSD.org\n2006/03/30"] gad [label="Garance A. Drosehn\ngad@FreeBSD.org\n2000/10/27"] gallatin [label="Andrew Gallatin\ngallatin@FreeBSD.org\n????/??/??"] +gavin [label="Gavin Atkinson\ngavin@FreeBSD.org\n2009/12/07"] gibbs [label="Justin T. Gibbs\ngibbs@FreeBSD.org\n????/??/??"] glebius [label="Gleb Smirnoff\nglebius@FreeBSD.org\n2004/07/14"] gnn [label="George V. Neville-Neil\ngnn@FreeBSD.org\n2004/10/11"] @@ -122,6 +123,7 @@ julian [label="Julian Elischer\njulian@FreeBSD.org\n1993/??/??"] kaiw [label="Kai Wang\nkaiw@FreeBSD.org\n2007/09/26"] kensmith [label="Ken Smith\nkensmith@FreeBSD.org\n2004/01/23"] kevlo [label="Kevin Lo\nkevlo@FreeBSD.org\n2006/07/23"] +kib [label="Konstantin Belousov\nkib@FreeBSD.org\n2006/06/03"] kmacy [label="Kip Macy\nkmacy@FreeBSD.org\n2005/06/01"] le [label="Lukas Ertl\nle@FreeBSD.org\n2004/02/02"] linimon [label="Mark Linimon\nlinimon@FreeBSD.org\n2006/09/30"] @@ -254,7 +256,9 @@ dwmalone -> fanf dwmalone -> peadar dwmalone -> snb +ed -> gavin ed -> jilles +ed -> rdivacky eivind -> des eivind -> rwatson @@ -345,7 +349,14 @@ julian -> archie julian -> adrian julian -> zec +kan -> kib + +kib -> dchagin kib -> lulf +kib -> pho +kib -> rdivacky +kib -> rmacklem +kib -> stas kmacy -> lstewart @@ -384,9 +395,11 @@ peter -> asmodai peter -> jayanth peter -> ps +philip -> ed philip -> jls philip -> matteo +pjd -> kib pjd -> lulf rgrimes -> markm @@ -413,6 +426,7 @@ rwatson -> jh rwatson -> kensmith rwatson -> kmacy rwatson -> linimon +rwatson -> rmacklem rwatson -> shafeeq rwatson -> tmm rwatson -> trasz diff --git a/share/mk/bsd.libnames.mk b/share/mk/bsd.libnames.mk index 3a3fd864625..e70b4fa5c03 100644 --- a/share/mk/bsd.libnames.mk +++ b/share/mk/bsd.libnames.mk @@ -151,6 +151,7 @@ LIBUGIDFW?= ${DESTDIR}${LIBDIR}/libugidfw.a LIBUMEM?= ${DESTDIR}${LIBDIR}/libumem.a LIBUSBHID?= ${DESTDIR}${LIBDIR}/libusbhid.a LIBUSB20?= ${DESTDIR}${LIBDIR}/libusb20.a +LIBULOG?= ${DESTDIR}${LIBDIR}/libulog.a LIBUTIL?= ${DESTDIR}${LIBDIR}/libutil.a LIBUUTIL?= ${DESTDIR}${LIBDIR}/libuutil.a LIBVGL?= ${DESTDIR}${LIBDIR}/libvgl.a diff --git a/share/mk/bsd.subdir.mk b/share/mk/bsd.subdir.mk index 4753f64f294..dc5af72ff17 100644 --- a/share/mk/bsd.subdir.mk +++ b/share/mk/bsd.subdir.mk @@ -24,9 +24,9 @@ # This is a variant of install, which will # put the stuff into the right "distribution". # -# afterinstall, all, all-man, beforeinstall, checkdpadd, -# clean, cleandepend, cleandir, depend, install, lint, maninstall, -# manlint, obj, objlink, realinstall, regress, tags +# afterinstall, all, all-man, beforeinstall, checkdpadd, clean, +# cleandepend, cleandir, cleanilinks depend, install, lint, +# maninstall, manlint, obj, objlink, realinstall, regress, tags # .include @@ -66,9 +66,8 @@ ${SUBDIR}: .PHONY ${MAKE} all .for __target in all all-man checkdpadd clean cleandepend cleandir \ - depend distribute lint maninstall manlint \ - obj objlink realinstall regress tags \ - ${SUBDIR_TARGETS} + cleanilinks depend distribute lint maninstall manlint obj objlink \ + realinstall regress tags ${SUBDIR_TARGETS} ${__target}: _SUBDIR .endfor diff --git a/share/mk/bsd.sys.mk b/share/mk/bsd.sys.mk index 9a189a6a876..9b366635dfe 100644 --- a/share/mk/bsd.sys.mk +++ b/share/mk/bsd.sys.mk @@ -47,7 +47,8 @@ CWARNFLAGS += -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch\ . endif # BDECFLAGS . if ${WARNS} >= 6 -CWARNFLAGS += -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls +CWARNFLAGS += -Wchar-subscripts -Winline -Wnested-externs\ + -Wredundant-decls -Wold-style-definition . endif . if ${WARNS} >= 2 && ${WARNS} <= 4 # XXX Delete -Wuninitialized by default for now -- the compiler doesn't diff --git a/share/skel/dot.profile b/share/skel/dot.profile index 3a8bd3eb5d7..34398ad60ac 100644 --- a/share/skel/dot.profile +++ b/share/skel/dot.profile @@ -11,8 +11,7 @@ PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:$HO # Setting TERM is normally done through /etc/ttys. Do only override # if you're sure that you'll never log in via telnet or xterm or a # serial line. -# Use cons25l1 for iso-* fonts -# TERM=cons25; export TERM +# TERM=xterm; export TERM BLOCKSIZE=K; export BLOCKSIZE EDITOR=vi; export EDITOR diff --git a/share/termcap/termcap.5 b/share/termcap/termcap.5 index bb5b5123c34..87a0c6e48f1 100644 --- a/share/termcap/termcap.5 +++ b/share/termcap/termcap.5 @@ -53,7 +53,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 16, 1994 +.Dd December 13, 2009 .Dt TERMCAP 5 .Os .Sh NAME @@ -1999,6 +1999,25 @@ Unfortunately, due to lack of a definition for string parameters in only .Xr terminfo 5 supports these capabilities. +.Pp +For the +.Xr xterm 1 +terminal emulator the traditional behavior in +.Fx +when exiting a pager such as +.Xr less 1 +or +.Xr more 1 , +or an editor such as +.Xr vi 1 +is +.Em NOT +to clear the screen after the program exits. +If you prefer to clear the screen there are a number of +.Dq xterm-clear +entries that add this capability in the +.Nm +file that you can use directly, or as examples. .Ss Glitches and Braindamage Hazeltine terminals, which do not allow `~' characters to be displayed, should indicate @@ -2105,6 +2124,7 @@ Hash database file containing terminal descriptions (see .Xr tset 1 , .Xr ul 1 , .Xr vi 1 , +.Xr xterm 1 , .Xr ncurses 3 , .Xr printf 3 , .Xr termcap 3 , diff --git a/share/termcap/termcap.src b/share/termcap/termcap.src index 0df0244b4e6..40fcc7be238 100644 --- a/share/termcap/termcap.src +++ b/share/termcap/termcap.src @@ -2784,48 +2784,51 @@ SH|screen-s|VT 100/ANSI X3.64 virtual terminal with hardstatus line:\ :ts=\E_:fs=\E\\:ds=\E_\E\\:tc=screen: SW|screen-w|VT 100/ANSI X3.64 virtual terminal with 132 cols:\ :co#132:tc=screen: -# $Xorg: termcap,v 1.3 2000/08/17 19:55:10 cpqbld Exp $ +# $XTermId: termcap,v 1.78 2009/11/09 00:24:26 tom Exp $ # # Note: # termcap format is limited to 1023 characters. This set of descriptions # is a subset of the terminfo, since not all features can be fit into # that limit. The 'xterm' description supports color. The monochrome -# 'xtermm' drops color in favor of additional function keys. If you need -# both, use terminfo. +# 'xterm-mono' drops color in favor of additional function keys. If you +# need both, use terminfo. # # The 1023-character limit applies to each entry after resolving the # "tc=" strings. Some implementations may discount all or part of the # formatting characters in the entry (i.e., the backslash newline tab # colon). GNU termcap does not have this limit. # -# I checked the limits using ncurses "captoinfo -CrTv", which prints +# I checked the limits using ncurses "captoinfo -CrTUvx", which prints # the resolved length of each entry in a comment at the end - T.Dickey + +# Add the capability to "clear the screen" after exiting vi, more/less, etc. # -# $XFree86: xc/programs/xterm/termcap,v 3.28 2001/01/17 23:46:39 dawes Exp $ -# -xterm-xfree86|XFree86 xterm:\ - :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:\ - :k5=\E[15~:k6=\E[17~:k7=\E[18~:k8=\E[19~:\ - :k9=\E[20~:k;=\E[21~:F1=\E[23~:F2=\E[24~:\ - :@7=\EOF:@8=\EOM:kI=\E[2~:\ - :kh=\EOH:kP=\E[5~:kN=\E[6~:\ - :ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:Km=\E[M:tc=xterm-basic: +xterm-clear:\ + :te=\E[?1049l:ti=\E[?1049h:\ + :tc=xterm-new: +xterm-new|modern xterm:\ + :*6=\EOF:@7=\EOF:F1=\E[23~:F2=\E[24~:K2=\EOE:Km=\E[M:\ + :k1=\EOP:k2=\EOQ:k3=\EOR:k4=\EOS:k5=\E[15~:k6=\E[17~:\ + :k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:kH=\EOF:kI=\E[2~:\ + :kN=\E[6~:kP=\E[5~:kd=\EOB:kh=\EOH:kl=\EOD:kr=\EOC:ku=\EOA:\ + :tc=xterm-basic: # # This chunk is used for building the VT220/Sun/PC keyboard variants. -xterm-basic|xterm common (XFree86):\ - :li#24:co#80:am:kn#12:km:mi:ms:xn:AX:bl=^G:\ - :is=\E[!p\E[?3;4l\E[4l\E>:rs=\E[!p\E[?3;4l\E[4l\E>:le=^H:\ - :AL=\E[%dL:DL=\E[%dM:DC=\E[%dP:al=\E[L:dc=\E[P:dl=\E[M:\ - :UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:\ - :ho=\E[H:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:\ - :im=\E[4h:ei=\E[4l:ks=\E[?1h\E=:ke=\E[?1l\E>:kD=\E[3~:kb=^H:\ - :sf=\n:sr=\EM:st=\EH:ct=\E[3g:sc=\E7:rc=\E8:\ - :eA=\E(B\E)0:as=\E(0:ae=\E(B:ml=\El:mu=\Em:up=\E[A:nd=\E[C:\ - :md=\E[1m:me=\E[m:mr=\E[7m:so=\E[7m:se=\E[27m:us=\E[4m:ue=\E[24m:\ - :ti=\E[?1049h:te=\E[?1049l:vi=\E[?25l:ve=\E[?25h:\ - :ut:Co#8:pa#64:op=\E[39;49m:AB=\E[4%dm:AF=\E[3%dm: +xterm-basic|modern xterm common:\ + :am:bs:km:mi:ms:ut:xn:AX:\ + :Co#8:co#80:kn#12:li#24:pa#64:\ + :AB=\E[4%dm:AF=\E[3%dm:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:\ + :DO=\E[%dB:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=\E(B:al=\E[L:\ + :as=\E(0:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\ + :cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:\ + :ei=\E[4l:ho=\E[H:im=\E[4h:is=\E[!p\E[?3;4l\E[4l\E>:\ + :kD=\E[3~:kb=^H:ke=\E[?1l\E>:ks=\E[?1h\E=:le=^H:md=\E[1m:\ + :me=\E[m:ml=\El:mr=\E[7m:mu=\Em:nd=\E[C:op=\E[39;49m:\ + :rc=\E8:rs=\E[!p\E[?3;4l\E[4l\E>:sc=\E7:se=\E[27m:sf=^J:\ + :so=\E[7m:sr=\EM:st=\EH:\ + :ue=\E[24m:up=\E[A:us=\E[4m:ve=\E[?12l\E[?25h:vi=\E[?25l:vs=\E[?12;25h: -# The xterm-xfree86 description has all of the features, but is not completely +# The xterm-new description has all of the features, but is not completely # compatible with vt220. If you are using a Sun or PC keyboard, set the # sunKeyboard resource to true: # + maps the editing keypad @@ -2835,68 +2838,97 @@ xterm-basic|xterm common (XFree86):\ # + uses DEC-style control sequences for the application keypad. # xterm-vt220|xterm emulating vt220:\ - :kH=\E[4~::@7=\E[4~:*6=\E[4~:kh=\E[1~:Km=\E[M:tc=xterm-basic: + :*6=\E[4~:@7=\E[4~:K2=\EOu:Km=\E[M:kH=\E[4~:kh=\E[1~:\ + :tc=xterm-basic: xterm-24|xterms|vs100|24x80 xterm:\ - :li#24:\ - :tc=xterm: + :li#24:tc=xterm-old: xterm-65|65x80 xterm:\ - :li#65:tc=xterm: + :li#65:tc=xterm-old: xterm-bold|xterm with bold for underline:\ - :so=\E[7m:us=\E[1m:tc=xterm: + :so=\E[7m:us=\E[1m:tc=xterm-old: xterm-boldso|xterm with bold for standout:\ - :se=\E[m:so=\E[1m:tc=xterm: + :se=\E[m:so=\E[1m:tc=xterm-old: xterm-mono|monochrome xterm:\ - :kn#20:\ - :st@:ut@:Co@:NC@:op@:AB@:AF@:pa@:Sf@:Sb@:tc=xterm: + :ut@:\ + :Co@:NC@:kn#20:pa@:\ + :AB@:AF@:Sb@:Sf@:op@:st@:tc=xterm-old: # # Alternate terminal description that "works" for interactive shells such as # tcsh and bash. xterm-noapp|xterm with cursor keys in normal mode:\ - :kl=\E[D:kd=\E[B:kr=\E[C:ku=\E[A:ks=\E=:ke=\E>:ti@:te@:tc=xterm: + :kd=\E[B:ke=\E>:kl=\E[D:kr=\E[C:ks=\E=:ku=\E[A:te@:ti@:\ + :tc=xterm: +# +# This should work for the commonly used "color xterm" variations (XFree86 +# xterm, color_xterm, nxterm, rxvt). Note that it does not set 'bce', so for +# XFree86 and rxvt, some applications that use colors will be less efficient, +# and in a few special cases (with "smart" optimization) the wrong color will +# be painted in spots. +xterm-color|generic "ANSI" color xterm:\ + :Co#8:NC@:pa#64:\ + :AB=\E[4%dm:AF=\E[3%dm:ac=:op=\E[m:tc=xterm-r6: # # These aliases are for compatibility with the terminfo; termcap cannot provide -# the extra features, but termcap applications still want the names. -xterm-16color|xterm alias 1:tc=xterm-xfree86: -xterm-88color|xterm alias 2:tc=xterm-256color: -xterm-256color|xterm alias 3:tc=xterm-xfree86: -xterm-nrc|xterm alias 4:tc=xterm: -xterm-rep|xterm alias 5:tc=xterm: -xterm-xmc|xterm alias 6:sg#1:tc=xterm: +# the extra features such as color initialization, but termcap applications +# still want the names. +xterm-16color|xterm alias 1:\ + :tc=xterm-new: + +xterm-88color|xterm alias 2:\ + :Co#88:pa#7744:tc=xterm-256color: + +xterm-256color|xterm alias 3:\ + :Co#256:pa#32767:\ + :AB=\E[48;5;%dm:AF=\E[38;5;%dm:tc=xterm-new: + +xterm-nrc|xterm alias 4:\ + :tc=xterm: +xterm-rep|xterm alias 5:\ + :tc=xterm: +xterm-xmc|xterm alias 6:\ + :sg#1:tc=xterm: # # An 8-bit description is doable with termcap, but there are probably no # termcap (or BSD curses) applications that are able to use it. +# +# Add the capability to "clear the screen" after exiting vi, more/less, etc. +# +xterm-8bit-clear:\ + :te=\233?1049l:ti=\233?1049h:ue=\23324m:\ + :tc=xterm-8bit: xterm-8bit|xterm terminal emulator 8-bit controls (X Window System):\ - :co#80:li#24:\ - :it#8:am:km:mi:ms:xn:\ - :AL=\233%dL:DC=\233%dP:DL=\233%dM:DO=\233%dB:IC=\233%d@:LE=\233%dD:\ - :RI=\233%dC:UP=\233%dA:ae=^O:al=\233L:as=^N:bl=^G:bt=\233Z:\ - :cd=\233J:ce=\233K:cl=\233H\2332J:cm=\233%i%d;%dH:cr=^M:\ - :cs=\233%i%d;%dr:ct=\2333g:dc=\233P:dl=\233M:do=^J:up=\233A:nd=\233C:\ - :ei=\2334l:ho=\233H:im=\2334h:\ + :am:km:mi:ms:xn:\ + :co#80:it#8:li#24:\ + :AL=\233%dL:DC=\233%dP:DL=\233%dM:DO=\233%dB:IC=\233%d@:\ + :K2=\217y:Km=\233M:LE=\233%dD:RI=\233%dC:UP=\233%dA:\ + :ae=\E(B:al=\233L:as=\E(0:bl=^G:bt=\233Z:cd=\233J:ce=\233K:\ + :cl=\233H\2332J:cm=\233%i%d;%dH:cr=^M:cs=\233%i%d;%dr:\ + :ct=\2333g:dc=\233P:dl=\233M:do=^J:ei=\2334l:ho=\233H:\ + :im=\2334h:\ :is=\E[62"p\E G\233m\233?7h\E>\E7\233?1;3;4;6l\2334l\233r\E8:\ :k1=\23311~:k2=\23312~:k3=\23313~:k4=\23314~:k5=\23315~:\ :k6=\23317~:k7=\23318~:k8=\23319~:k9=\23320~:kD=\2333~:\ :kI=\2332~:kN=\2336~:kP=\2335~:kb=^H:kd=\217B:\ :ke=\233?1l\E>:kh=\2331~:kl=\217D:kr=\217C:ks=\233?1h\E=:\ - :ku=\217A:le=^H:mb=\2335m:md=\2331m:me=\233m^O:mr=\2337m:\ - :rc=\E8:sc=\E7:se=\23327m:sf=^J:so=\2337m:sr=\215:\ - :st=\210:ta=^I:te=\233?1049l:ti=\233?1049h:ue=\23324m:us=\2334m:\ - :vb=\233?5h\233?5l:ve=\233?25h:vi=\233?25l:Km=\233M: + :ku=\217A:le=^H:mb=\2335m:md=\2331m:me=\233m:mr=\2337m:\ + :nd=\233C:rc=\E8:sc=\E7:se=\23327m:sf=^J:so=\2337m:sr=\215:\ + :st=\210:ta=^I:ue=\23324m:\ + :up=\233A:us=\2334m:vb=\233?5h\233?5l:ve=\233?25l\233?25h:\ + :vs=\233?12;25h:vi=\233?25l: # -xterm-hp|XFree86 xterm with hpterm function keys:\ - :k1=\Ep:k2=\Eq:k3=\Er:k4=\Es:k5=\Et:k6=\Eu:k7=\Ev:k8=\Ew:\ - :kC=\EJ:kD=\EP:@7=\EF:kI=\EQ:kN=\ES:kP=\ET:kh=\Eh:\ - :kd=\EB:kl=\ED:kr=\EC:ku=\EA:tc=xterm-basic: +xterm-hp|xterm with hpterm function keys:\ + :@7=\EF:k1=\Ep:k2=\Eq:k3=\Er:k4=\Es:k5=\Et:k6=\Eu:k7=\Ev:\ + :k8=\Ew:kC=\EJ:kD=\EP:kI=\EQ:kN=\ES:kP=\ET:kd=\EB:kh=\Eh:\ + :kl=\ED:kr=\EC:ku=\EA:tc=xterm-basic: # -xterm-sco|XFree86 xterm with SCO function keys:\ - :kl=\E[D:kd=\E[B:kr=\E[C:ku=\E[A:@7=\E[F:\ - :k1=\E[M:k2=\E[N:k3=\E[O:k4=\E[P:k5=\E[Q:\ - :k6=\E[R:k7=\E[S:k8=\E[T:k9=\E[U:k;=\E[V:\ - :F1=\E[W:F2=\E[X:F3=\E[Y:F5=\E[a:F6=\E[b:\ - :F7=\E[c:F8=\E[d:F9=\E[e:FA=\E[f:FB=\E[g:\ - :FC=\E[h:FD=\E[i:FE=\E[j:FF=\E[k:\ - :kh=\E[H:kI=\E[L:kN=\E[G:kP=\E[I:ac@:tc=xterm-basic: +xterm-sco|xterm with SCO function keys:\ + :@7=\E[F:F1=\E[W:F2=\E[X:F3=\E[Y:F5=\E[a:F6=\E[b:F7=\E[c:\ + :F8=\E[d:F9=\E[e:FA=\E[f:FB=\E[g:FC=\E[h:FD=\E[i:FE=\E[j:\ + :FF=\E[k:ac=:k1=\E[M:k2=\E[N:k3=\E[O:k4=\E[P:k5=\E[Q:\ + :k6=\E[R:k7=\E[S:k8=\E[T:k9=\E[U:k;=\E[V:kD=\177:kI=\E[L:\ + :kN=\E[G:kP=\E[I:kd=\E[B:kh=\E[H:kl=\E[D:kr=\E[C:ku=\E[A:\ + :tc=xterm-basic: # xterm-vt52|xterm emulating vt52:\ :bs:\ @@ -2906,63 +2938,77 @@ xterm-vt52|xterm emulating vt52:\ :le=\ED:nd=\EC:nw=^M^J:sf=^J:sr=\EI:ta=^I:up=\EA: # xterm-sun|xterm with Sun functionkeys:\ - :k1=\E[224z:k2=\E[225z:k3=\E[226z:k4=\E[227z:\ - :k5=\E[228z:k6=\E[229z:k7=\E[230z:k8=\E[231z:\ - :k9=\E[232z:k;=\E[233z:F1=\E[192z:F2=\E[193z:\ - :%1=\E[196z:&8=\E[195z:@0=\E[200z:kI=\E[2z:\ - :kN=\E[222z:kP=\E[216z:kh=\E[214z:kD=^?:\ - :Km=\E[M:@5=\E[197z::@7=\E[220z:\ + :%1=\E[196z:&8=\E[195z:@0=\E[200z:@5=\E[197z:@7=\E[220z:\ + :F1=\E[192z:F2=\E[193z:K2=\E[218z:Km=\E[M:k1=\E[224z:\ + :k2=\E[225z:k3=\E[226z:k4=\E[227z:k5=\E[228z:k6=\E[229z:\ + :k7=\E[230z:k8=\E[231z:k9=\E[232z:k;=\E[233z:kD=\E[3z:\ + :kI=\E[2z:kN=\E[222z:kP=\E[216z:kh=\E[214z:\ :tc=xterm-basic: # # vi may work better with this entry, because vi doesn't use insert mode much. -# |xterm-ic|xterm-vi|xterm with insert character instead of insert mode: +# |xterm-ic|xterm-vi|xterm with insert character instead of insert mode:\ xterm-ic|xterm-vi|xterm with insert char:\ - :im@:ei@:mi@:ic=\E[@:IC=\E[%d@:tc=xterm: + :mi@:\ + :IC=\E[%d@:ei@:ic=\E[@:im@:tc=xterm: # # Compatible with the X11R6.3 xterm +# +# Add the capability to "clear the screen" after exiting vi, more/less, etc. +# +xterm-r6-clear:\ + :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:ue=\E[m:\ + :tc=xterm-r6: xterm-r6|xterm-old|X11R6 xterm:\ + :am:bs:km:mi:ms:pt:xn:\ + :co#80:kn#20:li#24:\ + :*6=\E[4~:@0=\E[1~:@7=\E[4~:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:\ + :DO=\E[%dB:F1=\E[23~:F2=\E[24~:F3=\E[25~:F4=\E[26~:\ + :F5=\E[28~:F6=\E[29~:F7=\E[31~:F8=\E[32~:F9=\E[33~:\ + :FA=\E[34~:LE=\E[%dD:RI=\E[%dC:UP=\E[%dA:ae=^O:al=\E[L:\ + :as=^N:bl=^G:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:\ + :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:eA=\E)0:ei=\E[4l:\ + :ho=\E[H:im=\E[4h:\ :is=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8:\ - :rs=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8:\ - :AL=\E[%dL:DL=\E[%dM:DC=\E[%dP:DO=\E[%dB:UP=\E[%dA:\ - :LE=\E[%dD:RI=\E[%dC:al=\E[L:am:bl=^G:\ - :bs:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:co#80:\ - :cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:ho=\E[H:\ - :im=\E[4h:ei=\E[4l:mi:ks=\E[?1h\E=:ke=\E[?1l\E>:@7=\E[4~:kh=\E[1~:\ :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:k5=\E[15~:\ :k6=\E[17~:k7=\E[18~:k8=\E[19~:k9=\E[20~:k;=\E[21~:\ - :F1=\E[23~:F2=\E[24~:F3=\E[25~:F4=\E[26~:F5=\E[28~:\ - :F6=\E[29~:F7=\E[31~:F8=\E[32~:F9=\E[33~:FA=\E[34~:\ - :kn#20:km:@0=\E[1~:kI=\E[2~:kD=^?:*6=\E[4~:kP=\E[5~:kN=\E[6~:\ - :kb=^H:ku=\EOA:kd=\EOB:kr=\EOC:kl=\EOD:\ - :li#24:md=\E[1m:me=\E[m:mr=\E[7m:ms:nd=\E[C:pt:\ - :eA=\E)0:as=^N:ae=^O:ml=\El:mu=\Em:\ - :sc=\E7:rc=\E8:sf=\n:so=\E[7m:se=\E[m:sr=\EM:\ - :ti=\E7\E[?47h:te=\E[2J\E[?47l\E8:up=\E[A:us=\E[4m:ue=\E[m:xn: + :kD=\E[3~:kI=\E[2~:kN=\E[6~:kP=\E[5~:kb=^H:kd=\EOB:\ + :ke=\E[?1l\E>:kh=\E[1~:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:\ + :ku=\EOA:md=\E[1m:me=\E[m:ml=\El:mr=\E[7m:mu=\Em:nd=\E[C:\ + :rc=\E8:rs=\E[m\E[?7h\E[4l\E>\E7\E[r\E[?1;3;4;6l\E8:\ + :sc=\E7:se=\E[m:sf=^J:so=\E[7m:sr=\EM:\ + :ue=\E[m:up=\E[A:us=\E[4m: # # Compatible with the R5 xterm +# +# Add the capability to "clear the screen" after exiting vi, more/less, etc. +# +xterm-r5-clear:\ + :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:ue=\E[m:\ + :tc=xterm-r5: xterm-r5|X11R5 xterm X11R5:\ - :AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:IC=\E[%d@:UP=\E[%dA:\ - :al=\E[L:am:\ - :bs:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:cm=\E[%i%d;%dH:co#80:\ - :cs=\E[%i%d;%dr:ct=\E[3g:\ - :dc=\E[P:dl=\E[M:\ - :im=\E[4h:ei=\E[4l:mi:\ - :ho=\E[H:\ + :am:bs:km:mi:ms:pt:xn:\ + :co#80:kn#4:li#24:\ + :@7=\E[4~:AL=\E[%dL:DC=\E[%dP:DL=\E[%dM:DO=\E[%dB:\ + :IC=\E[%d@:UP=\E[%dA:al=\E[L:cd=\E[J:ce=\E[K:cl=\E[H\E[2J:\ + :cm=\E[%i%d;%dH:cs=\E[%i%d;%dr:ct=\E[3g:dc=\E[P:dl=\E[M:\ + :ei=\E[4l:ho=\E[H:im=\E[4h:\ :is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l:\ + :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:kb=^H:kd=\EOB:\ + :ke=\E[?1l\E>:kh=\E[1~:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:\ + :ku=\EOA:md=\E[1m:me=\E[m:mr=\E[7m:nd=\E[C:rc=\E8:\ :rs=\E>\E[?1;3;4;5;6l\E[4l\E[?7h\E[m\E[r\E[2J\E[H:\ - :k1=\E[11~:k2=\E[12~:k3=\E[13~:k4=\E[14~:kb=^H:kd=\EOB:ke=\E[?1l\E>:\ - :kl=\EOD:km:kn#4:kr=\EOC:ks=\E[?1h\E=:ku=\EOA:\ - :@7=\E[4~:kh=\E[1~:\ - :li#24:md=\E[1m:me=\E[m:mr=\E[7m:ms:nd=\E[C:pt:\ - :sc=\E7:rc=\E8:sf=\n:so=\E[7m:se=\E[m:sr=\EM:\ - :te=\E[2J\E[?47l\E8:ti=\E7\E[?47h:\ - :up=\E[A:us=\E[4m:ue=\E[m:xn: + :sc=\E7:se=\E[m:sf=^J:so=\E[7m:sr=\EM:\ + :up=\E[A:us=\E[4m: +# +# Customization begins here. +xterm-xfree86|xterm terminal emulator (XFree86):\ + :tc=xterm-new: # # This is the only entry which you should have to customize, since "xterm" # is widely used for a variety of incompatible terminal emulations including # color_xterm and rxvt. -xterm|xterm-color|X11 terminal emulator:\ - :ti@:te@:tc=xterm-xfree86: +xterm|X11 terminal emulator:\ + :tc=xterm-new: # :tc=xterm-r6: # dtterm termcap entry - Obtained from Xinside's CDE with permission # from Thomas Roell diff --git a/share/timedef/ja_JP.SJIS.src b/share/timedef/ja_JP.SJIS.src index 57fd95ca32e..ca6702dc588 100644 --- a/share/timedef/ja_JP.SJIS.src +++ b/share/timedef/ja_JP.SJIS.src @@ -65,7 +65,7 @@ # # just following tradition... # %a %b %e %H:%M:%S %Y -%a %b/%e %T %Y +%a %_m/%e %T %Y # # am # diff --git a/share/timedef/ja_JP.UTF-8.src b/share/timedef/ja_JP.UTF-8.src index 1ee99ca8af5..21d0eb50d19 100644 --- a/share/timedef/ja_JP.UTF-8.src +++ b/share/timedef/ja_JP.UTF-8.src @@ -64,7 +64,7 @@ # # just following tradition... # %a %b %e %H:%M:%S %Y -%a %b/%e %T %Y +%a %_m/%e %T %Y # # am # diff --git a/share/timedef/ja_JP.eucJP.src b/share/timedef/ja_JP.eucJP.src index 218b2e90e4b..155d227c4c5 100644 --- a/share/timedef/ja_JP.eucJP.src +++ b/share/timedef/ja_JP.eucJP.src @@ -64,7 +64,7 @@ # # just following tradition... # %a %b %e %H:%M:%S %Y -%a %b/%e %T %Y +%a %_m/%e %T %Y # # am # diff --git a/share/zoneinfo/antarctica b/share/zoneinfo/antarctica index 52d604b4aed..f18ae959e3e 100644 --- a/share/zoneinfo/antarctica +++ b/share/zoneinfo/antarctica @@ -1,5 +1,5 @@ #
-# @(#)antarctica	8.6
+# @(#)antarctica	8.7
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
@@ -106,7 +106,7 @@ Zone Antarctica/Casey	0	-	zzz	1969
 Zone Antarctica/Davis	0	-	zzz	1957 Jan 13
 			7:00	-	DAVT	1964 Nov # Davis Time
 			0	-	zzz	1969 Feb
-			7:00	-	DAVT	2009 Oct 18 2:0
+			7:00	-	DAVT	2009 Oct 18 2:00
 			5:00	-	DAVT
 Zone Antarctica/Mawson	0	-	zzz	1954 Feb 13
 			6:00	-	MAWT	2009 Oct 18 2:00
diff --git a/share/zoneinfo/asia b/share/zoneinfo/asia
index 1987fc815ba..b7aa43a6b55 100644
--- a/share/zoneinfo/asia
+++ b/share/zoneinfo/asia
@@ -1,4 +1,4 @@
-# @(#)asia	8.44
+# @(#)asia	8.50
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
@@ -196,6 +196,41 @@ Zone	Asia/Bahrain	3:22:20 -	LMT	1920		# Al Manamah
 # http://www.thaindian.com/newsportal/business/bangladesh-to-continue-indefinitely-with-advanced-time_100259987.html
 # 
 
+# From Alexander Krivenyshev (2009-12-24):
+# According to Bangladesh newspaper "The Daily Star,"
+# Bangladesh will change its clock back to Standard Time on Dec 31, 2009.
+#
+# Clock goes back 1-hr on Dec 31 night.
+# 
+# http://www.thedailystar.net/newDesign/news-details.php?nid=119228
+# 
+# and
+# 
+# http://www.worldtimezone.com/dst_news/dst_news_bangladesh05.html
+# 
+#
+# "...The government yesterday decided to put the clock back by one hour
+# on December 31 midnight and the new time will continue until March 31,
+# 2010 midnight. The decision came at a cabinet meeting at the Prime
+# Minister's Office last night..."
+
+# From Danvin Ruangchan (2009-12-24):
+# ...the news mentions DST will be turned off again 7 months after March
+# 31st on Oct 31, 2010.
+
+# From Arthur David Olson (2009-12-26):
+# Indeed, "The government will advance again the Banglasdesh Standard
+# Time by one one hour on March 31 next year by enforcing the Daylight
+# Saving Time (DST) for seven months. It will continue till October 31
+# until further notice." I take that last sentence as the
+# establishment of a rule.
+
+# Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
+Rule	Dhaka	2009	only	-	Jun	29	23:00	1	S
+Rule	Dhaka	2010	only	-	Jan	1	0:00	-	-
+Rule	Dhaka	2010	max	-	Mar	31	23:00	1	S
+Rule	Dhaka	2010	max	-	Nov	1	0:00	-	-
+
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Asia/Dhaka	6:01:40 -	LMT	1890
 			5:53:20	-	HMT	1941 Oct    # Howrah Mean Time?
@@ -203,8 +238,8 @@ Zone	Asia/Dhaka	6:01:40 -	LMT	1890
 			5:30	-	IST	1942 Sep
 			6:30	-	BURT	1951 Sep 30
 			6:00	-	DACT	1971 Mar 26 # Dacca Time
-			6:00	-	BDT	2009 Jun 19 23:00 # Bangladesh Time
-			6:00	1:00	BDST
+			6:00	-	BDT	2009
+			6:00	Dhaka	BD%sT
 
 # Bhutan
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
@@ -363,6 +398,69 @@ Zone	Asia/Urumqi	5:50:20	-	LMT	1928 # or Urumchi
 # West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
 # Zhaosu, Tekesi, Gongliu, Chabuchaer, Huocheng, Bole, Pishan, Suiding,
 # and Yarkand.
+
+# From Luther Ma (2009-10-17):
+# Almost all (>99.9%) ethnic Chinese (properly ethnic Han) living in
+# Xinjiang use Chinese Standard Time. Some are aware of Xinjiang time,
+# but have no need of it. All planes, trains, and schools function on
+# what is called "Beijing time." When Han make an appointment in Chinese
+# they implicitly use Beijing time.
+#
+# On the other hand, ethnic Uyghurs, who make up about half the
+# population of Xinjiang, typically use "Xinjiang time" which is two
+# hours behind Beijing time, or UTC +0600. The government of the Xinjiang
+# Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as
+# local governments such as the Urumqi city government use both times in
+# publications, referring to what is popularly called Xinjiang time as
+# "Urumqi time." When Uyghurs make an appointment in the Uyghur language
+# they almost invariably use Xinjiang time.
+#
+# (Their ethnic Han compatriots would typically have no clue of its
+# widespread use, however, because so extremely few of them are fluent in
+# Uyghur, comparable to the number of Anglo-Americans fluent in Navajo.)
+#
+# (...As with the rest of China there was a brief interval ending in 1990
+# or 1991 when summer time was in use.  The confusion was severe, with
+# the province not having dual times but four times in use at the same
+# time. Some areas remained on standard Xinjiang time or Beijing time and
+# others moving their clocks ahead.)
+#
+# ...an example of an official website using of Urumqi time.
+#
+# The first few lines of the Google translation of
+# 
+# http://www.fjysgl.gov.cn/show.aspx?id=2379&cid=39
+# 
+# (retrieved 2009-10-13)
+# > Urumqi fire seven people are missing the alleged losses of at least
+# > 500 million yuan
+# >
+# > (Reporter Dong Liu) the day before 20:20 or so (Urumqi Time 18:20),
+# > Urumqi City Department of International Plaza Luther Qiantang River
+# > burst fire. As of yesterday, 18:30, Urumqi City Fire officers and men
+# > have worked continuously for 22 hours...
+
+# From Luther Ma (2009-11-19):
+# With the risk of being redundant to previous answers these are the most common
+# English "transliterations" (w/o using non-English symbols):
+#
+# 1. Wulumuqi...
+# 2. Kashi...
+# 3. Urumqi...
+# 4. Kashgar...
+# ...
+# 5. It seems that Uyghurs in Urumqi has been using Xinjiang since at least the
+# 1960's. I know of one Han, now over 50, who grew up in the surrounding
+# countryside and used Xinjiang time as a child.
+#
+# 6. Likewise for Kashgar and the rest of south Xinjiang I don't know of any
+# start date for Xinjiang time.
+#
+# Without having access to local historical records, nor the ability to legally
+# publish them, I would go with October 1, 1949, when Xinjiang became the Uyghur
+# Autonomous Region under the PRC. (Before that Uyghurs, of course, would also
+# not be using Beijing time, but some local time.)
+
 Zone	Asia/Kashgar	5:03:56	-	LMT	1928 # or Kashi or Kaxgar
 			5:30	-	KAST	1940	 # Kashgar Time
 			5:00	-	KAST	1980 May
@@ -370,8 +468,8 @@ Zone	Asia/Kashgar	5:03:56	-	LMT	1928 # or Kashi or Kaxgar
 
 
 # From Lee Yiu Chung (2009-10-24):
-# I found there are some mistakes for the historial DST rule for Hong
-# Kong. Accoring to the DST record from Hong Kong Observatory (actually,
+# I found there are some mistakes for the...DST rule for Hong
+# Kong. [According] to the DST record from Hong Kong Observatory (actually,
 # it is not [an] observatory, but the official meteorological agency of HK,
 # and also serves as the official timing agency), there are some missing
 # and incorrect rules. Although the exact switch over time is missing, I
diff --git a/share/zoneinfo/australasia b/share/zoneinfo/australasia
index a5a4331dc84..38123900870 100644
--- a/share/zoneinfo/australasia
+++ b/share/zoneinfo/australasia
@@ -1,5 +1,5 @@
 # 
-# @(#)australasia	8.14
+# @(#)australasia	8.15
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
@@ -248,9 +248,30 @@ Zone	Indian/Cocos	6:27:40	-	LMT	1900
 			6:30	-	CCT	# Cocos Islands Time
 
 # Fiji
+# From Alexander Krivenyshev (2009-11-10):
+# According to Fiji Broadcasting Corporation,  Fiji plans to re-introduce DST
+# from November 29th 2009  to April 25th 2010.
+#
+# "Daylight savings to commence this month"
+# 
+# http://www.radiofiji.com.fj/fullstory.php?id=23719
+# 
+# or
+# 
+# http://www.worldtimezone.com/dst_news/dst_news_fiji01.html
+# 
+
+# From Steffen Thorsen (2009-11-10):
+# The Fiji Government has posted some more details about the approved
+# amendments:
+# 
+# http://www.fiji.gov.fj/publish/page_16198.shtml
+# 
 # Rule	NAME	FROM	TO	TYPE	IN	ON	AT	SAVE	LETTER/S
 Rule	Fiji	1998	1999	-	Nov	Sun>=1	2:00	1:00	S
 Rule	Fiji	1999	2000	-	Feb	lastSun	3:00	0	-
+Rule	Fiji	2009	only	-	Nov	29	2:00	1:00	S
+Rule	Fiji	2010	only	-	Apr	25	3:00	0	-
 # Zone	NAME		GMTOFF	RULES	FORMAT	[UNTIL]
 Zone	Pacific/Fiji	11:53:40 -	LMT	1915 Oct 26	# Suva
 			12:00	Fiji	FJ%sT	# Fiji Time
diff --git a/share/zoneinfo/etcetera b/share/zoneinfo/etcetera
index 5c936829857..8f69280b22b 100644
--- a/share/zoneinfo/etcetera
+++ b/share/zoneinfo/etcetera
@@ -16,9 +16,9 @@ Zone	Etc/UCT		0	-	UCT
 
 # The following link uses older naming conventions,
 # but it belongs here, not in the file `backward',
-# as functions like gmtime load the "GMT" file to handle leap seconds properly.
+# as functions like gmtime load the "UTC" file to handle leap seconds properly.
 # We want this to work even on installations that omit the other older names.
-Link	Etc/GMT				GMT
+Link	Etc/UTC				UTC
 
 Link	Etc/UTC				Etc/Universal
 Link	Etc/UTC				Etc/Zulu
diff --git a/share/zoneinfo/europe b/share/zoneinfo/europe
index 66ab880e8eb..05e3caec3ae 100644
--- a/share/zoneinfo/europe
+++ b/share/zoneinfo/europe
@@ -1,5 +1,5 @@
 # 
-# @(#)europe	8.24
+# @(#)europe	8.25
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 
@@ -2130,12 +2130,20 @@ Zone Asia/Irkutsk	 6:57:20 -	LMT	1880
 # From Oscar van Vlijmen (2003-10-18): [This region consists of]
 # Aginskij Buryatskij avtonomnyj okrug, Amurskaya oblast',
 # [parts of] Respublika Sakha (Yakutiya), Chitinskaya oblast'.
+
+# From Oscar van Vlijmen (2009-11-29):
+# ...some regions of RUssia were merged with others since 2005...
+# Some names were changed, no big deal, except for one instance: a new name.
+# YAK/YAKST: UTC+9 Zabajkal'skij kraj.
+
+# From Oscar van Vlijmen (2009-11-29):
 # The Sakha districts are: Aldanskij, Amginskij, Anabarskij,
-# Bulunskij, Verkhnekolymskij, Verkhnevilyujskij, Vilyujskij, Gornyj,
+# Verkhnevilyujskij, Vilyujskij, Gornyj,
 # Zhiganskij, Kobyajskij, Lenskij, Megino-Kangalasskij, Mirninskij,
-# Namskij, Nyurbinskij, Olenekskij, Olekminskij, Srednekolymskij,
+# Namskij, Nyurbinskij, Olenyokskij, Olyokminskij,
 # Suntarskij, Tattinskij, Ust'-Aldanskij, Khangalasskij,
-# Churapchinskij, Eveno-Bytantajskij.
+# Churapchinskij, Eveno-Bytantajskij Natsional'nij.
+
 Zone Asia/Yakutsk	 8:38:40 -	LMT	1919 Dec 15
 			 8:00	-	YAKT	1930 Jun 21 # Yakutsk Time
 			 9:00	Russia	YAK%sT	1991 Mar 31 2:00s
@@ -2145,7 +2153,9 @@ Zone Asia/Yakutsk	 8:38:40 -	LMT	1919 Dec 15
 # From Oscar van Vlijmen (2003-10-18): [This region consists of]
 # Evrejskaya avtonomnaya oblast', Khabarovskij kraj, Primorskij kraj,
 # [parts of] Respublika Sakha (Yakutiya).
-# The Sakha districts are: Verkhoyanskij, Tomponskij, Ust'-Majskij,
+
+# From Oscar van Vlijmen (2009-11-29):
+# The Sakha districts are: Bulunskij, Verkhoyanskij, Tomponskij, Ust'-Majskij,
 # Ust'-Yanskij.
 Zone Asia/Vladivostok	 8:47:44 -	LMT	1922 Nov 15
 			 9:00	-	VLAT	1930 Jun 21 # Vladivostok Time
@@ -2166,8 +2176,10 @@ Zone Asia/Sakhalin	 9:30:48 -	LMT	1905 Aug 23
 # From Oscar van Vlijmen (2003-10-18): [This region consists of]
 # Magadanskaya oblast', Respublika Sakha (Yakutiya).
 # Probably also: Kuril Islands.
-# The Sakha districts are: Abyjskij, Allaikhovskij, Momskij,
-# Nizhnekolymskij, Ojmyakonskij.
+
+# From Oscar van Vlijmen (2009-11-29):
+# The Sakha districts are: Abyjskij, Allaikhovskij, Verkhhhnekolymskij, Momskij,
+# Nizhnekolymskij, Ojmyakonskij, Srednekolymskij.
 Zone Asia/Magadan	10:03:12 -	LMT	1924 May  2
 			10:00	-	MAGT	1930 Jun 21 # Magadan Time
 			11:00	Russia	MAG%sT	1991 Mar 31 2:00s
diff --git a/share/zoneinfo/zone.tab b/share/zoneinfo/zone.tab
index 8b40a34a05a..dab18c318d1 100644
--- a/share/zoneinfo/zone.tab
+++ b/share/zoneinfo/zone.tab
@@ -1,5 +1,5 @@
 # 
-# @(#)zone.tab	8.29
+# @(#)zone.tab	8.31
 # This file is in the public domain, so clarified as of
 # 2009-05-17 by Arthur David Olson.
 #
diff --git a/sys/amd64/acpica/acpi_switch.S b/sys/amd64/acpica/acpi_switch.S
index 892dd11c47a..39f18e53a21 100644
--- a/sys/amd64/acpica/acpi_switch.S
+++ b/sys/amd64/acpica/acpi_switch.S
@@ -34,20 +34,7 @@
 #include "acpi_wakedata.h"
 #include "assym.s"
 
-#define	WAKEUP_DECL(member)	\
-    .set WAKEUP_ ## member, wakeup_ ## member - wakeup_ctx
-
-	WAKEUP_DECL(xpcb)
-	WAKEUP_DECL(gdt)
-	WAKEUP_DECL(efer)
-	WAKEUP_DECL(pat)
-	WAKEUP_DECL(star)
-	WAKEUP_DECL(lstar)
-	WAKEUP_DECL(cstar)
-	WAKEUP_DECL(sfmask)
-	WAKEUP_DECL(cpu)
-
-#define	WAKEUP_CTX(member)	WAKEUP_ ## member (%rdi)
+#define	WAKEUP_CTX(member)	wakeup_ ## member - wakeup_ctx(%rdi)
 #define	WAKEUP_PCB(member)	PCB_ ## member(%r11)
 #define	WAKEUP_XPCB(member)	XPCB_ ## member(%r11)
 
diff --git a/sys/amd64/amd64/bpf_jit_machdep.c b/sys/amd64/amd64/bpf_jit_machdep.c
index 4991a5b39be..6a5793eb81a 100644
--- a/sys/amd64/amd64/bpf_jit_machdep.c
+++ b/sys/amd64/amd64/bpf_jit_machdep.c
@@ -1,6 +1,6 @@
 /*-
  * Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
- * Copyright (C) 2005-2008 Jung-uk Kim 
+ * Copyright (C) 2005-2009 Jung-uk Kim 
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -42,6 +42,9 @@ __FBSDID("$FreeBSD$");
 #include 
 #else
 #include 
+#include 
+#include 
+#include 
 #endif
 
 #include 
@@ -51,21 +54,22 @@ __FBSDID("$FreeBSD$");
 
 #include 
 
-bpf_filter_func	bpf_jit_compile(struct bpf_insn *, u_int, int *);
+bpf_filter_func	bpf_jit_compile(struct bpf_insn *, u_int, size_t *);
 
 /*
- * emit routine to update the jump table
+ * Emit routine to update the jump table.
  */
 static void
 emit_length(bpf_bin_stream *stream, __unused u_int value, u_int len)
 {
 
-	(stream->refs)[stream->bpf_pc] += len;
+	if (stream->refs != NULL)
+		(stream->refs)[stream->bpf_pc] += len;
 	stream->cur_ip += len;
 }
 
 /*
- * emit routine to output the actual binary code
+ * Emit routine to output the actual binary code.
  */
 static void
 emit_code(bpf_bin_stream *stream, u_int value, u_int len)
@@ -92,53 +96,120 @@ emit_code(bpf_bin_stream *stream, u_int value, u_int len)
 }
 
 /*
- * Function that does the real stuff
+ * Scan the filter program and find possible optimization.
+ */
+static int
+bpf_jit_optimize(struct bpf_insn *prog, u_int nins)
+{
+	int flags;
+	u_int i;
+
+	/* Do we return immediately? */
+	if (BPF_CLASS(prog[0].code) == BPF_RET)
+		return (BPF_JIT_FRET);
+
+	for (flags = 0, i = 0; i < nins; i++) {
+		switch (prog[i].code) {
+		case BPF_LD|BPF_W|BPF_ABS:
+		case BPF_LD|BPF_H|BPF_ABS:
+		case BPF_LD|BPF_B|BPF_ABS:
+		case BPF_LD|BPF_W|BPF_IND:
+		case BPF_LD|BPF_H|BPF_IND:
+		case BPF_LD|BPF_B|BPF_IND:
+		case BPF_LDX|BPF_MSH|BPF_B:
+			flags |= BPF_JIT_FPKT;
+			break;
+		case BPF_LD|BPF_MEM:
+		case BPF_LDX|BPF_MEM:
+		case BPF_ST:
+		case BPF_STX:
+			flags |= BPF_JIT_FMEM;
+			break;
+		case BPF_LD|BPF_W|BPF_LEN:
+		case BPF_LDX|BPF_W|BPF_LEN:
+			flags |= BPF_JIT_FLEN;
+			break;
+		case BPF_JMP|BPF_JA:
+		case BPF_JMP|BPF_JGT|BPF_K:
+		case BPF_JMP|BPF_JGE|BPF_K:
+		case BPF_JMP|BPF_JEQ|BPF_K:
+		case BPF_JMP|BPF_JSET|BPF_K:
+		case BPF_JMP|BPF_JGT|BPF_X:
+		case BPF_JMP|BPF_JGE|BPF_X:
+		case BPF_JMP|BPF_JEQ|BPF_X:
+		case BPF_JMP|BPF_JSET|BPF_X:
+			flags |= BPF_JIT_FJMP;
+			break;
+		}
+		if (flags == BPF_JIT_FLAG_ALL)
+			break;
+	}
+
+	return (flags);
+}
+
+/*
+ * Function that does the real stuff.
  */
 bpf_filter_func
-bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
+bpf_jit_compile(struct bpf_insn *prog, u_int nins, size_t *size)
 {
-	struct bpf_insn *ins;
-	u_int i, pass;
 	bpf_bin_stream stream;
+	struct bpf_insn *ins;
+	int flags, fret, fpkt, fmem, fjmp, flen;
+	u_int i, pass;
 
 	/*
-	 * NOTE: do not modify the name of this variable, as it's used by
+	 * NOTE: Do not modify the name of this variable, as it's used by
 	 * the macros to emit code.
 	 */
 	emit_func emitm;
 
-	/* Allocate the reference table for the jumps */
+	flags = bpf_jit_optimize(prog, nins);
+	fret = (flags & BPF_JIT_FRET) != 0;
+	fpkt = (flags & BPF_JIT_FPKT) != 0;
+	fmem = (flags & BPF_JIT_FMEM) != 0;
+	fjmp = (flags & BPF_JIT_FJMP) != 0;
+	flen = (flags & BPF_JIT_FLEN) != 0;
+
+	if (fret)
+		nins = 1;
+
+	memset(&stream, 0, sizeof(stream));
+
+	/* Allocate the reference table for the jumps. */
+	if (fjmp) {
 #ifdef _KERNEL
-	stream.refs = (u_int *)malloc((nins + 1) * sizeof(u_int),
-	    M_BPFJIT, M_NOWAIT);
+		stream.refs = malloc((nins + 1) * sizeof(u_int), M_BPFJIT,
+		    M_NOWAIT | M_ZERO);
 #else
-	stream.refs = (u_int *)malloc((nins + 1) * sizeof(u_int));
+		stream.refs = calloc(nins + 1, sizeof(u_int));
 #endif
-	if (stream.refs == NULL)
-		return (NULL);
-
-	/* Reset the reference table */
-	for (i = 0; i < nins + 1; i++)
-		stream.refs[i] = 0;
-
-	stream.cur_ip = 0;
-	stream.bpf_pc = 0;
+		if (stream.refs == NULL)
+			return (NULL);
+	}
 
 	/*
-	 * the first pass will emit the lengths of the instructions
-	 * to create the reference table
+	 * The first pass will emit the lengths of the instructions
+	 * to create the reference table.
 	 */
 	emitm = emit_length;
 
-	pass = 0;
-	for (;;) {
+	for (pass = 0; pass < 2; pass++) {
 		ins = prog;
 
-		/* create the procedure header */
-		MOVrq2(RBX, R8);
-		MOVrq(RDI, RBX);
-		MOVrd2(ESI, R9D);
-		MOVrd(EDX, EDI);
+		/* Create the procedure header. */
+		if (fmem) {
+			PUSH(RBP);
+			MOVrq(RSP, RBP);
+			SUBib(BPF_MEMWORDS * sizeof(uint32_t), RSP);
+		}
+		if (flen)
+			MOVrd2(ESI, R9D);
+		if (fpkt) {
+			MOVrq2(RDI, R8);
+			MOVrd(EDX, EDI);
+		}
 
 		for (i = 0; i < nins; i++) {
 			stream.bpf_pc++;
@@ -153,12 +224,14 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 
 			case BPF_RET|BPF_K:
 				MOVid(ins->k, EAX);
-				MOVrq3(R8, RBX);
+				if (fmem)
+					LEAVE();
 				RET();
 				break;
 
 			case BPF_RET|BPF_A:
-				MOVrq3(R8, RBX);
+				if (fmem)
+					LEAVE();
 				RET();
 				break;
 
@@ -169,11 +242,17 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				MOVrd(EDI, ECX);
 				SUBrd(ESI, ECX);
 				CMPid(sizeof(int32_t), ECX);
-				JAEb(6);
-				ZEROrd(EAX);
-				MOVrq3(R8, RBX);
+				if (fmem) {
+					JAEb(4);
+					ZEROrd(EAX);
+					LEAVE();
+				} else {
+					JAEb(3);
+					ZEROrd(EAX);
+				}
 				RET();
-				MOVobd(RBX, RSI, EAX);
+				MOVrq3(R8, RCX);
+				MOVobd(RCX, RSI, EAX);
 				BSWAP(EAX);
 				break;
 
@@ -185,10 +264,14 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				MOVrd(EDI, ECX);
 				SUBrd(ESI, ECX);
 				CMPid(sizeof(int16_t), ECX);
-				JAEb(4);
-				MOVrq3(R8, RBX);
+				if (fmem) {
+					JAEb(2);
+					LEAVE();
+				} else
+					JAEb(1);
 				RET();
-				MOVobw(RBX, RSI, AX);
+				MOVrq3(R8, RCX);
+				MOVobw(RCX, RSI, AX);
 				SWAP_AX();
 				break;
 
@@ -196,10 +279,14 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				ZEROrd(EAX);
 				MOVid(ins->k, ESI);
 				CMPrd(EDI, ESI);
-				JBb(4);
-				MOVrq3(R8, RBX);
+				if (fmem) {
+					JBb(2);
+					LEAVE();
+				} else
+					JBb(1);
 				RET();
-				MOVobb(RBX, RSI, AL);
+				MOVrq3(R8, RCX);
+				MOVobb(RCX, RSI, AL);
 				break;
 
 			case BPF_LD|BPF_W|BPF_LEN:
@@ -222,11 +309,17 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				MOVrd(EDI, ECX);
 				SUBrd(ESI, ECX);
 				CMPid(sizeof(int32_t), ECX);
-				JAEb(6);
-				ZEROrd(EAX);
-				MOVrq3(R8, RBX);
+				if (fmem) {
+					JAEb(4);
+					ZEROrd(EAX);
+					LEAVE();
+				} else {
+					JAEb(3);
+					ZEROrd(EAX);
+				}
 				RET();
-				MOVobd(RBX, RSI, EAX);
+				MOVrq3(R8, RCX);
+				MOVobd(RCX, RSI, EAX);
 				BSWAP(EAX);
 				break;
 
@@ -243,10 +336,14 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				MOVrd(EDI, ECX);
 				SUBrd(ESI, ECX);
 				CMPid(sizeof(int16_t), ECX);
-				JAEb(4);
-				MOVrq3(R8, RBX);
+				if (fmem) {
+					JAEb(2);
+					LEAVE();
+				} else
+					JAEb(1);
 				RET();
-				MOVobw(RBX, RSI, AX);
+				MOVrq3(R8, RCX);
+				MOVobw(RCX, RSI, AX);
 				SWAP_AX();
 				break;
 
@@ -258,22 +355,32 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				MOVrd(EDI, ECX);
 				SUBrd(EDX, ECX);
 				CMPrd(ESI, ECX);
-				JAb(4);
-				MOVrq3(R8, RBX);
+				if (fmem) {
+					JAb(2);
+					LEAVE();
+				} else
+					JAb(1);
 				RET();
+				MOVrq3(R8, RCX);
 				ADDrd(EDX, ESI);
-				MOVobb(RBX, RSI, AL);
+				MOVobb(RCX, RSI, AL);
 				break;
 
 			case BPF_LDX|BPF_MSH|BPF_B:
 				MOVid(ins->k, ESI);
 				CMPrd(EDI, ESI);
-				JBb(6);
-				ZEROrd(EAX);
-				MOVrq3(R8, RBX);
+				if (fmem) {
+					JBb(4);
+					ZEROrd(EAX);
+					LEAVE();
+				} else {
+					JBb(3);
+					ZEROrd(EAX);
+				}
 				RET();
 				ZEROrd(EDX);
-				MOVobb(RBX, RSI, DL);
+				MOVrq3(R8, RCX);
+				MOVobb(RCX, RSI, DL);
 				ANDib(0x0f, DL);
 				SHLib(2, EDX);
 				break;
@@ -287,15 +394,13 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				break;
 
 			case BPF_LD|BPF_MEM:
-				MOViq((uintptr_t)mem, RCX);
-				MOVid(ins->k * 4, ESI);
-				MOVobd(RCX, RSI, EAX);
+				MOVid(ins->k * sizeof(uint32_t), ESI);
+				MOVobd(RSP, RSI, EAX);
 				break;
 
 			case BPF_LDX|BPF_MEM:
-				MOViq((uintptr_t)mem, RCX);
-				MOVid(ins->k * 4, ESI);
-				MOVobd(RCX, RSI, EDX);
+				MOVid(ins->k * sizeof(uint32_t), ESI);
+				MOVobd(RSP, RSI, EDX);
 				break;
 
 			case BPF_ST:
@@ -304,15 +409,13 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				 * be optimized if the previous instruction
 				 * was already of this type
 				 */
-				MOViq((uintptr_t)mem, RCX);
-				MOVid(ins->k * 4, ESI);
-				MOVomd(EAX, RCX, RSI);
+				MOVid(ins->k * sizeof(uint32_t), ESI);
+				MOVomd(EAX, RSP, RSI);
 				break;
 
 			case BPF_STX:
-				MOViq((uintptr_t)mem, RCX);
-				MOVid(ins->k * 4, ESI);
-				MOVomd(EDX, RCX, RSI);
+				MOVid(ins->k * sizeof(uint32_t), ESI);
+				MOVomd(EDX, RSP, RSI);
 				break;
 
 			case BPF_JMP|BPF_JA:
@@ -392,9 +495,14 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 
 			case BPF_ALU|BPF_DIV|BPF_X:
 				TESTrd(EDX, EDX);
-				JNEb(6);
-				ZEROrd(EAX);
-				MOVrq3(R8, RBX);
+				if (fmem) {
+					JNEb(4);
+					ZEROrd(EAX);
+					LEAVE();
+				} else {
+					JNEb(3);
+					ZEROrd(EAX);
+				}
 				RET();
 				MOVrd(EDX, ECX);
 				ZEROrd(EDX);
@@ -474,47 +582,56 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 			ins++;
 		}
 
-		pass++;
-		if (pass == 2)
-			break;
+		if (pass > 0)
+			continue;
 
+		*size = stream.cur_ip;
 #ifdef _KERNEL
-		stream.ibuf = (char *)malloc(stream.cur_ip, M_BPFJIT, M_NOWAIT);
-		if (stream.ibuf == NULL) {
-			free(stream.refs, M_BPFJIT);
-			return (NULL);
-		}
+		stream.ibuf = malloc(*size, M_BPFJIT, M_NOWAIT);
+		if (stream.ibuf == NULL)
+			break;
 #else
-		stream.ibuf = (char *)malloc(stream.cur_ip);
-		if (stream.ibuf == NULL) {
-			free(stream.refs);
-			return (NULL);
+		stream.ibuf = mmap(NULL, *size, PROT_READ | PROT_WRITE,
+		    MAP_ANON, -1, 0);
+		if (stream.ibuf == MAP_FAILED) {
+			stream.ibuf = NULL;
+			break;
 		}
 #endif
 
 		/*
-		 * modify the reference table to contain the offsets and
-		 * not the lengths of the instructions
+		 * Modify the reference table to contain the offsets and
+		 * not the lengths of the instructions.
 		 */
-		for (i = 1; i < nins + 1; i++)
-			stream.refs[i] += stream.refs[i - 1];
+		if (fjmp)
+			for (i = 1; i < nins + 1; i++)
+				stream.refs[i] += stream.refs[i - 1];
 
-		/* Reset the counters */
+		/* Reset the counters. */
 		stream.cur_ip = 0;
 		stream.bpf_pc = 0;
 
-		/* the second pass creates the actual code */
+		/* The second pass creates the actual code. */
 		emitm = emit_code;
 	}
 
 	/*
-	 * the reference table is needed only during compilation,
-	 * now we can free it
+	 * The reference table is needed only during compilation,
+	 * now we can free it.
 	 */
+	if (fjmp)
 #ifdef _KERNEL
-	free(stream.refs, M_BPFJIT);
+		free(stream.refs, M_BPFJIT);
 #else
-	free(stream.refs);
+		free(stream.refs);
+#endif
+
+#ifndef _KERNEL
+	if (stream.ibuf != NULL &&
+	    mprotect(stream.ibuf, *size, PROT_READ | PROT_EXEC) != 0) {
+		munmap(stream.ibuf, *size);
+		stream.ibuf = NULL;
+	}
 #endif
 
 	return ((bpf_filter_func)stream.ibuf);
diff --git a/sys/amd64/amd64/bpf_jit_machdep.h b/sys/amd64/amd64/bpf_jit_machdep.h
index 2f91ff6dc33..aa7f342fb63 100644
--- a/sys/amd64/amd64/bpf_jit_machdep.h
+++ b/sys/amd64/amd64/bpf_jit_machdep.h
@@ -1,6 +1,6 @@
 /*-
  * Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
- * Copyright (C) 2005-2008 Jung-uk Kim 
+ * Copyright (C) 2005-2009 Jung-uk Kim 
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -85,7 +85,17 @@
 #define DL	2
 #define BL	3
 
-/* A stream of native binary code.*/
+/* Optimization flags */
+#define	BPF_JIT_FRET	0x01
+#define	BPF_JIT_FPKT	0x02
+#define	BPF_JIT_FMEM	0x04
+#define	BPF_JIT_FJMP	0x08
+#define	BPF_JIT_FLEN	0x10
+
+#define	BPF_JIT_FLAG_ALL	\
+    (BPF_JIT_FPKT | BPF_JIT_FMEM | BPF_JIT_FJMP | BPF_JIT_FLEN)
+
+/* A stream of native binary code */
 typedef struct bpf_bin_stream {
 	/* Current native instruction pointer. */
 	int		cur_ip;
@@ -117,7 +127,7 @@ typedef struct bpf_bin_stream {
 typedef void (*emit_func)(bpf_bin_stream *stream, u_int value, u_int n);
 
 /*
- * native Instruction Macros
+ * Native instruction macros
  */
 
 /* movl i32,r32 */
@@ -215,8 +225,18 @@ typedef void (*emit_func)(bpf_bin_stream *stream, u_int value, u_int n);
 	emitm(&stream, 0xc486, 2);					\
 } while (0)
 
-/* ret */
-#define RET() do {						\
+/* pushq r64 */
+#define PUSH(r64) do {							\
+	emitm(&stream, (5 << 4) | (0 << 3) | (r64 & 0x7), 1);		\
+} while (0)
+
+/* leaveq */
+#define LEAVE() do {							\
+	emitm(&stream, 0xc9, 1);					\
+} while (0)
+
+/* retq */
+#define RET() do {							\
 	emitm(&stream, 0xc3, 1);					\
 } while (0)
 
@@ -253,6 +273,13 @@ typedef void (*emit_func)(bpf_bin_stream *stream, u_int value, u_int n);
 	emitm(&stream, i32, 4);						\
 } while (0)
 
+/* subq i8,r64 */
+#define SUBib(i8, r64) do {						\
+	emitm(&stream, 0x8348, 2);					\
+	emitm(&stream, (29 << 3) | (r64 & 0x7), 1);			\
+	emitm(&stream, i8, 1);						\
+} while (0)
+
 /* mull r32 */
 #define MULrd(r32) do {							\
 	emitm(&stream, 0xf7, 1);					\
diff --git a/sys/amd64/amd64/identcpu.c b/sys/amd64/amd64/identcpu.c
index 420dd03cc76..3cd2f5e4ba8 100644
--- a/sys/amd64/amd64/identcpu.c
+++ b/sys/amd64/amd64/identcpu.c
@@ -259,7 +259,7 @@ printcpuinfo(void)
 				"\024SSE4.1"
 				"\025SSE4.2"
 				"\026x2APIC"	/* xAPIC Extensions */
-				"\027"
+				"\027MOVBE"
 				"\030POPCNT"
 				"\031"
 				"\032"
diff --git a/sys/amd64/amd64/initcpu.c b/sys/amd64/amd64/initcpu.c
index 0753306282d..c97ad3dbbb1 100644
--- a/sys/amd64/amd64/initcpu.c
+++ b/sys/amd64/amd64/initcpu.c
@@ -53,7 +53,6 @@ SYSCTL_INT(_hw, OID_AUTO, instruction_sse, CTLFLAG_RD,
  *  1: force disable CLFLUSH
  */
 static int	hw_clflush_disable = -1;
-TUNABLE_INT("hw.clflush_disable", &hw_clflush_disable);
 
 int	cpu;			/* Are we 386, 386sx, 486, etc? */
 u_int	cpu_feature;		/* Feature flags */
@@ -164,6 +163,11 @@ initializecpu(void)
 	    CPUID_TO_FAMILY(cpu_id) == 0x6 &&
 	    CPUID_TO_MODEL(cpu_id) >= 0xf)
 		init_via();
+}
+
+void
+initializecpucache()
+{
 
 	/*
 	 * CPUID with %eax = 1, %ebx returns
@@ -185,7 +189,6 @@ initializecpu(void)
 	 * hw.clflush_disable tunable.  This may help Xen guest on some AMD
 	 * CPUs.
 	 */
-	if (hw_clflush_disable == 1) {
+	if (hw_clflush_disable == 1)
 		cpu_feature &= ~CPUID_CLFSH;
-	}
 }
diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c
index ebb7805b337..c4130a453f9 100644
--- a/sys/amd64/amd64/machdep.c
+++ b/sys/amd64/amd64/machdep.c
@@ -1663,6 +1663,7 @@ hammer_time(u_int64_t modulep, u_int64_t physfree)
 
 	identify_cpu();		/* Final stage of CPU initialization */
 	initializecpu();	/* Initialize CPU registers */
+	initializecpucache();
 
 	/* make an initial tss so cpu can get interrupt stack on syscall! */
 	common_tss[0].tss_rsp0 = thread0.td_kstack + \
diff --git a/sys/amd64/amd64/mca.c b/sys/amd64/amd64/mca.c
index d291d009ee2..0403de4c47b 100644
--- a/sys/amd64/amd64/mca.c
+++ b/sys/amd64/amd64/mca.c
@@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -117,48 +118,6 @@ sysctl_mca_records(SYSCTL_HANDLER_ARGS)
 	return (SYSCTL_OUT(req, &record, sizeof(record)));
 }
 
-static struct mca_record *
-mca_record_entry(int bank)
-{
-	struct mca_internal *rec;
-	uint64_t status;
-	u_int p[4];
-
-	status = rdmsr(MSR_MC_STATUS(bank));
-	if (!(status & MC_STATUS_VAL))
-		return (NULL);
-
-	rec = malloc(sizeof(*rec), M_MCA, M_NOWAIT | M_ZERO);
-	if (rec == NULL) {
-		printf("MCA: Unable to allocate space for an event.\n");
-		return (NULL);
-	}
-
-	/* Save exception information. */
-	rec->rec.mr_status = status;
-	if (status & MC_STATUS_ADDRV)
-		rec->rec.mr_addr = rdmsr(MSR_MC_ADDR(bank));
-	if (status & MC_STATUS_MISCV)
-		rec->rec.mr_misc = rdmsr(MSR_MC_MISC(bank));
-	rec->rec.mr_tsc = rdtsc();
-	rec->rec.mr_apic_id = PCPU_GET(apic_id);
-
-	/*
-	 * Clear machine check.  Don't do this for uncorrectable
-	 * errors so that the BIOS can see them.
-	 */
-	if (!(rec->rec.mr_status & (MC_STATUS_PCC | MC_STATUS_UC))) {
-		wrmsr(MSR_MC_STATUS(bank), 0);
-		do_cpuid(0, p);
-	}
-
-	mtx_lock_spin(&mca_lock);
-	STAILQ_INSERT_TAIL(&mca_records, rec, link);
-	mca_count++;
-	mtx_unlock_spin(&mca_lock);
-	return (&rec->rec);
-}
-
 static const char *
 mca_error_ttype(uint16_t mca_error)
 {
@@ -219,11 +178,13 @@ mca_error_request(uint16_t mca_error)
 }
 
 /* Dump details about a single machine check. */
-static void
-mca_log(struct mca_record *rec)
+static void __nonnull(1)
+mca_log(const struct mca_record *rec)
 {
 	uint16_t mca_error;
 
+	printf("MCA: bank %d, status 0x%016llx\n", rec->mr_bank,
+	    (long long)rec->mr_status);
 	printf("MCA: CPU %d ", rec->mr_apic_id);
 	if (rec->mr_status & MC_STATUS_UC)
 		printf("UNCOR ");
@@ -329,6 +290,59 @@ mca_log(struct mca_record *rec)
 		printf("MCA: Address 0x%llx\n", (long long)rec->mr_addr);
 }
 
+static int __nonnull(2)
+mca_check_status(int bank, struct mca_record *rec)
+{
+	uint64_t status;
+	u_int p[4];
+
+	status = rdmsr(MSR_MC_STATUS(bank));
+	if (!(status & MC_STATUS_VAL))
+		return (0);
+
+	/* Save exception information. */
+	rec->mr_status = status;
+	rec->mr_bank = bank;
+	rec->mr_addr = 0;
+	if (status & MC_STATUS_ADDRV)
+		rec->mr_addr = rdmsr(MSR_MC_ADDR(bank));
+	rec->mr_misc = 0;
+	if (status & MC_STATUS_MISCV)
+		rec->mr_misc = rdmsr(MSR_MC_MISC(bank));
+	rec->mr_tsc = rdtsc();
+	rec->mr_apic_id = PCPU_GET(apic_id);
+
+	/*
+	 * Clear machine check.  Don't do this for uncorrectable
+	 * errors so that the BIOS can see them.
+	 */
+	if (!(rec->mr_status & (MC_STATUS_PCC | MC_STATUS_UC))) {
+		wrmsr(MSR_MC_STATUS(bank), 0);
+		do_cpuid(0, p);
+	}
+	return (1);
+}
+
+static void __nonnull(1)
+mca_record_entry(const struct mca_record *record)
+{
+	struct mca_internal *rec;
+
+	rec = malloc(sizeof(*rec), M_MCA, M_NOWAIT);
+	if (rec == NULL) {
+		printf("MCA: Unable to allocate space for an event.\n");
+		mca_log(record);
+		return;
+	}
+
+	rec->rec = *record;
+	rec->logged = 0;
+	mtx_lock_spin(&mca_lock);
+	STAILQ_INSERT_TAIL(&mca_records, rec, link);
+	mca_count++;
+	mtx_unlock_spin(&mca_lock);
+}
+
 /*
  * This scans all the machine check banks of the current CPU to see if
  * there are any machine checks.  Any non-recoverable errors are
@@ -341,7 +355,7 @@ mca_log(struct mca_record *rec)
 static int
 mca_scan(int mcip)
 {
-	struct mca_record *rec;
+	struct mca_record rec;
 	uint64_t mcg_cap, ucmask;
 	int count, i, recoverable;
 
@@ -354,13 +368,13 @@ mca_scan(int mcip)
 		ucmask |= MC_STATUS_OVER;
 	mcg_cap = rdmsr(MSR_MCG_CAP);
 	for (i = 0; i < (mcg_cap & MCG_CAP_COUNT); i++) {
-		rec = mca_record_entry(i);
-		if (rec != NULL) {
+		if (mca_check_status(i, &rec)) {
 			count++;
-			if (rec->mr_status & ucmask) {
+			if (rec.mr_status & ucmask) {
 				recoverable = 0;
-				mca_log(rec);
+				mca_log(&rec);
 			}
+			mca_record_entry(&rec);
 		}
 	}
 	return (mcip ? recoverable : count);
@@ -465,6 +479,8 @@ void
 mca_init(void)
 {
 	uint64_t mcg_cap;
+	uint64_t ctl;
+	int skip;
 	int i;
 
 	/* MCE is required. */
@@ -482,15 +498,26 @@ mca_init(void)
 			wrmsr(MSR_MCG_CTL, MCG_CTL_ENABLE);
 
 		for (i = 0; i < (mcg_cap & MCG_CAP_COUNT); i++) {
-			/*
-			 * Enable logging of all errors.  For P6
-			 * processors, MC0_CTL is always enabled.
-			 *
-			 * XXX: Better CPU test needed here?
-			 */
-			if (!(i == 0 && (cpu_id & 0xf00) == 0x600))
-				wrmsr(MSR_MC_CTL(i), 0xffffffffffffffffUL);
+			/* By default enable logging of all errors. */
+			ctl = 0xffffffffffffffffUL;
+			skip = 0;
 
+			if (cpu_vendor_id == CPU_VENDOR_INTEL) {
+				/*
+				 * For P6 models before Nehalem MC0_CTL is
+				 * always enabled and reserved.
+				 */
+				if (i == 0 && CPUID_TO_FAMILY(cpu_id) == 0x6
+				    && CPUID_TO_MODEL(cpu_id) < 0x1a)
+					skip = 1;
+			} else if (cpu_vendor_id == CPU_VENDOR_AMD) {
+				/* BKDG for Family 10h: unset GartTblWkEn. */
+				if (i == 4 && CPUID_TO_FAMILY(cpu_id) >= 0xf)
+					ctl &= ~(1UL << 10);
+			}
+
+			if (!skip)
+				wrmsr(MSR_MC_CTL(i), ctl);
 			/* Clear all errors. */
 			wrmsr(MSR_MC_STATUS(i), 0);
 		}
diff --git a/sys/amd64/amd64/mem.c b/sys/amd64/amd64/mem.c
index 7cac98d8753..3a968bbc6ab 100644
--- a/sys/amd64/amd64/mem.c
+++ b/sys/amd64/amd64/mem.c
@@ -144,8 +144,8 @@ kmemphys:
  */
 /* ARGSUSED */
 int
-memmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
-    int prot __unused)
+memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot __unused, vm_memattr_t *memattr __unused)
 {
 	if (dev2unit(dev) == CDEV_MINOR_MEM)
 		*paddr = offset;
diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index 3f7ea818b80..df301d1981f 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -750,9 +750,7 @@ trap_pfault(frame, usermode)
 		PROC_UNLOCK(p);
 
 		/* Fault in the user page: */
-		rv = vm_fault(map, va, ftype,
-			      (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY
-						      : VM_FAULT_NORMAL);
+		rv = vm_fault(map, va, ftype, VM_FAULT_NORMAL);
 
 		PROC_LOCK(p);
 		--p->p_lock;
diff --git a/sys/amd64/amd64/vm_machdep.c b/sys/amd64/amd64/vm_machdep.c
index 6e567400355..a99fdaaf634 100644
--- a/sys/amd64/amd64/vm_machdep.c
+++ b/sys/amd64/amd64/vm_machdep.c
@@ -330,10 +330,14 @@ cpu_set_syscall_retval(struct thread *td, int error)
 
 	case ERESTART:
 		/*
-		 * Reconstruct pc, we know that 'syscall' is 2 bytes.
+		 * Reconstruct pc, we know that 'syscall' is 2 bytes,
+		 * lcall $X,y is 7 bytes, int 0x80 is 2 bytes.
+		 * We saved this in tf_err.
 		 * We have to do a full context restore so that %r10
 		 * (which was holding the value of %rcx) is restored
 		 * for the next iteration.
+		 * r10 restore is only required for freebsd/amd64 processes,
+		 * but shall be innocent for any ia32 ABI.
 		 */
 		td->td_frame->tf_rip -= td->td_frame->tf_err;
 		td->td_frame->tf_r10 = td->td_frame->tf_rcx;
diff --git a/sys/amd64/conf/DEFAULTS b/sys/amd64/conf/DEFAULTS
index 78952eef63b..1fb52b34e0c 100644
--- a/sys/amd64/conf/DEFAULTS
+++ b/sys/amd64/conf/DEFAULTS
@@ -20,4 +20,3 @@ options 	GEOM_PART_BSD
 options 	GEOM_PART_EBR
 options 	GEOM_PART_EBR_COMPAT
 options 	GEOM_PART_MBR
-
diff --git a/sys/amd64/conf/GENERIC b/sys/amd64/conf/GENERIC
index fe477e2184f..0a75547ec15 100644
--- a/sys/amd64/conf/GENERIC
+++ b/sys/amd64/conf/GENERIC
@@ -274,6 +274,7 @@ device		wi		# WaveLAN/Intersil/Symbol 802.11 wireless NICs.
 device		loop		# Network loopback
 device		random		# Entropy device
 device		ether		# Ethernet support
+device		vlan		# 802.1Q VLAN support
 device		tun		# Packet tunnel.
 device		pty		# BSD-style compatibility pseudo ttys
 device		md		# Memory "disks"
diff --git a/sys/amd64/conf/NOTES b/sys/amd64/conf/NOTES
index d213643e58f..c3e67522341 100644
--- a/sys/amd64/conf/NOTES
+++ b/sys/amd64/conf/NOTES
@@ -277,7 +277,6 @@ options 	DRM_DEBUG	# Include debug printfs (slow)
 # iwn:	Intel Wireless WiFi Link 4965AGN 802.11 network adapters
 # nfe:	nVidia nForce MCP on-board Ethernet Networking (BSD open source)
 # nve:	nVidia nForce MCP on-board Ethernet Networking
-# ral:	Ralink Technology IEEE 802.11 wireless adapter
 # wpi:	Intel 3945ABG Wireless LAN controller
 
 device		ed
@@ -289,16 +288,8 @@ device		iwn
 device		ipw
 device		nfe
 device		nve
-device		ral
 device		wpi
 
-device		ath			# Atheros pci/cardbus NIC's
-device		ath_hal			# pci/cardbus chip support
-options 	AH_SUPPORT_AR5416	# enable AR5416 tx/rx descriptors
-device		ath_rate_sample		# SampleRate tx rate control for ath
-#device		ath_rate_amrr		# AMRR rate control for ath driver
-#device		ath_rate_onoe		# Onoe rate control for ath driver
-
 #
 #XXX this stores pointers in a 32bit field that is defined by the hardware
 #device	pst
@@ -399,8 +390,10 @@ device		asmc
 # Hardware watchdog timers:
 #
 # ichwd: Intel ICH watchdog timer
+# amdsbwd: AMD SB7xx watchdog timer
 #
 device		ichwd
+device		amdsbwd
 
 #
 # Temperature sensors:
diff --git a/sys/amd64/ia32/ia32_syscall.c b/sys/amd64/ia32/ia32_syscall.c
index 48072486406..5e2087607d4 100644
--- a/sys/amd64/ia32/ia32_syscall.c
+++ b/sys/amd64/ia32/ia32_syscall.c
@@ -183,35 +183,7 @@ ia32_syscall(struct trapframe *frame)
 		AUDIT_SYSCALL_EXIT(error, td);
 	}
 
-	switch (error) {
-	case 0:
-		frame->tf_rax = td->td_retval[0];
-		frame->tf_rdx = td->td_retval[1];
-		frame->tf_rflags &= ~PSL_C;
-		break;
-
-	case ERESTART:
-		/*
-		 * Reconstruct pc, assuming lcall $X,y is 7 bytes,
-		 * int 0x80 is 2 bytes. We saved this in tf_err.
-		 */
-		frame->tf_rip -= frame->tf_err;
-		break;
-
-	case EJUSTRETURN:
-		break;
-
-	default:
- 		if (p->p_sysent->sv_errsize) {
- 			if (error >= p->p_sysent->sv_errsize)
-  				error = -1;	/* XXX */
-   			else
-  				error = p->p_sysent->sv_errtbl[error];
-		}
-		frame->tf_rax = error;
-		frame->tf_rflags |= PSL_C;
-		break;
-	}
+	cpu_set_syscall_retval(td, error);
 
 	/*
 	 * Traced syscall.
diff --git a/sys/amd64/include/cpufunc.h b/sys/amd64/include/cpufunc.h
index dee78cb57a1..123e2faea81 100644
--- a/sys/amd64/include/cpufunc.h
+++ b/sys/amd64/include/cpufunc.h
@@ -190,28 +190,28 @@ inl(u_int port)
 }
 
 static __inline void
-insb(u_int port, void *addr, size_t cnt)
+insb(u_int port, void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; insb"
-			 : "+D" (addr), "+c" (cnt)
+			 : "+D" (addr), "+c" (count)
 			 : "d" (port)
 			 : "memory");
 }
 
 static __inline void
-insw(u_int port, void *addr, size_t cnt)
+insw(u_int port, void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; insw"
-			 : "+D" (addr), "+c" (cnt)
+			 : "+D" (addr), "+c" (count)
 			 : "d" (port)
 			 : "memory");
 }
 
 static __inline void
-insl(u_int port, void *addr, size_t cnt)
+insl(u_int port, void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; insl"
-			 : "+D" (addr), "+c" (cnt)
+			 : "+D" (addr), "+c" (count)
 			 : "d" (port)
 			 : "memory");
 }
@@ -244,26 +244,26 @@ outl(u_int port, u_int data)
 }
 
 static __inline void
-outsb(u_int port, const void *addr, size_t cnt)
+outsb(u_int port, const void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; outsb"
-			 : "+S" (addr), "+c" (cnt)
+			 : "+S" (addr), "+c" (count)
 			 : "d" (port));
 }
 
 static __inline void
-outsw(u_int port, const void *addr, size_t cnt)
+outsw(u_int port, const void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; outsw"
-			 : "+S" (addr), "+c" (cnt)
+			 : "+S" (addr), "+c" (count)
 			 : "d" (port));
 }
 
 static __inline void
-outsl(u_int port, const void *addr, size_t cnt)
+outsl(u_int port, const void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; outsl"
-			 : "+S" (addr), "+c" (cnt)
+			 : "+S" (addr), "+c" (count)
 			 : "d" (port));
 }
 
@@ -670,9 +670,9 @@ void	halt(void);
 void	ia32_pause(void);
 u_char	inb(u_int port);
 u_int	inl(u_int port);
-void	insb(u_int port, void *addr, size_t cnt);
-void	insl(u_int port, void *addr, size_t cnt);
-void	insw(u_int port, void *addr, size_t cnt);
+void	insb(u_int port, void *addr, size_t count);
+void	insl(u_int port, void *addr, size_t count);
+void	insw(u_int port, void *addr, size_t count);
 register_t	intr_disable(void);
 void	intr_restore(register_t rf);
 void	invd(void);
@@ -697,9 +697,9 @@ void	load_gs(u_int sel);
 void	ltr(u_short sel);
 void	outb(u_int port, u_char data);
 void	outl(u_int port, u_int data);
-void	outsb(u_int port, const void *addr, size_t cnt);
-void	outsl(u_int port, const void *addr, size_t cnt);
-void	outsw(u_int port, const void *addr, size_t cnt);
+void	outsb(u_int port, const void *addr, size_t count);
+void	outsl(u_int port, const void *addr, size_t count);
+void	outsw(u_int port, const void *addr, size_t count);
 void	outw(u_int port, u_short data);
 u_long	rcr0(void);
 u_long	rcr2(void);
diff --git a/sys/amd64/include/mca.h b/sys/amd64/include/mca.h
index c43d98953e4..ddc3aeb649a 100644
--- a/sys/amd64/include/mca.h
+++ b/sys/amd64/include/mca.h
@@ -36,6 +36,7 @@ struct mca_record {
 	uint64_t	mr_misc;
 	uint64_t	mr_tsc;
 	int		mr_apic_id;
+	int		mr_bank;
 };
 
 #ifdef _KERNEL
diff --git a/sys/amd64/include/md_var.h b/sys/amd64/include/md_var.h
index c66fc9fdb36..15df851ee31 100644
--- a/sys/amd64/include/md_var.h
+++ b/sys/amd64/include/md_var.h
@@ -89,6 +89,7 @@ void	gs_load_fault(void) __asm(__STRING(gs_load_fault));
 void	dump_add_page(vm_paddr_t);
 void	dump_drop_page(vm_paddr_t);
 void	initializecpu(void);
+void	initializecpucache(void);
 void	fillw(int /*u_short*/ pat, void *base, size_t cnt);
 void	fpstate_drop(struct thread *td);
 int	is_physical_memory(vm_paddr_t addr);
diff --git a/sys/amd64/include/param.h b/sys/amd64/include/param.h
index 3ede6014adc..c940597efa1 100644
--- a/sys/amd64/include/param.h
+++ b/sys/amd64/include/param.h
@@ -105,7 +105,7 @@
 #define	NPML4EPG	(PAGE_SIZE/(sizeof (pml4_entry_t)))
 #define	NPML4EPGSHIFT	9		/* LOG2(NPML4EPG) */
 #define	PML4SHIFT	39		/* LOG2(NBPML4) */
-#define	NBPML4		(1ul<
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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 
+__FBSDID("$FreeBSD$");
+
+#define	CACHELINE_SIZE	16
+
+ENTRY(fa526_setttb)
+	mov	r1, #0
+	mcr	p15, 0, r1, c7, c14, 0	/* clean and invalidate D$ */
+	mcr	p15, 0, r1, c7, c5, 0	/* invalidate I$ */
+	mcr	p15, 0, r1, c7, c5, 6	/* invalidate BTB */
+	mcr	p15, 0, r1, c7, c10, 4	/* drain write and fill buffer */
+
+	mcr	p15, 0, r0, c2, c0, 0	/* Write the TTB */
+
+	/* If we have updated the TTB we must flush the TLB */
+	mcr	p15, 0, r1, c8, c7, 0	/* invalidate I+D TLB */
+
+	/* Make sure that pipeline is emptied */
+	mov	r0, r0
+	mov	r0, r0
+	mov	pc, lr
+
+/*
+ * TLB functions
+ */
+ENTRY(fa526_tlb_flushID_SE)
+	mcr	p15, 0, r0, c8, c7, 1	/* flush Utlb single entry */
+	mov	pc, lr
+
+/*
+ * TLB functions
+ */
+ENTRY(fa526_tlb_flushI_SE)
+	mcr	p15, 0, r0, c8, c5, 1	/* flush Itlb single entry */
+	mov	pc, lr
+
+ENTRY(fa526_cpu_sleep)
+	mov	r0, #0
+/*	nop
+	nop*/
+	mcr	p15, 0, r0, c7, c0, 4	/* Wait for interrupt*/
+	mov	pc, lr
+
+ENTRY(fa526_flush_prefetchbuf)
+	mov	r0, #0
+	mcr	p15, 0, r0, c7, c5, 4	/* Pre-fetch flush */
+	mov	pc, lr
+
+/*
+ * Cache functions
+ */
+ENTRY(fa526_idcache_wbinv_all)
+	mov	r0, #0
+	mcr	p15, 0, r0, c7, c14, 0	/* clean and invalidate D$ */
+	mcr	p15, 0, r0, c7, c5, 0	/* invalidate I$ */
+	mcr	p15, 0, r0, c7, c10, 4	/* drain write buffer */
+	mov	pc, lr
+
+ENTRY(fa526_icache_sync_all)
+	mov	r0, #0
+	mcr	p15, 0, r0, c7, c5, 0	/* invalidate I$ */
+	mov	pc, lr
+
+ENTRY(fa526_dcache_wbinv_all)
+	mov	r0, #0
+	mcr	p15, 0, r0, c7, c14, 0	/* clean and invalidate D$ */
+	mcr	p15, 0, r0, c7, c10, 4	/* drain write buffer */
+	mov	pc, lr
+
+/*
+ * Soft functions
+ */
+ENTRY(fa526_dcache_wbinv_range)
+	cmp	r1, #0x4000
+	bhs	_C_LABEL(fa526_dcache_wbinv_all)
+
+	and	r2, r0, #(CACHELINE_SIZE - 1)
+	add	r1, r1, r2
+	bic	r0, r0, #(CACHELINE_SIZE - 1)
+
+1:	mcr	p15, 0, r0, c7, c14, 1	/* clean and invalidate D$ entry */
+	add	r0, r0, #CACHELINE_SIZE
+	subs	r1, r1, #CACHELINE_SIZE
+	bhi	1b
+
+	mcr	p15, 0, r0, c7, c10, 4	/* drain write buffer */
+	mov	pc, lr
+
+ENTRY(fa526_dcache_wb_range)
+	cmp	r1, #0x4000
+	bls	1f
+
+	mov	r0, #0
+	mcr	p15, 0, r0, c7, c10, 0	/* clean entire D$ */
+	b	3f
+
+1:	and	r2, r0, #(CACHELINE_SIZE - 1)
+	add	r1, r1, r2
+	bic	r0, r0, #(CACHELINE_SIZE - 1)
+
+2:	mcr	p15, 0, r0, c7, c10, 1	/* clean D$ entry */
+	add	r0, r0, #CACHELINE_SIZE
+	subs	r1, r1, #CACHELINE_SIZE
+	bhi	2b
+
+3:	mcr	p15, 0, r0, c7, c10, 4	/* drain write buffer */
+	mov	pc, lr
+
+ENTRY(fa526_dcache_inv_range)
+	and	r2, r0, #(CACHELINE_SIZE - 1)
+	add	r1, r1, r2
+	bic	r0, r0, #(CACHELINE_SIZE - 1)
+
+1:	mcr	p15, 0, r0, c7, c6, 1	/* invalidate D$ single entry */
+	add	r0, r0, #CACHELINE_SIZE
+	subs	r1, r1, #CACHELINE_SIZE
+	bhi	1b
+
+	mov	pc, lr
+
+ENTRY(fa526_idcache_wbinv_range)
+	cmp	r1, #0x4000
+	bhs	_C_LABEL(fa526_idcache_wbinv_all)
+
+	and	r2, r0, #(CACHELINE_SIZE - 1)
+	add	r1, r1, r2
+	bic	r0, r0, #(CACHELINE_SIZE - 1)
+
+1:	mcr	p15, 0, r0, c7, c14, 1	/* clean and invalidate D$ entry */
+	mcr	p15, 0, r0, c7, c5, 1	/* invalidate I$ entry */
+	add	r0, r0, #CACHELINE_SIZE
+	subs	r1, r1, #CACHELINE_SIZE
+	bhi	1b
+
+2:	mcr	p15, 0, r0, c7, c10, 4	/* drain write buffer */
+	mov	pc, lr
+
+ENTRY(fa526_icache_sync_range)
+	cmp	r1, #0x4000
+	bhs	_C_LABEL(fa526_icache_sync_all)
+
+	and	r2, r0, #(CACHELINE_SIZE - 1)
+	add	r1, r1, r2
+	bic	r0, r0, #(CACHELINE_SIZE - 1)
+
+1:	mcr	p15, 0, r0, c7, c10, 1	/* clean D$ entry */
+	mcr	p15, 0, r0, c7, c5, 1	/* invalidate I$ entry */
+	add	r0, r0, #CACHELINE_SIZE
+	subs	r1, r1, #CACHELINE_SIZE
+	bhi	1b
+
+2:	mcr	p15, 0, r0, c7, c10, 4	/* drain write buffer */
+	mov	pc, lr
+
+ENTRY(fa526_flush_brnchtgt_E)
+	mov	r0, #0
+	mcr	p15, 0, r0, c7, c5, 6	/* invalidate BTB cache */
+	mov	pc, lr
+
+ENTRY(fa526_context_switch)
+	/*
+	 * CF_CACHE_PURGE_ID will *ALWAYS* be called prior to this.
+	 * Thus the data cache will contain only kernel data and the
+	 * instruction cache will contain only kernel code, and all
+	 * kernel mappings are shared by all processes.
+	 */
+
+	mcr	p15, 0, r0, c2, c0, 0	/* Write the TTB */
+
+	/* If we have updated the TTB we must flush the TLB */
+	mov	r0, #0
+	mcr	p15, 0, r0, c8, c7, 0	/* flush the I+D tlb */
+
+	/* Make sure that pipeline is emptied */
+	mov	r0, r0
+	mov	r0, r0
+	mov	pc, lr
+
diff --git a/sys/arm/arm/elf_trampoline.c b/sys/arm/arm/elf_trampoline.c
index 2755f81881d..6addbc387d5 100644
--- a/sys/arm/arm/elf_trampoline.c
+++ b/sys/arm/arm/elf_trampoline.c
@@ -57,6 +57,8 @@ void __startC(void);
 #define cpu_idcache_wbinv_all	arm8_cache_purgeID
 #elif defined(CPU_ARM9)
 #define cpu_idcache_wbinv_all	arm9_idcache_wbinv_all
+#elif defined(CPU_FA526)
+#define cpu_idcache_wbinv_all	fa526_idcache_wbinv_all
 #elif defined(CPU_ARM9E)
 #define cpu_idcache_wbinv_all	armv5_ec_idcache_wbinv_all
 #elif defined(CPU_ARM10)
diff --git a/sys/arm/arm/mem.c b/sys/arm/arm/mem.c
index abad8aeeebf..a77ad900b4b 100644
--- a/sys/arm/arm/mem.c
+++ b/sys/arm/arm/mem.c
@@ -153,8 +153,8 @@ memrw(struct cdev *dev, struct uio *uio, int flags)
 /* ARGSUSED */
 
 int
-memmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
-    int prot __unused)
+memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot __unused, vm_memattr_t *memattr __unused)
 {
 	if (dev2unit(dev) == CDEV_MINOR_MEM)
 		*paddr = offset;
diff --git a/sys/arm/arm/trap.c b/sys/arm/arm/trap.c
index 348ec5a3bdd..284e7979016 100644
--- a/sys/arm/arm/trap.c
+++ b/sys/arm/arm/trap.c
@@ -425,8 +425,7 @@ data_abort_handler(trapframe_t *tf)
 		p->p_lock++;
 		PROC_UNLOCK(p);
 	}
-	error = vm_fault(map, va, ftype, (ftype & VM_PROT_WRITE) ? 
-	    VM_FAULT_DIRTY : VM_FAULT_NORMAL);
+	error = vm_fault(map, va, ftype, VM_FAULT_NORMAL);
 	pcb->pcb_onfault = onfault;
 
 	if (map != kernel_map) {
diff --git a/sys/arm/at91/if_ate.c b/sys/arm/at91/if_ate.c
index ec4771c81ac..6412515d364 100644
--- a/sys/arm/at91/if_ate.c
+++ b/sys/arm/at91/if_ate.c
@@ -75,8 +75,7 @@ __FBSDID("$FreeBSD$");
 /*
  * Driver-specific flags.
  */
-#define	ATE_FLAG_DETACHING	0x01
-#define	ATE_FLAG_MULTICAST	0x02
+#define	ATE_FLAG_MULTICAST	0x01
 
 struct ate_softc
 {
@@ -196,6 +195,7 @@ ate_attach(device_t dev)
 	sc = device_get_softc(dev);
 	sc->dev = dev;
 	ATE_LOCK_INIT(sc);
+	callout_init_mtx(&sc->tick_ch, &sc->sc_mtx, 0);
 	
 	/*
 	 * Allocate resources.
@@ -233,7 +233,6 @@ ate_attach(device_t dev)
 	ATE_LOCK(sc);
 	atestop(sc);
 	ATE_UNLOCK(sc);
-	callout_init_mtx(&sc->tick_ch, &sc->sc_mtx, 0);
 
 	if ((err = ate_get_mac(sc, eaddr)) != 0) {
 		/*
@@ -276,7 +275,6 @@ ate_attach(device_t dev)
 	IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN);
 	ifp->if_snd.ifq_drv_maxlen = IFQ_MAXLEN;
 	IFQ_SET_READY(&ifp->if_snd);
-	ifp->if_timer = 0;
 	ifp->if_linkmib = &sc->mibdata;
 	ifp->if_linkmiblen = sizeof(sc->mibdata);
 	sc->mibdata.dot3Compliance = DOT3COMPLIANCE_COLLS;
@@ -311,12 +309,11 @@ ate_detach(device_t dev)
 	KASSERT(sc != NULL, ("[ate: %d]: sc is NULL", __LINE__));
 	ifp = sc->ifp;
 	if (device_is_attached(dev)) {
+		ether_ifdetach(ifp);
 		ATE_LOCK(sc);
-			sc->flags |= ATE_FLAG_DETACHING;
-			atestop(sc);
+		atestop(sc);
 		ATE_UNLOCK(sc);
 		callout_drain(&sc->tick_ch);
-		ether_ifdetach(ifp);
 	}
 	if (sc->miibus != NULL) {
 		device_delete_child(dev, sc->miibus);
@@ -999,7 +996,6 @@ atestop(struct ate_softc *sc)
 	ATE_ASSERT_LOCKED(sc);
 	ifp = sc->ifp;
 	if (ifp) {
-		ifp->if_timer = 0;
 		ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
 	}
 
@@ -1109,11 +1105,9 @@ ateioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 				    & (IFF_PROMISC | IFF_ALLMULTI)) != 0)
 					ate_rxfilter(sc);
 			} else {
-				if ((sc->flags & ATE_FLAG_DETACHING) == 0)
-					ateinit_locked(sc);
+				ateinit_locked(sc);
 			}
 		} else if ((drv_flags & IFF_DRV_RUNNING) != 0) {
-			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 			atestop(sc);
 		}
 		sc->if_flags = flags;
diff --git a/sys/arm/conf/AVILA b/sys/arm/conf/AVILA
index 7019bc7a389..b6656597648 100644
--- a/sys/arm/conf/AVILA
+++ b/sys/arm/conf/AVILA
@@ -61,6 +61,10 @@ options 	BOOTP_COMPAT
 #options 	PREEMPTION
 #options 	VERBOSE_SYSINIT
 
+# Hardware performance counters
+options 	HWPMC_HOOKS
+device		hwpmc
+
 #device		saarm
 
 device		pci
@@ -132,6 +136,7 @@ device		ath_rf5413
 device		ath_ar5416
 options 	AH_SUPPORT_AR5416
 device		ath_ar9160
+device		ath_ar9280
 
 device		usb
 #options 	USB_DEBUG
diff --git a/sys/arm/conf/CAMBRIA b/sys/arm/conf/CAMBRIA
index bd22118416a..4de9b2c9949 100644
--- a/sys/arm/conf/CAMBRIA
+++ b/sys/arm/conf/CAMBRIA
@@ -58,6 +58,10 @@ options 	BOOTP_NFSV3
 options 	BOOTP_WIRED_TO=npe0
 options 	BOOTP_COMPAT
 
+# Hardware performance counters
+options 	HWPMC_HOOKS
+device		hwpmc
+
 #options 	VERBOSE_SYSINIT
 options 	VERBOSE_INIT_ARM
 
@@ -135,11 +139,8 @@ device		ath_rf5413
 #
 #device		ath_ar5416
 #options 	AH_SUPPORT_AR5416	# NB: for 11n descriptor format
-#device		ath_rf2133
 #device		ath_ar9160
 #device		ath_ar9280
-#device		ath_rf9280
-#device		ath_ar9285
 
 # NB: 2 USB 2.0 ports standard
 device		usb
diff --git a/sys/arm/conf/CNS11XXNAS b/sys/arm/conf/CNS11XXNAS
new file mode 100644
index 00000000000..29791a3b9e0
--- /dev/null
+++ b/sys/arm/conf/CNS11XXNAS
@@ -0,0 +1,124 @@
+# CNS11XXNAS -  StarSemi STR9104/Cavium CNS1102 NAS
+# kernel configuration file for FreeBSD/arm
+#
+# For more information on this file, please read the handbook section on
+# Kernel Configuration Files:
+#
+#    http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
+#
+# The handbook is also available locally in /usr/share/doc/handbook
+# if you've installed the doc distribution, otherwise always see the
+# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
+# latest information.
+#
+# An exhaustive list of options and more detailed explanations of the
+# device lines is also present in the ../../conf/NOTES and NOTES files. 
+# If you are in doubt as to the purpose or necessity of a line, check first 
+# in NOTES.
+#
+# $FreeBSD$
+
+ident		CNS11XXNAS
+
+#options 	PHYSADDR=0x10000000
+#options 	KERNPHYSADDR=0x10200000
+#options 	KERNVIRTADDR=0xc0200000		# Used in ldscript.arm
+#options 	FLASHADDR=0x50000000
+#options 	LOADERRAMADDR=0x00000000
+#options 	STARTUP_PAGETABLE_ADDR=0x10000000
+
+include		"../econa/std.econa"
+
+makeoptions	MODULES_OVERRIDE=""
+
+makeoptions	DEBUG=-g		#Build kernel with gdb(1) debug symbols
+options 	HZ=100
+options 	DEVICE_POLLING
+
+# Debugging for use in -current
+options 	KDB
+#options 	GDB
+options 	DDB			#Enable the kernel debugger
+#options 	INVARIANTS		#Enable calls of extra sanity checking
+#options 	INVARIANT_SUPPORT	#Extra sanity checks of internal structures, required by INVARIANTS
+#options 	WITNESS		#Enable checks to detect deadlocks and cycles
+##options 	WITNESS_SKIPSPIN	#Don't run witness on spinlocks for speed
+#options 	DIAGNOSTIC
+
+
+#options		COMPAT_FREEBSD5
+#options		COMPAT_FREEBSD6
+#options		COMPAT_FREEBSD7
+
+
+options 	SCHED_ULE		#ULE scheduler
+#options 	SCHED_4BSD		#4BSD scheduler
+options 	GEOM_PART_GPT		# GUID Partition Tables.
+#options 	GEOM_PART_EBR
+#options 	GEOM_PART_EBR_COMPAT
+options 	GEOM_LABEL		# Provides labelization
+
+
+options 	INET			#InterNETworking
+options 	INET6			#IPv6 communications protocols
+options 	FFS			#Berkeley Fast Filesystem
+options 	SOFTUPDATES		#Enable FFS soft updates support
+options 	UFS_ACL			#Support for access control lists
+options 	UFS_DIRHASH		#Improve performance on big directories
+options 	NFSCLIENT		#Network Filesystem Client
+#options 	NFSSERVER		#Network Filesystem Server
+#options 	NFSLOCKD		#Network Lock Manager
+options 	NFS_ROOT		#NFS usable as /, requires NFSCLIENT
+options 	MSDOSFS			#MSDOS Filesystem
+#options 	CD9660			#ISO 9660 Filesystem
+#options 	PROCFS			#Process filesystem (requires PSEUDOFS)
+options 	PSEUDOFS		#Pseudo-filesystem framework
+options 	SCSI_DELAY=5000		#Delay (in ms) before probing SCSI
+options 	KTRACE			#ktrace(1) support
+options 	SYSVSHM			#SYSV-style shared memory
+options 	SYSVMSG			#SYSV-style message queues
+options 	SYSVSEM			#SYSV-style semaphores
+options 	_KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions
+options 	MUTEX_NOINLINE		#Mutex inlines are space hogs
+options 	RWLOCK_NOINLINE		#rwlock inlines are space hogs
+options 	SX_NOINLINE		#sx inliens are space hogs
+#options 	BOOTP
+#options 	BOOTP_NFSROOT
+#options 	BOOTP_NFSV3
+#options 	BOOTP_WIRED_TO=npe0
+#options 	BOOTP_COMPAT
+
+#device		pci
+device		uart
+
+
+device		firmware
+device		mii		# Minimal mii routines
+device		ether
+device		bpf
+
+device		pty
+device		loop
+
+device		md
+device          random          # Entropy device
+
+#options 	ARM_USE_SMALL_ALLOC
+
+device		usb
+#options 	USB_DEBUG
+device		ohci
+device		ehci
+device		umass
+device		scbus		# SCSI bus (required for SCSI)
+device		da		# Direct Access (disks)
+device		pass
+device 		cfi
+
+#device		udav		# Davicom DM9601E USB
+
+device		geom_label
+device		geom_journal
+device 		geom_part_bsd
+
+options		ROOTDEVNAME=\"ufs:da0s1a\"
diff --git a/sys/arm/econa/cfi_bus_econa.c b/sys/arm/econa/cfi_bus_econa.c
new file mode 100644
index 00000000000..88b68993156
--- /dev/null
+++ b/sys/arm/econa/cfi_bus_econa.c
@@ -0,0 +1,67 @@
+/*-
+ * Copyright (c) 2009 Yohanes Nugroho 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+
+#include 
+#include 
+
+static int
+cfi_econa_probe(device_t dev)
+{
+
+	return cfi_probe(dev);
+}
+
+static device_method_t cfi_econa_methods[] = {
+	/* device interface */
+	DEVMETHOD(device_probe,		cfi_econa_probe),
+	DEVMETHOD(device_attach,	cfi_attach),
+	DEVMETHOD(device_detach,	cfi_detach),
+
+	{0, 0}
+};
+
+static driver_t cfi_econa_driver = {
+	cfi_driver_name,
+	cfi_econa_methods,
+	sizeof(struct cfi_softc),
+};
+DRIVER_MODULE(cfi, econaarm, cfi_econa_driver, cfi_devclass, 0, 0);
diff --git a/sys/arm/econa/econa.c b/sys/arm/econa/econa.c
new file mode 100644
index 00000000000..eb6d04e5fcb
--- /dev/null
+++ b/sys/arm/econa/econa.c
@@ -0,0 +1,758 @@
+/*-
+ * Copyright (c) 2009 Yohanes Nugroho 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define	_ARM32_BUS_DMA_PRIVATE
+#include 
+#include 
+#include 
+
+#include "econa_reg.h"
+#include "econa_var.h"
+
+static struct econa_softc *econa_softc;
+
+unsigned int CPU_clock = 200000000;
+unsigned int AHB_clock;
+unsigned int APB_clock;
+
+bs_protos(generic);
+bs_protos(generic_armv4);
+
+struct bus_space econa_bs_tag = {
+	/* cookie */
+	(void *) 0,
+
+	/* mapping/unmapping */
+	generic_bs_map,
+	generic_bs_unmap,
+	generic_bs_subregion,
+
+	/* allocation/deallocation */
+	generic_bs_alloc,
+	generic_bs_free,
+
+	/* barrier */
+	generic_bs_barrier,
+
+	/* read (single) */
+	generic_bs_r_1,
+	generic_armv4_bs_r_2,
+	generic_bs_r_4,
+	NULL,
+
+	/* read multiple */
+	generic_bs_rm_1,
+	generic_armv4_bs_rm_2,
+	generic_bs_rm_4,
+	NULL,
+
+	/* read region */
+	generic_bs_rr_1,
+	generic_armv4_bs_rr_2,
+	generic_bs_rr_4,
+	NULL,
+
+	/* write (single) */
+	generic_bs_w_1,
+	generic_armv4_bs_w_2,
+	generic_bs_w_4,
+	NULL,
+
+	/* write multiple */
+	generic_bs_wm_1,
+	generic_armv4_bs_wm_2,
+	generic_bs_wm_4,
+	NULL,
+
+	/* write region */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+
+	/* set multiple */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+
+	/* set region */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+
+	/* copy */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+
+	/* read (single) stream */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+
+	/* read multiple stream */
+	NULL,
+	generic_armv4_bs_rm_2,
+	NULL,
+	NULL,
+
+	/* read region stream */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+
+	/* write (single) stream */
+	NULL,
+	NULL,
+	NULL,
+	NULL,
+
+	/* write multiple stream */
+	NULL,
+	generic_armv4_bs_wm_2,
+	NULL,
+	NULL,
+
+	/* write region stream */
+	NULL,
+	NULL,
+	NULL,
+	NULL
+};
+
+bus_space_tag_t obio_tag = &econa_bs_tag;
+
+static int
+econa_probe(device_t dev)
+{
+
+	device_set_desc(dev, "ECONA device bus");
+	return (0);
+}
+
+static void
+econa_identify(driver_t *drv, device_t parent)
+{
+
+	BUS_ADD_CHILD(parent, 0, "econaarm", 0);
+}
+
+struct arm32_dma_range *
+bus_dma_get_range(void)
+{
+
+	return (NULL);
+}
+
+int
+bus_dma_get_range_nb(void)
+{
+
+	return (0);
+}
+
+extern void irq_entry(void);
+
+static void
+econa_add_child(device_t dev, int prio, const char *name, int unit,
+    bus_addr_t addr, bus_size_t size,
+    int irq0, int irq1,
+    int irq2, int irq3, int irq4)
+{
+	device_t kid;
+	struct econa_ivar *ivar;
+
+	kid = device_add_child_ordered(dev, prio, name, unit);
+	if (kid == NULL) {
+		printf("Can't add child %s%d ordered\n", name, unit);
+		return;
+	}
+	ivar = malloc(sizeof(*ivar), M_DEVBUF, M_NOWAIT | M_ZERO);
+	if (ivar == NULL) {
+		device_delete_child(dev, kid);
+		return;
+	}
+	device_set_ivars(kid, ivar);
+	resource_list_init(&ivar->resources);
+	if (irq0 != -1)
+		bus_set_resource(kid, SYS_RES_IRQ, 0, irq0, 1);
+	if (irq1 != 0)
+		bus_set_resource(kid, SYS_RES_IRQ, 1, irq1, 1);
+	if (irq2 != 0)
+		bus_set_resource(kid, SYS_RES_IRQ, 2, irq2, 1);
+	if (irq3 != 0)
+		bus_set_resource(kid, SYS_RES_IRQ, 3, irq3, 1);
+	if (irq4 != 0)
+		bus_set_resource(kid, SYS_RES_IRQ, 4, irq4, 1);
+
+	if (addr != 0)
+		bus_set_resource(kid, SYS_RES_MEMORY, 0, addr, size);
+
+}
+
+struct cpu_devs
+{
+	const char *name;
+	int unit;
+	bus_addr_t mem_base;
+	bus_size_t mem_len;
+	int irq0;
+	int irq1;
+	int irq2;
+	int irq3;
+	int irq4;
+};
+
+struct cpu_devs econarm_devs[] =
+{
+	{
+		"econa_ic", 0,
+		ECONA_IO_BASE + ECONA_PIC_BASE, ECONA_PIC_SIZE,
+		0
+	},
+	{
+		"system", 0,
+		ECONA_IO_BASE + ECONA_SYSTEM_BASE, ECONA_SYSTEM_SIZE,
+		0
+	},
+	{
+		"uart", 0,
+		ECONA_IO_BASE + ECONA_UART_BASE, ECONA_UART_SIZE,
+		ECONA_IRQ_UART
+	},
+	{
+		"timer", 0,
+		ECONA_IO_BASE + ECONA_TIMER_BASE, ECONA_TIMER_SIZE,
+		ECONA_IRQ_TIMER_1, ECONA_IRQ_TIMER_2
+	},
+	{
+		"ohci", 0,
+		ECONA_OHCI_VBASE, ECONA_OHCI_SIZE,
+		ECONA_IRQ_OHCI
+		},
+	{
+		"ehci", 0,
+		ECONA_EHCI_VBASE, ECONA_EHCI_SIZE,
+		ECONA_IRQ_EHCI
+	},
+	{
+		"cfi", 0,
+		ECONA_CFI_VBASE, ECONA_CFI_SIZE,
+		0
+	},
+	{
+		"ece", 0,
+		ECONA_IO_BASE + ECONA_NET_BASE, ECONA_NET_SIZE,
+		ECONA_IRQ_STATUS,
+		ECONA_IRQ_TSTC, ECONA_IRQ_FSRC,
+		ECONA_IRQ_TSQE, ECONA_IRQ_FSQF,
+	},
+	{	0, 0, 0, 0, 0, 0, 0, 0, 0 }
+};
+
+static void
+econa_cpu_add_builtin_children(device_t dev, struct econa_softc *sc)
+{
+	int i;
+	struct cpu_devs *walker;
+
+	for (i = 0, walker = econarm_devs; walker->name; i++, walker++) {
+		econa_add_child(dev, i, walker->name, walker->unit,
+		    walker->mem_base, walker->mem_len,
+		    walker->irq0,walker->irq1, walker->irq2,
+		    walker->irq3, walker->irq4);
+	}
+
+}
+
+struct intc_trigger_t {
+	int mode;
+	int level;
+};
+
+static struct intc_trigger_t intc_trigger_table[] = {
+	{INTC_EDGE_TRIGGER, INTC_RISING_EDGE},
+	{INTC_EDGE_TRIGGER, INTC_RISING_EDGE},
+	{INTC_EDGE_TRIGGER, INTC_FALLING_EDGE},
+	{INTC_EDGE_TRIGGER, INTC_RISING_EDGE},
+	{INTC_TRIGGER_UNKNOWN, INTC_TRIGGER_UNKNOWN},
+	{INTC_LEVEL_TRIGGER, INTC_ACTIVE_LOW},
+	{INTC_LEVEL_TRIGGER, INTC_ACTIVE_LOW},
+	{INTC_LEVEL_TRIGGER, INTC_ACTIVE_HIGH},
+	{INTC_TRIGGER_UNKNOWN, INTC_TRIGGER_UNKNOWN},
+	{INTC_LEVEL_TRIGGER, INTC_ACTIVE_HIGH},
+	{INTC_LEVEL_TRIGGER, INTC_ACTIVE_HIGH},
+	{INTC_LEVEL_TRIGGER, INTC_ACTIVE_HIGH},
+	{INTC_LEVEL_TRIGGER, INTC_ACTIVE_HIGH},
+	{INTC_TRIGGER_UNKNOWN, INTC_TRIGGER_UNKNOWN},
+	{INTC_LEVEL_TRIGGER, INTC_ACTIVE_HIGH},
+	{INTC_EDGE_TRIGGER, INTC_FALLING_EDGE},
+	{INTC_TRIGGER_UNKNOWN, INTC_TRIGGER_UNKNOWN},
+	{INTC_TRIGGER_UNKNOWN, INTC_TRIGGER_UNKNOWN},
+	{INTC_LEVEL_TRIGGER, INTC_ACTIVE_HIGH},
+	{INTC_EDGE_TRIGGER, INTC_RISING_EDGE},
+	{INTC_EDGE_TRIGGER, INTC_RISING_EDGE},
+	{INTC_EDGE_TRIGGER, INTC_RISING_EDGE},
+	{INTC_EDGE_TRIGGER, INTC_RISING_EDGE},
+	{INTC_LEVEL_TRIGGER, INTC_ACTIVE_LOW},
+	{INTC_LEVEL_TRIGGER, INTC_ACTIVE_LOW},
+};
+
+static inline uint32_t
+read_4(struct econa_softc *sc, bus_size_t off)
+{
+
+	return bus_space_read_4(sc->ec_st, sc->ec_sys_sh, off);
+}
+
+static inline void
+write_4(struct econa_softc *sc, bus_size_t off, uint32_t val)
+{
+
+	return bus_space_write_4(sc->ec_st, sc->ec_sys_sh, off, val);
+}
+
+static inline uint32_t
+system_read_4(struct econa_softc *sc, bus_size_t off)
+{
+
+	return bus_space_read_4(sc->ec_st, sc->ec_system_sh, off);
+}
+
+static inline void
+system_write_4(struct econa_softc *sc, bus_size_t off, uint32_t val)
+{
+
+	return bus_space_write_4(sc->ec_st, sc->ec_system_sh, off, val);
+}
+
+
+
+static inline void
+econa_set_irq_mode(struct econa_softc * sc, unsigned int irq,
+		   unsigned int mode)
+{
+	unsigned int val;
+
+	if ((mode != INTC_LEVEL_TRIGGER) && (mode != INTC_EDGE_TRIGGER))
+		return;
+
+	val =	read_4(sc, INTC_INTERRUPT_TRIGGER_MODE_REG_OFFSET);
+
+	if (mode == INTC_LEVEL_TRIGGER) {
+		if (val & (1UL << irq)) {
+			val &= ~(1UL << irq);
+			write_4(sc, INTC_INTERRUPT_TRIGGER_MODE_REG_OFFSET,
+			    val);
+		}
+	} else {
+		if (!(val & (1UL << irq))) {
+			val |= (1UL << irq);
+			write_4(sc, INTC_INTERRUPT_TRIGGER_MODE_REG_OFFSET,
+			    val);
+		}
+	}
+}
+
+/*
+ * Configure interrupt trigger level to be Active High/Low
+ * or Rising/Falling Edge
+ */
+static inline void
+econa_set_irq_level(struct econa_softc * sc,
+    unsigned int irq, unsigned int level)
+{
+	unsigned int val;
+
+	if ((level != INTC_ACTIVE_HIGH) &&
+	    (level != INTC_ACTIVE_LOW) &&
+	    (level != INTC_RISING_EDGE) &&
+	    (level != INTC_FALLING_EDGE)) {
+		return;
+	}
+
+	val = read_4(sc, INTC_INTERRUPT_TRIGGER_LEVEL_REG_OFFSET);
+
+	if ((level == INTC_ACTIVE_HIGH) || (level == INTC_RISING_EDGE)) {
+		if (val & (1UL << irq)) {
+			val &= ~(1UL << irq);
+			write_4(sc, INTC_INTERRUPT_TRIGGER_LEVEL_REG_OFFSET,
+			    val);
+		}
+	} else {
+		if (!(val & (1UL << irq))) {
+			val |= (1UL << irq);
+			write_4(sc, INTC_INTERRUPT_TRIGGER_LEVEL_REG_OFFSET,
+			    val);
+		}
+	}
+}
+
+static void
+get_system_clock(void)
+{
+	uint32_t sclock = system_read_4(econa_softc, SYSTEM_CLOCK);
+
+	sclock = (sclock >> 6) & 0x03;
+
+	switch (sclock) {
+	case 0:
+		CPU_clock = 175000000;
+		break;
+	case 1:
+		CPU_clock = 200000000;
+		break;
+	case 2:
+		CPU_clock = 225000000;
+		break;
+	case 3:
+		CPU_clock = 250000000;
+		break;
+	}
+	AHB_clock = CPU_clock >> 1;
+	APB_clock = AHB_clock >> 1;
+}
+
+static int
+econa_attach(device_t dev)
+{
+	struct econa_softc *sc = device_get_softc(dev);
+	int i;
+
+	econa_softc = sc;
+	sc->ec_st = &econa_bs_tag;
+	sc->ec_sh = ECONA_IO_BASE;
+	sc->dev = dev;
+	if (bus_space_subregion(sc->ec_st, sc->ec_sh, ECONA_PIC_BASE,
+	    ECONA_PIC_SIZE, &sc->ec_sys_sh) != 0)
+		panic("Unable to map IRQ registers");
+
+	if (bus_space_subregion(sc->ec_st, sc->ec_sh, ECONA_SYSTEM_BASE,
+	    ECONA_SYSTEM_SIZE, &sc->ec_system_sh) != 0)
+		panic("Unable to map IRQ registers");
+
+	sc->ec_irq_rman.rm_type = RMAN_ARRAY;
+	sc->ec_irq_rman.rm_descr = "ECONA IRQs";
+	sc->ec_mem_rman.rm_type = RMAN_ARRAY;
+	sc->ec_mem_rman.rm_descr = "ECONA Memory";
+	if (rman_init(&sc->ec_irq_rman) != 0 ||
+	    rman_manage_region(&sc->ec_irq_rman, 0, 31) != 0)
+		panic("econa_attach: failed to set up IRQ rman");
+	if (rman_init(&sc->ec_mem_rman) != 0 ||
+	    rman_manage_region(&sc->ec_mem_rman, 0,
+	    ~0) != 0)
+		panic("econa_attach: failed to set up memory rman");
+
+	write_4(sc, INTC_INTERRUPT_CLEAR_EDGE_TRIGGER_REG_OFFSET, 0xffffffff);
+
+	write_4(sc, INTC_INTERRUPT_MASK_REG_OFFSET, 0xffffffff);
+
+	write_4(sc, INTC_FIQ_MODE_SELECT_REG_OFFSET, 0);
+
+	/*initialize irq*/
+	for (i = 0; i < 32; i++) {
+		if (intc_trigger_table[i].mode != INTC_TRIGGER_UNKNOWN) {
+			econa_set_irq_mode(sc,i, intc_trigger_table[i].mode);
+			econa_set_irq_level(sc, i, intc_trigger_table[i].level);
+		}
+	}
+
+	get_system_clock();
+
+	econa_cpu_add_builtin_children(dev, sc);
+
+	bus_generic_probe(dev);
+	bus_generic_attach(dev);
+	enable_interrupts(I32_bit | F32_bit);
+
+	return (0);
+}
+
+static struct resource *
+econa_alloc_resource(device_t dev, device_t child, int type, int *rid,
+    u_long start, u_long end, u_long count, u_int flags)
+{
+	struct econa_softc *sc = device_get_softc(dev);
+	struct resource_list_entry *rle;
+	struct econa_ivar *ivar = device_get_ivars(child);
+	struct resource_list *rl = &ivar->resources;
+
+	if (device_get_parent(child) != dev)
+		return (BUS_ALLOC_RESOURCE(device_get_parent(dev), child,
+			   type, rid, start, end, count, flags));
+
+	rle = resource_list_find(rl, type, *rid);
+	if (rle == NULL) {
+		return (NULL);
+	}
+	if (rle->res)
+		panic("Resource rid %d type %d already in use", *rid, type);
+	if (start == 0UL && end == ~0UL) {
+		start = rle->start;
+		count = ulmax(count, rle->count);
+		end = ulmax(rle->end, start + count - 1);
+	}
+	switch (type)
+	{
+	case SYS_RES_IRQ:
+		rle->res = rman_reserve_resource(&sc->ec_irq_rman,
+		    start, end, count, flags, child);
+		break;
+	case SYS_RES_MEMORY:
+		rle->res = rman_reserve_resource(&sc->ec_mem_rman,
+		    start, end, count, flags, child);
+		if (rle->res != NULL) {
+			rman_set_bustag(rle->res, &econa_bs_tag);
+			rman_set_bushandle(rle->res, start);
+		}
+		break;
+	}
+	if (rle->res) {
+		rle->start = rman_get_start(rle->res);
+		rle->end = rman_get_end(rle->res);
+		rle->count = count;
+		rman_set_rid(rle->res, *rid);
+	}
+	return (rle->res);
+}
+
+static struct resource_list *
+econa_get_resource_list(device_t dev, device_t child)
+{
+	struct econa_ivar *ivar;
+	ivar = device_get_ivars(child);
+	return (&(ivar->resources));
+}
+
+static int
+econa_release_resource(device_t dev, device_t child, int type,
+    int rid, struct resource *r)
+{
+	struct resource_list *rl;
+	struct resource_list_entry *rle;
+
+	rl = econa_get_resource_list(dev, child);
+	if (rl == NULL)
+		return (EINVAL);
+	rle = resource_list_find(rl, type, rid);
+	if (rle == NULL)
+		return (EINVAL);
+	rman_release_resource(r);
+	rle->res = NULL;
+	return (0);
+}
+
+static int
+econa_setup_intr(device_t dev, device_t child,
+    struct resource *ires, int flags, driver_filter_t *filt,
+    driver_intr_t *intr, void *arg, void **cookiep)
+{
+
+	if (rman_get_start(ires) == ECONA_IRQ_SYSTEM && filt == NULL)
+		panic("All system interrupt ISRs must be FILTER");
+
+	BUS_SETUP_INTR(device_get_parent(dev), child, ires, flags, filt,
+	    intr, arg, cookiep);
+
+	arm_unmask_irq(rman_get_start(ires));
+
+	return (0);
+}
+
+static int
+econa_teardown_intr(device_t dev, device_t child, struct resource *res,
+    void *cookie)
+{
+
+	return (BUS_TEARDOWN_INTR(device_get_parent(dev), child, res, cookie));
+}
+
+static int
+econa_activate_resource(device_t bus, device_t child, int type, int rid,
+    struct resource *r)
+{
+
+	return (rman_activate_resource(r));
+}
+
+static int
+econa_print_child(device_t dev, device_t child)
+{
+	struct econa_ivar *ivars;
+	struct resource_list *rl;
+	int retval = 0;
+
+	ivars = device_get_ivars(child);
+	rl = &ivars->resources;
+
+	retval += bus_print_child_header(dev, child);
+
+	retval += resource_list_print_type(rl, "port", SYS_RES_IOPORT, "%#lx");
+	retval += resource_list_print_type(rl, "mem", SYS_RES_MEMORY, "%#lx");
+	retval += resource_list_print_type(rl, "irq", SYS_RES_IRQ, "%ld");
+	if (device_get_flags(dev))
+		retval += printf(" flags %#x", device_get_flags(dev));
+
+	retval += bus_print_child_footer(dev, child);
+
+	return (retval);
+}
+
+void
+arm_mask_irq(uintptr_t nb)
+{
+	unsigned int value;
+
+	value = read_4(econa_softc,INTC_INTERRUPT_MASK_REG_OFFSET) | 1<
+ * Copyright (c) 1994-1998 Mark Brinicombe.
+ * Copyright (c) 1994 Brini.
+ * All rights reserved.
+ *
+ * This code is derived from software written for Brini by Mark Brinicombe
+ *
+ * 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.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *      This product includes software developed by Brini.
+ * 4. The name of the company nor the name of the author may be used to
+ *    endorse or promote products derived from this software without specific
+ *    prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY BRINI ``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 BRINI 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 "opt_msgbuf.h"
+
+#include 
+__FBSDID("$FreeBSD$");
+
+#define	_ARM32_BUS_DMA_PRIVATE
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include "econa_reg.h"
+
+/* Page table for mapping proc0 zero page */
+#define	KERNEL_PT_SYS		0
+#define	KERNEL_PT_KERN		1
+#define	KERNEL_PT_KERN_NUM	22
+/* L2 table for mapping after kernel */
+#define	KERNEL_PT_AFKERNEL	KERNEL_PT_KERN + KERNEL_PT_KERN_NUM
+#define	KERNEL_PT_AFKERNEL_NUM	5
+
+/* this should be evenly divisable by PAGE_SIZE / L2_TABLE_SIZE_REAL (or 4) */
+#define	NUM_KERNEL_PTS	(KERNEL_PT_AFKERNEL + KERNEL_PT_AFKERNEL_NUM)
+
+/* Define various stack sizes in pages */
+#define	IRQ_STACK_SIZE	1
+#define	ABT_STACK_SIZE	1
+#define	UND_STACK_SIZE	1
+
+extern u_int data_abort_handler_address;
+extern u_int prefetch_abort_handler_address;
+extern u_int undefined_handler_address;
+
+struct pv_addr kernel_pt_table[NUM_KERNEL_PTS];
+
+extern void *_end;
+
+extern int *end;
+
+struct pcpu __pcpu;
+struct pcpu *pcpup = &__pcpu;
+
+/* Physical and virtual addresses for some global pages */
+
+vm_paddr_t phys_avail[10];
+vm_paddr_t dump_avail[4];
+vm_offset_t physical_pages;
+
+struct pv_addr systempage;
+struct pv_addr msgbufpv;
+struct pv_addr irqstack;
+struct pv_addr undstack;
+struct pv_addr abtstack;
+struct pv_addr kernelstack;
+
+static void *boot_arg1;
+static void *boot_arg2;
+
+static struct trapframe proc0_tf;
+
+/* Static device mappings. */
+static const struct pmap_devmap econa_devmap[] = {
+	{
+		/*
+		 * This maps DDR SDRAM
+		 */
+		ECONA_SDRAM_BASE, /*virtual*/
+		ECONA_SDRAM_BASE, /*physical*/
+		ECONA_SDRAM_SIZE, /*size*/
+		VM_PROT_READ|VM_PROT_WRITE,
+		PTE_NOCACHE,
+	},
+	/*
+	 * Map the on-board devices VA == PA so that we can access them
+	 * with the MMU on or off.
+	 */
+	{
+		/*
+		 * This maps the interrupt controller, the UART
+		 * and the timer.
+		 */
+		ECONA_IO_BASE, /*virtual*/
+		ECONA_IO_BASE, /*physical*/
+		ECONA_IO_SIZE, /*size*/
+		VM_PROT_READ|VM_PROT_WRITE,
+		PTE_NOCACHE,
+	},
+	{
+		/*
+		 * OHCI + EHCI
+		 */
+		ECONA_OHCI_VBASE, /*virtual*/
+		ECONA_OHCI_PBASE, /*physical*/
+		ECONA_USB_SIZE, /*size*/
+		VM_PROT_READ|VM_PROT_WRITE,
+		PTE_NOCACHE,
+	},
+	{
+		/*
+		 * CFI
+		 */
+		ECONA_CFI_VBASE, /*virtual*/
+		ECONA_CFI_PBASE, /*physical*/
+		ECONA_CFI_SIZE,
+		VM_PROT_READ|VM_PROT_WRITE,
+		PTE_NOCACHE,
+	},
+	{
+		0,
+		0,
+		0,
+		0,
+		0,
+	}
+};
+
+
+void *
+initarm(void *arg, void *arg2)
+{
+	struct pv_addr  kernel_l1pt;
+	volatile uint32_t * ddr = (uint32_t *)0x4000000C;
+	int loop, i;
+	u_int l1pagetable;
+	vm_offset_t afterkern;
+	vm_offset_t freemempos;
+	vm_offset_t lastaddr;
+	uint32_t memsize;
+	int mem_info;
+
+
+	boot_arg1 = arg;
+	boot_arg2 = arg2;
+	boothowto = RB_VERBOSE;
+
+	set_cpufuncs();
+	lastaddr = fake_preload_metadata();
+	pcpu_init(pcpup, 0, sizeof(struct pcpu));
+	PCPU_SET(curthread, &thread0);
+
+
+	freemempos = (lastaddr + PAGE_MASK) & ~PAGE_MASK;
+	/* Define a macro to simplify memory allocation */
+#define	valloc_pages(var, np)                   \
+	alloc_pages((var).pv_va, (np));         \
+	(var).pv_pa = (var).pv_va + (KERNPHYSADDR - KERNVIRTADDR);
+
+#define	alloc_pages(var, np)			\
+	(var) = freemempos;		\
+	freemempos += (np * PAGE_SIZE);		\
+	memset((char *)(var), 0, ((np) * PAGE_SIZE));
+
+	while (((freemempos - L1_TABLE_SIZE) & (L1_TABLE_SIZE - 1)) != 0)
+		freemempos += PAGE_SIZE;
+	valloc_pages(kernel_l1pt, L1_TABLE_SIZE / PAGE_SIZE);
+	for (loop = 0; loop < NUM_KERNEL_PTS; ++loop) {
+		if (!(loop % (PAGE_SIZE / L2_TABLE_SIZE_REAL))) {
+			valloc_pages(kernel_pt_table[loop],
+			    L2_TABLE_SIZE / PAGE_SIZE);
+		} else {
+			kernel_pt_table[loop].pv_va = freemempos -
+			    (loop % (PAGE_SIZE / L2_TABLE_SIZE_REAL)) *
+			    L2_TABLE_SIZE_REAL;
+			kernel_pt_table[loop].pv_pa =
+			    kernel_pt_table[loop].pv_va - KERNVIRTADDR +
+			    KERNPHYSADDR;
+		}
+		i++;
+	}
+	/*
+	 * Allocate a page for the system page mapped to V0x00000000
+	 * This page will just contain the system vectors and can be
+	 * shared by all processes.
+	 */
+	valloc_pages(systempage, 1);
+
+	/* Allocate stacks for all modes */
+	valloc_pages(irqstack, IRQ_STACK_SIZE);
+	valloc_pages(abtstack, ABT_STACK_SIZE);
+	valloc_pages(undstack, UND_STACK_SIZE);
+	valloc_pages(kernelstack, KSTACK_PAGES);
+	valloc_pages(msgbufpv, round_page(MSGBUF_SIZE) / PAGE_SIZE);
+
+	/*
+	 * Now we start construction of the L1 page table
+	 * We start by mapping the L2 page tables into the L1.
+	 * This means that we can replace L1 mappings later on if necessary
+	 */
+	l1pagetable = kernel_l1pt.pv_va;
+
+	/* Map the L2 pages tables in the L1 page table */
+	pmap_link_l2pt(l1pagetable, ARM_VECTORS_HIGH,
+	    &kernel_pt_table[KERNEL_PT_SYS]);
+	for (i = 0; i < KERNEL_PT_KERN_NUM; i++)
+		pmap_link_l2pt(l1pagetable, KERNBASE + i * L1_S_SIZE,
+		    &kernel_pt_table[KERNEL_PT_KERN + i]);
+	pmap_map_chunk(l1pagetable, KERNBASE, PHYSADDR,
+	   (((uint32_t)lastaddr - KERNBASE) + PAGE_SIZE) & ~(PAGE_SIZE - 1),
+	    VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+	afterkern = round_page((lastaddr + L1_S_SIZE) & ~(L1_S_SIZE - 1));
+	for (i = 0; i < KERNEL_PT_AFKERNEL_NUM; i++) {
+		pmap_link_l2pt(l1pagetable, afterkern + i * L1_S_SIZE,
+		    &kernel_pt_table[KERNEL_PT_AFKERNEL + i]);
+	}
+
+	/* Map the vector page. */
+	pmap_map_entry(l1pagetable, ARM_VECTORS_HIGH, systempage.pv_pa,
+	    VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+
+
+	/* Map the stack pages */
+	pmap_map_chunk(l1pagetable, irqstack.pv_va, irqstack.pv_pa,
+	    IRQ_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+	pmap_map_chunk(l1pagetable, abtstack.pv_va, abtstack.pv_pa,
+	    ABT_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+	pmap_map_chunk(l1pagetable, undstack.pv_va, undstack.pv_pa,
+	    UND_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+	pmap_map_chunk(l1pagetable, kernelstack.pv_va, kernelstack.pv_pa,
+	    KSTACK_PAGES * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+
+	pmap_map_chunk(l1pagetable, kernel_l1pt.pv_va, kernel_l1pt.pv_pa,
+	    L1_TABLE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE);
+	pmap_map_chunk(l1pagetable, msgbufpv.pv_va, msgbufpv.pv_pa,
+	    MSGBUF_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
+
+	for (loop = 0; loop < NUM_KERNEL_PTS; ++loop) {
+		pmap_map_chunk(l1pagetable, kernel_pt_table[loop].pv_va,
+		    kernel_pt_table[loop].pv_pa, L2_TABLE_SIZE,
+		    VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE);
+	}
+
+	pmap_devmap_bootstrap(l1pagetable, econa_devmap);
+	cpu_domains((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)) | DOMAIN_CLIENT);
+	setttb(kernel_l1pt.pv_pa);
+	cpu_tlb_flushID();
+	cpu_domains(DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2));
+	cninit();
+	mem_info = ((*ddr) >> 4) & 0x3;
+	memsize = (8<pcb_flags = 0;
+	thread0.td_frame = &proc0_tf;
+	pcpup->pc_curpcb = thread0.td_pcb;
+
+	arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
+
+	pmap_curmaxkvaddr = afterkern + L1_S_SIZE * (KERNEL_PT_KERN_NUM - 1);
+
+	/*
+	 * ARM_USE_SMALL_ALLOC uses dump_avail, so it must be filled before
+	 * calling pmap_bootstrap.
+	 */
+	dump_avail[0] = PHYSADDR;
+	dump_avail[1] = PHYSADDR + memsize;
+	dump_avail[2] = 0;
+	dump_avail[3] = 0;
+
+	pmap_bootstrap(freemempos,
+	    KERNVIRTADDR + 3 * memsize,
+	    &kernel_l1pt);
+
+	msgbufp = (void*)msgbufpv.pv_va;
+	msgbufinit(msgbufp, MSGBUF_SIZE);
+
+	mutex_init();
+
+	i = 0;
+#if PHYSADDR != KERNPHYSADDR
+	phys_avail[i++] = PHYSADDR;
+	phys_avail[i++] = KERNPHYSADDR;
+#endif
+	phys_avail[i++] = virtual_avail - KERNVIRTADDR + KERNPHYSADDR;
+
+	phys_avail[i++] = PHYSADDR + memsize;
+	phys_avail[i++] = 0;
+	phys_avail[i++] = 0;
+	/* Do basic tuning, hz etc */
+	init_param1();
+	init_param2(physmem);
+	kdb_init();
+
+	return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP -
+	    sizeof(struct pcb)));
+}
diff --git a/sys/arm/econa/econa_reg.h b/sys/arm/econa/econa_reg.h
new file mode 100644
index 00000000000..06501943bef
--- /dev/null
+++ b/sys/arm/econa/econa_reg.h
@@ -0,0 +1,180 @@
+/*-
+ * Copyright (c) 2009 Yohanes Nugroho 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+#ifndef	_ARM_ECONA_REG_H
+#define	_ARM_ECONA_REG_H
+
+#define	ECONA_SRAM_SIZE	0x10000000
+#define	ECONA_DRAM_BASE	0x00000000 /* DRAM (via DDR Control Module) */
+
+#define	ECONA_SDRAM_BASE	0x40000000
+#define	ECONA_SDRAM_SIZE	0x1000000
+
+
+#define	ECONA_IO_BASE		0x70000000
+#define	ECONA_IO_SIZE		0x0E000000
+#define	ECONA_PIC_BASE		0x0D000000
+#define	ECONA_PIC_SIZE		0x01000000
+
+#define	ECONA_UART_BASE	0x08000000
+#define	ECONA_UART_SIZE	0x01000000
+#define	ECONA_IRQ_UART		0xA
+
+#define	ECONA_TIMER_BASE	0x09000000
+#define	ECONA_TIMER_SIZE	0x01000000
+#define	ECONA_IRQ_TIMER_1	0
+#define	ECONA_IRQ_TIMER_2	1
+#define	ECONA_IRQ_OHCI		23
+#define	ECONA_IRQ_EHCI		24
+
+#define	ECONA_NET_BASE		0x00000000
+
+#define	ECONA_SYSTEM_BASE	0x07000000
+#define	ECONA_SYSTEM_SIZE	0x01000000
+
+#define	ECONA_NET_SIZE		0x01000000
+
+#define	ECONA_CFI_PBASE	0x10000000
+#define	ECONA_CFI_VBASE	0xD0000000
+#define	ECONA_CFI_SIZE		0x10000000
+
+#define	ECONA_IRQ_STATUS	18
+#define	ECONA_IRQ_TSTC		19
+#define	ECONA_IRQ_FSRC		20
+#define	ECONA_IRQ_TSQE		21
+#define	ECONA_IRQ_FSQF		22
+
+#define	ECONA_IRQ_SYSTEM	0
+
+#define	ECONA_EHCI_PBASE	0xC8000000
+#define	ECONA_EHCI_VBASE	0xF8000000
+#define	ECONA_EHCI_SIZE	0x8000000
+
+#define	ECONA_OHCI_PBASE	0xC0000000
+#define	ECONA_OHCI_VBASE	0xF0000000
+#define	ECONA_OHCI_SIZE	0x8000000
+
+#define	ECONA_USB_SIZE		0xf000000
+
+/*Interrupt controller*/
+#define	INTC_LEVEL_TRIGGER	0
+#define	INTC_EDGE_TRIGGER	1
+#define	INTC_ACTIVE_HIGH	0
+#define	INTC_ACTIVE_LOW	1
+/*
+ * define rising/falling edge for edge trigger mode
+ */
+#define	INTC_RISING_EDGE	0
+#define	INTC_FALLING_EDGE	1
+
+#define	INTC_INTERRUPT_SOURCE_REG_OFFSET		0x00
+#define	INTC_INTERRUPT_MASK_REG_OFFSET			0x04
+#define	INTC_INTERRUPT_CLEAR_EDGE_TRIGGER_REG_OFFSET	0x08
+#define	INTC_INTERRUPT_TRIGGER_MODE_REG_OFFSET		0x0C
+#define	INTC_INTERRUPT_TRIGGER_LEVEL_REG_OFFSET	0x10
+#define	INTC_INTERRUPT_STATUS_REG_OFFSET		0x14
+#define	INTC_FIQ_MODE_SELECT_REG_OFFSET		0x18
+#define	INTC_SOFTWARE_INTERRUPT_REG_OFFSET		0x1C
+
+
+/*
+ * define rising/falling edge for edge trigger mode
+ */
+#define	INTC_RISING_EDGE	0
+#define	INTC_FALLING_EDGE	1
+
+
+#define	TIMER_TM1_COUNTER_REG		0x00
+#define	TIMER_TM1_LOAD_REG		0x04
+#define	TIMER_TM1_MATCH1_REG		0x08
+#define	TIMER_TM1_MATCH2_REG		0x0C
+
+#define	TIMER_TM2_COUNTER_REG		0x10
+#define	TIMER_TM2_LOAD_REG		0x14
+#define	TIMER_TM2_MATCH1_REG		0x18
+#define	TIMER_TM2_MATCH2_REG		0x1C
+
+#define	TIMER_TM_CR_REG		0x30
+#define	TIMER_TM_INTR_STATUS_REG	0x34
+#define	TIMER_TM_INTR_MASK_REG		0x38
+
+#define	TIMER_TM_REVISION_REG		0x3C
+
+
+#define	INTC_TIMER1_BIT_INDEX		0
+
+#define	TIMER1_UP_DOWN_COUNT		(1<<9)
+#define	TIMER2_UP_DOWN_COUNT		(1<<10)
+
+#define	TIMER1_MATCH1_INTR		(1<<0)
+#define	TIMER1_MATCH2_INTR		(1<<1)
+#define	TIMER1_OVERFLOW_INTR		(1<<2)
+
+
+#define	TIMER2_MATCH1_INTR		(1<<3)
+#define	TIMER2_MATCH2_INTR		(1<<4)
+#define	TIMER2_OVERFLOW_INTR		(1<<5)
+
+
+#define	TIMER_CLOCK_SOURCE_PCLK	0
+#define	TIMER_CLOCK_SOURCE_EXT_CLK	1
+
+/*
+ * define interrupt trigger mode
+ */
+#define	INTC_LEVEL_TRIGGER		0
+#define	INTC_EDGE_TRIGGER		1
+
+
+#define	INTC_TRIGGER_UNKNOWN -1
+
+#define	TIMER1_OVERFLOW_INTERRUPT	(1<<2)
+#define	TIMER2_OVERFLOW_INTERRUPT	(1<<5)
+#define	TIMER_INTERRUPT_STATUS_REG	0x34
+
+
+#define	TIMER1_ENABLE			(1<<0)
+#define	TIMER1_CLOCK_SOURCE		(1<<1)
+#define	TIMER1_OVERFLOW_ENABLE		(1<<2)
+
+
+#define	TIMER2_ENABLE			(1<<3)
+#define	TIMER2_CLOCK_SOURCE		(1<<4)
+#define	TIMER2_OVERFLOW_ENABLE		(1<<5)
+
+
+#define	TIMER_1			1
+
+#define	EC_UART_CLOCK			14769200
+#define	EC_UART_REGSHIFT		2
+
+#define	SYSTEM_CLOCK			0x14
+#define	RESET_CONTROL			0x4
+#define	GLOBAL_RESET			0x1
+#define	NET_INTERFACE_RESET		(0x1 << 4)
+
+#endif
diff --git a/sys/arm/econa/econa_var.h b/sys/arm/econa/econa_var.h
new file mode 100644
index 00000000000..044dcb7fbe0
--- /dev/null
+++ b/sys/arm/econa/econa_var.h
@@ -0,0 +1,52 @@
+/*-
+ * Copyright (c) 2009 Yohanes Nugroho .
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef	_ARM_ECONA_VAR_H
+#define	_ARM_ECONA_VAR_H
+
+extern bus_space_tag_t obio_tag;
+
+struct econa_softc {
+	device_t dev;
+	bus_space_tag_t ec_st;
+	bus_space_handle_t ec_sh;
+	bus_space_handle_t ec_sys_sh;
+	bus_space_handle_t ec_system_sh;
+	struct rman ec_irq_rman;
+	struct rman ec_mem_rman;
+};
+
+struct econa_ivar {
+	struct resource_list resources;
+};
+
+void	power_on_network_interface	(void);
+unsigned int	get_tclk	(void);
+
+
+#endif
diff --git a/sys/arm/econa/ehci_ebus.c b/sys/arm/econa/ehci_ebus.c
new file mode 100644
index 00000000000..7b492258200
--- /dev/null
+++ b/sys/arm/econa/ehci_ebus.c
@@ -0,0 +1,300 @@
+/*-
+ * Copyright (C) 2009 Yohanes Nugroho 
+ * based on ehci_mbus.c
+ * Copyright (C) 2008 MARVELL INTERNATIONAL LTD.
+ * 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.
+ * 3. Neither the name of MARVELL nor the names of contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+#include "opt_bus.h"
+
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+
+
+static device_attach_t ehci_ebus_attach;
+static device_detach_t ehci_ebus_detach;
+static device_shutdown_t ehci_ebus_shutdown;
+static device_suspend_t ehci_ebus_suspend;
+static device_resume_t ehci_ebus_resume;
+
+
+static void *ih_err;
+
+#define	EHCI_HC_DEVSTR "CNS11XX USB EHCI"
+#define	USB_BRIDGE_INTR_MASK   0x214
+
+static int
+ehci_ebus_suspend(device_t self)
+{
+	ehci_softc_t *sc = device_get_softc(self);
+	int err;
+
+	err = bus_generic_suspend(self);
+	if (err)
+		return (err);
+	ehci_suspend(sc);
+	return (0);
+}
+
+static int
+ehci_ebus_resume(device_t self)
+{
+	ehci_softc_t *sc = device_get_softc(self);
+
+	ehci_resume(sc);
+
+	bus_generic_resume(self);
+
+	return (0);
+}
+
+static int
+ehci_ebus_shutdown(device_t self)
+{
+	ehci_softc_t *sc = device_get_softc(self);
+	int err;
+
+	err = bus_generic_shutdown(self);
+	if (err)
+		return (err);
+	ehci_shutdown(sc);
+
+	return (0);
+}
+
+static int
+ehci_ebus_probe(device_t self)
+{
+
+	device_set_desc(self, EHCI_HC_DEVSTR);
+
+	return (BUS_PROBE_DEFAULT);
+}
+
+static int
+ehci_ebus_attach(device_t self)
+{
+	ehci_softc_t *sc = device_get_softc(self);
+	bus_space_handle_t bsh;
+	int err;
+	int rid;
+
+	/* initialise some bus fields */
+	sc->sc_bus.parent = self;
+	sc->sc_bus.devices = sc->sc_devices;
+	sc->sc_bus.devices_max = EHCI_MAX_DEVICES;
+
+	/* get all DMA memory */
+	if (usb_bus_mem_alloc_all(&sc->sc_bus,
+	    USB_GET_DMA_TAG(self), &ehci_iterate_hw_softc)) {
+		return (ENOMEM);
+	}
+
+	sc->sc_bus.usbrev = USB_REV_2_0;
+
+	rid = 0;
+	sc->sc_io_res = bus_alloc_resource_any(self, SYS_RES_MEMORY,
+	    &rid, RF_ACTIVE);
+	if (!sc->sc_io_res) {
+		device_printf(self, "Could not map memory\n");
+		goto error;
+	}
+	sc->sc_io_tag = rman_get_bustag(sc->sc_io_res);
+	bsh = rman_get_bushandle(sc->sc_io_res);
+
+	/*magic, undocumented initialization*/
+	bus_space_write_4((sc)->sc_io_tag, bsh, 0x04, 0x106);
+
+	bus_space_write_4((sc)->sc_io_tag, bsh, 0x40, (3 << 5)|0x2000);
+
+	DELAY(1000);
+
+	sc->sc_io_size =  4096;
+
+	if (bus_space_subregion(sc->sc_io_tag, bsh, 0x4000000,
+	    sc->sc_io_size, &sc->sc_io_hdl) != 0)
+		panic("%s: unable to subregion USB host registers",
+		    device_get_name(self));
+
+	rid = 0;
+	sc->sc_irq_res = bus_alloc_resource_any(self, SYS_RES_IRQ, &rid,
+	    RF_SHAREABLE | RF_ACTIVE);
+	if (sc->sc_irq_res == NULL) {
+		device_printf(self, "Could not allocate irq\n");
+		ehci_ebus_detach(self);
+		return (ENXIO);
+	}
+
+	sc->sc_bus.bdev = device_add_child(self, "usbus", -1);
+	if (!sc->sc_bus.bdev) {
+		device_printf(self, "Could not add USB device\n");
+		goto error;
+	}
+	device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);
+	device_set_desc(sc->sc_bus.bdev, EHCI_HC_DEVSTR);
+
+	sprintf(sc->sc_vendor, "Cavium");
+
+	err = bus_setup_intr(self,sc->sc_irq_res,
+	    INTR_TYPE_BIO | INTR_MPSAFE, NULL,
+	    (driver_intr_t *)ehci_interrupt, sc,
+	    &sc->sc_intr_hdl);
+	if (err) {
+		device_printf(self, "Could not setup error irq, %d\n", err);
+		ih_err = NULL;
+		goto error;
+	}
+
+	err = ehci_init(sc);
+	if (!err) {
+		err = device_probe_and_attach(sc->sc_bus.bdev);
+	}
+	if (err) {
+		device_printf(self, "USB init failed err=%d\n", err);
+		goto error;
+	}
+	return (0);
+
+error:
+	ehci_ebus_detach(self);
+	return (ENXIO);
+}
+
+static int
+ehci_ebus_detach(device_t self)
+{
+	ehci_softc_t *sc = device_get_softc(self);
+	device_t bdev;
+	int err;
+
+	if (sc->sc_bus.bdev) {
+		bdev = sc->sc_bus.bdev;
+		device_detach(bdev);
+		device_delete_child(self, bdev);
+	}
+	/* during module unload there are lots of children leftover */
+	device_delete_all_children(self);
+
+	/*
+	 * disable interrupts that might have been switched on in ehci_init
+	 */
+	if (sc->sc_io_res) {
+		EWRITE4(sc, EHCI_USBINTR, 0);
+		EWRITE4(sc, USB_BRIDGE_INTR_MASK, 0);
+	}
+	if (sc->sc_irq_res && sc->sc_intr_hdl) {
+		/*
+		 * only call ehci_detach() after ehci_init()
+		 */
+		ehci_detach(sc);
+
+		err = bus_teardown_intr(self, sc->sc_irq_res, sc->sc_intr_hdl);
+
+		if (err)
+			/* XXX or should we panic? */
+			device_printf(self, "Could not tear down irq, %d\n",
+			    err);
+		sc->sc_intr_hdl = NULL;
+	}
+	if (sc->sc_irq_res) {
+		bus_release_resource(self, SYS_RES_IRQ, 1, sc->sc_irq_res);
+		sc->sc_irq_res = NULL;
+	}
+	if (sc->sc_io_res) {
+		bus_release_resource(self, SYS_RES_MEMORY, 0,
+		    sc->sc_io_res);
+		sc->sc_io_res = NULL;
+	}
+	usb_bus_mem_free_all(&sc->sc_bus, &ehci_iterate_hw_softc);
+
+	return (0);
+}
+
+static device_method_t ehci_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_probe, ehci_ebus_probe),
+	DEVMETHOD(device_attach, ehci_ebus_attach),
+	DEVMETHOD(device_detach, ehci_ebus_detach),
+	DEVMETHOD(device_suspend, ehci_ebus_suspend),
+	DEVMETHOD(device_resume, ehci_ebus_resume),
+	DEVMETHOD(device_shutdown, ehci_ebus_shutdown),
+
+	/* Bus interface */
+	DEVMETHOD(bus_print_child, bus_generic_print_child),
+
+	{0, 0}
+};
+
+static driver_t ehci_driver = {
+	"ehci",
+	ehci_methods,
+	sizeof(ehci_softc_t),
+};
+
+static devclass_t ehci_devclass;
+
+DRIVER_MODULE(ehci, econaarm, ehci_driver, ehci_devclass, 0, 0);
+MODULE_DEPEND(ehci, usb, 1, 1, 1);
diff --git a/sys/arm/econa/files.econa b/sys/arm/econa/files.econa
new file mode 100644
index 00000000000..1adb9c1ca81
--- /dev/null
+++ b/sys/arm/econa/files.econa
@@ -0,0 +1,14 @@
+# $FreeBSD$
+arm/arm/cpufunc_asm_fa526.S	standard
+arm/econa/econa_machdep.c		standard
+arm/econa/econa.c			standard
+arm/econa/timer.c			standard
+arm/econa/uart_bus_ec.c		optional	uart
+arm/econa/uart_cpu_ec.c		optional	uart
+dev/uart/uart_dev_ns8250.c	optional	uart
+arm/arm/irq_dispatch.S		standard
+arm/arm/bus_space_generic.c		standard
+arm/econa/ehci_ebus.c	standard	ehci
+arm/econa/ohci_ec.c	standard	ohci
+arm/econa/if_ece.c		standard
+arm/econa/cfi_bus_econa.c		optional	cfi
diff --git a/sys/arm/econa/if_ece.c b/sys/arm/econa/if_ece.c
new file mode 100644
index 00000000000..136860c4aa0
--- /dev/null
+++ b/sys/arm/econa/if_ece.c
@@ -0,0 +1,1948 @@
+/*-
+ * Copyright (c) 2009 Yohanes Nugroho 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#ifdef INET
+#include 
+#include 
+#include 
+#include 
+#endif
+
+#include 
+#include 
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+/* "device miibus" required.  See GENERIC if you get errors here. */
+#include "miibus_if.h"
+
+static uint8_t
+vlan0_mac[ETHER_ADDR_LEN] = {0x00, 0xaa, 0xbb, 0xcc, 0xdd, 0x19};
+
+/*
+ * Boot loader expects the hardware state to be the same when we
+ * restart the device (warm boot), so we need to save the initial
+ * config values.
+ */
+int initial_switch_config;
+int initial_cpu_config;
+int initial_port0_config;
+int initial_port1_config;
+
+static inline uint32_t
+read_4(struct ece_softc *sc, bus_size_t off)
+{
+
+	return (bus_read_4(sc->mem_res, off));
+}
+
+static inline void
+write_4(struct ece_softc *sc, bus_size_t off, uint32_t val)
+{
+
+	bus_write_4(sc->mem_res, off, val);
+}
+
+#define	ECE_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
+#define	ECE_UNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx)
+#define	ECE_LOCK_INIT(_sc) \
+	mtx_init(&_sc->sc_mtx, device_get_nameunit(_sc->dev),	\
+		 MTX_NETWORK_LOCK, MTX_DEF)
+
+#define	ECE_TXLOCK(_sc)		mtx_lock(&(_sc)->sc_mtx_tx)
+#define	ECE_TXUNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx_tx)
+#define	ECE_TXLOCK_INIT(_sc) \
+	mtx_init(&_sc->sc_mtx_tx, device_get_nameunit(_sc->dev),	\
+		 "ECE TX Lock", MTX_DEF)
+
+#define	ECE_CLEANUPLOCK(_sc)	mtx_lock(&(_sc)->sc_mtx_cleanup)
+#define	ECE_CLEANUPUNLOCK(_sc)	mtx_unlock(&(_sc)->sc_mtx_cleanup)
+#define	ECE_CLEANUPLOCK_INIT(_sc) \
+	mtx_init(&_sc->sc_mtx_cleanup, device_get_nameunit(_sc->dev),	\
+		 "ECE cleanup Lock", MTX_DEF)
+
+#define	ECE_RXLOCK(_sc)		mtx_lock(&(_sc)->sc_mtx_rx)
+#define	ECE_RXUNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx_rx)
+#define	ECE_RXLOCK_INIT(_sc) \
+	mtx_init(&_sc->sc_mtx_rx, device_get_nameunit(_sc->dev),	\
+		 "ECE RX Lock", MTX_DEF)
+
+#define	ECE_LOCK_DESTROY(_sc)	mtx_destroy(&_sc->sc_mtx);
+#define	ECE_TXLOCK_DESTROY(_sc)	mtx_destroy(&_sc->sc_mtx_tx);
+#define	ECE_RXLOCK_DESTROY(_sc)	mtx_destroy(&_sc->sc_mtx_rx);
+#define	ECE_CLEANUPLOCK_DESTROY(_sc)	\
+	mtx_destroy(&_sc->sc_mtx_cleanup);
+
+#define	ECE_ASSERT_LOCKED(_sc)	mtx_assert(&_sc->sc_mtx, MA_OWNED);
+#define	ECE_ASSERT_UNLOCKED(_sc) mtx_assert(&_sc->sc_mtx, MA_NOTOWNED);
+
+static devclass_t ece_devclass;
+
+/* ifnet entry points */
+
+static void	eceinit_locked(void *);
+static void	ecestart_locked(struct ifnet *);
+
+static void	eceinit(void *);
+static void	ecestart(struct ifnet *);
+static void	ecestop(struct ece_softc *);
+static int	eceioctl(struct ifnet * ifp, u_long, caddr_t);
+
+/* bus entry points */
+
+static int	ece_probe(device_t dev);
+static int	ece_attach(device_t dev);
+static int	ece_detach(device_t dev);
+static void	ece_intr(void *);
+static void	ece_intr_qf(void *);
+static void	ece_intr_status(void *xsc);
+
+/* helper routines */
+static int	ece_activate(device_t dev);
+static void	ece_deactivate(device_t dev);
+static int	ece_ifmedia_upd(struct ifnet *ifp);
+static void	ece_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr);
+static int	ece_get_mac(struct ece_softc *sc, u_char *eaddr);
+static void	ece_set_mac(struct ece_softc *sc, u_char *eaddr);
+static int	configure_cpu_port(struct ece_softc *sc);
+static int	configure_lan_port(struct ece_softc *sc, int phy_type);
+static void	set_pvid(struct ece_softc *sc, int port0, int port1, int cpu);
+static void	set_vlan_vid(struct ece_softc *sc, int vlan);
+static void	set_vlan_member(struct ece_softc *sc, int vlan);
+static void	set_vlan_tag(struct ece_softc *sc, int vlan);
+static int	hardware_init(struct ece_softc *sc);
+static void	ece_intr_rx_locked(struct ece_softc *sc, int count);
+
+static void	ece_free_desc_dma_tx(struct ece_softc *sc);
+static void	ece_free_desc_dma_rx(struct ece_softc *sc);
+
+static void	ece_intr_task(void *arg, int pending __unused);
+static void	ece_tx_task(void *arg, int pending __unused);
+static void	ece_cleanup_task(void *arg, int pending __unused);
+
+static int	ece_allocate_dma(struct ece_softc *sc);
+
+static void	ece_intr_tx(void *xsc);
+
+static void	clear_mac_entries(struct ece_softc *ec, int include_this_mac);
+
+static uint32_t read_mac_entry(struct ece_softc *ec,
+	    uint8_t *mac_result,
+	    int first);
+
+/*PHY related functions*/
+static inline int
+phy_read(struct ece_softc *sc, int phy, int reg)
+{
+	int val;
+	int ii;
+	int status;
+
+	write_4(sc, PHY_CONTROL, PHY_RW_OK);
+	write_4(sc, PHY_CONTROL,
+	    (PHY_ADDRESS(phy)|PHY_READ_COMMAND |
+	    PHY_REGISTER(reg)));
+
+	for (ii = 0; ii < 0x1000; ii++) {
+		status = read_4(sc, PHY_CONTROL);
+		if (status & PHY_RW_OK) {
+			/* Clear the rw_ok status, and clear other
+			 * bits value. */
+			write_4(sc, PHY_CONTROL, PHY_RW_OK);
+			val = PHY_GET_DATA(status);
+			return (val);
+		}
+	}
+	return (0);
+}
+
+static inline void
+phy_write(struct ece_softc *sc, int phy, int reg, int data)
+{
+	int ii;
+
+	write_4(sc, PHY_CONTROL, PHY_RW_OK);
+	write_4(sc, PHY_CONTROL,
+	    PHY_ADDRESS(phy) | PHY_REGISTER(reg) |
+	    PHY_WRITE_COMMAND | PHY_DATA(data));
+	for (ii = 0; ii < 0x1000; ii++) {
+		if (read_4(sc, PHY_CONTROL) & PHY_RW_OK) {
+			/* Clear the rw_ok status, and clear other
+			 * bits value.
+			 */
+			write_4(sc, PHY_CONTROL, PHY_RW_OK);
+			return;
+		}
+	}
+}
+
+static int get_phy_type(struct ece_softc *sc)
+{
+	uint16_t phy0_id = 0, phy1_id = 0;
+
+	/*
+	 * Use SMI (MDC/MDIO) to read Link Partner's PHY Identifier
+	 * Register 1.
+	 */
+	phy0_id = phy_read(sc, 0, 0x2);
+	phy1_id = phy_read(sc, 1, 0x2);
+
+	if ((phy0_id == 0xFFFF) && (phy1_id == 0x000F))
+		return (ASIX_GIGA_PHY);
+	else if ((phy0_id == 0x0243) && (phy1_id == 0x0243))
+		return (TWO_SINGLE_PHY);
+	else if ((phy0_id == 0xFFFF) && (phy1_id == 0x0007))
+		return (VSC8601_GIGA_PHY);
+	else if ((phy0_id == 0x0243) && (phy1_id == 0xFFFF))
+		return (IC_PLUS_PHY);
+
+	return (NOT_FOUND_PHY);
+}
+
+static int
+ece_probe(device_t dev)
+{
+
+	device_set_desc(dev, "Econa Ethernet Controller");
+	return (0);
+}
+
+
+static int
+ece_attach(device_t dev)
+{
+	struct ece_softc *sc;
+	struct ifnet *ifp = NULL;
+	struct sysctl_ctx_list *sctx;
+	struct sysctl_oid *soid;
+	u_char eaddr[ETHER_ADDR_LEN];
+	int err;
+	int i, rid;
+	uint32_t rnd;
+
+	err = 0;
+
+	sc = device_get_softc(dev);
+
+	sc->dev = dev;
+
+	rid = 0;
+	sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
+		    RF_ACTIVE);
+	if (sc->mem_res == NULL)
+		goto out;
+
+	power_on_network_interface();
+
+	rid = 0;
+	sc->irq_res_status = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
+	    RF_ACTIVE);
+	if (sc->irq_res_status == NULL)
+		goto out;
+
+	rid = 1;
+	/*TSTC: Fm-Switch-Tx-Complete*/
+	sc->irq_res_tx = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
+	    RF_ACTIVE);
+	if (sc->irq_res_tx == NULL)
+		goto out;
+
+	rid = 2;
+	/*FSRC: Fm-Switch-Rx-Complete*/
+	sc->irq_res_rec = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
+	    RF_ACTIVE);
+	if (sc->irq_res_rec == NULL)
+		goto out;
+
+	rid = 4;
+	/*FSQF: Fm-Switch-Queue-Full*/
+	sc->irq_res_qf = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
+	    RF_ACTIVE);
+	if (sc->irq_res_qf == NULL)
+		goto out;
+
+	err = ece_activate(dev);
+	if (err)
+		goto out;
+
+	/* Sysctls */
+	sctx = device_get_sysctl_ctx(dev);
+	soid = device_get_sysctl_tree(dev);
+
+	ECE_LOCK_INIT(sc);
+
+	callout_init_mtx(&sc->tick_ch, &sc->sc_mtx, 0);
+
+	if ((err = ece_get_mac(sc, eaddr)) != 0) {
+		/* No MAC address configured. Generate the random one. */
+		if (bootverbose)
+			device_printf(dev,
+			    "Generating random ethernet address.\n");
+		rnd = arc4random();
+
+		/*from if_ae.c/if_ate.c*/
+		/*
+		 * Set OUI to convenient locally assigned address. 'b'
+		 * is 0x62, which has the locally assigned bit set, and
+		 * the broadcast/multicast bit clear.
+		 */
+		eaddr[0] = 'b';
+		eaddr[1] = 's';
+		eaddr[2] = 'd';
+		eaddr[3] = (rnd >> 16) & 0xff;
+		eaddr[4] = (rnd >> 8) & 0xff;
+		eaddr[5] = rnd & 0xff;
+
+		for (i = 0; i < ETHER_ADDR_LEN; i++)
+			eaddr[i] = vlan0_mac[i];
+	}
+	ece_set_mac(sc, eaddr);
+	sc->ifp = ifp = if_alloc(IFT_ETHER);
+	if (mii_phy_probe(dev, &sc->miibus, ece_ifmedia_upd,
+		    ece_ifmedia_sts)) {
+		device_printf(dev, "Cannot find my PHY.\n");
+		err = ENXIO;
+		goto out;
+	}
+	ifp->if_softc = sc;
+	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
+	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
+
+	ifp->if_capabilities = IFCAP_HWCSUM;
+
+	ifp->if_hwassist = (CSUM_IP | CSUM_TCP | CSUM_UDP);
+	ifp->if_capenable = ifp->if_capabilities;
+	ifp->if_start = ecestart;
+	ifp->if_ioctl = eceioctl;
+	ifp->if_init = eceinit;
+	ifp->if_snd.ifq_drv_maxlen = ECE_MAX_TX_BUFFERS - 1;
+	IFQ_SET_MAXLEN(&ifp->if_snd, ECE_MAX_TX_BUFFERS - 1);
+	IFQ_SET_READY(&ifp->if_snd);
+
+	/* Create local taskq. */
+
+	TASK_INIT(&sc->sc_intr_task, 0, ece_intr_task, sc);
+	TASK_INIT(&sc->sc_tx_task, 1, ece_tx_task, ifp);
+	TASK_INIT(&sc->sc_cleanup_task, 2, ece_cleanup_task, sc);
+	sc->sc_tq = taskqueue_create_fast("ece_taskq", M_WAITOK,
+	    taskqueue_thread_enqueue,
+	    &sc->sc_tq);
+	if (sc->sc_tq == NULL) {
+		device_printf(sc->dev, "could not create taskqueue\n");
+		goto out;
+	}
+
+	ether_ifattach(ifp, eaddr);
+
+	/*
+	 * Activate interrupts
+	 */
+	err = bus_setup_intr(dev, sc->irq_res_rec, INTR_TYPE_NET | INTR_MPSAFE,
+	    NULL, ece_intr, sc, &sc->intrhand);
+	if (err) {
+		ether_ifdetach(ifp);
+		ECE_LOCK_DESTROY(sc);
+		goto out;
+	}
+
+	err = bus_setup_intr(dev, sc->irq_res_status,
+	    INTR_TYPE_NET | INTR_MPSAFE,
+	    NULL, ece_intr_status, sc, &sc->intrhand_status);
+	if (err) {
+		ether_ifdetach(ifp);
+		ECE_LOCK_DESTROY(sc);
+		goto out;
+	}
+
+	err = bus_setup_intr(dev, sc->irq_res_qf, INTR_TYPE_NET | INTR_MPSAFE,
+	    NULL,ece_intr_qf, sc, &sc->intrhand_qf);
+
+	if (err) {
+		ether_ifdetach(ifp);
+		ECE_LOCK_DESTROY(sc);
+		goto out;
+	}
+
+	err = bus_setup_intr(dev, sc->irq_res_tx, INTR_TYPE_NET | INTR_MPSAFE,
+	    NULL, ece_intr_tx, sc, &sc->intrhand_tx);
+
+	if (err) {
+		ether_ifdetach(ifp);
+		ECE_LOCK_DESTROY(sc);
+		goto out;
+	}
+
+	ECE_TXLOCK_INIT(sc);
+	ECE_RXLOCK_INIT(sc);
+	ECE_CLEANUPLOCK_INIT(sc);
+
+	/* Enable all interrupt sources. */
+	write_4(sc, INTERRUPT_MASK, 0x00000000);
+
+	/* Enable port 0. */
+	write_4(sc, PORT_0_CONFIG, read_4(sc, PORT_0_CONFIG) & ~(PORT_DISABLE));
+
+	taskqueue_start_threads(&sc->sc_tq, 1, PI_NET, "%s taskq",
+	    device_get_nameunit(sc->dev));
+
+out:;
+	if (err)
+		ece_deactivate(dev);
+	if (err && ifp)
+		if_free(ifp);
+	return (err);
+}
+
+static int
+ece_detach(device_t dev)
+{
+	struct ece_softc *sc = device_get_softc(dev);
+	struct ifnet *ifp = sc->ifp;
+
+	ecestop(sc);
+	if (ifp != NULL) {
+		ether_ifdetach(ifp);
+		if_free(ifp);
+	}
+	ece_deactivate(dev);
+	return (0);
+}
+
+static void
+ece_getaddr(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
+{
+	u_int32_t *paddr;
+	KASSERT(nsegs == 1, ("wrong number of segments, should be 1"));
+	paddr = arg;
+	*paddr = segs->ds_addr;
+}
+
+static int
+ece_alloc_desc_dma_tx(struct ece_softc *sc)
+{
+	int i;
+	int error;
+
+	/* Allocate a busdma tag and DMA safe memory for TX/RX descriptors. */
+	error = bus_dma_tag_create(sc->sc_parent_tag,	/* parent */
+	    16, 0, /* alignment, boundary */
+	    BUS_SPACE_MAXADDR_32BIT,	/* lowaddr */
+	    BUS_SPACE_MAXADDR,	/* highaddr */
+	    NULL, NULL,	/* filtfunc, filtfuncarg */
+	    sizeof(eth_tx_desc_t)*ECE_MAX_TX_BUFFERS, /* max size */
+	    1, /*nsegments */
+	    sizeof(eth_tx_desc_t)*ECE_MAX_TX_BUFFERS,
+	    0, /* flags */
+	    NULL, NULL,	/* lockfunc, lockfuncarg */
+	    &sc->dmatag_data_tx); /* dmat */
+
+	/* Allocate memory for TX ring. */
+	error = bus_dmamem_alloc(sc->dmatag_data_tx,
+	    (void**)&(sc->desc_tx),
+	    BUS_DMA_NOWAIT | BUS_DMA_ZERO |
+	    BUS_DMA_COHERENT,
+	    &(sc->dmamap_ring_tx));
+
+	if (error) {
+		if_printf(sc->ifp, "failed to allocate DMA memory\n");
+		bus_dma_tag_destroy(sc->dmatag_data_tx);
+		sc->dmatag_data_tx = 0;
+		return (ENXIO);
+	}
+
+	/* Load Ring DMA. */
+	error = bus_dmamap_load(sc->dmatag_data_tx, sc->dmamap_ring_tx,
+	    sc->desc_tx,
+	    sizeof(eth_tx_desc_t)*ECE_MAX_TX_BUFFERS,
+	    ece_getaddr,
+	    &(sc->ring_paddr_tx), BUS_DMA_NOWAIT);
+
+	if (error) {
+		if_printf(sc->ifp, "can't load descriptor\n");
+		bus_dmamem_free(sc->dmatag_data_tx, sc->desc_tx,
+		    sc->dmamap_ring_tx);
+		sc->desc_tx = NULL;
+		bus_dma_tag_destroy(sc->dmatag_data_tx);
+		sc->dmatag_data_tx = 0;
+		return (ENXIO);
+	}
+
+	/* Allocate a busdma tag for mbufs. Alignment is 2 bytes */
+	error = bus_dma_tag_create(sc->sc_parent_tag,	/* parent */
+	    1, 0,			/* alignment, boundary */
+	    BUS_SPACE_MAXADDR_32BIT,	/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,		/* filtfunc, filtfuncarg */
+	   MCLBYTES*MAX_FRAGMENT,	/* maxsize */
+	   MAX_FRAGMENT,		 /* nsegments */
+	    MCLBYTES, 0,		/* maxsegsz, flags */
+	    NULL, NULL,		/* lockfunc, lockfuncarg */
+	    &sc->dmatag_ring_tx);	/* dmat */
+
+	if (error) {
+		if_printf(sc->ifp, "failed to create busdma tag for mbufs\n");
+		return (ENXIO);
+	}
+
+	for (i = 0; i < ECE_MAX_TX_BUFFERS; i++) {
+		/* Create dma map for each descriptor. */
+		error = bus_dmamap_create(sc->dmatag_ring_tx, 0,
+		    &(sc->tx_desc[i].dmamap));
+		if (error) {
+			if_printf(sc->ifp, "failed to create map for mbuf\n");
+			return (ENXIO);
+		}
+	}
+	return (0);
+}
+
+static void
+ece_free_desc_dma_tx(struct ece_softc *sc)
+{
+	int i;
+
+	for (i = 0; i < ECE_MAX_TX_BUFFERS; i++) {
+		if (sc->tx_desc[i].buff) {
+			m_freem(sc->tx_desc[i].buff);
+			sc->tx_desc[i].buff= 0;
+		}
+	}
+
+	if (sc->dmamap_ring_tx) {
+		bus_dmamap_unload(sc->dmatag_data_tx, sc->dmamap_ring_tx);
+		if (sc->desc_tx) {
+			bus_dmamem_free(sc->dmatag_data_tx,
+			    sc->desc_tx, sc->dmamap_ring_tx);
+		}
+		sc->dmamap_ring_tx = 0;
+	}
+
+	if (sc->dmatag_data_tx) {
+		bus_dma_tag_destroy(sc->dmatag_data_tx);
+		sc->dmatag_data_tx = 0;
+	}
+
+	if (sc->dmatag_ring_tx) {
+		for (i = 0; idmatag_ring_tx,
+			    sc->tx_desc[i].dmamap);
+			sc->tx_desc[i].dmamap = 0;
+		}
+		bus_dma_tag_destroy(sc->dmatag_ring_tx);
+		sc->dmatag_ring_tx = 0;
+	}
+}
+
+static int
+ece_alloc_desc_dma_rx(struct ece_softc *sc)
+{
+	int error;
+	int i;
+
+	/* Allocate a busdma tag and DMA safe memory for RX descriptors. */
+	error = bus_dma_tag_create(sc->sc_parent_tag,	/* parent */
+	    16, 0,			/* alignment, boundary */
+	    BUS_SPACE_MAXADDR_32BIT,	/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,		/* filtfunc, filtfuncarg */
+	    /* maxsize, nsegments */
+	    sizeof(eth_rx_desc_t)*ECE_MAX_RX_BUFFERS, 1,
+	    /* maxsegsz, flags */
+	    sizeof(eth_rx_desc_t)*ECE_MAX_RX_BUFFERS, 0,
+	    NULL, NULL,		/* lockfunc, lockfuncarg */
+	    &sc->dmatag_data_rx);	/* dmat */
+
+	/* Allocate RX ring. */
+	error = bus_dmamem_alloc(sc->dmatag_data_rx,
+	    (void**)&(sc->desc_rx),
+	    BUS_DMA_NOWAIT | BUS_DMA_ZERO |
+	    BUS_DMA_COHERENT,
+	    &(sc->dmamap_ring_rx));
+
+	if (error) {
+		if_printf(sc->ifp, "failed to allocate DMA memory\n");
+		return (ENXIO);
+	}
+
+	/* Load dmamap. */
+	error = bus_dmamap_load(sc->dmatag_data_rx, sc->dmamap_ring_rx,
+	    sc->desc_rx,
+	    sizeof(eth_rx_desc_t)*ECE_MAX_RX_BUFFERS,
+	    ece_getaddr,
+	    &(sc->ring_paddr_rx), BUS_DMA_NOWAIT);
+
+	if (error) {
+		if_printf(sc->ifp, "can't load descriptor\n");
+		bus_dmamem_free(sc->dmatag_data_rx, sc->desc_rx,
+		    sc->dmamap_ring_rx);
+		bus_dma_tag_destroy(sc->dmatag_data_rx);
+		sc->desc_rx = NULL;
+		return (ENXIO);
+	}
+
+	/* Allocate a busdma tag for mbufs. */
+	error = bus_dma_tag_create(sc->sc_parent_tag,/* parent */
+	    16, 0,			/* alignment, boundary */
+	    BUS_SPACE_MAXADDR_32BIT,	/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,		/* filtfunc, filtfuncarg */
+	    MCLBYTES, 1,		/* maxsize, nsegments */
+	    MCLBYTES, 0,		/* maxsegsz, flags */
+	    NULL, NULL,		/* lockfunc, lockfuncarg */
+	    &sc->dmatag_ring_rx);	/* dmat */
+
+	if (error) {
+		if_printf(sc->ifp, "failed to create busdma tag for mbufs\n");
+		return (ENXIO);
+	}
+
+	for (i = 0; idmatag_ring_rx, 0,
+		    &sc->rx_desc[i].dmamap);
+		if (error) {
+			if_printf(sc->ifp, "failed to create map for mbuf\n");
+			return (ENXIO);
+		}
+	}
+
+	error = bus_dmamap_create(sc->dmatag_ring_rx, 0, &sc->rx_sparemap);
+	if (error) {
+		if_printf(sc->ifp, "failed to create spare map\n");
+		return (ENXIO);
+	}
+
+	return (0);
+}
+
+static void
+ece_free_desc_dma_rx(struct ece_softc *sc)
+{
+	int i;
+
+	for (i = 0; i < ECE_MAX_RX_BUFFERS; i++) {
+		if (sc->rx_desc[i].buff) {
+			m_freem(sc->rx_desc[i].buff);
+			sc->rx_desc[i].buff= 0;
+		}
+	}
+
+	if (sc->dmatag_data_rx) {
+		bus_dmamap_unload(sc->dmatag_data_rx, sc->dmamap_ring_rx);
+		bus_dmamem_free(sc->dmatag_data_rx, sc->desc_rx,
+		    sc->dmamap_ring_rx);
+		bus_dma_tag_destroy(sc->dmatag_data_rx);
+		sc->dmatag_data_rx = 0;
+		sc->dmamap_ring_rx = 0;
+		sc->desc_rx = 0;
+	}
+
+	if (sc->dmatag_ring_rx) {
+		for (i = 0; i < ECE_MAX_RX_BUFFERS; i++)
+			bus_dmamap_destroy(sc->dmatag_ring_rx,
+			    sc->rx_desc[i].dmamap);
+		bus_dmamap_destroy(sc->dmatag_ring_rx, sc->rx_sparemap);
+		bus_dma_tag_destroy(sc->dmatag_ring_rx);
+		sc->dmatag_ring_rx = 0;
+	}
+}
+
+static int
+ece_new_rxbuf(struct ece_softc *sc, struct rx_desc_info* descinfo)
+{
+	struct mbuf *new_mbuf;
+	bus_dma_segment_t seg[1];
+	bus_dmamap_t map;
+	int error;
+	int nsegs;
+	bus_dma_tag_t tag;
+
+	tag = sc->dmatag_ring_rx;
+
+	new_mbuf = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
+
+	if (new_mbuf == NULL)
+		return (ENOBUFS);
+
+	new_mbuf->m_len = new_mbuf->m_pkthdr.len = MCLBYTES;
+
+	error = bus_dmamap_load_mbuf_sg(tag, sc->rx_sparemap, new_mbuf,
+	    seg, &nsegs, BUS_DMA_NOWAIT);
+
+	KASSERT(nsegs == 1, ("Too many segments returned!"));
+
+	if (nsegs != 1 || error) {
+		m_free(new_mbuf);
+		return (ENOBUFS);
+	}
+
+	if (descinfo->buff != NULL) {
+		bus_dmamap_sync(tag, descinfo->dmamap, BUS_DMASYNC_POSTREAD);
+		bus_dmamap_unload(tag, descinfo->dmamap);
+	}
+
+	map = descinfo->dmamap;
+	descinfo->dmamap = sc->rx_sparemap;
+	sc->rx_sparemap = map;
+
+	bus_dmamap_sync(tag, descinfo->dmamap, BUS_DMASYNC_PREREAD);
+
+	descinfo->buff = new_mbuf;
+	descinfo->desc->data_ptr = seg->ds_addr;
+	descinfo->desc->length = seg->ds_len - 2;
+
+	return (0);
+}
+
+static int
+ece_allocate_dma(struct ece_softc *sc)
+{
+	eth_tx_desc_t *desctx;
+	eth_rx_desc_t *descrx;
+	int i;
+	int error;
+
+	/* Create parent tag for tx and rx */
+	error = bus_dma_tag_create(
+	    bus_get_dma_tag(sc->dev),/* parent */
+	    1, 0,		/* alignment, boundary */
+	    BUS_SPACE_MAXADDR,	/* lowaddr */
+	    BUS_SPACE_MAXADDR,	/* highaddr */
+	    NULL, NULL,	/* filter, filterarg */
+	    BUS_SPACE_MAXSIZE_32BIT, 0,/* maxsize, nsegments */
+	    BUS_SPACE_MAXSIZE_32BIT,	/* maxsegsize */
+	    0,			/* flags */
+	    NULL, NULL,	/* lockfunc, lockarg */
+	    &sc->sc_parent_tag);
+
+	ece_alloc_desc_dma_tx(sc);
+
+	for (i = 0; i < ECE_MAX_TX_BUFFERS; i++) {
+		desctx = (eth_tx_desc_t *)(&sc->desc_tx[i]);
+		memset(desctx, 0, sizeof(eth_tx_desc_t));
+		desctx->length = MAX_PACKET_LEN;
+		desctx->cown = 1;
+		if (i == ECE_MAX_TX_BUFFERS - 1)
+			desctx->eor = 1;
+	}
+
+	ece_alloc_desc_dma_rx(sc);
+
+	for (i = 0; i < ECE_MAX_RX_BUFFERS; i++) {
+		descrx = &(sc->desc_rx[i]);
+		memset(descrx, 0, sizeof(eth_rx_desc_t));
+		sc->rx_desc[i].desc = descrx;
+		sc->rx_desc[i].buff = 0;
+		ece_new_rxbuf(sc, &(sc->rx_desc[i]));
+
+		if (i == ECE_MAX_RX_BUFFERS - 1)
+			descrx->eor = 1;
+	}
+	sc->tx_prod = 0;
+	sc->tx_cons = 0;
+	sc->last_rx = 0;
+	sc->desc_curr_tx = 0;
+
+	return (0);
+}
+
+static int
+ece_activate(device_t dev)
+{
+	struct ece_softc *sc;
+	int err;
+	uint32_t mac_port_config;
+	struct ifnet *ifp;
+
+	sc = device_get_softc(dev);
+	ifp = sc->ifp;
+
+	initial_switch_config = read_4(sc, SWITCH_CONFIG);
+	initial_cpu_config = read_4(sc, CPU_PORT_CONFIG);
+	initial_port0_config = read_4(sc, MAC_PORT_0_CONFIG);
+	initial_port1_config = read_4(sc, MAC_PORT_1_CONFIG);
+
+	/* Disable Port 0 */
+	mac_port_config = read_4(sc, MAC_PORT_0_CONFIG);
+	mac_port_config |= (PORT_DISABLE);
+	write_4(sc, MAC_PORT_0_CONFIG, mac_port_config);
+
+	/* Disable Port 1 */
+	mac_port_config = read_4(sc, MAC_PORT_1_CONFIG);
+	mac_port_config |= (PORT_DISABLE);
+	write_4(sc, MAC_PORT_1_CONFIG, mac_port_config);
+
+	err = ece_allocate_dma(sc);
+	if (err) {
+		if_printf(sc->ifp, "failed allocating dma\n");
+		goto out;
+	}
+
+	write_4(sc, TS_DESCRIPTOR_POINTER, sc->ring_paddr_tx);
+	write_4(sc, TS_DESCRIPTOR_BASE_ADDR, sc->ring_paddr_tx);
+
+	write_4(sc, FS_DESCRIPTOR_POINTER, sc->ring_paddr_rx);
+	write_4(sc, FS_DESCRIPTOR_BASE_ADDR, sc->ring_paddr_rx);
+
+	write_4(sc, FS_DMA_CONTROL, 1);
+
+	return (0);
+out:
+	return (ENXIO);
+
+}
+
+static void
+ece_deactivate(device_t dev)
+{
+	struct ece_softc *sc;
+
+	sc = device_get_softc(dev);
+
+	if (sc->intrhand)
+		bus_teardown_intr(dev, sc->irq_res_rec, sc->intrhand);
+
+	sc->intrhand = 0;
+
+	if (sc->intrhand_qf)
+		bus_teardown_intr(dev, sc->irq_res_qf, sc->intrhand_qf);
+
+	sc->intrhand_qf = 0;
+
+	bus_generic_detach(sc->dev);
+	if (sc->miibus)
+		device_delete_child(sc->dev, sc->miibus);
+	if (sc->mem_res)
+		bus_release_resource(dev, SYS_RES_IOPORT,
+		    rman_get_rid(sc->mem_res), sc->mem_res);
+	sc->mem_res = 0;
+
+	if (sc->irq_res_rec)
+		bus_release_resource(dev, SYS_RES_IRQ,
+		    rman_get_rid(sc->irq_res_rec), sc->irq_res_rec);
+
+	if (sc->irq_res_qf)
+		bus_release_resource(dev, SYS_RES_IRQ,
+		    rman_get_rid(sc->irq_res_qf), sc->irq_res_qf);
+
+	if (sc->irq_res_qf)
+		bus_release_resource(dev, SYS_RES_IRQ,
+		    rman_get_rid(sc->irq_res_status), sc->irq_res_status);
+
+	sc->irq_res_rec = 0;
+	sc->irq_res_qf = 0;
+	sc->irq_res_status = 0;
+	ECE_TXLOCK_DESTROY(sc);
+	ECE_RXLOCK_DESTROY(sc);
+
+	ece_free_desc_dma_tx(sc);
+	ece_free_desc_dma_rx(sc);
+
+	return;
+}
+
+/*
+ * Change media according to request.
+ */
+static int
+ece_ifmedia_upd(struct ifnet *ifp)
+{
+	struct ece_softc *sc = ifp->if_softc;
+	struct mii_data *mii;
+	int error;
+
+	mii = device_get_softc(sc->miibus);
+	ECE_LOCK(sc);
+	error = mii_mediachg(mii);
+	ECE_UNLOCK(sc);
+	return (error);
+}
+
+/*
+ * Notify the world which media we're using.
+ */
+static void
+ece_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
+{
+	struct ece_softc *sc = ifp->if_softc;
+	struct mii_data *mii;
+
+	mii = device_get_softc(sc->miibus);
+	ECE_LOCK(sc);
+	mii_pollstat(mii);
+	ifmr->ifm_active = mii->mii_media_active;
+	ifmr->ifm_status = mii->mii_media_status;
+	ECE_UNLOCK(sc);
+}
+
+static void
+ece_tick(void *xsc)
+{
+	struct ece_softc *sc = xsc;
+	struct mii_data *mii;
+	int active;
+
+	mii = device_get_softc(sc->miibus);
+	active = mii->mii_media_active;
+	mii_tick(mii);
+
+	/*
+	 * Schedule another timeout one second from now.
+	 */
+	callout_reset(&sc->tick_ch, hz, ece_tick, sc);
+}
+
+static uint32_t
+read_mac_entry(struct ece_softc *ec,
+    uint8_t *mac_result,
+    int first)
+{
+	uint32_t ii;
+	struct arl_table_entry_t entry;
+	uint32_t *entry_val;
+	write_4(ec, ARL_TABLE_ACCESS_CONTROL_0, 0);
+	write_4(ec, ARL_TABLE_ACCESS_CONTROL_1, 0);
+	write_4(ec, ARL_TABLE_ACCESS_CONTROL_2, 0);
+	if (first)
+		write_4(ec, ARL_TABLE_ACCESS_CONTROL_0, 0x1);
+	else
+		write_4(ec, ARL_TABLE_ACCESS_CONTROL_0, 0x2);
+
+	for (ii = 0; ii < 0x1000; ii++)
+		if (read_4(ec, ARL_TABLE_ACCESS_CONTROL_1) & (0x1))
+			break;
+
+	entry_val = (uint32_t*) (&entry);
+	entry_val[0] = read_4(ec, ARL_TABLE_ACCESS_CONTROL_1);
+	entry_val[1] = read_4(ec, ARL_TABLE_ACCESS_CONTROL_2);
+
+	if (mac_result)
+		memcpy(mac_result, entry.mac_addr, ETHER_ADDR_LEN);
+
+	return (entry.table_end);
+}
+
+static uint32_t
+write_arl_table_entry(struct ece_softc *ec,
+    uint32_t filter,
+    uint32_t vlan_mac,
+    uint32_t vlan_gid,
+    uint32_t age_field,
+    uint32_t port_map,
+    const uint8_t *mac_addr)
+{
+	uint32_t ii;
+	uint32_t *entry_val;
+	struct arl_table_entry_t entry;
+
+	memset(&entry, 0, sizeof(entry));
+
+	entry.filter = filter;
+	entry.vlan_mac = vlan_mac;
+	entry.vlan_gid = vlan_gid;
+	entry.age_field = age_field;
+	entry.port_map = port_map;
+	memcpy(entry.mac_addr, mac_addr, ETHER_ADDR_LEN);
+
+	entry_val = (uint32_t*) (&entry);
+
+	write_4(ec, ARL_TABLE_ACCESS_CONTROL_0, 0);
+	write_4(ec, ARL_TABLE_ACCESS_CONTROL_1, 0);
+	write_4(ec, ARL_TABLE_ACCESS_CONTROL_2, 0);
+
+	write_4(ec, ARL_TABLE_ACCESS_CONTROL_1, entry_val[0]);
+	write_4(ec, ARL_TABLE_ACCESS_CONTROL_2, entry_val[1]);
+
+	write_4(ec, ARL_TABLE_ACCESS_CONTROL_0, ARL_WRITE_COMMAND);
+
+	for (ii = 0; ii < 0x1000; ii++)
+		if (read_4(ec, ARL_TABLE_ACCESS_CONTROL_1) &
+		    ARL_COMMAND_COMPLETE)
+			return (1); /* Write OK. */
+
+	/* Write failed. */
+	return (0);
+}
+
+static void
+remove_mac_entry(struct ece_softc *sc,
+    uint8_t *mac)
+{
+
+	/* Invalid age_field mean erase this entry. */
+	write_arl_table_entry(sc, 0, 1, VLAN0_GROUP_ID,
+	    INVALID_ENTRY, VLAN0_GROUP,
+	    mac);
+}
+
+static void
+add_mac_entry(struct ece_softc *sc,
+    uint8_t *mac)
+{
+
+	write_arl_table_entry(sc, 0, 1, VLAN0_GROUP_ID,
+	    NEW_ENTRY, VLAN0_GROUP,
+	    mac);
+}
+
+/**
+ * The behavior of ARL table reading and deletion is not well defined
+ * in the documentation. To be safe, all mac addresses are put to a
+ * list, then deleted.
+ *
+ */
+static void
+clear_mac_entries(struct ece_softc *ec, int include_this_mac)
+{
+	int table_end;
+	struct mac_list * temp;
+	struct mac_list * mac_list_header;
+	struct mac_list * current;
+	char mac[ETHER_ADDR_LEN];
+
+	current = 0;
+	mac_list_header = 0;
+
+	table_end = read_mac_entry(ec, mac, 1);
+	while (!table_end) {
+		if (!include_this_mac &&
+		    memcmp(mac, vlan0_mac, ETHER_ADDR_LEN) == 0) {
+			/* Read next entry. */
+			table_end = read_mac_entry(ec, mac, 0);
+			continue;
+		}
+
+		temp = (struct mac_list*)malloc(sizeof(struct mac_list),
+		    M_DEVBUF,
+		    M_NOWAIT | M_ZERO);
+		memcpy(temp->mac_addr, mac, ETHER_ADDR_LEN);
+		temp->next = 0;
+		if (mac_list_header) {
+			current->next = temp;
+			current = temp;
+		} else {
+			mac_list_header = temp;
+			current = temp;
+		}
+		/* Read next Entry */
+		table_end = read_mac_entry(ec, mac, 0);
+	}
+
+	current = mac_list_header;
+
+	while (current) {
+		remove_mac_entry(ec, current->mac_addr);
+		temp = current;
+		current = current->next;
+		free(temp, M_DEVBUF);
+	}
+}
+
+static int
+configure_lan_port(struct ece_softc *sc, int phy_type)
+{
+	uint32_t sw_config;
+	uint32_t mac_port_config;
+
+	/*
+	 * Configure switch
+	 */
+	sw_config = read_4(sc, SWITCH_CONFIG);
+	/* Enable fast aging. */
+	sw_config |= FAST_AGING;
+	/* Enable IVL learning. */
+	sw_config |= IVL_LEARNING;
+	/* Disable hardware NAT. */
+	sw_config &= ~(HARDWARE_NAT);
+
+	sw_config |= SKIP_L2_LOOKUP_PORT_0 | SKIP_L2_LOOKUP_PORT_1| NIC_MODE;
+
+	write_4(sc, SWITCH_CONFIG, sw_config);
+
+	sw_config = read_4(sc, SWITCH_CONFIG);
+
+	mac_port_config = read_4(sc, MAC_PORT_0_CONFIG);
+
+	if (!(mac_port_config & 0x1) || (mac_port_config & 0x2))
+		if_printf(sc->ifp, "Link Down\n");
+	else
+		write_4(sc, MAC_PORT_0_CONFIG, mac_port_config);
+	return (0);
+}
+
+static void
+set_pvid(struct ece_softc *sc, int port0, int port1, int cpu)
+{
+	uint32_t val;
+	val = read_4(sc, VLAN_PORT_PVID) & (~(0x7 << 0));
+	write_4(sc, VLAN_PORT_PVID, val);
+	val = read_4(sc, VLAN_PORT_PVID) | ((port0) & 0x07);
+	write_4(sc, VLAN_PORT_PVID, val);
+	val = read_4(sc, VLAN_PORT_PVID) & (~(0x7 << 4));
+	write_4(sc, VLAN_PORT_PVID, val);
+	val = read_4(sc, VLAN_PORT_PVID) | (((port1) & 0x07) << 4);
+	write_4(sc, VLAN_PORT_PVID, val);
+
+	val = read_4(sc, VLAN_PORT_PVID) & (~(0x7 << 8));
+	write_4(sc, VLAN_PORT_PVID, val);
+	val = read_4(sc, VLAN_PORT_PVID) | (((cpu) & 0x07) << 8);
+	write_4(sc, VLAN_PORT_PVID, val);
+
+}
+
+/* VLAN related functions */
+static void
+set_vlan_vid(struct ece_softc *sc, int vlan)
+{
+	const uint32_t regs[] = {
+	    VLAN_VID_0_1,
+	    VLAN_VID_0_1,
+	    VLAN_VID_2_3,
+	    VLAN_VID_2_3,
+	    VLAN_VID_4_5,
+	    VLAN_VID_4_5,
+	    VLAN_VID_6_7,
+	    VLAN_VID_6_7
+	};
+
+	const int vids[] = {
+	    VLAN0_VID,
+	    VLAN1_VID,
+	    VLAN2_VID,
+	    VLAN3_VID,
+	    VLAN4_VID,
+	    VLAN5_VID,
+	    VLAN6_VID,
+	    VLAN7_VID
+	};
+
+	uint32_t val;
+	uint32_t reg;
+	int vid;
+
+	reg = regs[vlan];
+	vid = vids[vlan];
+
+	if (vlan & 1) {
+		val = read_4(sc, reg);
+		write_4(sc, reg, val & (~(0xFFF << 0)));
+		val = read_4(sc, reg);
+		write_4(sc, reg, val|((vid & 0xFFF) << 0));
+	} else {
+		val = read_4(sc, reg);
+		write_4(sc, reg, val & (~(0xFFF << 12)));
+		val = read_4(sc, reg);
+		write_4(sc, reg, val|((vid & 0xFFF) << 12));
+	}
+}
+
+static void
+set_vlan_member(struct ece_softc *sc, int vlan)
+{
+	unsigned char shift;
+	uint32_t val;
+	int group;
+	const int groups[] = {
+	    VLAN0_GROUP,
+	    VLAN1_GROUP,
+	    VLAN2_GROUP,
+	    VLAN3_GROUP,
+	    VLAN4_GROUP,
+	    VLAN5_GROUP,
+	    VLAN6_GROUP,
+	    VLAN7_GROUP
+	};
+
+	group = groups[vlan];
+
+	shift = vlan*3;
+	val = read_4(sc, VLAN_MEMBER_PORT_MAP) & (~(0x7 << shift));
+	write_4(sc, VLAN_MEMBER_PORT_MAP, val);
+	val = read_4(sc, VLAN_MEMBER_PORT_MAP);
+	write_4(sc, VLAN_MEMBER_PORT_MAP, val | ((group & 0x7) << shift));
+}
+
+static void
+set_vlan_tag(struct ece_softc *sc, int vlan)
+{
+	unsigned char shift;
+	uint32_t val;
+
+	int tag = 0;
+
+	shift = vlan*3;
+	val = read_4(sc, VLAN_TAG_PORT_MAP) & (~(0x7 << shift));
+	write_4(sc, VLAN_TAG_PORT_MAP, val);
+	val = read_4(sc, VLAN_TAG_PORT_MAP);
+	write_4(sc, VLAN_TAG_PORT_MAP, val | ((tag & 0x7) << shift));
+}
+
+static int
+configure_cpu_port(struct ece_softc *sc)
+{
+	uint32_t cpu_port_config;
+	int i;
+
+	cpu_port_config = read_4(sc, CPU_PORT_CONFIG);
+	/* SA learning Disable */
+	cpu_port_config |= (SA_LEARNING_DISABLE);
+	/* set data offset + 2 */
+	cpu_port_config &= ~(1 << 31);
+
+	write_4(sc, CPU_PORT_CONFIG, cpu_port_config);
+
+	if (!write_arl_table_entry(sc, 0, 1, VLAN0_GROUP_ID,
+	    STATIC_ENTRY, VLAN0_GROUP,
+	    vlan0_mac))
+		return (1);
+
+	set_pvid(sc, PORT0_PVID, PORT1_PVID, CPU_PORT_PVID);
+
+	for (i = 0; i < 8; i++) {
+		set_vlan_vid(sc, i);
+		set_vlan_member(sc, i);
+		set_vlan_tag(sc, i);
+	}
+
+	/* disable all interrupt status sources */
+	write_4(sc, INTERRUPT_MASK, 0xffff1fff);
+
+	/* clear previous interrupt sources */
+	write_4(sc, INTERRUPT_STATUS, 0x00001FFF);
+
+	write_4(sc, TS_DMA_CONTROL, 0);
+	write_4(sc, FS_DMA_CONTROL, 0);
+	return (0);
+}
+
+static int
+hardware_init(struct ece_softc *sc)
+{
+	int status = 0;
+	static int gw_phy_type;
+
+	gw_phy_type = get_phy_type(sc);
+	/* Currently only ic_plus phy is supported. */
+	if (gw_phy_type != IC_PLUS_PHY) {
+		device_printf(sc->dev, "PHY type is not supported (%d)\n",
+		    gw_phy_type);
+		return (-1);
+	}
+	status = configure_lan_port(sc, gw_phy_type);
+	configure_cpu_port(sc);
+	return (0);
+}
+
+static void
+set_mac_address(struct ece_softc *sc, const char *mac, int mac_len)
+{
+
+	/* Invalid age_field mean erase this entry. */
+	write_arl_table_entry(sc, 0, 1, VLAN0_GROUP_ID,
+	    INVALID_ENTRY, VLAN0_GROUP,
+	    mac);
+	memcpy(vlan0_mac, mac, ETHER_ADDR_LEN);
+
+	write_arl_table_entry(sc, 0, 1, VLAN0_GROUP_ID,
+	    STATIC_ENTRY, VLAN0_GROUP,
+	    mac);
+}
+
+static void
+ece_set_mac(struct ece_softc *sc, u_char *eaddr)
+{
+	memcpy(vlan0_mac, eaddr, ETHER_ADDR_LEN);
+	set_mac_address(sc, eaddr, ETHER_ADDR_LEN);
+}
+
+/*
+ * TODO: the device doesn't have MAC stored, we should read the
+ * configuration stored in FLASH, but the format depends on the
+ * bootloader used.*
+ */
+static int
+ece_get_mac(struct ece_softc *sc, u_char *eaddr)
+{
+	return (ENXIO);
+}
+
+static void
+ece_intr_rx_locked(struct ece_softc *sc, int count)
+{
+	struct ifnet *ifp = sc->ifp;
+	struct mbuf *mb;
+	struct rx_desc_info *rxdesc;
+	eth_rx_desc_t *desc;
+
+	int fssd_curr;
+	int fssd;
+	int i;
+	int idx;
+	int rxcount;
+	uint32_t status;
+
+	fssd_curr = read_4(sc, FS_DESCRIPTOR_POINTER);
+
+	fssd = (fssd_curr - (uint32_t)sc->ring_paddr_rx)>>4;
+
+	desc = sc->rx_desc[sc->last_rx].desc;
+
+	/* Prepare to read the data in the ring. */
+	bus_dmamap_sync(sc->dmatag_ring_rx,
+	    sc->dmamap_ring_rx,
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+
+	if (fssd > sc->last_rx)
+		rxcount = fssd - sc->last_rx;
+	else if (fssd < sc->last_rx)
+		rxcount = (ECE_MAX_RX_BUFFERS - sc->last_rx) + fssd;
+	else {
+		if (desc->cown == 0)
+			return;
+		else
+			rxcount = ECE_MAX_RX_BUFFERS;
+	}
+
+	for (i= 0; i < rxcount; i++) {
+		status = desc->cown;
+		if (!status)
+			break;
+
+		idx = sc->last_rx;
+		rxdesc = &sc->rx_desc[idx];
+		mb = rxdesc->buff;
+
+		if (desc->length < ETHER_MIN_LEN - ETHER_CRC_LEN ||
+		    desc->length > ETHER_MAX_LEN - ETHER_CRC_LEN +
+		    ETHER_VLAN_ENCAP_LEN) {
+			ifp->if_ierrors++;
+			desc->cown = 0;
+			desc->length = MCLBYTES - 2;
+			/* Invalid packet, skip and process next
+			 * packet.
+			 */
+			continue;
+		}
+
+		if (ece_new_rxbuf(sc, rxdesc) != 0) {
+			ifp->if_iqdrops++;
+			desc->cown = 0;
+			desc->length = MCLBYTES - 2;
+			break;
+		}
+
+		/**
+		 * The device will write to addrress + 2 So we need to adjust
+		 * the address after the packet is received.
+		 */
+		mb->m_data += 2;
+		mb->m_len = mb->m_pkthdr.len = desc->length;
+
+		mb->m_flags |= M_PKTHDR;
+		mb->m_pkthdr.rcvif = ifp;
+		if ((ifp->if_capenable & IFCAP_RXCSUM) != 0) {
+			/*check for valid checksum*/
+			if ( (!desc->l4f)  && (desc->prot != 3)) {
+				mb->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+				mb->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+				mb->m_pkthdr.csum_data = 0xffff;
+			}
+		}
+		ECE_RXUNLOCK(sc);
+		(*ifp->if_input)(ifp, mb);
+		ECE_RXLOCK(sc);
+
+		desc->cown = 0;
+		desc->length = MCLBYTES - 2;
+
+		bus_dmamap_sync(sc->dmatag_ring_rx,
+		    sc->dmamap_ring_rx,
+		    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
+
+		if (sc->last_rx == ECE_MAX_RX_BUFFERS - 1)
+			sc->last_rx = 0;
+		else
+			sc->last_rx++;
+
+		desc = sc->rx_desc[sc->last_rx].desc;
+	}
+
+	/* Sync updated flags. */
+	bus_dmamap_sync(sc->dmatag_ring_rx,
+	    sc->dmamap_ring_rx,
+	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
+
+	return;
+}
+
+static void
+ece_intr_task(void *arg, int pending __unused)
+{
+	struct ece_softc *sc = arg;
+	ECE_RXLOCK(sc);
+	ece_intr_rx_locked(sc, -1);
+	ECE_RXUNLOCK(sc);
+}
+
+static void
+ece_intr(void *xsc)
+{
+	struct ece_softc *sc = xsc;
+	struct ifnet *ifp = sc->ifp;
+
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
+		write_4(sc, FS_DMA_CONTROL, 0);
+		return;
+	}
+
+	taskqueue_enqueue(sc->sc_tq, &sc->sc_intr_task);
+
+	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+		taskqueue_enqueue(sc->sc_tq, &sc->sc_tx_task);
+}
+
+static void
+ece_intr_status(void *xsc)
+{
+	struct ece_softc *sc = xsc;
+	struct ifnet *ifp = sc->ifp;
+	int stat;
+
+	stat = read_4(sc, INTERRUPT_STATUS);
+
+	write_4(sc, INTERRUPT_STATUS, stat);
+
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) {
+		if ((stat & ERROR_MASK) != 0)
+			ifp->if_iqdrops++;
+	}
+}
+
+static void
+ece_cleanup_locked(struct ece_softc *sc)
+{
+	eth_tx_desc_t *desc;
+
+	if (sc->tx_cons == sc->tx_prod) return;
+
+	/* Prepare to read the ring (owner bit). */
+	bus_dmamap_sync(sc->dmatag_ring_tx,
+	    sc->dmamap_ring_tx,
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+
+	while (sc->tx_cons != sc->tx_prod) {
+		desc = sc->tx_desc[sc->tx_cons].desc;
+		if (desc->cown != 0) {
+			struct tx_desc_info *td = &(sc->tx_desc[sc->tx_cons]);
+			/* We are finished with this descriptor ... */
+			bus_dmamap_sync(sc->dmatag_data_tx, td->dmamap,
+			    BUS_DMASYNC_POSTWRITE);
+			/* ... and unload, so we can reuse. */
+			bus_dmamap_unload(sc->dmatag_data_tx, td->dmamap);
+			m_freem(td->buff);
+			td->buff = 0;
+			sc->tx_cons = (sc->tx_cons + 1) % ECE_MAX_TX_BUFFERS;
+		} else {
+			break;
+		}
+	}
+
+}
+
+static void
+ece_cleanup_task(void *arg, int pending __unused)
+{
+	struct ece_softc *sc = arg;
+	ECE_CLEANUPLOCK(sc);
+	ece_cleanup_locked(sc);
+	ECE_CLEANUPUNLOCK(sc);
+}
+
+static void
+ece_intr_tx(void *xsc)
+{
+	struct ece_softc *sc = xsc;
+	struct ifnet *ifp = sc->ifp;
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
+		/* This should not happen, stop DMA. */
+		write_4(sc, FS_DMA_CONTROL, 0);
+		return;
+	}
+	taskqueue_enqueue(sc->sc_tq, &sc->sc_cleanup_task);
+}
+
+static void
+ece_intr_qf(void *xsc)
+{
+	struct ece_softc *sc = xsc;
+	struct ifnet *ifp = sc->ifp;
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
+		/* This should not happen, stop DMA. */
+		write_4(sc, FS_DMA_CONTROL, 0);
+		return;
+	}
+	taskqueue_enqueue(sc->sc_tq, &sc->sc_intr_task);
+	write_4(sc, FS_DMA_CONTROL, 1);
+}
+
+/*
+ * Reset and initialize the chip
+ */
+static void
+eceinit_locked(void *xsc)
+{
+	struct ece_softc *sc = xsc;
+	struct ifnet *ifp = sc->ifp;
+	struct mii_data *mii;
+	uint32_t cfg_reg;
+	uint32_t cpu_port_config;
+	uint32_t mac_port_config;
+
+	while (1) {
+		cfg_reg = read_4(sc, BIST_RESULT_TEST_0);
+		if ((cfg_reg & (1<<17)))
+			break;
+		DELAY(100);
+	}
+	/* Set to default values. */
+	write_4(sc, SWITCH_CONFIG, 0x007AA7A1);
+	write_4(sc, MAC_PORT_0_CONFIG, 0x00423D00);
+	write_4(sc, MAC_PORT_1_CONFIG, 0x00423D80);
+	write_4(sc, CPU_PORT_CONFIG, 0x004C0000);
+
+	hardware_init(sc);
+
+	mac_port_config = read_4(sc, MAC_PORT_0_CONFIG);
+
+	 /* Enable Port 0 */
+	mac_port_config &= (~(PORT_DISABLE));
+	write_4(sc, MAC_PORT_0_CONFIG, mac_port_config);
+
+	cpu_port_config = read_4(sc, CPU_PORT_CONFIG);
+	/* Enable CPU. */
+	cpu_port_config &= ~(PORT_DISABLE);
+	write_4(sc, CPU_PORT_CONFIG, cpu_port_config);
+
+	/*
+	 * Set 'running' flag, and clear output active flag
+	 * and attempt to start the output
+	 */
+	ifp->if_drv_flags |= IFF_DRV_RUNNING;
+	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
+
+	mii = device_get_softc(sc->miibus);
+	mii_pollstat(mii);
+	/* Enable DMA. */
+	write_4(sc, FS_DMA_CONTROL, 1);
+
+	callout_reset(&sc->tick_ch, hz, ece_tick, sc);
+}
+
+static inline int
+ece_encap(struct ece_softc *sc, struct mbuf *m0)
+{
+	struct ifnet *ifp;
+	bus_dma_segment_t segs[MAX_FRAGMENT];
+	bus_dmamap_t mapp;
+	eth_tx_desc_t *desc = 0;
+	int csum_flags;
+	int desc_no;
+	int error;
+	int nsegs;
+	int seg;
+
+	ifp = sc->ifp;
+
+	/* Fetch unused map */
+	mapp = sc->tx_desc[sc->tx_prod].dmamap;
+
+	error = bus_dmamap_load_mbuf_sg(sc->dmatag_ring_tx, mapp,
+	    m0, segs, &nsegs,
+	    BUS_DMA_NOWAIT);
+
+	if (error != 0) {
+		bus_dmamap_unload(sc->dmatag_ring_tx, mapp);
+		return ((error != 0) ? error : -1);
+	}
+
+	desc = &(sc->desc_tx[sc->desc_curr_tx]);
+	sc->tx_desc[sc->tx_prod].desc = desc;
+	sc->tx_desc[sc->tx_prod].buff = m0;
+	desc_no = sc->desc_curr_tx;
+
+	for (seg = 0; seg < nsegs; seg++) {
+		if (desc->cown == 0 ) {
+			if_printf(ifp, "ERROR: descriptor is still used\n");
+			return (-1);
+		}
+
+		desc->length = segs[seg].ds_len;
+		desc->data_ptr = segs[seg].ds_addr;
+
+		if (seg == 0) {
+			desc->fs = 1;
+		} else {
+			desc->fs = 0;
+		}
+		if (seg == nsegs - 1) {
+			desc->ls = 1;
+		} else {
+			desc->ls = 0;
+		}
+
+		csum_flags = m0->m_pkthdr.csum_flags;
+
+		desc->fr =  1;
+		desc->pmap =  1;
+		desc->insv =  0;
+		desc->ico = 0;
+		desc->tco = 0;
+		desc->uco = 0;
+		desc->interrupt = 1;
+
+		if (csum_flags & CSUM_IP) {
+			desc->ico = 1;
+			if (csum_flags & CSUM_TCP)
+				desc->tco = 1;
+			if (csum_flags & CSUM_UDP)
+				desc->uco = 1;
+		}
+
+		desc++;
+		sc->desc_curr_tx = (sc->desc_curr_tx + 1) % ECE_MAX_TX_BUFFERS;
+		if (sc->desc_curr_tx == 0) {
+			desc = (eth_tx_desc_t *)&(sc->desc_tx[0]);
+		}
+	}
+
+	desc = sc->tx_desc[sc->tx_prod].desc;
+
+	sc->tx_prod = (sc->tx_prod + 1) % ECE_MAX_TX_BUFFERS;
+
+	/*
+	 * After all descriptors are set, we set the flags to start the
+	 * sending proces.
+	 */
+	for (seg = 0; seg < nsegs; seg++) {
+		desc->cown = 0;
+		desc++;
+		desc_no = (desc_no + 1) % ECE_MAX_TX_BUFFERS;
+		if (desc_no == 0)
+			desc = (eth_tx_desc_t *)&(sc->desc_tx[0]);
+	}
+
+	bus_dmamap_sync(sc->dmatag_data_tx, mapp, BUS_DMASYNC_PREWRITE);
+	return (0);
+}
+
+/*
+ * dequeu packets and transmit
+ */
+static void
+ecestart_locked(struct ifnet *ifp)
+{
+	struct ece_softc *sc;
+	struct mbuf *m0;
+	uint32_t queued = 0;
+
+	sc = ifp->if_softc;
+	if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
+	    IFF_DRV_RUNNING)
+		return;
+
+	bus_dmamap_sync(sc->dmatag_ring_tx,
+	    sc->dmamap_ring_tx,
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+
+	for (;;) {
+		/* Get packet from the queue */
+		IF_DEQUEUE(&ifp->if_snd, m0);
+		if (m0 == NULL)
+			break;
+		if (ece_encap(sc, m0)) {
+			IF_PREPEND(&ifp->if_snd, m0);
+			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
+			break;
+		}
+		queued++;
+		BPF_MTAP(ifp, m0);
+	}
+	if (queued) {
+		bus_dmamap_sync(sc->dmatag_ring_tx, sc->dmamap_ring_tx,
+		    BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
+		write_4(sc, TS_DMA_CONTROL, 1);
+	}
+}
+
+static void
+eceinit(void *xsc)
+{
+	struct ece_softc *sc = xsc;
+	ECE_LOCK(sc);
+	eceinit_locked(sc);
+	ECE_UNLOCK(sc);
+}
+
+static void
+ece_tx_task(void *arg, int pending __unused)
+{
+	struct ifnet *ifp;
+	ifp = (struct ifnet *)arg;
+	ecestart(ifp);
+}
+
+static void
+ecestart(struct ifnet *ifp)
+{
+	struct ece_softc *sc = ifp->if_softc;
+	ECE_TXLOCK(sc);
+	ecestart_locked(ifp);
+	ECE_TXUNLOCK(sc);
+}
+
+/*
+ * Turn off interrupts, and stop the nic.  Can be called with sc->ifp
+ * NULL so be careful.
+ */
+static void
+ecestop(struct ece_softc *sc)
+{
+	struct ifnet *ifp = sc->ifp;
+	uint32_t mac_port_config;
+
+	write_4(sc, TS_DMA_CONTROL, 0);
+	write_4(sc, FS_DMA_CONTROL, 0);
+
+	if (ifp)
+		ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
+
+	callout_stop(&sc->tick_ch);
+
+	/*Disable Port 0 */
+	mac_port_config = read_4(sc, MAC_PORT_0_CONFIG);
+	mac_port_config |= (PORT_DISABLE);
+	write_4(sc, MAC_PORT_0_CONFIG, mac_port_config);
+
+	/*Disable Port 1 */
+	mac_port_config = read_4(sc, MAC_PORT_1_CONFIG);
+	mac_port_config |= (PORT_DISABLE);
+	write_4(sc, MAC_PORT_1_CONFIG, mac_port_config);
+
+	/* Disable all interrupt status sources. */
+	write_4(sc, INTERRUPT_MASK, 0x00001FFF);
+
+	/* Clear previous interrupt sources. */
+	write_4(sc, INTERRUPT_STATUS, 0x00001FFF);
+
+	write_4(sc, SWITCH_CONFIG, initial_switch_config);
+	write_4(sc, CPU_PORT_CONFIG, initial_cpu_config);
+	write_4(sc, MAC_PORT_0_CONFIG, initial_port0_config);
+	write_4(sc, MAC_PORT_1_CONFIG, initial_port1_config);
+
+	clear_mac_entries(sc, 1);
+}
+
+static void
+ece_restart(struct ece_softc *sc)
+{
+	struct ifnet *ifp = sc->ifp;
+
+	ifp->if_drv_flags |= IFF_DRV_RUNNING;
+	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
+	/* Enable port 0. */
+	write_4(sc, PORT_0_CONFIG,
+	    read_4(sc, PORT_0_CONFIG) & ~(PORT_DISABLE));
+	write_4(sc, INTERRUPT_MASK, 0x00000000);
+	write_4(sc, FS_DMA_CONTROL, 1);
+	callout_reset(&sc->tick_ch, hz, ece_tick, sc);
+}
+
+static void
+set_filter(struct ece_softc *sc)
+{
+	struct ifnet		*ifp;
+	struct ifmultiaddr	*ifma;
+	uint32_t mac_port_config;
+
+	ifp = sc->ifp;
+
+	clear_mac_entries(sc, 0);
+	if (ifp->if_flags & IFF_ALLMULTI || ifp->if_flags & IFF_PROMISC) {
+		mac_port_config = read_4(sc, MAC_PORT_0_CONFIG);
+		mac_port_config &= ~(DISABLE_BROADCAST_PACKET);
+		mac_port_config &= ~(DISABLE_MULTICAST_PACKET);
+		write_4(sc, MAC_PORT_0_CONFIG, mac_port_config);
+		return;
+	}
+	if_maddr_rlock(ifp);
+	TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
+		if (ifma->ifma_addr->sa_family != AF_LINK)
+			continue;
+		add_mac_entry(sc,
+		    LLADDR((struct sockaddr_dl *)ifma->ifma_addr));
+	}
+	if_maddr_runlock(ifp);
+}
+
+static int
+eceioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
+{
+	struct ece_softc *sc = ifp->if_softc;
+	struct mii_data *mii;
+	struct ifreq *ifr = (struct ifreq *)data;
+	int mask, error = 0;
+
+	switch (cmd) {
+	case SIOCSIFFLAGS:
+		ECE_LOCK(sc);
+		if ((ifp->if_flags & IFF_UP) == 0 &&
+		    ifp->if_drv_flags & IFF_DRV_RUNNING) {
+			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+			ecestop(sc);
+		} else {
+			/* Reinitialize card on any parameter change. */
+			if ((ifp->if_flags & IFF_UP) &&
+			    !(ifp->if_drv_flags & IFF_DRV_RUNNING))
+				ece_restart(sc);
+		}
+		ECE_UNLOCK(sc);
+		break;
+
+	case SIOCADDMULTI:
+	case SIOCDELMULTI:
+		ECE_LOCK(sc);
+		set_filter(sc);
+		ECE_UNLOCK(sc);
+		break;
+
+	case SIOCSIFMEDIA:
+	case SIOCGIFMEDIA:
+		mii = device_get_softc(sc->miibus);
+		error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, cmd);
+		break;
+	case SIOCSIFCAP:
+		mask = ifp->if_capenable ^ ifr->ifr_reqcap;
+		if (mask & IFCAP_VLAN_MTU) {
+			ECE_LOCK(sc);
+			ECE_UNLOCK(sc);
+		}
+	default:
+		error = ether_ioctl(ifp, cmd, data);
+		break;
+	}
+	return (error);
+}
+
+static void
+ece_child_detached(device_t dev, device_t child)
+{
+	struct ece_softc *sc;
+
+	sc = device_get_softc(dev);
+	if (child == sc->miibus)
+		sc->miibus = NULL;
+}
+
+/*
+ * MII bus support routines.
+ */
+static int
+ece_miibus_readreg(device_t dev, int phy, int reg)
+{
+	struct ece_softc *sc;
+	/* Only one phy in this device. */
+	if (phy>0)
+		return (0);
+	sc = device_get_softc(dev);
+	return (phy_read(sc, phy, reg));
+}
+
+static int
+ece_miibus_writereg(device_t dev, int phy, int reg, int data)
+{
+	struct ece_softc *sc;
+	sc = device_get_softc(dev);
+	phy_write(sc, phy, reg, data);
+	return (0);
+}
+
+static device_method_t ece_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_probe,	ece_probe),
+	DEVMETHOD(device_attach,	ece_attach),
+	DEVMETHOD(device_detach,	ece_detach),
+
+	/* Bus interface */
+	DEVMETHOD(bus_child_detached,	ece_child_detached),
+
+	/* MII interface */
+	DEVMETHOD(miibus_readreg,	ece_miibus_readreg),
+	DEVMETHOD(miibus_writereg,	ece_miibus_writereg),
+
+	{ 0, 0 }
+};
+
+static driver_t ece_driver = {
+	"ece",
+	ece_methods,
+	sizeof(struct ece_softc),
+};
+
+DRIVER_MODULE(ece, econaarm, ece_driver, ece_devclass, 0, 0);
+DRIVER_MODULE(miibus, ece, miibus_driver, miibus_devclass, 0, 0);
+MODULE_DEPEND(ece, miibus, 1, 1, 1);
+MODULE_DEPEND(ece, ether, 1, 1, 1);
diff --git a/sys/arm/econa/if_ecereg.h b/sys/arm/econa/if_ecereg.h
new file mode 100644
index 00000000000..23929e01a44
--- /dev/null
+++ b/sys/arm/econa/if_ecereg.h
@@ -0,0 +1,154 @@
+/*-
+ * Copyright (c) 2009, Yohanes Nugroho 
+ * 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 unmodified, 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef	_IF_ECEREG_H
+#define	_IF_ECEREG_H
+
+#define	ETH_CFG		0x08
+#define	ETH_CFG_RMII		(1 << 15)
+#define	PHY_CONTROL		0x00
+#define	PHY_RW_OK		(1<<15)
+
+#define	PHY_ADDRESS(x)		((x) & 0x1)
+#define	PHY_REGISTER(r)	(((r) & 0x1F) << 8)
+#define	PHY_WRITE_COMMAND	(1<<13)
+#define	PHY_READ_COMMAND	(1<<14)
+#define	PHY_GET_DATA(d)	(((d) >> 16) & 0xFFFF)
+#define	PHY_DATA(d)		(((d) & 0xFFFF) << 16)
+
+#define	PORT_0_CONFIG		0x08
+
+#define	ARL_TABLE_ACCESS_CONTROL_0	0x050
+#define	ARL_TABLE_ACCESS_CONTROL_1	0x054
+#define	ARL_TABLE_ACCESS_CONTROL_2	0x058
+
+#define	ARL_WRITE_COMMAND	(1<<3)
+#define	ARL_LOOKUP_COMMAND	(1<<2)
+#define	ARL_COMMAND_COMPLETE	(1)
+
+
+#define	PORT0			(1 << 0)
+#define	PORT1			(1 << 1)
+#define	CPU_PORT		(1 << 2)
+
+
+#define	VLAN0_GROUP_ID		(0)
+#define	VLAN1_GROUP_ID		(1)
+#define	VLAN2_GROUP_ID		(2)
+#define	VLAN3_GROUP_ID		(3)
+#define	VLAN4_GROUP_ID		(4)
+#define	VLAN5_GROUP_ID		(5)
+#define	VLAN6_GROUP_ID		(6)
+#define	VLAN7_GROUP_ID		(7)
+
+#define	PORT0_PVID		(VLAN1_GROUP_ID)
+#define	PORT1_PVID		(VLAN2_GROUP_ID)
+#define	CPU_PORT_PVID		(VLAN0_GROUP_ID)
+
+#define	VLAN0_VID		(0x111)
+#define	VLAN1_VID		(0x222)
+#define	VLAN2_VID		(0x333)
+#define	VLAN3_VID		(0x444)
+#define	VLAN4_VID		(0x555)
+#define	VLAN5_VID		(0x666)
+#define	VLAN6_VID		(0x777)
+#define	VLAN7_VID		(0x888)
+
+#define	VLAN0_GROUP		(PORT0 | PORT1 | CPU_PORT)
+#define	VLAN1_GROUP		(PORT0 | CPU_PORT)
+#define	VLAN2_GROUP		(PORT1 | CPU_PORT)
+#define	VLAN3_GROUP		(0)
+#define	VLAN4_GROUP		(0)
+#define	VLAN5_GROUP		(0)
+#define	VLAN6_GROUP		(0)
+#define	VLAN7_GROUP		(0)
+
+#define	SWITCH_CONFIG		0x004
+#define	MAC_PORT_0_CONFIG	0x008
+#define	MAC_PORT_1_CONFIG	0x00C
+#define	CPU_PORT_CONFIG	0x010
+#define	BIST_RESULT_TEST_0	0x094
+
+#define	FS_DMA_CONTROL		0x104
+#define	TS_DMA_CONTROL		0x100
+
+#define	INTERRUPT_MASK		0x08C
+#define	INTERRUPT_STATUS	0x088
+
+#define	TS_DESCRIPTOR_POINTER		0x108
+#define	TS_DESCRIPTOR_BASE_ADDR	0x110
+#define	FS_DESCRIPTOR_POINTER		0x10C
+#define	FS_DESCRIPTOR_BASE_ADDR	0x114
+
+
+#define	VLAN_VID_0_1		0x060
+#define	VLAN_VID_2_3		0x064
+#define	VLAN_VID_4_5		0x068
+#define	VLAN_VID_6_7		0x06C
+
+#define	VLAN_PORT_PVID		0x05C
+#define	VLAN_MEMBER_PORT_MAP		0x070
+#define	VLAN_TAG_PORT_MAP		0x074
+
+
+#define	ASIX_GIGA_PHY		1
+#define	TWO_SINGLE_PHY		2
+#define	AGERE_GIGA_PHY		3
+#define	VSC8601_GIGA_PHY	4
+#define	IC_PLUS_PHY		5
+#define	NOT_FOUND_PHY		(-1)
+
+#define	MAX_PACKET_LEN		(1536)
+
+#define	INVALID_ENTRY		0
+#define	NEW_ENTRY		0x1
+#define	STATIC_ENTRY		0x7
+
+/*mask status except for link change*/
+#define	ERROR_MASK		0xFFFFFF7F
+
+/*hardware interface flags*/
+
+#define	FAST_AGING		(0xf)
+#define	IVL_LEARNING		(0x1 << 22)
+/*hardware NAT accelerator*/
+#define	HARDWARE_NAT		(0x1 << 23)
+/*aging		time		setting*/
+
+/*skip lookup*/
+#define	SKIP_L2_LOOKUP_PORT_1	(1 << 29)
+#define	SKIP_L2_LOOKUP_PORT_0	(1 << 28)
+
+#define	NIC_MODE		(1 << 30)
+#define	PORT_DISABLE		(1 << 18)
+#define	SA_LEARNING_DISABLE		(1 << 19)
+#define	DISABLE_BROADCAST_PACKET	(1 << 27)
+#define	DISABLE_MULTICAST_PACKET	( 1 << 26)
+
+#endif
diff --git a/sys/arm/econa/if_ecevar.h b/sys/arm/econa/if_ecevar.h
new file mode 100644
index 00000000000..00278ce2006
--- /dev/null
+++ b/sys/arm/econa/if_ecevar.h
@@ -0,0 +1,193 @@
+/*-
+ * Copyright (c) 2009 Yohanes Nugroho 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef	_IFECEVAR_H
+#define	_IFECEVAR_H
+
+#define	ECE_MAX_TX_BUFFERS	128
+#define	ECE_MAX_RX_BUFFERS	128
+#define	MAX_FRAGMENT		32
+
+typedef struct {
+	/* 1st 32Bits */
+	uint32_t		data_ptr;
+	/* 2nd	32Bits*/
+	uint32_t		length:16;
+
+	uint32_t		tco:1; /*tcp checksum offload*/
+	uint32_t		uco:1; /*udp checksum offload*/
+	uint32_t		ico:1; /*ip checksum offload*/
+	/* force_route_port_map*/
+	uint32_t		pmap:3;
+	/* force_route */
+	uint32_t		fr:1;
+	/* force_priority_value */
+	uint32_t		pri:3;
+	/* force_priority */
+	uint32_t		fp:1;
+	/*interrupt_bit*/
+	uint32_t		interrupt:1;
+	/*last_seg*/
+	uint32_t		ls:1;
+	/*first_seg*/
+	uint32_t		fs:1;
+	/* end_bit */
+	uint32_t		eor:1;
+	/* c_bit */
+	uint32_t		cown:1;
+	/* 3rd 32Bits*/
+	/*vid_index*/
+	uint32_t		vid:3;
+	/*insert_vid_tag*/
+	uint32_t		insv:1;
+	/*pppoe_section_index*/
+	uint32_t		sid:3;
+	/*insert_pppoe_section*/
+	uint32_t		inss:1;
+	uint32_t		unused:24;
+	/* 4th 32Bits*/
+	uint32_t		unused2;
+
+} eth_tx_desc_t;
+
+typedef struct{
+	uint32_t		data_ptr;
+	uint32_t		length:16;
+	uint32_t		l4f:1;
+	uint32_t		ipf:1;
+	uint32_t		prot:2;
+	uint32_t		hr:6;
+	uint32_t		sp:2;
+	uint32_t		ls:1;
+	uint32_t		fs:1;
+	uint32_t		eor:1;
+	uint32_t		cown:1;
+	uint32_t		unused;
+	uint32_t		unused2;
+} eth_rx_desc_t;
+
+
+struct rx_desc_info {
+	struct mbuf*buff;
+	bus_dmamap_t dmamap;
+	eth_rx_desc_t *desc;
+};
+
+struct tx_desc_info {
+	struct mbuf*buff;
+	bus_dmamap_t dmamap;
+	eth_tx_desc_t *desc;
+};
+
+
+struct ece_softc
+{
+	struct ifnet *ifp;		/* ifnet pointer */
+	struct mtx sc_mtx;		/* global mutex */
+	struct mtx sc_mtx_tx;		/* tx mutex */
+	struct mtx sc_mtx_rx;		/* rx mutex */
+	struct mtx sc_mtx_cleanup;	/* rx mutex */
+
+	bus_dma_tag_t	sc_parent_tag;	/* parent bus DMA tag */
+
+	device_t dev;			/* Myself */
+	device_t miibus;		/* My child miibus */
+	void *intrhand;			/* Interrupt handle */
+	void *intrhand_qf;		/* queue full */
+	void *intrhand_tx;		/* tx complete */
+	void *intrhand_status;		/* error status */
+
+	struct resource *irq_res_tx;	/* transmit */
+	struct resource *irq_res_rec;	/* receive */
+	struct resource *irq_res_qf;	/* queue full */
+	struct resource *irq_res_status; /* status */
+
+	struct resource	*mem_res;	/* Memory resource */
+
+	struct callout tick_ch;		/* Tick callout */
+
+	struct taskqueue *sc_tq;
+	struct task	sc_intr_task;
+	struct task	sc_cleanup_task;
+	struct task	sc_tx_task;
+
+	bus_dmamap_t	dmamap_ring_tx;
+	bus_dmamap_t	dmamap_ring_rx;
+	bus_dmamap_t	rx_sparemap;
+
+	/*dma tag for ring*/
+	bus_dma_tag_t	dmatag_ring_tx;
+	bus_dma_tag_t	dmatag_ring_rx;
+
+	/*dma tag for data*/
+	bus_dma_tag_t	dmatag_data_tx;
+	bus_dma_tag_t	dmatag_data_rx;
+
+	/*the ring*/
+	eth_tx_desc_t*	desc_tx;
+	eth_rx_desc_t*	desc_rx;
+
+	/*ring physical address*/
+	bus_addr_t	ring_paddr_tx;
+	bus_addr_t	ring_paddr_rx;
+
+	/*index of last received descriptor*/
+	uint32_t last_rx;
+	struct rx_desc_info rx_desc[ECE_MAX_RX_BUFFERS];
+
+	/* tx producer index */
+	uint32_t tx_prod;
+	/* tx consumer index */
+	uint32_t tx_cons;
+	/* tx ring index*/
+	uint32_t desc_curr_tx;
+
+	struct tx_desc_info tx_desc[ECE_MAX_TX_BUFFERS];
+};
+
+
+struct arl_table_entry_t {
+	uint32_t cmd_complete: 1;
+	uint32_t table_end: 1;
+	uint32_t search_match: 1;
+	uint32_t filter:1; /*if set, packet will be dropped */
+	uint32_t vlan_mac:1; /*indicates that this is the gateway mac address*/
+	uint32_t vlan_gid:3; /*vlan id*/
+	uint32_t age_field:3;
+	uint32_t port_map:3;
+	 /*48 bit mac address*/
+	uint8_t mac_addr[6];
+	uint8_t pad[2];
+};
+
+struct mac_list{
+	char mac_addr[6];
+	struct mac_list *next;
+};
+
+#endif
diff --git a/sys/arm/econa/ohci_ec.c b/sys/arm/econa/ohci_ec.c
new file mode 100644
index 00000000000..6bff3762983
--- /dev/null
+++ b/sys/arm/econa/ohci_ec.c
@@ -0,0 +1,241 @@
+/*-
+ * Copyright (c) 2009 Yohanes Nugroho 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+
+#define	MEM_RID	0
+
+static device_probe_t ohci_ec_probe;
+static device_attach_t ohci_ec_attach;
+static device_detach_t ohci_ec_detach;
+
+struct ec_ohci_softc {
+	struct ohci_softc sc_ohci;	/* must be first */
+};
+
+static int
+ohci_ec_probe(device_t dev)
+{
+	device_set_desc(dev, "Econa integrated OHCI controller");
+	return (BUS_PROBE_DEFAULT);
+}
+
+static int
+ohci_ec_attach(device_t dev)
+{
+	struct ec_ohci_softc *sc = device_get_softc(dev);
+	bus_space_handle_t bsh;
+	int err;
+	int rid;
+
+	/* initialise some bus fields */
+	sc->sc_ohci.sc_bus.parent = dev;
+	sc->sc_ohci.sc_bus.devices = sc->sc_ohci.sc_devices;
+	sc->sc_ohci.sc_bus.devices_max = OHCI_MAX_DEVICES;
+
+	/* get all DMA memory */
+	if (usb_bus_mem_alloc_all(&sc->sc_ohci.sc_bus,
+	    USB_GET_DMA_TAG(dev), &ohci_iterate_hw_softc)) {
+		return (ENOMEM);
+	}
+	sc->sc_ohci.sc_dev = dev;
+
+	rid = MEM_RID;
+
+	sc->sc_ohci.sc_io_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+	    &rid, RF_ACTIVE);
+
+	if (!(sc->sc_ohci.sc_io_res)) {
+		err = ENOMEM;
+		goto error;
+	}
+	sc->sc_ohci.sc_io_tag = rman_get_bustag(sc->sc_ohci.sc_io_res);
+	bsh = rman_get_bushandle(sc->sc_ohci.sc_io_res);
+	/* Undocumented magic initialization */
+	bus_space_write_4((sc)->sc_ohci.sc_io_tag, bsh,0x04, 0x146);
+
+	bus_space_write_4((sc)->sc_ohci.sc_io_tag, bsh,0x44, 0x0200);
+
+	DELAY(1000);
+
+	sc->sc_ohci.sc_io_size = rman_get_size(sc->sc_ohci.sc_io_res);
+
+	if (bus_space_subregion(sc->sc_ohci.sc_io_tag, bsh, 0x4000000,
+	    sc->sc_ohci.sc_io_size, &sc->sc_ohci.sc_io_hdl) != 0)
+		panic("%s: unable to subregion USB host registers",
+		    device_get_name(dev));
+
+	rid = 0;
+	sc->sc_ohci.sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
+	    RF_ACTIVE);
+	if (!(sc->sc_ohci.sc_irq_res)) {
+		goto error;
+	}
+	sc->sc_ohci.sc_bus.bdev = device_add_child(dev, "usbus", -1);
+	if (!(sc->sc_ohci.sc_bus.bdev)) {
+		goto error;
+	}
+	device_set_ivars(sc->sc_ohci.sc_bus.bdev, &sc->sc_ohci.sc_bus);
+
+	strlcpy(sc->sc_ohci.sc_vendor, "Cavium",
+		sizeof(sc->sc_ohci.sc_vendor));
+
+#if (__FreeBSD_version >= 700031)
+	err = bus_setup_intr(dev, sc->sc_ohci.sc_irq_res,
+	    INTR_TYPE_BIO | INTR_MPSAFE,  NULL,
+	    (driver_intr_t *)ohci_interrupt, sc,
+	    &sc->sc_ohci.sc_intr_hdl);
+#else
+	err = bus_setup_intr(dev, sc->sc_ohci.sc_irq_res,
+	    INTR_TYPE_BIO | INTR_MPSAFE,
+	    (driver_intr_t *)ohci_interrupt, sc,
+	    &sc->sc_ohci.sc_intr_hdl);
+#endif
+	if (err) {
+		sc->sc_ohci.sc_intr_hdl = NULL;
+		goto error;
+	}
+
+	bus_space_write_4(sc->sc_ohci.sc_io_tag, sc->sc_ohci.sc_io_hdl,
+	    OHCI_CONTROL, 0);
+
+	err = ohci_init(&sc->sc_ohci);
+	if (!err) {
+		err = device_probe_and_attach(sc->sc_ohci.sc_bus.bdev);
+	}
+	if (err) {
+		goto error;
+	}
+	return (0);
+
+error:
+	ohci_ec_detach(dev);
+	return (ENXIO);
+}
+
+static int
+ohci_ec_detach(device_t dev)
+{
+	struct ec_ohci_softc *sc = device_get_softc(dev);
+	device_t bdev;
+	int err;
+
+	if (sc->sc_ohci.sc_bus.bdev) {
+		bdev = sc->sc_ohci.sc_bus.bdev;
+		device_detach(bdev);
+		device_delete_child(dev, bdev);
+	}
+	/* during module unload there are lots of children leftover */
+	device_delete_all_children(dev);
+
+	bus_space_write_4(sc->sc_ohci.sc_io_tag, sc->sc_ohci.sc_io_hdl,
+	    OHCI_CONTROL, 0);
+
+	if (sc->sc_ohci.sc_irq_res && sc->sc_ohci.sc_intr_hdl) {
+		/*
+		 * only call ohci_detach() after ohci_init()
+		 */
+		ohci_detach(&sc->sc_ohci);
+
+		err = bus_teardown_intr(dev, sc->sc_ohci.sc_irq_res,
+		    sc->sc_ohci.sc_intr_hdl);
+		sc->sc_ohci.sc_intr_hdl = NULL;
+	}
+	if (sc->sc_ohci.sc_irq_res) {
+		bus_release_resource(dev, SYS_RES_IRQ, 0,
+		    sc->sc_ohci.sc_irq_res);
+		sc->sc_ohci.sc_irq_res = NULL;
+	}
+	if (sc->sc_ohci.sc_io_res) {
+		bus_release_resource(dev, SYS_RES_MEMORY, MEM_RID,
+		    sc->sc_ohci.sc_io_res);
+		sc->sc_ohci.sc_io_res = NULL;
+	}
+	usb_bus_mem_free_all(&sc->sc_ohci.sc_bus, &ohci_iterate_hw_softc);
+
+	return (0);
+}
+
+static device_method_t ohci_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_probe, ohci_ec_probe),
+	DEVMETHOD(device_attach, ohci_ec_attach),
+	DEVMETHOD(device_detach, ohci_ec_detach),
+	DEVMETHOD(device_shutdown, bus_generic_shutdown),
+
+	/* Bus interface */
+	DEVMETHOD(bus_print_child, bus_generic_print_child),
+
+	{0, 0}
+};
+
+static driver_t ohci_driver = {
+	"ohci",
+	ohci_methods,
+	sizeof(struct ec_ohci_softc),
+};
+
+static devclass_t ohci_devclass;
+
+DRIVER_MODULE(ohci, econaarm, ohci_driver, ohci_devclass, 0, 0);
+MODULE_DEPEND(ohci, usb, 1, 1, 1);
diff --git a/sys/arm/econa/std.econa b/sys/arm/econa/std.econa
new file mode 100644
index 00000000000..660648da8c1
--- /dev/null
+++ b/sys/arm/econa/std.econa
@@ -0,0 +1,14 @@
+# $FreeBSD$
+
+files	"../econa/files.econa"
+cpu		CPU_FA526
+makeoptions	CONF_CFLAGS=-march=armv4
+options	PHYSADDR=0x00000000
+makeoptions	KERNPHYSADDR=0x01000000
+makeoptions	KERNVIRTADDR=0xc1000000
+
+options	KERNPHYSADDR=0x01000000
+options	KERNVIRTADDR=0xc1000000	# Used in ldscript.arm
+options	FLASHADDR=0xD0000000
+options	LOADERRAMADDR=0x00000000
+options	STARTUP_PAGETABLE_ADDR=0x00100000
diff --git a/sys/arm/econa/timer.c b/sys/arm/econa/timer.c
new file mode 100644
index 00000000000..e7cca790d2d
--- /dev/null
+++ b/sys/arm/econa/timer.c
@@ -0,0 +1,382 @@
+/*-
+ * Copyright (c) 2009 Yohanes Nugroho .
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "econa_reg.h"
+#include "econa_var.h"
+
+#define	INITIAL_TIMECOUNTER	(0xffffffff)
+
+static int timers_initialized = 0;
+
+#define	HZ	100
+
+extern unsigned int CPU_clock;
+extern unsigned int AHB_clock;
+extern unsigned int APB_clock;
+
+static unsigned long timer_counter = 0;
+
+struct ec_timer_softc {
+	struct resource	*	timer_res[3];
+	bus_space_tag_t		timer_bst;
+	bus_space_handle_t	timer_bsh;
+	struct mtx		timer_mtx;
+};
+
+static struct resource_spec ec_timer_spec[] = {
+	{ SYS_RES_MEMORY,	0,	RF_ACTIVE },
+	{ SYS_RES_IRQ,		0,	RF_ACTIVE },
+	{ SYS_RES_IRQ,		1,	RF_ACTIVE },
+	{ -1, 0 }
+};
+
+static unsigned ec_timer_get_timecount(struct timecounter *);
+
+static struct timecounter ec_timecounter = {
+	.tc_get_timecount = ec_timer_get_timecount,
+	.tc_name = "CPU Timer",
+	/* This is assigned on the fly in the init sequence */
+	.tc_frequency = 0,
+	.tc_counter_mask = ~0u,
+	.tc_quality = 1000,
+};
+
+static struct ec_timer_softc *timer_softc = NULL;
+
+static inline
+void write_4(unsigned int val, unsigned int addr)
+{
+	bus_space_write_4(timer_softc->timer_bst,
+			  timer_softc->timer_bsh, addr, val);
+
+}
+
+static inline
+unsigned int read_4(unsigned int addr)
+{
+
+	return bus_space_read_4(timer_softc->timer_bst,
+	    timer_softc->timer_bsh, addr);
+}
+
+#define	uSECS_PER_TICK	(1000000 / APB_clock)
+#define	TICKS2USECS(x)	((x) * uSECS_PER_TICK)
+
+static unsigned
+read_timer_counter_noint(void)
+{
+
+	arm_mask_irq(0);
+	unsigned int v = read_4(TIMER_TM1_COUNTER_REG);
+	arm_unmask_irq(0);
+	return v;
+}
+
+void
+DELAY(int usec)
+{
+	uint32_t val, val_temp;
+	int nticks;
+
+	if (!timers_initialized) {
+		for (; usec > 0; usec--)
+			for (val = 100; val > 0; val--)
+				;
+		return;
+	}
+
+	val = read_timer_counter_noint();
+	nticks = (((APB_clock / 1000) * usec) / 1000) + 100;
+
+	while (nticks > 0) {
+		val_temp = read_timer_counter_noint();
+		if (val > val_temp)
+			nticks -= (val - val_temp);
+		else
+			nticks -= (val + (timer_counter - val_temp));
+
+		val = val_temp;
+	}
+
+}
+
+/*
+ * Setup timer
+ */
+static inline void
+setup_timer(unsigned int counter_value)
+{
+	unsigned int control_value;
+	unsigned int mask_value;
+
+	control_value = read_4(TIMER_TM_CR_REG);
+
+	mask_value = read_4(TIMER_TM_INTR_MASK_REG);
+	write_4(counter_value, TIMER_TM1_COUNTER_REG);
+	write_4(counter_value, TIMER_TM1_LOAD_REG);
+	write_4(0, TIMER_TM1_MATCH1_REG);
+	write_4(0,TIMER_TM1_MATCH2_REG);
+
+	control_value &= ~(TIMER1_CLOCK_SOURCE);
+	control_value |= TIMER1_UP_DOWN_COUNT;
+
+	write_4(0, TIMER_TM2_COUNTER_REG);
+	write_4(0, TIMER_TM2_LOAD_REG);
+	write_4(~0u, TIMER_TM2_MATCH1_REG);
+	write_4(~0u,TIMER_TM2_MATCH2_REG);
+
+	control_value &= ~(TIMER2_CLOCK_SOURCE);
+	control_value &= ~(TIMER2_UP_DOWN_COUNT);
+
+	mask_value &= ~(63);
+
+	write_4(control_value, TIMER_TM_CR_REG);
+	write_4(mask_value, TIMER_TM_INTR_MASK_REG);
+}
+
+/*
+ * Enable timer
+ */
+static inline void
+timer_enable(void)
+{
+	unsigned int control_value;
+
+	control_value = read_4(TIMER_TM_CR_REG);
+
+	control_value |= TIMER1_OVERFLOW_ENABLE;
+	control_value |= TIMER1_ENABLE;
+	control_value |= TIMER2_OVERFLOW_ENABLE;
+	control_value |= TIMER2_ENABLE;
+
+	write_4(control_value, TIMER_TM_CR_REG);
+}
+
+static inline unsigned int
+read_second_timer_counter(void)
+{
+
+	return read_4(TIMER_TM2_COUNTER_REG);
+}
+
+/*
+ * Get timer interrupt status
+ */
+static inline unsigned int
+read_timer_interrupt_status(void)
+{
+
+	return read_4(TIMER_TM_INTR_STATUS_REG);
+}
+
+/*
+ * Clear timer interrupt status
+ */
+static inline void
+clear_timer_interrupt_status(unsigned int irq)
+{
+	unsigned int interrupt_status;
+
+	interrupt_status =   read_4(TIMER_TM_INTR_STATUS_REG);
+	if (irq == 0) {
+		if (interrupt_status & (TIMER1_MATCH1_INTR))
+			interrupt_status &= ~(TIMER1_MATCH1_INTR);
+		if (interrupt_status & (TIMER1_MATCH2_INTR))
+			interrupt_status &= ~(TIMER1_MATCH2_INTR);
+		if (interrupt_status & (TIMER1_OVERFLOW_INTR))
+			interrupt_status &= ~(TIMER1_OVERFLOW_INTR);
+	}
+	if (irq == 1) {
+		if (interrupt_status & (TIMER2_MATCH1_INTR))
+			interrupt_status &= ~(TIMER2_MATCH1_INTR);
+		if (interrupt_status & (TIMER2_MATCH2_INTR))
+			interrupt_status &= ~(TIMER2_MATCH2_INTR);
+		if (interrupt_status & (TIMER2_OVERFLOW_INTR))
+			interrupt_status &= ~(TIMER2_OVERFLOW_INTR);
+	}
+
+	write_4(interrupt_status, TIMER_TM_INTR_STATUS_REG);
+}
+
+static unsigned
+ec_timer_get_timecount(struct timecounter *a)
+{
+	unsigned int ticks1;
+	arm_mask_irq(1);
+	ticks1 = read_second_timer_counter();
+	arm_unmask_irq(1);
+	return ticks1;
+}
+
+/*
+ * Setup timer
+ */
+static inline void
+do_setup_timer(void)
+{
+
+	timer_counter = APB_clock/HZ;
+	/*
+	 * setup timer-related values
+	 */
+	setup_timer(timer_counter);
+}
+
+void
+cpu_initclocks(void)
+{
+
+	ec_timecounter.tc_frequency = APB_clock;
+	tc_init(&ec_timecounter);
+	timer_enable();
+	timers_initialized = 1;
+}
+
+void
+cpu_startprofclock(void)
+{
+
+}
+
+void
+cpu_stopprofclock(void)
+{
+
+}
+
+static int
+ec_timer_probe(device_t dev)
+{
+
+	device_set_desc(dev, "Econa CPU Timer");
+	return (0);
+}
+
+static int
+ec_reset(void *arg)
+{
+
+	arm_mask_irq(1);
+	clear_timer_interrupt_status(1);
+	arm_unmask_irq(1);
+	return (FILTER_HANDLED);
+}
+
+static int
+ec_hardclock(void *arg)
+{
+	struct	trapframe *frame;
+	unsigned int val;
+	/*clear timer interrupt status*/
+
+	arm_mask_irq(0);
+
+	val = read_4(TIMER_INTERRUPT_STATUS_REG);
+	val &= ~(TIMER1_OVERFLOW_INTERRUPT);
+	write_4(val, TIMER_INTERRUPT_STATUS_REG);
+
+	frame = (struct trapframe *)arg;
+	hardclock(TRAPF_USERMODE(frame), TRAPF_PC(frame));
+
+	arm_unmask_irq(0);
+
+	return (FILTER_HANDLED);
+}
+
+static int
+ec_timer_attach(device_t dev)
+{
+	struct	ec_timer_softc *sc;
+	int	error;
+	void	*ihl;
+
+
+	if (timer_softc != NULL)
+		return (ENXIO);
+
+	sc = (struct ec_timer_softc *)device_get_softc(dev);
+
+	timer_softc = sc;
+
+	error = bus_alloc_resources(dev, ec_timer_spec, sc->timer_res);
+	if (error) {
+		device_printf(dev, "could not allocate resources\n");
+		return (ENXIO);
+	}
+
+	sc->timer_bst = rman_get_bustag(sc->timer_res[0]);
+	sc->timer_bsh = rman_get_bushandle(sc->timer_res[0]);
+
+	do_setup_timer();
+
+	if (bus_setup_intr(dev, sc->timer_res[1], INTR_TYPE_CLK,
+	    ec_hardclock, NULL, NULL, &ihl) != 0) {
+		bus_release_resources(dev, ec_timer_spec, sc->timer_res);
+		device_printf(dev, "could not setup hardclock interrupt\n");
+		return (ENXIO);
+	}
+
+	if (bus_setup_intr(dev, sc->timer_res[2], INTR_TYPE_CLK,
+	    ec_reset, NULL, NULL, &ihl) != 0) {
+		bus_release_resources(dev, ec_timer_spec, sc->timer_res);
+		device_printf(dev, "could not setup timer interrupt\n");
+		return (ENXIO);
+	}
+
+	return (0);
+}
+
+static device_method_t ec_timer_methods[] = {
+	DEVMETHOD(device_probe, ec_timer_probe),
+	DEVMETHOD(device_attach, ec_timer_attach),
+	{ 0, 0 }
+};
+
+static driver_t ec_timer_driver = {
+	"timer",
+	ec_timer_methods,
+	sizeof(struct ec_timer_softc),
+};
+
+static devclass_t ec_timer_devclass;
+
+DRIVER_MODULE(timer, econaarm, ec_timer_driver, ec_timer_devclass, 0, 0);
diff --git a/sys/sys/semaphore.h b/sys/arm/econa/uart_bus_ec.c
similarity index 50%
rename from sys/sys/semaphore.h
rename to sys/arm/econa/uart_bus_ec.c
index 34ede7b2661..1a40e7f1be3 100644
--- a/sys/sys/semaphore.h
+++ b/sys/arm/econa/uart_bus_ec.c
@@ -1,6 +1,7 @@
 /*-
- * Copyright (c) 1996, 1997
- *	HD Associates, Inc.  All rights reserved.
+ * Copyright (C) 2009 Yohanes Nugroho 
+ * All rights reserved.
+ *
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -10,17 +11,14 @@
  * 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *	This product includes software developed by HD Associates, Inc
- * 4. Neither the name of the author nor the names of any co-contributors
+ * 3. Neither the name of MARVELL nor the names of contributors
  *    may be used to endorse or promote products derived from this software
  *    without specific prior written permission.
  *
- * THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR 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)
@@ -28,42 +26,54 @@
  * 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.
- *
- * $FreeBSD$
  */
 
-/* semaphore.h: POSIX 1003.1b semaphores */
-
-#ifndef _SEMAPHORE_H_
-#define _SEMAPHORE_H_
-
-#include 
-
-/* Opaque type definition. */
-struct sem;
-typedef	struct sem *	sem_t;
-
-#define	SEM_FAILED	((sem_t *)0)
-#define	SEM_VALUE_MAX	__INT_MAX
-
-#ifndef _KERNEL
 #include 
+__FBSDID("$FreeBSD$");
 
-struct timespec;
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
 
-__BEGIN_DECLS
-int	 sem_close(sem_t *);
-int	 sem_destroy(sem_t *);
-int	 sem_getvalue(sem_t * __restrict, int * __restrict);
-int	 sem_init(sem_t *, int, unsigned int);
-sem_t	*sem_open(const char *, int, ...);
-int	 sem_post(sem_t *);
-int	 sem_timedwait(sem_t * __restrict, const struct timespec * __restrict);
-int	 sem_trywait(sem_t *);
-int	 sem_unlink(const char *);
-int	 sem_wait(sem_t *);
-__END_DECLS
+#include 
+#include 
+#include 
 
-#endif
+#include 
+#include 
+#include 
 
-#endif /* !_SEMAPHORE_H_ */
+#include 
+
+static int uart_ec_probe(device_t dev);
+
+static device_method_t uart_ec_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_probe,	uart_ec_probe),
+	DEVMETHOD(device_attach,	uart_bus_attach),
+	DEVMETHOD(device_detach,	uart_bus_detach),
+	{ 0, 0 }
+};
+
+static driver_t uart_ec_driver = {
+	uart_driver_name,
+	uart_ec_methods,
+	sizeof(struct uart_softc),
+};
+
+static int
+uart_ec_probe(device_t dev)
+{
+	struct	uart_softc *sc;
+	int status;
+
+	sc = device_get_softc(dev);
+	sc->sc_class = &uart_ns8250_class;
+	status = uart_bus_probe(dev, EC_UART_REGSHIFT, EC_UART_CLOCK, 0, 0);
+	return (status);
+}
+
+DRIVER_MODULE(uart, econaarm, uart_ec_driver, uart_devclass, 0, 0);
diff --git a/sys/arm/econa/uart_cpu_ec.c b/sys/arm/econa/uart_cpu_ec.c
new file mode 100644
index 00000000000..3d42cda0f9e
--- /dev/null
+++ b/sys/arm/econa/uart_cpu_ec.c
@@ -0,0 +1,87 @@
+/*-
+ * Copyright (C) 2009 Yohanes Nugroho 
+ * All rights reserved.
+ *
+ * Developed by Semihalf.
+ *
+ * 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.
+ * 3. Neither the name of MARVELL nor the names of contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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 "opt_uart.h"
+
+#include 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+#include 
+
+#include 
+
+#include 
+#include 
+
+bus_space_tag_t uart_bus_space_io;
+bus_space_tag_t uart_bus_space_mem;
+
+int
+uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2)
+{
+
+	return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0);
+}
+
+int
+uart_cpu_getdev(int devtype, struct uart_devinfo *di)
+{
+	struct uart_class *class = &uart_ns8250_class;
+
+	di->ops = uart_getops(class);
+	di->bas.chan = 0;
+	di->bas.bst = obio_tag;
+
+	if (bus_space_map(di->bas.bst, ECONA_IO_BASE + ECONA_UART_BASE,
+	    ECONA_UART_SIZE,
+	    0, &di->bas.bsh) != 0) {
+		return (ENXIO);
+	}
+
+	di->baudrate = 0;
+	di->bas.regshft = EC_UART_REGSHIFT;
+	di->bas.rclk = EC_UART_CLOCK ;
+	di->databits = 8;
+	di->stopbits = 1;
+	di->parity = UART_PARITY_NONE;
+	uart_bus_space_mem = obio_tag;
+	uart_bus_space_io = NULL;
+
+	return (0);
+}
diff --git a/sys/arm/include/cpuconf.h b/sys/arm/include/cpuconf.h
index 458507a9265..942b5916933 100644
--- a/sys/arm/include/cpuconf.h
+++ b/sys/arm/include/cpuconf.h
@@ -61,6 +61,7 @@
 			 defined(CPU_XSCALE_80200) +			\
 			 defined(CPU_XSCALE_80321) +			\
 			 defined(CPU_XSCALE_PXA2X0) +			\
+			 defined(CPU_FA526) +				\
 			 defined(CPU_XSCALE_IXP425))
 
 /*
@@ -68,7 +69,7 @@
  */
 #if (defined(CPU_ARM7TDMI) || defined(CPU_ARM8) || defined(CPU_ARM9) ||	\
      defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) || \
-    defined(CPU_IXP12X0) || defined(CPU_XSCALE_IXP425))
+     defined(CPU_IXP12X0) || defined(CPU_XSCALE_IXP425) || defined(CPU_FA526))
 #define	ARM_ARCH_4	1
 #else
 #define	ARM_ARCH_4	0
@@ -125,7 +126,7 @@
 
 #if (defined(CPU_ARM6) || defined(CPU_ARM7) || defined(CPU_ARM7TDMI) ||	\
      defined(CPU_ARM8) || defined(CPU_ARM9) || defined(CPU_ARM9E) ||	\
-     defined(CPU_ARM10) || defined(CPU_ARM11))
+     defined(CPU_ARM10) || defined(CPU_ARM11) || defined(CPU_FA526))
 #define	ARM_MMU_GENERIC		1
 #else
 #define	ARM_MMU_GENERIC		0
diff --git a/sys/arm/include/cpufunc.h b/sys/arm/include/cpufunc.h
index 74f21e41188..84949668535 100644
--- a/sys/arm/include/cpufunc.h
+++ b/sys/arm/include/cpufunc.h
@@ -283,6 +283,28 @@ void	arm8_setup		(char *string);
 u_int	arm8_clock_config	(u_int, u_int);
 #endif
 
+
+#ifdef CPU_FA526
+void	fa526_setup		(char *arg);
+void	fa526_setttb		(u_int ttb);
+void	fa526_context_switch	(void);
+void	fa526_cpu_sleep		(int);
+void	fa526_tlb_flushI_SE	(u_int);
+void	fa526_tlb_flushID_SE	(u_int);
+void	fa526_flush_prefetchbuf	(void);
+void	fa526_flush_brnchtgt_E	(u_int);
+
+void	fa526_icache_sync_all	(void);
+void	fa526_icache_sync_range(vm_offset_t start, vm_size_t end);
+void	fa526_dcache_wbinv_all	(void);
+void	fa526_dcache_wbinv_range(vm_offset_t start, vm_size_t end);
+void	fa526_dcache_inv_range	(vm_offset_t start, vm_size_t end);
+void	fa526_dcache_wb_range	(vm_offset_t start, vm_size_t end);
+void	fa526_idcache_wbinv_all(void);
+void	fa526_idcache_wbinv_range(vm_offset_t start, vm_size_t end);
+#endif
+
+
 #ifdef CPU_SA110
 void	sa110_setup		(char *string);
 void	sa110_context_switch	(void);
@@ -445,6 +467,7 @@ extern unsigned armv5_dcache_index_inc;
 #if defined(CPU_ARM9) || defined(CPU_ARM9E) || defined(CPU_ARM10) || \
   defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) || \
   defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) ||	     \
+    defined(CPU_FA526) || \
   defined(CPU_XSCALE_PXA2X0) || defined(CPU_XSCALE_IXP425) ||	     \
   defined(CPU_XSCALE_80219) || defined(CPU_XSCALE_81342)
   
diff --git a/sys/arm/include/pmc_mdep.h b/sys/arm/include/pmc_mdep.h
index 9c719cbfa81..115d4fe1481 100644
--- a/sys/arm/include/pmc_mdep.h
+++ b/sys/arm/include/pmc_mdep.h
@@ -1,5 +1,27 @@
 /*-
- * This file is in the public domain.
+ * Copyright (c) 2009 Rui Paulo 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD$
  */
@@ -7,6 +29,14 @@
 #ifndef _MACHINE_PMC_MDEP_H_
 #define	_MACHINE_PMC_MDEP_H_
 
+#define	PMC_MDEP_CLASS_INDEX_XSCALE	0
+/*
+ * On the ARM platform we support the following PMCs.
+ *
+ * XSCALE	Intel XScale processors
+ */
+#include 
+
 union pmc_md_op_pmcallocate {
 	uint64_t	__pad[4];
 };
@@ -15,14 +45,20 @@ union pmc_md_op_pmcallocate {
 #define	PMCLOG_READADDR		PMCLOG_READ32
 #define	PMCLOG_EMITADDR		PMCLOG_EMIT32
 
-#if	_KERNEL
+#ifdef	_KERNEL
 union pmc_md_pmc {
+	struct pmc_md_xscale_pmc	pm_xscale;
 };
 
-#define	PMC_TRAPFRAME_TO_PC(TF)	(0)	/* Stubs */
-#define	PMC_TRAPFRAME_TO_FP(TF)	(0)
-#define	PMC_TRAPFRAME_TO_SP(TF)	(0)
+#define	PMC_TRAPFRAME_TO_PC(TF)	((TF)->tf_pc)
+#define	PMC_TRAPFRAME_TO_FP(TF)	((TF)->tf_usr_lr)
+#define	PMC_TRAPFRAME_TO_SP(TF)	((TF)->tf_usr_sp)
 
-#endif
+/*
+ * Prototypes
+ */
+struct pmc_mdep *pmc_xscale_initialize(void);
+void		pmc_xscale_finalize(struct pmc_mdep *_md);
+#endif /* _KERNEL */
 
 #endif /* !_MACHINE_PMC_MDEP_H_ */
diff --git a/sys/arm/mv/mv_sata.c b/sys/arm/mv/mv_sata.c
index 35939563c50..01713daa27c 100644
--- a/sys/arm/mv/mv_sata.c
+++ b/sys/arm/mv/mv_sata.c
@@ -136,7 +136,8 @@ static int	sata_channel_detach(device_t dev);
 static int	sata_channel_begin_transaction(struct ata_request *request);
 static int	sata_channel_end_transaction(struct ata_request *request);
 static int	sata_channel_status(device_t dev);
-static void	sata_channel_setmode(device_t parent, device_t dev);
+static int	sata_channel_setmode(device_t dev, int target, int mode);
+static int	sata_channel_getrev(device_t dev, int target);
 static void	sata_channel_reset(device_t dev);
 static void	sata_channel_dmasetprd(void *xsc, bus_dma_segment_t *segs,
     int nsegs, int error);
@@ -423,7 +424,7 @@ sata_channel_attach(device_t dev)
 
 	ch->dev = dev;
 	ch->unit = device_get_unit(dev);
-	ch->flags |= ATA_USE_16BIT | ATA_NO_SLAVE;
+	ch->flags |= ATA_USE_16BIT | ATA_NO_SLAVE | ATA_SATA;
 
 	/* Set legacy ATA resources. */
 	for (i = ATA_DATA; i <= ATA_COMMAND; i++) {
@@ -748,19 +749,22 @@ sata_channel_reset(device_t dev)
 	SATA_OUTL(sc, SATA_EDMA_IEMR(ch->unit), 0xFFFFFFFF);
 }
 
-static void
-sata_channel_setmode(device_t parent, device_t dev)
+static int
+sata_channel_setmode(device_t parent, int target, int mode)
 {
-	struct ata_device *atadev;
-
-	atadev = device_get_softc(dev);
 
 	/* Disable EDMA before using legacy registers */
 	sata_edma_ctrl(parent, 0);
+	return (ata_sata_setmode(parent, target, mode));
+}
 
-	ata_sata_setmode(dev, ATA_PIO_MAX);
-	if (atadev->mode >= ATA_DMA)
-		ata_sata_setmode(dev, atadev->mode);
+static int
+sata_channel_getrev(device_t parent, int target)
+{
+
+	/* Disable EDMA before using legacy registers */
+	sata_edma_ctrl(parent, 0);
+	return (ata_sata_getrev(parent, target));
 }
 
 static void
@@ -849,6 +853,7 @@ static device_method_t sata_channel_methods[] = {
 	/* ATA channel interface */
 	DEVMETHOD(ata_reset,		sata_channel_reset),
 	DEVMETHOD(ata_setmode,		sata_channel_setmode),
+	DEVMETHOD(ata_getrev,		sata_channel_getrev),
 	{ 0, 0 }
 };
 
diff --git a/sys/arm/xscale/ixp425/files.ixp425 b/sys/arm/xscale/ixp425/files.ixp425
index 2ac7aca83ae..13d5f52a542 100644
--- a/sys/arm/xscale/ixp425/files.ixp425
+++ b/sys/arm/xscale/ixp425/files.ixp425
@@ -16,6 +16,7 @@ arm/xscale/ixp425/uart_bus_ixp425.c	optional	uart
 arm/xscale/ixp425/ixp425_a4x_space.c	optional	uart
 arm/xscale/ixp425/ixp425_a4x_io.S	optional	uart
 dev/cfi/cfi_bus_ixp4xx.c		optional	cfi
+dev/hwpmc/hwpmc_xscale.c		optional	hwpmc
 dev/uart/uart_dev_ns8250.c		optional	uart
 #
 # NPE-based Ethernet support (requires qmgr also).
diff --git a/sys/boot/Makefile b/sys/boot/Makefile
index 02c767df0d2..056dc68d6c4 100644
--- a/sys/boot/Makefile
+++ b/sys/boot/Makefile
@@ -22,7 +22,7 @@ SUBDIR+=		ofw
 SUBDIR+=		uboot
 .endif
 
-.if defined(LOADER_ZFS_SUPPORT)
+.if ${MACHINE_ARCH} == "amd64" || ${MACHINE} == "i386"
 SUBDIR+=		zfs
 .endif
 
diff --git a/sys/boot/common/Makefile.inc b/sys/boot/common/Makefile.inc
index 9ede3866fb3..bb0d1209860 100644
--- a/sys/boot/common/Makefile.inc
+++ b/sys/boot/common/Makefile.inc
@@ -23,6 +23,11 @@ SRCS+=	dev_net.c
 SRCS+=  bcache.c
 .endif
 
+.if defined(MD_IMAGE_SIZE)
+CFLAGS+= -DMD_IMAGE_SIZE=${MD_IMAGE_SIZE}
+SRCS+=	md.c
+.endif
+
 # Machine-independant ISA PnP
 .if defined(HAVE_ISABUS)
 SRCS+=	isapnp.c
@@ -38,4 +43,8 @@ MAN+=	../forth/loader.conf.5
 MAN+=	../forth/loader.4th.8
 .endif
 
+.if defined(BOOT_PROMPT_123)
+CFLAGS+=	-DBOOT_PROMPT_123
+.endif
+
 MAN+=	loader.8
diff --git a/sys/boot/common/boot.c b/sys/boot/common/boot.c
index 315c039b466..c6ab6812da7 100644
--- a/sys/boot/common/boot.c
+++ b/sys/boot/common/boot.c
@@ -162,6 +162,9 @@ autoboot(int timeout, char *prompt)
     int		c, yes;
     char	*argv[2], *cp, *ep;
     char	*kernelname;
+#ifdef BOOT_PROMPT_123
+    const char	*seq = "123", *p = seq;
+#endif
 
     autoboot_tried = 1;
 
@@ -192,14 +195,29 @@ autoboot(int timeout, char *prompt)
 
         yes = 0;
 
+#ifdef BOOT_PROMPT_123
+        printf("%s\n", (prompt == NULL) ? "Hit [Enter] to boot immediately, or "
+	    "1 2 3 sequence for command prompt." : prompt);
+#else
         printf("%s\n", (prompt == NULL) ? "Hit [Enter] to boot immediately, or any other key for command prompt." : prompt);
+#endif
 
         for (;;) {
 	    if (ischar()) {
 	        c = getchar();
+#ifdef BOOT_PROMPT_123
+		if ((c == '\r') || (c == '\n')) {
+			yes = 1;
+			break;
+		} else if (c != *p++)
+			p = seq;
+		if (*p == 0)
+			break;
+#else
 	        if ((c == '\r') || (c == '\n'))
 		    yes = 1;
 	        break;
+#endif
 	    }
 	    ntime = time(NULL);
 	    if (ntime >= when) {
diff --git a/sys/boot/common/dev_net.c b/sys/boot/common/dev_net.c
index 5dc1dc33fe4..0101ce1f825 100644
--- a/sys/boot/common/dev_net.c
+++ b/sys/boot/common/dev_net.c
@@ -76,7 +76,9 @@ __FBSDID("$FreeBSD$");
 #include "dev_net.h"
 #include "bootstrap.h"
 
+#ifdef	NETIF_DEBUG
 int debug = 0;
+#endif
 
 static int netdev_sock = -1;
 static int netdev_opens;
@@ -100,7 +102,7 @@ struct devsw netdev = {
 	net_print
 };
 
-int
+static int
 net_init(void)
 {
 
@@ -112,7 +114,7 @@ net_init(void)
  * This opens the low-level device and sets f->f_devdata.
  * This is declared with variable arguments...
  */
-int
+static int
 net_open(struct open_file *f, ...)
 {
 	va_list args;
@@ -132,8 +134,10 @@ net_open(struct open_file *f, ...)
 				printf("net_open: netif_open() failed\n");
 				return (ENXIO);
 			}
+#ifdef	NETIF_DEBUG
 			if (debug)
-			printf("net_open: netif_open() succeeded\n");
+				printf("net_open: netif_open() succeeded\n");
+#endif
 		}
 		if (rootip.s_addr == 0) {
 			/* Get root IP address, and path, etc. */
@@ -154,7 +158,7 @@ net_open(struct open_file *f, ...)
 	return (error);
 }
 
-int
+static int
 net_close(struct open_file *f)
 {
 #ifdef	NETIF_DEBUG
@@ -173,15 +177,17 @@ net_close(struct open_file *f)
 		return(0);
 	rootip.s_addr = 0;
 	if (netdev_sock >= 0) {
+#ifdef	NETIF_DEBUG
 		if (debug)
 			printf("net_close: calling netif_close()\n");
+#endif
 		netif_close(netdev_sock);
 		netdev_sock = -1;
 	}
 	return (0);
 }
 
-int
+static int
 net_strategy()
 {
 
@@ -227,8 +233,10 @@ net_getparams(int sock)
 		bootp(sock, BOOTP_NONE);
 	if (myip.s_addr != 0)
 		goto exit;
+#ifdef	NETIF_DEBUG
 	if (debug)
 		printf("net_open: BOOTP failed, trying RARP/RPC...\n");
+#endif
 #endif
 
 	/*
@@ -246,8 +254,10 @@ net_getparams(int sock)
 		printf("net_open: bootparam/whoami RPC failed\n");
 		return (EIO);
 	}
+#ifdef	NETIF_DEBUG
 	if (debug)
 		printf("net_open: client name: %s\n", hostname);
+#endif
 
 	/*
 	 * Ignore the gateway from whoami (unreliable).
@@ -261,11 +271,15 @@ net_getparams(int sock)
 	}
 	if (smask) {
 		netmask = smask;
+#ifdef	NETIF_DEBUG
 		if (debug)
-		printf("net_open: subnet mask: %s\n", intoa(netmask));
+			printf("net_open: subnet mask: %s\n", intoa(netmask));
+#endif
 	}
+#ifdef	NETIF_DEBUG
 	if (gateip.s_addr && debug)
 		printf("net_open: net gateway: %s\n", inet_ntoa(gateip));
+#endif
 
 	/* Get the root server and pathname. */
 	if (bp_getfile(sock, "root", &rootip, rootpath)) {
@@ -288,10 +302,12 @@ exit:
 		bcopy(&rootpath[i], &temp[0], strlen(&rootpath[i])+1);
 		bcopy(&temp[0], &rootpath[0], strlen(&rootpath[i])+1);
 	}
+#ifdef	NETIF_DEBUG
 	if (debug) {
 		printf("net_open: server addr: %s\n", inet_ntoa(rootip));
 		printf("net_open: server path: %s\n", rootpath);
 	}
+#endif
 
 	d = socktodesc(sock);
 	sprintf(temp, "%6D", d->myea, ":");
diff --git a/sys/boot/common/md.c b/sys/boot/common/md.c
new file mode 100644
index 00000000000..6d2d2b45574
--- /dev/null
+++ b/sys/boot/common/md.c
@@ -0,0 +1,151 @@
+/*-
+ * Copyright (c) 2009 Marcel Moolenaar
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "bootstrap.h"
+
+#define	MD_BLOCK_SIZE	512
+
+#ifndef MD_IMAGE_SIZE
+#error Must be compiled with MD_IMAGE_SIZE defined
+#endif
+#if (MD_IMAGE_SIZE == 0 || MD_IMAGE_SIZE % MD_BLOCK_SIZE)
+#error Image size must be a multiple of 512.
+#endif
+
+/*
+ * Preloaded image gets put here.
+ * Applications that patch the object with the image can determine
+ * the size looking at the start and end markers (strings),
+ * so we want them contiguous.
+ */
+static struct {
+	u_char start[MD_IMAGE_SIZE];
+	u_char end[128];
+} md_image = {
+	.start = "MFS Filesystem goes here",
+	.end = "MFS Filesystem had better STOP here",
+};
+
+/* devsw I/F */
+static int md_init(void);
+static int md_strategy(void *, int, daddr_t, size_t, char *, size_t *);
+static int md_open(struct open_file *, ...);
+static int md_close(struct open_file *);
+static void md_print(int);
+
+struct devsw md_dev = {
+	"md",
+	DEVT_DISK,
+	md_init,
+	md_strategy,
+	md_open,
+	md_close,
+	noioctl,
+	md_print
+};
+
+static int
+md_init(void)
+{
+
+	return (0);
+}
+
+static int
+md_strategy(void *devdata, int rw, daddr_t blk, size_t size, char *buf,
+    size_t *rsize)
+{
+	struct devdesc *dev = (struct devdesc *)devdata;
+	size_t ofs;
+
+	if (dev->d_unit != 0)
+		return (ENXIO);
+
+	if (blk < 0 || blk >= (MD_IMAGE_SIZE / MD_BLOCK_SIZE))
+		return (EIO);
+
+	if (size % MD_BLOCK_SIZE)
+		return (EIO);
+
+	ofs = blk * MD_BLOCK_SIZE;
+	if ((ofs + size) > MD_IMAGE_SIZE)
+		size = MD_IMAGE_SIZE - ofs;
+
+	if (rsize != 0)
+		*rsize = size;
+
+	switch (rw) {
+	case F_READ:
+		bcopy(md_image.start + ofs, buf, size);
+		return (0);
+	case F_WRITE:
+		bcopy(buf, md_image.start + ofs, size);
+		return (0);
+	}
+
+	return (ENODEV);
+}
+
+static int
+md_open(struct open_file *f, ...)
+{
+	va_list ap;
+	struct devdesc *dev;
+
+	va_start(ap, f);
+	dev = va_arg(ap, struct devdesc *);
+	va_end(ap);
+
+	if (dev->d_unit != 0)
+		return (ENXIO);
+
+	return (0);
+}
+
+static int
+md_close(struct open_file *f)
+{
+	struct devdesc *dev;
+
+	dev = (struct devdesc *)(f->f_devdata);
+	return ((dev->d_unit != 0) ? ENXIO : 0);
+}
+
+static void
+md_print(int verbose)
+{
+
+	printf("MD (%u bytes)\n", MD_IMAGE_SIZE);
+}
diff --git a/sys/boot/common/module.c b/sys/boot/common/module.c
index 098e39ad938..18ba1b550e2 100644
--- a/sys/boot/common/module.c
+++ b/sys/boot/common/module.c
@@ -351,6 +351,9 @@ file_loadraw(char *type, char *name)
     char			*cp;
     int				fd, got;
     vm_offset_t			laddr;
+#ifdef PC98
+    struct stat			st;
+#endif
 
     /* We can't load first */
     if ((file_findfile(NULL, NULL)) == NULL) {
@@ -372,6 +375,14 @@ file_loadraw(char *type, char *name)
 	return(CMD_ERROR);
     }
 
+#ifdef PC98
+    /* We cannot use 15M-16M area on pc98. */
+    if (loadaddr < 0x1000000 &&
+	fstat(fd, &st) == 0 &&
+	(st.st_size == -1 || loadaddr + st.st_size > 0xf00000))
+	loadaddr = 0x1000000;
+#endif
+
     laddr = loadaddr;
     for (;;) {
 	/* read in 4k chunks; size is not really important */
@@ -477,6 +488,14 @@ mod_loadkld(const char *kldname, int argc, char *argv[])
 	;
 
     do {
+#ifdef PC98
+	/* We cannot use 15M-16M area on pc98. */
+	struct stat st;
+	if (loadaddr < 0x1000000 &&
+	    stat(filename, &st) == 0 &&
+	    (st.st_size == -1 || loadaddr + st.st_size > 0xf00000))
+	    loadaddr = 0x1000000;
+#endif
 	err = file_load(filename, loadaddr, &fp);
 	if (err)
 	    break;
diff --git a/sys/boot/forth/loader.conf.5 b/sys/boot/forth/loader.conf.5
index b7e8af26d24..df2183f1c41 100644
--- a/sys/boot/forth/loader.conf.5
+++ b/sys/boot/forth/loader.conf.5
@@ -180,10 +180,15 @@ serial port speed setting.
 .Dq comconsole
 selects serial console,
 .Dq vidconsole
-selects the video console, and
+selects the video console,
 .Dq nullconsole
 selects a mute console
-(useful for systems with neither a video console nor a serial port).
+(useful for systems with neither a video console nor a serial port), and
+.Dq spinconsole
+selects the video console which prevents any input and hides all output
+replacing it with
+.Dq spinning
+character (useful for embedded products and such).
 .It Va kernel
 .Pq Dq Pa /boot/kernel/kernel
 .It Va loader_conf_files
diff --git a/sys/boot/i386/Makefile b/sys/boot/i386/Makefile
index 912714fe2a2..3c05759fcf0 100644
--- a/sys/boot/i386/Makefile
+++ b/sys/boot/i386/Makefile
@@ -1,9 +1,15 @@
 # $FreeBSD$
 
-SUBDIR=		mbr pmbr boot0 boot0sio btx boot2 cdboot gptboot zfsboot \
-		gptzfsboot kgzldr libi386 libfirewire loader
+.include 
+
+SUBDIR=		mbr pmbr boot0 boot0sio btx boot2 cdboot gptboot kgzldr \
+		libi386 libfirewire loader
 
 # special boot programs, 'self-extracting boot2+loader'
 SUBDIR+=	pxeldr
 
+.if ${MK_ZFS} != "no"
+SUBDIR+=	zfsboot gptzfsboot zfsloader
+.endif
+
 .include 
diff --git a/sys/boot/i386/gptboot/gptboot.c b/sys/boot/i386/gptboot/gptboot.c
index 89df2ecb104..96efea6a1d5 100644
--- a/sys/boot/i386/gptboot/gptboot.c
+++ b/sys/boot/i386/gptboot/gptboot.c
@@ -642,8 +642,8 @@ bcmp(const void *b1, const void *b2, size_t length)
 static struct {
 	uint16_t len;
 	uint16_t count;
-	uint16_t seg;
 	uint16_t off;
+	uint16_t seg;
 	uint64_t lba;
 } packet;
 
@@ -656,8 +656,8 @@ drvread(void *buf, daddr_t lba, unsigned nblk)
 	printf("%c\b", c = c << 8 | c >> 24);
     packet.len = 0x10;
     packet.count = nblk;
-    packet.seg = VTOPOFF(buf);
-    packet.off = VTOPSEG(buf);
+    packet.off = VTOPOFF(buf);
+    packet.seg = VTOPSEG(buf);
     packet.lba = lba;
     v86.ctl = V86_FLAGS;
     v86.addr = 0x13;
diff --git a/sys/boot/i386/libi386/Makefile b/sys/boot/i386/libi386/Makefile
index c1bbb52c80b..f1a461a88c4 100644
--- a/sys/boot/i386/libi386/Makefile
+++ b/sys/boot/i386/libi386/Makefile
@@ -8,7 +8,7 @@ SRCS=	biosacpi.c bioscd.c biosdisk.c biosmem.c biospnp.c \
 	comconsole.c devicename.c elf32_freebsd.c \
 	elf64_freebsd.c \
 	i386_copy.c i386_module.c nullconsole.c pxe.c pxetramp.s \
-	smbios.c time.c vidconsole.c amd64_tramp.S
+	smbios.c time.c vidconsole.c amd64_tramp.S spinconsole.c
 
 # Enable PXE TFTP or NFS support, not both.
 .if defined(LOADER_TFTP_SUPPORT)
diff --git a/sys/boot/i386/libi386/biosacpi.c b/sys/boot/i386/libi386/biosacpi.c
index 081598394ea..e9e2436b47c 100644
--- a/sys/boot/i386/libi386/biosacpi.c
+++ b/sys/boot/i386/libi386/biosacpi.c
@@ -125,10 +125,8 @@ biosacpi_search_rsdp(char *base, int length)
 	    sum = 0;
 	    for (idx = 0; idx < RSDP_CHECKSUM_LENGTH; idx++)
 		sum += *(cp + idx);
-	    if (sum != 0) {
-		printf("acpi: bad RSDP checksum (%d)\n", sum);
+	    if (sum != 0)
 		continue;
-	    }
 	    return(rsdp);
 	}
     }
diff --git a/sys/boot/i386/libi386/biosdisk.c b/sys/boot/i386/libi386/biosdisk.c
index 7e1fa19369d..cf0b03353ea 100644
--- a/sys/boot/i386/libi386/biosdisk.c
+++ b/sys/boot/i386/libi386/biosdisk.c
@@ -1266,11 +1266,11 @@ bd_io(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest, int write)
 	}
 
 	if (write)
-	    DEBUG("%d sectors from %lld to %p (0x%x) %s", x, dblk, p, VTOP(p),
-		result ? "failed" : "ok");
+	    DEBUG("Write %d sector(s) from %p (0x%x) to %lld %s", x,
+		p, VTOP(p), dblk, result ? "failed" : "ok");
 	else
-	    DEBUG("%d sectors from %p (0x%x) to %lld %s", x, p, VTOP(p), dblk,
-		result ? "failed" : "ok");
+	    DEBUG("Read %d sector(s) from %lld to %p (0x%x) %s", x,
+		dblk, p, VTOP(p), result ? "failed" : "ok");
 	if (result) {
 	    return(-1);
 	}
diff --git a/sys/boot/i386/libi386/biosmem.c b/sys/boot/i386/libi386/biosmem.c
index 3c2205ed46c..bae68131b87 100644
--- a/sys/boot/i386/libi386/biosmem.c
+++ b/sys/boot/i386/libi386/biosmem.c
@@ -35,14 +35,20 @@ __FBSDID("$FreeBSD$");
 #include "libi386.h"
 #include "btxv86.h"
 
-vm_offset_t	memtop, memtop_copyin;
-u_int32_t	bios_basemem, bios_extmem;
+vm_offset_t	memtop, memtop_copyin, high_heap_base;
+uint32_t	bios_basemem, bios_extmem, high_heap_size;
 
 static struct bios_smap smap;
 
+/*
+ * The minimum amount of memory to reserve in bios_extmem for the heap.
+ */
+#define	HEAP_MIN	(3 * 1024 * 1024)
+
 void
 bios_getmem(void)
 {
+    uint64_t size;
 
     /* Parse system memory map */
     v86.ebx = 0;
@@ -65,6 +71,26 @@ bios_getmem(void)
 	if ((smap.type == SMAP_TYPE_MEMORY) && (smap.base == 0x100000)) {
 	    bios_extmem = smap.length;
 	}
+
+	/*
+	 * Look for the largest segment in 'extended' memory beyond
+	 * 1MB but below 4GB.
+	 */
+	if ((smap.type == SMAP_TYPE_MEMORY) && (smap.base > 0x100000) &&
+	    (smap.base < 0x100000000ull)) {
+	    size = smap.length;
+
+	    /*
+	     * If this segment crosses the 4GB boundary, truncate it.
+	     */
+	    if (smap.base + size > 0x100000000ull)
+		size = 0x100000000ull - smap.base;
+
+	    if (size > high_heap_size) {
+		high_heap_size = size;
+		high_heap_base = smap.base;
+	    }
+	}
     } while (v86.ebx != 0);
 
     /* Fall back to the old compatibility function for base memory */
@@ -97,5 +123,13 @@ bios_getmem(void)
     /* Set memtop to actual top of memory */
     memtop = memtop_copyin = 0x100000 + bios_extmem;
 
+    /*
+     * If we have extended memory and did not find a suitable heap
+     * region in the SMAP, use the last 3MB of 'extended' memory as a
+     * high heap candidate.
+     */
+    if (bios_extmem >= HEAP_MIN && high_heap_size < HEAP_MIN) {
+	high_heap_size = HEAP_MIN;
+	high_heap_base = memtop - HEAP_MIN;
+    }
 }    
-
diff --git a/sys/boot/i386/libi386/elf32_freebsd.c b/sys/boot/i386/libi386/elf32_freebsd.c
index 5f66622add9..641e2733c3a 100644
--- a/sys/boot/i386/libi386/elf32_freebsd.c
+++ b/sys/boot/i386/libi386/elf32_freebsd.c
@@ -59,7 +59,7 @@ elf32_exec(struct preloaded_file *fp)
     int				boothowto, err, bootdev;
 
     if ((md = file_findmetadata(fp, MODINFOMD_ELFHDR)) == NULL)
-	return(EFTYPE);			/* XXX actually EFUCKUP */
+	return(EFTYPE);
     ehdr = (Elf_Ehdr *)&(md->md_data);
 
     err = bi_load32(fp->f_args, &boothowto, &bootdev, &bootinfop, &modulep, &kernend);
diff --git a/sys/boot/i386/libi386/elf64_freebsd.c b/sys/boot/i386/libi386/elf64_freebsd.c
index 8fb13b74a37..627d41624a3 100644
--- a/sys/boot/i386/libi386/elf64_freebsd.c
+++ b/sys/boot/i386/libi386/elf64_freebsd.c
@@ -78,7 +78,7 @@ elf64_exec(struct preloaded_file *fp)
     int				i;
 
     if ((md = file_findmetadata(fp, MODINFOMD_ELFHDR)) == NULL)
-	return(EFTYPE);			/* XXX actually EFUCKUP */
+	return(EFTYPE);
     ehdr = (Elf_Ehdr *)&(md->md_data);
 
     err = bi_load64(fp->f_args, &modulep, &kernend);
diff --git a/sys/boot/i386/libi386/libi386.h b/sys/boot/i386/libi386/libi386.h
index 4ac5cb569fb..ebf1b4ce949 100644
--- a/sys/boot/i386/libi386/libi386.h
+++ b/sys/boot/i386/libi386/libi386.h
@@ -78,9 +78,9 @@ int	bc_add(int biosdev);		/* Register CD booted from. */
 int	bc_getdev(struct i386_devdesc *dev);	/* return dev_t for (dev) */
 int	bc_bios2unit(int biosdev);	/* xlate BIOS device -> bioscd unit */
 int	bc_unit2bios(int unit);		/* xlate bioscd unit -> BIOS device */
-u_int32_t	bd_getbigeom(int bunit);	/* return geometry in bootinfo format */
-int	bd_bios2unit(int biosdev);		/* xlate BIOS device -> biosdisk unit */
-int	bd_unit2bios(int unit);			/* xlate biosdisk unit -> BIOS device */
+uint32_t bd_getbigeom(int bunit);	/* return geometry in bootinfo format */
+int	bd_bios2unit(int biosdev);	/* xlate BIOS device -> biosdisk unit */
+int	bd_unit2bios(int unit);		/* xlate biosdisk unit -> BIOS device */
 int	bd_getdev(struct i386_devdesc *dev);	/* return dev_t for (dev) */
 
 ssize_t	i386_copyin(const void *src, vm_offset_t dest, const size_t len);
@@ -92,12 +92,15 @@ void	bios_addsmapdata(struct preloaded_file *);
 void	bios_getsmap(void);
 
 void	bios_getmem(void);
-extern u_int32_t	bios_basemem;				/* base memory in bytes */
-extern u_int32_t	bios_extmem;				/* extended memory in bytes */
+extern uint32_t		bios_basemem;	/* base memory in bytes */
+extern uint32_t		bios_extmem;	/* extended memory in bytes */
 extern vm_offset_t	memtop;		/* last address of physical memory + 1 */
 extern vm_offset_t	memtop_copyin;	/* memtop less heap size for the cases */
-					/*  when heap is at the top of extended memory */
-					/*  for other cases - just the same as memtop */
+					/*  when heap is at the top of         */
+					/*  extended memory; for other cases   */
+					/*  just the same as memtop            */
+extern uint32_t		high_heap_size;	/* extended memory region available */
+extern vm_offset_t	high_heap_base;	/* for use as the heap */
 
 int biospci_find_devclass(uint32_t class, int index, uint32_t *locator);
 int biospci_write_config(uint32_t locator, int offset, int width, uint32_t val);
diff --git a/sys/boot/i386/libi386/spinconsole.c b/sys/boot/i386/libi386/spinconsole.c
new file mode 100644
index 00000000000..752c29f5d4d
--- /dev/null
+++ b/sys/boot/i386/libi386/spinconsole.c
@@ -0,0 +1,106 @@
+/*-
+ * spinconsole.c
+ *
+ * Author: Maksym Sobolyev 
+ * Copyright (c) 2009 Sippy Software, Inc.
+ * All rights reserved.
+ * 
+ * Subject to the following obligations and disclaimer of warranty, use and
+ * redistribution of this software, in source or object code forms, with or
+ * without modifications are expressly permitted by Whistle Communications;
+ * provided, however, that:
+ * 1. Any and all reproductions of the source or object code must include the
+ *    copyright notice above and the following disclaimer of warranties; and
+ * 2. No rights are granted, in any manner or form, to use Whistle
+ *    Communications, Inc. trademarks, including the mark "WHISTLE
+ *    COMMUNICATIONS" on advertising, endorsements, or otherwise except as
+ *    such appears in the above copyright notice or in the software.
+ * 
+ * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND
+ * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO
+ * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE,
+ * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
+ * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY
+ * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS
+ * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE.
+ * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES
+ * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING
+ * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+ * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER 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 WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY
+ * OF SUCH DAMAGE.
+ */
+
+#include 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+
+extern void get_pos(int *x, int *y);
+extern void curs_move(int *_x, int *_y, int x, int y);
+extern void vidc_biosputchar(int c);
+
+static void	spinc_probe(struct console *cp);
+static int	spinc_init(int arg);
+static void	spinc_putchar(int c);
+static int	spinc_getchar(void);
+static int	spinc_ischar(void);
+
+struct console spinconsole = {
+	"spinconsole",
+	"spin port",
+	0,
+	spinc_probe,
+	spinc_init,
+	spinc_putchar,
+	spinc_getchar,
+	spinc_ischar
+};
+
+static void
+spinc_probe(struct console *cp)
+{
+	cp->c_flags |= (C_PRESENTIN | C_PRESENTOUT);
+}
+
+static int
+spinc_init(int arg)
+{
+	return(0);
+}
+
+static void
+spinc_putchar(int c)
+{
+	static int curx, cury;
+	static unsigned tw_chars = 0x5C2D2F7C;    /* "\-/|" */
+	static time_t lasttime;
+	time_t now;
+
+	now = time(NULL);
+	if (now < (lasttime + 1))
+		return;
+	lasttime = now;
+	get_pos(&curx, &cury);
+	if (curx > 0)
+		curs_move(&curx, &cury, curx - 1, cury);
+	vidc_biosputchar((char)tw_chars);
+	tw_chars = (tw_chars >> 8) | ((tw_chars & (unsigned long)0xFF) << 24);
+}
+
+static int
+spinc_getchar(void)
+{
+	return(-1);
+}
+
+static int
+spinc_ischar(void)
+{
+	return(0);
+}
diff --git a/sys/boot/i386/libi386/vidconsole.c b/sys/boot/i386/libi386/vidconsole.c
index 1f411006e0a..1b1e6488455 100644
--- a/sys/boot/i386/libi386/vidconsole.c
+++ b/sys/boot/i386/libi386/vidconsole.c
@@ -57,8 +57,8 @@ static int	vidc_started;
 void		end_term(void);
 void		bail_out(int c);
 void		vidc_term_emu(int c);
-void		get_pos(void);
-void		curs_move(int x, int y);
+void		get_pos(int *x, int *y);
+void		curs_move(int *_x, int *_y, int x, int y);
 void		write_char(int c, int fg, int bg);
 void		scroll_up(int rows, int fg, int bg);
 void		CD(void);
@@ -110,8 +110,8 @@ vidc_init(int arg)
 #ifdef TERM_EMU
     /* Init terminal emulator */
     end_term();
-    get_pos();
-    curs_move(curx, cury);
+    get_pos(&curx, &cury);
+    curs_move(&curx, &cury, curx, cury);
     fg_c = DEFAULT_FGCOLOR;
     bg_c = DEFAULT_BGCOLOR;
 #endif
@@ -120,7 +120,7 @@ vidc_init(int arg)
     return (0);	/* XXX reinit? */
 }
 
-static void
+void
 vidc_biosputchar(int c)
 {
 
@@ -151,7 +151,7 @@ vidc_rawputchar(int c)
 	    return;
 	case '\r':
 	    curx = 0;
-	    curs_move(curx, cury);
+	    curs_move(&curx, &cury, curx, cury);
 	    return;
 	case '\n':
 	    cury++;
@@ -159,13 +159,13 @@ vidc_rawputchar(int c)
 		scroll_up(1, fg_c, bg_c);
 		cury--;
 	    } else {
-		curs_move(curx, cury);
+		curs_move(&curx, &cury, curx, cury);
 	    }
 	    return;
 	case '\b':
 	    if (curx > 0) {
 		curx--;
-		curs_move(curx, cury);
+		curs_move(&curx, &cury, curx, cury);
 		/* write_char(' ', fg_c, bg_c); XXX destructive(!) */
 		return;
 	    }
@@ -183,7 +183,7 @@ vidc_rawputchar(int c)
 		cury--;
 	    }
 	}
-	curs_move(curx, cury);
+	curs_move(&curx, &cury, curx, cury);
 #endif
     }
 }
@@ -194,7 +194,7 @@ vidc_rawputchar(int c)
  * curx and cury appropriately.
  */
 void
-get_pos(void)
+get_pos(int *x, int *y)
 {
 
     v86.ctl = 0;
@@ -202,13 +202,13 @@ get_pos(void)
     v86.eax = 0x0300;
     v86.ebx = 0x0;
     v86int();
-    curx = v86.edx & 0x00ff;
-    cury = (v86.edx & 0xff00) >> 8;
+    *x = v86.edx & 0x00ff;
+    *y = (v86.edx & 0xff00) >> 8;
 }
 
 /* Move cursor to x rows and y cols (0-based). */
 void
-curs_move(int x, int y)
+curs_move(int *_x, int *_y, int x, int y)
 {
 
     v86.ctl = 0;
@@ -217,8 +217,8 @@ curs_move(int x, int y)
     v86.ebx = 0x0;
     v86.edx = ((0x00ff & y) << 8) + (0x00ff & x);
     v86int();
-    curx = x;
-    cury = y;
+    *_x = x;
+    *_y = y;
     /* If there is ctrl char at this position, cursor would be invisible.
      * Make it a space instead.
      */
@@ -277,7 +277,7 @@ void
 CD(void)
 {
 
-    get_pos();
+    get_pos(&curx, &cury);
     if (curx > 0) {
 	v86.ctl = 0;
 	v86.addr = 0x10;
@@ -312,7 +312,7 @@ CM(void)
 	args[0]--;
     if (args[1] > 0)
 	args[1]--;
-    curs_move(args[1], args[0]);
+    curs_move(&curx, &cury, args[1], args[0]);
     end_term();
 }
 
diff --git a/sys/boot/i386/loader/Makefile b/sys/boot/i386/loader/Makefile
index 8f3480ae241..719e28dd73a 100644
--- a/sys/boot/i386/loader/Makefile
+++ b/sys/boot/i386/loader/Makefile
@@ -3,9 +3,10 @@
 .include 
 MK_SSP=		no
 
-PROG=		loader.sym
+LOADER?=	loader
+PROG=		${LOADER}.sym
 INTERNALPROG=
-NEWVERSWHAT=	"bootstrap loader" i386
+NEWVERSWHAT?=	"bootstrap loader" i386
 
 # architecture-specific loader code
 SRCS=		main.c conf.c vers.c
@@ -16,7 +17,7 @@ CFLAGS+=	-DLOADER_FIREWIRE_SUPPORT
 LIBFIREWIRE=	${.OBJDIR}/../libfirewire/libfirewire.a
 .endif
 
-# Put LOADER_ZFS_SUPPORT=yes in /etc/make.conf for ZFS support
+# Set by zfsloader Makefile
 .if defined(LOADER_ZFS_SUPPORT)
 CFLAGS+=	-DLOADER_ZFS_SUPPORT
 LIBZFS=		${.OBJDIR}/../../zfs/libzfsboot.a
@@ -61,7 +62,7 @@ CFLAGS+=	-DLOADER_GPT_SUPPORT
 CFLAGS+=	-I${.CURDIR}/../../common
 CFLAGS+=	-I.
 
-CLEANFILES=	vers.c loader loader.bin loader.help
+CLEANFILES=	vers.c ${LOADER} ${LOADER}.bin loader.help
 
 CFLAGS+=	-Wall
 LDFLAGS=	-static -Ttext 0x0
@@ -80,30 +81,35 @@ CFLAGS+=	-I${.CURDIR}/../btx/lib
 # Pick up ../Makefile.inc early.
 .include 
 
-vers.c:	${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version
-	sh ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/version ${NEWVERSWHAT}
+vers.c:	${.CURDIR}/../../common/newvers.sh ${.CURDIR}/../loader/version
+	sh ${.CURDIR}/../../common/newvers.sh ${.CURDIR}/../loader/version \
+		${NEWVERSWHAT}
 
-loader: loader.bin ${BTXLDR} ${BTXKERN}
+${LOADER}: ${LOADER}.bin ${BTXLDR} ${BTXKERN}
 	btxld -v -f aout -e ${LOADER_ADDRESS} -o ${.TARGET} -l ${BTXLDR} \
-		-b ${BTXKERN} loader.bin
+		-b ${BTXKERN} ${LOADER}.bin
 
-loader.bin: loader.sym
+${LOADER}.bin: ${LOADER}.sym
 	cp ${.ALLSRC} ${.TARGET}
 	strip -R .comment -R .note ${.TARGET}
 
 loader.help: help.common help.i386
 	cat ${.ALLSRC} | awk -f ${.CURDIR}/../../common/merge_help.awk > ${.TARGET}
 
-.PATH: ${.CURDIR}/../../forth 
-FILES=	loader loader.help loader.4th support.4th loader.conf
-FILES+= screen.4th frames.4th beastie.4th
+FILES=	${LOADER}
 # XXX INSTALLFLAGS_loader= -b
-FILESMODE_loader= ${BINMODE} -b
+FILESMODE_${LOADER}= ${BINMODE} -b
+
+.if !defined(LOADER_ONLY)
+.PATH: ${.CURDIR}/../../forth 
+FILES+=	loader.help loader.4th support.4th loader.conf
+FILES+= screen.4th frames.4th beastie.4th
 FILESDIR_loader.conf=	/boot/defaults
 
 .if !exists(${DESTDIR}/boot/loader.rc)
 FILES+=	loader.rc
 .endif
+.endif
 
 # XXX crt0.o needs to be first for pxeboot(8) to work
 OBJS=	${BTXCRT} 
diff --git a/sys/boot/i386/loader/conf.c b/sys/boot/i386/loader/conf.c
index 05c9a9e95f3..bd14f47079d 100644
--- a/sys/boot/i386/loader/conf.c
+++ b/sys/boot/i386/loader/conf.c
@@ -128,6 +128,7 @@ extern struct console comconsole;
 extern struct console dconsole;
 #endif
 extern struct console nullconsole;
+extern struct console spinconsole;
 
 struct console *consoles[] = {
     &vidconsole,
@@ -136,6 +137,7 @@ struct console *consoles[] = {
     &dconsole,
 #endif
     &nullconsole,
+    &spinconsole,
     NULL
 };
 
diff --git a/sys/boot/i386/loader/main.c b/sys/boot/i386/loader/main.c
index 701dd3a1222..75d5dbcb6ec 100644
--- a/sys/boot/i386/loader/main.c
+++ b/sys/boot/i386/loader/main.c
@@ -102,14 +102,19 @@ main(void)
      */
     bios_getmem();
 
-#if defined(LOADER_BZIP2_SUPPORT) || defined(LOADER_FIREWIRE_SUPPORT) || defined(LOADER_GPT_SUPPORT) || defined(LOADER_ZFS_SUPPORT)
-    heap_top = PTOV(memtop_copyin);
-    memtop_copyin -= 0x300000;
-    heap_bottom = PTOV(memtop_copyin);
-#else
-    heap_top = (void *)bios_basemem;
-    heap_bottom = (void *)end;
+#if defined(LOADER_BZIP2_SUPPORT) || defined(LOADER_FIREWIRE_SUPPORT) || \
+    defined(LOADER_GPT_SUPPORT) || defined(LOADER_ZFS_SUPPORT)
+    if (high_heap_size > 0) {
+	heap_top = PTOV(high_heap_base + high_heap_size);
+	heap_bottom = PTOV(high_heap_base);
+	if (high_heap_base < memtop_copyin)
+	    memtop_copyin = high_heap_base;
+    } else
 #endif
+    {
+	heap_top = (void *)PTOV(bios_basemem);
+	heap_bottom = (void *)end;
+    }
     setheap(heap_bottom, heap_top);
 
     /* 
diff --git a/sys/boot/i386/zfsboot/zfsboot.c b/sys/boot/i386/zfsboot/zfsboot.c
index c0dedd7cc86..07ade3ac61d 100644
--- a/sys/boot/i386/zfsboot/zfsboot.c
+++ b/sys/boot/i386/zfsboot/zfsboot.c
@@ -27,6 +27,7 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -84,14 +85,12 @@ __FBSDID("$FreeBSD$");
 #define	KARGS_FLAGS_ZFS		0x4
 
 #define PATH_CONFIG	"/boot.config"
-#define PATH_BOOT3	"/boot/loader"
+#define PATH_BOOT3	"/boot/zfsloader"
 #define PATH_KERNEL	"/boot/kernel/kernel"
 
 #define ARGS		0x900
 #define NOPT		14
 #define NDEV		3
-#define MEM_BASE	0x12
-#define MEM_EXT 	0x15
 #define V86_CY(x)	((x) & 1)
 #define V86_ZR(x)	((x) & 0x40)
 
@@ -138,8 +137,8 @@ struct dsk {
     unsigned unit;
     unsigned slice;
     unsigned part;
-    unsigned start;
     int init;
+    daddr_t start;
 };
 static char cmd[512];
 static char kname[1024];
@@ -149,6 +148,19 @@ static struct bootinfo bootinfo;
 static uint32_t bootdev;
 static uint8_t ioctrl = IO_KEYBOARD;
 
+vm_offset_t	high_heap_base;
+uint32_t	bios_basemem, bios_extmem, high_heap_size;
+
+static struct bios_smap smap;
+
+/*
+ * The minimum amount of memory to reserve in bios_extmem for the heap.
+ */
+#define	HEAP_MIN	(3 * 1024 * 1024)
+
+static char *heap_next;
+static char *heap_end;
+
 /* Buffers that must not span a 64k boundary. */
 #define READ_BUF_SIZE	8192
 struct dmadat {
@@ -162,8 +174,8 @@ static void load(void);
 static int parse(void);
 static void printf(const char *,...);
 static void putchar(int);
-static uint32_t memsize(void);
-static int drvread(struct dsk *, void *, unsigned, unsigned);
+static void bios_getmem(void);
+static int drvread(struct dsk *, void *, daddr_t, unsigned);
 static int keyhit(unsigned);
 static int xputc(int);
 static int xgetc(int);
@@ -237,14 +249,6 @@ memset(void *p, char val, size_t n)
 static void *
 malloc(size_t n)
 {
-	static char *heap_next;
-	static char *heap_end;
-
-	if (!heap_next) {
-		heap_next = (char *) dmadat + sizeof(*dmadat);
-		heap_end = (char *) (640*1024);
-	}
-
 	char *p = heap_next;
 	if (p + n > heap_end) {
 		printf("malloc failure\n");
@@ -310,7 +314,8 @@ static int
 vdev_read(vdev_t *vdev, void *priv, off_t off, void *buf, size_t bytes)
 {
 	char *p;
-	unsigned int lba, nb;
+	daddr_t lba;
+	unsigned int nb;
 	struct dsk *dsk = (struct dsk *) priv;
 
 	if ((off & (DEV_BSIZE - 1)) || (bytes & (DEV_BSIZE - 1)))
@@ -343,14 +348,91 @@ xfsread(const dnode_phys_t *dnode, off_t *offp, void *buf, size_t nbyte)
     return 0;
 }
 
-static inline uint32_t
-memsize(void)
+static void
+bios_getmem(void)
 {
-    v86.addr = MEM_EXT;
-    v86.eax = 0x8800;
-    v86int();
-    return v86.eax;
-}
+    uint64_t size;
+
+    /* Parse system memory map */
+    v86.ebx = 0;
+    do {
+	v86.ctl = V86_FLAGS;
+	v86.addr = 0x15;		/* int 0x15 function 0xe820*/
+	v86.eax = 0xe820;
+	v86.ecx = sizeof(struct bios_smap);
+	v86.edx = SMAP_SIG;
+	v86.es = VTOPSEG(&smap);
+	v86.edi = VTOPOFF(&smap);
+	v86int();
+	if ((v86.efl & 1) || (v86.eax != SMAP_SIG))
+	    break;
+	/* look for a low-memory segment that's large enough */
+	if ((smap.type == SMAP_TYPE_MEMORY) && (smap.base == 0) &&
+	    (smap.length >= (512 * 1024)))
+	    bios_basemem = smap.length;
+	/* look for the first segment in 'extended' memory */
+	if ((smap.type == SMAP_TYPE_MEMORY) && (smap.base == 0x100000)) {
+	    bios_extmem = smap.length;
+	}
+
+	/*
+	 * Look for the largest segment in 'extended' memory beyond
+	 * 1MB but below 4GB.
+	 */
+	if ((smap.type == SMAP_TYPE_MEMORY) && (smap.base > 0x100000) &&
+	    (smap.base < 0x100000000ull)) {
+	    size = smap.length;
+
+	    /*
+	     * If this segment crosses the 4GB boundary, truncate it.
+	     */
+	    if (smap.base + size > 0x100000000ull)
+		size = 0x100000000ull - smap.base;
+
+	    if (size > high_heap_size) {
+		high_heap_size = size;
+		high_heap_base = smap.base;
+	    }
+	}
+    } while (v86.ebx != 0);
+
+    /* Fall back to the old compatibility function for base memory */
+    if (bios_basemem == 0) {
+	v86.ctl = 0;
+	v86.addr = 0x12;		/* int 0x12 */
+	v86int();
+	
+	bios_basemem = (v86.eax & 0xffff) * 1024;
+    }
+
+    /* Fall back through several compatibility functions for extended memory */
+    if (bios_extmem == 0) {
+	v86.ctl = V86_FLAGS;
+	v86.addr = 0x15;		/* int 0x15 function 0xe801*/
+	v86.eax = 0xe801;
+	v86int();
+	if (!(v86.efl & 1)) {
+	    bios_extmem = ((v86.ecx & 0xffff) + ((v86.edx & 0xffff) * 64)) * 1024;
+	}
+    }
+    if (bios_extmem == 0) {
+	v86.ctl = 0;
+	v86.addr = 0x15;		/* int 0x15 function 0x88*/
+	v86.eax = 0x8800;
+	v86int();
+	bios_extmem = (v86.eax & 0xffff) * 1024;
+    }
+
+    /*
+     * If we have extended memory and did not find a suitable heap
+     * region in the SMAP, use the last 3MB of 'extended' memory as a
+     * high heap candidate.
+     */
+    if (bios_extmem >= HEAP_MIN && high_heap_size < HEAP_MIN) {
+	high_heap_size = HEAP_MIN;
+	high_heap_base = bios_extmem + 0x100000 - HEAP_MIN;
+    }
+}    
 
 static inline void
 getstr(void)
@@ -535,6 +617,16 @@ main(void)
     off_t off;
     struct dsk *dsk;
 
+    bios_getmem();
+
+    if (high_heap_size > 0) {
+	heap_end = PTOV(high_heap_base + high_heap_size);
+	heap_next = PTOV(high_heap_base);
+    } else {
+	heap_next = (char *) dmadat + sizeof(*dmadat);
+	heap_end = (char *) PTOV(bios_basemem);
+    }
+
     dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - __base);
     v86.ctl = V86_FLAGS;
 
@@ -549,8 +641,8 @@ main(void)
 
     bootinfo.bi_version = BOOTINFO_VERSION;
     bootinfo.bi_size = sizeof(bootinfo);
-    bootinfo.bi_basemem = 0;	/* XXX will be filled by loader or kernel */
-    bootinfo.bi_extmem = memsize();
+    bootinfo.bi_basemem = bios_basemem / 1024;
+    bootinfo.bi_extmem = bios_extmem / 1024;
     bootinfo.bi_memsizes_valid++;
     bootinfo.bi_bios_dev = dsk->drive;
 
@@ -957,14 +1049,14 @@ putchar(int c)
 static struct {
 	uint16_t len;
 	uint16_t count;
-	uint16_t seg;
 	uint16_t off;
+	uint16_t seg;
 	uint64_t lba;
 } packet;
 #endif
 
 static int
-drvread(struct dsk *dsk, void *buf, unsigned lba, unsigned nblk)
+drvread(struct dsk *dsk, void *buf, daddr_t lba, unsigned nblk)
 {
 #ifdef GPT
     static unsigned c = 0x2d5c7c2f;
@@ -973,8 +1065,8 @@ drvread(struct dsk *dsk, void *buf, unsigned lba, unsigned nblk)
 	printf("%c\b", c = c << 8 | c >> 24);
     packet.len = 0x10;
     packet.count = nblk;
-    packet.seg = VTOPOFF(buf);
-    packet.off = VTOPSEG(buf);
+    packet.off = VTOPOFF(buf);
+    packet.seg = VTOPSEG(buf);
     packet.lba = lba + dsk->start;
     v86.ctl = V86_FLAGS;
     v86.addr = 0x13;
@@ -999,7 +1091,7 @@ drvread(struct dsk *dsk, void *buf, unsigned lba, unsigned nblk)
     v86.es = VTOPSEG(buf);
     v86.eax = lba;
     v86.ebx = VTOPOFF(buf);
-    v86.ecx = lba >> 16;
+    v86.ecx = lba >> 32;
     v86.edx = nblk << 8 | dsk->drive;
     v86int();
     v86.ctl = V86_FLAGS;
diff --git a/sys/boot/i386/zfsboot/zfsldr.S b/sys/boot/i386/zfsboot/zfsldr.S
index a256d30276d..64e384349e6 100644
--- a/sys/boot/i386/zfsboot/zfsldr.S
+++ b/sys/boot/i386/zfsboot/zfsldr.S
@@ -83,7 +83,7 @@ ebpb:		.byte	0		# BIOS physical drive number (W)
  * Trampoline used by boot2 to call read to read data from the disk via
  * the BIOS.  Call with:
  *
- * %cx:%ax	- long    - LBA to read in
+ * %ecx:%eax	- long    - LBA to read in
  * %es:(%bx)	- caddr_t - buffer to read data into
  * %dl		- byte    - drive to read from
  * %dh		- byte    - num sectors to read
@@ -94,10 +94,8 @@ xread:		push %ss			# Address
 /*
  * Setup an EDD disk packet and pass it to read
  */
-xread.1:					# Starting
-		pushl $0x0			#  absolute
-		push %cx			#  block
-		push %ax			#  number
+xread.1:	pushl %ecx			# Starting absolute block
+		pushl %eax			#  block number
 		push %es			# Address of
 		push %bx			#  transfer buffer
 		xor %ax,%ax			# Number of
@@ -195,7 +193,7 @@ main.4: 	xor %dx,%dx			# Partition:drive
  */
 main.5: 	mov %dx,MEM_ARG			# Save args
 		movb $NSECT,%dh			# Sector count
-		movw $1024,%ax			# Offset to boot2
+		movl $1024,%eax			# Offset to boot2
 		callw nread.1			# Read disk
 main.6:		mov $MEM_BUF,%si		# BTX (before reloc)
 		mov 0xa(%si),%bx		# Get BTX length and set
@@ -245,10 +243,11 @@ seta20.3:	sti				# Enable interrupts
 /*
  * Trampoline used to call read from within boot1.
  */
-nread:		xor %ax,%ax			# Sector offset in partition
+nread:		xor %eax,%eax			# Sector offset in partition
 nread.1:	mov $MEM_BUF,%bx		# Transfer buffer
-		add 0x8(%si),%ax		# Get
-		mov 0xa(%si),%cx		#  LBA
+		xor %ecx,%ecx			# Get
+		addl 0x8(%si),%eax		#  LBA
+		adc $0,%ecx
 		push %cs			# Read from
 		callw xread.1	 		#  disk
 		jnc return			# If success, return
diff --git a/sys/boot/i386/zfsloader/Makefile b/sys/boot/i386/zfsloader/Makefile
new file mode 100644
index 00000000000..51338e17f82
--- /dev/null
+++ b/sys/boot/i386/zfsloader/Makefile
@@ -0,0 +1,12 @@
+# $FreeBSD$
+
+.PATH:	${.CURDIR}/../loader
+
+LOADER=		zfsloader
+NEWVERSWHAT=	"ZFS enabled bootstrap loader" i386
+LOADER_ZFS_SUPPORT=yes
+LOADER_ONLY=	yes
+NO_MAN=		yes
+
+.include "${.CURDIR}/../loader/Makefile"
+
diff --git a/sys/boot/ofw/libofw/ofw_disk.c b/sys/boot/ofw/libofw/ofw_disk.c
index c3649841c5e..aaad196eefd 100644
--- a/sys/boot/ofw/libofw/ofw_disk.c
+++ b/sys/boot/ofw/libofw/ofw_disk.c
@@ -67,7 +67,7 @@ struct opened_dev {
 	SLIST_ENTRY(opened_dev)	link;
 };
 
-SLIST_HEAD(, opened_dev) opened_devs = SLIST_HEAD_INITIALIZER(opened_dev);
+SLIST_HEAD(, opened_dev) opened_devs = SLIST_HEAD_INITIALIZER(opened_devs);
 
 static int
 ofwd_init(void)
diff --git a/sys/boot/pc98/Makefile.inc b/sys/boot/pc98/Makefile.inc
index 54d4431e936..641fbca88e6 100644
--- a/sys/boot/pc98/Makefile.inc
+++ b/sys/boot/pc98/Makefile.inc
@@ -7,7 +7,7 @@ BINDIR?=	/boot
 LOADER_ADDRESS?=0x200000
 CFLAGS+=	-ffreestanding -mpreferred-stack-boundary=2 \
 		-mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 \
-		-Os
+		-Os -DPC98
 LDFLAGS+=	-nostdlib
 
 # BTX components
diff --git a/sys/boot/pc98/boot0.5/selector.s b/sys/boot/pc98/boot0.5/selector.s
index 26b5f93fdc6..9d98ef866d1 100644
--- a/sys/boot/pc98/boot0.5/selector.s
+++ b/sys/boot/pc98/boot0.5/selector.s
@@ -35,7 +35,7 @@
 # Display partition table.
 #
 showpartitions:
-	# Clear partion table area
+	# Clear partition table area
 	movw	$16, %cx
 clear_part:
 	push	%cx
diff --git a/sys/boot/pc98/boot2/Makefile b/sys/boot/pc98/boot2/Makefile
index f5da55d31ed..63f364c2261 100644
--- a/sys/boot/pc98/boot2/Makefile
+++ b/sys/boot/pc98/boot2/Makefile
@@ -1,113 +1,104 @@
 # $FreeBSD$
-#
 
-PROG=	boot
-# Order is very important on the SRCS line for this prog
-SRCS=	start.S table.c boot2.S boot.c asm.S bios.S serial.S
-SRCS+=	probe_keyboard.c io.c disk.c sys.c
+FILES=		boot boot1 boot2
 
-BINMODE=	444
-CFLAGS=		-Os -mrtd \
-		-fno-guess-branch-probability \
-		-fno-unit-at-a-time \
-		-D_KERNEL -DBOOTWAIT=${BOOTWAIT} -DTIMEOUT=${TIMEOUT}
-CFLAGS+=	-DBOOTSEG=${BOOTSEG} -DBOOTSTACK=${BOOTSTACK}
-CFLAGS+=	-I${.CURDIR}/../../.. -I.
+NM?=		nm
 
-# By default, if a serial port is going to be used as console, use COM1
-# (aka /dev/ttyd0).
-#BOOT_COMCONSOLE_PORT?=0x30
-BOOT_COMCONSOLE_PORT?=0x238
-BOOT_COMCONSOLE_CLK?=16
-BOOT_COMCONSOLE_MODE=0x0c
-CFLAGS+=	-DCOMCONSOLE=${BOOT_COMCONSOLE_PORT} \
-		-DCOMCONSOLE_CLK=${BOOT_COMCONSOLE_CLK} \
-		-DCOMCONSOLE_MODE=${BOOT_COMCONSOLE_MODE}
+BOOT_COMCONSOLE_PORT?= 0x238
+BOOT_COMCONSOLE_SPEED?= 9600
+B2SIOFMT?=	0x3
 
-# feature not implemented
-BOOT_COMCONSOLE_SPEED?=9600
-CFLAGS+=	-DCOMSPEED=${BOOT_COMCONSOLE_SPEED}
+REL1=	0x700
+ORG1=	0
+ORG2=	0x2000
 
-# Enable code to take the default boot string from a fixed location on the
-# disk.  See nextboot(8) and README.386BSD for more info.
-#CFLAGS+=	-DNAMEBLOCK
-#CFLAGS+=	-DNAMEBLOCK_WRITEBACK
+# Decide level of UFS support.
+BOOT2_UFS?=	UFS1_AND_UFS2
+#BOOT2_UFS?=	UFS2_ONLY
+#BOOT2_UFS?=	UFS1_ONLY
 
-# Bias the conversion from the BIOS drive number to the FreeBSD unit number
-# for hard disks.  This may be useful for people booting in a mixed IDE/SCSI
-# environment (set BOOT_HD_BIAS to the number of IDE drives).
-#CFLAGS+=	-DBOOT_HD_BIAS=1
-#
-# Details: this only applies if BOOT_HD_BIAS > 0.  If the BIOS drive number
-# for the boot drive is >= BOOT_HD_BIAS, then the boot drive is assumed to
-# be SCSI and have unit number (BIOS_drive_number - BOOT_HD_BIAS).  E.g.,
-# BOOT_HD_BIAS=1 makes BIOS drive 1 correspond to 1:da(0,a) instead of
-# 1:wd(1,a).  If `da' is given explicitly, then the drive is assumed to be
-# SCSI and have BIOS drive number (da_unit_number + BOOT_HD_BIAS).  E.g.,
-# BOOT_HD_BIAS=1 makes da(0,a) correspond to 1:da(0,a) instead of 0:da(0,a).
+CFLAGS=	-Os \
+	-fno-guess-branch-probability \
+	-fomit-frame-pointer \
+	-fno-unit-at-a-time \
+	-mno-align-long-strings \
+	-mrtd \
+	-mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 \
+	-D${BOOT2_UFS} \
+	-DFLAGS=${BOOT_BOOT1_FLAGS} \
+	-DSIOPRT=${BOOT_COMCONSOLE_PORT} \
+	-DSIOFMT=${B2SIOFMT} \
+	-DSIOSPD=${BOOT_COMCONSOLE_SPEED} \
+	-I${.CURDIR}/../../.. \
+	-I${.CURDIR}/../../i386/boot2 \
+	-I${.CURDIR}/../../common \
+	-I${.CURDIR}/../btx/lib -I. \
+	-Wall -Waggregate-return -Wbad-function-cast -Wcast-align \
+	-Wmissing-declarations -Wmissing-prototypes -Wnested-externs \
+	-Wpointer-arith -Wshadow -Wstrict-prototypes -Wwrite-strings \
+	-Winline --param max-inline-insns-single=100
 
-CLEANFILES+=	boot.nohdr boot.strip boot.ldr boot1 boot2 sizetest
-LDFLAGS+=	-N -Ttext 0 -e start
-NO_SHARED=	YES
-NO_MAN=
-STRIP=
+# Set machine type to PC98_SYSTEM_PARAMETER
+#CFLAGS+=	-DSET_MACHINE_TYPE
 
-# tunable timeout parameter, waiting for keypress, calibrated in ms
-BOOTWAIT?=	5000
-# tunable timeout during string input, calibrated in ms
-#TIMEOUT?=	30000
+# Initialize the bi_bios_geom using the BIOS geometry
+#CFLAGS+=	-DGET_BIOSGEOM
 
-# Location that boot2 is loaded at
-BOOTSEG=	0x1000
+LDFLAGS=-static -N --gc-sections
 
-# Offset in BOOTSEG for the top of the stack, keep this 16 byte aligned
-BOOTSTACK=	0xFFF0
+# Pick up ../Makefile.inc early.
+.include 
 
-boot.nohdr:	boot
-	objcopy -S -O binary boot boot.nohdr
-	ls -l boot.nohdr
+.PATH:	${.CURDIR}/../../i386/boot2
 
-boot.ldr:	boot.nohdr
-	dd if=boot.nohdr of=boot.ldr bs=8192 count=1 conv=sync
+CLEANFILES=	boot
 
-boot1:		boot.nohdr
-	dd if=boot.nohdr of=boot1 bs=512 count=1
+boot: boot1 boot2
+	cat boot1 boot2 > boot
 
-boot2:		boot.nohdr
-	dd if=boot.nohdr of=boot2 bs=512 skip=1
-	@dd if=boot2 skip=14 of=sizetest 2> /dev/null
-	@if [ -s sizetest ] ; then \
-		echo "boot2 is too big" >&2 ; \
-		rm boot2 ; \
-		exit 2 ; \
-	fi
+CLEANFILES+=	boot1 boot1.out boot1.o
 
-all:		boot.ldr boot1 boot2
+boot1: boot1.out
+	objcopy -S -O binary boot1.out ${.TARGET}
 
-install:
-	${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
-		boot.ldr ${DESTDIR}${BINDIR}/boot
-	${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
-		boot1 boot2 ${DESTDIR}${BINDIR}
+boot1.out: boot1.o
+	${LD} ${LDFLAGS} -e start -Ttext ${ORG1} -o ${.TARGET} boot1.o
 
-# If it's not there, don't consider it a target
-.if exists(${.CURDIR}/../../../pc98/include)
-beforedepend ${OBJS}: machine
+CLEANFILES+=	boot2 boot2.ld boot2.ldr boot2.bin boot2.out boot2.o \
+		boot2.s boot2.s.tmp boot2.h sio.o
 
-machine:
-	ln -sf ${.CURDIR}/../../../pc98/include machine
+boot2: boot2.ld
+	@set -- `ls -l boot2.ld`; x=$$((7680-$$5)); \
+	    echo "$$x bytes available"; test $$x -ge 0
+	dd if=boot2.ld of=${.TARGET} obs=7680 conv=osync
 
-.endif
+boot2.ld: boot2.ldr boot2.bin ${BTXKERN}
+	btxld -v -E ${ORG2} -f bin -b ${BTXKERN} -l boot2.ldr \
+	    -o ${.TARGET} -P 1 boot2.bin
 
-.if exists(${.CURDIR}/../../../i386/include) 
-beforedepend ${OBJS}: i386
+boot2.ldr:
+	dd if=/dev/zero of=${.TARGET} bs=276 count=1
 
-i386:
-	ln -sf ${.CURDIR}/../../../i386/include i386
+boot2.bin: boot2.out
+	objcopy -S -O binary boot2.out ${.TARGET}
 
-.endif
+boot2.out: ${BTXCRT} boot2.o sio.o
+	${LD} ${LDFLAGS} -Ttext ${ORG2} -o ${.TARGET} ${.ALLSRC}
 
-CLEANFILES+=	machine i386
+boot2.o: boot2.s
+
+SRCS=	boot2.c boot2.h
+
+boot2.s: boot2.c boot2.h ${.CURDIR}/../../common/ufsread.c
+	${CC} ${CFLAGS} -S -o boot2.s.tmp ${.CURDIR}/boot2.c
+	sed -e '/align/d' -e '/nop/d' < boot2.s.tmp > boot2.s
+	rm -f boot2.s.tmp
+
+boot2.h: boot1.out
+	${NM} -t d ${.ALLSRC} | awk '/([0-9])+ T (read|putc)/ \
+	    { x = $$1 - ORG1; \
+	    printf("#define %sORG %#x\n", toupper($$3), REL1 + x) }' \
+	    ORG1=`printf "%d" ${ORG1}` \
+	    REL1=`printf "%d" ${REL1}` > ${.TARGET}
 
-CWARNFLAGS!=	${MAKE} -f bsd.own.mk -f ${.CURDIR}/../../../conf/kern.mk -V CWARNFLAGS
 .include 
diff --git a/sys/boot/pc98/boot2/asm.S b/sys/boot/pc98/boot2/asm.S
deleted file mode 100644
index de51618f162..00000000000
--- a/sys/boot/pc98/boot2/asm.S
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- * 
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- * 
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- * 
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:34:13  rpd
- * $FreeBSD$
- */
-
-
-/*
-  Copyright 1988, 1989, 1990, 1991, 1992 
-   by Intel Corporation, Santa Clara, California.
-
-                All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appears in all
-copies and that both the copyright notice and this permission notice
-appear in supporting documentation, and that the name of Intel
-not be used in advertising or publicity pertaining to distribution
-of the software without specific, written prior permission.
-
-INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
-IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
-NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-	.file "asm.s"
-
-#include "asm.h"
-
-
-CR0_PE_ON	=	0x1
-CR0_PE_OFF	=	0xfffffffe
-	.code16
-	.text
-
-/*
- *
- * real_to_prot()
- * 	transfer from real mode to protected mode.
- */
-
-ENTRY(real_to_prot)
-	/* guarantee that interrupt is disabled when in prot mode */
-	cli
-
-	/* load the gdtr */
-	.code32
-	addr32
-	data32
-	lgdt	EXT(Gdtr)
-	.code16
-
-	/* set the PE bit of CR0 */
-	mov	%cr0, %eax
-
-	or	$CR0_PE_ON, %eax
-	mov	%eax, %cr0 
-
-	/*
-	 * make intrasegment jump to flush the processor pipeline and
-	 * reload CS register
-	 */
-	.code32
-	data32
-	ljmp	$0x18, $xprot
-	.code16
-xprot:
-
-	/*
-	 * we are in USE32 mode now
-	 * set up the protected mode segment registers : DS, SS, ES, FS
-	 */
-	data32
-	movw	$0x20, %ax	/* data segment */
-	mov	%ax, %ds	/* gas would waste a prefix byte for movw */
-	mov	%ax, %ss
-	mov	%ax, %es
-	data32
-	movw	$0x10, %ax	/* flat segment */
-	mov	%ax, %fs
-
-#ifdef BDE_DEBUGGER
-	/* load idtr so we can debug */
-	lidt	EXT(Idtr_prot)
-#endif
-
-	ret
-
-/*
- *
- * prot_to_real()
- * 	transfer from protected mode to real mode
- * 
- */
-
-ENTRY(prot_to_real)
-
-	/* Prepare %ax while we're still in a mode that gas understands. */
-	data32
-	movw	$0x30, %ax
-
-	/* Change to use16 mode. */
-	.code32
-	ljmp	$0x28, $x16
-	.code16
-x16:
-
-	mov	%ax, %ds
-	mov	%ax, %ss
-	mov	%ax, %es
-	mov	%ax, %fs
-
-	/* clear the PE bit of CR0 */
-	mov	%cr0, %eax
-	and 	$CR0_PE_OFF, %eax
-	mov	%eax, %cr0
-
-	/*
-	 * make intersegment jmp to flush the processor pipeline
-	 * and reload CS register
-	 */
-	.code32
-	data32
-	ljmp	$BOOTSEG, $xreal
-	.code16
-xreal:
-
-	/*
-	 * we are in real mode now
-	 * set up the real mode segment registers : DS, SS, ES, FS
-	 */
-	mov	%cs, %ax
-	mov	%ax, %ds
-	mov	%ax, %ss
-	mov	%ax, %es
-	mov	%ax, %fs
-
-#ifdef BDE_DEBUGGER
-	/* load idtr so we can debug */
-	addr32
-	data32
-	lidt	EXT(Idtr_real)
-#endif
-
-	data32
-	ret
-
-/*
- * startprog(phyaddr)
- *	start the program on protected mode where phyaddr is the entry point
- *
- * XXX This whole mess should go away and we should run the boot code in
- * flat 32 bit mode with it linked -T BOOTSEG.  See the netboot code for
- * how this is done.
- */
-
-ENTRY(startprog)
-	.code32
-	push	%ebp
-	mov	%esp, %ebp
-	movl	%esp, %eax		/* Use eax as the old stack pointer */
-
-	/* convert the current stack to a 32 bit flat model */
-	movw	$0x10, %bx
-	data32
-	mov	%bx, %ss
-	addl	$(BOOTSEG<<4),%esp
-	
-	/* copy the arguments from the old stack to the new stack */
-	pushl	0x14(%eax)		/* &bootinfo */
-	pushl	$0			/* was &nfsdiskless */
-	pushl	$0			/* was esym */
-	pushl	$0			/* was cyloffset */
-	pushl	0x10(%eax)		/* bootdev */
-	pushl	0x0C(%eax)		/* howto */
-	movl	$(ourreturn),%ebx
-	addl	$(BOOTSEG<<4),%ebx	/* Fix it up for flat segments */
-	pushl	%ebx			/* our return address */
-	
-	/* push on our entry address */
-	pushl	$0x08			/* segment selector */
-	pushl	0x08(%eax)		/* kernel entry address */
-
-	/* convert over the other data segs */
-	movw	$0x10, %bx
-	data32
-	mov	%bx, %ds
-	data32
-	mov	%bx, %es
-
-	/* convert the PC (and code seg) */
-	lret
-ourreturn:
-	/* For now there is not much we can do, just lock in a loop */
-	jmp	ourreturn
-
-/*
- * pcpy(src, dst, cnt)
- *	where src is a virtual address and dst is a physical address
- */
-
-ENTRY(pcpy)
-	.code32
-	push	%ebp
-	mov	%esp, %ebp
-	push	%es
-	push	%esi
-	push	%edi
-	push	%ecx
-
-	cld
-
-	/* set %es to point at the flat segment */
-	movw	$0x10, %ax
-	mov	%ax, %es
-
-	mov	0x8(%ebp), %esi		/* source */
-	mov	0xc(%ebp), %edi		/* destination */
-	mov	0x10(%ebp), %ecx	/* count */
-
-	rep
-	movsb
-
-	pop	%ecx
-	pop	%edi
-	pop	%esi
-	pop	%es
-	pop	%ebp
-
-	ret
diff --git a/sys/boot/pc98/boot2/asm.h b/sys/boot/pc98/boot2/asm.h
deleted file mode 100644
index 914014dea7b..00000000000
--- a/sys/boot/pc98/boot2/asm.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1991,1990,1989 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.7  92/02/29  15:33:41  rpd
- * $FreeBSD$
- */
-
-#define S_ARG0	 4(%esp)
-#define S_ARG1	 8(%esp)
-#define S_ARG2	12(%esp)
-#define S_ARG3	16(%esp)
-
-#define FRAME	pushl %ebp; movl %esp, %ebp
-#define EMARF	leave
-
-#define B_ARG0	 8(%ebp)
-#define B_ARG1	12(%ebp)
-#define B_ARG2	16(%ebp)
-#define B_ARG3	20(%ebp)
-
-#ifdef	wheeze
-
-#define ALIGN 4
-#define EXT(x) x
-#define LEXT(x) x:
-#define LCL(x) ./**/x
-
-#define LB(x,n) ./**/x
-#define LBb(x,n) ./**/x
-#define LBf(x,n) ./**/x
-
-#define	SVC lcall $7,$0
-
-#define String .string
-#define Value  .value
-#define Times(a,b) [a\*b]
-#define Divide(a,b) [a\\b]
-
-#define INB	inb	(%dx)
-#define OUTB	outb	(%dx)
-#define INL	inl	(%dx)
-#define OUTL	outl	(%dx)
-
-#else	/* wheeze */
-
-#define ALIGN
-#define	LCL(x)	x
-
-#define LB(x,n) n
-#ifdef	__STDC__
-#define EXT(x) x
-#define LEXT(x) .type EXT(x),@function; EXT(x):
-#define LBb(x,n) n ## b
-#define LBf(x,n) n ## f
-#else	/* __STDC__ */
-#define EXT(x) _/**/x
-#define LEXT(x) .type EXT(x),@function; EXT(x)/**/:
-#define LBb(x,n) n/**/b
-#define LBf(x,n) n/**/f
-#endif	/* __STDC__ */
-#define SVC .byte 0x9a; .long 0; .word 0x7
-
-#define String	.ascii
-#define Value	.word
-#define Times(a,b) (a*b)
-#define Divide(a,b) (a/b)
-
-#define INB	inb	%dx, %al
-#define OUTB	outb	%al, %dx
-#define INL	inl	%dx, %eax
-#define OUTL	outl	%eax, %dx
-
-#endif	/* wheeze */
-
-#define addr32	.byte 0x67
-#define data32	.byte 0x66
-
-#ifdef GPROF
-#ifdef	__STDC__
-
-#define MCOUNT		.data; LB(x, 9); .long 0; .text; lea LBb(x, 9),%edx; call mcount
-#define	ENTRY(x)	.globl EXT(x); .align ALIGN; LEXT(x) ; \
-			pushl %ebp; movl %esp, %ebp; MCOUNT; popl %ebp;
-#define	ENTRY2(x,y)	.globl EXT(x); .globl EXT(y); \
-			.align ALIGN; LEXT(x) LEXT(y) ; \
-			pushl %ebp; movl %esp, %ebp; MCOUNT; popl %ebp;
-#define	ASENTRY(x) 	.globl x; .align ALIGN; x ## : ; \
-  			pushl %ebp; movl %esp, %ebp; MCOUNT; popl %ebp;
-
-#else	/* __STDC__ */
-
-#define MCOUNT		.data; LB(x, 9): .long 0; .text; lea LBb(x, 9),%edx; call mcount
-#define	ENTRY(x)	.globl EXT(x); .align ALIGN; LEXT(x) ; \
-			pushl %ebp; movl %esp, %ebp; MCOUNT; popl %ebp;
-#define	ENTRY2(x,y)	.globl EXT(x); .globl EXT(y); \
-			.align ALIGN; LEXT(x) LEXT(y)
-#define	ASENTRY(x) 	.globl x; .align ALIGN; x: ; \
-  			pushl %ebp; movl %esp, %ebp; MCOUNT; popl %ebp;
-
-#endif	/* __STDC__ */
-#else	/* GPROF */
-#ifdef	__STDC__
-
-#define MCOUNT
-#define	ENTRY(x)	.globl EXT(x); .align ALIGN; LEXT(x)
-#define	ENTRY2(x,y)	.globl EXT(x); .globl EXT(y); \
-			.align ALIGN; LEXT(x) LEXT(y)
-#define	ASENTRY(x)	.globl x; .align ALIGN; x ## :
-
-#else	/* __STDC__ */
-
-#define MCOUNT
-#define	ENTRY(x)	.globl EXT(x); .align ALIGN; LEXT(x)
-#define	ENTRY2(x,y)	.globl EXT(x); .globl EXT(y); \
-			.align ALIGN; LEXT(x) LEXT(y)
-#define	ASENTRY(x)	.globl x; .align ALIGN; x:
-
-#endif	/* __STDC__ */
-#endif	/* GPROF */
-
-#define	Entry(x)	.globl EXT(x); .align ALIGN; LEXT(x)
-#define	DATA(x)		.globl EXT(x); .align ALIGN; LEXT(x)
diff --git a/sys/boot/pc98/boot2/bios.S b/sys/boot/pc98/boot2/bios.S
deleted file mode 100644
index 8a884d6342d..00000000000
--- a/sys/boot/pc98/boot2/bios.S
+++ /dev/null
@@ -1,502 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- * 
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- * 
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- * 
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:34:26  rpd
- * $FreeBSD$
- */
-
-/*
-  Copyright 1988, 1989, 1990, 1991, 1992 
-   by Intel Corporation, Santa Clara, California.
-
-                All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appears in all
-copies and that both the copyright notice and this permission notice
-appear in supporting documentation, and that the name of Intel
-not be used in advertising or publicity pertaining to distribution
-of the software without specific, written prior permission.
-
-INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
-IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
-NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-/*
- * Ported to PC-9801 by Yoshio Kimura
- */
-
-/*
- * Extensions for El Torito CD-ROM booting:
- *
- * Copyright © 1997 Pluto Technologies International, Inc.  Boulder CO
- * Copyright © 1997 interface business GmbH, Dresden.
- *      All rights reserved.
- *
- * This code has been written by Jörg Wunsch, Dresden.
- * Direct comments to .
- *
- * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR(S) 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.
- *
- */
-
-	.file	"bios.s"
-
-#include "asm.h"
-	.text
-
-#ifndef CDBOOT
-
-/*
- *  PC-9801/PC-9821 SCSI MO booting
- *    2002/06/05-07/03 Kawanobe Koh 
- *
- */
-scsi_hd:
-	.code16
-	push	%cx
-	push	%ds
-	mov	%bl, %cl		/* UA */
-	and	$0x0F, %cl
-	xor	%ax, %ax
-	mov	%ax, %ds
-	mov	(0x0482), %al		/* SCSI HD equipment bits */
-	shr	%cl, %al
-	pop	%ds
-	pop	%cx
-	test	$1, %al
-	ret
-
-/*
- * biosread(dev, cyl, head, sec, nsec, offset)
- *	Read "nsec" sectors from disk to offset "offset" in boot segment
- * BIOS call "INT 0x1B Function 0xn6" to read sectors from disk into memory
- *	Call with	%ah = 0xd6(for floppy disk) or 0x06(for hard disk)
- *			%al = DA/UA
- *			%bx = data length
- *			%ch = sector size(for floppy) or cylinder(for hard)
- *			%cl = cylinder
- *			%dh = head
- *			%dl = sector
- *			%es:%bp = segment:offset of buffer
- *	Return:		
- *			%al = 0x0 on success; err code on failure
- */
-
-ENTRY(biosread)
-	.code32
-	push	%ebp
-	mov	%esp, %ebp
-
-	push	%ebx
-	push	%esi
-	push	%edi
-
-	mov	0x08(%ebp), %bl		/* (byte) DA/UA */
-	mov	0x0C(%ebp), %ecx	/* (word) cylinder */
-	mov	0x10(%ebp), %dh		/* (byte) head */
-	mov	0x14(%ebp), %dl		/* (byte) sector */
-	mov	0x18(%ebp), %esi	/* (byte) number of sectors */
-	mov	0x1C(%ebp), %edi	/* (word) destination offset */
-
-	/* prot_to_real will set %es to BOOTSEG */
-	call	EXT(prot_to_real)	/* enter real mode */
-	.code16
-	mov	$0x06, %bh		/* read data function */
-	mov	%bl, %al		/* DA */
-	and	$0xF0, %al
-	cmp	$0x30, %al		/* 1440KB FD */
-	jz	read_floppy
-	cmp	$0x90, %al		/* 1200KB FD */
-	jz	read_floppy
-	cmp	$0xA0, %al		/* SCSI HD or MO */
-	jnz	read_next
-	call	scsi_hd
-	jnz	read_next
-read_linear:
-	mov	%dh, %al		/* change to linear sector */
-	shl	$5, %al			/* multiply by 32 sector per track */
-	add	%dl, %al
-	xor	%dh, %dh		/* higher 16 bits into %dx */
-	mov	%ch, %dl
-	mov	%cl, %ch		/* lower 16 bits into %cx */
-	mov	%al, %cl
-	and	$0x7F, %bl		/* linear access DA/UA */
-	jmp	read_next
-read_floppy:
-	inc	%dx			/* sector address begins from one */
-	mov	$0x02, %ch		/* 512 bytes sector */
-	mov	$0xD6, %bh		/* MT MFM retry seek */
-read_next:
-	mov	%si, %ax		/* number of sectors */
-	shl	$9, %ax			/* multiply by 512 bytes */
-	xchg	%bx, %ax
-	mov	%di, %bp		/* destination offset */
-	int	$0x1B			/* disk bios call */
-	jc	read_end
-	xor	%ax, %ax
-read_end:
-	mov	%ax, %bx		/* save return value */
-
-	.code32
-	data32
-	call	EXT(real_to_prot)	/* back to protected mode */
-
-	xor	%eax, %eax
-	mov	%bh, %al		/* return value in %eax */
-
-	pop	%edi
-	pop	%esi
-	pop	%ebx
-	pop	%ebp
-
-	ret
-
-#else /* CDBOOT */
-
-
-/*
- * int
- * getbootspec(struct specpacket *offset)
- *
- * Read CD-ROM boot specification packet to "offset".
- */
-ENTRY(getbootspec)
-	push	%ebp
-	mov	%esp, %ebp
-
-	push	%esi
-	push	%ebx
-
-	movw	0x8(%ebp), %si
-	mov	$0x7f, %edx
-
-	/* prot_to_real will set %es to BOOTSEG */
-	call	EXT(prot_to_real)	/* enter real mode */
-	movw	$0x4b01, %ax		/* (do not) terminate disk emulation */
-	movb	$0x7f, %dl		/* any drive */
-
-	sti
-	int	$0x13
-	cli
-
-	/* save return value (actually movw %ax, %bx) */
-	mov	%eax, %ebx
-
-	data32
-	call	EXT(real_to_prot)	/* back to protected mode */
-
-	xor	%eax, %eax
-	movb	%bh, %al		/* return value in %ax */
-
-	pop	%ebx
-	pop	%esi
-	pop	%ebp
-
-	ret
-
-
-/*
- * int
- * biosreadlba(struct daddrpacket *daddr)
- *	Read sectors using the BIOS "read extended" function
- * BIOS call "INT 0x13 Function 0x42" to read sectors from disk into memory
- *	Call with	%ah = 0x42
- *			%dl = drive (0x0 for floppy disk, or emulated CD)
- *			%ds:%si = ptr to disk address packet
- *	Return:
- *			%ah = 0x0 on success; err code on failure
- */
-
-ENTRY(biosreadlba)
-	push	%ebp
-	mov	%esp, %ebp
-
-	push	%ebx
-	push	%esi
-
-	movw	8(%ebp), %si
-	movl	$0, %edx		/* emulated CD is always drive 0 */
-
-	/* prot_to_real will set %es to BOOTSEG */
-	call	EXT(prot_to_real)	/* enter real mode */
-	movw	$0x4200, %ax		/* subfunction */
-	movb	$0, %dl
-
-	sti
-	int	$0x13
-	cli
-
-	/* save return value (actually movw %ax, %bx) */
-	mov	%eax, %ebx
-
-	data32
-	call	EXT(real_to_prot)	/* back to protected mode */
-
-	xor	%eax, %eax
-	movb	%bh, %al		/* return value in %ax */
-
-	pop	%esi
-	pop	%ebx
-	pop	%ebp
-
-	ret
-
-#endif /* !CDBOOT */
-
-/*
- * getc()
- * BIOS call "INT 18H Function 00H" to read character from keyboard
- *	Call with	%ah = 0x0
- *	Return:		%ah = keyboard scan code
- *			%al = ASCII character
- */
-
-ENTRY(getc)
-	.code32
-	push	%ebp
-	mov	%esp, %ebp
-	push	%ebx			/* save %ebx */
-	push    %esi
-	push    %edi
-
-	call	EXT(prot_to_real)
-	.code16
-
-	movb	$0x0, %ah
-	int	$0x18
-
-	movb	%al, %bl		/* real_to_prot uses %eax */
-
-	.code32
-	data32
-	call	EXT(real_to_prot)
-
-	xor	%eax, %eax
-	movb	%bl, %al
-
-	pop	%edi
-	pop	%esi
-	pop	%ebx
-	pop	%ebp
-	ret
-/*
- * ischar()
- *	if there is a character pending, return it; otherwise return 0
- * BIOS call "INT 18H Function 01H" to check whether a character is pending
- *	Call with	%ah = 0x1
- *	Return:
- *		If key waiting to be input:
- *			%ah = keyboard scan code
- *			%al = ASCII character
- *			%bh = 1
- *		else
- *			%bh = 0
- */
-ENTRY(ischar)
-	.code32
-	push	%ebp
-	mov	%esp, %ebp
-	push	%ebx
-	push    %esi
-	push    %edi
-
-	call	EXT(prot_to_real)	/* enter real mode */
-
-	xor	%ebx, %ebx
-	.code16
-	movb	$0x1, %ah
-	int	$0x18
-	andb	%bh, %bh
-	data32
-	jz	nochar
-	movb	%al, %bl
-
-nochar:
-	.code32
-	data32
-	call	EXT(real_to_prot)
-
-	xor	%eax, %eax
-	movb	%bl, %al
-
-	pop	%edi
-	pop	%esi
-	pop	%ebx
-	pop	%ebp
-	ret
-
-/*
- *
- * get_diskinfo():  return a word that represents the
- *	max number of sectors and heads and drives for this device
- *
- */
-
-ENTRY(get_diskinfo)
-	.code32
-	push	%ebp
-	mov	%esp, %ebp
-	push	%ebx
-
-	mov	0x08(%ebp), %bl		/* (byte) DA/UA */
-
-	call	EXT(prot_to_real)	/* enter real mode */
-	.code16
-	mov	%bl, %al		/* DA */
-	and	$0xf0, %al
-	mov	$18, %dl		/* 1440KB FD sectors per track */
-	cmp	$0x30, %al
-	jz	floppy
-	mov	$15, %dl		/* 1200KB FD sectors per track */
-	cmp	$0x90, %al
-	jz	floppy
-	cmp	$0xA0, %al		/* SCSI HD or MO */
-	jnz	sense
-	call	scsi_hd
-	jnz	sense
-
-	push	%ds			/* SCSI MO or CD ? */
-	xor	%ax, %ax
-	mov	%ax, %ds
-	and	$0x0F, %bx		/* UA */
-	shl	$2, %bx			/* parameter offset */
-	add	$0x0460, %bx
-	mov	(%bx), %al		/* SCSI equipment parameter[0] */
-	and	$0x1F, %al		/* peripheral device type */
-	cmp	$7, %al			/* SCSI MO */
-	jnz	good
-	add	$3, %bx
-	mov	(%bx), %al		/* SCSI equipment parameter[3] */
-	test	$0x30, %al		/* sector length from 256 to 2048 */
-	jnz	good
-	or	$0x10, %al		/* forced set 512 bytes sector */
-	mov	%al, (%bx)
-	mov	$0xA100, %dx		/* refered by C language */
-	mov	%dx, %ds
-	mov	%al, (%bx)
-good:
-	pop	%ds
-
-	mov	$0xFFFE, %cx		/* virtual 65535 cylinders setting */
-	mov	$0x0820, %dx		/* standard 8 heads and 32 sectors */
-	jmp	ok
-sense:
-	mov	$0x84, %ah		/* ask for disk info */
-	mov	%bl, %al
-	int	$0x1b
-	jnc	ok			/* use %cx and %dx after */
-	/*
-	 * Urk.  Call failed.  It is not supported for floppies by old BIOS's.
-	 * Guess it's a 15-sector floppy.
-	 */
-floppy:
-	mov	$79, %cx		/* 80 cylinders 1200K and 1440K FD */
-	mov	$2, %dh			/* 2 heads as double side */
-ok:
-	.code32
-	data32
-	call	EXT(real_to_prot)	/* back to protected mode */
-
-	/* 
-	 * form a longword representing all this gunk:
-	 *	16 bit cylinder
-	 *	 8 bit head
-	 *	 8 bit sector
-	 */
-	mov	%ecx, %eax
-	sal	$16, %eax		/* max cylinder number from zero */
-	mov	%dx, %ax		/* number of heads and sectors */
-
-	pop	%ebx
-	pop	%ebp
-	ret
-
-/*
- *
- * memsize(i) :  return the memory size in KB. i == 0 for conventional memory,
- *		i == 1 for extended memory
- *		Both have the return value in AX.
- *
- */
-
-ENTRY(memsize)
-	.code32
-	push	%ebp
-	mov	%esp, %ebp
-	push	%ebx
-	push    %esi
-	push    %edi
-
-	mov	8(%ebp), %ebx
-
-	xor	%eax, %eax
-	cmpb	$0x01, %bl
-	jnz	memcnv
-memext:
-	movb	0xA1401 - BOOTSEG * 0x10, %al
-	shll	$7, %eax
-	xorl	%ebx, %ebx
-	movw	0xA1594 - BOOTSEG * 0x10, %bx
-	shll	$10, %ebx
-	addl	%ebx, %eax
-	jmp	xdone
-
-memcnv:
-	movb	0xA1501 - BOOTSEG * 0x10, %al
-	andb	$0x07, %al
-	incl	%eax
-	shll	$7, %eax
-
-xdone:
-	pop	%edi
-	pop	%esi
-	pop	%ebx
-	pop	%ebp
-	ret
diff --git a/sys/boot/pc98/boot2/boot.c b/sys/boot/pc98/boot2/boot.c
deleted file mode 100644
index 4bdfbef7b14..00000000000
--- a/sys/boot/pc98/boot2/boot.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, [92/04/03  16:51:14  rvb]
- */
-/*
-  Copyright 1988, 1989, 1990, 1991, 1992
-   by Intel Corporation, Santa Clara, California.
-
-                All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appears in all
-copies and that both the copyright notice and this permission notice
-appear in supporting documentation, and that the name of Intel
-not be used in advertising or publicity pertaining to distribution
-of the software without specific, written prior permission.
-
-INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
-IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
-NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-#include 
-__FBSDID("$FreeBSD$");
-
-#include "boot.h"
-#include 
-#include 
-#include 
-
-#define	ouraddr	(BOOTSEG << 4)		/* XXX */
-
-#define	BOOT_CONFIG_SIZE	512
-#define	BOOT_HELP_SIZE		2048
-#define	KERNEL_CONFIG_SIZE	512
-#define	NAMEBUF_LEN		1024	/* oversized to defend against gets() */
-
-static char boot_config[BOOT_CONFIG_SIZE];
-static char boot_help[BOOT_HELP_SIZE];
-char *name;
-static char kernel_config[KERNEL_CONFIG_SIZE];
-static char kernel_config_namebuf[NAMEBUF_LEN + sizeof "config"];
-static char linebuf[NAMEBUF_LEN];
-static char namebuf[NAMEBUF_LEN];
-struct bootinfo bootinfo;
-int loadflags;
-
-static void getbootdev(char *ptr, int *howto);
-static void loadprog(void);
-static void readfile(char *path, char *buf, size_t nbytes);
-
-/* NORETURN */
-void
-boot(int drive)
-{
-	int i, ret;
-	unsigned char disk_equips;
-
-	/* Pick up the story from the Bios on geometry of disks */
-
-	for(ret = 0; ret < 2; ret ++) {
-		if (*(unsigned char*)V(0xA155d) & (1 << ret)) {
-			bootinfo.bi_bios_geom[ret] = get_diskinfo(ret + 0x80);
-		}
-	}
-
-	bootinfo.bi_basemem = memsize(0);
-	bootinfo.bi_extmem = memsize(1);
-	bootinfo.bi_memsizes_valid = 1;
-
-	gateA20();
-
-	/* set machine type to PC98_SYSTEM_PARAMETER */
-	machine_check();
-
-	/*
-	 * The default boot device is the first partition in the
-	 * compatibility slice on the boot drive.
-	 */
-	dosdev = drive;
-	maj = (drive&0x70) >> 3;		/* a good first bet */
-	if (maj == 4) {	/* da */
-		disk_equips = *(unsigned char *)V(0xA1482);
-		unit = 0;
-		for (i=0; i<(drive&0x0f); i++) {
-			int media = ((unsigned *)V(0xA1460))[i] & 0x1F;
-
-			if ((disk_equips >> i) & 1)	/* HD */
-				unit++;
-			else if (media == 7)		/* MO */
-				unit++;
-		}
-	} else {
-		unit = drive & 0x0f;
-	}
-	readfile("boot.config", boot_config, BOOT_CONFIG_SIZE);
-		name = "/boot/loader";
-	if (boot_config[0] != '\0') {
-		getbootdev(boot_config, &loadflags);
-		printf("boot.config: %s", boot_config);
-		if (openrd() != 0)
-			name = "kernel";
-	}
-loadstart:
-	/* print this all each time.. (saves space to do so) */
-	/* If we have looped, use the previous entries as defaults */
-	printf("\r \n>> FreeBSD BOOT @ 0x%x: %d/%d k of memory, %s%s console\n"
-	       "Boot default: %d:%s(%d,%c)%s\n"
-	       "%s\n"
-	       "boot: ",
-	       ouraddr, bootinfo.bi_basemem, bootinfo.bi_extmem,
-	       (loadflags & RB_SERIAL) ? "serial" : "internal",
-	       (loadflags & RB_DUAL) ? "/dual" : "",
-	       dosdev & 0x0f, devs[maj], unit, 'a' + part,
-	       name ? name : "*specify_a_kernel_name*",
-	       boot_help);
-
-	/*
-	 * Ignore flags from previous attempted boot, if any.
-	 * XXX this is now too strict.  Settings given in boot.config should
-	 * not be changed.
-	 */
-	loadflags &= (RB_DUAL | RB_SERIAL);
-
-	/*
-	 * Be paranoid and make doubly sure that the input buffer is empty.
-	 */
-	if (loadflags & (RB_DUAL | RB_SERIAL))
-		init_serial();
-
-	if (!gets(linebuf))
-		putchar('\n');
-	else
-		getbootdev(linebuf, &loadflags);
-	if (name == NULL)
-		goto loadstart;
-	ret = openrd();
-	if (ret != 0) {
-		if (ret > 0)
-			printf("Can't find %s\n", name);
-		goto loadstart;
-	}
-/*	if (inode.i_mode&IEXEC)
-		loadflags |= RB_KDB;
-*/
-	loadprog();
-	goto loadstart;
-}
-
-static void
-loadprog(void)
-{
-	struct exec head;
-	int startaddr;
-	int addr;	/* physical address.. not directly useable */
-	int bootdev;
-	int i;
-	unsigned pad;
-	char *s, *t;
-
-	read((void *)&head, sizeof(head));
-	if ( N_BADMAG(head)) {
-		printf("Invalid format!\n");
-		return;
-	}
-
-	poff = N_TXTOFF(head);
-	/*if(poff==0)
-		poff = 32;*/
-
-	/*
-	 * We assume that the entry address is the same as the lowest text
-	 * address and that the kernel startup code handles relocation by
-	 * this address rounded down to a multiple of 16M.
-	 */
-	startaddr = head.a_entry & 0x00FFFFFF;
-	addr =  startaddr;
-	printf("Booting %d:%s(%d,%c)%s @ 0x%x\n"
-			, dosdev & 0x0f
-			, devs[maj]
-			, unit
-			, 'a'+part
-			, name
-			, addr);
-	if(addr < 0x00100000)
-	{
-		/*
-		 * Bail out, instead of risking to damage the BIOS
-		 * variables, the loader, or the adapter memory area.
-		 * We don't support loading below 1 MB any more.
-		 */
-		printf("Start address too low\n");
-		return;
-	}
-	printf("text=0x%x ", head.a_text);
-	/********************************************************/
-	/* LOAD THE TEXT SEGMENT				*/
-	/********************************************************/
-	xread((void *)addr, head.a_text);
-	addr += head.a_text;
-
-	/********************************************************/
-	/* Load the Initialised data after the text		*/
-	/********************************************************/
-	while (addr & PAGE_MASK)
-                *(char *)addr++ = 0;
-
-	printf("data=0x%x ", head.a_data);
-	xread((void *)addr, head.a_data);
-	addr += head.a_data;
-
-	/********************************************************/
-	/* Skip over the uninitialised data			*/
-	/* (but clear it)					*/
-	/********************************************************/
-	printf("bss=0x%x ", head.a_bss);
-
-/*
- * XXX however, we should be checking that we don't load ... into
- * nonexistent memory.  A full symbol table is unlikely to fit on 4MB
- * machines.
- */
-	/* kzip & kernel will zero their own bss */
-	addr += head.a_bss;
-
-	/* Pad to a page boundary. */
-	pad = (unsigned)addr & PAGE_MASK;
-	if (pad != 0) {
-		pad = PAGE_SIZE - pad;
-		addr += pad;
-	}
-	bootinfo.bi_symtab = addr;
-
-	/********************************************************/
-	/* Copy the symbol table size				*/
-	/********************************************************/
-	pcpy(&head.a_syms, (void *)addr, sizeof(head.a_syms));
-	addr += sizeof(head.a_syms);
-
-	/********************************************************/
-	/* Load the symbol table				*/
-	/********************************************************/
-	printf("symbols=[+0x%x+0x%x+0x%x", pad, sizeof(head.a_syms),
-	       head.a_syms);
-	xread((void *)addr, head.a_syms);
-	addr += head.a_syms;
-
-	/********************************************************/
-	/* Load the string table size				*/
-	/********************************************************/
-	read((void *)&i, sizeof(int));
-	pcpy(&i, (void *)addr, sizeof(int));
-	i -= sizeof(int);
-	addr += sizeof(int);
-
-	/********************************************************/
-	/* Load the string table				*/
-	/********************************************************/
-       printf("+0x%x+0x%x]\n", sizeof(int), i);
-	xread((void *)addr, i);
-	addr += i;
-
-	bootinfo.bi_esymtab = addr;
-
-	/*
-	 * For backwards compatibility, use the previously-unused adaptor
-	 * and controller bitfields to hold the slice number.
-	 */
-	bootdev = MAKEBOOTDEV(maj, slice, unit, part);
-
-	bootinfo.bi_version = BOOTINFO_VERSION;
-	bootinfo.bi_kernelname = (u_int32_t)(name + ouraddr);
-	bootinfo.bi_nfs_diskless = 0;
-	bootinfo.bi_size = sizeof(bootinfo);
-	bootinfo.bi_bios_dev = dosdev;
-
-	/*
-	 * Load the kernel config file (if any).  Its name is given by
-	 * appending ".config" to the kernel name.  Build the name inline
-	 * because no str*() functions are available.  The file has to be
-	 * copied to &disklabel for userconfig.  It can't be loaded there
-	 * directly because the label is used late in readfile() in some
-	 * unusual cases.
-	 */
-	s = name;
-	t = kernel_config_namebuf;
-	do
-		;
-	while ((*t++ = *s++) != '\0');
-	s = ".config";
-	--t;
-	do
-		;
-	while ((*t++ = *s++) != '\0');
-	readfile(kernel_config_namebuf, kernel_config, KERNEL_CONFIG_SIZE);
-	pcpy(kernel_config, (char *)&disklabel + ouraddr, KERNEL_CONFIG_SIZE);
-
-	printf("total=0x%x entry point=0x%x\n", addr, startaddr);
-	startprog(startaddr, loadflags | RB_BOOTINFO, bootdev,
-		  (unsigned)&bootinfo + ouraddr);
-}
-
-static void
-readfile(char *path, char *buf, size_t nbytes)
-{
-	int openstatus;
-
-	buf[0] = '\0';
-	name = path;
-	openstatus = openrd();
-	if (openstatus == 0) {
-		/* XXX no way to determine file size. */
-		read(buf, nbytes);
-	}
-	buf[nbytes - 1] = '\0';
-}
-
-static void
-getbootdev(char *ptr, int *howto)
-{
-	char c;
-	int f;
-	char *p;
-
-	/* Copy the flags to save some bytes. */
-	f = *howto;
-
-	c = *ptr;
-	for (;;) {
-nextarg:
-		while (c == ' ' || c == '\n')
-			c = *++ptr;
-		if (c == '-')
-			while ((c = *++ptr) != '\0') {
-				if (c == ' ' || c == '\n')
-					goto nextarg;
-				if (c == 'a')
-					f |= RB_ASKNAME;
-				if (c == 'C')
-					f |= RB_CDROM;
-				if (c == 'D')
-					f ^= RB_DUAL;
-				if (c == 'd')
-					f |= RB_KDB;
-				if (c == 'g')
-					f |= RB_GDB;
-				if (c == 'h')
-					f ^= RB_SERIAL;
-				if (c == 'P')
-					f |= RB_PROBEKBD;
-				if (c == 'r')
-					f |= RB_DFLTROOT;
-				if (c == 's')
-					f |= RB_SINGLE;
-				if (c == 'v')
-					f |= RB_VERBOSE;
-			}
-		if (c == '\0')
-			break;
-		p = name = namebuf;
-		while (c != '\0' && c != ' ' && c != '\n') {
-			*p++ = c;
-			c = *++ptr;
-		}
-		*p = '\0';
-	}
-	if (f & RB_PROBEKBD) {
-		if (probe_keyboard()) {
-			f |= RB_DUAL | RB_SERIAL;
-			printf("No keyboard found\n");
-		} else
-			printf("Keyboard found\n");
-	}
-	if (f & (RB_DUAL | RB_SERIAL))
-		init_serial();
-	*howto = f;
-}
diff --git a/sys/boot/pc98/boot2/boot.h b/sys/boot/pc98/boot2/boot.h
deleted file mode 100644
index e39fee53d1e..00000000000
--- a/sys/boot/pc98/boot2/boot.h
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:35:03  rpd
- * $FreeBSD$
- */
-
-#include 
-#include 
-
-typedef	int32_t	ufs_daddr_t;
-
-#define	MAXFRAG	8
-
-#include "quota.h"
-#include "inode.h"
-#include "fs.h"
-
-#define	RB_DUAL		0x40000		/* XXX */
-#define	RB_PROBEKBD	0x80000		/* XXX */
-
-extern char *devs[];
-extern char *name;
-extern struct fs *fs;
-extern struct inode inode;
-extern int dosdev, unit, slice, part, maj, boff, poff;
-extern unsigned tw_chars;
-extern int loadflags;
-extern struct disklabel disklabel;
-
-/* asm.S */
-#if ASM_ONLY
-void real_to_prot(void);
-void prot_to_real(void);
-#endif
-void startprog(unsigned int physaddr, int howto, int bootdev,
-	       /* XXX struct bootinfo * */ unsigned int bootinfo);
-void pcpy(const void *src, void *dst, size_t count);
-
-/* bios.S */
-int biosread(int dev, int cyl, int head, int sec, int nsec, void *offset);
-void putc(int c);
-int getc(void);
-int ischar(void);
-int get_diskinfo(int drive);
-int memsize(int extended);
-
-/* boot.c */
-void boot(int drive);
-
-/* boot2.S */
-void boot2(void);
-
-/* disk.c */
-int devopen(void);
-void devread(char *iodest, int sector, int cnt);
-
-/* io.c */
-void gateA20(void);
-void printf(const char *format, ...);
-void putchar(int c);
-void delay1ms(void);
-int gets(char *buf);
-int strcmp(const char *s1, const char *s2);
-#ifdef CDBOOT
-int strcasecmp(const char *s1, const char *s2);
-#endif /* !CDBOOT */
-void memcpy(const void *from, void *to, size_t len);
-void twiddle(void);
-void machine_check(void);
-
-/* probe_keyboard.c */
-int probe_keyboard(void);
-
-/* serial.S */
-void serial_putc(int ch);
-int serial_getc(void);
-int serial_ischar(void);
-void init_serial(void);
-
-/* sys.c */
-void xread(char *addr, int size);
-void read(char *buffer, int count);
-int openrd(void);
-
-#define V(ra)	(ra - BOOTSEG * 0x10)
diff --git a/sys/boot/pc98/boot2/boot1.S b/sys/boot/pc98/boot2/boot1.S
new file mode 100644
index 00000000000..e4f48eb1a26
--- /dev/null
+++ b/sys/boot/pc98/boot2/boot1.S
@@ -0,0 +1,395 @@
+/*-
+ * Copyright (c) 2008-2009 TAKAHASHI Yoshihiro
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+/* Memory Locations */
+		.set STACK_OFF,0x6000		# Stack offset
+		.set LOAD_SIZE,8192		# Load size
+		.set DAUA,0x0584		# DA/UA
+		.set MEM_REL,0x700		# Relocation address
+		.set MEM_ARG,0x900		# Arguments
+		.set MEM_BUF,0x8cec		# Load area
+		.set MEM_BTX,0x9000		# BTX start
+		.set MEM_JMP,0x9010		# BTX entry point
+		.set MEM_USR,0xa000		# Client start
+
+/* PC98 machine type from sys/pc98/pc98/pc98_machdep.h */
+		.set MEM_SYS,		0xa100	# System common area segment
+		.set PC98_MACHINE_TYPE,	0x0620	# PC98 machine type
+		.set EPSON_ID,		0x0624	# EPSON machine id
+
+		.set M_NEC_PC98,	0x0001
+		.set M_EPSON_PC98,	0x0002
+		.set M_NOT_H98,		0x0010
+		.set M_H98,		0x0020
+		.set M_NOTE,		0x0040
+		.set M_NORMAL,		0x1000
+		.set M_8M,		0x8000
+
+/* Partition Constants */
+		.set PRT_OFF,0x1be		# Partition offset
+
+/* Misc. Constants */
+		.set SIZ_PAG,0x1000		# Page size
+		.set SIZ_SEC,0x200		# Sector size
+
+		.set NSECT,0x10
+
+		.globl start
+		.globl read
+		.globl putc
+		.code16
+
+start:		jmp main
+
+boot_cyl:	.org 4
+		.ascii "IPL1   "
+
+main:		cld
+
+		/* Setup the stack */
+		xor %si,%si
+		mov %si,%ss
+		mov $STACK_OFF,%sp
+
+		push %cx
+
+		/* Relocate ourself to MEM_REL */
+		push %cs
+		pop %ds
+		mov %si,%es
+		mov $MEM_REL,%di
+		mov $SIZ_SEC,%cx
+		rep
+		movsb
+
+		/* Transfer PC-9801 system common area */
+		xor %ax,%ax
+		mov %ax,%si
+		mov %ax,%ds
+		mov %ax,%di
+		mov $MEM_SYS,%ax
+		mov %ax,%es
+		mov $0x0600,%cx
+		rep
+		movsb
+
+		/* Transfer EPSON machine type */
+		mov $0xfd00,%ax
+		mov %ax,%ds
+		mov (0x804),%eax
+		and $0x00ffffff,%eax
+		mov %eax,%es:(EPSON_ID)
+
+		/* Set machine type to PC98_SYSTEM_PARAMETER */
+#ifdef SET_MACHINE_TYPE
+		call set_machine_type
+#else
+		mov $M_NEC_PC98+M_NOT_H98,%eax
+		mov %eax,%es:(PC98_MACHINE_TYPE)
+#endif
+
+		/* Setup graphic screen */
+		mov $0x42,%ah		/* 640x400 */
+		mov $0xc0,%ch
+		int $0x18
+		mov $0x40,%ah		/* graph on */
+		int $0x18
+
+		/* Setup text screen */
+		mov $0x0a00,%ax		/* 80x25 */
+		int $0x18
+		mov $0x0c,%ah		/* text on */
+		int $0x18
+		mov $0x13,%ah		/* cursor home */
+		xor %dx,%dx
+		int $0x18
+		mov $0x11,%ah		/* cursor on */
+		int $0x18
+
+		/* Setup keyboard */
+		mov $0x03,%ah
+		int $0x18
+
+		pop %cx
+
+		/* bootstrap passes */
+		xor %edi,%edi
+		mov %di,%ds
+		mov %di,%es
+		mov %cs,%bx
+		cmp $0x1fe0,%bx
+		jz boot_fd
+		cmp $0x1fc0,%bx
+		jnz boot_hd
+		xor %cx,%cx
+		mov (DAUA),%al
+		and $0xf0,%al
+		cmp $0x30,%al
+		jz boot_fd
+		cmp $0x90,%al
+		jnz boot_hd
+boot_fd:	xor %cx,%cx
+		jmp boot_load
+boot_hd:	test %cx,%cx
+		jnz boot_load
+		mov %cs:(boot_cyl),%cx
+boot_load:	mov %cx,MEM_ARG		/* Save cylinder number */
+		mov %cx,%di
+		xor %dx,%dx
+		mov $LOAD_SIZE,%bx
+		mov $MEM_BUF,%bp
+		push %cs
+		callw read
+		jc error
+
+		/* Transfer boot2.bin */
+		mov $MEM_BTX,%bx
+		mov 0xa(%bx),%si	/* BTX size */
+		add %bx,%si		/* start of boot2.bin */
+		mov $MEM_USR+SIZ_PAG*2,%di
+		mov $MEM_BTX+(NSECT-1)*SIZ_SEC,%cx
+		sub %si,%cx
+		rep
+		movsb
+
+		/* Enable A20 */
+		xor %ax,%ax
+		outb %al,$0xf2
+		mov $0x02,%al
+		outb %al,$0xf6
+
+		/* Start BTX */
+		ljmp $0x0000,$MEM_JMP
+
+/*
+ * Reads sectors from the disk.
+ * Call with:
+ *
+ * %bx		- bytes to read
+ * %cx		- cylinder
+ * %dh		- head
+ * %dl		- sector
+ * %edi		- lba
+ * %es:(%bp)	- buffer to read data into
+ */
+read:		xor %ax,%ax
+		mov %ax,%ds
+		mov $0x06,%ah
+		mov (DAUA),%al
+		mov %ax,%si
+		and $0xf0,%al
+		cmp $0x30,%al		/* 1.44MB FDD */
+		jz read_fd
+		cmp $0x90,%al		/* 1MB FDD */
+		jz read_fd
+		cmp $0xa0,%al		/* Is SCSI device? */
+		jnz read_load
+		push %cx
+		mov %si,%cx
+		and $0x0f,%cl
+		inc %cl
+		mov (0x482),%ah
+		shr %cl,%ah		/* Is SCSI HDD? */
+		pop %cx
+		jc read_load
+		and $0xff7f,%si		/* SCSI MO */
+		mov %di,%cx
+		shr $16,%di
+		mov %di,%dx
+		jmp read_load
+read_fd:	or $0xd000,%si
+		or $0x0200,%cx
+		inc %dx
+read_load:	mov %si,%ax
+		int $0x1b
+		lret
+
+/*
+ * Print out the error message, wait for a keypress, and then reboot
+ * the machine.
+ */
+error:		push %cs
+		pop %ds
+		mov $msg_eread,%si
+		call putstr
+		xor %ax,%ax		/* Get keypress */
+		int $0x18
+		xor %ax,%ax		/* CPU reset */
+		outb %al,$0xf0
+halt:		hlt
+		jmp halt		/* Spin */
+
+/*
+ * Display a null-terminated string.
+ */
+putstr.0:	push %cs
+		callw putc
+putstr:		lodsb
+		test %al,%al
+		jne putstr.0
+		ret
+
+/*
+ * Display a single char.
+ */
+putc:		pusha
+		xor %dx,%dx
+		mov %dx,%ds
+		mov MEM_REL+cursor-start,%di
+		mov $0xa000,%bx
+		mov %bx,%es
+		mov $(80*2),%cx
+
+		cmp $0x08,%al
+		je putc.bs
+		cmp $0x0d,%al
+		je putc.cr
+		cmp $0x0a,%al
+		je putc.lf
+		cmp $0x5c,%al			/* \ */
+		jne 1f
+		mov $0xfc,%al
+1:		movb $0xe1,%es:0x2000(%di)
+		stosw
+		jmp putc.scr
+putc.bs:	test %di,%di
+		jz putc.move
+		dec %di
+		dec %di
+		movb $0xe1,%es:0x2000(%di)
+		movw $0x20,%es:(%di)
+		jmp putc.move
+putc.cr:	mov %di,%ax
+		div %cx
+		sub %dx,%di
+		jmp putc.move
+putc.lf:	add %cx,%di
+putc.scr:	cmp $(80*2*25),%di		/* Scroll screen */
+		jb putc.move
+		push %ds
+		mov %bx,%ds
+		mov $(80*2),%si
+		xor %di,%di
+		mov $(80*24/2),%cx
+		rep
+		movsl
+		xor %ax,%ax
+		mov $0x20,%al
+		mov $80,%cl
+		rep
+		stosw
+		pop %ds
+		mov $(80*24*2),%di
+putc.move:	mov %di,MEM_REL+cursor-start	/* Move cursor */
+		mov $0x13,%ah
+		mov %di,%dx
+		int $0x18
+		popa
+		lret
+
+cursor:		.word 0
+
+#ifdef SET_MACHINE_TYPE
+/*
+ * Set machine type to PC98_SYSTEM_PARAMETER.
+ */
+set_machine_type:
+		xor %edx,%edx
+		mov %dx,%ds
+//		mov $MEM_SYS,%ax
+//		mov %ax,%es
+
+		/* Wait V-SYNC */
+vsync.1:	inb $0x60,%al
+		test $0x20,%al
+		jnz vsync.1
+vsync.2:	inb $0x60,%al
+		test $0x20,%al
+		jz vsync.2
+
+		/* ANK 'A' font */
+		xor %al,%al
+		outb %al,$0xa1
+		mov $0x41,%al
+		outb %al,$0xa3
+
+		/* Get 'A' font from CG window */
+		push %ds
+		mov $0xa400,%ax
+		mov %ax,%ds
+		xor %eax,%eax
+		xor %bx,%bx
+		mov $4,%cx
+font.1:		add (%bx),%eax
+		add $4,%bx
+		loop font.1
+		pop %ds
+		cmp $0x6efc58fc,%eax
+		jnz m_epson
+
+m_pc98:		or $M_NEC_PC98,%edx
+		mov $0x0458,%bx
+		mov (%bx),%al
+		test $0x80,%al
+		jz m_not_h98
+		or $M_H98,%edx
+		jmp 1f
+m_epson:	or $M_EPSON_PC98,%edx
+m_not_h98:	or $M_NOT_H98,%edx
+
+1:		inb $0x42,%al
+		test $0x20,%al
+		jz 1f
+		or $M_8M,%edx
+
+1:		mov $0x0400,%bx
+		mov (%bx),%al
+		test $0x80,%al
+		jz 1f
+		or $M_NOTE,%edx
+
+1:		mov $PC98_MACHINE_TYPE,%bx
+		mov %edx,%es:(%bx)
+		ret
+#endif
+
+/* Messages */
+
+msg_eread:	.asciz "Error\r\n"
+
+		.org PRT_OFF,0x90
+
+/* Partition table */
+
+		.fill 0x30,0x1,0x0
+		.byte 0x80, 0x00, 0x01, 0x00
+		.byte 0xa5, 0xff, 0xff, 0xff
+		.byte 0x00, 0x00, 0x00, 0x00
+		.byte 0x50, 0xc3, 0x00, 0x00
+
+		.word 0xaa55			# Magic number
diff --git a/sys/boot/pc98/boot2/boot2.S b/sys/boot/pc98/boot2/boot2.S
deleted file mode 100644
index be85030b089..00000000000
--- a/sys/boot/pc98/boot2/boot2.S
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- * 
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- * 
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- * 
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:35:26  rpd
- *	boot2.S,v 1.6 1995/01/25 21:37:40 bde Exp
- * $FreeBSD$
- */
-/*
- * Ported to PC-9801 by Yoshio Kimura
- */
-
-#include	"asm.h"
-
-/* Conventional GDT indexes. */
-#define BOOT_CS_INDEX		3
-#define BOOT_CS16_INDEX		5
-#define BOOT_DS_INDEX		4
-
-#ifdef BDE_DEBUGGER
-#define DB_CS_INDEX		14
-#define DB_CS16_INDEX		15
-#define DB_DS_INDEX		16
-#define GDT_INDEX		17
-#endif
-
-/* Vector numbers. */
-#define BREAKPOINT_VECTOR	3
-#define DEBUG_VECTOR		1
-
-/*
- * boot2() -- second stage boot
- * SP points to default string if found
- */
-	.code16
-ENTRY(boot2)
-	subl	%eax, %eax
-	mov	%cs, %ax
-	mov	%ax, %ds
-	mov	%ax, %es
-	shll	$4, %eax
-
-	/* fix up GDT entries for bootstrap */
-#define FIXUP(gdt_index) \
-	.code32; \
-	addr32; \
-	movl	%eax, EXT(Gdt)+(8*gdt_index)+2;	/* actually movw %ax */ \
-	addr32; \
-	movb	%bl, EXT(Gdt)+(8*gdt_index)+4; \
-	.code16
-
-	shld	$16, %eax, %ebx
-	FIXUP(BOOT_CS_INDEX)
-	FIXUP(BOOT_CS16_INDEX)
-	FIXUP(BOOT_DS_INDEX)
-
-	/* fix up GDT pointer */
-	movl	%eax, %ecx
-	addl	$ EXT(Gdt), %eax
-	.code32
-	addr32
-	data32
-	movl	%eax, EXT(Gdtr)+2
-	.code16
-
-#ifdef BDE_DEBUGGER
-	/* fix up GDT entry for GDT */
-	data32
-	shld	$16, %eax, %ebx
-	FIXUP(GDT_INDEX)
-
-	/* fix up IDT pointer */
-	data32
-	addl	$ EXT(Idt), %ecx
-	addr32
-	data32
-	movl	%ecx, EXT(Idtr_prot)+2
-
-	/* %es = vector table segment for a while */
-	push	%es
-	data32
-	subl	%eax, %eax
-	mov	%ax, %es
-
-	/* fix up GDT entries for bdb */
-	data32
-	movl	$4*DEBUG_VECTOR, %esi
-	addr32
-	movl	%es: 2(%esi), %eax	/* actually movw to %ax */
-	data32
-	shll	$4, %eax
-	data32
-	shld	$16, %eax, %ebx
-	FIXUP(DB_CS_INDEX)
-	FIXUP(DB_CS16_INDEX)
-	FIXUP(DB_DS_INDEX)
-
-	/* Fetch entry points of bdb's protected mode trap handlers.  These
-	 * are stored at 2 before the corresponding entry points for real mode.
-	 */
-	data32
-	subl	%ebx, %ebx
-	addr32
-	movl	%es: (%esi), %ebx	/* actually movw to %bx */
-	data32
-	subl	%ecx, %ecx
-	addr32
-	movl	%es: 4*(BREAKPOINT_VECTOR-DEBUG_VECTOR)(%esi), %ecx
-					/* actually movw to %cx */
-
-	/* %es = bdb segment for a while */
-	data32
-	shrl	$4, %eax
-	mov	%ax, %es
-
-	/* fix up IDT entries for bdb */
-	data32
-	subl	$2, %ebx		/* calculate EA to check it */
-	jb	1f			/* give up if it would trap */
-	addr32
-	movl	%es: (%ebx), %eax	/* actually movw to %ax */
-	addr32
-	movl	%eax, EXT(Idt)+8*DEBUG_VECTOR	/* actually movw %ax */
-1:
-	data32
-	subl	$2, %ecx
-	jb	1f
-	addr32
-	movl	%es: (%ecx), %eax	/* actually movw to %ax */
-	addr32
-	movl	%eax, EXT(Idt)+8*BREAKPOINT_VECTOR	/* actually movw %ax */
-1:
-
-	/* finished with groping in real mode segments */
-	pop	%es
-#endif /* BDE_DEBUGGER */
-
-	/* change to protected mode */
-	.code32
-	data32
-	call	EXT(real_to_prot)
-
-	/* clear the bss */
-	movl	$ EXT(edata), %edi	/* no EXT(_edata) - krufty ld */
-	movl	$ EXT(end), %ecx	/* or EXT(_end) */
-	subl	%edi, %ecx
-	subb	%al, %al
-	rep
-	stosb
-
-#ifdef NAMEBLOCK
-	movl	%esp, EXT(dflt_name)
-#endif
-
-	movb	0xA1584 - BOOTSEG * 0x10, %dl
-	movzbl	%dl, %edx	/* discard head (%dh) and random high bits */
-	pushl	%edx
-	call	EXT(boot)
-oops:
-	hlt
-	jmp	oops
diff --git a/sys/boot/pc98/boot2/boot2.c b/sys/boot/pc98/boot2/boot2.c
new file mode 100644
index 00000000000..8c833ba02d8
--- /dev/null
+++ b/sys/boot/pc98/boot2/boot2.c
@@ -0,0 +1,842 @@
+/*-
+ * Copyright (c) 2008-2009 TAKAHASHI Yoshihiro
+ * Copyright (c) 1998 Robert Nordier
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms are freely
+ * permitted provided that the above copyright notice and this
+ * paragraph and the following disclaimer are duplicated in all
+ * such forms.
+ *
+ * This software is provided "AS IS" and without any express or
+ * implied warranties, including, without limitation, the implied
+ * warranties of merchantability and fitness for a particular
+ * purpose.
+ */
+
+#include 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include 
+
+#include 
+
+#include "boot2.h"
+#include "lib.h"
+
+#define IO_KEYBOARD	1
+#define IO_SERIAL	2
+
+#define SECOND		1	/* Circa that many ticks in a second. */
+
+#define RBX_ASKNAME	0x0	/* -a */
+#define RBX_SINGLE	0x1	/* -s */
+/* 0x2 is reserved for log2(RB_NOSYNC). */
+/* 0x3 is reserved for log2(RB_HALT). */
+/* 0x4 is reserved for log2(RB_INITNAME). */
+#define RBX_DFLTROOT	0x5	/* -r */
+#define RBX_KDB 	0x6	/* -d */
+/* 0x7 is reserved for log2(RB_RDONLY). */
+/* 0x8 is reserved for log2(RB_DUMP). */
+/* 0x9 is reserved for log2(RB_MINIROOT). */
+#define RBX_CONFIG	0xa	/* -c */
+#define RBX_VERBOSE	0xb	/* -v */
+#define RBX_SERIAL	0xc	/* -h */
+#define RBX_CDROM	0xd	/* -C */
+/* 0xe is reserved for log2(RB_POWEROFF). */
+#define RBX_GDB 	0xf	/* -g */
+#define RBX_MUTE	0x10	/* -m */
+/* 0x11 is reserved for log2(RB_SELFTEST). */
+/* 0x12 is reserved for boot programs. */
+/* 0x13 is reserved for boot programs. */
+#define RBX_PAUSE	0x14	/* -p */
+#define RBX_QUIET	0x15	/* -q */
+#define RBX_NOINTR	0x1c	/* -n */
+/* 0x1d is reserved for log2(RB_MULTIPLE) and is just misnamed here. */
+#define RBX_DUAL	0x1d	/* -D */
+/* 0x1f is reserved for log2(RB_BOOTINFO). */
+
+/* pass: -a, -s, -r, -d, -c, -v, -h, -C, -g, -m, -p, -D */
+#define RBX_MASK	(OPT_SET(RBX_ASKNAME) | OPT_SET(RBX_SINGLE) | \
+			OPT_SET(RBX_DFLTROOT) | OPT_SET(RBX_KDB ) | \
+			OPT_SET(RBX_CONFIG) | OPT_SET(RBX_VERBOSE) | \
+			OPT_SET(RBX_SERIAL) | OPT_SET(RBX_CDROM) | \
+			OPT_SET(RBX_GDB ) | OPT_SET(RBX_MUTE) | \
+			OPT_SET(RBX_PAUSE) | OPT_SET(RBX_DUAL))
+
+#define PATH_CONFIG	"/boot.config"
+#define PATH_BOOT3	"/boot/loader"
+#define PATH_KERNEL	"/boot/kernel/kernel"
+
+#define ARGS		0x900
+#define NOPT		14
+#define NDEV		3
+#define V86_CY(x)	((x) & PSL_C)
+#define V86_ZR(x)	((x) & PSL_Z)
+
+#define DRV_DISK	0xf0
+#define DRV_UNIT	0x0f
+
+#define TYPE_AD		0
+#define TYPE_DA		1
+#define TYPE_FD		2
+
+#define OPT_SET(opt)	(1 << (opt))
+#define OPT_CHECK(opt)	((opts) & OPT_SET(opt))
+
+extern uint32_t _end;
+
+static const char optstr[NOPT] = "DhaCcdgmnpqrsv"; /* Also 'P', 'S' */
+static const unsigned char flags[NOPT] = {
+    RBX_DUAL,
+    RBX_SERIAL,
+    RBX_ASKNAME,
+    RBX_CDROM,
+    RBX_CONFIG,
+    RBX_KDB,
+    RBX_GDB,
+    RBX_MUTE,
+    RBX_NOINTR,
+    RBX_PAUSE,
+    RBX_QUIET,
+    RBX_DFLTROOT,
+    RBX_SINGLE,
+    RBX_VERBOSE
+};
+
+static const char *const dev_nm[NDEV] = {"ad", "da", "fd"};
+static const unsigned char dev_maj[NDEV] = {30, 4, 2};
+static const unsigned char dev_daua[NDEV] = {0x80, 0xa0, 0x90};
+
+static struct dsk {
+    unsigned daua;
+    unsigned type;
+    unsigned disk;
+    unsigned unit;
+    unsigned head;
+    unsigned sec;
+    unsigned slice;
+    unsigned part;
+    unsigned start;
+} dsk;
+static char cmd[512], cmddup[512];
+static char kname[1024];
+static uint32_t opts;
+static int comspeed = SIOSPD;
+static struct bootinfo bootinfo;
+static uint8_t ioctrl = IO_KEYBOARD;
+
+void exit(int);
+static void load(void);
+static int parse(void);
+static int xfsread(ino_t, void *, size_t);
+static int dskread(void *, unsigned, unsigned);
+static void printf(const char *,...);
+static void putchar(int);
+static uint32_t memsize(void);
+static int drvread(void *, unsigned);
+static int keyhit(unsigned);
+static int xputc(int);
+static int xgetc(int);
+static int getc(int);
+
+static void memcpy(void *, const void *, int);
+static void
+memcpy(void *dst, const void *src, int len)
+{
+    const char *s = src;
+    char *d = dst;
+
+    while (len--)
+        *d++ = *s++;
+}
+
+static inline int
+strcmp(const char *s1, const char *s2)
+{
+    for (; *s1 == *s2 && *s1; s1++, s2++);
+    return (unsigned char)*s1 - (unsigned char)*s2;
+}
+
+#define	UFS_SMALL_CGBASE
+#include "ufsread.c"
+
+static inline int
+xfsread(ino_t inode, void *buf, size_t nbyte)
+{
+    if ((size_t)fsread(inode, buf, nbyte) != nbyte) {
+	printf("Invalid %s\n", "format");
+	return -1;
+    }
+    return 0;
+}
+
+static inline uint32_t
+memsize(void)
+{
+    u_char *p = (u_char *)PTOV(0);
+
+    return *(p + 0x401) * 128 * 1024 + *(u_int16_t *)(p + 0x594) * 1024 * 1024;
+}
+
+static inline void
+getstr(void)
+{
+    char *s;
+    int c;
+
+    s = cmd;
+    for (;;) {
+	switch (c = xgetc(0)) {
+	case 0:
+	    break;
+	case '\177':
+	case '\b':
+	    if (s > cmd) {
+		s--;
+		printf("\b \b");
+	    }
+	    break;
+	case '\n':
+	case '\r':
+	    *s = 0;
+	    return;
+	default:
+	    if (s - cmd < sizeof(cmd) - 1)
+		*s++ = c;
+	    putchar(c);
+	}
+    }
+}
+
+static inline void
+putc(int c)
+{
+
+    v86.ctl = V86_ADDR | V86_CALLF | V86_FLAGS;
+    v86.addr = PUTCORG;		/* call to putc in boot1 */
+    v86.eax = c;
+    v86int();
+    v86.ctl = V86_FLAGS;
+}
+
+static inline int
+is_scsi_hd(void)
+{
+
+    if ((*(u_char *)PTOV(0x482) >> dsk.unit) & 0x01)
+	return 1;
+
+    return 0;
+}
+
+static inline void
+fix_sector_size(void)
+{
+    u_char *p;
+
+    p = (u_char *)PTOV(0x460 + dsk.unit * 4);	/* SCSI equipment parameter */
+
+    if ((p[0] & 0x1f) == 7) {		/* SCSI MO */
+	if (!(p[3] & 0x30)) {		/* 256B / sector */
+	    p[3] |= 0x10;		/* forced set 512B / sector */
+	    p[3 + 0xa1000] |= 0x10;
+	}
+    }
+}
+
+static inline uint32_t
+get_diskinfo(void)
+{
+
+    if (dsk.disk == 0x30) {				/* 1440KB FD */
+	/* 80 cylinders, 2 heads, 18 sectors */
+	return (80 << 16) | (2 << 8) | 18;
+    } else if (dsk.disk == 0x90) {			/* 1200KB FD */
+	/* 80 cylinders, 2 heads, 15 sectors */
+	return (80 << 16) | (2 << 8) | 15;
+    } else if (dsk.disk == 0x80 || is_scsi_hd()) {	/* IDE or SCSI HDD */
+	v86.addr = 0x1b;
+	v86.eax = 0x8400 | dsk.daua;
+	v86int();
+	return (v86.ecx << 16) | v86.edx;
+    }
+
+    /* SCSI MO or CD */
+    fix_sector_size();	/* SCSI MO */
+
+    /* other SCSI devices */
+    return (65535 << 16) | (8 << 8) | 32;
+}
+
+static void
+set_dsk(void)
+{
+    uint32_t di;
+
+    di = get_diskinfo();
+
+    dsk.head = (di >> 8) & 0xff;
+    dsk.sec = di & 0xff;
+    dsk.start = 0;
+}
+
+#ifdef GET_BIOSGEOM
+static uint32_t
+bd_getbigeom(int bunit)
+{
+    int hds = 0;
+    int unit = 0x80;		/* IDE HDD */
+    u_int addr = 0x55d;
+
+    while (unit < 0xa7) {
+	if (*(u_char *)PTOV(addr) & (1 << (unit & 0x0f)))
+	    if (hds++ == bunit)
+		break;
+
+	if (unit >= 0xA0) {
+	    int media = ((unsigned *)PTOV(0x460))[unit & 0x0F] & 0x1F;
+
+	    if (media == 7 && hds++ == bunit)	/* SCSI MO */
+		return(0xFFFE0820); /* C:65535 H:8 S:32 */
+	}
+	if (++unit == 0x84) {
+	    unit = 0xA0;	/* SCSI HDD */
+	    addr = 0x482;
+	}
+    }
+    if (unit == 0xa7)
+	return 0x4F020F;	/* 1200KB FD C:80 H:2 S:15 */
+    v86.addr = 0x1b;
+    v86.eax = 0x8400 | unit;
+    v86int();
+    if (v86.efl & 0x1)
+	return 0x4F020F;	/* 1200KB FD C:80 H:2 S:15 */
+    return ((v86.ecx & 0xffff) << 16) | (v86.edx & 0xffff);
+}
+#endif
+
+static int
+check_slice(void)
+{
+    struct pc98_partition *dp;
+    char *sec;
+    unsigned i, cyl;
+
+    sec = dmadat->secbuf;
+    cyl = *(uint16_t *)PTOV(ARGS);
+    set_dsk();
+
+    if (dsk.type == TYPE_FD)
+	return (WHOLE_DISK_SLICE);
+    if (drvread(sec, DOSBBSECTOR + 1))
+	return (WHOLE_DISK_SLICE);	/* Read error */
+    dp = (void *)(sec + DOSPARTOFF);
+    for (i = 0; i < NDOSPART; i++) {
+	if (dp[i].dp_mid == DOSMID_386BSD) {
+	    if (dp[i].dp_scyl <= cyl && cyl <= dp[i].dp_ecyl)
+		return (BASE_SLICE + i);
+	}
+    }
+
+    return (WHOLE_DISK_SLICE);
+}
+
+int
+main(void)
+{
+#ifdef GET_BIOSGEOM
+    int i;
+#endif
+    int autoboot;
+    ino_t ino;
+
+    dmadat = (void *)(roundup2(__base + (int32_t)&_end, 0x10000) - __base);
+    v86.ctl = V86_FLAGS;
+    v86.efl = PSL_RESERVED_DEFAULT | PSL_I;
+    dsk.daua = *(uint8_t *)PTOV(0x584);
+    dsk.disk = dsk.daua & DRV_DISK;
+    dsk.unit = dsk.daua & DRV_UNIT;
+    if (dsk.disk == 0x80)
+        dsk.type = TYPE_AD;
+    else if (dsk.disk == 0xa0)
+        dsk.type = TYPE_DA;
+    else /* if (dsk.disk == 0x30 || dsk.disk == 0x90) */
+        dsk.type = TYPE_FD;
+    dsk.slice = check_slice();
+#ifdef GET_BIOSGEOM
+    for (i = 0; i < N_BIOS_GEOM; i++)
+	bootinfo.bi_bios_geom[i] = bd_getbigeom(i);
+#endif
+    bootinfo.bi_version = BOOTINFO_VERSION;
+    bootinfo.bi_size = sizeof(bootinfo);
+    bootinfo.bi_basemem = 0;	/* XXX will be filled by loader or kernel */
+    bootinfo.bi_extmem = memsize();
+    bootinfo.bi_memsizes_valid++;
+
+    /* Process configuration file */
+
+    autoboot = 1;
+
+    if ((ino = lookup(PATH_CONFIG)))
+	fsread(ino, cmd, sizeof(cmd));
+
+    if (*cmd) {
+	memcpy(cmddup, cmd, sizeof(cmd));
+	if (parse())
+	    autoboot = 0;
+	if (!OPT_CHECK(RBX_QUIET))
+	    printf("%s: %s", PATH_CONFIG, cmddup);
+	/* Do not process this command twice */
+	*cmd = 0;
+    }
+
+    /*
+     * Try to exec stage 3 boot loader. If interrupted by a keypress,
+     * or in case of failure, try to load a kernel directly instead.
+     */
+
+    if (autoboot && !*kname) {
+	memcpy(kname, PATH_BOOT3, sizeof(PATH_BOOT3));
+	if (!keyhit(3*SECOND)) {
+	    load();
+	    memcpy(kname, PATH_KERNEL, sizeof(PATH_KERNEL));
+	}
+    }
+
+    /* Present the user with the boot2 prompt. */
+
+    for (;;) {
+	if (!autoboot || !OPT_CHECK(RBX_QUIET))
+	    printf("\nFreeBSD/pc98 boot\n"
+		   "Default: %u:%s(%u,%c)%s\n"
+		   "boot: ",
+		   dsk.unit, dev_nm[dsk.type], dsk.unit,
+		   'a' + dsk.part, kname);
+	if (ioctrl & IO_SERIAL)
+	    sio_flush();
+	if (!autoboot || keyhit(5*SECOND))
+	    getstr();
+	else if (!autoboot || !OPT_CHECK(RBX_QUIET))
+	    putchar('\n');
+	autoboot = 0;
+	if (parse())
+	    putchar('\a');
+	else
+	    load();
+    }
+}
+
+/* XXX - Needed for btxld to link the boot2 binary; do not remove. */
+void
+exit(int x)
+{
+}
+
+static void
+load(void)
+{
+    union {
+	struct exec ex;
+	Elf32_Ehdr eh;
+    } hdr;
+    static Elf32_Phdr ep[2];
+    static Elf32_Shdr es[2];
+    caddr_t p;
+    ino_t ino;
+    uint32_t addr, x;
+    int fmt, i, j;
+
+    if (!(ino = lookup(kname))) {
+	if (!ls)
+	    printf("No %s\n", kname);
+	return;
+    }
+    if (xfsread(ino, &hdr, sizeof(hdr)))
+	return;
+    if (N_GETMAGIC(hdr.ex) == ZMAGIC)
+	fmt = 0;
+    else if (IS_ELF(hdr.eh))
+	fmt = 1;
+    else {
+	printf("Invalid %s\n", "format");
+	return;
+    }
+    if (fmt == 0) {
+	addr = hdr.ex.a_entry & 0xffffff;
+	p = PTOV(addr);
+	fs_off = PAGE_SIZE;
+	if (xfsread(ino, p, hdr.ex.a_text))
+	    return;
+	p += roundup2(hdr.ex.a_text, PAGE_SIZE);
+	if (xfsread(ino, p, hdr.ex.a_data))
+	    return;
+	p += hdr.ex.a_data + roundup2(hdr.ex.a_bss, PAGE_SIZE);
+	bootinfo.bi_symtab = VTOP(p);
+	memcpy(p, &hdr.ex.a_syms, sizeof(hdr.ex.a_syms));
+	p += sizeof(hdr.ex.a_syms);
+	if (hdr.ex.a_syms) {
+	    if (xfsread(ino, p, hdr.ex.a_syms))
+		return;
+	    p += hdr.ex.a_syms;
+	    if (xfsread(ino, p, sizeof(int)))
+		return;
+	    x = *(uint32_t *)p;
+	    p += sizeof(int);
+	    x -= sizeof(int);
+	    if (xfsread(ino, p, x))
+		return;
+	    p += x;
+	}
+    } else {
+	fs_off = hdr.eh.e_phoff;
+	for (j = i = 0; i < hdr.eh.e_phnum && j < 2; i++) {
+	    if (xfsread(ino, ep + j, sizeof(ep[0])))
+		return;
+	    if (ep[j].p_type == PT_LOAD)
+		j++;
+	}
+	for (i = 0; i < 2; i++) {
+	    p = PTOV(ep[i].p_paddr & 0xffffff);
+	    fs_off = ep[i].p_offset;
+	    if (xfsread(ino, p, ep[i].p_filesz))
+		return;
+	}
+	p += roundup2(ep[1].p_memsz, PAGE_SIZE);
+	bootinfo.bi_symtab = VTOP(p);
+	if (hdr.eh.e_shnum == hdr.eh.e_shstrndx + 3) {
+	    fs_off = hdr.eh.e_shoff + sizeof(es[0]) *
+		(hdr.eh.e_shstrndx + 1);
+	    if (xfsread(ino, &es, sizeof(es)))
+		return;
+	    for (i = 0; i < 2; i++) {
+		memcpy(p, &es[i].sh_size, sizeof(es[i].sh_size));
+		p += sizeof(es[i].sh_size);
+		fs_off = es[i].sh_offset;
+		if (xfsread(ino, p, es[i].sh_size))
+		    return;
+		p += es[i].sh_size;
+	    }
+	}
+	addr = hdr.eh.e_entry & 0xffffff;
+    }
+    bootinfo.bi_esymtab = VTOP(p);
+    bootinfo.bi_kernelname = VTOP(kname);
+    bootinfo.bi_bios_dev = dsk.daua;
+    __exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK),
+	   MAKEBOOTDEV(dev_maj[dsk.type], dsk.slice, dsk.unit, dsk.part),
+	   0, 0, 0, VTOP(&bootinfo));
+}
+
+static int
+parse()
+{
+    char *arg = cmd;
+    char *ep, *p, *q;
+    const char *cp;
+    unsigned int drv;
+    int c, i, j;
+
+    while ((c = *arg++)) {
+	if (c == ' ' || c == '\t' || c == '\n')
+	    continue;
+	for (p = arg; *p && *p != '\n' && *p != ' ' && *p != '\t'; p++);
+	ep = p;
+	if (*p)
+	    *p++ = 0;
+	if (c == '-') {
+	    while ((c = *arg++)) {
+		if (c == 'P') {
+		    if (*(uint8_t *)PTOV(0x481) & 0x48) {
+			cp = "yes";
+		    } else {
+			opts |= OPT_SET(RBX_DUAL) | OPT_SET(RBX_SERIAL);
+			cp = "no";
+		    }
+		    printf("Keyboard: %s\n", cp);
+		    continue;
+		} else if (c == 'S') {
+		    j = 0;
+		    while ((unsigned int)(i = *arg++ - '0') <= 9)
+			j = j * 10 + i;
+		    if (j > 0 && i == -'0') {
+			comspeed = j;
+			break;
+		    }
+		    /* Fall through to error below ('S' not in optstr[]). */
+		}
+		for (i = 0; c != optstr[i]; i++)
+		    if (i == NOPT - 1)
+			return -1;
+		opts ^= OPT_SET(flags[i]);
+	    }
+	    ioctrl = OPT_CHECK(RBX_DUAL) ? (IO_SERIAL|IO_KEYBOARD) :
+		     OPT_CHECK(RBX_SERIAL) ? IO_SERIAL : IO_KEYBOARD;
+	    if (ioctrl & IO_SERIAL)
+	        sio_init(115200 / comspeed);
+	} else {
+	    for (q = arg--; *q && *q != '('; q++);
+	    if (*q) {
+		drv = -1;
+		if (arg[1] == ':') {
+		    drv = *arg - '0';
+		    if (drv > 9)
+			return (-1);
+		    arg += 2;
+		}
+		if (q - arg != 2)
+		    return -1;
+		for (i = 0; arg[0] != dev_nm[i][0] ||
+			    arg[1] != dev_nm[i][1]; i++)
+		    if (i == NDEV - 1)
+			return -1;
+		dsk.type = i;
+		arg += 3;
+		dsk.unit = *arg - '0';
+		if (arg[1] != ',' || dsk.unit > 9)
+		    return -1;
+		arg += 2;
+		dsk.slice = WHOLE_DISK_SLICE;
+		if (arg[1] == ',') {
+		    dsk.slice = *arg - '0' + 1;
+		    if (dsk.slice > NDOSPART + 1)
+			return -1;
+		    arg += 2;
+		}
+		if (arg[1] != ')')
+		    return -1;
+		dsk.part = *arg - 'a';
+		if (dsk.part > 7)
+		    return (-1);
+		arg += 2;
+		if (drv == -1)
+		    drv = dsk.unit;
+		dsk.disk = dev_daua[dsk.type];
+		dsk.daua = dsk.disk | dsk.unit;
+		dsk_meta = 0;
+	    }
+	    if ((i = ep - arg)) {
+		if ((size_t)i >= sizeof(kname))
+		    return -1;
+		memcpy(kname, arg, i + 1);
+	    }
+	}
+	arg = p;
+    }
+    return 0;
+}
+
+static int
+dskread(void *buf, unsigned lba, unsigned nblk)
+{
+    struct pc98_partition *dp;
+    struct disklabel *d;
+    char *sec;
+    unsigned sl, i;
+    u_char *p;
+
+    if (!dsk_meta) {
+	sec = dmadat->secbuf;
+	set_dsk();
+	if (dsk.type == TYPE_FD)
+	    goto unsliced;
+	if (drvread(sec, DOSBBSECTOR + 1))
+	    return -1;
+	dp = (void *)(sec + DOSPARTOFF);
+	sl = dsk.slice;
+	if (sl < BASE_SLICE) {
+	    for (i = 0; i < NDOSPART; i++)
+		if (dp[i].dp_mid == DOSMID_386BSD) {
+		    sl = BASE_SLICE + i;
+		    break;
+		}
+	    dsk.slice = sl;
+	}
+	if (sl != WHOLE_DISK_SLICE) {
+	    dp += sl - BASE_SLICE;
+	    if (dp->dp_mid != DOSMID_386BSD) {
+		printf("Invalid %s\n", "slice");
+		return -1;
+	    }
+	    dsk.start = dp->dp_scyl * dsk.head * dsk.sec +
+		dp->dp_shd * dsk.sec + dp->dp_ssect;
+	}
+	if (drvread(sec, dsk.start + LABELSECTOR))
+		return -1;
+	d = (void *)(sec + LABELOFFSET);
+	if (d->d_magic != DISKMAGIC || d->d_magic2 != DISKMAGIC) {
+	    if (dsk.part != RAW_PART) {
+		printf("Invalid %s\n", "label");
+		return -1;
+	    }
+	} else {
+	    if (dsk.part >= d->d_npartitions ||
+		!d->d_partitions[dsk.part].p_size) {
+		printf("Invalid %s\n", "partition");
+		return -1;
+	    }
+	    dsk.start += d->d_partitions[dsk.part].p_offset;
+	    dsk.start -= d->d_partitions[RAW_PART].p_offset;
+	}
+    unsliced: ;
+    }
+    for (p = buf; nblk; p += 512, lba++, nblk--) {
+	if ((i = drvread(p, dsk.start + lba)))
+	    return i;
+    }
+    return 0;
+}
+
+static void
+printf(const char *fmt,...)
+{
+    va_list ap;
+    char buf[10];
+    char *s;
+    unsigned u;
+    int c;
+
+    va_start(ap, fmt);
+    while ((c = *fmt++)) {
+	if (c == '%') {
+	    c = *fmt++;
+	    switch (c) {
+	    case 'c':
+		putchar(va_arg(ap, int));
+		continue;
+	    case 's':
+		for (s = va_arg(ap, char *); *s; s++)
+		    putchar(*s);
+		continue;
+	    case 'u':
+		u = va_arg(ap, unsigned);
+		s = buf;
+		do
+		    *s++ = '0' + u % 10U;
+		while (u /= 10U);
+		while (--s >= buf)
+		    putchar(*s);
+		continue;
+	    }
+	}
+	putchar(c);
+    }
+    va_end(ap);
+    return;
+}
+
+static void
+putchar(int c)
+{
+    if (c == '\n')
+	xputc('\r');
+    xputc(c);
+}
+
+static int
+drvread(void *buf, unsigned lba)
+{
+    static unsigned c = 0x2d5c7c2f;
+    unsigned bpc, x, cyl, head, sec;
+
+    bpc = dsk.sec * dsk.head;
+    cyl = lba / bpc;
+    x = lba % bpc;
+    head = x / dsk.sec;
+    sec = x % dsk.sec;
+
+    if (!OPT_CHECK(RBX_QUIET))
+	printf("%c\b", c = c << 8 | c >> 24);
+    v86.ctl = V86_ADDR | V86_CALLF | V86_FLAGS;
+    v86.addr = READORG;		/* call to read in boot1 */
+    v86.ecx = cyl;
+    v86.edx = (head << 8) | sec;
+    v86.edi = lba;
+    v86.ebx = 512;
+    v86.es = VTOPSEG(buf);
+    v86.ebp = VTOPOFF(buf);
+    v86int();
+    v86.ctl = V86_FLAGS;
+    if (V86_CY(v86.efl)) {
+	printf("error %u c/h/s %u/%u/%u lba %u\n", v86.eax >> 8 & 0xff,
+	       cyl, head, sec, lba);
+	return -1;
+    }
+    return 0;
+}
+
+static inline void
+delay(void)
+{
+    int i;
+
+    i = 800;
+    do {
+	outb(0x5f, 0);	/* about 600ns */
+    } while (--i >= 0);
+}
+
+static int
+keyhit(unsigned sec)
+{
+    unsigned i;
+
+    if (OPT_CHECK(RBX_NOINTR))
+	return 0;
+    for (i = 0; i < sec * 1000; i++) {
+	if (xgetc(1))
+	    return 1;
+	delay();
+    }
+    return 0;
+}
+
+static int
+xputc(int c)
+{
+    if (ioctrl & IO_KEYBOARD)
+	putc(c);
+    if (ioctrl & IO_SERIAL)
+	sio_putc(c);
+    return c;
+}
+
+static int
+xgetc(int fn)
+{
+    if (OPT_CHECK(RBX_NOINTR))
+	return 0;
+    for (;;) {
+	if (ioctrl & IO_KEYBOARD && getc(1))
+	    return fn ? 1 : getc(0);
+	if (ioctrl & IO_SERIAL && sio_ischar())
+	    return fn ? 1 : sio_getc();
+	if (fn)
+	    return 0;
+    }
+}
+
+static int
+getc(int fn)
+{
+    v86.addr = 0x18;
+    v86.eax = fn << 8;
+    v86int();
+    if (fn)
+	return (v86.ebx >> 8) & 0x01;
+    else
+	return v86.eax & 0xff;
+}
diff --git a/sys/boot/pc98/boot2/dinode.h b/sys/boot/pc98/boot2/dinode.h
deleted file mode 100644
index 2a78f344d40..00000000000
--- a/sys/boot/pc98/boot2/dinode.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (c) 1982, 1989, 1993
- *	The Regents of the University of California.  All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * 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.
- *
- *	@(#)dinode.h	8.3 (Berkeley) 1/21/94
- * %FreeBSD: src/sys/ufs/ufs/dinode.h,v 1.7 1999/08/28 00:52:27 peter Exp %
- * $FreeBSD$
- */
-
-#ifndef _UFS_UFS_DINODE_H_
-#define _UFS_UFS_DINODE_H_
-
-/*
- * The root inode is the root of the file system.  Inode 0 can't be used for
- * normal purposes and historically bad blocks were linked to inode 1, thus
- * the root inode is 2.  (Inode 1 is no longer used for this purpose, however
- * numerous dump tapes make this assumption, so we are stuck with it).
- */
-#define	ROOTINO	((ino_t)2)
-
-/*
- * The Whiteout inode# is a dummy non-zero inode number which will
- * never be allocated to a real file.  It is used as a place holder
- * in the directory entry which has been tagged as a DT_W entry.
- * See the comments about ROOTINO above.
- */
-#define	WINO	((ino_t)1)
-
-/*
- * A dinode contains all the meta-data associated with a UFS file.
- * This structure defines the on-disk format of a dinode. Since
- * this structure describes an on-disk structure, all its fields
- * are defined by types with precise widths.
- */
-
-/* typedef int32_t ufs_daddr_t; */
-#define	NDADDR	12			/* Direct addresses in inode. */
-#define	NIADDR	3			/* Indirect addresses in inode. */
-
-struct dinode {
-	u_int16_t	di_mode;	/*   0: IFMT, permissions; see below. */
-	int16_t		di_nlink;	/*   2: File link count. */
-	union {
-		u_int16_t oldids[2];	/*   4: Ffs: old user and group ids. */
-		int32_t	  inumber;	/*   4: Lfs: inode number. */
-	} di_u;
-	u_int64_t	di_size;	/*   8: File byte count. */
-	int32_t		di_atime;	/*  16: Last access time. */
-	int32_t		di_atimensec;	/*  20: Last access time. */
-	int32_t		di_mtime;	/*  24: Last modified time. */
-	int32_t		di_mtimensec;	/*  28: Last modified time. */
-	int32_t		di_ctime;	/*  32: Last inode change time. */
-	int32_t		di_ctimensec;	/*  36: Last inode change time. */
-	ufs_daddr_t	di_db[NDADDR];	/*  40: Direct disk blocks. */
-	ufs_daddr_t	di_ib[NIADDR];	/*  88: Indirect disk blocks. */
-	u_int32_t	di_flags;	/* 100: Status flags (chflags). */
-	int32_t		di_blocks;	/* 104: Blocks actually held. */
-	int32_t		di_gen;		/* 108: Generation number. */
-	u_int32_t	di_uid;		/* 112: File owner. */
-	u_int32_t	di_gid;		/* 116: File group. */
-	int32_t		di_spare[2];	/* 120: Reserved; currently unused */
-};
-
-/*
- * The di_db fields may be overlaid with other information for
- * file types that do not have associated disk storage. Block
- * and character devices overlay the first data block with their
- * dev_t value. Short symbolic links place their path in the
- * di_db area.
- */
-#define	di_inumber	di_u.inumber
-#define	di_ogid		di_u.oldids[1]
-#define	di_ouid		di_u.oldids[0]
-#define	di_rdev		di_db[0]
-#define	di_shortlink	di_db
-#define	MAXSYMLINKLEN	((NDADDR + NIADDR) * sizeof(ufs_daddr_t))
-
-/* File permissions. */
-#define	IEXEC		0000100		/* Executable. */
-#define	IWRITE		0000200		/* Writeable. */
-#define	IREAD		0000400		/* Readable. */
-#define	ISVTX		0001000		/* Sticky bit. */
-#define	ISGID		0002000		/* Set-gid. */
-#define	ISUID		0004000		/* Set-uid. */
-
-/* File types. */
-#define	IFMT		0170000		/* Mask of file type. */
-#define	IFIFO		0010000		/* Named pipe (fifo). */
-#define	IFCHR		0020000		/* Character device. */
-#define	IFDIR		0040000		/* Directory file. */
-#define	IFBLK		0060000		/* Block device. */
-#define	IFREG		0100000		/* Regular file. */
-#define	IFLNK		0120000		/* Symbolic link. */
-#define	IFSOCK		0140000		/* UNIX domain socket. */
-#define	IFWHT		0160000		/* Whiteout. */
-
-#endif
diff --git a/sys/boot/pc98/boot2/disk.c b/sys/boot/pc98/boot2/disk.c
deleted file mode 100644
index f9706cad3e0..00000000000
--- a/sys/boot/pc98/boot2/disk.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:35:49  rpd
- */
-/*
- * Ported to PC-9801 by Yoshio Kimura
- */
-
-/*
- * 93/10/08  bde
- *	If there is no 386BSD partition, initialize the label sector with
- *	LABELSECTOR instead of with garbage.
- *
- * 93/08/22  bde
- *	Fixed reading of bad sector table.  It is at the end of the 'c'
- *	partition, which is not always at the end of the disk.
- */
-
-#include 
-__FBSDID("$FreeBSD$");
-
-#include "boot.h"
-#include 
-#include 
-#include 
-
-#define	BIOS_DEV_FLOPPY	0x0
-#define	BIOS_DEV_WIN	0x80
-
-#define BPS		512
-#define	SPT(di)		((di)&0xff)
-#define	HEADS(di)	(((di)>>8)&0xff)
-
-
-static int spt, spc;
-
-struct fs *fs;
-struct inode inode;
-int dosdev, unit, slice, part, maj, boff;
-
-/*#define EMBEDDED_DISKLABEL 1*/
-
-/* Read ahead buffer large enough for one track on a 1440K floppy.  For
- * reading from floppies, the bootstrap has to be loaded on a 64K boundary
- * to ensure that this buffer doesn't cross a 64K DMA boundary.
- */
-#define RA_SECTORS	18
-static char ra_buf[RA_SECTORS * BPS];
-static int ra_dev;
-static int ra_end;
-static int ra_first;
-
-static char *Bread(int dosdev, int sector);
-
-int
-devopen(void)
-{
-	struct pc98_partition *dptr;
-	struct disklabel *dl;
-	char *p;
-	int i, sector = 0, di, dosdev_copy;
-
-	dosdev_copy = dosdev;
-	di = get_diskinfo(dosdev_copy);
-	spc = (spt = SPT(di)) * HEADS(di);
-
-#ifndef RAWBOOT
-	if ((dosdev_copy & 0xf0) == 0x90)
-	{
-		boff = 0;
-		part = (spt == 15 ? 0 : 1);
-	}
-	else
-	{
-#ifdef	EMBEDDED_DISKLABEL
-		dl = &disklabel;
-#else	/* EMBEDDED_DISKLABEL */
-		p = Bread(dosdev_copy, 1);
-		dptr = (struct pc98_partition *)p;
-		slice = WHOLE_DISK_SLICE;
-		for (i = 0; i < NDOSPART; i++, dptr++)
-			if (dptr->dp_mid == DOSMID_386BSD) {
-				slice = BASE_SLICE + i;
-				sector = dptr->dp_scyl * spc;
-				break;
-			}
-		p = Bread(dosdev, sector + LABELSECTOR);
-		dl=((struct disklabel *)p);
-		disklabel = *dl;	/* structure copy (maybe useful later)*/
-#endif /* EMBEDDED_DISKLABEL */
-		if (dl->d_magic != DISKMAGIC) {
-			printf("bad disklabel\n");
-			return 1;
-		}
-		/* This little trick is for OnTrack DiskManager disks */
-		boff = dl->d_partitions[part].p_offset -
-			dl->d_partitions[2].p_offset + sector;
-	}
-#endif /* RAWBOOT */
-	return 0;
-}
-
-
-/*
- * Be aware that cnt is rounded up to N*BPS
- */
-void
-devread(char *iodest, int sector, int cnt)
-{
-	int offset;
-	char *p;
-	int dosdev_copy;
-
-	for (offset = 0; offset < cnt; offset += BPS)
-	{
-		dosdev_copy = dosdev;
-		p = Bread(dosdev_copy, sector++);
-		memcpy(p, iodest+offset, BPS);
-	}
-}
-
-
-static char *
-Bread(int dosdev, int sector)
-{
-	if (dosdev != ra_dev || sector < ra_first || sector >= ra_end)
-	{
-		int cyl, head, sec, nsec;
-
-		cyl = sector/spc;
-		head = (sector % spc) / spt;
-		sec = sector % spt;
-		nsec = spt - sec;
-		if (nsec > RA_SECTORS)
-			nsec = RA_SECTORS;
-		twiddle();
-		if (biosread(dosdev, cyl, head, sec, nsec, ra_buf) != 0)
-		{
-		    nsec = 1;
-		    twiddle();
-		    while (biosread(dosdev, cyl, head, sec, nsec, ra_buf) != 0) {
-			printf("Error: D:0x%x C:%d H:%d S:%d\n",
-			       dosdev, cyl, head, sec);
-			twiddle();
-		    }
-		}
-		ra_dev = dosdev;
-		ra_first = sector;
-		ra_end = sector + nsec;
-	}
-	return (ra_buf + (sector - ra_first) * BPS);
-}
diff --git a/sys/boot/pc98/boot2/fs.h b/sys/boot/pc98/boot2/fs.h
deleted file mode 100644
index 8ac77da6d09..00000000000
--- a/sys/boot/pc98/boot2/fs.h
+++ /dev/null
@@ -1,551 +0,0 @@
-/*
- * Copyright (c) 1982, 1986, 1993
- *	The 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.
- *
- *	@(#)fs.h	8.13 (Berkeley) 3/21/95
- * %FreeBSD: src/sys/ufs/ffs/fs.h,v 1.14.2.3 2001/09/21 19:15:22 dillon Exp %
- * $FreeBSD$
- */
-
-#ifndef _UFS_FFS_FS_H_
-#define _UFS_FFS_FS_H_
-
-/*
- * Each disk drive contains some number of file systems.
- * A file system consists of a number of cylinder groups.
- * Each cylinder group has inodes and data.
- *
- * A file system is described by its super-block, which in turn
- * describes the cylinder groups.  The super-block is critical
- * data and is replicated in each cylinder group to protect against
- * catastrophic loss.  This is done at `newfs' time and the critical
- * super-block data does not change, so the copies need not be
- * referenced further unless disaster strikes.
- *
- * For file system fs, the offsets of the various blocks of interest
- * are given in the super block as:
- *	[fs->fs_sblkno]		Super-block
- *	[fs->fs_cblkno]		Cylinder group block
- *	[fs->fs_iblkno]		Inode blocks
- *	[fs->fs_dblkno]		Data blocks
- * The beginning of cylinder group cg in fs, is given by
- * the ``cgbase(fs, cg)'' macro.
- *
- * The first boot and super blocks are given in absolute disk addresses.
- * The byte-offset forms are preferred, as they don't imply a sector size.
- */
-#define BBSIZE		8192
-#define SBSIZE		8192
-#define	BBOFF		((off_t)(0))
-#define	SBOFF		((off_t)(BBOFF + BBSIZE))
-#define	BBLOCK		((ufs_daddr_t)(0))
-#define	SBLOCK		((ufs_daddr_t)(BBLOCK + BBSIZE / DEV_BSIZE))
-
-/*
- * Addresses stored in inodes are capable of addressing fragments
- * of `blocks'. File system blocks of at most size MAXBSIZE can
- * be optionally broken into 2, 4, or 8 pieces, each of which is
- * addressable; these pieces may be DEV_BSIZE, or some multiple of
- * a DEV_BSIZE unit.
- *
- * Large files consist of exclusively large data blocks.  To avoid
- * undue wasted disk space, the last data block of a small file may be
- * allocated as only as many fragments of a large block as are
- * necessary.  The file system format retains only a single pointer
- * to such a fragment, which is a piece of a single large block that
- * has been divided.  The size of such a fragment is determinable from
- * information in the inode, using the ``blksize(fs, ip, lbn)'' macro.
- *
- * The file system records space availability at the fragment level;
- * to determine block availability, aligned fragments are examined.
- */
-
-/*
- * MINBSIZE is the smallest allowable block size.
- * In order to insure that it is possible to create files of size
- * 2^32 with only two levels of indirection, MINBSIZE is set to 4096.
- * MINBSIZE must be big enough to hold a cylinder group block,
- * thus changes to (struct cg) must keep its size within MINBSIZE.
- * Note that super blocks are always of size SBSIZE,
- * and that both SBSIZE and MAXBSIZE must be >= MINBSIZE.
- */
-#define MINBSIZE	4096
-
-/*
- * The path name on which the file system is mounted is maintained
- * in fs_fsmnt. MAXMNTLEN defines the amount of space allocated in
- * the super block for this name.
- */
-#define MAXMNTLEN	512
-
-/*
- * There is a 128-byte region in the superblock reserved for in-core
- * pointers to summary information. Originally this included an array
- * of pointers to blocks of struct csum; now there are just three
- * pointers and the remaining space is padded with fs_ocsp[].
- *
- * NOCSPTRS determines the size of this padding. One pointer (fs_csp)
- * is taken away to point to a contiguous array of struct csum for
- * all cylinder groups; a second (fs_maxcluster) points to an array
- * of cluster sizes that is computed as cylinder groups are inspected,
- * and the third points to an array that tracks the creation of new
- * directories.
- */
-#define	NOCSPTRS	((128 / sizeof(void *)) - 3)
-
-/*
- * A summary of contiguous blocks of various sizes is maintained
- * in each cylinder group. Normally this is set by the initial
- * value of fs_maxcontig. To conserve space, a maximum summary size
- * is set by FS_MAXCONTIG.
- */
-#define FS_MAXCONTIG	16
-
-/*
- * MINFREE gives the minimum acceptable percentage of file system
- * blocks which may be free. If the freelist drops below this level
- * only the superuser may continue to allocate blocks. This may
- * be set to 0 if no reserve of free blocks is deemed necessary,
- * however throughput drops by fifty percent if the file system
- * is run at between 95% and 100% full; thus the minimum default
- * value of fs_minfree is 5%. However, to get good clustering
- * performance, 10% is a better choice. hence we use 10% as our
- * default value. With 10% free space, fragmentation is not a
- * problem, so we choose to optimize for time.
- */
-#define MINFREE		8
-#define DEFAULTOPT	FS_OPTTIME
-
-/*
- * Grigoriy Orlov  has done some extensive work to fine
- * tune the layout preferences for directories within a filesystem.
- * His algorithm can be tuned by adjusting the following parameters
- * which tell the system the average file size and the average number
- * of files per directory. These defaults are well selected for typical
- * filesystems, but may need to be tuned for odd cases like filesystems
- * being used for sqiud caches or news spools.
- */
-#define AVFILESIZ      16384   /* expected average file size */
-#define AFPDIR         64      /* expected number of files per directory */
-
-/*
- * The maximum number of snapshot nodes that can be associated
- * with each filesystem. This limit affects only the number of
- * snapshot files that can be recorded within the superblock so
- * that they can be found when the filesystem is mounted. However,
- * maintaining too many will slow the filesystem performance, so
- * having this limit is a good idea.
- *
- * VALUE NOT IMPLEMENTED IN 4.x YET, RESERVED FROM -CURRENT SO SUPERBLOCKS
- * REMAIN COMPATIBLE.
- */
-#define FSMAXSNAP 20
-
-/*
- * Per cylinder group information; summarized in blocks allocated
- * from first cylinder group data blocks.  These blocks have to be
- * read in from fs_csaddr (size fs_cssize) in addition to the
- * super block.
- */
-struct csum {
-	int32_t	cs_ndir;		/* number of directories */
-	int32_t	cs_nbfree;		/* number of free blocks */
-	int32_t	cs_nifree;		/* number of free inodes */
-	int32_t	cs_nffree;		/* number of free frags */
-};
-
-/*
- * Super block for an FFS file system.
- */
-struct fs {
-	int32_t	 fs_firstfield;		/* historic file system linked list, */
-	int32_t	 fs_unused_1;		/*     used for incore super blocks */
-	ufs_daddr_t fs_sblkno;		/* addr of super-block in filesys */
-	ufs_daddr_t fs_cblkno;		/* offset of cyl-block in filesys */
-	ufs_daddr_t fs_iblkno;		/* offset of inode-blocks in filesys */
-	ufs_daddr_t fs_dblkno;		/* offset of first data after cg */
-	int32_t	 fs_cgoffset;		/* cylinder group offset in cylinder */
-	int32_t	 fs_cgmask;		/* used to calc mod fs_ntrak */
-	time_t 	 fs_time;		/* last time written */
-	int32_t	 fs_size;		/* number of blocks in fs */
-	int32_t	 fs_dsize;		/* number of data blocks in fs */
-	int32_t	 fs_ncg;		/* number of cylinder groups */
-	int32_t	 fs_bsize;		/* size of basic blocks in fs */
-	int32_t	 fs_fsize;		/* size of frag blocks in fs */
-	int32_t	 fs_frag;		/* number of frags in a block in fs */
-/* these are configuration parameters */
-	int32_t	 fs_minfree;		/* minimum percentage of free blocks */
-	int32_t	 fs_rotdelay;		/* num of ms for optimal next block */
-	int32_t	 fs_rps;		/* disk revolutions per second */
-/* these fields can be computed from the others */
-	int32_t	 fs_bmask;		/* ``blkoff'' calc of blk offsets */
-	int32_t	 fs_fmask;		/* ``fragoff'' calc of frag offsets */
-	int32_t	 fs_bshift;		/* ``lblkno'' calc of logical blkno */
-	int32_t	 fs_fshift;		/* ``numfrags'' calc number of frags */
-/* these are configuration parameters */
-	int32_t	 fs_maxcontig;		/* max number of contiguous blks */
-	int32_t	 fs_maxbpg;		/* max number of blks per cyl group */
-/* these fields can be computed from the others */
-	int32_t	 fs_fragshift;		/* block to frag shift */
-	int32_t	 fs_fsbtodb;		/* fsbtodb and dbtofsb shift constant */
-	int32_t	 fs_sbsize;		/* actual size of super block */
-	int32_t	 fs_csmask;		/* csum block offset (now unused) */
-	int32_t	 fs_csshift;		/* csum block number (now unused) */
-	int32_t	 fs_nindir;		/* value of NINDIR */
-	int32_t	 fs_inopb;		/* value of INOPB */
-	int32_t	 fs_nspf;		/* value of NSPF */
-/* yet another configuration parameter */
-	int32_t	 fs_optim;		/* optimization preference, see below */
-/* these fields are derived from the hardware */
-	int32_t	 fs_npsect;		/* # sectors/track including spares */
-	int32_t	 fs_interleave;		/* hardware sector interleave */
-	int32_t	 fs_trackskew;		/* sector 0 skew, per track */
-/* fs_id takes the space of the unused fs_headswitch and fs_trkseek fields */
-	int32_t	 fs_id[2];		/* unique filesystem id */
-/* sizes determined by number of cylinder groups and their sizes */
-	ufs_daddr_t fs_csaddr;		/* blk addr of cyl grp summary area */
-	int32_t	 fs_cssize;		/* size of cyl grp summary area */
-	int32_t	 fs_cgsize;		/* cylinder group size */
-/* these fields are derived from the hardware */
-	int32_t	 fs_ntrak;		/* tracks per cylinder */
-	int32_t	 fs_nsect;		/* sectors per track */
-	int32_t  fs_spc;			/* sectors per cylinder */
-/* this comes from the disk driver partitioning */
-	int32_t	 fs_ncyl;		/* cylinders in file system */
-/* these fields can be computed from the others */
-	int32_t	 fs_cpg;			/* cylinders per group */
-	int32_t	 fs_ipg;			/* inodes per group */
-	int32_t	 fs_fpg;			/* blocks per group * fs_frag */
-/* this data must be re-computed after crashes */
-	struct	csum fs_cstotal;	/* cylinder summary information */
-/* these fields are cleared at mount time */
-	int8_t   fs_fmod;		/* super block modified flag */
-	int8_t   fs_clean;		/* file system is clean flag */
-	int8_t 	 fs_ronly;		/* mounted read-only flag */
-	int8_t   fs_flags;		/* see FS_ flags below */
-	u_char	 fs_fsmnt[MAXMNTLEN];	/* name mounted on */
-/* these fields retain the current block allocation info */
-	int32_t	 fs_cgrotor;		/* last cg searched */
-	void 	*fs_ocsp[NOCSPTRS];	/* padding; was list of fs_cs buffers */
-	u_int8_t *fs_contigdirs;	/* # of contiguously allocated dirs */
-	struct csum *fs_csp;		/* cg summary info buffer for fs_cs */
-	int32_t	*fs_maxcluster;		/* max cluster in each cyl group */
-	int32_t	 fs_cpc;		/* cyl per cycle in postbl */
-	int16_t	 fs_opostbl[16][8];	/* old rotation block list head */
-	int32_t  fs_snapinum[FSMAXSNAP];/* RESERVED FROM 5.x */
-	int32_t	 fs_avgfilesize;	/* expected average file size */
-	int32_t  fs_avgfpdir;		/* expected # of files per directory */
-	int32_t	 fs_sparecon[26];	/* reserved for future constants */
-	int32_t  fs_pendingblocks;      /* RESERVED FROM 5.x */
-	int32_t  fs_pendinginodes;      /* RESERVED FROM 5.x */
-	int32_t	 fs_contigsumsize;	/* size of cluster summary array */ 
-	int32_t	 fs_maxsymlinklen;	/* max length of an internal symlink */
-	int32_t	 fs_inodefmt;		/* format of on-disk inodes */
-	u_int64_t fs_maxfilesize;	/* maximum representable file size */
-	int64_t	 fs_qbmask;		/* ~fs_bmask for use with 64-bit size */
-	int64_t	 fs_qfmask;		/* ~fs_fmask for use with 64-bit size */
-	int32_t	 fs_state;		/* validate fs_clean field */
-	int32_t	 fs_postblformat;	/* format of positional layout tables */
-	int32_t	 fs_nrpos;		/* number of rotational positions */
-	int32_t	 fs_postbloff;		/* (u_int16) rotation block list head */
-	int32_t	 fs_rotbloff;		/* (u_int8) blocks for each rotation */
-	int32_t	 fs_magic;		/* magic number */
-	u_int8_t fs_space[1];		/* list of blocks for each rotation */
-/* actually longer */
-};
-
-/*
- * Filesystem identification
- */
-#define	FS_MAGIC	0x011954	/* the fast filesystem magic number */
-#define	FS_OKAY		0x7c269d38	/* superblock checksum */
-#define FS_42INODEFMT	-1		/* 4.2BSD inode format */
-#define FS_44INODEFMT	2		/* 4.4BSD inode format */
-
-/*
- * Preference for optimization.
- */
-#define FS_OPTTIME	0	/* minimize allocation time */
-#define FS_OPTSPACE	1	/* minimize disk fragmentation */
-
-/*
- * Filesystem flags.
- */
-#define FS_UNCLEAN    0x01    /* filesystem not clean at mount */
-#define FS_DOSOFTDEP  0x02    /* filesystem using soft dependencies */
-
-/*
- * Rotational layout table format types
- */
-#define FS_42POSTBLFMT		-1	/* 4.2BSD rotational table format */
-#define FS_DYNAMICPOSTBLFMT	1	/* dynamic rotational table format */
-/*
- * Macros for access to superblock array structures
- */
-#define fs_postbl(fs, cylno) \
-    (((fs)->fs_postblformat == FS_42POSTBLFMT) \
-    ? ((fs)->fs_opostbl[cylno]) \
-    : ((int16_t *)((u_int8_t *)(fs) + \
-	(fs)->fs_postbloff) + (cylno) * (fs)->fs_nrpos))
-#define fs_rotbl(fs) \
-    (((fs)->fs_postblformat == FS_42POSTBLFMT) \
-    ? ((fs)->fs_space) \
-    : ((u_int8_t *)((u_int8_t *)(fs) + (fs)->fs_rotbloff)))
-
-/*
- * The size of a cylinder group is calculated by CGSIZE. The maximum size
- * is limited by the fact that cylinder groups are at most one block.
- * Its size is derived from the size of the maps maintained in the
- * cylinder group and the (struct cg) size.
- */
-#define CGSIZE(fs) \
-    /* base cg */	(sizeof(struct cg) + sizeof(int32_t) + \
-    /* blktot size */	(fs)->fs_cpg * sizeof(int32_t) + \
-    /* blks size */	(fs)->fs_cpg * (fs)->fs_nrpos * sizeof(int16_t) + \
-    /* inode map */	howmany((fs)->fs_ipg, NBBY) + \
-    /* block map */	howmany((fs)->fs_cpg * (fs)->fs_spc / NSPF(fs), NBBY) +\
-    /* if present */	((fs)->fs_contigsumsize <= 0 ? 0 : \
-    /* cluster sum */	(fs)->fs_contigsumsize * sizeof(int32_t) + \
-    /* cluster map */	howmany((fs)->fs_cpg * (fs)->fs_spc / NSPB(fs), NBBY)))
-
-/*
- * Convert cylinder group to base address of its global summary info.
- */
-#define fs_cs(fs, indx) fs_csp[indx]
-
-/*
- * Cylinder group block for a file system.
- */
-#define	CG_MAGIC	0x090255
-struct cg {
-	int32_t	 cg_firstfield;		/* historic cyl groups linked list */
-	int32_t	 cg_magic;		/* magic number */
-	time_t	 cg_time;		/* time last written */
-	int32_t	 cg_cgx;		/* we are the cgx'th cylinder group */
-	int16_t	 cg_ncyl;		/* number of cyl's this cg */
-	int16_t	 cg_niblk;		/* number of inode blocks this cg */
-	int32_t	 cg_ndblk;		/* number of data blocks this cg */
-	struct	csum cg_cs;		/* cylinder summary information */
-	int32_t	 cg_rotor;		/* position of last used block */
-	int32_t	 cg_frotor;		/* position of last used frag */
-	int32_t	 cg_irotor;		/* position of last used inode */
-	int32_t	 cg_frsum[MAXFRAG];	/* counts of available frags */
-	int32_t	 cg_btotoff;		/* (int32) block totals per cylinder */
-	int32_t	 cg_boff;		/* (u_int16) free block positions */
-	int32_t	 cg_iusedoff;		/* (u_int8) used inode map */
-	int32_t	 cg_freeoff;		/* (u_int8) free block map */
-	int32_t	 cg_nextfreeoff;	/* (u_int8) next available space */
-	int32_t	 cg_clustersumoff;	/* (u_int32) counts of avail clusters */
-	int32_t	 cg_clusteroff;		/* (u_int8) free cluster map */
-	int32_t	 cg_nclusterblks;	/* number of clusters this cg */
-	int32_t	 cg_sparecon[13];	/* reserved for future use */
-	u_int8_t cg_space[1];		/* space for cylinder group maps */
-/* actually longer */
-};
-
-/*
- * Macros for access to cylinder group array structures
- */
-#define cg_blktot(cgp) \
-    (((cgp)->cg_magic != CG_MAGIC) \
-    ? (((struct ocg *)(cgp))->cg_btot) \
-    : ((int32_t *)((u_int8_t *)(cgp) + (cgp)->cg_btotoff)))
-#define cg_blks(fs, cgp, cylno) \
-    (((cgp)->cg_magic != CG_MAGIC) \
-    ? (((struct ocg *)(cgp))->cg_b[cylno]) \
-    : ((int16_t *)((u_int8_t *)(cgp) + \
-	(cgp)->cg_boff) + (cylno) * (fs)->fs_nrpos))
-#define cg_inosused(cgp) \
-    (((cgp)->cg_magic != CG_MAGIC) \
-    ? (((struct ocg *)(cgp))->cg_iused) \
-    : ((u_int8_t *)((u_int8_t *)(cgp) + (cgp)->cg_iusedoff)))
-#define cg_blksfree(cgp) \
-    (((cgp)->cg_magic != CG_MAGIC) \
-    ? (((struct ocg *)(cgp))->cg_free) \
-    : ((u_int8_t *)((u_int8_t *)(cgp) + (cgp)->cg_freeoff)))
-#define cg_chkmagic(cgp) \
-    ((cgp)->cg_magic == CG_MAGIC || ((struct ocg *)(cgp))->cg_magic == CG_MAGIC)
-#define cg_clustersfree(cgp) \
-    ((u_int8_t *)((u_int8_t *)(cgp) + (cgp)->cg_clusteroff))
-#define cg_clustersum(cgp) \
-    ((int32_t *)((u_int8_t *)(cgp) + (cgp)->cg_clustersumoff))
-
-/*
- * The following structure is defined
- * for compatibility with old file systems.
- */
-struct ocg {
-	int32_t	 cg_firstfield;		/* historic linked list of cyl groups */
-	int32_t	 cg_unused_1;		/*     used for incore cyl groups */
-	time_t	 cg_time;		/* time last written */
-	int32_t	 cg_cgx;		/* we are the cgx'th cylinder group */
-	int16_t	 cg_ncyl;		/* number of cyl's this cg */
-	int16_t	 cg_niblk;		/* number of inode blocks this cg */
-	int32_t	 cg_ndblk;		/* number of data blocks this cg */
-	struct	csum cg_cs;		/* cylinder summary information */
-	int32_t	 cg_rotor;		/* position of last used block */
-	int32_t	 cg_frotor;		/* position of last used frag */
-	int32_t	 cg_irotor;		/* position of last used inode */
-	int32_t	 cg_frsum[8];		/* counts of available frags */
-	int32_t	 cg_btot[32];		/* block totals per cylinder */
-	int16_t	 cg_b[32][8];		/* positions of free blocks */
-	u_int8_t cg_iused[256];		/* used inode map */
-	int32_t	 cg_magic;		/* magic number */
-	u_int8_t cg_free[1];		/* free block map */
-/* actually longer */
-};
-
-/*
- * Turn file system block numbers into disk block addresses.
- * This maps file system blocks to device size blocks.
- */
-#define fsbtodb(fs, b)	((b) << (fs)->fs_fsbtodb)
-#define	dbtofsb(fs, b)	((b) >> (fs)->fs_fsbtodb)
-
-/*
- * Cylinder group macros to locate things in cylinder groups.
- * They calc file system addresses of cylinder group data structures.
- */
-#define	cgbase(fs, c)	((ufs_daddr_t)((fs)->fs_fpg * (c)))
-#define	cgdmin(fs, c)	(cgstart(fs, c) + (fs)->fs_dblkno)	/* 1st data */
-#define	cgimin(fs, c)	(cgstart(fs, c) + (fs)->fs_iblkno)	/* inode blk */
-#define	cgsblock(fs, c)	(cgstart(fs, c) + (fs)->fs_sblkno)	/* super blk */
-#define	cgtod(fs, c)	(cgstart(fs, c) + (fs)->fs_cblkno)	/* cg block */
-#define cgstart(fs, c)							\
-	(cgbase(fs, c) + (fs)->fs_cgoffset * ((c) & ~((fs)->fs_cgmask)))
-
-/*
- * Macros for handling inode numbers:
- *     inode number to file system block offset.
- *     inode number to cylinder group number.
- *     inode number to file system block address.
- */
-#define	ino_to_cg(fs, x)	((x) / (fs)->fs_ipg)
-#define	ino_to_fsba(fs, x)						\
-	((ufs_daddr_t)(cgimin(fs, ino_to_cg(fs, x)) +			\
-	    (blkstofrags((fs), (((x) % (fs)->fs_ipg) / INOPB(fs))))))
-#define	ino_to_fsbo(fs, x)	((x) % INOPB(fs))
-
-/*
- * Give cylinder group number for a file system block.
- * Give cylinder group block number for a file system block.
- */
-#define	dtog(fs, d)	((d) / (fs)->fs_fpg)
-#define	dtogd(fs, d)	((d) % (fs)->fs_fpg)
-
-/*
- * Extract the bits for a block from a map.
- * Compute the cylinder and rotational position of a cyl block addr.
- */
-#define blkmap(fs, map, loc) \
-    (((map)[(loc) / NBBY] >> ((loc) % NBBY)) & (0xff >> (NBBY - (fs)->fs_frag)))
-#define cbtocylno(fs, bno) \
-    ((bno) * NSPF(fs) / (fs)->fs_spc)
-#define cbtorpos(fs, bno) \
-    (((bno) * NSPF(fs) % (fs)->fs_spc / (fs)->fs_nsect * (fs)->fs_trackskew + \
-     (bno) * NSPF(fs) % (fs)->fs_spc % (fs)->fs_nsect * (fs)->fs_interleave) % \
-     (fs)->fs_nsect * (fs)->fs_nrpos / (fs)->fs_npsect)
-
-/*
- * The following macros optimize certain frequently calculated
- * quantities by using shifts and masks in place of divisions
- * modulos and multiplications.
- */
-#define blkoff(fs, loc)		/* calculates (loc % fs->fs_bsize) */ \
-	((loc) & (fs)->fs_qbmask)
-#define fragoff(fs, loc)	/* calculates (loc % fs->fs_fsize) */ \
-	((loc) & (fs)->fs_qfmask)
-#define lblktosize(fs, blk)	/* calculates ((off_t)blk * fs->fs_bsize) */ \
-	((off_t)(blk) << (fs)->fs_bshift)
-/* Use this only when `blk' is known to be small, e.g., < NDADDR. */
-#define smalllblktosize(fs, blk)    /* calculates (blk * fs->fs_bsize) */ \
-	((blk) << (fs)->fs_bshift)
-#define lblkno(fs, loc)		/* calculates (loc / fs->fs_bsize) */ \
-	((loc) >> (fs)->fs_bshift)
-#define numfrags(fs, loc)	/* calculates (loc / fs->fs_fsize) */ \
-	((loc) >> (fs)->fs_fshift)
-#define blkroundup(fs, size)	/* calculates roundup(size, fs->fs_bsize) */ \
-	(((size) + (fs)->fs_qbmask) & (fs)->fs_bmask)
-#define fragroundup(fs, size)	/* calculates roundup(size, fs->fs_fsize) */ \
-	(((size) + (fs)->fs_qfmask) & (fs)->fs_fmask)
-#define fragstoblks(fs, frags)	/* calculates (frags / fs->fs_frag) */ \
-	((frags) >> (fs)->fs_fragshift)
-#define blkstofrags(fs, blks)	/* calculates (blks * fs->fs_frag) */ \
-	((blks) << (fs)->fs_fragshift)
-#define fragnum(fs, fsb)	/* calculates (fsb % fs->fs_frag) */ \
-	((fsb) & ((fs)->fs_frag - 1))
-#define blknum(fs, fsb)		/* calculates rounddown(fsb, fs->fs_frag) */ \
-	((fsb) &~ ((fs)->fs_frag - 1))
-
-/*
- * Determine the number of available frags given a
- * percentage to hold in reserve.
- */
-#define freespace(fs, percentreserved) \
-	(blkstofrags((fs), (fs)->fs_cstotal.cs_nbfree) + \
-	(fs)->fs_cstotal.cs_nffree - \
-	((off_t)((fs)->fs_dsize) * (percentreserved) / 100))
-
-/*
- * Determining the size of a file block in the file system.
- */
-#define blksize(fs, ip, lbn) \
-	(((lbn) >= NDADDR || (ip)->i_size >= smalllblktosize(fs, (lbn) + 1)) \
-	    ? (fs)->fs_bsize \
-	    : (fragroundup(fs, blkoff(fs, (ip)->i_size))))
-#define dblksize(fs, dip, lbn) \
-	(((lbn) >= NDADDR || (dip)->di_size >= smalllblktosize(fs, (lbn) + 1)) \
-	    ? (fs)->fs_bsize \
-	    : (fragroundup(fs, blkoff(fs, (dip)->di_size))))
-#define sblksize(fs, size, lbn) \
-	(((lbn) >= NDADDR || (size) >= ((lbn) + 1) << (fs)->fs_bshift) \
-	  ? (fs)->fs_bsize \
-	  : (fragroundup(fs, blkoff(fs, (size)))))
-
-
-/*
- * Number of disk sectors per block/fragment; assumes DEV_BSIZE byte
- * sector size.
- */
-#define	NSPB(fs)	((fs)->fs_nspf << (fs)->fs_fragshift)
-#define	NSPF(fs)	((fs)->fs_nspf)
-
-/*
- * Number of inodes in a secondary storage block/fragment.
- */
-#define	INOPB(fs)	((fs)->fs_inopb)
-#define	INOPF(fs)	((fs)->fs_inopb >> (fs)->fs_fragshift)
-
-/*
- * Number of indirects in a file system block.
- */
-#define	NINDIR(fs)	((fs)->fs_nindir)
-
-extern int inside[], around[];
-extern u_char *fragtbl[];
-
-#endif
diff --git a/sys/boot/pc98/boot2/inode.h b/sys/boot/pc98/boot2/inode.h
deleted file mode 100644
index add9bb9f9ab..00000000000
--- a/sys/boot/pc98/boot2/inode.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (c) 1982, 1989, 1993
- *	The Regents of the University of California.  All rights reserved.
- * (c) UNIX System Laboratories, Inc.
- * All or some portions of this file are derived from material licensed
- * to the University of California by American Telephone and Telegraph
- * Co. or Unix System Laboratories, Inc. and are reproduced herein with
- * the permission of UNIX System Laboratories, Inc.
- *
- * 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.
- *
- *	@(#)inode.h	8.9 (Berkeley) 5/14/95
- * %FreeBSD: src/sys/ufs/ufs/inode.h,v 1.28.2.2 2001/09/29 12:52:52 iedowse Exp %
- * $FreeBSD$
- */
-
-#ifndef _UFS_UFS_INODE_H_
-#define	_UFS_UFS_INODE_H_
-
-#include 
-#include 
-#include 
-#include "dinode.h"
-
-/*
- * The size of a logical block number.
- */
-typedef long ufs_lbn_t;
-
-/*
- * This must agree with the definition in .
- */
-#define	doff_t		int32_t
-
-/*
- * The inode is used to describe each active (or recently active) file in the
- * UFS filesystem. It is composed of two types of information. The first part
- * is the information that is needed only while the file is active (such as
- * the identity of the file and linkage to speed its lookup). The second part
- * is the permanent meta-data associated with the file which is read in
- * from the permanent dinode from long term storage when the file becomes
- * active, and is put back when the file is no longer being used.
- */
-struct inode {
-	struct	 lock i_lock;	/* Inode lock. >Keep this first< */
-	LIST_ENTRY(inode) i_hash;/* Hash chain. */
-	struct	vnode  *i_vnode;/* Vnode associated with this inode. */
-	struct	vnode  *i_devvp;/* Vnode for block I/O. */
-	u_int32_t i_flag;	/* flags, see below */
-	dev_t	  i_dev;	/* Device associated with the inode. */
-	ino_t	  i_number;	/* The identity of the inode. */
-	int	  i_effnlink;	/* i_nlink when I/O completes */
-
-	union {			/* Associated filesystem. */
-		struct	fs *fs;		/* FFS */
-		struct	ext2_sb_info *e2fs;	/* EXT2FS */
-	} inode_u;
-#define	i_fs	inode_u.fs
-#define	i_e2fs	inode_u.e2fs
-	struct	 dquot *i_dquot[MAXQUOTAS]; /* Dquot structures. */
-	u_quad_t i_modrev;	/* Revision level for NFS lease. */
-	struct	 lockf *i_lockf;/* Head of byte-level lock list. */
-	/*
-	 * Side effects; used during directory lookup.
-	 */
-	int32_t	  i_count;	/* Size of free slot in directory. */
-	doff_t	  i_endoff;	/* End of useful stuff in directory. */
-	doff_t	  i_diroff;	/* Offset in dir, where we found last entry. */
-	doff_t	  i_offset;	/* Offset of free space in directory. */
-	ino_t	  i_ino;	/* Inode number of found directory. */
-	u_int32_t i_reclen;	/* Size of found directory entry. */
-	u_int32_t i_spare[3];	/* XXX actually non-spare (for ext2fs). */
-
-	struct dirhash *i_dirhash; /* Hashing for large directories */
-	/*
-	 * The on-disk dinode itself.
-	 */
-	struct	dinode i_din;	/* 128 bytes of the on-disk dinode. */
-};
-
-#define	i_atime		i_din.di_atime
-#define	i_atimensec	i_din.di_atimensec
-#define	i_blocks	i_din.di_blocks
-#define	i_ctime		i_din.di_ctime
-#define	i_ctimensec	i_din.di_ctimensec
-#define	i_db		i_din.di_db
-#define	i_flags		i_din.di_flags
-#define	i_gen		i_din.di_gen
-#define	i_gid		i_din.di_gid
-#define	i_ib		i_din.di_ib
-#define	i_mode		i_din.di_mode
-#define	i_mtime		i_din.di_mtime
-#define	i_mtimensec	i_din.di_mtimensec
-#define	i_nlink		i_din.di_nlink
-#define	i_rdev		i_din.di_rdev
-#define	i_shortlink	i_din.di_shortlink
-#define	i_size		i_din.di_size
-#define	i_uid		i_din.di_uid
-
-/* These flags are kept in i_flag. */
-#define	IN_ACCESS	0x0001		/* Access time update request. */
-#define	IN_CHANGE	0x0002		/* Inode change time update request. */
-#define	IN_UPDATE	0x0004		/* Modification time update request. */
-#define	IN_MODIFIED	0x0008		/* Inode has been modified. */
-#define	IN_RENAME	0x0010		/* Inode is being renamed. */
-#define	IN_SHLOCK	0x0020		/* File has shared lock. */
-#define	IN_EXLOCK	0x0040		/* File has exclusive lock. */
-#define	IN_HASHED	0x0080		/* Inode is on hash list */
-#define	IN_LAZYMOD	0x0100		/* Modified, but don't write yet. */
-
-#ifdef _KERNEL
-/*
- * Structure used to pass around logical block paths generated by
- * ufs_getlbns and used by truncate and bmap code.
- */
-struct indir {
-	ufs_daddr_t in_lbn;		/* Logical block number. */
-	int	in_off;			/* Offset in buffer. */
-	int	in_exists;		/* Flag if the block exists. */
-};
-
-/* Convert between inode pointers and vnode pointers. */
-#define VTOI(vp)	((struct inode *)(vp)->v_data)
-#define ITOV(ip)	((ip)->i_vnode)
-
-/* Determine if soft dependencies are being done */
-#define DOINGSOFTDEP(vp)	((vp)->v_mount->mnt_flag & MNT_SOFTDEP)
-#define DOINGASYNC(vp)		((vp)->v_mount->mnt_kern_flag & MNTK_ASYNC)
-
-/* This overlays the fid structure (see mount.h). */
-struct ufid {
-	u_int16_t ufid_len;	/* Length of structure. */
-	u_int16_t ufid_pad;	/* Force 32-bit alignment. */
-	ino_t	  ufid_ino;	/* File number (ino). */
-	int32_t	  ufid_gen;	/* Generation number. */
-};
-#endif /* _KERNEL */
-
-#endif /* !_UFS_UFS_INODE_H_ */
diff --git a/sys/boot/pc98/boot2/io.c b/sys/boot/pc98/boot2/io.c
deleted file mode 100644
index a6b9bdce697..00000000000
--- a/sys/boot/pc98/boot2/io.c
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:35:57  rpd
- */
-
-#include 
-__FBSDID("$FreeBSD$");
-
-#include "boot.h"
-#include 
-#include 
-#include 
-
-static int getchar(int in_buf);
-
-/*
- * Gate A20 for high memory
- */
-void
-gateA20(void)
-{
-	outb(0xf2, 0x00);
-	outb(0xf6, 0x02);
-}
-
-/* printf - only handles %d as decimal, %c as char, %s as string */
-
-void
-printf(const char *format, ...)
-{
-	int *dataptr = (void *)&format;
-	char c;
-
-	dataptr++;
-	while ((c = *format++))
-		if (c != '%')
-			putchar(c);
-		else
-			switch (c = *format++) {
-			      case 'd': {
-				      int num = *dataptr++;
-				      char buf[10], *ptr = buf;
-				      if (num<0) {
-					      num = -num;
-					      putchar('-');
-				      }
-				      do
-					      *ptr++ = '0'+num%10;
-				      while (num /= 10);
-				      do
-					      putchar(*--ptr);
-				      while (ptr != buf);
-				      break;
-			      }
-			      case 'x': {
-				      unsigned int num = *dataptr++, dig;
-				      char buf[8], *ptr = buf;
-				      do
-					      *ptr++ = (dig=(num&0xf)) > 9?
-							'a' + dig - 10 :
-							'0' + dig;
-				      while (num >>= 4);
-				      do
-					      putchar(*--ptr);
-				      while (ptr != buf);
-				      break;
-			      }
-			      case 'c': putchar((*dataptr++)&0xff); break;
-			      case 's': {
-				      char *ptr = (char *)*dataptr++;
-				      while ((c = *ptr++))
-					      putchar(c);
-				      break;
-			      }
-			}
-}
-
-void
-putchar(int c)
-{
-	if (c == '\n')
-		putchar('\r');
-	if (loadflags & RB_DUAL) {
-		putc(c);
-		serial_putc(c);
-	} else if (loadflags & RB_SERIAL)
-		serial_putc(c);
-	else
-		putc(c);
-}
-
-static int
-getchar(int in_buf)
-{
-	int c;
-
-loop:
-	if (loadflags & RB_DUAL) {
-		if (ischar())
-			c = getc();
-		else if (serial_ischar())
-			c = serial_getc();
-		else
-			goto loop;
-	} else if (loadflags & RB_SERIAL)
-		c = serial_getc();
-	else
-		c = getc();
-	if (c == '\r')
-		c = '\n';
-	if (c == '\b') {
-		if (in_buf != 0) {
-			putchar('\b');
-			putchar(' ');
-		} else {
-			goto loop;
-		}
-	}
-	putchar(c);
-	return(c);
-}
-
-/*
- * This routine uses an inb to an unused port, the time to execute that
- * inb is approximately 1.25uS.  This value is pretty constant across
- * all CPU's and all buses, with the exception of some PCI implentations
- * that do not forward this I/O address to the ISA bus as they know it
- * is not a valid ISA bus address, those machines execute this inb in
- * 60 nS :-(.
- *
- * XXX this should be converted to use bios_tick.
- */
-void
-delay1ms(void)
-{
-	int i = 800;
-
-	while (--i >= 0)
-	    (void)outb(0x5f,0);		/* about 600ns */
-}
-
-static __inline int
-isch(void)
-{
-	int isc;
-
-	/*
-	 * Checking the keyboard has the side effect of enabling clock
-	 * interrupts so that bios_tick works.  Check the keyboard to
-	 * get this side effect even if we only want the serial status.
-	 */
-	isc = ischar();
-
-	if (loadflags & RB_DUAL) {
-		if (isc != 0)
-			return (isc);
-	} else if (!(loadflags & RB_SERIAL))
-		return (isc);
-	return (serial_ischar());
-}
-
-static __inline unsigned
-pword(unsigned physaddr)
-{
-	static int counter = 0;
-	int i;
-
-	for (i = 0; i < 512; i++)
-		(void)outb(0x5f, 0);
-
-	return (counter++);
-}
-
-int
-gets(char *buf)
-{
-#define bios_tick		pword(0x46c)
-#define BIOS_TICK_MS		1
-	unsigned initial_bios_tick;
-	char *ptr=buf;
-
-#if BOOTWAIT
-	for (initial_bios_tick = bios_tick;
-	     bios_tick - initial_bios_tick < BOOTWAIT / BIOS_TICK_MS;)
-#endif
-		if (isch())
-			for (;;) {
-				switch(*ptr = getchar(ptr - buf) & 0xff) {
-				      case '\n':
-				      case '\r':
-					*ptr = '\0';
-					return 1;
-				      case '\b':
-					if (ptr > buf) ptr--;
-					continue;
-				      default:
-					ptr++;
-				}
-#if TIMEOUT + 0
-#if !BOOTWAIT
-#error "TIMEOUT without BOOTWAIT"
-#endif
-				for (initial_bios_tick = bios_tick;;) {
-					if (isch())
-						break;
-					if (bios_tick - initial_bios_tick >=
-					    TIMEOUT / BIOS_TICK_MS)
-					return 0;
-				}
-#endif
-			}
-	return 0;
-}
-
-int
-strcmp(const char *s1, const char *s2)
-{
-	while (*s1 == *s2) {
-		if (!*s1++)
-			return 0;
-		s2++;
-	}
-	return 1;
-}
-
-#ifdef CDBOOT
-int
-strcasecmp(const char *s1, const char *s2)
-{
-	/*
-	 * We only consider ASCII chars and don't anticipate
-	 * control characters (they are invalid in filenames
-	 * anyway).
-	 */
-	while ((*s1 & 0x5f) == (*s2 & 0x5f)) {
-		if (!*s1++)
-			return 0;
-		s2++;
-	}
-	return 1;
-}
-#endif /* !CDBOOT */
-
-void
-memcpy(const void *from, void *to, size_t len)
-{
-	const char *fp = (const char *)from;
-	char *tp = (char *)to;
-
-	while (len-- > 0)
-		*tp++ = *fp++;
-}
-
-/* To quote Ken: "You are not expected to understand this." :) */
-
-void
-twiddle(void)
-{
-	putchar((char)tw_chars);
-	tw_chars = (tw_chars >> 8) | ((tw_chars & (unsigned long)0xFF) << 24);
-	putchar('\b');
-}
-
-static unsigned short *Crtat = (unsigned short *)0;
-static int row;
-static int col;
-
-void putc(int c)
-{
-	static unsigned short *crtat;
-	unsigned char sys_type;
-	unsigned short *cp;
-	int i, pos;
-
-	if (Crtat == 0) {
-		sys_type = *(unsigned char *)V(0xA1501);
-		if (sys_type & 0x08) {
-			Crtat = (unsigned short *)V(0xE0000);
-			crtat = Crtat;
-			row = 31;
-			col = 80;
-		} else {
-			Crtat = (unsigned short *)V(0xA0000);
-			crtat = Crtat;
-			row = 25;
-			col = 80;
-		}
-	}
-
-	switch(c) {
-	case '\t':
-		do {
-			putc(' ');
-		} while ((int)crtat % 16);
-		break;
-	case '\b':
-		crtat--;
-		break;
-	case '\r':
-		crtat -= (crtat - Crtat) % col;
-		break;
-	case '\n':
-		crtat += col;
-		break;
-	default:
-		*crtat = (c == 0x5c ? 0xfc : c);
-		*(crtat++ + 0x1000) = 0xe1;
-		break;
-	}
-
-	if (crtat >= Crtat + col * row) {
-		cp = Crtat;
-		for (i = 1; i < row; i++) {
-			memcpy((void *)(cp+col), (void *)cp, col*2);
-			cp += col;
-		}
-		for (i = 0; i < col; i++) {
-			*cp++ = ' ';
-		}
-		crtat -= col;
-	}
-	pos = crtat - Crtat;
-	while((inb(0x60) & 0x04) == 0) {}
-	outb(0x62, 0x49);
-	outb(0x60, pos & 0xff);
-	outb(0x60, pos >> 8);
-}
-
-void machine_check(void)
-{
-	int	ret;
-	int	i;
-	int	data = 0;
-	
-	/* PC98_SYSTEM_PARAMETER(0x501) */
-	ret = ((*(unsigned char*)V(0xA1501)) & 0x08) >> 3;
-
-	/* Wait V-SYNC */
-	while (inb(0x60) & 0x20) {}
-	while (!(inb(0x60) & 0x20)) {}
-
-	/* ANK 'A' font */
-	outb(0xa1, 0x00);
-	outb(0xa3, 0x41);
-
-	/* M_NORMAL, use CG window (all NEC OK)  */
-	/* sum */
-	for (i = 0; i < 4; i++) {
-		data += *((unsigned long*)V(0xA4000) + i);/* 0xa4000 */
-	}
-	if (data == 0x6efc58fc) { /* DA data */
-		ret |= M_NEC_PC98;
-	} else {
-		ret |= M_EPSON_PC98;
-	}
-	ret |= (inb(0x42) & 0x20) ? M_8M : 0;
-
-	/* PC98_SYSTEM_PARAMETER(0x400) */
-	if ((*(unsigned char*)V(0xA1400)) & 0x80) {
-		ret |= M_NOTE;
-	}
-	if (ret & M_NEC_PC98) {
-		/* PC98_SYSTEM_PARAMETER(0x458) */
-		if ((*(unsigned char*)V(0xA1458)) & 0x80) {
-			ret |= M_H98;
-		} else {
-			ret |= M_NOT_H98;
-		}
-	} else
-		ret |= M_NOT_H98;
-
-	(*(unsigned long *)V(0xA1620)) = ret;
-}
diff --git a/sys/boot/pc98/boot2/quota.h b/sys/boot/pc98/boot2/quota.h
deleted file mode 100644
index 324131acf56..00000000000
--- a/sys/boot/pc98/boot2/quota.h
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * Copyright (c) 1982, 1986, 1993
- *	The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Robert Elz at The University of Melbourne.
- *
- * 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.
- *
- *	@(#)quota.h	8.3 (Berkeley) 8/19/94
- * %FreeBSD: src/sys/ufs/ufs/quota.h,v 1.15 1999/12/29 04:55:05 peter Exp %
- * $FreeBSD$
- */
-
-#ifndef _UFS_UFS_QUOTA_H_
-#define	_UFS_UFS_QUOTA_H_
-
-/*
- * Definitions for disk quotas imposed on the average user
- * (big brother finally hits UNIX).
- *
- * The following constants define the amount of time given a user before the
- * soft limits are treated as hard limits (usually resulting in an allocation
- * failure). The timer is started when the user crosses their soft limit, it
- * is reset when they go below their soft limit.
- */
-#define	MAX_IQ_TIME	(7*24*60*60)	/* seconds in 1 week */
-#define	MAX_DQ_TIME	(7*24*60*60)	/* seconds in 1 week */
-
-/*
- * The following constants define the usage of the quota file array in the
- * ufsmount structure and dquot array in the inode structure.  The semantics
- * of the elements of these arrays are defined in the routine getinoquota;
- * the remainder of the quota code treats them generically and need not be
- * inspected when changing the size of the array.
- */
-#define	MAXQUOTAS	2
-#define	USRQUOTA	0	/* element used for user quotas */
-#define	GRPQUOTA	1	/* element used for group quotas */
-
-/*
- * Definitions for the default names of the quotas files.
- */
-#define INITQFNAMES { \
-	"user",		/* USRQUOTA */ \
-	"group",	/* GRPQUOTA */ \
-	"undefined", \
-}
-#define	QUOTAFILENAME	"quota"
-#define	QUOTAGROUP	"operator"
-
-/*
- * Command definitions for the 'quotactl' system call.  The commands are
- * broken into a main command defined below and a subcommand that is used
- * to convey the type of quota that is being manipulated (see above).
- */
-#define SUBCMDMASK	0x00ff
-#define SUBCMDSHIFT	8
-#define	QCMD(cmd, type)	(((cmd) << SUBCMDSHIFT) | ((type) & SUBCMDMASK))
-
-#define	Q_QUOTAON	0x0100	/* enable quotas */
-#define	Q_QUOTAOFF	0x0200	/* disable quotas */
-#define	Q_GETQUOTA	0x0300	/* get limits and usage */
-#define	Q_SETQUOTA	0x0400	/* set limits and usage */
-#define	Q_SETUSE	0x0500	/* set usage */
-#define	Q_SYNC		0x0600	/* sync disk copy of a filesystems quotas */
-
-/*
- * The following structure defines the format of the disk quota file
- * (as it appears on disk) - the file is an array of these structures
- * indexed by user or group number.  The setquota system call establishes
- * the vnode for each quota file (a pointer is retained in the ufsmount
- * structure).
- */
-struct dqblk {
-	u_int32_t dqb_bhardlimit;	/* absolute limit on disk blks alloc */
-	u_int32_t dqb_bsoftlimit;	/* preferred limit on disk blks */
-	u_int32_t dqb_curblocks;	/* current block count */
-	u_int32_t dqb_ihardlimit;	/* maximum # allocated inodes + 1 */
-	u_int32_t dqb_isoftlimit;	/* preferred inode limit */
-	u_int32_t dqb_curinodes;	/* current # allocated inodes */
-	time_t	  dqb_btime;		/* time limit for excessive disk use */
-	time_t	  dqb_itime;		/* time limit for excessive files */
-};
-
-#ifdef _KERNEL
-
-#include 
-
-/*
- * The following structure records disk usage for a user or group on a
- * filesystem. There is one allocated for each quota that exists on any
- * filesystem for the current user or group. A cache is kept of recently
- * used entries.
- */
-struct dquot {
-	LIST_ENTRY(dquot) dq_hash;	/* hash list */
-	TAILQ_ENTRY(dquot) dq_freelist;	/* free list */
-	u_int16_t dq_flags;		/* flags, see below */
-	u_int16_t dq_cnt;		/* count of active references */
-	u_int16_t dq_spare;		/* unused spare padding */
-	u_int16_t dq_type;		/* quota type of this dquot */
-	u_int32_t dq_id;		/* identifier this applies to */
-	struct	ufsmount *dq_ump;	/* filesystem that this is taken from */
-	struct	dqblk dq_dqb;		/* actual usage & quotas */
-};
-/*
- * Flag values.
- */
-#define	DQ_LOCK		0x01		/* this quota locked (no MODS) */
-#define	DQ_WANT		0x02		/* wakeup on unlock */
-#define	DQ_MOD		0x04		/* this quota modified since read */
-#define	DQ_FAKE		0x08		/* no limits here, just usage */
-#define	DQ_BLKS		0x10		/* has been warned about blk limit */
-#define	DQ_INODS	0x20		/* has been warned about inode limit */
-/*
- * Shorthand notation.
- */
-#define	dq_bhardlimit	dq_dqb.dqb_bhardlimit
-#define	dq_bsoftlimit	dq_dqb.dqb_bsoftlimit
-#define	dq_curblocks	dq_dqb.dqb_curblocks
-#define	dq_ihardlimit	dq_dqb.dqb_ihardlimit
-#define	dq_isoftlimit	dq_dqb.dqb_isoftlimit
-#define	dq_curinodes	dq_dqb.dqb_curinodes
-#define	dq_btime	dq_dqb.dqb_btime
-#define	dq_itime	dq_dqb.dqb_itime
-
-/*
- * If the system has never checked for a quota for this file, then it is
- * set to NODQUOT.  Once a write attempt is made the inode pointer is set
- * to reference a dquot structure.
- */
-#define	NODQUOT		NULL
-
-/*
- * Flags to chkdq() and chkiq()
- */
-#define	FORCE	0x01	/* force usage changes independent of limits */
-#define	CHOWN	0x02	/* (advisory) change initiated by chown */
-
-/*
- * Macros to avoid subroutine calls to trivial functions.
- */
-#ifdef DIAGNOSTIC
-#define	DQREF(dq)	dqref(dq)
-#else
-#define	DQREF(dq)	(dq)->dq_cnt++
-#endif
-
-struct inode;
-struct mount;
-struct proc;
-struct ucred;
-struct vnode;
-
-int	chkdq __P((struct inode *, long, struct ucred *, int));
-int	chkiq __P((struct inode *, long, struct ucred *, int));
-void	dqinit __P((void));
-void	dqrele __P((struct vnode *, struct dquot *));
-int	getinoquota __P((struct inode *));
-int	getquota __P((struct mount *, u_long, int, caddr_t));
-int	qsync __P((struct mount *mp));
-int	quotaoff __P((struct proc *, struct mount *, int));
-int	quotaon __P((struct proc *, struct mount *, int, caddr_t));
-int	setquota __P((struct mount *, u_long, int, caddr_t));
-int	setuse __P((struct mount *, u_long, int, caddr_t));
-int	ufs_quotactl __P((struct mount *, int, uid_t, caddr_t, struct proc *));
-
-#else /* !_KERNEL */
-
-#include 
-
-__BEGIN_DECLS
-int	quotactl __P((const char *, int, int, void *));
-__END_DECLS
-
-#endif /* _KERNEL */
-
-#endif /* !_UFS_UFS_QUOTA_H_ */
diff --git a/sys/boot/pc98/boot2/serial.S b/sys/boot/pc98/boot2/serial.S
deleted file mode 100644
index ea7b98aac4e..00000000000
--- a/sys/boot/pc98/boot2/serial.S
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- * 
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- * 
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- * 
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:34:26  rpd
- * $FreeBSD$
- */
-
-/*
-  Copyright 1988, 1989, 1990, 1991, 1992 
-   by Intel Corporation, Santa Clara, California.
-
-                All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appears in all
-copies and that both the copyright notice and this permission notice
-appear in supporting documentation, and that the name of Intel
-not be used in advertising or publicity pertaining to distribution
-of the software without specific, written prior permission.
-
-INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
-IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
-NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-#if COMCONSOLE == 0x238
-#include "serial_16550.S"
-#else
-#include "serial_8251.S"
-#endif
diff --git a/sys/boot/pc98/boot2/serial_16550.S b/sys/boot/pc98/boot2/serial_16550.S
deleted file mode 100644
index 114a369c8c9..00000000000
--- a/sys/boot/pc98/boot2/serial_16550.S
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- * 
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- * 
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- * 
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:34:26  rpd
- * $FreeBSD$
- */
-
-/*
-  Copyright 1988, 1989, 1990, 1991, 1992 
-   by Intel Corporation, Santa Clara, California.
-
-                All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appears in all
-copies and that both the copyright notice and this permission notice
-appear in supporting documentation, and that the name of Intel
-not be used in advertising or publicity pertaining to distribution
-of the software without specific, written prior permission.
-
-INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
-IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
-NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-/*
- * Serial bootblock interface routines
- * Copyright (c) 1994, J"org Wunsch
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * THE AUTHOR ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  THE AUTHOR DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- */ 
-
-	.file	"serial.S"
-
-#include 
-#include "asm.h"
-
-	.text
-
-/*
- * The serial port interface routines implement a simple polled i/o
- * interface to a standard serial port.  Due to the space restrictions
- * for the boot blocks, no BIOS support is used (since BIOS requires
- * expensive real/protected mode switches), instead the rudimentary
- * BIOS support is duplicated here.
- *
- * The base address and speed for the i/o port are passed from the
- * Makefile in the COMCONSOLE and COMSPEED preprocessor macros.  The
- * line control parameters are currently hard-coded to 8 bits, no
- * parity, 1 stop bit (8N1).  This can be changed in init_serial().
- */
-
-/*
- * void serial_putc(int ch);
- *	Write character `ch' to port COMCONSOLE.
- */
-ENTRY(serial_putc)
-	movl	$10000, %ecx	# timeout
-	movl	$COMCONSOLE + 5, %edx	# line status reg
-1:
-	decl	%ecx
-	je	2f
-	inb	%dx, %al
-	testb	$0x20, %al
-	je	1b		# TX buffer not empty
-
-	movb	4(%esp), %al
-
-	subl	$5, %edx	# TX output reg
-	outb	%al, %dx	# send this one
-
-2:
-	ret
-
-/*
- * int serial_getc(void);
- *	Read a character from port COMCONSOLE.
- */
-ENTRY(serial_getc)
-	mov	$COMCONSOLE + 5, %edx	# line status reg
-1:
-	inb	%dx, %al
-	testb	$0x01, %al
-	je	1b		# no rx char available
-
-	xorl	%eax, %eax
-	subl	$5, %edx	# rx buffer reg
-	inb	%dx, %al	# fetch (first) character
-
-	andb	$0x7F, %al	# remove any parity bits we get
-	cmpb	$0x7F, %al	# make DEL...
-	jne	2f
-	movb	$0x08, %al	# look like BS
-2:
-	ret
-
-/*
- * int serial_ischar(void);
- *       If there is a character in the input buffer of port COMCONSOLE,
- *       return nonzero; otherwise return 0.
- */
-ENTRY(serial_ischar)
-	xorl	%eax, %eax
-	movl	$COMCONSOLE + 5, %edx	# line status reg
-	inb	%dx, %al
-	andb	$0x01, %al		# rx char available?
-	ret
-
-/*
- * void init_serial(void);
- * 	Initialize port COMCONSOLE to speed COMSPEED, line settings 8N1.
- */
-ENTRY(init_serial)
-	movl	$COMCONSOLE + 3, %edx	# line control reg
-	movb	$0x80, %al
-	outb	%al, %dx	# enable DLAB
-
-	subl	$3, %edx	# divisor latch, low byte
-	movb	(1843200 / (16*(COMSPEED))) & 0xff, %al
-	outb	%al, %dx
-	incl	%edx		# divisor latch, high byte
-	movb	(1843200 / (16*(COMSPEED))) >> 8, %al
-	outb	%al, %dx
-
-	incl	%edx		# fifo control register (if any)
-	xorl	%eax,%eax
-	outb	%al, %dx	# disable fifo to reduce worst-case busy-wait
-
-	incl	%edx		# line control reg
-	movb	$0x03, %al
-	outb	%al, %dx	# 8N1
-
-	incl	%edx		# modem control reg
-	outb	%al, %dx	# enable DTR/RTS
-
-	/* Flush the input buffer. */
-	incl	%edx		# line status reg
-1:
-	subl	$5, %edx	# rx buffer reg
-	inb	%dx, %al	# throw away (unconditionally the first time)
-	addl	$5, %edx	# line status reg
-	inb	%dx, %al
-	testb	$0x01, %al
-	jne	1b		# more
-
-	ret
diff --git a/sys/boot/pc98/boot2/serial_8251.S b/sys/boot/pc98/boot2/serial_8251.S
deleted file mode 100644
index 217dbdb1769..00000000000
--- a/sys/boot/pc98/boot2/serial_8251.S
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- * 
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- * 
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- * 
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:34:26  rpd
- * $FreeBSD$
- */
-
-/*
-  Copyright 1988, 1989, 1990, 1991, 1992 
-   by Intel Corporation, Santa Clara, California.
-
-                All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appears in all
-copies and that both the copyright notice and this permission notice
-appear in supporting documentation, and that the name of Intel
-not be used in advertising or publicity pertaining to distribution
-of the software without specific, written prior permission.
-
-INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
-IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
-NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-/*
- * Serial bootblock interface routines
- * Copyright (c) 1994, J"org Wunsch
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * THE AUTHOR ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  THE AUTHOR DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- */ 
-
-/*
- * modified for PC-98 by KATO T. of Nagoya University
- */
-
-	.file	"serial.S"
-
-#include 
-#include "asm.h"
-
-	.text
-
-/*
- * The serial port interface routines implement a simple polled i/o
- * interface to a standard serial port.  Due to the space restrictions
- * for the boot blocks, no BIOS support is used (since BIOS requires
- * expensive real/protected mode switches), instead the rudimentary
- * BIOS support is duplicated here.
- *
- * The base address for the i/o port is passed from the Makefile in
- * the COMCONSOLE preprocessor macro.  Console parameters are currently
- * hard-coded to 9600 Bd, 8 bit.  This can be changed in the
- * init_serial() function.
- */
-
-/*
- * void serial_putc(char ch)
- *	send ch to serial port
- *
- */
-
-ENTRY(serial_putc)
-	mov	$COMCONSOLE + 2, %edx	# line status reg
-1:	inb	%dx, %al
-	testb	$0x01, %al
-	jz	1b		# TX buffer not empty
-
-	movb	0x4(%esp), %al
-
-	sub	$2, %edx	# TX output reg
-	outb	%al, %dx	# send this one
-
-	ret
-
-/*
- * int serial_getc(void)
- *	read a character from serial port
- */
-
-ENTRY(serial_getc)
-	mov	$COMCONSOLE + 2, %edx	# line status reg
-1:
-	inb	%dx, %al
-	testb	$0x02, %al
-	jz	1b		# no RX char available
-
-	xorb	%eax, %eax
-	subb	$2, %edx	# RX buffer reg
-	inb	%dx, %al	# fetch (first) character
-
-	cmp	$0x7F, %eax	# make DEL...
-	jne	2f
-	movb	$0x08, %eax	# look like BS
-2:
-	ret
-
-/*
- * int serial_ischar(void)
- *       if there is a character pending, return true; otherwise return 0
- */
-ENTRY(serial_ischar)
-	xorl	%eax, %eax
-	movl	$COMCONSOLE + 2, %edx	# line status reg
-	inb	%dx, %al
-	andb	$0x02, %al		# RX char available?
-
-	ret
-
-/*
- * void init_serial(void)
- * 	initialize the serial console port to 9600 Bd, 8 bpc
- */
-ENTRY(init_serial)
-	/* set 8253 */
-	movb	0xb6, %al
-	outb	%al, $0x77
-	movl	$COMCONSOLE_CLK, %eax
-	outb	%al, $0x75
-	inb	$0x5f, %al
-	movb	%ah, %al
-	outb	%al, $0x75
-
-	/* inhibit com int */
-	inb	$0x35, %al
-	andb	$0xf8, %al
-	movb	%al, %ah
-	inb	$0x5f, %al
-	movb	%ah, %al
-	outb	%al, $0x35
-
-	inb	$0x02, %al
-	orb	$0x10, %al
-	outb	%al, $0x02
-	
-	/* dummy command */
-	xorb	%al,%al
-	movl	$COMCONSOLE + 2, %edx
-	outb	%al, %dx
-	inb	$0x5f, %al
-	xorb	%al,%al
-	outb	%al, %dx
-	inb	$0x5f, %al
-	xorb	%al,%al
-	outb	%al, %dx
-	inb	$0x5f, %al
-
-	/* RESET 8251 */
-	movb	$0x40, %al
-	outb	%al, %dx
-
-	movb	$COMCONSOLE_MODE , %al
-	andb	$0xfc, %al
-	orb	$0x02, %al	/* factor = 1/16 */
-	outb	%al, %dx
-	inb	$0x5f, %al
-
-	/* start RS-232C */
-	movb	$0x37, %al
-	outb	%al, %dx
-
-	ret
-
diff --git a/sys/boot/pc98/boot2/start.S b/sys/boot/pc98/boot2/start.S
deleted file mode 100644
index 2a9bcbb7a1b..00000000000
--- a/sys/boot/pc98/boot2/start.S
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- * 
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
- * Carnegie Mellon requests users of this software to return to
- * 
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- * 
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:36:29  rpd
- * $FreeBSD$
- */
-
-/*
-  Copyright 1988, 1989, 1990, 1991, 1992 
-   by Intel Corporation, Santa Clara, California.
-
-                All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appears in all
-copies and that both the copyright notice and this permission notice
-appear in supporting documentation, and that the name of Intel
-not be used in advertising or publicity pertaining to distribution
-of the software without specific, written prior permission.
-
-INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
-IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
-NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-/*
- * Ported to PC-9801 by Yoshio Kimura
- */
-
-#include	"asm.h"
-
-	.file	"start.S"
-
-SIGNATURE=	0xaa55
-LOADSZ=		8192	/* size of unix boot */
-
-NAMEBLOCKMAGIC=	0xfadefeed /* value of magicnumebr for block2 	*/
-
-/*
- * This DEBUGMSG(msg) macro may be useful for debugging.  Its use is
- * restricted to this file since it only works in real mode.
- */
-#define DEBUGMSG(msg)		\
-	data32			; \
-	mov	$msg, %esi	; \
-	data32			; \
-	call	message
-
-	.code16
-	.text	
-	.globl	start
-
-start:
-	jmp	main
-boot_cyl:
-	.word	0
-	String	"IPL1   "
-
-main:
-	/* set up %ds */
-	xor	%ax, %ax
-	mov	%ax, %ds
-
-	/* set up %ss and %esp */
-	mov	$BOOTSEG, %eax
-	mov	%ax, %ss
-	/*
-	 * make a little room on the stack for
-	 * us to save the default bootstring we might find..
-	 * effectively, we push the bootstring.
-	 */
-	mov	$BOOTSTACK-64, %esp
-
-	/* set up %es, (where we will load boot2 to) */
-	mov	%ax, %es
-
-	push	%es
-	push	%ecx
-	push	%dx
-
-	mov	$0xa000, %eax
-	mov	%ax, %es
-
-	/* set up graphic screen */
-	movb	$0x42, %ah
-	movb	$0xc0, %ch
-	int	$0x18
-	movb	$0x40, %ah
-	int	$0x18
-
-	mov	$0x0a00, %eax		/* 80 x 25 mode  */
-
-	int	$0x18
-	movb	$0x0c, %ah		/* text on */
-	int	$0x18
-
-	/* cursor home and on */
-	xor	%dx, %dx
-	movb	$0x13, %ah
-	int	$0x18
-	movb	$0x11, %ah
-	int	$0x18
-
-	/* keyboad reset */
-	movb	$0x03, %ah
-	int	$0x18
-
-	/* transfer PC-9801 system common area to 0xa1000 */
-	mov	$0x0000, %esi
-	mov	$0x1000, %edi
-	mov	$0x0630, %ecx
-	cld
-	rep
-	movsb
-
-	/* transfer EPSON machine type to 0xa1200 */
-	push	%ds
-	mov	$0xfd00, %eax
-	mov	%ax, %ds
-	mov	0x804, %eax
-	and	$0x00ffffff, %eax
-	mov	%eax, %es: (0x1624)
-
-	pop	%ds
-	pop	%dx
-	pop	%ecx
-	pop	%es
-
-	/* bootstrap passes */
-	mov	%cs, %bx
-	cmp	$0x1fe0, %bx
-	jz	fd
-	cmp	$0x1fc0, %bx
-	jnz	hd
-	xor	%cx, %cx
-	movb	0x584, %al
-	andb	$0xf0, %al
-	cmpb	$0x30, %al
-	jz	fd
-	cmpb	$0x90, %al
-	jnz	hd
-fd:
-	mov	$0x0200, %cx
-	mov	$0x0001, %dx
-	movb	$0xd6, %ah
-	jmp	load
-hd:
-	and	%cx, %cx
-	jnz	1f
-	.code32
-	addr32
-	mov	%cs: (boot_cyl), %ecx	/* actualy %cx in real mode */
-	.code16
-1:
-	xor	%dx, %dx
-	movb	$0x06, %ah	
-
-/*
- * BIOS call "INT 0x1B Function 0xn6" to read sectors from disk into memory
- *	Call with	%ah = 0xd6(for floppy disk) or 0x06(for hard disk)
- *			%al = DA/UA
- *			%bx = data length
- *			%ch = sector size(for floppy) or cylinder(for hard)
- *			%cl = cylinder
- *			%dh = head
- *			%dl = sector
- *			%es:%bp = segment:offset of buffer
- *	Return:
- *			%ah = 0x0 on success; err code on failure
- */
-
-load:
-#ifdef NAMEBLOCK
-/*
- * Load the second sector and see if it is a boot instruction block.
- * If it is then scan the contents for the first valid string and copy it to 
- * the location of the default boot string.. then zero it out.
- * Finally write the block back to disk with the zero'd out entry..
- * I hate writing at this stage but we need this to be persistant.
- * If the boot fails, then the next boot will get the next string.
- * /etc/rc will regenerate a complete block2 iff the boot succeeds.
- *
- * Format of block 2 is:
- * [NAMEBLOCKMAGIC] <--0xdeafc0de
- * [nulls]
- * [bootstring]NULL  <---e.g. 0:wd(0,a)/kernel.experimental
- * [bootstring]NULL  <---e.g. 0:wd(0,a)/kernel.old
- * ....
- * [bootstring]NULL  <---e.g. 0:wd(0,f)/kernel
- * FF FF FF
- */
-where:
-	/*
-	 * save things we might smash
-	 * (that are not smashed immedatly after us anyway.)
-	 */
-	data32
-	push	%ecx	/* preserve 'cyl,sector ' */
-	data32
-	push	%edx
-/* 
- * Load the second sector
- * BIOS call "INT 0x13 Function 0x2" to read sectors from disk into memory
- *	Call with	%ah = 0x2
- *			%al = number of sectors
- *			%ch = cylinder
- *			%cl = sector
- *			%dh = head
- *			%dl = drive (0x80 for hard disk, 0x0 for floppy disk)
- *			%es:%bx = segment:offset of buffer
- *	Return:
- *			%al = 0x0 on success; err code on failure
- */
-	data32
-	movl	$0x0201, %eax	/function 2 (read) 1 sector */
-	xor	%ebx, %ebx	/* %bx = 0 */ /* buffer address (ES:0) */
-	data32
-	movl	$0x0002, %ecx	/* sector 2, cylinder 0 */
-	data32
-	andl	$0x00ff, %edx	/* head 0, drive N */
-	int	$0x13
-	data32
-	jb	read_error
-	/*
-	 * confirm that it is one for us
-	 */
-	data32
-	xorl	%ebx, %ebx	/* magic number at start of buffer */
-	data32
-	addr32
-	movl	%es:(%ebx), %eax
-	data32
-	cmpl	$NAMEBLOCKMAGIC, %eax
-	data32
-	jne	notours		/* not ours so return to caller */
-	/*
-	 * scan for a bootstring
-	 * Skip the magic number, and scan till we find a non-null,
-	 * or a -1
-	 */
-	incl	%ebx	/* quicker and smaller */
-	incl	%ebx
-	incl	%ebx
-scan:
-	incl	%ebx
-	addr32
-	movb	%es:(%ebx), %al	/* load the next byte */
-	testb	%al, %al	/* and if it is null */
-	data32			/* keep scanning (past deleted entries) */
-	jz scan
-	incb	%al		/* now look for -1 */
-	data32
-	jz	notours		/* if we reach the 0xFF then we have finished */
-
-	/*
-	 * save our settings.. we need them twice..
-	 */
-	data32
-	push	%ebx
-	/*
-	 * copy it to the default string location
-	 * which is just above the stack for 64 bytes.
-	 */
-	data32
-	movl	$BOOTSTACK-64, %ecx	/* 64 bytes at the top of the stack */
-nxtbyte:
-	addr32
-	movb	%es:(%ebx), %al	/* get the next byte in */
-	addr32
-	movb	%al, %es:(%ecx)	/* and transfer it to the name buffer */
-	incl	%ebx		/* get on with the next byte */
-	incl	%ecx		/* get on with the next byte */
-	testb	%al, %al	/* if it was 0 then quit this */
-	data32
-	jnz nxtbyte		/* and looop if more to do */ 
-	
-	/*
-	 * restore the saved settings and
-	 * zero it out so next time we don't try it again
-	 */
-	data32
-	pop	%ebx		/* get back our starting location */
-#ifdef	NAMEBLOCK_WRITEBACK
-nxtbyte2:
-	addr32
-	movb	%es:(%ebx), %al	/* get the byte */
-	addr32
-	movb	$0,  %es:(%ebx)	/* zero it out */
-	data32
-	incl	%ebx		/* point to the next byte */
-	testb	%al, %al	/* check if we have finished.. */
-	data32
-	jne nxtbyte2
-/* 
- * Write the second sector back
- * Load the second sector
- * BIOS call "INT 0x13 Function 0x3" to write sectors from memory to disk
- *	Call with	%ah = 0x3
- *			%al = number of sectors
- *			%ch = cylinder
- *			%cl = sector
- *			%dh = head
- *			%dl = drive (0x80 for hard disk, 0x0 for floppy disk)
- *			%es:%bx = segment:offset of buffer
- *	Return:
- *			%al = 0x0 on success; err code on failure
- */
-	data32
-	movl	$0x0301, %eax	/* write 1 sector */
-	xor	%ebx, %ebx	/* buffer is at offset 0 */ 
-	data32
-	movl	$0x0002, %ecx	/* block 2 */
-	data32
-	andl	$0xff, %edx	/* head 0 */
-	int	$0x13
-	data32
-	jnb	notours
-	data32
-	mov	$eread, %esi
-	jmp	err_stop
-#endif	/* NAMEBLOCK_WRITEBACK */
-	/*
-	 * return to the main-line
-	 */
-notours:
-	data32
-	pop	%edx
-	data32
-	pop	%ecx
-#endif
-	mov	$LOADSZ, %ebx
-	movb	0x584, %al
-	xor	%bp, %bp	/* %bp = 0, put it at 0 in the BOOTSEG */
-	int	$0x1b
-	jc	read_error
-
-	/*
-	 * ljmp to the second stage boot loader (boot2).
-	 * After ljmp, %cs is BOOTSEG and boot1 (512 bytes) will be used
-	 * as an internal buffer "intbuf".
-	 */
-
-	.code32
-	data32
-	ljmp	$BOOTSEG, $ EXT(boot2)
-	.code16
-
-/*
- * read_error
- */
-read_error:
-	mov	$eread, %esi
-err_stop:
-	call	message
-	jmp	stop
-
-/*
- * message: write the error message in %ds:%esi to console
- */
-message:
-
-	push	%eax
-	push	%ebx
-	push	%ds
-	push	%es
-	mov	$0xe000, %dx
-	mov	0x501, %al
-	testb	$0x08, %al
-	jnz	1f
-	mov	$0xa000, %dx
-1:
-	mov	%dx, %es
-	mov	%cs, %ax
-	mov	%ax, %ds
-	mov	vram, %di
-	mov	$0x00e1, %bx
-	mov	$160, %cx
-	cld
-
-nextb:
-	lodsb			/* load a byte into %al */
-	cmpb	$0x0, %al
-	je	done
-	cmpb	$0x0d, %al
-	je	cr_code
-	cmpb	$0x0a, %al
-	je	lf_code
-	movb	%bl, %es:0x2000(%di)
-	stosb
-	inc	%di
-	jmp	move_cursor
-lf_code:
-	add	%cx, %di
-	jmp	move_cursor
-cr_code:
-	xor	%dx, %dx
-	mov	%di, %ax
-	div	%cx
-	sub	%dx, %di
-move_cursor:
-	mov	%di, %dx
-	movb	$0x13, %ah
-	int	$0x18
-	jmp	nextb
-done:
-	mov	%di, vram
-	pop	%es
-	pop	%ds
-	pop	%ebx
-	pop	%eax
-	ret
-
-stop:	hlt
-	jmp	stop		/* halt doesnt actually halt forever */
-
-vram:
-	.word	0
-
-/* error messages */
-
-
-#ifdef	DEBUG
-one:	String		"1-\0"
-two:	String		"2-\0"
-three:	String		"3-\0"
-four:	String		"4-\0"
-#endif	/* DEBUG */
-#ifdef 	NAMEBLOCK_WRITEBACK
-ewrite:	String		"Write error\r\n\0"
-#endif	/* NAMEBLOCK_WRITEBACK */
-eread:	String		"Read error\r\n\0"
-enoboot: String		"No bootable partition\r\n\0"
-endofcode:
-
-	. = EXT(start) + 0x1be
-
-/* Partition table */
-
-	.fill 0x30,0x1,0x0
-	.byte 0x80, 0x00, 0x01, 0x00
-	.byte 0xa5, 0xff, 0xff, 0xff
-	.byte 0x00, 0x00, 0x00, 0x00
-	.byte 0x50, 0xc3, 0x00, 0x00
-
-/* the last 2 bytes in the sector 0 contain the signature */
-	.value	SIGNATURE
-
-ENTRY(disklabel)
-	. = EXT(start) + 0x400	
diff --git a/sys/boot/pc98/boot2/sys.c b/sys/boot/pc98/boot2/sys.c
deleted file mode 100644
index c8d4304bd31..00000000000
--- a/sys/boot/pc98/boot2/sys.c
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:36:34  rpd
- */
-
-#include 
-__FBSDID("$FreeBSD$");
-
-/*
- * Ported to PC-9801 by Yoshio Kimura
- */
-
-#include "boot.h"
-#include 
-
-#if 0
-/* #define BUFSIZE 4096 */
-#define BUFSIZE MAXBSIZE
-static char buf[BUFSIZE], fsbuf[SBSIZE], iobuf[MAXBSIZE];
-#endif
-
-static char biosdrivedigit;
-
-#define BUFSIZE 8192
-#define MAPBUFSIZE BUFSIZE
-static char buf[BUFSIZE], fsbuf[BUFSIZE], iobuf[BUFSIZE];
-
-static char mapbuf[MAPBUFSIZE];
-static int mapblock;
-
-int poff;
-
-#ifdef RAWBOOT
-#define STARTBYTE	8192	/* Where on the media the kernel starts */
-#endif
-
-static int block_map(int file_block);
-static int find(char *path);
-
-void
-xread(char *addr, int size)
-{
-	int count = BUFSIZE;
-	while (size > 0) {
-		if (BUFSIZE > size)
-			count = size;
-		read(buf, count);
-		pcpy(buf, addr, count);
-		size -= count;
-		addr += count;
-	}
-}
-
-#ifndef RAWBOOT
-void
-read(char *buffer, int count)
-{
-	int logno, off, size;
-	int cnt2, bnum2;
-	struct fs *fs_copy;
-
-	while (count > 0 && poff < inode.i_size) {
-		fs_copy = fs;
-		off = blkoff(fs_copy, poff);
-		logno = lblkno(fs_copy, poff);
-		cnt2 = size = blksize(fs_copy, &inode, logno);
-		bnum2 = fsbtodb(fs_copy, block_map(logno)) + boff;
-		if (	(!off)  && (size <= count)) {
-			devread(buffer, bnum2, cnt2);
-		} else {
-			size -= off;
-			if (size > count)
-				size = count;
-			devread(iobuf, bnum2, cnt2);
-			memcpy(iobuf+off, buffer, size);
-		}
-		buffer += size;
-		count -= size;
-		poff += size;
-	}
-}
-#else
-void
-read(char *buffer, int count)
-{
-	int cnt, bnum, off, size;
-
-	off = STARTBYTE + poff;
-	poff += count;
-
-	/* Read any unaligned bit at the front */
-	cnt = off & 511;
-	if (cnt) {
-		size = 512-cnt;
-		if (count < size)
-			size = count;
-		devread(iobuf, off >> 9, 512);
-		memcpy(iobuf+cnt, buffer, size);
-		count -= size;
-		off += size;
-		buffer += size;
-	}
-	size = count & (~511);
-	if (size && (off & (~511))) {
-		devread(buffer, off >> 9, size);
-		off += size;
-		count -= size;
-		buffer += size;
-	}
-	if (count) {
-		devread(iobuf, off >> 9, 512);
-		memcpy(iobuf, buffer, count);
-	}
-}
-#endif
-
-static int
-find(char *path)
-{
-	char *rest, ch;
-	int block, off, loc, ino = ROOTINO;
-	struct direct *dp;
-	char list_only;
-
-	list_only = (path[0] == '?' && path[1] == '\0');
-loop:
-	devread(iobuf, fsbtodb(fs, ino_to_fsba(fs, ino)) + boff, fs->fs_bsize);
-	memcpy((void *)&((struct dinode *)iobuf)[ino % fs->fs_inopb],
-	      (void *)&inode.i_din,
-	      sizeof (struct dinode));
-	if (!*path)
-		return 1;
-	while (*path == '/')
-		path++;
-	if (!inode.i_size || ((inode.i_mode&IFMT) != IFDIR))
-		return 0;
-	for (rest = path; (ch = *rest) && ch != '/'; rest++) ;
-	*rest = 0;
-	loc = 0;
-	do {
-		if (loc >= inode.i_size) {
-			if (list_only) {
-				putchar('\n');
-				return -1;
-			} else {
-				return 0;
-			}
-		}
-		if (!(off = blkoff(fs, loc))) {
-			block = lblkno(fs, loc);
-			devread(iobuf, fsbtodb(fs, block_map(block)) + boff,
-				blksize(fs, &inode, block));
-		}
-		dp = (struct direct *)(iobuf + off);
-		loc += dp->d_reclen;
-		if (dp->d_ino && list_only)
-			printf("%s ", dp->d_name);
-	} while (!dp->d_ino || strcmp(path, dp->d_name));
-	ino = dp->d_ino;
-	*(path = rest) = ch;
-	goto loop;
-}
-
-
-static int
-block_map(int file_block)
-{
-	int bnum;
-	if (file_block < NDADDR)
-		return(inode.i_db[file_block]);
-	if ((bnum=fsbtodb(fs, inode.i_ib[0])+boff) != mapblock) {
-		devread(mapbuf, bnum, fs->fs_bsize);
-		mapblock = bnum;
-	}
-	return (((int *)mapbuf)[(file_block - NDADDR) % NINDIR(fs)]);
-}
-
-
-int
-openrd(void)
-{
-	char **devp, *name0 = name, *cp = name0;
-	int biosdrive, dosdev_copy, ret;
-
-	/*******************************************************\
-	* If bracket given look for preceding device name	*
-	\*******************************************************/
-	while (*cp && *cp!='(')
-		cp++;
-	if (!*cp)
-	{
-		cp = name0;
-	}
-	else
-	{
-		/*
-		 * Look for a BIOS drive number (a leading digit followed
-		 * by a colon).
-		 */
-		biosdrivedigit = '\0';
-		if (*(name0 + 1) == ':' && *name0 >= '0' && *name0 <= '9') {
-			biosdrivedigit = *name0;
-			name0 += 2;
-		}
-
-		if (cp++ != name0)
-		{
-			for (devp = devs; *devp; devp++)
-				if (name0[0] == (*devp)[0] &&
-				    name0[1] == (*devp)[1])
-					break;
-			if (!*devp)
-			{
-				printf("Unknown device\n");
-				return 1;
-			}
-			maj = devp-devs;
-		}
-		/*******************************************************\
-		* Look inside brackets for unit number, and partition	*
-		\*******************************************************/
-		/*
-		 * Allow any valid digit as the unit number, as the BIOS
-		 * will complain if the unit number is out of range.
-		 * Restricting the range here prevents the possibilty of using
-		 * BIOSes that support more than 2 units.
-		 * XXX Bad values may cause strange errors, need to check if
-		 * what happens when a value out of range is supplied.
-		 */
-		if (*cp >= '0' && *cp <= '9')
-			unit = *cp++ - '0';
-		if (!*cp || (*cp == ',' && !*++cp))
-			return 1;
-		if (*cp >= 'a' && *cp <= 'p')
-			part = *cp++ - 'a';
-		while (*cp && *cp++!=')') ;
-		if (!*cp)
-			return 1;
-	}
-	biosdrive = biosdrivedigit - '0';
-	if (biosdrivedigit == '\0') {
-		biosdrive = dosdev & 0x0f;
-#if BOOT_HD_BIAS > 0
-		/* XXX */
-		if (maj == 4)
-			biosdrive += BOOT_HD_BIAS;
-#endif
-	}
-	switch(maj)
-	{
-	case 4:	/* da */
-		dosdev_copy = biosdrive | 0xA0; /* SCSI HD or MO */
-		break;
-	case 0:	/* wd */
-	case 2:	/* 1200KB fd */
-		dosdev_copy = (maj << 3) | unit | 0x80;
-		break;
-	case 6:	/* 1440KB fd */
-		dosdev_copy = (maj << 3) | unit;
-		break;
-	default:
-		printf("Unknown device\n");
-		return 1;
-	}
-	dosdev = dosdev_copy;
-#if 0
-	/* XXX this is useful, but misplaced. */
-	printf("dosdev= %x, biosdrive = %d, unit = %d, maj = %d\n",
-		dosdev_copy, biosdrive, unit, maj);
-#endif
-
-	/***********************************************\
-	* Now we know the disk unit and part,		*
-	* Load disk info, (open the device)		*
-	\***********************************************/
-	if (devopen())
-		return 1;
-
-#ifndef RAWBOOT
-	/***********************************************\
-	* Load Filesystem info (mount the device)	*
-	\***********************************************/
-	devread((char *)(fs = (struct fs *)fsbuf), SBLOCK + boff, SBSIZE);
-	/***********************************************\
-	* Find the actual FILE on the mounted device	*
-	\***********************************************/
-	ret = find(cp);
-	name = cp;
-	if (ret == 0)
-		return 1;
-	if (ret < 0) {
-		name = NULL;
-		return -1;
-	}
-	poff = 0;
-#endif /* RAWBOOT */
-	return 0;
-}
diff --git a/sys/boot/pc98/boot2/table.c b/sys/boot/pc98/boot2/table.c
deleted file mode 100644
index e8e6dea521b..00000000000
--- a/sys/boot/pc98/boot2/table.c
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Mach Operating System
- * Copyright (c) 1992, 1991 Carnegie Mellon University
- * All Rights Reserved.
- *
- * Permission to use, copy, modify and distribute this software and its
- * documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
- * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
- *
- *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
- *  School of Computer Science
- *  Carnegie Mellon University
- *  Pittsburgh PA 15213-3890
- *
- * any improvements or extensions that they make and grant Carnegie Mellon
- * the rights to redistribute these changes.
- *
- *	from: Mach, Revision 2.2  92/04/04  11:36:43  rpd
- */
-/*
-  Copyright 1988, 1989, 1990, 1991, 1992
-   by Intel Corporation, Santa Clara, California.
-
-                All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and
-its documentation for any purpose and without fee is hereby
-granted, provided that the above copyright notice appears in all
-copies and that both the copyright notice and this permission notice
-appear in supporting documentation, and that the name of Intel
-not be used in advertising or publicity pertaining to distribution
-of the software without specific, written prior permission.
-
-INTEL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS,
-IN NO EVENT SHALL INTEL BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
-NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
-WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-#include 
-__FBSDID("$FreeBSD$");
-
-#include "boot.h"
-
-/*  Segment Descriptor
- *
- * 31          24         19   16                 7           0
- * ------------------------------------------------------------
- * |             | |B| |A|       | |   |1|0|E|W|A|            |
- * | BASE 31..24 |G|/|0|V| LIMIT |P|DPL|  TYPE   | BASE 23:16 |
- * |             | |D| |L| 19..16| |   |1|1|C|R|A|            |
- * ------------------------------------------------------------
- * |                             |                            |
- * |        BASE 15..0           |       LIMIT 15..0          |
- * |                             |                            |
- * ------------------------------------------------------------
- */
-
-struct seg_desc {
-	unsigned short	limit_15_0;
-	unsigned short	base_15_0;
-	unsigned char	base_23_16;
-	unsigned char	p_dpl_type;
-	unsigned char	g_b_a_limit;
-	unsigned char	base_31_24;
-	};
-
-#define RUN	0		/* not really 0, but filled in at boot time */
-
-struct seg_desc	Gdt[] = {
-	{0x0, 0x0, 0x0, 0x0, 0x0, 0x0},		/* 0x0 : null */
-	{0xFFFF, 0x0, 0x0, 0x9F, 0xCF, 0x0},	/* 0x08 : kernel code */
-			/* 0x9E? */
-	{0xFFFF, 0x0, 0x0, 0x93, 0xCF, 0x0},	/* 0x10 : kernel data */
-			/* 0x92? */
-	{0xFFFF, RUN, RUN, 0x9E, 0x40, 0x0},	/* 0x18 : boot code */
-	/*
-	 * The limit of boot data should be more than or equal to 0x9FFFF
-	 * for saving BIOS parameter and EPSON machine ID into 2'nd T-VRAM,
-	 * because base address is normally 0x10000.
-	 */
-	{0xFFFF, RUN, RUN, 0x92, 0x4F, 0x0},	/* 0x20 : boot data */
-	{0xFFFF, RUN, RUN, 0x9E, 0x0, 0x0},	/* 0x28 : boot code, 16 bits */
-	{0xFFFF, 0x0, 0x0, 0x92, 0x0, 0x0},	/* 0x30 : boot data, 16 bits */
-#ifdef BDE_DEBUGGER
-	/* More for bdb. */
-	{},					/* BIOS_TMP_INDEX = 7 : null */
-	{},					/* TSS_INDEX = 8 : null */
-	{0xFFFF, 0x0, 0x0, 0xB2, 0x40, 0x0},	/* DS_286_INDEX = 9 */
-	{0xFFFF, 0x0, 0x0, 0xB2, 0x40, 0x0},	/* ES_286_INDEX = 10 */
-	{},					/* Unused = 11 : null */
-	{0x7FFF, 0x8000, 0xB, 0xB2, 0x40, 0x0},	/* COLOR_INDEX = 12 */
-	{0x7FFF, 0x0, 0xB, 0xB2, 0x40, 0x0},	/* MONO_INDEX = 13 */
-	{0xFFFF, RUN, RUN, 0x9A, 0x40, 0x0},	/* DB_CS_INDEX = 14 */
-	{0xFFFF, RUN, RUN, 0x9A, 0x0, 0x0},	/* DB_CS16_INDEX = 15 */
-	{0xFFFF, RUN, RUN, 0x92, 0x40, 0x0},	/* DB_DS_INDEX = 16 */
-	{8*18-1, RUN, RUN, 0x92, 0x40, 0x0},	/* GDT_INDEX = 17 */
-#endif /* BDE_DEBUGGER */
-};
-
-#ifdef BDE_DEBUGGER
-struct idt_desc {
-	unsigned short	entry_15_0;
-	unsigned short	selector;
-	unsigned char	padding;
-	unsigned char	p_dpl_type;
-	unsigned short	entry_31_16;
-};
-
-struct idt_desc	Idt[] = {
-	{},					/* Null (int 0) */
-	{RUN, 0x70, 0, 0x8E, 0},		/* DEBUG_VECTOR = 1 */
-	{},					/* Null (int 2) */
-	{RUN, 0x70, 0, 0xEE, 0},		/* BREAKPOINT_VECTOR = 3 */
-};
-#endif /* BDE_DEBUGGER */
-
-struct pseudo_desc {
-	unsigned short	limit;
-	unsigned short	base_low;
-	unsigned short	base_high;
-	};
-
-struct pseudo_desc Gdtr = { sizeof Gdt - 1, RUN, RUN };
-#ifdef BDE_DEBUGGER
-struct pseudo_desc Idtr_prot = { sizeof Idt - 1, RUN, RUN };
-struct pseudo_desc Idtr_real = { 0x400 - 1, 0x0, 0x0 };
-#endif
-
-/*
- * All initialized data is defined in one file to reduce space wastage from
- * fragmentation.
- */
-char *devs[] = { "wd", "dk", "fd", "wt", "da", "dk", "fd", 0 };
-unsigned tw_chars = 0x5C2D2F7C;	/* "\-/|" */
diff --git a/sys/boot/pc98/btx/btx/btx.S b/sys/boot/pc98/btx/btx/btx.S
index 7d22b27fbdb..95788d4f8fa 100644
--- a/sys/boot/pc98/btx/btx/btx.S
+++ b/sys/boot/pc98/btx/btx/btx.S
@@ -21,11 +21,11 @@
 		.set MEM_BTX,0x1000		# Start of BTX memory
 		.set MEM_ESP0,0x1800		# Supervisor stack
 		.set MEM_BUF,0x1800		# Scratch buffer
-		.set MEM_ESP1,0x1e00		# Link stack
-		.set MEM_IDT,0x1e00		# IDT
-		.set MEM_TSS,0x1f98		# TSS
-		.set MEM_MAP,0x2000		# I/O bit map
-		.set MEM_TSS_END,0x3fff		# Page directory
+		.set MEM_ESPR,0x5e00		# Real mode stack
+		.set MEM_IDT,0x5e00		# IDT
+		.set MEM_TSS,0x5f98		# TSS
+		.set MEM_MAP,0x6000		# I/O bit map
+		.set MEM_TSS_END,0x7fff		# End of TSS
 		.set MEM_ORG,0x9000		# BTX code
 		.set MEM_USR,0xa000		# Start of user memory
 /*
@@ -33,6 +33,14 @@
  */
 		.set PAG_SIZ,0x1000		# Page size
 		.set PAG_CNT,0x1000		# Pages to map
+/*
+ * Fields in %eflags.
+ */
+		.set PSL_RESERVED_DEFAULT,0x00000002
+		.set PSL_T,0x00000100		# Trap flag
+		.set PSL_I,0x00000200		# Interrupt enable flag
+		.set PSL_VM,0x00020000		# Virtual 8086 mode flag
+		.set PSL_AC,0x00040000		# Alignment check flag
 /*
  * Segment selectors.
  */
@@ -48,7 +56,6 @@
  */
 		.set TSS_ESP0,0x4		# PL 0 ESP
 		.set TSS_SS0,0x8		# PL 0 SS
-		.set TSS_ESP1,0xc		# PL 1 ESP
 		.set TSS_MAP,0x66		# I/O bit map base
 /*
  * System calls.
@@ -56,10 +63,20 @@
 		.set SYS_EXIT,0x0		# Exit
 		.set SYS_EXEC,0x1		# Exec
 /*
- * V86 constants.
+ * Fields in V86 interface structure.
  */
-		.set V86_FLG,0x208eff		# V86 flag mask
-		.set V86_STK,0x400		# V86 stack allowance
+		.set V86_CTL,0x0		# Control flags
+		.set V86_ADDR,0x4		# Int number/address
+		.set V86_ES,0x8			# V86 ES
+		.set V86_DS,0xc			# V86 DS
+		.set V86_FS,0x10		# V86 FS
+		.set V86_GS,0x14		# V86 GS
+/*
+ * V86 control flags.
+ */
+		.set V86F_ADDR,0x10000		# Segment:offset address
+		.set V86F_CALLF,0x20000		# Emulate far call
+		.set V86F_FLAGS,0x40000		# Return flags
 /*
  * Dump format control bytes.
  */
@@ -77,13 +94,11 @@
  * BIOS Data Area locations.
  */
 		.set BDA_MEM,0x501		# Free memory
-		.set BDA_KEYFLAGS,0x53a		# Keyboard shift-state flags
 		.set BDA_POS,0x53e		# Cursor position
 /*
  * Derivations, for brevity.
  */
 		.set _ESP0H,MEM_ESP0>>0x8	# Byte 1 of ESP0
-		.set _ESP1H,MEM_ESP1>>0x8	# Byte 1 of ESP1
 		.set _TSSIO,MEM_MAP-MEM_TSS	# TSS I/O base
 		.set _TSSLM,MEM_TSS_END-MEM_TSS	# TSS limit
 		.set _IDTLM,MEM_TSS-MEM_IDT-1	# IDT limit
@@ -100,7 +115,7 @@ btx_hdr:	.byte 0xeb			# Machine ID
 		.byte 0xe			# Header size
 		.ascii "BTX"			# Magic
 		.byte 0x1			# Major version
-		.byte 0x1			# Minor version
+		.byte 0x2			# Minor version
 		.byte BTX_FLAGS			# Flags
 		.word PAG_CNT-MEM_ORG>>0xc	# Paging control
 		.word break-start		# Text size
@@ -121,13 +136,24 @@ init:		cli				# Disable interrupts
  */
 		mov $MEM_IDT,%di		# Memory to initialize
 		mov $(MEM_ORG-MEM_IDT)/2,%cx	# Words to zero
-		push %di			# Save
 		rep				# Zero-fill
 		stosw				#  memory
-		pop %di				# Restore
+/*
+ * Update real mode IDT for reflecting hardware interrupts.
+ */
+		mov $intr20,%bx			# Address first handler
+		mov $0x10,%cx			# Number of handlers
+		mov $0x20*4,%di			# First real mode IDT entry
+init.0:		mov %bx,(%di)			# Store IP
+		inc %di				# Address next
+		inc %di				#  entry
+		stosw				# Store CS
+		add $4,%bx			# Next handler
+		loop init.0			# Next IRQ
 /*
  * Create IDT.
  */
+		mov $MEM_IDT,%di
 		mov $idtctl,%si			# Control string
 init.1: 	lodsb				# Get entry
 		cbw				#  count
@@ -153,7 +179,6 @@ init.3: 	lea 0x8(%di),%di		# Next entry
  */
 init.4: 	movb $_ESP0H,TSS_ESP0+1(%di)	# Set ESP0
 		movb $SEL_SDATA,TSS_SS0(%di)	# Set SS0
-		movb $_ESP1H,TSS_ESP1+1(%di)	# Set ESP1
 		movb $_TSSIO,TSS_MAP(%di)	# Set I/O bit map base
 /*
  * Bring up the system.
@@ -253,8 +278,8 @@ exit.2: 	xor %ax,%ax			# Real mode segment
 exit.3:		jz exit.3			# No
 		movb $0xa0,%al
 		outb %al,$0x35
-		movb 0,%al
-		outb %al,$0xf0
+		movb $0x00,%al
+		outb %al,$0xf0			# reboot the machine
 exit.4:		jmp exit.4
 /*
  * Set IRQ offsets by reprogramming 8259A PICs.
@@ -284,10 +309,6 @@ setpic: 	in $0x02,%al			# Save master
 		outb %al,$0x02			#  IMR
 		retw				# To caller
 		.code32
-/*
- * Initiate return from V86 mode to user mode.
- */
-inthlt: 	hlt				# To supervisor mode
 /*
  * Exception jump table.
  */
@@ -314,17 +335,11 @@ intx00: 	push $0x0			# Int 0x0: #DE
 		push $0xc			# Int 0xc: #SS
 		jmp except			# Stack segment fault
 		push $0xd			# Int 0xd: #GP
-		jmp ex_v86			# General protection
+		jmp except			# General protection
 		push $0xe			# Int 0xe: #PF
 		jmp except			# Page fault
 intx10: 	push $0x10			# Int 0x10: #MF
 		jmp ex_noc			# Floating-point error
-/*
- * Handle #GP exception.
- */
-ex_v86: 	testb $0x2,0x12(%esp,1) 	# V86 mode?
-		jz except			# No
-		jmp v86mon			# To monitor
 /*
  * Save a zero error code.
  */
@@ -337,24 +352,17 @@ except: 	cld				# String ops inc
 		pushl %ds			# Save
 		pushl %es			#  most
 		pusha				#  registers
-		movb $0x6,%al			# Push loop count
-		testb $0x2,0x3a(%esp,1) 	# V86 mode?
-		jnz except.1			# Yes
 		pushl %gs			# Set GS
 		pushl %fs			# Set FS
 		pushl %ds			# Set DS
 		pushl %es			# Set ES
-		movb $0x2,%al			# Push loop count
 		cmpw $SEL_SCODE,0x44(%esp,1)	# Supervisor mode?
 		jne except.1			# No
 		pushl %ss			# Set SS
-		leal 0x50(%esp,1),%eax		# Set
-		pushl %eax			#  ESP
 		jmp except.2			# Join common code
-except.1:	pushl 0x50(%esp,1)		# Set GS, FS, DS, ES
-		decb %al			#  (if V86 mode), and
-		jne except.1			#  SS, ESP
-except.2:	push $SEL_SDATA			# Set up
+except.1:	pushl 0x50(%esp,1)		# Set SS
+except.2:	pushl 0x50(%esp,1)		# Set ESP
+		push $SEL_SDATA			# Set up
 		popl %ds			#  to
 		pushl %ds			#  address
 		popl %es			#  data
@@ -363,14 +371,12 @@ except.2:	push $SEL_SDATA			# Set up
 		movl $MEM_BUF,%edi		# Buffer
 		pushl %eax
 		pushl %edx
-wait.1:
-		inb  $0x60,%al
+wait.1:		inb  $0x60,%al
 		testb $0x04,%al
 		jz   wait.1
 		movb $0xe0,%al
 		outb %al,$0x62
-wait.2:
-		inb  $0x60,%al
+wait.2:		inb  $0x60,%al
 		testb $0x01,%al
 		jz   wait.2
 		xorl %edx,%edx
@@ -399,237 +405,11 @@ wait.2:
 		je except.3			# Yes
 		cmpb $0x1,(%esp,1)		# Debug?
 		jne except.2a			# No
-		testl $0x100,0x10(%esp,1)	# Trap flag set?
+		testl $PSL_T,0x10(%esp,1)	# Trap flag set?
 		jnz except.3			# Yes
 except.2a:	jmp exit			# Exit
 except.3:	leal 0x8(%esp,1),%esp		# Discard err, int no
 		iret				# From interrupt
-/*
- * Return to user mode from V86 mode.
- */
-intrtn: 	cld				# String ops inc
-		pushl %ds			# Address
-		popl %es			#  data
-		leal 0x3c(%ebp),%edx		# V86 Segment registers
-		movl MEM_TSS+TSS_ESP1,%esi	# Link stack pointer
-		lodsl				# INT_V86 args pointer
-		movl %esi,%ebx			# Saved exception frame
-		testl %eax,%eax 		# INT_V86 args?
-		jz intrtn.2			# No
-		movl $MEM_USR,%edi		# User base
-		movl 0x1c(%esi),%ebx		# User ESP
-		movl %eax,(%edi,%ebx,1) 	# Restore to user stack
-		leal 0x8(%edi,%eax,1),%edi	# Arg segment registers
-		testb $0x4,-0x6(%edi)		# Return flags?
-		jz intrtn.1			# No
-		movl 0x30(%ebp),%eax		# Get V86 flags
-		movw %ax,0x18(%esi)		# Set user flags
-intrtn.1:	leal 0x10(%esi),%ebx		# Saved exception frame
-		xchgl %edx,%esi 		# Segment registers
-		movb $0x4,%cl			# Update seg regs
-		rep				#  in INT_V86
-		movsl				#  args
-intrtn.2:	xchgl %edx,%esi			# Segment registers
-		leal 0x28(%ebp),%edi		# Set up seg
-		movb $0x4,%cl			#  regs for
-		rep				#  later
-		movsl				#  pop
-		xchgl %ebx,%esi			# Restore exception
-		movb $0x5,%cl			#  frame to
-		rep				#  supervisor
-		movsl				#  stack
-		movl %esi,MEM_TSS+TSS_ESP1	# Link stack pointer
-		popa				# Restore
-		leal 0x8(%esp,1),%esp		# Discard err, int no
-		popl %es			# Restore
-		popl %ds			#  user
-		popl %fs			#  segment
-		popl %gs			#  registers
-		iret				# To user mode
-/*
- * V86 monitor.
- */
-v86mon: 	cld				# String ops inc
-		pushl $SEL_SDATA		# Set up for
-		popl %ds			#  flat addressing
-		pusha				# Save registers
-		movl %esp,%ebp			# Address stack frame
-		movzwl 0x2c(%ebp),%edi		# Load V86 CS
-		shll $0x4,%edi			# To linear
-		movl 0x28(%ebp),%esi		# Load V86 IP
-		addl %edi,%esi			# Code pointer
-		xorl %ecx,%ecx			# Zero
-		movb $0x2,%cl			# 16-bit operands
-		xorl %eax,%eax			# Zero
-v86mon.1:	lodsb				# Get opcode
-		cmpb $0x66,%al			# Operand size prefix?
-		jne v86mon.2			# No
-		movb $0x4,%cl			# 32-bit operands
-		jmp v86mon.1			# Continue
-v86mon.2:	cmpb $0xf4,%al			# HLT?
-		jne v86mon.3			# No
-		cmpl $inthlt+0x1,%esi		# Is inthlt?
-		jne v86mon.7			# No (ignore)
-		jmp intrtn			# Return to user mode
-v86mon.3:	cmpb $0xf,%al			# Prefixed instruction?
-		jne v86mon.4			# No
-		cmpb $0x09,(%esi)		# Is it a WBINVD?
-		je v86wbinvd			# Yes
-		cmpb $0x30,(%esi)		# Is it a WRMSR?
-		je v86wrmsr			# Yes
-		cmpb $0x32,(%esi)		# Is it a RDMSR?
-		je v86rdmsr			# Yes
-		cmpb $0x20,(%esi)		# Is this a MOV reg,CRx?
-		je v86mov			# Yes
-v86mon.4:	cmpb $0xfa,%al			# CLI?
-		je v86cli			# Yes
-		cmpb $0xfb,%al			# STI?
-		je v86sti			# Yes
-		movzwl 0x38(%ebp),%ebx		# Load V86 SS
-		shll $0x4,%ebx			# To offset
-		pushl %ebx			# Save
-		addl 0x34(%ebp),%ebx		# Add V86 SP
-		movl 0x30(%ebp),%edx		# Load V86 flags
-		cmpb $0x9c,%al			# PUSHF/PUSHFD?
-		je v86pushf			# Yes
-		cmpb $0x9d,%al			# POPF/POPFD?
-		je v86popf			# Yes
-		cmpb $0xcd,%al			# INT imm8?
-		je v86intn			# Yes
-		cmpb $0xcf,%al			# IRET/IRETD?
-		je v86iret			# Yes
-		popl %ebx			# Restore
-		popa				# Restore
-		jmp except			# Handle exception
-v86mon.5:	movl %edx,0x30(%ebp)		# Save V86 flags
-v86mon.6:	popl %edx			# V86 SS adjustment
-		subl %edx,%ebx			# Save V86
-		movl %ebx,0x34(%ebp)		#  SP
-v86mon.7:	subl %edi,%esi			# From linear
-		movl %esi,0x28(%ebp)		# Save V86 IP
-		popa				# Restore
-		leal 0x8(%esp,1),%esp		# Discard int no, error
-		iret				# To V86 mode
-/*
- * Emulate MOV reg,CRx.
- */
-v86mov: 	movb 0x1(%esi),%bl		# Fetch Mod R/M byte
-		testb $0x10,%bl			# Read CR2 or CR3?
-		jnz v86mov.1			# Yes
-		movl %cr0,%eax			# Read CR0
-		testb $0x20,%bl			# Read CR4 instead?
-		jz v86mov.2			# No
-		movl %cr4,%eax			# Read CR4
-		jmp v86mov.2
-v86mov.1:	movl %cr2,%eax			# Read CR2
-		testb $0x08,%bl			# Read CR3 instead?
-		jz v86mov.2			# No
-		movl %cr3,%eax			# Read CR3
-v86mov.2:	andl $0x7,%ebx			# Compute offset in
-		shl $2,%ebx			#  frame of destination
-		neg %ebx			#  register
-		movl %eax,0x1c(%ebp,%ebx,1)	# Store CR to reg
-		incl %esi			# Adjust IP
-/*
- * Return from emulating a 0x0f prefixed instruction
- */
-v86preret:	incl %esi			# Adjust IP
-		jmp v86mon.7			# Finish up
-/*
- * Emulate WBINVD
- */
-v86wbinvd:	wbinvd				# Write back and invalidate
-						#  cache
-		jmp v86preret			# Finish up
-/*
- * Emulate WRMSR
- */
-v86wrmsr:	movl 0x18(%ebp),%ecx		# Get user's %ecx (MSR to write)
-		movl 0x14(%ebp),%edx		# Load the value
-		movl 0x1c(%ebp),%eax		#  to write
-		wrmsr				# Write MSR
-		jmp v86preret			# Finish up
-/*
- * Emulate RDMSR
- */
-v86rdmsr:	movl 0x18(%ebp),%ecx		# MSR to read
-		rdmsr				# Read the MSR
-		movl %eax,0x1c(%ebp)		# Return the value of
-		movl %edx,0x14(%ebp)		#  the MSR to the user
-		jmp v86preret			# Finish up
-/*
- * Emulate CLI.
- */
-v86cli: 	andb $~0x2,0x31(%ebp)		# Clear IF
-		jmp v86mon.7			# Finish up
-/*
- * Emulate STI.
- */
-v86sti: 	orb $0x2,0x31(%ebp)		# Set IF
-		jmp v86mon.7			# Finish up
-/*
- * Emulate PUSHF/PUSHFD.
- */
-v86pushf:	subl %ecx,%ebx			# Adjust SP
-		cmpb $0x4,%cl			# 32-bit
-		je v86pushf.1			# Yes
-		data16				# 16-bit
-v86pushf.1:	movl %edx,(%ebx)		# Save flags
-		jmp v86mon.6			# Finish up
-/*
- * Emulate IRET/IRETD.
- */
-v86iret:	movzwl (%ebx),%esi		# Load V86 IP
-		movzwl 0x2(%ebx),%edi		# Load V86 CS
-		leal 0x4(%ebx),%ebx		# Adjust SP
-		movl %edi,0x2c(%ebp)		# Save V86 CS
-		xorl %edi,%edi			# No ESI adjustment
-/*
- * Emulate POPF/POPFD (and remainder of IRET/IRETD).
- */
-v86popf:	cmpb $0x4,%cl			# 32-bit?
-		je v86popf.1			# Yes
-		movl %edx,%eax			# Initialize
-		data16				# 16-bit
-v86popf.1:	movl (%ebx),%eax		# Load flags
-		addl %ecx,%ebx			# Adjust SP
-		andl $V86_FLG,%eax		# Merge
-		andl $~V86_FLG,%edx		#  the
-		orl %eax,%edx			#  flags
-		jmp v86mon.5			# Finish up
-/*
- * trap int 15, function 87
- * reads %es:%si from saved registers on stack to find a GDT containing
- * source and destination locations
- * reads count of words from saved %cx
- * returns success by setting %ah to 0
- */
-int15_87:	pushl %esi			# Save 
-		pushl %edi			#  registers
-		movl 0x3C(%ebp),%edi		# Load ES
-		movzwl 0x4(%ebp),%eax		# Load user's SI
-		shll $0x4,%edi			# EDI = (ES << 4) +
-		addl %eax,%edi			#   SI
-		movl 0x11(%edi),%eax		# Read base of
-		movb 0x17(%edi),%al		#  GDT entry
-		ror $8,%eax			#  for source
-		xchgl %eax,%esi			#  into %esi
-		movl 0x19(%edi),%eax		# Read base of
-		movb 0x1f(%edi),%al		#  GDT entry for
-		ror $8,%eax			#  destination
-		xchgl %eax,%edi			#  into %edi
-		pushl %ds			# Make:
-		popl %es			# es = ds
-		movzwl 0x18(%ebp),%ecx		# Get user's CX
-		shll $0x1,%ecx			# Convert count from words
-		rep				# repeat...
-		movsb				#  perform copy.
-		popl %edi			# Restore
-		popl %esi			#  registers
-		movb $0x0,0x1d(%ebp)		# set ah = 0 to indicate
-						#  success
-		andb $0xfe,%dl			# clear CF
-		jmp v86mon.5			# Finish up
 
 /*
  * Reboot the machine by setting the reboot flag and exiting
@@ -638,36 +418,7 @@ reboot:		orb $0x1,btx_hdr+0x7		# Set the reboot flag
 		jmp exit			# Terminate BTX and reboot
 
 /*
- * Emulate INT imm8... also make sure to check if it's int 15/87
- */
-v86intn:	lodsb				# Get int no
-		cmpb $0x19,%al			# is it int 19?
-		je reboot			#  yes, reboot the machine
-		cmpb $0x15,%al			# is it int 15?
-		jne v86intn.1			#  no, skip parse
-		cmpb $0x87,0x1d(%ebp)		# is it the memcpy subfunction?
-		je int15_87			#  yes
-		cmpw $0x4f53,0x1c(%ebp)		# is it the delete key callout?
-		jne v86intn.1			#  no, handle the int normally
-		movb BDA_KEYFLAGS,%ch		# get the shift key state
-		andb $0x18,%ch			# mask off just Ctrl and Alt
-		cmpb $0x18,%ch			# are both Ctrl and Alt down?
-		je reboot			# yes, reboot the machine
-v86intn.1:	subl %edi,%esi			# From
-		shrl $0x4,%edi			#  linear
-		movw %dx,-0x2(%ebx)		# Save flags
-		movw %di,-0x4(%ebx)		# Save CS
-		leal -0x6(%ebx),%ebx		# Adjust SP
-		movw %si,(%ebx) 		# Save IP
-		shll $0x2,%eax			# Scale
-		movzwl (%eax),%esi		# Load IP
-		movzwl 0x2(%eax),%edi		# Load CS
-		movl %edi,0x2c(%ebp)		# Save CS
-		xorl %edi,%edi			# No ESI adjustment
-		andb $~0x1,%dh			# Clear TF
-		jmp v86mon.5			# Finish up
-/*
- * Hardware interrupt jump table.
+ * Protected Mode Hardware interrupt jump table.
  */
 intx20: 	push $0x8			# Int 0x20: IRQ0
 		jmp int_hw			# V86 int 0x8
@@ -701,127 +452,267 @@ intx20: 	push $0x8			# Int 0x20: IRQ0
 		jmp int_hw			# V86 int 0x16
 		push $0x17			# Int 0x2f: IRQ15
 		jmp int_hw			# V86 int 0x17
+
 /*
- * Reflect hardware interrupts.
+ * Invoke real mode interrupt/function call from user mode with arguments.
  */
-int_hw: 	testb $0x2,0xe(%esp,1)		# V86 mode?
-		jz intusr			# No
-		pushl $SEL_SDATA		# Address
-		popl %ds			#  data
-		xchgl %eax,(%esp,1)		# Swap EAX, int no
-		pushl %ebp			# Address
-		movl %esp,%ebp			#  stack frame
-		pushl %ebx			# Save
-		shll $0x2,%eax			# Get int
-		movl (%eax),%eax		#  vector
-		subl $0x6,0x14(%ebp)		# Adjust V86 ESP
-		movzwl 0x18(%ebp),%ebx		# V86 SS
-		shll $0x4,%ebx			#  * 0x10
-		addl 0x14(%ebp),%ebx		#  + V86 ESP
-		xchgw %ax,0x8(%ebp)		# Swap V86 IP
-		rorl $0x10,%eax 		# Swap words
-		xchgw %ax,0xc(%ebp)		# Swap V86 CS
-		roll $0x10,%eax 		# Swap words
-		movl %eax,(%ebx)		# CS:IP for IRET
-		movl 0x10(%ebp),%eax		# V86 flags
-		movw %ax,0x4(%ebx)		# Flags for IRET
-		andb $~0x3,0x11(%ebp)		# Clear IF, TF
-		popl %ebx			# Restore
-		popl %ebp			#  saved
-		popl %eax			#  registers
-		iret				# To V86 mode
+intx31: 	pushl $-1			# Dummy int no for btx_v86
 /*
- * Invoke V86 interrupt from user mode, with arguments.
+ * Invoke real mode interrupt/function call from protected mode.
+ *
+ * We place a trampoline on the user stack that will return to rret_tramp
+ * which will reenter protected mode and then finally return to the user
+ * client.
+ *
+ * Kernel frame %esi points to:		Real mode stack frame at MEM_ESPR:
+ *
+ * -0x00 user %ss			-0x04 kernel %esp (with full frame)
+ * -0x04 user %esp			-0x08 btx_v86 pointer
+ * -0x08 user %eflags			-0x0c flags (only used if interrupt)
+ * -0x0c user %cs			-0x10 real mode CS:IP return trampoline
+ * -0x10 user %eip			-0x12 real mode flags
+ * -0x14 int no				-0x16 real mode CS:IP (target)
+ * -0x18 %eax
+ * -0x1c %ecx
+ * -0x20 %edx
+ * -0x24 %ebx
+ * -0x28 %esp
+ * -0x2c %ebp
+ * -0x30 %esi
+ * -0x34 %edi
+ * -0x38 %gs
+ * -0x3c %fs
+ * -0x40 %ds
+ * -0x44 %es
+ * -0x48 zero %eax (hardware int only)	
+ * -0x4c zero %ecx (hardware int only)
+ * -0x50 zero %edx (hardware int only)
+ * -0x54 zero %ebx (hardware int only)
+ * -0x58 zero %esp (hardware int only)
+ * -0x5c zero %ebp (hardware int only)
+ * -0x60 zero %esi (hardware int only)
+ * -0x64 zero %edi (hardware int only)
+ * -0x68 zero %gs (hardware int only)
+ * -0x6c zero %fs (hardware int only)
+ * -0x70 zero %ds (hardware int only)
+ * -0x74 zero %es (hardware int only)
  */
-intx31: 	stc				# Have btx_v86
-		pushl %eax			# Missing int no
-/*
- * Invoke V86 interrupt from user mode.
- */
-intusr: 	std				# String ops dec
-		pushl %eax			# Expand
-		pushl %eax			#  stack
-		pushl %eax			#  frame
-		pusha				# Save
+int_hw: 	cld				# String ops inc
+		pusha				# Save gp regs
 		pushl %gs			# Save
-		movl %esp,%eax			#  seg regs
-		pushl %fs			#  and
-		pushl %ds			#  point
-		pushl %es			#  to them
+		pushl %fs			#  seg
+		pushl %ds			#  regs
+		pushl %es
 		push $SEL_SDATA			# Set up
 		popl %ds			#  to
 		pushl %ds			#  address
 		popl %es			#  data
+		leal 0x44(%esp,1),%esi		# Base of frame
+		movl %esp,MEM_ESPR-0x04		# Save kernel stack pointer
+		movl -0x14(%esi),%eax		# Get Int no
+		cmpl $-1,%eax			# Hardware interrupt?
+		jne intusr.1			# Yes
+/*
+ * v86 calls save the btx_v86 pointer on the real mode stack and read
+ * the address and flags from the btx_v86 structure.  For interrupt
+ * handler invocations (VM86 INTx requests), disable interrupts,
+ * tracing, and alignment checking while the handler runs.
+ */
 		movl $MEM_USR,%ebx		# User base
 		movl %ebx,%edx			#  address
-		jc intusr.1			# If btx_v86
-		xorl %edx,%edx			# Control flags
-		xorl %ebp,%ebp			# btx_v86 pointer
-intusr.1:	leal 0x50(%esp,1),%esi		# Base of frame
-		pushl %esi			# Save
 		addl -0x4(%esi),%ebx		# User ESP
-		movl MEM_TSS+TSS_ESP1,%edi	# Link stack pointer
-		leal -0x4(%edi),%edi		# Adjust for push
-		xorl %ecx,%ecx			# Zero
-		movb $0x5,%cl			# Push exception
-		rep				#  frame on
-		movsl				#  link stack
-		xchgl %eax,%esi 		# Saved seg regs
-		movl 0x40(%esp,1),%eax		# Get int no
-		testl %edx,%edx 		# Have btx_v86?
-		jz intusr.2			# No
 		movl (%ebx),%ebp		# btx_v86 pointer
-		movb $0x4,%cl			# Count
-		addl %ecx,%ebx			# Adjust for pop
-		rep				# Push saved seg regs
-		movsl				#  on link stack
 		addl %ebp,%edx			# Flatten btx_v86 ptr
-		leal 0x14(%edx),%esi		# Seg regs pointer
-		movl 0x4(%edx),%eax		# Get int no/address
-		movzwl 0x2(%edx),%edx		# Get control flags
-intusr.2:	movl %ebp,(%edi)		# Push btx_v86 and
-		movl %edi,MEM_TSS+TSS_ESP1	#  save link stack ptr
-		popl %edi			# Base of frame
-		xchgl %eax,%ebp 		# Save intno/address
-		movl 0x48(%esp,1),%eax		# Get flags
-		testb $0x2,%dl			# Simulate CALLF?
-		jnz intusr.3			# Yes
-		decl %ebx			# Push flags
-		decl %ebx			#  on V86
-		movw %ax,(%ebx) 		#  stack
-intusr.3:	movb $0x4,%cl			# Count
-		subl %ecx,%ebx			# Push return address
-		movl $inthlt,(%ebx)		#  on V86 stack
-		rep				# Copy seg regs to
-		movsl				#  exception frame
-		xchgl %eax,%ecx 		# Save flags
-		movl %ebx,%eax			# User ESP
-		subl $V86_STK,%eax		# Less bytes
-		ja intusr.4			#  to
-		xorl %eax,%eax			#  keep
-intusr.4:	shrl $0x4,%eax			# Gives segment
-		stosl				# Set SS
-		shll $0x4,%eax			# To bytes
-		xchgl %eax,%ebx 		# Swap
-		subl %ebx,%eax			# Gives offset
-		stosl				# Set ESP
-		xchgl %eax,%ecx 		# Get flags
-		btsl $0x11,%eax 		# Set VM
-		andb $~0x1,%ah			# Clear TF
-		stosl				# Set EFL
-		xchgl %eax,%ebp 		# Get int no/address
-		testb $0x1,%dl			# Address?
-		jnz intusr.5			# Yes
-		shll $0x2,%eax			# Scale
+		movl %edx,MEM_ESPR-0x08		# Save btx_v86 ptr
+		movl V86_ADDR(%edx),%eax	# Get int no/address
+		movl V86_CTL(%edx),%edx		# Get control flags
+		movl -0x08(%esi),%ebx		# Save user flags in %ebx
+		testl $V86F_ADDR,%edx		# Segment:offset?
+		jnz intusr.4			# Yes
+		andl $~(PSL_I|PSL_T|PSL_AC),%ebx # Disable interrupts, tracing,
+						#  and alignment checking for
+						#  interrupt handler
+		jmp intusr.3			# Skip hardware interrupt
+/*
+ * Hardware interrupts store a NULL btx_v86 pointer and use the
+ * address (interrupt number) from the stack with empty flags.  Also,
+ * push a dummy frame of zeros onto the stack for all the general
+ * purpose and segment registers and clear %eflags.  This gives the
+ * hardware interrupt handler a clean slate.
+ */
+intusr.1:	xorl %edx,%edx			# Control flags
+		movl %edx,MEM_ESPR-0x08		# NULL btx_v86 ptr
+		movl $12,%ecx			# Frame is 12 dwords
+intusr.2:	pushl $0x0			# Fill frame
+		loop intusr.2			#  with zeros
+		movl $PSL_RESERVED_DEFAULT,%ebx # Set clean %eflags
+/*
+ * Look up real mode IDT entry for hardware interrupts and VM86 INTx
+ * requests.
+ */
+intusr.3:	shll $0x2,%eax			# Scale
 		movl (%eax),%eax		# Load int vector
-intusr.5:	movl %eax,%ecx			# Save
-		shrl $0x10,%eax 		# Gives segment
-		stosl				# Set CS
-		movw %cx,%ax			# Restore
-		stosl				# Set EIP
-		leal 0x10(%esp,1),%esp		# Discard seg regs
-		popa				# Restore
-		iret				# To V86 mode
+		jmp intusr.5			# Skip CALLF test
+/*
+ * Panic if V86F_CALLF isn't set with V86F_ADDR.
+ */
+intusr.4:	testl $V86F_CALLF,%edx		# Far call?
+		jnz intusr.5			# Ok
+		movl %edx,0x30(%esp,1)		# Place VM86 flags in int no
+		movl $badvm86,%esi		# Display bad
+		call putstr			#  VM86 call
+		popl %es			# Restore
+		popl %ds			#  seg
+		popl %fs			#  regs
+		popl %gs
+		popal				# Restore gp regs
+		jmp ex_noc			# Panic
+/*
+ * %eax now holds the segment:offset of the function.
+ * %ebx now holds the %eflags to pass to real mode.
+ * %edx now holds the V86F_* flags.
+ */
+intusr.5:	movw %bx,MEM_ESPR-0x12		# Pass user flags to real mode
+						#  target
+/*
+ * If this is a v86 call, copy the seg regs out of the btx_v86 structure.
+ */
+		movl MEM_ESPR-0x08,%ecx		# Get btx_v86 ptr
+		jecxz intusr.6			# Skip for hardware ints
+		leal -0x44(%esi),%edi		# %edi => kernel stack seg regs
+		pushl %esi			# Save
+		leal V86_ES(%ecx),%esi		# %esi => btx_v86 seg regs
+		movl $4,%ecx			# Copy seg regs
+		rep				#  from btx_v86
+		movsl				#  to kernel stack
+		popl %esi			# Restore
+intusr.6:	movl -0x08(%esi),%ebx		# Copy user flags to real
+		movl %ebx,MEM_ESPR-0x0c		#  mode return trampoline
+		movl $rret_tramp,%ebx		# Set return trampoline
+		movl %ebx,MEM_ESPR-0x10		#  CS:IP
+		movl %eax,MEM_ESPR-0x16		# Real mode target CS:IP
+		ljmpw $SEL_RCODE,$intusr.7	# Change to 16-bit segment
+		.code16
+intusr.7:	movl %cr0,%eax			# Leave
+		dec %al				#  protected
+		movl %eax,%cr0			#  mode
+		ljmpw $0x0,$intusr.8
+intusr.8:	xorw %ax,%ax			# Reset %ds
+		movw %ax,%ds			#  and
+		movw %ax,%ss			#  %ss
+		lidt ivtdesc	 		# Set IVT
+		popl %es			# Restore
+		popl %ds			#  seg
+		popl %fs			#  regs
+		popl %gs
+		popal				# Restore gp regs
+		movw $MEM_ESPR-0x16,%sp		# Switch to real mode stack
+		iret				# Call target routine
+/*
+ * For the return to real mode we setup a stack frame like this on the real
+ * mode stack.  Note that callf calls won't pop off the flags, but we just
+ * ignore that by repositioning %sp to be just above the btx_v86 pointer
+ * so it is aligned.  The stack is relative to MEM_ESPR.
+ *
+ * -0x04	kernel %esp
+ * -0x08	btx_v86
+ * -0x0c	%eax
+ * -0x10	%ecx
+ * -0x14	%edx
+ * -0x18	%ebx
+ * -0x1c	%esp
+ * -0x20	%ebp
+ * -0x24	%esi
+ * -0x28	%edi
+ * -0x2c	%gs
+ * -0x30	%fs
+ * -0x34	%ds
+ * -0x38	%es
+ * -0x3c	%eflags
+ */
+rret_tramp:	movw $MEM_ESPR-0x08,%sp		# Reset stack pointer
+		pushal				# Save gp regs
+		pushl %gs			# Save
+		pushl %fs			#  seg
+		pushl %ds			#  regs
+		pushl %es
+		pushfl				# Save %eflags
+		cli				# Disable interrupts
+		std				# String ops dec
+		xorw %ax,%ax			# Reset seg 
+		movw %ax,%ds			#  regs
+		movw %ax,%es			#  (%ss is already 0)
+		lidt idtdesc	 		# Set IDT
+		lgdt gdtdesc	 		# Set GDT
+		mov %cr0,%eax			# Switch to protected
+		inc %ax				#  mode
+		mov %eax,%cr0			#
+		ljmp $SEL_SCODE,$rret_tramp.1	# To 32-bit code
+		.code32
+rret_tramp.1:	xorl %ecx,%ecx			# Zero
+		movb $SEL_SDATA,%cl		# Setup
+		movw %cx,%ss			#  32-bit
+		movw %cx,%ds			#  seg
+		movw %cx,%es			#  regs
+		movl MEM_ESPR-0x04,%esp		# Switch to kernel stack
+		leal 0x44(%esp,1),%esi		# Base of frame
+		andb $~0x2,tss_desc+0x5		# Clear TSS busy
+		movb $SEL_TSS,%cl		# Set task
+		ltr %cx				#  register
+/*
+ * Now we are back in protected mode.  The kernel stack frame set up
+ * before entering real mode is still intact. For hardware interrupts,
+ * leave the frame unchanged.
+ */
+		cmpl $0,MEM_ESPR-0x08		# Leave saved regs unchanged
+		jz rret_tramp.3			#  for hardware ints
+/*
+ * For V86 calls, copy the registers off of the real mode stack onto
+ * the kernel stack as we want their updated values.  Also, initialize
+ * the segment registers on the kernel stack.
+ *
+ * Note that the %esp in the kernel stack after this is garbage, but popa
+ * ignores it, so we don't have to fix it up.
+ */
+		leal -0x18(%esi),%edi		# Kernel stack GP regs
+		pushl %esi			# Save
+		movl $MEM_ESPR-0x0c,%esi	# Real mode stack GP regs
+		movl $8,%ecx			# Copy GP regs from
+		rep				#  real mode stack
+		movsl				#  to kernel stack
+		movl $SEL_UDATA,%eax		# Selector for data seg regs
+		movl $4,%ecx			# Initialize %ds,
+		rep				#  %es, %fs, and
+		stosl				#  %gs
+/*
+ * For V86 calls, copy the saved seg regs on the real mode stack back
+ * over to the btx_v86 structure.  Also, conditionally update the
+ * saved eflags on the kernel stack based on the flags from the user.
+ */
+		movl MEM_ESPR-0x08,%ecx		# Get btx_v86 ptr
+		leal V86_GS(%ecx),%edi		# %edi => btx_v86 seg regs
+		leal MEM_ESPR-0x2c,%esi		# %esi => real mode seg regs
+		xchgl %ecx,%edx			# Save btx_v86 ptr
+		movl $4,%ecx			# Copy seg regs
+		rep				#  from real mode stack
+		movsl				#  to btx_v86
+		popl %esi			# Restore
+		movl V86_CTL(%edx),%edx		# Read V86 control flags
+		testl $V86F_FLAGS,%edx		# User wants flags?
+		jz rret_tramp.3			# No
+		movl MEM_ESPR-0x3c,%eax		# Read real mode flags
+		movw %ax,-0x08(%esi)		# Update user flags (low 16)
+/*
+ * Return to the user task
+ */
+rret_tramp.3:	popl %es			# Restore
+		popl %ds			#  seg
+		popl %fs			#  regs
+		popl %gs
+		popal				# Restore gp regs
+		addl $4,%esp			# Discard int no
+		iret				# Return to user mode
+
 /*
  * System Call.
  */
@@ -869,7 +760,7 @@ dump.1: 	testb $DMP_X32,%ch		# Dump long?
 dump.2: 	testb $DMP_MEM,%ch		# Dump memory?
 		jz dump.8			# No
 		pushl %ds			# Save
-		testb $0x2,0x52(%ebx)		# V86 mode?
+		testl $PSL_VM,0x50(%ebx)	# V86 mode?
 		jnz dump.3			# Yes
 		verr 0x4(%esi)	 		# Readable selector?
 		jnz dump.3			# No
@@ -1060,6 +951,61 @@ putchr.4:	movw %dx,(%ebx) 		# Update position
 		ret				# To caller
 #endif
 
+		.code16
+/*
+ * Real Mode Hardware interrupt jump table.
+ */
+intr20: 	push $0x8			# Int 0x20: IRQ0
+		jmp int_hwr			# V86 int 0x8
+		push $0x9			# Int 0x21: IRQ1
+		jmp int_hwr			# V86 int 0x9
+		push $0xa			# Int 0x22: IRQ2
+		jmp int_hwr			# V86 int 0xa
+		push $0xb			# Int 0x23: IRQ3
+		jmp int_hwr			# V86 int 0xb
+		push $0xc			# Int 0x24: IRQ4
+		jmp int_hwr			# V86 int 0xc
+		push $0xd			# Int 0x25: IRQ5
+		jmp int_hwr			# V86 int 0xd
+		push $0xe			# Int 0x26: IRQ6
+		jmp int_hwr			# V86 int 0xe
+		push $0xf			# Int 0x27: IRQ7
+		jmp int_hwr			# V86 int 0xf
+		push $0x10			# Int 0x28: IRQ8
+		jmp int_hwr			# V86 int 0x10
+		push $0x11			# Int 0x29: IRQ9
+		jmp int_hwr			# V86 int 0x11
+		push $0x12			# Int 0x2a: IRQ10
+		jmp int_hwr			# V86 int 0x12
+		push $0x13			# Int 0x2b: IRQ11
+		jmp int_hwr			# V86 int 0x13
+		push $0x14			# Int 0x2c: IRQ12
+		jmp int_hwr			# V86 int 0x14
+		push $0x15			# Int 0x2d: IRQ13
+		jmp int_hwr			# V86 int 0x15
+		push $0x16			# Int 0x2e: IRQ14
+		jmp int_hwr			# V86 int 0x16
+		push $0x17			# Int 0x2f: IRQ15
+		jmp int_hwr			# V86 int 0x17
+/*
+ * Reflect hardware interrupts in real mode.
+ */
+int_hwr: 	push %ax			# Save
+		push %ds			# Save
+		push %bp			# Save
+		mov %sp,%bp			# Address stack frame 
+		xchg %bx,6(%bp)			# Swap BX, int no
+		xor %ax,%ax			# Set %ds:%bx to
+		shl $2,%bx			#  point to
+		mov %ax,%ds			#  IDT entry
+		mov (%bx),%ax			# Load IP
+		mov 2(%bx),%bx			# Load CS
+		xchg %ax,4(%bp)			# Swap saved %ax,%bx with
+		xchg %bx,6(%bp)			#  CS:IP of handler
+		pop %bp				# Restore
+		pop %ds				# Restore
+		lret				# Jump to handler
+
 		.p2align 4
 /*
  * Global descriptor table.
@@ -1071,7 +1017,7 @@ gdt:		.word 0x0,0x0,0x0,0x0		# Null entry
 		.word 0xffff,0x0,0x9200,0x0	# SEL_RDATA
 		.word 0xffff,MEM_USR,0xfa00,0xcf# SEL_UCODE
 		.word 0xffff,MEM_USR,0xf200,0xcf# SEL_UDATA
-		.word _TSSLM,MEM_TSS,0x8900,0x0 # SEL_TSS
+tss_desc:	.word _TSSLM,MEM_TSS,0x8900,0x0 # SEL_TSS
 gdt.1:
 /*
  * Pseudo-descriptors.
@@ -1139,6 +1085,11 @@ dmpfmt: 	.byte '\n'			# "\n"
 		.ascii "ss:esp" 		# "ss:esp="
 		.byte 0x80|DMP_MEM|DMP_EOL,0x0	# "00 00 ... 00 00\n"
 		.asciz "BTX halted\n"		# End
+/*
+ * Bad VM86 call panic
+ */
+badvm86:	.asciz "Invalid VM86 Request\n"
+
 /*
  * End of BTX memory.
  */
diff --git a/sys/boot/pc98/kgzldr/crt.s b/sys/boot/pc98/kgzldr/crt.s
index e028bc8e672..35c1fc2dfe7 100644
--- a/sys/boot/pc98/kgzldr/crt.s
+++ b/sys/boot/pc98/kgzldr/crt.s
@@ -75,5 +75,15 @@ crt_putchr.3:	cmpw $SCR_ROW*SCR_COL*2,%dx
 		stosw				#  line
 		movw $(SCR_ROW-1)*SCR_COL*2,%dx
 crt_putchr.4:	movw %dx,(%ebx) 		# Update position
+		shrw $1,%dx
+crt_putchr.5:	inb $0x60,%al			# Move cursor
+		testb $0x04,%al
+		jz crt_putchr.5
+		movb $0x49,%al
+		outb %al,$0x62
+		movb %dl,%al
+		outb %al,$0x60
+		movb %dh,%al
+		outb %al,$0x60
 		popa				# Restore
 		ret				# To caller
diff --git a/sys/boot/pc98/libpc98/Makefile b/sys/boot/pc98/libpc98/Makefile
index 1a28b6b9a25..6c6ce892fdd 100644
--- a/sys/boot/pc98/libpc98/Makefile
+++ b/sys/boot/pc98/libpc98/Makefile
@@ -8,7 +8,7 @@ INTERNALLIB=
 SRCS=	bioscd.c biosdisk.c biosmem.c biospnp.c \
 	biospci.c biossmap.c bootinfo.c bootinfo32.c \
 	comconsole.c devicename.c elf32_freebsd.c \
-	i386_copy.c i386_module.c nullconsole.c pxe.c pxetramp.s \
+	i386_copy.c i386_module.c nullconsole.c pc98_sys.c pxe.c pxetramp.s \
 	time.c vidconsole.c
 
 # Enable PXE TFTP or NFS support, not both.
diff --git a/sys/boot/pc98/libpc98/biosdisk.c b/sys/boot/pc98/libpc98/biosdisk.c
index 2f18285a50d..c2e7d6618cd 100644
--- a/sys/boot/pc98/libpc98/biosdisk.c
+++ b/sys/boot/pc98/libpc98/biosdisk.c
@@ -906,11 +906,11 @@ bd_io(struct open_disk *od, daddr_t dblk, int blks, caddr_t dest, int write)
 	}
 
 	if (write)
-	    DEBUG("%d sectors from %lld to %p (0x%x) %s", x, dblk, p, VTOP(p),
-		result ? "failed" : "ok");
+	    DEBUG("Write %d sector(s) from %p (0x%x) to %lld %s", x,
+		p, VTOP(p), dblk, result ? "failed" : "ok");
 	else
-	    DEBUG("%d sectors from %p (0x%x) to %lld %s", x, p, VTOP(p), dblk,
-		result ? "failed" : "ok");
+	    DEBUG("Read %d sector(s) from %lld to %p (0x%x) %s", x,
+		dblk, p, VTOP(p), result ? "failed" : "ok");
 	if (result) {
 	    return(-1);
 	}
diff --git a/sys/boot/pc98/libpc98/biosmem.c b/sys/boot/pc98/libpc98/biosmem.c
index b450922e3d2..a25d8c2d9e9 100644
--- a/sys/boot/pc98/libpc98/biosmem.c
+++ b/sys/boot/pc98/libpc98/biosmem.c
@@ -34,8 +34,13 @@ __FBSDID("$FreeBSD$");
 #include "libi386.h"
 #include "btxv86.h"
 
-vm_offset_t	memtop, memtop_copyin;
-u_int32_t	bios_basemem, bios_extmem;
+vm_offset_t	memtop, memtop_copyin, high_heap_base;
+uint32_t	bios_basemem, bios_extmem, high_heap_size;
+
+/*
+ * The minimum amount of memory to reserve in bios_extmem for the heap.
+ */
+#define	HEAP_MIN	(3 * 1024 * 1024)
 
 void
 bios_getmem(void)
@@ -48,5 +53,12 @@ bios_getmem(void)
     /* Set memtop to actual top of memory */
     memtop = memtop_copyin = 0x100000 + bios_extmem;
 
+    /*
+     * If we have extended memory, use the last 3MB of 'extended' memory
+     * as a high heap candidate.
+     */
+    if (bios_extmem >= HEAP_MIN) {
+	high_heap_size = HEAP_MIN;
+	high_heap_base = memtop - HEAP_MIN;
+    }
 }    
-
diff --git a/sys/boot/pc98/libpc98/libpc98.h b/sys/boot/pc98/libpc98/libpc98.h
new file mode 100644
index 00000000000..78b07a10ffa
--- /dev/null
+++ b/sys/boot/pc98/libpc98/libpc98.h
@@ -0,0 +1,29 @@
+/*-
+ * Copyright (c) 2009 TAKAHASHI Yoshihiro 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+void set_machine_type(void);
diff --git a/sys/boot/pc98/libpc98/pc98_sys.c b/sys/boot/pc98/libpc98/pc98_sys.c
new file mode 100644
index 00000000000..7f66d02c630
--- /dev/null
+++ b/sys/boot/pc98/libpc98/pc98_sys.c
@@ -0,0 +1,78 @@
+/*-
+ * Copyright (c) 2009 TAKAHASHI Yoshihiro 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#define _KERNEL
+#include 
+
+/*
+ * Set machine type to PC98_SYSTEM_PARAMETER.
+ */
+void
+set_machine_type(void)
+{
+	int i;
+	u_long ret, data;
+
+	/* PC98_SYSTEM_PARAMETER (0x501) */
+	ret = ((*(u_char *)PTOV(0xA1501)) & 0x08) >> 3;
+
+	/* Wait V-SYNC */
+	while (inb(0x60) & 0x20) {}
+	while (!(inb(0x60) & 0x20)) {}
+
+	/* ANK 'A' font */
+	outb(0xa1, 0x00);
+	outb(0xa3, 0x41);
+
+	/* M_NORMAL, use CG window (all NEC OK)  */
+	for (i = data = 0; i < 4; i++)
+		data += *((u_long *)PTOV(0xA4000) + i);	/* 0xa4000 */
+	if (data == 0x6efc58fc)		/* DA data */
+		ret |= M_NEC_PC98;
+	else
+		ret |= M_EPSON_PC98;
+	ret |= (inb(0x42) & 0x20) ? M_8M : 0;
+
+	/* PC98_SYSTEM_PARAMETER(0x400) */
+	if ((*(u_char *)PTOV(0xA1400)) & 0x80)
+		ret |= M_NOTE;
+	if (ret & M_NEC_PC98) {
+		/* PC98_SYSTEM_PARAMETER(0x458) */
+		if ((*(u_char *)PTOV(0xA1458)) & 0x80)
+			ret |= M_H98;
+		else
+			ret |= M_NOT_H98;
+	} else
+		ret |= M_NOT_H98;
+
+	(*(u_long *)PTOV(0xA1620)) = ret;
+}
diff --git a/sys/boot/pc98/loader/main.c b/sys/boot/pc98/loader/main.c
index 6573990faa3..da14d0bcf8f 100644
--- a/sys/boot/pc98/loader/main.c
+++ b/sys/boot/pc98/loader/main.c
@@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
 
 #include "bootstrap.h"
 #include "libi386/libi386.h"
+#include "libpc98/libpc98.h"
 #include "btxv86.h"
 
 #define	KARGS_FLAGS_CD		0x1
@@ -81,6 +82,9 @@ main(void)
 {
     int			i;
 
+    /* Set machine type to PC98_SYSTEM_PARAMETER. */
+    set_machine_type();
+
     /* Pick up arguments */
     kargs = (void *)__args;
     initial_howto = kargs->howto;
@@ -96,14 +100,18 @@ main(void)
      */
     bios_getmem();
 
-#ifdef LOADER_BZIP2_SUPPORT
-    heap_top = PTOV(memtop_copyin);
-    memtop_copyin -= 0x300000;
-    heap_bottom = PTOV(memtop_copyin);
-#else
-    heap_top = (void *)bios_basemem;
-    heap_bottom = (void *)end;
+#if defined(LOADER_BZIP2_SUPPORT)
+    if (high_heap_size > 0) {
+	heap_top = PTOV(high_heap_base + high_heap_size);
+	heap_bottom = PTOV(high_heap_base);
+	if (high_heap_base < memtop_copyin)
+	    memtop_copyin = high_heap_base;
+    } else
 #endif
+    {
+	heap_top = (void *)PTOV(bios_basemem);
+	heap_bottom = (void *)end;
+    }
     setheap(heap_bottom, heap_top);
 
     /* 
diff --git a/sys/boot/sparc64/loader/main.c b/sys/boot/sparc64/loader/main.c
index 3a899a862e0..604e792445d 100644
--- a/sys/boot/sparc64/loader/main.c
+++ b/sys/boot/sparc64/loader/main.c
@@ -261,7 +261,6 @@ static int
 sparc64_autoload(void)
 {
 
-	setenv("hw.ata.atapi_dma", "0", 0);
 	return (0);
 }
 
@@ -387,6 +386,8 @@ __elfN(exec)(struct preloaded_file *fp)
 	pmap_print_tlb_sun4u();
 #endif
 
+	dev_cleanup();
+
 	entry = e->e_entry;
 
 	OF_release((void *)heapva, HEAPSZ);
diff --git a/sys/boot/uboot/common/metadata.c b/sys/boot/uboot/common/metadata.c
index 9c8ce94d4f3..e5f4b04c37b 100644
--- a/sys/boot/uboot/common/metadata.c
+++ b/sys/boot/uboot/common/metadata.c
@@ -231,6 +231,7 @@ md_copymodules(vm_offset_t addr)
 	struct preloaded_file	*fp;
 	struct file_metadata	*md;
 	int			c;
+	vm_offset_t a;
 
 	c = addr != 0;
 	/* start with the first module on the list, should be the kernel */
@@ -240,7 +241,8 @@ md_copymodules(vm_offset_t addr)
 		MOD_TYPE(addr, fp->f_type, c);
 		if (fp->f_args)
 			MOD_ARGS(addr, fp->f_args, c);
-		MOD_ADDR(addr, fp->f_addr, c);
+		a = fp->f_addr - __elfN(relocation_offset);
+		MOD_ADDR(addr, a, c);
 		MOD_SIZE(addr, fp->f_size, c);
 		for (md = fp->f_metadata; md != NULL; md = md->md_next) {
 			if (!(md->md_type & MODINFOMD_NOCOPY))
diff --git a/sys/boot/uboot/lib/glue.c b/sys/boot/uboot/lib/glue.c
index 5a9591c90f0..5483732881a 100644
--- a/sys/boot/uboot/lib/glue.c
+++ b/sys/boot/uboot/lib/glue.c
@@ -568,17 +568,16 @@ ub_env_enum(const char *last)
 	const char *env, *str;
 	int i;
 
-	env = NULL;
-
 	/*
 	 * It's OK to pass only the name piece as last (and not the whole
 	 * 'name=val' string), since the API_ENUM_ENV call uses envmatch()
 	 * internally, which handles such case
 	 */
-	if (!syscall(API_ENV_ENUM, NULL, (uint32_t)last, (uint32_t)&env))
+	env = NULL;
+	if (syscall(API_ENV_ENUM, NULL, (uint32_t)last, (uint32_t)&env) != 0)
 		return (NULL);
 
-	if (!env)
+	if (env == NULL)
 		/* no more env. variables to enumerate */
 		return (NULL);
 
diff --git a/sys/boot/zfs/zfsimpl.c b/sys/boot/zfs/zfsimpl.c
index 497fd7c94be..adddb6a4f2a 100644
--- a/sys/boot/zfs/zfsimpl.c
+++ b/sys/boot/zfs/zfsimpl.c
@@ -51,7 +51,7 @@ static char *dnode_cache_buf;
 static char *zap_scratch;
 static char *zfs_temp_buf, *zfs_temp_end, *zfs_temp_ptr;
 
-#define TEMP_SIZE	(1*SPA_MAXBLOCKSIZE)
+#define TEMP_SIZE	(1024 * 1024)
 
 static int zio_read(spa_t *spa, const blkptr_t *bp, void *buf);
 
diff --git a/sys/cam/ata/ata_all.c b/sys/cam/ata/ata_all.c
index 5863ea84180..25daea4eb7f 100644
--- a/sys/cam/ata/ata_all.c
+++ b/sys/cam/ata/ata_all.c
@@ -75,6 +75,11 @@ ata_op_string(struct ata_cmd *cmd)
 	switch (cmd->command) {
 	case 0x00: return ("NOP");
 	case 0x03: return ("CFA_REQUEST_EXTENDED_ERROR");
+	case 0x06:
+		switch (cmd->features) {
+	        case 0x01: return ("DSM TRIM");
+	        }
+	        return "DSM";
 	case 0x08: return ("DEVICE_RESET");
 	case 0x20: return ("READ");
 	case 0x24: return ("READ48");
@@ -93,8 +98,8 @@ ata_op_string(struct ata_cmd *cmd)
 	case 0x39: return ("WRITE_MUL48");
 	case 0x3a: return ("WRITE_STREAM_DMA48");
 	case 0x3b: return ("WRITE_STREAM48");
-	case 0x3d: return ("WRITE_DMA_FUA");
-	case 0x3e: return ("WRITE_DMA_FUA48");
+	case 0x3d: return ("WRITE_DMA_FUA48");
+	case 0x3e: return ("WRITE_DMA_QUEUED_FUA48");
 	case 0x3f: return ("WRITE_LOG_EXT");
 	case 0x40: return ("READ_VERIFY");
 	case 0x42: return ("READ_VERIFY48");
@@ -119,7 +124,7 @@ ata_op_string(struct ata_cmd *cmd)
 	case 0xca: return ("WRITE_DMA");
 	case 0xcc: return ("WRITE_DMA_QUEUED");
 	case 0xcd: return ("CFA_WRITE_MULTIPLE_WITHOUT_ERASE");
-	case 0xce: return ("WRITE_MULTIPLE_FUA48");
+	case 0xce: return ("WRITE_MUL_FUA48");
 	case 0xd1: return ("CHECK_MEDIA_CARD_TYPE");
 	case 0xda: return ("GET_MEDIA_STATUS");
 	case 0xde: return ("MEDIA_LOCK");
@@ -256,8 +261,10 @@ ata_print_ident(struct ata_params *ident_data)
 		   sizeof(product));
 	cam_strvis(revision, ident_data->revision, sizeof(ident_data->revision),
 		   sizeof(revision));
-	printf("<%s %s> ATA/ATAPI-%d",
-	    product, revision, ata_version(ident_data->version_major));
+	printf("<%s %s> %s-%d",
+	    product, revision,
+	    (ident_data->config & ATA_PROTO_ATAPI) ? "ATAPI" : "ATA",
+	    ata_version(ident_data->version_major));
 	if (ident_data->satacapabilities && ident_data->satacapabilities != 0xffff) {
 		if (ident_data->satacapabilities & ATA_SATA_GEN3)
 			printf(" SATA 3.x");
@@ -309,6 +316,11 @@ ata_28bit_cmd(struct ccb_ataio *ataio, uint8_t cmd, uint8_t features,
 {
 	bzero(&ataio->cmd, sizeof(ataio->cmd));
 	ataio->cmd.flags = 0;
+	if (cmd == ATA_READ_DMA ||
+	    cmd == ATA_READ_DMA_QUEUED ||
+	    cmd == ATA_WRITE_DMA ||
+	    cmd == ATA_WRITE_DMA_QUEUED)
+		ataio->cmd.flags |= CAM_ATAIO_DMA;
 	ataio->cmd.command = cmd;
 	ataio->cmd.features = features;
 	ataio->cmd.lba_low = lba;
@@ -324,6 +336,16 @@ ata_48bit_cmd(struct ccb_ataio *ataio, uint8_t cmd, uint16_t features,
 {
 	bzero(&ataio->cmd, sizeof(ataio->cmd));
 	ataio->cmd.flags = CAM_ATAIO_48BIT;
+	if (cmd == ATA_READ_DMA48 ||
+	    cmd == ATA_READ_DMA_QUEUED48 ||
+	    cmd == ATA_READ_STREAM_DMA48 ||
+	    cmd == ATA_WRITE_DMA48 ||
+	    cmd == ATA_WRITE_DMA_FUA48 ||
+	    cmd == ATA_WRITE_DMA_QUEUED48 ||
+	    cmd == ATA_WRITE_DMA_QUEUED_FUA48 ||
+	    cmd == ATA_WRITE_STREAM_DMA48 ||
+	    cmd == ATA_DATA_SET_MANAGEMENT)
+		ataio->cmd.flags |= CAM_ATAIO_DMA;
 	ataio->cmd.command = cmd;
 	ataio->cmd.features = features;
 	ataio->cmd.lba_low = lba;
@@ -491,22 +513,143 @@ ata_max_umode(struct ata_params *ap)
 }
 
 int
-ata_max_mode(struct ata_params *ap, int mode, int maxmode)
+ata_max_mode(struct ata_params *ap, int maxmode)
 {
 
-    if (maxmode && mode > maxmode)
-	mode = maxmode;
+	if (maxmode == 0)
+		maxmode = ATA_DMA_MAX;
+	if (maxmode >= ATA_UDMA0 && ata_max_umode(ap) > 0)
+		return (min(maxmode, ata_max_umode(ap)));
+	if (maxmode >= ATA_WDMA0 && ata_max_wmode(ap) > 0)
+		return (min(maxmode, ata_max_wmode(ap)));
+	return (min(maxmode, ata_max_pmode(ap)));
+}
 
-    if (mode >= ATA_UDMA0 && ata_max_umode(ap) > 0)
-	return (min(mode, ata_max_umode(ap)));
+char *
+ata_mode2string(int mode)
+{
+    switch (mode) {
+    case -1: return "UNSUPPORTED";
+    case 0: return "NONE";
+    case ATA_PIO0: return "PIO0";
+    case ATA_PIO1: return "PIO1";
+    case ATA_PIO2: return "PIO2";
+    case ATA_PIO3: return "PIO3";
+    case ATA_PIO4: return "PIO4";
+    case ATA_WDMA0: return "WDMA0";
+    case ATA_WDMA1: return "WDMA1";
+    case ATA_WDMA2: return "WDMA2";
+    case ATA_UDMA0: return "UDMA0";
+    case ATA_UDMA1: return "UDMA1";
+    case ATA_UDMA2: return "UDMA2";
+    case ATA_UDMA3: return "UDMA3";
+    case ATA_UDMA4: return "UDMA4";
+    case ATA_UDMA5: return "UDMA5";
+    case ATA_UDMA6: return "UDMA6";
+    default:
+	if (mode & ATA_DMA_MASK)
+	    return "BIOSDMA";
+	else
+	    return "BIOSPIO";
+    }
+}
 
-    if (mode >= ATA_WDMA0 && ata_max_wmode(ap) > 0)
-	return (min(mode, ata_max_wmode(ap)));
+int
+ata_string2mode(char *str)
+{
+	if (!strcasecmp(str, "PIO0")) return (ATA_PIO0);
+	if (!strcasecmp(str, "PIO1")) return (ATA_PIO1);
+	if (!strcasecmp(str, "PIO2")) return (ATA_PIO2);
+	if (!strcasecmp(str, "PIO3")) return (ATA_PIO3);
+	if (!strcasecmp(str, "PIO4")) return (ATA_PIO4);
+	if (!strcasecmp(str, "WDMA0")) return (ATA_WDMA0);
+	if (!strcasecmp(str, "WDMA1")) return (ATA_WDMA1);
+	if (!strcasecmp(str, "WDMA2")) return (ATA_WDMA2);
+	if (!strcasecmp(str, "UDMA0")) return (ATA_UDMA0);
+	if (!strcasecmp(str, "UDMA16")) return (ATA_UDMA0);
+	if (!strcasecmp(str, "UDMA1")) return (ATA_UDMA1);
+	if (!strcasecmp(str, "UDMA25")) return (ATA_UDMA1);
+	if (!strcasecmp(str, "UDMA2")) return (ATA_UDMA2);
+	if (!strcasecmp(str, "UDMA33")) return (ATA_UDMA2);
+	if (!strcasecmp(str, "UDMA3")) return (ATA_UDMA3);
+	if (!strcasecmp(str, "UDMA44")) return (ATA_UDMA3);
+	if (!strcasecmp(str, "UDMA4")) return (ATA_UDMA4);
+	if (!strcasecmp(str, "UDMA66")) return (ATA_UDMA4);
+	if (!strcasecmp(str, "UDMA5")) return (ATA_UDMA5);
+	if (!strcasecmp(str, "UDMA100")) return (ATA_UDMA5);
+	if (!strcasecmp(str, "UDMA6")) return (ATA_UDMA6);
+	if (!strcasecmp(str, "UDMA133")) return (ATA_UDMA6);
+	return (-1);
+}
 
-    if (mode > ata_max_pmode(ap))
-	return (min(mode, ata_max_pmode(ap)));
 
-    return (mode);
+u_int
+ata_mode2speed(int mode)
+{
+	switch (mode) {
+	case ATA_PIO0:
+	default:
+		return (3300);
+	case ATA_PIO1:
+		return (5200);
+	case ATA_PIO2:
+		return (8300);
+	case ATA_PIO3:
+		return (11100);
+	case ATA_PIO4:
+		return (16700);
+	case ATA_WDMA0:
+		return (4200);
+	case ATA_WDMA1:
+		return (13300);
+	case ATA_WDMA2:
+		return (16700);
+	case ATA_UDMA0:
+		return (16700);
+	case ATA_UDMA1:
+		return (25000);
+	case ATA_UDMA2:
+		return (33300);
+	case ATA_UDMA3:
+		return (44400);
+	case ATA_UDMA4:
+		return (66700);
+	case ATA_UDMA5:
+		return (100000);
+	case ATA_UDMA6:
+		return (133000);
+	}
+}
+
+u_int
+ata_revision2speed(int revision)
+{
+	switch (revision) {
+	case 1:
+	default:
+		return (150000);
+	case 2:
+		return (300000);
+	case 3:
+		return (600000);
+	}
+}
+
+int
+ata_speed2revision(u_int speed)
+{
+	switch (speed) {
+	case 0:
+		return (0);
+	case 150000:
+		return (1);
+	case 300000:
+		return (2);
+	case 600000:
+		return (3);
+	default:
+		return (-1);
+	}
 }
 
 int
diff --git a/sys/cam/ata/ata_all.h b/sys/cam/ata/ata_all.h
index 13de02de8b5..2e838fdc7b4 100644
--- a/sys/cam/ata/ata_all.h
+++ b/sys/cam/ata/ata_all.h
@@ -41,6 +41,7 @@ struct ata_cmd {
 #define		CAM_ATAIO_FPDMA		0x02	/* FPDMA command */
 #define		CAM_ATAIO_CONTROL	0x04	/* Control, not a command */
 #define		CAM_ATAIO_NEEDRESULT	0x08	/* Request requires result. */
+#define		CAM_ATAIO_DMA		0x10	/* DMA command */
 
 	u_int8_t	command;
 	u_int8_t	features;
@@ -112,7 +113,13 @@ void	ata_bpack(int8_t *src, int8_t *dst, int len);
 int	ata_max_pmode(struct ata_params *ap);
 int	ata_max_wmode(struct ata_params *ap);
 int	ata_max_umode(struct ata_params *ap);
-int	ata_max_mode(struct ata_params *ap, int mode, int maxmode);
+int	ata_max_mode(struct ata_params *ap, int maxmode);
+
+char *	ata_mode2string(int mode);
+int	ata_string2mode(char *str);
+u_int	ata_mode2speed(int mode);
+u_int	ata_revision2speed(int revision);
+int	ata_speed2revision(u_int speed);
 
 int	ata_identify_match(caddr_t identbuffer, caddr_t table_entry);
 int	ata_static_identify_match(caddr_t identbuffer, caddr_t table_entry);
diff --git a/sys/cam/ata/ata_da.c b/sys/cam/ata/ata_da.c
index 4a9a9c3d715..8d493096bff 100644
--- a/sys/cam/ata/ata_da.c
+++ b/sys/cam/ata/ata_da.c
@@ -74,8 +74,10 @@ typedef enum {
 	ADA_FLAG_CAN_DMA	= 0x010,
 	ADA_FLAG_NEED_OTAG	= 0x020,
 	ADA_FLAG_WENT_IDLE	= 0x040,
+	ADA_FLAG_CAN_TRIM	= 0x080,
 	ADA_FLAG_OPEN		= 0x100,
-	ADA_FLAG_SCTX_INIT	= 0x200
+	ADA_FLAG_SCTX_INIT	= 0x200,
+	ADA_FLAG_CAN_CFA        = 0x400
 } ada_flags;
 
 typedef enum {
@@ -86,6 +88,7 @@ typedef enum {
 	ADA_CCB_BUFFER_IO	= 0x03,
 	ADA_CCB_WAITING		= 0x04,
 	ADA_CCB_DUMP		= 0x05,
+	ADA_CCB_TRIM		= 0x06,
 	ADA_CCB_TYPE_MASK	= 0x0F,
 } ada_ccb_state;
 
@@ -101,13 +104,23 @@ struct disk_params {
 	u_int64_t sectors;	/* Total number sectors */
 };
 
+#define TRIM_MAX_BLOCKS	4
+#define TRIM_MAX_RANGES	TRIM_MAX_BLOCKS * 64
+struct trim_request {
+	uint8_t		data[TRIM_MAX_RANGES * 8];
+	struct bio	*bps[TRIM_MAX_RANGES];
+};
+
 struct ada_softc {
 	struct	 bio_queue_head bio_queue;
+	struct	 bio_queue_head trim_queue;
 	ada_state state;
 	ada_flags flags;	
 	ada_quirks quirks;
 	int	 ordered_tag_count;
 	int	 outstanding_cmds;
+	int	 trim_max_ranges;
+	int	 trim_running;
 	struct	 disk_params params;
 	struct	 disk *disk;
 	union	 ccb saved_ccb;
@@ -115,6 +128,7 @@ struct ada_softc {
 	struct sysctl_ctx_list	sysctl_ctx;
 	struct sysctl_oid	*sysctl_tree;
 	struct callout		sendordered_c;
+	struct trim_request	trim_req;
 };
 
 struct ada_quirk_entry {
@@ -309,6 +323,18 @@ adaclose(struct disk *dp)
 	return (0);	
 }
 
+static void
+adaschedule(struct cam_periph *periph)
+{
+	struct ada_softc *softc = (struct ada_softc *)periph->softc;
+
+	if (bioq_first(&softc->bio_queue) ||
+	    (!softc->trim_running && bioq_first(&softc->trim_queue))) {
+		/* Have more work to do, so ensure we stay scheduled */
+		xpt_schedule(periph, CAM_PRIORITY_NORMAL);
+	}
+}
+
 /*
  * Actually translate the requested transfer into one the physical driver
  * can understand.  The transfer is described by a buf and will include
@@ -341,12 +367,16 @@ adastrategy(struct bio *bp)
 	/*
 	 * Place it in the queue of disk activities for this disk
 	 */
-	bioq_disksort(&softc->bio_queue, bp);
+	if (bp->bio_cmd == BIO_DELETE &&
+	    (softc->flags & ADA_FLAG_CAN_TRIM))
+		bioq_disksort(&softc->trim_queue, bp);
+	else
+		bioq_disksort(&softc->bio_queue, bp);
 
 	/*
 	 * Schedule ourselves for performing the work.
 	 */
-	xpt_schedule(periph, CAM_PRIORITY_NORMAL);
+	adaschedule(periph);
 	cam_periph_unlock(periph);
 
 	return;
@@ -485,6 +515,7 @@ adaoninvalidate(struct cam_periph *periph)
 	 *     with XPT_ABORT_CCB.
 	 */
 	bioq_flush(&softc->bio_queue, NULL, ENXIO);
+	bioq_flush(&softc->trim_queue, NULL, ENXIO);
 
 	disk_gone(softc->disk);
 	xpt_print(periph->path, "lost device\n");
@@ -618,6 +649,7 @@ adaregister(struct cam_periph *periph, void *arg)
 	}
 
 	bioq_init(&softc->bio_queue);
+	bioq_init(&softc->trim_queue);
 
 	if (cgd->ident_data.capabilities1 & ATA_SUPPORT_DMA)
 		softc->flags |= ADA_FLAG_CAN_DMA;
@@ -628,6 +660,17 @@ adaregister(struct cam_periph *periph, void *arg)
 	if (cgd->ident_data.satacapabilities & ATA_SUPPORT_NCQ &&
 	    cgd->inq_flags & SID_CmdQue)
 		softc->flags |= ADA_FLAG_CAN_NCQ;
+	if (cgd->ident_data.support_dsm & ATA_SUPPORT_DSM_TRIM) {
+		softc->flags |= ADA_FLAG_CAN_TRIM;
+		softc->trim_max_ranges = TRIM_MAX_RANGES;
+		if (cgd->ident_data.max_dsm_blocks != 0) {
+			softc->trim_max_ranges =
+			    min(cgd->ident_data.max_dsm_blocks * 64,
+				softc->trim_max_ranges);
+		}
+	}
+	if (cgd->ident_data.support.command2 & ATA_SUPPORT_CFA)
+		softc->flags |= ADA_FLAG_CAN_CFA;
 	softc->state = ADA_STATE_NORMAL;
 
 	periph->softc = softc;
@@ -672,7 +715,7 @@ adaregister(struct cam_periph *periph, void *arg)
 		maxio = DFLTPHYS;	/* traditional default */
 	else if (maxio > MAXPHYS)
 		maxio = MAXPHYS;	/* for safety */
-	if (cgd->ident_data.support.command2 & ATA_SUPPORT_ADDRESS48)
+	if (softc->flags & ADA_FLAG_CAN_48BIT)
 		maxio = min(maxio, 65536 * softc->params.secsize);
 	else					/* 28bit ATA command limit */
 		maxio = min(maxio, 256 * softc->params.secsize);
@@ -681,15 +724,24 @@ adaregister(struct cam_periph *periph, void *arg)
 	softc->disk->d_flags = 0;
 	if (softc->flags & ADA_FLAG_CAN_FLUSHCACHE)
 		softc->disk->d_flags |= DISKFLAG_CANFLUSHCACHE;
+	if ((softc->flags & ADA_FLAG_CAN_TRIM) ||
+	    ((softc->flags & ADA_FLAG_CAN_CFA) &&
+	    !(softc->flags & ADA_FLAG_CAN_48BIT)))
+		softc->disk->d_flags |= DISKFLAG_CANDELETE;
 	strlcpy(softc->disk->d_ident, cgd->serial_num,
 	    MIN(sizeof(softc->disk->d_ident), cgd->serial_num_len + 1));
 
 	softc->disk->d_sectorsize = softc->params.secsize;
 	softc->disk->d_mediasize = (off_t)softc->params.sectors *
 	    softc->params.secsize;
-	softc->disk->d_stripesize = ata_physical_sector_size(&cgd->ident_data);
-	softc->disk->d_stripeoffset = softc->disk->d_stripesize -
-	    ata_logical_sector_offset(&cgd->ident_data);
+	if (ata_physical_sector_size(&cgd->ident_data) !=
+	    softc->params.secsize) {
+		softc->disk->d_stripesize =
+		    ata_physical_sector_size(&cgd->ident_data);
+		softc->disk->d_stripeoffset = (softc->disk->d_stripesize -
+		    ata_logical_sector_offset(&cgd->ident_data)) %
+		    softc->disk->d_stripesize;
+	}
 	/* XXX: these are not actually "firmware" values, so they may be wrong */
 	softc->disk->d_fwsectors = softc->params.secs_per_track;
 	softc->disk->d_fwheads = softc->params.heads;
@@ -738,13 +790,10 @@ adastart(struct cam_periph *periph, union ccb *start_ccb)
 	switch (softc->state) {
 	case ADA_STATE_NORMAL:
 	{
-		/* Pull a buffer from the queue and get going on it */		
 		struct bio *bp;
+		u_int8_t tag_code;
 
-		/*
-		 * See if there is a buf with work for us to do..
-		 */
-		bp = bioq_first(&softc->bio_queue);
+		/* Execute immediate CCB if waiting. */
 		if (periph->immediate_priority <= periph->pinfo.priority) {
 			CAM_DEBUG_PRINT(CAM_DEBUG_SUBTRACE,
 					("queuing for immediate ccb\n"));
@@ -753,115 +802,188 @@ adastart(struct cam_periph *periph, union ccb *start_ccb)
 					  periph_links.sle);
 			periph->immediate_priority = CAM_PRIORITY_NONE;
 			wakeup(&periph->ccb_list);
-		} else if (bp == NULL) {
+			/* Have more work to do, so ensure we stay scheduled */
+			adaschedule(periph);
+			break;
+		}
+		/* Run TRIM if not running yet. */
+		if (!softc->trim_running &&
+		    (bp = bioq_first(&softc->trim_queue)) != 0) {
+			struct trim_request *req = &softc->trim_req;
+			struct bio *bp1;
+			int bps = 0, ranges = 0;
+
+			softc->trim_running = 1;
+			bzero(req, sizeof(*req));
+			bp1 = bp;
+			do {
+				uint64_t lba = bp1->bio_pblkno;
+				int count = bp1->bio_bcount /
+				    softc->params.secsize;
+
+				bioq_remove(&softc->trim_queue, bp1);
+				while (count > 0) {
+					int c = min(count, 0xffff);
+					int off = ranges * 8;
+
+					req->data[off + 0] = lba & 0xff;
+					req->data[off + 1] = (lba >> 8) & 0xff;
+					req->data[off + 2] = (lba >> 16) & 0xff;
+					req->data[off + 3] = (lba >> 24) & 0xff;
+					req->data[off + 4] = (lba >> 32) & 0xff;
+					req->data[off + 5] = (lba >> 40) & 0xff;
+					req->data[off + 6] = c & 0xff;
+					req->data[off + 7] = (c >> 8) & 0xff;
+					lba += c;
+					count -= c;
+					ranges++;
+				}
+				req->bps[bps++] = bp1;
+				bp1 = bioq_first(&softc->trim_queue);
+				if (bp1 == NULL ||
+				    bp1->bio_bcount / softc->params.secsize >
+				    (softc->trim_max_ranges - ranges) * 0xffff)
+					break;
+			} while (1);
+			cam_fill_ataio(ataio,
+			    ada_retry_count,
+			    adadone,
+			    CAM_DIR_OUT,
+			    0,
+			    req->data,
+			    ((ranges + 63) / 64) * 512,
+			    ada_default_timeout * 1000);
+			ata_48bit_cmd(ataio, ATA_DATA_SET_MANAGEMENT,
+			    ATA_DSM_TRIM, 0, (ranges + 63) / 64);
+			start_ccb->ccb_h.ccb_state = ADA_CCB_TRIM;
+			goto out;
+		}
+		/* Run regular command. */
+		bp = bioq_first(&softc->bio_queue);
+		if (bp == NULL) {
 			xpt_release_ccb(start_ccb);
+			break;
+		}
+		bioq_remove(&softc->bio_queue, bp);
+
+		if ((softc->flags & ADA_FLAG_NEED_OTAG) != 0) {
+			softc->flags &= ~ADA_FLAG_NEED_OTAG;
+			softc->ordered_tag_count++;
+			tag_code = 0;
 		} else {
-			u_int8_t tag_code;
+			tag_code = 1;
+		}
+		switch (bp->bio_cmd) {
+		case BIO_READ:
+		case BIO_WRITE:
+		{
+			uint64_t lba = bp->bio_pblkno;
+			uint16_t count = bp->bio_bcount / softc->params.secsize;
 
-			bioq_remove(&softc->bio_queue, bp);
+			cam_fill_ataio(ataio,
+			    ada_retry_count,
+			    adadone,
+			    bp->bio_cmd == BIO_READ ?
+			        CAM_DIR_IN : CAM_DIR_OUT,
+			    tag_code,
+			    bp->bio_data,
+			    bp->bio_bcount,
+			    ada_default_timeout*1000);
 
-			if ((softc->flags & ADA_FLAG_NEED_OTAG) != 0) {
-				softc->flags &= ~ADA_FLAG_NEED_OTAG;
-				softc->ordered_tag_count++;
-				tag_code = 0;
-			} else {
-				tag_code = 1;
-			}
-			switch (bp->bio_cmd) {
-			case BIO_READ:
-			case BIO_WRITE:
-			{
-				uint64_t lba = bp->bio_pblkno;
-				uint16_t count = bp->bio_bcount / softc->params.secsize;
-
-				cam_fill_ataio(ataio,
-				    ada_retry_count,
-				    adadone,
-				    bp->bio_cmd == BIO_READ ?
-				        CAM_DIR_IN : CAM_DIR_OUT,
-				    tag_code,
-				    bp->bio_data,
-				    bp->bio_bcount,
-				    ada_default_timeout*1000);
-
-				if ((softc->flags & ADA_FLAG_CAN_NCQ) && tag_code) {
+			if ((softc->flags & ADA_FLAG_CAN_NCQ) && tag_code) {
+				if (bp->bio_cmd == BIO_READ) {
+					ata_ncq_cmd(ataio, ATA_READ_FPDMA_QUEUED,
+					    lba, count);
+				} else {
+					ata_ncq_cmd(ataio, ATA_WRITE_FPDMA_QUEUED,
+					    lba, count);
+				}
+			} else if ((softc->flags & ADA_FLAG_CAN_48BIT) &&
+			    (lba + count >= ATA_MAX_28BIT_LBA ||
+			    count > 256)) {
+				if (softc->flags & ADA_FLAG_CAN_DMA) {
 					if (bp->bio_cmd == BIO_READ) {
-						ata_ncq_cmd(ataio, ATA_READ_FPDMA_QUEUED,
-						    lba, count);
+						ata_48bit_cmd(ataio, ATA_READ_DMA48,
+						    0, lba, count);
 					} else {
-						ata_ncq_cmd(ataio, ATA_WRITE_FPDMA_QUEUED,
-						    lba, count);
-					}
-				} else if ((softc->flags & ADA_FLAG_CAN_48BIT) &&
-				    (lba + count >= ATA_MAX_28BIT_LBA ||
-				    count > 256)) {
-					if (softc->flags & ADA_FLAG_CAN_DMA) {
-						if (bp->bio_cmd == BIO_READ) {
-							ata_48bit_cmd(ataio, ATA_READ_DMA48,
-							    0, lba, count);
-						} else {
-							ata_48bit_cmd(ataio, ATA_WRITE_DMA48,
-							    0, lba, count);
-						}
-					} else {
-						if (bp->bio_cmd == BIO_READ) {
-							ata_48bit_cmd(ataio, ATA_READ_MUL48,
-							    0, lba, count);
-						} else {
-							ata_48bit_cmd(ataio, ATA_WRITE_MUL48,
-							    0, lba, count);
-						}
+						ata_48bit_cmd(ataio, ATA_WRITE_DMA48,
+						    0, lba, count);
 					}
 				} else {
-					if (count == 256)
-						count = 0;
-					if (softc->flags & ADA_FLAG_CAN_DMA) {
-						if (bp->bio_cmd == BIO_READ) {
-							ata_28bit_cmd(ataio, ATA_READ_DMA,
-							    0, lba, count);
-						} else {
-							ata_28bit_cmd(ataio, ATA_WRITE_DMA,
-							    0, lba, count);
-						}
+					if (bp->bio_cmd == BIO_READ) {
+						ata_48bit_cmd(ataio, ATA_READ_MUL48,
+						    0, lba, count);
 					} else {
-						if (bp->bio_cmd == BIO_READ) {
-							ata_28bit_cmd(ataio, ATA_READ_MUL,
-							    0, lba, count);
-						} else {
-							ata_28bit_cmd(ataio, ATA_WRITE_MUL,
-							    0, lba, count);
-						}
+						ata_48bit_cmd(ataio, ATA_WRITE_MUL48,
+						    0, lba, count);
+					}
+				}
+			} else {
+				if (count == 256)
+					count = 0;
+				if (softc->flags & ADA_FLAG_CAN_DMA) {
+					if (bp->bio_cmd == BIO_READ) {
+						ata_28bit_cmd(ataio, ATA_READ_DMA,
+						    0, lba, count);
+					} else {
+						ata_28bit_cmd(ataio, ATA_WRITE_DMA,
+						    0, lba, count);
+					}
+				} else {
+					if (bp->bio_cmd == BIO_READ) {
+						ata_28bit_cmd(ataio, ATA_READ_MUL,
+						    0, lba, count);
+					} else {
+						ata_28bit_cmd(ataio, ATA_WRITE_MUL,
+						    0, lba, count);
 					}
 				}
 			}
-				break;
-			case BIO_FLUSH:
-				cam_fill_ataio(ataio,
-				    1,
-				    adadone,
-				    CAM_DIR_NONE,
-				    0,
-				    NULL,
-				    0,
-				    ada_default_timeout*1000);
+			break;
+		}
+		case BIO_DELETE:
+		{
+			uint64_t lba = bp->bio_pblkno;
+			uint16_t count = bp->bio_bcount / softc->params.secsize;
 
-				if (softc->flags & ADA_FLAG_CAN_48BIT)
-					ata_48bit_cmd(ataio, ATA_FLUSHCACHE48, 0, 0, 0);
-				else
-					ata_28bit_cmd(ataio, ATA_FLUSHCACHE, 0, 0, 0);
-				break;
-			}
-			start_ccb->ccb_h.ccb_state = ADA_CCB_BUFFER_IO;
-			start_ccb->ccb_h.ccb_bp = bp;
-			softc->outstanding_cmds++;
-			xpt_action(start_ccb);
-			bp = bioq_first(&softc->bio_queue);
+			cam_fill_ataio(ataio,
+			    ada_retry_count,
+			    adadone,
+			    CAM_DIR_NONE,
+			    0,
+			    NULL,
+			    0,
+			    ada_default_timeout*1000);
+
+			if (count >= 256)
+				count = 0;
+			ata_28bit_cmd(ataio, ATA_CFA_ERASE, 0, lba, count);
+			break;
 		}
-		
-		if (bp != NULL) {
-			/* Have more work to do, so ensure we stay scheduled */
-			xpt_schedule(periph, CAM_PRIORITY_NORMAL);
+		case BIO_FLUSH:
+			cam_fill_ataio(ataio,
+			    1,
+			    adadone,
+			    CAM_DIR_NONE,
+			    0,
+			    NULL,
+			    0,
+			    ada_default_timeout*1000);
+
+			if (softc->flags & ADA_FLAG_CAN_48BIT)
+				ata_48bit_cmd(ataio, ATA_FLUSHCACHE48, 0, 0, 0);
+			else
+				ata_28bit_cmd(ataio, ATA_FLUSHCACHE, 0, 0, 0);
+			break;
 		}
+		start_ccb->ccb_h.ccb_state = ADA_CCB_BUFFER_IO;
+out:
+		start_ccb->ccb_h.ccb_bp = bp;
+		softc->outstanding_cmds++;
+		xpt_action(start_ccb);
+
+		/* May have more work to do, so ensure we stay scheduled */
+		adaschedule(periph);
 		break;
 	}
 	}
@@ -877,6 +999,7 @@ adadone(struct cam_periph *periph, union ccb *done_ccb)
 	ataio = &done_ccb->ataio;
 	switch (ataio->ccb_h.ccb_state & ADA_CCB_TYPE_MASK) {
 	case ADA_CCB_BUFFER_IO:
+	case ADA_CCB_TRIM:
 	{
 		struct bio *bp;
 
@@ -903,13 +1026,6 @@ adadone(struct cam_periph *periph, union ccb *done_ccb)
 					    "Invalidating pack\n");
 					softc->flags |= ADA_FLAG_PACK_INVALID;
 				}
-
-				/*
-				 * return all queued I/O with EIO, so that
-				 * the client can retry these I/Os in the
-				 * proper order should it attempt to recover.
-				 */
-				bioq_flush(&softc->bio_queue, NULL, EIO);
 				bp->bio_error = error;
 				bp->bio_resid = bp->bio_bcount;
 				bp->bio_flags |= BIO_ERROR;
@@ -935,8 +1051,27 @@ adadone(struct cam_periph *periph, union ccb *done_ccb)
 		softc->outstanding_cmds--;
 		if (softc->outstanding_cmds == 0)
 			softc->flags |= ADA_FLAG_WENT_IDLE;
+		if ((ataio->ccb_h.ccb_state & ADA_CCB_TYPE_MASK) ==
+		    ADA_CCB_TRIM) {
+			struct trim_request *req =
+			    (struct trim_request *)ataio->data_ptr;
+			int i;
 
-		biodone(bp);
+			for (i = 1; i < softc->trim_max_ranges &&
+			    req->bps[i]; i++) {
+				struct bio *bp1 = req->bps[i];
+				
+				bp1->bio_resid = bp->bio_resid;
+				bp1->bio_error = bp->bio_error;
+				if (bp->bio_flags & BIO_ERROR)
+					bp1->bio_flags |= BIO_ERROR;
+				biodone(bp1);
+			}
+			softc->trim_running = 0;
+			biodone(bp);
+			adaschedule(periph);
+		} else
+			biodone(bp);
 		break;
 	}
 	case ADA_CCB_WAITING:
@@ -1040,6 +1175,9 @@ adashutdown(void * arg, int howto)
 	TAILQ_FOREACH(periph, &adadriver.units, unit_links) {
 		union ccb ccb;
 
+		/* If we paniced with lock held - not recurse here. */
+		if (cam_periph_owned(periph))
+			continue;
 		cam_periph_lock(periph);
 		softc = (struct ada_softc *)periph->softc;
 		/*
diff --git a/sys/cam/ata/ata_pmp.c b/sys/cam/ata/ata_pmp.c
index ea387909b11..8c2e1bff3a2 100644
--- a/sys/cam/ata/ata_pmp.c
+++ b/sys/cam/ata/ata_pmp.c
@@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include 
@@ -63,11 +64,12 @@ __FBSDID("$FreeBSD$");
 typedef enum {
 	PMP_STATE_NORMAL,
 	PMP_STATE_PORTS,
-	PMP_STATE_CONFIG,
+	PMP_STATE_PRECONFIG,
 	PMP_STATE_RESET,
 	PMP_STATE_CONNECT,
 	PMP_STATE_CHECK,
 	PMP_STATE_CLEAR,
+	PMP_STATE_CONFIG,
 	PMP_STATE_SCAN
 } pmp_state;
 
@@ -175,8 +177,8 @@ pmpfreeze(struct cam_periph *periph, int mask)
 		if (xpt_create_path(&dpath, periph,
 		    xpt_path_path_id(periph->path),
 		    i, 0) == CAM_REQ_CMP) {
-printf("PMP freeze: %d\n", i);
 			softc->frozen |= (1 << i);
+			xpt_acquire_device(dpath->device);
 			cam_freeze_devq(dpath);
 			xpt_free_path(dpath);
 		}
@@ -197,9 +199,9 @@ pmprelease(struct cam_periph *periph, int mask)
 		if (xpt_create_path(&dpath, periph,
 		    xpt_path_path_id(periph->path),
 		    i, 0) == CAM_REQ_CMP) {
-printf("PMP release: %d\n", i);
 			softc->frozen &= ~(1 << i);
 			cam_release_devq(dpath, 0, 0, 0, FALSE);
+			xpt_release_device(dpath->device);
 			xpt_free_path(dpath);
 		}
 	}
@@ -227,6 +229,7 @@ pmponinvalidate(struct cam_periph *periph)
 			xpt_free_path(dpath);
 		}
 	}
+	pmprelease(periph, -1);
 	xpt_print(periph->path, "lost device\n");
 }
 
@@ -436,7 +439,7 @@ pmpstart(struct cam_periph *periph, union ccb *start_ccb)
 		      pmp_default_timeout * 1000);
 		ata_pm_read_cmd(ataio, 2, 15);
 		break;
-	case PMP_STATE_CONFIG:
+	case PMP_STATE_PRECONFIG:
 		cam_fill_ataio(ataio,
 		      pmp_retry_count,
 		      pmpdone,
@@ -445,7 +448,7 @@ pmpstart(struct cam_periph *periph, union ccb *start_ccb)
 		      /*data_ptr*/NULL,
 		      /*dxfer_len*/0,
 		      pmp_default_timeout * 1000);
-		ata_pm_write_cmd(ataio, 0x60, 15, 0xf);
+		ata_pm_write_cmd(ataio, 0x60, 15, 0x0);
 		break;
 	case PMP_STATE_RESET:
 		cam_fill_ataio(ataio,
@@ -458,8 +461,6 @@ pmpstart(struct cam_periph *periph, union ccb *start_ccb)
 		      pmp_default_timeout * 1000);
 		ata_pm_write_cmd(ataio, 2, softc->pm_step,
 		    (softc->found & (1 << softc->pm_step)) ? 0 : 1);
-printf("PM RESET %d%s\n", softc->pm_step,
-    (softc->found & (1 << softc->pm_step)) ? " skipping" : "");
 		break;
 	case PMP_STATE_CONNECT:
 		cam_fill_ataio(ataio,
@@ -495,6 +496,17 @@ printf("PM RESET %d%s\n", softc->pm_step,
 		      pmp_default_timeout * 1000);
 		ata_pm_write_cmd(ataio, 1, softc->pm_step, 0xFFFFFFFF);
 		break;
+	case PMP_STATE_CONFIG:
+		cam_fill_ataio(ataio,
+		      pmp_retry_count,
+		      pmpdone,
+		      /*flags*/CAM_DIR_NONE,
+		      0,
+		      /*data_ptr*/NULL,
+		      /*dxfer_len*/0,
+		      pmp_default_timeout * 1000);
+		ata_pm_write_cmd(ataio, 0x60, 15, 0xf);
+		break;
 	default:
 		break;
 	}
@@ -504,6 +516,7 @@ printf("PM RESET %d%s\n", softc->pm_step,
 static void
 pmpdone(struct cam_periph *periph, union ccb *done_ccb)
 {
+	struct ccb_trans_settings cts;
 	struct pmp_softc *softc;
 	struct ccb_ataio *ataio;
 	union ccb *work_ccb;
@@ -554,24 +567,31 @@ pmpdone(struct cam_periph *periph, union ccb *done_ccb)
 		    (done_ccb->ataio.res.lba_mid << 16) +
 		    (done_ccb->ataio.res.lba_low << 8) +
 		    done_ccb->ataio.res.sector_count;
-		/* This PM declares 6 ports, while only 5 of them are real.
+		/* This PMP declares 6 ports, while only 5 of them are real.
 		 * Port 5 is enclosure management bridge port, which has implementation
 		 * problems, causing probe faults. Hide it for now. */
 		if (softc->pm_pid == 0x37261095 && softc->pm_ports == 6)
 			softc->pm_ports = 5;
-		/* This PM declares 7 ports, while only 5 of them are real.
+		/* This PMP declares 7 ports, while only 5 of them are real.
 		 * Port 5 is some fake "Config  Disk" with 640 sectors size,
 		 * port 6 is enclosure management bridge port.
 		 * Both fake ports has implementation problems, causing
 		 * probe faults. Hide them for now. */
 		if (softc->pm_pid == 0x47261095 && softc->pm_ports == 7)
 			softc->pm_ports = 5;
-		printf("PM ports: %d\n", softc->pm_ports);
-		softc->state = PMP_STATE_CONFIG;
+		/* These PMPs declare one more port then actually have,
+		 * for configuration purposes. Hide it for now. */
+		if (softc->pm_pid == 0x57231095 || softc->pm_pid == 0x57331095 ||
+		    softc->pm_pid == 0x57341095 || softc->pm_pid == 0x57441095)
+			softc->pm_ports--;
+		printf("%s%d: %d fan-out ports\n",
+		    periph->periph_name, periph->unit_number,
+		    softc->pm_ports);
+		softc->state = PMP_STATE_PRECONFIG;
 		xpt_release_ccb(done_ccb);
 		xpt_schedule(periph, priority);
 		return;
-	case PMP_STATE_CONFIG:
+	case PMP_STATE_PRECONFIG:
 		softc->pm_step = 0;
 		softc->state = PMP_STATE_RESET;
 		softc->reset |= ~softc->found;
@@ -588,7 +608,6 @@ pmpdone(struct cam_periph *periph, union ccb *done_ccb)
 			    /*reduction*/0,
 			    /*timeout*/5,
 			    /*getcount_only*/0);
-			printf("PM reset done\n");
 			softc->state = PMP_STATE_CONNECT;
 		}
 		xpt_release_ccb(done_ccb);
@@ -605,7 +624,6 @@ pmpdone(struct cam_periph *periph, union ccb *done_ccb)
 			    /*reduction*/0,
 			    /*timeout*/10,
 			    /*getcount_only*/0);
-			printf("PM connect done\n");
 			softc->state = PMP_STATE_CHECK;
 		}
 		xpt_release_ccb(done_ccb);
@@ -617,7 +635,24 @@ pmpdone(struct cam_periph *periph, union ccb *done_ccb)
 		    (done_ccb->ataio.res.lba_low << 8) +
 		    done_ccb->ataio.res.sector_count;
 		if ((res & 0xf0f) == 0x103 && (res & 0x0f0) != 0) {
-			printf("PM status: %d - %08x\n", softc->pm_step, res);
+			if (bootverbose) {
+				printf("%s%d: port %d status: %08x\n",
+				    periph->periph_name, periph->unit_number,
+				    softc->pm_step, res);
+			}
+			/* Report device speed. */
+			if (xpt_create_path(&dpath, periph,
+			    xpt_path_path_id(periph->path),
+			    softc->pm_step, 0) == CAM_REQ_CMP) {
+				bzero(&cts, sizeof(cts));
+				xpt_setup_ccb(&cts.ccb_h, dpath, CAM_PRIORITY_NORMAL);
+				cts.ccb_h.func_code = XPT_SET_TRAN_SETTINGS;
+				cts.type = CTS_TYPE_CURRENT_SETTINGS;
+				cts.xport_specific.sata.revision = (res & 0x0f0) >> 4;
+				cts.xport_specific.sata.valid = CTS_SATA_VALID_REVISION;
+				xpt_action((union ccb *)&cts);
+				xpt_free_path(dpath);
+			}
 			softc->found |= (1 << softc->pm_step);
 			softc->pm_step++;
 		} else {
@@ -630,7 +665,11 @@ pmpdone(struct cam_periph *periph, union ccb *done_ccb)
 				    /*getcount_only*/0);
 				softc->pm_try++;
 			} else {
-				printf("PM status: %d - %08x\n", softc->pm_step, res);
+				if (bootverbose) {
+					printf("%s%d: port %d status: %08x\n",
+					    periph->periph_name, periph->unit_number,
+					    softc->pm_step, res);
+				}
 				softc->found &= ~(1 << softc->pm_step);
 				if (xpt_create_path(&dpath, periph,
 				    done_ccb->ccb_h.path_id,
@@ -658,11 +697,15 @@ pmpdone(struct cam_periph *periph, union ccb *done_ccb)
 		return;
 	case PMP_STATE_CLEAR:
 		softc->pm_step++;
-		if (softc->pm_step < softc->pm_ports) {
-			xpt_release_ccb(done_ccb);
-			xpt_schedule(periph, priority);
-			return;
-		} else if (softc->found) {
+		if (softc->pm_step >= softc->pm_ports) {
+			softc->state = PMP_STATE_CONFIG;
+			softc->pm_step = 0;
+		}
+		xpt_release_ccb(done_ccb);
+		xpt_schedule(periph, priority);
+		return;
+	case PMP_STATE_CONFIG:
+		if (softc->found) {
 			softc->pm_step = 0;
 			softc->state = PMP_STATE_SCAN;
 			work_ccb = xpt_alloc_ccb_nowait();
diff --git a/sys/cam/ata/ata_xpt.c b/sys/cam/ata/ata_xpt.c
index 6485d265921..f3f90af1dbd 100644
--- a/sys/cam/ata/ata_xpt.c
+++ b/sys/cam/ata/ata_xpt.c
@@ -275,7 +275,7 @@ probeschedule(struct cam_periph *periph)
 static void
 probestart(struct cam_periph *periph, union ccb *start_ccb)
 {
-	/* Probe the device that our peripheral driver points to */
+	struct ccb_trans_settings cts;
 	struct ccb_ataio *ataio;
 	struct ccb_scsiio *csio;
 	probe_softc *softc;
@@ -333,6 +333,55 @@ probestart(struct cam_periph *periph, union ccb *start_ccb)
 			ata_28bit_cmd(ataio, ATA_ATAPI_IDENTIFY, 0, 0, 0);
 		break;
 	case PROBE_SETMODE:
+	{
+		int mode, wantmode;
+
+		mode = 0;
+		/* Fetch user modes from SIM. */
+		bzero(&cts, sizeof(cts));
+		xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NORMAL);
+		cts.ccb_h.func_code = XPT_GET_TRAN_SETTINGS;
+		cts.type = CTS_TYPE_USER_SETTINGS;
+		xpt_action((union ccb *)&cts);
+		if (path->device->transport == XPORT_ATA) {
+			if (cts.xport_specific.ata.valid & CTS_ATA_VALID_MODE)
+				mode = cts.xport_specific.ata.mode;
+		} else {
+			if (cts.xport_specific.sata.valid & CTS_SATA_VALID_MODE)
+				mode = cts.xport_specific.sata.mode;
+		}
+negotiate:
+		/* Honor device capabilities. */
+		wantmode = mode = ata_max_mode(ident_buf, mode);
+		/* Report modes to SIM. */
+		bzero(&cts, sizeof(cts));
+		xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NORMAL);
+		cts.ccb_h.func_code = XPT_SET_TRAN_SETTINGS;
+		cts.type = CTS_TYPE_CURRENT_SETTINGS;
+		if (path->device->transport == XPORT_ATA) {
+			cts.xport_specific.ata.mode = mode;
+			cts.xport_specific.ata.valid = CTS_ATA_VALID_MODE;
+		} else {
+			cts.xport_specific.sata.mode = mode;
+			cts.xport_specific.sata.valid = CTS_SATA_VALID_MODE;
+		}
+		xpt_action((union ccb *)&cts);
+		/* Fetch current modes from SIM. */
+		bzero(&cts, sizeof(cts));
+		xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NORMAL);
+		cts.ccb_h.func_code = XPT_GET_TRAN_SETTINGS;
+		cts.type = CTS_TYPE_CURRENT_SETTINGS;
+		xpt_action((union ccb *)&cts);
+		if (path->device->transport == XPORT_ATA) {
+			if (cts.xport_specific.ata.valid & CTS_ATA_VALID_MODE)
+				mode = cts.xport_specific.ata.mode;
+		} else {
+			if (cts.xport_specific.ata.valid & CTS_SATA_VALID_MODE)
+				mode = cts.xport_specific.sata.mode;
+		}
+		/* If SIM disagree - renegotiate. */
+		if (mode != wantmode)
+			goto negotiate;
 		cam_fill_ataio(ataio,
 		      1,
 		      probedone,
@@ -341,16 +390,30 @@ probestart(struct cam_periph *periph, union ccb *start_ccb)
 		      /*data_ptr*/NULL,
 		      /*dxfer_len*/0,
 		      30 * 1000);
-		ata_28bit_cmd(ataio, ATA_SETFEATURES, ATA_SF_SETXFER, 0,
-		    ata_max_mode(ident_buf, ATA_UDMA6, ATA_UDMA6));
+		ata_28bit_cmd(ataio, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
 		break;
+	}
 	case PROBE_SET_MULTI:
 	{
-		struct ccb_trans_settings cts;
-		u_int sectors;
-
-		sectors = max(1, min(ident_buf->sectors_intr & 0xff, 16));
+		u_int sectors, bytecount;
 
+		bytecount = 8192;	/* SATA maximum */
+		/* Fetch user bytecount from SIM. */
+		bzero(&cts, sizeof(cts));
+		xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NORMAL);
+		cts.ccb_h.func_code = XPT_GET_TRAN_SETTINGS;
+		cts.type = CTS_TYPE_USER_SETTINGS;
+		xpt_action((union ccb *)&cts);
+		if (path->device->transport == XPORT_ATA) {
+			if (cts.xport_specific.ata.valid & CTS_ATA_VALID_BYTECOUNT)
+				bytecount = cts.xport_specific.ata.bytecount;
+		} else {
+			if (cts.xport_specific.sata.valid & CTS_SATA_VALID_BYTECOUNT)
+				bytecount = cts.xport_specific.sata.bytecount;
+		}
+		/* Honor device capabilities. */
+		sectors = max(1, min(ident_buf->sectors_intr & 0xff,
+		    bytecount / ata_logical_sector_size(ident_buf)));
 		/* Report bytecount to SIM. */
 		bzero(&cts, sizeof(cts));
 		xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NORMAL);
@@ -366,6 +429,20 @@ probestart(struct cam_periph *periph, union ccb *start_ccb)
 			cts.xport_specific.sata.valid = CTS_SATA_VALID_BYTECOUNT;
 		}
 		xpt_action((union ccb *)&cts);
+		/* Fetch current bytecount from SIM. */
+		bzero(&cts, sizeof(cts));
+		xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NORMAL);
+		cts.ccb_h.func_code = XPT_GET_TRAN_SETTINGS;
+		cts.type = CTS_TYPE_CURRENT_SETTINGS;
+		xpt_action((union ccb *)&cts);
+		if (path->device->transport == XPORT_ATA) {
+			if (cts.xport_specific.ata.valid & CTS_ATA_VALID_BYTECOUNT)
+				bytecount = cts.xport_specific.ata.bytecount;
+		} else {
+			if (cts.xport_specific.sata.valid & CTS_SATA_VALID_BYTECOUNT)
+				bytecount = cts.xport_specific.sata.bytecount;
+		}
+		sectors = bytecount / ata_logical_sector_size(ident_buf);
 
 		cam_fill_ataio(ataio,
 		    1,
@@ -379,6 +456,45 @@ probestart(struct cam_periph *periph, union ccb *start_ccb)
 		break;
 	}
 	case PROBE_INQUIRY:
+	{
+		u_int bytecount;
+
+		bytecount = 8192;	/* SATA maximum */
+		/* Fetch user bytecount from SIM. */
+		bzero(&cts, sizeof(cts));
+		xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NORMAL);
+		cts.ccb_h.func_code = XPT_GET_TRAN_SETTINGS;
+		cts.type = CTS_TYPE_USER_SETTINGS;
+		xpt_action((union ccb *)&cts);
+		if (path->device->transport == XPORT_ATA) {
+			if (cts.xport_specific.ata.valid & CTS_ATA_VALID_BYTECOUNT)
+				bytecount = cts.xport_specific.ata.bytecount;
+		} else {
+			if (cts.xport_specific.sata.valid & CTS_SATA_VALID_BYTECOUNT)
+				bytecount = cts.xport_specific.sata.bytecount;
+		}
+		/* Honor device capabilities. */
+		bytecount &= ~1;
+		bytecount = max(2, min(65534, bytecount));
+		if (ident_buf->satacapabilities != 0x0000 &&
+		    ident_buf->satacapabilities != 0xffff) {
+			bytecount = min(8192, bytecount);
+		}
+		/* Report bytecount to SIM. */
+		bzero(&cts, sizeof(cts));
+		xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NORMAL);
+		cts.ccb_h.func_code = XPT_SET_TRAN_SETTINGS;
+		cts.type = CTS_TYPE_CURRENT_SETTINGS;
+		if (path->device->transport == XPORT_ATA) {
+			cts.xport_specific.ata.bytecount = bytecount;
+			cts.xport_specific.ata.valid = CTS_ATA_VALID_BYTECOUNT;
+		} else {
+			cts.xport_specific.sata.bytecount = bytecount;
+			cts.xport_specific.sata.valid = CTS_SATA_VALID_BYTECOUNT;
+		}
+		xpt_action((union ccb *)&cts);
+		/* FALLTHROUGH */
+	}
 	case PROBE_FULL_INQUIRY:
 	{
 		u_int inquiry_len;
@@ -564,6 +680,7 @@ proberequestbackoff(struct cam_periph *periph, struct cam_ed *device)
 static void
 probedone(struct cam_periph *periph, union ccb *done_ccb)
 {
+	struct ccb_trans_settings cts;
 	struct ata_params *ident_buf;
 	probe_softc *softc;
 	struct cam_path *path;
@@ -612,16 +729,15 @@ noerror:
 	{
 		int sign = (done_ccb->ataio.res.lba_high << 8) +
 		    done_ccb->ataio.res.lba_mid;
-		xpt_print(path, "SIGNATURE: %04x\n", sign);
+		if (bootverbose)
+			xpt_print(path, "SIGNATURE: %04x\n", sign);
 		if (sign == 0x0000 &&
 		    done_ccb->ccb_h.target_id != 15) {
 			path->device->protocol = PROTO_ATA;
 			PROBE_SET_ACTION(softc, PROBE_IDENTIFY);
 		} else if (sign == 0x9669 &&
 		    done_ccb->ccb_h.target_id == 15) {
-			struct ccb_trans_settings cts;
-
-				/* Report SIM that PM is present. */
+			/* Report SIM that PM is present. */
 			bzero(&cts, sizeof(cts));
 			xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NORMAL);
 			cts.ccb_h.func_code = XPT_SET_TRAN_SETTINGS;
@@ -716,10 +832,17 @@ noerror:
 			    ATA_QUEUE_LEN(ident_buf->queue) + 1;
 		}
 		ata_find_quirk(path->device);
-		/* XXX: If not all tags allowed, we must to tell SIM which are. */
-		if (path->device->mintags < path->bus->sim->max_tagged_dev_openings)
-			path->device->mintags = path->device->maxtags = 0;
-		if (path->device->mintags != 0) {
+		if (path->device->mintags != 0 &&
+		    path->bus->sim->max_tagged_dev_openings != 0) {
+			/* Report SIM which tags are allowed. */
+			bzero(&cts, sizeof(cts));
+			xpt_setup_ccb(&cts.ccb_h, path, CAM_PRIORITY_NORMAL);
+			cts.ccb_h.func_code = XPT_SET_TRAN_SETTINGS;
+			cts.type = CTS_TYPE_CURRENT_SETTINGS;
+			cts.xport_specific.sata.tags = path->device->maxtags;
+			cts.xport_specific.sata.valid = CTS_SATA_VALID_TAGS;
+			xpt_action((union ccb *)&cts);
+			/* Reconfigure queues for tagged queueing. */
 			xpt_start_tags(path);
 		}
 		ata_device_transport(path);
@@ -799,7 +922,6 @@ noerror:
 		    (done_ccb->ataio.res.lba_low << 8) +
 		    done_ccb->ataio.res.sector_count;
 		((uint32_t *)ident_buf)[0] = softc->pm_pid;
-		printf("PM Product ID: %08x\n", softc->pm_pid);
 		snprintf(ident_buf->model, sizeof(ident_buf->model),
 		    "Port Multiplier %08x", softc->pm_pid);
 		PROBE_SET_ACTION(softc, PROBE_PM_PRV);
@@ -812,7 +934,6 @@ noerror:
 		    (done_ccb->ataio.res.lba_low << 8) +
 		    done_ccb->ataio.res.sector_count;
 		((uint32_t *)ident_buf)[1] = softc->pm_prv;
-		printf("PM Revision: %08x\n", softc->pm_prv);
 		snprintf(ident_buf->revision, sizeof(ident_buf->revision),
 		    "%04x", softc->pm_prv);
 		path->device->flags |= CAM_DEV_IDENTIFY_DATA_VALID;
diff --git a/sys/cam/cam_ccb.h b/sys/cam/cam_ccb.h
index 815da9d8815..72de5646725 100644
--- a/sys/cam/cam_ccb.h
+++ b/sys/cam/cam_ccb.h
@@ -819,19 +819,23 @@ struct ccb_trans_settings_sas {
 struct ccb_trans_settings_ata {
 	u_int     	valid;		/* Which fields to honor */
 #define	CTS_ATA_VALID_MODE		0x01
-#define	CTS_ATA_VALID_BYTECOUNT		0x04
-	u_int32_t 	mode;
+#define	CTS_ATA_VALID_BYTECOUNT		0x02
+	int		mode;		/* Mode */
 	u_int 		bytecount;	/* Length of PIO transaction */
 };
 
 struct ccb_trans_settings_sata {
 	u_int     	valid;		/* Which fields to honor */
-#define	CTS_SATA_VALID_SPEED		0x01
-#define	CTS_SATA_VALID_PM		0x02
-#define	CTS_SATA_VALID_BYTECOUNT	0x04
-	u_int32_t 	bitrate;	/* Mbps */
-	u_int 		pm_present;	/* PM is present (XPT->SIM) */
+#define	CTS_SATA_VALID_MODE		0x01
+#define	CTS_SATA_VALID_BYTECOUNT	0x02
+#define	CTS_SATA_VALID_REVISION		0x04
+#define	CTS_SATA_VALID_PM		0x08
+#define	CTS_SATA_VALID_TAGS		0x10
+	int		mode;		/* Legacy PATA mode */
 	u_int 		bytecount;	/* Length of PIO transaction */
+	int		revision;	/* SATA revision */
+	u_int 		pm_present;	/* PM is present (XPT->SIM) */
+	u_int 		tags;		/* Number of allowed tags */
 };
 
 /* Get/Set transfer rate/width/disconnection/tag queueing settings */
diff --git a/sys/cam/cam_periph.c b/sys/cam/cam_periph.c
index 70764c65c14..9bac0f5a82e 100644
--- a/sys/cam/cam_periph.c
+++ b/sys/cam/cam_periph.c
@@ -981,16 +981,21 @@ camperiphdone(struct cam_periph *periph, union ccb *done_ccb)
 {
 	union ccb      *saved_ccb;
 	cam_status	status;
-	int		frozen;
+	int		frozen = 0;
 	int		sense;
 	struct scsi_start_stop_unit *scsi_cmd;
 	u_int32_t	relsim_flags, timeout;
-	u_int32_t	qfrozen_cnt;
-	int		xpt_done_ccb;
+	int		xpt_done_ccb = FALSE;
 
-	xpt_done_ccb = FALSE;
 	status = done_ccb->ccb_h.status;
-	frozen = (status & CAM_DEV_QFRZN) != 0;
+	if (status & CAM_DEV_QFRZN) {
+		frozen = 1;
+		/*
+		 * Clear freeze flag now for case of retry,
+		 * freeze will be dropped later.
+		 */
+		done_ccb->ccb_h.status &= ~CAM_DEV_QFRZN;
+	}
 	sense  = (status & CAM_AUTOSNS_VALID) != 0;
 	status &= CAM_STATUS_MASK;
 
@@ -998,17 +1003,6 @@ camperiphdone(struct cam_periph *periph, union ccb *done_ccb)
 	relsim_flags = 0;
 	saved_ccb = (union ccb *)done_ccb->ccb_h.saved_ccb_ptr;
 
-	/* 
-	 * Unfreeze the queue once if it is already frozen..
-	 */
-	if (frozen != 0) {
-		qfrozen_cnt = cam_release_devq(done_ccb->ccb_h.path,
-					      /*relsim_flags*/0,
-					      /*openings*/0,
-					      /*timeout*/0,
-					      /*getcount_only*/0);
-	}
-
 	switch (status) {
 	case CAM_REQ_CMP:
 	{
@@ -1185,14 +1179,33 @@ camperiphdone(struct cam_periph *periph, union ccb *done_ccb)
 	 */
 	if (done_ccb->ccb_h.retry_count > 0)
 		done_ccb->ccb_h.retry_count--;
-
-	qfrozen_cnt = cam_release_devq(done_ccb->ccb_h.path,
-				      /*relsim_flags*/relsim_flags,
-				      /*openings*/0,
-				      /*timeout*/timeout,
-				      /*getcount_only*/0);
-	if (xpt_done_ccb == TRUE)
+	/*
+	 * Drop freeze taken due to CAM_DEV_QFREEZE flag set on recovery
+	 * request.
+	 */
+	cam_release_devq(done_ccb->ccb_h.path,
+			 /*relsim_flags*/relsim_flags,
+			 /*openings*/0,
+			 /*timeout*/timeout,
+			 /*getcount_only*/0);
+	if (xpt_done_ccb == TRUE) {
+		/*
+		 * Copy frozen flag from recovery request if it is set there
+		 * for some reason.
+		 */
+		if (frozen != 0)
+			done_ccb->ccb_h.status |= CAM_DEV_QFRZN;
 		(*done_ccb->ccb_h.cbfcnp)(periph, done_ccb);
+	} else {
+		/* Drop freeze taken, if this recovery request got error. */
+		if (frozen != 0) {
+			cam_release_devq(done_ccb->ccb_h.path,
+				 /*relsim_flags*/0,
+				 /*openings*/0,
+				 /*timeout*/0,
+				 /*getcount_only*/0);
+		}
+	}
 }
 
 /*
@@ -1452,6 +1465,11 @@ camperiphscsisenseerror(union ccb *ccb, cam_flags camflags,
 				action_string = "No recovery CCB supplied";
 				goto sense_error_done;
 			}
+			/*
+			 * Clear freeze flag for original request here, as
+			 * this freeze will be dropped as part of ERESTART.
+			 */
+			ccb->ccb_h.status &= ~CAM_DEV_QFRZN;
 			bcopy(ccb, save_ccb, sizeof(*save_ccb));
 			print_ccb = save_ccb;
 			periph->flags |= CAM_PERIPH_RECOVERY_INPROG;
diff --git a/sys/cam/cam_periph.h b/sys/cam/cam_periph.h
index 07caf52d08a..e207b1925ab 100644
--- a/sys/cam/cam_periph.h
+++ b/sys/cam/cam_periph.h
@@ -190,5 +190,11 @@ cam_periph_unlock(struct cam_periph *periph)
 	mtx_unlock(periph->sim->mtx);
 }
 
+static __inline int
+cam_periph_owned(struct cam_periph *periph)
+{
+	return (mtx_owned(periph->sim->mtx));
+}
+
 #endif /* _KERNEL */
 #endif /* _CAM_CAM_PERIPH_H */
diff --git a/sys/cam/cam_queue.c b/sys/cam/cam_queue.c
index 56586be3cf7..328f0b802a7 100644
--- a/sys/cam/cam_queue.c
+++ b/sys/cam/cam_queue.c
@@ -334,7 +334,6 @@ cam_ccbq_init(struct cam_ccbq *ccbq, int openings)
 	}
 	ccbq->devq_openings = openings;
 	ccbq->dev_openings = openings;	
-	TAILQ_INIT(&ccbq->active_ccbs);
 	return (0);
 }
 
diff --git a/sys/cam/cam_queue.h b/sys/cam/cam_queue.h
index d2990ad26e9..31f9bc238bf 100644
--- a/sys/cam/cam_queue.h
+++ b/sys/cam/cam_queue.h
@@ -60,7 +60,6 @@ struct cam_ccbq {
 	int	dev_openings;	
 	int	dev_active;
 	int	held;
-	struct	ccb_hdr_tailq active_ccbs;
 };
 
 struct cam_ed;
@@ -209,9 +208,6 @@ static __inline void
 cam_ccbq_send_ccb(struct cam_ccbq *ccbq, union ccb *send_ccb)
 {
 
-	TAILQ_INSERT_TAIL(&ccbq->active_ccbs,
-			  &(send_ccb->ccb_h),
-			  xpt_links.tqe);
 	send_ccb->ccb_h.pinfo.index = CAM_ACTIVE_INDEX;
 	ccbq->dev_active++;
 	ccbq->dev_openings--;		
@@ -220,8 +216,7 @@ cam_ccbq_send_ccb(struct cam_ccbq *ccbq, union ccb *send_ccb)
 static __inline void
 cam_ccbq_ccb_done(struct cam_ccbq *ccbq, union ccb *done_ccb)
 {
-	TAILQ_REMOVE(&ccbq->active_ccbs, &done_ccb->ccb_h,
-		     xpt_links.tqe);
+
 	ccbq->dev_active--;
 	ccbq->dev_openings++;	
 	ccbq->held++;
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index e9133f6a5eb..88ee3091675 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -1140,12 +1140,19 @@ xpt_announce_periph(struct cam_periph *periph, char *announce_string)
 		if (sas->valid & CTS_SAS_VALID_SPEED)
 			speed = sas->bitrate;
 	}
+	if (cts.ccb_h.status == CAM_REQ_CMP && cts.transport == XPORT_ATA) {
+		struct	ccb_trans_settings_ata *ata =
+		    &cts.xport_specific.ata;
+
+		if (ata->valid & CTS_ATA_VALID_MODE)
+			speed = ata_mode2speed(ata->mode);
+	}
 	if (cts.ccb_h.status == CAM_REQ_CMP && cts.transport == XPORT_SATA) {
 		struct	ccb_trans_settings_sata *sata =
 		    &cts.xport_specific.sata;
 
-		if (sata->valid & CTS_SATA_VALID_SPEED)
-			speed = sata->bitrate;
+		if (sata->valid & CTS_SATA_VALID_REVISION)
+			speed = ata_revision2speed(sata->revision);
 	}
 
 	mb = speed / 1000;
@@ -1195,15 +1202,25 @@ xpt_announce_periph(struct cam_periph *periph, char *announce_string)
 		struct ccb_trans_settings_ata *ata =
 		    &cts.xport_specific.ata;
 
+		printf(" (");
+		if (ata->valid & CTS_ATA_VALID_MODE)
+			printf("%s, ", ata_mode2string(ata->mode));
 		if (ata->valid & CTS_ATA_VALID_BYTECOUNT)
-			printf(" (PIO size %dbytes)", ata->bytecount);
+			printf("PIO size %dbytes", ata->bytecount);
+		printf(")");
 	}
 	if (cts.ccb_h.status == CAM_REQ_CMP && cts.transport == XPORT_SATA) {
 		struct ccb_trans_settings_sata *sata =
 		    &cts.xport_specific.sata;
 
+		printf(" (");
+		if (sata->valid & CTS_SATA_VALID_REVISION)
+			printf("SATA %d.x, ", sata->revision);
+		if (sata->valid & CTS_SATA_VALID_MODE)
+			printf("%s, ", ata_mode2string(sata->mode));
 		if (sata->valid & CTS_SATA_VALID_BYTECOUNT)
-			printf(" (PIO size %dbytes)", sata->bytecount);
+			printf("PIO size %dbytes", sata->bytecount);
+		printf(")");
 	}
 	if (path->device->inq_flags & SID_CmdQue
 	 || path->device->flags & CAM_DEV_TAG_AFTER_COUNT) {
@@ -3273,16 +3290,13 @@ xpt_run_dev_sendq(struct cam_eb *bus)
 
 	devq->send_queue.qfrozen_cnt++;
 	while ((devq->send_queue.entries > 0)
-	    && (devq->send_openings > 0)) {
+	    && (devq->send_openings > 0)
+	    && (devq->send_queue.qfrozen_cnt <= 1)) {
 		struct	cam_ed_qinfo *qinfo;
 		struct	cam_ed *device;
 		union ccb *work_ccb;
 		struct	cam_sim *sim;
 
-	    	if (devq->send_queue.qfrozen_cnt > 1) {
-			break;
-		}
-
 		qinfo = (struct cam_ed_qinfo *)camq_remove(&devq->send_queue,
 							   CAMQ_HEAD);
 		device = qinfo->device;
@@ -3330,9 +3344,7 @@ xpt_run_dev_sendq(struct cam_eb *bus)
 			}
 			mtx_unlock(&xsoftc.xpt_lock);
 		}
-		devq->active_dev = device;
 		cam_ccbq_remove_ccb(&device->ccbq, work_ccb);
-
 		cam_ccbq_send_ccb(&device->ccbq, work_ccb);
 
 		devq->send_openings--;
@@ -3370,8 +3382,6 @@ xpt_run_dev_sendq(struct cam_eb *bus)
 		 */
 		sim = work_ccb->ccb_h.path->bus->sim;
 		(*(sim->sim_action))(sim, work_ccb);
-
-		devq->active_dev = NULL;
 	}
 	devq->send_queue.qfrozen_cnt--;
 }
@@ -4102,45 +4112,18 @@ xpt_dev_async_default(u_int32_t async_code, struct cam_eb *bus,
 u_int32_t
 xpt_freeze_devq(struct cam_path *path, u_int count)
 {
-	struct ccb_hdr *ccbh;
 
 	mtx_assert(path->bus->sim->mtx, MA_OWNED);
-
 	path->device->ccbq.queue.qfrozen_cnt += count;
-
-	/*
-	 * Mark the last CCB in the queue as needing
-	 * to be requeued if the driver hasn't
-	 * changed it's state yet.  This fixes a race
-	 * where a ccb is just about to be queued to
-	 * a controller driver when it's interrupt routine
-	 * freezes the queue.  To completly close the
-	 * hole, controller drives must check to see
-	 * if a ccb's status is still CAM_REQ_INPROG
-	 * just before they queue
-	 * the CCB.  See ahc_action/ahc_freeze_devq for
-	 * an example.
-	 */
-	ccbh = TAILQ_LAST(&path->device->ccbq.active_ccbs, ccb_hdr_tailq);
-	if (ccbh && ccbh->status == CAM_REQ_INPROG)
-		ccbh->status = CAM_REQUEUE_REQ;
 	return (path->device->ccbq.queue.qfrozen_cnt);
 }
 
 u_int32_t
 xpt_freeze_simq(struct cam_sim *sim, u_int count)
 {
+
 	mtx_assert(sim->mtx, MA_OWNED);
-
 	sim->devq->send_queue.qfrozen_cnt += count;
-	if (sim->devq->active_dev != NULL) {
-		struct ccb_hdr *ccbh;
-
-		ccbh = TAILQ_LAST(&sim->devq->active_dev->ccbq.active_ccbs,
-				  ccb_hdr_tailq);
-		if (ccbh && ccbh->status == CAM_REQ_INPROG)
-			ccbh->status = CAM_REQUEUE_REQ;
-	}
 	return (sim->devq->send_queue.qfrozen_cnt);
 }
 
diff --git a/sys/cam/scsi/scsi_cd.c b/sys/cam/scsi/scsi_cd.c
index f2a612b7734..cf99eea5359 100644
--- a/sys/cam/scsi/scsi_cd.c
+++ b/sys/cam/scsi/scsi_cd.c
@@ -673,6 +673,7 @@ cdregister(struct cam_periph *periph, void *arg)
 		softc->quirks = CD_Q_NONE;
 
 	/* Check if the SIM does not want 6 byte commands */
+	bzero(&cpi, sizeof(cpi));
 	xpt_setup_ccb(&cpi.ccb_h, periph->path, CAM_PRIORITY_NORMAL);
 	cpi.ccb_h.func_code = XPT_PATH_INQ;
 	xpt_action((union ccb *)&cpi);
@@ -726,6 +727,12 @@ cdregister(struct cam_periph *periph, void *arg)
 	softc->disk->d_name = "cd";
 	softc->disk->d_unit = periph->unit_number;
 	softc->disk->d_drv1 = periph;
+	if (cpi.maxio == 0)
+		softc->disk->d_maxsize = DFLTPHYS;	/* traditional default */
+	else if (cpi.maxio > MAXPHYS)
+		softc->disk->d_maxsize = MAXPHYS;	/* for safety */
+	else
+		softc->disk->d_maxsize = cpi.maxio;
 	softc->disk->d_flags = 0;
 	disk_create(softc->disk, DISK_VERSION);
 	cam_periph_lock(periph);
@@ -1457,8 +1464,6 @@ cdstart(struct cam_periph *periph, union ccb *start_ccb)
 		} else {
 			bioq_remove(&softc->bio_queue, bp);
 
-			devstat_start_transaction_bio(softc->disk->d_devstat, bp);
-
 			scsi_read_write(&start_ccb->csio,
 					/*retries*/cd_retry_count,
 					/* cbfcnp */ cddone,
@@ -1570,7 +1575,8 @@ cddone(struct cam_periph *periph, union ccb *done_ccb)
 			bp->bio_resid = bp->bio_bcount;
 			bp->bio_error = error;
 			bp->bio_flags |= BIO_ERROR;
-			cam_release_devq(done_ccb->ccb_h.path,
+			if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0)
+				cam_release_devq(done_ccb->ccb_h.path,
 					 /*relsim_flags*/0,
 					 /*reduction*/0,
 					 /*timeout*/0,
@@ -1658,7 +1664,8 @@ cddone(struct cam_periph *periph, union ccb *done_ccb)
 				struct ccb_getdev cgd;
 
 				/* Don't wedge this device's queue */
-				cam_release_devq(done_ccb->ccb_h.path,
+				if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0)
+					cam_release_devq(done_ccb->ccb_h.path,
 						 /*relsim_flags*/0,
 						 /*reduction*/0,
 						 /*timeout*/0,
@@ -2671,12 +2678,10 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
 
 		authinfo = (struct dvd_authinfo *)addr;
 
-		cam_periph_lock(periph);
 		if (cmd == DVDIOCREPORTKEY)
 			error = cdreportkey(periph, authinfo);
 		else
 			error = cdsendkey(periph, authinfo);
-		cam_periph_unlock(periph);
 		break;
 		}
 	case DVDIOCREADSTRUCTURE: {
@@ -2684,9 +2689,7 @@ cdioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td)
 
 		dvdstruct = (struct dvd_struct *)addr;
 
-		cam_periph_lock(periph);
 		error = cdreaddvdstructure(periph, dvdstruct);
-		cam_periph_unlock(periph);
 
 		break;
 	}
@@ -2766,7 +2769,6 @@ cdcheckmedia(struct cam_periph *periph)
 	softc = (struct cd_softc *)periph->softc;
 
 	cdprevent(periph, PR_PREVENT);
-	softc->disk->d_maxsize = DFLTPHYS;
 	softc->disk->d_sectorsize = 2048;
 	softc->disk->d_mediasize = 0;
 
@@ -2868,7 +2870,6 @@ cdcheckmedia(struct cam_periph *periph)
 	}
 
 	softc->flags |= CD_FLAG_VALID_TOC;
-	softc->disk->d_maxsize = DFLTPHYS;
 	softc->disk->d_sectorsize = softc->params.blksize;
 	softc->disk->d_mediasize =
 	    (off_t)softc->params.blksize * softc->params.disksize;
@@ -3730,8 +3731,6 @@ cdreportkey(struct cam_periph *periph, struct dvd_authinfo *authinfo)
 	databuf = NULL;
 	lba = 0;
 
-	ccb = cdgetccb(periph, CAM_PRIORITY_NORMAL);
-
 	switch (authinfo->format) {
 	case DVD_REPORT_AGID:
 		length = sizeof(struct scsi_report_key_data_agid);
@@ -3757,9 +3756,7 @@ cdreportkey(struct cam_periph *periph, struct dvd_authinfo *authinfo)
 		length = 0;
 		break;
 	default:
-		error = EINVAL;
-		goto bailout;
-		break; /* NOTREACHED */
+		return (EINVAL);
 	}
 
 	if (length != 0) {
@@ -3767,6 +3764,8 @@ cdreportkey(struct cam_periph *periph, struct dvd_authinfo *authinfo)
 	} else
 		databuf = NULL;
 
+	cam_periph_lock(periph);
+	ccb = cdgetccb(periph, CAM_PRIORITY_NORMAL);
 
 	scsi_report_key(&ccb->csio,
 			/* retries */ 1,
@@ -3867,12 +3866,14 @@ cdreportkey(struct cam_periph *periph, struct dvd_authinfo *authinfo)
 		goto bailout;
 		break; /* NOTREACHED */
 	}
+
 bailout:
+	xpt_release_ccb(ccb);
+	cam_periph_unlock(periph);
+
 	if (databuf != NULL)
 		free(databuf, M_DEVBUF);
 
-	xpt_release_ccb(ccb);
-
 	return(error);
 }
 
@@ -3887,8 +3888,6 @@ cdsendkey(struct cam_periph *periph, struct dvd_authinfo *authinfo)
 	error = 0;
 	databuf = NULL;
 
-	ccb = cdgetccb(periph, CAM_PRIORITY_NORMAL);
-
 	switch(authinfo->format) {
 	case DVD_SEND_CHALLENGE: {
 		struct scsi_report_key_data_challenge *challenge_data;
@@ -3940,11 +3939,12 @@ cdsendkey(struct cam_periph *periph, struct dvd_authinfo *authinfo)
 		break;
 	}
 	default:
-		error = EINVAL;
-		goto bailout;
-		break; /* NOTREACHED */
+		return (EINVAL);
 	}
 
+	cam_periph_lock(periph);
+	ccb = cdgetccb(periph, CAM_PRIORITY_NORMAL);
+
 	scsi_send_key(&ccb->csio,
 		      /* retries */ 1,
 		      /* cbfcnp */ cddone,
@@ -3959,13 +3959,12 @@ cdsendkey(struct cam_periph *periph, struct dvd_authinfo *authinfo)
 	error = cdrunccb(ccb, cderror, /*cam_flags*/CAM_RETRY_SELTO,
 			 /*sense_flags*/SF_RETRY_UA);
 
-bailout:
+	xpt_release_ccb(ccb);
+	cam_periph_unlock(periph);
 
 	if (databuf != NULL)
 		free(databuf, M_DEVBUF);
 
-	xpt_release_ccb(ccb);
-
 	return(error);
 }
 
@@ -3983,8 +3982,6 @@ cdreaddvdstructure(struct cam_periph *periph, struct dvd_struct *dvdstruct)
 	/* The address is reserved for many of the formats */
 	address = 0;
 
-	ccb = cdgetccb(periph, CAM_PRIORITY_NORMAL);
-
 	switch(dvdstruct->format) {
 	case DVD_STRUCT_PHYSICAL:
 		length = sizeof(struct scsi_read_dvd_struct_data_physical);
@@ -4002,13 +3999,7 @@ cdreaddvdstructure(struct cam_periph *periph, struct dvd_struct *dvdstruct)
 		length = sizeof(struct scsi_read_dvd_struct_data_manufacturer);
 		break;
 	case DVD_STRUCT_CMI:
-		error = ENODEV;
-		goto bailout;
-#ifdef notyet
-		length = sizeof(struct scsi_read_dvd_struct_data_copy_manage);
-		address = dvdstruct->address;
-#endif
-		break; /* NOTREACHED */
+		return (ENODEV);
 	case DVD_STRUCT_PROTDISCID:
 		length = sizeof(struct scsi_read_dvd_struct_data_prot_discid);
 		break;
@@ -4025,21 +4016,9 @@ cdreaddvdstructure(struct cam_periph *periph, struct dvd_struct *dvdstruct)
 		length = sizeof(struct scsi_read_dvd_struct_data_spare_area);
 		break;
 	case DVD_STRUCT_RMD_LAST:
-		error = ENODEV;
-		goto bailout;
-#ifdef notyet
-		length = sizeof(struct scsi_read_dvd_struct_data_rmd_borderout);
-		address = dvdstruct->address;
-#endif
-		break; /* NOTREACHED */
+		return (ENODEV);
 	case DVD_STRUCT_RMD_RMA:
-		error = ENODEV;
-		goto bailout;
-#ifdef notyet
-		length = sizeof(struct scsi_read_dvd_struct_data_rmd);
-		address = dvdstruct->address;
-#endif
-		break; /* NOTREACHED */
+		return (ENODEV);
 	case DVD_STRUCT_PRERECORDED:
 		length = sizeof(struct scsi_read_dvd_struct_data_leadin);
 		break;
@@ -4047,13 +4026,7 @@ cdreaddvdstructure(struct cam_periph *periph, struct dvd_struct *dvdstruct)
 		length = sizeof(struct scsi_read_dvd_struct_data_disc_id);
 		break;
 	case DVD_STRUCT_DCB:
-		error = ENODEV;
-		goto bailout;
-#ifdef notyet
-		length = sizeof(struct scsi_read_dvd_struct_data_dcb);
-		address = dvdstruct->address;
-#endif
-		break; /* NOTREACHED */
+		return (ENODEV);
 	case DVD_STRUCT_LIST:
 		/*
 		 * This is the maximum allocation length for the READ DVD
@@ -4065,9 +4038,7 @@ cdreaddvdstructure(struct cam_periph *periph, struct dvd_struct *dvdstruct)
 		length = 65535;
 		break;
 	default:
-		error = EINVAL;
-		goto bailout;
-		break; /* NOTREACHED */
+		return (EINVAL);
 	}
 
 	if (length != 0) {
@@ -4075,6 +4046,9 @@ cdreaddvdstructure(struct cam_periph *periph, struct dvd_struct *dvdstruct)
 	} else
 		databuf = NULL;
 
+	cam_periph_lock(periph);
+	ccb = cdgetccb(periph, CAM_PRIORITY_NORMAL);
+
 	scsi_read_dvd_structure(&ccb->csio,
 				/* retries */ 1,
 				/* cbfcnp */ cddone,
@@ -4162,13 +4136,14 @@ cdreaddvdstructure(struct cam_periph *periph, struct dvd_struct *dvdstruct)
 		      min(sizeof(dvdstruct->data), dvdstruct->length));
 		break;
 	}
+
 bailout:
+	xpt_release_ccb(ccb);
+	cam_periph_unlock(periph);
 
 	if (databuf != NULL)
 		free(databuf, M_DEVBUF);
 
-	xpt_release_ccb(ccb);
-
 	return(error);
 }
 
diff --git a/sys/cam/scsi/scsi_ch.c b/sys/cam/scsi/scsi_ch.c
index 781245a8df8..2829a155d9a 100644
--- a/sys/cam/scsi/scsi_ch.c
+++ b/sys/cam/scsi/scsi_ch.c
@@ -606,7 +606,8 @@ chdone(struct cam_periph *periph, union ccb *done_ccb)
 					retry_scheduled = 0;
 
 				/* Don't wedge this device's queue */
-				cam_release_devq(done_ccb->ccb_h.path,
+				if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0)
+					cam_release_devq(done_ccb->ccb_h.path,
 						 /*relsim_flags*/0,
 						 /*reduction*/0,
 						 /*timeout*/0,
diff --git a/sys/cddl/boot/zfs/zfsimpl.h b/sys/cddl/boot/zfs/zfsimpl.h
index 688bb5c6203..1149eac95d0 100644
--- a/sys/cddl/boot/zfs/zfsimpl.h
+++ b/sys/cddl/boot/zfs/zfsimpl.h
@@ -479,13 +479,14 @@ typedef enum {
 #define	SPA_VERSION_11			11ULL
 #define	SPA_VERSION_12			12ULL
 #define	SPA_VERSION_13			13ULL
+#define	SPA_VERSION_14			14ULL
 /*
  * When bumping up SPA_VERSION, make sure GRUB ZFS understand the on-disk
  * format change. Go to usr/src/grub/grub-0.95/stage2/{zfs-include/, fsys_zfs*},
  * and do the appropriate changes.
  */
-#define	SPA_VERSION			SPA_VERSION_13
-#define	SPA_VERSION_STRING		"13"
+#define	SPA_VERSION			SPA_VERSION_14
+#define	SPA_VERSION_STRING		"14"
 
 /*
  * Symbolic names for the changes that caused a SPA_VERSION switch.
@@ -520,6 +521,7 @@ typedef enum {
 #define	SPA_VERSION_DSL_SCRUB		SPA_VERSION_11
 #define	SPA_VERSION_SNAP_PROPS		SPA_VERSION_12
 #define	SPA_VERSION_USED_BREAKDOWN	SPA_VERSION_13
+#define	SPA_VERSION_PASSTHROUGH_X	SPA_VERSION_14
 
 /*
  * The following are configuration names used in the nvlist describing a pool's
diff --git a/sys/cddl/boot/zfs/zfssubr.c b/sys/cddl/boot/zfs/zfssubr.c
index fb4444f242e..4013986c18c 100644
--- a/sys/cddl/boot/zfs/zfssubr.c
+++ b/sys/cddl/boot/zfs/zfssubr.c
@@ -550,7 +550,8 @@ vdev_raidz_read(vdev_t *vdev, const blkptr_t *bp, void *buf,
 	uint64_t s = psize >> unit_shift;
 	uint64_t f = b % dcols;
 	uint64_t o = (b / dcols) << unit_shift;
-	int q, r, c, c1, bc, col, acols, coff, devidx, asize, n;
+	uint64_t q, r, coff;
+	int c, c1, bc, col, acols, devidx, asize, n;
 	static raidz_col_t cols[16];
 	raidz_col_t *rc, *rc1;
 
diff --git a/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c b/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c
index fef05abf3ce..70c08adc78a 100644
--- a/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c
+++ b/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c
@@ -97,6 +97,7 @@ zfs_prop_init(void)
 		{ "restricted",	ZFS_ACL_RESTRICTED },
 		{ "passthrough", ZFS_ACL_PASSTHROUGH },
 		{ "secure",	ZFS_ACL_RESTRICTED }, /* bkwrd compatability */
+		{ "passthrough-x", ZFS_ACL_PASSTHROUGH_X },
 		{ NULL }
 	};
 
@@ -173,7 +174,7 @@ zfs_prop_init(void)
 	    "discard | groupmask | passthrough", "ACLMODE", acl_mode_table);
 	register_index(ZFS_PROP_ACLINHERIT, "aclinherit", ZFS_ACL_RESTRICTED,
 	    PROP_INHERIT, ZFS_TYPE_FILESYSTEM,
-	    "discard | noallow | restricted | passthrough",
+	    "discard | noallow | restricted | passthrough | passthrough-x",
 	    "ACLINHERIT", acl_inherit_table);
 	register_index(ZFS_PROP_COPIES, "copies", 1,
 	    PROP_INHERIT, ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME,
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c
index 1b9247d66e6..25dfafd4f2c 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_object.c
@@ -19,12 +19,10 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #include 
 #include 
 #include 
@@ -108,19 +106,51 @@ dmu_object_claim(objset_t *os, uint64_t object, dmu_object_type_t ot,
 
 int
 dmu_object_reclaim(objset_t *os, uint64_t object, dmu_object_type_t ot,
-    int blocksize, dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx)
+    int blocksize, dmu_object_type_t bonustype, int bonuslen)
 {
 	dnode_t *dn;
+	dmu_tx_t *tx;
+	int nblkptr;
 	int err;
 
-	if (object == DMU_META_DNODE_OBJECT && !dmu_tx_private_ok(tx))
+	if (object == DMU_META_DNODE_OBJECT)
 		return (EBADF);
 
 	err = dnode_hold_impl(os->os, object, DNODE_MUST_BE_ALLOCATED,
 	    FTAG, &dn);
 	if (err)
 		return (err);
+
+	if (dn->dn_type == ot && dn->dn_datablksz == blocksize &&
+	    dn->dn_bonustype == bonustype && dn->dn_bonuslen == bonuslen) {
+		/* nothing is changing, this is a noop */
+		dnode_rele(dn, FTAG);
+		return (0);
+	}
+
+	tx = dmu_tx_create(os);
+	dmu_tx_hold_bonus(tx, object);
+	err = dmu_tx_assign(tx, TXG_WAIT);
+	if (err) {
+		dmu_tx_abort(tx);
+		dnode_rele(dn, FTAG);
+		return (err);
+	}
+
+	nblkptr = 1 + ((DN_MAX_BONUSLEN - bonuslen) >> SPA_BLKPTRSHIFT);
+
+	/*
+	 * If we are losing blkptrs or changing the block size this must
+	 * be a new file instance.   We must clear out the previous file
+	 * contents before we can change this type of metadata in the dnode.
+	 */
+	if (dn->dn_nblkptr > nblkptr || dn->dn_datablksz != blocksize)
+		dmu_free_long_range(os, object, 0, DMU_OBJECT_END);
+
 	dnode_reallocate(dn, ot, blocksize, bonustype, bonuslen, tx);
+
+	dmu_tx_commit(tx);
+
 	dnode_rele(dn, FTAG);
 
 	return (0);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
index 15bb65d6a44..98032653227 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c
@@ -828,11 +828,7 @@ restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro)
 {
 	int err;
 	dmu_tx_t *tx;
-
-	err = dmu_object_info(os, drro->drr_object, NULL);
-
-	if (err != 0 && err != ENOENT)
-		return (EINVAL);
+	void *data = NULL;
 
 	if (drro->drr_type == DMU_OT_NONE ||
 	    drro->drr_type >= DMU_OT_NUMTYPES ||
@@ -846,12 +842,15 @@ restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro)
 		return (EINVAL);
 	}
 
-	tx = dmu_tx_create(os);
+	err = dmu_object_info(os, drro->drr_object, NULL);
+
+	if (err != 0 && err != ENOENT)
+		return (EINVAL);
 
 	if (err == ENOENT) {
 		/* currently free, want to be allocated */
+		tx = dmu_tx_create(os);
 		dmu_tx_hold_bonus(tx, DMU_NEW_OBJECT);
-		dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0, 1);
 		err = dmu_tx_assign(tx, TXG_WAIT);
 		if (err) {
 			dmu_tx_abort(tx);
@@ -860,45 +859,41 @@ restore_object(struct restorearg *ra, objset_t *os, struct drr_object *drro)
 		err = dmu_object_claim(os, drro->drr_object,
 		    drro->drr_type, drro->drr_blksz,
 		    drro->drr_bonustype, drro->drr_bonuslen, tx);
+		dmu_tx_commit(tx);
 	} else {
 		/* currently allocated, want to be allocated */
-		dmu_tx_hold_bonus(tx, drro->drr_object);
-		/*
-		 * We may change blocksize and delete old content,
-		 * so need to hold_write and hold_free.
-		 */
-		dmu_tx_hold_write(tx, drro->drr_object, 0, 1);
-		dmu_tx_hold_free(tx, drro->drr_object, 0, DMU_OBJECT_END);
-		err = dmu_tx_assign(tx, TXG_WAIT);
-		if (err) {
-			dmu_tx_abort(tx);
-			return (err);
-		}
 
 		err = dmu_object_reclaim(os, drro->drr_object,
 		    drro->drr_type, drro->drr_blksz,
-		    drro->drr_bonustype, drro->drr_bonuslen, tx);
+		    drro->drr_bonustype, drro->drr_bonuslen);
 	}
-	if (err) {
-		dmu_tx_commit(tx);
+	if (err)
 		return (EINVAL);
+
+	if (drro->drr_bonuslen) {
+		data = restore_read(ra, P2ROUNDUP(drro->drr_bonuslen, 8));
+		if (ra->err)
+			return (ra->err);
+	}
+
+	tx = dmu_tx_create(os);
+	dmu_tx_hold_bonus(tx, drro->drr_object);
+	err = dmu_tx_assign(tx, TXG_WAIT);
+	if (err) {
+		dmu_tx_abort(tx);
+		return (err);
 	}
 
 	dmu_object_set_checksum(os, drro->drr_object, drro->drr_checksum, tx);
 	dmu_object_set_compress(os, drro->drr_object, drro->drr_compress, tx);
 
-	if (drro->drr_bonuslen) {
+	if (data != NULL) {
 		dmu_buf_t *db;
-		void *data;
+
 		VERIFY(0 == dmu_bonus_hold(os, drro->drr_object, FTAG, &db));
 		dmu_buf_will_dirty(db, tx);
 
 		ASSERT3U(db->db_size, >=, drro->drr_bonuslen);
-		data = restore_read(ra, P2ROUNDUP(drro->drr_bonuslen, 8));
-		if (data == NULL) {
-			dmu_tx_commit(tx);
-			return (ra->err);
-		}
 		bcopy(data, db->db_data, drro->drr_bonuslen);
 		if (ra->byteswap) {
 			dmu_ot[drro->drr_bonustype].ot_byteswap(db->db_data,
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c
index 604d52d8bb5..3fe95b08d28 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c
@@ -415,8 +415,7 @@ void
 dnode_reallocate(dnode_t *dn, dmu_object_type_t ot, int blocksize,
     dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx)
 {
-	int i, nblkptr;
-	dmu_buf_impl_t *db = NULL;
+	int nblkptr;
 
 	ASSERT3U(blocksize, >=, SPA_MINBLOCKSIZE);
 	ASSERT3U(blocksize, <=, SPA_MAXBLOCKSIZE);
@@ -428,42 +427,25 @@ dnode_reallocate(dnode_t *dn, dmu_object_type_t ot, int blocksize,
 	ASSERT3U(bonustype, <, DMU_OT_NUMTYPES);
 	ASSERT3U(bonuslen, <=, DN_MAX_BONUSLEN);
 
-	for (i = 0; i < TXG_SIZE; i++)
-		ASSERT(!list_link_active(&dn->dn_dirty_link[i]));
-
 	/* clean up any unreferenced dbufs */
 	dnode_evict_dbufs(dn);
-	ASSERT3P(list_head(&dn->dn_dbufs), ==, NULL);
 
-	/*
-	 * XXX I should really have a generation number to tell if we
-	 * need to do this...
-	 */
-	if (blocksize != dn->dn_datablksz ||
-	    dn->dn_bonustype != bonustype || dn->dn_bonuslen != bonuslen) {
-		/* free all old data */
-		dnode_free_range(dn, 0, -1ULL, tx);
-	}
-
-	nblkptr = 1 + ((DN_MAX_BONUSLEN - bonuslen) >> SPA_BLKPTRSHIFT);
-
-	/* change blocksize */
 	rw_enter(&dn->dn_struct_rwlock, RW_WRITER);
-	if (blocksize != dn->dn_datablksz &&
-	    (!BP_IS_HOLE(&dn->dn_phys->dn_blkptr[0]) ||
-	    list_head(&dn->dn_dbufs) != NULL)) {
-		db = dbuf_hold(dn, 0, FTAG);
-		dbuf_new_size(db, blocksize, tx);
-	}
-	dnode_setdblksz(dn, blocksize);
 	dnode_setdirty(dn, tx);
-	dn->dn_next_bonuslen[tx->tx_txg&TXG_MASK] = bonuslen;
-	dn->dn_next_blksz[tx->tx_txg&TXG_MASK] = blocksize;
+	if (dn->dn_datablksz != blocksize) {
+		/* change blocksize */
+		ASSERT(dn->dn_maxblkid == 0 &&
+		    (BP_IS_HOLE(&dn->dn_phys->dn_blkptr[0]) ||
+		    dnode_block_freed(dn, 0)));
+		dnode_setdblksz(dn, blocksize);
+		dn->dn_next_blksz[tx->tx_txg&TXG_MASK] = blocksize;
+	}
+	if (dn->dn_bonuslen != bonuslen)
+		dn->dn_next_bonuslen[tx->tx_txg&TXG_MASK] = bonuslen;
+	nblkptr = 1 + ((DN_MAX_BONUSLEN - bonuslen) >> SPA_BLKPTRSHIFT);
 	if (dn->dn_nblkptr != nblkptr)
 		dn->dn_next_nblkptr[tx->tx_txg&TXG_MASK] = nblkptr;
 	rw_exit(&dn->dn_struct_rwlock);
-	if (db)
-		dbuf_rele(db, FTAG);
 
 	/* change type */
 	dn->dn_type = ot;
@@ -1187,11 +1169,6 @@ dnode_block_freed(dnode_t *dn, uint64_t blkid)
 	if (dn->dn_free_txg)
 		return (TRUE);
 
-	/*
-	 * If dn_datablkshift is not set, then there's only a single
-	 * block, in which case there will never be a free range so it
-	 * won't matter.
-	 */
 	range_tofind.fr_blkid = blkid;
 	mutex_enter(&dn->dn_mtx);
 	for (i = 0; i < TXG_SIZE; i++) {
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h
index 4535c686407..7befe96bc32 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu.h
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -237,7 +237,7 @@ uint64_t dmu_object_alloc(objset_t *os, dmu_object_type_t ot,
 int dmu_object_claim(objset_t *os, uint64_t object, dmu_object_type_t ot,
     int blocksize, dmu_object_type_t bonus_type, int bonus_len, dmu_tx_t *tx);
 int dmu_object_reclaim(objset_t *os, uint64_t object, dmu_object_type_t ot,
-    int blocksize, dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx);
+    int blocksize, dmu_object_type_t bonustype, int bonuslen);
 
 /*
  * Free an object from this objset.
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_acl.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_acl.h
index df148c62494..f87823c5d0f 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_acl.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_acl.h
@@ -26,8 +26,6 @@
 #ifndef	_SYS_FS_ZFS_ACL_H
 #define	_SYS_FS_ZFS_ACL_H
 
-#pragma ident	"%Z%%M%	%I%	%E% SMI"
-
 #ifdef _KERNEL
 #include 
 #endif
@@ -180,6 +178,7 @@ typedef struct zfs_acl {
 #define	ZFS_ACL_GROUPMASK	2
 #define	ZFS_ACL_PASSTHROUGH	3
 #define	ZFS_ACL_RESTRICTED	4
+#define	ZFS_ACL_PASSTHROUGH_X	5
 
 struct znode;
 struct zfsvfs;
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
index 4d02d14f707..5212aafceae 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zil.h
@@ -19,7 +19,7 @@
  * CDDL HEADER END
  */
 /*
- * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
+ * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
 
@@ -56,9 +56,15 @@ typedef struct zil_header {
 	uint64_t zh_replay_seq;	/* highest replayed sequence number */
 	blkptr_t zh_log;	/* log chain */
 	uint64_t zh_claim_seq;	/* highest claimed sequence number */
-	uint64_t zh_pad[5];
+	uint64_t zh_flags;	/* header flags */
+	uint64_t zh_pad[4];
 } zil_header_t;
 
+/*
+ * zh_flags bit settings
+ */
+#define	ZIL_REPLAY_NEEDED 0x1	/* replay needed - internal only */
+
 /*
  * Log block trailer - structure at the end of the header and each log block
  *
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
index f0f9c6fa693..4c41f90253e 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c
@@ -293,11 +293,16 @@ vdev_geom_read_guid(struct g_consumer *cp)
 	uint64_t psize;
 	off_t offset, size;
 	uint64_t guid;
-	int error, l, len;
+	int error, l, len, iszvol;
 
 	g_topology_assert_not();
 
 	pp = cp->provider;
+	ZFS_LOG(1, "Reading guid from %s...", pp->name);
+	if (g_getattr("ZFS::iszvol", cp, &iszvol) == 0 && iszvol) {
+		ZFS_LOG(1, "Skipping ZVOL-based provider %s.", pp->name);
+		return (0);
+	}
 
 	psize = pp->mediasize;
 	psize = P2ALIGN(psize, (uint64_t)sizeof(vdev_label_t));
@@ -316,8 +321,7 @@ vdev_geom_read_guid(struct g_consumer *cp)
 		if ((offset % pp->sectorsize) != 0)
 			continue;
 
-		error = vdev_geom_io(cp, BIO_READ, label, offset, size);
-		if (error != 0)
+		if (vdev_geom_io(cp, BIO_READ, label, offset, size) != 0)
 			continue;
 		buf = label->vl_vdev_phys.vp_nvlist;
 
@@ -502,7 +506,7 @@ vdev_geom_open(vdev_t *vd, uint64_t *psize, uint64_t *ashift)
 
 	if ((owned = mtx_owned(&Giant)))
 		mtx_unlock(&Giant);
-	cp = vdev_geom_open_by_path(vd, 0);
+	cp = vdev_geom_open_by_path(vd, 1);
 	if (cp == NULL) {
 		/*
 		 * The device at vd->vdev_path doesn't have the expected guid.
@@ -512,7 +516,7 @@ vdev_geom_open(vdev_t *vd, uint64_t *psize, uint64_t *ashift)
 		cp = vdev_geom_open_by_guid(vd);
 	}
 	if (cp == NULL)
-		cp = vdev_geom_open_by_path(vd, 1);
+		cp = vdev_geom_open_by_path(vd, 0);
 	if (cp == NULL) {
 		ZFS_LOG(1, "Provider %s not found.", vd->vdev_path);
 		vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED;
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c
index a43d85c709e..eb93721e167 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c
@@ -1663,7 +1663,8 @@ zfs_ace_can_use(znode_t *zp, uint16_t acep_flags)
  * inherit inheritable ACEs from parent
  */
 static zfs_acl_t *
-zfs_acl_inherit(znode_t *zp, zfs_acl_t *paclp, boolean_t *need_chmod)
+zfs_acl_inherit(znode_t *zp, zfs_acl_t *paclp, uint64_t mode,
+    boolean_t *need_chmod)
 {
 	zfsvfs_t	*zfsvfs = zp->z_zfsvfs;
 	void		*pacep;
@@ -1676,112 +1677,123 @@ zfs_acl_inherit(znode_t *zp, zfs_acl_t *paclp, boolean_t *need_chmod)
 	size_t		ace_size;
 	void		*data1, *data2;
 	size_t		data1sz, data2sz;
-	enum vtype	vntype = ZTOV(zp)->v_type;
+	boolean_t	vdir = ZTOV(zp)->v_type == VDIR;
+	boolean_t	vreg = ZTOV(zp)->v_type == VREG;
+	boolean_t	passthrough, passthrough_x, noallow;
+
+	passthrough_x =
+	    zfsvfs->z_acl_inherit == ZFS_ACL_PASSTHROUGH_X;
+	passthrough = passthrough_x ||
+	    zfsvfs->z_acl_inherit == ZFS_ACL_PASSTHROUGH;
+	noallow =
+	    zfsvfs->z_acl_inherit == ZFS_ACL_NOALLOW;
 
 	*need_chmod = B_TRUE;
 	pacep = NULL;
 	aclp = zfs_acl_alloc(paclp->z_version);
-	if (zfsvfs->z_acl_inherit != ZFS_ACL_DISCARD) {
-		while (pacep = zfs_acl_next_ace(paclp, pacep, &who,
-		    &access_mask, &iflags, &type)) {
+	if (zfsvfs->z_acl_inherit == ZFS_ACL_DISCARD)
+		return (aclp);
+	while (pacep = zfs_acl_next_ace(paclp, pacep, &who,
+	    &access_mask, &iflags, &type)) {
 
-			/*
-			 * don't inherit bogus ACEs
-			 */
-			if (!zfs_acl_valid_ace_type(type, iflags))
-				continue;
+		/*
+		 * don't inherit bogus ACEs
+		 */
+		if (!zfs_acl_valid_ace_type(type, iflags))
+			continue;
 
-			if (zfsvfs->z_acl_inherit == ZFS_ACL_NOALLOW &&
-			    type == ALLOW)
-				continue;
+		if (noallow && type == ALLOW)
+			continue;
 
-			ace_size = aclp->z_ops.ace_size(pacep);
+		ace_size = aclp->z_ops.ace_size(pacep);
 
-			if (!zfs_ace_can_use(zp, iflags))
-				continue;
+		if (!zfs_ace_can_use(zp, iflags))
+			continue;
 
-			/*
-			 * If owner@, group@, or everyone@ inheritable
-			 * then zfs_acl_chmod() isn't needed.
-			 */
-			if (zfsvfs->z_acl_inherit ==
-			    ZFS_ACL_PASSTHROUGH &&
-			    ((iflags & (ACE_OWNER|ACE_EVERYONE)) ||
-			    ((iflags & OWNING_GROUP) ==
-			    OWNING_GROUP)) && (vntype == VREG ||
-			    (vntype == VDIR &&
-			    (iflags & ACE_DIRECTORY_INHERIT_ACE))))
-				*need_chmod = B_FALSE;
+		/*
+		 * If owner@, group@, or everyone@ inheritable
+		 * then zfs_acl_chmod() isn't needed.
+		 */
+		if (passthrough &&
+		    ((iflags & (ACE_OWNER|ACE_EVERYONE)) ||
+		    ((iflags & OWNING_GROUP) ==
+		    OWNING_GROUP)) && (vreg || (vdir && (iflags &
+		    ACE_DIRECTORY_INHERIT_ACE)))) {
+			*need_chmod = B_FALSE;
 
-			aclnode = zfs_acl_node_alloc(ace_size);
-			list_insert_tail(&aclp->z_acl, aclnode);
-			acep = aclnode->z_acldata;
-			zfs_set_ace(aclp, acep, access_mask, type,
-			    who, iflags|ACE_INHERITED_ACE);
+			if (!vdir && passthrough_x &&
+			    ((mode & (S_IXUSR | S_IXGRP | S_IXOTH)) == 0)) {
+				access_mask &= ~ACE_EXECUTE;
+			}
+		}
+
+		aclnode = zfs_acl_node_alloc(ace_size);
+		list_insert_tail(&aclp->z_acl, aclnode);
+		acep = aclnode->z_acldata;
+
+		zfs_set_ace(aclp, acep, access_mask, type,
+		    who, iflags|ACE_INHERITED_ACE);
+
+		/*
+		 * Copy special opaque data if any
+		 */
+		if ((data1sz = paclp->z_ops.ace_data(pacep, &data1)) != 0) {
+			VERIFY((data2sz = aclp->z_ops.ace_data(acep,
+			    &data2)) == data1sz);
+			bcopy(data1, data2, data2sz);
+		}
+		aclp->z_acl_count++;
+		aclnode->z_ace_count++;
+		aclp->z_acl_bytes += aclnode->z_size;
+		newflags = aclp->z_ops.ace_flags_get(acep);
+
+		if (vdir)
+			aclp->z_hints |= ZFS_INHERIT_ACE;
+
+		if ((iflags & ACE_NO_PROPAGATE_INHERIT_ACE) || !vdir) {
+			newflags &= ~ALL_INHERIT;
+			aclp->z_ops.ace_flags_set(acep,
+			    newflags|ACE_INHERITED_ACE);
+			zfs_restricted_update(zfsvfs, aclp, acep);
+			continue;
+		}
+
+		ASSERT(vdir);
+
+		newflags = aclp->z_ops.ace_flags_get(acep);
+		if ((iflags & (ACE_FILE_INHERIT_ACE |
+		    ACE_DIRECTORY_INHERIT_ACE)) !=
+		    ACE_FILE_INHERIT_ACE) {
+			aclnode2 = zfs_acl_node_alloc(ace_size);
+			list_insert_tail(&aclp->z_acl, aclnode2);
+			acep2 = aclnode2->z_acldata;
+			zfs_set_ace(aclp, acep2,
+			    access_mask, type, who,
+			    iflags|ACE_INHERITED_ACE);
+			newflags |= ACE_INHERIT_ONLY_ACE;
+			aclp->z_ops.ace_flags_set(acep, newflags);
+			newflags &= ~ALL_INHERIT;
+			aclp->z_ops.ace_flags_set(acep2,
+			    newflags|ACE_INHERITED_ACE);
 
 			/*
 			 * Copy special opaque data if any
 			 */
-			if ((data1sz = paclp->z_ops.ace_data(pacep,
+			if ((data1sz = aclp->z_ops.ace_data(acep,
 			    &data1)) != 0) {
-				VERIFY((data2sz = aclp->z_ops.ace_data(acep,
+				VERIFY((data2sz =
+				    aclp->z_ops.ace_data(acep2,
 				    &data2)) == data1sz);
-				bcopy(data1, data2, data2sz);
+				bcopy(data1, data2, data1sz);
 			}
 			aclp->z_acl_count++;
-			aclnode->z_ace_count++;
+			aclnode2->z_ace_count++;
 			aclp->z_acl_bytes += aclnode->z_size;
-			newflags = aclp->z_ops.ace_flags_get(acep);
-
-			if (vntype == VDIR)
-				aclp->z_hints |= ZFS_INHERIT_ACE;
-
-			if ((iflags & ACE_NO_PROPAGATE_INHERIT_ACE) ||
-			    (vntype != VDIR)) {
-				newflags &= ~ALL_INHERIT;
-				aclp->z_ops.ace_flags_set(acep,
-				    newflags|ACE_INHERITED_ACE);
-				zfs_restricted_update(zfsvfs, aclp, acep);
-				continue;
-			}
-
-			ASSERT(vntype == VDIR);
-
-			newflags = aclp->z_ops.ace_flags_get(acep);
-			if ((iflags & (ACE_FILE_INHERIT_ACE |
-			    ACE_DIRECTORY_INHERIT_ACE)) !=
-			    ACE_FILE_INHERIT_ACE) {
-				aclnode2 = zfs_acl_node_alloc(ace_size);
-				list_insert_tail(&aclp->z_acl, aclnode2);
-				acep2 = aclnode2->z_acldata;
-				zfs_set_ace(aclp, acep2,
-				    access_mask, type, who,
-				    iflags|ACE_INHERITED_ACE);
-				newflags |= ACE_INHERIT_ONLY_ACE;
-				aclp->z_ops.ace_flags_set(acep, newflags);
-				newflags &= ~ALL_INHERIT;
-				aclp->z_ops.ace_flags_set(acep2,
-				    newflags|ACE_INHERITED_ACE);
-
-				/*
-				 * Copy special opaque data if any
-				 */
-				if ((data1sz = aclp->z_ops.ace_data(acep,
-				    &data1)) != 0) {
-					VERIFY((data2sz =
-					    aclp->z_ops.ace_data(acep2,
-					    &data2)) == data1sz);
-					bcopy(data1, data2, data1sz);
-				}
-				aclp->z_acl_count++;
-				aclnode2->z_ace_count++;
-				aclp->z_acl_bytes += aclnode->z_size;
-				zfs_restricted_update(zfsvfs, aclp, acep2);
-			} else {
-				newflags |= ACE_INHERIT_ONLY_ACE;
-				aclp->z_ops.ace_flags_set(acep,
-				    newflags|ACE_INHERITED_ACE);
-			}
+			zfs_restricted_update(zfsvfs, aclp, acep2);
+		} else {
+			newflags |= ACE_INHERIT_ONLY_ACE;
+			aclp->z_ops.ace_flags_set(acep,
+			    newflags|ACE_INHERITED_ACE);
 		}
 	}
 	return (aclp);
@@ -1876,7 +1888,7 @@ zfs_perm_init(znode_t *zp, znode_t *parent, int flag,
 			mutex_enter(&parent->z_acl_lock);
 			VERIFY(0 == zfs_acl_node_read(parent, &paclp, B_FALSE));
 			mutex_exit(&parent->z_acl_lock);
-			aclp = zfs_acl_inherit(zp, paclp, &need_chmod);
+			aclp = zfs_acl_inherit(zp, paclp, mode, &need_chmod);
 			zfs_acl_free(paclp);
 		} else {
 			aclp = zfs_acl_alloc(zfs_acl_version_zp(zp));
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c
index 10d3b867108..77511bd9f67 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c
@@ -557,9 +557,6 @@ zfs_rmnode(znode_t *zp)
 	dmu_tx_t	*tx;
 	uint64_t	acl_obj;
 	int		error;
-	int		vfslocked;
-
-	vfslocked = VFS_LOCK_GIANT(zfsvfs->z_vfs);
 
 	ASSERT(zp->z_phys->zp_links == 0);
 
@@ -593,7 +590,6 @@ zfs_rmnode(znode_t *zp)
 			 */
 			zfs_znode_dmu_fini(zp);
 			zfs_znode_free(zp);
-			VFS_UNLOCK_GIANT(vfslocked);
 			return;
 		}
 	}
@@ -666,7 +662,6 @@ zfs_rmnode(znode_t *zp)
 out:
 	if (xzp)
 		VN_RELE(ZTOV(xzp));
-	VFS_UNLOCK_GIANT(vfslocked);
 }
 
 static uint64_t
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
index 080643a94c1..00e446b82e9 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
@@ -1491,6 +1491,14 @@ zfs_set_prop_nvlist(const char *name, nvlist_t *nvl)
 			if (zpl_earlier_version(name, ZPL_VERSION_FUID))
 				return (ENOTSUP);
 			break;
+
+		case ZFS_PROP_ACLINHERIT:
+			if (nvpair_type(elem) == DATA_TYPE_UINT64 &&
+			    nvpair_value_uint64(elem, &intval) == 0)
+				if (intval == ZFS_ACL_PASSTHROUGH_X &&
+				    zfs_earlier_version(name,
+				    SPA_VERSION_PASSTHROUGH_X))
+					return (ENOTSUP);
 		}
 	}
 
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
index 7608d76308c..4f61f5f3f5e 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
@@ -5009,7 +5009,7 @@ struct vop_vector zfs_vnodeops = {
 
 struct vop_vector zfs_fifoops = {
 	.vop_default =		&fifo_specops,
-	.vop_fsync =		VOP_PANIC,
+	.vop_fsync =		zfs_freebsd_fsync,
 	.vop_access =		zfs_freebsd_access,
 	.vop_getattr =		zfs_freebsd_getattr,
 	.vop_inactive =		zfs_freebsd_inactive,
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
index 7157930f729..900087b8b32 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
@@ -1017,6 +1017,7 @@ zfs_zinactive(znode_t *zp)
 	vnode_t	*vp = ZTOV(zp);
 	zfsvfs_t *zfsvfs = zp->z_zfsvfs;
 	uint64_t z_id = zp->z_id;
+	int vfslocked;
 
 	ASSERT(zp->z_dbuf && zp->z_phys);
 
@@ -1049,7 +1050,9 @@ zfs_zinactive(znode_t *zp)
 		ZFS_OBJ_HOLD_EXIT(zfsvfs, z_id);
 		ASSERT(vp->v_count == 0);
 		vrecycle(vp, curthread);
+		vfslocked = VFS_LOCK_GIANT(zfsvfs->z_vfs);
 		zfs_rmnode(zp);
+		VFS_UNLOCK_GIANT(vfslocked);
 		return;
 	}
 	mutex_exit(&zp->z_lock);
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
index a7c2b377ebc..4455fb86bd1 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
@@ -502,6 +502,25 @@ zil_rollback_destroy(zilog_t *zilog, dmu_tx_t *tx)
 	    tx, zh->zh_claim_txg);
 }
 
+/*
+ * return true if the initial log block is not valid
+ */
+static boolean_t
+zil_empty(zilog_t *zilog)
+{
+	const zil_header_t *zh = zilog->zl_header;
+	arc_buf_t *abuf = NULL;
+
+	if (BP_IS_HOLE(&zh->zh_log))
+		return (B_TRUE);
+
+	if (zil_read_log_block(zilog, &zh->zh_log, &abuf) != 0)
+		return (B_TRUE);
+
+	VERIFY(arc_buf_remove_ref(abuf, &abuf) == 1);
+	return (B_FALSE);
+}
+
 int
 zil_claim(char *osname, void *txarg)
 {
@@ -521,6 +540,21 @@ zil_claim(char *osname, void *txarg)
 	zilog = dmu_objset_zil(os);
 	zh = zil_header_in_syncing_context(zilog);
 
+	/*
+	 * Record here whether the zil has any records to replay.
+	 * If the header block pointer is null or the block points
+	 * to the stubby then we know there are no valid log records.
+	 * We use the header to store this state as the the zilog gets
+	 * freed later in dmu_objset_close().
+	 * The flags (and the rest of the header fields) are cleared in
+	 * zil_sync() as a result of a zil_destroy(), after replaying the log.
+	 *
+	 * Note, the intent log can be empty but still need the
+	 * stubby to be claimed.
+	 */
+	if (!zil_empty(zilog))
+		zh->zh_flags |= ZIL_REPLAY_NEEDED;
+
 	/*
 	 * Claim all log blocks if we haven't already done so, and remember
 	 * the highest claimed sequence number.  This ensures that if we can
@@ -1344,25 +1378,6 @@ zil_free(zilog_t *zilog)
 	kmem_free(zilog, sizeof (zilog_t));
 }
 
-/*
- * return true if the initial log block is not valid
- */
-static boolean_t
-zil_empty(zilog_t *zilog)
-{
-	const zil_header_t *zh = zilog->zl_header;
-	arc_buf_t *abuf = NULL;
-
-	if (BP_IS_HOLE(&zh->zh_log))
-		return (B_TRUE);
-
-	if (zil_read_log_block(zilog, &zh->zh_log, &abuf) != 0)
-		return (B_TRUE);
-
-	VERIFY(arc_buf_remove_ref(abuf, &abuf) == 1);
-	return (B_FALSE);
-}
-
 /*
  * Open an intent log.
  */
@@ -1418,7 +1433,7 @@ zil_suspend(zilog_t *zilog)
 	const zil_header_t *zh = zilog->zl_header;
 
 	mutex_enter(&zilog->zl_lock);
-	if (zh->zh_claim_txg != 0) {		/* unplayed log */
+	if (zh->zh_flags & ZIL_REPLAY_NEEDED) {		/* unplayed log */
 		mutex_exit(&zilog->zl_lock);
 		return (EBUSY);
 	}
@@ -1645,7 +1660,7 @@ zil_replay(objset_t *os, void *arg, uint64_t *txgp,
 	const zil_header_t *zh = zilog->zl_header;
 	zil_replay_arg_t zr;
 
-	if (zil_empty(zilog)) {
+	if ((zh->zh_flags & ZIL_REPLAY_NEEDED) == 0) {
 		zil_destroy(zilog, B_TRUE);
 		return;
 	}
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
index e9b00cbbb68..b07a8c11da4 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
@@ -335,8 +335,11 @@ zvol_start(struct bio *bp)
 		wakeup_one(&zv->zv_queue);
 		mtx_unlock(&zv->zv_queue_mtx);
 		break;
-	case BIO_DELETE:
 	case BIO_GETATTR:
+		if (g_handleattr_int(bp, "ZFS::iszvol", 1))
+			break;
+		/* FALLTHROUGH */
+	case BIO_DELETE:
 	default:
 		g_io_deliver(bp, EOPNOTSUPP);
 		break;
diff --git a/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h b/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
index 70da8aec978..2f7e7474c3f 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
+++ b/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h
@@ -253,13 +253,14 @@ typedef enum zfs_cache_type {
 #define	SPA_VERSION_11			11ULL
 #define	SPA_VERSION_12			12ULL
 #define	SPA_VERSION_13			13ULL
+#define	SPA_VERSION_14			14ULL
 /*
  * When bumping up SPA_VERSION, make sure GRUB ZFS understands the on-disk
  * format change. Go to usr/src/grub/grub-0.95/stage2/{zfs-include/, fsys_zfs*},
  * and do the appropriate changes.
  */
-#define	SPA_VERSION			SPA_VERSION_13
-#define	SPA_VERSION_STRING		"13"
+#define	SPA_VERSION			SPA_VERSION_14
+#define	SPA_VERSION_STRING		"14"
 
 /*
  * Symbolic names for the changes that caused a SPA_VERSION switch.
@@ -294,6 +295,7 @@ typedef enum zfs_cache_type {
 #define	SPA_VERSION_DSL_SCRUB		SPA_VERSION_11
 #define	SPA_VERSION_SNAP_PROPS		SPA_VERSION_12
 #define	SPA_VERSION_USED_BREAKDOWN	SPA_VERSION_13
+#define	SPA_VERSION_PASSTHROUGH_X	SPA_VERSION_14
 
 /*
  * ZPL version - rev'd whenever an incompatible on-disk format change
diff --git a/sys/compat/freebsd32/freebsd32_proto.h b/sys/compat/freebsd32/freebsd32_proto.h
index 6960d6709d6..7418dbdc251 100644
--- a/sys/compat/freebsd32/freebsd32_proto.h
+++ b/sys/compat/freebsd32/freebsd32_proto.h
@@ -3,7 +3,7 @@
  *
  * DO NOT EDIT-- this file is automatically generated.
  * $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 198508 2009-10-27 10:55:34Z kib 
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 200111 2009-12-04 21:52:31Z kib 
  */
 
 #ifndef _FREEBSD32_SYSPROTO_H_
diff --git a/sys/compat/freebsd32/freebsd32_syscall.h b/sys/compat/freebsd32/freebsd32_syscall.h
index 49006ef78e6..abd87eb8830 100644
--- a/sys/compat/freebsd32/freebsd32_syscall.h
+++ b/sys/compat/freebsd32/freebsd32_syscall.h
@@ -3,7 +3,7 @@
  *
  * DO NOT EDIT-- this file is automatically generated.
  * $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 198508 2009-10-27 10:55:34Z kib 
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 200111 2009-12-04 21:52:31Z kib 
  */
 
 #define	FREEBSD32_SYS_syscall	0
@@ -311,6 +311,10 @@
 #define	FREEBSD32_SYS_freebsd32_getcontext	421
 #define	FREEBSD32_SYS_freebsd32_setcontext	422
 #define	FREEBSD32_SYS_freebsd32_swapcontext	423
+#define	FREEBSD32_SYS___acl_get_link	425
+#define	FREEBSD32_SYS___acl_set_link	426
+#define	FREEBSD32_SYS___acl_delete_link	427
+#define	FREEBSD32_SYS___acl_aclcheck_link	428
 #define	FREEBSD32_SYS_sigwait	429
 #define	FREEBSD32_SYS_thr_exit	431
 #define	FREEBSD32_SYS_thr_self	432
diff --git a/sys/compat/freebsd32/freebsd32_syscalls.c b/sys/compat/freebsd32/freebsd32_syscalls.c
index 76196eb340c..2949d1bbf3d 100644
--- a/sys/compat/freebsd32/freebsd32_syscalls.c
+++ b/sys/compat/freebsd32/freebsd32_syscalls.c
@@ -3,7 +3,7 @@
  *
  * DO NOT EDIT-- this file is automatically generated.
  * $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 198508 2009-10-27 10:55:34Z kib 
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 200111 2009-12-04 21:52:31Z kib 
  */
 
 const char *freebsd32_syscallnames[] = {
@@ -432,10 +432,10 @@ const char *freebsd32_syscallnames[] = {
 	"freebsd32_setcontext",			/* 422 = freebsd32_setcontext */
 	"freebsd32_swapcontext",			/* 423 = freebsd32_swapcontext */
 	"#424",			/* 424 = swapoff */
-	"#425",			/* 425 = __acl_get_link */
-	"#426",			/* 426 = __acl_set_link */
-	"#427",			/* 427 = __acl_delete_link */
-	"#428",			/* 428 = __acl_aclcheck_link */
+	"__acl_get_link",			/* 425 = __acl_get_link */
+	"__acl_set_link",			/* 426 = __acl_set_link */
+	"__acl_delete_link",			/* 427 = __acl_delete_link */
+	"__acl_aclcheck_link",			/* 428 = __acl_aclcheck_link */
 	"sigwait",			/* 429 = sigwait */
 	"#430",			/* 430 = thr_create; */
 	"thr_exit",			/* 431 = thr_exit */
diff --git a/sys/compat/freebsd32/freebsd32_sysent.c b/sys/compat/freebsd32/freebsd32_sysent.c
index bd99e91dd39..479c9211309 100644
--- a/sys/compat/freebsd32/freebsd32_sysent.c
+++ b/sys/compat/freebsd32/freebsd32_sysent.c
@@ -3,7 +3,7 @@
  *
  * DO NOT EDIT-- this file is automatically generated.
  * $FreeBSD$
- * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 198508 2009-10-27 10:55:34Z kib 
+ * created from FreeBSD: head/sys/compat/freebsd32/syscalls.master 200111 2009-12-04 21:52:31Z kib 
  */
 
 #include "opt_compat.h"
@@ -469,10 +469,10 @@ struct sysent freebsd32_sysent[] = {
 	{ AS(freebsd32_setcontext_args), (sy_call_t *)freebsd32_setcontext, AUE_NULL, NULL, 0, 0, 0 },	/* 422 = freebsd32_setcontext */
 	{ AS(freebsd32_swapcontext_args), (sy_call_t *)freebsd32_swapcontext, AUE_NULL, NULL, 0, 0, 0 },	/* 423 = freebsd32_swapcontext */
 	{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0 },			/* 424 = swapoff */
-	{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0 },			/* 425 = __acl_get_link */
-	{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0 },			/* 426 = __acl_set_link */
-	{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0 },			/* 427 = __acl_delete_link */
-	{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0 },			/* 428 = __acl_aclcheck_link */
+	{ AS(__acl_get_link_args), (sy_call_t *)__acl_get_link, AUE_NULL, NULL, 0, 0, 0 },	/* 425 = __acl_get_link */
+	{ AS(__acl_set_link_args), (sy_call_t *)__acl_set_link, AUE_NULL, NULL, 0, 0, 0 },	/* 426 = __acl_set_link */
+	{ AS(__acl_delete_link_args), (sy_call_t *)__acl_delete_link, AUE_NULL, NULL, 0, 0, 0 },	/* 427 = __acl_delete_link */
+	{ AS(__acl_aclcheck_link_args), (sy_call_t *)__acl_aclcheck_link, AUE_NULL, NULL, 0, 0, 0 },	/* 428 = __acl_aclcheck_link */
 	{ AS(sigwait_args), (sy_call_t *)sigwait, AUE_SIGWAIT, NULL, 0, 0, 0 },	/* 429 = sigwait */
 	{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0 },			/* 430 = thr_create; */
 	{ AS(thr_exit_args), (sy_call_t *)thr_exit, AUE_NULL, NULL, 0, 0, 0 },	/* 431 = thr_exit */
diff --git a/sys/compat/freebsd32/syscalls.master b/sys/compat/freebsd32/syscalls.master
index 865f0c1ea1c..485f7a6d816 100644
--- a/sys/compat/freebsd32/syscalls.master
+++ b/sys/compat/freebsd32/syscalls.master
@@ -740,10 +740,14 @@
 				    struct freebsd32_ucontext *oucp, \
 				    const struct freebsd32_ucontext *ucp); }
 424	AUE_SWAPOFF	UNIMPL	swapoff
-425	AUE_NULL	UNIMPL	__acl_get_link
-426	AUE_NULL	UNIMPL	__acl_set_link
-427	AUE_NULL	UNIMPL	__acl_delete_link
-428	AUE_NULL	UNIMPL	__acl_aclcheck_link
+425	AUE_NULL	NOPROTO	{ int __acl_get_link(const char *path, \
+				    acl_type_t type, struct acl *aclp); }
+426	AUE_NULL	NOPROTO	{ int __acl_set_link(const char *path, \
+				    acl_type_t type, struct acl *aclp); }
+427	AUE_NULL	NOPROTO	{ int __acl_delete_link(const char *path, \
+				    acl_type_t type); }
+428	AUE_NULL	NOPROTO	{ int __acl_aclcheck_link(const char *path, \
+				    acl_type_t type, struct acl *aclp); }
 429	AUE_SIGWAIT	NOPROTO	{ int sigwait(const sigset_t *set, \
 				    int *sig); }
 430	AUE_NULL	UNIMPL	thr_create;
diff --git a/sys/compat/linux/linux_ioctl.c b/sys/compat/linux/linux_ioctl.c
index 7688fe51db5..89b50e474cf 100644
--- a/sys/compat/linux/linux_ioctl.c
+++ b/sys/compat/linux/linux_ioctl.c
@@ -78,6 +78,9 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
+#include 
+#include 
+
 CTASSERT(LINUX_IFNAMSIZ == IFNAMSIZ);
 
 static linux_ioctl_function_t linux_ioctl_cdrom;
@@ -91,6 +94,7 @@ static linux_ioctl_function_t linux_ioctl_termio;
 static linux_ioctl_function_t linux_ioctl_private;
 static linux_ioctl_function_t linux_ioctl_drm;
 static linux_ioctl_function_t linux_ioctl_sg;
+static linux_ioctl_function_t linux_ioctl_v4l;
 static linux_ioctl_function_t linux_ioctl_special;
 
 static struct linux_ioctl_handler cdrom_handler =
@@ -115,6 +119,8 @@ static struct linux_ioctl_handler drm_handler =
 { linux_ioctl_drm, LINUX_IOCTL_DRM_MIN, LINUX_IOCTL_DRM_MAX };
 static struct linux_ioctl_handler sg_handler =
 { linux_ioctl_sg, LINUX_IOCTL_SG_MIN, LINUX_IOCTL_SG_MAX };
+static struct linux_ioctl_handler video_handler =
+{ linux_ioctl_v4l, LINUX_IOCTL_VIDEO_MIN, LINUX_IOCTL_VIDEO_MAX };
 
 DATA_SET(linux_ioctl_handler_set, cdrom_handler);
 DATA_SET(linux_ioctl_handler_set, vfat_handler);
@@ -127,6 +133,7 @@ DATA_SET(linux_ioctl_handler_set, termio_handler);
 DATA_SET(linux_ioctl_handler_set, private_handler);
 DATA_SET(linux_ioctl_handler_set, drm_handler);
 DATA_SET(linux_ioctl_handler_set, sg_handler);
+DATA_SET(linux_ioctl_handler_set, video_handler);
 
 struct handler_element
 {
@@ -2588,6 +2595,295 @@ linux_ioctl_sg(struct thread *td, struct linux_ioctl_args *args)
 	return (error);
 }
 
+/*
+ * Video4Linux (V4L) ioctl handler
+ */
+static int
+linux_to_bsd_v4l_tuner(struct l_video_tuner *lvt, struct video_tuner *vt)
+{
+	vt->tuner = lvt->tuner;
+	strlcpy(vt->name, lvt->name, LINUX_VIDEO_TUNER_NAME_SIZE);
+	vt->rangelow = lvt->rangelow;	/* possible long size conversion */
+	vt->rangehigh = lvt->rangehigh;	/* possible long size conversion */
+	vt->flags = lvt->flags;
+	vt->mode = lvt->mode;
+	vt->signal = lvt->signal;
+	return (0);
+}
+
+static int
+bsd_to_linux_v4l_tuner(struct video_tuner *vt, struct l_video_tuner *lvt)
+{
+	lvt->tuner = vt->tuner;
+	strlcpy(lvt->name, vt->name, LINUX_VIDEO_TUNER_NAME_SIZE);
+	lvt->rangelow = vt->rangelow;	/* possible long size conversion */
+	lvt->rangehigh = vt->rangehigh;	/* possible long size conversion */
+	lvt->flags = vt->flags;
+	lvt->mode = vt->mode;
+	lvt->signal = vt->signal;
+	return (0);
+}
+
+#if 0
+static int
+linux_to_bsd_v4l_clip(struct l_video_clip *lvc, struct video_clip *vc)
+{
+	vc->x = lvc->x;
+	vc->y = lvc->y;
+	vc->width = lvc->width;
+	vc->height = lvc->height;
+	vc->next = PTRIN(lvc->next);	/* possible pointer size conversion */
+	return (0);
+}
+#endif
+
+static int
+linux_to_bsd_v4l_window(struct l_video_window *lvw, struct video_window *vw)
+{
+	vw->x = lvw->x;
+	vw->y = lvw->y;
+	vw->width = lvw->width;
+	vw->height = lvw->height;
+	vw->chromakey = lvw->chromakey;
+	vw->flags = lvw->flags;
+	vw->clips = PTRIN(lvw->clips);	/* possible pointer size conversion */
+	vw->clipcount = lvw->clipcount;
+	return (0);
+}
+
+static int
+bsd_to_linux_v4l_window(struct video_window *vw, struct l_video_window *lvw)
+{
+	lvw->x = vw->x;
+	lvw->y = vw->y;
+	lvw->width = vw->width;
+	lvw->height = vw->height;
+	lvw->chromakey = vw->chromakey;
+	lvw->flags = vw->flags;
+	lvw->clips = PTROUT(vw->clips);	/* possible pointer size conversion */
+	lvw->clipcount = vw->clipcount;
+	return (0);
+}
+
+static int
+linux_to_bsd_v4l_buffer(struct l_video_buffer *lvb, struct video_buffer *vb)
+{
+	vb->base = PTRIN(lvb->base);	/* possible pointer size conversion */
+	vb->height = lvb->height;
+	vb->width = lvb->width;
+	vb->depth = lvb->depth;
+	vb->bytesperline = lvb->bytesperline;
+	return (0);
+}
+
+static int
+bsd_to_linux_v4l_buffer(struct video_buffer *vb, struct l_video_buffer *lvb)
+{
+	lvb->base = PTROUT(vb->base);	/* possible pointer size conversion */
+	lvb->height = vb->height;
+	lvb->width = vb->width;
+	lvb->depth = vb->depth;
+	lvb->bytesperline = vb->bytesperline;
+	return (0);
+}
+
+static int
+linux_to_bsd_v4l_code(struct l_video_code *lvc, struct video_code *vc)
+{
+	strlcpy(vc->loadwhat, lvc->loadwhat, LINUX_VIDEO_CODE_LOADWHAT_SIZE);
+	vc->datasize = lvc->datasize;
+	vc->data = PTRIN(lvc->data);	/* possible pointer size conversion */
+	return (0);
+}
+
+#if 0
+static int
+linux_v4l_cliplist_copy(struct l_video_window *lvw, struct video_window *vw)
+{
+	struct video_clip vclip;
+	struct l_video_clip l_vclip;
+	struct video_clip **ppvc;
+	struct l_video_clip *plvc;
+	int error;
+
+	ppvc = &(vw->clips);
+	for (plvc = (struct l_video_clip *) PTRIN(lvw->clips);
+	    plvc != NULL;
+	    plvc = (struct l_video_clip *) PTRIN(plvc->next)) {
+		error = copyin((void *) plvc, &l_vclip, sizeof(l_vclip));
+		if (error) return (error);
+		linux_to_bsd_v4l_clip(&l_vclip, &vclip);
+		/* XXX: If there can be no concurrency: s/M_NOWAIT/M_WAITOK/ */
+		if ((*ppvc = malloc(sizeof(**ppvc), M_LINUX, M_NOWAIT)) == NULL)
+			return (ENOMEM);    /* XXX: linux has no ENOMEM here */
+		memcpy(&vclip, *ppvc, sizeof(vclip));
+		ppvc = &((*ppvc)->next);
+	}
+	return (0);
+}
+
+static int
+linux_v4l_cliplist_free(struct video_window *vw)
+{
+	struct video_clip **ppvc;
+	struct video_clip **ppvc_next;
+
+	for (ppvc = &(vw->clips); *ppvc != NULL; ppvc = ppvc_next) {
+		ppvc_next = &((*ppvc)->next);
+		free(*ppvc, M_LINUX);
+	}
+	return (0);
+}
+#endif
+
+static int
+linux_ioctl_v4l(struct thread *td, struct linux_ioctl_args *args)
+{
+	struct file *fp;
+	int error;
+	struct video_tuner vtun;
+	struct video_window vwin;
+	struct video_buffer vbuf;
+	struct video_code vcode;
+	struct l_video_tuner l_vtun;
+	struct l_video_window l_vwin;
+	struct l_video_buffer l_vbuf;
+	struct l_video_code l_vcode;
+
+	switch (args->cmd & 0xffff) {
+	case LINUX_VIDIOCGCAP:		args->cmd = VIDIOCGCAP; break;
+	case LINUX_VIDIOCGCHAN:		args->cmd = VIDIOCGCHAN; break;
+	case LINUX_VIDIOCSCHAN:		args->cmd = VIDIOCSCHAN; break;
+
+	case LINUX_VIDIOCGTUNER:
+		if ((error = fget(td, args->fd, &fp)) != 0)
+			return (error);
+		error = fo_ioctl(fp, VIDIOCGTUNER, &vtun, td->td_ucred, td);
+		if (!error) {
+			bsd_to_linux_v4l_tuner(&vtun, &l_vtun);
+			error = copyout(&l_vtun, (void *) args->arg,
+			    sizeof(l_vtun));
+		}
+		fdrop(fp, td);
+		return (error);
+
+	case LINUX_VIDIOCSTUNER:
+		if ((error = fget(td, args->fd, &fp)) != 0)
+			return (error);
+		error = copyin((void *) args->arg, &l_vtun, sizeof(l_vtun));
+		if (error) {
+			fdrop(fp, td);
+			return (error);
+		}
+		linux_to_bsd_v4l_tuner(&l_vtun, &vtun);
+		error = fo_ioctl(fp, VIDIOCSMICROCODE, &vtun, td->td_ucred, td);
+		fdrop(fp, td);
+		return (error);
+
+	case LINUX_VIDIOCGPICT:		args->cmd = VIDIOCGPICT; break;
+	case LINUX_VIDIOCSPICT:		args->cmd = VIDIOCSPICT; break;
+	case LINUX_VIDIOCCAPTURE:	args->cmd = VIDIOCCAPTURE; break;
+
+	case LINUX_VIDIOCGWIN:
+		if ((error = fget(td, args->fd, &fp)) != 0)
+			return (error);
+		error = fo_ioctl(fp, VIDIOCGWIN, &vwin, td->td_ucred, td);
+		if (!error) {
+			bsd_to_linux_v4l_window(&vwin, &l_vwin);
+			error = copyout(&l_vwin, (void *) args->arg,
+			    sizeof(l_vwin));
+		}
+		fdrop(fp, td);
+		return (error);
+
+	case LINUX_VIDIOCSWIN:
+		if ((error = fget(td, args->fd, &fp)) != 0)
+			return (error);
+		error = copyin((void *) args->arg, &l_vwin, sizeof(l_vwin));
+		if (error) {
+			fdrop(fp, td);
+			return (error);
+		}
+		linux_to_bsd_v4l_window(&l_vwin, &vwin);
+#if 0
+		/*
+		 * XXX: some Linux apps call SWIN but do not store valid
+		 *	values in clipcount or in the clips pointer.  Until
+		 *	we have someone calling to support this, the code
+		 *	to handle the list of video_clip structures is removed.
+		 */
+		error = linux_v4l_cliplist_copy(&l_vwin, &vwin);
+#endif
+		if (!error)
+			error = fo_ioctl(fp, VIDIOCSWIN, &vwin, td->td_ucred, td);
+		fdrop(fp, td);
+#if 0
+		linux_v4l_cliplist_free(&vwin);
+#endif
+		return (error);
+
+	case LINUX_VIDIOCGFBUF:
+		if ((error = fget(td, args->fd, &fp)) != 0)
+			return (error);
+		error = fo_ioctl(fp, VIDIOCGFBUF, &vbuf, td->td_ucred, td);
+		if (!error) {
+			bsd_to_linux_v4l_buffer(&vbuf, &l_vbuf);
+			error = copyout(&l_vbuf, (void *) args->arg,
+			    sizeof(l_vbuf));
+		}
+		fdrop(fp, td);
+		return (error);
+
+	case LINUX_VIDIOCSFBUF:
+		if ((error = fget(td, args->fd, &fp)) != 0)
+			return (error);
+		error = copyin((void *) args->arg, &l_vbuf, sizeof(l_vbuf));
+		if (error) {
+			fdrop(fp, td);
+			return (error);
+		}
+		linux_to_bsd_v4l_buffer(&l_vbuf, &vbuf);
+		error = fo_ioctl(fp, VIDIOCSFBUF, &vbuf, td->td_ucred, td);
+		fdrop(fp, td);
+		return (error);
+
+	case LINUX_VIDIOCKEY:		args->cmd = VIDIOCKEY; break;
+	case LINUX_VIDIOCGFREQ:		args->cmd = VIDIOCGFREQ; break;
+	case LINUX_VIDIOCSFREQ:		args->cmd = VIDIOCSFREQ; break;
+	case LINUX_VIDIOCGAUDIO:	args->cmd = VIDIOCGAUDIO; break;
+	case LINUX_VIDIOCSAUDIO:	args->cmd = VIDIOCSAUDIO; break;
+	case LINUX_VIDIOCSYNC:		args->cmd = VIDIOCSYNC; break;
+	case LINUX_VIDIOCMCAPTURE:	args->cmd = VIDIOCMCAPTURE; break;
+	case LINUX_VIDIOCGMBUF:		args->cmd = VIDIOCGMBUF; break;
+	case LINUX_VIDIOCGUNIT:		args->cmd = VIDIOCGUNIT; break;
+	case LINUX_VIDIOCGCAPTURE:	args->cmd = VIDIOCGCAPTURE; break;
+	case LINUX_VIDIOCSCAPTURE:	args->cmd = VIDIOCSCAPTURE; break;
+	case LINUX_VIDIOCSPLAYMODE:	args->cmd = VIDIOCSPLAYMODE; break;
+	case LINUX_VIDIOCSWRITEMODE:	args->cmd = VIDIOCSWRITEMODE; break;
+	case LINUX_VIDIOCGPLAYINFO:	args->cmd = VIDIOCGPLAYINFO; break;
+
+	case LINUX_VIDIOCSMICROCODE:
+		if ((error = fget(td, args->fd, &fp)) != 0)
+			return (error);
+		error = copyin((void *) args->arg, &l_vcode, sizeof(l_vcode));
+		if (error) {
+			fdrop(fp, td);
+			return (error);
+		}
+		linux_to_bsd_v4l_code(&l_vcode, &vcode);
+		error = fo_ioctl(fp, VIDIOCSTUNER, &vcode, td->td_ucred, td);
+		fdrop(fp, td);
+		return (error);
+
+	case LINUX_VIDIOCGVBIFMT:	args->cmd = VIDIOCGVBIFMT; break;
+	case LINUX_VIDIOCSVBIFMT:	args->cmd = VIDIOCSVBIFMT; break;
+	default:			return (ENOIOCTL);
+	}
+
+	error = ioctl(td, (struct ioctl_args *)args);
+	return (error);
+}
+
 /*
  * Special ioctl handler
  */
diff --git a/sys/compat/linux/linux_ioctl.h b/sys/compat/linux/linux_ioctl.h
index 2192127d38d..5eb0c59a8f3 100644
--- a/sys/compat/linux/linux_ioctl.h
+++ b/sys/compat/linux/linux_ioctl.h
@@ -575,4 +575,40 @@
 struct ifnet;
 int		 linux_ifname(struct ifnet *, char *, size_t);
 
+/*
+ * video
+ */
+#define LINUX_VIDIOCGCAP		0x7601
+#define LINUX_VIDIOCGCHAN		0x7602
+#define LINUX_VIDIOCSCHAN		0x7603
+#define LINUX_VIDIOCGTUNER		0x7604
+#define LINUX_VIDIOCSTUNER		0x7605
+#define LINUX_VIDIOCGPICT		0x7606
+#define LINUX_VIDIOCSPICT		0x7607
+#define LINUX_VIDIOCCAPTURE		0x7608
+#define LINUX_VIDIOCGWIN		0x7609
+#define LINUX_VIDIOCSWIN		0x760a
+#define LINUX_VIDIOCGFBUF		0x760b
+#define LINUX_VIDIOCSFBUF		0x760c
+#define LINUX_VIDIOCKEY			0x760d
+#define LINUX_VIDIOCGFREQ		0x760e
+#define LINUX_VIDIOCSFREQ		0x760f
+#define LINUX_VIDIOCGAUDIO		0x7610
+#define LINUX_VIDIOCSAUDIO		0x7611
+#define LINUX_VIDIOCSYNC		0x7623
+#define LINUX_VIDIOCMCAPTURE		0x7613
+#define LINUX_VIDIOCGMBUF		0x7614
+#define LINUX_VIDIOCGUNIT		0x7615
+#define LINUX_VIDIOCGCAPTURE		0x7616
+#define LINUX_VIDIOCSCAPTURE		0x7617
+#define LINUX_VIDIOCSPLAYMODE		0x7618
+#define LINUX_VIDIOCSWRITEMODE		0x7619
+#define LINUX_VIDIOCGPLAYINFO		0x761a
+#define LINUX_VIDIOCSMICROCODE		0x761b
+#define LINUX_VIDIOCGVBIFMT		0x761c
+#define LINUX_VIDIOCSVBIFMT		0x761d
+
+#define LINUX_IOCTL_VIDEO_MIN	LINUX_VIDIOCGCAP
+#define LINUX_IOCTL_VIDEO_MAX	LINUX_VIDIOCSVBIFMT
+
 #endif /* !_LINUX_IOCTL_H_ */
diff --git a/sys/compat/linux/linux_signal.c b/sys/compat/linux/linux_signal.c
index 5910d627d8d..9cc05ed99b8 100644
--- a/sys/compat/linux/linux_signal.c
+++ b/sys/compat/linux/linux_signal.c
@@ -565,7 +565,7 @@ linux_do_tkill(struct thread *td, l_int tgid, l_int pid, l_int signum)
 
 	AUDIT_ARG_PROCESS(p);
 	error = p_cansignal(td, p, signum);
-	if (error)
+	if (error != 0 || signum == 0)
 		goto out;
 
 	error = ESRCH;
diff --git a/sys/compat/linux/linux_videodev.h b/sys/compat/linux/linux_videodev.h
new file mode 100644
index 00000000000..f6606aeadff
--- /dev/null
+++ b/sys/compat/linux/linux_videodev.h
@@ -0,0 +1,367 @@
+/*
+ * This header comes from linux, but it has no license. The author
+ * (Alan Cox @ Redhat) gave explicit permissions to use it in FreeBSD.
+ * The freeBSD vendor branch for v4l gives a more detailed description
+ * about this.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef __LINUX_VIDEODEV_H
+#define __LINUX_VIDEODEV_H
+
+#include 
+typedef int32_t __s32;
+typedef uint32_t __u32;
+typedef uint16_t __u16;
+typedef uint8_t __u8;
+
+#if 0
+#define HAVE_V4L1 1
+
+#include 
+#endif 
+
+#define VID_TYPE_CAPTURE	1	/* Can capture */
+#define VID_TYPE_TUNER		2	/* Can tune */
+#define VID_TYPE_TELETEXT	4	/* Does teletext */
+#define VID_TYPE_OVERLAY	8	/* Overlay onto frame buffer */
+#define VID_TYPE_CHROMAKEY	16	/* Overlay by chromakey */
+#define VID_TYPE_CLIPPING	32	/* Can clip */
+#define VID_TYPE_FRAMERAM	64	/* Uses the frame buffer memory */
+#define VID_TYPE_SCALES		128	/* Scalable */
+#define VID_TYPE_MONOCHROME	256	/* Monochrome only */
+#define VID_TYPE_SUBCAPTURE	512	/* Can capture subareas of the image */
+#define VID_TYPE_MPEG_DECODER	1024	/* Can decode MPEG streams */
+#define VID_TYPE_MPEG_ENCODER	2048	/* Can encode MPEG streams */
+#define VID_TYPE_MJPEG_DECODER	4096	/* Can decode MJPEG streams */
+#define VID_TYPE_MJPEG_ENCODER	8192	/* Can encode MJPEG streams */
+
+struct video_capability
+{
+	char name[32];
+	int type;
+	int channels;	/* Num channels */
+	int audios;	/* Num audio devices */
+	int maxwidth;	/* Supported width */
+	int maxheight;	/* And height */
+	int minwidth;	/* Supported width */
+	int minheight;	/* And height */
+};
+
+
+struct video_channel
+{
+	int channel;
+	char name[32];
+	int tuners;
+	__u32  flags;
+#define VIDEO_VC_TUNER		1	/* Channel has a tuner */
+#define VIDEO_VC_AUDIO		2	/* Channel has audio */
+	__u16  type;
+#define VIDEO_TYPE_TV		1
+#define VIDEO_TYPE_CAMERA	2
+	__u16 norm;			/* Norm set by channel */
+};
+
+struct video_tuner
+{
+	int tuner;
+	char name[32];
+	unsigned long rangelow, rangehigh;	/* Tuner range */
+	__u32 flags;
+#define VIDEO_TUNER_PAL		1
+#define VIDEO_TUNER_NTSC	2
+#define VIDEO_TUNER_SECAM	4
+#define VIDEO_TUNER_LOW		8	/* Uses KHz not MHz */
+#define VIDEO_TUNER_NORM	16	/* Tuner can set norm */
+#define VIDEO_TUNER_STEREO_ON	128	/* Tuner is seeing stereo */
+#define VIDEO_TUNER_RDS_ON      256     /* Tuner is seeing an RDS datastream */
+#define VIDEO_TUNER_MBS_ON      512     /* Tuner is seeing an MBS datastream */
+	__u16 mode;			/* PAL/NTSC/SECAM/OTHER */
+#define VIDEO_MODE_PAL		0
+#define VIDEO_MODE_NTSC		1
+#define VIDEO_MODE_SECAM	2
+#define VIDEO_MODE_AUTO		3
+	__u16 signal;			/* Signal strength 16bit scale */
+};
+
+struct video_picture
+{
+	__u16	brightness;
+	__u16	hue;
+	__u16	colour;
+	__u16	contrast;
+	__u16	whiteness;	/* Black and white only */
+	__u16	depth;		/* Capture depth */
+	__u16   palette;	/* Palette in use */
+#define VIDEO_PALETTE_GREY	1	/* Linear greyscale */
+#define VIDEO_PALETTE_HI240	2	/* High 240 cube (BT848) */
+#define VIDEO_PALETTE_RGB565	3	/* 565 16 bit RGB */
+#define VIDEO_PALETTE_RGB24	4	/* 24bit RGB */
+#define VIDEO_PALETTE_RGB32	5	/* 32bit RGB */
+#define VIDEO_PALETTE_RGB555	6	/* 555 15bit RGB */
+#define VIDEO_PALETTE_YUV422	7	/* YUV422 capture */
+#define VIDEO_PALETTE_YUYV	8
+#define VIDEO_PALETTE_UYVY	9	/* The great thing about standards is ... */
+#define VIDEO_PALETTE_YUV420	10
+#define VIDEO_PALETTE_YUV411	11	/* YUV411 capture */
+#define VIDEO_PALETTE_RAW	12	/* RAW capture (BT848) */
+#define VIDEO_PALETTE_YUV422P	13	/* YUV 4:2:2 Planar */
+#define VIDEO_PALETTE_YUV411P	14	/* YUV 4:1:1 Planar */
+#define VIDEO_PALETTE_YUV420P	15	/* YUV 4:2:0 Planar */
+#define VIDEO_PALETTE_YUV410P	16	/* YUV 4:1:0 Planar */
+#define VIDEO_PALETTE_PLANAR	13	/* start of planar entries */
+#define VIDEO_PALETTE_COMPONENT 7	/* start of component entries */
+};
+
+struct video_audio
+{
+	int	audio;		/* Audio channel */
+	__u16	volume;		/* If settable */
+	__u16	bass, treble;
+	__u32	flags;
+#define VIDEO_AUDIO_MUTE	1
+#define VIDEO_AUDIO_MUTABLE	2
+#define VIDEO_AUDIO_VOLUME	4
+#define VIDEO_AUDIO_BASS	8
+#define VIDEO_AUDIO_TREBLE	16
+#define VIDEO_AUDIO_BALANCE	32
+	char    name[16];
+#define VIDEO_SOUND_MONO	1
+#define VIDEO_SOUND_STEREO	2
+#define VIDEO_SOUND_LANG1	4
+#define VIDEO_SOUND_LANG2	8
+	__u16   mode;
+	__u16	balance;	/* Stereo balance */
+	__u16	step;		/* Step actual volume uses */
+};
+
+struct video_clip
+{
+	__s32	x,y;
+	__s32	width, height;
+	struct	video_clip *next;	/* For user use/driver use only */
+};
+
+struct video_window
+{
+	__u32	x,y;			/* Position of window */
+	__u32	width,height;		/* Its size */
+	__u32	chromakey;
+	__u32	flags;
+	struct	video_clip *clips;	/* Set only */
+	int	clipcount;
+#define VIDEO_WINDOW_INTERLACE	1
+#define VIDEO_WINDOW_CHROMAKEY	16	/* Overlay by chromakey */
+#define VIDEO_CLIP_BITMAP	-1
+/* bitmap is 1024x625, a '1' bit represents a clipped pixel */
+#define VIDEO_CLIPMAP_SIZE	(128 * 625)
+};
+
+struct video_capture
+{
+	__u32 	x,y;			/* Offsets into image */
+	__u32	width, height;		/* Area to capture */
+	__u16	decimation;		/* Decimation divider */
+	__u16	flags;			/* Flags for capture */
+#define VIDEO_CAPTURE_ODD		0	/* Temporal */
+#define VIDEO_CAPTURE_EVEN		1
+};
+
+struct video_buffer
+{
+	void	*base;
+	int	height,width;
+	int	depth;
+	int	bytesperline;
+};
+
+struct video_mmap
+{
+	unsigned	int frame;		/* Frame (0 - n) for double buffer */
+	int		height,width;
+	unsigned	int format;		/* should be VIDEO_PALETTE_* */
+};
+
+struct video_key
+{
+	__u8	key[8];
+	__u32	flags;
+};
+
+#define VIDEO_MAX_FRAME		32
+
+struct video_mbuf
+{
+	int	size;		/* Total memory to map */
+	int	frames;		/* Frames */
+	int	offsets[VIDEO_MAX_FRAME];
+};
+
+#define 	VIDEO_NO_UNIT	(-1)
+
+struct video_unit
+{
+	int 	video;		/* Video minor */
+	int	vbi;		/* VBI minor */
+	int	radio;		/* Radio minor */
+	int	audio;		/* Audio minor */
+	int	teletext;	/* Teletext minor */
+};
+
+struct vbi_format {
+	__u32	sampling_rate;	/* in Hz */
+	__u32	samples_per_line;
+	__u32	sample_format;	/* VIDEO_PALETTE_RAW only (1 byte) */
+	__s32	start[2];	/* starting line for each frame */
+	__u32	count[2];	/* count of lines for each frame */
+	__u32	flags;
+#define	VBI_UNSYNC	1	/* can distingues between top/bottom field */
+#define	VBI_INTERLACED	2	/* lines are interlaced */
+};
+
+/* video_info is biased towards hardware mpeg encode/decode */
+/* but it could apply generically to any hardware compressor/decompressor */
+struct video_info
+{
+	__u32	frame_count;	/* frames output since decode/encode began */
+	__u32	h_size;		/* current unscaled horizontal size */
+	__u32	v_size;		/* current unscaled veritcal size */
+	__u32	smpte_timecode;	/* current SMPTE timecode (for current GOP) */
+	__u32	picture_type;	/* current picture type */
+	__u32	temporal_reference;	/* current temporal reference */
+	__u8	user_data[256];	/* user data last found in compressed stream */
+	/* user_data[0] contains user data flags, user_data[1] has count */
+};
+
+/* generic structure for setting playback modes */
+struct video_play_mode
+{
+	int	mode;
+	int	p1;
+	int	p2;
+};
+
+/* for loading microcode / fpga programming */
+struct video_code
+{
+	char	loadwhat[16];	/* name or tag of file being passed */
+	int	datasize;
+	__u8	*data;
+};
+
+#define VIDIOCGCAP		_IOR('v',1,struct video_capability)	/* Get capabilities */
+#define VIDIOCGCHAN		_IOWR('v',2,struct video_channel)	/* Get channel info (sources) */
+#define VIDIOCSCHAN		_IOW('v',3,struct video_channel)	/* Set channel 	*/
+#define VIDIOCGTUNER		_IOWR('v',4,struct video_tuner)		/* Get tuner abilities */
+#define VIDIOCSTUNER		_IOW('v',5,struct video_tuner)		/* Tune the tuner for the current channel */
+#define VIDIOCGPICT		_IOR('v',6,struct video_picture)	/* Get picture properties */
+#define VIDIOCSPICT		_IOW('v',7,struct video_picture)	/* Set picture properties */
+#define VIDIOCCAPTURE		_IOW('v',8,int)				/* Start, end capture */
+#define VIDIOCGWIN		_IOR('v',9, struct video_window)	/* Get the video overlay window */
+#define VIDIOCSWIN		_IOW('v',10, struct video_window)	/* Set the video overlay window - passes clip list for hardware smarts , chromakey etc */
+#define VIDIOCGFBUF		_IOR('v',11, struct video_buffer)	/* Get frame buffer */
+#define VIDIOCSFBUF		_IOW('v',12, struct video_buffer)	/* Set frame buffer - root only */
+#define VIDIOCKEY		_IOR('v',13, struct video_key)		/* Video key event - to dev 255 is to all - cuts capture on all DMA windows with this key (0xFFFFFFFF == all) */
+#define VIDIOCGFREQ		_IOR('v',14, unsigned long)		/* Set tuner */
+#define VIDIOCSFREQ		_IOW('v',15, unsigned long)		/* Set tuner */
+#define VIDIOCGAUDIO		_IOR('v',16, struct video_audio)	/* Get audio info */
+#define VIDIOCSAUDIO		_IOW('v',17, struct video_audio)	/* Audio source, mute etc */
+#define VIDIOCSYNC		_IOW('v',18, int)			/* Sync with mmap grabbing */
+#define VIDIOCMCAPTURE		_IOW('v',19, struct video_mmap)		/* Grab frames */
+#define VIDIOCGMBUF		_IOR('v',20, struct video_mbuf)		/* Memory map buffer info */
+#define VIDIOCGUNIT		_IOR('v',21, struct video_unit)		/* Get attached units */
+#define VIDIOCGCAPTURE		_IOR('v',22, struct video_capture)	/* Get subcapture */
+#define VIDIOCSCAPTURE		_IOW('v',23, struct video_capture)	/* Set subcapture */
+#define VIDIOCSPLAYMODE		_IOW('v',24, struct video_play_mode)	/* Set output video mode/feature */
+#define VIDIOCSWRITEMODE	_IOW('v',25, int)			/* Set write mode */
+#define VIDIOCGPLAYINFO		_IOR('v',26, struct video_info)		/* Get current playback info from hardware */
+#define VIDIOCSMICROCODE	_IOW('v',27, struct video_code)		/* Load microcode into hardware */
+#define	VIDIOCGVBIFMT		_IOR('v',28, struct vbi_format)		/* Get VBI information */
+#define	VIDIOCSVBIFMT		_IOW('v',29, struct vbi_format)		/* Set VBI information */
+
+
+#define BASE_VIDIOCPRIVATE	192		/* 192-255 are private */
+
+/* VIDIOCSWRITEMODE */
+#define VID_WRITE_MPEG_AUD		0
+#define VID_WRITE_MPEG_VID		1
+#define VID_WRITE_OSD			2
+#define VID_WRITE_TTX			3
+#define VID_WRITE_CC			4
+#define VID_WRITE_MJPEG			5
+
+/* VIDIOCSPLAYMODE */
+#define VID_PLAY_VID_OUT_MODE		0
+	/* p1: = VIDEO_MODE_PAL, VIDEO_MODE_NTSC, etc ... */
+#define VID_PLAY_GENLOCK		1
+	/* p1: 0 = OFF, 1 = ON */
+	/* p2: GENLOCK FINE DELAY value */
+#define VID_PLAY_NORMAL			2
+#define VID_PLAY_PAUSE			3
+#define VID_PLAY_SINGLE_FRAME		4
+#define VID_PLAY_FAST_FORWARD		5
+#define VID_PLAY_SLOW_MOTION		6
+#define VID_PLAY_IMMEDIATE_NORMAL	7
+#define VID_PLAY_SWITCH_CHANNELS	8
+#define VID_PLAY_FREEZE_FRAME		9
+#define VID_PLAY_STILL_MODE		10
+#define VID_PLAY_MASTER_MODE		11
+	/* p1: see below */
+#define		VID_PLAY_MASTER_NONE	1
+#define		VID_PLAY_MASTER_VIDEO	2
+#define		VID_PLAY_MASTER_AUDIO	3
+#define VID_PLAY_ACTIVE_SCANLINES	12
+	/* p1 = first active; p2 = last active */
+#define VID_PLAY_RESET			13
+#define VID_PLAY_END_MARK		14
+
+
+
+#define VID_HARDWARE_BT848	1
+#define VID_HARDWARE_QCAM_BW	2
+#define VID_HARDWARE_PMS	3
+#define VID_HARDWARE_QCAM_C	4
+#define VID_HARDWARE_PSEUDO	5
+#define VID_HARDWARE_SAA5249	6
+#define VID_HARDWARE_AZTECH	7
+#define VID_HARDWARE_SF16MI	8
+#define VID_HARDWARE_RTRACK	9
+#define VID_HARDWARE_ZOLTRIX	10
+#define VID_HARDWARE_SAA7146    11
+#define VID_HARDWARE_VIDEUM	12	/* Reserved for Winnov videum */
+#define VID_HARDWARE_RTRACK2	13
+#define VID_HARDWARE_PERMEDIA2	14	/* Reserved for Permedia2 */
+#define VID_HARDWARE_RIVA128	15	/* Reserved for RIVA 128 */
+#define VID_HARDWARE_PLANB	16	/* PowerMac motherboard video-in */
+#define VID_HARDWARE_BROADWAY	17	/* Broadway project */
+#define VID_HARDWARE_GEMTEK	18
+#define VID_HARDWARE_TYPHOON	19
+#define VID_HARDWARE_VINO	20	/* SGI Indy Vino */
+#define VID_HARDWARE_CADET	21	/* Cadet radio */
+#define VID_HARDWARE_TRUST	22	/* Trust FM Radio */
+#define VID_HARDWARE_TERRATEC	23	/* TerraTec ActiveRadio */
+#define VID_HARDWARE_CPIA	24
+#define VID_HARDWARE_ZR36120	25	/* Zoran ZR36120/ZR36125 */
+#define VID_HARDWARE_ZR36067	26	/* Zoran ZR36067/36060 */
+#define VID_HARDWARE_OV511	27
+#define VID_HARDWARE_ZR356700	28	/* Zoran 36700 series */
+#define VID_HARDWARE_W9966	29
+#define VID_HARDWARE_SE401	30	/* SE401 USB webcams */
+#define VID_HARDWARE_PWC	31	/* Philips webcams */
+#define VID_HARDWARE_MEYE	32	/* Sony Vaio MotionEye cameras */
+#define VID_HARDWARE_CPIA2	33
+#define VID_HARDWARE_VICAM      34
+#define VID_HARDWARE_SF16FMR2	35
+#define VID_HARDWARE_W9968CF	36
+#define VID_HARDWARE_SAA7114H   37
+#define VID_HARDWARE_SN9C102	38
+#define VID_HARDWARE_ARV	39
+#endif /* __LINUX_VIDEODEV_H */
+
+/*
+ * Local variables:
+ * c-basic-offset: 8
+ * End:
+ */
diff --git a/sys/compat/linux/linux_videodev_compat.h b/sys/compat/linux/linux_videodev_compat.h
new file mode 100644
index 00000000000..98034bcbb04
--- /dev/null
+++ b/sys/compat/linux/linux_videodev_compat.h
@@ -0,0 +1,59 @@
+/*
+ * $FreeBSD$
+ */
+
+/*
+ * This file defines compatibility versions of several video structures
+ * defined in the Linux videodev.h header (linux_videodev.h).  The
+ * structures defined in this file are the ones that have been determined
+ * to have 32- to 64-bit size dependencies.
+ */
+
+#ifndef _LINUX_VIDEODEV_COMPAT_H_
+#define	_LINUX_VIDEODEV_COMPAT_H_
+
+struct l_video_tuner
+{
+	l_int		tuner;
+#define LINUX_VIDEO_TUNER_NAME_SIZE	32
+	char		name[LINUX_VIDEO_TUNER_NAME_SIZE];
+	l_ulong		rangelow, rangehigh;
+	uint32_t	flags;
+	uint16_t	mode;
+	uint16_t	signal;
+};
+
+struct l_video_clip
+{
+	int32_t		x, y;
+	int32_t		width, height;
+	l_uintptr_t	next;
+};
+
+struct l_video_window
+{
+	uint32_t	x, y;
+	uint32_t	width, height;
+	uint32_t	chromakey;
+	uint32_t	flags;
+	l_uintptr_t	clips;
+	l_int		clipcount;
+};
+
+struct l_video_buffer
+{
+	l_uintptr_t	base;
+	l_int		height, width;
+	l_int		depth;
+	l_int		bytesperline;
+};
+
+struct l_video_code
+{
+#define LINUX_VIDEO_CODE_LOADWHAT_SIZE	16
+	char		loadwhat[LINUX_VIDEO_CODE_LOADWHAT_SIZE];
+	l_int		datasize;
+	l_uintptr_t	data;
+};
+
+#endif /* !_LINUX_VIDEODEV_COMPAT_H_ */
diff --git a/sys/compat/svr4/svr4_termios.c b/sys/compat/svr4/svr4_termios.c
index 37a6783aff1..8195a410e70 100644
--- a/sys/compat/svr4/svr4_termios.c
+++ b/sys/compat/svr4/svr4_termios.c
@@ -34,7 +34,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
+#include 
 
 #include 
 
diff --git a/sys/compat/x86bios/x86bios.c b/sys/compat/x86bios/x86bios.c
index be5788708be..34da07c3d40 100644
--- a/sys/compat/x86bios/x86bios.c
+++ b/sys/compat/x86bios/x86bios.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -80,6 +81,16 @@ static vm_offset_t *x86bios_map;
 
 static vm_paddr_t x86bios_seg_phys;
 
+SYSCTL_NODE(_debug, OID_AUTO, x86bios, CTLFLAG_RD, NULL, "x86bios debugging");
+static int x86bios_trace_call;
+TUNABLE_INT("debug.x86bios.call", &x86bios_trace_call);
+SYSCTL_INT(_debug_x86bios, OID_AUTO, call, CTLFLAG_RW, &x86bios_trace_call, 0,
+    "Trace far function calls");
+static int x86bios_trace_int;
+TUNABLE_INT("debug.x86bios.int", &x86bios_trace_int);
+SYSCTL_INT(_debug_x86bios, OID_AUTO, int, CTLFLAG_RW, &x86bios_trace_int, 0,
+    "Trace software interrupt handlers");
+
 static void *
 x86bios_get_pages(uint32_t offset, size_t size)
 {
@@ -312,7 +323,7 @@ x86bios_call(struct x86regs *regs, uint16_t seg, uint16_t off)
 	if (x86bios_map == NULL)
 		return;
 
-	if (bootverbose)
+	if (x86bios_trace_call)
 		printf("Calling 0x%05x (ax=0x%04x bx=0x%04x "
 		    "cx=0x%04x dx=0x%04x es=0x%04x di=0x%04x)\n",
 		    (seg << 4) + off, regs->R_AX, regs->R_BX, regs->R_CX,
@@ -324,7 +335,7 @@ x86bios_call(struct x86regs *regs, uint16_t seg, uint16_t off)
 	memcpy(regs, &x86bios_emu.x86, sizeof(*regs));
 	mtx_unlock_spin(&x86bios_lock);
 
-	if (bootverbose)
+	if (x86bios_trace_call)
 		printf("Exiting 0x%05x (ax=0x%04x bx=0x%04x "
 		    "cx=0x%04x dx=0x%04x es=0x%04x di=0x%04x)\n",
 		    (seg << 4) + off, regs->R_AX, regs->R_BX, regs->R_CX,
@@ -351,7 +362,7 @@ x86bios_intr(struct x86regs *regs, int intno)
 	if (x86bios_map == NULL)
 		return;
 
-	if (bootverbose)
+	if (x86bios_trace_int)
 		printf("Calling int 0x%x (ax=0x%04x bx=0x%04x "
 		    "cx=0x%04x dx=0x%04x es=0x%04x di=0x%04x)\n",
 		    intno, regs->R_AX, regs->R_BX, regs->R_CX,
@@ -363,7 +374,7 @@ x86bios_intr(struct x86regs *regs, int intno)
 	memcpy(regs, &x86bios_emu.x86, sizeof(*regs));
 	mtx_unlock_spin(&x86bios_lock);
 
-	if (bootverbose)
+	if (x86bios_trace_int)
 		printf("Exiting int 0x%x (ax=0x%04x bx=0x%04x "
 		    "cx=0x%04x dx=0x%04x es=0x%04x di=0x%04x)\n",
 		    intno, regs->R_AX, regs->R_BX, regs->R_CX,
diff --git a/sys/conf/Makefile.arm b/sys/conf/Makefile.arm
index 310c54d4287..66adea1d75a 100644
--- a/sys/conf/Makefile.arm
+++ b/sys/conf/Makefile.arm
@@ -73,7 +73,7 @@ FILES_CPU_FUNC =	$S/$M/$M/cpufunc_asm_arm7tdmi.S \
 	$S/$M/$M/cpufunc_asm_sa1.S $S/$M/$M/cpufunc_asm_arm10.S \
 	$S/$M/$M/cpufunc_asm_xscale.S $S/$M/$M/cpufunc_asm.S \
 	$S/$M/$M/cpufunc_asm_xscale_c3.S $S/$M/$M/cpufunc_asm_armv5_ec.S \
-	$S/$M/$M/cpufunc_asm_sheeva.S
+	$S/$M/$M/cpufunc_asm_sheeva.S $S/$M/$M/cpufunc_asm_fa526.S
 KERNEL_EXTRA=trampoline
 KERNEL_EXTRA_INSTALL=kernel.gz.tramp
 trampoline: ${KERNEL_KO}.tramp
diff --git a/sys/conf/NOTES b/sys/conf/NOTES
index a5b5f5d88b1..51abbf995f7 100644
--- a/sys/conf/NOTES
+++ b/sys/conf/NOTES
@@ -1410,8 +1410,8 @@ options 	SC_NO_SUSPEND_VTYSWITCH
 #	0x100	Probe for a keyboard device periodically if one is not present
 
 # Enable experimental features of the syscons terminal emulator (teken).
+options 	TEKEN_CONS25		# cons25-style terminal emulation
 options 	TEKEN_UTF8		# UTF-8 output handling
-options 	TEKEN_XTERM		# xterm-style terminal emulation
 
 #
 # Optional devices:
@@ -1718,9 +1718,15 @@ hint.ata.1.irq="15"
 #			else the device numbers are dynamically allocated.
 # ATA_REQUEST_TIMEOUT:	the number of seconds to wait for an ATA request
 #			before timing out.
+# ATA_CAM:		Turn ata(4) subsystem controller drivers into cam(4)
+#			interface modules. This deprecates all ata(4)
+#			peripheral device drivers (atadisk, ataraid, atapicd,
+#			atapifd. atapist, atapicam) and all user-level APIs.
+#			cam(4) drivers and APIs will be connected instead.
 
 options 	ATA_STATIC_ID
 #options 	ATA_REQUEST_TIMEOUT=10
+#options 	ATA_CAM
 
 #
 # Standard floppy disk controllers and floppy tapes, supports
@@ -1806,14 +1812,47 @@ device		puc
 #
 # Network interfaces:
 #
-# MII bus support is required for some PCI 10/100 ethernet NICs,
+# MII bus support is required for many PCI Ethernet NICs,
 # namely those which use MII-compliant transceivers or implement
-# transceiver control interfaces that operate like an MII. Adding
+# transceiver control interfaces that operate like an MII.  Adding
 # "device miibus" to the kernel config pulls in support for
 # the generic miibus API and all of the PHY drivers, including a
 # generic one for PHYs that aren't specifically handled by an
-# individual driver.
-device		miibus
+# individual driver.  Support for specific PHYs may be built by adding
+# "device mii" then adding the appropriate PHY driver.
+device  	miibus		# MII support including all PHYs
+device  	mii		# Minimal MII support
+
+device  	acphy		# Altima Communications AC101
+device  	amphy		# AMD AM79c873 / Davicom DM910{1,2}
+device  	atphy		# Attansic/Atheros F1
+device  	axphy		# Asix Semiconductor AX88x9x
+device  	bmtphy		# Broadcom BCM5201/BCM5202 and 3Com 3c905C
+device  	brgphy		# Broadcom BCM54xx/57xx 1000baseTX
+device  	ciphy		# Cicada/Vitesse CS/VSC8xxx
+device  	e1000phy	# Marvell 88E1000 1000/100/10-BT
+device  	exphy		# 3Com internal PHY
+device  	gentbi		# Generic 10-bit 1000BASE-{LX,SX} fiber ifaces
+device  	icsphy		# ICS ICS1889-1893
+device  	inphy		# Intel 82553/82555
+device  	ip1000phy	# IC Plus IP1000A/IP1001
+device  	jmphy		# JMicron JMP211/JMP202
+device  	lxtphy		# Level One LXT-970
+device  	mlphy		# Micro Linear 6692
+device  	nsgphy		# NatSemi DP8361/DP83865/DP83891
+device  	nsphy		# NatSemi DP83840A
+device  	nsphyter	# NatSemi DP83843/DP83815
+device  	pnaphy		# HomePNA
+device  	qsphy		# Quality Semiconductor QS6612
+device  	rgephy		# RealTek 8169S/8110S/8211B/8211C
+device  	rlphy		# RealTek 8139
+device  	rlswitch	# RealTek 8305
+device  	ruephy		# RealTek RTL8150
+device  	smcphy		# SMSC LAN91C111
+device  	tdkphy		# TDK 89Q2120
+device  	tlphy		# Texas Instruments ThunderLAN
+device  	truephy		# LSI TruePHY
+device		xmphy		# XaQti XMAC II
 
 # an:   Aironet 4500/4800 802.11 wireless adapters. Supports the PCMCIA,
 #       PCI and ISA varieties.
@@ -1823,6 +1862,7 @@ device		miibus
 #       L1 PCI express gigabit ethernet controllers.
 # alc:  Support for Atheros AR8131/AR8132 PCIe ethernet controllers.
 # ale:  Support for Atheros AR8121/AR8113/AR8114 PCIe ethernet controllers.
+# ath:  Atheros a/b/g WiFi adapters (requires ath_hal and wlan)
 # bce:	Broadcom NetXtreme II (BCM5706/BCM5708) PCI/PCIe Gigabit Ethernet
 #       adapters.
 # bfe:	Broadcom BCM4401 Ethernet adapter.
@@ -1881,6 +1921,7 @@ device		miibus
 #	pcn(4) driver is left out of the kernel. The le(4) driver does not
 #	support the additional features like the MII bus and burst mode of
 #	the PCnet-FAST and greater chipsets though.
+# ral:	Ralink Technology IEEE 802.11 wireless adapter
 # re:   RealTek 8139C+/8169/816xS/811xS/8101E PCI/PCIe Ethernet adapter
 # rl:   Support for PCI fast ethernet adapters based on the RealTek 8129/8139
 #       chipset.  Note that the RealTek driver defaults to using programmed
@@ -2000,7 +2041,6 @@ device		wb		# Winbond W89C840F
 device		xl		# 3Com 3c90x (``Boomerang'', ``Cyclone'')
 
 # PCI Ethernet NICs.
-device		bwi		# Broadcom BCM430* BCM431*
 device		de		# DEC/Intel DC21x4x (``Tulip'')
 device		em		# Intel Pro/1000 Gigabit Ethernet
 device		igb		# Intel Pro/1000 PCIE Gigabit Ethernet
@@ -2019,6 +2059,26 @@ device		fpa
 # PCI WAN adapters.
 device		lmc
 
+# PCI IEEE 802.11 Wireless NICs
+device		ath		# Atheros pci/cardbus NIC's
+device		ath_hal		# pci/cardbus chip support
+#device		ath_ar5210	# AR5210 chips
+#device		ath_ar5211	# AR5211 chips
+#device		ath_ar5212	# AR5212 chips
+#device		ath_rf2413
+#device		ath_rf2417
+#device		ath_rf2425
+#device		ath_rf5111
+#device		ath_rf5112
+#device		ath_rf5413
+#device		ath_ar5416	# AR5416 chips
+options 	AH_SUPPORT_AR5416	# enable AR5416 tx/rx descriptors
+#device		ath_ar9160	# AR9160 chips
+#device		ath_ar9280	# AR9280 chips
+device		ath_rate_sample	# SampleRate tx rate control for ath
+device		bwi		# Broadcom BCM430* BCM431*
+device		ral		# Ralink Technology RT2500 wireless NICs.
+
 # Use "private" jumbo buffers allocated exclusively for the ti(4) driver.
 # This option is incompatible with the TI_JUMBO_HDRSPLIT option below.
 #options 	TI_PRIVATE_JUMBOS
diff --git a/sys/conf/files b/sys/conf/files
index 284a84e2452..e93c384dc80 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -112,12 +112,12 @@ cam/cam_sim.c			optional scbus
 cam/cam_xpt.c			optional scbus
 cam/ata/ata_all.c		optional scbus
 cam/ata/ata_xpt.c		optional scbus
+cam/ata/ata_pmp.c		optional scbus
 cam/scsi/scsi_xpt.c		optional scbus
 cam/scsi/scsi_all.c		optional scbus
 cam/scsi/scsi_cd.c		optional cd
 cam/scsi/scsi_ch.c		optional ch
-cam/ata/ata_da.c		optional da
-cam/ata/ata_pmp.c		optional da
+cam/ata/ata_da.c		optional ada | da
 cam/scsi/scsi_da.c		optional da
 cam/scsi/scsi_low.c		optional ct | ncv | nsp | stg
 cam/scsi/scsi_low_pisa.c	optional ct | ncv | nsp | stg
@@ -171,107 +171,108 @@ contrib/dev/acpica/dispatcher/dswexec.c		optional acpi
 contrib/dev/acpica/dispatcher/dswload.c		optional acpi
 contrib/dev/acpica/dispatcher/dswscope.c	optional acpi
 contrib/dev/acpica/dispatcher/dswstate.c	optional acpi
-contrib/dev/acpica/events/evevent.c	optional acpi
-contrib/dev/acpica/events/evgpe.c	optional acpi
-contrib/dev/acpica/events/evgpeblk.c	optional acpi
-contrib/dev/acpica/events/evmisc.c	optional acpi
-contrib/dev/acpica/events/evregion.c	optional acpi
-contrib/dev/acpica/events/evrgnini.c	optional acpi
-contrib/dev/acpica/events/evsci.c	optional acpi
-contrib/dev/acpica/events/evxface.c	optional acpi
-contrib/dev/acpica/events/evxfevnt.c	optional acpi
-contrib/dev/acpica/events/evxfregn.c	optional acpi
-contrib/dev/acpica/executer/exconfig.c	optional acpi
-contrib/dev/acpica/executer/exconvrt.c	optional acpi
-contrib/dev/acpica/executer/excreate.c	optional acpi
-contrib/dev/acpica/executer/exdump.c	optional acpi
-contrib/dev/acpica/executer/exfield.c	optional acpi
-contrib/dev/acpica/executer/exfldio.c	optional acpi
-contrib/dev/acpica/executer/exmisc.c	optional acpi
-contrib/dev/acpica/executer/exmutex.c	optional acpi
-contrib/dev/acpica/executer/exnames.c	optional acpi
-contrib/dev/acpica/executer/exoparg1.c	optional acpi
-contrib/dev/acpica/executer/exoparg2.c	optional acpi
-contrib/dev/acpica/executer/exoparg3.c	optional acpi
-contrib/dev/acpica/executer/exoparg6.c	optional acpi
-contrib/dev/acpica/executer/exprep.c	optional acpi
-contrib/dev/acpica/executer/exregion.c	optional acpi
-contrib/dev/acpica/executer/exresnte.c	optional acpi
-contrib/dev/acpica/executer/exresolv.c	optional acpi
-contrib/dev/acpica/executer/exresop.c	optional acpi
-contrib/dev/acpica/executer/exstore.c	optional acpi
-contrib/dev/acpica/executer/exstoren.c	optional acpi
-contrib/dev/acpica/executer/exstorob.c	optional acpi
-contrib/dev/acpica/executer/exsystem.c	optional acpi
-contrib/dev/acpica/executer/exutils.c	optional acpi
-contrib/dev/acpica/hardware/hwacpi.c	optional acpi
-contrib/dev/acpica/hardware/hwgpe.c	optional acpi
-contrib/dev/acpica/hardware/hwregs.c	optional acpi
-contrib/dev/acpica/hardware/hwsleep.c	optional acpi
-contrib/dev/acpica/hardware/hwtimer.c	optional acpi
-contrib/dev/acpica/hardware/hwvalid.c	optional acpi
-contrib/dev/acpica/hardware/hwxface.c	optional acpi
-contrib/dev/acpica/namespace/nsaccess.c	optional acpi
-contrib/dev/acpica/namespace/nsalloc.c	optional acpi
-contrib/dev/acpica/namespace/nsdump.c	optional acpi
-contrib/dev/acpica/namespace/nseval.c	optional acpi
-contrib/dev/acpica/namespace/nsinit.c	optional acpi
-contrib/dev/acpica/namespace/nsload.c	optional acpi
-contrib/dev/acpica/namespace/nsnames.c	optional acpi
-contrib/dev/acpica/namespace/nsobject.c	optional acpi
-contrib/dev/acpica/namespace/nsparse.c	optional acpi
-contrib/dev/acpica/namespace/nspredef.c	optional acpi
-contrib/dev/acpica/namespace/nsrepair.c	optional acpi
-contrib/dev/acpica/namespace/nssearch.c	optional acpi
-contrib/dev/acpica/namespace/nsutils.c	optional acpi
-contrib/dev/acpica/namespace/nswalk.c	optional acpi
-contrib/dev/acpica/namespace/nsxfeval.c	optional acpi
-contrib/dev/acpica/namespace/nsxfname.c	optional acpi
-contrib/dev/acpica/namespace/nsxfobj.c	optional acpi
-contrib/dev/acpica/parser/psargs.c	optional acpi
-contrib/dev/acpica/parser/psloop.c	optional acpi
-contrib/dev/acpica/parser/psopcode.c	optional acpi
-contrib/dev/acpica/parser/psparse.c	optional acpi
-contrib/dev/acpica/parser/psscope.c	optional acpi
-contrib/dev/acpica/parser/pstree.c	optional acpi
-contrib/dev/acpica/parser/psutils.c	optional acpi
-contrib/dev/acpica/parser/pswalk.c	optional acpi
-contrib/dev/acpica/parser/psxface.c	optional acpi
-contrib/dev/acpica/resources/rsaddr.c	optional acpi
-contrib/dev/acpica/resources/rscalc.c	optional acpi
-contrib/dev/acpica/resources/rscreate.c	optional acpi
-contrib/dev/acpica/resources/rsdump.c	optional acpi
-contrib/dev/acpica/resources/rsinfo.c	optional acpi
-contrib/dev/acpica/resources/rsio.c	optional acpi
-contrib/dev/acpica/resources/rsirq.c	optional acpi
-contrib/dev/acpica/resources/rslist.c	optional acpi
-contrib/dev/acpica/resources/rsmemory.c	optional acpi
-contrib/dev/acpica/resources/rsmisc.c	optional acpi
-contrib/dev/acpica/resources/rsutils.c	optional acpi
-contrib/dev/acpica/resources/rsxface.c	optional acpi
-contrib/dev/acpica/tables/tbfadt.c	optional acpi
-contrib/dev/acpica/tables/tbfind.c	optional acpi
-contrib/dev/acpica/tables/tbinstal.c	optional acpi
-contrib/dev/acpica/tables/tbutils.c	optional acpi
-contrib/dev/acpica/tables/tbxface.c	optional acpi
-contrib/dev/acpica/tables/tbxfroot.c	optional acpi
-contrib/dev/acpica/utilities/utalloc.c	optional acpi
-contrib/dev/acpica/utilities/utcache.c	optional acpi
-contrib/dev/acpica/utilities/utcopy.c	optional acpi
-contrib/dev/acpica/utilities/utdebug.c	optional acpi
-contrib/dev/acpica/utilities/utdelete.c	optional acpi
-contrib/dev/acpica/utilities/uteval.c	optional acpi
-contrib/dev/acpica/utilities/utglobal.c	optional acpi
-contrib/dev/acpica/utilities/utids.c	optional acpi
-contrib/dev/acpica/utilities/utinit.c	optional acpi
-contrib/dev/acpica/utilities/utlock.c	optional acpi
-contrib/dev/acpica/utilities/utmath.c	optional acpi
-contrib/dev/acpica/utilities/utmisc.c	optional acpi
-contrib/dev/acpica/utilities/utmutex.c	optional acpi
-contrib/dev/acpica/utilities/utobject.c	optional acpi
-contrib/dev/acpica/utilities/utresrc.c	optional acpi
-contrib/dev/acpica/utilities/utstate.c	optional acpi
-contrib/dev/acpica/utilities/utxface.c	optional acpi
+contrib/dev/acpica/events/evevent.c		optional acpi
+contrib/dev/acpica/events/evgpe.c		optional acpi
+contrib/dev/acpica/events/evgpeblk.c		optional acpi
+contrib/dev/acpica/events/evmisc.c		optional acpi
+contrib/dev/acpica/events/evregion.c		optional acpi
+contrib/dev/acpica/events/evrgnini.c		optional acpi
+contrib/dev/acpica/events/evsci.c		optional acpi
+contrib/dev/acpica/events/evxface.c		optional acpi
+contrib/dev/acpica/events/evxfevnt.c		optional acpi
+contrib/dev/acpica/events/evxfregn.c		optional acpi
+contrib/dev/acpica/executer/exconfig.c		optional acpi
+contrib/dev/acpica/executer/exconvrt.c		optional acpi
+contrib/dev/acpica/executer/excreate.c		optional acpi
+contrib/dev/acpica/executer/exdump.c		optional acpi
+contrib/dev/acpica/executer/exfield.c		optional acpi
+contrib/dev/acpica/executer/exfldio.c		optional acpi
+contrib/dev/acpica/executer/exmisc.c		optional acpi
+contrib/dev/acpica/executer/exmutex.c		optional acpi
+contrib/dev/acpica/executer/exnames.c		optional acpi
+contrib/dev/acpica/executer/exoparg1.c		optional acpi
+contrib/dev/acpica/executer/exoparg2.c		optional acpi
+contrib/dev/acpica/executer/exoparg3.c		optional acpi
+contrib/dev/acpica/executer/exoparg6.c		optional acpi
+contrib/dev/acpica/executer/exprep.c		optional acpi
+contrib/dev/acpica/executer/exregion.c		optional acpi
+contrib/dev/acpica/executer/exresnte.c		optional acpi
+contrib/dev/acpica/executer/exresolv.c		optional acpi
+contrib/dev/acpica/executer/exresop.c		optional acpi
+contrib/dev/acpica/executer/exstore.c		optional acpi
+contrib/dev/acpica/executer/exstoren.c		optional acpi
+contrib/dev/acpica/executer/exstorob.c		optional acpi
+contrib/dev/acpica/executer/exsystem.c		optional acpi
+contrib/dev/acpica/executer/exutils.c		optional acpi
+contrib/dev/acpica/hardware/hwacpi.c		optional acpi
+contrib/dev/acpica/hardware/hwgpe.c		optional acpi
+contrib/dev/acpica/hardware/hwregs.c		optional acpi
+contrib/dev/acpica/hardware/hwsleep.c		optional acpi
+contrib/dev/acpica/hardware/hwtimer.c		optional acpi
+contrib/dev/acpica/hardware/hwvalid.c		optional acpi
+contrib/dev/acpica/hardware/hwxface.c		optional acpi
+contrib/dev/acpica/namespace/nsaccess.c		optional acpi
+contrib/dev/acpica/namespace/nsalloc.c		optional acpi
+contrib/dev/acpica/namespace/nsdump.c		optional acpi
+contrib/dev/acpica/namespace/nseval.c		optional acpi
+contrib/dev/acpica/namespace/nsinit.c		optional acpi
+contrib/dev/acpica/namespace/nsload.c		optional acpi
+contrib/dev/acpica/namespace/nsnames.c		optional acpi
+contrib/dev/acpica/namespace/nsobject.c		optional acpi
+contrib/dev/acpica/namespace/nsparse.c		optional acpi
+contrib/dev/acpica/namespace/nspredef.c		optional acpi
+contrib/dev/acpica/namespace/nsrepair.c		optional acpi
+contrib/dev/acpica/namespace/nsrepair2.c	optional acpi
+contrib/dev/acpica/namespace/nssearch.c		optional acpi
+contrib/dev/acpica/namespace/nsutils.c		optional acpi
+contrib/dev/acpica/namespace/nswalk.c		optional acpi
+contrib/dev/acpica/namespace/nsxfeval.c		optional acpi
+contrib/dev/acpica/namespace/nsxfname.c		optional acpi
+contrib/dev/acpica/namespace/nsxfobj.c		optional acpi
+contrib/dev/acpica/parser/psargs.c		optional acpi
+contrib/dev/acpica/parser/psloop.c		optional acpi
+contrib/dev/acpica/parser/psopcode.c		optional acpi
+contrib/dev/acpica/parser/psparse.c		optional acpi
+contrib/dev/acpica/parser/psscope.c		optional acpi
+contrib/dev/acpica/parser/pstree.c		optional acpi
+contrib/dev/acpica/parser/psutils.c		optional acpi
+contrib/dev/acpica/parser/pswalk.c		optional acpi
+contrib/dev/acpica/parser/psxface.c		optional acpi
+contrib/dev/acpica/resources/rsaddr.c		optional acpi
+contrib/dev/acpica/resources/rscalc.c		optional acpi
+contrib/dev/acpica/resources/rscreate.c		optional acpi
+contrib/dev/acpica/resources/rsdump.c		optional acpi
+contrib/dev/acpica/resources/rsinfo.c		optional acpi
+contrib/dev/acpica/resources/rsio.c		optional acpi
+contrib/dev/acpica/resources/rsirq.c		optional acpi
+contrib/dev/acpica/resources/rslist.c		optional acpi
+contrib/dev/acpica/resources/rsmemory.c		optional acpi
+contrib/dev/acpica/resources/rsmisc.c		optional acpi
+contrib/dev/acpica/resources/rsutils.c		optional acpi
+contrib/dev/acpica/resources/rsxface.c		optional acpi
+contrib/dev/acpica/tables/tbfadt.c		optional acpi
+contrib/dev/acpica/tables/tbfind.c		optional acpi
+contrib/dev/acpica/tables/tbinstal.c		optional acpi
+contrib/dev/acpica/tables/tbutils.c		optional acpi
+contrib/dev/acpica/tables/tbxface.c		optional acpi
+contrib/dev/acpica/tables/tbxfroot.c		optional acpi
+contrib/dev/acpica/utilities/utalloc.c		optional acpi
+contrib/dev/acpica/utilities/utcache.c		optional acpi
+contrib/dev/acpica/utilities/utcopy.c		optional acpi
+contrib/dev/acpica/utilities/utdebug.c		optional acpi
+contrib/dev/acpica/utilities/utdelete.c		optional acpi
+contrib/dev/acpica/utilities/uteval.c		optional acpi
+contrib/dev/acpica/utilities/utglobal.c		optional acpi
+contrib/dev/acpica/utilities/utids.c		optional acpi
+contrib/dev/acpica/utilities/utinit.c		optional acpi
+contrib/dev/acpica/utilities/utlock.c		optional acpi
+contrib/dev/acpica/utilities/utmath.c		optional acpi
+contrib/dev/acpica/utilities/utmisc.c		optional acpi
+contrib/dev/acpica/utilities/utmutex.c		optional acpi
+contrib/dev/acpica/utilities/utobject.c		optional acpi
+contrib/dev/acpica/utilities/utresrc.c		optional acpi
+contrib/dev/acpica/utilities/utstate.c		optional acpi
+contrib/dev/acpica/utilities/utxface.c		optional acpi
 contrib/ipfilter/netinet/fil.c	optional ipfilter inet \
 	compile-with "${NORMAL_C} -I$S/contrib/ipfilter"
 contrib/ipfilter/netinet/ip_auth.c optional ipfilter inet \
@@ -532,7 +533,6 @@ dev/ata/chipsets/ata-sis.c	optional ata pci | atasis
 dev/ata/chipsets/ata-via.c	optional ata pci | atavia
 dev/ata/ata-disk.c		optional atadisk
 dev/ata/ata-raid.c		optional ataraid
-dev/ata/ata-usb.c		optional atausb usb
 dev/ata/atapi-cd.c		optional atapicd
 dev/ata/atapi-fd.c		optional atapifd
 dev/ata/atapi-tape.c		optional atapist
@@ -1083,6 +1083,20 @@ iwi_monitor.fw			optional iwimonitorfw | iwifw		\
 	no-obj no-implicit-rule						\
 	clean		"iwi_monitor.fw"
 dev/iwn/if_iwn.c		optional iwn
+iwn1000fw.c			optional iwn1000fw | iwnfw		\
+	compile-with	"${AWK} -f $S/tools/fw_stub.awk iwn1000.fw:iwn1000fw -miwn1000fw -c${.TARGET}" \
+	no-implicit-rule before-depend local				\
+	clean		"iwn1000fw.c"
+iwn1000fw.fwo			optional iwn1000fw | iwnfw		\
+	dependency	"iwn1000.fw"					\
+	compile-with	"${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwn1000.fw" \
+	no-implicit-rule						\
+	clean		"iwn1000fw.fwo"
+iwn1000.fw			optional iwn1000fw | iwnfw		\
+	dependency	".PHONY"					\
+	compile-with	"uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-1000-128.50.3.1.fw.uu" \
+	no-obj no-implicit-rule						\
+	clean		"iwn1000.fw"
 iwn4965fw.c			optional iwn4965fw | iwnfw		\
 	compile-with	"${AWK} -f $S/tools/fw_stub.awk iwn4965.fw:iwn4965fw -miwn4965fw -c${.TARGET}" \
 	no-implicit-rule before-depend local				\
@@ -1094,7 +1108,7 @@ iwn4965fw.fwo			optional iwn4965fw | iwnfw		\
 	clean		"iwn4965fw.fwo"
 iwn4965.fw			optional iwn4965fw | iwnfw		\
 	dependency	".PHONY"					\
-	compile-with	"uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-4965-228.57.2.23.fw.uu" \
+	compile-with	"uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-4965-228.61.2.24.fw.uu" \
 	no-obj no-implicit-rule						\
 	clean		"iwn4965.fw"
 iwn5000fw.c			optional iwn5000fw | iwnfw		\
@@ -1108,7 +1122,7 @@ iwn5000fw.fwo		optional iwn5000fw | iwnfw			\
 	clean		"iwn5000fw.fwo"
 iwn5000.fw			optional iwn5000fw | iwnfw		\
 	dependency	".PHONY"					\
-	compile-with	"uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-5000-5.4.A.11.fw.uu"	\
+	compile-with	"uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-5000-8.24.2.12.fw.uu"	\
 	no-obj no-implicit-rule						\
 	clean		"iwn5000.fw"
 iwn5150fw.c			optional iwn5150fw | iwnfw		\
@@ -1125,6 +1139,20 @@ iwn5150.fw			optional iwn5150fw | iwnfw		\
 	compile-with	"uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-5150-8.24.2.2.fw.uu" \
 	no-obj no-implicit-rule						\
 	clean		"iwn5150.fw"
+iwn6000fw.c			optional iwn6000fw | iwnfw		\
+	compile-with	"${AWK} -f $S/tools/fw_stub.awk iwn6000.fw:iwn6000fw -miwn6000fw -c${.TARGET}" \
+	no-implicit-rule before-depend local				\
+	clean		"iwn6000fw.c"
+iwn6000fw.fwo			optional iwn6000fw | iwnfw		\
+	dependency	"iwn6000.fw"					\
+	compile-with	"${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwn6000.fw" \
+	no-implicit-rule						\
+	clean		"iwn6000fw.fwo"
+iwn6000.fw			optional iwn6000fw | iwnfw		\
+	dependency	".PHONY"					\
+	compile-with	"uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-6000-9.176.4.1.fw.uu" \
+	no-obj no-implicit-rule						\
+	clean		"iwn6000.fw"
 dev/ixgb/if_ixgb.c		optional ixgb
 dev/ixgb/ixgb_ee.c		optional ixgb
 dev/ixgb/ixgb_hw.c		optional ixgb
@@ -1657,8 +1685,8 @@ dev/usb/net/if_cue.c		optional cue
 dev/usb/net/if_kue.c		optional kue
 dev/usb/net/if_rue.c		optional rue
 dev/usb/net/if_udav.c		optional udav
-dev/usb/net/usb_ethernet.c \
-	optional (aue | axe | cdce | cue | kue | rue | udav)
+dev/usb/net/usb_ethernet.c	optional aue | axe | cdce | cue | kue | rue | \
+					 udav
 #
 # USB WLAN drivers
 #
@@ -1689,8 +1717,11 @@ dev/usb/serial/uplcom.c		optional uplcom
 dev/usb/serial/uslcom.c		optional uslcom
 dev/usb/serial/uvisor.c		optional uvisor
 dev/usb/serial/uvscom.c		optional uvscom
-dev/usb/serial/usb_serial.c 	optional ucom | \
-	(u3g | uark | ubsa | ubser | uchcom | ucycom | ufoma | uftdi | ugensa | uipaq | ulpt | umct | umodem | umoscom | uplcom | uslcom | uvisor | uvscom)
+dev/usb/serial/usb_serial.c 	optional ucom | u3g | uark | ubsa | ubser | \
+					 uchcom | ucycom | ufoma | uftdi | \
+					 ugensa | uipaq | ulpt | umct | \
+					 umodem | umoscom | uplcom | uslcom | \
+					 uvisor | uvscom
 #
 # USB misc drivers
 #
@@ -2194,6 +2225,7 @@ libkern/iconv_converter_if.m	optional libiconv
 libkern/iconv_xlat.c		optional libiconv
 libkern/iconv_xlat16.c		optional libiconv
 libkern/index.c			standard
+libkern/inet_aton.c		standard
 libkern/inet_ntoa.c		standard
 libkern/mcount.c		optional profiling-routine
 libkern/memcmp.c		standard
@@ -2424,7 +2456,11 @@ netinet/ip_encap.c		optional inet | inet6
 netinet/ip_fastfwd.c		optional inet
 netinet/ipfw/ip_fw2.c		optional inet ipfirewall \
 	compile-with "${NORMAL_C} -I$S/contrib/pf"
+netinet/ipfw/ip_fw_dynamic.c	optional inet ipfirewall
+netinet/ipfw/ip_fw_log.c	optional inet ipfirewall
 netinet/ipfw/ip_fw_pfil.c	optional inet ipfirewall
+netinet/ipfw/ip_fw_sockopt.c	optional inet ipfirewall
+netinet/ipfw/ip_fw_table.c	optional inet ipfirewall
 netinet/ipfw/ip_fw_nat.c	optional inet ipfirewall_nat
 netinet/ip_icmp.c		optional inet
 netinet/ip_input.c		optional inet
diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64
index fbf4d2856cb..a04d49e64f9 100644
--- a/sys/conf/files.amd64
+++ b/sys/conf/files.amd64
@@ -151,6 +151,7 @@ dev/agp/agp_amd64.c		optional	agp
 dev/agp/agp_i810.c		optional	agp
 dev/agp/agp_intel.c		optional	agp
 dev/agp/agp_via.c		optional	agp
+dev/amdsbwd/amdsbwd.c		optional	amdsbwd
 dev/amdtemp/amdtemp.c		optional	amdtemp
 dev/arcmsr/arcmsr.c		optional	arcmsr pci
 dev/asmc/asmc.c			optional	asmc isa
diff --git a/sys/conf/files.arm b/sys/conf/files.arm
index be0f9959f50..c03cea4e2af 100644
--- a/sys/conf/files.arm
+++ b/sys/conf/files.arm
@@ -47,6 +47,7 @@ arm/arm/vm_machdep.c		standard
 arm/fpe-arm/armfpe_glue.S	optional	armfpe
 arm/fpe-arm/armfpe_init.c	optional	armfpe
 arm/fpe-arm/armfpe.S		optional	armfpe
+dev/hwpmc/hwpmc_arm.c		optional	hwpmc
 geom/geom_bsd.c			optional	geom_bsd
 geom/geom_bsd_enc.c		optional	geom_bsd
 geom/geom_mbr.c			optional	geom_mbr
diff --git a/sys/conf/files.i386 b/sys/conf/files.i386
index 839955bfd3f..5095f4ee39c 100644
--- a/sys/conf/files.i386
+++ b/sys/conf/files.i386
@@ -127,6 +127,7 @@ dev/agp/agp_nvidia.c		optional agp
 dev/agp/agp_sis.c		optional agp
 dev/agp/agp_via.c		optional agp
 dev/aic/aic_isa.c		optional aic isa
+dev/amdsbwd/amdsbwd.c		optional amdsbwd
 dev/amdtemp/amdtemp.c		optional amdtemp
 dev/arcmsr/arcmsr.c		optional arcmsr pci
 dev/asmc/asmc.c			optional asmc isa
diff --git a/sys/conf/files.ia64 b/sys/conf/files.ia64
index 9b095f4209a..e56faae6cc6 100644
--- a/sys/conf/files.ia64
+++ b/sys/conf/files.ia64
@@ -45,8 +45,6 @@ contrib/ia64/libuwx/src/uwx_uinfo.c		standard
 contrib/ia64/libuwx/src/uwx_utable.c		standard
 crypto/blowfish/bf_enc.c	optional	crypto | ipsec
 crypto/des/des_enc.c		optional	crypto | ipsec | netsmb
-dev/advansys/adv_isa.c		optional	adv isa
-dev/aic/aic_isa.c		optional	aic isa
 dev/atkbdc/atkbd.c		optional	atkbd atkbdc
 dev/atkbdc/atkbd_atkbdc.c	optional	atkbd atkbdc
 dev/atkbdc/atkbdc.c		optional	atkbdc
@@ -74,6 +72,7 @@ ia64/ia32/ia32_reg.c		optional	compat_ia32
 ia64/ia32/ia32_signal.c		optional	compat_ia32
 ia64/ia32/ia32_trap.c		optional	compat_ia32
 ia64/ia64/autoconf.c		standard
+ia64/ia64/bus_machdep.c		standard
 ia64/ia64/busdma_machdep.c	standard
 ia64/ia64/clock.c		standard
 ia64/ia64/context.S		standard
diff --git a/sys/conf/files.sun4v b/sys/conf/files.sun4v
index d83b0a29d29..5964f5659fc 100644
--- a/sys/conf/files.sun4v
+++ b/sys/conf/files.sun4v
@@ -35,6 +35,10 @@ libkern/ffsl.c			standard
 libkern/fls.c			standard
 libkern/flsl.c			standard
 libkern/memmove.c		standard
+sparc64/ebus/ebus.c		optional	ebus
+sparc64/isa/isa.c		optional	isa
+sparc64/isa/isa_dma.c		optional	isa
+sparc64/isa/ofw_isa.c		optional	ebus | isa
 sparc64/sparc64/autoconf.c	standard
 sun4v/sun4v/bus_machdep.c	standard
 sun4v/sun4v/clock.c		standard
diff --git a/sys/conf/options b/sys/conf/options
index dc35aa09eda..75f69c272e1 100644
--- a/sys/conf/options
+++ b/sys/conf/options
@@ -351,6 +351,7 @@ ISCSI_INITIATOR_DEBUG	opt_iscsi_initiator.h
 ATA_STATIC_ID		opt_ata.h
 ATA_NOPCI		opt_ata.h
 ATA_REQUEST_TIMEOUT	opt_ata.h
+ATA_CAM			opt_ata.h
 
 # Net stuff.
 ACCEPT_FILTER_DATA
@@ -732,8 +733,8 @@ SC_RENDER_DEBUG		opt_syscons.h
 SC_TWOBUTTON_MOUSE	opt_syscons.h
 
 # teken terminal emulator options
+TEKEN_CONS25		opt_teken.h
 TEKEN_UTF8		opt_teken.h
-TEKEN_XTERM		opt_teken.h
 
 # options for printf
 PRINTF_BUFR_SIZE	opt_printf.h
diff --git a/sys/conf/options.arm b/sys/conf/options.arm
index b3cc09731c8..922d38fda0c 100644
--- a/sys/conf/options.arm
+++ b/sys/conf/options.arm
@@ -36,3 +36,4 @@ VERBOSE_INIT_ARM	opt_global.h
 AT91_BWCT		opt_at91.h
 AT91_TSC		opt_at91.h
 AT91_KWIKBYTE		opt_at91.h
+CPU_FA526		opt_global.h
diff --git a/sys/conf/options.sparc64 b/sys/conf/options.sparc64
index ba5ab9fc85b..bc6af5a18a5 100644
--- a/sys/conf/options.sparc64
+++ b/sys/conf/options.sparc64
@@ -8,6 +8,8 @@ SUN4U			opt_global.h
 
 ATKBD_DFLT_KEYMAP	opt_atkbd.h
 
+FIRE_DEBUG		opt_fire.h
+
 # Debug IOMMU inserts/removes using diagnostic accesses.  This is very loud.
 IOMMU_DIAG		opt_iommu.h
 
diff --git a/sys/contrib/dev/acpica/changes.txt b/sys/contrib/dev/acpica/changes.txt
index 9e8ff8961a7..d8127f24da8 100644
--- a/sys/contrib/dev/acpica/changes.txt
+++ b/sys/contrib/dev/acpica/changes.txt
@@ -1,3 +1,143 @@
+----------------------------------------
+14 December 2009. Summary of changes for version 20091214:
+
+This release is available at www.acpica.org/downloads
+
+1) ACPI CA Core Subsystem:
+
+Enhanced automatic data type conversions for predefined name repairs. This 
+change expands the automatic repairs/conversions for predefined name return 
+values to make Integers, Strings, and Buffers fully interchangeable. Also, a 
+Buffer can be converted to a Package of Integers if necessary. The nsrepair.c 
+module was completely restructured. Lin Ming, Bob Moore.
+
+Implemented automatic removal of null package elements during predefined name 
+repairs. This change will automatically remove embedded and trailing NULL 
+package elements from returned package objects that are defined to contain a 
+variable number of sub-packages. The driver is then presented with a package 
+with no null elements to deal with. ACPICA BZ 819.
+
+Implemented a repair for the predefined _FDE and _GTM names. The expected 
+return value for both names is a Buffer of 5 DWORDs. This repair fixes two 
+possible problems (both seen in the field), where a package of integers is 
+returned, or a buffer of BYTEs is returned. With assistance from Jung-uk Kim.
+
+Implemented additional module-level code support. This change will properly 
+execute module-level code that is not at the root of the namespace (under a 
+Device object, etc.). Now executes the code within the current scope instead 
+of the root. ACPICA BZ 762. Lin Ming.
+
+Fixed possible mutex acquisition errors when running _REG methods. Fixes a 
+problem where mutex errors can occur when running a _REG method that is in 
+the same scope as a method-defined operation region or an operation region 
+under a module-level IF block. This type of code is rare, so the problem has 
+not been seen before. ACPICA BZ 826. Lin Ming, Bob Moore.
+
+Fixed a possible memory leak during module-level code execution. An object 
+could be leaked for each block of executed module-level code if the 
+interpreter slack mode is enabled This change deletes any implicitly returned 
+object from the module-level code block. Lin Ming.
+
+Removed messages for successful predefined repair(s). The repair mechanism 
+was considered too wordy. Now, messages are only unconditionally emitted if 
+the return object cannot be repaired. Existing messages for successful 
+repairs were converted to ACPI_DEBUG_PRINT messages for now. ACPICA BZ 827.
+
+Example Code and Data Size: These are the sizes for the OS-independent 
+acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
+debug version of the code includes the debug output trace mechanism and has a 
+much larger code and data size.
+
+  Previous Release:
+    Non-Debug Version:  86.6K Code, 18.2K Data, 104.8K Total
+    Debug Version:     162.7K Code, 50.8K Data, 213.5K Total
+  Current Release:
+    Non-Debug Version:  87.0K Code, 18.0K Data, 105.0K Total
+    Debug Version:     163.4K Code, 50.8K Data, 214.2K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Fixed a regression introduced in 20091112 where intermediate .SRC files 
+were no longer automatically removed at the termination of the compile.
+
+acpiexec: Implemented the -f option to specify default region fill value. 
+This option specifies the value used to initialize buffers that simulate 
+operation regions. Default value is zero. Useful for debugging problems that 
+depend on a specific initial value for a region or field.
+
+----------------------------------------
+12 November 2009. Summary of changes for version 20091112:
+
+This release is available at www.acpica.org/downloads
+
+1) ACPI CA Core Subsystem:
+
+Implemented a post-order callback to AcpiWalkNamespace. The existing 
+interface only has a pre-order callback. This change adds an additional 
+parameter for a post-order callback which will be more useful for bus scans. 
+ACPICA BZ 779. Lin Ming. Updated the ACPICA Programmer Reference.
+
+Modified the behavior of the operation region memory mapping cache for 
+SystemMemory. Ensure that the memory mappings created for operation regions 
+do not cross 4K page boundaries. Crossing a page boundary while mapping 
+regions can cause kernel warnings on some hosts if the pages have different 
+attributes. Such regions are probably BIOS bugs, and this is the workaround. 
+Linux BZ 14445. Lin Ming.
+
+Implemented an automatic repair for predefined methods that must return 
+sorted lists. This change will repair (by sorting) packages returned by _ALR, 
+_PSS, and _TSS. Drivers can now assume that the packages are correctly sorted 
+and do not contain NULL package elements. Adds one new file, 
+namespace/nsrepair2.c. ACPICA BZ 784. Lin Ming, Bob Moore.
+
+Fixed a possible fault during predefined name validation if a return Package 
+object contains NULL elements. Also adds a warning if a NULL element is 
+followed by any non-null elements. ACPICA BZ 813, 814. Future enhancement may 
+include repair or removal of all such NULL elements where possible.
+
+Implemented additional module-level executable AML code support. This change 
+will execute module-level code that is not at the root of the namespace 
+(under a Device object, etc.) at table load time. Module-level executable AML 
+code has been illegal since ACPI 2.0. ACPICA BZ 762. Lin Ming.
+
+Implemented a new internal function to create Integer objects. This function 
+simplifies miscellaneous object creation code. ACPICA BZ 823.
+
+Reduced the severity of predefined repair messages, Warning to Info. Since 
+the object was successfully repaired, a warning is too severe. Reduced to an 
+info message for now. These messages may eventually be changed to debug-only. 
+ACPICA BZ 812.
+
+Example Code and Data Size: These are the sizes for the OS-independent 
+acpica.lib produced by the Microsoft Visual C++ 6.0 32-bit compiler. The 
+debug version of the code includes the debug output trace mechanism and has a 
+much larger code and data size.
+
+  Previous Release:
+    Non-Debug Version:  85.8K Code, 18.0K Data, 103.8K Total
+    Debug Version:     161.8K Code, 50.6K Data, 212.4K Total
+  Current Release:
+    Non-Debug Version:  86.6K Code, 18.2K Data, 104.8K Total
+    Debug Version:     162.7K Code, 50.8K Data, 213.5K Total
+
+2) iASL Compiler/Disassembler and Tools:
+
+iASL: Implemented Switch() with While(1) so that Break works correctly. This 
+change correctly implements the Switch operator with a surrounding While(1) 
+so that the Break operator works as expected. ACPICA BZ 461. Lin Ming.
+
+iASL: Added a message if a package initializer list is shorter than package 
+length. Adds a new remark for a Package() declaration if an initializer list 
+exists, but is shorter than the declared length of the package. Although 
+technically legal, this is probably a coding error and it is seen in the 
+field. ACPICA BZ 815. Lin Ming, Bob Moore.
+
+iASL: Fixed a problem where the compiler could fault after the maximum number 
+of errors was reached (200).
+
+acpixtract: Fixed a possible warning for pointer cast if the compiler warning 
+level set very high.
+
 ----------------------------------------
 13 October 2009. Summary of changes for version 20091013:
 
diff --git a/sys/contrib/dev/acpica/compiler/aslcompile.c b/sys/contrib/dev/acpica/compiler/aslcompile.c
index dda3ce3238c..b8e9b2e436a 100644
--- a/sys/contrib/dev/acpica/compiler/aslcompile.c
+++ b/sys/contrib/dev/acpica/compiler/aslcompile.c
@@ -895,6 +895,14 @@ CmCleanupAndExit (
                         10) / Gbl_NsLookupCount);
     }
 
+
+    if (Gbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
+    {
+        printf ("\nMaximum error count (%d) exceeded\n", ASL_MAX_ERROR_COUNT);
+    }
+
+    UtDisplaySummary (ASL_FILE_STDOUT);
+
     /* Close all open files */
 
     for (i = 2; i < ASL_MAX_FILE_TYPE; i++)
@@ -902,14 +910,6 @@ CmCleanupAndExit (
         FlCloseFile (i);
     }
 
-    /*
-     * TBD: SourceOutput should be .TMP, then rename if we want to keep it?
-     */
-    if (!Gbl_SourceOutputFlag)
-    {
-        remove (Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
-    }
-
     /* Delete AML file if there are errors */
 
     if ((Gbl_ExceptionCount[ASL_ERROR] > 0) && (!Gbl_IgnoreErrors))
@@ -917,12 +917,19 @@ CmCleanupAndExit (
         remove (Gbl_Files[ASL_FILE_AML_OUTPUT].Filename);
     }
 
-    if (Gbl_ExceptionCount[ASL_ERROR] > ASL_MAX_ERROR_COUNT)
+    /*
+     * Delete intermediate ("combined") source file (if -ls flag not set)
+     *
+     * TBD: SourceOutput should be .TMP, then rename if we want to keep it?
+     */
+    if (!Gbl_SourceOutputFlag)
     {
-        printf ("\nMaximum error count (%d) exceeded\n", ASL_MAX_ERROR_COUNT);
+        if (remove (Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename))
+        {
+            printf ("Could not remove SRC file, %s\n",
+                Gbl_Files[ASL_FILE_SOURCE_OUTPUT].Filename);
+        }
     }
-
-    UtDisplaySummary (ASL_FILE_STDOUT);
 }
 
 
diff --git a/sys/contrib/dev/acpica/compiler/aslerror.c b/sys/contrib/dev/acpica/compiler/aslerror.c
index 2591dfe8c8b..0762bb3343e 100644
--- a/sys/contrib/dev/acpica/compiler/aslerror.c
+++ b/sys/contrib/dev/acpica/compiler/aslerror.c
@@ -535,6 +535,7 @@ AslCommonError (
         Gbl_NextError = Gbl_ErrorLog;
         CmDoOutputFiles ();
         CmCleanupAndExit ();
+        exit(1);
     }
 
     return;
diff --git a/sys/contrib/dev/acpica/compiler/asllookup.c b/sys/contrib/dev/acpica/compiler/asllookup.c
index 716e9f9bc77..73cd3147b0d 100644
--- a/sys/contrib/dev/acpica/compiler/asllookup.c
+++ b/sys/contrib/dev/acpica/compiler/asllookup.c
@@ -526,7 +526,7 @@ LsDisplayNamespace (
     /* Walk entire namespace from the root */
 
     Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
-                ACPI_UINT32_MAX, FALSE, LsDoOneNamespaceObject,
+                ACPI_UINT32_MAX, FALSE, LsDoOneNamespaceObject, NULL,
                 NULL, NULL);
 
     /* Print the full pathname for each namespace node */
@@ -534,7 +534,7 @@ LsDisplayNamespace (
     FlPrintFile (ASL_FILE_NAMESPACE_OUTPUT, "\nNamespace pathnames\n\n");
 
     Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
-                ACPI_UINT32_MAX, FALSE, LsDoOnePathname,
+                ACPI_UINT32_MAX, FALSE, LsDoOnePathname, NULL,
                 NULL, NULL);
 
     return (Status);
@@ -598,7 +598,7 @@ LkObjectExists (
     /* Walk entire namespace from the supplied root */
 
     Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
-                ACPI_UINT32_MAX, FALSE, LsCompareOneNamespaceObject,
+                ACPI_UINT32_MAX, FALSE, LsCompareOneNamespaceObject, NULL,
                 Name, NULL);
     if (Status == AE_CTRL_TRUE)
     {
@@ -753,7 +753,7 @@ LkFindUnreferencedObjects (
     /* Walk entire namespace from the supplied root */
 
     (void) AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
-                ACPI_UINT32_MAX, FALSE, LkIsObjectUsed,
+                ACPI_UINT32_MAX, FALSE, LkIsObjectUsed, NULL,
                 NULL, NULL);
 }
 
diff --git a/sys/contrib/dev/acpica/compiler/asloperands.c b/sys/contrib/dev/acpica/compiler/asloperands.c
index 4e6d3b1e9ef..418abd9d616 100644
--- a/sys/contrib/dev/acpica/compiler/asloperands.c
+++ b/sys/contrib/dev/acpica/compiler/asloperands.c
@@ -788,20 +788,30 @@ OpnDoPackage (
     if ((PackageLengthOp->Asl.ParseOpcode == PARSEOP_INTEGER)      ||
         (PackageLengthOp->Asl.ParseOpcode == PARSEOP_QWORDCONST))
     {
-        if (PackageLengthOp->Asl.Value.Integer >= PackageLength)
+        if (PackageLengthOp->Asl.Value.Integer > PackageLength)
         {
-            /* Allow package to be longer than the initializer list */
+            /*
+             * Allow package length to be longer than the initializer
+             * list -- but if the length of initializer list is nonzero,
+             * issue a message since this is probably a coding error,
+             * even though technically legal.
+             */
+            if (PackageLength > 0)
+            {
+                AslError (ASL_REMARK, ASL_MSG_LIST_LENGTH_SHORT,
+                    PackageLengthOp, NULL);
+            }
 
             PackageLength = (UINT32) PackageLengthOp->Asl.Value.Integer;
         }
-        else
+        else if (PackageLengthOp->Asl.Value.Integer < PackageLength)
         {
             /*
-             * Initializer list is longer than the package length. This
-             * is an error as per the ACPI spec.
+             * The package length is smaller than the length of the
+             * initializer list. This is an error as per the ACPI spec.
              */
-            AslError (ASL_ERROR, ASL_MSG_LIST_LENGTH,
-                PackageLengthOp->Asl.Next, NULL);
+            AslError (ASL_ERROR, ASL_MSG_LIST_LENGTH_LONG,
+                PackageLengthOp, NULL);
         }
     }
 
diff --git a/sys/contrib/dev/acpica/compiler/asltransform.c b/sys/contrib/dev/acpica/compiler/asltransform.c
index ca0d4b82159..3fa2deefc0b 100644
--- a/sys/contrib/dev/acpica/compiler/asltransform.c
+++ b/sys/contrib/dev/acpica/compiler/asltransform.c
@@ -468,6 +468,8 @@ TrDoSwitch (
     ACPI_PARSE_OBJECT       *NewOp;
     ACPI_PARSE_OBJECT       *NewOp2;
     ACPI_PARSE_OBJECT       *MethodOp;
+    ACPI_PARSE_OBJECT       *StoreOp;
+    ACPI_PARSE_OBJECT       *BreakOp;
     char                    *PredicateValueName;
     UINT16                  Index;
     UINT32                  Btype;
@@ -638,11 +640,7 @@ TrDoSwitch (
              */
             if (CurrentParentNode == StartNode)
             {
-                Conditional->Asl.Parent = CurrentParentNode->Asl.Parent;
-
-                /* Link IF into the peer list */
-
-                TrAmlInsertPeer (CurrentParentNode, Conditional);
+                Conditional->Asl.Next = NULL;
             }
             else
             {
@@ -695,6 +693,7 @@ TrDoSwitch (
             {
                 return;
             }
+
             TrAmlInitNode (DefaultOp, PARSEOP_ELSE);
             DefaultOp->Asl.Parent = Conditional->Asl.Parent;
 
@@ -799,22 +798,44 @@ TrDoSwitch (
     TrAmlSetSubtreeParent (NewOp2, NewOp);
 
     /*
-     * Transform the Switch() into a Store() node which will be used to save the
+     * Transform the Switch() into a While(One)-Break node.
+     * And create a Store() node which will be used to save the
      * Switch() value.  The store is of the form: Store (Value, _T_x)
      * where _T_x is the temp variable.
      */
-    TrAmlInitNode (StartNode, PARSEOP_STORE);
-    StartNode->Asl.Child = NULL;
+    TrAmlInitNode (StartNode, PARSEOP_WHILE);
+    NewOp = TrCreateLeafNode (PARSEOP_ONE);
+    NewOp->Asl.Next = Predicate->Asl.Next;
+    NewOp->Asl.Parent = StartNode;
+    StartNode->Asl.Child = NewOp;
+
+    /* Create a Store() node */
+
+    StoreOp = TrCreateLeafNode (PARSEOP_STORE);
+    StoreOp->Asl.Parent = StartNode;
+    TrAmlInsertPeer (NewOp, StoreOp);
 
     /* Complete the Store subtree */
 
-    StartNode->Asl.Child = Predicate;
-    Predicate->Asl.Parent = StartNode;
+    StoreOp->Asl.Child = Predicate;
+    Predicate->Asl.Parent = StoreOp;
 
     NewOp = TrCreateValuedLeafNode (PARSEOP_NAMESEG,
                 (ACPI_INTEGER) ACPI_TO_INTEGER (PredicateValueName));
-    NewOp->Asl.Parent    = StartNode;
+    NewOp->Asl.Parent    = StoreOp;
     Predicate->Asl.Next  = NewOp;
+
+    /* Create a Break() node and insert it into the end of While() */
+
+    Conditional = StartNode->Asl.Child;
+    while (Conditional->Asl.Next)
+    {
+        Conditional = Conditional->Asl.Next;
+    }
+
+    BreakOp = TrCreateLeafNode (PARSEOP_BREAK);
+    BreakOp->Asl.Parent = StartNode;
+    TrAmlInsertPeer (Conditional, BreakOp);
 }
 
 
diff --git a/sys/contrib/dev/acpica/compiler/asltypes.h b/sys/contrib/dev/acpica/compiler/asltypes.h
index fb2396f4dde..0500ba9d377 100644
--- a/sys/contrib/dev/acpica/compiler/asltypes.h
+++ b/sys/contrib/dev/acpica/compiler/asltypes.h
@@ -369,7 +369,8 @@ typedef enum
     ASL_MSG_INVALID_TIME,
     ASL_MSG_INVALID_TYPE,
     ASL_MSG_INVALID_UUID,
-    ASL_MSG_LIST_LENGTH,
+    ASL_MSG_LIST_LENGTH_LONG,
+    ASL_MSG_LIST_LENGTH_SHORT,
     ASL_MSG_LISTING_FILE_OPEN,
     ASL_MSG_LISTING_FILENAME,
     ASL_MSG_LOCAL_INIT,
@@ -488,7 +489,8 @@ char                        *AslMessages [] = {
 /*    ASL_MSG_INVALID_TIME */               "Time parameter too long (255 max)",
 /*    ASL_MSG_INVALID_TYPE */               "Invalid type",
 /*    ASL_MSG_INVALID_UUID */               "UUID string must be of the form \"aabbccdd-eeff-gghh-iijj-kkllmmnnoopp\"",
-/*    ASL_MSG_LIST_LENGTH */                "Initializer list too long",
+/*    ASL_MSG_LIST_LENGTH_LONG */           "Initializer list longer than declared package length",
+/*    ASL_MSG_LIST_LENGTH_SHORT */          "Initializer list shorter than declared package length",
 /*    ASL_MSG_LISTING_FILE_OPEN */          "Could not open listing file",
 /*    ASL_MSG_LISTING_FILENAME */           "Could not create listing filename",
 /*    ASL_MSG_LOCAL_INIT */                 "Method local variable is not initialized",
diff --git a/sys/contrib/dev/acpica/debugger/dbcmds.c b/sys/contrib/dev/acpica/debugger/dbcmds.c
index bb1ddb489ab..6ae247efe88 100644
--- a/sys/contrib/dev/acpica/debugger/dbcmds.c
+++ b/sys/contrib/dev/acpica/debugger/dbcmds.c
@@ -383,7 +383,7 @@ AcpiDbFindReferences (
     /* Search all nodes in namespace */
 
     (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
-                    AcpiDbWalkForReferences, (void *) ObjDesc, NULL);
+                    AcpiDbWalkForReferences, NULL, (void *) ObjDesc, NULL);
 }
 
 
@@ -475,7 +475,7 @@ AcpiDbCheckPredefinedNames (
     /* Search all nodes in namespace */
 
     (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
-                AcpiDbWalkForPredefinedNames, (void *) &Count, NULL);
+                AcpiDbWalkForPredefinedNames, NULL, (void *) &Count, NULL);
 
     AcpiOsPrintf ("Found %d predefined names in the namespace\n", Count);
 }
@@ -617,7 +617,7 @@ AcpiDbBatchExecute (
     /* Search all nodes in namespace */
 
     (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
-                AcpiDbWalkForExecute, (void *) &Info, NULL);
+                AcpiDbWalkForExecute, NULL, (void *) &Info, NULL);
 
     AcpiOsPrintf ("Executed %d predefined names in the namespace\n", Info.Count);
 }
@@ -1165,15 +1165,13 @@ AcpiDbSetMethodData (
 
     /* Create and initialize the new object */
 
-    ObjDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+    ObjDesc = AcpiUtCreateIntegerObject ((UINT64) Value);
     if (!ObjDesc)
     {
         AcpiOsPrintf ("Could not create an internal object\n");
         return;
     }
 
-    ObjDesc->Integer.Value = Value;
-
     /* Store the new object into the target */
 
     switch (Type)
@@ -1325,7 +1323,7 @@ AcpiDbDisplayObjects (
     /* Walk the namespace from the root */
 
     (void) AcpiWalkNamespace (Type, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
-                AcpiDbWalkForSpecificObjects, (void *) &Info, NULL);
+                AcpiDbWalkForSpecificObjects, NULL, (void *) &Info, NULL);
 
     AcpiOsPrintf (
         "\nFound %u objects of type [%s] in the current ACPI Namespace\n",
@@ -1441,7 +1439,7 @@ AcpiDbFindNameInNamespace (
     /* Walk the namespace from the root */
 
     (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
-                        AcpiDbWalkAndMatchName, AcpiName, NULL);
+                        AcpiDbWalkAndMatchName, NULL, AcpiName, NULL);
 
     AcpiDbSetOutputDestination (ACPI_DB_CONSOLE_OUTPUT);
     return (AE_OK);
@@ -1942,7 +1940,7 @@ AcpiDbCheckIntegrity (
     /* Search all nodes in namespace */
 
     (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
-                    AcpiDbIntegrityWalk, (void *) &Info, NULL);
+                    AcpiDbIntegrityWalk, NULL, (void *) &Info, NULL);
 
     AcpiOsPrintf ("Verified %d namespace nodes with %d Objects\n",
         Info.Nodes, Info.Objects);
@@ -2129,7 +2127,7 @@ AcpiDbGetBusInfo (
     /* Search all nodes in namespace */
 
     (void) AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, ACPI_UINT32_MAX,
-                    AcpiDbBusWalk, NULL, NULL);
+                    AcpiDbBusWalk, NULL, NULL, NULL);
 }
 
 #endif /* ACPI_DEBUGGER */
diff --git a/sys/contrib/dev/acpica/debugger/dbexec.c b/sys/contrib/dev/acpica/debugger/dbexec.c
index 377b503c876..cde2f6ce778 100644
--- a/sys/contrib/dev/acpica/debugger/dbexec.c
+++ b/sys/contrib/dev/acpica/debugger/dbexec.c
@@ -453,7 +453,7 @@ AcpiDbExecute (
     if (*Name == '*')
     {
         (void) AcpiWalkNamespace (ACPI_TYPE_METHOD, ACPI_ROOT_OBJECT,
-                    ACPI_UINT32_MAX, AcpiDbExecutionWalk, NULL, NULL);
+                    ACPI_UINT32_MAX, AcpiDbExecutionWalk, NULL, NULL, NULL);
         return;
     }
     else
diff --git a/sys/contrib/dev/acpica/debugger/dbstats.c b/sys/contrib/dev/acpica/debugger/dbstats.c
index 688d5b31255..56f74907bb2 100644
--- a/sys/contrib/dev/acpica/debugger/dbstats.c
+++ b/sys/contrib/dev/acpica/debugger/dbstats.c
@@ -446,7 +446,7 @@ AcpiDbCountNamespaceObjects (
     }
 
     (void) AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
-                ACPI_UINT32_MAX, FALSE, AcpiDbClassifyOneObject, NULL, NULL);
+                ACPI_UINT32_MAX, FALSE, AcpiDbClassifyOneObject, NULL, NULL, NULL);
 }
 
 
diff --git a/sys/contrib/dev/acpica/debugger/dbutils.c b/sys/contrib/dev/acpica/debugger/dbutils.c
index f394876a7b1..5a8a6f067f5 100644
--- a/sys/contrib/dev/acpica/debugger/dbutils.c
+++ b/sys/contrib/dev/acpica/debugger/dbutils.c
@@ -275,6 +275,10 @@ AcpiDbDumpExternalObject (
         AcpiOsPrintf ("[Buffer] Length %.2X = ", ObjDesc->Buffer.Length);
         if (ObjDesc->Buffer.Length)
         {
+            if (ObjDesc->Buffer.Length > 16)
+            {
+                AcpiOsPrintf ("\n");
+            }
             AcpiUtDumpBuffer (ACPI_CAST_PTR (UINT8, ObjDesc->Buffer.Pointer),
                     ObjDesc->Buffer.Length, DB_DWORD_DISPLAY, _COMPONENT);
         }
diff --git a/sys/contrib/dev/acpica/disassembler/dmwalk.c b/sys/contrib/dev/acpica/disassembler/dmwalk.c
index 14fee4ab282..7b4143b9bea 100644
--- a/sys/contrib/dev/acpica/disassembler/dmwalk.c
+++ b/sys/contrib/dev/acpica/disassembler/dmwalk.c
@@ -160,7 +160,6 @@ AcpiDmBlockType (
     ACPI_PARSE_OBJECT       *Op);
 
 
-
 /*******************************************************************************
  *
  * FUNCTION:    AcpiDmDisassemble
diff --git a/sys/contrib/dev/acpica/dispatcher/dsinit.c b/sys/contrib/dev/acpica/dispatcher/dsinit.c
index 54293b61e6e..ec7a03a1fc8 100644
--- a/sys/contrib/dev/acpica/dispatcher/dsinit.c
+++ b/sys/contrib/dev/acpica/dispatcher/dsinit.c
@@ -283,7 +283,7 @@ AcpiDsInitializeObjects (
      * the namespace reader lock.
      */
     Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, StartNode, ACPI_UINT32_MAX,
-                ACPI_NS_WALK_UNLOCK, AcpiDsInitOneObject, &Info, NULL);
+                ACPI_NS_WALK_UNLOCK, AcpiDsInitOneObject, NULL, &Info, NULL);
     if (ACPI_FAILURE (Status))
     {
         ACPI_EXCEPTION ((AE_INFO, Status, "During WalkNamespace"));
diff --git a/sys/contrib/dev/acpica/dispatcher/dsmethod.c b/sys/contrib/dev/acpica/dispatcher/dsmethod.c
index bf32fa86e68..50f27d7fa5f 100644
--- a/sys/contrib/dev/acpica/dispatcher/dsmethod.c
+++ b/sys/contrib/dev/acpica/dispatcher/dsmethod.c
@@ -519,7 +519,7 @@ AcpiDsCallControlMethod (
 
     if (ObjDesc->Method.MethodFlags & AML_METHOD_INTERNAL_ONLY)
     {
-        Status = ObjDesc->Method.Implementation (NextWalkState);
+        Status = ObjDesc->Method.Extra.Implementation (NextWalkState);
         if (Status == AE_OK)
         {
             Status = AE_CTRL_TERMINATE;
diff --git a/sys/contrib/dev/acpica/dispatcher/dsmthdat.c b/sys/contrib/dev/acpica/dispatcher/dsmthdat.c
index 9f735388ac1..7af8f0aa78f 100644
--- a/sys/contrib/dev/acpica/dispatcher/dsmthdat.c
+++ b/sys/contrib/dev/acpica/dispatcher/dsmthdat.c
@@ -524,13 +524,12 @@ AcpiDsMethodDataGetValue (
 
         if (AcpiGbl_EnableInterpreterSlack)
         {
-            Object = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+            Object = AcpiUtCreateIntegerObject ((UINT64) 0);
             if (!Object)
             {
                 return_ACPI_STATUS (AE_NO_MEMORY);
             }
 
-            Object->Integer.Value = 0;
             Node->Object = Object;
         }
 
diff --git a/sys/contrib/dev/acpica/dispatcher/dsobject.c b/sys/contrib/dev/acpica/dispatcher/dsobject.c
index 342989c04b8..8930a758a14 100644
--- a/sys/contrib/dev/acpica/dispatcher/dsobject.c
+++ b/sys/contrib/dev/acpica/dispatcher/dsobject.c
@@ -574,7 +574,7 @@ AcpiDsBuildInternalPackageObj (
          *
          * Note: technically, this is an error, from ACPI spec: "It is an error
          * for NumElements to be less than the number of elements in the
-         * PackageList". However, we just print an error message and
+         * PackageList". However, we just print a message and
          * no exception is returned. This provides Windows compatibility. Some
          * BIOSs will alter the NumElements on the fly, creating this type
          * of ill-formed package object.
@@ -598,8 +598,8 @@ AcpiDsBuildInternalPackageObj (
             Arg = Arg->Common.Next;
         }
 
-        ACPI_ERROR ((AE_INFO,
-            "Package List length (0x%X) larger than NumElements count (0x%X), truncated\n",
+        ACPI_INFO ((AE_INFO,
+            "Actual Package length (0x%X) is larger than NumElements field (0x%X), truncated\n",
             i, ElementCount));
     }
     else if (i < ElementCount)
diff --git a/sys/contrib/dev/acpica/dispatcher/dswload.c b/sys/contrib/dev/acpica/dispatcher/dswload.c
index 240d6bbebc9..5f33abfc4fe 100644
--- a/sys/contrib/dev/acpica/dispatcher/dswload.c
+++ b/sys/contrib/dev/acpica/dispatcher/dswload.c
@@ -296,18 +296,19 @@ AcpiDsLoad1BeginOp (
         case ACPI_TYPE_BUFFER:
 
             /*
-             * These types we will allow, but we will change the type. This
-             * enables some existing code of the form:
+             * These types we will allow, but we will change the type.
+             * This enables some existing code of the form:
              *
              *  Name (DEB, 0)
              *  Scope (DEB) { ... }
              *
-             * Note: silently change the type here. On the second pass, we will report
-             * a warning
+             * Note: silently change the type here. On the second pass,
+             * we will report a warning
              */
             ACPI_DEBUG_PRINT ((ACPI_DB_INFO,
-                "Type override - [%4.4s] had invalid type (%s) for Scope operator, changed to (Scope)\n",
-                Path, AcpiUtGetTypeName (Node->Type)));
+                "Type override - [%4.4s] had invalid type (%s) "
+                "for Scope operator, changed to type ANY\n",
+                AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type)));
 
             Node->Type = ACPI_TYPE_ANY;
             WalkState->ScopeInfo->Common.Value = ACPI_TYPE_ANY;
@@ -318,8 +319,9 @@ AcpiDsLoad1BeginOp (
             /* All other types are an error */
 
             ACPI_ERROR ((AE_INFO,
-                "Invalid type (%s) for target of Scope operator [%4.4s] (Cannot override)",
-                AcpiUtGetTypeName (Node->Type), Path));
+                "Invalid type (%s) for target of "
+                "Scope operator [%4.4s] (Cannot override)",
+                AcpiUtGetTypeName (Node->Type), AcpiUtGetNodeName (Node)));
 
             return_ACPI_STATUS (AE_AML_OPERAND_TYPE);
         }
@@ -794,15 +796,16 @@ AcpiDsLoad2BeginOp (
         case ACPI_TYPE_BUFFER:
 
             /*
-             * These types we will allow, but we will change the type. This
-             * enables some existing code of the form:
+             * These types we will allow, but we will change the type.
+             * This enables some existing code of the form:
              *
              *  Name (DEB, 0)
              *  Scope (DEB) { ... }
              */
             ACPI_WARNING ((AE_INFO,
-                "Type override - [%4.4s] had invalid type (%s) for Scope operator, changed to (Scope)",
-                BufferPtr, AcpiUtGetTypeName (Node->Type)));
+                "Type override - [%4.4s] had invalid type (%s) "
+                "for Scope operator, changed to type ANY\n",
+                AcpiUtGetNodeName (Node), AcpiUtGetTypeName (Node->Type)));
 
             Node->Type = ACPI_TYPE_ANY;
             WalkState->ScopeInfo->Common.Value = ACPI_TYPE_ANY;
@@ -813,8 +816,9 @@ AcpiDsLoad2BeginOp (
             /* All other types are an error */
 
             ACPI_ERROR ((AE_INFO,
-                "Invalid type (%s) for target of Scope operator [%4.4s]",
-                AcpiUtGetTypeName (Node->Type), BufferPtr));
+                "Invalid type (%s) for target of "
+                "Scope operator [%4.4s] (Cannot override)",
+                AcpiUtGetTypeName (Node->Type), AcpiUtGetNodeName (Node)));
 
             return (AE_AML_OPERAND_TYPE);
         }
@@ -1154,33 +1158,40 @@ AcpiDsLoad2EndOp (
             }
 
             /*
-             * If we are executing a method, initialize the region
+             * The OpRegion is not fully parsed at this time. The only valid
+             * argument is the SpaceId. (We must save the address of the
+             * AML of the address and length operands)
+             *
+             * If we have a valid region, initialize it. The namespace is
+             * unlocked at this point.
+             *
+             * Need to unlock interpreter if it is locked (if we are running
+             * a control method), in order to allow _REG methods to be run
+             * during AcpiEvInitializeRegion.
              */
             if (WalkState->MethodNode)
             {
+                /*
+                 * Executing a method: initialize the region and unlock
+                 * the interpreter
+                 */
                 Status = AcpiExCreateRegion (Op->Named.Data, Op->Named.Length,
                             RegionSpace, WalkState);
                 if (ACPI_FAILURE (Status))
                 {
                     return (Status);
                 }
+
+                AcpiExExitInterpreter ();
             }
 
-            /*
-             * The OpRegion is not fully parsed at this time. Only valid
-             * argument is the SpaceId. (We must save the address of the
-             * AML of the address and length operands)
-             */
-
-            /*
-             * If we have a valid region, initialize it
-             * Namespace is NOT locked at this point.
-             *
-             * TBD: need to unlock interpreter if it is locked, in order
-             * to allow _REG methods to be run.
-             */
             Status = AcpiEvInitializeRegion (AcpiNsGetAttachedObject (Node),
                         FALSE);
+            if (WalkState->MethodNode)
+            {
+                AcpiExEnterInterpreter ();
+            }
+
             if (ACPI_FAILURE (Status))
             {
                 /*
diff --git a/sys/contrib/dev/acpica/events/evgpeblk.c b/sys/contrib/dev/acpica/events/evgpeblk.c
index 7028a2cca9e..1755c9fe4ae 100644
--- a/sys/contrib/dev/acpica/events/evgpeblk.c
+++ b/sys/contrib/dev/acpica/events/evgpeblk.c
@@ -1110,7 +1110,7 @@ AcpiEvCreateGpeBlock (
 
     Status = AcpiNsWalkNamespace (ACPI_TYPE_METHOD, GpeDevice,
                 ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK,
-                AcpiEvSaveMethodInfo, GpeBlock, NULL);
+                AcpiEvSaveMethodInfo, NULL, GpeBlock, NULL);
 
     /* Return the new block */
 
@@ -1192,7 +1192,7 @@ AcpiEvInitializeGpeBlock (
 
         Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
                     ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK,
-                    AcpiEvMatchPrwAndGpe, &GpeInfo, NULL);
+                    AcpiEvMatchPrwAndGpe, NULL, &GpeInfo, NULL);
     }
 
     /*
diff --git a/sys/contrib/dev/acpica/events/evregion.c b/sys/contrib/dev/acpica/events/evregion.c
index 31b45f6dc09..d3a05ff0269 100644
--- a/sys/contrib/dev/acpica/events/evregion.c
+++ b/sys/contrib/dev/acpica/events/evregion.c
@@ -400,25 +400,21 @@ AcpiEvExecuteRegMethod (
      *  connection status 1 for connecting the handler, 0 for disconnecting
      *  the handler (Passed as a parameter)
      */
-    Args[0] = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+    Args[0] = AcpiUtCreateIntegerObject ((UINT64) RegionObj->Region.SpaceId);
     if (!Args[0])
     {
         Status = AE_NO_MEMORY;
         goto Cleanup1;
     }
 
-    Args[1] = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+    Args[1] = AcpiUtCreateIntegerObject ((UINT64) Function);
     if (!Args[1])
     {
         Status = AE_NO_MEMORY;
         goto Cleanup2;
     }
 
-    /* Setup the parameter objects */
-
-    Args[0]->Integer.Value = RegionObj->Region.SpaceId;
-    Args[1]->Integer.Value = Function;
-    Args[2] = NULL;
+    Args[2] = NULL; /* Terminate list */
 
     /* Execute the method, no return value */
 
@@ -849,7 +845,7 @@ AcpiEvInstallHandler (
 
     /* Convert and validate the device handle */
 
-    Node = AcpiNsMapHandleToNode (ObjHandle);
+    Node = AcpiNsValidateHandle (ObjHandle);
     if (!Node)
     {
         return (AE_BAD_PARAMETER);
@@ -1173,7 +1169,7 @@ AcpiEvInstallSpaceHandler (
      * of the branch
      */
     Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node, ACPI_UINT32_MAX,
-                ACPI_NS_WALK_UNLOCK, AcpiEvInstallHandler,
+                ACPI_NS_WALK_UNLOCK, AcpiEvInstallHandler, NULL,
                 HandlerObj, NULL);
 
 UnlockAndExit:
@@ -1213,7 +1209,7 @@ AcpiEvExecuteRegMethods (
      * regions of this Space ID before we can run any _REG methods)
      */
     Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, Node, ACPI_UINT32_MAX,
-                ACPI_NS_WALK_UNLOCK, AcpiEvRegRun,
+                ACPI_NS_WALK_UNLOCK, AcpiEvRegRun, NULL,
                 &SpaceId, NULL);
 
     return_ACPI_STATUS (Status);
@@ -1247,7 +1243,7 @@ AcpiEvRegRun (
 
     /* Convert and validate the device handle */
 
-    Node = AcpiNsMapHandleToNode (ObjHandle);
+    Node = AcpiNsValidateHandle (ObjHandle);
     if (!Node)
     {
         return (AE_BAD_PARAMETER);
diff --git a/sys/contrib/dev/acpica/events/evrgnini.c b/sys/contrib/dev/acpica/events/evrgnini.c
index adc9d7a5224..4718b209ae9 100644
--- a/sys/contrib/dev/acpica/events/evrgnini.c
+++ b/sys/contrib/dev/acpica/events/evrgnini.c
@@ -716,6 +716,20 @@ AcpiEvInitializeRegion (
                 HandlerObj = ObjDesc->ThermalZone.Handler;
                 break;
 
+            case ACPI_TYPE_METHOD:
+                /*
+                 * If we are executing module level code, the original
+                 * Node's object was replaced by this Method object and we
+                 * saved the handler in the method object.
+                 *
+                 * See AcpiNsExecModuleCode
+                 */
+                if (ObjDesc->Method.Flags & AOPOBJ_MODULE_LEVEL)
+                {
+                    HandlerObj = ObjDesc->Method.Extra.Handler;
+                }
+                break;
+
             default:
                 /* Ignore other objects */
                 break;
diff --git a/sys/contrib/dev/acpica/events/evxface.c b/sys/contrib/dev/acpica/events/evxface.c
index 5ecf4a76fea..b99a72f3166 100644
--- a/sys/contrib/dev/acpica/events/evxface.c
+++ b/sys/contrib/dev/acpica/events/evxface.c
@@ -368,7 +368,7 @@ AcpiInstallNotifyHandler (
 
     /* Convert and validate the device handle */
 
-    Node = AcpiNsMapHandleToNode (Device);
+    Node = AcpiNsValidateHandle (Device);
     if (!Node)
     {
         Status = AE_BAD_PARAMETER;
@@ -555,7 +555,7 @@ AcpiRemoveNotifyHandler (
 
     /* Convert and validate the device handle */
 
-    Node = AcpiNsMapHandleToNode (Device);
+    Node = AcpiNsValidateHandle (Device);
     if (!Node)
     {
         Status = AE_BAD_PARAMETER;
diff --git a/sys/contrib/dev/acpica/events/evxfevnt.c b/sys/contrib/dev/acpica/events/evxfevnt.c
index a583dacdac0..f15d499ba5b 100644
--- a/sys/contrib/dev/acpica/events/evxfevnt.c
+++ b/sys/contrib/dev/acpica/events/evxfevnt.c
@@ -805,7 +805,7 @@ AcpiInstallGpeBlock (
         return (Status);
     }
 
-    Node = AcpiNsMapHandleToNode (GpeDevice);
+    Node = AcpiNsValidateHandle (GpeDevice);
     if (!Node)
     {
         Status = AE_BAD_PARAMETER;
@@ -905,7 +905,7 @@ AcpiRemoveGpeBlock (
         return (Status);
     }
 
-    Node = AcpiNsMapHandleToNode (GpeDevice);
+    Node = AcpiNsValidateHandle (GpeDevice);
     if (!Node)
     {
         Status = AE_BAD_PARAMETER;
diff --git a/sys/contrib/dev/acpica/events/evxfregn.c b/sys/contrib/dev/acpica/events/evxfregn.c
index 8ec140241f2..cacd5b307f6 100644
--- a/sys/contrib/dev/acpica/events/evxfregn.c
+++ b/sys/contrib/dev/acpica/events/evxfregn.c
@@ -171,7 +171,7 @@ AcpiInstallAddressSpaceHandler (
 
     /* Convert and validate the device handle */
 
-    Node = AcpiNsMapHandleToNode (Device);
+    Node = AcpiNsValidateHandle (Device);
     if (!Node)
     {
         Status = AE_BAD_PARAMETER;
@@ -244,7 +244,7 @@ AcpiRemoveAddressSpaceHandler (
 
     /* Convert and validate the device handle */
 
-    Node = AcpiNsMapHandleToNode (Device);
+    Node = AcpiNsValidateHandle (Device);
     if (!Node ||
         ((Node->Type != ACPI_TYPE_DEVICE)    &&
          (Node->Type != ACPI_TYPE_PROCESSOR) &&
diff --git a/sys/contrib/dev/acpica/executer/exconfig.c b/sys/contrib/dev/acpica/executer/exconfig.c
index ace13d743dc..2723d2551d8 100644
--- a/sys/contrib/dev/acpica/executer/exconfig.c
+++ b/sys/contrib/dev/acpica/executer/exconfig.c
@@ -263,15 +263,13 @@ AcpiExLoadTableOp (
 
         /* Table not found, return an Integer=0 and AE_OK */
 
-        DdbHandle = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+        DdbHandle = AcpiUtCreateIntegerObject ((UINT64) 0);
         if (!DdbHandle)
         {
             return_ACPI_STATUS (AE_NO_MEMORY);
         }
 
-        DdbHandle->Integer.Value = 0;
         *ReturnDesc = DdbHandle;
-
         return_ACPI_STATUS (AE_OK);
     }
 
diff --git a/sys/contrib/dev/acpica/executer/exconvrt.c b/sys/contrib/dev/acpica/executer/exconvrt.c
index b69157695c9..ba24f88a7dc 100644
--- a/sys/contrib/dev/acpica/executer/exconvrt.c
+++ b/sys/contrib/dev/acpica/executer/exconvrt.c
@@ -260,7 +260,7 @@ AcpiExConvertToInteger (
 
     /* Create a new integer */
 
-    ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+    ReturnDesc = AcpiUtCreateIntegerObject (Result);
     if (!ReturnDesc)
     {
         return_ACPI_STATUS (AE_NO_MEMORY);
@@ -271,7 +271,6 @@ AcpiExConvertToInteger (
 
     /* Save the Result */
 
-    ReturnDesc->Integer.Value = Result;
     AcpiExTruncateFor32bitTable (ReturnDesc);
     *ResultDesc = ReturnDesc;
     return_ACPI_STATUS (AE_OK);
diff --git a/sys/contrib/dev/acpica/executer/exfield.c b/sys/contrib/dev/acpica/executer/exfield.c
index 0b3065cd263..cb2a4fe8ba7 100644
--- a/sys/contrib/dev/acpica/executer/exfield.c
+++ b/sys/contrib/dev/acpica/executer/exfield.c
@@ -249,14 +249,13 @@ AcpiExReadDataFromField (
     {
         /* Field will fit within an Integer (normal case) */
 
-        BufferDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+        BufferDesc = AcpiUtCreateIntegerObject ((UINT64) 0);
         if (!BufferDesc)
         {
             return_ACPI_STATUS (AE_NO_MEMORY);
         }
 
         Length = AcpiGbl_IntegerByteWidth;
-        BufferDesc->Integer.Value = 0;
         Buffer = &BufferDesc->Integer.Value;
     }
 
diff --git a/sys/contrib/dev/acpica/executer/exmutex.c b/sys/contrib/dev/acpica/executer/exmutex.c
index 286fceb8ae0..ec8a811265d 100644
--- a/sys/contrib/dev/acpica/executer/exmutex.c
+++ b/sys/contrib/dev/acpica/executer/exmutex.c
@@ -490,6 +490,15 @@ AcpiExReleaseMutex (
         return_ACPI_STATUS (AE_AML_MUTEX_NOT_ACQUIRED);
     }
 
+    /* Must have a valid thread ID */
+
+    if (!WalkState->Thread)
+    {
+        ACPI_ERROR ((AE_INFO, "Cannot release Mutex [%4.4s], null thread info",
+            AcpiUtGetNodeName (ObjDesc->Mutex.Node)));
+        return_ACPI_STATUS (AE_AML_INTERNAL);
+    }
+
     /*
      * The Mutex is owned, but this thread must be the owner.
      * Special case for Global Lock, any thread can release
@@ -505,15 +514,6 @@ AcpiExReleaseMutex (
         return_ACPI_STATUS (AE_AML_NOT_OWNER);
     }
 
-    /* Must have a valid thread ID */
-
-    if (!WalkState->Thread)
-    {
-        ACPI_ERROR ((AE_INFO, "Cannot release Mutex [%4.4s], null thread info",
-            AcpiUtGetNodeName (ObjDesc->Mutex.Node)));
-        return_ACPI_STATUS (AE_AML_INTERNAL);
-    }
-
     /*
      * The sync level of the mutex must be equal to the current sync level. In
      * other words, the current level means that at least one mutex at that
diff --git a/sys/contrib/dev/acpica/executer/exoparg1.c b/sys/contrib/dev/acpica/executer/exoparg1.c
index dd4767f236b..ddfe693c179 100644
--- a/sys/contrib/dev/acpica/executer/exoparg1.c
+++ b/sys/contrib/dev/acpica/executer/exoparg1.c
@@ -183,13 +183,12 @@ AcpiExOpcode_0A_0T_1R (
 
         /* Create a return object of type Integer */
 
-        ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+        ReturnDesc = AcpiUtCreateIntegerObject (AcpiOsGetTimer ());
         if (!ReturnDesc)
         {
             Status = AE_NO_MEMORY;
             goto Cleanup;
         }
-        ReturnDesc->Integer.Value = AcpiOsGetTimer ();
         break;
 
     default:                /*  Unknown opcode  */
@@ -733,7 +732,7 @@ AcpiExOpcode_1A_0T_1R (
     {
     case AML_LNOT_OP:               /* LNot (Operand) */
 
-        ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+        ReturnDesc = AcpiUtCreateIntegerObject ((UINT64) 0);
         if (!ReturnDesc)
         {
             Status = AE_NO_MEMORY;
@@ -838,14 +837,12 @@ AcpiExOpcode_1A_0T_1R (
 
         /* Allocate a descriptor to hold the type. */
 
-        ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+        ReturnDesc = AcpiUtCreateIntegerObject ((UINT64) Type);
         if (!ReturnDesc)
         {
             Status = AE_NO_MEMORY;
             goto Cleanup;
         }
-
-        ReturnDesc->Integer.Value = Type;
         break;
 
 
@@ -917,14 +914,12 @@ AcpiExOpcode_1A_0T_1R (
          * Now that we have the size of the object, create a result
          * object to hold the value
          */
-        ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+        ReturnDesc = AcpiUtCreateIntegerObject (Value);
         if (!ReturnDesc)
         {
             Status = AE_NO_MEMORY;
             goto Cleanup;
         }
-
-        ReturnDesc->Integer.Value = Value;
         break;
 
 
@@ -1089,21 +1084,18 @@ AcpiExOpcode_1A_0T_1R (
                      * NOTE: index into a buffer is NOT a pointer to a
                      * sub-buffer of the main buffer, it is only a pointer to a
                      * single element (byte) of the buffer!
+                     *
+                     * Since we are returning the value of the buffer at the
+                     * indexed location, we don't need to add an additional
+                     * reference to the buffer itself.
                      */
-                    ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+                    ReturnDesc = AcpiUtCreateIntegerObject ((UINT64)
+                        TempDesc->Buffer.Pointer[Operand[0]->Reference.Value]);
                     if (!ReturnDesc)
                     {
                         Status = AE_NO_MEMORY;
                         goto Cleanup;
                     }
-
-                    /*
-                     * Since we are returning the value of the buffer at the
-                     * indexed location, we don't need to add an additional
-                     * reference to the buffer itself.
-                     */
-                    ReturnDesc->Integer.Value =
-                        TempDesc->Buffer.Pointer[Operand[0]->Reference.Value];
                     break;
 
 
diff --git a/sys/contrib/dev/acpica/executer/exoparg6.c b/sys/contrib/dev/acpica/executer/exoparg6.c
index 5284ea6234c..d743014d0f5 100644
--- a/sys/contrib/dev/acpica/executer/exoparg6.c
+++ b/sys/contrib/dev/acpica/executer/exoparg6.c
@@ -344,8 +344,9 @@ AcpiExOpcode_6A_0T_1R (
         }
 
         /* Create an integer for the return value */
+        /* Default return value is ACPI_INTEGER_MAX if no match found */
 
-        ReturnDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+        ReturnDesc = AcpiUtCreateIntegerObject (ACPI_INTEGER_MAX);
         if (!ReturnDesc)
         {
             Status = AE_NO_MEMORY;
@@ -353,10 +354,6 @@ AcpiExOpcode_6A_0T_1R (
 
         }
 
-        /* Default return value if no match found */
-
-        ReturnDesc->Integer.Value = ACPI_INTEGER_MAX;
-
         /*
          * Examine each element until a match is found. Both match conditions
          * must be satisfied for a match to occur. Within the loop,
diff --git a/sys/contrib/dev/acpica/executer/exregion.c b/sys/contrib/dev/acpica/executer/exregion.c
index 73447ddf08e..725fd56c104 100644
--- a/sys/contrib/dev/acpica/executer/exregion.c
+++ b/sys/contrib/dev/acpica/executer/exregion.c
@@ -157,7 +157,8 @@ AcpiExSystemMemorySpaceHandler (
     void                    *LogicalAddrPtr = NULL;
     ACPI_MEM_SPACE_CONTEXT  *MemInfo = RegionContext;
     UINT32                  Length;
-    ACPI_SIZE               WindowSize;
+    ACPI_SIZE               MapLength;
+    ACPI_SIZE               PageBoundaryMapLength;
 #ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED
     UINT32                  Remainder;
 #endif
@@ -227,26 +228,45 @@ AcpiExSystemMemorySpaceHandler (
         }
 
         /*
-         * Don't attempt to map memory beyond the end of the region, and
-         * constrain the maximum mapping size to something reasonable.
+         * October 2009: Attempt to map from the requested address to the
+         * end of the region. However, we will never map more than one
+         * page, nor will we cross a page boundary.
          */
-        WindowSize = (ACPI_SIZE)
+        MapLength = (ACPI_SIZE)
             ((MemInfo->Address + MemInfo->Length) - Address);
 
-        if (WindowSize > ACPI_SYSMEM_REGION_WINDOW_SIZE)
+        /*
+         * If mapping the entire remaining portion of the region will cross
+         * a page boundary, just map up to the page boundary, do not cross.
+         * On some systems, crossing a page boundary while mapping regions
+         * can cause warnings if the pages have different attributes
+         * due to resource management.
+         *
+         * This has the added benefit of constraining a single mapping to
+         * one page, which is similar to the original code that used a 4k
+         * maximum window.
+         */
+        PageBoundaryMapLength =
+            ACPI_ROUND_UP (Address, ACPI_DEFAULT_PAGE_SIZE) - Address;
+        if (PageBoundaryMapLength == 0)
         {
-            WindowSize = ACPI_SYSMEM_REGION_WINDOW_SIZE;
+            PageBoundaryMapLength = ACPI_DEFAULT_PAGE_SIZE;
+        }
+
+        if (MapLength > PageBoundaryMapLength)
+        {
+            MapLength = PageBoundaryMapLength;
         }
 
         /* Create a new mapping starting at the address given */
 
         MemInfo->MappedLogicalAddress = AcpiOsMapMemory (
-            (ACPI_PHYSICAL_ADDRESS) Address, WindowSize);
+            (ACPI_PHYSICAL_ADDRESS) Address, MapLength);
         if (!MemInfo->MappedLogicalAddress)
         {
             ACPI_ERROR ((AE_INFO,
                 "Could not map memory at %8.8X%8.8X, size %X",
-                ACPI_FORMAT_NATIVE_UINT (Address), (UINT32) WindowSize));
+                ACPI_FORMAT_NATIVE_UINT (Address), (UINT32) MapLength));
             MemInfo->MappedLength = 0;
             return_ACPI_STATUS (AE_NO_MEMORY);
         }
@@ -254,7 +274,7 @@ AcpiExSystemMemorySpaceHandler (
         /* Save the physical address and mapping size */
 
         MemInfo->MappedPhysicalAddress = Address;
-        MemInfo->MappedLength = WindowSize;
+        MemInfo->MappedLength = MapLength;
     }
 
     /*
diff --git a/sys/contrib/dev/acpica/include/acconfig.h b/sys/contrib/dev/acpica/include/acconfig.h
index 1fcc45a364a..8fbe0e371b2 100644
--- a/sys/contrib/dev/acpica/include/acconfig.h
+++ b/sys/contrib/dev/acpica/include/acconfig.h
@@ -177,9 +177,9 @@
 
 #define ACPI_MAX_REFERENCE_COUNT        0x800
 
-/* Size of cached memory mapping for system memory operation region */
+/* Default page size for use in mapping memory for operation regions */
 
-#define ACPI_SYSMEM_REGION_WINDOW_SIZE  4096
+#define ACPI_DEFAULT_PAGE_SIZE          4096    /* Must be power of 2 */
 
 /* OwnerId tracking. 8 entries allows for 255 OwnerIds */
 
diff --git a/sys/contrib/dev/acpica/include/acmacros.h b/sys/contrib/dev/acpica/include/acmacros.h
index 28c934deb99..3d351f9fc85 100644
--- a/sys/contrib/dev/acpica/include/acmacros.h
+++ b/sys/contrib/dev/acpica/include/acmacros.h
@@ -403,6 +403,7 @@
 #define ACPI_ERROR_NAMESPACE(s, e)      AcpiNsReportError (AE_INFO, s, e);
 #define ACPI_ERROR_METHOD(s, n, p, e)   AcpiNsReportMethodError (AE_INFO, s, n, p, e);
 #define ACPI_WARN_PREDEFINED(plist)     AcpiUtPredefinedWarning plist
+#define ACPI_INFO_PREDEFINED(plist)     AcpiUtPredefinedInfo plist
 
 #else
 
@@ -411,6 +412,7 @@
 #define ACPI_ERROR_NAMESPACE(s, e)
 #define ACPI_ERROR_METHOD(s, n, p, e)
 #define ACPI_WARN_PREDEFINED(plist)
+#define ACPI_INFO_PREDEFINED(plist)
 
 #endif /* ACPI_NO_ERROR_MESSAGES */
 
diff --git a/sys/contrib/dev/acpica/include/acnamesp.h b/sys/contrib/dev/acpica/include/acnamesp.h
index ce0ba2aa08f..65798662d59 100644
--- a/sys/contrib/dev/acpica/include/acnamesp.h
+++ b/sys/contrib/dev/acpica/include/acnamesp.h
@@ -189,7 +189,8 @@ AcpiNsWalkNamespace (
     ACPI_HANDLE             StartObject,
     UINT32                  MaxDepth,
     UINT32                  Flags,
-    ACPI_WALK_CALLBACK      UserFunction,
+    ACPI_WALK_CALLBACK      PreOrderVisit,
+    ACPI_WALK_CALLBACK      PostOrderVisit,
     void                    *Context,
     void                    **ReturnValue);
 
@@ -428,7 +429,8 @@ AcpiNsGetAttachedData (
 
 
 /*
- * nsrepair - return object repair for predefined methods/objects
+ * nsrepair - General return object repair for all
+ * predefined methods/objects
  */
 ACPI_STATUS
 AcpiNsRepairObject (
@@ -443,6 +445,23 @@ AcpiNsRepairPackageList (
     ACPI_OPERAND_OBJECT     **ObjDescPtr);
 
 
+/*
+ * nsrepair2 - Return object repair for specific
+ * predefined methods/objects
+ */
+ACPI_STATUS
+AcpiNsComplexRepairs (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_NAMESPACE_NODE     *Node,
+    ACPI_STATUS             ValidateStatus,
+    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
+
+void
+AcpiNsRemoveNullElements (
+    ACPI_PREDEFINED_DATA    *Data,
+    UINT8                   PackageType,
+    ACPI_OPERAND_OBJECT     *ObjDesc);
+
 /*
  * nssearch - Namespace searching and entry
  */
@@ -528,13 +547,9 @@ AcpiNsExternalizeName (
     char                    **ConvertedName);
 
 ACPI_NAMESPACE_NODE *
-AcpiNsMapHandleToNode (
+AcpiNsValidateHandle (
     ACPI_HANDLE             Handle);
 
-ACPI_HANDLE
-AcpiNsConvertEntryToHandle(
-    ACPI_NAMESPACE_NODE     *Node);
-
 void
 AcpiNsTerminate (
     void);
diff --git a/sys/contrib/dev/acpica/include/acobject.h b/sys/contrib/dev/acpica/include/acobject.h
index 5a33fdcf7b9..76f623c83db 100644
--- a/sys/contrib/dev/acpica/include/acobject.h
+++ b/sys/contrib/dev/acpica/include/acobject.h
@@ -288,7 +288,12 @@ typedef struct acpi_object_method
     UINT8                           SyncLevel;
     union acpi_operand_object       *Mutex;
     UINT8                           *AmlStart;
-    ACPI_INTERNAL_METHOD            Implementation;
+    union
+    {
+        ACPI_INTERNAL_METHOD            Implementation;
+        union acpi_operand_object       *Handler;
+    } Extra;
+
     UINT32                          AmlLength;
     UINT8                           ThreadCount;
     ACPI_OWNER_ID                   OwnerId;
diff --git a/sys/contrib/dev/acpica/include/acoutput.h b/sys/contrib/dev/acpica/include/acoutput.h
index 2b796b541a6..4f4b1d9c69d 100644
--- a/sys/contrib/dev/acpica/include/acoutput.h
+++ b/sys/contrib/dev/acpica/include/acoutput.h
@@ -158,7 +158,8 @@
 #define ACPI_LV_INIT                0x00000001
 #define ACPI_LV_DEBUG_OBJECT        0x00000002
 #define ACPI_LV_INFO                0x00000004
-#define ACPI_LV_ALL_EXCEPTIONS      0x00000007
+#define ACPI_LV_REPAIR              0x00000008
+#define ACPI_LV_ALL_EXCEPTIONS      0x0000000F
 
 /* Trace verbosity level 1 [Standard Trace Level] */
 
@@ -217,6 +218,7 @@
 #define ACPI_DB_INIT                ACPI_DEBUG_LEVEL (ACPI_LV_INIT)
 #define ACPI_DB_DEBUG_OBJECT        ACPI_DEBUG_LEVEL (ACPI_LV_DEBUG_OBJECT)
 #define ACPI_DB_INFO                ACPI_DEBUG_LEVEL (ACPI_LV_INFO)
+#define ACPI_DB_REPAIR              ACPI_DEBUG_LEVEL (ACPI_LV_REPAIR)
 #define ACPI_DB_ALL_EXCEPTIONS      ACPI_DEBUG_LEVEL (ACPI_LV_ALL_EXCEPTIONS)
 
 /* Trace level -- also used in the global "DebugLevel" */
@@ -248,8 +250,8 @@
 
 /* Defaults for DebugLevel, debug and normal */
 
-#define ACPI_DEBUG_DEFAULT          (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT)
-#define ACPI_NORMAL_DEFAULT         (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT)
+#define ACPI_DEBUG_DEFAULT          (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR)
+#define ACPI_NORMAL_DEFAULT         (ACPI_LV_INIT | ACPI_LV_DEBUG_OBJECT | ACPI_LV_REPAIR)
 #define ACPI_DEBUG_ALL              (ACPI_LV_AML_DISASSEMBLE | ACPI_LV_ALL_EXCEPTIONS | ACPI_LV_ALL)
 
 
diff --git a/sys/contrib/dev/acpica/include/acpixf.h b/sys/contrib/dev/acpica/include/acpixf.h
index 6b2c2cecd58..979e221f924 100644
--- a/sys/contrib/dev/acpica/include/acpixf.h
+++ b/sys/contrib/dev/acpica/include/acpixf.h
@@ -120,7 +120,7 @@
 
 /* Current ACPICA subsystem version in YYYYMMDD format */
 
-#define ACPI_CA_VERSION                 0x20091013
+#define ACPI_CA_VERSION                 0x20091214
 
 #include 
 #include 
@@ -267,7 +267,8 @@ AcpiWalkNamespace (
     ACPI_OBJECT_TYPE        Type,
     ACPI_HANDLE             StartObject,
     UINT32                  MaxDepth,
-    ACPI_WALK_CALLBACK      UserFunction,
+    ACPI_WALK_CALLBACK      PreOrderVisit,
+    ACPI_WALK_CALLBACK      PostOrderVisit,
     void                    *Context,
     void                    **ReturnValue);
 
diff --git a/sys/contrib/dev/acpica/include/acutils.h b/sys/contrib/dev/acpica/include/acutils.h
index 33d33c2f478..3e12b7ca361 100644
--- a/sys/contrib/dev/acpica/include/acutils.h
+++ b/sys/contrib/dev/acpica/include/acutils.h
@@ -643,6 +643,10 @@ ACPI_OPERAND_OBJECT *
 AcpiUtCreatePackageObject (
     UINT32                  Count);
 
+ACPI_OPERAND_OBJECT *
+AcpiUtCreateIntegerObject (
+    UINT64                  Value);
+
 ACPI_OPERAND_OBJECT *
 AcpiUtCreateBufferObject (
     ACPI_SIZE               BufferSize);
@@ -795,6 +799,15 @@ AcpiUtPredefinedWarning (
     const char              *Format,
     ...);
 
+void ACPI_INTERNAL_VAR_XFACE
+AcpiUtPredefinedInfo (
+    const char              *ModuleName,
+    UINT32                  LineNumber,
+    char                    *Pathname,
+    UINT8                   NodeFlags,
+    const char              *Format,
+    ...);
+
 /* Values for Base above (16=Hex, 10=Decimal) */
 
 #define ACPI_ANY_BASE        0
diff --git a/sys/contrib/dev/acpica/namespace/nsaccess.c b/sys/contrib/dev/acpica/namespace/nsaccess.c
index b7bc11c1eb1..fc78917f7c4 100644
--- a/sys/contrib/dev/acpica/namespace/nsaccess.c
+++ b/sys/contrib/dev/acpica/namespace/nsaccess.c
@@ -251,7 +251,7 @@ AcpiNsRootInitialize (
                 /* Mark this as a very SPECIAL method */
 
                 ObjDesc->Method.MethodFlags = AML_METHOD_INTERNAL_ONLY;
-                ObjDesc->Method.Implementation = AcpiUtOsiImplementation;
+                ObjDesc->Method.Extra.Implementation = AcpiUtOsiImplementation;
 #endif
                 break;
 
diff --git a/sys/contrib/dev/acpica/namespace/nsdump.c b/sys/contrib/dev/acpica/namespace/nsdump.c
index 78b083fa992..b4badfeb889 100644
--- a/sys/contrib/dev/acpica/namespace/nsdump.c
+++ b/sys/contrib/dev/acpica/namespace/nsdump.c
@@ -286,7 +286,7 @@ AcpiNsDumpOneObject (
         return (AE_OK);
     }
 
-    ThisNode = AcpiNsMapHandleToNode (ObjHandle);
+    ThisNode = AcpiNsValidateHandle (ObjHandle);
     if (!ThisNode)
     {
         ACPI_DEBUG_PRINT ((ACPI_DB_INFO, "Invalid object handle %p\n",
@@ -736,7 +736,7 @@ AcpiNsDumpObjects (
 
     (void) AcpiNsWalkNamespace (Type, StartHandle, MaxDepth,
                 ACPI_NS_WALK_NO_UNLOCK | ACPI_NS_WALK_TEMP_NODES,
-                AcpiNsDumpOneObject, (void *) &Info, NULL);
+                AcpiNsDumpOneObject, NULL, (void *) &Info, NULL);
 }
 
 
diff --git a/sys/contrib/dev/acpica/namespace/nsdumpdv.c b/sys/contrib/dev/acpica/namespace/nsdumpdv.c
index ade6656ba6a..16eb774510f 100644
--- a/sys/contrib/dev/acpica/namespace/nsdumpdv.c
+++ b/sys/contrib/dev/acpica/namespace/nsdumpdv.c
@@ -225,7 +225,7 @@ AcpiNsDumpRootDevices (
 
     Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, SysBusHandle,
                 ACPI_UINT32_MAX, ACPI_NS_WALK_NO_UNLOCK,
-                AcpiNsDumpOneDevice, NULL, NULL);
+                AcpiNsDumpOneDevice, NULL, NULL, NULL);
 }
 
 #endif
diff --git a/sys/contrib/dev/acpica/namespace/nseval.c b/sys/contrib/dev/acpica/namespace/nseval.c
index 14201612423..d6b9a910f47 100644
--- a/sys/contrib/dev/acpica/namespace/nseval.c
+++ b/sys/contrib/dev/acpica/namespace/nseval.c
@@ -460,52 +460,99 @@ AcpiNsExecModuleCode (
     ACPI_OPERAND_OBJECT     *MethodObj,
     ACPI_EVALUATE_INFO      *Info)
 {
-    ACPI_OPERAND_OBJECT     *RootObj;
+    ACPI_OPERAND_OBJECT     *ParentObj;
+    ACPI_NAMESPACE_NODE     *ParentNode;
+    ACPI_OBJECT_TYPE        Type;
     ACPI_STATUS             Status;
 
 
     ACPI_FUNCTION_TRACE (NsExecModuleCode);
 
 
+    /*
+     * Get the parent node. We cheat by using the NextObject field
+     * of the method object descriptor.
+     */
+    ParentNode = ACPI_CAST_PTR (ACPI_NAMESPACE_NODE,
+                    MethodObj->Method.NextObject);
+    Type = AcpiNsGetType (ParentNode);
+
+    /*
+     * Get the region handler and save it in the method object. We may need
+     * this if an operation region declaration causes a _REG method to be run.
+     *
+     * We can't do this in AcpiPsLinkModuleCode because
+     * AcpiGbl_RootNode->Object is NULL at PASS1.
+     */
+    if ((Type == ACPI_TYPE_DEVICE) && ParentNode->Object)
+    {
+        MethodObj->Method.Extra.Handler =
+            ParentNode->Object->Device.Handler;
+    }
+
+    /* Must clear NextObject (AcpiNsAttachObject needs the field) */
+
+    MethodObj->Method.NextObject = NULL;
+
     /* Initialize the evaluation information block */
 
     ACPI_MEMSET (Info, 0, sizeof (ACPI_EVALUATE_INFO));
-    Info->PrefixNode = AcpiGbl_RootNode;
+    Info->PrefixNode = ParentNode;
 
     /*
-     * Get the currently attached root object. Add a reference, because the
+     * Get the currently attached parent object. Add a reference, because the
      * ref count will be decreased when the method object is installed to
-     * the root node.
+     * the parent node.
      */
-    RootObj = AcpiNsGetAttachedObject (AcpiGbl_RootNode);
-    AcpiUtAddReference (RootObj);
+    ParentObj = AcpiNsGetAttachedObject (ParentNode);
+    if (ParentObj)
+    {
+        AcpiUtAddReference (ParentObj);
+    }
 
-    /* Install the method (module-level code) in the root node */
+    /* Install the method (module-level code) in the parent node */
 
-    Status = AcpiNsAttachObject (AcpiGbl_RootNode, MethodObj,
+    Status = AcpiNsAttachObject (ParentNode, MethodObj,
                 ACPI_TYPE_METHOD);
     if (ACPI_FAILURE (Status))
     {
         goto Exit;
     }
 
-    /* Execute the root node as a control method */
+    /* Execute the parent node as a control method */
 
     Status = AcpiNsEvaluate (Info);
 
     ACPI_DEBUG_PRINT ((ACPI_DB_INIT, "Executed module-level code at %p\n",
         MethodObj->Method.AmlStart));
 
+    /* Delete a possible implicit return value (in slack mode) */
+
+    if (Info->ReturnObject)
+    {
+        AcpiUtRemoveReference (Info->ReturnObject);
+    }
+
     /* Detach the temporary method object */
 
-    AcpiNsDetachObject (AcpiGbl_RootNode);
+    AcpiNsDetachObject (ParentNode);
 
-    /* Restore the original root object */
+    /* Restore the original parent object */
 
-    Status = AcpiNsAttachObject (AcpiGbl_RootNode, RootObj, ACPI_TYPE_DEVICE);
+    if (ParentObj)
+    {
+        Status = AcpiNsAttachObject (ParentNode, ParentObj, Type);
+    }
+    else
+    {
+        ParentNode->Type = (UINT8) Type;
+    }
 
 Exit:
-    AcpiUtRemoveReference (RootObj);
+    if (ParentObj)
+    {
+        AcpiUtRemoveReference (ParentObj);
+    }
     return_VOID;
 }
 
diff --git a/sys/contrib/dev/acpica/namespace/nsinit.c b/sys/contrib/dev/acpica/namespace/nsinit.c
index 296d83da811..05f8f9612a9 100644
--- a/sys/contrib/dev/acpica/namespace/nsinit.c
+++ b/sys/contrib/dev/acpica/namespace/nsinit.c
@@ -185,7 +185,7 @@ AcpiNsInitializeObjects (
     /* Walk entire namespace from the supplied root */
 
     Status = AcpiWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
-                                ACPI_UINT32_MAX, AcpiNsInitOneObject,
+                                ACPI_UINT32_MAX, AcpiNsInitOneObject, NULL,
                                 &Info, NULL);
     if (ACPI_FAILURE (Status))
     {
@@ -249,7 +249,7 @@ AcpiNsInitializeDevices (
     /* Tree analysis: find all subtrees that contain _INI methods */
 
     Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
-                ACPI_UINT32_MAX, FALSE, AcpiNsFindIniMethods, &Info, NULL);
+                ACPI_UINT32_MAX, FALSE, AcpiNsFindIniMethods, NULL, &Info, NULL);
     if (ACPI_FAILURE (Status))
     {
         goto ErrorExit;
@@ -283,7 +283,7 @@ AcpiNsInitializeDevices (
     /* Walk namespace to execute all _INIs on present devices */
 
     Status = AcpiNsWalkNamespace (ACPI_TYPE_ANY, ACPI_ROOT_OBJECT,
-                ACPI_UINT32_MAX, FALSE, AcpiNsInitOneDevice, &Info, NULL);
+                ACPI_UINT32_MAX, FALSE, AcpiNsInitOneDevice, NULL, &Info, NULL);
 
     ACPI_FREE (Info.EvaluateInfo);
     if (ACPI_FAILURE (Status))
diff --git a/sys/contrib/dev/acpica/namespace/nsnames.c b/sys/contrib/dev/acpica/namespace/nsnames.c
index c299d7e747d..31a78f0c18f 100644
--- a/sys/contrib/dev/acpica/namespace/nsnames.c
+++ b/sys/contrib/dev/acpica/namespace/nsnames.c
@@ -337,7 +337,7 @@ AcpiNsHandleToPathname (
     ACPI_FUNCTION_TRACE_PTR (NsHandleToPathname, TargetHandle);
 
 
-    Node = AcpiNsMapHandleToNode (TargetHandle);
+    Node = AcpiNsValidateHandle (TargetHandle);
     if (!Node)
     {
         return_ACPI_STATUS (AE_BAD_PARAMETER);
diff --git a/sys/contrib/dev/acpica/namespace/nspredef.c b/sys/contrib/dev/acpica/namespace/nspredef.c
index 4eca9b88558..37cbe4ed5ae 100644
--- a/sys/contrib/dev/acpica/namespace/nspredef.c
+++ b/sys/contrib/dev/acpica/namespace/nspredef.c
@@ -313,25 +313,40 @@ AcpiNsCheckPredefinedNames (
     Data->Pathname = Pathname;
 
     /*
-     * Check that the type of the return object is what is expected for
-     * this predefined name
+     * Check that the type of the main return object is what is expected
+     * for this predefined name
      */
     Status = AcpiNsCheckObjectType (Data, ReturnObjectPtr,
                 Predefined->Info.ExpectedBtypes, ACPI_NOT_PACKAGE_ELEMENT);
     if (ACPI_FAILURE (Status))
     {
-        goto CheckValidationStatus;
+        goto Exit;
     }
 
-    /* For returned Package objects, check the type of all sub-objects */
-
-    if (ReturnObject->Common.Type == ACPI_TYPE_PACKAGE)
+    /*
+     * For returned Package objects, check the type of all sub-objects.
+     * Note: Package may have been newly created by call above.
+     */
+    if ((*ReturnObjectPtr)->Common.Type == ACPI_TYPE_PACKAGE)
     {
         Status = AcpiNsCheckPackage (Data, ReturnObjectPtr);
+        if (ACPI_FAILURE (Status))
+        {
+            goto Exit;
+        }
     }
 
+    /*
+     * The return object was OK, or it was successfully repaired above.
+     * Now make some additional checks such as verifying that package
+     * objects are sorted correctly (if required) or buffer objects have
+     * the correct data width (bytes vs. dwords). These repairs are
+     * performed on a per-name basis, i.e., the code is specific to
+     * particular predefined names.
+     */
+    Status = AcpiNsComplexRepairs (Data, Node, Status, ReturnObjectPtr);
 
-CheckValidationStatus:
+Exit:
     /*
      * If the object validation failed or if we successfully repaired one
      * or more objects, mark the parent node to suppress further warning
@@ -343,7 +358,6 @@ CheckValidationStatus:
     }
     ACPI_FREE (Data);
 
-
 Cleanup:
     ACPI_FREE (Pathname);
     return (Status);
@@ -538,6 +552,12 @@ AcpiNsCheckPackage (
         "%s Validating return Package of Type %X, Count %X\n",
         Data->Pathname, Package->RetInfo.Type, ReturnObject->Package.Count));
 
+    /*
+     * For variable-length Packages, we can safely remove all embedded
+     * and trailing NULL package elements
+     */
+    AcpiNsRemoveNullElements (Data, Package->RetInfo.Type, ReturnObject);
+
     /* Extract package count and elements array */
 
     Elements = ReturnObject->Package.Elements;
@@ -576,9 +596,10 @@ AcpiNsCheckPackage (
         }
         else if (Count > ExpectedCount)
         {
-            ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
-                "Return Package is larger than needed - "
-                "found %u, expected %u", Count, ExpectedCount));
+            ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
+                "%s: Return Package is larger than needed - "
+                "found %u, expected %u\n",
+                Data->Pathname, Count, ExpectedCount));
         }
 
         /* Validate all elements of the returned package */
@@ -719,7 +740,7 @@ AcpiNsCheckPackage (
          * there is only one entry). We may be able to repair this by
          * wrapping the returned Package with a new outer Package.
          */
-        if ((*Elements)->Common.Type != ACPI_TYPE_PACKAGE)
+        if (*Elements && ((*Elements)->Common.Type != ACPI_TYPE_PACKAGE))
         {
             /* Create the new outer package and populate it */
 
@@ -799,8 +820,13 @@ AcpiNsCheckPackageList (
     UINT32                      j;
 
 
-    /* Validate each sub-Package in the parent Package */
-
+    /*
+     * Validate each sub-Package in the parent Package
+     *
+     * NOTE: assumes list of sub-packages contains no NULL elements.
+     * Any NULL elements should have been removed by earlier call
+     * to AcpiNsRemoveNullElements.
+     */
     for (i = 0; i < Count; i++)
     {
         SubPackage = *Elements;
diff --git a/sys/contrib/dev/acpica/namespace/nsrepair.c b/sys/contrib/dev/acpica/namespace/nsrepair.c
index 714ccc81f75..1725b58ca57 100644
--- a/sys/contrib/dev/acpica/namespace/nsrepair.c
+++ b/sys/contrib/dev/acpica/namespace/nsrepair.c
@@ -119,12 +119,59 @@
 #include 
 #include 
 #include 
-#include 
 
 #define _COMPONENT          ACPI_NAMESPACE
         ACPI_MODULE_NAME    ("nsrepair")
 
 
+/*******************************************************************************
+ *
+ * This module attempts to repair or convert objects returned by the
+ * predefined methods to an object type that is expected, as per the ACPI
+ * specification. The need for this code is dictated by the many machines that
+ * return incorrect types for the standard predefined methods. Performing these
+ * conversions here, in one place, eliminates the need for individual ACPI
+ * device drivers to do the same. Note: Most of these conversions are different
+ * than the internal object conversion routines used for implicit object
+ * conversion.
+ *
+ * The following conversions can be performed as necessary:
+ *
+ * Integer -> String
+ * Integer -> Buffer
+ * String  -> Integer
+ * String  -> Buffer
+ * Buffer  -> Integer
+ * Buffer  -> String
+ * Buffer  -> Package of Integers
+ * Package -> Package of one Package
+ *
+ ******************************************************************************/
+
+
+/* Local prototypes */
+
+static ACPI_STATUS
+AcpiNsConvertToInteger (
+    ACPI_OPERAND_OBJECT     *OriginalObject,
+    ACPI_OPERAND_OBJECT     **ReturnObject);
+
+static ACPI_STATUS
+AcpiNsConvertToString (
+    ACPI_OPERAND_OBJECT     *OriginalObject,
+    ACPI_OPERAND_OBJECT     **ReturnObject);
+
+static ACPI_STATUS
+AcpiNsConvertToBuffer (
+    ACPI_OPERAND_OBJECT     *OriginalObject,
+    ACPI_OPERAND_OBJECT     **ReturnObject);
+
+static ACPI_STATUS
+AcpiNsConvertToPackage (
+    ACPI_OPERAND_OBJECT     *OriginalObject,
+    ACPI_OPERAND_OBJECT     **ReturnObject);
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiNsRepairObject
@@ -153,110 +200,57 @@ AcpiNsRepairObject (
 {
     ACPI_OPERAND_OBJECT     *ReturnObject = *ReturnObjectPtr;
     ACPI_OPERAND_OBJECT     *NewObject;
-    ACPI_SIZE               Length;
     ACPI_STATUS             Status;
 
 
+    ACPI_FUNCTION_NAME (NsRepairObject);
+
+
     /*
      * At this point, we know that the type of the returned object was not
      * one of the expected types for this predefined name. Attempt to
-     * repair the object. Only a limited number of repairs are possible.
+     * repair the object by converting it to one of the expected object
+     * types for this predefined name.
      */
-    switch (ReturnObject->Common.Type)
+    if (ExpectedBtypes & ACPI_RTYPE_INTEGER)
     {
-    case ACPI_TYPE_BUFFER:
-
-        /* Does the method/object legally return a string? */
-
-        if (!(ExpectedBtypes & ACPI_RTYPE_STRING))
+        Status = AcpiNsConvertToInteger (ReturnObject, &NewObject);
+        if (ACPI_SUCCESS (Status))
         {
-            return (AE_AML_OPERAND_TYPE);
+            goto ObjectRepaired;
         }
-
-        /*
-         * Have a Buffer, expected a String, convert. Use a ToString
-         * conversion, no transform performed on the buffer data. The best
-         * example of this is the _BIF method, where the string data from
-         * the battery is often (incorrectly) returned as buffer object(s).
-         */
-        Length = 0;
-        while ((Length < ReturnObject->Buffer.Length) &&
-                (ReturnObject->Buffer.Pointer[Length]))
-        {
-            Length++;
-        }
-
-        /* Allocate a new string object */
-
-        NewObject = AcpiUtCreateStringObject (Length);
-        if (!NewObject)
-        {
-            return (AE_NO_MEMORY);
-        }
-
-        /*
-         * Copy the raw buffer data with no transform. String is already NULL
-         * terminated at Length+1.
-         */
-        ACPI_MEMCPY (NewObject->String.Pointer,
-            ReturnObject->Buffer.Pointer, Length);
-        break;
-
-
-    case ACPI_TYPE_INTEGER:
-
-        /* 1) Does the method/object legally return a buffer? */
-
-        if (ExpectedBtypes & ACPI_RTYPE_BUFFER)
-        {
-            /*
-             * Convert the Integer to a packed-byte buffer. _MAT needs
-             * this sometimes, if a read has been performed on a Field
-             * object that is less than or equal to the global integer
-             * size (32 or 64 bits).
-             */
-            Status = AcpiExConvertToBuffer (ReturnObject, &NewObject);
-            if (ACPI_FAILURE (Status))
-            {
-                return (Status);
-            }
-        }
-
-        /* 2) Does the method/object legally return a string? */
-
-        else if (ExpectedBtypes & ACPI_RTYPE_STRING)
-        {
-            /*
-             * The only supported Integer-to-String conversion is to convert
-             * an integer of value 0 to a NULL string. The last element of
-             * _BIF and _BIX packages occasionally need this fix.
-             */
-            if (ReturnObject->Integer.Value != 0)
-            {
-                return (AE_AML_OPERAND_TYPE);
-            }
-
-            /* Allocate a new NULL string object */
-
-            NewObject = AcpiUtCreateStringObject (0);
-            if (!NewObject)
-            {
-                return (AE_NO_MEMORY);
-            }
-        }
-        else
-        {
-            return (AE_AML_OPERAND_TYPE);
-        }
-        break;
-
-
-    default:
-
-        /* We cannot repair this object */
-
-        return (AE_AML_OPERAND_TYPE);
     }
+    if (ExpectedBtypes & ACPI_RTYPE_STRING)
+    {
+        Status = AcpiNsConvertToString (ReturnObject, &NewObject);
+        if (ACPI_SUCCESS (Status))
+        {
+            goto ObjectRepaired;
+        }
+    }
+    if (ExpectedBtypes & ACPI_RTYPE_BUFFER)
+    {
+        Status = AcpiNsConvertToBuffer (ReturnObject, &NewObject);
+        if (ACPI_SUCCESS (Status))
+        {
+            goto ObjectRepaired;
+        }
+    }
+    if (ExpectedBtypes & ACPI_RTYPE_PACKAGE)
+    {
+        Status = AcpiNsConvertToPackage (ReturnObject, &NewObject);
+        if (ACPI_SUCCESS (Status))
+        {
+            goto ObjectRepaired;
+        }
+    }
+
+    /* We cannot repair this object */
+
+    return (AE_AML_OPERAND_TYPE);
+
+
+ObjectRepaired:
 
     /* Object was successfully repaired */
 
@@ -276,16 +270,16 @@ AcpiNsRepairObject (
             ReturnObject->Common.ReferenceCount--;
         }
 
-        ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
-            "Converted %s to expected %s at index %u",
-            AcpiUtGetObjectTypeName (ReturnObject),
+        ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
+            "%s: Converted %s to expected %s at index %u\n",
+            Data->Pathname, AcpiUtGetObjectTypeName (ReturnObject),
             AcpiUtGetObjectTypeName (NewObject), PackageIndex));
     }
     else
     {
-        ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
-            "Converted %s to expected %s",
-            AcpiUtGetObjectTypeName (ReturnObject),
+        ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
+            "%s: Converted %s to expected %s\n",
+            Data->Pathname, AcpiUtGetObjectTypeName (ReturnObject),
             AcpiUtGetObjectTypeName (NewObject)));
     }
 
@@ -298,6 +292,341 @@ AcpiNsRepairObject (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiNsConvertToInteger
+ *
+ * PARAMETERS:  OriginalObject      - Object to be converted
+ *              ReturnObject        - Where the new converted object is returned
+ *
+ * RETURN:      Status. AE_OK if conversion was successful.
+ *
+ * DESCRIPTION: Attempt to convert a String/Buffer object to an Integer.
+ *
+ ******************************************************************************/
+
+static ACPI_STATUS
+AcpiNsConvertToInteger (
+    ACPI_OPERAND_OBJECT     *OriginalObject,
+    ACPI_OPERAND_OBJECT     **ReturnObject)
+{
+    ACPI_OPERAND_OBJECT     *NewObject;
+    ACPI_STATUS             Status;
+    UINT64                  Value = 0;
+    UINT32                  i;
+
+
+    switch (OriginalObject->Common.Type)
+    {
+    case ACPI_TYPE_STRING:
+
+        /* String-to-Integer conversion */
+
+        Status = AcpiUtStrtoul64 (OriginalObject->String.Pointer,
+                    ACPI_ANY_BASE, &Value);
+        if (ACPI_FAILURE (Status))
+        {
+            return (Status);
+        }
+        break;
+
+    case ACPI_TYPE_BUFFER:
+
+        /* Buffer-to-Integer conversion. Max buffer size is 64 bits. */
+
+        if (OriginalObject->Buffer.Length > 8)
+        {
+            return (AE_AML_OPERAND_TYPE);
+        }
+
+        /* Extract each buffer byte to create the integer */
+
+        for (i = 0; i < OriginalObject->Buffer.Length; i++)
+        {
+            Value |= ((UINT64) OriginalObject->Buffer.Pointer[i] << (i * 8));
+        }
+        break;
+
+    default:
+        return (AE_AML_OPERAND_TYPE);
+    }
+
+    NewObject = AcpiUtCreateIntegerObject (Value);
+    if (!NewObject)
+    {
+        return (AE_NO_MEMORY);
+    }
+
+    *ReturnObject = NewObject;
+    return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiNsConvertToString
+ *
+ * PARAMETERS:  OriginalObject      - Object to be converted
+ *              ReturnObject        - Where the new converted object is returned
+ *
+ * RETURN:      Status. AE_OK if conversion was successful.
+ *
+ * DESCRIPTION: Attempt to convert a Integer/Buffer object to a String.
+ *
+ ******************************************************************************/
+
+static ACPI_STATUS
+AcpiNsConvertToString (
+    ACPI_OPERAND_OBJECT     *OriginalObject,
+    ACPI_OPERAND_OBJECT     **ReturnObject)
+{
+    ACPI_OPERAND_OBJECT     *NewObject;
+    ACPI_SIZE               Length;
+    ACPI_STATUS             Status;
+
+
+    switch (OriginalObject->Common.Type)
+    {
+    case ACPI_TYPE_INTEGER:
+        /*
+         * Integer-to-String conversion. Commonly, convert
+         * an integer of value 0 to a NULL string. The last element of
+         * _BIF and _BIX packages occasionally need this fix.
+         */
+        if (OriginalObject->Integer.Value == 0)
+        {
+            /* Allocate a new NULL string object */
+
+            NewObject = AcpiUtCreateStringObject (0);
+            if (!NewObject)
+            {
+                return (AE_NO_MEMORY);
+            }
+        }
+        else
+        {
+            Status = AcpiExConvertToString (OriginalObject, &NewObject,
+                        ACPI_IMPLICIT_CONVERT_HEX);
+            if (ACPI_FAILURE (Status))
+            {
+                return (Status);
+            }
+        }
+        break;
+
+    case ACPI_TYPE_BUFFER:
+        /*
+         * Buffer-to-String conversion. Use a ToString
+         * conversion, no transform performed on the buffer data. The best
+         * example of this is the _BIF method, where the string data from
+         * the battery is often (incorrectly) returned as buffer object(s).
+         */
+        Length = 0;
+        while ((Length < OriginalObject->Buffer.Length) &&
+                (OriginalObject->Buffer.Pointer[Length]))
+        {
+            Length++;
+        }
+
+        /* Allocate a new string object */
+
+        NewObject = AcpiUtCreateStringObject (Length);
+        if (!NewObject)
+        {
+            return (AE_NO_MEMORY);
+        }
+
+        /*
+         * Copy the raw buffer data with no transform. String is already NULL
+         * terminated at Length+1.
+         */
+        ACPI_MEMCPY (NewObject->String.Pointer,
+            OriginalObject->Buffer.Pointer, Length);
+        break;
+
+    default:
+        return (AE_AML_OPERAND_TYPE);
+    }
+
+    *ReturnObject = NewObject;
+    return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiNsConvertToBuffer
+ *
+ * PARAMETERS:  OriginalObject      - Object to be converted
+ *              ReturnObject        - Where the new converted object is returned
+ *
+ * RETURN:      Status. AE_OK if conversion was successful.
+ *
+ * DESCRIPTION: Attempt to convert a Integer/String/Package object to a Buffer.
+ *
+ ******************************************************************************/
+
+static ACPI_STATUS
+AcpiNsConvertToBuffer (
+    ACPI_OPERAND_OBJECT     *OriginalObject,
+    ACPI_OPERAND_OBJECT     **ReturnObject)
+{
+    ACPI_OPERAND_OBJECT     *NewObject;
+    ACPI_STATUS             Status;
+    ACPI_OPERAND_OBJECT     **Elements;
+    UINT32                  *DwordBuffer;
+    UINT32                  Count;
+    UINT32                  i;
+
+
+    switch (OriginalObject->Common.Type)
+    {
+    case ACPI_TYPE_INTEGER:
+        /*
+         * Integer-to-Buffer conversion.
+         * Convert the Integer to a packed-byte buffer. _MAT and other
+         * objects need this sometimes, if a read has been performed on a
+         * Field object that is less than or equal to the global integer
+         * size (32 or 64 bits).
+         */
+        Status = AcpiExConvertToBuffer (OriginalObject, &NewObject);
+        if (ACPI_FAILURE (Status))
+        {
+            return (Status);
+        }
+        break;
+
+    case ACPI_TYPE_STRING:
+
+        /* String-to-Buffer conversion. Simple data copy */
+
+        NewObject = AcpiUtCreateBufferObject (OriginalObject->String.Length);
+        if (!NewObject)
+        {
+            return (AE_NO_MEMORY);
+        }
+
+        ACPI_MEMCPY (NewObject->Buffer.Pointer,
+            OriginalObject->String.Pointer, OriginalObject->String.Length);
+        break;
+
+    case ACPI_TYPE_PACKAGE:
+        /*
+         * This case is often seen for predefined names that must return a
+         * Buffer object with multiple DWORD integers within. For example,
+         * _FDE and _GTM. The Package can be converted to a Buffer.
+         */
+
+        /* All elements of the Package must be integers */
+
+        Elements = OriginalObject->Package.Elements;
+        Count = OriginalObject->Package.Count;
+
+        for (i = 0; i < Count; i++)
+        {
+            if ((!*Elements) ||
+                ((*Elements)->Common.Type != ACPI_TYPE_INTEGER))
+            {
+                return (AE_AML_OPERAND_TYPE);
+            }
+            Elements++;
+        }
+
+        /* Create the new buffer object to replace the Package */
+
+        NewObject = AcpiUtCreateBufferObject (ACPI_MUL_4 (Count));
+        if (!NewObject)
+        {
+            return (AE_NO_MEMORY);
+        }
+
+        /* Copy the package elements (integers) to the buffer as DWORDs */
+
+        Elements = OriginalObject->Package.Elements;
+        DwordBuffer = ACPI_CAST_PTR (UINT32, NewObject->Buffer.Pointer);
+
+        for (i = 0; i < Count; i++)
+        {
+            *DwordBuffer = (UINT32) (*Elements)->Integer.Value;
+            DwordBuffer++;
+            Elements++;
+        }
+        break;
+
+    default:
+        return (AE_AML_OPERAND_TYPE);
+    }
+
+    *ReturnObject = NewObject;
+    return (AE_OK);
+}
+
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiNsConvertToPackage
+ *
+ * PARAMETERS:  OriginalObject      - Object to be converted
+ *              ReturnObject        - Where the new converted object is returned
+ *
+ * RETURN:      Status. AE_OK if conversion was successful.
+ *
+ * DESCRIPTION: Attempt to convert a Buffer object to a Package. Each byte of
+ *              the buffer is converted to a single integer package element.
+ *
+ ******************************************************************************/
+
+static ACPI_STATUS
+AcpiNsConvertToPackage (
+    ACPI_OPERAND_OBJECT     *OriginalObject,
+    ACPI_OPERAND_OBJECT     **ReturnObject)
+{
+    ACPI_OPERAND_OBJECT     *NewObject;
+    ACPI_OPERAND_OBJECT     **Elements;
+    UINT32                  Length;
+    UINT8                   *Buffer;
+
+
+    switch (OriginalObject->Common.Type)
+    {
+    case ACPI_TYPE_BUFFER:
+
+        /* Buffer-to-Package conversion */
+
+        Length = OriginalObject->Buffer.Length;
+        NewObject = AcpiUtCreatePackageObject (Length);
+        if (!NewObject)
+        {
+            return (AE_NO_MEMORY);
+        }
+
+        /* Convert each buffer byte to an integer package element */
+
+        Elements = NewObject->Package.Elements;
+        Buffer = OriginalObject->Buffer.Pointer;
+
+        while (Length--)
+        {
+            *Elements = AcpiUtCreateIntegerObject ((UINT64) *Buffer);
+            if (!*Elements)
+            {
+                AcpiUtRemoveReference (NewObject);
+                return (AE_NO_MEMORY);
+            }
+            Elements++;
+            Buffer++;
+        }
+        break;
+
+    default:
+        return (AE_AML_OPERAND_TYPE);
+    }
+
+    *ReturnObject = NewObject;
+    return (AE_OK);
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiNsRepairPackageList
@@ -330,6 +659,9 @@ AcpiNsRepairPackageList (
     ACPI_OPERAND_OBJECT     *PkgObjDesc;
 
 
+    ACPI_FUNCTION_NAME (NsRepairPackageList);
+
+
     /*
      * Create the new outer package and populate it. The new package will
      * have a single element, the lone subpackage.
@@ -347,8 +679,8 @@ AcpiNsRepairPackageList (
     *ObjDescPtr = PkgObjDesc;
     Data->Flags |= ACPI_OBJECT_REPAIRED;
 
-    ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
-        "Incorrectly formed Package, attempting repair"));
+    ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
+        "%s: Repaired incorrectly formed Package\n", Data->Pathname));
 
     return (AE_OK);
 }
diff --git a/sys/contrib/dev/acpica/namespace/nsrepair2.c b/sys/contrib/dev/acpica/namespace/nsrepair2.c
new file mode 100644
index 00000000000..a28e9d77429
--- /dev/null
+++ b/sys/contrib/dev/acpica/namespace/nsrepair2.c
@@ -0,0 +1,796 @@
+/******************************************************************************
+ *
+ * Module Name: nsrepair2 - Repair for objects returned by specific
+ *                          predefined methods
+ *
+ *****************************************************************************/
+
+/******************************************************************************
+ *
+ * 1. Copyright Notice
+ *
+ * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
+ * All rights reserved.
+ *
+ * 2. License
+ *
+ * 2.1. This is your license from Intel Corp. under its intellectual property
+ * rights.  You may have additional license terms from the party that provided
+ * you this software, covering your right to use that party's intellectual
+ * property rights.
+ *
+ * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
+ * copy of the source code appearing in this file ("Covered Code") an
+ * irrevocable, perpetual, worldwide license under Intel's copyrights in the
+ * base code distributed originally by Intel ("Original Intel Code") to copy,
+ * make derivatives, distribute, use and display any portion of the Covered
+ * Code in any form, with the right to sublicense such rights; and
+ *
+ * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
+ * license (with the right to sublicense), under only those claims of Intel
+ * patents that are infringed by the Original Intel Code, to make, use, sell,
+ * offer to sell, and import the Covered Code and derivative works thereof
+ * solely to the minimum extent necessary to exercise the above copyright
+ * license, and in no event shall the patent license extend to any additions
+ * to or modifications of the Original Intel Code.  No other license or right
+ * is granted directly or by implication, estoppel or otherwise;
+ *
+ * The above copyright and patent license is granted only if the following
+ * conditions are met:
+ *
+ * 3. Conditions
+ *
+ * 3.1. Redistribution of Source with Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification with rights to further distribute source must include
+ * the above Copyright Notice, the above License, this list of Conditions,
+ * and the following Disclaimer and Export Compliance provision.  In addition,
+ * Licensee must cause all Covered Code to which Licensee contributes to
+ * contain a file documenting the changes Licensee made to create that Covered
+ * Code and the date of any change.  Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee.  Licensee
+ * must include a prominent statement that the modification is derived,
+ * directly or indirectly, from Original Intel Code.
+ *
+ * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
+ * Redistribution of source code of any substantial portion of the Covered
+ * Code or modification without rights to further distribute source must
+ * include the following Disclaimer and Export Compliance provision in the
+ * documentation and/or other materials provided with distribution.  In
+ * addition, Licensee may not authorize further sublicense of source of any
+ * portion of the Covered Code, and must include terms to the effect that the
+ * license from Licensee to its licensee is limited to the intellectual
+ * property embodied in the software Licensee provides to its licensee, and
+ * not to intellectual property embodied in modifications its licensee may
+ * make.
+ *
+ * 3.3. Redistribution of Executable. Redistribution in executable form of any
+ * substantial portion of the Covered Code or modification must reproduce the
+ * above Copyright Notice, and the following Disclaimer and Export Compliance
+ * provision in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3.4. Intel retains all right, title, and interest in and to the Original
+ * Intel Code.
+ *
+ * 3.5. Neither the name Intel nor any other trademark owned or controlled by
+ * Intel shall be used in advertising or otherwise to promote the sale, use or
+ * other dealings in products derived from or relating to the Covered Code
+ * without prior written authorization from Intel.
+ *
+ * 4. Disclaimer and Export Compliance
+ *
+ * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
+ * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
+ * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
+ * PARTICULAR PURPOSE.
+ *
+ * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
+ * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
+ * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
+ * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
+ * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
+ * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
+ * LIMITED REMEDY.
+ *
+ * 4.3. Licensee shall not export, either directly or indirectly, any of this
+ * software or system incorporating such software without first obtaining any
+ * required license or other approval from the U. S. Department of Commerce or
+ * any other agency or department of the United States Government.  In the
+ * event Licensee exports any such software from the United States or
+ * re-exports any such software from a foreign destination, Licensee shall
+ * ensure that the distribution and export/re-export of the software is in
+ * compliance with all laws, regulations, orders, or other restrictions of the
+ * U.S. Export Administration Regulations. Licensee agrees that neither it nor
+ * any of its subsidiaries will export/re-export any technical data, process,
+ * software, or service, directly or indirectly, to any country for which the
+ * United States government or any agency thereof requires an export license,
+ * other governmental approval, or letter of assurance, without first obtaining
+ * such license, approval or letter.
+ *
+ *****************************************************************************/
+
+#define __NSREPAIR2_C__
+
+#include 
+#include 
+#include 
+#include 
+
+#define _COMPONENT          ACPI_NAMESPACE
+        ACPI_MODULE_NAME    ("nsrepair2")
+
+
+/*
+ * Information structure and handler for ACPI predefined names that can
+ * be repaired on a per-name basis.
+ */
+typedef
+ACPI_STATUS (*ACPI_REPAIR_FUNCTION) (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
+
+typedef struct acpi_repair_info
+{
+    char                    Name[ACPI_NAME_SIZE];
+    ACPI_REPAIR_FUNCTION    RepairFunction;
+
+} ACPI_REPAIR_INFO;
+
+
+/* Local prototypes */
+
+static const ACPI_REPAIR_INFO *
+AcpiNsMatchRepairableName (
+    ACPI_NAMESPACE_NODE     *Node);
+
+static ACPI_STATUS
+AcpiNsRepair_ALR (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
+
+static ACPI_STATUS
+AcpiNsRepair_FDE (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
+
+static ACPI_STATUS
+AcpiNsRepair_PSS (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
+
+static ACPI_STATUS
+AcpiNsRepair_TSS (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_OPERAND_OBJECT     **ReturnObjectPtr);
+
+static ACPI_STATUS
+AcpiNsCheckSortedList (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_OPERAND_OBJECT     *ReturnObject,
+    UINT32                  ExpectedCount,
+    UINT32                  SortIndex,
+    UINT8                   SortDirection,
+    char                    *SortKeyName);
+
+static ACPI_STATUS
+AcpiNsSortList (
+    ACPI_OPERAND_OBJECT     **Elements,
+    UINT32                  Count,
+    UINT32                  Index,
+    UINT8                   SortDirection);
+
+/* Values for SortDirection above */
+
+#define ACPI_SORT_ASCENDING     0
+#define ACPI_SORT_DESCENDING    1
+
+
+/*
+ * This table contains the names of the predefined methods for which we can
+ * perform more complex repairs.
+ *
+ * As necessary:
+ *
+ * _ALR: Sort the list ascending by AmbientIlluminance
+ * _FDE: Convert Buffer of BYTEs to a Buffer of DWORDs
+ * _GTM: Convert Buffer of BYTEs to a Buffer of DWORDs
+ * _PSS: Sort the list descending by Power
+ * _TSS: Sort the list descending by Power
+ */
+static const ACPI_REPAIR_INFO       AcpiNsRepairableNames[] =
+{
+    {"_ALR", AcpiNsRepair_ALR},
+    {"_FDE", AcpiNsRepair_FDE},
+    {"_GTM", AcpiNsRepair_FDE},     /* _GTM has same repair as _FDE */
+    {"_PSS", AcpiNsRepair_PSS},
+    {"_TSS", AcpiNsRepair_TSS},
+    {{0,0,0,0}, NULL}               /* Table terminator */
+};
+
+
+#define ACPI_FDE_FIELD_COUNT        5
+#define ACPI_FDE_BYTE_BUFFER_SIZE   5
+#define ACPI_FDE_DWORD_BUFFER_SIZE  (ACPI_FDE_FIELD_COUNT * sizeof (UINT32))
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiNsComplexRepairs
+ *
+ * PARAMETERS:  Data                - Pointer to validation data structure
+ *              Node                - Namespace node for the method/object
+ *              ValidateStatus      - Original status of earlier validation
+ *              ReturnObjectPtr     - Pointer to the object returned from the
+ *                                    evaluation of a method or object
+ *
+ * RETURN:      Status. AE_OK if repair was successful. If name is not
+ *              matched, ValidateStatus is returned.
+ *
+ * DESCRIPTION: Attempt to repair/convert a return object of a type that was
+ *              not expected.
+ *
+ *****************************************************************************/
+
+ACPI_STATUS
+AcpiNsComplexRepairs (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_NAMESPACE_NODE     *Node,
+    ACPI_STATUS             ValidateStatus,
+    ACPI_OPERAND_OBJECT     **ReturnObjectPtr)
+{
+    const ACPI_REPAIR_INFO  *Predefined;
+    ACPI_STATUS             Status;
+
+
+    /* Check if this name is in the list of repairable names */
+
+    Predefined = AcpiNsMatchRepairableName (Node);
+    if (!Predefined)
+    {
+        return (ValidateStatus);
+    }
+
+    Status = Predefined->RepairFunction (Data, ReturnObjectPtr);
+    return (Status);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiNsMatchRepairableName
+ *
+ * PARAMETERS:  Node                - Namespace node for the method/object
+ *
+ * RETURN:      Pointer to entry in repair table. NULL indicates not found.
+ *
+ * DESCRIPTION: Check an object name against the repairable object list.
+ *
+ *****************************************************************************/
+
+static const ACPI_REPAIR_INFO *
+AcpiNsMatchRepairableName (
+    ACPI_NAMESPACE_NODE     *Node)
+{
+    const ACPI_REPAIR_INFO  *ThisName;
+
+
+    /* Search info table for a repairable predefined method/object name */
+
+    ThisName = AcpiNsRepairableNames;
+    while (ThisName->RepairFunction)
+    {
+        if (ACPI_COMPARE_NAME (Node->Name.Ascii, ThisName->Name))
+        {
+            return (ThisName);
+        }
+        ThisName++;
+    }
+
+    return (NULL); /* Not found */
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiNsRepair_ALR
+ *
+ * PARAMETERS:  Data                - Pointer to validation data structure
+ *              ReturnObjectPtr     - Pointer to the object returned from the
+ *                                    evaluation of a method or object
+ *
+ * RETURN:      Status. AE_OK if object is OK or was repaired successfully
+ *
+ * DESCRIPTION: Repair for the _ALR object. If necessary, sort the object list
+ *              ascending by the ambient illuminance values.
+ *
+ *****************************************************************************/
+
+static ACPI_STATUS
+AcpiNsRepair_ALR (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_OPERAND_OBJECT     **ReturnObjectPtr)
+{
+    ACPI_OPERAND_OBJECT     *ReturnObject = *ReturnObjectPtr;
+    ACPI_STATUS             Status;
+
+
+    Status = AcpiNsCheckSortedList (Data, ReturnObject, 2, 1,
+                ACPI_SORT_ASCENDING, "AmbientIlluminance");
+
+    return (Status);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiNsRepair_FDE
+ *
+ * PARAMETERS:  Data                - Pointer to validation data structure
+ *              ReturnObjectPtr     - Pointer to the object returned from the
+ *                                    evaluation of a method or object
+ *
+ * RETURN:      Status. AE_OK if object is OK or was repaired successfully
+ *
+ * DESCRIPTION: Repair for the _FDE and _GTM objects. The expected return
+ *              value is a Buffer of 5 DWORDs. This function repairs a common
+ *              problem where the return value is a Buffer of BYTEs, not
+ *              DWORDs.
+ *
+ *****************************************************************************/
+
+static ACPI_STATUS
+AcpiNsRepair_FDE (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_OPERAND_OBJECT     **ReturnObjectPtr)
+{
+    ACPI_OPERAND_OBJECT     *ReturnObject = *ReturnObjectPtr;
+    ACPI_OPERAND_OBJECT     *BufferObject;
+    UINT8                   *ByteBuffer;
+    UINT32                  *DwordBuffer;
+    UINT32                  i;
+
+
+    ACPI_FUNCTION_NAME (NsRepair_FDE);
+
+
+    switch (ReturnObject->Common.Type)
+    {
+    case ACPI_TYPE_BUFFER:
+
+        /* This is the expected type. Length should be (at least) 5 DWORDs */
+
+        if (ReturnObject->Buffer.Length >= ACPI_FDE_DWORD_BUFFER_SIZE)
+        {
+            return (AE_OK);
+        }
+
+        /* We can only repair if we have exactly 5 BYTEs */
+
+        if (ReturnObject->Buffer.Length != ACPI_FDE_BYTE_BUFFER_SIZE)
+        {
+            ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
+                "Incorrect return buffer length %u, expected %u",
+                ReturnObject->Buffer.Length, ACPI_FDE_DWORD_BUFFER_SIZE));
+
+            return (AE_AML_OPERAND_TYPE);
+        }
+
+        /* Create the new (larger) buffer object */
+
+        BufferObject = AcpiUtCreateBufferObject (ACPI_FDE_DWORD_BUFFER_SIZE);
+        if (!BufferObject)
+        {
+            return (AE_NO_MEMORY);
+        }
+
+        /* Expand each byte to a DWORD */
+
+        ByteBuffer = ReturnObject->Buffer.Pointer;
+        DwordBuffer = ACPI_CAST_PTR (UINT32, BufferObject->Buffer.Pointer);
+
+        for (i = 0; i < ACPI_FDE_FIELD_COUNT; i++)
+        {
+            *DwordBuffer = (UINT32) *ByteBuffer;
+            DwordBuffer++;
+            ByteBuffer++;
+        }
+
+        ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
+            "%s Expanded Byte Buffer to expected DWord Buffer\n",
+            Data->Pathname));
+        break;
+
+    default:
+        return (AE_AML_OPERAND_TYPE);
+    }
+
+    /* Delete the original return object, return the new buffer object */
+
+    AcpiUtRemoveReference (ReturnObject);
+    *ReturnObjectPtr = BufferObject;
+
+    Data->Flags |= ACPI_OBJECT_REPAIRED;
+    return (AE_OK);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiNsRepair_TSS
+ *
+ * PARAMETERS:  Data                - Pointer to validation data structure
+ *              ReturnObjectPtr     - Pointer to the object returned from the
+ *                                    evaluation of a method or object
+ *
+ * RETURN:      Status. AE_OK if object is OK or was repaired successfully
+ *
+ * DESCRIPTION: Repair for the _TSS object. If necessary, sort the object list
+ *              descending by the power dissipation values.
+ *
+ *****************************************************************************/
+
+static ACPI_STATUS
+AcpiNsRepair_TSS (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_OPERAND_OBJECT     **ReturnObjectPtr)
+{
+    ACPI_OPERAND_OBJECT     *ReturnObject = *ReturnObjectPtr;
+    ACPI_STATUS             Status;
+
+
+    Status = AcpiNsCheckSortedList (Data, ReturnObject, 5, 1,
+                ACPI_SORT_DESCENDING, "PowerDissipation");
+
+    return (Status);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiNsRepair_PSS
+ *
+ * PARAMETERS:  Data                - Pointer to validation data structure
+ *              ReturnObjectPtr     - Pointer to the object returned from the
+ *                                    evaluation of a method or object
+ *
+ * RETURN:      Status. AE_OK if object is OK or was repaired successfully
+ *
+ * DESCRIPTION: Repair for the _PSS object. If necessary, sort the object list
+ *              by the CPU frequencies. Check that the power dissipation values
+ *              are all proportional to CPU frequency (i.e., sorting by
+ *              frequency should be the same as sorting by power.)
+ *
+ *****************************************************************************/
+
+static ACPI_STATUS
+AcpiNsRepair_PSS (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_OPERAND_OBJECT     **ReturnObjectPtr)
+{
+    ACPI_OPERAND_OBJECT     *ReturnObject = *ReturnObjectPtr;
+    ACPI_OPERAND_OBJECT     **OuterElements;
+    UINT32                  OuterElementCount;
+    ACPI_OPERAND_OBJECT     **Elements;
+    ACPI_OPERAND_OBJECT     *ObjDesc;
+    UINT32                  PreviousValue;
+    ACPI_STATUS             Status;
+    UINT32                  i;
+
+
+    /*
+     * Entries (sub-packages) in the _PSS Package must be sorted by power
+     * dissipation, in descending order. If it appears that the list is
+     * incorrectly sorted, sort it. We sort by CpuFrequency, since this
+     * should be proportional to the power.
+     */
+    Status =AcpiNsCheckSortedList (Data, ReturnObject, 6, 0,
+                ACPI_SORT_DESCENDING, "CpuFrequency");
+    if (ACPI_FAILURE (Status))
+    {
+        return (Status);
+    }
+
+    /*
+     * We now know the list is correctly sorted by CPU frequency. Check if
+     * the power dissipation values are proportional.
+     */
+    PreviousValue = ACPI_UINT32_MAX;
+    OuterElements = ReturnObject->Package.Elements;
+    OuterElementCount = ReturnObject->Package.Count;
+
+    for (i = 0; i < OuterElementCount; i++)
+    {
+        Elements = (*OuterElements)->Package.Elements;
+        ObjDesc = Elements[1]; /* Index1 = PowerDissipation */
+
+        if ((UINT32) ObjDesc->Integer.Value > PreviousValue)
+        {
+            ACPI_WARN_PREDEFINED ((AE_INFO, Data->Pathname, Data->NodeFlags,
+                "SubPackage[%u,%u] - suspicious power dissipation values",
+                i-1, i));
+        }
+
+        PreviousValue = (UINT32) ObjDesc->Integer.Value;
+        OuterElements++;
+    }
+
+    return (AE_OK);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiNsCheckSortedList
+ *
+ * PARAMETERS:  Data                - Pointer to validation data structure
+ *              ReturnObject        - Pointer to the top-level returned object
+ *              ExpectedCount       - Minimum length of each sub-package
+ *              SortIndex           - Sub-package entry to sort on
+ *              SortDirection       - Ascending or descending
+ *              SortKeyName         - Name of the SortIndex field
+ *
+ * RETURN:      Status. AE_OK if the list is valid and is sorted correctly or
+ *              has been repaired by sorting the list.
+ *
+ * DESCRIPTION: Check if the package list is valid and sorted correctly by the
+ *              SortIndex. If not, then sort the list.
+ *
+ *****************************************************************************/
+
+static ACPI_STATUS
+AcpiNsCheckSortedList (
+    ACPI_PREDEFINED_DATA    *Data,
+    ACPI_OPERAND_OBJECT     *ReturnObject,
+    UINT32                  ExpectedCount,
+    UINT32                  SortIndex,
+    UINT8                   SortDirection,
+    char                    *SortKeyName)
+{
+    UINT32                  OuterElementCount;
+    ACPI_OPERAND_OBJECT     **OuterElements;
+    ACPI_OPERAND_OBJECT     **Elements;
+    ACPI_OPERAND_OBJECT     *ObjDesc;
+    UINT32                  i;
+    UINT32                  PreviousValue;
+    ACPI_STATUS             Status;
+
+
+    ACPI_FUNCTION_NAME (NsCheckSortedList);
+
+
+    /* The top-level object must be a package */
+
+    if (ReturnObject->Common.Type != ACPI_TYPE_PACKAGE)
+    {
+        return (AE_AML_OPERAND_TYPE);
+    }
+
+    /*
+     * NOTE: assumes list of sub-packages contains no NULL elements.
+     * Any NULL elements should have been removed by earlier call
+     * to AcpiNsRemoveNullElements.
+     */
+    OuterElements = ReturnObject->Package.Elements;
+    OuterElementCount = ReturnObject->Package.Count;
+    if (!OuterElementCount)
+    {
+        return (AE_AML_PACKAGE_LIMIT);
+    }
+
+    PreviousValue = 0;
+    if (SortDirection == ACPI_SORT_DESCENDING)
+    {
+        PreviousValue = ACPI_UINT32_MAX;
+    }
+
+    /* Examine each subpackage */
+
+    for (i = 0; i < OuterElementCount; i++)
+    {
+        /* Each element of the top-level package must also be a package */
+
+        if ((*OuterElements)->Common.Type != ACPI_TYPE_PACKAGE)
+        {
+            return (AE_AML_OPERAND_TYPE);
+        }
+
+        /* Each sub-package must have the minimum length */
+
+        if ((*OuterElements)->Package.Count < ExpectedCount)
+        {
+            return (AE_AML_PACKAGE_LIMIT);
+        }
+
+        Elements = (*OuterElements)->Package.Elements;
+        ObjDesc = Elements[SortIndex];
+
+        if (ObjDesc->Common.Type != ACPI_TYPE_INTEGER)
+        {
+            return (AE_AML_OPERAND_TYPE);
+        }
+
+        /*
+         * The list must be sorted in the specified order. If we detect a
+         * discrepancy, issue a warning and sort the entire list
+         */
+        if (((SortDirection == ACPI_SORT_ASCENDING) &&
+                (ObjDesc->Integer.Value < PreviousValue)) ||
+            ((SortDirection == ACPI_SORT_DESCENDING) &&
+                (ObjDesc->Integer.Value > PreviousValue)))
+        {
+            Status = AcpiNsSortList (ReturnObject->Package.Elements,
+                        OuterElementCount, SortIndex, SortDirection);
+            if (ACPI_FAILURE (Status))
+            {
+                return (Status);
+            }
+
+            Data->Flags |= ACPI_OBJECT_REPAIRED;
+
+            ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
+                "%s: Repaired unsorted list - now sorted by %s\n",
+                Data->Pathname, SortKeyName));
+            return (AE_OK);
+        }
+
+        PreviousValue = (UINT32) ObjDesc->Integer.Value;
+        OuterElements++;
+    }
+
+    return (AE_OK);
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiNsRemoveNullElements
+ *
+ * PARAMETERS:  Data                - Pointer to validation data structure
+ *              PackageType         - An AcpiReturnPackageTypes value
+ *              ObjDesc             - A Package object
+ *
+ * RETURN:      None.
+ *
+ * DESCRIPTION: Remove all NULL package elements from packages that contain
+ *              a variable number of sub-packages.
+ *
+ *****************************************************************************/
+
+void
+AcpiNsRemoveNullElements (
+    ACPI_PREDEFINED_DATA    *Data,
+    UINT8                   PackageType,
+    ACPI_OPERAND_OBJECT     *ObjDesc)
+{
+    ACPI_OPERAND_OBJECT     **Source;
+    ACPI_OPERAND_OBJECT     **Dest;
+    UINT32                  Count;
+    UINT32                  NewCount;
+    UINT32                  i;
+
+
+    ACPI_FUNCTION_NAME (NsRemoveNullElements);
+
+
+    /*
+     * PTYPE1 packages contain no subpackages.
+     * PTYPE2 packages contain a variable number of sub-packages. We can
+     * safely remove all NULL elements from the PTYPE2 packages.
+     */
+    switch (PackageType)
+    {
+    case ACPI_PTYPE1_FIXED:
+    case ACPI_PTYPE1_VAR:
+    case ACPI_PTYPE1_OPTION:
+        return;
+
+    case ACPI_PTYPE2:
+    case ACPI_PTYPE2_COUNT:
+    case ACPI_PTYPE2_PKG_COUNT:
+    case ACPI_PTYPE2_FIXED:
+    case ACPI_PTYPE2_MIN:
+    case ACPI_PTYPE2_REV_FIXED:
+        break;
+
+    default:
+        return;
+    }
+
+    Count = ObjDesc->Package.Count;
+    NewCount = Count;
+
+    Source = ObjDesc->Package.Elements;
+    Dest = Source;
+
+    /* Examine all elements of the package object, remove nulls */
+
+    for (i = 0; i < Count; i++)
+    {
+        if (!*Source)
+        {
+            NewCount--;
+        }
+        else
+        {
+            *Dest = *Source;
+            Dest++;
+        }
+        Source++;
+    }
+
+    /* Update parent package if any null elements were removed */
+
+    if (NewCount < Count)
+    {
+        ACPI_DEBUG_PRINT ((ACPI_DB_REPAIR,
+            "%s: Found and removed %u NULL elements\n",
+            Data->Pathname, (Count - NewCount)));
+
+        /* NULL terminate list and update the package count */
+
+        *Dest = NULL;
+        ObjDesc->Package.Count = NewCount;
+    }
+}
+
+
+/******************************************************************************
+ *
+ * FUNCTION:    AcpiNsSortList
+ *
+ * PARAMETERS:  Elements            - Package object element list
+ *              Count               - Element count for above
+ *              Index               - Sort by which package element
+ *              SortDirection       - Ascending or Descending sort
+ *
+ * RETURN:      Status
+ *
+ * DESCRIPTION: Sort the objects that are in a package element list.
+ *
+ * NOTE: Assumes that all NULL elements have been removed from the package.
+ *
+ *****************************************************************************/
+
+static ACPI_STATUS
+AcpiNsSortList (
+    ACPI_OPERAND_OBJECT     **Elements,
+    UINT32                  Count,
+    UINT32                  Index,
+    UINT8                   SortDirection)
+{
+    ACPI_OPERAND_OBJECT     *ObjDesc1;
+    ACPI_OPERAND_OBJECT     *ObjDesc2;
+    ACPI_OPERAND_OBJECT     *TempObj;
+    UINT32                  i;
+    UINT32                  j;
+
+
+    /* Simple bubble sort */
+
+    for (i = 1; i < Count; i++)
+    {
+        for (j = (Count - 1); j >= i; j--)
+        {
+            ObjDesc1 = Elements[j-1]->Package.Elements[Index];
+            ObjDesc2 = Elements[j]->Package.Elements[Index];
+
+            if (((SortDirection == ACPI_SORT_ASCENDING) &&
+                    (ObjDesc1->Integer.Value > ObjDesc2->Integer.Value)) ||
+
+                ((SortDirection == ACPI_SORT_DESCENDING) &&
+                    (ObjDesc1->Integer.Value < ObjDesc2->Integer.Value)))
+            {
+                TempObj = Elements[j-1];
+                Elements[j-1] = Elements[j];
+                Elements[j] = TempObj;
+            }
+        }
+    }
+
+    return (AE_OK);
+}
diff --git a/sys/contrib/dev/acpica/namespace/nsutils.c b/sys/contrib/dev/acpica/namespace/nsutils.c
index 666c79096fa..75a5faac9ee 100644
--- a/sys/contrib/dev/acpica/namespace/nsutils.c
+++ b/sys/contrib/dev/acpica/namespace/nsutils.c
@@ -857,25 +857,26 @@ AcpiNsExternalizeName (
 
 /*******************************************************************************
  *
- * FUNCTION:    AcpiNsMapHandleToNode
+ * FUNCTION:    AcpiNsValidateHandle
  *
- * PARAMETERS:  Handle          - Handle to be converted to an Node
+ * PARAMETERS:  Handle          - Handle to be validated and typecast to a
+ *                                namespace node.
  *
- * RETURN:      A Name table entry pointer
+ * RETURN:      A pointer to a namespace node
  *
- * DESCRIPTION: Convert a namespace handle to a real Node
+ * DESCRIPTION: Convert a namespace handle to a namespace node. Handles special
+ *              cases for the root node.
  *
- * Note: Real integer handles would allow for more verification
+ * NOTE: Real integer handles would allow for more verification
  *       and keep all pointers within this subsystem - however this introduces
- *       more (and perhaps unnecessary) overhead.
- *
- * The current implemenation is basically a placeholder until such time comes
- * that it is needed.
+ *       more overhead and has not been necessary to this point. Drivers
+ *       holding handles are typically notified before a node becomes invalid
+ *       due to a table unload.
  *
  ******************************************************************************/
 
 ACPI_NAMESPACE_NODE *
-AcpiNsMapHandleToNode (
+AcpiNsValidateHandle (
     ACPI_HANDLE             Handle)
 {
 
@@ -900,48 +901,6 @@ AcpiNsMapHandleToNode (
 }
 
 
-/*******************************************************************************
- *
- * FUNCTION:    AcpiNsConvertEntryToHandle
- *
- * PARAMETERS:  Node          - Node to be converted to a Handle
- *
- * RETURN:      A user handle
- *
- * DESCRIPTION: Convert a real Node to a namespace handle
- *
- ******************************************************************************/
-
-ACPI_HANDLE
-AcpiNsConvertEntryToHandle (
-    ACPI_NAMESPACE_NODE         *Node)
-{
-
-
-    /*
-     * Simple implementation for now;
-     */
-    return ((ACPI_HANDLE) Node);
-
-
-/* Example future implementation ---------------------
-
-    if (!Node)
-    {
-        return (NULL);
-    }
-
-    if (Node == AcpiGbl_RootNode)
-    {
-        return (ACPI_ROOT_OBJECT);
-    }
-
-
-    return ((ACPI_HANDLE) Node);
-------------------------------------------------------*/
-}
-
-
 /*******************************************************************************
  *
  * FUNCTION:    AcpiNsTerminate
diff --git a/sys/contrib/dev/acpica/namespace/nswalk.c b/sys/contrib/dev/acpica/namespace/nswalk.c
index fcfa5e1c228..407acd23abe 100644
--- a/sys/contrib/dev/acpica/namespace/nswalk.c
+++ b/sys/contrib/dev/acpica/namespace/nswalk.c
@@ -247,24 +247,27 @@ AcpiNsGetNextNodeTyped (
  *              MaxDepth            - Depth to which search is to reach
  *              Flags               - Whether to unlock the NS before invoking
  *                                    the callback routine
- *              UserFunction        - Called when an object of "Type" is found
- *              Context             - Passed to user function
- *              ReturnValue         - from the UserFunction if terminated early.
- *                                    Otherwise, returns NULL.
+ *              PreOrderVisit       - Called during tree pre-order visit
+ *                                    when an object of "Type" is found
+ *              PostOrderVisit      - Called during tree post-order visit
+ *                                    when an object of "Type" is found
+ *              Context             - Passed to user function(s) above
+ *              ReturnValue         - from the UserFunction if terminated
+ *                                    early. Otherwise, returns NULL.
  * RETURNS:     Status
  *
  * DESCRIPTION: Performs a modified depth-first walk of the namespace tree,
  *              starting (and ending) at the node specified by StartHandle.
- *              The UserFunction is called whenever a node that matches
- *              the type parameter is found.  If the user function returns
+ *              The callback function is called whenever a node that matches
+ *              the type parameter is found. If the callback function returns
  *              a non-zero value, the search is terminated immediately and
  *              this value is returned to the caller.
  *
  *              The point of this procedure is to provide a generic namespace
  *              walk routine that can be called from multiple places to
- *              provide multiple services;  the User Function can be tailored
- *              to each task, whether it is a print function, a compare
- *              function, etc.
+ *              provide multiple services; the callback function(s) can be
+ *              tailored to each task, whether it is a print function,
+ *              a compare function, etc.
  *
  ******************************************************************************/
 
@@ -274,7 +277,8 @@ AcpiNsWalkNamespace (
     ACPI_HANDLE             StartNode,
     UINT32                  MaxDepth,
     UINT32                  Flags,
-    ACPI_WALK_CALLBACK      UserFunction,
+    ACPI_WALK_CALLBACK      PreOrderVisit,
+    ACPI_WALK_CALLBACK      PostOrderVisit,
     void                    *Context,
     void                    **ReturnValue)
 {
@@ -284,6 +288,7 @@ AcpiNsWalkNamespace (
     ACPI_NAMESPACE_NODE     *ParentNode;
     ACPI_OBJECT_TYPE        ChildType;
     UINT32                  Level;
+    BOOLEAN                 NodePreviouslyVisited = FALSE;
 
 
     ACPI_FUNCTION_TRACE (NsWalkNamespace);
@@ -299,7 +304,7 @@ AcpiNsWalkNamespace (
     /* Null child means "get first node" */
 
     ParentNode  = StartNode;
-    ChildNode   = NULL;
+    ChildNode   = AcpiNsGetNextNode (ParentNode, NULL);
     ChildType   = ACPI_TYPE_ANY;
     Level       = 1;
 
@@ -308,103 +313,139 @@ AcpiNsWalkNamespace (
      * started. When Level is zero, the loop is done because we have
      * bubbled up to (and passed) the original parent handle (StartEntry)
      */
-    while (Level > 0)
+    while (Level > 0 && ChildNode)
     {
-        /* Get the next node in this scope.  Null if not found */
-
         Status = AE_OK;
+
+        /* Found next child, get the type if we are not searching for ANY */
+
+        if (Type != ACPI_TYPE_ANY)
+        {
+            ChildType = ChildNode->Type;
+        }
+
+        /*
+         * Ignore all temporary namespace nodes (created during control
+         * method execution) unless told otherwise. These temporary nodes
+         * can cause a race condition because they can be deleted during
+         * the execution of the user function (if the namespace is
+         * unlocked before invocation of the user function.) Only the
+         * debugger namespace dump will examine the temporary nodes.
+         */
+        if ((ChildNode->Flags & ANOBJ_TEMPORARY) &&
+            !(Flags & ACPI_NS_WALK_TEMP_NODES))
+        {
+            Status = AE_CTRL_DEPTH;
+        }
+
+        /* Type must match requested type */
+
+        else if (ChildType == Type)
+        {
+            /*
+             * Found a matching node, invoke the user callback function.
+             * Unlock the namespace if flag is set.
+             */
+            if (Flags & ACPI_NS_WALK_UNLOCK)
+            {
+                MutexStatus = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
+                if (ACPI_FAILURE (MutexStatus))
+                {
+                    return_ACPI_STATUS (MutexStatus);
+                }
+            }
+
+            /*
+             * Invoke the user function, either pre-order or post-order
+             * or both.
+             */
+            if (!NodePreviouslyVisited)
+            {
+                if (PreOrderVisit)
+                {
+                    Status = PreOrderVisit (ChildNode, Level,
+                                Context, ReturnValue);
+                }
+            }
+            else
+            {
+                if (PostOrderVisit)
+                {
+                    Status = PostOrderVisit (ChildNode, Level,
+                                Context, ReturnValue);
+                }
+            }
+
+            if (Flags & ACPI_NS_WALK_UNLOCK)
+            {
+                MutexStatus = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
+                if (ACPI_FAILURE (MutexStatus))
+                {
+                    return_ACPI_STATUS (MutexStatus);
+                }
+            }
+
+            switch (Status)
+            {
+            case AE_OK:
+            case AE_CTRL_DEPTH:
+
+                /* Just keep going */
+                break;
+
+            case AE_CTRL_TERMINATE:
+
+                /* Exit now, with OK status */
+
+                return_ACPI_STATUS (AE_OK);
+
+            default:
+
+                /* All others are valid exceptions */
+
+                return_ACPI_STATUS (Status);
+            }
+        }
+
+        /*
+         * Depth first search: Attempt to go down another level in the
+         * namespace if we are allowed to.  Don't go any further if we have
+         * reached the caller specified maximum depth or if the user
+         * function has specified that the maximum depth has been reached.
+         */
+        if (!NodePreviouslyVisited &&
+            (Level < MaxDepth) &&
+            (Status != AE_CTRL_DEPTH))
+        {
+            if (ChildNode->Child)
+            {
+                /* There is at least one child of this node, visit it */
+
+                Level++;
+                ParentNode = ChildNode;
+                ChildNode = AcpiNsGetNextNode (ParentNode, NULL);
+                continue;
+            }
+        }
+
+        /* No more children, re-visit this node */
+
+        if (!NodePreviouslyVisited)
+        {
+            NodePreviouslyVisited = TRUE;
+            continue;
+        }
+
+        /* No more children, visit peers */
+
         ChildNode = AcpiNsGetNextNode (ParentNode, ChildNode);
         if (ChildNode)
         {
-            /* Found next child, get the type if we are not searching for ANY */
-
-            if (Type != ACPI_TYPE_ANY)
-            {
-                ChildType = ChildNode->Type;
-            }
-
-            /*
-             * Ignore all temporary namespace nodes (created during control
-             * method execution) unless told otherwise. These temporary nodes
-             * can cause a race condition because they can be deleted during
-             * the execution of the user function (if the namespace is
-             * unlocked before invocation of the user function.) Only the
-             * debugger namespace dump will examine the temporary nodes.
-             */
-            if ((ChildNode->Flags & ANOBJ_TEMPORARY) &&
-                !(Flags & ACPI_NS_WALK_TEMP_NODES))
-            {
-                Status = AE_CTRL_DEPTH;
-            }
-
-            /* Type must match requested type */
-
-            else if (ChildType == Type)
-            {
-                /*
-                 * Found a matching node, invoke the user callback function.
-                 * Unlock the namespace if flag is set.
-                 */
-                if (Flags & ACPI_NS_WALK_UNLOCK)
-                {
-                    MutexStatus = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
-                    if (ACPI_FAILURE (MutexStatus))
-                    {
-                        return_ACPI_STATUS (MutexStatus);
-                    }
-                }
-
-                Status = UserFunction (ChildNode, Level, Context, ReturnValue);
-
-                if (Flags & ACPI_NS_WALK_UNLOCK)
-                {
-                    MutexStatus = AcpiUtAcquireMutex (ACPI_MTX_NAMESPACE);
-                    if (ACPI_FAILURE (MutexStatus))
-                    {
-                        return_ACPI_STATUS (MutexStatus);
-                    }
-                }
-
-                switch (Status)
-                {
-                case AE_OK:
-                case AE_CTRL_DEPTH:
-
-                    /* Just keep going */
-                    break;
-
-                case AE_CTRL_TERMINATE:
-
-                    /* Exit now, with OK status */
-
-                    return_ACPI_STATUS (AE_OK);
-
-                default:
-
-                    /* All others are valid exceptions */
-
-                    return_ACPI_STATUS (Status);
-                }
-            }
-
-            /*
-             * Depth first search: Attempt to go down another level in the
-             * namespace if we are allowed to.  Don't go any further if we have
-             * reached the caller specified maximum depth or if the user
-             * function has specified that the maximum depth has been reached.
-             */
-            if ((Level < MaxDepth) && (Status != AE_CTRL_DEPTH))
-            {
-                if (ChildNode->Child)
-                {
-                    /* There is at least one child of this node, visit it */
-
-                    Level++;
-                    ParentNode = ChildNode;
-                    ChildNode = NULL;
-                }
-            }
+            NodePreviouslyVisited = FALSE;
         }
+
+        /* No peers, re-visit parent */
+
         else
         {
             /*
@@ -414,6 +455,8 @@ AcpiNsWalkNamespace (
             Level--;
             ChildNode = ParentNode;
             ParentNode = AcpiNsGetParentNode (ParentNode);
+
+            NodePreviouslyVisited = TRUE;
         }
     }
 
diff --git a/sys/contrib/dev/acpica/namespace/nsxfeval.c b/sys/contrib/dev/acpica/namespace/nsxfeval.c
index bc606781bfd..82f45b4d86d 100644
--- a/sys/contrib/dev/acpica/namespace/nsxfeval.c
+++ b/sys/contrib/dev/acpica/namespace/nsxfeval.c
@@ -281,7 +281,7 @@ AcpiEvaluateObject (
 
     /* Convert and validate the device handle */
 
-    Info->PrefixNode = AcpiNsMapHandleToNode (Handle);
+    Info->PrefixNode = AcpiNsValidateHandle (Handle);
     if (!Info->PrefixNode)
     {
         Status = AE_BAD_PARAMETER;
@@ -544,8 +544,11 @@ AcpiNsResolveReferences (
  * PARAMETERS:  Type                - ACPI_OBJECT_TYPE to search for
  *              StartObject         - Handle in namespace where search begins
  *              MaxDepth            - Depth to which search is to reach
- *              UserFunction        - Called when an object of "Type" is found
- *              Context             - Passed to user function
+ *              PreOrderVisit       - Called during tree pre-order visit
+ *                                    when an object of "Type" is found
+ *              PostOrderVisit      - Called during tree post-order visit
+ *                                    when an object of "Type" is found
+ *              Context             - Passed to user function(s) above
  *              ReturnValue         - Location where return value of
  *                                    UserFunction is put if terminated early
  *
@@ -554,16 +557,16 @@ AcpiNsResolveReferences (
  *
  * DESCRIPTION: Performs a modified depth-first walk of the namespace tree,
  *              starting (and ending) at the object specified by StartHandle.
- *              The UserFunction is called whenever an object that matches
- *              the type parameter is found.  If the user function returns
+ *              The callback function is called whenever an object that matches
+ *              the type parameter is found. If the callback function returns
  *              a non-zero value, the search is terminated immediately and this
  *              value is returned to the caller.
  *
  *              The point of this procedure is to provide a generic namespace
  *              walk routine that can be called from multiple places to
- *              provide multiple services;  the User Function can be tailored
- *              to each task, whether it is a print function, a compare
- *              function, etc.
+ *              provide multiple services; the callback function(s) can be
+ *              tailored to each task, whether it is a print function,
+ *              a compare function, etc.
  *
  ******************************************************************************/
 
@@ -572,7 +575,8 @@ AcpiWalkNamespace (
     ACPI_OBJECT_TYPE        Type,
     ACPI_HANDLE             StartObject,
     UINT32                  MaxDepth,
-    ACPI_WALK_CALLBACK      UserFunction,
+    ACPI_WALK_CALLBACK      PreOrderVisit,
+    ACPI_WALK_CALLBACK      PostOrderVisit,
     void                    *Context,
     void                    **ReturnValue)
 {
@@ -586,7 +590,7 @@ AcpiWalkNamespace (
 
     if ((Type > ACPI_TYPE_LOCAL_MAX) ||
         (!MaxDepth)                  ||
-        (!UserFunction))
+        (!PreOrderVisit && !PostOrderVisit))
     {
         return_ACPI_STATUS (AE_BAD_PARAMETER);
     }
@@ -621,7 +625,8 @@ AcpiWalkNamespace (
     }
 
     Status = AcpiNsWalkNamespace (Type, StartObject, MaxDepth,
-                ACPI_NS_WALK_UNLOCK, UserFunction, Context, ReturnValue);
+                ACPI_NS_WALK_UNLOCK, PreOrderVisit,
+                PostOrderVisit, Context, ReturnValue);
 
     (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
 
@@ -671,7 +676,7 @@ AcpiNsGetDeviceCallback (
         return (Status);
     }
 
-    Node = AcpiNsMapHandleToNode (ObjHandle);
+    Node = AcpiNsValidateHandle (ObjHandle);
     Status = AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
     if (ACPI_FAILURE (Status))
     {
@@ -833,7 +838,7 @@ AcpiGetDevices (
 
     Status = AcpiNsWalkNamespace (ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
                 ACPI_UINT32_MAX, ACPI_NS_WALK_UNLOCK,
-                AcpiNsGetDeviceCallback, &Info, ReturnValue);
+                AcpiNsGetDeviceCallback, NULL, &Info, ReturnValue);
 
     (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
     return_ACPI_STATUS (Status);
@@ -883,7 +888,7 @@ AcpiAttachData (
 
     /* Convert and validate the handle */
 
-    Node = AcpiNsMapHandleToNode (ObjHandle);
+    Node = AcpiNsValidateHandle (ObjHandle);
     if (!Node)
     {
         Status = AE_BAD_PARAMETER;
@@ -938,7 +943,7 @@ AcpiDetachData (
 
     /* Convert and validate the handle */
 
-    Node = AcpiNsMapHandleToNode (ObjHandle);
+    Node = AcpiNsValidateHandle (ObjHandle);
     if (!Node)
     {
         Status = AE_BAD_PARAMETER;
@@ -996,7 +1001,7 @@ AcpiGetData (
 
     /* Convert and validate the handle */
 
-    Node = AcpiNsMapHandleToNode (ObjHandle);
+    Node = AcpiNsValidateHandle (ObjHandle);
     if (!Node)
     {
         Status = AE_BAD_PARAMETER;
diff --git a/sys/contrib/dev/acpica/namespace/nsxfname.c b/sys/contrib/dev/acpica/namespace/nsxfname.c
index 298aeb54fc4..32ea0a9cab6 100644
--- a/sys/contrib/dev/acpica/namespace/nsxfname.c
+++ b/sys/contrib/dev/acpica/namespace/nsxfname.c
@@ -178,7 +178,7 @@ AcpiGetHandle (
 
     if (Parent)
     {
-        PrefixNode = AcpiNsMapHandleToNode (Parent);
+        PrefixNode = AcpiNsValidateHandle (Parent);
         if (!PrefixNode)
         {
             return (AE_BAD_PARAMETER);
@@ -200,7 +200,7 @@ AcpiGetHandle (
 
         if (!ACPI_STRCMP (Pathname, ACPI_NS_ROOT_PATH))
         {
-            *RetHandle = AcpiNsConvertEntryToHandle (AcpiGbl_RootNode);
+            *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, AcpiGbl_RootNode);
             return (AE_OK);
         }
     }
@@ -216,7 +216,7 @@ AcpiGetHandle (
     Status = AcpiNsGetNode (PrefixNode, Pathname, ACPI_NS_NO_UPSEARCH, &Node);
     if (ACPI_SUCCESS (Status))
     {
-        *RetHandle = AcpiNsConvertEntryToHandle (Node);
+        *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, Node);
     }
 
     return (Status);
@@ -282,7 +282,7 @@ AcpiGetName (
         return (Status);
     }
 
-    Node = AcpiNsMapHandleToNode (Handle);
+    Node = AcpiNsValidateHandle (Handle);
     if (!Node)
     {
         Status = AE_BAD_PARAMETER;
@@ -399,7 +399,7 @@ AcpiGetObjectInfo (
         goto Cleanup;
     }
 
-    Node = AcpiNsMapHandleToNode (Handle);
+    Node = AcpiNsValidateHandle (Handle);
     if (!Node)
     {
         (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
diff --git a/sys/contrib/dev/acpica/namespace/nsxfobj.c b/sys/contrib/dev/acpica/namespace/nsxfobj.c
index 26859ef0201..b6e3f0ab62a 100644
--- a/sys/contrib/dev/acpica/namespace/nsxfobj.c
+++ b/sys/contrib/dev/acpica/namespace/nsxfobj.c
@@ -172,7 +172,7 @@ AcpiGetType (
 
     /* Convert and validate the handle */
 
-    Node = AcpiNsMapHandleToNode (Handle);
+    Node = AcpiNsValidateHandle (Handle);
     if (!Node)
     {
         (void) AcpiUtReleaseMutex (ACPI_MTX_NAMESPACE);
@@ -233,7 +233,7 @@ AcpiGetParent (
 
     /* Convert and validate the handle */
 
-    Node = AcpiNsMapHandleToNode (Handle);
+    Node = AcpiNsValidateHandle (Handle);
     if (!Node)
     {
         Status = AE_BAD_PARAMETER;
@@ -243,7 +243,7 @@ AcpiGetParent (
     /* Get the parent entry */
 
     ParentNode = AcpiNsGetParentNode (Node);
-    *RetHandle = AcpiNsConvertEntryToHandle (ParentNode);
+    *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, ParentNode);
 
     /* Return exception if parent is null */
 
@@ -312,7 +312,7 @@ AcpiGetNextObject (
     {
         /* Start search at the beginning of the specified scope */
 
-        ParentNode = AcpiNsMapHandleToNode (Parent);
+        ParentNode = AcpiNsValidateHandle (Parent);
         if (!ParentNode)
         {
             Status = AE_BAD_PARAMETER;
@@ -324,7 +324,7 @@ AcpiGetNextObject (
         /* Non-null handle, ignore the parent */
         /* Convert and validate the handle */
 
-        ChildNode = AcpiNsMapHandleToNode (Child);
+        ChildNode = AcpiNsValidateHandle (Child);
         if (!ChildNode)
         {
             Status = AE_BAD_PARAMETER;
@@ -343,7 +343,7 @@ AcpiGetNextObject (
 
     if (RetHandle)
     {
-        *RetHandle = AcpiNsConvertEntryToHandle (Node);
+        *RetHandle = ACPI_CAST_PTR (ACPI_HANDLE, Node);
     }
 
 
diff --git a/sys/contrib/dev/acpica/parser/psloop.c b/sys/contrib/dev/acpica/parser/psloop.c
index 1c1c011069e..44c71c6e6fa 100644
--- a/sys/contrib/dev/acpica/parser/psloop.c
+++ b/sys/contrib/dev/acpica/parser/psloop.c
@@ -173,6 +173,7 @@ AcpiPsCompleteFinalOp (
 
 static void
 AcpiPsLinkModuleCode (
+    ACPI_PARSE_OBJECT       *ParentOp,
     UINT8                   *AmlStart,
     UINT32                  AmlLength,
     ACPI_OWNER_ID           OwnerId);
@@ -593,7 +594,7 @@ AcpiPsGetArguments (
                  */
                 if (WalkState->PassNumber == ACPI_IMODE_LOAD_PASS1)
                 {
-                    AcpiPsLinkModuleCode (AmlOpStart,
+                    AcpiPsLinkModuleCode (Op->Common.Parent, AmlOpStart,
                         (UINT32) (WalkState->ParserState.PkgEnd - AmlOpStart),
                         WalkState->OwnerId);
                 }
@@ -704,7 +705,8 @@ AcpiPsGetArguments (
  *
  * FUNCTION:    AcpiPsLinkModuleCode
  *
- * PARAMETERS:  AmlStart            - Pointer to the AML
+ * PARAMETERS:  ParentOp            - Parent parser op
+ *              AmlStart            - Pointer to the AML
  *              AmlLength           - Length of executable AML
  *              OwnerId             - OwnerId of module level code
  *
@@ -718,6 +720,7 @@ AcpiPsGetArguments (
 
 static void
 AcpiPsLinkModuleCode (
+    ACPI_PARSE_OBJECT       *ParentOp,
     UINT8                   *AmlStart,
     UINT32                  AmlLength,
     ACPI_OWNER_ID           OwnerId)
@@ -725,6 +728,7 @@ AcpiPsLinkModuleCode (
     ACPI_OPERAND_OBJECT     *Prev;
     ACPI_OPERAND_OBJECT     *Next;
     ACPI_OPERAND_OBJECT     *MethodObj;
+    ACPI_NAMESPACE_NODE     *ParentNode;
 
 
     /* Get the tail of the list */
@@ -751,11 +755,27 @@ AcpiPsLinkModuleCode (
             return;
         }
 
+        if (ParentOp->Common.Node)
+        {
+            ParentNode = ParentOp->Common.Node;
+        }
+        else
+        {
+            ParentNode = AcpiGbl_RootNode;
+        }
+
         MethodObj->Method.AmlStart = AmlStart;
         MethodObj->Method.AmlLength = AmlLength;
         MethodObj->Method.OwnerId = OwnerId;
         MethodObj->Method.Flags |= AOPOBJ_MODULE_LEVEL;
 
+        /*
+         * Save the parent node in NextObject. This is cheating, but we
+         * don't want to expand the method object.
+         */
+        MethodObj->Method.NextObject =
+            ACPI_CAST_PTR (ACPI_OPERAND_OBJECT, ParentNode);
+
         if (!Prev)
         {
             AcpiGbl_ModuleCodeList = MethodObj;
diff --git a/sys/contrib/dev/acpica/parser/psparse.c b/sys/contrib/dev/acpica/parser/psparse.c
index eda132bd7fb..0ed02fba813 100644
--- a/sys/contrib/dev/acpica/parser/psparse.c
+++ b/sys/contrib/dev/acpica/parser/psparse.c
@@ -705,13 +705,11 @@ AcpiPsParseAml (
                         !PreviousWalkState->ImplicitReturnObj)
                     {
                         PreviousWalkState->ImplicitReturnObj =
-                            AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+                            AcpiUtCreateIntegerObject ((UINT64) 0);
                         if (!PreviousWalkState->ImplicitReturnObj)
                         {
                             return_ACPI_STATUS (AE_NO_MEMORY);
                         }
-
-                        PreviousWalkState->ImplicitReturnObj->Integer.Value = 0;
                     }
 
                     /* Restart the calling control method */
diff --git a/sys/contrib/dev/acpica/parser/psxface.c b/sys/contrib/dev/acpica/parser/psxface.c
index 677354a7322..31d758acf5c 100644
--- a/sys/contrib/dev/acpica/parser/psxface.c
+++ b/sys/contrib/dev/acpica/parser/psxface.c
@@ -403,7 +403,7 @@ AcpiPsExecuteMethod (
 
     if (Info->ObjDesc->Method.MethodFlags & AML_METHOD_INTERNAL_ONLY)
     {
-        Status = Info->ObjDesc->Method.Implementation (WalkState);
+        Status = Info->ObjDesc->Method.Extra.Implementation (WalkState);
         Info->ReturnObject = WalkState->ReturnDesc;
 
         /* Cleanup states */
@@ -422,15 +422,13 @@ AcpiPsExecuteMethod (
     if (AcpiGbl_EnableInterpreterSlack)
     {
         WalkState->ImplicitReturnObj =
-            AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+            AcpiUtCreateIntegerObject ((UINT64) 0);
         if (!WalkState->ImplicitReturnObj)
         {
             Status = AE_NO_MEMORY;
             AcpiDsDeleteWalkState (WalkState);
             goto Cleanup;
         }
-
-        WalkState->ImplicitReturnObj->Integer.Value = 0;
     }
 
     /* Parse the AML */
diff --git a/sys/contrib/dev/acpica/resources/rsxface.c b/sys/contrib/dev/acpica/resources/rsxface.c
index b72d58b8e3e..998a669ec5e 100644
--- a/sys/contrib/dev/acpica/resources/rsxface.c
+++ b/sys/contrib/dev/acpica/resources/rsxface.c
@@ -191,7 +191,7 @@ AcpiRsValidateParameters (
         return_ACPI_STATUS (AE_BAD_PARAMETER);
     }
 
-    Node = AcpiNsMapHandleToNode (DeviceHandle);
+    Node = AcpiNsValidateHandle (DeviceHandle);
     if (!Node)
     {
         return_ACPI_STATUS (AE_BAD_PARAMETER);
diff --git a/sys/contrib/dev/acpica/tools/acpiexec/aecommon.h b/sys/contrib/dev/acpica/tools/acpiexec/aecommon.h
index fa0c918298e..bcba877468e 100644
--- a/sys/contrib/dev/acpica/tools/acpiexec/aecommon.h
+++ b/sys/contrib/dev/acpica/tools/acpiexec/aecommon.h
@@ -135,8 +135,9 @@
 #include 
 #include 
 
-extern FILE                     *AcpiGbl_DebugFile;
-extern BOOLEAN                  AcpiGbl_IgnoreErrors;
+extern FILE                 *AcpiGbl_DebugFile;
+extern BOOLEAN              AcpiGbl_IgnoreErrors;
+extern UINT8                AcpiGbl_RegionFillValue;
 
 
 typedef struct ae_table_desc
diff --git a/sys/contrib/dev/acpica/utilities/utcopy.c b/sys/contrib/dev/acpica/utilities/utcopy.c
index 8d919abe548..222db943244 100644
--- a/sys/contrib/dev/acpica/utilities/utcopy.c
+++ b/sys/contrib/dev/acpica/utilities/utcopy.c
@@ -422,11 +422,11 @@ AcpiUtCopyIelementToEelement (
  * RETURN:      Status
  *
  * DESCRIPTION: This function is called to place a package object in a user
- *              buffer.  A package object by definition contains other objects.
+ *              buffer. A package object by definition contains other objects.
  *
  *              The buffer is assumed to have sufficient space for the object.
- *              The caller must have verified the buffer length needed using the
- *              AcpiUtGetObjectSize function before calling this function.
+ *              The caller must have verified the buffer length needed using
+ *              the AcpiUtGetObjectSize function before calling this function.
  *
  ******************************************************************************/
 
@@ -485,12 +485,12 @@ AcpiUtCopyIpackageToEpackage (
  * FUNCTION:    AcpiUtCopyIobjectToEobject
  *
  * PARAMETERS:  InternalObject      - The internal object to be converted
- *              BufferPtr           - Where the object is returned
+ *              RetBuffer           - Where the object is returned
  *
  * RETURN:      Status
  *
- * DESCRIPTION: This function is called to build an API object to be returned to
- *              the caller.
+ * DESCRIPTION: This function is called to build an API object to be returned
+ *              to the caller.
  *
  ******************************************************************************/
 
@@ -742,7 +742,7 @@ AcpiUtCopyEpackageToIpackage (
  * PARAMETERS:  ExternalObject      - The external object to be converted
  *              InternalObject      - Where the internal object is returned
  *
- * RETURN:      Status              - the status of the call
+ * RETURN:      Status
  *
  * DESCRIPTION: Converts an external object to an internal object.
  *
@@ -784,7 +784,7 @@ AcpiUtCopyEobjectToIobject (
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Simple copy of one internal object to another.  Reference count
+ * DESCRIPTION: Simple copy of one internal object to another. Reference count
  *              of the destination object is preserved.
  *
  ******************************************************************************/
@@ -1034,10 +1034,11 @@ ErrorExit:
  *
  * FUNCTION:    AcpiUtCopyIpackageToIpackage
  *
- * PARAMETERS:  *SourceObj      - Pointer to the source package object
- *              *DestObj        - Where the internal object is returned
+ * PARAMETERS:  SourceObj       - Pointer to the source package object
+ *              DestObj         - Where the internal object is returned
+ *              WalkState       - Current Walk state descriptor
  *
- * RETURN:      Status          - the status of the call
+ * RETURN:      Status
  *
  * DESCRIPTION: This function is called to copy an internal package object
  *              into another internal package object.
@@ -1093,9 +1094,9 @@ AcpiUtCopyIpackageToIpackage (
  *
  * FUNCTION:    AcpiUtCopyIobjectToIobject
  *
- * PARAMETERS:  WalkState           - Current walk state
- *              SourceDesc          - The internal object to be copied
+ * PARAMETERS:  SourceDesc          - The internal object to be copied
  *              DestDesc            - Where the copied object is returned
+ *              WalkState           - Current walk state
  *
  * RETURN:      Status
  *
diff --git a/sys/contrib/dev/acpica/utilities/utmisc.c b/sys/contrib/dev/acpica/utilities/utmisc.c
index d051c9ea339..03345dd9e89 100644
--- a/sys/contrib/dev/acpica/utilities/utmisc.c
+++ b/sys/contrib/dev/acpica/utilities/utmisc.c
@@ -1440,3 +1440,51 @@ AcpiUtPredefinedWarning (
     ACPI_COMMON_MSG_SUFFIX;
     va_end (args);
 }
+
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtPredefinedInfo
+ *
+ * PARAMETERS:  ModuleName      - Caller's module name (for error output)
+ *              LineNumber      - Caller's line number (for error output)
+ *              Pathname        - Full pathname to the node
+ *              NodeFlags       - From Namespace node for the method/object
+ *              Format          - Printf format string + additional args
+ *
+ * RETURN:      None
+ *
+ * DESCRIPTION: Info messages for the predefined validation module. Messages
+ *              are only emitted the first time a problem with a particular
+ *              method/object is detected. This prevents a flood of
+ *              messages for methods that are repeatedly evaluated.
+ *
+ ******************************************************************************/
+
+void  ACPI_INTERNAL_VAR_XFACE
+AcpiUtPredefinedInfo (
+    const char              *ModuleName,
+    UINT32                  LineNumber,
+    char                    *Pathname,
+    UINT8                   NodeFlags,
+    const char              *Format,
+    ...)
+{
+    va_list                 args;
+
+
+    /*
+     * Warning messages for this method/object will be disabled after the
+     * first time a validation fails or an object is successfully repaired.
+     */
+    if (NodeFlags & ANOBJ_EVALUATED)
+    {
+        return;
+    }
+
+    AcpiOsPrintf ("ACPI Info for %s: ", Pathname);
+
+    va_start (args, Format);
+    AcpiOsVprintf (Format, args);
+    ACPI_COMMON_MSG_SUFFIX;
+    va_end (args);
+}
diff --git a/sys/contrib/dev/acpica/utilities/utobject.c b/sys/contrib/dev/acpica/utilities/utobject.c
index 3c96d78f6f2..fdbba599e3f 100644
--- a/sys/contrib/dev/acpica/utilities/utobject.c
+++ b/sys/contrib/dev/acpica/utilities/utobject.c
@@ -279,6 +279,41 @@ AcpiUtCreatePackageObject (
 }
 
 
+/*******************************************************************************
+ *
+ * FUNCTION:    AcpiUtCreateIntegerObject
+ *
+ * PARAMETERS:  InitialValue        - Initial value for the integer
+ *
+ * RETURN:      Pointer to a new Integer object, null on failure
+ *
+ * DESCRIPTION: Create an initialized integer object
+ *
+ ******************************************************************************/
+
+ACPI_OPERAND_OBJECT *
+AcpiUtCreateIntegerObject (
+    UINT64                  InitialValue)
+{
+    ACPI_OPERAND_OBJECT     *IntegerDesc;
+
+
+    ACPI_FUNCTION_TRACE (UtCreateIntegerObject);
+
+
+    /* Create and initialize a new integer object */
+
+    IntegerDesc = AcpiUtCreateInternalObject (ACPI_TYPE_INTEGER);
+    if (!IntegerDesc)
+    {
+        return_PTR (NULL);
+    }
+
+    IntegerDesc->Integer.Value = InitialValue;
+    return_PTR (IntegerDesc);
+}
+
+
 /*******************************************************************************
  *
  * FUNCTION:    AcpiUtCreateBufferObject
diff --git a/sys/contrib/dev/iwn/iwlwifi-1000-128.50.3.1.fw.uu b/sys/contrib/dev/iwn/iwlwifi-1000-128.50.3.1.fw.uu
new file mode 100644
index 00000000000..6e7de6131ed
--- /dev/null
+++ b/sys/contrib/dev/iwn/iwlwifi-1000-128.50.3.1.fw.uu
@@ -0,0 +1,5920 @@
+Copyright (c) 2006-2009, Intel Corporation.
+All rights reserved.
+
+Redistribution.  Redistribution and use in binary form, without 
+modification, are permitted provided that the following conditions are 
+met:
+
+* Redistributions must reproduce the above copyright notice and the 
+  following disclaimer in the documentation and/or other materials 
+  provided with the distribution. 
+* Neither the name of Intel Corporation nor the names of its suppliers 
+  may be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+* No reverse engineering, decompilation, or disassembly of this software 
+  is permitted.
+
+Limited patent license.  Intel Corporation grants a world-wide, 
+royalty-free, non-exclusive license under patents it now or hereafter 
+owns or controls to make, have made, use, import, offer to sell and 
+sell ("Utilize") this software, but solely to the extent that any 
+such patent is necessary to Utilize the software alone, or in 
+combination with an operating system licensed under an approved Open 
+Source license as listed by the Open Source Initiative at 
+http://opensource.org/licenses.  The patent license shall not apply to 
+any other combinations which include this software.  No hardware per 
+se is licensed hereunder.
+
+DISCLAIMER.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
+DAMAGE.
+begin-base64 644 iwlwifi-1000-128.50.3.1.fw.uu
+AQMygLA0AABE4wEAAMAAAHC5AQAAwAAAAAAAACAggA8AAEAAaSAAAGkgQABpIAAAaSBAACAggA8A
+AOgAaSAAAGkgQABpIAAAaSBAACAggA8AAIgFaSAAAGkgQABpIAAASiAAAEohAABKIgAASiMAAEok
+AABKJQAASiYAAEonAABKIAAQSiEAEEoiABBKIwAQSiQAEEolABBKJgAQSicAEEogACBKIQAgSiIA
+IEojACBKJAAgSiUAIEomACBKJwAgSiAAMEohADAKJIA/gAAAwEEsnDBALJwwQiQcNAoigD+AAERZ
+CiMANwYPAABKJgBwaSBAAEomAHBKJgBwSiYAcEomAHAAFgBwgAB0BEB4ICBAhwAAAAAAAAAAAAAK
+yM9xoADIHw4ZGIALyA8ZGIAMyBAZGIANEgI2AMhEeBEZGIAOyC0ZGIDgfuHE/BzIvvwcSL7hwOHB
+4cLhw/wcCLH8HEix/ByIsfwcyLH8HAiy/BxIsvwciLL8HMiy/BwIv2okgBDhxGokwBDhxPHAz3Cg
+ANAbFIDPcYAAcAQEIICPz1EE4QChCvIvKQEAz3CAAGAJ8CBAAEB42v/RwMHEayTAEMHEaySAEMHE
+n3QEFAs0BBQKNAQUCTQEFAg0BBQHNAQUBjQEFAU0BBQENMHDwcLBwcHAwcRFLH4QCiZAfsHEaySA
+FMHEICBAhwrIh7gKGhgwC8ibuAsaGDAMyAwaGDANyIe4DRoYMA7IhSDDDw4aGDDgfuB48cAKyJW4
+ChoYMAvIm7gLGhgwDciKuI24kLgNGhgwz3CAAIgKGIiB4Av0DcjPcQAAbAqsuA0aGDCuDSAAD9jR
+wOB+4HjPcIAARJsAgIYg/oEI9A3IBSCADwAAANQNGhgwRPHgePHAz3EDAEANz3CgAKggLaDPcoAA
+sAQgggFpAKLeDCABSNjPcIAAxAglgCOBIIHHcQAAiBOGDMAH0fHgeM9wgADECBUEwAfgePHA4gtA
+AYDgz3aAAHAEBvKB4Ab0AdgD8ADYC66A4QbygeEG9AHYA/AA2AqugOIG8oHiBvQB2APwANgMrgDY
+z3WgAMgfGB0YkAuOgOCKIRAADvIIjoDgDPLPcAMAQA1FHRgQMKUC2BgdGJAD8DGlCo6A4BryCY6A
+4Bbyz3ABAETjIB0YkM9wgAAoACEdGJDPcIAAbAQiHRiQGBUAlkUgAAMYHRiQDI6A4AfyGBUAloUg
+AQQYHRiQgOMY8gDYlLjPdoAApAQApnHYBrg6D+AA/Nkghs9wAABMHCoP4ACfuRgVAJaFuBgdGJBl
+A0ABz3Gqqru7z3CfALj/NqA2oDagNqDPcaAAyDsOgYi4DqFpIEAA/vHgePHApcFBwELBDBwAMRAc
+QDHPcYAAfFo0GcAPMBkADywZwA4oGYAOJBlADs9wgAB8WiAYQAvPcIAAfFocGAALz3CAAHxaGBjA
+Cs9wgAB8WhQYgArPcIAAfFoQGMAIz3CAAHxaDBiACM9wgAB8WggYQAjPcYAAAFqAGQAIfBnAB3gZ
+gAd0GUAHcBkAB2wZAAdoGYAGZBlABmAZAAZcGcAFWBmABVQZQAVQGQAFTBnABEgZgAREGUAEQBkA
+BO+hzqGtoYyhLBnAAigZgAIkGUACIBkAAhwZwAEYGYABFBlAARAZAAFjoWogAAPYGQAAaiDAAtQZ
+AABqIIAC0BkAAGogQAHIGQAAaiAAAcQZAABqIMAAwBkAAGoggAC8GQAAaiBAALgZAABqIAAAtBkA
+AGoggAHMGQAA0NifuM9xnwC4/x2hz3CAAAAAxIBTJcQ1UybFNde6AebTvsSgUyPABAUmjh/Q/gAA
+1qEFIIAPsP4AABahGIFTJ841AN2UuBihQMMBwALByXMMFAYwSgpgARAUBzDPcKAAtA+8oE4LQAGG
+DeAAqXAI2ADZSg3gAJm5FvHgePHA8ghgAXvYyglgAdfZz3GAAHxaNBnADzAZAA8sGcAOKBmADiQZ
+QA7PcIAAfFogGEALz3CAAHxaHBgAC89wgAB8WhgYwArPcIAAfFoUGIAKz3CAAHxaEBjACM9wgAB8
+WgwYgAjPcIAAfFoIGEAIz3GAAABagBkACHwZwAd4GYAHdBlAB3AZAAdsGQAHaBmABmQZQAZgGQAG
+XBnABVgZgAVUGUAFUBkABUwZwARIGYAERBlABEAZAATvoc6hraGMoSwZwAIoGYACJBlAAiAZAAIc
+GcABGBmAARQZQAEQGQABY6FqIAAD2BkAAGogwALUGQAAaiCAAtAZAABqIEAByBkAAGogAAHEGQAA
+aiDAAMAZAABqIIAAvBkAAGogQAC4GQAAaiAAALQZAABqIIABzBkAAOt2z3WgAMgfGRURls9wAABE
+HN4IIAEKIMAvWnDPcIAAZBYjgM9znwC4/893gAAAAASHgOEB4NO4JPIZFQKWUSLAgB7yXYNA3p++
+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
+AACfBQXY4fMgwAAcBDCE4Mohyw/KIssHyiOLDwAAowWmB+v/yiBrAYbgAdnCIUoAz3CAAM4GIKih
+wNHA4H7gePwciLb8HEi2/BwItvwcyLX8HIi1/BxItfwcCLX8HMi0/ByItPwcSLT8HAi0/BzIs/wc
+iLP8HEiz4H7geATcON018OB4BNw03TPw4HgE3DDdMfDgeATcLN0v8OB4BNwo3S3w4HgE3CTdK/Dg
+eATcIN0p8OB4BNwc3Sfw4HgE3BjdJfDgeATcFN0j8OB4BNwQ3SHw4HgE3AzdH/DgeATcCN0c8OB4
+BNwE3RnwNBQaMDAUGTAsFBgwKBQXMCQUFjAgFBUwHBQUMBgUEzAUFBIwEBQRMAwUEDACxwHGsCRN
+M7AkHzPgfvHASg/P/89zgABUEEODAN/PdaAALCCwhdJq1H5+ZqWmBKYB4owiAoAmpkOjhfcCg+Oj
+AeACo30Hz//geADYz3GgAMgfGKEZoQHYDqHgfuB48cD6Du//OXEZcshx6HIB3c92oADIH7OmBd/P
+dYAAwA/gpQGlBMBIpQmlFYYnpQqlGIYYHUARC6UZhhQdABEMpaAWABBkpQ2lpBYAEAwdABIOpagW
+ABAIHUASD6XPcAEAMoAQpZ4Pr/8k2AQggA8AAAD4EaWOD6//ANgSpVMnwHUTpQHIVB0AFxalEhYA
+llAdABcXpRMWAJbPcoAAwA8YpRQWAJZKJEB5GaUVFgCWANkapSQWAJYbpRYWAJYcpc9wgAAoDxCA
+HaXPcIAAwA94GIAKz3CAAMAPfBjACs9wgAA8EAQYAAuEGkALz3CgAMgcCICIGgAAqCCAAvAiQwDP
+cJ8AuP8B4XagWQbP/+B+4HjgfuB44H7geOB+4HgA2Za5z3CgAKwvPKDgfuB48cChwYtwCgyv/wHZ
+QNjmD6//QMC+C4//ocDRwOB+4HjxwAohwA/rcgXYMNuKJMMP1QKv/rhz4HjgfuB44H7geOB+4Hjg
+fuB44H8B2OB+4HjgfuB44H8B2PHAag3P/6/BCHcA3s9woABkLvAg0gMZEhA2GRrYM/XYBbh6Ca//
+6XEZyM91oADUBxodGJAPFRGWGRUAloDgLPLA5kX3GRUOlvzxABYAQAAWBUAAHEAxIMCc4D/0gcBa
+C6//DtkjwGG4Y8AMwIDgDvLPcZ8AuP8aoS3AG6EDwB6hz3AAbAQAGaEPHViUTg7ABQ8VEZbPcKAA
+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
+4H7geOB+4HjgfuB44H7geOB+4HjgfwDY4H8A2OB+4HihweB/ocDgeOB+4HjxwOHFAcjPdYAAZDIA
+pQRtUggv8wLZz3GADgQA7HAgoO4O7/IAhXUCT/PgeOB+4HjgfuB48cAAFgBBz3KAAGQyBrIAFgVB
+QCIBBA4aRAFMJYCEyiHCD8oiwgfKIGIByiOCDwAARAD0BuLxyiQiAADaB/AAFgBBFCGMAAC0AeIv
+IEIBEHK39qIPz/LRwOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjPcIAA
+XAjgfwCA4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4Hjg
+fuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+
+4HjgfuB44H7geOB+4HjgfuB44H7geOB/AdjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7g
+eOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB48cDhxc91gACkMqlw0g7v8gPZABWFEEQl
+QAGF4MohwQ/KIsEHyiBhAcojgQ8AAE8ApAXh8cokYQABjYPgw/ZjuAGtYg7P8tEAT/PgePHAUghP
+889ygACkMmCKUSMAgDfyz3OAAGQIoIuA5cwhIYAv8oHgB/TPcIAAnIihgALwAN2O5QT3gOUD9ADd
+z3eAAJyIGI+A4AP0gOUD9ADeA/CihwTez3CAAIgKGIiD4MwgIoHMIOKBzCAiggn0CpIQdQn0C5IQ
+dswhIYAD9ADYD/AB2M9xoADIHw2hqrLLskGLBL7FfRC6pXp/GZiAHQBP8+B48cCuDy/zCHEA39X/
+gOAs8iDdz3agAMgfsKYy2EMeGBAA2DoN7/KNuLGmsKYe2EMeGBAA2CYN7/KNuLGmfxYAls9ygABk
+CDC4IYrEuDBwAdnCIUoAgOAgqsb27aaB4QT0BNgBqrEHD/PPcIAApDIAiFEggIAH8s9xoADAHQCB
+gLgAoeB+z3CAAKQyAIhRIICAB/LPcaAAwB0AgaC4AKHgfvHA4cWhwc9wgAC8CACQz3WAACSkqXGK
+IgQKLg0v8wHbgOAP9AohwA/rcgXYz3MAAJ0LSiQAABEE7/EKJQABAI2E4Mohyw/KIssHyiBrAcoj
+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
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAA
+AAAAwACQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABMfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAACAAAAHz7AAB4+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGIeAANBLAQAAAAAAAAAA
+AAAAAAAAAAAAAAAAADyHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8BAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAA
+AAYACAAJAAAABwAAAAAAAAAAAAAAAAAAAAIAAAACAAAAgwAAAJIAAADoAAAA9wAAAE4BAABdAQAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAXJiAAMShAQAAAAAA/wAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAPR8gABAtQEAAAAAAAAAAAAAAAAAAAAAAPR8gAAAvAEAAAAAAAAAAAD0fIAA
+bL0BAAAAAAAAAAAAAAAAAPR8gAAAAAAAAAAAAAAAAAD/AAAAAAcAAAAAAAAAAAAAAAAAAAB/fwAB
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgQIAAgQIAEAAAAAAAAAAAAAAAEA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAcAABUAAAAUG4AAUAoAAFAKAABQCgAAUAoA
+AFAKAABQCgAAUAoAAFAKAABQCgAAUAoAAFAKAABQCgAAUAoAAFAKAABQCgAAUAoAAFAKAABQCgAA
+UAoAAFAKAABQCgAAUAoAAFAKAABQCgAAUAoAAFAKAABQCgAAUAoAAFAKAABQCgAAUAoAAHQLAAAA
+AAAA1BUBAFAKAACYCAAAUAoAAFAKAABQCgAAwAgAAMz9AACITgAAUAoAAFAKAAD4CAAA+AgAAPgI
+AAD4CAAA+AgAAPgIAAD4CAAAUAoAAFAKAABQCgAAUAoAABwKAABQCgAAUAoAAFAKAABQCgAAUAoA
+AHgLAABQCgAAUAoAAHwIAAADAAAA/MIBAAIAAADIIAEABAAAALQwAAAGAAAArMQBABEAAABYnAEA
+BwAAAMC3AQAIAAAALMUBAAwAAAAkNwEADQAAADw7AQAOAAAAdDsBABYAAAA8FQEACwAAADBPAQAU
+AAAApE8AAA8AAAAkXgAAEAAAAAQNAQABAAAAnLMBABIAAAAQYwEAEwAAAGxUAQAFAAAAxGAAABUA
+AAA02AEAFwAAAHQLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAGCQAABgkAAAYJAAAJDIAABgkAAAYJAAAGDIAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgk
+AAAYJAAAGCQAABAaAAC4GwAAyBsAAEAdAADIHQAARB0AABgkAAAYJAAAqDoAAAQ+AADYPgAAGCQA
+ABgkAAAYJAAAbDkAAHiqAAB0qgAAsKoAABgkAAAYJAAAGCQAACgyAAAYJAAAGCQAABgkAAAYJAAA
+GCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAY
+JAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgk
+AAAYJAAAGDMAABgkAAAYJAAAGCQAABgkAAAYJAAA/DMAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQA
+ABgkAAAYJAAAGCQAABgkAAAYJAAA1DAAABgkAAD0MAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAA
+GCQAABgkAAC8YQAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAD8
+TQEAhFEBABgkAAC4NwEAGCQAACQ5AQCwKQEAGCQAABgkAABUPwAAGCQAABgkAAAYJAAAGCQAABgk
+AAD8ogEA2J0BABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAABExAEASMQBABgkAAAYJAAAGCQA
+ABgkAAAYJAAAGCQAAIy3AQAYJAAAWLoBABgkAACE2QEAGCQAAOwgAADwIAAAGCQAABgkAAAExgEA
+qE8AABgkAAAYJAAAGCQAABSyAQAYJAAAGCQAAOQNAQBYVAEAGCQAABgkAAAYJAAA3FsBACwlAQAY
+JAAAGCQAABgkAAAYJAAAGCQAABgkAAB4bgEAGCQAABDFAQAUxQEAIMUBACTFAQAYxQEAHMUBACjF
+AQAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAsQQAAGCQAABgkAAAYJAAAGCQA
+ABgkAACAxAEAtMQBADA2AAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAA
+GCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAY
+JAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAAGCQAABgkAAAYJAAA1DYAAFQ3
+AADcNwAAeDgAAMRcAABQOAAAGCQAABgkAAAYJAAAGCQAABgkAADMNgAA0DYAABgkAAAYJAAAhD8A
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAIAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOED
+Dh7h4QMOHuHBAgoe4YEFDB7hAAAAAAAAAAAAAOEDDh7h4QMOHuHBAgYe4YEFDB7hwQIGHuGBBQwe
+4cECBh7hgQUMHuHBAgYe4YEFDB7hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBDQ0NDQ0NDQ0NDQ0NDQ0NDQMDAwMDAwMDAwMD
+AwMDAwMAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEBAQ0NDQ0NDQ0NDQ0NDQ0NDQ0DAwMD
+AwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQENDQ0NDQ0NDQ0NDQ0N
+DQ0NAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAACRAgAAMcovAJECAAAxyi8AkQIAADHK
+LwCRAgAAMcovAJECAAAxyi8AkQIAADHKLwCRAgAAMcovAJECAAAxyi8AQwEAADHKLwBDAQAAMcov
+AEMBAAAxyi8AQwEAADHKLwBDAQAAMcovAEMBAAAxyi8AQwEAADHKLwBDAQAAMcovAEANAADeAwkA
+AAAAAAAAAAAAAAAAgPQAAAEAAADUGoAAAAAAAAAAAAAAAAAAEPUAABUAAAAUG4AAgICAgICAgIAB
+gAKAgICAgAEAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANQagADUGoAApCCgADggoAABAAAA/P///wAAAAAAAAAA
+9BqAAPQagACoIKAAPCCgAAgAAADz////AAAAAAAAAAAUG4AAFBuAAKwgoABsIKAAMAAAAM////8A
+AAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAA+A0BAAUA
+AAAUG4AAJBMBAAD/AwBEEwEAAP8FADAUAQAA/y0AVBQBAAD/PQAMFAEAAP8EAPATAQAA/yUAUBoB
+ACQbAQCMGwEAFBcBAIwWAQBMHAEArBwBAPAcAQA0HQEAAAAAACwBAABeAQAAAQAAAAEAAAABAAAA
+AQAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAMAAAADAAAAAwAAAAEAAAAAAAAAAQAAAAAAAAAA
+AAAAAAAAACgiAQAKAAAA1BqAAAAAAAAAAAAAAAAAAIgiAQAKAAAA1BqAAAAAAAAAAAAAAAAAAJwi
+AQAKAAAA1BqAAAAAAAAAAAAAAAAAAOgiAQAKAAAA1BqAAAAAAAAAAAAAAAAAALAjAQAKAAAA1BqA
+AAAAAAAAAAAAAAAAAFQjAQAKAAAA1BqAAAAAAAAAAAAAAAAAAOwoAQAGAAAA1BqAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAgAAAAACgABAnAADoAwAA6AMAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQPgEAUD8BAPRBAQCQRAEA9EYBACxKAQDgQAEAIAWAALx8
+gAAYAAAAfHyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAREwBAAYAAADUGoAAAAAAAAAAAAAAAAAA3P8A
+AAoAAADUGoAAAAAAAAAAAAAAAAAA3P8AAAoAAADUGoAAAAAAAAAAAAAAAAAA3P8AAAoAAADUGoAA
+AAAAAAAAAAAAAAAA3P8AAAoAAADUGoAAAAAAAAAAAAAAAAAA3P8AAAoAAADUGoAAAAAAAAAAAAAA
+AAAA3P8AAAoAAADUGoAAAAAAAAAAAAAAAAAA3P8AAAoAAADUGoAAAAAAAAAAAAAAAAAA3P8AAAoA
+AADUGoAAAAAAAAAAAAAAAAAA3P8AAAoAAADUGoAAAAAAAAAAAAAAAAAA3P8AAAoAAADUGoAAAAAA
+AAAAAAAAAAAA3P8AAAoAAADUGoAAAAAAAAAAAAAAAAAA3P8AAAoAAADUGoAAAAAAAAAAAAAAAAAA
+nFIBAAoAAADUGoAA/////wAAAAD/////AAAAAAAAAAAAAAAA6FMBAAUAAAAUG4AAZABkAGkA3ADI
+AFoAqgC+AIYBfQA+AGQAZABpANwAyABaAKoAvgCGAX0APgAAAAAAAQEAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAABAgEBAAIBAAECAgIAAQEAAgECAQIAAgABAgMAAAAA4G0BAOx6AQC4iIAAQAUAAAAA
+AADgbQEADG8BAPiNgAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARH8BAEh9AQAYj4AAVAAA
+AAAAAADgbQEAeH0BAJiPgABQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA4G0BAPB5AQAoJYAA
+UAEAAAAAAABYfwEAAHwBANAGgAACAAAAAAAAAOBtAQAsfAEA1AaAAAQAAAAAAAAAMH8BAAxvAQBs
+j4AALAAAAAAAAADgbQEAmHwBAAAAAAAAAAAAAAAAAOBtAQBYfAEA2AaAAAQAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAABAAIAAgADAAQABAAFAAYABgAHACAAIAAhACIAIgAjACQAJAAl
+ACYAJgBDAEQARABFAEYARgBHAEgASABJAEoASgBLAEwATABNAE4ATgBPAFAAUABRAG4AbgBvAHAA
+cABxAHIAcgBzAHQAdAB1AHYAdgB3AHgAeAB4AHgAeAB4AHgAeAB4AA8APwAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAABAAEAAgADAAMABAAFAAUABgAHAAcACAAJAAkACgAjACMAJAAlACUA
+JgAnACcAKAApACkARgBHAEcASABJAEkAZgBnAGcAaABpAGkAagBrAGsAbABtAG0AbgBvAG8AcABx
+AHEAcgBzAHMAdAB1AHUAdgB3AHcAeAB4AHgAeAB4AHgAeAB4AA4APwAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAABAAIAAgADAAQABAAFAAYABgAHACAAIAAhACIAIgAjACQAJAAlACYAJgBD
+AEQARABFAEYARgBHAEgASABJAEoASgBLAEwATABNAE4ATgBPAFAAUABRAG4AbgBvAHAAcABxAHIA
+cgBzAHQAdAB1AHYAdgB3AHgAeAB4AHgAeAB4AHgAeAB4AA8AQwAAAAAAAAAAAAAAAAAAAAAAAAAB
+AAEAAgADAAMABAAFAAUABgAHAAcACAAJAAkACgAjACMAJAAlACUAJgAnACcAKAApACkARgBHAEcA
+SABJAEkAZgBnAGcAaABpAGkAagBrAGsAbABtAG0AbgBvAG8AcABxAHEAcgBzAHMAdAB1AHUAdgB3
+AHcAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AAgAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAABAAIAAgADAAQABAAFAAYABgAHACAAIAAhACIAIgAjACQAJAAlACYAJgBDAEQARABF
+AEYARgBHAEgASABJAEoASgBLAEwATABNAE4ATgBPAFAAUABRAG4AbgBvAHAAcABxAHIAcgBzAHQA
+dAB1AHYAdgB3AHgAeAB4AHgAeAB4AHgAeAB4AA8AQwAAAAAAAAAAAAAAAQABAAIAAwADAAQABQAF
+AAYABwAHAAgACQAJAAoAIwAjACQAJQAlACYAJwAnACgAKQApAEYARwBHAEgASQBJAGYAZwBnAGgA
+aQBpAGoAawBrAGwAbQBtAG4AbwBvAHAAcQBxAHIAcwBzAHQAdQB1AHYAdwB3AHgAeAB4AHgAeAB4
+AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AAQAPwBUWgEAEtIAAAAAAAD//w8ACHgBALYAAAAAAAAA
+/wAAAAh4AQC3AAAAAAAAAP8AAAAIeAEAuAAAAAAAAAD/AAAACHgBALkAAAAAAAAA/wAAAAh4AQC6
+AAAAAAAAAP8AAAAIeAEAuwAAAAAAAAD/AAAACHgBAL0AAAAAAAAA/wAAAAh4AQC+AAAAAAAAAP8A
+AAAIeAEAvwAAAAAAAAD/AAAACHgBAMAAAAAAAAAA/wAAAAh4AQDBAAAAAAAAAP8AAAAIeAEAwgAA
+AAAAAAD/AAAAVFoBABPSAAAAAAAA//8PAAh4AQAbAQAAAAAAAP8AAAAIeAEAHAEAAAAAAAD/AAAA
+CHgBAB0BAAAAAAAA/wAAAAh4AQAeAQAAAAAAAP8AAAAIeAEAHwEAAAAAAAD/AAAACHgBACABAAAA
+AAAA/wAAAAh4AQAiAQAAAAAAAP8AAAAIeAEAIwEAAAAAAAD/AAAACHgBACQBAAAAAAAA/wAAAAh4
+AQAlAQAAAAAAAP8AAAAIeAEAJgEAAAAAAAD/AAAACHgBACcBAAAAAAAA/wAAAFRaAQAU0gAAAAAA
+AP//DwAIeAEAggEAAAAAAAD/AAAACHgBAIMBAAAAAAAA/wAAAAh4AQCEAQAAAAAAAP8AAAAIeAEA
+hQEAAAAAAAD/AAAACHgBAIYBAAAAAAAA/wAAAAh4AQCHAQAAAAAAAP8AAAAIeAEAiQEAAAAAAAD/
+AAAACHgBAIoBAAAAAAAA/wAAAAh4AQCLAQAAAAAAAP8AAAAIeAEAjAEAAAAAAAD/AAAACHgBAI0B
+AAAAAAAA/wAAAAh4AQCOAQAAAAAAAP8AAABUWgEACNIAAAAAAAD//wMAdFoBAACCAAAAAAAA/wEA
+AHRaAQABggAAAAAAAP8BAABUWgEACdIAAAAAAAD//wMAdFoBAAKCAAAAAAAA/wEAAHRaAQADggAA
+AAAAAP8BAABUWgEACtIAAAAAAAD//wMAdFoBAASCAAAAAAAA/wEAAHRaAQAFggAAAAAAAP8BAABU
+WgEABtIAAAAAAAD/AQAAVFoBAAfSAAAAAAAA/wMAAFRaAQAG0gAACQAAAAD+AwBUWgEAB9IAAAoA
+AAAA/A8AVFoBAAbSAAASAAAAAAD8B1RaAQAH0gAAFAAAAAAA8D9UWgEAFdIAAAAAAAD/AwAAVFoB
+AAzSAAAAAAAA/wEAAFRaAQAV0gAACgAAAAD8DwBUWgEADNIAAAkAAAAA/gMAVFoBABXSAAAUAAAA
+AADwP1RaAQAM0gAAEgAAAAAA/AcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAc0g3SEdIQ0gLSAdID0hvSC9IAgAXSEtIT0hTSBEMG0gfSBNIJEHDStQAaAYEBBQAEAAYACAAJ
+AAoACwAMAIMAkgDoAPcATgFdAQ8ALgAAAGwAAAB0AAAAgAAAAIwAAACdAAAABwAAAAQAAAAIAAAA
+EAAAAEAAAACAAAAAIAAAAAAAAAAJAAAAEgAAAAAAAAAKAAAAFAAAACAFgAC8fIAAGAAAAHx8gAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAABonwEABgAAANQagAAAAAAAAAAAAAAAAAAQtQEABgAAANQagAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAFgAC8fIAA
+GAAAAHx8gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAIAWAALx8gAAYAAAAfHyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqMABAAQA
+AADUGoAAAAAAAAAAAAAAAAAAyL8BAAQAAADUGoAAAAAAAAAAAAAAAAAATMEBAAYAAADUGoAAAAAA
+AAAAAAAAAAAAyL8BAAQAAADUGoAAAAAAAAAAAAAAAAAAqMABAAQAAADUGoAAAAAAAAAAAAAAAAAA
+yL8BAAQAAADUGoAAAAAAAAAAAAAAAAAAqMABAAQAAADUGoAAAAAAAAAAAAAAAAAAyL8BAAQAAADU
+GoAAAAAAAAAAAAAAAAAATMEBAAYAAADUGoAAAAAAAAAAAAAAAAAAyL8BAAQAAADUGoAAAAAAAAAA
+AAAAAAAAqMABAAQAAADUGoAAAAAAAAAAAAAAAAAATMEBAAYAAADUGoAAAAAAAAAAAAAAAAAAqMAB
+AAQAAADUGoAAAAAAAAAAAAAAAAAAqMABAAQAAADUGoAAAAAAAAAAAAAAAAAATMEBAAYAAADUGoAA
+IAWAALx8gAAYAAAAfHyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUBQAAAAAAAAAAAAAAAAAAAAAA/wD/AAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIDBAQE
+BAQFBgcICAgICAkKCwwNAAAABQYHCA0ODxAVFhcYGQAACg0RFAoNERQKDREUCgoAAAAAAAAGBgYG
+CQkJCQAGAABuO2g7YjtcO246aDpiOlw6bjloOWI5XDluOGg4YjhcOG43aDdiN1w3biloKWIpXClu
+KGgoYihcKG4naCdiJ1wnbhloGWIZXBluGGgYYhhcGG4XaBdiF1wXbgloCWIJXAluCGgIYghcCG4H
+aAdiB1wHbgZoBmIGXAZuBWgFYgVcBW4EaARiBFwEbgNoA2IDXANuAmgCYgJcAm4BaAFiAVwBbgBo
+AGIAXABuO2g7YjtcO246aDpiOlw6bjloOWI5XDluOGg4YjhcOG43aDdiN1w3biloKWIpXCluKGgo
+YihcKG4naCdiJ1wnbhloGWIZXBluGGgYYhhcGG4XaBdiF1wXbgloCWIJXAluCGgIYghcCG4HaAdi
+B1wHbgZoBmIGXAZuBWgFYgVcBW4EaARiBFwEbgNoA2IDXANuAmgCYgJcAm4BaAFiAVwBbgBoAGIA
+XABuO2g7YjtcO246aDpiOlw6bjloOWI5XDluOGg4YjhcOG43aDdiN1w3bjZoNmI2XDZuNWg1YjVc
+NW40aDRiNFw0bjNoM2IzXDNuMmgyYjJcMm4xaDFiMVwxbjBoMG4iaCJiIlwibiFoIWIhbhNoE2IT
+XBNuEmgSYhJcEm4RaBFiEVwRbgNoA2IDXANuAmgCYgJcAm4BaAFiAVwBbgBoAGIAXABcAFwAXAAA
+G0EAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABA
+AEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAA
+QABAAEAAQABAAEAAQABAAEAAQABAAEAAQAFBAEABQAFBAEABQAFAAUEBQQFBAUEBQQFBAUEBQQFB
+AUEBQQFBAUEBQQFBAUEBQQFBAUEBQQFBAUIBQQBCAEIAQgBCAEIAQgBCAEIAQgBCAEIAQgBCAEIA
+QwBDAEIAQgBCAEIAQwBDAEMAQwBDAEMARABDAEQAQwBEAEQARABEAUQBRAFEAUQBRQFEAUUBRQFE
+AUUBRQFEAUUBRQFFAUUBRQFFAUUBRQFFAUUBRgFGAUYBRgFHAUYBRwFHAkcBRwJHAkcCSAJHAkgC
+SAJIAkgCSAJIAkgCSAJJAkgCSQJJAkkCSQJJAkkCSgJKAkoCSgJKAkoCSwJKAksCSwJLAksCTAJM
+AkwCTAJNAk0CTQJNAk4CTgJOAk4CTwJOAk8CTwJPAk8CUAJQAlACUANRAlECUgNRA1ICUgNSA1IC
+UwJTAlQCUwJVAlQCVQJVAlYCVgJWAlYCVwJXAlgCVwFZAlgBWgFZAVoBWgFbAVsAWwBbAFwAXABd
+AFz/XQBd/17/Xv9e/17/X/9f/2D/YP5g/2D+Yf5h/mL+Yf1j/mP9ZP1k/Gb9Zfto+2f6afpo+Wr5
+avhr+Wr4a/hr92z4bPZt9231bfZt9W31bfVt9W31bPVt9Wv1bPVr9Wv1avVq9Wn1avVp9Wn1aPVo
+9Wf1aPVn9Wf1ZvVm9WX1ZvZl9mX2ZPZk9mT2ZPZj9mP2YvZj9mL2YvZh9mH2YfZh9mD2YPZf9mD2
+X/Zf9l72X/Ze9l72XfZe9l32XfZc9l33XPZc91v3W/db91v3Wvda91r3WvdZ91n3WfdZ91j3WPdY
+91j3V/dY91f3V/dW91f3VvdW91X3VvdV91X3VfdV91T3VPdU91T3U/dT91P3U/dS91P4UvdS+FL4
+UvhR+FH4UfhR+FD4UfhQ+FD4UPhQ+E/4T/hP+E/4TvhP+E74TvhO+E74TfhO+E34TfhN+E34TPhM
++Ez4TPhM+Ez4S/hL+Ev4S/hL+Ev4SvhK+Er4SvhK+Er4SfhJ+En4SfhJ+En5SPlI+Uj5SPlI+Uj5
+R/lH+Uf5R/lH+Uf5RvlG+Ub5RvlG+Ub5RflG+UX5RflF+UX5RflF+UT5RPlE+UT5RPlE+UP5RPlD
++UP5Q/lD+UP5Q/lC+UL5QvlC+UL5QvlC+UL5QflB+UH5QflB+UH5QPlB+UD5QPlA+UD5QPlAAAAA
+AAAAAAAAAAAAdNsBAAgAAAAUG4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAA/////////wAB//8CA////wT//////////////////////wX/Bv8H/wj/Cf8K/wv/
+DP///w3///8O////D////xD//////////////////////////////////////////////xH///8S
+////E////xT///8V////Fv///xf///8Y////Gf///xr///8b/////xz///8d////Hv///x////8g
+////If//////////////////////IiMk/yUmJ///KP///yn/////////////////////////////
+/////////////////////////////////////////////////wEEAAACBQEAAwYCAAQHAwAFCAQA
+BgkFAAcKBgAICwcACQwIAAoNCQALDgoADA8LAA0QDAAOEQ0AAUEABAJCAQQDQwIEBEQDBAVFBAQG
+RgUEB0cGBLcTIgC4FCMAuRUkALsWJQC8FyYAvRgnAMAZKADEGikABxsAAAgcAQALHQIADB4DABAf
+BAAiIQUAJCIGACYjBwAoJAgAKiUJACwmCgAuJwsAMCgMADQpDQA4Kg4APCsPAEAsEABkLhEAaC8S
+AGwwEwBwMRQAdDIVAHgzFgB8NBcAgDUYAIQ2GQCINxoAjDgbAJE6HACVOx0AmTweAJ09HwChPiAA
+pT8hACRJBgIsSgoCNEsNATxMDwFkTREBbE4TAXRPFQF8UBcBhFEZAZVSHQGdUx8BAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEFggWFhYMFhYWFhYWFhAAAAAADwA/AAEAAAAPAD8AAQAA
+AA8APwABAAAADwA/AAEAAAAPAD8AAQAAAA8APwABAAAADwA/AAIAAAAPAD8AAQAAAAAAAAABAAAA
+AgAAAAMAAAAAAAAABAAAAAIAAAAFAAAAMoABpQA8ODQwLCgkIBwYFBAMCAQADAgEADw4NDAsKCQg
+HBgUEAwIBAIAFQ8bAAAAIQAAAAIAAAIAAAAAAQEAAQIBAQEBAQEBAQEBAQICAgICAgICAwMDAwMD
+AwMEBAQEBAQEBAECAgICAgIDAwMDAwMDAwMDAwMDAwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAA
+AAABAQIBAgIDf/8HDx8/AQMBAw8HAQcPHz9///8FAAcCAwQGBnTRRRfooosuDQ8FBwkLAQMKFDdu
+VVVVAUtoLwFVVVUF4ziOA6qqqgJxHMcBqqqqCsdxHAcoACgAMAAsACwAKAA8ADQAKAAoADQAMAAs
+ACwARAA8AEAAPACMAGwAWABIAPQAsAAsACwAPAA0ADAALABUAEQAVABUAGwAYABcAFQAjAB4ADoB
+AgHVAN8A2gCiAHUAfwBqARoB2QDoAAoBugB5AIgAigUqAzkBqAGKBcoC2QBIAcoBSgHiAPkAygHq
+AIIAmQBm5gAAndiJnU7sxE40SIM0J3ZiJxqkQRoTO7ETERiBEQ/8wA9O7MROJ3ZiJxqkQRoTO7ET
+DdIgDYmd2AkIjMAIB37gBzRIgzQapEEaERiBEQ3SIA0IjMAIBmmQBrCy1QUFVEAFJ3ZiJxM7sRMN
+0iANiZ3YCQZpkAbETuwEBEZgBAM/8AOqqqqqGqRBGhM7sRMP/MAPERiBEQ3SIA0KqIAKEzuxEw/8
+wA8P/MAPDdIgDQu0QAsLtEALiZ3YCQ3SIA0KqIAKCqiACgiMwAgHeIAHB3iABwZpkAYP/MAPDdIg
+DQu0QAsN0iANC7RAC4md2AkIjMAIiZ3YCQiMwAgHfuAHB37gB8EsKQcKqIAKCIzACAd4gAcIjMAI
+B3iABwZpkAawstUFBmmQBrCy1QUFVEAFBVRABdYdxgQNABoAJwA0AE4AaAB1AIIAGgA0AE4AaACc
+ANAA6gAEAScATgB1AJwA6gA4AV8BhgE0AGgAnADQADgBoAHUAQgCDABOAGgAggB1AJwAwwBoAIIA
+ggCcALYAtgDQAJwAwwDDAOoAEQERATgBggCcALYAnAC2ANAA6gDQAOoABAEEAR4BwwDqABEB6gAR
+ATgBXwE4AV8BhgGGAa0BAAAwAAAANgAAAAwAAAASAAAAGAAAACQAAAAGAAAACQAAAAAAAAAAAAAA
+GCAUFA4OFBQFBgECAwQAAAABAQIBAgIDBAwMCAQMBARAAAAAgAAAAAABAAAAAgAAQAAAAAAEAABA
+AAAAQAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vQEFCQ0RFRkdISUpLTE1OT1BR
+UlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+fy0ADyAA8GEAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAKXGhPiZ7o32Df+91rHeVJFQYAMCqc59VhnnYrXmTZrsRY+dH0CJ
+h/oV7+uyyY4L++xBZ7P9X+pFvyP3U5bkW5vCdRzhrj1qTFpsQX4C9U+DXGj0UTTRCPmT4nOrU2I/
+KgwIUpVlRl6dKDChNw8KtS8JDjYkmxs93ybNaU7Nf5/qGxKeHXRYLjQtNrLc7rT7W/akTXZht859
+e1I+3XFelxP1pmi5AAAswWBAH+PIee22vtRGjdlnS3LelNSY6LBKhWu7KsXlTxbtxYbXmlVmlBHP
+ihDpBgSB/vCgRHi6JeNL86L+XcCAigWtP7whSHAE8d9jwXd1r2NCMCAa5Q79bb9MgRQYNSYvw+G+
+ojXMiDkuV5PyVYL8R3qsyOe6KzKV5qDAmBnRnn+jZkR+VKs7gwvKjCnH02s8KHmn4rwdFnatO9tW
+ZE50HhTbkgoMbEjkuF2fbr3vQ6bEqDmkMTfTi/Iy1UOLWW632owBZLHSnOBJtNj6rAfzJc+vyo70
+6UcYENVviPBvSnJcJDjxV8dzUZcjy3yhnOghPt2W3GGGDYUPkOBCfMRxqszYkAUGAfcSHKPCX2r5
+rtBpkRdYmSc6uSc42RPrsyszIrvScKmJB6czti0iPJIVIMlJh/+qeFB6pY8D+FmACRca2mUx18aE
+uNDDgrApd1oRHst7/KjWbTosAAECBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgECAwQAAAUGBwgJCgAAAAUGAAIEAAUAAAAAAAUH
+AQMEAAUBAAAAQCNAJSEhISFAQEBAQAUEBAEBQEBAQAUFQEAMDEANDAwBAQEFQEAFBQAEAARAQAAE
+QEBABUBAQEBABUBAQAUFBQEBAQFABQUFAQUBAUAFBQVABUAFBQUFBQQAAAAcEQAAHDIAABwzAAAE
+AAAAHBUAAAIAFwBsAHAEdAh0DAAEBAYAAAAAAAAAAGQAAAAAkAEACgAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA
+AQAAABAAAAAAAAAAAQAAAAEAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAGzBAQAAAAAAAAQAAGQAAAAH
+BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcG
+BgYGBgUFBQUFBAQEBAQDAwMDAwICAgICAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbFABAHRQAQB8UAEA1FABANxQAQDkUAEAAAolQ8dO
+fJgABxUoWS8AAAAEDgkdLTcAAAQOCR0sOwABEAABAAAAAoAAAUIGAhAAAiAAAAPAAAFDBgMQAALA
+AAADwAABQwYEEAACQAAAAoAAAUQGBREAAEAAAAPAAAFFBgYRAADgAAADwAABRQYHEQABAAAAAoAA
+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
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAICCADwAAQABpIAAAaSBAAGkgAABpIEAAICCADwAA6ABpIAAAaSBAAGkg
+AABpIEAAICCADwAAeAVpIAAAaSBAAGkgAABKIAAASiEAAEoiAABKIwAASiQAAEolAABKJgAASicA
+AEogABBKIQAQSiIAEEojABBKJAAQSiUAEEomABBKJwAQSiAAIEohACBKIgAgSiMAIEokACBKJQAg
+SiYAIEonACBKIAAwSiEAMAokgD+AAADAQSycMEAsnDBCJBw0CiKAP4AAaFMKIwA37g4AAEomAHBp
+IEAASiYAcEomAHBKJgBwSiYAcAAWAHCAAHQEQHggIECHAAAAAAAAAAAAAArIz3GgAMgfDhkYgAvI
+DxkYgAzIEBkYgA0SAjYAyER4ERkYgA7ILRkYgOB+4cT8HMi+/BxIvuHA4cHhwuHD/BwIsfwcSLH8
+HIix/BzIsfwcCLL8HEiy/ByIsvwcyLL8HAi/aiSAEOHEaiTAEOHE8cDPcKAA0BsUgM9xgABwBAQg
+gI/PUQThAKEK8i8pAQDPcIAAhAnwIEAAQHja/9HAwcRrJMAQwcRrJIAQwcSfdAQUCzQEFAo0BBQJ
+NAQUCDQEFAc0BBQGNAQUBTQEFAQ0wcPBwsHBwcDBxEUsfhAKJkB+wcRrJIAUwcQgIECHCsiHuAoa
+GDALyJu4CxoYMAzIDBoYMA3Ih7gNGhgwDsiFIMMPDhoYMOB+4HjxwArIlbgKGhgwC8ibuAsaGDAN
+yIq4jbiQuA0aGDDPcIAApAoYiBsIUQANyM9xAABICqy4DRoYMJYNIAAP2NHA4H7geM9wgABQjwCA
+hiD+gQj0DcgFIIAPAAAA1A0aGDBE8eB48cDPcQMAQA3PcKAAqCAtoM9ygACwBCCCAWkAoiIMIAFI
+2M9wgADoCCWAI4EggcdxAACIE6YLgAfR8eB4z3CAAOgIOQOAB+B48cDqCkABz3aAAHAEBegPCFEA
+AdgC8ADYC64G6Q0JUQAB2APwANgKrgXqDwpRAAHYAvAA2AyuANjPdaAAyB8YHRiQC46KIRAADegI
+jgvoz3ADAEANRR0YEDClAtgYHRiQAvAxpQqOGegJjhfoz3ABAG65IB0YkM9wgAAoACEdGJDPcIAA
+bAQiHRiQGBUAlkUgAAMYHRiQDI4H6BgVAJaFIAEEGB0YkBnrANiUuM92gACkBACmcdgGuJYO4AD8
+2SCGz3AAAEwcig7gAJ+5GBUAloW4GB0YkIECQAHgeM9xqqq7u89wnwC4/zagNqA2oDagz3GgAMg7
+DoGIuA6haSBAAP7x4HjxwKXBQcBCwQwcADEQHEAxz3GAAHxUNBnADzAZAA8sGcAOKBmADiQZQA7P
+cIAAfFQgGEALz3CAAHxUHBgAC89wgAB8VBgYwArPcIAAfFQUGIAKz3CAAHxUEBjACM9wgAB8VAwY
+gAjPcIAAfFQIGEAIz3GAAABUgBkACHwZwAd4GYAHdBlAB3AZAAdsGQAHaBmABmQZQAZgGQAGXBnA
+BVgZgAVUGUAFUBkABUwZwARIGYAERBlABEAZAATvoc6hraGMoSwZwAIoGYACJBlAAiAZAAIcGcAB
+GBmAARQZQAEQGQABY6FqIAAD2BkAAGogwALUGQAAaiCAAtAZAABqIEAByBkAAGogAAHEGQAAaiDA
+AMAZAABqIIAAvBkAAGogQAC4GQAAaiAAALQZAABqIIABzBkAANDYn7jPcZ8AuP8doc9wgAAAAMSA
+UyXENVMmxTXXugHm077EoFMjwAQFJo4f0P4AANahBSCAD7D+AAAWoRiBUyfONQDdlLgYoUDDAcAC
+wclzDBQGMGIJYAEQFAcwz3CgALQPvKBmCkAB4gzgAKlwCNgA2aYM4ACZuRbx4HjxwAoIYAF72OII
+YAHX2c9xgAB8VDQZwA8wGQAPLBnADigZgA4kGUAOz3CAAHxUIBhAC89wgAB8VBwYAAvPcIAAfFQY
+GMAKz3CAAHxUFBiACs9wgAB8VBAYwAjPcIAAfFQMGIAIz3CAAHxUCBhACM9xgAAAVIAZAAh8GcAH
+eBmAB3QZQAdwGQAHbBkAB2gZgAZkGUAGYBkABlwZwAVYGYAFVBlABVAZAAVMGcAESBmABEQZQARA
+GQAE76HOoa2hjKEsGcACKBmAAiQZQAIgGQACHBnAARgZgAEUGUABEBkAAWOhaiAAA9gZAABqIMAC
+1BkAAGoggALQGQAAaiBAAcgZAABqIAABxBkAAGogwADAGQAAaiCAALwZAABqIEAAuBkAAGogAAC0
+GQAAaiCAAcwZAADrds91oADIHxkVEZbPcAAARBwyCCABCiDAL1pwz3CAAIAoI4DPc58AuP/Pd4AA
+AAAEhwHg07gi6RkVApZBCt4AXYNA3p++3aMEpwUggA/Q/gAAFqNYG4AHIRUAliIVAJYEIYEP/wD8
+/wCBFqMI2BkdGJBWo12joQYAAdDZn7k9owSnBSCAD9D+AAAWo89wgACkBACACyCAhAjyWBuABDIM
+wAEM2CjwjCEBoCHyQiFBIEMJFQQzJkFwgAA0SEAngHI0eAB4SiFAIA3YFPBKIYAgBNgQ8BPYSiEA
+IQzwSiEAIhTYCPBKIQAkFdgE8BbYAvAP2M9zgABED3CDCnHJcgokQAQdBO//CiWABMkCz//xwOYO
+AAFyCwAAWg8AAor+nggAAAohwA/rcgbYiiPKAkokAADtA+//CiUAAfHABOkZCBIICiHAD+tyBdjs
+20okQADRA+//uHPPcoAAhAkVeiCi0cDgfuB4ANmeuRl5z3KAAHwJAYIleOB/AaIA2Z65GXnPcoAA
+fAkBgiZ44H8BogDZnrkZec9wgAB8CQGAJHhCIACA4H/KIGIA4HjPcIAAfAkBgOB/LygBAOB48cCe
+CM//4HjgeOB44HhpIIABbyE/AGkgAAD38fHAANiNuOoL4AIIGhgwEMyGIP+KCPLPcIAABQUAiIDg
+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
+QSjDAQ27ZXlFeYC5z3KgAOwnJqJALMEA5XnPcqsAoP86os9xoAC0D7yhIY7PcqcANET2GlgAJZZh
+lvNp9X8QvwUj0gP1GpgEZI7ljlEgQID3GtgA+BrYA89zpwAUSEEpgiFYGwABV6PPcqAAgERwgs93
+pQCs/0YjAwVwogDCBCKCDyEAAMEmulWnyiCCDwEA//8G9ADAGgvv+BThGKcgwIm4jrgZpwCOEwhe
+AEAmABPyCq/zFNkD8ADdz3agAPQHpKaeDU/yz3GAAGyOAYmF6ACJEwhfAAHZkLnPcKcAmEc8oAPY
+BKYDCB5Dz3GAAGyOAYmF6ACJFwhfAM9ypwCYR3AagAQIiYC4GqIAiXUIXgCpCB7D/QjewfoLj/WM
+IAKDzCCCjwAA/AAM8gohwA/rcgXYiiPOBEokQABxBm/yuHOMIAKDGPTPdYAAbI6pcMIOb/MD2QCN
+USAAgMohwg/KIsIHyiOCDwAAmAPKIGIB5fVb/wTwWgwP9AIOb/OA2Abw+g1v84DYVv8A2s9xoAD0
+B0ShA9gKoQmhSaFKCO/8CnA5AO/zocDgePHAz3KAAPBdJJIA2ILhzCFigMogYQAvJgfwz3GAAGyO
+AIkP8kCSEQqRAYYgPg6FIAEBBvCGID8FRSAACgCpCwgeAFX/AvA8/xsBz//xwM9wgABsjhIOb/MD
+2er/BwHP/z0FT/M5BU/z4H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB/ANjgfwDY4H7geKHB
+4H+hwOB44H7gePHA4cUByM91gADYRwClBG26DW/zAtnPcYAOBADscCCgVgxv8wCFmQeP8+B44H7g
+eOB+4HjxwAAWAEHPcoAA2EcGsgAWBUFAIgEEDhpEAUwlgITKIcIPyiLCB8ogYgHKI4IPAABEAAAF
+YvLKJCIAANoH8AAWAEEUIYwAALQB4i8gQgHzCgKACg1P89HA4H7geOB+4HjgfuB44H7geOB+4Hjg
+fuB44H7geOB+4HjgfuB44H7geM9wgADcCOB/AIDgeOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+
+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7g
+eOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H8B2OB+4HjgfuB4
+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
+sPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJh+gAAAQQEAAAAAAAAAAAAAAAAAAAAAAAAAAAC8foAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAD/AQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQEBAgAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAAAAYACAAJAAAA
+BwAAAAAAAAAAAAAAAAAAAAIAAAACAAAAgwAAAJIAAADoAAAA9wAAAE4BAABdAQAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAcAAAAAAAEAAgAAAAMAEwAjADIAfwAgABAACAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPR2gAAEnwEAAAAAAAAAAAAAAAAAAAAAAPR2
+gACQpQEAAAAAAAAAAAD0doAA+KYBAAAAAAAAAAAAAAAAAPR2gAAAAAAAAAAAAAEADwBkAAEAuAiA
+AAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAcAAAAAAAAAAAAA
+AAAAALQHAAAVAAAAGC2AACwKAAAsCgAALAoAACwKAAAsCgAALAoAACwKAAAsCgAALAoAACwKAAAs
+CgAALAoAACwKAAAsCgAALAoAACwKAAAsCgAALAoAACwKAAAsCgAALAoAACwKAAAsCgAALAoAACwK
+AAAsCgAALAoAACwKAAAsCgAALAoAACwKAABQCwAAAAAAAGgMAQAsCgAAgAgAACwKAAAsCgAALAoA
+AKgIAAD49AAA6FAAACwKAAAsCgAA3AgAANwIAADcCAAA3AgAANwIAADcCAAA3AgAACwKAAAsCgAA
+LAoAACwKAAD4CQAALAoAACwKAAAsCgAALAoAACwKAABUCwAALAoAACwKAABkCAAAAwAAAGysAQAC
+AAAAGBcBAAQAAAC8LwAABgAAAJC2AQARAAAArJgBAAcAAABooQEACAAAABC3AQAMAAAA1CwBAA0A
+AADQMAEADgAAAAgxAQAWAAAA0AsBAAsAAABQRAEAFAAAAABSAAAPAAAASGAAABAAAADIAwEAAQAA
+AGSdAQASAAAA+FEBABMAAABsSQEABQAAANBiAAAXAAAAUAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkIwAAZCMAAGQjAABUNQAAZCMAAGQjAAAYMQAAZCMA
+AGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAlBkAACwbAAAwGwAApBwAACQdAACoHAAA
+ZCMAAGQjAAC4PQAACEEAANhBAABkIwAAZCMAAGQjAACEPAAAHKkAABipAAAgqQAABDIAABQzAAC8
+VwEAWDUAANAzAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQj
+AABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMA
+AGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABENgAAZCMAAGQjAABkIwAAZCMAAGQjAAAkNwAA
+ZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAADcLwAAZCMAAPwvAABk
+IwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAMRjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQj
+AABkIwAAZCMAAGQjAABkIwAAZCMAABxDAQCgRgEAZCMAAGQtAQBkIwAAxC4BALgfAQBkIwAAZCMA
+AFBCAABkIwAAZCMAAGQjAABkIwAAZCMAAFCZAQDEmAEAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAA
+KO8AACi2AQAstgEAZCMAABS2AQBkIwAAZCMAAGQjAABkIwAARKEBAGQjAAD0owEAZCMAAGQjAABk
+IwAAPCAAAEAgAABkIwAAzEsBAOi3AQAEUgAAZCMAAGQjAABkIwAA6JsBAGQjAABkIwAAoAQBAFhJ
+AQBkIwAAZCMAAGQjAADMUAEAaBsBAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAHhbAQBkIwAA9LYB
+APi2AQAEtwEACLcBAPy2AQAAtwEADLcBAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAA
+ZCMAAChEAABkIwAAZCMAAGQjAABkIwAAZCMAAGS2AQCYtgEATDkAAGQjAABkIwAAZCMAAGQjAABk
+IwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAMRZ
+AQBkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMAAGQjAABkIwAAZCMA
+AGQjAABkIwAAZCMAAGQjAADwOQAAcDoAAPQ6AACQOwAAAF8AAGg7AABkIwAAZCMAAGQjAABkIwAA
+ZCMAAOg5AADsOQAAZCMAAGQjAACAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAEAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAA4QMOHuHhAw4e4cECCh7hgQUMHuEAAAAAAAAAAAAA4QMOHuHhAw4e4cECBh7h
+gQUMHuHBAgYe4YEFDB7hwQIGHuGBBQwe4cECBh7hgQUMHuEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQENDQ0NDQ0NDQ0NDQ0N
+DQ0NAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBDQ0NDQ0N
+DQ0NDQ0NDQ0NDQMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEB
+AQ0NDQ0NDQ0NDQ0NDQ0NDQ0DAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAJECAAAxyi8A
+kQIAADHKLwCRAgAAMcovAJECAAAxyi8AkQIAADHKLwCRAgAAMcovAJECAAAxyi8AkQIAADHKLwBD
+AQAAMcovAEMBAAAxyi8AQwEAADHKLwBDAQAAMcovAEMBAAAxyi8AQwEAADHKLwBDAQAAMcovAEMB
+AAAxyi8AQA0AAN4DCQAAAAAAAAAAAAAAAAAU7QAAAQAAANgsgACAgICAgICAgAGAAoCAgICAAQAA
+AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAA2CyAANgsgACkIKAAOCCgAAEAAAD8////AAAAAAAAAAD4LIAA+CyAAKgg
+oAA8IKAACAAAAPP///8AAAAAAAAAABgtgAAYLYAArCCgAGwgoAAwAAAAz////wAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAC0BAEABQAAABgtgADICQEA
+AP8DAOgJAQAA/wUAzAoBAAD/LQDwCgEAAP89AKgKAQAA/wQAjAoBAAD/JQDMEAEAnBEBAAASAQCk
+DQEAIA0BALwSAQAYEwEAXBMBAKATAQAAAAAALAEAAF4BAAABAAAAAQAAAAEAAAABAAAAAwAAAAAA
+AAAAAAAAAAAAAAMAAAACAAAAAwAAAAMAAAADAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAbBgB
+AAoAAADYLIAAAAAAAAAAAAAAAAAAzBgBAAoAAADYLIAAAAAAAAAAAAAAAAAA4BgBAAoAAADYLIAA
+AAAAAAAAAAAAAAAALBkBAAoAAADYLIAAAAAAAAAAAAAAAAAA9BkBAAoAAADYLIAAAAAAAAAAAAAA
+AAAAmBkBAAoAAADYLIAAAAAAAAAAAAAAAAAAAB8BAAYAAADYLIAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAEAAAAACAAAAAAKAAECcAAOgDAADoAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAANwzAQDUNAEAYDcBAPA5AQBMPAEAZD8BAFw2AQAgBYAAvHaAABgAAAB8doAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAB0QQEABgAAANgsgAAAAAAAAAAAAAAAAAD09gAACgAAANgsgAAA
+AAAAAAAAAAAAAAD09gAACgAAANgsgAAAAAAAAAAAAAAAAAD09gAACgAAANgsgAAAAAAAAAAAAAAA
+AAD09gAACgAAANgsgAAAAAAAAAAAAAAAAAD09gAACgAAANgsgAAAAAAAAAAAAAAAAAD09gAACgAA
+ANgsgAAAAAAAAAAAAAAAAAD09gAACgAAANgsgAAAAAAAAAAAAAAAAAD09gAACgAAANgsgAAAAAAA
+AAAAAAAAAAD09gAACgAAANgsgAAAAAAAAAAAAAAAAAD09gAACgAAANgsgAAAAAAAAAAAAAAAAAD0
+9gAACgAAANgsgAAAAAAAAAAAAAAAAAD09gAACgAAANgsgAAAAAAAAAAAAAAAAACwRwEACgAAANgs
+gAD/////AAAAAP////8AAAAAAAAAAAAAAADsSAEABQAAABgtgABkAGQAaQDcAMgAWgCqAL4AhgF9
+AD4AZABkAGkA3ADIAFoAqgC+AIYBfQA+AAAAAAABAQAAAAAAAAABAgEBAAIBAAECAgIAAQEAAgEC
+AQIAAgABAgMAAAAA6FoBANxnAQD0gIAAQAUAAAAAAADoWgEABFwBADSGgAAgAQAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAFGwBADBqAQBUh4AAVAAAAAAAAADoWgEAXGoBANSHgABQAQAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAABAAAA6FoBAOBmAQBwNoAAUAEAAAAAAAAYbAEA7GgBAMwGgAACAAAAAAAA
+AOhaAQAYaQEA0AaAAAQAAAAAAAAAEGwBAARcAQCoh4AALAAAAAAAAADoWgEAhGkBAAAAAAAAAAAA
+AAAAAOhaAQBEaQEA1AaAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAIAAgAD
+AAQABAAFAAYABgAHACAAIAAhACIAIgAjACQAJAAlACYAJgBDAEQARABFAEYARgBHAEgASABJAEoA
+SgBLAEwATABNAE4ATgBPAFAAUABRAG4AbgBvAHAAcABxAHIAcgBzAHQAdAB1AHYAdgB3AHgAeAB4
+AHgAeAB4AHgAeAB4AA8APwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAgADAAMA
+BAAFAAUABgAHAAcACAAJAAkACgAjACMAJAAlACUAJgAnACcAKAApACkARgBHAEcASABJAEkAZgBn
+AGcAaABpAGkAagBrAGsAbABtAG0AbgBvAG8AcABxAHEAcgBzAHMAdAB1AHUAdgB3AHcAeAB4AHgA
+eAB4AHgAeAB4AA4APwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAIAAgADAAQABAAF
+AAYABgAHACAAIAAhACIAIgAjACQAJAAlACYAJgBDAEQARABFAEYARgBHAEgASABJAEoASgBLAEwA
+TABNAE4ATgBPAFAAUABRAG4AbgBvAHAAcABxAHIAcgBzAHQAdAB1AHYAdgB3AHgAeAB4AHgAeAB4
+AHgAeAB4AA8AQwAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAgADAAMABAAFAAUABgAHAAcACAAJAAkA
+CgAjACMAJAAlACUAJgAnACcAKAApACkARgBHAEcASABJAEkAZgBnAGcAaABpAGkAagBrAGsAbABt
+AG0AbgBvAG8AcABxAHEAcgBzAHMAdAB1AHUAdgB3AHcAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgA
+eAB4AAgAQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAIAAgADAAQABAAFAAYABgAH
+ACAAIAAhACIAIgAjACQAJAAlACYAJgBDAEQARABFAEYARgBHAEgASABJAEoASgBLAEwATABNAE4A
+TgBPAFAAUABRAG4AbgBvAHAAcABxAHIAcgBzAHQAdAB1AHYAdgB3AHgAeAB4AHgAeAB4AHgAeAB4
+AA8AQwAAAAAAAAAAAAAAAQABAAIAAwADAAQABQAFAAYABwAHAAgACQAJAAoAIwAjACQAJQAlACYA
+JwAnACgAKQApAEYARwBHAEgASQBJAGYAZwBnAGgAaQBpAGoAawBrAGwAbQBtAG4AbwBvAHAAcQBx
+AHIAcwBzAHQAdQB1AHYAdwB3AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AAQA
+PwBETwEAEtIAAAAAAAD//w8A/GQBALYAAAAAAAAA/wAAAPxkAQC3AAAAAAAAAP8AAAD8ZAEAuAAA
+AAAAAAD/AAAA/GQBALkAAAAAAAAA/wAAAPxkAQC6AAAAAAAAAP8AAAD8ZAEAuwAAAAAAAAD/AAAA
+/GQBAL0AAAAAAAAA/wAAAPxkAQC+AAAAAAAAAP8AAAD8ZAEAvwAAAAAAAAD/AAAA/GQBAMAAAAAA
+AAAA/wAAAPxkAQDBAAAAAAAAAP8AAAD8ZAEAwgAAAAAAAAD/AAAARE8BABPSAAAAAAAA//8PAPxk
+AQAbAQAAAAAAAP8AAAD8ZAEAHAEAAAAAAAD/AAAA/GQBAB0BAAAAAAAA/wAAAPxkAQAeAQAAAAAA
+AP8AAAD8ZAEAHwEAAAAAAAD/AAAA/GQBACABAAAAAAAA/wAAAPxkAQAiAQAAAAAAAP8AAAD8ZAEA
+IwEAAAAAAAD/AAAA/GQBACQBAAAAAAAA/wAAAPxkAQAlAQAAAAAAAP8AAAD8ZAEAJgEAAAAAAAD/
+AAAA/GQBACcBAAAAAAAA/wAAAERPAQAU0gAAAAAAAP//DwD8ZAEAggEAAAAAAAD/AAAA/GQBAIMB
+AAAAAAAA/wAAAPxkAQCEAQAAAAAAAP8AAAD8ZAEAhQEAAAAAAAD/AAAA/GQBAIYBAAAAAAAA/wAA
+APxkAQCHAQAAAAAAAP8AAAD8ZAEAiQEAAAAAAAD/AAAA/GQBAIoBAAAAAAAA/wAAAPxkAQCLAQAA
+AAAAAP8AAAD8ZAEAjAEAAAAAAAD/AAAA/GQBAI0BAAAAAAAA/wAAAPxkAQCOAQAAAAAAAP8AAABE
+TwEACNIAAAAAAAD//wMAZE8BAACCAAAAAAAA/wEAAGRPAQABggAAAAAAAP8BAABETwEACdIAAAAA
+AAD//wMAZE8BAAKCAAAAAAAA/wEAAGRPAQADggAAAAAAAP8BAABETwEACtIAAAAAAAD//wMAZE8B
+AASCAAAAAAAA/wEAAGRPAQAFggAAAAAAAP8BAABETwEABtIAAAAAAAD/AQAARE8BAAfSAAAAAAAA
+/wMAAERPAQAG0gAACQAAAAD+AwBETwEAB9IAAAoAAAAA/A8ARE8BAAbSAAASAAAAAAD8B0RPAQAH
+0gAAFAAAAAAA8D9ETwEAFdIAAAAAAAD/AwAARE8BAAzSAAAAAAAA/wEAAERPAQAV0gAACgAAAAD8
+DwBETwEADNIAAAkAAAAA/gMARE8BABXSAAAUAAAAAADwP0RPAQAM0gAAEgAAAAAA/AcAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc0g3SEdIQ0gLSAdID0hvSC9IAgAXSEtIT
+0hTSBEMG0gfSBNIJEHDStQAaAYEBBQAEAAYACAAJAAoACwAMAIMAkgDoAPcATgFdAQ8ALgAAAGwA
+AAB0AAAAgAAAAIwAAACdAAAABwAAAAQAAAAIAAAAEAAAAEAAAACAAAAAIAAAAAAAAAAJAAAAEgAA
+AAAAAAAKAAAAFAAAAP////8AAAAALQEAAN0BAABaAgAAugIAAAoDAABNAwAAhwMAALoDAADoAwAA
+EQQAADcEAABZBAAAegQAAJgEAAC0BAAAzgQAAOcEAAD+BAAAFQUAACoFAAA+BQAAUQUAAGQFAAB1
+BQAAhgUAAJcFAACnBQAAtgUAAMUFAADTBQAA4QUAAO4FAAD7BQAACAYAABQGAAAgBgAAKwYAADcG
+AABCBgAATAYAAFcGAABhBgAAawYAAHUGAAB+BgAAiAYAAJEGAACaBgAAogYAAKsGAAC0BgAAvAYA
+AMQGAADMBgAA1AYAANsGAADjBgAA6gYAAPIGAAD5BgAAAAcAAAcHAAAOBwAAFAcAABsHAAAiBwAA
+KAcAAC4HAAA1BwAAOwcAAEEHAABHBwAATQcAAFMHAABYBwAAXgcAAGQHAABpBwAAbwcAAHQHAAB5
+BwAAfwcAAIQHAACJBwAAjgcAAJMHAACYBwAAnQcAAKIHAACnBwAAqwcAALAHAAC1BwAAuQcAAL4H
+AADCBwAAxwcAAMsHAADQBwAA1AcAANgHAADcBwAA4QcAAOUHAADpBwAA7QcAAPEHAAD1BwAA+QcA
+AP0HAAABCAAABQgAAAgIAAAMCAAAEAgAABQIAAAXCAAAGwgAAB8IAAAiCAAAJggAACkIAAAtCAAA
+MAgAADQIAAA3CAAAOwgAAD4IAABBCAAARQgAAEgIAABLCAAATwgAAFIIAABVCAAAWAgAAFsIAABf
+CAAAYggAAGUIAABoCAAAawgAAG4IAABxCAAAdAgAAHcIAAB6CAAAfQgAAIAIAACCCAAAhQgAAIgI
+AACLCAAAjggAAJEIAACTCAAAlggAAJkIAAAAAAAAAAAAAAoAAAAN0hHSENIC0gHSA9Ib0gvSAIAF
+0hLSE9IU0gRDCNIJ0grSHNIG0gfScNIAAAEAAAAAAAAAAAAAAAAAAAADAAAABAAAAAMAAAAAAAAA
+AwAAAAAAAAAAAAAAAAAAAAAAAAD/AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALUAGgGB
+AQQADwCDAOgATgGSAPcAXQEGAAgACQAKAAsADAAFAAAAAAAAACwAAQAAAAAAAAAAAAAAAAAAAAAA
+AAACAAIAAgAAAN8AAAAZAQAAYgEAAL4BAAAyAgAAwwIAAHsDAABiBAAAhAUAAPIGAAC+CAAAAgsA
+AAEAAAACAAAAAAAAAAvSDtIN0gjSCdIK0hLSE9IU0hHSENIC0gHSA9IAgAXSBEMb0hzSBNIARTDS
+MdIAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAHAAAAAAAAAAMAAAAE
+AAAAAwAAAAAAAAD/AwAAAwAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAtQAaAYEB
+BQAEAA8AEAAKAAsADAAAAAAAAAAAACwAAQAAAAIAAgACAAAAAAABAAEAAgACAAIAAwADAAQABAAF
+AAUABgAGAAcABwAIAAgACQAJAAoACgALAAsADAAMAA0ADQAOAA4ADwAAAAAAAAAAAAAAAADUngEA
+BgAAANgsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAACAFgAC8doAAGAAAAHx2gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
+AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAWAALx2gAAYAAAAfHaAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAKKoBAAQAAADYLIAAAAAAAAAAAAAAAAAAUKkBAAQAAADYLIAAAAAAAAAAAAAAAAAA
+yKoBAAYAAADYLIAAAAAAAAAAAAAAAAAAUKkBAAQAAADYLIAAAAAAAAAAAAAAAAAAKKoBAAQAAADY
+LIAAAAAAAAAAAAAAAAAAUKkBAAQAAADYLIAAAAAAAAAAAAAAAAAAKKoBAAQAAADYLIAAAAAAAAAA
+AAAAAAAAUKkBAAQAAADYLIAAAAAAAAAAAAAAAAAAyKoBAAYAAADYLIAAAAAAAAAAAAAAAAAAUKkB
+AAQAAADYLIAAAAAAAAAAAAAAAAAAKKoBAAQAAADYLIAAAAAAAAAAAAAAAAAAyKoBAAYAAADYLIAA
+AAAAAAAAAAAAAAAAKKoBAAQAAADYLIAAAAAAAAAAAAAAAAAAKKoBAAQAAADYLIAAAAAAAAAAAAAA
+AAAAyKoBAAYAAADYLIAAIAWAALx2gAAYAAAAfHaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUBQAAAAAAAAAAAAAAAAAAAAAA
+/wD/AAAAAAAABBYIFhYWDBYWFhYWFhYQAAAAAA8APwABAAAADwA/AAEAAAAPAD8AAQAAAA8APwAB
+AAAADwA/AAEAAAAPAD8AAQAAAA8APwACAAAADwA/AAEAAAAAAAAAAQAAAAIAAAADAAAAAAAAAAQA
+AAACAAAABQAAADKAAaUAPDg0MCwoJCAcGBQQDAgEAAwIBAA8ODQwLCgkIBwYFBAMCAQCABQOGgAA
+ACAAAAACAAACAAAAAAEBAAECAQEBAQEBAQEBAQECAgICAgICAgMDAwMDAwMDBAQEBAQEBAQBAgIC
+AgICAwMDAwMDAwMDAwMDAwMEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAQECAQICA3//Bw8f
+PwEDAQMPBwEHDx8/f///BQAHAgMEBgZ00UUX6KKLLg0PBQcJCwEDChQ3blVVVQFLaC8BVVVVBeM4
+jgOqqqoCcRzHAaqqqgrHcRwHKAAoADAALAAsACgAPAA0ACgAKAA0ADAALAAsAEQAPABAADwAjABs
+AFgASAD0ALAALAAsADwANAAwACwAVABEAFQAVABsAGAAXABUAIwAeAA6AQIB1QDfANoAogB1AH8A
+agEaAdkA6AAKAboAeQCIAIoFKgM5AagBigXKAtkASAHKAUoB4gD5AMoB6gCCAJkAZuYAAJ3YiZ1O
+7MRONEiDNCd2YicapEEaEzuxExEYgREP/MAPTuzETid2YicapEEaEzuxEw3SIA2JndgJCIzACAd+
+4Ac0SIM0GqRBGhEYgREN0iANCIzACAZpkAawstUFBVRABSd2YicTO7ETDdIgDYmd2AkGaZAGxE7s
+BARGYAQDP/ADqqqqqhqkQRoTO7ETD/zADxEYgREN0iANCqiAChM7sRMP/MAPD/zADw3SIA0LtEAL
+C7RAC4md2AkN0iANCqiACgqogAoIjMAIB3iABwd4gAcGaZAGD/zADw3SIA0LtEALDdIgDQu0QAuJ
+ndgJCIzACImd2AkIjMAIB37gBwd+4AfBLCkHCqiACgiMwAgHeIAHCIzACAd4gAcGaZAGsLLVBQZp
+kAawstUFBVRABQVUQAXWHcYEDQAaACcANABOAGgAdQCCABoANABOAGgAnADQAOoABAEnAE4AdQCc
+AOoAOAFfAYYBNABoAJwA0AA4AaAB1AEIAgwATgBoAIIAdQCcAMMAaACCAIIAnAC2ALYA0ACcAMMA
+wwDqABEBEQE4AYIAnAC2AJwAtgDQAOoA0ADqAAQBBAEeAcMA6gARAeoAEQE4AV8BOAFfAYYBhgGt
+AQAAMAAAADYAAAAMAAAAEgAAABgAAAAkAAAABgAAAAkAAAAAAAAAAAAAABggFBQODhQUBQYBAgME
+AAAAAQECAQICAwQMDAgEDAQEQAAAAIAAAAAAAQAAAAIAAEAAAAAABAAAQAAAAEAAAAAQERITFBUW
+FxgZGhscHR4fICEiIyQlJicoKSorLC0uL0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5f
+YGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn8tAA8gAPBhAAAAAAAAAAAAAAECBAQAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+AgECAwQAAAUGBwgJCgAAAAUGAAIEAAUAAAAAAAUHAQMEAAUBAAAAQCNAJSEhISFAQEBAQAUEBAEB
+QEBAQAUFQEAMDEANDAwBAQEFQEAFBQAEAARAQAAEQEBABUBAQEBABUBAQAUFBQEBAQFABQUFAQUB
+AUAFBQVABUAFBQUFBWwAcAR0CHQMAAQEBgAAAAAAAAAAZAAAAACQAQAKAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAA
+AAABAAAAEAAAAAAAAAABAAAAAQAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA6KoBAAAAAAAABAAAZAAA
+AAcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH
+BwYGBgYGBQUFBQUEBAQEBAMDAwMDAgICAgIBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMRQEAlEUBAJxFAQDwRQEA+EUBAABGAQAACiVD
+xE56lQAHEyRUKwAAAAQOCR0tNwAABA4JHSw7AAEQAAEAAAACgAABQgYCEAACIAAAA8AAAUMGAxAA
+AsAAAAPAAAFDBgQQAAJAAAACgAABRAYFEQAAQAAAA8AAAUUGBhEAAOAAAAPAAAFFBgcRAAEAAAAC
+gAABRgYIEQACIAAAA8AAAUcGCREAAsAAAAPAAAFHBgoRAAJAAAACgAABSAYLEgAAQAAAA8AAAUkG
+DBIAAOAAAAPAAAFJBg0SAAEAAAACgAABSgYOEgACAAAAAoAAAUwGAAAiFgAAgAAAAwAAAVkAJBYA
+AQAAAAMAAAFaACYWAAIAAAAEAAABWgAoFgACAAAAAwAAAVsAKhYAAoAAAAMAAAFcACwXAAAAAAAE
+AAABXAAuFwAAgAAAAwAAAV0AMBcAAQAAAAMAAAFeADQXAAIAAAADAAABXwA2FwACgAAAAwAAAWAA
+OBgAAAAAAAQAAAFgADwYAAEAAAADAAABYgA+GAACAAAABAAAAWIAQBgAAgAAAAMAAAFjAGQbAAIA
+AAADAAABbwFmGwACgAAAAwAAAXABaBwAAAAAAAQAAAFwAWwcAAEAAAADAAABcgFuHAACAAAABAAA
+AXIBcBwAAgAAAAMAAAFzAnQdAAAAAAAEAAABdAJ2HQAAgAAAAwAAAXUCeB0AAQAAAAMAAAF2Anwd
+AAIAAAADAAABdwN+HQACgAAAAwAAAXgDgB4AAAAAAAQAAAF4A4QeAAEAAAADAAABegOGHgACAAAA
+BAAAAXoEiB4AAgAAAAMAAAF7BIwfAAAAAAAEAAABfASRHwABQAAAAwAAAX4ElR8AAwAAAAQAAAF/
+BZcfAALAAAADAAABgAWZIAAAQAAAAwAAAYEFnSAAAUAAAAMAAAGCBZ8gAAHAAAADAAABgwWhIAAD
+AAAABAAAAYMFpSEAAEAAAAMAAAGFBQAAAAAAAAAAAAAkogEALKIBAJSiAQAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAD/////AAAAAAAAAAABAAAAAAAAAGAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAA
+AAAAAAUFBQUFBQUFAAAAAIANAAAAIAAAgA0AAIANAAAAIAAAgA0AAAAGAAAABAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAA==
+====
diff --git a/sys/contrib/dev/iwn/iwlwifi-4965-228.57.2.23.fw.uu b/sys/contrib/dev/iwn/iwlwifi-4965-228.57.2.23.fw.uu
deleted file mode 100644
index f378d11753d..00000000000
--- a/sys/contrib/dev/iwn/iwlwifi-4965-228.57.2.23.fw.uu
+++ /dev/null
@@ -1,3336 +0,0 @@
-Copyright (c) 2006, Intel Corporation.
-All rights reserved.
-
-Redistribution.  Redistribution and use in binary form, without 
-modification, are permitted provided that the following conditions are 
-met:
-
-* Redistributions must reproduce the above copyright notice and the 
-  following disclaimer in the documentation and/or other materials 
-  provided with the distribution. 
-* Neither the name of Intel Corporation nor the names of its suppliers 
-  may be used to endorse or promote products derived from this software 
-  without specific prior written permission. 
-* No reverse engineering, decompilation, or disassembly of this software 
-  is permitted.
-
-Limited patent license.  Intel Corporation grants a world-wide, 
-royalty-free, non-exclusive license under patents it now or hereafter 
-owns or controls to make, have made, use, import, offer to sell and 
-sell ("Utilize") this software, but solely to the extent that any 
-such patent is necessary to Utilize the software alone, or in 
-combination with an operating system licensed under an approved Open 
-Source license as listed by the Open Source Initiative at 
-http://opensource.org/licenses.  The patent license shall not apply to 
-any other combinations which include this software.  No hardware per 
-se is licensed hereunder.
-
-DISCLAIMER.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
-OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
-USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
-DAMAGE.
-begin-base64 644 iwlwifi-4965-228.57.2.23.fw.uu
-FwI55AByAQAAoAAASCgAAACgAAAUAwAAICCADwAAQABpIAAAaSBAAGkgAABpIEAAICCADwAA6ABp
-IAAAaSBAAGkgAABpIEAAICCADwAACARpIAAAaSBAAGkgAABKIAAASiEAAEoiAABKIwAASiQAAEol
-AABKJgAASicAAEogABBKIQAQSiIAEEojABBKJAAQSiUAEEomABBKJwAQSiAAIEohACBKIgAgSiMA
-IEokACBKJQAgSiYAIEonACBKIAAwSiEAMAokgD+AAACgQSycMEAsnDBCJBw0CiKAP4AASEcKIwA3
-UgwAAEomAHBpIEAASiYAcEomAHBKJgBwSiYAcAAWAHCAAAgPQHggIECHAAAAAAAAAAAAAPHA4cXP
-caAA0BtUgc9wgADoXUCgUIHPdaAAyB9BoFGBQqBSgUOgU4FEoM9ynwDY/w6iEYH9uA/yz3CAAOwD
-AICB4An0z3CAACQPAIiC4CANAQaKIP8PEh0YkBMdGJAUHRiQFR0YkJUEAADgeADIz3KgAMgfDhoY
-gAHIDxoYgALIEBoYgAMSATYEyCR4ERoYgOB+4HjxwOHFz3WgANAbEYXPcqAAyB/9uADbEfLPcYAA
-7AMAgYLgC/QA2J24ExoYgGChICCADwAAAAAUhc9xgAAEDwQggI8DVwTxAKEK8i8pAQDPcIAA9Bbw
-IEAAQHjg/wkEAAAAyIS4ABoYMAHIm7gBGhgwAsgCGhgwA8iHuAMaGDDgfvHAAMiVuAAaGDAByIq4
-m7gBGhgwA8gFIIAPAAAAfAMaGDBMyoHgDPQDyM9xAAAQCKy4AxoYMPILIAAL2GfYegqgAIohxQbR
-wOB+4HjPcQMAQA3PcKAAyB9DGFgAz3KAABwPIIIBaQCiQQSgAEjY4HjxwOHFANjPdQAAYAIIcfT/
-iiAHDalxCNpiCWAFGNtZAwAA4HjxwNoKAADPc4AABA+A4AbygeAG9AHYA/AA2AqrgOEG8oHhBvQB
-2APwANgLqwDYz3WgANAbFqUKiwDez3GgALAfgOCdvg/yCIuA4A3yz3cDAEANz3CgAKgg66DUoQLY
-FqUC8NWhC4uA4A/yCYuA4A3yz3AB4ACAFaXPcKAAyB8YEACGgrgWpYDiFvIA2ZS5z3CAABgPIKDP
-cAAATBzPcRCAAAB2C4AAz3CgAMgfGBAAhoO4FqWNAgAAz3CgAMgfGBAAhs9xoADQG6G4FqEA2J24
-z3GgALAfFaHgfuB4z3Gqqru7z3CfANj/LqAuoC6gLqDPcKAAyDsOgM9xoAC4P4i4EhkYgGkgQAD+
-8eB48cDhxaHBCiYAAQonQAFTJ801UyXENVMmxTXXukDDXgmgAKlzz3CgANAPAN21oM9xoADIOy6B
-4gigAH3YQgugAKlwCNgA2cYKoACZueH/+QEgAKHA4cT8HMi+/BxIvuHA4cHhwuHD/BwIsfwcSLH8
-HIix/BzIsfwcCLL8HEiy/ByIsvwcyLLhxeHG4cf8HAi0/BwIv2okgBDhxGokwBDhxPHA63fPdqAA
-0BtcFhAQz3AAAEQcCg+gAAolwB+4cM9wgACMMAOAgOAE8heG4rgh9M9wgAAYDwCACyBAgcogIgMR
-9EwgQKAK8kwggKAI8kwgAKEI8g/YB/AN2AXwBNgD8A7YqXHpctDbCiQABL3/0cDBxGskwBDBxGsk
-gBDBxJ90BBQQNMHHwcbBxQQUCzQEFAo0BBQJNAQUCDQEFAc0BBQGNAQUBTQEFAQ0wcPBwsHBwcDB
-xEUsfhAKJkB+wcRrJIAUwcQgIICH8cD6D0AAddimD2AAiiHIDmYLAADKCgABMP+eCQAABtgKIcAP
-63KKIwkDSiQAAAolAAGa/9HA4H78HIi2/BxItvwcCLb8HMi1/ByItfwcSLX8HAi1/BzItPwciLT8
-HEi0/BwItPwcyLP8HIiz/BxIs+B+4HgE3DjdNfDgeATcNN0z8OB4BNww3THw4HgE3CzdL/DgeATc
-KN0t8OB4BNwk3Svw4HgE3CDdKfDgeATcHN0n8OB4BNwY3SXw4HgE3BTdI/DgeATcEN0h8OB4BNwM
-3R/w4HgE3AjdHPDgeATcBN0Z8DQUGjAwFBkwLBQYMCgUFzAkFBYwIBQVMBwUFDAYFBMwFBQSMBAU
-ETAMFBAwAscBxrAkTTOwJB8z4H7xwE4Pz/8KJkCQCHUD8qDli/YF2AohwA/rcujbSiRAAF4N7/+4
-c89wgAD0FrV4jQfv/8CgANmeuRl5z3CAAOwWAYDPcoAAcBYleOB/gBoAAADZnrkZec9wgADsFgGA
-z3KAAHAWJnjgf4AaAAAA2Z65GXnPcIAA7BYBgCR4QiAAgMogYgDgfuB4z3CAAOwWAYDgfy8oAQDg
-ePHAngrP/2kggAFvIT8A//HxwGrY5g1gAIohxAEA2I24IgygAQkaGDASzEQgPoUJ8s9wgACOEQCI
-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
-IADJcIohxADPcKQAHEA2oCDYz3GkAAxCDKEU2A2hOdnPcKUAUA0wGECAz3A/AALBEKXPcGAAAswQ
-pc9wAQACyxClz3AIAAKJEKXPcHcAApAQpc9wxwACixClz3BfAAIYEKXPcAUAAhkQpc9wAwACwBCl
-z3AgAAJeEKXPcGMAAmUQpc9wBgACZhClz3ABAALYEKXPcGAAAtIQpcYO7/8KcBkCz/Zs8eB4ANoN
-8FR4Y4giiM9wrADUAQHiT3o1eIsY2IDPcIAA0BUgiDBy4CDKB+7x4HjxwOHFCHXPcYAAyAMFiYDg
-BPQEiYDgD/Lv/wfaANjPcawA1AHYGYCAgOXKIKEC0BkAgM0Bz/bgePHA4cUIdSGQQJDPcKMA2P1V
-eIoYWAAglSnYErjwIEEAAZUwcArycghv94og0QOKINEDZghv9yCFjQHP9vHA4cUIdSGQQJDPcKgA
-1ANVeAsYWIAglRXYE7jwIEEAAZUwcAryNghv94og0QOKINEDKghv9yCFUQHP9vHA4cUIdSGQQJDP
-cKwA1AFVeIsYWIAglSvYErjwIEEAAZUwcAry+g8v94og0QOKINED7g8v9yCFFQHP9vHA4cUIdQCQ
-z3KgAOwnCLhPIEEAAZUQuCV4z3GgAMQnEKEAlQi4RSDAABChKoIBlTBwC/KuDy/3iiDRA4og0QOi
-Dy/3IIXNAM/24HjPcawA1AEA2IsZGICMGRiAB9iNGRiABtmRuc9woADEJzCgz3EYAAcCMKDPcoAA
-dHs0ioDhBfTPcRAABgIwoCCCgOFR8gbZlrkwoM9xeAAChTCgz3ECAAKBMKDPcVUAAoIwoM9xEAAC
-hjCgz3FBAAKHMKDPcQcAAtMwoM9xAQACijCgz3EAAAKlMKDPcQAAAqYwoM9xAAACpzCgz3EGAAKo
-MKDPcQYAAqkwoM9xBgACqjCgz3H/AAfFMKDPcf8AB9swoM9x/wAHJjCgz3H/AAcjMKDPcRgAAh8w
-oM9xzAACHlfwB9mWuTCgz3EBAAKHMKDPcQMAAsUwoM9xgAAC2zCgz3FwAAKFMKDPcXAAAoEwoM9x
-BgAC0zCgz3EhAAKKMKDPcQUAAqUwoM9xBQACpjCgz3EFAAKnMKDPcQwAAqgwoM9xDAACqTCgz3EM
-AAKqMKDPcUQAAiYwoM9xRAACIzCgz3EoAAIWMKDPcZkAAhUwoM9x/wAHgjCgz3H/AAeGMKDPcf8A
-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
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlAEAAAEBAQEAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA
-AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAA+G2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
-AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAP8A8PDw8PDw8PDw8PDw8PDw8AAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAGAYAABgGAAAYBgAAFggAABgGAAAYBgAADAgAABgGAAAYBgAAGAYAABgGAAAYBgA
-AGAYAABgGAAAYBgAAGAYAAD0EQAAABIAAGAYAACgEgAAyBMAAEgTAABgGAAAYBgAAJQkAABAJwAA
-6CcAAGAYAABgGAAAYBgAAMgjAABgGAAAJCkAAGQqAABgGAAAYBgAAGAYAABcIAAAYBgAAGAYAABg
-GAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAY
-AABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgA
-AGAYAABgGAAAYBgAAKAgAABgGAAAYBgAAGAYAABgGAAAYBgAAHQhAABgGAAAYBgAAGAYAABgGAAA
-YBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABg
-GAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAY
-AABgGAAAZAABAGADAQBgGAAAxAUBAGAYAABwBwEADM8AAAzQAABgGAAAYBgAAGAYAABgGAAAYBgA
-AGAYAABgGAAAYDwBAAxPAQBgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAA
-YBgAAGAYAABgGAAAYBgAAGAYAADYVQEAYBgAALRXAQBgGAAAYBgAAGAYAABUFAAAoBsBAGAYAABg
-GAAAMGUBACwwAABgGAAAYBgAAGAYAAAw1AAAYBgAAGAYAACkwwAAeCIBAGAYAABgGAAAYBgAAIwy
-AQDk1AAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAHCgBAGAYAABgGAAAYBgAAGAYAABgGAAAYBgA
-AGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAfDAAAGAYAABgGAAA
-YBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABg
-GAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAY
-AABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgA
-AGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAA8CIAAPQiAABgGAAA
-YBgAAGAYAAAYAA38DnMPcB0gH0AgQCFAIjElZiYPJ2YoDysdLEQtHS5EMRAyCTMQNAlvWnAAcQBy
-AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5AcA
-AOQHAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAADkBwAA
-5AcAAOQHAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAADk
-BwAA5AcAAMwIAAAAAAAAbMYAAOQHAADgBgAA5AcAAPgaAQAUBwAA6LEAAOQHAADkBwAA5AcAAOQH
-AADkBwAA5AcAAJwHAAA4BwAAOAcAADgHAAA4BwAAtAgAAOQHAADkBwAA5AcAALAHAADkBwAA5AcA
-AOQHAADkBwAA5AcAANAIAADkBwAA5AcAANAGAAADAAAABGQBAAQAAABg3gAADgAAACRVAQAIAAAA
-OB0BAAIAAABYWQEACgAAABgeAQALAAAAxAkBAAwAAAD4CQEAEQAAABDGAAAJAAAATAEBABAAAAAo
-MAAADQAAANjCAAABAAAAxNMAAA8AAAAcOQEAEgAAAMwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgICAgICAAQACAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAADjIAAAMyQAAIMwAAFTKAABUyQAA7MwAAHDN
-AACozQAA7M0AAAAAAAAsAQAAXgEAAAEAAAABAAAAAQAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAwAA
-AAIAAAADAAAAAwAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwNAAAA
-AAAAAAAAAAAAAAAA/wD/AP8A////AP8A/wAAAQAAAAAAAAAFAAAAAAAAAAAAAAAQAAAAAIAAAAAA
-oAAQJwAA6AMAAOgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-/AwBABgOAQCcEAEAiBIBAPgUAQAoGAEAeA8BAJQPgABsY4AAGAAAAExjgAAAAAAAAAAAAGQygACk
-Y4AAMBoBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgIDBAQFBgYHCAgJCgoL
-DAwNDg4PZmZnaGhpamprbGxtbm5vcHBxcnJzdHR1dnZ3eHh5enp7fHx9fn4VPwAAAAAAAAAAAAAA
-AAABAgIDBAQFBgYHCAgJCgoLDAwNKCgpKiorLCwtR0hJSUpLS0xNTU5PT1BRUVJtbW5vb3BxcXJz
-c3R1dXZ3d3h5eXp7fH0MPzQsAQBQcAAANCwBAFFwAADoLAEARQAAAOgsAQBEAAAA6CwBAEkAAADo
-LAEASAAAADQsAQBScAAANCwBAFNwAADoLAEATgAAAOgsAQBNAAAA6CwBAFIAAADoLAEAUQAAADQs
-AQBA0gAANCwBAEHSAADoLAEAVwAAAOgsAQBWAAAA6CwBAFsAAADoLAEAWgAAADQsAQAI0gAANCwB
-AAnSAABwLAEAAIIAAHAsAQABggAANCwBAEXSAAA0LAEARtIAAHAsAQAAggAAcCwBAAGCAAA0LAEA
-BtIAADQsAQA+kAAANCwBAEPSAAA0LAEARNIAADQsAQBQ0gAANCwBAFHSAAA0LAEAUtIAADQsAQBT
-0gAANCwBAD+QAAA0LAEAE9IAADQsAQBAkAAANCwBABXSAAA0LAEAP9IAADQsAQA+0gAANCwBAD+Q
-AAA0LAEAE9IAAGQAZABpANwAyABaAKoAvgCGAX0APgBkAGQAaQDcAMgAWgCqAL4AhgF9AD4AAAAA
-AAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQPgABsY4AAGAAAAExjgAAAAAAAAAAAAFQ2
-gACkY4AAAAAAAJQPgABsY4AAGAAAAExjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4NoAApGOAAKBdAQCUD4AA
-bGOAABgAAABMY4AAAAAAAAAAAACUD4AAbGOAABgAAABMY4AAAAAAAAAAAADQNoAApGOAAKBkAQAA
-FAUAAAAAAAAAAAAAAAAAAAAAAP8A/wAAAAAAP3s/dT9uP2g/Yj5uPmg+Yj1uPWg9YjxuPGg8Yjtu
-O2g7YjpuOmg6YjluOWg5YjhuOGg4YjduN2g3YjZuNmg2YjVuNWg1YjRuNGg0YjNuM2gzYjJuMmgy
-YjFuMWgxYjBuMGgwYiVuJWglYiRuJGgkYiNuI2gjYiJuGGgYYhduF2gXYhZuFmgWYhVuFWgVYhRu
-FGgUYhNuE2gTYhJuCGgIYgduB2gHYgZuBmgGYgVuBWgFYgRuBGgEYgNuA2gDYgJuAmgCYgFuAWgB
-YgBuAGgAYgBdAFgAUwBOP24/aD9iPm4+aD5iPW49aD1iPG48aDxiO247aDtiOm46aDpiOW45aDli
-OG44aDhiN243aDdiNm42aDZiNW41aDViNG40aDRiM24zaDNiMm4yaDJiMW4xaDFiMG4waDBiBm4G
-aAZiBW4FaAViBG4EaARiA24DaANiAm4CaAJiAW4BaAFiAG4AaABiAGEAYABfAF4AXQBcAFsAWgBZ
-AFgAVwBWAFUAVABTAFIAUQBQAE8ATgBNAEwASwBKAEkASABHAEYARQBEAAD/////////AAH//wID
-////BP//////////////////////Bf8G/wf/CP8J/wr/C/8M////Df///w7///8P////EP//////
-////////////////////////////////////////Ef///xL///8T////FP///xX///8W////F///
-/xj///8Z////Gv///xv/////HP///x3///8e////H////yD///8h//////////////////////8i
-IyT/JSYn//8o////Kf//////////////////////////////////////////////////////////
-////////////////////AAAAAA8APwABAAAADwA/AAEAAAAPAD8AAQAAAA8APwABAAAADwA/AAEA
-AAAPAD8AAQAAAA8APwABAAAADwA/AAIAAAABAAAAOeQBpQAtKickIR4bGBUSDwwJBgMADAgEADw4
-NDAsKCQgHBgUEAwIBH//Bw8fPwEDAQMPBwEHDx8/f///BQAHAgMEBgZ00UUX6KKLLg0PBQcJCwED
-ChQ3blVVVQFLaC8BVVVVBeM4jgOqqqoCcRzHAaqqqgrHcRwHDw8PBwYHAgMEBQABCAkLCigAKAAw
-ACwALAAoADwANAAoACgANAAwACwALABEADwAQAA8AIwAbABYAEgA9ACwACwALAA8ADQAMAAsAFQA
-RABUAFQAbABgAFwAVACMAHgAOgECAdUA3wDaAKIAdQB/AGoBGgHZAOgACgG6AHkAiACKBSoDOQGo
-AYoFygLZAEgBygFKAeIA+QDKAeoAggCZAPQCRAK1AdUBlAKEAfUAQQKsAJAAhACAAHgAeAB4AHQA
-Zg4AAImd2AnETuwEgzRIA2IndgJBGqQBsRM7AYERGAHAD/wAL6G9BJfQXgIPi5QBS2gvAYdFygAl
-tJcABdmGAOtceQCqqqoKAA0AAAAaAAAAJwAAADQAAABOAAAAaAAAAHUAAACCAAAAGwAAADYAAABR
-AAAAbAAAAKIAAADYAAAA8wAAAA4BAJ3YiZ1O7MRONEiDNCd2YicapEEaEzuxExEYgREP/MAPTuzE
-Tid2YicapEEaEzuxEw3SIA2JndgJCIzACAd+4Ac0SIM0GqRBGhEYgREN0iANCIzACAZpkAawstUF
-BVRABSd2YicTO7ETDdIgDYmd2AkGaZAGxE7sBARGYAQDP/ADqqqqqhqkQRoTO7ETD/zADxEYgREN
-0iANCqiAChM7sRMP/MAPD/zADw3SIA0LtEALC7RAC4md2AkN0iANCqiACgqogAoIjMAIB3iABwd4
-gAcGaZAGD/zADw3SIA0LtEALDdIgDQu0QAuJndgJCIzACImd2AkIjMAIB37gBwd+4AfBLCkHCqiA
-CgiMwAgHeIAHCIzACAd4gAcGaZAGsLLVBQZpkAawstUFBVRABQVUQAXWHcYEAAAAAAAAAAAYIBQU
-Dg4UFAUGAQIDBAAAAAAAAAAHCAgAAAAHCg0QEQAAAAcLDhARAAcLDhUbHyIAAAAABwoLDQAABwoP
-FRcaAAAICxAVGBsACxAWISwxNgAAAAcLDxASAAcLDxYdISQACAwPFx4iJQgPFx4tPERLAAgLDxYd
-ISUIDxYdLDpCSQgQFx8uPURMEB8uPVt5iJcABwcPBw8PDwQMDAgEDAQEQAAAAIAAAAAAAQAAAAIA
-AEAAAAAABAAAQAAAAEAAAAAzEwAAAAUKDwEBAAECAQEBpcaE+JnujfYN/73Wsd5UkVBgAwKpzn1W
-GediteZNmuxFj50fQImH+hXv67LJjgv77EFns/1f6kW/I/dTluRbm8J1HOGuPWpMWmxBfgL1T4Nc
-aPRRNNEI+ZPic6tTYj8qDAhSlWVGXp0oMKE3Dwq1LwkONiSbGz3fJs1pTs1/n+obEp4ddFguNC02
-stzutPtb9qRNdmG3zn17Uj7dcV6XE/WmaLkAACzBYEAf48h57ba+1EaN2WdLct6U1JjosEqFa7sq
-xeVPFu3FhteaVWaUEc+KEOkGBIH+8KBEeLol40vzov5dwICKBa0/vCFIcATx32PBd3WvY0IwIBrl
-Dv1tv0yBFBg1Ji/D4b6iNcyIOS5Xk/JVgvxHeqzI57orMpXmoMCYGdGef6NmRH5UqzuDC8qMKcfT
-azwoeafivB0Wdq0721ZkTnQeFNuSCgxsSOS4XZ9uve9DpsSoOaQxN9OL8jLVQ4tZbrfajAFksdKc
-4Em02PqsB/Mlz6/KjvTpRxgQ1W+I8G9KclwkOPFXx3NRlyPLfKGc6CE+3ZbcYYYNhQ+Q4EJ8xHGq
-zNiQBQYB9xIco8Jfavmu0GmRF1iZJzq5JzjZE+uzKzMiu9JwqYkHpzO2LSI8khUgyUmH/6p4UHql
-jwP4WYAJFxraZTHXxoS40MOCsCl3WhEey3v8qNZtOixYnwAA9JsAAOieAACknAAA2EAAANhBAABU
-QAAAGEIAAAAAwABwRKAAbAAAgAAAsAAECKAAAAAAAAQAsAAYCKAAAQAAAAAAsAAcCKAAAwAAAAAA
-sADsHKAAMAAAAAAAsABQFKAAAwAAAAAAsAAEGKAAAwAAAAAAsABARKAAAAAAAAAAsAAYCKAAAAAA
-AAAAAAAEKKAAAgEAAAAAAABcSKcAAAAAAAAAAAAEKKAAAmkAAAKQ8QAEKKAAAQAAAACAAQAYKKAA
-AAAAAAAAAADwHKAAAgAAAAAAAADsHKAAAQAAAACgAQAIAKwAAAAAAAAQAgAwQKQAAAAAAAAAAAAQ
-HKAAAABwAAAAAADgHKAAAAAAAAAAAIAkEKAAAQAAAAAAMAAkEKAAAAAAAAAAAAA4HKAAAIAAAAAA
-gAI4HKAAAAABAABQQAAEKKAAAgMAAABgUAAEKKAAAgQAAAQgAAAEKKAAAQAAAABAAAAIAKwAAAAA
-AAAAoADsHKAAAgAAAAAAkABwRKAAJAAAgACwAgAACKoAAAAAAADAAgAECKoAAAAAAAUAEAFwRKAA
-hAAAgAAwAAAYKKAAAAAAAAAAAAA4HKAAAAABAACAAADgHKAAAAAAAABwoAAICKoAAAAAAACQoAAE
-AKoAAAAAAABwkAAoSKcAAAAAAACQkAAAAKYAAAAAAAMAAAAECKAAAwAAAAAAAACkIKAAAAAAAAAA
-AIAAIKAAAABgAAAAAIA4HKAAAAABAACgAYAIAKwAAAAAAASQAQAEKKAAAQAAAACQAQAEKKAAAQAA
-AACgAYAIAKwAAAAAAAAAAABcSKcAAQAAAAAgAgAIAKwAAAAAAAAAAAAwSacAAgAAAAAAAAAEKKAA
-AgFAAAAAAAAISKcA/wAAAAAAAAAEKKAAAmkhAAAAAABkQKYAAAgAAAAAAAAsSacAAAAAAAAAAIAA
-SKcAAQAAAAECAQIDBAAABQYHCAkKAAAABQYAAgQAAAAFBwEDBAAAQCNAJSEhISFAQEBAQAUEBAEB
-QEBAQAUFQEAMDEANDAwBAQEFQEAFBQAEAARAQAAEQEBABUBAQEBABUBAQAUFBQEBAQFABQUFAQUB
-AUAFBQVABUAFBQUFBQQAAAAcEQAAHDIAABwzAAAEAAAAHBUAAAAAAAAAAAAAZAAAAACQAQAKAAAA
-AAQEBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcQJAAAAAAAAAAAAAAAAAAABAAAABQAAAAAA
-AAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAEAAAAQAAAAAAAAAAEAAAABAAAAAAAA
-AP8AAAD/AAAAAAAAAAAAAAAMYwEAjAIBAJACAQCUAgEA8AIBAPgCAQAAAwEAAAQLCRUlLwAABBEJ
-HCcyAAGAABGAABYEAiAAEoAAFgQDQAAQgAAXBATgABCAABcEBYAAEYAAFwQGIAASgAAXBAdAABCA
-ABgECOAAEIAAGAQJgAARgAAYBAogABKAABgEC0AAEIAAGQQM4AAQgAAZBA2AABGAABkEDoAAEIAA
-GgQigAAYAAAWACQAABkAABYBJgAAIgAAFgEoAAAaAAAWASqAABoAABYBLAAAIAAAFwEugAAYAAAX
-ATAAABkAABcBNAAAGgAAFwE2gAAaAAAXATgAACAAABgBPAAAGQAAGAE+AAAiAAAYAUAAABoAABgB
-ZAAAGgAAGwJmgAAaAAAbAmgAACAAABwCbAAAGQAAHAJuAAAiAAAcAnAAABoAABwCdAAAIAAAHQJ2
-gAAYAAAdAngAABkAAB0CfAAAGgAAHQJ+gAAaAAAdAoAAACAAAB4ChAAAGQAAHgKGAAAiAAAeAogA
-ABoAAB4CjAAAIAAAHwKRQAAZAAAfA5UAACMAAB8Dl8AAGgAAHwOZQAAYAAAgA51AABkAACADn8AA
-GQAAIAOhAAAjAAAgA6VAABgAACEDJE4BAHg+AQBEQAEAeEEBANRDAQCgRgEAjEoBAARMAQAoTQEA
-bFoBAIRaAQDwWgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANABAAEwAWABoAIAAmAC0ANQBAAEwAWgBrAIAAmAC0ACYA
-LQA1AEAATABaAGsAgACYALQA1gAAATABaQGtAQACawCAAJgAtADWAAABMAFpAa0BAAJgAtMCXQMA
-BMEEpgUwAWkBrQEAAmAC0wJdAwAEwQSmBbcGAAiCCUwLbg0AEFAAXwBxAIcAoQC/AOMADwFCAX8B
-xwEeAoQC/gKOAzwE////////////////////////////////////////////////////////////
-/////////////////////////zABaQGtAQACYALTAl0DAATBBKYFtwYACIIJTAtuDQAQAAAAAAAC
-BAYDCQYJAAkACQAJAAkACQAAAAAAAAAAAAAAAAAAAAAAAP////8AAAAAYAAAAAUFBQUFBQUFAAAA
-AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAA4AAAAOAAAABAAAgAAAAIAAAAAAAwAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIIAPAABAAGkgAABp
-IEAAaSAAAGkgQAAgIIAPAADoAGkgAABpIEAAaSAAAGkgQAAgIIAPAAAYAWkgAABpIEAAaSAAAEog
-AABKIQAASiIAAEojAABKJAAASiUAAEomAABKJwAASiAAEEohABBKIgAQSiMAEEokABBKJQAQSiYA
-EEonABBKIAAgSiEAIEoiACBKIwAgSiQAIEolACBKJgAgSicAIEogADBKIQAwCiSAP4AAAKBBLJww
-QCycMEIkHDQKIoA/gAAMMwojADdSCAAASiYAcGkgQABKJgBwSiYAcEomAHBKJgBwABYAcIAABA9A
-eCAgQIcAAAAAAAAAAAAAiiH/D89woADIHxMYWIAgIIAPAAAAAOB+4H7gePHAVgkgAAHYz3UAAIQI
-QH3PdqAAwC8Uhs93oACsL4u4GacUhuO4//VgfQLYiiAIABanYH0D2M93oADIHwDYDh8YkA8fGJAQ
-HxiQER8YkI4LIAA82E8gQQAaCiAAPNhKC0AAYgoAAGB9BdjPcaAAhDQEgc9yoAC8N/+4+fMUERIA
-GBETAAwREQAEgdO4GnA2GhiAYH0H2M9xgAAADwIhgA+AAAAAQSgCAQAigwQCIwIgaHAyCGAAAdtg
-fQnYz3CgANAbEYD9uPzzYH0K2ADYnbgTHxiQYH0L2M9xgADsAwLYAKE3hs9wgAAEBCCgOobPcIAA
-CAQgoGB9DNgqcADZCnLiDyAAKHMA2J24Dx8YkM9wgADYAwAQGgDPcQBtABDPcJ8A2P8xoGB9Ddhp
-IIAAbyE/AH0AAADgePwciLb8HEi2/BwItvwcyLX8HIi1/BxItfwcCLX8HMi0/ByItPwcSLT8HAi0
-/BzIs/wciLP8HEiz4H7geATcON018OB4BNw03TPw4HgE3DDdMfDgeATcLN0v8OB4BNwo3S3w4HgE
-3CTdK/DgeATcIN0p8OB4BNwc3Sfw4HgE3BjdJfDgeATcFN0j8OB4BNwQ3SHw4HgE3AzdH/DgeATc
-CN0c8OB4BNwE3RnwNBQaMDAUGTAsFBgwKBQXMCQUFjAgFBUwHBQUMBgUEzAUFBIwEBQRMAwUEDAC
-xwHGsCRNM7AkHzPgfuHFocEIc891gAAIDwGVAByEME8gwgMB4BB4AhyEMI+4AbVHaQQigg8AAPz/
-7HBAoADCQKAiuQXwQKAE42G5geFAgzz3z3CgANAPDhiYgKHA4H/BxfHA9g7v/5hwz3CgAMwr1IAA
-2s91oADALxcdmJDPc58A2P8Vg89ynwC4/+bf/aL3gwQnvp8A8AAA+/UdomgaAAE7omnYGLgZohcd
-mJMRB8//8cCqDu//ANm7wY+5z3WAAAgPIbUA2SGtz3IBADnkQMJBwULBAdvPcoAASDFAimPDR8DP
-cIAAtA4NHIIwDhzCMA8cQjDPcoAAfBBEws9ygADsD0XCRsEAgEokgHBIwKgggAfPcIAAuA7wIEIA
-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
-BgAwps9xwAAGQzCmz3HAAAZMMKbPccAABlUwps9xpQDwzBgZwIPPcaQADEK0oSvaz3WkAJBBXqUS
-389zpAAUQfijLNtopc9zpACgP1yjP9pLpWTaz3OkABxAUqNRo2naT6Hc2lChyNpYo1raz3ekAJhA
-QKeq2kGnvtpbo4oihQJco33aWaM+2kmliiLEAFajINpMoRTaTaE52s9xpQBQDTAZgIDPcT8AAsEw
-ps9xYAACzDCmz3EBAALLMKbPcQgAAokwps9xdwACkDCmz3HHAAKLMKbPcV8AAhgwps9xBQACGTCm
-z3EDAALAMKbPcSAAAl4wps9xYwACZTCmz3EGAAJmMKbPcQEAAtgwps9xYAAC0jCmsg7P/2kGj//x
-wL4I7/9A2EQgAQMiuc9ygADIAyCywbgBsgHYBKrRwOB/BarxwJoI7/8E2IUgww8QeY4L7/8E2NHA
-4H7xwMYNj/8A3vj/B9kKuc9yoADAL89woAAoMDegB9nPcKAA0Bs3oM9woADQD9WgE4LPcaAArC+Q
-uBihAd3i/0DZz3CfANj/KqBu2c9woACoICOgANiTuM9xoACwHxWhz3CgACwg3aAD2BO4FKE2CQAA
-h/+pcAbZqXIuDiAAyXMiCEAA0gpAAOYOQAByD0AAjgmAAG4KgABKDIAA9gjAAIDgyiBBA40Fj/8K
-IkCAANnuAAEALyYA8EomQABOAAYATwAgAIol/w/geAoiQIAA2c4AAQBsACQALyYA8FwABQArCDUI
-SiZAAAhxANgCIb6A4CDFB0J5AeACIb6A4CDFB0J56wfv/wHgLy0BAEAlRQACJnzxAAAgAAAoQAHo
-IGIDLyAAgC8hSwACIb6AwCCGAcIhhgDgfhEAIABKIAAQSiBAEA4iQgAvIAsSziBFgIol/w8IAAUA
-Ly0BAEAlRQACJnzxAAAgAAAoQAFKJkAA6CAiAy8gAIAvIUsAAiG+gMAghgHCIYYASiYAAEIg/pDO
-IIIBRCB+kM4hggHgfgUAwADgePHAJgyv/wHaz3GgAMgfz3CgALAfVqC8EQ4AEdgKCu//jbgR8M9w
-oACwHwHaVqDPcaAAyB+8EQAAwniMIB+EcAANAM91oACsLxiFz3GgAMAv4Ljq8xiFkbgToRbYCiQA
-cOB4qCBAAeB44HgS2LoJ7/+NuBiF8bgE9G8hPwDPdaAArC8Yhc9xoADAL7O4E6ET2JYJ7/+NuBiF
-87gE8m8hPwAU2IYJ7/+NuOkDj/9vIT8AkwfP//HAz3GAAGw5IIGA4QDZD/LPc4AATDED8AHhjuFU
-9xYjQgBAilBw+vUW8M9zgAC8MQLwAeGm4Uj3FiNCAECKUHD59Qrwz3AAAAcwKgnP/28hPwAA2dHA
-4H8ocOB4z3CAAGw5AYDO8eB4z3CAAGw5QIAigM9wgABMMYDiNngD8uB/B4jgf3cQgADPcawA1AEA
-2IsZGICMGRiAB9iNGRiABtmRuc9woADEJzCgz3EYAAcCMKDPcoAAbDk0ioDhBfTPcRAABgIwoCCC
-gOFR8gbZlrkwoM9xeAAChTCgz3ECAAKBMKDPcVUAAoIwoM9xEAAChjCgz3FBAAKHMKDPcQcAAtMw
-oM9xAQACijCgz3EAAAKlMKDPcQAAAqYwoM9xAAACpzCgz3EGAAKoMKDPcQYAAqkwoM9xBgACqjCg
-z3H/AAfFMKDPcf8AB9swoM9x/wAHJjCgz3H/AAcjMKDPcRgAAh8woM9xzAACHlfwB9mWuTCgz3EB
-AAKHMKDPcQMAAsUwoM9xgAAC2zCgz3FwAAKFMKDPcXAAAoEwoM9xBgAC0zCgz3EhAAKKMKDPcQUA
-AqUwoM9xBQACpjCgz3EFAAKnMKDPcQwAAqgwoM9xDAACqTCgz3EMAAKqMKDPcUQAAiYwoM9xRAAC
-IzCgz3EoAAIWMKDPcZkAAhUwoM9x/wAHgjCgz3H/AAeGMKDPcf8ABx8woM9x/wAHHjCg4H7gePHA
-UgmP/891gAAUDwCNgOAcAAIAz3AAAJBlCiQAcOB4qCAAAeB44HgB2ACtBtiQuM91oADEJxClz3CA
-AGw5QIAigM92oADsJ89wgABMMYDiBfI2eAbZlrkF8HDgNngH2Za5MKXPcQQAB7wwpc9xEAAHuDCl
-z3EKAAe8MKXPcT8AAsEwpSKIELkFIYEPAAACsjClIYgQuQUhgQ8AAAKzMKUliBC5BSGBDwAAArQw
-pSSIELkFIYEPAAACtTClI4gQuQUhgQ8AAAK2MKUGiBC4BSCADwAAArcQpc9wBAAGvBClz3ABAAax
-EKXPcAMABq4Qpc9wAQAGvBClz3ADAAYAEKXPcAgABrwQpc9wEAAGuBClz3AAAKAoCiQAcOB4qCAA
-AeB44HjPcCAABrwQpc9wAAAoCgokAHDgeKggAAHgeOB4z3AAAAPwEKXqhs9wIAAHvBClz3AAAAPv
-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
-QbME8CKzQ7PpAs/+8cCKCs/+GnAodkh3z3WAALgwfg3v/qlwz3GgAMQngOYJ8s9wNQACAxChz3A1
-AAIECPDPcDIAAgMQoc9wMgACBBChCnDJcelytv+CDe/+qXCdAs/+AAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA8AAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAX6
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAACg8RFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAC0v8AAAACABmQ
-QB8AAAIAAdIDAAAAAgAE0gAAAAACAAXSAAAAAIIACtJubgAAggAY0gEAAACCADzSAAAAAIIATdIA
-AAAAggBL0gMAAACCABfSAQAAAIIAPdIAAAAAggBO0gAAAACCAE/SAAAAAIIATNIAAAAAhAACAB8A
-AACFAAAACwAAAIUABgBAAAAAhQAIAAkAAACFAAkACQAAAIUACgAJAAAAhQB/AAwAAAAAAAAAAAAA
-AAAAAAAAAAAAAgAC0v8AAAACABmQQB8AAIUABwAPAAAAhAAAAAAAAACEAAEAAAAAAAIAF9IAAAAA
-AgBQcAAAAAACAFFwAAAAAAIAUnAAAAAAAgBTcAAAAAACAEDSAAAAAAIAQdIAAAAAggAEQ/8DAACE
-AAIABwAAAAUAQwDBAAAABQBMAMEAAAAFAFUAwQAAAIUABgBAAAAAAAAAAAAAAAAAAAAAAAAAAAMU
-IzRDVAAAAAAAAAAAY3RQcFFwRUn///////////////9ESAgAAABScFNwTlL///////////////9N
-UQkAAABA0kHSV1v///////////////9WWgoAAAAiAAAAQAAAAGQAAACRAAAABwAAAAAAAAAAAAAA
-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
-gAAYBAjgABCAABgECYAAEYAAGAQKIAASgAAYBAtAABCAABkEDOAAEIAAGQQNgAARgAAZBA6AABCA
-ABoEIoAAGAAAFgAkAAAZAAAWASYAACIAABYBKAAAGgAAFgEqgAAaAAAWASwAACAAABcBLoAAGAAA
-FwEwAAAZAAAXATQAABoAABcBNoAAGgAAFwE4AAAgAAAYATwAABkAABgBPgAAIgAAGAFAAAAaAAAY
-AWQAABoAABsCZoAAGgAAGwJoAAAgAAAcAmwAABkAABwCbgAAIgAAHAJwAAAaAAAcAnQAACAAAB0C
-doAAGAAAHQJ4AAAZAAAdAnwAABoAAB0CfoAAGgAAHQKAAAAgAAAeAoQAABkAAB4ChgAAIgAAHgKI
-AAAaAAAeAowAACAAAB8CkUAAGQAAHwOVAAAjAAAfA5fAABoAAB8DmUAAGAAAIAOdQAAZAAAgA5/A
-ABkAACADoQAAIwAAIAOlQAAYAAAhAwADCQADAwkACQADCQ4AAAAqAAAABwAAAAsAAAAAAgQGAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAACAggA8AAEAAaSAAAGkgQABpIAAAaSBAACAggA8AAOgAaSAAAGkgQABp
-IAAAaSBAACAggA8AAGABaSAAAGkgQABpIAAASiAAAEohAABKIgAASiMAAEokAABKJQAASiYAAEon
-AABKIAAQSiEAEEoiABBKIwAQSiQAEEolABBKJgAQSicAEEogACBKIQAgSiIAIEojACBKJAAgSiUA
-IEomACBKJwAgSiAAMEohADAKJIA/gAAAoEEsnDBALJwwQiQcNAoigD+AAAgPCiMAN5oIAABKJgBw
-aSBAAEomAHBKJgBwSiYAcEomAHAAFgBwgAAED0B4ICBAhwAAAAAAAAAAAADhxZhwKHUEuM9xnwDY
-/xKhBCSADwDwAABFeBOhtqGA4wXyz3AAbQAQEaHgf8HF4HjPcp8A2P8SojOiadgYuBGi4H7geM9x
-nwDY/89ynwC4/xKhatgYuBGhHILgfuB+4HjgfuB48cD6CCAAANnPdqAAwC8Uhs9yoACsL891oACE
-NIu4GaJlhRgVBBAMFQUQEBUGEBSG47j/9YogCAAWos91oADIH893oADQGw4dWJAPHViQEB1YkBEd
-WJA82OL/TyBBADzY2/9ocADZl7mIcgHbzP8Rh/24//MA352/z3GAAOwDAdgTHdiTAKE3hs9wgAAE
-BMhyIKA6hs9wgAAIBCCgqHAA2Shzv/8PHdiTz3CAANgDABAaAM9xAG0AEM9wnwDY/zGgaSCAAG8h
-PwCZAAAA/ByItvwcSLb8HAi2/BzItfwciLX8HEi1/BwItfwcyLT8HIi0/BxItPwcCLT8HMiz/ByI
-s/wcSLPgfuB4BNw43TXw4HgE3DTdM/DgeATcMN0x8OB4BNws3S/w4HgE3CjdLfDgeATcJN0r8OB4
-BNwg3Snw4HgE3BzdJ/DgeATcGN0l8OB4BNwU3SPw4HgE3BDdIfDgeATcDN0f8OB4BNwI3Rzw4HgE
-3ATdGfA0FBowMBQZMCwUGDAoFBcwJBQWMCAUFTAcFBQwGBQTMBQUEjAQFBEwDBQQMALHAcawJE0z
-sCQfM+B+
-====
diff --git a/sys/contrib/dev/iwn/iwlwifi-4965-228.61.2.24.fw.uu b/sys/contrib/dev/iwn/iwlwifi-4965-228.61.2.24.fw.uu
new file mode 100644
index 00000000000..270a4d80bfd
--- /dev/null
+++ b/sys/contrib/dev/iwn/iwlwifi-4965-228.61.2.24.fw.uu
@@ -0,0 +1,3339 @@
+Copyright (c) 2006-2009, Intel Corporation.
+All rights reserved.
+
+Redistribution.  Redistribution and use in binary form, without 
+modification, are permitted provided that the following conditions are 
+met:
+
+* Redistributions must reproduce the above copyright notice and the 
+  following disclaimer in the documentation and/or other materials 
+  provided with the distribution. 
+* Neither the name of Intel Corporation nor the names of its suppliers 
+  may be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+* No reverse engineering, decompilation, or disassembly of this software 
+  is permitted.
+
+Limited patent license.  Intel Corporation grants a world-wide, 
+royalty-free, non-exclusive license under patents it now or hereafter 
+owns or controls to make, have made, use, import, offer to sell and 
+sell ("Utilize") this software, but solely to the extent that any 
+such patent is necessary to Utilize the software alone, or in 
+combination with an operating system licensed under an approved Open 
+Source license as listed by the Open Source Initiative at 
+http://opensource.org/licenses.  The patent license shall not apply to 
+any other combinations which include this software.  No hardware per 
+se is licensed hereunder.
+
+DISCLAIMER.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
+DAMAGE.
+begin-base64 644 iwlwifi-4965-228.61.2.24.fw.uu
+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
+8cDhxc9yoADIH89xoADIHKiBSBoYgAbYCiQAcOB4qCBAAeB44HitAu/2qXDxwM9xoADIH0kZGIAG
+2AokAHDgeKggAAHgeOB40cDgfvHACgrv9gHYAN7PdaAAxCcSpaYP7/8D2Bpwz3AJAAYAEKXPcMAA
+BkMQpc9wwAAGTBClz3DAAAZVEKXPcqUA8MwYGoCDAdjPcaQADEIUoSvZz3CkAJBBPqAS389zpAAU
+QfijLNtooM9zpACgPzyjP9kroHTYFBoAgM9wpACYfZ8YmAO6DiAAyXCKIcQAz3CkABxANqAg2M9x
+pAAMQgyhFNgNoTnZz3ClAFANMBhAgM9wPwACwRClz3BgAALMEKXPcAEAAssQpc9wCAACiRClz3B3
+AAKQEKXPcMcAAosQpc9wXwACGBClz3AFAAIZEKXPcAMAAsAQpc9wIAACXhClz3BjAAJlEKXPcAYA
+AmYQpc9wAQAC2BClz3BgAALSEKXGDu//CnBJAc/2bPHgeADaDfBUeGOIIojPcKwA1AEB4k96NXiL
+GNiAz3CAANAVIIgwcuAgygfu8eB48cDhxQh1z3GAAMgDBYmA4AT0BImA4A/y7/8H2gDYz3GsANQB
+2BmAgIDlyiChAtAZAID9AM/24HjxwOHFCHUhkECQz3CjANj9VXiKGFgAIJUp2BK48CBBAAGVMHAK
+8qIPL/eKINEDiiDRA5YPL/cghb0Az/bxwOHFCHUhkECQz3CoANQDVXgLGFiAIJUV2BO48CBBAAGV
+MHAK8mYPL/eKINEDiiDRA1oPL/cghYEAz/bxwOHFCHUhkECQz3CsANQBVXiLGFiAIJUr2BK48CBB
+AAGVMHAK8ioPL/eKINEDiiDRAx4PL/cghUUAz/bxwOHFCHUAkM9yoADsJwi4TyBBAAGVELgleM9x
+oADEJxChAJUIuEUgwAAQoSqCAZUwcAvy3g4v94og0QOKINED0g4v9yCF/QeP9uB4z3GsANQBANiL
+GRiAjBkYgAfYjRkYgAbZkbnPcKAAxCcwoM9xGAAHAjCgz3KAAHR7NIqA4QX0z3EQAAYCMKAggoDh
+UfIG2Za5MKDPcXgAAoUwoM9xAgACgTCgz3FVAAKCMKDPcRAAAoYwoM9xQQAChzCgz3EHAALTMKDP
+cQEAAoowoM9xAAACpTCgz3EAAAKmMKDPcQAAAqcwoM9xBgACqDCgz3EGAAKpMKDPcQYAAqowoM9x
+/wAHxTCgz3H/AAfbMKDPcf8AByYwoM9x/wAHIzCgz3EYAAIfMKDPccwAAh5X8AfZlrkwoM9xAQAC
+hzCgz3EDAALFMKDPcYAAAtswoM9xcAAChTCgz3FwAAKBMKDPcQYAAtMwoM9xIQACijCgz3EFAAKl
+MKDPcQUAAqYwoM9xBQACpzCgz3EMAAKoMKDPcQwAAqkwoM9xDAACqjCgz3FEAAImMKDPcUQAAiMw
+oM9xKAACFjCgz3GZAAIVMKDPcf8AB4IwoM9x/wAHhjCgz3H/AAcfMKDPcf8ABx4woOB+4HjxwLhw
+z3CAAHR7ABAEAEwkAIAA2A7yz3KAABxEAvAB4I7gVfcWIgEAIImwcfn1F/DPcoAAjEQD8AHgpuBH
+9xYiAQAgibBx+vUJ8ArYCiHAD+tyzguv9onbANjRwOB+4HjPcoAAdHs0ioDhAYIH9DWKgOHCIKIA
+wCChAMTxz3CAAHR7QIAigM9wgAAcRIDiNngD8uB/B4jgf3cQgADxwEYNj/bPdYAAIREAjYDgHAAC
+AM9wAACQZQokAHDgeKggAAHgeOB4AdgArQbYkLjPdaAAxCcQpc9wgAB0e0CAIoDPd6AA7CfPcIAA
+HESA4gXyNngG2Za5BfBw4DZ4B9mWuTClz3YEAAe8z3EQAAe40KUwpc9xCgAHvDClz3E/AALBMKUi
+iBC5BSGBDwAAArIwpSGIELkFIYEPAAACszClJYgQuQUhgQ8AAAK0MKUkiBC5BSGBDwAAArUwpSOI
+ELkFIYEPAAACtjClBogQuAUggA8AAAK3EKXPcAQABrwQpc9wAQAGsRClz3ADAAauEKXPcAEABrwQ
+pc9wAwAGABClz3AIAAa8EKXPcBAABrgQpc9wAACgKAokAHDgeKggAAHgeOB4z3AgAAa8EKXPcAAA
+KAoKJABw4HioIAAB4HjgeM9wAAAD8BClCoeEIAEPQSiRAM9wIAAHvBClz3AAAAPvEKUoFxAQCiUA
+BIQlAQiMJQGIDPIR2AohwA/rcoojxAcCCq/2CiQABEwhgKFTIAAhTfeP4MogYQTAIGIAELgFIIAP
+AAAC2xCl0KX9A4/24HjxwKILr/aKIQYEz3WgALAfGIV+C4/8CHYM8AjYCiHAD+tyx9tKJAAAqgmv
+9golAAHPcgAAA/DPcaAAxCfPcKAA7CdQoQqA57gI9BiFogov/MlxguDu9ePxtQOP9vHA4cXPdYAA
+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
+4b3RJeKQBPLkvQzyBdgKIcAP63KKI1gKmHM2Ca/0uHZhA6/0ocDgePHA9gqP9BXIXBKNMFMgDgCK
+IAcCJgov9alxyXCpcU79AYjkuAvyBdgKIcAP63KKIxkAmHPyCK/0uHUpA4/0AAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAJQBAAABAQEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPht
+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAALAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAQD/APDw8PDw8PDw8PDw8PDw8PAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgGAAAYBgAAGAY
+AABYIAAAYBgAAGAYAAAwIAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAA9BEA
+AAASAABgGAAAoBIAAMgTAABIEwAAYBgAAGAYAACUJAAAQCcAAOgnAABgGAAAYBgAAGAYAADIIwAA
+YBgAACQpAABkKgAAYBgAAGAYAABgGAAAXCAAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABg
+GAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAY
+AABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAACgIAAAYBgA
+AGAYAABgGAAAYBgAAGAYAAB0IQAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAA
+YBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABg
+GAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAADQBAQAwBAEAYBgAAJQG
+AQBgGAAAQAgBANzPAADc0AAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAADA9AQDcTwEAYBgA
+AGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAA
+qFYBAGAYAACEWAEAYBgAAGAYAABgGAAAVBQAAHAcAQBgGAAAYBgAAABmAQAsMAAAYBgAAGAYAABg
+GAAAANUAAGAYAABgGAAAdMQAAEgjAQBgGAAAYBgAAGAYAABcMwEAtNUAAGAYAABgGAAAYBgAAGAY
+AABgGAAAYBgAAOwoAQBgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgA
+AGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAHwwAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAA
+YBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABg
+GAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAY
+AABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAGAYAABgGAAAYBgA
+AGAYAABgGAAAYBgAAGAYAABgGAAAYBgAAPAiAAD0IgAAYBgAAGAYAABgGAAAGAAN/A5zD3AdIB9A
+IEAhQCIxJWYmDydmKA8rHSxELR0uRDEQMgkzEDQJb1pwAHEAcgMAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQHAADkBwAA5AcAAOQHAADkBwAA5AcA
+AOQHAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAADkBwAA
+5AcAAOQHAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAADMCAAAAAAAADzHAADk
+BwAA4AYAAOQHAADIGwEAFAcAAIiyAADkBwAA5AcAAOQHAADkBwAA5AcAAOQHAACcBwAAOAcAADgH
+AAA4BwAAOAcAALQIAADkBwAA5AcAAOQHAACwBwAA5AcAAOQHAADkBwAA5AcAAOQHAADQCAAA5AcA
+AOQHAADQBgAAAwAAANRkAQAEAAAAMN8AAA4AAAD0VQEACAAAAAgeAQACAAAAKFoBAAoAAADoHgEA
+CwAAAJQKAQAMAAAAyAoBABEAAADgxgAACQAAABwCAQAQAAAAKDAAAA0AAAB8wwAAAQAAAJTUAAAP
+AAAA7DkBABIAAADMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAEAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAACAgICAgICAgAEAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAEAAAAIyQAA3MkAAPDMAAAkywAAJMoAALzNAABAzgAAeM4AALzOAAAAAAAALAEAAF4B
+AAABAAAAAQAAAAEAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAACAAAAAwAAAAMAAAADAAAAAQAA
+AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsDQAAAAAAAAAAAAAAAAAAAP8A/wD/AP//
+/wD/AP8AAAEAAAAAAAAABQAAAAAAAAAAAAAAEAAAAACAAAAAAKAAECcAAOgDAADoAwAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwNAQDoDgEAbBEBAFgTAQDIFQEA
++BgBAEgQAQCUD4AAbGOAABgAAABMY4AAAAAAAAAAAABkMoAApGOAAAAbAQAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQICAwQEBQYGBwgICQoKCwwMDQ4OD2ZmZ2hoaWpqa2xsbW5u
+b3BwcXJyc3R0dXZ2d3h4eXp6e3x8fX5+FT8AAAAAAAAAAAAAAAAAAQICAwQEBQYGBwgICQoKCwwM
+DSgoKSoqKywsLUdISUlKS0tMTU1OT09QUVFSbW1ub29wcXFyc3N0dXV2d3d4eXl6e3x9DD8ELQEA
+UHAAAAQtAQBRcAAAuC0BAEUAAAC4LQEARAAAALgtAQBJAAAAuC0BAEgAAAAELQEAUnAAAAQtAQBT
+cAAAuC0BAE4AAAC4LQEATQAAALgtAQBSAAAAuC0BAFEAAAAELQEAQNIAAAQtAQBB0gAAuC0BAFcA
+AAC4LQEAVgAAALgtAQBbAAAAuC0BAFoAAAAELQEACNIAAAQtAQAJ0gAAQC0BAACCAABALQEAAYIA
+AAQtAQBF0gAABC0BAEbSAABALQEAAIIAAEAtAQABggAABC0BAAbSAAAELQEAPpAAAAQtAQBD0gAA
+BC0BAETSAAAELQEAUNIAAAQtAQBR0gAABC0BAFLSAAAELQEAU9IAAAQtAQA/kAAABC0BABPSAAAE
+LQEAQJAAAAQtAQAV0gAABC0BAD/SAAAELQEAPtIAAAQtAQA/kAAABC0BABPSAABkAGQAaQDcAMgA
+WgCqAL4AhgF9AD4AZABkAGkA3ADIAFoAqgC+AIYBfQA+AAAAAAABAQAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAACUD4AAbGOAABgAAABMY4AAAAAAAAAAAABUNoAApGOAAAAAAACUD4AAbGOAABgA
+AABMY4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAuDaAAKRjgABwXgEAlA+AAGxjgAAYAAAATGOAAAAAAAAAAAAA
+lA+AAGxjgAAYAAAATGOAAAAAAAAAAAAA0DaAAKRjgABwZQEAABQFAAAAAAAAAAAAAAAAAAAAAAD/
+AP8AAAAAAD97P3U/bj9oP2I+bj5oPmI9bj1oPWI8bjxoPGI7bjtoO2I6bjpoOmI5bjloOWI4bjho
+OGI3bjdoN2I2bjZoNmI1bjVoNWI0bjRoNGIzbjNoM2IybjJoMmIxbjFoMWIwbjBoMGIlbiVoJWIk
+biRoJGIjbiNoI2IibhhoGGIXbhdoF2IWbhZoFmIVbhVoFWIUbhRoFGITbhNoE2ISbghoCGIHbgdo
+B2IGbgZoBmIFbgVoBWIEbgRoBGIDbgNoA2ICbgJoAmIBbgFoAWIAbgBoAGIAXQBYAFMATj9uP2g/
+Yj5uPmg+Yj1uPWg9YjxuPGg8YjtuO2g7YjpuOmg6YjluOWg5YjhuOGg4YjduN2g3YjZuNmg2YjVu
+NWg1YjRuNGg0YjNuM2gzYjJuMmgyYjFuMWgxYjBuMGgwYgZuBmgGYgVuBWgFYgRuBGgEYgNuA2gD
+YgJuAmgCYgFuAWgBYgBuAGgAYgBhAGAAXwBeAF0AXABbAFoAWQBYAFcAVgBVAFQAUwBSAFEAUABP
+AE4ATQBMAEsASgBJAEgARwBGAEUARAAA/////////wAB//8CA////wT/////////////////////
+/wX/Bv8H/wj/Cf8K/wv/DP///w3///8O////D////xD/////////////////////////////////
+/////////////xH///8S////E////xT///8V////Fv///xf///8Y////Gf///xr///8b/////xz/
+//8d////Hv///x////8g////If//////////////////////IiMk/yUmJ///KP///yn/////////
+/////////////////////////////////////////////////////////////////////wAAAAAP
+AD8AAQAAAA8APwABAAAADwA/AAEAAAAPAD8AAQAAAA8APwABAAAADwA/AAEAAAAPAD8AAQAAAA8A
+PwACAAAAAQAAAD3kAaUALSonJCEeGxgVEg8MCQYDAAwIBAA8ODQwLCgkIBwYFBAMCAR//wcPHz8B
+AwEDDwcBBw8fP3///wUABwIDBAYGdNFFF+iiiy4NDwUHCQsBAwoUN25VVVUBS2gvAVVVVQXjOI4D
+qqqqAnEcxwGqqqoKx3EcBw8PDwcGBwIDBAUAAQgJCwooACgAMAAsACwAKAA8ADQAKAAoADQAMAAs
+ACwARAA8AEAAPACMAGwAWABIAPQAsAAsACwAPAA0ADAALABUAEQAVABUAGwAYABcAFQAjAB4ADoB
+AgHVAN8A2gCiAHUAfwBqARoB2QDoAAoBugB5AIgAigUqAzkBqAGKBcoC2QBIAcoBSgHiAPkAygHq
+AIIAmQD0AkQCtQHVAZQChAH1AEECrACQAIQAgAB4AHgAeAB0AGYOAACJndgJxE7sBIM0SANiJ3YC
+QRqkAbETOwGBERgBwA/8AC+hvQSX0F4CD4uUAUtoLwGHRcoAJbSXAAXZhgDrXHkAqqqqCgANAAAA
+GgAAACcAAAA0AAAATgAAAGgAAAB1AAAAggAAABsAAAA2AAAAUQAAAGwAAACiAAAA2AAAAPMAAAAO
+AQCd2ImdTuzETjRIgzQndmInGqRBGhM7sRMRGIERD/zAD07sxE4ndmInGqRBGhM7sRMN0iANiZ3Y
+CQiMwAgHfuAHNEiDNBqkQRoRGIERDdIgDQiMwAgGaZAGsLLVBQVUQAUndmInEzuxEw3SIA2JndgJ
+BmmQBsRO7AQERmAEAz/wA6qqqqoapEEaEzuxEw/8wA8RGIERDdIgDQqogAoTO7ETD/zADw/8wA8N
+0iANC7RACwu0QAuJndgJDdIgDQqogAoKqIAKCIzACAd4gAcHeIAHBmmQBg/8wA8N0iANC7RACw3S
+IA0LtEALiZ3YCQiMwAiJndgJCIzACAd+4AcHfuAHwSwpBwqogAoIjMAIB3iABwiMwAgHeIAHBmmQ
+BrCy1QUGaZAGsLLVBQVUQAUFVEAF1h3GBAAAAAAAAAAAGCAUFA4OFBQFBgECAwQAAAAAAAAABwgI
+AAAABwoNEBEAAAAHCw4QEQAHCw4VGx8iAAAAAAcKCw0AAAcKDxUXGgAACAsQFRgbAAsQFiEsMTYA
+AAAHCw8QEgAHCw8WHSEkAAgMDxceIiUIDxceLTxESwAICw8WHSElCA8WHSw6QkkIEBcfLj1ETBAf
+Lj1beYiXAAcHDwcPDw8EDAwIBAwEBEAAAACAAAAAAAEAAAACAABAAAAAAAQAAEAAAABAAAAAMxMA
+AAAFCg8BAQABAgEBAaXGhPiZ7o32Df+91rHeVJFQYAMCqc59VhnnYrXmTZrsRY+dH0CJh/oV7+uy
+yY4L++xBZ7P9X+pFvyP3U5bkW5vCdRzhrj1qTFpsQX4C9U+DXGj0UTTRCPmT4nOrU2I/KgwIUpVl
+Rl6dKDChNw8KtS8JDjYkmxs93ybNaU7Nf5/qGxKeHXRYLjQtNrLc7rT7W/akTXZht859e1I+3XFe
+lxP1pmi5AAAswWBAH+PIee22vtRGjdlnS3LelNSY6LBKhWu7KsXlTxbtxYbXmlVmlBHPihDpBgSB
+/vCgRHi6JeNL86L+XcCAigWtP7whSHAE8d9jwXd1r2NCMCAa5Q79bb9MgRQYNSYvw+G+ojXMiDku
+V5PyVYL8R3qsyOe6KzKV5qDAmBnRnn+jZkR+VKs7gwvKjCnH02s8KHmn4rwdFnatO9tWZE50HhTb
+kgoMbEjkuF2fbr3vQ6bEqDmkMTfTi/Iy1UOLWW632owBZLHSnOBJtNj6rAfzJc+vyo706UcYENVv
+iPBvSnJcJDjxV8dzUZcjy3yhnOghPt2W3GGGDYUPkOBCfMRxqszYkAUGAfcSHKPCX2r5rtBpkRdY
+mSc6uSc42RPrsyszIrvScKmJB6czti0iPJIVIMlJh/+qeFB6pY8D+FmACRca2mUx18aEuNDDgrAp
+d1oRHst7/KjWbTosCKAAAKScAACYnwAAVJ0AAABBAAAAQgAAfEAAAEBCAAAAAMAAcESgAGwAAIAA
+ALAABAigAAAAAAAEALAAGAigAAEAAAAAALAAHAigAAMAAAAAALAA7BygADAAAAAAALAAUBSgAAMA
+AAAAALAABBigAAMAAAAAALAAQESgAAAAAAAAALAAGAigAAAAAAAAAAAABCigAAIBAAAAAAAAXEin
+AAAAAAAAAAAABCigAAJpAAACkPEABCigAAEAAAAAgAEAGCigAAAAAAAAAAAA8BygAAIAAAAAAAAA
+7BygAAEAAAAAoAEACACsAAAAAAAAEAIAMECkAAAAAAAAAAAAEBygAAAAcAAAAAAA4BygAAAAAAAA
+AACAJBCgAAEAAAAAADAAJBCgAAAAAAAAAAAAOBygAACAAAAAAIACOBygAAAAAQAAUEAABCigAAID
+AAAAYFAABCigAAIEAAAEIAAABCigAAEAAAAAQAAACACsAAAAAAAAAKAA7BygAAIAAAAAAJAAcESg
+ACQAAIAAsAIAAAiqAAAAAAAAwAIABAiqAAAAAAAFABABcESgAIQAAIAAMAAAGCigAAAAAAAAAAAA
+OBygAAAAAQAAgAAA4BygAAAAAAAAcKAACAiqAAAAAAAAkKAABACqAAAAAAAAcJAAKEinAAAAAAAA
+kJAAAACmAAAAAAADAAAABAigAAMAAAAAAAAApCCgAAAAAAAAAACAACCgAAAAYAAAAACAOBygAAAA
+AQAAoAGACACsAAAAAAAEkAEABCigAAEAAAAAkAEABCigAAEAAAAAoAGACACsAAAAAAAAAAAAXEin
+AAEAAAAAIAIACACsAAAAAAAAAAAAMEmnAAIAAAAAAAAABCigAAIBQAAAAAAACEinAP8AAAAAAAAA
+BCigAAJpIQAAAAAAZECmAAAIAAAAAAAALEmnAAAAAAAAAACAAEinAAEAAAABAgECAwQAAAUGBwgJ
+CgAAAAUGAAIEAAAABQcBAwQAAEAjQCUhISEhQEBAQEAFBAQBAUBAQEAFBUBADAxADQwMAQEBBUBA
+BQUABAAEQEAABEBAQAVAQEBAQAVAQEAFBQUBAQEBQAUFBQEFAQFABQUFQAVABQUFBQUEAAAAHBEA
+ABwyAAAcMwAABAAAABwVAAAAAAAAAAAAAGQAAAAAkAEACgAAAAAEBAcAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAHECQAAAAAAAAAAAAAAAAAAAQAAAAUAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAA
+AAAAAAAA/wAAAAAAAAABAAAAEAAAAAAAAAABAAAAAQAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA3GMB
+AFwDAQBgAwEAZAMBAMADAQDIAwEA0AMBAAAECwkVJS8AAAQRCRwnMgABgAARgAAWBAIgABKAABYE
+A0AAEIAAFwQE4AAQgAAXBAWAABGAABcEBiAAEoAAFwQHQAAQgAAYBAjgABCAABgECYAAEYAAGAQK
+IAASgAAYBAtAABCAABkEDOAAEIAAGQQNgAARgAAZBA6AABCAABoEIoAAGAAAFgAkAAAZAAAWASYA
+ACIAABYBKAAAGgAAFgEqgAAaAAAWASwAACAAABcBLoAAGAAAFwEwAAAZAAAXATQAABoAABcBNoAA
+GgAAFwE4AAAgAAAYATwAABkAABgBPgAAIgAAGAFAAAAaAAAYAWQAABoAABsCZoAAGgAAGwJoAAAg
+AAAcAmwAABkAABwCbgAAIgAAHAJwAAAaAAAcAnQAACAAAB0CdoAAGAAAHQJ4AAAZAAAdAnwAABoA
+AB0CfoAAGgAAHQKAAAAgAAAeAoQAABkAAB4ChgAAIgAAHgKIAAAaAAAeAowAACAAAB8CkUAAGQAA
+HwOVAAAjAAAfA5fAABoAAB8DmUAAGAAAIAOdQAAZAAAgA5/AABkAACADoQAAIwAAIAOlQAAYAAAh
+A/ROAQBIPwEAFEEBAEhCAQCkRAEAUEcBAFxLAQDUTAEA+E0BADxbAQBUWwEAwFsBAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAADQAQABMAFgAaACAAJgAtADUAQABMAFoAawCAAJgAtAAmAC0ANQBAAEwAWgBrAIAAmAC0ANYA
+AAEwAWkBrQEAAmsAgACYALQA1gAAATABaQGtAQACYALTAl0DAATBBKYFMAFpAa0BAAJgAtMCXQMA
+BMEEpgW3BgAIgglMC24NABBQAF8AcQCHAKEAvwDjAA8BQgF/AccBHgKEAv4CjgM8BP//////////
+//////////////////////////////////////////////////////////////////////////8w
+AWkBrQEAAmAC0wJdAwAEwQSmBbcGAAiCCUwLbg0AEAAAAAAAAgQGAwkGCQAJAAkACQAJAAkAAAAA
+AAAAAAAAAAAAAAAAAAD/////AAAAAGAAAAAFBQUFBQUFBQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+DgAAAA4AAAAOAAAADgAAAAQAAIAAAACAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICCADwAAQABpIAAAaSBAAGkgAABpIEAAICCADwAA6ABp
+IAAAaSBAAGkgAABpIEAAICCADwAAGAFpIAAAaSBAAGkgAABKIAAASiEAAEoiAABKIwAASiQAAEol
+AABKJgAASicAAEogABBKIQAQSiIAEEojABBKJAAQSiUAEEomABBKJwAQSiAAIEohACBKIgAgSiMA
+IEokACBKJQAgSiYAIEonACBKIAAwSiEAMAokgD+AAACgQSycMEAsnDBCJBw0CiKAP4AADDMKIwA3
+UggAAEomAHBpIEAASiYAcEomAHBKJgBwSiYAcAAWAHCAAAQPQHggIECHAAAAAAAAAAAAAIoh/w/P
+cKAAyB8TGFiAICCADwAAAADgfuB+4HjxwFYJIAAB2M91AACECEB9z3agAMAvFIbPd6AArC+LuBmn
+FIbjuP/1YH0C2IogCAAWp2B9A9jPd6AAyB8A2A4fGJAPHxiQEB8YkBEfGJCOCyAAPNhPIEEAGgog
+ADzYSgtAAGIKAABgfQXYz3GgAIQ0BIHPcqAAvDf/uPnzFBESABgREwAMEREABIHTuBpwNhoYgGB9
+B9jPcYAAAA8CIYAPgAAAAEEoAgEAIoMEAiMCIGhwMghgAAHbYH0J2M9woADQGxGA/bj882B9CtgA
+2J24Ex8YkGB9C9jPcYAA7AMC2AChN4bPcIAABAQgoDqGz3CAAAgEIKBgfQzYKnAA2Qpy4g8gAChz
+ANiduA8fGJDPcIAA2AMAEBoAz3EAbQAQz3CfANj/MaBgfQ3YaSCAAG8hPwB9AAAA4Hj8HIi2/BxI
+tvwcCLb8HMi1/ByItfwcSLX8HAi1/BzItPwciLT8HEi0/BwItPwcyLP8HIiz/BxIs+B+4HgE3Djd
+NfDgeATcNN0z8OB4BNww3THw4HgE3CzdL/DgeATcKN0t8OB4BNwk3Svw4HgE3CDdKfDgeATcHN0n
+8OB4BNwY3SXw4HgE3BTdI/DgeATcEN0h8OB4BNwM3R/w4HgE3AjdHPDgeATcBN0Z8DQUGjAwFBkw
+LBQYMCgUFzAkFBYwIBQVMBwUFDAYFBMwFBQSMBAUETAMFBAwAscBxrAkTTOwJB8z4H7hxaHBCHPP
+dYAACA8BlQAchDBPIMIDAeAQeAIchDCPuAG1R2kEIoIPAAD8/+xwQKAAwkCgIrkF8ECgBONhuYHh
+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
+SiZAAOggIgMvIACALyFLAAIhvoDAIIYBwiGGAEomAABCIP6QziCCAUQgfpDOIYIB4H4FAMAA4Hjx
+wCYMr/8B2s9xoADIH89woACwH1agvBEOABHYCgrv/424EfDPcKAAsB8B2lagz3GgAMgfvBEAAMJ4
+jCAfhHAADQDPdaAArC8Yhc9xoADAL+C46vMYhZG4E6EW2AokAHDgeKggQAHgeOB4Eti6Ce//jbgY
+hfG4BPRvIT8Az3WgAKwvGIXPcaAAwC+zuBOhE9iWCe//jbgYhfO4BPJvIT8AFNiGCe//jbjpA4//
+byE/AJMHz//xwM9xgABsOSCBgOEA2Q/yz3OAAEwxA/AB4Y7hVPcWI0IAQIpQcPr1FvDPc4AAvDEC
+8AHhpuFI9xYjQgBAilBw+fUK8M9wAAAHMCoJz/9vIT8AANnRwOB/KHDgeM9wgABsOQGAzvHgeM9w
+gABsOUCAIoDPcIAATDGA4jZ4A/LgfweI4H93EIAAz3GsANQBANiLGRiAjBkYgAfYjRkYgAbZkbnP
+cKAAxCcwoM9xGAAHAjCgz3KAAGw5NIqA4QX0z3EQAAYCMKAggoDhUfIG2Za5MKDPcXgAAoUwoM9x
+AgACgTCgz3FVAAKCMKDPcRAAAoYwoM9xQQAChzCgz3EHAALTMKDPcQEAAoowoM9xAAACpTCgz3EA
+AAKmMKDPcQAAAqcwoM9xBgACqDCgz3EGAAKpMKDPcQYAAqowoM9x/wAHxTCgz3H/AAfbMKDPcf8A
+ByYwoM9x/wAHIzCgz3EYAAIfMKDPccwAAh5X8AfZlrkwoM9xAQAChzCgz3EDAALFMKDPcYAAAtsw
+oM9xcAAChTCgz3FwAAKBMKDPcQYAAtMwoM9xIQACijCgz3EFAAKlMKDPcQUAAqYwoM9xBQACpzCg
+z3EMAAKoMKDPcQwAAqkwoM9xDAACqjCgz3FEAAImMKDPcUQAAiMwoM9xKAACFjCgz3GZAAIVMKDP
+cf8AB4IwoM9x/wAHhjCgz3H/AAcfMKDPcf8ABx4woOB+4HjxwFIJj//PdYAAFA8AjYDgHAACAM9w
+AACQZQokAHDgeKggAAHgeOB4AdgArQbYkLjPdaAAxCcQpc9wgABsOUCAIoDPdqAA7CfPcIAATDGA
+4gXyNngG2Za5BfBw4DZ4B9mWuTClz3EEAAe8MKXPcRAAB7gwpc9xCgAHvDClz3E/AALBMKUiiBC5
+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
+7/4A2RpwSHXPdoAAuA8A2ACm/9pBpkohgCAA2M9zpwA0RPgbGAAU4alwz3cAAHQmYH8B2yCGAqZB
+hqlwFOFgfwLbIIYDpkGGqXB0uWB/AdsghgSmQYapcHS5YH8C2wWmAIbZ///aAKYIcc9wpwA0RPgY
+mABBhqlwFOJgfwPbQYYCpiCGqXAU4mB/BNtBhgOmIIapcHS6YH8D20GGBKYghqlwdLpgfwTbBaYB
+hsb/IIYIcgGmQiFAIIDgYgft/zpwz3OAALACgOUWIwMEBPQgs0GzBPAis0Oz6QLP/vHAigrP/hpw
+KHZId891gAC4MH4N7/6pcM9xoADEJ4DmCfLPcDUAAgMQoc9wNQACBAjwz3AyAAIDEKHPcDIAAgQQ
+oQpwyXHpcrb/gg3v/qlwnQLP/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA
+AAAAAAAAAAIAAAAPAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAF+gAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoPERQAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAtL/AAAAAgAZkEAfAAACAAHSAwAAAAIABNIAAAAA
+AgAF0gAAAACCAArSbm4AAIIAGNIBAAAAggA80gAAAACCAE3SAAAAAIIAS9IDAAAAggAX0gEAAACC
+AD3SAAAAAIIATtIAAAAAggBP0gAAAACCAEzSAAAAAIQAAgAfAAAAhQAAAAsAAACFAAYAQAAAAIUA
+CAAJAAAAhQAJAAkAAACFAAoACQAAAIUAfwAMAAAAAAAAAAAAAAAAAAAAAAAAAAIAAtL/AAAAAgAZ
+kEAfAACFAAcADwAAAIQAAAAAAAAAhAABAAAAAAACABfSAAAAAAIAUHAAAAAAAgBRcAAAAAACAFJw
+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
+nQBkAR8AAQCCAALS/wAAAIIAGZBAHwAAAgAI0gAAAAACAAnSAAAAAAIARdIAAAAAAgBG0gAAAACC
+AAXSAAAAAIIABtIAAAAAggA+kAAAAACCAEPSAAAAAIIARNIAAAAAAAAAAAAAAAAAAAAAAAAAAJQK
+AACcCgAAuAoAANQKAADwBQAAmAoAAKgKAADECgAA4AoAAAwGAAAJAAAAAYAAEYAAFgQCIAASgAAW
+BANAABCAABcEBOAAEIAAFwQFgAARgAAXBAYgABKAABcEB0AAEIAAGAQI4AAQgAAYBAmAABGAABgE
+CiAAEoAAGAQLQAAQgAAZBAzgABCAABkEDYAAEYAAGQQOgAAQgAAaBCKAABgAABYAJAAAGQAAFgEm
+AAAiAAAWASgAABoAABYBKoAAGgAAFgEsAAAgAAAXAS6AABgAABcBMAAAGQAAFwE0AAAaAAAXATaA
+ABoAABcBOAAAIAAAGAE8AAAZAAAYAT4AACIAABgBQAAAGgAAGAFkAAAaAAAbAmaAABoAABsCaAAA
+IAAAHAJsAAAZAAAcAm4AACIAABwCcAAAGgAAHAJ0AAAgAAAdAnaAABgAAB0CeAAAGQAAHQJ8AAAa
+AAAdAn6AABoAAB0CgAAAIAAAHgKEAAAZAAAeAoYAACIAAB4CiAAAGgAAHgKMAAAgAAAfApFAABkA
+AB8DlQAAIwAAHwOXwAAaAAAfA5lAABgAACADnUAAGQAAIAOfwAAZAAAgA6EAACMAACADpUAAGAAA
+IQMAAwkAAwMJAAkAAwkOAAAAKgAAAAcAAAALAAAAAAIEBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIIAP
+AABAAGkgAABpIEAAaSAAAGkgQAAgIIAPAADoAGkgAABpIEAAaSAAAGkgQAAgIIAPAABgAWkgAABp
+IEAAaSAAAEogAABKIQAASiIAAEojAABKJAAASiUAAEomAABKJwAASiAAEEohABBKIgAQSiMAEEok
+ABBKJQAQSiYAEEonABBKIAAgSiEAIEoiACBKIwAgSiQAIEolACBKJgAgSicAIEogADBKIQAwCiSA
+P4AAAKBBLJwwQCycMEIkHDQKIoA/gAAIDwojADeaCAAASiYAcGkgQABKJgBwSiYAcEomAHBKJgBw
+ABYAcIAABA9AeCAgQIcAAAAAAAAAAAAA4cWYcCh1BLjPcZ8A2P8SoQQkgA8A8AAARXgTobahgOMF
+8s9wAG0AEBGh4H/BxeB4z3KfANj/EqIzomnYGLgRouB+4HjPcZ8A2P/Pcp8AuP8SoWrYGLgRoRyC
+4H7gfuB44H7gePHA+gggAADZz3agAMAvFIbPcqAArC/PdaAAhDSLuBmiZYUYFQQQDBUFEBAVBhAU
+huO4//WKIAgAFqLPdaAAyB/Pd6AA0BsOHViQDx1YkBAdWJARHViQPNji/08gQQA82Nv/aHAA2Ze5
+iHIB28z/EYf9uP/zAN+dv89xgADsAwHYEx3YkwChN4bPcIAABATIciCgOobPcIAACAQgoKhwANko
+c7//Dx3Yk89wgADYAwAQGgDPcQBtABDPcJ8A2P8xoGkggABvIT8AmQAAAPwciLb8HEi2/BwItvwc
+yLX8HIi1/BxItfwcCLX8HMi0/ByItPwcSLT8HAi0/BzIs/wciLP8HEiz4H7geATcON018OB4BNw0
+3TPw4HgE3DDdMfDgeATcLN0v8OB4BNwo3S3w4HgE3CTdK/DgeATcIN0p8OB4BNwc3Sfw4HgE3Bjd
+JfDgeATcFN0j8OB4BNwQ3SHw4HgE3AzdH/DgeATcCN0c8OB4BNwE3RnwNBQaMDAUGTAsFBgwKBQX
+MCQUFjAgFBUwHBQUMBgUEzAUFBIwEBQRMAwUEDACxwHGsCRNM7AkHzPgfg==
+====
diff --git a/sys/contrib/dev/iwn/iwlwifi-5000-5.4.A.11.fw.uu b/sys/contrib/dev/iwn/iwlwifi-5000-5.4.A.11.fw.uu
deleted file mode 100644
index 4047c279c33..00000000000
--- a/sys/contrib/dev/iwn/iwlwifi-5000-5.4.A.11.fw.uu
+++ /dev/null
@@ -1,6094 +0,0 @@
-Copyright (c) 2006-2008, Intel Corporation.
-All rights reserved.
-
-Redistribution.  Redistribution and use in binary form, without 
-modification, are permitted provided that the following conditions are 
-met:
-
-* Redistributions must reproduce the above copyright notice and the 
-  following disclaimer in the documentation and/or other materials 
-  provided with the distribution. 
-* Neither the name of Intel Corporation nor the names of its suppliers 
-  may be used to endorse or promote products derived from this software 
-  without specific prior written permission. 
-* No reverse engineering, decompilation, or disassembly of this software 
-  is permitted.
-
-Limited patent license.  Intel Corporation grants a world-wide, 
-royalty-free, non-exclusive license under patents it now or hereafter 
-owns or controls to make, have made, use, import, offer to sell and 
-sell ("Utilize") this software, but solely to the extent that any 
-such patent is necessary to Utilize the software alone, or in 
-combination with an operating system licensed under an approved Open 
-Source license as listed by the Open Source Initiative at 
-http://opensource.org/licenses.  The patent license shall not apply to 
-any other combinations which include this software.  No hardware per 
-se is licensed hereunder.
-
-DISCLAIMER.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
-CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
-BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
-FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
-COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
-INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
-BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
-OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
-TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
-USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
-DAMAGE.
-begin-base64 644 iwlwifi-5000-5.4.A.11.fw.uu
-EAEEBfj1AQAAwAAAoM0BAADAAAAAAAAAICCADwAAQABpIAAAaSBAAGkgAABpIEAAICCADwAA6ABp
-IAAAaSBAAGkgAABpIEAAICCADwAAAAZpIAAAaSBAAGkgAABKIAAASiEAAEoiAABKIwAASiQAAEol
-AABKJgAASicAAEogABBKIQAQSiIAEEojABBKJAAQSiUAEEomABBKJwAQSiAAIEohACBKIgAgSiMA
-IEokACBKJQAgSiYAIEonACBKIAAwSiEAMAokgD+AAADAQSycMEAsnDBCJBw0CiKAP4AAEF8KIwA3
-dg8AAEomAHBpIEAASiYAcEomAHBKJgBwSiYAcAAWAHCAAFgEQHggIECHAAAAAAAAAAAAAOHE4cDh
-weHCz3CgAMgfFhABhs9ygABgcyCiEhABhiGiExABhiKiFBABhiOiFRABhiSiJBABhiaiz3GfALj/
-VqGKIf8PEhhYgBMYWIAUGFiAFRhYgCQYWIDBwsHBwcDBxCAgQIcKyM9yoADIHw4aGIALyA8aGIAM
-yBAaGIANEgE2AMgkeBEaGIAOyC0aGIDgfuHE/BzIvvwcSL7hwOHB4cLhw/wcCLH8HEix/ByIsfwc
-yLH8HAiy/BxIsvwciLL8HMiy/BwIv2okgBDhxGokwBDhxPHAz3CgANAbFIDPcYAAVAQEIICPz1EE
-4QChCvIvKQEAz3CAAMwN8CBAAEB42v/RwMHEayTAEMHEaySAEMHEn3QEFAs0BBQKNAQUCTQEFAg0
-BBQHNAQUBjQEFAU0BBQENMHDwcLBwcHAwcRFLH4QCiZAfsHEaySAFMHEICBAhwrIh7gKGhgwC8ib
-uAsaGDAMyAwaGDANyIe4DRoYMA7IhSDDDw4aGDDgfuB48cAKyJW4ChoYMAvIm7gLGhgwDciKuI24
-kLgNGhgwz3CAAOwOGIiB4Av0DcjPcQAA9AqsuA0aGDDGDSAAD9hn2G4N4ACKIcYI0cDgfs9wgACk
-nwCAhCABjgj0DcgFIIAPAAAA1A0aGDBA8eB48cDPcQMAQA3PcKAAqCAtoM9ygACEBCCCAWkAohII
-IAFI2M9wgACcCCWAI4EggcdxAACIE/INQAjS8eB4z3CAAJwIlQVACOB48cCSCUABgODPdoAAVAQG
-8oHgBvQB2APwANgLroDhBvKB4Qb0AdgD8ADYCq6A4gbygeIG9AHYA/AA2AyuANjPdaAAyB8YHRiQ
-C46A4IohEAAO8giOgOAM8s9wAwBADUUdGBAwpQLYGB0YkAPwMaUKjoDgGvIJjoDgFvLPcAEA9vUg
-HRiQz3CAACQAIR0YkM9wgABQBCIdGJAYFQCWRSAAAxgdGJAMjoDgB/IYFQCWhSABBBgdGJCA4xjy
-ANiUuM92gAB4BACmcdgGuB4P4AD82SCGz3AAAEwcDg/gAJ+5GBUAloW4GB0YkBUBQAHPcaqqu7vP
-cJ8AuP82oDagNqA2oM9xoADIOw6BiLgOoWkgQAD+8eB48cClwUHAQsEMHAAxEBxAMc9wgAB8YDQY
-wA8wGAAPLBjADigYgA4kGEAOz3GAAHxgIBlAC89wgAB8YBwYAAvPcIAAfGAYGMAKz3GAAHxgFBmA
-Cs9wgAB8YBAYwAjPcYAAfGAMGYAIz3GAAHxgCBlACM9xgAAAYIAZAAh8GcAHeBmAB3QZQAdwGQAH
-bBkAB2gZgAZkGUAGYBkABlwZwAVYGYAFVBlABVAZAAVMGcAESBmABEQZQARAGQAE76HOoa2hjKEs
-GcACKBmAAiQZQAIgGQACHBnAARgZgAEUGUABEBkAAWOhaiAAA9gZAABqIMAC1BkAAGoggALQGQAA
-aiBAAcgZAABqIAABxBkAAGogwADAGQAAaiCAALwZAABqIEAAuBkAAGogAAC0GQAAaiCAAcwZAADQ
-2J+4z3GfALj/HaHPcIAAAADEgFMlxDVTJsU117oB5tO+xKBTI8AEBSaOH9D+AADWoQUggA+w/gAA
-FqEYgVMnzjUA3ZS4GKFAwwHAAsHJcwwUBjCyCuAAEBQHMM9woAC0D7ygz3GgAMg7LoFGCuAAfdim
-CUABRg3gAKlwCNgA2R4N4ACZuRDx8cCWDgABz3CAAHxgNBjADzAYAA8sGMAOKBiADiQYQA7PcIAA
-fGAgGEALz3CAAHxgHBgAC89wgAB8YBgYwArPcIAAfGAUGIAKz3CAAHxgEBjACM9wgAB8YAwYgAjP
-cIAAfGAIGEAIz3GAAABggBkACHwZwAd4GYAHdBlAB3AZAAdsGQAHaBmABmQZQAZgGQAGXBnABVgZ
-gAVUGUAFUBkABUwZwARIGYAERBlABEAZAATvoc6hraGMoSwZwAIoGYACJBlAAiAZAAIcGcABGBmA
-ARQZQAEQGQABY6FqIAAD2BkAAGogwALUGQAAaiCAAtAZAABqIEAByBkAAGogAAHEGQAAaiDAAMAZ
-AABqIIAAvBkAAGogQAC4GQAAaiAAALQZAABqIIABzBkAAAogwCfPdqAAyB8ZFhGWz3AAAEQcAgkg
-AQolwB9acM9wgADMKAOAz3OfALj/z3eAAAAAJIeA4AHh07ki8hkWApbjuh7yXYNA3Z+9vaMkpwUh
-gQ/Q/gAANqNYG4AHIRYBliIWAZYEIIAP/wD8/wCAFqMI2BkeGJBWo12jMQUAAdDYn7gdoySnBSGB
-D9D+AADPcIAAeAQ2owCACyCAhAjyWBuABLoLwAEM2CnwjCEBoCLyQiFAII/gQAANADMmAHCAAABQ
-QCcMchR8AHxKIUAgDdgV8EohgCAE2BHwE9hKIQAhDfBKIQAiFNgJ8EohACQV2AXwFtgD8A/Yz3OA
-ALQMb4OpcQpyCiRABBUE7/8KJYAE4HitAs//8cAqCMAAddjiD6AAiiHJDp4LAADiDgACfv6iCAAA
-BtgKIcAP63KKIwoDSiQAANkD7/8KJQAB4HiA4fHAA/Kg4Iv2BdgKIcAP63Lp20okQAC1A+//uHPP
-coAAzA0VeiCi0cDgfgDZnrkZec9ygADEDQGCJXjgfwGiANmeuRl5z3KAAMQNAYImeOB/AaIA2Z65
-GXnPcIAAxA0BgCR4QiAAgOB/yiBiAOB4z3CAAMQNAYDgfy8oAQDgePHAbgjP/+B44HjgeOB4aSCA
-AW8hPwBpIAAA9/HxwGrYEg+gAIohRAMA2I24+gkgAwgaGDAQzEQgAIUJ8s9wgAAYBQCIgOC8C0ID
-sPHxwDoMQAPPcYAAtAjwIQAAQHjPcKAA0BuA2lCgz3CAAAAAAIDouADZBfLPcJ8AuP89oJbx8cBC
-CwABz3GAAAAAAIHjuBnyAYHjuEDYzyDiB8oggQ8AANAAzyDhB89ynwC4/x2iBIEB4NO4BKEFIIAP
-0P4AABaiz3CAAFQEAIAA3892gADsDgQgkA8PAADgCIbruAHdBfSSCkAKgOAM9M9xoAC0R0sZ2IN3
-GViDANieuFQZGIAvKAEETiBBBFUWgBCA4BkaWDAP8s9woAAUBCqgCYC44Ef3z3CgAIggNXigoDfw
-z3CAACQF4KAA2JG4z3GgAMgfExkYgM9wgADMAhB4z3agALRHSR4YkM9xgADAf89wgAAoBSCgbydD
-EFQe2JO6CCADCBpYM/4JQAqA4BH0ANiRuM9xoADIHxMZGIDPcIAA/AMQeEkeGJBUHtiTjQIAAeB4
-8cDhxc9xgABIDYARAADPcgMAQA3PdaAAyB9FHZgQLygBAPAhAABAeIDYFR0YkHECAAHgePHAz3GA
-AFQEfNhWDaAAIIEF2AohwA/rcoojxABKJAAAWQHv/wolAAHxwOHFz3CAAFQEoIBr2AQljR8PAADg
-Ig2gAIohRwEvKEEDzgwgDk4gQAQKJQCAyiBiAcohwg/KIsIHyiOCDwAAywEQAeL/yiRiAH/YCrjP
-caAA0BsToX/YEKHpAQAB4HjxwOHFz3WAAAAAAIXvuBryAYXvuEDYzyDiB8oggQ8AANAAzyDhB89x
-nwC4/x2hBIUB4NO4BKUFIIAP0P4AABaha9iWDKAAiiEHBkYMIA4E2AolAIDKIGIByiHCD8oiwgfK
-I4IPAADaAYgA4v/KJGIAAIXvuAbyANnPcJ8AuP89oGEBAAHxwOYIAA6A2c9woADQGzCguQTP/0ok
-AHUA2aggwAPPcIAATA42eGGAQIDPcIAASA0B4VV4YKDgfuB+4HhRIUDH8cAp8s9wgACMBACIgOAI
-8s9wgAAcBQCAQHgZ8M9wgADABQCAg+DKIGIByiHCD8oiwgfKI4IPAAAIAsokwgDwB6L/yiUiAOIJ
-AAkLyL24CxoYMADZnbnPcKAA0BsxoC0Ez//gePHAgeDMIKKABfTPcYAA7A4E8M9xgADkoc9ygAB8
-c4HgzCDigCj0aIFgommBYaJ8iWiqfYlpqioRgwBqqisRgwBrqiwRgwBsqnSRdqptkWeyd5FosmiB
-wLt0qmiBBCODDwAGAACA4wHbwHtyqoURgQA1qhzwYIJooWGCaaFoinypaYp9qWqKKhnCAGuKKxnC
-AGyKLBnCAHaKdLFnkm2xaJJ3sXWKhRnCAILgBvQ+DuAAQCIABtHA4H7PcIAA5KEggM9yoACAJSai
-IpAnoiKAKqImkCuiz3GAAKSfIIHhuSCACPQooiKQKaIigDGiJpAyoiCANaIikDaikQCADvHARg/A
-AM9wgAC0hwDf9KjPcIAApJ8AgOG4FPII3el2gObMJqKQzCYikcwmYpHUDaIDyiCCA2G9gOUB5jL3
-HfBKJIB9z3GAAIhyqCCAAQQZ0APgeADZSiQAcs9ygAAwdKggwAIWIkAAfJDPcIAA+HI0eAHhYLDP
-dYAA5KHPdoAA+INAJQASJG4uCOAABtqpcEAmgRIiCOAABtpAJQASQCYBFBYI4AAG2hiNhOAI9CgV
-gBDeDSAPKIVqDgAOCYXluGAJggjPcIAApJ8AgOG4SA3BA89xAAD//89wgAD8gCygK6AEGtgztv/F
-BsAA8cBaDuAAANqEKAsKACGDf4AAUKRZo891gAAQUNRo2mVSggKFACGBf4AA4KPPd4AAXHReo2GF
-2BnAAGWF3BkAAAaF4BnAAOQZAAAWJ4AQFiWBEAzgBOFKCyAFCNq+ZhSGFn0Wf0AnABMkbTYLIAUI
-2lEGwADxwADY4v/KDCAFANjPcIAA4ARKDSACBNl2DwAFIgiABAHYANn+DKANgNoaDoAKSgwADj4I
-gAjeDUAJEggACQDYGgmgDghxPgqADtoMAAuqCcAIBPHxwOHFAN3PcIAAUAWgoM9wgACYh6ywugug
-CKlwoguP//YPoAqpcMoJgAUqCcADSg/gCqlwIg/ACtEFwADxwFoNwACC4KPBBvTPdYAA7A4I8IQo
-CwoAIY1/gADkoYLgBvTPdoAAgI0J8IQoCwrPcIAAqKQAIE4OLZU8eihwhCEOAEe5wrqEIAEMJHpE
-uFBxyiBiAcohwg/KIsIHyiOCDwAAFgTKJCIAdASi/8olAgFIhTu6wLpArk2VYI7AuoHjQa4L9HeV
-RCMDBkO7Z653lYQjAQhFu2iugOIR8s9ygABkNhUiAwAAizV6Aq4BiwOuAosErgOLBa4DigrwAdkp
-rgLYAq4jrgDYBK4D2AWuBq6LcMlxxgkgBQzaAMABwT4PIAsCwotwyXGyCSAFDNoAwAHBqg8gCwLC
-z3GAAKwGAKENlUS44LgA2S+lBPKKIQgAL6XhuATyi7kvpeK4BPKNuS+loQTgAKPA4HjxwCoM4ACY
-cIQoCwoAIYB/gADkoVYgDQUogFYgxQXPcoAABAXjuYohCADKISEAIKJKJAByANqoIEEASHHPcoAA
-WFT8iC5iz3OAAHxU5H4vKoEDTiKPB+9jOmXgqlQQjwDkfi8ugRNOJo8X7mPIqsiA474P8n2IhuHT
-I6YALyvBAE4jjgfPc4AAhFTLYxPwz3aAAGxUL2bPdoAAWFTvZtyI5H5sEI8A5H4vLoETTiaPF+tj
-cKpBaUokAHIA2agggQDciM9ygABkVC9i5H4vKoEDTiKDB89ygAB8VG9iO2X8q1QQjwDkfi8ugRNO
-Jo8X7mIkG4IDyIDjvg7yXYiA4dMioQAvKoEATiKOB89ygACEVMpiFfCA4QTy6WkD8Ch3z3aAAGRU
-72bciOR+bBCPAOR+Ly6BE04mjxfqYiwbggAB4UokAHEA2aggQAXPcoAAYFR9iCpiACVMAAHhZHov
-KoEATiKDB89ygACEVGtiYKy2DyAHiHAdA8AA8cCyCuAACHGC4Ab0z3CAAOwOCPCEKQsKACGAf4AA
-5KHJgFiIOd0HveO+yiWCH4AAgBzkvs8lIhbgvk7bzyWiEMojgg8AAE4BhuLPI2EC5b4m9M9ygAB8
-c893gADwpOKXVorxch30z3KAAOShwhICBlMiDwDPcoAAfHMUEoUAsHcP9M9ygADkocMSAgblugj0
-z3KAAOShSYLlugPygb3PcoAA2KRMiofizyXhEOi+zyWiFYLhiBhAA4wYwAAF9M9wgADsDgfwhCkL
-CgAhgH+AAOShaRCBAE4QAgEOIYMPAAA6AQm7InplenqQInsSu2V6e5Aiexe7BSONAAQlvp8A8AAA
-yiBiAcohwg/KIsIHyiOiB88j4gLKJMIAIAGi/8olQgP5AeAAkBhAA+B48cCGCcAAguAIdgb0z3WA
-AOwOCPCELgsaACGNf4AA5KEB2WgdQhAA34AdwBNM2E4dBBAF2BClCtgbtRDYGrUU2EwdBBAt2FAd
-BBAm2FIdBBBKJABy6XKoIIANz3CAALhU9CCDAM9wgAAQglR4YLDPcIAAyFT0IIMAz3CAACCCVHhg
-sM9wgADYVPQggwDPcIAAMIJUeGCwz3CAAOhU9CCDAM9wgABAglR4YLDPcIAA+FT0IIMAz3CAAFCC
-VHgB4mCwCIXluAXyBNpiHYIQA/BiHcIT5LgK8gnZah1EEC7aXbUC2mkdghAK8BTaah2EEDLaXbVp
-HUIQFNlZjeC4WWEweWodRBAa4Ty1CfIK2GQdBBAG2GYdBBAH2AfwENhkHQQQZh3EEwXYEKXJcML+
-PI0cjVyNVB1CEOa6bB0CEAvyKHOnu295VB3CEAhzp7tveGwdwhDlugfyKHOEI/wPb3lUHcIQ5LoE
-8qW4bB0CEOO6BfKkuVQdQhCC5hbyyXD4/s9wgAC0pIQuCxowIEAO4bjx2MAoIgHKIIEPAACTAMAo
-IQGcHQAQGNiNuBelCIXPcYAA5KHjuAXyuhGBAIm5A/ChEYEANqXPcaAArC85gTC5UyEBgM9ygACQ
-BFUdQhAS8s9xAADECSKySiQAcgDZqCBAAoDbz3KAAFCDNHpgsgHhFfCA2SKyk9kEuc9ygABQgyCy
-IbIisoojFwdjsiSyZbJmsoohBAAnsgQgvo8ABgAADPI2uMC4G3gB4G4dBBAC2IAdABAE8G4dxBMA
-2BylHaXJcCH/KIUB2kEpAAU1uVIgAABSIQEAwLjAuZINb/9Ic4EHgADgeM9wgADsDgiAz3GkABxA
-wLgTeMG4EqHgfvHA4cXPcYAA7A53kc9ygACwBuC7V9gAogPyX9gAouK7A/KFuACi4bsD8oe4AKLP
-coAAgI2gigDagOXKIIEAz3OlAOgPBqPPc6AApDABg4DlzyDiANAg4QABo89woADsJ0ugUIHPcKAA
-yBxIoJoIYAsPgQEHgADgePHAgg6gAAfZz3agAMgfSB5YkM91gADsDoAVABAA30weGJDPcKsAoP/5
-oDqg+KCKIAQAD6ZqFQARsB4AELQeABAf2Ai4DqYIheC4ANiLuCTyz3GAAJRHEKZAieC6ZNjKIMED
-4boGoQryDNh+HhiQAYEDoQKBBKEG8H4e2JPjoeShCYXluHwKQg7PcaAApDABgYS4FPARpn4e2JPp
-cFoJYA7pcc9wgACUR+Og5KDmoM9xoACkMAGBpLgBoQHfrf8WDgALsv/PcAAAVVVaHhiQWR7Yk24V
-ARHPcKYA6AcmoPoIAAPyDeAKDZXPcIAAcGgHiIDgMA9CAogVABDPcaAAxCcPGRiAjBUCEM9woAAw
-EESgz3CAABR7EHiPGRiAz3KAAMB7UHiWIgIAELpFeJAZGICKIAQAkhkYgJAVABBAGQCAz3CAABgr
-UxkYgA8RAIafuA8ZGIAP2BAZAIBVFYAQgODKIIIPAAC8D8oggQ8AALwfHBkYgAiF/bgM8lYOIA4A
-2FoOIA4B2M9wpgD0z/KgBPBCDgAOVQWAAPHA5gyAAAolAJDPcIAA5KEacQf0wxABBuW5CPIE8CmA
-5bkE8gHZA/AA2YDhIPLPcoAAfHPPcYAA8KQikXaKMHMW9MIQAQZUisC5UHHKIGEByiHBD8oiwQfK
-I2EMzyPhAsokIQAMBGH/yiUBAYQtCxovd892gADsDidwyXGWDWAAKNrPcYAAgI0AJ4AfgACopMoN
-YAAM2gDYz3GgALQPHKFIhlMiAAD+CKAKNJZv/4DlIAghC8ogYQAWCYADTCAAoDwIYg7KIGIAgQSA
-APHAFgyAAAomAJAB2BDyA8jiuA30BdgKIcAP63KKIwcHSiQAAIEDb/+4cwDYiiILCkx+z3WAAOSh
-ACVPHkx4QCUBGTAhQA5phyW4JbtTIBEAUyMQAOlwRgxgAA3ZygjgDslw6YeA5iW/wL8G9APY3Pwa
-/QTwRg4ADoDnG/JMIACgyiBiAcohwg/KI4IPAAABAsoiwgfG9d4JAAduDqAAAdhMIQCgRAyhCMog
-IQAV8FoOoAAA2IDmBPRg/Qvw+g0ADs9wgACknwCA4bj8DQIOTCEAoLwNgf/JcHD+dghgAclwTCEA
-oCn0z3GAAHxzz3CAAPCkApBWiRByB/TCFQAWNInAuDBwB/LPcIAApJ8AgOG4E/TJcOlxiP9/2RG5
-z3CgALAfNKAqDcAGDcgFIIAPAQAA/A0aGDDPcIAApJ8AgOG4GPLPcYAAfHPPcIAA8KQCkFaJEHIO
-9MIVABY0icC4MHAI9BiNz3GAAOwOGKkJhQmhBNgDGhgwAd0qDWAKqXDPcIAAkQbCC2AKoKiB5gr0
-z3CAANikDIiH4AT0gOeMDQIOXg0ADqYKQADNAoAA8cAA2JT/LghP/90Cj//gePHAXgqAAIHgz3aA
-AOShCHUD9OmGA/DDFg8WJb+ELQsaACZQHiQQACDAv+W4yiBhAcohwQ/KIsEHyiOBDwAAdALKJCEA
-pAFh/8olAQGA5cxwL/RAgM9xgAB8c0ChzHAAgAQigg8ABgAAAaHMcACIgOIIqcxwAIgB2gmpzHAA
-kMxwAIjAegqpzHAAiAupzHAAiAypzHAAiMxwAJAHscxwAJAIscxwAIBSqQTYXvww8ACAwh4YEMxw
-AIDDHhgQzHAgiM9wgADcpQwYQoDMcSCJDRhCgMxxIJHMcSCJGhhCgMxxIIkbGEKAzHEgiRwYQoDM
-cACIzHAAkM9xgADgpQYZBIDMcACQGhkEgMxwAICvePT9gg4gAalwz3GAAHxzVomA589wgADwpAKQ
-FfQQcgf0whYAFjSJwLgwcAfyz3CAAKSfAIDhuAf0JBABIKlwJbnAuQr/8gsADjoJQABpAYAA4HgA
-2FDx8cAA2c9woAC0Dzygz3CgAOwnK6DPcIAAjI0hoCKg7gogCyhwz3GAAHBoIJH/2ILhyiCiD//a
-z3GrAKD/WaEYoQLY6ghgAAMaGDApAY//4HiEKAsKACGAf4AA4KPcEAIAz3GAAHxz2BADAPAZgADg
-EAIA5BAAAOwZwAD8GYAA4H9AGRgA8cByCKAAEtmpwQh2xgpgAItwSiQAcQDaqCAAAxNqACQBMCiJ
-geGDcMP2YbkoqAHiAcICwYQuCxoAIYB/gADgo9gYgAAFwtwYQAAGwbRu4BiAAMd1gAAQUEgVEBDk
-GEAAz3CAAFx0CiFALhYgAAQM4IPBTg2gBAja9IXPcIAAXHSHwfZ4DOA6DaAECNoAwAAhjS+AAOSh
-4Li0HRgQBPK5HdgTBPC5HRgUz3CAANShQIgiiEQqPgsAIYB/gACEoDV4BogQdggP4f/KIIEDtBUA
-FuG48djAKCIByiCBDwAAkwDAKCEBwg8gAJwdABDlB2AAqcDgeADYhvHxwOHFpcGLcPYPIAAF2QDC
-4LoU8s9wgADsDhiIgeAO9ADYmrjPcaAAyB8PoQHApBkAAMPYGrgOoeK6FPIFEgE2AN1KJAByqCCA
-AwAkQjNIihEhgIAAIkAzXBiCAAfyAeVODwAAlQdgAKXABdgKIcAP63KKI84JSiRAAJEGL/+4dfHA
-z3CAAOwOCYDluMogYgHKIcIPyiLCB8ojgg8AAJwGyiRiAGQGIv/KJcIAEg6ACg4NIAgB2PoMD/9O
-CWAKANimDwAKCg7gARDY5g4AACkHT//gePHAAthJ/Qr+GQdP//HApg5AAGh2AN3Pc6AAtA+8o0oL
-QAr4/3IK4ArJcGoLQAPxBkAA4HiEKAsKz3CAAMikMCBADs9ygAB8cxYiAQDsEQABjhocAO4RAAGP
-GhwA8BGBAM9wgACUdCioANjgf5EaHADxwBb80ggADin8qQZP/+B48cAyDmAARNrPdYAAEFDEbc9x
-gABkdIoPIACpcEokgHAA2aggAAgUadhgcYCEKQsKACGCf4AAUKQAIYB/gADgo36iANt5omGFQoUB
-4dgYwABlhdwYgABGheAYwADkGIAAPQZAAM9wgAB8cw0DIADo2fHAvg1AAIDgzHAAiMxyoIrMcmCK
-zHLgisO9JfTPcYAAfHNUidaJuHLRc8wggYAS8gohwA/rckArDQRAKA8EBdiKI5sJBSWEE/0EL/8F
-JcUDQCEOBrWpz3CAAOShhRhCAyHwz3GAAPCkIpEwcwn0z3GAAOShwhEBBsC5MHAM8gXYCiHAD+ty
-iiPbC5hzuQQv/0olAADPdoAA8KDPcIAASKWpqCFvmOHKISoGO3mODSAAyXB3v4DnyicsEIDnANrL
-9wDZzHAAgAHhguG99wHi8XK491YmABZmDSAABNnPcIAApJ8AgOG4FPLPcYAAfHPPcIAA8KQCkFaJ
-EHIR9M9wgADMpAiANInAuBBxCfRaC2AAyXDPcIAAXA+1qNIMAAAJBUAA4HgA2G7x8cCWDEAACHYo
-dc9ygAAcEAOCAN/PcaAALCAwgXJodHtbYyWjxKMB4IwgCICmowOihfcCguOiAeACosUEQADgeADY
-z3GgAMgfGKEZoQHYDqHgfuB48cBCDGAAOXGocQHez3WgAMgf06XPdoAAjA8F3+CmAaYEwCAewBEJ
-phWFHB6AEQqmGIUmpgumGYUUHgARDKagFQAQZKYNpqQVABBDpg6mqBUAEAgeQBIPps9wAQAKBRCm
-Yg8gACTYBCCADwAAAPgRplIPIAAA2BKmUyfAdROmAchUHgAXFqYSFQCWUB4AFxemExUAls9zgACM
-DximFBUAlkokAHkZphUVAJYA2RqmFhUAlhumz3CAALQMD4Acps9wgACMD3QYgArPcIAAjA94GMAK
-z3CAAIwPfBgAC4AbQAuoIEAC8CNCAM9wnwC4/wHhVqC5A0AA4HjxwM9xgAC0DA+h4HjgeOB44Hjg
-eOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB40cDgfuB44cXhxkApDQIlfUAt
-AxSI4qV7CHWQ91MlfpAG8gEdUhBhuvvxQSqOAMG6QiZOkAQd0BD99YDiCvIvJIlw4HioIIABAR1S
-EOB4wcbgf8HF4HgocgDZ1vHgePHA4cUIdc9wgABADwGIgOAU8gjwyggP/1IP7/+KINEAz3CgANQL
-GIAA2UIgAAiA4MogTAAQdTD38QJAAPHA4cWhwQh1z3CgAKwvGYAEIIAPcAAAANdwIAAAAAHYwHgv
-JgfwANrKIIEAJvIPzAAcRDBPIMEDAeAQeI+4AhxEMA8aHDBAJQAS3//PcIAAoAQAgAflBCWNHwAA
-/P8FJY0fgA4AAKV4nbifuOxxAKEAwexwIKAB2HUCYAChwOB4IrkG8OxyYKIE4GG5geFggDr3ANnP
-cKAA1AttoM9woABEHTWg4H7gePHA0glAAAh2KHUocEhx0/+B4MoggQPED+H/yiFBAyECQADgeM9y
-nwC4/xqiO6Jp2Ri5OaLPcYAAoATgfwGh4HjxwI4JQAAId89xgACgBAiJAN2A4KnBQMU79AHeyKnP
-cYAAgGrPcKAAzCstoADYj7gPGhwwHRpCM24L4AqLcM9wAQAKBUHAiiBEBELAQ8XPcIAA9F4AiGTG
-At4RHAIwAMASHIIzINlHxRMcAjDPcIAAHBBFwM9wgACMD0bASMeBwAHa0P8I2AHZ1/8DGpgzaQFg
-AKnAA9rPcaAAFARFoc9xoADUCw2h4H7xwOoIYAAA289yoADUCwPdsaJwos9ygACgBECCBSKCD4AO
-GACdup+67HZApgLaHBqCMAcSDjbscsCiDxICNwHiDxqcMOxyAKIBEgI27HBAoOxwIKAB2M92oADI
-HxOmOIbscCCgGYbi/89woAAUBHQe2JCmoM9xoADIOw6BiLgOodUAQADxwADYBBKBMN3/BBKFMAfY
-CiHAD+tyiiOPD9EH7/5KJAAA4HgA2gPwAeJBKIEAMHK89+B+z3GAALQMPBnAB89xoADIH1yBnbie
-uE0ZGIDgeOB44HjgeOB44HjgeOB4HIHgfuB4A9rPcaAAFARFoc9xoAD8Cwyp4H4D2s9xoAAUBEWh
-z3GgAAgMALHgfgPMz3GAAKAEIIHXcAAAAEDFIYsPgA4EAM8hqgDPIWoGzyGqBs8h6gaduZ+57HAg
-oM9woAAUBAPZJaAByM9xoADUCwDaDaHPcKAARB1VoOB+gOFU8kAhwgPDuY/hnAAtACS6MyZBcIAA
-fFBAJ4xyNHwAfMxxIIEEGFAAzHEggQQYUADMcSCBBBhQAMxxIIEEGFAAzHEggQQYUADMcSCBBBhQ
-AMxxIIEEGFAAzHEggQQYUADMcSCBBBhQAMxxIIEEGFAAzHEggQQYUADMcSCBBBhQAMxxIIEEGFAA
-zHEggQQYUADMcSCBBBhQAMxxIIFCIkKABBhQAL/14H7geIDiI/JjasG6g+I+AC0AIrszJoJwgACM
-UEAnDHJUfAB8BBACBAQZkAAEEAIEBBmQAAQQAgQEGZAAQiNDgAQQAgQEGZAA7vXgfoDiVPJAIsMD
-w7qP4pwALQAkuzMmgnCAAJBQQCeMclR8AHwBEIIEARmSAAEQggQBGZIAARCCBAEZkgABEIIEARmS
-AAEQggQBGZIAARCCBAEZkgABEIIEARmSAAEQggQBGZIAARCCBAEZkgABEIIEARmSAAEQggQBGZIA
-ARCCBAEZkgABEIIEARmSAAEQggQBGZIAARCCBAEZkgBCI0OAARCCBAEZkgC/9eB+4HjxwOHFKHUo
-c4QjPw8bYyK5lP/BvYHlDvKC5Qjyg+UN9MxwAIgBGxIAzHAAiAEbEgDMcACIAKspBgAA4HiA4cok
-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
-JqLPcQMAgj4mos9xBwBCPiaiz3EAAMJXJqLPcQAAQlgmos9xAQDCVyaiz3EBAEJYJqLPcQIAwlcm
-os9xAwBCWCaiz3EDAMJXJqLPcQcAQlgmos9xGwACHiaiz3EbAEI3JqLPcRsAwlAmos9xAABCISai
-z3EAAIIhJqLPcQYAwiEmos9zAQBCIWaiz3MBAIIhZqImos9zAgBCIWaiz3MDAIIhZqImos9zAwBC
-IWaiz3MHAIIhZqImos9xAADCOiaiz3EAAII6JqLPcwYAAjtmos9xAQDCOiaiz3EBAII6JqJmos9x
-AgDCOiaiz3EDAII6JqJmos9xAwDCOiaiz3EHAII6JqJmos9xAABCVCaiz3EAAAJUJqLPcwYAglRm
-os9xAQBCVCaiz3EBAAJUJqJmos9xAgBCVCaiz3EDAAJUJqJmos9xAwBCVCaiz3EHAAJUJqJmos9x
-eQDCHyaiz3F5AAI5JqLPcXkAglImos9xEABCKiaiz3EzAIIqJqLPcQEAwiomos9xEACCQyaiz3Ez
-AMJDJqLPcQEAAkQmos9xEAACXSaiz3EzAEJdJqLPcQEAgl0mooDgDvLPcS0AQh4mos9xLQCCNyai
-z3EtAAJRDfDPcWoAQh4mos9xagCCNyaiz3FqAAJRJqLPcT8Agikmos9xAQDCKSaiz3E/AMJCJqLP
-cQEAAkMmos9xPwBCXCaiz3EBAIJcJqLPcQgAAgEmooDgEvLPcAAAAioGos9wAgACKwaiz3AAAEJD
-BqLPcAIAQkQGos9w/wACZwaiz3D/AEJnBqLPcP8AgmcGos9w/wDCZwaiz3D/AEJ1BqLPcP8AgnUG
-os9w/wDCdQaiz3D/AIIdBqLPcP8AwjYGos9w/wBCUAaiz3CAAAIMBqLPcAMAxgAGoiDez3WgAMgf
-0KUy2EMdGBAA2DYJL/WNuNGlJwTP/+B48cDhxc9xgABwaASRz3KAAKiNgOAA22CiEfKB4CbyguA9
-8gXYCiHAD+tyiiOHDEokQACpAC/0SiUAAAfYGLgAomGqSiTAcGKqqCDAAgDYjrgWIs0AAaUD2A64
-AqUB4wPYBrEHsQDYGPAA2Jm4AKJS2AGqSiTAcAKqqCBAAgDdj70WIsAAoaCioAHjUtgC22axAdtn
-sTUBb/UAqgDYmLhKJMBwAKKoIEACAN2OvRYiwAChoKKgAeNh2AGqUtgCqujx8cDhxc9xgABwaAeJ
-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
-pwCYRwC2iiDEAAalCoXPd6sAoP8BtoogxQAGpQqFAraKIMsABqUKhQO2iiDPAAalCoUEts9wAACD
-DQalCoUFts9wAADDDQalCoUGts9wAAADDgalCoUHts9wpwAUSAiABKYcgQWmz3CnABRIV4AWgEam
-B6bPcKUACAwCgMbaCKYYh5C6CaYZhwqmGocLps9wBQDGAwalAdhGpc9yLAACAUalz3JaAEIBRqWK
-IosARqXPckAAhw1Gpc9y0QDCDUalz3LAAAcORqXPcqcAFEgIos9yUAD/AFyhz3GnABRIF6EA2Bah
-z3ClAAgMUNkioPzYGKdz2BmnGoeBuBqnz3ARAAYOBqWLcIHBlf8zhgDAUoYieDSGCrhiCe/7QnmE
-KIQDQilBcja5AcIncUq5giHEAs9wgABcdjCmVaA2oM9wQACGDQalz3AQAAIOBqWLcIHBg/8zhgDA
-UoYieDSGCrgaCe/7QnkEKIAPAAB0CUIpQXI2uQHCJ3FKuU/hz3CAAFx2MaZXoDigAZYQuIUghAAG
-pQKWELiFIIUABqUDlhC4hSCLAAalBJYQuIUgjwAGpQWWELgFIIAPAACCDQalBpYQuAUggA8AAMIN
-BqUHlhC4BSCADwAAAg4GpSSGz3CnABRIKKAmhiAWBRA3oCeGTCUAgDagz3ClAAgMCBhAAcogYgHK
-IcIPyiLCB8ojgg8AAPUATAOi88okIgAJhhinCoYZpwuGGqeWCu/+DIaKINEFFg9v9DCGz3CAANQ9
-EIABBO/0osDgePHAkgvP9M9wgABwaAeIgOAcAiEAosEeCe/+BdjPdYAA1D0MpcPYz3agAOwnBqYK
-hgDbALWKIMQABqYKhs9ypwCYRwG1iiDFAAamCobPd6sAoP8CtYogywAGpgqGA7WKIM8ABqYKhgS1
-z3AAAIMNBqYKhgW1z3AAAMMNBqYKhga1z3AAAAMOBqYKhge1z3CnABRICIAEpRyCBaXPcKcAFEg3
-gBaAJqUHpc9wpQAIDAKAxtkIpRiHkLkJpRmHCqUahwulz3AFAMYDBqYB2Camz3EsAAIBJqbPcVoA
-QgEmpoohiwAmps9xQACHDSamz3HRAMINJqbPccAABw4mps9xpwAUSAihz3FQAP8APKLPcacAFEgX
-oXahz3ClAAgMUNkioPzYGKdz2BmnGoeBuBqnz3AqAAIOBqaLcIHB+P4Awc9wgABcdjKlMqABwS+g
-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
-j7thtmCFHN6EKQsKwKPPc4AAQKIwI04OYYWZvsGjgOHKIWIAMKsA2TMbQgAxqwqjMRtCATIbQgE7
-s1qzQCMAAzYOb/IwiwGFCNkyqATBgOEF8s9wgAAoCCSg0glv9alwfQdP8s9wgABwhCiAz3CfALj/
-ANo2oAjZ7HAgoAPZz3CgABQEJaAByOxxAKHPcKAA1AtNoOB+4HjPcYAAPAjgfwCh4HjPcIAAPAjg
-fwCA4HhlBg/yYQYP8uB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfwDY4H8A2OB+4HihweB/
-ocDgeOB+4HjgfuB48cDhxQHIz3WAAFRHAKUEbfIOL/IC2c9wgACgBCCABSGBD4AOBADscCCgZg0v
-8gCFzQZP8uB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7gePHAzHAAkM9xgABURwax
-zHAAEAUBQCECBA4ZRAFMJYCEyiBiAcohwg/KIsIHyiOCDwAAcwCABSLxyiQiAADZCPDMcACQFCJM
-AAHhALQvIEIBEHG49gYOD/LRwOB+4H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB4
-z3CAAEAI4H8AgOB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4Hjg
-fuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+
-4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H8B2OB+4HjgfuB44H7geOB+4HjgfuB44H7g
-eOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjxwOHFz3WAAJRHqXBKDS/y
-A9kAFYUQRCVAAYXgyiBhAcohwQ/KIsEHyiOBDwAATwAwBCHxyiRhAAGNg+DD9mO4Aa3GDA/yDQVP
-8uB48cCODE/yz3KAAJRHYIrguzbyz3OAAEgIoIuA5cwhIYAu8oHgBvTPcIAAjI2hgAPwAN2O5QP3
-gOUC9ADdz3eAAIyNGI+A4AT0gOUE9ADeBPCihwTez3CAAOwOGIiD4MwgIoHMIOKBzCAiggr0CpIQ
-dQj0C5IQdswhIYAE9ADYEPAB2M9xoADIHw2hqrLLskGLBL7FfRC6pXp/GZiAWQRP8vHA7gtv8ghx
-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
-MBzAEQAAACEPHB0iGAEdJhgAxxCkhICBAADAFyAAxxCshICBAADAFwAAACEIMYCB+EHEEA8bCSIA
-Cwk5AgAKYgMBCmIEAgpiAAAJQAQAAGEIAAlAAgAAYQoACUAAAABhAgAJQQAJGigAAMAWAQAbJgAA
-wBcEAB0mAQAIJ+sACGQAAAAhAAAAAJABAAABAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQyAABwMwAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPB2gAAA
-AAAAAQAAAAcAAAAAAAAAwACQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD
-AAAAAAAAAHyIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAABcjYAAdGQBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAD/AQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQACAAAABgAIAAkAAAAHAAAAAAAA
-AAIAAAACAAAAgwAAAJIAAADoAAAA9wAAAE4BAABdAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyc
-gABkxwEAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwhIAADM8B
-AAAAAABwhIAAiNUBAAAAAAAAAAAAcISAAPDWAQAAAAAAAAAAAAAAAABwhIAAAAAAAAAAAAAAAAAA
-/wAAAAAHAAAAAAAAAAAAAAAAAAB/fwABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECBAgA
-CBAgAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwIAAAVAAAAYC2AAFwk
-AABcJAAAXCQAAOw0AABcJAAAXCQAAOA0AABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQA
-AFwkAABMGgAAvBsAAMAbAAA4HQAAvB0AADwdAABcJAAAXCQAAMQ9AAD0QAAA3EEAAFwkAABcJAAA
-XCQAAIg8AACAUgAAfFIAAMBSAABcJAAAXCQAAFwkAADwNAAAXCQAAFwkAABcJAAAXCQAAFwkAABc
-JAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwk
-AABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQA
-AOA1AABcJAAAXCQAAFwkAABcJAAAXCQAAMQ2AABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAA
-XCQAAFwkAABcJAAAXCQAAKRXAABcJAAAmFgAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABc
-JAAAxFoAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAdEsBALhO
-AQBcJAAAoFABAFwkAAAEUgEAFCgBAFwkAABcJAAAWEIAAFwkAABcJAAAXCQAAFwkAABcJAAABLAB
-AMTCAQBcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAA+N0BAPzdAQBcJAAAXCQAAFwkAABcJAAA
-XCQAAFwkAACUzQEAXCQAAEjRAQBcJAAAXCQAAFwkAAAkIAAAVO4BAFwkAABcJAAA5N8BAFhdAABc
-JAAAXCQAAFwkAACsywEAXCQAAFwkAACUIAEAoGcBAFwkAABcJAAAXCQAAExvAQA4KQEAXCQAAFwk
-AABcJAAAXCQAAFwkAABcJAAAOHkBAFwkAADs3gEA8N4BAPzeAQAA3wEA9N4BAPjeAQAE3wEAXCQA
-AFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAANEQAAFwkAABcJAAAXCQAAFwkAABcJAAA
-ON4BAJDeAQD4OAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABc
-JAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwk
-AABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAFwkAABcJAAAXCQAAJg5AAA0OgAAxDoA
-AGw7AABsagAARDsAAFwkAABcJAAAXCQAAFwkAABcJAAAkDkAAJQ5AABcJAAAXCQAAIhCAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAoAAMwKAADMCgAAzAoAAMwKAADMCgAAzAoA
-AMwKAADMCgAAzAoAAMwKAADMCgAAzAoAAMwKAADMCgAAzAoAAMwKAADMCgAAzAoAAMwKAADMCgAA
-zAoAAMwKAADMCgAAzAoAAMwKAADMCgAAzAoAAMwKAADMCgAAzAoAABAMAAAAAAAA1C4BAMwKAAAU
-CQAAzAoAAMwKAADMCgAARAkAAFgPAQAEawAAzAoAAMwKAAB4CQAAeAkAAHgJAAB4CQAAeAkAAHgJ
-AAB4CQAAzAoAAMwKAADMCgAAzAoAAJgKAADMCgAAzAoAAMwKAADMCgAAzAoAABQMAADMCgAAzAoA
-APgIAAADAAAArNwBAAIAAAAwOQEABAAAALwuAAAGAAAAbN4BABAAAADwyAEABwAAAPDSAQAIAAAA
-CN8BAAwAAABAZQEADQAAABRUAQAOAAAASFQBABUAAAA8LgEACwAAAKhMAQATAAAAVF0AAA8AAADI
-HwEAAQAAADzNAQARAAAAfHYBABIAAAC0ZwEABQAAACBbAAAUAAAAOO0BABYAAAAQDAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAABAQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////////8AAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhAw4e4eEDDh7hwQIKHuGB
-BQwe4eEDDh7h4QMOHuHBAgYe4YEFDB7hAQEBAQEBAQEBAQEBAQEBAQ0NDQ0NDQ0NDQ0NDQ0NDQ0D
-AwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQENDQ0NDQ0NDQ0N
-DQ0NDQ0NAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBDQ0N
-DQ0NDQ0NDQ0NDQ0NDQMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAkQIAADHKLwCRAgAA
-McovAJECAAAxyi8AkQIAADHKLwCRAgAAMcovAJECAAAxyi8AkQIAADHKLwCRAgAAMcovAEMBAAAx
-yi8AQwEAADHKLwBDAQAAMcovAEMBAAAxyi8AQwEAADHKLwBDAQAAMcovAEMBAAAxyi8AQwEAADHK
-LwBADQAA3gMJAAAAAAAAAAAAAAAAADz7AAABAAAAIC2AAAAAAAAAAAAAAgAAAAMAAAAAAAAABwAA
-AAAAAABAQg8AfPsAADj8AABE/QAA/P4AAET9AAD8/gAANAABAKwAAQCAgICAgICAgAGAAoCAgICA
-AAAAACQIAQAkCAEAAAAAAAAAAAAAAAAAAAAAACQIAQAkCAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAJwKAQAVAAAAYC2AACAtgAAgLYAApCCgADggoAABAAAA/P///wAA
-AAAAAAAAQC2AAEAtgACoIKAAPCCgAAgAAADz////AAAAAAAAAABgLYAAYC2AAKwgoABsIKAAMAAA
-AM////8AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAA
-2CABAAUAAAAgLYAAxCYBAAD/AwDkJgEAAP8FAMwnAQAA/y0A8CcBAAD/PQCoJwEAAP8EAIwnAQAA
-/yUAAAAAAAAAAAAAAAAA0CwBAAYAAAAgLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADALwEAiDAB
-AKAzAQB4MQEA8DABAFw0AQC8NAEAADUBAEQ1AQAAAAAALAEAAF4BAAABAAAAAQAAAAEAAAABAAAA
-AwAAAAAAAAAAAAAAAAAAAAMAAAACAAAAAwAAAAMAAAADAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAA
-AAAAjDoBAAoAAAAgLYAAAAAAAAAAAAAAAAAA7DoBAAoAAAAgLYAAAAAAAAAAAAAAAAAAADsBAAoA
-AAAgLYAAAAAAAAAAAAAAAAAATDsBAAoAAAAgLYAAAAAAAAAAAAAAAAAAFDwBAAoAAAAgLYAAAAAA
-AAAAAAAAAAAAuDsBAAoAAAAgLYAAAAAAABAAAAAAgAAAAACgABAnAADoAwAA6AMAAAAAAAAAAAAA
-AAAAAPwRAQAKAAAAIC2AAAAAAAAAAAAAAAAAAPwRAQAKAAAAIC2AAAAAAAAAAAAAAAAAAPwRAQAK
-AAAAIC2AAAAAAAAAAAAAAAAAAPwRAQAKAAAAIC2AAAAAAAAAAAAAAAAAAPwRAQAKAAAAIC2AAAAA
-AAAAAAAAAAAAAPwRAQAKAAAAIC2AAAAAAAAAAAAAAAAAAPwRAQAKAAAAIC2AAAAAAAAAAAAAAAAA
-APwRAQAKAAAAIC2AAAAAAAAAAAAAAAAAAPwRAQAKAAAAIC2AAAAAAAAAAAAAAAAAAPwRAQAKAAAA
-IC2AAAAAAAAAAAAAAAAAAPwRAQAKAAAAIC2AAAAAAAAAAAAAAAAAAPwRAQAKAAAAIC2AAAAAAAAA
-AAAAAAAAAFhQAQAKAAAAIC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAw
-VwEAOFgBAKhaAQA8XQEAnF8BANRiAQCgWQEAOAWAADiEgAAYAAAA+IOAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAA6GQBAAYAAAAgLYAAAAAAAP//////////AAAAAAAAAAAAAAAALGcBAAUAAABgLYAAZABk
-AGkA3ADIAFoAqgC+AIYBfQA+AGQAZABpANwAyABaAKoAvgCGAX0APgAAAAAAAQEAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAABAgEBAAIBAAECAgIAAQEAAgECAQIAAgABAgMAAAAAoHgBAHCJAQDEjYAA
-wAMAAAAAAACgeAEAzHkBAISRgAD4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0I0BANiLAQB8
-k4AAVAAAAAAAAACgeAEACIwBAPyTgABQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAoHgBAHiI
-AQB0N4AAUAEAAAAAAADkjQEAjIoBAMgGgAACAAAAAAAAAKB4AQC4igEAzAaAAAQAAAAAAAAAvI0B
-AMx5AQDQk4AALAAAAAAAAACgeAEAJIsBAAAAAAAAAAAAAAAAAKB4AQDkigEA0AaAAAQAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAIAAgADAAQABAAFAAYABgAHACAAIAAhACIAIgAj
-ACQAJAAlACYAJgBDAEQARABFAEYARgBHAEgASABJAEoASgBLAEwATABNAE4ATgBPAFAAUABRAG4A
-bgBvAHAAcABxAHIAcgBzAHQAdAB1AHYAdgB3AHgAeAB4AHgAeAB4AHgAeAB4AA8APwAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAgADAAMABAAFAAUABgAHAAcACAAJAAkACgAjACMA
-JAAlACUAJgAnACcAKAApACkARgBHAEcASABJAEkAZgBnAGcAaABpAGkAagBrAGsAbABtAG0AbgBv
-AG8AcABxAHEAcgBzAHMAdAB1AHUAdgB3AHcAeAB4AHgAeAB4AHgAeAB4AA4APwAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAABAAIAAgADAAQABAAFAAYABgAHACAAIAAhACIAIgAjACQAJAAl
-ACYAJgBDAEQARABFAEYARgBHAEgASABJAEoASgBLAEwATABNAE4ATgBPAFAAUABRAG4AbgBvAHAA
-cABxAHIAcgBzAHQAdAB1AHYAdgB3AHgAeAB4AHgAeAB4AHgAeAB4AA8AQwAAAAAAAAAAAAAAAAAA
-AAAAAAABAAEAAgADAAMABAAFAAUABgAHAAcACAAJAAkACgAjACMAJAAlACUAJgAnACcAKAApACkA
-RgBHAEcASABJAEkAZgBnAGcAaABpAGkAagBrAGsAbABtAG0AbgBvAG8AcABxAHEAcgBzAHMAdAB1
-AHUAdgB3AHcAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AAgAQwCgbAEAEtIAAAAAAAD//w8A
-zIUBALYAAAAAAAAA/wAAAMyFAQC3AAAAAAAAAP8AAADMhQEAuAAAAAAAAAD/AAAAzIUBALkAAAAA
-AAAA/wAAAMyFAQC6AAAAAAAAAP8AAADMhQEAuwAAAAAAAAD/AAAAzIUBAL0AAAAAAAAA/wAAAMyF
-AQC+AAAAAAAAAP8AAADMhQEAvwAAAAAAAAD/AAAAzIUBAMAAAAAAAAAA/wAAAMyFAQDBAAAAAAAA
-AP8AAADMhQEAwgAAAAAAAAD/AAAAoGwBABPSAAAAAAAA//8PAMyFAQAbAQAAAAAAAP8AAADMhQEA
-HAEAAAAAAAD/AAAAzIUBAB0BAAAAAAAA/wAAAMyFAQAeAQAAAAAAAP8AAADMhQEAHwEAAAAAAAD/
-AAAAzIUBACABAAAAAAAA/wAAAMyFAQAiAQAAAAAAAP8AAADMhQEAIwEAAAAAAAD/AAAAzIUBACQB
-AAAAAAAA/wAAAMyFAQAlAQAAAAAAAP8AAADMhQEAJgEAAAAAAAD/AAAAzIUBACcBAAAAAAAA/wAA
-AKBsAQAU0gAAAAAAAP//DwDMhQEAggEAAAAAAAD/AAAAzIUBAIMBAAAAAAAA/wAAAMyFAQCEAQAA
-AAAAAP8AAADMhQEAhQEAAAAAAAD/AAAAzIUBAIYBAAAAAAAA/wAAAMyFAQCHAQAAAAAAAP8AAADM
-hQEAiQEAAAAAAAD/AAAAzIUBAIoBAAAAAAAA/wAAAMyFAQCLAQAAAAAAAP8AAADMhQEAjAEAAAAA
-AAD/AAAAzIUBAI0BAAAAAAAA/wAAAMyFAQCOAQAAAAAAAP8AAACgbAEACNIAAAAAAAD//wMA4GwB
-AACCAAAAAAAA/wEAAOBsAQABggAAAAAAAP8BAACgbAEACdIAAAAAAAD//wMA4GwBAAKCAAAAAAAA
-/wEAAOBsAQADggAAAAAAAP8BAACgbAEACtIAAAAAAAD//wMA4GwBAASCAAAAAAAA/wEAAOBsAQAF
-ggAAAAAAAP8BAACgbAEABtIAAAAAAAD/AQAAoGwBAAfSAAAAAAAA/wMAAKBsAQAG0gAACQAAAAD+
-AwCgbAEAB9IAAAoAAAAA/A8AoGwBAAbSAAASAAAAAAD8B6BsAQAH0gAAFAAAAAAA8D+gbAEAFdIA
-AAAAAAD/AwAAoGwBAAzSAAAAAAAA/wEAAKBsAQAV0gAACgAAAAD8DwCgbAEADNIAAAkAAAAA/gMA
-oGwBABXSAAAUAAAAAADwP6BsAQAM0gAAEgAAAAAA/AcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAEAAQAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAQAAgABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAFAAIAAQAB
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAkABQADAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAACAA
-EwAKAAUAAwABAAEAAAAAAAAAAAAAAAAAAAAAAAAAQAAmABQACgAFAAMAAQABAAAAAAAAAAAAAAAA
-AAAAAACAAEwAKAAUAAoABQADAAEAAQAAAAAAAAAAAAAAAAAAAAABlwBQACkAFAAKAAUAAwABAAEA
-AAAAAAAAAAAAAAAAAAIuAaAAUQApABQACgAFAAMAAQABAAAAAAAAAAAAAAAABF0CPwGiAFEAKQAU
-AAoABQADAAEAAQAAAAAAAAAAAAAIuQR/AkQBowBRACkAFAAKAAUAAwABAAEAAAAAAAAAABByCf4E
-iQJGAaMAUQApABQACgAFAAMAAQABAAAAAAAAIOQS+wkRBYsCRgGjAFEAKQAUAAoABQADAAEAAQAA
-ABzSDdIR0hDSAtIB0gPSG9IL0gCABdIS0hPSFNIEQwbSB9IE0gkQAAC1ABoBgQEFAAQABgAIAAkA
-CgALAAwAgwCSAOgA9wBOAV0BDwAuAAAAbAAAAHQAAACAAAAAjAAAAJ0AAAAHAAAABAAAAAgAAAAQ
-AAAAQAAAAIAAAAAgAAAAAAAAAAkAAAASAAAAAAAAAAoAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAIA
-AQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABQACAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAEAAJAAUAAwABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABMACgAFAAMAAQABAAAAAAAAAAAA
-AAAAAAAAAAAAAEAAJgAUAAoABQADAAEAAQAAAAAAAAAAAAAAAAAAAAAAgABMACgAFAAKAAUAAwAB
-AAEAAAAAAAAAAAAAAAAAAAAAAZcAUAApABQACgAFAAMAAQABAAAAAAAAAAAAAAAAAAACLgGgAFEA
-KQAUAAoABQADAAEAAQAAAAAAAAAAAAAAAARdAj8BogBRACkAFAAKAAUAAwABAAEAAAAAAAAAAAAA
-CLkEfwJEAaMAUQApABQACgAFAAMAAQABAAAAAAAAAAAQcgn+BIkCRgGjAFEAKQAUAAoABQADAAEA
-AQAAAAAAACDkEvsJEQWLAkYBowBRACkAFAAKAAUAAwABAAEAAAA4BYAAOISAABgAAAD4g4AAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAArMQBAAYAAAAgLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4BYAAOISAABgAAAD4g4AAAAAAAAAAAAAAAAAAAAAAAAAA
-AADszgEABgAAACAtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAADgFgAA4hIAAGAAAAPiDgAAAAAAAAAAAAAAAAAAAAAAAAAAAADDaAQAEAAAA
-IC2AAAAAAAAAAAAAAAAAAFDZAQAEAAAAIC2AAAAAAAAAAAAAAAAAANTaAQAGAAAAIC2AAAAAAAAA
-AAAAAAAAAFDZAQAEAAAAIC2AAAAAAAAAAAAAAAAAADDaAQAEAAAAIC2AAAAAAAAAAAAAAAAAAFDZ
-AQAEAAAAIC2AAAAAAAAAAAAAAAAAADDaAQAEAAAAIC2AAAAAAAAAAAAAAAAAAFDZAQAEAAAAIC2A
-AAAAAAAAAAAAAAAAANTaAQAGAAAAIC2AAAAAAAAAAAAAAAAAAFDZAQAEAAAAIC2AAAAAAAAAAAAA
-AAAAADDaAQAEAAAAIC2AAAAAAAAAAAAAAAAAANTaAQAGAAAAIC2AAAAAAAAAAAAAAAAAADDaAQAE
-AAAAIC2AAAAAAAAAAAAAAAAAADDaAQAEAAAAIC2AAAAAAAAAAAAAAAAAANTaAQAGAAAAIC2AADgF
-gAA4hIAAGAAAAPiDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAFAUAAAAAAAAAAAAAAAAAAAAAAP8A/wAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwQEBAQE
-BQYHCAgICAgJCgsMDQAAAAUGBwgNDg8QFRYXGBkAAAoNERQKDREUCg0RFAoKAAAAAAAABgYGBgkJ
-CQkABgAAbjtoO2I7XDtuOmg6YjpcOm45aDliOVw5bjhoOGI4XDhuN2g3YjdcN24paCliKVwpbiho
-KGIoXChuJ2gnYidcJ24ZaBliGVwZbhhoGGIYXBhuF2gXYhdcF24JaAliCVwJbghoCGIIXAhuB2gH
-YgdcB24GaAZiBlwGbgVoBWIFXAVuBGgEYgRcBG4DaANiA1wDbgJoAmICXAJuAWgBYgFcAW4AaABi
-AFwAbjtoO2I7XDtuOmg6YjpcOm45aDliOVw5bjhoOGI4XDhuN2g3YjdcN24paCliKVwpbihoKGIo
-XChuJ2gnYidcJ24ZaBliGVwZbhhoGGIYXBhuF2gXYhdcF24JaAliCVwJbghoCGIIXAhuB2gHYgdc
-B24GaAZiBlwGbgVoBWIFXAVuBGgEYgRcBG4DaANiA1wDbgJoAmICXAJuAWgBYgFcAW4AaABiAFwA
-AAAAAAAAAAAAAAAAWPIBAAgAAABgLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAA/////////wAB//8CA////wT//////////////////////wX/Bv8H/wj/Cf8K
-/wv/DP///w3///8O////D////xD//////////////////////////////////////////////xH/
-//8S////E////xT///8V////Fv///xf///8Y////Gf///xr///8b/////xz///8d////Hv///x//
-//8g////If//////////////////////IiMk/yUmJ///KP///yn/////////////////////////
-/////////////////////////////////////////////////////wEEAAACBQEAAwYCAAQHAwAF
-CAQABgkFAAcKBgAICwcACQwIAAoNCQALDgoADA8LAA0QDAAOEQ0AAUEABAJCAQQDQwIEBEQDBAVF
-BAQGRgUEB0cGBLcTIgC4FCMAuRUkALsWJQC8FyYAvRgnAMAZKADEGikABxsAAAgcAQALHQIADB4D
-ABAfBAAiIQUAJCIGACYjBwAoJAgAKiUJACwmCgAuJwsAMCgMADQpDQA4Kg4APCsPAEAsEABkLhEA
-aC8SAGwwEwBwMRQAdDIVAHgzFgB8NBcAgDUYAIQ2GQCINxoAjDgbAJE6HACVOx0AmTweAJ09HwCh
-PiAApT8hACRJBgIsSgoCNEsNATxMDwFkTREBbEMTAXRPFQF8UBcBhFEZAZVSHQGdUx8BAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAEFggWFhYMFhYWFhYWFhAAAAAADwA/AAEAAAAPAD8AAQAAAA8APwABAAAADwA/
-AAEAAAAPAD8AAQAAAA8APwABAAAADwA/AAIAAAAPAD8AAQAAAAAAAAABAAAAAgAAAAMAAAAAAAAA
-BAAAAAIAAAAFAAAACgUBpREBAKUAPDg0MCwoJCAcGBQQDAgEAAwIBAA8ODQwLCgkIBwYFBAMCAQC
-ABUPAAAAABsAAAABAQABAgEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAApcaE+JnujfYN/73Wsd5UkVBgAwKpzn1WGediteZNmuxFj50fQImH+hXv67LJjgv7
-7EFns/1f6kW/I/dTluRbm8J1HOGuPWpMWmxBfgL1T4NcaPRRNNEI+ZPic6tTYj8qDAhSlWVGXp0o
-MKE3Dwq1LwkONiSbGz3fJs1pTs1/n+obEp4ddFguNC02stzutPtb9qRNdmG3zn17Uj7dcV6XE/Wm
-aLkAACzBYEAf48h57ba+1EaN2WdLct6U1JjosEqFa7sqxeVPFu3FhteaVWaUEc+KEOkGBIH+8KBE
-eLol40vzov5dwICKBa0/vCFIcATx32PBd3WvY0IwIBrlDv1tv0yBFBg1Ji/D4b6iNcyIOS5Xk/JV
-gvxHeqzI57orMpXmoMCYGdGef6NmRH5UqzuDC8qMKcfTazwoeafivB0Wdq0721ZkTnQeFNuSCgxs
-SOS4XZ9uve9DpsSoOaQxN9OL8jLVQ4tZbrfajAFksdKc4Em02PqsB/Mlz6/KjvTpRxgQ1W+I8G9K
-clwkOPFXx3NRlyPLfKGc6CE+3ZbcYYYNhQ+Q4EJ8xHGqzNiQBQYB9xIco8Jfavmu0GmRF1iZJzq5
-JzjZE+uzKzMiu9JwqYkHpzO2LSI8khUgyUmH/6p4UHqljwP4WYAJFxraZTHXxoS40MOCsCl3WhEe
-y3v8qNZtOiwBAQEBAQEBAQICAgICAgICAwMDAwMDAwMEBAQEBAQEBAECAgICAgIDAwMDAwMDAwMD
-AwMDAwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAABAQIBAgIDf/8HDx8/AQMBAw8HAQcPHz9/
-//8FAAcCAwQGBnTRRRfooosuDQ8FBwkLAQMKFDduVVVVAUtoLwFVVVUF4ziOA6qqqgJxHMcBqqqq
-CsdxHAcPDw8HBgcCAwQFAAEICQsKKAAoADAALAAsACgAPAA0ACgAKAA0ADAALAAsAEQAPABAADwA
-jABsAFgASAD0ALAALAAsADwANAAwACwAVABEAFQAVABsAGAAXABUAIwAeAA6AQIB1QDfANoAogB1
-AH8AagEaAdkA6AAKAboAeQCIAIoFKgM5AagBigXKAtkASAHKAUoB4gD5AMoB6gCCAJkA9AJEArUB
-1QGUAoQB9QBBAqwAkACEAIAAeAB4AHgAdABm5gAAndiJnU7sxE40SIM0J3ZiJxqkQRoTO7ETERiB
-EQ/8wA9O7MROJ3ZiJxqkQRoTO7ETDdIgDYmd2AkIjMAIB37gBzRIgzQapEEaERiBEQ3SIA0IjMAI
-BmmQBrCy1QUFVEAFJ3ZiJxM7sRMN0iANiZ3YCQZpkAbETuwEBEZgBAM/8AOqqqqqGqRBGhM7sRMP
-/MAPERiBEQ3SIA0KqIAKEzuxEw/8wA8P/MAPDdIgDQu0QAsLtEALiZ3YCQ3SIA0KqIAKCqiACgiM
-wAgHeIAHB3iABwZpkAYP/MAPDdIgDQu0QAsN0iANC7RAC4md2AkIjMAIiZ3YCQiMwAgHfuAHB37g
-B8EsKQcKqIAKCIzACAd4gAcIjMAIB3iABwZpkAawstUFBmmQBrCy1QUFVEAFBVRABdYdxgQNABoA
-JwA0AE4AaAB1AIIAGgA0AE4AaACcANAA6gAEAScATgB1AJwA6gA4AV8BhgE0AGgAnADQADgBoAHU
-AQgCDABOAGgAggB1AJwAwwBoAIIAggCcALYAtgDQAJwAwwDDAOoAEQERATgBggCcALYAnAC2ANAA
-6gDQAOoABAEEAR4BwwDqABEB6gARATgBXwE4AV8BhgGGAa0BAAAwAAAANgAAAAwAAAASAAAAGAAA
-ACQAAAAGAAAACQAAAAAAAAAAAAAAGCAUFA4OFBQFBgECAwQAAAABAQIBAgIDBAwMCAQMBARAAAAA
-gAAAAAABAAAAAgAAQAAAAAAEAABAAAAAQAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKiss
-LS4vQEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1
-dnd4eXp7fH1+fzMTAAAABwcPBw8PFy0ADyAA8GEAAAAAAAAAAAAAAQIEBAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAFQ1twBtt6WVt2YAAAB1dV0GdXV1dUIAAAgAAAACAAAAAAAAAAAAAAAIAAAAAgAA
-AAAAAAAAAAAACAAAAAMAAAABAAAACAAAAAgAAAACAAAAAgAAAAgAAAABAgECAwQAAAUGBwgJCgAA
-AAUGAAIEAAUAAAAAAAUHAQMEAAUBAAAAQCNAJSEhISFAQEBAQAUEBAEBQEBAQAUFQEAMDEANDAwB
-AQEFQEAFBQAEAARAQAAEQEBABUBAQEBABUBAQAUFBQEBAQFABQUFAQUBAUAFBQVABUAFBQUFBQQA
-AAAcEQAAHDIAABwzAAAEAAAAHBUAAAIAFwBsAHAEdAh0DAAEBAYAAAAAAAAAAGQAAAAAkAEACgAA
-AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAAAAAAAAAQAAAAEAAAAAAAAA
-/wAAAP8AAAAAAAAAAAAAABzbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
-AAAFAAAAAAQAAGQAAADkTQEA7E0BAPRNAQBMTgEAVE4BAFxOAQAHBwcHBwcHBwcHBwcHBwcHBwcH
-BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcGBgYGBgUFBQUFBAQEBAQDAwMD
-AwICAgICAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAQOCR0tOQAABBEJHy07AAEQAAEAAAACgAABQgYCEAACIAAAA8AAAUMGAxAAAsAA
-AAPAAAFDBgQQAAJAAAACgAABRAYFEQAAQAAAA8AAAUUGBhEAAOAAAAPAAAFFBgcRAAEAAAACgAAB
-RgYIEQACIAAAA8AAAUcGCREAAsAAAAPAAAFHBgoRAAJAAAACgAABSAYLEgAAQAAAA8AAAUkGDBIA
-AOAAAAPAAAFJBg0SAAEAAAACgAABSgYOEgACAAAAAoAAAUwGAAAiFgAAgAAAAwAAAVkAJBYAAQAA
-AAMAAAFaACYWAAIAAAAEAAABWgAoFgACAAAAAwAAAVsAKhYAAoAAAAMAAAFcACwXAAAAAAAEAAAB
-XAAuFwAAgAAAAwAAAV0AMBcAAQAAAAMAAAFeADQXAAIAAAADAAABXwA2FwACgAAAAwAAAWAAOBgA
-AAAAAAQAAAFgADwYAAEAAAADAAABYgA+GAACAAAABAAAAWIAQBgAAgAAAAMAAAFjAGQbAAIAAAAD
-AAABbwFmGwACgAAAAwAAAXABaBwAAAAAAAQAAAFwAWwcAAEAAAADAAABcgFuHAACAAAABAAAAXIB
-cBwAAgAAAAMAAAFzAnQdAAAAAAAEAAABdAJ2HQAAgAAAAwAAAXUCeB0AAQAAAAMAAAF2AnwdAAIA
-AAADAAABdwN+HQACgAAAAwAAAXgDgB4AAAAAAAQAAAF4A4QeAAEAAAADAAABegOGHgACAAAABAAA
-AXoEiB4AAgAAAAMAAAF7BIwfAAAAAAAEAAABfASRHwABQAAAAwAAAX4ElR8AAwAAAAQAAAF/BZcf
-AALAAAADAAABgAWZIAAAQAAAAwAAAYEFnSAAAUAAAAMAAAGCBZ8gAAHAAAADAAABgwWhIAADAAAA
-BAAAAYMFpSEAAEAAAAMAAAGFBQAAAAAAAAAAAAC0wQEAbLIBAEy0AQCAtQEAoLcBAEC6AQAYvgEA
-oL8BANTAAQCs0wEAtNMBACDUAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQkSFBgAAA4AAAAqAAAABwAAAAsAAAD/////AAAAAAAA
-AAABAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAUFBQUFBQUFAAAAAIANAAAAIAAAgA0AAIANAAAAIAAA
-gA0AAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAgIIAPAABAAGkgAABpIEAAaSAAAGkgQAAgIIAPAADoAGkgAABpIEAAaSAAAGkg
-QAAgIIAPAADwBWkgAABpIEAAaSAAAEogAABKIQAASiIAAEojAABKJAAASiUAAEomAABKJwAASiAA
-EEohABBKIgAQSiMAEEokABBKJQAQSiYAEEonABBKIAAgSiEAIEoiACBKIwAgSiQAIEolACBKJgAg
-SicAIEogADBKIQAwCiSAP4AAAMBBLJwwQCycMEIkHDQKIoA/gACsTwojADdiDwAASiYAcGkgQABK
-JgBwSiYAcEomAHBKJgBwABYAcIAAWARAeCAgQIcAAAAAAAAAAAAA4cThwOHB4cLPcKAAyB8WEAGG
-z3KAAOBjIKISEAGGIaITEAGGIqIUEAGGI6IVEAGGJKIkEAGGJqLPcZ8AuP9WoYoh/w8SGFiAExhY
-gBQYWIAVGFiAJBhYgMHCwcHBwMHEICBAhwrIz3KgAMgfDhoYgAvIDxoYgAzIEBoYgA0SATYAyCR4
-ERoYgA7ILRoYgOB+4cT8HMi+/BxIvuHA4cHhwuHD/BwIsfwcSLH8HIix/BzIsfwcCLL8HEiy/ByI
-svwcyLL8HAi/aiSAEOHEaiTAEOHE8cDPcKAA0BsUgM9xgABUBAQggI/PUQThAKEK8i8pAQDPcIAA
-0A3wIEAAQHja/9HAwcRrJMAQwcRrJIAQwcSfdAQUCzQEFAo0BBQJNAQUCDQEFAc0BBQGNAQUBTQE
-FAQ0wcPBwsHBwcDBxEUsfhAKJkB+wcRrJIAUwcQgIECHCsiHuAoaGDALyJu4CxoYMAzIDBoYMA3I
-h7gNGhgwDsiFIMMPDhoYMOB+4HjxwArIlbgKGhgwC8ibuAsaGDANyIq4jbiQuA0aGDDPcIAA6A4Y
-iBsIUQANyM9xAADYCqy4DRoYMLINIAAP2GfYLg3gAIohxgjRwOB+z3CAAHiKAICEIAGOCPQNyAUg
-gA8AAADUDRoYMEDx4HjxwM9xAwBADc9woACoIC2gz3KAAIQEIIIBaQCiqg/gAEjYz3CAAKAIJYAj
-gSCBx3EAAIgTyg4ACNLx4HjPcIAAoAhtBgAI4HjxwOYIQAHPdoAAVAQF6A8IUQAB2ALwANgLrgbp
-DQlRAAHYA/AA2AquBeoPClEAAdgC8ADYDK4A2M91oADIHxgdGJALjoohEAAN6AiOC+jPcAMAQA1F
-HRgQMKUC2BgdGJAC8DGlCo4Z6AmOF+jPcAEAns0gHRiQz3CAACQAIR0YkM9wgABQBCIdGJAYFQCW
-RSAAAxgdGJAMjgfoGBUAloUgAQQYHRiQGesA2JS4z3aAAHgEAKZx2Aa4xg7gAPzZIIbPcAAATBy6
-DuAAn7kYFQCWhbgYHRiQfQBAAeB4z3Gqqru7z3CfALj/NqA2oDagNqDPcaAAyDsOgYi4DqFpIEAA
-/vHgePHApcFBwELBDBwAMRAcQDHPcIAA/FA0GMAPMBgADywYwA4oGIAOJBhADs9xgAD8UCAZQAvP
-cIAA/FAcGAALz3CAAPxQGBjACs9xgAD8UBQZgArPcIAA/FAQGMAIz3GAAPxQDBmACM9xgAD8UAgZ
-QAjPcYAAgFCAGQAIfBnAB3gZgAd0GUAHcBkAB2wZAAdoGYAGZBlABmAZAAZcGcAFWBmABVQZQAVQ
-GQAFTBnABEgZgAREGUAEQBkABO+hzqGtoYyhLBnAAigZgAIkGUACIBkAAhwZwAEYGYABFBlAARAZ
-AAFjoWogAAPYGQAAaiDAAtQZAABqIIAC0BkAAGogQAHIGQAAaiAAAcQZAABqIMAAwBkAAGoggAC8
-GQAAaiBAALgZAABqIAAAtBkAAGoggAHMGQAA0NifuM9xnwC4/x2hz3CAAAAAxIBTJcQ1UybFNde6
-AebTvsSgUyPABAUmjh/Q/gAA1qEFIIAPsP4AABahGIFTJ841AN2UuBihQMMBwALByXMMFAYwXgrg
-ABAUBzDPcKAAtA+8oM9xoADIOy6BFgrgAH3YAglAAe4M4ACpcAjYANnGDOAAmbkQ8fHA+g0AAc9w
-gAD8UDQYwA8wGAAPLBjADigYgA4kGEAOz3CAAPxQIBhAC89wgAD8UBwYAAvPcIAA/FAYGMAKz3CA
-APxQFBiACs9wgAD8UBAYwAjPcIAA/FAMGIAIz3CAAPxQCBhACM9xgACAUIAZAAh8GcAHeBmAB3QZ
-QAdwGQAHbBkAB2gZgAZkGUAGYBkABlwZwAVYGYAFVBlABVAZAAVMGcAESBmABEQZQARAGQAE76HO
-oa2hjKEsGcACKBmAAiQZQAIgGQACHBnAARgZgAEUGUABEBkAAWOhaiAAA9gZAABqIMAC1BkAAGog
-gALQGQAAaiBAAcgZAABqIAABxBkAAGogwADAGQAAaiCAALwZAABqIEAAuBkAAGogAAC0GQAAaiCA
-AcwZAAAKIMAnz3agAMgfGRYRls9wAABEHJYIIAEKJcAfWnDPcIAAyCADgM9znwC4/893gAAAACSH
-AeHTuSPoGRYClj8K3gBdg0Ddn729oySnBSGBD9D+AAA2o1gbgAchFgGWIhYBlgQggA//APz/AIAW
-owjYGR4YkFajXaOZBAAB0NifuB2jJKcFIYEP0P4AAM9wgAB4BDajAIALIICEB/JYG4AE6gkAAgzY
-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
-GIDgeOB44HjgeOB44HjgeOB4HIHgfuB4A9rPcaAAFARFoc9xoAD8Cwyp4H4D2s9xoAAUBEWhz3Gg
-AAgMALHgfgPMz3GAAKAEIIHXcAAAAEDFIYsPgA4EAM8hqgDPIWoGzyGqBs8h6gaduZ+57HAgoM9w
-oAAUBAPZJaAByM9xoADUCwDaDaHPcKAARB1VoOB+pwkQAEAhwgPDuZ8JNQQkujMmQXCAAIhEQCcM
-cjR8AHzMcSCBBBhQAMxxIIEEGFAAzHEggQQYUADMcSCBBBhQAMxxIIEEGFAAzHEggQQYUADMcSCB
-BBhQAMxxIIEEGFAAzHEggQQYUADMcSCBBBhQAMxxIIEEGFAAzHEggQQYUADMcSCBBBhQAMxxIIEE
-GFAAzHEggQQYUADMcSCBQiJCgAQYUAC+9eB+IepjasG6Pwo1ASK7MyaCcIAAmERAJwxyVHwAfAQQ
-AgQEGZAABBACBAQZkAAEEAIEBBmQAEIjQ4AEEAIEBBmQAO714H6nChAAQCLDA8O6nwo1BCS7MyaC
-cIAAnERAJwxyVHwAfAEQggQBGZIAARCCBAEZkgABEIIEARmSAAEQggQBGZIAARCCBAEZkgABEIIE
-ARmSAAEQggQBGZIAARCCBAEZkgABEIIEARmSAAEQggQBGZIAARCCBAEZkgABEIIEARmSAAEQggQB
-GZIAARCCBAEZkgABEIIEARmSAEIjQ4ABEIIEARmSAL714H7xwOHFKHUoc4QjPw8bYyK5l//BvR0N
-UBARDZAQGw3REMxwAIgBGxIAzHAAiAEbEgDMcACIAKvxBQAA4HiA4cokTXDoIO0BzHEgkQIYVADg
-foDhyiRNcOgg7QHMcSCJARhSAOB+8cBODSAAUyFCAE4iDQHPcqAAFATJggDbDiaCHwAAAAZQccog
-ZgHKIcYPyiLGB8ojhg8AACMCyiRmADQF5v7KJcYAgOHKJE1wyiLNAOggLQJOYM9xoAA4BAHiyKkd
-DVAQEQ2QEB0N0RDPcKAAOARoqM9woAA4BGioz3CgADgEaKg5BQAA4cUA2g/woIANc6CjoYANc6Cj
-ooANc6Cjo4ANc6CjEOAB4kEpAwHjCsSAANsG8AQQDQQNcqCiAeNTIcIAIrrzC4SAANsG8AEQjQQN
-cqCqAeNTIUIA8wuEgOB/wcXPc58AuP8aoz6jwroFIoIPAGwAAFmj4H7hxc91gACgBCGFz3KfALj/
-jCH/j2rbGLsH8jqieaI8gooh/w8hpRqieaIcgtzx4HjxwCIMIAAA2892AAAEHQjfaHUSbUNwz3GA
-APBYIJEaEAAGhuHBKCECwCjhAQDZz3KgABQEqqJoogeiJKILCHQCG2NCIAECyXCd/mG/IObHD3WQ
-AeU1BAAAQSmBgAnyLyRJcKggwAEEEAIE7HFAoeB+8cC2CwAACHUodkAhAAJO/gduBCCADwAA/P8F
-IIEPgA4AAM9wgACgBACAJXiduJ+47HEAoQHI7HEAoSK+BfDscQChBOVhvvsOtZAAhaz+1QMAAOB4
-B9nPc6AA1AcaG1iADegZEwGGCSBCAA8TAYYCIICAWWEPG1iA9fXgfqHB8cAIcs9wgACgBACABSCA
-D4AOCADscwCj7HBAoChwmP7RwOB/ocDxwFIIQAp2CEAKPwDP/+B48cDhxc9xgADwWAaJewgQAAeJ
-dwgQAKCRCm0XCFUCMyYAcIAArERAJ4xyFHwAfADYHvAEkYboBZGB4MwgooAE8gDYA/AB2ALdEvAE
-kQXdgeAB2MB4DPAEkQTdg+AB2MB4BvAEkQrdhOAB2MB4GwhQAAgRBQEQ2AohwA/rcoojzQ6hAu/+
-mHXxAgAA4HihwfHAbgogAAhzocFFwI3pBdgKIcAP63KKI04DSiRAAHUC7/64c0CBA+oBgYjoz3CA
-AHhkV4BAoRiAAaElxoDmyiBhAcohwQ/KI4EPAACXA8oiwQfk84DgyiBhAcohwQ/KI4EPAACYA8oi
-wQfY8zELXgIEI4MPAQAAwM9wgAAQRS67aGCC4MogqgBhuM9zgADccBZ7UaMBgRKjRPA5Cx4CoObK
-JYITyiUhEAQjgA8BAADAz3eAAMBEzmcEI4MPBgAAADG7Lrh+Zs9zgAAQRQhjwngT8FMjwAAdeM91
-gAAsSA1lBCODDwEAAMDPcIAAEEUuu2hgYbgWfc9wgABgcLZ4QKAhgR0NNBYhoAXYCiHAD+tyiiOO
-DYokgw99Ae/+uHUI3LsBIAChwOHF4cYA2kokAHbPc4AAYHCoIMACFiCBAMCBFiONAMClIYEB4iGl
-wBABAMAbQADEEAEAxBtAAMgQAQDIG0AAzBAAAI8Gr//MGwAA4HjxwAIJIAC4cQK5z3KAAChSNHkw
-IkQAosENDF4Dz3KAAECQBfDPcoAAWI1AIgMGQCIBB1EkQILKIGIByiLCB8ojgg8AAOAD3ADi/soh
-wg/PdoAA8FRALY0BpmZAxiDFDQ4eEsK9qmEO8BEOXhJEJQEcRLkqY4m6BvBTJcEQPHkqYs9xgADw
-UxYhQQEiiQ65RXkgoN0AIACiwB14z3GgAGAdErEUkeB+4HjxwOHFCHUocwnwqXD5/wCrSLgBqwLl
-sH0C42G6jCL/j/X1rQAAAOB4/ByItvwcSLb8HAi2/BzItfwciLX8HEi1/BwItfwcyLT8HIi0/BxI
-tPwcCLT8HMiz/ByIs/wcSLPgfuB4BNw43TXw4HgE3DTdM/DgeATcMN0x8OB4BNws3S/w4HgE3Cjd
-LfDgeATcJN0r8OB4BNwg3Snw4HgE3BzdJ/DgeATcGN0l8OB4BNwU3SPw4HgE3BDdIfDgeATcDN0f
-8OB4BNwI3Rzw4HgE3ATdGfA0FBowMBQZMCwUGDAoFBcwJBQWMCAUFTAcFBQwGBQTMBQUEjAQFBEw
-DBQQMALHAcawJE0zsCQfM+B+8cDhxQHZz3CAACggIKAA3RJtFHjHcIAAvCAggAkJUQABgEB4QCVN
-kPTztgvv/gTYkQfP//HA4cUIdc9wgAAoIKCgigvv/gTYIQ2QEADdEm0UeMdwgAC8ICCACwlRAAKA
-QHhAJU2Q9fNZB8//8cDeDu//CHEQ2ADdSiSAc892gAAoZalzqCDABB8JzgDPcoAAOCB2euGCFSbC
-E0CKUHXKIMsDyiWLEAHjb3sJB8//4HjhxeHGENkA3s91gAAoZZ9xyXOoIMADFwiOAxUlghNAilBz
-yiGLA8ojiwAB5s9+KHDBxuB/wcXgePHAXg7P/0ogACAO3wp2z3CAADggAIAlCI4Dz3WAADgg1n0C
-hQroQHgFIAAELyAHIADYAqUQ2AGlYb8B5tMPdZDPfgDZz3CAADggIKBMIACgyiBMAMogaQBpBs//
-KQJgBgfY4HjxwOHFz3GAACggAqHPdaAArC89hbW5trk9pUQgwIID2hW6BPJcpRLw/g9ABhEIUQAA
-2Ja4HKUdhZW4B/AA2JW4HKUdhZa4HaUtBs//8cCyDc//CHUoduv/4b3PdYAArAQA3wn0z3GAAPBY
-BokD6AeJkeiR/89wAADgMQClz3AAACwzlg9gBgGlz3CAACgg7agQ8M9wAADkMQClz3AAAKwyAaXp
-cJH/geZ4CWEGyiBhAbUFz/8A2c9wgAB0JCCgAdjG8eB48cDPcIAAKCACgOK4UAliBsogYgLRwOB+
-z3KAACggIoJDCZ4Az3GAANggIIGO6EEpgADAuA2qAtjPcYAAdCQCoQPYA6EA2A7wQSnAAMC4DaoE
-2M9xgAB0JAKhBdgDoQbYBKHgfvHA2gzP/892gAAoIAKGIwifAAohwA/rcs9woACsL3AQBAAF2Ioj
-xQvRBK/+uHO+D0AGz3WAAKwEPg9gBkAlABUA2Za5z3CgAKwvPKAB2AyuFo0J6AIOQAaI4MwgooCc
-CEIG5QTP/+B48cDPcIAAKCACgCMInwAKIcAP63LPcKAArC9wEAQABdiKI8YIbQSv/rhzaghgBgXY
-ANmVuc9woACsLzyghvHgePHAQg5ABs9wgAAoZQCIz3GAAKwEz3KAACggDakMisC4DqkA2A+pAaIy
-DmAGQCEAAxYOQAYI2H//ANmbuc9woADQGzGgYvHgePHA4cXPcIAAKCACgCUIngAA3alwrP+pcC7/
-6P+KIJcHng9v/4ohRwjPcIAAdCSgoC0Ez//xwM9xgAAoICKB4rnMIGKAxA8iBsogogE68eB48cDP
-cYAAKCAigeK5zCBigKgPIgbKIGIBLPHgePHA4cUKJQCQyiBiAcohwg/KIsIHyiOCDwAAbQPKJEID
-fAOi/solwgAB2xJtFHjHcIAAvCBgoCGguQPv/0Kg4HjxwOHFCiUAkMogYgHKIcIPyiLCB8ojgg8A
-AH4DyiRCAzwDov7KJcIAANoSbRR4ACCBD4AAvCB9A+//QKHxwAILz//PcYAAKGUVIQMAz3KAACgg
-wYKgi9V5wIkTDkITIYlhiwsJwgAggofpAaLyDiAGA9gB2ALwANgxA8//8cC+Cs//z3WAACggBBUF
-EBkNFAQF2AohwA/rcoojCgzBAq/+iiSDD89wgACsIDIgQAFZCFMAENgBpc93gAAoZc9wgAA4IACA
-QReOEIDgyiAhARry4/4BpZDgyiBhAcohwQ/KIsEHyiOBDwAAywLKJMEAcAKh/solIQAVfwGPDQiD
-AwPYXg4ABp0Cz//gfwHY8cDhxbhwmHKO4MogagHKIcoPyiLKB8ojig8AAAYDyiRKATACqv7KJcoA
-TCQAhMogagHKIcoPyiLKB8ojig8AAAcDEAKq/solygDPc4AAOCAWI0ABBBCGAA8MgQHPcIAAKCAA
-gDDwNQ4QBEwmAITKIGoByiHKD8oiygfKI4oPAAAXA9ABqv7KJIoBACaCD4AArCCgimG9oKoEGAAB
-ACSCD4AArCCgiiKgAIMB5aCqDyBAAQCjiHCf/89xgAAoICCBA7gleOEBz//xwLhwz3GAADggFiEC
-AAQShACO4MogagHKIcoPyiLKB8ojig8AAE0DyiRKAVwBqv7KJcoAANgCohDYAaIA2g8iQgEAgUZ4
-AKEzDBAETCQAhMogagHKIsoHyiOKDwAAWQMoAar+yiHKDwAkgQ+AAKwgAIlhuACpiHCM/8kDz//g
-eOB+4HjxwNYIz/+vwQDdGnDPcaAAZC7wIRIAGRIRNhkaGDD12AW4Xg9v/wpxGcjPdqAA1AcaHhiQ
-DxYPlhkWAJYr6MDlRPcZFg2W/fHMcACAzHAAEAUAABxAMSDAeQgRB4HARgmv/w7ZI8BhuGPADMAN
-6M9xnwC4/xqhLcAboQPAHqHPcABsBAAZoQ8e2JNWCAAGDxYPls9woADAL1EQAYYLIYCEzPXPcAAA
-ZB7qC4//jQgOhBkWAJbC6BkaWDT12AW4wg5v/ypxGcgaHhiQaQDv/6/ABdgKIcAP63KKIxoAKQCv
-/ookCADxwG4Ij//1B0/+4HgIccxwAJAAscxwQIhTIkAAAaFBKsAAUiAAAMC4CKlBKoAAwLgJqUEq
-AAHAuBCpzHAAiM9woADIHAiA4H8DoeB48cABgBHoNQhQADUIkAAF2AohwA/rcoojhABKJAAAuQdv
-/golAAEB2c9woADIHCmgig9v/xTYCfAC2fjxAdnPcKAAyBwpoNHA4H7gePHAEugnCFAAKQiQAAXY
-CiHAD+tyiiNFBkokAABtB2/+CiUAASnYErgH8BXYE7gF8E96K9gSuDV4QKDh8fHA4cUIdS4Pb/8U
-2COFz3CgAMgcKKCNB4//4HjxwA4Pj/+lwYt36XDE/+lw0/8iwBbozHDAkCTAA+jMcACQAN0J8Mxy
-AcBAgslx3/8B5tB+AeUAFAEx7w1EkBPwAN0M8MxwIJAD6sxwAJDMckCCAcDV/wHlABQBMekNZJAk
-wiTAhegLCR4AzHAAkM9wgACgBACABSCAD4AOCACduJ+47HEAoQHI7HEAoelw1v/KDW//AdgA2c9w
-oABEHTWg1Qav/6XA4HjxwAGAE+gjCFAAIwiQAAXYCiHAD+tyiiPECUokAABtBm/+CiUAAQLYAvAB
-2M9xoADIHAmhOg5v/xTYYfHxwBLoLQhQAC8IkAAF2AohwA/rcoojRgFKJAAAMQZv/golAAEp2BK4
-8CBAAACiSfEV2BO4+vEr2BK4+PHxwO4Nj/+lwYt36XB8/+lw3v8AFAAxArgL4AQggA8AAPz/BSCB
-D4AOAADPcIAAoAQAgCV4nbifuOxxAKEByOxxAKEAFAEx7HAgsAkUgDAI6M9wpgCcPxmA+QhRgCLA
-FujMcMCQJMAE6MxwAJAA3Qnw7HIBwMlx1P8B5tB+AeUAFAEx8Q1EkBLwAN0L8MxwIJAD6sxwAJDs
-cgHAy/8B5QAUATHtDWSQJMIkwIboCQkeAMxwAJDpcIT/kg1v/wHYANnPcKAARB01oFzx4HjxwCIN
-r/8B2cxwQIjMcAAQhgDMcAAQhADMcAAQhQBEJr6DAd3AeUQlvoPAfQojAIHKI2IAAeOA4cohggDK
-ISEAgOXKIAIByiAhABlhQNwEJgCDL3k5cCD0EmkM4AQggA8AAPz/z3WAAKAEoIUFIIAPgA4AAKV4
-nbifuOx1AKUByOx1AKXsdQAdghHscCCoANnscCCw6Qt0AADYeXD4c4HgyiNBAcoiAQHKI4IBRCOA
-gwHZwHmC4EoiQBDCIoISUiMOAMC+RCMADJDgAdvAe6DgAdjAeAUgyADMcKCAYbpPehbpIwp0AADZ
-4IWA5gTlBPTMcKCACQkREOxw4KAB4e0JhIAghQkJERDscCCgBiI+khLyHwp0AADYzHEggYDmIKUE
-5QT0zHGggQHg8QiEgMxwAIAApQsggJIc8ikKdAAA2MxxIIHghQTr53kD8OV5IKWA5gTlA/TMcaCB
-AeDlCISAzHAAgCCFBOsneAPwJXgApUInQwAnC3WAQCNAEA0JERDqC2//AdgH8APZz3CgABQEJaAA
-2c9woABEHTWg7QOP//EDT//xwIILr/8A2UokAHKoIEACzHBAgBJpQ3AB4RoYmADMcKCAzHDAgDoP
-T//PcKAAFASsoM9woADUC9ygtgtP/7EDj//geOHF4cYkiM9ygAC4RKaIwrkuYgDZDyGBA89zgABo
-ZXYTAgaG7SZ6dhuYAB3wRXl2G1gAJYgVI40DeR1YECaIRYhZYXwdWBAggIwhEIBE94ohEAAgoCO5
-dxtYAACAKrh4GxgAANnPcKAA8DYsoHkTAQYloHwTAQYmoHoTAQYnoH0TAQYooHsTAQYpoH4TAQYq
-oHcTAQYroHgTAQYtoHYTAQYkoMHG4H/BxfHA4cWiwYt1qXBKC2//AtmpcNL/7gpP//ECr/+iwOB4
-8cCI6M9wgABAZ/YPL/8k2fcCz//xwF4Kr/+YcJDgyiBmAcohxg/KIsYHyiOGDwAAVgNkAmb+yiUm
-BADaSiQAdM92gADIBKggwA5ALIMBVXtALI0Ax3OAAPBUIIPPcIAAKFK0fd25oGAgo/G40SEiggjy
-oIvPd4AAwEStZxUNkxDPdYAA8FMWJQ0RoI0JDR4QnrkT8C24wLgVJgAQA4BSIU0CCyBAgwryz3CA
-AOgOCIDhCJ6Hn7kgowHiIQKP/+B48cCiCY//zHAAEBEBzHAAkEApgCDPcYAAKFIUeAFhosHtuQHY
-yiAhAHpwTCEApMogZgHKIcYPyiOGDwAAEQWcASYAyiLGB+m5BdjKIcIPyiOCDwAAEgXKIsIHwPTP
-cIAA8FMWIEAEGnDPdQAA0CRgfQLZz3CAAHBUFiBABGB9AtlAKYAhWnDHcIAA8FRgfRDZi3BgfQHZ
-ACKAL4AA8FQyD2AJENkBEIAgkODKIGoByiHKD8oiygfKI4oPAAA1BcokagAUAWr+yiVKBEokAHQA
-2agggQkVIkAgz3KAAPBUMCIFAAQlg48AAAABBBxAMUTyIcbPcIAAwEQEJY0PBgAAAEEtTxTKYKDm
-WGfRJeGCDfID6xsKkwAEJYQPAAAAJA8MgQ8AAAAkANsk8P8P1ZAND5EQe+vzCpGAA+vM5jX2BesH
-CpIA8e3Pc4AA8Fhmk9sLgoAfDd4Cz3OAANiMhCsLKjAjQg4EIr6PAAYAAN3zAdtvewTwAdgIcwQl
-gg8BAADALrrPdYAANEhKZVBwANjKIG4AgOPMICKAEfIB4QIQgCDPcYAAEEUIYT0IUAAF2AohwA/r
-coojFQMQ8M9zgADYjIQrCyowI0QOCiHAD+tyBdgFAG/+iiNVAkokQAD5By/+SiUAAAMQgCAIYYLg
-BdjKIcIPyiOCDwAATgXKIsIH7vUqcFX/z3CAAHBUFiBABECQz3EAABgVCSJBAAoIb/8gsNkHb/+i
-wOB48cDPcIAAyAQSCm//AdnuDw//DwDP/+B44cUyaDR5z3KAAChSIWLPcoAA2IwtucC5hCkLCjAi
-QQ7guc9xgABIfEGBxSKCDwAACgLFImEDSiQAdADbqCCAAjZodXkAIY0PgADwVEClAeMO2c9zgADw
-UxYjAgAgqgDdoaoB2SKqA9kjqkokAHGpcqgggAF5YhZ5pKkB4uB/wcX1Bo//8QaP//HAzHAAgM9y
-gADIIACiHwhRAMxwAIAMuAQggA8BAADwAaLMcACAAqIS8ILgzHAN9CCAhCE/DyOizHAAgM9woADQ
-Gz6gBPAAgMxwAIADzM9xgACgBNdwAAAAQCCBSvYFIYEPgA4IAJ25n7nscCCgC/BPIcAAmbiauJu4
-nbifuOxxAKEByOxxAKGuDS//AdgA2c9woABEHTWg5waP//HA4cXMcCCAocFAwQEUgDANCB4Az3KA
-AKRvBfDPcoAAvG8gomCKAdkH8MxwAIAVIkwAAeEApH148whFgBELHgDMcACQFSJMAAHhAKQTCbUB
-AN0VIkwAAeH7CbSBoKTPcIAAoAQAgAUggA+ADggAnbifuOxxAKEByOxxAKEaDi//AorPcKAARB21
-oD0Gb/+hwPHA4cXMcGCAz3GAAAAAYKHMcECAAN1BocxwAIACocxwAIADoaShJQveB/+6QNjPIOIH
-yiCBDwAA0ADPIOEHz3GfALj/HaEG8M9wnwC4/72gz3CAAKAEAIAFIIAPgA4IAJ24n7jscQChAcjs
-cQChngwv/wHYz3CgAEQdtaC5BU//8cDhxc91gADIBARthg8v/wjZAYXPcaAAuB4CoQKFA6GODQ//
-kQVP//HAGg1P/6HBAN1AxcxwIIDMcACAz3aAAKAEJwlQAACGBSCAD4AODACduJ+47HEAoQHI7HEA
-oexwoKCpcBfwFgqgCYtwAIYB2QUggA+ADhAAnbifuOxyAKIByOxyAKLscCCgAMHscCCgAdj6Cw//
-z3CgAEQdtaARBW//ocDxwJIMT/8KJQCQOnE88i8oQQNOII4HGRqYM0AmEBT12AW4Fgsv/8lxGcjP
-caAAFAQKoc9xoABkLvAhAQDPcKAAFAQJgADfz3KgAMAvDycPFI7oURIAhgsgQIAK9M9wAACwHuoP
-D/8LIMCDBfTSDKAFKnCeCiACyXAA2A8ggAMGJQ2Qx/UH2MoNYAQZGhgwGcjPcaAAFAQKoVkET//x
-wOHFARINNsxwQJDMcCCQUyJAAYK51P9WDC//ARpYM1UET//xwM4Lb/+A2c91oADAL6UVEpYUFRGW
-AN6lHZiTz3KgAGQuFB2Yky8rQQBOI4AH8CIDAGV+ANsPIwMABiHBgPX1TybAFqQdGJCkFQCW/Qje
-h6MVAJYEIIAPAAAAD4wgEID48/PYBbiA2Q4KL/+fufPYGg8v/wW4+wjfhxkSEDYH2RkaWDDPd6AA
-FAQqp/XY6gkv/wW4FfBBKIGACfIvJElw4HioIEABzHEggVMgQIAJ8i8kCXDgeKggQAHMcACICYfr
-6APYBacZGhg0KB8AFPXYBbimCS//CnES7i8ogQNOIIEHEmm6YBYSAoa4YCoYmIAA2A8gQAAGJg6Q
-8fWA2c9woADQGzCgpR2YlBQdWJQdA0//4HjxwLoKb/8X2bfBAd8A3c92gADgBHILL/+LcBLADBSQ
-MO24yidBE8olgRMF8s91gADkBB8IFCQF2AohwA/rcoojDgtKJEAApQIv/golAAQgwEAojiDUfsd2
-gAAoUuC4AIaEIAgARvSA4AXYyiHBD8ojgQ8AALUDyiLBB+XzAcACwQpyigigA2ZuMOj/2AeuSiQA
-cQDZqCCAAyhwKWUAIIIPgACoURYiAgQkqgllIKohaA0UgDBFIMAADRwCMIog/w9TwACGqbgApgEU
-gDDPcYAAfAQIrgIUgDD1eQmuAIEPIAAEAKEB3wPwAt8KcJr+BvCA4AHfyiciEoHn/AECABAUAjFg
-hkhwhCAMAEIoEgITwBLBBnskeGV4z3OAAAhTAKYA2RYjAwQgoyGjDQhfBQDZi7khow0IngUhg4Uh
-AQ4ho+u6iiHDLwT0HhSRMA0UgTDguaTydwrfACsI3gL/2AeuSiQAcQDaqCCAA0hlACKDD4AAqFEW
-IwMEBKtIZQHiAKta8B8KEiEF2AohwA/rcoojUARKJEAAVQEv/golgATuugeOMiWCFAAigy+AAKhR
-FiMDBAnyRKsE2gAqggRFeAeuPfBAqw8ggARk8CUJEiSMIcOvHPIF2AohwA/rcooj0AlKJEAABQEv
-/golQATWC6AAi3AQFAIxDwqeAwIUgDAJrgTwARSAMAiuAIY7CN4CDRSBMADaSiQAcUeuqCCAAwAi
-gA+AAKhRFiAABAQYQgQAGEIEAeIBFIAwCK4CFIAwCa4s8EwiAKHKIGoByiHKD8ojig8AAEcEPgfq
-/8oiygcNFIEw7roHjgAigi+AAKhRFiICBAryBBpCBATaACqCBEZ4B67d8QAaQgQA2g8iggRGeAeu
-ARSAMAiuCwleAFAUADECthEJHgEjwKIIoANVFIEwDRSAMD0I3gA1wVYUAjEKcAYJoAMSw7hwjCAC
-gMogYQHKIcEPyiLBB8ojgQ8AAJIECAAh/sokYQBRJcCByiciEQpwXv3PcIAAoAQAgAUggA+ADggA
-nbifuOxxAKEByOxxAKECD+/+6XAA2c9woABEHTWg9Qcv/7fA8cCaDy//AdmkwUogQCBSCC//gcAA
-3jPwAd3Pc4AASAVAgzJ/BCeAkACjB/SA4mAKogfKICIIIMDqD2ADENkAwQDYiiMIAFJpVHrHcoAA
-KFICsmCiz3KAAHwEtXpgguR7YKLPcoAACFM2egCiAaLPcoAA6FI0egCyAeYhwD8OBRCCwN4P7/4C
-2QLAi3IKDGADA8EEIAAELyAHgBpw7vMAwADZz3KAAChSDyEBAAK4FHgAYmkIX4MA3bHxz3CAAKAE
-AIAFIIAPgA4IAJ24n7jscQChAcjscQChDg/v/gpwIQcv/6TA8cBKC0ADJg/P/kcHT//gePHA4cXP
-cYAA2IzPcoAAfATwIg0AhCgLCjAhQQ4EIYIPgAAAAEQhAwIvuga7BCGBDwABAABFe0EpQgMsuWV6
-JXrPcYAAyAQVeQOBGwoAAEOhCe0vKUEDTiGABxAlDRD8/PntwQYP/+B44cVSIIAAz3GgAHwdBKkC
-3RHw4HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HhhvYwl/5/t9RUHj//geM9woAB8HQSI
-4H7gePHA5g0P/xpwenE6clpzANjp/wTY6P8rCFQgCnYA30IgQCDieAErDSDAvU8lgBDi/0UlgBHg
-/2G+5w51kAHnBNjd/wDZNQl0IAAaQCAqdih1BtjZ/2G+6P9TIAIAABIBIEIhQCCieBh6RXkAGkAg
-BNjR/+EOdZAB5QDYz//BBQ//8cChwYtzCNgF2Qhy3f8gwKHA0cDgfuB48cBGDQ//OnAacQoigKB6
-cwolACHMIyGgEfJMIgCgzCMioA30BdgKIcAP63KKI94KiiSDD00F7/24cwDYmnC4/wTYt/8pCVQg
-KnWKd0IhQCDieAEoDiDAvk8mgBCw/0UmgBGv/2G96Q11kAHnAN0T8EEtwBAyIg4gUyWAEE4gwQE5
-fsC+TyaAEKX/RSaAEaT/AeVAK8Ag3Q0EkADYoP85DRAgNQyFLwAAiBPQ/yUIHgAg3s91oADIH9Cl
-ZNhDHRgQANi2DO/+jbjRpYAkASnr8QDYBPCKIP8PvQQP/wjYBtkA2khzmHKO8fHAdgwP/wh1KHdI
-dvr/TyVBFBjY6XLJc0okQAC//8EED//gePHAUgwP/6nBz3CgACwg8IAaC+/9AN7PcYAAuAwQgQHg
-EKGLcIIO7/4E2RjwgcWpcHYO7/4g2QAUADGpcSDa6P8FfgAUADEg4AAcBDACFAAxQiAACAIcBDAC
-FAEx0QkTiAzpgcVCDu/+qXAAFAAxqXECFAIx2v8Ffs9woAAsIBCAgObieMomARAByJYIL//JcSkE
-L/+pwOB48cCiwYtwCg7v/gjZAMDPcYAAbAQAoQjoBhQAMQOxBBQAMQKxBgzP/qLA0cDgfuB48cCk
-wYtw2g3v/hDZz3CAAKAEAIAFIIAPgA4IAJ24n7jscQChAcjscQChAMDguAPABvQCwZ4I4AMA2gXw
-xgmgBAHBlgrP/gDZz3CgAEQdNaCkwNHA4H7gePHAocEQeE8gAQSRuYtzGNgQ2kv/uQXv/wAUADEw
-2c9woABQDCKgwdnPcKAABCUgoOB+4HjxwAILD//PcAAARBzPdQAAwCdgfQDecdhgfQa4z3AAAEwc
-QH3PcAAAyBtAfc9wAADMG0B9z3AAAAgcQH3PcAAABBxAfc9woADUCziAHIDPcZ8AuP9YGQAICN0A
-JoAfAADAG04O7/4E5mG98w1VkADeBd0AJoAfAAAAHDYO7/4E5mG98w1VkOkCD//geM9xoADQDxkR
-AIYcEQCGz3CgAMgfFRAChh6Az3CgAMQnGRAChpwRAgAVEAKGLRAChi4QAoYvEAKGMBAChoARAgCE
-EQIAoRAChpARAgCiEACGlBEAAJgRAACMEQAAiBEAABiBz3GfALj/WBkACM9xnwC4/1gZQAjPcKAA
-0A87gDmAz3GmANQEFxAAhiwRAIAwEQCAOBEAgM9xoACIJACBAYECgQOBBIEFgQaBB4Fk8eB48cDh
-xc91gABkZ6lwdgrv/gPZAYXPcaAAgCUMoQKFDaEAjeC4ANiOuAPyD6EC8BChAgrP/gUCD//xwIYJ
-D//PdoAA3AQAhs91gAAUaeSQ6XFCDOAChCEDDBpwDQjeAB+FgLgfpSCGAJE4YACmVBWAEJLo6XAC
-DaAFhCADDAnoGQgeIM9wgADoDgmADQhfAB+FgrgfpY0BD//xwCoJD/+iwc9wgAAUaT6ABCGBD///
-D9gEJYBfAADwJyV4z3WAABRp/gygBR6lgOCmAiEAmB0AEM9xgAAAAACBNQjeAgGB67hA2M8g4gfK
-IIEPAADQAM8g4QfPcp8AuP8dogSBAeDTuAShBSCAD9D+AAAWog8N3lHPcIAAWA80iAbwA4WaDyAD
-JIUIcR6FRCACDJQdQhANChEIgNmUHUIQQCkCBikJ3wGCujUKnlNEIirTC/TPcIAAFGkBgAsIHgDe
-DYAFHPDeDYAFGvCzuB6lUSKA08Uigg8AAAAHz3GAAKBpKIlFIgAGhCECAFIhwQFFuSV4z3GgAIgk
-EKGKIdYAz3CgAIAlL6DPcaAAxCdBEQCGUSLA088g4gLQIOECQRkYgM91gAAUaQCVBCCADwAAzIAX
-CIEPAADIgAuFCwgeAJIOwAJN8B6FVBWCEIEI3gRN2Am4GhkYgAbqAdrPcKAA1AtSoATYEBkYgAbw
-vgyv/oogRQIJCJ9E9Qkexs91gAAUac92oADEJy4WAZYWhSJ4ZLgQeIYdBBDPcYAA6A7aCyAGL5Ea
-FgCWBCCAD////wAaHhiQERYAlicI3gIA2Iu4Ex4YkBrYGR4YkAvwBuoB2s9woADUC1KgBNgQGRiA
-HoXmuIbyFJXluIL0z3CgACwgD4CA4Hz0ENhBwM9wgAB4igCADwheAFElQNMB2AL0ANhAwAuFz3GA
-ALSJBCCAD8AAAABigTa4gcJAIQ4LWQsOAOGVZ4Fwv/QmABAII8MDSQjDAJQVgBBBCN8Bz3OgACwg
-D4Oa6GaDHJUTCMUAz3CAAGBxYoAFgSELAQCLcAPoAttgoAOBg7gDoQTqAIKmuACiAcIO8AOBAcIV
-CN4AAN6evs9zoAD8RMGjo7gDoQuFBKEDhQWhVBWAEAboAMCC4M8iYgED9Ie6QcJVJUAaz3OAAPxD
-2gigAQDBH4WUuB+lHoWQuB6lDPDPcYAAfFkNgQHgDaEQ2c9woACQIz2gpQbv/qLA4HjgfuB4z3Ck
-AJBBTYDPcYAAlHJCsRqAA7EEIIAP/wAAADC4BLHPcIAAlHIA2hEIXkbPcYAAFGkxgQsJngJCsEOw
-RLDgf1Ww4HjxwO4Nz/7PcIAAFGkOkM91gACUcgC1z3CmAOj/C4DPcYAAFGkDpc9wpAC0RQwQDoYN
-EACGRBGDAC8lhwP/2RC5aHSEJAOcBCZEEAT0XQsfAM9xpAC0RTIRAYZTIYIAIbX/2VpiCLlUegQm
-TxBPekAqAQI/Z/hxACWBAAUhxgNAKg8EQCoBBgQmjh8A/wAAgHfZYQUnjxEFIc4D/9kIuQR5WGDg
-cSV4RbXPeQQmjh//AAAAD3govgS1xXnPcKQAtEUjtQQQAIYCtc9wgAAUaRGAGwgeAs9wgADARGhg
-DwiSAM9wpgDo/w2AA/AA2AalBaUA2kokgHAG2I24qCBAAynZErnwIQMAQCUBG1V5AeBgoQHiRQXP
-/uB48cDKDO/+ANnPcqAAyB9AEgAGz3CgANAPz3OgAMQnGRAAhk8TDobPcIAAtIm4gqigD8zPdYAA
-FGkLDgAQH4UNCJ4ASiFAIAXwDxqcMzpxUhMShhUTDoYb2BYbGIANDt8QUSJAoADYBvQdhYS4HaUB
-2BpwDQ4eEVQVgBAE6ADfBvAdhQHfhbgdpUwgAKDMJyGQUvLPc58AuP9YGwAIz3CgANAPEIDPcIAA
-PA8PiBajz3CgAPxEJaAehbC4HqWoFQAQZOAeohDYDqIB2BUaGIAiDK/+CdgVCF9Hz3GAALgMC4EB
-4MYO4AELoeoJwAHPdYAA+FkI7wWFAeCqCuABBaWo8M93gAAUaX0IECAdh4S4HacRDt4QIoUB4SKl
-iiCFCQfwIYWKIMUIAeEhpYYPT/5WDsABKPBCEwCGz3aAAPhZBCC+jwDAAAAc8gG1HoUpCN4EJg0A
-BgCVhCADD4wgAoAQ9IYLAAaM6APZz3CgANAPEhhYgAbwAJVaDCAHNJWpd8l1VBeAEBfoz3KgAPwl
-NIIGhQAgQIAGpROCJ4U4YAelHocY8jEI3gEB2c9wgABsBSCgEPARCh4gA4UB4AOlHofz8c9woADU
-CwPZMaAEhQHgBKUehxkIHgSVF4AQpBcBEOlymgxgAgHbBPAqD4ACH4cRCB4Az3CAANRvyg8ABM91
-gABEdBmFBegODUADANgZpZYJwAHPcIAA6A4IgBsI3gIXCREgMv/PcIAAlHI02SIJr/7E2h6H8Li0
-DUIDz3CAALSJAICA4MgI4gvKIGIA2QLP/vHAfgrP/s9xgADAac9wgADcBCCgANnPcIAAkGkpoM9w
-gAC0iSSgJaDPcAAA/z/PcaAADCQBoRvYBKHPdoAAFGmiwS0IHkQdhoS4HabPcIAAiAQggAWBAeAF
-oYoghQkCDm/+JIEeCMABVQIAALGGRBaPEAQljR8AAAAIVBaAELt9wr8A2SPoz3CgAMQn4Nq/GJiA
-lNqVHoIQz3KAAEQFBNtgogLaPBiAgM9wgABgcSGgz3CAAHSN6GAFIFADz3CAAFyQ6GAFIFEDDfDP
-cKAAxCdA2b8YWIDU2JUeAhARhjpwGnCSD8ABgODq8s9woADEJwHZEBhYgM9wgAB8jehgz3GAABBw
-pXgbpmwWgBDDuBx49CEAAGQeABReHgQQz3CAAGSQ6GCleBymcBaAEMO4HHj0IQAAaB5AFM9xgAAw
-cGAeBBBkFoAQw7gcePQhAgCKHoQQz3KAAEBw9CIAAI4eBBBoFoAQw7gcePQhAQD0IgAAjB5EEJAe
-BBAQzEQgAIqACAECz3CAAOgOCIDruMgKwv8b8M9ygABscQCCY4IjomZ4AKIEggwWAZASeCV4DB4A
-kADYj7gTHhiQiiC/DwgeAJAa2BkeGJDuC8ABz3WAABRpHYXtCN8Bz3agAMQnERYQlgDZswjfozMI
-XyJdCJ8jrQgfINMI3iAI2BMeGJCaDcABuQgRAALYPB4AkCOFz3CAAGBxIaDZ8br9oBUAEJEWAZYB
-4MO5oB0AEJ8IQYCKIggAEx6YkJEWAJbDuI8JAIASHpiQw/E6FgCWOQieAM9xgABscQCBLQgfAIC4
-AdqKI/8AAKFDoWShOhYAlkQgAA4DuAGhDBYAkGR4DB4AkAgegJAA2I64Ex4YkD8NHtAE2c9woACQ
-Iz2gmfGx/QLYPB4AkCOFz3CAAGBxIaAehRsI3oQTHhiUv/4E8BMeGJQhAO/+osBUFYAQiehCFgCW
-BCC+jwDAAAAD9CUIHiK/FgCWpbi/HhiQiiAEABMeGJDuDYALVBWAEIDgafUdCJ8gBdgKIcAP63KK
-I8wJiiSDD50Hb/0KJQAEz3CAALSJKoDPcKAABEQmoMbx4Hjhxc91gACUcgelKKV0tUmlAdgVteB/
-wcVKJEBzANmoIIACANrPcIAAlHI1eECgAeHgfuB48cAqD4/+AN3PcIAAAACgoM9yoADIOz2CoqCh
-oKOghOkA2QvwJID9CYGPZYchQ4ohhAAgoCGgpKAN6dDZn7nPcJ8AuP89oILYFKLPcACAERQOon/Y
-z3egAMgfGR8YkAHYCHEIcuYNb/0Ic89wgAAUAB0IgA+AABQABdgKIcAP63Jd24okgw/JBm/9uHPP
-dqAA0A+1po4JoAYD3YYLj/5A2c9wnwC4/zKgYgqP/oDZz3CgABQELKAdHliQ3g4ABlYKgAUyDSAG
-ANgSCYAIz3agAKwvGIaauBimEfDgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeGG9jCX/
-n+31GIazuLq4GKYH2EgfGJC+CE/+Fg1ACJYMQAgWCQAJGobAuIHgAdjAeC8mB/AG8qoKoAgB3Qbw
-A90Yhpq4GKYqCE/+dgrAAqIOAAPPcIAA4ATOCCAABNkKDsAClghAAxYNAAjyDcAGfgrACuILgAs6
-DYAL/g6P/Yogxg3PcYAA6A4NsQPYbRkCABvZz3CAAIB7Fg8gAjCofgqP/8ILgAtCCM/+GobAuIHg
-AdjAeC8mB/DUCwIJLgxv/qlw1QWP/vHAzHAAEAUATCUAgcogbQHKIc0PyiLNB8ojbQpwBW39yiRt
-ABkNVACocADazHEggQHi/QqUgWG48whVgJ4NT/7RwOB+ANje8eB+4HjMcACAzHAAgIUFT/7gfuB4
-4H7geOB+4HjgfuB44H7geOB/ANjxwPoMr/4B2aHBsg1v/otwAMDPd4AA2CAPeSCnQNlAwQ0IHwB6
-Ca/+KHAr8M9wgAAoZR4PT/4A28OHSiQAdKWHqCBABwDYz3GAAChldXkjiQ8gwADhucoiAgDKIiEA
-RX7gucoiAgDKIiEARX3iucogIQAmhwHjJXgGp6Wnw6cAhye4wLgbeALgwg6v/gHZ3gxP/tEEr/6h
-wPHA4cWiwYHgAdjAeEDAz3KAANggZIKhgiKCi+gFgmR9pHgGe0HAZKIFeSKiCfADgiR9pHgGeQV7
-QcAiomSigODKIAIHyiKCDwAAWwCMCmL+yiEiAoUEr/6iwOB48cAKDI/+z3CAANggAIChwee4yiBh
-AcohwQ/KIsEHyiOBDwAAnwDKJCEAAARh/colwQDPdYAAtASpcAHeigxv/slxz3CAACggAICB4Mog
-gQPKICIAQMCLcP4Pb/4E2QCN4LgBjQT0fglABQTw7glABQUEr/6hwOB48cCOC4/+CHfPcoAA9CAU
-iiCKZIoQuAUhAYAYihC4BSDEAByKaIoQuAUgxQAgEoAAbIoQuAUgxgAi8i8rQQBOI4AHANsPIwMA
-AIdyfQQjDgGkeMV4AKcagqR4xXgaohmCBCOOAQQjQwGkeMV4GaIYgqR4BCFBg2V4GKLh9XkDj/7x
-wAoLj/4Id7SJAIkQvQUlDZAEiTiJELkFIRAAFfIvKEEDTiCCB/AngRAA3g8mjhAI6QQmABRCIACA
-YHnKIGIABiWNk+31KQOP/uB48cChwQHYQMDPcIAA9CAKgOC4yiACB8oigg8AAGcAHAli/sohIgGh
-wNHA4H6hwfHAkgqP/qPBCHZHwM91gAD0IBuFOoX8hSR4BH8HJ4+TQcdC8gQUATEZ6RwUADELIECA
-DPLPcIAArARggM9xAACwWwzYYHsD2gnwh+jPcIAAsAQggGB5DNgGFAExGekeFAAxCyBAgAzyz3CA
-AKwEYIDPcQAAsFsN2GB7BNoJ8Ifoz3CAALAEIIBgeQ3YCyeAkwbygg5v/QXYB/CF7o4Ob/0F2Mz/
-3KUI3FcCr/6jwPHA4cWjwQHYQMDPdYAA9CCpcCoMb/5c2TqFG4UkeDyFBHmBwEHBjf9VJUAfqXGr
-/89wgABsIkAlARuo/4tw+g1v/gTZAcDD/wCFhugFhYDg1A7B/wkCr/6jwOB48cCOCY/+osHPcoAA
-9CAbgjqCvIIkeAQlDZBVIkMHH/IvKEEDTiCOB/AjgAPXooDgyiBhAcohwQ/KIsEHyiOBDwAAMQLK
-JEEDZAFh/colgQNAeADYDyCAAwZ9qXCm/50Br/6iwPHAKgmP/qfBKHZIdUDAANhhwAHYBRwCMAYc
-AjCLcIYO4AiCwQXBqXBgfgbCBMCN6AXYCiHAD+tyiiOEBookww8JAW/9uHNAeE0Br/6nwOB48cDS
-CK/+A+MacCh1SHdodoQmPx84ZpIOL/5m2RUIUQAKcO4Mb/6pcelw/g4v/slxBQGP/vHApgiv/gDa
-osHPdoAA9CB6hjuGZHkA2w8jAwAEI0AAQiAAgMogYgAvJgfwAd3KIIEAB/IchiR4ZXh1/6lwnfHg
-fwDY8cBeCI/+CHcodc9wgADoDhSQz3aAAABZELiqDWAHAKaA4MolIhDPcYAO5AHscCCg7HDgoM9w
-gADoDgiACwgeAACGgbgAps9wgACEBgCIhegAhoO4AKbPcaAALCAwgQDYbR5YEB3tIIZiFg8WyXNj
-FgQWgLkgpghyBvDsdSClBBsQAAHi9+Igg7n3z3KgANQLLaIAo2Ie2BNjHhgRD/DJcwhyBvDsdSCl
-BOMB4vfiIIO6989yoADUCy2iDQCv/tQeABDgePHA4cWhwQh1Jgxv/RPYz3CAAOgEAICQ6J3YABwE
-MA/MAhwEMAHgEHiPuA8aHDAAwKlxw/9WC8AE2Qdv/qHA4HgA2ODx8cDhxcxwoIAByFMlARC7/+G9
-z3GAAOgEAdjKICEAsQdv/gCh8cDhxc9zpwAUSADZKKNHg89wgABwZ16gUIPPdacANERfoM9y8w//
-/CejUKOg2pq6NqP1HZgQz3KlAAgMCBIFAEwlAIDKIGIByiHCD8oiwgfKI4IPAABDAvwGIv3KJCIA
-z3OkALg9mxMNBrqgphMNBrugkhMNBrygoxMNBr2gUN2iopsbWAD/2qYbmACSG5gAoxuYAM9zpADs
-/89yAAD//yejRqPPcqAAtA98gjyiiiHEAM91oADsJyalKoVkGEQAz3AoAAIBBqV8ouEGT/7gePHA
-4cUB3YDhyiBhAcohwQ/KIsEHyiOBDwAAbgDKJCEAZAYh/colAQGA4EX2E3iKJf8fCwkTADN5s30U
-IQAA4gwgBTt5rHiVBm/+L3DxwBIOT/4IdxpxSHVodgHZz3CnAJhHOqDSCaAIHtjPcacAFEgdgT6B
-AKUgpve4xSCCDwD/AADTIOEFEQneBQUhjQ8A/wAABPBTIc0FiiEQANn/CHapcIohEADX/8CnGQZv
-/gAYACDgePHArg1v/gDaz3WgALQPfIVcpc9xgABwZ2QRAAHPdqAA7CcQuIUghAAGph6Bz3enABRI
-B6cfgRCnz3ClAAgMQqD6gc9wpAC4PZsY2AP7gaYY2AP8gZIY2AM9gaMYWADPcKQA7P9GoIogigAG
-pnylag6gAAHYoQVP/vHAFg1P/s9wgADwWAeIgOCMBCEAqsHPcKsAoP9kEBUAz3CrAKD/aBAWAM9w
-qwCg/2AQFwAH3XT/ANnPcKsAoP85oAhxuqAA2BihAd5KDCAIyXAA2M9xpwAUSAyhDaEOoQ+hz3AA
-AAEqz3egAOwnBqfPcKUA6A+noCDZz3CgAMgfMKAF2UMYWAAA2MYML/6NuCDYz3GgAMgfEaHPcKAA
-tA/coM9wAAACLwanz3AAAMIwBqfPcAAAQkgGp89wAAACSganz3AAAAJiBqfPcAAAwmMGp0ojACDP
-cYAA8FgFkSSRGGAVeAK5arg1eRlhFSPAJDhgx3CAAOwiIIgQuQUhgg8AAEItRqcFIYIPAACCRkan
-BSGBDwAAQmAmpwMQkgAEEJAAARCRAAIQlAAg2c9woADIHzCgBdlDGFgAANgSDC/+jbgg2c9woADI
-HzGgAN4O8M9wgADkZdZ4RBhAASGFSBiAAQHmN6BYoM9wgADwWAaQEHaWAgYAz3CnABRI16BAKQAk
-TyBBAIe5ibkmpwhxhSGLACanhSCMAAanEu45DlAQTQ6REEAqACQFIIEPAACCYCanBSCADwAAQmIZ
-8EAqACQFIIEPAACCLSanBSCADwAAQi8N8EAqACQFIIEPAADCRianBSCADwAAgkgGpyDYz3GgAMgf
-EKEF2EMZGAAA2FILL/6NuCDYz3GgAMgfEaGLcIHBiMKJw0P/CMC1bsd1gABoZQClCcDPcaAAyB8B
-pQDAGKUBwBmlQCwAJIUgigAGpyDYEKEF2EMZGAAA2AILL/6NuCDYz3GgAMgfEaGCwIPBiMKJwy//
-CMACpQnAA6UCwBqlA8AbpRLuOQ5QEE0OkRBAKAAkBSCBDwAAgmAmpwUggA8AAEJiGfBAKAAkBSCB
-DwAAgi0mpwUggA8AAEIvDfBAKAAkBSCBDwAAwkYmpwUggA8AAIJIBqcg2M9xoADIHxChBdhDGRgA
-ANh2Ci/+jbgg2c9woADIHzGghMCFwYjCicMM/wjAINkGpQnAB6UEwB6lBcAfpc9woADIHzCgBdlD
-GFgAANg6Ci/+jbgg2c9woADIHzGgQCkAJIUgigAGp4bAh8GIwonD+v4IwAfBBKUJwADDBaUGwByl
-PaUCwQIhwgAEw1hgAiDFgD/yYnlMeS9wqHHc/gLBAnlAK4AgFHjVeAAgjQ+AAHBnIaUBwQPAB8MC
-IEIABcFbYwIjRYAv8iJ4THgvcKhxz/4DwQTDAiECAALAR6UCIwWANB1AESbyBcACIEaAnAXi/0wd
-gBEF2AohwA/rcoojBAeKJIMPjQEv/QolgAEF2AohwA/rcoojRAR5AS/9iiSDDwXYCiHAD+tyiiNE
-BffxBdgKIcAP63KKI0QG7/FAI0AgguDKBOX/enAA2c9woAC0Dzyg2/6qcM9xqwCg/xmhaBmABWAZ
-wAVKJABxANioIAANCHGAIYINMHkGuYG5l7kmpwhxgCFCDzB5BrmBuZe5JqcIcYAhxAYweQa5gbmX
-uSanCHGAIYQIMHkGuYG5l7kmpwhxgCGGADB5BrmBuZe5JqcIcYAhRgIweQa5gbmXuSanAeDBAG/+
-qsDgePHAfghv/phwocHPcoAA7AQgis9wgABwZ6GCgBADAJBxzCXBkPPyEQ3AEM9wgABsaDmIIKpK
-JMBwSiUAAKggwALPdYAAhGgyJU0RCw0AEUAlRQBMJcCAtgEGAM9wgABsaLmIiHANCEEDBHkvI0cg
-BfCneC8jByAAGgIBSiMAEM9woAC0D3AQEQDPcaAAtA9wGcACYaIV8EAigCEQeAa4gbhAKQEUJXgG
-pUAigREweQa5gblALwAEJXgGpUAjSxDPcIAA8FgmkHFxOAEOAADbDyPDAgsjwIQB2somggAM9Asj
-AIHt889wgABsaDmIzwkAgQomQAEKIMCCEfItCFAAEQiRAIohhgCKIEYCEvAF2AohwA/rcoojywtn
-8Ioigi2KIkIfCPCKIcQGiiCECFpxWXBKIQAQSiQAcQonQAIpcqgggQMAIoMgQC4BATR5QCsAERlh
-VXnHcYAA6GcGkXB7Brsacxx9gbsQvaV7z3WgAOwnZqXAuAAogwAFI0ACLyEIEAAijhAHkdB+Br5P
-JlQQHH9ALwMUBSMDBWalwLgAKIMABSPAAS8nCABFIMMgZqVqhYtwYLBmkQAUDzF8ex8LwQNFJs4Q
-xqVqhWCwB5EAFAExHHgjCEEAAeJf8QXYCiHAD+tyiiPMAEokAADNBu/8CiUAAQXYCiHAD+tyiiNM
-AfXxz3GgALQPcBlABMkGL/6hwADZz3CAAGxoOKg5qOB/OqjxwEoOD/7PcIAA6A6ogM9wgADwWCSQ
-BZDAvc92gADsIgK5GGAVeGq4NXkZYRUlQBM4YBlmI4mnwUDBGWYkidhgAohBwc9xgACAe0LADYnP
-coAAbGhEIAAOWIpDuEolACBDCIEATonPc4AAbGhEIgIOeYtDui8KwQBPic9zgABsaEQiAg56i0O6
-GwrBAM9ygACsZ3WSz3KAAIAGQJJQc2IDAQDPcqAAtEdHEgKGgOJSAwEAz3KAAGxoGKoOiUQgAA5D
-uBmqD4lEIAAOQ7gaqs9wgACABiCQz3CAAHBnZhhEAADZnrnPcKAAtEdTGFiAlf3PcIAA8FgkkAWQ
-ArkYYBV4arg1eRlhFSVAEzhgCGbPcaAA7CcQuAUggg8AAEItRqEFIIIPAACCRkahBSCADwAAQmAG
-oc9wpwAUSDAQGAASbRR4+nDPcw8AAPzPd4AAcGcdZ6GFHmfHhgAnBBAIFAQAGmdIghlnI4EfZyQX
-BRA7CBAwCr1kfcm+pX7PcKcAFEjNoEAsgAJkeMm6BXrPcKcAFEhOoAq5BCGBDw8AAPyocMm4BXkb
-8EAugBJkeMm9BX3PcKcAFEitoAq6ZHqIcMm4BXrPcKcAFEhOoEAtgAIEIIAPDwAA/Mm5BXnPcKcA
-FEgvoEohACAKJEAlz3GAAGxoACFABBiIACFZBM9xoAC0R2AZGIDPcYAAPHwQuJu4IImfuIDhAdnA
-eQ+5JXjPcaAAtEdfGRiABvBKCe/9iiAGC89woAC0R3EQAIYEIIAPDgAAADG45QhQgADeA/AB5s9w
-gADwWAaQEHZ+AQYAGBGAMO0IjoPPcKcAFEjXoAruHw5QECMOkRCKIIYAiiFGAgTwtti92bpwmnEF
-8IolxCaKJIQoAN0E2BpwAsA1bSV4EHgQuIUgigDPcaAA7CcGoQAlQBUQeAa4gbiXuAahACUAFRB4
-BriBuJe4BqFAJYAhEHgGuIG4BqFAJIAhEHgGuIG4BqEAwAHBhcICIRMAg8CEwYbDW/31bicIEDCD
-wCCAhMBAgIPAQKCEwCCghcAggIbAQICFwECghsAgoLZ/A8EAJ5IfgABoZQTC8BpAIPQagCCMIXyA
-yiGMD///Af8vIMAELHjacBUngCPPcoAAcGcZYi2BACITAC9wLv0OII8PAAAAAQTAjCB8gMogjA//
-/wH/ynEseC9wTBMBICb9DiCBDwAAAAGMJ8efyieKHwAA/wGMIcePyiGKDwAA/wGA58onLBCA4coh
-LABKcFQY2ANVGFgAQCkCIVR6FG5YYLV4x3CAAOhn5rAnsEIgQCCA4MoG7f8B5TzxQCFAIIPgDgbl
-/zpwz3CAAHBnAIAVCB8AzguAB4Hg3Amh/8ogIQQy/Y0CL/6nwPHAocGLcL4M7/0E2QDA4LgoDYL/
-AMDhuOQLwv8AwOK4lAnCCADA47gED4IIagtgAAHYz3CAAKAEAIAFIIAPgA7gAZ24n7jscQChAcjs
-cQChz3KAAGhliiSBfQDZqCDAAfAiQwDscGCgAeFSCe/9ANihwNHA4H7geOB+4HjgfuB44H7geOB+
-4HjgfuB44H7gePHABdgKIcAP63Ja24okgw/xAe/8uHPgePHAxgkP/s93gADwBQCHgOD0CAIHz3WA
-AAAAAIUA3jcI3gABheO4QNjPIOIHyiCBDwAA0ADPIOEHz3GfALj/HaEEhQHg07gEpQUggA/Q/gAA
-FqEQzHEIHgDPcaAAyB+wEQIAz3OAAOgOahMAAWO4CCIAAB6hENgOoQHaz3CAAMBtFRmYgAIaGDDP
-cIAAgG4GGhgwCIMVCN4Cz3GgALRHANhLGRiAdxmYgK4IAATPcIAADAUAiIDg7AzCBwQgj08wAAAA
-GfAtCF4DLgpAAc9wgADoDgiAEQjeAgDZnrnPcKAA/EQioBDM77jPcKAAyB8P9Ml3ANjPcYAAuAwD
-oQWhz3CgACwgA4AHoWbwBNkIGlgwP4CA4YohDADKIYIPAAAAAi6gA9kVuRIYWIAAh4Dg9A/CBgCF
-BCC+jwAA33jL8s9xnwC4/wDYHaHF8AjIz3GfALj/FqHPcJ8AuP9YGAAIz3CgACwgBYBbCF5Fz3WA
-ALgMA4UB4IIJYAEDpc9wgADoDgiAEwjeAgDZnrnPcKAA/EQioM9wgAAUaR2AhCBBgAXyBYUB4AWl
-z3CAAAAAAIARCN4CANnPcJ8AuP89oAHeEMzkuIv05riU9EQgAIrK8lEjAMCY9AjIBCC+jwOA6EO3
-9WsIX8XPdaAAyB8/haAVABAJIQAA5OAA3tD2z3CAAORkAIAZCF4A3qUQ3wILYATpcIToAdgepe6l
-iiAIAKAdgBMOpR+FEQgVCoToiiAEAA6lTgrABy/YlbgSHRiQz3ABAMD8FR0YkLoOgAAyCSADB9jP
-cIAA8AUAgIDgyA7CBs9wgAC4DESAI4AIIkEAJKBFgCaACCGBACagPIVngEiAYnkIIkEAKKDPcIAA
-AAAAgAQgvo8AAN94BvLPcJ8AuP/doM9wgADoDgiAKwjeAs9wgADYAxB4z3GgALRHSRkYgM9wAEQU
-AEsZGIBMGZiDA9h3GRiAXQfP/RHMUyBAgHzzBsgCEgE2AhoYMAYaWDBqDsADz3CAAAwFAIiA4KgK
-wgds8VEgQMVo9RDMz3WAAPhZPwjeAIDYEBocMBHMEQjeAhiFAeAYpQDeBfAQhQHgEKXPcIAAgHsS
-iOC4tA8iAMogYgAQ7xeFAeAXpQzwiiAEABAaHDAPhQHgD6UE7xaFAeAWpRDMewjeARHMBCCEDwAA
-ABg5DIAPAAAACF4PgAARzEkI3gDPcKAALCAlgAaACuExCEQAAhIBNgLYEBocMFDYKgtgAJgRAQCk
-8foOYALJcBEIHgAI2Ju4CBoYMA7xBNgIGhgwCvECyKAQAADwuADYQvKyDIAAANiWuDzwVwgfAnsI
-XwIdCJ4DGQseQIogBADPcaAAsB8UoQTYCBoYMBHM77jUBcH/z3GgAKggSIHPcYAAjGktkTBywAXl
-/wDbr7gRGhwwz3CAALSJrQXv/2Cgfg2gAIogBACiDqAAAN0CyKAQAADwuKlwBvI6DIAAANiVuN4O
-gAC08S4MoAAB2ADYkLj48eB48cBmDc/9CHYodea6JrrAugK6QCIABAUggA+ADgAA7HEAoQESATbs
-cCCg7HDAoATy7HBgoOxwoKB2DK/9ANiVBc/94HjxwBINz/3PdaAAwC9cFREQgBUAEAHYaBUQEAhx
-CHIiDK/8CHMEIb6vAJAAABf0gBUBEM9wgAAEdgeARCCAAILgAdjAeC8mB/AJ8gXwF4UPCB8HgBUA
-EPkJAICAFQAQQSiSABMJHiDPcIAAgHEhgAsKRCAA3wLwBN8SCOAESnDPcIAAgHEAiOa4zyeiEdDZ
-z3CfALj/n7k9oADYiB0AEBOFz3agAMgfurgTpYogEAASpSDYEKYF2EMeGBAA2HoMr/2NuCDYEaYC
-2BGlEIX/CB6A+gpABs9wgAAEdieAwLmB4QHZwHlyCCAIAdgA2IAdABDPcIAABHYLgM9xsP5FAEge
-GJAVFQCWgLgVHRiQz3CfALj/NqDPcMDPAQAXpQDYm7gTHhiQEg8AAM9wgACAcQCIHwgfAREIXgEB
-yM9xnwC4/xihB/AqcEpx6XIKc5z/z3CAAHiKAIAdCF8AA8gLCJ4ARgjAAAbwz3GgALQPANgcoYoM
-QAcyCMAACdgIuA6m8QPP/eB48cCWC+/9A9nPcIAABHYnoM9wgACAcUYMr/0A34DYz3agAMgfEh4Y
-kM9wgACAcSCIoYjPcIAABHYHgOG5xCCCD////P/FIOEAGnDPcoAABHYHoue5wC2iEkgWAZbPcIAA
-BHYroDMNEBC9ZbR9EfDgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeGG9jCX/n+31z3Cg
-ALQP/KANyAQggA/+//8DDRoYMA3Ih7gNGhgwz3CgAOwn66BE2EkeGJAc3RHw4HjgeOB44HjgeOB4
-4HjgeOB44HjgeOB44HjgeOB44HhhvYwl/5/t9VMgASCB4QHZwHlGD+AHAdjPcIAABHYHgMC4geAB
-2LYIYAbAeM9xsP5EAM9wnwC4/zagFN0S8OB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB4
-Yb2MJf+f7vXPcJ8AuP/9oBoJQAbPcIAABHYHgM91oADAL1MgAQCB4QHZwHkLCVEAiiEQATGlz3GA
-AIBxQIk0heC60CHiAs8h4QI0pc9zAAD0bs9xgAAQBWGhz3GAAIBxIoHjujmlGBYBlqG5GB5YkIoh
-EAAxpgnZCLkvpg4e2JMPHtiTEB7YkxEe2JOKIf8PLR7YkzelM4XPIWIC0CFhAjOlRCCAAILgAdjA
-eBUIUQDPcIAAgHEBgAK4n7iIHQAQ8gyABIAdwBMThYi4E6VQ3RHw4HjgeOB44HjgeOB44HjgeOB4
-4HjgeOB44HjgeOB44HhhvYwl/5/t9RD/uQHP/Qhxz3KADggA7HBAoAESAjbscECgANrscECw7HBA
-qIEBr/0ocPHANgnv/QHZocHqCa/9i3ACFIEwz3CAABAFIKgDFI0wABQOMee9wC6iEjUOEBDeZtR+
-EvDgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeGG+jCb/n+71GQ0fERENXhEByM9xnwC4
-/xihBPAB2Nv/LQHv/aHA4HjxwLIIz/2hwYtwAd9qCa/96XEgxgEUjTCA3AQmAJMacMAtohIzDRAQ
-vWW0fRHw4HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HhhvYwl/5/t9YDaz3GgAMgcANsJ
-CBAgSaED8EqhQNgJDp4RCaED8AqhCw5eEGahA/AD2AahCw6eEOmhAvDqoQLYCw7eEAmhAvAKoQIU
-gDAZCB8BEQheAQHIz3GfALj/GKEE8AHYrP9hAO/9ocDgeM9wgAAQBSCIEQkeAM9yoACsLxmCirgZ
-ohEJXgDPcaAArC8ZgY64GaHgfuB4z3OgAMgfFhMAhs9xgADgYwChEhMAhgDaAaETEwCGAqEUEwCG
-A6EVEwCGBKEkEwCGBqHPcJ8AuP82oM9woACsL4oh/w88oM9wgAAEdkegz3CAABAF4H9BoPHA4cUH
-2BkaGDDPc6AA1AcaGxiADhMBhs9wgAAAAECACRpYMDUKHgJBgOi6QNrPIuIHyiKBDwAA0ADPIuEH
-z3WfALj/XaVEgAHi07pEoAUigg/Q/gAAVqXPcKAASCw+oB8TAIYBGhgwBMqc4Mwggo8AAJEABfLM
-cACAzHAAgAPMz3GfALj/GKGKIEYEwgpv/QESATZZB6/9BMrgePHAyg6P/c9xgACAezCJGnDPdqAA
-tEfPcIAA6A5gHliQRCEBDgiAQinTAOC4andu8s9woADIHCAQEQAC2c9woADIHCmgRCOBIFMjAiA8
-eUQjBCFZYUIsgAAAIFIALyKHJArdEvDgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeGG9
-jCX/n+71GQpTIAXYCiHAD+tyWtuYc2EGb/xKJQAAz3KqAAxQz3CAAOgOFQqyID6AgLnPcIAA6A4+
-oAHYCPCguc9wgADoDj6gANgFogrdEfDgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeGG9
-jCX/n+31z3GgAMgcIBlABM9wgADwWAeILOhDFgCWhCD/AkMeGJBXFgCWvLi/uFceGJBfFgCW3rhf
-HhiQANieuFMeGJAODW//6XDPdYAAGAUUjRUPABDPcIAArC0WgEB4FB3CFEMWAJZFIAANQx4YkApw
-dQgVATMmAHCAANBIQCeMchR8AHwQv5u/z3CAADx8AIifv4DgAdjAeA+4BX9fHtiTIPDPcIAAPHwA
-iBC/gOAB2MB4D7iYuJ+45XhFIMABXx4YkA7wEL/PcIAAPHwAiJ+/gOAB2MB4D7gFf18e2JNJBY/9
-BdgKIcAP63KKI00ISiQAAFjx4HjxwN4Mr/0B2c9wgADoDgiAUyAAgM92oAC0RwDfSx7Yk3ceWJDP
-caAAhET4oQLZG3h3HliQANqeulMemJBUHpiQz3KAADABRx6YkI64z3KAACQARSARDUgemJDPcIAA
-6A5JHtiTGpACuGy4RB4YkBzYRR4YkM9wgADwQwGIRh4YkHjyz3CgAMgcIBAQAM9woADIHCmgz3CA
-AIB7EIhEIAAOQ7hEIIIAUyABAEQgAAFcellhQrgAIFIALyKHJArdEvDgeOB44HjgeOB44HjgeOB4
-4HjgeOB44HjgeOB44HjgeGG9jCX/n+71TCIAoMogbAHKIcwPyiLMB8ojjA8AAFoAyiTMAAgEbPzK
-JSwAz3KqAAxQz3CAAOgOFwqyIB6AgLjPcYAA6A4eoQHYBaIH8KC4z3GAAOgOHqHlogrdEfDgeOB4
-4HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeGG9jCX/n+31z3GgAMgcIBkABADZSiTAcM9ygACM
-cagggAPPcIAASHw2eGGAsmm2fV1lAoBipQHhA6XPcIAAGAUAgAPoZB4YkEMeWJQB2Bn/z3CAAOgO
-CIAlCN4Cz3CAANgDEHhJHhiQz3AARBQASx4YkEwe2JMD2AXwSx7YkwHYdx4YkFkDj/3geKHB8cDu
-Cq/9KHKkwQjZQMHPcYAASHzggelxhCEBDCS5wr8OuQ6/JnpFf0zHz3GAAOgOKIEEJ44fAQAAwC6+
-QC4NFlMhAYCcvdhxn73PcoAA1CPPcYAAGAXWegbycIJkoVGCBfBggkGCZKFDoQISAjZnihUL3wDP
-c4AAyARgk8C7D7tlfea4CNsK8gQnvp8AAAAYC9tAwwTyD9tAw+S4WnPPJeIWBPTouM8lYhdjD14S
-BCeAHwEAAMAuuM9zgAAQRQhjguDKIKoAYbiYcM9zgADccBZ7EYMIvkHAEoMEJ48fAAAAEM9zgADo
-DmITgwBCwCzAnr0Ee0QjAwEJu8V7ZXgFf0AkAAYPeLkaAgBe8FUPHhJDxyPAoODKIwIAyiMhAAQn
-jh8BAADAQS6EE892gADARAhmBCeOHwYAAAAxvgAmBRCIcM92gAAQRQhmAiBAARYjBQAsw89wgADA
-RGhgFvBTJ8AQz3OAACxIHXgIYwQngx8BAADALrvPdoAAEEVrZmG7FiDFAAHYGQ0UBgXYCiHAD+ty
-iiPFC40Bb/yKJIMPz3OAAGBwFiNDAcCDYbhhg0HGBCePH+8AAN0mvwV/QsNSJ88TuRpCAQDYz3OA
-AIBDAKMggRsOEABTIUAAErhEIQ4DDr7FeEQhAQwKuRDwKHCEIAwACrgEIY4PAAAADAa+xXgEIYEP
-AAAAMAK5BXkHiiKjMBQRMOO4CBQTMM92oAC0RwQUEDAF8NoNL/3F2HEWAJYEIIAPDgAAADG47QhQ
-gIog/w9vHhiQax4YkAPZD7nPcKAAyB8TGFiAWR7YlFoeGJRbHtiTWB6YlPu9yiAhAA/yBg7ABM9w
-oADIHx6AArhuuIDgyiAsAAhxybklfYQnHBCMJxyQ0CXhE88l4hNXHliTz3GAAPBYJJEfCVEAhBYC
-llAiAQMEIoIPAAAADK25ArpFeQPwhBYBlhYeWJCMIM+PyiBmAcohxg/KIsYHyiOGDwAA6wDKJMYA
-PABm/MolJgAKcEYM4AcqcQjcTwCv/aTA4HihwfHA6g9v/ZhwKHXPcYAASHwggaPBKHOEIwEMJLsO
-u2Z9wrkOuSV9S8UEJYAfAQAAwC64iiMEAoHiyiOBDwAASAFAKA8GnL/PcYAA6A4ogZ+/z3KAABgF
-4LnPcYAA1CMWeQby0IHEojGBBfDAgSGBxKIjomENXhIEJYEfAQAAwM9ygAAQRS65KmKC4soiqgBh
-us9xgADccFZ5RBEQAEgREgDPcoAA6A4rwWISggAIuJ6/TyMRASR6RCICAQm6RXgleAQlgR8AAAAQ
-BSETAE8h0SFb8FEkQILPI2IBzyMhATpzRQ0eEkLFIsGg4comQhDKJiEQz3KAAMBEKWIEJYMfBgAA
-ADG7BCWAHwEAAMB5YS64z3OAABBFCGMieBZ+K8AIYhXwUyXAEB14z3GAACxIDmEEJYAfAQAAwC64
-z3GAABBFCGFhuBZ+AdgdDhQWBdgKIcAP63KKI8kEiiSDD8UGL/y4ds9xgABgcNZ5ABEQAAQREgBh
-uAQlgR/vAADdJrkleFIg0wPPdqAAtEcE8HILL/3F2HEWAJYEIIAPDgAAADG47whQgIog/w9vHhiQ
-ax4YkAPZD7nPcKAAyB8TGFiAWR6YlFoeGJRbHtiUWB5YlPu/yiAhABDymgvABM9woADIHx6AArhu
-uIDgyiAsAAhxybklf2pxhCEcAIwhHIDQJ+ETzyfiE1ce2JPPcYAA8FgkkR8JUQCEFgKWUCIBAwQi
-gg8AAAAMrbkCukV5A/CEFgGWFh5YkIwgz4/KIGYByiHGD8oixgfKI4YPAADrAMokxgDQBSb8yiUm
-AApw2gngB6lxCNzjBW/9o8DgePHAcg1v/QK5+nDPcIAA6A4fgDZ5ACGND4AAjHGA4KHBWnOS8giF
-RXi6cAilEBUTEBQVEBDPdqAAtEcYFRQQHBUWEAAVERAF8EoKL/3F2HEWAJYEIIAPDgAAADG47QhQ
-gIog/w9vHhiQax4YkAPYD7jPd6AAyB8THxiQWR7YlFoeGJRbHhiVWB5YlVEmwKbKICEADvJyCsAE
-HocCuG64gODKICwACHLJugUmliCKcYQhHACMIRyAynHQIeEDzyHiA1ceWJDPcYAA8FgkkR0JUQCE
-FgKWUCIBAwQigg8AAAAMrbkCukV5BPCEFgGWFh5YkIwgz4/KIGYByiHGD8oixgfKI4YPAADrAMok
-xgCoBCb8yiUmAApwtgjgBypxABIBIH4XAJbguc8g4gDQIOEAfh8YkC8hQwAAGkAgANjPcYAA6A4f
-oSCFAB9AIHEEb/2hwPHAQgxv/QhypMEA2ArpCIEEIIAPAAAAMEIgAIDKIGIAArpWesdygACMcWCC
-QMMlCx4CIMXPdoAAwEQyJkQToIqtZgQjjg8GAAAAMb7dZQTwAd2Yda67r7uwu0DDgODMISKANfQl
-DVAQNQ2QEFUN0BAF2AohwA/rcoojyg9KJAAA5QMv/AolAAHPcIAATGkQiMG4DuAPIwMAQMM28M9w
-gABMaTCIAN1TIUAARCEBAw7hDyVNEA7gDyUNEKV7QMMk8I67j7uQu0DDHvCogQ2RBCWNHwAAADAs
-vUQggANhvRx4QCWBEw8jQwBAwx0ITwMF2AohwA/rcoojSwKKJMMPaQMv/Lh1z3GAAEh8AIGLc6CD
-hCABDCS4DrgGfaCjAIHCuA64BX2gowDAz3GAAOgOBCCNDwEAAMAuvUAtAxacuyiBn7vPdoAAGAXg
-uc9xgADUI7Z5BvLwgeSmMYEF8OCBIYHkpiOmYwheAiaCCL3YdaV5JqIEIIAPAQAAwC64z3GAABBF
-CGGC4MogqgBhuM9xgADccBZ5z3CAAOgOYhCAACDGsYEEII8Dz3CAAExpERCEADKBnrsEJMADCbgF
-IIABBX6KIAYGUvBDCB4CQ8AjxaDlyiZCE8omIRDPd4AAwEStZwQgjw8GAAAAMb8EIIEPAQAAwP1l
-LrnPd4AAEEUpZ6J5FiZNEBPwUyDBAD15z3WAACxILWUEIIEPAQAAwC65z3aAABBFKWZhuTZ9HQ0U
-FgXYCiHAD+tyiiNMAIokgw8pAi/8uHXPcYAAYHC2eaCBIYFCJE4ABCCAD+8AAN0muAV+UibOE4og
-BAIkoqWiZ6IIosaiAdnPcIAA6A4/oC0Cb/2kwOB4ANiQuM9xoADIHxUZGIDPcIAA5GRGkFt6TyID
-AFoRAoY4EIAAZHpYYNgZAADgfuB44cUA289ygAAIYxQiDQBgtWi1GmIgGsIAuB3EEM9xgADkZBZ5
-IpEoGsIAyB3EEHAdRBAB2YAaQgDPcYAAoGMVeWCh4H/BxeB48cDhxQh1GRIBNs9wgAAIYzR4EYgR
-6ALIAYAfCF4Dz3CAAOhP8CBAAM9xgACQBBR5AJEQ4ACxNgyAAxnI3/8CyAHZoBhAAKYJoAOpcM9w
-gAAAAACAJQheAc9xqqq7u89wnwC4/zagNqA2oDagz3GgAMg7DoGIuA6hRQFP/fHAyghv/QDbSiQA
-cs9yoACIIKgggQGHC9ABwILPcYAA5GTPcIAA5HV2eaiJB4C4YM91gAAIY3R9oO4AI44PgAB4Y/CO
-Ew+REHAVDxEjkft/gL/keQTwDQ9RECKRcB1EEADZMK7PdqAAyBz6hnAVARHkeYgdRBAG8IgVAREJ
-CYUDOGAF8IgdhBPYYIwgz4/KIIoPAAD/AwQaEAAB4wDZz3CAAOR1jQBv/Seg4HjxwB4IT/3nuBkS
-ATbPcIAACGMCEgI2z3OAAPhvz3WAALgMNHjRiPCImHcS8gHm2HYyEoUAB5MCGwIBBrMYhQHgGKXP
-cEEAgwDDqxLwQCdGEDEShQACG4IBuBAAAcOrBrMZhQHgGaXPcCEAggALDYUBFQBv/QSjz3CAAChj
-KGAB4ASrAYKwiosIHgEvJIgDz3eAAJBDx4cSii95BO4Fhynwg+HKIeoA8m3PdoAAKFL0f+ZmEw6e
-Fc92gADwU7Z+wY4C8ADex3GAAPBTtnkkiRBxyiBJANFwyiYJEIB2j+bKJuoTFm3VeM9xgADwVABh
-z3GAAAhTtnnPdYAA6A69hSGBpXkEIYEPAAAACCZ4AvADggKjmBKAACiLDwkAAADYBKtg2Bi4pvEA
-2J24pPHhxeHGz3CgABQEA9kjoBnIz3KAAPhvYZLPcYAACGPEihQhDQBotQAggw+AAChjMOHAq2KC
-FXkGkmChAhIDNrgdBBAEgqATAQCEITwAJXigGwAAwcbgf8HFCHIEIL6PYAAAABnIz3GAAAhjACCD
-D4AAeGMUeQXyAsgckBcIngIEIoIPYQAAABMKgQ8BAAAAANgAsQHYHPAQzAISAjYbCN4BMhKCAAGJ
-DQiBAADYAanz8QHgAakL8DESggAAiQsIgQAA2ACp5/EB4ACpAtjgfxCr8cAiDi/9BtkIdRkSDzYZ
-Glgwz3CgABQEKqDPcIAA1EjPdgAAyCZgfgTZAIVgfgTZAYVgfjjZIoUF6QGFAJAbCEUABdgKIcAP
-63J120okQAD1Be/7uHNgfgOFAYVChSCQBYVgfkJ5z3CgABQE6qAdBi/9GRrYM+B4z3GAADAF4H8D
-oeB48cCeDQ/9CiUAkAXYyiHBD8ojgQ8AAK0AyiLBByHyAYWA4MogYQHKIcEPyiOBDwAArgDKIsEH
-FfIwiM9ygAAoUgK5NHknYsKALb8BhsC/BOgAhozoBdgKIcAP63K120okQABhBe/7uHMLCJ9Bqg2A
-BgfoAIaA2SigAYZAeCjwAYUAkIwgGIAF2MohyQ/KI4kPAADCAMoiyQcj9qlwuP8BhtX/z3CAAJyP
-hC8LGoohEAAwIEAOGHkAyCZ4ABoYMM9wgADoT+agzg6v/OlwOQUP/c9xgAAwBSOB4H8goPHA4cUC
-EgE2ooGKIf8PABpYMCCFWg7v/CTaAYWA4OIgAgAZBQ/94HjxwJoML/0G2BkSDzYZGhgwz3agABQE
-CqYJhgDdEeh6DEADCYYN6CQWBRAF2AohwA/rcoojhAWJBO/7SiRAAIog/w/qpgAaGDDPcaAA0BsQ
-gc9ygAAIY4a4EKETgZC4E6Edihka2DMN6M9wgADoTwaAz3GAAJAEFHkAkRDgALGmsq6yJhpCA30E
-L/3EGkQD4HjxwOHFCHXPcIAA6E8GgIQoCwrPcIAAWI0AIEIOz3CAAPxjAIChwSkI3gAWac9zgADw
-VABjGQhfAs9wgADwUzZ4W4oCiIm6DrhFeAbwwgov/YtwAMAApS0EL/2hwAhyz3CAADwPFIgZYTB5
-AWkNCIMAAiJAABB4A/AC2M9xoADIHx6hENgOoQHYFRkYgOB+4HjxwHoLD/0A3891oADQD/WlA94S
-8OB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB4Yb6MJv+f7vUD2Bqlz3CAADwP76gB2BWl
-lQMP/fHAKgsv/QXYAN0LuKlx3P/PcYAAFGkegaUIngMdgaEIHgDiCc/7ANmcuc9woADQGzCgAdnP
-cKQAmEA8oAQgvs8wAAAAAeXKJSIQSQsfQAsIXkVDCZ5DHQjeRRkJnkPPcKoAAAQBgEQgwAQrCNAA
-0f8g3892oADIH/CmAdhDHhgQANjCCu/8jbjxprUNFJED8Mj/ANkfCB5HANrPcKAA0BuculCgz3CA
-AIgEQIAQggHgEKLPcKQAmEA8oDTwRgnP+2EIX0VRIADFAeXKJSIQz3agAMgfIN8fCx9A8KYB2EMe
-GBAA2F4K7/yNuPGmNQ0VEejxz3WgANAPANgVpfCmAdhDHhgQANg+Cu/8jbjxpgPYGqXPcYAAPA8A
-2A+pAdgVpXECD/3xwAYKD/0A3892oADQD/WmA90S8OB44HjgeOB44HjgeOB44HjgeOB44HjgeOB4
-4HjgeOB4Yb2MJf+f7vUD2Bqmz3CAADwP76gB2BWmz3GAABRpHYGAuB2hof+GDIABEQIP/eB48cDh
-xc9yoADQD3CCz3CAADwPL4gA3Q8LQQAD2Tqir6gC8N//9QEP/QDbz3GgAMQniiAYCDwZwIDPcqAA
-yB8OooASAADhuM9wgABgcQvyQhEBhgQhvo8AwAAABfIhgAPpIqCAGsAA4H9hoOB4EMwEIL6PAAAo
-QEPyQQjeABESAjeA2M9xgAD4WRAaHDANCt4CGIEB4BihBfAQgQHgEKERCt8AANnPcKAALCAvoBHM
-hCB/DeB/ERocMC8IXgGKIAQAEBocMM9xgAD4WQ+BAeAPoRHMANmEIH8NERocMM9woAAsIC+g4H4E
-2BAaHDDPcYAAuAwcgQHg4H8coeB+8cCmCA/9osEA3yDYz3aAAEBvQCYNFQYOYAQAps9xoADIHwHY
-E6F4gVmBz3CgADAQVBEEAPgRAQABgM9woAAMJAeAAiNAgAIkQwADIsIDAaZCps9xgADoDs9ygAAU
-aWOmTBrEAxSRUBrEAwm2CIFOGsQDmHDguAHYyiDBA89xpQAIDAi2/bYggVMhRQFTIUMASBpCAYPj
-yiBhAcoiwQfKI4EPAABoDcokgQ8AAP4AHADh+8ohwQ8EIYMPAAAA4CWmPoItu5YawgAZCZ4DBLuB
-u2V4CLYH2AfwFSUMEOCkA/AE2AHg9QgUglEkwIJ0CEL+6XVRIIDFzvKA5cz0z3CAABRpPoAEIYEP
-AAAAQAQhgE8AAABAEHEB3colIhDKJ2IQz3GAADwPD4kB4A94D6nPcaAAtA83gQDeEwhBAM9woACo
-IAaAjCCDjsv3AN1V/89wgACIBCCAAd8IgQHgCKGA5Zjyz3CAAEBvBYDPc4AAFGkEIIAPAAAA4EEo
-RAPPcKQAkEE1gFaAz3CAAEBvJ6BIoAsMHgBMG0QAC/BMG4QDBCGBD///AADPcIAAQG8noBcMXgAE
-IYEP//8AADC5ThtEAAjwThuEAzB5z3CAAEBvJ6ALDJ4AUBuEAAvwUBuEAwQigg///wAAz3CAAEBv
-SKDPcKQAkEENgM9xgABAbwahBCCADwAAAP4puFIbBAAeg0kIngPPcKoAAAQkgM9wgABAbymgz3CA
-AKRvIIhEaDLpWQl0AAIQhAD0IoMDFdgTuPAgwwDPcIAAfG/VeAHm6w5kkGCgGvDPcIAAvG8giERo
-GuklCXQAAhCEAPQigwMp2BK48CDDAM9wgAB8b9V4AebtDmSQYKDPcoAAQG8hqgIaAgGX7QQgvs9g
-AAAAE/TPcIAAiAQggAHfAYFhuAGhB4EB4AehiiCFB8oJr/wQEgE3KwseQADd9/6KIMUHtgmv/Klx
-z3CAAIgEIIAB3wGBYbgBoQeBAeAHocIKr/z22AQgvs+AAQAAzCUikMwnIZD2BcH/z3CgADAQA4AA
-2Qvoz3CAAIgEQIAB3yh1DIIB4AyiFe8C2c9woADIHCqgEv/PcIAAFGlA2T2gEMyEIAaABfQA2I+4
-EBocMKlwxQXv/KLA4HjhxTDbAN3PcKAAyBxpoAPaz3GgAMwXIRmYgE6hp6BqoOB/wcXxwOHFz3GA
-ALgMDoEC2s91oADUCwHgDqHPcKAAkCNdoADZN6X2/s9xgAAUaR2Bh7gdoev/EIUH6APYEaW8/m0F
-z/wF2AohwA/rcs9zAACLCUokAAABBa/7CiUAAfHAOwkfRs9woAAMJAeAF+jPcIAAkGkLgM9xoADI
-H2TgHqEQ2A6hAdgVGRiAwgyv/APYUSMAwHAPwv/RwOB+4HjxwJYMz/wIdc92gAAUaR2GLyYI8Dr0
-JQ0fEIK4z3KAAIgEIIIdpgOBAeADoSCCiiBFCT4Ir/wjgR2GJQ1fEIS4z3KAAIgEIIIdpgSBAeAE
-oSCCiiCFCRoIr/wkgc9woAAMJAOA47gdhhDyhLjPcoAAiAQggh2mBYEB4AWhIIKKIIUJ7g9v/CWB
-PYYvJkjwAN8N9AXYCiHAD+ty49uLu4okgw8ZBK/7SiUAAM91oADQDxEVAJanCBAAIQkeAM9ygACI
-BCCCAoEB4AKhIIKKIEUIng9v/CKBCPAbCR4Buf8dhncI3wEC2c9woACQIz2gaf4a8LT/HYZjCN8B
-OYXpcAbwLXJAggHgD3hBKYIA9QiEgADYBvAtckCKAeAPeFMhQgD1CISAA9gSHRiQjv4ehhcI3gTP
-cIAA2HXrqM9wgACYdeywz3AAAP8/z3GgAAwkAaEb2AShe/+pA8/8BdgKIcAPz3MAACcJ63Kb8eB4
-8cDhxQhyUN0A2M9zoADIH6+jHqMCIkAAHqMB2BUbGIBA2A6jBCC+zwACABBQD6H/yiCBAG0Dz/zx
-wPIKz/zPcIAAFGkxgCMJXgLPcYAAPA8uiUQQggBEeeK5SNrKIoEPAACQAALwDtoA289xoACoICeB
-qBAOAFlh0XHCJkUQyibmEtB4Ctm+/Vv+z3CAAFgmAJDPd6AAxCcLCB4BjCYDkgP3AN0Q8M9woAC0
-D3ygz3CrAKD/eqCmD+AGANgC2BAfGJAB3RkXAJaj6EcJH0bPcIAAFGkRgA8IHgIPzGG4DxocMM9w
-oADUCwPZMaDPcYAAuAwSgWq+AeASoROB2GAToUIKr/wB2E4LL/8B2Ab+hQLv/Klw8cAWCu/8wNjP
-coAAQG8hihwaAjDSaUTmz3OgANQLGIMA3UIgAAiA4MogTANDCIUDz3GfALj/GIGQuBihGIGwuBih
-z3CAAIgEIIAFgQHgBaHPcYAAFGkdgYS4HaEA2En/iiDFCIoNb/wA2QDYNfAD5gQmjh8AAPz/z3CA
-AKAEAICXvsV47HYApgfI7HYApg/MSiTAcwHgEHiPuBB+DxocMM9woACIJN6gANioIAAC8CIPAOx2
-4KYB4BsJdAAA2s9wgAB8b/AgjgDscMCgAeLzCkSAraMB2KkBz/zgePHAz3GAABRpdoHB2BwaAjAM
-489woADUCxiAANpCIAAIgODKIIwAPwgVA89ynwC4/xiCkLgYohiCsLgYos9wgACIBECABYIB4AWi
-HYGEuB2hANgV/4ogxQi6DG/8ANkA2Cbwz3KAAOgOGIqG4ADYyiAiAQJ7A+PPcIAAoAQAgAQjgw8A
-APz/l7tleJ24n7jscwCjB8jscwCjGIqG4ADYyiAiATaBAnnscCCgAdjzA8//8cDhxc9ygAAUaRaC
-z3GAAIxxDQgQBlQSgAAF6BmCeoID8BuCfIJRgs91/v//P6R4pHsEIoIPAAAAEEV4AKEA2AGhZXpJ
-oQ7aSqHPcYAAuIz6C0//z3GAAKCP8gtv/wHYoQDP/PHA4cXPdaAAxCcVFQOWG9gWHRiQA9nPcKAA
-1AsxoLX9HwseAc9wgACIBCCAEYEB4BGhfP0C2BAdGJCm/h3wUhUAllMgQQCD4dEj4YAD8tH+E/DP
-cIAAiAQggAaBAeAGoc9wgAAUaR6ADwjeAQHZz3CAAGwFIKApAM/84HjxwK4Pr/wA2s9wAAD/P891
-oADEJxMdGJAb2BYdGJAB2BAdGJDPdoAAFGkRhsYMYAE2hqgeABCo/h2GCwjeAQDYH/AtFQGWVoYP
-CkAAgLgdpgDYsf718QQlgV8AAPAnHoYleB6mERUAlg0IHgDPcAAAkKsH8A8IXgLPcAAAyKmdB4/8
-MwjeAAjYEx0YkAv/2egC2DwdAJAhFQGWz3CAAGBxIaARFQCWDwifAIv+HYaTCN+BERUFlhsNnwAF
-2AohwA/rcoojBgAJB2/7iiSDDwTYEx0YkKz/tfHxwMIOj/zPcYAAAAAAgTcIHgABgeC4QNjPIOIH
-yiCBDwAA0ADPIOEHz3KfALj/HaIEgQHg07gEoQUggA/Q/gAAFqIA2c9ygAAUaT2iPqJUGkIAP6KA
-2JQaAgCAGkAAqBpAAM9wgABEdDmgz3CAAGxxIKDPcIAAtIkioM9woAAEJTSgNv3PdoAAFGnPcoAA
-AFnPcYAAiATPdYAA6A4tCZ5DANiOuB6mVSJABQChG5UG2hy2HZWSHgQQiiCEDh62z3CgAMgcSaAM
-8ARqAKEalRy2HJWSHgQQThUAER62QIEAggHgAKIggQGBAeABofrYANmN/E/9gODcBgEAz3CgAAwk
-z3EAAP8/IaDPcKAA0A8REACGDegF2AohwA/rcoojjQiKJIMP0QVv+7hzAdnPcKAA0A8RGFiAaBWB
-EByWAiBGAB6G7rgvJogB3PIA2EAeBBDPcKoAAAQigM9wpQAIDECABCGADwAAAP8ouAQigg8AAADg
-W3qJuEV4SIUEIr6PAAYAABGmA/KMuBGmz3KAAEBvDaIsos9wqgAABACARBaDEJTjCqIY8gb2MQuR
-AiO4DfAbC9AN7uMS9EUo/gJBKcBw57nCIGIAANsK8EUo/gJBKQBx+/EiuPnxANgB2xamz3GqAAAE
-IYEcsiui5LnKI2IA4bnKI2EAhCEBACS5KHdJHkIQKJLleSiyPwi0A32mOw4EcAAAMAlVFYEQEOnP
-caAA0A8ZEQGGQiEBCIDhyiEsAFYgQgITCYQAz3GgANAPgBEBAAsIQACAu32m4LuaAgIAyHAA2VX+
-YhWDEEQWghAEI4AARCICDEQgAQFEurhwWWHPcIAAcI3BuShgibgbpmwWgBBJFo0QBCDPAEQgAAxE
-uKR/+GDPd4AAyEX0JwAQXh4EEM9wgABYkChgibgcpnAWgBAxhgR7RCAADKR7RLgbY/QnwBA5pgQl
-TRG6YmAeBBDPcIAA6EX0IIMAOqbPcIAA+EX0IIAAih7EEIwexBCOHgQQkB4EEADYAwIgAEoeAhDP
-cKYACAQBgAQggA8wAAAANLhAHgQQQBYBERsIX0bPcKAAqCAIgBlhMHn+D2//yHAD8MhwHf4EIIBP
-gAEAAADZMQiBDwABAAAB2EoeAhDPcoAAQG+WFoAQQB5EEEkeQhA2pimiBLgokom4JXgIssHwSR5C
-EM9wpgCMA12Az3WAABRpBCKBDzgAAABBKcAElh4CEAQigA8AAADwLLgluSV4EaYNCN5HEYWMuBGl
-UyLBAkQVgBA2pbhw4LjRIuKHANsC9AHbz3aAAEBvSaaWFYAQSJYEuEV4CLYRhTy2UyXCAFx62HAN
-ps9wgABgjUhgfaXPd4AAEHAbpWwVgBDDuBx49CcAEGQdgBFeHQQQz3CAAEiQSGBoHYARHKVwFYAQ
-w7gcePQnABBgHQQQz3CAADBw9CCAAAh3ih0EEM9wgABAcPQgggCMHcQTjh2EEJAdhBDPcqYAjANd
-ggQijw8BAAAAML9KHcITSaZKFYIQANgW6hUNUAOAu32liiBFCC4OL/yKIY8PHYVjCB8AZwgfRkYP
-L/yKINAC+/HPdqAA0A85CZQDz3eAAOgOnBcCECkKRABVF4IQDOoZFgKWQiICCIDiyiIMAFYhQAIN
-CgQAgBYAEBEJAACAu32l0g0v/IogBQgdhQ8IHgAA2FX9zQIAAM92gAAUaUoWgBCt6ELYz3WgAMQn
-vx0YkBaGz3egANQLGwiRAxHMUyBAgAfyz3CAAOgOCYAhCF4A5v2A4KQCAQAb/oDgnAIBABDMRCAA
-igwJwf96/gomAJB+AgIAA9gRp4ECAADPcqYA1AQsEgGANBITgDgSD4DLEhAGanLGuulwhCACAAa4
-BXpqcIQgAgAEuAV6BCGADwIAAAAnuAV6RCcAHA24BXrpcIQgDAAOuAQhgQ84AAAARXgluQV5RCeA
-EBS4JXiIuEQnARJBKcGAUiBABRGmVB5CEMohgg8AAP//yiGBDwAAEB86ceq4yiGCDwEAiA3KIYEP
-AABwF1pxNoY/tgQjgS//AwD/KLk2ph4OIAEA2phwqB4AEGsPnhREFoEQUYag4dEi4YIt8gQig48A
-AAABCPLPcIAAwEQoYBUIkwAEIoAPAAAAJDsIgA8AAAAkBCKADwYAAADYcDG4JwjVABMIkQAP689w
-gADARChgFwiRAATrzOEH9raGMnXMJI6Ey/cTCgUhz3GAALgMFIEB4BShAd0e8M9wgADARClgBusJ
-CZIAKw4RAM9wgADwWAaQHwhCABcK3gLPcIAA6A4IgAQgvo8ABgAAA/IA3QLwAt1UFoAQz3KAAEBv
-KBrABOuiB7hPIAECCJIleAiyFoYwGgAEMYYcsgQnjx8IAAIALaLXdwgAAAAoDmEJyiBBAxaGvaaF
-6AoOQAlW8M93gABsBACHHuhUFoAQGugRhgDZjbn6DCABINojlwIgTQARhjaG6gwgASDaFw0lEAhx
-EL3PcAAAeB4qDi/8pXm9hs9wgAA8DwGID+jPcKAA0A8ZEAGGQiEBCIDhyiEsABaGSOAXCQQAz3Cg
-ANAPgBAAADaGCwkAAIC9vaZTJX6QGvLgvc91gAD4WQzyiiDFCxILL/yKIZEFAIUB4EMF7/8ApQmF
-AeAJpQz9z3egANQLCvCSDI/9+vExFQCWyglABkB+ANgQp0kHT/zxwOHFCHXPcIAAkGkLgM9xoADI
-H2TgHqEQ2A6hAdgVGRiABfDaCy/8aNgBhYPo+QsewAGFwbgZCNEAz3CAAIgEIIAGgQHgBqEA2BXw
-AYUTCB8Az3GAABRpHYGCuB2hAYURCF8Az3GAABRpHYGEuB2hAdgFB0/84HjxwM9wgAC8bwoML/wY
-2c9wgACkb/4LL/wY2dMBj//geOB+4HjgfwDYocHxwDIOb/yYcRpwmnLPcoAAAAAAgqLBNQjeAQGC
-57hA2M8g4gfKIIEPAADQAM8g4QfPcZ8AuP8doQSCAeDTuASiBSCAD9D+AAAWoc9xgAAEdiaBANiB
-4cogIQDPICEDenAKIACEANon8oQgAw+MIAKFz3GAABRpD/TPcIAARAUAgA8IngAg3Y4RAQEI8Jjd
-ihEBAQTwXhEBAQ7dz3aAAGxxAIbguMAlIhGwei8iSCBKJ0AgCfDPdoAAbHFApvpySHVIcFpyz3GA
-ALSJIIETCdEAz3GAALSJI4ETCd8AANg6cNpwG3C6cHnwz3GAALSJwBECADgSjwA3EoEACL/leTkS
-jwAQv+V5OhKPABi/5Xk0Eo8AQCESBDMSgQAvIogkCL/leTUSjwAQv+V5NhKPAM9yoAD8RBi/5XlA
-IRUBXYIA2ea6zCMigAjyLyJIBTpx+nHacRtxQ/BPI9MjiHHGuc9ygABgR/QiQwANDN4CPGt0eTB7
-IrvPcoAAoGnois9ygAAoUgPjz3EAAPz/Ar/0f+JiQCISISR7LyKIJA8KngR7e0AiEiEvIogkQCXC
-IUR5CCNCAAIiWADguMAlIREHbQQggA8AAPz/EHPKIwwAAiMWAHpiUHqKIQIgAhQAIUAiASUVCQMA
-AiCABIDgyiAsABB4A/AA2EDALyBIBIhxSnPeDGABSiQAADtwgODKJSIQyiAiALz0NQkQIM9woAD0
-B62gz3CAALSJwBABAFuJGokIukV4BLZdiRyJCLpFeAW2AIaBuACmBPAA2AKmTCcAoJDyAIZxCB4A
-z3CAAExpLIjPcIAAwEQoYB/aPQh0AADbz3UDABQAdn3PcaMAsP9Q5SVlz3cDABgAdn9Q5yFnLy1B
-EwHjLylBAKJ5UHHKIkUA0QsEgAW4QiAACBpiz3CAAGRISGAhhk8j0yMJuAV5AoYleAKmanAFIAAE
-DXEAsQ1xAMAAsQwUASANcCCgEBQBIQ1wILAKcIwgAoUU8owgA4Eb8owgA4Uh8gXYCiHAD+tyz3MA
-ABkMiiSDD3kDL/u4c89wgACIBCCAD4EB4A+hogrgAIpwEPDPcIAAiAQggA6BAeAOoQjwz3CAAIgE
-IIANgQHgDaEAhgfoIoYNcCCgANgAps9xoAD0BwDYKQkQIAehAdgLoQPYCKFMGYAFAdgD8ADYqnEL
-copzKglgCQAUBDDPcqAA9AcA2SSiAd2A4AHYFglgCcB4AMEAIYAEz3GgAMgf+BECAEJ4gODKICwA
-X4EQeEkIhAAMFAIgz3CAAGBxQqCg2A+hANgfoc9ygAA8D89wgAAUaVWKHJBCeADCWGAfoQLYFRkY
-gA0JEDBRIEDGINgD8oDYDqEKcIwgA4UH9M9wgAAUaRyQCPCMIAOBCfTPcIAAjGkNkB4Pb/8A2Q4J
-T/8QzIQgBoAK9IwgA6EA2M8goQPKICIBEBocMM9wgAAAAACADwjeAc9xnwC4/wDYHaHPcYAAbHEA
-2AChqXAI3BcCb/yiwOB48cDyCW/8ANkIdQGAwbiD4MogQSAG8qlwuP4IcUogQCAhCVAAEIWJCJ4B
-EIXPdoAAFGk3CN4Bz3CAAFgPFIgZ8AHbAN828ADfVSZAGulxz3OAAPxDEgzv/pDaQCUAEpweABAE
-2ybwBYUmhYIIgACUHgIQEwjeAR2Glbgdph6Gl7geph+GBCC+jxBwAADKJyIQ6fWcuB+mz3CAAHiK
-AICrCF6AEIWjCF6DAd/Q8QDf6XPPdoAAFGlUFoIQz3GgAPQmz3CAAGBxkerPcoAAcmnclvQiwgPa
-Ys92gAA8D9WOwnoQuoC6AvAC2kOhJYUhoBUIESDPcIAAiAQggAaBAeAGocIPD/9RAW/8aHDgePHA
-4ghv/ADZosEIdZDYQcABhcG4g+DKIEEgB/KpcHT+CHFKIEAgz3CgACwgBoAA3xB4NwlQADCFZQme
-Ac92gAAUaTyWEwkDACWFz3CAAGBxAoAQcaX0EIUVCN4Bz3CAAFgPFIgI8AHYOndB8AWFJoVuD0AA
-P4YEIb6PEHAAAJQeAhAO9M9xgAB4iiCBkQleADCFjQleAwHZQMFE8EohACAi8ItwA+gC2kCgA4OD
-uAOjBOkAgaa4AKEsFwAABKMMFwAABaMAwVUmQBrPc4AAAESKCu/+AcIfhp64H6ZAJQASnB4AENIO
-D/8A2M9zgAAUaVQTgQDPcqAA9CbDCREAz3aAAHJpfJP0JkEUeWHPc4AAPA91i2J5ELmAuVLwQMcA
-2TpxpQjfgU2FBYXPc4AAtImBwQQigg/AAAAAAoM2ukAlBxJAIwULQQiOAAWV54NCIAYE9CWAAAgn
-jxEtCMMDz3CgACwgD4CQ6M9woAAsIEaAHJYzCIWAz3CAAGBxQoAFgyMKAIADgzUI3oAA2c9woAD8
-RJ65IaADg6O4A6OO8c9ygACIBCCCC4EB4AuhIIKKIEULEgvv+yuBcvEC2SOiRYXPcYAAYHFBoRMI
-ESDPcYAAiARAgSaCAeEmomkHL/yiwPHACg8P/Ah2EcxTIECACvIGEgE2ANiYEQEA9g6v/ghyAYbB
-uIPgyichEMolwRMG8slw9/0IdQHfgeXKI2EANfIQhg0InwEA22hxMPAQzEUI3gARzFMgQIAR9BnI
-AdoAIIEPgACIY89wgACAexKIQKnguMAPYv7KIIIAENgQGhwwz3GAAPhZEoEB4BKhCN3d8c9wgAB8
-WSuAAeEroEYK7/uKIMUJANsB2QLYz3KgAPQmA6JDhs9wgABgcUGgiO/PcIAAiARAgAaCAeAGognp
-ANieuM9xoAD8RAGhANgFofoMD/+RBi/8BSNAA+B48cAiDg/8CHYBgMG4g+AA3cogQQME8slwwv0B
-3QDZWQhQABCGUQieARDMz3KAAABZMwheAUDYEBocMFASAAYB4FAaGAAZyM9ygAAIYxR6IKoCEgE2
-ANiYEQEAyg2v/ghyCvCkEgEAAeGkGkAAignv+4ogBQoC2c9woAD0JiOgI4bPcIAAYHEhoIjtz3CA
-AIgEIIAGgQHgBqFSDA//8QUv/ADY4HjxwM9ygAAUaVQSgQCT6TySz3KAADwPVIoA20J5ELlFIUIB
-z3GgAPQmQ6HPcYAAYHFhoZP9geDKIGEABfIKDA//ANifAE//4HjxwEEpAgHDus9zgAAcSEtjRJAE
-IoIPAAAAgNdyAAAAgAHawHpVe0GQBOIhC4AAjCEChAn0z3KAABRpVoKMIgKGBPIQ2FMAT/+MIQKM
-IvIO9owhAoBC8owhAoRi8owhAoiA9Lf+MwBP/4whA4QV8gj2jCEDgHb0qP8fAE//jCEDiMwhgo8A
-APAAbPTM/wsAT//u/gcAT//PcoAAAAAggjcJHgEhguS5QNnPIeIHyiGBDwAA0ADPIeEHz3OfALj/
-PaMkggHh07kkogUhgQ/Q/gAANqNW/8MHD//Pc4AAAAAggzUJHgEhg+S5QNnPIeIHyiGBDwAA0ADP
-IeEHz3KfALj/PaIkgwHh07kkowUhgQ/Q/gAANqLCDUAAfwcP/89ygAAAACCCNQkeASGC5LlA2c8h
-4gfKIYEPAADQAM8h4QfPc58AuP89oySCAeHTuSSiBSGBD9D+AAA2o+IPQAA7Bw//TXGqD6/7iiCF
-CG3x8cDKCw/8z3WAABRpH4UEIL6PAHAAAC3yLykBAM9wgAD0BPQgQACkFQEQAN6cFQIQgrjJc039
-HegfhSsIngfPdYAAgHsQjS6NIwkAABKNHwjfADCtmgxv/gPYEo2EuBKtBfDPcIAAjHXAqHIOgADJ
-Aw/84HjxwOHFeg4v/wDdz3GAABRpHYHnuFT0z3CgAAQlooAEJY0f/wBfb1MlgBB7CNEBdwqeUx6B
-bwifBgQgvo8AHgAADfITCp5Az3AAAA0KBgjP+/nxUSIAwM8lYhHPcYAAFGkegREIXgaIvYy9i72O
-vRvwIwjeBh2BiL2JvY29BCCADwIAAACLvY69UiBABCq4BX0J8Py4xSWCHwAAAAXn9YUlHBDPcIAA
-oGkIiMS4GLhRIIDEBX20CuL7yiAiCA0DL/ypcOB48cAPEgE3AeEweY+5DxpcMM9xoADQDw4ZGIAg
-EQGGz3GAAOgOKIEdCd4CGQgfAXYMD/3PcIAAlHI02c4I7/vE2rMFD//xwEYKL/yKIAgAz3agAMQn
-Ex4YkM93gADAaaSXqXDiDaAChCADDBpw6XCpcYQhAww6/wh1lP9EJX6UDvIRDR4Rz3GAABRpHYGA
-uB2hAYdqDQ//TfAXCBAgqP/PcYAAFGk9gYsJ3wHW/wbwA9nPcKAA1AsxoA8N3hDPcIAA1G+6DkAB
-ERYAljMInwDuDA//z3CAABRpHYBXCN8BERYFlhsNnwAF2AohwA/rcoojiQDBAe/6iiSDDwTYEx4Y
-kBvYFh4YkM91gABEdBmFBui6C4AAANgZpc9wgAAAAACADwgeAc9xnwC4/wDYHaHBAQ/84HjxwF4J
-L/xN2M9yoADEJy0SDoYJuBoaGIDPcIAAaGkgiKHBB+kB289xoADUC3KhBNkQGliATXGEIQwAjCEM
-gAHZwHk5YTR5AIge4YDgyiVBEAPyQCENAyJ+BfBK2P4Nr/uMuAsIn0T3CR7Gz3GgANAPEBlYgyUR
-AIZgwCURAIYPeQEcAjAAFAAxjCDYgcwggo8AAAcIyiAiAAf0iOEB2MB4+g7gCC5uz3KgAMQnGhIB
-hgQhgQ////8AGhpYgBESAYYTCd4CANmLuRMaWIAa2RkaWID5AC/8ocDxwIIID/zPdoAAFGnPcKAA
-DCQ8gFaGocECIkAAZLgQeIYeBBAQcsogbgHKIc4PyiLOB8ojjg8AAPQEyiQuAGgA7vrKJQ4BAsgB
-gBcIXgcvIIcKjCAChgX0HoaeuB6mz3WgAMQnIRUPlgDZz3CgANQLGIBCIAAIgODKIEwA/OBAAAYA
-z3GfALj/GIGQuBihGIGwuBihz3CAAIgEIIAFgQHgBaEdhoS4HaZGCy//ANiKIMUIqguv+wDZBwMA
-AMILgAKA4JgeABDu8s9ygAAAAACCNQjeAgGC67hA2M8g4gfKIIEPAADQAM8g4QfPcZ8AuP8doQSC
-AeDTuASiBSCAD9D+AAAWoc91gADoDg0N3lGEFYAQBvADhmIOIAAkhl6GRCIBDJQeAhANCREIgNiU
-HgIQCQjeAZe6XqZFCp4BFJZBCF8Bug9ABZzoz3CgACwgD4CW6B6GkLgeps9wgAB4igCADQheAFEl
-QNMB2QP0ANmLcM9zgAD8Q34Jr/6Q2s9wgAAUaZQQggBAKgEGhCICAFIiwgFFukV5z3KgAIgkMKIp
-hR6ACwneAAsIXgIA2gLwAdrkudEgYoIA2cohYgBFeS95JwjfBSMKnlOP6UQiKtML9M9wgAAUaQGA
-CwgeABoMgAID8BoMgALPdYAAFGkehTsI3gQE2c9woACQIz2gBfCGC6/7iiAWAQsIn0T3CR7Gz3WA
-ABRphhUAEc9xgADoDrIKIAMvkRTwAJUEIIAPAADMgBMIgQ8AAMiAC4ULCB4AO/8G8ATZz3CgAJAj
-PaDPcKAAxCcC2TwYQIDPcIAAYHHhoJQVgBAVCN4BHYWVuB2liiAFCeoJr/sA2a7+CHYdhee4n/RT
-JkAQFQjRAM9woADEJxUQAIZrCN4AVgkv/8lwkfDPcYAAfFkNgQHgDaHPcKAA1AsD2TGgENgQHRiQ
-Atg8HQCQz3CAAGBx5ggv/+GgHYbvCN8BERUFlhkNnwAF2AohwA/rcooj1gy9Ba/6iiSDDwTYEx0Y
-kBvYFh0YkGHwHoUXCB4EAMHU2KlyHg9v/wHbgOCECIIAz3CAAIgEIIAGgQHgBqECyAGAPoU7CF4H
-EMwzCN4ABCGBDwBAQAAnCYEPAEBAABDYEBocMM9wgADUbx4KQAEZyAHaACCBD4AAiGNAqR6F87i8
-DgIDHoXwuOALwf4ehQ8I3gEB2c9wgABsBSCgz3GgAMgcANgHoTDYCqHJcJn+AJWEIAMPjCACgAr0
-8gwAA4boA9nPcKAA1AsxoB6FDwjfBACVwg0gBDSVLQXv+6HA4cXPcoAAiARgghsIHwDPdYAAFGk9
-hYK5PaUjgwHhI6ME8CaDAeEmoxkIXwDPcYAAFGkdgYS4HaEgggSBAeAEoc9woAAMJAOAGQjeAM9x
-gAAUaR2BhLgdoSCCBYEB4AWhKQfP/ghyz3CAADwPFIgZYTB5AWkNCIMAAiJAABB4A/AC2M9xoADI
-Hx+hiiAYCA6hAtgVGRiA4H7gfuB4CiSA8AUgRADgIMEHRCT+gEEqxACEAAIALyQC8UIhAQFCIAMB
-6CCiBAQRBAIEEQUCBBEGAgQRBwIEGwgBBBtIAQQbiAEEG8gBLAAlAEQiPoE8ACIARCL8gEAhwQDg
-IMEHQCPDAKgggAEBEYQCARsKASAgwAcEEQQCBBEFAgQbCAHUB+H/BBtIAUQi/IAEEQQCyQfv/wQb
-CAFCIUEAQiBDAKgggAEBEYQCARsKASAgwAfxwHYL7/sA2M91gADIckokAHSA3qggAAUIcQHgTyDD
-ARYlQhBnqooiCAACuTR5x3GAAChSQKEA2kKxxqnA2H8dAhDPdYAAQAXArc9wgABIc4DZYgiv+yhy
-wa3PcIAAWA+BA+/71KjgeKLB8cAGC8/7RcFBKAECB3lBKAMEJ3vGu8dzgABIc5hyAvBnbSCLXQnf
-Ac9ygADIchYiTQDAhe8IgYMUFA4x4pXjD4GTBo2H6IDfz3aAAEAF4a7Pd4AAWA/UjwsIgQOA2BSv
-xo02egAcgAMHjYe5AKvPcIAAQAVgiCCoZ6oB2APwANgM3O8Cz/vxwHoKz/vPcYAA2EghgaPBQsHP
-cYAAfAQVIRAAABAPIC8owQNOII4Hlw8QELJutH3HdYAAKFIGjc9xgADIchZ5AIEikY7mCBxEMMog
-YQAF8otyAsHJ/y7oANgPIIADz3KAAEgFIIISeDpwBCBAgACiBvSA4fwMIgTKICIIz3iKCiAAENkA
-2IohCAACtSClABABIAQhQQQAGEAgz3GAAAhT1nkAoQGhz3GAAOhS1HkAsRAnj5MvKMEDTiCOB7j1
-HQLv+6PAosHxwLoJz/uiwUfBz3WAAOgOIoUTCEEAJpUcFA4xCw5BEIQdghCM6s91gABABcGNgOYA
-2cogQQAh8iGtCQqRAwHYHfBBKAECB3lBKA0EJ33Pd4AAQAUgj1MhRQEZDTIExr0F2AohwA/rcqPb
-dQGv+ookgw8PCZ4BANgM3KsB7/uiwM9xgADIchYhQQHHiQChHBQAMcCvRqkCscd1gABIcwCNB6kA
-HUIRABtCAcrx4HiiwUHBQSgCAgd6QSgBBEd5xrnPcoAASHMqYgPwR4kjCt8Bz3GAAMhyVnlAgfEI
-gYAEFAIxYpHpC4GABokC8IDY4H+iwPHAzgjv+7hwSiRAAJDgyiBqAcoiygfKI4oPAADzANAAqvrK
-IcoPQC2AABR4x3CAAChSxoiMJgKQyiAhAA3yz3OAAMhyFiONA6CFoKEGiBZ7ApMAsohw5QDP++B4
-8cDhxc91gADIc89ygADoDgCCdBUBFk0JAQACkuoVARdBCQEAdhUAFjoP7/93FQEWjCACgAhxFvLP
-coAARAUBggDbDyNDAAK5ZngBohQhQAAAIIEPgAAoUgCBqriIuAChANiFAO/79B0cEOB4z3CAAKBp
-aIjPcoAAqHWMIwKAApJBKAEDDPIZCN8CArt0e8dzgAAoUgKTDyBAAAKzANjgfwSy4HgA2kokAHRI
-cagggAPPcIAArHTPc4AALHU0e0CzNnhAoEGgAeFKJMBzANmoIEACz3CAAOhSNHhAsAHhz3CAAEQF
-QaDPcIAAqHXgf0Sw4cXhxlRohCIHDE8iQwJTIcIAZXrPc4AA6FIVCTIEFHuKIA8MANkgswhzC/AA
-kwDeDyZOEIolzx/GeACzqXNKJAB0ANmoIAAGz3aAACR1NH6klmR9z3CAAKx0GwpBAwDdpLY2eKCg
-oaDPcIAATHU1eKCgAeHBxuB/wcXgePHAAg+P+892gAAsdfQmQxDpu8ojQQDKJCJ0yiMiAOggIgL0
-Js0QCQ1eEgHjPwsVBM91gADoUhR94JUEuIQgBwyJuA8nTxDgtQDdz3eAAKx0dn+gp6Gnw7kleHR+
-ALbPcIAATHV1eECgAvCA2/0Gr/tocOB4UyDBAM9zgAAsdfQjQgDJulBwyiQidMohIgDoIGIC9CNC
-AMm6BwiAAAHh4H8ocOB48cBeDq/7ANmjwQh1AYDBuIPgyiBBAEwPIv/KIEIDIwhQABCFHwieARCF
-z3aAABRpNQjeAc9wgABYDxSIGPAB3gLwAN4C2c9woAD0JiOgJYXPcIAAYHHWDK/+IaDJcGkGr/uj
-wAWFJoXqDM//lB4CEB+GBCC+jxBwAABc9M9wgAB4igCADQheAFElQNMB2AP0ANhAwJQWgBCHCN8B
-TYUFhc9zgAC0iQQigg/AAAAAAoM2ukAlARJAIwYLSQiOAAWV54NCIAQE9CaAAAgnDxE1CMMDz3Kg
-ACwgD4KU6EaCHJYTCIUAz3CAAGBxQoAFgxUKAQCLcAPoAtpAoAODg7gM8AODFwjeAADfnr/PcqAA
-/EThoqO4A6MLgQSjA4EFowDBVSZAGs9zgAD8Q6YPL/6Q2hGFz3GAAEQFAKFBKA8Dw7+UFoEQQSgF
-BRRp5XiYcA8J3gEdhpW4HaZ68Im4nf/xCBUEz3GAAEx1lBaCEPAhAQBAKgMGhCICAFIiwgFFukV7
-z3KgAMQnQRrYgAIlQ4DAI4QPAAAAEAy/13MAAAAIkL9R9gUnTxFiGtiDjCMCgMj2z3GAALgMDIEB
-4AyhANiduEjw5XliGliAVQ7DcAAAwA8OI4IPAAAAEM9xgACsdBZ5AIEnCjUIBBEFAADbDyODAGG7
-TiIPCAEowQNYeGV4AC2DAGV5FfBCIgIIANkPIYEAYblYeAV5iiD/Dwvwz3OAALgMTYOKIP8PCHEB
-4k2jAdvPcoAAiHVkqs9zgADIc+MbHAFyGxgAcxtYALrxANicuD+GJXgfpkAlABLrBe//nB4AEOB4
-8cDmC4/7GnDPcIAAAAAAgKLBQwieAc9wgAAAAAGA5rhA2M8g4gfKIIEPAADQAM8g4QfPcp8AuP8d
-os9xgAAAAASBAeDTuAShBSCAD9D+AAAWohHMVSBRJO240SBigAryBhIBNgDYmBEBAJYLL/4IcgQQ
-ACCK6M9woAD8JQOALyFIBDC47QkFgAARACBBwAQUADFBKBIDQBAAIAYUEzGLCJ4BEcxvCN4CQBAA
-IM91gAAUaREI3gHPcIAAWA8UiAjwFBAAIBgQASAmCs//57iUHQIQyiRhIAzyHYUA3pW4HaWKIAUJ
-7g4v+8lxmnaUFYAQz3GAAEBxBLgmkQUggAQvCEAAz3KAALgMIIIA2AHhIKIM8M9wgAB8WSuAAeEr
-oLYOL/uKIAUMANiacAIQACGMIAKFRfQA2QQQACCM6M9woAD8JQOAQCECIVB6MLjrCgWAAN5KJAB0
-AdgocqggAATwIQ0gAeBTJQMQL71EJY0QZX1be3h9pX4B4gQQAiCL6s9yoAD8JUOCViEDInB7MLrt
-C4WAAN8P8PAhDSA7fwHgAeFTJQMQL71EJY0QZX0ALc8TRX/nCTSE6XIW8AIQACGlCBEHBBAAIIzo
-z3CgAPwlI4BAIQAhEHgwuesIRYAEEQ4gCBEPIM9wgADIc+AQAQAUEAAgRCk+BwAhjX+AAMhzAKUY
-EAAhAtkCtc9wgACgaQiICK0JHYIUz3CAAEBxCh3EFMOlBJDkpQq1z3CgAPQmI6AMEAEgz3CAAGBx
-IaDCCi//CnA7CFEAz3CAAAAAAIARCJ4Bz3GfALj/ANgdoQHZevDPcIAAAAAAgA8IngEA2c9wnwC4
-/z2gENls8EkMECDPcKAAxCzHoM9xgACgaeigKIlAKgIjELmfuUV5QSsCIUV5JqARzB0I3gIQ2au4
-EBpcMBEaHDDPcYAAdFoCgQHgAqEGCI/+EcwRCB4DCNmsuBEaHDAD8ADZZwwQIM9wgADIc+AQAADP
-coAAyHPPc6AAwC8B4OAaAADPcIAAoGlIiEAqACMQukV4QSsCIUV4RxsYgM9wgABAcUSQz3CgAGgs
-8CCAAAu1jxMChv0K3oFAwgEUgDDGusa4GK1Zrc9wgAAAAACAEQieAc9ynwC4/wDYHaIocOkAr/ui
-wPHAmgiP+xpwz3CAAIh1BIga6M9wgADIc3IQDQZzEA4Gz3GAALgM4xARB89wgABEBeCAAoE0vwHg
-AqE08GYNL/uKIA4Jz3GgAMQnEREAhgDf7QiegWQRAoZkGdiDAtgTGRiALyiBAE4ggQcT6s9wgACs
-dDZ4oIDBgM9wgAAsdfQgUQDPcIAATHXwIE8ACvDPcYAAuAwBgel26XU6dwHgAaEEEAEgDXAgoAgQ
-ASENcCCwz3GAAGxxAIEG6EKBDXBAoADYAKHPcIAA6A4IgOu4yiBCA8ohggPKIsIDbAji/MojQgRT
-IcAgz3GAAEQFIIEUvwy45XgVCZ4AgrgNcQChDXCgoA1wwKAe8A1xAKFKJAB0qCDAAkQlgRAPuVMl
-ABAleA1xAKEivUokAHSoIAADRCaAEA+4UyYBECV4DXEAoSK+uQdP+89ygACsdM9xoAAEJU+hViIA
-BBGhViIABRCh4H5KJAB0ANmoIIACANrPcIAALHU0eECwAeHm8eB48cAaD0/7z3aAAAAAIIahwTUJ
-ngEhhua5QNnPIeIHyiGBDwAA0ADPIeEHz3KfALj/PaIkhgHh07kkpgUhgQ/Q/gAANqLPdYAAQHFE
-lc9xoABoLPAhkgDPd6AAwC/HCBAAL43PcIAA8FPPcqAALCA2eCKIz3CAAOgOOBAQATwSEQAOjYDg
-oAApAMohqQCMIQGklAAlAMohJQEA2AWiUNhFIUECGNr2C+AAINv4uAjZPPQD2M9xoAD0BwWhhNoN
-cECwQiEAKA1yALJAhQ1wQKBClQ1wQLDPcIAA6A5AgA1wQKDPcIAA6A5CkA1wQLAGlUAqAiXDuAy4
-grgFeg1wQKAA2AShDo0B4A6tMgjgAApwAIYPCJ4Bz3GfALj/ANgdoQHZHPAA2QDaSB+YkEkfmJAG
-lc9zgAD4WQy4n7gFIIAERx8YkBmDAeAZowCGTq0NCJ4Bz3CfALj/XaAocB0Gb/uhwPHA4cUA3Qrw
-RC0+FydwHNkuDC/7xdoB5c9wgADIc+AQAQDpDUSQGQZP++B48cCaDU/7CiIAgM9wgADkdQWAJvLP
-caAAyB9AEQ8Gz3WAABRp3JUKus9zgADoDl5maROCAPB/Qn5AFQIRX2cIJs4T4n7RcMomCxAC2BUZ
-GIDfoSKDz3CAAGBxIqClBU/7ANnPcIAAYHEgoCGg4H8ioADZz3CAAGBxIaDPcIAAFGk8kM9wgAA8
-DxWIz3KgAMgfAnkfgjB5EHgwcMohCQAweQLYFRoYgD+i4H7gePHAXwgeQ89woAD0ByeAGYAweThg
-A7iWIEIFz3GgAMgfHqEQ2A6hAdgVGRiA2gwv+4HYLwgeQ89wgABMBQHZIaACyKQQAQCauaQYQADK
-Da/9AdjPcYAANA0CgQHgAqHRwOB+4HjxwIoMb/uYcFCJz3CAAHBUVnhoiaKIcHUkAQwAA4iB4I7y
-AYG4cI0IHgHPdoAAkEPHhrKJZMoH7s9wgACQQ2WAKPCD4Mog6gDSatR+z3eAAChSxmcRDp4Vz3aA
-APBTVn7BjgPwAN7HcIAA8FNWeASIsXDKJQkQ0XXKJkkT22OP48oj6gMWanV4z3OAAPBUA2PPcIAA
-CFNWeM9ygADoDl2CAYBFeAQggA8AAAAIBnsD8GOB6LuYGcAAANoK8qQRAAAA2pe6kbiUuKQZAAA5
-DB4Az3CAAOgOqIBTJQ4ABCWNHwBAAAA+vR7luH7Fe5gZwAAbC54HpBEAAIUiAQSMuJG4pBkAAJwZ
-gAAa8P+7coAR8qQRDQCFIgEElrqYuo29kb2kGUADnBmAAJ67cqAI8JS6lrqcGYAAnrufu3KgtQNP
-++HF4caYEA4AGRICNgQmgR8AAAAIO3kEJo0fAAAAECV9z3GAAOhP8CGBAIQpCwoAIYF/gABYjUAh
-AgaYEIMAFQ5eEkQjAQxEuS5iib7JcRnwz3KAAPwEQIIZDh4SHOHCu35hyI55YTCJpX7QfkV5CfDD
-u3x7fmF5YTCJyI5FeYgYgAOleYwYQADBxuB/wcXgeKHB8cCqCk/7CHbouEfA3gAhAEh1E2lAIJAF
-J8LPcYAAwEQEJoAfBgAAAFpwS2ExuAQmgR/AAAAANrl4YM9zgADgSMl3xr8pYwhjOGBBLoESUiEB
-AMC5A7kY4YXgyiGNDwEAiQ3VIQ4ALyFIIAQmgR8AAAAYz3CAACxG13EAAAAIHAAiAPAgwAOg4hQA
-AQDPcUJ70F4FKH4ACiDADgpxBSk+AAogwA4kuAHgDQoQIFMgAQA4YAIpQSPPcoAAJA9VkiMOXhPP
-c4AAKEZgkwUrPgAAIYB/AAD/Py64OGCNACAAWGAVeYUAIABYYem+TgAhACfGt+YgAAsAUyYCEM9w
-gAA0RfAggAADuQUpPgAKIMAOIWgH8IrmwCnhAMApogDPcIAAPA8OiMDaxHhEIAABIrgaerp6NQAg
-ADhiA7lTJsAQHHjPcoAASEXwIgAAFuEFKT4ACiDADs9ygAAkDzWSAeAVeQiSung4YBB4CNyfAU/7
-8cA+CW/7mHChwSh1ANikGQAAz3eAAOgOEqcJyAQggA8AwAAA0Ik5CIEPAMAAABnIz3GAAAhjFHkR
-iZLoz3CAAHBU1ngjiBkJUAAiiAiNEQhDAIhwbgzv/6lx4vCIcOC4gfIBhbhwlwgeARnIz3GAAAhj
-FHkREYQAz3GAAJBDJ4FSjQ94BunPcIAAkEMlgCrwg+DKIOoAMm40ec9zgAAoUiFjEwmeBc9xgADw
-U9Z5IYkC8ADZx3CAAPBT1ngEiFBwyiIJADByyiGJAAAhAAGP4Mog6gM2bhV5z3CAAPBUIWDPcIAA
-CFPWeF2HAYBFeAQggA8AAAAIBnkC8COFmB1AEAiHUyUCAAQggA8AQAAAPrge4Bh6RXmYHUAQFwme
-BwDYjLikHQAQUNicHQAQePAhCd4HANiNuKQdABDPcEABUACcHQAQANieuBKnavAA2KQdABAF2BS4
-nB0AEMDYGLgSp17wowheBwGFhQgeAc9wgACQQweAMo1kEoIwB+jPcIAAkEMlgCfwg+LKIuoAEm4U
-eM9zgAAoUgBjEQieBc9wgADwU9Z4AYgD8ADYx3KAAPBT1npEijByyiGJABBxyiBJAI/gyiDqAzZu
-FXnPcIAA8FQhYM9wgAAIU9Z4XYcBgEV4BCCADwAAAAgGeQPwI4WYHUAQGcjPcoAAOGMVeiCiANgD
-8AXYFLicHQAQUSQAhQDYzyBiBMogIQCkHQAQAsgBgM9xoADAHey4AIHQIOIAzyDhAAChEY3PcYAA
-PEjCuAlhdB1EEM9xgABESPAhAQCkFQAQJXiYFQEQpB0AEBcJXgI7l4C4dh1EEHgdRBCkHQAQEPAo
-h1qXdh2EEBUJ3gA7l4O4eB1EEKQdABAE8HgdhBByC+//qXCkFQEQRCF+gowVghAW8mIXgBBEeEQi
-AgxEIAMBRLrPcIAA2EVbY/Qg0QDPcIAAyEX0IMAADvDDus9wgAAgcFx69CCRAM9wgAAQcPQggADg
-uVpwFvSYFQAQ6LiIFYAQw7gceNEhIoUH8s9xgABAcPQhAAAG8M9xgAAQcPQhAAAglXQVAhEacJgV
-ABBZYXIL7/8A2phwgh0EEAGFCwjeAIQdBBQF8ADYhB0EEBpwmBUFELMNHgKYFYEQz3CAAMBEKWAE
-JYAPBgAAADG4GWESbhR4x3CAAChSQIAEIr6PACgAAELypBUCEJe6pB2AEATauB2CEADaj7q6HYQQ
-QIAEIr6PADAAACryz3KAAJBDQYLPc4AAkENZpc9ygACQQ0aCInoWugUiQgGuuq+6sLqYHYAQZYME
-I4MPAQAAwGV6mB2AEACABCCADwAgAAAouAUghQCYHUARCPDPcAxAqP4ZpQLwAdkEJb6PAQAAwAv0
-BdgKIcAP63KKI1gGYQXv+Yokgw85CVAAguHMIeKAyiBiAcohwg/KIsIHyiOCDwAAJQbKJCIANAXi
-+colAgHPcIAA8FPWeCOIB/DPcIAA8FPWeCKIDrmMFQAQpBUCEAV5hReAEIwdQBAi6EEOA3EAAEYA
-GcjPc4AACGMUexGLlugCyKQQAADsuNEiIYAQ9J4VABGKuJ4dBBDPcIAASHwDiA64BSUFAJgdQBEE
-Ir6PAAAAMErynBUAEZQdQBCSHQQQgB2EFAISAzYhCh4DFNiQHQQQfh1EFHgTAAECIQMgcHuyHcQQ
-EfAO2JAdBBAA2H4dBBB4EwABSiEAIAIiAyBwe7IdxBDPcIAA5GQAgEQggIDRJWGCBvSRupK6pB2A
-EBC4BXqkHYAQEocEIYEPAAAAEFIhAQMleAQggQ8AAAAQPXkleBKnHPCeFQARlB1AEZIdBBB0FQAR
-IJWyHQQRGWG4FYAQOGAQeJAdBBAA2IAdBBB+HQQQANhacDpwACGBJAAhAAECcBB4sB0EEM9xnwC4
-/1ahnBUAEBahAQQv+6HA8cCqCw/7CMjmuAgCAgACEgI2z3WgAMgfKoKkFQAQjCH/jwvyInjXcACA
-AACH2JIAJQDPICUEMIoSaRR4x3CAAChSYIBodIQkDJAf8um7i9jPICIENfSI2JC4oBoAAM9wgADo
-DhiIhODU9M9ygACwQQyCDyBAAAyiz3GAADQIAIEB4AChxvAikDMSgABFCQ4ACcgEIIAPAMAAAC0I
-gQ8AwAAACIonCFMApBIAALS4pBoAAJISAAGnuJIaBAAK8KAaAACo8AGCDQieAY3YkLj58QjIBCC+
-jwAAARB68hoKgAICEgI2CHawEgMBqBoAADWFVSNABtW5z3WAAOR1CQkFAAXYB6UFhSJ45ODKISUA
-0XHKIYoDpBIAAKwaQAC5CJ4ECciYEo0ABCCADwEAAPDDvS8mQQNBKAgDGRINNs9wgADkZLZ4BZAw
-cMohCwB+EgABgBIPAR9nz3CAACQPLhAFAc9wgADoT/AgRwMAJcADCCEBAAJ5A2nPd4AA/EfwJ4ER
-IrgFKT4AUyEBcAAhQA4vJAIAQC9BARUhgQEAIYAPgADUaCCQz3egAMQsL6cBkBS9z3GAAEwFDqdA
-KAAWnrileAUgAAEKpwHYAKEG8KAVDhCwEgMBDQ7FEAXYGLigGgAAz3CAAJQEIJIAkDBwyiELAM9w
-oAAUBAmAGQhFAAPYGLigGgAAz3GAAPhZDoEB4A6hAQIP+whyBCiADwAAL7pCKcB0EHhEKP4CAiJC
-DlB6BOoB4BB4CQozAQCxhOoA2APwgNjgfqHB4cXhxkLBaHXPc6UArP9Yo89ygAAkD9WSSJLaYkJ9
-A+UivbplumKB4soibAAFukUiQgNWo+e4gNjKICEAIsIEIYEPAAAAICW5RXgleIm4jrgZo89woACo
-IAiAwcbBxeB/ocDxwP4ID/vPcKAA/EQFgAQgvo8AKAAAANjKIGEAGnDPcKAALCADgADdBvDPcAAA
-KA7SDY/6z3CgAPxEXYAEIoAPgAAAAAQigw8gAAAABCKODxAAAAAJCBAgCQhfRgDZA/AB2c93oADQ
-G/GHBCK+jwA4AAAEJ48fAAAAgMwhIYDAJWEQZXjleAUgvoME9J8NlJIF74DjzCYhkFPyz3WgAPxE
-GYUVCN4Az3GAAPhZDIEB4AyhRPBTIL6ACPLPcYAA+FkLgQHgC6E68HEI3wEI689xgAC4DAmBAeAJ
-oTDwIO4VCp4Gz3GAADQNBIEB4AShJvATCl4Gz3GAADQNBYEB4AWhHPAF2AohwA/rcs9zAABODkok
-AAARAO/5CiUAAc9xgAC4DA8IngEagQHgGqEG8ADYBaUKgQHgCqEA2Ji4IPDPcKAA0BsRgPC4yiAh
-AMwPofrPIKEDz3CgAPxEOYAGgAsgQIAN8sYIb/0B2APZz3CgAPQHKqAF2Ji4AvAA2OUHz/qhwfHA
-dg/P+qHBR8EIdkh1aHcEIZEPAQAAwAogACFjCV4CAtnPcKAAyBwpoCfBU23u4VB4BPSLcW3/GfAP
-CdENG3gQeItxav8Q8AsJEQUceAnwDQmRAgAchDAH8M9wAAD//wAcBDDgeADYz3KpAKT/uaIAFAEx
-grg3ohqiLPAhCR4CTCAAoNEm4pHKIIEDyiJBA4wN4f/KI8EDHvAnwIDgyiBhAcohwQ/KIsEHyiOB
-DwAAzg3KJCEA7Aah+colwQAFvaV4z3GlAKz/FqHPcKAAqCAIgGv/CiUAkBL0Fw7eER0IESAB2M9x
-oAD0BwyhA9gF8APYz3GgAPQHBaHPcIAA9AUAgAfoz3GAAIgoBYH4YAWhz3GAAPhZCoEB4AqhDw6e
-EiIL4ARBKYAjqXAI3K8G7/qhwPHAUg7P+gh1z3aAAEwFBoYtDQAQz3CgADguBYAEIIAPwAAAAA0I
-gQ/AAAAAEQ3REfXYBbi2DK/6qXGmpoEGz/rxwBIOz/qkEQAAKHbyuADYMfLPcoAATAUggoDhMfIA
-ooAWABF+Fg0RHWXPcIAAJA8XkB1lBfDaCq/6iiCFCPsJnsXPcKAAxCwLgFMggQT+uMwhIoAN8pgW
-ABD+Cq//ANrPcYAAJA8okSJ4uGAJ8ADYB/AZyM9xgADkZBZ5BZGsFgIQiOikFgEQsbmkHkAQBfAQ
-csoiCgAD2Ri5z3OgAMgfL6P4Ew0AIW0IIkEAonmgG0AAANmYuS6jxQXP+uHF4cakEAIACHEVCh4G
-thEBAc9woACYAz6ggPDMcACQHLHMcACQHbHMcACAD6HMcACQQBkEAMxwAIARocxwAJBIGQQAHJFE
-IA0DNw0QERjbchnEAMxzYINzocxzYJNQGcQAzHNgk1QZxAATDRESCHOEIwwAjCMMgAzyGN4U8BDe
-chmEAwDdz3OAAPhvp7MM8B7echmEA8xzYIN2ocxzYJNcGcQACHOEIwIDjCMCggn0AubQfnIZhAPM
-c2CTAvAA22AZxAAJDl4QzHNgk7gRgwCgkdtjcHtyGcQAwn2wfboRAwFwGUQDSHSEJAyQZXgcsQvy
-zHAAgGi9GqHMcACAsH1wGUQDG6GYus9woACYA6QZgAAegLYZBAB5AY//PJAIckQhAANNCBABGcjP
-c4AAwGP0IwAAJXgcsgGCFwheA1QSAQG8EgABw7kleFQaBAAJyM9xgAD4bwQggA8AwAAA13AAwAAA
-ANjKICIAzyDiAgex4H7gePHAygvv+gDbBhIBNs9wgADoDmoQEAEZEgI2z3CAAOhP8CCAABARkQCE
-KAsKACGAf4AAWI2acEAgEwIREg03QCASBqlwhCA/DhEaHDACyIYYxACkEAMAhLukGMAAAYCiwQkI
-nwOgvbB9UyV+kN4CAQDPcIAAdFoHgM9zgAB0WgHgB6MA2KQZAADPdqAAvC1OpgTwTgiv+t3YD4b7
-CN6FT4ZTIsACTQqeBRUIlQPPcYAANA0Bgba6AeABoRzwZLgGEgE2EHiQGQQAANh0GQQAALEEIoAP
-AAAA8Cy4EKkCyGGARCMDAoS7YaEA22ipEogSqfa6WgIBAADYlrgGEgE2pBkAAD0KXgXPcoAAcFQW
-IkIEA4otCFAACIlCiiUIgwA6Dm//ANgGEgE2pBEAAAQggg8CAAAALbqlelB9S/ABgb8IHgHPc4AA
-kENng9KJUIlkygbrz3CAAJBDBYAo8IPgyiDqAHJqdHvPd4AAKFJjZxMLngXPc4AA8FNWe2GLAvAA
-28dwgADwU1Z4BIjRcMomCRBwdsojiQOP48oj6gMWanV4z3OAAPBUAGPPc4AACFNWe0GDz3OAAOgO
-fYNlegQigg8AAAAIRniYGQAAANiWuEGBRCIDAkEIHgWhCxAAmBGCAEAkAClKYM9zgABAcEDCIMDD
-uBx49CMAAFLwBdgKIcAP63LPcwAAhgqKJIMP9QGv+UolAAAA2pwZgACYEQIASQpeAoC4pBkAACjr
-mBGAAEQgAAxEuDIiAiDPcIAA6A5iEIAAibpAwiDDZHhEIwMMRCAAAUS7eGAPeM9zgADIRfQjAAAe
-8BMKHgII65gRggBAJAApSmAL8IXrANgIchDwmBGAAMO4HHgyIwIgQMIgwM9zgAAQcMO4HHj0IwAA
-hBkEAJgRAACIGYAAkBEBAXoOb/8A2gYSAjYCEgM2z3agAMgfhBIBAYIaBAAZYTB5sBpEAPgWABCw
-Ew8BAn/PcIAA6A5kEAABAncfZz9noBYOEPB/Ww7EE892gADoDtKGmBMPAAsmwJMj9FCK0IvRctEn
-IpIR8pgTjwDPcoAAwETqYhcKkgACvs9ygAAoUtR+wmIfCl8EOGAQeIYbBADPcYAAdFoIgREaXDMB
-4Aih1QDv+qLA8cCOCM/6z3OgAMgfoBMEAPgTDQBHCBEBAhIBNqQRAAB2EQIBDwgeBc9wgAAwccGA
-A/CCEQ4BEczkuIQRAAEK8gImQRMCJE0AsXDKJQkQBfCGEQ0BHWWpcWLwiQhRABESATcCyHgQAgE5
-CR4B4bnPcYAA6A5kEQEBCPJ+EA4BIn6ifgIkjQMn8IAQDQHQiAAlRBDPdYAAcFTWfaCViHYX8KQQ
-AQATCR4FsIjPcYAAcFS2ecCRA/CCEA4Bz3GAAOgOZBEBAYAQDQE9Zb5mhBANAd1lgBAOAdlhfhAO
-AUJ+IPDPcYAA6A5VCJEAAhIONhHMeBYCEWQRAQETCB4BgBYAESJ4ongCJA0AB/CCFg0RhBYAET1l
-HWWAFg4RQn4RzOG4z3CAAOgOaRCPAAzyAsh2EAIB4no6YgzwAN2pcql2jfENDXIQ4npqEAABGmL4
-EwEAWGYieD+DGwhEAKDYD6MA2B+jX6MC2BUbGICA2A6jiQev+rB4z3GAAPhZDYEB4A2hGcjHcIAA
-JGMsiAHhL3ksqM9wgADwQwKIFQhDAIogCAAIGhgwz3ABCAAADfAD2c9woAAUBCOgiiAQAAgaGDAJ
-2Bi44H7xwOHFz3CgAPxEvYAEJb6fAAYAAADZB/QCyKQQAAC5CJ4GA9nPcKAA9AcqoCMNnhYCyM9x
-AwCEAKAYQACKIAgACBoYMIogBABaCm/6ANkZDV4W2P8CEgI2CHGgGgAARgpv+vzYAhIBNiMN3hRv
-IEMAoBkAAIogCAAIGhgwiiBEAiIKb/oA2QISATYlDZ4UANiXuKAZAACKIAgACBoYMIoghAICCm/6
-ANkCEgE2pBEAABUIngYF2BC4oBkAAIogCAAIGhgwz3CfALj/WBgACKARAAAD8ChwbQaP+uB48cDy
-DY/6/ghv/wh2xv9A2Qh1z3CgAMgfL6BAEAEGMHkiCq/9yXA5Bq/6qXDxwALIpBAAAOC4z3CAAOgO
-A/IdkALwHJDv/73oz3CgABQEA9kjoCDYEBocMM9xgAD4WRGBAeARoQLIANqYEAEAdBADAZQYQACe
-EAEBkhhEACCQO2O4EIEAeWEweZAYRACkEAEArLmtuaQYQACAEAEBfhADAYAYhAA7Y7AQAQFieTB5
-sBhEAIIQAQF+GIQAshhEAKMAT//geM9xgAAEdiaBANiB4cogIQDPICEDhSADAQPbz3GgAPQHZaEN
-cwCzAsgA2n2QDXBgsALIcYANcGCgAshIEAMBDXBgsESh4H7gePHA4gyv+ghzEIkzEY0AAdpAqxkS
-DzbPdoAAMGPuZs9ygABYY0DcwasZEg82AiIOA/QmzhPBsxkSDjbwIoIDQaNBgSEKHgHSic9ygADw
-UxZ63KtAikQiggNcegS6xXoD8IDaXKsEuKV4Hasckc9ygACgYw+zGcjwIgAABLMJyAWjVBEAAQyz
-AJENs6ARggBIowjIBCCADwIAQQAPCIEPAgAAAIi6SKMIyAQgvo8AAEEQA/KJukijnBECAQ+Bz3OA
-AEwFJrrAusC4DLoNuEV4fQSv+gWj8cDhxQh1AsgHiBsI3gAA2BYMb/qQuADZkrnPcKAA0BsxoIIJ
-b/ow2M9wgACgBACARSAAC5e4mribuOxxAKEByOxxAKEghexwIKAhhexwIKAihexwIKAjhexwIKAk
-hexwIKAlhexwIKAmhexwIKAnhexwIKAohexwIKAG8BnYkghv+ge4z3CgAMAvoxAAhvEIHoEJyM9x
-oABoLAQggA8BAADwLLjwIQEAz3CAAEwFBYCqCm/6JXjRA4/64HjxwOHFCHUG8DHYSghv+ga4z3Gg
-AMAvoxEAhvEIHoEJyEAZGIAZEgE2qXANCZEBZg5P/QPwxP+VA4/64HjxwBoLj/oZEgM2z3KAAAhj
-AN10egISDjagsiGGCwmfA6iyyBpEAwAjgQ+AACRjpKmsqc9xgADkZHZ5IpG4GkQDcBpEAM9xgACg
-Y3V5oKEhhgQhgQ8AAABgIQmBDwAAACDPcYAA6E/wIcEAz3KAAJAENHogkhDhILID2s9xoAAUBFCh
-0f8BA4/6ocHxwH4Kj/qhwSh1WnA6cgQhvo8BAADAGnMs9EDFHw0eEiDBz3CAAMBEKWAEJYAfBgAA
-ADG4OGAC8AHYBCWBHwIAAAHXcQIAAAHKIKEAHwhQABUIkACD4ADYyiDhAcAooQMH8APYDrgD8ADY
-jrgFfUpwHg/v/KlxSnCpcSpyCnNKJEAAovwB3broCtjPcaAAyB8eoRDYDqEVGViDBfDyDi/6iiDH
-Ah0IH0PPcKAA/EQdgAQgvo8wAAAABPTjCx7AUSMAwMogYgHKIcIPyiLCB8ojgg8AANEByiQiANQB
-YvnKJSIAUSAAwwDYCvTPcYAAuAwJgQHgCaEA2Ji4CNzjAa/6ocChwfHA4cWiwei4CHWaACEARMAk
-wM9zgADARAQlgh8GAAAAMboLYwQlgB/AAAAANrh6Ys9zgADgSEpjCGNYYEEtghJSIgIAwLoDuhji
-heDKIo0PAQCJDdUiDgBQcUIAJQAA2O29GAAhAAIhgADPcRxHx3EFKH4ACiDADgPwIripcca5z3KA
-AGBH9CJCAAsN3hI8alR5MHoFKj4AQSmAcAjcYwGv+qLABdgKIcAP63LPcwAA3w9KJAAA9QBv+Qol
-AAHxwMYIj/oIdrCIz3KAAHBUz3CAAAAAIIC2eqHBYJI3CZ4BIYDmuUDZzyHiB8ohgQ8AANAAzyHh
-B893nwC4/z2nJIAB4dO5JKAFIYEP0P4AADanEcwbCF4Az3CgACwgL4CEFgAREHHKIQwAAnkC8Ghx
-sBYAEWTgEHH+AA4AAr3PcIAAKFK0faBgBCCPD4ADAAA3v2W/gOfKJywQBCCADxgAAAAzuA3gAN0P
-JQ0QMHPKIcsAAxKQAI4O7/+YFgAQEHXKJQkQmBYCEM9wgABgR0hxxrn0IEEADQreAhxpNHgQeSK5
-ACnAAwPgBCCADwAA/P/PcYAAMHEDoc9xoADAL04ZGIBNGRiECcgZEgI2BCCADwEAAPAsuEAoAwYU
-up27ZXpFfUsZWIPPc4AAuAxbgwK4AeJbozpgFhIChjhgKhAAhgbwz3AAAHgPggwP+vcJnsXPcKAA
-xCwLgAQgjQ/wBwAANL1TIIEEEwieBw8NlBAAlhDgKwhEAM9ygAD4WTuCAeE7os9xgAAAACCBANhN
-CZ4Bz3GfALj/HaEg8BCOz3KAAChSArgUeABi+7jVIUIDz3eAADBxIKeip5gWABBWDC//ANoBp89x
-gAD4WRyBAeAcoRqBHWUB2LqhUQdv+qHA4HikEAEAt7mkGEAAANk5oLgYQgDgf7oYRADxwM9wgAAw
-cQGAz3GgAMgfliBBDx6hENgOoQHYFRkYgBLwz3CgAPxEHYAEIL6PABYAAAjyKwifBh8IXwYjCB8H
-JwsfQM9xoAD0ByeBANjXCd6H8wEP/+8BL/+KIIgAiiBIAOMBD/8B2c9wgABMBSGgig+v/Chwz3GA
-ADQNAoEB4AKhwwEv/4ogCALgePHAUwheQ89wgAAwcQGAz3GgAMgfliBBDx6hENgOoQHYFRkYgDoO
-L/pB2CsIXkMB2c9wgABMBSGgNg+v/AHYz3GAADQNAoEB4AKhbwEv/4ogCALPcKAA/EQdgAQgvo8A
-BgAADvL6uMoggg8AAAECSgEC//m4QgEi/4ogiAAD2c9woAAUBCWgANgvAQ//4cUCEgI2IJJBgkDh
-9LrAIaIAA+HPcqAA1AcPEgOGBCGBDwAA/P8VCyUAGWEZyAK4Q3AaEAAGG2MCIc0AGRIAhv0IRIMP
-GliA4H/BxfHARg1P+qjBAN3Pd4AAMHERzAAXFRDPdqAAyB8hhwISAjYhCF4AoBYAEPgWAxBieQ4h
-AQAweUDBdhIBARlhBvCEEgABGWFAwADAHbIfhhUIRQAweM9xgAA8D74Ir/41iQHZz3CgANQHNKAz
-oAPZLaAREACGz3GgANQHO3BA4A8ZGIAUGViDAsikEAAACwgeAloKAAED8EceWJPPcKAA1AcNEACG
-AMEQeBC5BSESAALIIYAAEBEBQcG4EIEAchACAUPBAiJTALoQAQFZgETBz3GgANQHiBmAAGv/CcjP
-cYAAQHEEIIAPAQAA8Cy4AhIDNgSxD4OuqQChQBMAAQolgA+AAKBjArEQi2ATAwFUaMO7ZXpGsRkS
-AjbPc4AAhGMPqQGHVXtHgxpiR6OkFgIQz3GAAAhjWGD4FgIQQnhFwM9yoADUCwHYEKICh89yAAD8
-/wK4K+AEepe6mrrPcIAAoAQAgJu6RXjscgCiARICNuxwQKBCh+xwQKgZyBQhAgBQiuxwQKjscKCw
-GRICNlYhgALwIIIA7HBAoBnI8CUCAOxwQLDscKCw7HCgoOxwoKAJEgI27HBAoALIQJBUEAABELpF
-eOxyAKICEgM2AYMfCB4BUotwi89wgADwU3Z4AIhEIIADHHgEuEV4AvCA2OxyAKoCyFCIMxCAAAS6
-RXjscgCq7HCgsAISAzacEwAB5rgA2s8iIgPKIiEAb4PPcIAATAXAuw27ZXpFoBnIAN8AIIIPgAAw
-Y6Cqz3KAAORkFnoUeaCxQpK4GUQDFSUAAKCgz3CAAOgOcBmEAByQyBlEA891oADUBwDeRsAA2ELA
-SiAAICfwhe8QzCMIHgDPdaAA0BsRhfG4yiAhAPwKIfrPIOEDANiRuBGlANnPcKAA1AcUGFiAAsgB
-5891oADUByiIAeEoqAkSATbPcKAASCw9oM9wgAAwcQKAEHeIAgYAgOeD8vP+BSAAhEACIgAacA+F
-EHgZFQGWWOArCQUAD4UQeBkVAZZY4A0JBQCEFQAQ7wjVjA+FEHgZFQGWWOCpCQQAHh2Ykx0VAJYG
-EgE2CRoYMB0VAJYAwkfAHRUAlhC6ALEdFQCWQCYDEgGhViYAEh4dGJAdFQCWEHgFIJIAANrPcKAA
-0BuRulGgz3CAAEQDEHjPcqAAtEdJGhiAz3CAABwFYKDPcIAAIAUgoG8gQwBUGhiAz3CgANAbEYAR
-CF8EANj6CS/6j7gGEgE2AYFBwEpwhCAMAIwgDIAAEREBDfIa2Azwz3GAAPhZHoGKJxARAeAeocnw
-INh6cAhyA8BYYBB4chkEAAHAKnH2uMAhIgPKIIIPoABICMAhIQHKIIEPoABMCBtwA8AAIFYABMFK
-cAUgUgBAJsAhBCCXDwAA/P/PcIAAMHEDgAgnACCacBLv5w0EIML+BSAAhBpwdvQB2BQdGJBVJkAU
-Dx0YkAEKH0LKcM9xoADUBxWhABiANAIhwSTPcKAA1AcvoIpwAiDABc9xoADUBxuhA9nPcKAA1Acw
-oAIlFSUCyBnvCIgKcci5DLgFeexwILADzOxxALECwAHgQsAHwAISATYBGhgwBsgGGlgwO3YCGhgw
-IYAAkFYhDjI0ucC5NHgD4M9xAAD8/yR4HmYZEgI2BfBDcRoRAAYCfjJqACJAMBoQAAbvDgWQA8zP
-cZ8AuP8Yoc9woAD8RD2ABCG+jwAGAAB+BcH/EO+KIBAAFPDPcYAA+FkdgYonEhAB4B2hIfAKdx/w
-CcjPc6AASCyKIggAHaNIcPq5z3GAAHRaCvJPIBAAAIEB4AChz3WgANQH6vFPIFAAAYEB4AGh+PEA
-31MnfpAF9HT+BSAQIAogAIQY8hsIXgACyCmIAeEpqM9xgAB0WgGBAeABoQnwEwgeAM9xgAB0WgCB
-AeAAoQp3AsgKcci5CIgMuAV5A8wQuCV47HEAoel0hCQCkQLAwWgS8oAdQBUDzOlxyLkQuCV47HEA
-oQDYDKUB2BQdGJC2Cu/+AeYCyJIQAAFfCJ4CHg0ABBDZz3CgANAPEBhYgCQQAobPcYAA1G8lkVB6
-ArlFeQwYWIAU2RAYWIDPcYAA1G9nkUaRGNkQu2V6DBiYgBAYWIDPcYAA1G9pkUiRELtlegwYmIAG
-8ADZz3CAANRvKqjPcaAA1AsA2BCh2w8QEM9wgAAwcQKAEQ4FEAja7HBAoAHm9/EJyM9yoABoLAQg
-gA8BAADwLLjwIgAAz3KAAEwFRYJFeA2hA9gSpc9xoADwFwWhDQheIitwR/4I8APYEx0YkADYFB0Y
-kApwIwjeAYoghAGWCu/5CnHPc6AALCAwgwXAMwhFAAHYFvDguMoggg8AAAMB7/XhuMoggg8AAAQB
-6fXiuIogRAHKIIEPAAAHAeHxANhEIIJAL4Pk4QHZyiEmAIDgzCIhgMwhIYDW889wACgIAAgaGDAG
-wKoKL/0A2aTwz3CAAIB7EogxCB4ALQgeQ89wgACAew+Iz3GAADx8ELggiZ+4gOEB2cB5D7kleM9x
-oAD8RA2hCiBAhQzyz3GgANQHgBkAAM9xgAD4WR2BAeAdoQnIz3GgAGgsBCCADwEAAPAsuPAhAADP
-cYAATAUlgSV4z3GgANQLDaEA2M9xoADUBwyh3g9v/wbAz3CgANQHGRAAhsDgpgAOABHMowheAM9x
-oADUBwPdAdggGViDFBkYgADYz3GAABwFAKEA2JG4z3agAMgfEx4YkM9wgADMAhB4z3KgALRHSRoY
-gAbIz3GAACAFAKFvIEMAVBoYgBMWAJbxuMogIQBsDeH5zyDhA89woADUBw8QAoYGEgE2tBmEABMY
-WIPPcBIgAADqC+/+GRICNgbIsBAAAaAWARBk4DBwyiCFDxIoCACE989wACgIAAgaGDARzAQggA8A
-AAIIFwiRAAYSATaKIAQA8gmv/JgRAQAZEgE2z3KAABhjANg0egCyAsg+DWACGpDPcIAAAAAAgBEI
-ngHPcZ8AuP8A2B2h0QQv+qjA4HjxwOHFAsikEAEAmBACAOC5chABAUhwB/LiCe/+ANoIdQbwAeHW
-Ce/+ANqsaPoJgAHPcaAAyB/4EQMAAdgToViBOYECJcAQWGAQcsAhbQANcgCiDXAgoMxwAIDMcACA
-AsjPcqAA9AdwEAEBaLknonAQAQFouTB5tQQv+nAYRADgePHAz3CAAAR2BoAA2YHgyiEhAM8hIQPP
-cKAA9AcZgIDgyiBiAcohwg/KIsIHyiOCDwAAVQnKJCIAHATi+MolAgECyByQJXgNcQCxAsg9kA1w
-ILACyC+ADXAgoALIQBABAQ1wILACyDGADXAgoALISBABAQ1wILACEgE2HJFEIAADPwgQATOBDXAg
-oALIUBABAQ1wILACyFQQAQENcCCwAhIBNhyRhCAMAIwgDIAJ9DaBDXAgoALIXBABAQ1wILACEgE2
-HJGEIAIDjCACghD0YBEBAQ1wILACEgE2pBEAABEI3gU5gQ1wIKACyBj9AhIBNqQRAAARCJ4BAYEr
-CB4Eof+jBo/+OoENcCCgAhIBNqQRAACEIAyAB/I7gQ1wIKCHBo/+gwaP/uB48cAB2M9xoAD0Bwuh
-A9gIoc9woAD8RB2ABCC+jwAGAAAt9OB44HjgeFMIXkMCyM9xoADIH7AQAAGWIEEPHqEQ2A6hAdgV
-GRiA2grv+UHYLwheQ89wgABMBQHZIaACyKQQAQCauaQYQADKC2/8AdjPcYAANA0CgQHgAqHKC0//
-/wWP/uB48cB2Cg/6pBEAAKHB4LjPcIAA6A4odQTyG5AD8BqQdh0EEJgVABAEIL6PAQAAwC70QMAf
-CB4CIMLPcYAAwERJYQQggg8GAAAAMbpZYQLwAdkEIIIPAgAAAddyAgAAAcohoQAfCVAAFQmQAIPh
-ANnKIeEBwCmhAwfwA9kOuQPwANmOuSV4mB0AEJQdABCeFQARkBUTEZIdBBCCFQARz3agANQHsh0E
-EADYgB0EEH4dBBAZFgCWIQg1DhAVkhARzM9xgAD4WYQgdw0RGhwwFYEB4BWhn/APFhGWARIQNgHZ
-z3CAABwFIKAA2JG4z3GgANAbEaHPcIAAzAIQeM9yoAC0R0kaGIDPcIAAIAWgoG8gQwBUGhiAEYEJ
-Eg828bjKICEAfAnh+c8g4QOkFQAQRQifBQkSAjYCIsEDANgRCVAAAieBEIwhw48D9AHYlOgRzM9x
-gAD4WYQgdw0RGhwwFIEB4BShDx5YlAka2DMBGhg0UfABGhg0EY3PcYAAPEjCuAlhCRrYM3QdRBDP
-cYAAREjwIQAApBUBEHQVBREleKQdABAAlaBwEHiQHQQQcnDKIGIByiHCD8oiwgfKI4IPAAAEB+gA
-4vjKJMIEEBWEEAwiAKHKIGIByiHCD8oiwgfKI4IPAAAFB8QA4vjKJYIEDxYAlrQdBBBCCy//qXCk
-FQAQhCAagHQLYvvKIEIDDx5YlMEAL/qhwPHAcggP+hnIz3eAAOhP8CcAEM9ygAAAAIQoCwoAIY1/
-gAC4jLQVARbPcIAA5GQgoACCQwheACKCCcgkeCOCNwhBAAGC4bhA2M8g4gfKIIEPAADQAM8g4QfP
-cZ8AuP8doQSCAeDTuASiBSCAD9D+AAAWoRDMgQgeAM9woADQGxGA8bjKICEABAjh+c8g4QPPcYAA
-gFFIkRkSATYCyM92oADUB5AQAAElCk4AGRYBljjgGQkFAM9wgABoBCCAz3AAAJgeTg6v+Ye5DxYA
-lgISATa0GQQACMhWDq/+GRICNgISATaSEQABjgxv/JQRAQACEgM2GfAD2M9xoADUByAZGIAB2BQZ
-GIDMcACACRoYMMxwAIACEgM2ARoYMLQTAAEPGRiAGcjPdoAACGMUJgEQSJGS6pgTAgAVfkymVKbw
-JwIQz3CAAJAE9CCAALwbBADIGQQABvDIEQABvBsEAAHYbgvv/qAbAAACEgM2oBMAAAQgvo8BAQAA
-GPIA2c9woAD8RJ65IaDPcKAA0BsRgD8I3gMKCG/8AdjPcYAAuAwdgQHgHaEV8JITAAGUEwEAkBMC
-AbITAwE+D+/+SiRAAAISAjagEgEAJXigGgAAAhIONqAWABAEIL6PAQEAAEfyz3CgABQEA9kjoAjI
-BCC+jwAAARAi8qQWABBBCJ4Ez3GAAEwFAIEa6ADYAKEF8GoLr/mKIIUI+wmexc9woADELAuAUyCB
-BP64zCEigAbymBYAEI4Lr/4A2gISATagEQAAGwgeBIogCAAQGhwwoBEBAPrY/gmP+e0FAACKIBAA
-CBoYMKARAQD72PXxA8zPcZ8AuP8YobYP7/4ZyAjIBCC+jwAAARACEgE2F/LiD8/+AhIBNgzopBEA
-APG4EczFIKIEzyBhABEaHDABgQ8IngMRzIC4ERocMHIIL/8ocIYJL/8CyArYz3GgAMgfHqEQ2A6h
-AdgVGRiABvCeCq/5iiDHAhsIH0PPcKAA/EQdgAQgvo8wAAAAA/TlCx7AHwseQAXYCiHAD+tyiiNH
-BEokAACNBa/4CiUAAVEgAMMA2An0z3GAALgMCYEB4AmhANiYuA3oA9nPcKAAFAQjoIogEAAFBSAA
-CBoYMAISATakEQAABCC+jwAAADCy8vS4QAkB/wISATakEQAAnQgeA4IML/8B2AISATYdsc9xgAAE
-diaBANiB4cogIQDPICEDA9vPcqAA9AdlooUgAg0NcwCzAsh9kA1wYLACyG+AANkRCx4AYoUNcGCg
-ZpUH8A1wYKACyEAQAwENcGCwAshxgA1wYKACyEgQAwENcGCwJKICyBkSAzaAEAIBfhABAc9wgACE
-Y3V4WWFHgFlhwg4v/yegRQQAAAGBIQgeBs9wgABQCACQHbHPcIAAVAhAgAGAUaESoQjwygsv/wLY
-AhIBNh2xIg8P/wLIWg4v/3gQAAGA4AQEAgACEgM2GcjPcYAAhGMVeQeBgBMCARpiR6EBg5gTAQCU
-G0AALQgeBs91gADUb6lwKg8v/2hxENgQGhwwEcyjuBEaHDDiCG//qXC5AwAAnhMAAUCTkhsEAHQT
-AAEaYpITAAFQepAbhABGCW//ghMDAQhxQQgfBgISATYQEYUAz3KAAChSGRIENkAtgAAUeABiz3KA
-AOhPLbjwIgIBwLgtCgAABdgKIcAP63KxA6/4iiPNAAPaz3CgABQEQ6CKIBAACBoYMFMF7//92A+B
-IwgfAJ4KwAaE4AXYyiHBD8ojgQ8AAEUD6gXh/8oiwQcCyKQQAQBVIMIH3QkeBXYKT/8CEgM2khMC
-AZQTAQCHCBAASHDPdoAAMHFAhr4J7/5ils9xgACAUc9wAACEHqoJr/kokc91gABsBACFI+gZyAIS
-AjYCuENwGhABBpgSAAA2CK/+INojlQIgTQACyCCGmBAAACIIr/4g2hcNJRAIckAtARTPcAAAdB5e
-Ca/5RXlSDU//z3AAAIQeTgmv+QDZeQIAAKQTAACnupIbhACQEwIBtLikGwAAkhMAAS4J7/6wEwMB
-A9nPcKAA9AcloALIGRIDNpgQAQBVIMIHz3CAADhjdXggoAqC5LiEDsH+AsikEAEAKHSEJBqQCfJC
-DQ/7A9nPcKAAEBQloBPwEQkeAroPQAC6D0AADfBwEAEBz3CgAPQHANonoM9woADIHEegAsgBgBMI
-XwaKCS//BNgCEgE2HbF2/b/9AhIBNhkSAjaEEQ4BghENAQQgvo8GCAAA3WXPdoAAhGNVfmeGu2Nn
-ptT0z3CgABQEA9tloAGBAN9JCN4ApBEAAOC4z3CAAOgOBPK9kAPwvJDPcYAAgHsSiS0IHgAPic9x
-gAA8fBC4IImfuIDhAdnAeQ+5JXjPcaAA/EQNoQTwdhENARHMUyBAgAbyCMgGEgE2vP3PdoAA1G/J
-cIoML/8CEgE2dgxP/pYKD/+A4JL0AsiSEAABDQieAtoOgAMD8OquAsgBgJkI3gAiCa/8gNgIEgI2
-BCKCDwIAAQAREgE3FwqBDwIAAAAPCF4HTyHAABEaHDAF8KO5MHgRGlwwAhICNiGCRQmeAYu4jLgR
-GhwwEIozEoEAz3KAAEBxBLgFeSaySiQAdQDbqCCAAs9wgADgYvQgwAATCQAAAePPcAAA//8EsgLw
-ZLII2BAaHDDPcYAA+FkRgQHgEaEj8BDYEBocMBHMo7gRGhwwig0v/8lwAsgBgBMInwMZyAHaACCB
-D4AAiGNAqRHMUyBAgAnyBhIBNoogBAByDS/8mBEBAH4KL/+pcALIGpDGCCACGRIBNhHMIQjeAM9w
-gAD4bwISATYCgJgZAAAIyPYOb/4ZEgI2nQDP+fHA4cVv2JW4z3WgAMgfEh0YkM9wAQBAPBUdGJBO
-D0/8iiAEAA6lhQDP+eB48cACCO/5A9jPdqAA1AcTHhiQDxYQlsxwQIDMcACA07rPcbD+AAAles9z
-nwC4/1ajUyDCBEV5NqMPeJzgyiBiAcohwg/KIsIHyiOCDwAAJQvKJMIA1Adi+MolIgDMcKCAsH3M
-cOCAQOX0v8AlohAD5QQljR8AAPz/BvDPcAAAOQuGDE/5GRYAlkIlARTvCESAAnUPHliTA9ggHhiQ
-BCeAHwAAAEDBB4/58cBWD4/5CHXPcYAAAAAAgYIkAzA1CF4DAYHtuEDYzyDiB8oggQ8AANAAzyDh
-B89ynwC4/x2iBIEB4NO4BKEFIIAP0P4AABaii3DPcYAA6EjuCu/9wNrPcKAAFAQB2SSgz3GAAPhZ
-E4EB4BOh07gFIIAPsP4AAM9xnwC4/xahIQ2eEBnIz3GgAGQu8CERABDgSiAAIA8gECAB34zwr/8I
-dwDYOnAacIbwANjPcYAAHAUAoQDZz3CgAMgfkbkTGFiAz3CAAMwCEHjPcaAAtEdJGRiAi3DPcoAA
-IAUAom8gQwBUGRiAz3CgAMgfExAAhvG4yiAhAIAOYfnPIOEDRCaNFuG+zCchkDv0JMACuBR4x3CA
-AChSIICEIQyAMPQikDMUgDA9CQ4ACcgEIIEPAMAAAC0JgQ8AwAAAIsElCVIABCCADwEAAPAsuAK4
-MCCBD6AAaCwwIIAPoAAYLBDwCsGMIf+PDfLPcKAAyB+kEAAAIngLCIUPAIAAAAHdgOfMJSGQE/IJ
-yM9xoABILB6hc//PdoAA1G8Id8lw5ggv/4txtgkv/8lwBvAD2c9woAAUBCOggOepdnr1RCb+kgjy
-z3CgABQECYCA4HL1Iw5eEM9woADELDCACyFAhGj1z3AAALAeLgmP+QsgAIRg880Fr/mAJAMw4Hjh
-xeHGocFKJAByANqoIMAOSHGEKAsKx3KAAGCNMiJCDs9zgAAQcM91gADoDkDCIMLDulx69CODAEwV
-AhF6YnqVYrpbYwPiz3WAAPxH8CVNECK6BS2+EC9yUyIOANpiXXrVaDV+x3aAANRoQLYD4yK7BS3+
-EC9yUyIDAHpiXXpBtkFpocDBxuB/wcXgePHA4cWpwYt1qXD2D+/+AhIBNn4JL/+pcD0Fr/mpwOB4
-8cC+DI/5ocHPcYAAPG4kgc91gADoDvqVz3OAACBwBCGBDwAAABBFIUEDQMEgws92oADIH8O6XHr0
-I4MAoBYCEOJ7ZQrEAH4WApajun4emJAQeHB73gkv/xTaTQgfBgPYz3GgAPQHBaHk2g1wQLANcgDY
-ALJChQ1wQKBGlQ1wQLBAhQ1wQKBClQ1wQLAA2AShQg8P/kAWARYwec4Pr/3pcAHYA/AA2IEEr/mh
-wPHAz3CAAOgOGIghCFEBz3ABAKCGFgxAADoJAAEIcc9wgABcJMIJgADRwOB+ZQCv+BPY4HjxwM9x
-gAB0JAARBQAXDRQCBdgKIcAP63JD2+kDb/iKJIMPBaHPcIAAlCTwIEABQHjRwOB+8cCuC4/5z3WA
-AHQkBYUXCFECiiBXCW4PL/lX2QfYAKVL8JcIUQHPcKAArC8agMC4geAB2MB4LyYH8D/yeg0AAG4N
-r/kE2AKFz3GAACggTIkBpYDiyiOCDw8AQELKI2ECz3CgACwgEIAQFQUQeGAbDTQEB6UF2AohwA/r
-cnHbUQNv+Iokgw/PcIAAKGUVIEABYIjPcIAAuATAugHeYahCqMOoNg0gAAQZQAGKINcH1g4v+XXZ
-wKVlA4/54HjxwO4Kj/nPdYAAdCQlhQDeGQmRAAXYCiHAD+ty/tuYc/ECb/hKJQAACwnRAAHYBqVq
-8AsJEQHGpWbwPQlRAs9wgAAoZSCIz3CAALgEz3KAACggw6ghqCyKwLkiqL4MIADBooogVwliDi/5
-iiEEBgfYAKVK8M9woAAsIBCAR4VCeIDgAd/KJ4wTh++B4cwhIoDMIaKAOPQB2YDnz3CAACggwHks
-qAGFAKWAIJcHGg4v+YohBA0mhc9wgAA4IACAKQlRAIDgBdjKIcEPyiOBDwAAPAHKIsEHpfPGpc9x
-AAA0+APYEfCA4M9xAAA0+MogIQEJ8g0PUBAFhQkIUQAB2APwANhAeVECj/nxwOoJj/nPdYAAdCQF
-hYLgyiBhAcohwQ/KIsEHyiOBDwAAgADKJMEA4AFh+MolIQCJ4IABDQAyJgBwgACoSUAnjHIUfAB8
-AoUBpc9wgAAoICyIgOHKI4IPDwBAQsojYQLPcqAALCBQggQQBQB6YhsNNARHpQXYCiHAD+tylduN
-AW/4iiSDD89wgAAoZRUgQAFAiM9wgAC4BMC5IqhBqAHecgsgAMOoiiDXB5nZf/ADhYAglwcKDS/5
-otkDheIJr/kApQHdwgzv+qlwz3CAACggIYDPcIAAKGU1eCGIz3CAALgEIagA2SKoo6g/8ADemgzv
-+gDYJIXPcIAAKGU1eCGIz3CAALgEIagA2SKow6gt8IogVwmqDC/5vtkH2AClAN6yCa/5yXAQFQUQ
-GQ0UBAXYCiHAD+tyy9vRAG/4iiSDD89wgAAoZRUgQAEgiM9wgAC4BM9ygAAoIMOoIagsigQaQAHA
-uSKorgoAACTwPg1P+EEIEQEGDW/4BNgyDU/4lOAsCkEB4gxv+ATYFPByCiAAAN7PcaAArC8dgba4
-HaEdgZW4HaGKIJcH7tkWDA/5wKWlAI/58cA2CI/5z3WAAHQkBYUA3oLgyiBhAcohwQ/KIsEHyiOB
-DwAAZgHKJMEALABh+MolIQCJ4PwADQAzJgBwgAC0SUAnDHIUfAB8igvv+slwhgmP+Qh2Gw5REMYI
-r/kC2IogFwmqCy/5iiGGAQbYDPCyCK/5ANgChYAglweSCy/5iiHGAwKFEBUFEBsNNAQApQXYCiHA
-D+tyiiNGBb0HL/iKJIMPz3CAAChlFSBAAQCIz3GAALgEz3KAACggw6kBqQyKwLgCqQQaQAEx8M9w
-gAAoZSCIz3CAALgEz3KAACggw6ghqCyKwLkiqHYJIADBooogVwkaCy/5iiEGCAfYAKUa8AHd0grv
-+qlwz3KAACggIYLPcIAAKGU1eAGIz3GAALgEo6kBqQyKwLgCqTYJIAAocHEHT/nxwAIPT/nPdoAA
-dCQFhmcIEQEA3dYPb/mpcAKGgCCXB7YKL/mKIYcAEBYFEAKGHQ00BACmBdgKIcAP63KKI4cB4QYv
-+Iokgw/PcIAAKGUVIEABIIjPcIAAuATPcoAAKCCjqCGoLIrAuSKowgggAAQaQAH9Bk/54HjgfuB4
-8cCwwYtwz3GAAMBJVgqv/UDaz3CAAHQkIIDPc4AAuAQJCVEAAYsR8M9wgAAoIEGAz3CAAChlVXhB
-iAOLQiAAgMogYgBYYM9ygADABGGKcHAB2MIgDgCA4cwhooAJ9M9xgAA4ICCBgOHKIWIABvCB4QHZ
-wiFBAALhQ4oFuAS6WGA1eDAkADCwwNHA4H61BiAAEdjgeH0AQADxwHoIQADaDwAA0cDgfuB4WQBA
-APHA4cUhiECIA7lEIQEOwroleiKIA4gGuYQhAQAHuEV5hCACAAV5z3OAAEQlA4NAgAbwA4MAgEJ4
-JQiVAc91oADAL1gVABbAuIHgAdjAeC8mB/Dx80UdWBD1BU/5BtgKIcAP63KKIwQPSiQAAI0FL/gK
-JQAB8cDhxc9zgABEJSODQIEH8CODIIFCeUkJlQHPdaAAwC9YFQEWwLmB4QHZwHkvJkfw8PNKFQIW
-UyKBACCoRCIBDiO5IahIcYQhAQAmuSKoSHGEIQIAJ7mFBW/5I6gG2AohwA/rcoojhQRKJAAAGQUv
-+AolAAHxwOHFz3KAAEQlA4JggAfwA4IAgGJ4OwiVAc9xoADAL1gRAAbAuIHgAdjAeC8mB/Dw81YR
-DQYzDR4RBdgKIcAP63Kf20okAADJBC/4uHMG2AohwA/rcoojhQRKJAAAtQQv+AolAAEDgmCAB/AD
-ggCAYnghCJUBWBEABsC4geAB2MB4LyYH8PTzVhlYA9kET/kG2AohwA/rcoojBA/f8eB4z3GAAOgO
-KYHhueEgwgfKIKIARLjPcYAAtCTDuAlhCwkeAB8Nn1EfCV4Az3CAAOgOGIiB4MwgooAF9AsNnlEB
-2OB+4H8A2OB44cVEIgJTTXGEIQMMTXBNcAQlgF8AAAAgQSh+gwfyz3CAAHiKAIALCF8AANgC8AHY
-JQoRAs9wgADoDhiICwhQABENXlEE8IQlCdgE8gHak/AA2pHw/urPcoAAFGlUEoMA+OvPc4AAeIpg
-gzkLXgDPc4AArI9siy0L0QFhgowj/48Q9KSSz3MAAP//GQ3BEGWCjCP/jwb0bJK1C4CPAAD//4Qo
-CwoAIYB/gAC4jGmAz3WAAABKCwteAUAlAxcD8EAlAxQYiAtjQSkAAQhlFnvPcIAAHEp8uHhgKBCA
-AA0IHgB+goQjCYAW8gsIXgBegiUKngILCJ4ACw0eUgHaC/AVCN4Az3KgAAwkUYKMIv+P9/MA2ua4
-yiIiAM9wgAB4igCAEQheAAQlvt8AAAAiyiJiABXqz3OAABRpHoM7CB4CjCECgMwhgo8AAFAAzCGC
-jwAA0AAR9JO4HqMN8M9wgADoDgmAEQhfAIwhAoAF9AcIngEC2khw4H/BxeB+4HjgfuB44H7geOB+
-4HgB2ADZrQNgBYoiBADxwHIKT/kA3xDd6XYA2M9ygADYICGCDyCAAwshAIAN8iaCJHgFf89wgADE
-JPAggAOA4OIgAgBhvQHm1Q11kM9+QicAkJUCb/nKIGIA8cAA2c9ygADYIGGCDyEBAAQjQAAQccog
-YgHKIcIPyiLCB8ojgg8AAH4AyiTCABwCIvjKJSIAAoIyeQQjQ4AkeAKiBIJhoiR4BKIJ9M9wgACw
-BCCAYHkD2A7wNgtv+WhwD3rPcIAArARggM9xAQCgAWB7A9jRwOB+8cAIcgDZDyEBAM9zgADYIAGD
-JXgBowKDJXgCowSDJXgEo89wgACsBGCAz3EBAKABYHsD2BEI3wDPcIAAKCASDa/6AIDc8eB4CiJA
-gADZ7gABAC8mAPBKJkAATgAGAE8AIACKJf8P4HgKIkCAANnOAAEAbAAkAC8mAPBcAAUAKwg1CEom
-QAAIcQDYAiG+gOAgxQdCeQHgAiG+gOAgxQdCeesH7/8B4C8tAQBAJUUAAiZ88QAAIAAAKEAB6CBi
-Ay8gAIAvIUsAAiG+gMAghgHCIYYA4H4RACAASiAAEEogQBAOIkIALyALEs4gRYCKJf8PCAAFAC8t
-AQBAJUUAAiZ88QAAIAAAKEABSiZAAOggIgMvIACALyFLAAIhvoDAIIYBwiGGAEomAABCIP6QziCC
-AUQgfpDOIYIB4H55AwAA4HgB2c9woACwHzmgHoDgfuB4RoEJ6iOBYIEigmJ5MHAA2AL2AdjgfuB4
-8cDPcYAABCWYcPj/B+jPcYAAJCWIcPX/g+gA2Ajwz3GAAEQliHDx/3noAdjRwOB+CHM4YNW71bkN
-CeUANrgCI0IACvDPcoAA5HVFggHgybgienpiFrjgf0V44HjxwO4PD/kIddd1JQAAgADYSvfPcYAA
-5HUlgSUJRQMifQHg+fHPcIAA5HXFgKlwWg7v/8lxBS4+EAIlTR6MIBCAyiBmAcohxg/KIsYHyiMm
-C8okJgC4B+b3yiUGARa4/Qcv+aV4AdvPcqAAsB95ol6CBOgiegkIhAAA2APwaHDgfs9yoAAsIHCC
-CegCI0IAEw6EcACAAAAPCIQAANgE8P8IxYAB2OB+4HjxwEIPD/kIds93gABoBQCHgeCP8s9ygABE
-JQOCIIAH8AOCAIAieOEIlQHPcKAAwC9YEAMGwLuB4wHbwHsvJsfw8PMP2UAYWAAjgiCBBvBjgmCD
-InuxC5UBWBADBsC7geMB28B7LybH8PPzBd1RGFgDI4IggQbwY4JggyJ7iQuVAVgQAwbAu4HjAdvA
-ey8mx/Dz81cYmAMjgiCBB/BjgmCDIntlC5UBWBADBsC7geMB28B7LybH8PTzQhhYA892oAAsILCG
-MuUjgiCBB/BjgmCDIntDC5UBWBADBsC7geMB28B7LybH8PTzQRABBj8J3wQwhqJ50wlSgAbYCiHA
-D+tyTtsP8AbYCiHAD+tyiiMEDwfwBtgKIcAP63KKI4UESiQAAEUG7/cKJQABAdgAp30GD/ngePHA
-Eg4P+c91gABoBQCFMejPcYAARCUDgUCAB/ADgQCAQnhTCJUBz3CgAMAvWBAOBsC+geYB3sB+LyaH
-8wDb8PMG2kIYmABDgcCCB/BDgUCCwnojCpUBWBACBsC6geIB2sB6LyaH8PTzVxjYAGClEQYP+QbY
-CiHAD+tyiiMED0okAACxBe/3CiUAAeB4z3CAAGgFAICA4AHY4H/AePHAz3CAAGgFAIAo6M9xoADA
-LwPYFbgXoc9zgABEJQODQIAH8AODAIBCeDUIlQFYEQAGwLiB4AHYwHgvJgfw9PNBEQAGBCCADwAA
-wA8muMcIkYIXgb8IX4XRwOB+BtgKIcAP63KKI4UESiQAACkF7/cKJQABCiYA8Iogvw/KIGQA4H8v
-IAMA4H+KIP8P8cDhxQYLIAAIdc9xoADIH0WFDegCgPQRAwBEe0SFZXr0GYAAIoUAoQrw9BEAAER4
-9BkAABzYGLgVGRiAIQUP+Q/ZmrnPcKAAsB81oOB+4HjxwJoML/kA2aLBCHXPdqAAyB+kFgAQuGCk
-HgAQAdgTpliGGYYAIkKDASBAAFimGaYC2BOmGoZbhgAgQIMapgEhgQA7phWG0g2gAKlxFaYXhsYN
-oACpcRemD9iauA6mz3CAAEQl0//PcIAABCXR/89wgAAkJc//kQQv+aLAz3GgAMgf9BEAAADahCA/
-APQZAAANyJq4m7icuA0aGDAc2Bi4FRkYgFihWaFaoVuhpBmAAM9wAAwPAA6h4H7gePHA3gsP+c91
-oADQG9OFEQ6eFs9wgAAEJQIKAAAPDt4Wz3CAACQl9gkAABEOHhfPcIAARCXmCQAAHNgYuBOlDQQP
-+eB48cDhxSWAQIBCIgKAyiJiAIDiyiBiAcohwg/KIsIHyiOCDwAAXgDKJCIAkAPi98olAgFggRkL
-QABCgKKDUHUA2soibwCE6mCD8QtBgEGDAaNgoEGgAKJEgKWAQCUDFhsKXgBGhQjqooJCgFB1ANrK
-Im8AA+oAo2SApYBAJQIXGwveAGeFCOuig2KAcHUA28ojbwAD6wCiQYALCYEAFg7v/wWAbQMP+eB4
-QIAVCgAAZIILI0CABfRAgvcKAYAA2uB/SHDgePHA0goP+Qh2IYAFgAHfEHEAhiGGIaAAoQDYAKbP
-cK3eAgABpqWGwH8GhQ8OARCpcALZ7f8GpaWGB4UPDgEQqXAI2en/B6UF76YN7/8Fhu0CD/ngePHA
-IIBCIQGAyiFiAATp6P8B2APwANjRwOB+4HjxwCCAQiEBgMohYgCA4cogYQHKIcEPyiLBB8ojgQ8A
-AI8AyiQhAGAC4ffKJQEB2f/l8eB48cAuCg/5CHUodur/CHfCpalwov+BAi/56XDgePHAQIBCIgKA
-yiJiAIDiyiBiAcohwg/KIsIHyiOCDwAAnQDKJCIAEALi98olAgEioJP/vfEggBBxyiEhAOB/KHAg
-gCCBEHHKISEA4H8ocOB48cDCCQ/5CHce8ACFIYUhoAChANgApc9wrd4CAAGlxYUGhg8NARDJcALZ
-q/8GpsWFB4YPDQEQyXAI2af/B6YjhWB5qXDpcOj/CiUAkAnyA4cggAKFMHAA2MogbwBX6IIM7//p
-cMUBD/nxwOHFCHUD8LX/qXDc//7owQEP+eB+4HiA4cokTXDoIG0Cz3GgAFAMJYEBGFIA4H7xwCoJ
-L/m4cJhxz3GAAGwFAYFCgc92gAAUac9zgACASgJ6HoY5uMG4FHsBE4cAz3CgANQLPBAGAM9zoADQ
-Dw0KZQEA3QDYR/CoFgAQz3KgAMgfGXFk4B6iENgOogHYFRoYgKlyBfDPc6AA0A8JcRcTAIaigQIg
-wAECfYDlyiUsEAGBAn2A5colLBArDFEAJwpFA892gABwJQKOJRMPhsG4M2gB4AKuA4Y4f+d4A6YB
-4u/xJwsfQKhwz3GgANQLqw0EkAQQAhAaYgQYgBAB2DwZgAHBAA/5JgsP/Lbx8cBOCA/5z3CAAKBp
-CIiMIAKAK/IyaDR5x3GAAChSoIHPc4AACFPPd4AAtHX2lxZ7QYNQJY4VhCdEEMChjCdEkIQi/gFB
-owX0kb7AoQvwsb22vaChDw9REJa9oKGFIgEOQaOSDU/5ANnPcIAAtHVJAC/5LxhCAOB44cXhxs9w
-gACgaUiIjCICgM9zgADQdRfy0osyajR5z3CAAAhTx3GAAChSVnhAgaGABe6VukChq70E8LW6QKGL
-vaGgANgTq8HG4H/BxfHAig/P+M9wgAC0dQqAz3GAAAhTRCAPg89wgACgaQiI0mjUfsd2gAAoUkCG
-FnlhgRLyUCKNBaCmhCP+AWGhDQ8REZG9oKYF8LG6trpApuIMT/kH8Ja6QKaFIwEOYaHPcYAAtHUv
-EYAAoriJB+/4LxkCAOB48cDhxc9wgADoDiiAz3WAALR1SYW3ubi5BCKCDwMAAAAHukV5KKBKCO/5
-ANgJhc9xgACgaeq4KInPcIAACFNyaXR7x3OAAChSQIM2eCGABvKVukCjq7kF8LW6QKOLuSGgLxWA
-EKO4KQfv+C8dAhDgePHAjg7P+Ah1mnHPdoAAFGkAlkoiQCCEIAMPjCACgMIigiQC2EpxVv+O6B6G
-s7gepgDYz3GAANB1E6nPcYAAmHUMsWTwQiWVEIQiA8D+8+B4z3CgANAPJRAOhiUQDYYA3xAQE4YC
-2EJtsnLKJwUQhgigAMlwGnAAJ1ETANghChAgDQ5QEYvmyiBhAAPwAtjPcYAAcCUkgQshAIAE8gDZ
-A/AB2SpwNv8S6EcIkCHPcIAAnCUWIAAEQIAGiB8OARAN6qlwYHqKcRbwz3GAABRpHoGzuB6hrvEF
-2AohwA/rcoojGABKJAAA5QWv9wolAAEB2GJ1z3GgANAPEBlYgwIlVSSA4MwnIpCi9dUFz/jhxc9w
-gABwJSCIAdpBqCDpz3GgALAfWaFegSKAo4AA2zENQRDPcYAAbAU0iYPpAdkK8CGAAiJNAPcNhZ9M
-AEBLYahocQcJUQBBoGKo4H/BxaKg7/HxwD4Nz/gacDpxz3WAABRpz3aAALR1EQg0BADfDNjpcf/+
-jOgehS8ewhOzuB6lz3CAAJh17LAf8MlwDNny/s9ygABwJQCK/NkK6ACVJHiMIAKABvQllgSWJ3gD
-okIgACMqcZD/AJWEIAMPjCACgEAPwf8tBc/44HjxwM4M7/gA2SUI9QAIdc9ygAAUaR6Cs7geos9w
-gADQdTOoz3CAAJh1LLB28M93AQDoCmB/AtjhCBAAz3GgAFAMBYHPdoAAtHUSrgWBE64JlowgiIBi
-vTfyF/ZLCNABjCDEgcwloZBY9KlwYH8A2akIEABAJgAbqXHF/i8WgBCAuC8eAhBI8IwgyIA28owg
-EIBC9AWBCW2F4JAN4f/KISEAOvB1DVEQqXBgfwDZNOhAJoAbqXG2/i8WgBCBuC8eAhAq8FUNkRPP
-cIAA6A4YiEkIUACpcGB/ANke6M9ygACYdUhwBtmq/kAiAAIG2aj+DJKBuBHwIQ0REalwYH8A2Qzo
-z3KAAJh1QCIABQTZoP4MkoC4DLIhBM/48cCyC8/4CHUacc9wgAC0dTIJr/gk2c9wgAAUaR6AANs5
-uFMgQQDPcIAAgEo0eECIz3GAAEBvIYlZYc9yoADUCy+iz3KAAGwFIYhhogIlQBCA4MogzAACok1x
-hCEDDNDhzCGCjwAAgAAP8owhA4QQ8gXYCiHAD+tyiiNaCEokAABZA6/3uHMKcXr/A/CX/4kDz/jg
-ePHAFgvP+M9ygAAUaT6COnCqwQDYIQmeA89zgADoDmITgwBEEoEAwN1keUQhAQEiuTp9CPDPcIAA
-6A5MEA0BAtiGEgEBAnkRggThIgiv/QDaRghgAAIgTwMD2M91oADIHxOlGIXPcYAAtHVCwBmFANpD
-wBqFRMAbhUXAVBUQENeFQBUAFh9n/BUAEACBIYEAIMCDASGBAEDAQcGLcBkJUSCEwXILYACGwgh3
-z3CAAKSLKpAL8ILBXgtgAIbCCHfPcIAA5HUkkM9ygADkdWWCBsIEuxULpABAKYACFwiFAAJ6RsL9
-8R4MYACGwAhyRsAxD5EQCnCuC2AASHEacMlwpgtgAAbBBsIIdgTDB8AFwQAiwoBEwgEgQABFwBfw
-le8KcK4LYABIcRpwyXCmC2AABsEIdgTABsMFwQfCAiDAgETAAyGBAEXBGQ9QEM9wgADoDhiIhODM
-JyGQANgD9AHYLyAHgFpwOfQKcDoLYAAD2RpwyXAyC2AAA9kIdgDAAcFAIMCAQSEBAEDABMBBwQXB
-QCDAgEEhAQBEwP4OIABFwRMJESBUHQAUAMAYpQHAGaUdCZEgVB0AFADAGKUBwBml16UEwBqlBcAb
-pQ8JUSDXpQDAGqUBwBulTCIAoAHZwHnPcIAAsEE0qI0B7/iqwM9xgABkJSCBANiD4cwhIoAC9AHY
-4H8PeAoiAIDxwBTy+P+A4MogYQHKIcEPyiLBB8ojgQ8AAMcGyiQhABwBoffKJQEBz3CAAGQlQKDR
-wOB+8cDPcoAAZCUggoDhyiBhAcohwQ/KIsEHyiOBDwAA0AbKJCEA5ACh98olAQEBogHaz3GgAMgf
-UKFKGZgASBkYAN7x4HjxwKIIz/jPcqQAtEUpEgCGz3aAAHxZEaYrEgCGAN0Sps9wpQAIDAOAGKYO
-EgCGEHkEIIAP//8AADC4FKYzpg8SAIYVps9wgABQaXCIUoh5pjSIWqYLkCzgAiDPAAIggwAieB6m
-z3KAAGQlAIL8pjumNwg1AX2mMyYAcIAAiEpAJ4xyFHwAfAPYv/9A2Mz/t6YL8M9zoACoIDGDAoKi
-ojhgF6YB2BKjAdhhAO/4FqbgeM9wgABsBRSIBujPcIAAcCUBiAPwAdjgfvHA3g+P+M91gAC4jMMV
-ABYRCF4Bz3CAAKyPDIgLCBACCYXluInyz3GAABRpA4GiDu/8JIEnCFEAz3GAAHiKIIEbCV4Az3GA
-AKyPLIkPCRECz3EBAPAQAdgT8JToz3CAAHiKAIDPcQEA8BAVCF4Az3CAAKyPDIiH4ALYA/IA2EB5
-TgtAAs9xgADkdQaBRSBAAQahz3CAAOgOGIjPdoAAtHVFCBABz3CAAPxjVoh3js9xgAB8WQsLgAAA
-gB8IHwDPcoAAbAUEggHgBKIA2BCiD4EB4A+hBPAOgQHgDqEJheW41AjCAM9xgABsBQOBC+gA2AOh
-z3GAAHwGAIGiuLoPIAIAoS8WgBDjuLwPgv8vFoAQ4rhAD4L/if+0/4DgPAui98og4gTPcIAAgHsR
-iIDgLAui98ogYgQVB4/44HjxwM9wgACYdQyQDQgeAJIOz/wF8OG4HA7C/M9wgADQdROIEQhQABMI
-kQCo/YkFz/+I/YUFz/+BBc//4HjxwGYOj/jPcKAAxCdSEAGGQRAAhoQgHIAA3gby67nRIaKBPvLP
-cIAA6A4JgM91gAC0dSkIXgEUjYHgyiAhAVgOIQLKIWEAz3CAAGBxAIANCJ4Aeghv/RCV1K3PcIAA
-YHHAoE1whCADDIwgAoAU9M9xgABsBQaBAeAGoc9wgADoDhiIhOA0CQEFgP+iD+AELyCICgbwjCAD
-hCwPwf81Bo/4z3GAAGwFCIEPCFEAz3CgALAfG4AKoeB+Nrg2uTBw1iCFDwAAgADgfyJ44HjxwM9y
-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
-AwCCPiaiz3EHAEI+JqLPcQAAwlcmos9xAABCWCaiz3EBAMJXJqLPcQEAQlgmos9xAgDCVyaiz3ED
-AEJYJqLPcQMAwlcmos9xBwBCWCaiz3EbAAIeJqLPcRsAQjcmos9xGwDCUCaiz3EAAEIhJqLPcQAA
-giEmos9xBgDCISaiz3MBAEIhZqLPcwEAgiFmoiaiz3MCAEIhZqLPcwMAgiFmoiaiz3MDAEIhZqLP
-cwcAgiFmoiaiz3EAAMI6JqLPcQAAgjomos9zBgACO2aiz3EBAMI6JqLPcQEAgjomomaiz3ECAMI6
-JqLPcQMAgjomomaiz3EDAMI6JqLPcQcAgjomomaiz3EAAEJUJqLPcQAAAlQmos9zBgCCVGaiz3EB
-AEJUJqLPcQEAAlQmomaiz3ECAEJUJqLPcQMAAlQmomaiz3EDAEJUJqLPcQcAAlQmomaiz3F5AMIf
-JqLPcXkAAjkmos9xeQCCUiaiz3EQAEIqJqLPcTMAgiomos9xAQDCKiaiz3EQAIJDJqLPcTMAwkMm
-os9xAQACRCaiz3EQAAJdJqLPcTMAQl0mos9xAQCCXSaiDejPcS0AQh4mos9xLQCCNyaiz3EtAAJR
-DPDPcWoAQh4mos9xagCCNyaiz3FqAAJRJqLPcT8Agikmos9xAQDCKSaiz3E/AMJCJqLPcQEAAkMm
-os9xPwBCXCaiz3EBAIJcJqLPcQgAAgEmohLoz3AAAAIqBqLPcAIAAisGos9wAABCQwaiz3ACAEJE
-BqLPcP8AAmcGos9w/wBCZwaiz3D/AIJnBqLPcP8AwmcGos9w/wBCdQaiz3D/AIJ1BqLPcP8AwnUG
-os9w/wCCHQaiz3D/AMI2BqLPcP8AQlAGos9wgAACDAaiz3ADAMYABqIg3s91oADIH9ClMthDHRgQ
-ANheDm/1jbjRpS0Ez//gePHA4cXPcYAA8FgEkc9ygABIfADbYKIS6E8IUAB9CJAABdgKIcAP63KK
-I4cMSiRAACkGb/RKJQAAB9gYuACiYapKJMBwYqqoIAADANiOuBYizQABpQPYDrgCpQHjA9gGsQex
-ANgX8ADYmbgAolLYAapKJMBwAqqoIIACAN2PvRYiwAChoKKgAeNS2ALbZrEB22exHQav9QCqANiY
-uEokwHAAoqgggAIA3Y69FiLAAKGgoqAB42HYAapS2AKq5/HgePHA4cXPcYAA8FgHiaHBANoy6AAc
-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
-AAFBKIMhd6LPcqAAgERwgs93pQCs/4Qj/wpwogDCBCKCDyEAAMEmulWnyiCCDwEA//8G9ADAtgmv
-+BThGKcgwIm4jrgZpwCODwheAEAmABNyD+/yFNnPdoAAlInPd6AA9AcA2ASn5gnP8QGOhOgAjhEI
-XwAB2ZC5z3CnAJhHPKAD2ASnAQgeQwGOhegAjhUIXwDPcacAmEe8oQiOgLgaoQCOdQheALkIHsP/
-CN7BUgtP9YwgAoPMIIKPAAD8AA3yBdgKIcAP63KKI44BSiRAAMUC7/G4c4wgAoMY9M91gACUialw
-Tgvv8gPZAI3guMogYgHKIcIPyiOCDwAAiwPKIsIH5vVa/wTwfguP834K7/KA2Abwdgrv8oDYVf8A
-2s9xoAD0B0ShA9gKoQmhSaGSCO/8KnCVAi/zocDgePHAz3GAAPBYJJEA2ILhzCFigAP0AdgvJgfw
-z3GAAJSJAIkH8kQgwApFIAAKAKkLCB4AWP8C8D//HwHP//HAz3CAAJSJsgrv8gPZ7v8LAc//yQHP
-8sUBz/LgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H8A2OB/ANjgfuB4ocHgf6HA4HjgfuB4
-4H7gePHA4cUByM91gACwQwClBG1WCu/yAtnPcIAAoAQggAUhgQ+ADgQA7HAgoMoI7/IAhe0BD/Pg
-fuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjxwMxwAJDPcYAAsEMGscxwABAFAUAh
-AgQOGUQBTCWAhMogYgHKIcIPyiLCB8ojgg8AAHMAPAHi8cokIgAA2QjwzHAAkBQiTAAB4QC0LyBC
-AfEJAoBqCc/y0cDgfuB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geM9wgACUCOB/
-AIDgeOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4Hjg
-fuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+
-4HjgfuB44H7geOB+4HjgfuB44H7geOB/AdjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7g
-eOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB48cDhxc91gADwQ6lwrgjv8gPZABWFEEQl
-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
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAB8doAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsA
-AAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXHuAANhaAQAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAP8BAAAAAAAAAAAAAAEBAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAQACAAAABgAIAAkAAAAHAAAAAAAAAAIAAAACAAAAgwAAAJIAAADoAAAA9wAA
-AE4BAABdAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAcHKAAPyyAQAAAAAAcHKAAFi5AQAAAAAAAAAAAHBygAC8ugEAAAAAAAAAAAAAAAAA
-cHKAAAAAAAAAAAAAAQAPAGQAAQB0CIAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAA/wAAAAAHAAAAAAAAAAAAAAAAAAAoCAAAFQAAAEQlgAD0IwAA9CMAAPQjAACQOAAA9CMAAPQj
-AAAUNAAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAAEBoAAHwbAACAGwAA+BwA
-AHwdAAD8HAAA9CMAAPQjAABMQQAAdEQAAFhFAAD0IwAA9CMAAPQjAAAUQAAA8FYAAOxWAAD0VgAA
-BDUAACQ2AABMawEAlDgAAPA2AAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0
-IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQj
-AAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAACAOQAA9CMAAPQjAAD0IwAA9CMA
-APQjAABgOgAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAAYVwAA
-9CMAAAxYAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAACxaAAD0IwAA9CMAAPQjAAD0
-IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAHxCAQC8RQEA9CMAAHRHAQD0IwAAzEgBANwf
-AQD0IwAA9CMAAFhIAAD0IwAA9CMAAPQjAAD0IwAA9CMAAMysAQAgrQEA9CMAAPQjAAD0IwAA6MYB
-APQjAAD0IwAAwEcAACzKAQAwygEA9CMAABjKAQD0IwAA9CMAAPQjAAD0IwAAlLEBAPQjAAAwtQEA
-9CMAAPQjAAD0IwAA5B8AAPQjAAD0IwAAWF4BABjMAQC8XAAA9CMAAPQjAAD0IwAAtK8BAPQjAAD0
-IwAAgBgBAJRgAQD0IwAA9CMAAPQjAABAZgEA/CABAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAFBv
-AQD0IwAAIMsBACTLAQAwywEANMsBACjLAQAsywEAOMsBAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMA
-APQjAAD0IwAA9CMAAFBKAAD0IwAA9CMAAPQjAAD0IwAA9CMAAGzKAQDEygEAiDwAAPQjAAD0IwAA
-9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0
-IwAA9CMAAHRtAQD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQj
-AAD0IwAA9CMAAPQjAAD0IwAA9CMAAPQjAAAoPQAAxD0AAFQ+AAD8PgAApGkAANQ+AAD0IwAA9CMA
-APQjAAD0IwAA9CMAACA9AAAkPQAA9CMAAPQjAACISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAALAKAACwCgAAsAoAALAKAACwCgAAsAoAALAKAACwCgAAsAoAALAKAACwCgAAsAoA
-ALAKAACwCgAAsAoAALAKAACwCgAAsAoAALAKAACwCgAAsAoAALAKAACwCgAAsAoAALAKAACwCgAA
-sAoAALAKAACwCgAAsAoAALAKAAD0CwAAAAAAAHAmAQCwCgAAAAkAALAKAACwCgAAsAoAADAJAAA4
-CAEANGoAALAKAACwCgAAZAkAAGQJAABkCQAAZAkAAGQJAABkCQAAZAkAALAKAACwCgAAsAoAALAK
-AAB8CgAAsAoAALAKAACwCgAAsAoAALAKAAD4CwAAsAoAALAKAADkCAAAAwAAAGDAAQACAAAAlDAB
-AAQAAAAMLgAABgAAAKDKAQAQAAAArK0BAAcAAADMtgEACAAAADzLAQAMAAAApFsBAA0AAADQSgEA
-DgAAAARLAQAUAAAA2CUBAAsAAACwQwEAEwAAALhcAAAPAAAAvBcBAAEAAABAsQEAEQAAAMRmAQAS
-AAAAqGABAAUAAACIWgAAFQAAAPQLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA
-AAEAAAABAQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAA//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAADhAw4e4eEDDh7hwQIKHuGBBQwe4eEDDh7h4QMOHuHBAgYe4YEFDB7h
-AQEBAQEBAQEBAQEBAQEBAQ0NDQ0NDQ0NDQ0NDQ0NDQ0DAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAA
-AAAAAAAAAAEBAQEBAQEBAQEBAQEBAQENDQ0NDQ0NDQ0NDQ0NDQ0NAwMDAwMDAwMDAwMDAwMDAwAA
-AAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBDQ0NDQ0NDQ0NDQ0NDQ0NDQMDAwMDAwMDAwMD
-AwMDAwMAAAAAAAAAAAAAAAAAAAAAkQIAADHKLwCRAgAAMcovAJECAAAxyi8AkQIAADHKLwCRAgAA
-McovAJECAAAxyi8AkQIAADHKLwCRAgAAMcovAEMBAAAxyi8AQwEAADHKLwBDAQAAMcovAEMBAAAx
-yi8AQwEAADHKLwBDAQAAMcovAEMBAAAxyi8AQwEAADHKLwBADQAA3gMJAAAAAAAAAAAAAAAAACz4
-AAABAAAABCWAAAAAAAAAAAAAAgAAAAMAAAAAAAAABwAAAAAAAABAQg8AaPgAACT5AAAs+gAA4PsA
-ACz6AADg+wAAFP0AAIz9AACAgICAgICAgAGAAoCAgICAAAAAAJQBAQCUAQEAAAAAAAAAAAAAAAAA
-AAAAAJQBAQCUAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQlgAAEJYAApCCgADggoAAB
-AAAA/P///wAAAAAAAAAAJCWAACQlgACoIKAAPCCgAAgAAADz////AAAAAAAAAABEJYAARCWAAKwg
-oABsIKAAMAAAAM////8AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADAAAAAAAA
-AAAAAAAAAAAAwBgBAAUAAAAEJYAAlB4BAAD/AwC0HgEAAP8FAJQfAQAA/y0AuB8BAAD/PQBwHwEA
-AP8EAFQfAQAA/yUAAAAAAAAAAAAAAAAAdCQBAAYAAAAEJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AABYJwEAHCgBACQrAQAEKQEAgCgBANwrAQA4LAEAfCwBAMAsAQAAAAAALAEAAF4BAAABAAAAAQAA
-AAEAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAACAAAAAwAAAAMAAAADAAAAAQAAAAAAAAABAAAA
-AAAAAAAAAAAAAAAA6DEBAAoAAAAEJYAAAAAAAAAAAAAAAAAASDIBAAoAAAAEJYAAAAAAAAAAAAAA
-AAAAXDIBAAoAAAAEJYAAAAAAAAAAAAAAAAAAqDIBAAoAAAAEJYAAAAAAAAAAAAAAAAAAcDMBAAoA
-AAAEJYAAAAAAAAAAAAAAAAAAFDMBAAoAAAAEJYAAAAAAABAAAAAAgAAAAACgABAnAADoAwAA6AMA
-AAAAAAAAAAAAAAAAAMwKAQAKAAAABCWAAAAAAAAAAAAAAAAAAMwKAQAKAAAABCWAAAAAAAAAAAAA
-AAAAAMwKAQAKAAAABCWAAAAAAAAAAAAAAAAAAMwKAQAKAAAABCWAAAAAAAAAAAAAAAAAAMwKAQAK
-AAAABCWAAAAAAAAAAAAAAAAAAMwKAQAKAAAABCWAAAAAAAAAAAAAAAAAAMwKAQAKAAAABCWAAAAA
-AAAAAAAAAAAAAMwKAQAKAAAABCWAAAAAAAAAAAAAAAAAAMwKAQAKAAAABCWAAAAAAAAAAAAAAAAA
-AMwKAQAKAAAABCWAAAAAAAAAAAAAAAAAAMwKAQAKAAAABCWAAAAAAAAAAAAAAAAAAMwKAQAKAAAA
-BCWAAAAAAAAAAAAAAAAAACxHAQAKAAAABCWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAADkTQEA5E4BADxRAQDEUwEAIFYBAEBZAQBEUAEAMAWAADhygAAYAAAA+HGAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAATFsBAAYAAAAEJYAAAAAAAP//////////AAAAAAAAAAAAAAAAJGABAAUA
-AABEJYAAZABkAGkA3ADIAFoAqgC+AIYBfQA+AGQAZABpANwAyABaAKoAvgCGAX0APgAAAAAAAQEA
-AAAAAAAAAQIBAQACAQABAgICAAEBAAIBAgECAAIAAQIDAAAAAMBuAQDQewEAgHyAAMADAAAAAAAA
-wG4BAOBvAQBAgIAA+AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCAAQA0fgEAOIKAAFQAAAAA
-AAAAwG4BAGB+AQC4goAAUAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAMBuAQDYegEAnC6AAFAB
-AAAAAAAAFIABAOx8AQDIBoAAAgAAAAAAAADAbgEAGH0BAMwGgAAEAAAAAAAAAAyAAQDgbwEAjIKA
-ACwAAAAAAAAAwG4BAIR9AQAAAAAAAAAAAAAAAADAbgEARH0BANAGgAAEAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAQACAAIAAwAEAAQABQAGAAYABwAgACAAIQAiACIAIwAkACQAJQAm
-ACYAQwBEAEQARQBGAEYARwBIAEgASQBKAEoASwBMAEwATQBOAE4ATwBQAFAAUQBuAG4AbwBwAHAA
-cQByAHIAcwB0AHQAdQB2AHYAdwB4AHgAeAB4AHgAeAB4AHgAeAAPAD8AAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAQABAAIAAwADAAQABQAFAAYABwAHAAgACQAJAAoAIwAjACQAJQAlACYA
-JwAnACgAKQApAEYARwBHAEgASQBJAGYAZwBnAGgAaQBpAGoAawBrAGwAbQBtAG4AbwBvAHAAcQBx
-AHIAcwBzAHQAdQB1AHYAdwB3AHgAeAB4AHgAeAB4AHgAeAAOAD8AAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAQACAAIAAwAEAAQABQAGAAYABwAgACAAIQAiACIAIwAkACQAJQAmACYAQwBE
-AEQARQBGAEYARwBIAEgASQBKAEoASwBMAEwATQBOAE4ATwBQAFAAUQBuAG4AbwBwAHAAcQByAHIA
-cwB0AHQAdQB2AHYAdwB4AHgAeAB4AHgAeAB4AHgAeAAPAEMAAAAAAAAAAAAAAAAAAAAAAAAAAQAB
-AAIAAwADAAQABQAFAAYABwAHAAgACQAJAAoAIwAjACQAJQAlACYAJwAnACgAKQApAEYARwBHAEgA
-SQBJAGYAZwBnAGgAaQBpAGoAawBrAGwAbQBtAG4AbwBvAHAAcQBxAHIAcwBzAHQAdQB1AHYAdwB3
-AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAIAEMAlGMBABLSAAAAAAAA//8PADB4AQC2AAAA
-AAAAAP8AAAAweAEAtwAAAAAAAAD/AAAAMHgBALgAAAAAAAAA/wAAADB4AQC5AAAAAAAAAP8AAAAw
-eAEAugAAAAAAAAD/AAAAMHgBALsAAAAAAAAA/wAAADB4AQC9AAAAAAAAAP8AAAAweAEAvgAAAAAA
-AAD/AAAAMHgBAL8AAAAAAAAA/wAAADB4AQDAAAAAAAAAAP8AAAAweAEAwQAAAAAAAAD/AAAAMHgB
-AMIAAAAAAAAA/wAAAJRjAQAT0gAAAAAAAP//DwAweAEAGwEAAAAAAAD/AAAAMHgBABwBAAAAAAAA
-/wAAADB4AQAdAQAAAAAAAP8AAAAweAEAHgEAAAAAAAD/AAAAMHgBAB8BAAAAAAAA/wAAADB4AQAg
-AQAAAAAAAP8AAAAweAEAIgEAAAAAAAD/AAAAMHgBACMBAAAAAAAA/wAAADB4AQAkAQAAAAAAAP8A
-AAAweAEAJQEAAAAAAAD/AAAAMHgBACYBAAAAAAAA/wAAADB4AQAnAQAAAAAAAP8AAACUYwEAFNIA
-AAAAAAD//w8AMHgBAIIBAAAAAAAA/wAAADB4AQCDAQAAAAAAAP8AAAAweAEAhAEAAAAAAAD/AAAA
-MHgBAIUBAAAAAAAA/wAAADB4AQCGAQAAAAAAAP8AAAAweAEAhwEAAAAAAAD/AAAAMHgBAIkBAAAA
-AAAA/wAAADB4AQCKAQAAAAAAAP8AAAAweAEAiwEAAAAAAAD/AAAAMHgBAIwBAAAAAAAA/wAAADB4
-AQCNAQAAAAAAAP8AAAAweAEAjgEAAAAAAAD/AAAAlGMBAAjSAAAAAAAA//8DANRjAQAAggAAAAAA
-AP8BAADUYwEAAYIAAAAAAAD/AQAAlGMBAAnSAAAAAAAA//8DANRjAQACggAAAAAAAP8BAADUYwEA
-A4IAAAAAAAD/AQAAlGMBAArSAAAAAAAA//8DANRjAQAEggAAAAAAAP8BAADUYwEABYIAAAAAAAD/
-AQAAlGMBAAbSAAAAAAAA/wEAAJRjAQAH0gAAAAAAAP8DAACUYwEABtIAAAkAAAAA/gMAlGMBAAfS
-AAAKAAAAAPwPAJRjAQAG0gAAEgAAAAAA/AeUYwEAB9IAABQAAAAAAPA/lGMBABXSAAAAAAAA/wMA
-AJRjAQAM0gAAAAAAAP8BAACUYwEAFdIAAAoAAAAA/A8AlGMBAAzSAAAJAAAAAP4DAJRjAQAV0gAA
-FAAAAAAA8D+UYwEADNIAABIAAAAAAPwHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABAAEAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAEAAIAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABQACAAEAAQAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAEAAJAAUAAwABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAgABMACgAFAAMA
-AQABAAAAAAAAAAAAAAAAAAAAAAAAAEAAJgAUAAoABQADAAEAAQAAAAAAAAAAAAAAAAAAAAAAgABM
-ACgAFAAKAAUAAwABAAEAAAAAAAAAAAAAAAAAAAAAAZcAUAApABQACgAFAAMAAQABAAAAAAAAAAAA
-AAAAAAACLgGgAFEAKQAUAAoABQADAAEAAQAAAAAAAAAAAAAAAARdAj8BogBRACkAFAAKAAUAAwAB
-AAEAAAAAAAAAAAAACLkEfwJEAaMAUQApABQACgAFAAMAAQABAAAAAAAAAAAQcgn+BIkCRgGjAFEA
-KQAUAAoABQADAAEAAQAAAAAAACDkEvsJEQWLAkYBowBRACkAFAAKAAUAAwABAAEAAAAc0g3SEdIQ
-0gLSAdID0hvSC9IAgAXSEtIT0hTSBEMG0gfSBNIJEAAAtQAaAYEBBQAEAAYACAAJAAoACwAMAIMA
-kgDoAPcATgFdAQ8ALgAAAGwAAAB0AAAAgAAAAIwAAACdAAAABwAAAAQAAAAIAAAAEAAAAEAAAACA
-AAAAIAAAAAAAAAAJAAAAEgAAAAAAAAAKAAAAFAAAAP////8AAAAALQEAAN0BAABaAgAAugIAAAoD
-AABNAwAAhwMAALoDAADoAwAAEQQAADcEAABZBAAAegQAAJgEAAC0BAAAzgQAAOcEAAD+BAAAFQUA
-ACoFAAA+BQAAUQUAAGQFAAB1BQAAhgUAAJcFAACnBQAAtgUAAMUFAADTBQAA4QUAAO4FAAD7BQAA
-CAYAABQGAAAgBgAAKwYAADcGAABCBgAATAYAAFcGAABhBgAAawYAAHUGAAB+BgAAiAYAAJEGAACa
-BgAAogYAAKsGAAC0BgAAvAYAAMQGAADMBgAA1AYAANsGAADjBgAA6gYAAPIGAAD5BgAAAAcAAAcH
-AAAOBwAAFAcAABsHAAAiBwAAKAcAAC4HAAA1BwAAOwcAAEEHAABHBwAATQcAAFMHAABYBwAAXgcA
-AGQHAABpBwAAbwcAAHQHAAB5BwAAfwcAAIQHAACJBwAAjgcAAJMHAACYBwAAnQcAAKIHAACnBwAA
-qwcAALAHAAC1BwAAuQcAAL4HAADCBwAAxwcAAMsHAADQBwAA1AcAANgHAADcBwAA4QcAAOUHAADp
-BwAA7QcAAPEHAAD1BwAA+QcAAP0HAAABCAAABQgAAAgIAAAMCAAAEAgAABQIAAAXCAAAGwgAAB8I
-AAAiCAAAJggAACkIAAAtCAAAMAgAADQIAAA3CAAAOwgAAD4IAABBCAAARQgAAEgIAABLCAAATwgA
-AFIIAABVCAAAWAgAAFsIAABfCAAAYggAAGUIAABoCAAAawgAAG4IAABxCAAAdAgAAHcIAAB6CAAA
-fQgAAIAIAACCCAAAhQgAAIgIAACLCAAAjggAAJEIAACTCAAAlggAAJkIAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAQAAgABAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAFAAIAAQABAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAQAAkABQADAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAACAAEwAKAAUAAwABAAEAAAAA
-AAAAAAAAAAAAAAAAAAAAQAAmABQACgAFAAMAAQABAAAAAAAAAAAAAAAAAAAAAACAAEwAKAAUAAoA
-BQADAAEAAQAAAAAAAAAAAAAAAAAAAAABlwBQACkAFAAKAAUAAwABAAEAAAAAAAAAAAAAAAAAAAIu
-AaAAUQApABQACgAFAAMAAQABAAAAAAAAAAAAAAAABF0CPwGiAFEAKQAUAAoABQADAAEAAQAAAAAA
-AAAAAAAIuQR/AkQBowBRACkAFAAKAAUAAwABAAEAAAAAAAAAABByCf4EiQJGAaMAUQApABQACgAF
-AAMAAQABAAAAAAAAIOQS+wkRBYsCRgGjAFEAKQAUAAoABQADAAEAAQAAAC4AAABsAAAAdAAAAIAA
-AACMAAAAnQAAAAcAAAAAAAAAAAAAAAoAAAAN0hHSENIC0gHSA9Ib0gvSAIAF0hLSE9IU0gRDCNIJ
-0grSHNIG0gfSAQAAAAAAAAAAAAAAAAAAAAMAAAAEAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAA
-AAAAAP8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1ABoBgQEEAA8AgwDoAE4BkgD3AF0BBgAI
-AAkACgALAAwABQAAAAAAAAAsAAEAAAAAAAAAAAAAAAAAAAAAAAAAAgACAAIAAADfAAAAGQEAAGIB
-AAC+AQAAMgIAAMMCAAB7AwAAYgQAAIQFAADyBgAAvggAAAILAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAACAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAgAB
-AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAFAAIAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAQAAkABQADAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAACAAEwAKAAUAAwABAAEAAAAAAAAAAAAA
-AAAAAAAAAAAAQAAmABQACgAFAAMAAQABAAAAAAAAAAAAAAAAAAAAAACAAEwAKAAUAAoABQADAAEA
-AQAAAAAAAAAAAAAAAAAAAAABlwBQACkAFAAKAAUAAwABAAEAAAAAAAAAAAAAAAAAAAIuAaAAUQAp
-ABQACgAFAAMAAQABAAAAAAAAAAAAAAAABF0CPwGiAFEAKQAUAAoABQADAAEAAQAAAAAAAAAAAAAI
-uQR/AkQBowBRACkAFAAKAAUAAwABAAEAAAAAAAAAABByCf4EiQJGAaMAUQApABQACgAFAAMAAQAB
-AAAAAAAAIOQS+wkRBYsCRgGjAFEAKQAUAAoABQADAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAWAADhygAAYAAAA+HGAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAA3LIBAAYAAAAEJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwBYAAOHKAABgAAAD4cYAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAD0vQEABAAAAAQlgAAAAAAAAAAAAAAAAAAcvQEABAAAAAQlgAAAAAAAAAAAAAAAAACUvgEA
-BgAAAAQlgAAAAAAAAAAAAAAAAAAcvQEABAAAAAQlgAAAAAAAAAAAAAAAAAD0vQEABAAAAAQlgAAA
-AAAAAAAAAAAAAAAcvQEABAAAAAQlgAAAAAAAAAAAAAAAAAD0vQEABAAAAAQlgAAAAAAAAAAAAAAA
-AAAcvQEABAAAAAQlgAAAAAAAAAAAAAAAAACUvgEABgAAAAQlgAAAAAAAAAAAAAAAAAAcvQEABAAA
-AAQlgAAAAAAAAAAAAAAAAAD0vQEABAAAAAQlgAAAAAAAAAAAAAAAAACUvgEABgAAAAQlgAAAAAAA
-AAAAAAAAAAD0vQEABAAAAAQlgAAAAAAAAAAAAAAAAAD0vQEABAAAAAQlgAAAAAAAAAAAAAAAAACU
-vgEABgAAAAQlgAAwBYAAOHKAABgAAAD4cYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQFAAAAAAAAAAAAAAAAAAAAAAD/AP8A
-AAAAAAAEFggWFhYMFhYWFhYWFhAAAAAADwA/AAEAAAAPAD8AAQAAAA8APwABAAAADwA/AAEAAAAP
-AD8AAQAAAA8APwABAAAADwA/AAIAAAAPAD8AAQAAAAAAAAABAAAAAgAAAAMAAAAAAAAABAAAAAIA
-AAAFAAAACgUBpREBAKUAPDg0MCwoJCAcGBQQDAgEAAwIBAA8ODQwLCgkIBwYFBAMCAQCABQOAAAA
-ABoAAAABAQABAgEBAQEBAQEBAQEBAgICAgICAgIDAwMDAwMDAwQEBAQEBAQEAQICAgICAgMDAwMD
-AwMDAwMDAwMDBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAEBAgECAgN//wcPHz8BAwEDDwcB
-Bw8fP3///wUABwIDBAYGdNFFF+iiiy4NDwUHCQsBAwoUN25VVVUBS2gvAVVVVQXjOI4DqqqqAnEc
-xwGqqqoKx3EcBw8PDwcGBwIDBAUAAQgJCwooACgAMAAsACwAKAA8ADQAKAAoADQAMAAsACwARAA8
-AEAAPACMAGwAWABIAPQAsAAsACwAPAA0ADAALABUAEQAVABUAGwAYABcAFQAjAB4ADoBAgHVAN8A
-2gCiAHUAfwBqARoB2QDoAAoBugB5AIgAigUqAzkBqAGKBcoC2QBIAcoBSgHiAPkAygHqAIIAmQD0
-AkQCtQHVAZQChAH1AEECrACQAIQAgAB4AHgAeAB0AGbmAACd2ImdTuzETjRIgzQndmInGqRBGhM7
-sRMRGIERD/zAD07sxE4ndmInGqRBGhM7sRMN0iANiZ3YCQiMwAgHfuAHNEiDNBqkQRoRGIERDdIg
-DQiMwAgGaZAGsLLVBQVUQAUndmInEzuxEw3SIA2JndgJBmmQBsRO7AQERmAEAz/wA6qqqqoapEEa
-EzuxEw/8wA8RGIERDdIgDQqogAoTO7ETD/zADw/8wA8N0iANC7RACwu0QAuJndgJDdIgDQqogAoK
-qIAKCIzACAd4gAcHeIAHBmmQBg/8wA8N0iANC7RACw3SIA0LtEALiZ3YCQiMwAiJndgJCIzACAd+
-4AcHfuAHwSwpBwqogAoIjMAIB3iABwiMwAgHeIAHBmmQBrCy1QUGaZAGsLLVBQVUQAUFVEAF1h3G
-BA0AGgAnADQATgBoAHUAggAaADQATgBoAJwA0ADqAAQBJwBOAHUAnADqADgBXwGGATQAaACcANAA
-OAGgAdQBCAIMAE4AaACCAHUAnADDAGgAggCCAJwAtgC2ANAAnADDAMMA6gARAREBOAGCAJwAtgCc
-ALYA0ADqANAA6gAEAQQBHgHDAOoAEQHqABEBOAFfATgBXwGGAYYBrQEAADAAAAA2AAAADAAAABIA
-AAAYAAAAJAAAAAYAAAAJAAAAAAAAAAAAAAAYIBQUDg4UFAUGAQIDBAAAAAEBAgECAgMEDAwIBAwE
-BEAAAACAAAAAAAEAAAACAABAAAAAAAQAAEAAAABAAAAAEBESExQVFhcYGRobHB0eHyAhIiMkJSYn
-KCkqKywtLi9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNkZWZnaGlqa2xtbm9w
-cXJzdHV2d3h5ent8fX5/MxMAAAAHBw8HDw8XLQAPIADwYQAAAAAAAAAAAAABAgQEAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAUzS1AGy1o5O1ZQAAAHR0XAZ0dHR0QQAACAAAAAIAAAAAAAAAAAAAAAgA
-AAACAAAAAAAAAAAAAAAIAAAAAwAAAAEAAAAIAAAACAAAAAIAAAACAAAACAAAAAECAQIDBAAABQYH
-CAkKAAAABQYAAgQABQAAAAAABQcBAwQABQEAAABAI0AlISEhIUBAQEBABQQEAQFAQEBABQVAQAwM
-QA0MDAEBAQVAQAUFAAQABEBAAARAQEAFQEBAQEAFQEBABQUFAQEBAUAFBQUBBQEBQAUFBUAFQAUF
-BQUFbABwBHQIdAwABAQGAAAAAAAAAABkAAAAAJABAAoAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAA
-AAAAAAAAAAAAAAEAAAAQAAAAAAAAAAEAAAABAAAAAAAAAP8AAAD/AAAAAAAAAAAAAADcvgEAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAEAABkAAAA7EQBAPREAQD8
-RAEAUEUBAFhFAQBgRQEABwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH
-BwcHBwcHBwcHBwcHBwcHBgYGBgYFBQUFBQQEBAQEAwMDAwMCAgICAgEBAQEBAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKJUPIToCbAAcUJ2Au
-AAAABA4JHS05AAAEEQkfLTsAARAAAQAAAAKAAAFCBgIQAAIgAAADwAABQwYDEAACwAAAA8AAAUMG
-BBAAAkAAAAKAAAFEBgURAABAAAADwAABRQYGEQAA4AAAA8AAAUUGBxEAAQAAAAKAAAFGBggRAAIg
-AAADwAABRwYJEQACwAAAA8AAAUcGChEAAkAAAAKAAAFIBgsSAABAAAADwAABSQYMEgAA4AAAA8AA
-AUkGDRIAAQAAAAKAAAFKBg4SAAIAAAACgAABTAYAACIWAACAAAADAAABWQAkFgABAAAAAwAAAVoA
-JhYAAgAAAAQAAAFaACgWAAIAAAADAAABWwAqFgACgAAAAwAAAVwALBcAAAAAAAQAAAFcAC4XAACA
-AAADAAABXQAwFwABAAAAAwAAAV4ANBcAAgAAAAMAAAFfADYXAAKAAAADAAABYAA4GAAAAAAABAAA
-AWAAPBgAAQAAAAMAAAFiAD4YAAIAAAAEAAABYgBAGAACAAAAAwAAAWMAZBsAAgAAAAMAAAFvAWYb
-AAKAAAADAAABcAFoHAAAAAAABAAAAXABbBwAAQAAAAMAAAFyAW4cAAIAAAAEAAABcgFwHAACAAAA
-AwAAAXMCdB0AAAAAAAQAAAF0AnYdAACAAAADAAABdQJ4HQABAAAAAwAAAXYCfB0AAgAAAAMAAAF3
-A34dAAKAAAADAAABeAOAHgAAAAAABAAAAXgDhB4AAQAAAAMAAAF6A4YeAAIAAAAEAAABegSIHgAC
-AAAAAwAAAXsEjB8AAAAAAAQAAAF8BJEfAAFAAAADAAABfgSVHwADAAAABAAAAX8Flx8AAsAAAAMA
-AAGABZkgAABAAAADAAABgQWdIAABQAAAAwAAAYIFnyAAAcAAAAMAAAGDBaEgAAMAAAAEAAABgwWl
-IQAAQAAAAwAAAYUFAAAAAAAAAAAAAIi3AQCQtwEA+LcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAACQAAAP////8AAAAAAAAAAAEAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAABQUFBQUF
-BQUAAAAAgA0AAAAgAACADQAAgA0AAAAgAACADQAAAAYAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
-====
diff --git a/sys/contrib/dev/iwn/iwlwifi-5000-8.24.2.12.fw.uu b/sys/contrib/dev/iwn/iwlwifi-5000-8.24.2.12.fw.uu
new file mode 100644
index 00000000000..72e45e32920
--- /dev/null
+++ b/sys/contrib/dev/iwn/iwlwifi-5000-8.24.2.12.fw.uu
@@ -0,0 +1,6239 @@
+Copyright (c) 2006-2009, Intel Corporation.
+All rights reserved.
+
+Redistribution.  Redistribution and use in binary form, without 
+modification, are permitted provided that the following conditions are 
+met:
+
+* Redistributions must reproduce the above copyright notice and the 
+  following disclaimer in the documentation and/or other materials 
+  provided with the distribution. 
+* Neither the name of Intel Corporation nor the names of its suppliers 
+  may be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+* No reverse engineering, decompilation, or disassembly of this software 
+  is permitted.
+
+Limited patent license.  Intel Corporation grants a world-wide, 
+royalty-free, non-exclusive license under patents it now or hereafter 
+owns or controls to make, have made, use, import, offer to sell and 
+sell ("Utilize") this software, but solely to the extent that any 
+such patent is necessary to Utilize the software alone, or in 
+combination with an operating system licensed under an approved Open 
+Source license as listed by the Open Source Initiative at 
+http://opensource.org/licenses.  The patent license shall not apply to 
+any other combinations which include this software.  No hardware per 
+se is licensed hereunder.
+
+DISCLAIMER.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
+DAMAGE.
+begin-base64 644 iwlwifi-5000-8.24.2.12.fw.uu
+DAIYCIz+AQAAwAAANOUBAADAAAAAAAAAICCADwAAQABpIAAAaSBAAGkgAABpIEAAICCADwAA6ABp
+IAAAaSBAAGkgAABpIEAAICCADwAAnAVpIAAAaSBAAGkgAABKIAAASiEAAEoiAABKIwAASiQAAEol
+AABKJgAASicAAEogABBKIQAQSiIAEEojABBKJAAQSiUAEEomABBKJwAQSiAAIEohACBKIgAgSiMA
+IEokACBKJQAgSiYAIEonACBKIAAwSiEAMAokgD+AAADAQSycMEAsnDBCJBw0CiKAP4AA8FoKIwA3
+Gg8AAEomAHBpIEAASiYAcEomAHBKJgBwSiYAcAAWAHCAAFgEQHggIECHAAAAAAAAAAAAAArIz3Gg
+AMgfDhkYgAvIDxkYgAzIEBkYgA0SAjYAyER4ERkYgA7ILRkYgOB+4cT8HMi+/BxIvuHA4cHhwuHD
+/BwIsfwcSLH8HIix/BzIsfwcCLL8HEiy/ByIsvwcyLL8HAi/aiSAEOHEaiTAEOHE8cDPcKAA0BsU
+gM9xgABUBAQggI/PUQThAKEK8i8pAQDPcIAAPAnwIEAAQHja/9HAwcRrJMAQwcRrJIAQwcSfdAQU
+CzQEFAo0BBQJNAQUCDQEFAc0BBQGNAQUBTQEFAQ0wcPBwsHBwcDBxEUsfhAKJkB+wcRrJIAUwcQg
+IECHCsiHuAoaGDALyJu4CxoYMAzIDBoYMA3Ih7gNGhgwDsiFIMMPDhoYMOB+4HjxwArIlbgKGhgw
+C8ibuAsaGDANyIq4jbiQuA0aGDDPcIAAZAoYiIHgC/QNyM9xAACgCqy4DRoYMM4NIAAP2GfY5g7g
+AIohhgjRwOB+z3CAAOSbAICGIP6BCPQNyAUggA8AAADUDRoYMEDx4HjxwM9xAwBADc9woACoIC2g
+z3KAAJQEIIIBaQCiWg4gAUjYz3CAAKAIJYAjgSCBx3EAAIgTjgyACNLx4HjPcIAAoAgdBIAI4Hjx
+wMoKQAGA4M92gABUBAbygeAG9AHYA/AA2AuugOEG8oHhBvQB2APwANgKroDiBvKB4gb0AdgD8ADY
+DK4A2M91oADIHxgdGJALjoDgiiEQAA7yCI6A4Azyz3ADAEANRR0YEDClAtgYHRiQA/AxpQqOgOAa
+8gmOgOAW8s9wAQCK/iAdGJDPcIAAJAAhHRiQz3CAAFAEIh0YkBgVAJZFIAADGB0YkAyOgOAH8hgV
+AJaFIAEEGB0YkIDjGPIA2JS4z3aAAIgEAKZx2Aa4tgggAfzZIIbPcAAATBymCCABn7kYFQCWhbgY
+HRiQTQJAAc9xqqq7u89wnwC4/zagNqA2oDagz3GgAMg7DoGIuA6haSBAAP7x4HjxwKXBQcBCwQwc
+ADEQHEAxz3GAAPxbNBnADzAZAA8sGcAOKBmADiQZQA7PcIAA/FsgGEALz3CAAPxbHBgAC89wgAD8
+WxgYwArPcIAA/FsUGIAKz3CAAPxbEBjACM9wgAD8WwwYgAjPcIAA/FsIGEAIz3GAAIBbgBkACHwZ
+wAd4GYAHdBlAB3AZAAdsGQAHaBmABmQZQAZgGQAGXBnABVgZgAVUGUAFUBkABUwZwARIGYAERBlA
+BEAZAATvoc6hraGMoSwZwAIoGYACJBlAAiAZAAIcGcABGBmAARQZQAEQGQABY6FqIAAD2BkAAGog
+wALUGQAAaiCAAtAZAABqIEAByBkAAGogAAHEGQAAaiDAAMAZAABqIIAAvBkAAGogQAC4GQAAaiAA
+ALQZAABqIIABzBkAANDYn7jPcZ8AuP8doc9wgAAAAMSAUyXENVMmxTXXugHm077EoFMjwAQFJo4f
+0P4AANahBSCAD7D+AAAWoRiBUyfONQDdlLgYoUDDAcACwclzDBQGMCYM4AAQFAcwz3CgALQPvKDP
+caAAyDsugb4L4AB92FoMQAH2DuAAqXAI2ADZtg7gAJm5EPHxwM4PIAF72JoL4ADX2c9xgAD8WzQZ
+wA8wGQAPLBnADigZgA4kGUAOz3CAAPxbIBhAC89wgAD8WxwYAAvPcIAA/FsYGMAKz3CAAPxbFBiA
+Cs9wgAD8WxAYwAjPcIAA/FsMGIAIz3CAAPxbCBhACM9xgACAW4AZAAh8GcAHeBmAB3QZQAdwGQAH
+bBkAB2gZgAZkGUAGYBkABlwZwAVYGYAFVBlABVAZAAVMGcAESBmABEQZQARAGQAE76HOoa2hjKEs
+GcACKBmAAiQZQAIgGQACHBnAARgZgAEUGUABEBkAAWOhaiAAA9gZAABqIMAC1BkAAGoggALQGQAA
+aiBAAcgZAABqIAABxBkAAGogwADAGQAAaiCAALwZAABqIEAAuBkAAGogAAC0GQAAaiCAAcwZAADr
+ds91oADIHxkVEZbPcAAARBxOCiABCiDAL1pwz3CAANwoI4DPc58AuP/Pd4AAAAAEh4DhAeDTuCTy
+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
+BwBCJSaiz3EAAII+JqLPcQAAQj4mos9xAQCCPiaiz3EBAEI+JqLPcQIAgj4mos9xAwBCPiaiz3ED
+AII+JqLPcQcAQj4mos9xAADCVyaiz3EAAEJYJqLPcQEAwlcmos9xAQBCWCaiz3ECAMJXJqLPcQMA
+Qlgmos9xAwDCVyaiz3EHAEJYJqLPcRsAAh4mos9xGwBCNyaiz3EbAMJQJqLPcQAAQiEmos9xAACC
+ISaiz3EGAMIhJqLPcwEAQiFmos9zAQCCIWaiJqLPcwIAQiFmos9zAwCCIWaiJqLPcwMAQiFmos9z
+BwCCIWaiJqLPcQAAwjomos9xAACCOiaiz3MGAAI7ZqLPcQEAwjomos9xAQCCOiaiZqLPcQIAwjom
+os9xAwCCOiaiZqLPcQMAwjomos9xBwCCOiaiZqLPcQAAQlQmos9xAAACVCaiz3MGAIJUZqLPcQEA
+QlQmos9xAQACVCaiZqLPcQIAQlQmos9xAwACVCaiZqLPcQMAQlQmos9xBwACVCaiZqLPcXkAwh8m
+os9xeQACOSaiz3F5AIJSJqLPcRAAQiomos9xMwCCKiaiz3EBAMIqJqLPcRAAgkMmos9xMwDCQyai
+z3EBAAJEJqLPcRAAAl0mos9xMwBCXSaiz3EBAIJdJqKA4A7yz3EtAEIeJqLPcS0Agjcmos9xLQAC
+UQ3wz3FqAEIeJqLPcWoAgjcmos9xagACUSaiz3E/AIIpJqLPcQEAwikmos9xPwDCQiaiz3EBAAJD
+JqLPcT8AQlwmos9xAQCCXCaiz3EIAAIBJqKA4BLyz3AAAAIqBqLPcAIAAisGos9wAABCQwaiz3AC
+AEJEBqLPcP8AAmcGos9w/wBCZwaiz3D/AIJnBqLPcP8AwmcGos9w/wBCdQaiz3D/AIJ1BqLPcP8A
+wnUGos9w/wCCHQaiz3D/AMI2BqLPcP8AQlAGos9wgAACDAaiz3ADAMYABqIg3s91oADIH9ClMthD
+HRgQANiSD6/0jbjRpScEz//gePHA4cXPcYAAcGUEkc9ygADMiYDgANtgohHygeAn8oLgPvIKIcAP
+63IF2Iojhw1KJEAAYQWv80olAAAH2Bi4AKJhqmKqSiTAcGhwqCAAAwDbjrsWIg0AYaUD2w67YqUB
+4APYBrEHsQDYF/AA2Jm4AKJS2AGqSiTAcAKqqCCAAgDdj70WIsAAoaCioAHjUtgC22axAdtnsSUH
+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
+7/4F2Aylw9jPdqAA7CcGpgqGz3erAKD/ALWKIMQABqYKhgG1iiDFAAamCoYCtYogywAGpgqGA7WK
+IM8ABqYKhgS1z3AAAIMNBqYKhgW1z3AAAMMNBqYKhga1z3AAAAMOBqYKhge1z3CnABRICIAEpc9w
+pwCYRzyAJaXPcacAFEhXgTaBRqUnpc9xpQAIDCKBxtoopTiHkLoppTmHKqU6hyulz3EFAMYDJqYB
+2Uamz3IsAAIBRqbPcloAQgFGpooiiwBGps9yQACHDUamz3LRAMINRqbPcsAABw5Gps9ypwAUSCii
+z3JQAP8AXKDPcKcAFEg3oADZNqDPcKUACAxQ2SKg/NgYp3PYGacah4G4GqfPcBEABg4GpotwgcGV
+/zOFAMBShSJ4NIUKuLILr/tCeYQohANCKUFyNrkBwidxSrmCIcQCz3CAADByMKVVoDagz3BAAIYN
+BqbPcBAAAg4GpotwgcGD/zOFAMBShSJ4NIUKuGoLr/tCeQQogA8AAHQJQilBcja5AcIncUq5T+HP
+cIAAMHIxpVegOKABlRC4hSCEAAamApUQuIUghQAGpgOVELiFIIsABqYElRC4hSCPAAamBZUQuAUg
+gA8AAIINBqYGlRC4BSCADwAAwg0GpgeVELgFIIAPAAACDgamJIXPcKcAFEgooCaFIBUFEDegJ4VM
+JQCANqDPcKUACAwIGEAByiHCD8oiwgfKIGIByiOCDwAA9QAkAGLzyiQiAAmFGKcKhRmnC4Uap64K
+7/4MhYog0QVmDS/0MIUQhRkCr/SiwPHAqgmP9M9wgABwZQeIgOAcAiEAosE+Ce/+BdjPdYAA5D0M
+pcPYz3agAOwnBqYKhgDbALWKIMQABqYKhs9xpwCYRwG1iiDFAAamCobPd6sAoP8CtYogywAGpgqG
+A7WKIM8ABqYKhgS1z3AAAIMNBqYKhgW1z3AAAMMNBqYKhga1z3AAAAMOBqYKhge1z3CnABRICIAE
+pRyBBaXPcKcAFEhXgBaARqUHpc9wpQAIDAKAxtoIpRiHkLoJpRmHCqUahwulz3AFAMYDBqYB2Eam
+z3IsAAIBRqbPcloAQgFGpooiiwBGps9yQACHDUamz3LRAMINRqbPcsAABw5Gps9ypwAUSAiiz3JQ
+AP8AXKHPcacAFEgXoXahz3ClAAgMUNkioPzYGKdz2BmnGoeBuBqnz3AqAAIOBqaLcIHB+v4Awc9w
+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
+aqAxGEIBMhhCAduwWrAeCG/yDOABhQjZMqgEwYDhBvLPcIAAJAgkoGIK7/SpcGUBT/LgeM9wgABA
+fiiAz3CfALj/ANo2oAjZ7HAgoAPZz3CgABQEJaAByOxxAKHPcKAA1AtNoOB+4HjPcYAAOAjgfwCh
+4HjPcIAAOAjgfwCA4Hi1AA/ysQAP8uB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfwDY4H8A
+2OB+4HihweB/ocDgeOB+4HjxwOHFAcjPdYAAZEMApQRtMgkv8gLZz3GADgQA7HAgoM4P7/EAhcEA
+T/LgeOB+4HjgfuB48cAAFgBBz3KAAGRDBrIAFgVBQCIBBA4aRAFMJYCEyiHCD8oiwgfKIGIByiOC
+DwAARABYBuLwyiQiAADaB/AAFgBBFCGMAAC0AeIvIEIBEHK39oIID/LRwOB+4HjgfuB44H7geOB+
+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjPcIAAPAjgfwCA4HjgfuB44H7geOB+4HjgfuB44H7g
+eOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB4
+4H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB/Adjg
+fuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+
+4HjgfuB48cDhxc91gACkQ6lwsg/v8QPZABWFEEQlQAGF4MohwQ/KIsEHyiBhAcojgQ8AAE8ACAXh
+8MokYQABjYPgw/ZjuAGtQg/P8R0HD/LgePHAmg4P8hpxz3aAAKRDII5RIQCARvLPcYAARAggiYDh
+zCAhoD7ygeAG9M9wgADoiaGAA/AA3Y7lA/eA5QL0AN3PcYAA6IkYiYDgBPSA5QT0AN8E8KKBBN+K
+IBMB7gnv8alxiiBTAeYJ7/Hpcc9wgABkChiIg+DMICKBzCDigcwgIoII8oogEwHCCe/xi9kK8AqW
+EHUI9AuWEHfMICGgBPQA2CHwAdjPcaAAyB8Noc9wgABECAGI67aqtgS/ELjlfQV9iiATAYYJ7/Gi
+2YogEwF6Ce/xqXHPcKAAyB9/GFiDAdgdBg/y4HjxwLYNL/IIccT/gOA88iDdz3agAMgfsKYy2EMe
+GBAA2NYN7/GNuLGmsKYe2EMeGBAA2MYN7/GNuLGmfxYPloogEwFBLw0UxL0aCe/xzNmKIBMBEgnv
+8elxiiATAQYJ7/Gpcc9xgABECAGJAdoQdcIiigCA5UCpyPYA2A2mgeIE9ATYAamZBQ/yz3CAAKRD
+AIhRIICAB/LPcaAAwB0AgYC4AKHgfs9wgACkQwCIUSCAgAfyz3GgAMAdAIGguACh4H7xwOHFz3CA
+AJgIAJDPdYAAXKSpcboNoACKIgQKAI2E4Mohyw/KIssHyiBrAcojiw8AAHkJyiQrAAwD6/DKJcsA
+z3CAAJoIAJDPcYAArKZU4BB4fg2gAA7aFQUP8g54LHgpagDYDyBAACdwWnjgfw4gwADgePHAggwP
+8s9wgABICBGIBfBAJ0AAD3j4cM9wgABICBKI8HCOAAsAANkH2EQpPgdZcC9wGXGELwMBJ3DPcYAA
+XKQAIQQAHxTEABlhHhHFADlwAN4AIY0fgABcpNV9542IcQXa6XAFFcMQ4P9AKIEQNHmELwEFJ3HU
+ecdxgADIpthxAKnpcKhxB9oGFcMQ1/8B5s9+hua+B+v/AR4CAEIiQBCA4EAgQRCGB+3/L3my8T0E
+D/LgeIDgG/SMIcKNNgAqAAHaSiSAceB4qCBABM9zgAA9pUQqPgcyI0MOcHHL9oDjB/KG4gfyAeJP
+egDaA/Bhuk964H9IcOB48cB+Cw/yGnCA4TpylAAsAADfWnEVIMAjTCEAoKCIAogL8s92gADAQxV+
+ArgUeMdwgABURgrwz3aAAPhDFX4CuBR4x3CAAPxGIYhRIQCAJPIFEMEAIq4GEMAAA64qcKlx1/8A
+roDgzCBigMogIQAT8kQoPgcAIYB/gABcpMUQggDhEIEAAiWAEBB4B7jeCy/5QnkBrkIiQSCA4XoH
+7f8B5zkDD/LxwOoKD/LPcIAAcGUEkM91gABICADeguDMIGKABfQB2BCtEa0F8APYEK3RrQLYEq2K
+IAcIXg6v8QDZbv/PcIAAlKYYiIDgBvIB2CQdAhAE8CQdghOKIAcIOg6v8QHZgv+KIAcILg6v8QLZ
+z3GAAOBaIIHPcIAA9EkB2rn/iiAHCBIOr/ED2c9xgADkWiCBz3CAAEhKANqy/4ogBwj2Da/xBNm1
+Ag/y4HiB4PHAuHEY9EwlAIDE9kwlgIPL9gohwA/rcgXYiiPKBW0A7/CYc0AtgABkuMdwgADAQxvw
+z3CAAPRIMiBBAYwhw4/KIcEPyiLBB8ogYQHKI4EPAACcAjgA4fDKJMEAz3CAAPhDNXjRwOB+4HgC
+eS15gOFMeS9yRfZZIgECA/BWIgECR7k4YOB/D3jgePHArgkP8gh2KHVIdxpzT3kQuQ94CLgFeYog
+RwhCDa/xpXnPcIAASAgBiIDg8AECAIDnzCAioAnyLG0vec9wgABICDOoBvDPcIAASAizqKlxz3KA
+AEgItKrVqvaqFxoCBMlwxf8AEIcA4YjPcIAASAjRiBKIEHaeAQkARC8+By9xhC4DEQokQA4AIU0O
+z3CAAGCkHWVAL4IAVHqELgEVCiVADgAiQA4AIIgPgADIpgAmgx+AAGQITCcAgMwnYoAm9BoVwBAA
+2QyrGxXAEEokgHEQqxiNFKuoIEAGFCBAEEGIc250ezV7x3OAAKynABDAAFirFSVCEBmrARLAAAHh
+GqsAii95G6t+8AEVwBCA4Bj0ANpMq1CrVKtKJIBxANmoIMADE24UeDV4x3CAAKynWKhZqFqoW6gB
+4S95ZPBsugAiQAF8uQAkRAAAIIYPgADIpgAkgA+AAGCkGog6jelyof8MqwAkgA+AAGCkG4g7jely
+nP8Qq89ygABgpAAkgAAYiDiNACSFAOlylv8UqwDbSiGAERQmywAUIMQQAROAEAEUgQDpco//M240
+eXV5ACGKD4AArKcYGgIQABOAEAAUgQDpcoj/GRoCEBUlywAVJcQQAROAEAEUgQDpcoL/GhoCEAAT
+gBAAFIEA6XJ+/xsaAhBCIUkQTCEAkAHjmgft/297AebPcIAASAgSiM9+EHZuBsz/ANnPcIAASAgg
+qPUHz/HxwJIP7/GKIIcIz3WAAEgILguv8TONAY2A4I70FY0zjU3/FhWGEEwmAIAMFcIQB/IDEMAA
+UHBH9gbwAhDAAFBwgvZIcC8hBRDPcYAAXFwUjXaJEHML9BWNNIkwcAf0DRXAEAkgQAIvIQUQEo0x
+jRBxxAAJABMVhBAVFYUQDhWHECQViBAA20okgHPgeKgggQNMJwCAD/JEKb4DACNADs92gAAAqIIm
+EBMeZpYmwhBArjrwz3CAAGQIz3aAANxEbmZ8uAIhjxPtf0gnThDNfkwgAJDMJSKAEfJMJgCADfSM
+40v2z3eAAJSmFCcPEfaP+38JJ44TzX44YDAQjwDPcIAAzERoYEQpvgMCfwknjhMAI0AOz3eAAACo
+gicQEx9nlifCEMCvAeNvewHhEo0veRBxTAfM/8UGz/HhxeHGABHNAIDlRPYA3aCpgOAS8tTlhPdT
+3aCpz3CAAJRFFCBOA6COoKoAEcEANHgBiBHw1OWE91PdoKnPcIAA7EQUIE4DoI6gqgARwQA0eAGI
+AKvBxuB/wcXgeKHB8cD6Dc/xocFlwgh2KHXPcIAAmgaFwYtyQCRDMACI4f9ELr4WACVAHhQUwjDP
+cYAA9KOY5ThgYAAqAFioUyWAEIXgQAAKAEYlwBEPe8K4heBiAAoAIMcBFI0wACaAH4AAPHx2eKCo
+5KhELr4WACNADjhgWKgB4297UyOAAIXgrvYZ8AEUgDDHdoAAPHy2fgCuIMAErg/wARSAMHi9x3aA
+ADx8r322fsAeAhAgwMQeAhAI3LMF7/GhwOB48cAyDc/xGnCKIAcJ4giv8Qpxz3CAAEgIAYiA4Eoj
+ACCd9M9wgABICNGIEojPcYAAoEQQdiYBKQAyIRIEancKIcAkA/B6dc9wgABkCHy42GAsEMEAz3KA
+AACoRC6+EwAiQC6CIhADGmIzIoMPAAAYBM9wgABICBiIe3ttewXaC/5KJIBxAN2oIIAFc250e7V7
+z3KAAKyneWI5iYDhemIL8hBxEPIQcRP2heVW9gHlr30K8EIlkRAvIUckYb2vfQ/wGxLPAADZanUK
+8IDlANnKJWEQBPIpbS95OnEB2YDhLfJzbnR7FSNCA893gACsp1lnACeFEBUjQwR6Z1mKOYlQcX9n
++4/Y9gIhhAAbFYEABL/wf0J4BLkvJAgBAidDEGx4LyBGDv4M7/iIcQ54An8I5+5/RL/tf0wgAKaE
+9gjn7X/JcApx6XKA/wHmz3CAAEgIEojPfhB28AbM/zEEz/HgePHA3gvP8c9woAC0D3AQEADPdoAA
+SAiKIMcIdg9v8SaGAY6A4ADdUvTPcKAAtA+8oFKOcY5QcxH2z3CAAPSjf9kUI88AH2csr62vAeNv
+e1BzBdkur/X2AN8O3c9wgAC8ROhgkP9hvYDlAefvfzf3MY7PcIAAAKiCIBADRCm+AydwMyCADwAA
+GASU4Jn2D46A4BXyz3GAAFxcFI5WiRByD/QVjlSJEHIL9BaOAdqA4BKJwHoQcgP0AdgArgaGz3Gg
+ALQPB6ZwGQAEeQPP8fHAz3KAAEgIIYqA4Qv0ANkDqg+KIqqA4CCqtA2i8MogYgUfAc//4HjPcYAA
+9KMVeQCBgOAQ8ve4BvIFIIAPAP8AAAChTLiAIMOPDAAEAIwgw4/E9oogBw3gfw548cC+Cs/xz3WA
+AEgIBI0UIAEAx3GAAPSjTomA4gDeDPSKIIcJz3H+/v7+Pg5P8cetAdgi8GG6TqkxjYHhyiCBA+P/
+jCAHjcoggQ8AAOYByiGBD7q7rdvr80SNz3GAAGQIfLkNe1lhKBHBABiNB9pt/QatANi1As/x8cBC
+Cu/xANhKJIABz3KAAEgIz3WAAKynxIoKJABxZoqoIIAE8270fxV/+WU4iYDhv2cL8nBxDfJwcY/2
+heAT8gHgD3gH8CpoKaphuA3wGo8LqgDYC/CA4AX0ANgJqgHYA/ApaCmqCqoB2EECz/HgePHA1gnP
+8c92gABICGSOA7sKjnR7FSMBAM9wgACspz1gSY64jVV7emBYihtjUHU4YBqIVvYCIkEDuosEuDB5
+EHgEvWaOonhiegx6agrv+C8gRg4OeLhgCOAOeES45QHv8Quu4HjhxeHGz3KAAEgII4rPcIAAoEQr
+YASKz3GAAACogiEQA0QovgMnc3lhMyGBDwAAGAQ7eWuKLXkUeMdwgAD0owIjTQAhbTx5LyFFgBzy
+DBDOANF+z36B5jF9r33H9mG+CSZNE699AvAB3YDhxPateQTws3kteSyobagB2AiqANgF8ADbbqgB
+2OUC7/8nqvHA5gjv8RXYpguv8ADez3WAAEgID42A4GfyIo2F4aQADQAzJkFwgADYWkAngHI0eAB4
+x60Rjcitxa0ErXv/AtkirS7wl/+A4ATyA9gCrSXwBNgCrSHwr//88cf/BdkirR7wJY3PcIAAvEQp
+YASNRCi+BgAhQg4AIoMPgAD0o3iLBxXCEHpiTXqX/gWNAeAPeI7gBa1D9gDYAvAB2IDgIvIEjQDa
+AeAyjQ94MHBFrQSt0vYIjYDgGfIB2ACtQq0V8AohwA/rcgXYiiPVC5h2ZQZv8Lh2xgqv8BXYAdgC
+rQXwugqv8BXYbQDP8eB48cDhxc91gAB0BoogxwmWC2/xIIXPcYAASAhBiQCFgOIGoQv0J4FNaDBy
+wCBsAcwhDIDkC8n/OQDP8eB48cAAFoBAz3GAAEgIDKkAFoRAABaAQFAkvoENqQAWgEDKIcIPyiLC
+B8ogYgHKI4IPAABoAM8j4gLQBWLwyiXCAFEkgIEA2MogYQAPqc9wgACYBgCQgOAE8vT94P72D0/x
+gwWP/4Hg8cC4cRj0TCUAgMT2TCWAg8r2CiHAD+tyBdiM24kFb/CYc0AtgAAUeGy4x3CAAFRGHPDP
+cIAA9EgyIEABjCDDj8ohwQ/KIsEHyiBhAcojgQ8AAJEAUAVh8MokwQACuBR4x3CAAPxG0cDgfvHA
+6g6P8c92gACaBgCOz3eAAJgGII/g/0GIz3WAAIQI47oglwbyAdgArYogxwNI8AKAgOAF8gDYAK2Q
+uT7wUSIAgTHyz3KAAFxcFooQcSv0AJZ0inBwJ/TPcIAAnAYAiFKKEHIf9M9wgABkCgmAUSBAgRny
+QYWA4gDbDvLPcKAALCAQgEJ413AxAQAtRPcB2kCtBPBgrQDaELqKIEcDRXkO8AGNgOAH8gHYAK2K
+IAcDBvAA2ACtkbmKIAcE2glP8ZEGr/EAjeB48cAmDq/x2HEKJoCQiHXMIyKABvJCJgYBLyaHAchx
+rP+A5s9xgACECAOhIfIkiAK5NHlDiAPhUSIAgGKIDPQKIcAP63IF2IojSACYcyUEb/AKJYABCGFR
+IECACvQKIcAP63IF2IojCAHx8WGI4LvKIcEPyiLBB8ojgQ8AAA8CyiBhAeXz4b3RIyKByiHCD8oi
+wgfKI4IPAAAVAsogYgHX9VElAJAO8lEjwIDKIcEPyiLBB8ojgQ8AABsCyiBhAcfz0QWP8fHAWg2P
+8Rpwz3GAAFxcz3aAAJgGAJZWiRByz3WAAIQIEfTPcIAAmgYAkFSJEHIL9M9wgACcBgCIMokQcQP0
+Ao0C8ADYAa2M/89wgACcBkCIz3GAAJoGAIkgjoDiAdrAegpzAN+Yd7b/A4UBiFEgAIEglgfyAdgD
+rYogRwME8OOtiiCHA4YIT/E1BY/xz3GAAFxcz3CAAJgGAJBWiRByFfTPcIAAmgYAkFSJEHIN9M9w
+gACcBgCIMokQcQf0z3GAAIQIAYkCqeB+4cVTIA0AoKkEIIEPAAYAAEIhAYAEIIAPQAAAAMohYgAg
+qtdwQAAAAAHYwHgAq+B/wcXgePHAWgyP8aHBCHYodxpyAN3PcKAAtA9wEBEAiiDHAPIPL/HJcc9w
+oAC0D7ygi3FAJEIwQCSDMOlw5f9MIACgBfRKJAAACfDPcIAA1IgBiIDg+PVKJIAAIMABFIIwyXEC
+FIMweP/PcIAAhAgpiIDhzCZCkAXyI4CqqKKh5b8W8s9xgABcXFaJUHYQ9FSJUycDEFBzDPQEJ48f
+AAYAAIDnAdoyicB6MHIF8qKooaCgqIogxwBeDy/xyXHPcaAAtA9wGUAE+QOv8aHAhCgLCgAhgX+A
+ACSeKBGAACiBANqS8eB4gODxwA70Cv/PcaAALCAwgcdxSWsA0iKgFg8v8YoghwV1BM//gODxwNhx
+CvQA/wDZIqCKIMcF+g4v8chxWQTP//HA4cXPdYAAhAiKIEcG4g4v8SmNBNiyCO/7AdkIjSmN6P+Z
+A4/x4HjxwM9xgACECIogxwa6Di/xKYnPcIAAPEZSDM/4EQTP/+i4CPIEIL6PAAAAGAHYA/QA2OB/
+AKngePHA3gqP8aHBCHUA3s9woAC0D3AQEADPcKAAtA/coOONiiAHAWoOL/HpcQSVi3FAJIMwgOAB
+2MB4LycAAAWFQCRCMIP/CoVAJEEw6P+A55UlQx7Y91YlABjwIIADViUBHNR5IInAuAUgwAEvJAcA
+IMABFIIwAhSDMBL/Aebxdqz3iiAHAQoOL/Hpcc9xoAC0D3AZAAStAq/xocDgePHAPgqP8aHBGnAA
+3s9woAC0D3AQEQDPcKAAtA/coIogRwHSDS/xCnGEKAYvACGNf4AAvIQh8EAlABcWIIQDBRSAAIYg
+/ocY8gSFi3FAJIMwQCRPMOlyV/+oFQAQ6XG8/yDABBSBAAEUgjACFIMwSiTAAO3+AeYMlRB2vgfF
+/4ogRwFyDS/xCnHPcaAAtA9wGUAEC/HxwLYJr/GKIAcGz3aAAIQITg0v8SSGFd0EhjJoAeA0ecdx
+gAD8RgSmAoGA4BHyz3OgACwgcINieNdwSWsA0gDax/dCoYogxwUWDS/xIIkEhqrghPcA2ASmYb2A
+5bwHzf/BAY/x8cDPcYAAdAaKIIcB7gwv8SCB4//PcIAAmAYAkIDgSArC/0ECz//gePHAIgmv8dhx
+ocEacItxQCRCMEAkgzDIcB7/ARSAMIDgCfICFIAwgOAF8kIgECEvIAckIMAKcWf+ARSBMIDhBPKi
+iAPwoYiKIMcBigwv8chxQCgAJkAtAhQFegEUgDACFIEwCLgFeoogxwFqDC/xRXnhvdEl4pAF8lEl
+AJEM8gohwA/rcgXYiiOMBphz6QYv8AolAAQi8eB48cCKCI/xz3CAAGQKKBCQAKiAiiAHAiYML/EK
+cVMlABAKcUb+AYhRIACByiHCD8oiwgfKIGIByiOCDwAAMQPKJMIAnAYi8MolAgSlAI/x4HjPcaAA
+YB0SsRSR4H7xwDIIr/GYcIDhuHKGACwAANoVJIAA4IiiiNhxw4ghiM9wgACYCAGQOGAQePL/BCCB
+DwAAAP9HuUwlAIACvbR9wCWCH4AAVEbAJYEfgAD8RoDj4K0D8gKtAvABrVEgAIAT8oDjDPIDjfJu
+9H+AuAOt+GUDiL9ngbgDr8StgOME8iatA/AlrUImQQCA4YYH7f8B4gkAj/HgePHAz3CAAPRJDtkB
+2gDb1//PcIAALEoH2QHaSHPT/89wgABISirZANoA29D/z3CAAPBKC9kA2gHbzP/RwOB+4HjxwGbY
+xv/PcoAAmAgBsmfYw/8AsgGSAeAQeMH/ArIBkgLgEHi+/wOy5v9ODE//5/HxwOHFCHUocwfwqXC4
+/wIbFAAB5bB9YbqMIv+P9/WFB0/xAAAAAAAAAAAAAAAAAAABAAAAAAAAAAQLgACUC4AAgFuAABAA
+gAAECMAQCgATZEwFgIEAAMAWBAETYg9cACIKAABAAAYAcB8AAGEAABMkAAATJQAAwBfIIMAQcEXA
+EBAIwBD//1wzAAATJAAAEyUECMARDxQVIgQAFSb7/zAyAwATJBgIwBEcCMARDxQVIgEAFSYEADAw
+AAJFcAIAAGEBABMkLBDAETAAEyTsHMARAwATJFAUwBEEGMARAAATJBBFwBEYCMARD3wTIggAzBEA
+ABMlAAATJDRIxxEPexMiAQATMAQowBEPFBUiBAAVJg96EyIYKMARD00TIgQQxRECABMk8BzAEQEA
+EyTsHMARAAATJHAAEyUQHMARAAATJQAAEyTgHMARAQATJCQQwBEAAAAhAAATJQAAEyQPRQAiAFwA
+OQMAAGICYABiAABYOFMAAGEkEMARAIATJDgcwBEPcxMiggETMAQowBEPdBMiAgITMAQowBEPdRMi
+QgITMAQowBEPFBUiAQAVJg9wEyIBABMwBCjAEQ9yEyIIAMwRD0QAIgoAAEAAQABwDgAAYQAAEyUC
+ABMk7BzAEQ92EyIYCMoRCQATQBwIyhEJABNAIAjKEQ94EyIEAMoRAAABJAAAASUGAABhD3YTIixI
+xxEPeBMiAADGEQMAASQAAAElDxQVIgIAFSYPRQAiAFwAOR8AAGQAABMkAQATJTgcwBEPdxMi4BzA
+EQ8BEyIECMARDxQVIgEAFSYPAxMi//ATMhgowBEAAxM4//MTMhgowBEAAxM4GCjAEQMAEyQAABMl
+BAjAEQAAEyQ4RcARDwMTIv8/EzLw/xMzDxMCIjxDgIEAAMAWAAITOBgowBEEAABhAABYOAAAEyQB
+ABMlOBzAETRDgIEAAMAWCAATYgAAEyUDABMkVATFEX8CEyQEAMUROEOAgQAAwBYIAMURAAAAIVRb
+gIEAAMAWPATAEQgFgIEAAMAWBAEbYhAEwBADABskVATAESQEwBEIBMAQFFuAgQAAwBcIBMAQ9FqA
+gQAAwBcAABslAxwbYkAAGyQwHMARBQAAYQwFgIEAAMAWDxsZIggEoIE48MSAAAAbJAIAGyU4HMAR
+AAAAIQgFgIEAAMAWTATAEQwFgIEAAMAWDxsZIkgEoIE48MSAAAAbJAIAGyU4HMARAAAAIQAAAIUI
+BYCBAADAFg8bBCIQBBtmDwEbaBQcwBAKABtABAAbbgMAAGEPHB0iAQAdJvkPAGFkDAAQAMAGEQEA
+BCf8AARkAAAbJAIAGyU4HMARAAAAIQAAGyVAABskMBzAEQAAACEPHB0iGAEdJhgAxxB0foCBAADA
+FyAAxxB8foCBAADAFwAAACHgL4CB+EHEEA8bCSIACwk5AgAKYgMBCmIEAgpiAAAJQAQAAGEJAAlA
+AgAAYQoACUAAAABhAgAJQQAJGigAAMAWAQAbJgAAwBcEAB0mAQAIJ+sACGQAAAAhAAAAACwBAAAB
+AQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAxDQAAKg1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAMAAkADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmH+AAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABk
+iIAASGkBAAAAAAAAAAAAAAAAAAAAAAAAAAAAiIiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AQAAAAAAAAAAAAABAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+BQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAC
+AAAABgAIAAkAAAAHAAAAAAAAAAIAAAACAAAAgwAAAJIAAADoAAAA9wAAAE4BAABdAQAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAD//wAA/JiAACS7AQAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAEB+gAC01AEAAAAAAAAAAAAAAAAAAAAAAEB+gADo2wEAAAAAAAAAAABAfoAAXN0BAAAA
+AAAAAAAAAAAAAEB+gAAAAAAAAAAAAAAAAAD/AAAAAAcAAAAAAAAAAAAAAAAAAH9/AAEAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgQIAAgQIAAAAAAAAAAAAQAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAADgBwAAFQAAAHAtgAB4CgAAeAoAAHgKAAB4CgAAeAoAAHgKAAB4
+CgAAeAoAAHgKAAB4CgAAeAoAAHgKAAB4CgAAeAoAAHgKAAB4CgAAeAoAAHgKAAB4CgAAeAoAAHgK
+AAB4CgAAeAoAAHgKAAB4CgAAeAoAAHgKAAB4CgAAeAoAAHgKAAB4CgAAvAsAAAAAAADsLgEAeAoA
+ALgIAAB4CgAAeAoAAHgKAADoCAAA3BUBABRUAAB4CgAAeAoAACAJAAAgCQAAIAkAACAJAAAgCQAA
+IAkAACAJAAB4CgAAeAoAAHgKAAB4CgAARAoAAHgKAAB4CgAAeAoAAHgKAAB4CgAAwAsAAHgKAAB4
+CgAAnAgAAAMAAACg4wEAAgAAAMw7AQAEAAAAHDEAAAYAAABQ5QEAEQAAAKi0AQAHAAAANNcBAAgA
+AADQ5QEADAAAAJxUAQANAAAAtFgBAA4AAADsWAEAFgAAAFQuAQALAAAAqGwBABQAAAAwVQAADwAA
+ALhjAAAQAAAA9CUBAAEAAAAQ0wEAEgAAADyBAQATAAAAsHIBAAUAAAAUZwAAFQAAALD0AQAXAAAA
+vAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnCUAAJwlAACcJQAAPDcAAJwlAACcJQAAMDcAAJwl
+AACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAHQaAAAYHAAAHBwAAJQdAAAcHgAAmB0A
+AJwlAACcJQAA7D8AAGBDAAA0RAAAnCUAAJwlAACcJQAAsD4AAPixAAD0sQAAMLIAAJwlAACcJQAA
+nCUAAEA3AACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACc
+JQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwl
+AACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAMDgAAJwlAACcJQAAnCUAAJwlAACcJQAAFDkA
+AJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAVP4AAJwlAAB8/wAA
+nCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACoZgAAnCUAAJwlAACcJQAAnCUAAJwlAACc
+JQAAnCUAAJwlAACcJQAAnCUAAJwlAAB0awEA/G4BAJwlAAAwVQEAnCUAAJxWAQBIRgEAnCUAAJwl
+AACwRAAAnCUAAJwlAACcJQAAnCUAAJwlAAC4vAEAYLYBAJwlAACcJQAAnCUAAJwlAACcJQAAnCUA
+AJwlAADo5AEA7OQBAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAADXAQCcJQAANNoBAJwlAADY9QEA
+nCUAAPQgAAD4IAAAnCUAAJwlAACo5gEANFUAAJwlAACcJQAAnCUAAHzRAQCcJQAAnCUAAPAmAQCc
+cgEAnCUAAJwlAACcJQAAeHkBAGRBAQCcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACshwEAnCUAALTl
+AQC45QEAxOUBAMjlAQC85QEAwOUBAMzlAQCcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUA
+AJwlAACIRgAAnCUAAJwlAACcJQAAnCUAAJwlAAAk5QEAWOUBAEg7AACcJQAAnCUAAJwlAACcJQAA
+nCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACc
+JQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwlAACcJQAAnCUAAJwl
+AACcJQAAnCUAAJwlAACcJQAA7DsAAGw8AAD0PAAAkD0AAFhiAABoPQAAnCUAAJwlAACcJQAAnCUA
+AJwlAADkOwAA6DsAAJwlAACcJQAA4EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAABAAAAABAAAAAQEAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAADhAw4e4eEDDh7hwQIKHuGBBQwe4eEDDh7h4QMOHuHBAgYe4YEFDB7hAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQEBAQEBAQEBAQEB
+AQ0NDQ0NDQ0NDQ0NDQ0NDQ0DAwMDAwMDAwMDAwMDAwMDAAAAAAAAAAAAAAAAAAAAAAEBAQEBAQEB
+AQEBAQEBAQENDQ0NDQ0NDQ0NDQ0NDQ0NAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAAAAAAAAAAAAAAB
+AQEBAQEBAQEBAQEBAQEBDQ0NDQ0NDQ0NDQ0NDQ0NDQMDAwMDAwMDAwMDAwMDAwMAAAAAAAAAAAAA
+AAAAAAAAkQIAADHKLwCRAgAAMcovAJECAAAxyi8AkQIAADHKLwCRAgAAMcovAJECAAAxyi8AkQIA
+ADHKLwCRAgAAMcovAEMBAAAxyi8AQwEAADHKLwBDAQAAMcovAEMBAAAxyi8AQwEAADHKLwBDAQAA
+McovAEMBAAAxyi8AQwEAADHKLwBADQAA3gMJAAAAAAAAAAAAAAAAALz9AAABAAAAMC2AAAAAAAAA
+AAAAAAAAAEz+AAAVAAAAcC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA
+AAADAAAAAAAAAAgAAAAAAAAAQEIPABQCAQD4AgEACAQBANQFAQAIBAEA1AUBAIAHAQAECAEAgICA
+gICAgIABgAKAgICAgAAAAABwEAEAcBABAAAAAAAAAAAAAAAAAAAAAABwEAEAcBABAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAwLYAAMC2AAKQgoAA4IKAAAQAAAPz///8AAAAAAAAAAFAtgABQ
+LYAAqCCgADwgoAAIAAAA8////wAAAAAAAAAAcC2AAHAtgACsIKAAbCCgADAAAADP////AAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAQnAQAFAAAAcC2A
+ADAsAQAA/wMAUCwBAAD/BQA8LQEAAP8tAGAtAQAA/z0AGC0BAAD/BAD8LAEAAP8lABQ0AQAANQEA
+dDUBAJAwAQDILwEAYDYBAOg2AQAsNwEAfDcBAAAAAAAsAQAAXgEAAAEAAAABAAAAAQAAAAEAAAAD
+AAAAAAAAAAAAAAAAAAAAAwAAAAIAAAADAAAAAwAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAA
+AAA0PQEACgAAADAtgAAAAAAAAAAAAAAAAADAPQEACgAAADAtgAAAAAAAAAAAAAAAAAD0PQEACgAA
+ADAtgAAAAAAAAAAAAAAAAABsPgEACgAAADAtgAAAAAAAAAAAAAAAAACMPwEACgAAADAtgAAAAAAA
+AAAAAAAAAAAEPwEACgAAADAtgAAAAAAAAAAAAAAAAACERQEABgAAADAtgAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAQAAAAAIAAAAAAoAAQJwAA6AMAAOgDAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAyFsBAMhcAQBsXwEACGIBAGxkAQCkZwEAWF4BABwFgAAIfoAAGAAA
+AMh9gAAAAAAAAAAAAAAAAAAAAAAAAAAAALxpAQAGAAAAMC2AAAAAAAAAAAAAAAAAAOwXAQAKAAAA
+MC2AAAAAAAAAAAAAAAAAAOwXAQAKAAAAMC2AAAAAAAAAAAAAAAAAAOwXAQAKAAAAMC2AAAAAAAAA
+AAAAAAAAAOwXAQAKAAAAMC2AAAAAAAAAAAAAAAAAAOwXAQAKAAAAMC2AAAAAAAAAAAAAAAAAAOwX
+AQAKAAAAMC2AAAAAAAAAAAAAAAAAAOwXAQAKAAAAMC2AAAAAAAAAAAAAAAAAAOwXAQAKAAAAMC2A
+AAAAAAAAAAAAAAAAAOwXAQAKAAAAMC2AAAAAAAAAAAAAAAAAAOwXAQAKAAAAMC2AAAAAAAAAAAAA
+AAAAAOwXAQAKAAAAMC2AAAAAAAAAAAAAAAAAAOwXAQAKAAAAMC2AAAAAAAAAAAAAAAAAAKhwAQAK
+AAAAMC2AAAAAAAD//////////wAAAAAAAAAAAAAAACxyAQAFAAAAcC2AAGQAZABpANwAyABaAKoA
+vgCGAX0APgBkAGQAaQDcAMgAWgCqAL4AhgF9AD4AAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAQIBAQACAQABAgICAAEBAAIBAgECAAIAAQIDAAAAABSHAQCElAEABIqAAMADAAAAAAAAFIcB
+AECIAQDEjYAA+AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANyYAQDglgEAvI+AAFQAAAAAAAAA
+FIcBABCXAQA8kIAAUAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABSHAQCIkwEAhDeAAFABAAAA
+AAAA8JgBAJiVAQC8BoAAAgAAAAAAAAAUhwEAxJUBAMAGgAAEAAAAAAAAAMiYAQBAiAEAEJCAACwA
+AAAAAAAAFIcBADCWAQAAAAAAAAAAAAAAAAAUhwEA8JUBAMQGgAAEAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAQACAAIAAwAEAAQABQAGAAYABwAgACAAIQAiACIAIwAkACQAJQAmACYA
+QwBEAEQARQBGAEYARwBIAEgASQBKAEoASwBMAEwATQBOAE4ATwBQAFAAUQBuAG4AbwBwAHAAcQBy
+AHIAcwB0AHQAdQB2AHYAdwB4AHgAeAB4AHgAeAB4AHgAeAAPAD8AAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAQABAAIAAwADAAQABQAFAAYABwAHAAgACQAJAAoAIwAjACQAJQAlACYAJwAn
+ACgAKQApAEYARwBHAEgASQBJAGYAZwBnAGgAaQBpAGoAawBrAGwAbQBtAG4AbwBvAHAAcQBxAHIA
+cwBzAHQAdQB1AHYAdwB3AHgAeAB4AHgAeAB4AHgAeAAOAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAQACAAIAAwAEAAQABQAGAAYABwAgACAAIQAiACIAIwAkACQAJQAmACYAQwBEAEQA
+RQBGAEYARwBIAEgASQBKAEoASwBMAEwATQBOAE4ATwBQAFAAUQBuAG4AbwBwAHAAcQByAHIAcwB0
+AHQAdQB2AHYAdwB4AHgAeAB4AHgAeAB4AHgAeAAPAEMAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAIA
+AwADAAQABQAFAAYABwAHAAgACQAJAAoAIwAjACQAJQAlACYAJwAnACgAKQApAEYARwBHAEgASQBJ
+AGYAZwBnAGgAaQBpAGoAawBrAGwAbQBtAG4AbwBvAHAAcQBxAHIAcwBzAHQAdQB1AHYAdwB3AHgA
+eAB4AHgAeAB4AHgAeAB4AHgAeAB4AHgAeAAIAEMAeHcBABLSAAAAAAAA//8PAOCQAQC2AAAAAAAA
+AP8AAADgkAEAtwAAAAAAAAD/AAAA4JABALgAAAAAAAAA/wAAAOCQAQC5AAAAAAAAAP8AAADgkAEA
+ugAAAAAAAAD/AAAA4JABALsAAAAAAAAA/wAAAOCQAQC9AAAAAAAAAP8AAADgkAEAvgAAAAAAAAD/
+AAAA4JABAL8AAAAAAAAA/wAAAOCQAQDAAAAAAAAAAP8AAADgkAEAwQAAAAAAAAD/AAAA4JABAMIA
+AAAAAAAA/wAAAHh3AQAT0gAAAAAAAP//DwDgkAEAGwEAAAAAAAD/AAAA4JABABwBAAAAAAAA/wAA
+AOCQAQAdAQAAAAAAAP8AAADgkAEAHgEAAAAAAAD/AAAA4JABAB8BAAAAAAAA/wAAAOCQAQAgAQAA
+AAAAAP8AAADgkAEAIgEAAAAAAAD/AAAA4JABACMBAAAAAAAA/wAAAOCQAQAkAQAAAAAAAP8AAADg
+kAEAJQEAAAAAAAD/AAAA4JABACYBAAAAAAAA/wAAAOCQAQAnAQAAAAAAAP8AAAB4dwEAFNIAAAAA
+AAD//w8A4JABAIIBAAAAAAAA/wAAAOCQAQCDAQAAAAAAAP8AAADgkAEAhAEAAAAAAAD/AAAA4JAB
+AIUBAAAAAAAA/wAAAOCQAQCGAQAAAAAAAP8AAADgkAEAhwEAAAAAAAD/AAAA4JABAIkBAAAAAAAA
+/wAAAOCQAQCKAQAAAAAAAP8AAADgkAEAiwEAAAAAAAD/AAAA4JABAIwBAAAAAAAA/wAAAOCQAQCN
+AQAAAAAAAP8AAADgkAEAjgEAAAAAAAD/AAAAeHcBAAjSAAAAAAAA//8DALh3AQAAggAAAAAAAP8B
+AAC4dwEAAYIAAAAAAAD/AQAAeHcBAAnSAAAAAAAA//8DALh3AQACggAAAAAAAP8BAAC4dwEAA4IA
+AAAAAAD/AQAAeHcBAArSAAAAAAAA//8DALh3AQAEggAAAAAAAP8BAAC4dwEABYIAAAAAAAD/AQAA
+eHcBAAbSAAAAAAAA/wEAAHh3AQAH0gAAAAAAAP8DAAB4dwEABtIAAAkAAAAA/gMAeHcBAAfSAAAK
+AAAAAPwPAHh3AQAG0gAAEgAAAAAA/Ad4dwEAB9IAABQAAAAAAPA/eHcBABXSAAAAAAAA/wMAAHh3
+AQAM0gAAAAAAAP8BAAB4dwEAFdIAAAoAAAAA/A8AeHcBAAzSAAAJAAAAAP4DAHh3AQAV0gAAFAAA
+AAAA8D94dwEADNIAABIAAAAAAPwHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNIN0hHSENIC
+0gHSA9Ib0gvSAIAF0hLSE9IU0gRDBtIH0gTSCRAAALUAGgGBAQUABAAGAAgACQAKAAsADACDAJIA
+6AD3AE4BXQEPAC4AAABsAAAAdAAAAIAAAACMAAAAnQAAAAcAAAAEAAAACAAAABAAAABAAAAAgAAA
+ACAAAAAAAAAACQAAABIAAAAAAAAACgAAABQAAAAcBYAACH6AABgAAADIfYAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAATLgBAAYAAAAwLYAAAAAAAAAAAAAAAAAAhNQBAAYAAAAwLYAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcBYAACH6AABgAAADIfYAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAABwFgAAIfoAAGAAAAMh9gAAAAAAAAAAAAAAAAAAAAAAAAAAAABThAQAEAAAAMC2AAAAAAAAA
+AAAAAAAAAOjfAQAEAAAAMC2AAAAAAAAAAAAAAAAAANzhAQAGAAAAMC2AAAAAAAAAAAAAAAAAAOjf
+AQAEAAAAMC2AAAAAAAAAAAAAAAAAABThAQAEAAAAMC2AAAAAAAAAAAAAAAAAAOjfAQAEAAAAMC2A
+AAAAAAAAAAAAAAAAABThAQAEAAAAMC2AAAAAAAAAAAAAAAAAAOjfAQAEAAAAMC2AAAAAAAAAAAAA
+AAAAANzhAQAGAAAAMC2AAAAAAAAAAAAAAAAAAOjfAQAEAAAAMC2AAAAAAAAAAAAAAAAAABThAQAE
+AAAAMC2AAAAAAAAAAAAAAAAAANzhAQAGAAAAMC2AAAAAAAAAAAAAAAAAABThAQAEAAAAMC2AAAAA
+AAAAAAAAAAAAABThAQAEAAAAMC2AAAAAAAAAAAAAAAAAANzhAQAGAAAAMC2AABwFgAAIfoAAGAAA
+AMh9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAFAUAAAAAAAAAAAAAAAAAAAAAAP8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwQEBAQEBQYHCAgICAgJ
+CgsMDQAAAAUGBwgNDg8QFRYXGBkAAAoNERQKDREUCg0RFAoKAAAAAAAABgYGBgkJCQkABgAAbjto
+O2I7XDtuOmg6YjpcOm45aDliOVw5bjhoOGI4XDhuN2g3YjdcN24paCliKVwpbihoKGIoXChuJ2gn
+YidcJ24ZaBliGVwZbhhoGGIYXBhuF2gXYhdcF24JaAliCVwJbghoCGIIXAhuB2gHYgdcB24GaAZi
+BlwGbgVoBWIFXAVuBGgEYgRcBG4DaANiA1wDbgJoAmICXAJuAWgBYgFcAW4AaABiAFwAbjtoO2I7
+XDtuOmg6YjpcOm45aDliOVw5bjhoOGI4XDhuN2g3YjdcN24paCliKVwpbihoKGIoXChuJ2gnYidc
+J24ZaBliGVwZbhhoGGIYXBhuF2gXYhdcF24JaAliCVwJbghoCGIIXAhuB2gHYgdcB24GaAZiBlwG
+bgVoBWIFXAVuBGgEYgRcBG4DaANiA1wDbgJoAmICXAJuAWgBYgFcAW4AaABiAFwAAAAAAAAAAAAA
+AAAAUPoBAAgAAABwLYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAA/////////wAB//8CA////wT//////////////////////wX/Bv8H/wj/Cf8K/wv/DP///w3/
+//8O////D////xD//////////////////////////////////////////////xH///8S////E///
+/xT///8V////Fv///xf///8Y////Gf///xr///8b/////xz///8d////Hv///x////8g////If//
+////////////////////IiMk/yUmJ///KP///yn/////////////////////////////////////
+/////////////////////////////////////////wEEAAACBQEAAwYCAAQHAwAFCAQABgkFAAcK
+BgAICwcACQwIAAoNCQALDgoADA8LAA0QDAAOEQ0AAUEABAJCAQQDQwIEBEQDBAVFBAQGRgUEB0cG
+BLcTIgC4FCMAuRUkALsWJQC8FyYAvRgnAMAZKADEGikABxsAAAgcAQALHQIADB4DABAfBAAiIQUA
+JCIGACYjBwAoJAgAKiUJACwmCgAuJwsAMCgMADQpDQA4Kg4APCsPAEAsEABkLhEAaC8SAGwwEwBw
+MRQAdDIVAHgzFgB8NBcAgDUYAIQ2GQCINxoAjDgbAJE6HACVOx0AmTweAJ09HwChPiAApT8hACRJ
+BgIsSgoCNEsNATxMDwFkTREBbEMTAXRPFQF8UBcBhFEZAZVSHQGdUx8BAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQWCBYWFgwWFhYWFhYW
+EAAAAAAPAD8AAQAAAA8APwABAAAADwA/AAEAAAAPAD8AAQAAAA8APwABAAAADwA/AAEAAAAPAD8A
+AgAAAA8APwABAAAAAAAAAAEAAAACAAAAAwAAAAAAAAAEAAAAAgAAAAUAAAAYCAGlDAIApQA8ODQw
+LCgkIBwYFBAMCAQADAgEADw4NDAsKCQgHBgUEAwIBAIAFQ8AAAAAGwAAAAEBAAECAQEBAQEBAQEB
+AQECAgICAgICAgMDAwMDAwMDBAQEBAQEBAQBAgICAgICAwMDAwMDAwMDAwMDAwMEBAQEBAQEBAQE
+BAQEBAQEBAQEBAQEBAQAAAAAAQECAQICA3//Bw8fPwEDAQMPBwEHDx8/f///BQAHAgMEBgZ00UUX
+6KKLLg0PBQcJCwEDChQ3blVVVQFLaC8BVVVVBeM4jgOqqqoCcRzHAaqqqgrHcRwHKAAoADAALAAs
+ACgAPAA0ACgAKAA0ADAALAAsAEQAPABAADwAjABsAFgASAD0ALAALAAsADwANAAwACwAVABEAFQA
+VABsAGAAXABUAIwAeAA6AQIB1QDfANoAogB1AH8AagEaAdkA6AAKAboAeQCIAIoFKgM5AagBigXK
+AtkASAHKAUoB4gD5AMoB6gCCAJkAZuYAAJ3YiZ1O7MRONEiDNCd2YicapEEaEzuxExEYgREP/MAP
+TuzETid2YicapEEaEzuxEw3SIA2JndgJCIzACAd+4Ac0SIM0GqRBGhEYgREN0iANCIzACAZpkAaw
+stUFBVRABSd2YicTO7ETDdIgDYmd2AkGaZAGxE7sBARGYAQDP/ADqqqqqhqkQRoTO7ETD/zADxEY
+gREN0iANCqiAChM7sRMP/MAPD/zADw3SIA0LtEALC7RAC4md2AkN0iANCqiACgqogAoIjMAIB3iA
+Bwd4gAcGaZAGD/zADw3SIA0LtEALDdIgDQu0QAuJndgJCIzACImd2AkIjMAIB37gBwd+4AfBLCkH
+CqiACgiMwAgHeIAHCIzACAd4gAcGaZAGsLLVBQZpkAawstUFBVRABQVUQAXWHcYEDQAaACcANABO
+AGgAdQCCABoANABOAGgAnADQAOoABAEnAE4AdQCcAOoAOAFfAYYBNABoAJwA0AA4AaAB1AEIAgwA
+TgBoAIIAdQCcAMMAaACCAIIAnAC2ALYA0ACcAMMAwwDqABEBEQE4AYIAnAC2AJwAtgDQAOoA0ADq
+AAQBBAEeAcMA6gARAeoAEQE4AV8BOAFfAYYBhgGtAQAAMAAAADYAAAAMAAAAEgAAABgAAAAkAAAA
+BgAAAAkAAAAAAAAAAAAAABggFBQODhQUBQYBAgMEAAAAAQECAQICAwQMDAgEDAQEQAAAAIAAAAAA
+AQAAAAIAAEAAAAAABAAAQAAAAEAAAAAQERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uL0BB
+QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6
+e3x9fn8tAA8gAPBhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApcaE+JnujfYN/73Wsd5UkVBg
+AwKpzn1WGediteZNmuxFj50fQImH+hXv67LJjgv77EFns/1f6kW/I/dTluRbm8J1HOGuPWpMWmxB
+fgL1T4NcaPRRNNEI+ZPic6tTYj8qDAhSlWVGXp0oMKE3Dwq1LwkONiSbGz3fJs1pTs1/n+obEp4d
+dFguNC02stzutPtb9qRNdmG3zn17Uj7dcV6XE/WmaLkAACzBYEAf48h57ba+1EaN2WdLct6U1Jjo
+sEqFa7sqxeVPFu3FhteaVWaUEc+KEOkGBIH+8KBEeLol40vzov5dwICKBa0/vCFIcATx32PBd3Wv
+Y0IwIBrlDv1tv0yBFBg1Ji/D4b6iNcyIOS5Xk/JVgvxHeqzI57orMpXmoMCYGdGef6NmRH5UqzuD
+C8qMKcfTazwoeafivB0Wdq0721ZkTnQeFNuSCgxsSOS4XZ9uve9DpsSoOaQxN9OL8jLVQ4tZbrfa
+jAFksdKc4Em02PqsB/Mlz6/KjvTpRxgQ1W+I8G9KclwkOPFXx3NRlyPLfKGc6CE+3ZbcYYYNhQ+Q
+4EJ8xHGqzNiQBQYB9xIco8Jfavmu0GmRF1iZJzq5JzjZE+uzKzMiu9JwqYkHpzO2LSI8khUgyUmH
+/6p4UHqljwP4WYAJFxraZTHXxoS40MOCsCl3WhEey3v8qNZtOiwAAQIEBAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAFk4wAB0wLLAnMBtAACwsGUGsH2GsLBKAAkAAAACAAAAAAAAAAAAAAAJAAAAAgAA
+AAAAAAAAAAAACQAAAAMAAAABAAAACQAAAAkAAAACAAAAAgAAAAkAAAABAgECAwQAAAUGBwgJCgAA
+AAUGAAIEAAUAAAAAAAUHAQMEAAUBAAAAQCNAJSEhISFAQEBAQAUEBAEBQEBAQAUFQEAMDEANDAwB
+AQEFQEAFBQAEAARAQAAEQEBABUBAQEBABUBAQAUFBQEBAQFABQUFAQUBAUAFBQVABUAFBQUFBQQA
+AAAcEQAAHDIAABwzAAAEAAAAHBUAAAIAFwBsAHAEdAh0DAAEBAYAAAAAAAAAAGQAAAAAkAEACgAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAP8AAAAA
+AAAAAAAAAAAAAAAAAAAAAQAAABAAAAAAAAAAAQAAAAEAAAAAAAAA/wAAAP8AAAAAAAAAAAAAABDi
+AQAAAAAAAAQAAGQAAAAHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH
+BwcHBwcHBwcHBwcHBwcGBgYGBgUFBQUFBAQEBAQDAwMDAwICAgICAQEBAQEAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5G0BAOxtAQD0bQEATG4B
+AFRuAQBcbgEAAAQOCR0tNwAABA4JHSw7AAEQAAEAAAACgAABQgYCEAACIAAAA8AAAUMGAxAAAsAA
+AAPAAAFDBgQQAAJAAAACgAABRAYFEQAAQAAAA8AAAUUGBhEAAOAAAAPAAAFFBgcRAAEAAAACgAAB
+RgYIEQACIAAAA8AAAUcGCREAAsAAAAPAAAFHBgoRAAJAAAACgAABSAYLEgAAQAAAA8AAAUkGDBIA
+AOAAAAPAAAFJBg0SAAEAAAACgAABSgYOEgACAAAAAoAAAUwGAAAiFgAAgAAAAwAAAVkAJBYAAQAA
+AAMAAAFaACYWAAIAAAAEAAABWgAoFgACAAAAAwAAAVsAKhYAAoAAAAMAAAFcACwXAAAAAAAEAAAB
+XAAuFwAAgAAAAwAAAV0AMBcAAQAAAAMAAAFeADQXAAIAAAADAAABXwA2FwACgAAAAwAAAWAAOBgA
+AAAAAAQAAAFgADwYAAEAAAADAAABYgA+GAACAAAABAAAAWIAQBgAAgAAAAMAAAFjAGQbAAIAAAAD
+AAABbwFmGwACgAAAAwAAAXABaBwAAAAAAAQAAAFwAWwcAAEAAAADAAABcgFuHAACAAAABAAAAXIB
+cBwAAgAAAAMAAAFzAnQdAAAAAAAEAAABdAJ2HQAAgAAAAwAAAXUCeB0AAQAAAAMAAAF2AnwdAAIA
+AAADAAABdwN+HQACgAAAAwAAAXgDgB4AAAAAAAQAAAF4A4QeAAEAAAADAAABegOGHgACAAAABAAA
+AXoEiB4AAgAAAAMAAAF7BIwfAAAAAAAEAAABfASRHwABQAAAAwAAAX4ElR8AAwAAAAQAAAF/BZcf
+AALAAAADAAABgAWZIAAAQAAAAwAAAYEFnSAAAUAAAAMAAAGCBZ8gAAHAAAADAAABgwWhIAADAAAA
+BAAAAYMFpSEAAEAAAAMAAAGFBQAAAAAAAAAAAADEzgEASL8BAAjBAQBswgEAeMQBAPjGAQDYygEA
+nMwBAOTNAQA82AEAUNgBALzYAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQkSFBgAAA4AAAAqAAAABwAAAAsAAAD/////AAAAAAAA
+AAABAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAUFBQUFBQUFAAAAAIANAAAAIAAAgA0AAIANAAAAIAAA
+gA0AAAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIIAPAABAAGkgAABpIEAA
+aSAAAGkgQAAgIIAPAADoAGkgAABpIEAAaSAAAGkgQAAgIIAPAACcBWkgAABpIEAAaSAAAEogAABK
+IQAASiIAAEojAABKJAAASiUAAEomAABKJwAASiAAEEohABBKIgAQSiMAEEokABBKJQAQSiYAEEon
+ABBKIAAgSiEAIEoiACBKIwAgSiQAIEolACBKJgAgSicAIEogADBKIQAwCiSAP4AAAMBBLJwwQCyc
+MEIkHDQKIoA/gABgWgojADcSDwAASiYAcGkgQABKJgBwSiYAcEomAHBKJgBwABYAcIAAWARAeCAg
+QIcAAAAAAAAAAAAACsjPcaAAyB8OGRiAC8gPGRiADMgQGRiADRICNgDIRHgRGRiADsgtGRiA4H7h
+xPwcyL78HEi+4cDhweHC4cP8HAix/BxIsfwciLH8HMix/BwIsvwcSLL8HIiy/BzIsvwcCL9qJIAQ
+4cRqJMAQ4cTxwM9woADQGxSAz3GAAFQEBCCAj89RBOEAoQryLykBAM9wgACoCfAgQABAeNr/0cDB
+xGskwBDBxGskgBDBxJ90BBQLNAQUCjQEFAk0BBQINAQUBzQEFAY0BBQFNAQUBDTBw8HCwcHBwMHE
+RSx+EAomQH7BxGskgBTBxCAgQIcKyIe4ChoYMAvIm7gLGhgwDMgMGhgwDciHuA0aGDAOyIUgww8O
+Ghgw4H7gePHACsiVuAoaGDALyJu4CxoYMA3IiriNuJC4DRoYMM9wgADQChiIGwhRAA3Iz3EAAIwK
+rLgNGhgwxg0gAA/YZ9hqDuAAiiGGCNHA4H7xwM9wgABElgCAhiD+gQn0DcgFIIAPAAAA1A0aGDCg
+/4ogVQU6DuAAiiHGDOjx4HjxwM9xAwBADc9woACoIC2gz3KAAJQEIIIBaQCiwg0gAUjYz3CAAAwJ
+JYAjgSCBx3EAAIgT7gwACMrx4HjPcIAADAmBBAAI4HjxwBYKQAHPdoAAVAQF6A8IUQAB2ALwANgL
+rgbpDQlRAAHYA/AA2AquBeoPClEAAdgC8ADYDK4A2M91oADIHxgdGJALjoohEAAN6AiOC+jPcAMA
+QA1FHRgQMKUC2BgdGJAC8DGlCo4Z6AmOF+jPcAEAMuUgHRiQz3CAACQAIR0YkM9wgABQBCIdGJAY
+FQCWRSAAAxgdGJAMjgfoGBUAloUgAQQYHRiQGesA2JS4z3aAAIgEAKZx2Aa4NgggAfzZIIbPcAAA
+TBwqCCABn7kYFQCWhbgYHRiQrQFAAeB4z3Gqqru7z3CfALj/NqA2oDagNqDPcaAAyDsOgYi4DqFp
+IEAA/vHgePHApcFBwELBDBwAMRAcQDHPcYAAfFs0GcAPMBkADywZwA4oGYAOJBlADs9wgAB8WyAY
+QAvPcIAAfFscGAALz3CAAHxbGBjACs9wgAB8WxQYgArPcIAAfFsQGMAIz3CAAHxbDBiACM9wgAB8
+WwgYQAjPcYAAAFuAGQAIfBnAB3gZgAd0GUAHcBkAB2wZAAdoGYAGZBlABmAZAAZcGcAFWBmABVQZ
+QAVQGQAFTBnABEgZgAREGUAEQBkABO+hzqGtoYyhLBnAAigZgAIkGUACIBkAAhwZwAEYGYABFBlA
+ARAZAAFjoWogAAPYGQAAaiDAAtQZAABqIIAC0BkAAGogQAHIGQAAaiAAAcQZAABqIMAAwBkAAGog
+gAC8GQAAaiBAALgZAABqIAAAtBkAAGoggAHMGQAA0NifuM9xnwC4/x2hz3CAAAAAxIBTJcQ1UybF
+Nde6AebTvsSgUyPABAUmjh/Q/gAA1qEFIIAPsP4AABahGIFTJ841AN2UuBihQMMBwALByXMMFAYw
+qgvgABAUBzDPcKAAtA+8oM9xoADIOy6BQgvgAH3YpgtAAXYO4ACpcAjYANk2DuAAmbkQ8fHAKg8g
+AXvYHgvgANfZz3GAAHxbNBnADzAZAA8sGcAOKBmADiQZQA7PcIAAfFsgGEALz3CAAHxbHBgAC89w
+gAB8WxgYwArPcIAAfFsUGIAKz3CAAHxbEBjACM9wgAB8WwwYgAjPcIAAfFsIGEAIz3GAAABbgBkA
+CHwZwAd4GYAHdBlAB3AZAAdsGQAHaBmABmQZQAZgGQAGXBnABVgZgAVUGUAFUBkABUwZwARIGYAE
+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
+5BiAAB0GQADPcIAA3FtdAyAA6NnxwJoNQAAAFoNAABaPQAAWjUAAFpBAw7+j6M9xgADcW9aJFBGF
+ANF1zCNBgRDyCiHAD+tyEL1AKw8EBdiKI9sIBSWEE00EL/8FJcUDQCEOBvWpz3WAAISYhR3CEyHw
+z3CAAJCbApAXDQEQz3WAAISYwhUAFsC4HQsAAAohwA/rcgXYiiMbC5hzCQQv/0olAADPdoAAkJfP
+cIAA6JvpqEAgQSBJIQEGO3nuDSAAyXBCIMAlSCAAABsIdAAA2wDaABYBQAHi+wqUgAHj9QsEgFYm
+ABbGDSAABNnPcIAARJYAgDMIXgDPcYAA3FvPcIAAkJsCkFaJEQoBAMIVABY0icC4EwkAAMMVABYL
+CF4BCYUVCF8BPgtgAMlwz3CAAEAL9ag6DQAA2QRAAADYbPHxwKHBi3BmDSAAAdkAFAUwTCUAgMoh
+wQ/KIsEHyiBhAcojgQ8AACIHPAMh/8okYQDPcIAAiIf6DCAAAxhCAaHA0cDgfvHALgxAAM9zgAAA
+DEODAN/PdaAALCCwhdJq1H5+ZqWmBKYB4owiCIAmpkOjhfcCg+OjAeACo2EEQADgeADYz3GgAMgf
+GKEZoQHYDqHgfuB48cDeC2AAOXEZcshx6HIB3c92oADIH7OmBd/PdYAAcAvgpQGlBMBIpQmlFYYn
+pQqlGIYYHUARC6UZhhQdABEMpaAWABBkpQ2lpBYAEAwdABIOpagWABAIHUASD6XPcAEAGAgQpTIP
+IAAk2AQggA8AAAD4EaUiDyAAANgSpVMnwHUTpQHIVB0AFxalEhYAllAdABcXpRMWAJbPcoAAcAsY
+pRQWAJZKJAB5GaUVFgCWANkapRYWAJYbpc9wgAAQKBCAHKXPcIAAcAt0GIAKz3CAAHALeBjACs9w
+gABwC3wYAAuAGkALz3CgAMgcCICEGgAAqCBAAvAiQwDPcJ8AuP8B4XagRQNAAOB48cDPcYAAECgQ
+oeB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeNHA4H7geOHF
+4cZAKQ0CJX1ALQMUpXslCjQCCHVTJX6QBvIBHVIQYbr78UEqjgDBukImTpAEHdAQ/fUJ6i8kiXDg
+eKggQAEBHVIQ4HjBxuB/wcUocgDZ2PHgePHA4cUIdc9wgAAkCwGIFegH8NoPz/5aD+//iiCRD89w
+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
+N/DPcYAAHD0c4FYPb/8A2gSFz3GAAFw9BLgUePhgKfDPcYAAPD0U4DYPb/8A2gSFz3GAAFw9BLgU
+eEJwGfDPcYAAHD0k4BoPb/8A2gSFz3GAADw9BLgUeCJwBg9v/wDaBIXPcYAAXD0EuBR4AnDyDm//
+AdrdBE/18cAKJQCAz3GAALwGIBEEACLyz3KkALg9ANsfDBEAmxIABgmhphIABgqhkhIABguhoxIA
+BgyhmxrYAP/YphoYAJIaGACjGhgAAdrPcKAAtA9coCfwTCQAgMohwQ/KIsEHyiOBDwAA+wQUAyH0
+yiBhAQmBz3KkALg9mxoYAAqBphoYAAuBkhoYAAyBoxoYAAPIz3KgALQPhiD/DiK4HKIgGUABJvF5
+Bg/1dQYP9fHAcg4P9W/+HPHgeM9wgAB8PeB/EYDgePHAwgtP9Qh3GnEB2c9wpwCYRzqgIN7PdaAA
+yB/QpQrYQx0YEADYBgwv9Y240aXPcacAFEgMgQToHoED8B2BABgAIPe4xSCCDwD/AADTIOEFmg3v
++6DZ0QNv9QCn8cBqC0/1z3CAAPBkJoiA4c91gAB8PWQCIQCiwQeIgOBYAgEAiiCRBRYP7/QA2fIL
+L/8F2Aylw9jPdqAA7CcGpgqGz3erAKD/ALWKIMQABqYKhgG1iiDFAAamCoYCtYogywAGpgqGA7WK
+IM8ABqYKhgS1z3AAAIMNBqYKhgW1z3AAAMMNBqYKhga1z3AAAAMOBqYKhge1z3CnABRICIAEpc9w
+pwCYRzyAJaXPcacAFEhXgTaBRqUnpc9xpQAIDCKBxtoopTiHkLoppTmHKqU6hyulz3EFAMYDJqYB
+2Uamz3IsAAIBRqbPcloAQgFGpooiiwBGps9yQACHDUamz3LRAMINRqbPcsAABw5Gps9ypwAUSCii
+z3JQAP8AXKDPcKcAFEg3oADZNqDPcKUACAxQ2SKg/NgYp3PYGacah4G4GqfPcBEABg4GpotwgcGW
+/zOFAMBShSJ4NIUKuDYM7/tCeYQohANCKUFyNrkBwidxSrmCIcQCz3CAALBxMKVVoDagz3BAAIYN
+BqbPcBAAAg4GpotwgcGE/zOFAMBShSJ4NIUKuO4L7/tCeQQogA8AAHQJQilBcja5AcIncUq5T+HP
+cIAAsHExpVegOKABlRC4hSCEAAamApUQuIUghQAGpgOVELiFIIsABqYElRC4hSCPAAamBZUQuAUg
+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
+AMCOCW/4FOEYpyDAibiOuBmnAI4TCF4AQCYAE3YO7/IU2QPwAN3PdqAA9Aekpq4Pj/HPcYAAYJUB
+iYXoAIkTCF8AAdmQuc9wpwCYRzygA9gEpgMIHkPPcYAAYJUBiYXoAIkXCF8Az3KnAJhHcBqABAiJ
+gLgaogCJdQheAKkIHsP9CN7BRggP9YwgAoPMIIKPAAD8AAzyCiHAD+tyBdiKI44CSiRAAIEA7/G4
+c4wgAoMY9M91gABglalwcgrv8gPZAI1RIACAyiHCD8oiwgfKI4IPAACPA8ogYgHl9Vv/BPBuD0/z
+sgnv8oDYBvCqCe/ygNhW/wDaz3GgAPQHRKED2AqhCaFJoSYL7/wKcHUBL/OhwOB48cDPcYAA8GQk
+kQDYguHMIWKAA/QB2C8mB/DPcYAAYJUAiQfyhiA/BUUgAAoAqQsIHgBZ/wLwQP/PAM//8cDPcIAA
+YJXSCe/yA9nu/7sAz//9AM/y+QDP8uB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfwDY4H8A
+2OB+4HihweB/ocDgeOB+4HjxwOHFAcjPdYAAPEcApQRtegnv8gLZz3GADgQA7HAgoBYI7/IAheUA
+D/PgeOB+4HjgfuB48cAAFgBBz3KAADxHBrIAFgVBQCIBBA4aRAFMJYCEyiHCD8oiwgfKIGIByiOC
+DwAARAAgB6LxyiQiAADaB/AAFgBBFCGMAAC0AeIvIEIB8woCgMoIz/LRwOB+4HjgfuB44H7geOB+
+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjPcIAAqAjgfwCA4HjgfuB44H7geOB+4HjgfuB44H7g
+eOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB4
+4H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB/Adjg
+fuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+
+4HjgfuB48cDhxc91gAB8R6lw+g+v8gPZABWFEEQlQAGF4MohwQ/KIsEHyiBhAcojgQ8AAE8A0AWh
+8cokYQABjQsIEgFjuAGtig+P8kEHz/LgePHAvg7P8hpxz3aAAHxHII6JCR4Az3GAALAIIImA4cwg
+IaA88g8IUQDPcIAApIehgALwAN0HDdUTgu0A3c9xgACkhxiJguiE7QDfBPCigQTfiiATAUIKr/Kp
+cYogUwE6Cq/y6XHPcIAA0AoYiIPgzCAigcwg4oHMICKCCPKKIBMBFgqv8ovZCvAKlhUNARALlhB3
+zCAhoAT0ANgh8AHYz3GgAMgfDaHPcIAAsAgBiOu2qrYEvxC45X0FfYogEwHaCa/yotmKIBMBzgmv
+8qlxz3CgAMgffxhYgwHYSQbP8uB48cDiDe/yCHHG/z3oIN3PdqAAyB+wpjLYQx4YEADYKg6v8o24
+saawph7YQx4YEADYFg6v8o24saZ/Fg+WiiATAUEvDRTEvXIJr/LM2YogEwFmCa/y6XGKIBMBXgmv
+8qlxz3GAALAIAYkB2hB1wiKKABMNchBAqQDYDaYLClEABNgBqckFz/LgeM9wgAB8RwCIEQieAM9x
+oADAHQCBgLgAoeB+4HjPcIAAfEcAiBEIngDPcaAAwB0AgaC4AKHgfuB48cDhxc9wgAAECQCQz3WA
+ALyeqXEyDaAAiiIECgCNhODKIcsPyiLLB8ogawHKI4sPAAB5CcokKwDcA6vxyiXLAM9wgAAGCQCQ
+z3GAAAyhVOAQePYMoAAO2kEFz/IOeCx4KWoA2A8gQAAncFp44H8OIMAA4HjxwK4Mz/LPcIAAtAgR
+iAXwQCdAAA94+HDPcIAAtAgSiIkIwgEA2QfYRCk+B1lwL3AZcYQvAwEncM9xgAC8ngAhBAAfFMQA
+GWEeEcUAOXAA3gAhjR+AALye1X3njYhxBdrpcAUVwxDh/0AogRA0eYQvAQUncdR5x3GAACih2HEA
+qelwqHEH2gYVwxDY/wHmz37BDrKRAR4CAEIiQBBAIEEQiQh1gC95tvFtBM/yl+iMIcKNAdpX9kok
+gHGoIEAEz3OAAJ2fRCo+BzIjQw4XC0MAB+sTCpABAeJPegDaA/Bhuk964H9IcOB48cC6C8/yGnA6
+cpEJcgAA31pxFSDAI6CIAogbCRAgz3aAAJhHFX4CuBR4x3CAACxKCvDPdoAA0EcVfgK4FHjHcIAA
+1EohiEsJHgAFEMEAIq4GEMAAA64qcKlx2/8AroDgzCBigMogIQAS8kQoPgcAIYB/gAC8nsUQggDh
+EIEAAiWAEBB4B7hmDW/5QnkBrkIiQSCBCXWAAed9A8/y8cAuC8/yz3CAAPBkBJDPdYAAtAgA3oLg
+zCBigAX0AdgQrRGtBfAD2BCt0a0C2BKtiiAHCMoOb/IA2XT/z3CAAPSgGIgF6AHYJB0CEAPwJB2C
+E4ogBwiqDm/yAdmI/4ogBwieDm/yAtnPcYAAUFoggc9wgADMTQHau/+KIAcIgg5v8gPZz3GAAFRa
+IIHPcIAAIE4A2rT/iiAHCGYOb/IE2fkCz/LxwLhxLQhRAAkNUgAXDdIDCiHAD+tyBdiKI8oFXQGv
+8ZhzQC2AAGS4x3CAAJhHG/DPcIAAzEwyIEEBjCHDj8ohwQ/KIsEHyiBhAcojgQ8AAJwCKAGh8cok
+wQDPcIAA0Ec1eNHA4H7geAJ5LXlMeQ8JMwAvclkiAQID8FYiAQJHuThg4H8PeOB48cD6Cc/yCHYo
+dUh3GnNPeRC5D3gIuAV5iiBHCLYNb/Klec9wgAC0CAGIgODqAQIAgOfMICKgCfIsbS95z3CAALQI
+M6gG8M9wgAC0CLOoqXHPcoAAtAi0qtWq9qoXGgIEyXDG/wAQhwDhiM9wgAC0CNGIEogQdpgBCQBE
+Lz4HL3GELgMRCiRADgAhTQ7PcIAAwJ4dZUAvggBUeoQuARUKJUAOACJADgAgiA+AACihACaDH4AA
+0AhMJwCAzCdigCb0GhXAEADZDKsbFcAQSiSAcRCrGI0Uq6ggQAYUIEAQQYhzbnR7NXvHc4AADKIA
+EMAAWKsVJUIQGasBEsAAAeEaqwCKL3kbq3vwARXAEJfoANpMq1CrVKtKJIBxANmoIIADE24UeDV4
+x3CAAAyiWKhZqFqoW6gB4S95YfBsugAiQAF8uQAkRAAAIIYPgAAooQAkgA+AAMCeGog6jelyof8M
+qwAkgA+AAMCeG4g7jelynf8Qq89ygADAngAkgAAYiDiNACSFAOlyl/8UqwDbSiGAERQmywAUIMQQ
+AROAEAEUgQDpcpD/M240eXV5ACGKD4AADKIYGgIQABOAEAAUgQDpcoj/GRoCEBUlywAVJcQQAROA
+EAEUgQDpcoL/GhoCEAATgBAAFIEA6XJ+/xsaAhBCIUkQAeOdCXWQb3sB5s9wgAC0CBKIz34QdnIG
+zP8A2c9wgAC0CCCoSQDP8uB48cDiD6/yiiCHCM91gAC0CKYLb/IzjQGNgOCJ9BWNM41P/xYVhhAM
+FcIQEQ4QAAMQwAARCIMAB/ACEMAABwiCAEhwLyEFEM9xgADcWxSNdokZCwEAFY00iREIQQANFcAQ
+CSBAAi8hBRASjTGNvwhCABMVhBAVFYUQDhWHECQViBAA20okgHPgeKggAQMhDxAARCm+AwAjQA7P
+doAAYKKCJhATHmaWJsIQQK468M9wgADQCM92gAC0SG5mfLgCIY8T7X9IJ04QzX5MIACQzCUigA/y
+Hw4RABsLEwPPd4AA9KAUJw8R9o/7fwknjhPNfjhgMBCPAM9wgACkSGhgRCm+AwJ/CSeOEwAjQA7P
+d4AAYKKCJxATH2eWJ8IQwK8B4297AeESjS95VQhDgCEHj/LgeOHF4cYAEc0ACQ0TEADdoKkR6NTl
+g/dT3aCpz3CAAGxJFCBOA6COoKoAEcEANHgBiBDw1OWD91PdoKnPcIAAxEgUIE4DoI6gqgARwQA0
+eAGIAKvBxuB/wcWhwfHAVg6P8qHBZcIIdih1z3CAAJIGhcGLckAkQzAAiOL/RC6+FgAlQB4UFMIw
+z3GAAFSeOGBfDTMWWKhTJYAQPwhTAUYlwBEPe8K4YQhTASDHARSNMAAmgB+AALx7dnigqOSoRC6+
+FgAjQA44YFioAeNve1MjgADfCFKBGPABFIAwx3aAALx7tn4AriDABK4O8AEUgDB4vcd2gAC8e699
+tn7AHgIQIMDEHgIQCNwXBq/yocDxwJYNj/IacIogBwluCW/yCnHPcIAAtAgBiIDgSiMAIJr0z3CA
+ALQI0YgSiM9xgAB4SBB2IAEpADIhEgRqdwohwCQD8Hp1z3CAANAIfLjYYCwQwQDPcoAAYKJELr4T
+ACJALoIiEAMaYjMigw8AABgEz3CAALQIGIh7e217BdoZ/kokgHEA3aggQAVzbnR7tXvPcoAADKJ5
+YjmJemIK6SMJAAApCEIALw1TEQHlr30L8EIlkRAvIUckYb2vfQ7wGxLPAADZanUL8IDlANnKJWEQ
+A/IpbS95OnEB2S3pc250exUjQgPPd4AADKJZZwAnhRAVI0MEemdZijmJf2c1CmMA+48CIYQAGxWB
+AAS/8H9CeAS5LyQIAQInQxBseC8gRg6qDi/5iHEOeAJ/COfuf0S/7X8LCBImCOftf8lwCnHpcoP/
+AebPcIAAtAgSiM9+EHb0Bsz/mQSP8vHASgyP8s9woAC0D3AQEADPdoAAtAiKIMcICghv8iaGAY4A
+3aMIEQDPcKAAtA+8oFKOcY4jCsIAz3CAAFSef9kUI88AH2csr62vAeNvewXZ7wrjgC6vAN8O3c9w
+gACUSOhgkv9hvQHn8w11kO9/MY7PcIAAYKKCIBADRCm+AydwMyCADwAAGAQxCBIFD44W6M9xgADc
+WxSOVokhCgEAFY5UiRkKAQAWjgHagOASicB6CQoBAAHYAK4Ghs9xoAC0DwemcBkABOkDj/LgePHA
+z3KAALQIIYqM6QDZA6oPiiKqgOAgqrwOYvHKIGIFPwHP/89xgABUnhV5AIER6A8I3gUFIIAPAP8A
+AAChTLiAIMOPCgAEAIwgw4/D9oogBw3gfw544HjxwC4Lj/LPdYAAtAgEjRQgAQDHcYAAVJ5OiQDe
+i+qKIIcJz3H+/v7+1g4P8setAdgh8GG6TqkxjYHhyiCBA+T/jCAHjcoggQ8AAOYByiGBD7q7rdvq
+80SNz3GAANAIfLkNe1lhKBHBABiNB9p+/QatANgpA4/y4HjxwLIKr/IA2EokgAHPcoAAtAjPdYAA
+DKLEigokAHFmiqggQATzbvR/FX/5ZTiJv2cK6R0JwAAhCcIAJwhQAQHgD3gI8CpoKaphuA3wGo8L
+qgDYC/CF6ADYCaoB2APwKWgpqgqqAdi1Ao/y4HjxwEoKj/LPdoAAtAhkjgO7Co50exUjAQDPcIAA
+DKI9YEmOuI1Ve3pgWIobYzhgMQ2jEBqIAiJBA7qLBLgweRB4BL1mjqJ4YnoMeiIML/kvIEYODni4
+YAjgDnhEuFkCr/ILruB44cXhxs9ygAC0CCOKz3CAAHhIK2AEis9xgABgooIhEANEKL4DJ3N5YTMh
+gQ8AABgEO3lrii15FHjHcIAAVJ4CI00AIW08eS8hRYAc8gwQzgDRfs9+MX0TDrIQr31hvgkmTROv
+fQLwAd0JCVIArXkE8LN5LXksqG2oAdgIqgDYBfAA226oAdj/Au//J6rxwFoJr/IV2LYMb/EA3s91
+gAC0CA+NywgQACKNnQmVATMmQXCAAEhaQCcAcjR4AHjHrRGNyK3FrQStff8C2SKtLPCZ/wToA9gC
+rSXwBNgCrSHwsP/88cj/BdkirR7wJY3PcIAAlEgpYASNRCi+BgAhQg4AIoMPgABUnniLBxXCEHpi
+TXqe/gWNAeAPeAsIswMFrQDYAvAB2CDoBI0A2gHgMo0PeEWtKQkjAAStCI0Z6AHYAK1CrRXwCiHA
+D+tyBdiKI9ULmHaFBy/xuHbeC2/xFdgB2AKtBfDSC2/xFdjpAI/y4HjxwOHFz3WAAGwGiiDHCToM
+L/Ighc9xgAC0CEGJAIUGoYrqJ4FNaDBywCBsAcwhDID0C8n/tQCP8vHAABaAQM9xgAC0CAypABaE
+QAAWgEBQJL6BDakAFoBAyiHCD8oiwgfKIGIByiOCDwAAaADPI+IC9AYi8colwgBRJICBANjKIGEA
+D6nPcIAAkAYAkAPoAf7l/p4IT/K7BY//4HjxwLhxLQhRAAkNUgAVDdIDCiHAD+tyBdiM27EGL/GY
+c0AtgAAUeGy4x3CAACxKHPDPcIAAzEwyIEABjCDDj8ohwQ/KIsEHyiBhAcojgQ8AAJEAeAYh8cok
+wQACuBR4x3CAANRK0cDgfvHAbg9P8s92gACSBgCOz3eAAJAGII/h/0GIz3WAAPAIIJcRCt4AAdgA
+rYogxwND8AKABugA2ACtkLk78F8KHgHPcoAA3FsWilMJAQAAlnSKSwjBAM9wgACUBgCIUoo/CgEA
+z3CAANAKCYAzCF4BQYUA2w7qz3CgACwgEIBCeBEIhQ8xAQAtAdpArQTwYK0A2hC6iiBHA0V5DfAB
+jQboAdgArYogBwMH8ADYAK2RuYogBwSSCg/yIQdv8gCN8cC2Dm/y2HEKJoCQiHXMIyKABvJCJgYB
+LyaHAchxsP/PcYAA8AgDoR7uJIgCuTR5Q4gD4WKIHQofAAohwA/rcgXYiiNIAJhzXQUv8QolgAEI
+YRcIXwAKIcAP63IF2IojCAHz8WGI4LvKIcEPyiLBB8ojgQ8AAA8CyiBhAeXz4b3RIyKByiHCD8oi
+wgfKI4IPAAAVAsogYgHX9SENHhBRI8CAyiHBD8oiwQfKI4EPAAAbAsogYQHJ82kGT/LxwPINT/Ia
+cM9xgADcW892gACQBgCWVonPdYAA8AgnCgEAz3CAAJIGAJBUiRcKAQDPcIAAlAYAiDKJCwkBAAKN
+AvAA2AGtkf/PcIAAlAZAiM9xgACSBgCJII6A4gHawHoKcwDfmHe4/wOFAYgglhEIHgEB2AOtiiBH
+AwXw462KIIcDSgkP8tEFT/LgeM9xgADcW89wgACQBgCQVokrCgEAz3CAAJIGAJBUiR8KAQDPcIAA
+lAYAiDKJDwkBAM9xgADwCAGJAqngfuHFUyANAKCpBCCBDwAGAABCIQGABCCAD0AAAADKIWIAIKrX
+cEAAAAAB2MB4AKvgf8HF4HjxwPIMT/KhwQh2KHcacgDdz3CgALQPcBARAIogxwCyCC/yyXHPcKAA
+tA+8oItxQCRCMEAkgzDpcOX/DQgRIEokAAAJ8M9wgADUhQGI+ehKJIAAIMABFIIwyXECFIMwe//P
+cIAA8AgpiIDhzCZCkAXyI4CqqKKhMQ9eEc9xgADcW1aJJQ6BEFSJUycDEBkLgQAEJ48fAAYAAIDn
+AdoyicB6CwpAAKKooaCgqIogxwAiCC/yyXHPcaAAtA9wGUAElQRv8qHAhCgLCgAhgX+AAISYKBGA
+ACiBANqU8eB48cCP6BH/z3GgACwgMIHHcUlrANIioN4P7/GKIIcFkQTP/+B48cDYcYnoCP8A2SKg
+iiDHBb4P7/HIcXUEz//gePHA4cXPdYAA8AiKIEcGpg/v8SmNBNhyCi/8AdkIjSmN6P81BE/y4Hjx
+wM9xgADwCIogxwZ+D+/xKYnPcIAAFEoGDg/5KQTP/xEIHgIEIL6PAAAAGAHYA/QA2OB/AKngePHA
+egtP8qHBCHUA3s9woAC0D3AQEADPcKAAtA/coOONiiAHAS4P7/HpcQSVi3FAJIMwgOAB2MB4LycA
+AAWFQCRCMIT/CoVAJEEw6P81D3QQlSVDHlYlABjwIIADViUBHNR5IInAuAUgwAEvJAcAIMABFIIw
+AhSDMBX/AebZDsSTiiAHAc4O7/Hpcc9xoAC0D3AZAARJA2/yocDgePHA2gpP8qHBGnAA3s9woAC0
+D3AQEQDPcKAAtA/coIogRwGWDu/xCnGEKAYvACGNf4AAvIEh8EAlABcWIIQDBRSAAIYg/ocY8gSF
+i3FAJIMwQCRPMOlyWP+oFQAQ6XG8/yDABBSBAAEUgjACFIMwSiTAAPD+AeYMlb8OBJCKIEcBNg7v
+8Qpxz3GgALQPcBlABAvx4HjxwFIKb/KKIAcGz3aAAPAIEg7v8SSGFd0EhjJoAeA0ecdxgADUSgSm
+AoES6M9zoAAsIHCDYnjXcElrANIA2sj3QqGKIMcF3g3v8SCJBIYLCJQKANgEpmG9wQ1VkGECT/Lx
+wM9xgABsBooghwG2De/xIIHk/89wgACQBgCQgOBkCsL/XQLP/+B48cDCCW/y2HGhwRpwi3FAJEIw
+QCSDMMhwIP8BFIAwCegCFIAwBehCIBAhLyAHJCDACnFw/gEUgTAD6aKIAvChiIogxwFWDe/xyHFA
+KAAmQC0CFAV6ARSAMAIUgTAIuAV6iiDHATYN7/FFeeG90SXikAPyHQ0eEQohwA/rcgXYiiOMBphz
+NQAv8QolAAQo8eB48cAyCU/yz3CAANAKKBCQAKiAiiAHAvYM7/EKcVMlABAKcVD+AYhRIACByiHC
+D8oiwgfKIGIByiOCDwAAMQPKJMIA6Afi8MolAgRNAU/y4HjPcaAAYB0SsRSR4H7xwNoIb/KYcLhy
+fwlyAADaFSSAAOCIoojYccOIIYjPcIAABAkBkDhgEHjz/wQggQ8AAAD/R7lMJQCAAr20fcAlgh+A
+ACxKwCWBH4AA1ErgrQPrAq0C8AGtJQgeAAzrA43ybvR/gLgDrfhlA4i/Z4G4A6/ErQPrJq0C8CWt
+QiZBAJEJdYAB4r0AT/LgePHAz3CAAMxNDtkB2gDb2v/PcIAABE4H2QHaSHPW/89wgAAgTirZANoA
+29P/z3CAAMhOC9kA2gHbz//RwOB+4HjxwGbYyf/PcoAABAkBsmfYxv8AsgGSAeAQeMT/ArIBkgLg
+EHjB/wOy5v++DE//5/HxwOHFCHUocwfwqXC7/wIbFAAB5bB9YbqMIv+P9/U5AE/yAAAAAAAAAAAA
+AAAAAAABAAAAAAAAAHALgAAADIAAAFuAABAAgAAECMAQCgATZEQFgIEAAMAWBAETYg9cACIKAABA
+AAYAcB8AAGEAABMkAAATJQAAwBfIIMAQcEXAEBAIwBD//1wzAAATJAAAEyUECMARDxQVIgQAFSb7
+/zAyAwATJBgIwBEcCMARDxQVIgEAFSYEADAwAAJFcAIAAGEBABMkLBDAETAAEyTsHMARAwATJFAU
+wBEEGMARAAATJBBFwBEYCMARD3wTIggAzBEAABMlAAATJDRIxxEPexMiAQATMAQowBEPFBUiBAAV
+Jg96EyIYKMARD00TIgQQxRECABMk8BzAEQEAEyTsHMARAAATJHAAEyUQHMARAAATJQAAEyTgHMAR
+AQATJCQQwBEAAAAhAAATJQAAEyQPRQAiAFwAOQMAAGICYABiAABYOFMAAGEkEMARAIATJDgcwBEP
+cxMiggETMAQowBEPdBMiAgITMAQowBEPdRMiQgITMAQowBEPFBUiAQAVJg9wEyIBABMwBCjAEQ9y
+EyIIAMwRD0QAIgoAAEAAQABwDgAAYQAAEyUCABMk7BzAEQ92EyIYCMoRCQATQBwIyhEJABNAIAjK
+EQ94EyIEAMoRAAABJAAAASUGAABhD3YTIixIxxEPeBMiAADGEQMAASQAAAElDxQVIgIAFSYPRQAi
+AFwAOR8AAGQAABMkAQATJTgcwBEPdxMi4BzAEQ8BEyIECMARDxQVIgEAFSYPAxMi//ATMhgowBEA
+AxM4//MTMhgowBEAAxM4GCjAEQMAEyQAABMlBAjAEQAAEyQ4RcARDwMTIv8/EzLw/xMzDxMCIhRH
+gIEAAMAWAAITOBgowBEEAABhAABYOAAAEyQBABMlOBzAEQxHgIEAAMAWCAATYgAAEyUDABMkVATF
+EX8CEyQEAMUREEeAgQAAwBYIAMURAAAAIcRagIEAAMAWPATAEQgFgIEAAMAWBAEbYhAEwBADABsk
+VATAESQEwBEIBMAQhFqAgQAAwBcIBMAQZFqAgQAAwBcAABslAxwbYkAAGyQwHMARBQAAYQwFgIEA
+AMAWDxsZIggEoIE48MSAAAAbJAIAGyU4HMARAAAAIQgFgIEAAMAWTATAEQwFgIEAAMAWDxsZIkgE
+oIE48MSAAAAbJAIAGyU4HMARAAAAIQAAAIUIBYCBAADAFg8bBCIQBBtmDwEbaBQcwBAKABtABAAb
+bgMAAGEPHB0iAQAdJvkPAGFkDAAQAMAGEQEABCf8AARkAAAbJAIAGyU4HMARAAAAIQAAGyVAABsk
+MBzAEQAAACEPHB0iGAEdJhgAxxD0fYCBAADAFyAAxxD8fYCBAADAFwAAACE0MICB+EHEEA8bCSIA
+Cwk5AgAKYgMBCmIEAgpiAAAJQAQAAGEJAAlAAgAAYQoACUAAAABhAgAJQQAJGigAAMAWAQAbJgAA
+wBcEAB0mAQAIJ+sACGQAAAAhAAAAACwBAAABAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDQAAOQ0AAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHAAAAAAAAAMAAkADQ
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAZIWAAFBZAQAAAAAAAAAAAAAAAAAAAAAAAAAAAIiFgAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+/wEAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEBAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQACAAAABgAIAAkAAAAHAAAAAAAAAAIAAAACAAAAgwAA
+AJIAAADoAAAA9wAAAE4BAABdAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQACAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAfYAALLMBAAAAAAAAAAAA
+AAAAAAAAAADAfYAAPLoBAAAAAAAAAAAAwH2AALC7AQAAAAAAAAAAAAAAAADAfYAAAAAAAAAAAAAB
+AA8AZAABAIgIgAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAcAAAAA
+AAAAAAAAAAAAAH9/AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgQIAAgQ
+IAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYBwAAFQAAAMQtgABkCgAA
+ZAoAAGQKAABkCgAAZAoAAGQKAABkCgAAZAoAAGQKAABkCgAAZAoAAGQKAABkCgAAZAoAAGQKAABk
+CgAAZAoAAGQKAABkCgAAZAoAAGQKAABkCgAAZAoAAGQKAABkCgAAZAoAAGQKAABkCgAAZAoAAGQK
+AABkCgAAqAsAAAAAAADUHgEAZAoAALAIAABkCgAAZAoAAGQKAADgCAAAWAYBAJhSAABkCgAAZAoA
+ABQJAAAUCQAAFAkAABQJAAAUCQAAFAkAABQJAABkCgAAZAoAAGQKAABkCgAAMAoAAGQKAABkCgAA
+ZAoAAGQKAABkCgAArAsAAGQKAABkCgAAlAgAAAMAAADcwQEAAgAAAHArAQAEAAAAbDAAAAYAAACI
+zAEAEQAAAGysAQAHAAAAoLUBAAgAAAAIzQEADAAAAKBDAQANAAAAIEgBAA4AAABYSAEAFgAAADwe
+AQALAAAA6FwBABQAAACwUwAADwAAAARiAAAQAAAADBYBAAEAAACMsQEAEgAAABRrAQATAAAANGMB
+AAUAAABIZQAAFQAAAJjbAQAXAAAAqAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAQAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHCUAABwlAAAc
+JQAAcDYAABwlAAAcJQAAZDYAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwa
+AAC0GwAAuBsAACwdAACsHQAAMB0AABwlAAAcJQAA/D4AAGRCAAA0QwAAHCUAABwlAAAcJQAAyD0A
+APysAAD4rAAAAK0AABwlAAAcJQAAHCUAAHQ2AAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAA
+HCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAc
+JQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAYDcAABwl
+AAAcJQAAHCUAABwlAAAcJQAAQDgAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUA
+ABwlAAAcJQAAyPIAABwlAADo8wAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAADcZAAA
+HCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAACoWwEAOF8BABwlAABM
+RAEAHCUAAPhFAQCoNQEAHCUAABwlAACsQwAAHCUAABwlAAAcJQAAHCUAABwlAAAQrQEAhKwBABwl
+AAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAgzAEAJMwBABwlAAAcJQAAHCUAABwlAAAcJQAAHCUA
+AGy1AQAcJQAAlLgBABwlAAC03AEAHCUAAHggAAB8IAAAHCUAABwlAADgzQEAtFMAABwlAAAcJQAA
+HCUAAASwAQAcJQAAHCUAAAAXAQAgYwEAHCUAABwlAAAcJQAA1GkBAPQwAQAcJQAAHCUAABwlAAAc
+JQAAHCUAABwlAABIcAEAHCUAAOzMAQDwzAEA/MwBAADNAQD0zAEA+MwBAATNAQAcJQAAHCUAABwl
+AAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAACERQAAHCUAABwlAAAcJQAAHCUAABwlAABczAEAkMwB
+AGg6AAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAA
+HCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAc
+JQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAAHCUAABwlAAAcJQAADDsAAIw7AAAQPAAArDwAALxg
+AACEPAAAHCUAABwlAAAcJQAAHCUAABwlAAAEOwAACDsAABwlAAAcJQAA3EMAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAQEAAAAAAAAQAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADhAw4e4eEDDh7hwQIKHuGBBQwe4eEDDh7h
+4QMOHuHBAgYe4YEFDB7hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAQEBAQEBAQEBAQEBAQEBAQ0NDQ0NDQ0NDQ0NDQ0NDQ0DAwMDAwMDAwMDAwMDAwMDAAAA
+AAAAAAAAAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQENDQ0NDQ0NDQ0NDQ0NDQ0NAwMDAwMDAwMDAwMD
+AwMDAwAAAAAAAAAAAAAAAAAAAAABAQEBAQEBAQEBAQEBAQEBDQ0NDQ0NDQ0NDQ0NDQ0NDQMDAwMD
+AwMDAwMDAwMDAwMAAAAAAAAAAAAAAAAAAAAAkQIAADHKLwCRAgAAMcovAJECAAAxyi8AkQIAADHK
+LwCRAgAAMcovAJECAAAxyi8AkQIAADHKLwCRAgAAMcovAEMBAAAxyi8AQwEAADHKLwBDAQAAMcov
+AEMBAAAxyi8AQwEAADHKLwBDAQAAMcovAEMBAAAxyi8AQwEAADHKLwBADQAA3gMJAAAAAAAAAAAA
+AAAAAMDyAAABAAAAhC2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAD
+AAAAAAAAAAgAAAAAAAAAQEIPAHT2AABY9wAAaPgAADD6AABo+AAAMPoAANj7AABc/AAAgICAgICA
+gIABgAKAgICAgAAAAAAEAQEABAEBAAAAAAAAAAAAAAAAAAAAAAAEAQEABAEBAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAACELYAAhC2AAKQgoAA4IKAAAQAAAPz///8AAAAAAAAAAKQtgACkLYAA
+qCCgADwgoAAIAAAA8////wAAAAAAAAAAxC2AAMQtgACsIKAAbCCgADAAAADP////AAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAABQXAQAFAAAAxC2AACgc
+AQAA/wMASBwBAAD/BQAsHQEAAP8tAFAdAQAA/z0ACB0BAAD/BADsHAEAAP8lAOAjAQDIJAEAOCUB
+AHAgAQCwHwEAICYBAKQmAQDoJgEAOCcBAAAAAAAsAQAAXgEAAAEAAAABAAAAAQAAAAEAAAADAAAA
+AAAAAAAAAAAAAAAAAwAAAAIAAAADAAAAAwAAAAMAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAADQ
+LAEACgAAAIQtgAAAAAAAAAAAAAAAAABcLQEACgAAAIQtgAAAAAAAAAAAAAAAAACQLQEACgAAAIQt
+gAAAAAAAAAAAAAAAAAAILgEACgAAAIQtgAAAAAAAAAAAAAAAAAAkLwEACgAAAIQtgAAAAAAAAAAA
+AAAAAACcLgEACgAAAIQtgAAAAAAAAAAAAAAAAADwNAEABgAAAIQtgAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAQAAAAAIAAAAAAoAAQJwAA6AMAAOgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAALEsBADBMAQDYTgEAgFEBAPRTAQBYVwEAwE0BABwFgACIfYAAGAAAAEh9
+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAOBZAQAGAAAAhC2AAAAAAAAAAAAAAAAAAFQIAQAKAAAAhC2A
+AAAAAAAAAAAAAAAAAFQIAQAKAAAAhC2AAAAAAAAAAAAAAAAAAFQIAQAKAAAAhC2AAAAAAAAAAAAA
+AAAAAFQIAQAKAAAAhC2AAAAAAAAAAAAAAAAAAFQIAQAKAAAAhC2AAAAAAAAAAAAAAAAAAFQIAQAK
+AAAAhC2AAAAAAAAAAAAAAAAAAFQIAQAKAAAAhC2AAAAAAAAAAAAAAAAAAFQIAQAKAAAAhC2AAAAA
+AAAAAAAAAAAAAFQIAQAKAAAAhC2AAAAAAAAAAAAAAAAAAFQIAQAKAAAAhC2AAAAAAAAAAAAAAAAA
+AFQIAQAKAAAAhC2AAAAAAAAAAAAAAAAAAFQIAQAKAAAAhC2AAAAAAAAAAAAAAAAAACxhAQAKAAAA
+hC2AAAAAAAD//////////wAAAAAAAAAAAAAAALRiAQAFAAAAxC2AAGQAZABpANwAyABaAKoAvgCG
+AX0APgBkAGQAaQDcAMgAWgCqAL4AhgF9AD4AAAAAAAEBAAAAAAAAAAECAQEAAgEAAQICAgABAQAC
+AQIBAgACAAECAwAAAAC4bwEA1HwBAMCHgADAAwAAAAAAALhvAQDUcAEAgIuAAPgBAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAMgQEAKH8BAHiNgABUAAAAAAAAALhvAQBUfwEA+I2AAFABAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAEAAAC4bwEA2HsBABw3gABQAQAAAAAAABCBAQDkfQEAvAaAAAIAAAAA
+AAAAuG8BABB+AQDABoAABAAAAAAAAAAIgQEA1HABAMyNgAAsAAAAAAAAALhvAQB8fgEAAAAAAAAA
+AAAAAAAAuG8BADx+AQDEBoAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgAC
+AAMABAAEAAUABgAGAAcAIAAgACEAIgAiACMAJAAkACUAJgAmAEMARABEAEUARgBGAEcASABIAEkA
+SgBKAEsATABMAE0ATgBOAE8AUABQAFEAbgBuAG8AcABwAHEAcgByAHMAdAB0AHUAdgB2AHcAeAB4
+AHgAeAB4AHgAeAB4AHgADwA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQACAAMA
+AwAEAAUABQAGAAcABwAIAAkACQAKACMAIwAkACUAJQAmACcAJwAoACkAKQBGAEcARwBIAEkASQBm
+AGcAZwBoAGkAaQBqAGsAawBsAG0AbQBuAG8AbwBwAHEAcQByAHMAcwB0AHUAdQB2AHcAdwB4AHgA
+eAB4AHgAeAB4AHgADgA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAgACAAMABAAE
+AAUABgAGAAcAIAAgACEAIgAiACMAJAAkACUAJgAmAEMARABEAEUARgBGAEcASABIAEkASgBKAEsA
+TABMAE0ATgBOAE8AUABQAFEAbgBuAG8AcABwAHEAcgByAHMAdAB0AHUAdgB2AHcAeAB4AHgAeAB4
+AHgAeAB4AHgADwBDAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQACAAMAAwAEAAUABQAGAAcABwAIAAkA
+CQAKACMAIwAkACUAJQAmACcAJwAoACkAKQBGAEcARwBIAEkASQBmAGcAZwBoAGkAaQBqAGsAawBs
+AG0AbQBuAG8AbwBwAHEAcQByAHMAcwB0AHUAdQB2AHcAdwB4AHgAeAB4AHgAeAB4AHgAeAB4AHgA
+eAB4AHgACABDANhnAQAS0gAAAAAAAP//DwA4eQEAtgAAAAAAAAD/AAAAOHkBALcAAAAAAAAA/wAA
+ADh5AQC4AAAAAAAAAP8AAAA4eQEAuQAAAAAAAAD/AAAAOHkBALoAAAAAAAAA/wAAADh5AQC7AAAA
+AAAAAP8AAAA4eQEAvQAAAAAAAAD/AAAAOHkBAL4AAAAAAAAA/wAAADh5AQC/AAAAAAAAAP8AAAA4
+eQEAwAAAAAAAAAD/AAAAOHkBAMEAAAAAAAAA/wAAADh5AQDCAAAAAAAAAP8AAADYZwEAE9IAAAAA
+AAD//w8AOHkBABsBAAAAAAAA/wAAADh5AQAcAQAAAAAAAP8AAAA4eQEAHQEAAAAAAAD/AAAAOHkB
+AB4BAAAAAAAA/wAAADh5AQAfAQAAAAAAAP8AAAA4eQEAIAEAAAAAAAD/AAAAOHkBACIBAAAAAAAA
+/wAAADh5AQAjAQAAAAAAAP8AAAA4eQEAJAEAAAAAAAD/AAAAOHkBACUBAAAAAAAA/wAAADh5AQAm
+AQAAAAAAAP8AAAA4eQEAJwEAAAAAAAD/AAAA2GcBABTSAAAAAAAA//8PADh5AQCCAQAAAAAAAP8A
+AAA4eQEAgwEAAAAAAAD/AAAAOHkBAIQBAAAAAAAA/wAAADh5AQCFAQAAAAAAAP8AAAA4eQEAhgEA
+AAAAAAD/AAAAOHkBAIcBAAAAAAAA/wAAADh5AQCJAQAAAAAAAP8AAAA4eQEAigEAAAAAAAD/AAAA
+OHkBAIsBAAAAAAAA/wAAADh5AQCMAQAAAAAAAP8AAAA4eQEAjQEAAAAAAAD/AAAAOHkBAI4BAAAA
+AAAA/wAAANhnAQAI0gAAAAAAAP//AwAYaAEAAIIAAAAAAAD/AQAAGGgBAAGCAAAAAAAA/wEAANhn
+AQAJ0gAAAAAAAP//AwAYaAEAAoIAAAAAAAD/AQAAGGgBAAOCAAAAAAAA/wEAANhnAQAK0gAAAAAA
+AP//AwAYaAEABIIAAAAAAAD/AQAAGGgBAAWCAAAAAAAA/wEAANhnAQAG0gAAAAAAAP8BAADYZwEA
+B9IAAAAAAAD/AwAA2GcBAAbSAAAJAAAAAP4DANhnAQAH0gAACgAAAAD8DwDYZwEABtIAABIAAAAA
+APwH2GcBAAfSAAAUAAAAAADwP9hnAQAV0gAAAAAAAP8DAADYZwEADNIAAAAAAAD/AQAA2GcBABXS
+AAAKAAAAAPwPANhnAQAM0gAACQAAAAD+AwDYZwEAFdIAABQAAAAAAPA/2GcBAAzSAAASAAAAAAD8
+BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzSDdIR0hDSAtIB0gPSG9IL0gCABdIS0hPSFNIE
+QwbSB9IE0gkQAAC1ABoBgQEFAAQABgAIAAkACgALAAwAgwCSAOgA9wBOAV0BDwAuAAAAbAAAAHQA
+AACAAAAAjAAAAJ0AAAAHAAAABAAAAAgAAAAQAAAAQAAAAIAAAAAgAAAAAAAAAAkAAAASAAAAAAAA
+AAoAAAAUAAAA/////wAAAAAtAQAA3QEAAFoCAAC6AgAACgMAAE0DAACHAwAAugMAAOgDAAARBAAA
+NwQAAFkEAAB6BAAAmAQAALQEAADOBAAA5wQAAP4EAAAVBQAAKgUAAD4FAABRBQAAZAUAAHUFAACG
+BQAAlwUAAKcFAAC2BQAAxQUAANMFAADhBQAA7gUAAPsFAAAIBgAAFAYAACAGAAArBgAANwYAAEIG
+AABMBgAAVwYAAGEGAABrBgAAdQYAAH4GAACIBgAAkQYAAJoGAACiBgAAqwYAALQGAAC8BgAAxAYA
+AMwGAADUBgAA2wYAAOMGAADqBgAA8gYAAPkGAAAABwAABwcAAA4HAAAUBwAAGwcAACIHAAAoBwAA
+LgcAADUHAAA7BwAAQQcAAEcHAABNBwAAUwcAAFgHAABeBwAAZAcAAGkHAABvBwAAdAcAAHkHAAB/
+BwAAhAcAAIkHAACOBwAAkwcAAJgHAACdBwAAogcAAKcHAACrBwAAsAcAALUHAAC5BwAAvgcAAMIH
+AADHBwAAywcAANAHAADUBwAA2AcAANwHAADhBwAA5QcAAOkHAADtBwAA8QcAAPUHAAD5BwAA/QcA
+AAEIAAAFCAAACAgAAAwIAAAQCAAAFAgAABcIAAAbCAAAHwgAACIIAAAmCAAAKQgAAC0IAAAwCAAA
+NAgAADcIAAA7CAAAPggAAEEIAABFCAAASAgAAEsIAABPCAAAUggAAFUIAABYCAAAWwgAAF8IAABi
+CAAAZQgAAGgIAABrCAAAbggAAHEIAAB0CAAAdwgAAHoIAAB9CAAAgAgAAIIIAACFCAAAiAgAAIsI
+AACOCAAAkQgAAJMIAACWCAAAmQgAAC4AAABsAAAAdAAAAIAAAACMAAAAnQAAAAcAAAAAAAAAAAAA
+AAoAAAAN0hHSENIC0gHSA9Ib0gvSAIAF0hLSE9IU0gRDCNIJ0grSHNIG0gfSAQAAAAAAAAAAAAAA
+AAAAAAMAAAAEAAAAAwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAP8DAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAC1ABoBgQEEAA8AgwDoAE4BkgD3AF0BBgAIAAkACgALAAwABQAAAAAAAAAsAAEA
+AAAAAAAAAAAAAAAAAAAAAAAAAgACAAIAAADfAAAAGQEAAGIBAAC+AQAAMgIAAMMCAAB7AwAAYgQA
+AIQFAADyBgAAvggAAAILAAABAAAAAgAAAAAAAAAL0g7SDdII0gnSCtIS0hPSFNIR0hDSAtIB0gPS
+AIAF0gRDG9Ic0gTSAEUw0jHSAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH
+AAAABwAAAAAAAAADAAAABAAAAAMAAAAAAAAA/wMAAAMAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAA
+AAAAAAAAAAAAALUAGgGBAQUABAAPABAACgALAAwAAAAAAAAAAAAsAAEAAAACAAIAAgAAAAAAAQAB
+AAIAAgACAAMAAwAEAAQABQAFAAYABgAHAAcACAAIAAkACQAKAAoACwALAAwADAANAA0ADgAOAA8A
+AAAAAAAAAAAAAAAA/LIBAAYAAACELYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcBYAAiH2AABgAAABIfYAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwFgACIfYAAGAAA
+AEh9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAFy/AQAEAAAAhC2AAAAAAAAAAAAAAAAAADi+AQAEAAAA
+hC2AAAAAAAAAAAAAAAAAACTAAQAGAAAAhC2AAAAAAAAAAAAAAAAAADi+AQAEAAAAhC2AAAAAAAAA
+AAAAAAAAAFy/AQAEAAAAhC2AAAAAAAAAAAAAAAAAADi+AQAEAAAAhC2AAAAAAAAAAAAAAAAAAFy/
+AQAEAAAAhC2AAAAAAAAAAAAAAAAAADi+AQAEAAAAhC2AAAAAAAAAAAAAAAAAACTAAQAGAAAAhC2A
+AAAAAAAAAAAAAAAAADi+AQAEAAAAhC2AAAAAAAAAAAAAAAAAAFy/AQAEAAAAhC2AAAAAAAAAAAAA
+AAAAACTAAQAGAAAAhC2AAAAAAAAAAAAAAAAAAFy/AQAEAAAAhC2AAAAAAAAAAAAAAAAAAFy/AQAE
+AAAAhC2AAAAAAAAAAAAAAAAAACTAAQAGAAAAhC2AABwFgACIfYAAGAAAAEh9gAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAUA
+AAAAAAAAAAAAAAAAAAAAAP8A/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwQEBAQEBQYHCAgICAgJCgsMDQAAAAUGBwgNDg8Q
+FRYXGBkAAAoNERQKDREUCg0RFAoKAAAAAAAABgYGBgkJCQkABgAAbjtoO2I7XDtuOmg6YjpcOm45
+aDliOVw5bjhoOGI4XDhuN2g3YjdcN24paCliKVwpbihoKGIoXChuJ2gnYidcJ24ZaBliGVwZbhho
+GGIYXBhuF2gXYhdcF24JaAliCVwJbghoCGIIXAhuB2gHYgdcB24GaAZiBlwGbgVoBWIFXAVuBGgE
+YgRcBG4DaANiA1wDbgJoAmICXAJuAWgBYgFcAW4AaABiAFwAbjtoO2I7XDtuOmg6YjpcOm45aDli
+OVw5bjhoOGI4XDhuN2g3YjdcN24paCliKVwpbihoKGIoXChuJ2gnYidcJ24ZaBliGVwZbhhoGGIY
+XBhuF2gXYhdcF24JaAliCVwJbghoCGIIXAhuB2gHYgdcB24GaAZiBlwGbgVoBWIFXAVuBGgEYgRc
+BG4DaANiA1wDbgJoAmICXAJuAWgBYgFcAW4AaABiAFwAAAAAAAAAAAAAAAAAEOEBAAgAAADELYAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////wAB//8C
+A////wT//////////////////////wX/Bv8H/wj/Cf8K/wv/DP///w3///8O////D////xD/////
+/////////////////////////////////////////xH///8S////E////xT///8V////Fv///xf/
+//8Y////Gf///xr///8b/////xz///8d////Hv///x////8g////If//////////////////////
+IiMk/yUmJ///KP///yn/////////////////////////////////////////////////////////
+/////////////////////wEEAAACBQEAAwYCAAQHAwAFCAQABgkFAAcKBgAICwcACQwIAAoNCQAL
+DgoADA8LAA0QDAAOEQ0AAUEABAJCAQQDQwIEBEQDBAVFBAQGRgUEB0cGBLcTIgC4FCMAuRUkALsW
+JQC8FyYAvRgnAMAZKADEGikABxsAAAgcAQALHQIADB4DABAfBAAiIQUAJCIGACYjBwAoJAgAKiUJ
+ACwmCgAuJwsAMCgMADQpDQA4Kg4APCsPAEAsEABkLhEAaC8SAGwwEwBwMRQAdDIVAHgzFgB8NBcA
+gDUYAIQ2GQCINxoAjDgbAJE6HACVOx0AmTweAJ09HwChPiAApT8hACRJBgIsSgoCNEsNATxMDwFk
+TREBbEMTAXRPFQF8UBcBhFEZAZVSHQGdUx8BAAQWCBYWFgwWFhYWFhYWEAAAAAAPAD8AAQAAAA8A
+PwABAAAADwA/AAEAAAAPAD8AAQAAAA8APwABAAAADwA/AAEAAAAPAD8AAgAAAA8APwABAAAAAAAA
+AAEAAAACAAAAAwAAAAAAAAAEAAAAAgAAAAUAAAAYCAGlDAIApQA8ODQwLCgkIBwYFBAMCAQADAgE
+ADw4NDAsKCQgHBgUEAwIBAIAFA4AAAAAGgAAAAEBAAECAQEBAQEBAQEBAQECAgICAgICAgMDAwMD
+AwMDBAQEBAQEBAQBAgICAgICAwMDAwMDAwMDAwMDAwMEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQA
+AAAAAQECAQICA3//Bw8fPwEDAQMPBwEHDx8/f///BQAHAgMEBgZ00UUX6KKLLg0PBQcJCwEDChQ3
+blVVVQFLaC8BVVVVBeM4jgOqqqoCcRzHAaqqqgrHcRwHKAAoADAALAAsACgAPAA0ACgAKAA0ADAA
+LAAsAEQAPABAADwAjABsAFgASAD0ALAALAAsADwANAAwACwAVABEAFQAVABsAGAAXABUAIwAeAA6
+AQIB1QDfANoAogB1AH8AagEaAdkA6AAKAboAeQCIAIoFKgM5AagBigXKAtkASAHKAUoB4gD5AMoB
+6gCCAJkAZuYAAJ3YiZ1O7MRONEiDNCd2YicapEEaEzuxExEYgREP/MAPTuzETid2YicapEEaEzux
+Ew3SIA2JndgJCIzACAd+4Ac0SIM0GqRBGhEYgREN0iANCIzACAZpkAawstUFBVRABSd2YicTO7ET
+DdIgDYmd2AkGaZAGxE7sBARGYAQDP/ADqqqqqhqkQRoTO7ETD/zADxEYgREN0iANCqiAChM7sRMP
+/MAPD/zADw3SIA0LtEALC7RAC4md2AkN0iANCqiACgqogAoIjMAIB3iABwd4gAcGaZAGD/zADw3S
+IA0LtEALDdIgDQu0QAuJndgJCIzACImd2AkIjMAIB37gBwd+4AfBLCkHCqiACgiMwAgHeIAHCIzA
+CAd4gAcGaZAGsLLVBQZpkAawstUFBVRABQVUQAXWHcYEDQAaACcANABOAGgAdQCCABoANABOAGgA
+nADQAOoABAEnAE4AdQCcAOoAOAFfAYYBNABoAJwA0AA4AaAB1AEIAgwATgBoAIIAdQCcAMMAaACC
+AIIAnAC2ALYA0ACcAMMAwwDqABEBEQE4AYIAnAC2AJwAtgDQAOoA0ADqAAQBBAEeAcMA6gARAeoA
+EQE4AV8BOAFfAYYBhgGtAQAAMAAAADYAAAAMAAAAEgAAABgAAAAkAAAABgAAAAkAAAAAAAAAAAAA
+ABggFBQODhQUBQYBAgMEAAAAAQECAQICAwQMDAgEDAQEQAAAAIAAAAAAAQAAAAIAAEAAAAAABAAA
+QAAAAEAAAAAQERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uL0BBQkNERUZHSElKS0xNTk9Q
+UVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn8tAA8gAPBhAAAA
+AAAAAAAAAAECBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABYN74Ac76wvpq+bAAArq5kBq58ha6u
+SQAJAAAAAgAAAAAAAAAAAAAACQAAAAIAAAAAAAAAAAAAAAkAAAADAAAAAQAAAAkAAAAJAAAAAgAA
+AAIAAAAJAAAAAQIBAgMEAAAFBgcICQoAAAAFBgACBAAFAAAAAAAFBwEDBAAFAQAAAEAjQCUhISEh
+QEBAQEAFBAQBAUBAQEAFBUBADAxADQwMAQEBBUBABQUABAAEQEAABEBAQAVAQEBAQAVAQEAFBQUB
+AQEBQAUFBQEFAQFABQUFQAVABQUFBQVsAHAEdAh0DAAEBAYAAAAAAAAAAGQAAAAAkAEACgAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAAAAAAAAAAAAAAAAAP8AAAAAAAAA
+AAAAAAAAAAAAAAAAAQAAABAAAAAAAAAAAQAAAAEAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAFjAAQAA
+AAAAAAQAAGQAAAAHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH
+BwcHBwcHBwcHBwcGBgYGBgUFBQUFBAQEBAQDAwMDAwICAgICAQEBAQEAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJF4BACxeAQA0XgEAiF4BAJBe
+AQCYXgEAAAQOCR0tNwAABA4JHSw7AAEQAAEAAAACgAABQgYCEAACIAAAA8AAAUMGAxAAAsAAAAPA
+AAFDBgQQAAJAAAACgAABRAYFEQAAQAAAA8AAAUUGBhEAAOAAAAPAAAFFBgcRAAEAAAACgAABRgYI
+EQACIAAAA8AAAUcGCREAAsAAAAPAAAFHBgoRAAJAAAACgAABSAYLEgAAQAAAA8AAAUkGDBIAAOAA
+AAPAAAFJBg0SAAEAAAACgAABSgYOEgACAAAAAoAAAUwGAAAiFgAAgAAAAwAAAVkAJBYAAQAAAAMA
+AAFaACYWAAIAAAAEAAABWgAoFgACAAAAAwAAAVsAKhYAAoAAAAMAAAFcACwXAAAAAAAEAAABXAAu
+FwAAgAAAAwAAAV0AMBcAAQAAAAMAAAFeADQXAAIAAAADAAABXwA2FwACgAAAAwAAAWAAOBgAAAAA
+AAQAAAFgADwYAAEAAAADAAABYgA+GAACAAAABAAAAWIAQBgAAgAAAAMAAAFjAGQbAAIAAAADAAAB
+bwFmGwACgAAAAwAAAXABaBwAAAAAAAQAAAFwAWwcAAEAAAADAAABcgFuHAACAAAABAAAAXIBcBwA
+AgAAAAMAAAFzAnQdAAAAAAAEAAABdAJ2HQAAgAAAAwAAAXUCeB0AAQAAAAMAAAF2AnwdAAIAAAAD
+AAABdwN+HQACgAAAAwAAAXgDgB4AAAAAAAQAAAF4A4QeAAEAAAADAAABegOGHgACAAAABAAAAXoE
+iB4AAgAAAAMAAAF7BIwfAAAAAAAEAAABfASRHwABQAAAAwAAAX4ElR8AAwAAAAQAAAF/BZcfAALA
+AAADAAABgAWZIAAAQAAAAwAAAYEFnSAAAUAAAAMAAAGCBZ8gAAHAAAADAAABgwWhIAADAAAABAAA
+AYMFpSEAAEAAAAMAAAGFBQAAAAAAAAAAAACotgEAvLYBACS3AQAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAkAAAAABQkRExcAAA4AAAAqAAAABwAAAAsAAAD/////AAAAAAAAAAAB
+AAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAQAAAAEAAAAAAAAAAAAAAAUFBQUFBQUFAAAAAIANAAAAIAAAgA0AAIANAAAAIAAAgA0A
+AAAGAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAA=
+====
diff --git a/sys/contrib/dev/iwn/iwlwifi-6000-9.176.4.1.fw.uu b/sys/contrib/dev/iwn/iwlwifi-6000-9.176.4.1.fw.uu
new file mode 100644
index 00000000000..636a7ba4b26
--- /dev/null
+++ b/sys/contrib/dev/iwn/iwlwifi-6000-9.176.4.1.fw.uu
@@ -0,0 +1,8112 @@
+Copyright (c) 2006-2009, Intel Corporation.
+All rights reserved.
+
+Redistribution.  Redistribution and use in binary form, without 
+modification, are permitted provided that the following conditions are 
+met:
+
+* Redistributions must reproduce the above copyright notice and the 
+  following disclaimer in the documentation and/or other materials 
+  provided with the distribution. 
+* Neither the name of Intel Corporation nor the names of its suppliers 
+  may be used to endorse or promote products derived from this software 
+  without specific prior written permission. 
+* No reverse engineering, decompilation, or disassembly of this software 
+  is permitted.
+
+Limited patent license.  Intel Corporation grants a world-wide, 
+royalty-free, non-exclusive license under patents it now or hereafter 
+owns or controls to make, have made, use, import, offer to sell and 
+sell ("Utilize") this software, but solely to the extent that any 
+such patent is necessary to Utilize the software alone, or in 
+combination with an operating system licensed under an approved Open 
+Source license as listed by the Open Source Initiative at 
+http://opensource.org/licenses.  The patent license shall not apply to 
+any other combinations which include this software.  No hardware per 
+se is licensed hereunder.
+
+DISCLAIMER.  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND 
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
+BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 
+COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 
+OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE 
+USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
+DAMAGE.
+begin-base64 644 iwlwifi-6000-9.176.4.1.fw.uu
+AQSwCds9AAAUQwIAAEABAKhBAgAAQAEAAAAAACAggA8AAEAAaSAAAGkgQABpIAAAaSBAACAggA8A
+AOgAaSAAAGkgQABpIAAAaSBAACAggA8AAHgGaSAAAGkgQABpIAAASiAAAEohAABKIgAASiMAAEok
+AABKJQAASiYAAEonAABKIAAQSiEAEEoiABBKIwAQSiQAEEolABBKJgAQSicAEEogACBKIQAgSiIA
+IEojACBKJAAgSiUAIEomACBKJwAgSiAAMEohADAKJIA/gQAAQEEsnDBALJwwQiQcNAoigD+AADBr
+CiMAN/4PAABKJgBwaSBAAEomAHBKJgBwSiYAcEomAHAAFgBwgABkBEB4ICBAhwAAAAAAAAAAAADh
+wOHB4cLPcKAAyB8WEAGGz3KAAJh/IKISEAGGIaITEAGGIqIUEAGGI6IVEAGGJKIkEAGGJqLPcZ8A
+uP9WoYoh/w8SGFiAExhYgBQYWIAVGFiAJBhYgMHCwcHBwCAgQIcMyM9yoADIHw4aGIANyA8aGIAO
+yBAaGIAPEgE2AcgkeBEaGIAQyC0aGIDgfuHE/BzIvvwcSL7hwOHB4cLhw/wcCLH8HEix/ByIsfwc
+yLH8HAiy/BxIsvwciLL8HMiy/BwIv2okgBDhxGokwBDhxPHAz3CgANAbFIDPcYAAYAQEIICPz1EE
+4QChCvIvKQEAz3CAAOQN8CBAAEB42v/RwMHEayTAEMHEaySAEMHEn3QEFAs0BBQKNAQUCTQEFAg0
+BBQHNAQUBjQEFAU0BBQENMHDwcLBwcHAwcRFLH4QCiZAfsHEaySAFMHEICBAhwzIh7gMGhgwDcib
+uA0aGDAOyA4aGDAPyIe4DxoYMBDIEBoYMOB+4HjxwAzIlbgMGhgwDcibuA0aGDAPyIq4jbiQuA8a
+GDDPcIAAHA8YiIHgC/QPyM9xAAC0DKy4DxoYMFYOIAAP2GfYNgsgAYohBgrRwOB+8cDPcIAAsK8A
+gIYg/oEJ9A/IBSCADwAAANQPGhgwof+KIFUFBgsgAYohRg7o8eB4z3EDAEANz3CgAKggLaDPcYAA
+jARAgQFqAKHPcKAAOC4FgAQggA/AAAAA13DAAAAACvJI2M9xnwC4/xqhW6Fp2Bi4GaHPcIAAeAgl
+gCOBIIHHcQAAiBMNA8AJ4HjPcIAAeAidAsAJ4HjxwB4MAAGA4M93gABgBIh1BfKB4AX0AdgC8ADY
+C6+A4QXygeEF9AHYAvAA2AqvgOIF8oHiBfQB2ALwANgMrwDYz3agAMgfGB4YkAuPgOCKIRAAD/II
+j4DgC/LPcAMAQA1FHhgQMKYC2BgeGJAC8DGmCo+A4BnyCY+A4Bfyz3ACABRDIB4YkM9wgAAoACEe
+GJDPcIAAXAQiHhiQGBYAlkUgAAMYHhiQDI+A4AjyGBYAloUgAQQYHhiQgeMH9BgWAJaIuBgeGJDP
+cIAAMHQAkI7gzCCiggb0GBYAloC4GB4YkIDlGfIA2JS4z3WAAIAEAKVx2Aa4Zg0gAfzZIIXPcAAA
+TBxaDSABn7kYFgCWhbgYHhiQdQMAAeB4z3Gqqru7z3CfALj/NqA2oDagNqDPcaAAyDsOgYi4DqFp
+IEAA/vHgePHApcFBwELBDBwAMRAcQDHPcYAAfGw0GcAPMBkADywZwA4oGYAOJBlADs9wgAB8bCAY
+QAvPcIAAfGwcGAALz3CAAHxsGBjACs9wgAB8bBQYgArPcIAAfGwQGMAIz3CAAHxsDBiACM9wgAB8
+bAgYQAjPcYAAAGyAGQAIfBnAB3gZgAd0GUAHcBkAB2wZAAdoGYAGZBlABmAZAAZcGcAFWBmABVQZ
+QAVQGQAFTBnABEgZgAREGUAEQBkABO+hzqGtoYyhLBnAAigZgAIkGUACIBkAAhwZwAEYGYABFBlA
+ARAZAAFjoWogAAPYGQAAaiDAAtQZAABqIIAC0BkAAGogQAHIGQAAaiAAAcQZAABqIMAAwBkAAGog
+gAC8GQAAaiBAALgZAABqIAAAtBkAAGoggAHMGQAA0NifuM9xnwC4/x2hz3CAAAAAxIBTJcQ1UybF
+Nde6AebTvsSgUyPABAUmjh/Q/gAA1qEFIIAPsP4AABahGIFTJ841AN2UuBihQMMBwALByXMMFAYw
+GgggARAUBzDPcKAAtA+8oM9xoADIOy6Bsg/gAH3YMg9AAboLIAGpcAjYANlmCyABmbnPcIAAMHQA
+kI7gzCCigsoggQ/gAMQxyiEhAJAIYQHPIaEF/QXP//HA1gggAXvYag/gAOHZz3GAAHxsNBnADzAZ
+AA8sGcAOKBmADiQZQA7PcIAAfGwgGEALz3CAAHxsHBgAC89wgAB8bBgYwArPcIAAfGwUGIAKz3CA
+AHxsEBjACM9wgAB8bAwYgAjPcIAAfGwIGEAIz3GAAABsgBkACHwZwAd4GYAHdBlAB3AZAAdsGQAH
+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
+AAuEGkALz3CgAMgcCICIGgAAz3CAAIAFAICMGgAAqCCAAvAiQwDPcJ8AuP8B4XagmQAAAPwciLb8
+HEi2/BwItvwcyLX8HIi1/BxItfwcCLX8HMi0/ByItPwcSLT8HAi0/BzIs/wciLP8HEiz4H7geATc
+ON018OB4BNw03TPw4HgE3DDdMfDgeATcLN0v8OB4BNwo3S3w4HgE3CTdK/DgeATcIN0p8OB4BNwc
+3Sfw4HgE3BjdJfDgeATcFN0j8OB4BNwQ3SHw4HgE3AzdH/DgeATcCN0c8OB4BNwE3RnwNBQaMDAU
+GTAsFBgwKBQXMCQUFjAgFBUwHBQUMBgUEzAUFBIwEBQRMAwUEDACxwHGsCRNM7AkHzPgfvHAz3GA
+AJAMEKHgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjRwOB+
+4HjhxeHGQCkNAiV9QC0DFIjipXsIdZD3UyV+kAbyAR1SEGG6+/FBKo4AwbpCJk6QBB3QEP31gOIK
+8i8kiXDgeKgggAEBHVIQ4HjBxuB/wcXgeChyANnW8eB48cCuDs//ocEId892oACsLxmGBCCAD3AA
+AADXcCAAAAAB2MB4LyYH8Ch1GnIT9IogSQb2DO//iiFNBDmG6gzv/4ogCQaKIAkG3gzv/6lxANgk
+8BHMABxEM08gwQMB4BB4BCCADwAA/7+PuAIcRDARGhwwRgmgD0AnABIH5wQnjx8AAPz/BScAFJ24
+n7jscQChAMHscCCgAdh5Bu//ocDgeCK5BvDscmCiBOBhuYHhYIA69wDZz3CgANQLbaDPcKAARB01
+oOB+4HjxwO4Nz/8Idih1KHBIcWhyyv+B4MoggQPAD+H/yiFBAzkGz//hxc9ygACwBKSKgOXPcp8A
+uP8G8s9z0Lr+yn6iGqI7ooDlDvLPcKAAOC4FgAQggA/AAAAA13DAAAAA9vNp2Bi4GaLgf8HF4Hjx
+wH4Nz/8Id89xgACwBAWJAN6A4KnBQMZD9AHdpanPcYAAgHbPcKAAzCstoADYj7gRGhwwIRqCM34I
+IA2LcCoJAAjPcAEAsAlBwIogUABCwM9wgAD8YgCIZMUC3REcAjAAwBIcQjMTHAIwz3CAAFQQRcDP
+cIAAwA9GwM9wgACABQCAQ8Yg2QHaR8BIx4HAPdsXu8H/CNgB2cj/BBpYM0kF7/+pwAPaz3GgABQE
+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
+8cAAFgBBz3KAAARLBrIAFgVBQCIBBA4aRAFMJYCEyiHCD8oiwgfKIGIByiOCDwAAcwBEBaLvyiQi
+AADaB/AAFgBBFCGMAAC0AeIvIEIBEHK39lIMz/DRwOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+
+4HjgfuB44H7geOB+4HjPcIAA6AfgfwCA4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7g
+eOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB4
+4H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfwHY4H7geOB+4Hjg
+fuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB48cD+Do/w
+GnHPd4AAREsgj1EhAIBG8s9xgADwByCJgOHMICGgPvKB4Ab0z3CAALicoYAD8ADdjuUD94DlAvQA
+3c9xgAC4nBiJgOAE9IDlBPQA3gTwooEE3oogEwEaDa/wqXGKIFMBEg2v8Mlxz3CAABwPGIiD4Mwg
+IoHMIOKBzCAiggjyiiATAe4Mr/Cl2QrwCpcQdQj0C5cQdswgIaAE9ADYIfAB2M9xoADIHw2hz3CA
+APAHAYjLt6q3BL4QuMV9BX2KIBMBsgyv8LzZiiATAaYMr/Cpcc9woADIH38YWIMB2IEGj/DgePHA
+Gg6v8AhxxP+A4DzyIN3PdqAAyB+wpjLYQx4YEADY8gnv8I24saawph7YQx4YEADY4gnv8I24saZ/
+Fg+WiiATAUEvDRTEvUYMr/Dm2YogEwE+DK/w6XGKIBMBMgyv8Klxz3GAAPAHAYkB2hB1wiKKAIDl
+QKnI9gDYDaaB4gT0BNgBqf0Fj/Dhxc9ygABESyCKAN3guWTYyiBBA+G5z3OgAMAdBqIJ8gzYAKMB
+ggOiAoIEogTwoKOjoqSiz3CAABwPCYBRIECB0SGigATyAIOAuACj4H/BxfHA4cUA3c9woADAHaCg
+qXCpcYz/z3CAAERLo6CkoJ0Fr/CmoIDgz3GAAERLBPRAIQADBPBAIQAEAIDPcaAAwB1RIACAAIHP
+IOIA0CDhAACh4H7gePHA8gyv8APZz3aAAERLdgnv8MlwoI5EJUARheAM9AohwA/rcgXYadtKJEAA
+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
+QgITMAQowBEPFBUiAQAVJg9yEyIIAMwRD0QAIgoAAEAAQABwDgAAYQAAEyUCABMk7BzAEQ92EyIY
+CMoRCQATQBwIyhEJABNAIAjKEQ94EyIEAMoRAAABJAAAASUGAABhD3YTIixIxxEPeBMiAADGEQMA
+ASQAAAElAAATJcIsEyQEKMARAkYTJAQowBHCXxMkBCjAEQ9FACIAXAA5JwAAZAAAEyQBABMlOBzA
+EQ93EyLgHMARDwETIgQIwBEPAhMiBCjAEQ8HEyIEKMARDwQTIgQowBECAHFwBwAAYf8AEyUCEBMk
+BCjAEQAAEyUAABMkyEnHEQYAAGEAABMlAhATJAQowBEAABMlSQATJMhJxxEPcBMiAQATMAQowBED
+ABMkAAATJQQIwBEAABMkOEXAEQ8DEyIYKMARBAAAYQAAWDgAABMkAQATJTgcwBEAAAAhnGuAgQAA
+wBY8BMARMAWAgQAAwBYEARtiEATAEAMAGyRUBMARJATAEQgEwBBca4CBAADAFwgEwBA4a4CBAADA
+FwAAGyUDHBtiQAAbJDAcwBEFAABhNAWAgQAAwBYPGxkiCASggTjwxIAAABskAgAbJTgcwBEAAAAh
+MAWAgQAAwBZMBMARNAWAgQAAwBYPGxkiSASggTjwxIAAABskAgAbJTgcwBEAAAAhAAAAhTAFgIEA
+AMAWDxsEIhAEG2YPARtoFBzAEAoAG0AEABtuAwAAYQ8cHSIBAB0m+Q8AYWQMABAAwAYRAQAEJ/wA
+BGQAABskAgAbJTgcwBEAAAAhAAAbJUAAGyQwHMARAAAAIQ8cHSIYAR0mGADHEPySgIEAAMAXIADH
+EASTgIEAAMAXAAAAIXwxgIECAFxuEQAAYfhBxBAPGwkiAAsJOQIACmIDAQpiBAIKYgAACUAEAABh
+CQAJQAIAAGEKAAlAAAAAYQIACUEACRooAADAFgEAGyYAAMAXBAAdJgEACCfpAAhkAAAAIQAAAACM
+AQAAAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsOQAAODsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAABSEgAAAAAAAAAAAAAAAAAABAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+wACQANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAADIkoAAAAAAAAAAAABAl4AA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAsAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAiJyAACycAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAD/AQAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMisgACY9gEAAAAA
+AAAAAAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIkoAAhP8BAAAAAADIkoAA
+UAYCAAAAAAAAAAAAyJKAAOgHAgAAAAAAAAAAAAAAAADIkoAAAAAAAAAAAAAAAAAA/wAAAAAHAAAA
+AAAAAAAAABgbAgAYGwIAGBsCABwbAgAAAAAAHQAAAAAAAAAAAAAAAAAAAAAAAAB/fwABAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAQIECAAIECAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADECAAAFQAAANQtgAA4KwAAOCsAADgrAAAMQgAA
+OCsAADgrAABYPQAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAArB4AAFwgAAB0
+IAAA5CEAAGwiAADoIQAAOCsAADgrAACATgAASFAAADRRAAA4KwAAOCsAADgrAAD8TAAAFGQAABBk
+AABoZAAAOCsAADgrAAA4KwAAGEQAADgrAABMZAAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsA
+ADgrAAAQQgAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAA
+OCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAAIRQAAOCsAADgrAAA4
+KwAAOCsAADgrAADwRQAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgr
+AABQawAAOCsAAHhsAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAACBvAAA4KwAAOCsA
+ADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAAMyAAQAkhAEAOCsAAHiGAQA4KwAA
+KIgBABRUAQA4KwAAOCsAAABSAAA4KwAAOCsAADgrAAA4KwAAOCsAADzeAQDE8QEAOCsAADgrAAA4
+KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAACsGAIAOCsAADgrAAA4KwAA2P0BADgr
+AADUAQIAOCsAAPwpAgA4KwAAoCUAAKQlAAA4KwAAOCsAAIgSAgBMcgAAOCsAADgrAAA4KwAAfPsB
+ADgrAAA4KwAAWE0BAAygAQA4KwAAOCsAADgrAAD8qAEANFUBADgrAAA4KwAAOCsAADgrAAA4KwAA
+OCsAALSzAQA4KwAAgA8CAIQPAgCQDwIAlA8CAIgPAgCMDwIAmA8CADgrAAA4KwAAOCsAADgrAAA4
+KwAAOCsAADgrAAA4KwAAOCsAAPBTAAA4KwAAOCsAADgrAAA4KwAAOCsAANQOAgAkDwIAEEgAADgr
+AAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsA
+ADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAAA4KwAA
+OCsAADgrAAA4KwAAOCsAADgrAAA4KwAAOCsAADgrAACQSQAAGEoAAKxKAABgSwAAJIEAADhLAAA4
+KwAAOCsAADgrAAA4KwAAOCsAAIhJAACMSQAAOCsAADgrAAAwUgAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAIwMAACMDAAAjAwAAIwMAACMDAAAjAwAAIwMAACMDAAAjAwAAIwM
+AACMDAAAjAwAAIwMAACMDAAAjAwAAIwMAACMDAAAjAwAAIwMAACMDAAAjAwAAIwMAACMDAAAjAwA
+AIwMAACMDAAAjAwAAIwMAACMDAAAjAwAAIwMAAC8DQAAAAAAALxaAQCMDAAAnAkAAIwMAACMDAAA
+jAwAAMwJAADoPAEAZIMAAIwMAACMDAAABAoAAAQKAAAECgAABAoAAAQKAAAECgAABAoAAIwMAACM
+DAAAjAwAAIwMAAD8CwAAjAwAAIwMAACMDAAAjAwAAIwMAADADQAAjAwAAIwMAACACQAAAwAAAJwM
+AgACAAAA6GgBAAQAAACcaQEABQAAANwNAAAGAAAAIDQAAAgAAAAADwIAEwAAACz4AQAJAAAAgAMC
+AAoAAACcDwIADgAAABSdAQAPAAAAYIoBABAAAACYigEAGAAAACRaAQANAAAAEIIBABcAAABIcgAA
+EQAAAKSBAAASAAAAWEwBAAEAAABY/QEAFAAAAMCwAQAVAAAAQKABAAcAAACQbwAAFgAAAOwpAgAZ
+AAAAvA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAEAAAABAQAAAAAA
+ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////AAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4QMOHuHhAw4e4eEDDh7h4QMOHuHhAw4e
+4eEDDh7h4QMOHuHhAw4e4eEDDh7h4QMOHuHhAw4e4eEDDh7hPDw8PDw8PDw8PDw8PDw8PDw8PDw8
+PDw8PDw8PDw8PDwVFRUVPDw8PBUVFRU8PDw8AAAAAAAAAAAAAAAAAAAAADw8PDw8PDw8PDw8PDw8
+PDw8PDw8PDw8PDw8PDw8PDw8FRUVFTw8PDwVFRUVPDw8PAAAAAAAAAAAAAAAAAAAAAA8PDw8PDw8
+PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PBUVFRU8PDw8FRUVFTw8PDwAAAAAAAAAAAAAAAAAAAAA
+kAYAADH6rwCQBgAAMfqvAJAGAAAx+q8AkAYAADH6rwCQBgAAMfqvAJAGAAAx+q8AkAYAADH6rwCQ
+BgAAMfqvAEMFAAAx+q8AQwUAADH6rwBDBQAAMfqvAEMFAAAx+q8AQwUAADH6rwBDBQAAMfqvAEMF
+AAAx+q8AQwUAADH6rwAAAAAA3sMJAAAAAAAAAAAAAAAAALQqAQABAAAAlC2AAAAAAAAAAAAAAAAA
+AFQrAQAVAAAA1C2AAAAAAAAAAAAAAgAAAAMAAAAAAAAACAAAAAAAAAAwjBEAIL8CAAAAAADIKwEA
+cCwBAHQtAQAgLwEAdC0BACAvAQDQMAEAWDEBALgxAQCAgICAgICAgAGAAoCAgICAAAAAALg3AQC4
+NwEAAAAAAAAAAAAAAAAAAAAAALg3AQC4NwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJQt
+gACULYAApCCgADggoAABAAAA/P///wAAAAAAAAAAtC2AALQtgACoIKAAPCCgAAgAAADz////AAAA
+AAAAAADULYAA1C2AAKwgoABsIKAAMAAAAM////8AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA
+AAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAbE0BAAUAAADULYAAwFIBAAD/AwDgUgEAAP8FAMxTAQAA
+/y0A8FMBAAD/PQCoUwEAAP8EAIxTAQAA/yUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAABgWQEABgAAAJQtgAAAAAAALAEAAF4BAAABAAAAAQAAAAEAAAABAAAAAwAAAAAAAAAAAAAA
+vGABALxhAQA4YgEAQF0BAGhcAQBoYwEA8GMBADRkAQCIZAEAAAAAAAMAAAACAAAAAwAAAAMAAAAD
+AAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAbGoBAAoAAACULYAAAAAAAAAAAAAAAAAA+GoBAAoA
+AACULYAAAAAAAAAAAAAAAAAArGsBAAoAAACULYAAAAAAAAAAAAAAAAAAzGwBAAoAAACULYAAAAAA
+AAAAAAAAAAAAMGsBAAoAAACULYAAAAAAAAAAAAAAAAAARGwBAAoAAACULYAAAAAAABAAAAAAgAAA
+AACgABAnAADoAwAA6AMAAAAAAAAAAAAAAAAAAPg+AQAKAAAAlC2AAAAAAAAAAAAAAAAAAPg+AQAK
+AAAAlC2AAAAAAAAAAAAAAAAAAPg+AQAKAAAAlC2AAAAAAAAAAAAAAAAAAPg+AQAKAAAAlC2AAAAA
+AAAAAAAAAAAAAPg+AQAKAAAAlC2AAAAAAAAAAAAAAAAAAPg+AQAKAAAAlC2AAAAAAAAAAAAAAAAA
+APg+AQAKAAAAlC2AAAAAAAAAAAAAAAAAAPg+AQAKAAAAlC2AAAAAAAAAAAAAAAAAAPg+AQAKAAAA
+lC2AAAAAAAAAAAAAAAAAAPg+AQAKAAAAlC2AAAAAAAAAAAAAAAAAAPg+AQAKAAAAlC2AAAAAAAAA
+AAAAAAAAAPg+AQAKAAAAlC2AAAAAAAAAAAAAAAAAAASGAQAKAAAAlC2AAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4jQEAhI4BAHCRAQAklAEApJYBACiaAQA0kAEARAWAAJCS
+gAAYAAAAUJKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvJwBAAYAAACULYAA/////wAAAAD/////////
+/wAAAAAAAAAAAAAAAJyfAQAFAAAA1C2AAG4AbgBpAMAAoABQAIAAvgBQAX0APgBuAG4AaQDAAKAA
+UACAAL4AUAF9AD4AAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIBAQACAQABAgICAAEB
+AAIBAgECAAIAAQID//8AALkB3wCxABsAFgEbAHwBGwCvABsAFAEbAHoBGwBsAKAA0QCgADcBoABv
+AIMAcQCDAHYAgwBzADMAbgAzAHAAMwByADMA1wAzAD0BMwDUAQYA0AEAAH4APADjADwASQE8AHgA
+SQDdAEkAQwFJAH8AWgDkAFoASgFaAKoAPwCrAAEADwE/ABABAQB1AT8AdgEBAHkAagDeAGoARAFq
+AKgAAAANAQAAcwEAAKYANwCnAAEACwE3AAwBAQBxATcAcgEBAAQACACcAcwAnQHMAJ4BzACfAcwA
+1QHMANYBzADXAcwAtABHABkBRwCAAUcAkAAiAPUAIgBbASIAoQCIAAYBiABsAYgAlAAAAJUAAACY
+AMAAmQCgAJYAkACXAAAAlAABAJUAAQCYAMAAmQCgAJYAkACXAAAAlAACAJUAAwCYAMAAmQCgAJYA
+kACXAAAAlAADAJUABwCYAMAAmQCgAJYAkACXAAAA+gAAAPkAAAACAZAAAwHTAAABgwD+ABMA/AAz
+AP0AdwD6AAEA+QABAAIBkAADAdMAAAGDAP4AEwD8ADMA/QB3APoAAgD5AAMAAgGQAAMB0wAAAYMA
+/gATAPwAMwD9AHcA+gADAPkABwACAZIAAwHTAAABgwD+ABMA/AAzAP0AdwBfAQAAYQEAAGgBkABp
+AdMAZgGDAGQBEwBiATMAYwF3AF8BAQBhAQEAaAGQAGkB0wBmAYMAZAETAGIBMwBjAXcAXwECAGEB
+AwBoAZAAaQHTAGYBgwBkARMAYgEzAGMBdwBfAQMAYQEHAGgBkABpAdMAZgGDAGQBEwBiATMAYwF3
+AIUAAACGAAAAhwBQAIgAAACJAKAAigAAAIsA0ACMAAAAhQABAIYAAQCHAFAAiAAAAIkAoACKAAAA
+iwDQAIwAAACFAAIAhgADAIcAUACIAAAAiQCgAIoAAACLANAAjAAAAIUAAwCGAAcAhwBQAIgAAACJ
+AKAAigAAAIsA0ACMAAAA6wAAAOoAAADsAFAA7QAAAO4AoADvAAAA8ADQAPEAAADrAAEA6gABAOwA
+UADtAAAA7gCgAO8AAADwANAA8QAAAOsAAgDqAAMA7ABQAO0AAADuAKAA7wAAAPAA0ADxAAAA6wAD
+AOoABwDsAFAA7QAAAO4AoADvAAAA8ADQAPEAAABRAQAAUAEAAFIBUABTAQAAVAGgAFUBAABWAdAA
+VwEAAFEBAQBQAQEAUgFQAFMBAABUAaAAVQEAAFYB0ABXAQAAUQECAFABAwBSAVAAUwEAAFQBoABV
+AQAAVgHQAFcBAABRAQMAUAEHAFIBUABTAQAAVAGgAFUBAABWAdAAVwEAAPv/AAD//wAAuQHfALEA
+GwAWARsAfAEbAK8AGwAUARsAegEbAGwAoADRAKAANwGgAG8AgwBxAIMAdgCDAHMAMwBuADMAcAAz
+AHIAMwDXADMAPQEzANQBBgDQAQAAfgA8AOMAPABJATwAeABJAN0ASQBDAUkAfwBaAOQAWgBKAVoA
+qgA/AKsAAQAPAT8AEAEBAHUBPwB2AQEAeQBqAN4AagBEAWoAqAAAAA0BAABzAQAApgA3AKcAAQAL
+ATcADAEBAHEBNwByAQEABAAIAJwBzACdAcwAngHMAJ8BiADVAcwA1gHMANcBzAC0AEcAGQFHAIAB
+RwCQACIA9QAiAFsBIgChAIgABgGIAGwBiAD6AAAA+QAAAAIBlwADAdAAAAGNAP4AEQD8ADMA/QB3
+APoAAQD5AAEAAgGXAAMB0AAAAY0A/gARAPwAMwD9AHcA+gACAPkAAwACAZcAAwHQAAABjQD+ABEA
+/AAzAP0AdwD6AAMA+QAHAAIBlwADAdAAAAGNAP4AEQD8ADMA/QB3AF8BAABhAQAAaAGXAGkB0ABm
+AY0AZAERAGIBMwBjAXcAXwEBAGEBAQBoAZcAaQHQAGYBjQBkAREAYgEzAGMBdwBfAQIAYQEDAGgB
+lwBpAdAAZgGNAGQBEQBiATMAYwF3AF8BAwBhAQcAaAGXAGkB0ABmAY0AZAERAGIBMwBjAXcA6wAA
+AOoAAADsAFUA7QAAAO4AqgDvAAAA8ADdAPEAAADrAAEA6gABAOwAVQDtAAAA7gCqAO8AAADwAN0A
+8QAAAOsAAgDqAAMA7ABVAO0AAADuAKoA7wAAAPAA3QDxAAAA6wADAOoABwDsAFUA7QAAAO4AqgDv
+AAAA8ADdAPEAAABRAQAAUAEAAFIBVQBTAQAAVAGqAFUBAABWAd0AVwEAAFEBAQBQAQEAUgFVAFMB
+AABUAaoAVQEAAFYB3QBXAQAAUQECAFABAwBSAVUAUwEAAFQBqgBVAQAAVgHdAFcBAABRAQMAUAEH
+AFIBVQBTAQAAVAGqAFUBAABWAd0AVwEAAPv/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAcswEAINQBAPScgABABQAAAAAAAByzAQBItAEANKKAAPgBAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAD42AEA/NYBACykgABUAAAAAAAAAByzAQAs1wEArKSAAFABAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAEAAAAcswEAQNMBAEA/gABQAQAAAAAAAByzAQBY1QEA8AaAAAIAAAAAAAAA
+HLMBALDVAQD0BoAABAAAAAAAAAD02AEASLQBAICkgAAqAAAAAAAAAByzAQBM1gEAAAAAAAAAAAAA
+AAAAHLMBAAzWAQD4BoAABAAAAAAAAAAAAAAAAAAAAAEAAgACAAMABAAEAAUABgAGAAcACAAIAAkA
+CgAKAAsADAAMAA0ADgAOAA8AJgAnACgAKAApACoARgBGAEcASABIAEkASgBKAEsATABoAGkAagBq
+AGsAbABsAG0AbgBuAG8AcABwAHEAcgByAHMAdAB0AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUA
+dQB1AHUAdQB1AHUADwA/AAAAAAAAAAAAAAAAAAAAAQACAAIAAwAEAAQABQAGAAYABwAIAAgACQAK
+AAoACwAkACQAJQAmACYAJwBEAEQARQBGAEYARwBIAEgASQBKAEoASwBMAEwATQBqAGoAawBsAGwA
+bQBuAG4AbwBwAHAAcQByAHIAcwB0AHQAdQB2AHYAdgB2AHYAdgB2AHYAdgB2AHYAdgB2AHYAdgB2
+AHYAdgB2AHYADgA/AESmAQAS0gAAAAAAAP//DwBwwgEAtgAAAAAAAAD/AAAAcMIBALcAAAAAAAAA
+/wAAAHDCAQC4AAAAAAAAAP8AAABwwgEAuQAAAAAAAAD/AAAAcMIBALoAAAAAAAAA/wAAAHDCAQC7
+AAAAAAAAAP8AAABwwgEAvQAAAAAAAAD/AAAAcMIBAL4AAAAAAAAA/wAAAHDCAQC/AAAAAAAAAP8A
+AABwwgEAwAAAAAAAAAD/AAAAcMIBAMEAAAAAAAAA/wAAAHDCAQDCAAAAAAAAAP8AAABEpgEAE9IA
+AAAAAAD//w8AcMIBABsBAAAAAAAA/wAAAHDCAQAcAQAAAAAAAP8AAABwwgEAHQEAAAAAAAD/AAAA
+cMIBAB4BAAAAAAAA/wAAAHDCAQAfAQAAAAAAAP8AAABwwgEAIAEAAAAAAAD/AAAAcMIBACIBAAAA
+AAAA/wAAAHDCAQAjAQAAAAAAAP8AAABwwgEAJAEAAAAAAAD/AAAAcMIBACUBAAAAAAAA/wAAAHDC
+AQAmAQAAAAAAAP8AAABwwgEAJwEAAAAAAAD/AAAARKYBABTSAAAAAAAA//8PAHDCAQCCAQAAAAAA
+AP8AAABwwgEAgwEAAAAAAAD/AAAAcMIBAIQBAAAAAAAA/wAAAHDCAQCFAQAAAAAAAP8AAABwwgEA
+hgEAAAAAAAD/AAAAcMIBAIcBAAAAAAAA/wAAAHDCAQCJAQAAAAAAAP8AAABwwgEAigEAAAAAAAD/
+AAAAcMIBAIsBAAAAAAAA/wAAAHDCAQCMAQAAAAAAAP8AAABwwgEAjQEAAAAAAAD/AAAAcMIBAI4B
+AAAAAAAA/wAAAESmAQAI0gAAAAAAAP//AwCEpgEAAIIAAAAAAAD/AQAAhKYBAAGCAAAAAAAA/wEA
+AESmAQAJ0gAAAAAAAP//AwCEpgEAAoIAAAAAAAD/AQAAhKYBAAOCAAAAAAAA/wEAAESmAQAK0gAA
+AAAAAP//AwCEpgEABIIAAAAAAAD/AQAAhKYBAAWCAAAAAAAA/wEAAESmAQAG0gAAAAAAAP8BAABE
+pgEAB9IAAAAAAAD/AwAARKYBAAbSAAAJAAAAAP4DAESmAQAH0gAACgAAAAD8DwBEpgEABtIAABIA
+AAAAAPwHRKYBAAfSAAAUAAAAAADwP0SmAQAV0gAAAAAAAP8DAABEpgEADNIAAAAAAAD/AQAARKYB
+ABXSAAAKAAAAAPwPAESmAQAM0gAACQAAAAD+AwBEpgEAFdIAABQAAAAAAPA/RKYBAAzSAAASAAAA
+AAD8BzCAAACqqqqqMYAAAKqqqqoygAAAAKqqqjOAAAAAAAAANIAAAAAAAAA1gAAAAAAAADaAAAAA
+AAAAN4AAAAAAAAA4gAAAAAAAADmAAAAAAAAAOoAAAAAAAAA7gAAAAAAAADyAAAAAAAAAPYAAAKqq
+CgA+gAAAqqqqqj+AAACqqqqqQIAAAAAAAAAwgAAAqqqqqjGAAACqqqqqMoAAAACqqqozgAAAAAAA
+ADSAAAAAAAAANYAAAAAAAAA2gAAAAAAAADeAAAAAAAAAOIAAAAAAAAA5gAAAAAAAADqAAAAAAAAA
+O4AAAAAAAAA8gAAAAAAAAD2AAACqqgoAPoAAAKqqqqo/gAAAqqqqqkCAAAAAAAAAMIAAAAAAAAAx
+gAAAAAAAADKAAAAAAAAAM4AAAAAAAAA0gAAAqqqqqjWAAACqqqqqNoAAAAAAAAA3gAAAAAAAADiA
+AAAAAAAAOYAAAAAAAAA6gAAAqqqqCjuAAACqqqqqPIAAAAAAAAA9gAAAAAAAAD6AAAAAAAAAP4AA
+AAAAAABAgAAAAAAAADCAAAAAAAAAMYAAAAAAAAAygAAAAAAAADOAAAAAAAAANIAAAKqqqqo1gAAA
+qqqqqjaAAAAAAAAAN4AAAAAAAAA4gAAAAAAAADmAAAAAAAAAOoAAAKqqqgo7gAAAqqqqqjyAAAAA
+AAAAPYAAAAAAAAA+gAAAAAAAAD+AAAAAAAAAQIAAAAAAAABEBYAAkJKAABgAAABQkoAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAsPMBAAYAAACULYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAABEBYAAkJKAABgAAABQkoAAAAAAAAAAAAAAAAAAAAAAAAAAAABU
+/wEABgAAAJQtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAEQFgACQkoAAGAAAAFCSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAKALAgAEAAAAlC2A
+AAAAAAAAAAAAAAAAAHAKAgAEAAAAlC2AAAAAAAAAAAAAAAAAAGgMAgAGAAAAlC2AAAAAAAAAAAAA
+AAAAAHAKAgAEAAAAlC2AAAAAAAAAAAAAAAAAAKALAgAEAAAAlC2AAAAAAAAAAAAAAAAAAHAKAgAE
+AAAAlC2AAAAAAAAAAAAAAAAAAKALAgAEAAAAlC2AAAAAAAAAAAAAAAAAAHAKAgAEAAAAlC2AAAAA
+AAAAAAAAAAAAAGgMAgAGAAAAlC2AAAAAAAAAAAAAAAAAAHAKAgAEAAAAlC2AAAAAAAAAAAAAAAAA
+AKALAgAEAAAAlC2AAAAAAAAAAAAAAAAAAGgMAgAGAAAAlC2AAAAAAAAAAAAAAAAAAKALAgAEAAAA
+lC2AAAAAAAAAAAAAAAAAAKALAgAEAAAAlC2AAAAAAAAAAAAAAAAAAGgMAgAGAAAAlC2AAEQFgACQ
+koAAGAAAAFCSgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAFAUAAAAAAAAAAAAAAAAAAAAAAP8A/wAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwQEBAQEBQYH
+CAgICAgJCgsMDQAAAAUGBwgNDg8QFRYXGBkAAAoNERQKDREUGRkZGQoKAAAAAAAABgYGBgkJCQkA
+BgAAbjtoO2I7XDtuOmg6YjpcOm45aDliOVw5bitoK2IrXCtuKmgqYipcKm4paCliKVwpbhtoG2Ib
+XBtuGmgaYhpcGm4ZaBliGVwZbhhoGGIYXBhuF2gXYhdcF24WaBZiFlwWbhVoFWIVXBVuFGgUYhRc
+FG4TaBNiE1wTbhJoEmISXBJuEWgRYhFcEW4QaBBiEFwQVxBSEE0QSRBuAWgBYgFcAW4AaABiAFwA
+bjtoO2I7XDtuOmg6YjpcOm45aDliOVw5bjhoOGI4XDhuN2g3YjdcN24paCliKVwpbihoKGIoXChu
+J2gnYidcJ24ZaBliGVwZbhhoGGIYXBhuF2gXYhdcF24JaAliCVwJbghoCGIIXAhuB2gHYgdcB24G
+aAZiBlwGbgVoBWIFXAVuBGgEYgRcBG4DaANiA1wDbgJoAmICXAJuAWgBYgFcAW4AaABiAFwAAAAA
+AAAAAAAAAAAALCwCAAgAAADULYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAA/////////wAB//8CA////wT//////////////////////wX/Bv8H/wj/Cf8K/wv/
+DP///w3///8O////D////xD//////////////////////////////////////////////xH///8S
+////E////xT///8V////Fv///xf///8Y////Gf///xr///8b/////xz///8d////Hv///x////8g
+////If//////////////////////IiMk/yUmJ///KP///yn/////////////////////////////
+/////////////////////////////////////////////////wEEAAACBQEAAwYCAAQHAwAFCAQA
+BgkFAAcKBgAICwcACQwIAAoNCQALDgoADA8LAA0QDAAOEQ0AAUAABAJBAQQDQgIEBEMDBAVEBAQG
+RQUEB0YGBAhHBwQJSAgEtxMiALgUIwC5FSQAuxYlALwXJgC9GCcAwBkoAMQaKQAHGwAACBwBAAsd
+AgAMHgMAEB8EACIhBQAkIgYAJiMHACgkCAAqJQkALCYKAC4nCwAwKAwANCkNADgqDgA8Kw8AQCwQ
+AGQuEQBoLxIAbDATAHAxFAB0MhUAeDMWAHw0FwCANRgAhDYZAIg3GgCMOBsAkTocAJU7HQCZPB4A
+nT0fAKE+IAClPyEAJEkGAixKCgI0Sw0BPEwPAWRNEQFsThMBdE8VAXxQFwGEURkBlVIdAZ1THwEA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQYCBgYGAwYGBgYGBgYEAAAAAAPAD8AAQAA
+AA8APwABAAAADwA/AAEAAAAPAD8AAQAAAA8APwABAAAADwA/AAEAAAAPAD8AAgAAAA8APwABAAAA
+AAAAAAEAAAACAAAAAwAAAAAAAAAEAAAAAgAAAAUAAAAPFBkeKAoFALAJAaUAPDg0MCwoJCAcGBQQ
+DAgEAAwIBAA8ODQwLCgkIBwYFBAMCAQCCAAOAAAADgEBAAECAQEBAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAClxoT4me6N9g3/vdax3lSRUGADAqnOfVYZ52K1
+5k2a7EWPnR9AiYf6Fe/rssmOC/vsQWez/V/qRb8j91OW5FubwnUc4a49akxabEF+AvVPg1xo9FE0
+0Qj5k+Jzq1NiPyoMCFKVZUZenSgwoTcPCrUvCQ42JJsbPd8mzWlOzX+f6hsSnh10WC40LTay3O60
++1v2pE12YbfOfXtSPt1xXpcT9aZouQAALMFgQB/jyHnttr7URo3ZZ0ty3pTUmOiwSoVruyrF5U8W
+7cWG15pVZpQRz4oQ6QYEgf7woER4uiXjS/Oi/l3AgIoFrT+8IUhwBPHfY8F3da9jQjAgGuUO/W2/
+TIEUGDUmL8PhvqI1zIg5LleT8lWC/Ed6rMjnuisyleagwJgZ0Z5/o2ZEflSrO4MLyowpx9NrPCh5
+p+K8HRZ2rTvbVmROdB4U25IKDGxI5Lhdn26970OmxKg5pDE304vyMtVDi1lut9qMAWSx0pzgSbTY
++qwH8yXPr8qO9OlHGBDVb4jwb0pyXCQ48VfHc1GXI8t8oZzoIT7dltxhhg2FD5DgQnzEcarM2JAF
+BgH3Ehyjwl9q+a7QaZEXWJknOrknONkT67MrMyK70nCpiQenM7YtIjySFSDJSYf/qnhQeqWPA/hZ
+gAkXGtplMdfGhLjQw4KwKXdaER7Le/yo1m06LAEBAQEBAQEBAgICAgICAgIDAwMDAwMDAwQEBAQE
+BAQEAQICAgICAgMDAwMDAwMDAwMDAwMDBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAEBAgEC
+AgN//wcPHz8BAwEDDwcBBw8fP3///wUABwIDBAYGdNFFF+iiiy4NDwUHCQsBAwoUN25VVVUBS2gv
+AVVVVQXjOI4DqqqqAnEcxwGqqqoKx3EcBw8PDwcGBwIDBAUAAQgJCwooACgAMAAsACwAKAA8ADQA
+KAAoADQAMAAsACwARAA8AEAAPACMAGwAWABIAPQAsAAsACwAPAA0ADAALABUAEQAVABUAGwAYABc
+AFQAjAB4ADoBAgHVAN8A2gCiAHUAfwBqARoB2QDoAAoBugB5AIgAigUqAzkBqAGKBcoC2QBIAcoB
+SgHiAPkAygHqAIIAmQD0AkQCtQHVAZQChAH1AEECrACQAIQAgAB4AHgAeAB0AGbmAACd2ImdTuzE
+TjRIgzQndmInGqRBGhM7sRMRGIERD/zAD07sxE4ndmInGqRBGhM7sRMN0iANiZ3YCQiMwAgHfuAH
+NEiDNBqkQRoRGIERDdIgDQiMwAgGaZAGsLLVBQVUQAUndmInEzuxEw3SIA2JndgJBmmQBsRO7AQE
+RmAEAz/wA6qqqqoapEEaEzuxEw/8wA8RGIERDdIgDQqogAoTO7ETD/zADw/8wA8N0iANC7RACwu0
+QAuJndgJDdIgDQqogAoKqIAKCIzACAd4gAcHeIAHBmmQBg/8wA8N0iANC7RACw3SIA0LtEALiZ3Y
+CQiMwAiJndgJCIzACAd+4AcHfuAHwSwpBwqogAoIjMAIB3iABwiMwAgHeIAHBmmQBrCy1QUGaZAG
+sLLVBQVUQAUFVEAF1h3GBEADgAbACQANgBMAGkAdgCCABgANgBMAGgAnADSAOgBBwAmAE0AdACeA
+OgBOwFeAYZkDMwfZCnMOphXmHIAgGSQzB3MOphXmHFkrzDkAQTNI2QqmFYAgWSsAQaZWgGFZbDAA
+AAA2AAAADAAAABIAAAAYAAAAJAAAAAYAAAAJAAAAAAAAAAAAAAAYIBQUDg4UFAUGAQIDBAAAAAEB
+AgECAgMEDAwIBAwEBEAAAACAAAAAAAEAAAACAABAAAAAAAQAAEAAAABAAAAAEBESExQVFhcYGRob
+HB0eHyAhIiMkJSYnKCkqKywtLi9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXF1eX2BhYmNk
+ZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/MxMAAAAHBw8HDw8XLQAPIADwYQAAAAAAAAAAAAAB
+AgQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAADA5OjUyOjE5AAAAAE8usABqsKKwkrBjAAGtrXsArZOcra1gAAkAAAACAAAAAAAA
+AAAAAAAJAAAAAgAAAAAAAAAAAAAACQAAAAMAAAABAAAACQAAAAkAAAACAAAAAgAAAAkAAAABAgEC
+AwQAAAUGBwgJCgAAAAUGAAIEAAUAAAAAAAUHAQMEAAUBAAAAQCNAJSEhISFAQEBAQAUEBAEBQEBA
+QAUFQEAMDEANDAwBAQEFQEAFBQAEAARAQAAEQEBABUBAQEBABUBAQAUFBQEBAQFABQUFAQUBAUAF
+BQVABUAFBQUFBQQAAAAcEQAAHDIAABwzAAAEAAAAHBUAAAIAFwBsAHAEdAh0DAAEBAYAAAAAAAAA
+AGQAAAAAkAEACgAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAQAAABAAAAAAAAAA
+AQAAAAEAAAAAAAAA/wAAAP8AAAAAAAAAAAAAALx8AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAEAAAAFAAAAAAQAAGQAAABQgwEAWIMBAGCDAQC4gwEAwIMBAMiDAQAHBwcHBwcH
+BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcGBgYGBgUF
+BQUFBAQEBAQDAwMDAwICAgICAQEBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAolQ8BOfJgABxctYDQAAAAEDgkdLTcAAAQOCR0sOwABEAAB
+AAAAAoAAAUIGAhAAAiAAAAPAAAFDBgMQAALAAAADwAABQwYEEAACQAAAAoAAAUQGBREAAEAAAAPA
+AAFFBgYRAADgAAADwAABRQYHEQABAAAAAoAAAUYGCBEAAiAAAAPAAAFHBgkRAALAAAADwAABRwYK
+EQACQAAAAoAAAUgGCxIAAEAAAAPAAAFJBgwSAADgAAADwAABSQYNEgABAAAAAoAAAUoGDhIAAgAA
+AAKAAAFMBgAAIhYAAIAAAAMAAAFZACQWAAEAAAADAAABWgAmFgACAAAABAAAAVoAKBYAAgAAAAMA
+AAFbACoWAAKAAAADAAABXAAsFwAAAAAABAAAAVwALhcAAIAAAAMAAAFdADAXAAEAAAADAAABXgA0
+FwACAAAAAwAAAV8ANhcAAoAAAAMAAAFgADgYAAAAAAAEAAABYAA8GAABAAAAAwAAAWIAPhgAAgAA
+AAQAAAFiAEAYAAIAAAADAAABYwBkGwACAAAAAwAAAW8BZhsAAoAAAAMAAAFwAWgcAAAAAAAEAAAB
+cAFsHAABAAAAAwAAAXIBbhwAAgAAAAQAAAFyAXAcAAIAAAADAAABcwJ0HQAAAAAABAAAAXQCdh0A
+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
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgIIAPAABAAGkgAABpIEAAaSAAAGkgQAAgIIAPAADo
+AGkgAABpIEAAaSAAAGkgQAAgIIAPAABkBmkgAABpIEAAaSAAAEogAABKIQAASiIAAEojAABKJAAA
+SiUAAEomAABKJwAASiAAEEohABBKIgAQSiMAEEokABBKJQAQSiYAEEonABBKIAAgSiEAIEoiACBK
+IwAgSiQAIEolACBKJgAgSicAIEogADBKIQAwCiSAP4EAAEBBLJwwQCycMEIkHDQKIoA/gAA4cwoj
+ADfmDwAASiYAcGkgQABKJgBwSiYAcEomAHBKJgBwABYAcIAAZARAeCAgQIcAAAAAAAAAAAAA4cDh
+weHCz3CgAMgfFhABhs9ygACYhyCiEhABhiGiExABhiKiFBABhiOiFRABhiSiJBABhiaiz3GfALj/
+VqGKIf8PEhhYgBMYWIAUGFiAFRhYgCQYWIDBwsHBwcAgIECHDMjPcqAAyB8OGhiADcgPGhiADsgQ
+GhiADxIBNgHIJHgRGhiAEMgtGhiA4H7hxPwcyL78HEi+4cDhweHC4cP8HAix/BxIsfwciLH8HMix
+/BwIsvwcSLL8HIiy/BzIsvwcCL9qJIAQ4cRqJMAQ4cTxwM9woADQGxSAz3GAAGAEBCCAj89RBOEA
+oQryLykBAM9wgAA0D/AgQABAeNr/0cDBxGskwBDBxGskgBDBxJ90BBQLNAQUCjQEFAk0BBQINAQU
+BzQEFAY0BBQFNAQUBDTBw8HCwcHBwMHERSx+EAomQH7BxGskgBTBxCAgQIcMyIe4DBoYMA3Im7gN
+GhgwDsgOGhgwD8iHuA8aGDAQyBAaGDDgfuB48cAMyJW4DBoYMA3Im7gNGhgwD8iKuI24kLgPGhgw
+z3CAAGwQGIgbCFEAD8jPcQAAiAysuA8aGDA+DiAAD9hn2IYKIAGKIQYK0cDgfvHAz3CAALy1AICG
+IP6BCfQPyAUggA8AAADUDxoYMKH/iiBVBVYKIAGKIUYO6PHgeM9xAwBADc9woACoIC2gz3GAAIwE
+QIEBagChz3CgADguBYAEIIAPwAAAAB0IgA/AAAAASNjPcZ8AuP8aoVuhadgYuBmhz3CAAMgJJYAj
+gSCBx3EAAIgT5QLACeB4z3CAAMgJeQLACeB48cBuCwABz3eAAGAEiHUG6A0IUQAB2APwANgLrwXp
+DwlRAAHYAvAA2AqvBuoNClEAAdgD8ADYDK8A2M92oADIHxgeGJALj4ohEAAO6AiPDOjPcAMAQA1F
+HhgQMKYC2BgeGJAD8DGmCo8Y6AmPFujPcAIApkEgHhiQz3CAACgAIR4YkM9wgABcBCIeGJAYFgCW
+RSAAAxgeGJAMjwjoGBYAloUgAQQYHhiQDwtRABgWAJaIuBgeGJDPcIAAMHwAkI7gzCCiggb0GBYA
+loC4GB4YkBjtANiUuM91gACABAClcdgGuMYMIAH82SCFz3AAAEwctgwgAZ+5GBYAloW4GB4YkNUC
+AAHPcaqqu7vPcJ8AuP82oDagNqA2oM9xoADIOw6BiLgOoWkgQAD+8eB48cClwUHAQsEMHAAxEBxA
+Mc9xgAB8dDQZwA8wGQAPLBnADigZgA4kGUAOz3CAAHx0IBhAC89wgAB8dBwYAAvPcIAAfHQYGMAK
+z3CAAHx0FBiACs9wgAB8dBAYwAjPcIAAfHQMGIAIz3CAAHx0CBhACM9xgAAAdIAZAAh8GcAHeBmA
+B3QZQAdwGQAHbBkAB2gZgAZkGUAGYBkABlwZwAVYGYAFVBlABVAZAAVMGcAESBmABEQZQARAGQAE
+76HOoa2hjKEsGcACKBmAAiQZQAIgGQACHBnAARgZgAEUGUABEBkAAWOhaiAAA9gZAABqIMAC1BkA
+AGoggALQGQAAaiBAAcgZAABqIAABxBkAAGogwADAGQAAaiCAALwZAABqIEAAuBkAAGogAAC0GQAA
+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
+GYYUHQARDKWgFgAQZKUNpaQWABAMHUASDqWoFgAQCB2AEg+lz3ABALAJEKUuCWAAKNgRpSYJYAAA
+2BKlUyfAdROlAshUHQAXFqUSFgCWUB0AFxelExYAls9ygAAQERilFBYAlkokQHkZpRUWAJYA2Rql
+JBYAlhulFhYAlhylz3CAAOANEIAdpc9wgAAQEXgYgArPcIAAEBF8GMAKz3CAAIwRBBgAC4QaQAvP
+cKAAyBwIgIgaAADPcIAAgAUAgIwaAACoIIAC8CJDAM9wnwC4/wHhdqCZAAAA/ByItvwcSLb8HAi2
+/BzItfwciLX8HEi1/BwItfwcyLT8HIi0/BxItPwcCLT8HMiz/ByIs/wcSLPgfuB4BNw43TXw4HgE
+3DTdM/DgeATcMN0x8OB4BNws3S/w4HgE3CjdLfDgeATcJN0r8OB4BNwg3Snw4HgE3BzdJ/DgeATc
+GN0l8OB4BNwU3SPw4HgE3BDdIfDgeATcDN0f8OB4BNwI3Rzw4HgE3ATdGfA0FBowMBQZMCwUGDAo
+FBcwJBQWMCAUFTAcFBQwGBQTMBQUEjAQFBEwDBQQMALHAcawJE0zsCQfM+B+8cDPcYAA4A0QoeB4
+4HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeNHA4H7geOHF4cZA
+KQ0CJX1ALQMUpXslCjQCCHVTJX6QBvIBHVIQYbr78UEqjgDBukImTpAEHdAQ/fUJ6i8kiXDgeKgg
+QAEBHVIQ4HjBxuB/wcUocgDZ2PHgePHAsg7P/6HBCHfPdqAArC8ZhgQggA9wAAAA13AgAAAAAdjA
+eC8mB/AodRpyE/SKIEkG+gzv/4ohTQQ5hu4M7/+KIAkGiiAJBuIM7/+pcQDYJPARzAAcRDNPIMED
+AeAQeAQggA8AAP+/j7gCHEQwERocMN4JoA9AJwASB+cEJ48fAAD8/wUnABSduJ+47HEAoQDB7HAg
+oAHYfQbv/6HA4HgiuQbw7HJgogTgYbn5CbWAYIAA2c9woADUC22gz3CgAEQdNaDgfuB48cDyDc//
+CHYodShwSHFocsr/geDKIIEDwA/h/8ohQQM9Bs//4cXPcoAAsASkis9ynwC4/wXtz3PQuv7KfqIa
+ojuiDu3PcKAAOC4FgAQggA/AAAAA8QiAj8AAAABp2Bi4GaLgf8HF4HjxwIYNz/8Id89xgACwBAWJ
+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
+HgLPcIAAAGAyIEACDwiSAM9wpgDo/w2AA/AA2AamBaYA2EokgHAG2o26qCBAAynbErvwI48AQCYD
+HxV7AeLgowHgAJE4HgARVSZBFBq2z3CAAGCXBgyv/gjaGxUAls9xpQDYyxmmHBUAlhqmHRUAlhum
+DoEcpg+BHaYmFQCWHqbPcKQAkH8cgAUHb/4fpuB48cCGDm/+ANvPcaAAyB9AEQAGz3egANAPGRcA
+ls9yoADEJ08SDoa4gc9wgAD4tKigEczPdYAAFJELDgAQH4ULCJ4AAd4E8BEanDNodlISEIYVEhOG
+G9gWGhiAEQvfIFEgQKBKIgAgB/QdhQHeWnaEuB2lDQseIVQVgBAE6ADYBvAdhYW4HaUB2DpwTCIA
+oMwhIaBY8s9ynwC4/1gaAAgQh89wgADAEA+IFqIA2s9woAD8RJ66QaBloB6FsLgepagVABBk4B6h
+ENgOoQHYFRkYgLYJr/4J2BcIX0fPcYAA4A0LgQHgUg9gAguhvgpAAhsJECDPcYAARH0FgQHgegtg
+AgWhOQIAAM91gAAUkccKECAdhYS4HaXPcIAARH0RC94gIoAB4SKgiiCFCQfwIYAB4SGgiiDFCNYL
+T/7aDkACS/BCEgCGBCC+jwDAAABD8gG1HoV7CN4EiiCEDrILb/6KIRADJgiABwCVhiD8AIwgAoAx
+9IoOQAev6APYEh8YkOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB4
+4HjgeOB44HjgeOB44HjgeOB44HgSHxiQE8wRGhwwBfAAla4LoAg0lawVARAI6ZcVgBAAqQDYrB0A
+EFQVgBAh6M92oAD8JTSGAdrPc4AARH0GgzhgBqMF6c9xgACZCUCpU4Yng1lhJ6M+hQHenwgQAJsJ
+3gEB2c9wgACEBSCgRfAhCB4gAdnPcIAAmQkgqM9xgABEfQOBAeADoT6F6/ED2c9woADUCzGg4Hjg
+eOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB44HjgeOB4
+4HjgeDGgE8wRGhwwGQoRIB2Fz3GAAER9grgdpQSBAeAEoQHeHoUXCB4ElRWAEKQVARCpcg4P4AIB
+2wPwdgpAAx+FDwgeAM9wgADgl44OgATPd4AACJ0ZhwbougoABADYGaeGCUACz3CAAGwQCIAjCN4C
+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
+HgmgAItxgsZqcBYJoADJcUpwDgmgAITBqXAGCaAAhsGIxelw+gigAKlxKnDyCKAAisEKcOoIoACM
+walwisFOCaAAkMKLcMlxQgmgAJLCyXCEwToJoACUwobAqXEuCaAAlsKYxpDAksHCCKAAyXKax5TA
+lsG2CKAA6XLJcOlxDgmgAJzCnMCeweIIoACOwp/FhgigAARtjsCWCaAAJG23CBAAhsCKwaYIoABA
+JQITi3CEwZoIoABAJQIVlMBAJQETagigAMlykMBAJQEVXgigAOlyyXDpcbYIoACcwozAnMFKCKAA
+yXLCCKAAyXDJcI7BegigAEAlAheSwEAlARMuCKAAyXKWwEAlARUiCKAA6XLJcOlxdgigAJzCjMCc
+wQ4IoADJcslwjsFCCKAAQCUCGTYIoABAJQAXz3GAAPwHGKEmCKAAQCUAGc9xgAD8BxmhB/AA2c9w
+gAD8BzigOaCZAi/ygCQCOuB48cBSCi/yCtqqwQh2dg8v8otxBtguCmAAAcEI2CYKYAABwQnYHgpg
+AAHBEBQEMMlwAMECwgolgA+t3u++og1gAAPDyXBd/38I0ADPdYAA/AcchRgUBDASpR2FAMEKJYAP
+rd7vvgLCFaXJcHYNYAAFw8lwUv9PCNAAHIUgFAQwE6UdhQDBCiWAD63e774CwhalyXBODWAAB8PJ
+cEj/JwjQAHyFdBUGEMlwVBUEEFgVBRB0pSQUBzAyhVwdgBFThW3/ANj9AS/yqsDxwG4JL/IM2Lpx
+OnLPd4AA/AeEFxMQfBcQEADdmnDPcIAADE3wIFIDanDSC6/6SnECcBN4xguv+oohDwoIdogXABC6
+C6/6SnGAFwEQOGATeKoLr/qKIQ8KumVUekAtwSA2eVlhx3GAAEywDQkRIMSpBakJ8AsJUSDGqQep
+A/DIqQmpQiRAIJkIdYAB5TEBL/IA2OB48cDKCA/yp8G6cADfRsdKJ8AgSiSAIUojwCRKIIA1z3aA
+APwH66bpcVp3gOHKIoEvAAAI0sojISXKIOE1yifhJMokoSWB4coigS8AAAnSyiMhJcog4TXKJ2El
+yiQhJoLhyiKBLwAACtIT2cojQSDKIKEFyiABMMokASDKJ0EgANkH2EXAz3WAABxMNX0AhdpxAdmO
+4MIhTgAqpoDhyiHBJcohwiSA4cogASXKIAImogtAAM9xgAA4TMlwA9oKCmAAAtsKhiuGCtqt/s9w
+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
+AQQOGkQBTCWAhMohwg/KIsIHyiBiAcojgg8AAHMA6ANi78okIgAA2gfwABYAQRQhjAAAtAHiLyBC
+AfMKAoBSCo/w0cDgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB4z3CAADwJ
+4H8AgOB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7g
+eOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB4
+4H7geOB+4HjgfuB44H7geOB+4HjgfuB44H8B2OB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4Hjg
+fuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjgfwHY8cDPcIAA
+RL56Ca/wA9kyCY/w0cDgfuB4AtjPcaAAwB0NoSHYBqEB2Aeh4H4A2c9woADAHSegJqAtoOB+z3GA
+AEQJDQhRAAHYAKkBqQCJgeDKIIEPAADECcoggg8AAIAA4H8BoQDYz3KAAEQJAaoAqs9xgAAwfAaJ
+COgHiQboAJEJCJEDAdgAqgDY2vHxwOHFCHXPcIAAwBABiCsIUQAH8IIIT+8KDW/wT9jPcKAA1AsY
+gADZQiAACIDgyiBMAOUIRIOtBE/w4HjgfuB44H7geOB+4HjgfuB44H7geOB+4HjxwAohwA/rcgXY
+JttKJAAAxQFv7wolAAHxwAohwA/rcgXYK9tKJAAArQFv7wolAAHPcAIAKBvPcYAATAkAoc9wAgAk
+GwGhz3ACACwbAqHPcAIAMBvgfwOhz3ACAKgaz3GAAEwJAKEBoQKhz3ACAKwa4H8DoeB+4HjgfuB4
+4H7geOB+4HjxwJYLb/Bq2KLBi3EB2sII4ABIc43oCiHAD+tyBdiKI88LiiSBCi0Bb+9KJQAAgcFE
+2AHamgjgAEhzjugKIcAP63IF2IojzwyKJAEBBQFv70olAAAEFAAxXwiCDwAAMgRAJIEwa9gB2mYI
+4ABIc47oCiHAD+tyBdiKI88PiiTBCtEAb+9KJQAAAhQAMc92gABcCRt4QSjFAEwlAIoEHkAR0fYK
+IcAP63IF2Ioj0AClAG/viiTBCh3Yz3aAAFwJAaa4cAAUADHPdYAAXL5ALYIAqXH+D6AAAduN6AAU
+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
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAMAAADImoAAAAAAAAAAAABAn4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAD/
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiKSAAOSZAQAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AQAAAAAA
+AAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAEBAQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAABAAIAAAAAAAAABwAAAAcAAAAHAAAAAgAAAAIAAACDAAAAkgAAAOgA
+AAD3AAAATgEAAF0BAAAAAAEAAgAAAAYACAAJAAAABwAAAAAAAAACAAAAAgAAAIMAAACSAAAA6AAA
+APcAAABOAQAAXQEAAAAAAQACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQACAAAAgwAAAJIAAADo
+AAAA9wAAAE4BAABdAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAQACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMiagAD8/wEAAAAAAMiagACgBgIAAAAAAAAAAADI
+moAAOAgCAAAAAAAAAAAAAAAAAMiagAAAAAAAAAAAAAEADwBkAAEAHAmAAAAAAAAAAAAABwAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAKgaAgCoGgIAqBoCAKwaAgAAAAAAHQAA
+AAAAAAAAAAAAAAAAAAAAAAB/fwABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIECAAIECAAAAAA
+AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs
+CAAAFQAAAAwvgACAKgAAgCoAAIAqAAC8QAAAgCoAAIAqAABAPAAAgCoAAIAqAACAKgAAgCoAAIAq
+AACAKgAAgCoAAIAqAACAKgAAIB4AAMgfAADgHwAATCEAAMwhAABQIQAAgCoAAIAqAAAETQAAxE4A
+AKxPAACAKgAAgCoAAIAqAACISwAA7GEAAOhhAABAYgAAgCoAAIAqAACAKgAAyEIAAIAqAAAkYgAA
+gCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAADAQAAAgCoAAIAqAACAKgAAgCoAAIAqAACA
+KgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAq
+AACAKgAAgCoAAIAqAAC0QwAAgCoAAIAqAACAKgAAgCoAAIAqAACYRAAAgCoAAIAqAACAKgAAgCoA
+AIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAAAYaQAAgCoAADxqAACAKgAAgCoAAIAqAACAKgAA
+gCoAAIAqAACAKgAAgCoAANRsAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACA
+KgAAgCoAAAh/AQBYggEAgCoAAKSEAQCAKgAAUIYBAHRTAQCAKgAAgCoAAHBQAACAKgAAgCoAAIAq
+AACAKgAAgCoAAID4AQDU+AEAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoA
+AIAqAABodAAAgCoAAIAqAACAKgAAWP4BAIAqAABAAgIAgCoAACgpAgCAKgAA8CQAAPQkAACAKgAA
+gCoAANAZAgAodwAAgCoAAIAqAACAKgAADPwBAIAqAACAKgAA3EwBALCdAQCAKgAAgCoAAIAqAAB4
+pgEAkFQBAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAGypAQCAKgAAyBgCAMwYAgDYGAIA3BgCANAY
+AgDUGAIA4BgCAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAGBSAACAKgAAgCoA
+AIAqAACAKgAAgCoAABwYAgBsGAIArEYAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAA
+gCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACA
+KgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAqAACAKgAAgCoAAIAq
+AAAkSAAArEgAADxJAADwSQAA3IUAAMhJAACAKgAAgCoAAIAqAACAKgAAgCoAABxIAAAgSAAAgCoA
+AIAqAACgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAMAABgDAAAYAwA
+AGAMAABgDAAAYAwAAGAMAABgDAAAYAwAAGAMAABgDAAAYAwAAGAMAABgDAAAYAwAAGAMAABgDAAA
+YAwAAGAMAABgDAAAYAwAAGAMAABgDAAAYAwAAGAMAABgDAAAYAwAAGAMAABgDAAAYAwAAGAMAACQ
+DQAAAAAAAORZAQBgDAAAhAkAAGAMAABgDAAAYAwAALQJAADMPAEA/IcAAGAMAABgDAAA6AkAAOgJ
+AADoCQAA6AkAAOgJAADoCQAA6AkAAGAMAABgDAAAYAwAAGAMAADQCwAAYAwAAGAMAABgDAAAYAwA
+AGAMAACUDQAAYAwAAGAMAABoCQAAAwAAAOQMAgACAAAAyGcBAAQAAAB4aAEABQAAALANAAAGAAAA
+NDMAAAgAAABIGAIAEwAAAGT5AQAJAAAA3AMCAAoAAADkGAIADgAAAMyaAQAPAAAAfIgBABAAAAC0
+iAEAGAAAAExZAQANAAAATIABABcAAAAkdwAAEQAAAFCGAAASAAAA5EsBAAEAAADc/QEAFAAAALin
+AQAVAAAA4J0BAAcAAABEbQAAFgAAABgpAgAZAAAAkA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAACAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAEAAAAAEAAAABAQAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAA4QMOHuHhAw4e4eEDDh7h4QMOHuHhAw4e4eEDDh7h4QMOHuHhAw4e4eEDDh7h4QMOHuHhAw4e
+4eEDDh7hPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwVFRUVPDw8PBUVFRU8PDw8AAAA
+AAAAAAAAAAAAAAAAADw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8FRUVFTw8PDwVFRUV
+PDw8PAAAAAAAAAAAAAAAAAAAAAA8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PBUVFRU8
+PDw8FRUVFTw8PDwAAAAAAAAAAAAAAAAAAAAAkAYAADH6rwCQBgAAMfqvAJAGAAAx+q8AkAYAADH6
+rwCQBgAAMfqvAJAGAAAx+q8AkAYAADH6rwCQBgAAMfqvAEMFAAAx+q8AQwUAADH6rwBDBQAAMfqv
+AEMFAAAx+q8AQwUAADH6rwBDBQAAMfqvAEMFAAAx+q8AQwUAADH6rwAAAAAA3sMJAAAAAAAAAAAA
+AAAAAIwrAQABAAAAzC6AAAAAAAAAAAAAAgAAAAMAAAAAAAAACAAAAAAAAAAwjBEAIL8CAAAAAAD8
+KwEAoCwBAKQtAQBMLwEApC0BAEwvAQD8MAEAhDEBAOQxAQCAgICAgICAgAGAAoCAgICAAAAAALQ3
+AQC0NwEAAAAAAAAAAAAAAAAAAAAAALQ3AQC0NwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AMwugADMLoAApCCgADggoAABAAAA/P///wAAAAAAAAAA7C6AAOwugACoIKAAPCCgAAgAAADz////
+AAAAAAAAAAAML4AADC+AAKwgoABsIKAAMAAAAM////8AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAA
+AAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAA8EwBAAUAAAAML4AAKFIBAAD/AwBIUgEAAP8FACxT
+AQAA/y0AUFMBAAD/PQAIUwEAAP8EAOxSAQAA/yUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAACUWAEABgAAAMwugAAAAAAALAEAAF4BAAABAAAAAQAAAAEAAAABAAAAAwAAAAAAAAAA
+AAAAxF8BAMBgAQA4YQEAWFwBAIhbAQBkYgEA6GIBACxjAQB8YwEAAAAAAAMAAAACAAAAAwAAAAMA
+AAADAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAARGkBAAoAAADMLoAAAAAAAAAAAAAAAAAA0GkB
+AAoAAADMLoAAAAAAAAAAAAAAAAAAhGoBAAoAAADMLoAAAAAAAAAAAAAAAAAApGsBAAoAAADMLoAA
+AAAAAAAAAAAAAAAACGoBAAoAAADMLoAAAAAAAAAAAAAAAAAAHGsBAAoAAADMLoAAAAAAABAAAAAA
+gAAAAACgABAnAADoAwAA6AMAAAAAAAAAAAAAAAAAAMg+AQAKAAAAzC6AAAAAAAAAAAAAAAAAAMg+
+AQAKAAAAzC6AAAAAAAAAAAAAAAAAAMg+AQAKAAAAzC6AAAAAAAAAAAAAAAAAAMg+AQAKAAAAzC6A
+AAAAAAAAAAAAAAAAAMg+AQAKAAAAzC6AAAAAAAAAAAAAAAAAAMg+AQAKAAAAzC6AAAAAAAAAAAAA
+AAAAAMg+AQAKAAAAzC6AAAAAAAAAAAAAAAAAAMg+AQAKAAAAzC6AAAAAAAAAAAAAAAAAAMg+AQAK
+AAAAzC6AAAAAAAAAAAAAAAAAAMg+AQAKAAAAzC6AAAAAAAAAAAAAAAAAAMg+AQAKAAAAzC6AAAAA
+AAAAAAAAAAAAAMg+AQAKAAAAzC6AAAAAAAAAAAAAAAAAADCEAQAKAAAAzC6AAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMiwEAkIwBAGCPAQAMkgEAhJQBAOiXAQA0jgEARAWA
+AJCagAAYAAAAUJqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdJoBAAYAAADMLoAA/////wAAAAD/////
+/////wAAAAAAAAAAAAAAAECdAQAFAAAADC+AAG4AbgBpAMAAoABQAIAAvgBQAX0APgBuAG4AaQDA
+AKAAUACAAL4AUAF9AD4AAAAAAAEBAAAAAAAAAAECAQEAAgEAAQICAgABAQACAQIBAgACAAECA///
+AAC5Ad8AsQAbABYBGwB8ARsArwAbABQBGwB6ARsAbACgANEAoAA3AaAAbwCDAHEAgwB2AIMAcwAz
+AG4AMwBwADMAcgAzANcAMwA9ATMA1AEGANABAAB+ADwA4wA8AEkBPAB4AEkA3QBJAEMBSQB/AFoA
+5ABaAEoBWgCqAD8AqwABAA8BPwAQAQEAdQE/AHYBAQB5AGoA3gBqAEQBagCoAAAADQEAAHMBAACm
+ADcApwABAAsBNwAMAQEAcQE3AHIBAQAEAAgAnAHMAJ0BzACeAcwAnwHMANUBzADWAcwA1wHMALQA
+RwAZAUcAgAFHAJAAIgD1ACIAWwEiAKEAiAAGAYgAbAGIAJQAAACVAAAAmADAAJkAoACWAJAAlwAA
+AJQAAQCVAAEAmADAAJkAoACWAJAAlwAAAJQAAgCVAAMAmADAAJkAoACWAJAAlwAAAJQAAwCVAAcA
+mADAAJkAoACWAJAAlwAAAPoAAAD5AAAAAgGQAAMB0wAAAYMA/gATAPwAMwD9AHcA+gABAPkAAQAC
+AZAAAwHTAAABgwD+ABMA/AAzAP0AdwD6AAIA+QADAAIBkAADAdMAAAGDAP4AEwD8ADMA/QB3APoA
+AwD5AAcAAgGSAAMB0wAAAYMA/gATAPwAMwD9AHcAXwEAAGEBAABoAZAAaQHTAGYBgwBkARMAYgEz
+AGMBdwBfAQEAYQEBAGgBkABpAdMAZgGDAGQBEwBiATMAYwF3AF8BAgBhAQMAaAGQAGkB0wBmAYMA
+ZAETAGIBMwBjAXcAXwEDAGEBBwBoAZAAaQHTAGYBgwBkARMAYgEzAGMBdwCFAAAAhgAAAIcAUACI
+AAAAiQCgAIoAAACLANAAjAAAAIUAAQCGAAEAhwBQAIgAAACJAKAAigAAAIsA0ACMAAAAhQACAIYA
+AwCHAFAAiAAAAIkAoACKAAAAiwDQAIwAAACFAAMAhgAHAIcAUACIAAAAiQCgAIoAAACLANAAjAAA
+AOsAAADqAAAA7ABQAO0AAADuAKAA7wAAAPAA0ADxAAAA6wABAOoAAQDsAFAA7QAAAO4AoADvAAAA
+8ADQAPEAAADrAAIA6gADAOwAUADtAAAA7gCgAO8AAADwANAA8QAAAOsAAwDqAAcA7ABQAO0AAADu
+AKAA7wAAAPAA0ADxAAAAUQEAAFABAABSAVAAUwEAAFQBoABVAQAAVgHQAFcBAABRAQEAUAEBAFIB
+UABTAQAAVAGgAFUBAABWAdAAVwEAAFEBAgBQAQMAUgFQAFMBAABUAaAAVQEAAFYB0ABXAQAAUQED
+AFABBwBSAVAAUwEAAFQBoABVAQAAVgHQAFcBAAD7/wAA//8AALkB3wCxABsAFgEbAHwBGwCvABsA
+FAEbAHoBGwBsAKAA0QCgADcBoABvAIMAcQCDAHYAgwBzADMAbgAzAHAAMwByADMA1wAzAD0BMwDU
+AQYA0AEAAH4APADjADwASQE8AHgASQDdAEkAQwFJAH8AWgDkAFoASgFaAKoAPwCrAAEADwE/ABAB
+AQB1AT8AdgEBAHkAagDeAGoARAFqAKgAAAANAQAAcwEAAKYANwCnAAEACwE3AAwBAQBxATcAcgEB
+AAQACACcAcwAnQHMAJ4BzACfAYgA1QHMANYBzADXAcwAtABHABkBRwCAAUcAkAAiAPUAIgBbASIA
+oQCIAAYBiABsAYgA+gAAAPkAAAACAZcAAwHQAAABjQD+ABEA/AAzAP0AdwD6AAEA+QABAAIBlwAD
+AdAAAAGNAP4AEQD8ADMA/QB3APoAAgD5AAMAAgGXAAMB0AAAAY0A/gARAPwAMwD9AHcA+gADAPkA
+BwACAZcAAwHQAAABjQD+ABEA/AAzAP0AdwBfAQAAYQEAAGgBlwBpAdAAZgGNAGQBEQBiATMAYwF3
+AF8BAQBhAQEAaAGXAGkB0ABmAY0AZAERAGIBMwBjAXcAXwECAGEBAwBoAZcAaQHQAGYBjQBkAREA
+YgEzAGMBdwBfAQMAYQEHAGgBlwBpAdAAZgGNAGQBEQBiATMAYwF3AOsAAADqAAAA7ABVAO0AAADu
+AKoA7wAAAPAA3QDxAAAA6wABAOoAAQDsAFUA7QAAAO4AqgDvAAAA8ADdAPEAAADrAAIA6gADAOwA
+VQDtAAAA7gCqAO8AAADwAN0A8QAAAOsAAwDqAAcA7ABVAO0AAADuAKoA7wAAAPAA3QDxAAAAUQEA
+AFABAABSAVUAUwEAAFQBqgBVAQAAVgHdAFcBAABRAQEAUAEBAFIBVQBTAQAAVAGqAFUBAABWAd0A
+VwEAAFEBAgBQAQMAUgFVAFMBAABUAaoAVQEAAFYB3QBXAQAAUQEDAFABBwBSAVUAUwEAAFQBqgBV
+AQAAVgHdAFcBAAD7/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3KgB
+AJDJAQCwpYAAQAUAAAAAAADcqAEA/KkBAPCqgAD4AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+XM4BAGjMAQDorIAAVAAAAAAAAADcqAEAlMwBAGitgABQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+AAAA3KgBALDIAQC8P4AAUAEAAAAAAADcqAEAyMoBAPgGgAACAAAAAAAAANyoAQAgywEA/AaAAAQA
+AAAAAAAAWM4BAPypAQA8rYAAKgAAAAAAAADcqAEAvMsBAAAAAAAAAAAAAAAAANyoAQB8ywEAAAeA
+AAQAAAAAAAAAAAAAAAAAAAABAAIAAgADAAQABAAFAAYABgAHAAgACAAJAAoACgALAAwADAANAA4A
+DgAPACYAJwAoACgAKQAqAEYARgBHAEgASABJAEoASgBLAEwAaABpAGoAagBrAGwAbABtAG4AbgBv
+AHAAcABxAHIAcgBzAHQAdAB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AHUAdQB1AA8A
+PwAAAAAAAAAAAAAAAAAAAAEAAgACAAMABAAEAAUABgAGAAcACAAIAAkACgAKAAsAJAAkACUAJgAm
+ACcARABEAEUARgBGAEcASABIAEkASgBKAEsATABMAE0AagBqAGsAbABsAG0AbgBuAG8AcABwAHEA
+cgByAHMAdAB0AHUAdgB2AHYAdgB2AHYAdgB2AHYAdgB2AHYAdgB2AHYAdgB2AHYAdgB2AA4APwDE
+owEAEtIAAAAAAAD//w8A6LcBALYAAAAAAAAA/wAAAOi3AQC3AAAAAAAAAP8AAADotwEAuAAAAAAA
+AAD/AAAA6LcBALkAAAAAAAAA/wAAAOi3AQC6AAAAAAAAAP8AAADotwEAuwAAAAAAAAD/AAAA6LcB
+AL0AAAAAAAAA/wAAAOi3AQC+AAAAAAAAAP8AAADotwEAvwAAAAAAAAD/AAAA6LcBAMAAAAAAAAAA
+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
+ENIC0gHSA9Ib0gvSAIAF0hLSE9IU0gRDCNIJ0grSHNIG0gfScNIAAAEAAAAAAAAAAAAAAAAAAAAD
+AAAABAAAAAMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAD/AwAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAALUAGgGBAQQADwCDAOgATgGSAPcAXQEGAAgACQAKAAsADAAFAAAAAAAAACwAAQAA
+AAAAAAAAAAAAAAAAAAAAAAABAAEAAQAAAP////8AAAAALQEAAN0BAABaAgAAugIAAAoDAABNAwAA
+hwMAALoDAADoAwAAEQQAADcEAABZBAAAegQAAJgEAAC0BAAAzgQAAOcEAAD+BAAAFQUAACoFAAA+
+BQAAUQUAAGQFAAB1BQAAhgUAAJcFAACnBQAAtgUAAMUFAADTBQAA4QUAAO4FAAD7BQAACAYAABQG
+AAAgBgAAKwYAADcGAABCBgAATAYAAFcGAABhBgAAawYAAHUGAAB+BgAAiAYAAJEGAACaBgAAogYA
+AKsGAAC0BgAAvAYAAMQGAADMBgAA1AYAANsGAADjBgAA6gYAAPIGAAD5BgAAAAcAAAcHAAAOBwAA
+FAcAABsHAAAiBwAAKAcAAC4HAAA1BwAAOwcAAEEHAABHBwAATQcAAFMHAABYBwAAXgcAAGQHAABp
+BwAAbwcAAHQHAAB5BwAAfwcAAIQHAACJBwAAjgcAAJMHAACYBwAAnQcAAKIHAACnBwAAqwcAALAH
+AAC1BwAAuQcAAL4HAADCBwAAxwcAAMsHAADQBwAA1AcAANgHAADcBwAA4QcAAOUHAADpBwAA7QcA
+APEHAAD1BwAA+QcAAP0HAAABCAAABQgAAAgIAAAMCAAAEAgAABQIAAAXCAAAGwgAAB8IAAAiCAAA
+JggAACkIAAAtCAAAMAgAADQIAAA3CAAAOwgAAD4IAABBCAAARQgAAEgIAABLCAAATwgAAFIIAABV
+CAAAWAgAAFsIAABfCAAAYggAAGUIAABoCAAAawgAAG4IAABxCAAAdAgAAHcIAAB6CAAAfQgAAIAI
+AACCCAAAhQgAAIgIAACLCAAAjggAAJEIAACTCAAAlggAAJkIAAA4AAAAaAAAAHQAAACAAAAAjAAA
+AJ0AAAAHAAAAAAAAAAAAAAAKAAAADdIR0hDSAtIB0gPSG9IL0gCABdIS0hPSFNIEQwjSCdIK0hzS
+BtIH0nDSAAABAAAAAAAAAAAAAAAAAAAAAwAAAAQAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAA
+AAAA/wMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC1ABoBgQEEAA8AgwDoAE4BkgD3AF0B
+BgAIAAkACgALAAwABQAAAAAAAAAsAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAADfAAAAGQEA
+AGIBAAC+AQAAMgIAAMMCAAB7AwAAYgQAAIQFAADyBgAAvggAAAILAAABAAAAAgAAAAAAAAAL0g7S
+DdII0gnSCtIS0hPSFNIR0hDSAtIB0gPSAIAF0gRDG9Ic0gTSAEUw0jHSAAAAAAAAAQAAAAEAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAABwAAAAAAAAADAAAABAAAAAMAAAAAAAAA/wMAAAMA
+AAAAAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAAAAAAAALUAGgGBAQUABAAPABAACgALAAwATgAA
+AAAAAAAAAAAALAABAAAAAQABAAEAAAAAAAAAAAABAAEAAgACAAIAAwADAAQABAAFAAUABgAGAAcA
+BwAIAAgACQAJAAoACgALAAsADAAMAA0ADQAOAA4ADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEQFgACQmoAAGAAAAFCagAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAMz/AQAGAAAAzC6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAARAWAAJCagAAYAAAAUJqAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+6AsCAAQAAADMLoAAAAAAAAAAAAAAAAAAwAoCAAQAAADMLoAAAAAAAAAAAAAAAAAAsAwCAAYAAADM
+LoAAAAAAAAAAAAAAAAAAwAoCAAQAAADMLoAAAAAAAAAAAAAAAAAA6AsCAAQAAADMLoAAAAAAAAAA
+AAAAAAAAwAoCAAQAAADMLoAAAAAAAAAAAAAAAAAA6AsCAAQAAADMLoAAAAAAAAAAAAAAAAAAwAoC
+AAQAAADMLoAAAAAAAAAAAAAAAAAAsAwCAAYAAADMLoAAAAAAAAAAAAAAAAAAwAoCAAQAAADMLoAA
+AAAAAAAAAAAAAAAA6AsCAAQAAADMLoAAAAAAAAAAAAAAAAAAsAwCAAYAAADMLoAAAAAAAAAAAAAA
+AAAA6AsCAAQAAADMLoAAAAAAAAAAAAAAAAAA6AsCAAQAAADMLoAAAAAAAAAAAAAAAAAAsAwCAAYA
+AADMLoAARAWAAJCagAAYAAAAUJqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBAQEBAUGBwgICAgICQoLDA0AAAAFBgcI
+DQ4PEBUWFxgZAAAKDREUCg0RFBkZGRkKCgAAAAAAAAYGBgYJCQkJAAYAAG47aDtiO1w7bjpoOmI6
+XDpuOWg5YjlcOW4raCtiK1wrbipoKmIqXCpuKWgpYilcKW4baBtiG1wbbhpoGmIaXBpuGWgZYhlc
+GW4YaBhiGFwYbhdoF2IXXBduFmgWYhZcFm4VaBViFVwVbhRoFGIUXBRuE2gTYhNcE24SaBJiElwS
+bhFoEWIRXBFuEGgQYhBcEFcQUhBNEEkQbgFoAWIBXAFuAGgAYgBcAG47aDtiO1w7bjpoOmI6XDpu
+OWg5YjlcOW44aDhiOFw4bjdoN2I3XDduKWgpYilcKW4oaChiKFwobidoJ2InXCduGWgZYhlcGW4Y
+aBhiGFwYbhdoF2IXXBduCWgJYglcCW4IaAhiCFwIbgdoB2IHXAduBmgGYgZcBm4FaAViBVwFbgRo
+BGIEXARuA2gDYgNcA24CaAJiAlwCbgFoAWIBXAFuAGgAYgBcAAAAAAAAAAAAAAAAAEArAgAIAAAA
+DC+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////8A
+Af//AgP///8E//////////////////////8F/wb/B/8I/wn/Cv8L/wz///8N////Dv///w////8Q
+//////////////////////////////////////////////8R////Ev///xP///8U////Ff///xb/
+//8X////GP///xn///8a////G/////8c////Hf///x7///8f////IP///yH/////////////////
+/////yIjJP8lJif//yj///8p////////////////////////////////////////////////////
+//////////////////////////8BBAAAAgUBAAMGAgAEBwMABQgEAAYJBQAHCgYACAsHAAkMCAAK
+DQkACw4KAAwPCwANEAwADhENAAFAAAQCQQEEA0ICBARDAwQFRAQEBkUFBAdGBgQIRwcECUgIBLcT
+IgC4FCMAuRUkALsWJQC8FyYAvRgnAMAZKADEGikABxsAAAgcAQALHQIADB4DABAfBAAiIQUAJCIG
+ACYjBwAoJAgAKiUJACwmCgAuJwsAMCgMADQpDQA4Kg4APCsPAEAsEABkLhEAaC8SAGwwEwBwMRQA
+dDIVAHgzFgB8NBcAgDUYAIQ2GQCINxoAjDgbAJE6HACVOx0AmTweAJ09HwChPiAApT8hACRJBgIs
+SgoCNEsNATxMDwFkTREBbE4TAXRPFQF8UBcBhFEZAZVSHQGdUx8BAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAABBgIGBgYDBgYGBgYGBgQAAAAAA8APwABAAAADwA/AAEAAAAPAD8AAQAAAA8APwABAAAADwA/
+AAEAAAAPAD8AAQAAAA8APwACAAAADwA/AAEAAAAAAAAAAQAAAAIAAAADAAAAAAAAAAQAAAACAAAA
+BQAAAA8UGR4oCgUAsAkBpQA8ODQwLCgkIBwYFBAMCAQADAgEADw4NDAsKCQgHBgUEAwIBAIIAA4A
+AAAOAQEAAQIBAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AKXGhPiZ7o32Df+91rHeVJFQYAMCqc59VhnnYrXmTZrsRY+dH0CJh/oV7+uyyY4L++xBZ7P9X+pF
+vyP3U5bkW5vCdRzhrj1qTFpsQX4C9U+DXGj0UTTRCPmT4nOrU2I/KgwIUpVlRl6dKDChNw8KtS8J
+DjYkmxs93ybNaU7Nf5/qGxKeHXRYLjQtNrLc7rT7W/akTXZht859e1I+3XFelxP1pmi5AAAswWBA
+H+PIee22vtRGjdlnS3LelNSY6LBKhWu7KsXlTxbtxYbXmlVmlBHPihDpBgSB/vCgRHi6JeNL86L+
+XcCAigWtP7whSHAE8d9jwXd1r2NCMCAa5Q79bb9MgRQYNSYvw+G+ojXMiDkuV5PyVYL8R3qsyOe6
+KzKV5qDAmBnRnn+jZkR+VKs7gwvKjCnH02s8KHmn4rwdFnatO9tWZE50HhTbkgoMbEjkuF2fbr3v
+Q6bEqDmkMTfTi/Iy1UOLWW632owBZLHSnOBJtNj6rAfzJc+vyo706UcYENVviPBvSnJcJDjxV8dz
+UZcjy3yhnOghPt2W3GGGDYUPkOBCfMRxqszYkAUGAfcSHKPCX2r5rtBpkRdYmSc6uSc42RPrsysz
+IrvScKmJB6czti0iPJIVIMlJh/+qeFB6pY8D+FmACRca2mUx18aEuNDDgrApd1oRHst7/KjWbTos
+AQEBAQEBAQECAgICAgICAgMDAwMDAwMDBAQEBAQEBAQBAgICAgICAwMDAwMDAwMDAwMDAwMEBAQE
+BAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAAAQECAQICA3//Bw8fPwEDAQMPBwEHDx8/f///BQAHAgME
+BgZ00UUX6KKLLg0PBQcJCwEDChQ3blVVVQFLaC8BVVVVBeM4jgOqqqoCcRzHAaqqqgrHcRwHDw8P
+BwYHAgMEBQABCAkLCigAKAAwACwALAAoADwANAAoACgANAAwACwALABEADwAQAA8AIwAbABYAEgA
+9ACwACwALAA8ADQAMAAsAFQARABUAFQAbABgAFwAVACMAHgAOgECAdUA3wDaAKIAdQB/AGoBGgHZ
+AOgACgG6AHkAiACKBSoDOQGoAYoFygLZAEgBygFKAeIA+QDKAeoAggCZAPQCRAK1AdUBlAKEAfUA
+QQKsAJAAhACAAHgAeAB4AHQAZuYAAJ3YiZ1O7MRONEiDNCd2YicapEEaEzuxExEYgREP/MAPTuzE
+Tid2YicapEEaEzuxEw3SIA2JndgJCIzACAd+4Ac0SIM0GqRBGhEYgREN0iANCIzACAZpkAawstUF
+BVRABSd2YicTO7ETDdIgDYmd2AkGaZAGxE7sBARGYAQDP/ADqqqqqhqkQRoTO7ETD/zADxEYgREN
+0iANCqiAChM7sRMP/MAPD/zADw3SIA0LtEALC7RAC4md2AkN0iANCqiACgqogAoIjMAIB3iABwd4
+gAcGaZAGD/zADw3SIA0LtEALDdIgDQu0QAuJndgJCIzACImd2AkIjMAIB37gBwd+4AfBLCkHCqiA
+CgiMwAgHeIAHCIzACAd4gAcGaZAGsLLVBQZpkAawstUFBVRABQVUQAXWHcYEQAOABsAJAA2AEwAa
+QB2AIIAGAA2AEwAaACcANIA6AEHACYATQB0AJ4A6AE7AV4BhmQMzB9kKcw6mFeYcgCAZJDMHcw6m
+FeYcWSvMOQBBM0jZCqYVgCBZKwBBplaAYVlsMAAAADYAAAAMAAAAEgAAABgAAAAkAAAABgAAAAkA
+AAAAAAAAAAAAABggFBQODhQUBQYBAgMEAAAAAQECAQICAwQMDAgEDAQEQAAAAIAAAAAAAQAAAAIA
+AEAAAAAABAAAQAAAAEAAAAAQERITFBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uL0BBQkNERUZH
+SElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn8z
+EwAAAAcHDwcPDxctAA8gAPBhAAAAAAAAAAAAAAECBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDk6NDk6MDkAAAAATi2uAGmu
+oK6QrmIAAaysegCskpusrF8ACQAAAAIAAAAAAAAAAAAAAAkAAAACAAAAAAAAAAAAAAAJAAAAAwAA
+AAEAAAAJAAAACQAAAAIAAAACAAAACQAAAAECAQIDBAAABQYHCAkKAAAABQYAAgQABQAAAAAABQcB
+AwQABQEAAABAI0AlISEhIUBAQEBABQQEAQFAQEBABQVAQAwMQA0MDAEBAQVAQAUFAAQABEBAAARA
+QEAFQEBAQEAFQEBABQUFAQEBAUAFBQUBBQEBQAUFBUAFQAUFBQUFBAAAABwRAAAcMgAAHDMAAAQA
+AAAcFQAAAgAXAGwAcAR0CHQMAAQEBgAAAAAAAAAAZAAAAACQAQAKAAAAAAAAAAAAAAAAAAAA/wAA
+AAAAAAAAAAAAAAAAAAAAAAABAAAAEAAAAAAAAAABAAAAAQAAAAAAAAD/AAAA/wAAAAAAAAAAAAAA
+HHsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAUAAAAABAAAZAAAAIyB
+AQCUgQEAnIEBAPCBAQD4gQEAAIIBAAcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH
+BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwYGBgYGBQUFBQUEBAQEBAMDAwMDAgICAgIBAQEBAQAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACiVDvU56
+lQAHFCdZLgAAAAQOCR0tNwAABA4JHSw7AAEQAAEAAAACgAABQgYCEAACIAAAA8AAAUMGAxAAAsAA
+AAPAAAFDBgQQAAJAAAACgAABRAYFEQAAQAAAA8AAAUUGBhEAAOAAAAPAAAFFBgcRAAEAAAACgAAB
+RgYIEQACIAAAA8AAAUcGCREAAsAAAAPAAAFHBgoRAAJAAAACgAABSAYLEgAAQAAAA8AAAUkGDBIA
+AOAAAAPAAAFJBg0SAAEAAAACgAABSgYOEgACAAAAAoAAAUwGAAAiFgAAgAAAAwAAAVkAJBYAAQAA
+AAMAAAFaACYWAAIAAAAEAAABWgAoFgACAAAAAwAAAVsAKhYAAoAAAAMAAAFcACwXAAAAAAAEAAAB
+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
+AAAAAAUFBQUFBQUFAAAAAIANAAAAIAAAgA0AAIANAAAAIAAAgA0AAAAGAAAABAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAA=
+====
diff --git a/sys/contrib/pf/net/if_pfsync.c b/sys/contrib/pf/net/if_pfsync.c
index 0925edb094b..94661185917 100644
--- a/sys/contrib/pf/net/if_pfsync.c
+++ b/sys/contrib/pf/net/if_pfsync.c
@@ -465,7 +465,7 @@ pfsync_insert_net_state(struct pfsync_state *sp, u_int8_t chksum_flag)
 	st->direction = sp->direction;
 	st->log = sp->log;
 	st->timeout = sp->timeout;
-	st->allow_opts = sp->allow_opts;
+	st->state_flags = sp->state_flags;
 
 	bcopy(sp->id, &st->id, sizeof(st->id));
 	st->creatorid = sp->creatorid;
@@ -1578,7 +1578,7 @@ pfsync_pack_state(u_int8_t action, struct pf_state *st, int flags)
 		sp->proto = st->proto;
 		sp->direction = st->direction;
 		sp->log = st->log;
-		sp->allow_opts = st->allow_opts;
+		sp->state_flags = st->state_flags;
 		sp->timeout = st->timeout;
 
 		if (flags & PFSYNC_FLAG_STALE)
diff --git a/sys/contrib/pf/net/if_pfsync.h b/sys/contrib/pf/net/if_pfsync.h
index f7edca3e400..f306610fb3d 100644
--- a/sys/contrib/pf/net/if_pfsync.h
+++ b/sys/contrib/pf/net/if_pfsync.h
@@ -80,7 +80,7 @@ struct pfsync_state {
 	u_int8_t	 proto;
 	u_int8_t	 direction;
 	u_int8_t	 log;
-	u_int8_t	 allow_opts;
+	u_int8_t	 state_flags;
 	u_int8_t	 timeout;
 	u_int8_t	 sync_flags;
 	u_int8_t	 updates;
diff --git a/sys/contrib/pf/net/pf.c b/sys/contrib/pf/net/pf.c
index e8031ac7dfe..ebe73c2e932 100644
--- a/sys/contrib/pf/net/pf.c
+++ b/sys/contrib/pf/net/pf.c
@@ -253,6 +253,13 @@ int			 pf_test_fragment(struct pf_rule **, int,
 			    struct pfi_kif *, struct mbuf *, void *,
 			    struct pf_pdesc *, struct pf_rule **,
 			    struct pf_ruleset **);
+int			 pf_tcp_track_full(struct pf_state_peer *,
+			    struct pf_state_peer *, struct pf_state **,
+			    struct pfi_kif *, struct mbuf *, int,
+			    struct pf_pdesc *, u_short *, int *);
+int			 pf_tcp_track_sloppy(struct pf_state_peer *,
+			    struct pf_state_peer *, struct pf_state **,
+			    struct pf_pdesc *, u_short *);
 int			 pf_test_state_tcp(struct pf_state **, int,
 			    struct pfi_kif *, struct mbuf *, int,
 			    void *, struct pf_pdesc *, u_short *);
@@ -3528,7 +3535,10 @@ cleanup:
 		s->nat_rule.ptr = nr;
 		s->anchor.ptr = a;
 		STATE_INC_COUNTERS(s);
-		s->allow_opts = r->allow_opts;
+		if (r->allow_opts)
+			s->state_flags |= PFSTATE_ALLOWOPTS;
+		if (r->rule_flag & PFRULE_STATESLOPPY)
+			s->state_flags |= PFSTATE_SLOPPY;
 		s->log = r->log & PF_LOG_ALL;
 		if (nr != NULL)
 			s->log |= nr->log & PF_LOG_ALL;
@@ -3925,7 +3935,10 @@ cleanup:
 		s->nat_rule.ptr = nr;
 		s->anchor.ptr = a;
 		STATE_INC_COUNTERS(s);
-		s->allow_opts = r->allow_opts;
+		if (r->allow_opts)
+			s->state_flags |= PFSTATE_ALLOWOPTS;
+ 		if (r->rule_flag & PFRULE_STATESLOPPY)
+			s->state_flags |= PFSTATE_SLOPPY;
 		s->log = r->log & PF_LOG_ALL;
 		if (nr != NULL)
 			s->log |= nr->log & PF_LOG_ALL;
@@ -4238,7 +4251,10 @@ cleanup:
 		s->nat_rule.ptr = nr;
 		s->anchor.ptr = a;
 		STATE_INC_COUNTERS(s);
-		s->allow_opts = r->allow_opts;
+		if (r->allow_opts)
+			s->state_flags |= PFSTATE_ALLOWOPTS;
+ 		if (r->rule_flag & PFRULE_STATESLOPPY)
+			s->state_flags |= PFSTATE_SLOPPY;
 		s->log = r->log & PF_LOG_ALL;
 		if (nr != NULL)
 			s->log |= nr->log & PF_LOG_ALL;
@@ -4525,7 +4541,10 @@ cleanup:
 		s->nat_rule.ptr = nr;
 		s->anchor.ptr = a;
 		STATE_INC_COUNTERS(s);
-		s->allow_opts = r->allow_opts;
+		if (r->allow_opts)
+			s->state_flags |= PFSTATE_ALLOWOPTS;
+ 		if (r->rule_flag & PFRULE_STATESLOPPY)
+			s->state_flags |= PFSTATE_SLOPPY;
 		s->log = r->log & PF_LOG_ALL;
 		if (nr != NULL)
 			s->log |= nr->log & PF_LOG_ALL;
@@ -4665,6 +4684,430 @@ pf_test_fragment(struct pf_rule **rm, int direction, struct pfi_kif *kif,
 	return (PF_PASS);
 }
 
+int
+pf_tcp_track_full(struct pf_state_peer *src, struct pf_state_peer *dst,
+	struct pf_state **state, struct pfi_kif *kif, struct mbuf *m, int off,
+	struct pf_pdesc *pd, u_short *reason, int *copyback)
+{
+ 	struct tcphdr		*th = pd->hdr.tcp;
+ 	u_int16_t		 win = ntohs(th->th_win);
+ 	u_int32_t		 ack, end, seq, orig_seq;
+ 	u_int8_t		 sws, dws;
+ 	int			 ackskew;
+
+	if (src->wscale && dst->wscale && !(th->th_flags & TH_SYN)) {
+		sws = src->wscale & PF_WSCALE_MASK;
+		dws = dst->wscale & PF_WSCALE_MASK;
+	} else
+		sws = dws = 0;
+
+	/*
+	 * Sequence tracking algorithm from Guido van Rooij's paper:
+	 *   http://www.madison-gurkha.com/publications/tcp_filtering/
+	 *	tcp_filtering.ps
+	 */
+
+	orig_seq = seq = ntohl(th->th_seq);
+	if (src->seqlo == 0) {
+		/* First packet from this end. Set its state */
+
+		if ((pd->flags & PFDESC_TCP_NORM || dst->scrub) &&
+		    src->scrub == NULL) {
+			if (pf_normalize_tcp_init(m, off, pd, th, src, dst)) {
+				REASON_SET(reason, PFRES_MEMORY);
+				return (PF_DROP);
+			}
+		}
+
+		/* Deferred generation of sequence number modulator */
+		if (dst->seqdiff && !src->seqdiff) {
+#ifdef __FreeBSD__
+			while ((src->seqdiff = pf_new_isn(*state) - seq) == 0)
+				;
+#else
+			while ((src->seqdiff = tcp_rndiss_next() - seq) == 0)
+				;
+#endif
+			ack = ntohl(th->th_ack) - dst->seqdiff;
+			pf_change_a(&th->th_seq, &th->th_sum, htonl(seq +
+			    src->seqdiff), 0);
+			pf_change_a(&th->th_ack, &th->th_sum, htonl(ack), 0);
+			*copyback = 1;
+		} else {
+			ack = ntohl(th->th_ack);
+		}
+
+		end = seq + pd->p_len;
+		if (th->th_flags & TH_SYN) {
+			end++;
+			if (dst->wscale & PF_WSCALE_FLAG) {
+				src->wscale = pf_get_wscale(m, off, th->th_off,
+				    pd->af);
+				if (src->wscale & PF_WSCALE_FLAG) {
+					/* Remove scale factor from initial
+					 * window */
+					sws = src->wscale & PF_WSCALE_MASK;
+					win = ((u_int32_t)win + (1 << sws) - 1)
+					    >> sws;
+					dws = dst->wscale & PF_WSCALE_MASK;
+				} else {
+					/* fixup other window */
+					dst->max_win <<= dst->wscale &
+					    PF_WSCALE_MASK;
+					/* in case of a retrans SYN|ACK */
+					dst->wscale = 0;
+				}
+			}
+		}
+		if (th->th_flags & TH_FIN)
+			end++;
+
+		src->seqlo = seq;
+		if (src->state < TCPS_SYN_SENT)
+			src->state = TCPS_SYN_SENT;
+
+		/*
+		 * May need to slide the window (seqhi may have been set by
+		 * the crappy stack check or if we picked up the connection
+		 * after establishment)
+		 */
+		if (src->seqhi == 1 ||
+		    SEQ_GEQ(end + MAX(1, dst->max_win << dws), src->seqhi))
+			src->seqhi = end + MAX(1, dst->max_win << dws);
+		if (win > src->max_win)
+			src->max_win = win;
+
+	} else {
+		ack = ntohl(th->th_ack) - dst->seqdiff;
+		if (src->seqdiff) {
+			/* Modulate sequence numbers */
+			pf_change_a(&th->th_seq, &th->th_sum, htonl(seq +
+			    src->seqdiff), 0);
+			pf_change_a(&th->th_ack, &th->th_sum, htonl(ack), 0);
+			*copyback = 1;
+		}
+		end = seq + pd->p_len;
+		if (th->th_flags & TH_SYN)
+			end++;
+		if (th->th_flags & TH_FIN)
+			end++;
+	}
+
+	if ((th->th_flags & TH_ACK) == 0) {
+		/* Let it pass through the ack skew check */
+		ack = dst->seqlo;
+	} else if ((ack == 0 &&
+	    (th->th_flags & (TH_ACK|TH_RST)) == (TH_ACK|TH_RST)) ||
+	    /* broken tcp stacks do not set ack */
+	    (dst->state < TCPS_SYN_SENT)) {
+		/*
+		 * Many stacks (ours included) will set the ACK number in an
+		 * FIN|ACK if the SYN times out -- no sequence to ACK.
+		 */
+		ack = dst->seqlo;
+	}
+
+	if (seq == end) {
+		/* Ease sequencing restrictions on no data packets */
+		seq = src->seqlo;
+		end = seq;
+	}
+
+	ackskew = dst->seqlo - ack;
+
+
+	/*
+	 * Need to demodulate the sequence numbers in any TCP SACK options
+	 * (Selective ACK). We could optionally validate the SACK values
+	 * against the current ACK window, either forwards or backwards, but
+	 * I'm not confident that SACK has been implemented properly
+	 * everywhere. It wouldn't surprise me if several stacks accidently
+	 * SACK too far backwards of previously ACKed data. There really aren't
+	 * any security implications of bad SACKing unless the target stack
+	 * doesn't validate the option length correctly. Someone trying to
+	 * spoof into a TCP connection won't bother blindly sending SACK
+	 * options anyway.
+	 */
+	if (dst->seqdiff && (th->th_off << 2) > sizeof(struct tcphdr)) {
+		if (pf_modulate_sack(m, off, pd, th, dst))
+			*copyback = 1;
+	}
+
+
+#define MAXACKWINDOW (0xffff + 1500)	/* 1500 is an arbitrary fudge factor */
+	if (SEQ_GEQ(src->seqhi, end) &&
+	    /* Last octet inside other's window space */
+	    SEQ_GEQ(seq, src->seqlo - (dst->max_win << dws)) &&
+	    /* Retrans: not more than one window back */
+	    (ackskew >= -MAXACKWINDOW) &&
+	    /* Acking not more than one reassembled fragment backwards */
+	    (ackskew <= (MAXACKWINDOW << sws)) &&
+	    /* Acking not more than one window forward */
+	    ((th->th_flags & TH_RST) == 0 || orig_seq == src->seqlo ||
+	    (orig_seq == src->seqlo + 1) || (pd->flags & PFDESC_IP_REAS) == 0)) {
+	    /* Require an exact/+1 sequence match on resets when possible */
+
+		if (dst->scrub || src->scrub) {
+			if (pf_normalize_tcp_stateful(m, off, pd, reason, th,
+			    *state, src, dst, copyback))
+				return (PF_DROP);
+		}
+
+		/* update max window */
+		if (src->max_win < win)
+			src->max_win = win;
+		/* synchronize sequencing */
+		if (SEQ_GT(end, src->seqlo))
+			src->seqlo = end;
+		/* slide the window of what the other end can send */
+		if (SEQ_GEQ(ack + (win << sws), dst->seqhi))
+			dst->seqhi = ack + MAX((win << sws), 1);
+
+
+		/* update states */
+		if (th->th_flags & TH_SYN)
+			if (src->state < TCPS_SYN_SENT)
+				src->state = TCPS_SYN_SENT;
+		if (th->th_flags & TH_FIN)
+			if (src->state < TCPS_CLOSING)
+				src->state = TCPS_CLOSING;
+		if (th->th_flags & TH_ACK) {
+			if (dst->state == TCPS_SYN_SENT) {
+				dst->state = TCPS_ESTABLISHED;
+				if (src->state == TCPS_ESTABLISHED &&
+				    (*state)->src_node != NULL &&
+				    pf_src_connlimit(state)) {
+					REASON_SET(reason, PFRES_SRCLIMIT);
+					return (PF_DROP);
+				}
+			} else if (dst->state == TCPS_CLOSING)
+				dst->state = TCPS_FIN_WAIT_2;
+		}
+		if (th->th_flags & TH_RST)
+			src->state = dst->state = TCPS_TIME_WAIT;
+
+		/* update expire time */
+		(*state)->expire = time_second;
+		if (src->state >= TCPS_FIN_WAIT_2 &&
+		    dst->state >= TCPS_FIN_WAIT_2)
+			(*state)->timeout = PFTM_TCP_CLOSED;
+		else if (src->state >= TCPS_CLOSING &&
+		    dst->state >= TCPS_CLOSING)
+			(*state)->timeout = PFTM_TCP_FIN_WAIT;
+		else if (src->state < TCPS_ESTABLISHED ||
+		    dst->state < TCPS_ESTABLISHED)
+			(*state)->timeout = PFTM_TCP_OPENING;
+		else if (src->state >= TCPS_CLOSING ||
+		    dst->state >= TCPS_CLOSING)
+			(*state)->timeout = PFTM_TCP_CLOSING;
+		else
+			(*state)->timeout = PFTM_TCP_ESTABLISHED;
+
+		/* Fall through to PASS packet */
+
+	} else if ((dst->state < TCPS_SYN_SENT ||
+		dst->state >= TCPS_FIN_WAIT_2 ||
+		src->state >= TCPS_FIN_WAIT_2) &&
+	    SEQ_GEQ(src->seqhi + MAXACKWINDOW, end) &&
+	    /* Within a window forward of the originating packet */
+	    SEQ_GEQ(seq, src->seqlo - MAXACKWINDOW)) {
+	    /* Within a window backward of the originating packet */
+
+		/*
+		 * This currently handles three situations:
+		 *  1) Stupid stacks will shotgun SYNs before their peer
+		 *     replies.
+		 *  2) When PF catches an already established stream (the
+		 *     firewall rebooted, the state table was flushed, routes
+		 *     changed...)
+		 *  3) Packets get funky immediately after the connection
+		 *     closes (this should catch Solaris spurious ACK|FINs
+		 *     that web servers like to spew after a close)
+		 *
+		 * This must be a little more careful than the above code
+		 * since packet floods will also be caught here. We don't
+		 * update the TTL here to mitigate the damage of a packet
+		 * flood and so the same code can handle awkward establishment
+		 * and a loosened connection close.
+		 * In the establishment case, a correct peer response will
+		 * validate the connection, go through the normal state code
+		 * and keep updating the state TTL.
+		 */
+
+		if (pf_status.debug >= PF_DEBUG_MISC) {
+			printf("pf: loose state match: ");
+			pf_print_state(*state);
+			pf_print_flags(th->th_flags);
+			printf(" seq=%u (%u) ack=%u len=%u ackskew=%d "
+			    "pkts=%llu:%llu\n", seq, orig_seq, ack, pd->p_len,
+#ifdef __FreeBSD__
+			    ackskew, (unsigned long long)(*state)->packets[0],
+			    (unsigned long long)(*state)->packets[1]);
+#else
+			    ackskew, (*state)->packets[0],
+			    (*state)->packets[1]);
+#endif
+		}
+
+		if (dst->scrub || src->scrub) {
+			if (pf_normalize_tcp_stateful(m, off, pd, reason, th,
+			    *state, src, dst, copyback))
+				return (PF_DROP);
+		}
+
+		/* update max window */
+		if (src->max_win < win)
+			src->max_win = win;
+		/* synchronize sequencing */
+		if (SEQ_GT(end, src->seqlo))
+			src->seqlo = end;
+		/* slide the window of what the other end can send */
+		if (SEQ_GEQ(ack + (win << sws), dst->seqhi))
+			dst->seqhi = ack + MAX((win << sws), 1);
+
+		/*
+		 * Cannot set dst->seqhi here since this could be a shotgunned
+		 * SYN and not an already established connection.
+		 */
+
+		if (th->th_flags & TH_FIN)
+			if (src->state < TCPS_CLOSING)
+				src->state = TCPS_CLOSING;
+		if (th->th_flags & TH_RST)
+			src->state = dst->state = TCPS_TIME_WAIT;
+
+		/* Fall through to PASS packet */
+
+	} else {
+		if ((*state)->dst.state == TCPS_SYN_SENT &&
+		    (*state)->src.state == TCPS_SYN_SENT) {
+			/* Send RST for state mismatches during handshake */
+			if (!(th->th_flags & TH_RST))
+#ifdef __FreeBSD__
+				pf_send_tcp(m, (*state)->rule.ptr, pd->af,
+#else
+				pf_send_tcp((*state)->rule.ptr, pd->af,
+#endif
+				    pd->dst, pd->src, th->th_dport,
+				    th->th_sport, ntohl(th->th_ack), 0,
+				    TH_RST, 0, 0,
+				    (*state)->rule.ptr->return_ttl, 1, 0,
+				    pd->eh, kif->pfik_ifp);
+			src->seqlo = 0;
+			src->seqhi = 1;
+			src->max_win = 1;
+		} else if (pf_status.debug >= PF_DEBUG_MISC) {
+			printf("pf: BAD state: ");
+			pf_print_state(*state);
+			pf_print_flags(th->th_flags);
+			printf(" seq=%u (%u) ack=%u len=%u ackskew=%d "
+#ifdef notyet
+			    "pkts=%llu:%llu dir=%s,%s\n",
+#else
+			    "pkts=%llu:%llu%s\n",
+#endif
+			    seq, orig_seq, ack, pd->p_len, ackskew,
+#ifdef __FreeBSD__
+			    (unsigned long long)(*state)->packets[0],
+			    (unsigned long long)(*state)->packets[1],
+#else
+			    (*state)->packets[0], (*state)->packets[1],
+#endif
+#ifdef notyet
+			    direction == PF_IN ? "in" : "out",
+			    direction == (*state)->direction ? "fwd" : "rev");
+#else
+			    "");
+#endif
+			printf("pf: State failure on: %c %c %c %c | %c %c\n",
+			    SEQ_GEQ(src->seqhi, end) ? ' ' : '1',
+			    SEQ_GEQ(seq, src->seqlo - (dst->max_win << dws)) ?
+			    ' ': '2',
+			    (ackskew >= -MAXACKWINDOW) ? ' ' : '3',
+			    (ackskew <= (MAXACKWINDOW << sws)) ? ' ' : '4',
+			    SEQ_GEQ(src->seqhi + MAXACKWINDOW, end) ?' ' :'5',
+			    SEQ_GEQ(seq, src->seqlo - MAXACKWINDOW) ?' ' :'6');
+		}
+		REASON_SET(reason, PFRES_BADSTATE);
+		return (PF_DROP);
+	}
+
+	/* Any packets which have gotten here are to be passed */
+	return (PF_PASS);
+}
+
+int
+pf_tcp_track_sloppy(struct pf_state_peer *src, struct pf_state_peer *dst,
+	struct pf_state **state, struct pf_pdesc *pd, u_short *reason)
+{
+	struct tcphdr		*th = pd->hdr.tcp;
+
+	if (th->th_flags & TH_SYN)
+		if (src->state < TCPS_SYN_SENT)
+			src->state = TCPS_SYN_SENT;
+	if (th->th_flags & TH_FIN)
+		if (src->state < TCPS_CLOSING)
+			src->state = TCPS_CLOSING;
+	if (th->th_flags & TH_ACK) {
+		if (dst->state == TCPS_SYN_SENT) {
+			dst->state = TCPS_ESTABLISHED;
+			if (src->state == TCPS_ESTABLISHED &&
+			    (*state)->src_node != NULL &&
+			    pf_src_connlimit(state)) {
+				REASON_SET(reason, PFRES_SRCLIMIT);
+				return (PF_DROP);
+			}
+		} else if (dst->state == TCPS_CLOSING) {
+			dst->state = TCPS_FIN_WAIT_2;
+		} else if (src->state == TCPS_SYN_SENT &&
+		    dst->state < TCPS_SYN_SENT) {
+			/*
+			 * Handle a special sloppy case where we only see one
+			 * half of the connection. If there is a ACK after
+			 * the initial SYN without ever seeing a packet from
+			 * the destination, set the connection to established.
+			 */
+			dst->state = src->state = TCPS_ESTABLISHED;
+			if ((*state)->src_node != NULL &&
+			    pf_src_connlimit(state)) {
+				REASON_SET(reason, PFRES_SRCLIMIT);
+				return (PF_DROP);
+			}
+		} else if (src->state == TCPS_CLOSING &&
+		    dst->state == TCPS_ESTABLISHED &&
+		    dst->seqlo == 0) {
+			/*
+			 * Handle the closing of half connections where we
+			 * don't see the full bidirectional FIN/ACK+ACK
+			 * handshake.
+			 */
+			dst->state = TCPS_CLOSING;
+		}
+	}
+	if (th->th_flags & TH_RST)
+		src->state = dst->state = TCPS_TIME_WAIT;
+
+	/* update expire time */
+	(*state)->expire = time_second;
+	if (src->state >= TCPS_FIN_WAIT_2 &&
+	    dst->state >= TCPS_FIN_WAIT_2)
+		(*state)->timeout = PFTM_TCP_CLOSED;
+	else if (src->state >= TCPS_CLOSING &&
+	    dst->state >= TCPS_CLOSING)
+		(*state)->timeout = PFTM_TCP_FIN_WAIT;
+	else if (src->state < TCPS_ESTABLISHED ||
+	    dst->state < TCPS_ESTABLISHED)
+		(*state)->timeout = PFTM_TCP_OPENING;
+	else if (src->state >= TCPS_CLOSING ||
+	    dst->state >= TCPS_CLOSING)
+		(*state)->timeout = PFTM_TCP_CLOSING;
+	else
+		(*state)->timeout = PFTM_TCP_ESTABLISHED;
+
+	return (PF_PASS);
+}
+
+
 int
 pf_test_state_tcp(struct pf_state **state, int direction, struct pfi_kif *kif,
     struct mbuf *m, int off, void *h, struct pf_pdesc *pd,
@@ -4672,10 +5115,6 @@ pf_test_state_tcp(struct pf_state **state, int direction, struct pfi_kif *kif,
 {
 	struct pf_state_cmp	 key;
 	struct tcphdr		*th = pd->hdr.tcp;
-	u_int16_t		 win = ntohs(th->th_win);
-	u_int32_t		 ack, end, seq, orig_seq;
-	u_int8_t		 sws, dws;
-	int			 ackskew;
 	int			 copyback = 0;
 	struct pf_state_peer	*src, *dst;
 
@@ -4826,337 +5265,15 @@ pf_test_state_tcp(struct pf_state **state, int direction, struct pfi_kif *kif,
 		return (PF_DROP);
 	}
 
-	if (src->wscale && dst->wscale && !(th->th_flags & TH_SYN)) {
-		sws = src->wscale & PF_WSCALE_MASK;
-		dws = dst->wscale & PF_WSCALE_MASK;
-	} else
-		sws = dws = 0;
-
-	/*
-	 * Sequence tracking algorithm from Guido van Rooij's paper:
-	 *   http://www.madison-gurkha.com/publications/tcp_filtering/
-	 *	tcp_filtering.ps
-	 */
-
-	orig_seq = seq = ntohl(th->th_seq);
-	if (src->seqlo == 0) {
-		/* First packet from this end. Set its state */
-
-		if ((pd->flags & PFDESC_TCP_NORM || dst->scrub) &&
-		    src->scrub == NULL) {
-			if (pf_normalize_tcp_init(m, off, pd, th, src, dst)) {
-				REASON_SET(reason, PFRES_MEMORY);
-				return (PF_DROP);
-			}
-		}
-
-		/* Deferred generation of sequence number modulator */
-		if (dst->seqdiff && !src->seqdiff) {
-#ifdef __FreeBSD__
-			while ((src->seqdiff = pf_new_isn(*state) - seq) == 0)
-				;
-#else
-			while ((src->seqdiff = tcp_rndiss_next() - seq) == 0)
-				;
-#endif
-			ack = ntohl(th->th_ack) - dst->seqdiff;
-			pf_change_a(&th->th_seq, &th->th_sum, htonl(seq +
-			    src->seqdiff), 0);
-			pf_change_a(&th->th_ack, &th->th_sum, htonl(ack), 0);
-			copyback = 1;
-		} else {
-			ack = ntohl(th->th_ack);
-		}
-
-		end = seq + pd->p_len;
-		if (th->th_flags & TH_SYN) {
-			end++;
-			if (dst->wscale & PF_WSCALE_FLAG) {
-				src->wscale = pf_get_wscale(m, off, th->th_off,
-				    pd->af);
-				if (src->wscale & PF_WSCALE_FLAG) {
-					/* Remove scale factor from initial
-					 * window */
-					sws = src->wscale & PF_WSCALE_MASK;
-					win = ((u_int32_t)win + (1 << sws) - 1)
-					    >> sws;
-					dws = dst->wscale & PF_WSCALE_MASK;
-				} else {
-					/* fixup other window */
-					dst->max_win <<= dst->wscale &
-					    PF_WSCALE_MASK;
-					/* in case of a retrans SYN|ACK */
-					dst->wscale = 0;
-				}
-			}
-		}
-		if (th->th_flags & TH_FIN)
-			end++;
-
-		src->seqlo = seq;
-		if (src->state < TCPS_SYN_SENT)
-			src->state = TCPS_SYN_SENT;
-
-		/*
-		 * May need to slide the window (seqhi may have been set by
-		 * the crappy stack check or if we picked up the connection
-		 * after establishment)
-		 */
-		if (src->seqhi == 1 ||
-		    SEQ_GEQ(end + MAX(1, dst->max_win << dws), src->seqhi))
-			src->seqhi = end + MAX(1, dst->max_win << dws);
-		if (win > src->max_win)
-			src->max_win = win;
-
+	if ((*state)->state_flags & PFSTATE_SLOPPY) {
+		if (pf_tcp_track_sloppy(src, dst, state, pd, reason) == PF_DROP)
+			return (PF_DROP);
 	} else {
-		ack = ntohl(th->th_ack) - dst->seqdiff;
-		if (src->seqdiff) {
-			/* Modulate sequence numbers */
-			pf_change_a(&th->th_seq, &th->th_sum, htonl(seq +
-			    src->seqdiff), 0);
-			pf_change_a(&th->th_ack, &th->th_sum, htonl(ack), 0);
-			copyback = 1;
-		}
-		end = seq + pd->p_len;
-		if (th->th_flags & TH_SYN)
-			end++;
-		if (th->th_flags & TH_FIN)
-			end++;
+		if (pf_tcp_track_full(src, dst, state, kif, m, off, pd, reason,
+		    ©back) == PF_DROP)
+			return (PF_DROP);
 	}
 
-	if ((th->th_flags & TH_ACK) == 0) {
-		/* Let it pass through the ack skew check */
-		ack = dst->seqlo;
-	} else if ((ack == 0 &&
-	    (th->th_flags & (TH_ACK|TH_RST)) == (TH_ACK|TH_RST)) ||
-	    /* broken tcp stacks do not set ack */
-	    (dst->state < TCPS_SYN_SENT)) {
-		/*
-		 * Many stacks (ours included) will set the ACK number in an
-		 * FIN|ACK if the SYN times out -- no sequence to ACK.
-		 */
-		ack = dst->seqlo;
-	}
-
-	if (seq == end) {
-		/* Ease sequencing restrictions on no data packets */
-		seq = src->seqlo;
-		end = seq;
-	}
-
-	ackskew = dst->seqlo - ack;
-
-
-	/*
-	 * Need to demodulate the sequence numbers in any TCP SACK options
-	 * (Selective ACK). We could optionally validate the SACK values
-	 * against the current ACK window, either forwards or backwards, but
-	 * I'm not confident that SACK has been implemented properly
-	 * everywhere. It wouldn't surprise me if several stacks accidently
-	 * SACK too far backwards of previously ACKed data. There really aren't
-	 * any security implications of bad SACKing unless the target stack
-	 * doesn't validate the option length correctly. Someone trying to
-	 * spoof into a TCP connection won't bother blindly sending SACK
-	 * options anyway.
-	 */
-	if (dst->seqdiff && (th->th_off << 2) > sizeof(struct tcphdr)) {
-		if (pf_modulate_sack(m, off, pd, th, dst))
-			copyback = 1;
-	}
-
-
-#define MAXACKWINDOW (0xffff + 1500)	/* 1500 is an arbitrary fudge factor */
-	if (SEQ_GEQ(src->seqhi, end) &&
-	    /* Last octet inside other's window space */
-	    SEQ_GEQ(seq, src->seqlo - (dst->max_win << dws)) &&
-	    /* Retrans: not more than one window back */
-	    (ackskew >= -MAXACKWINDOW) &&
-	    /* Acking not more than one reassembled fragment backwards */
-	    (ackskew <= (MAXACKWINDOW << sws)) &&
-	    /* Acking not more than one window forward */
-	    ((th->th_flags & TH_RST) == 0 || orig_seq == src->seqlo ||
-	    (orig_seq == src->seqlo + 1) || (pd->flags & PFDESC_IP_REAS) == 0)) {
-	    /* Require an exact/+1 sequence match on resets when possible */
-
-		if (dst->scrub || src->scrub) {
-			if (pf_normalize_tcp_stateful(m, off, pd, reason, th,
-			    *state, src, dst, ©back))
-				return (PF_DROP);
-		}
-
-		/* update max window */
-		if (src->max_win < win)
-			src->max_win = win;
-		/* synchronize sequencing */
-		if (SEQ_GT(end, src->seqlo))
-			src->seqlo = end;
-		/* slide the window of what the other end can send */
-		if (SEQ_GEQ(ack + (win << sws), dst->seqhi))
-			dst->seqhi = ack + MAX((win << sws), 1);
-
-
-		/* update states */
-		if (th->th_flags & TH_SYN)
-			if (src->state < TCPS_SYN_SENT)
-				src->state = TCPS_SYN_SENT;
-		if (th->th_flags & TH_FIN)
-			if (src->state < TCPS_CLOSING)
-				src->state = TCPS_CLOSING;
-		if (th->th_flags & TH_ACK) {
-			if (dst->state == TCPS_SYN_SENT) {
-				dst->state = TCPS_ESTABLISHED;
-				if (src->state == TCPS_ESTABLISHED &&
-				    (*state)->src_node != NULL &&
-				    pf_src_connlimit(state)) {
-					REASON_SET(reason, PFRES_SRCLIMIT);
-					return (PF_DROP);
-				}
-			} else if (dst->state == TCPS_CLOSING)
-				dst->state = TCPS_FIN_WAIT_2;
-		}
-		if (th->th_flags & TH_RST)
-			src->state = dst->state = TCPS_TIME_WAIT;
-
-		/* update expire time */
-		(*state)->expire = time_second;
-		if (src->state >= TCPS_FIN_WAIT_2 &&
-		    dst->state >= TCPS_FIN_WAIT_2)
-			(*state)->timeout = PFTM_TCP_CLOSED;
-		else if (src->state >= TCPS_CLOSING &&
-		    dst->state >= TCPS_CLOSING)
-			(*state)->timeout = PFTM_TCP_FIN_WAIT;
-		else if (src->state < TCPS_ESTABLISHED ||
-		    dst->state < TCPS_ESTABLISHED)
-			(*state)->timeout = PFTM_TCP_OPENING;
-		else if (src->state >= TCPS_CLOSING ||
-		    dst->state >= TCPS_CLOSING)
-			(*state)->timeout = PFTM_TCP_CLOSING;
-		else
-			(*state)->timeout = PFTM_TCP_ESTABLISHED;
-
-		/* Fall through to PASS packet */
-
-	} else if ((dst->state < TCPS_SYN_SENT ||
-		dst->state >= TCPS_FIN_WAIT_2 ||
-		src->state >= TCPS_FIN_WAIT_2) &&
-	    SEQ_GEQ(src->seqhi + MAXACKWINDOW, end) &&
-	    /* Within a window forward of the originating packet */
-	    SEQ_GEQ(seq, src->seqlo - MAXACKWINDOW)) {
-	    /* Within a window backward of the originating packet */
-
-		/*
-		 * This currently handles three situations:
-		 *  1) Stupid stacks will shotgun SYNs before their peer
-		 *     replies.
-		 *  2) When PF catches an already established stream (the
-		 *     firewall rebooted, the state table was flushed, routes
-		 *     changed...)
-		 *  3) Packets get funky immediately after the connection
-		 *     closes (this should catch Solaris spurious ACK|FINs
-		 *     that web servers like to spew after a close)
-		 *
-		 * This must be a little more careful than the above code
-		 * since packet floods will also be caught here. We don't
-		 * update the TTL here to mitigate the damage of a packet
-		 * flood and so the same code can handle awkward establishment
-		 * and a loosened connection close.
-		 * In the establishment case, a correct peer response will
-		 * validate the connection, go through the normal state code
-		 * and keep updating the state TTL.
-		 */
-
-		if (pf_status.debug >= PF_DEBUG_MISC) {
-			printf("pf: loose state match: ");
-			pf_print_state(*state);
-			pf_print_flags(th->th_flags);
-			printf(" seq=%u (%u) ack=%u len=%u ackskew=%d "
-			    "pkts=%llu:%llu\n", seq, orig_seq, ack, pd->p_len,
-#ifdef __FreeBSD__
-			    ackskew, (unsigned long long)(*state)->packets[0],
-			    (unsigned long long)(*state)->packets[1]);
-#else
-			    ackskew, (*state)->packets[0],
-			    (*state)->packets[1]);
-#endif
-		}
-
-		if (dst->scrub || src->scrub) {
-			if (pf_normalize_tcp_stateful(m, off, pd, reason, th,
-			    *state, src, dst, ©back))
-				return (PF_DROP);
-		}
-
-		/* update max window */
-		if (src->max_win < win)
-			src->max_win = win;
-		/* synchronize sequencing */
-		if (SEQ_GT(end, src->seqlo))
-			src->seqlo = end;
-		/* slide the window of what the other end can send */
-		if (SEQ_GEQ(ack + (win << sws), dst->seqhi))
-			dst->seqhi = ack + MAX((win << sws), 1);
-
-		/*
-		 * Cannot set dst->seqhi here since this could be a shotgunned
-		 * SYN and not an already established connection.
-		 */
-
-		if (th->th_flags & TH_FIN)
-			if (src->state < TCPS_CLOSING)
-				src->state = TCPS_CLOSING;
-		if (th->th_flags & TH_RST)
-			src->state = dst->state = TCPS_TIME_WAIT;
-
-		/* Fall through to PASS packet */
-
-	} else {
-		if ((*state)->dst.state == TCPS_SYN_SENT &&
-		    (*state)->src.state == TCPS_SYN_SENT) {
-			/* Send RST for state mismatches during handshake */
-			if (!(th->th_flags & TH_RST))
-#ifdef __FreeBSD__
-				pf_send_tcp(m, (*state)->rule.ptr, pd->af,
-#else
-				pf_send_tcp((*state)->rule.ptr, pd->af,
-#endif
-				    pd->dst, pd->src, th->th_dport,
-				    th->th_sport, ntohl(th->th_ack), 0,
-				    TH_RST, 0, 0,
-				    (*state)->rule.ptr->return_ttl, 1, 0,
-				    pd->eh, kif->pfik_ifp);
-			src->seqlo = 0;
-			src->seqhi = 1;
-			src->max_win = 1;
-		} else if (pf_status.debug >= PF_DEBUG_MISC) {
-			printf("pf: BAD state: ");
-			pf_print_state(*state);
-			pf_print_flags(th->th_flags);
-			printf(" seq=%u (%u) ack=%u len=%u ackskew=%d "
-			    "pkts=%llu:%llu dir=%s,%s\n",
-			    seq, orig_seq, ack, pd->p_len, ackskew,
-#ifdef __FreeBSD__
-			    (unsigned long long)(*state)->packets[0],
-			    (unsigned long long)(*state)->packets[1],
-#else
-			    (*state)->packets[0], (*state)->packets[1],
-#endif
-			    direction == PF_IN ? "in" : "out",
-			    direction == (*state)->direction ? "fwd" : "rev");
-			printf("pf: State failure on: %c %c %c %c | %c %c\n",
-			    SEQ_GEQ(src->seqhi, end) ? ' ' : '1',
-			    SEQ_GEQ(seq, src->seqlo - (dst->max_win << dws)) ?
-			    ' ': '2',
-			    (ackskew >= -MAXACKWINDOW) ? ' ' : '3',
-			    (ackskew <= (MAXACKWINDOW << sws)) ? ' ' : '4',
-			    SEQ_GEQ(src->seqhi + MAXACKWINDOW, end) ?' ' :'5',
-			    SEQ_GEQ(seq, src->seqlo - MAXACKWINDOW) ?' ' :'6');
-		}
-		REASON_SET(reason, PFRES_BADSTATE);
-		return (PF_DROP);
-	}
-
-	/* Any packets which have gotten here are to be passed */
-
 	/* translate source/destination address, if necessary */
 	if (STATE_TRANSLATE(*state)) {
 		if (direction == PF_OUT)
@@ -5533,8 +5650,9 @@ pf_test_state_icmp(struct pf_state **state, int direction, struct pfi_kif *kif,
 				copyback = 1;
 			}
 
-			if (!SEQ_GEQ(src->seqhi, seq) ||
-			    !SEQ_GEQ(seq, src->seqlo - (dst->max_win << dws))) {
+			if (!((*state)->state_flags & PFSTATE_SLOPPY) &&
+			    (!SEQ_GEQ(src->seqhi, seq) ||
+			    !SEQ_GEQ(seq, src->seqlo - (dst->max_win << dws)))) {
 				if (pf_status.debug >= PF_DEBUG_MISC) {
 					printf("pf: BAD ICMP %d:%d ",
 					    icmptype, pd->hdr.icmp->icmp_code);
@@ -7052,7 +7170,7 @@ pf_test(int dir, struct ifnet *ifp, struct mbuf **m0,
 
 done:
 	if (action == PF_PASS && h->ip_hl > 5 &&
-	    !((s && s->allow_opts) || r->allow_opts)) {
+	    !((s && s->state_flags & PFSTATE_ALLOWOPTS) || r->allow_opts)) {
 		action = PF_DROP;
 		REASON_SET(&reason, PFRES_IPOPTIONS);
 		log = 1;
@@ -7513,7 +7631,7 @@ pf_test6(int dir, struct ifnet *ifp, struct mbuf **m0,
 done:
 	/* handle dangerous IPv6 extension headers. */
 	if (action == PF_PASS && rh_cnt &&
-	    !((s && s->allow_opts) || r->allow_opts)) {
+	    !((s && s->state_flags & PFSTATE_ALLOWOPTS) || r->allow_opts)) {
 		action = PF_DROP;
 		REASON_SET(&reason, PFRES_IPOPTIONS);
 		log = 1;
diff --git a/sys/contrib/pf/net/pfvar.h b/sys/contrib/pf/net/pfvar.h
index 32e721c5733..de175b1a021 100644
--- a/sys/contrib/pf/net/pfvar.h
+++ b/sys/contrib/pf/net/pfvar.h
@@ -700,6 +700,7 @@ struct pf_rule {
 
 /* rule flags again */
 #define PFRULE_IFBOUND		0x00010000	/* if-bound */
+#define PFRULE_STATESLOPPY	0x00020000	/* sloppy state tracking */
 
 #define PFSTATE_HIWAT		10000	/* default state table size */
 #define PFSTATE_ADAPT_START	6000	/* default adaptive timeout start */
@@ -800,7 +801,9 @@ struct pf_state {
 	u_int8_t	 pad;
 #endif
 	u_int8_t	 log;
-	u_int8_t	 allow_opts;
+	u_int8_t	 state_flags;
+#define	PFSTATE_ALLOWOPTS	0x01
+#define	PFSTATE_SLOPPY		0x02
 	u_int8_t	 timeout;
 	u_int8_t	 sync_flags;
 #define	PFSTATE_NOSYNC	 0x01
diff --git a/sys/contrib/rdma/krping/krping.c b/sys/contrib/rdma/krping/krping.c
index db7c524549c..d787965cd84 100644
--- a/sys/contrib/rdma/krping/krping.c
+++ b/sys/contrib/rdma/krping/krping.c
@@ -112,109 +112,6 @@ struct krping_cb_list krping_cbs;
 #define RPING_BUFSIZE 128*1024
 #define RPING_SQ_DEPTH 32
 
-
-/* lifted from netinet/libalias/alias_proxy.c */
-static int inet_aton(const char *cp, struct in_addr *addr);
-static int
-inet_aton(cp, addr)
-        const char *cp;
-        struct in_addr *addr;
-{
-	u_long parts[4];
-	in_addr_t val;
-	const char *c;
-	char *endptr;
-	int gotend, n;
-
-	c = (const char *)cp;
-	n = 0;
-	/*
-	 * Run through the string, grabbing numbers until
-	 * the end of the string, or some error
-	 */
-	gotend = 0;
-	while (!gotend) {
-		unsigned long l;
-
-		l = strtoul(c, &endptr, 0);
-
-		if (l == ULONG_MAX || (l == 0 && endptr == c))
-			return (0);
-
-		val = (in_addr_t)l;
-		/*
-		 * If the whole string is invalid, endptr will equal
-		 * c.. this way we can make sure someone hasn't
-		 * gone '.12' or something which would get past
-		 * the next check.
-		 */
-		if (endptr == c)
-			return (0);
-		parts[n] = val;
-		c = endptr;
-
-		/* Check the next character past the previous number's end */
-		switch (*c) {
-		case '.' :
-			/* Make sure we only do 3 dots .. */
-			if (n == 3)	/* Whoops. Quit. */
-				return (0);
-			n++;
-			c++;
-			break;
-
-		case '\0':
-			gotend = 1;
-			break;
-
-		default:
-			if (isspace((unsigned char)*c)) {
-				gotend = 1;
-				break;
-			} else
-				return (0);	/* Invalid character, so fail */
-		}
-
-	}
-
-	/*
-	 * Concoct the address according to
-	 * the number of parts specified.
-	 */
-
-	switch (n) {
-	case 0:				/* a -- 32 bits */
-		/*
-		 * Nothing is necessary here.  Overflow checking was
-		 * already done in strtoul().
-		 */
-		break;
-	case 1:				/* a.b -- 8.24 bits */
-		if (val > 0xffffff || parts[0] > 0xff)
-			return (0);
-		val |= parts[0] << 24;
-		break;
-
-	case 2:				/* a.b.c -- 8.8.16 bits */
-		if (val > 0xffff || parts[0] > 0xff || parts[1] > 0xff)
-			return (0);
-		val |= (parts[0] << 24) | (parts[1] << 16);
-		break;
-
-	case 3:				/* a.b.c.d -- 8.8.8.8 bits */
-		if (val > 0xff || parts[0] > 0xff || parts[1] > 0xff ||
-		    parts[2] > 0xff)
-			return (0);
-		val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
-		break;
-	}
-
-	if (addr != NULL)
-		addr->s_addr = htonl(val);
-	return (1);
-}
-
-
 static void krping_wait(struct krping_cb *cb, int state)
 {
 	int rc;
diff --git a/sys/ddb/db_command.c b/sys/ddb/db_command.c
index 1e3401601d8..73de0c50240 100644
--- a/sys/ddb/db_command.c
+++ b/sys/ddb/db_command.c
@@ -652,7 +652,7 @@ db_kill(dummy1, dummy2, dummy3, dummy4)
 	if (PROC_TRYLOCK(p) == 0)
 		DB_ERROR(("Can't lock process with pid %ld\n", (long) pid));
 	else {
-		psignal(p, sig);
+		pksignal(p, sig, NULL);
 		PROC_UNLOCK(p);
 	}
 
diff --git a/sys/dev/aac/aac.c b/sys/dev/aac/aac.c
index 0bfb3f89997..f0c67cd6bf1 100644
--- a/sys/dev/aac/aac.c
+++ b/sys/dev/aac/aac.c
@@ -604,7 +604,7 @@ aac_alloc(struct aac_softc *sc)
 	TAILQ_INIT(&sc->aac_fibmap_tqh);
 	sc->aac_commands = malloc(sc->aac_max_fibs * sizeof(struct aac_command),
 				  M_AACBUF, M_WAITOK|M_ZERO);
-	while (sc->total_fibs < AAC_PREALLOCATE_FIBS) {
+	while (sc->total_fibs < sc->aac_max_fibs) {
 		if (aac_alloc_commands(sc) != 0)
 			break;
 	}
diff --git a/sys/dev/aac/aac_cam.c b/sys/dev/aac/aac_cam.c
index 5755f0d611a..37f7c637c30 100644
--- a/sys/dev/aac/aac_cam.c
+++ b/sys/dev/aac/aac_cam.c
@@ -260,8 +260,11 @@ aac_cam_action(struct cam_sim *sim, union ccb *ccb)
 		cpi->hba_inquiry = PI_WIDE_16;
 		cpi->target_sprt = 0;
 
-		/* Resetting via the passthrough causes problems. */
-		cpi->hba_misc = PIM_NOBUSRESET;
+		/*
+		 * Resetting via the passthrough or parallel bus scan
+		 * causes problems.
+		 */
+		cpi->hba_misc = PIM_NOBUSRESET | PIM_SEQSCAN;
 		cpi->hba_eng_cnt = 0;
 		cpi->max_target = camsc->inf->TargetsPerBus;
 		cpi->max_lun = 8;	/* Per the controller spec */
diff --git a/sys/dev/aac/aacvar.h b/sys/dev/aac/aacvar.h
index 18b8501cf61..3f9714d07c6 100644
--- a/sys/dev/aac/aacvar.h
+++ b/sys/dev/aac/aacvar.h
@@ -56,13 +56,6 @@
  */
 #define AAC_ADAPTER_FIBS	8
 
-/*
- * FIBs are allocated in page-size chunks and can grow up to the 512
- * limit imposed by the hardware.
- */
-#define AAC_PREALLOCATE_FIBS	128
-#define AAC_NUM_MGT_FIB		8
-
 /*
  * The controller reports status events in AIFs.  We hang on to a number of
  * these in order to pass them out to user-space management tools.
diff --git a/sys/dev/acpi_support/acpi_ibm.c b/sys/dev/acpi_support/acpi_ibm.c
index 25db9b0be96..22899820b1f 100644
--- a/sys/dev/acpi_support/acpi_ibm.c
+++ b/sys/dev/acpi_support/acpi_ibm.c
@@ -255,6 +255,7 @@ ACPI_SERIAL_DECL(ibm, "ACPI IBM extras");
 static int	acpi_ibm_probe(device_t dev);
 static int	acpi_ibm_attach(device_t dev);
 static int	acpi_ibm_detach(device_t dev);
+static int	acpi_ibm_resume(device_t dev);
 
 static void	ibm_led(void *softc, int onoff);
 static void	ibm_led_task(struct acpi_ibm_softc *sc, int pending __unused);
@@ -273,6 +274,7 @@ static device_method_t acpi_ibm_methods[] = {
 	DEVMETHOD(device_probe, acpi_ibm_probe),
 	DEVMETHOD(device_attach, acpi_ibm_attach),
 	DEVMETHOD(device_detach, acpi_ibm_detach),
+	DEVMETHOD(device_resume, acpi_ibm_resume),
 
 	{0, 0}
 };
@@ -434,6 +436,34 @@ acpi_ibm_detach(device_t dev)
 	return (0);
 }
 
+static int
+acpi_ibm_resume(device_t dev)
+{
+	struct acpi_ibm_softc *sc = device_get_softc(dev);
+
+	ACPI_FUNCTION_TRACE((char *)(uintptr_t) __func__);
+
+	ACPI_SERIAL_BEGIN(ibm);
+	for (int i = 0; acpi_ibm_sysctls[i].name != NULL; i++) {
+		int val;
+
+		if ((acpi_ibm_sysctls[i].access & CTLFLAG_RD) == 0) {
+			continue;
+		}
+
+		val = acpi_ibm_sysctl_get(sc, i);
+
+		if ((acpi_ibm_sysctls[i].access & CTLFLAG_WR) == 0) {
+			continue;
+		}
+
+		acpi_ibm_sysctl_set(sc, i, val);
+	}
+	ACPI_SERIAL_END(ibm);
+
+	return (0);
+}
+
 static int
 acpi_ibm_eventmask_set(struct acpi_ibm_softc *sc, int val)
 {
diff --git a/sys/dev/acpica/acpi.c b/sys/dev/acpica/acpi.c
index 6679ebf4070..a446ea8f052 100644
--- a/sys/dev/acpica/acpi.c
+++ b/sys/dev/acpica/acpi.c
@@ -1517,7 +1517,7 @@ acpi_device_scan_children(device_t bus, device_t dev, int max_depth,
     ctx.arg = arg;
     ctx.parent = h;
     return (AcpiWalkNamespace(ACPI_TYPE_ANY, h, max_depth,
-	acpi_device_scan_cb, &ctx, NULL));
+	acpi_device_scan_cb, NULL, &ctx, NULL));
 }
 
 /*
@@ -1643,7 +1643,7 @@ acpi_probe_children(device_t bus)
      */
     ACPI_DEBUG_PRINT((ACPI_DB_OBJECTS, "namespace scan\n"));
     AcpiWalkNamespace(ACPI_TYPE_ANY, ACPI_ROOT_OBJECT, 100, acpi_probe_child,
-	bus, NULL);
+	NULL, bus, NULL);
 
     /* Pre-allocate resources for our rman from any sysresource devices. */
     acpi_sysres_alloc(bus);
@@ -2767,7 +2767,7 @@ acpi_wake_prep_walk(int sstate)
 
     if (ACPI_SUCCESS(AcpiGetHandle(ACPI_ROOT_OBJECT, "\\_SB_", &sb_handle)))
 	AcpiWalkNamespace(ACPI_TYPE_DEVICE, sb_handle, 100,
-	    acpi_wake_prep, &sstate, NULL);
+	    acpi_wake_prep, NULL, &sstate, NULL);
     return (0);
 }
 
diff --git a/sys/dev/acpica/acpi_dock.c b/sys/dev/acpica/acpi_dock.c
index b7d2e3e444a..2e77b934b96 100644
--- a/sys/dev/acpica/acpi_dock.c
+++ b/sys/dev/acpica/acpi_dock.c
@@ -224,7 +224,7 @@ acpi_dock_insert_child(ACPI_HANDLE handle, UINT32 level, void *context,
 	ACPI_INIT_WALK_INFO	Info;
 
 	AcpiNsWalkNamespace(ACPI_TYPE_ANY, handle,
-	    100, TRUE, AcpiNsInitOneDevice, &Info, NULL);
+	    100, TRUE, AcpiNsInitOneDevice, NULL, &Info, NULL);
 #endif
 
 	dev = acpi_get_device(handle);
@@ -249,7 +249,7 @@ acpi_dock_insert_children(device_t dev)
 	status = AcpiGetHandle(ACPI_ROOT_OBJECT, "\\_SB_", &sb_handle);
 	if (ACPI_SUCCESS(status)) {
 		AcpiWalkNamespace(ACPI_TYPE_DEVICE, sb_handle,
-		    100, acpi_dock_insert_child, dev, NULL);
+		    100, acpi_dock_insert_child, NULL, dev, NULL);
 	}
 }
 
@@ -319,7 +319,7 @@ acpi_dock_eject_children(device_t dev)
 	status = AcpiGetHandle(ACPI_ROOT_OBJECT, "\\_SB_", &sb_handle);
 	if (ACPI_SUCCESS(status)) {
 		AcpiWalkNamespace(ACPI_TYPE_DEVICE, sb_handle,
-		    100, acpi_dock_eject_child, &dev, NULL);
+		    100, acpi_dock_eject_child, NULL, &dev, NULL);
 	}
 }
 
diff --git a/sys/dev/acpica/acpi_pci.c b/sys/dev/acpica/acpi_pci.c
index 7c1bd86120e..9cf064ee39d 100644
--- a/sys/dev/acpica/acpi_pci.c
+++ b/sys/dev/acpica/acpi_pci.c
@@ -314,7 +314,7 @@ acpi_pci_attach(device_t dev)
 	 */
 	pci_add_children(dev, domain, busno, sizeof(struct acpi_pci_devinfo));
 	AcpiWalkNamespace(ACPI_TYPE_DEVICE, acpi_get_handle(dev), 1,
-	    acpi_pci_save_handle, dev, NULL);
+	    acpi_pci_save_handle, NULL, dev, NULL);
 
 	return (bus_generic_attach(dev));
 }
diff --git a/sys/dev/acpica/acpi_video.c b/sys/dev/acpica/acpi_video.c
index 7d9e9540295..2bcf97ff1ec 100644
--- a/sys/dev/acpica/acpi_video.c
+++ b/sys/dev/acpica/acpi_video.c
@@ -839,7 +839,7 @@ vid_enum_outputs(ACPI_HANDLE handle,
 	argset.dod_pkg  = res;
 	argset.count    = 0;
 	status = AcpiWalkNamespace(ACPI_TYPE_DEVICE, handle, 1,
-	    vid_enum_outputs_subr, &argset, NULL);
+	    vid_enum_outputs_subr, NULL, &argset, NULL);
 	if (ACPI_FAILURE(status))
 		printf("failed walking down %s - %s\n",
 		       acpi_name(handle), AcpiFormatException(status));
diff --git a/sys/dev/adb/adb.h b/sys/dev/adb/adb.h
index 10c3db23590..acb5ae27d4c 100644
--- a/sys/dev/adb/adb.h
+++ b/sys/dev/adb/adb.h
@@ -69,6 +69,7 @@ uint8_t adb_get_device_handler(device_t dev);
 uint8_t adb_set_device_handler(device_t dev, uint8_t newhandler);
 
 size_t	adb_read_register(device_t dev, u_char reg, void *data);
+size_t	adb_write_register(device_t dev, u_char reg, size_t len, void *data);
 
 /* Bits for implementing ADB host bus adapters */
 extern devclass_t adb_devclass;
diff --git a/sys/dev/adb/adb_bus.c b/sys/dev/adb/adb_bus.c
index faab048b52c..fd46f27e963 100644
--- a/sys/dev/adb/adb_bus.c
+++ b/sys/dev/adb/adb_bus.c
@@ -402,3 +402,21 @@ adb_read_register(device_t dev, u_char reg, void *data)
 	return (result);
 }
 
+size_t 
+adb_write_register(device_t dev, u_char reg, size_t len, void *data) 
+{
+	struct adb_softc *sc;
+	struct adb_devinfo *dinfo;
+	size_t result;
+	
+	dinfo = device_get_ivars(dev);
+	sc = device_get_softc(device_get_parent(dev));
+	
+	result = adb_send_raw_packet_sync(sc->sc_dev,dinfo->address,
+		   ADB_COMMAND_LISTEN, reg, len, (u_char *)data, NULL);
+	
+	result = adb_send_raw_packet_sync(sc->sc_dev,dinfo->address,
+	           ADB_COMMAND_TALK, reg, 0, NULL, NULL);
+
+	return (result);
+}
diff --git a/sys/dev/adb/adb_mouse.c b/sys/dev/adb/adb_mouse.c
index f602f1cd08d..7eecb7ad761 100644
--- a/sys/dev/adb/adb_mouse.c
+++ b/sys/dev/adb/adb_mouse.c
@@ -35,6 +35,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -51,6 +52,8 @@
 static int adb_mouse_probe(device_t dev);
 static int adb_mouse_attach(device_t dev);
 static int adb_mouse_detach(device_t dev);
+static void adb_init_trackpad(device_t dev);
+static int adb_tapping_sysctl(SYSCTL_HANDLER_ARGS);
 
 static d_open_t  ams_open;
 static d_close_t ams_close;
@@ -77,6 +80,8 @@ struct adb_mouse_softc {
 	u_char id[4];
 
 	int buttons;
+	u_int sc_tapping;
+	int button_buf;
 	int last_buttons;
 	int xdelta, ydelta;
 
@@ -167,6 +172,8 @@ adb_mouse_attach(device_t dev)
 	sc->mode.packetsize = 5;
 
 	sc->buttons = 0;
+	sc->sc_tapping = 0;
+	sc->button_buf = 0;
 	sc->last_buttons = 0;
 	sc->packet_read_len = 0;
 
@@ -205,6 +212,7 @@ adb_mouse_attach(device_t dev)
 		case 3:
 			sc->flags |= AMS_TOUCHPAD;
 			sc->hw.type = MOUSE_PAD;
+			adb_init_trackpad(dev);
 			description = "Touchpad";
 			break;
 		}
@@ -259,6 +267,70 @@ adb_mouse_detach(device_t dev)
 	return (0);
 }
 
+static void
+adb_init_trackpad(device_t dev)
+{
+	struct adb_mouse_softc *sc;
+	struct sysctl_ctx_list *ctx;
+	struct sysctl_oid *tree;
+
+	size_t r1_len;
+	u_char r1[8];
+	u_char r2[8];
+
+	sc = device_get_softc(dev);
+
+	r1_len = adb_read_register(dev, 1, r1);
+
+	/* An Extended Mouse register1 must return 8 bytes. */
+	if (r1_len != 8)
+		return;
+
+	if((r1[6] != 0x0d))
+	{
+		r1[6] = 0x0d;
+		
+		adb_write_register(dev, 1, 8, r1); 
+      
+		r1_len = adb_read_register(dev, 1, r1);
+      
+		if (r1[6] != 0x0d)
+		{
+			device_printf(dev, "ADB Mouse = 0x%x "
+				      "(non-Extended Mode)\n", r1[6]);
+			return;
+		} else {
+			device_printf(dev, "ADB Mouse = 0x%x "
+				      "(Extended Mode)\n", r1[6]);
+			
+			/* Set ADB Extended Features to default values,
+			   enabled. */
+			r2[0] = 0x19; /* Clicking: 0x19 disabled 0x99 enabled */
+			r2[1] = 0x94; /* Dragging: 0x14 disabled 0x94 enabled */
+			r2[2] = 0x19;
+			r2[3] = 0xff; /* DragLock: 0xff disabled 0xb2 enabled */
+			r2[4] = 0xb2;
+			r2[5] = 0x8a;
+			r2[6] = 0x1b;
+		       
+			r2[7] = 0x57;  /* 0x57 bits 3:0 for W mode */
+			
+			adb_write_register(dev, 2, 8, r2);
+			
+		}
+	}
+
+	/*
+	 * Set up sysctl
+	 */
+	ctx = device_get_sysctl_ctx(dev);
+	tree = device_get_sysctl_tree(dev);
+	SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(tree), OID_AUTO, "tapping",
+			CTLTYPE_INT | CTLFLAG_RW, sc, 0, adb_tapping_sysctl,
+			"I", "Tapping the pad causes button events");
+	return;
+}
+
 static u_int 
 adb_mouse_receive_packet(device_t dev, u_char status, u_char command, 
     u_char reg, int len, u_char *data) 
@@ -266,7 +338,7 @@ adb_mouse_receive_packet(device_t dev, u_char status, u_char command,
 	struct adb_mouse_softc *sc;
 	int i = 0;
 	int xdelta, ydelta;
-	int buttons;
+	int buttons, tmp_buttons;
 
 	sc = device_get_softc(dev);
 
@@ -298,6 +370,30 @@ adb_mouse_receive_packet(device_t dev, u_char status, u_char command,
 	if (ydelta & (0x40 << 3*(len-2)))
 		ydelta |= 0xffffffc0 << 3*(len - 2);
 
+	if ((sc->flags & AMS_TOUCHPAD) && (sc->sc_tapping == 1)) {
+		tmp_buttons = buttons;
+		if (buttons == 0x12) {
+			/* Map a double tap on button 3.
+			   Keep the button state for the next sequence.
+			   A double tap sequence is followed by a single tap
+			   sequence.
+			*/
+			tmp_buttons = 0x3;
+			sc->button_buf = tmp_buttons;
+		} else if (buttons == 0x2) {
+			/* Map a single tap on button 2. But only if it is
+			   not a successor from a double tap.
+			*/
+			if (sc->button_buf != 0x3) 
+				tmp_buttons = 0x2;
+			else
+				tmp_buttons = 0;
+
+			sc->button_buf = 0;
+		}
+		buttons = tmp_buttons;
+	}
+
 	/*
 	 * Some mice report high-numbered buttons on the wrong button number,
 	 * so set the highest-numbered real button as pressed if there are
@@ -554,3 +650,36 @@ ams_ioctl(struct cdev *dev, u_long cmd, caddr_t addr, int flag,
 	return (0);
 }
 
+static int
+adb_tapping_sysctl(SYSCTL_HANDLER_ARGS)
+{
+	struct adb_mouse_softc *sc = arg1;
+	device_t dev;
+        int error;
+	u_char r2[8];
+	u_int tapping;
+
+	dev = sc->sc_dev;
+	tapping = sc->sc_tapping;
+
+	error = sysctl_handle_int(oidp, &tapping, 0, req);
+
+	if (error || !req->newptr)
+		return (error);
+
+	if (tapping == 1) {
+		adb_read_register(dev, 2, r2);
+		r2[0] = 0x99; /* enable tapping. */
+		adb_write_register(dev, 2, 8, r2);
+                sc->sc_tapping = 1;
+	} else if (tapping == 0) {
+		adb_read_register(dev, 2, r2);
+		r2[0] = 0x19; /* disable tapping. */
+		adb_write_register(dev, 2, 8, r2);
+		sc->sc_tapping = 0;
+	}
+        else
+		return (EINVAL);
+
+	return (0);
+}
diff --git a/sys/dev/adlink/adlink.c b/sys/dev/adlink/adlink.c
index 3568e8f3858..2d98f895d55 100644
--- a/sys/dev/adlink/adlink.c
+++ b/sys/dev/adlink/adlink.c
@@ -161,7 +161,8 @@ adlink_intr(void *arg)
 }
 
 static int
-adlink_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
+adlink_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nprot, vm_memattr_t *memattr)
 {
 	struct softc *sc;
 	vm_offset_t o;
diff --git a/sys/dev/ae/if_ae.c b/sys/dev/ae/if_ae.c
index 33ecfbe48ff..d3e95ef1eb8 100644
--- a/sys/dev/ae/if_ae.c
+++ b/sys/dev/ae/if_ae.c
@@ -1047,7 +1047,7 @@ ae_get_reg_eaddr(ae_softc_t *sc, uint32_t *eaddr)
 	if (AE_CHECK_EADDR_VALID(eaddr) != 0) {
 		if (bootverbose)
 			device_printf(sc->dev,
-			    "Ethetnet address registers are invalid.\n");
+			    "Ethernet address registers are invalid.\n");
 		return (EINVAL);
 	}
 	return (0);
diff --git a/sys/dev/agp/agp.c b/sys/dev/agp/agp.c
index db7856127f5..53399e23d66 100644
--- a/sys/dev/agp/agp.c
+++ b/sys/dev/agp/agp.c
@@ -868,7 +868,8 @@ agp_ioctl(struct cdev *kdev, u_long cmd, caddr_t data, int fflag, struct thread
 }
 
 static int
-agp_mmap(struct cdev *kdev, vm_offset_t offset, vm_paddr_t *paddr, int prot)
+agp_mmap(struct cdev *kdev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
 	device_t dev = kdev->si_drv1;
 	struct agp_softc *sc = device_get_softc(dev);
diff --git a/sys/dev/agp/agp_via.c b/sys/dev/agp/agp_via.c
index 76ce382488b..c561513b1d4 100644
--- a/sys/dev/agp/agp_via.c
+++ b/sys/dev/agp/agp_via.c
@@ -165,39 +165,16 @@ agp_via_attach(device_t dev)
 	struct agp_gatt *gatt;
 	int error;
 	u_int32_t agpsel;
+	u_int32_t capid;
 
-	/* XXX: This should be keying off of whether the bridge is AGP3 capable,
-	 * rather than a bunch of device ids for chipsets that happen to do 8x.
-	 */
-	switch (pci_get_devid(dev)) {
-	case 0x01981106:
-	case 0x02591106:
-	case 0x02691106:
-	case 0x02961106:
-	case 0x03141106:
-	case 0x03241106:
-	case 0x03271106:
-	case 0x03641106:
-	case 0x31231106:
-	case 0x31681106:
-	case 0x31891106:
-	case 0x32051106:
-	case 0x32581106:
-	case 0xb1981106:
-		/* The newer VIA chipsets will select the AGP version based on
-		 * what AGP versions the card supports.  We still have to
-		 * program it using the v2 registers if it has chosen to use
-		 * compatibility mode.
-		 */
+	sc->regs = via_v2_regs;
+
+	/* Look at the capability register to see if we handle AGP3 */
+	capid = pci_read_config(dev, agp_find_caps(dev) + AGP_CAPID, 4);
+	if (((capid >> 20) & 0x0f) >= 3) { 
 		agpsel = pci_read_config(dev, AGP_VIA_AGPSEL, 1);
 		if ((agpsel & (1 << 1)) == 0)
 			sc->regs = via_v3_regs;
-		else
-			sc->regs = via_v2_regs;
-		break;
-	default:
-		sc->regs = via_v2_regs;
-		break;
 	}
 	
 	error = agp_generic_attach(dev);
@@ -235,7 +212,7 @@ agp_via_attach(device_t dev)
 		pci_write_config(dev, sc->regs[REG_ATTBASE], gatt->ag_physical, 4);
 		
 		/* Enable the aperture. */
-		gartctrl = pci_read_config(dev, sc->regs[REG_ATTBASE], 4);
+		gartctrl = pci_read_config(dev, sc->regs[REG_GARTCTRL], 4);
 		pci_write_config(dev, sc->regs[REG_GARTCTRL], gartctrl | (3 << 7), 4);
 	}
 
@@ -268,7 +245,7 @@ agp_via_get_aperture(device_t dev)
 	u_int32_t apsize;
 
 	if (sc->regs == via_v2_regs) {
-		apsize = pci_read_config(dev, sc->regs[REG_APSIZE], 1) & 0x1f;
+		apsize = pci_read_config(dev, sc->regs[REG_APSIZE], 1);
 
 		/*
 		 * The size is determined by the number of low bits of
@@ -295,8 +272,14 @@ agp_via_get_aperture(device_t dev)
 			return 0x04000000;
 		case 0xf38:
 			return 0x02000000;
+		case 0xf3c:
+			return 0x01000000;
+		case 0xf3e:
+			return 0x00800000;
+		case 0xf3f:
+			return 0x00400000;
 		default:
-			device_printf(dev, "Invalid aperture setting 0x%x",
+			device_printf(dev, "Invalid aperture setting 0x%x\n",
 			    pci_read_config(dev, sc->regs[REG_APSIZE], 2));
 			return 0;
 		}
@@ -345,6 +328,15 @@ agp_via_set_aperture(device_t dev, u_int32_t aperture)
 		case 0x02000000:
 			key = 0xf38;
 			break;
+		case 0x01000000:
+			key = 0xf3c;
+			break;
+		case 0x00800000:
+			key = 0xf3e;
+			break;
+		case 0x00400000:
+			key = 0xf3f;
+			break;
 		default:
 			device_printf(dev, "Invalid aperture size (%dMb)\n",
 			    aperture / 1024 / 1024);
diff --git a/sys/dev/ahci/ahci.c b/sys/dev/ahci/ahci.c
index c46d0ce495d..cfbe43b9a8b 100644
--- a/sys/dev/ahci/ahci.c
+++ b/sys/dev/ahci/ahci.c
@@ -72,7 +72,7 @@ static void ahci_dmasetprd(void *arg, bus_dma_segment_t *segs, int nsegs, int er
 static void ahci_execute_transaction(struct ahci_slot *slot);
 static void ahci_timeout(struct ahci_slot *slot);
 static void ahci_end_transaction(struct ahci_slot *slot, enum ahci_err_type et);
-static int ahci_setup_fis(struct ahci_cmd_tab *ctp, union ccb *ccb, int tag);
+static int ahci_setup_fis(device_t dev, struct ahci_cmd_tab *ctp, union ccb *ccb, int tag);
 static void ahci_dmainit(device_t dev);
 static void ahci_dmasetupc_cb(void *xsc, bus_dma_segment_t *segs, int nsegs, int error);
 static void ahci_dmafini(device_t dev);
@@ -99,7 +99,14 @@ MALLOC_DEFINE(M_AHCI, "AHCI driver", "AHCI driver data buffers");
 static struct {
 	uint32_t	id;
 	const char	*name;
-	int		flags;
+	int		quirks;
+#define AHCI_Q_NOFORCE	1
+#define AHCI_Q_NOPMP	2
+#define AHCI_Q_NONCQ	4
+#define AHCI_Q_1CH	8
+#define AHCI_Q_2CH	16
+#define AHCI_Q_4CH	32
+#define AHCI_Q_EDGEIS	64
 } ahci_ids[] = {
 	{0x43801002, "ATI IXP600",	0},
 	{0x43901002, "ATI IXP700",	0},
@@ -108,8 +115,8 @@ static struct {
 	{0x43931002, "ATI IXP700",	0},
 	{0x43941002, "ATI IXP800",	0},
 	{0x43951002, "ATI IXP800",	0},
-	{0x26528086, "Intel ICH6",	0},
-	{0x26538086, "Intel ICH6M",	0},
+	{0x26528086, "Intel ICH6",	AHCI_Q_NOFORCE},
+	{0x26538086, "Intel ICH6M",	AHCI_Q_NOFORCE},
 	{0x26818086, "Intel ESB2",	0},
 	{0x26828086, "Intel ESB2",	0},
 	{0x26838086, "Intel ESB2",	0},
@@ -145,6 +152,15 @@ static struct {
 	{0x3b2b8086, "Intel PCH",	0},
 	{0x3b2c8086, "Intel PCH",	0},
 	{0x3b2f8086, "Intel PCH",	0},
+	{0x2361197b, "JMicron JMB361",	AHCI_Q_NOFORCE},
+	{0x2363197b, "JMicron JMB363",	AHCI_Q_NOFORCE},
+	{0x2365197b, "JMicron JMB365",	AHCI_Q_NOFORCE},
+	{0x2366197b, "JMicron JMB366",	AHCI_Q_NOFORCE},
+	{0x2368197b, "JMicron JMB368",	AHCI_Q_NOFORCE},
+	{0x611111ab, "Marvell 88SX6111", AHCI_Q_NOFORCE|AHCI_Q_1CH|AHCI_Q_EDGEIS},
+	{0x612111ab, "Marvell 88SX6121", AHCI_Q_NOFORCE|AHCI_Q_2CH|AHCI_Q_EDGEIS},
+	{0x614111ab, "Marvell 88SX6141", AHCI_Q_NOFORCE|AHCI_Q_4CH|AHCI_Q_EDGEIS},
+	{0x614511ab, "Marvell 88SX6145", AHCI_Q_NOFORCE|AHCI_Q_4CH|AHCI_Q_EDGEIS},
 	{0x044c10de, "NVIDIA MCP65",	0},
 	{0x044d10de, "NVIDIA MCP65",	0},
 	{0x044e10de, "NVIDIA MCP65",	0},
@@ -224,11 +240,45 @@ static struct {
 
 static int
 ahci_probe(device_t dev)
+{
+	char buf[64];
+	int i, valid = 0;
+	uint32_t devid = pci_get_devid(dev);
+
+	/* Is this a possible AHCI candidate? */
+	if (pci_get_class(dev) == PCIC_STORAGE &&
+	    pci_get_subclass(dev) == PCIS_STORAGE_SATA &&
+	    pci_get_progif(dev) == PCIP_STORAGE_SATA_AHCI_1_0)
+		valid = 1;
+	/* Is this a known AHCI chip? */
+	for (i = 0; ahci_ids[i].id != 0; i++) {
+		if (ahci_ids[i].id == devid &&
+		    (valid || !(ahci_ids[i].quirks & AHCI_Q_NOFORCE))) {
+			/* Do not attach JMicrons with single PCI function. */
+			if (pci_get_vendor(dev) == 0x197b &&
+			    (pci_read_config(dev, 0xdf, 1) & 0x40) == 0)
+				return (ENXIO);
+			snprintf(buf, sizeof(buf), "%s AHCI SATA controller",
+			    ahci_ids[i].name);
+			device_set_desc_copy(dev, buf);
+			return (BUS_PROBE_VENDOR);
+		}
+	}
+	if (!valid)
+		return (ENXIO);
+	device_set_desc_copy(dev, "AHCI SATA controller");
+	return (BUS_PROBE_VENDOR);
+}
+
+static int
+ahci_ata_probe(device_t dev)
 {
 	char buf[64];
 	int i;
 	uint32_t devid = pci_get_devid(dev);
 
+	if ((intptr_t)device_get_ivars(dev) >= 0)
+		return (ENXIO);
 	/* Is this a known AHCI chip? */
 	for (i = 0; ahci_ids[i].id != 0; i++) {
 		if (ahci_ids[i].id == devid) {
@@ -238,11 +288,6 @@ ahci_probe(device_t dev)
 			return (BUS_PROBE_VENDOR);
 		}
 	}
-	/* Is this a possible AHCI candidate? */
-	if (pci_get_class(dev) != PCIC_STORAGE ||
-	    pci_get_subclass(dev) != PCIS_STORAGE_SATA ||
-	    pci_get_progif(dev) != PCIP_STORAGE_SATA_AHCI_1_0)
-		return (ENXIO);
 	device_set_desc_copy(dev, "AHCI SATA controller");
 	return (BUS_PROBE_VENDOR);
 }
@@ -252,10 +297,15 @@ ahci_attach(device_t dev)
 {
 	struct ahci_controller *ctlr = device_get_softc(dev);
 	device_t child;
-	int	error, unit, speed;
+	int	error, unit, speed, i;
+	uint32_t devid = pci_get_devid(dev);
 	u_int32_t version;
 
 	ctlr->dev = dev;
+	i = 0;
+	while (ahci_ids[i].id != 0 && ahci_ids[i].id != devid)
+		i++;
+	ctlr->quirks = ahci_ids[i].quirks;
 	resource_int_value(device_get_name(dev),
 	    device_get_unit(dev), "ccc", &ctlr->ccc);
 	/* if we have a memory BAR(5) we are likely on an AHCI part */
@@ -282,10 +332,32 @@ ahci_attach(device_t dev)
 		rman_fini(&ctlr->sc_iomem);
 		return (error);
 	};
-	/* Get the number of HW channels */
+	/* Get the HW capabilities */
+	version = ATA_INL(ctlr->r_mem, AHCI_VS);
+	ctlr->caps = ATA_INL(ctlr->r_mem, AHCI_CAP);
+	if (version >= 0x00010020)
+		ctlr->caps2 = ATA_INL(ctlr->r_mem, AHCI_CAP2);
 	ctlr->ichannels = ATA_INL(ctlr->r_mem, AHCI_PI);
+	if (ctlr->quirks & AHCI_Q_1CH) {
+		ctlr->caps &= ~AHCI_CAP_NPMASK;
+		ctlr->ichannels &= 0x01;
+	}
+	if (ctlr->quirks & AHCI_Q_2CH) {
+		ctlr->caps &= ~AHCI_CAP_NPMASK;
+		ctlr->caps |= 1;
+		ctlr->ichannels &= 0x03;
+	}
+	if (ctlr->quirks & AHCI_Q_4CH) {
+		ctlr->caps &= ~AHCI_CAP_NPMASK;
+		ctlr->caps |= 3;
+		ctlr->ichannels &= 0x0f;
+	}
 	ctlr->channels = MAX(flsl(ctlr->ichannels),
-	    (ATA_INL(ctlr->r_mem, AHCI_CAP) & AHCI_CAP_NPMASK) + 1);
+	    (ctlr->caps & AHCI_CAP_NPMASK) + 1);
+	if (ctlr->quirks & AHCI_Q_NOPMP)
+		ctlr->caps &= ~AHCI_CAP_SPM;
+	if (ctlr->quirks & AHCI_Q_NONCQ)
+		ctlr->caps &= ~AHCI_CAP_SNCQ;
 	/* Setup interrupts. */
 	if (ahci_setup_interrupt(dev)) {
 		bus_release_resource(dev, SYS_RES_MEMORY, ctlr->r_rid, ctlr->r_mem);
@@ -293,10 +365,6 @@ ahci_attach(device_t dev)
 		return ENXIO;
 	}
 	/* Announce HW capabilities. */
-	version = ATA_INL(ctlr->r_mem, AHCI_VS);
-	ctlr->caps = ATA_INL(ctlr->r_mem, AHCI_CAP);
-	if (version >= 0x00010020)
-		ctlr->caps2 = ATA_INL(ctlr->r_mem, AHCI_CAP2);
 	speed = (ctlr->caps & AHCI_CAP_ISS) >> AHCI_CAP_ISS_SHIFT;
 	device_printf(dev,
 		    "AHCI v%x.%02x with %d %sGbps ports, Port Multiplier %s\n",
@@ -528,13 +596,18 @@ ahci_intr(void *data)
 		unit = irq->r_irq_rid - 1;
 		is = ATA_INL(ctlr->r_mem, AHCI_IS);
 	}
+	/* Some controllers have edge triggered IS. */
+	if (ctlr->quirks & AHCI_Q_EDGEIS)
+		ATA_OUTL(ctlr->r_mem, AHCI_IS, is);
 	for (; unit < ctlr->channels; unit++) {
 		if ((is & (1 << unit)) != 0 &&
 		    (arg = ctlr->interrupt[unit].argument)) {
-			ctlr->interrupt[unit].function(arg);
-			ATA_OUTL(ctlr->r_mem, AHCI_IS, 1 << unit);
+				ctlr->interrupt[unit].function(arg);
 		}
 	}
+	/* AHCI declares level triggered IS. */
+	if (!(ctlr->quirks & AHCI_Q_EDGEIS))
+		ATA_OUTL(ctlr->r_mem, AHCI_IS, is);
 }
 
 /*
@@ -665,6 +738,25 @@ static driver_t ahci_driver = {
         sizeof(struct ahci_controller)
 };
 DRIVER_MODULE(ahci, pci, ahci_driver, ahci_devclass, 0, 0);
+static device_method_t ahci_ata_methods[] = {
+	DEVMETHOD(device_probe,     ahci_ata_probe),
+	DEVMETHOD(device_attach,    ahci_attach),
+	DEVMETHOD(device_detach,    ahci_detach),
+	DEVMETHOD(device_suspend,   ahci_suspend),
+	DEVMETHOD(device_resume,    ahci_resume),
+	DEVMETHOD(bus_print_child,  ahci_print_child),
+	DEVMETHOD(bus_alloc_resource,       ahci_alloc_resource),
+	DEVMETHOD(bus_release_resource,     ahci_release_resource),
+	DEVMETHOD(bus_setup_intr,   ahci_setup_intr),
+	DEVMETHOD(bus_teardown_intr,ahci_teardown_intr),
+	{ 0, 0 }
+};
+static driver_t ahci_ata_driver = {
+        "ahci",
+        ahci_ata_methods,
+        sizeof(struct ahci_controller)
+};
+DRIVER_MODULE(ahci, atapci, ahci_ata_driver, ahci_devclass, 0, 0);
 MODULE_VERSION(ahci, 1);
 MODULE_DEPEND(ahci, cam, 1, 1, 1);
 
@@ -682,12 +774,13 @@ ahci_ch_attach(device_t dev)
 	struct ahci_controller *ctlr = device_get_softc(device_get_parent(dev));
 	struct ahci_channel *ch = device_get_softc(dev);
 	struct cam_devq *devq;
-	int rid, error;
+	int rid, error, i, sata_rev = 0;
 
 	ch->dev = dev;
 	ch->unit = (intptr_t)device_get_ivars(dev);
 	ch->caps = ctlr->caps;
 	ch->caps2 = ctlr->caps2;
+	ch->quirks = ctlr->quirks;
 	ch->numslots = ((ch->caps & AHCI_CAP_NCS) >> AHCI_CAP_NCS_SHIFT) + 1,
 	mtx_init(&ch->mtx, "AHCI channel lock", NULL, MTX_DEF);
 	resource_int_value(device_get_name(dev),
@@ -700,9 +793,16 @@ ahci_ch_attach(device_t dev)
 	    pci_get_subvendor(ctlr->dev) == 0x1043 &&
 	    pci_get_subdevice(ctlr->dev) == 0x81e4 &&
 	    ch->unit == 0)
-		ch->sata_rev = 1;
+		sata_rev = 1;
 	resource_int_value(device_get_name(dev),
-	    device_get_unit(dev), "sata_rev", &ch->sata_rev);
+	    device_get_unit(dev), "sata_rev", &sata_rev);
+	for (i = 0; i < 16; i++) {
+		ch->user[i].revision = sata_rev;
+		ch->user[i].mode = 0;
+		ch->user[i].bytecount = 8192;
+		ch->user[i].tags = ch->numslots;
+		ch->curr[i] = ch->user[i];
+	}
 	rid = ch->unit;
 	if (!(ch->r_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
 	    &rid, RF_ACTIVE)))
@@ -734,7 +834,9 @@ ahci_ch_attach(device_t dev)
 	/* Construct SIM entry */
 	ch->sim = cam_sim_alloc(ahciaction, ahcipoll, "ahcich", ch,
 	    device_get_unit(dev), &ch->mtx,
-	    min(2, ch->numslots), ch->numslots, devq);
+	    min(2, ch->numslots),
+	    (ch->caps & AHCI_CAP_SNCQ) ? ch->numslots : 0,
+	    devq);
 	if (ch->sim == NULL) {
 		device_printf(dev, "unable to allocate sim\n");
 		error = ENOMEM;
@@ -856,7 +958,7 @@ static driver_t ahcich_driver = {
         ahcich_methods,
         sizeof(struct ahci_channel)
 };
-DRIVER_MODULE(ahcich, ahci, ahcich_driver, ahci_devclass, 0, 0);
+DRIVER_MODULE(ahcich, ahci, ahcich_driver, ahcich_devclass, 0, 0);
 
 struct ahci_dc_cb_args {
 	bus_addr_t maddr;
@@ -1025,7 +1127,8 @@ ahci_notify_events(device_t dev, u_int32_t status)
 	struct cam_path *dpath;
 	int i;
 
-	ATA_OUTL(ch->r_mem, AHCI_P_SNTF, status);
+	if (ch->caps & AHCI_CAP_SSNTF)
+		ATA_OUTL(ch->r_mem, AHCI_P_SNTF, status);
 	if (bootverbose)
 		device_printf(dev, "SNTF 0x%04x\n", status);
 	for (i = 0; i < 16; i++) {
@@ -1084,8 +1187,16 @@ ahci_ch_intr(void *data)
 	/* Read command statuses. */
 	sstatus = ATA_INL(ch->r_mem, AHCI_P_SACT);
 	cstatus = ATA_INL(ch->r_mem, AHCI_P_CI);
-	if ((istatus & AHCI_P_IX_SDB) && (ch->caps & AHCI_CAP_SSNTF))
-		sntf = ATA_INL(ch->r_mem, AHCI_P_SNTF);
+	if (istatus & AHCI_P_IX_SDB) {
+		if (ch->caps & AHCI_CAP_SSNTF)
+			sntf = ATA_INL(ch->r_mem, AHCI_P_SNTF);
+		else {
+			u_int8_t *fis = ch->dma.rfis + 0x58;
+
+			if (fis[1] & 0x80)
+				sntf = (1 << (fis[1] & 0x0f));
+		}
+	}
 	/* Process PHY events */
 	if (istatus & (AHCI_P_IX_PC | AHCI_P_IX_PRC | AHCI_P_IX_OF |
 	    AHCI_P_IX_IF | AHCI_P_IX_HBD | AHCI_P_IX_HBF | AHCI_P_IX_TFE)) {
@@ -1178,6 +1289,10 @@ ahci_check_collision(device_t dev, union ccb *ccb)
 		if (ch->numtslots != 0 &&
 		    ch->taggedtarget != ccb->ccb_h.target_id)
 			return (1);
+		/* Tagged command while we have no supported tag free. */
+		if (((~ch->oslots) & (0xffffffff >> (32 -
+		    ch->curr[ccb->ccb_h.target_id].tags))) == 0)
+			return (1);
 	} else {
 		/* Untagged command while tagged are active. */
 		if (ch->numrslots != 0 && ch->numtslots != 0)
@@ -1201,15 +1316,21 @@ ahci_begin_transaction(device_t dev, union ccb *ccb)
 {
 	struct ahci_channel *ch = device_get_softc(dev);
 	struct ahci_slot *slot;
-	int tag;
+	int tag, tags;
 
 	/* Choose empty slot. */
+	tags = ch->numslots;
+	if ((ccb->ccb_h.func_code == XPT_ATA_IO) &&
+	    (ccb->ataio.cmd.flags & CAM_ATAIO_FPDMA))
+		tags = ch->curr[ccb->ccb_h.target_id].tags;
 	tag = ch->lastslot;
-	while (ch->slot[tag].state != AHCI_SLOT_EMPTY) {
-		if (++tag >= ch->numslots)
+	while (1) {
+		if (tag >= tags)
 			tag = 0;
-		KASSERT(tag != ch->lastslot, ("ahci: ALL SLOTS BUSY!"));
-	}
+		if (ch->slot[tag].state == AHCI_SLOT_EMPTY)
+			break;
+		tag++;
+	};
 	ch->lastslot = tag;
 	/* Occupy chosen slot. */
 	slot = &ch->slot[tag];
@@ -1218,6 +1339,7 @@ ahci_begin_transaction(device_t dev, union ccb *ccb)
 	if (ch->numrslots == 0 && ch->pm_level > 3)
 		callout_stop(&ch->pm_timer);
 	/* Update channel stats. */
+	ch->oslots |= (1 << slot->slot);
 	ch->numrslots++;
 	if ((ccb->ccb_h.func_code == XPT_ATA_IO) &&
 	    (ccb->ataio.cmd.flags & CAM_ATAIO_FPDMA)) {
@@ -1295,7 +1417,7 @@ ahci_execute_transaction(struct ahci_slot *slot)
 	ctp = (struct ahci_cmd_tab *)
 		(ch->dma.work + AHCI_CT_OFFSET + (AHCI_CT_SIZE * slot->slot));
 	/* Setup the FIS for this request */
-	if (!(fis_size = ahci_setup_fis(ctp, ccb, slot->slot))) {
+	if (!(fis_size = ahci_setup_fis(dev, ctp, ccb, slot->slot))) {
 		device_printf(ch->dev, "Setting up SATA FIS failed\n");
 		ahci_end_transaction(slot, AHCI_ERR_INVALID);
 		return;
@@ -1538,6 +1660,7 @@ ahci_end_transaction(struct ahci_slot *slot, enum ahci_err_type et)
 		ccb->ccb_h.status |= CAM_REQ_CMP_ERR;
 	}
 	/* Free slot. */
+	ch->oslots &= ~(1 << slot->slot);
 	ch->rslots &= ~(1 << slot->slot);
 	ch->aslots &= ~(1 << slot->slot);
 	slot->state = AHCI_SLOT_EMPTY;
@@ -1567,7 +1690,7 @@ ahci_end_transaction(struct ahci_slot *slot, enum ahci_err_type et)
 	} else
 		xpt_done(ccb);
 	/* Unfreeze frozen command. */
-	if (ch->frozen && ch->numrslots == 0) {
+	if (ch->frozen && !ahci_check_collision(dev, ch->frozen)) {
 		union ccb *fccb = ch->frozen;
 		ch->frozen = NULL;
 		ahci_begin_transaction(dev, fccb);
@@ -1867,8 +1990,9 @@ ahci_reset(device_t dev)
 }
 
 static int
-ahci_setup_fis(struct ahci_cmd_tab *ctp, union ccb *ccb, int tag)
+ahci_setup_fis(device_t dev, struct ahci_cmd_tab *ctp, union ccb *ccb, int tag)
 {
+	struct ahci_channel *ch = device_get_softc(dev);
 	u_int8_t *fis = &ctp->cfis[0];
 
 	bzero(ctp->cfis, 64);
@@ -1877,7 +2001,8 @@ ahci_setup_fis(struct ahci_cmd_tab *ctp, union ccb *ccb, int tag)
 	if (ccb->ccb_h.func_code == XPT_SCSI_IO) {
 		fis[1] |= 0x80;
 		fis[2] = ATA_PACKET_CMD;
-		if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE)
+		if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE &&
+		    ch->curr[ccb->ccb_h.target_id].mode >= ATA_DMA)
 			fis[3] = ATA_F_DMA;
 		else {
 			fis[5] = ccb->csio.dxfer_len;
@@ -1957,6 +2082,7 @@ static int
 ahci_sata_phy_reset(device_t dev, int quick)
 {
 	struct ahci_channel *ch = device_get_softc(dev);
+	int sata_rev;
 	uint32_t val;
 
 	if (quick) {
@@ -1967,11 +2093,12 @@ ahci_sata_phy_reset(device_t dev, int quick)
 
 	if (bootverbose)
 		device_printf(dev, "hardware reset ...\n");
-	if (ch->sata_rev == 1)
+	sata_rev = ch->user[ch->pm_present ? 15 : 0].revision;
+	if (sata_rev == 1)
 		val = ATA_SC_SPD_SPEED_GEN1;
-	else if (ch->sata_rev == 2)
+	else if (sata_rev == 2)
 		val = ATA_SC_SPD_SPEED_GEN2;
-	else if (ch->sata_rev == 3)
+	else if (sata_rev == 3)
 		val = ATA_SC_SPD_SPEED_GEN3;
 	else
 		val = 0;
@@ -2028,10 +2155,22 @@ ahciaction(struct cam_sim *sim, union ccb *ccb)
 	case XPT_SET_TRAN_SETTINGS:
 	{
 		struct	ccb_trans_settings *cts = &ccb->cts;
+		struct	ahci_device *d; 
 
-		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_PM) {
+		if (cts->type == CTS_TYPE_CURRENT_SETTINGS)
+			d = &ch->curr[ccb->ccb_h.target_id];
+		else
+			d = &ch->user[ccb->ccb_h.target_id];
+		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_REVISION)
+			d->revision = cts->xport_specific.sata.revision;
+		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_MODE)
+			d->mode = cts->xport_specific.sata.mode;
+		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_BYTECOUNT)
+			d->bytecount = min(8192, cts->xport_specific.sata.bytecount);
+		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_TAGS)
+			d->tags = min(ch->numslots, cts->xport_specific.sata.tags);
+		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_PM)
 			ch->pm_present = cts->xport_specific.sata.pm_present;
-		}
 		ccb->ccb_h.status = CAM_REQ_CMP;
 		xpt_done(ccb);
 		break;
@@ -2040,36 +2179,41 @@ ahciaction(struct cam_sim *sim, union ccb *ccb)
 	/* Get default/user set transfer settings for the target */
 	{
 		struct	ccb_trans_settings *cts = &ccb->cts;
+		struct  ahci_device *d;
 		uint32_t status;
 
+		if (cts->type == CTS_TYPE_CURRENT_SETTINGS)
+			d = &ch->curr[ccb->ccb_h.target_id];
+		else
+			d = &ch->user[ccb->ccb_h.target_id];
 		cts->protocol = PROTO_ATA;
 		cts->protocol_version = PROTO_VERSION_UNSPECIFIED;
 		cts->transport = XPORT_SATA;
 		cts->transport_version = XPORT_VERSION_UNSPECIFIED;
 		cts->proto_specific.valid = 0;
 		cts->xport_specific.sata.valid = 0;
-		if (cts->type == CTS_TYPE_CURRENT_SETTINGS)
+		if (cts->type == CTS_TYPE_CURRENT_SETTINGS &&
+		    (ccb->ccb_h.target_id == 15 ||
+		    (ccb->ccb_h.target_id == 0 && !ch->pm_present))) {
 			status = ATA_INL(ch->r_mem, AHCI_P_SSTS) & ATA_SS_SPD_MASK;
-		else
-			status = ATA_INL(ch->r_mem, AHCI_P_SCTL) & ATA_SC_SPD_MASK;
-		if (status & ATA_SS_SPD_GEN3) {
-			cts->xport_specific.sata.bitrate = 600000;
-			cts->xport_specific.sata.valid |= CTS_SATA_VALID_SPEED;
-		} else if (status & ATA_SS_SPD_GEN2) {
-			cts->xport_specific.sata.bitrate = 300000;
-			cts->xport_specific.sata.valid |= CTS_SATA_VALID_SPEED;
-		} else if (status & ATA_SS_SPD_GEN1) {
-			cts->xport_specific.sata.bitrate = 150000;
-			cts->xport_specific.sata.valid |= CTS_SATA_VALID_SPEED;
-		}
-		if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
-			cts->xport_specific.sata.pm_present =
-			    (ATA_INL(ch->r_mem, AHCI_P_CMD) & AHCI_P_CMD_PMA) ?
-			    1 : 0;
+			if (status & 0x0f0) {
+				cts->xport_specific.sata.revision =
+				    (status & 0x0f0) >> 4;
+				cts->xport_specific.sata.valid |=
+				    CTS_SATA_VALID_REVISION;
+			}
 		} else {
-			cts->xport_specific.sata.pm_present = ch->pm_present;
+			cts->xport_specific.sata.revision = d->revision;
+			cts->xport_specific.sata.valid |= CTS_SATA_VALID_REVISION;
 		}
+		cts->xport_specific.sata.mode = d->mode;
+		cts->xport_specific.sata.valid |= CTS_SATA_VALID_MODE;
+		cts->xport_specific.sata.bytecount = d->bytecount;
+		cts->xport_specific.sata.valid |= CTS_SATA_VALID_BYTECOUNT;
+		cts->xport_specific.sata.pm_present = ch->pm_present;
 		cts->xport_specific.sata.valid |= CTS_SATA_VALID_PM;
+		cts->xport_specific.sata.tags = d->tags;
+		cts->xport_specific.sata.valid |= CTS_SATA_VALID_TAGS;
 		ccb->ccb_h.status = CAM_REQ_CMP;
 		xpt_done(ccb);
 		break;
@@ -2119,7 +2263,9 @@ ahciaction(struct cam_sim *sim, union ccb *ccb)
 		struct ccb_pathinq *cpi = &ccb->cpi;
 
 		cpi->version_num = 1; /* XXX??? */
-		cpi->hba_inquiry = PI_SDTR_ABLE | PI_TAG_ABLE;
+		cpi->hba_inquiry = PI_SDTR_ABLE;
+		if (ch->caps & AHCI_CAP_SNCQ)
+			cpi->hba_inquiry |= PI_TAG_ABLE;
 		if (ch->caps & AHCI_CAP_SPM)
 			cpi->hba_inquiry |= PI_SATAPM;
 		cpi->target_sprt = 0;
diff --git a/sys/dev/ahci/ahci.h b/sys/dev/ahci/ahci.h
index 0686f6766c3..e11f84f489d 100644
--- a/sys/dev/ahci/ahci.h
+++ b/sys/dev/ahci/ahci.h
@@ -340,6 +340,13 @@ struct ahci_slot {
     struct callout              timeout;        /* Execution timeout */
 };
 
+struct ahci_device {
+	int			revision;
+	int			mode;
+	u_int			bytecount;
+	u_int			tags;
+};
+
 /* structure describing an ATA channel */
 struct ahci_channel {
 	device_t		dev;            /* Device handle */
@@ -352,15 +359,16 @@ struct ahci_channel {
 	struct cam_path		*path;
 	uint32_t		caps;		/* Controller capabilities */
 	uint32_t		caps2;		/* Controller capabilities */
+	int			quirks;
 	int			numslots;	/* Number of present slots */
 	int			pm_level;	/* power management level */
-	int			sata_rev;	/* Maximum allowed SATA generation */
 
 	struct ahci_slot	slot[AHCI_MAX_SLOTS];
 	union ccb		*hold[AHCI_MAX_SLOTS];
 	struct mtx		mtx;		/* state lock */
 	int			devices;        /* What is present */
 	int			pm_present;	/* PM presence reported */
+	uint32_t		oslots;		/* Occupied slots */
 	uint32_t		rslots;		/* Running slots */
 	uint32_t		aslots;		/* Slots with atomic commands  */
 	int			numrslots;	/* Number of running slots */
@@ -371,6 +379,9 @@ struct ahci_channel {
 	int			taggedtarget;	/* Last tagged target */
 	union ccb		*frozen;	/* Frozen command */
 	struct callout		pm_timer;	/* Power management events */
+
+	struct ahci_device	user[16];	/* User-specified settings */
+	struct ahci_device	curr[16];	/* Current settings */
 };
 
 /* structure describing a AHCI controller */
@@ -391,6 +402,7 @@ struct ahci_controller {
 	} irqs[16];
 	uint32_t		caps;		/* Controller capabilities */
 	uint32_t		caps2;		/* Controller capabilities */
+	int			quirks;
 	int			numirqs;
 	int			channels;
 	int			ichannels;
diff --git a/sys/dev/aic7xxx/ahd_pci.c b/sys/dev/aic7xxx/ahd_pci.c
index f077c89d73a..3a011616008 100644
--- a/sys/dev/aic7xxx/ahd_pci.c
+++ b/sys/dev/aic7xxx/ahd_pci.c
@@ -134,6 +134,7 @@ ahd_pci_attach(device_t dev)
 		return (error);
 	}
 
+	ahd_sysctl(ahd);
 	ahd_attach(ahd);
 	return (0);
 }
@@ -198,6 +199,7 @@ ahd_pci_map_registers(struct ahd_softc *ahd)
 				bus_release_resource(ahd->dev_softc, regs_type,
 						     regs_id, regs);
 				regs = NULL;
+				AHD_CORRECTABLE_ERROR(ahd);
 			} else {
 				command &= ~PCIM_CMD_PORTEN;
 				aic_pci_write_config(ahd->dev_softc,
@@ -214,6 +216,7 @@ ahd_pci_map_registers(struct ahd_softc *ahd)
 		if (regs == NULL) {
 			device_printf(ahd->dev_softc,
 				      "can't allocate register resources\n");
+			AHD_UNCORRECTABLE_ERROR(ahd);
 			return (ENOMEM);
 		}
 		ahd->tags[0] = rman_get_bustag(regs);
@@ -226,6 +229,7 @@ ahd_pci_map_registers(struct ahd_softc *ahd)
 		if (regs2 == NULL) {
 			device_printf(ahd->dev_softc,
 				      "can't allocate register resources\n");
+			AHD_UNCORRECTABLE_ERROR(ahd);
 			return (ENOMEM);
 		}
 		ahd->tags[1] = rman_get_bustag(regs2);
diff --git a/sys/dev/aic7xxx/aic79xx.c b/sys/dev/aic7xxx/aic79xx.c
index aa771af927d..feee494e052 100644
--- a/sys/dev/aic7xxx/aic79xx.c
+++ b/sys/dev/aic7xxx/aic79xx.c
@@ -401,6 +401,7 @@ ahd_flush_qoutfifo(struct ahd_softc *ahd)
 		if (scb == NULL) {
 			printf("%s: Warning - GSFIFO SCB %d invalid\n",
 			       ahd_name(ahd), scbid);
+			AHD_CORRECTABLE_ERROR(ahd);
 			continue;
 		}
 		/*
@@ -525,6 +526,7 @@ rescan_fifos:
 		if (scb == NULL) {
 			printf("%s: Warning - DMA-up and complete "
 			       "SCB %d invalid\n", ahd_name(ahd), scbid);
+			AHD_CORRECTABLE_ERROR(ahd);
 			continue;
 		}
 		hscb_ptr = (uint8_t *)scb->hscb;
@@ -546,6 +548,7 @@ rescan_fifos:
 		if (scb == NULL) {
 			printf("%s: Warning - Complete Qfrz SCB %d invalid\n",
 			       ahd_name(ahd), scbid);
+			AHD_CORRECTABLE_ERROR(ahd);
 			continue;
 		}
 
@@ -563,6 +566,7 @@ rescan_fifos:
 		if (scb == NULL) {
 			printf("%s: Warning - Complete SCB %d invalid\n",
 			       ahd_name(ahd), scbid);
+			AHD_CORRECTABLE_ERROR(ahd);
 			continue;
 		}
 
@@ -870,6 +874,7 @@ ahd_run_qoutfifo(struct ahd_softc *ahd)
 			       "(cmdcmplt)\nQOUTPOS = %d\n",
 			       ahd_name(ahd), scb_index,
 			       ahd->qoutfifonext);
+			AHD_CORRECTABLE_ERROR(ahd);
 			ahd_dump_card_state(ahd);
 		} else if ((completion->sg_status & SG_STATUS_VALID) != 0) {
 			ahd_handle_scb_status(ahd, scb);
@@ -897,9 +902,11 @@ ahd_handle_hwerrint(struct ahd_softc *ahd)
 
 	error = ahd_inb(ahd, ERROR);
 	for (i = 0; i < num_errors; i++) {
-		if ((error & ahd_hard_errors[i].errno) != 0)
+		if ((error & ahd_hard_errors[i].errno) != 0) {
 			printf("%s: hwerrint, %s\n",
 			       ahd_name(ahd), ahd_hard_errors[i].errmesg);
+			AHD_UNCORRECTABLE_ERROR(ahd);
+		}
 	}
 
 	ahd_dump_card_state(ahd);
@@ -990,6 +997,7 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
 		       ahd_name(ahd));
 		ahd_dump_card_state(ahd);
 		ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE);
+		AHD_UNCORRECTABLE_ERROR(ahd);
 		break;
 	case STATUS_OVERRUN:
 	{
@@ -1005,6 +1013,7 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
 		printf("SCB %d Packetized Status Overrun", scbid);
 		ahd_dump_card_state(ahd);
 		ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE);
+		AHD_UNCORRECTABLE_ERROR(ahd);
 		break;
 	}
 	case CFG4ISTAT_INTR:
@@ -1017,6 +1026,7 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
 		if (scb == NULL) {
 			ahd_dump_card_state(ahd);
 			printf("CFG4ISTAT: Free SCB %d referenced", scbid);
+			AHD_FATAL_ERROR(ahd);
 			panic("For safety");
 		}
 		ahd_outq(ahd, HADDR, scb->sense_busaddr);
@@ -1044,6 +1054,7 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
 		case P_MESGIN:
 			ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE);
 			printf("%s: Issued Bus Reset.\n", ahd_name(ahd));
+			AHD_UNCORRECTABLE_ERROR(ahd);
 			break;
 		case P_COMMAND:
 		{
@@ -1068,6 +1079,7 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
 			scbid = ahd_get_scbptr(ahd);
 			scb = ahd_lookup_scb(ahd, scbid);
 			if (scb == NULL) {
+				AHD_CORRECTABLE_ERROR(ahd);
 				printf("Invalid phase with no valid SCB.  "
 				       "Resetting bus.\n");
 				ahd_reset_channel(ahd, 'A',
@@ -1127,6 +1139,7 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
 #ifdef AHD_DEBUG
 			if ((ahd_debug & AHD_SHOW_RECOVERY) != 0) {
 				ahd_print_path(ahd, scb);
+				AHD_CORRECTABLE_ERROR(ahd);
 				printf("Unexpected command phase from "
 				       "packetized target\n");
 			}
@@ -1214,6 +1227,7 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
 			 && bus_phase != P_MESGOUT) {
 				printf("ahd_intr: HOST_MSG_LOOP bad "
 				       "phase 0x%x\n", bus_phase);
+				AHD_CORRECTABLE_ERROR(ahd);
 				/*
 				 * Probably transitioned to bus free before
 				 * we got here.  Just punt the message.
@@ -1316,6 +1330,7 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
 		       ahd_name(ahd), 'A',
 		       SCSIID_TARGET(ahd, ahd_inb(ahd, SAVED_SCSIID)),
 		       lastphase, ahd_inb(ahd, SCSISIGI));
+		AHD_CORRECTABLE_ERROR(ahd);
 		break;
 	}
 	case MISSED_BUSFREE:
@@ -1328,6 +1343,7 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
 		       ahd_name(ahd), 'A',
 		       SCSIID_TARGET(ahd, ahd_inb(ahd, SAVED_SCSIID)),
 		       lastphase, ahd_inb(ahd, SCSISIGI));
+		AHD_CORRECTABLE_ERROR(ahd);
 		ahd_restart(ahd);
 		return;
 	}
@@ -1387,6 +1403,7 @@ ahd_handle_seqint(struct ahd_softc *ahd, u_int intstat)
 		       devinfo.lun);
 		scbid = ahd_get_scbptr(ahd);
 		scb = ahd_lookup_scb(ahd, scbid);
+		AHD_CORRECTABLE_ERROR(ahd);
 		if (scb != NULL
 		 && (scb->flags & SCB_RECOVERY_SCB) != 0)
 			/*
@@ -1570,11 +1587,13 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
 
 		printf("%s: SCSI offset overrun detected.  Resetting bus.\n",
 		       ahd_name(ahd));
+		AHD_CORRECTABLE_ERROR(ahd);
 		ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE);
 	} else if ((status & SCSIRSTI) != 0) {
 
 		printf("%s: Someone reset channel A\n", ahd_name(ahd));
 		ahd_reset_channel(ahd, 'A', /*Initiate Reset*/FALSE);
+		AHD_UNCORRECTABLE_ERROR(ahd);
 	} else if ((status & SCSIPERR) != 0) {
 
 		/* Make sure the sequencer is in a safe location. */
@@ -1619,6 +1638,7 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
 			       "valid during SELTO scb(0x%x)\n",
 			       ahd_name(ahd), scbid);
 			ahd_dump_card_state(ahd);
+			AHD_UNCORRECTABLE_ERROR(ahd);
 		} else {
 			struct ahd_devinfo devinfo;
 #ifdef AHD_DEBUG
@@ -1654,6 +1674,7 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
 	} else if (status3 != 0) {
 		printf("%s: SCSI Cell parity error SSTAT3 == 0x%x\n",
 		       ahd_name(ahd), status3);
+		AHD_CORRECTABLE_ERROR(ahd);
 		ahd_outb(ahd, CLRSINT3, status3);
 	} else if ((lqistat1 & (LQIPHASE_LQ|LQIPHASE_NLQ)) != 0) {
 
@@ -1712,6 +1733,7 @@ ahd_handle_scsiint(struct ahd_softc *ahd, u_int intstat)
 				       "during unexpected busfree\n",
 				       ahd_name(ahd), scbid, mode);
 				packetized = 0;
+				AHD_CORRECTABLE_ERROR(ahd);
 			} else
 				packetized = (scb->flags & SCB_PACKETIZED) != 0;
 			clear_fifo = 1;
@@ -1856,6 +1878,7 @@ ahd_handle_transmission_error(struct ahd_softc *ahd)
 		ahd_scsisigi_print(curphase, &cur_col, 50);
 		ahd_perrdiag_print(perrdiag, &cur_col, 50);
 		printf("\n");
+		AHD_CORRECTABLE_ERROR(ahd);
 		ahd_dump_card_state(ahd);
 	}
 
@@ -1864,6 +1887,7 @@ ahd_handle_transmission_error(struct ahd_softc *ahd)
 			printf("%s: Gross protocol error during incoming "
 			       "packet.  lqistat1 == 0x%x.  Resetting bus.\n",
 			       ahd_name(ahd), lqistat1);
+			AHD_UNCORRECTABLE_ERROR(ahd);
 		}
 		ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE);
 		return;
@@ -1891,6 +1915,7 @@ ahd_handle_transmission_error(struct ahd_softc *ahd)
 		 */
 		ahd_outb(ahd, LQCTL2, LQIRETRY);
 		printf("LQIRetry for LQICRCI_LQ to release ACK\n");
+		AHD_CORRECTABLE_ERROR(ahd);
 	} else if ((lqistat1 & LQICRCI_NLQ) != 0) {
 		/*
 		 * We detected a CRC error in a NON-LQ packet.
@@ -1942,6 +1967,7 @@ ahd_handle_transmission_error(struct ahd_softc *ahd)
 		if (scb == NULL) {
 			printf("%s: No SCB valid for LQICRC_NLQ.  "
 			       "Resetting bus\n", ahd_name(ahd));
+			AHD_UNCORRECTABLE_ERROR(ahd);
 			ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE);
 			return;
 		}
@@ -1999,9 +2025,11 @@ ahd_handle_lqiphase_error(struct ahd_softc *ahd, u_int lqistat1)
 	 && (ahd_inb(ahd, MDFFSTAT) & DLZERO) != 0) {
 		if ((lqistat1 & LQIPHASE_LQ) != 0) {
 			printf("LQIRETRY for LQIPHASE_LQ\n");
+			AHD_CORRECTABLE_ERROR(ahd);
 			ahd_outb(ahd, LQCTL2, LQIRETRY);
 		} else if ((lqistat1 & LQIPHASE_NLQ) != 0) {
 			printf("LQIRETRY for LQIPHASE_NLQ\n");
+			AHD_CORRECTABLE_ERROR(ahd);
 			ahd_outb(ahd, LQCTL2, LQIRETRY);
 		} else
 			panic("ahd_handle_lqiphase_error: No phase errors\n");
@@ -2010,6 +2038,7 @@ ahd_handle_lqiphase_error(struct ahd_softc *ahd, u_int lqistat1)
 		ahd_unpause(ahd);
 	} else {
 		printf("Reseting Channel for LQI Phase error\n");
+		AHD_CORRECTABLE_ERROR(ahd);
 		ahd_dump_card_state(ahd);
 		ahd_reset_channel(ahd, 'A', /*Initiate Reset*/TRUE);
 	}
@@ -2099,6 +2128,7 @@ ahd_handle_pkt_busfree(struct ahd_softc *ahd, u_int busfreetime)
 				ahd_print_path(ahd, scb);
 				printf("Probable outgoing LQ CRC error.  "
 				       "Retrying command\n");
+				AHD_CORRECTABLE_ERROR(ahd);
 			}
 			scb->crc_retry_count++;
 		} else {
@@ -2134,6 +2164,7 @@ ahd_handle_pkt_busfree(struct ahd_softc *ahd, u_int busfreetime)
 		scb = ahd_lookup_scb(ahd, scbid);
 		ahd_print_path(ahd, scb);
 		printf("Unexpected PKT busfree condition\n");
+		AHD_UNCORRECTABLE_ERROR(ahd);
 		ahd_dump_card_state(ahd);
 		ahd_abort_scbs(ahd, SCB_GET_TARGET(ahd, scb), 'A',
 			       SCB_GET_LUN(scb), SCB_GET_TAG(scb),
@@ -2143,6 +2174,7 @@ ahd_handle_pkt_busfree(struct ahd_softc *ahd, u_int busfreetime)
 		return (1);
 	}
 	printf("%s: Unexpected PKT busfree condition\n", ahd_name(ahd));
+	AHD_UNCORRECTABLE_ERROR(ahd);
 	ahd_dump_card_state(ahd);
 	/* Restart the sequencer. */
 	return (1);
@@ -2421,6 +2453,7 @@ ahd_handle_nonpkt_busfree(struct ahd_softc *ahd)
 		       ahd_lookup_phase_entry(lastphase)->phasemsg,
 		       aborted,
 		       ahd_inw(ahd, PRGMCNT));
+		AHD_UNCORRECTABLE_ERROR(ahd);
 		ahd_dump_card_state(ahd);
 		if (lastphase != P_BUSFREE)
 			ahd_force_renegotiation(ahd, &devinfo);
@@ -2456,6 +2489,7 @@ ahd_handle_proto_violation(struct ahd_softc *ahd)
 		ahd_print_devinfo(ahd, &devinfo);
 		printf("Target did not send an IDENTIFY message. "
 		       "LASTPHASE = 0x%x.\n", lastphase);
+		AHD_UNCORRECTABLE_ERROR(ahd);
 		scb = NULL;
 	} else if (scb == NULL) {
 		/*
@@ -2464,12 +2498,14 @@ ahd_handle_proto_violation(struct ahd_softc *ahd)
 		 */
 		ahd_print_devinfo(ahd, &devinfo);
 		printf("No SCB found during protocol violation\n");
+		AHD_UNCORRECTABLE_ERROR(ahd);
 		goto proto_violation_reset;
 	} else {
 		aic_set_transaction_status(scb, CAM_SEQUENCE_FAIL);
 		if ((seq_flags & NO_CDB_SENT) != 0) {
 			ahd_print_path(ahd, scb);
 			printf("No or incomplete CDB sent to device.\n");
+			AHD_UNCORRECTABLE_ERROR(ahd);
 		} else if ((ahd_inb_scbram(ahd, SCB_CONTROL)
 			  & STATUS_RCVD) == 0) {
 			/*
@@ -2484,6 +2520,7 @@ ahd_handle_proto_violation(struct ahd_softc *ahd)
 		} else {
 			ahd_print_path(ahd, scb);
 			printf("Unknown protocol violation.\n");
+			AHD_UNCORRECTABLE_ERROR(ahd);
 			ahd_dump_card_state(ahd);
 		}
 	}
@@ -2499,6 +2536,7 @@ proto_violation_reset:
 		found = ahd_reset_channel(ahd, 'A', TRUE);
 		printf("%s: Issued Channel %c Bus Reset. "
 		       "%d SCBs aborted\n", ahd_name(ahd), 'A', found);
+		AHD_UNCORRECTABLE_ERROR(ahd);
 	} else {
 		/*
 		 * Leave the selection hardware off in case
@@ -2521,6 +2559,7 @@ proto_violation_reset:
 		}
 		printf("Protocol violation %s.  Attempting to abort.\n",
 		       ahd_lookup_phase_entry(curphase)->phasemsg);
+		AHD_UNCORRECTABLE_ERROR(ahd);
 	}
 }
 
@@ -2602,6 +2641,7 @@ ahd_clear_critical_section(struct ahd_softc *ahd)
 			       "%s: First Instruction 0x%x now 0x%x\n",
 			       ahd_name(ahd), ahd_name(ahd), first_instr,
 			       seqaddr);
+			AHD_FATAL_ERROR(ahd);
 			ahd_dump_card_state(ahd);
 			panic("critical section loop");
 		}
@@ -3566,6 +3606,7 @@ ahd_setup_initiator_msgout(struct ahd_softc *ahd, struct ahd_devinfo *devinfo,
 	} else if (scb == NULL) {
 		printf("%s: WARNING. No pending message for "
 		       "I_T msgin.  Issuing NO-OP\n", ahd_name(ahd));
+		AHD_CORRECTABLE_ERROR(ahd);
 		ahd->msgout_buf[ahd->msgout_index++] = MSG_NOOP;
 		ahd->msgout_len++;
 		ahd->msg_type = MSG_TYPE_INITIATOR_MSGOUT;
@@ -3596,6 +3637,7 @@ ahd_setup_initiator_msgout(struct ahd_softc *ahd, struct ahd_devinfo *devinfo,
 		ahd->msgout_len++;
 		ahd_print_path(ahd, scb);
 		printf("Bus Device Reset Message Sent\n");
+		AHD_CORRECTABLE_ERROR(ahd);
 		/*
 		 * Clear our selection hardware in advance of
 		 * the busfree.  We may have an entry in the waiting
@@ -3615,6 +3657,7 @@ ahd_setup_initiator_msgout(struct ahd_softc *ahd, struct ahd_devinfo *devinfo,
 		ahd_print_path(ahd, scb);
 		printf("Abort%s Message Sent\n",
 		       (scb->hscb->control & TAG_ENB) != 0 ? " Tag" : "");
+		AHD_CORRECTABLE_ERROR(ahd);
 		/*
 		 * Clear our selection hardware in advance of
 		 * the busfree.  We may have an entry in the waiting
@@ -3638,6 +3681,7 @@ ahd_setup_initiator_msgout(struct ahd_softc *ahd, struct ahd_devinfo *devinfo,
 		       "does not have a waiting message\n");
 		printf("SCSIID = %x, target_mask = %x\n", scb->hscb->scsiid,
 		       devinfo->target_mask);
+		AHD_FATAL_ERROR(ahd);
 		panic("SCB = %d, SCB Control = %x:%x, MSG_OUT = %x "
 		      "SCB flags = %x", SCB_GET_TAG(scb), scb->hscb->control,
 		      ahd_inb_scbram(ahd, SCB_CONTROL), ahd_inb(ahd, MSG_OUT),
@@ -5129,9 +5173,11 @@ ahd_handle_devreset(struct ahd_softc *ahd, struct ahd_devinfo *devinfo,
 			       lun, AC_SENT_BDR, NULL);
 
 	if (message != NULL
-	 && (verbose_level <= bootverbose))
+	 && (verbose_level <= bootverbose)) {
+		AHD_CORRECTABLE_ERROR(ahd);
 		printf("%s: %s on %c:%d. %d SCBs aborted\n", ahd_name(ahd),
 		       message, devinfo->channel, devinfo->target, found);
+	}
 }
 
 #ifdef AHD_TARGET_MODE
@@ -5509,6 +5555,7 @@ ahd_reset(struct ahd_softc *ahd, int reinit)
 	if (wait == 0) {
 		printf("%s: WARNING - Failed chip reset!  "
 		       "Trying to initialize anyway.\n", ahd_name(ahd));
+		AHD_FATAL_ERROR(ahd);
 	}
 	ahd_outb(ahd, HCNTRL, ahd->pause);
 
@@ -5630,6 +5677,7 @@ ahd_init_scbdata(struct ahd_softc *ahd)
 	scb_data->maxhscbs = ahd_probe_scbs(ahd);
 	if (scb_data->maxhscbs == 0) {
 		printf("%s: No SCB space found\n", ahd_name(ahd));
+		AHD_FATAL_ERROR(ahd);
 		return (ENXIO);
 	}
 
@@ -6474,6 +6522,7 @@ ahd_init(struct ahd_softc *ahd)
 		printf("%s: WARNING. Termination is not configured correctly.\n"
 		       "%s: WARNING. SCSI bus operations may FAIL.\n",
 		       ahd_name(ahd), ahd_name(ahd));
+		AHD_CORRECTABLE_ERROR(ahd);
 	}
 init_done:
 	ahd_restart(ahd);
@@ -6830,6 +6879,7 @@ ahd_default_config(struct ahd_softc *ahd)
 	if (ahd_alloc_tstate(ahd, ahd->our_id, 'A') == NULL) {
 		printf("%s: unable to allocate ahd_tmode_tstate.  "
 		       "Failing attach\n", ahd_name(ahd));
+		AHD_FATAL_ERROR(ahd);
 		return (ENOMEM);
 	}
 
@@ -6909,6 +6959,7 @@ ahd_parse_cfgdata(struct ahd_softc *ahd, struct seeprom_config *sc)
 	if (ahd_alloc_tstate(ahd, ahd->our_id, 'A') == NULL) {
 		printf("%s: unable to allocate ahd_tmode_tstate.  "
 		       "Failing attach\n", ahd_name(ahd));
+		AHD_FATAL_ERROR(ahd);
 		return (ENOMEM);
 	}
 
@@ -7135,6 +7186,7 @@ ahd_pause_and_flushwork(struct ahd_softc *ahd)
 	if (maxloops == 0) {
 		printf("Infinite interrupt loop, INTSTAT = %x",
 		      ahd_inb(ahd, INTSTAT));
+		AHD_FATAL_ERROR(ahd);
 	}
 	ahd->qfreeze_cnt++;
 	ahd_outw(ahd, KERNEL_QFREEZE_COUNT, ahd->qfreeze_cnt);
@@ -7440,6 +7492,7 @@ ahd_search_qinfifo(struct ahd_softc *ahd, int target, char channel,
 		if (scb == NULL) {
 			printf("qinpos = %d, SCB index = %d\n",
 				qinpos, ahd->qinfifo[qinpos]);
+			AHD_FATAL_ERROR(ahd);
 			panic("Loop 1\n");
 		}
 
@@ -8195,20 +8248,26 @@ ahd_handle_scsi_status(struct ahd_softc *ahd, struct scb *scb)
 				switch (SIU_PKTFAIL_CODE(siu)) {
 				case SIU_PFC_NONE:
 					printf("No packet failure found\n");
+					AHD_UNCORRECTABLE_ERROR(ahd);
 					break;
 				case SIU_PFC_CIU_FIELDS_INVALID:
 					printf("Invalid Command IU Field\n");
+					AHD_UNCORRECTABLE_ERROR(ahd);
 					break;
 				case SIU_PFC_TMF_NOT_SUPPORTED:
 					printf("TMF not supportd\n");
+					AHD_UNCORRECTABLE_ERROR(ahd);
 					break;
 				case SIU_PFC_TMF_FAILED:
 					printf("TMF failed\n");
+					AHD_UNCORRECTABLE_ERROR(ahd);
 					break;
 				case SIU_PFC_INVALID_TYPE_CODE:
 					printf("Invalid L_Q Type code\n");
+					AHD_UNCORRECTABLE_ERROR(ahd);
 					break;
 				case SIU_PFC_ILLEGAL_REQUEST:
+					AHD_UNCORRECTABLE_ERROR(ahd);
 					printf("Illegal request\n");
 				default:
 					break;
@@ -9281,6 +9340,7 @@ ahd_recover_commands(struct ahd_softc *ahd)
 
 	printf("%s: Recovery Initiated - Card was %spaused\n", ahd_name(ahd),
 	       was_paused ? "" : "not ");
+	AHD_CORRECTABLE_ERROR(ahd);
 	ahd_dump_card_state(ahd);
 
 	ahd_pause_and_flushwork(ahd);
@@ -9507,6 +9567,7 @@ ahd_other_scb_timeout(struct ahd_softc *ahd, struct scb *scb,
  	       (scb->flags & SCB_OTHERTCL_TIMEOUT) != 0
 	       ? " again\n" : "\n");
 
+	AHD_UNCORRECTABLE_ERROR(ahd);
 	newtimeout = aic_get_timeout(scb);
 	scb->flags |= SCB_OTHERTCL_TIMEOUT;
 	found = 0;
@@ -9929,6 +9990,7 @@ ahd_handle_en_lun(struct ahd_softc *ahd, struct cam_sim *sim, union ccb *ccb)
 		if (lstate != NULL) {
 			xpt_print_path(ccb->ccb_h.path);
 			printf("Lun already enabled\n");
+			AHD_CORRECTABLE_ERROR(ahd);
 			ccb->ccb_h.status = CAM_LUN_ALRDY_ENA;
 			return;
 		}
diff --git a/sys/dev/aic7xxx/aic79xx.h b/sys/dev/aic7xxx/aic79xx.h
index e9c8847905b..f59d7740a58 100644
--- a/sys/dev/aic7xxx/aic79xx.h
+++ b/sys/dev/aic7xxx/aic79xx.h
@@ -1061,6 +1061,27 @@ typedef enum {
 #define AHD_MODE_UNKNOWN_MSK	AHD_MK_MSK(AHD_MODE_UNKNOWN)
 #define AHD_MODE_ANY_MSK (~0)
 
+typedef enum {
+	AHD_SYSCTL_ROOT,
+	AHD_SYSCTL_SUMMARY,
+	AHD_SYSCTL_DEBUG,
+	AHD_SYSCTL_NUMBER
+} ahd_sysctl_types_t;
+
+typedef enum {
+	AHD_ERRORS_CORRECTABLE,
+	AHD_ERRORS_UNCORRECTABLE,
+	AHD_ERRORS_FATAL,
+	AHD_ERRORS_NUMBER
+} ahd_sysctl_errors_t;
+
+#define	AHD_CORRECTABLE_ERROR(sc)					\
+	(((sc)->summerr[AHD_ERRORS_CORRECTABLE])++)
+#define	AHD_UNCORRECTABLE_ERROR(sc)					\
+	(((sc)->summerr[AHD_ERRORS_UNCORRECTABLE])++)
+#define	AHD_FATAL_ERROR(sc)						\
+	(((sc)->summerr[AHD_ERRORS_FATAL])++)
+
 typedef uint8_t ahd_mode_state;
 
 typedef void ahd_callback_t (void *);
@@ -1158,6 +1179,13 @@ struct ahd_softc {
 	uint32_t		  cmdcmplt_counts[AHD_STAT_BUCKETS];
 	uint32_t		  cmdcmplt_total;
 
+	/*
+	 * Errors statistics and printouts.
+	 */
+	struct sysctl_ctx_list	  sysctl_ctx[AHD_SYSCTL_NUMBER];
+	struct sysctl_oid	 *sysctl_tree[AHD_SYSCTL_NUMBER];
+	u_int			  summerr[AHD_ERRORS_NUMBER];
+
 	/*
 	 * Card characteristics
 	 */
diff --git a/sys/dev/aic7xxx/aic79xx_osm.c b/sys/dev/aic7xxx/aic79xx_osm.c
index e375d245056..81eade6d4f7 100644
--- a/sys/dev/aic7xxx/aic79xx_osm.c
+++ b/sys/dev/aic7xxx/aic79xx_osm.c
@@ -77,6 +77,63 @@ static int	ahd_create_path(struct ahd_softc *ahd,
 				char channel, u_int target, u_int lun,
 				struct cam_path **path);
 
+static const char *ahd_sysctl_node_elements[] = {
+	"root",
+	"summary",
+	"debug"
+};
+
+static const char *ahd_sysctl_node_descriptions[] = {
+	"root error collection for aic79xx controllers",
+	"summary collection for aic79xx controllers",
+	"debug collection for aic79xx controllers"
+};
+
+static const char *ahd_sysctl_errors_elements[] = {
+	"Cerrors",
+	"Uerrors",
+	"Ferrors"
+};
+
+static const char *ahd_sysctl_errors_descriptions[] = {
+	"Correctable errors",
+	"Uncorrectable errors",
+	"Fatal errors"
+};
+
+static int
+ahd_set_debugcounters(SYSCTL_HANDLER_ARGS)
+{
+	struct ahd_softc *sc;
+	int error, tmpv;
+
+	tmpv = 0;
+	sc = arg1;
+	error = sysctl_handle_int(oidp, &tmpv, 0, req);
+	if (error != 0 || req->newptr == NULL)
+		return (error);
+	if (tmpv < 0 || tmpv >= AHD_ERRORS_NUMBER)
+		return (EINVAL);
+	sc->summerr[arg2] = tmpv;
+	return (0);
+}
+
+static int
+ahd_clear_allcounters(SYSCTL_HANDLER_ARGS)
+{
+	struct ahd_softc *sc;
+	int error, tmpv;
+
+	tmpv = 0;
+	sc = arg1;
+	error = sysctl_handle_int(oidp, &tmpv, 0, req);
+	if (error != 0 || req->newptr == NULL)
+		return (error);
+	if (tmpv != 0)
+		bzero(sc->summerr, sizeof(sc->summerr));
+	return (0);
+}
+
 static int
 ahd_create_path(struct ahd_softc *ahd, char channel, u_int target,
 	        u_int lun, struct cam_path **path)
@@ -88,6 +145,48 @@ ahd_create_path(struct ahd_softc *ahd, char channel, u_int target,
 				path_id, target, lun));
 }
 
+void
+ahd_sysctl(struct ahd_softc *ahd)
+{
+	u_int i;
+
+	for (i = 0; i < AHD_SYSCTL_NUMBER; i++)
+		sysctl_ctx_init(&ahd->sysctl_ctx[i]);
+
+	ahd->sysctl_tree[AHD_SYSCTL_ROOT] =
+	    SYSCTL_ADD_NODE(&ahd->sysctl_ctx[AHD_SYSCTL_ROOT],
+			    SYSCTL_STATIC_CHILDREN(_hw), OID_AUTO,
+			    device_get_nameunit(ahd->dev_softc), CTLFLAG_RD, 0,
+			    ahd_sysctl_node_descriptions[AHD_SYSCTL_ROOT]);
+	    SYSCTL_ADD_PROC(&ahd->sysctl_ctx[AHD_SYSCTL_ROOT],
+			    SYSCTL_CHILDREN(ahd->sysctl_tree[AHD_SYSCTL_ROOT]),
+			    OID_AUTO, "clear", CTLTYPE_UINT | CTLFLAG_RW, ahd,
+			    0, ahd_clear_allcounters, "IU",
+			    "Clear all counters");
+
+	for (i = AHD_SYSCTL_SUMMARY; i < AHD_SYSCTL_NUMBER; i++)
+		ahd->sysctl_tree[i] =
+		    SYSCTL_ADD_NODE(&ahd->sysctl_ctx[i],
+				    SYSCTL_CHILDREN(ahd->sysctl_tree[AHD_SYSCTL_ROOT]),
+				    OID_AUTO, ahd_sysctl_node_elements[i],
+				    CTLFLAG_RD, 0,
+				    ahd_sysctl_node_descriptions[i]);
+
+	for (i = AHD_ERRORS_CORRECTABLE; i < AHD_ERRORS_NUMBER; i++) {
+		SYSCTL_ADD_UINT(&ahd->sysctl_ctx[AHD_SYSCTL_SUMMARY],
+				SYSCTL_CHILDREN(ahd->sysctl_tree[AHD_SYSCTL_SUMMARY]),
+				OID_AUTO, ahd_sysctl_errors_elements[i],
+				CTLFLAG_RD, &ahd->summerr[i], i,
+				ahd_sysctl_errors_descriptions[i]);
+		SYSCTL_ADD_PROC(&ahd->sysctl_ctx[AHD_SYSCTL_DEBUG],
+				SYSCTL_CHILDREN(ahd->sysctl_tree[AHD_SYSCTL_DEBUG]),
+				OID_AUTO, ahd_sysctl_errors_elements[i],
+				CTLFLAG_RW | CTLTYPE_UINT, ahd, i,
+				ahd_set_debugcounters, "IU",
+				ahd_sysctl_errors_descriptions[i]);
+	}
+}
+
 int
 ahd_map_int(struct ahd_softc *ahd)
 {
diff --git a/sys/dev/aic7xxx/aic79xx_osm.h b/sys/dev/aic7xxx/aic79xx_osm.h
index b786cec2baf..692f3f9eed1 100644
--- a/sys/dev/aic7xxx/aic79xx_osm.h
+++ b/sys/dev/aic7xxx/aic79xx_osm.h
@@ -51,6 +51,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #define AIC_PCI_CONFIG 1
 #include 
@@ -259,6 +260,7 @@ void	  ahd_platform_free(struct ahd_softc *ahd);
 int	  ahd_map_int(struct ahd_softc *ahd);
 int	  ahd_attach(struct ahd_softc *);
 int	  ahd_softc_comp(struct ahd_softc *lahd, struct ahd_softc *rahd);
+void	  ahd_sysctl(struct ahd_softc *ahd);
 int	  ahd_detach(device_t);
 #define	ahd_platform_init(arg)
 
diff --git a/sys/dev/aic7xxx/aicasm/Makefile b/sys/dev/aic7xxx/aicasm/Makefile
index 222c96a717e..9c7349390f0 100644
--- a/sys/dev/aic7xxx/aicasm/Makefile
+++ b/sys/dev/aic7xxx/aicasm/Makefile
@@ -15,7 +15,7 @@ SRCS=	${GENHDRS} ${CSRCS} ${YSRCS} ${LSRCS}
 CLEANFILES+= ${GENHDRS} ${YSRCS:R:C/(.*)/\1.output/g}
 DPADD=	${LIBL}
 LDADD=	-ll
-WARNS?=	6
+WARNS?=	5
 
 # Correct path for kernel builds
 # Don't rely on the kernel's .depend file
diff --git a/sys/dev/aic7xxx/aicasm/aicasm.c b/sys/dev/aic7xxx/aicasm/aicasm.c
index 3c9109ce38d..6c88f90000a 100644
--- a/sys/dev/aic7xxx/aicasm/aicasm.c
+++ b/sys/dev/aic7xxx/aicasm/aicasm.c
@@ -306,7 +306,7 @@ main(int argc, char *argv[])
 }
 
 static void
-usage()
+usage(void)
 {
 
 	(void)fprintf(stderr,
@@ -318,7 +318,7 @@ usage()
 }
 
 static void
-back_patch()
+back_patch(void)
 {
 	struct instruction *cur_instr;
 
@@ -347,7 +347,7 @@ back_patch()
 }
 
 static void
-output_code()
+output_code(void)
 {
 	struct instruction *cur_instr;
 	patch_t *cur_patch;
@@ -733,7 +733,7 @@ stop(const char *string, int err_code)
 }
 
 struct instruction *
-seq_alloc()
+seq_alloc(void)
 {
 	struct instruction *new_instr;
 
@@ -747,7 +747,7 @@ seq_alloc()
 }
 
 critical_section_t *
-cs_alloc()
+cs_alloc(void)
 {
 	critical_section_t *new_cs;
 
@@ -761,7 +761,7 @@ cs_alloc()
 }
 
 scope_t *
-scope_alloc()
+scope_alloc(void)
 {
 	scope_t *new_scope;
 
diff --git a/sys/dev/aic7xxx/aicasm/aicasm_macro_scan.l b/sys/dev/aic7xxx/aicasm/aicasm_macro_scan.l
index b8700eb4adf..ad06507486f 100644
--- a/sys/dev/aic7xxx/aicasm/aicasm_macro_scan.l
+++ b/sys/dev/aic7xxx/aicasm/aicasm_macro_scan.l
@@ -152,7 +152,7 @@ MCARG		[^(), \t]+
 %%
 
 int
-mmwrap()
+mmwrap(void)
 {
 	stop("EOF encountered in macro call", EX_DATAERR);
 	return (1);
diff --git a/sys/dev/aic7xxx/aicasm/aicasm_scan.l b/sys/dev/aic7xxx/aicasm/aicasm_scan.l
index 9dd98946159..28218621aea 100644
--- a/sys/dev/aic7xxx/aicasm/aicasm_scan.l
+++ b/sys/dev/aic7xxx/aicasm/aicasm_scan.l
@@ -590,7 +590,7 @@ next_substitution(struct symbol *mac_symbol, const char *body_pos,
 }
 
 int
-yywrap()
+yywrap(void)
 {
 	include_t *include;
 
diff --git a/sys/dev/aic7xxx/aicasm/aicasm_symbol.c b/sys/dev/aic7xxx/aicasm/aicasm_symbol.c
index e7bbb699bf6..2e5d5c4feed 100644
--- a/sys/dev/aic7xxx/aicasm/aicasm_symbol.c
+++ b/sys/dev/aic7xxx/aicasm/aicasm_symbol.c
@@ -129,7 +129,7 @@ symbol_delete(symbol_t *symbol)
 }
 
 void
-symtable_open()
+symtable_open(void)
 {
 	symtable = dbopen(/*filename*/NULL,
 			  O_CREAT | O_NONBLOCK | O_RDWR, /*mode*/0, DB_HASH,
@@ -143,7 +143,7 @@ symtable_open()
 }
 
 void
-symtable_close()
+symtable_close(void)
 {
 	if (symtable != NULL) {
 		DBT	 key;
diff --git a/sys/dev/amdsbwd/amdsbwd.c b/sys/dev/amdsbwd/amdsbwd.c
new file mode 100644
index 00000000000..418e1941f2a
--- /dev/null
+++ b/sys/dev/amdsbwd/amdsbwd.c
@@ -0,0 +1,431 @@
+/*-
+ * Copyright (c) 2009 Andriy Gapon 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 a driver for watchdog timer present in AMD SB600/SB7xx
+ * south bridges and other watchdog timers advertised via WDRT ACPI table.
+ * Please see the following specifications for the descriptions of the
+ * registers and flags:
+ * - AMD SB600 Register Reference Guide, Public Version,  Rev. 3.03 (SB600 RRG)
+ *   http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/46155_sb600_rrg_pub_3.03.pdf
+ * - AMD SB700/710/750 Register Reference Guide (RRG)
+ *   http://developer.amd.com/assets/43009_sb7xx_rrg_pub_1.00.pdf
+ * - AMD SB700/710/750 Register Programming Requirements (RPR)
+ *   http://developer.amd.com/assets/42413_sb7xx_rpr_pub_1.00.pdf
+ * Please see the following for Watchdog Resource Table specification:
+ * - Watchdog Timer Hardware Requirements for Windows Server 2003 (WDRT)
+ *   http://www.microsoft.com/whdc/system/sysinternals/watchdog.mspx
+ * AMD SB600/SB7xx watchdog hardware seems to conform to the above,
+ * but my system doesn't provide the table.
+ */
+
+#include 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+/* RRG 2.3.3.1.1, page 161. */
+#define	AMDSB_PMIO_INDEX		0xcd6
+#define	AMDSB_PMIO_DATA			(PMIO_INDEX + 1)
+#define	AMDSB_PMIO_WIDTH		2
+/* RRG 2.3.3.2, page 181. */
+#define	AMDSB_PM_RESET_STATUS0		0x44
+#define	AMDSB_PM_RESET_STATUS1		0x45
+#define		AMDSB_WD_RST_STS	0x02
+/* RRG 2.3.3.2, page 188; RPR 2.36, page 30. */
+#define	AMDSB_PM_WDT_CTRL		0x69
+#define		AMDSB_WDT_DISABLE	0x01
+#define		AMDSB_WDT_RES_MASK	(0x02 | 0x04)
+#define		AMDSB_WDT_RES_32US	0x00
+#define		AMDSB_WDT_RES_10MS	0x02
+#define		AMDSB_WDT_RES_100MS	0x04
+#define		AMDSB_WDT_RES_1S	0x06
+#define	AMDSB_PM_WDT_BASE_LSB		0x6c
+#define	AMDSB_PM_WDT_BASE_MSB		0x6f
+/* RRG 2.3.4, page 223, WDRT. */
+#define	AMDSB_WD_CTRL			0x00
+#define		AMDSB_WD_RUN		0x01
+#define		AMDSB_WD_FIRED		0x02
+#define		AMDSB_WD_SHUTDOWN	0x04
+#define		AMDSB_WD_DISABLE	0x08
+#define		AMDSB_WD_RESERVED	0x70
+#define		AMDSB_WD_RELOAD		0x80
+#define	AMDSB_WD_COUNT			0x04
+#define		AMDSB_WD_COUNT_MASK	0xffff
+#define	AMDSB_WDIO_REG_WIDTH		4
+/* WDRT */
+#define	MAXCOUNT_MIN_VALUE		511
+/* RRG 2.3.1.1, page 122; SB600 RRG 2.3.1.1, page 97. */
+#define	AMDSB7xx_SMBUS_DEVID		0x43851002
+
+#define	amdsbwd_verbose_printf(dev, ...)	\
+	do {						\
+		if (bootverbose)			\
+			device_printf(dev, __VA_ARGS__);\
+	} while (0)
+
+struct amdsbwd_softc {
+	device_t		dev;
+	eventhandler_tag	ev_tag;
+	struct resource		*res_ctrl;
+	struct resource		*res_count;
+	int			rid_ctrl;
+	int			rid_count;
+	int			ms_per_tick;
+	int			max_ticks;
+	int			active;
+	unsigned int		timeout;
+};
+
+static void	amdsbwd_identify(driver_t *driver, device_t parent);
+static int	amdsbwd_probe(device_t dev);
+static int	amdsbwd_attach(device_t dev);
+static int	amdsbwd_detach(device_t dev);
+
+static device_method_t amdsbwd_methods[] = {
+	DEVMETHOD(device_identify,	amdsbwd_identify),
+	DEVMETHOD(device_probe,		amdsbwd_probe),
+	DEVMETHOD(device_attach,	amdsbwd_attach),
+	DEVMETHOD(device_detach,	amdsbwd_detach),
+#if 0
+	DEVMETHOD(device_shutdown,	amdsbwd_detach),
+#endif
+	{0, 0}
+};
+
+static devclass_t	amdsbwd_devclass;
+static driver_t		amdsbwd_driver = {
+	"amdsbwd",
+	amdsbwd_methods,
+	sizeof(struct amdsbwd_softc)
+};
+
+DRIVER_MODULE(amdsbwd, isa, amdsbwd_driver, amdsbwd_devclass, NULL, NULL);
+
+
+static uint8_t
+pmio_read(struct resource *res, uint8_t reg)
+{
+	bus_write_1(res, 0, reg);	/* Index */
+	return (bus_read_1(res, 1));	/* Data */
+}
+
+static void
+pmio_write(struct resource *res, uint8_t reg, uint8_t val)
+{
+	bus_write_1(res, 0, reg);	/* Index */
+	bus_write_1(res, 1, val);	/* Data */
+}
+
+static uint32_t
+wdctrl_read(struct amdsbwd_softc *sc)
+{
+	return (bus_read_4(sc->res_ctrl, 0));
+}
+
+static void
+wdctrl_write(struct amdsbwd_softc *sc, uint32_t val)
+{
+	bus_write_4(sc->res_ctrl, 0, val);
+}
+
+static __unused uint32_t
+wdcount_read(struct amdsbwd_softc *sc)
+{
+	return (bus_read_4(sc->res_count, 0));
+}
+
+static void
+wdcount_write(struct amdsbwd_softc *sc, uint32_t val)
+{
+	bus_write_4(sc->res_count, 0, val);
+}
+
+static void
+amdsbwd_tmr_enable(struct amdsbwd_softc *sc)
+{
+	uint32_t val;
+
+	val = wdctrl_read(sc);
+	val |= AMDSB_WD_RUN;
+	wdctrl_write(sc, val);
+	sc->active = 1;
+	amdsbwd_verbose_printf(sc->dev, "timer enabled\n");
+}
+
+static void
+amdsbwd_tmr_disable(struct amdsbwd_softc *sc)
+{
+	uint32_t val;
+
+	val = wdctrl_read(sc);
+	val &= ~AMDSB_WD_RUN;
+	wdctrl_write(sc, val);
+	sc->active = 0;
+	amdsbwd_verbose_printf(sc->dev, "timer disabled\n");
+}
+
+static void
+amdsbwd_tmr_reload(struct amdsbwd_softc *sc)
+{
+	uint32_t val;
+
+	val = wdctrl_read(sc);
+	val |= AMDSB_WD_RELOAD;
+	wdctrl_write(sc, val);
+}
+
+static void
+amdsbwd_tmr_set(struct amdsbwd_softc *sc, uint16_t timeout)
+{
+
+	timeout &= AMDSB_WD_COUNT_MASK;
+	wdcount_write(sc, timeout);
+	sc->timeout = timeout;
+	amdsbwd_verbose_printf(sc->dev, "timeout set to %u ticks\n", timeout);
+}
+
+static void
+amdsbwd_event(void *arg, unsigned int cmd, int *error)
+{
+	struct amdsbwd_softc *sc = arg;
+	unsigned int timeout;
+
+	/* convert from power-of-two-ns to WDT ticks */
+	cmd &= WD_INTERVAL;
+	if (cmd < WD_TO_1SEC)
+		cmd = 0;
+	timeout = ((uint64_t)1 << (cmd - WD_TO_1MS)) / sc->ms_per_tick;
+	if (timeout > sc->max_ticks)
+		timeout = sc->max_ticks;
+	if (cmd) {
+		if (timeout != sc->timeout) {
+			amdsbwd_tmr_set(sc, timeout);
+			if (!sc->active)
+				amdsbwd_tmr_enable(sc);
+		}
+		amdsbwd_tmr_reload(sc);
+		*error = 0;
+	} else {
+		if (sc->active)
+			amdsbwd_tmr_disable(sc);
+	}
+}
+
+static void
+amdsbwd_identify(driver_t *driver, device_t parent)
+{
+	device_t		child;
+	device_t		smb_dev;
+
+	if (resource_disabled("amdsbwd", 0))
+		return;
+	if (device_find_child(parent, "amdsbwd", -1) != NULL)
+		return;
+
+	/*
+	 * Try to identify SB600/SB7xx by PCI Device ID of SMBus device
+	 * that should be present at bus 0, device 20, function 0.
+	 */
+	smb_dev = pci_find_bsf(0, 20, 0);
+	if (smb_dev == NULL)
+		return;
+	if (pci_get_devid(smb_dev) != AMDSB7xx_SMBUS_DEVID)
+		return;
+
+	child = BUS_ADD_CHILD(parent, ISA_ORDER_SPECULATIVE, "amdsbwd", -1);
+	if (child == NULL)
+		device_printf(parent, "add amdsbwd child failed\n");
+}
+
+static int
+amdsbwd_probe(device_t dev)
+{
+	struct resource		*res;
+	uint32_t		addr;
+	uint32_t		val;
+	int			rid;
+	int			rc;
+	int			i;
+
+	/* Do not claim some ISA PnP device by accident. */
+	if (isa_get_logicalid(dev) != 0)
+		return (ENXIO);
+
+	rc = bus_set_resource(dev, SYS_RES_IOPORT, 0, AMDSB_PMIO_INDEX,
+	    AMDSB_PMIO_WIDTH);
+	if (rc != 0) {
+		device_printf(dev, "bus_set_resource for IO failed\n");
+		return (ENXIO);
+	}
+	rid = 0;
+	res = bus_alloc_resource(dev, SYS_RES_IOPORT, &rid, 0ul, ~0ul,
+	    AMDSB_PMIO_WIDTH, RF_ACTIVE | RF_SHAREABLE);
+	if (res == NULL) {
+		device_printf(dev, "bus_alloc_resource for IO failed\n");
+		return (ENXIO);
+	}
+
+	/* Report cause of previous reset for user's convenience. */
+	val = pmio_read(res, AMDSB_PM_RESET_STATUS0);
+	if (val != 0)
+		amdsbwd_verbose_printf(dev, "ResetStatus0 = %#04x\n", val);
+	val = pmio_read(res, AMDSB_PM_RESET_STATUS1);
+	if (val != 0)
+		amdsbwd_verbose_printf(dev, "ResetStatus1 = %#04x\n", val);
+	if ((val & AMDSB_WD_RST_STS) != 0)
+		device_printf(dev, "Previous Reset was caused by Watchdog\n");
+
+	/* Find base address of memory mapped WDT registers. */
+	for (addr = 0, i = 0; i < 4; i++) {
+		addr <<= 8;
+		addr |= pmio_read(res, AMDSB_PM_WDT_BASE_MSB - i);
+	}
+	amdsbwd_verbose_printf(dev, "memory base address = %#010x\n", addr);
+	rc = bus_set_resource(dev, SYS_RES_MEMORY, 0, addr + AMDSB_WD_CTRL,
+	    AMDSB_WDIO_REG_WIDTH);
+	if (rc != 0) {
+		device_printf(dev, "bus_set_resource for control failed\n");
+		return (ENXIO);
+	}
+	rc = bus_set_resource(dev, SYS_RES_MEMORY, 1, addr + AMDSB_WD_COUNT,
+	    AMDSB_WDIO_REG_WIDTH);
+	if (rc != 0) {
+		device_printf(dev, "bus_set_resource for count failed\n");
+		return (ENXIO);
+	}
+
+	/* Set watchdog timer tick to 10ms. */
+	val = pmio_read(res, AMDSB_PM_WDT_CTRL);
+	val &= ~AMDSB_WDT_RES_MASK;
+	val |= AMDSB_WDT_RES_10MS;
+	pmio_write(res, AMDSB_PM_WDT_CTRL, val);
+
+	/* Enable watchdog device (in stopped state). */
+	val = pmio_read(res, AMDSB_PM_WDT_CTRL);
+	val &= ~AMDSB_WDT_DISABLE;
+	pmio_write(res, AMDSB_PM_WDT_CTRL, val);
+
+	/*
+	 * XXX TODO: Ensure that watchdog decode is enabled
+	 * (register 0x41, bit 3).
+	 */
+	bus_release_resource(dev, SYS_RES_IOPORT, rid, res);
+	bus_delete_resource(dev, SYS_RES_IOPORT, rid);
+
+	device_set_desc(dev, "AMD SB600/SB7xx Watchdog Timer");
+	return (0);
+}
+
+static int
+amdsbwd_attach_sb(device_t dev, struct amdsbwd_softc *sc)
+{
+	sc->max_ticks = UINT16_MAX;
+	sc->ms_per_tick = 10;
+	sc->rid_ctrl = 0;
+	sc->rid_count = 1;
+
+	sc->res_ctrl = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+	    &sc->rid_ctrl, RF_ACTIVE);
+	if (sc->res_ctrl == NULL) {
+		device_printf(dev, "bus_alloc_resource for ctrl failed\n");
+		return (ENXIO);
+	}
+	sc->res_count = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+	    &sc->rid_count, RF_ACTIVE);
+	if (sc->res_count == NULL) {
+		device_printf(dev, "bus_alloc_resource for count failed\n");
+		return (ENXIO);
+	}
+	return (0);
+}
+
+static int
+amdsbwd_attach(device_t dev)
+{
+	struct amdsbwd_softc	*sc;
+	int			rc;
+
+	sc = device_get_softc(dev);
+	sc->dev = dev;
+
+	rc = amdsbwd_attach_sb(dev, sc);
+	if (rc != 0)
+		goto fail;
+
+	/* Setup initial state of Watchdog Control. */
+	wdctrl_write(sc, AMDSB_WD_FIRED);
+
+	if (wdctrl_read(sc) & AMDSB_WD_DISABLE) {
+		device_printf(dev, "watchdog hardware is disabled\n");
+		goto fail;
+	}
+
+	sc->ev_tag = EVENTHANDLER_REGISTER(watchdog_list, amdsbwd_event, sc,
+	    EVENTHANDLER_PRI_ANY);
+
+	return (0);
+
+fail:
+	amdsbwd_detach(dev);
+	return (ENXIO);
+}
+
+static int
+amdsbwd_detach(device_t dev)
+{
+	struct amdsbwd_softc *sc;
+
+	sc = device_get_softc(dev);
+	if (sc->ev_tag != NULL)
+		EVENTHANDLER_DEREGISTER(watchdog_list, sc->ev_tag);
+
+	if (sc->active)
+		amdsbwd_tmr_disable(sc);
+
+	if (sc->res_ctrl != NULL)
+		bus_release_resource(dev, SYS_RES_MEMORY, sc->rid_ctrl,
+		    sc->res_ctrl);
+
+	if (sc->res_count != NULL)
+		bus_release_resource(dev, SYS_RES_MEMORY, sc->rid_count,
+		    sc->res_count);
+
+	return (0);
+}
+
diff --git a/sys/dev/an/if_an.c b/sys/dev/an/if_an.c
index fd9f04415df..6d9ef96831b 100644
--- a/sys/dev/an/if_an.c
+++ b/sys/dev/an/if_an.c
@@ -349,9 +349,6 @@ an_probe(device_t dev)
 	 * to be able to issue commands and call some of the
 	 * other routines.
 	 */
-	sc->an_bhandle = rman_get_bushandle(sc->port_res);
-	sc->an_btag = rman_get_bustag(sc->port_res);
-
 	ssid.an_len = sizeof(ssid);
 	ssid.an_type = AN_RID_SSIDLIST;
 
@@ -2803,7 +2800,7 @@ an_start_locked(struct ifnet *ifp)
 				   tx_frame_802_3.an_tx_802_3_payload_len,
 				   (caddr_t)&sc->an_txbuf);
 
-			txcontrol = AN_TXCTL_8023;
+			txcontrol = AN_TXCTL_8023 | AN_TXCTL_HW(sc->mpi350);
 			/* write the txcontrol only */
 			an_write_data(sc, id, 0x08, (caddr_t)&txcontrol,
 				      sizeof(txcontrol));
@@ -2866,7 +2863,7 @@ an_start_locked(struct ifnet *ifp)
 				   tx_frame_802_3.an_tx_802_3_payload_len,
 				   (caddr_t)&sc->an_txbuf);
 
-			txcontrol = AN_TXCTL_8023;
+			txcontrol = AN_TXCTL_8023 | AN_TXCTL_HW(sc->mpi350);
 			/* write the txcontrol only */
 			bcopy((caddr_t)&txcontrol, &buf[0x08],
 			      sizeof(txcontrol));
@@ -2888,7 +2885,7 @@ an_start_locked(struct ifnet *ifp)
 			    tx_frame_802_3.an_tx_802_3_payload_len;
 			an_tx_desc.an_phys
 			    = sc->an_tx_buffer[idx].an_dma_paddr;
-			for (i = 0; i < sizeof(an_tx_desc) / 4 ; i++) {
+			for (i = sizeof(an_tx_desc) / 4 - 1; i >= 0; i--) {
 				CSR_MEM_AUX_WRITE_4(sc, AN_TX_DESC_OFFSET
 				    /* zero for now */
 				    + (0 * sizeof(an_tx_desc))
diff --git a/sys/dev/an/if_an_isa.c b/sys/dev/an/if_an_isa.c
index 5c1f0eb8770..19e5cd07552 100644
--- a/sys/dev/an/if_an_isa.c
+++ b/sys/dev/an/if_an_isa.c
@@ -111,8 +111,6 @@ an_attach_isa(device_t dev)
 	an_alloc_port(dev, sc->port_rid, 1);
 	an_alloc_irq(dev, sc->irq_rid, 0);
 
-	sc->an_bhandle = rman_get_bushandle(sc->port_res);
-	sc->an_btag = rman_get_bustag(sc->port_res);
 	sc->an_dev = dev;
 
 	error = an_attach(sc, flags);
diff --git a/sys/dev/an/if_an_pccard.c b/sys/dev/an/if_an_pccard.c
index cfb20f36822..bdd40f3dfe5 100644
--- a/sys/dev/an/if_an_pccard.c
+++ b/sys/dev/an/if_an_pccard.c
@@ -141,8 +141,6 @@ an_pccard_attach(device_t dev)
 
 	an_alloc_irq(dev, sc->irq_rid, 0);
 
-	sc->an_bhandle = rman_get_bushandle(sc->port_res);
-	sc->an_btag = rman_get_bustag(sc->port_res);
 	sc->an_dev = dev;
 
 	error = an_attach(sc, flags);
diff --git a/sys/dev/an/if_an_pci.c b/sys/dev/an/if_an_pci.c
index 1efc494814f..2d0d2b5a667 100644
--- a/sys/dev/an/if_an_pci.c
+++ b/sys/dev/an/if_an_pci.c
@@ -175,9 +175,6 @@ an_attach_pci(dev)
 		goto fail;
 	}
 
-	sc->an_btag = rman_get_bustag(sc->port_res);
-	sc->an_bhandle = rman_get_bushandle(sc->port_res);
-
 	/* Allocate memory for MPI350 */
 	if (sc->mpi350) {
 		/* Allocate memory */
@@ -187,8 +184,6 @@ an_attach_pci(dev)
 			device_printf(dev, "couldn't map memory\n");
 			goto fail;
 		}
-		sc->an_mem_btag = rman_get_bustag(sc->mem_res);
-		sc->an_mem_bhandle = rman_get_bushandle(sc->mem_res);
 
 		/* Allocate aux. memory */
 		sc->mem_aux_rid = PCIR_BAR(2);
@@ -198,8 +193,6 @@ an_attach_pci(dev)
 			device_printf(dev, "couldn't map aux memory\n");
 			goto fail;
 		}
-		sc->an_mem_aux_btag = rman_get_bustag(sc->mem_aux_res);
-		sc->an_mem_aux_bhandle = rman_get_bushandle(sc->mem_aux_res);
 
 		/* Allocate DMA region */
 		error = bus_dma_tag_create(NULL,	/* parent */
diff --git a/sys/dev/an/if_anreg.h b/sys/dev/an/if_anreg.h
index 051a93bbf57..279e65b8e1e 100644
--- a/sys/dev/an/if_anreg.h
+++ b/sys/dev/an/if_anreg.h
@@ -45,47 +45,39 @@
 /*
  * register space access macros
  */
-#define CSR_WRITE_2(sc, reg, val)	\
-	bus_space_write_2(sc->an_btag, sc->an_bhandle, reg, val)
+#define CSR_WRITE_2(sc, reg, val)	bus_write_2(sc->port_res, reg, val)
 
-#define CSR_READ_2(sc, reg)		\
-	bus_space_read_2(sc->an_btag, sc->an_bhandle, reg)
+#define CSR_READ_2(sc, reg)		bus_read_2(sc->port_res, reg)
 
-#define CSR_WRITE_1(sc, reg, val)	\
-	bus_space_write_1(sc->an_btag, sc->an_bhandle, reg, val)
+#define CSR_WRITE_1(sc, reg, val)	bus_write_1(sc->port_res, reg, val)
 
-#define CSR_READ_1(sc, reg)		\
-	bus_space_read_1(sc->an_btag, sc->an_bhandle, reg)
+#define CSR_READ_1(sc, reg)		bus_read_1(sc->port_res, reg)
 
 /*
  * memory space access macros
  */
-#define CSR_MEM_WRITE_2(sc, reg, val)	\
-	bus_space_write_2(sc->an_mem_btag, sc->an_mem_bhandle, reg, val)
+#define CSR_MEM_WRITE_2(sc, reg, val)	bus_write_2(sc->mem_res, reg, val)
 
-#define CSR_MEM_READ_2(sc, reg)		\
-	bus_space_read_2(sc->an_mem_btag, sc->an_mem_bhandle, reg)
+#define CSR_MEM_READ_2(sc, reg)		bus_read_2(sc->mem_res, reg)
 
-#define CSR_MEM_WRITE_1(sc, reg, val)	\
-	bus_space_write_1(sc->an_mem_btag, sc->an_mem_bhandle, reg, val)
+#define CSR_MEM_WRITE_1(sc, reg, val)	bus_write_1(sc->mem_res, reg, val)
 
-#define CSR_MEM_READ_1(sc, reg)		\
-	bus_space_read_1(sc->an_mem_btag, sc->an_mem_bhandle, reg)
+#define CSR_MEM_READ_1(sc, reg)		bus_read_1(sc->mem_res, reg)
 
 /*
  * aux. memory space access macros
  */
 #define CSR_MEM_AUX_WRITE_4(sc, reg, val)	\
-	bus_space_write_4(sc->an_mem_aux_btag, sc->an_mem_aux_bhandle, reg, val)
+	bus_write_4(sc->mem_aux_res, reg, val)
 
 #define CSR_MEM_AUX_READ_4(sc, reg)		\
-	bus_space_read_4(sc->an_mem_aux_btag, sc->an_mem_aux_bhandle, reg)
+	bus_read_4(sc->mem_aux_res, reg)
 
 #define CSR_MEM_AUX_WRITE_1(sc, reg, val)	\
-	bus_space_write_1(sc->an_mem_aux_btag, sc->an_mem_aux_bhandle, reg, val)
+	bus_write_1(sc->mem_aux_res, reg, val)
 
 #define CSR_MEM_AUX_READ_1(sc, reg)		\
-	bus_space_read_1(sc->an_mem_aux_btag, sc->an_mem_aux_bhandle, reg)
+	bus_read_1(sc->mem_aux_res, reg)
 
 /*
  * Size of Aironet I/O space.
@@ -394,13 +386,18 @@ struct an_txframe_802_3 {
 #define AN_PAYLOADTYPE_ETHER	0x0000
 #define AN_PAYLOADTYPE_LLC	0x0010
 
-#define AN_TXCTL_80211	\
-	(AN_TXCTL_TXOK_INTR|AN_TXCTL_TXERR_INTR|AN_HEADERTYPE_80211|	\
-	AN_PAYLOADTYPE_LLC|AN_TXCTL_NORELEASE)
+#define AN_TXCTL_80211		(AN_HEADERTYPE_80211|AN_PAYLOADTYPE_LLC)
 
-#define AN_TXCTL_8023	\
-	(AN_TXCTL_TXOK_INTR|AN_TXCTL_TXERR_INTR|AN_HEADERTYPE_8023|	\
-	AN_PAYLOADTYPE_ETHER|AN_TXCTL_NORELEASE)
+#define AN_TXCTL_8023		(AN_HEADERTYPE_8023|AN_PAYLOADTYPE_ETHER)
+
+/*
+ * Additions to transmit control bits for MPI350
+ */
+#define	AN_TXCTL_HW(x)	\
+	( x ? (AN_TXCTL_NORELEASE) \
+	  : \
+	      (AN_TXCTL_TXOK_INTR|AN_TXCTL_TXERR_INTR|AN_TXCTL_NORELEASE) \
+	      )
 
 #define AN_TXGAP_80211		0
 #define AN_TXGAP_8023		0
@@ -454,11 +451,6 @@ struct an_softc	{
 	void*	irq_handle;	/* handle for irq handler */
 	struct resource* irq_res; /* resource for irq */
 
-	bus_space_handle_t	an_bhandle_p;
-	bus_space_handle_t	an_bhandle;
-	bus_space_tag_t		an_btag;
-	bus_space_handle_t	an_mem_bhandle;
-	bus_space_tag_t		an_mem_btag;
 	bus_space_handle_t	an_mem_aux_bhandle;
 	bus_space_tag_t		an_mem_aux_btag;
 	bus_dma_tag_t		an_dtag;
diff --git a/sys/dev/ata/ata-all.c b/sys/dev/ata/ata-all.c
index d0a07c36289..6bbff47a945 100644
--- a/sys/dev/ata/ata-all.c
+++ b/sys/dev/ata/ata-all.c
@@ -50,6 +50,16 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
+#ifdef ATA_CAM
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#endif
+
+#ifndef ATA_CAM
 /* device structure */
 static  d_ioctl_t       ata_ioctl;
 static struct cdevsw ata_cdevsw = {
@@ -58,14 +68,21 @@ static struct cdevsw ata_cdevsw = {
 	.d_ioctl =      ata_ioctl,
 	.d_name =       "ata",
 };
+#endif
 
 /* prototypes */
+#ifndef ATA_CAM
 static void ata_boot_attach(void);
 static device_t ata_add_child(device_t, struct ata_device *, int);
+#else
+static void ataaction(struct cam_sim *sim, union ccb *ccb);
+static void atapoll(struct cam_sim *sim);
+#endif
 static void ata_conn_event(void *, int);
 static void bswap(int8_t *, int);
 static void btrim(int8_t *, int);
 static void bpack(int8_t *, int8_t *, int);
+static void ata_interrupt_locked(void *data);
 
 /* global vars */
 MALLOC_DEFINE(M_ATA, "ata_generic", "ATA driver generic layer");
@@ -115,6 +132,10 @@ ata_attach(device_t dev)
 {
     struct ata_channel *ch = device_get_softc(dev);
     int error, rid;
+#ifdef ATA_CAM
+    struct cam_devq *devq;
+    int i;
+#endif
 
     /* check that we have a virgin channel to attach */
     if (ch->r_irq)
@@ -129,11 +150,23 @@ ata_attach(device_t dev)
     mtx_init(&ch->queue_mtx, "ATA queue lock", NULL, MTX_DEF);
     TAILQ_INIT(&ch->ata_queue);
     TASK_INIT(&ch->conntask, 0, ata_conn_event, dev);
+#ifdef ATA_CAM
+	for (i = 0; i < 16; i++) {
+		ch->user[i].mode = 0;
+		if (ch->flags & ATA_SATA)
+			ch->user[i].bytecount = 8192;
+		else
+			ch->user[i].bytecount = MAXPHYS;
+		ch->curr[i] = ch->user[i];
+	}
+#endif
 
     /* reset the controller HW, the channel and device(s) */
     while (ATA_LOCKING(dev, ATA_LF_LOCK) != ch->unit)
 	pause("ataatch", 1);
+#ifndef ATA_CAM
     ATA_RESET(dev);
+#endif
     ATA_LOCKING(dev, ATA_LF_UNLOCK);
 
     /* allocate DMA resources if DMA HW present*/
@@ -154,18 +187,61 @@ ata_attach(device_t dev)
 	return error;
     }
 
+#ifndef ATA_CAM
     /* probe and attach devices on this channel unless we are in early boot */
     if (!ata_delayed_attach)
 	ata_identify(dev);
-    return 0;
+    return (0);
+#else
+	mtx_lock(&ch->state_mtx);
+	/* Create the device queue for our SIM. */
+	devq = cam_simq_alloc(1);
+	if (devq == NULL) {
+		device_printf(dev, "Unable to allocate simq\n");
+		error = ENOMEM;
+		goto err1;
+	}
+	/* Construct SIM entry */
+	ch->sim = cam_sim_alloc(ataaction, atapoll, "ata", ch,
+	    device_get_unit(dev), &ch->state_mtx, 1, 0, devq);
+	if (ch->sim == NULL) {
+		device_printf(dev, "unable to allocate sim\n");
+		error = ENOMEM;
+		goto err2;
+	}
+	if (xpt_bus_register(ch->sim, dev, 0) != CAM_SUCCESS) {
+		device_printf(dev, "unable to register xpt bus\n");
+		error = ENXIO;
+		goto err2;
+	}
+	if (xpt_create_path(&ch->path, /*periph*/NULL, cam_sim_path(ch->sim),
+	    CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
+		device_printf(dev, "unable to create path\n");
+		error = ENXIO;
+		goto err3;
+	}
+	mtx_unlock(&ch->state_mtx);
+	return (0);
+
+err3:
+	xpt_bus_deregister(cam_sim_path(ch->sim));
+err2:
+	cam_sim_free(ch->sim, /*free_devq*/TRUE);
+err1:
+	bus_release_resource(dev, SYS_RES_IRQ, ATA_IRQ_RID, ch->r_irq);
+	mtx_unlock(&ch->state_mtx);
+	return (error);
+#endif
 }
 
 int
 ata_detach(device_t dev)
 {
     struct ata_channel *ch = device_get_softc(dev);
+#ifndef ATA_CAM
     device_t *children;
     int nchildren, i;
+#endif
 
     /* check that we have a valid channel to detach */
     if (!ch->r_irq)
@@ -176,6 +252,7 @@ ata_detach(device_t dev)
     ch->state |= ATA_STALL_QUEUE;
     mtx_unlock(&ch->state_mtx);
 
+#ifndef ATA_CAM
     /* detach & delete all children */
     if (!device_get_children(dev, &children, &nchildren)) {
 	for (i = 0; i < nchildren; i++)
@@ -183,8 +260,18 @@ ata_detach(device_t dev)
 		device_delete_child(dev, children[i]);
 	free(children, M_TEMP);
     } 
+#endif
     taskqueue_drain(taskqueue_thread, &ch->conntask);
 
+#ifdef ATA_CAM
+	mtx_lock(&ch->state_mtx);
+	xpt_async(AC_LOST_DEVICE, ch->path, NULL);
+	xpt_free_path(ch->path);
+	xpt_bus_deregister(cam_sim_path(ch->sim));
+	cam_sim_free(ch->sim, /*free_devq*/TRUE);
+	mtx_unlock(&ch->state_mtx);
+#endif
+
     /* release resources */
     bus_teardown_intr(dev, ch->r_irq, ch->ih);
     bus_release_resource(dev, SYS_RES_IRQ, ATA_IRQ_RID, ch->r_irq);
@@ -203,8 +290,11 @@ static void
 ata_conn_event(void *context, int dummy)
 {
     device_t dev = (device_t)context;
+    struct ata_channel *ch = device_get_softc(dev);
 
+    mtx_lock(&ch->state_mtx);
     ata_reinit(dev);
+    mtx_unlock(&ch->state_mtx);
 }
 
 int
@@ -212,6 +302,7 @@ ata_reinit(device_t dev)
 {
     struct ata_channel *ch = device_get_softc(dev);
     struct ata_request *request;
+#ifndef ATA_CAM
     device_t *children;
     int nchildren, i;
 
@@ -298,7 +389,23 @@ ata_reinit(device_t dev)
 
     /* kick off requests on the queue */
     ata_start(dev);
-    return 0;
+#else
+	if ((request = ch->running)) {
+		ch->running = NULL;
+		if (ch->state == ATA_ACTIVE)
+		    ch->state = ATA_IDLE;
+		callout_stop(&request->callout);
+		if (ch->dma.unload)
+		    ch->dma.unload(request);
+		request->result = ERESTART;
+		ata_cam_end_transaction(dev, request);
+	}
+	/* reset the controller HW, the channel and device(s) */
+	ATA_RESET(dev);
+	/* Tell the XPT about the event */
+	xpt_async(AC_BUS_RESET, ch->path, NULL);
+#endif
+	return(0);
 }
 
 int
@@ -310,6 +417,7 @@ ata_suspend(device_t dev)
     if (!dev || !(ch = device_get_softc(dev)))
 	return ENXIO;
 
+#ifndef ATA_CAM
     /* wait for the channel to be IDLE or detached before suspending */
     while (ch->r_irq) {
 	mtx_lock(&ch->state_mtx);
@@ -322,7 +430,8 @@ ata_suspend(device_t dev)
 	tsleep(ch, PRIBIO, "atasusp", hz/10);
     }
     ATA_LOCKING(dev, ATA_LF_UNLOCK);
-    return 0;
+#endif
+    return(0);
 }
 
 int
@@ -337,18 +446,36 @@ ata_resume(device_t dev)
     /* reinit the devices, we dont know what mode/state they are in */
     error = ata_reinit(dev);
 
+#ifndef ATA_CAM
     /* kick off requests on the queue */
     ata_start(dev);
+#endif
     return error;
 }
 
 void
 ata_interrupt(void *data)
+{
+#ifdef ATA_CAM
+    struct ata_channel *ch = (struct ata_channel *)data;
+
+    mtx_lock(&ch->state_mtx);
+#endif
+    ata_interrupt_locked(data);
+#ifdef ATA_CAM
+    mtx_unlock(&ch->state_mtx);
+#endif
+}
+
+static void
+ata_interrupt_locked(void *data)
 {
     struct ata_channel *ch = (struct ata_channel *)data;
     struct ata_request *request;
 
+#ifndef ATA_CAM
     mtx_lock(&ch->state_mtx);
+#endif
     do {
 	/* ignore interrupt if its not for us */
 	if (ch->hw.status && !ch->hw.status(ch->dev))
@@ -374,18 +501,71 @@ ata_interrupt(void *data)
 	    ch->running = NULL;
 	    if (ch->state == ATA_ACTIVE)
 		ch->state = ATA_IDLE;
+#ifdef ATA_CAM
+	    ata_cam_end_transaction(ch->dev, request);
+#else
 	    mtx_unlock(&ch->state_mtx);
 	    ATA_LOCKING(ch->dev, ATA_LF_UNLOCK);
 	    ata_finish(request);
+#endif
 	    return;
 	}
     } while (0);
+#ifndef ATA_CAM
     mtx_unlock(&ch->state_mtx);
+#endif
+}
+
+void
+ata_print_cable(device_t dev, u_int8_t *who)
+{
+    device_printf(dev,
+                  "DMA limited to UDMA33, %s found non-ATA66 cable\n", who);
+}
+
+int
+ata_check_80pin(device_t dev, int mode)
+{
+    struct ata_device *atadev = device_get_softc(dev);
+
+    if (!ata_dma_check_80pin) {
+        if (bootverbose)
+            device_printf(dev, "Skipping 80pin cable check\n");
+        return mode;
+    }
+
+    if (mode > ATA_UDMA2 && !(atadev->param.hwres & ATA_CABLE_ID)) {
+        ata_print_cable(dev, "device");
+        mode = ATA_UDMA2;
+    }
+    return mode;
+}
+
+void
+ata_setmode(device_t dev)
+{
+	struct ata_channel *ch = device_get_softc(device_get_parent(dev));
+	struct ata_device *atadev = device_get_softc(dev);
+	int error, mode, pmode;
+
+	mode = atadev->mode;
+	do {
+		pmode = mode = ata_limit_mode(dev, mode, ATA_DMA_MAX);
+		mode = ATA_SETMODE(device_get_parent(dev), atadev->unit, mode);
+		if ((ch->flags & (ATA_CHECKS_CABLE | ATA_SATA)) == 0)
+			mode = ata_check_80pin(dev, mode);
+	} while (pmode != mode); /* Interate till successfull negotiation. */
+	error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
+	if (bootverbose)
+	        device_printf(dev, "%ssetting %s\n",
+		    (error) ? "FAILURE " : "", ata_mode2str(mode));
+	atadev->mode = mode;
 }
 
 /*
  * device related interfaces
  */
+#ifndef ATA_CAM
 static int
 ata_ioctl(struct cdev *dev, u_long cmd, caddr_t data,
 	  int32_t flag, struct thread *td)
@@ -467,6 +647,7 @@ ata_ioctl(struct cdev *dev, u_long cmd, caddr_t data,
     }
     return error;
 }
+#endif
 
 int
 ata_device_ioctl(device_t dev, u_long cmd, caddr_t data)
@@ -549,11 +730,12 @@ ata_device_ioctl(device_t dev, u_long cmd, caddr_t data)
 	
     case IOCATASMODE:
 	atadev->mode = *mode;
-	ATA_SETMODE(device_get_parent(dev), dev);
+	ata_setmode(dev);
 	return 0;
 
     case IOCATAGMODE:
-	*mode = atadev->mode;
+	*mode = atadev->mode |
+	    (ATA_GETREV(device_get_parent(dev), atadev->unit) << 8);
 	return 0;
     case IOCATASSPINDOWN:
 	atadev->spindown = *mode;
@@ -566,6 +748,7 @@ ata_device_ioctl(device_t dev, u_long cmd, caddr_t data)
     }
 }
 
+#ifndef ATA_CAM
 static void
 ata_boot_attach(void)
 {
@@ -590,11 +773,12 @@ ata_boot_attach(void)
 
     mtx_unlock(&Giant);     /* newbus suckage dealt with, release Giant */
 }
-
+#endif
 
 /*
  * misc support functions
  */
+#ifndef ATA_CAM
 static device_t
 ata_add_child(device_t parent, struct ata_device *atadev, int unit)
 {
@@ -609,6 +793,7 @@ ata_add_child(device_t parent, struct ata_device *atadev, int unit)
     }
     return child;
 }
+#endif
 
 int
 ata_getparam(struct ata_device *atadev, int init)
@@ -705,6 +890,7 @@ ata_getparam(struct ata_device *atadev, int init)
     return error;
 }
 
+#ifndef ATA_CAM
 int
 ata_identify(device_t dev)
 {
@@ -778,6 +964,7 @@ ata_identify(device_t dev)
     mtx_unlock(&Giant);
     return 0;
 }
+#endif
 
 void
 ata_default_registers(device_t dev)
@@ -920,7 +1107,7 @@ ata_unit2str(struct ata_device *atadev)
     return str;
 }
 
-char *
+const char *
 ata_mode2str(int mode)
 {
     switch (mode) {
@@ -942,9 +1129,6 @@ ata_mode2str(int mode)
     case ATA_UDMA6: return "UDMA133";
     case ATA_SA150: return "SATA150";
     case ATA_SA300: return "SATA300";
-    case ATA_USB: return "USB";
-    case ATA_USB1: return "USB1";
-    case ATA_USB2: return "USB2";
     default:
 	if (mode & ATA_DMA_MASK)
 	    return "BIOSDMA";
@@ -953,13 +1137,24 @@ ata_mode2str(int mode)
     }
 }
 
-int
-ata_atapi(device_t dev)
+const char *
+ata_satarev2str(int rev)
 {
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
+	switch (rev) {
+	case 0: return "";
+	case 1: return "SATA 1.5Gb/s";
+	case 2: return "SATA 3Gb/s";
+	case 3: return "SATA 6Gb/s";
+	default: return "???";
+	}
+}
 
-    return (ch->devices & (ATA_ATAPI_MASTER << atadev->unit));
+int
+ata_atapi(device_t dev, int target)
+{
+    struct ata_channel *ch = device_get_softc(dev);
+
+    return (ch->devices & (ATA_ATAPI_MASTER << target));
 }
 
 int
@@ -1084,6 +1279,358 @@ bpack(int8_t *src, int8_t *dst, int len)
 	dst[j] = 0x00;
 }
 
+#ifdef ATA_CAM
+void
+ata_cam_begin_transaction(device_t dev, union ccb *ccb)
+{
+	struct ata_channel *ch = device_get_softc(dev);
+	struct ata_request *request;
+
+	if (!(request = ata_alloc_request())) {
+		device_printf(dev, "FAILURE - out of memory in start\n");
+		ccb->ccb_h.status = CAM_REQ_INVALID;
+		xpt_done(ccb);
+		return;
+	}
+	bzero(request, sizeof(*request));
+
+	/* setup request */
+	request->dev = NULL;
+	request->parent = dev;
+	request->unit = ccb->ccb_h.target_id;
+	if (ccb->ccb_h.func_code == XPT_ATA_IO) {
+		request->data = ccb->ataio.data_ptr;
+		request->bytecount = ccb->ataio.dxfer_len;
+		request->u.ata.command = ccb->ataio.cmd.command;
+		request->u.ata.feature = ((uint16_t)ccb->ataio.cmd.features_exp << 8) |
+					  (uint16_t)ccb->ataio.cmd.features;
+		request->u.ata.count = ((uint16_t)ccb->ataio.cmd.sector_count_exp << 8) |
+					(uint16_t)ccb->ataio.cmd.sector_count;
+		if (ccb->ataio.cmd.flags & CAM_ATAIO_48BIT) {
+			request->flags |= ATA_R_48BIT;
+			request->u.ata.lba =
+				     ((uint64_t)ccb->ataio.cmd.lba_high_exp << 40) |
+				     ((uint64_t)ccb->ataio.cmd.lba_mid_exp << 32) |
+				     ((uint64_t)ccb->ataio.cmd.lba_low_exp << 24);
+		} else {
+			request->u.ata.lba =
+				     ((uint64_t)(ccb->ataio.cmd.device & 0x0f) << 24);
+		}
+		request->u.ata.lba |= ((uint64_t)ccb->ataio.cmd.lba_high << 16) |
+				      ((uint64_t)ccb->ataio.cmd.lba_mid << 8) |
+				       (uint64_t)ccb->ataio.cmd.lba_low;
+		if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE &&
+		    ccb->ataio.cmd.flags & CAM_ATAIO_DMA)
+			request->flags |= ATA_R_DMA;
+		if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN)
+			request->flags |= ATA_R_READ;
+		if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT)
+			request->flags |= ATA_R_WRITE;
+	} else {
+		request->data = ccb->csio.data_ptr;
+		request->bytecount = ccb->csio.dxfer_len;
+		bcopy((ccb->ccb_h.flags & CAM_CDB_POINTER) ?
+		    ccb->csio.cdb_io.cdb_ptr : ccb->csio.cdb_io.cdb_bytes,
+		    request->u.atapi.ccb, ccb->csio.cdb_len);
+		request->flags |= ATA_R_ATAPI;
+		if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE &&
+		    ch->curr[ccb->ccb_h.target_id].mode >= ATA_DMA)
+			request->flags |= ATA_R_DMA;
+		if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN)
+			request->flags |= ATA_R_READ;
+		if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT)
+			request->flags |= ATA_R_WRITE;
+	}
+	request->transfersize = min(request->bytecount,
+	    ch->curr[ccb->ccb_h.target_id].bytecount);
+//	request->callback = ad_done;
+	request->retries = 0;
+	request->timeout = (ccb->ccb_h.timeout + 999) / 1000;
+	callout_init_mtx(&request->callout, &ch->state_mtx, CALLOUT_RETURNUNLOCKED);
+	request->ccb = ccb;
+
+	ch->running = request;
+	ch->state = ATA_ACTIVE;
+	if (ch->hw.begin_transaction(request) == ATA_OP_FINISHED) {
+	    ch->running = NULL;
+	    ch->state = ATA_IDLE;
+	    ata_cam_end_transaction(dev, request);
+	    return;
+	}
+}
+
+void
+ata_cam_end_transaction(device_t dev, struct ata_request *request)
+{
+	struct ata_channel *ch = device_get_softc(dev);
+	union ccb *ccb = request->ccb;
+	int fatalerr = 0;
+
+	ccb->ccb_h.status &= ~CAM_STATUS_MASK;
+	if (request->flags & ATA_R_TIMEOUT) {
+		xpt_freeze_simq(ch->sim, 1);
+		ccb->ccb_h.status &= ~CAM_STATUS_MASK;
+		ccb->ccb_h.status |= CAM_CMD_TIMEOUT | CAM_RELEASE_SIMQ;
+		fatalerr = 1;
+	} else if (request->status & ATA_S_ERROR) {
+		if (ccb->ccb_h.func_code == XPT_ATA_IO) {
+			ccb->ccb_h.status |= CAM_ATA_STATUS_ERROR;
+		} else {
+			ccb->ccb_h.status |= CAM_SCSI_STATUS_ERROR;
+			ccb->csio.scsi_status = SCSI_STATUS_CHECK_COND;
+		}
+	} else if (request->result == ERESTART)
+		ccb->ccb_h.status |= CAM_REQUEUE_REQ;
+	else if (request->result != 0)
+		ccb->ccb_h.status |= CAM_REQ_CMP_ERR;
+	else
+		ccb->ccb_h.status |= CAM_REQ_CMP;
+	if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP &&
+	    !(ccb->ccb_h.status & CAM_DEV_QFRZN)) {
+		xpt_freeze_devq(ccb->ccb_h.path, 1);
+		ccb->ccb_h.status |= CAM_DEV_QFRZN;
+	}
+	if (ccb->ccb_h.func_code == XPT_ATA_IO &&
+	    ((request->status & ATA_S_ERROR) ||
+	    (ccb->ataio.cmd.flags & CAM_ATAIO_NEEDRESULT))) {
+		struct ata_res *res = &ccb->ataio.res;
+		res->status = request->status;
+		res->error = request->error;
+		res->lba_low = request->u.ata.lba;
+		res->lba_mid = request->u.ata.lba >> 8;
+		res->lba_high = request->u.ata.lba >> 16;
+		res->device = request->u.ata.lba >> 24;
+		res->lba_low_exp = request->u.ata.lba >> 24;
+		res->lba_mid_exp = request->u.ata.lba >> 32;
+		res->lba_high_exp = request->u.ata.lba >> 40;
+		res->sector_count = request->u.ata.count;
+		res->sector_count_exp = request->u.ata.count >> 8;
+	}
+	ata_free_request(request);
+	xpt_done(ccb);
+	/* Do error recovery if needed. */
+	if (fatalerr)
+		ata_reinit(dev);
+}
+
+static void
+ataaction(struct cam_sim *sim, union ccb *ccb)
+{
+	device_t dev;
+	struct ata_channel *ch;
+
+	CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("ataaction func_code=%x\n",
+	    ccb->ccb_h.func_code));
+
+	ch = (struct ata_channel *)cam_sim_softc(sim);
+	dev = ch->dev;
+	switch (ccb->ccb_h.func_code) {
+	/* Common cases first */
+	case XPT_ATA_IO:	/* Execute the requested I/O operation */
+	case XPT_SCSI_IO:
+		if ((ch->devices & ((ATA_ATA_MASTER | ATA_ATAPI_MASTER)
+		    << ccb->ccb_h.target_id)) == 0) {
+			ccb->ccb_h.status = CAM_SEL_TIMEOUT;
+			xpt_done(ccb);
+			break;
+		}
+		if (ch->running)
+			device_printf(dev, "already running!\n");
+		if (ccb->ccb_h.func_code == XPT_ATA_IO &&
+		    (ccb->ataio.cmd.flags & CAM_ATAIO_CONTROL) &&
+		    (ccb->ataio.cmd.control & ATA_A_RESET)) {
+			struct ata_res *res = &ccb->ataio.res;
+			
+			bzero(res, sizeof(*res));
+			if (ch->devices & (ATA_ATA_MASTER << ccb->ccb_h.target_id)) {
+				res->lba_high = 0;
+				res->lba_mid = 0;
+			} else {
+				res->lba_high = 0xeb;
+				res->lba_mid = 0x14;
+			}
+			ccb->ccb_h.status = CAM_REQ_CMP;
+			xpt_done(ccb);
+			break;
+		}
+		ata_cam_begin_transaction(dev, ccb);
+		break;
+	case XPT_EN_LUN:		/* Enable LUN as a target */
+	case XPT_TARGET_IO:		/* Execute target I/O request */
+	case XPT_ACCEPT_TARGET_IO:	/* Accept Host Target Mode CDB */
+	case XPT_CONT_TARGET_IO:	/* Continue Host Target I/O Connection*/
+	case XPT_ABORT:			/* Abort the specified CCB */
+		/* XXX Implement */
+		ccb->ccb_h.status = CAM_REQ_INVALID;
+		xpt_done(ccb);
+		break;
+	case XPT_SET_TRAN_SETTINGS:
+	{
+		struct	ccb_trans_settings *cts = &ccb->cts;
+		struct	ata_cam_device *d; 
+
+		if (cts->type == CTS_TYPE_CURRENT_SETTINGS)
+			d = &ch->curr[ccb->ccb_h.target_id];
+		else
+			d = &ch->user[ccb->ccb_h.target_id];
+		if ((ch->flags & ATA_SATA) && (ch->flags & ATA_NO_SLAVE)) {
+			if (cts->xport_specific.sata.valid & CTS_SATA_VALID_REVISION)
+				d->revision = cts->xport_specific.sata.revision;
+			if (cts->xport_specific.ata.valid & CTS_SATA_VALID_MODE) {
+				if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
+					d->mode = ATA_SETMODE(ch->dev,
+					    ccb->ccb_h.target_id,
+					    cts->xport_specific.sata.mode);
+				} else
+					d->mode = cts->xport_specific.sata.mode;
+			}
+			if (cts->xport_specific.ata.valid & CTS_SATA_VALID_BYTECOUNT)
+				d->bytecount = min(8192, cts->xport_specific.sata.bytecount);
+		} else {
+			if (cts->xport_specific.ata.valid & CTS_ATA_VALID_MODE) {
+				if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
+					d->mode = ATA_SETMODE(ch->dev,
+					    ccb->ccb_h.target_id,
+					    cts->xport_specific.ata.mode);
+				} else
+					d->mode = cts->xport_specific.ata.mode;
+			}
+			if (cts->xport_specific.ata.valid & CTS_ATA_VALID_BYTECOUNT)
+				d->bytecount = cts->xport_specific.ata.bytecount;
+			if (ch->flags & ATA_SATA)
+				d->bytecount = min(8192, d->bytecount);
+		}
+		ccb->ccb_h.status = CAM_REQ_CMP;
+		xpt_done(ccb);
+		break;
+	}
+	case XPT_GET_TRAN_SETTINGS:
+	{
+		struct	ccb_trans_settings *cts = &ccb->cts;
+		struct  ata_cam_device *d;
+
+		if (cts->type == CTS_TYPE_CURRENT_SETTINGS)
+			d = &ch->curr[ccb->ccb_h.target_id];
+		else
+			d = &ch->user[ccb->ccb_h.target_id];
+		cts->protocol = PROTO_ATA;
+		cts->protocol_version = PROTO_VERSION_UNSPECIFIED;
+		if ((ch->flags & ATA_SATA) && (ch->flags & ATA_NO_SLAVE)) {
+			cts->transport = XPORT_SATA;
+			cts->transport_version = XPORT_VERSION_UNSPECIFIED;
+			cts->xport_specific.sata.mode = d->mode;
+			cts->xport_specific.sata.valid |= CTS_SATA_VALID_MODE;
+			cts->xport_specific.sata.bytecount = d->bytecount;
+			cts->xport_specific.sata.valid |= CTS_SATA_VALID_BYTECOUNT;
+			if (cts->type == CTS_TYPE_CURRENT_SETTINGS) {
+				cts->xport_specific.sata.revision =
+				    ATA_GETREV(dev, ccb->ccb_h.target_id);
+			} else
+				cts->xport_specific.sata.revision = d->revision;
+			cts->xport_specific.sata.valid |= CTS_SATA_VALID_REVISION;
+		} else {
+			cts->transport = XPORT_ATA;
+			cts->transport_version = XPORT_VERSION_UNSPECIFIED;
+			cts->xport_specific.ata.mode = d->mode;
+			cts->xport_specific.ata.valid |= CTS_ATA_VALID_MODE;
+			cts->xport_specific.ata.bytecount = d->bytecount;
+			cts->xport_specific.ata.valid |= CTS_ATA_VALID_BYTECOUNT;
+		}
+		ccb->ccb_h.status = CAM_REQ_CMP;
+		xpt_done(ccb);
+		break;
+	}
+#if 0
+	case XPT_CALC_GEOMETRY:
+	{
+		struct	  ccb_calc_geometry *ccg;
+		uint32_t size_mb;
+		uint32_t secs_per_cylinder;
+
+		ccg = &ccb->ccg;
+		size_mb = ccg->volume_size
+			/ ((1024L * 1024L) / ccg->block_size);
+		if (size_mb >= 1024 && (aha->extended_trans != 0)) {
+			if (size_mb >= 2048) {
+				ccg->heads = 255;
+				ccg->secs_per_track = 63;
+			} else {
+				ccg->heads = 128;
+				ccg->secs_per_track = 32;
+			}
+		} else {
+			ccg->heads = 64;
+			ccg->secs_per_track = 32;
+		}
+		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
+		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
+		ccb->ccb_h.status = CAM_REQ_CMP;
+		xpt_done(ccb);
+		break;
+	}
+#endif
+	case XPT_RESET_BUS:		/* Reset the specified SCSI bus */
+	case XPT_RESET_DEV:	/* Bus Device Reset the specified SCSI device */
+		ata_reinit(dev);
+		ccb->ccb_h.status = CAM_REQ_CMP;
+		xpt_done(ccb);
+		break;
+	case XPT_TERM_IO:		/* Terminate the I/O process */
+		/* XXX Implement */
+		ccb->ccb_h.status = CAM_REQ_INVALID;
+		xpt_done(ccb);
+		break;
+	case XPT_PATH_INQ:		/* Path routing inquiry */
+	{
+		struct ccb_pathinq *cpi = &ccb->cpi;
+
+		cpi->version_num = 1; /* XXX??? */
+		cpi->hba_inquiry = PI_SDTR_ABLE;
+		cpi->target_sprt = 0;
+		cpi->hba_misc = PIM_SEQSCAN;
+		cpi->hba_eng_cnt = 0;
+		if (ch->flags & ATA_NO_SLAVE)
+			cpi->max_target = 0;
+		else
+			cpi->max_target = 1;
+		cpi->max_lun = 0;
+		cpi->initiator_id = 0;
+		cpi->bus_id = cam_sim_bus(sim);
+		if (ch->flags & ATA_SATA)
+			cpi->base_transfer_speed = 150000;
+		else
+			cpi->base_transfer_speed = 3300;
+		strncpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN);
+		strncpy(cpi->hba_vid, "ATA", HBA_IDLEN);
+		strncpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN);
+		cpi->unit_number = cam_sim_unit(sim);
+		if ((ch->flags & ATA_SATA) && (ch->flags & ATA_NO_SLAVE))
+			cpi->transport = XPORT_SATA;
+		else
+			cpi->transport = XPORT_ATA;
+		cpi->transport_version = XPORT_VERSION_UNSPECIFIED;
+		cpi->protocol = PROTO_ATA;
+		cpi->protocol_version = PROTO_VERSION_UNSPECIFIED;
+		cpi->maxio = ch->dma.max_iosize ? ch->dma.max_iosize : DFLTPHYS;
+		cpi->ccb_h.status = CAM_REQ_CMP;
+		xpt_done(ccb);
+		break;
+	}
+	default:
+		ccb->ccb_h.status = CAM_REQ_INVALID;
+		xpt_done(ccb);
+		break;
+	}
+}
+
+static void
+atapoll(struct cam_sim *sim)
+{
+	struct ata_channel *ch = (struct ata_channel *)cam_sim_softc(sim);
+
+	ata_interrupt_locked(ch);
+}
+#endif
 
 /*
  * module handeling
@@ -1091,10 +1638,13 @@ bpack(int8_t *src, int8_t *dst, int len)
 static int
 ata_module_event_handler(module_t mod, int what, void *arg)
 {
+#ifndef ATA_CAM
     static struct cdev *atacdev;
+#endif
 
     switch (what) {
     case MOD_LOAD:
+#ifndef ATA_CAM
 	/* register controlling device */
 	atacdev = make_dev(&ata_cdevsw, 0, UID_ROOT, GID_OPERATOR, 0600, "ata");
 
@@ -1112,11 +1662,14 @@ ata_module_event_handler(module_t mod, int what, void *arg)
 		free(ata_delayed_attach, M_TEMP);
 	    }
 	}
+#endif
 	return 0;
 
     case MOD_UNLOAD:
+#ifndef ATA_CAM
 	/* deregister controlling device */
 	destroy_dev(atacdev);
+#endif
 	return 0;
 
     default:
@@ -1127,6 +1680,9 @@ ata_module_event_handler(module_t mod, int what, void *arg)
 static moduledata_t ata_moduledata = { "ata", ata_module_event_handler, NULL };
 DECLARE_MODULE(ata, ata_moduledata, SI_SUB_CONFIGURE, SI_ORDER_SECOND);
 MODULE_VERSION(ata, 1);
+#ifdef ATA_CAM
+MODULE_DEPEND(ata, cam, 1, 1, 1);
+#endif
 
 static void
 ata_init(void)
diff --git a/sys/dev/ata/ata-all.h b/sys/dev/ata/ata-all.h
index f832505f36b..23dc458c697 100644
--- a/sys/dev/ata/ata-all.h
+++ b/sys/dev/ata/ata-all.h
@@ -425,6 +425,9 @@ struct ata_request {
     struct ata_composite        *composite;     /* for composite atomic ops */
     void                        *driver;        /* driver specific */
     TAILQ_ENTRY(ata_request)    chain;          /* list management */
+#ifdef ATA_CAM
+    union ccb			*ccb;
+#endif
 };
 
 /* define this for debugging request processing */
@@ -531,6 +534,14 @@ struct ata_resource {
     int                         offset;
 };
 
+#ifdef ATA_CAM
+struct ata_cam_device {
+	u_int			revision;
+	int			mode;
+	u_int			bytecount;
+};
+#endif
+
 /* structure describing an ATA channel */
 struct ata_channel {
     device_t                    dev;            /* device handle */
@@ -547,6 +558,9 @@ struct ata_channel {
 #define         ATA_ATAPI_DMA_RO        0x04
 #define         ATA_NO_48BIT_DMA        0x08
 #define         ATA_ALWAYS_DMASTAT      0x10
+#define         ATA_CHECKS_CABLE	0x20
+#define         ATA_NO_ATAPI_DMA	0x40
+#define         ATA_SATA		0x80
 
     int				pm_level;	/* power management level */
     int                         devices;        /* what is present */
@@ -567,6 +581,12 @@ struct ata_channel {
     struct ata_request          *freezepoint;   /* composite freezepoint */
     struct ata_request          *running;       /* currently running request */
     struct task			conntask;	/* PHY events handling task */
+#ifdef ATA_CAM
+	struct cam_sim		*sim;
+	struct cam_path		*path;
+	struct ata_cam_device	user[16];       /* User-specified settings */                             
+	struct ata_cam_device	curr[16];       /* Current settings */                                    
+#endif
 };
 
 /* disk bay/enclosure related */
@@ -600,12 +620,20 @@ void ata_default_registers(device_t dev);
 void ata_modify_if_48bit(struct ata_request *request);
 void ata_udelay(int interval);
 char *ata_unit2str(struct ata_device *atadev);
-char *ata_mode2str(int mode);
-int ata_atapi(device_t dev);
+const char *ata_mode2str(int mode);
+const char *ata_satarev2str(int rev);
+int ata_atapi(device_t dev, int target);
 int ata_pmode(struct ata_params *ap);
 int ata_wmode(struct ata_params *ap);
 int ata_umode(struct ata_params *ap);
 int ata_limit_mode(device_t dev, int mode, int maxmode);
+void ata_setmode(device_t dev);
+void ata_print_cable(device_t dev, u_int8_t *who);
+int ata_check_80pin(device_t dev, int mode);
+#ifdef ATA_CAM
+void ata_cam_begin_transaction(device_t dev, union ccb *ccb);
+void ata_cam_end_transaction(device_t dev, struct ata_request *request);
+#endif
 
 /* ata-queue.c: */
 int ata_controlcmd(device_t dev, u_int8_t command, u_int16_t feature, u_int64_t lba, u_int16_t count);
@@ -635,7 +663,8 @@ void ata_sata_phy_check_events(device_t dev);
 int ata_sata_scr_read(struct ata_channel *ch, int port, int reg, uint32_t *val);
 int ata_sata_scr_write(struct ata_channel *ch, int port, int reg, uint32_t val);
 int ata_sata_phy_reset(device_t dev, int port, int quick);
-void ata_sata_setmode(device_t dev, int mode);
+int ata_sata_setmode(device_t dev, int target, int mode);
+int ata_sata_getrev(device_t dev, int target);
 int ata_request2fis_h2d(struct ata_request *request, u_int8_t *fis);
 void ata_pm_identify(device_t dev);
 
diff --git a/sys/dev/ata/ata-disk.c b/sys/dev/ata/ata-disk.c
index 22be3543c7d..c6b50ddeb43 100644
--- a/sys/dev/ata/ata-disk.c
+++ b/sys/dev/ata/ata-disk.c
@@ -126,16 +126,20 @@ ad_attach(device_t dev)
     adp->disk->d_name = "ad";
     adp->disk->d_drv1 = dev;
     adp->disk->d_maxsize = ch->dma.max_iosize ? ch->dma.max_iosize : DFLTPHYS;
+    if (atadev->param.support.command2 & ATA_SUPPORT_ADDRESS48)
+	adp->disk->d_maxsize = min(adp->disk->d_maxsize, 65536 * DEV_BSIZE);
+    else					/* 28bit ATA command limit */
+	adp->disk->d_maxsize = min(adp->disk->d_maxsize, 256 * DEV_BSIZE);
     adp->disk->d_sectorsize = DEV_BSIZE;
     adp->disk->d_mediasize = DEV_BSIZE * (off_t)adp->total_secs;
     adp->disk->d_fwsectors = adp->sectors;
     adp->disk->d_fwheads = adp->heads;
     adp->disk->d_unit = device_get_unit(dev);
     if (atadev->param.support.command2 & ATA_SUPPORT_FLUSHCACHE)
-	adp->disk->d_flags = DISKFLAG_CANFLUSHCACHE;
+	adp->disk->d_flags |= DISKFLAG_CANFLUSHCACHE;
     if ((atadev->param.support.command2 & ATA_SUPPORT_CFA) ||
 	atadev->param.config == ATA_PROTO_CFA)
-	adp->disk->d_flags = DISKFLAG_CANDELETE;
+	adp->disk->d_flags |= DISKFLAG_CANDELETE;
     strlcpy(adp->disk->d_ident, atadev->param.serial,
 	sizeof(adp->disk->d_ident));
     disk_create(adp->disk, DISK_VERSION);
@@ -381,7 +385,7 @@ ad_init(device_t dev)
 {
     struct ata_device *atadev = device_get_softc(dev);
 
-    ATA_SETMODE(device_get_parent(dev), dev);
+    ata_setmode(dev);
 
     /* enable readahead caching */
     if (atadev->param.support.command1 & ATA_SUPPORT_LOOKAHEAD)
@@ -397,7 +401,7 @@ ad_init(device_t dev)
 
     /* use multiple sectors/interrupt if device supports it */
     if (ad_version(atadev->param.version_major)) {
-	int secsperint = max(1, min(atadev->param.sectors_intr, 16));
+	int secsperint = max(1, min(atadev->param.sectors_intr & 0xff, 16));
 
 	if (!ata_controlcmd(dev, ATA_SET_MULTI, 0, 0, secsperint))
 	    atadev->max_iosize = secsperint * DEV_BSIZE;
@@ -533,12 +537,13 @@ ad_describe(device_t dev)
 	strncpy(product, atadev->param.model, 40);
     }
 
-    device_printf(dev, "%juMB <%s%s %.8s> at ata%d-%s %s%s\n",
+    device_printf(dev, "%juMB <%s%s %.8s> at ata%d-%s %s%s %s\n",
 		  adp->total_secs / (1048576 / DEV_BSIZE),
 		  vendor, product, atadev->param.revision,
 		  device_get_unit(ch->dev), ata_unit2str(atadev),
 		  (adp->flags & AD_F_TAG_ENABLED) ? "tagged " : "",
-		  ata_mode2str(atadev->mode));
+		  ata_mode2str(atadev->mode),
+		  ata_satarev2str(ATA_GETREV(device_get_parent(dev), atadev->unit)));
     if (bootverbose) {
 	device_printf(dev, "%ju sectors [%juC/%dH/%dS] "
 		      "%d sectors/interrupt %d depth queue\n", adp->total_secs,
diff --git a/sys/dev/ata/ata-dma.c b/sys/dev/ata/ata-dma.c
index eae43483346..478693dd759 100644
--- a/sys/dev/ata/ata-dma.c
+++ b/sys/dev/ata/ata-dma.c
@@ -76,7 +76,7 @@ ata_dmainit(device_t dev)
     ch->dma.alignment = 2;
     ch->dma.boundary = 65536;
     ch->dma.segsize = 65536;
-    ch->dma.max_iosize = 128 * DEV_BSIZE;
+    ch->dma.max_iosize = MIN((ATA_DMA_ENTRIES - 1) * PAGE_SIZE, MAXPHYS);
     ch->dma.max_address = BUS_SPACE_MAXADDR_32BIT;
     ch->dma.dma_slots = 1;
 
diff --git a/sys/dev/ata/ata-lowlevel.c b/sys/dev/ata/ata-lowlevel.c
index 2dbb9862d0e..566b8f676a5 100644
--- a/sys/dev/ata/ata-lowlevel.c
+++ b/sys/dev/ata/ata-lowlevel.c
@@ -82,6 +82,9 @@ ata_begin_transaction(struct ata_request *request)
     ATA_DEBUG_RQ(request, "begin transaction");
 
     /* disable ATAPI DMA writes if HW doesn't support it */
+    if ((ch->flags & ATA_NO_ATAPI_DMA) &&
+	(request->flags & ATA_R_ATAPI) == ATA_R_ATAPI)
+	    request->flags &= ~ATA_R_DMA;
     if ((ch->flags & ATA_ATAPI_DMA_RO) &&
 	((request->flags & (ATA_R_ATAPI | ATA_R_DMA | ATA_R_WRITE)) ==
 	 (ATA_R_ATAPI | ATA_R_DMA | ATA_R_WRITE)))
@@ -757,7 +760,9 @@ static void
 ata_tf_write(struct ata_request *request)
 {
     struct ata_channel *ch = device_get_softc(request->parent);
+#ifndef ATA_CAM
     struct ata_device *atadev = device_get_softc(request->dev);
+#endif
 
     if (request->flags & ATA_R_48BIT) {
 	ATA_IDX_OUTB(ch, ATA_FEATURE, request->u.ata.feature >> 8);
@@ -775,6 +780,7 @@ ata_tf_write(struct ata_request *request)
     else {
 	ATA_IDX_OUTB(ch, ATA_FEATURE, request->u.ata.feature);
 	ATA_IDX_OUTB(ch, ATA_COUNT, request->u.ata.count);
+#ifndef ATA_CAM
 	if (atadev->flags & ATA_D_USE_CHS) {
 	    int heads, sectors;
     
@@ -797,13 +803,16 @@ ata_tf_write(struct ata_request *request)
 			   sectors) & 0xf));
 	}
 	else {
+#endif
 	    ATA_IDX_OUTB(ch, ATA_SECTOR, request->u.ata.lba);
 	    ATA_IDX_OUTB(ch, ATA_CYL_LSB, request->u.ata.lba >> 8);
 	    ATA_IDX_OUTB(ch, ATA_CYL_MSB, request->u.ata.lba >> 16);
 	    ATA_IDX_OUTB(ch, ATA_DRIVE,
 			 ATA_D_IBM | ATA_D_LBA | ATA_DEV(request->unit) |
 			 ((request->u.ata.lba >> 24) & 0x0f));
+#ifndef ATA_CAM
 	}
+#endif
     }
 }
 
diff --git a/sys/dev/ata/ata-pci.c b/sys/dev/ata/ata-pci.c
index 4440bdea292..cd877284085 100644
--- a/sys/dev/ata/ata-pci.c
+++ b/sys/dev/ata/ata-pci.c
@@ -55,10 +55,6 @@ static MALLOC_DEFINE(M_ATAPCI, "ata_pci", "ATA driver PCI");
 /* misc defines */
 #define IOMASK                  0xfffffffc
 
-/* local prototypes */
-static int ata_generic_chipinit(device_t dev);
-static void ata_generic_setmode(device_t dev, int mode);
-
 /*
  * generic PCI ATA device probe
  */
@@ -189,91 +185,138 @@ ata_pci_resume(device_t dev)
     return error;
 }
 
+int
+ata_pci_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)
+{
+
+	return (BUS_READ_IVAR(device_get_parent(dev), dev, which, result));
+}
+
+int
+ata_pci_write_ivar(device_t dev, device_t child, int which, uintptr_t value)
+{
+
+	return (BUS_WRITE_IVAR(device_get_parent(dev), dev, which, value));
+}
+
+uint32_t
+ata_pci_read_config(device_t dev, device_t child, int reg, int width)
+{
+
+	return (pci_read_config(dev, reg, width));
+}
+
+void
+ata_pci_write_config(device_t dev, device_t child, int reg, 
+    uint32_t val, int width)
+{
+
+	pci_write_config(dev, reg, val, width);
+}
+
 struct resource *
 ata_pci_alloc_resource(device_t dev, device_t child, int type, int *rid,
 		       u_long start, u_long end, u_long count, u_int flags)
 {
-    struct ata_pci_controller *controller = device_get_softc(dev);
-    int unit = ((struct ata_channel *)device_get_softc(child))->unit;
-    struct resource *res = NULL;
-    int myrid;
+	struct ata_pci_controller *controller = device_get_softc(dev);
+	struct resource *res = NULL;
 
-    if (type == SYS_RES_IOPORT) {
-	switch (*rid) {
-	case ATA_IOADDR_RID:
-	    if (controller->legacy) {
-		start = (unit ? ATA_SECONDARY : ATA_PRIMARY);
-		count = ATA_IOSIZE;
-		end = start + count - 1;
-	    }
-	    myrid = PCIR_BAR(0) + (unit << 3);
-	    res = BUS_ALLOC_RESOURCE(device_get_parent(dev), dev,
-				     SYS_RES_IOPORT, &myrid,
-				     start, end, count, flags);
-	    break;
+	if (device_get_devclass(child) == ata_devclass) {
+		int unit = ((struct ata_channel *)device_get_softc(child))->unit;
+		int myrid;
 
-	case ATA_CTLADDR_RID:
-	    if (controller->legacy) {
-		start = (unit ? ATA_SECONDARY : ATA_PRIMARY) + ATA_CTLOFFSET;
-		count = ATA_CTLIOSIZE;
-		end = start + count - 1;
-	    }
-	    myrid = PCIR_BAR(1) + (unit << 3);
-	    res = BUS_ALLOC_RESOURCE(device_get_parent(dev), dev,
-				     SYS_RES_IOPORT, &myrid,
-				     start, end, count, flags);
-	    break;
-	}
-    }
-    if (type == SYS_RES_IRQ && *rid == ATA_IRQ_RID) {
-	if (controller->legacy) {
-	    int irq = (unit == 0 ? 14 : 15);
+		if (type == SYS_RES_IOPORT) {
+			switch (*rid) {
+			case ATA_IOADDR_RID:
+			    if (controller->legacy) {
+				start = (unit ? ATA_SECONDARY : ATA_PRIMARY);
+				count = ATA_IOSIZE;
+				end = start + count - 1;
+			    }
+			    myrid = PCIR_BAR(0) + (unit << 3);
+			    res = BUS_ALLOC_RESOURCE(device_get_parent(dev), dev,
+				SYS_RES_IOPORT, &myrid,
+				start, end, count, flags);
+			    break;
+			case ATA_CTLADDR_RID:
+			    if (controller->legacy) {
+				start = (unit ? ATA_SECONDARY : ATA_PRIMARY) +
+				    ATA_CTLOFFSET;
+				count = ATA_CTLIOSIZE;
+				end = start + count - 1;
+			    }
+			    myrid = PCIR_BAR(1) + (unit << 3);
+			    res = BUS_ALLOC_RESOURCE(device_get_parent(dev), dev,
+				SYS_RES_IOPORT, &myrid,
+				start, end, count, flags);
+			    break;
+			}
+		}
+		if (type == SYS_RES_IRQ && *rid == ATA_IRQ_RID) {
+			if (controller->legacy) {
+			    int irq = (unit == 0 ? 14 : 15);
 	    
-	    res = BUS_ALLOC_RESOURCE(device_get_parent(dev), child,
-				     SYS_RES_IRQ, rid, irq, irq, 1, flags);
+			    res = BUS_ALLOC_RESOURCE(device_get_parent(dev), child,
+				SYS_RES_IRQ, rid, irq, irq, 1, flags);
+			} else
+			    res = controller->r_irq;
+		}
+	} else {
+		if (type == SYS_RES_IRQ) {
+			if (*rid != ATA_IRQ_RID)
+				return (NULL);
+			res = controller->r_irq;
+		} else {
+			res = BUS_ALLOC_RESOURCE(device_get_parent(dev), dev,
+			     type, rid, start, end, count, flags);
+		}
 	}
-	else
-	    res = controller->r_irq;
-    }
-    return res;
+	return (res);
 }
 
 int
 ata_pci_release_resource(device_t dev, device_t child, int type, int rid,
 			 struct resource *r)
 {
-    struct ata_pci_controller *controller = device_get_softc(dev);
-    int unit = ((struct ata_channel *)device_get_softc(child))->unit;
 
-    if (type == SYS_RES_IOPORT) {
-	switch (rid) {
-	case ATA_IOADDR_RID:
-	    return BUS_RELEASE_RESOURCE(device_get_parent(dev), dev,
-					SYS_RES_IOPORT,
-					PCIR_BAR(0) + (unit << 3), r);
-	    break;
+	if (device_get_devclass(child) == ata_devclass) {
+		struct ata_pci_controller *controller = device_get_softc(dev);
+		int unit = ((struct ata_channel *)device_get_softc(child))->unit;
 
-	case ATA_CTLADDR_RID:
-	    return BUS_RELEASE_RESOURCE(device_get_parent(dev), dev,
-					SYS_RES_IOPORT,
-					PCIR_BAR(1) + (unit << 3), r);
-	    break;
-	default:
-	    return ENOENT;
+	        if (type == SYS_RES_IOPORT) {
+	    		switch (rid) {
+			case ATA_IOADDR_RID:
+		    	    return BUS_RELEASE_RESOURCE(device_get_parent(dev), dev,
+				SYS_RES_IOPORT,
+				PCIR_BAR(0) + (unit << 3), r);
+			case ATA_CTLADDR_RID:
+			    return BUS_RELEASE_RESOURCE(device_get_parent(dev), dev,
+				SYS_RES_IOPORT,
+				PCIR_BAR(1) + (unit << 3), r);
+			default:
+			    return ENOENT;
+			}
+		}
+		if (type == SYS_RES_IRQ) {
+			if (rid != ATA_IRQ_RID)
+				return ENOENT;
+			if (controller->legacy) {
+				return BUS_RELEASE_RESOURCE(device_get_parent(dev), child,
+				    SYS_RES_IRQ, rid, r);
+			} else  
+				return 0;
+		}
+	} else {
+		if (type == SYS_RES_IRQ) {
+			if (rid != ATA_IRQ_RID)
+				return (ENOENT);
+			return (0);
+		} else {
+			return (BUS_RELEASE_RESOURCE(device_get_parent(dev), child,
+			    type, rid, r));
+		}
 	}
-    }
-    if (type == SYS_RES_IRQ) {
-	if (rid != ATA_IRQ_RID)
-	    return ENOENT;
-
-	if (controller->legacy) {
-	    return BUS_RELEASE_RESOURCE(device_get_parent(dev), child,
-					SYS_RES_IRQ, rid, r);
-	}
-	else  
-	    return 0;
-    }
-    return EINVAL;
+	return (EINVAL);
 }
 
 int
@@ -281,58 +324,60 @@ ata_pci_setup_intr(device_t dev, device_t child, struct resource *irq,
 		   int flags, driver_filter_t *filter, driver_intr_t *function, 
 		   void *argument, void **cookiep)
 {
-    struct ata_pci_controller *controller = device_get_softc(dev);
-
-    if (controller->legacy) {
-	return BUS_SETUP_INTR(device_get_parent(dev), child, irq,
-			      flags, filter, function, argument, cookiep);
-    }
-    else {
 	struct ata_pci_controller *controller = device_get_softc(dev);
-	int unit = ((struct ata_channel *)device_get_softc(child))->unit;
 
-	if (filter != NULL) {
-		printf("ata-pci.c: we cannot use a filter here\n");
-		return (EINVAL);
+	if (controller->legacy) {
+		return BUS_SETUP_INTR(device_get_parent(dev), child, irq,
+			      flags, filter, function, argument, cookiep);
+	} else {
+		struct ata_pci_controller *controller = device_get_softc(dev);
+		int unit;
+
+	    	if (filter != NULL) {
+			printf("ata-pci.c: we cannot use a filter here\n");
+			return (EINVAL);
+		}
+		if (device_get_devclass(child) == ata_devclass)
+			unit = ((struct ata_channel *)device_get_softc(child))->unit;
+		else
+			unit = ATA_PCI_MAX_CH - 1;
+		controller->interrupt[unit].function = function;
+		controller->interrupt[unit].argument = argument;
+		*cookiep = controller;
+		return 0;
 	}
-	controller->interrupt[unit].function = function;
-	controller->interrupt[unit].argument = argument;
-	*cookiep = controller;
-	return 0;
-    }
 }
 
 int
 ata_pci_teardown_intr(device_t dev, device_t child, struct resource *irq,
 		      void *cookie)
 {
-    struct ata_pci_controller *controller = device_get_softc(dev);
-
-    if (controller->legacy) {
-	return BUS_TEARDOWN_INTR(device_get_parent(dev), child, irq, cookie);
-    }
-    else {
 	struct ata_pci_controller *controller = device_get_softc(dev);
-	int unit = ((struct ata_channel *)device_get_softc(child))->unit;
 
-	controller->interrupt[unit].function = NULL;
-	controller->interrupt[unit].argument = NULL;
-	return 0;
-    }
+        if (controller->legacy) {
+		return BUS_TEARDOWN_INTR(device_get_parent(dev), child, irq, cookie);
+	} else {
+		struct ata_pci_controller *controller = device_get_softc(dev);
+		int unit;
+
+		if (device_get_devclass(child) == ata_devclass)
+			unit = ((struct ata_channel *)device_get_softc(child))->unit;
+		else
+			unit = ATA_PCI_MAX_CH - 1;
+		controller->interrupt[unit].function = NULL;
+		controller->interrupt[unit].argument = NULL;
+		return 0;
+	}
 }
     
-static void
-ata_generic_setmode(device_t dev, int mode)
+int
+ata_generic_setmode(device_t dev, int target, int mode)
 {
-    struct ata_device *atadev = device_get_softc(dev);
 
-    mode = ata_limit_mode(dev, mode, ATA_UDMA2);
-    mode = ata_check_80pin(dev, mode);
-    if (!ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
-	atadev->mode = mode;
+	return (min(mode, ATA_UDMA2));
 }
 
-static int
+int
 ata_generic_chipinit(device_t dev)
 {
     struct ata_pci_controller *ctlr = device_get_softc(dev);
@@ -409,8 +454,7 @@ ata_pci_status(device_t dev)
 	 (ch->dma.flags & ATA_DMA_ACTIVE))) {
 	int bmstat = ATA_IDX_INB(ch, ATA_BMSTAT_PORT) & ATA_BMSTAT_MASK;
 
-	if ((bmstat & (ATA_BMSTAT_ACTIVE | ATA_BMSTAT_INTERRUPT)) !=
-	    ATA_BMSTAT_INTERRUPT)
+	if ((bmstat & ATA_BMSTAT_INTERRUPT) == 0)
 	    return 0;
 	ATA_IDX_OUTB(ch, ATA_BMSTAT_PORT, bmstat & ~ATA_BMSTAT_ERROR);
 	DELAY(1);
@@ -510,12 +554,16 @@ static device_method_t ata_pci_methods[] = {
     DEVMETHOD(device_shutdown,          bus_generic_shutdown),
 
     /* bus methods */
+    DEVMETHOD(bus_read_ivar,		ata_pci_read_ivar),
+    DEVMETHOD(bus_write_ivar,		ata_pci_write_ivar),
     DEVMETHOD(bus_alloc_resource,       ata_pci_alloc_resource),
     DEVMETHOD(bus_release_resource,     ata_pci_release_resource),
     DEVMETHOD(bus_activate_resource,    bus_generic_activate_resource),
     DEVMETHOD(bus_deactivate_resource,  bus_generic_deactivate_resource),
     DEVMETHOD(bus_setup_intr,           ata_pci_setup_intr),
     DEVMETHOD(bus_teardown_intr,        ata_pci_teardown_intr),
+    DEVMETHOD(pci_read_config,		ata_pci_read_config),
+    DEVMETHOD(pci_write_config,		ata_pci_write_config),
 
     { 0, 0 }
 };
@@ -537,6 +585,8 @@ ata_pcichannel_probe(device_t dev)
 {
     char buffer[32];
 
+    if ((intptr_t)device_get_ivars(dev) < 0)
+	    return (ENXIO);
     sprintf(buffer, "ATA channel %d", (int)(intptr_t)device_get_ivars(dev));
     device_set_desc_copy(dev, buffer);
 
@@ -649,16 +699,26 @@ ata_pcichannel_reset(device_t dev)
 	ata_generic_reset(dev);
 }
 
-static void
-ata_pcichannel_setmode(device_t parent, device_t dev)
+static int
+ata_pcichannel_setmode(device_t dev, int target, int mode)
 {
-    struct ata_pci_controller *ctlr = device_get_softc(GRANDPARENT(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int mode = atadev->mode;
+	struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
 
-    ctlr->setmode(dev, ATA_PIO_MAX);
-    if (mode >= ATA_DMA)
-	ctlr->setmode(dev, mode);
+	if (ctlr->setmode)
+		return (ctlr->setmode(dev, target, mode));
+	else
+		return (ata_generic_setmode(dev, target, mode));
+}
+
+static int
+ata_pcichannel_getrev(device_t dev, int target)
+{
+	struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
+
+	if (ctlr->getrev)
+		return (ctlr->getrev(dev, target));
+	else
+		return (0);
 }
 
 static device_method_t ata_pcichannel_methods[] = {
@@ -672,6 +732,7 @@ static device_method_t ata_pcichannel_methods[] = {
 
     /* ATA methods */
     DEVMETHOD(ata_setmode,      ata_pcichannel_setmode),
+    DEVMETHOD(ata_getrev,       ata_pcichannel_getrev),
     DEVMETHOD(ata_locking,      ata_pcichannel_locking),
     DEVMETHOD(ata_reset,        ata_pcichannel_reset),
 
@@ -711,7 +772,7 @@ ata_generic_intr(void *data)
     struct ata_channel *ch;
     int unit;
 
-    for (unit = 0; unit < ctlr->channels; unit++) {
+    for (unit = 0; unit < ATA_PCI_MAX_CH; unit++) {
 	if ((ch = ctlr->interrupt[unit].argument))
 	    ctlr->interrupt[unit].function(ch);
     }
@@ -800,31 +861,6 @@ ata_find_chip(device_t dev, struct ata_chip_id *index, int slot)
     return (NULL);
 }
 
-void
-ata_print_cable(device_t dev, u_int8_t *who)
-{
-    device_printf(dev,
-                  "DMA limited to UDMA33, %s found non-ATA66 cable\n", who);
-}
-
-int
-ata_check_80pin(device_t dev, int mode)
-{
-    struct ata_device *atadev = device_get_softc(dev);
-
-    if (!ata_dma_check_80pin) {
-        if (bootverbose)
-            device_printf(dev, "Skipping 80pin cable check\n");
-        return mode;
-    }
-
-    if (mode > ATA_UDMA2 && !(atadev->param.hwres & ATA_CABLE_ID)) {
-        ata_print_cable(dev, "device");
-        mode = ATA_UDMA2;
-    }
-    return mode;
-}
-
 char *
 ata_pcivendor2str(device_t dev)
 {
diff --git a/sys/dev/ata/ata-pci.h b/sys/dev/ata/ata-pci.h
index 66a25c4be87..6f696a69eb4 100644
--- a/sys/dev/ata/ata-pci.h
+++ b/sys/dev/ata/ata-pci.h
@@ -36,6 +36,8 @@ struct ata_chip_id {
     char                *text;
 };
 
+#define ATA_PCI_MAX_CH	8
+
 /* structure describing a PCI ATA controller */
 struct ata_pci_controller {
     device_t            dev;
@@ -61,11 +63,12 @@ struct ata_pci_controller {
     int                 (*ch_resume)(device_t);
     int                 (*locking)(device_t, int);
     void                (*reset)(device_t);
-    void                (*setmode)(device_t, int);
+    int                 (*setmode)(device_t, int, int);
+    int                 (*getrev)(device_t, int);
     struct {
     void                (*function)(void *);
     void                *argument;
-    } interrupt[8];     /* XXX SOS max ch# for now */
+    } interrupt[ATA_PCI_MAX_CH];
     void                *chipset_data;
 };
 
@@ -201,6 +204,7 @@ struct ata_pci_controller {
 #define ATA_I82801JI_R1         0x3a258086
 #define ATA_I82801JI_S2         0x3a268086
 #define ATA_I31244              0x32008086
+#define ATA_ISCH                0x811a8086
 
 #define ATA_ITE_ID              0x1283
 #define ATA_IT8211F             0x82111283
@@ -225,7 +229,10 @@ struct ata_pci_controller {
 #define ATA_M88SX6081           0x608111ab
 #define ATA_M88SX7042           0x704211ab
 #define ATA_M88SX6101           0x610111ab
+#define ATA_M88SX6102           0x610211ab
+#define ATA_M88SX6111           0x611111ab
 #define ATA_M88SX6121           0x612111ab
+#define ATA_M88SX6141           0x614111ab
 #define ATA_M88SX6145           0x614511ab
 
 #define ATA_MICRON_ID           0x1042
@@ -476,6 +483,11 @@ struct ata_pci_controller {
 #define ATA_VIA6410             0x31641106
 #define ATA_VIA6420             0x31491106
 #define ATA_VIA6421             0x32491106
+#define ATA_VIACX700IDE         0x05811106
+#define ATA_VIACX700            0x83241106
+#define ATA_VIASATAIDE          0x53241106
+#define ATA_VIAVX800            0x83531106
+#define ATA_VIAVX855            0x84091106
 
 /* global prototypes ata-pci.c */
 int ata_pci_probe(device_t dev);
@@ -483,6 +495,11 @@ int ata_pci_attach(device_t dev);
 int ata_pci_detach(device_t dev);
 int ata_pci_suspend(device_t dev);
 int ata_pci_resume(device_t dev);
+int ata_pci_read_ivar(device_t dev, device_t child, int which, uintptr_t *result);
+int ata_pci_write_ivar(device_t dev, device_t child, int which, uintptr_t value);
+uint32_t ata_pci_read_config(device_t dev, device_t child, int reg, int width);
+void ata_pci_write_config(device_t dev, device_t child, int reg, 
+    uint32_t val, int width);
 struct resource * ata_pci_alloc_resource(device_t dev, device_t child, int type, int *rid, u_long start, u_long end, u_long count, u_int flags);
 int ata_pci_release_resource(device_t dev, device_t child, int type, int rid, struct resource *r);
 int ata_pci_setup_intr(device_t dev, device_t child, struct resource *irq, int flags, driver_filter_t *filter, driver_intr_t *function, void *argument, void **cookiep);
@@ -496,22 +513,16 @@ void ata_pci_dmafini(device_t dev);
 char *ata_pcivendor2str(device_t dev);
 int ata_legacy(device_t);
 void ata_generic_intr(void *data);
+int ata_generic_chipinit(device_t dev);
+int ata_generic_setmode(device_t dev, int target, int mode);
 int ata_setup_interrupt(device_t dev, void *intr_func);
 void ata_set_desc(device_t dev);
 struct ata_chip_id *ata_match_chip(device_t dev, struct ata_chip_id *index);
 struct ata_chip_id *ata_find_chip(device_t dev, struct ata_chip_id *index, int slot);
-void ata_print_cable(device_t dev, u_int8_t *who);
-int ata_check_80pin(device_t dev, int mode);
 int ata_mode2idx(int mode);
 
 /* global prototypes from chipsets/ata-*.c */
 int ata_ahci_chipinit(device_t);
-int ata_ahci_ch_attach(device_t dev);
-int ata_ahci_ch_detach(device_t dev);
-int ata_ahci_ch_suspend(device_t dev);
-int ata_ahci_ch_resume(device_t dev);
-int ata_ahci_ctlr_reset(device_t dev);
-void ata_ahci_reset(device_t dev);
 int ata_marvell_edma_chipinit(device_t);
 int ata_sii_chipinit(device_t);
 
@@ -527,12 +538,16 @@ static device_method_t __CONCAT(dname,_methods)[] = { \
     DEVMETHOD(device_suspend,   ata_pci_suspend), \
     DEVMETHOD(device_resume,    ata_pci_resume), \
     DEVMETHOD(device_shutdown,  bus_generic_shutdown), \
+    DEVMETHOD(bus_read_ivar,		ata_pci_read_ivar), \
+    DEVMETHOD(bus_write_ivar,		ata_pci_write_ivar), \
     DEVMETHOD(bus_alloc_resource,       ata_pci_alloc_resource), \
     DEVMETHOD(bus_release_resource,     ata_pci_release_resource), \
     DEVMETHOD(bus_activate_resource,    bus_generic_activate_resource), \
     DEVMETHOD(bus_deactivate_resource,  bus_generic_deactivate_resource), \
     DEVMETHOD(bus_setup_intr,           ata_pci_setup_intr), \
     DEVMETHOD(bus_teardown_intr,        ata_pci_teardown_intr), \
+    DEVMETHOD(pci_read_config,		ata_pci_read_config), \
+    DEVMETHOD(pci_write_config,		ata_pci_write_config), \
     { 0, 0 } \
 }; \
 static driver_t __CONCAT(dname,_driver) = { \
diff --git a/sys/dev/ata/ata-queue.c b/sys/dev/ata/ata-queue.c
index c0487787144..a3b1c4e4435 100644
--- a/sys/dev/ata/ata-queue.c
+++ b/sys/dev/ata/ata-queue.c
@@ -511,11 +511,18 @@ ata_timeout(struct ata_request *request)
      */
     if (ch->state == ATA_ACTIVE) {
 	request->flags |= ATA_R_TIMEOUT;
-	mtx_unlock(&ch->state_mtx);
-	ATA_LOCKING(ch->dev, ATA_LF_UNLOCK);
 	if (ch->dma.unload)
 	    ch->dma.unload(request);
+#ifdef ATA_CAM
+	ch->running = NULL;
+	ch->state = ATA_IDLE;
+	ata_cam_end_transaction(ch->dev, request);
+#endif
+	mtx_unlock(&ch->state_mtx);
+	ATA_LOCKING(ch->dev, ATA_LF_UNLOCK);
+#ifndef ATA_CAM
 	ata_finish(request);
+#endif
     }
     else {
 	mtx_unlock(&ch->state_mtx);
diff --git a/sys/dev/ata/ata-sata.c b/sys/dev/ata/ata-sata.c
index 5f5daa48f3f..9e3f7e8de06 100644
--- a/sys/dev/ata/ata-sata.c
+++ b/sys/dev/ata/ata-sata.c
@@ -209,38 +209,21 @@ ata_sata_phy_reset(device_t dev, int port, int quick)
     return 0;
 }
 
-void
-ata_sata_setmode(device_t dev, int mode)
+int
+ata_sata_setmode(device_t dev, int target, int mode)
 {
-    struct ata_device *atadev = device_get_softc(dev);
 
-    /*
-     * if we detect that the device isn't a real SATA device we limit 
-     * the transfer mode to UDMA5/ATA100.
-     * this works around the problems some devices has with the 
-     * Marvell 88SX8030 SATA->PATA converters and UDMA6/ATA133.
-     */
-    if (atadev->param.satacapabilities != 0x0000 &&
-	atadev->param.satacapabilities != 0xffff) {
-	struct ata_channel *ch = device_get_softc(device_get_parent(dev));
+	return (min(mode, ATA_UDMA5));
+}
 
-	/* on some drives we need to set the transfer mode */
-	ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0,
-		       ata_limit_mode(dev, mode, ATA_UDMA6));
+int
+ata_sata_getrev(device_t dev, int target)
+{
+	struct ata_channel *ch = device_get_softc(dev);
 
-	/* query SATA STATUS for the speed */
-        if (ch->r_io[ATA_SSTATUS].res && 
-	   ((ATA_IDX_INL(ch, ATA_SSTATUS) & ATA_SS_CONWELL_MASK) ==
-	    ATA_SS_CONWELL_GEN2))
-	    atadev->mode = ATA_SA300;
-	else 
-	    atadev->mode = ATA_SA150;
-    }
-    else {
-	mode = ata_limit_mode(dev, mode, ATA_UDMA5);
-	if (!ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
-	    atadev->mode = mode;
-    }
+	if (ch->r_io[ATA_SSTATUS].res)
+		return ((ATA_IDX_INL(ch, ATA_SSTATUS) & 0x0f0) >> 4);
+	return (0);
 }
 
 int
diff --git a/sys/dev/ata/ata-usb.c b/sys/dev/ata/ata-usb.c
deleted file mode 100644
index a08b80ad769..00000000000
--- a/sys/dev/ata/ata-usb.c
+++ /dev/null
@@ -1,1127 +0,0 @@
-/*-
- * Copyright (c) 2006 - 2008 Søren Schmidt 
- * All rights reserved.
- *
- * Copyright (c) 2006 Hans Petter Selasky
- * 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,
- *    without modification, immediately at the beginning of the file.
- * 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.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include 
-__FBSDID("$FreeBSD$");
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include "usbdevs.h"
-#include 
-#include 
-
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 
-#include 
-
-#define	ATAUSB_BULK_SIZE (1<<17)
-
-/* Command Block Wrapper */
-struct bbb_cbw {
-	uint8_t	signature[4];
-#define	CBWSIGNATURE		0x43425355
-
-	uint8_t	tag[4];
-	uint8_t	transfer_length[4];
-	uint8_t	flags;
-#define	CBWFLAGS_OUT  		0x00
-#define	CBWFLAGS_IN  		0x80
-
-	uint8_t	lun;
-	uint8_t	length;
-#define	CBWCDBLENGTH     	16
-
-	uint8_t	cdb[CBWCDBLENGTH];
-} __packed;
-
-/* Command Status Wrapper */
-struct bbb_csw {
-	uint8_t	signature[4];
-#define	CSWSIGNATURE     	0x53425355
-
-	uint8_t	tag[4];
-	uint8_t	residue[4];
-	uint8_t	status;
-#define	CSWSTATUS_GOOD   	0x0
-#define	CSWSTATUS_FAILED 	0x1
-#define	CSWSTATUS_PHASE  	0x2
-} __packed;
-
-/* USB-ATA 'controller' softc */
-struct atausb2_softc {
-	struct bbb_cbw cbw;
-	struct bbb_csw csw;
-	struct mtx locked_mtx;
-
-	struct ata_channel *locked_ch;
-	struct ata_channel *restart_ch;
-	struct ata_request *ata_request;
-
-#define	ATAUSB_T_BBB_RESET1        0
-#define	ATAUSB_T_BBB_RESET2        1
-#define	ATAUSB_T_BBB_RESET3        2
-#define	ATAUSB_T_BBB_COMMAND       3
-#define	ATAUSB_T_BBB_DATA_READ     4
-#define	ATAUSB_T_BBB_DATA_RD_CS    5
-#define	ATAUSB_T_BBB_DATA_WRITE    6
-#define	ATAUSB_T_BBB_DATA_WR_CS    7
-#define	ATAUSB_T_BBB_STATUS        8
-#define	ATAUSB_T_BBB_MAX           9
-
-#define	ATAUSB_T_MAX ATAUSB_T_BBB_MAX
-
-	struct usb_xfer *xfer[ATAUSB_T_MAX];
-	caddr_t	ata_data;
-	device_t dev;
-
-	uint32_t timeout;
-	uint32_t ata_donecount;
-	uint32_t ata_bytecount;
-
-	uint8_t	last_xfer_no;
-	uint8_t	usb2_speed;
-	uint8_t	intr_stalled;
-	uint8_t	maxlun;
-	uint8_t	iface_no;
-	uint8_t	status_try;
-};
-
-static const int atausbdebug = 0;
-
-/* prototypes */
-
-static device_probe_t atausb2_probe;
-static device_attach_t atausb2_attach;
-static device_detach_t atausb2_detach;
-
-static usb_callback_t atausb2_t_bbb_reset1_callback;
-static usb_callback_t atausb2_t_bbb_reset2_callback;
-static usb_callback_t atausb2_t_bbb_reset3_callback;
-static usb_callback_t atausb2_t_bbb_command_callback;
-static usb_callback_t atausb2_t_bbb_data_read_callback;
-static usb_callback_t atausb2_t_bbb_data_rd_cs_callback;
-static usb_callback_t atausb2_t_bbb_data_write_callback;
-static usb_callback_t atausb2_t_bbb_data_wr_cs_callback;
-static usb_callback_t atausb2_t_bbb_status_callback;
-static usb_callback_t atausb2_tr_error;
-
-static void atausb2_cancel_request(struct atausb2_softc *sc);
-static void atausb2_transfer_start(struct atausb2_softc *sc, uint8_t xfer_no);
-static void atausb2_t_bbb_data_clear_stall_callback(struct usb_xfer *xfer,
-	    uint8_t next_xfer, uint8_t stall_xfer, usb_error_t error);
-static int ata_usbchannel_begin_transaction(struct ata_request *request);
-static int ata_usbchannel_end_transaction(struct ata_request *request);
-
-static device_probe_t ata_usbchannel_probe;
-static device_attach_t ata_usbchannel_attach;
-static device_detach_t ata_usbchannel_detach;
-
-static ata_setmode_t ata_usbchannel_setmode;
-static ata_locking_t ata_usbchannel_locking;
-
-/*
- * USB frontend part
- */
-
-struct usb_config atausb2_config[ATAUSB_T_BBB_MAX] = {
-
-	[ATAUSB_T_BBB_RESET1] = {
-		.type = UE_CONTROL,
-		.endpoint = 0x00,	/* Control pipe */
-		.direction = UE_DIR_ANY,
-		.bufsize = sizeof(struct usb_device_request),
-		.flags = {},
-		.callback = &atausb2_t_bbb_reset1_callback,
-		.timeout = 5000,	/* 5 seconds */
-		.interval = 500,	/* 500 milliseconds */
-	},
-
-	[ATAUSB_T_BBB_RESET2] = {
-		.type = UE_CONTROL,
-		.endpoint = 0x00,	/* Control pipe */
-		.direction = UE_DIR_ANY,
-		.bufsize = sizeof(struct usb_device_request),
-		.flags = {},
-		.callback = &atausb2_t_bbb_reset2_callback,
-		.timeout = 5000,	/* 5 seconds */
-		.interval = 50,	/* 50 milliseconds */
-	},
-
-	[ATAUSB_T_BBB_RESET3] = {
-		.type = UE_CONTROL,
-		.endpoint = 0x00,	/* Control pipe */
-		.direction = UE_DIR_ANY,
-		.bufsize = sizeof(struct usb_device_request),
-		.flags = {},
-		.callback = &atausb2_t_bbb_reset3_callback,
-		.timeout = 5000,	/* 5 seconds */
-		.interval = 50,	/* 50 milliseconds */
-	},
-
-	[ATAUSB_T_BBB_COMMAND] = {
-		.type = UE_BULK,
-		.endpoint = UE_ADDR_ANY,
-		.direction = UE_DIR_OUT,
-		.bufsize = sizeof(struct bbb_cbw),
-		.flags = {},
-		.callback = &atausb2_t_bbb_command_callback,
-		.timeout = 5000,	/* 5 seconds */
-	},
-
-	[ATAUSB_T_BBB_DATA_READ] = {
-		.type = UE_BULK,
-		.endpoint = UE_ADDR_ANY,
-		.direction = UE_DIR_IN,
-		.bufsize = ATAUSB_BULK_SIZE,
-		.flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
-		.callback = &atausb2_t_bbb_data_read_callback,
-		.timeout = 0,	/* overwritten later */
-	},
-
-	[ATAUSB_T_BBB_DATA_RD_CS] = {
-		.type = UE_CONTROL,
-		.endpoint = 0x00,	/* Control pipe */
-		.direction = UE_DIR_ANY,
-		.bufsize = sizeof(struct usb_device_request),
-		.flags = {},
-		.callback = &atausb2_t_bbb_data_rd_cs_callback,
-		.timeout = 5000,	/* 5 seconds */
-	},
-
-	[ATAUSB_T_BBB_DATA_WRITE] = {
-		.type = UE_BULK,
-		.endpoint = UE_ADDR_ANY,
-		.direction = UE_DIR_OUT,
-		.bufsize = ATAUSB_BULK_SIZE,
-		.flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
-		.callback = &atausb2_t_bbb_data_write_callback,
-		.timeout = 0,	/* overwritten later */
-	},
-
-	[ATAUSB_T_BBB_DATA_WR_CS] = {
-		.type = UE_CONTROL,
-		.endpoint = 0x00,	/* Control pipe */
-		.direction = UE_DIR_ANY,
-		.bufsize = sizeof(struct usb_device_request),
-		.flags = {},
-		.callback = &atausb2_t_bbb_data_wr_cs_callback,
-		.timeout = 5000,	/* 5 seconds */
-	},
-
-	[ATAUSB_T_BBB_STATUS] = {
-		.type = UE_BULK,
-		.endpoint = UE_ADDR_ANY,
-		.direction = UE_DIR_IN,
-		.bufsize = sizeof(struct bbb_csw),
-		.flags = {.short_xfer_ok = 1,},
-		.callback = &atausb2_t_bbb_status_callback,
-		.timeout = 5000,	/* ms */
-	},
-};
-
-static devclass_t atausb2_devclass;
-
-static device_method_t atausb2_methods[] = {
-	DEVMETHOD(device_probe, atausb2_probe),
-	DEVMETHOD(device_attach, atausb2_attach),
-	DEVMETHOD(device_detach, atausb2_detach),
-	{0, 0}
-};
-
-static driver_t atausb2_driver = {
-	.name = "atausb",
-	.methods = atausb2_methods,
-	.size = sizeof(struct atausb2_softc),
-};
-
-DRIVER_MODULE(atausb, uhub, atausb2_driver, atausb2_devclass, 0, 0);
-MODULE_DEPEND(atausb, usb, 1, 1, 1);
-MODULE_VERSION(atausb, 1);
-
-static int
-atausb2_probe(device_t dev)
-{
-	struct usb_attach_arg *uaa = device_get_ivars(dev);
-	struct usb_interface_descriptor *id;
-
-	if (uaa->usb_mode != USB_MODE_HOST) {
-		return (ENXIO);
-	}
-	if (uaa->use_generic == 0) {
-		/* give other drivers a try first */
-		return (ENXIO);
-	}
-	id = usbd_get_interface_descriptor(uaa->iface);
-	if ((!id) || (id->bInterfaceClass != UICLASS_MASS)) {
-		return (ENXIO);
-	}
-	switch (id->bInterfaceSubClass) {
-	case UISUBCLASS_QIC157:
-	case UISUBCLASS_RBC:
-	case UISUBCLASS_SCSI:
-	case UISUBCLASS_SFF8020I:
-	case UISUBCLASS_SFF8070I:
-	case UISUBCLASS_UFI:
-		switch (id->bInterfaceProtocol) {
-		case UIPROTO_MASS_CBI:
-		case UIPROTO_MASS_CBI_I:
-		case UIPROTO_MASS_BBB:
-		case UIPROTO_MASS_BBB_OLD:
-			return (0);
-		default:
-			return (0);
-		}
-		break;
-	default:
-		return (0);
-	}
-}
-
-static int
-atausb2_attach(device_t dev)
-{
-	struct atausb2_softc *sc = device_get_softc(dev);
-	struct usb_attach_arg *uaa = device_get_ivars(dev);
-	struct usb_interface_descriptor *id;
-	const char *proto, *subclass;
-	struct usb_device_request request;
-	device_t child;
-	uint16_t i;
-	uint8_t maxlun;
-	uint8_t has_intr;
-	int err;
-
-	device_set_usb_desc(dev);
-
-	sc->dev = dev;
-	sc->maxlun = 0;
-	sc->locked_ch = NULL;
-	sc->restart_ch = NULL;
-	sc->usb2_speed = usbd_get_speed(uaa->device);
-	mtx_init(&sc->locked_mtx, "ATAUSB lock", NULL, (MTX_DEF | MTX_RECURSE));
-
-	id = usbd_get_interface_descriptor(uaa->iface);
-	switch (id->bInterfaceProtocol) {
-	case UIPROTO_MASS_BBB:
-	case UIPROTO_MASS_BBB_OLD:
-		proto = "Bulk-Only";
-		break;
-	case UIPROTO_MASS_CBI:
-		proto = "CBI";
-		break;
-	case UIPROTO_MASS_CBI_I:
-		proto = "CBI with CCI";
-		break;
-	default:
-		proto = "Unknown";
-	}
-
-	switch (id->bInterfaceSubClass) {
-	case UISUBCLASS_RBC:
-		subclass = "RBC";
-		break;
-	case UISUBCLASS_QIC157:
-	case UISUBCLASS_SFF8020I:
-	case UISUBCLASS_SFF8070I:
-		subclass = "ATAPI";
-		break;
-	case UISUBCLASS_SCSI:
-		subclass = "SCSI";
-		break;
-	case UISUBCLASS_UFI:
-		subclass = "UFI";
-		break;
-	default:
-		subclass = "Unknown";
-	}
-
-	has_intr = (id->bInterfaceProtocol == UIPROTO_MASS_CBI_I);
-	sc->iface_no = id->bInterfaceNumber;
-
-	device_printf(dev, "using %s over %s\n", subclass, proto);
-	if (strcmp(proto, "Bulk-Only") ||
-	    (strcmp(subclass, "ATAPI") && strcmp(subclass, "SCSI"))) {
-		goto detach;
-	}
-	err = usbd_transfer_setup(uaa->device, &uaa->info.bIfaceIndex,
-	    sc->xfer, atausb2_config, ATAUSB_T_BBB_MAX, sc,
-	    &sc->locked_mtx);
-
-	/* skip reset first time */
-	sc->last_xfer_no = ATAUSB_T_BBB_COMMAND;
-
-	if (err) {
-		device_printf(sc->dev, "could not setup required "
-		    "transfers, %s\n", usbd_errstr(err));
-		goto detach;
-	}
-	/* get number of devices so we can add matching channels */
-	request.bmRequestType = UT_READ_CLASS_INTERFACE;
-	request.bRequest = 0xfe;	/* GET_MAX_LUN; */
-	USETW(request.wValue, 0);
-	USETW(request.wIndex, sc->iface_no);
-	USETW(request.wLength, sizeof(maxlun));
-	err = usbd_do_request(uaa->device, &Giant, &request, &maxlun);
-
-	if (err) {
-		if (bootverbose) {
-			device_printf(sc->dev, "get maxlun not supported %s\n",
-			    usbd_errstr(err));
-		}
-	} else {
-		sc->maxlun = maxlun;
-		if (bootverbose) {
-			device_printf(sc->dev, "maxlun=%d\n", sc->maxlun);
-		}
-	}
-
-	/* ata channels are children to this USB control device */
-	for (i = 0; i <= sc->maxlun; i++) {
-		if ((child = device_add_child(sc->dev, "ata",
-		    devclass_find_free_unit(ata_devclass, 2))) == NULL) {
-			device_printf(sc->dev, "failed to add ata child device\n");
-		} else
-		    device_set_ivars(child, (void *)(intptr_t)i);
-	}
-	bus_generic_attach(sc->dev);
-
-	return (0);
-
-detach:
-	atausb2_detach(dev);
-	return (ENXIO);
-}
-
-static int
-atausb2_detach(device_t dev)
-{
-	struct atausb2_softc *sc = device_get_softc(dev);
-	device_t *children;
-	int nchildren, i;
-
-	/* teardown our statemachine */
-
-	usbd_transfer_unsetup(sc->xfer, ATAUSB_T_MAX);
-
-	/* detach & delete all children, if any */
-
-	if (!device_get_children(dev, &children, &nchildren)) {
-		for (i = 0; i < nchildren; i++) {
-			device_delete_child(dev, children[i]);
-		}
-		free(children, M_TEMP);
-	}
-	mtx_destroy(&sc->locked_mtx);
-	return (0);
-}
-
-static void
-atausb2_transfer_start(struct atausb2_softc *sc, uint8_t xfer_no)
-{
-	if (atausbdebug) {
-		device_printf(sc->dev, "BBB transfer %d\n", xfer_no);
-	}
-	if (sc->xfer[xfer_no]) {
-		sc->last_xfer_no = xfer_no;
-		usbd_transfer_start(sc->xfer[xfer_no]);
-	} else {
-		atausb2_cancel_request(sc);
-	}
-}
-
-static void
-atausb2_t_bbb_reset1_callback(struct usb_xfer *xfer, usb_error_t error)
-{
-	struct atausb2_softc *sc = usbd_xfer_softc(xfer);
-	struct usb_device_request req;
-	struct usb_page_cache *pc;
-
-	switch (USB_GET_STATE(xfer)) {
-	case USB_ST_TRANSFERRED:
-		atausb2_transfer_start(sc, ATAUSB_T_BBB_RESET2);
-		return;
-
-	case USB_ST_SETUP:
-		req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
-		req.bRequest = 0xff;	/* bulk-only reset */
-		USETW(req.wValue, 0);
-		req.wIndex[0] = sc->iface_no;
-		req.wIndex[1] = 0;
-		USETW(req.wLength, 0);
-
-		pc = usbd_xfer_get_frame(xfer, 0);
-		usbd_copy_in(pc, 0, &req, sizeof(req));
-
-		usbd_xfer_set_frame_len(xfer, 0, sizeof(req));
-		usbd_xfer_set_frames(xfer, 1);
-		usbd_transfer_submit(xfer);
-		return;
-
-	default:			/* Error */
-		atausb2_tr_error(xfer, error);
-		return;
-
-	}
-}
-
-static void
-atausb2_t_bbb_reset2_callback(struct usb_xfer *xfer, usb_error_t error)
-{
-	atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_RESET3,
-	    ATAUSB_T_BBB_DATA_READ, error);
-}
-
-static void
-atausb2_t_bbb_reset3_callback(struct usb_xfer *xfer, usb_error_t error)
-{
-	atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_COMMAND,
-	    ATAUSB_T_BBB_DATA_WRITE, error);
-}
-
-static void
-atausb2_t_bbb_data_clear_stall_callback(struct usb_xfer *xfer,
-    uint8_t next_xfer, uint8_t stall_xfer, usb_error_t error)
-{
-	struct atausb2_softc *sc = usbd_xfer_softc(xfer);
-
-	switch (USB_GET_STATE(xfer)) {
-	case USB_ST_TRANSFERRED:
-tr_transferred:
-		atausb2_transfer_start(sc, next_xfer);
-		return;
-
-	case USB_ST_SETUP:
-		if (usbd_clear_stall_callback(xfer, sc->xfer[stall_xfer])) {
-			goto tr_transferred;
-		}
-		return;
-
-	default:			/* Error */
-		atausb2_tr_error(xfer, error);
-		return;
-
-	}
-}
-
-static void
-atausb2_t_bbb_command_callback(struct usb_xfer *xfer, usb_error_t error)
-{
-	struct atausb2_softc *sc = usbd_xfer_softc(xfer);
-	struct ata_request *request = sc->ata_request;
-	struct ata_channel *ch;
-	struct usb_page_cache *pc;
-	uint32_t tag;
-
-	switch (USB_GET_STATE(xfer)) {
-	case USB_ST_TRANSFERRED:
-		atausb2_transfer_start
-		    (sc, ((request->flags & ATA_R_READ) ? ATAUSB_T_BBB_DATA_READ :
-		    (request->flags & ATA_R_WRITE) ? ATAUSB_T_BBB_DATA_WRITE :
-		    ATAUSB_T_BBB_STATUS));
-		return;
-
-	case USB_ST_SETUP:
-
-		sc->status_try = 0;
-
-		if (request) {
-			ch = device_get_softc(request->parent);
-
-			sc->timeout = (request->timeout * 1000) + 5000;
-
-			tag = UGETDW(sc->cbw.tag) + 1;
-
-			USETDW(sc->cbw.signature, CBWSIGNATURE);
-			USETDW(sc->cbw.tag, tag);
-			USETDW(sc->cbw.transfer_length, request->bytecount);
-			sc->cbw.flags = (request->flags & ATA_R_READ) ? CBWFLAGS_IN : CBWFLAGS_OUT;
-			sc->cbw.lun = ch->unit;
-			sc->cbw.length = 16;
-			bzero(sc->cbw.cdb, 16);
-			bcopy(request->u.atapi.ccb, sc->cbw.cdb, 12);	/* XXX SOS */
-
-			pc = usbd_xfer_get_frame(xfer, 0);
-			usbd_copy_in(pc, 0, &sc->cbw, sizeof(sc->cbw));
-
-			usbd_xfer_set_frame_len(xfer, 0, sizeof(sc->cbw));
-			usbd_transfer_submit(xfer);
-		}
-		return;
-
-	default:			/* Error */
-		atausb2_tr_error(xfer, error);
-		return;
-
-	}
-}
-
-static void
-atausb2_t_bbb_data_read_callback(struct usb_xfer *xfer, usb_error_t error)
-{
-	struct atausb2_softc *sc = usbd_xfer_softc(xfer);
-	uint32_t max_bulk = usbd_xfer_max_len(xfer);
-	struct usb_page_cache *pc;
-	int actlen, sumlen;
-
-	usbd_xfer_status(xfer, &actlen, &sumlen, NULL, NULL);
-
-	switch (USB_GET_STATE(xfer)) {
-	case USB_ST_TRANSFERRED:
-
-		pc = usbd_xfer_get_frame(xfer, 0);
-		usbd_copy_out(pc, 0, sc->ata_data, actlen);
-
-		sc->ata_bytecount -= actlen;
-		sc->ata_data += actlen;
-		sc->ata_donecount += actlen;
-
-		if (actlen < sumlen) {
-			/* short transfer */
-			sc->ata_bytecount = 0;
-		}
-	case USB_ST_SETUP:
-
-		if (atausbdebug > 1) {
-			device_printf(sc->dev, "%s: max_bulk=%d, ata_bytecount=%d\n",
-			    __FUNCTION__, max_bulk, sc->ata_bytecount);
-		}
-		if (sc->ata_bytecount == 0) {
-			atausb2_transfer_start(sc, ATAUSB_T_BBB_STATUS);
-			return;
-		}
-		if (max_bulk > sc->ata_bytecount) {
-			max_bulk = sc->ata_bytecount;
-		}
-		usbd_xfer_set_timeout(xfer, sc->timeout);
-		usbd_xfer_set_frame_len(xfer, 0, max_bulk);
-
-		usbd_transfer_submit(xfer);
-		return;
-
-	default:			/* Error */
-		if (error == USB_ERR_CANCELLED) {
-			atausb2_tr_error(xfer, error);
-		} else {
-			atausb2_transfer_start(sc, ATAUSB_T_BBB_DATA_RD_CS);
-		}
-		return;
-
-	}
-}
-
-static void
-atausb2_t_bbb_data_rd_cs_callback(struct usb_xfer *xfer, usb_error_t error)
-{
-	atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_STATUS,
-	    ATAUSB_T_BBB_DATA_READ, error);
-}
-
-static void
-atausb2_t_bbb_data_write_callback(struct usb_xfer *xfer, usb_error_t error)
-{
-	struct atausb2_softc *sc = usbd_xfer_softc(xfer);
-	struct usb_page_cache *pc;
-	uint32_t max_bulk = usbd_xfer_max_len(xfer);
-	int actlen;
-
-	usbd_xfer_status(xfer, &actlen, NULL, NULL, NULL);
-
-	switch (USB_GET_STATE(xfer)) {
-	case USB_ST_TRANSFERRED:
-
-		sc->ata_bytecount -= actlen;
-		sc->ata_data += actlen;
-		sc->ata_donecount += actlen;
-
-	case USB_ST_SETUP:
-
-		if (atausbdebug > 1) {
-			device_printf(sc->dev, "%s: max_bulk=%d, ata_bytecount=%d\n",
-			    __FUNCTION__, max_bulk, sc->ata_bytecount);
-		}
-		if (sc->ata_bytecount == 0) {
-			atausb2_transfer_start(sc, ATAUSB_T_BBB_STATUS);
-			return;
-		}
-		if (max_bulk > sc->ata_bytecount) {
-			max_bulk = sc->ata_bytecount;
-		}
-
-		pc = usbd_xfer_get_frame(xfer, 0);
-		usbd_copy_in(pc, 0, sc->ata_data, max_bulk);
-		usbd_xfer_set_frame_len(xfer, 0, max_bulk);
-		usbd_xfer_set_timeout(xfer, sc->timeout);
-
-		usbd_transfer_submit(xfer);
-		return;
-
-	default:			/* Error */
-		if (error == USB_ERR_CANCELLED) {
-			atausb2_tr_error(xfer, error);
-		} else {
-			atausb2_transfer_start(sc, ATAUSB_T_BBB_DATA_WR_CS);
-		}
-		return;
-
-	}
-}
-
-static void
-atausb2_t_bbb_data_wr_cs_callback(struct usb_xfer *xfer, usb_error_t error)
-{
-	atausb2_t_bbb_data_clear_stall_callback(xfer, ATAUSB_T_BBB_STATUS,
-	    ATAUSB_T_BBB_DATA_WRITE, error);
-}
-
-static void
-atausb2_t_bbb_status_callback(struct usb_xfer *xfer, usb_error_t error)
-{
-	struct atausb2_softc *sc = usbd_xfer_softc(xfer);
-	struct ata_request *request = sc->ata_request;
-	struct usb_page_cache *pc;
-	uint32_t residue;
-	int actlen;
-
-	usbd_xfer_status(xfer, &actlen, NULL, NULL, NULL);
-
-	switch (USB_GET_STATE(xfer)) {
-	case USB_ST_TRANSFERRED:
-
-		if (actlen < sizeof(sc->csw)) {
-			bzero(&sc->csw, sizeof(sc->csw));
-		}
-		pc = usbd_xfer_get_frame(xfer, 0);
-		usbd_copy_out(pc, 0, &sc->csw, actlen);
-
-		if (request->flags & (ATA_R_READ | ATA_R_WRITE)) {
-			request->donecount = sc->ata_donecount;
-		}
-		residue = UGETDW(sc->csw.residue);
-
-		if (!residue) {
-			residue = (request->bytecount - request->donecount);
-		}
-		if (residue > request->bytecount) {
-			if (atausbdebug) {
-				device_printf(sc->dev, "truncating residue from %d "
-				    "to %d bytes\n", residue,
-				    request->bytecount);
-			}
-			residue = request->bytecount;
-		}
-		/* check CSW and handle eventual error */
-		if (UGETDW(sc->csw.signature) != CSWSIGNATURE) {
-			if (atausbdebug) {
-				device_printf(sc->dev, "bad CSW signature 0x%08x != 0x%08x\n",
-				    UGETDW(sc->csw.signature), CSWSIGNATURE);
-			}
-			goto tr_error;
-		} else if (UGETDW(sc->csw.tag) != UGETDW(sc->cbw.tag)) {
-			if (atausbdebug) {
-				device_printf(sc->dev, "bad CSW tag %d != %d\n",
-				    UGETDW(sc->csw.tag), UGETDW(sc->cbw.tag));
-			}
-			goto tr_error;
-		} else if (sc->csw.status > CSWSTATUS_PHASE) {
-			if (atausbdebug) {
-				device_printf(sc->dev, "bad CSW status %d > %d\n",
-				    sc->csw.status, CSWSTATUS_PHASE);
-			}
-			goto tr_error;
-		} else if (sc->csw.status == CSWSTATUS_PHASE) {
-			if (atausbdebug) {
-				device_printf(sc->dev, "phase error residue = %d\n", residue);
-			}
-			goto tr_error;
-		} else if (request->donecount > request->bytecount) {
-			if (atausbdebug) {
-				device_printf(sc->dev, "buffer overrun %d > %d\n",
-				    request->donecount, request->bytecount);
-			}
-			goto tr_error;
-		} else if (sc->csw.status == CSWSTATUS_FAILED) {
-			if (atausbdebug) {
-				device_printf(sc->dev, "CSWSTATUS_FAILED\n");
-			}
-			request->error = ATA_E_ATAPI_SENSE_MASK;
-		}
-		sc->last_xfer_no = ATAUSB_T_BBB_COMMAND;
-
-		sc->ata_request = NULL;
-
-		/* drop the USB transfer lock while doing the ATA interrupt */
-		mtx_unlock(&sc->locked_mtx);
-
-		ata_interrupt(device_get_softc(request->parent));
-
-		mtx_lock(&sc->locked_mtx);
-		return;
-
-	case USB_ST_SETUP:
-		usbd_xfer_set_frame_len(xfer, 0, usbd_xfer_max_len(xfer));
-		usbd_transfer_submit(xfer);
-		return;
-
-	default:
-tr_error:
-		if (error == USB_ERR_CANCELLED || sc->status_try) {
-			atausb2_tr_error(xfer, error);
-		} else {
-			sc->status_try = 1;
-			atausb2_transfer_start(sc, ATAUSB_T_BBB_DATA_RD_CS);
-		}
-		return;
-
-	}
-}
-
-static void
-atausb2_cancel_request(struct atausb2_softc *sc)
-{
-	struct ata_request *request;
-
-	mtx_assert(&sc->locked_mtx, MA_OWNED);
-
-	request = sc->ata_request;
-	sc->ata_request = NULL;
-	sc->last_xfer_no = ATAUSB_T_BBB_RESET1;
-
-	if (request) {
-		request->error = ATA_E_ATAPI_SENSE_MASK;
-
-		mtx_unlock(&sc->locked_mtx);
-
-		ata_interrupt(device_get_softc(request->parent));
-
-		mtx_lock(&sc->locked_mtx);
-	}
-}
-
-static void
-atausb2_tr_error(struct usb_xfer *xfer, usb_error_t error)
-{
-	struct atausb2_softc *sc = usbd_xfer_softc(xfer);
-
-	if (error != USB_ERR_CANCELLED) {
-
-		if (atausbdebug) {
-			device_printf(sc->dev, "transfer failed, %s, in state %d "
-			    "-> BULK reset\n", usbd_errstr(error),
-			    sc->last_xfer_no);
-		}
-	}
-	atausb2_cancel_request(sc);
-}
-
-/*
- * ATA backend part
- */
-struct atapi_inquiry {
-	uint8_t	device_type;
-	uint8_t	device_modifier;
-	uint8_t	version;
-	uint8_t	response_format;
-	uint8_t	length;
-	uint8_t	reserved[2];
-	uint8_t	flags;
-	uint8_t	vendor[8];
-	uint8_t	product[16];
-	uint8_t	revision[4];
-	/* uint8_t    crap[60]; */
-} __packed;
-
-static int
-ata_usbchannel_begin_transaction(struct ata_request *request)
-{
-	struct atausb2_softc *sc =
-	device_get_softc(device_get_parent(request->parent));
-	int error;
-
-	if (atausbdebug > 1) {
-		device_printf(request->dev, "begin_transaction %s\n",
-		    ata_cmd2str(request));
-	}
-	mtx_lock(&sc->locked_mtx);
-
-	/* sanity, just in case */
-	if (sc->ata_request) {
-		device_printf(request->dev, "begin is busy, "
-		    "state = %d\n", sc->last_xfer_no);
-		request->result = EBUSY;
-		error = ATA_OP_FINISHED;
-		goto done;
-	}
-	/*
-	 * XXX SOS convert the request into the format used, only BBB for
-	 * now
-	 */
-
-	/* ATA/ATAPI IDENTIFY needs special treatment */
-	if (!(request->flags & ATA_R_ATAPI)) {
-		if (request->u.ata.command != ATA_ATAPI_IDENTIFY) {
-			device_printf(request->dev, "%s unsupported\n",
-			    ata_cmd2str(request));
-			request->result = EIO;
-			error = ATA_OP_FINISHED;
-			goto done;
-		}
-		request->flags |= ATA_R_ATAPI;
-		bzero(request->u.atapi.ccb, 16);
-		request->u.atapi.ccb[0] = ATAPI_INQUIRY;
-		request->u.atapi.ccb[4] = 255;	/* sizeof(struct
-						 * atapi_inquiry); */
-		request->data += 256;	/* arbitrary offset into ata_param */
-		request->bytecount = 255;	/* sizeof(struct
-						 * atapi_inquiry); */
-	}
-	if (sc->xfer[sc->last_xfer_no]) {
-
-		sc->ata_request = request;
-		sc->ata_bytecount = request->bytecount;
-		sc->ata_data = request->data;
-		sc->ata_donecount = 0;
-
-		usbd_transfer_start(sc->xfer[sc->last_xfer_no]);
-		error = ATA_OP_CONTINUES;
-	} else {
-		request->result = EIO;
-		error = ATA_OP_FINISHED;
-	}
-
-done:
-	mtx_unlock(&sc->locked_mtx);
-	return (error);
-}
-
-static int
-ata_usbchannel_end_transaction(struct ata_request *request)
-{
-	if (atausbdebug > 1) {
-		device_printf(request->dev, "end_transaction %s\n",
-		    ata_cmd2str(request));
-	}
-	/*
-	 * XXX SOS convert the request from the format used, only BBB for
-	 * now
-	 */
-
-	/* ATA/ATAPI IDENTIFY needs special treatment */
-	if ((request->flags & ATA_R_ATAPI) &&
-	    (request->u.atapi.ccb[0] == ATAPI_INQUIRY)) {
-		struct ata_device *atadev = device_get_softc(request->dev);
-		struct atapi_inquiry *inquiry = (struct atapi_inquiry *)request->data;
-		uint16_t *ptr;
-
-		/* convert inquiry data into simple ata_param like format */
-		atadev->param.config = ATA_PROTO_ATAPI | ATA_PROTO_ATAPI_12;
-		atadev->param.config |= (inquiry->device_type & 0x1f) << 8;
-		bzero(atadev->param.model, sizeof(atadev->param.model));
-		strncpy(atadev->param.model, inquiry->vendor, 8);
-		strcpy(atadev->param.model, "  ");
-		strncpy(atadev->param.model, inquiry->product, 16);
-		ptr = (uint16_t *)(atadev->param.model + sizeof(atadev->param.model));
-		while (--ptr >= (uint16_t *)atadev->param.model) {
-			*ptr = ntohs(*ptr);
-		}
-		strncpy(atadev->param.revision, inquiry->revision, 4);
-		ptr = (uint16_t *)(atadev->param.revision + sizeof(atadev->param.revision));
-		while (--ptr >= (uint16_t *)atadev->param.revision) {
-			*ptr = ntohs(*ptr);
-		}
-		request->result = 0;
-	}
-	return (ATA_OP_FINISHED);
-}
-
-static int
-ata_usbchannel_probe(device_t dev)
-{
-	char buffer[32];
-
-	snprintf(buffer, sizeof(buffer), "USB lun %d",
-	    (int)(intptr_t)device_get_ivars(dev));
-	device_set_desc_copy(dev, buffer);
-
-	return (0);
-}
-
-static int
-ata_usbchannel_attach(device_t dev)
-{
-	struct ata_channel *ch = device_get_softc(dev);
-
-	if (ch->attached)
-		return (0);
-	ch->attached = 1;
-
-	/* initialize the softc basics */
-	ch->dev = dev;
-	ch->unit = (intptr_t)device_get_ivars(dev);
-	ch->state = ATA_IDLE;
-	ch->hw.begin_transaction = ata_usbchannel_begin_transaction;
-	ch->hw.end_transaction = ata_usbchannel_end_transaction;
-	ch->hw.status = NULL;
-	ch->hw.command = NULL;
-	bzero(&ch->state_mtx, sizeof(struct mtx));
-	mtx_init(&ch->state_mtx, "ATA state lock", NULL, MTX_DEF);
-	bzero(&ch->queue_mtx, sizeof(struct mtx));
-	mtx_init(&ch->queue_mtx, "ATA queue lock", NULL, MTX_DEF);
-	TAILQ_INIT(&ch->ata_queue);
-
-	/* XXX SOS reset the controller HW, the channel and device(s) */
-	/* ATA_RESET(dev); */
-
-	/* probe and attach device on this channel */
-	ch->devices = ATA_ATAPI_MASTER;
-	if (!ata_delayed_attach) {
-		ata_identify(dev);
-	}
-	return (0);
-}
-
-static int
-ata_usbchannel_detach(device_t dev)
-{
-	struct ata_channel *ch = device_get_softc(dev);
-	device_t *children;
-	int nchildren, i;
-
-	if (!ch->attached)
-		return (0);
-	ch->attached = 0;
-
-	/* detach & delete all children */
-	if (!device_get_children(dev, &children, &nchildren)) {
-		for (i = 0; i < nchildren; i++)
-			if (children[i])
-				device_delete_child(dev, children[i]);
-		free(children, M_TEMP);
-	}
-	mtx_destroy(&ch->state_mtx);
-	mtx_destroy(&ch->queue_mtx);
-	return (0);
-}
-
-static void
-ata_usbchannel_setmode(device_t parent, device_t dev)
-{
-	struct atausb2_softc *sc = device_get_softc(GRANDPARENT(dev));
-	struct ata_device *atadev = device_get_softc(dev);
-
-	if (sc->usb2_speed == USB_SPEED_HIGH)
-		atadev->mode = ATA_USB2;
-	else
-		atadev->mode = ATA_USB1;
-}
-
-static int
-ata_usbchannel_locking(device_t dev, int flags)
-{
-	struct atausb2_softc *sc = device_get_softc(device_get_parent(dev));
-	struct ata_channel *ch = device_get_softc(dev);
-	int res = -1;
-
-	mtx_lock(&sc->locked_mtx);
-	switch (flags) {
-	case ATA_LF_LOCK:
-		if (sc->locked_ch == NULL)
-			sc->locked_ch = ch;
-		if (sc->locked_ch != ch)
-			sc->restart_ch = ch;
-		break;
-
-	case ATA_LF_UNLOCK:
-		if (sc->locked_ch == ch) {
-			sc->locked_ch = NULL;
-			if (sc->restart_ch) {
-				ch = sc->restart_ch;
-				sc->restart_ch = NULL;
-				mtx_unlock(&sc->locked_mtx);
-				ata_start(ch->dev);
-				return (res);
-			}
-		}
-		break;
-
-	case ATA_LF_WHICH:
-		break;
-	}
-	if (sc->locked_ch) {
-		res = sc->locked_ch->unit;
-	}
-	mtx_unlock(&sc->locked_mtx);
-	return (res);
-}
-
-static device_method_t ata_usbchannel_methods[] = {
-	/* device interface */
-	DEVMETHOD(device_probe, ata_usbchannel_probe),
-	DEVMETHOD(device_attach, ata_usbchannel_attach),
-	DEVMETHOD(device_detach, ata_usbchannel_detach),
-
-	/* ATA methods */
-	DEVMETHOD(ata_setmode, ata_usbchannel_setmode),
-	DEVMETHOD(ata_locking, ata_usbchannel_locking),
-	/* DEVMETHOD(ata_reset,            ata_usbchannel_reset), */
-
-	{0, 0}
-};
-
-static driver_t ata_usbchannel_driver = {
-	"ata",
-	ata_usbchannel_methods,
-	sizeof(struct ata_channel),
-};
-
-DRIVER_MODULE(ata, atausb, ata_usbchannel_driver, ata_devclass, 0, 0);
-MODULE_DEPEND(atausb, ata, 1, 1, 1);
diff --git a/sys/dev/ata/ata_if.m b/sys/dev/ata/ata_if.m
index 8fcc3f26759..a1775ac6ee7 100644
--- a/sys/dev/ata/ata_if.m
+++ b/sys/dev/ata/ata_if.m
@@ -57,17 +57,24 @@ HEADER {
 };
 
 CODE {
-	static void ata_null_setmode(device_t parent, device_t dev)
+	static int ata_null_setmode(device_t dev, int target, int mode)
 	{
-	    struct ata_device *atadev = device_get_softc(dev);
 
-	    atadev->mode = ata_limit_mode(dev, atadev->mode, ATA_PIO_MAX);
+		if (mode > ATA_PIO_MAX)
+			return (ATA_PIO_MAX);
+		return (mode);
 	}
 };
-METHOD void setmode {
-    device_t    channel;
+METHOD int setmode {
     device_t    dev;
-}  DEFAULT ata_null_setmode;;
+    int		target;
+    int		mode;
+}  DEFAULT ata_null_setmode;
+
+METHOD int getrev {
+    device_t    dev;
+    int		target;
+};
 
 METHOD void reset {
     device_t    channel;
diff --git a/sys/dev/ata/atapi-cd.c b/sys/dev/ata/atapi-cd.c
index a021e005492..7e470ea26f6 100644
--- a/sys/dev/ata/atapi-cd.c
+++ b/sys/dev/ata/atapi-cd.c
@@ -126,7 +126,7 @@ acd_attach(device_t dev)
     }
     cdp->block_size = 2048;
     device_set_ivars(dev, cdp);
-    ATA_SETMODE(device_get_parent(dev), dev);
+    ata_setmode(dev);
     ata_controlcmd(dev, ATA_DEVICE_RESET, 0, 0, 0);
     acd_get_cap(dev);
     g_post_event(acd_geom_attach, dev, M_WAITOK, NULL);
@@ -163,7 +163,7 @@ acd_reinit(device_t dev)
     if (!(ch->devices & (ATA_ATAPI_MASTER << atadev->unit)))
 	return 1;
 
-    ATA_SETMODE(device_get_parent(dev), dev);
+    ata_setmode(dev);
     return 0;
 }
 
@@ -1206,6 +1206,7 @@ acd_read_track_info(device_t dev, int32_t lba, struct acd_track_info *info)
     if ((error = ata_atapicmd(dev, ccb, (caddr_t)info, sizeof(*info),
 			      ATA_R_READ, 30)))
 	return error;
+    info->data_length = ntohs(info->data_length);
     info->track_start_addr = ntohl(info->track_start_addr);
     info->next_writeable_addr = ntohl(info->next_writeable_addr);
     info->free_blocks = ntohl(info->free_blocks);
@@ -1644,12 +1645,17 @@ acd_get_cap(device_t dev)
     for (count = 0 ; count < 5 ; count++) {
 	if (!ata_atapicmd(dev, ccb, (caddr_t)&cdp->cap, sizeof(cdp->cap),
 			  ATA_R_READ | ATA_R_QUIET, 5)) {
+	    cdp->cap.data_length = ntohs(cdp->cap.data_length);
+	    cdp->cap.blk_desc_len = ntohs(cdp->cap.blk_desc_len);
+	    cdp->cap.media = ntohs(cdp->cap.media);
+	    cdp->cap.capabilities = ntohs(cdp->cap.capabilities);
 	    cdp->cap.max_read_speed = ntohs(cdp->cap.max_read_speed);
+	    cdp->cap.max_vol_levels = ntohs(cdp->cap.max_vol_levels);
+	    cdp->cap.buf_size = ntohs(cdp->cap.buf_size);
 	    cdp->cap.cur_read_speed = ntohs(cdp->cap.cur_read_speed);
 	    cdp->cap.max_write_speed = ntohs(cdp->cap.max_write_speed);
 	    cdp->cap.cur_write_speed = max(ntohs(cdp->cap.cur_write_speed),177);
-	    cdp->cap.max_vol_levels = ntohs(cdp->cap.max_vol_levels);
-	    cdp->cap.buf_size = ntohs(cdp->cap.buf_size);
+	    cdp->cap.copy_protect_rev = ntohs(cdp->cap.copy_protect_rev);
 	}
     }
 }
@@ -1724,7 +1730,8 @@ acd_describe(device_t dev)
 	    printf("%s %dKB buffer", comma ? "," : "", cdp->cap.buf_size);
 	    comma = 1;
 	}
-	printf("%s %s\n", comma ? "," : "", ata_mode2str(atadev->mode));
+	printf("%s %s %s\n", comma ? "," : "", ata_mode2str(atadev->mode),
+	    ata_satarev2str(ATA_GETREV(device_get_parent(dev), atadev->unit)));
 
 	device_printf(dev, "Reads:");
 	comma = 0;
@@ -1874,10 +1881,11 @@ acd_describe(device_t dev)
 			  "CDROM");
 	if (cdp->changer_info)
 	    printf("with %d CD changer ", cdp->changer_info->slots);
-	printf("<%.40s/%.8s> at ata%d-%s %s\n",
+	printf("<%.40s/%.8s> at ata%d-%s %s %s\n",
 	       atadev->param.model, atadev->param.revision,
 	       device_get_unit(ch->dev), ata_unit2str(atadev),
-	       ata_mode2str(atadev->mode) );
+	       ata_mode2str(atadev->mode),
+	       ata_satarev2str(ATA_GETREV(device_get_parent(dev), atadev->unit)));
     }
 }
 
diff --git a/sys/dev/ata/atapi-cd.h b/sys/dev/ata/atapi-cd.h
index d78771a29aa..74ce82e4f13 100644
--- a/sys/dev/ata/atapi-cd.h
+++ b/sys/dev/ata/atapi-cd.h
@@ -112,34 +112,34 @@ struct cappage {
     u_int8_t    param_len;
 
     u_int16_t   media;
-#define MST_READ_CDR            0x0001
-#define MST_READ_CDRW           0x0002
-#define MST_READ_PACKET         0x0004
-#define MST_READ_DVDROM         0x0008
-#define MST_READ_DVDR           0x0010
-#define MST_READ_DVDRAM         0x0020
-#define MST_WRITE_CDR           0x0100
-#define MST_WRITE_CDRW          0x0200
-#define MST_WRITE_TEST          0x0400
-#define MST_WRITE_DVDR          0x1000
-#define MST_WRITE_DVDRAM        0x2000
+#define MST_READ_CDR            0x0100
+#define MST_READ_CDRW           0x0200
+#define MST_READ_PACKET         0x0400
+#define MST_READ_DVDROM         0x0800
+#define MST_READ_DVDR           0x1000
+#define MST_READ_DVDRAM         0x2000
+#define MST_WRITE_CDR           0x0001
+#define MST_WRITE_CDRW          0x0002
+#define MST_WRITE_TEST          0x0004
+#define MST_WRITE_DVDR          0x0010
+#define MST_WRITE_DVDRAM        0x0020
 
     u_int16_t   capabilities;
-#define MST_AUDIO_PLAY          0x0001
-#define MST_COMPOSITE           0x0002
-#define MST_AUDIO_P1            0x0004
-#define MST_AUDIO_P2            0x0008
-#define MST_MODE2_f1            0x0010
-#define MST_MODE2_f2            0x0020
-#define MST_MULTISESSION        0x0040
-#define MST_BURNPROOF           0x0080
-#define MST_READ_CDDA           0x0100
-#define MST_CDDA_STREAM         0x0200
-#define MST_COMBINED_RW         0x0400
-#define MST_CORRECTED_RW        0x0800
-#define MST_SUPPORT_C2          0x1000
-#define MST_ISRC                0x2000
-#define MST_UPC                 0x4000
+#define MST_AUDIO_PLAY          0x0100
+#define MST_COMPOSITE           0x0200
+#define MST_AUDIO_P1            0x0400
+#define MST_AUDIO_P2            0x0800
+#define MST_MODE2_f1            0x1000
+#define MST_MODE2_f2            0x2000
+#define MST_MULTISESSION        0x4000
+#define MST_BURNPROOF           0x8000
+#define MST_READ_CDDA           0x0001
+#define MST_CDDA_STREAM         0x0002
+#define MST_COMBINED_RW         0x0004
+#define MST_CORRECTED_RW        0x0008
+#define MST_SUPPORT_C2          0x0010
+#define MST_ISRC                0x0020
+#define MST_UPC                 0x0040
 
     u_int8_t    mechanism;
 #define MST_LOCKABLE            0x01
diff --git a/sys/dev/ata/atapi-fd.c b/sys/dev/ata/atapi-fd.c
index 5baeab9a7ee..5572d1c2794 100644
--- a/sys/dev/ata/atapi-fd.c
+++ b/sys/dev/ata/atapi-fd.c
@@ -85,7 +85,7 @@ afd_attach(device_t dev)
 	return ENOMEM;
     }
     device_set_ivars(dev, fdp);
-    ATA_SETMODE(device_get_parent(dev), dev);
+    ata_setmode(dev);
 
     if (afd_sense(dev)) {
 	device_set_ivars(dev, NULL);
@@ -152,7 +152,7 @@ afd_reinit(device_t dev)
     if (!(ch->devices & (ATA_ATAPI_MASTER << atadev->unit)))
 	return 1;
 
-    ATA_SETMODE(device_get_parent(dev), dev);
+    ata_setmode(dev);
     return 0;
 }
 
@@ -400,10 +400,11 @@ afd_describe(device_t dev)
     else
 	strcpy(sizestring, "(no media)");
  
-    device_printf(dev, "%s <%.40s %.8s> at ata%d-%s %s\n",
+    device_printf(dev, "%s <%.40s %.8s> at ata%d-%s %s %s\n",
 		  sizestring, atadev->param.model, atadev->param.revision,
 		  device_get_unit(ch->dev), ata_unit2str(atadev),
-		  ata_mode2str(atadev->mode));
+		  ata_mode2str(atadev->mode),
+		  ata_satarev2str(ATA_GETREV(device_get_parent(dev), atadev->unit)));
     if (bootverbose) {
 	device_printf(dev, "%ju sectors [%juC/%dH/%dS]\n",
 	    	      fdp->mediasize / fdp->sectorsize,
diff --git a/sys/dev/ata/atapi-tape.c b/sys/dev/ata/atapi-tape.c
index 5b4da81dc1b..b6ca4ad6e68 100644
--- a/sys/dev/ata/atapi-tape.c
+++ b/sys/dev/ata/atapi-tape.c
@@ -111,7 +111,7 @@ ast_attach(device_t dev)
 	return ENOMEM;
     }
     device_set_ivars(dev, stp);
-    ATA_SETMODE(device_get_parent(dev), dev);
+    ata_setmode(dev);
 
     if (ast_sense(dev)) {
 	device_set_ivars(dev, NULL);
@@ -193,7 +193,7 @@ ast_reinit(device_t dev)
     if (!(ch->devices & (ATA_ATAPI_MASTER << atadev->unit)))
 	return 1;
 
-    ATA_SETMODE(device_get_parent(dev), dev);
+    ata_setmode(dev);
     return 0;
 }
 
@@ -673,7 +673,8 @@ ast_describe(device_t dev)
 	printf("transfer limit %d blk%s, ",
 	       stp->cap.ctl, (stp->cap.ctl > 1) ? "s" : "");
 	printf("%dKB buffer, ", (stp->cap.buffer_size * DEV_BSIZE) / 1024);
-	printf("%s\n", ata_mode2str(atadev->mode));
+	printf("%s %s\n", ata_mode2str(atadev->mode),
+	    ata_satarev2str(ATA_GETREV(device_get_parent(dev), atadev->unit)));
 	device_printf(dev, "Medium: ");
 	switch (stp->cap.medium_type) {
 	    case 0x00:
@@ -704,10 +705,11 @@ ast_describe(device_t dev)
 	printf("\n");
     }
     else {
-	device_printf(dev, "TAPE <%.40s/%.8s> at ata%d-%s %s\n",
+	device_printf(dev, "TAPE <%.40s/%.8s> at ata%d-%s %s %s\n",
 		      atadev->param.model, atadev->param.revision,
 		      device_get_unit(ch->dev), ata_unit2str(atadev),
-		      ata_mode2str(atadev->mode));
+		      ata_mode2str(atadev->mode),
+		      ata_satarev2str(ATA_GETREV(device_get_parent(dev), atadev->unit)));
     }
 }
 
diff --git a/sys/dev/ata/chipsets/ata-acard.c b/sys/dev/ata/chipsets/ata-acard.c
index c52c2cbc088..bb81c48dc4c 100644
--- a/sys/dev/ata/chipsets/ata-acard.c
+++ b/sys/dev/ata/chipsets/ata-acard.c
@@ -61,8 +61,8 @@ struct ata_serialize {
 static int ata_acard_chipinit(device_t dev);
 static int ata_acard_ch_attach(device_t dev);
 static int ata_acard_status(device_t dev);
-static void ata_acard_850_setmode(device_t dev, int mode);
-static void ata_acard_86X_setmode(device_t dev, int mode);
+static int ata_acard_850_setmode(device_t dev, int target, int mode);
+static int ata_acard_86X_setmode(device_t dev, int target, int mode);
 static int ata_serialize(device_t dev, int flags);
 static void ata_serialize_init(struct ata_serialize *serial);
 
@@ -130,6 +130,7 @@ ata_acard_ch_attach(device_t dev)
 	return ENXIO;
 
     ch->hw.status = ata_acard_status;
+    ch->flags |= ATA_NO_ATAPI_DMA;
     return 0;
 }
 
@@ -162,79 +163,52 @@ ata_acard_status(device_t dev)
     return 1;
 }
 
-static void
-ata_acard_850_setmode(device_t dev, int mode)
+static int
+ata_acard_850_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    int error;
-
-    mode = ata_limit_mode(dev, mode,
-			  ata_atapi(dev) ? ATA_PIO_MAX : ctlr->chip->max_dma);
+    device_t parent = device_get_parent(dev);
+    struct ata_pci_controller *ctlr = device_get_softc(parent);
+    struct ata_channel *ch = device_get_softc(dev);
+    int devno = (ch->unit << 1) + target;
 
+    mode = min(mode, ctlr->chip->max_dma);
     /* XXX SOS missing WDMA0+1 + PIO modes */
     if (mode >= ATA_WDMA2) {
-	error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-	if (bootverbose)
-	    device_printf(dev, "%ssetting %s on %s chip\n",
-			  (error) ? "FAILURE " : "",
-			  ata_mode2str(mode), ctlr->chip->text);
-	if (!error) {
-	    u_int8_t reg54 = pci_read_config(gparent, 0x54, 1);
+	    u_int8_t reg54 = pci_read_config(parent, 0x54, 1);
 	    
 	    reg54 &= ~(0x03 << (devno << 1));
 	    if (mode >= ATA_UDMA0)
 		reg54 |= (((mode & ATA_MODE_MASK) + 1) << (devno << 1));
-	    pci_write_config(gparent, 0x54, reg54, 1);
-	    pci_write_config(gparent, 0x4a, 0xa6, 1);
-	    pci_write_config(gparent, 0x40 + (devno << 1), 0x0301, 2);
-	    atadev->mode = mode;
-	    return;
-	}
+	    pci_write_config(parent, 0x54, reg54, 1);
+	    pci_write_config(parent, 0x4a, 0xa6, 1);
+	    pci_write_config(parent, 0x40 + (devno << 1), 0x0301, 2);
     }
     /* we could set PIO mode timings, but we assume the BIOS did that */
+    return (mode);
 }
 
-static void
-ata_acard_86X_setmode(device_t dev, int mode)
+static int
+ata_acard_86X_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    int error;
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
 
-
-    mode = ata_limit_mode(dev, mode,
-			  ata_atapi(dev) ? ATA_PIO_MAX : ctlr->chip->max_dma);
-
-    mode = ata_check_80pin(dev, mode);
-
-    /* XXX SOS missing WDMA0+1 + PIO modes */
-    if (mode >= ATA_WDMA2) {
-	error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-	if (bootverbose)
-	    device_printf(dev, "%ssetting %s on %s chip\n",
-			  (error) ? "FAILURE " : "",
-			  ata_mode2str(mode), ctlr->chip->text);
-	if (!error) {
-	    u_int16_t reg44 = pci_read_config(gparent, 0x44, 2);
+	mode = min(mode, ctlr->chip->max_dma);
+	/* XXX SOS missing WDMA0+1 + PIO modes */
+	if (mode >= ATA_WDMA2) {
+		u_int16_t reg44 = pci_read_config(parent, 0x44, 2);
 	    
-	    reg44 &= ~(0x000f << (devno << 2));
-	    if (mode >= ATA_UDMA0)
-		reg44 |= (((mode & ATA_MODE_MASK) + 1) << (devno << 2));
-	    pci_write_config(gparent, 0x44, reg44, 2);
-	    pci_write_config(gparent, 0x4a, 0xa6, 1);
-	    pci_write_config(gparent, 0x40 + devno, 0x31, 1);
-	    atadev->mode = mode;
-	    return;
+		reg44 &= ~(0x000f << (devno << 2));
+		if (mode >= ATA_UDMA0)
+			reg44 |= (((mode & ATA_MODE_MASK) + 1) << (devno << 2));
+		pci_write_config(parent, 0x44, reg44, 2);
+		pci_write_config(parent, 0x4a, 0xa6, 1);
+		pci_write_config(parent, 0x40 + devno, 0x31, 1);
 	}
-    }
-    /* we could set PIO mode timings, but we assume the BIOS did that */
+	/* we could set PIO mode timings, but we assume the BIOS did that */
+	return (mode);
 }
 
 static void
diff --git a/sys/dev/ata/chipsets/ata-acerlabs.c b/sys/dev/ata/chipsets/ata-acerlabs.c
index cf503c591b2..b5036d77cd4 100644
--- a/sys/dev/ata/chipsets/ata-acerlabs.c
+++ b/sys/dev/ata/chipsets/ata-acerlabs.c
@@ -56,7 +56,7 @@ static int ata_ali_chipinit(device_t dev);
 static int ata_ali_ch_attach(device_t dev);
 static int ata_ali_sata_ch_attach(device_t dev);
 static void ata_ali_reset(device_t dev);
-static void ata_ali_setmode(device_t dev, int mode);
+static int ata_ali_setmode(device_t dev, int target, int mode);
 
 /* misc defines */
 #define ALI_OLD		0x01
@@ -113,6 +113,7 @@ ata_ali_chipinit(device_t dev)
 	ctlr->ch_attach = ata_ali_sata_ch_attach;
 	ctlr->ch_detach = ata_pci_ch_detach;
 	ctlr->setmode = ata_sata_setmode;
+	ctlr->getrev = ata_sata_getrev;
 
 	/* AHCI mode is correctly supported only on the ALi 5288. */
 	if ((ctlr->chip->chipid == ATA_ALI_5288) &&
@@ -140,11 +141,14 @@ ata_ali_chipinit(device_t dev)
 	/* use device interrupt as byte count end */
 	pci_write_config(dev, 0x4a, pci_read_config(dev, 0x4a, 1) | 0x20, 1);
 
-	/* enable cable detection and UDMA support on newer chips */
-	pci_write_config(dev, 0x4b, pci_read_config(dev, 0x4b, 1) | 0x09, 1);
+	/* enable cable detection and UDMA support on revisions < 0xc7 */
+	if (ctlr->chip->chiprev < 0xc7)
+	    pci_write_config(dev, 0x4b, pci_read_config(dev, 0x4b, 1) |
+		0x09, 1);
 
-	/* enable ATAPI UDMA mode */
-	pci_write_config(dev, 0x53, pci_read_config(dev, 0x53, 1) | 0x01, 1);
+	/* enable ATAPI UDMA mode (even if we are going to do PIO) */
+	pci_write_config(dev, 0x53, pci_read_config(dev, 0x53, 1) |
+	    (ctlr->chip->chiprev >= 0xc7 ? 0x03 : 0x01), 1);
 
 	/* only chips with revision > 0xc4 can do 48bit DMA */
 	if (ctlr->chip->chiprev <= 0xc4)
@@ -176,6 +180,8 @@ ata_ali_ch_attach(device_t dev)
     if (ata_pci_ch_attach(dev))
 	return ENXIO;
 
+    if (ctlr->chip->cfg2 & ALI_NEW && ctlr->chip->chiprev < 0xc7)
+	ch->flags |= ATA_CHECKS_CABLE;
     /* older chips can't do 48bit DMA transfers */
     if (ctlr->chip->chiprev <= 0xc4)
 	ch->flags |= ATA_NO_48BIT_DMA;
@@ -218,6 +224,7 @@ ata_ali_sata_ch_attach(device_t dev)
 	}
     }
     ch->flags |= ATA_NO_SLAVE;
+    ch->flags |= ATA_SATA;
 
     /* XXX SOS PHY handling awkward in ALI chip not supported yet */
     ata_pci_hw(dev);
@@ -257,67 +264,56 @@ ata_ali_reset(device_t dev)
     }
 }
 
-static void
-ata_ali_setmode(device_t dev, int mode)
+static int
+ata_ali_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    int error;
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
+	int piomode;
+	u_int32_t piotimings[] =
+		{ 0x006d0003, 0x00580002, 0x00440001, 0x00330001,
+		  0x00310001, 0x006d0003, 0x00330001, 0x00310001 };
+	u_int8_t udma[] = {0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0d};
+	u_int32_t word54;
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
+        mode = min(mode, ctlr->chip->max_dma);
 
-    if (ctlr->chip->cfg2 & ALI_NEW) {
-	if (mode > ATA_UDMA2 &&
-	    pci_read_config(gparent, 0x4a, 1) & (1 << ch->unit)) {
-	    ata_print_cable(dev, "controller");
-	    mode = ATA_UDMA2;
+	if (ctlr->chip->cfg2 & ALI_NEW && ctlr->chip->chiprev < 0xc7) {
+		if (mode > ATA_UDMA2 &&
+		    pci_read_config(parent, 0x4a, 1) & (1 << ch->unit)) {
+			ata_print_cable(dev, "controller");
+			mode = ATA_UDMA2;
+		}
 	}
-    }
-    else
-	mode = ata_check_80pin(dev, mode);
-
-    if (ctlr->chip->cfg2 & ALI_OLD) {
-	/* doesn't support ATAPI DMA on write */
-	ch->flags |= ATA_ATAPI_DMA_RO;
-	if (ch->devices & ATA_ATAPI_MASTER && ch->devices & ATA_ATAPI_SLAVE) {
-	    /* doesn't support ATAPI DMA on two ATAPI devices */
-	    device_printf(dev, "two atapi devices on this channel, no DMA\n");
-	    mode = ata_limit_mode(dev, mode, ATA_PIO_MAX);
+	if (ctlr->chip->cfg2 & ALI_OLD) {
+		/* doesn't support ATAPI DMA on write */
+		ch->flags |= ATA_ATAPI_DMA_RO;
+		if (ch->devices & ATA_ATAPI_MASTER &&
+		    ch->devices & ATA_ATAPI_SLAVE) {
+		        /* doesn't support ATAPI DMA on two ATAPI devices */
+		        device_printf(dev, "two atapi devices on this channel,"
+			    " no DMA\n");
+		        mode = min(mode, ATA_PIO_MAX);
+		}
 	}
-    }
-
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		   (error) ? "FAILURE " : "", 
-		   ata_mode2str(mode), ctlr->chip->text);
-    if (!error) {
+	/* Set UDMA mode */
+	word54 = pci_read_config(parent, 0x54, 4);
 	if (mode >= ATA_UDMA0) {
-	    u_int8_t udma[] = {0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0d};
-	    u_int32_t word54 = pci_read_config(gparent, 0x54, 4);
-
 	    word54 &= ~(0x000f000f << (devno << 2));
 	    word54 |= (((udma[mode&ATA_MODE_MASK]<<16)|0x05)<<(devno<<2));
-	    pci_write_config(gparent, 0x54, word54, 4);
-	    pci_write_config(gparent, 0x58 + (ch->unit << 2),
-			     0x00310001, 4);
+	    piomode = ATA_PIO4;
 	}
 	else {
-	    u_int32_t piotimings[] =
-		{ 0x006d0003, 0x00580002, 0x00440001, 0x00330001,
-		  0x00310001, 0x00440001, 0x00330001, 0x00310001};
-
-	    pci_write_config(gparent, 0x54, pci_read_config(gparent, 0x54, 4) &
-					    ~(0x0008000f << (devno << 2)), 4);
-	    pci_write_config(gparent, 0x58 + (ch->unit << 2),
-			     piotimings[ata_mode2idx(mode)], 4);
+	    word54 &= ~(0x0008000f << (devno << 2));
+	    piomode = mode;
 	}
-	atadev->mode = mode;
-    }
+	pci_write_config(parent, 0x54, word54, 4);
+	/* Set PIO/WDMA mode */
+	pci_write_config(parent, 0x58 + (ch->unit << 2),
+	    piotimings[ata_mode2idx(piomode)], 4);
+	return (mode);
 }
 
 ATA_DECLARE_DRIVER(ata_ali);
diff --git a/sys/dev/ata/chipsets/ata-ahci.c b/sys/dev/ata/chipsets/ata-ahci.c
index 9e3f9af94b6..39c51523e76 100644
--- a/sys/dev/ata/chipsets/ata-ahci.c
+++ b/sys/dev/ata/chipsets/ata-ahci.c
@@ -52,6 +52,12 @@ __FBSDID("$FreeBSD$");
 #include 
 
 /* local prototypes */
+static int ata_ahci_ch_attach(device_t dev);
+static int ata_ahci_ch_detach(device_t dev);
+static int ata_ahci_ch_suspend(device_t dev);
+static int ata_ahci_ch_resume(device_t dev);
+static int ata_ahci_ctlr_reset(device_t dev);
+static void ata_ahci_reset(device_t dev);
 static int ata_ahci_suspend(device_t dev);
 static int ata_ahci_status(device_t dev);
 static int ata_ahci_begin_transaction(struct ata_request *request);
@@ -97,6 +103,49 @@ ata_ahci_probe(device_t dev)
     return (BUS_PROBE_GENERIC);
 }
 
+static int
+ata_ahci_ata_probe(device_t dev)
+{
+    struct ata_pci_controller *ctlr = device_get_softc(dev);
+
+    if ((intptr_t)device_get_ivars(dev) >= 0)
+	    return (ENXIO);
+    device_set_desc_copy(dev, "AHCI SATA controller");
+    ctlr->chipinit = ata_ahci_chipinit;
+    return (BUS_PROBE_GENERIC);
+}
+
+static int
+ata_ahci_ata_attach(device_t dev)
+{
+    struct ata_pci_controller *ctlr = device_get_softc(dev);
+    device_t child;
+    int unit;
+
+    /* do chipset specific setups only needed once */
+    ctlr->legacy = 0;
+    ctlr->ichannels = -1;
+    ctlr->ch_attach = ata_pci_ch_attach;
+    ctlr->ch_detach = ata_pci_ch_detach;
+    ctlr->dev = dev;
+    if (ctlr->chipinit(dev))
+	return ENXIO;
+    /* attach all channels on this controller */
+    for (unit = 0; unit < ctlr->channels; unit++) {
+	if ((ctlr->ichannels & (1 << unit)) == 0)
+	    continue;
+	child = device_add_child(dev, "ata",
+	    ((unit == 0 || unit == 1) && ctlr->legacy) ?
+	    unit : devclass_find_free_unit(ata_devclass, 2));
+	if (child == NULL)
+	    device_printf(dev, "failed to add ata child device\n");
+	else
+	    device_set_ivars(child, (void *)(intptr_t)unit);
+    }
+    bus_generic_attach(dev);
+    return 0;
+}
+
 int
 ata_ahci_chipinit(device_t dev)
 {
@@ -129,9 +178,15 @@ ata_ahci_chipinit(device_t dev)
 
     /* get the number of HW channels */
     ctlr->ichannels = ATA_INL(ctlr->r_res2, ATA_AHCI_PI);
-    ctlr->channels =
-	MAX(flsl(ctlr->ichannels),
+    ctlr->channels = MAX(flsl(ctlr->ichannels),
 	    (ATA_INL(ctlr->r_res2, ATA_AHCI_CAP) & ATA_AHCI_CAP_NPMASK) + 1);
+    if (pci_get_devid(dev) == ATA_M88SX6111)
+	    ctlr->channels = 1;
+    else if (pci_get_devid(dev) == ATA_M88SX6121)
+	    ctlr->channels = 2;
+    else if (pci_get_devid(dev) == ATA_M88SX6141 ||
+	pci_get_devid(dev) == ATA_M88SX6145)
+	    ctlr->channels = 4;
 
     ctlr->reset = ata_ahci_reset;
     ctlr->ch_attach = ata_ahci_ch_attach;
@@ -139,6 +194,7 @@ ata_ahci_chipinit(device_t dev)
     ctlr->ch_suspend = ata_ahci_ch_suspend;
     ctlr->ch_resume = ata_ahci_ch_resume;
     ctlr->setmode = ata_sata_setmode;
+    ctlr->getrev = ata_sata_getrev;
     ctlr->suspend = ata_ahci_suspend;
     ctlr->resume = ata_ahci_ctlr_reset;
 
@@ -183,7 +239,7 @@ ata_ahci_chipinit(device_t dev)
 	return 0;
 }
 
-int
+static int
 ata_ahci_ctlr_reset(device_t dev)
 {
     struct ata_pci_controller *ctlr = device_get_softc(dev);
@@ -228,7 +284,7 @@ ata_ahci_suspend(device_t dev)
     return 0;
 }
 
-int
+static int
 ata_ahci_ch_attach(device_t dev)
 {
     struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
@@ -254,12 +310,14 @@ ata_ahci_ch_attach(device_t dev)
     ch->hw.softreset = ata_ahci_softreset;
     ch->hw.pm_read = ata_ahci_pm_read;
     ch->hw.pm_write = ata_ahci_pm_write;
+    ch->flags |= ATA_NO_SLAVE;
+    ch->flags |= ATA_SATA;
 
     ata_ahci_ch_resume(dev);
     return 0;
 }
 
-int
+static int
 ata_ahci_ch_detach(device_t dev)
 {
 
@@ -268,7 +326,7 @@ ata_ahci_ch_detach(device_t dev)
     return (0);
 }
 
-int
+static int
 ata_ahci_ch_suspend(device_t dev)
 {
     struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
@@ -293,7 +351,7 @@ ata_ahci_ch_suspend(device_t dev)
     return (0);
 }
 
-int
+static int
 ata_ahci_ch_resume(device_t dev)
 {
     struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
@@ -769,11 +827,10 @@ ata_ahci_hardreset(device_t dev, int port, uint32_t *signature)
 static u_int32_t
 ata_ahci_softreset(device_t dev, int port)
 {
-    struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
     struct ata_channel *ch = device_get_softc(dev);
-    int offset = ch->unit << 7;
     struct ata_ahci_cmd_tab *ctp =
 	(struct ata_ahci_cmd_tab *)(ch->dma.work + ATA_AHCI_CT_OFFSET);
+    u_int8_t *fis = ch->dma.work + ATA_AHCI_FB_OFFSET + 0x40;
 
     if (bootverbose)
 	device_printf(dev, "software reset port %d...\n", port);
@@ -810,10 +867,13 @@ ata_ahci_softreset(device_t dev, int port)
 	return (-1);
     }
 
-    return ATA_INL(ctlr->r_res2, ATA_AHCI_P_SIG + offset);
+    return (((u_int32_t)fis[6] << 24) |
+	    ((u_int32_t)fis[5] << 16) |
+	    ((u_int32_t)fis[4] << 8) |
+	     (u_int32_t)fis[12]);
 }
 
-void
+static void
 ata_ahci_reset(device_t dev)
 {
     struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
@@ -845,9 +905,12 @@ ata_ahci_reset(device_t dev)
 	      ((ch->pm_level == 0) ? ATA_AHCI_P_IX_PRC | ATA_AHCI_P_IX_PC : 0) |
 	      ATA_AHCI_P_IX_DP | ATA_AHCI_P_IX_UF | ATA_AHCI_P_IX_SDB |
 	      ATA_AHCI_P_IX_DS | ATA_AHCI_P_IX_PS | ATA_AHCI_P_IX_DHR));
-
-    /* only probe for PortMultiplier if HW has support */
-    if (ATA_INL(ctlr->r_res2, ATA_AHCI_CAP) & ATA_AHCI_CAP_SPM) {
+    /*
+     * Only probe for PortMultiplier if HW has support.
+     * Ignore Marvell, which is not working,
+     */
+    if ((ATA_INL(ctlr->r_res2, ATA_AHCI_CAP) & ATA_AHCI_CAP_SPM) &&
+	    pci_get_vendor(ctlr->dev) != 0x11ab) {
 	signature = ata_ahci_softreset(dev, ATA_PM);
 	/* Workaround for some ATI chips, failing to soft-reset
 	 * when port multiplicator supported, but absent.
@@ -924,3 +987,26 @@ ata_ahci_setup_fis(struct ata_ahci_cmd_tab *ctp, struct ata_request *request)
 }
 
 ATA_DECLARE_DRIVER(ata_ahci);
+static device_method_t ata_ahci_ata_methods[] = {
+    DEVMETHOD(device_probe,     ata_ahci_ata_probe),
+    DEVMETHOD(device_attach,    ata_ahci_ata_attach),
+    DEVMETHOD(device_detach,    ata_pci_detach),
+    DEVMETHOD(device_suspend,   ata_pci_suspend),
+    DEVMETHOD(device_resume,    ata_pci_resume),
+    DEVMETHOD(device_shutdown,  bus_generic_shutdown),
+    DEVMETHOD(bus_read_ivar,		ata_pci_read_ivar),
+    DEVMETHOD(bus_write_ivar,		ata_pci_write_ivar),
+    DEVMETHOD(bus_alloc_resource,       ata_pci_alloc_resource),
+    DEVMETHOD(bus_release_resource,     ata_pci_release_resource),
+    DEVMETHOD(bus_activate_resource,    bus_generic_activate_resource),
+    DEVMETHOD(bus_deactivate_resource,  bus_generic_deactivate_resource),
+    DEVMETHOD(bus_setup_intr,           ata_pci_setup_intr),
+    DEVMETHOD(bus_teardown_intr,        ata_pci_teardown_intr),
+    { 0, 0 }
+};
+static driver_t ata_ahci_ata_driver = {
+        "atapci",
+        ata_ahci_ata_methods,
+        sizeof(struct ata_pci_controller)
+};
+DRIVER_MODULE(ata_ahci_ata, atapci, ata_ahci_ata_driver, ata_pci_devclass, 0, 0);
diff --git a/sys/dev/ata/chipsets/ata-amd.c b/sys/dev/ata/chipsets/ata-amd.c
index 9c14e99cba4..589ffa0e8cb 100644
--- a/sys/dev/ata/chipsets/ata-amd.c
+++ b/sys/dev/ata/chipsets/ata-amd.c
@@ -52,16 +52,16 @@ __FBSDID("$FreeBSD$");
 #include 
 
 /* local prototypes */
+static int ata_amd_ch_attach(device_t dev);
 static int ata_amd_chipinit(device_t dev);
-static void ata_amd_setmode(device_t dev, int mode);
+static int ata_amd_setmode(device_t dev, int target, int mode);
 
 /* misc defines */
 #define AMD_BUG		0x01
 #define AMD_CABLE	0x02
 
-
 /*
- * American Micro Devices (AMD) chipset support functions
+ * Advanced Micro Devices (AMD) chipset support functions
  */
 static int
 ata_amd_probe(device_t dev)
@@ -100,50 +100,57 @@ ata_amd_chipinit(device_t dev)
     else
 	pci_write_config(dev, 0x41, pci_read_config(dev, 0x41, 1) | 0xf0, 1);
 
+    ctlr->ch_attach = ata_amd_ch_attach;
     ctlr->setmode = ata_amd_setmode;
     return 0;
 }
 
-static void
-ata_amd_setmode(device_t dev, int mode)
+static int
+ata_amd_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    u_int8_t timings[] = { 0xa8, 0x65, 0x42, 0x22, 0x20, 0x42, 0x22, 0x20,
-			   0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
-    int modes[7] = { 0xc2, 0xc1, 0xc0, 0xc4, 0xc5, 0xc6, 0xc7 };
-    int devno = (ch->unit << 1) + atadev->unit;
-    int reg = 0x53 - devno;
-    int error;
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+        int devno = (ch->unit << 1) + target;
+	int piomode;
+	u_int8_t timings[] = { 0xa8, 0x65, 0x42, 0x22, 0x20, 0xa8, 0x22, 0x20 };
+	int modes[7] = { 0xc2, 0xc1, 0xc0, 0xc4, 0xc5, 0xc6, 0xc7 };
+	int reg = 0x53 - devno;
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
-
-    if (ctlr->chip->cfg1 & AMD_CABLE) {
-	if (mode > ATA_UDMA2 &&
-	    !(pci_read_config(gparent, 0x42, 1) & (1 << devno))) {
-	    ata_print_cable(dev, "controller");
-	    mode = ATA_UDMA2;
+	mode = min(mode, ctlr->chip->max_dma);
+	if (ctlr->chip->cfg1 & AMD_CABLE) {
+		if (mode > ATA_UDMA2 &&
+		    !(pci_read_config(parent, 0x42, 1) & (1 << devno))) {
+			ata_print_cable(dev, "controller");
+			mode = ATA_UDMA2;
+		}
 	}
-    }
-    else 
-	mode = ata_check_80pin(dev, mode);
+	/* Set UDMA timings. */
+	if (mode >= ATA_UDMA0) {
+	    pci_write_config(parent, reg, modes[mode & ATA_MODE_MASK], 1);
+	    piomode = ATA_PIO4;
+	} else {
+	    pci_write_config(parent, reg, 0x8b, 1);
+	    piomode = mode;
+	}
+	/* Set WDMA/PIO timings. */
+	pci_write_config(parent, reg - 0x08, timings[ata_mode2idx(piomode)], 1);
+	return (mode);
+}
 
+static int
+ata_amd_ch_attach(device_t dev)
+{
+	struct ata_pci_controller *ctlr;
+	struct ata_channel *ch;
+	int error;
 
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		      (error) ? "FAILURE " : "", ata_mode2str(mode),
-		      ctlr->chip->text);
-    if (!error) {
-	pci_write_config(gparent, reg - 0x08, timings[ata_mode2idx(mode)], 1);
-	if (mode >= ATA_UDMA0)
-	    pci_write_config(gparent, reg, modes[mode & ATA_MODE_MASK], 1);
-	else
-	    pci_write_config(gparent, reg, 0x8b, 1);
-	atadev->mode = mode;
-    }
+	ctlr = device_get_softc(device_get_parent(dev));
+	ch = device_get_softc(dev);
+	error = ata_pci_ch_attach(dev);
+	if (ctlr->chip->cfg1 & AMD_CABLE)
+		ch->flags |= ATA_CHECKS_CABLE;
+	return (error);
 }
 
 ATA_DECLARE_DRIVER(ata_amd);
diff --git a/sys/dev/ata/chipsets/ata-ati.c b/sys/dev/ata/chipsets/ata-ati.c
index 4436c7f53c9..d464897243d 100644
--- a/sys/dev/ata/chipsets/ata-ati.c
+++ b/sys/dev/ata/chipsets/ata-ati.c
@@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$");
 
 /* local prototypes */
 static int ata_ati_chipinit(device_t dev);
-static void ata_ati_setmode(device_t dev, int mode);
+static int ata_ati_setmode(device_t dev, int target, int mode);
 
 /* misc defines */
 #define ATI_PATA	0x01
@@ -160,68 +160,61 @@ ata_ati_chipinit(device_t dev)
     return 0;
 }
 
-static void
-ata_ati_setmode(device_t dev, int mode)
+static int
+ata_ati_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    int offset = (devno ^ 0x01) << 3;
-    int error;
-    u_int8_t piotimings[] = { 0x5d, 0x47, 0x34, 0x22, 0x20, 0x34, 0x22, 0x20,
-			      0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
-    u_int8_t dmatimings[] = { 0x77, 0x21, 0x20 };
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
+	int offset = (devno ^ 0x01) << 3;
+	int piomode;
+	u_int8_t piotimings[] = { 0x5d, 0x47, 0x34, 0x22, 0x20 };
+	u_int8_t dmatimings[] = { 0x77, 0x21, 0x20 };
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
-
-    mode = ata_check_80pin(dev, mode);
-
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		      (error) ? "FAILURE " : "",
-		      ata_mode2str(mode), ctlr->chip->text);
-    if (!error) {
+	mode = min(mode, ctlr->chip->max_dma);
 	if (mode >= ATA_UDMA0) {
-	    pci_write_config(gparent, 0x56, 
-			     (pci_read_config(gparent, 0x56, 2) &
+	    /* Set UDMA mode, enable UDMA, set WDMA2/PIO4 */
+	    pci_write_config(parent, 0x56, 
+			     (pci_read_config(parent, 0x56, 2) &
 			      ~(0xf << (devno << 2))) |
 			     ((mode & ATA_MODE_MASK) << (devno << 2)), 2);
-	    pci_write_config(gparent, 0x54,
-			     pci_read_config(gparent, 0x54, 1) |
+	    pci_write_config(parent, 0x54,
+			     pci_read_config(parent, 0x54, 1) |
 			     (0x01 << devno), 1);
-	    pci_write_config(gparent, 0x44, 
-			     (pci_read_config(gparent, 0x44, 4) &
+	    pci_write_config(parent, 0x44, 
+			     (pci_read_config(parent, 0x44, 4) &
 			      ~(0xff << offset)) |
 			     (dmatimings[2] << offset), 4);
-	}
-	else if (mode >= ATA_WDMA0) {
-	    pci_write_config(gparent, 0x54,
-			     pci_read_config(gparent, 0x54, 1) &
+	    piomode = ATA_PIO4;
+	} else if (mode >= ATA_WDMA0) {
+	    /* Disable UDMA, set WDMA mode and timings, calculate PIO. */
+	    pci_write_config(parent, 0x54,
+			     pci_read_config(parent, 0x54, 1) &
 			      ~(0x01 << devno), 1);
-	    pci_write_config(gparent, 0x44, 
-			     (pci_read_config(gparent, 0x44, 4) &
+	    pci_write_config(parent, 0x44, 
+			     (pci_read_config(parent, 0x44, 4) &
 			      ~(0xff << offset)) |
 			     (dmatimings[mode & ATA_MODE_MASK] << offset), 4);
-	}
-	else
-	    pci_write_config(gparent, 0x54,
-			     pci_read_config(gparent, 0x54, 1) &
+	    piomode = (mode == ATA_WDMA0) ? ATA_PIO0 :
+		(mode == ATA_WDMA1) ? ATA_PIO3 : ATA_PIO4;
+	} else {
+	    /* Disable UDMA, set requested PIO. */
+	    pci_write_config(parent, 0x54,
+			     pci_read_config(parent, 0x54, 1) &
 			     ~(0x01 << devno), 1);
-
-	pci_write_config(gparent, 0x4a,
-			 (pci_read_config(gparent, 0x4a, 2) &
+	    piomode = mode;
+	}
+	/* Set PIO mode and timings, calculated above. */
+	pci_write_config(parent, 0x4a,
+			 (pci_read_config(parent, 0x4a, 2) &
 			  ~(0xf << (devno << 2))) |
-			 (((mode - ATA_PIO0) & ATA_MODE_MASK) << (devno<<2)),2);
-	pci_write_config(gparent, 0x40, 
-			 (pci_read_config(gparent, 0x40, 4) &
+			 ((piomode - ATA_PIO0) << (devno<<2)),2);
+	pci_write_config(parent, 0x40, 
+			 (pci_read_config(parent, 0x40, 4) &
 			  ~(0xff << offset)) |
-			 (piotimings[ata_mode2idx(mode)] << offset), 4);
-	atadev->mode = mode;
-    }
+			 (piotimings[ata_mode2idx(piomode)] << offset), 4);
+	return (mode);
 }
 
 ATA_DECLARE_DRIVER(ata_ati);
diff --git a/sys/dev/ata/chipsets/ata-cenatek.c b/sys/dev/ata/chipsets/ata-cenatek.c
index 8f6474cc57a..cc54d2bbc20 100644
--- a/sys/dev/ata/chipsets/ata-cenatek.c
+++ b/sys/dev/ata/chipsets/ata-cenatek.c
@@ -51,11 +51,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-/* local prototypes */
-static int ata_cenatek_chipinit(device_t dev);
-static void ata_cenatek_setmode(device_t dev, int mode);
-
-
 /*
  * Cenatek chipset support functions
  */
@@ -67,32 +62,9 @@ ata_cenatek_probe(device_t dev)
     if (pci_get_devid(dev) != ATA_CENATEK_ROCKET)
 	return ENXIO;
 
-    ctlr->chipinit = ata_cenatek_chipinit;
+    ctlr->chipinit = ata_generic_chipinit;
     device_set_desc(dev, "Cenatek Rocket Drive controller");
     return (BUS_PROBE_DEFAULT);
 }
 
-static int
-ata_cenatek_chipinit(device_t dev)
-{
-    struct ata_pci_controller *ctlr = device_get_softc(dev);
-
-    if (ata_setup_interrupt(dev, ata_generic_intr))
-	return ENXIO;
-
-    ctlr->setmode = ata_cenatek_setmode;
-    return 0;
-}
-
-static void
-ata_cenatek_setmode(device_t dev, int mode)
-{
-    struct ata_device *atadev = device_get_softc(dev);
-
-    mode = ata_limit_mode(dev, mode, ATA_UDMA2);
-    mode = ata_check_80pin(dev, mode);
-    if (!ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
-	atadev->mode = mode;
-}
-
 ATA_DECLARE_DRIVER(ata_cenatek);
diff --git a/sys/dev/ata/chipsets/ata-cypress.c b/sys/dev/ata/chipsets/ata-cypress.c
index ffa9782fa8b..e4c1a93d034 100644
--- a/sys/dev/ata/chipsets/ata-cypress.c
+++ b/sys/dev/ata/chipsets/ata-cypress.c
@@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$");
 
 /* local prototypes */
 static int ata_cypress_chipinit(device_t dev);
-static void ata_cypress_setmode(device_t dev, int mode);
+static int ata_cypress_setmode(device_t dev, int target, int mode);
 
 
 /*
@@ -93,29 +93,20 @@ ata_cypress_chipinit(device_t dev)
     return 0;
 }
 
-static void
-ata_cypress_setmode(device_t dev, int mode)
+static int
+ata_cypress_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int error;
+	device_t parent = device_get_parent(dev);
+	struct ata_channel *ch = device_get_softc(dev);
 
-    mode = ata_limit_mode(dev, mode, ATA_WDMA2);
+	mode = min(mode, ATA_WDMA2);
 
-    /* XXX SOS missing WDMA0+1 + PIO modes */
-    if (mode == ATA_WDMA2) { 
-	error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-	if (bootverbose)
-	    device_printf(dev, "%ssetting WDMA2 on Cypress chip\n",
-			  error ? "FAILURE " : "");
-	if (!error) {
-	    pci_write_config(gparent, ch->unit ? 0x4e : 0x4c, 0x2020, 2);
-	    atadev->mode = mode;
-	    return;
+	/* XXX SOS missing WDMA0+1 + PIO modes */
+	if (mode == ATA_WDMA2) { 
+		pci_write_config(parent, ch->unit ? 0x4e : 0x4c, 0x2020, 2);
 	}
-    }
-    /* we could set PIO mode timings, but we assume the BIOS did that */
+	/* we could set PIO mode timings, but we assume the BIOS did that */
+	return (mode);
 }
 
 ATA_DECLARE_DRIVER(ata_cypress);
diff --git a/sys/dev/ata/chipsets/ata-cyrix.c b/sys/dev/ata/chipsets/ata-cyrix.c
index ddfa56245b7..5a008562147 100644
--- a/sys/dev/ata/chipsets/ata-cyrix.c
+++ b/sys/dev/ata/chipsets/ata-cyrix.c
@@ -53,7 +53,8 @@ __FBSDID("$FreeBSD$");
 
 /* local prototypes */
 static int ata_cyrix_chipinit(device_t dev);
-static void ata_cyrix_setmode(device_t dev, int mode);
+static int ata_cyrix_ch_attach(device_t dev);
+static int ata_cyrix_setmode(device_t dev, int target, int mode);
 
 
 /*
@@ -79,53 +80,57 @@ ata_cyrix_chipinit(device_t dev)
 
     if (ata_setup_interrupt(dev, ata_generic_intr))
 	return ENXIO;
-
+    ctlr->ch_attach = ata_cyrix_ch_attach;
     ctlr->setmode = ata_cyrix_setmode;
     return 0;
 }
 
-static void
-ata_cyrix_setmode(device_t dev, int mode)
+static int
+ata_cyrix_ch_attach(device_t dev)
 {
-    struct ata_pci_controller *ctlr = device_get_softc(GRANDPARENT(dev)); 
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    u_int32_t piotiming[] = 
-	{ 0x00009172, 0x00012171, 0x00020080, 0x00032010, 0x00040010 };
-    u_int32_t dmatiming[] = { 0x00077771, 0x00012121, 0x00002020 };
-    u_int32_t udmatiming[] = { 0x00921250, 0x00911140, 0x00911030 };
-    int error;
+	struct ata_channel *ch = device_get_softc(dev);
+	int error;
+ 
+	error = ata_pci_ch_attach(dev);
+	ch->dma.alignment = 16;
+	ch->dma.max_iosize = 64 * DEV_BSIZE;
+	return (error);
+}
 
-    mode = ata_limit_mode(dev, mode, ATA_UDMA2);
 
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
+static int
+ata_cyrix_setmode(device_t dev, int target, int mode)
+{
+	struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
+	int piomode;
+	u_int32_t piotiming[] = 
+	    { 0x00009172, 0x00012171, 0x00020080, 0x00032010, 0x00040010 };
+	u_int32_t dmatiming[] = { 0x00077771, 0x00012121, 0x00002020 };
+	u_int32_t udmatiming[] = { 0x00921250, 0x00911140, 0x00911030 };
 
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on Cyrix chip\n",
-		      (error) ? "FAILURE " : "", ata_mode2str(mode));
-
-    if (!error) {
+	mode = min(mode, ATA_UDMA2);
 	/* dont try to set the mode if we dont have the resource */
 	if (ctlr->r_res1) {
-	    ch->dma.alignment = 16;
-	    ch->dma.max_iosize = 64 * DEV_BSIZE;
-
-	    if (mode >= ATA_UDMA0) {
+		if (mode >= ATA_UDMA0) {
+			/* Set UDMA timings, and PIO4. */
+			ATA_OUTL(ch->r_io[ATA_BMCMD_PORT].res,
+			    0x24 + (devno << 3), udmatiming[mode & ATA_MODE_MASK]);
+			piomode = ATA_PIO4;
+		} else if (mode >= ATA_WDMA0) {
+			/* Set WDMA timings, and respective PIO mode. */
+			ATA_OUTL(ch->r_io[ATA_BMCMD_PORT].res,
+			    0x24 + (devno << 3), dmatiming[mode & ATA_MODE_MASK]);
+		        piomode = (mode == ATA_WDMA0) ? ATA_PIO0 :
+			    (mode == ATA_WDMA1) ? ATA_PIO3 : ATA_PIO4;
+		} else
+			piomode = mode;
+		/* Set PIO mode calculated above. */
 		ATA_OUTL(ch->r_io[ATA_BMCMD_PORT].res,
-			 0x24 + (devno << 3), udmatiming[mode & ATA_MODE_MASK]);
-	    }
-	    else if (mode >= ATA_WDMA0) {
-		ATA_OUTL(ch->r_io[ATA_BMCMD_PORT].res,
-			 0x24 + (devno << 3), dmatiming[mode & ATA_MODE_MASK]);
-	    }
-	    else {
-		ATA_OUTL(ch->r_io[ATA_BMCMD_PORT].res,
-			 0x20 + (devno << 3), piotiming[mode & ATA_MODE_MASK]);
-	    }
+		    0x20 + (devno << 3), piotiming[ata_mode2idx(piomode)]);
 	}
-	atadev->mode = mode;
-    }
+	return (mode);
 }
 
 ATA_DECLARE_DRIVER(ata_cyrix);
diff --git a/sys/dev/ata/chipsets/ata-highpoint.c b/sys/dev/ata/chipsets/ata-highpoint.c
index 101b054f483..511366a78e1 100644
--- a/sys/dev/ata/chipsets/ata-highpoint.c
+++ b/sys/dev/ata/chipsets/ata-highpoint.c
@@ -54,7 +54,7 @@ __FBSDID("$FreeBSD$");
 /* local prototypes */
 static int ata_highpoint_chipinit(device_t dev);
 static int ata_highpoint_ch_attach(device_t dev);
-static void ata_highpoint_setmode(device_t dev, int mode);
+static int ata_highpoint_setmode(device_t dev, int target, int mode);
 static int ata_highpoint_check_80pin(device_t dev, int mode);
 
 /* misc defines */
@@ -143,26 +143,27 @@ ata_highpoint_chipinit(device_t dev)
 static int
 ata_highpoint_ch_attach(device_t dev)
 {
-    struct ata_channel *ch = device_get_softc(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
+	struct ata_channel *ch = device_get_softc(dev);
 
-    /* setup the usual register normal pci style */
-    if (ata_pci_ch_attach(dev))
-	return ENXIO;
-
-    ch->flags |= ATA_ALWAYS_DMASTAT;
-    return 0;
+	/* setup the usual register normal pci style */
+	if (ata_pci_ch_attach(dev))
+		return (ENXIO);
+	ch->flags |= ATA_ALWAYS_DMASTAT;
+	ch->flags |= ATA_CHECKS_CABLE;
+	if (ctlr->chip->cfg1 == HPT_366)
+		ch->flags |= ATA_NO_ATAPI_DMA;
+	return (0);
 }
 
-static void
-ata_highpoint_setmode(device_t dev, int mode)
+static int
+ata_highpoint_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    int error;
-    u_int32_t timings33[][4] = {
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
+	u_int32_t timings33[][4] = {
     /*    HPT366      HPT370      HPT372      HPT374               mode */
 	{ 0x40d0a7aa, 0x06914e57, 0x0d029d5e, 0x0ac1f48a },     /* PIO 0 */
 	{ 0x40d0a7a3, 0x06914e43, 0x0d029d26, 0x0ac1f465 },     /* PIO 1 */
@@ -179,51 +180,41 @@ ata_highpoint_setmode(device_t dev, int mode)
 	{ 0x10c9a731, 0x16454e31, 0x1c8a9c62, 0x12ac8242 },     /* UDMA 4 */
 	{ 0,          0x16454e31, 0x1c8a9c62, 0x12848242 },     /* UDMA 5 */
 	{ 0,          0,          0x1c869c62, 0x12808242 }      /* UDMA 6 */
-    };
+	};
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
-
-    if (ctlr->chip->cfg1 == HPT_366 && ata_atapi(dev))
-	mode = ata_limit_mode(dev, mode, ATA_PIO_MAX);
-
-    mode = ata_highpoint_check_80pin(dev, mode);
-
-    /*
-     * most if not all HPT chips cant really handle that the device is
-     * running at ATA_UDMA6/ATA133 speed, so we cheat at set the device to
-     * a max of ATA_UDMA5/ATA100 to guard against suboptimal performance
-     */
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0,
-			   ata_limit_mode(dev, mode, ATA_UDMA5));
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on HighPoint chip\n",
-		      (error) ? "FAILURE " : "", ata_mode2str(mode));
-    if (!error)
-	pci_write_config(gparent, 0x40 + (devno << 2),
+	mode = min(mode, ctlr->chip->max_dma);
+	mode = ata_highpoint_check_80pin(dev, mode);
+	/*
+	 * most if not all HPT chips cant really handle that the device is
+	 * running at ATA_UDMA6/ATA133 speed, so we cheat at set the device to
+         * a max of ATA_UDMA5/ATA100 to guard against suboptimal performance
+	 */
+	mode = min(mode, ATA_UDMA5);
+	pci_write_config(parent, 0x40 + (devno << 2),
 			 timings33[ata_mode2idx(mode)][ctlr->chip->cfg1], 4);
-    atadev->mode = mode;
+	return (mode);
 }
 
 static int
 ata_highpoint_check_80pin(device_t dev, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
+    device_t parent = device_get_parent(dev);
+    struct ata_pci_controller *ctlr = device_get_softc(parent);
+    struct ata_channel *ch = device_get_softc(dev);
     u_int8_t reg, val, res;
 
-    if (ctlr->chip->cfg1 == HPT_374 && pci_get_function(gparent) == 1) {
+    if (ctlr->chip->cfg1 == HPT_374 && pci_get_function(parent) == 1) {
 	reg = ch->unit ? 0x57 : 0x53;
-	val = pci_read_config(gparent, reg, 1);
-	pci_write_config(gparent, reg, val | 0x80, 1);
+	val = pci_read_config(parent, reg, 1);
+	pci_write_config(parent, reg, val | 0x80, 1);
     }
     else {
 	reg = 0x5b;
-	val = pci_read_config(gparent, reg, 1);
-	pci_write_config(gparent, reg, val & 0xfe, 1);
+	val = pci_read_config(parent, reg, 1);
+	pci_write_config(parent, reg, val & 0xfe, 1);
     }
-    res = pci_read_config(gparent, 0x5a, 1) & (ch->unit ? 0x1:0x2);
-    pci_write_config(gparent, reg, val, 1);
+    res = pci_read_config(parent, 0x5a, 1) & (ch->unit ? 0x1:0x2);
+    pci_write_config(parent, reg, val, 1);
 
     if (mode > ATA_UDMA2 && res) {
 	ata_print_cable(dev, "controller");
diff --git a/sys/dev/ata/chipsets/ata-intel.c b/sys/dev/ata/chipsets/ata-intel.c
index a19de8bec5c..ec05f30182b 100644
--- a/sys/dev/ata/chipsets/ata-intel.c
+++ b/sys/dev/ata/chipsets/ata-intel.c
@@ -55,9 +55,10 @@ __FBSDID("$FreeBSD$");
 static int ata_intel_chipinit(device_t dev);
 static int ata_intel_ch_attach(device_t dev);
 static void ata_intel_reset(device_t dev);
-static void ata_intel_old_setmode(device_t dev, int mode);
-static void ata_intel_new_setmode(device_t dev, int mode);
-static void ata_intel_sata_setmode(device_t dev, int mode);
+static int ata_intel_old_setmode(device_t dev, int target, int mode);
+static int ata_intel_new_setmode(device_t dev, int target, int mode);
+static int ata_intel_sch_setmode(device_t dev, int target, int mode);
+static int ata_intel_sata_getrev(device_t dev, int target);
 static int ata_intel_31244_ch_attach(device_t dev);
 static int ata_intel_31244_ch_detach(device_t dev);
 static int ata_intel_31244_status(device_t dev);
@@ -140,6 +141,7 @@ ata_intel_probe(device_t dev)
      { ATA_I82801JI_R1,  0, INTEL_AHCI, 0, ATA_SA300, "ICH10" },
      { ATA_I82801JI_S2,  0, INTEL_AHCI, 0, ATA_SA300, "ICH10" },
      { ATA_I31244,       0,          0, 2, ATA_SA150, "31244" },
+     { ATA_ISCH,         0,          0, 1, ATA_UDMA5, "SCH" },
      { 0, 0, 0, 0, 0, 0}};
 
     if (pci_get_vendor(dev) != ATA_INTEL_ID)
@@ -181,8 +183,15 @@ ata_intel_chipinit(device_t dev)
 	    ctlr->reset = ata_intel_31244_reset;
 	}
 	ctlr->setmode = ata_sata_setmode;
+	ctlr->getrev = ata_sata_getrev;
+    }
+    /* SCH */
+    else if (ctlr->chip->chipid == ATA_ISCH) {
+	ctlr->channels = 1;
+	ctlr->ch_attach = ata_intel_ch_attach;
+	ctlr->ch_detach = ata_pci_ch_detach;
+	ctlr->setmode = ata_intel_sch_setmode;
     }
-
     /* non SATA intel chips goes here */
     else if (ctlr->chip->max_dma < ATA_SA150) {
 	ctlr->channels = ctlr->chip->cfg2;
@@ -214,9 +223,8 @@ ata_intel_chipinit(device_t dev)
 	ctlr->r_rid2 = PCIR_BAR(5);
 	if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2,
 						   &ctlr->r_rid2, RF_ACTIVE)))
-	    ctlr->setmode = ata_intel_sata_setmode;
-	else
-	    ctlr->setmode = ata_sata_setmode;
+	    ctlr->getrev = ata_intel_sata_getrev;
+	ctlr->setmode = ata_sata_setmode;
     }
     return 0;
 }
@@ -240,6 +248,13 @@ ata_intel_ch_attach(device_t dev)
     }
 
     ch->flags |= ATA_ALWAYS_DMASTAT;
+    if (ctlr->chip->max_dma >= ATA_SA150) {
+	    if (ctlr->chip->cfg1 == 0 &&
+		(pci_read_config(device_get_parent(dev), 0x90, 1) & 0x04) == 0)
+		    ch->flags |= ATA_NO_SLAVE;
+	    ch->flags |= ATA_SATA;
+    } else if (ctlr->chip->chipid != ATA_ISCH)
+	    ch->flags |= ATA_CHECKS_CABLE;
     return 0;
 }
 
@@ -259,11 +274,8 @@ ata_intel_reset(device_t dev)
 	/* ICH5 in compat mode has SATA ports as master/slave on 1 channel */
 	if (pci_read_config(parent, 0x90, 1) & 0x04)
 	    mask = 0x0003;
-	else {
+	else
 	    mask = (0x0001 << ch->unit);
-	    /* XXX SOS should be in intel_ch_attach if we grow it */
-	    ch->flags |= ATA_NO_SLAVE;
-	}
     }
     pci_write_config(parent, 0x92, pci_read_config(parent, 0x92, 2) & ~mask, 2);
     DELAY(10);
@@ -279,80 +291,70 @@ ata_intel_reset(device_t dev)
     ata_generic_reset(dev);
 }
 
-static void
-ata_intel_old_setmode(device_t dev, int mode)
+static int
+ata_intel_old_setmode(device_t dev, int target, int mode)
 {
-    /* NOT YET */
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+
+	mode = min(mode, ctlr->chip->max_dma);
+	return (mode);
 }
 
-static void
-ata_intel_new_setmode(device_t dev, int mode)
+static int
+ata_intel_new_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    u_int32_t reg40 = pci_read_config(gparent, 0x40, 4);
-    u_int8_t reg44 = pci_read_config(gparent, 0x44, 1);
-    u_int8_t reg48 = pci_read_config(gparent, 0x48, 1);
-    u_int16_t reg4a = pci_read_config(gparent, 0x4a, 2);
-    u_int16_t reg54 = pci_read_config(gparent, 0x54, 2);
-    u_int32_t mask40 = 0, new40 = 0;
-    u_int8_t mask44 = 0, new44 = 0;
-    int error;
-    u_int8_t timings[] = { 0x00, 0x00, 0x10, 0x21, 0x23, 0x10, 0x21, 0x23,
-			   0x23, 0x23, 0x23, 0x23, 0x23, 0x23 };
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
+	int piomode;
+	u_int32_t reg40 = pci_read_config(parent, 0x40, 4);
+	u_int8_t reg44 = pci_read_config(parent, 0x44, 1);
+	u_int8_t reg48 = pci_read_config(parent, 0x48, 1);
+	u_int16_t reg4a = pci_read_config(parent, 0x4a, 2);
+	u_int16_t reg54 = pci_read_config(parent, 0x54, 2);
+	u_int32_t mask40 = 0, new40 = 0;
+	u_int8_t mask44 = 0, new44 = 0;
+	u_int8_t timings[] = { 0x00, 0x00, 0x10, 0x21, 0x23, 0x00, 0x21, 0x23 };
+	u_int8_t utimings[] = { 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02 };
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
-
-    if ( mode > ATA_UDMA2 && !(reg54 & (0x10 << devno))) {
-	ata_print_cable(dev, "controller");
-	mode = ATA_UDMA2;
-    }
-
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		      (error) ? "FAILURE " : "",
-		      ata_mode2str(mode), ctlr->chip->text);
-    if (!error) {
-	if (mode >= ATA_UDMA0) {
-	    u_int8_t utimings[] = { 0x00, 0x01, 0x10, 0x01, 0x10, 0x01, 0x10 };
-
-	    pci_write_config(gparent, 0x48, reg48 | (0x0001 << devno), 2);
-	    pci_write_config(gparent, 0x4a,
-			     (reg4a & ~(0x3 << (devno << 2))) |
-			     (utimings[mode & ATA_MODE_MASK] << (devno<<2)), 2);
+	mode = min(mode, ctlr->chip->max_dma);
+	if (mode > ATA_UDMA2 && !(reg54 & (0x10 << devno))) {
+		ata_print_cable(dev, "controller");
+		mode = ATA_UDMA2;
 	}
-	else {
-	    pci_write_config(gparent, 0x48, reg48 & ~(0x0001 << devno), 2);
-	    pci_write_config(gparent, 0x4a, (reg4a & ~(0x3 << (devno << 2))),2);
+	/* Enable/disable UDMA and set timings. */
+	if (mode >= ATA_UDMA0) {
+	    pci_write_config(parent, 0x48, reg48 | (0x0001 << devno), 2);
+	    pci_write_config(parent, 0x4a,
+		(reg4a & ~(0x3 << (devno << 2))) |
+		(utimings[mode & ATA_MODE_MASK] << (devno<<2)), 2);
+	    piomode = ATA_PIO4;
+	} else {
+	    pci_write_config(parent, 0x48, reg48 & ~(0x0001 << devno), 2);
+	    pci_write_config(parent, 0x4a, (reg4a & ~(0x3 << (devno << 2))),2);
+	    piomode = mode;
 	}
 	reg54 |= 0x0400;
-	if (mode >= ATA_UDMA2)
-	    reg54 |= (0x1 << devno);
-	else
-	    reg54 &= ~(0x1 << devno);
+	/* Set UDMA reference clock (33/66/133MHz). */
+	reg54 &= ~(0x1001 << devno);
 	if (mode >= ATA_UDMA5)
 	    reg54 |= (0x1000 << devno);
-	else 
-	    reg54 &= ~(0x1000 << devno);
-
-	pci_write_config(gparent, 0x54, reg54, 2);
-
+	else if (mode >= ATA_UDMA3)
+	    reg54 |= (0x1 << devno);
+	pci_write_config(parent, 0x54, reg54, 2);
+	/* Allow PIO/WDMA timing controls. */
 	reg40 &= ~0x00ff00ff;
 	reg40 |= 0x40774077;
-
-	if (atadev->unit == ATA_MASTER) {
+	/* Set PIO/WDMA timings. */
+	if (target == 0) {
 	    mask40 = 0x3300;
-	    new40 = timings[ata_mode2idx(mode)] << 8;
-	}
-	else {
+	    new40 = timings[ata_mode2idx(piomode)] << 8;
+	} else {
 	    mask44 = 0x0f;
-	    new44 = ((timings[ata_mode2idx(mode)] & 0x30) >> 2) |
-		    (timings[ata_mode2idx(mode)] & 0x03);
+	    new44 = ((timings[ata_mode2idx(piomode)] & 0x30) >> 2) |
+		    (timings[ata_mode2idx(piomode)] & 0x03);
 	}
 	if (ch->unit) {
 	    mask40 <<= 16;
@@ -360,43 +362,50 @@ ata_intel_new_setmode(device_t dev, int mode)
 	    mask44 <<= 4;
 	    new44 <<= 4;
 	}
-	pci_write_config(gparent, 0x40, (reg40 & ~mask40) | new40, 4);
-	pci_write_config(gparent, 0x44, (reg44 & ~mask44) | new44, 1);
-
-	atadev->mode = mode;
-    }
+	pci_write_config(parent, 0x40, (reg40 & ~mask40) | new40, 4);
+	pci_write_config(parent, 0x44, (reg44 & ~mask44) | new44, 1);
+	return (mode);
 }
 
-static void
-ata_intel_sata_setmode(device_t dev, int mode)
+static int
+ata_intel_sch_setmode(device_t dev, int target, int mode)
 {
-    struct ata_device *atadev = device_get_softc(dev);
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	u_int8_t dtim = 0x80 + (target << 2);
+	u_int32_t tim = pci_read_config(parent, dtim, 4);
+	int piomode;
 
-    if (atadev->param.satacapabilities != 0x0000 &&
-	atadev->param.satacapabilities != 0xffff) {
+	mode = min(mode, ctlr->chip->max_dma);
+	if (mode >= ATA_UDMA0) {
+		tim |= (0x1 << 31);
+		tim &= ~(0x7 << 16);
+		tim |= ((mode & ATA_MODE_MASK) << 16);
+		piomode = ATA_PIO4;
+	} else if (mode >= ATA_WDMA0) {
+		tim &= ~(0x1 << 31);
+		tim &= ~(0x3 << 8);
+		tim |= ((mode & ATA_MODE_MASK) << 8);
+		piomode = (mode == ATA_WDMA0) ? ATA_PIO0 :
+		    (mode == ATA_WDMA1) ? ATA_PIO3 : ATA_PIO4;
+	} else
+		piomode = mode;
+	tim &= ~(0x7);
+	tim |= (piomode & 0x7);
+	pci_write_config(parent, dtim, tim, 4);
+	return (mode);
+}
 
-	struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-	int devno = (ch->unit << 1) + atadev->unit;
-
-	/* on some drives we need to set the transfer mode */
-	ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0,
-		       ata_limit_mode(dev, mode, ATA_UDMA6));
+static int
+ata_intel_sata_getrev(device_t dev, int target)
+{
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
 
 	/* set ATA_SSTATUS register offset */
 	ATA_IDX_OUTL(ch, ATA_IDX_ADDR, devno * 0x100);
-
 	/* query SATA STATUS for the speed */
-	if ((ATA_IDX_INL(ch, ATA_IDX_DATA) & ATA_SS_CONWELL_MASK) ==
-	    ATA_SS_CONWELL_GEN2)
-	    atadev->mode = ATA_SA300;
-	else
-	    atadev->mode = ATA_SA150;
-    }
-    else {
-	mode = ata_limit_mode(dev, mode, ATA_UDMA5);
-	if (!ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
-	    atadev->mode = mode;
-    }
+	return ((ATA_IDX_INL(ch, ATA_IDX_DATA) & 0x0f0) >> 4);
 }
 
 static int
@@ -439,6 +448,7 @@ ata_intel_31244_ch_attach(device_t dev)
     ch->r_io[ATA_BMDTP_PORT].offset = ch_offset + 0x74;
 
     ch->flags |= ATA_NO_SLAVE;
+    ch->flags |= ATA_SATA;
     ata_pci_hw(dev);
     ch->hw.status = ata_intel_31244_status;
     ch->hw.tf_write = ata_intel_31244_tf_write;
@@ -471,7 +481,9 @@ static void
 ata_intel_31244_tf_write(struct ata_request *request)
 {
     struct ata_channel *ch = device_get_softc(request->parent);
+#ifndef ATA_CAM
     struct ata_device *atadev = device_get_softc(request->dev);
+#endif
 
     if (request->flags & ATA_R_48BIT) {
 	ATA_IDX_OUTW(ch, ATA_FEATURE, request->u.ata.feature);
@@ -487,6 +499,7 @@ ata_intel_31244_tf_write(struct ata_request *request)
     else {
 	ATA_IDX_OUTB(ch, ATA_FEATURE, request->u.ata.feature);
 	ATA_IDX_OUTB(ch, ATA_COUNT, request->u.ata.count);
+#ifndef ATA_CAM
 	if (atadev->flags & ATA_D_USE_CHS) {
 	    int heads, sectors;
     
@@ -508,13 +521,16 @@ ata_intel_31244_tf_write(struct ata_request *request)
 			   sectors) & 0xf));
 	}
 	else {
+#endif
 	    ATA_IDX_OUTB(ch, ATA_SECTOR, request->u.ata.lba);
 	    ATA_IDX_OUTB(ch, ATA_CYL_LSB, request->u.ata.lba >> 8);
 	    ATA_IDX_OUTB(ch, ATA_CYL_MSB, request->u.ata.lba >> 16);
 	    ATA_IDX_OUTB(ch, ATA_DRIVE,
 			 ATA_D_IBM | ATA_D_LBA | ATA_DEV(request->unit) |
 			 ((request->u.ata.lba >> 24) & 0x0f));
+#ifndef ATA_CAM
 	}
+#endif
     }
 }
 
diff --git a/sys/dev/ata/chipsets/ata-ite.c b/sys/dev/ata/chipsets/ata-ite.c
index 61879172aeb..8c0a2c598f6 100644
--- a/sys/dev/ata/chipsets/ata-ite.c
+++ b/sys/dev/ata/chipsets/ata-ite.c
@@ -53,8 +53,9 @@ __FBSDID("$FreeBSD$");
 
 /* local prototypes */
 static int ata_ite_chipinit(device_t dev);
-static void ata_ite_821x_setmode(device_t dev, int mode);
-static void ata_ite_8213_setmode(device_t dev, int mode);
+static int ata_ite_ch_attach(device_t dev);
+static int ata_ite_821x_setmode(device_t dev, int target, int mode);
+static int ata_ite_8213_setmode(device_t dev, int target, int mode);
 
 
 /*
@@ -104,144 +105,128 @@ ata_ite_chipinit(device_t dev)
 	pci_write_config(dev, 0x56, 0x31, 1);
 
 	ctlr->setmode = ata_ite_821x_setmode;
+	/* No timing restrictions initally. */
+	ctlr->chipset_data = (void *)0;
     }
-
+    ctlr->ch_attach = ata_ite_ch_attach;
     return 0;
 }
- 
-static void
-ata_ite_821x_setmode(device_t dev, int mode)
+
+static int
+ata_ite_ch_attach(device_t dev)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    int error;
-
-    /* correct the mode for what the HW supports */
-    mode = ata_limit_mode(dev, mode, ATA_UDMA6);
-
-    /* check the CBLID bits for 80 conductor cable detection */
-    if (mode > ATA_UDMA2 && (pci_read_config(gparent, 0x40, 2) &
-			     (ch->unit ? (1<<3) : (1<<2)))) {
-	ata_print_cable(dev, "controller");
-	mode = ATA_UDMA2;
-    }
-
-    /* set the wanted mode on the device */
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-
-    if (bootverbose)
-	device_printf(dev, "%s setting %s on ITE8212F chip\n",
-		      (error) ? "failed" : "success", ata_mode2str(mode));
-
-    /* if the device accepted the mode change, setup the HW accordingly */
-    if (!error) {
-	if (mode >= ATA_UDMA0) {
-	    u_int8_t udmatiming[] =
-		{ 0x44, 0x42, 0x31, 0x21, 0x11, 0xa2, 0x91 };
-
-	    /* enable UDMA mode */
-	    pci_write_config(gparent, 0x50,
-			     pci_read_config(gparent, 0x50, 1) &
-			     ~(1 << (devno + 3)), 1);
-
-	    /* set UDMA timing */
-	    pci_write_config(gparent,
-			     0x56 + (ch->unit << 2) + atadev->unit,
-			     udmatiming[mode & ATA_MODE_MASK], 1);
-	}
-	else {
-	    u_int8_t chtiming[] =
-		{ 0xaa, 0xa3, 0xa1, 0x33, 0x31, 0x88, 0x32, 0x31 };
-
-	    /* disable UDMA mode */
-	    pci_write_config(gparent, 0x50,
-			     pci_read_config(gparent, 0x50, 1) |
-			     (1 << (devno + 3)), 1);
-
-	    /* set active and recover timing (shared between master & slave) */
-	    if (pci_read_config(gparent, 0x54 + (ch->unit << 2), 1) <
-		chtiming[ata_mode2idx(mode)])
-		pci_write_config(gparent, 0x54 + (ch->unit << 2),
-				 chtiming[ata_mode2idx(mode)], 1);
-	}
-	atadev->mode = mode;
-    }
+	struct ata_channel *ch = device_get_softc(dev);
+	int error;
+ 
+	error = ata_pci_ch_attach(dev);
+	ch->flags |= ATA_CHECKS_CABLE;
+	return (error);
 }
 
-static void
-ata_ite_8213_setmode(device_t dev, int mode)
+static int
+ata_ite_821x_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_device *atadev = device_get_softc(dev);
-    u_int16_t reg40 = pci_read_config(gparent, 0x40, 2);
-    u_int8_t reg44 = pci_read_config(gparent, 0x44, 1);
-    u_int8_t reg48 = pci_read_config(gparent, 0x48, 1);
-    u_int16_t reg4a = pci_read_config(gparent, 0x4a, 2);
-    u_int16_t reg54 = pci_read_config(gparent, 0x54, 2);
-    u_int16_t mask40 = 0, new40 = 0;
-    u_int8_t mask44 = 0, new44 = 0;
-    int devno = atadev->unit;
-    int error;
-    u_int8_t timings[] = { 0x00, 0x00, 0x10, 0x21, 0x23, 0x10, 0x21, 0x23,
-			   0x23, 0x23, 0x23, 0x23, 0x23, 0x23 };
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
+	int piomode;
+	uint8_t *timings = (uint8_t*)(&ctlr->chipset_data);
+	u_int8_t udmatiming[] =
+		{ 0x44, 0x42, 0x31, 0x21, 0x11, 0xa2, 0x91 };
+	u_int8_t chtiming[] =
+		{ 0xaa, 0xa3, 0xa1, 0x33, 0x31, 0x88, 0x32, 0x31 };
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
-
-    if (mode > ATA_UDMA2 && !(reg54 & (0x10 << devno))) {
-	ata_print_cable(dev, "controller");
-	mode = ATA_UDMA2;
-    }
-
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		      (error) ? "FAILURE " : "",
-		      ata_mode2str(mode), ctlr->chip->text);
-    if (!error) {
+	mode = min(mode, ctlr->chip->max_dma);
+	/* check the CBLID bits for 80 conductor cable detection */
+	if (mode > ATA_UDMA2 && (pci_read_config(parent, 0x40, 2) &
+			     (ch->unit ? (1<<3) : (1<<2)))) {
+		ata_print_cable(dev, "controller");
+		mode = ATA_UDMA2;
+	}
 	if (mode >= ATA_UDMA0) {
-	    u_int8_t utimings[] = { 0x00, 0x01, 0x10, 0x01, 0x10, 0x01, 0x10 };
+		/* enable UDMA mode */
+		pci_write_config(parent, 0x50,
+			     pci_read_config(parent, 0x50, 1) &
+			     ~(1 << (devno + 3)), 1);
+		/* set UDMA timing */
+		pci_write_config(parent,
+			     0x56 + (ch->unit << 2) + target,
+			     udmatiming[mode & ATA_MODE_MASK], 1);
+		piomode = ATA_PIO4;
+	} else {
+		/* disable UDMA mode */
+		pci_write_config(parent, 0x50,
+			     pci_read_config(parent, 0x50, 1) |
+			     (1 << (devno + 3)), 1);
+		piomode = mode;
+	}
+	timings[devno] = chtiming[ata_mode2idx(piomode)];
+	/* set active and recover timing (shared between master & slave) */
+	pci_write_config(parent, 0x54 + (ch->unit << 2),
+	    max(timings[ch->unit << 1], timings[(ch->unit << 1) + 1]), 1);
+	return (mode);
+}
 
-	    pci_write_config(gparent, 0x48, reg48 | (0x0001 << devno), 2);
-	    pci_write_config(gparent, 0x4a,
-			     (reg4a & ~(0x3 << (devno << 2))) |
-			     (utimings[mode & ATA_MODE_MASK] << (devno<<2)), 2);
+static int
+ata_ite_8213_setmode(device_t dev, int target, int mode)
+{
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	int piomode;
+	u_int16_t reg40 = pci_read_config(parent, 0x40, 2);
+	u_int8_t reg44 = pci_read_config(parent, 0x44, 1);
+	u_int8_t reg48 = pci_read_config(parent, 0x48, 1);
+	u_int16_t reg4a = pci_read_config(parent, 0x4a, 2);
+	u_int16_t reg54 = pci_read_config(parent, 0x54, 2);
+	u_int16_t mask40 = 0, new40 = 0;
+	u_int8_t mask44 = 0, new44 = 0;
+	u_int8_t timings[] = { 0x00, 0x00, 0x10, 0x21, 0x23, 0x00, 0x21, 0x23 };
+	u_int8_t utimings[] = { 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02 };
+
+	mode = min(mode, ctlr->chip->max_dma);
+
+	if (mode > ATA_UDMA2 && !(reg54 & (0x10 << target))) {
+		ata_print_cable(dev, "controller");
+		mode = ATA_UDMA2;
 	}
-	else {
-	    pci_write_config(gparent, 0x48, reg48 & ~(0x0001 << devno), 2);
-	    pci_write_config(gparent, 0x4a, (reg4a & ~(0x3 << (devno << 2))),2);
+	/* Enable/disable UDMA and set timings. */
+	if (mode >= ATA_UDMA0) {
+	    pci_write_config(parent, 0x48, reg48 | (0x0001 << target), 2);
+	    pci_write_config(parent, 0x4a,
+			     (reg4a & ~(0x3 << (target << 2))) |
+			     (utimings[mode & ATA_MODE_MASK] << (target<<2)), 2);
+	    piomode = ATA_PIO4;
+	} else {
+	    pci_write_config(parent, 0x48, reg48 & ~(0x0001 << target), 2);
+	    pci_write_config(parent, 0x4a, (reg4a & ~(0x3 << (target << 2))),2);
+	    piomode = mode;
 	}
-	if (mode >= ATA_UDMA2)
-	    reg54 |= (0x1 << devno);
-	else
-	    reg54 &= ~(0x1 << devno);
+	/* Set UDMA reference clock (33/66/133MHz). */
+	reg54 &= ~(0x1001 << target);
 	if (mode >= ATA_UDMA5)
-	    reg54 |= (0x1000 << devno);
-	else 
-	    reg54 &= ~(0x1000 << devno);
-	pci_write_config(gparent, 0x54, reg54, 2);
-
+	    reg54 |= (0x1000 << target);
+	else if (mode >= ATA_UDMA3)
+	    reg54 |= (0x1 << target);
+	pci_write_config(parent, 0x54, reg54, 2);
+	/* Allow PIO/WDMA timing controls. */
 	reg40 &= 0xff00;
 	reg40 |= 0x4033;
-	if (atadev->unit == ATA_MASTER) {
-	    reg40 |= (ata_atapi(dev) ? 0x04 : 0x00);
+	/* Set PIO/WDMA timings. */
+	if (target == 0) {
+	    reg40 |= (ata_atapi(dev, target) ? 0x04 : 0x00);
 	    mask40 = 0x3300;
-	    new40 = timings[ata_mode2idx(mode)] << 8;
+	    new40 = timings[ata_mode2idx(piomode)] << 8;
 	}
 	else {
-	    reg40 |= (ata_atapi(dev) ? 0x40 : 0x00);
+	    reg40 |= (ata_atapi(dev, target) ? 0x40 : 0x00);
 	    mask44 = 0x0f;
-	    new44 = ((timings[ata_mode2idx(mode)] & 0x30) >> 2) |
-		    (timings[ata_mode2idx(mode)] & 0x03);
+	    new44 = ((timings[ata_mode2idx(piomode)] & 0x30) >> 2) |
+		    (timings[ata_mode2idx(piomode)] & 0x03);
 	}
-	pci_write_config(gparent, 0x40, (reg40 & ~mask40) | new40, 4);
-	pci_write_config(gparent, 0x44, (reg44 & ~mask44) | new44, 1);
-
-	atadev->mode = mode;
-    }
+	pci_write_config(parent, 0x40, (reg40 & ~mask40) | new40, 4);
+	pci_write_config(parent, 0x44, (reg44 & ~mask44) | new44, 1);
+	return (mode);
 }
 
 ATA_DECLARE_DRIVER(ata_ite);
diff --git a/sys/dev/ata/chipsets/ata-jmicron.c b/sys/dev/ata/chipsets/ata-jmicron.c
index 91108af8093..13524f1e7c6 100644
--- a/sys/dev/ata/chipsets/ata-jmicron.c
+++ b/sys/dev/ata/chipsets/ata-jmicron.c
@@ -54,11 +54,7 @@ __FBSDID("$FreeBSD$");
 /* local prototypes */
 static int ata_jmicron_chipinit(device_t dev);
 static int ata_jmicron_ch_attach(device_t dev);
-static int ata_jmicron_ch_detach(device_t dev);
-static int ata_jmicron_ch_suspend(device_t dev);
-static int ata_jmicron_ch_resume(device_t dev);
-static void ata_jmicron_reset(device_t dev);
-static void ata_jmicron_setmode(device_t dev, int mode);
+static int ata_jmicron_setmode(device_t dev, int target, int mode);
 
 /*
  * JMicron chipset support functions
@@ -70,10 +66,10 @@ ata_jmicron_probe(device_t dev)
     struct ata_chip_id *idx;
     static struct ata_chip_id ids[] =
     {{ ATA_JMB360, 0, 1, 0, ATA_SA300, "JMB360" },
-     { ATA_JMB361, 0, 1, 1, ATA_SA300, "JMB361" },
-     { ATA_JMB363, 0, 2, 1, ATA_SA300, "JMB363" },
-     { ATA_JMB365, 0, 1, 2, ATA_SA300, "JMB365" },
-     { ATA_JMB366, 0, 2, 2, ATA_SA300, "JMB366" },
+     { ATA_JMB361, 0, 1, 1, ATA_UDMA6, "JMB361" },
+     { ATA_JMB363, 0, 2, 1, ATA_UDMA6, "JMB363" },
+     { ATA_JMB365, 0, 1, 2, ATA_UDMA6, "JMB365" },
+     { ATA_JMB366, 0, 2, 2, ATA_UDMA6, "JMB366" },
      { ATA_JMB368, 0, 0, 1, ATA_UDMA6, "JMB368" },
      { 0, 0, 0, 0, 0, 0}};
     char buffer[64];
@@ -84,13 +80,8 @@ ata_jmicron_probe(device_t dev)
     if (!(idx = ata_match_chip(dev, ids)))
         return ENXIO;
 
-    if ((pci_read_config(dev, 0xdf, 1) & 0x40) &&
-	(pci_get_function(dev) == (pci_read_config(dev, 0x40, 1) & 0x02 >> 1)))
-	sprintf(buffer, "JMicron %s %s controller",
-		idx->text, ata_mode2str(ATA_UDMA6));
-    else
-	sprintf(buffer, "JMicron %s %s controller",
-		idx->text, ata_mode2str(idx->max_dma));
+    sprintf(buffer, "JMicron %s %s controller",
+	idx->text, ata_mode2str(idx->max_dma));
     device_set_desc_copy(dev, buffer);
     ctlr->chip = idx;
     ctlr->chipinit = ata_jmicron_chipinit;
@@ -101,7 +92,7 @@ static int
 ata_jmicron_chipinit(device_t dev)
 {
     struct ata_pci_controller *ctlr = device_get_softc(dev);
-    int error;
+    device_t child;
 
     if (ata_setup_interrupt(dev, ata_generic_intr))
 	return ENXIO;
@@ -113,7 +104,7 @@ ata_jmicron_chipinit(device_t dev)
 	    return 0;
 
 	/* otherwise we are on the PATA part */
-	ctlr->ch_attach = ata_pci_ch_attach;
+	ctlr->ch_attach = ata_jmicron_ch_attach;
 	ctlr->ch_detach = ata_pci_ch_detach;
 	ctlr->reset = ata_generic_reset;
 	ctlr->setmode = ata_jmicron_setmode;
@@ -123,21 +114,19 @@ ata_jmicron_chipinit(device_t dev)
 	/* set controller configuration to a combined setup we support */
 	pci_write_config(dev, 0x40, 0x80c0a131, 4);
 	pci_write_config(dev, 0x80, 0x01200000, 4);
-
-	if (ctlr->chip->cfg1 && (error = ata_ahci_chipinit(dev)))
-	    return error;
-
+	/* Create AHCI subdevice if AHCI part present. */
+	if (ctlr->chip->cfg1) {
+	    	child = device_add_child(dev, NULL, -1);
+		if (child != NULL) {
+		    device_set_ivars(child, (void *)(intptr_t)-1);
+		    bus_generic_attach(dev);
+		}
+	}
 	ctlr->ch_attach = ata_jmicron_ch_attach;
-	ctlr->ch_detach = ata_jmicron_ch_detach;
-	ctlr->ch_suspend = ata_jmicron_ch_suspend;
-	ctlr->ch_resume = ata_jmicron_ch_resume;
-	ctlr->reset = ata_jmicron_reset;
+	ctlr->ch_detach = ata_pci_ch_detach;
+	ctlr->reset = ata_generic_reset;
 	ctlr->setmode = ata_jmicron_setmode;
-
-	/* set the number of HW channels */ 
-	ctlr->channels = ctlr->chip->cfg1 + ctlr->chip->cfg2;
-	ctlr->ichannels |= ((0xffffffffU >> (32 - ctlr->chip->cfg2))
-	    << ctlr->chip->cfg1);
+	ctlr->channels = ctlr->chip->cfg2;
     }
     return 0;
 }
@@ -145,94 +134,27 @@ ata_jmicron_chipinit(device_t dev)
 static int
 ata_jmicron_ch_attach(device_t dev)
 {
-    struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
-    struct ata_channel *ch = device_get_softc(dev);
-    int error;
-
-    if (ch->unit >= ctlr->chip->cfg1) {
-	ch->unit -= ctlr->chip->cfg1;
+	struct ata_channel *ch = device_get_softc(dev);
+	int error;
+ 
 	error = ata_pci_ch_attach(dev);
-	ch->unit += ctlr->chip->cfg1;
-    }
-    else
-	error = ata_ahci_ch_attach(dev);
-    return error;
+	ch->flags |= ATA_CHECKS_CABLE;
+	return (error);
 }
 
 static int
-ata_jmicron_ch_detach(device_t dev)
+ata_jmicron_setmode(device_t dev, int target, int mode)
 {
-    struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
-    struct ata_channel *ch = device_get_softc(dev);
-    int error;
-
-    if (ch->unit >= ctlr->chip->cfg1) {
-	ch->unit -= ctlr->chip->cfg1;
-	error = ata_pci_ch_detach(dev);
-	ch->unit += ctlr->chip->cfg1;
-    }
-    else
-	error = ata_ahci_ch_detach(dev);
-
-    return (error);
-}
-
-static int
-ata_jmicron_ch_suspend(device_t dev)
-{
-    struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
-    struct ata_channel *ch = device_get_softc(dev);
-    int error = 0;
-
-    if (ch->unit < ctlr->chip->cfg1)
-	error = ata_ahci_ch_suspend(dev);
-    return error;
-}
-
-static int
-ata_jmicron_ch_resume(device_t dev)
-{
-    struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
-    struct ata_channel *ch = device_get_softc(dev);
-    int error = 0;
-
-    if (ch->unit < ctlr->chip->cfg1)
-	error = ata_ahci_ch_resume(dev);
-    return (error);
-}
-
-static void
-ata_jmicron_reset(device_t dev)
-{
-    struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
-    struct ata_channel *ch = device_get_softc(dev);
-
-    if (ch->unit >= ctlr->chip->cfg1)
-	ata_generic_reset(dev);
-    else
-	ata_ahci_reset(dev);
-}
-
-static void
-ata_jmicron_setmode(device_t dev, int mode)
-{
-    struct ata_pci_controller *ctlr = device_get_softc(GRANDPARENT(dev));
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-
-    if (pci_read_config(dev, 0xdf, 1) & 0x40 || ch->unit >= ctlr->chip->cfg1) {
-	struct ata_device *atadev = device_get_softc(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
 
+	mode = min(mode, ctlr->chip->max_dma);
 	/* check for 80pin cable present */
-	if (pci_read_config(dev, 0x40, 1) & 0x08)
-	    mode = ata_limit_mode(dev, mode, ATA_UDMA2);
-	else
-	    mode = ata_limit_mode(dev, mode, ATA_UDMA6);
-
-	if (!ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
-	    atadev->mode = mode;
-    }
-    else
-	ata_sata_setmode(dev, mode);
+	if (mode > ATA_UDMA2 && pci_read_config(dev, 0x40, 1) & 0x08) {
+		ata_print_cable(dev, "controller");
+		mode = ATA_UDMA2;
+	}
+	/* Nothing to do to setup mode, the controller snoop SET_FEATURE cmd. */
+	return (mode);
 }
 
 ATA_DECLARE_DRIVER(ata_jmicron);
diff --git a/sys/dev/ata/chipsets/ata-marvell.c b/sys/dev/ata/chipsets/ata-marvell.c
index 346fed5ee74..0d11266aa2b 100644
--- a/sys/dev/ata/chipsets/ata-marvell.c
+++ b/sys/dev/ata/chipsets/ata-marvell.c
@@ -52,9 +52,9 @@ __FBSDID("$FreeBSD$");
 #include 
 
 /* local prototypes */
-static int ata_marvell_pata_chipinit(device_t dev);
-static int ata_marvell_pata_ch_attach(device_t dev);
-static void ata_marvell_pata_setmode(device_t dev, int mode);
+static int ata_marvell_chipinit(device_t dev);
+static int ata_marvell_ch_attach(device_t dev);
+static int ata_marvell_setmode(device_t dev, int target, int mode);
 static int ata_marvell_edma_ch_attach(device_t dev);
 static int ata_marvell_edma_ch_detach(device_t dev);
 static int ata_marvell_edma_status(device_t dev);
@@ -107,9 +107,12 @@ ata_marvell_probe(device_t dev)
      { ATA_M88SX6042, 0, 4, MV_6042, ATA_SA300, "88SX6042" },
      { ATA_M88SX6081, 0, 8, MV_60XX, ATA_SA300, "88SX6081" },
      { ATA_M88SX7042, 0, 4, MV_7042, ATA_SA300, "88SX7042" },
-     { ATA_M88SX6101, 0, 1, MV_61XX, ATA_UDMA6, "88SX6101" },
-     { ATA_M88SX6121, 0, 1, MV_61XX, ATA_UDMA6, "88SX6121" },
-     { ATA_M88SX6145, 0, 2, MV_61XX, ATA_UDMA6, "88SX6145" },
+     { ATA_M88SX6101, 0, 0, MV_61XX, ATA_UDMA6, "88SX6101" },
+     { ATA_M88SX6102, 0, 0, MV_61XX, ATA_UDMA6, "88SX6102" },
+     { ATA_M88SX6111, 0, 1, MV_61XX, ATA_UDMA6, "88SX6111" },
+     { ATA_M88SX6121, 0, 2, MV_61XX, ATA_UDMA6, "88SX6121" },
+     { ATA_M88SX6141, 0, 4, MV_61XX, ATA_UDMA6, "88SX6141" },
+     { ATA_M88SX6145, 0, 4, MV_61XX, ATA_UDMA6, "88SX6145" },
      { 0, 0, 0, 0, 0, 0}};
 
     if (pci_get_vendor(dev) != ATA_MARVELL_ID)
@@ -128,53 +131,63 @@ ata_marvell_probe(device_t dev)
 	ctlr->chipinit = ata_marvell_edma_chipinit;
 	break;
     case MV_61XX:
-	ctlr->chipinit = ata_marvell_pata_chipinit;
+	ctlr->chipinit = ata_marvell_chipinit;
 	break;
     }
     return (BUS_PROBE_DEFAULT);
 }
 
 static int
-ata_marvell_pata_chipinit(device_t dev)
+ata_marvell_chipinit(device_t dev)
 {
-    struct ata_pci_controller *ctlr = device_get_softc(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(dev);
+	device_t child;
 
-    if (ata_setup_interrupt(dev, ata_generic_intr))
-	return ENXIO;
-
-    ctlr->ch_attach = ata_marvell_pata_ch_attach;
-    ctlr->ch_detach = ata_pci_ch_detach;
-    ctlr->setmode = ata_marvell_pata_setmode;
-    ctlr->channels = ctlr->chip->cfg1;
-    return 0;
+	if (ata_setup_interrupt(dev, ata_generic_intr))
+		return ENXIO;
+	/* Create AHCI subdevice if AHCI part present. */
+	if (ctlr->chip->cfg1) {
+	    	child = device_add_child(dev, NULL, -1);
+		if (child != NULL) {
+		    device_set_ivars(child, (void *)(intptr_t)-1);
+		    bus_generic_attach(dev);
+		}
+	}
+        ctlr->ch_attach = ata_marvell_ch_attach;
+	ctlr->ch_detach = ata_pci_ch_detach;
+	ctlr->reset = ata_generic_reset;
+        ctlr->setmode = ata_marvell_setmode;
+        ctlr->channels = 1;
+        return (0);
 }
 
 static int
-ata_marvell_pata_ch_attach(device_t dev)
+ata_marvell_ch_attach(device_t dev)
 {
-    struct ata_channel *ch = device_get_softc(dev);
+	struct ata_channel *ch = device_get_softc(dev);
+	int error;
  
-    /* setup the usual register normal pci style */
-    if (ata_pci_ch_attach(dev))
-	return ENXIO;
- 
-    /* dont use 32 bit PIO transfers */
+	error = ata_pci_ch_attach(dev);
+    	/* dont use 32 bit PIO transfers */
 	ch->flags |= ATA_USE_16BIT;
-
-    return 0;
+	ch->flags |= ATA_CHECKS_CABLE;
+	return (error);
 }
 
-static void
-ata_marvell_pata_setmode(device_t dev, int mode)
+static int
+ata_marvell_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_device *atadev = device_get_softc(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
+	struct ata_channel *ch = device_get_softc(dev);
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
-    mode = ata_check_80pin(dev, mode);
-    if (!ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
-	atadev->mode = mode;
+	mode = min(mode, ctlr->chip->max_dma);
+	/* Check for 80pin cable present. */
+	if (mode > ATA_UDMA2 && ATA_IDX_INB(ch, ATA_BMDEVSPEC_0) & 0x01) {
+		ata_print_cable(dev, "controller");
+		mode = ATA_UDMA2;
+	}
+	/* Nothing to do to setup mode, the controller snoop SET_FEATURE cmd. */
+	return (mode);
 }
 
 int
@@ -201,6 +214,7 @@ ata_marvell_edma_chipinit(device_t dev)
     ctlr->ch_detach = ata_marvell_edma_ch_detach;
     ctlr->reset = ata_marvell_edma_reset;
     ctlr->setmode = ata_sata_setmode;
+    ctlr->getrev = ata_sata_getrev;
     ctlr->channels = ctlr->chip->cfg1;
 
     /* clear host controller interrupts */
@@ -272,6 +286,7 @@ ata_marvell_edma_ch_attach(device_t dev)
 
     ch->flags |= ATA_NO_SLAVE;
     ch->flags |= ATA_USE_16BIT; /* XXX SOS needed ? */
+    ch->flags |= ATA_SATA;
     ata_generic_hw(dev);
     ch->hw.begin_transaction = ata_marvell_edma_begin_transaction;
     ch->hw.end_transaction = ata_marvell_edma_end_transaction;
@@ -592,8 +607,6 @@ ata_marvell_edma_dmainit(device_t dev)
     /* chip does not reliably do 64K DMA transfers */
     if (ctlr->chip->cfg2 == MV_50XX || ctlr->chip->cfg2 == MV_60XX)
 	ch->dma.max_iosize = 64 * DEV_BSIZE;
-    else
-	ch->dma.max_iosize = (ATA_DMA_ENTRIES - 1) * PAGE_SIZE;
 }
 
 ATA_DECLARE_DRIVER(ata_marvell);
diff --git a/sys/dev/ata/chipsets/ata-micron.c b/sys/dev/ata/chipsets/ata-micron.c
index ce758743040..2b74a330588 100644
--- a/sys/dev/ata/chipsets/ata-micron.c
+++ b/sys/dev/ata/chipsets/ata-micron.c
@@ -51,11 +51,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-/* local prototypes */
-static int ata_micron_chipinit(device_t dev);
-static void ata_micron_setmode(device_t dev, int mode);
-
-
 /*
  * Cenatek chipset support functions
  */
@@ -68,34 +63,10 @@ ata_micron_probe(device_t dev)
 	pci_get_devid(dev) == ATA_MICRON_RZ1001) {
 	device_set_desc(dev,
 	    "RZ 100? ATA controller !WARNING! data loss/corruption risk");
-	ctlr->chipinit = ata_micron_chipinit;
+	ctlr->chipinit = ata_generic_chipinit;
 	return (BUS_PROBE_DEFAULT);
     }
-    else
-	return ENXIO;
-}
-
-static int
-ata_micron_chipinit(device_t dev)
-{
-    struct ata_pci_controller *ctlr = device_get_softc(dev);
-
-    if (ata_setup_interrupt(dev, ata_generic_intr))
-	return ENXIO;
-
-    ctlr->setmode = ata_micron_setmode;
-    return 0;
-}
-
-static void
-ata_micron_setmode(device_t dev, int mode)
-{
-    struct ata_device *atadev = device_get_softc(dev);
-
-    mode = ata_limit_mode(dev, mode, ATA_UDMA2);
-    mode = ata_check_80pin(dev, mode);
-    if (!ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
-	atadev->mode = mode;
+    return (ENXIO);
 }
 
 ATA_DECLARE_DRIVER(ata_micron);
diff --git a/sys/dev/ata/chipsets/ata-national.c b/sys/dev/ata/chipsets/ata-national.c
index 840360ad2b6..20cafa533a8 100644
--- a/sys/dev/ata/chipsets/ata-national.c
+++ b/sys/dev/ata/chipsets/ata-national.c
@@ -53,8 +53,8 @@ __FBSDID("$FreeBSD$");
 
 /* local prototypes */
 static int ata_national_chipinit(device_t dev);
-static void ata_national_setmode(device_t dev, int mode);
-
+static int ata_national_ch_attach(device_t dev);
+static int ata_national_setmode(device_t dev, int target, int mode);
 
 /*
  * National chipset support functions
@@ -81,53 +81,55 @@ ata_national_chipinit(device_t dev)
     if (ata_setup_interrupt(dev, ata_generic_intr))
 	return ENXIO;
 		    
+    ctlr->ch_attach = ata_national_ch_attach;
     ctlr->setmode = ata_national_setmode;
     return 0;
 }
 
-static void
-ata_national_setmode(device_t dev, int mode)
+static int
+ata_national_ch_attach(device_t dev)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    u_int32_t piotiming[] =
-	{ 0x9172d132, 0x21717121, 0x00803020, 0x20102010, 0x00100010,
-	  0x00803020, 0x20102010, 0x00100010,
-	  0x00100010, 0x00100010, 0x00100010 };
-    u_int32_t dmatiming[] = { 0x80077771, 0x80012121, 0x80002020 };
-    u_int32_t udmatiming[] = { 0x80921250, 0x80911140, 0x80911030 };
-    int error;
+	struct ata_channel *ch = device_get_softc(dev);
+	int error;
+ 
+	error = ata_pci_ch_attach(dev);
+	ch->dma.alignment = 16;
+	ch->dma.max_iosize = 64 * DEV_BSIZE;
+	return (error);
+}
 
-    ch->dma.alignment = 16;
-    ch->dma.max_iosize = 64 * DEV_BSIZE;
+static int
+ata_national_setmode(device_t dev, int target, int mode)
+{
+	device_t parent = device_get_parent(dev);
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
+	int piomode;
+	u_int32_t piotiming[] =
+	    { 0x9172d132, 0x21717121, 0x00803020, 0x20102010, 0x00100010,
+	      0x9172d132, 0x20102010, 0x00100010 };
+	u_int32_t dmatiming[] = { 0x80077771, 0x80012121, 0x80002020 };
+	u_int32_t udmatiming[] = { 0x80921250, 0x80911140, 0x80911030 };
 
-    mode = ata_limit_mode(dev, mode, ATA_UDMA2);
+	mode = min(mode, ATA_UDMA2);
 
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-
-    if (bootverbose)
-	device_printf(dev, "%s setting %s on National chip\n",
-		      (error) ? "failed" : "success", ata_mode2str(mode));
-    if (!error) {
 	if (mode >= ATA_UDMA0) {
-	    pci_write_config(gparent, 0x44 + (devno << 3),
+	    pci_write_config(parent, 0x44 + (devno << 3),
 			     udmatiming[mode & ATA_MODE_MASK], 4);
-	}
-	else if (mode >= ATA_WDMA0) {
-	    pci_write_config(gparent, 0x44 + (devno << 3),
+	    piomode = ATA_PIO4;
+	} else if (mode >= ATA_WDMA0) {
+	    pci_write_config(parent, 0x44 + (devno << 3),
 			     dmatiming[mode & ATA_MODE_MASK], 4);
-	}
-	else {
-	    pci_write_config(gparent, 0x44 + (devno << 3),
-			     pci_read_config(gparent, 0x44 + (devno << 3), 4) |
+	    piomode = mode;
+	} else {
+	    pci_write_config(parent, 0x44 + (devno << 3),
+			     pci_read_config(parent, 0x44 + (devno << 3), 4) |
 			     0x80000000, 4);
+	    piomode = mode;
 	}
-	pci_write_config(gparent, 0x40 + (devno << 3),
-			 piotiming[ata_mode2idx(mode)], 4);
-	atadev->mode = mode;
-    }
+	pci_write_config(parent, 0x40 + (devno << 3),
+			 piotiming[ata_mode2idx(piomode)], 4);
+	return (mode);
 }
 
 ATA_DECLARE_DRIVER(ata_national);
diff --git a/sys/dev/ata/chipsets/ata-netcell.c b/sys/dev/ata/chipsets/ata-netcell.c
index c07df0ea2a5..f6a75451cea 100644
--- a/sys/dev/ata/chipsets/ata-netcell.c
+++ b/sys/dev/ata/chipsets/ata-netcell.c
@@ -54,8 +54,6 @@ __FBSDID("$FreeBSD$");
 /* local prototypes */
 static int ata_netcell_chipinit(device_t dev);
 static int ata_netcell_ch_attach(device_t dev);
-static void ata_netcell_setmode(device_t dev, int mode);
-
 
 /*
  * NetCell chipset support functions
@@ -82,8 +80,7 @@ ata_netcell_chipinit(device_t dev)
         return ENXIO;
 
     ctlr->ch_attach = ata_netcell_ch_attach;
-    ctlr->ch_detach = ata_pci_ch_detach;
-    ctlr->setmode = ata_netcell_setmode;
+    ctlr->setmode = ata_generic_setmode;
     return 0;
 }
 
@@ -98,19 +95,7 @@ ata_netcell_ch_attach(device_t dev)
  
     /* the NetCell only supports 16 bit PIO transfers */
     ch->flags |= ATA_USE_16BIT;
-
     return 0;
 }
 
-static void
-ata_netcell_setmode(device_t dev, int mode)
-{
-    struct ata_device *atadev = device_get_softc(dev);
-
-    mode = ata_limit_mode(dev, mode, ATA_UDMA2);
-    mode = ata_check_80pin(dev, mode);
-    if (!ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
-        atadev->mode = mode;
-}
-
 ATA_DECLARE_DRIVER(ata_netcell);
diff --git a/sys/dev/ata/chipsets/ata-nvidia.c b/sys/dev/ata/chipsets/ata-nvidia.c
index cdff8259876..79064f883a3 100644
--- a/sys/dev/ata/chipsets/ata-nvidia.c
+++ b/sys/dev/ata/chipsets/ata-nvidia.c
@@ -56,7 +56,7 @@ static int ata_nvidia_chipinit(device_t dev);
 static int ata_nvidia_ch_attach(device_t dev);
 static int ata_nvidia_status(device_t dev);
 static void ata_nvidia_reset(device_t dev);
-static void ata_nvidia_setmode(device_t dev, int mode);
+static int ata_nvidia_setmode(device_t dev, int target, int mode);
 
 /* misc defines */
 #define NV4             0x01
@@ -231,6 +231,7 @@ ata_nvidia_chipinit(device_t dev)
 	    }
 	}
 	ctlr->setmode = ata_sata_setmode;
+	ctlr->getrev = ata_sata_getrev;
     }
     else {
 	/* disable prefetch, postwrite */
@@ -259,7 +260,7 @@ ata_nvidia_ch_attach(device_t dev)
 
     ch->hw.status = ata_nvidia_status;
     ch->flags |= ATA_NO_SLAVE;
-
+    ch->flags |= ATA_SATA;
     return 0;
 }
 
@@ -299,36 +300,29 @@ ata_nvidia_reset(device_t dev)
 	ata_generic_reset(dev);
 }
 
-static void
-ata_nvidia_setmode(device_t dev, int mode)
+static int
+ata_nvidia_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    u_int8_t timings[] = { 0xa8, 0x65, 0x42, 0x22, 0x20, 0x42, 0x22, 0x20,
-			   0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
-    int modes[7] = { 0xc2, 0xc1, 0xc0, 0xc4, 0xc5, 0xc6, 0xc7 };
-    int devno = (ch->unit << 1) + atadev->unit;
-    int reg = 0x63 - devno;
-    int error;
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
+	int piomode;
+	u_int8_t timings[] = { 0xa8, 0x65, 0x42, 0x22, 0x20, 0xa8, 0x22, 0x20 };
+        int modes[7] = { 0xc2, 0xc1, 0xc0, 0xc4, 0xc5, 0xc6, 0xc7 };
+	int reg = 0x63 - devno;
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
-    mode = ata_check_80pin(dev, mode);
+	mode = min(mode, ctlr->chip->max_dma);
 
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		      (error) ? "FAILURE " : "", ata_mode2str(mode),
-		      ctlr->chip->text);
-    if (!error) {
-	pci_write_config(gparent, reg - 0x08, timings[ata_mode2idx(mode)], 1);
-	if (mode >= ATA_UDMA0)
-	    pci_write_config(gparent, reg, modes[mode & ATA_MODE_MASK], 1);
-	else
-	    pci_write_config(gparent, reg, 0x8b, 1);
-	atadev->mode = mode;
-    }
+	if (mode >= ATA_UDMA0) {
+	    pci_write_config(parent, reg, modes[mode & ATA_MODE_MASK], 1);
+	    piomode = ATA_PIO4;
+	} else {
+	    pci_write_config(parent, reg, 0x8b, 1);
+	    piomode = mode;
+	}
+	pci_write_config(parent, reg - 0x08, timings[ata_mode2idx(piomode)], 1);
+	return (mode);
 }
 
 ATA_DECLARE_DRIVER(ata_nvidia);
diff --git a/sys/dev/ata/chipsets/ata-promise.c b/sys/dev/ata/chipsets/ata-promise.c
index ca3243adb74..3dad5d01f4f 100644
--- a/sys/dev/ata/chipsets/ata-promise.c
+++ b/sys/dev/ata/chipsets/ata-promise.c
@@ -58,7 +58,7 @@ static int ata_promise_status(device_t dev);
 static int ata_promise_dmastart(struct ata_request *request);
 static int ata_promise_dmastop(struct ata_request *request);
 static void ata_promise_dmareset(device_t dev);
-static void ata_promise_setmode(device_t dev, int mode);
+static int ata_promise_setmode(device_t dev, int target, int mode);
 static int ata_promise_tx2_ch_attach(device_t dev);
 static int ata_promise_tx2_status(device_t dev);
 static int ata_promise_mio_ch_attach(device_t dev);
@@ -72,7 +72,7 @@ static int ata_promise_mio_pm_write(device_t dev, int port, int reg, u_int32_t r
 static u_int32_t ata_promise_mio_softreset(device_t dev, int port);
 static void ata_promise_mio_dmainit(device_t dev);
 static void ata_promise_mio_setprd(void *xsc, bus_dma_segment_t *segs, int nsegs, int error);
-static void ata_promise_mio_setmode(device_t dev, int mode);
+static int ata_promise_mio_setmode(device_t dev, int target, int mode);
 static void ata_promise_sx4_intr(void *data);
 static int ata_promise_sx4_command(struct ata_request *request);
 static int ata_promise_apkt(u_int8_t *bytep, struct ata_request *request);
@@ -369,6 +369,8 @@ ata_promise_ch_attach(device_t dev)
     }
 
     ch->hw.status = ata_promise_status;
+    ch->flags |= ATA_NO_ATAPI_DMA;
+    ch->flags |= ATA_CHECKS_CABLE;
     return 0;
 }
 
@@ -438,15 +440,13 @@ ata_promise_dmareset(device_t dev)
     ch->flags &= ~ATA_DMA_ACTIVE;
 }
 
-static void
-ata_promise_setmode(device_t dev, int mode)
+static int
+ata_promise_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    int error;
+    device_t parent = device_get_parent(dev);
+    struct ata_pci_controller *ctlr = device_get_softc(parent);
+    struct ata_channel *ch = device_get_softc(dev);
+    int devno = (ch->unit << 1) + target;
     u_int32_t timings[][2] = {
     /*    PR_OLD      PR_NEW               mode */
 	{ 0x004ff329, 0x004fff2f },     /* PIO 0 */
@@ -465,18 +465,16 @@ ata_promise_setmode(device_t dev, int mode)
 	{ 0,          0x004127f3 }      /* UDMA 5 */
     };
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
+    mode = min(mode, ctlr->chip->max_dma);
 
     switch (ctlr->chip->cfg1) {
     case PR_OLD:
     case PR_NEW:
-	if (mode > ATA_UDMA2 && (pci_read_config(gparent, 0x50, 2) &
+	if (mode > ATA_UDMA2 && (pci_read_config(parent, 0x50, 2) &
 				 (ch->unit ? 1 << 11 : 1 << 10))) {
 	    ata_print_cable(dev, "controller");
 	    mode = ATA_UDMA2;
 	}
-	if (ata_atapi(dev) && mode > ATA_PIO_MAX)
-	    mode = ata_limit_mode(dev, mode, ATA_PIO_MAX);
 	break;
 
     case PR_TX:
@@ -499,19 +497,10 @@ ata_promise_setmode(device_t dev, int mode)
 	break;
     }
 
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		     (error) ? "FAILURE " : "",
-		     ata_mode2str(mode), ctlr->chip->text);
-    if (!error) {
 	if (ctlr->chip->cfg1 < PR_TX)
-	    pci_write_config(gparent, 0x60 + (devno << 2),
+	    pci_write_config(parent, 0x60 + (devno << 2),
 			     timings[ata_mode2idx(mode)][ctlr->chip->cfg1], 4);
-	atadev->mode = mode;
-    }
-    return;
+	return (mode);
 }
 
 static int
@@ -523,6 +512,7 @@ ata_promise_tx2_ch_attach(device_t dev)
 	return ENXIO;
 
     ch->hw.status = ata_promise_tx2_status;
+    ch->flags |= ATA_CHECKS_CABLE;
     return 0;
 }
 
@@ -565,8 +555,10 @@ ata_promise_mio_ch_attach(device_t dev)
 	ch->r_io[ATA_SCONTROL].res = ctlr->r_res2;
 	ch->r_io[ATA_SCONTROL].offset = 0x408 + (ch->unit << 8);
 	ch->flags |= ATA_NO_SLAVE;
+	ch->flags |= ATA_SATA;
     }
     ch->flags |= ATA_USE_16BIT;
+    ch->flags |= ATA_CHECKS_CABLE;
 
     ata_generic_hw(dev);
     if (ctlr->chip->cfg2 & PR_SX4X) {
@@ -965,6 +957,7 @@ ata_promise_mio_dmainit(device_t dev)
     ata_dmainit(dev);
     /* note start and stop are not used here */
     ch->dma.setprd = ata_promise_mio_setprd;
+    ch->dma.max_iosize = 65536;
 }
 
 
@@ -997,20 +990,20 @@ ata_promise_mio_setprd(void *xsc, bus_dma_segment_t *segs, int nsegs, int error)
     args->nsegs = nsegs;
 }
 
-static void
-ata_promise_mio_setmode(device_t dev, int mode)
+static int
+ata_promise_mio_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
+        struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
+        struct ata_channel *ch = device_get_softc(dev);
 
-    if ( (ctlr->chip->cfg2 == PR_SATA) ||
-	((ctlr->chip->cfg2 == PR_CMBO) && (ch->unit < 2)) ||
-	(ctlr->chip->cfg2 == PR_SATA2) ||
-	((ctlr->chip->cfg2 == PR_CMBO2) && (ch->unit < 2)))
-	ata_sata_setmode(dev, mode);
-    else
-	ata_promise_setmode(dev, mode);
+        if ( (ctlr->chip->cfg2 == PR_SATA) ||
+    	    ((ctlr->chip->cfg2 == PR_CMBO) && (ch->unit < 2)) ||
+	    (ctlr->chip->cfg2 == PR_SATA2) ||
+	    ((ctlr->chip->cfg2 == PR_CMBO2) && (ch->unit < 2)))
+		mode = ata_sata_setmode(dev, target, mode);
+	else
+		mode = ata_promise_setmode(dev, target, mode);
+	return (mode);
 }
 
 static void
diff --git a/sys/dev/ata/chipsets/ata-serverworks.c b/sys/dev/ata/chipsets/ata-serverworks.c
index 886282ebb37..033d985157d 100644
--- a/sys/dev/ata/chipsets/ata-serverworks.c
+++ b/sys/dev/ata/chipsets/ata-serverworks.c
@@ -60,7 +60,7 @@ static int ata_serverworks_ch_attach(device_t dev);
 static int ata_serverworks_ch_detach(device_t dev);
 static void ata_serverworks_tf_read(struct ata_request *request);
 static void ata_serverworks_tf_write(struct ata_request *request);
-static void ata_serverworks_setmode(device_t dev, int mode);
+static int ata_serverworks_setmode(device_t dev, int target, int mode);
 #ifdef __powerpc__
 static int ata_serverworks_status(device_t dev);
 #endif
@@ -80,7 +80,7 @@ ata_serverworks_probe(device_t dev)
 {
     struct ata_pci_controller *ctlr = device_get_softc(dev);
     static struct ata_chip_id ids[] =
-    {{ ATA_ROSB4,     0x00, SWKS_33,  0, ATA_UDMA2, "ROSB4" },
+    {{ ATA_ROSB4,     0x00, SWKS_33,  0, ATA_WDMA2, "ROSB4" },
      { ATA_CSB5,      0x92, SWKS_100, 0, ATA_UDMA5, "CSB5" },
      { ATA_CSB5,      0x00, SWKS_66,  0, ATA_UDMA4, "CSB5" },
      { ATA_CSB6,      0x00, SWKS_100, 0, ATA_UDMA5, "CSB6" },
@@ -147,6 +147,7 @@ ata_serverworks_chipinit(device_t dev)
 	ctlr->ch_attach = ata_serverworks_ch_attach;
 	ctlr->ch_detach = ata_serverworks_ch_detach;
 	ctlr->setmode = ata_sata_setmode;
+	ctlr->getrev = ata_sata_getrev;
 	return 0;
     }
     else if (ctlr->chip->cfg1 == SWKS_33) {
@@ -213,6 +214,7 @@ ata_serverworks_ch_attach(device_t dev)
     ch->r_io[ATA_SCONTROL].offset = ch_offset + 0x48;
 
     ch->flags |= ATA_NO_SLAVE;
+    ch->flags |= ATA_SATA;
     ata_pci_hw(dev);
     ch->hw.tf_read = ata_serverworks_tf_read;
     ch->hw.tf_write = ata_serverworks_tf_write;
@@ -287,7 +289,9 @@ static void
 ata_serverworks_tf_write(struct ata_request *request)
 {
     struct ata_channel *ch = device_get_softc(request->parent);
+#ifndef ATA_CAM
     struct ata_device *atadev = device_get_softc(request->dev);
+#endif
 
     if (request->flags & ATA_R_48BIT) {
 	ATA_IDX_OUTW(ch, ATA_FEATURE, request->u.ata.feature);
@@ -303,6 +307,7 @@ ata_serverworks_tf_write(struct ata_request *request)
     else {
 	ATA_IDX_OUTW(ch, ATA_FEATURE, request->u.ata.feature);
 	ATA_IDX_OUTW(ch, ATA_COUNT, request->u.ata.count);
+#ifndef ATA_CAM
 	if (atadev->flags & ATA_D_USE_CHS) {
 	    int heads, sectors;
     
@@ -324,74 +329,76 @@ ata_serverworks_tf_write(struct ata_request *request)
 			   sectors) & 0xf));
 	}
 	else {
+#endif
 	    ATA_IDX_OUTW(ch, ATA_SECTOR, request->u.ata.lba);
 	    ATA_IDX_OUTW(ch, ATA_CYL_LSB, request->u.ata.lba >> 8);
 	    ATA_IDX_OUTW(ch, ATA_CYL_MSB, request->u.ata.lba >> 16);
 	    ATA_IDX_OUTW(ch, ATA_DRIVE,
 			 ATA_D_IBM | ATA_D_LBA | ATA_DEV(request->unit) |
 			 ((request->u.ata.lba >> 24) & 0x0f));
+#ifndef ATA_CAM
 	}
+#endif
     }
 }
 
-static void
-ata_serverworks_setmode(device_t dev, int mode)
+static int
+ata_serverworks_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    int offset = (devno ^ 0x01) << 3;
-    int error;
-    u_int8_t piotimings[] = { 0x5d, 0x47, 0x34, 0x22, 0x20, 0x34, 0x22, 0x20,
-			      0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
-    u_int8_t dmatimings[] = { 0x77, 0x21, 0x20 };
+	device_t parent = device_get_parent(dev);
+        struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+        int devno = (ch->unit << 1) + target;
+        int offset = (devno ^ 0x01) << 3;
+	int piomode;
+	u_int8_t piotimings[] = { 0x5d, 0x47, 0x34, 0x22, 0x20 };
+	u_int8_t dmatimings[] = { 0x77, 0x21, 0x20 };
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
-
-    mode = ata_check_80pin(dev, mode);
-
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		      (error) ? "FAILURE " : "",
-		      ata_mode2str(mode), ctlr->chip->text);
-    if (!error) {
+	mode = min(mode, ctlr->chip->max_dma);
 	if (mode >= ATA_UDMA0) {
-	    pci_write_config(gparent, 0x56, 
-			     (pci_read_config(gparent, 0x56, 2) &
+	    /* Set UDMA mode, enable UDMA, set WDMA2/PIO4 */
+	    pci_write_config(parent, 0x56, 
+			     (pci_read_config(parent, 0x56, 2) &
 			      ~(0xf << (devno << 2))) |
 			     ((mode & ATA_MODE_MASK) << (devno << 2)), 2);
-	    pci_write_config(gparent, 0x54,
-			     pci_read_config(gparent, 0x54, 1) |
+	    pci_write_config(parent, 0x54,
+			     pci_read_config(parent, 0x54, 1) |
 			     (0x01 << devno), 1);
-	    pci_write_config(gparent, 0x44, 
-			     (pci_read_config(gparent, 0x44, 4) &
+	    pci_write_config(parent, 0x44, 
+			     (pci_read_config(parent, 0x44, 4) &
 			      ~(0xff << offset)) |
 			     (dmatimings[2] << offset), 4);
-	}
-	else if (mode >= ATA_WDMA0) {
-	    pci_write_config(gparent, 0x54,
-			     pci_read_config(gparent, 0x54, 1) &
+	    piomode = ATA_PIO4;
+	} else if (mode >= ATA_WDMA0) {
+	    /* Disable UDMA, set WDMA mode and timings, calculate PIO. */
+	    pci_write_config(parent, 0x54,
+			     pci_read_config(parent, 0x54, 1) &
 			      ~(0x01 << devno), 1);
-	    pci_write_config(gparent, 0x44, 
-			     (pci_read_config(gparent, 0x44, 4) &
+	    pci_write_config(parent, 0x44, 
+			     (pci_read_config(parent, 0x44, 4) &
 			      ~(0xff << offset)) |
 			     (dmatimings[mode & ATA_MODE_MASK] << offset), 4);
-	}
-	else
-	    pci_write_config(gparent, 0x54,
-			     pci_read_config(gparent, 0x54, 1) &
+	    piomode = (mode == ATA_WDMA0) ? ATA_PIO0 :
+		(mode == ATA_WDMA1) ? ATA_PIO3 : ATA_PIO4;
+	} else {
+	    /* Disable UDMA, set requested PIO. */
+	    pci_write_config(parent, 0x54,
+			     pci_read_config(parent, 0x54, 1) &
 			     ~(0x01 << devno), 1);
-
-	pci_write_config(gparent, 0x40, 
-			 (pci_read_config(gparent, 0x40, 4) &
+	    piomode = mode;
+	}
+	/* Set PIO mode and timings, calculated above. */
+	if (ctlr->chip->cfg1 != SWKS_33) {
+		pci_write_config(parent, 0x4a,
+			 (pci_read_config(parent, 0x4a, 2) &
+			  ~(0xf << (devno << 2))) |
+			 ((piomode - ATA_PIO0) << (devno<<2)),2);
+	}
+	pci_write_config(parent, 0x40, 
+			 (pci_read_config(parent, 0x40, 4) &
 			  ~(0xff << offset)) |
-			 (piotimings[ata_mode2idx(mode)] << offset), 4);
-	atadev->mode = mode;
-    }
+			 (piotimings[ata_mode2idx(piomode)] << offset), 4);
+	return (mode);
 }
 
 ATA_DECLARE_DRIVER(ata_serverworks);
diff --git a/sys/dev/ata/chipsets/ata-siliconimage.c b/sys/dev/ata/chipsets/ata-siliconimage.c
index 34bd92f57c5..066e9280e5d 100644
--- a/sys/dev/ata/chipsets/ata-siliconimage.c
+++ b/sys/dev/ata/chipsets/ata-siliconimage.c
@@ -54,12 +54,12 @@ __FBSDID("$FreeBSD$");
 /* local prototypes */
 static int ata_cmd_ch_attach(device_t dev);
 static int ata_cmd_status(device_t dev);
-static void ata_cmd_setmode(device_t dev, int mode);
+static int ata_cmd_setmode(device_t dev, int target, int mode);
 static int ata_sii_ch_attach(device_t dev);
 static int ata_sii_ch_detach(device_t dev);
 static int ata_sii_status(device_t dev);
 static void ata_sii_reset(device_t dev);
-static void ata_sii_setmode(device_t dev, int mode);
+static int ata_sii_setmode(device_t dev, int target, int mode);
 static int ata_siiprb_ch_attach(device_t dev);
 static int ata_siiprb_ch_detach(device_t dev);
 static int ata_siiprb_status(device_t dev);
@@ -145,6 +145,7 @@ ata_sii_chipinit(device_t dev)
 	ctlr->ch_detach = ata_siiprb_ch_detach;
 	ctlr->reset = ata_siiprb_reset;
 	ctlr->setmode = ata_sata_setmode;
+	ctlr->getrev = ata_sata_getrev;
 	ctlr->channels = (ctlr->chip->cfg2 == SII_4CH) ? 4 : 2;
 
 	/* reset controller */
@@ -193,6 +194,7 @@ ata_sii_chipinit(device_t dev)
 	if (ctlr->chip->max_dma >= ATA_SA150) {
 	    ctlr->reset = ata_sii_reset;
 	    ctlr->setmode = ata_sata_setmode;
+	    ctlr->getrev = ata_sata_getrev;
 	}
 	else
 	    ctlr->setmode = ata_sii_setmode;
@@ -246,59 +248,37 @@ ata_cmd_status(device_t dev)
     return 0;
 }
 
-static void
-ata_cmd_setmode(device_t dev, int mode)
+static int
+ata_cmd_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    int error;
-
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
-
-    mode = ata_check_80pin(dev, mode);
-
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		      (error) ? "FAILURE " : "",
-		      ata_mode2str(mode), ctlr->chip->text);
-    if (!error) {
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
 	int treg = 0x54 + ((devno < 3) ? (devno << 1) : 7);
 	int ureg = ch->unit ? 0x7b : 0x73;
-
-	if (mode >= ATA_UDMA0) {        
-	    int udmatimings[][2] = { { 0x31,  0xc2 }, { 0x21,  0x82 },
+	int piomode;
+	uint8_t piotimings[] = { 0xa9, 0x57, 0x44, 0x32, 0x3f, 0x87, 0x32, 0x3f };
+	uint8_t udmatimings[][2] = { { 0x31,  0xc2 }, { 0x21,  0x82 },
 				     { 0x11,  0x42 }, { 0x25,  0x8a },
 				     { 0x15,  0x4a }, { 0x05,  0x0a } };
 
-	    u_int8_t umode = pci_read_config(gparent, ureg, 1);
+	mode = min(mode, ctlr->chip->max_dma);
+	if (mode >= ATA_UDMA0) {        
+		u_int8_t umode = pci_read_config(parent, ureg, 1);
 
-	    umode &= ~(atadev->unit == ATA_MASTER ? 0x35 : 0xca);
-	    umode |= udmatimings[mode & ATA_MODE_MASK][atadev->unit];
-	    pci_write_config(gparent, ureg, umode, 1);
+	        umode &= ~(target == 0 ? 0x35 : 0xca);
+		umode |= udmatimings[mode & ATA_MODE_MASK][target];
+		pci_write_config(parent, ureg, umode, 1);
+		piomode = ATA_PIO4;
+	} else { 
+		pci_write_config(parent, ureg, 
+			     pci_read_config(parent, ureg, 1) &
+			     ~(target == 0 ? 0x35 : 0xca), 1);
+		piomode = mode;
 	}
-	else if (mode >= ATA_WDMA0) { 
-	    int dmatimings[] = { 0x87, 0x32, 0x3f };
-
-	    pci_write_config(gparent, treg, dmatimings[mode & ATA_MODE_MASK],1);
-	    pci_write_config(gparent, ureg, 
-			     pci_read_config(gparent, ureg, 1) &
-			     ~(atadev->unit == ATA_MASTER ? 0x35 : 0xca), 1);
-	}
-	else {
-	   int piotimings[] = { 0xa9, 0x57, 0x44, 0x32, 0x3f };
-	    pci_write_config(gparent, treg,
-			     piotimings[(mode & ATA_MODE_MASK) - ATA_PIO0], 1);
-	    pci_write_config(gparent, ureg, 
-			     pci_read_config(gparent, ureg, 1) &
-			     ~(atadev->unit == ATA_MASTER ? 0x35 : 0xca), 1);
-	}
-	atadev->mode = mode;
-    }
+	pci_write_config(parent, treg, piotimings[ata_mode2idx(piomode)], 1);
+	return (mode);
 }
 
 static int
@@ -335,12 +315,12 @@ ata_sii_ch_attach(device_t dev)
 	ch->r_io[ATA_SCONTROL].res = ctlr->r_res2;
 	ch->r_io[ATA_SCONTROL].offset = 0x100 + (unit01 << 7) + (unit10 << 8);
 	ch->flags |= ATA_NO_SLAVE;
+	ch->flags |= ATA_SATA;
 
 	/* enable PHY state change interrupt */
 	ATA_OUTL(ctlr->r_res2, 0x148 + (unit01 << 7) + (unit10 << 8),(1 << 16));
     }
 
-    ch->dma.max_iosize = (ATA_DMA_ENTRIES - 1) * PAGE_SIZE;
     if (ctlr->chip->cfg2 & SII_BUG) {
 	/* work around errata in early chips */
 	ch->dma.boundary = 8192;
@@ -349,6 +329,8 @@ ata_sii_ch_attach(device_t dev)
 
     ata_pci_hw(dev);
     ch->hw.status = ata_sii_status;
+    if (ctlr->chip->cfg2 & SII_SETCLK)
+	ch->flags |= ATA_CHECKS_CABLE;
     return 0;
 }
 
@@ -386,69 +368,53 @@ ata_sii_reset(device_t dev)
 	ata_generic_reset(dev);
 }
 
-static void
-ata_sii_setmode(device_t dev, int mode)
+static int
+ata_sii_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int rego = (ch->unit << 4) + (atadev->unit << 1);
-    int mreg = ch->unit ? 0x84 : 0x80;
-    int mask = 0x03 << (atadev->unit << 2);
-    int mval = pci_read_config(gparent, mreg, 1) & ~mask;
-    int error;
-
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
-
-    if (ctlr->chip->cfg2 & SII_SETCLK) {
-	if (mode > ATA_UDMA2 && (pci_read_config(gparent, 0x79, 1) &
-				 (ch->unit ? 0x02 : 0x01))) {
-	    ata_print_cable(dev, "controller");
-	    mode = ATA_UDMA2;
-	}
-    }
-    else
-	mode = ata_check_80pin(dev, mode);
-
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		      (error) ? "FAILURE " : "",
-		      ata_mode2str(mode), ctlr->chip->text);
-    if (error)
-	return;
-
-    if (mode >= ATA_UDMA0) {
-	u_int8_t udmatimings[] = { 0xf, 0xb, 0x7, 0x5, 0x3, 0x2, 0x1 };
-	u_int8_t ureg = 0xac + rego;
-
-	pci_write_config(gparent, mreg,
-			 mval | (0x03 << (atadev->unit << 2)), 1);
-	pci_write_config(gparent, ureg, 
-			 (pci_read_config(gparent, ureg, 1) & ~0x3f) |
-			 udmatimings[mode & ATA_MODE_MASK], 1);
-
-    }
-    else if (mode >= ATA_WDMA0) {
-	u_int8_t dreg = 0xa8 + rego;
-	u_int16_t dmatimings[] = { 0x2208, 0x10c2, 0x10c1 };
-
-	pci_write_config(gparent, mreg,
-			 mval | (0x02 << (atadev->unit << 2)), 1);
-	pci_write_config(gparent, dreg, dmatimings[mode & ATA_MODE_MASK], 2);
-
-    }
-    else {
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+	int rego = (ch->unit << 4) + (target << 1);
+	int mreg = ch->unit ? 0x84 : 0x80;
+	int mask = 0x03 << (target << 2);
+	int mval = pci_read_config(parent, mreg, 1) & ~mask;
+	int piomode;
 	u_int8_t preg = 0xa4 + rego;
+	u_int8_t dreg = 0xa8 + rego;
+	u_int8_t ureg = 0xac + rego;
 	u_int16_t piotimings[] = { 0x328a, 0x2283, 0x1104, 0x10c3, 0x10c1 };
+	u_int16_t dmatimings[] = { 0x2208, 0x10c2, 0x10c1 };
+	u_int8_t udmatimings[] = { 0xf, 0xb, 0x7, 0x5, 0x3, 0x2, 0x1 };
 
-	pci_write_config(gparent, mreg,
-			 mval | (0x01 << (atadev->unit << 2)), 1);
-	pci_write_config(gparent, preg, piotimings[mode & ATA_MODE_MASK], 2);
-    }
-    atadev->mode = mode;
+	mode = min(mode, ctlr->chip->max_dma);
+
+	if (ctlr->chip->cfg2 & SII_SETCLK) {
+	    if (mode > ATA_UDMA2 && (pci_read_config(parent, 0x79, 1) &
+				 (ch->unit ? 0x02 : 0x01))) {
+		ata_print_cable(dev, "controller");
+		mode = ATA_UDMA2;
+	    }
+	}
+	if (mode >= ATA_UDMA0) {
+		pci_write_config(parent, mreg,
+			 mval | (0x03 << (target << 2)), 1);
+		pci_write_config(parent, ureg, 
+			 (pci_read_config(parent, ureg, 1) & ~0x3f) |
+			 udmatimings[mode & ATA_MODE_MASK], 1);
+		piomode = ATA_PIO4;
+	} else if (mode >= ATA_WDMA0) {
+		pci_write_config(parent, mreg,
+			 mval | (0x02 << (target << 2)), 1);
+		pci_write_config(parent, dreg, dmatimings[mode & ATA_MODE_MASK], 2);
+		piomode = (mode == ATA_WDMA0) ? ATA_PIO0 :
+		    (mode == ATA_WDMA1) ? ATA_PIO3 : ATA_PIO4;
+	} else {
+		pci_write_config(parent, mreg,
+			 mval | (0x01 << (target << 2)), 1);
+		piomode = mode;
+	}
+	pci_write_config(parent, preg, piotimings[ata_mode2idx(piomode)], 2);
+	return (mode);
 }
 
 
diff --git a/sys/dev/ata/chipsets/ata-sis.c b/sys/dev/ata/chipsets/ata-sis.c
index 5c74e56edf2..80225053c4d 100644
--- a/sys/dev/ata/chipsets/ata-sis.c
+++ b/sys/dev/ata/chipsets/ata-sis.c
@@ -55,7 +55,7 @@ __FBSDID("$FreeBSD$");
 static int ata_sis_chipinit(device_t dev);
 static int ata_sis_ch_attach(device_t dev);
 static void ata_sis_reset(device_t dev);
-static void ata_sis_setmode(device_t dev, int mode);
+static int ata_sis_setmode(device_t dev, int target, int mode);
 
 /* misc defines */
 #define SIS_33		1
@@ -191,6 +191,7 @@ ata_sis_chipinit(device_t dev)
 	    ctlr->reset = ata_sis_reset;
 	}
 	ctlr->setmode = ata_sata_setmode;
+	ctlr->getrev = ata_sata_getrev;
 	return 0;
     default:
 	return ENXIO;
@@ -217,6 +218,7 @@ ata_sis_ch_attach(device_t dev)
     ch->r_io[ATA_SCONTROL].res = ctlr->r_res2;
     ch->r_io[ATA_SCONTROL].offset = 0x08 + offset;
     ch->flags |= ATA_NO_SLAVE;
+    ch->flags |= ATA_SATA;
 
     /* XXX SOS PHY hotplug handling missing in SiS chip ?? */
     /* XXX SOS unknown how to enable PHY state change interrupt */
@@ -230,40 +232,30 @@ ata_sis_reset(device_t dev)
 	ata_generic_reset(dev);
 }
 
-static void
-ata_sis_setmode(device_t dev, int mode)
+static int
+ata_sis_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int devno = (ch->unit << 1) + atadev->unit;
-    int error;
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
+	mode = min(mode, ctlr->chip->max_dma);
 
-    if (ctlr->chip->cfg1 == SIS_133NEW) {
-	if (mode > ATA_UDMA2 &&
-	    pci_read_config(gparent, ch->unit ? 0x52 : 0x50,2) & 0x8000) {
-	    ata_print_cable(dev, "controller");
-	    mode = ATA_UDMA2;
-	}
-    }
-    else {
-	if (mode > ATA_UDMA2 &&
-	    pci_read_config(gparent, 0x48, 1)&(ch->unit ? 0x20 : 0x10)) {
-	    ata_print_cable(dev, "controller");
-	    mode = ATA_UDMA2;
-	}
-    }
+	if (ctlr->chip->cfg1 == SIS_133NEW) {
+		if (mode > ATA_UDMA2 &&
+		        pci_read_config(parent, ch->unit ? 0x52 : 0x50,2) & 0x8000) {
+		        ata_print_cable(dev, "controller");
+		        mode = ATA_UDMA2;
+		}
+	} else {
+		if (mode > ATA_UDMA2 &&
+		    pci_read_config(parent, 0x48, 1)&(ch->unit ? 0x20 : 0x10)) {
+		    ata_print_cable(dev, "controller");
+		    mode = ATA_UDMA2;
+		}
+        }
 
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		      (error) ? "FAILURE " : "",
-		      ata_mode2str(mode), ctlr->chip->text);
-    if (!error) {
 	switch (ctlr->chip->cfg1) {
 	case SIS_133NEW: {
 	    u_int32_t timings[] = 
@@ -272,8 +264,8 @@ ata_sis_setmode(device_t dev, int mode)
 		  0x0509347c, 0x0509325c, 0x0509323c, 0x0509322c, 0x0509321c};
 	    u_int32_t reg;
 
-	    reg = (pci_read_config(gparent, 0x57, 1)&0x40?0x70:0x40)+(devno<<2);
-	    pci_write_config(gparent, reg, timings[ata_mode2idx(mode)], 4);
+	    reg = (pci_read_config(parent, 0x57, 1)&0x40?0x70:0x40)+(devno<<2);
+	    pci_write_config(parent, reg, timings[ata_mode2idx(mode)], 4);
 	    break;
 	    }
 	case SIS_133OLD: {
@@ -283,7 +275,7 @@ ata_sis_setmode(device_t dev, int mode)
 		  
 	    u_int16_t reg = 0x40 + (devno << 1);
 
-	    pci_write_config(gparent, reg, timings[ata_mode2idx(mode)], 2);
+	    pci_write_config(parent, reg, timings[ata_mode2idx(mode)], 2);
 	    break;
 	    }
 	case SIS_100NEW: {
@@ -292,7 +284,7 @@ ata_sis_setmode(device_t dev, int mode)
 		  0x0031, 0x8b31, 0x8731, 0x8531, 0x8431, 0x8231, 0x8131 };
 	    u_int16_t reg = 0x40 + (devno << 1);
 
-	    pci_write_config(gparent, reg, timings[ata_mode2idx(mode)], 2);
+	    pci_write_config(parent, reg, timings[ata_mode2idx(mode)], 2);
 	    break;
 	    }
 	case SIS_100OLD:
@@ -303,12 +295,11 @@ ata_sis_setmode(device_t dev, int mode)
 		  0x0301, 0xf301, 0xd301, 0xb301, 0xa301, 0x9301, 0x8301 };
 	    u_int16_t reg = 0x40 + (devno << 1);
 
-	    pci_write_config(gparent, reg, timings[ata_mode2idx(mode)], 2);
+	    pci_write_config(parent, reg, timings[ata_mode2idx(mode)], 2);
 	    break;
 	    }
 	}
-	atadev->mode = mode;
-    }
+	return (mode);
 }
 
 ATA_DECLARE_DRIVER(ata_sis);
diff --git a/sys/dev/ata/chipsets/ata-via.c b/sys/dev/ata/chipsets/ata-via.c
index 47ebd0a15d8..ec22020a0e7 100644
--- a/sys/dev/ata/chipsets/ata-via.c
+++ b/sys/dev/ata/chipsets/ata-via.c
@@ -56,9 +56,12 @@ static int ata_via_chipinit(device_t dev);
 static int ata_via_ch_attach(device_t dev);
 static int ata_via_ch_detach(device_t dev);
 static void ata_via_reset(device_t dev);
-static void ata_via_old_setmode(device_t dev, int mode);
+static int ata_via_old_setmode(device_t dev, int target, int mode);
 static void ata_via_southbridge_fixup(device_t dev);
-static void ata_via_new_setmode(device_t dev, int mode);
+static int ata_via_new_setmode(device_t dev, int target, int mode);
+static int ata_via_sata_ch_attach(device_t dev);
+static int ata_via_sata_getrev(device_t dev, int target);
+static int ata_via_sata_setmode(device_t dev, int target, int mode);
 
 /* misc defines */
 #define VIA33           0
@@ -70,6 +73,7 @@ static void ata_via_new_setmode(device_t dev, int mode);
 #define VIABUG          0x02
 #define VIABAR          0x04
 #define VIAAHCI         0x08
+#define VIASATA         0x10
 
 
 /*
@@ -98,6 +102,9 @@ ata_via_probe(device_t dev)
      { ATA_VIA8237_5372, 0x00, VIA133, 0x00, ATA_UDMA6, "8237" },
      { ATA_VIA8237_7372, 0x00, VIA133, 0x00, ATA_UDMA6, "8237" },
      { ATA_VIA8251,   0x00, VIA133, 0x00,    ATA_UDMA6, "8251" },
+     { ATA_VIACX700,  0x00, VIA133, VIASATA, ATA_SA150, "CX700" },
+     { ATA_VIAVX800,  0x00, VIA133, VIASATA, ATA_SA150, "VX800" },
+     { ATA_VIAVX855,  0x00, VIA133, 0x00,    ATA_UDMA6, "VX855" },
      { 0, 0, 0, 0, 0, 0 }};
     static struct ata_chip_id new_ids[] =
     {{ ATA_VIA6410,   0x00, 0,      0x00,    ATA_UDMA6, "6410" },
@@ -113,7 +120,9 @@ ata_via_probe(device_t dev)
     if (pci_get_vendor(dev) != ATA_VIA_ID)
 	return ENXIO;
 
-    if (pci_get_devid(dev) == ATA_VIA82C571) {
+    if (pci_get_devid(dev) == ATA_VIA82C571 ||
+	pci_get_devid(dev) == ATA_VIACX700IDE ||
+	pci_get_devid(dev) == ATA_VIASATAIDE) {
 	if (!(ctlr->chip = ata_find_chip(dev, ids, -99))) 
 	    return ENXIO;
     }
@@ -134,12 +143,21 @@ ata_via_chipinit(device_t dev)
 
     if (ata_setup_interrupt(dev, ata_generic_intr))
 	return ENXIO;
-    
-    if (ctlr->chip->max_dma >= ATA_SA150) {
-	/* do we have AHCI capability ? */
-	if ((ctlr->chip->cfg2 == VIAAHCI) && ata_ahci_chipinit(dev) != ENXIO)
-	    return 0;
 
+    /* AHCI SATA */
+    if (ctlr->chip->cfg2 & VIAAHCI) {
+	if (ata_ahci_chipinit(dev) != ENXIO)
+	    return (0);
+    }
+    /* 2 SATA without SATA registers on first channel + 1 PATA on second */
+    if (ctlr->chip->cfg2 & VIASATA) {
+	ctlr->ch_attach = ata_via_sata_ch_attach;
+	ctlr->setmode = ata_via_sata_setmode;
+	ctlr->getrev = ata_via_sata_getrev;
+	return 0;
+    }
+    /* Legacy SATA/SATA+PATA with SATA registers in BAR(5). */
+    if (ctlr->chip->max_dma >= ATA_SA150) {
 	ctlr->r_type2 = SYS_RES_IOPORT;
 	ctlr->r_rid2 = PCIR_BAR(5);
 	if ((ctlr->r_res2 = bus_alloc_resource_any(dev, ctlr->r_type2,
@@ -148,13 +166,12 @@ ata_via_chipinit(device_t dev)
 	    ctlr->ch_detach = ata_via_ch_detach;
 	    ctlr->reset = ata_via_reset;
 	}
-
 	if (ctlr->chip->cfg2 & VIABAR) {
 	    ctlr->channels = 3;
 	    ctlr->setmode = ata_via_new_setmode;
-	}
-	else
+	} else
 	    ctlr->setmode = ata_sata_setmode;
+	ctlr->getrev = ata_sata_getrev;
 	return 0;
     }
 
@@ -233,6 +250,7 @@ ata_via_ch_attach(device_t dev)
     ch->r_io[ATA_SCONTROL].res = ctlr->r_res2;
     ch->r_io[ATA_SCONTROL].offset = 0x08 + (ch->unit << ctlr->chip->cfg1);
     ch->flags |= ATA_NO_SLAVE;
+    ch->flags |= ATA_SATA;
 
     /* XXX SOS PHY hotplug handling missing in VIA chip ?? */
     /* XXX SOS unknown how to enable PHY state change interrupt */
@@ -277,75 +295,63 @@ ata_via_reset(device_t dev)
 	    ata_generic_reset(dev);
 }
 
-static void
-ata_via_new_setmode(device_t dev, int mode)
+static int
+ata_via_new_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    int error;
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
 
-    if ((ctlr->chip->cfg2 & VIABAR) && (ch->unit > 1)) {
-        u_int8_t pio_timings[] = { 0xa8, 0x65, 0x65, 0x32, 0x20,
-				   0x65, 0x32, 0x20,
-				   0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
-        u_int8_t dma_timings[] = { 0xee, 0xe8, 0xe6, 0xe4, 0xe2, 0xe1, 0xe0 };
+	if ((ctlr->chip->cfg2 & VIABAR) && (ch->unit > 1)) {
+	    int piomode;
+    	    u_int8_t pio_timings[] = { 0xa8, 0x65, 0x65, 0x32, 0x20 };
+	    u_int8_t dma_timings[] = { 0xee, 0xe8, 0xe6, 0xe4, 0xe2, 0xe1, 0xe0 };
 
-	mode = ata_check_80pin(dev, ata_limit_mode(dev, mode, ATA_UDMA6));
-	error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-	if (bootverbose)
-	    device_printf(dev, "%ssetting %s on %s chip\n",
-			  (error) ? "FAILURE " : "", ata_mode2str(mode),
-			  ctlr->chip->text);
-	if (!error) {
-	    pci_write_config(gparent, 0xab, pio_timings[ata_mode2idx(mode)], 1);
-	    if (mode >= ATA_UDMA0)
-		pci_write_config(gparent, 0xb3,
+	    /* This chip can't do WDMA. */
+	    if (mode >= ATA_WDMA0 && mode < ATA_UDMA0)
+		mode = ATA_PIO4;
+	    if (mode >= ATA_UDMA0) {
+		pci_write_config(parent, 0xb3,
 				 dma_timings[mode & ATA_MODE_MASK], 1);
-	    atadev->mode = mode;
-	}
-    }
-    else
-	ata_sata_setmode(dev, mode);
+		piomode = ATA_PIO4;
+	    } else
+		piomode = mode;
+	    pci_write_config(parent, 0xab, pio_timings[ata_mode2idx(piomode)], 1);
+	} else
+		mode = ata_sata_setmode(dev, target, mode);
+	return (mode);
 }
 
-static void
-ata_via_old_setmode(device_t dev, int mode)
+static int
+ata_via_old_setmode(device_t dev, int target, int mode)
 {
-    device_t gparent = GRANDPARENT(dev);
-    struct ata_pci_controller *ctlr = device_get_softc(gparent);
-    struct ata_channel *ch = device_get_softc(device_get_parent(dev));
-    struct ata_device *atadev = device_get_softc(dev);
-    u_int8_t timings[] = { 0xa8, 0x65, 0x42, 0x22, 0x20, 0x42, 0x22, 0x20,
-			   0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 };
-    int modes[][7] = {
-	{ 0xc2, 0xc1, 0xc0, 0x00, 0x00, 0x00, 0x00 },   /* VIA ATA33 */
-	{ 0xee, 0xec, 0xea, 0xe9, 0xe8, 0x00, 0x00 },   /* VIA ATA66 */
-	{ 0xf7, 0xf6, 0xf4, 0xf2, 0xf1, 0xf0, 0x00 },   /* VIA ATA100 */
-	{ 0xf7, 0xf7, 0xf6, 0xf4, 0xf2, 0xf1, 0xf0 } }; /* VIA ATA133 */
-    int devno = (ch->unit << 1) + atadev->unit;
-    int reg = 0x53 - devno;
-    int error;
+	device_t parent = device_get_parent(dev);
+	struct ata_pci_controller *ctlr = device_get_softc(parent);
+	struct ata_channel *ch = device_get_softc(dev);
+	int devno = (ch->unit << 1) + target;
+	int reg = 0x53 - devno;
+	int piomode;
+	uint8_t timings[] = { 0xa8, 0x65, 0x42, 0x22, 0x20, 0xa8, 0x22, 0x20 };
+	uint8_t modes[][7] = {
+	    { 0xc2, 0xc1, 0xc0, 0x00, 0x00, 0x00, 0x00 },   /* VIA ATA33 */
+	    { 0xee, 0xec, 0xea, 0xe9, 0xe8, 0x00, 0x00 },   /* VIA ATA66 */
+	    { 0xf7, 0xf6, 0xf4, 0xf2, 0xf1, 0xf0, 0x00 },   /* VIA ATA100 */
+	    { 0xf7, 0xf7, 0xf6, 0xf4, 0xf2, 0xf1, 0xf0 } }; /* VIA ATA133 */
 
-    mode = ata_limit_mode(dev, mode, ctlr->chip->max_dma);
-    mode = ata_check_80pin(dev, mode);
-
-    error = ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode);
-    if (bootverbose)
-	device_printf(dev, "%ssetting %s on %s chip\n",
-		      (error) ? "FAILURE " : "", ata_mode2str(mode),
-		      ctlr->chip->text);
-    if (!error) {
-	if (ctlr->chip->cfg1 != VIA133)
-	    pci_write_config(gparent, reg - 0x08,timings[ata_mode2idx(mode)],1);
-	if (mode >= ATA_UDMA0)
-	    pci_write_config(gparent, reg,
+	mode = min(mode, ctlr->chip->max_dma);
+	/* Set UDMA timings */
+	if (mode >= ATA_UDMA0) {
+	    pci_write_config(parent, reg,
 			     modes[ctlr->chip->cfg1][mode & ATA_MODE_MASK], 1);
-	else
-	    pci_write_config(gparent, reg, 0x8b, 1);
-	atadev->mode = mode;
-    }
+	    piomode = ATA_PIO4;
+	} else {
+	    pci_write_config(parent, reg, 0x8b, 1);
+	    piomode = mode;
+	}
+	/* Set WDMA/PIO timings */
+	if (ctlr->chip->cfg1 != VIA133)
+	    pci_write_config(parent, reg - 0x08,timings[ata_mode2idx(piomode)], 1);
+	return (mode);
 }
 
 static void
@@ -376,5 +382,37 @@ ata_via_southbridge_fixup(device_t dev)
     free(children, M_TEMP);
 }
 
+static int
+ata_via_sata_ch_attach(device_t dev)
+{
+	struct ata_channel *ch = device_get_softc(dev);
+
+	if (ata_pci_ch_attach(dev))
+		return ENXIO;
+	if (ch->unit == 0)
+		ch->flags |= ATA_SATA;
+	return (0);
+}
+
+static int
+ata_via_sata_getrev(device_t dev, int target)
+{
+	struct ata_channel *ch = device_get_softc(dev);
+
+	if (ch->unit == 0)
+		return (1);
+	return (0);
+}
+
+static int
+ata_via_sata_setmode(device_t dev, int target, int mode)
+{
+	struct ata_channel *ch = device_get_softc(dev);
+
+	if (ch->unit == 0)
+		return (mode);
+	return (ata_via_old_setmode(dev, target, mode));
+}
+
 ATA_DECLARE_DRIVER(ata_via);
 MODULE_DEPEND(ata_via, ata_ahci, 1, 1, 1);
diff --git a/sys/dev/ath/ath_hal/ah_regdomain.c b/sys/dev/ath/ath_hal/ah_regdomain.c
index fd138a48735..515c753a1f0 100644
--- a/sys/dev/ath/ath_hal/ah_regdomain.c
+++ b/sys/dev/ath/ath_hal/ah_regdomain.c
@@ -170,6 +170,7 @@ enum {
 
 	WOR9_WORLD	= 0x69,		/* World9 (WO9 SKU) */	
 	WORA_WORLD	= 0x6A,		/* WorldA (WOA SKU) */	
+	WORB_WORLD	= 0x6B,		/* WorldB (WOB SKU) */
 
 	MKK3_MKKB	= 0x80,		/* Japan UNI-1 even + MKKB */
 	MKK3_MKKA2	= 0x81,		/* Japan UNI-1 even + MKKA2 */
@@ -432,6 +433,7 @@ static REG_DMN_PAIR_MAPPING regDomainPairs[] = {
 	{EU1_WORLD,	EU1_WORLD,	EU1_WORLD,	NO_REQ, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
 	{WOR9_WORLD,	WOR9_WORLD,	WOR9_WORLD,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
 	{WORA_WORLD,	WORA_WORLD,	WORA_WORLD,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
+	{WORB_WORLD,	WORB_WORLD,	WORB_WORLD,	DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB, NO_REQ, PSCAN_DEFER, CTRY_DEFAULT },
 };
 
 /* 
@@ -1681,6 +1683,31 @@ static REG_DOMAIN regDomains[] = {
 				      WG1_2467_2467),
 	 .chan11g_turbo		= BM1(T3_2437_2437)},
 
+	{.regDmnEnum		= WORB_WORLD,
+	 .conformanceTestLimit	= NO_CTL,
+	 .dfsMask		= DFS_FCC3 | DFS_ETSI,
+	 .pscan			= PSCAN_WWR,
+	 .flags			= DISALLOW_ADHOC_11A,
+	 .chan11a		= BM4(W1_5260_5320,
+				      W1_5180_5240,
+				      W1_5745_5825,
+				      W1_5500_5700),
+	 .chan11b		= BM7(W1_2412_2412,
+				      W1_2437_2442,
+				      W1_2462_2462,
+				      W1_2472_2472,
+				      W1_2417_2432,
+				      W1_2447_2457,
+				      W1_2467_2467),
+	 .chan11g		= BM7(WG1_2412_2412,
+				      WG1_2437_2442,
+				      WG1_2462_2462,
+				      WG1_2472_2472,
+				      WG1_2417_2432,
+				      WG1_2447_2457,
+				      WG1_2467_2467),
+	 .chan11g_turbo		= BM1(T3_2437_2437)},
+
 	{.regDmnEnum		= NULL1,
 	 .conformanceTestLimit	= NO_CTL,
 	}
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c
index 97784f4676a..27912def8e6 100644
--- a/sys/dev/ath/if_ath.c
+++ b/sys/dev/ath/if_ath.c
@@ -1190,7 +1190,7 @@ ath_suspend(struct ath_softc *sc)
 	/*
 	 * NB: don't worry about putting the chip in low power
 	 * mode; pci will power off our socket on suspend and
-	 * cardbus detaches the device.
+	 * CardBus detaches the device.
 	 */
 }
 
diff --git a/sys/dev/atkbdc/psm.c b/sys/dev/atkbdc/psm.c
index 93c9acb7a9c..30113bdad11 100644
--- a/sys/dev/atkbdc/psm.c
+++ b/sys/dev/atkbdc/psm.c
@@ -343,6 +343,9 @@ static devclass_t psm_devclass;
 #define	PSM_FLAGS_FINGERDOWN	0x0001	/* VersaPad finger down */
 
 /* Tunables */
+static int tap_enabled = -1;
+TUNABLE_INT("hw.psm.tap_enabled", &tap_enabled);
+
 static int synaptics_support = 0;
 TUNABLE_INT("hw.psm.synaptics_support", &synaptics_support);
 
@@ -901,6 +904,36 @@ doopen(struct psm_softc *sc, int command_byte)
 		}
 	}
 
+	/*
+	 * A user may want to disable tap and drag gestures on a Synaptics
+	 * TouchPad when it operates in Relative Mode.
+	 */
+	if (sc->hw.model == MOUSE_MODEL_GENERIC) {
+		if (tap_enabled > 0) {
+			/*
+			 * Enable tap & drag gestures. We use a Mode Byte
+			 * and clear the DisGest bit (see §2.5 of Synaptics
+			 * TouchPad Interfacing Guide).
+			 */
+			VLOG(2, (LOG_DEBUG,
+			    "psm%d: enable tap and drag gestures\n",
+			    sc->unit));
+			mouse_ext_command(sc->kbdc, 0x00);
+			set_mouse_sampling_rate(sc->kbdc, 20);
+		} else if (tap_enabled == 0) {
+			/*
+			 * Disable tap & drag gestures. We use a Mode Byte
+			 * and set the DisGest bit (see §2.5 of Synaptics
+			 * TouchPad Interfacing Guide).
+			 */
+			VLOG(2, (LOG_DEBUG,
+			    "psm%d: disable tap and drag gestures\n",
+			    sc->unit));
+			mouse_ext_command(sc->kbdc, 0x04);
+			set_mouse_sampling_rate(sc->kbdc, 20);
+		}
+	}
+
 	/* enable the mouse device */
 	if (!enable_aux_dev(sc->kbdc)) {
 		/* MOUSE ERROR: failed to enable the mouse because:
@@ -2261,6 +2294,8 @@ static int pkterrthresh = 2;
 SYSCTL_INT(_debug_psm, OID_AUTO, pkterrthresh, CTLFLAG_RW, &pkterrthresh, 0,
     "Number of error packets allowed before reinitializing the mouse");
 
+SYSCTL_INT(_hw_psm, OID_AUTO, tap_enabled, CTLFLAG_RW, &tap_enabled, 0,
+    "Enable tap and drag gestures");
 static int tap_threshold = PSM_TAP_THRESHOLD;
 SYSCTL_INT(_hw_psm, OID_AUTO, tap_threshold, CTLFLAG_RW, &tap_threshold, 0,
     "Button tap threshold");
diff --git a/sys/dev/auxio/auxio.c b/sys/dev/auxio/auxio.c
index 9943a0afd60..35fd307a97a 100644
--- a/sys/dev/auxio/auxio.c
+++ b/sys/dev/auxio/auxio.c
@@ -56,7 +56,7 @@
  */
 
 /*
- * AUXIO registers support on the sbus & ebus2, used for the floppy driver
+ * AUXIO registers support on the SBus & EBus2, used for the floppy driver
  * and to control the system LED, for the BLINK option.
  */
 
@@ -85,8 +85,8 @@ __FBSDID("$FreeBSD$");
 #include 
 
 /*
- * on sun4u, auxio exists with one register (LED) on the sbus, and 5
- * registers on the ebus2 (pci) (LED, PCIMODE, FREQUENCY, SCSI
+ * On sun4u, auxio exists with one register (LED) on the SBus, and 5
+ * registers on the EBus2 (pci) (LED, PCIMODE, FREQUENCY, SCSI
  * OSCILLATOR, and TEMP SENSE.
  */
 
@@ -141,7 +141,10 @@ static driver_t auxio_sbus_driver = {
 };
 
 static devclass_t	auxio_devclass;
-DRIVER_MODULE(auxio, sbus, auxio_sbus_driver, auxio_devclass, 0, 0);
+/* The probe order is handled by sbus(4). */
+EARLY_DRIVER_MODULE(auxio, sbus, auxio_sbus_driver, auxio_devclass, 0, 0,
+    BUS_PASS_DEFAULT);
+MODULE_DEPEND(auxio, sbus, 1, 1, 1);
 
 /* EBus */
 static device_method_t auxio_ebus_methods[] = {
@@ -157,7 +160,9 @@ static driver_t auxio_ebus_driver = {
 	sizeof(struct auxio_softc)
 };
 
-DRIVER_MODULE(auxio, ebus, auxio_ebus_driver, auxio_devclass, 0, 0);
+EARLY_DRIVER_MODULE(auxio, ebus, auxio_ebus_driver, auxio_devclass, 0, 0,
+    BUS_PASS_DEFAULT);
+MODULE_DEPEND(auxio, ebus, 1, 1, 1);
 MODULE_VERSION(auxio, 1);
 
 #define AUXIO_LOCK_INIT(sc)	\
diff --git a/sys/dev/bge/if_bge.c b/sys/dev/bge/if_bge.c
index 0a1db828ded..db78cd437bd 100644
--- a/sys/dev/bge/if_bge.c
+++ b/sys/dev/bge/if_bge.c
@@ -80,6 +80,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -95,6 +96,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -238,7 +240,7 @@ static const struct bge_vendor {
 
 	{ 0, NULL }
 };
-	
+
 static const struct bge_revision {
 	uint32_t	br_chipid;
 	const char	*br_name;
@@ -295,7 +297,7 @@ static const struct bge_revision {
 	{ BGE_CHIPID_BCM5784_A0,	"BCM5784 A0" },
 	{ BGE_CHIPID_BCM5784_A1,	"BCM5784 A1" },
 	/* 5754 and 5787 share the same ASIC ID */
-	{ BGE_CHIPID_BCM5787_A0,	"BCM5754/5787 A0" }, 
+	{ BGE_CHIPID_BCM5787_A0,	"BCM5754/5787 A0" },
 	{ BGE_CHIPID_BCM5787_A1,	"BCM5754/5787 A1" },
 	{ BGE_CHIPID_BCM5787_A2,	"BCM5754/5787 A2" },
 	{ BGE_CHIPID_BCM5906_A1,	"BCM5906 A1" },
@@ -361,16 +363,20 @@ static int bge_get_eaddr_nvram(struct bge_softc *, uint8_t[]);
 static int bge_get_eaddr_eeprom(struct bge_softc *, uint8_t[]);
 static int bge_get_eaddr(struct bge_softc *, uint8_t[]);
 
-static void bge_txeof(struct bge_softc *);
-static int bge_rxeof(struct bge_softc *);
+static void bge_txeof(struct bge_softc *, uint16_t);
+static int bge_rxeof(struct bge_softc *, uint16_t, int);
 
 static void bge_asf_driver_up (struct bge_softc *);
 static void bge_tick(void *);
 static void bge_stats_update(struct bge_softc *);
 static void bge_stats_update_regs(struct bge_softc *);
+static struct mbuf *bge_setup_tso(struct bge_softc *, struct mbuf *,
+    uint16_t *);
 static int bge_encap(struct bge_softc *, struct mbuf **, uint32_t *);
 
 static void bge_intr(void *);
+static int bge_msi_intr(void *);
+static void bge_intr_task(void *, int);
 static void bge_start_locked(struct ifnet *);
 static void bge_start(struct ifnet *);
 static int bge_ioctl(struct ifnet *, u_long, caddr_t);
@@ -414,7 +420,7 @@ static uint32_t bge_readreg_ind(struct bge_softc *, int);
 #endif
 static void bge_writemem_direct(struct bge_softc *, int, int);
 static void bge_writereg_ind(struct bge_softc *, int, int);
-static void bge_set_max_readrq(struct bge_softc *, int);
+static void bge_set_max_readrq(struct bge_softc *);
 
 static int bge_miibus_readreg(device_t, int, int);
 static int bge_miibus_writereg(device_t, int, int, int);
@@ -558,25 +564,23 @@ bge_writemem_ind(struct bge_softc *sc, int off, int val)
  * PCI Express only
  */
 static void
-bge_set_max_readrq(struct bge_softc *sc, int expr_ptr)
+bge_set_max_readrq(struct bge_softc *sc)
 {
 	device_t dev;
 	uint16_t val;
 
-	KASSERT((sc->bge_flags & BGE_FLAG_PCIE) && expr_ptr != 0,
-	    ("%s: not applicable", __func__));
-
 	dev = sc->bge_dev;
 
-	val = pci_read_config(dev, expr_ptr + BGE_PCIE_DEVCTL, 2);
-	if ((val & BGE_PCIE_DEVCTL_MAX_READRQ_MASK) !=
+	val = pci_read_config(dev, sc->bge_expcap + PCIR_EXPRESS_DEVICE_CTL, 2);
+	if ((val & PCIM_EXP_CTL_MAX_READ_REQUEST) !=
 	    BGE_PCIE_DEVCTL_MAX_READRQ_4096) {
 		if (bootverbose)
 			device_printf(dev, "adjust device control 0x%04x ",
 			    val);
-		val &= ~BGE_PCIE_DEVCTL_MAX_READRQ_MASK;
+		val &= ~PCIM_EXP_CTL_MAX_READ_REQUEST;
 		val |= BGE_PCIE_DEVCTL_MAX_READRQ_4096;
-		pci_write_config(dev, expr_ptr + BGE_PCIE_DEVCTL, val, 2);
+		pci_write_config(dev, sc->bge_expcap + PCIR_EXPRESS_DEVICE_CTL,
+		    val, 2);
 		if (bootverbose)
 			printf("-> 0x%04x\n", val);
 	}
@@ -1055,8 +1059,7 @@ bge_init_rx_ring_std(struct bge_softc *sc)
 	};
 
 	bus_dmamap_sync(sc->bge_cdata.bge_rx_std_ring_tag,
-	    sc->bge_cdata.bge_rx_std_ring_map,
-	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
+	    sc->bge_cdata.bge_rx_std_ring_map, BUS_DMASYNC_PREWRITE);
 
 	sc->bge_std = i - 1;
 	bge_writembx(sc, BGE_MBX_RX_STD_PROD_LO, sc->bge_std);
@@ -1099,8 +1102,7 @@ bge_init_rx_ring_jumbo(struct bge_softc *sc)
 	};
 
 	bus_dmamap_sync(sc->bge_cdata.bge_rx_jumbo_ring_tag,
-	    sc->bge_cdata.bge_rx_jumbo_ring_map,
-	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
+	    sc->bge_cdata.bge_rx_jumbo_ring_map, BUS_DMASYNC_PREWRITE);
 
 	sc->bge_jumbo = i - 1;
 
@@ -1284,11 +1286,11 @@ bge_sig_post_reset(sc, type)
 	if (sc->bge_asf_mode & ASF_NEW_HANDSHAKE) {
 		switch (type) {
 		case BGE_RESET_START:
-			bge_writemem_ind(sc, BGE_SDI_STATUS, 0x80000001); 
+			bge_writemem_ind(sc, BGE_SDI_STATUS, 0x80000001);
 			/* START DONE */
 			break;
 		case BGE_RESET_STOP:
-			bge_writemem_ind(sc, BGE_SDI_STATUS, 0x80000002); 
+			bge_writemem_ind(sc, BGE_SDI_STATUS, 0x80000002);
 			break;
 		}
 	}
@@ -1623,7 +1625,9 @@ bge_blockinit(struct bge_softc *sc)
 	else
 		val = BGE_STD_RX_RING_CNT / 8;
 	CSR_WRITE_4(sc, BGE_RBDI_STD_REPL_THRESH, val);
-	CSR_WRITE_4(sc, BGE_RBDI_JUMBO_REPL_THRESH, BGE_JUMBO_RX_RING_CNT/8);
+	if (BGE_IS_JUMBO_CAPABLE(sc))
+		CSR_WRITE_4(sc, BGE_RBDI_JUMBO_REPL_THRESH,
+		    BGE_JUMBO_RX_RING_CNT/8);
 
 	/*
 	 * Disable all unused send rings by setting the 'ring disabled'
@@ -1665,8 +1669,10 @@ bge_blockinit(struct bge_softc *sc)
 
 	/* Initialize RX ring indexes */
 	bge_writembx(sc, BGE_MBX_RX_STD_PROD_LO, 0);
-	bge_writembx(sc, BGE_MBX_RX_JUMBO_PROD_LO, 0);
-	bge_writembx(sc, BGE_MBX_RX_MINI_PROD_LO, 0);
+	if (BGE_IS_JUMBO_CAPABLE(sc))
+		bge_writembx(sc, BGE_MBX_RX_JUMBO_PROD_LO, 0);
+	if (sc->bge_asicrev == BGE_ASICREV_BCM5700)
+		bge_writembx(sc, BGE_MBX_RX_MINI_PROD_LO, 0);
 
 	/*
 	 * Set up RX return ring 0
@@ -1680,7 +1686,7 @@ bge_blockinit(struct bge_softc *sc)
 	RCB_WRITE_4(sc, vrcb, bge_hostaddr.bge_addr_lo, taddr.bge_addr_lo);
 	RCB_WRITE_4(sc, vrcb, bge_nicaddr, 0x00000000);
 	RCB_WRITE_4(sc, vrcb, bge_maxlen_flags,
-	    BGE_RCB_MAXLEN_FLAGS(sc->bge_return_ring_cnt, 0));	
+	    BGE_RCB_MAXLEN_FLAGS(sc->bge_return_ring_cnt, 0));
 
 	/* Set random backoff seed for TX */
 	CSR_WRITE_4(sc, BGE_TX_RANDOM_BACKOFF,
@@ -1755,8 +1761,15 @@ bge_blockinit(struct bge_softc *sc)
 	sc->bge_ldata.bge_status_block->bge_idx[0].bge_rx_prod_idx = 0;
 	sc->bge_ldata.bge_status_block->bge_idx[0].bge_tx_cons_idx = 0;
 
+	/* Set up status block size. */
+	if (sc->bge_asicrev == BGE_ASICREV_BCM5700 &&
+	    sc->bge_chipid != BGE_CHIPID_BCM5700_C0)
+		val = BGE_STATBLKSZ_FULL;
+	else
+		val = BGE_STATBLKSZ_32BYTE;
+
 	/* Turn on host coalescing state machine */
-	CSR_WRITE_4(sc, BGE_HCC_MODE, BGE_HCCMODE_ENABLE);
+	CSR_WRITE_4(sc, BGE_HCC_MODE, val | BGE_HCCMODE_ENABLE);
 
 	/* Turn on RX BD completion state machine and enable attentions */
 	CSR_WRITE_4(sc, BGE_RBDC_MODE,
@@ -1812,6 +1825,8 @@ bge_blockinit(struct bge_softc *sc)
 		    BGE_RDMAMODE_MBUF_SBD_CRPT_ATTN;
 	if (sc->bge_flags & BGE_FLAG_PCIE)
 		val |= BGE_RDMAMODE_FIFO_LONG_BURST;
+	if (sc->bge_flags & BGE_FLAG_TSO)
+		val |= BGE_RDMAMODE_TSO4_ENABLE;
 	CSR_WRITE_4(sc, BGE_RDMA_MODE, val);
 	DELAY(40);
 
@@ -1838,7 +1853,10 @@ bge_blockinit(struct bge_softc *sc)
 	CSR_WRITE_4(sc, BGE_SDC_MODE, val);
 
 	/* Turn on send data initiator state machine */
-	CSR_WRITE_4(sc, BGE_SDI_MODE, BGE_SDIMODE_ENABLE);
+	if (sc->bge_flags & BGE_FLAG_TSO)
+		CSR_WRITE_4(sc, BGE_SDI_MODE, BGE_SDIMODE_ENABLE | 0x08);
+	else
+		CSR_WRITE_4(sc, BGE_SDI_MODE, BGE_SDIMODE_ENABLE);
 
 	/* Turn on send BD initiator state machine */
 	CSR_WRITE_4(sc, BGE_SBDI_MODE, BGE_SBDIMODE_ENABLE);
@@ -1910,7 +1928,7 @@ bge_lookup_vendor(uint16_t vid)
 	for (v = bge_vendors; v->v_name != NULL; v++)
 		if (v->v_id == vid)
 			return (v);
-		
+
 	panic("%s: unknown vendor %d", __func__, vid);
 	return (NULL);
 }
@@ -2105,15 +2123,22 @@ bge_dma_alloc(device_t dev)
 {
 	struct bge_dmamap_arg ctx;
 	struct bge_softc *sc;
+	bus_addr_t lowaddr;
+	bus_size_t sbsz, txsegsz, txmaxsegsz;
 	int i, error;
 
 	sc = device_get_softc(dev);
 
+	lowaddr = BUS_SPACE_MAXADDR;
+	if ((sc->bge_flags & BGE_FLAG_40BIT_BUG) != 0)
+		lowaddr = BGE_DMA_MAXADDR;
+	if ((sc->bge_flags & BGE_FLAG_4G_BNDRY_BUG) != 0)
+		lowaddr = BUS_SPACE_MAXADDR_32BIT;
 	/*
 	 * Allocate the parent bus DMA tag appropriate for PCI.
 	 */
 	error = bus_dma_tag_create(bus_get_dma_tag(sc->bge_dev),
-	    1, 0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR,	NULL,
+	    1, 0, lowaddr, BUS_SPACE_MAXADDR, NULL,
 	    NULL, BUS_SPACE_MAXSIZE_32BIT, 0, BUS_SPACE_MAXSIZE_32BIT,
 	    0, NULL, NULL, &sc->bge_cdata.bge_parent_tag);
 
@@ -2126,10 +2151,17 @@ bge_dma_alloc(device_t dev)
 	/*
 	 * Create tag for Tx mbufs.
 	 */
+	if (sc->bge_flags & BGE_FLAG_TSO) {
+		txsegsz = BGE_TSOSEG_SZ;
+		txmaxsegsz = 65535 + sizeof(struct ether_vlan_header);
+	} else {
+		txsegsz = MCLBYTES;
+		txmaxsegsz = MCLBYTES * BGE_NSEG_NEW;
+	}
 	error = bus_dma_tag_create(sc->bge_cdata.bge_parent_tag, 1,
-	    0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL,
-	    NULL, MCLBYTES * BGE_NSEG_NEW, BGE_NSEG_NEW, MCLBYTES,
-	    BUS_DMA_ALLOCNOW, NULL, NULL, &sc->bge_cdata.bge_tx_mtag);
+	    0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL,
+	    txmaxsegsz, BGE_NSEG_NEW, txsegsz, 0, NULL, NULL,
+	    &sc->bge_cdata.bge_tx_mtag);
 
 	if (error) {
 		device_printf(sc->bge_dev, "could not allocate TX dma tag\n");
@@ -2141,7 +2173,7 @@ bge_dma_alloc(device_t dev)
 	 */
 	error = bus_dma_tag_create(sc->bge_cdata.bge_parent_tag, 1, 0,
 	    BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES, 1,
-	    MCLBYTES, BUS_DMA_ALLOCNOW, NULL, NULL, &sc->bge_cdata.bge_rx_mtag);
+	    MCLBYTES, 0, NULL, NULL, &sc->bge_cdata.bge_rx_mtag);
 
 	if (error) {
 		device_printf(sc->bge_dev, "could not allocate RX dma tag\n");
@@ -2261,7 +2293,7 @@ bge_dma_alloc(device_t dev)
 		    0, &sc->bge_cdata.bge_rx_jumbo_sparemap);
 		if (error) {
 			device_printf(sc->bge_dev,
-			    "can't create sapre DMA map for jumbo RX\n");
+			    "can't create spare DMA map for jumbo RX\n");
 			return (ENOMEM);
 		}
 		for (i = 0; i < BGE_JUMBO_RX_RING_CNT; i++) {
@@ -2344,14 +2376,25 @@ bge_dma_alloc(device_t dev)
 
 	sc->bge_ldata.bge_tx_ring_paddr = ctx.bge_busaddr;
 
-	/* Create tag for status block. */
+	/*
+	 * Create tag for status block.
+	 * Because we only use single Tx/Rx/Rx return ring, use
+	 * minimum status block size except BCM5700 AX/BX which
+	 * seems to want to see full status block size regardless
+	 * of configured number of ring.
+	 */
+	if (sc->bge_asicrev == BGE_ASICREV_BCM5700 &&
+	    sc->bge_chipid != BGE_CHIPID_BCM5700_C0)
+		sbsz = BGE_STATUS_BLK_SZ;
+	else
+		sbsz = 32;
 	error = bus_dma_tag_create(sc->bge_cdata.bge_parent_tag,
 	    PAGE_SIZE, 0, BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL,
-	    NULL, BGE_STATUS_BLK_SZ, 1, BGE_STATUS_BLK_SZ, 0,
-	    NULL, NULL, &sc->bge_cdata.bge_status_tag);
+	    NULL, sbsz, 1, sbsz, 0, NULL, NULL, &sc->bge_cdata.bge_status_tag);
 
 	if (error) {
-		device_printf(sc->bge_dev, "could not allocate dma tag\n");
+		device_printf(sc->bge_dev,
+		    "could not allocate status dma tag\n");
 		return (ENOMEM);
 	}
 
@@ -2362,7 +2405,7 @@ bge_dma_alloc(device_t dev)
 	if (error)
 		return (ENOMEM);
 
-	bzero((char *)sc->bge_ldata.bge_status_block, BGE_STATUS_BLK_SZ);
+	bzero((char *)sc->bge_ldata.bge_status_block, sbsz);
 
 	/* Load the address of the status block. */
 	ctx.sc = sc;
@@ -2370,7 +2413,7 @@ bge_dma_alloc(device_t dev)
 
 	error = bus_dmamap_load(sc->bge_cdata.bge_status_tag,
 	    sc->bge_cdata.bge_status_map, sc->bge_ldata.bge_status_block,
-	    BGE_STATUS_BLK_SZ, bge_dma_map_addr, &ctx, BUS_DMA_NOWAIT);
+	    sbsz, bge_dma_map_addr, &ctx, BUS_DMA_NOWAIT);
 
 	if (error)
 		return (ENOMEM);
@@ -2413,7 +2456,6 @@ bge_dma_alloc(device_t dev)
 	return (0);
 }
 
-#if __FreeBSD_version > 602105
 /*
  * Return true if this device has more than one port.
  */
@@ -2462,7 +2504,6 @@ bge_can_use_msi(struct bge_softc *sc)
 	}
 	return (can_use_msi);
 }
-#endif
 
 static int
 bge_attach(device_t dev)
@@ -2471,11 +2512,13 @@ bge_attach(device_t dev)
 	struct bge_softc *sc;
 	uint32_t hwcfg = 0, misccfg;
 	u_char eaddr[ETHER_ADDR_LEN];
-	int error, reg, rid, trys;
+	int error, msicount, reg, rid, trys;
 
 	sc = device_get_softc(dev);
 	sc->bge_dev = dev;
 
+	TASK_INIT(&sc->bge_intr_task, 0, bge_intr_task, sc);
+
 	/*
 	 * Map control/status registers.
 	 */
@@ -2567,6 +2610,16 @@ bge_attach(device_t dev)
 			sc->bge_flags |= BGE_FLAG_BER_BUG;
 	}
 
+	/*
+	 * All controllers that are not 5755 or higher have 4GB
+	 * boundary DMA bug.
+	 * Whenever an address crosses a multiple of the 4GB boundary
+	 * (including 4GB, 8Gb, 12Gb, etc.) and makes the transition
+	 * from 0xX_FFFF_FFFF to 0x(X+1)_0000_0000 an internal DMA
+	 * state machine will lockup and cause the device to hang.
+	 */
+	if (BGE_IS_5755_PLUS(sc) == 0)
+		sc->bge_flags |= BGE_FLAG_4G_BNDRY_BUG;
 
 	/*
 	 * We could possibly check for BCOM_DEVICEID_BCM5788 in bge_probe()
@@ -2577,45 +2630,66 @@ bge_attach(device_t dev)
 	    misccfg == BGE_MISCCFG_BOARD_ID_5788M)
 		sc->bge_flags |= BGE_FLAG_5788;
 
+	/*
+	 * Some controllers seem to require a special firmware to use
+	 * TSO. But the firmware is not available to FreeBSD and Linux
+	 * claims that the TSO performed by the firmware is slower than
+	 * hardware based TSO. Moreover the firmware based TSO has one
+	 * known bug which can't handle TSO if ethernet header + IP/TCP
+	 * header is greater than 80 bytes. The workaround for the TSO
+	 * bug exist but it seems it's too expensive than not using
+	 * TSO at all. Some hardwares also have the TSO bug so limit
+	 * the TSO to the controllers that are not affected TSO issues
+	 * (e.g. 5755 or higher).
+	 */
+	if (BGE_IS_5755_PLUS(sc)) {
+		/*
+		 * BCM5754 and BCM5787 shares the same ASIC id so
+		 * explicit device id check is required.
+		 */
+		if (pci_get_device(dev) != BCOM_DEVICEID_BCM5754 &&
+		    pci_get_device(dev) != BCOM_DEVICEID_BCM5754M)
+			sc->bge_flags |= BGE_FLAG_TSO;
+	}
+
   	/*
 	 * Check if this is a PCI-X or PCI Express device.
   	 */
-#if __FreeBSD_version > 602101
 	if (pci_find_extcap(dev, PCIY_EXPRESS, ®) == 0) {
 		/*
 		 * Found a PCI Express capabilities register, this
 		 * must be a PCI Express device.
 		 */
-		if (reg != 0) {
-			sc->bge_flags |= BGE_FLAG_PCIE;
-#else
-	if (BGE_IS_5705_PLUS(sc)) {
-		reg = pci_read_config(dev, BGE_PCIE_CAPID_REG, 4);
-		if ((reg & 0xFF) == BGE_PCIE_CAPID) {
-			sc->bge_flags |= BGE_FLAG_PCIE;
-			reg = BGE_PCIE_CAPID;
-#endif
-			bge_set_max_readrq(sc, reg);
-		}
+		sc->bge_flags |= BGE_FLAG_PCIE;
+		sc->bge_expcap = reg;
+		bge_set_max_readrq(sc);
 	} else {
 		/*
 		 * Check if the device is in PCI-X Mode.
 		 * (This bit is not valid on PCI Express controllers.)
 		 */
+		if (pci_find_extcap(dev, PCIY_PCIX, ®) == 0)
+			sc->bge_pcixcap = reg;
 		if ((pci_read_config(dev, BGE_PCI_PCISTATE, 4) &
 		    BGE_PCISTATE_PCI_BUSMODE) == 0)
 			sc->bge_flags |= BGE_FLAG_PCIX;
 	}
 
-#if __FreeBSD_version > 602105
-	{
-		int msicount;
-
-		/*
-		 * Allocate the interrupt, using MSI if possible.  These devices
-		 * support 8 MSI messages, but only the first one is used in
-		 * normal operation.
-		 */
+	/*
+	 * The 40bit DMA bug applies to the 5714/5715 controllers and is
+	 * not actually a MAC controller bug but an issue with the embedded
+	 * PCIe to PCI-X bridge in the device. Use 40bit DMA workaround.
+	 */
+	if (BGE_IS_5714_FAMILY(sc) && (sc->bge_flags & BGE_FLAG_PCIX))
+		sc->bge_flags |= BGE_FLAG_40BIT_BUG;
+	/*
+	 * Allocate the interrupt, using MSI if possible.  These devices
+	 * support 8 MSI messages, but only the first one is used in
+	 * normal operation.
+	 */
+	rid = 0;
+	if (pci_find_extcap(sc->bge_dev, PCIY_MSI, ®) == 0) {
+		sc->bge_msicap = reg;
 		if (bge_can_use_msi(sc)) {
 			msicount = pci_msi_count(dev);
 			if (msicount > 1)
@@ -2625,12 +2699,8 @@ bge_attach(device_t dev)
 		if (msicount == 1 && pci_alloc_msi(dev, &msicount) == 0) {
 			rid = 1;
 			sc->bge_flags |= BGE_FLAG_MSI;
-		} else
-			rid = 0;
+		}
 	}
-#else
-	rid = 0;
-#endif
 
 	sc->bge_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
 	    RF_SHAREABLE | RF_ACTIVE);
@@ -2735,6 +2805,10 @@ bge_attach(device_t dev)
 	ifp->if_hwassist = BGE_CSUM_FEATURES;
 	ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_VLAN_HWTAGGING |
 	    IFCAP_VLAN_MTU;
+	if ((sc->bge_flags & BGE_FLAG_TSO) != 0) {
+		ifp->if_hwassist |= CSUM_TSO;
+		ifp->if_capabilities |= IFCAP_TSO4;
+	}
 #ifdef IFCAP_VLAN_HWCSUM
 	ifp->if_capabilities |= IFCAP_VLAN_HWCSUM;
 #endif
@@ -2850,8 +2924,29 @@ again:
 	 * Hookup IRQ last.
 	 */
 #if __FreeBSD_version > 700030
-	error = bus_setup_intr(dev, sc->bge_irq, INTR_TYPE_NET | INTR_MPSAFE,
-	   NULL, bge_intr, sc, &sc->bge_intrhand);
+	if (BGE_IS_5755_PLUS(sc) && sc->bge_flags & BGE_FLAG_MSI) {
+		/* Take advantage of single-shot MSI. */
+		CSR_WRITE_4(sc, BGE_MSI_MODE, CSR_READ_4(sc, BGE_MSI_MODE) &
+		    ~BGE_MSIMODE_ONE_SHOT_DISABLE);
+		sc->bge_tq = taskqueue_create_fast("bge_taskq", M_WAITOK,
+		    taskqueue_thread_enqueue, &sc->bge_tq);
+		if (sc->bge_tq == NULL) {
+			device_printf(dev, "could not create taskqueue.\n");
+			ether_ifdetach(ifp);
+			error = ENXIO;
+			goto fail;
+		}
+		taskqueue_start_threads(&sc->bge_tq, 1, PI_NET, "%s taskq",
+		    device_get_nameunit(sc->bge_dev));
+		error = bus_setup_intr(dev, sc->bge_irq,
+		    INTR_TYPE_NET | INTR_MPSAFE, bge_msi_intr, NULL, sc,
+		    &sc->bge_intrhand);
+		if (error)
+			ether_ifdetach(ifp);
+	} else
+		error = bus_setup_intr(dev, sc->bge_irq,
+		    INTR_TYPE_NET | INTR_MPSAFE, NULL, bge_intr, sc,
+		    &sc->bge_intrhand);
 #else
 	error = bus_setup_intr(dev, sc->bge_irq, INTR_TYPE_NET | INTR_MPSAFE,
 	   bge_intr, sc, &sc->bge_intrhand);
@@ -2893,6 +2988,8 @@ bge_detach(device_t dev)
 
 	callout_drain(&sc->bge_stat_ch);
 
+	if (sc->bge_tq)
+		taskqueue_drain(sc->bge_tq, &sc->bge_intr_task);
 	ether_ifdetach(ifp);
 
 	if (sc->bge_flags & BGE_FLAG_TBI) {
@@ -2914,6 +3011,9 @@ bge_release_resources(struct bge_softc *sc)
 
 	dev = sc->bge_dev;
 
+	if (sc->bge_tq != NULL)
+		taskqueue_free(sc->bge_tq);
+
 	if (sc->bge_intrhand != NULL)
 		bus_teardown_intr(dev, sc->bge_irq, sc->bge_intrhand);
 
@@ -2921,10 +3021,8 @@ bge_release_resources(struct bge_softc *sc)
 		bus_release_resource(dev, SYS_RES_IRQ,
 		    sc->bge_flags & BGE_FLAG_MSI ? 1 : 0, sc->bge_irq);
 
-#if __FreeBSD_version > 602105
 	if (sc->bge_flags & BGE_FLAG_MSI)
 		pci_release_msi(dev);
-#endif
 
 	if (sc->bge_res != NULL)
 		bus_release_resource(dev, SYS_RES_MEMORY,
@@ -2945,6 +3043,7 @@ bge_reset(struct bge_softc *sc)
 	device_t dev;
 	uint32_t cachesize, command, pcistate, reset, val;
 	void (*write_op)(struct bge_softc *, int, int);
+	uint16_t devctl;
 	int i;
 
 	dev = sc->bge_dev;
@@ -2995,7 +3094,7 @@ bge_reset(struct bge_softc *sc)
 		}
 	}
 
-	/* 
+	/*
 	 * Set GPHY Power Down Override to leave GPHY
 	 * powered up in D0 uninitialized.
 	 */
@@ -3023,11 +3122,17 @@ bge_reset(struct bge_softc *sc)
 			val = pci_read_config(dev, 0xC4, 4);
 			pci_write_config(dev, 0xC4, val | (1 << 15), 4);
 		}
-		/*
-		 * Set PCIE max payload size to 128 bytes and clear error
-		 * status.
-		 */
-		pci_write_config(dev, 0xD8, 0xF5000, 4);
+		devctl = pci_read_config(dev,
+		    sc->bge_expcap + PCIR_EXPRESS_DEVICE_CTL, 2);
+		/* Clear enable no snoop and disable relaxed ordering. */
+		devctl &= ~(0x0010 | 0x0800);
+		/* Set PCIE max payload size to 128. */
+		devctl &= ~PCIM_EXP_CTL_MAX_PAYLOAD;
+		pci_write_config(dev, sc->bge_expcap + PCIR_EXPRESS_DEVICE_CTL,
+		    devctl, 2);
+		/* Clear error status. */
+		pci_write_config(dev, sc->bge_expcap + PCIR_EXPRESS_DEVICE_STA,
+		    0, 2);
 	}
 
 	/* Reset some of the PCI state that got zapped by reset. */
@@ -3042,8 +3147,10 @@ bge_reset(struct bge_softc *sc)
 	if (BGE_IS_5714_FAMILY(sc)) {
 		/* This chip disables MSI on reset. */
 		if (sc->bge_flags & BGE_FLAG_MSI) {
-			val = pci_read_config(dev, BGE_PCI_MSI_CTL, 2);
-			pci_write_config(dev, BGE_PCI_MSI_CTL,
+			val = pci_read_config(dev,
+			    sc->bge_msicap + PCIR_MSI_CTRL, 2);
+			pci_write_config(dev,
+			    sc->bge_msicap + PCIR_MSI_CTRL,
 			    val | PCIM_MSICTRL_MSI_ENABLE, 2);
 			val = CSR_READ_4(sc, BGE_MSI_MODE);
 			CSR_WRITE_4(sc, BGE_MSI_MODE,
@@ -3146,15 +3253,13 @@ bge_reset(struct bge_softc *sc)
  */
 
 static int
-bge_rxeof(struct bge_softc *sc)
+bge_rxeof(struct bge_softc *sc, uint16_t rx_prod, int holdlck)
 {
 	struct ifnet *ifp;
 	int rx_npkts = 0, stdcnt = 0, jumbocnt = 0;
-	uint16_t rx_prod, rx_cons;
+	uint16_t rx_cons;
 
-	BGE_LOCK_ASSERT(sc);
 	rx_cons = sc->bge_rx_saved_considx;
-	rx_prod = sc->bge_ldata.bge_status_block->bge_idx[0].bge_rx_prod_idx;
 
 	/* Nothing to do. */
 	if (rx_cons == rx_prod)
@@ -3270,9 +3375,12 @@ bge_rxeof(struct bge_softc *sc)
 #endif
 		}
 
-		BGE_UNLOCK(sc);
-		(*ifp->if_input)(ifp, m);
-		BGE_LOCK(sc);
+		if (holdlck != 0) {
+			BGE_UNLOCK(sc);
+			(*ifp->if_input)(ifp, m);
+			BGE_LOCK(sc);
+		} else
+			(*ifp->if_input)(ifp, m);
 		rx_npkts++;
 
 		if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
@@ -3307,7 +3415,7 @@ bge_rxeof(struct bge_softc *sc)
 }
 
 static void
-bge_txeof(struct bge_softc *sc)
+bge_txeof(struct bge_softc *sc, uint16_t tx_cons)
 {
 	struct bge_tx_bd *cur_tx = NULL;
 	struct ifnet *ifp;
@@ -3315,8 +3423,7 @@ bge_txeof(struct bge_softc *sc)
 	BGE_LOCK_ASSERT(sc);
 
 	/* Nothing to do. */
-	if (sc->bge_tx_saved_considx ==
-	    sc->bge_ldata.bge_status_block->bge_idx[0].bge_tx_cons_idx)
+	if (sc->bge_tx_saved_considx == tx_cons)
 		return;
 
 	ifp = sc->bge_ifp;
@@ -3327,8 +3434,7 @@ bge_txeof(struct bge_softc *sc)
 	 * Go through our tx ring and free mbufs for those
 	 * frames that have been sent.
 	 */
-	while (sc->bge_tx_saved_considx !=
-	    sc->bge_ldata.bge_status_block->bge_idx[0].bge_tx_cons_idx) {
+	while (sc->bge_tx_saved_considx != tx_cons) {
 		uint32_t		idx = 0;
 
 		idx = sc->bge_tx_saved_considx;
@@ -3359,6 +3465,7 @@ static int
 bge_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
 {
 	struct bge_softc *sc = ifp->if_softc;
+	uint16_t rx_prod, tx_cons;
 	uint32_t statusword;
 	int rx_npkts = 0;
 
@@ -3369,13 +3476,17 @@ bge_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
 	}
 
 	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
-	    sc->bge_cdata.bge_status_map, BUS_DMASYNC_POSTREAD);
+	    sc->bge_cdata.bge_status_map,
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+	rx_prod = sc->bge_ldata.bge_status_block->bge_idx[0].bge_rx_prod_idx;
+	tx_cons = sc->bge_ldata.bge_status_block->bge_idx[0].bge_tx_cons_idx;
 
 	statusword = atomic_readandclear_32(
 	    &sc->bge_ldata.bge_status_block->bge_status);
 
 	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
-	    sc->bge_cdata.bge_status_map, BUS_DMASYNC_PREREAD);
+	    sc->bge_cdata.bge_status_map,
+	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
 	/* Note link event. It will be processed by POLL_AND_CHECK_STATUS. */
 	if (statusword & BGE_STATFLAG_LINKSTATE_CHANGED)
@@ -3388,12 +3499,12 @@ bge_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
 			bge_link_upd(sc);
 
 	sc->rxcycles = count;
-	rx_npkts = bge_rxeof(sc);
+	rx_npkts = bge_rxeof(sc, rx_prod, 1);
 	if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
 		BGE_UNLOCK(sc);
 		return (rx_npkts);
 	}
-	bge_txeof(sc);
+	bge_txeof(sc, tx_cons);
 	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		bge_start_locked(ifp);
 
@@ -3402,12 +3513,76 @@ bge_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
 }
 #endif /* DEVICE_POLLING */
 
+static int
+bge_msi_intr(void *arg)
+{
+	struct bge_softc *sc;
+
+	sc = (struct bge_softc *)arg;
+	/*
+	 * This interrupt is not shared and controller already
+	 * disabled further interrupt.
+	 */
+	taskqueue_enqueue(sc->bge_tq, &sc->bge_intr_task);
+	return (FILTER_HANDLED);
+}
+
+static void
+bge_intr_task(void *arg, int pending)
+{
+	struct bge_softc *sc;
+	struct ifnet *ifp;
+	uint32_t status;
+	uint16_t rx_prod, tx_cons;
+
+	sc = (struct bge_softc *)arg;
+	ifp = sc->bge_ifp;
+
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
+		return;
+
+	/* Get updated status block. */
+	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
+	    sc->bge_cdata.bge_status_map,
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+
+	/* Save producer/consumer indexess. */
+	rx_prod = sc->bge_ldata.bge_status_block->bge_idx[0].bge_rx_prod_idx;
+	tx_cons = sc->bge_ldata.bge_status_block->bge_idx[0].bge_tx_cons_idx;
+	status = sc->bge_ldata.bge_status_block->bge_status;
+	sc->bge_ldata.bge_status_block->bge_status = 0;
+	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
+	    sc->bge_cdata.bge_status_map,
+	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
+	/* Let controller work. */
+	bge_writembx(sc, BGE_MBX_IRQ0_LO, 0);
+
+	if ((status & BGE_STATFLAG_LINKSTATE_CHANGED) != 0) {
+		BGE_LOCK(sc);
+		bge_link_upd(sc);
+		BGE_UNLOCK(sc);
+	}
+	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
+		/* Check RX return ring producer/consumer. */
+		bge_rxeof(sc, rx_prod, 0);
+	}
+	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
+		BGE_LOCK(sc);
+		/* Check TX ring producer/consumer. */
+		bge_txeof(sc, tx_cons);
+	    	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+			bge_start_locked(ifp);
+		BGE_UNLOCK(sc);
+	}
+}
+
 static void
 bge_intr(void *xsc)
 {
 	struct bge_softc *sc;
 	struct ifnet *ifp;
 	uint32_t statusword;
+	uint16_t rx_prod, tx_cons;
 
 	sc = xsc;
 
@@ -3451,7 +3626,14 @@ bge_intr(void *xsc)
 
 	/* Make sure the descriptor ring indexes are coherent. */
 	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
-	    sc->bge_cdata.bge_status_map, BUS_DMASYNC_POSTREAD);
+	    sc->bge_cdata.bge_status_map,
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+	rx_prod = sc->bge_ldata.bge_status_block->bge_idx[0].bge_rx_prod_idx;
+	tx_cons = sc->bge_ldata.bge_status_block->bge_idx[0].bge_tx_cons_idx;
+	sc->bge_ldata.bge_status_block->bge_status = 0;
+	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
+	    sc->bge_cdata.bge_status_map,
+	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
 	if ((sc->bge_asicrev == BGE_ASICREV_BCM5700 &&
 	    sc->bge_chipid != BGE_CHIPID_BCM5700_B2) ||
@@ -3460,21 +3642,18 @@ bge_intr(void *xsc)
 
 	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
 		/* Check RX return ring producer/consumer. */
-		bge_rxeof(sc);
+		bge_rxeof(sc, rx_prod, 1);
 	}
 
 	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
 		/* Check TX ring producer/consumer. */
-		bge_txeof(sc);
+		bge_txeof(sc, tx_cons);
 	}
 
 	if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
 	    !IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		bge_start_locked(ifp);
 
-	bus_dmamap_sync(sc->bge_cdata.bge_status_tag,
-	    sc->bge_cdata.bge_status_map, BUS_DMASYNC_PREREAD);
-
 	BGE_UNLOCK(sc);
 }
 
@@ -3630,7 +3809,7 @@ bge_cksum_pad(struct mbuf *m)
 			last = n;
 		}
 	}
-	
+
 	/* Now zero the pad area, to avoid the bge cksum-assist bug. */
 	memset(mtod(last, caddr_t) + last->m_len, 0, padlen);
 	last->m_len += padlen;
@@ -3639,6 +3818,72 @@ bge_cksum_pad(struct mbuf *m)
 	return (0);
 }
 
+static struct mbuf *
+bge_setup_tso(struct bge_softc *sc, struct mbuf *m, uint16_t *mss)
+{
+	struct ether_header *eh;
+	struct ip *ip;
+	struct tcphdr *tcp;
+	struct mbuf *n;
+	uint16_t hlen;
+	uint32_t ip_off, poff;
+
+	if (M_WRITABLE(m) == 0) {
+		/* Get a writable copy. */
+		n = m_dup(m, M_DONTWAIT);
+		m_freem(m);
+		if (n == NULL)
+			return (NULL);
+		m = n;
+	}
+	ip_off = sizeof(struct ether_header);
+	m = m_pullup(m, ip_off);
+	if (m == NULL)
+		return (NULL);
+	eh = mtod(m, struct ether_header *);
+	/* Check the existence of VLAN tag. */
+	if (eh->ether_type == htons(ETHERTYPE_VLAN)) {
+		ip_off = sizeof(struct ether_vlan_header);
+		m = m_pullup(m, ip_off);
+		if (m == NULL)
+			return (NULL);
+	}
+	m = m_pullup(m, ip_off + sizeof(struct ip));
+	if (m == NULL)
+		return (NULL);
+	ip = (struct ip *)(mtod(m, char *) + ip_off);
+	poff = ip_off + (ip->ip_hl << 2);
+	m = m_pullup(m, poff + sizeof(struct tcphdr));
+	if (m == NULL)
+		return (NULL);
+	tcp = (struct tcphdr *)(mtod(m, char *) + poff);
+	m = m_pullup(m, poff + sizeof(struct tcphdr) + tcp->th_off);
+	if (m == NULL)
+		return (NULL);
+	/*
+	 * It seems controller doesn't modify IP length and TCP pseudo
+	 * checksum. These checksum computed by upper stack should be 0.
+	 */
+	*mss = m->m_pkthdr.tso_segsz;
+	ip->ip_sum = 0;
+	ip->ip_len = htons(*mss + (ip->ip_hl << 2) + (tcp->th_off << 2));
+	/* Clear pseudo checksum computed by TCP stack. */
+	tcp->th_sum = 0;
+	/*
+	 * Broadcom controllers uses different descriptor format for
+	 * TSO depending on ASIC revision. Due to TSO-capable firmware
+	 * license issue and lower performance of firmware based TSO
+	 * we only support hardware based TSO which is applicable for
+	 * BCM5755 or newer controllers. Hardware based TSO uses 11
+	 * bits to store MSS and upper 5 bits are used to store IP/TCP
+	 * header length(including IP/TCP options). The header length
+	 * is expressed as 32 bits unit.
+	 */
+	hlen = ((ip->ip_hl << 2) + (tcp->th_off << 2)) >> 2;
+	*mss |= (hlen << 11);
+	return (m);
+}
+
 /*
  * Encapsulate an mbuf chain in the tx ring  by coupling the mbuf data
  * pointers to descriptors.
@@ -3651,11 +3896,19 @@ bge_encap(struct bge_softc *sc, struct mbuf **m_head, uint32_t *txidx)
 	struct bge_tx_bd	*d;
 	struct mbuf		*m = *m_head;
 	uint32_t		idx = *txidx;
-	uint16_t		csum_flags;
+	uint16_t		csum_flags, mss, vlan_tag;
 	int			nsegs, i, error;
 
 	csum_flags = 0;
-	if (m->m_pkthdr.csum_flags) {
+	mss = 0;
+	vlan_tag = 0;
+	if ((m->m_pkthdr.csum_flags & CSUM_TSO) != 0) {
+		*m_head = m = bge_setup_tso(sc, m, &mss);
+		if (*m_head == NULL)
+			return (ENOBUFS);
+		csum_flags |= BGE_TXBDFLAG_CPU_PRE_DMA |
+		    BGE_TXBDFLAG_CPU_POST_DMA;
+	} else if ((m->m_pkthdr.csum_flags & BGE_CSUM_FEATURES) != 0) {
 		if (m->m_pkthdr.csum_flags & CSUM_IP)
 			csum_flags |= BGE_TXBDFLAG_IP_CSUM;
 		if (m->m_pkthdr.csum_flags & (CSUM_TCP | CSUM_UDP)) {
@@ -3673,6 +3926,26 @@ bge_encap(struct bge_softc *sc, struct mbuf **m_head, uint32_t *txidx)
 			csum_flags |= BGE_TXBDFLAG_IP_FRAG;
 	}
 
+	if ((m->m_pkthdr.csum_flags & CSUM_TSO) == 0 &&
+	    sc->bge_forced_collapse > 0 &&
+	    (sc->bge_flags & BGE_FLAG_PCIE) != 0 && m->m_next != NULL) {
+		/*
+		 * Forcedly collapse mbuf chains to overcome hardware
+		 * limitation which only support a single outstanding
+		 * DMA read operation.
+		 */
+		if (sc->bge_forced_collapse == 1)
+			m = m_defrag(m, M_DONTWAIT);
+		else
+			m = m_collapse(m, M_DONTWAIT, sc->bge_forced_collapse);
+		if (m == NULL) {
+			m_freem(*m_head);
+			*m_head = NULL;
+			return (ENOBUFS);
+		}
+		*m_head = m;
+	}
+
 	map = sc->bge_cdata.bge_tx_dmamap[idx];
 	error = bus_dmamap_load_mbuf_sg(sc->bge_cdata.bge_tx_mtag, map, m, segs,
 	    &nsegs, BUS_DMA_NOWAIT);
@@ -3694,23 +3967,37 @@ bge_encap(struct bge_softc *sc, struct mbuf **m_head, uint32_t *txidx)
 	} else if (error != 0)
 		return (error);
 
-	/*
-	 * Sanity check: avoid coming within 16 descriptors
-	 * of the end of the ring.
-	 */
-	if (nsegs > (BGE_TX_RING_CNT - sc->bge_txcnt - 16)) {
+	/* Check if we have enough free send BDs. */
+	if (sc->bge_txcnt + nsegs >= BGE_TX_RING_CNT) {
 		bus_dmamap_unload(sc->bge_cdata.bge_tx_mtag, map);
 		return (ENOBUFS);
 	}
 
 	bus_dmamap_sync(sc->bge_cdata.bge_tx_mtag, map, BUS_DMASYNC_PREWRITE);
 
+#if __FreeBSD_version > 700022
+	if (m->m_flags & M_VLANTAG) {
+		csum_flags |= BGE_TXBDFLAG_VLAN_TAG;
+		vlan_tag = m->m_pkthdr.ether_vtag;
+	}
+#else
+	{
+		struct m_tag		*mtag;
+
+		if ((mtag = VLAN_OUTPUT_TAG(sc->bge_ifp, m)) != NULL) {
+			csum_flags |= BGE_TXBDFLAG_VLAN_TAG;
+			vlan_tag = VLAN_TAG_VALUE(mtag);
+		}
+	}
+#endif
 	for (i = 0; ; i++) {
 		d = &sc->bge_ldata.bge_tx_ring[idx];
 		d->bge_addr.bge_addr_lo = BGE_ADDR_LO(segs[i].ds_addr);
 		d->bge_addr.bge_addr_hi = BGE_ADDR_HI(segs[i].ds_addr);
 		d->bge_len = segs[i].ds_len;
 		d->bge_flags = csum_flags;
+		d->bge_vlan_tag = vlan_tag;
+		d->bge_mss = mss;
 		if (i == nsegs - 1)
 			break;
 		BGE_INC(idx, BGE_TX_RING_CNT);
@@ -3719,26 +4006,6 @@ bge_encap(struct bge_softc *sc, struct mbuf **m_head, uint32_t *txidx)
 	/* Mark the last segment as end of packet... */
 	d->bge_flags |= BGE_TXBDFLAG_END;
 
-	/* ... and put VLAN tag into first segment.  */
-	d = &sc->bge_ldata.bge_tx_ring[*txidx];
-#if __FreeBSD_version > 700022
-	if (m->m_flags & M_VLANTAG) {
-		d->bge_flags |= BGE_TXBDFLAG_VLAN_TAG;
-		d->bge_vlan_tag = m->m_pkthdr.ether_vtag;
-	} else
-		d->bge_vlan_tag = 0;
-#else
-	{
-		struct m_tag		*mtag;
-
-		if ((mtag = VLAN_OUTPUT_TAG(sc->bge_ifp, m)) != NULL) {
-			d->bge_flags |= BGE_TXBDFLAG_VLAN_TAG;
-			d->bge_vlan_tag = VLAN_TAG_VALUE(mtag);
-		} else
-			d->bge_vlan_tag = 0;
-	}
-#endif
-
 	/*
 	 * Insure that the map for this transmission
 	 * is placed at the array index of the last descriptor
@@ -3763,18 +4030,25 @@ static void
 bge_start_locked(struct ifnet *ifp)
 {
 	struct bge_softc *sc;
-	struct mbuf *m_head = NULL;
+	struct mbuf *m_head;
 	uint32_t prodidx;
-	int count = 0;
+	int count;
 
 	sc = ifp->if_softc;
+	BGE_LOCK_ASSERT(sc);
 
-	if (!sc->bge_link || IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+	if (!sc->bge_link ||
+	    (ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
+	    IFF_DRV_RUNNING)
 		return;
 
 	prodidx = sc->bge_tx_prodidx;
 
-	while(sc->bge_cdata.bge_tx_chain[prodidx] == NULL) {
+	for (count = 0; !IFQ_DRV_IS_EMPTY(&ifp->if_snd);) {
+		if (sc->bge_txcnt > BGE_TX_RING_CNT - 16) {
+			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
+			break;
+		}
 		IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head);
 		if (m_head == NULL)
 			break;
@@ -3827,24 +4101,22 @@ bge_start_locked(struct ifnet *ifp)
 #endif
 	}
 
-	if (count == 0)
-		/* No packets were dequeued. */
-		return;
-
-	bus_dmamap_sync(sc->bge_cdata.bge_tx_ring_tag,
-	    sc->bge_cdata.bge_tx_ring_map, BUS_DMASYNC_PREWRITE);
-	/* Transmit. */
-	bge_writembx(sc, BGE_MBX_TX_HOST_PROD0_LO, prodidx);
-	/* 5700 b2 errata */
-	if (sc->bge_chiprev == BGE_CHIPREV_5700_BX)
+	if (count > 0) {
+		bus_dmamap_sync(sc->bge_cdata.bge_tx_ring_tag,
+		    sc->bge_cdata.bge_tx_ring_map, BUS_DMASYNC_PREWRITE);
+		/* Transmit. */
 		bge_writembx(sc, BGE_MBX_TX_HOST_PROD0_LO, prodidx);
+		/* 5700 b2 errata */
+		if (sc->bge_chiprev == BGE_CHIPREV_5700_BX)
+			bge_writembx(sc, BGE_MBX_TX_HOST_PROD0_LO, prodidx);
 
-	sc->bge_tx_prodidx = prodidx;
+		sc->bge_tx_prodidx = prodidx;
 
-	/*
-	 * Set a timeout in case the chip goes out to lunch.
-	 */
-	sc->bge_timer = 5;
+		/*
+		 * Set a timeout in case the chip goes out to lunch.
+		 */
+		sc->bge_timer = 5;
+	}
 }
 
 /*
@@ -3984,7 +4256,7 @@ bge_init_locked(struct bge_softc *sc)
 	BGE_CLRBIT(sc, BGE_PCI_MISC_CTL, BGE_PCIMISCCTL_MASK_PCI_INTR);
 	bge_writembx(sc, BGE_MBX_IRQ0_LO, 0);
 	}
-	
+
 	bge_ifmedia_upd_locked(ifp);
 
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
@@ -4240,14 +4512,23 @@ bge_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 			ifp->if_capenable ^= IFCAP_HWCSUM;
 			if (IFCAP_HWCSUM & ifp->if_capenable &&
 			    IFCAP_HWCSUM & ifp->if_capabilities)
-				ifp->if_hwassist = BGE_CSUM_FEATURES;
+				ifp->if_hwassist |= BGE_CSUM_FEATURES;
 			else
-				ifp->if_hwassist = 0;
+				ifp->if_hwassist &= ~BGE_CSUM_FEATURES;
 #ifdef VLAN_CAPABILITIES
 			VLAN_CAPABILITIES(ifp);
 #endif
 		}
 
+		if ((mask & IFCAP_TSO4) != 0 &&
+		    (ifp->if_capabilities & IFCAP_TSO4) != 0) {
+			ifp->if_capenable ^= IFCAP_TSO4;
+			if ((ifp->if_capenable & IFCAP_TSO4) != 0)
+				ifp->if_hwassist |= CSUM_TSO;
+			else
+				ifp->if_hwassist &= ~CSUM_TSO;
+		}
+
 		if (mask & IFCAP_VLAN_MTU) {
 			ifp->if_capenable ^= IFCAP_VLAN_MTU;
 			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
@@ -4301,17 +4582,11 @@ static void
 bge_stop(struct bge_softc *sc)
 {
 	struct ifnet *ifp;
-	struct ifmedia_entry *ifm;
-	struct mii_data *mii = NULL;
-	int mtmp, itmp;
 
 	BGE_LOCK_ASSERT(sc);
 
 	ifp = sc->bge_ifp;
 
-	if ((sc->bge_flags & BGE_FLAG_TBI) == 0)
-		mii = device_get_softc(sc->bge_miibus);
-
 	callout_stop(&sc->bge_stat_ch);
 
 	/* Disable host interrupts. */
@@ -4367,7 +4642,7 @@ bge_stop(struct bge_softc *sc)
 	bge_sig_legacy(sc, BGE_RESET_STOP);
 	bge_sig_post_reset(sc, BGE_RESET_STOP);
 
-	/* 
+	/*
 	 * Keep the ASF firmware running if up.
 	 */
 	if (sc->bge_asf_mode & ASF_STACKUP)
@@ -4385,27 +4660,6 @@ bge_stop(struct bge_softc *sc)
 	/* Free TX buffers. */
 	bge_free_tx_ring(sc);
 
-	/*
-	 * Isolate/power down the PHY, but leave the media selection
-	 * unchanged so that things will be put back to normal when
-	 * we bring the interface back up.
-	 */
-	if ((sc->bge_flags & BGE_FLAG_TBI) == 0) {
-		itmp = ifp->if_flags;
-		ifp->if_flags |= IFF_UP;
-		/*
-		 * If we are called from bge_detach(), mii is already NULL.
-		 */
-		if (mii != NULL) {
-			ifm = mii->mii_media.ifm_cur;
-			mtmp = ifm->ifm_media;
-			ifm->ifm_media = IFM_ETHER | IFM_NONE;
-			mii_mediachg(mii);
-			ifm->ifm_media = mtmp;
-		}
-		ifp->if_flags = itmp;
-	}
-
 	sc->bge_tx_saved_considx = BGE_TXCONS_UNSET;
 
 	/* Clear MAC's link state (PHY may still have link UP). */
@@ -4611,6 +4865,26 @@ bge_add_sysctls(struct bge_softc *sc)
 
 #endif
 
+	/*
+	 * A common design characteristic for many Broadcom client controllers
+	 * is that they only support a single outstanding DMA read operation
+	 * on the PCIe bus. This means that it will take twice as long to fetch
+	 * a TX frame that is split into header and payload buffers as it does
+	 * to fetch a single, contiguous TX frame (2 reads vs. 1 read). For
+	 * these controllers, coalescing buffers to reduce the number of memory
+	 * reads is effective way to get maximum performance(about 940Mbps).
+	 * Without collapsing TX buffers the maximum TCP bulk transfer
+	 * performance is about 850Mbps. However forcing coalescing mbufs
+	 * consumes a lot of CPU cycles, so leave it off by default.
+	 */
+	SYSCTL_ADD_INT(ctx, children, OID_AUTO, "forced_collapse",
+	    CTLFLAG_RW, &sc->bge_forced_collapse, 0,
+	    "Number of fragmented TX buffers of a frame allowed before "
+	    "forced collapsing");
+	resource_int_value(device_get_name(sc->bge_dev),
+	    device_get_unit(sc->bge_dev), "forced_collapse",
+	    &sc->bge_forced_collapse);
+
 	if (BGE_IS_5705_PLUS(sc))
 		return;
 
@@ -4707,7 +4981,7 @@ bge_add_sysctls(struct bge_softc *sc)
 	BGE_SYSCTL_STAT(sc, ctx, "Multiple Collision Frames",
 	    children, txstats.dot3StatsMultipleCollisionFrames,
 	    "MultipleCollisionFrames");
-	BGE_SYSCTL_STAT(sc, ctx, "Deferred Transmissions", 
+	BGE_SYSCTL_STAT(sc, ctx, "Deferred Transmissions",
 	    children, txstats.dot3StatsDeferredTransmissions,
 	    "DeferredTransmissions");
 	BGE_SYSCTL_STAT(sc, ctx, "Excessive Collisions",
@@ -4716,7 +4990,7 @@ bge_add_sysctls(struct bge_softc *sc)
 	BGE_SYSCTL_STAT(sc, ctx, "Late Collisions",
 	    children, txstats.dot3StatsLateCollisions,
 	    "LateCollisions");
-	BGE_SYSCTL_STAT(sc, ctx, "Outbound Unicast Packets", 
+	BGE_SYSCTL_STAT(sc, ctx, "Outbound Unicast Packets",
 	    children, txstats.ifHCOutUcastPkts, "UcastPkts");
 	BGE_SYSCTL_STAT(sc, ctx, "Outbound Multicast Packets",
 	    children, txstats.ifHCOutMulticastPkts, "MulticastPkts");
diff --git a/sys/dev/bge/if_bgereg.h b/sys/dev/bge/if_bgereg.h
index 99f0d4b3c9a..2694c77a6fb 100644
--- a/sys/dev/bge/if_bgereg.h
+++ b/sys/dev/bge/if_bgereg.h
@@ -1402,6 +1402,8 @@
 #define	BGE_RDMAMODE_MBUF_SBD_CRPT_ATTN	0x00002000
 #define	BGE_RDMAMODE_FIFO_SIZE_128	0x00020000
 #define	BGE_RDMAMODE_FIFO_LONG_BURST	0x00030000
+#define	BGE_RDMAMODE_TSO4_ENABLE	0x08000000
+#define	BGE_RDMAMODE_TSO6_ENABLE	0x10000000
 
 /* Read DMA status register */
 #define	BGE_RDMASTAT_PCI_TGT_ABRT_ATTN	0x00000004
@@ -1907,7 +1909,7 @@
 /*
  * This magic number is written to the firmware mailbox at 0xb50
  * before a software reset is issued.  After the internal firmware
- * has completed its initialization it will write the opposite of 
+ * has completed its initialization it will write the opposite of
  * this value, ~BGE_MAGIC_NUMBER, to the same location, allowing the
  * driver to synchronize with the firmware.
  */
@@ -1949,11 +1951,11 @@ struct bge_tx_bd {
 	uint16_t		bge_flags;
 	uint16_t		bge_len;
 	uint16_t		bge_vlan_tag;
-	uint16_t		bge_rsvd;
+	uint16_t		bge_mss;
 #else
 	uint16_t		bge_len;
 	uint16_t		bge_flags;
-	uint16_t		bge_rsvd;
+	uint16_t		bge_mss;
 	uint16_t		bge_vlan_tag;
 #endif
 };
@@ -2482,7 +2484,15 @@ struct bge_gib {
 #define	BGE_JSLOTS	384
 
 #define	BGE_NSEG_JUMBO	4
-#define	BGE_NSEG_NEW 32
+#define	BGE_NSEG_NEW	32
+#define	BGE_TSOSEG_SZ	4096
+
+/* Maximum DMA address for controllers that have 40bit DMA address bug. */
+#if (BUS_SPACE_MAXADDR < 0xFFFFFFFFFF)
+#define	BGE_DMA_MAXADDR		BUS_SPACE_MAXADDR
+#else
+#define	BGE_DMA_MAXADDR		0xFFFFFFFFFF
+#endif
 
 /*
  * Ring structures. Most of these reside in host memory and we tell
@@ -2584,6 +2594,9 @@ struct bge_softc {
 	struct resource		*bge_irq;
 	struct resource		*bge_res;
 	struct ifmedia		bge_ifmedia;	/* TBI media info */
+	int			bge_expcap;
+	int			bge_msicap;
+	int			bge_pcixcap;
 	uint32_t		bge_flags;
 #define	BGE_FLAG_TBI		0x00000001
 #define	BGE_FLAG_JUMBO		0x00000002
@@ -2592,11 +2605,14 @@ struct bge_softc {
 #define	BGE_FLAG_MSI		0x00000100
 #define	BGE_FLAG_PCIX		0x00000200
 #define	BGE_FLAG_PCIE		0x00000400
+#define	BGE_FLAG_TSO		0x00000800
 #define	BGE_FLAG_5700_FAMILY	0x00001000
 #define	BGE_FLAG_5705_PLUS	0x00002000
 #define	BGE_FLAG_5714_FAMILY	0x00004000
 #define	BGE_FLAG_575X_PLUS	0x00008000
 #define	BGE_FLAG_5755_PLUS	0x00010000
+#define	BGE_FLAG_40BIT_BUG	0x00020000
+#define	BGE_FLAG_4G_BNDRY_BUG	0x00040000
 #define	BGE_FLAG_RX_ALIGNBUG	0x00100000
 #define	BGE_FLAG_NO_3LED	0x00200000
 #define	BGE_FLAG_ADC_BUG	0x00400000
@@ -2631,6 +2647,7 @@ struct bge_softc {
 	int			bge_link;	/* link state */
 	int			bge_link_evt;	/* pending link event */
 	int			bge_timer;
+	int			bge_forced_collapse;
 	struct callout		bge_stat_ch;
 	uint32_t		bge_rx_discards;
 	uint32_t		bge_tx_discards;
@@ -2638,6 +2655,8 @@ struct bge_softc {
 #ifdef DEVICE_POLLING
 	int			rxcycles;
 #endif /* DEVICE_POLLING */
+	struct task		bge_intr_task;
+	struct taskqueue	*bge_tq;
 };
 
 #define	BGE_LOCK_INIT(_sc, _name) \
diff --git a/sys/dev/bktr/bktr_os.c b/sys/dev/bktr/bktr_os.c
index 327c4bbdb95..b667700228d 100644
--- a/sys/dev/bktr/bktr_os.c
+++ b/sys/dev/bktr/bktr_os.c
@@ -794,7 +794,8 @@ bktr_ioctl( struct cdev *dev, ioctl_cmd_t cmd, caddr_t arg, int flag, struct thr
  * 
  */
 static int
-bktr_mmap( struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot )
+bktr_mmap( struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nprot, vm_memattr_t *memattr )
 {
 	int		unit;
 	bktr_ptr_t	bktr;
diff --git a/sys/dev/cardbus/cardbus.c b/sys/dev/cardbus/cardbus.c
index 8a333ada338..6edf183c8be 100644
--- a/sys/dev/cardbus/cardbus.c
+++ b/sys/dev/cardbus/cardbus.c
@@ -80,8 +80,6 @@ static void	cardbus_driver_added(device_t cbdev, driver_t *driver);
 static int	cardbus_probe(device_t cbdev);
 static int	cardbus_read_ivar(device_t cbdev, device_t child, int which,
 		    uintptr_t *result);
-static void	cardbus_release_all_resources(device_t cbdev,
-		    struct cardbus_devinfo *dinfo);
 
 /************************************************************************/
 /* Probe/Attach								*/
@@ -226,16 +224,11 @@ cardbus_detach_card(device_t cbdev)
 
 	for (tmp = 0; tmp < numdevs; tmp++) {
 		struct cardbus_devinfo *dinfo = device_get_ivars(devlist[tmp]);
-		int status = device_get_state(devlist[tmp]);
 
 		if (dinfo->pci.cfg.dev != devlist[tmp])
 			device_printf(cbdev, "devinfo dev mismatch\n");
-		if (status == DS_ATTACHED || status == DS_BUSY)
-			device_detach(devlist[tmp]);
-		cardbus_release_all_resources(cbdev, dinfo);
 		cardbus_device_destroy(dinfo);
-		device_delete_child(cbdev, devlist[tmp]);
-		pci_freecfg((struct pci_devinfo *)dinfo);
+		pci_delete_child(cbdev, devlist[tmp]);
 	}
 	POWER_DISABLE_SOCKET(device_get_parent(cbdev), cbdev);
 	free(devlist, M_TEMP);
@@ -283,28 +276,6 @@ cardbus_driver_added(device_t cbdev, driver_t *driver)
 	free(devlist, M_TEMP);
 }
 
-static void
-cardbus_release_all_resources(device_t cbdev, struct cardbus_devinfo *dinfo)
-{
-	struct resource_list_entry *rle;
-	device_t dev;
-
-	/* Turn off access to resources we're about to free */
-	dev = dinfo->pci.cfg.dev;
-	pci_write_config(dev, PCIR_COMMAND,
-	    pci_read_config(dev, PCIR_COMMAND, 2) &
-	    ~(PCIM_CMD_MEMEN | PCIM_CMD_PORTEN), 2);
-	/* Free all allocated resources */
-	STAILQ_FOREACH(rle, &dinfo->pci.resources, link) {
-		if (rle->res) {
-			BUS_RELEASE_RESOURCE(device_get_parent(cbdev),
-			    cbdev, rle->type, rle->rid, rle->res);
-			rle->res = NULL;
-		}
-	}
-	resource_list_free(&dinfo->pci.resources);
-}
-
 /************************************************************************/
 /* Other Bus Methods							*/
 /************************************************************************/
diff --git a/sys/dev/cardbus/cardbus_cis.c b/sys/dev/cardbus/cardbus_cis.c
index 7e589498fbf..2cfea19203f 100644
--- a/sys/dev/cardbus/cardbus_cis.c
+++ b/sys/dev/cardbus/cardbus_cis.c
@@ -402,16 +402,11 @@ static int
 cardbus_read_tuple_mem(device_t cbdev, struct resource *res, uint32_t start,
     uint32_t *off, int *tupleid, int *len, uint8_t *tupledata)
 {
-	bus_space_tag_t bt;
-	bus_space_handle_t bh;
 	int ret;
 
-	bt = rman_get_bustag(res);
-	bh = rman_get_bushandle(res);
-
-	*tupleid = bus_space_read_1(bt, bh, start + *off);
-	*len = bus_space_read_1(bt, bh, start + *off + 1);
-	bus_space_read_region_1(bt, bh, *off + start + 2, tupledata, *len);
+	*tupleid = bus_read_1(res, start + *off);
+	*len = bus_read_1(res, start + *off + 1);
+	bus_read_region_1(res, *off + start + 2, tupledata, *len);
 	ret = 0;
 	*off += *len + 2;
 	return (ret);
@@ -435,9 +430,7 @@ cardbus_read_tuple_finish(device_t cbdev, device_t child, int rid,
 {
 	if (res != CIS_CONFIG_SPACE) {
 		bus_release_resource(child, SYS_RES_MEMORY, rid, res);
-		if (rid == PCIM_CIS_ASI_ROM)
-			pci_write_config(child, rid, pci_read_config(child,
-			    rid, 4) & ~PCIR_BIOS, 4);
+		bus_delete_resource(child, SYS_RES_MEMORY, rid);
 	}
 }
 
@@ -482,14 +475,9 @@ cardbus_read_tuple_init(device_t cbdev, device_t child, uint32_t *start,
 		return (NULL);
 	}
 	DEVPRINTF((cbdev, "CIS Mapped to %#lx\n", rman_get_start(res)));
-	if (*rid == PCIR_BIOS)
-		pci_write_config(child, *rid,
-		    rman_get_start(res) | PCIM_BIOS_ENABLE, 4);
 
 	/* Flip to the right ROM image if CIS is in ROM */
 	if (space == PCIM_CIS_ASI_ROM) {
-		bus_space_tag_t bt;
-		bus_space_handle_t bh;
 		uint32_t imagesize;
 		uint32_t imagebase = 0;
 		uint32_t pcidata;
@@ -497,19 +485,16 @@ cardbus_read_tuple_init(device_t cbdev, device_t child, uint32_t *start,
 		int romnum = 0;
 		int imagenum;
 
-		bt = rman_get_bustag(res);
-		bh = rman_get_bushandle(res);
-
 		imagenum = (*start & PCIM_CIS_ROM_MASK) >> 28;
 		for (romnum = 0;; romnum++) {
-			romsig = bus_space_read_2(bt, bh,
+			romsig = bus_read_2(res,
 			    imagebase + CARDBUS_EXROM_SIGNATURE);
 			if (romsig != 0xaa55) {
 				device_printf(cbdev, "Bad header in rom %d: "
 				    "[%x] %04x\n", romnum, imagebase +
 				    CARDBUS_EXROM_SIGNATURE, romsig);
-				bus_release_resource(child, SYS_RES_MEMORY,
-				    *rid, res);
+				cardbus_read_tuple_finish(cbdev, child, *rid,
+				    res);
 				*rid = 0;
 				return (NULL);
 			}
@@ -522,9 +507,9 @@ cardbus_read_tuple_init(device_t cbdev, device_t child, uint32_t *start,
 				break;
 
 			/* Find out where the next Option ROM image is */
-			pcidata = imagebase + bus_space_read_2(bt, bh,
+			pcidata = imagebase + bus_read_2(res,
 			    imagebase + CARDBUS_EXROM_DATA_PTR);
-			imagesize = bus_space_read_2(bt, bh,
+			imagesize = bus_read_2(res,
 			    pcidata + CARDBUS_EXROM_DATA_IMAGE_LENGTH);
 
 			if (imagesize == 0) {
@@ -541,12 +526,12 @@ cardbus_read_tuple_init(device_t cbdev, device_t child, uint32_t *start,
 			/* Image size is in 512 byte units */
 			imagesize <<= 9;
 
-			if ((bus_space_read_1(bt, bh, pcidata +
+			if ((bus_read_1(res, pcidata +
 			    CARDBUS_EXROM_DATA_INDICATOR) & 0x80) != 0) {
 				device_printf(cbdev, "Cannot find CIS in "
 				    "Option ROM\n");
-				bus_release_resource(child, SYS_RES_MEMORY,
-				    *rid, res);
+				cardbus_read_tuple_finish(cbdev, child, *rid,
+				    res);
 				*rid = 0;
 				return (NULL);
 			}
diff --git a/sys/dev/ce/if_ce.c b/sys/dev/ce/if_ce.c
index 2118c3d8cef..f04fd0916e6 100644
--- a/sys/dev/ce/if_ce.c
+++ b/sys/dev/ce/if_ce.c
@@ -171,11 +171,11 @@ typedef struct _drv_t {
 	node_p	node;
 	struct	ifqueue queue;
 	struct	ifqueue hi_queue;
-	short	timeout;
-	struct	callout timeout_handle;
 #else
 	struct	ifnet *ifp;
 #endif
+	short	timeout;
+	struct	callout timeout_handle;
 #if __FreeBSD_version >= 500000
 	struct	cdev *devt;
 #else /* __FreeBSD_version < 500000 */
@@ -211,13 +211,13 @@ static void ce_up (drv_t *d);
 static void ce_start (drv_t *d);
 static void ce_down (drv_t *d);
 static void ce_watchdog (drv_t *d);
+static void ce_watchdog_timer (void *arg);
 #ifdef NETGRAPH
 extern struct ng_type typestruct;
 #else
 static void ce_ifstart (struct ifnet *ifp);
 static void ce_tlf (struct sppp *sp);
 static void ce_tls (struct sppp *sp);
-static void ce_ifwatchdog (struct ifnet *ifp);
 static int ce_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data);
 static void ce_initialize (void *softc);
 #endif
@@ -677,6 +677,7 @@ static int ce_attach (device_t dev)
 			continue;
 		d = c->sys;
 
+		callout_init (&d->timeout_handle, CALLOUT_MPSAFE);
 #ifdef NETGRAPH
 		if (ng_make_node_common (&typestruct, &d->node) != 0) {
 			printf ("%s: cannot make common node\n", d->name);
@@ -685,7 +686,6 @@ static int ce_attach (device_t dev)
 		}
 #if __FreeBSD_version >= 500000
 		NG_NODE_SET_PRIVATE (d->node, d);
-		callout_init (&d->timeout_handle, CALLOUT_MPSAFE);
 #else
 		d->node->private = d;
 #endif
@@ -731,7 +731,6 @@ static int ce_attach (device_t dev)
 		d->ifp->if_flags	= IFF_POINTOPOINT | IFF_MULTICAST;
 		d->ifp->if_ioctl	= ce_sioctl;
 		d->ifp->if_start	= ce_ifstart;
-		d->ifp->if_watchdog	= ce_ifwatchdog;
 		d->ifp->if_init		= ce_initialize;
 		d->rqueue.ifq_maxlen	= IFQ_MAXLEN;
 #if __FreeBSD_version >= 500000
@@ -806,6 +805,7 @@ static int ce_detach (device_t dev)
 
 		if (! d || ! d->chan)
 			continue;
+		callout_stop (&d->timeout_handle);
 #ifndef NETGRAPH
 		/* Detach from the packet filter list of interfaces. */
 		bpfdetach (d->ifp);
@@ -855,13 +855,12 @@ static int ce_detach (device_t dev)
 	TAU32_DestructiveHalt (b->ddk.pControllerObject, 0);
 	bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->ce_res);
 
-	s = splimp ();
-	CE_LOCK (bd);
 	for (c = b->chan; c < b->chan + NCHAN; ++c) {
 		drv_t *d = (drv_t*) c->sys;
 
 		if (! d || ! d->chan)
 			continue;
+		callout_drain (&d->timeout_handle);
 		channel [b->num * NCHAN + c->num] = 0;
 		/* Deallocate buffers. */
 		ce_bus_dma_mem_free (&d->dmamem);
@@ -869,8 +868,6 @@ static int ce_detach (device_t dev)
 	adapter [b->num] = 0;
 	ce_bus_dma_mem_free (&bd->dmamem);
 	free (b, M_DEVBUF);
-	CE_UNLOCK (bd);
-	splx (s);
 #if __FreeBSD_version >= 504000
 	mtx_destroy (&bd->ce_mtx);
 #endif
@@ -888,13 +885,6 @@ static void ce_ifstart (struct ifnet *ifp)
 	CE_UNLOCK (bd);
 }
 
-static void ce_ifwatchdog (struct ifnet *ifp)
-{
-	drv_t *d = ifp->if_softc;
-
-	ce_watchdog (d);
-}
-
 static void ce_tlf (struct sppp *sp)
 {
 	drv_t *d = SP2IFP(sp)->if_softc;
@@ -989,6 +979,7 @@ static void ce_down (drv_t *d)
 	ce_set_rts (d->chan, 0);
 
 	d->running = 0;
+	callout_stop (&d->timeout_handle);
 }
 
 /*
@@ -1055,11 +1046,7 @@ static void ce_send (drv_t *d)
 		}
 		m_freem (m);
 		/* Set up transmit timeout, if the transmit ring is not empty.*/
-#ifdef NETGRAPH
 		d->timeout = 10;
-#else
-		d->ifp->if_timer = 10;
-#endif
 	}
 #ifndef NETGRAPH
 #if __FreeBSD_version >= 600034
@@ -1082,6 +1069,7 @@ static void ce_start (drv_t *d)
 		if (! d->chan->rts)
 			ce_set_rts (d->chan, 1);
 		ce_send (d);
+		callout_reset (&d->timeout_handle, hz, ce_watchdog_timer, d);
 	}
 }
 
@@ -1092,11 +1080,8 @@ static void ce_start (drv_t *d)
  */
 static void ce_watchdog (drv_t *d)
 {
-	bdrv_t *bd = d->board->sys;
 	CE_DEBUG (d, ("device timeout\n"));
 	if (d->running) {
-		int s = splimp ();
-		CE_LOCK (bd);
 		ce_set_dtr (d->chan, 0);
 		ce_set_rts (d->chan, 0);
 /*		ce_stop_chan (d->chan);*/
@@ -1104,25 +1089,35 @@ static void ce_watchdog (drv_t *d)
 		ce_set_dtr (d->chan, 1);
 		ce_set_rts (d->chan, 1);
 		ce_start (d);
-		CE_UNLOCK (bd);
-		splx (s);
 	}
 }
 
+static void ce_watchdog_timer (void *arg)
+{
+	drv_t *d = arg;
+	bdrv_t *bd = d->board->sys;
+
+	CE_LOCK(bd);
+	if (d->timeout == 1)
+		ce_watchdog (d);
+	if (d->timeout)
+		d->timeout--;
+	callout_reset (&d->timeout_handle, hz, ce_watchdog_timer, d);
+	CE_UNLOCK(bd);
+}
+
 static void ce_transmit (ce_chan_t *c, void *attachment, int len)
 {
 	drv_t *d = c->sys;
 
-#ifdef NETGRAPH
 	d->timeout = 0;
-#else
+#ifndef NETGRAPH
 	++d->ifp->if_opackets;
 #if __FreeBSD_version >=  600034
 	d->ifp->if_flags &= ~IFF_DRV_OACTIVE;
 #else
 	d->ifp->if_flags &= ~IFF_OACTIVE;
 #endif
-	d->ifp->if_timer = 0;
 #endif
 	ce_start (d);
 }
@@ -1195,16 +1190,14 @@ static void ce_error (ce_chan_t *c, int data)
 		break;
 	case CE_UNDERRUN:
 		CE_DEBUG (d, ("underrun error\n"));
-#ifdef NETGRAPH
 		d->timeout = 0;
-#else
+#ifndef NETGRAPH
 		++d->ifp->if_oerrors;
 #if __FreeBSD_version >= 600034
 		d->ifp->if_flags &= ~IFF_DRV_OACTIVE;
 #else
 		d->ifp->if_flags &= ~IFF_OACTIVE;
 #endif
-		d->ifp->if_timer = 0;
 #endif
 		ce_start (d);
 		break;
@@ -2507,19 +2500,6 @@ static int ng_ce_rmnode (node_p node)
 	return 0;
 }
 
-static void ng_ce_watchdog (void *arg)
-{
-	drv_t *d = arg;
-
-	if (d) {
-		if (d->timeout == 1)
-			ce_watchdog (d);
-		if (d->timeout)
-			d->timeout--;
-		callout_reset (&d->timeout_handle, hz, ng_ce_watchdog, d);
-	}
-}
-
 static int ng_ce_connect (hook_p hook)
 {
 #if __FreeBSD_version >= 500000
@@ -2530,7 +2510,7 @@ static int ng_ce_connect (hook_p hook)
 
 	if (d) {
 		CE_DEBUG (d, ("Connect\n"));
-		callout_reset (&d->timeout_handle, hz, ng_ce_watchdog, d);
+		callout_reset (&d->timeout_handle, hz, ce_watchdog_timer, d);
 	}
 	
 	return 0;
diff --git a/sys/dev/ciss/ciss.c b/sys/dev/ciss/ciss.c
index 39836ea7ea7..c5ad417e70c 100644
--- a/sys/dev/ciss/ciss.c
+++ b/sys/dev/ciss/ciss.c
@@ -418,6 +418,7 @@ ciss_attach(device_t dev)
 
     sc = device_get_softc(dev);
     sc->ciss_dev = dev;
+    mtx_init(&sc->ciss_mtx, "cissmtx", NULL, MTX_DEF);
 
     /*
      * Do PCI-specific init.
@@ -430,7 +431,6 @@ ciss_attach(device_t dev)
      */
     ciss_initq_free(sc);
     ciss_initq_notify(sc);
-    mtx_init(&sc->ciss_mtx, "cissmtx", NULL, MTX_DEF);
     callout_init_mtx(&sc->ciss_periodic, &sc->ciss_mtx, 0);
 
     /*
@@ -496,8 +496,11 @@ ciss_attach(device_t dev)
 
     error = 0;
  out:
-    if (error != 0)
+    if (error != 0) {
+	/* ciss_free() expects the mutex to be held */
+	mtx_lock(&sc->ciss_mtx);
 	ciss_free(sc);
+    }
     return(error);
 }
 
diff --git a/sys/dev/cm/smc90cx6.c b/sys/dev/cm/smc90cx6.c
index 1dda17ff6b3..a0dedd9d7af 100644
--- a/sys/dev/cm/smc90cx6.c
+++ b/sys/dev/cm/smc90cx6.c
@@ -124,7 +124,7 @@ static void cm_reset_locked(struct cm_softc *);
 void	cm_start(struct ifnet *);
 void	cm_start_locked(struct ifnet *);
 int	cm_ioctl(struct ifnet *, unsigned long, caddr_t);
-void	cm_watchdog(struct ifnet *);
+void	cm_watchdog(void *);
 void	cm_srint_locked(void *vsc);
 static	void cm_tint_locked(struct cm_softc *, int);
 void	cm_reconwatch_locked(void *);
@@ -194,11 +194,9 @@ cm_attach(dev)
 	ifp->if_output = arc_output;
 	ifp->if_start = cm_start;
 	ifp->if_ioctl = cm_ioctl;
-	ifp->if_watchdog  = cm_watchdog;
 	ifp->if_init = cm_init;
 	/* XXX IFQ_SET_READY(&ifp->if_snd); */
 	ifp->if_snd.ifq_maxlen = IFQ_MAXLEN;
-	ifp->if_timer = 0;
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX;
 
 	arc_ifattach(ifp, linkaddress);
@@ -210,6 +208,7 @@ cm_attach(dev)
 #endif
 
 	callout_init_mtx(&sc->sc_recon_ch, &sc->sc_mtx, 0);
+	callout_init_mtx(&sc->sc_watchdog_timer, &sc->sc_mtx, 0);
 
 	if_printf(ifp, "link addr 0x%02x (%d)\n", linkaddress, linkaddress);
 	return 0;
@@ -315,6 +314,7 @@ cm_reset_locked(sc)
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 
+	callout_reset(&sc->sc_watchdog_timer, hz, cm_watchdog, sc);
 	cm_start_locked(ifp);
 }
 
@@ -332,7 +332,8 @@ cm_stop_locked(sc)
 	GETREG(CMRESET);
 
 	/* Stop watchdog timer */
-	sc->sc_ifp->if_timer = 0;
+	callout_stop(&sc->sc_watchdog_timer);
+	sc->sc_timer = 0;
 }
 
 void
@@ -464,7 +465,7 @@ cm_start_locked(ifp)
 		PUTREG(CMCMD, CM_TX(buffer));
 		PUTREG(CMSTAT, sc->sc_intmask);
 
-		ifp->if_timer = ARCTIMEOUT;
+		sc->sc_timer = ARCTIMEOUT;
 	}
 	m_freem(m);
 
@@ -627,7 +628,7 @@ cm_tint_locked(sc, isr)
 	if (isr & CM_TMA || sc->sc_broadcast[buffer])
 		ifp->if_opackets++;
 #ifdef CMRETRANSMIT
-	else if (ifp->if_flags & IFF_LINK2 && ifp->if_timer > 0
+	else if (ifp->if_flags & IFF_LINK2 && sc->sc_timer > 0
 	    && --sc->sc_retransmits[buffer] > 0) {
 		/* retransmit same buffer */
 		PUTREG(CMCMD, CM_TX(buffer));
@@ -657,7 +658,7 @@ cm_tint_locked(sc, isr)
 		 */
 		PUTREG(CMCMD, CM_TX(buffer));
 		/* init watchdog timer */
-		ifp->if_timer = ARCTIMEOUT;
+		sc->sc_timer = ARCTIMEOUT;
 
 #if defined(CM_DEBUG) && (CM_DEBUG > 1)
 		if_printf(ifp,
@@ -669,7 +670,7 @@ cm_tint_locked(sc, isr)
 		sc->sc_intmask &= ~CM_TA;
 		PUTREG(CMSTAT, sc->sc_intmask);
 		/* ... and watchdog timer */
-		ifp->if_timer = 0;
+		sc->sc_timer = 0;
 
 #ifdef CM_DEBUG
 		if_printf(ifp, "tint: no more buffers to send, status 0x%02x\n",
@@ -920,12 +921,13 @@ cm_ioctl(ifp, command, data)
  * retransmission is implemented).
  */
 void
-cm_watchdog(ifp)
-	struct ifnet *ifp;
+cm_watchdog(void *arg)
 {
-	struct cm_softc *sc = ifp->if_softc;
+	struct cm_softc *sc;
 
-	CM_LOCK(sc);
+	sc = arg;
+	callout_reset(&sc->sc_watchdog_timer, hz, cm_watchdog, sc);
+	if (sc->sc_timer == 0 || --sc->sc_timer > 0)
+		return;
 	PUTREG(CMCMD, CM_TXDIS);
-	CM_UNLOCK(sc);
 }
diff --git a/sys/dev/cm/smc90cx6var.h b/sys/dev/cm/smc90cx6var.h
index fe9cdbcb209..65b06a8b622 100644
--- a/sys/dev/cm/smc90cx6var.h
+++ b/sys/dev/cm/smc90cx6var.h
@@ -77,6 +77,8 @@ struct cm_softc {
 	u_long	sc_reconcount_excessive; /* for the above */
 #define ARC_EXCESSIVE_RECONS 20
 #define ARC_EXCESSIVE_RECONS_REWARN 400
+	struct callout sc_watchdog_timer;
+	int	sc_timer;
 	u_char	sc_intmask;
 	u_char	sc_rx_act;		/* 2..3 */
 	u_char	sc_tx_act;		/* 0..1 */
diff --git a/sys/dev/cp/if_cp.c b/sys/dev/cp/if_cp.c
index 75e329738aa..f6eeed5058e 100644
--- a/sys/dev/cp/if_cp.c
+++ b/sys/dev/cp/if_cp.c
@@ -117,12 +117,12 @@ typedef struct _drv_t {
 	node_p	node;
 	struct	ifqueue queue;
 	struct	ifqueue hi_queue;
-	short	timeout;
-	struct	callout timeout_handle;
 #else
 	struct	ifqueue queue;
 	struct	ifnet *ifp;
 #endif
+	short	timeout;
+	struct	callout timeout_handle;
 	struct	cdev *devt;
 } drv_t;
 
@@ -151,13 +151,13 @@ static void cp_up (drv_t *d);
 static void cp_start (drv_t *d);
 static void cp_down (drv_t *d);
 static void cp_watchdog (drv_t *d);
+static void cp_watchdog_timer (void *arg);
 #ifdef NETGRAPH
 extern struct ng_type typestruct;
 #else
 static void cp_ifstart (struct ifnet *ifp);
 static void cp_tlf (struct sppp *sp);
 static void cp_tls (struct sppp *sp);
-static void cp_ifwatchdog (struct ifnet *ifp);
 static int cp_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data);
 static void cp_initialize (void *softc);
 #endif
@@ -490,6 +490,7 @@ static int cp_attach (device_t dev)
 		d->board = b;
 		d->chan = c;
 		c->sys = d;
+		callout_init (&d->timeout_handle, CALLOUT_MPSAFE);
 #ifdef NETGRAPH
 		if (ng_make_node_common (&typestruct, &d->node) != 0) {
 			printf ("%s: cannot make common node\n", d->name);
@@ -508,7 +509,6 @@ static int cp_attach (device_t dev)
 		d->hi_queue.ifq_maxlen = IFQ_MAXLEN;
 		mtx_init (&d->queue.ifq_mtx, "cp_queue", NULL, MTX_DEF);
 		mtx_init (&d->hi_queue.ifq_mtx, "cp_queue_hi", NULL, MTX_DEF);
-		callout_init (&d->timeout_handle, CALLOUT_MPSAFE);
 #else /*NETGRAPH*/
 		d->ifp = if_alloc(IFT_PPP);
 		if (d->ifp == NULL) {
@@ -521,7 +521,6 @@ static int cp_attach (device_t dev)
 		d->ifp->if_flags	= IFF_POINTOPOINT | IFF_MULTICAST;
 		d->ifp->if_ioctl	= cp_sioctl;
 		d->ifp->if_start	= cp_ifstart;
-		d->ifp->if_watchdog	= cp_ifwatchdog;
 		d->ifp->if_init		= cp_initialize;
 		d->queue.ifq_maxlen	= NRBUF;
 		mtx_init (&d->queue.ifq_mtx, "cp_queue", NULL, MTX_DEF);
@@ -603,6 +602,7 @@ static int cp_detach (device_t dev)
 
 		if (! d || ! d->chan->type)
 			continue;
+		callout_stop (&d->timeout_handle);
 #ifndef NETGRAPH
 		/* Detach from the packet filter list of interfaces. */
 		bpfdetach (d->ifp);
@@ -639,12 +639,12 @@ static int cp_detach (device_t dev)
 	callout_drain (&led_timo[b->num]);
 	splx (s);
 
-	s = splimp ();
 	for (c = b->chan; c < b->chan + NCHAN; ++c) {
 		drv_t *d = (drv_t*) c->sys;
 
 		if (! d || ! d->chan->type)
 			continue;
+		callout_drain (&d->timeout_handle);
 		channel [b->num*NCHAN + c->num] = 0;
 		/* Deallocate buffers. */
 		cp_bus_dma_mem_free (&d->dmamem);
@@ -652,7 +652,6 @@ static int cp_detach (device_t dev)
 	adapter [b->num] = 0;
 	cp_bus_dma_mem_free (&bd->dmamem);
 	free (b, M_DEVBUF);
-	splx (s);
 	mtx_destroy (&bd->cp_mtx);
 	return 0;
 }
@@ -668,13 +667,6 @@ static void cp_ifstart (struct ifnet *ifp)
 	CP_UNLOCK (bd);
 }
 
-static void cp_ifwatchdog (struct ifnet *ifp)
-{
-	drv_t *d = ifp->if_softc;
-
-	cp_watchdog (d);
-}
-
 static void cp_tlf (struct sppp *sp)
 {
 	drv_t *d = SP2IFP(sp)->if_softc;
@@ -766,6 +758,7 @@ static void cp_down (drv_t *d)
 	cp_set_rts (d->chan, 0);
 
 	d->running = 0;
+	callout_stop (&d->timeout_handle);
 }
 
 /*
@@ -827,11 +820,7 @@ static void cp_send (drv_t *d)
 		}
 		m_freem (m);
 		/* Set up transmit timeout, if the transmit ring is not empty.*/
-#ifdef NETGRAPH
 		d->timeout = 10;
-#else
-		d->ifp->if_timer = 10;
-#endif
 	}
 #ifndef NETGRAPH
 	d->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
@@ -850,6 +839,7 @@ static void cp_start (drv_t *d)
 		if (! d->chan->rts)
 			cp_set_rts (d->chan, 1);
 		cp_send (d);
+		callout_reset (&d->timeout_handle, hz, cp_watchdog_timer, d);
 	}
 }
 
@@ -860,12 +850,8 @@ static void cp_start (drv_t *d)
  */
 static void cp_watchdog (drv_t *d)
 {
-	bdrv_t *bd = d->board->sys;
 	CP_DEBUG (d, ("device timeout\n"));
 	if (d->running) {
-		int s = splimp ();
-
-		CP_LOCK (bd);
 		cp_stop_chan (d->chan);
 		cp_stop_e1 (d->chan);
 		cp_start_e1 (d->chan);
@@ -873,21 +859,31 @@ static void cp_watchdog (drv_t *d)
 		cp_set_dtr (d->chan, 1);
 		cp_set_rts (d->chan, 1);
 		cp_start (d);
-		CP_UNLOCK (bd);
-		splx (s);
 	}
 }
 
+static void cp_watchdog_timer (void *arg)
+{
+	drv_t *d = arg;
+	bdrv_t *bd = d->board->sys;
+
+	CP_LOCK (bd);
+	if (d->timeout == 1)
+		cp_watchdog (d);
+	if (d->timeout)
+		d->timeout--;
+	callout_reset (&d->timeout_handle, hz, cp_watchdog_timer, d);
+	CP_UNLOCK (bd);
+}
+
 static void cp_transmit (cp_chan_t *c, void *attachment, int len)
 {
 	drv_t *d = c->sys;
 
-#ifdef NETGRAPH
 	d->timeout = 0;
-#else
+#ifndef NETGRAPH
 	++d->ifp->if_opackets;
 	d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-	d->ifp->if_timer = 0;
 #endif
 	cp_start (d);
 }
@@ -958,12 +954,10 @@ static void cp_error (cp_chan_t *c, int data)
 		break;
 	case CP_UNDERRUN:
 		CP_DEBUG (d, ("underrun error\n"));
-#ifdef NETGRAPH
 		d->timeout = 0;
-#else
+#ifndef NETGRAPH
 		++d->ifp->if_oerrors;
 		d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-		d->ifp->if_timer = 0;
 #endif
 		cp_start (d);
 		break;
@@ -2198,26 +2192,13 @@ static int ng_cp_rmnode (node_p node)
 	return 0;
 }
 
-static void ng_cp_watchdog (void *arg)
-{
-	drv_t *d = arg;
-
-	if (d) {
-		if (d->timeout == 1)
-			cp_watchdog (d);
-		if (d->timeout)
-			d->timeout--;
-		callout_reset (&d->timeout_handle, hz, ng_cp_watchdog, d);
-	}
-}
-
 static int ng_cp_connect (hook_p hook)
 {
 	drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook));
 
 	if (d) {
 		CP_DEBUG (d, ("Connect\n"));
-		callout_reset (&d->timeout_handle, hz, ng_cp_watchdog, d);
+		callout_reset (&d->timeout_handle, hz, cp_watchdog_timer, d);
 	}
 	
 	return 0;
diff --git a/sys/dev/ctau/if_ct.c b/sys/dev/ctau/if_ct.c
index de3408b983f..125dfa5ed80 100644
--- a/sys/dev/ctau/if_ct.c
+++ b/sys/dev/ctau/if_ct.c
@@ -118,12 +118,12 @@ typedef struct _drv_t {
 	node_p	node;
 	struct	ifqueue queue;
 	struct	ifqueue hi_queue;
-	short	timeout;
-	struct	callout timeout_handle;
 #else
 	struct	ifqueue queue;
 	struct	ifnet *ifp;
 #endif
+	short	timeout;
+	struct	callout timeout_handle;
 	struct	cdev *devt;
 } drv_t;
 
@@ -155,13 +155,13 @@ static void ct_up (drv_t *d);
 static void ct_start (drv_t *d);
 static void ct_down (drv_t *d);
 static void ct_watchdog (drv_t *d);
+static void ct_watchdog_timer (void *arg);
 #ifdef NETGRAPH
 extern struct ng_type typestruct;
 #else
 static void ct_ifstart (struct ifnet *ifp);
 static void ct_tlf (struct sppp *sp);
 static void ct_tls (struct sppp *sp);
-static void ct_ifwatchdog (struct ifnet *ifp);
 static int ct_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data);
 static void ct_initialize (void *softc);
 #endif
@@ -701,6 +701,7 @@ static int ct_attach (device_t dev)
 		c->sys = d;
 		channel [b->num*NCHAN + c->num] = d;
 		sprintf (d->name, "ct%d.%d", b->num, c->num);
+		callout_init (&d->timeout_handle, CALLOUT_MPSAFE);
 
 #ifdef NETGRAPH
 		if (ng_make_node_common (&typestruct, &d->node) != 0) {
@@ -724,8 +725,7 @@ static int ct_attach (device_t dev)
 		d->queue.ifq_maxlen = IFQ_MAXLEN;
 		d->hi_queue.ifq_maxlen = IFQ_MAXLEN;
 		mtx_init (&d->queue.ifq_mtx, "ct_queue", NULL, MTX_DEF);
-		mtx_init (&d->hi_queue.ifq_mtx, "ct_queue_hi", NULL, MTX_DEF);		
-		callout_init (&d->timeout_handle, CALLOUT_MPSAFE);
+		mtx_init (&d->hi_queue.ifq_mtx, "ct_queue_hi", NULL, MTX_DEF);
 #else /*NETGRAPH*/
 		d->ifp = if_alloc(IFT_PPP);
 		if (d->ifp == NULL) {
@@ -742,7 +742,6 @@ static int ct_attach (device_t dev)
 		d->ifp->if_flags	= IFF_POINTOPOINT | IFF_MULTICAST;
 		d->ifp->if_ioctl	= ct_sioctl;
 		d->ifp->if_start	= ct_ifstart;
-		d->ifp->if_watchdog	= ct_ifwatchdog;
 		d->ifp->if_init		= ct_initialize;
 		d->queue.ifq_maxlen	= NBUF;
 		mtx_init (&d->queue.ifq_mtx, "ct_queue", NULL, MTX_DEF);
@@ -816,6 +815,7 @@ static int ct_detach (device_t dev)
 		if (!d || !d->chan->type)
 			continue;
 
+		callout_stop (&d->timeout_handle);
 #ifdef NETGRAPH
 		if (d->node) {
 			ng_rmnode_self (d->node);
@@ -845,12 +845,12 @@ static int ct_detach (device_t dev)
 	callout_drain (&led_timo[b->num]);
 	splx (s);
 	
-	s = splimp ();
 	for (c = b->chan; c < b->chan + NCHAN; ++c) {
 		drv_t *d = (drv_t*) c->sys;
 
 		if (!d || !d->chan->type)
 			continue;
+		callout_drain(&d->timeout_handle);
 		
 		/* Deallocate buffers. */
 		ct_bus_dma_mem_free (&d->dmamem);
@@ -858,7 +858,6 @@ static int ct_detach (device_t dev)
 	bd->board = 0;
 	adapter [b->num] = 0;
 	free (b, M_DEVBUF);
-	splx (s);
 	
 	mtx_destroy (&bd->ct_mtx);
 
@@ -876,13 +875,6 @@ static void ct_ifstart (struct ifnet *ifp)
 	CT_UNLOCK (bd);
 }
 
-static void ct_ifwatchdog (struct ifnet *ifp)
-{
-	drv_t *d = ifp->if_softc;
-
-	ct_watchdog (d);
-}
-
 static void ct_tlf (struct sppp *sp)
 {
 	drv_t *d = SP2IFP(sp)->if_softc;
@@ -970,6 +962,7 @@ static void ct_down (drv_t *d)
 	ct_set_dtr (d->chan, 0);
 	ct_set_rts (d->chan, 0);
 	d->running = 0;
+	callout_stop (&d->timeout_handle);
 	splx (s);
 }
 
@@ -1033,11 +1026,7 @@ static void ct_send (drv_t *d)
 
 		/* Set up transmit timeout, if the transmit ring is not empty.
 		 * Transmit timeout is 10 seconds. */
-#ifdef NETGRAPH
 		d->timeout = 10;
-#else
-		d->ifp->if_timer = 10;
-#endif
 	}
 #ifndef NETGRAPH
 	d->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
@@ -1058,6 +1047,7 @@ static void ct_start (drv_t *d)
 		if (! d->chan->rts)
 			ct_set_rts (d->chan, 1);
 		ct_send (d);
+		callout_reset (&d->timeout_handle, hz, ct_watchdog_timer, d);
 	}
 
 	splx (s);
@@ -1070,11 +1060,7 @@ static void ct_start (drv_t *d)
  */
 static void ct_watchdog (drv_t *d)
 {
-	bdrv_t *bd = d->bd;
-	int s;
 
-	s = splimp ();
-	CT_LOCK (bd);
 	CT_DEBUG (d, ("device timeout\n"));
 	if (d->running) {
 		ct_setup_chan (d->chan);
@@ -1083,8 +1069,20 @@ static void ct_watchdog (drv_t *d)
 		ct_set_rts (d->chan, 1);
 		ct_start (d);
 	}
+}
+
+static void ct_watchdog_timer (void *arg)
+{
+	drv_t *d = arg;
+	bdrv_t *bd = d->bd;
+
+	CT_LOCK (bd);
+	if (d->timeout == 1)
+		ct_watchdog (d);
+	if (d->timeout)
+		d->timeout--;
+	callout_reset (&d->timeout_handle, hz, ct_watchdog_timer, d);
 	CT_UNLOCK (bd);
-	splx (s);
 }
 
 /*
@@ -1096,12 +1094,10 @@ static void ct_transmit (ct_chan_t *c, void *attachment, int len)
 
 	if (!d)
 		return;
-#ifdef NETGRAPH
 	d->timeout = 0;
-#else
+#ifndef NETGRAPH
 	++d->ifp->if_opackets;
 	d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-	d->ifp->if_timer = 0;
 #endif
 	ct_start (d);
 }
@@ -1181,12 +1177,10 @@ static void ct_error (ct_chan_t *c, int data)
 		break;
 	case CT_UNDERRUN:
 		CT_DEBUG (d, ("underrun error\n"));
-#ifdef NETGRAPH
 		d->timeout = 0;
-#else
+#ifndef NETGRAPH
 		++d->ifp->if_oerrors;
 		d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-		d->ifp->if_timer = 0;
 #endif
 		ct_start (d);
 		break;
@@ -2142,20 +2136,6 @@ static int ng_ct_rmnode (node_p node)
 	return 0;
 }
 
-static void ng_ct_watchdog (void *arg)
-{
-	drv_t *d = arg;
-
-	if (!d)
-		return;
-		
-	if (d->timeout == 1)
-		ct_watchdog (d);
-	if (d->timeout)
-		d->timeout--;
-	callout_reset (&d->timeout_handle, hz, ng_ct_watchdog, d);
-}
-
 static int ng_ct_connect (hook_p hook)
 {
 	drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook));
@@ -2163,7 +2143,7 @@ static int ng_ct_connect (hook_p hook)
 	if (!d)
 		return 0;
 		
-	callout_reset (&d->timeout_handle, hz, ng_ct_watchdog, d);
+	callout_reset (&d->timeout_handle, hz, ct_watchdog_timer, d);
 	return 0;
 }
 
diff --git a/sys/dev/cx/if_cx.c b/sys/dev/cx/if_cx.c
index c0d354ae2d4..4e9750e1483 100644
--- a/sys/dev/cx/if_cx.c
+++ b/sys/dev/cx/if_cx.c
@@ -143,12 +143,12 @@ typedef struct _drv_t {
 	node_p	node;
 	struct	ifqueue lo_queue;
 	struct	ifqueue hi_queue;
-	short	timeout;
-	struct	callout timeout_handle;
 #else
 	struct	ifqueue queue;
 	struct	ifnet *ifp;
 #endif
+	short	timeout;
+	struct	callout timeout_handle;
 	struct	cdev *devt;
 	async_q	aqueue;
 #define CX_READ 1
@@ -197,6 +197,7 @@ static void cx_softintr (void *);
 static void *cx_fast_ih;
 static void cx_down (drv_t *d);
 static void cx_watchdog (drv_t *d);
+static void cx_watchdog_timer (void *arg);
 static void cx_carrier (void *arg);
 
 #ifdef NETGRAPH
@@ -205,7 +206,6 @@ extern struct ng_type typestruct;
 static void cx_ifstart (struct ifnet *ifp);
 static void cx_tlf (struct sppp *sp);
 static void cx_tls (struct sppp *sp);
-static void cx_ifwatchdog (struct ifnet *ifp);
 static int cx_sioctl (struct ifnet *ifp, u_long cmd, caddr_t data);
 static void cx_initialize (void *softc);
 #endif
@@ -811,6 +811,7 @@ static int cx_attach (device_t dev)
 		case T_UNIV_RS232:
 		case T_UNIV_RS449:
 		case T_UNIV_V35:
+		callout_init (&d->timeout_handle, CALLOUT_MPSAFE);
 #ifdef NETGRAPH
 		if (ng_make_node_common (&typestruct, &d->node) != 0) {
 			printf ("%s: cannot make common node\n", d->name);
@@ -834,7 +835,6 @@ static int cx_attach (device_t dev)
 		d->hi_queue.ifq_maxlen = IFQ_MAXLEN;
 		mtx_init (&d->lo_queue.ifq_mtx, "cx_queue_lo", NULL, MTX_DEF);
 		mtx_init (&d->hi_queue.ifq_mtx, "cx_queue_hi", NULL, MTX_DEF);
-		callout_init (&d->timeout_handle, CALLOUT_MPSAFE);
 #else /*NETGRAPH*/
 		d->ifp = if_alloc(IFT_PPP);
 		if (d->ifp == NULL) {
@@ -851,7 +851,6 @@ static int cx_attach (device_t dev)
 		d->ifp->if_flags	= IFF_POINTOPOINT | IFF_MULTICAST;
 		d->ifp->if_ioctl	= cx_sioctl;
 		d->ifp->if_start	= cx_ifstart;
-		d->ifp->if_watchdog	= cx_ifwatchdog;
 		d->ifp->if_init		= cx_initialize;
 		d->queue.ifq_maxlen	= 2;
 		mtx_init (&d->queue.ifq_mtx, "cx_queue", NULL, MTX_DEF);
@@ -959,6 +958,7 @@ static int cx_detach (device_t dev)
 			d->tty = NULL;
 		}
 
+		callout_stop (&d->timeout_handle);
 #ifdef NETGRAPH
 		if (d->node) {
 			ng_rmnode_self (d->node);
@@ -992,6 +992,7 @@ static int cx_detach (device_t dev)
 			continue;
 
 		callout_drain (&d->dcd_timeout_handle);
+		callout_drain (&d->timeout_handle);
 	}
 	splx (s);
 	
@@ -1026,13 +1027,6 @@ static void cx_ifstart (struct ifnet *ifp)
 	CX_UNLOCK (bd);
 }
 
-static void cx_ifwatchdog (struct ifnet *ifp)
-{
-	drv_t *d = ifp->if_softc;
-
-	cx_watchdog (d);
-}
-
 static void cx_tlf (struct sppp *sp)
 {
 	drv_t *d = SP2IFP(sp)->if_softc;
@@ -1129,6 +1123,7 @@ static void cx_down (drv_t *d)
 	cx_set_dtr (d->chan, 0);
 	cx_set_rts (d->chan, 0);
 	d->running = 0;
+	callout_stop (&d->timeout_handle);
 	splx (s);
 }
 
@@ -1191,11 +1186,7 @@ static void cx_send (drv_t *d)
 		m_freem (m);
 
 		/* Set up transmit timeout, 10 seconds. */
-#ifdef NETGRAPH
 		d->timeout = 10;
-#else
-		d->ifp->if_timer = 10;
-#endif
 	}
 #ifndef NETGRAPH
 	d->ifp->if_drv_flags |= IFF_DRV_OACTIVE;
@@ -1215,6 +1206,7 @@ static void cx_start (drv_t *d)
 		if (! d->chan->rts)
 			cx_set_rts (d->chan, 1);
 		cx_send (d);
+		callout_reset (&d->timeout_handle, hz, cx_watchdog_timer, d);
 	}
 	splx (s);
 }
@@ -1226,10 +1218,7 @@ static void cx_start (drv_t *d)
  */
 static void cx_watchdog (drv_t *d)
 {
-	bdrv_t *bd = d->board->sys;
 	
-	int s = splhigh ();
-	CX_LOCK (bd);
 	CX_DEBUG (d, ("device timeout\n"));
 	if (d->running) {
 		cx_setup_chan (d->chan);
@@ -1238,8 +1227,20 @@ static void cx_watchdog (drv_t *d)
 		cx_set_rts (d->chan, 1);
 		cx_start (d);
 	}
+}
+
+static void cx_watchdog_timer (void *arg)
+{
+	drv_t *d = arg;
+	bdrv_t *bd = d->board->sys;
+
+	CX_LOCK (bd);
+	if (d->timeout == 1)
+		cx_watchdog (d);
+	if (d->timeout)
+		d->timeout--;
+	callout_reset (&d->timeout_handle, hz, cx_watchdog_timer, d);
 	CX_UNLOCK (bd);
-	splx (s);
 }
 
 /*
@@ -1262,12 +1263,10 @@ static void cx_transmit (cx_chan_t *c, void *attachment, int len)
 		}
 		return;
 	}
-#ifdef NETGRAPH
 	d->timeout = 0;
-#else
+#ifndef NETGRAPH
 	++d->ifp->if_opackets;
 	d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-	d->ifp->if_timer = 0;
 #endif
 	cx_start (d);
 }
@@ -1421,14 +1420,12 @@ static void cx_error (cx_chan_t *c, int data)
 	case CX_UNDERRUN:
 		CX_DEBUG (d, ("underrun error\n"));
 		if (c->mode != M_ASYNC) {
-#ifdef NETGRAPH
 			d->timeout = 0;
-#else
+#ifndef NETGRAPH
 			++d->ifp->if_oerrors;
 			d->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-			d->ifp->if_timer = 0;
-			cx_start (d);
 #endif
+			cx_start (d);
 		}
 		break;
 	case CX_BREAK:
@@ -2477,22 +2474,11 @@ static int ng_cx_rmnode (node_p node)
 	return 0;
 }
 
-static void ng_cx_watchdog (void *arg)
-{
-	drv_t *d = arg;
-
-	if (d->timeout == 1)
-		cx_watchdog (d);
-	if (d->timeout)
-		d->timeout--;
-	callout_reset (&d->timeout_handle, hz, ng_cx_watchdog, d);
-}
-
 static int ng_cx_connect (hook_p hook)
 {
 	drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook));
 
-	callout_reset (&d->timeout_handle, hz, ng_cx_watchdog, d);
+	callout_reset (&d->timeout_handle, hz, cx_watchdog_timer, d);
 	return 0;
 }
 
diff --git a/sys/dev/cxgb/common/cxgb_ael1002.c b/sys/dev/cxgb/common/cxgb_ael1002.c
index d7bb3869831..ec5ffe7aedb 100644
--- a/sys/dev/cxgb/common/cxgb_ael1002.c
+++ b/sys/dev/cxgb/common/cxgb_ael1002.c
@@ -1270,7 +1270,7 @@ static int ael2005_reset(struct cphy *phy, int wait)
 		return err;
 	phy->modtype = (u8)err;
 
-	if (err == phy_modtype_none || err == phy_modtype_unknown)
+	if (err == phy_modtype_none)
 		err = 0;
 	else if (err == phy_modtype_twinax || err == phy_modtype_twinax_long)
 		err = ael2005_setup_twinax_edc(phy, err);
@@ -1981,7 +1981,7 @@ static int ael2020_reset(struct cphy *phy, int wait)
 	if (err < 0)
 		return err;
 	phy->modtype = (u8)err;
-	if (err == phy_modtype_none || err == phy_modtype_unknown)
+	if (err == phy_modtype_none)
 		err = 0;
 	else if (err == phy_modtype_twinax || err == phy_modtype_twinax_long)
 		err = ael2020_setup_twinax_edc(phy, err);
diff --git a/sys/dev/cxgb/common/cxgb_aq100x.c b/sys/dev/cxgb/common/cxgb_aq100x.c
index abb93c4055f..46f07ca1530 100644
--- a/sys/dev/cxgb/common/cxgb_aq100x.c
+++ b/sys/dev/cxgb/common/cxgb_aq100x.c
@@ -515,13 +515,11 @@ t3_aq100x_phy_prep(pinfo_t *pinfo, int phy_addr,
 		CH_WARN(adapter, "PHY%d: unknown firmware %d.%d\n", phy_addr,
 		    v >> 8, v & 0xff);
 
-#if 0
 	/* The PHY should start in really-low-power mode. */
 	(void) mdio_read(phy, MDIO_DEV_PMA_PMD, MII_BMCR, &v);
 	if ((v & BMCR_PDOWN) == 0)
 		CH_WARN(adapter, "PHY%d does not start in low power mode.\n",
 			phy_addr);
-#endif
 
 	/*
 	 * Verify XAUI and 1000-X settings, but let prep succeed no matter what.
diff --git a/sys/dev/cxgb/common/cxgb_common.h b/sys/dev/cxgb/common/cxgb_common.h
index 1aa3642ea9d..2f55e9fec66 100644
--- a/sys/dev/cxgb/common/cxgb_common.h
+++ b/sys/dev/cxgb/common/cxgb_common.h
@@ -97,7 +97,7 @@ enum {
 
 enum {
 	FW_VERSION_MAJOR = 7,
-	FW_VERSION_MINOR = 7,
+	FW_VERSION_MINOR = 8,
 	FW_VERSION_MICRO = 0
 };
 
diff --git a/sys/dev/cxgb/common/cxgb_xgmac.c b/sys/dev/cxgb/common/cxgb_xgmac.c
index e323c9b2685..853da35ddfe 100644
--- a/sys/dev/cxgb/common/cxgb_xgmac.c
+++ b/sys/dev/cxgb/common/cxgb_xgmac.c
@@ -508,7 +508,7 @@ int t3_mac_set_mtu(struct cmac *mac, unsigned int mtu)
 		thres /= 10;
 	thres = mtu > thres ? (mtu - thres + 7) / 8 : 0;
 	thres = max(thres, 8U);                          /* need at least 8 */
-	ipg = (adap->params.rev == T3_REV_C) ? 0 : 1;
+	ipg = (port_type == 9 || adap->params.rev != T3_REV_C) ? 1 : 0;
 	t3_set_reg_field(adap, A_XGM_TXFIFO_CFG + mac->offset,
 			 V_TXFIFOTHRESH(M_TXFIFOTHRESH) | V_TXIPG(M_TXIPG),
 			 V_TXFIFOTHRESH(thres) | V_TXIPG(ipg));
diff --git a/sys/dev/cxgb/cxgb_main.c b/sys/dev/cxgb/cxgb_main.c
index 58ea2f78426..e716919d10a 100644
--- a/sys/dev/cxgb/cxgb_main.c
+++ b/sys/dev/cxgb/cxgb_main.c
@@ -355,7 +355,6 @@ cxgb_controller_probe(device_t dev)
 	const struct adapter_info *ai;
 	char *ports, buf[80];
 	int nports;
-	struct adapter *sc = device_get_softc(dev);
 
 	ai = cxgb_get_adapter_info(dev);
 	if (ai == NULL)
@@ -367,9 +366,7 @@ cxgb_controller_probe(device_t dev)
 	else
 		ports = "ports";
 
-	snprintf(buf, sizeof(buf), "%s %sNIC, rev: %d nports: %d %s",
-	    ai->desc, is_offload(sc) ? "R" : "",
-	    sc->params.rev, nports, ports);
+	snprintf(buf, sizeof(buf), "%s, %d %s", ai->desc, nports, ports);
 	device_set_desc_copy(dev, buf);
 	return (BUS_PROBE_DEFAULT);
 }
@@ -665,8 +662,8 @@ cxgb_controller_attach(device_t dev)
 	    G_FW_VERSION_MAJOR(vers), G_FW_VERSION_MINOR(vers),
 	    G_FW_VERSION_MICRO(vers));
 
-	snprintf(buf, sizeof(buf), "%s\t E/C: %s S/N: %s", 
-		 ai->desc,
+	snprintf(buf, sizeof(buf), "%s %sNIC\t E/C: %s S/N: %s",
+		 ai->desc, is_offload(sc) ? "R" : "",
 		 sc->params.vpd.ec, sc->params.vpd.sn);
 	device_set_desc_copy(dev, buf);
 
@@ -1985,14 +1982,14 @@ cxgb_uninit_synchronized(struct port_info *pi)
 	t3_set_reg_field(sc, A_XGM_RXFIFO_CFG +  pi->mac.offset,
 			 V_RXFIFOPAUSEHWM(M_RXFIFOPAUSEHWM), 0);
 
-	DELAY(100);
+	DELAY(100 * 1000);
 
 	/* Wait for TXFIFO empty */
 	t3_wait_op_done(sc, A_XGM_TXFIFO_CFG + pi->mac.offset,
 			F_TXFIFO_EMPTY, 1, 20, 5);
 
-	DELAY(100);
-	t3_mac_disable(&pi->mac, MAC_DIRECTION_TX | MAC_DIRECTION_RX);
+	DELAY(100 * 1000);
+	t3_mac_disable(&pi->mac, MAC_DIRECTION_RX);
 
 
 	pi->phy.ops->power_down(&pi->phy, 1);
diff --git a/sys/dev/cxgb/cxgb_t3fw.h b/sys/dev/cxgb/cxgb_t3fw.h
index 6af06191f99..66c86ce6b82 100644
--- a/sys/dev/cxgb/cxgb_t3fw.h
+++ b/sys/dev/cxgb/cxgb_t3fw.h
@@ -32,8 +32,8 @@ $FreeBSD$
 
 #define U (unsigned char)
 
-static unsigned int t3fw_length = 30772;
-static unsigned char t3fw[30772] = {
+static unsigned int t3fw_length = 30840;
+static unsigned char t3fw[30840] = {
 	U 0x60, U 0x00, U 0x74, U 0x00, 
 	U 0x20, U 0x03, U 0x80, U 0x00, 
 	U 0x20, U 0x03, U 0x70, U 0x00, 
@@ -55,13 +55,13 @@ static unsigned char t3fw[30772] = {
 	U 0x1F, U 0xFF, U 0xC0, U 0x00, 
 	U 0xE3, U 0x00, U 0x04, U 0x3C, 
 	U 0x02, U 0x00, U 0x00, U 0x00, 
-	U 0x20, U 0x00, U 0x6B, U 0xE8, 
+	U 0x20, U 0x00, U 0x6C, U 0x34, 
 	U 0x1F, U 0xFF, U 0xC2, U 0x90, 
-	U 0x20, U 0x00, U 0x6C, U 0x30, 
+	U 0x20, U 0x00, U 0x6C, U 0x7C, 
 	U 0x1F, U 0xFF, U 0xC2, U 0x94, 
-	U 0x20, U 0x00, U 0x6C, U 0x70, 
+	U 0x20, U 0x00, U 0x6C, U 0xBC, 
 	U 0x1F, U 0xFF, U 0xC2, U 0x98, 
-	U 0x20, U 0x00, U 0x6C, U 0xE4, 
+	U 0x20, U 0x00, U 0x6D, U 0x30, 
 	U 0x1F, U 0xFF, U 0xC2, U 0x9C, 
 	U 0x20, U 0x00, U 0x03, U 0xC0, 
 	U 0xC0, U 0x00, U 0x00, U 0xE4, 
@@ -396,11 +396,11 @@ static unsigned char t3fw[30772] = {
 	U 0x20, U 0x00, U 0x03, U 0xB0, 
 	U 0xE3, U 0x00, U 0x0D, U 0x3C, 
 	U 0x20, U 0x00, U 0x03, U 0xB0, 
-	U 0x20, U 0x00, U 0x6E, U 0x08, 
+	U 0x20, U 0x00, U 0x6E, U 0x54, 
 	U 0xE3, U 0x00, U 0x0D, U 0x3C, 
-	U 0x20, U 0x00, U 0x6E, U 0x08, 
-	U 0x20, U 0x00, U 0x6E, U 0x08, 
-	U 0xE3, U 0x00, U 0x77, U 0x94, 
+	U 0x20, U 0x00, U 0x6E, U 0x54, 
+	U 0x20, U 0x00, U 0x6E, U 0x54, 
+	U 0xE3, U 0x00, U 0x77, U 0xE0, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
@@ -408,8 +408,8 @@ static unsigned char t3fw[30772] = {
 	U 0x1F, U 0xFC, U 0x00, U 0x00, 
 	U 0x1F, U 0xFF, U 0xC5, U 0x90, 
 	U 0x1F, U 0xFF, U 0xC6, U 0x70, 
-	U 0x20, U 0x00, U 0x6E, U 0x08, 
-	U 0x20, U 0x00, U 0x6E, U 0x08, 
+	U 0x20, U 0x00, U 0x6E, U 0x58, 
+	U 0x20, U 0x00, U 0x6E, U 0x58, 
 	U 0xDE, U 0xFF, U 0xFE, U 0x00, 
 	U 0x00, U 0x00, U 0x08, U 0x0C, 
 	U 0xDE, U 0xAD, U 0xBE, U 0xEF, 
@@ -616,47 +616,47 @@ static unsigned char t3fw[30772] = {
 	U 0x00, U 0x00, U 0x00, U 0x00, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
-	U 0x20, U 0x00, U 0x55, U 0x08, 
-	U 0x20, U 0x00, U 0x53, U 0xD8, 
-	U 0x20, U 0x00, U 0x55, U 0x08, 
-	U 0x20, U 0x00, U 0x55, U 0x08, 
-	U 0x20, U 0x00, U 0x53, U 0x14, 
-	U 0x20, U 0x00, U 0x53, U 0x14, 
-	U 0x20, U 0x00, U 0x53, U 0x14, 
-	U 0x20, U 0x00, U 0x51, U 0x54, 
-	U 0x20, U 0x00, U 0x51, U 0x54, 
-	U 0x20, U 0x00, U 0x51, U 0x4C, 
-	U 0x20, U 0x00, U 0x50, U 0xB8, 
-	U 0x20, U 0x00, U 0x4F, U 0x60, 
-	U 0x20, U 0x00, U 0x4D, U 0x40, 
-	U 0x20, U 0x00, U 0x4B, U 0x14, 
+	U 0x20, U 0x00, U 0x55, U 0x54, 
+	U 0x20, U 0x00, U 0x54, U 0x24, 
+	U 0x20, U 0x00, U 0x55, U 0x54, 
+	U 0x20, U 0x00, U 0x55, U 0x54, 
+	U 0x20, U 0x00, U 0x53, U 0x60, 
+	U 0x20, U 0x00, U 0x53, U 0x60, 
+	U 0x20, U 0x00, U 0x53, U 0x60, 
+	U 0x20, U 0x00, U 0x51, U 0xA0, 
+	U 0x20, U 0x00, U 0x51, U 0xA0, 
+	U 0x20, U 0x00, U 0x51, U 0x98, 
+	U 0x20, U 0x00, U 0x51, U 0x04, 
+	U 0x20, U 0x00, U 0x4F, U 0xAC, 
+	U 0x20, U 0x00, U 0x4D, U 0x8C, 
+	U 0x20, U 0x00, U 0x4B, U 0x60, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
-	U 0x20, U 0x00, U 0x54, U 0xD8, 
-	U 0x20, U 0x00, U 0x53, U 0xA4, 
-	U 0x20, U 0x00, U 0x54, U 0x48, 
-	U 0x20, U 0x00, U 0x54, U 0x48, 
-	U 0x20, U 0x00, U 0x51, U 0xFC, 
-	U 0x20, U 0x00, U 0x51, U 0xFC, 
-	U 0x20, U 0x00, U 0x51, U 0xFC, 
-	U 0x20, U 0x00, U 0x51, U 0xFC, 
-	U 0x20, U 0x00, U 0x51, U 0xFC, 
-	U 0x20, U 0x00, U 0x51, U 0x44, 
-	U 0x20, U 0x00, U 0x51, U 0xFC, 
-	U 0x20, U 0x00, U 0x4E, U 0x80, 
-	U 0x20, U 0x00, U 0x4C, U 0xF0, 
-	U 0x20, U 0x00, U 0x4A, U 0xC0, 
+	U 0x20, U 0x00, U 0x55, U 0x24, 
+	U 0x20, U 0x00, U 0x53, U 0xF0, 
+	U 0x20, U 0x00, U 0x54, U 0x94, 
+	U 0x20, U 0x00, U 0x54, U 0x94, 
+	U 0x20, U 0x00, U 0x52, U 0x48, 
+	U 0x20, U 0x00, U 0x52, U 0x48, 
+	U 0x20, U 0x00, U 0x52, U 0x48, 
+	U 0x20, U 0x00, U 0x52, U 0x48, 
+	U 0x20, U 0x00, U 0x52, U 0x48, 
+	U 0x20, U 0x00, U 0x51, U 0x90, 
+	U 0x20, U 0x00, U 0x52, U 0x48, 
+	U 0x20, U 0x00, U 0x4E, U 0xCC, 
+	U 0x20, U 0x00, U 0x4D, U 0x3C, 
+	U 0x20, U 0x00, U 0x4B, U 0x0C, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
 	U 0x20, U 0x00, U 0x0B, U 0xE8, 
 	U 0x20, U 0x00, U 0x3A, U 0xA8, 
 	U 0x20, U 0x00, U 0x04, U 0xC0, 
-	U 0x20, U 0x00, U 0x46, U 0xB4, 
+	U 0x20, U 0x00, U 0x46, U 0xFC, 
 	U 0x20, U 0x00, U 0x0B, U 0xE0, 
 	U 0x20, U 0x00, U 0x41, U 0xC0, 
 	U 0x20, U 0x00, U 0x03, U 0xF0, 
-	U 0x20, U 0x00, U 0x46, U 0x74, 
-	U 0x20, U 0x00, U 0x4A, U 0x9C, 
+	U 0x20, U 0x00, U 0x46, U 0xBC, 
+	U 0x20, U 0x00, U 0x4A, U 0xE8, 
 	U 0x20, U 0x00, U 0x3E, U 0xCC, 
 	U 0x20, U 0x00, U 0x3D, U 0xE8, 
 	U 0x20, U 0x00, U 0x3A, U 0x24, 
@@ -666,7 +666,7 @@ static unsigned char t3fw[30772] = {
 	U 0x20, U 0x00, U 0x3C, U 0x44, 
 	U 0x20, U 0x00, U 0x2D, U 0xB0, 
 	U 0x20, U 0x00, U 0x28, U 0x44, 
-	U 0x20, U 0x00, U 0x67, U 0x8C, 
+	U 0x20, U 0x00, U 0x67, U 0xD8, 
 	U 0x20, U 0x00, U 0x23, U 0xD0, 
 	U 0x20, U 0x00, U 0x20, U 0xB0, 
 	U 0x20, U 0x00, U 0x20, U 0x5C, 
@@ -851,22 +851,22 @@ static unsigned char t3fw[30772] = {
 	U 0x0B, U 0xBB, U 0x90, U 0x00, 
 	U 0x53, U 0x00, U 0x00, U 0x00, 
 	U 0x63, U 0xFF, U 0xFC, U 0x00, 
-	U 0x20, U 0x00, U 0x6B, U 0xC4, 
+	U 0x20, U 0x00, U 0x6C, U 0x10, 
 	U 0x10, U 0xFF, U 0xFF, U 0x0A, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
-	U 0x20, U 0x00, U 0x6B, U 0xE8, 
+	U 0x20, U 0x00, U 0x6C, U 0x34, 
 	U 0x00, U 0xD2, U 0x31, U 0x10, 
 	U 0xFF, U 0xFE, U 0x0A, U 0x00, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
-	U 0x20, U 0x00, U 0x6C, U 0x30, 
+	U 0x20, U 0x00, U 0x6C, U 0x7C, 
 	U 0x00, U 0xD3, U 0x31, U 0x10, 
 	U 0xFF, U 0xFE, U 0x0A, U 0x00, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
-	U 0x20, U 0x00, U 0x6C, U 0x70, 
+	U 0x20, U 0x00, U 0x6C, U 0xBC, 
 	U 0x00, U 0xD4, U 0x31, U 0x10, 
 	U 0xFF, U 0xFE, U 0x0A, U 0x00, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
-	U 0x20, U 0x00, U 0x6C, U 0xE4, 
+	U 0x20, U 0x00, U 0x6D, U 0x30, 
 	U 0x00, U 0xD5, U 0x31, U 0x10, 
 	U 0xFF, U 0xFE, U 0x0A, U 0x00, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
@@ -893,8 +893,8 @@ static unsigned char t3fw[30772] = {
 	U 0xFA, U 0xD3, U 0x0F, U 0x77, 
 	U 0x6B, U 0x06, U 0x90, U 0x60, 
 	U 0xB4, U 0x66, U 0x77, U 0x63, 
-	U 0xF8, U 0x54, U 0x15, U 0xD3, 
-	U 0x54, U 0x1A, U 0x7E, U 0x0F, 
+	U 0xF8, U 0x54, U 0x15, U 0xE6, 
+	U 0x54, U 0x1A, U 0x91, U 0x0F, 
 	U 0x14, U 0x00, U 0x63, U 0xFF, 
 	U 0xF9, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
@@ -1107,7 +1107,7 @@ static unsigned char t3fw[30772] = {
 	U 0xFC, U 0x13, U 0x2C, U 0x16, 
 	U 0x18, U 0x2B, U 0x12, U 0x1A, 
 	U 0x2A, U 0x12, U 0x1B, U 0xDC, 
-	U 0x50, U 0x58, U 0x19, U 0x91, 
+	U 0x50, U 0x58, U 0x19, U 0xA4, 
 	U 0xC0, U 0xD0, U 0xC0, U 0x90, 
 	U 0x2E, U 0x5C, U 0xF4, U 0x2C, 
 	U 0x12, U 0x17, U 0x28, U 0x12, 
@@ -1345,7 +1345,7 @@ static unsigned char t3fw[30772] = {
 	U 0xFC, U 0x2A, U 0x00, U 0x00, 
 	U 0x64, U 0x50, U 0xC0, U 0xDA, 
 	U 0x20, U 0xDB, U 0xC0, U 0x58, 
-	U 0x16, U 0x65, U 0xC0, U 0x20, 
+	U 0x16, U 0x78, U 0xC0, U 0x20, 
 	U 0xD1, U 0x0F, U 0xC0, U 0x91, 
 	U 0x63, U 0xFD, U 0x7A, U 0x00, 
 	U 0xC0, U 0x91, U 0x63, U 0xFA, 
@@ -1354,7 +1354,7 @@ static unsigned char t3fw[30772] = {
 	U 0x0A, U 0x80, U 0xC0, U 0x9A, 
 	U 0x29, U 0x24, U 0x68, U 0x2C, 
 	U 0x70, U 0x07, U 0x58, U 0x15, 
-	U 0x55, U 0xD2, U 0xA0, U 0xD1, 
+	U 0x68, U 0xD2, U 0xA0, U 0xD1, 
 	U 0x0F, U 0x03, U 0x47, U 0x0B, 
 	U 0x18, U 0xED, U 0x4F, U 0xDB, 
 	U 0x70, U 0xA8, U 0x28, U 0x78, 
@@ -1362,7 +1362,7 @@ static unsigned char t3fw[30772] = {
 	U 0xF8, U 0xD9, U 0xB0, U 0x63, 
 	U 0xFA, U 0x61, U 0x00, U 0x00, 
 	U 0x2A, U 0x2C, U 0x74, U 0xDB, 
-	U 0x40, U 0x58, U 0x0E, U 0xD1, 
+	U 0x40, U 0x58, U 0x0E, U 0xE3, 
 	U 0x63, U 0xFA, U 0xE4, U 0x00, 
 	U 0x00, U 0x29, U 0x22, U 0x1D, 
 	U 0x2D, U 0x25, U 0x02, U 0x7B, 
@@ -1386,7 +1386,7 @@ static unsigned char t3fw[30772] = {
 	U 0xC0, U 0xD1, U 0x2E, U 0x0A, 
 	U 0x80, U 0xC0, U 0x9E, U 0x29, 
 	U 0x24, U 0x68, U 0x2C, U 0x70, 
-	U 0x07, U 0x58, U 0x15, U 0x34, 
+	U 0x07, U 0x58, U 0x15, U 0x47, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0xC0, U 0x94, U 0x63, U 0xFB, 
 	U 0xC9, U 0xC0, U 0x96, U 0x63, 
@@ -1472,7 +1472,7 @@ static unsigned char t3fw[30772] = {
 	U 0x28, U 0x2D, U 0xF6, U 0x85, 
 	U 0xC8, U 0x5A, U 0x2A, U 0x2C, 
 	U 0x74, U 0xDB, U 0x40, U 0x58, 
-	U 0x0E, U 0x64, U 0xD2, U 0xA0, 
+	U 0x0E, U 0x76, U 0xD2, U 0xA0, 
 	U 0xD1, U 0x0F, U 0xC0, U 0x20, 
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x00, U 0x29, U 0xCC, U 0xF9, 
@@ -1497,26 +1497,26 @@ static unsigned char t3fw[30772] = {
 	U 0x75, U 0x63, U 0xFF, U 0x7D, 
 	U 0x00, U 0xCC, U 0x57, U 0xDA, 
 	U 0x20, U 0xDB, U 0x30, U 0xDC, 
-	U 0x40, U 0x58, U 0x15, U 0x3A, 
+	U 0x40, U 0x58, U 0x15, U 0x4D, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0x00, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x15, U 0xC9, 
+	U 0xB6, U 0x58, U 0x15, U 0xDC, 
 	U 0x63, U 0xFF, U 0xE5, U 0x00, 
 	U 0xDA, U 0x20, U 0x58, U 0x15, 
-	U 0xC7, U 0x63, U 0xFF, U 0xDC, 
+	U 0xDA, U 0x63, U 0xFF, U 0xDC, 
 	U 0x00, U 0xDA, U 0x20, U 0xDB, 
 	U 0x30, U 0xDC, U 0x40, U 0xDD, 
-	U 0x50, U 0x58, U 0x16, U 0x55, 
+	U 0x50, U 0x58, U 0x16, U 0x68, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0xC8, U 0x58, U 0xDA, U 0x20, 
 	U 0xDB, U 0x30, U 0x58, U 0x14, 
-	U 0xA7, U 0x2A, U 0x21, U 0x02, 
+	U 0xBA, U 0x2A, U 0x21, U 0x02, 
 	U 0x65, U 0xAF, U 0xBD, U 0xC0, 
 	U 0x94, U 0x09, U 0xA9, U 0x02, 
 	U 0x29, U 0x25, U 0x02, U 0x63, 
 	U 0xFF, U 0xB2, U 0x00, U 0x00, 
 	U 0x2B, U 0x21, U 0x04, U 0x58, 
-	U 0x14, U 0x53, U 0x1D, U 0xEC, 
+	U 0x14, U 0x66, U 0x1D, U 0xEC, 
 	U 0xAF, U 0xC0, U 0xE0, U 0x2E, 
 	U 0x24, U 0x66, U 0x8F, U 0x30, 
 	U 0x2B, U 0x20, U 0x0C, U 0x0F, 
@@ -1527,7 +1527,7 @@ static unsigned char t3fw[30772] = {
 	U 0xFC, U 0x50, U 0x64, U 0xCF, 
 	U 0x56, U 0x2B, U 0x21, U 0x04, 
 	U 0xC0, U 0xC0, U 0x58, U 0x14, 
-	U 0x48, U 0x1D, U 0xEC, U 0xA4, 
+	U 0x5B, U 0x1D, U 0xEC, U 0xA4, 
 	U 0xC0, U 0xE0, U 0x8F, U 0x30, 
 	U 0x2B, U 0x20, U 0x0C, U 0x0F, 
 	U 0x8F, U 0x14, U 0x63, U 0xFF, 
@@ -1535,7 +1535,7 @@ static unsigned char t3fw[30772] = {
 	U 0x2B, U 0x21, U 0x04, U 0xB1, 
 	U 0xCC, U 0x0C, U 0x0C, U 0x47, 
 	U 0x2C, U 0x24, U 0x66, U 0x58, 
-	U 0x14, U 0x40, U 0x1D, U 0xEC, 
+	U 0x14, U 0x53, U 0x1D, U 0xEC, 
 	U 0x9C, U 0xC0, U 0xE0, U 0x2E, 
 	U 0x24, U 0x66, U 0x8F, U 0x30, 
 	U 0x2B, U 0x20, U 0x0C, U 0x0F, 
@@ -1574,7 +1574,7 @@ static unsigned char t3fw[30772] = {
 	U 0xAC, U 0xFD, U 0x65, U 0xA0, 
 	U 0xC2, U 0xCC, U 0x5F, U 0xDB, 
 	U 0x30, U 0xDA, U 0x20, U 0x8C, 
-	U 0x11, U 0x58, U 0x14, U 0xED, 
+	U 0x11, U 0x58, U 0x15, U 0x00, 
 	U 0xC0, U 0x51, U 0x9A, U 0x13, 
 	U 0xC7, U 0xBF, U 0x9B, U 0xA9, 
 	U 0x8E, U 0x13, U 0x2E, U 0xE2, 
@@ -1613,19 +1613,19 @@ static unsigned char t3fw[30772] = {
 	U 0x20, U 0x7F, U 0x89, U 0x05, 
 	U 0x29, U 0xD2, U 0x85, U 0x65, 
 	U 0x91, U 0x65, U 0xDA, U 0x20, 
-	U 0x58, U 0x15, U 0x58, U 0xC9, 
+	U 0x58, U 0x15, U 0x6B, U 0xC9, 
 	U 0x5C, U 0x60, U 0x01, U 0xFF, 
 	U 0x00, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x15, U 0x55, 
+	U 0xB6, U 0x58, U 0x15, U 0x68, 
 	U 0x60, U 0x00, U 0x0C, U 0x00, 
 	U 0xC0, U 0x90, U 0x63, U 0xFF, 
 	U 0xB5, U 0x00, U 0x00, U 0xDA, 
-	U 0x20, U 0x58, U 0x15, U 0x51, 
+	U 0x20, U 0x58, U 0x15, U 0x64, 
 	U 0x65, U 0x51, U 0xE4, U 0x8D, 
 	U 0x13, U 0x8C, U 0x11, U 0xDB, 
 	U 0xD0, U 0x8D, U 0xD0, U 0x02, 
 	U 0x2A, U 0x02, U 0x0D, U 0x6D, 
-	U 0x51, U 0x58, U 0x13, U 0xC3, 
+	U 0x51, U 0x58, U 0x13, U 0xD6, 
 	U 0x9A, U 0x13, U 0x64, U 0xA1, 
 	U 0xCE, U 0xC7, U 0x5F, U 0x8F, 
 	U 0xA1, U 0x95, U 0xA9, U 0xC0, 
@@ -1643,7 +1643,7 @@ static unsigned char t3fw[30772] = {
 	U 0x09, U 0x9D, U 0x02, U 0x64, 
 	U 0x81, U 0x59, U 0xC9, U 0xD3, 
 	U 0x8A, U 0x10, U 0x2B, U 0x21, 
-	U 0x04, U 0x58, U 0x13, U 0xD3, 
+	U 0x04, U 0x58, U 0x13, U 0xE6, 
 	U 0x8A, U 0x13, U 0xC0, U 0xB0, 
 	U 0x2B, U 0x24, U 0x66, U 0x2E, 
 	U 0xA2, U 0x09, U 0x2A, U 0xA0, 
@@ -1700,7 +1700,7 @@ static unsigned char t3fw[30772] = {
 	U 0xE4, U 0xCF, U 0x2B, U 0xBC, 
 	U 0x20, U 0x2B, U 0xC6, U 0x85, 
 	U 0x2A, U 0x2C, U 0x74, U 0x8B, 
-	U 0x11, U 0x58, U 0x0D, U 0x7F, 
+	U 0x11, U 0x58, U 0x0D, U 0x91, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0x28, U 0x20, U 0x3D, U 0xC0, 
 	U 0xE0, U 0x7C, U 0x87, U 0x7F, 
@@ -1734,14 +1734,14 @@ static unsigned char t3fw[30772] = {
 	U 0xF0, U 0x63, U 0xFE, U 0x95, 
 	U 0x00, U 0xDA, U 0x20, U 0xDB, 
 	U 0x30, U 0x8C, U 0x11, U 0xDD, 
-	U 0x50, U 0x58, U 0x15, U 0x71, 
+	U 0x50, U 0x58, U 0x15, U 0x84, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0xC0, U 0xE1, U 0x63, U 0xFF, 
 	U 0x7A, U 0x8B, U 0x13, U 0x8C, 
 	U 0x11, U 0xDD, U 0x50, U 0xC0, 
 	U 0xAA, U 0x2E, U 0x0A, U 0x80, 
 	U 0x2A, U 0x24, U 0x68, U 0xDA, 
-	U 0x20, U 0x58, U 0x13, U 0xD1, 
+	U 0x20, U 0x58, U 0x13, U 0xE4, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x06, U 0x29, 
@@ -1851,19 +1851,19 @@ static unsigned char t3fw[30772] = {
 	U 0x72, U 0x63, U 0xFF, U 0x66, 
 	U 0x00, U 0xCC, U 0x57, U 0xDA, 
 	U 0x20, U 0xDB, U 0x30, U 0xDC, 
-	U 0x40, U 0x58, U 0x13, U 0xD8, 
+	U 0x40, U 0x58, U 0x13, U 0xEB, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0xDA, U 0x20, U 0x58, U 0x14, 
-	U 0x68, U 0x63, U 0xFF, U 0xE8, 
+	U 0x7B, U 0x63, U 0xFF, U 0xE8, 
 	U 0xC0, U 0xA0, U 0x63, U 0xFE, 
 	U 0x82, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x14, U 0x64, 
+	U 0xB6, U 0x58, U 0x14, U 0x77, 
 	U 0x63, U 0xFF, U 0xD9, U 0x00, 
 	U 0xDB, U 0x40, U 0x2A, U 0x2C, 
-	U 0x74, U 0x58, U 0x0C, U 0xDF, 
+	U 0x74, U 0x58, U 0x0C, U 0xF1, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0x8A, U 0x10, U 0x2B, U 0x21, 
-	U 0x04, U 0x58, U 0x12, U 0xF7, 
+	U 0x04, U 0x58, U 0x13, U 0x0A, 
 	U 0x1E, U 0xEB, U 0x46, U 0xC0, 
 	U 0xD0, U 0x2D, U 0x24, U 0x66, 
 	U 0x63, U 0xFE, U 0xB1, U 0x00, 
@@ -1893,14 +1893,14 @@ static unsigned char t3fw[30772] = {
 	U 0x22, U 0xD2, U 0x85, U 0xCF, 
 	U 0x25, U 0x60, U 0x00, U 0x0D, 
 	U 0x00, U 0xDA, U 0x60, U 0xC0, 
-	U 0xB6, U 0x58, U 0x14, U 0x40, 
+	U 0xB6, U 0x58, U 0x14, U 0x53, 
 	U 0xC8, U 0x5A, U 0x60, U 0x01, 
 	U 0x0F, U 0x00, U 0xDA, U 0x60, 
-	U 0x58, U 0x14, U 0x3D, U 0x65, 
+	U 0x58, U 0x14, U 0x50, U 0x65, 
 	U 0x51, U 0x06, U 0xDC, U 0x40, 
 	U 0xDB, U 0x30, U 0x8D, U 0x30, 
 	U 0xDA, U 0x60, U 0x0D, U 0x6D, 
-	U 0x51, U 0x58, U 0x12, U 0xB0, 
+	U 0x51, U 0x58, U 0x12, U 0xC3, 
 	U 0xD3, U 0xA0, U 0x64, U 0xA0, 
 	U 0xF3, U 0x84, U 0xA1, U 0xC0, 
 	U 0x51, U 0x04, U 0x04, U 0x47, 
@@ -1911,7 +1911,7 @@ static unsigned char t3fw[30772] = {
 	U 0x2C, U 0x64, U 0x66, U 0x6F, 
 	U 0xC6, U 0x02, U 0x70, U 0x96, 
 	U 0x0A, U 0x2B, U 0x61, U 0x04, 
-	U 0x58, U 0x12, U 0xC7, U 0xC0, 
+	U 0x58, U 0x12, U 0xDA, U 0xC0, 
 	U 0xB0, U 0x2B, U 0x64, U 0x66, 
 	U 0x65, U 0x50, U 0xB4, U 0x2A, 
 	U 0x3C, U 0x10, U 0xC0, U 0xE7, 
@@ -1961,7 +1961,7 @@ static unsigned char t3fw[30772] = {
 	U 0xFF, U 0x60, U 0x00, U 0x00, 
 	U 0x2A, U 0x6C, U 0x74, U 0xC0, 
 	U 0xB2, U 0xDC, U 0x20, U 0xDD, 
-	U 0x40, U 0x58, U 0x12, U 0xA5, 
+	U 0x40, U 0x58, U 0x12, U 0xB8, 
 	U 0xC0, U 0xB0, U 0x63, U 0xFF, 
 	U 0x63, U 0xC0, U 0x20, U 0xD1, 
 	U 0x0F, U 0x00, U 0x00, U 0x00, 
@@ -2013,7 +2013,7 @@ static unsigned char t3fw[30772] = {
 	U 0xA6, U 0x9D, U 0x2F, U 0x35, 
 	U 0x02, U 0xC0, U 0x20, U 0xD1, 
 	U 0x0F, U 0xDA, U 0x30, U 0xC0, 
-	U 0xB6, U 0x58, U 0x13, U 0xC8, 
+	U 0xB6, U 0x58, U 0x13, U 0xDB, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x06, U 0x2A, 
 	U 0x20, U 0x06, U 0x94, U 0x10, 
@@ -2024,7 +2024,7 @@ static unsigned char t3fw[30772] = {
 	U 0x92, U 0x0A, U 0xCC, U 0x5F, 
 	U 0xDB, U 0x30, U 0xDA, U 0x20, 
 	U 0x8C, U 0x10, U 0x58, U 0x13, 
-	U 0x2C, U 0xC0, U 0x51, U 0xD3, 
+	U 0x3F, U 0xC0, U 0x51, U 0xD3, 
 	U 0xA0, U 0xC7, U 0xAF, U 0x9A, 
 	U 0x3A, U 0xC0, U 0xD0, U 0x1C, 
 	U 0xEA, U 0xA5, U 0x14, U 0xEA, 
@@ -2154,37 +2154,37 @@ static unsigned char t3fw[30772] = {
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0x00, U 0xCC, U 0x57, U 0xDA, 
 	U 0x20, U 0xDB, U 0x30, U 0x8C, 
-	U 0x10, U 0x58, U 0x12, U 0xA9, 
+	U 0x10, U 0x58, U 0x12, U 0xBC, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0xC0, U 0x91, U 0x63, U 0xFF, 
 	U 0x8F, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x13, U 0x37, 
+	U 0xB6, U 0x58, U 0x13, U 0x4A, 
 	U 0x63, U 0xFF, U 0xE1, U 0x00, 
 	U 0xDA, U 0x20, U 0x58, U 0x13, 
-	U 0x35, U 0x63, U 0xFF, U 0xD8, 
+	U 0x48, U 0x63, U 0xFF, U 0xD8, 
 	U 0x2B, U 0x21, U 0x04, U 0x58, 
-	U 0x11, U 0xCC, U 0x1E, U 0xEA, 
+	U 0x11, U 0xDF, U 0x1E, U 0xEA, 
 	U 0x1D, U 0x2B, U 0x20, U 0x0C, 
 	U 0xC0, U 0xD0, U 0x2D, U 0x24, 
 	U 0x66, U 0x8F, U 0x3A, U 0x63, 
 	U 0xFE, U 0x4D, U 0xDA, U 0x20, 
 	U 0xDB, U 0x30, U 0xDC, U 0x40, 
 	U 0xDD, U 0x50, U 0x58, U 0x13, 
-	U 0xBE, U 0xD2, U 0xA0, U 0xD1, 
+	U 0xD1, U 0xD2, U 0xA0, U 0xD1, 
 	U 0x0F, U 0x2A, U 0x2C, U 0x74, 
 	U 0x8B, U 0x10, U 0x58, U 0x0B, 
-	U 0xA7, U 0xD2, U 0xA0, U 0xD1, 
+	U 0xB9, U 0xD2, U 0xA0, U 0xD1, 
 	U 0x0F, U 0x29, U 0x21, U 0x38, 
 	U 0xC0, U 0x88, U 0x79, U 0x83, 
 	U 0x2E, U 0x8C, U 0x31, U 0x0C, 
 	U 0xFC, U 0x50, U 0x64, U 0xCE, 
 	U 0x22, U 0x2B, U 0x21, U 0x04, 
 	U 0xC0, U 0xC0, U 0x58, U 0x11, 
-	U 0xBB, U 0xC0, U 0xD0, U 0x1E, 
+	U 0xCE, U 0xC0, U 0xD0, U 0x1E, 
 	U 0xEA, U 0x0C, U 0x8F, U 0x3A, 
 	U 0x2B, U 0x20, U 0x0C, U 0x63, 
 	U 0xFE, U 0x0D, U 0xDA, U 0x20, 
-	U 0x58, U 0x13, U 0x1D, U 0x63, 
+	U 0x58, U 0x13, U 0x30, U 0x63, 
 	U 0xFF, U 0x7A, U 0xDA, U 0x20, 
 	U 0x5B, U 0xFF, U 0x22, U 0xD2, 
 	U 0xA0, U 0xD1, U 0x0F, U 0x00, 
@@ -2192,7 +2192,7 @@ static unsigned char t3fw[30772] = {
 	U 0x21, U 0x04, U 0xB1, U 0xCC, 
 	U 0x0C, U 0x0C, U 0x47, U 0x2C, 
 	U 0x24, U 0x66, U 0x58, U 0x11, 
-	U 0xAF, U 0x1E, U 0xEA, U 0x00, 
+	U 0xC2, U 0x1E, U 0xEA, U 0x00, 
 	U 0x2B, U 0x20, U 0x0C, U 0xC0, 
 	U 0xD0, U 0x2D, U 0x24, U 0x66, 
 	U 0x8F, U 0x3A, U 0x63, U 0xFD, 
@@ -2376,7 +2376,7 @@ static unsigned char t3fw[30772] = {
 	U 0xCF, U 0x0B, U 0x4B, U 0x0B, 
 	U 0x2B, U 0xC6, U 0x85, U 0xC0, 
 	U 0xB0, U 0x8C, U 0x15, U 0x58, 
-	U 0x11, U 0x9C, U 0xD2, U 0xA0, 
+	U 0x11, U 0xAF, U 0xD2, U 0xA0, 
 	U 0xD1, U 0x0F, U 0x8A, U 0x35, 
 	U 0x6F, U 0xA5, U 0x46, U 0xD8, 
 	U 0x30, U 0x8B, U 0xD5, U 0x6D, 
@@ -2388,7 +2388,7 @@ static unsigned char t3fw[30772] = {
 	U 0x08, U 0x0B, U 0x47, U 0x65, 
 	U 0xB1, U 0x0B, U 0xDA, U 0x20, 
 	U 0xDB, U 0x30, U 0x2C, U 0x12, 
-	U 0x05, U 0x58, U 0x11, U 0xBF, 
+	U 0x05, U 0x58, U 0x11, U 0xD2, 
 	U 0xD3, U 0xA0, U 0xC0, U 0xC1, 
 	U 0xC0, U 0xD0, U 0x2D, U 0xA4, 
 	U 0x03, U 0x9C, U 0x14, U 0x63, 
@@ -2401,25 +2401,25 @@ static unsigned char t3fw[30772] = {
 	U 0x88, U 0x14, U 0xCC, U 0x87, 
 	U 0xDA, U 0x20, U 0xDB, U 0x30, 
 	U 0x8C, U 0x15, U 0x58, U 0x11, 
-	U 0xB3, U 0xC0, U 0x20, U 0xD1, 
+	U 0xC6, U 0xC0, U 0x20, U 0xD1, 
 	U 0x0F, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x12, U 0x42, 
+	U 0xB6, U 0x58, U 0x12, U 0x55, 
 	U 0x63, U 0xFF, U 0xE4, U 0x00, 
 	U 0x00, U 0xDA, U 0x20, U 0x8B, 
-	U 0x10, U 0x58, U 0x12, U 0x3F, 
+	U 0x10, U 0x58, U 0x12, U 0x52, 
 	U 0x63, U 0xFF, U 0xD8, U 0x00, 
 	U 0x9E, U 0x17, U 0x8A, U 0x12, 
 	U 0x2B, U 0x21, U 0x04, U 0x58, 
-	U 0x10, U 0xD5, U 0x8E, U 0x17, 
+	U 0x10, U 0xE8, U 0x8E, U 0x17, 
 	U 0xC0, U 0x90, U 0x29, U 0x24, 
 	U 0x66, U 0x63, U 0xFE, U 0x34, 
 	U 0xC0, U 0x80, U 0x63, U 0xFE, 
 	U 0x06, U 0xDA, U 0x20, U 0xDB, 
 	U 0x30, U 0x8C, U 0x15, U 0xDD, 
-	U 0x50, U 0x58, U 0x12, U 0xC7, 
+	U 0x50, U 0x58, U 0x12, U 0xDA, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0xDA, U 0x20, U 0x58, U 0x12, 
-	U 0x33, U 0x63, U 0xFF, U 0xA7, 
+	U 0x46, U 0x63, U 0xFF, U 0xA7, 
 	U 0x00, U 0x2B, U 0x21, U 0x38, 
 	U 0xC0, U 0xA8, U 0x7B, U 0xAB, 
 	U 0x02, U 0x60, U 0x01, U 0x04, 
@@ -2427,7 +2427,7 @@ static unsigned char t3fw[30772] = {
 	U 0x50, U 0x64, U 0xCE, U 0x04, 
 	U 0x8A, U 0x12, U 0x2B, U 0x21, 
 	U 0x04, U 0xC0, U 0xC0, U 0x98, 
-	U 0x17, U 0x58, U 0x10, U 0xC3, 
+	U 0x17, U 0x58, U 0x10, U 0xD6, 
 	U 0x8E, U 0x17, U 0x63, U 0xFD, 
 	U 0xF3, U 0x2D, U 0x21, U 0x38, 
 	U 0x2D, U 0xDC, U 0xFF, U 0x0D, 
@@ -2458,7 +2458,7 @@ static unsigned char t3fw[30772] = {
 	U 0x8D, U 0x14, U 0x2E, U 0x0A, 
 	U 0x80, U 0xC0, U 0x8E, U 0x28, 
 	U 0x24, U 0x68, U 0x58, U 0x11, 
-	U 0x05, U 0xD2, U 0xA0, U 0xD1, 
+	U 0x18, U 0xD2, U 0xA0, U 0xD1, 
 	U 0x0F, U 0x2E, U 0x7C, U 0x48, 
 	U 0x19, U 0xE8, U 0xF5, U 0x2A, 
 	U 0x32, U 0x16, U 0x2B, U 0x76, 
@@ -2483,7 +2483,7 @@ static unsigned char t3fw[30772] = {
 	U 0x0C, U 0x47, U 0x2C, U 0x24, 
 	U 0x66, U 0xC9, U 0xC0, U 0x9E, 
 	U 0x17, U 0x8A, U 0x12, U 0x58, 
-	U 0x10, U 0x8C, U 0x8E, U 0x17, 
+	U 0x10, U 0x9F, U 0x8E, U 0x17, 
 	U 0xC0, U 0x34, U 0x8F, U 0x20, 
 	U 0xC0, U 0xD0, U 0x2D, U 0x24, 
 	U 0x66, U 0xC0, U 0x68, U 0x26, 
@@ -2493,7 +2493,7 @@ static unsigned char t3fw[30772] = {
 	U 0x66, U 0x98, U 0x17, U 0xB1, 
 	U 0xCC, U 0x0C, U 0x0C, U 0x47, 
 	U 0x2C, U 0x24, U 0x66, U 0x58, 
-	U 0x10, U 0x82, U 0x8E, U 0x17, 
+	U 0x10, U 0x95, U 0x8E, U 0x17, 
 	U 0x87, U 0x16, U 0xC0, U 0xD0, 
 	U 0x2D, U 0x24, U 0x66, U 0x63, 
 	U 0xFC, U 0xE6, U 0x8D, U 0x35, 
@@ -2578,13 +2578,13 @@ static unsigned char t3fw[30772] = {
 	U 0xCD, U 0x2D, U 0x25, U 0x23, 
 	U 0xC8, U 0x55, U 0xDA, U 0x20, 
 	U 0xDB, U 0x30, U 0x58, U 0x10, 
-	U 0x7B, U 0x29, U 0x21, U 0x02, 
+	U 0x8E, U 0x29, U 0x21, U 0x02, 
 	U 0xCC, U 0x96, U 0xC0, U 0xE8, 
 	U 0x0E, U 0x9E, U 0x02, U 0x2E, 
 	U 0x25, U 0x02, U 0xCC, U 0x57, 
 	U 0xDA, U 0x20, U 0xDB, U 0x30, 
-	U 0xDC, U 0x40, U 0x58, U 0x10, 
-	U 0xFC, U 0xC0, U 0x20, U 0xD1, 
+	U 0xDC, U 0x40, U 0x58, U 0x11, 
+	U 0x0F, U 0xC0, U 0x20, U 0xD1, 
 	U 0x0F, U 0x2C, U 0x20, U 0x66, 
 	U 0x89, U 0x31, U 0xB1, U 0xCC, 
 	U 0x0C, U 0x0C, U 0x47, U 0x2C, 
@@ -2694,28 +2694,28 @@ static unsigned char t3fw[30772] = {
 	U 0x20, U 0xD1, U 0x0F, U 0x00, 
 	U 0xC0, U 0x9A, U 0x63, U 0xFF, 
 	U 0xC6, U 0xDA, U 0x20, U 0x58, 
-	U 0x11, U 0x20, U 0x63, U 0xFE, 
+	U 0x11, U 0x33, U 0x63, U 0xFE, 
 	U 0x38, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x11, U 0x1D, 
+	U 0xB6, U 0x58, U 0x11, U 0x30, 
 	U 0x63, U 0xFE, U 0x2E, U 0x00, 
 	U 0x68, U 0x97, U 0x3C, U 0x2B, 
 	U 0x9C, U 0xFD, U 0x64, U 0xBE, 
 	U 0x24, U 0xC0, U 0x20, U 0xD1, 
 	U 0x0F, U 0xDA, U 0x20, U 0xDB, 
-	U 0x70, U 0x58, U 0x10, U 0xD9, 
+	U 0x70, U 0x58, U 0x10, U 0xEC, 
 	U 0xC0, U 0xC0, U 0xC0, U 0xD1, 
 	U 0x0A, U 0xDA, U 0x39, U 0x0A, 
 	U 0xDC, U 0x38, U 0x65, U 0xCD, 
 	U 0xE0, U 0x63, U 0xFE, U 0x09, 
 	U 0x8A, U 0x10, U 0x2B, U 0x21, 
-	U 0x04, U 0x58, U 0x0F, U 0xAA, 
+	U 0x04, U 0x58, U 0x0F, U 0xBD, 
 	U 0xC0, U 0xB0, U 0x2B, U 0x24, 
 	U 0x66, U 0x63, U 0xFE, U 0x21, 
 	U 0xDB, U 0x40, U 0x2A, U 0x2C, 
-	U 0x74, U 0x58, U 0x09, U 0x8B, 
+	U 0x74, U 0x58, U 0x09, U 0x9D, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0xDA, U 0x20, U 0x58, U 0x0F, 
-	U 0xAF, U 0x63, U 0xFC, U 0xF7, 
+	U 0xC2, U 0x63, U 0xFC, U 0xF7, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
 	U 0x20, U 0xD1, U 0x0F, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x29, 
@@ -2744,7 +2744,7 @@ static unsigned char t3fw[30772] = {
 	U 0x9B, U 0x68, U 0x98, U 0x0B, 
 	U 0x2A, U 0x9C, U 0xF9, U 0x65, 
 	U 0xA1, U 0xB2, U 0x02, U 0x2A, 
-	U 0x02, U 0x58, U 0x0F, U 0x91, 
+	U 0x02, U 0x58, U 0x0F, U 0xA4, 
 	U 0x89, U 0x37, U 0x1B, U 0xE7, 
 	U 0xD7, U 0xC8, U 0x91, U 0x64, 
 	U 0x52, U 0x0E, U 0x2A, U 0x21, 
@@ -2787,7 +2787,7 @@ static unsigned char t3fw[30772] = {
 	U 0x55, U 0x60, U 0x00, U 0x1E, 
 	U 0x2A, U 0x20, U 0x0C, U 0xC1, 
 	U 0xB2, U 0x8C, U 0x20, U 0x58, 
-	U 0x11, U 0x03, U 0x9A, U 0x18, 
+	U 0x11, U 0x16, U 0x9A, U 0x18, 
 	U 0x64, U 0xA2, U 0x45, U 0x8D, 
 	U 0x67, U 0x63, U 0xFF, U 0xCF, 
 	U 0xC0, U 0xC0, U 0x63, U 0xFF, 
@@ -2802,7 +2802,7 @@ static unsigned char t3fw[30772] = {
 	U 0x01, U 0x99, U 0xD7, U 0xA0, 
 	U 0xDA, U 0x20, U 0xDB, U 0x70, 
 	U 0xC1, U 0xC8, U 0x2D, U 0x21, 
-	U 0x20, U 0x58, U 0x10, U 0x9D, 
+	U 0x20, U 0x58, U 0x10, U 0xB0, 
 	U 0x8C, U 0x26, U 0x8B, U 0x27, 
 	U 0x9A, U 0x16, U 0x0C, U 0xBB, 
 	U 0x0C, U 0x7A, U 0xB3, U 0x34, 
@@ -2820,7 +2820,7 @@ static unsigned char t3fw[30772] = {
 	U 0x02, U 0x60, U 0x00, U 0x97, 
 	U 0xCF, U 0x58, U 0x60, U 0x00, 
 	U 0x1F, U 0xDA, U 0x20, U 0x8B, 
-	U 0x16, U 0x58, U 0x10, U 0x63, 
+	U 0x16, U 0x58, U 0x10, U 0x76, 
 	U 0x65, U 0xA1, U 0x38, U 0x63, 
 	U 0xFF, U 0xBD, U 0xC0, U 0x81, 
 	U 0xC0, U 0x90, U 0x8F, U 0x18, 
@@ -2829,7 +2829,7 @@ static unsigned char t3fw[30772] = {
 	U 0x97, U 0xF5, U 0x63, U 0xFF, 
 	U 0xD2, U 0xDB, U 0x30, U 0xDA, 
 	U 0x20, U 0xDC, U 0x40, U 0x58, 
-	U 0x10, U 0x07, U 0xC0, U 0x51, 
+	U 0x10, U 0x1A, U 0xC0, U 0x51, 
 	U 0xD6, U 0xA0, U 0xC0, U 0xC0, 
 	U 0x2B, U 0xA0, U 0x10, U 0x2C, 
 	U 0xA4, U 0x03, U 0x9B, U 0x17, 
@@ -2854,7 +2854,7 @@ static unsigned char t3fw[30772] = {
 	U 0x26, U 0x18, U 0x63, U 0xFE, 
 	U 0x96, U 0xDA, U 0x20, U 0xDB, 
 	U 0x30, U 0xDC, U 0x40, U 0xDD, 
-	U 0x50, U 0x58, U 0x11, U 0x11, 
+	U 0x50, U 0x58, U 0x11, U 0x24, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0xC0, U 0x30, U 0x2C, U 0x20, 
 	U 0x66, U 0x89, U 0x61, U 0xB1, 
@@ -2877,7 +2877,7 @@ static unsigned char t3fw[30772] = {
 	U 0x16, U 0xDC, U 0x40, U 0x2F, 
 	U 0x22, U 0x13, U 0xDD, U 0x50, 
 	U 0xB1, U 0xFF, U 0x2F, U 0x26, 
-	U 0x13, U 0x58, U 0x0F, U 0xA6, 
+	U 0x13, U 0x58, U 0x0F, U 0xB9, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0x00, U 0x28, U 0x20, U 0x3D, 
 	U 0x08, U 0x48, U 0x40, U 0x65, 
@@ -2902,28 +2902,28 @@ static unsigned char t3fw[30772] = {
 	U 0xD1, U 0x00, U 0x00, U 0x00, 
 	U 0x65, U 0x50, U 0x81, U 0xDA, 
 	U 0x20, U 0xDB, U 0x60, U 0xDC, 
-	U 0x40, U 0x58, U 0x0F, U 0xBD, 
+	U 0x40, U 0x58, U 0x0F, U 0xD0, 
 	U 0xC0, U 0x20, U 0xC0, U 0xF0, 
 	U 0x2F, U 0xA4, U 0x03, U 0xD1, 
 	U 0x0F, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x10, U 0x4B, 
+	U 0xB6, U 0x58, U 0x10, U 0x5E, 
 	U 0x63, U 0xFF, U 0xE0, U 0x00, 
 	U 0x00, U 0x6F, U 0x95, U 0x02, 
 	U 0x63, U 0xFD, U 0x6C, U 0xDA, 
 	U 0x20, U 0xDB, U 0x30, U 0xDC, 
 	U 0x40, U 0xDD, U 0x50, U 0xC4, 
-	U 0xE0, U 0x58, U 0x0F, U 0x3E, 
+	U 0xE0, U 0x58, U 0x0F, U 0x51, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0x8A, U 0x15, U 0x2B, U 0x21, 
-	U 0x04, U 0x58, U 0x0E, U 0xDB, 
+	U 0x04, U 0x58, U 0x0E, U 0xEE, 
 	U 0x23, U 0x24, U 0x66, U 0x28, 
 	U 0x60, U 0x10, U 0x98, U 0x17, 
 	U 0x63, U 0xFF, U 0x21, U 0x00, 
 	U 0xDA, U 0x20, U 0x58, U 0x10, 
-	U 0x3E, U 0x63, U 0xFF, U 0xAB, 
+	U 0x51, U 0x63, U 0xFF, U 0xAB, 
 	U 0xC8, U 0x58, U 0xDB, U 0x30, 
 	U 0xDA, U 0x20, U 0x58, U 0x0F, 
-	U 0x22, U 0x2A, U 0x21, U 0x02, 
+	U 0x35, U 0x2A, U 0x21, U 0x02, 
 	U 0x65, U 0xAF, U 0x9C, U 0xC0, 
 	U 0x94, U 0x09, U 0xA9, U 0x02, 
 	U 0x29, U 0x25, U 0x02, U 0x63, 
@@ -2932,11 +2932,11 @@ static unsigned char t3fw[30772] = {
 	U 0xC0, U 0xA3, U 0x2E, U 0x0A, 
 	U 0x80, U 0x2A, U 0x24, U 0x68, 
 	U 0xDA, U 0x20, U 0x58, U 0x0F, 
-	U 0x2B, U 0xD2, U 0xA0, U 0xD1, 
+	U 0x3E, U 0xD2, U 0xA0, U 0xD1, 
 	U 0x0F, U 0xC0, U 0x20, U 0xD1, 
 	U 0x0F, U 0xDA, U 0x20, U 0x2B, 
 	U 0x20, U 0x0C, U 0x58, U 0x10, 
-	U 0x53, U 0x63, U 0xFF, U 0x6B, 
+	U 0x66, U 0x63, U 0xFF, U 0x6B, 
 	U 0x6C, U 0x10, U 0x04, U 0x28, 
 	U 0x20, U 0x06, U 0xC0, U 0x62, 
 	U 0x28, U 0x8C, U 0xF8, U 0x65, 
@@ -3007,7 +3007,7 @@ static unsigned char t3fw[30772] = {
 	U 0xAF, U 0xE7, U 0x63, U 0xFF, 
 	U 0xA6, U 0x2A, U 0x2C, U 0x74, 
 	U 0xC0, U 0xB0, U 0x2C, U 0x0A, 
-	U 0x02, U 0x58, U 0x0E, U 0x15, 
+	U 0x02, U 0x58, U 0x0E, U 0x28, 
 	U 0x1C, U 0xE6, U 0xFB, U 0x9C, 
 	U 0xA0, U 0x8B, U 0x20, U 0x08, 
 	U 0xBB, U 0x11, U 0x06, U 0xBB, 
@@ -3017,10 +3017,10 @@ static unsigned char t3fw[30772] = {
 	U 0x26, U 0x24, U 0x68, U 0xDA, 
 	U 0x20, U 0xDB, U 0x30, U 0xDC, 
 	U 0x40, U 0xDD, U 0x50, U 0x58, 
-	U 0x10, U 0x6F, U 0xD2, U 0xA0, 
+	U 0x10, U 0x82, U 0xD2, U 0xA0, 
 	U 0xD1, U 0x0F, U 0xDA, U 0x20, 
 	U 0x2B, U 0x20, U 0x0C, U 0x58, 
-	U 0x0F, U 0xDA, U 0xC0, U 0x20, 
+	U 0x0F, U 0xED, U 0xC0, U 0x20, 
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x06, U 0x07, 
 	U 0x3D, U 0x14, U 0xC0, U 0x80, 
@@ -3239,7 +3239,7 @@ static unsigned char t3fw[30772] = {
 	U 0x21, U 0x23, U 0x65, U 0xD4, 
 	U 0xA0, U 0xC0, U 0xA6, U 0x2B, 
 	U 0x0A, U 0x03, U 0x2C, U 0x22, 
-	U 0x00, U 0x58, U 0x0F, U 0x17, 
+	U 0x00, U 0x58, U 0x0F, U 0x2A, 
 	U 0x64, U 0xA3, U 0xB9, U 0x17, 
 	U 0xE5, U 0xE6, U 0x8E, U 0x38, 
 	U 0x9A, U 0x16, U 0x64, U 0xE3, 
@@ -3248,11 +3248,11 @@ static unsigned char t3fw[30772] = {
 	U 0xF3, U 0x7E, U 0x83, U 0x11, 
 	U 0xC2, U 0xB0, U 0x8C, U 0x20, 
 	U 0x2A, U 0x20, U 0x0C, U 0x58, 
-	U 0x0F, U 0x36, U 0xD7, U 0xA0, 
+	U 0x0F, U 0x49, U 0xD7, U 0xA0, 
 	U 0xCD, U 0xA1, U 0x60, U 0x04, 
 	U 0xA2, U 0x00, U 0xC2, U 0xB0, 
 	U 0x8C, U 0x20, U 0x2A, U 0x20, 
-	U 0x0C, U 0x58, U 0x0F, U 0x0A, 
+	U 0x0C, U 0x58, U 0x0F, U 0x1D, 
 	U 0xD7, U 0xA0, U 0x64, U 0xA4, 
 	U 0x86, U 0x2F, U 0x21, U 0x2E, 
 	U 0x8B, U 0x68, U 0x0F, U 0xBF, 
@@ -3264,7 +3264,7 @@ static unsigned char t3fw[30772] = {
 	U 0x4C, U 0xDA, U 0x20, U 0xDB, 
 	U 0x50, U 0xC1, U 0xC4, U 0x2D, 
 	U 0x21, U 0x1F, U 0x58, U 0x0E, 
-	U 0xD0, U 0x8B, U 0x26, U 0x9A, 
+	U 0xE3, U 0x8B, U 0x26, U 0x9A, 
 	U 0x18, U 0x9A, U 0x19, U 0x89, 
 	U 0x27, U 0x2A, U 0xAC, U 0x38, 
 	U 0x0B, U 0x99, U 0x0C, U 0x7A, 
@@ -3291,11 +3291,11 @@ static unsigned char t3fw[30772] = {
 	U 0x93, U 0xC0, U 0xE0, U 0x63, 
 	U 0xFF, U 0xE2, U 0xDA, U 0x20, 
 	U 0x8B, U 0x18, U 0x58, U 0x0E, 
-	U 0x8D, U 0x65, U 0xA2, U 0xB1, 
+	U 0xA0, U 0x65, U 0xA2, U 0xB1, 
 	U 0x63, U 0xFF, U 0x9E, U 0x00, 
 	U 0x00, U 0xDA, U 0x20, U 0xDB, 
 	U 0x30, U 0x8C, U 0x15, U 0x58, 
-	U 0x0E, U 0x35, U 0xD6, U 0xA0, 
+	U 0x0E, U 0x48, U 0xD6, U 0xA0, 
 	U 0xC0, U 0xC0, U 0xC0, U 0xD1, 
 	U 0x2D, U 0x16, U 0x04, U 0x2C, 
 	U 0xA4, U 0x03, U 0xDC, U 0x70, 
@@ -3346,12 +3346,12 @@ static unsigned char t3fw[30772] = {
 	U 0x64, U 0x41, U 0x81, U 0xC0, 
 	U 0x44, U 0x2B, U 0x0A, U 0x00, 
 	U 0x8C, U 0x20, U 0x2A, U 0x20, 
-	U 0x0C, U 0x58, U 0x0E, U 0xAC, 
+	U 0x0C, U 0x58, U 0x0E, U 0xBF, 
 	U 0x0A, U 0xA7, U 0x02, U 0x65, 
 	U 0xA0, U 0x0F, U 0xC0, U 0xB0, 
 	U 0x2C, U 0x22, U 0x00, U 0x2A, 
 	U 0x20, U 0x0C, U 0x58, U 0x0E, 
-	U 0xA8, U 0xD7, U 0xA0, U 0x64, 
+	U 0xBB, U 0xD7, U 0xA0, U 0x64, 
 	U 0xAF, U 0xEF, U 0xDA, U 0x20, 
 	U 0xC1, U 0xBC, U 0xC1, U 0xC8, 
 	U 0x2D, U 0x21, U 0x20, U 0x8F, 
@@ -3360,7 +3360,7 @@ static unsigned char t3fw[30772] = {
 	U 0x26, U 0x0E, U 0x99, U 0x0C, 
 	U 0x09, U 0x09, U 0x48, U 0x29, 
 	U 0x25, U 0x25, U 0x58, U 0x0E, 
-	U 0x70, U 0xC0, U 0x90, U 0xC0, 
+	U 0x83, U 0xC0, U 0x90, U 0xC0, 
 	U 0x50, U 0xC0, U 0xC2, U 0x88, 
 	U 0x60, U 0x9A, U 0x19, U 0x1E, 
 	U 0xE5, U 0x6E, U 0xC0, U 0xA1, 
@@ -3442,7 +3442,7 @@ static unsigned char t3fw[30772] = {
 	U 0xFD, U 0x0B, U 0x2D, U 0xE6, 
 	U 0x85, U 0xDA, U 0x20, U 0x8B, 
 	U 0x19, U 0x8C, U 0x15, U 0x8D, 
-	U 0x14, U 0x58, U 0x0D, U 0x71, 
+	U 0x14, U 0x58, U 0x0D, U 0x84, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0xDC, U 0x70, U 0xDF, U 0x50, 
 	U 0xDB, U 0x60, U 0x2D, U 0x6C, 
@@ -3467,20 +3467,20 @@ static unsigned char t3fw[30772] = {
 	U 0xFF, U 0xE8, U 0x88, U 0x14, 
 	U 0x65, U 0x81, U 0x68, U 0xDA, 
 	U 0x20, U 0xDB, U 0x60, U 0x8C, 
-	U 0x15, U 0x58, U 0x0D, U 0x88, 
+	U 0x15, U 0x58, U 0x0D, U 0x9B, 
 	U 0xC0, U 0x20, U 0xC0, U 0x90, 
 	U 0x29, U 0xA4, U 0x03, U 0xD1, 
 	U 0x0F, U 0x8A, U 0x16, U 0x2B, 
 	U 0x21, U 0x04, U 0x58, U 0x0C, 
-	U 0xAF, U 0xC0, U 0xA0, U 0x2A, 
+	U 0xC2, U 0xC0, U 0xA0, U 0x2A, 
 	U 0x24, U 0x66, U 0x8E, U 0x68, 
 	U 0x63, U 0xFD, U 0xCA, U 0x00, 
 	U 0x00, U 0x2B, U 0x9C, U 0xF9, 
 	U 0x65, U 0xB0, U 0xFD, U 0xDA, 
-	U 0x20, U 0x58, U 0x0C, U 0xB4, 
+	U 0x20, U 0x58, U 0x0C, U 0xC7, 
 	U 0x63, U 0xFC, U 0x22, U 0x00, 
 	U 0x00, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x0E, U 0x0D, 
+	U 0xB6, U 0x58, U 0x0E, U 0x20, 
 	U 0x63, U 0xFF, U 0xBA, U 0x00, 
 	U 0x2B, U 0x20, U 0x0C, U 0x0C, 
 	U 0xBE, U 0x11, U 0xA7, U 0xEE, 
@@ -3500,7 +3500,7 @@ static unsigned char t3fw[30772] = {
 	U 0xC6, U 0x02, U 0x70, U 0x96, 
 	U 0x0C, U 0x8A, U 0x16, U 0x2B, 
 	U 0x21, U 0x04, U 0x58, U 0x0C, 
-	U 0x93, U 0xC0, U 0xD0, U 0x2D, 
+	U 0xA6, U 0xC0, U 0xD0, U 0x2D, 
 	U 0x24, U 0x66, U 0x8E, U 0x30, 
 	U 0x77, U 0xE7, U 0x4D, U 0x1C, 
 	U 0xE4, U 0xF1, U 0x1B, U 0xE4, 
@@ -3528,7 +3528,7 @@ static unsigned char t3fw[30772] = {
 	U 0x8B, U 0x14, U 0x2C, U 0x25, 
 	U 0x23, U 0xC8, U 0xB7, U 0x02, 
 	U 0x2A, U 0x02, U 0x06, U 0x6B, 
-	U 0x02, U 0x58, U 0x0C, U 0xC4, 
+	U 0x02, U 0x58, U 0x0C, U 0xD7, 
 	U 0x2A, U 0x21, U 0x02, U 0x65, 
 	U 0xAE, U 0xF7, U 0xC0, U 0xD8, 
 	U 0x0D, U 0xAD, U 0x02, U 0x2D, 
@@ -3536,38 +3536,38 @@ static unsigned char t3fw[30772] = {
 	U 0xEC, U 0x00, U 0x8E, U 0x14, 
 	U 0xC8, U 0xE8, U 0xDA, U 0x20, 
 	U 0xDB, U 0x30, U 0x58, U 0x0C, 
-	U 0xBD, U 0x2A, U 0x21, U 0x02, 
+	U 0xD0, U 0x2A, U 0x21, U 0x02, 
 	U 0x65, U 0xAE, U 0xDA, U 0x07, 
 	U 0xAF, U 0x02, U 0x2F, U 0x25, 
 	U 0x02, U 0x63, U 0xFE, U 0xD1, 
 	U 0x00, U 0xDA, U 0x20, U 0xDB, 
 	U 0x30, U 0x8C, U 0x15, U 0x8D, 
-	U 0x14, U 0x58, U 0x0E, U 0x61, 
+	U 0x14, U 0x58, U 0x0E, U 0x74, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0xDA, U 0x20, U 0x2B, U 0x20, 
-	U 0x0C, U 0x58, U 0x0D, U 0xCC, 
+	U 0x0C, U 0x58, U 0x0D, U 0xDF, 
 	U 0x63, U 0xFE, U 0xB6, U 0x00, 
 	U 0xDA, U 0x20, U 0x2B, U 0x20, 
-	U 0x0C, U 0x58, U 0x0D, U 0xEE, 
+	U 0x0C, U 0x58, U 0x0E, U 0x01, 
 	U 0x63, U 0xFE, U 0xAA, U 0xDA, 
 	U 0x20, U 0xDB, U 0x30, U 0x8C, 
 	U 0x15, U 0x2D, U 0x12, U 0x04, 
 	U 0x2E, U 0x0A, U 0x80, U 0x28, 
 	U 0x0A, U 0x00, U 0x28, U 0x24, 
-	U 0x68, U 0x58, U 0x0C, U 0xBC, 
+	U 0x68, U 0x58, U 0x0C, U 0xCF, 
 	U 0x63, U 0xFA, U 0xE5, U 0x00, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0xDA, U 0x20, U 0x58, U 0x0D, 
-	U 0xC0, U 0x89, U 0x14, U 0xCD, 
+	U 0xD3, U 0x89, U 0x14, U 0xCD, 
 	U 0x92, U 0xDA, U 0x20, U 0xDB, 
 	U 0x30, U 0x8C, U 0x15, U 0x58, 
-	U 0x0D, U 0x2B, U 0xDB, U 0xA0, 
+	U 0x0D, U 0x3E, U 0xDB, U 0xA0, 
 	U 0xC0, U 0x20, U 0xC0, U 0xA0, 
 	U 0x2A, U 0xB4, U 0x03, U 0xD1, 
 	U 0x0F, U 0xC0, U 0x20, U 0xD1, 
 	U 0x0F, U 0x2A, U 0x2C, U 0x74, 
 	U 0x8B, U 0x15, U 0x58, U 0x06, 
-	U 0x35, U 0xD2, U 0xA0, U 0xD1, 
+	U 0x47, U 0xD2, U 0xA0, U 0xD1, 
 	U 0x0F, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x0E, U 0x28, 
 	U 0x21, U 0x02, U 0x24, U 0x16, 
@@ -3804,15 +3804,15 @@ static unsigned char t3fw[30772] = {
 	U 0xC0, U 0x90, U 0x63, U 0xFF, 
 	U 0x5E, U 0xCC, U 0x57, U 0xDA, 
 	U 0x20, U 0xDB, U 0x30, U 0x8C, 
-	U 0x11, U 0x58, U 0x0C, U 0x37, 
+	U 0x11, U 0x58, U 0x0C, U 0x4A, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0x00, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x0C, U 0xC6, 
+	U 0xB6, U 0x58, U 0x0C, U 0xD9, 
 	U 0x63, U 0xFF, U 0xE5, U 0x00, 
 	U 0xDA, U 0x20, U 0x58, U 0x0C, 
-	U 0xC4, U 0x63, U 0xFF, U 0xDC, 
+	U 0xD7, U 0x63, U 0xFF, U 0xDC, 
 	U 0x2A, U 0x2C, U 0x74, U 0x8B, 
-	U 0x11, U 0x58, U 0x05, U 0x3F, 
+	U 0x11, U 0x58, U 0x05, U 0x51, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x06, U 0x28, 
 	U 0x20, U 0x06, U 0x8A, U 0x33, 
@@ -3946,7 +3946,7 @@ static unsigned char t3fw[30772] = {
 	U 0x2D, U 0x20, U 0x6A, U 0x0D, 
 	U 0x2D, U 0x41, U 0x65, U 0xDF, 
 	U 0x7E, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB0, U 0x58, U 0x0C, U 0x8E, 
+	U 0xB0, U 0x58, U 0x0C, U 0xA1, 
 	U 0x64, U 0xAF, U 0x18, U 0xC0, 
 	U 0xF1, U 0x63, U 0xFE, U 0xEF, 
 	U 0x9F, U 0x27, U 0x63, U 0xFF, 
@@ -4041,7 +4041,7 @@ static unsigned char t3fw[30772] = {
 	U 0xEE, U 0x12, U 0xDA, U 0x70, 
 	U 0xC0, U 0xB3, U 0x2C, U 0x3C, 
 	U 0x18, U 0xDD, U 0x50, U 0x58, 
-	U 0x0A, U 0x86, U 0x89, U 0x40, 
+	U 0x0A, U 0x99, U 0x89, U 0x40, 
 	U 0xC0, U 0x80, U 0x63, U 0xFE, 
 	U 0xE3, U 0x06, U 0x6E, U 0x02, 
 	U 0x02, U 0x2A, U 0x02, U 0xDB, 
@@ -4049,7 +4049,7 @@ static unsigned char t3fw[30772] = {
 	U 0x50, U 0x58, U 0x00, U 0x04, 
 	U 0x9A, U 0x10, U 0xDB, U 0x50, 
 	U 0xDA, U 0x70, U 0x58, U 0x04, 
-	U 0x53, U 0x88, U 0x10, U 0x63, 
+	U 0x65, U 0x88, U 0x10, U 0x63, 
 	U 0xFE, U 0xF7, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x06, U 0x92, 
 	U 0x12, U 0x1E, U 0xE2, U 0xC6, 
@@ -4149,7 +4149,7 @@ static unsigned char t3fw[30772] = {
 	U 0x14, U 0x7B, U 0xA3, U 0x17, 
 	U 0x9D, U 0x13, U 0x2A, U 0x20, 
 	U 0x0C, U 0x8B, U 0x10, U 0x8C, 
-	U 0x20, U 0x58, U 0x0B, U 0xB0, 
+	U 0x20, U 0x58, U 0x0B, U 0xC3, 
 	U 0x8C, U 0x14, U 0x8D, U 0x13, 
 	U 0xDB, U 0xA0, U 0xCE, U 0xAC, 
 	U 0x60, U 0x01, U 0xC4, U 0x00, 
@@ -4178,13 +4178,13 @@ static unsigned char t3fw[30772] = {
 	U 0x63, U 0xFF, U 0xDD, U 0x00, 
 	U 0x00, U 0x9D, U 0x13, U 0x9C, 
 	U 0x14, U 0xDA, U 0x20, U 0xDB, 
-	U 0x70, U 0x58, U 0x0B, U 0x15, 
+	U 0x70, U 0x58, U 0x0B, U 0x28, 
 	U 0x8B, U 0x15, U 0x8C, U 0x14, 
 	U 0x8D, U 0x13, U 0x65, U 0xA0, 
 	U 0x6A, U 0x8E, U 0x62, U 0x63, 
 	U 0xFF, U 0xCC, U 0x00, U 0xDA, 
 	U 0x20, U 0x8B, U 0x11, U 0xDC, 
-	U 0x40, U 0x58, U 0x0A, U 0xBB, 
+	U 0x40, U 0x58, U 0x0A, U 0xCE, 
 	U 0xD6, U 0xA0, U 0x8B, U 0x15, 
 	U 0xC0, U 0x51, U 0xDE, U 0x70, 
 	U 0xDA, U 0x20, U 0xDC, U 0x60, 
@@ -4207,13 +4207,13 @@ static unsigned char t3fw[30772] = {
 	U 0x07, U 0x5B, U 0xFF, U 0x09, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0x00, U 0xDB, U 0xE0, U 0xDA, 
-	U 0x20, U 0x58, U 0x0B, U 0x36, 
+	U 0x20, U 0x58, U 0x0B, U 0x49, 
 	U 0x65, U 0x50, U 0xEF, U 0x2A, 
 	U 0x20, U 0x14, U 0x0A, U 0x3A, 
 	U 0x40, U 0x65, U 0xA0, U 0xEB, 
 	U 0xDB, U 0x60, U 0xDC, U 0x40, 
 	U 0xDD, U 0x30, U 0x02, U 0x2A, 
-	U 0x02, U 0x58, U 0x09, U 0xA7, 
+	U 0x02, U 0x58, U 0x09, U 0xBA, 
 	U 0xD6, U 0xA0, U 0x64, U 0xA0, 
 	U 0xD5, U 0x84, U 0xA1, U 0x83, 
 	U 0xA0, U 0x04, U 0x04, U 0x47, 
@@ -4267,7 +4267,7 @@ static unsigned char t3fw[30772] = {
 	U 0xFE, U 0x0C, U 0x8D, U 0x65, 
 	U 0x63, U 0xFF, U 0xA5, U 0x00, 
 	U 0xDA, U 0x20, U 0x2B, U 0x20, 
-	U 0x0C, U 0x58, U 0x0B, U 0x1F, 
+	U 0x0C, U 0x58, U 0x0B, U 0x32, 
 	U 0x64, U 0x5F, U 0x0F, U 0xC0, 
 	U 0x20, U 0xD1, U 0x0F, U 0x00, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
@@ -4385,8 +4385,8 @@ static unsigned char t3fw[30772] = {
 	U 0x2C, U 0x0A, U 0x01, U 0x58, 
 	U 0x00, U 0xD1, U 0xC9, U 0xAA, 
 	U 0xDA, U 0x20, U 0xDB, U 0x30, 
-	U 0xDC, U 0x40, U 0x58, U 0x09, 
-	U 0xF2, U 0x29, U 0xA0, U 0x11, 
+	U 0xDC, U 0x40, U 0x58, U 0x0A, 
+	U 0x05, U 0x29, U 0xA0, U 0x11, 
 	U 0xD3, U 0xA0, U 0x7E, U 0x97, 
 	U 0x08, U 0x2C, U 0x0A, U 0xFD, 
 	U 0x0C, U 0x9C, U 0x01, U 0x2C, 
@@ -4397,7 +4397,7 @@ static unsigned char t3fw[30772] = {
 	U 0xDA, U 0x20, U 0xDB, U 0x30, 
 	U 0xDC, U 0x40, U 0xDD, U 0x50, 
 	U 0xC0, U 0xE0, U 0x58, U 0x09, 
-	U 0x72, U 0xD2, U 0xA0, U 0xD1, 
+	U 0x85, U 0xD2, U 0xA0, U 0xD1, 
 	U 0x0F, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x06, U 0x16, 
 	U 0xE1, U 0x5F, U 0x1C, U 0xE1, 
@@ -4428,26 +4428,26 @@ static unsigned char t3fw[30772] = {
 	U 0x2A, U 0x21, U 0x04, U 0x19, 
 	U 0xE1, U 0x85, U 0xD3, U 0x0F, 
 	U 0x7A, U 0x9B, U 0x2E, U 0xDA, 
-	U 0x20, U 0x58, U 0x08, U 0x6E, 
+	U 0x20, U 0x58, U 0x08, U 0x81, 
 	U 0x60, U 0x00, U 0x35, U 0x00, 
 	U 0x2D, U 0x21, U 0x04, U 0x1B, 
 	U 0xE1, U 0x80, U 0x7D, U 0xBB, 
 	U 0x24, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x08, U 0x69, 
+	U 0xB6, U 0x58, U 0x08, U 0x7C, 
 	U 0xCA, U 0x54, U 0x60, U 0x01, 
 	U 0x03, U 0x0B, U 0x2B, U 0x50, 
 	U 0x2B, U 0x24, U 0x0B, U 0xB4, 
 	U 0xBB, U 0x0B, U 0x0B, U 0x47, 
 	U 0x2B, U 0x24, U 0x0C, U 0x63, 
 	U 0xFF, U 0xA0, U 0xDA, U 0x20, 
-	U 0x58, U 0x0A, U 0x4D, U 0x60, 
+	U 0x58, U 0x0A, U 0x60, U 0x60, 
 	U 0x00, U 0x06, U 0xDA, U 0x20, 
 	U 0xC0, U 0xB6, U 0x58, U 0x0A, 
-	U 0x4B, U 0x65, U 0x50, U 0xE0, 
+	U 0x5E, U 0x65, U 0x50, U 0xE0, 
 	U 0xDC, U 0x40, U 0xDB, U 0x30, 
 	U 0x2D, U 0x32, U 0x00, U 0x02, 
 	U 0x2A, U 0x02, U 0x0D, U 0x6D, 
-	U 0x51, U 0x58, U 0x08, U 0xBD, 
+	U 0x51, U 0x58, U 0x08, U 0xD0, 
 	U 0x1C, U 0xE1, U 0x30, U 0xD3, 
 	U 0xA0, U 0x64, U 0xA0, U 0xC8, 
 	U 0xC0, U 0x51, U 0x84, U 0xA1, 
@@ -4463,7 +4463,7 @@ static unsigned char t3fw[30772] = {
 	U 0xAE, U 0xCC, U 0x0C, U 0x0C, 
 	U 0x47, U 0x2C, U 0x24, U 0x66, 
 	U 0x7C, U 0xFB, U 0x09, U 0x9D, 
-	U 0x10, U 0x58, U 0x08, U 0xCF, 
+	U 0x10, U 0x58, U 0x08, U 0xE2, 
 	U 0x8D, U 0x10, U 0x27, U 0x24, 
 	U 0x66, U 0x94, U 0xD1, U 0x1E, 
 	U 0xE1, U 0x33, U 0xB8, U 0xDC, 
@@ -4492,7 +4492,7 @@ static unsigned char t3fw[30772] = {
 	U 0x47, U 0x63, U 0xFE, U 0xA1, 
 	U 0x2A, U 0x2C, U 0x74, U 0x2B, 
 	U 0x0A, U 0x01, U 0x04, U 0x4D, 
-	U 0x02, U 0x58, U 0x08, U 0xC2, 
+	U 0x02, U 0x58, U 0x08, U 0xD5, 
 	U 0x2F, U 0x20, U 0x0C, U 0x12, 
 	U 0xE1, U 0x09, U 0x0C, U 0xF9, 
 	U 0x11, U 0xA6, U 0x99, U 0xA2, 
@@ -4574,13 +4574,13 @@ static unsigned char t3fw[30772] = {
 	U 0x63, U 0xFF, U 0xB4, U 0x00, 
 	U 0xCC, U 0x58, U 0x2A, U 0x6C, 
 	U 0x74, U 0xDB, U 0x30, U 0xDC, 
-	U 0x40, U 0x58, U 0x07, U 0xF6, 
+	U 0x40, U 0x58, U 0x08, U 0x09, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0xDA, U 0x60, U 0x58, U 0x09, 
-	U 0xC5, U 0x63, U 0xFF, U 0xE7, 
+	U 0xD8, U 0x63, U 0xFF, U 0xE7, 
 	U 0xDD, U 0x40, U 0x2A, U 0x6C, 
 	U 0x74, U 0xC0, U 0xB0, U 0xDC, 
-	U 0x70, U 0x58, U 0x08, U 0x6A, 
+	U 0x70, U 0x58, U 0x08, U 0x7D, 
 	U 0x2E, U 0x30, U 0x08, U 0x8B, 
 	U 0x10, U 0x00, U 0xEE, U 0x32, 
 	U 0x2E, U 0x74, U 0x00, U 0x28, 
@@ -4643,7 +4643,7 @@ static unsigned char t3fw[30772] = {
 	U 0xDA, U 0x20, U 0xDB, U 0x30, 
 	U 0xDC, U 0x40, U 0xDD, U 0x50, 
 	U 0xC0, U 0xE0, U 0x58, U 0x08, 
-	U 0x7C, U 0xD2, U 0xA0, U 0xD1, 
+	U 0x8F, U 0xD2, U 0xA0, U 0xD1, 
 	U 0x0F, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xCB, 
 	U 0x55, U 0x13, U 0xE0, U 0x74, 
@@ -4717,10 +4717,10 @@ static unsigned char t3fw[30772] = {
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0x00, U 0xCC, U 0x57, U 0xDA, 
 	U 0x60, U 0xDB, U 0x30, U 0xDC, 
-	U 0x40, U 0x58, U 0x08, U 0xA6, 
+	U 0x40, U 0x58, U 0x08, U 0xB9, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0xDA, U 0x60, U 0x58, U 0x09, 
-	U 0x36, U 0x63, U 0xFF, U 0xE8, 
+	U 0x49, U 0x63, U 0xFF, U 0xE8, 
 	U 0x00, U 0x28, U 0x22, U 0x1E, 
 	U 0x29, U 0x22, U 0x1D, U 0xD3, 
 	U 0x0F, U 0x78, U 0x99, U 0x01, 
@@ -4776,16 +4776,16 @@ static unsigned char t3fw[30772] = {
 	U 0x69, U 0x2A, U 0x6C, U 0x74, 
 	U 0xC0, U 0xB1, U 0xDC, U 0x90, 
 	U 0xDD, U 0x40, U 0x58, U 0x07, 
-	U 0xA7, U 0x1D, U 0xDF, U 0xEE, 
+	U 0xBA, U 0x1D, U 0xDF, U 0xEE, 
 	U 0x63, U 0xFE, U 0xC1, U 0x00, 
 	U 0xD9, U 0xA0, U 0xDA, U 0x60, 
 	U 0xDB, U 0x30, U 0xC2, U 0xD0, 
 	U 0xC1, U 0xE0, U 0xDC, U 0x40, 
 	U 0x09, U 0xDE, U 0x39, U 0xDD, 
-	U 0x50, U 0x58, U 0x07, U 0xF0, 
+	U 0x50, U 0x58, U 0x08, U 0x03, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
-	U 0xDA, U 0x60, U 0x58, U 0x08, 
-	U 0xF5, U 0x63, U 0xFE, U 0xE4, 
+	U 0xDA, U 0x60, U 0x58, U 0x09, 
+	U 0x08, U 0x63, U 0xFE, U 0xE4, 
 	U 0x29, U 0x0A, U 0x01, U 0x29, 
 	U 0xA4, U 0x17, U 0x0D, U 0xBF, 
 	U 0x08, U 0x2E, U 0x82, U 0x85, 
@@ -4793,7 +4793,7 @@ static unsigned char t3fw[30772] = {
 	U 0xEC, U 0x20, U 0x2E, U 0x86, 
 	U 0x85, U 0x64, U 0x50, U 0x0B, 
 	U 0x2A, U 0x6C, U 0x74, U 0xDB, 
-	U 0x40, U 0x58, U 0x01, U 0x6A, 
+	U 0x40, U 0x58, U 0x01, U 0x7C, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x06, U 0x2B, 
@@ -4887,23 +4887,23 @@ static unsigned char t3fw[30772] = {
 	U 0x90, U 0x65, U 0x2A, U 0x21, 
 	U 0x04, U 0x19, U 0xDF, U 0xB9, 
 	U 0x7A, U 0x9B, U 0x22, U 0xDA, 
-	U 0x20, U 0x58, U 0x06, U 0xA3, 
+	U 0x20, U 0x58, U 0x06, U 0xB6, 
 	U 0x60, U 0x00, U 0x29, U 0x00, 
 	U 0x2C, U 0x21, U 0x04, U 0x1B, 
 	U 0xDF, U 0xB5, U 0x7C, U 0xBB, 
 	U 0x18, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x06, U 0x9E, 
+	U 0xB6, U 0x58, U 0x06, U 0xB1, 
 	U 0xC9, U 0x58, U 0x60, U 0x01, 
 	U 0x4C, U 0xC0, U 0x90, U 0x63, 
 	U 0xFF, U 0xCC, U 0xDA, U 0x20, 
-	U 0x58, U 0x08, U 0x85, U 0x60, 
+	U 0x58, U 0x08, U 0x98, U 0x60, 
 	U 0x00, U 0x06, U 0xDA, U 0x20, 
 	U 0xC0, U 0xB6, U 0x58, U 0x08, 
-	U 0x83, U 0x65, U 0x51, U 0x35, 
+	U 0x96, U 0x65, U 0x51, U 0x35, 
 	U 0xDC, U 0x40, U 0xDB, U 0x30, 
 	U 0x8D, U 0x30, U 0xDA, U 0x20, 
 	U 0x0D, U 0x6D, U 0x51, U 0x58, 
-	U 0x06, U 0xF6, U 0xC0, U 0xD0, 
+	U 0x07, U 0x09, U 0xC0, U 0xD0, 
 	U 0xD3, U 0xA0, U 0x64, U 0xA1, 
 	U 0x20, U 0x29, U 0x21, U 0x02, 
 	U 0xC0, U 0x51, U 0x84, U 0xA1, 
@@ -4921,7 +4921,7 @@ static unsigned char t3fw[30772] = {
 	U 0xBB, U 0x15, U 0x9F, U 0x13, 
 	U 0x9E, U 0x14, U 0x8A, U 0x10, 
 	U 0x8B, U 0x11, U 0x58, U 0x07, 
-	U 0x06, U 0x8E, U 0x14, U 0x8F, 
+	U 0x19, U 0x8E, U 0x14, U 0x8F, 
 	U 0x13, U 0xC0, U 0xD0, U 0x2D, 
 	U 0x24, U 0x66, U 0x8A, U 0x30, 
 	U 0xC0, U 0x92, U 0xC1, U 0xC8, 
@@ -4974,191 +4974,209 @@ static unsigned char t3fw[30772] = {
 	U 0x9E, U 0x14, U 0x2A, U 0x2C, 
 	U 0x74, U 0xC0, U 0xB1, U 0xDC, 
 	U 0x70, U 0xDD, U 0x40, U 0x58, 
-	U 0x06, U 0xE1, U 0x8E, U 0x14, 
+	U 0x06, U 0xF4, U 0x8E, U 0x14, 
 	U 0xC0, U 0xD0, U 0x1B, U 0xDF, 
 	U 0x35, U 0xC1, U 0xC8, U 0x63, 
 	U 0xFF, U 0x6A, U 0xC0, U 0x20, 
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x06, U 0x28, 
-	U 0x21, U 0x02, U 0x16, U 0xDF, 
+	U 0x21, U 0x02, U 0x17, U 0xDF, 
 	U 0x1A, U 0x08, U 0x08, U 0x4C, 
-	U 0x65, U 0x82, U 0x19, U 0x29, 
-	U 0x62, U 0x9E, U 0x6F, U 0x98, 
-	U 0x02, U 0x60, U 0x02, U 0x20, 
-	U 0x19, U 0xDF, U 0x15, U 0x29, 
-	U 0x92, U 0x26, U 0x68, U 0x90, 
-	U 0x07, U 0x8A, U 0x20, U 0x09, 
-	U 0xAA, U 0x0C, U 0x65, U 0xA2, 
-	U 0x0F, U 0x27, U 0x62, U 0x9D, 
-	U 0xC0, U 0xCC, U 0x64, U 0x72, 
-	U 0x07, U 0x2B, U 0x21, U 0x04, 
-	U 0x8E, U 0x31, U 0xC0, U 0xA0, 
-	U 0xDD, U 0xA0, U 0x0E, U 0xFE, 
-	U 0x50, U 0x0E, U 0xCD, U 0x38, 
-	U 0x6E, U 0xB8, U 0x10, U 0x2C, 
-	U 0x20, U 0x66, U 0xB1, U 0xCC, 
-	U 0x0C, U 0x0C, U 0x47, U 0x2C, 
-	U 0x24, U 0x66, U 0x7C, U 0xDB, 
-	U 0x02, U 0x60, U 0x01, U 0xEF, 
-	U 0xC0, U 0xC1, U 0x29, U 0x30, 
-	U 0x08, U 0x1B, U 0xDF, U 0x07, 
-	U 0x64, U 0x90, U 0x9C, U 0x2F, 
-	U 0x0A, U 0xFF, U 0xC0, U 0xD3, 
-	U 0xB0, U 0x9E, U 0x64, U 0xE1, 
-	U 0x02, U 0x68, U 0x92, U 0x13, 
-	U 0x64, U 0x50, U 0x88, U 0x2A, 
+	U 0x65, U 0x82, U 0x49, U 0x29, 
+	U 0x72, U 0x9E, U 0x6F, U 0x98, 
+	U 0x02, U 0x60, U 0x02, U 0x50, 
+	U 0x19, U 0xDF, U 0x15, U 0x2A, 
+	U 0x92, U 0x26, U 0x68, U 0xA0, 
+	U 0x07, U 0x8B, U 0x20, U 0x0A, 
+	U 0xBB, U 0x0C, U 0x65, U 0xB2, 
+	U 0x3F, U 0x2A, U 0x72, U 0x9D, 
+	U 0xC0, U 0xCC, U 0x64, U 0xA2, 
+	U 0x37, U 0x1D, U 0xDF, U 0x11, 
+	U 0xC0, U 0x60, U 0x2B, U 0x30, 
+	U 0x08, U 0xC0, U 0xF1, U 0x64, 
+	U 0xB0, U 0x71, U 0x2E, U 0x0A, 
+	U 0xFF, U 0xB0, U 0xB8, U 0x64, 
+	U 0x81, U 0x51, U 0x2D, U 0xBC, 
+	U 0xFE, U 0x64, U 0xD0, U 0xF3, 
+	U 0x64, U 0x50, U 0x5C, U 0x2A, 
 	U 0x2C, U 0x74, U 0x04, U 0x4B, 
-	U 0x02, U 0x58, U 0x00, U 0x93, 
+	U 0x02, U 0x58, U 0x00, U 0xAD, 
 	U 0x0A, U 0xA2, U 0x02, U 0x06, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
-	U 0x2B, U 0x20, U 0x0C, U 0x27, 
-	U 0x21, U 0x04, U 0x0C, U 0xBC, 
-	U 0x11, U 0xA6, U 0xCC, U 0x29, 
-	U 0xC2, U 0x86, U 0x28, U 0x0A, 
-	U 0x08, U 0x79, U 0x83, U 0x02, 
-	U 0x60, U 0x01, U 0xB9, U 0x19, 
-	U 0xDE, U 0xF7, U 0x09, U 0xB9, 
-	U 0x0A, U 0x29, U 0x92, U 0xA3, 
-	U 0x68, U 0x90, U 0x08, U 0x2E, 
-	U 0x22, U 0x00, U 0x09, U 0xEE, 
-	U 0x0C, U 0x65, U 0xE1, U 0xA4, 
-	U 0x2E, U 0xC2, U 0x85, U 0x64, 
-	U 0xE1, U 0x9E, U 0x26, U 0x20, 
-	U 0x07, U 0x13, U 0xDF, U 0x00, 
-	U 0x6E, U 0x7B, U 0x02, U 0x60, 
-	U 0x01, U 0x9A, U 0x17, U 0xDE, 
-	U 0xF7, U 0x1F, U 0xDF, U 0x00, 
-	U 0x19, U 0xDF, U 0x2D, U 0xC0, 
-	U 0xD2, U 0x28, U 0x20, U 0x0A, 
-	U 0x93, U 0xE0, U 0x9D, U 0xE1, 
-	U 0xA9, U 0x69, U 0x0F, U 0x88, 
-	U 0x02, U 0x98, U 0xE2, U 0x2F, 
-	U 0x90, U 0x80, U 0x2A, U 0x94, 
-	U 0x80, U 0xB1, U 0xFF, U 0x07, 
-	U 0xFF, U 0x02, U 0x9F, U 0xE3, 
-	U 0x2E, U 0xC2, U 0x85, U 0x1F, 
-	U 0xDE, U 0xEA, U 0x0E, U 0xDE, 
-	U 0x0B, U 0xAF, U 0xBF, U 0x2A, 
-	U 0xF4, U 0xCF, U 0x2E, U 0xC6, 
-	U 0x85, U 0x65, U 0x5F, U 0x76, 
+	U 0x00, U 0x1A, U 0xDF, U 0x15, 
+	U 0x2C, U 0x20, U 0x07, U 0x6E, 
+	U 0xBB, U 0x02, U 0x60, U 0x02, 
+	U 0x22, U 0x18, U 0xDF, U 0x0B, 
+	U 0x13, U 0xDF, U 0x15, U 0x1B, 
+	U 0xDF, U 0x41, U 0xC0, U 0xE2, 
+	U 0x29, U 0x20, U 0x0A, U 0x9A, 
+	U 0xD0, U 0x9E, U 0xD1, U 0xAB, 
+	U 0xCB, U 0x03, U 0x99, U 0x02, 
+	U 0x99, U 0xD2, U 0x23, U 0xB0, 
+	U 0x80, U 0x26, U 0xB4, U 0x80, 
+	U 0xB1, U 0x33, U 0x08, U 0x33, 
+	U 0x02, U 0x93, U 0xD3, U 0x18, 
+	U 0xDE, U 0xFF, U 0x0C, U 0xFD, 
+	U 0x11, U 0xA7, U 0xDD, U 0x2C, 
+	U 0xD2, U 0x85, U 0xA8, U 0xF8, 
+	U 0x26, U 0x84, U 0xCF, U 0x0C, 
+	U 0xEC, U 0x0B, U 0x2C, U 0xD6, 
+	U 0x85, U 0x65, U 0x5F, U 0xA2, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
-	U 0x28, U 0x30, U 0x10, U 0x29, 
-	U 0x30, U 0x11, U 0x2E, U 0x30, 
-	U 0x13, U 0x00, U 0x99, U 0x32, 
-	U 0x00, U 0xED, U 0x32, U 0x64, 
-	U 0x80, U 0xEE, U 0x2A, U 0x30, 
-	U 0x14, U 0x1F, U 0xDF, U 0x1A, 
-	U 0x00, U 0xAA, U 0x32, U 0x78, 
-	U 0xEF, U 0x05, U 0x0F, U 0x9E, 
-	U 0x09, U 0x2D, U 0xE4, U 0x7F, 
-	U 0x1E, U 0xDF, U 0x18, U 0x66, 
-	U 0xA0, U 0x05, U 0x0F, U 0x98, 
-	U 0x09, U 0x2A, U 0x84, U 0x80, 
-	U 0xB4, U 0xA7, U 0x18, U 0xDF, 
-	U 0x15, U 0xC7, U 0x6F, U 0x00, 
-	U 0x91, U 0x04, U 0xAE, U 0x9E, 
-	U 0xDD, U 0xE0, U 0x00, U 0xAF, 
-	U 0x1A, U 0x00, U 0xC3, U 0x1A, 
-	U 0x6E, U 0xE1, U 0x05, U 0x2D, 
-	U 0xB2, U 0x00, U 0x0D, U 0xED, 
-	U 0x0C, U 0x1E, U 0xDF, U 0x0F, 
-	U 0x08, U 0xD8, U 0x1C, U 0x06, 
-	U 0x33, U 0x03, U 0xAE, U 0x88, 
-	U 0x2A, U 0x84, U 0x8B, U 0x2E, 
-	U 0xB0, U 0x2E, U 0x27, U 0x84, 
-	U 0x8C, U 0x03, U 0xEE, U 0x01, 
-	U 0x0F, U 0xEE, U 0x02, U 0x2E, 
-	U 0xB4, U 0x2E, U 0x58, U 0x01, 
-	U 0x8F, U 0x63, U 0xFE, U 0xFF, 
+	U 0x2B, U 0x21, U 0x04, U 0x88, 
+	U 0x31, U 0xDE, U 0x60, U 0x08, 
+	U 0xF8, U 0x50, U 0x08, U 0xCE, 
+	U 0x38, U 0x6E, U 0xB8, U 0x10, 
+	U 0x2C, U 0x20, U 0x66, U 0xB1, 
+	U 0xCC, U 0x0C, U 0x0C, U 0x47, 
+	U 0x2C, U 0x24, U 0x66, U 0x7C, 
+	U 0xEB, U 0x02, U 0x60, U 0x01, 
+	U 0xAF, U 0x2E, U 0x30, U 0x10, 
+	U 0x29, U 0x30, U 0x11, U 0x2C, 
+	U 0x30, U 0x13, U 0x00, U 0x99, 
+	U 0x32, U 0x00, U 0xCB, U 0x32, 
+	U 0x64, U 0xE1, U 0x45, U 0x2A, 
+	U 0x30, U 0x14, U 0x1E, U 0xDF, 
+	U 0x25, U 0x00, U 0xAA, U 0x32, 
+	U 0x78, U 0xCF, U 0x05, U 0x0E, 
+	U 0x9C, U 0x09, U 0x2B, U 0xC4, 
+	U 0x7F, U 0x1C, U 0xDF, U 0x22, 
+	U 0x66, U 0xA0, U 0x05, U 0x0E, 
+	U 0x98, U 0x09, U 0x2A, U 0x84, 
+	U 0x80, U 0xB4, U 0xA7, U 0x18, 
+	U 0xDF, U 0x20, U 0xC7, U 0x6F, 
+	U 0x00, U 0x91, U 0x04, U 0xAC, 
+	U 0x9C, U 0xDB, U 0xC0, U 0x00, 
+	U 0xAE, U 0x1A, U 0x00, U 0xF3, 
+	U 0x1A, U 0x6E, U 0xC1, U 0x04, 
+	U 0x8B, U 0xD0, U 0x0B, U 0xCB, 
+	U 0x0C, U 0x1C, U 0xDF, U 0x1A, 
+	U 0x08, U 0xB8, U 0x1C, U 0x06, 
+	U 0x33, U 0x03, U 0xAC, U 0x88, 
+	U 0x2A, U 0x84, U 0x8B, U 0x2C, 
+	U 0xD0, U 0x2E, U 0x27, U 0x84, 
+	U 0x8C, U 0x03, U 0xCC, U 0x01, 
+	U 0x0E, U 0xCC, U 0x02, U 0x2C, 
+	U 0xD4, U 0x2E, U 0x58, U 0x01, 
+	U 0xAD, U 0x63, U 0xFF, U 0x0B, 
+	U 0x2F, U 0x20, U 0x0C, U 0x0C, 
+	U 0xFB, U 0x11, U 0xA7, U 0xBB, 
+	U 0x2D, U 0xB2, U 0x86, U 0xC0, 
+	U 0x98, U 0x7D, U 0x93, U 0x02, 
+	U 0x60, U 0x01, U 0x21, U 0x19, 
+	U 0xDE, U 0xC8, U 0x09, U 0xF9, 
+	U 0x0A, U 0x29, U 0x92, U 0xA3, 
+	U 0x68, U 0x90, U 0x08, U 0x2D, 
+	U 0x22, U 0x00, U 0x09, U 0xDD, 
+	U 0x0C, U 0x65, U 0xD1, U 0x0C, 
+	U 0x2D, U 0xB2, U 0x85, U 0xDE, 
+	U 0x60, U 0x64, U 0xD1, U 0x04, 
+	U 0x88, U 0x31, U 0x2B, U 0x21, 
+	U 0x04, U 0x08, U 0xF8, U 0x50, 
+	U 0x08, U 0xCE, U 0x38, U 0x6F, 
+	U 0xB8, U 0x02, U 0x63, U 0xFE, 
+	U 0xDF, U 0x2C, U 0x20, U 0x66, 
+	U 0xB1, U 0xCC, U 0x0C, U 0x0C, 
+	U 0x47, U 0x2C, U 0x24, U 0x66, 
+	U 0x7C, U 0xE3, U 0x02, U 0x63, 
+	U 0xFE, U 0xCE, U 0x9D, U 0x10, 
+	U 0x60, U 0x01, U 0x31, U 0x00, 
 	U 0x29, U 0x31, U 0x08, U 0x29, 
 	U 0x25, U 0x04, U 0x28, U 0x30, 
-	U 0x14, U 0x2E, U 0x31, U 0x09, 
-	U 0xB0, U 0x88, U 0x64, U 0x80, 
-	U 0xA3, U 0x2E, U 0x24, U 0x0A, 
-	U 0xC0, U 0x81, U 0x2E, U 0x30, 
-	U 0x16, U 0x2C, U 0xB4, U 0x23, 
-	U 0x2E, U 0x24, U 0x0B, U 0xB4, 
-	U 0xEF, U 0x2F, U 0x24, U 0x0C, 
-	U 0x8C, U 0x37, U 0x8B, U 0x36, 
+	U 0x14, U 0xB0, U 0x88, U 0x64, 
+	U 0x80, U 0xA6, U 0x2B, U 0x31, 
+	U 0x09, U 0x2B, U 0x24, U 0x0A, 
+	U 0xC0, U 0x81, U 0x2B, U 0x30, 
+	U 0x16, U 0x2F, U 0xD4, U 0x23, 
+	U 0x2B, U 0x24, U 0x0B, U 0xB4, 
+	U 0xBC, U 0x2C, U 0x24, U 0x0C, 
+	U 0x8D, U 0x37, U 0x8B, U 0x36, 
 	U 0x29, U 0x25, U 0x04, U 0xDE, 
-	U 0xB0, U 0xDF, U 0xC0, U 0x0C, 
-	U 0x8F, U 0x39, U 0x0B, U 0x8E, 
-	U 0x39, U 0x0F, U 0xEE, U 0x02, 
-	U 0x64, U 0xEE, U 0xC4, U 0x08, 
-	U 0x9F, U 0x11, U 0x01, U 0xC4, 
-	U 0x04, U 0x8D, U 0x38, U 0x0C, 
-	U 0xB8, U 0x18, U 0x00, U 0xC4, 
-	U 0x04, U 0x0C, U 0xBE, U 0x18, 
-	U 0x00, U 0xEE, U 0x11, U 0x0E, 
-	U 0xDD, U 0x02, U 0xC0, U 0xE3, 
-	U 0x0E, U 0xFF, U 0x02, U 0x1E, 
-	U 0xDE, U 0xE3, U 0x9F, U 0x71, 
-	U 0x9E, U 0x70, U 0x1E, U 0xDE, 
-	U 0xE2, U 0x8F, U 0x20, U 0x98, 
-	U 0x73, U 0x9D, U 0x74, U 0x05, 
-	U 0xFF, U 0x11, U 0x0B, U 0xCD, 
-	U 0x53, U 0xC1, U 0x80, U 0x98, 
-	U 0x75, U 0x0F, U 0xDD, U 0x02, 
-	U 0x0E, U 0xDD, U 0x02, U 0x9D, 
-	U 0x72, U 0x1E, U 0xDE, U 0xA1, 
-	U 0x2A, U 0x24, U 0x66, U 0x2F, 
-	U 0x62, U 0x9D, U 0x2A, U 0xE4, 
-	U 0xA2, U 0x2F, U 0xFC, U 0x18, 
-	U 0x2F, U 0x66, U 0x9D, U 0x63, 
-	U 0xFE, U 0x71, U 0x00, U 0x00, 
-	U 0x00, U 0x2F, U 0x30, U 0x12, 
-	U 0x1B, U 0xDE, U 0xE3, U 0x00, 
-	U 0xFA, U 0x32, U 0x78, U 0xFF, 
-	U 0x05, U 0x0B, U 0x98, U 0x0B, 
-	U 0x2A, U 0x84, U 0x7F, U 0x66, 
-	U 0xD0, U 0x05, U 0x0B, U 0x9A, 
-	U 0x0B, U 0x2D, U 0xA4, U 0x80, 
+	U 0xD0, U 0x0D, U 0x8E, U 0x39, 
+	U 0xDC, U 0xB0, U 0x0B, U 0x8C, 
+	U 0x39, U 0x0E, U 0xCC, U 0x02, 
+	U 0x64, U 0xCE, U 0x78, U 0x08, 
+	U 0x9C, U 0x11, U 0x01, U 0xC4, 
+	U 0x04, U 0x8F, U 0x38, U 0x0D, 
+	U 0xBE, U 0x18, U 0x00, U 0xC4, 
+	U 0x04, U 0x0D, U 0xB8, U 0x18, 
+	U 0x00, U 0x88, U 0x11, U 0x08, 
+	U 0xFF, U 0x02, U 0xC0, U 0x83, 
+	U 0x08, U 0xCC, U 0x02, U 0x18, 
+	U 0xDE, U 0xD8, U 0x9C, U 0xA1, 
+	U 0x98, U 0xA0, U 0x18, U 0xDE, 
+	U 0xD7, U 0x8C, U 0x20, U 0x9E, 
+	U 0xA3, U 0x9F, U 0xA4, U 0x05, 
+	U 0xCC, U 0x11, U 0x0B, U 0xCF, 
+	U 0x53, U 0xC1, U 0xE0, U 0x9E, 
+	U 0xA5, U 0x0C, U 0xFF, U 0x02, 
+	U 0x08, U 0xFF, U 0x02, U 0x9F, 
+	U 0xA2, U 0x18, U 0xDE, U 0x96, 
+	U 0x26, U 0x24, U 0x66, U 0x2C, 
+	U 0x72, U 0x9D, U 0x26, U 0x84, 
+	U 0xA2, U 0x2C, U 0xCC, U 0x18, 
+	U 0x2C, U 0x76, U 0x9D, U 0x63, 
+	U 0xFE, U 0x25, U 0x00, U 0x00, 
+	U 0x00, U 0x2D, U 0x30, U 0x12, 
+	U 0x1C, U 0xDE, U 0xD8, U 0x00, 
+	U 0xDA, U 0x32, U 0x78, U 0xDF, 
+	U 0x05, U 0x0C, U 0x9E, U 0x0B, 
+	U 0x2A, U 0xE4, U 0x7F, U 0x66, 
+	U 0xB0, U 0x05, U 0x0C, U 0x9F, 
+	U 0x0B, U 0x2B, U 0xF4, U 0x80, 
 	U 0x2A, U 0x30, U 0x11, U 0x00, 
-	U 0xAA, U 0x32, U 0x63, U 0xFF, 
-	U 0x44, U 0x2F, U 0x24, U 0x0A, 
-	U 0x9E, U 0x2B, U 0x63, U 0xFF, 
-	U 0x56, U 0xCC, U 0x57, U 0xDA, 
+	U 0xAA, U 0x32, U 0x63, U 0xFE, 
+	U 0xEC, U 0x2E, U 0x24, U 0x0A, 
+	U 0x2B, U 0x31, U 0x09, U 0x9B, 
+	U 0x2B, U 0x63, U 0xFF, U 0x53, 
+	U 0x00, U 0xCC, U 0x57, U 0xDA, 
 	U 0x20, U 0xDB, U 0x30, U 0xDC, 
-	U 0x40, U 0x58, U 0x07, U 0x14, 
+	U 0x40, U 0x58, U 0x07, U 0x1B, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0x00, U 0xDA, U 0x20, U 0xC0, 
-	U 0xB6, U 0x58, U 0x07, U 0xA3, 
+	U 0xB6, U 0x58, U 0x07, U 0xAA, 
 	U 0x63, U 0xFF, U 0xE5, U 0x00, 
-	U 0xDA, U 0x70, U 0x58, U 0x06, 
-	U 0x3A, U 0xC0, U 0xA0, U 0x2A, 
-	U 0x24, U 0x66, U 0x63, U 0xFE, 
-	U 0x02, U 0xDA, U 0x20, U 0x58, 
-	U 0x07, U 0x9E, U 0x63, U 0xFF, 
-	U 0xCF, U 0xB1, U 0x69, U 0x28, 
-	U 0x20, U 0x0A, U 0x86, U 0x20, 
-	U 0x09, U 0x09, U 0x47, U 0x99, 
-	U 0x11, U 0x29, U 0x24, U 0x07, 
-	U 0x98, U 0x10, U 0x7F, U 0x81, 
-	U 0x26, U 0x93, U 0xE0, U 0x27, 
-	U 0xE5, U 0x0A, U 0x9A, U 0xE3, 
-	U 0x88, U 0x10, U 0x9D, U 0xE1, 
-	U 0x19, U 0xDE, U 0xBF, U 0x8D, 
-	U 0x11, U 0x09, U 0x6F, U 0x02, 
-	U 0x9F, U 0xE4, U 0x2D, U 0xE4, 
-	U 0x16, U 0x09, U 0x88, U 0x02, 
-	U 0xC0, U 0xD3, U 0x98, U 0xE2, 
-	U 0x2A, U 0x24, U 0x07, U 0x63, 
-	U 0xFE, U 0x51, U 0x00, U 0x00, 
-	U 0x1D, U 0xDE, U 0x88, U 0x08, 
-	U 0x68, U 0x11, U 0x8F, U 0x11, 
-	U 0x89, U 0x2B, U 0x93, U 0xE0, 
-	U 0x08, U 0xFF, U 0x02, U 0xC0, 
-	U 0x8F, U 0x9F, U 0xE5, U 0x0D, 
-	U 0x99, U 0x02, U 0x99, U 0xE2, 
-	U 0x04, U 0x7F, U 0x11, U 0xC0, 
-	U 0xD4, U 0x9D, U 0xE1, U 0x08, 
-	U 0xFF, U 0x02, U 0x9F, U 0xE4, 
-	U 0x63, U 0xFF, U 0xD0, U 0x00, 
+	U 0x00, U 0xDB, U 0xF0, U 0xDA, 
+	U 0x20, U 0x58, U 0x07, U 0xA7, 
+	U 0x63, U 0xFF, U 0xD9, U 0x00, 
+	U 0x00, U 0x58, U 0x06, U 0x3E, 
+	U 0x1D, U 0xDE, U 0x7D, U 0xC0, 
+	U 0xF1, U 0x26, U 0x24, U 0x66, 
+	U 0x63, U 0xFE, U 0x41, U 0x00, 
+	U 0x8B, U 0x20, U 0x28, U 0x0A, 
+	U 0xFF, U 0xB1, U 0xCE, U 0x23, 
+	U 0x20, U 0x0A, U 0x2C, U 0x21, 
+	U 0x04, U 0x0E, U 0x0E, U 0x47, 
+	U 0x2E, U 0x24, U 0x07, U 0x78, 
+	U 0x31, U 0x35, U 0x9A, U 0xD0, 
+	U 0x2C, U 0xD5, U 0x0A, U 0x96, 
+	U 0xD3, U 0x19, U 0xDE, U 0xB1, 
+	U 0x2E, U 0xD4, U 0x16, U 0xC0, 
+	U 0x83, U 0x98, U 0xD1, U 0xC0, 
+	U 0xE3, U 0x09, U 0xB8, U 0x02, 
+	U 0x98, U 0xD4, U 0x09, U 0x39, 
+	U 0x02, U 0x99, U 0xD2, U 0x26, 
+	U 0x24, U 0x07, U 0x63, U 0xFD, 
+	U 0xC9, U 0x58, U 0x06, U 0x2C, 
+	U 0x8D, U 0x10, U 0x26, U 0x24, 
+	U 0x66, U 0x2B, U 0x21, U 0x04, 
+	U 0x2F, U 0x20, U 0x0C, U 0x63, 
+	U 0xFD, U 0x86, U 0x00, U 0x00, 
+	U 0x08, U 0xB8, U 0x11, U 0x19, 
+	U 0xDE, U 0x75, U 0x08, U 0xEE, 
+	U 0x02, U 0x88, U 0x2B, U 0x9E, 
+	U 0xD5, U 0x9A, U 0xD0, U 0xC0, 
+	U 0xEF, U 0x09, U 0x88, U 0x02, 
+	U 0x98, U 0xD2, U 0x04, U 0xC9, 
+	U 0x11, U 0x0E, U 0x99, U 0x02, 
+	U 0x99, U 0xD4, U 0xC0, U 0xE4, 
+	U 0x9E, U 0xD1, U 0x63, U 0xFF, 
+	U 0xC1, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
 	U 0x20, U 0xD1, U 0x0F, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x85, 
 	U 0x21, U 0x0D, U 0x38, U 0x11, 
-	U 0x14, U 0xDE, U 0x66, U 0x86, 
+	U 0x14, U 0xDE, U 0x54, U 0x86, 
 	U 0x22, U 0xA4, U 0x24, U 0x08, 
 	U 0x66, U 0x0C, U 0x96, U 0x22, 
 	U 0x05, U 0x33, U 0x0B, U 0x93, 
@@ -5172,12 +5190,12 @@ static unsigned char t3fw[30772] = {
 	U 0x21, U 0x63, U 0xFF, U 0xE3, 
 	U 0x6C, U 0x10, U 0x0A, U 0xD6, 
 	U 0x20, U 0x94, U 0x18, U 0x17, 
-	U 0xDE, U 0x5B, U 0xD9, U 0x30, 
+	U 0xDE, U 0x49, U 0xD9, U 0x30, 
 	U 0xB8, U 0x38, U 0x98, U 0x19, 
 	U 0x99, U 0x14, U 0x65, U 0x52, 
-	U 0x52, U 0xC0, U 0xE1, U 0xD2, 
+	U 0x56, U 0xC0, U 0xE1, U 0xD2, 
 	U 0xE0, U 0x2E, U 0x61, U 0x02, 
-	U 0x1D, U 0xDE, U 0x58, U 0x0E, 
+	U 0x1D, U 0xDE, U 0x46, U 0x0E, 
 	U 0x0E, U 0x4C, U 0x65, U 0xE1, 
 	U 0x62, U 0x8F, U 0x30, U 0x8E, 
 	U 0x19, U 0x0F, U 0x6F, U 0x51, 
@@ -5186,19 +5204,19 @@ static unsigned char t3fw[30772] = {
 	U 0x29, U 0xD0, U 0x23, U 0x0E, 
 	U 0x8F, U 0x50, U 0x77, U 0xE6, 
 	U 0x6B, U 0x8F, U 0x18, U 0x1E, 
-	U 0xDE, U 0x95, U 0xB0, U 0xFF, 
+	U 0xDE, U 0x83, U 0xB0, U 0xFF, 
 	U 0x0F, U 0xF4, U 0x11, U 0x0F, 
 	U 0x1F, U 0x14, U 0x65, U 0x90, 
-	U 0xCE, U 0x18, U 0xDE, U 0x92, 
+	U 0xCE, U 0x18, U 0xDE, U 0x80, 
 	U 0x8C, U 0x60, U 0xA8, U 0xCC, 
 	U 0xC0, U 0xB1, U 0x19, U 0xDE, 
-	U 0x46, U 0x28, U 0x60, U 0x0B, 
+	U 0x34, U 0x28, U 0x60, U 0x0B, 
 	U 0x09, U 0xCC, U 0x0B, U 0x0D, 
 	U 0x88, U 0x09, U 0x29, U 0x81, 
 	U 0x1C, U 0x28, U 0x81, U 0x1A, 
 	U 0x2A, U 0x0A, U 0x00, U 0x09, 
 	U 0x88, U 0x0C, U 0x08, U 0xBA, 
-	U 0x38, U 0x1B, U 0xDE, U 0x88, 
+	U 0x38, U 0x1B, U 0xDE, U 0x76, 
 	U 0x0C, U 0xA9, U 0x0A, U 0x29, 
 	U 0x92, U 0x94, U 0x7B, U 0x9B, 
 	U 0x02, U 0x60, U 0x00, U 0x8C, 
@@ -5207,28 +5225,28 @@ static unsigned char t3fw[30772] = {
 	U 0xA7, U 0xDD, U 0x29, U 0xD2, 
 	U 0x86, U 0xB8, U 0x48, U 0x79, 
 	U 0x83, U 0x02, U 0x60, U 0x00, 
-	U 0xD2, U 0x19, U 0xDE, U 0x38, 
+	U 0xD2, U 0x19, U 0xDE, U 0x26, 
 	U 0x09, U 0xB8, U 0x0A, U 0x28, 
 	U 0x82, U 0xA3, U 0x98, U 0x17, 
 	U 0x68, U 0x80, U 0x02, U 0x60, 
 	U 0x00, U 0xA3, U 0x60, U 0x00, 
-	U 0xA5, U 0x1A, U 0xDE, U 0x7C, 
+	U 0xA5, U 0x1A, U 0xDE, U 0x6A, 
 	U 0x84, U 0x18, U 0x0A, U 0xEE, 
 	U 0x01, U 0xCA, U 0x98, U 0x1B, 
-	U 0xDE, U 0x2F, U 0x8C, U 0x19, 
+	U 0xDE, U 0x1D, U 0x8C, U 0x19, 
 	U 0x2B, U 0xB0, U 0x00, U 0x8C, 
 	U 0xC0, U 0x6E, U 0xB3, U 0x13, 
-	U 0x1D, U 0xDE, U 0x2C, U 0x0C, 
+	U 0x1D, U 0xDE, U 0x1A, U 0x0C, 
 	U 0x1C, U 0x52, U 0x0D, U 0xCC, 
 	U 0x0B, U 0x2D, U 0xC2, U 0x95, 
 	U 0xC0, U 0xA1, U 0x7E, U 0xDB, 
 	U 0xAE, U 0x60, U 0x00, U 0x38, 
 	U 0x0C, U 0x0C, U 0x53, U 0x60, 
 	U 0x00, U 0x09, U 0x00, U 0x00, 
-	U 0x00, U 0x18, U 0xDE, U 0x6E, 
+	U 0x00, U 0x18, U 0xDE, U 0x5C, 
 	U 0x8C, U 0x60, U 0xA8, U 0xCC, 
 	U 0xC0, U 0xB1, U 0x19, U 0xDE, 
-	U 0x22, U 0x28, U 0x60, U 0x0B, 
+	U 0x10, U 0x28, U 0x60, U 0x0B, 
 	U 0x09, U 0xCC, U 0x0B, U 0x0D, 
 	U 0x88, U 0x09, U 0x29, U 0x81, 
 	U 0x1C, U 0x28, U 0x81, U 0x1A, 
@@ -5238,16 +5256,16 @@ static unsigned char t3fw[30772] = {
 	U 0x29, U 0x92, U 0x94, U 0x7E, 
 	U 0x93, U 0x02, U 0x63, U 0xFF, 
 	U 0x72, U 0xDA, U 0x60, U 0xC0, 
-	U 0xBA, U 0x58, U 0x07, U 0x2F, 
+	U 0xBA, U 0x58, U 0x07, U 0x30, 
 	U 0x64, U 0x50, U 0x73, U 0x60, 
-	U 0x02, U 0x66, U 0x00, U 0x00, 
-	U 0x1A, U 0xDE, U 0x15, U 0x8C, 
+	U 0x02, U 0x6A, U 0x00, U 0x00, 
+	U 0x1A, U 0xDE, U 0x03, U 0x8C, 
 	U 0x19, U 0x2A, U 0xA0, U 0x00, 
 	U 0x8C, U 0xC0, U 0x6E, U 0xA3, 
-	U 0x1A, U 0x18, U 0xDE, U 0x11, 
+	U 0x1A, U 0x18, U 0xDD, U 0xFF, 
 	U 0x0C, U 0x1C, U 0x52, U 0x08, 
 	U 0xCC, U 0x0B, U 0x18, U 0xDE, 
-	U 0x58, U 0x2B, U 0xC2, U 0x95, 
+	U 0x46, U 0x2B, U 0xC2, U 0x95, 
 	U 0xC0, U 0xA1, U 0x78, U 0xB3, 
 	U 0x02, U 0x63, U 0xFF, U 0x3F, 
 	U 0x63, U 0xFF, U 0xC9, U 0x00, 
@@ -5256,25 +5274,25 @@ static unsigned char t3fw[30772] = {
 	U 0x78, U 0x99, U 0x18, U 0x29, 
 	U 0xD2, U 0x85, U 0xC9, U 0x92, 
 	U 0x2B, U 0x72, U 0x9E, U 0x1D, 
-	U 0xDE, U 0x06, U 0x6E, U 0xB8, 
+	U 0xDD, U 0xF4, U 0x6E, U 0xB8, 
 	U 0x23, U 0x2D, U 0xD2, U 0x26, 
 	U 0x99, U 0x13, U 0x69, U 0xD0, 
 	U 0x0B, U 0x60, U 0x00, U 0x0D, 
 	U 0xDA, U 0x60, U 0x58, U 0x07, 
-	U 0x19, U 0x60, U 0x00, U 0x17, 
+	U 0x1A, U 0x60, U 0x00, U 0x17, 
 	U 0x00, U 0x88, U 0x60, U 0x7D, 
 	U 0x89, U 0x0A, U 0x9A, U 0x1A, 
 	U 0x29, U 0x72, U 0x9D, U 0x9C, 
 	U 0x12, U 0x99, U 0x15, U 0xCF, 
 	U 0x95, U 0xDA, U 0x60, U 0xC0, 
-	U 0xB6, U 0x58, U 0x07, U 0x12, 
-	U 0x65, U 0x51, U 0xF5, U 0x8D, 
+	U 0xB6, U 0x58, U 0x07, U 0x13, 
+	U 0x65, U 0x51, U 0xF9, U 0x8D, 
 	U 0x14, U 0x8C, U 0x18, U 0xDB, 
 	U 0xD0, U 0x8D, U 0xD0, U 0x06, 
 	U 0x6A, U 0x02, U 0x0D, U 0x6D, 
-	U 0x51, U 0x58, U 0x05, U 0x84, 
+	U 0x51, U 0x58, U 0x05, U 0x85, 
 	U 0xD3, U 0xA0, U 0x9A, U 0x14, 
-	U 0x64, U 0xA1, U 0xDD, U 0x82, 
+	U 0x64, U 0xA1, U 0xE1, U 0x82, 
 	U 0xA0, U 0x85, U 0xA1, U 0xB8, 
 	U 0xAF, U 0x9F, U 0x19, U 0x05, 
 	U 0x05, U 0x47, U 0x02, U 0x02, 
@@ -5290,12 +5308,13 @@ static unsigned char t3fw[30772] = {
 	U 0x66, U 0x7C, U 0xAB, U 0x11, 
 	U 0x9F, U 0x11, U 0x9E, U 0x1B, 
 	U 0x8A, U 0x15, U 0x58, U 0x05, 
-	U 0x95, U 0x8E, U 0x1B, U 0x8F, 
+	U 0x96, U 0x8E, U 0x1B, U 0x8F, 
 	U 0x11, U 0xC0, U 0xA0, U 0x2A, 
 	U 0x64, U 0x66, U 0x9F, U 0x11, 
-	U 0x64, U 0xF0, U 0xE1, U 0x29, 
-	U 0x12, U 0x03, U 0x28, U 0x12, 
-	U 0x09, U 0x6D, U 0xF9, U 0x17, 
+	U 0x64, U 0xF0, U 0xE5, U 0x89, 
+	U 0x13, U 0x88, U 0x19, U 0x0F, 
+	U 0xFD, U 0x02, U 0x2E, U 0x0A, 
+	U 0x00, U 0x6D, U 0xD9, U 0x17, 
 	U 0x2F, U 0x81, U 0x03, U 0x00, 
 	U 0x90, U 0x8D, U 0xAE, U 0xFE, 
 	U 0x00, U 0x80, U 0x88, U 0x9F, 
@@ -5304,35 +5323,35 @@ static unsigned char t3fw[30772] = {
 	U 0x99, U 0x00, U 0x90, U 0x8C, 
 	U 0x65, U 0x51, U 0x4E, U 0x8A, 
 	U 0x10, U 0x85, U 0x1A, U 0x8B, 
-	U 0x30, U 0x1F, U 0xDD, U 0xE8, 
+	U 0x30, U 0x1F, U 0xDD, U 0xD5, 
 	U 0x88, U 0x12, U 0x29, U 0x60, 
 	U 0x07, U 0x08, U 0x58, U 0x0A, 
 	U 0x2C, U 0x82, U 0x94, U 0x2D, 
 	U 0x61, U 0x04, U 0x0E, U 0xCC, 
 	U 0x0C, U 0x2C, U 0x86, U 0x94, 
 	U 0x6F, U 0xDB, U 0x3C, U 0x1C, 
-	U 0xDE, U 0x12, U 0xAC, U 0x9C, 
+	U 0xDD, U 0xFF, U 0xAC, U 0x9C, 
 	U 0x29, U 0xC0, U 0x80, U 0x0B, 
 	U 0x5D, U 0x50, U 0xA2, U 0x99, 
 	U 0x09, U 0x09, U 0x47, U 0x29, 
 	U 0xC4, U 0x80, U 0x65, U 0xD0, 
 	U 0xDA, U 0x2E, U 0x60, U 0x0C, 
 	U 0xC0, U 0xD0, U 0x1F, U 0xDD, 
-	U 0xD1, U 0x0C, U 0xE8, U 0x11, 
+	U 0xBE, U 0x0C, U 0xE8, U 0x11, 
 	U 0xAF, U 0xEE, U 0xA7, U 0x88, 
 	U 0x22, U 0x82, U 0x85, U 0x2D, 
 	U 0xE4, U 0xCF, U 0x02, U 0x42, 
 	U 0x0B, U 0x22, U 0x86, U 0x85, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0x8E, U 0x30, U 0x0E, U 0x0E, 
-	U 0x47, U 0x63, U 0xFD, U 0xA6, 
+	U 0x47, U 0x63, U 0xFD, U 0xA2, 
 	U 0xA2, U 0x9C, U 0x0C, U 0x0C, 
 	U 0x47, U 0x2C, U 0x64, U 0x07, 
 	U 0x7A, U 0xB6, U 0xCD, U 0x8B, 
 	U 0x60, U 0x2E, U 0x60, U 0x0A, 
 	U 0x28, U 0x0A, U 0xFF, U 0x08, 
 	U 0xE8, U 0x0C, U 0x64, U 0x81, 
-	U 0x0E, U 0x18, U 0xDD, U 0xFB, 
+	U 0x0E, U 0x18, U 0xDD, U 0xE8, 
 	U 0x83, U 0x16, U 0x82, U 0x13, 
 	U 0xB3, U 0x39, U 0x02, U 0x33, 
 	U 0x0B, U 0x2C, U 0x34, U 0x16, 
@@ -5344,7 +5363,7 @@ static unsigned char t3fw[30772] = {
 	U 0x34, U 0x98, U 0x32, U 0xC0, 
 	U 0x80, U 0x28, U 0x64, U 0x07, 
 	U 0x2B, U 0x60, U 0x0C, U 0xD2, 
-	U 0xA0, U 0x1C, U 0xDD, U 0xB6, 
+	U 0xA0, U 0x1C, U 0xDD, U 0xA3, 
 	U 0x0C, U 0xBE, U 0x11, U 0xA7, 
 	U 0xEE, U 0x2D, U 0xE2, U 0x85, 
 	U 0xAC, U 0xBB, U 0x28, U 0xB4, 
@@ -5364,15 +5383,15 @@ static unsigned char t3fw[30772] = {
 	U 0xF1, U 0xC0, U 0x80, U 0x0C, 
 	U 0xF8, U 0x38, U 0x08, U 0x08, 
 	U 0x42, U 0x64, U 0x80, U 0x6B, 
-	U 0x1B, U 0xDD, U 0x97, U 0x19, 
-	U 0xDD, U 0x98, U 0x29, U 0xB6, 
+	U 0x1B, U 0xDD, U 0x84, U 0x19, 
+	U 0xDD, U 0x85, U 0x29, U 0xB6, 
 	U 0x7E, U 0x8D, U 0x18, U 0xB0, 
 	U 0xDD, U 0x6D, U 0xDA, U 0x05, 
 	U 0x00, U 0xA0, U 0x88, U 0x00, 
 	U 0xC0, U 0x8C, U 0xC0, U 0xA0, 
 	U 0x63, U 0xFE, U 0xF3, U 0x00, 
 	U 0x82, U 0x13, U 0x8B, U 0x16, 
-	U 0x1D, U 0xDD, U 0xA8, U 0x28, 
+	U 0x1D, U 0xDD, U 0x95, U 0x28, 
 	U 0x60, U 0x0A, U 0xC0, U 0xE0, 
 	U 0x2E, U 0xC4, U 0x80, U 0x0D, 
 	U 0x88, U 0x02, U 0x02, U 0xB2, 
@@ -5383,13 +5402,13 @@ static unsigned char t3fw[30772] = {
 	U 0x0C, U 0x2D, U 0x11, U 0xA7, 
 	U 0xDD, U 0x28, U 0xD2, U 0x85, 
 	U 0x08, U 0xBB, U 0x0B, U 0x18, 
-	U 0xDD, U 0x90, U 0x2B, U 0xD6, 
+	U 0xDD, U 0x7D, U 0x2B, U 0xD6, 
 	U 0x85, U 0xA8, U 0x22, U 0x2E, 
 	U 0x24, U 0xCF, U 0xD2, U 0xA0, 
 	U 0xD1, U 0x0F, U 0x9E, U 0x1B, 
 	U 0x85, U 0x1A, U 0x2A, U 0x6C, 
 	U 0x74, U 0x8B, U 0x18, U 0x5B, 
-	U 0xFF, U 0x17, U 0x8E, U 0x1B, 
+	U 0xFF, U 0x16, U 0x8E, U 0x1B, 
 	U 0x63, U 0xFE, U 0xA3, U 0x00, 
 	U 0xC0, U 0x87, U 0xC0, U 0x90, 
 	U 0x0A, U 0xF9, U 0x38, U 0x79, 
@@ -5405,7 +5424,7 @@ static unsigned char t3fw[30772] = {
 	U 0x11, U 0x0E, U 0xCE, U 0x02, 
 	U 0x02, U 0x92, U 0x0B, U 0x9E, 
 	U 0x25, U 0xB4, U 0x99, U 0x1E, 
-	U 0xDD, U 0x83, U 0x9F, U 0x20, 
+	U 0xDD, U 0x70, U 0x9F, U 0x20, 
 	U 0x0E, U 0x88, U 0x02, U 0x98, 
 	U 0x22, U 0xC0, U 0xEF, U 0x04, 
 	U 0xD8, U 0x11, U 0x0E, U 0x88, 
@@ -5413,7 +5432,7 @@ static unsigned char t3fw[30772] = {
 	U 0xE4, U 0x9E, U 0x21, U 0xC0, 
 	U 0x80, U 0xD2, U 0xA0, U 0x2B, 
 	U 0x60, U 0x0C, U 0x28, U 0x64, 
-	U 0x07, U 0x1C, U 0xDD, U 0x71, 
+	U 0x07, U 0x1C, U 0xDD, U 0x5E, 
 	U 0x0C, U 0xBE, U 0x11, U 0xA7, 
 	U 0xEE, U 0x2D, U 0xE2, U 0x85, 
 	U 0xAC, U 0xBB, U 0x28, U 0xB4, 
@@ -5432,16 +5451,16 @@ static unsigned char t3fw[30772] = {
 	U 0x6C, U 0x10, U 0x04, U 0x02, 
 	U 0x2A, U 0x02, U 0x03, U 0x3B, 
 	U 0x02, U 0x5B, U 0xFF, U 0xF6, 
-	U 0x1C, U 0xDD, U 0x59, U 0x1B, 
-	U 0xDD, U 0xA1, U 0xC7, U 0x9F, 
+	U 0x1C, U 0xDD, U 0x46, U 0x1B, 
+	U 0xDD, U 0x8E, U 0xC7, U 0x9F, 
 	U 0x88, U 0xB0, U 0x09, U 0xA9, 
 	U 0x03, U 0x09, U 0x8A, U 0x01, 
 	U 0x9A, U 0xB0, U 0x79, U 0x80, 
 	U 0x1E, U 0xC0, U 0xF0, U 0x0F, 
 	U 0xE4, U 0x31, U 0x1D, U 0xDD, 
-	U 0x50, U 0x00, U 0x02, U 0x00, 
+	U 0x3D, U 0x00, U 0x02, U 0x00, 
 	U 0x2B, U 0xD2, U 0x82, U 0x1E, 
-	U 0xDD, U 0x9A, U 0x2A, U 0xC1, 
+	U 0xDD, U 0x87, U 0x2A, U 0xC1, 
 	U 0x02, U 0x0E, U 0xBB, U 0x02, 
 	U 0x2B, U 0xD6, U 0x82, U 0x0A, 
 	U 0xE4, U 0x31, U 0xD1, U 0x0F, 
@@ -5452,17 +5471,17 @@ static unsigned char t3fw[30772] = {
 	U 0x31, U 0xD1, U 0x0F, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
 	U 0xC0, U 0x0C, U 0xE4, U 0x31, 
-	U 0x12, U 0xDD, U 0x45, U 0x1A, 
-	U 0xDD, U 0x42, U 0x00, U 0x02, 
+	U 0x12, U 0xDD, U 0x32, U 0x1A, 
+	U 0xDD, U 0x2F, U 0x00, U 0x02, 
 	U 0x00, U 0x29, U 0xA2, U 0x82, 
-	U 0x18, U 0xDD, U 0x8E, U 0x1B, 
-	U 0xDD, U 0x8C, U 0x26, U 0x21, 
+	U 0x18, U 0xDD, U 0x7B, U 0x1B, 
+	U 0xDD, U 0x79, U 0x26, U 0x21, 
 	U 0x02, U 0x0B, U 0x99, U 0x01, 
 	U 0x08, U 0x66, U 0x01, U 0x29, 
 	U 0xA6, U 0x82, U 0x26, U 0x25, 
 	U 0x02, U 0x06, U 0xE4, U 0x31, 
-	U 0x14, U 0xDD, U 0x89, U 0x15, 
-	U 0xDD, U 0x84, U 0x23, U 0x6A, 
+	U 0x14, U 0xDD, U 0x76, U 0x15, 
+	U 0xDD, U 0x71, U 0x23, U 0x6A, 
 	U 0x90, U 0x23, U 0x26, U 0x12, 
 	U 0x85, U 0x50, U 0x24, U 0x26, 
 	U 0x11, U 0x25, U 0x26, U 0x13, 
@@ -5471,12 +5490,12 @@ static unsigned char t3fw[30772] = {
 	U 0x6C, U 0x10, U 0x08, U 0xD6, 
 	U 0x10, U 0x2B, U 0x0A, U 0x64, 
 	U 0x29, U 0x1A, U 0xB4, U 0x1A, 
-	U 0xDD, U 0x2F, U 0x0D, U 0x23, 
-	U 0x11, U 0x1C, U 0xDD, U 0x30, 
+	U 0xDD, U 0x1C, U 0x0D, U 0x23, 
+	U 0x11, U 0x1C, U 0xDD, U 0x1D, 
 	U 0x0F, U 0x25, U 0x11, U 0xB8, 
 	U 0x18, U 0x98, U 0x13, U 0x0E, 
 	U 0x55, U 0x11, U 0x18, U 0xDD, 
-	U 0x7B, U 0xAC, U 0x55, U 0xA8, 
+	U 0x68, U 0xAC, U 0x55, U 0xA8, 
 	U 0x38, U 0xAA, U 0x33, U 0x2C, 
 	U 0x80, U 0xFF, U 0x2A, U 0x80, 
 	U 0xFE, U 0xA9, U 0x33, U 0x28, 
@@ -5488,7 +5507,7 @@ static unsigned char t3fw[30772] = {
 	U 0x08, U 0xAA, U 0x1C, U 0x28, 
 	U 0x8C, U 0x08, U 0x28, U 0x16, 
 	U 0x04, U 0x58, U 0x08, U 0x61, 
-	U 0x14, U 0xDD, U 0x21, U 0x0A, 
+	U 0x14, U 0xDD, U 0x0E, U 0x0A, 
 	U 0xA7, U 0x02, U 0x24, U 0x41, 
 	U 0x16, U 0x2A, U 0x30, U 0x80, 
 	U 0x2B, U 0x12, U 0x04, U 0x07, 
@@ -5498,9 +5517,9 @@ static unsigned char t3fw[30772] = {
 	U 0x60, U 0x04, U 0xAC, U 0x28, 
 	U 0xB4, U 0x66, U 0x2C, U 0x56, 
 	U 0x27, U 0x7B, U 0x69, U 0xE0, 
-	U 0x16, U 0xDD, U 0x58, U 0x94, 
+	U 0x16, U 0xDD, U 0x45, U 0x94, 
 	U 0x12, U 0xC0, U 0x50, U 0xC0, 
-	U 0xD0, U 0x17, U 0xDD, U 0x14, 
+	U 0xD0, U 0x17, U 0xDD, U 0x01, 
 	U 0x9D, U 0x15, U 0xD3, U 0x70, 
 	U 0xD4, U 0x10, U 0x2F, U 0x60, 
 	U 0x80, U 0x2E, U 0x60, U 0x82, 
@@ -5532,16 +5551,16 @@ static unsigned char t3fw[30772] = {
 	U 0x21, U 0xD1, U 0x0F, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x27, 
 	U 0x0A, U 0x00, U 0x1C, U 0xDC, 
-	U 0xF3, U 0x1F, U 0xDD, U 0x04, 
-	U 0x1E, U 0xDD, U 0x07, U 0x1D, 
-	U 0xDC, U 0xF0, U 0x1A, U 0xDD, 
-	U 0x32, U 0x1B, U 0xDD, U 0x40, 
+	U 0xE0, U 0x1F, U 0xDC, U 0xF1, 
+	U 0x1E, U 0xDC, U 0xF4, U 0x1D, 
+	U 0xDC, U 0xDD, U 0x1A, U 0xDD, 
+	U 0x1F, U 0x1B, U 0xDD, U 0x2D, 
 	U 0xC0, U 0x28, U 0x24, U 0xB0, 
 	U 0x00, U 0x6D, U 0x2A, U 0x75, 
 	U 0xAA, U 0x48, U 0x28, U 0x80, 
 	U 0x80, U 0xC0, U 0x91, U 0x64, 
 	U 0x80, U 0x61, U 0x00, U 0x41, 
-	U 0x04, U 0x15, U 0xDC, U 0xEB, 
+	U 0x04, U 0x15, U 0xDC, U 0xD8, 
 	U 0xC0, U 0x31, U 0x25, U 0x50, 
 	U 0x2E, U 0x00, U 0x36, U 0x1A, 
 	U 0x06, U 0x55, U 0x01, U 0x05, 
@@ -5551,10 +5570,10 @@ static unsigned char t3fw[30772] = {
 	U 0x97, U 0x4D, U 0x0D, U 0x59, 
 	U 0x0A, U 0x29, U 0x92, U 0x24, 
 	U 0x68, U 0x90, U 0x08, U 0x12, 
-	U 0xDD, U 0x24, U 0x02, U 0x42, 
+	U 0xDD, U 0x11, U 0x02, U 0x42, 
 	U 0x08, U 0x72, U 0x99, U 0x3B, 
 	U 0x23, U 0x62, U 0x95, U 0x12, 
-	U 0xDC, U 0xE8, U 0xCB, U 0x34, 
+	U 0xDC, U 0xD5, U 0xCB, U 0x34, 
 	U 0x9F, U 0x30, U 0x02, U 0x82, 
 	U 0x02, U 0x0E, U 0x44, U 0x02, 
 	U 0xC0, U 0x92, U 0x99, U 0x31, 
@@ -5570,41 +5589,41 @@ static unsigned char t3fw[30772] = {
 	U 0xB4, U 0x00, U 0xD1, U 0x0F, 
 	U 0xD1, U 0x0F, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x04, U 0x1A, 
-	U 0xDC, U 0xCC, U 0x2A, U 0xA0, 
+	U 0xDC, U 0xB9, U 0x2A, U 0xA0, 
 	U 0x00, U 0x58, U 0x02, U 0x1C, 
 	U 0x5B, U 0xFF, U 0xD5, U 0x02, 
 	U 0x2A, U 0x02, U 0x03, U 0x3B, 
 	U 0x02, U 0x5B, U 0xFF, U 0xD1, 
-	U 0x1B, U 0xDC, U 0xCA, U 0xC9, 
+	U 0x1B, U 0xDC, U 0xB7, U 0xC9, 
 	U 0xA1, U 0x2C, U 0xB1, U 0x02, 
 	U 0xC0, U 0xD4, U 0x0D, U 0xCC, 
 	U 0x02, U 0x0C, U 0x0C, U 0x4F, 
 	U 0x2C, U 0xB5, U 0x02, U 0x0C, 
 	U 0xE4, U 0x31, U 0xD1, U 0x0F, 
 	U 0xC0, U 0xA0, U 0x0A, U 0xE4, 
-	U 0x31, U 0x18, U 0xDC, U 0xC0, 
+	U 0x31, U 0x18, U 0xDC, U 0xAD, 
 	U 0x00, U 0x02, U 0x00, U 0x2F, 
 	U 0x82, U 0x82, U 0x19, U 0xDC, 
-	U 0xD3, U 0x2E, U 0xB1, U 0x02, 
+	U 0xC0, U 0x2E, U 0xB1, U 0x02, 
 	U 0x09, U 0xFF, U 0x02, U 0x2F, 
 	U 0x86, U 0x82, U 0x0E, U 0xE4, 
 	U 0x31, U 0xD1, U 0x0F, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
 	U 0x20, U 0x02, U 0xE4, U 0x31, 
-	U 0x14, U 0xDC, U 0xBA, U 0x16, 
-	U 0xDC, U 0xB7, U 0x00, U 0x02, 
+	U 0x14, U 0xDC, U 0xA7, U 0x16, 
+	U 0xDC, U 0xA4, U 0x00, U 0x02, 
 	U 0x00, U 0x22, U 0x62, U 0x82, 
 	U 0x23, U 0x41, U 0x02, U 0x73, 
 	U 0x2F, U 0x06, U 0x03, U 0xE4, 
 	U 0x31, U 0xC0, U 0x20, U 0xD1, 
-	U 0x0F, U 0x19, U 0xDD, U 0x04, 
-	U 0x1A, U 0xDD, U 0x03, U 0x28, 
+	U 0x0F, U 0x19, U 0xDC, U 0xF1, 
+	U 0x1A, U 0xDC, U 0xF0, U 0x28, 
 	U 0x41, U 0x02, U 0x0A, U 0x2A, 
 	U 0x01, U 0x09, U 0x88, U 0x01, 
 	U 0x2A, U 0x66, U 0x82, U 0x28, 
 	U 0x45, U 0x02, U 0x08, U 0xE4, 
-	U 0x31, U 0x15, U 0xDC, U 0xFA, 
-	U 0x12, U 0xDC, U 0xFF, U 0x25, 
+	U 0x31, U 0x15, U 0xDC, U 0xE7, 
+	U 0x12, U 0xDC, U 0xEC, U 0x25, 
 	U 0x46, U 0x1D, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x04, U 0x29, 
 	U 0x20, U 0x06, U 0x28, U 0x9C, 
@@ -5619,20 +5638,20 @@ static unsigned char t3fw[30772] = {
 	U 0x22, U 0x09, U 0x0E, U 0xAE, 
 	U 0x0C, U 0x66, U 0xE0, U 0x78, 
 	U 0x2B, U 0x20, U 0x0C, U 0x1E, 
-	U 0xDC, U 0x9C, U 0x0C, U 0xBC, 
+	U 0xDC, U 0x89, U 0x0C, U 0xBC, 
 	U 0x11, U 0xAE, U 0xCC, U 0x28, 
 	U 0xC2, U 0x86, U 0x19, U 0xDC, 
-	U 0x9A, U 0x78, U 0xF3, U 0x02, 
+	U 0x87, U 0x78, U 0xF3, U 0x02, 
 	U 0x60, U 0x00, U 0xAD, U 0x09, 
 	U 0xB9, U 0x0A, U 0x29, U 0x92, 
 	U 0xA3, U 0x68, U 0x90, U 0x08, 
 	U 0x2E, U 0x22, U 0x00, U 0x09, 
 	U 0xEE, U 0x0C, U 0x65, U 0xE0, 
 	U 0x9B, U 0x29, U 0xC2, U 0x85, 
-	U 0x1F, U 0xDC, U 0xA4, U 0x64, 
+	U 0x1F, U 0xDC, U 0x91, U 0x64, 
 	U 0x90, U 0x92, U 0x9F, U 0x90, 
 	U 0xC0, U 0xE4, U 0x1F, U 0xDC, 
-	U 0xB0, U 0x9E, U 0x91, U 0x28, 
+	U 0x9D, U 0x9E, U 0x91, U 0x28, 
 	U 0x20, U 0x0A, U 0xC0, U 0xE0, 
 	U 0x9E, U 0x93, U 0x0F, U 0x88, 
 	U 0x02, U 0x98, U 0x92, U 0x88, 
@@ -5644,7 +5663,7 @@ static unsigned char t3fw[30772] = {
 	U 0x20, U 0x06, U 0x29, U 0x20, 
 	U 0x64, U 0x68, U 0x83, U 0x33, 
 	U 0x28, U 0xC2, U 0x85, U 0x12, 
-	U 0xDC, U 0x8B, U 0x28, U 0x8C, 
+	U 0xDC, U 0x78, U 0x28, U 0x8C, 
 	U 0x20, U 0xA2, U 0xB2, U 0x2E, 
 	U 0x24, U 0xCF, U 0x28, U 0xC6, 
 	U 0x85, U 0xC0, U 0x20, U 0xD1, 
@@ -5657,12 +5676,12 @@ static unsigned char t3fw[30772] = {
 	U 0x64, U 0xAF, U 0xE5, U 0xC0, 
 	U 0x21, U 0xD1, U 0x0F, U 0x00, 
 	U 0x64, U 0x9F, U 0xC8, U 0x1F, 
-	U 0xDC, U 0x78, U 0x2D, U 0x20, 
+	U 0xDC, U 0x65, U 0x2D, U 0x20, 
 	U 0x16, U 0x8F, U 0xF2, U 0x09, 
 	U 0xDD, U 0x0C, U 0x00, U 0xF1, 
 	U 0x04, U 0x00, U 0xDD, U 0x1A, 
 	U 0xAD, U 0xAD, U 0x9D, U 0x29, 
-	U 0x12, U 0xDC, U 0x79, U 0x28, 
+	U 0x12, U 0xDC, U 0x66, U 0x28, 
 	U 0xC2, U 0x85, U 0xA2, U 0xB2, 
 	U 0x2E, U 0x24, U 0xCF, U 0x28, 
 	U 0x8C, U 0x20, U 0x28, U 0xC6, 
@@ -5671,9 +5690,9 @@ static unsigned char t3fw[30772] = {
 	U 0x0F, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x26, 
 	U 0x0A, U 0x00, U 0x1B, U 0xDC, 
-	U 0xBD, U 0x15, U 0xDC, U 0x69, 
+	U 0xAA, U 0x15, U 0xDC, U 0x56, 
 	U 0x28, U 0x20, U 0x65, U 0x17, 
-	U 0xDC, U 0x66, U 0x28, U 0x8C, 
+	U 0xDC, U 0x53, U 0x28, U 0x8C, 
 	U 0xFE, U 0x64, U 0x80, U 0x94, 
 	U 0x0C, U 0x4D, U 0x11, U 0x0D, 
 	U 0xBD, U 0x08, U 0x2C, U 0xD2, 
@@ -5714,27 +5733,27 @@ static unsigned char t3fw[30772] = {
 	U 0xE4, U 0x31, U 0xD1, U 0x0F, 
 	U 0x00, U 0xDB, U 0x30, U 0xDA, 
 	U 0x20, U 0x5B, U 0xFF, U 0x94, 
-	U 0x1B, U 0xDC, U 0x92, U 0x64, 
+	U 0x1B, U 0xDC, U 0x7F, U 0x64, 
 	U 0xAF, U 0x5D, U 0x0C, U 0x4D, 
 	U 0x11, U 0xAD, U 0xBD, U 0x63, 
 	U 0xFF, U 0xA8, U 0x00, U 0x00, 
 	U 0x06, U 0xE4, U 0x31, U 0x00, 
 	U 0x02, U 0x00, U 0x2F, U 0x72, 
-	U 0x82, U 0x18, U 0xDC, U 0x50, 
+	U 0x82, U 0x18, U 0xDC, U 0x3D, 
 	U 0x2E, U 0x51, U 0x02, U 0x08, 
 	U 0xFF, U 0x02, U 0x2F, U 0x76, 
 	U 0x82, U 0x0E, U 0xE4, U 0x31, 
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
 	U 0x30, U 0x03, U 0xE4, U 0x31, 
-	U 0x16, U 0xDC, U 0x30, U 0x15, 
-	U 0xDC, U 0x31, U 0x00, U 0x02, 
+	U 0x16, U 0xDC, U 0x1D, U 0x15, 
+	U 0xDC, U 0x1E, U 0x00, U 0x02, 
 	U 0x00, U 0x24, U 0x62, U 0x82, 
 	U 0x74, U 0x47, U 0x21, U 0x18, 
-	U 0xDC, U 0x82, U 0x87, U 0x5A, 
+	U 0xDC, U 0x6F, U 0x87, U 0x5A, 
 	U 0x08, U 0x48, U 0x01, U 0x28, 
 	U 0x66, U 0x82, U 0xCD, U 0x73, 
-	U 0x19, U 0xDC, U 0x80, U 0x0C, 
+	U 0x19, U 0xDC, U 0x6D, U 0x0C, 
 	U 0x2A, U 0x11, U 0xAA, U 0x99, 
 	U 0x22, U 0x92, U 0x83, U 0x29, 
 	U 0x92, U 0x84, U 0x72, U 0x91, 
@@ -5742,22 +5761,22 @@ static unsigned char t3fw[30772] = {
 	U 0x29, U 0x2B, U 0x51, U 0x02, 
 	U 0x0B, U 0xE4, U 0x31, U 0xC0, 
 	U 0x20, U 0xD1, U 0x0F, U 0x00, 
-	U 0x1F, U 0xDC, U 0x79, U 0x2E, 
+	U 0x1F, U 0xDC, U 0x66, U 0x2E, 
 	U 0x51, U 0x02, U 0x0F, U 0xEE, 
 	U 0x01, U 0x2E, U 0x55, U 0x02, 
 	U 0x0E, U 0xE4, U 0x31, U 0xB0, 
 	U 0x2D, U 0xB1, U 0x7C, U 0x9C, 
-	U 0x5A, U 0x12, U 0xDC, U 0x74, 
+	U 0x5A, U 0x12, U 0xDC, U 0x61, 
 	U 0x08, U 0xDD, U 0x11, U 0x2D, 
 	U 0x56, U 0x19, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x06, U 0x1B, 
-	U 0xDC, U 0x17, U 0x1E, U 0xDC, 
-	U 0x19, U 0x22, U 0xB0, U 0x00, 
-	U 0x1A, U 0xDC, U 0x70, U 0x6F, 
+	U 0xDC, U 0x04, U 0x1E, U 0xDC, 
+	U 0x06, U 0x22, U 0xB0, U 0x00, 
+	U 0x1A, U 0xDC, U 0x5D, U 0x6F, 
 	U 0x23, U 0x72, U 0x1D, U 0xDC, 
-	U 0x57, U 0xC0, U 0x48, U 0x18, 
-	U 0xDC, U 0x6F, U 0x1F, U 0xDC, 
-	U 0x6D, U 0xDC, U 0x10, U 0xD5, 
+	U 0x44, U 0xC0, U 0x48, U 0x18, 
+	U 0xDC, U 0x5C, U 0x1F, U 0xDC, 
+	U 0x5A, U 0xDC, U 0x10, U 0xD5, 
 	U 0xC0, U 0x83, U 0xF0, U 0x00, 
 	U 0x80, U 0x86, U 0x00, U 0x50, 
 	U 0x8A, U 0x6D, U 0x4A, U 0x4F, 
@@ -5783,13 +5802,13 @@ static unsigned char t3fw[30772] = {
 	U 0x41, U 0x03, U 0x03, U 0x42, 
 	U 0xB1, U 0x38, U 0x08, U 0x08, 
 	U 0x42, U 0x98, U 0xF0, U 0xD1, 
-	U 0x0F, U 0x1C, U 0xDC, U 0x54, 
-	U 0x13, U 0xDC, U 0x55, U 0x27, 
+	U 0x0F, U 0x1C, U 0xDC, U 0x41, 
+	U 0x13, U 0xDC, U 0x42, U 0x27, 
 	U 0xB0, U 0x00, U 0x23, U 0x32, 
 	U 0xB5, U 0x64, U 0x70, U 0x57, 
 	U 0xC0, U 0x91, U 0xC0, U 0xD0, 
-	U 0x16, U 0xDC, U 0x53, U 0x15, 
-	U 0xDC, U 0x51, U 0xC0, U 0x40, 
+	U 0x16, U 0xDC, U 0x40, U 0x15, 
+	U 0xDC, U 0x3E, U 0xC0, U 0x40, 
 	U 0x2A, U 0xC0, U 0x00, U 0x03, 
 	U 0x88, U 0x43, U 0x28, U 0xC4, 
 	U 0x00, U 0x6D, U 0x79, U 0x3C, 
@@ -5813,11 +5832,11 @@ static unsigned char t3fw[30772] = {
 	U 0xC4, U 0x00, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
 	U 0x40, U 0x04, U 0xE4, U 0x31, 
-	U 0x15, U 0xDC, U 0x3B, U 0x00, 
+	U 0x15, U 0xDC, U 0x28, U 0x00, 
 	U 0x02, U 0x00, U 0x88, U 0x50, 
-	U 0x13, U 0xDC, U 0x3A, U 0xCB, 
+	U 0x13, U 0xDC, U 0x27, U 0xCB, 
 	U 0x81, U 0x5B, U 0xFF, U 0xBD, 
-	U 0x1C, U 0xDC, U 0x39, U 0x0C, 
+	U 0x1C, U 0xDC, U 0x26, U 0x0C, 
 	U 0x2D, U 0x11, U 0xAD, U 0xCC, 
 	U 0x2B, U 0xC2, U 0x82, U 0x2A, 
 	U 0xC2, U 0x83, U 0x94, U 0x50, 
@@ -5829,7 +5848,7 @@ static unsigned char t3fw[30772] = {
 	U 0x14, U 0x60, U 0x00, U 0x05, 
 	U 0x0B, U 0xA9, U 0x0C, U 0x09, 
 	U 0x29, U 0x14, U 0x99, U 0x30, 
-	U 0x15, U 0xDB, U 0xCC, U 0x2A, 
+	U 0x15, U 0xDB, U 0xB9, U 0x2A, 
 	U 0x51, U 0x02, U 0x0A, U 0xE4, 
 	U 0x31, U 0x2A, U 0x2C, U 0xFC, 
 	U 0x58, U 0x00, U 0x4B, U 0x2B, 
@@ -5839,7 +5858,7 @@ static unsigned char t3fw[30772] = {
 	U 0xC8, U 0xA4, U 0xD2, U 0xA0, 
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x04, U 0xE4, U 0x31, U 0x1E, 
-	U 0xDB, U 0xC0, U 0x00, U 0x02, 
+	U 0xDB, U 0xAD, U 0x00, U 0x02, 
 	U 0x00, U 0x2D, U 0xE2, U 0x82, 
 	U 0x2F, U 0xBA, U 0xFF, U 0x2C, 
 	U 0x51, U 0x02, U 0x0F, U 0xDD, 
@@ -5851,13 +5870,13 @@ static unsigned char t3fw[30772] = {
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
 	U 0x20, U 0xD1, U 0x0F, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x13, 
-	U 0xDC, U 0x18, U 0xC0, U 0xD1, 
+	U 0xDC, U 0x05, U 0xC0, U 0xD1, 
 	U 0x03, U 0x23, U 0x09, U 0x23, 
 	U 0x31, U 0x8D, U 0xC0, U 0xA0, 
 	U 0x6F, U 0x34, U 0x02, U 0x60, 
 	U 0x00, U 0x8D, U 0x19, U 0xDB, 
-	U 0xAF, U 0x1B, U 0xDB, U 0xB0, 
-	U 0x17, U 0xDC, U 0x11, U 0x0C, 
+	U 0x9C, U 0x1B, U 0xDB, U 0x9D, 
+	U 0x17, U 0xDB, U 0xFE, U 0x0C, 
 	U 0x28, U 0x11, U 0xA8, U 0x77, 
 	U 0x26, U 0x72, U 0x83, U 0x25, 
 	U 0x72, U 0x82, U 0x2C, U 0xFA, 
@@ -5894,7 +5913,7 @@ static unsigned char t3fw[30772] = {
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x04, U 0xDB, 
 	U 0x30, U 0x86, U 0x20, U 0x15, 
-	U 0xDB, U 0x88, U 0x28, U 0x0A, 
+	U 0xDB, U 0x75, U 0x28, U 0x0A, 
 	U 0x00, U 0x28, U 0x25, U 0x02, 
 	U 0xDA, U 0x20, U 0x28, U 0xB0, 
 	U 0x00, U 0x2C, U 0xB0, U 0x07, 
@@ -5902,7 +5921,7 @@ static unsigned char t3fw[30772] = {
 	U 0x82, U 0x4C, U 0x2D, U 0x0A, 
 	U 0x01, U 0x0B, U 0x80, U 0x00, 
 	U 0xDB, U 0xA0, U 0x65, U 0xAF, 
-	U 0xE6, U 0x1A, U 0xDB, U 0x81, 
+	U 0xE6, U 0x1A, U 0xDB, U 0x6E, 
 	U 0x0A, U 0x4A, U 0x0A, U 0x29, 
 	U 0xA2, U 0xA3, U 0xC7, U 0xBF, 
 	U 0x76, U 0x91, U 0x01, U 0xD1, 
@@ -5910,8 +5929,8 @@ static unsigned char t3fw[30772] = {
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
 	U 0xD1, U 0xC7, U 0xCF, U 0x1B, 
-	U 0xDB, U 0x7B, U 0x19, U 0xDB, 
-	U 0x78, U 0x17, U 0xDB, U 0x76, 
+	U 0xDB, U 0x68, U 0x19, U 0xDB, 
+	U 0x65, U 0x17, U 0xDB, U 0x63, 
 	U 0x0C, U 0x28, U 0x11, U 0xA8, 
 	U 0x77, U 0x86, U 0x75, U 0x85, 
 	U 0x74, U 0xC0, U 0xA0, U 0x76, 
@@ -5945,16 +5964,16 @@ static unsigned char t3fw[30772] = {
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x29, 
 	U 0x0A, U 0x80, U 0x1E, U 0xDB, 
-	U 0x7C, U 0x1F, U 0xDB, U 0x7C, 
-	U 0x1C, U 0xDB, U 0x55, U 0x0C, 
+	U 0x69, U 0x1F, U 0xDB, U 0x69, 
+	U 0x1C, U 0xDB, U 0x42, U 0x0C, 
 	U 0x2B, U 0x11, U 0xAC, U 0xBB, 
 	U 0x2C, U 0x2C, U 0xFC, U 0x2D, 
 	U 0xB2, U 0x85, U 0x0F, U 0xCC, 
 	U 0x02, U 0x9E, U 0xD1, U 0x9C, 
 	U 0xD0, U 0xC0, U 0x51, U 0xC0, 
-	U 0x70, U 0x13, U 0xDB, U 0x78, 
-	U 0x14, U 0xDB, U 0x77, U 0x18, 
-	U 0xDB, U 0x75, U 0x2A, U 0xB2, 
+	U 0x70, U 0x13, U 0xDB, U 0x65, 
+	U 0x14, U 0xDB, U 0x64, U 0x18, 
+	U 0xDB, U 0x62, U 0x2A, U 0xB2, 
 	U 0x85, U 0xA8, U 0x28, U 0x04, 
 	U 0x24, U 0x0A, U 0x23, U 0x46, 
 	U 0x91, U 0xA9, U 0x86, U 0xB8, 
@@ -5963,20 +5982,20 @@ static unsigned char t3fw[30772] = {
 	U 0x9F, U 0x25, U 0x64, U 0x9F, 
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x19, 
-	U 0xDB, U 0xA9, U 0x0C, U 0x2A, 
+	U 0xDB, U 0x96, U 0x0C, U 0x2A, 
 	U 0x11, U 0xA9, U 0xA9, U 0x89, 
 	U 0x90, U 0xC4, U 0x84, U 0x79, 
 	U 0x8B, U 0x76, U 0x1B, U 0xDB, 
-	U 0x97, U 0xAB, U 0xAC, U 0x2A, 
+	U 0x84, U 0xAB, U 0xAC, U 0x2A, 
 	U 0xC2, U 0x83, U 0x2C, U 0xC2, 
 	U 0x84, U 0x7A, U 0xC1, U 0x68, 
 	U 0x8A, U 0xA0, U 0x2B, U 0xBC, 
 	U 0x30, U 0xD3, U 0xA0, U 0x64, 
 	U 0xA0, U 0x5E, U 0x0B, U 0x2B, 
 	U 0x0A, U 0x2C, U 0xB2, U 0xA3, 
-	U 0x19, U 0xDB, U 0x61, U 0x68, 
+	U 0x19, U 0xDB, U 0x4E, U 0x68, 
 	U 0xC0, U 0x07, U 0x1D, U 0xDB, 
-	U 0x9D, U 0xD3, U 0x0F, U 0x7D, 
+	U 0x8A, U 0xD3, U 0x0F, U 0x7D, 
 	U 0xC9, U 0x4A, U 0xA9, U 0x29, 
 	U 0x29, U 0x9D, U 0x01, U 0x29, 
 	U 0x90, U 0x1F, U 0x68, U 0x91, 
@@ -5987,9 +6006,9 @@ static unsigned char t3fw[30772] = {
 	U 0x2A, U 0x2C, U 0xFC, U 0x5B, 
 	U 0xFF, U 0xB3, U 0xD2, U 0x30, 
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
-	U 0x13, U 0xDB, U 0x93, U 0x03, 
+	U 0x13, U 0xDB, U 0x80, U 0x03, 
 	U 0xA3, U 0x01, U 0x8C, U 0x31, 
-	U 0x1D, U 0xDB, U 0x33, U 0x0C, 
+	U 0x1D, U 0xDB, U 0x20, U 0x0C, 
 	U 0x8C, U 0x14, U 0x0D, U 0xCC, 
 	U 0x01, U 0x2C, U 0xB6, U 0xA3, 
 	U 0x63, U 0xFF, U 0xDC, U 0x00, 
@@ -6000,20 +6019,20 @@ static unsigned char t3fw[30772] = {
 	U 0x0F, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xDB, 
 	U 0x30, U 0xC0, U 0xD0, U 0x19, 
-	U 0xDB, U 0x1E, U 0xDA, U 0x20, 
+	U 0xDB, U 0x0B, U 0xDA, U 0x20, 
 	U 0x28, U 0x30, U 0x00, U 0x22, 
 	U 0x30, U 0x07, U 0x08, U 0x48, 
 	U 0x12, U 0x09, U 0x88, U 0x0A, 
 	U 0x28, U 0x82, U 0x4C, U 0xDC, 
 	U 0x20, U 0x0B, U 0x80, U 0x00, 
-	U 0x1B, U 0xDB, U 0x19, U 0x0C, 
+	U 0x1B, U 0xDB, U 0x06, U 0x0C, 
 	U 0x4A, U 0x11, U 0xAB, U 0xAA, 
 	U 0x29, U 0xA2, U 0x84, U 0x09, 
 	U 0x29, U 0x0B, U 0x29, U 0xA6, 
 	U 0x84, U 0xD1, U 0x0F, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
-	U 0x41, U 0x18, U 0xDB, U 0x12, 
-	U 0x17, U 0xDB, U 0x14, U 0x0C, 
+	U 0x41, U 0x18, U 0xDA, U 0xFF, 
+	U 0x17, U 0xDB, U 0x01, U 0x0C, 
 	U 0x26, U 0x11, U 0xA7, U 0x27, 
 	U 0x27, U 0x70, U 0x30, U 0xA8, 
 	U 0x66, U 0x25, U 0x62, U 0x86, 
@@ -6021,17 +6040,17 @@ static unsigned char t3fw[30772] = {
 	U 0x55, U 0x00, U 0x44, U 0x1A, 
 	U 0x75, U 0x41, U 0x48, U 0x22, 
 	U 0x62, U 0x84, U 0x15, U 0xDB, 
-	U 0x34, U 0x02, U 0x32, U 0x0B, 
+	U 0x21, U 0x02, U 0x32, U 0x0B, 
 	U 0xC9, U 0x22, U 0x88, U 0x21, 
-	U 0x17, U 0xDB, U 0x11, U 0x08, 
+	U 0x17, U 0xDA, U 0xFE, U 0x08, 
 	U 0x84, U 0x14, U 0x07, U 0x44, 
 	U 0x01, U 0x75, U 0x49, U 0x05, 
 	U 0xC8, U 0x34, U 0xC0, U 0x20, 
 	U 0xD1, U 0x0F, U 0xD1, U 0x0F, 
 	U 0x08, U 0x09, U 0x47, U 0x1D, 
-	U 0xDB, U 0x68, U 0xC0, U 0xB2, 
+	U 0xDB, U 0x55, U 0xC0, U 0xB2, 
 	U 0x8E, U 0x20, U 0x1F, U 0xDA, 
-	U 0xFF, U 0x0E, U 0x0E, U 0x43, 
+	U 0xEC, U 0x0E, U 0x0E, U 0x43, 
 	U 0xAF, U 0xEC, U 0x2B, U 0xC4, 
 	U 0xA0, U 0x0F, U 0xEE, U 0x0A, 
 	U 0x2D, U 0xE6, U 0x24, U 0x2A, 
@@ -6041,55 +6060,55 @@ static unsigned char t3fw[30772] = {
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x04, U 0xDB, 
 	U 0x30, U 0xC0, U 0xD0, U 0x18, 
-	U 0xDA, U 0xF5, U 0xDA, U 0x20, 
+	U 0xDA, U 0xE2, U 0xDA, U 0x20, 
 	U 0x25, U 0x30, U 0x00, U 0x22, 
 	U 0x30, U 0x07, U 0x08, U 0x58, 
 	U 0x0A, U 0x28, U 0x82, U 0x4C, 
 	U 0xDC, U 0x20, U 0x0B, U 0x80, 
 	U 0x00, U 0x89, U 0x31, U 0x70, 
 	U 0x9E, U 0x12, U 0x1B, U 0xDA, 
-	U 0xEF, U 0x0C, U 0x4A, U 0x11, 
+	U 0xDC, U 0x0C, U 0x4A, U 0x11, 
 	U 0xAB, U 0xAA, U 0x29, U 0xA2, 
 	U 0x84, U 0x09, U 0x29, U 0x0B, 
 	U 0x29, U 0xA6, U 0x84, U 0xD1, 
 	U 0x0F, U 0x09, U 0xC9, U 0x52, 
 	U 0x68, U 0x53, U 0x26, U 0x00, 
 	U 0x91, U 0x04, U 0x18, U 0xDA, 
-	U 0xEA, U 0xC0, U 0xA1, U 0x2F, 
+	U 0xD7, U 0xC0, U 0xA1, U 0x2F, 
 	U 0x81, U 0x12, U 0x00, U 0xAA, 
 	U 0x1A, U 0x0A, U 0xFF, U 0x02, 
 	U 0x2F, U 0x85, U 0x12, U 0x1E, 
-	U 0xDA, U 0xE4, U 0x0C, U 0x4D, 
+	U 0xDA, U 0xD1, U 0x0C, U 0x4D, 
 	U 0x11, U 0xAE, U 0xDD, U 0x2C, 
 	U 0xD2, U 0x84, U 0x0C, U 0x2C, 
 	U 0x0B, U 0x2C, U 0xD6, U 0x84, 
 	U 0xD1, U 0x0F, U 0xC0, U 0x81, 
-	U 0x1F, U 0xDA, U 0xE1, U 0xB8, 
+	U 0x1F, U 0xDA, U 0xCE, U 0xB8, 
 	U 0x9A, U 0x0A, U 0x0A, U 0x47, 
 	U 0x2E, U 0xF1, U 0x12, U 0x00, 
 	U 0xA1, U 0x04, U 0x00, U 0x88, 
 	U 0x1A, U 0x08, U 0xEE, U 0x02, 
 	U 0x2E, U 0xF5, U 0x12, U 0x1D, 
-	U 0xDA, U 0xD9, U 0x0C, U 0x4C, 
+	U 0xDA, U 0xC6, U 0x0C, U 0x4C, 
 	U 0x11, U 0xAD, U 0xCC, U 0x2B, 
 	U 0xC2, U 0x84, U 0x0B, U 0x2B, 
 	U 0x0B, U 0x2B, U 0xC6, U 0x84, 
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xDB, 
 	U 0x30, U 0xC0, U 0xD0, U 0x19, 
-	U 0xDA, U 0xD1, U 0xDA, U 0x20, 
+	U 0xDA, U 0xBE, U 0xDA, U 0x20, 
 	U 0x28, U 0x30, U 0x00, U 0x22, 
 	U 0x30, U 0x07, U 0x09, U 0x88, 
 	U 0x0A, U 0x28, U 0x82, U 0x4C, 
 	U 0xDC, U 0x20, U 0x0B, U 0x80, 
-	U 0x00, U 0x1C, U 0xDA, U 0xCC, 
+	U 0x00, U 0x1C, U 0xDA, U 0xB9, 
 	U 0x0C, U 0x4B, U 0x11, U 0xAC, 
 	U 0xBB, U 0x2A, U 0xB2, U 0x84, 
 	U 0x0A, U 0x2A, U 0x0B, U 0x2A, 
 	U 0xB6, U 0x84, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
-	U 0x41, U 0x18, U 0xDA, U 0xC6, 
-	U 0x16, U 0xDA, U 0xC8, U 0x0C, 
+	U 0x41, U 0x18, U 0xDA, U 0xB3, 
+	U 0x16, U 0xDA, U 0xB5, U 0x0C, 
 	U 0x27, U 0x11, U 0xA6, U 0x26, 
 	U 0x26, U 0x60, U 0x30, U 0xA8, 
 	U 0x72, U 0x25, U 0x22, U 0x86, 
@@ -6100,7 +6119,7 @@ static unsigned char t3fw[30772] = {
 	U 0x0B, U 0xD1, U 0x0F, U 0x00, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x04, U 0x15, 
-	U 0xDB, U 0x23, U 0x02, U 0x49, 
+	U 0xDB, U 0x10, U 0x02, U 0x49, 
 	U 0x14, U 0x29, U 0x56, U 0x11, 
 	U 0x24, U 0x52, U 0x12, U 0x02, 
 	U 0x08, U 0x43, U 0x0F, U 0x88, 
@@ -6116,8 +6135,8 @@ static unsigned char t3fw[30772] = {
 	U 0x23, U 0x02, U 0x60, U 0x00, 
 	U 0xAC, U 0x64, U 0x20, U 0xA7, 
 	U 0xC0, U 0xA0, U 0x85, U 0x10, 
-	U 0x13, U 0xDA, U 0xFB, U 0x16, 
-	U 0xDB, U 0x12, U 0xC0, U 0x40, 
+	U 0x13, U 0xDA, U 0xE8, U 0x16, 
+	U 0xDA, U 0xFF, U 0xC0, U 0x40, 
 	U 0xA6, U 0xAA, U 0x2B, U 0xA2, 
 	U 0xAE, U 0x0B, U 0x19, U 0x41, 
 	U 0x64, U 0x90, U 0x66, U 0x68, 
@@ -6139,7 +6158,7 @@ static unsigned char t3fw[30772] = {
 	U 0x00, U 0xB1, U 0x44, U 0x72, 
 	U 0x49, U 0xB1, U 0x60, U 0x00, 
 	U 0x4A, U 0x7F, U 0xBF, U 0x07, 
-	U 0x15, U 0xDA, U 0xFD, U 0x63, 
+	U 0x15, U 0xDA, U 0xEA, U 0x63, 
 	U 0xFF, U 0xB9, U 0x00, U 0x00, 
 	U 0x25, U 0x3A, U 0xE8, U 0x63, 
 	U 0xFF, U 0xB1, U 0x00, U 0x00, 
@@ -6159,9 +6178,9 @@ static unsigned char t3fw[30772] = {
 	U 0x50, U 0x63, U 0xFF, U 0xA7, 
 	U 0xD1, U 0x0F, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x04, U 0x1A, 
-	U 0xDA, U 0x82, U 0x19, U 0xDA, 
-	U 0x7F, U 0x1C, U 0xDA, U 0xE8, 
-	U 0x1B, U 0xDA, U 0xE9, U 0xC0, 
+	U 0xDA, U 0x6F, U 0x19, U 0xDA, 
+	U 0x6C, U 0x1C, U 0xDA, U 0xD5, 
+	U 0x1B, U 0xDA, U 0xD6, U 0xC0, 
 	U 0x80, U 0xC0, U 0x71, U 0x60, 
 	U 0x00, U 0x0D, U 0x00, U 0x00, 
 	U 0x00, U 0x22, U 0xA4, U 0x30, 
@@ -6191,18 +6210,18 @@ static unsigned char t3fw[30772] = {
 	U 0x98, U 0x2D, U 0x98, U 0x2E, 
 	U 0x98, U 0x2F, U 0x22, U 0x2C, 
 	U 0x40, U 0x63, U 0xFF, U 0x97, 
-	U 0x1E, U 0xDA, U 0x60, U 0x27, 
+	U 0x1E, U 0xDA, U 0x4D, U 0x27, 
 	U 0xE6, U 0x80, U 0x27, U 0xE6, 
 	U 0x81, U 0xD1, U 0x0F, U 0x00, 
 	U 0xC0, U 0x20, U 0x63, U 0xFF, 
 	U 0x83, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
 	U 0x62, U 0xC0, U 0x41, U 0x12, 
-	U 0xDA, U 0x5B, U 0x1A, U 0xDA, 
-	U 0x57, U 0x13, U 0xDA, U 0xC3, 
+	U 0xDA, U 0x48, U 0x1A, U 0xDA, 
+	U 0x44, U 0x13, U 0xDA, U 0xB0, 
 	U 0x2A, U 0xA0, U 0x00, U 0x23, 
 	U 0x32, U 0x2D, U 0x19, U 0xDA, 
-	U 0xBD, U 0x2B, U 0xAC, U 0xFE, 
+	U 0xAA, U 0x2B, U 0xAC, U 0xFE, 
 	U 0x29, U 0x92, U 0xAE, U 0x6E, 
 	U 0xA3, U 0x02, U 0x60, U 0x00, 
 	U 0x8E, U 0x09, U 0x0E, U 0x40, 
@@ -6210,8 +6229,8 @@ static unsigned char t3fw[30772] = {
 	U 0xCD, U 0x0E, U 0xDC, U 0x39, 
 	U 0x2C, U 0x25, U 0x16, U 0x64, 
 	U 0xB0, U 0x89, U 0x5B, U 0xFF, 
-	U 0x9E, U 0x15, U 0xDA, U 0xB9, 
-	U 0x1A, U 0xDA, U 0xB3, U 0x2B, 
+	U 0x9E, U 0x15, U 0xDA, U 0xA6, 
+	U 0x1A, U 0xDA, U 0xA0, U 0x2B, 
 	U 0x3A, U 0xE8, U 0x0A, U 0x3A, 
 	U 0x01, U 0x58, U 0x05, U 0x8B, 
 	U 0x2B, U 0x21, U 0x16, U 0x0A, 
@@ -6220,7 +6239,7 @@ static unsigned char t3fw[30772] = {
 	U 0xA2, U 0x2B, U 0x52, U 0x00, 
 	U 0x0A, U 0xBB, U 0x08, U 0x2A, 
 	U 0x0A, U 0x00, U 0x58, U 0x05, 
-	U 0xA1, U 0x15, U 0xDA, U 0xB0, 
+	U 0xA1, U 0x15, U 0xDA, U 0x9D, 
 	U 0x2D, U 0x21, U 0x02, U 0x2C, 
 	U 0x3A, U 0xE8, U 0x0C, U 0x3C, 
 	U 0x28, U 0x04, U 0xDD, U 0x02, 
@@ -6228,10 +6247,10 @@ static unsigned char t3fw[30772] = {
 	U 0x50, U 0x58, U 0x05, U 0x99, 
 	U 0x8B, U 0x50, U 0xAA, U 0xBB, 
 	U 0xC0, U 0xA1, U 0x58, U 0x05, 
-	U 0x99, U 0x1C, U 0xDA, U 0xA9, 
+	U 0x99, U 0x1C, U 0xDA, U 0x96, 
 	U 0x2D, U 0x21, U 0x02, U 0x0C, 
 	U 0x3C, U 0x28, U 0x06, U 0xDD, 
-	U 0x02, U 0x13, U 0xDA, U 0xA7, 
+	U 0x02, U 0x13, U 0xDA, U 0x94, 
 	U 0x2D, U 0x25, U 0x02, U 0x9C, 
 	U 0x30, U 0x58, U 0x05, U 0x91, 
 	U 0x8B, U 0x30, U 0xAA, U 0xBB, 
@@ -6244,12 +6263,12 @@ static unsigned char t3fw[30772] = {
 	U 0x24, U 0x24, U 0x23, U 0xC3, 
 	U 0xCC, U 0x2C, U 0x25, U 0x16, 
 	U 0x63, U 0xFF, U 0x76, U 0x00, 
-	U 0x18, U 0xDA, U 0x9F, U 0x1C, 
-	U 0xDA, U 0x9B, U 0x19, U 0xDA, 
-	U 0x9C, U 0x1B, U 0xDA, U 0x9A, 
-	U 0x17, U 0xDA, U 0x6D, U 0x85, 
+	U 0x18, U 0xDA, U 0x8C, U 0x1C, 
+	U 0xDA, U 0x88, U 0x19, U 0xDA, 
+	U 0x89, U 0x1B, U 0xDA, U 0x87, 
+	U 0x17, U 0xDA, U 0x5A, U 0x85, 
 	U 0x20, U 0x2E, U 0x0A, U 0xFD, 
-	U 0x1F, U 0xDA, U 0x9B, U 0x2D, 
+	U 0x1F, U 0xDA, U 0x88, U 0x2D, 
 	U 0x20, U 0x2E, U 0x24, U 0xF4, 
 	U 0x7A, U 0x24, U 0xF4, U 0x7E, 
 	U 0x24, U 0xF4, U 0x82, U 0x0E, 
@@ -6278,14 +6297,14 @@ static unsigned char t3fw[30772] = {
 	U 0x6C, U 0x10, U 0x04, U 0x2A, 
 	U 0x0A, U 0x30, U 0x2B, U 0x0A, 
 	U 0x03, U 0x5B, U 0xFF, U 0x4D, 
-	U 0x12, U 0xDA, U 0x71, U 0xC3, 
+	U 0x12, U 0xDA, U 0x5E, U 0xC3, 
 	U 0x90, U 0x29, U 0x26, U 0x16, 
 	U 0xC3, U 0xA1, U 0xC0, U 0xB3, 
 	U 0xC0, U 0x8A, U 0x28, U 0x26, 
 	U 0x17, U 0x5B, U 0xFF, U 0x48, 
 	U 0xC0, U 0x3C, U 0xC3, U 0xB1, 
 	U 0x2B, U 0x26, U 0x16, U 0x1A, 
-	U 0xDA, U 0x04, U 0x2A, U 0xA0, 
+	U 0xD9, U 0xF1, U 0x2A, U 0xA0, 
 	U 0x20, U 0x23, U 0x26, U 0x17, 
 	U 0x64, U 0xA0, U 0x79, U 0xC3, 
 	U 0xA2, U 0xC0, U 0xB1, U 0x5B, 
@@ -6316,24 +6335,24 @@ static unsigned char t3fw[30772] = {
 	U 0x28, U 0x26, U 0x17, U 0xC2, 
 	U 0xFB, U 0x2F, U 0x26, U 0x16, 
 	U 0xC0, U 0xE7, U 0x2E, U 0x26, 
-	U 0x17, U 0x1D, U 0xDA, U 0x58, 
+	U 0x17, U 0x1D, U 0xDA, U 0x45, 
 	U 0x2D, U 0x26, U 0x10, U 0xD1, 
 	U 0x0F, U 0xC3, U 0xA2, U 0xC0, 
 	U 0xB3, U 0x5B, U 0xFF, U 0x23, 
 	U 0x63, U 0xFF, U 0x82, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x1C, 
-	U 0xDA, U 0x21, U 0x1B, U 0xDA, 
-	U 0x0C, U 0x18, U 0xDA, U 0x52, 
-	U 0x17, U 0xDA, U 0x53, U 0x16, 
-	U 0xDA, U 0x53, U 0x15, U 0xDA, 
-	U 0x53, U 0xC0, U 0xE0, U 0xC0, 
-	U 0xD4, U 0x14, U 0xDA, U 0x1D, 
-	U 0x1F, U 0xD9, U 0xD9, U 0xC0, 
+	U 0xDA, U 0x0E, U 0x1B, U 0xD9, 
+	U 0xF9, U 0x18, U 0xDA, U 0x3F, 
+	U 0x17, U 0xDA, U 0x40, U 0x16, 
+	U 0xDA, U 0x40, U 0x15, U 0xDA, 
+	U 0x40, U 0xC0, U 0xE0, U 0xC0, 
+	U 0xD4, U 0x14, U 0xDA, U 0x0A, 
+	U 0x1F, U 0xD9, U 0xC6, U 0xC0, 
 	U 0x28, U 0x8F, U 0xF0, U 0x6D, 
 	U 0x2A, U 0x36, U 0xDA, U 0xC0, 
 	U 0xD9, U 0xC0, U 0x7C, U 0x5B, 
 	U 0x02, U 0x0F, U 0xC9, U 0x0C, 
-	U 0x1C, U 0xDA, U 0x17, U 0x0C, 
+	U 0x1C, U 0xDA, U 0x04, U 0x0C, 
 	U 0x9C, U 0x28, U 0xA8, U 0xC3, 
 	U 0xA6, U 0xC2, U 0x2A, U 0x36, 
 	U 0x80, U 0x2A, U 0x25, U 0x84, 
@@ -6344,13 +6363,13 @@ static unsigned char t3fw[30772] = {
 	U 0xB1, U 0xBB, U 0x2E, U 0x36, 
 	U 0x9F, U 0x2C, U 0x36, U 0x9E, 
 	U 0x2C, U 0x36, U 0x9D, U 0xB1, 
-	U 0xAC, U 0x1C, U 0xD9, U 0xF6, 
-	U 0x1B, U 0xDA, U 0x41, U 0xC0, 
+	U 0xAC, U 0x1C, U 0xD9, U 0xE3, 
+	U 0x1B, U 0xDA, U 0x2E, U 0xC0, 
 	U 0x28, U 0x6D, U 0x2A, U 0x33, 
 	U 0xDA, U 0xC0, U 0xD9, U 0xC0, 
 	U 0x7C, U 0x5B, U 0x02, U 0x0F, 
-	U 0xC9, U 0x0C, U 0x1C, U 0xDA, 
-	U 0x06, U 0x0C, U 0x9C, U 0x28, 
+	U 0xC9, U 0x0C, U 0x1C, U 0xD9, 
+	U 0xF3, U 0x0C, U 0x9C, U 0x28, 
 	U 0xA8, U 0xC3, U 0xA6, U 0xC2, 
 	U 0x2A, U 0x36, U 0x80, U 0x2B, 
 	U 0x25, U 0x84, U 0xA4, U 0xC2, 
@@ -6361,13 +6380,13 @@ static unsigned char t3fw[30772] = {
 	U 0x2C, U 0x36, U 0x9E, U 0x2C, 
 	U 0x36, U 0x9D, U 0xB1, U 0xAC, 
 	U 0xC0, U 0x79, U 0x19, U 0xD9, 
-	U 0xF6, U 0x1B, U 0xDA, U 0x33, 
-	U 0x13, U 0xDA, U 0x31, U 0x1A, 
-	U 0xDA, U 0x31, U 0x18, U 0xDA, 
-	U 0x32, U 0x14, U 0xD9, U 0xF7, 
-	U 0x16, U 0xDA, U 0x32, U 0x04, 
+	U 0xE3, U 0x1B, U 0xDA, U 0x20, 
+	U 0x13, U 0xDA, U 0x1E, U 0x1A, 
+	U 0xDA, U 0x1E, U 0x18, U 0xDA, 
+	U 0x1F, U 0x14, U 0xD9, U 0xE4, 
+	U 0x16, U 0xDA, U 0x1F, U 0x04, 
 	U 0xF4, U 0x28, U 0x12, U 0xDA, 
-	U 0x31, U 0x04, U 0x66, U 0x0C, 
+	U 0x1E, U 0x04, U 0x66, U 0x0C, 
 	U 0x04, U 0x05, U 0x06, U 0xA2, 
 	U 0x52, U 0xA8, U 0x58, U 0xAA, 
 	U 0x5A, U 0xA3, U 0x53, U 0x9B, 
@@ -6375,12 +6394,12 @@ static unsigned char t3fw[30772] = {
 	U 0x27, U 0x84, U 0x8A, U 0xC0, 
 	U 0x91, U 0xC0, U 0xA5, U 0x2A, 
 	U 0x84, U 0x8C, U 0x29, U 0x84, 
-	U 0x8B, U 0x17, U 0xDA, U 0x2A, 
-	U 0x18, U 0xDA, U 0x29, U 0xA7, 
+	U 0x8B, U 0x17, U 0xDA, U 0x17, 
+	U 0x18, U 0xDA, U 0x16, U 0xA7, 
 	U 0x57, U 0x26, U 0x36, U 0x1D, 
 	U 0x26, U 0x36, U 0x1E, U 0x2E, 
 	U 0x36, U 0x1F, U 0x16, U 0xDA, 
-	U 0x27, U 0x13, U 0xDA, U 0x27, 
+	U 0x14, U 0x13, U 0xDA, U 0x14, 
 	U 0xA6, U 0x55, U 0x04, U 0x33, 
 	U 0x0C, U 0x28, U 0x26, U 0xC8, 
 	U 0x2E, U 0x75, U 0x00, U 0x2D, 
@@ -6390,40 +6409,40 @@ static unsigned char t3fw[30772] = {
 	U 0x26, U 0xE5, U 0x2E, U 0x26, 
 	U 0xE7, U 0xD1, U 0x0F, U 0x00, 
 	U 0x6C, U 0x10, U 0x06, U 0x13, 
-	U 0xDA, U 0x05, U 0x17, U 0xDA, 
-	U 0x00, U 0x24, U 0x72, U 0x3D, 
+	U 0xD9, U 0xF2, U 0x17, U 0xD9, 
+	U 0xED, U 0x24, U 0x72, U 0x3D, 
 	U 0x22, U 0x32, U 0x93, U 0x7F, 
 	U 0x2F, U 0x0B, U 0x6D, U 0x08, 
 	U 0x05, U 0x28, U 0x32, U 0x93, 
 	U 0x7F, U 0x8F, U 0x02, U 0x63, 
 	U 0xFF, U 0xF3, U 0xC0, U 0xC4, 
 	U 0xC0, U 0xB0, U 0x1A, U 0xD9, 
-	U 0x93, U 0xC0, U 0x51, U 0xD9, 
+	U 0x80, U 0xC0, U 0x51, U 0xD9, 
 	U 0x40, U 0x04, U 0x59, U 0x39, 
 	U 0x29, U 0xA4, U 0x20, U 0x6E, 
 	U 0x44, U 0x02, U 0x0B, U 0xB5, 
 	U 0x02, U 0xC3, U 0x28, U 0x1E, 
-	U 0xD9, U 0x8E, U 0xDD, U 0xB0, 
+	U 0xD9, U 0x7B, U 0xDD, U 0xB0, 
 	U 0x25, U 0xE4, U 0x22, U 0x05, 
 	U 0x2D, U 0x39, U 0x2D, U 0xE4, 
 	U 0x21, U 0xC0, U 0x50, U 0x1E, 
-	U 0xDA, U 0x0E, U 0x19, U 0xD9, 
-	U 0xFE, U 0x18, U 0xD9, U 0xFE, 
-	U 0x16, U 0xDA, U 0x00, U 0x1D, 
-	U 0xDA, U 0x0C, U 0x94, U 0x10, 
+	U 0xD9, U 0xFB, U 0x19, U 0xD9, 
+	U 0xEB, U 0x18, U 0xD9, U 0xEB, 
+	U 0x16, U 0xD9, U 0xED, U 0x1D, 
+	U 0xD9, U 0xF9, U 0x94, U 0x10, 
 	U 0x2A, U 0x72, U 0x45, U 0x17, 
-	U 0xD9, U 0xC9, U 0x6D, U 0xA9, 
+	U 0xD9, U 0xB6, U 0x6D, U 0xA9, 
 	U 0x4B, U 0xD4, U 0x50, U 0xB3, 
 	U 0x55, U 0x7A, U 0x5B, U 0x17, 
 	U 0xDF, U 0x50, U 0x75, U 0x6B, 
-	U 0x07, U 0x1F, U 0xD9, U 0x80, 
+	U 0x07, U 0x1F, U 0xD9, U 0x6D, 
 	U 0x8F, U 0xF0, U 0x0F, U 0x5F, 
-	U 0x0C, U 0x12, U 0xD9, U 0xC1, 
+	U 0x0C, U 0x12, U 0xD9, U 0xAE, 
 	U 0x02, U 0xF2, U 0x28, U 0xAE, 
 	U 0x22, U 0x22, U 0xD6, U 0x81, 
 	U 0xD5, U 0x40, U 0x13, U 0xD9, 
-	U 0xBE, U 0x74, U 0x6B, U 0x07, 
-	U 0x15, U 0xD9, U 0x7A, U 0x85, 
+	U 0xAB, U 0x74, U 0x6B, U 0x07, 
+	U 0x15, U 0xD9, U 0x67, U 0x85, 
 	U 0x50, U 0x05, U 0x45, U 0x0C, 
 	U 0x03, U 0x53, U 0x28, U 0xB1, 
 	U 0x45, U 0xA7, U 0x3F, U 0xA8, 
@@ -6432,73 +6451,73 @@ static unsigned char t3fw[30772] = {
 	U 0x9E, U 0x24, U 0x36, U 0x80, 
 	U 0x2B, U 0x36, U 0x9F, U 0x2B, 
 	U 0xF4, U 0x8B, U 0x2C, U 0xF4, 
-	U 0x8C, U 0x14, U 0xD9, U 0xDA, 
+	U 0x8C, U 0x14, U 0xD9, U 0xC7, 
 	U 0x24, U 0x42, U 0x4D, U 0xC0, 
 	U 0x30, U 0x04, U 0x14, U 0x14, 
 	U 0xC8, U 0x4C, U 0x6D, U 0x08, 
 	U 0x06, U 0xB1, U 0x33, U 0x04, 
 	U 0x14, U 0x14, U 0xC8, U 0x42, 
 	U 0x63, U 0xFF, U 0xF2, U 0x00, 
-	U 0x15, U 0xD9, U 0x67, U 0xC4, 
+	U 0x15, U 0xD9, U 0x54, U 0xC4, 
 	U 0x40, U 0x00, U 0x31, U 0x04, 
-	U 0x1A, U 0xD9, U 0x68, U 0xC0, 
+	U 0x1A, U 0xD9, U 0x55, U 0xC0, 
 	U 0xD1, U 0x93, U 0xA2, U 0x00, 
 	U 0xDD, U 0x1A, U 0xC1, U 0x38, 
 	U 0xB0, U 0xDD, U 0x9D, U 0xA3, 
-	U 0x18, U 0xD9, U 0xCE, U 0x2B, 
+	U 0x18, U 0xD9, U 0xBB, U 0x2B, 
 	U 0x82, U 0x4D, U 0x29, U 0x82, 
 	U 0x4E, U 0x29, U 0xA5, U 0x1C, 
 	U 0x28, U 0x82, U 0x53, U 0x7A, 
 	U 0x87, U 0x1E, U 0x2C, U 0x54, 
 	U 0x00, U 0x8E, U 0x10, U 0x6F, 
 	U 0xE4, U 0x5D, U 0x12, U 0xD9, 
-	U 0x5D, U 0x2F, U 0x21, U 0x1D, 
+	U 0x4A, U 0x2F, U 0x21, U 0x1D, 
 	U 0x23, U 0x21, U 0x1C, U 0x2F, 
 	U 0x25, U 0x1B, U 0x04, U 0x33, 
 	U 0x0C, U 0x23, U 0x25, U 0x1C, 
 	U 0x23, U 0x25, U 0x1A, U 0xD1, 
 	U 0x0F, U 0xC0, U 0x62, U 0x18, 
-	U 0xD9, U 0xBD, U 0x88, U 0x80, 
+	U 0xD9, U 0xAA, U 0x88, U 0x80, 
 	U 0x7E, U 0x87, U 0xD9, U 0x89, 
 	U 0x10, U 0x26, U 0x54, U 0x00, 
 	U 0x6F, U 0x94, U 0x19, U 0x1B, 
-	U 0xD9, U 0x53, U 0x2A, U 0xB1, 
+	U 0xD9, U 0x40, U 0x2A, U 0xB1, 
 	U 0x1C, U 0x0A, U 0x1A, U 0x14, 
 	U 0x04, U 0xAA, U 0x0C, U 0x2A, 
 	U 0xB5, U 0x1C, U 0x2A, U 0xB5, 
 	U 0x1D, U 0x2A, U 0xB5, U 0x1A, 
 	U 0x2A, U 0xB5, U 0x1B, U 0xD1, 
-	U 0x0F, U 0x1B, U 0xD9, U 0x4C, 
+	U 0x0F, U 0x1B, U 0xD9, U 0x39, 
 	U 0x2A, U 0xB1, U 0x1C, U 0x0A, 
 	U 0x1A, U 0x14, U 0x03, U 0xAA, 
 	U 0x0C, U 0x2A, U 0xB5, U 0x1C, 
 	U 0x2A, U 0xB5, U 0x1D, U 0x2A, 
 	U 0xB5, U 0x1A, U 0x2A, U 0xB5, 
 	U 0x1B, U 0xD1, U 0x0F, U 0x00, 
-	U 0x1C, U 0xD9, U 0x46, U 0x2B, 
+	U 0x1C, U 0xD9, U 0x33, U 0x2B, 
 	U 0xC1, U 0x1D, U 0x2D, U 0xC1, 
 	U 0x1C, U 0x2B, U 0xC5, U 0x1B, 
 	U 0x03, U 0xDD, U 0x0C, U 0x2D, 
 	U 0xC5, U 0x1C, U 0x2D, U 0xC5, 
 	U 0x1A, U 0xD1, U 0x0F, U 0x00, 
 	U 0x6C, U 0x10, U 0x06, U 0x19, 
-	U 0xD9, U 0x3F, U 0x14, U 0xD9, 
-	U 0xA4, U 0x12, U 0xD9, U 0xA7, 
-	U 0x15, U 0xD9, U 0xC2, U 0xC7, 
+	U 0xD9, U 0x2C, U 0x14, U 0xD9, 
+	U 0x91, U 0x12, U 0xD9, U 0x94, 
+	U 0x15, U 0xD9, U 0xAF, U 0xC7, 
 	U 0x3F, U 0xC0, U 0xE0, U 0x2E, 
 	U 0x56, U 0xA8, U 0x2E, U 0x56, 
 	U 0xA9, U 0x2E, U 0x56, U 0xAA, 
 	U 0x2E, U 0x56, U 0xAB, U 0x23, 
 	U 0x26, U 0x29, U 0x18, U 0xD9, 
-	U 0x65, U 0xDB, U 0x10, U 0x1C, 
-	U 0xD9, U 0xBC, U 0xC0, U 0xD4, 
+	U 0x52, U 0xDB, U 0x10, U 0x1C, 
+	U 0xD9, U 0xA9, U 0xC0, U 0xD4, 
 	U 0x2A, U 0x42, U 0x45, U 0x2D, 
 	U 0x16, U 0x01, U 0x9C, U 0x10, 
 	U 0x00, U 0xB0, U 0x89, U 0x0A, 
 	U 0x88, U 0x0C, U 0x28, U 0x96, 
 	U 0x00, U 0x5B, U 0xFF, U 0x94, 
 	U 0x2B, U 0x22, U 0xE3, U 0x18, 
-	U 0xD9, U 0x2F, U 0x0B, U 0x5B, 
+	U 0xD9, U 0x1C, U 0x0B, U 0x5B, 
 	U 0x14, U 0x9B, U 0x84, U 0x2A, 
 	U 0x22, U 0xE4, U 0x8B, U 0x84, 
 	U 0xB1, U 0xAA, U 0x0A, U 0x5A, 
@@ -6510,8 +6529,8 @@ static unsigned char t3fw[30772] = {
 	U 0x9F, U 0x87, U 0x5B, U 0xFF, 
 	U 0x45, U 0x5B, U 0xFF, U 0x16, 
 	U 0x23, U 0x46, U 0x3B, U 0xC1, 
-	U 0xB0, U 0x1D, U 0xD9, U 0x22, 
-	U 0x1C, U 0xD9, U 0x80, U 0x2A, 
+	U 0xB0, U 0x1D, U 0xD9, U 0x0F, 
+	U 0x1C, U 0xD9, U 0x6D, U 0x2A, 
 	U 0xD1, U 0x02, U 0x2C, U 0x46, 
 	U 0x3A, U 0x0B, U 0xAA, U 0x02, 
 	U 0x0A, U 0x0A, U 0x4F, U 0x2A, 
@@ -6519,8 +6538,8 @@ static unsigned char t3fw[30772] = {
 	U 0x91, U 0x5B, U 0xFE, U 0xBF, 
 	U 0x5B, U 0xFE, U 0x98, U 0xC0, 
 	U 0x50, U 0xC0, U 0xB0, U 0x16, 
-	U 0xD9, U 0x18, U 0x14, U 0xD9, 
-	U 0x20, U 0x17, U 0xD9, U 0x90, 
+	U 0xD9, U 0x05, U 0x14, U 0xD9, 
+	U 0x0D, U 0x17, U 0xD9, U 0x7D, 
 	U 0xC0, U 0xC0, U 0xC7, U 0x3E, 
 	U 0x93, U 0x12, U 0x2C, U 0x26, 
 	U 0x2D, U 0xC0, U 0x30, U 0x60, 
@@ -6530,7 +6549,7 @@ static unsigned char t3fw[30772] = {
 	U 0x14, U 0x65, U 0x9F, U 0xF4, 
 	U 0xC0, U 0x50, U 0x0A, U 0xA9, 
 	U 0x02, U 0x7F, U 0xA7, U 0xEF, 
-	U 0x18, U 0xD9, U 0x0C, U 0xDA, 
+	U 0x18, U 0xD8, U 0xF9, U 0xDA, 
 	U 0x50, U 0x08, U 0x58, U 0x0A, 
 	U 0x28, U 0x82, U 0x2C, U 0x2B, 
 	U 0x0A, U 0x00, U 0x0B, U 0x80, 
@@ -6544,7 +6563,7 @@ static unsigned char t3fw[30772] = {
 	U 0x25, U 0x16, U 0x03, U 0x2C, 
 	U 0x12, U 0x02, U 0x2A, U 0x62, 
 	U 0x82, U 0x7C, U 0xA8, U 0x63, 
-	U 0x18, U 0xD8, U 0xFE, U 0x01, 
+	U 0x18, U 0xD8, U 0xEB, U 0x01, 
 	U 0x11, U 0x02, U 0x08, U 0x58, 
 	U 0x0A, U 0x28, U 0x82, U 0x2C, 
 	U 0xDA, U 0x50, U 0x0B, U 0x80, 
@@ -6556,13 +6575,13 @@ static unsigned char t3fw[30772] = {
 	U 0x8B, U 0x14, U 0x04, U 0xBB, 
 	U 0x01, U 0x7B, U 0xA9, U 0x45, 
 	U 0xDD, U 0xA0, U 0x7A, U 0x7B, 
-	U 0x08, U 0x1D, U 0xD8, U 0xF4, 
+	U 0x08, U 0x1D, U 0xD8, U 0xE1, 
 	U 0x2D, U 0xD2, U 0x00, U 0x0D, 
 	U 0xAD, U 0x0C, U 0xDB, U 0x30, 
-	U 0x19, U 0xD8, U 0xEF, U 0x1A, 
-	U 0xD9, U 0x34, U 0x88, U 0x13, 
+	U 0x19, U 0xD8, U 0xDC, U 0x1A, 
+	U 0xD9, U 0x21, U 0x88, U 0x13, 
 	U 0x0A, U 0xDA, U 0x28, U 0xDC, 
-	U 0x80, U 0x1D, U 0xD9, U 0x72, 
+	U 0x80, U 0x1D, U 0xD9, U 0x5F, 
 	U 0x09, U 0x88, U 0x0A, U 0x28, 
 	U 0x82, U 0x3C, U 0x0D, U 0xAA, 
 	U 0x08, U 0x0B, U 0x80, U 0x00, 
@@ -6574,13 +6593,13 @@ static unsigned char t3fw[30772] = {
 	U 0x0A, U 0x09, U 0x19, U 0x63, 
 	U 0xFF, U 0x42, U 0xDA, U 0xB0, 
 	U 0x7B, U 0x7B, U 0x08, U 0x1A, 
-	U 0xD8, U 0xE3, U 0x2A, U 0xA2, 
+	U 0xD8, U 0xD0, U 0x2A, U 0xA2, 
 	U 0x00, U 0x0A, U 0xBA, U 0x0C, 
-	U 0x1B, U 0xD9, U 0x24, U 0x8C, 
+	U 0x1B, U 0xD9, U 0x11, U 0x8C, 
 	U 0x31, U 0x0B, U 0xAB, U 0x28, 
 	U 0x0C, U 0x8A, U 0x14, U 0x1C, 
-	U 0xD9, U 0x62, U 0xAC, U 0xBB, 
-	U 0x1C, U 0xD9, U 0x62, U 0x04, 
+	U 0xD9, U 0x4F, U 0xAC, U 0xBB, 
+	U 0x1C, U 0xD9, U 0x4F, U 0x04, 
 	U 0xAA, U 0x01, U 0x2B, U 0xC6, 
 	U 0x81, U 0x63, U 0xFF, U 0x8F, 
 	U 0x64, U 0x5F, U 0x60, U 0xC0, 
@@ -6590,15 +6609,15 @@ static unsigned char t3fw[30772] = {
 	U 0x6C, U 0x10, U 0x04, U 0x27, 
 	U 0x22, U 0x1E, U 0xC0, U 0x80, 
 	U 0x08, U 0xE4, U 0x31, U 0x1B, 
-	U 0xD8, U 0xD1, U 0x00, U 0x02, 
+	U 0xD8, U 0xBE, U 0x00, U 0x02, 
 	U 0x00, U 0x2A, U 0xB2, U 0x82, 
-	U 0x19, U 0xD8, U 0xD1, U 0x00, 
+	U 0x19, U 0xD8, U 0xBE, U 0x00, 
 	U 0x31, U 0x04, U 0xC0, U 0x61, 
 	U 0x00, U 0x66, U 0x1A, U 0x29, 
 	U 0x91, U 0x02, U 0x0A, U 0x6A, 
 	U 0x02, U 0x2A, U 0xB6, U 0x82, 
 	U 0x09, U 0xE4, U 0x31, U 0x15, 
-	U 0xD9, U 0x2C, U 0x0C, U 0x38, 
+	U 0xD9, U 0x19, U 0x0C, U 0x38, 
 	U 0x11, U 0xA8, U 0x53, U 0x28, 
 	U 0x32, U 0x82, U 0x24, U 0x32, 
 	U 0x84, U 0x2A, U 0x8C, U 0xFC, 
@@ -6614,8 +6633,8 @@ static unsigned char t3fw[30772] = {
 	U 0xC0, U 0x2B, U 0x25, U 0x02, 
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0xC0, 
-	U 0xE7, U 0x1D, U 0xD8, U 0xB4, 
-	U 0x1C, U 0xD8, U 0xB6, U 0x0D, 
+	U 0xE7, U 0x1D, U 0xD8, U 0xA1, 
+	U 0x1C, U 0xD8, U 0xA3, U 0x0D, 
 	U 0x49, U 0x11, U 0xD7, U 0x20, 
 	U 0x8B, U 0x22, U 0x8A, U 0x20, 
 	U 0x0B, U 0x4B, U 0x0B, U 0xD2, 
@@ -6623,7 +6642,7 @@ static unsigned char t3fw[30772] = {
 	U 0x9B, U 0x72, U 0x28, U 0x8C, 
 	U 0xF4, U 0xC8, U 0x34, U 0x6F, 
 	U 0x8E, U 0x02, U 0x60, U 0x00, 
-	U 0xA3, U 0x1F, U 0xD8, U 0xAC, 
+	U 0xA3, U 0x1F, U 0xD8, U 0x99, 
 	U 0xA2, U 0x98, U 0xAF, U 0x7B, 
 	U 0x78, U 0xB3, U 0x34, U 0xC9, 
 	U 0x3D, U 0xC0, U 0x81, U 0xC0, 
@@ -6712,7 +6731,7 @@ static unsigned char t3fw[30772] = {
 	U 0x69, U 0x51, U 0x1D, U 0xC0, 
 	U 0xE0, U 0x82, U 0x24, U 0x2A, 
 	U 0x60, U 0x0F, U 0x18, U 0xD8, 
-	U 0xE0, U 0x2A, U 0x24, U 0x03, 
+	U 0xCD, U 0x2A, U 0x24, U 0x03, 
 	U 0x29, U 0x60, U 0x0E, U 0x8F, 
 	U 0x20, U 0x29, U 0x24, U 0x07, 
 	U 0x08, U 0xFF, U 0x02, U 0x9F, 
@@ -6720,12 +6739,12 @@ static unsigned char t3fw[30772] = {
 	U 0x0F, U 0xC0, U 0x20, U 0xD1, 
 	U 0x0F, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x94, 
-	U 0x23, U 0x19, U 0xD8, U 0xD8, 
+	U 0x23, U 0x19, U 0xD8, U 0xC5, 
 	U 0xC0, U 0xB3, U 0x08, U 0x3A, 
 	U 0x11, U 0x0B, U 0xAA, U 0x02, 
 	U 0x99, U 0x20, U 0x19, U 0xD8, 
-	U 0x4B, U 0x9A, U 0x21, U 0x16, 
-	U 0xD8, U 0x49, U 0xC0, U 0x50, 
+	U 0x38, U 0x9A, U 0x21, U 0x16, 
+	U 0xD8, U 0x36, U 0xC0, U 0x50, 
 	U 0x28, U 0x92, U 0x9D, U 0x25, 
 	U 0x64, U 0xA2, U 0x28, U 0x8C, 
 	U 0x18, U 0x28, U 0x96, U 0x9D, 
@@ -6737,7 +6756,7 @@ static unsigned char t3fw[30772] = {
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x06, U 0x0D, 
 	U 0x3C, U 0x11, U 0x1A, U 0xD8, 
-	U 0x3B, U 0xD8, U 0x20, U 0x03, 
+	U 0x28, U 0xD8, U 0x20, U 0x03, 
 	U 0x5B, U 0x0C, U 0x86, U 0x22, 
 	U 0x0D, U 0x55, U 0x11, U 0x82, 
 	U 0x21, U 0xAA, U 0x89, U 0x02, 
@@ -6745,8 +6764,8 @@ static unsigned char t3fw[30772] = {
 	U 0x05, U 0x63, U 0x0C, U 0x93, 
 	U 0x82, U 0x0C, U 0x55, U 0x0C, 
 	U 0x79, U 0x2B, U 0x54, U 0xCB, 
-	U 0x53, U 0x1C, U 0xD8, U 0x33, 
-	U 0x1D, U 0xD8, U 0x31, U 0xC0, 
+	U 0x53, U 0x1C, U 0xD8, U 0x20, 
+	U 0x1D, U 0xD8, U 0x1E, U 0xC0, 
 	U 0xF7, U 0xA2, U 0x56, U 0xC0, 
 	U 0x31, U 0xC0, U 0xA0, U 0x04, 
 	U 0x3A, U 0x38, U 0x0A, U 0x0A, 
@@ -6768,7 +6787,7 @@ static unsigned char t3fw[30772] = {
 	U 0x92, U 0x82, U 0xD1, U 0x0F, 
 	U 0x22, U 0x2D, U 0xF8, U 0x92, 
 	U 0x81, U 0x63, U 0xFF, U 0xA2, 
-	U 0x19, U 0xD8, U 0x1C, U 0x02, 
+	U 0x19, U 0xD8, U 0x09, U 0x02, 
 	U 0x86, U 0x0C, U 0xA9, U 0x66, 
 	U 0x96, U 0x11, U 0xD9, U 0x40, 
 	U 0x06, U 0x36, U 0x12, U 0x96, 
@@ -6798,7 +6817,7 @@ static unsigned char t3fw[30772] = {
 	U 0x38, U 0x77, U 0xF0, U 0xCC, 
 	U 0x63, U 0xFF, U 0xC6, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x14, 
-	U 0xD8, U 0x0D, U 0xC1, U 0x52, 
+	U 0xD7, U 0xFA, U 0xC1, U 0x52, 
 	U 0xA4, U 0x24, U 0xCA, U 0x31, 
 	U 0x28, U 0x22, U 0x1D, U 0x73, 
 	U 0x81, U 0x1C, U 0x29, U 0x21, 
@@ -6829,7 +6848,7 @@ static unsigned char t3fw[30772] = {
 	U 0x0E, U 0xC8, U 0xAB, U 0xDA, 
 	U 0x20, U 0xDB, U 0x30, U 0x2C, 
 	U 0x0A, U 0x00, U 0x03, U 0x3D, 
-	U 0x02, U 0x5B, U 0xF8, U 0x0E, 
+	U 0x02, U 0x5B, U 0xF7, U 0xFB, 
 	U 0x64, U 0x50, U 0x74, U 0x2D, 
 	U 0x21, U 0x02, U 0x0D, U 0x0D, 
 	U 0x4C, U 0xC9, U 0xD3, U 0xC0, 
@@ -6838,8 +6857,8 @@ static unsigned char t3fw[30772] = {
 	U 0x64, U 0xE0, U 0x82, U 0x2F, 
 	U 0x21, U 0x02, U 0x0F, U 0x0F, 
 	U 0x4C, U 0x65, U 0xF0, U 0x91, 
-	U 0x1A, U 0xD7, U 0xD9, U 0x1C, 
-	U 0xD7, U 0xD7, U 0x29, U 0xA2, 
+	U 0x1A, U 0xD7, U 0xC6, U 0x1C, 
+	U 0xD7, U 0xC4, U 0x29, U 0xA2, 
 	U 0x9E, U 0xC0, U 0x8A, U 0x79, 
 	U 0x8B, U 0x5D, U 0x2B, U 0xC2, 
 	U 0x26, U 0x68, U 0xB0, U 0x04, 
@@ -6847,11 +6866,11 @@ static unsigned char t3fw[30772] = {
 	U 0x52, U 0x29, U 0xA2, U 0x9D, 
 	U 0xC0, U 0xF3, U 0x64, U 0x90, 
 	U 0x4A, U 0x97, U 0x90, U 0x1D, 
-	U 0xD7, U 0xE9, U 0x2E, U 0x21, 
+	U 0xD7, U 0xD6, U 0x2E, U 0x21, 
 	U 0x04, U 0x9D, U 0x96, U 0x08, 
 	U 0xEE, U 0x11, U 0x0F, U 0xEE, 
 	U 0x02, U 0x9E, U 0x97, U 0x9E, 
-	U 0x91, U 0x18, U 0xD7, U 0xE5, 
+	U 0x91, U 0x18, U 0xD7, U 0xD2, 
 	U 0xC0, U 0xE5, U 0x27, U 0xC4, 
 	U 0xA2, U 0x2E, U 0x24, U 0x06, 
 	U 0x2B, U 0xA2, U 0x9D, U 0x2F, 
@@ -6892,7 +6911,7 @@ static unsigned char t3fw[30772] = {
 	U 0x25, U 0x25, U 0xCC, U 0x52, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0xDB, U 0x40, U 0x2A, U 0x2C, 
-	U 0x74, U 0x5B, U 0xF9, U 0x37, 
+	U 0x74, U 0x5B, U 0xF9, U 0x36, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x04, U 0xD8, 
 	U 0x20, U 0xD7, U 0x30, U 0x82, 
@@ -6900,7 +6919,7 @@ static unsigned char t3fw[30772] = {
 	U 0x05, U 0x22, U 0x0C, U 0x92, 
 	U 0x82, U 0x64, U 0x20, U 0x74, 
 	U 0x07, U 0x42, U 0x0B, U 0x13, 
-	U 0xD7, U 0x98, U 0xD4, U 0x20, 
+	U 0xD7, U 0x85, U 0xD4, U 0x20, 
 	U 0xA3, U 0x83, U 0x73, U 0x23, 
 	U 0x02, U 0x24, U 0x2D, U 0xF8, 
 	U 0x85, U 0x80, U 0x74, U 0x51, 
@@ -6914,12 +6933,12 @@ static unsigned char t3fw[30772] = {
 	U 0x74, U 0x61, U 0x02, U 0x63, 
 	U 0xFF, U 0xE2, U 0xCA, U 0x98, 
 	U 0xC0, U 0x97, U 0xC0, U 0x41, 
-	U 0x1B, U 0xD8, U 0x18, U 0xC0, 
+	U 0x1B, U 0xD8, U 0x05, U 0xC0, 
 	U 0xA0, U 0x0B, U 0x8B, U 0x0C, 
 	U 0x0B, U 0x4A, U 0x38, U 0x0A, 
 	U 0x0A, U 0x42, U 0xC9, U 0xAA, 
-	U 0x1D, U 0xD7, U 0x85, U 0x1C, 
-	U 0xD7, U 0x86, U 0x2C, U 0xD6, 
+	U 0x1D, U 0xD7, U 0x72, U 0x1C, 
+	U 0xD7, U 0x73, U 0x2C, U 0xD6, 
 	U 0x7E, U 0xC1, U 0x40, U 0xD3, 
 	U 0x0F, U 0x6D, U 0x4A, U 0x05, 
 	U 0x00, U 0x20, U 0x88, U 0x00, 
@@ -6933,8 +6952,8 @@ static unsigned char t3fw[30772] = {
 	U 0x20, U 0x92, U 0x82, U 0xD1, 
 	U 0x0F, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x06, U 0xC0, 
-	U 0xD7, U 0x1C, U 0xD7, U 0x75, 
-	U 0x1B, U 0xD7, U 0x77, U 0x0D, 
+	U 0xD7, U 0x1C, U 0xD7, U 0x62, 
+	U 0x1B, U 0xD7, U 0x64, U 0x0D, 
 	U 0x49, U 0x11, U 0xD7, U 0x20, 
 	U 0x2E, U 0x22, U 0x1F, U 0x28, 
 	U 0x22, U 0x1D, U 0x0E, U 0x4E, 
@@ -6944,7 +6963,7 @@ static unsigned char t3fw[30772] = {
 	U 0xC8, U 0x34, U 0x6F, U 0xAE, 
 	U 0x02, U 0x60, U 0x00, U 0xCB, 
 	U 0x2F, U 0x0A, U 0x80, U 0x1A, 
-	U 0xD7, U 0x7B, U 0xA2, U 0x9E, 
+	U 0xD7, U 0x68, U 0xA2, U 0x9E, 
 	U 0xAA, U 0x7A, U 0x7E, U 0xA3, 
 	U 0x3F, U 0xC9, U 0x3F, U 0xC0, 
 	U 0xE1, U 0xC0, U 0x50, U 0x02, 
@@ -6962,7 +6981,7 @@ static unsigned char t3fw[30772] = {
 	U 0xD1, U 0x0F, U 0xC0, U 0x50, 
 	U 0x03, U 0xE5, U 0x38, U 0x75, 
 	U 0xD0, U 0xD3, U 0x63, U 0xFF, 
-	U 0xCD, U 0x15, U 0xD7, U 0x68, 
+	U 0xCD, U 0x15, U 0xD7, U 0x55, 
 	U 0x02, U 0x7E, U 0x0C, U 0xA5, 
 	U 0xEE, U 0x64, U 0x30, U 0x51, 
 	U 0xC0, U 0xA1, U 0x25, U 0x0A, 
@@ -7018,7 +7037,7 @@ static unsigned char t3fw[30772] = {
 	U 0x63, U 0xFF, U 0xB9, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x2A, 
 	U 0x20, U 0x15, U 0x29, U 0x20, 
-	U 0x16, U 0x14, U 0xD7, U 0x26, 
+	U 0x16, U 0x14, U 0xD7, U 0x13, 
 	U 0x0A, U 0x99, U 0x0C, U 0xCB, 
 	U 0x9D, U 0x2E, U 0x20, U 0x0B, 
 	U 0x04, U 0xED, U 0x09, U 0x2B, 
@@ -7081,15 +7100,15 @@ static unsigned char t3fw[30772] = {
 	U 0x6C, U 0x10, U 0x04, U 0x27, 
 	U 0x22, U 0x1E, U 0xC0, U 0x80, 
 	U 0x08, U 0xE4, U 0x31, U 0x1D, 
-	U 0xD6, U 0xE6, U 0x00, U 0x02, 
+	U 0xD6, U 0xD3, U 0x00, U 0x02, 
 	U 0x00, U 0x2C, U 0xD2, U 0x82, 
-	U 0x1B, U 0xD6, U 0xE6, U 0x00, 
+	U 0x1B, U 0xD6, U 0xD3, U 0x00, 
 	U 0x31, U 0x04, U 0xC0, U 0x61, 
 	U 0x00, U 0x66, U 0x1A, U 0x2B, 
 	U 0xB1, U 0x02, U 0x0C, U 0x6C, 
 	U 0x02, U 0x2C, U 0xD6, U 0x82, 
 	U 0x0B, U 0xE4, U 0x31, U 0x19, 
-	U 0xD7, U 0x6A, U 0x0C, U 0x3A, 
+	U 0xD7, U 0x57, U 0x0C, U 0x3A, 
 	U 0x11, U 0xAA, U 0x93, U 0x28, 
 	U 0x32, U 0x82, U 0x97, U 0x80, 
 	U 0x25, U 0x32, U 0x82, U 0x24, 
@@ -7104,11 +7123,11 @@ static unsigned char t3fw[30772] = {
 	U 0x82, U 0x2A, U 0x25, U 0x02, 
 	U 0xD1, U 0x0F, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x18, 
-	U 0xD6, U 0xCF, U 0x0C, U 0x27, 
+	U 0xD6, U 0xBC, U 0x0C, U 0x27, 
 	U 0x11, U 0x08, U 0x77, U 0x08, 
 	U 0x26, U 0x72, U 0x86, U 0x25, 
 	U 0x3C, U 0x04, U 0x76, U 0x5B, 
-	U 0x13, U 0x15, U 0xD6, U 0xCB, 
+	U 0x13, U 0x15, U 0xD6, U 0xB8, 
 	U 0x05, U 0x22, U 0x0A, U 0x22, 
 	U 0x22, U 0xA3, U 0x68, U 0x20, 
 	U 0x02, U 0x74, U 0x29, U 0x04, 
@@ -7116,18 +7135,18 @@ static unsigned char t3fw[30772] = {
 	U 0x0F, U 0xC0, U 0x20, U 0xD1, 
 	U 0x0F, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x19, 
-	U 0xD6, U 0xCE, U 0x27, U 0x22, 
+	U 0xD6, U 0xBB, U 0x27, U 0x22, 
 	U 0x1E, U 0xC0, U 0x80, U 0x09, 
 	U 0x77, U 0x02, U 0x08, U 0xE4, 
-	U 0x31, U 0x1D, U 0xD6, U 0xBF, 
+	U 0x31, U 0x1D, U 0xD6, U 0xAC, 
 	U 0x00, U 0x02, U 0x00, U 0x2C, 
 	U 0xD2, U 0x82, U 0x1B, U 0xD6, 
-	U 0xBF, U 0x00, U 0x31, U 0x04, 
+	U 0xAC, U 0x00, U 0x31, U 0x04, 
 	U 0xC0, U 0x61, U 0x00, U 0x66, 
 	U 0x1A, U 0x2B, U 0xB1, U 0x02, 
 	U 0x0C, U 0x6C, U 0x02, U 0x2C, 
 	U 0xD6, U 0x82, U 0x0B, U 0xE4, 
-	U 0x31, U 0x19, U 0xD7, U 0x43, 
+	U 0x31, U 0x19, U 0xD7, U 0x30, 
 	U 0x0C, U 0x3A, U 0x11, U 0xAA, 
 	U 0x93, U 0x28, U 0x32, U 0x82, 
 	U 0x97, U 0x80, U 0x25, U 0x32, 
@@ -7143,12 +7162,12 @@ static unsigned char t3fw[30772] = {
 	U 0x2B, U 0x25, U 0x02, U 0xD1, 
 	U 0x0F, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x1B, 
-	U 0xD6, U 0xA8, U 0x0C, U 0x2A, 
+	U 0xD6, U 0x95, U 0x0C, U 0x2A, 
 	U 0x11, U 0xAB, U 0xAA, U 0x29, 
 	U 0xA2, U 0x86, U 0xB4, U 0x38, 
 	U 0x79, U 0x8B, U 0x22, U 0x1B, 
-	U 0xD6, U 0xA5, U 0x19, U 0xD6, 
-	U 0xCB, U 0x0B, U 0x2B, U 0x0A, 
+	U 0xD6, U 0x92, U 0x19, U 0xD6, 
+	U 0xB8, U 0x0B, U 0x2B, U 0x0A, 
 	U 0x2B, U 0xB2, U 0xA3, U 0x09, 
 	U 0x29, U 0x08, U 0x68, U 0xB0, 
 	U 0x02, U 0x74, U 0xB9, U 0x0D, 
@@ -7159,11 +7178,11 @@ static unsigned char t3fw[30772] = {
 	U 0xD1, U 0x0F, U 0xC8, U 0x92, 
 	U 0xC0, U 0x20, U 0xD1, U 0x0F, 
 	U 0xDA, U 0x20, U 0x5B, U 0xEE, 
-	U 0xA7, U 0xC0, U 0x20, U 0xD1, 
+	U 0x94, U 0xC0, U 0x20, U 0xD1, 
 	U 0x0F, U 0x00, U 0x00, U 0x00, 
 	U 0x6C, U 0x10, U 0x04, U 0x14, 
-	U 0xD6, U 0x95, U 0x28, U 0x42, 
-	U 0x9E, U 0x19, U 0xD6, U 0x92, 
+	U 0xD6, U 0x82, U 0x28, U 0x42, 
+	U 0x9E, U 0x19, U 0xD6, U 0x7F, 
 	U 0x6F, U 0x88, U 0x02, U 0x60, 
 	U 0x00, U 0xBA, U 0x29, U 0x92, 
 	U 0x26, U 0x68, U 0x90, U 0x07, 
@@ -7172,7 +7191,7 @@ static unsigned char t3fw[30772] = {
 	U 0x2A, U 0x42, U 0x9D, U 0xC0, 
 	U 0xDC, U 0x64, U 0xA0, U 0xA4, 
 	U 0x2B, U 0x20, U 0x0C, U 0x19, 
-	U 0xD6, U 0x8C, U 0x0C, U 0xBC, 
+	U 0xD6, U 0x79, U 0x0C, U 0xBC, 
 	U 0x11, U 0xA4, U 0xCC, U 0x2E, 
 	U 0xC2, U 0x86, U 0x09, U 0xB9, 
 	U 0x0A, U 0x7E, U 0xD3, U 0x02, 
@@ -7187,16 +7206,16 @@ static unsigned char t3fw[30772] = {
 	U 0x20, U 0x66, U 0xB8, U 0xCC, 
 	U 0x0C, U 0x0C, U 0x47, U 0x2C, 
 	U 0x24, U 0x66, U 0x65, U 0xC0, 
-	U 0x7B, U 0x1C, U 0xD7, U 0x08, 
-	U 0x18, U 0xD6, U 0x92, U 0x1A, 
-	U 0xD6, U 0x89, U 0x19, U 0xD6, 
-	U 0x99, U 0x1D, U 0xD6, U 0x8E, 
+	U 0x7B, U 0x1C, U 0xD6, U 0xF5, 
+	U 0x18, U 0xD6, U 0x7F, U 0x1A, 
+	U 0xD6, U 0x76, U 0x19, U 0xD6, 
+	U 0x86, U 0x1D, U 0xD6, U 0x7B, 
 	U 0xC0, U 0xE4, U 0x9E, U 0x51, 
 	U 0x9D, U 0x50, U 0x8F, U 0x20, 
 	U 0x93, U 0x57, U 0x93, U 0x55, 
 	U 0x99, U 0x53, U 0x9A, U 0x56, 
 	U 0x9A, U 0x54, U 0x08, U 0xFF, 
-	U 0x02, U 0x1A, U 0xD6, U 0xA9, 
+	U 0x02, U 0x1A, U 0xD6, U 0x96, 
 	U 0x9F, U 0x52, U 0x88, U 0x26, 
 	U 0x9F, U 0x5A, U 0x9E, U 0x59, 
 	U 0x9D, U 0x58, U 0x93, U 0x5E, 
@@ -7204,7 +7223,7 @@ static unsigned char t3fw[30772] = {
 	U 0x9A, U 0x5B, U 0x08, U 0x08, 
 	U 0x48, U 0x05, U 0x88, U 0x11, 
 	U 0x98, U 0x5F, U 0xC0, U 0xD8, 
-	U 0x1F, U 0xD6, U 0x73, U 0x0C, 
+	U 0x1F, U 0xD6, U 0x60, U 0x0C, 
 	U 0xB9, U 0x11, U 0xA4, U 0x99, 
 	U 0x28, U 0x92, U 0x85, U 0xAF, 
 	U 0xBF, U 0x23, U 0xF4, U 0xCF, 
@@ -7235,17 +7254,17 @@ static unsigned char t3fw[30772] = {
 	U 0x00, U 0x5B, U 0xFE, U 0x5E, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0x2E, U 0x20, U 0x0C, U 0x18, 
-	U 0xD6, U 0x4C, U 0x0C, U 0xEF, 
+	U 0xD6, U 0x39, U 0x0C, U 0xEF, 
 	U 0x11, U 0xA8, U 0xFF, U 0x29, 
 	U 0xF2, U 0x86, U 0xC0, U 0x88, 
 	U 0x79, U 0x8B, U 0x79, U 0x1A, 
-	U 0xD6, U 0x49, U 0x0A, U 0xEA, 
+	U 0xD6, U 0x36, U 0x0A, U 0xEA, 
 	U 0x0A, U 0x2A, U 0xA2, U 0xA3, 
 	U 0x68, U 0xA0, U 0x04, U 0x8B, 
 	U 0x20, U 0x7A, U 0xB9, U 0x68, 
 	U 0x23, U 0xF2, U 0x85, U 0x64, 
 	U 0x30, U 0x62, U 0x1B, U 0xD6, 
-	U 0x53, U 0x29, U 0x0A, U 0x80, 
+	U 0x40, U 0x29, U 0x0A, U 0x80, 
 	U 0x2C, U 0x20, U 0x68, U 0x28, 
 	U 0x20, U 0x67, U 0x2D, U 0x21, 
 	U 0x04, U 0x0B, U 0x88, U 0x11, 
@@ -7253,7 +7272,7 @@ static unsigned char t3fw[30772] = {
 	U 0xDD, U 0x02, U 0x0D, U 0xCC, 
 	U 0x02, U 0xC0, U 0x84, U 0x2D, 
 	U 0x4A, U 0x10, U 0x0D, U 0xCC, 
-	U 0x02, U 0x1D, U 0xD6, U 0x4B, 
+	U 0x02, U 0x1D, U 0xD6, U 0x38, 
 	U 0x98, U 0x31, U 0x9D, U 0x30, 
 	U 0x8A, U 0x2B, U 0x99, U 0x37, 
 	U 0x9C, U 0x34, U 0x0B, U 0xAA, 
@@ -7265,7 +7284,7 @@ static unsigned char t3fw[30772] = {
 	U 0x8C, U 0x20, U 0x28, U 0xF6, 
 	U 0x85, U 0x2C, U 0x25, U 0x04, 
 	U 0x2D, U 0x24, U 0x06, U 0x1F, 
-	U 0xD6, U 0x36, U 0xDD, U 0x40, 
+	U 0xD6, U 0x23, U 0xDD, U 0x40, 
 	U 0xAF, U 0xEE, U 0x2C, U 0xE4, 
 	U 0xCF, U 0x5B, U 0xFD, U 0xEB, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
@@ -7289,14 +7308,14 @@ static unsigned char t3fw[30772] = {
 	U 0xC0, U 0x91, U 0x0E, U 0xDD, 
 	U 0x0C, U 0x65, U 0xD3, U 0x90, 
 	U 0x88, U 0x38, U 0x1E, U 0xD6, 
-	U 0x16, U 0x64, U 0x83, U 0x6B, 
+	U 0x03, U 0x64, U 0x83, U 0x6B, 
 	U 0x8C, U 0x37, U 0xC0, U 0xB8, 
 	U 0xC0, U 0x96, U 0x0C, U 0xB9, 
 	U 0x39, U 0x99, U 0x14, U 0xB4, 
 	U 0x9A, U 0x9A, U 0x12, U 0x0D, 
 	U 0x99, U 0x11, U 0x99, U 0x13, 
-	U 0x8F, U 0x67, U 0x18, U 0xD6, 
-	U 0x11, U 0xC9, U 0xFB, U 0x28, 
+	U 0x8F, U 0x67, U 0x18, U 0xD5, 
+	U 0xFE, U 0xC9, U 0xFB, U 0x28, 
 	U 0x80, U 0x21, U 0x7F, U 0x83, 
 	U 0x16, U 0x8B, U 0x14, U 0x2C, 
 	U 0x22, U 0x00, U 0x2A, U 0x20, 
@@ -7307,7 +7326,7 @@ static unsigned char t3fw[30772] = {
 	U 0x2B, U 0x20, U 0x0C, U 0x89, 
 	U 0x12, U 0x0C, U 0xBA, U 0x11, 
 	U 0xAE, U 0xAA, U 0x2C, U 0xA2, 
-	U 0x86, U 0x1D, U 0xD6, U 0x04, 
+	U 0x86, U 0x1D, U 0xD5, U 0xF1, 
 	U 0x7C, U 0x9B, U 0x3E, U 0x0D, 
 	U 0xBD, U 0x0A, U 0x2D, U 0xD2, 
 	U 0xA3, U 0x68, U 0xD0, U 0x04, 
@@ -7375,15 +7394,15 @@ static unsigned char t3fw[30772] = {
 	U 0x99, U 0x02, U 0x09, U 0x33, 
 	U 0x02, U 0x8A, U 0x2B, U 0x29, 
 	U 0x21, U 0x04, U 0x0B, U 0xAA, 
-	U 0x02, U 0x1B, U 0xD6, U 0x4D, 
+	U 0x02, U 0x1B, U 0xD6, U 0x3A, 
 	U 0x08, U 0x99, U 0x11, U 0x09, 
 	U 0x55, U 0x02, U 0x08, U 0x55, 
 	U 0x02, U 0x0B, U 0xAA, U 0x02, 
 	U 0x9A, U 0x40, U 0x89, U 0x20, 
 	U 0x88, U 0x14, U 0x08, U 0x99, 
 	U 0x11, U 0x09, U 0x88, U 0x02, 
-	U 0x19, U 0xD5, U 0xCD, U 0x1D, 
-	U 0xD6, U 0x47, U 0x09, U 0x88, 
+	U 0x19, U 0xD5, U 0xBA, U 0x1D, 
+	U 0xD6, U 0x34, U 0x09, U 0x88, 
 	U 0x02, U 0x98, U 0x41, U 0x8B, 
 	U 0x2A, U 0x93, U 0x46, U 0x95, 
 	U 0x47, U 0x83, U 0x15, U 0x0D, 
@@ -7400,11 +7419,11 @@ static unsigned char t3fw[30772] = {
 	U 0x0E, U 0x48, U 0x2E, U 0x25, 
 	U 0x25, U 0x9B, U 0x67, U 0x2B, 
 	U 0x20, U 0x0C, U 0x87, U 0x13, 
-	U 0x1E, U 0xD5, U 0xA7, U 0x0C, 
+	U 0x1E, U 0xD5, U 0x94, U 0x0C, 
 	U 0xB9, U 0x11, U 0xAE, U 0x99, 
 	U 0x28, U 0x92, U 0x85, U 0xA7, 
 	U 0x88, U 0x28, U 0x96, U 0x85, 
-	U 0x17, U 0xD5, U 0xAB, U 0xC0, 
+	U 0x17, U 0xD5, U 0x98, U 0xC0, 
 	U 0x90, U 0xA7, U 0xBB, U 0x29, 
 	U 0xB4, U 0xCF, U 0x87, U 0x18, 
 	U 0x63, U 0xFE, U 0x3C, U 0x00, 
@@ -7427,7 +7446,7 @@ static unsigned char t3fw[30772] = {
 	U 0x1F, U 0x0A, U 0xBB, U 0x11, 
 	U 0x07, U 0x88, U 0x10, U 0x08, 
 	U 0xFF, U 0x02, U 0x0B, U 0xAA, 
-	U 0x02, U 0x18, U 0xD5, U 0x9F, 
+	U 0x02, U 0x18, U 0xD5, U 0x8C, 
 	U 0x09, U 0x29, U 0x14, U 0x03, 
 	U 0xAA, U 0x02, U 0x2B, U 0x21, 
 	U 0x25, U 0x83, U 0x20, U 0x0B, 
@@ -7445,16 +7464,16 @@ static unsigned char t3fw[30772] = {
 	U 0x4E, U 0x98, U 0x4F, U 0xC0, 
 	U 0x70, U 0x77, U 0xC7, U 0x01, 
 	U 0xC0, U 0x71, U 0x9A, U 0x47, 
-	U 0x18, U 0xD6, U 0x09, U 0x0B, 
+	U 0x18, U 0xD5, U 0xF6, U 0x0B, 
 	U 0x7C, U 0x10, U 0x0C, U 0xEC, 
 	U 0x02, U 0x08, U 0xF8, U 0x02, 
-	U 0x98, U 0x44, U 0x18, U 0xD6, 
-	U 0x06, U 0x0C, U 0xBC, U 0x02, 
+	U 0x98, U 0x44, U 0x18, U 0xD5, 
+	U 0xF3, U 0x0C, U 0xBC, U 0x02, 
 	U 0x08, U 0xCC, U 0x02, U 0x9C, 
 	U 0x40, U 0x2A, U 0x20, U 0x0C, 
 	U 0x29, U 0x5C, U 0xFE, U 0xC0, 
-	U 0x80, U 0x1F, U 0xD5, U 0x71, 
-	U 0x1C, U 0xD5, U 0x79, U 0x0C, 
+	U 0x80, U 0x1F, U 0xD5, U 0x5E, 
+	U 0x1C, U 0xD5, U 0x66, U 0x0C, 
 	U 0xAE, U 0x11, U 0x2B, U 0x21, 
 	U 0x24, U 0xAC, U 0xAA, U 0xAF, 
 	U 0xEE, U 0xB0, U 0xBB, U 0x8F, 
@@ -7475,10 +7494,10 @@ static unsigned char t3fw[30772] = {
 	U 0xC0, U 0x70, U 0x93, U 0x41, 
 	U 0x9F, U 0x44, U 0x99, U 0x46, 
 	U 0x9A, U 0x47, U 0x77, U 0xC7, 
-	U 0x0A, U 0x1C, U 0xD5, U 0x5D, 
+	U 0x0A, U 0x1C, U 0xD5, U 0x4A, 
 	U 0x2C, U 0xC0, U 0x22, U 0xC0, 
 	U 0x81, U 0x0C, U 0x87, U 0x38, 
-	U 0x1C, U 0xD5, U 0xEA, U 0x0B, 
+	U 0x1C, U 0xD5, U 0xD7, U 0x0B, 
 	U 0x78, U 0x10, U 0x08, U 0xE8, 
 	U 0x02, U 0x08, U 0xB8, U 0x02, 
 	U 0x0C, U 0x88, U 0x02, U 0x98, 
@@ -7494,7 +7513,7 @@ static unsigned char t3fw[30772] = {
 	U 0x1D, U 0x2A, U 0x25, U 0x02, 
 	U 0x7B, U 0x99, U 0x01, U 0xC0, 
 	U 0xB0, U 0x64, U 0xBF, U 0xE8, 
-	U 0x13, U 0xD5, U 0x48, U 0x2C, 
+	U 0x13, U 0xD5, U 0x35, U 0x2C, 
 	U 0xB0, U 0x07, U 0x28, U 0xB0, 
 	U 0x00, U 0xDA, U 0x20, U 0x03, 
 	U 0x88, U 0x0A, U 0x28, U 0x82, 
@@ -7529,7 +7548,7 @@ static unsigned char t3fw[30772] = {
 	U 0x01, U 0x5B, U 0xFD, U 0x87, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0x2A, U 0x2C, U 0x74, U 0x8B, 
-	U 0x11, U 0x5B, U 0xF6, U 0xBA, 
+	U 0x11, U 0x5B, U 0xF6, U 0xB9, 
 	U 0xD2, U 0xA0, U 0xD1, U 0x0F, 
 	U 0xDA, U 0x20, U 0x5B, U 0xFE, 
 	U 0x3A, U 0x63, U 0xFF, U 0x38, 
@@ -7542,63 +7561,63 @@ static unsigned char t3fw[30772] = {
 	U 0x1F, U 0xDA, U 0x20, U 0x2B, 
 	U 0x20, U 0x0C, U 0x5B, U 0xFE, 
 	U 0x56, U 0x63, U 0xFF, U 0x14, 
-	U 0x12, U 0xD5, U 0xAB, U 0x82, 
+	U 0x12, U 0xD5, U 0x98, U 0x82, 
 	U 0x20, U 0x02, U 0x82, U 0x57, 
 	U 0xC8, U 0x21, U 0x63, U 0xFF, 
-	U 0xFC, U 0x12, U 0xD5, U 0xA7, 
+	U 0xFC, U 0x12, U 0xD5, U 0x94, 
 	U 0x03, U 0xE8, U 0x30, U 0x04, 
 	U 0xEE, U 0x30, U 0x05, U 0xB1, 
 	U 0x30, U 0x93, U 0x20, U 0x94, 
 	U 0x21, U 0x95, U 0x22, U 0x63, 
 	U 0xFF, U 0xFC, U 0x00, U 0x00, 
-	U 0x10, U 0xD5, U 0xA3, U 0x91, 
+	U 0x10, U 0xD5, U 0x90, U 0x91, 
 	U 0x00, U 0x92, U 0x01, U 0x93, 
 	U 0x02, U 0x94, U 0x03, U 0x11, 
-	U 0xD5, U 0x7A, U 0x82, U 0x10, 
+	U 0xD5, U 0x67, U 0x82, U 0x10, 
 	U 0x01, U 0xEA, U 0x30, U 0xA2, 
 	U 0x11, U 0x01, U 0xF0, U 0x31, 
 	U 0xC0, U 0x40, U 0x04, U 0xE4, 
 	U 0x16, U 0x00, U 0x02, U 0x00, 
-	U 0x11, U 0xD5, U 0x9C, U 0x82, 
+	U 0x11, U 0xD5, U 0x89, U 0x82, 
 	U 0x10, U 0x23, U 0x4A, U 0x00, 
 	U 0x03, U 0x22, U 0x02, U 0x92, 
-	U 0x10, U 0x11, U 0xD5, U 0x65, 
+	U 0x10, U 0x11, U 0xD5, U 0x52, 
 	U 0xC0, U 0x21, U 0x92, U 0x10, 
 	U 0x04, U 0xE4, U 0x31, U 0x84, 
 	U 0x03, U 0x83, U 0x02, U 0x82, 
 	U 0x01, U 0x81, U 0x00, U 0x00, 
 	U 0xD2, U 0x30, U 0x01, U 0x23, 
 	U 0x00, U 0x00, U 0x00, U 0x00, 
-	U 0x10, U 0xD5, U 0x93, U 0x91, 
+	U 0x10, U 0xD5, U 0x80, U 0x91, 
 	U 0x00, U 0x92, U 0x01, U 0x93, 
 	U 0x02, U 0x94, U 0x03, U 0x11, 
-	U 0xD5, U 0x69, U 0x82, U 0x10, 
+	U 0xD5, U 0x56, U 0x82, U 0x10, 
 	U 0x01, U 0xEA, U 0x30, U 0xA2, 
 	U 0x11, U 0x01, U 0xF1, U 0x31, 
 	U 0xC0, U 0x40, U 0x04, U 0xE4, 
 	U 0x16, U 0x00, U 0x02, U 0x00, 
-	U 0x11, U 0xD5, U 0x8A, U 0x82, 
-	U 0x10, U 0x13, U 0xD5, U 0x0E, 
+	U 0x11, U 0xD5, U 0x77, U 0x82, 
+	U 0x10, U 0x13, U 0xD4, U 0xFB, 
 	U 0x03, U 0x22, U 0x02, U 0x92, 
 	U 0x10, U 0x04, U 0xE4, U 0x31, 
 	U 0x84, U 0x03, U 0x83, U 0x02, 
 	U 0x82, U 0x01, U 0x81, U 0x00, 
 	U 0x00, U 0xD3, U 0x30, U 0x01, 
 	U 0x33, U 0x00, U 0x00, U 0x00, 
-	U 0x10, U 0xD5, U 0x84, U 0x91, 
+	U 0x10, U 0xD5, U 0x71, U 0x91, 
 	U 0x00, U 0x81, U 0x01, U 0x65, 
 	U 0x10, U 0x49, U 0x81, U 0x02, 
 	U 0x65, U 0x10, U 0x44, U 0x81, 
 	U 0x03, U 0xCF, U 0x1F, U 0x92, 
 	U 0x01, U 0x93, U 0x02, U 0x94, 
-	U 0x03, U 0x11, U 0xD5, U 0x57, 
+	U 0x03, U 0x11, U 0xD5, U 0x44, 
 	U 0x82, U 0x10, U 0x01, U 0xEA, 
 	U 0x30, U 0xA2, U 0x11, U 0x01, 
 	U 0xF2, U 0x31, U 0xC0, U 0x40, 
 	U 0x04, U 0xE4, U 0x16, U 0x00, 
 	U 0x02, U 0x00, U 0x11, U 0xD5, 
-	U 0x76, U 0x82, U 0x10, U 0x13, 
-	U 0xD4, U 0xF6, U 0x03, U 0x22, 
+	U 0x63, U 0x82, U 0x10, U 0x13, 
+	U 0xD4, U 0xE3, U 0x03, U 0x22, 
 	U 0x02, U 0x92, U 0x10, U 0x04, 
 	U 0xE4, U 0x31, U 0x84, U 0x03, 
 	U 0x83, U 0x02, U 0x82, U 0x01, 
@@ -7606,7 +7625,7 @@ static unsigned char t3fw[30772] = {
 	U 0x91, U 0x02, U 0x91, U 0x01, 
 	U 0x81, U 0x00, U 0x00, U 0xD4, 
 	U 0x30, U 0x01, U 0x43, U 0x00, 
-	U 0x12, U 0xD5, U 0x25, U 0xC0, 
+	U 0x12, U 0xD5, U 0x12, U 0xC0, 
 	U 0x30, U 0x28, U 0x37, U 0x40, 
 	U 0x28, U 0x37, U 0x44, U 0x28, 
 	U 0x37, U 0x48, U 0x28, U 0x37, 
@@ -7614,19 +7633,19 @@ static unsigned char t3fw[30772] = {
 	U 0x72, U 0x33, U 0xED, U 0x03, 
 	U 0x02, U 0x00, U 0x63, U 0xFF, 
 	U 0xFC, U 0x00, U 0x00, U 0x00, 
-	U 0x10, U 0xD5, U 0x68, U 0x91, 
+	U 0x10, U 0xD5, U 0x55, U 0x91, 
 	U 0x00, U 0x92, U 0x01, U 0x93, 
 	U 0x02, U 0x94, U 0x03, U 0x11, 
-	U 0xD5, U 0x66, U 0x82, U 0x10, 
+	U 0xD5, U 0x53, U 0x82, U 0x10, 
 	U 0x92, U 0x10, U 0x11, U 0xD5, 
-	U 0x17, U 0x83, U 0x10, U 0x03, 
+	U 0x04, U 0x83, U 0x10, U 0x03, 
 	U 0x22, U 0x02, U 0x92, U 0x10, 
-	U 0x11, U 0xD5, U 0x63, U 0x12, 
-	U 0xD5, U 0x29, U 0x92, U 0x10, 
+	U 0x11, U 0xD5, U 0x50, U 0x12, 
+	U 0xD5, U 0x16, U 0x92, U 0x10, 
 	U 0xC0, U 0x40, U 0x04, U 0xE4, 
 	U 0x16, U 0x00, U 0x02, U 0x00, 
-	U 0x11, U 0xD5, U 0x5A, U 0x82, 
-	U 0x10, U 0x13, U 0xD5, U 0x10, 
+	U 0x11, U 0xD5, U 0x47, U 0x82, 
+	U 0x10, U 0x13, U 0xD4, U 0xFD, 
 	U 0x03, U 0x22, U 0x02, U 0x92, 
 	U 0x10, U 0x04, U 0xE4, U 0x31, 
 	U 0x84, U 0x03, U 0x83, U 0x02, 
@@ -7687,44 +7706,42 @@ static unsigned char t3fw[30772] = {
 	U 0x02, U 0x00, U 0xD1, U 0x0F, 
 	U 0x6C, U 0x10, U 0x02, U 0x02, 
 	U 0xE4, U 0x31, U 0xD1, U 0x0F, 
-	U 0x0A, U 0x00, U 0x00, U 0x00, 
-	U 0x43, U 0x68, U 0x65, U 0x6C, 
-	U 0x73, U 0x69, U 0x6F, U 0x20, 
-	U 0x46, U 0x57, U 0x20, U 0x44, 
-	U 0x45, U 0x42, U 0x55, U 0x47, 
-	U 0x3D, U 0x30, U 0x20, U 0x28, 
-	U 0x42, U 0x75, U 0x69, U 0x6C, 
-	U 0x74, U 0x20, U 0x54, U 0x68, 
-	U 0x75, U 0x20, U 0x4A, U 0x75, 
-	U 0x6C, U 0x20, U 0x33, U 0x30, 
-	U 0x20, U 0x31, U 0x38, U 0x3A, 
-	U 0x31, U 0x33, U 0x3A, U 0x34, 
-	U 0x34, U 0x20, U 0x50, U 0x44, 
-	U 0x54, U 0x20, U 0x32, U 0x30, 
-	U 0x30, U 0x39, U 0x20, U 0x6F, 
-	U 0x6E, U 0x20, U 0x63, U 0x6C, 
-	U 0x65, U 0x6F, U 0x70, U 0x61, 
-	U 0x74, U 0x72, U 0x61, U 0x2E, 
-	U 0x61, U 0x73, U 0x69, U 0x63, 
-	U 0x64, U 0x65, U 0x73, U 0x69, 
-	U 0x67, U 0x6E, U 0x65, U 0x72, 
-	U 0x73, U 0x2E, U 0x63, U 0x6F, 
-	U 0x6D, U 0x3A, U 0x2F, U 0x68, 
-	U 0x6F, U 0x6D, U 0x65, U 0x2F, 
-	U 0x66, U 0x65, U 0x6C, U 0x69, 
-	U 0x78, U 0x2F, U 0x77, U 0x2F, 
-	U 0x66, U 0x77, U 0x5F, U 0x37, 
-	U 0x2E, U 0x34, U 0x2D, U 0x73, 
-	U 0x74, U 0x65, U 0x76, U 0x65, 
+	U 0x0A, U 0x00, U 0x43, U 0x68, 
+	U 0x65, U 0x6C, U 0x73, U 0x69, 
+	U 0x6F, U 0x20, U 0x46, U 0x57, 
+	U 0x20, U 0x44, U 0x45, U 0x42, 
+	U 0x55, U 0x47, U 0x3D, U 0x30, 
+	U 0x20, U 0x28, U 0x42, U 0x75, 
+	U 0x69, U 0x6C, U 0x74, U 0x20, 
+	U 0x54, U 0x75, U 0x65, U 0x20, 
+	U 0x4E, U 0x6F, U 0x76, U 0x20, 
+	U 0x20, U 0x33, U 0x20, U 0x30, 
+	U 0x36, U 0x3A, U 0x30, U 0x35, 
+	U 0x3A, U 0x31, U 0x31, U 0x20, 
+	U 0x50, U 0x53, U 0x54, U 0x20, 
+	U 0x32, U 0x30, U 0x30, U 0x39, 
+	U 0x20, U 0x6F, U 0x6E, U 0x20, 
+	U 0x63, U 0x6C, U 0x65, U 0x6F, 
+	U 0x70, U 0x61, U 0x74, U 0x72, 
+	U 0x61, U 0x2E, U 0x61, U 0x73, 
+	U 0x69, U 0x63, U 0x64, U 0x65, 
+	U 0x73, U 0x69, U 0x67, U 0x6E, 
+	U 0x65, U 0x72, U 0x73, U 0x2E, 
+	U 0x63, U 0x6F, U 0x6D, U 0x3A, 
+	U 0x2F, U 0x68, U 0x6F, U 0x6D, 
+	U 0x65, U 0x2F, U 0x66, U 0x65, 
+	U 0x6C, U 0x69, U 0x78, U 0x2F, 
+	U 0x77, U 0x2F, U 0x66, U 0x77, 
+	U 0x5F, U 0x37, U 0x2E, U 0x37, 
 	U 0x29, U 0x2C, U 0x20, U 0x56, 
 	U 0x65, U 0x72, U 0x73, U 0x69, 
 	U 0x6F, U 0x6E, U 0x20, U 0x54, 
 	U 0x33, U 0x78, U 0x78, U 0x20, 
 	U 0x30, U 0x30, U 0x37, U 0x2E, 
-	U 0x30, U 0x37, U 0x2E, U 0x30, 
+	U 0x30, U 0x38, U 0x2E, U 0x30, 
 	U 0x30, U 0x20, U 0x2D, U 0x20, 
 	U 0x31, U 0x30, U 0x30, U 0x37, 
-	U 0x30, U 0x37, U 0x30, U 0x30, 
-	U 0x10, U 0x07, U 0x07, U 0x00, 
-	U 0xE5, U 0xF4, U 0xC5, U 0x92, 
+	U 0x30, U 0x38, U 0x30, U 0x30, 
+	U 0x10, U 0x07, U 0x08, U 0x00, 
+	U 0x4F, U 0x43, U 0x3A, U 0x10, 
 };
diff --git a/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cm.c b/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cm.c
index c582dbda39c..975b90854bd 100644
--- a/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cm.c
+++ b/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cm.c
@@ -203,7 +203,7 @@ static int set_tcpinfo(struct iwch_ep *ep)
 
 	ep->snd_seq = ti.tcpi_snd_nxt;
 	ep->rcv_seq = ti.tcpi_rcv_nxt;
-	ep->emss = ti.__tcpi_snd_mss - sizeof(struct tcpiphdr);
+	ep->emss = ti.tcpi_snd_mss - sizeof(struct tcpiphdr);
 	ep->hwtid = TOEPCB(ep->com.so)->tp_tid; /* XXX */
 	if (ti.tcpi_options & TCPI_OPT_TIMESTAMPS)
 		ep->emss -= 12;
diff --git a/sys/dev/cxgb/ulp/tom/cxgb_vm.c b/sys/dev/cxgb/ulp/tom/cxgb_vm.c
index e7a38939a4b..9f366e8b5d9 100644
--- a/sys/dev/cxgb/ulp/tom/cxgb_vm.c
+++ b/sys/dev/cxgb/ulp/tom/cxgb_vm.c
@@ -131,8 +131,7 @@ vm_fault_hold_user_pages(vm_map_t map, vm_offset_t addr, vm_page_t *mp,
 		 * taken away from us before it is held
 		 */
 		while (*pages == NULL) {
-			rv = vm_fault(map, va, prot,
-			    (prot & VM_PROT_WRITE) ? VM_FAULT_DIRTY : VM_FAULT_NORMAL);
+			rv = vm_fault(map, va, prot, VM_FAULT_NORMAL);
 			if (rv) 
 				goto error;
 			*pages = pmap_extract_and_hold(pmap, va, prot);
diff --git a/sys/dev/dc/if_dc.c b/sys/dev/dc/if_dc.c
index 64e7aeffa5e..a1df655849f 100644
--- a/sys/dev/dc/if_dc.c
+++ b/sys/dev/dc/if_dc.c
@@ -43,8 +43,9 @@ __FBSDID("$FreeBSD$");
  * ASIX Electronics AX88140A (www.asix.com.tw)
  * ASIX Electronics AX88141 (www.asix.com.tw)
  * ADMtek AL981 (www.admtek.com.tw)
- * ADMtek AN985 (www.admtek.com.tw)
- * Netgear FA511 (www.netgear.com) Appears to be rebadged ADMTek AN985
+ * ADMtek AN983 (www.admtek.com.tw)
+ * ADMtek CardBus AN985 (www.admtek.com.tw)
+ * Netgear FA511 (www.netgear.com) Appears to be rebadged ADMTek CardBus AN985
  * Davicom DM9100, DM9102, DM9102A (www.davicom8.com)
  * Accton EN1217 (www.accton.com)
  * Xircom X3201 (www.xircom.com)
@@ -161,14 +162,14 @@ static const struct dc_type dc_devs[] = {
 		"Davicom DM9102 10/100BaseTX" },
 	{ DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_AL981), 0,
 		"ADMtek AL981 10/100BaseTX" },
+	{ DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_AN983), 0,
+		"ADMtek AN983 10/100BaseTX" },
 	{ DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_AN985), 0,
-		"ADMtek AN985 10/100BaseTX" },
+		"ADMtek AN985 CardBus 10/100BaseTX or clone" },
 	{ DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_ADM9511), 0,
 		"ADMtek ADM9511 10/100BaseTX" },
 	{ DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_ADM9513), 0,
 		"ADMtek ADM9513 10/100BaseTX" },
-	{ DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_FA511), 0,
-		"Netgear FA511 10/100BaseTX" },
 	{ DC_DEVID(DC_VENDORID_ASIX, DC_DEVICEID_AX88140A), DC_REVISION_88141,
 		"ASIX AX88141 10/100BaseTX" },
 	{ DC_DEVID(DC_VENDORID_ASIX, DC_DEVICEID_AX88140A), 0,
@@ -778,10 +779,10 @@ dc_miibus_readreg(device_t dev, int phy, int reg)
 	bzero(&frame, sizeof(frame));
 
 	/*
-	 * Note: both the AL981 and AN985 have internal PHYs,
+	 * Note: both the AL981 and AN983 have internal PHYs,
 	 * however the AL981 provides direct access to the PHY
-	 * registers while the AN985 uses a serial MII interface.
-	 * The AN985's MII interface is also buggy in that you
+	 * registers while the AN983 uses a serial MII interface.
+	 * The AN983's MII interface is also buggy in that you
 	 * can read from any MII address (0 to 31), but only address 1
 	 * behaves normally. To deal with both cases, we pretend
 	 * that the PHY is at MII address 1.
@@ -1895,11 +1896,11 @@ dc_attach(device_t dev)
 		sc->dc_pmode = DC_PMODE_MII;
 		dc_read_srom(sc, sc->dc_romwidth);
 		break;
+	case DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_AN983):
 	case DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_AN985):
 	case DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_ADM9511):
 	case DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_ADM9513):
 	case DC_DEVID(DC_VENDORID_DLINK, DC_DEVICEID_DRP32TXD):
-	case DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_FA511):
 	case DC_DEVID(DC_VENDORID_ABOCOM, DC_DEVICEID_FE2500):
 	case DC_DEVID(DC_VENDORID_ABOCOM, DC_DEVICEID_FE2500MX):
 	case DC_DEVID(DC_VENDORID_ACCTON, DC_DEVICEID_EN2242):
@@ -1910,7 +1911,7 @@ dc_attach(device_t dev)
 	case DC_DEVID(DC_VENDORID_MICROSOFT, DC_DEVICEID_MSMN130):
 	case DC_DEVID(DC_VENDORID_LINKSYS, DC_DEVICEID_PCMPC200_AB08):
 	case DC_DEVID(DC_VENDORID_LINKSYS, DC_DEVICEID_PCMPC200_AB09):
-		sc->dc_type = DC_TYPE_AN985;
+		sc->dc_type = DC_TYPE_AN983;
 		sc->dc_flags |= DC_64BIT_HASH;
 		sc->dc_flags |= DC_TX_USE_TX_INTR;
 		sc->dc_flags |= DC_TX_ADMTEK_WAR;
@@ -2057,7 +2058,7 @@ dc_attach(device_t dev)
 		dc_read_eeprom(sc, (caddr_t)&eaddr, DC_EE_NODEADDR, 3, 0);
 		break;
 	case DC_TYPE_AL981:
-	case DC_TYPE_AN985:
+	case DC_TYPE_AN983:
 		reg = CSR_READ_4(sc, DC_AL_PAR0);
 		mac = (uint8_t *)&eaddr[0];
 		mac[0] = (reg >> 0) & 0xff;
diff --git a/sys/dev/dc/if_dcreg.h b/sys/dev/dc/if_dcreg.h
index cce2c100358..20fd2ce1ba4 100644
--- a/sys/dev/dc/if_dcreg.h
+++ b/sys/dev/dc/if_dcreg.h
@@ -72,7 +72,7 @@
 #define DC_TYPE_21143		0x4	/* Intel 21143 */
 #define DC_TYPE_ASIX		0x5	/* ASIX AX88140A/AX88141 */
 #define DC_TYPE_AL981		0x6	/* ADMtek AL981 Comet */
-#define DC_TYPE_AN985		0x7	/* ADMtek AN985 Centaur */
+#define DC_TYPE_AN983		0x7	/* ADMtek AN983 Centaur */
 #define DC_TYPE_DM9102		0x8	/* Davicom DM9102 */
 #define DC_TYPE_PNICII		0x9	/* 82c115 PNIC II */
 #define DC_TYPE_PNIC		0xA	/* 82c168/82c169 PNIC I */
@@ -86,12 +86,12 @@
 
 #define DC_IS_ADMTEK(x)				\
 	(x->dc_type == DC_TYPE_AL981 ||		\
-	 x->dc_type == DC_TYPE_AN985)
+	 x->dc_type == DC_TYPE_AN983)
 
 #define DC_IS_INTEL(x)		(x->dc_type == DC_TYPE_21143)
 #define DC_IS_ASIX(x)		(x->dc_type == DC_TYPE_ASIX)
 #define DC_IS_COMET(x)		(x->dc_type == DC_TYPE_AL981)
-#define DC_IS_CENTAUR(x)	(x->dc_type == DC_TYPE_AN985)
+#define DC_IS_CENTAUR(x)	(x->dc_type == DC_TYPE_AN983)
 #define DC_IS_DAVICOM(x)	(x->dc_type == DC_TYPE_DM9102)
 #define DC_IS_PNICII(x)		(x->dc_type == DC_TYPE_PNICII)
 #define DC_IS_PNIC(x)		(x->dc_type == DC_TYPE_PNIC)
@@ -543,8 +543,8 @@ struct dc_mii_frame {
  */
 
 /*
- * ADMtek specific registers and constants for the AL981 and AN985.
- * The AN985 doesn't use the magic PHY registers.
+ * ADMtek specific registers and constants for the AL981 and AN983.
+ * The AN983 doesn't use the magic PHY registers.
  */
 #define DC_AL_CR		0x88	/* command register */
 #define DC_AL_PAR0		0xA4	/* station address */
@@ -890,8 +890,8 @@ struct dc_softc {
  * ADMtek device IDs.
  */
 #define DC_DEVICEID_AL981	0x0981
-#define DC_DEVICEID_AN985	0x0985
-#define DC_DEVICEID_FA511	0x1985
+#define DC_DEVICEID_AN983	0x0985
+#define DC_DEVICEID_AN985	0x1985
 #define DC_DEVICEID_ADM9511	0x9511
 #define DC_DEVICEID_ADM9513	0x9513
 
@@ -1002,7 +1002,7 @@ struct dc_softc {
 #define DC_VENDORID_MICROSOFT		0x1414
 
 /*
- * Supported Microsoft PCI and cardbus NICs. These are really
+ * Supported Microsoft PCI and CardBus NICs. These are really
  * ADMtek parts in disguise.
  */
 
diff --git a/sys/dev/de/if_de.c b/sys/dev/de/if_de.c
index c3d283988ae..b785fe474f0 100644
--- a/sys/dev/de/if_de.c
+++ b/sys/dev/de/if_de.c
@@ -151,6 +151,7 @@ static void	tulip_start_locked(tulip_softc_t * const sc);
 static struct mbuf *
 		tulip_txput(tulip_softc_t * const sc, struct mbuf *m);
 static void	tulip_txput_setup(tulip_softc_t * const sc);
+static void	tulip_watchdog(void *arg);
 struct mbuf *	tulip_dequeue_mbuf(tulip_ringinfo_t *ri, tulip_descinfo_t *di,
 		    int sync);
 static void	tulip_dma_map_addr(void *, bus_dma_segment_t *, int, int);
@@ -3302,11 +3303,13 @@ tulip_init_locked(tulip_softc_t * const sc)
 	    TULIP_CSR_READ(sc, csr_status));
 	if ((sc->tulip_flags & (TULIP_WANTSETUP|TULIP_TXPROBE_ACTIVE)) == TULIP_WANTSETUP)
 	    tulip_txput_setup(sc);
+	callout_reset(&sc->tulip_stat_timer, hz, tulip_watchdog, sc);
     } else {
 	CTR0(KTR_TULIP, "tulip_init_locked: not up, reset chip");
 	sc->tulip_ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 	tulip_reset(sc);
 	tulip_addr_filter(sc);
+	callout_stop(&sc->tulip_stat_timer);
     }
 }
 
@@ -4319,23 +4322,17 @@ tulip_start_locked(tulip_softc_t * const sc)
     }
 }
 
-/*
- * Even though this routine runs at device spl, it does not break
- * our use of splnet (splsoftnet under NetBSD) for the majority
- * of this driver since 
- * if_watcbog is called from if_watchdog which is called from
- * splsoftclock which is below spl[soft]net.
- */
 static void
-tulip_ifwatchdog(struct ifnet *ifp)
+tulip_watchdog(void *arg)
 {
-    TULIP_PERFSTART(ifwatchdog)
-    tulip_softc_t * const sc = (tulip_softc_t *)ifp->if_softc;
+    TULIP_PERFSTART(stat)
+    tulip_softc_t *sc = arg;
 #if defined(TULIP_DEBUG)
     u_int32_t rxintrs;
 #endif
 
-    TULIP_LOCK(sc);
+    TULIP_LOCK_ASSERT(sc);
+    callout_reset(&sc->tulip_stat_timer, hz, tulip_watchdog, sc);    
 #if defined(TULIP_DEBUG)
     rxintrs = sc->tulip_dbg.dbg_rxintrs - sc->tulip_dbg.dbg_last_rxintrs;
     if (rxintrs > sc->tulip_dbg.dbg_high_rxintrs_hz)
@@ -4343,7 +4340,6 @@ tulip_ifwatchdog(struct ifnet *ifp)
     sc->tulip_dbg.dbg_last_rxintrs = sc->tulip_dbg.dbg_rxintrs;
 #endif /* TULIP_DEBUG */
 
-    sc->tulip_ifp->if_timer = 1;
     /*
      * These should be rare so do a bulk test up front so we can just skip
      * them if needed.
@@ -4381,11 +4377,11 @@ tulip_ifwatchdog(struct ifnet *ifp)
 	tulip_init_locked(sc);
     }
 
-    TULIP_PERFEND(ifwatchdog);
+    TULIP_PERFEND(stat);
     TULIP_PERFMERGE(sc, perf_intr_cycles);
     TULIP_PERFMERGE(sc, perf_ifstart_cycles);
     TULIP_PERFMERGE(sc, perf_ifioctl_cycles);
-    TULIP_PERFMERGE(sc, perf_ifwatchdog_cycles);
+    TULIP_PERFMERGE(sc, perf_stat_cycles);
     TULIP_PERFMERGE(sc, perf_timeout_cycles);
     TULIP_PERFMERGE(sc, perf_ifstart_one_cycles);
     TULIP_PERFMERGE(sc, perf_txput_cycles);
@@ -4395,14 +4391,13 @@ tulip_ifwatchdog(struct ifnet *ifp)
     TULIP_PERFMERGE(sc, perf_intr);
     TULIP_PERFMERGE(sc, perf_ifstart);
     TULIP_PERFMERGE(sc, perf_ifioctl);
-    TULIP_PERFMERGE(sc, perf_ifwatchdog);
+    TULIP_PERFMERGE(sc, perf_stat);
     TULIP_PERFMERGE(sc, perf_timeout);
     TULIP_PERFMERGE(sc, perf_ifstart_one);
     TULIP_PERFMERGE(sc, perf_txput);
     TULIP_PERFMERGE(sc, perf_txintr);
     TULIP_PERFMERGE(sc, perf_rxintr);
     TULIP_PERFMERGE(sc, perf_rxget);
-    TULIP_UNLOCK(sc);
 }
 
 static void
@@ -4418,8 +4413,6 @@ tulip_attach(tulip_softc_t * const sc)
     ifp->if_flags = IFF_BROADCAST|IFF_SIMPLEX|IFF_MULTICAST;
     ifp->if_ioctl = tulip_ifioctl;
     ifp->if_start = tulip_start;
-    ifp->if_watchdog = tulip_ifwatchdog;
-    ifp->if_timer = 1;
     ifp->if_init = tulip_init;
     IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen);
     ifp->if_snd.ifq_drv_maxlen = ifqmaxlen;
@@ -4839,6 +4832,7 @@ tulip_pci_attach(device_t dev)
     mtx_init(TULIP_MUTEX(sc), MTX_NETWORK_LOCK, device_get_nameunit(dev),
 	MTX_DEF);
     callout_init_mtx(&sc->tulip_callout, TULIP_MUTEX(sc), 0);
+    callout_init_mtx(&sc->tulip_stat_timer, TULIP_MUTEX(sc), 0);
     tulips[unit] = sc;
 
     tulip_initcsrs(sc, csr_base + csroffset, csrsize);
diff --git a/sys/dev/de/if_devar.h b/sys/dev/de/if_devar.h
index b4feebc12aa..8776be01c25 100644
--- a/sys/dev/de/if_devar.h
+++ b/sys/dev/de/if_devar.h
@@ -477,7 +477,7 @@ struct tulip_perfstat {
 	u_quad_t	perf_ifstart_cycles;
 	u_quad_t	perf_ifstart_one_cycles;
 	u_quad_t	perf_ifioctl_cycles;
-	u_quad_t	perf_ifwatchdog_cycles;
+	u_quad_t	perf_stat_cycles;
 	u_quad_t	perf_timeout_cycles;
 	u_quad_t	perf_txput_cycles;
 	u_quad_t	perf_txintr_cycles;
@@ -487,7 +487,7 @@ struct tulip_perfstat {
 	unsigned int	perf_ifstart;
 	unsigned int	perf_ifstart_one;
 	unsigned int	perf_ifioctl;
-	unsigned int	perf_ifwatchdog;
+	unsigned int	perf_stat;
 	unsigned int	perf_timeout;
 	unsigned int	perf_txput;
 	unsigned int	perf_txintr;
@@ -570,6 +570,7 @@ struct tulip_softc {
 	tulip_srom_connection_t	tulip_conntype;
 	struct callout		tulip_callout;
 	struct mtx		tulip_mutex;
+	struct callout	tulip_stat_timer;
 };
 
 #define	tulip_curperfstats	tulip_perfstats[TULIP_PERF_CURRENT]
diff --git a/sys/dev/dpms/dpms.c b/sys/dev/dpms/dpms.c
index 7e097c51f2f..fdfed2f6ced 100644
--- a/sys/dev/dpms/dpms.c
+++ b/sys/dev/dpms/dpms.c
@@ -118,19 +118,14 @@ static driver_t dpms_driver = {
 
 static devclass_t dpms_devclass;
 
-DRIVER_MODULE(dpms, vgapci, dpms_driver, dpms_devclass, NULL, NULL);
+DRIVER_MODULE(dpms, vgapm, dpms_driver, dpms_devclass, NULL, NULL);
 MODULE_DEPEND(dpms, x86bios, 1, 1, 1);
 
 static void
 dpms_identify(driver_t *driver, device_t parent)
 {
 
-	/* The DPMS VBE only allows for manipulating a single monitor. */
-	if (devclass_get_device(dpms_devclass, 0) != NULL)
-		return;
-
-	if (x86bios_match_device(0xc0000, parent) &&
-	    device_get_flags(parent) != 0)
+	if (x86bios_match_device(0xc0000, device_get_parent(parent)))
 		device_add_child(parent, "dpms", 0);
 }
 
diff --git a/sys/dev/drm/drm_vm.c b/sys/dev/drm/drm_vm.c
index 7d5cd8d9963..8f260fd9b10 100644
--- a/sys/dev/drm/drm_vm.c
+++ b/sys/dev/drm/drm_vm.c
@@ -31,8 +31,8 @@ __FBSDID("$FreeBSD$");
 #include "dev/drm/drmP.h"
 #include "dev/drm/drm.h"
 
-int drm_mmap(struct cdev *kdev, vm_offset_t offset, vm_paddr_t *paddr,
-    int prot)
+int drm_mmap(struct cdev *kdev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
 	struct drm_device *dev = drm_get_device_from_kdev(kdev);
 	struct drm_file *file_priv = NULL;
diff --git a/sys/dev/e1000/LICENSE b/sys/dev/e1000/LICENSE
index d3f8bf5f367..f271daeeec6 100644
--- a/sys/dev/e1000/LICENSE
+++ b/sys/dev/e1000/LICENSE
@@ -1,6 +1,6 @@
 $FreeBSD$
 
-  Copyright (c) 2001-2008, Intel Corporation 
+  Copyright (c) 2001-2009, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
diff --git a/sys/dev/e1000/e1000_80003es2lan.c b/sys/dev/e1000/e1000_80003es2lan.c
index 5c060869cf9..cee3164981e 100644
--- a/sys/dev/e1000/e1000_80003es2lan.c
+++ b/sys/dev/e1000/e1000_80003es2lan.c
@@ -171,7 +171,7 @@ static s32 e1000_init_nvm_params_80003es2lan(struct e1000_hw *hw)
 		break;
 	}
 
-	nvm->type               = e1000_nvm_eeprom_spi;
+	nvm->type = e1000_nvm_eeprom_spi;
 
 	size = (u16)((eecd & E1000_EECD_SIZE_EX_MASK) >>
 	                  E1000_EECD_SIZE_EX_SHIFT);
@@ -206,17 +206,22 @@ static s32 e1000_init_nvm_params_80003es2lan(struct e1000_hw *hw)
 static s32 e1000_init_mac_params_80003es2lan(struct e1000_hw *hw)
 {
 	struct e1000_mac_info *mac = &hw->mac;
-	s32 ret_val = E1000_SUCCESS;
 
 	DEBUGFUNC("e1000_init_mac_params_80003es2lan");
 
-	/* Set media type */
+	/* Set media type and media-dependent function pointers */
 	switch (hw->device_id) {
 	case E1000_DEV_ID_80003ES2LAN_SERDES_DPT:
 		hw->phy.media_type = e1000_media_type_internal_serdes;
+		mac->ops.check_for_link = e1000_check_for_serdes_link_generic;
+		mac->ops.setup_physical_interface =
+			e1000_setup_fiber_serdes_link_generic;
 		break;
 	default:
 		hw->phy.media_type = e1000_media_type_copper;
+		mac->ops.check_for_link = e1000_check_for_copper_link_generic;
+		mac->ops.setup_physical_interface =
+			e1000_setup_copper_link_80003es2lan;
 		break;
 	}
 
@@ -230,6 +235,8 @@ static s32 e1000_init_mac_params_80003es2lan(struct e1000_hw *hw)
 	mac->arc_subsystem_valid =
 	        (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
 	                ? TRUE : FALSE;
+	/* Adaptive IFS not supported */
+	mac->adaptive_ifs = FALSE;
 
 	/* Function pointers */
 
@@ -241,27 +248,6 @@ static s32 e1000_init_mac_params_80003es2lan(struct e1000_hw *hw)
 	mac->ops.init_hw = e1000_init_hw_80003es2lan;
 	/* link setup */
 	mac->ops.setup_link = e1000_setup_link_generic;
-	/* physical interface link setup */
-	mac->ops.setup_physical_interface =
-	        (hw->phy.media_type == e1000_media_type_copper)
-	                ? e1000_setup_copper_link_80003es2lan
-	                : e1000_setup_fiber_serdes_link_generic;
-	/* check for link */
-	switch (hw->phy.media_type) {
-	case e1000_media_type_copper:
-		mac->ops.check_for_link = e1000_check_for_copper_link_generic;
-		break;
-	case e1000_media_type_fiber:
-		mac->ops.check_for_link = e1000_check_for_fiber_link_generic;
-		break;
-	case e1000_media_type_internal_serdes:
-		mac->ops.check_for_link = e1000_check_for_serdes_link_generic;
-		break;
-	default:
-		ret_val = -E1000_ERR_CONFIG;
-		goto out;
-		break;
-	}
 	/* check management mode */
 	mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
 	/* multicast address update */
@@ -290,8 +276,10 @@ static s32 e1000_init_mac_params_80003es2lan(struct e1000_hw *hw)
 	/* link info */
 	mac->ops.get_link_up_info = e1000_get_link_up_info_80003es2lan;
 
-out:
-	return ret_val;
+	/* set lan id for port to determine which phy lock to use */
+	hw->mac.ops.set_lan_id(hw);
+
+	return E1000_SUCCESS;
 }
 
 /**
@@ -307,7 +295,6 @@ void e1000_init_function_pointers_80003es2lan(struct e1000_hw *hw)
 	hw->mac.ops.init_params = e1000_init_mac_params_80003es2lan;
 	hw->nvm.ops.init_params = e1000_init_nvm_params_80003es2lan;
 	hw->phy.ops.init_params = e1000_init_phy_params_80003es2lan;
-	e1000_get_bus_info_pcie_generic(hw);
 }
 
 /**
@@ -342,7 +329,6 @@ static void e1000_release_phy_80003es2lan(struct e1000_hw *hw)
 	e1000_release_swfw_sync_80003es2lan(hw, mask);
 }
 
-
 /**
  *  e1000_acquire_mac_csr_80003es2lan - Acquire rights to access Kumeran register
  *  @hw: pointer to the HW structure
@@ -532,28 +518,36 @@ static s32 e1000_read_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
 		goto out;
 	}
 
-	/*
-	 * The "ready" bit in the MDIC register may be incorrectly set
-	 * before the device has completed the "Page Select" MDI
-	 * transaction.  So we wait 200us after each MDI command...
-	 */
-	usec_delay(200);
+	if (hw->dev_spec._80003es2lan.mdic_wa_enable == TRUE) {
+		/*
+		 * The "ready" bit in the MDIC register may be incorrectly set
+		 * before the device has completed the "Page Select" MDI
+		 * transaction.  So we wait 200us after each MDI command...
+		 */
+		usec_delay(200);
 
-	/* ...and verify the command was successful. */
-	ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
+		/* ...and verify the command was successful. */
+		ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
 
-	if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
-		ret_val = -E1000_ERR_PHY;
-		e1000_release_phy_80003es2lan(hw);
-		goto out;
+		if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
+			ret_val = -E1000_ERR_PHY;
+			e1000_release_phy_80003es2lan(hw);
+			goto out;
+		}
+
+		usec_delay(200);
+
+		ret_val = e1000_read_phy_reg_mdic(hw,
+		                                  MAX_PHY_REG_ADDRESS & offset,
+		                                  data);
+
+		usec_delay(200);
+	} else {
+		ret_val = e1000_read_phy_reg_mdic(hw,
+		                                  MAX_PHY_REG_ADDRESS & offset,
+		                                  data);
 	}
 
-	usec_delay(200);
-
-	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
-	                                   data);
-
-	usec_delay(200);
 	e1000_release_phy_80003es2lan(hw);
 
 out:
@@ -599,29 +593,36 @@ static s32 e1000_write_phy_reg_gg82563_80003es2lan(struct e1000_hw *hw,
 		goto out;
 	}
 
+	if (hw->dev_spec._80003es2lan.mdic_wa_enable == TRUE) {
+		/*
+		 * The "ready" bit in the MDIC register may be incorrectly set
+		 * before the device has completed the "Page Select" MDI
+		 * transaction.  So we wait 200us after each MDI command...
+		 */
+		usec_delay(200);
 
-	/*
-	 * The "ready" bit in the MDIC register may be incorrectly set
-	 * before the device has completed the "Page Select" MDI
-	 * transaction.  So we wait 200us after each MDI command...
-	 */
-	usec_delay(200);
+		/* ...and verify the command was successful. */
+		ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
 
-	/* ...and verify the command was successful. */
-	ret_val = e1000_read_phy_reg_mdic(hw, page_select, &temp);
+		if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
+			ret_val = -E1000_ERR_PHY;
+			e1000_release_phy_80003es2lan(hw);
+			goto out;
+		}
 
-	if (((u16)offset >> GG82563_PAGE_SHIFT) != temp) {
-		ret_val = -E1000_ERR_PHY;
-		e1000_release_phy_80003es2lan(hw);
-		goto out;
+		usec_delay(200);
+
+		ret_val = e1000_write_phy_reg_mdic(hw,
+		                                  MAX_PHY_REG_ADDRESS & offset,
+		                                  data);
+
+		usec_delay(200);
+	} else {
+		ret_val = e1000_write_phy_reg_mdic(hw,
+		                                  MAX_PHY_REG_ADDRESS & offset,
+		                                  data);
 	}
 
-	usec_delay(200);
-
-	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
-	                                  data);
-
-	usec_delay(200);
 	e1000_release_phy_80003es2lan(hw);
 
 out:
@@ -802,13 +803,13 @@ static s32 e1000_get_cable_length_80003es2lan(struct e1000_hw *hw)
 
 	index = phy_data & GG82563_DSPD_CABLE_LENGTH;
 
-	if (index >= GG82563_CABLE_LENGTH_TABLE_SIZE + 5) {
-		ret_val = E1000_ERR_PHY;
+	if (index >= GG82563_CABLE_LENGTH_TABLE_SIZE - 5) {
+		ret_val = -E1000_ERR_PHY;
 		goto out;
 	}
 
 	phy->min_cable_length = e1000_gg82563_cable_length_table[index];
-	phy->max_cable_length = e1000_gg82563_cable_length_table[index+5];
+	phy->max_cable_length = e1000_gg82563_cable_length_table[index + 5];
 
 	phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
 
@@ -916,10 +917,9 @@ static s32 e1000_init_hw_80003es2lan(struct e1000_hw *hw)
 
 	/* Initialize identification LED */
 	ret_val = mac->ops.id_led_init(hw);
-	if (ret_val) {
+	if (ret_val)
 		DEBUGOUT("Error initializing identification LED\n");
 		/* This is not fatal and we should not stop init due to this */
-	}
 
 	/* Disabling VLAN filtering */
 	DEBUGOUT("Initializing the IEEE VLAN\n");
@@ -969,6 +969,19 @@ static s32 e1000_init_hw_80003es2lan(struct e1000_hw *hw)
 	reg_data &= ~0x00100000;
 	E1000_WRITE_REG_ARRAY(hw, E1000_FFLT, 0x0001, reg_data);
 
+	/* default to TRUE to enable the MDIC W/A */
+	hw->dev_spec._80003es2lan.mdic_wa_enable = TRUE;
+
+	ret_val = e1000_read_kmrn_reg_80003es2lan(hw,
+	                              E1000_KMRNCTRLSTA_OFFSET >>
+	                              E1000_KMRNCTRLSTA_OFFSET_SHIFT,
+	                              &i);
+	if (!ret_val) {
+		if ((i & E1000_KMRNCTRLSTA_OPMODE_MASK) ==
+		     E1000_KMRNCTRLSTA_OPMODE_INBAND_MDIO)
+			hw->dev_spec._80003es2lan.mdic_wa_enable = FALSE;
+	}
+
 	/*
 	 * Clear all of the statistics registers (clear on read).  It is
 	 * important that we do this after we have tried to establish link
@@ -1303,7 +1316,6 @@ static s32 e1000_cfg_kmrn_10_100_80003es2lan(struct e1000_hw *hw, u16 duplex)
 	tipg |= DEFAULT_TIPG_IPGT_10_100_80003ES2LAN;
 	E1000_WRITE_REG(hw, E1000_TIPG, tipg);
 
-
 	do {
 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
 		                               ®_data);
@@ -1357,7 +1369,6 @@ static s32 e1000_cfg_kmrn_1000_80003es2lan(struct e1000_hw *hw)
 	tipg |= DEFAULT_TIPG_IPGT_1000_80003ES2LAN;
 	E1000_WRITE_REG(hw, E1000_TIPG, tipg);
 
-
 	do {
 		ret_val = hw->phy.ops.read_reg(hw, GG82563_PHY_KMRN_MODE_CTRL,
 		                               ®_data);
diff --git a/sys/dev/e1000/e1000_80003es2lan.h b/sys/dev/e1000/e1000_80003es2lan.h
index 7bf8d9d5436..3ab1ec9d04e 100644
--- a/sys/dev/e1000/e1000_80003es2lan.h
+++ b/sys/dev/e1000/e1000_80003es2lan.h
@@ -1,6 +1,6 @@
-/*******************************************************************************
+/******************************************************************************
 
-  Copyright (c) 2001-2008, Intel Corporation 
+  Copyright (c) 2001-2009, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -29,9 +29,8 @@
   ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   POSSIBILITY OF SUCH DAMAGE.
 
-*******************************************************************************/
-/* $FreeBSD$ */
-
+******************************************************************************/
+/*$FreeBSD$*/
 
 #ifndef _E1000_80003ES2LAN_H_
 #define _E1000_80003ES2LAN_H_
@@ -49,6 +48,9 @@
 #define E1000_KMRNCTRLSTA_HD_CTRL_1000_DEFAULT   0x0000
 #define E1000_KMRNCTRLSTA_OPMODE_E_IDLE          0x2000
 
+#define E1000_KMRNCTRLSTA_OPMODE_MASK            0x000C
+#define E1000_KMRNCTRLSTA_OPMODE_INBAND_MDIO     0x0004
+
 #define E1000_TCTL_EXT_GCEX_MASK 0x000FFC00 /* Gigabit Carry Extend Padding */
 #define DEFAULT_TCTL_EXT_GCEX_80003ES2LAN        0x00010000
 
diff --git a/sys/dev/e1000/e1000_82541.c b/sys/dev/e1000/e1000_82541.c
index 68d1b05a07b..c58a6027c9e 100644
--- a/sys/dev/e1000/e1000_82541.c
+++ b/sys/dev/e1000/e1000_82541.c
@@ -59,6 +59,7 @@ static s32  e1000_set_d3_lplu_state_82541(struct e1000_hw *hw,
 static s32  e1000_setup_led_82541(struct e1000_hw *hw);
 static s32  e1000_cleanup_led_82541(struct e1000_hw *hw);
 static void e1000_clear_hw_cntrs_82541(struct e1000_hw *hw);
+static s32  e1000_read_mac_addr_82541(struct e1000_hw *hw);
 static s32  e1000_config_dsp_after_link_change_82541(struct e1000_hw *hw,
                                                      bool link_up);
 static s32  e1000_phy_init_script_82541(struct e1000_hw *hw);
@@ -261,6 +262,8 @@ static s32 e1000_init_mac_params_82541(struct e1000_hw *hw)
 	mac->ops.clear_vfta = e1000_clear_vfta_generic;
 	/* setting MTA */
 	mac->ops.mta_set = e1000_mta_set_generic;
+	/* read mac address */
+	mac->ops.read_mac_addr = e1000_read_mac_addr_82541;
 	/* ID LED init */
 	mac->ops.id_led_init = e1000_id_led_init_generic;
 	/* setup LED */
@@ -1292,3 +1295,35 @@ static void e1000_clear_hw_cntrs_82541(struct e1000_hw *hw)
 	E1000_READ_REG(hw, E1000_MGTPDC);
 	E1000_READ_REG(hw, E1000_MGTPTC);
 }
+
+/**
+ *  e1000_read_mac_addr_82541 - Read device MAC address
+ *  @hw: pointer to the HW structure
+ *
+ *  Reads the device MAC address from the EEPROM and stores the value.
+ **/
+static s32 e1000_read_mac_addr_82541(struct e1000_hw *hw)
+{
+	s32  ret_val = E1000_SUCCESS;
+	u16 offset, nvm_data, i;
+
+	DEBUGFUNC("e1000_read_mac_addr");
+
+	for (i = 0; i < ETH_ADDR_LEN; i += 2) {
+		offset = i >> 1;
+		ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data);
+		if (ret_val) {
+			DEBUGOUT("NVM Read Error\n");
+			goto out;
+		}
+		hw->mac.perm_addr[i] = (u8)(nvm_data & 0xFF);
+		hw->mac.perm_addr[i+1] = (u8)(nvm_data >> 8);
+	}
+
+	for (i = 0; i < ETH_ADDR_LEN; i++)
+		hw->mac.addr[i] = hw->mac.perm_addr[i];
+
+out:
+	return ret_val;
+}
+
diff --git a/sys/dev/e1000/e1000_82543.c b/sys/dev/e1000/e1000_82543.c
index 97c7f3b2044..41c9f8f1aab 100644
--- a/sys/dev/e1000/e1000_82543.c
+++ b/sys/dev/e1000/e1000_82543.c
@@ -75,6 +75,8 @@ static void e1000_shift_out_mdi_bits_82543(struct e1000_hw *hw, u32 data,
                                            u16 count);
 static bool e1000_tbi_compatibility_enabled_82543(struct e1000_hw *hw);
 static void e1000_set_tbi_sbp_82543(struct e1000_hw *hw, bool state);
+static s32  e1000_read_mac_addr_82543(struct e1000_hw *hw);
+
 
 /**
  *  e1000_init_phy_params_82543 - Init PHY func ptrs.
@@ -246,6 +248,8 @@ static s32 e1000_init_mac_params_82543(struct e1000_hw *hw)
 	mac->ops.clear_vfta = e1000_clear_vfta_generic;
 	/* setting MTA */
 	mac->ops.mta_set = e1000_mta_set_82543;
+	/* read mac address */
+	mac->ops.read_mac_addr = e1000_read_mac_addr_82543;
 	/* turn on/off LED */
 	mac->ops.led_on = e1000_led_on_82543;
 	mac->ops.led_off = e1000_led_off_82543;
@@ -1600,3 +1604,41 @@ static void e1000_clear_hw_cntrs_82543(struct e1000_hw *hw)
 	E1000_READ_REG(hw, E1000_TSCTC);
 	E1000_READ_REG(hw, E1000_TSCTFC);
 }
+
+/**
+ *  e1000_read_mac_addr_82543 - Read device MAC address
+ *  @hw: pointer to the HW structure
+ *
+ *  Reads the device MAC address from the EEPROM and stores the value.
+ *  Since devices with two ports use the same EEPROM, we increment the
+ *  last bit in the MAC address for the second port.
+ *
+ **/
+s32 e1000_read_mac_addr_82543(struct e1000_hw *hw)
+{
+	s32  ret_val = E1000_SUCCESS;
+	u16 offset, nvm_data, i;
+
+	DEBUGFUNC("e1000_read_mac_addr");
+
+	for (i = 0; i < ETH_ADDR_LEN; i += 2) {
+		offset = i >> 1;
+		ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data);
+		if (ret_val) {
+			DEBUGOUT("NVM Read Error\n");
+			goto out;
+		}
+		hw->mac.perm_addr[i] = (u8)(nvm_data & 0xFF);
+		hw->mac.perm_addr[i+1] = (u8)(nvm_data >> 8);
+	}
+
+	/* Flip last bit of mac address if we're on second port */
+	if (hw->bus.func == E1000_FUNC_1)
+		hw->mac.perm_addr[5] ^= 1;
+
+	for (i = 0; i < ETH_ADDR_LEN; i++)
+		hw->mac.addr[i] = hw->mac.perm_addr[i];
+
+out:
+	return ret_val;
+}
diff --git a/sys/dev/e1000/e1000_82571.c b/sys/dev/e1000/e1000_82571.c
index 18fe745b14a..be59b3be54b 100644
--- a/sys/dev/e1000/e1000_82571.c
+++ b/sys/dev/e1000/e1000_82571.c
@@ -46,7 +46,6 @@
  * 82573E Gigabit Ethernet Controller (Copper)
  * 82573L Gigabit Ethernet Controller
  * 82574L Gigabit Network Connection
- * 82574L Gigabit Network Connection
  * 82583V Gigabit Network Connection
  */
 
@@ -106,7 +105,6 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
 	phy->reset_delay_us              = 100;
 
 	phy->ops.acquire                 = e1000_get_hw_semaphore_82571;
-	phy->ops.check_polarity          = e1000_check_polarity_igp;
 	phy->ops.check_reset_block       = e1000_check_reset_block_generic;
 	phy->ops.release                 = e1000_put_hw_semaphore_82571;
 	phy->ops.reset                   = e1000_phy_hw_reset_generic;
@@ -121,6 +119,7 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
 		phy->type                   = e1000_phy_igp_2;
 		phy->ops.get_cfg_done       = e1000_get_cfg_done_82571;
 		phy->ops.get_info           = e1000_get_phy_info_igp;
+		phy->ops.check_polarity     = e1000_check_polarity_igp;
 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
 		phy->ops.get_cable_length   = e1000_get_cable_length_igp_2;
 		phy->ops.read_reg           = e1000_read_phy_reg_igp;
@@ -132,6 +131,7 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
 		/* Verify PHY ID */
 		if (phy->id != IGP01E1000_I_PHY_ID) {
 			ret_val = -E1000_ERR_PHY;
+			DEBUGOUT1("PHY ID unknown: type = 0x%08x\n", phy->id);
 			goto out;
 		}
 		break;
@@ -139,6 +139,7 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
 		phy->type                   = e1000_phy_m88;
 		phy->ops.get_cfg_done       = e1000_get_cfg_done_generic;
 		phy->ops.get_info           = e1000_get_phy_info_m88;
+		phy->ops.check_polarity     = e1000_check_polarity_m88;
 		phy->ops.commit             = e1000_phy_sw_reset_generic;
 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
 		phy->ops.get_cable_length   = e1000_get_cable_length_m88;
@@ -155,11 +156,12 @@ static s32 e1000_init_phy_params_82571(struct e1000_hw *hw)
 			goto out;
 		}
 		break;
-	case e1000_82583:
 	case e1000_82574:
+	case e1000_82583:
 		phy->type                   = e1000_phy_bm;
 		phy->ops.get_cfg_done       = e1000_get_cfg_done_generic;
 		phy->ops.get_info           = e1000_get_phy_info_m88;
+		phy->ops.check_polarity     = e1000_check_polarity_m88;
 		phy->ops.commit             = e1000_phy_sw_reset_generic;
 		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
 		phy->ops.get_cable_length   = e1000_get_cable_length_m88;
@@ -266,28 +268,42 @@ static s32 e1000_init_nvm_params_82571(struct e1000_hw *hw)
 static s32 e1000_init_mac_params_82571(struct e1000_hw *hw)
 {
 	struct e1000_mac_info *mac = &hw->mac;
-	s32 ret_val = E1000_SUCCESS;
 	u32 swsm = 0;
 	u32 swsm2 = 0;
 	bool force_clear_smbi = FALSE;
 
 	DEBUGFUNC("e1000_init_mac_params_82571");
 
-	/* Set media type */
+	/* Set media type and media-dependent function pointers */
 	switch (hw->device_id) {
 	case E1000_DEV_ID_82571EB_FIBER:
 	case E1000_DEV_ID_82572EI_FIBER:
 	case E1000_DEV_ID_82571EB_QUAD_FIBER:
 		hw->phy.media_type = e1000_media_type_fiber;
+		mac->ops.setup_physical_interface =
+			e1000_setup_fiber_serdes_link_82571;
+		mac->ops.check_for_link = e1000_check_for_fiber_link_generic;
+		mac->ops.get_link_up_info =
+			e1000_get_speed_and_duplex_fiber_serdes_generic;
 		break;
 	case E1000_DEV_ID_82571EB_SERDES:
 	case E1000_DEV_ID_82571EB_SERDES_DUAL:
 	case E1000_DEV_ID_82571EB_SERDES_QUAD:
 	case E1000_DEV_ID_82572EI_SERDES:
 		hw->phy.media_type = e1000_media_type_internal_serdes;
+		mac->ops.setup_physical_interface =
+			e1000_setup_fiber_serdes_link_82571;
+		mac->ops.check_for_link = e1000_check_for_serdes_link_82571;
+		mac->ops.get_link_up_info =
+			e1000_get_speed_and_duplex_fiber_serdes_generic;
 		break;
 	default:
 		hw->phy.media_type = e1000_media_type_copper;
+		mac->ops.setup_physical_interface =
+			e1000_setup_copper_link_82571;
+		mac->ops.check_for_link = e1000_check_for_copper_link_generic;
+		mac->ops.get_link_up_info =
+			e1000_get_speed_and_duplex_copper_generic;
 		break;
 	}
 
@@ -301,58 +317,19 @@ static s32 e1000_init_mac_params_82571(struct e1000_hw *hw)
 	mac->arc_subsystem_valid =
 	        (E1000_READ_REG(hw, E1000_FWSM) & E1000_FWSM_MODE_MASK)
 	                ? TRUE : FALSE;
+	/* Adaptive IFS supported */
+	mac->adaptive_ifs = TRUE;
 
 	/* Function pointers */
 
 	/* bus type/speed/width */
 	mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
-	/* function id */
-	switch (hw->mac.type) {
-	case e1000_82573:
-	case e1000_82574:
-	case e1000_82583:
-		mac->ops.set_lan_id = e1000_set_lan_id_single_port;
-		break;
-	default:
-		break;
-	}
 	/* reset */
 	mac->ops.reset_hw = e1000_reset_hw_82571;
 	/* hw initialization */
 	mac->ops.init_hw = e1000_init_hw_82571;
 	/* link setup */
 	mac->ops.setup_link = e1000_setup_link_82571;
-	/* physical interface link setup */
-	mac->ops.setup_physical_interface =
-	        (hw->phy.media_type == e1000_media_type_copper)
-	                ? e1000_setup_copper_link_82571
-	                : e1000_setup_fiber_serdes_link_82571;
-	/* check for link */
-	switch (hw->phy.media_type) {
-	case e1000_media_type_copper:
-		mac->ops.check_for_link = e1000_check_for_copper_link_generic;
-		break;
-	case e1000_media_type_fiber:
-		mac->ops.check_for_link = e1000_check_for_fiber_link_generic;
-		break;
-	case e1000_media_type_internal_serdes:
-		mac->ops.check_for_link = e1000_check_for_serdes_link_82571;
-		break;
-	default:
-		ret_val = -E1000_ERR_CONFIG;
-		goto out;
-		break;
-	}
-	/* check management mode */
-	switch (hw->mac.type) {
-	case e1000_82574:
-	case e1000_82583:
-		mac->ops.check_mng_mode = e1000_check_mng_mode_82574;
-		break;
-	default:
-		mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
-		break;
-	}
 	/* multicast address update */
 	mac->ops.update_mc_addr_list = e1000_update_mc_addr_list_generic;
 	/* writing VFTA */
@@ -371,24 +348,29 @@ static s32 e1000_init_mac_params_82571(struct e1000_hw *hw)
 	mac->ops.setup_led = e1000_setup_led_generic;
 	/* cleanup LED */
 	mac->ops.cleanup_led = e1000_cleanup_led_generic;
-	/* turn on/off LED */
-	switch (hw->mac.type) {
-	case e1000_82574:
-	case e1000_82583:
-		mac->ops.led_on = e1000_led_on_82574;
-		break;
-	default:
-		mac->ops.led_on = e1000_led_on_generic;
-		break;
-	}
+	/* turn off LED */
 	mac->ops.led_off = e1000_led_off_generic;
 	/* clear hardware counters */
 	mac->ops.clear_hw_cntrs = e1000_clear_hw_cntrs_82571;
-	/* link info */
-	mac->ops.get_link_up_info =
-	        (hw->phy.media_type == e1000_media_type_copper)
-	                ? e1000_get_speed_and_duplex_copper_generic
-	                : e1000_get_speed_and_duplex_fiber_serdes_generic;
+
+	/* MAC-specific function pointers */
+	switch (hw->mac.type) {
+	case e1000_82573:
+		mac->ops.set_lan_id = e1000_set_lan_id_single_port;
+		mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
+		mac->ops.led_on = e1000_led_on_generic;
+		break;
+	case e1000_82574:
+	case e1000_82583:
+		mac->ops.set_lan_id = e1000_set_lan_id_single_port;
+		mac->ops.check_mng_mode = e1000_check_mng_mode_82574;
+		mac->ops.led_on = e1000_led_on_82574;
+		break;
+	default:
+		mac->ops.check_mng_mode = e1000_check_mng_mode_generic;
+		mac->ops.led_on = e1000_led_on_generic;
+		break;
+	}
 
 	/*
 	 * Ensure that the inter-port SWSM.SMBI lock bit is clear before
@@ -434,8 +416,7 @@ static s32 e1000_init_mac_params_82571(struct e1000_hw *hw)
 	 */
 	 hw->dev_spec._82571.smb_counter = 0;
 
-out:
-	return ret_val;
+	return E1000_SUCCESS;
 }
 
 /**
@@ -501,7 +482,6 @@ static s32 e1000_get_phy_id_82571(struct e1000_hw *hw)
 		ret_val = -E1000_ERR_PHY;
 		break;
 	}
-
 out:
 	return ret_val;
 }
@@ -512,7 +492,7 @@ out:
  *
  *  Acquire the HW semaphore to access the PHY or NVM
  **/
-s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
+static s32 e1000_get_hw_semaphore_82571(struct e1000_hw *hw)
 {
 	u32 swsm;
 	s32 ret_val = E1000_SUCCESS;
@@ -577,7 +557,7 @@ out:
  *
  *  Release hardware semaphore used to access the PHY or NVM
  **/
-void e1000_put_hw_semaphore_82571(struct e1000_hw *hw)
+static void e1000_put_hw_semaphore_82571(struct e1000_hw *hw)
 {
 	u32 swsm;
 
@@ -610,9 +590,9 @@ static s32 e1000_acquire_nvm_82571(struct e1000_hw *hw)
 		goto out;
 
 	switch (hw->mac.type) {
+	case e1000_82573:
 	case e1000_82574:
 	case e1000_82583:
-	case e1000_82573:
 		break;
 	default:
 		ret_val = e1000_acquire_nvm_generic(hw);
@@ -831,7 +811,8 @@ static s32 e1000_get_cfg_done_82571(struct e1000_hw *hw)
 	DEBUGFUNC("e1000_get_cfg_done_82571");
 
 	while (timeout) {
-		if (E1000_READ_REG(hw, E1000_EEMNGCTL) & E1000_NVM_CFG_DONE_PORT_0)
+		if (E1000_READ_REG(hw, E1000_EEMNGCTL) &
+		    E1000_NVM_CFG_DONE_PORT_0)
 			break;
 		msec_delay(1);
 		timeout--;
@@ -966,9 +947,9 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
 	 * Ownership defaults to firmware after a reset.
 	 */
 	switch (hw->mac.type) {
+	case e1000_82573:
 	case e1000_82574:
 	case e1000_82583:
-	case e1000_82573:
 		extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
 		extcnf_ctrl |= E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP;
 
@@ -1014,9 +995,9 @@ static s32 e1000_reset_hw_82571(struct e1000_hw *hw)
 	 */
 
 	switch (hw->mac.type) {
+	case e1000_82573:
 	case e1000_82574:
 	case e1000_82583:
-	case e1000_82573:
 		msec_delay(25);
 		break;
 	default:
@@ -1061,10 +1042,9 @@ static s32 e1000_init_hw_82571(struct e1000_hw *hw)
 
 	/* Initialize identification LED */
 	ret_val = mac->ops.id_led_init(hw);
-	if (ret_val) {
+	if (ret_val)
 		DEBUGOUT("Error initializing identification LED\n");
 		/* This is not fatal and we should not stop init due to this */
-	}
 
 	/* Disabling VLAN filtering */
 	DEBUGOUT("Initializing the IEEE VLAN\n");
@@ -1097,9 +1077,9 @@ static s32 e1000_init_hw_82571(struct e1000_hw *hw)
 
 	/* ...for both queues. */
 	switch (mac->type) {
+	case e1000_82573:
 	case e1000_82574:
 	case e1000_82583:
-	case e1000_82573:
 		e1000_enable_tx_pkt_filtering_generic(hw);
 		reg_data = E1000_READ_REG(hw, E1000_GCR);
 		reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
@@ -1108,8 +1088,8 @@ static s32 e1000_init_hw_82571(struct e1000_hw *hw)
 	default:
 		reg_data = E1000_READ_REG(hw, E1000_TXDCTL(1));
 		reg_data = (reg_data & ~E1000_TXDCTL_WTHRESH) |
-					E1000_TXDCTL_FULL_TX_DESC_WB |
-					E1000_TXDCTL_COUNT_DESC;
+		           E1000_TXDCTL_FULL_TX_DESC_WB |
+		           E1000_TXDCTL_COUNT_DESC;
 		E1000_WRITE_REG(hw, E1000_TXDCTL(1), reg_data);
 		break;
 	}
@@ -1178,11 +1158,10 @@ static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
 	}
 
 	/* Device Control */
-
 	switch (hw->mac.type) {
+	case e1000_82573:
 	case e1000_82574:
 	case e1000_82583:
-	case e1000_82573:
 		reg = E1000_READ_REG(hw, E1000_CTRL);
 		reg &= ~(1 << 29);
 		E1000_WRITE_REG(hw, E1000_CTRL, reg);
@@ -1193,9 +1172,9 @@ static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
 
 	/* Extended Device Control */
 	switch (hw->mac.type) {
+	case e1000_82573:
 	case e1000_82574:
 	case e1000_82583:
-	case e1000_82573:
 		reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
 		reg &= ~(1 << 23);
 		reg |= (1 << 22);
@@ -1205,7 +1184,6 @@ static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
 		break;
 	}
 
-
 	if (hw->mac.type == e1000_82571) {
 		reg = E1000_READ_REG(hw, E1000_PBA_ECC);
 		reg |= E1000_PBA_ECC_CORR_EN;
@@ -1216,7 +1194,6 @@ static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
 	 * Workaround for hardware errata.
 	 * Ensure that DMA Dynamic Clock gating is disabled on 82571 and 82572
 	 */
-
 	if ((hw->mac.type == e1000_82571) ||
 	   (hw->mac.type == e1000_82572)) {
 		reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
@@ -1225,13 +1202,13 @@ static void e1000_initialize_hw_bits_82571(struct e1000_hw *hw)
 	}
 
 	/* PCI-Ex Control Registers */
-
 	switch (hw->mac.type) {
 	case e1000_82574:
 	case e1000_82583:
 		reg = E1000_READ_REG(hw, E1000_GCR);
 		reg |= (1 << 22);
 		E1000_WRITE_REG(hw, E1000_GCR, reg);
+
 		/*
 		 * Workaround for hardware errata.
 		 * apply workaround for hardware errata documented in errata
@@ -1267,39 +1244,36 @@ static void e1000_clear_vfta_82571(struct e1000_hw *hw)
 	DEBUGFUNC("e1000_clear_vfta_82571");
 
 	switch (hw->mac.type) {
+	case e1000_82573:
 	case e1000_82574:
 	case e1000_82583:
-	case e1000_82573:
 		if (hw->mng_cookie.vlan_id != 0) {
 			/*
-			*The VFTA is a 4096b bit-field, each identifying
-			*a single VLAN ID.  The following operations
-			*determine which 32b entry (i.e. offset) into the
-			*array we want to set the VLAN ID (i.e. bit) of
-			*the manageability unit.
-			*/
+			 * The VFTA is a 4096b bit-field, each identifying
+			 * a single VLAN ID.  The following operations
+			 * determine which 32b entry (i.e. offset) into the
+			 * array we want to set the VLAN ID (i.e. bit) of
+			 * the manageability unit.
+			 */
 			vfta_offset = (hw->mng_cookie.vlan_id >>
 				E1000_VFTA_ENTRY_SHIFT) & E1000_VFTA_ENTRY_MASK;
 			vfta_bit_in_reg = 1 << (hw->mng_cookie.vlan_id &
 				E1000_VFTA_ENTRY_BIT_SHIFT_MASK);
 		}
-
-		for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
-			/*
-			*If the offset we want to clear is the same offset of
-			*the manageability VLAN ID, then clear all bits except
-			*that of the manageability unit
-			*/
-			vfta_value = (offset == vfta_offset) ?
-							vfta_bit_in_reg : 0;
-			E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset,
-				vfta_value);
-			E1000_WRITE_FLUSH(hw);
-		}
 		break;
 	default:
 		break;
 	}
+	for (offset = 0; offset < E1000_VLAN_FILTER_TBL_SIZE; offset++) {
+		/*
+		 * If the offset we want to clear is the same offset of the
+		 * manageability VLAN ID, then clear all bits except that of
+		 * the manageability unit.
+		 */
+		vfta_value = (offset == vfta_offset) ? vfta_bit_in_reg : 0;
+		E1000_WRITE_REG_ARRAY(hw, E1000_VFTA, offset, vfta_value);
+		E1000_WRITE_FLUSH(hw);
+	}
 }
 
 /**
@@ -1369,9 +1343,9 @@ static s32 e1000_setup_link_82571(struct e1000_hw *hw)
 	 * set it to full.
 	 */
 	switch (hw->mac.type) {
+	case e1000_82573:
 	case e1000_82574:
 	case e1000_82583:
-	case e1000_82573:
 		if (hw->fc.requested_mode == e1000_fc_default)
 			hw->fc.requested_mode = e1000_fc_full;
 		break;
@@ -1460,7 +1434,7 @@ static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw)
  *  Reports the link state as up or down.
  *
  *  If autonegotiation is supported by the link partner, the link state is
- *  determined by the result of autongotiation. This is the most likely case.
+ *  determined by the result of autonegotiation. This is the most likely case.
  *  If autonegotiation is not supported by the link partner, and the link
  *  has a valid signal, force the link up.
  *
@@ -1472,7 +1446,7 @@ static s32 e1000_setup_fiber_serdes_link_82571(struct e1000_hw *hw)
  *  4) forced_up (the link has been forced up, it did not autonegotiate)
  *
  **/
-s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
+static s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
 {
 	struct e1000_mac_info *mac = &hw->mac;
 	u32 rxcw;
@@ -1524,9 +1498,10 @@ s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
 
 		case e1000_serdes_link_autoneg_progress:
 			if (rxcw & E1000_RXCW_C) {
-				/* We received /C/ ordered sets, meaning the
+				/*
+				 * We received /C/ ordered sets, meaning the
 				 * link partner has autonegotiated, and we can
-				 * trust the Link Up (LU) status bit
+				 * trust the Link Up (LU) status bit.
 				 */
 				if (status & E1000_STATUS_LU) {
 					mac->serdes_link_state =
@@ -1534,13 +1509,14 @@ s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
 					DEBUGOUT("AN_PROG   -> AN_UP\n");
 					mac->serdes_has_link = TRUE;
 				} else {
-					/* Autoneg completed, but failed */
+					/* Autoneg completed, but failed. */
 					mac->serdes_link_state =
 					    e1000_serdes_link_down;
 					DEBUGOUT("AN_PROG   -> DOWN\n");
 				}
 			} else {
-				/* The link partner did not autoneg.
+				/*
+				 * The link partner did not autoneg.
 				 * Force link up and full duplex, and change
 				 * state to forced.
 				 */
@@ -1565,9 +1541,11 @@ s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
 
 		case e1000_serdes_link_down:
 		default:
-			/* The link was down but the receiver has now gained
+			/*
+			 * The link was down but the receiver has now gained
 			 * valid sync, so lets see if we can bring the link
-			 * up. */
+			 * up.
+			 */
 			E1000_WRITE_REG(hw, E1000_TXCW, mac->txcw);
 			E1000_WRITE_REG(hw, E1000_CTRL,
 			    (ctrl & ~E1000_CTRL_SLU));
@@ -1583,9 +1561,9 @@ s32 e1000_check_for_serdes_link_82571(struct e1000_hw *hw)
 			DEBUGOUT("ANYSTATE  -> DOWN\n");
 		} else {
 			/*
-			 * We have sync, and can tolerate one
-			 * invalid (IV) codeword before declaring
-			 * link down, so reread to look again
+			 * We have sync, and can tolerate one invalid (IV)
+			 * codeword before declaring link down, so reread
+			 * to look again.
 			 */
 			usec_delay(10);
 			rxcw = E1000_READ_REG(hw, E1000_RXCW);
@@ -1621,15 +1599,15 @@ static s32 e1000_valid_led_default_82571(struct e1000_hw *hw, u16 *data)
 	}
 
 	switch (hw->mac.type) {
+	case e1000_82573:
 	case e1000_82574:
 	case e1000_82583:
-	case e1000_82573:
-		if(*data == ID_LED_RESERVED_F746)
+		if (*data == ID_LED_RESERVED_F746)
 			*data = ID_LED_DEFAULT_82573;
 		break;
 	default:
 		if (*data == ID_LED_RESERVED_0000 ||
-			*data == ID_LED_RESERVED_FFFF)
+		    *data == ID_LED_RESERVED_FFFF)
 			*data = ID_LED_DEFAULT;
 		break;
 	}
diff --git a/sys/dev/e1000/e1000_82575.c b/sys/dev/e1000/e1000_82575.c
index 2f8e8ed31ed..5c877c27938 100644
--- a/sys/dev/e1000/e1000_82575.c
+++ b/sys/dev/e1000/e1000_82575.c
@@ -59,16 +59,20 @@ static s32  e1000_phy_hw_reset_sgmii_82575(struct e1000_hw *hw);
 static s32  e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
                                            u16 *data);
 static s32  e1000_reset_hw_82575(struct e1000_hw *hw);
+static s32  e1000_reset_hw_82580(struct e1000_hw *hw);
+static s32 e1000_read_phy_reg_82580(struct e1000_hw *hw,
+                                    u32 offset, u16 *data);
+static s32 e1000_write_phy_reg_82580(struct e1000_hw *hw,
+                                     u32 offset, u16 data);
 static s32  e1000_set_d0_lplu_state_82575(struct e1000_hw *hw,
                                           bool active);
 static s32  e1000_setup_copper_link_82575(struct e1000_hw *hw);
-static s32  e1000_setup_fiber_serdes_link_82575(struct e1000_hw *hw);
+static s32  e1000_setup_serdes_link_82575(struct e1000_hw *hw);
 static s32  e1000_valid_led_default_82575(struct e1000_hw *hw, u16 *data);
 static s32  e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw,
                                             u32 offset, u16 data);
 static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw);
 static s32  e1000_acquire_swfw_sync_82575(struct e1000_hw *hw, u16 mask);
-static s32  e1000_configure_pcs_link_82575(struct e1000_hw *hw);
 static s32  e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
                                                  u16 *speed, u16 *duplex);
 static s32  e1000_get_phy_id_82575(struct e1000_hw *hw);
@@ -77,9 +81,15 @@ static bool e1000_sgmii_active_82575(struct e1000_hw *hw);
 static s32  e1000_reset_init_script_82575(struct e1000_hw *hw);
 static s32  e1000_read_mac_addr_82575(struct e1000_hw *hw);
 static void e1000_power_down_phy_copper_82575(struct e1000_hw *hw);
-void e1000_shutdown_fiber_serdes_link_82575(struct e1000_hw *hw);
+static void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw);
 static s32 e1000_set_pcie_completion_timeout(struct e1000_hw *hw);
 
+static const u16 e1000_82580_rxpbs_table[] =
+	{ 36, 72, 144, 1, 2, 4, 8, 16,
+	  35, 70, 140 };
+#define E1000_82580_RXPBS_TABLE_SIZE \
+	(sizeof(e1000_82580_rxpbs_table)/sizeof(u16))
+
 /**
  *  e1000_init_phy_params_82575 - Init PHY func ptrs.
  *  @hw: pointer to the HW structure
@@ -94,11 +104,11 @@ static s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
 	if (hw->phy.media_type != e1000_media_type_copper) {
 		phy->type = e1000_phy_none;
 		goto out;
-	} else {
-		phy->ops.power_up   = e1000_power_up_phy_copper;
-		phy->ops.power_down = e1000_power_down_phy_copper_82575;
 	}
 
+	phy->ops.power_up   = e1000_power_up_phy_copper;
+	phy->ops.power_down = e1000_power_down_phy_copper_82575;
+
 	phy->autoneg_mask           = AUTONEG_ADVERTISE_SPEED_DEFAULT;
 	phy->reset_delay_us         = 100;
 
@@ -112,6 +122,11 @@ static s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
 		phy->ops.reset      = e1000_phy_hw_reset_sgmii_82575;
 		phy->ops.read_reg   = e1000_read_phy_reg_sgmii_82575;
 		phy->ops.write_reg  = e1000_write_phy_reg_sgmii_82575;
+	} else if ((hw->mac.type == e1000_82580) ||
+	           (hw->mac.type == e1000_82580er)) {
+		phy->ops.reset      = e1000_phy_hw_reset_generic;
+		phy->ops.read_reg   = e1000_read_phy_reg_82580;
+		phy->ops.write_reg  = e1000_write_phy_reg_82580;
 	} else {
 		phy->ops.reset      = e1000_phy_hw_reset_generic;
 		phy->ops.read_reg   = e1000_read_phy_reg_igp;
@@ -140,6 +155,13 @@ static s32 e1000_init_phy_params_82575(struct e1000_hw *hw)
 		phy->ops.set_d0_lplu_state  = e1000_set_d0_lplu_state_82575;
 		phy->ops.set_d3_lplu_state  = e1000_set_d3_lplu_state_generic;
 		break;
+	case I82580_I_PHY_ID:
+		phy->type                   = e1000_phy_82580;
+		phy->ops.check_polarity     = e1000_check_polarity_82577;
+		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_82577;
+		phy->ops.get_cable_length   = e1000_get_cable_length_82577;
+		phy->ops.get_info           = e1000_get_phy_info_82577;
+		break;
 	default:
 		ret_val = -E1000_ERR_PHY;
 		goto out;
@@ -192,7 +214,7 @@ static s32 e1000_init_nvm_params_82575(struct e1000_hw *hw)
 	/* EEPROM access above 16k is unsupported */
 	if (size > 14)
 		size = 14;
-	nvm->word_size	= 1 << size;
+	nvm->word_size = 1 << size;
 
 	/* Function Pointers */
 	nvm->ops.acquire       = e1000_acquire_nvm_82575;
@@ -230,24 +252,41 @@ static s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
 	dev_spec->sgmii_active = FALSE;
 
 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
-	if ((ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) ==
-	    E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES) {
-		hw->phy.media_type = e1000_media_type_internal_serdes;
-		ctrl_ext |= E1000_CTRL_I2C_ENA;
-	} else if (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_SGMII) {
+	switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) {
+	case E1000_CTRL_EXT_LINK_MODE_SGMII:
 		dev_spec->sgmii_active = TRUE;
 		ctrl_ext |= E1000_CTRL_I2C_ENA;
-	} else {
+		break;
+	case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
+	case E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES:
+		hw->phy.media_type = e1000_media_type_internal_serdes;
+		ctrl_ext |= E1000_CTRL_I2C_ENA;
+		break;
+	default:
 		ctrl_ext &= ~E1000_CTRL_I2C_ENA;
+		break;
 	}
+
 	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
 
+	/*
+	 * if using i2c make certain the MDICNFG register is cleared to prevent
+	 * communications from being misrouted to the mdic registers
+	 */
+	if ((ctrl_ext & E1000_CTRL_I2C_ENA) &&
+	    ((hw->mac.type == e1000_82580) || (hw->mac.type == e1000_82580er)))
+		E1000_WRITE_REG(hw, E1000_MDICNFG, 0);
+
 	/* Set mta register count */
 	mac->mta_reg_count = 128;
+	/* Set uta register count */
+	mac->uta_reg_count = (hw->mac.type == e1000_82575) ? 0 : 128;
 	/* Set rar entry count */
 	mac->rar_entry_count = E1000_RAR_ENTRIES_82575;
 	if (mac->type == e1000_82576)
 		mac->rar_entry_count = E1000_RAR_ENTRIES_82576;
+	if ((mac->type == e1000_82580) || (mac->type == e1000_82580er))
+		mac->rar_entry_count = E1000_RAR_ENTRIES_82580;
 	/* Set if part includes ASF firmware */
 	mac->asf_firmware_present = TRUE;
 	/* Set if manageability features are enabled. */
@@ -260,6 +299,9 @@ static s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
 	/* bus type/speed/width */
 	mac->ops.get_bus_info = e1000_get_bus_info_pcie_generic;
 	/* reset */
+	if ((mac->type == e1000_82580) || (mac->type == e1000_82580er))
+		mac->ops.reset_hw = e1000_reset_hw_82580;
+	else
 	mac->ops.reset_hw = e1000_reset_hw_82575;
 	/* hw initialization */
 	mac->ops.init_hw = e1000_init_hw_82575;
@@ -269,9 +311,9 @@ static s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
 	mac->ops.setup_physical_interface =
 	        (hw->phy.media_type == e1000_media_type_copper)
 	                ? e1000_setup_copper_link_82575
-	                : e1000_setup_fiber_serdes_link_82575;
+	                : e1000_setup_serdes_link_82575;
 	/* physical interface shutdown */
-	mac->ops.shutdown_serdes = e1000_shutdown_fiber_serdes_link_82575;
+	mac->ops.shutdown_serdes = e1000_shutdown_serdes_link_82575;
 	/* check for link */
 	mac->ops.check_for_link = e1000_check_for_link_82575;
 	/* receive address register setting */
@@ -302,6 +344,9 @@ static s32 e1000_init_mac_params_82575(struct e1000_hw *hw)
 	/* link info */
 	mac->ops.get_link_up_info = e1000_get_link_up_info_82575;
 
+	/* set lan id for port to determine which phy lock to use */
+	hw->mac.ops.set_lan_id(hw);
+
 	return E1000_SUCCESS;
 }
 
@@ -334,6 +379,10 @@ static s32 e1000_acquire_phy_82575(struct e1000_hw *hw)
 
 	if (hw->bus.func == E1000_FUNC_1)
 		mask = E1000_SWFW_PHY1_SM;
+	else if (hw->bus.func == E1000_FUNC_2)
+		mask = E1000_SWFW_PHY2_SM;
+	else if (hw->bus.func == E1000_FUNC_3)
+		mask = E1000_SWFW_PHY3_SM;
 
 	return e1000_acquire_swfw_sync_82575(hw, mask);
 }
@@ -352,6 +401,10 @@ static void e1000_release_phy_82575(struct e1000_hw *hw)
 
 	if (hw->bus.func == E1000_FUNC_1)
 		mask = E1000_SWFW_PHY1_SM;
+	else if (hw->bus.func == E1000_FUNC_2)
+		mask = E1000_SWFW_PHY2_SM;
+	else if (hw->bus.func == E1000_FUNC_3)
+		mask = E1000_SWFW_PHY3_SM;
 
 	e1000_release_swfw_sync_82575(hw, mask);
 }
@@ -368,47 +421,25 @@ static void e1000_release_phy_82575(struct e1000_hw *hw)
 static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
                                           u16 *data)
 {
-	struct e1000_phy_info *phy = &hw->phy;
-	u32 i, i2ccmd = 0;
+	s32 ret_val = -E1000_ERR_PARAM;
 
 	DEBUGFUNC("e1000_read_phy_reg_sgmii_82575");
 
 	if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
 		DEBUGOUT1("PHY Address %u is out of range\n", offset);
-		return -E1000_ERR_PARAM;
+		goto out;
 	}
 
-	/*
-	 * Set up Op-code, Phy Address, and register address in the I2CCMD
-	 * register.  The MAC will take care of interfacing with the
-	 * PHY to retrieve the desired data.
-	 */
-	i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
-	          (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
-	          (E1000_I2CCMD_OPCODE_READ));
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		goto out;
 
-	E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
+	ret_val = e1000_read_phy_reg_i2c(hw, offset, data);
 
-	/* Poll the ready bit to see if the I2C read completed */
-	for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
-		usec_delay(50);
-		i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD);
-		if (i2ccmd & E1000_I2CCMD_READY)
-			break;
-	}
-	if (!(i2ccmd & E1000_I2CCMD_READY)) {
-		DEBUGOUT("I2CCMD Read did not complete\n");
-		return -E1000_ERR_PHY;
-	}
-	if (i2ccmd & E1000_I2CCMD_ERROR) {
-		DEBUGOUT("I2CCMD Error bit set\n");
-		return -E1000_ERR_PHY;
-	}
+	hw->phy.ops.release(hw);
 
-	/* Need to byte-swap the 16-bit value. */
-	*data = ((i2ccmd >> 8) & 0x00FF) | ((i2ccmd << 8) & 0xFF00);
-
-	return E1000_SUCCESS;
+out:
+	return ret_val;
 }
 
 /**
@@ -423,49 +454,25 @@ static s32 e1000_read_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
 static s32 e1000_write_phy_reg_sgmii_82575(struct e1000_hw *hw, u32 offset,
                                            u16 data)
 {
-	struct e1000_phy_info *phy = &hw->phy;
-	u32 i, i2ccmd = 0;
-	u16 phy_data_swapped;
+	s32 ret_val = -E1000_ERR_PARAM;
 
 	DEBUGFUNC("e1000_write_phy_reg_sgmii_82575");
 
 	if (offset > E1000_MAX_SGMII_PHY_REG_ADDR) {
 		DEBUGOUT1("PHY Address %d is out of range\n", offset);
-		return -E1000_ERR_PARAM;
+		goto out;
 	}
 
-	/* Swap the data bytes for the I2C interface */
-	phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00);
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		goto out;
 
-	/*
-	 * Set up Op-code, Phy Address, and register address in the I2CCMD
-	 * register.  The MAC will take care of interfacing with the
-	 * PHY to retrieve the desired data.
-	 */
-	i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
-	          (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
-	          E1000_I2CCMD_OPCODE_WRITE |
-	          phy_data_swapped);
+	ret_val = e1000_write_phy_reg_i2c(hw, offset, data);
 
-	E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
+	hw->phy.ops.release(hw);
 
-	/* Poll the ready bit to see if the I2C read completed */
-	for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
-		usec_delay(50);
-		i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD);
-		if (i2ccmd & E1000_I2CCMD_READY)
-			break;
-	}
-	if (!(i2ccmd & E1000_I2CCMD_READY)) {
-		DEBUGOUT("I2CCMD Write did not complete\n");
-		return -E1000_ERR_PHY;
-	}
-	if (i2ccmd & E1000_I2CCMD_ERROR) {
-		DEBUGOUT("I2CCMD Error bit set\n");
-		return -E1000_ERR_PHY;
-	}
-
-	return E1000_SUCCESS;
+out:
+	return ret_val;
 }
 
 /**
@@ -480,6 +487,7 @@ static s32 e1000_get_phy_id_82575(struct e1000_hw *hw)
 	struct e1000_phy_info *phy = &hw->phy;
 	s32  ret_val = E1000_SUCCESS;
 	u16 phy_id;
+	u32 ctrl_ext;
 
 	DEBUGFUNC("e1000_get_phy_id_82575");
 
@@ -490,12 +498,19 @@ static s32 e1000_get_phy_id_82575(struct e1000_hw *hw)
 	 * work.  The result of this function should mean phy->phy_addr
 	 * and phy->id are set correctly.
 	 */
-	if (!(e1000_sgmii_active_82575(hw))) {
+	if (!e1000_sgmii_active_82575(hw)) {
 		phy->addr = 1;
 		ret_val = e1000_get_phy_id(hw);
 		goto out;
 	}
 
+	/* Power on sgmii phy if it is disabled */
+	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
+	E1000_WRITE_REG(hw, E1000_CTRL_EXT,
+	                ctrl_ext & ~E1000_CTRL_EXT_SDP3_DATA);
+	E1000_WRITE_FLUSH(hw);
+	msec_delay(300);
+
 	/*
 	 * The address field in the I2CCMD register is 3 bits and 0 is invalid.
 	 * Therefore, we need to test 1-7
@@ -522,10 +537,12 @@ static s32 e1000_get_phy_id_82575(struct e1000_hw *hw)
 	if (phy->addr == 8) {
 		phy->addr = 0;
 		ret_val = -E1000_ERR_PHY;
-		goto out;
+	} else {
+		ret_val = e1000_get_phy_id(hw);
 	}
 
-	ret_val = e1000_get_phy_id(hw);
+	/* restore previous sfp cage power state */
+	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
 
 out:
 	return ret_val;
@@ -792,21 +809,23 @@ static s32 e1000_get_cfg_done_82575(struct e1000_hw *hw)
 
 	if (hw->bus.func == E1000_FUNC_1)
 		mask = E1000_NVM_CFG_DONE_PORT_1;
+	else if (hw->bus.func == E1000_FUNC_2)
+		mask = E1000_NVM_CFG_DONE_PORT_2;
+	else if (hw->bus.func == E1000_FUNC_3)
+		mask = E1000_NVM_CFG_DONE_PORT_3;
 	while (timeout) {
 		if (E1000_READ_REG(hw, E1000_EEMNGCTL) & mask)
 			break;
 		msec_delay(1);
 		timeout--;
 	}
-	if (!timeout) {
+	if (!timeout)
 		DEBUGOUT("MNG configuration cycle has not completed.\n");
-	}
 
 	/* If EEPROM is not marked present, init the PHY manually */
 	if (((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0) &&
-	    (hw->phy.type == e1000_phy_igp_3)) {
+	    (hw->phy.type == e1000_phy_igp_3))
 		e1000_phy_init_script_igp3(hw);
-	}
 
 	return ret_val;
 }
@@ -828,14 +847,12 @@ static s32 e1000_get_link_up_info_82575(struct e1000_hw *hw, u16 *speed,
 
 	DEBUGFUNC("e1000_get_link_up_info_82575");
 
-	if (hw->phy.media_type != e1000_media_type_copper ||
-	    e1000_sgmii_active_82575(hw)) {
+	if (hw->phy.media_type != e1000_media_type_copper)
 		ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, speed,
 		                                               duplex);
-	} else {
+	else
 		ret_val = e1000_get_speed_and_duplex_copper_generic(hw, speed,
 		                                                    duplex);
-	}
 
 	return ret_val;
 }
@@ -854,9 +871,7 @@ static s32 e1000_check_for_link_82575(struct e1000_hw *hw)
 
 	DEBUGFUNC("e1000_check_for_link_82575");
 
-	/* SGMII link check is done through the PCS register. */
-	if ((hw->phy.media_type != e1000_media_type_copper) ||
-	    (e1000_sgmii_active_82575(hw))) {
+	if (hw->phy.media_type != e1000_media_type_copper) {
 		ret_val = e1000_get_pcs_speed_and_duplex_82575(hw, &speed,
 		                                               &duplex);
 		/*
@@ -930,22 +945,28 @@ static s32 e1000_get_pcs_speed_and_duplex_82575(struct e1000_hw *hw,
 }
 
 /**
- *  e1000_shutdown_fiber_serdes_link_82575 - Remove link during power down
+ *  e1000_shutdown_serdes_link_82575 - Remove link during power down
  *  @hw: pointer to the HW structure
  *
- *  In the case of fiber serdes shut down optics and PCS on driver unload
+ *  In the case of serdes shut down sfp and PCS on driver unload
  *  when management pass thru is not enabled.
  **/
-void e1000_shutdown_fiber_serdes_link_82575(struct e1000_hw *hw)
+void e1000_shutdown_serdes_link_82575(struct e1000_hw *hw)
 {
 	u32 reg;
 	u16 eeprom_data = 0;
 
-	if (hw->phy.media_type != e1000_media_type_internal_serdes)
+	if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
+	    !e1000_sgmii_active_82575(hw))
 		return;
 
 	if (hw->bus.func == E1000_FUNC_0)
 		hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
+	else if ((hw->mac.type == e1000_82580) ||
+	         (hw->mac.type == e1000_82580er))
+		hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_A +
+		                 NVM_82580_LAN_FUNC_OFFSET(hw->bus.func), 1,
+		                 &eeprom_data);
 	else if (hw->bus.func == E1000_FUNC_1)
 		hw->nvm.ops.read(hw, NVM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
 
@@ -962,10 +983,10 @@ void e1000_shutdown_fiber_serdes_link_82575(struct e1000_hw *hw)
 
 		/* shutdown the laser */
 		reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
-		reg |= E1000_CTRL_EXT_SDP7_DATA;
+		reg |= E1000_CTRL_EXT_SDP3_DATA;
 		E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
 
-		/* flush the write to verfiy completion */
+		/* flush the write to verify completion */
 		E1000_WRITE_FLUSH(hw);
 		msec_delay(1);
 	}
@@ -973,45 +994,6 @@ void e1000_shutdown_fiber_serdes_link_82575(struct e1000_hw *hw)
 	return;
 }
 
-/**
- *  e1000_vmdq_set_loopback_pf - enable or disable vmdq loopback
- *  @hw: pointer to the HW structure
- *  @enable: state to enter, either enabled or disabled
- *
- *  enables/disables L2 switch loopback functionality
- **/
-void e1000_vmdq_set_loopback_pf(struct e1000_hw *hw, bool enable)
-{
-	u32 reg;
-
-	reg = E1000_READ_REG(hw, E1000_DTXSWC);
-	if (enable)
-		reg |= E1000_DTXSWC_VMDQ_LOOPBACK_EN;
-	else
-		reg &= ~(E1000_DTXSWC_VMDQ_LOOPBACK_EN);
-	E1000_WRITE_REG(hw, E1000_DTXSWC, reg);
-}
-
-/**
- *  e1000_vmdq_set_replication_pf - enable or disable vmdq replication
- *  @hw: pointer to the HW structure
- *  @enable: state to enter, either enabled or disabled
- *
- *  enables/disables replication of packets across multiple pools
- **/
-void e1000_vmdq_set_replication_pf(struct e1000_hw *hw, bool enable)
-{
-	u32 reg;
-
-	reg = E1000_READ_REG(hw, E1000_VT_CTL);
-	if (enable)
-		reg |= E1000_VT_CTL_VM_REPL_EN;
-	else
-		reg &= ~(E1000_VT_CTL_VM_REPL_EN);
-
-	E1000_WRITE_REG(hw, E1000_VT_CTL, reg);
-}
-
 /**
  *  e1000_reset_hw_82575 - Reset hardware
  *  @hw: pointer to the HW structure
@@ -1111,6 +1093,11 @@ static s32 e1000_init_hw_82575(struct e1000_hw *hw)
 	for (i = 0; i < mac->mta_reg_count; i++)
 		E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, 0);
 
+	/* Zero out the Unicast HASH table */
+	DEBUGOUT("Zeroing the UTA\n");
+	for (i = 0; i < mac->uta_reg_count; i++)
+		E1000_WRITE_REG_ARRAY(hw, E1000_UTA, i, 0);
+
 	/* Setup link and flow control */
 	ret_val = mac->ops.setup_link(hw);
 
@@ -1137,7 +1124,6 @@ static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
 {
 	u32 ctrl;
 	s32  ret_val;
-	bool link;
 
 	DEBUGFUNC("e1000_setup_copper_link_82575");
 
@@ -1146,6 +1132,20 @@ static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
 	ctrl &= ~(E1000_CTRL_FRCSPD | E1000_CTRL_FRCDPX);
 	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
 
+	ret_val = e1000_setup_serdes_link_82575(hw);
+	if (ret_val)
+		goto out;
+
+	if (e1000_sgmii_active_82575(hw) && !hw->phy.reset_disable) {
+		/* allow time for SFP cage time to power up phy */
+		msec_delay(300);
+
+		ret_val = hw->phy.ops.reset(hw);
+		if (ret_val) {
+			DEBUGOUT("Error resetting the PHY.\n");
+			goto out;
+		}
+	}
 	switch (hw->phy.type) {
 	case e1000_phy_m88:
 		ret_val = e1000_copper_link_setup_m88(hw);
@@ -1153,6 +1153,9 @@ static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
 	case e1000_phy_igp_3:
 		ret_val = e1000_copper_link_setup_igp(hw);
 		break;
+	case e1000_phy_82580:
+		ret_val = e1000_copper_link_setup_82577(hw);
+		break;
 	default:
 		ret_val = -E1000_ERR_PHY;
 		break;
@@ -1161,66 +1164,30 @@ static s32 e1000_setup_copper_link_82575(struct e1000_hw *hw)
 	if (ret_val)
 		goto out;
 
-	if (hw->mac.autoneg) {
-		/*
-		 * Setup autoneg and flow control advertisement
-		 * and perform autonegotiation.
-		 */
-		ret_val = e1000_copper_link_autoneg(hw);
-		if (ret_val)
-			goto out;
-	} else {
-		/*
-		 * PHY will be set to 10H, 10F, 100H or 100F
-		 * depending on user settings.
-		 */
-		DEBUGOUT("Forcing Speed and Duplex\n");
-		ret_val = hw->phy.ops.force_speed_duplex(hw);
-		if (ret_val) {
-			DEBUGOUT("Error Forcing Speed and Duplex\n");
-			goto out;
-		}
-	}
-
-	ret_val = e1000_configure_pcs_link_82575(hw);
-	if (ret_val)
-		goto out;
-
-	/*
-	 * Check link status. Wait up to 100 microseconds for link to become
-	 * valid.
-	 */
-	ret_val = e1000_phy_has_link_generic(hw,
-	                                     COPPER_LINK_UP_LIMIT,
-	                                     10,
-	                                     &link);
-	if (ret_val)
-		goto out;
-
-	if (link) {
-		DEBUGOUT("Valid link established!!!\n");
-		/* Config the MAC and PHY after link is up */
-		e1000_config_collision_dist_generic(hw);
-		ret_val = e1000_config_fc_after_link_up_generic(hw);
-	} else {
-		DEBUGOUT("Unable to establish link!!!\n");
-	}
-
+	ret_val = e1000_setup_copper_link_generic(hw);
 out:
 	return ret_val;
 }
 
 /**
- *  e1000_setup_fiber_serdes_link_82575 - Setup link for fiber/serdes
+ *  e1000_setup_serdes_link_82575 - Setup link for serdes
  *  @hw: pointer to the HW structure
  *
- *  Configures speed and duplex for fiber and serdes links.
+ *  Configure the physical coding sub-layer (PCS) link.  The PCS link is
+ *  used on copper connections where the serialized gigabit media independent
+ *  interface (sgmii), or serdes fiber is being used.  Configures the link
+ *  for auto-negotiation or forces speed/duplex.
  **/
-static s32 e1000_setup_fiber_serdes_link_82575(struct e1000_hw *hw)
+static s32 e1000_setup_serdes_link_82575(struct e1000_hw *hw)
 {
-	u32 reg;
+	u32 ctrl_ext, ctrl_reg, reg;
+	bool pcs_autoneg;
 
-	DEBUGFUNC("e1000_setup_fiber_serdes_link_82575");
+	DEBUGFUNC("e1000_setup_serdes_link_82575");
+
+	if ((hw->phy.media_type != e1000_media_type_internal_serdes) &&
+	    !e1000_sgmii_active_82575(hw))
+		return E1000_SUCCESS;
 
 	/*
 	 * On the 82575, SerDes loopback mode persists until it is
@@ -1230,25 +1197,54 @@ static s32 e1000_setup_fiber_serdes_link_82575(struct e1000_hw *hw)
 	 */
 	E1000_WRITE_REG(hw, E1000_SCTL, E1000_SCTL_DISABLE_SERDES_LOOPBACK);
 
-	/* Force link up, set 1gb */
-	reg = E1000_READ_REG(hw, E1000_CTRL);
-	reg |= E1000_CTRL_SLU | E1000_CTRL_SPD_1000 | E1000_CTRL_FRCSPD;
+	/* power on the sfp cage if present */
+	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
+	ctrl_ext &= ~E1000_CTRL_EXT_SDP3_DATA;
+	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
+
+	ctrl_reg = E1000_READ_REG(hw, E1000_CTRL);
+	ctrl_reg |= E1000_CTRL_SLU;
+
 	if (hw->mac.type == e1000_82575 || hw->mac.type == e1000_82576) {
 		/* set both sw defined pins */
-		reg |= E1000_CTRL_SWDPIN0 | E1000_CTRL_SWDPIN1;
-	}
-	E1000_WRITE_REG(hw, E1000_CTRL, reg);
-	/* Power on phy for 82576 fiber adapters */
-	if (hw->mac.type == e1000_82576) {
-		reg = E1000_READ_REG(hw, E1000_CTRL_EXT);
-		reg &= ~E1000_CTRL_EXT_SDP7_DATA;
-		E1000_WRITE_REG(hw, E1000_CTRL_EXT, reg);
+		ctrl_reg |= E1000_CTRL_SWDPIN0 | E1000_CTRL_SWDPIN1;
+
+		/* Set switch control to serdes energy detect */
+		reg = E1000_READ_REG(hw, E1000_CONNSW);
+		reg |= E1000_CONNSW_ENRGSRC;
+		E1000_WRITE_REG(hw, E1000_CONNSW, reg);
 	}
 
-	/* Set switch control to serdes energy detect */
-	reg = E1000_READ_REG(hw, E1000_CONNSW);
-	reg |= E1000_CONNSW_ENRGSRC;
-	E1000_WRITE_REG(hw, E1000_CONNSW, reg);
+	reg = E1000_READ_REG(hw, E1000_PCS_LCTL);
+
+	/* default pcs_autoneg to the same setting as mac autoneg */
+	pcs_autoneg = hw->mac.autoneg;
+
+	switch (ctrl_ext & E1000_CTRL_EXT_LINK_MODE_MASK) {
+	case E1000_CTRL_EXT_LINK_MODE_SGMII:
+		/* sgmii mode lets the phy handle forcing speed/duplex */
+		pcs_autoneg = TRUE;
+		/* autoneg time out should be disabled for SGMII mode */
+		reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT);
+		break;
+	case E1000_CTRL_EXT_LINK_MODE_1000BASE_KX:
+		/* disable PCS autoneg and support parallel detect only */
+		pcs_autoneg = FALSE;
+	default:
+		/*
+		 * non-SGMII modes only supports a speed of 1000/Full for the
+		 * link so it is best to just force the MAC and let the pcs
+		 * link either autoneg or be forced to 1000/Full
+		 */
+		ctrl_reg |= E1000_CTRL_SPD_1000 | E1000_CTRL_FRCSPD |
+		            E1000_CTRL_FD | E1000_CTRL_FRCDPX;
+
+		/* set speed of 1000/Full if speed/duplex is forced */
+		reg |= E1000_PCS_LCTL_FSV_1000 | E1000_PCS_LCTL_FDV_FULL;
+		break;
+	}
+
+	E1000_WRITE_REG(hw, E1000_CTRL, ctrl_reg);
 
 	/*
 	 * New SerDes mode allows for forcing speed or autonegotiating speed
@@ -1256,35 +1252,34 @@ static s32 e1000_setup_fiber_serdes_link_82575(struct e1000_hw *hw)
 	 * mode that will be compatible with older link partners and switches.
 	 * However, both are supported by the hardware and some drivers/tools.
 	 */
-	reg = E1000_READ_REG(hw, E1000_PCS_LCTL);
-
 	reg &= ~(E1000_PCS_LCTL_AN_ENABLE | E1000_PCS_LCTL_FLV_LINK_UP |
-		E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK);
+	         E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK);
 
-	if (hw->mac.autoneg) {
+	/*
+	 * We force flow control to prevent the CTRL register values from being
+	 * overwritten by the autonegotiated flow control values
+	 */
+	reg |= E1000_PCS_LCTL_FORCE_FCTRL;
+
+	if (pcs_autoneg) {
 		/* Set PCS register for autoneg */
-		reg |= E1000_PCS_LCTL_FSV_1000 |      /* Force 1000    */
-		       E1000_PCS_LCTL_FDV_FULL |      /* SerDes Full duplex */
-		       E1000_PCS_LCTL_AN_ENABLE |     /* Enable Autoneg */
-		       E1000_PCS_LCTL_AN_RESTART;     /* Restart autoneg */
-		DEBUGOUT1("Configuring Autoneg; PCS_LCTL = 0x%08X\n", reg);
+		reg |= E1000_PCS_LCTL_AN_ENABLE | /* Enable Autoneg */
+		       E1000_PCS_LCTL_AN_RESTART; /* Restart autoneg */
+		DEBUGOUT1("Configuring Autoneg:PCS_LCTL=0x%08X\n", reg);
 	} else {
-		/* Set PCS register for forced speed */
-		reg |= E1000_PCS_LCTL_FLV_LINK_UP |   /* Force link up */
-		       E1000_PCS_LCTL_FSV_1000 |      /* Force 1000    */
-		       E1000_PCS_LCTL_FDV_FULL |      /* SerDes Full duplex */
-		       E1000_PCS_LCTL_FSD |           /* Force Speed */
-		       E1000_PCS_LCTL_FORCE_LINK;     /* Force Link */
-		DEBUGOUT1("Configuring Forced Link; PCS_LCTL = 0x%08X\n", reg);
-	}
+		/* Set PCS register for forced link */
+		reg |= E1000_PCS_LCTL_FSD |        /* Force Speed */
+		       E1000_PCS_LCTL_FORCE_LINK | /* Force Link */
+		       E1000_PCS_LCTL_FLV_LINK_UP; /* Force link value up */
 
-	if (hw->mac.type == e1000_82576) {
-		reg |= E1000_PCS_LCTL_FORCE_FCTRL;
-		e1000_force_mac_fc_generic(hw);
+		DEBUGOUT1("Configuring Forced Link:PCS_LCTL=0x%08X\n", reg);
 	}
 
 	E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg);
 
+	if (!e1000_sgmii_active_82575(hw))
+		e1000_force_mac_fc_generic(hw);
+
 	return E1000_SUCCESS;
 }
 
@@ -1323,72 +1318,6 @@ out:
 	return ret_val;
 }
 
-/**
- *  e1000_configure_pcs_link_82575 - Configure PCS link
- *  @hw: pointer to the HW structure
- *
- *  Configure the physical coding sub-layer (PCS) link.  The PCS link is
- *  only used on copper connections where the serialized gigabit media
- *  independent interface (sgmii) is being used.  Configures the link
- *  for auto-negotiation or forces speed/duplex.
- **/
-static s32 e1000_configure_pcs_link_82575(struct e1000_hw *hw)
-{
-	struct e1000_mac_info *mac = &hw->mac;
-	u32 reg = 0;
-
-	DEBUGFUNC("e1000_configure_pcs_link_82575");
-
-	if (hw->phy.media_type != e1000_media_type_copper ||
-	    !(e1000_sgmii_active_82575(hw)))
-		goto out;
-
-	/* For SGMII, we need to issue a PCS autoneg restart */
-	reg = E1000_READ_REG(hw, E1000_PCS_LCTL);
-
-	/* AN time out should be disabled for SGMII mode */
-	reg &= ~(E1000_PCS_LCTL_AN_TIMEOUT);
-
-	if (mac->autoneg) {
-		/* Make sure forced speed and force link are not set */
-		reg &= ~(E1000_PCS_LCTL_FSD | E1000_PCS_LCTL_FORCE_LINK);
-
-		/*
-		 * The PHY should be setup prior to calling this function.
-		 * All we need to do is restart autoneg and enable autoneg.
-		 */
-		reg |= E1000_PCS_LCTL_AN_RESTART | E1000_PCS_LCTL_AN_ENABLE;
-	} else {
-		/* Set PCS register for forced speed */
-
-		/* Turn off bits for full duplex, speed, and autoneg */
-		reg &= ~(E1000_PCS_LCTL_FSV_1000 |
-		         E1000_PCS_LCTL_FSV_100 |
-		         E1000_PCS_LCTL_FDV_FULL |
-		         E1000_PCS_LCTL_AN_ENABLE);
-
-		/* Check for duplex first */
-		if (mac->forced_speed_duplex & E1000_ALL_FULL_DUPLEX)
-			reg |= E1000_PCS_LCTL_FDV_FULL;
-
-		/* Now set speed */
-		if (mac->forced_speed_duplex & E1000_ALL_100_SPEED)
-			reg |= E1000_PCS_LCTL_FSV_100;
-
-		/* Force speed and force link */
-		reg |= E1000_PCS_LCTL_FSD |
-		       E1000_PCS_LCTL_FORCE_LINK |
-		       E1000_PCS_LCTL_FLV_LINK_UP;
-
-		DEBUGOUT1("Wrote 0x%08X to PCS_LCTL to configure forced link\n",
-		          reg);
-	}
-	E1000_WRITE_REG(hw, E1000_PCS_LCTL, reg);
-
-out:
-	return E1000_SUCCESS;
-}
-
 /**
  *  e1000_sgmii_active_82575 - Return sgmii state
  *  @hw: pointer to the HW structure
@@ -1548,7 +1477,8 @@ static void e1000_clear_hw_cntrs_82575(struct e1000_hw *hw)
 	E1000_READ_REG(hw, E1000_LENERRS);
 
 	/* This register should not be read in copper configurations */
-	if (hw->phy.media_type == e1000_media_type_internal_serdes)
+	if ((hw->phy.media_type == e1000_media_type_internal_serdes) ||
+	    e1000_sgmii_active_82575(hw))
 		E1000_READ_REG(hw, E1000_SCVPC);
 }
 
@@ -1677,3 +1607,235 @@ out:
 	return ret_val;
 }
 
+/**
+ *  e1000_vmdq_set_loopback_pf - enable or disable vmdq loopback
+ *  @hw: pointer to the hardware struct
+ *  @enable: state to enter, either enabled or disabled
+ *
+ *  enables/disables L2 switch loopback functionality.
+ **/
+void e1000_vmdq_set_loopback_pf(struct e1000_hw *hw, bool enable)
+{
+	u32 dtxswc = E1000_READ_REG(hw, E1000_DTXSWC);
+
+	if (enable)
+		dtxswc |= E1000_DTXSWC_VMDQ_LOOPBACK_EN;
+	else
+		dtxswc &= ~E1000_DTXSWC_VMDQ_LOOPBACK_EN;
+
+	E1000_WRITE_REG(hw, E1000_DTXSWC, dtxswc);
+}
+
+/**
+ *  e1000_vmdq_set_replication_pf - enable or disable vmdq replication
+ *  @hw: pointer to the hardware struct
+ *  @enable: state to enter, either enabled or disabled
+ *
+ *  enables/disables replication of packets across multiple pools.
+ **/
+void e1000_vmdq_set_replication_pf(struct e1000_hw *hw, bool enable)
+{
+	u32 vt_ctl = E1000_READ_REG(hw, E1000_VT_CTL);
+
+	if (enable)
+		vt_ctl |= E1000_VT_CTL_VM_REPL_EN;
+	else
+		vt_ctl &= ~E1000_VT_CTL_VM_REPL_EN;
+
+	E1000_WRITE_REG(hw, E1000_VT_CTL, vt_ctl);
+}
+
+/**
+ *  e1000_read_phy_reg_82580 - Read 82580 MDI control register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to be read
+ *  @data: pointer to the read data
+ *
+ *  Reads the MDI control register in the PHY at offset and stores the
+ *  information read to data.
+ **/
+static s32 e1000_read_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 *data)
+{
+	u32 mdicnfg = 0;
+	s32 ret_val;
+
+	DEBUGFUNC("e1000_read_phy_reg_82580");
+
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		goto out;
+
+	/*
+	 * We config the phy address in MDICNFG register now. Same bits
+	 * as before. The values in MDIC can be written but will be
+	 * ignored. This allows us to call the old function after
+	 * configuring the PHY address in the new register
+	 */
+	mdicnfg = (hw->phy.addr << E1000_MDIC_PHY_SHIFT);
+	E1000_WRITE_REG(hw, E1000_MDICNFG, mdicnfg);
+
+	ret_val = e1000_read_phy_reg_mdic(hw, offset, data);
+
+	hw->phy.ops.release(hw);
+
+out:
+	return ret_val;
+}
+
+/**
+ *  e1000_write_phy_reg_82580 - Write 82580 MDI control register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to write to
+ *  @data: data to write to register at offset
+ *
+ *  Writes data to MDI control register in the PHY at offset.
+ **/
+static s32 e1000_write_phy_reg_82580(struct e1000_hw *hw, u32 offset, u16 data)
+{
+	u32 mdicnfg = 0;
+	s32 ret_val;
+
+	DEBUGFUNC("e1000_write_phy_reg_82580");
+
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		goto out;
+
+	/*
+	 * We config the phy address in MDICNFG register now. Same bits
+	 * as before. The values in MDIC can be written but will be
+	 * ignored. This allows us to call the old function after
+	 * configuring the PHY address in the new register
+	 */
+	mdicnfg = (hw->phy.addr << E1000_MDIC_PHY_SHIFT);
+	E1000_WRITE_REG(hw, E1000_MDICNFG, mdicnfg);
+
+	ret_val = e1000_write_phy_reg_mdic(hw, offset, data);
+
+	hw->phy.ops.release(hw);
+
+out:
+	return ret_val;
+}
+/**
+ *  e1000_reset_hw_82580 - Reset hardware
+ *  @hw: pointer to the HW structure
+ *
+ *  This resets function or entire device (all ports, etc.)
+ *  to a known state.
+ **/
+static s32 e1000_reset_hw_82580(struct e1000_hw *hw)
+{
+	s32 ret_val = E1000_SUCCESS;
+	/* BH SW mailbox bit in SW_FW_SYNC */
+	u16 swmbsw_mask = E1000_SW_SYNCH_MB;
+	u32 ctrl, icr;
+	bool global_device_reset = hw->dev_spec._82575.global_device_reset;
+
+	DEBUGFUNC("e1000_reset_hw_82580");
+
+	hw->dev_spec._82575.global_device_reset = FALSE;
+
+	/* Get current control state. */
+	ctrl = E1000_READ_REG(hw, E1000_CTRL);
+
+	/*
+	 * Prevent the PCI-E bus from sticking if there is no TLP connection
+	 * on the last TLP read/write transaction when MAC is reset.
+	 */
+	ret_val = e1000_disable_pcie_master_generic(hw);
+	if (ret_val)
+		DEBUGOUT("PCI-E Master disable polling has failed.\n");
+
+	DEBUGOUT("Masking off all interrupts\n");
+	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
+	E1000_WRITE_REG(hw, E1000_RCTL, 0);
+	E1000_WRITE_REG(hw, E1000_TCTL, E1000_TCTL_PSP);
+	E1000_WRITE_FLUSH(hw);
+
+	msec_delay(10);
+
+	/* Determine whether or not a global dev reset is requested */
+	if (global_device_reset &&
+		e1000_acquire_swfw_sync_82575(hw, swmbsw_mask))
+			global_device_reset = FALSE;
+
+	if (global_device_reset &&
+		!(E1000_READ_REG(hw, E1000_STATUS) & E1000_STAT_DEV_RST_SET))
+		ctrl |= E1000_CTRL_DEV_RST;
+	else
+		ctrl |= E1000_CTRL_RST;
+
+	E1000_WRITE_REG(hw, E1000_CTRL, ctrl);
+
+	/* Add delay to insure DEV_RST has time to complete */
+	if (global_device_reset)
+		msec_delay(5);
+
+	ret_val = e1000_get_auto_rd_done_generic(hw);
+	if (ret_val) {
+		/*
+		 * When auto config read does not complete, do not
+		 * return with an error. This can happen in situations
+		 * where there is no eeprom and prevents getting link.
+		 */
+		DEBUGOUT("Auto Read Done did not complete\n");
+	}
+
+	/* If EEPROM is not present, run manual init scripts */
+	if ((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0)
+		e1000_reset_init_script_82575(hw);
+
+	/* clear global device reset status bit */
+	E1000_WRITE_REG(hw, E1000_STATUS, E1000_STAT_DEV_RST_SET);
+
+	/* Clear any pending interrupt events. */
+	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
+	icr = E1000_READ_REG(hw, E1000_ICR);
+
+	/* Install any alternate MAC address into RAR0 */
+	ret_val = e1000_check_alt_mac_addr_generic(hw);
+
+	/* Release semaphore */
+	if (global_device_reset)
+		e1000_release_swfw_sync_82575(hw, swmbsw_mask);
+
+	return ret_val;
+}
+
+/**
+ *  e1000_rxpbs_adjust_82580 - adjust RXPBS value to reflect actual RX PBA size
+ *  @data: data received by reading RXPBS register
+ *
+ *  The 82580 uses a table based approach for packet buffer allocation sizes.
+ *  This function converts the retrieved value into the correct table value
+ *     0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7
+ *  0x0 36  72 144   1   2   4   8  16
+ *  0x8 35  70 140 rsv rsv rsv rsv rsv
+ */
+u16 e1000_rxpbs_adjust_82580(u32 data)
+{
+	u16 ret_val = 0;
+
+	if (data < E1000_82580_RXPBS_TABLE_SIZE)
+		ret_val = e1000_82580_rxpbs_table[data];
+
+	return ret_val;
+}
+/**
+ *  e1000_erfuse_check_82580 - ER Fuse check
+ *  @hw: pointer to the HW structure
+ *
+ *  This function returns the status of the ER Fuse
+ **/
+s32 e1000_erfuse_check_82580(struct e1000_hw *hw)
+{
+	s32 ret_val = E1000_SUCCESS;
+	s32 ufuse_reg;
+
+	ufuse_reg = E1000_READ_REG(hw, E1000_UFUSE);
+	if ((ufuse_reg & E1000_ERFUSE) == E1000_ERFUSE)
+		ret_val = E1000_ERFUSE_FAILURE;
+
+	return ret_val;
+}
diff --git a/sys/dev/e1000/e1000_82575.h b/sys/dev/e1000/e1000_82575.h
index 34e0d29398f..f22a963fd3e 100644
--- a/sys/dev/e1000/e1000_82575.h
+++ b/sys/dev/e1000/e1000_82575.h
@@ -51,10 +51,14 @@
  */
 #define E1000_RAR_ENTRIES_82575   16
 #define E1000_RAR_ENTRIES_82576   24
+#define E1000_RAR_ENTRIES_82580        24
+#define E1000_SW_SYNCH_MB              0x00000100
+#define E1000_STAT_DEV_RST_SET         0x00100000
+#define E1000_CTRL_DEV_RST             0x20000000
 
 #ifdef E1000_BIT_FIELDS
 struct e1000_adv_data_desc {
-	u64 buffer_addr;    /* Address of the descriptor's data buffer */
+	__le64 buffer_addr;    /* Address of the descriptor's data buffer */
 	union {
 		u32 data;
 		struct {
@@ -128,6 +132,7 @@ struct e1000_adv_context_desc {
 #define E1000_SRRCTL_DESCTYPE_HDR_REPLICATION           0x06000000
 #define E1000_SRRCTL_DESCTYPE_HDR_REPLICATION_LARGE_PKT 0x08000000
 #define E1000_SRRCTL_DESCTYPE_MASK                      0x0E000000
+#define E1000_SRRCTL_TIMESTAMP                          0x40000000
 #define E1000_SRRCTL_DROP_EN                            0x80000000
 
 #define E1000_SRRCTL_BSIZEPKT_MASK      0x0000007F
@@ -142,6 +147,7 @@ struct e1000_adv_context_desc {
 #define E1000_MRQC_RSS_FIELD_IPV4_UDP       0x00400000
 #define E1000_MRQC_RSS_FIELD_IPV6_UDP       0x00800000
 #define E1000_MRQC_RSS_FIELD_IPV6_UDP_EX    0x01000000
+#define E1000_MRQC_ENABLE_RSS_8Q            0x00000002
 
 #define E1000_VMRCTL_MIRROR_PORT_SHIFT      8
 #define E1000_VMRCTL_MIRROR_DSTPORT_MASK    (7 << E1000_VMRCTL_MIRROR_PORT_SHIFT)
@@ -185,31 +191,31 @@ struct e1000_adv_context_desc {
 /* Receive Descriptor - Advanced */
 union e1000_adv_rx_desc {
 	struct {
-		u64 pkt_addr;             /* Packet buffer address */
-		u64 hdr_addr;             /* Header buffer address */
+		__le64 pkt_addr;             /* Packet buffer address */
+		__le64 hdr_addr;             /* Header buffer address */
 	} read;
 	struct {
 		struct {
 			union {
-				u32 data;
+				__le32 data;
 				struct {
-					u16 pkt_info; /* RSS type, Packet type */
-					u16 hdr_info; /* Split Header,
-				        	       * header buffer length */
+					__le16 pkt_info; /*RSS type, Pkt type*/
+					__le16 hdr_info; /* Split Header,
+				        	          * header buffer len*/
 				} hs_rss;
 			} lo_dword;
 			union {
-				u32 rss;          /* RSS Hash */
+				__le32 rss;          /* RSS Hash */
 				struct {
-					u16 ip_id;    /* IP id */
-					u16 csum;     /* Packet Checksum */
+					__le16 ip_id;    /* IP id */
+					__le16 csum;     /* Packet Checksum */
 				} csum_ip;
 			} hi_dword;
 		} lower;
 		struct {
-			u32 status_error;     /* ext status/error */
-			u16 length;           /* Packet length */
-			u16 vlan;             /* VLAN tag */
+			__le32 status_error;     /* ext status/error */
+			__le16 length;           /* Packet length */
+			__le16 vlan;             /* VLAN tag */
 		} upper;
 	} wb;  /* writeback */
 };
@@ -220,6 +226,8 @@ union e1000_adv_rx_desc {
 #define E1000_RXDADV_HDRBUFLEN_SHIFT     5
 #define E1000_RXDADV_SPLITHEADER_EN      0x00001000
 #define E1000_RXDADV_SPH                 0x8000
+#define E1000_RXDADV_STAT_TS             0x10000 /* Pkt was time stamped */
+#define E1000_RXDADV_STAT_TSIP           0x08000 /* timestamp in packet */
 #define E1000_RXDADV_ERR_HBO             0x00800000
 
 /* RSS Hash results */
@@ -269,14 +277,14 @@ union e1000_adv_rx_desc {
 /* Transmit Descriptor - Advanced */
 union e1000_adv_tx_desc {
 	struct {
-		u64 buffer_addr;    /* Address of descriptor's data buf */
-		u32 cmd_type_len;
-		u32 olinfo_status;
+		__le64 buffer_addr;    /* Address of descriptor's data buf */
+		__le32 cmd_type_len;
+		__le32 olinfo_status;
 	} read;
 	struct {
-		u64 rsvd;       /* Reserved */
-		u32 nxtseq_seed;
-		u32 status;
+		__le64 rsvd;       /* Reserved */
+		__le32 nxtseq_seed;
+		__le32 status;
 	} wb;
 };
 
@@ -303,10 +311,10 @@ union e1000_adv_tx_desc {
 
 /* Context descriptors */
 struct e1000_adv_tx_context_desc {
-	u32 vlan_macip_lens;
-	u32 seqnum_seed;
-	u32 type_tucmd_mlhl;
-	u32 mss_l4len_idx;
+	__le32 vlan_macip_lens;
+	__le32 seqnum_seed;
+	__le32 type_tucmd_mlhl;
+	__le32 mss_l4len_idx;
 };
 
 #define E1000_ADVTXD_MACLEN_SHIFT    9  /* Adv ctxt desc mac len shift */
@@ -378,6 +386,14 @@ struct e1000_adv_tx_context_desc {
  */
 #define E1000_ETQF_FILTER_EAPOL          0
 
+#define E1000_FTQF_VF_BP               0x00008000
+#define E1000_FTQF_1588_TIME_STAMP     0x08000000
+#define E1000_FTQF_MASK                0xF0000000
+#define E1000_FTQF_MASK_PROTO_BP       0x10000000
+#define E1000_FTQF_MASK_SOURCE_ADDR_BP 0x20000000
+#define E1000_FTQF_MASK_DEST_ADDR_BP   0x40000000
+#define E1000_FTQF_MASK_SOURCE_PORT_BP 0x80000000
+
 #define E1000_NVM_APME_82575          0x0400
 #define MAX_NUM_VFS                   8
 
@@ -416,6 +432,9 @@ struct e1000_adv_tx_context_desc {
 #define E1000_VLVF_LVLAN          0x00100000
 #define E1000_VLVF_VLANID_ENABLE  0x80000000
 
+#define E1000_VMVIR_VLANA_DEFAULT 0x40000000 /* Always use default VLAN */
+#define E1000_VMVIR_VLANA_NEVER   0x80000000 /* Never insert VLAN tag */
+
 #define E1000_VF_INIT_TIMEOUT 200 /* Number of retries to clear RSTI */
 
 #define E1000_IOVCTL 0x05BBC
@@ -424,8 +443,18 @@ struct e1000_adv_tx_context_desc {
 #define E1000_RPLOLR_STRVLAN   0x40000000
 #define E1000_RPLOLR_STRCRC    0x80000000
 
+#define E1000_DTXCTL_8023LL     0x0004
+#define E1000_DTXCTL_VLAN_ADDED 0x0008
+#define E1000_DTXCTL_OOS_ENABLE 0x0010
+#define E1000_DTXCTL_MDP_EN     0x0020
+#define E1000_DTXCTL_SPOOF_INT  0x0040
+
 #define ALL_QUEUES   0xFFFF
 
+/* RX packet buffer size defines */
+#define E1000_RXPBS_SIZE_MASK_82576  0x0000007F
 void e1000_vmdq_set_loopback_pf(struct e1000_hw *hw, bool enable);
 void e1000_vmdq_set_replication_pf(struct e1000_hw *hw, bool enable);
+u16 e1000_rxpbs_adjust_82580(u32 data);
+s32 e1000_erfuse_check_82580(struct e1000_hw *);
 #endif /* _E1000_82575_H_ */
diff --git a/sys/dev/e1000/e1000_api.c b/sys/dev/e1000/e1000_api.c
index 8188658d6bb..154eff9bd06 100644
--- a/sys/dev/e1000/e1000_api.c
+++ b/sys/dev/e1000/e1000_api.c
@@ -232,6 +232,7 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
 	case E1000_DEV_ID_ICH8_IGP_M_AMT:
 	case E1000_DEV_ID_ICH8_IGP_AMT:
 	case E1000_DEV_ID_ICH8_IGP_C:
+	case E1000_DEV_ID_ICH8_82567V_3:
 		mac->type = e1000_ich8lan;
 		break;
 	case E1000_DEV_ID_ICH9_IFE:
@@ -269,9 +270,21 @@ s32 e1000_set_mac_type(struct e1000_hw *hw)
 	case E1000_DEV_ID_82576_SERDES:
 	case E1000_DEV_ID_82576_QUAD_COPPER:
 	case E1000_DEV_ID_82576_NS:
+	case E1000_DEV_ID_82576_NS_SERDES:
 	case E1000_DEV_ID_82576_SERDES_QUAD:
 		mac->type = e1000_82576;
 		break;
+	case E1000_DEV_ID_82580_COPPER:
+	case E1000_DEV_ID_82580_FIBER:
+	case E1000_DEV_ID_82580_SERDES:
+	case E1000_DEV_ID_82580_SGMII:
+	case E1000_DEV_ID_82580_COPPER_DUAL:
+		mac->type = e1000_82580;
+		break;
+	case E1000_DEV_ID_82580_ER:
+	case E1000_DEV_ID_82580_ER_DUAL:
+		mac->type = e1000_82580er;
+		break;
 	default:
 		/* Should never have loaded on this device */
 		ret_val = -E1000_ERR_MAC_INIT;
@@ -362,6 +375,8 @@ s32 e1000_setup_init_funcs(struct e1000_hw *hw, bool init_device)
 		break;
 	case e1000_82575:
 	case e1000_82576:
+	case e1000_82580:
+	case e1000_82580er:
 		e1000_init_function_pointers_82575(hw);
 		break;
 	default:
diff --git a/sys/dev/e1000/e1000_defines.h b/sys/dev/e1000/e1000_defines.h
index d845fb23dc6..46365065e73 100644
--- a/sys/dev/e1000/e1000_defines.h
+++ b/sys/dev/e1000/e1000_defines.h
@@ -146,12 +146,12 @@
 #define E1000_CTRL_EXT_SDP5_DATA 0x00000020 /* Value of SW Definable Pin 5 */
 #define E1000_CTRL_EXT_PHY_INT   E1000_CTRL_EXT_SDP5_DATA
 #define E1000_CTRL_EXT_SDP6_DATA 0x00000040 /* Value of SW Definable Pin 6 */
-#define E1000_CTRL_EXT_SDP7_DATA 0x00000080 /* Value of SW Definable Pin 7 */
+#define E1000_CTRL_EXT_SDP3_DATA 0x00000080 /* Value of SW Definable Pin 3 */
 /* SDP 4/5 (bits 8,9) are reserved in >= 82575 */
 #define E1000_CTRL_EXT_SDP4_DIR  0x00000100 /* Direction of SDP4 0=in 1=out */
 #define E1000_CTRL_EXT_SDP5_DIR  0x00000200 /* Direction of SDP5 0=in 1=out */
 #define E1000_CTRL_EXT_SDP6_DIR  0x00000400 /* Direction of SDP6 0=in 1=out */
-#define E1000_CTRL_EXT_SDP7_DIR  0x00000800 /* Direction of SDP7 0=in 1=out */
+#define E1000_CTRL_EXT_SDP3_DIR  0x00000800 /* Direction of SDP3 0=in 1=out */
 #define E1000_CTRL_EXT_ASDCHK    0x00001000 /* Initiate an ASD sequence */
 #define E1000_CTRL_EXT_EE_RST    0x00002000 /* Reinitialize from EEPROM */
 #define E1000_CTRL_EXT_IPS       0x00004000 /* Invert Power State */
@@ -161,6 +161,8 @@
 #define E1000_CTRL_EXT_RO_DIS    0x00020000 /* Relaxed Ordering disable */
 #define E1000_CTRL_EXT_DMA_DYN_CLK_EN 0x00080000 /* DMA Dynamic Clock Gating */
 #define E1000_CTRL_EXT_LINK_MODE_MASK 0x00C00000
+#define E1000_CTRL_EXT_LINK_MODE_82580_MASK 0x01C00000 /*82580 bit 24:22*/
+#define E1000_CTRL_EXT_LINK_MODE_1000BASE_KX  0x00400000
 #define E1000_CTRL_EXT_LINK_MODE_GMII 0x00000000
 #define E1000_CTRL_EXT_LINK_MODE_TBI  0x00C00000
 #define E1000_CTRL_EXT_LINK_MODE_KMRN    0x00000000
@@ -386,6 +388,8 @@
 #define E1000_SWFW_PHY0_SM  0x02
 #define E1000_SWFW_PHY1_SM  0x04
 #define E1000_SWFW_CSR_SM   0x08
+#define E1000_SWFW_PHY2_SM  0x20
+#define E1000_SWFW_PHY3_SM  0x40
 
 /* FACTPS Definitions */
 #define E1000_FACTPS_LFS    0x40000000  /* LAN Function Select */
@@ -697,6 +701,7 @@
 /* Extended Configuration Control and Size */
 #define E1000_EXTCNF_CTRL_MDIO_SW_OWNERSHIP      0x00000020
 #define E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE       0x00000001
+#define E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE       0x00000008
 #define E1000_EXTCNF_CTRL_SWFLAG                 0x00000020
 #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK   0x00FF0000
 #define E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT          16
@@ -769,6 +774,7 @@
 #define E1000_ICR_ACK           0x00020000 /* Receive Ack frame */
 #define E1000_ICR_MNG           0x00040000 /* Manageability event */
 #define E1000_ICR_DOCK          0x00080000 /* Dock/Undock */
+#define E1000_ICR_DRSTA         0x40000000 /* Device Reset Asserted */
 #define E1000_ICR_INT_ASSERTED  0x80000000 /* If this bit asserted, the driver
                                             * should claim the interrupt */
 #define E1000_ICR_RXD_FIFO_PAR0 0x00100000 /* Q0 Rx desc FIFO parity error */
@@ -789,6 +795,7 @@
 #define E1000_ICR_TXQ0          0x00400000 /* Tx Queue 0 Interrupt */
 #define E1000_ICR_TXQ1          0x00800000 /* Tx Queue 1 Interrupt */
 #define E1000_ICR_OTHER         0x01000000 /* Other Interrupts */
+#define E1000_ICR_FER           0x00400000 /* Fatal Error */
 
 /* PBA ECC Register */
 #define E1000_PBA_ECC_COUNTER_MASK  0xFFF00000 /* ECC counter mask */
@@ -860,6 +867,7 @@
 #define E1000_IMS_ACK       E1000_ICR_ACK       /* Receive Ack frame */
 #define E1000_IMS_MNG       E1000_ICR_MNG       /* Manageability event */
 #define E1000_IMS_DOCK      E1000_ICR_DOCK      /* Dock/Undock */
+#define E1000_IMS_DRSTA     E1000_ICR_DRSTA     /* Device Reset Asserted */
 #define E1000_IMS_RXD_FIFO_PAR0 E1000_ICR_RXD_FIFO_PAR0 /* Q0 Rx desc FIFO
                                                          * parity error */
 #define E1000_IMS_TXD_FIFO_PAR0 E1000_ICR_TXD_FIFO_PAR0 /* Q0 Tx desc FIFO
@@ -881,6 +889,7 @@
 #define E1000_IMS_TXQ0          E1000_ICR_TXQ0 /* Tx Queue 0 Interrupt */
 #define E1000_IMS_TXQ1          E1000_ICR_TXQ1 /* Tx Queue 1 Interrupt */
 #define E1000_IMS_OTHER         E1000_ICR_OTHER /* Other Interrupts */
+#define E1000_IMS_FER           E1000_ICR_FER /* Fatal Error */
 
 /* Extended Interrupt Mask Set */
 #define E1000_EIMS_RX_QUEUE0    E1000_EICR_RX_QUEUE0 /* Rx Queue 0 Interrupt */
@@ -913,6 +922,7 @@
 #define E1000_ICS_ACK       E1000_ICR_ACK       /* Receive Ack frame */
 #define E1000_ICS_MNG       E1000_ICR_MNG       /* Manageability event */
 #define E1000_ICS_DOCK      E1000_ICR_DOCK      /* Dock/Undock */
+#define E1000_ICS_DRSTA     E1000_ICR_DRSTA     /* Device Reset Aserted */
 #define E1000_ICS_RXD_FIFO_PAR0 E1000_ICR_RXD_FIFO_PAR0 /* Q0 Rx desc FIFO
                                                          * parity error */
 #define E1000_ICS_TXD_FIFO_PAR0 E1000_ICR_TXD_FIFO_PAR0 /* Q0 Tx desc FIFO
@@ -994,6 +1004,7 @@
 #define E1000_ERR_SWFW_SYNC 13
 #define E1000_NOT_IMPLEMENTED 14
 #define E1000_ERR_MBX      15
+#define E1000_ERFUSE_FAILURE 16
 
 /* Loop limit on how long we wait for auto-negotiation to complete */
 #define FIBER_LINK_UP_LIMIT               50
@@ -1036,6 +1047,56 @@
 #define E1000_RXCW_SYNCH      0x40000000        /* Receive config synch */
 #define E1000_RXCW_ANC        0x80000000        /* Auto-neg complete */
 
+#define E1000_TSYNCTXCTL_VALID    0x00000001 /* tx timestamp valid */
+#define E1000_TSYNCTXCTL_ENABLED  0x00000010 /* enable tx timestampping */
+
+#define E1000_TSYNCRXCTL_VALID      0x00000001 /* rx timestamp valid */
+#define E1000_TSYNCRXCTL_TYPE_MASK  0x0000000E /* rx type mask */
+#define E1000_TSYNCRXCTL_TYPE_L2_V2       0x00
+#define E1000_TSYNCRXCTL_TYPE_L4_V1       0x02
+#define E1000_TSYNCRXCTL_TYPE_L2_L4_V2    0x04
+#define E1000_TSYNCRXCTL_TYPE_ALL         0x08
+#define E1000_TSYNCRXCTL_TYPE_EVENT_V2    0x0A
+#define E1000_TSYNCRXCTL_ENABLED    0x00000010 /* enable rx timestampping */
+
+#define E1000_TSYNCRXCFG_PTP_V1_CTRLT_MASK   0x000000FF
+#define E1000_TSYNCRXCFG_PTP_V1_SYNC_MESSAGE       0x00
+#define E1000_TSYNCRXCFG_PTP_V1_DELAY_REQ_MESSAGE  0x01
+#define E1000_TSYNCRXCFG_PTP_V1_FOLLOWUP_MESSAGE   0x02
+#define E1000_TSYNCRXCFG_PTP_V1_DELAY_RESP_MESSAGE 0x03
+#define E1000_TSYNCRXCFG_PTP_V1_MANAGEMENT_MESSAGE 0x04
+
+#define E1000_TSYNCRXCFG_PTP_V2_MSGID_MASK               0x00000F00
+#define E1000_TSYNCRXCFG_PTP_V2_SYNC_MESSAGE                 0x0000
+#define E1000_TSYNCRXCFG_PTP_V2_DELAY_REQ_MESSAGE            0x0100
+#define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_REQ_MESSAGE       0x0200
+#define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_RESP_MESSAGE      0x0300
+#define E1000_TSYNCRXCFG_PTP_V2_FOLLOWUP_MESSAGE             0x0800
+#define E1000_TSYNCRXCFG_PTP_V2_DELAY_RESP_MESSAGE           0x0900
+#define E1000_TSYNCRXCFG_PTP_V2_PATH_DELAY_FOLLOWUP_MESSAGE  0x0A00
+#define E1000_TSYNCRXCFG_PTP_V2_ANNOUNCE_MESSAGE             0x0B00
+#define E1000_TSYNCRXCFG_PTP_V2_SIGNALLING_MESSAGE           0x0C00
+#define E1000_TSYNCRXCFG_PTP_V2_MANAGEMENT_MESSAGE           0x0D00
+
+#define E1000_TIMINCA_16NS_SHIFT 24
+/* TUPLE Filtering Configuration */
+#define E1000_TTQF_DISABLE_MASK   0xF0008000     /* TTQF Disable Mask */
+#define E1000_TTQF_QUEUE_ENABLE   0x100          /* TTQF Queue Enable Bit */
+#define E1000_TTQF_PROTOCOL_MASK  0xFF           /* TTQF Protocol Mask */
+/* TTQF TCP Bit, shift with E1000_TTQF_PROTOCOL SHIFT */
+#define E1000_TTQF_PROTOCOL_TCP   0x0
+/* TTQF UDP Bit, shift with E1000_TTQF_PROTOCOL_SHIFT */
+#define E1000_TTQF_PROTOCOL_UDP   0x1
+/* TTQF SCTP Bit, shift with E1000_TTQF_PROTOCOL_SHIFT */
+#define E1000_TTQF_PROTOCOL_SCTP  0x2
+#define E1000_TTQF_PROTOCOL_SHIFT 5              /* TTQF Protocol Shift */
+#define E1000_TTQF_QUEUE_SHIFT    16             /* TTQF Queue Shfit */
+#define E1000_TTQF_RX_QUEUE_MASK  0x70000        /* TTQF Queue Mask */
+#define E1000_TTQF_MASK_ENABLE    0x10000000     /* TTQF Mask Enable Bit */
+#define E1000_IMIR_CLEAR_MASK     0xF001FFFF     /* IMIR Reg Clear Mask */
+#define E1000_IMIR_PORT_BYPASS    0x20000        /* IMIR Port Bypass Bit */
+#define E1000_IMIR_PRIORITY_SHIFT 29             /* IMIR Priority Shift */
+#define E1000_IMIREXT_CLEAR_MASK  0x7FFFF        /* IMIREXT Reg Clear Mask */
 
 /* PCI Express Control */
 #define E1000_GCR_RXD_NO_SNOOP          0x00000001
@@ -1227,6 +1288,10 @@
 
 #define E1000_NVM_CFG_DONE_PORT_0  0x040000 /* MNG config cycle done */
 #define E1000_NVM_CFG_DONE_PORT_1  0x080000 /* ...for second port */
+#define E1000_NVM_CFG_DONE_PORT_2  0x100000 /* ...for third port */
+#define E1000_NVM_CFG_DONE_PORT_3  0x200000 /* ...for fourth port */
+
+#define NVM_82580_LAN_FUNC_OFFSET(a) (a ? (0x40 + (0x40 * a)) : 0)
 
 /* Mask bits for fields in Word 0x0f of the NVM */
 #define NVM_WORD0F_PAUSE_MASK       0x3000
@@ -1346,6 +1411,7 @@
 #define BME1000_E_PHY_ID_R2  0x01410CB1
 #define I82577_E_PHY_ID 0x01540050
 #define I82578_E_PHY_ID 0x004DD040
+#define I82580_I_PHY_ID 0x015403A0
 #define IGP04E1000_E_PHY_ID  0x02A80391
 #define M88_VENDOR           0x0141
 
@@ -1575,5 +1641,34 @@
 #define E1000_LSECRXCTRL_RSV_MASK       0xFFFFFF33
 
 
+/* DMA Coalescing register fields */
+#define E1000_DMACR_DMACWT_MASK         0x00003FFF /* DMA Coalescing
+                                                    * Watchdog Timer */
+#define E1000_DMACR_DMACTHR_MASK        0x00FF0000 /* DMA Coalescing Receive
+                                                    * Threshold */
+#define E1000_DMACR_DMACTHR_SHIFT       16
+#define E1000_DMACR_DMAC_LX_MASK        0x30000000 /* Lx when no PCIe
+                                                    * transactions */
+#define E1000_DMACR_DMAC_LX_SHIFT       28
+#define E1000_DMACR_DMAC_EN             0x80000000 /* Enable DMA Coalescing */
+
+#define E1000_DMCTXTH_DMCTTHR_MASK      0x00000FFF /* DMA Coalescing Transmit
+                                                    * Threshold */
+
+#define E1000_DMCTLX_TTLX_MASK          0x00000FFF /* Time to LX request */
+
+#define E1000_DMCRTRH_UTRESH_MASK       0x0007FFFF /* Receive Traffic Rate
+                                                    * Threshold */
+#define E1000_DMCRTRH_LRPRCW            0x80000000 /* Rcv packet rate in
+                                                    * current window */
+
+#define E1000_DMCCNT_CCOUNT_MASK        0x01FFFFFF /* DMA Coal Rcv Traffic
+                                                    * Current Cnt */
+
+#define E1000_FCRTC_RTH_COAL_MASK       0x0003FFF0 /* Flow ctrl Rcv Threshold
+                                                    * High val */
+#define E1000_FCRTC_RTH_COAL_SHIFT      4
+#define E1000_PCIEMISC_LX_DECISION      0x00000080 /* Lx power decision based
+                                                      on DMA coal */
 
 #endif /* _E1000_DEFINES_H_ */
diff --git a/sys/dev/e1000/e1000_hw.h b/sys/dev/e1000/e1000_hw.h
index 6afa4fbb8bd..b01c5d14c7c 100644
--- a/sys/dev/e1000/e1000_hw.h
+++ b/sys/dev/e1000/e1000_hw.h
@@ -100,6 +100,7 @@ struct e1000_hw;
 #define E1000_DEV_ID_80003ES2LAN_SERDES_DPT   0x1098
 #define E1000_DEV_ID_80003ES2LAN_COPPER_SPT   0x10BA
 #define E1000_DEV_ID_80003ES2LAN_SERDES_SPT   0x10BB
+#define E1000_DEV_ID_ICH8_82567V_3            0x1501
 #define E1000_DEV_ID_ICH8_IGP_M_AMT           0x1049
 #define E1000_DEV_ID_ICH8_IGP_AMT             0x104A
 #define E1000_DEV_ID_ICH8_IGP_C               0x104B
@@ -130,11 +131,19 @@ struct e1000_hw;
 #define E1000_DEV_ID_82576_SERDES             0x10E7
 #define E1000_DEV_ID_82576_QUAD_COPPER        0x10E8
 #define E1000_DEV_ID_82576_NS                 0x150A
-#define E1000_DEV_ID_82576_SERDES_QUAD	      0x150D
+#define E1000_DEV_ID_82576_NS_SERDES          0x1518
+#define E1000_DEV_ID_82576_SERDES_QUAD        0x150D
 #define E1000_DEV_ID_82575EB_COPPER           0x10A7
 #define E1000_DEV_ID_82575EB_FIBER_SERDES     0x10A9
 #define E1000_DEV_ID_82575GB_QUAD_COPPER      0x10D6
 #define E1000_DEV_ID_82575GB_QUAD_COPPER_PM   0x10E2
+#define E1000_DEV_ID_82580_COPPER             0x150E
+#define E1000_DEV_ID_82580_FIBER              0x150F
+#define E1000_DEV_ID_82580_SERDES             0x1510
+#define E1000_DEV_ID_82580_SGMII              0x1511
+#define E1000_DEV_ID_82580_COPPER_DUAL        0x1516
+#define E1000_DEV_ID_82580_ER                 0x151D
+#define E1000_DEV_ID_82580_ER_DUAL            0x151E
 #define E1000_REVISION_0 0
 #define E1000_REVISION_1 1
 #define E1000_REVISION_2 2
@@ -143,9 +152,13 @@ struct e1000_hw;
 
 #define E1000_FUNC_0     0
 #define E1000_FUNC_1     1
+#define E1000_FUNC_2     2
+#define E1000_FUNC_3     3
 
 #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN0   0
 #define E1000_ALT_MAC_ADDRESS_OFFSET_LAN1   3
+#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN2   6
+#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN3   9
 
 enum e1000_mac_type {
 	e1000_undefined = 0,
@@ -173,6 +186,8 @@ enum e1000_mac_type {
 	e1000_pchlan,
 	e1000_82575,
 	e1000_82576,
+	e1000_82580,
+	e1000_82580er,
 	e1000_num_macs  /* List is 1-based, so subtract 1 for TRUE count. */
 };
 
@@ -213,6 +228,7 @@ enum e1000_phy_type {
 	e1000_phy_bm,
 	e1000_phy_82578,
 	e1000_phy_82577,
+	e1000_phy_82580,
 	e1000_phy_vf,
 };
 
@@ -615,11 +631,13 @@ struct e1000_phy_operations {
 	s32  (*get_cable_length)(struct e1000_hw *);
 	s32  (*get_info)(struct e1000_hw *);
 	s32  (*read_reg)(struct e1000_hw *, u32, u16 *);
+	s32  (*read_reg_locked)(struct e1000_hw *, u32, u16 *);
 	void (*release)(struct e1000_hw *);
 	s32  (*reset)(struct e1000_hw *);
 	s32  (*set_d0_lplu_state)(struct e1000_hw *, bool);
 	s32  (*set_d3_lplu_state)(struct e1000_hw *, bool);
 	s32  (*write_reg)(struct e1000_hw *, u32, u16);
+	s32  (*write_reg_locked)(struct e1000_hw *, u32, u16);
 	void (*power_up)(struct e1000_hw *);
 	void (*power_down)(struct e1000_hw *);
 };
@@ -657,6 +675,7 @@ struct e1000_mac_info {
 	u16 ifs_ratio;
 	u16 ifs_step_size;
 	u16 mta_reg_count;
+	u16 uta_reg_count;
 
 	/* Maximum size of the MTA register table in all supported adapters */
 	#define MAX_MTA_REG 128
@@ -768,6 +787,10 @@ struct e1000_dev_spec_82571 {
 	u32 smb_counter;
 };
 
+struct e1000_dev_spec_80003es2lan {
+	bool  mdic_wa_enable;
+};
+
 struct e1000_shadow_ram {
 	u16  value;
 	bool modified;
@@ -778,6 +801,9 @@ struct e1000_shadow_ram {
 struct e1000_dev_spec_ich8lan {
 	bool kmrn_lock_loss_workaround_enabled;
 	struct e1000_shadow_ram shadow_ram[E1000_SHADOW_RAM_WORDS];
+	E1000_MUTEX nvm_mutex;
+	E1000_MUTEX swflag_mutex;
+	bool nvm_k1_enabled;
 };
 
 struct e1000_dev_spec_82575 {
@@ -810,6 +836,7 @@ struct e1000_hw {
 		struct e1000_dev_spec_82542	_82542;
 		struct e1000_dev_spec_82543	_82543;
 		struct e1000_dev_spec_82571	_82571;
+		struct e1000_dev_spec_80003es2lan _80003es2lan;
 		struct e1000_dev_spec_ich8lan	ich8lan;
 		struct e1000_dev_spec_82575	_82575;
 		struct e1000_dev_spec_vf	vf;
diff --git a/sys/dev/e1000/e1000_ich8lan.c b/sys/dev/e1000/e1000_ich8lan.c
index a80955a5a36..09c08eb5e2d 100644
--- a/sys/dev/e1000/e1000_ich8lan.c
+++ b/sys/dev/e1000/e1000_ich8lan.c
@@ -68,10 +68,12 @@ static s32  e1000_init_nvm_params_ich8lan(struct e1000_hw *hw);
 static s32  e1000_init_mac_params_ich8lan(struct e1000_hw *hw);
 static s32  e1000_acquire_swflag_ich8lan(struct e1000_hw *hw);
 static void e1000_release_swflag_ich8lan(struct e1000_hw *hw);
+static s32  e1000_acquire_nvm_ich8lan(struct e1000_hw *hw);
+static void e1000_release_nvm_ich8lan(struct e1000_hw *hw);
 static bool e1000_check_mng_mode_ich8lan(struct e1000_hw *hw);
 static s32  e1000_check_reset_block_ich8lan(struct e1000_hw *hw);
 static s32  e1000_phy_hw_reset_ich8lan(struct e1000_hw *hw);
-static s32  e1000_get_phy_info_ich8lan(struct e1000_hw *hw);
+static s32  e1000_set_lplu_state_pchlan(struct e1000_hw *hw, bool active);
 static s32  e1000_set_d0_lplu_state_ich8lan(struct e1000_hw *hw,
                                             bool active);
 static s32  e1000_set_d3_lplu_state_ich8lan(struct e1000_hw *hw,
@@ -95,6 +97,7 @@ static s32  e1000_get_link_up_info_ich8lan(struct e1000_hw *hw,
 static s32  e1000_cleanup_led_ich8lan(struct e1000_hw *hw);
 static s32  e1000_led_on_ich8lan(struct e1000_hw *hw);
 static s32  e1000_led_off_ich8lan(struct e1000_hw *hw);
+static s32  e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link);
 static s32  e1000_setup_led_pchlan(struct e1000_hw *hw);
 static s32  e1000_cleanup_led_pchlan(struct e1000_hw *hw);
 static s32  e1000_led_on_pchlan(struct e1000_hw *hw);
@@ -103,7 +106,6 @@ static void e1000_clear_hw_cntrs_ich8lan(struct e1000_hw *hw);
 static s32  e1000_erase_flash_bank_ich8lan(struct e1000_hw *hw, u32 bank);
 static s32  e1000_flash_cycle_ich8lan(struct e1000_hw *hw, u32 timeout);
 static s32  e1000_flash_cycle_init_ich8lan(struct e1000_hw *hw);
-static s32  e1000_get_phy_info_ife_ich8lan(struct e1000_hw *hw);
 static void e1000_initialize_hw_bits_ich8lan(struct e1000_hw *hw);
 static s32  e1000_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw);
 static s32  e1000_read_flash_byte_ich8lan(struct e1000_hw *hw,
@@ -120,6 +122,9 @@ static s32  e1000_write_flash_data_ich8lan(struct e1000_hw *hw, u32 offset,
                                            u8 size, u16 data);
 static s32 e1000_get_cfg_done_ich8lan(struct e1000_hw *hw);
 static void e1000_power_down_phy_copper_ich8lan(struct e1000_hw *hw);
+static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw);
+static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw);
+static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw);
 
 /* ICH GbE Flash Hardware Sequencing Flash Status Register bit breakdown */
 /* Offset 04h HSFSTS */
@@ -179,18 +184,16 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
 	phy->reset_delay_us           = 100;
 
 	phy->ops.acquire              = e1000_acquire_swflag_ich8lan;
-	phy->ops.check_polarity       = e1000_check_polarity_ife;
 	phy->ops.check_reset_block    = e1000_check_reset_block_ich8lan;
-	phy->ops.force_speed_duplex   = e1000_phy_force_speed_duplex_ife;
-	phy->ops.get_cable_length     = e1000_get_cable_length_igp_2;
 	phy->ops.get_cfg_done         = e1000_get_cfg_done_ich8lan;
-	phy->ops.get_info             = e1000_get_phy_info_ich8lan;
 	phy->ops.read_reg             = e1000_read_phy_reg_hv;
+	phy->ops.read_reg_locked      = e1000_read_phy_reg_hv_locked;
 	phy->ops.release              = e1000_release_swflag_ich8lan;
 	phy->ops.reset                = e1000_phy_hw_reset_ich8lan;
-	phy->ops.set_d0_lplu_state    = e1000_set_d0_lplu_state_ich8lan;
-	phy->ops.set_d3_lplu_state    = e1000_set_d3_lplu_state_ich8lan;
+	phy->ops.set_d0_lplu_state    = e1000_set_lplu_state_pchlan;
+	phy->ops.set_d3_lplu_state    = e1000_set_lplu_state_pchlan;
 	phy->ops.write_reg            = e1000_write_phy_reg_hv;
+	phy->ops.write_reg_locked     = e1000_write_phy_reg_hv_locked;
 	phy->ops.power_up             = e1000_power_up_phy_copper;
 	phy->ops.power_down           = e1000_power_down_phy_copper_ich8lan;
 	phy->autoneg_mask             = AUTONEG_ADVERTISE_SPEED_DEFAULT;
@@ -199,13 +202,23 @@ static s32 e1000_init_phy_params_pchlan(struct e1000_hw *hw)
 	e1000_get_phy_id(hw);
 	phy->type = e1000_get_phy_type_from_id(phy->id);
 
-	if (phy->type == e1000_phy_82577) {
+	switch (phy->type) {
+	case e1000_phy_82577:
 		phy->ops.check_polarity = e1000_check_polarity_82577;
 		phy->ops.force_speed_duplex =
 			e1000_phy_force_speed_duplex_82577;
-		phy->ops.get_cable_length   = e1000_get_cable_length_82577;
+		phy->ops.get_cable_length = e1000_get_cable_length_82577;
 		phy->ops.get_info = e1000_get_phy_info_82577;
 		phy->ops.commit = e1000_phy_sw_reset_generic;
+	case e1000_phy_82578:
+		phy->ops.check_polarity = e1000_check_polarity_m88;
+		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
+		phy->ops.get_cable_length = e1000_get_cable_length_m88;
+		phy->ops.get_info = e1000_get_phy_info_m88;
+		break;
+	default:
+		ret_val = -E1000_ERR_PHY;
+		break;
 	}
 
 	return ret_val;
@@ -229,12 +242,9 @@ static s32 e1000_init_phy_params_ich8lan(struct e1000_hw *hw)
 	phy->reset_delay_us           = 100;
 
 	phy->ops.acquire              = e1000_acquire_swflag_ich8lan;
-	phy->ops.check_polarity       = e1000_check_polarity_ife;
 	phy->ops.check_reset_block    = e1000_check_reset_block_ich8lan;
-	phy->ops.force_speed_duplex   = e1000_phy_force_speed_duplex_ife;
 	phy->ops.get_cable_length     = e1000_get_cable_length_igp_2;
 	phy->ops.get_cfg_done         = e1000_get_cfg_done_ich8lan;
-	phy->ops.get_info             = e1000_get_phy_info_ich8lan;
 	phy->ops.read_reg             = e1000_read_phy_reg_igp;
 	phy->ops.release              = e1000_release_swflag_ich8lan;
 	phy->ops.reset                = e1000_phy_hw_reset_ich8lan;
@@ -273,12 +283,20 @@ static s32 e1000_init_phy_params_ich8lan(struct e1000_hw *hw)
 	case IGP03E1000_E_PHY_ID:
 		phy->type = e1000_phy_igp_3;
 		phy->autoneg_mask = AUTONEG_ADVERTISE_SPEED_DEFAULT;
+		phy->ops.read_reg_locked = e1000_read_phy_reg_igp_locked;
+		phy->ops.write_reg_locked = e1000_write_phy_reg_igp_locked;
+		phy->ops.get_info = e1000_get_phy_info_igp;
+		phy->ops.check_polarity = e1000_check_polarity_igp;
+		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_igp;
 		break;
 	case IFE_E_PHY_ID:
 	case IFE_PLUS_E_PHY_ID:
 	case IFE_C_E_PHY_ID:
 		phy->type = e1000_phy_ife;
 		phy->autoneg_mask = E1000_ALL_NOT_GIG;
+		phy->ops.get_info = e1000_get_phy_info_ife;
+		phy->ops.check_polarity = e1000_check_polarity_ife;
+		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_ife;
 		break;
 	case BME1000_E_PHY_ID:
 		phy->type = e1000_phy_bm;
@@ -286,6 +304,9 @@ static s32 e1000_init_phy_params_ich8lan(struct e1000_hw *hw)
 		phy->ops.read_reg = e1000_read_phy_reg_bm;
 		phy->ops.write_reg = e1000_write_phy_reg_bm;
 		phy->ops.commit = e1000_phy_sw_reset_generic;
+		phy->ops.get_info = e1000_get_phy_info_m88;
+		phy->ops.check_polarity = e1000_check_polarity_m88;
+		phy->ops.force_speed_duplex = e1000_phy_force_speed_duplex_m88;
 		break;
 	default:
 		ret_val = -E1000_ERR_PHY;
@@ -353,10 +374,13 @@ static s32 e1000_init_nvm_params_ich8lan(struct e1000_hw *hw)
 		dev_spec->shadow_ram[i].value    = 0xFFFF;
 	}
 
+	E1000_MUTEX_INIT(&dev_spec->nvm_mutex);
+	E1000_MUTEX_INIT(&dev_spec->swflag_mutex);
+
 	/* Function Pointers */
-	nvm->ops.acquire       = e1000_acquire_swflag_ich8lan;
+	nvm->ops.acquire       = e1000_acquire_nvm_ich8lan;
+	nvm->ops.release       = e1000_release_nvm_ich8lan;
 	nvm->ops.read          = e1000_read_nvm_ich8lan;
-	nvm->ops.release       = e1000_release_swflag_ich8lan;
 	nvm->ops.update        = e1000_update_nvm_checksum_ich8lan;
 	nvm->ops.valid_led_default = e1000_valid_led_default_ich8lan;
 	nvm->ops.validate      = e1000_validate_nvm_checksum_ich8lan;
@@ -393,6 +417,8 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_hw *hw)
 	mac->asf_firmware_present = TRUE;
 	/* Set if manageability features are enabled. */
 	mac->arc_subsystem_valid = TRUE;
+	/* Adaptive IFS supported */
+	mac->adaptive_ifs = TRUE;
 
 	/* Function pointers */
 
@@ -409,7 +435,7 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_hw *hw)
 	/* physical interface setup */
 	mac->ops.setup_physical_interface = e1000_setup_copper_link_ich8lan;
 	/* check for link */
-	mac->ops.check_for_link = e1000_check_for_copper_link_generic;
+	mac->ops.check_for_link = e1000_check_for_copper_link_ich8lan;
 	/* check management mode */
 	mac->ops.check_mng_mode = e1000_check_mng_mode_ich8lan;
 	/* link info */
@@ -460,10 +486,98 @@ static s32 e1000_init_mac_params_ich8lan(struct e1000_hw *hw)
 	if (mac->type == e1000_ich8lan)
 		e1000_set_kmrn_lock_loss_workaround_ich8lan(hw, TRUE);
 
-
 	return E1000_SUCCESS;
 }
 
+/**
+ *  e1000_check_for_copper_link_ich8lan - Check for link (Copper)
+ *  @hw: pointer to the HW structure
+ *
+ *  Checks to see of the link status of the hardware has changed.  If a
+ *  change in link status has been detected, then we read the PHY registers
+ *  to get the current speed/duplex if link exists.
+ **/
+static s32 e1000_check_for_copper_link_ich8lan(struct e1000_hw *hw)
+{
+	struct e1000_mac_info *mac = &hw->mac;
+	s32 ret_val;
+	bool link;
+
+	DEBUGFUNC("e1000_check_for_copper_link_ich8lan");
+
+	/*
+	 * We only want to go out to the PHY registers to see if Auto-Neg
+	 * has completed and/or if our link status has changed.  The
+	 * get_link_status flag is set upon receiving a Link Status
+	 * Change or Rx Sequence Error interrupt.
+	 */
+	if (!mac->get_link_status) {
+		ret_val = E1000_SUCCESS;
+		goto out;
+	}
+
+	/*
+	 * First we want to see if the MII Status Register reports
+	 * link.  If so, then we want to get the current speed/duplex
+	 * of the PHY.
+	 */
+	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
+	if (ret_val)
+		goto out;
+
+	if (hw->mac.type == e1000_pchlan) {
+		ret_val = e1000_k1_gig_workaround_hv(hw, link);
+		if (ret_val)
+			goto out;
+	}
+
+	if (!link)
+		goto out; /* No link detected */
+
+	mac->get_link_status = FALSE;
+
+	if (hw->phy.type == e1000_phy_82578) {
+		ret_val = e1000_link_stall_workaround_hv(hw);
+		if (ret_val)
+			goto out;
+	}
+
+	/*
+	 * Check if there was DownShift, must be checked
+	 * immediately after link-up
+	 */
+	e1000_check_downshift_generic(hw);
+
+	/*
+	 * If we are forcing speed/duplex, then we simply return since
+	 * we have already determined whether we have link or not.
+	 */
+	if (!mac->autoneg) {
+		ret_val = -E1000_ERR_CONFIG;
+		goto out;
+	}
+
+	/*
+	 * Auto-Neg is enabled.  Auto Speed Detection takes care
+	 * of MAC speed/duplex configuration.  So we only need to
+	 * configure Collision Distance in the MAC.
+	 */
+	e1000_config_collision_dist_generic(hw);
+
+	/*
+	 * Configure Flow Control now that Auto-Neg has completed.
+	 * First, we need to restore the desired flow control
+	 * settings because we may have had to re-autoneg with a
+	 * different link partner.
+	 */
+	ret_val = e1000_config_fc_after_link_up_generic(hw);
+	if (ret_val)
+		DEBUGOUT("Error configuring flow control\n");
+
+out:
+	return ret_val;
+}
+
 /**
  *  e1000_init_function_pointers_ich8lan - Initialize ICH8 function pointers
  *  @hw: pointer to the HW structure
@@ -490,13 +604,42 @@ void e1000_init_function_pointers_ich8lan(struct e1000_hw *hw)
 	}
 }
 
+/**
+ *  e1000_acquire_nvm_ich8lan - Acquire NVM mutex
+ *  @hw: pointer to the HW structure
+ *
+ *  Acquires the mutex for performing NVM operations.
+ **/
+static s32 e1000_acquire_nvm_ich8lan(struct e1000_hw *hw)
+{
+	DEBUGFUNC("e1000_acquire_nvm_ich8lan");
+
+	E1000_MUTEX_LOCK(&hw->dev_spec.ich8lan.nvm_mutex);
+
+	return E1000_SUCCESS;
+}
+
+/**
+ *  e1000_release_nvm_ich8lan - Release NVM mutex
+ *  @hw: pointer to the HW structure
+ *
+ *  Releases the mutex used while performing NVM operations.
+ **/
+static void e1000_release_nvm_ich8lan(struct e1000_hw *hw)
+{
+	DEBUGFUNC("e1000_release_nvm_ich8lan");
+
+	E1000_MUTEX_UNLOCK(&hw->dev_spec.ich8lan.nvm_mutex);
+
+	return;
+}
+
 /**
  *  e1000_acquire_swflag_ich8lan - Acquire software control flag
  *  @hw: pointer to the HW structure
  *
- *  Acquires the software control flag for performing NVM and PHY
- *  operations.  This is a function pointer entry point only called by
- *  read/write routines for the PHY and NVM parts.
+ *  Acquires the software control flag for performing PHY and select
+ *  MAC CSR accesses.
  **/
 static s32 e1000_acquire_swflag_ich8lan(struct e1000_hw *hw)
 {
@@ -505,23 +648,39 @@ static s32 e1000_acquire_swflag_ich8lan(struct e1000_hw *hw)
 
 	DEBUGFUNC("e1000_acquire_swflag_ich8lan");
 
+	E1000_MUTEX_LOCK(&hw->dev_spec.ich8lan.swflag_mutex);
+
 	while (timeout) {
 		extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
+		if (!(extcnf_ctrl & E1000_EXTCNF_CTRL_SWFLAG))
+			break;
 
-		if (!(extcnf_ctrl & E1000_EXTCNF_CTRL_SWFLAG)) {
-			extcnf_ctrl |= E1000_EXTCNF_CTRL_SWFLAG;
-			E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
-
-			extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
-			if (extcnf_ctrl & E1000_EXTCNF_CTRL_SWFLAG)
-				break;
-		}
 		msec_delay_irq(1);
 		timeout--;
 	}
 
 	if (!timeout) {
 		DEBUGOUT("SW/FW/HW has locked the resource for too long.\n");
+		ret_val = -E1000_ERR_CONFIG;
+		goto out;
+	}
+
+	timeout = SW_FLAG_TIMEOUT;
+
+	extcnf_ctrl |= E1000_EXTCNF_CTRL_SWFLAG;
+	E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
+
+	while (timeout) {
+		extcnf_ctrl = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
+		if (extcnf_ctrl & E1000_EXTCNF_CTRL_SWFLAG)
+			break;
+
+		msec_delay_irq(1);
+		timeout--;
+	}
+
+	if (!timeout) {
+		DEBUGOUT("Failed to acquire the semaphore.\n");
 		extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG;
 		E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
 		ret_val = -E1000_ERR_CONFIG;
@@ -529,6 +688,9 @@ static s32 e1000_acquire_swflag_ich8lan(struct e1000_hw *hw)
 	}
 
 out:
+	if (ret_val)
+		E1000_MUTEX_UNLOCK(&hw->dev_spec.ich8lan.swflag_mutex);
+
 	return ret_val;
 }
 
@@ -536,9 +698,8 @@ out:
  *  e1000_release_swflag_ich8lan - Release software control flag
  *  @hw: pointer to the HW structure
  *
- *  Releases the software control flag for performing NVM and PHY operations.
- *  This is a function pointer entry point only called by read/write
- *  routines for the PHY and NVM parts.
+ *  Releases the software control flag for performing PHY and select
+ *  MAC CSR accesses.
  **/
 static void e1000_release_swflag_ich8lan(struct e1000_hw *hw)
 {
@@ -550,6 +711,8 @@ static void e1000_release_swflag_ich8lan(struct e1000_hw *hw)
 	extcnf_ctrl &= ~E1000_EXTCNF_CTRL_SWFLAG;
 	E1000_WRITE_REG(hw, E1000_EXTCNF_CTRL, extcnf_ctrl);
 
+	E1000_MUTEX_UNLOCK(&hw->dev_spec.ich8lan.swflag_mutex);
+
 	return;
 }
 
@@ -593,6 +756,325 @@ static s32 e1000_check_reset_block_ich8lan(struct e1000_hw *hw)
 	                                        : E1000_BLK_PHY_RESET;
 }
 
+/**
+ *  e1000_sw_lcd_config_ich8lan - SW-based LCD Configuration
+ *  @hw:   pointer to the HW structure
+ *
+ *  SW should configure the LCD from the NVM extended configuration region
+ *  as a workaround for certain parts.
+ **/
+static s32 e1000_sw_lcd_config_ich8lan(struct e1000_hw *hw)
+{
+	struct e1000_phy_info *phy = &hw->phy;
+	u32 i, data, cnf_size, cnf_base_addr, sw_cfg_mask;
+	s32 ret_val;
+	u16 word_addr, reg_data, reg_addr, phy_page = 0;
+
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		return ret_val;
+
+	/*
+	 * Initialize the PHY from the NVM on ICH platforms.  This
+	 * is needed due to an issue where the NVM configuration is
+	 * not properly autoloaded after power transitions.
+	 * Therefore, after each PHY reset, we will load the
+	 * configuration data out of the NVM manually.
+	 */
+	if ((hw->mac.type == e1000_ich8lan && phy->type == e1000_phy_igp_3) ||
+		(hw->mac.type == e1000_pchlan)) {
+		/* Check if SW needs to configure the PHY */
+		if ((hw->device_id == E1000_DEV_ID_ICH8_IGP_M_AMT) ||
+		    (hw->device_id == E1000_DEV_ID_ICH8_IGP_M) ||
+		    (hw->mac.type == e1000_pchlan))
+			sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M;
+		else
+			sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG;
+
+		data = E1000_READ_REG(hw, E1000_FEXTNVM);
+		if (!(data & sw_cfg_mask))
+			goto out;
+
+		/* Wait for basic configuration completes before proceeding */
+		e1000_lan_init_done_ich8lan(hw);
+
+		/*
+		 * Make sure HW does not configure LCD from PHY
+		 * extended configuration before SW configuration
+		 */
+		data = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
+		if (data & E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE)
+			goto out;
+
+		cnf_size = E1000_READ_REG(hw, E1000_EXTCNF_SIZE);
+		cnf_size &= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK;
+		cnf_size >>= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT;
+		if (!cnf_size)
+			goto out;
+
+		cnf_base_addr = data & E1000_EXTCNF_CTRL_EXT_CNF_POINTER_MASK;
+		cnf_base_addr >>= E1000_EXTCNF_CTRL_EXT_CNF_POINTER_SHIFT;
+
+		if (!(data & E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE) &&
+		    (hw->mac.type == e1000_pchlan)) {
+			/*
+			 * HW configures the SMBus address and LEDs when the
+			 * OEM and LCD Write Enable bits are set in the NVM.
+			 * When both NVM bits are cleared, SW will configure
+			 * them instead.
+			 */
+			data = E1000_READ_REG(hw, E1000_STRAP);
+			data &= E1000_STRAP_SMBUS_ADDRESS_MASK;
+			reg_data = data >> E1000_STRAP_SMBUS_ADDRESS_SHIFT;
+			reg_data |= HV_SMB_ADDR_PEC_EN | HV_SMB_ADDR_VALID;
+			ret_val = e1000_write_phy_reg_hv_locked(hw, HV_SMB_ADDR,
+			                                        reg_data);
+			if (ret_val)
+				goto out;
+
+			data = E1000_READ_REG(hw, E1000_LEDCTL);
+			ret_val = e1000_write_phy_reg_hv_locked(hw,
+			                                        HV_LED_CONFIG,
+			                                        (u16)data);
+			if (ret_val)
+				goto out;
+		}
+
+		/* Configure LCD from extended configuration region. */
+
+		/* cnf_base_addr is in DWORD */
+		word_addr = (u16)(cnf_base_addr << 1);
+
+		for (i = 0; i < cnf_size; i++) {
+			ret_val = hw->nvm.ops.read(hw, (word_addr + i * 2), 1,
+			                           ®_data);
+			if (ret_val)
+				goto out;
+
+			ret_val = hw->nvm.ops.read(hw, (word_addr + i * 2 + 1),
+			                           1, ®_addr);
+			if (ret_val)
+				goto out;
+
+			/* Save off the PHY page for future writes. */
+			if (reg_addr == IGP01E1000_PHY_PAGE_SELECT) {
+				phy_page = reg_data;
+				continue;
+			}
+
+			reg_addr &= PHY_REG_MASK;
+			reg_addr |= phy_page;
+
+			ret_val = phy->ops.write_reg_locked(hw, (u32)reg_addr,
+			                                    reg_data);
+			if (ret_val)
+				goto out;
+		}
+	}
+
+out:
+	hw->phy.ops.release(hw);
+	return ret_val;
+}
+
+/**
+ *  e1000_k1_gig_workaround_hv - K1 Si workaround
+ *  @hw:   pointer to the HW structure
+ *  @link: link up bool flag
+ *
+ *  If K1 is enabled for 1Gbps, the MAC might stall when transitioning
+ *  from a lower speed.  This workaround disables K1 whenever link is at 1Gig
+ *  If link is down, the function will restore the default K1 setting located
+ *  in the NVM.
+ **/
+static s32 e1000_k1_gig_workaround_hv(struct e1000_hw *hw, bool link)
+{
+	s32 ret_val = E1000_SUCCESS;
+	u16 status_reg = 0;
+	bool k1_enable = hw->dev_spec.ich8lan.nvm_k1_enabled;
+
+	DEBUGFUNC("e1000_k1_gig_workaround_hv");
+
+	if (hw->mac.type != e1000_pchlan)
+		goto out;
+
+	/* Wrap the whole flow with the sw flag */
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		goto out;
+
+	/* Disable K1 when link is 1Gbps, otherwise use the NVM setting */
+	if (link) {
+		if (hw->phy.type == e1000_phy_82578) {
+			ret_val = hw->phy.ops.read_reg_locked(hw, BM_CS_STATUS,
+			                                      &status_reg);
+			if (ret_val)
+				goto release;
+
+			status_reg &= BM_CS_STATUS_LINK_UP |
+			              BM_CS_STATUS_RESOLVED |
+			              BM_CS_STATUS_SPEED_MASK;
+
+			if (status_reg == (BM_CS_STATUS_LINK_UP |
+			                   BM_CS_STATUS_RESOLVED |
+			                   BM_CS_STATUS_SPEED_1000))
+				k1_enable = FALSE;
+		}
+
+		if (hw->phy.type == e1000_phy_82577) {
+			ret_val = hw->phy.ops.read_reg_locked(hw, HV_M_STATUS,
+			                                      &status_reg);
+			if (ret_val)
+				goto release;
+
+			status_reg &= HV_M_STATUS_LINK_UP |
+			              HV_M_STATUS_AUTONEG_COMPLETE |
+			              HV_M_STATUS_SPEED_MASK;
+
+			if (status_reg == (HV_M_STATUS_LINK_UP |
+			                   HV_M_STATUS_AUTONEG_COMPLETE |
+			                   HV_M_STATUS_SPEED_1000))
+				k1_enable = FALSE;
+		}
+
+		/* Link stall fix for link up */
+		ret_val = hw->phy.ops.write_reg_locked(hw, PHY_REG(770, 19),
+		                                       0x0100);
+		if (ret_val)
+			goto release;
+
+	} else {
+		/* Link stall fix for link down */
+		ret_val = hw->phy.ops.write_reg_locked(hw, PHY_REG(770, 19),
+		                                       0x4100);
+		if (ret_val)
+			goto release;
+	}
+
+	ret_val = e1000_configure_k1_ich8lan(hw, k1_enable);
+
+release:
+	hw->phy.ops.release(hw);
+out:
+	return ret_val;
+}
+
+/**
+ *  e1000_configure_k1_ich8lan - Configure K1 power state
+ *  @hw: pointer to the HW structure
+ *  @enable: K1 state to configure
+ *
+ *  Configure the K1 power state based on the provided parameter.
+ *  Assumes semaphore already acquired.
+ *
+ *  Success returns 0, Failure returns -E1000_ERR_PHY (-2)
+ **/
+s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable)
+{
+	s32 ret_val = E1000_SUCCESS;
+	u32 ctrl_reg = 0;
+	u32 ctrl_ext = 0;
+	u32 reg = 0;
+	u16 kmrn_reg = 0;
+
+	ret_val = e1000_read_kmrn_reg_locked(hw,
+	                                     E1000_KMRNCTRLSTA_K1_CONFIG,
+	                                     &kmrn_reg);
+	if (ret_val)
+		goto out;
+
+	if (k1_enable)
+		kmrn_reg |= E1000_KMRNCTRLSTA_K1_ENABLE;
+	else
+		kmrn_reg &= ~E1000_KMRNCTRLSTA_K1_ENABLE;
+
+	ret_val = e1000_write_kmrn_reg_locked(hw,
+	                                      E1000_KMRNCTRLSTA_K1_CONFIG,
+	                                      kmrn_reg);
+	if (ret_val)
+		goto out;
+
+	usec_delay(20);
+	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
+	ctrl_reg = E1000_READ_REG(hw, E1000_CTRL);
+
+	reg = ctrl_reg & ~(E1000_CTRL_SPD_1000 | E1000_CTRL_SPD_100);
+	reg |= E1000_CTRL_FRCSPD;
+	E1000_WRITE_REG(hw, E1000_CTRL, reg);
+
+	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext | E1000_CTRL_EXT_SPD_BYPS);
+	usec_delay(20);
+	E1000_WRITE_REG(hw, E1000_CTRL, ctrl_reg);
+	E1000_WRITE_REG(hw, E1000_CTRL_EXT, ctrl_ext);
+	usec_delay(20);
+
+out:
+	return ret_val;
+}
+
+/**
+ *  e1000_oem_bits_config_ich8lan - SW-based LCD Configuration
+ *  @hw:       pointer to the HW structure
+ *  @d0_state: boolean if entering d0 or d3 device state
+ *
+ *  SW will configure Gbe Disable and LPLU based on the NVM. The four bits are
+ *  collectively called OEM bits.  The OEM Write Enable bit and SW Config bit
+ *  in NVM determines whether HW should configure LPLU and Gbe Disable.
+ **/
+s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_state)
+{
+	s32 ret_val = 0;
+	u32 mac_reg;
+	u16 oem_reg;
+
+	if (hw->mac.type != e1000_pchlan)
+		return ret_val;
+
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		return ret_val;
+
+	mac_reg = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
+	if (mac_reg & E1000_EXTCNF_CTRL_OEM_WRITE_ENABLE)
+		goto out;
+
+	mac_reg = E1000_READ_REG(hw, E1000_FEXTNVM);
+	if (!(mac_reg & E1000_FEXTNVM_SW_CONFIG_ICH8M))
+		goto out;
+
+	mac_reg = E1000_READ_REG(hw, E1000_PHY_CTRL);
+
+	ret_val = hw->phy.ops.read_reg_locked(hw, HV_OEM_BITS, &oem_reg);
+	if (ret_val)
+		goto out;
+
+	oem_reg &= ~(HV_OEM_BITS_GBE_DIS | HV_OEM_BITS_LPLU);
+
+	if (d0_state) {
+		if (mac_reg & E1000_PHY_CTRL_GBE_DISABLE)
+			oem_reg |= HV_OEM_BITS_GBE_DIS;
+
+		if (mac_reg & E1000_PHY_CTRL_D0A_LPLU)
+			oem_reg |= HV_OEM_BITS_LPLU;
+	} else {
+		if (mac_reg & E1000_PHY_CTRL_NOND0A_GBE_DISABLE)
+			oem_reg |= HV_OEM_BITS_GBE_DIS;
+
+		if (mac_reg & E1000_PHY_CTRL_NOND0A_LPLU)
+			oem_reg |= HV_OEM_BITS_LPLU;
+	}
+	/* Restart auto-neg to activate the bits */
+	if (!hw->phy.ops.check_reset_block(hw))
+		oem_reg |= HV_OEM_BITS_RESTART_AN;
+	ret_val = hw->phy.ops.write_reg_locked(hw, HV_OEM_BITS, oem_reg);
+
+out:
+	hw->phy.ops.release(hw);
+
+	return ret_val;
+}
+
+
 /**
  *  e1000_hv_phy_powerdown_workaround_ich8lan - Power down workaround on Sx
  *  @hw: pointer to the HW structure
@@ -614,7 +1096,7 @@ static s32 e1000_hv_phy_workarounds_ich8lan(struct e1000_hw *hw)
 	s32 ret_val = E1000_SUCCESS;
 
 	if (hw->mac.type != e1000_pchlan)
-		return ret_val;
+		goto out;
 
 	/* Hanksville M Phy init for IEEE. */
 	if ((hw->revision_id == 2) &&
@@ -648,12 +1130,12 @@ static s32 e1000_hv_phy_workarounds_ich8lan(struct e1000_hw *hw)
 		/* Disable generation of early preamble */
 		ret_val = hw->phy.ops.write_reg(hw, PHY_REG(769, 25), 0x4431);
 		if (ret_val)
-			return ret_val;
+			goto out;
 
 		/* Preamble tuning for SSC */
 		ret_val = hw->phy.ops.write_reg(hw, PHY_REG(770, 16), 0xA204);
 		if (ret_val)
-			return ret_val;
+			goto out;
 	}
 
 	if (hw->phy.type == e1000_phy_82578) {
@@ -662,13 +1144,13 @@ static s32 e1000_hv_phy_workarounds_ich8lan(struct e1000_hw *hw)
 			ret_val = hw->phy.ops.write_reg(hw, (1 << 6) | 0x29,
 			                                0x66C0);
 			if (ret_val)
-				return ret_val;
+				goto out;
 
 			/* PHY config */
 			ret_val = hw->phy.ops.write_reg(hw, (1 << 6) | 0x1E,
 			                                0xFFFF);
 			if (ret_val)
-				return ret_val;
+				goto out;
 		}
 
 		/*
@@ -691,20 +1173,30 @@ static s32 e1000_hv_phy_workarounds_ich8lan(struct e1000_hw *hw)
 		 */
 		ret_val = hw->phy.ops.write_reg(hw, PHY_REG(768, 25), 0x0400);
 		if (ret_val)
-			return ret_val;
+			goto out;
 		ret_val = hw->phy.ops.write_reg(hw, PHY_REG(768, 25), 0x0400);
 		if (ret_val)
-			return ret_val;
+			goto out;
 	}
 
 	/* Select page 0 */
 	ret_val = hw->phy.ops.acquire(hw);
 	if (ret_val)
-		return ret_val;
+		goto out;
+
 	hw->phy.addr = 1;
-	e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, 0);
+	ret_val = e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT, 0);
+	if (ret_val)
+		goto out;
 	hw->phy.ops.release(hw);
 
+	/*
+	 * Configure the K1 Si workaround during phy reset assuming there is
+	 * link so that it disables K1 if link is in 1Gbps.
+	 */
+	ret_val = e1000_k1_gig_workaround_hv(hw, TRUE);
+
+out:
 	return ret_val;
 }
 
@@ -752,10 +1244,8 @@ static void e1000_lan_init_done_ich8lan(struct e1000_hw *hw)
  **/
 static s32 e1000_phy_hw_reset_ich8lan(struct e1000_hw *hw)
 {
-	struct e1000_phy_info *phy = &hw->phy;
-	u32 i, data, cnf_size, cnf_base_addr, sw_cfg_mask;
-	s32 ret_val;
-	u16 word_addr, reg_data, reg_addr, phy_page = 0;
+	s32 ret_val = E1000_SUCCESS;
+	u16 reg;
 
 	DEBUGFUNC("e1000_phy_hw_reset_ich8lan");
 
@@ -772,162 +1262,52 @@ static s32 e1000_phy_hw_reset_ich8lan(struct e1000_hw *hw)
 			goto out;
 	}
 
-	/*
-	 * Initialize the PHY from the NVM on ICH platforms.  This
-	 * is needed due to an issue where the NVM configuration is
-	 * not properly autoloaded after power transitions.
-	 * Therefore, after each PHY reset, we will load the
-	 * configuration data out of the NVM manually.
-	 */
-	if (hw->mac.type == e1000_ich8lan && phy->type == e1000_phy_igp_3) {
-		/* Check if SW needs configure the PHY */
-		if ((hw->device_id == E1000_DEV_ID_ICH8_IGP_M_AMT) ||
-		    (hw->device_id == E1000_DEV_ID_ICH8_IGP_M))
-			sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG_ICH8M;
-		else
-			sw_cfg_mask = E1000_FEXTNVM_SW_CONFIG;
+	/* Dummy read to clear the phy wakeup bit after lcd reset */
+	if (hw->mac.type == e1000_pchlan)
+		hw->phy.ops.read_reg(hw, BM_WUC, ®);
 
-		data = E1000_READ_REG(hw, E1000_FEXTNVM);
-		if (!(data & sw_cfg_mask))
-			goto out;
+	/* Configure the LCD with the extended configuration region in NVM */
+	ret_val = e1000_sw_lcd_config_ich8lan(hw);
+	if (ret_val)
+		goto out;
 
-		/* Wait for basic configuration completes before proceeding */
-		e1000_lan_init_done_ich8lan(hw);
-
-		/*
-		 * Make sure HW does not configure LCD from PHY
-		 * extended configuration before SW configuration
-		 */
-		data = E1000_READ_REG(hw, E1000_EXTCNF_CTRL);
-		if (data & E1000_EXTCNF_CTRL_LCD_WRITE_ENABLE)
-			goto out;
-
-		cnf_size = E1000_READ_REG(hw, E1000_EXTCNF_SIZE);
-		cnf_size &= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_MASK;
-		cnf_size >>= E1000_EXTCNF_SIZE_EXT_PCIE_LENGTH_SHIFT;
-		if (!cnf_size)
-			goto out;
-
-		cnf_base_addr = data & E1000_EXTCNF_CTRL_EXT_CNF_POINTER_MASK;
-		cnf_base_addr >>= E1000_EXTCNF_CTRL_EXT_CNF_POINTER_SHIFT;
-
-		/* Configure LCD from extended configuration region. */
-
-		/* cnf_base_addr is in DWORD */
-		word_addr = (u16)(cnf_base_addr << 1);
-
-		for (i = 0; i < cnf_size; i++) {
-			ret_val = hw->nvm.ops.read(hw, (word_addr + i * 2), 1,
-			                           ®_data);
-			if (ret_val)
-				goto out;
-
-			ret_val = hw->nvm.ops.read(hw, (word_addr + i * 2 + 1),
-			                           1, ®_addr);
-			if (ret_val)
-				goto out;
-
-			/* Save off the PHY page for future writes. */
-			if (reg_addr == IGP01E1000_PHY_PAGE_SELECT) {
-				phy_page = reg_data;
-				continue;
-			}
-
-			reg_addr |= phy_page;
-
-			ret_val = phy->ops.write_reg(hw, (u32)reg_addr, reg_data);
-			if (ret_val)
-				goto out;
-		}
-	}
+	/* Configure the LCD with the OEM bits in NVM */
+	if (hw->mac.type == e1000_pchlan)
+		ret_val = e1000_oem_bits_config_ich8lan(hw, TRUE);
 
 out:
 	return ret_val;
 }
 
 /**
- *  e1000_get_phy_info_ich8lan - Calls appropriate PHY type get_phy_info
+ *  e1000_set_lplu_state_pchlan - Set Low Power Link Up state
  *  @hw: pointer to the HW structure
+ *  @active: TRUE to enable LPLU, FALSE to disable
  *
- *  Wrapper for calling the get_phy_info routines for the appropriate phy type.
+ *  Sets the LPLU state according to the active flag.  For PCH, if OEM write
+ *  bit are disabled in the NVM, writing the LPLU bits in the MAC will not set
+ *  the phy speed. This function will manually set the LPLU bit and restart
+ *  auto-neg as hw would do. D3 and D0 LPLU will call the same function
+ *  since it configures the same bit.
  **/
-static s32 e1000_get_phy_info_ich8lan(struct e1000_hw *hw)
+static s32 e1000_set_lplu_state_pchlan(struct e1000_hw *hw, bool active)
 {
-	s32 ret_val = -E1000_ERR_PHY_TYPE;
+	s32 ret_val = E1000_SUCCESS;
+	u16 oem_reg;
 
-	DEBUGFUNC("e1000_get_phy_info_ich8lan");
+	DEBUGFUNC("e1000_set_lplu_state_pchlan");
 
-	switch (hw->phy.type) {
-	case e1000_phy_ife:
-		ret_val = e1000_get_phy_info_ife_ich8lan(hw);
-		break;
-	case e1000_phy_igp_3:
-	case e1000_phy_bm:
-	case e1000_phy_82578:
-	case e1000_phy_82577:
-		ret_val = e1000_get_phy_info_igp(hw);
-		break;
-	default:
-		break;
-	}
-
-	return ret_val;
-}
-
-/**
- *  e1000_get_phy_info_ife_ich8lan - Retrieves various IFE PHY states
- *  @hw: pointer to the HW structure
- *
- *  Populates "phy" structure with various feature states.
- *  This function is only called by other family-specific
- *  routines.
- **/
-static s32 e1000_get_phy_info_ife_ich8lan(struct e1000_hw *hw)
-{
-	struct e1000_phy_info *phy = &hw->phy;
-	s32 ret_val;
-	u16 data;
-	bool link;
-
-	DEBUGFUNC("e1000_get_phy_info_ife_ich8lan");
-
-	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
+	ret_val = hw->phy.ops.read_reg(hw, HV_OEM_BITS, &oem_reg);
 	if (ret_val)
 		goto out;
 
-	if (!link) {
-		DEBUGOUT("Phy info is only valid if link is up\n");
-		ret_val = -E1000_ERR_CONFIG;
-		goto out;
-	}
+	if (active)
+		oem_reg |= HV_OEM_BITS_LPLU;
+	else
+		oem_reg &= ~HV_OEM_BITS_LPLU;
 
-	ret_val = phy->ops.read_reg(hw, IFE_PHY_SPECIAL_CONTROL, &data);
-	if (ret_val)
-		goto out;
-	phy->polarity_correction = (data & IFE_PSC_AUTO_POLARITY_DISABLE)
-	                           ? FALSE : TRUE;
-
-	if (phy->polarity_correction) {
-		ret_val = e1000_check_polarity_ife(hw);
-		if (ret_val)
-			goto out;
-	} else {
-		/* Polarity is forced */
-		phy->cable_polarity = (data & IFE_PSC_FORCE_POLARITY)
-		                      ? e1000_rev_polarity_reversed
-		                      : e1000_rev_polarity_normal;
-	}
-
-	ret_val = phy->ops.read_reg(hw, IFE_PHY_MDIX_CONTROL, &data);
-	if (ret_val)
-		goto out;
-
-	phy->is_mdix = (data & IFE_PMC_MDIX_STATUS) ? TRUE : FALSE;
-
-	/* The following parameters are undefined for 10/100 operation. */
-	phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
-	phy->local_rx = e1000_1000t_rx_status_undefined;
-	phy->remote_rx = e1000_1000t_rx_status_undefined;
+	oem_reg |= HV_OEM_BITS_RESTART_AN;
+	ret_val = hw->phy.ops.write_reg(hw, HV_OEM_BITS, oem_reg);
 
 out:
 	return ret_val;
@@ -1170,7 +1550,7 @@ static s32 e1000_valid_nvm_bank_detect_ich8lan(struct e1000_hw *hw, u32 *bank)
 		if (ret_val)
 			goto out;
 		if ((sig_byte & E1000_ICH_NVM_VALID_SIG_MASK) ==
-			E1000_ICH_NVM_SIG_VALUE) {
+		    E1000_ICH_NVM_SIG_VALUE) {
 			*bank = 0;
 			goto out;
 		}
@@ -1178,11 +1558,11 @@ static s32 e1000_valid_nvm_bank_detect_ich8lan(struct e1000_hw *hw, u32 *bank)
 		/* Check bank 1 */
 		ret_val = e1000_read_flash_byte_ich8lan(hw, act_offset +
 		                                        bank1_offset,
-					                &sig_byte);
+		                                        &sig_byte);
 		if (ret_val)
 			goto out;
 		if ((sig_byte & E1000_ICH_NVM_VALID_SIG_MASK) ==
-			E1000_ICH_NVM_SIG_VALUE) {
+		    E1000_ICH_NVM_SIG_VALUE) {
 			*bank = 1;
 			goto out;
 		}
@@ -1223,17 +1603,18 @@ static s32 e1000_read_nvm_ich8lan(struct e1000_hw *hw, u16 offset, u16 words,
 		goto out;
 	}
 
-	ret_val = nvm->ops.acquire(hw);
-	if (ret_val)
-		goto out;
+	nvm->ops.acquire(hw);
 
 	ret_val = e1000_valid_nvm_bank_detect_ich8lan(hw, &bank);
-	if (ret_val != E1000_SUCCESS)
-		goto release;
+	if (ret_val != E1000_SUCCESS) {
+		DEBUGOUT("Could not detect valid bank, assuming bank 0\n");
+		bank = 0;
+	}
 
 	act_offset = (bank) ? nvm->flash_bank_size : 0;
 	act_offset += offset;
 
+	ret_val = E1000_SUCCESS;
 	for (i = 0; i < words; i++) {
 		if ((dev_spec->shadow_ram) &&
 		    (dev_spec->shadow_ram[offset+i].modified)) {
@@ -1248,7 +1629,6 @@ static s32 e1000_read_nvm_ich8lan(struct e1000_hw *hw, u16 offset, u16 words,
 		}
 	}
 
-release:
 	nvm->ops.release(hw);
 
 out:
@@ -1534,9 +1914,7 @@ static s32 e1000_write_nvm_ich8lan(struct e1000_hw *hw, u16 offset, u16 words,
 		goto out;
 	}
 
-	ret_val = nvm->ops.acquire(hw);
-	if (ret_val)
-		goto out;
+	nvm->ops.acquire(hw);
 
 	for (i = 0; i < words; i++) {
 		dev_spec->shadow_ram[offset+i].modified = TRUE;
@@ -1577,9 +1955,7 @@ static s32 e1000_update_nvm_checksum_ich8lan(struct e1000_hw *hw)
 	if (nvm->type != e1000_nvm_flash_sw)
 		goto out;
 
-	ret_val = nvm->ops.acquire(hw);
-	if (ret_val)
-		goto out;
+	nvm->ops.acquire(hw);
 
 	/*
 	 * We're writing to the opposite bank so if we're on bank 1,
@@ -1588,8 +1964,8 @@ static s32 e1000_update_nvm_checksum_ich8lan(struct e1000_hw *hw)
 	 */
 	ret_val =  e1000_valid_nvm_bank_detect_ich8lan(hw, &bank);
 	if (ret_val != E1000_SUCCESS) {
-		nvm->ops.release(hw);
-		goto out;
+		DEBUGOUT("Could not detect valid bank, assuming bank 0\n");
+		bank = 0;
 	}
 
 	if (bank == 0) {
@@ -1678,6 +2054,7 @@ static s32 e1000_update_nvm_checksum_ich8lan(struct e1000_hw *hw)
 		nvm->ops.release(hw);
 		goto out;
 	}
+
 	data &= 0xBFFF;
 	ret_val = e1000_retry_write_flash_byte_ich8lan(hw,
 	                                               act_offset * 2 + 1,
@@ -1829,10 +2206,10 @@ static s32 e1000_write_flash_data_ich8lan(struct e1000_hw *hw, u32 offset,
 		 * try...ICH_FLASH_CYCLE_REPEAT_COUNT times.
 		 */
 		hsfsts.regval = E1000_READ_FLASH_REG16(hw, ICH_FLASH_HSFSTS);
-		if (hsfsts.hsf_status.flcerr == 1) {
+		if (hsfsts.hsf_status.flcerr == 1)
 			/* Repeat for some time before giving up. */
 			continue;
-		} else if (hsfsts.hsf_status.flcdone == 0) {
+		if (hsfsts.hsf_status.flcdone == 0) {
 			DEBUGOUT("Timeout error - flash cycle "
 				 "did not complete.");
 			break;
@@ -1960,7 +2337,7 @@ static s32 e1000_erase_flash_bank_ich8lan(struct e1000_hw *hw, u32 bank)
 
 	/* Start with the base address, then add the sector offset. */
 	flash_linear_addr = hw->nvm.flash_base_addr;
-	flash_linear_addr += (bank) ? (sector_size * iteration) : 0;
+	flash_linear_addr += (bank) ? flash_bank_size : 0;
 
 	for (j = 0; j < iteration ; j++) {
 		do {
@@ -2153,6 +2530,8 @@ static s32 e1000_get_bus_info_ich8lan(struct e1000_hw *hw)
  **/
 static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
 {
+	struct e1000_dev_spec_ich8lan *dev_spec = &hw->dev_spec.ich8lan;
+	u16 reg;
 	u32 ctrl, icr, kab;
 	s32 ret_val;
 
@@ -2188,6 +2567,18 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
 		E1000_WRITE_REG(hw, E1000_PBS, E1000_PBS_16K);
 	}
 
+	if (hw->mac.type == e1000_pchlan) {
+		/* Save the NVM K1 bit setting*/
+		ret_val = e1000_read_nvm(hw, E1000_NVM_K1_CONFIG, 1, ®);
+		if (ret_val)
+			return ret_val;
+
+		if (reg & E1000_NVM_K1_ENABLE)
+			dev_spec->nvm_k1_enabled = TRUE;
+		else
+			dev_spec->nvm_k1_enabled = FALSE;
+	}
+
 	ctrl = E1000_READ_REG(hw, E1000_CTRL);
 
 	if (!hw->phy.ops.check_reset_block(hw) && !hw->phy.reset_disable) {
@@ -2229,6 +2620,26 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
 			DEBUGOUT("Auto Read Done did not complete\n");
 		}
 	}
+	/* Dummy read to clear the phy wakeup bit after lcd reset */
+	if (hw->mac.type == e1000_pchlan)
+		hw->phy.ops.read_reg(hw, BM_WUC, ®);
+
+	ret_val = e1000_sw_lcd_config_ich8lan(hw);
+	if (ret_val)
+		goto out;
+
+	if (hw->mac.type == e1000_pchlan) {
+		ret_val = e1000_oem_bits_config_ich8lan(hw, TRUE);
+		if (ret_val)
+			goto out;
+	}
+	/*
+	 * For PCH, this write will make sure that any noise
+	 * will be detected as a CRC error and be dropped rather than show up
+	 * as a bad packet to the DMA engine.
+	 */
+	if (hw->mac.type == e1000_pchlan)
+		E1000_WRITE_REG(hw, E1000_CRC_OFFSET, 0x65656565);
 
 	E1000_WRITE_REG(hw, E1000_IMC, 0xffffffff);
 	icr = E1000_READ_REG(hw, E1000_ICR);
@@ -2240,6 +2651,7 @@ static s32 e1000_reset_hw_ich8lan(struct e1000_hw *hw)
 	if (hw->mac.type == e1000_pchlan)
 		ret_val = e1000_hv_phy_workarounds_ich8lan(hw);
 
+out:
 	return ret_val;
 }
 
@@ -2269,8 +2681,8 @@ static s32 e1000_init_hw_ich8lan(struct e1000_hw *hw)
 	/* Initialize identification LED */
 	ret_val = mac->ops.id_led_init(hw);
 	if (ret_val)
-		/* This is not fatal and we should not stop init due to this */
 		DEBUGOUT("Error initializing identification LED\n");
+		/* This is not fatal and we should not stop init due to this */
 
 	/* Setup the receive address. */
 	e1000_init_rx_addrs_generic(hw, mac->rar_entry_count);
@@ -2316,7 +2728,7 @@ static s32 e1000_init_hw_ich8lan(struct e1000_hw *hw)
 	if (mac->type == e1000_ich8lan)
 		snoop = PCIE_ICH8_SNOOP_ALL;
 	else
-		snoop = (u32)~(PCIE_NO_SNOOP_ALL);
+		snoop = (u32) ~(PCIE_NO_SNOOP_ALL);
 	e1000_set_pcie_no_snoop_generic(hw, snoop);
 
 	ctrl_ext = E1000_READ_REG(hw, E1000_CTRL_EXT);
@@ -2473,8 +2885,7 @@ static s32 e1000_setup_copper_link_ich8lan(struct e1000_hw *hw)
 	 * and increase the max iterations when polling the phy;
 	 * this fixes erroneous timeouts at 10Mbps.
 	 */
-	ret_val = e1000_write_kmrn_reg_generic(hw,
-	                                       E1000_KMRNCTRLSTA_TIMEOUTS,
+	ret_val = e1000_write_kmrn_reg_generic(hw, E1000_KMRNCTRLSTA_TIMEOUTS,
 	                                       0xFFFF);
 	if (ret_val)
 		goto out;
@@ -2788,6 +3199,7 @@ void e1000_disable_gig_wol_ich8lan(struct e1000_hw *hw)
 	u32 phy_ctrl;
 
 	switch (hw->mac.type) {
+	case e1000_ich8lan:
 	case e1000_ich9lan:
 	case e1000_ich10lan:
 	case e1000_pchlan:
@@ -2796,9 +3208,8 @@ void e1000_disable_gig_wol_ich8lan(struct e1000_hw *hw)
 		            E1000_PHY_CTRL_GBE_DISABLE;
 		E1000_WRITE_REG(hw, E1000_PHY_CTRL, phy_ctrl);
 
-		/* Workaround SWFLAG unexpectedly set during S0->Sx */
 		if (hw->mac.type == e1000_pchlan)
-			usec_delay(500);
+			e1000_phy_hw_reset_ich8lan(hw);
 	default:
 		break;
 	}
@@ -2982,18 +3393,17 @@ static s32 e1000_get_cfg_done_ich8lan(struct e1000_hw *hw)
 	if (hw->mac.type >= e1000_pchlan) {
 		u32 status = E1000_READ_REG(hw, E1000_STATUS);
 
-		if (status & E1000_STATUS_PHYRA) {
+		if (status & E1000_STATUS_PHYRA)
 			E1000_WRITE_REG(hw, E1000_STATUS, status &
 			                ~E1000_STATUS_PHYRA);
-		} else
+		else
 			DEBUGOUT("PHY Reset Asserted not set - needs delay\n");
 	}
 
 	e1000_get_cfg_done_generic(hw);
 
 	/* If EEPROM is not marked present, init the IGP 3 PHY manually */
-	if ((hw->mac.type != e1000_ich10lan) &&
-	    (hw->mac.type != e1000_pchlan)) {
+	if (hw->mac.type <= e1000_ich9lan) {
 		if (((E1000_READ_REG(hw, E1000_EECD) & E1000_EECD_PRES) == 0) &&
 		    (hw->phy.type == e1000_phy_igp_3)) {
 			e1000_phy_init_script_igp3(hw);
diff --git a/sys/dev/e1000/e1000_ich8lan.h b/sys/dev/e1000/e1000_ich8lan.h
index 5416eeb72b2..33398c495b6 100644
--- a/sys/dev/e1000/e1000_ich8lan.h
+++ b/sys/dev/e1000/e1000_ich8lan.h
@@ -140,6 +140,31 @@
 #define HV_TNCRS_UPPER		PHY_REG(778, 29) /* Transmit with no CRS */
 #define HV_TNCRS_LOWER		PHY_REG(778, 30)
 
+#define E1000_FCRTV_PCH     0x05F40 /* PCH Flow Control Refresh Timer Value */
+
+#define E1000_NVM_K1_CONFIG 0x1B /* NVM K1 Config Word */
+#define E1000_NVM_K1_ENABLE 0x1  /* NVM Enable K1 bit */
+
+/* SMBus Address Phy Register */
+#define HV_SMB_ADDR            PHY_REG(768, 26)
+#define HV_SMB_ADDR_PEC_EN     0x0200
+#define HV_SMB_ADDR_VALID      0x0080
+
+/* Strapping Option Register - RO */
+#define E1000_STRAP                     0x0000C
+#define E1000_STRAP_SMBUS_ADDRESS_MASK  0x00FE0000
+#define E1000_STRAP_SMBUS_ADDRESS_SHIFT 17
+
+/* OEM Bits Phy Register */
+#define HV_OEM_BITS            PHY_REG(768, 25)
+#define HV_OEM_BITS_LPLU       0x0004 /* Low Power Link Up */
+#define HV_OEM_BITS_GBE_DIS    0x0040 /* Gigabit Disable */
+#define HV_OEM_BITS_RESTART_AN 0x0400 /* Restart Auto-negotiation */
+
+#define LCD_CFG_PHY_ADDR_BIT   0x0020 /* Phy address bit from LCD Config word */
+
+#define SW_FLAG_TIMEOUT    1000 /* SW Semaphore flag timeout in milliseconds */
+
 /*
  * Additional interrupts need to be handled for ICH family:
  *  DSW = The FW changed the status of the DISSW bit in FWSM
@@ -169,6 +194,7 @@ void e1000_set_kmrn_lock_loss_workaround_ich8lan(struct e1000_hw *hw,
 void e1000_igp3_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw);
 void e1000_gig_downshift_workaround_ich8lan(struct e1000_hw *hw);
 void e1000_disable_gig_wol_ich8lan(struct e1000_hw *hw);
+s32 e1000_configure_k1_ich8lan(struct e1000_hw *hw, bool k1_enable);
+s32 e1000_oem_bits_config_ich8lan(struct e1000_hw *hw, bool d0_config);
 s32 e1000_hv_phy_powerdown_workaround_ich8lan(struct e1000_hw *hw);
-
 #endif
diff --git a/sys/dev/e1000/e1000_mac.c b/sys/dev/e1000/e1000_mac.c
index db6e5f52e08..f31156584de 100644
--- a/sys/dev/e1000/e1000_mac.c
+++ b/sys/dev/e1000/e1000_mac.c
@@ -230,7 +230,6 @@ s32 e1000_get_bus_info_pcie_generic(struct e1000_hw *hw)
 {
 	struct e1000_mac_info *mac = &hw->mac;
 	struct e1000_bus_info *bus = &hw->bus;
-
 	s32 ret_val;
 	u16 pcie_link_status;
 
@@ -408,6 +407,11 @@ s32 e1000_check_alt_mac_addr_generic(struct e1000_hw *hw)
 
 	if (hw->bus.func == E1000_FUNC_1)
 		nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN1;
+	if (hw->bus.func == E1000_FUNC_2)
+		nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN2;
+
+	if (hw->bus.func == E1000_FUNC_3)
+		nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN3;
 	for (i = 0; i < ETH_ADDR_LEN; i += 2) {
 		offset = nvm_alt_mac_addr_offset + (i >> 1);
 		ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data);
@@ -750,12 +754,6 @@ s32 e1000_check_for_copper_link_generic(struct e1000_hw *hw)
 
 	mac->get_link_status = FALSE;
 
-	if (hw->phy.type == e1000_phy_82578) {
-		ret_val = e1000_link_stall_workaround_hv(hw);
-		if (ret_val)
-			goto out;
-	}
-
 	/*
 	 * Check if there was DownShift, must be checked
 	 * immediately after link-up
@@ -994,9 +992,8 @@ s32 e1000_setup_link_generic(struct e1000_hw *hw)
 	 * In the case of the phy reset being blocked, we already have a link.
 	 * We do not need to set it up again.
 	 */
-	if (hw->phy.ops.check_reset_block)
-		if (hw->phy.ops.check_reset_block(hw))
-			goto out;
+	if (e1000_check_reset_block(hw))
+		goto out;
 
 	/*
 	 * If requested flow control is set to default, set flow control
@@ -1512,7 +1509,7 @@ s32 e1000_config_fc_after_link_up_generic(struct e1000_hw *hw)
 			/*
 			 * Now we need to check if the user selected Rx ONLY
 			 * of pause frames.  In this case, we had to advertise
-			 * FULL flow control because we could not advertise RX
+			 * FULL flow control because we could not advertise Rx
 			 * ONLY. Hence, we must now check to see if we need to
 			 * turn OFF  the TRANSMISSION of PAUSE frames.
 			 */
@@ -2033,7 +2030,7 @@ out:
  *  e1000_disable_pcie_master_generic - Disables PCI-express master access
  *  @hw: pointer to the HW structure
  *
- *  Returns 0 (E1000_SUCCESS) if successful, else returns -10
+ *  Returns E1000_SUCCESS if successful, else returns -10
  *  (-E1000_ERR_MASTER_REQUESTS_PENDING) if master disable bit has not caused
  *  the master requests to be disabled.
  *
@@ -2151,7 +2148,7 @@ out:
  *  Verify that when not using auto-negotiation that MDI/MDIx is correctly
  *  set, which is forced to MDI mode only.
  **/
-s32 e1000_validate_mdi_setting_generic(struct e1000_hw *hw)
+static s32 e1000_validate_mdi_setting_generic(struct e1000_hw *hw)
 {
 	s32 ret_val = E1000_SUCCESS;
 
diff --git a/sys/dev/e1000/e1000_manage.c b/sys/dev/e1000/e1000_manage.c
index b1f6541ad0c..aa0a0d46a16 100644
--- a/sys/dev/e1000/e1000_manage.c
+++ b/sys/dev/e1000/e1000_manage.c
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright (c) 2001-2008, Intel Corporation 
+  Copyright (c) 2001-2009, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -123,7 +123,7 @@ bool e1000_check_mng_mode_generic(struct e1000_hw *hw)
 }
 
 /**
- *  e1000_enable_tx_pkt_filtering_generic - Enable packet filtering on TX
+ *  e1000_enable_tx_pkt_filtering_generic - Enable packet filtering on Tx
  *  @hw: pointer to the HW structure
  *
  *  Enables packet filtering on transmit packets if manageability is enabled
@@ -159,11 +159,9 @@ bool e1000_enable_tx_pkt_filtering_generic(struct e1000_hw *hw)
 	/* Read in the header.  Length and offset are in dwords. */
 	len    = E1000_MNG_DHCP_COOKIE_LENGTH >> 2;
 	offset = E1000_MNG_DHCP_COOKIE_OFFSET >> 2;
-	for (i = 0; i < len; i++) {
-		*(buffer + i) = E1000_READ_REG_ARRAY_DWORD(hw,
-		                                           E1000_HOST_IF,
+	for (i = 0; i < len; i++)
+		*(buffer + i) = E1000_READ_REG_ARRAY_DWORD(hw, E1000_HOST_IF,
 		                                           offset + i);
-	}
 	hdr_csum = hdr->checksum;
 	hdr->checksum = 0;
 	csum = e1000_calculate_checksum((u8 *)hdr,
diff --git a/sys/dev/e1000/e1000_osdep.h b/sys/dev/e1000/e1000_osdep.h
index b478f29fb0f..bfcd4bfbc98 100644
--- a/sys/dev/e1000/e1000_osdep.h
+++ b/sys/dev/e1000/e1000_osdep.h
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright (c) 2001-2008, Intel Corporation 
+  Copyright (c) 2001-2009, Intel Corporation 
   All rights reserved.
   
   Redistribution and use in source and binary forms, with or without 
@@ -39,6 +39,8 @@
 #include 
 #include 
 #include 
+#include 
+#include 
 #include 
 #include 
 #include 
@@ -57,10 +59,8 @@
 
 #define ASSERT(x) if(!(x)) panic("EM: x")
 
-/* The happy-fun DELAY macro is defined in /usr/src/sys/i386/include/clock.h */
 #define usec_delay(x) DELAY(x)
 #define msec_delay(x) DELAY(1000*(x))
-/* TODO: Should we be paranoid about delaying in interrupt context? */
 #define msec_delay_irq(x) DELAY(1000*(x))
 
 #define MSGOUT(S, A, B)     printf(S "\n", A, B)
@@ -73,16 +73,21 @@
 
 #define STATIC			static
 #define FALSE			0
-#define false			FALSE /* shared code stupidity */
+#define false			FALSE 
 #define TRUE			1
 #define true			TRUE
 #define CMD_MEM_WRT_INVALIDATE	0x0010  /* BIT_4 */
 #define PCI_COMMAND_REGISTER	PCIR_COMMAND
 
-/*
-** These typedefs are necessary due to the new
-** shared code, they are native to Linux.
-*/
+/* Mutex used in the shared code */
+#define E1000_MUTEX                     struct mtx
+#define E1000_MUTEX_INIT(mutex)         mtx_init((mutex), #mutex, \
+                                        "E1000 Shared Lock", MTX_DEF)
+#define E1000_MUTEX_DESTROY(mutex)      mtx_destroy(mutex)
+#define E1000_MUTEX_LOCK(mutex)         mtx_lock(mutex)
+#define E1000_MUTEX_TRYLOCK(mutex)      mtx_trylock(mutex)
+#define E1000_MUTEX_UNLOCK(mutex)       mtx_unlock(mutex)
+
 typedef uint64_t	u64;
 typedef uint32_t	u32;
 typedef uint16_t	u16;
@@ -97,6 +102,28 @@ typedef boolean_t	bool;
 #define __le32		u32
 #define __le64		u64
 
+#if __FreeBSD_version < 800000 /* Now in HEAD */
+#if defined(__i386__) || defined(__amd64__)
+#define mb()	__asm volatile("mfence" ::: "memory")
+#define wmb()	__asm volatile("sfence" ::: "memory")
+#define rmb()	__asm volatile("lfence" ::: "memory")
+#else
+#define mb()
+#define rmb()
+#define wmb()
+#endif
+#endif /*__FreeBSD_version < 800000 */
+
+#if defined(__i386__) || defined(__amd64__)
+static __inline
+void prefetch(void *x)
+{
+	__asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x));
+}
+#else
+#define prefetch(x)
+#endif
+
 struct e1000_osdep
 {
 	bus_space_tag_t    mem_bus_space_tag;
diff --git a/sys/dev/e1000/e1000_phy.c b/sys/dev/e1000/e1000_phy.c
index 513f2e67fb4..51504e28606 100644
--- a/sys/dev/e1000/e1000_phy.c
+++ b/sys/dev/e1000/e1000_phy.c
@@ -83,11 +83,13 @@ void e1000_init_phy_ops_generic(struct e1000_hw *hw)
 	phy->ops.get_cable_length = e1000_null_ops_generic;
 	phy->ops.get_info = e1000_null_ops_generic;
 	phy->ops.read_reg = e1000_null_read_reg;
+	phy->ops.read_reg_locked = e1000_null_read_reg;
 	phy->ops.release = e1000_null_phy_generic;
 	phy->ops.reset = e1000_null_ops_generic;
 	phy->ops.set_d0_lplu_state = e1000_null_lplu_state;
 	phy->ops.set_d3_lplu_state = e1000_null_lplu_state;
 	phy->ops.write_reg = e1000_null_write_reg;
+	phy->ops.write_reg_locked = e1000_null_write_reg;
 	phy->ops.power_up = e1000_null_phy_generic;
 	phy->ops.power_down = e1000_null_phy_generic;
 	phy->ops.cfg_on_link_up = e1000_null_ops_generic;
@@ -190,20 +192,30 @@ s32 e1000_get_phy_id(struct e1000_hw *hw)
 			goto out;
 
 		/*
-		 * If the PHY ID is still unknown, we may have an 82577 without link.
-		 * We will try again after setting Slow MDIC mode. No harm in trying
-		 * again in this case since the PHY ID is unknown at this point anyway
+		 * If the PHY ID is still unknown, we may have an 82577
+		 * without link.  We will try again after setting Slow MDIC
+		 * mode. No harm in trying again in this case since the PHY
+		 * ID is unknown at this point anyway.
 		 */
+		ret_val = phy->ops.acquire(hw);
+		if (ret_val)
+			goto out;
 		ret_val = e1000_set_mdio_slow_mode_hv(hw, TRUE);
 		if (ret_val)
 			goto out;
+		phy->ops.release(hw);
 
 		retry_count++;
 	}
 out:
 	/* Revert to MDIO fast mode, if applicable */
-	if (retry_count)
+	if (retry_count) {
+		ret_val = phy->ops.acquire(hw);
+		if (ret_val)
+			return ret_val;
 		ret_val = e1000_set_mdio_slow_mode_hv(hw, FALSE);
+		phy->ops.release(hw);
+	}
 
 	return ret_val;
 }
@@ -350,6 +362,105 @@ out:
 	return ret_val;
 }
 
+/**
+ *  e1000_read_phy_reg_i2c - Read PHY register using i2c
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to be read
+ *  @data: pointer to the read data
+ *
+ *  Reads the PHY register at offset using the i2c interface and stores the
+ *  retrieved information in data.
+ **/
+s32 e1000_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data)
+{
+	struct e1000_phy_info *phy = &hw->phy;
+	u32 i, i2ccmd = 0;
+
+	DEBUGFUNC("e1000_read_phy_reg_i2c");
+
+	/*
+	 * Set up Op-code, Phy Address, and register address in the I2CCMD
+	 * register.  The MAC will take care of interfacing with the
+	 * PHY to retrieve the desired data.
+	 */
+	i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
+	          (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
+	          (E1000_I2CCMD_OPCODE_READ));
+
+	E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
+
+	/* Poll the ready bit to see if the I2C read completed */
+	for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
+		usec_delay(50);
+		i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD);
+		if (i2ccmd & E1000_I2CCMD_READY)
+			break;
+	}
+	if (!(i2ccmd & E1000_I2CCMD_READY)) {
+		DEBUGOUT("I2CCMD Read did not complete\n");
+		return -E1000_ERR_PHY;
+	}
+	if (i2ccmd & E1000_I2CCMD_ERROR) {
+		DEBUGOUT("I2CCMD Error bit set\n");
+		return -E1000_ERR_PHY;
+	}
+
+	/* Need to byte-swap the 16-bit value. */
+	*data = ((i2ccmd >> 8) & 0x00FF) | ((i2ccmd << 8) & 0xFF00);
+
+	return E1000_SUCCESS;
+}
+
+/**
+ *  e1000_write_phy_reg_i2c - Write PHY register using i2c
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to write to
+ *  @data: data to write at register offset
+ *
+ *  Writes the data to PHY register at the offset using the i2c interface.
+ **/
+s32 e1000_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data)
+{
+	struct e1000_phy_info *phy = &hw->phy;
+	u32 i, i2ccmd = 0;
+	u16 phy_data_swapped;
+
+	DEBUGFUNC("e1000_write_phy_reg_i2c");
+
+	/* Swap the data bytes for the I2C interface */
+	phy_data_swapped = ((data >> 8) & 0x00FF) | ((data << 8) & 0xFF00);
+
+	/*
+	 * Set up Op-code, Phy Address, and register address in the I2CCMD
+	 * register.  The MAC will take care of interfacing with the
+	 * PHY to retrieve the desired data.
+	 */
+	i2ccmd = ((offset << E1000_I2CCMD_REG_ADDR_SHIFT) |
+	          (phy->addr << E1000_I2CCMD_PHY_ADDR_SHIFT) |
+	          E1000_I2CCMD_OPCODE_WRITE |
+	          phy_data_swapped);
+
+	E1000_WRITE_REG(hw, E1000_I2CCMD, i2ccmd);
+
+	/* Poll the ready bit to see if the I2C read completed */
+	for (i = 0; i < E1000_I2CCMD_PHY_TIMEOUT; i++) {
+		usec_delay(50);
+		i2ccmd = E1000_READ_REG(hw, E1000_I2CCMD);
+		if (i2ccmd & E1000_I2CCMD_READY)
+			break;
+	}
+	if (!(i2ccmd & E1000_I2CCMD_READY)) {
+		DEBUGOUT("I2CCMD Write did not complete\n");
+		return -E1000_ERR_PHY;
+	}
+	if (i2ccmd & E1000_I2CCMD_ERROR) {
+		DEBUGOUT("I2CCMD Error bit set\n");
+		return -E1000_ERR_PHY;
+	}
+
+	return E1000_SUCCESS;
+}
+
 /**
  *  e1000_read_phy_reg_m88 - Read m88 PHY register
  *  @hw: pointer to the HW structure
@@ -414,42 +525,119 @@ out:
 }
 
 /**
- *  e1000_read_phy_reg_igp - Read igp PHY register
+ *  __e1000_read_phy_reg_igp - Read igp PHY register
  *  @hw: pointer to the HW structure
  *  @offset: register offset to be read
  *  @data: pointer to the read data
+ *  @locked: semaphore has already been acquired or not
  *
  *  Acquires semaphore, if necessary, then reads the PHY register at offset
- *  and storing the retrieved information in data.  Release any acquired
+ *  and stores the retrieved information in data.  Release any acquired
  *  semaphores before exiting.
  **/
-s32 e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data)
+static s32 __e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data,
+                                    bool locked)
 {
 	s32 ret_val = E1000_SUCCESS;
 
-	DEBUGFUNC("e1000_read_phy_reg_igp");
+	DEBUGFUNC("__e1000_read_phy_reg_igp");
 
-	if (!(hw->phy.ops.acquire))
-		goto out;
+	if (!locked) {
+		if (!(hw->phy.ops.acquire))
+			goto out;
 
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		goto out;
+		ret_val = hw->phy.ops.acquire(hw);
+		if (ret_val)
+			goto out;
+	}
 
 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
 		ret_val = e1000_write_phy_reg_mdic(hw,
 		                                   IGP01E1000_PHY_PAGE_SELECT,
 		                                   (u16)offset);
-		if (ret_val) {
-			hw->phy.ops.release(hw);
-			goto out;
-		}
+		if (ret_val)
+			goto release;
 	}
 
 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
 	                                  data);
 
-	hw->phy.ops.release(hw);
+release:
+	if (!locked)
+		hw->phy.ops.release(hw);
+out:
+	return ret_val;
+}
+
+/**
+ *  e1000_read_phy_reg_igp - Read igp PHY register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to be read
+ *  @data: pointer to the read data
+ *
+ *  Acquires semaphore then reads the PHY register at offset and stores the
+ *  retrieved information in data.
+ *  Release the acquired semaphore before exiting.
+ **/
+s32 e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data)
+{
+	return __e1000_read_phy_reg_igp(hw, offset, data, FALSE);
+}
+
+/**
+ *  e1000_read_phy_reg_igp_locked - Read igp PHY register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to be read
+ *  @data: pointer to the read data
+ *
+ *  Reads the PHY register at offset and stores the retrieved information
+ *  in data.  Assumes semaphore already acquired.
+ **/
+s32 e1000_read_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 *data)
+{
+	return __e1000_read_phy_reg_igp(hw, offset, data, TRUE);
+}
+
+/**
+ *  e1000_write_phy_reg_igp - Write igp PHY register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to write to
+ *  @data: data to write at register offset
+ *  @locked: semaphore has already been acquired or not
+ *
+ *  Acquires semaphore, if necessary, then writes the data to PHY register
+ *  at the offset.  Release any acquired semaphores before exiting.
+ **/
+static s32 __e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data,
+                                     bool locked)
+{
+	s32 ret_val = E1000_SUCCESS;
+
+	DEBUGFUNC("e1000_write_phy_reg_igp");
+
+	if (!locked) {
+		if (!(hw->phy.ops.acquire))
+			goto out;
+
+		ret_val = hw->phy.ops.acquire(hw);
+		if (ret_val)
+			goto out;
+	}
+
+	if (offset > MAX_PHY_MULTI_PAGE_REG) {
+		ret_val = e1000_write_phy_reg_mdic(hw,
+		                                   IGP01E1000_PHY_PAGE_SELECT,
+		                                   (u16)offset);
+		if (ret_val)
+			goto release;
+	}
+
+	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
+	                                   data);
+
+release:
+	if (!locked)
+		hw->phy.ops.release(hw);
 
 out:
 	return ret_val;
@@ -461,64 +649,55 @@ out:
  *  @offset: register offset to write to
  *  @data: data to write at register offset
  *
- *  Acquires semaphore, if necessary, then writes the data to PHY register
+ *  Acquires semaphore then writes the data to PHY register
  *  at the offset.  Release any acquired semaphores before exiting.
  **/
 s32 e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data)
 {
-	s32 ret_val = E1000_SUCCESS;
-
-	DEBUGFUNC("e1000_write_phy_reg_igp");
-
-	if (!(hw->phy.ops.acquire))
-		goto out;
-
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		goto out;
-
-	if (offset > MAX_PHY_MULTI_PAGE_REG) {
-		ret_val = e1000_write_phy_reg_mdic(hw,
-		                                   IGP01E1000_PHY_PAGE_SELECT,
-		                                   (u16)offset);
-		if (ret_val) {
-			hw->phy.ops.release(hw);
-			goto out;
-		}
-	}
-
-	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
-	                                   data);
-
-	hw->phy.ops.release(hw);
-
-out:
-	return ret_val;
+	return __e1000_write_phy_reg_igp(hw, offset, data, FALSE);
 }
 
 /**
- *  e1000_read_kmrn_reg_generic - Read kumeran register
+ *  e1000_write_phy_reg_igp_locked - Write igp PHY register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to write to
+ *  @data: data to write at register offset
+ *
+ *  Writes the data to PHY register at the offset.
+ *  Assumes semaphore already acquired.
+ **/
+s32 e1000_write_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 data)
+{
+	return __e1000_write_phy_reg_igp(hw, offset, data, TRUE);
+}
+
+/**
+ *  __e1000_read_kmrn_reg - Read kumeran register
  *  @hw: pointer to the HW structure
  *  @offset: register offset to be read
  *  @data: pointer to the read data
+ *  @locked: semaphore has already been acquired or not
  *
  *  Acquires semaphore, if necessary.  Then reads the PHY register at offset
  *  using the kumeran interface.  The information retrieved is stored in data.
  *  Release any acquired semaphores before exiting.
  **/
-s32 e1000_read_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 *data)
+static s32 __e1000_read_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 *data,
+                                 bool locked)
 {
 	u32 kmrnctrlsta;
 	s32 ret_val = E1000_SUCCESS;
 
-	DEBUGFUNC("e1000_read_kmrn_reg_generic");
+	DEBUGFUNC("__e1000_read_kmrn_reg");
 
-	if (!(hw->phy.ops.acquire))
-		goto out;
+	if (!locked) {
+		if (!(hw->phy.ops.acquire))
+			goto out;
 
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		goto out;
+		ret_val = hw->phy.ops.acquire(hw);
+		if (ret_val)
+			goto out;
+	}
 
 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
 	               E1000_KMRNCTRLSTA_OFFSET) | E1000_KMRNCTRLSTA_REN;
@@ -529,47 +708,112 @@ s32 e1000_read_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 *data)
 	kmrnctrlsta = E1000_READ_REG(hw, E1000_KMRNCTRLSTA);
 	*data = (u16)kmrnctrlsta;
 
-	hw->phy.ops.release(hw);
+	if (!locked)
+		hw->phy.ops.release(hw);
 
 out:
 	return ret_val;
 }
 
 /**
- *  e1000_write_kmrn_reg_generic - Write kumeran register
+ *  e1000_read_kmrn_reg_generic -  Read kumeran register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to be read
+ *  @data: pointer to the read data
+ *
+ *  Acquires semaphore then reads the PHY register at offset using the
+ *  kumeran interface.  The information retrieved is stored in data.
+ *  Release the acquired semaphore before exiting.
+ **/
+s32 e1000_read_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 *data)
+{
+	return __e1000_read_kmrn_reg(hw, offset, data, FALSE);
+}
+
+/**
+ *  e1000_read_kmrn_reg_locked -  Read kumeran register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to be read
+ *  @data: pointer to the read data
+ *
+ *  Reads the PHY register at offset using the kumeran interface.  The
+ *  information retrieved is stored in data.
+ *  Assumes semaphore already acquired.
+ **/
+s32 e1000_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data)
+{
+	return __e1000_read_kmrn_reg(hw, offset, data, TRUE);
+}
+
+/**
+ *  __e1000_write_kmrn_reg - Write kumeran register
  *  @hw: pointer to the HW structure
  *  @offset: register offset to write to
  *  @data: data to write at register offset
+ *  @locked: semaphore has already been acquired or not
  *
  *  Acquires semaphore, if necessary.  Then write the data to PHY register
  *  at the offset using the kumeran interface.  Release any acquired semaphores
  *  before exiting.
  **/
-s32 e1000_write_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 data)
+static s32 __e1000_write_kmrn_reg(struct e1000_hw *hw, u32 offset, u16 data,
+                                  bool locked)
 {
 	u32 kmrnctrlsta;
 	s32 ret_val = E1000_SUCCESS;
 
 	DEBUGFUNC("e1000_write_kmrn_reg_generic");
 
-	if (!(hw->phy.ops.acquire))
-		goto out;
+	if (!locked) {
+		if (!(hw->phy.ops.acquire))
+			goto out;
 
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		goto out;
+		ret_val = hw->phy.ops.acquire(hw);
+		if (ret_val)
+			goto out;
+	}
 
 	kmrnctrlsta = ((offset << E1000_KMRNCTRLSTA_OFFSET_SHIFT) &
 	               E1000_KMRNCTRLSTA_OFFSET) | data;
 	E1000_WRITE_REG(hw, E1000_KMRNCTRLSTA, kmrnctrlsta);
 
 	usec_delay(2);
-	hw->phy.ops.release(hw);
+
+	if (!locked)
+		hw->phy.ops.release(hw);
 
 out:
 	return ret_val;
 }
 
+/**
+ *  e1000_write_kmrn_reg_generic -  Write kumeran register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to write to
+ *  @data: data to write at register offset
+ *
+ *  Acquires semaphore then writes the data to the PHY register at the offset
+ *  using the kumeran interface.  Release the acquired semaphore before exiting.
+ **/
+s32 e1000_write_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 data)
+{
+	return __e1000_write_kmrn_reg(hw, offset, data, FALSE);
+}
+
+/**
+ *  e1000_write_kmrn_reg_locked -  Write kumeran register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to write to
+ *  @data: data to write at register offset
+ *
+ *  Write the data to PHY register at the offset using the kumeran interface.
+ *  Assumes semaphore already acquired.
+ **/
+s32 e1000_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data)
+{
+	return __e1000_write_kmrn_reg(hw, offset, data, TRUE);
+}
+
 /**
  *  e1000_copper_link_setup_82577 - Setup 82577 PHY for copper link
  *  @hw: pointer to the HW structure
@@ -589,6 +833,14 @@ s32 e1000_copper_link_setup_82577(struct e1000_hw *hw)
 		goto out;
 	}
 
+	if (phy->type == e1000_phy_82580) {
+		ret_val = hw->phy.ops.reset(hw);
+		if (ret_val) {
+			DEBUGOUT("Error resetting the PHY.\n");
+			goto out;
+		}
+	}
+
 	/* Enable CRS on TX. This must be set for half-duplex operation. */
 	ret_val = phy->ops.read_reg(hw, I82577_CFG_REG, &phy_data);
 	if (ret_val)
@@ -600,15 +852,6 @@ s32 e1000_copper_link_setup_82577(struct e1000_hw *hw)
 	phy_data |= I82577_CFG_ENABLE_DOWNSHIFT;
 
 	ret_val = phy->ops.write_reg(hw, I82577_CFG_REG, phy_data);
-	if (ret_val)
-		goto out;
-
-	/* Set number of link attempts before downshift */
-	ret_val = phy->ops.read_reg(hw, I82577_CTRL_REG, &phy_data);
-	if (ret_val)
-		goto out;
-	phy_data &= ~I82577_CTRL_DOWNSHIFT_MASK;
-	ret_val = phy->ops.write_reg(hw, I82577_CTRL_REG, phy_data);
 
 out:
 	return ret_val;
@@ -1326,18 +1569,22 @@ s32 e1000_phy_force_speed_duplex_m88(struct e1000_hw *hw)
 			goto out;
 
 		if (!link) {
-			/*
-			 * We didn't get link.
-			 * Reset the DSP and cross our fingers.
-			 */
-			ret_val = phy->ops.write_reg(hw,
-			                              M88E1000_PHY_PAGE_SELECT,
-			                              0x001d);
-			if (ret_val)
-				goto out;
-			ret_val = e1000_phy_reset_dsp_generic(hw);
-			if (ret_val)
-				goto out;
+			if (hw->phy.type != e1000_phy_m88) {
+				DEBUGOUT("Link taking longer than expected.\n");
+			} else {
+				/*
+				 * We didn't get link.
+				 * Reset the DSP and cross our fingers.
+				 */
+				ret_val = phy->ops.write_reg(hw,
+						M88E1000_PHY_PAGE_SELECT,
+						0x001d);
+				if (ret_val)
+					goto out;
+				ret_val = e1000_phy_reset_dsp_generic(hw);
+				if (ret_val)
+					goto out;
+			}
 		}
 
 		/* Try once more */
@@ -1347,6 +1594,9 @@ s32 e1000_phy_force_speed_duplex_m88(struct e1000_hw *hw)
 			goto out;
 	}
 
+	if (hw->phy.type != e1000_phy_m88)
+		goto out;
+
 	ret_val = phy->ops.read_reg(hw, M88E1000_EXT_PHY_SPEC_CTRL, &phy_data);
 	if (ret_val)
 		goto out;
@@ -1393,11 +1643,6 @@ s32 e1000_phy_force_speed_duplex_ife(struct e1000_hw *hw)
 
 	DEBUGFUNC("e1000_phy_force_speed_duplex_ife");
 
-	if (phy->type != e1000_phy_ife) {
-		ret_val = e1000_phy_force_speed_duplex_igp(hw);
-		goto out;
-	}
-
 	ret_val = phy->ops.read_reg(hw, PHY_CONTROL, &data);
 	if (ret_val)
 		goto out;
@@ -1625,12 +1870,11 @@ s32 e1000_check_downshift_generic(struct e1000_hw *hw)
 	case e1000_phy_gg82563:
 	case e1000_phy_bm:
 	case e1000_phy_82578:
-	case e1000_phy_82577:
 		offset	= M88E1000_PHY_SPEC_STATUS;
 		mask	= M88E1000_PSSR_DOWNSHIFT;
 		break;
-	case e1000_phy_igp_2:
 	case e1000_phy_igp:
+	case e1000_phy_igp_2:
 	case e1000_phy_igp_3:
 		offset	= IGP01E1000_PHY_LINK_HEALTH;
 		mask	= IGP01E1000_PLHR_SS_DOWNGRADE;
@@ -1825,16 +2069,14 @@ s32 e1000_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
 		 * it across the board.
 		 */
 		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
-		if (ret_val) {
+		if (ret_val)
 			/*
 			 * If the first read fails, another entity may have
 			 * ownership of the resources, wait and try again to
 			 * see if they have relinquished the resources yet.
 			 */
 			usec_delay(usec_interval);
-			ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS,
-			                               &phy_status);
-		}
+		ret_val = hw->phy.ops.read_reg(hw, PHY_STATUS, &phy_status);
 		if (ret_val)
 			break;
 		if (phy_status & MII_SR_LINK_STATUS)
@@ -1879,13 +2121,13 @@ s32 e1000_get_cable_length_m88(struct e1000_hw *hw)
 
 	index = (phy_data & M88E1000_PSSR_CABLE_LENGTH) >>
 	        M88E1000_PSSR_CABLE_LENGTH_SHIFT;
-	if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE + 1) {
-		ret_val = E1000_ERR_PHY;
+	if (index >= M88E1000_CABLE_LENGTH_TABLE_SIZE - 1) {
+		ret_val = -E1000_ERR_PHY;
 		goto out;
 	}
 
 	phy->min_cable_length = e1000_m88_cable_length_table[index];
-	phy->max_cable_length = e1000_m88_cable_length_table[index+1];
+	phy->max_cable_length = e1000_m88_cable_length_table[index + 1];
 
 	phy->cable_length = (phy->min_cable_length + phy->max_cable_length) / 2;
 
@@ -1986,7 +2228,7 @@ s32 e1000_get_phy_info_m88(struct e1000_hw *hw)
 
 	DEBUGFUNC("e1000_get_phy_info_m88");
 
-	if (hw->phy.media_type != e1000_media_type_copper) {
+	if (phy->media_type != e1000_media_type_copper) {
 		DEBUGOUT("Phy info is only valid for copper media\n");
 		ret_val = -E1000_ERR_CONFIG;
 		goto out;
@@ -2088,7 +2330,7 @@ s32 e1000_get_phy_info_igp(struct e1000_hw *hw)
 
 	if ((data & IGP01E1000_PSSR_SPEED_MASK) ==
 	    IGP01E1000_PSSR_SPEED_1000MBPS) {
-		ret_val = hw->phy.ops.get_cable_length(hw);
+		ret_val = phy->ops.get_cable_length(hw);
 		if (ret_val)
 			goto out;
 
@@ -2113,6 +2355,63 @@ out:
 	return ret_val;
 }
 
+/**
+ *  e1000_get_phy_info_ife - Retrieves various IFE PHY states
+ *  @hw: pointer to the HW structure
+ *
+ *  Populates "phy" structure with various feature states.
+ **/
+s32 e1000_get_phy_info_ife(struct e1000_hw *hw)
+{
+	struct e1000_phy_info *phy = &hw->phy;
+	s32 ret_val;
+	u16 data;
+	bool link;
+
+	DEBUGFUNC("e1000_get_phy_info_ife");
+
+	ret_val = e1000_phy_has_link_generic(hw, 1, 0, &link);
+	if (ret_val)
+		goto out;
+
+	if (!link) {
+		DEBUGOUT("Phy info is only valid if link is up\n");
+		ret_val = -E1000_ERR_CONFIG;
+		goto out;
+	}
+
+	ret_val = phy->ops.read_reg(hw, IFE_PHY_SPECIAL_CONTROL, &data);
+	if (ret_val)
+		goto out;
+	phy->polarity_correction = (data & IFE_PSC_AUTO_POLARITY_DISABLE)
+	                           ? FALSE : TRUE;
+
+	if (phy->polarity_correction) {
+		ret_val = e1000_check_polarity_ife(hw);
+		if (ret_val)
+			goto out;
+	} else {
+		/* Polarity is forced */
+		phy->cable_polarity = (data & IFE_PSC_FORCE_POLARITY)
+		                      ? e1000_rev_polarity_reversed
+		                      : e1000_rev_polarity_normal;
+	}
+
+	ret_val = phy->ops.read_reg(hw, IFE_PHY_MDIX_CONTROL, &data);
+	if (ret_val)
+		goto out;
+
+	phy->is_mdix = (data & IFE_PMC_MDIX_STATUS) ? TRUE : FALSE;
+
+	/* The following parameters are undefined for 10/100 operation. */
+	phy->cable_length = E1000_CABLE_LENGTH_UNDEFINED;
+	phy->local_rx = e1000_1000t_rx_status_undefined;
+	phy->remote_rx = e1000_1000t_rx_status_undefined;
+
+out:
+	return ret_val;
+}
+
 /**
  *  e1000_phy_sw_reset_generic - PHY software reset
  *  @hw: pointer to the HW structure
@@ -2302,7 +2601,7 @@ enum e1000_phy_type e1000_get_phy_type_from_id(u32 phy_id)
 {
 	enum e1000_phy_type phy_type = e1000_phy_unknown;
 
-	switch (phy_id)	{
+	switch (phy_id) {
 	case M88E1000_I_PHY_ID:
 	case M88E1000_E_PHY_ID:
 	case M88E1111_I_PHY_ID:
@@ -2333,6 +2632,9 @@ enum e1000_phy_type e1000_get_phy_type_from_id(u32 phy_id)
 	case I82577_E_PHY_ID:
 		phy_type = e1000_phy_82577;
 		break;
+	case I82580_I_PHY_ID:
+		phy_type = e1000_phy_82580;
+		break;
 	default:
 		phy_type = e1000_phy_unknown;
 		break;
@@ -2416,6 +2718,10 @@ s32 e1000_write_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 data)
 
 	DEBUGFUNC("e1000_write_phy_reg_bm");
 
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		return ret_val;
+
 	/* Page 800 works differently than the rest so it has its own func */
 	if (page == BM_WUC_PAGE) {
 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data,
@@ -2423,10 +2729,6 @@ s32 e1000_write_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 data)
 		goto out;
 	}
 
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		goto out;
-
 	hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset);
 
 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
@@ -2446,18 +2748,15 @@ s32 e1000_write_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 data)
 		/* Page is shifted left, PHY expects (page x 32) */
 		ret_val = e1000_write_phy_reg_mdic(hw, page_select,
 		                                   (page << page_shift));
-		if (ret_val) {
-			hw->phy.ops.release(hw);
+		if (ret_val)
 			goto out;
-		}
 	}
 
 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
 	                                   data);
 
-	hw->phy.ops.release(hw);
-
 out:
+	hw->phy.ops.release(hw);
 	return ret_val;
 }
 
@@ -2480,6 +2779,10 @@ s32 e1000_read_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 *data)
 
 	DEBUGFUNC("e1000_read_phy_reg_bm");
 
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		return ret_val;
+
 	/* Page 800 works differently than the rest so it has its own func */
 	if (page == BM_WUC_PAGE) {
 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data,
@@ -2487,10 +2790,6 @@ s32 e1000_read_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 *data)
 		goto out;
 	}
 
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		goto out;
-
 	hw->phy.addr = e1000_get_phy_addr_for_bm_page(page, offset);
 
 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
@@ -2510,17 +2809,14 @@ s32 e1000_read_phy_reg_bm(struct e1000_hw *hw, u32 offset, u16 *data)
 		/* Page is shifted left, PHY expects (page x 32) */
 		ret_val = e1000_write_phy_reg_mdic(hw, page_select,
 		                                   (page << page_shift));
-		if (ret_val) {
-			hw->phy.ops.release(hw);
+		if (ret_val)
 			goto out;
-		}
 	}
 
 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
 	                                  data);
-	hw->phy.ops.release(hw);
-
 out:
+	hw->phy.ops.release(hw);
 	return ret_val;
 }
 
@@ -2541,6 +2837,10 @@ s32 e1000_read_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 *data)
 
 	DEBUGFUNC("e1000_write_phy_reg_bm2");
 
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		return ret_val;
+
 	/* Page 800 works differently than the rest so it has its own func */
 	if (page == BM_WUC_PAGE) {
 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, data,
@@ -2548,10 +2848,6 @@ s32 e1000_read_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 *data)
 		goto out;
 	}
 
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		goto out;
-
 	hw->phy.addr = 1;
 
 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
@@ -2560,17 +2856,14 @@ s32 e1000_read_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 *data)
 		ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT,
 		                                   page);
 
-		if (ret_val) {
-			hw->phy.ops.release(hw);
+		if (ret_val)
 			goto out;
-		}
 	}
 
 	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
 	                                  data);
-	hw->phy.ops.release(hw);
-
 out:
+	hw->phy.ops.release(hw);
 	return ret_val;
 }
 
@@ -2590,6 +2883,10 @@ s32 e1000_write_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 data)
 
 	DEBUGFUNC("e1000_write_phy_reg_bm2");
 
+	ret_val = hw->phy.ops.acquire(hw);
+	if (ret_val)
+		return ret_val;
+
 	/* Page 800 works differently than the rest so it has its own func */
 	if (page == BM_WUC_PAGE) {
 		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset, &data,
@@ -2597,10 +2894,6 @@ s32 e1000_write_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 data)
 		goto out;
 	}
 
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		goto out;
-
 	hw->phy.addr = 1;
 
 	if (offset > MAX_PHY_MULTI_PAGE_REG) {
@@ -2608,18 +2901,15 @@ s32 e1000_write_phy_reg_bm2(struct e1000_hw *hw, u32 offset, u16 data)
 		ret_val = e1000_write_phy_reg_mdic(hw, BM_PHY_PAGE_SELECT,
 		                                   page);
 
-		if (ret_val) {
-			hw->phy.ops.release(hw);
+		if (ret_val)
 			goto out;
-		}
 	}
 
 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & offset,
 	                                   data);
 
-	hw->phy.ops.release(hw);
-
 out:
+	hw->phy.ops.release(hw);
 	return ret_val;
 }
 
@@ -2639,6 +2929,8 @@ out:
  *  3) Write the address using the address opcode (0x11)
  *  4) Read or write the data using the data opcode (0x12)
  *  5) Restore 769_17.2 to its original value
+ *
+ *  Assumes semaphore already acquired.
  **/
 static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
                                           u16 *data, bool read)
@@ -2646,7 +2938,6 @@ static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
 	s32 ret_val;
 	u16 reg = BM_PHY_REG_NUM(offset);
 	u16 phy_reg = 0;
-	u8  phy_acquired = 1;
 
 	DEBUGFUNC("e1000_access_phy_wakeup_reg_bm");
 
@@ -2655,13 +2946,6 @@ static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
 	   (!(E1000_READ_REG(hw, E1000_PHY_CTRL) & E1000_PHY_CTRL_GBE_DISABLE)))
 		DEBUGOUT("Attempting to access page 800 while gig enabled.\n");
 
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val) {
-		DEBUGOUT("Could not acquire PHY\n");
-		phy_acquired = 0;
-		goto out;
-	}
-
 	/* All operations in this function are phy address 1 */
 	hw->phy.addr = 1;
 
@@ -2733,8 +3017,6 @@ static s32 e1000_access_phy_wakeup_reg_bm(struct e1000_hw *hw, u32 offset,
 	}
 
 out:
-	if (phy_acquired == 1)
-		hw->phy.ops.release(hw);
 	return ret_val;
 }
 
@@ -2775,31 +3057,117 @@ void e1000_power_down_phy_copper(struct e1000_hw *hw)
 	msec_delay(1);
 }
 
+/**
+ *  e1000_set_mdio_slow_mode_hv - Set slow MDIO access mode
+ *  @hw:   pointer to the HW structure
+ *  @slow: TRUE for slow mode, FALSE for normal mode
+ *
+ *  Assumes semaphore already acquired.
+ **/
 s32 e1000_set_mdio_slow_mode_hv(struct e1000_hw *hw, bool slow)
 {
 	s32 ret_val = E1000_SUCCESS;
 	u16 data = 0;
 
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		return ret_val;
-
 	/* Set MDIO mode - page 769, register 16: 0x2580==slow, 0x2180==fast */
 	hw->phy.addr = 1;
 	ret_val = e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
 				         (BM_PORT_CTRL_PAGE << IGP_PAGE_SHIFT));
-	if (ret_val) {
-		hw->phy.ops.release(hw);
-		return ret_val;
-	}
+	if (ret_val)
+		goto out;
+
 	ret_val = e1000_write_phy_reg_mdic(hw, BM_CS_CTRL1,
 	                                   (0x2180 | (slow << 10)));
+	if (ret_val)
+		goto out;
 
 	/* dummy read when reverting to fast mode - throw away result */
 	if (!slow)
-		e1000_read_phy_reg_mdic(hw, BM_CS_CTRL1, &data);
+		ret_val = e1000_read_phy_reg_mdic(hw, BM_CS_CTRL1, &data);
 
-	hw->phy.ops.release(hw);
+out:
+	return ret_val;
+}
+
+/**
+ *  __e1000_read_phy_reg_hv -  Read HV PHY register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to be read
+ *  @data: pointer to the read data
+ *  @locked: semaphore has already been acquired or not
+ *
+ *  Acquires semaphore, if necessary, then reads the PHY register at offset
+ *  and stores the retrieved information in data.  Release any acquired
+ *  semaphore before exiting.
+ **/
+static s32 __e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data,
+                                   bool locked)
+{
+	s32 ret_val;
+	u16 page = BM_PHY_REG_PAGE(offset);
+	u16 reg = BM_PHY_REG_NUM(offset);
+	bool in_slow_mode = FALSE;
+
+	DEBUGFUNC("e1000_read_phy_reg_hv");
+
+	if (!locked) {
+		ret_val = hw->phy.ops.acquire(hw);
+		if (ret_val)
+			return ret_val;
+	}
+
+	/* Workaround failure in MDIO access while cable is disconnected */
+	if ((hw->phy.type == e1000_phy_82577) &&
+	    !(E1000_READ_REG(hw, E1000_STATUS) & E1000_STATUS_LU)) {
+		ret_val = e1000_set_mdio_slow_mode_hv(hw, TRUE);
+		if (ret_val)
+			goto out;
+
+		in_slow_mode = TRUE;
+	}
+
+	/* Page 800 works differently than the rest so it has its own func */
+	if (page == BM_WUC_PAGE) {
+		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset,
+		                                         data, TRUE);
+		goto out;
+	}
+
+	if (page > 0 && page < HV_INTC_FC_PAGE_START) {
+		ret_val = e1000_access_phy_debug_regs_hv(hw, offset,
+		                                         data, TRUE);
+		goto out;
+	}
+
+	hw->phy.addr = e1000_get_phy_addr_for_hv_page(page);
+
+	if (page == HV_INTC_FC_PAGE_START)
+		page = 0;
+
+	if (reg > MAX_PHY_MULTI_PAGE_REG) {
+		u32 phy_addr = hw->phy.addr;
+
+		hw->phy.addr = 1;
+
+		/* Page is shifted left, PHY expects (page x 32) */
+		ret_val = e1000_write_phy_reg_mdic(hw,
+					     IGP01E1000_PHY_PAGE_SELECT,
+					     (page << IGP_PAGE_SHIFT));
+		hw->phy.addr = phy_addr;
+
+		if (ret_val)
+			goto out;
+	}
+
+	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg,
+	                                  data);
+out:
+	/* Revert to MDIO fast mode, if applicable */
+	if ((hw->phy.type == e1000_phy_82577) && in_slow_mode)
+		ret_val |= e1000_set_mdio_slow_mode_hv(hw, FALSE);
+
+	if (!locked)
+		hw->phy.ops.release(hw);
 
 	return ret_val;
 }
@@ -2810,93 +3178,41 @@ s32 e1000_set_mdio_slow_mode_hv(struct e1000_hw *hw, bool slow)
  *  @offset: register offset to be read
  *  @data: pointer to the read data
  *
- *  Acquires semaphore, if necessary, then reads the PHY register at offset
- *  and storing the retrieved information in data.  Release any acquired
- *  semaphore before exiting.
+ *  Acquires semaphore then reads the PHY register at offset and stores
+ *  the retrieved information in data.  Release the acquired semaphore
+ *  before exiting.
  **/
 s32 e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data)
 {
-	s32 ret_val;
-	u16 page = BM_PHY_REG_PAGE(offset);
-	u16 reg = BM_PHY_REG_NUM(offset);
-	bool in_slow_mode = FALSE;
-
-	DEBUGFUNC("e1000_read_phy_reg_hv");
-
-	/* Workaround failure in MDIO access while cable is disconnected */
-	if ((hw->phy.type == e1000_phy_82577) &&
-	    !(E1000_READ_REG(hw, E1000_STATUS) & E1000_STATUS_LU)) {
-		ret_val = e1000_set_mdio_slow_mode_hv(hw, TRUE);
-		if (ret_val)
-			goto out;
-
-		in_slow_mode = TRUE;
-	}
-
-	/* Page 800 works differently than the rest so it has its own func */
-	if (page == BM_WUC_PAGE) {
-		ret_val = e1000_access_phy_wakeup_reg_bm(hw, offset,
-		                                         data, TRUE);
-		goto out;
-	}
-
-	if (page > 0 && page < HV_INTC_FC_PAGE_START) {
-		ret_val = e1000_access_phy_debug_regs_hv(hw, offset,
-		                                         data, TRUE);
-		goto out;
-	}
-
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		goto out;
-
-	hw->phy.addr = e1000_get_phy_addr_for_hv_page(page);
-
-	if (page == HV_INTC_FC_PAGE_START)
-		page = 0;
-
-	if (reg > MAX_PHY_MULTI_PAGE_REG) {
-		if ((hw->phy.type != e1000_phy_82578) ||
-		    ((reg != I82578_ADDR_REG) &&
-		     (reg != I82578_ADDR_REG + 1))) {
-			u32 phy_addr = hw->phy.addr;
-
-			hw->phy.addr = 1;
-
-			/* Page is shifted left, PHY expects (page x 32) */
-			ret_val = e1000_write_phy_reg_mdic(hw,
-			                             IGP01E1000_PHY_PAGE_SELECT,
-			                             (page << IGP_PAGE_SHIFT));
-			if (ret_val) {
-				hw->phy.ops.release(hw);
-				goto out;
-			}
-			hw->phy.addr = phy_addr;
-		}
-	}
-
-	ret_val = e1000_read_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg,
-	                                  data);
-	hw->phy.ops.release(hw);
-
-out:
-	/* Revert to MDIO fast mode, if applicable */
-	if ((hw->phy.type == e1000_phy_82577) && in_slow_mode)
-		ret_val = e1000_set_mdio_slow_mode_hv(hw, FALSE);
-
-	return ret_val;
+	return __e1000_read_phy_reg_hv(hw, offset, data, FALSE);
 }
 
 /**
- *  e1000_write_phy_reg_hv - Write HV PHY register
+ *  e1000_read_phy_reg_hv_locked -  Read HV PHY register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to be read
+ *  @data: pointer to the read data
+ *
+ *  Reads the PHY register at offset and stores the retrieved information
+ *  in data.  Assumes semaphore already acquired.
+ **/
+s32 e1000_read_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 *data)
+{
+	return __e1000_read_phy_reg_hv(hw, offset, data, TRUE);
+}
+
+/**
+ *  __e1000_write_phy_reg_hv - Write HV PHY register
  *  @hw: pointer to the HW structure
  *  @offset: register offset to write to
  *  @data: data to write at register offset
+ *  @locked: semaphore has already been acquired or not
  *
  *  Acquires semaphore, if necessary, then writes the data to PHY register
  *  at the offset.  Release any acquired semaphores before exiting.
  **/
-s32 e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data)
+static s32 __e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data,
+                                    bool locked)
 {
 	s32 ret_val;
 	u16 page = BM_PHY_REG_PAGE(offset);
@@ -2905,6 +3221,12 @@ s32 e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data)
 
 	DEBUGFUNC("e1000_write_phy_reg_hv");
 
+	if (!locked) {
+		ret_val = hw->phy.ops.acquire(hw);
+		if (ret_val)
+			return ret_val;
+	}
+
 	/* Workaround failure in MDIO access while cable is disconnected */
 	if ((hw->phy.type == e1000_phy_82577) &&
 	    !(E1000_READ_REG(hw, E1000_STATUS) & E1000_STATUS_LU)) {
@@ -2928,10 +3250,6 @@ s32 e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data)
 		goto out;
 	}
 
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val)
-		goto out;
-
 	hw->phy.addr = e1000_get_phy_addr_for_hv_page(page);
 
 	if (page == HV_INTC_FC_PAGE_START)
@@ -2947,49 +3265,69 @@ s32 e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data)
 	    ((MAX_PHY_REG_ADDRESS & reg) == 0) &&
 	    (data & (1 << 11))) {
 		u16 data2 = 0x7EFF;
-		hw->phy.ops.release(hw);
 		ret_val = e1000_access_phy_debug_regs_hv(hw, (1 << 6) | 0x3,
 		                                         &data2, FALSE);
 		if (ret_val)
 			goto out;
-
-		ret_val = hw->phy.ops.acquire(hw);
-		if (ret_val)
-			goto out;
 	}
 
 	if (reg > MAX_PHY_MULTI_PAGE_REG) {
-		if ((hw->phy.type != e1000_phy_82578) ||
-		    ((reg != I82578_ADDR_REG) &&
-		     (reg != I82578_ADDR_REG + 1))) {
-			u32 phy_addr = hw->phy.addr;
+		u32 phy_addr = hw->phy.addr;
 
-			hw->phy.addr = 1;
+		hw->phy.addr = 1;
 
-			/* Page is shifted left, PHY expects (page x 32) */
-			ret_val = e1000_write_phy_reg_mdic(hw,
-			                             IGP01E1000_PHY_PAGE_SELECT,
-			                             (page << IGP_PAGE_SHIFT));
-			if (ret_val) {
-				hw->phy.ops.release(hw);
-				goto out;
-			}
-			hw->phy.addr = phy_addr;
-		}
+		/* Page is shifted left, PHY expects (page x 32) */
+		ret_val = e1000_write_phy_reg_mdic(hw,
+					     IGP01E1000_PHY_PAGE_SELECT,
+					     (page << IGP_PAGE_SHIFT));
+		hw->phy.addr = phy_addr;
+
+		if (ret_val)
+			goto out;
 	}
 
 	ret_val = e1000_write_phy_reg_mdic(hw, MAX_PHY_REG_ADDRESS & reg,
 	                                  data);
-	hw->phy.ops.release(hw);
 
 out:
 	/* Revert to MDIO fast mode, if applicable */
 	if ((hw->phy.type == e1000_phy_82577) && in_slow_mode)
-		ret_val = e1000_set_mdio_slow_mode_hv(hw, FALSE);
+		ret_val |= e1000_set_mdio_slow_mode_hv(hw, FALSE);
+
+	if (!locked)
+		hw->phy.ops.release(hw);
 
 	return ret_val;
 }
 
+/**
+ *  e1000_write_phy_reg_hv - Write HV PHY register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to write to
+ *  @data: data to write at register offset
+ *
+ *  Acquires semaphore then writes the data to PHY register at the offset.
+ *  Release the acquired semaphores before exiting.
+ **/
+s32 e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data)
+{
+	return __e1000_write_phy_reg_hv(hw, offset, data, FALSE);
+}
+
+/**
+ *  e1000_write_phy_reg_hv_locked - Write HV PHY register
+ *  @hw: pointer to the HW structure
+ *  @offset: register offset to write to
+ *  @data: data to write at register offset
+ *
+ *  Writes the data to PHY register at the offset.  Assumes semaphore
+ *  already acquired.
+ **/
+s32 e1000_write_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 data)
+{
+	return __e1000_write_phy_reg_hv(hw, offset, data, TRUE);
+}
+
 /**
  *  e1000_get_phy_addr_for_hv_page - Get PHY adrress based on page
  *  @page: page to be accessed
@@ -3011,10 +3349,9 @@ static u32 e1000_get_phy_addr_for_hv_page(u32 page)
  *  @data: pointer to the data to be read or written
  *  @read: determines if operation is read or written
  *
- *  Acquires semaphore, if necessary, then reads the PHY register at offset
- *  and storing the retreived information in data.  Release any acquired
- *  semaphores before exiting.  Note that the procedure to read these regs
- *  uses the address port and data port to read/write.
+ *  Reads the PHY register at offset and stores the retreived information
+ *  in data.  Assumes semaphore already acquired.  Note that the procedure
+ *  to read these regs uses the address port and data port to read/write.
  **/
 static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
                                           u16 *data, bool read)
@@ -3022,7 +3359,6 @@ static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
 	s32 ret_val;
 	u32 addr_reg = 0;
 	u32 data_reg = 0;
-	u8  phy_acquired = 1;
 
 	DEBUGFUNC("e1000_access_phy_debug_regs_hv");
 
@@ -3031,13 +3367,6 @@ static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
 	           I82578_ADDR_REG : I82577_ADDR_REG;
 	data_reg = addr_reg + 1;
 
-	ret_val = hw->phy.ops.acquire(hw);
-	if (ret_val) {
-		DEBUGOUT("Could not acquire PHY\n");
-		phy_acquired = 0;
-		goto out;
-	}
-
 	/* All operations in this function are phy address 2 */
 	hw->phy.addr = 2;
 
@@ -3060,8 +3389,6 @@ static s32 e1000_access_phy_debug_regs_hv(struct e1000_hw *hw, u32 offset,
 	}
 
 out:
-	if (phy_acquired == 1)
-		hw->phy.ops.release(hw);
 	return ret_val;
 }
 
@@ -3090,7 +3417,7 @@ s32 e1000_link_stall_workaround_hv(struct e1000_hw *hw)
 	hw->phy.ops.read_reg(hw, PHY_CONTROL, &data);
 	if (data & PHY_CONTROL_LB)
 		goto out;
-		
+
 	/* check if link is up and at 1Gbps */
 	ret_val = hw->phy.ops.read_reg(hw, BM_CS_STATUS, &data);
 	if (ret_val)
@@ -3309,7 +3636,7 @@ s32 e1000_get_cable_length_82577(struct e1000_hw *hw)
 	         I82577_DSTATUS_CABLE_LENGTH_SHIFT;
 
 	if (length == E1000_CABLE_LENGTH_UNDEFINED)
-		ret_val = E1000_ERR_PHY;
+		ret_val = -E1000_ERR_PHY;
 
 	phy->cable_length = length;
 
diff --git a/sys/dev/e1000/e1000_phy.h b/sys/dev/e1000/e1000_phy.h
index 28ed0c15852..01e91d62aee 100644
--- a/sys/dev/e1000/e1000_phy.h
+++ b/sys/dev/e1000/e1000_phy.h
@@ -45,6 +45,7 @@ s32  e1000_check_polarity_m88(struct e1000_hw *hw);
 s32  e1000_check_polarity_igp(struct e1000_hw *hw);
 s32  e1000_check_polarity_ife(struct e1000_hw *hw);
 s32  e1000_check_reset_block_generic(struct e1000_hw *hw);
+s32  e1000_phy_setup_autoneg(struct e1000_hw *hw);
 s32  e1000_copper_link_autoneg(struct e1000_hw *hw);
 s32  e1000_copper_link_setup_igp(struct e1000_hw *hw);
 s32  e1000_copper_link_setup_m88(struct e1000_hw *hw);
@@ -57,19 +58,23 @@ s32  e1000_get_cfg_done_generic(struct e1000_hw *hw);
 s32  e1000_get_phy_id(struct e1000_hw *hw);
 s32  e1000_get_phy_info_igp(struct e1000_hw *hw);
 s32  e1000_get_phy_info_m88(struct e1000_hw *hw);
+s32  e1000_get_phy_info_ife(struct e1000_hw *hw);
 s32  e1000_phy_sw_reset_generic(struct e1000_hw *hw);
 void e1000_phy_force_speed_duplex_setup(struct e1000_hw *hw, u16 *phy_ctrl);
 s32  e1000_phy_hw_reset_generic(struct e1000_hw *hw);
 s32  e1000_phy_reset_dsp_generic(struct e1000_hw *hw);
-s32  e1000_phy_setup_autoneg(struct e1000_hw *hw);
 s32  e1000_read_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 *data);
+s32  e1000_read_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 *data);
 s32  e1000_read_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 *data);
+s32  e1000_read_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 *data);
 s32  e1000_read_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 *data);
 s32  e1000_set_d3_lplu_state_generic(struct e1000_hw *hw, bool active);
 s32  e1000_setup_copper_link_generic(struct e1000_hw *hw);
 s32  e1000_wait_autoneg_generic(struct e1000_hw *hw);
 s32  e1000_write_kmrn_reg_generic(struct e1000_hw *hw, u32 offset, u16 data);
+s32  e1000_write_kmrn_reg_locked(struct e1000_hw *hw, u32 offset, u16 data);
 s32  e1000_write_phy_reg_igp(struct e1000_hw *hw, u32 offset, u16 data);
+s32  e1000_write_phy_reg_igp_locked(struct e1000_hw *hw, u32 offset, u16 data);
 s32  e1000_write_phy_reg_m88(struct e1000_hw *hw, u32 offset, u16 data);
 s32  e1000_phy_reset_dsp(struct e1000_hw *hw);
 s32  e1000_phy_has_link_generic(struct e1000_hw *hw, u32 iterations,
@@ -85,8 +90,12 @@ void e1000_power_up_phy_copper(struct e1000_hw *hw);
 void e1000_power_down_phy_copper(struct e1000_hw *hw);
 s32  e1000_read_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 *data);
 s32  e1000_write_phy_reg_mdic(struct e1000_hw *hw, u32 offset, u16 data);
+s32  e1000_read_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 *data);
+s32  e1000_write_phy_reg_i2c(struct e1000_hw *hw, u32 offset, u16 data);
 s32  e1000_read_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 *data);
+s32  e1000_read_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 *data);
 s32  e1000_write_phy_reg_hv(struct e1000_hw *hw, u32 offset, u16 data);
+s32  e1000_write_phy_reg_hv_locked(struct e1000_hw *hw, u32 offset, u16 data);
 s32  e1000_set_mdio_slow_mode_hv(struct e1000_hw *hw, bool slow);
 s32  e1000_link_stall_workaround_hv(struct e1000_hw *hw);
 s32  e1000_copper_link_setup_82577(struct e1000_hw *hw);
@@ -140,7 +149,6 @@ s32  e1000_get_cable_length_82577(struct e1000_hw *hw);
 #define I82577_CFG_ASSERT_CRS_ON_TX       (1 << 15)
 #define I82577_CFG_ENABLE_DOWNSHIFT       (3 << 10) /* auto downshift 100/10 */
 #define I82577_CTRL_REG                   23
-#define I82577_CTRL_DOWNSHIFT_MASK        (7 << 10)
 
 /* 82577 specific PHY registers */
 #define I82577_PHY_CTRL_2            18
@@ -175,6 +183,13 @@ s32  e1000_get_cable_length_82577(struct e1000_hw *hw);
 #define BM_CS_STATUS_SPEED_MASK           0xC000
 #define BM_CS_STATUS_SPEED_1000           0x8000
 
+/* 82577 Mobile Phy Status Register */
+#define HV_M_STATUS                       26
+#define HV_M_STATUS_AUTONEG_COMPLETE      0x1000
+#define HV_M_STATUS_SPEED_MASK            0x0300
+#define HV_M_STATUS_SPEED_1000            0x0200
+#define HV_M_STATUS_LINK_UP               0x0040
+
 #define IGP01E1000_PHY_PCS_INIT_REG       0x00B4
 #define IGP01E1000_PHY_POLARITY_MASK      0x0078
 
@@ -220,6 +235,8 @@ s32  e1000_get_cable_length_82577(struct e1000_hw *hw);
 #define E1000_KMRNCTRLSTA_TIMEOUTS        0x4    /* Kumeran Timeouts */
 #define E1000_KMRNCTRLSTA_INBAND_PARAM    0x9    /* Kumeran InBand Parameters */
 #define E1000_KMRNCTRLSTA_DIAG_NELPBK     0x1000 /* Nearend Loopback mode */
+#define E1000_KMRNCTRLSTA_K1_CONFIG        0x7
+#define E1000_KMRNCTRLSTA_K1_ENABLE        0x0002
 
 #define IFE_PHY_EXTENDED_STATUS_CONTROL 0x10
 #define IFE_PHY_SPECIAL_CONTROL     0x11 /* 100BaseTx PHY Special Control */
diff --git a/sys/dev/e1000/e1000_regs.h b/sys/dev/e1000/e1000_regs.h
index 3a62d0a61a3..9b0bb9177e0 100644
--- a/sys/dev/e1000/e1000_regs.h
+++ b/sys/dev/e1000/e1000_regs.h
@@ -43,6 +43,12 @@
 #define E1000_CTRL_EXT 0x00018  /* Extended Device Control - RW */
 #define E1000_FLA      0x0001C  /* Flash Access - RW */
 #define E1000_MDIC     0x00020  /* MDI Control - RW */
+#define E1000_MDICNFG  0x00E04  /* MDI Config - RW */
+#define E1000_REGISTER_SET_SIZE        0x20000 /* CSR Size */
+#define E1000_EEPROM_INIT_CTRL_WORD_2  0x0F /* EEPROM Init Ctrl Word 2 */
+#define E1000_BARCTRL                  0x5BBC /* BAR ctrl reg */
+#define E1000_BARCTRL_FLSIZE           0x0700 /* BAR ctrl Flsize */
+#define E1000_BARCTRL_CSRSIZE          0x2000 /* BAR ctrl CSR size */
 #define E1000_SCTL     0x00024  /* SerDes Control - RW */
 #define E1000_FCAL     0x00028  /* Flow Control Address Low - RW */
 #define E1000_FCAH     0x0002C  /* Flow Control Address High -RW */
@@ -121,11 +127,7 @@
 #define E1000_RDPUCTL  0x025DC  /* DMA Rx Descriptor uC Control - RW */
 #define E1000_PBDIAG   0x02458  /* Packet Buffer Diagnostic - RW */
 #define E1000_RXPBS    0x02404  /* Rx Packet Buffer Size - RW */
-#define E1000_RXCTL(_n)   (0x0C014 + (0x40 * (_n)))
-#define E1000_RQDPC(_n)   (0x0C030 + (0x40 * (_n)))
-#define E1000_TXCTL(_n)   (0x0E014 + (0x40 * (_n)))
-#define E1000_RXCTL(_n)   (0x0C014 + (0x40 * (_n)))
-#define E1000_RQDPC(_n)   (0x0C030 + (0x40 * (_n)))
+#define E1000_IRPBS 0x02404 /* Same as RXPBS, renamed for newer adapters - RW */
 #define E1000_RDTR     0x02820  /* Rx Delay Timer - RW */
 #define E1000_RADV     0x0282C  /* Rx Interrupt Absolute Delay Timer - RW */
 /*
@@ -146,10 +148,15 @@
                                          (0x0C00C + ((_n) * 0x40)))
 #define E1000_RDH(_n)        ((_n) < 4 ? (0x02810 + ((_n) * 0x100)) : \
                                          (0x0C010 + ((_n) * 0x40)))
+#define E1000_RXCTL(_n)      ((_n) < 4 ? (0x02814 + ((_n) * 0x100)) : \
+                                         (0x0C014 + ((_n) * 0x40)))
+#define E1000_DCA_RXCTRL(_n) E1000_RXCTL(_n)
 #define E1000_RDT(_n)        ((_n) < 4 ? (0x02818 + ((_n) * 0x100)) : \
                                          (0x0C018 + ((_n) * 0x40)))
 #define E1000_RXDCTL(_n)     ((_n) < 4 ? (0x02828 + ((_n) * 0x100)) : \
                                          (0x0C028 + ((_n) * 0x40)))
+#define E1000_RQDPC(_n)      ((_n) < 4 ? (0x02830 + ((_n) * 0x100)) : \
+                                         (0x0C030 + ((_n) * 0x40)))
 #define E1000_TDBAL(_n)      ((_n) < 4 ? (0x03800 + ((_n) * 0x100)) : \
                                          (0x0E000 + ((_n) * 0x40)))
 #define E1000_TDBAH(_n)      ((_n) < 4 ? (0x03804 + ((_n) * 0x100)) : \
@@ -158,17 +165,18 @@
                                          (0x0E008 + ((_n) * 0x40)))
 #define E1000_TDH(_n)        ((_n) < 4 ? (0x03810 + ((_n) * 0x100)) : \
                                          (0x0E010 + ((_n) * 0x40)))
+#define E1000_TXCTL(_n)      ((_n) < 4 ? (0x03814 + ((_n) * 0x100)) : \
+                                         (0x0E014 + ((_n) * 0x40)))
+#define E1000_DCA_TXCTRL(_n) E1000_TXCTL(_n)
 #define E1000_TDT(_n)        ((_n) < 4 ? (0x03818 + ((_n) * 0x100)) : \
                                          (0x0E018 + ((_n) * 0x40)))
 #define E1000_TXDCTL(_n)     ((_n) < 4 ? (0x03828 + ((_n) * 0x100)) : \
                                          (0x0E028 + ((_n) * 0x40)))
-#define E1000_TARC(_n)       (0x03840 + (_n << 8))
-#define E1000_DCA_TXCTRL(_n) (0x03814 + (_n << 8))
-#define E1000_DCA_RXCTRL(_n) (0x02814 + (_n << 8))
 #define E1000_TDWBAL(_n)     ((_n) < 4 ? (0x03838 + ((_n) * 0x100)) : \
                                          (0x0E038 + ((_n) * 0x40)))
 #define E1000_TDWBAH(_n)     ((_n) < 4 ? (0x0383C + ((_n) * 0x100)) : \
                                          (0x0E03C + ((_n) * 0x40)))
+#define E1000_TARC(_n)                   (0x03840 + ((_n) * 0x100))
 #define E1000_RSRPD    0x02C00  /* Rx Small Packet Detect - RW */
 #define E1000_RAID     0x02C08  /* Receive Ack Interrupt Delay - RW */
 #define E1000_TXDMAC   0x03000  /* Tx DMA Control - RW */
@@ -187,6 +195,7 @@
 #define E1000_PBSLAC   0x03100  /* Packet Buffer Slave Access Control */
 #define E1000_PBSLAD(_n)  (0x03110 + (0x4 * (_n)))  /* Packet Buffer DWORD (_n) */
 #define E1000_TXPBS    0x03404  /* Tx Packet Buffer Size - RW */
+#define E1000_ITPBS   0x03404   /* Same as TXPBS, renamed for newer adpaters - RW */
 #define E1000_TDFH     0x03410  /* Tx Data FIFO Head - RW */
 #define E1000_TDFT     0x03418  /* Tx Data FIFO Tail - RW */
 #define E1000_TDFHS    0x03420  /* Tx Data FIFO Head Saved - RW */
@@ -271,6 +280,7 @@
 #define E1000_ICTXQMTC 0x0411C  /* Interrupt Cause Tx Queue Min Thresh Count */
 #define E1000_ICRXDMTC 0x04120  /* Interrupt Cause Rx Desc Min Thresh Count */
 #define E1000_ICRXOC   0x04124  /* Interrupt Cause Receiver Overrun Count */
+#define E1000_CRC_OFFSET 0x05F50  /* CRC Offset register */
 
 #define E1000_LSECTXUT        0x04300  /* LinkSec Tx Untagged Packet Count - OutPktsUntagged */
 #define E1000_LSECTXPKTE      0x04304  /* LinkSec Encrypted Tx Packets Count - OutPktsEncrypted */
@@ -392,6 +402,7 @@
 #define E1000_SWSM2     0x05B58 /* Driver-only SW semaphore (not used by BOOT agents) */
 #define E1000_DCA_ID    0x05B70 /* DCA Requester ID Information - RO */
 #define E1000_DCA_CTRL  0x05B74 /* DCA Control - RW */
+#define E1000_UFUSE     0x05B78 /* UFUSE - RO */
 #define E1000_FFLT_DBG  0x05F04 /* Debug Register */
 #define E1000_HICR      0x08F00 /* Host Interface Control */
 
@@ -437,6 +448,7 @@
 #define E1000_VMOLR(_n)        (0x05AD0 + (4 * (_n)))
 #define E1000_VLVF(_n)         (0x05D00 + (4 * (_n))) /* VLAN Virtual Machine
                                                        * Filter - RW */
+#define E1000_VMVIR(_n)        (0x03700 + (4 * (_n)))
 /* Time Sync */
 #define E1000_TSYNCRXCTL 0x0B620 /* Rx Time Sync Control register - RW */
 #define E1000_TSYNCTXCTL 0x0B614 /* Tx Time Sync Control register - RW */
@@ -450,6 +462,8 @@
 #define E1000_SYSTIML    0x0B600 /* System time register Low - RO */
 #define E1000_SYSTIMH    0x0B604 /* System time register High - RO */
 #define E1000_TIMINCA    0x0B608 /* Increment attributes register - RW */
+#define E1000_TSAUXC     0x0B640 /* Timesync Auxiliary Control register */
+#define E1000_SYSTIMR    0x0B6F8 /* System time register Residue */
 #define E1000_RXMTRL     0x0B634 /* Time sync Rx EtherType and Msg Type - RW */
 #define E1000_RXUDP      0x0B638 /* Time Sync Rx UDP Port - RW */
 
@@ -493,4 +507,16 @@
 #define E1000_RTTBCNACH         0x0B214 /* Tx BCN Control High */
 #define E1000_RTTBCNACL         0x0B210 /* Tx BCN Control Low */
 
+/* DMA Coalescing registers */
+#define E1000_DMACR             0x02508 /* Control Register */
+#define E1000_DMCTXTH           0x03550 /* Transmit Threshold */
+#define E1000_DMCTLX            0x02514 /* Time to Lx Request */
+#define E1000_DMCRTRH           0x05DD0 /* Receive Packet Rate Threshold */
+#define E1000_DMCCNT            0x05DD4 /* Current RX Count */
+#define E1000_FCRTC             0x02170 /* Flow Control Rx high watermark */
+#define E1000_PCIEMISC          0x05BB8 /* PCIE misc config register */
+
+/* PCIe Parity Status Register */
+#define E1000_PCIEERRSTS        0x05BA8
+#define E1000_ERFUSE            0x00000400
 #endif
diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index 7a2dbad33de..8756b0c62c8 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -94,7 +94,7 @@ int	em_display_debug_stats = 0;
 /*********************************************************************
  *  Driver version:
  *********************************************************************/
-char em_driver_version[] = "6.9.14";
+char em_driver_version[] = "6.9.24";
 
 
 /*********************************************************************
@@ -194,7 +194,7 @@ static em_vendor_info_t em_vendor_info_array[] =
 	{ 0x8086, E1000_DEV_ID_ICH8_IFE_GT,	PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_ICH8_IFE_G,	PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_ICH8_IGP_M,	PCI_ANY_ID, PCI_ANY_ID, 0},
-
+	{ 0x8086, E1000_DEV_ID_ICH8_82567V_3,	PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_ICH9_IGP_M_AMT,	PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_ICH9_IGP_AMT,	PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_ICH9_IGP_C,	PCI_ANY_ID, PCI_ANY_ID, 0},
@@ -211,6 +211,10 @@ static em_vendor_info_t em_vendor_info_array[] =
 	{ 0x8086, E1000_DEV_ID_ICH10_R_BM_V,	PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_ICH10_D_BM_LM,	PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_ICH10_D_BM_LF,	PCI_ANY_ID, PCI_ANY_ID, 0},
+	{ 0x8086, E1000_DEV_ID_PCH_M_HV_LM,	PCI_ANY_ID, PCI_ANY_ID, 0},
+	{ 0x8086, E1000_DEV_ID_PCH_M_HV_LC,	PCI_ANY_ID, PCI_ANY_ID, 0},
+	{ 0x8086, E1000_DEV_ID_PCH_D_HV_DM,	PCI_ANY_ID, PCI_ANY_ID, 0},
+	{ 0x8086, E1000_DEV_ID_PCH_D_HV_DC,	PCI_ANY_ID, PCI_ANY_ID, 0},
 	/* required last entry */
 	{ 0, 0, 0, 0, 0}
 };
@@ -240,7 +244,6 @@ static int	em_mq_start_locked(struct ifnet *, struct mbuf *);
 static void	em_qflush(struct ifnet *);
 #endif
 static int	em_ioctl(struct ifnet *, u_long, caddr_t);
-static void	em_watchdog(struct adapter *);
 static void	em_init(void *);
 static void	em_init_locked(struct adapter *);
 static void	em_stop(void *);
@@ -315,7 +318,9 @@ static void	em_init_manageability(struct adapter *);
 static void	em_release_manageability(struct adapter *);
 static void     em_get_hw_control(struct adapter *);
 static void     em_release_hw_control(struct adapter *);
+static void	em_get_wakeup(device_t);
 static void     em_enable_wakeup(device_t);
+static int	em_enable_phy_wakeup(struct adapter *);
 
 #ifdef EM_LEGACY_IRQ
 static void	em_intr(void *);
@@ -490,7 +495,6 @@ em_attach(device_t dev)
 	struct adapter	*adapter;
 	int		tsize, rsize;
 	int		error = 0;
-	u16		eeprom_data, device_id;
 
 	INIT_DEBUGOUT("em_attach: begin");
 
@@ -531,6 +535,7 @@ em_attach(device_t dev)
 	** identified
 	*/
 	if ((adapter->hw.mac.type == e1000_ich8lan) ||
+	    (adapter->hw.mac.type == e1000_pchlan) ||
 	    (adapter->hw.mac.type == e1000_ich9lan) ||
 	    (adapter->hw.mac.type == e1000_ich10lan)) {
 		int rid = EM_BAR_TYPE_FLASH;
@@ -728,6 +733,11 @@ em_attach(device_t dev)
 	if (error)
 		goto err_rx_struct;
 
+	/*
+	 * Get Wake-on-Lan and Management info for later use
+	 */
+	em_get_wakeup(dev);
+
 	/* Setup OS specific network interface */
 	em_setup_interface(dev, adapter);
 
@@ -742,69 +752,6 @@ em_attach(device_t dev)
 		device_printf(dev,
 		    "PHY reset is blocked due to SOL/IDER session.\n");
 
-	/* Determine if we have to control management hardware */
-	adapter->has_manage = e1000_enable_mng_pass_thru(&adapter->hw);
-
-	/*
-	 * Setup Wake-on-Lan
-	 */
-	switch (adapter->hw.mac.type) {
-
-	case e1000_82542:
-	case e1000_82543:
-		break;
-	case e1000_82546:
-	case e1000_82546_rev_3:
-	case e1000_82571:
-	case e1000_80003es2lan:
-		if (adapter->hw.bus.func == 1)
-			e1000_read_nvm(&adapter->hw,
-			    NVM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
-		else
-			e1000_read_nvm(&adapter->hw,
-			    NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
-		eeprom_data &= EM_EEPROM_APME;
-		break;
-	default:
-		/* APME bit in EEPROM is mapped to WUC.APME */
-		eeprom_data = E1000_READ_REG(&adapter->hw, E1000_WUC) &
-		    E1000_WUC_APME;
-		break;
-	}
-	if (eeprom_data)
-		adapter->wol = E1000_WUFC_MAG;
-	/*
-         * We have the eeprom settings, now apply the special cases
-         * where the eeprom may be wrong or the board won't support
-         * wake on lan on a particular port
-	 */
-	device_id = pci_get_device(dev);
-        switch (device_id) {
-	case E1000_DEV_ID_82546GB_PCIE:
-		adapter->wol = 0;
-		break;
-	case E1000_DEV_ID_82546EB_FIBER:
-	case E1000_DEV_ID_82546GB_FIBER:
-	case E1000_DEV_ID_82571EB_FIBER:
-		/* Wake events only supported on port A for dual fiber
-		 * regardless of eeprom setting */
-		if (E1000_READ_REG(&adapter->hw, E1000_STATUS) &
-		    E1000_STATUS_FUNC_1)
-			adapter->wol = 0;
-		break;
-	case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
-	case E1000_DEV_ID_82571EB_QUAD_COPPER:
-	case E1000_DEV_ID_82571EB_QUAD_FIBER:
-	case E1000_DEV_ID_82571EB_QUAD_COPPER_LP:
-                /* if quad port adapter, disable WoL on all but port A */
-		if (global_quad_port_a != 0)
-			adapter->wol = 0;
-		/* Reset for multiple quad port adapters */
-		if (++global_quad_port_a == 4)
-			global_quad_port_a = 0;
-                break;
-	}
-
 	/* Do we need workaround for 82544 PCI-X adapter? */
 	if (adapter->hw.bus.type == e1000_bus_type_pcix &&
 	    adapter->hw.mac.type == e1000_82544)
@@ -820,6 +767,10 @@ em_attach(device_t dev)
 	    em_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST); 
 #endif
 
+	/* Non-AMT based hardware can now take control from firmware */
+	if (adapter->has_manage && !adapter->has_amt)
+		em_get_hw_control(adapter);
+
 	/* Tell the stack that the interface is not active */
 	adapter->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
 
@@ -886,20 +837,6 @@ em_detach(device_t dev)
 
 	em_release_manageability(adapter);
 
-	if (((adapter->hw.mac.type == e1000_82573) ||
-	    (adapter->hw.mac.type == e1000_82583) ||
-	    (adapter->hw.mac.type == e1000_ich8lan) ||
-	    (adapter->hw.mac.type == e1000_ich10lan) ||
-	    (adapter->hw.mac.type == e1000_ich9lan)) &&
-	    e1000_check_mng_mode(&adapter->hw))
-		em_release_hw_control(adapter);
-
-	if (adapter->wol) {
-		E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
-		E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol);
-		em_enable_wakeup(dev);
-	}
-
 	EM_TX_UNLOCK(adapter);
 	EM_CORE_UNLOCK(adapter);
 
@@ -934,6 +871,7 @@ em_detach(device_t dev)
 		adapter->rx_desc_base = NULL;
 	}
 
+	em_release_hw_control(adapter);
 	EM_TX_LOCK_DESTROY(adapter);
 	EM_RX_LOCK_DESTROY(adapter);
 	EM_CORE_LOCK_DESTROY(adapter);
@@ -963,25 +901,9 @@ em_suspend(device_t dev)
 
 	EM_CORE_LOCK(adapter);
 
-	EM_TX_LOCK(adapter);
-	em_stop(adapter);
-	EM_TX_UNLOCK(adapter);
-
         em_release_manageability(adapter);
-
-        if (((adapter->hw.mac.type == e1000_82573) ||
-	    (adapter->hw.mac.type == e1000_82583) ||
-            (adapter->hw.mac.type == e1000_ich8lan) ||
-            (adapter->hw.mac.type == e1000_ich10lan) ||
-            (adapter->hw.mac.type == e1000_ich9lan)) &&
-            e1000_check_mng_mode(&adapter->hw))
-                em_release_hw_control(adapter);
-
-        if (adapter->wol) {
-                E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
-                E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol);
-                em_enable_wakeup(dev);
-        }
+	em_release_hw_control(adapter);
+	em_enable_wakeup(dev);
 
 	EM_CORE_UNLOCK(adapter);
 
@@ -1035,7 +957,7 @@ em_mq_start_locked(struct ifnet *ifp, struct mbuf *m)
 	} else if (drbr_empty(ifp, adapter->br) &&
 	    (adapter->num_tx_desc_avail > EM_TX_OP_THRESHOLD)) {
 		if ((error = em_xmit(adapter, &m)) != 0) {
-			if (m != NULL)
+			if (m)
 				error = drbr_enqueue(ifp, adapter->br, m);
 			return (error);
 		} else {
@@ -1049,7 +971,7 @@ em_mq_start_locked(struct ifnet *ifp, struct mbuf *m)
 			** listener and set the watchdog on.
 			*/
 			ETHER_BPF_MTAP(ifp, m);
-			adapter->watchdog_timer = EM_TX_TIMEOUT;
+			adapter->watchdog_check = TRUE;
 		}
 	} else if ((error = drbr_enqueue(ifp, adapter->br, m)) != 0)
 		return (error);
@@ -1072,7 +994,7 @@ process:
 		drbr_stats_update(ifp, next->m_pkthdr.len, next->m_flags);
                 ETHER_BPF_MTAP(ifp, next);
                 /* Set the watchdog */
-                adapter->watchdog_timer = EM_TX_TIMEOUT;
+		adapter->watchdog_check = TRUE;
         }
 
         if (adapter->num_tx_desc_avail <= EM_TX_OP_THRESHOLD)
@@ -1151,7 +1073,7 @@ em_start_locked(struct ifnet *ifp)
 		ETHER_BPF_MTAP(ifp, m_head);
 
 		/* Set timeout in case hardware has problems transmitting. */
-		adapter->watchdog_timer = EM_TX_TIMEOUT;
+		adapter->watchdog_check = TRUE;
 	}
 	if (adapter->num_tx_desc_avail <= EM_TX_OP_THRESHOLD)
 		ifp->if_drv_flags |= IFF_DRV_OACTIVE;
@@ -1209,8 +1131,7 @@ em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 				em_init_locked(adapter);
 				EM_CORE_UNLOCK(adapter);
 			}
-			if (!(ifp->if_flags & IFF_NOARP))
-				arp_ifinit(ifp, ifa);
+			arp_ifinit(ifp, ifa);
 		} else
 #endif
 			error = ether_ioctl(ifp, command, data);
@@ -1244,6 +1165,9 @@ em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 		case e1000_80003es2lan:	/* Limit Jumbo Frame size */
 			max_frame_size = 9234;
 			break;
+		case e1000_pchlan:
+			max_frame_size = 4096;
+			break;
 			/* Adapters that do not support jumbo frames */
 		case e1000_82542:
 		case e1000_82583:
@@ -1359,11 +1283,17 @@ em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 			reinit = 1;
 		}
 #endif
-
 		if (mask & IFCAP_VLAN_HWTAGGING) {
 			ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
 			reinit = 1;
 		}
+		if ((mask & IFCAP_WOL) &&
+		    (ifp->if_capabilities & IFCAP_WOL) != 0) {
+			if (mask & IFCAP_WOL_MCAST)
+				ifp->if_capenable ^= IFCAP_WOL_MCAST;
+			if (mask & IFCAP_WOL_MAGIC)
+				ifp->if_capenable ^= IFCAP_WOL_MAGIC;
+		}
 		if (reinit && (ifp->if_drv_flags & IFF_DRV_RUNNING))
 			em_init(adapter);
 #if __FreeBSD_version >= 700000
@@ -1380,53 +1310,6 @@ em_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 	return (error);
 }
 
-/*********************************************************************
- *  Watchdog timer:
- *
- *  This routine is called from the local timer every second.
- *  As long as transmit descriptors are being cleaned the value
- *  is non-zero and we do nothing. Reaching 0 indicates a tx hang
- *  and we then reset the device.
- *
- **********************************************************************/
-
-static void
-em_watchdog(struct adapter *adapter)
-{
-
-	EM_CORE_LOCK_ASSERT(adapter);
-
-	/*
-	** The timer is set to 5 every time start queues a packet.
-	** Then txeof keeps resetting it as long as it cleans at
-	** least one descriptor.
-	** Finally, anytime all descriptors are clean the timer is
-	** set to 0.
-	*/
-	EM_TX_LOCK(adapter);
-	if ((adapter->watchdog_timer == 0) || (--adapter->watchdog_timer)) {
-		EM_TX_UNLOCK(adapter);
-		return;
-	}
-
-	/* If we are in this routine because of pause frames, then
-	 * don't reset the hardware.
-	 */
-	if (E1000_READ_REG(&adapter->hw, E1000_STATUS) &
-	    E1000_STATUS_TXOFF) {
-		adapter->watchdog_timer = EM_TX_TIMEOUT;
-		EM_TX_UNLOCK(adapter);
-		return;
-	}
-
-	if (e1000_check_for_link(&adapter->hw) == 0)
-		device_printf(adapter->dev, "watchdog timeout -- resetting\n");
-	adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
-	adapter->watchdog_events++;
-	EM_TX_UNLOCK(adapter);
-
-	em_init_locked(adapter);
-}
 
 /*********************************************************************
  *  Init entry point
@@ -1492,6 +1375,9 @@ em_init_locked(struct adapter *adapter)
 		break;
 	case e1000_ich9lan:
 	case e1000_ich10lan:
+	case e1000_pchlan:
+		pba = E1000_PBA_10K;
+		break;
 	case e1000_ich8lan:
 		pba = E1000_PBA_8K;
 		break;
@@ -1614,6 +1500,10 @@ em_init_locked(struct adapter *adapter)
 #endif /* DEVICE_POLLING */
 		em_enable_intr(adapter);
 
+	/* AMT based hardware can now take control from firmware */
+	if (adapter->has_manage && adapter->has_amt)
+		em_get_hw_control(adapter);
+
 	/* Don't reset the phy next time init gets called */
 	adapter->hw.phy.reset_disable = TRUE;
 }
@@ -1667,7 +1557,7 @@ em_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
 	if (!drbr_empty(ifp, adapter->br))
 		em_mq_start_locked(ifp, NULL);
 #else
-	if (!IFQ_DRV_IS_EMPTY(&ifp->snd))
+	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		em_start_locked(ifp);
 #endif
 	EM_TX_UNLOCK(adapter);
@@ -1769,7 +1659,7 @@ em_handle_rxtx(void *context, int pending)
 		if (!drbr_empty(ifp, adapter->br))
 			em_mq_start_locked(ifp, NULL);
 #else
-		if (!IFQ_DRV_IS_EMPTY(&ifp->snd))
+		if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 			em_start_locked(ifp);
 #endif
 		EM_TX_UNLOCK(adapter);
@@ -1933,7 +1823,7 @@ em_handle_tx(void *context, int pending)
 		if (!drbr_empty(ifp, adapter->br))
 			em_mq_start_locked(ifp, NULL);
 #else
-		if (!IFQ_DRV_IS_EMPTY(&ifp->snd))
+		if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 			em_start_locked(ifp);
 #endif
 		EM_TX_UNLOCK(adapter);
@@ -2541,7 +2431,11 @@ em_set_multi(struct adapter *adapter)
 	if (mta == NULL)
 		panic("em_set_multi memory failure\n");
 
+#if __FreeBSD_version < 800000
+	IF_ADDR_LOCK(ifp);
+#else
 	if_maddr_rlock(ifp);
+#endif
 	TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
 		if (ifma->ifma_addr->sa_family != AF_LINK)
 			continue;
@@ -2553,8 +2447,11 @@ em_set_multi(struct adapter *adapter)
 		    &mta[mcnt * ETH_ADDR_LEN], ETH_ADDR_LEN);
 		mcnt++;
 	}
+#if __FreeBSD_version < 800000
+	IF_ADDR_UNLOCK(ifp);
+#else
 	if_maddr_runlock(ifp);
-
+#endif
 	if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
 		reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
 		reg_rctl |= E1000_RCTL_MPE;
@@ -2605,13 +2502,21 @@ em_local_timer(void *arg)
 	em_smartspeed(adapter);
 
 	/*
-	 * Each second we check the watchdog to 
-	 * protect against hardware hangs.
+	 * We check the watchdog: the time since
+	 * the last TX descriptor was cleaned.
+	 * This implies a functional TX engine.
 	 */
-	em_watchdog(adapter);
+	if ((adapter->watchdog_check == TRUE) &&
+	    (ticks - adapter->watchdog_time > EM_WATCHDOG))
+		goto hung;
 
 	callout_reset(&adapter->timer, hz, em_local_timer, adapter);
-
+	return;
+hung:
+	device_printf(adapter->dev, "Watchdog timeout -- resetting\n");
+	adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+	adapter->watchdog_events++;
+	em_init_locked(adapter);
 }
 
 static void
@@ -2677,7 +2582,7 @@ em_update_link_status(struct adapter *adapter)
 			device_printf(dev, "Link is Down\n");
 		adapter->link_active = 0;
 		/* Link down, disable watchdog */
-		adapter->watchdog_timer = FALSE;
+		adapter->watchdog_check = FALSE;
 		if_link_state_change(ifp, LINK_STATE_DOWN);
 	}
 }
@@ -3093,15 +2998,6 @@ em_hardware_init(struct adapter *adapter)
 	/* Issue a global reset */
 	e1000_reset_hw(&adapter->hw);
 
-	/* Get control from any management/hw control */
-	if (((adapter->hw.mac.type == e1000_82573) ||
-	    (adapter->hw.mac.type == e1000_82583) ||
-	    (adapter->hw.mac.type == e1000_ich8lan) ||
-	    (adapter->hw.mac.type == e1000_ich10lan) ||
-	    (adapter->hw.mac.type == e1000_ich9lan)) &&
-	    e1000_check_mng_mode(&adapter->hw))
-		em_get_hw_control(adapter);
-
 	/* When hardware is reset, fifo_head is also reset */
 	adapter->tx_fifo_head = 0;
 
@@ -3151,6 +3047,9 @@ em_hardware_init(struct adapter *adapter)
         else
                 adapter->hw.fc.requested_mode = e1000_fc_none;
 
+	/* Override - workaround for PCHLAN issue */
+	if (adapter->hw.mac.type == e1000_pchlan)
+                adapter->hw.fc.requested_mode = e1000_fc_rx_pause;
 
 	if (e1000_init_hw(&adapter->hw) < 0) {
 		device_printf(dev, "Hardware Initialization Failed\n");
@@ -3233,6 +3132,12 @@ em_setup_interface(device_t dev, struct adapter *adapter)
 	ifp->if_capabilities |= IFCAP_POLLING;
 #endif
 
+	/* Enable All WOL methods by default */
+	if (adapter->wol) {
+		ifp->if_capabilities |= IFCAP_WOL;
+		ifp->if_capenable |= IFCAP_WOL;
+	}
+		
 	/*
 	 * Specify the media types supported by this adapter and register
 	 * callbacks to update media and link information
@@ -3299,7 +3204,7 @@ em_smartspeed(struct adapter *adapter)
 				    PHY_1000T_CTRL, phy_tmp);
 				adapter->smartspeed++;
 				if(adapter->hw.mac.autoneg &&
-				   !e1000_phy_setup_autoneg(&adapter->hw) &&
+				   !e1000_copper_link_autoneg(&adapter->hw) &&
 				   !e1000_read_phy_reg(&adapter->hw,
 				    PHY_CONTROL, &phy_tmp)) {
 					phy_tmp |= (MII_CR_AUTO_NEG_EN |
@@ -3316,7 +3221,7 @@ em_smartspeed(struct adapter *adapter)
 		phy_tmp |= CR_1000T_MS_ENABLE;
 		e1000_write_phy_reg(&adapter->hw, PHY_1000T_CTRL, phy_tmp);
 		if(adapter->hw.mac.autoneg &&
-		   !e1000_phy_setup_autoneg(&adapter->hw) &&
+		   !e1000_copper_link_autoneg(&adapter->hw) &&
 		   !e1000_read_phy_reg(&adapter->hw, PHY_CONTROL, &phy_tmp)) {
 			phy_tmp |= (MII_CR_AUTO_NEG_EN |
 				    MII_CR_RESTART_AUTO_NEG);
@@ -3975,7 +3880,6 @@ static void
 em_txeof(struct adapter *adapter)
 {
         int first, last, done, num_avail;
-	u32 cleaned = 0;
         struct em_buffer *tx_buffer;
         struct e1000_tx_desc   *tx_desc, *eop_desc;
 	struct ifnet   *ifp = adapter->ifp;
@@ -4011,7 +3915,7 @@ em_txeof(struct adapter *adapter)
                 	tx_desc->upper.data = 0;
                 	tx_desc->lower.data = 0;
                 	tx_desc->buffer_addr = 0;
-                	++num_avail; ++cleaned;
+                	++num_avail;
 
 			if (tx_buffer->m_head) {
 				ifp->if_opackets++;
@@ -4025,6 +3929,7 @@ em_txeof(struct adapter *adapter)
                         	tx_buffer->m_head = NULL;
                 	}
 			tx_buffer->next_eop = -1;
+			adapter->watchdog_time = ticks;
 
 	                if (++first == adapter->num_tx_desc)
 				first = 0;
@@ -4050,20 +3955,17 @@ em_txeof(struct adapter *adapter)
         /*
          * If we have enough room, clear IFF_DRV_OACTIVE to
          * tell the stack that it is OK to send packets.
-         * If there are no pending descriptors, clear the timeout.
+         * If there are no pending descriptors, clear the watchdog.
          */
         if (num_avail > EM_TX_CLEANUP_THRESHOLD) {                
                 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
                 if (num_avail == adapter->num_tx_desc) {
-			adapter->watchdog_timer = 0;
+			adapter->watchdog_check = FALSE;
         		adapter->num_tx_desc_avail = num_avail;
 			return;
 		} 
         }
 
-	/* If any descriptors cleaned, reset the watchdog */
-	if (cleaned)
-		adapter->watchdog_timer = EM_TX_TIMEOUT;
         adapter->num_tx_desc_avail = num_avail;
 	return;
 }
@@ -4071,7 +3973,7 @@ em_txeof(struct adapter *adapter)
 /*********************************************************************
  *
  *  When Link is lost sometimes there is work still in the TX ring
- *  which will result in a watchdog, rather than allow that do an
+ *  which may result in a watchdog, rather than allow that we do an
  *  attempted cleanup and then reinit here. Note that this has been
  *  seens mostly with fiber adapters.
  *
@@ -4079,14 +3981,12 @@ em_txeof(struct adapter *adapter)
 static void
 em_tx_purge(struct adapter *adapter)
 {
-	if ((!adapter->link_active) && (adapter->watchdog_timer)) {
+	if ((!adapter->link_active) && (adapter->watchdog_check)) {
 		EM_TX_LOCK(adapter);
 		em_txeof(adapter);
 		EM_TX_UNLOCK(adapter);
-		if (adapter->watchdog_timer) { /* Still not clean? */
-			adapter->watchdog_timer = 0;
+		if (adapter->watchdog_check) /* Still outstanding? */
 			em_init_locked(adapter);
-		}
 	}
 }
 
@@ -4877,72 +4777,54 @@ em_release_manageability(struct adapter *adapter)
 }
 
 /*
- * em_get_hw_control sets {CTRL_EXT|FWSM}:DRV_LOAD bit.
- * For ASF and Pass Through versions of f/w this means that
- * the driver is loaded. For AMT version (only with 82573)
- * of the f/w this means that the network i/f is open.
- *
+ * em_get_hw_control sets the {CTRL_EXT|FWSM}:DRV_LOAD bit.
+ * For ASF and Pass Through versions of f/w this means
+ * that the driver is loaded. For AMT version type f/w
+ * this means that the network i/f is open.
  */
 static void
 em_get_hw_control(struct adapter *adapter)
 {
 	u32 ctrl_ext, swsm;
 
-	/* Let firmware know the driver has taken over */
-	switch (adapter->hw.mac.type) {
-	case e1000_82573:
+	if (adapter->hw.mac.type == e1000_82573) {
 		swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM);
 		E1000_WRITE_REG(&adapter->hw, E1000_SWSM,
 		    swsm | E1000_SWSM_DRV_LOAD);
-		break;
-	case e1000_82571:
-	case e1000_82572:
-	case e1000_80003es2lan:
-	case e1000_ich8lan:
-	case e1000_ich9lan:
-	case e1000_ich10lan:
-		ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
-		E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
-		    ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
-		break;
-	default:
-		break;
+		return;
 	}
+	/* else */
+	ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
+	E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
+	    ctrl_ext | E1000_CTRL_EXT_DRV_LOAD);
+	return;
 }
 
 /*
  * em_release_hw_control resets {CTRL_EXT|FWSM}:DRV_LOAD bit.
- * For ASF and Pass Through versions of f/w this means that the
- * driver is no longer loaded. For AMT version (only with 82573) i
- * of the f/w this means that the network i/f is closed.
- *
+ * For ASF and Pass Through versions of f/w this means that
+ * the driver is no longer loaded. For AMT versions of the
+ * f/w this means that the network i/f is closed.
  */
 static void
 em_release_hw_control(struct adapter *adapter)
 {
 	u32 ctrl_ext, swsm;
 
-	/* Let firmware taken over control of h/w */
-	switch (adapter->hw.mac.type) {
-	case e1000_82573:
+	if (!adapter->has_manage)
+		return;
+
+	if (adapter->hw.mac.type == e1000_82573) {
 		swsm = E1000_READ_REG(&adapter->hw, E1000_SWSM);
 		E1000_WRITE_REG(&adapter->hw, E1000_SWSM,
 		    swsm & ~E1000_SWSM_DRV_LOAD);
-		break;
-	case e1000_82571:
-	case e1000_82572:
-	case e1000_80003es2lan:
-	case e1000_ich8lan:
-	case e1000_ich9lan:
-	case e1000_ich10lan:
-		ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
-		E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
-		    ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD);
-		break;
-	default:
-		break;
-
+		return;
 	}
+	/* else */
+	ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
+	E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT,
+	    ctrl_ext & ~E1000_CTRL_EXT_DRV_LOAD);
+	return;
 }
 
 static int
@@ -4957,30 +4839,252 @@ em_is_valid_ether_addr(u8 *addr)
 	return (TRUE);
 }
 
+/*
+** Parse the interface capabilities with regard
+** to both system management and wake-on-lan for
+** later use.
+*/
+static void
+em_get_wakeup(device_t dev)
+{
+	struct adapter	*adapter = device_get_softc(dev);
+	u16		eeprom_data = 0, device_id, apme_mask;
+
+	adapter->has_manage = e1000_enable_mng_pass_thru(&adapter->hw);
+	apme_mask = EM_EEPROM_APME;
+
+	switch (adapter->hw.mac.type) {
+	case e1000_82542:
+	case e1000_82543:
+		break;
+	case e1000_82544:
+		e1000_read_nvm(&adapter->hw,
+		    NVM_INIT_CONTROL2_REG, 1, &eeprom_data);
+		apme_mask = EM_82544_APME;
+		break;
+	case e1000_82573:
+	case e1000_82583:
+		adapter->has_amt = TRUE;
+		/* Falls thru */
+	case e1000_82546:
+	case e1000_82546_rev_3:
+	case e1000_82571:
+	case e1000_82572:
+	case e1000_80003es2lan:
+		if (adapter->hw.bus.func == 1) {
+			e1000_read_nvm(&adapter->hw,
+			    NVM_INIT_CONTROL3_PORT_B, 1, &eeprom_data);
+			break;
+		} else
+			e1000_read_nvm(&adapter->hw,
+			    NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
+		break;
+	case e1000_ich8lan:
+	case e1000_ich9lan:
+	case e1000_ich10lan:
+	case e1000_pchlan:
+		apme_mask = E1000_WUC_APME;
+		adapter->has_amt = TRUE;
+		eeprom_data = E1000_READ_REG(&adapter->hw, E1000_WUC);
+		break;
+	default:
+		e1000_read_nvm(&adapter->hw,
+		    NVM_INIT_CONTROL3_PORT_A, 1, &eeprom_data);
+		break;
+	}
+	if (eeprom_data & apme_mask)
+		adapter->wol = (E1000_WUFC_MAG | E1000_WUFC_MC);
+	/*
+         * We have the eeprom settings, now apply the special cases
+         * where the eeprom may be wrong or the board won't support
+         * wake on lan on a particular port
+	 */
+	device_id = pci_get_device(dev);
+        switch (device_id) {
+	case E1000_DEV_ID_82546GB_PCIE:
+		adapter->wol = 0;
+		break;
+	case E1000_DEV_ID_82546EB_FIBER:
+	case E1000_DEV_ID_82546GB_FIBER:
+	case E1000_DEV_ID_82571EB_FIBER:
+		/* Wake events only supported on port A for dual fiber
+		 * regardless of eeprom setting */
+		if (E1000_READ_REG(&adapter->hw, E1000_STATUS) &
+		    E1000_STATUS_FUNC_1)
+			adapter->wol = 0;
+		break;
+	case E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3:
+	case E1000_DEV_ID_82571EB_QUAD_COPPER:
+	case E1000_DEV_ID_82571EB_QUAD_FIBER:
+	case E1000_DEV_ID_82571EB_QUAD_COPPER_LP:
+                /* if quad port adapter, disable WoL on all but port A */
+		if (global_quad_port_a != 0)
+			adapter->wol = 0;
+		/* Reset for multiple quad port adapters */
+		if (++global_quad_port_a == 4)
+			global_quad_port_a = 0;
+                break;
+	}
+	return;
+}
+
+
 /*
  * Enable PCI Wake On Lan capability
  */
 void
 em_enable_wakeup(device_t dev)
 {
-	u16     cap, status;
-	u8      id;
+	struct adapter	*adapter = device_get_softc(dev);
+	struct ifnet	*ifp = adapter->ifp;
+	u32		pmc, ctrl, ctrl_ext, rctl;
+	u16     	status;
 
-	/* First find the capabilities pointer*/
-	cap = pci_read_config(dev, PCIR_CAP_PTR, 2);
-	/* Read the PM Capabilities */
-	id = pci_read_config(dev, cap, 1);
-	if (id != PCIY_PMG)     /* Something wrong */
+	if ((pci_find_extcap(dev, PCIY_PMG, &pmc) != 0))
 		return;
-	/* OK, we have the power capabilities, so
-	   now get the status register */
-	cap += PCIR_POWER_STATUS;
-	status = pci_read_config(dev, cap, 2);
-	status |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE;
-	pci_write_config(dev, cap, status, 2);
+
+	/* Advertise the wakeup capability */
+	ctrl = E1000_READ_REG(&adapter->hw, E1000_CTRL);
+	ctrl |= (E1000_CTRL_SWDPIN2 | E1000_CTRL_SWDPIN3);
+	E1000_WRITE_REG(&adapter->hw, E1000_CTRL, ctrl);
+	E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
+
+	/* ICH workaround code */
+	if ((adapter->hw.mac.type == e1000_ich8lan) ||
+	    (adapter->hw.mac.type == e1000_pchlan) ||
+	    (adapter->hw.mac.type == e1000_ich9lan) ||
+	    (adapter->hw.mac.type == e1000_ich10lan)) {
+		e1000_disable_gig_wol_ich8lan(&adapter->hw);
+		e1000_hv_phy_powerdown_workaround_ich8lan(&adapter->hw);
+	}
+
+	/* Keep the laser running on Fiber adapters */
+	if (adapter->hw.phy.media_type == e1000_media_type_fiber ||
+	    adapter->hw.phy.media_type == e1000_media_type_internal_serdes) {
+		ctrl_ext = E1000_READ_REG(&adapter->hw, E1000_CTRL_EXT);
+		ctrl_ext |= E1000_CTRL_EXT_SDP3_DATA;
+		E1000_WRITE_REG(&adapter->hw, E1000_CTRL_EXT, ctrl_ext);
+	}
+
+	/*
+	** Determine type of Wakeup: note that wol
+	** is set with all bits on by default.
+	*/
+	if ((ifp->if_capenable & IFCAP_WOL_MAGIC) == 0)
+		adapter->wol &= ~E1000_WUFC_MAG;
+
+	if ((ifp->if_capenable & IFCAP_WOL_MCAST) == 0)
+		adapter->wol &= ~E1000_WUFC_MC;
+	else {
+		rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
+		rctl |= E1000_RCTL_MPE;
+		E1000_WRITE_REG(&adapter->hw, E1000_RCTL, rctl);
+	}
+
+	if (adapter->hw.mac.type == e1000_pchlan) {
+		if (em_enable_phy_wakeup(adapter))
+			return;
+	} else {
+		E1000_WRITE_REG(&adapter->hw, E1000_WUC, E1000_WUC_PME_EN);
+		E1000_WRITE_REG(&adapter->hw, E1000_WUFC, adapter->wol);
+	}
+
+	if (adapter->hw.phy.type == e1000_phy_igp_3)
+		e1000_igp3_phy_powerdown_workaround_ich8lan(&adapter->hw);
+
+        /* Request PME */
+        status = pci_read_config(dev, pmc + PCIR_POWER_STATUS, 2);
+	status &= ~(PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE);
+	if (ifp->if_capenable & IFCAP_WOL)
+		status |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE;
+        pci_write_config(dev, pmc + PCIR_POWER_STATUS, status, 2);
+
 	return;
 }
 
+/*
+** WOL in the newer chipset interfaces (pchlan)
+** require thing to be copied into the phy
+*/
+static int
+em_enable_phy_wakeup(struct adapter *adapter)
+{
+	struct e1000_hw *hw = &adapter->hw;
+	u32 mreg, ret = 0;
+	u16 preg;
+
+	/* copy MAC RARs to PHY RARs */
+	for (int i = 0; i < adapter->hw.mac.rar_entry_count; i++) {
+		mreg = E1000_READ_REG(hw, E1000_RAL(i));
+		e1000_write_phy_reg(hw, BM_RAR_L(i), (u16)(mreg & 0xFFFF));
+		e1000_write_phy_reg(hw, BM_RAR_M(i),
+		    (u16)((mreg >> 16) & 0xFFFF));
+		mreg = E1000_READ_REG(hw, E1000_RAH(i));
+		e1000_write_phy_reg(hw, BM_RAR_H(i), (u16)(mreg & 0xFFFF));
+		e1000_write_phy_reg(hw, BM_RAR_CTRL(i),
+		    (u16)((mreg >> 16) & 0xFFFF));
+	}
+
+	/* copy MAC MTA to PHY MTA */
+	for (int i = 0; i < adapter->hw.mac.mta_reg_count; i++) {
+		mreg = E1000_READ_REG_ARRAY(hw, E1000_MTA, i);
+		e1000_write_phy_reg(hw, BM_MTA(i), (u16)(mreg & 0xFFFF));
+		e1000_write_phy_reg(hw, BM_MTA(i) + 1,
+		    (u16)((mreg >> 16) & 0xFFFF));
+	}
+
+	/* configure PHY Rx Control register */
+	e1000_read_phy_reg(&adapter->hw, BM_RCTL, &preg);
+	mreg = E1000_READ_REG(hw, E1000_RCTL);
+	if (mreg & E1000_RCTL_UPE)
+		preg |= BM_RCTL_UPE;
+	if (mreg & E1000_RCTL_MPE)
+		preg |= BM_RCTL_MPE;
+	preg &= ~(BM_RCTL_MO_MASK);
+	if (mreg & E1000_RCTL_MO_3)
+		preg |= (((mreg & E1000_RCTL_MO_3) >> E1000_RCTL_MO_SHIFT)
+				<< BM_RCTL_MO_SHIFT);
+	if (mreg & E1000_RCTL_BAM)
+		preg |= BM_RCTL_BAM;
+	if (mreg & E1000_RCTL_PMCF)
+		preg |= BM_RCTL_PMCF;
+	mreg = E1000_READ_REG(hw, E1000_CTRL);
+	if (mreg & E1000_CTRL_RFCE)
+		preg |= BM_RCTL_RFCE;
+	e1000_write_phy_reg(&adapter->hw, BM_RCTL, preg);
+
+	/* enable PHY wakeup in MAC register */
+	E1000_WRITE_REG(hw, E1000_WUC,
+	    E1000_WUC_PHY_WAKE | E1000_WUC_PME_EN);
+	E1000_WRITE_REG(hw, E1000_WUFC, adapter->wol);
+
+	/* configure and enable PHY wakeup in PHY registers */
+	e1000_write_phy_reg(&adapter->hw, BM_WUFC, adapter->wol);
+	e1000_write_phy_reg(&adapter->hw, BM_WUC, E1000_WUC_PME_EN);
+
+	/* activate PHY wakeup */
+	ret = hw->phy.ops.acquire(hw);
+	if (ret) {
+		printf("Could not acquire PHY\n");
+		return ret;
+	}
+	e1000_write_phy_reg_mdic(hw, IGP01E1000_PHY_PAGE_SELECT,
+	                         (BM_WUC_ENABLE_PAGE << IGP_PAGE_SHIFT));
+	ret = e1000_read_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, &preg);
+	if (ret) {
+		printf("Could not read PHY page 769\n");
+		goto out;
+	}
+	preg |= BM_WUC_ENABLE_BIT | BM_WUC_HOST_WU_BIT;
+	ret = e1000_write_phy_reg_mdic(hw, BM_WUC_ENABLE_REG, preg);
+	if (ret)
+		printf("Could not set PHY Host Wakeup bit\n");
+out:
+	hw->phy.ops.release(hw);
+
+	return ret;
+}
+
 
 /*********************************************************************
 * 82544 Coexistence issue workaround.
diff --git a/sys/dev/e1000/if_em.h b/sys/dev/e1000/if_em.h
index 7487a89e0d0..5019e0a8046 100644
--- a/sys/dev/e1000/if_em.h
+++ b/sys/dev/e1000/if_em.h
@@ -135,9 +135,9 @@
 #define EM_RADV                         64
 
 /*
- * This parameter controls the duration of transmit watchdog timer.
+ * This parameter controls the max duration of transmit watchdog.
  */
-#define EM_TX_TIMEOUT                   5
+#define EM_WATCHDOG                   (5 * hz)
 
 /*
  * This parameter controls when the driver calls the routine to reclaim
@@ -189,6 +189,7 @@
 #define ETHER_ALIGN                     2
 #define EM_FC_PAUSE_TIME		0x0680
 #define EM_EEPROM_APME			0x400;
+#define EM_82544_APME			0x0004;
 
 /* Code compatilbility between 6 and 7 */
 #ifndef ETHER_BPF_MTAP
@@ -308,7 +309,8 @@ struct adapter {
 	struct ifmedia	media;
 	struct callout	timer;
 	struct callout	tx_fifo_timer;
-	int		watchdog_timer;
+	bool		watchdog_check;
+	int		watchdog_time;
 	int		msi;
 	int		if_flags;
 	int		max_frame_size;
@@ -332,8 +334,9 @@ struct adapter {
 #endif
 
 	/* Management and WOL features */
-	int		wol;
-	int		has_manage;
+	u32		wol;
+	bool		has_manage;
+	bool		has_amt;
 
 	/* Info about the board itself */
 	uint8_t		link_active;
diff --git a/sys/dev/e1000/if_igb.c b/sys/dev/e1000/if_igb.c
index 61743dfdc0b..844d330c529 100644
--- a/sys/dev/e1000/if_igb.c
+++ b/sys/dev/e1000/if_igb.c
@@ -101,7 +101,7 @@ int	igb_display_debug_stats = 0;
 /*********************************************************************
  *  Driver version:
  *********************************************************************/
-char igb_driver_version[] = "version - 1.7.3";
+char igb_driver_version[] = "version - 1.8.4";
 
 
 /*********************************************************************
@@ -123,12 +123,19 @@ static igb_vendor_info_t igb_vendor_info_array[] =
 						PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_82576,		PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_82576_NS,	PCI_ANY_ID, PCI_ANY_ID, 0},
+	{ 0x8086, E1000_DEV_ID_82576_NS_SERDES,	PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_82576_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_82576_SERDES,	PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_82576_SERDES_QUAD,
 						PCI_ANY_ID, PCI_ANY_ID, 0},
 	{ 0x8086, E1000_DEV_ID_82576_QUAD_COPPER,
 						PCI_ANY_ID, PCI_ANY_ID, 0},
+	{ 0x8086, E1000_DEV_ID_82580_COPPER,	PCI_ANY_ID, PCI_ANY_ID, 0},
+	{ 0x8086, E1000_DEV_ID_82580_FIBER,	PCI_ANY_ID, PCI_ANY_ID, 0},
+	{ 0x8086, E1000_DEV_ID_82580_SERDES,	PCI_ANY_ID, PCI_ANY_ID, 0},
+	{ 0x8086, E1000_DEV_ID_82580_SGMII,	PCI_ANY_ID, PCI_ANY_ID, 0},
+	{ 0x8086, E1000_DEV_ID_82580_COPPER_DUAL,
+						PCI_ANY_ID, PCI_ANY_ID, 0},
 	/* required last entry */
 	{ 0, 0, 0, 0, 0}
 };
@@ -159,7 +166,6 @@ static int	igb_mq_start_locked(struct ifnet *,
 static void	igb_qflush(struct ifnet *);
 #endif
 static int	igb_ioctl(struct ifnet *, u_long, caddr_t);
-static void	igb_watchdog(struct adapter *);
 static void	igb_init(void *);
 static void	igb_init_locked(struct adapter *);
 static void	igb_stop(void *);
@@ -172,7 +178,7 @@ static int	igb_allocate_legacy(struct adapter *);
 static int	igb_setup_msix(struct adapter *);
 static void	igb_free_pci_resources(struct adapter *);
 static void	igb_local_timer(void *);
-static int	igb_hardware_init(struct adapter *);
+static void	igb_reset(struct adapter *);
 static void	igb_setup_interface(device_t, struct adapter *);
 static int	igb_allocate_queues(struct adapter *);
 static void	igb_configure_queues(struct adapter *);
@@ -204,7 +210,7 @@ static void	igb_disable_promisc(struct adapter *);
 static void	igb_set_multi(struct adapter *);
 static void	igb_print_hw_stats(struct adapter *);
 static void	igb_update_link_status(struct adapter *);
-static int	igb_get_buf(struct rx_ring *, int, u8);
+static int	igb_get_buf(struct rx_ring *, int, int);
 
 static void	igb_register_vlan(void *, struct ifnet *, u16);
 static void	igb_unregister_vlan(void *, struct ifnet *, u16);
@@ -295,12 +301,28 @@ TUNABLE_INT("hw.igb.ave_latency", &igb_ave_latency);
 static int igb_bulk_latency = IGB_BULK_LATENCY;
 TUNABLE_INT("hw.igb.bulk_latency", &igb_bulk_latency);
                 
+/*
+ * MSIX should be the default for best performance,
+ * but this allows it to be forced off for testing.
+ */         
+static int igb_enable_msix = 1;
+TUNABLE_INT("hw.igb.enable_msix", &igb_enable_msix);
+
+/*
+ * Header split has seemed to be beneficial in
+ * all circumstances tested, so its on by default
+ * however this variable will allow it to be disabled
+ * for some debug purposes.
+ */
+static bool igb_header_split = TRUE;
+TUNABLE_INT("hw.igb.hdr_split", &igb_header_split);
+
 /*
 ** This will autoconfigure based on the number
-** of CPUs if set to 0. Only a matched pair of
+** of CPUs if left at 0. Only a matched pair of
 ** TX and RX rings are allowed.
 */
-static int igb_num_queues = 1;
+static int igb_num_queues = 0;
 TUNABLE_INT("hw.igb.num_queues", &igb_num_queues);
 
 /* How many packets rxeof tries to clean at a time */
@@ -540,17 +562,10 @@ igb_attach(device_t dev)
 		goto err_late;
 	}
 
-	/* Now Initialize the hardware */
-	if (igb_hardware_init(adapter)) {
-		device_printf(dev, "Unable to initialize the hardware\n");
-		error = EIO;
-		goto err_late;
-	}
-
 	/* 
 	** Configure Interrupts
 	*/
-	if (adapter->msix > 1) /* MSIX */
+	if ((adapter->msix > 1) && (igb_enable_msix))
 		error = igb_allocate_msix(adapter);
 	else /* MSI or Legacy */
 		error = igb_allocate_legacy(adapter);
@@ -560,6 +575,9 @@ igb_attach(device_t dev)
 	/* Setup OS specific network interface */
 	igb_setup_interface(dev, adapter);
 
+	/* Now get a good starting state */
+	igb_reset(adapter);
+
 #ifdef IGB_IEEE1588
         /*
         ** Setup the timer: IEEE 1588 support
@@ -787,8 +805,8 @@ igb_start_locked(struct tx_ring *txr, struct ifnet *ifp)
 		/* Send a copy of the frame to the BPF listener */
 		ETHER_BPF_MTAP(ifp, m_head);
 
-		/* Set timeout in case hardware has problems transmitting. */
-		txr->watchdog_timer = IGB_TX_TIMEOUT;
+		/* Set watchdog on */
+		txr->watchdog_check = TRUE;
 	}
 }
  
@@ -854,17 +872,16 @@ igb_mq_start_locked(struct ifnet *ifp, struct tx_ring *txr, struct mbuf *m)
 
 	/* If nothing queued go right to xmit */
 	if (drbr_empty(ifp, txr->br)) {
-		if ((err = igb_xmit(txr, &m)) != 0) {
-			if (m != NULL)
-				err = drbr_enqueue(ifp, txr->br, m);
-			return (err);
+		if (igb_xmit(txr, &m)) {
+			if (m && (err = drbr_enqueue(ifp, txr->br, m)) != 0)
+                                return (err);
 		} else {
 			/* Success, update stats */
 			drbr_stats_update(ifp, m->m_pkthdr.len, m->m_flags);
 			/* Send a copy of the frame to the BPF listener */
 			ETHER_BPF_MTAP(ifp, m);
 			/* Set the watchdog */
-			txr->watchdog_timer = IGB_TX_TIMEOUT;
+			txr->watchdog_check = TRUE;
                 }
 
         } else if ((err = drbr_enqueue(ifp, txr->br, m)) != 0)
@@ -881,15 +898,11 @@ process:
 		next = drbr_dequeue(ifp, txr->br);
 		if (next == NULL)
 			break;
-		if ((err = igb_xmit(txr, &next)) != 0) {
-			if (next != NULL)
-				err = drbr_enqueue(ifp, txr->br, next);
+		if (igb_xmit(txr, &next))
 			break;
-		}
-		drbr_stats_update(ifp, next->m_pkthdr.len, next->m_flags);
 		ETHER_BPF_MTAP(ifp, next);
 		/* Set the watchdog */
-		txr->watchdog_timer = IGB_TX_TIMEOUT;
+		txr->watchdog_check = TRUE;
 	}
 		
 	if (txr->tx_avail <= IGB_TX_OP_THRESHOLD)
@@ -957,8 +970,7 @@ igb_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 				igb_init_locked(adapter);
 				IGB_CORE_UNLOCK(adapter);
 			}
-			if (!(ifp->if_flags & IFF_NOARP))
-				arp_ifinit(ifp, ifa);
+			arp_ifinit(ifp, ifa);
 		} else
 #endif
 			error = ether_ioctl(ifp, command, data);
@@ -1049,7 +1061,7 @@ igb_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 			ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
 			reinit = 1;
 		}
-		if (mask & IFCAP_LRO) {
+		if ((mask & IFCAP_LRO) && (igb_header_split)) {
 			ifp->if_capenable ^= IFCAP_LRO;
 			reinit = 1;
 		}
@@ -1076,80 +1088,6 @@ igb_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 	return (error);
 }
 
-/*********************************************************************
- *  Watchdog timer:
- *
- *  This routine is called from the local timer every second.
- *  As long as transmit descriptors are being cleaned the value
- *  is non-zero and we do nothing. Reaching 0 indicates a tx hang
- *  and we then reset the device.
- *
- **********************************************************************/
-
-static void
-igb_watchdog(struct adapter *adapter)
-{
-	struct tx_ring	*txr = adapter->tx_rings;
-	bool		tx_hang = FALSE;
-
-	IGB_CORE_LOCK_ASSERT(adapter);
-
-	/*
-	** The timer is set to 5 every time start() queues a packet.
-	** Then txeof keeps resetting it as long as it cleans at
-	** least one descriptor.
-	** Finally, anytime all descriptors are clean the timer is
-	** set to 0.
-	**
-	** With TX Multiqueue we need to check every queue's timer,
-	** if any time out we do the reset.
-	*/
-	for (int i = 0; i < adapter->num_queues; i++, txr++) {
-		IGB_TX_LOCK(txr);
-		if (txr->watchdog_timer == 0 ||
-		    (--txr->watchdog_timer)) {
-			IGB_TX_UNLOCK(txr);
-			continue;
-		} else {
-			tx_hang = TRUE;
-			IGB_TX_UNLOCK(txr);
-			break;
-		}
-	}
-	if (tx_hang == FALSE)
-		return;
-
-	/* If we are in this routine because of pause frames, then
-	 * don't reset the hardware.
-	 */
-	if (E1000_READ_REG(&adapter->hw, E1000_STATUS) &
-	    E1000_STATUS_TXOFF) {
-		txr = adapter->tx_rings; /* reset pointer */
-		for (int i = 0; i < adapter->num_queues; i++, txr++) {
-			IGB_TX_LOCK(txr);
-			txr->watchdog_timer = IGB_TX_TIMEOUT;
-			IGB_TX_UNLOCK(txr);
-		}
-		return;
-	}
-
-	if (e1000_check_for_link(&adapter->hw) == 0)
-		device_printf(adapter->dev, "watchdog timeout -- resetting\n");
-
-	for (int i = 0; i < adapter->num_queues; i++, txr++) {
-		device_printf(adapter->dev, "Queue(%d) tdh = %d, tdt = %d\n",
-		    i, E1000_READ_REG(&adapter->hw, E1000_TDH(i)),
-		    E1000_READ_REG(&adapter->hw, E1000_TDT(i)));
-		device_printf(adapter->dev, "Queue(%d) desc avail = %d,"
-		    " Next Desc to Clean = %d\n", i, txr->tx_avail,
-		    txr->next_to_clean);
-	}
-
-	adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
-	adapter->watchdog_events++;
-
-	igb_init_locked(adapter);
-}
 
 /*********************************************************************
  *  Init entry point
@@ -1165,29 +1103,16 @@ igb_watchdog(struct adapter *adapter)
 static void
 igb_init_locked(struct adapter *adapter)
 {
-	struct rx_ring *rxr = adapter->rx_rings;
-	struct tx_ring *txr = adapter->tx_rings;
 	struct ifnet	*ifp = adapter->ifp;
 	device_t	dev = adapter->dev;
-	u32		pba = 0;
 
 	INIT_DEBUGOUT("igb_init: begin");
 
 	IGB_CORE_LOCK_ASSERT(adapter);
 
-	igb_stop(adapter);
+	igb_disable_intr(adapter);
+	callout_stop(&adapter->timer);
 
-	/*
-	 * Packet Buffer Allocation (PBA)
-	 * Writing PBA sets the receive portion of the buffer
-	 * the remainder is used for the transmit buffer.
-	 */
-	if (adapter->hw.mac.type == e1000_82575) {
-		INIT_DEBUGOUT1("igb_init: pba=%dK",pba);
-		pba = E1000_PBA_32K; /* 32K for Rx, 16K for Tx */
-		E1000_WRITE_REG(&adapter->hw, E1000_PBA, pba);
-	}
-	
 	/* Get the latest mac address, User can use a LAA */
         bcopy(IF_LLADDR(adapter->ifp), adapter->hw.mac.addr,
               ETHER_ADDR_LEN);
@@ -1195,15 +1120,9 @@ igb_init_locked(struct adapter *adapter)
 	/* Put the address into the Receive Address Array */
 	e1000_rar_set(&adapter->hw, adapter->hw.mac.addr, 0);
 
-	/* Initialize the hardware */
-	if (igb_hardware_init(adapter)) {
-		device_printf(dev, "Unable to initialize the hardware\n");
-		return;
-	}
+	igb_reset(adapter);
 	igb_update_link_status(adapter);
 
-	E1000_WRITE_REG(&adapter->hw, E1000_VET, ETHERTYPE_VLAN);
-
 	/* Set hardware offload abilities */
 	ifp->if_hwassist = 0;
 	if (ifp->if_capenable & IFCAP_TXCSUM) {
@@ -1239,7 +1158,6 @@ igb_init_locked(struct adapter *adapter)
 	/* Prepare receive descriptors and buffers */
 	if (igb_setup_receive_structures(adapter)) {
 		device_printf(dev, "Could not setup receive structures\n");
-		igb_stop(adapter);
 		return;
 	}
 	igb_initialize_receive_units(adapter);
@@ -1259,26 +1177,10 @@ igb_init_locked(struct adapter *adapter)
 	/* Set up VLAN tag offload and filter */
 	igb_setup_vlan_hw_support(adapter);
 
-        /* Set default RX interrupt moderation */
-	for (int i = 0; i < adapter->num_queues; i++, rxr++) {
-		E1000_WRITE_REG(&adapter->hw,
-		    E1000_EITR(rxr->msix), igb_ave_latency);
-		rxr->eitr_setting = igb_ave_latency;
-	}
-
-	/* Set TX interrupt rate & reset TX watchdog */
-	for (int i = 0; i < adapter->num_queues; i++, txr++) {
-		E1000_WRITE_REG(&adapter->hw, 
-		    E1000_EITR(txr->msix), igb_ave_latency);
-		txr->watchdog_timer = FALSE;
-	}
-
-	{
-		/* this clears any pending interrupts */
-		E1000_READ_REG(&adapter->hw, E1000_ICR);
-		igb_enable_intr(adapter);
-		E1000_WRITE_REG(&adapter->hw, E1000_ICS, E1000_ICS_LSC);
-	}
+	/* this clears any pending interrupts */
+	E1000_READ_REG(&adapter->hw, E1000_ICR);
+	igb_enable_intr(adapter);
+	E1000_WRITE_REG(&adapter->hw, E1000_ICS, E1000_ICS_LSC);
 
 	/* Don't reset the phy next time init gets called */
 	adapter->hw.phy.reset_disable = TRUE;
@@ -1329,13 +1231,15 @@ igb_handle_rx(void *context, int pending)
 {
 	struct rx_ring  *rxr = context;
 	struct adapter  *adapter = rxr->adapter;
-	struct ifnet    *ifp = adapter->ifp;
+	u32		loop = IGB_MAX_LOOP;
+	bool		more;
             
-	if (ifp->if_drv_flags & IFF_DRV_RUNNING)
-		if (igb_rxeof(rxr, adapter->rx_process_limit) != 0)
-			/* More to clean, schedule another task */
-			taskqueue_enqueue(adapter->tq, &rxr->rx_task);
+	do {
+		more = igb_rxeof(rxr, -1);
+	} while (loop-- && more);
                 
+	/* Reenable this interrupt */
+	E1000_WRITE_REG(&adapter->hw, E1000_EIMS, rxr->eims);
 }
 
 static void
@@ -1343,20 +1247,24 @@ igb_handle_tx(void *context, int pending)
 {
 	struct tx_ring  *txr = context;
 	struct adapter  *adapter = txr->adapter;
-	struct ifnet    *ifp = adapter->ifp;
+	struct ifnet	*ifp = adapter->ifp;
+	u32		loop = IGB_MAX_LOOP;
+	bool		more;
 
-	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
-		IGB_TX_LOCK(txr);
-		igb_txeof(txr);
+	IGB_TX_LOCK(txr);
+	do {
+		more = igb_txeof(txr);
+	} while (loop-- && more);
 #if __FreeBSD_version >= 800000
-		if (!drbr_empty(ifp, txr->br))
-			igb_mq_start_locked(ifp, txr, NULL);
+	if (!drbr_empty(ifp, txr->br))
+		igb_mq_start_locked(ifp, txr, NULL);
 #else
-		if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
-			igb_start_locked(txr, ifp);
+	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+		igb_start_locked(txr, ifp);
 #endif
-		IGB_TX_UNLOCK(txr);
-	}
+	IGB_TX_UNLOCK(txr);
+	/* Reenable this interrupt */
+	E1000_WRITE_REG(&adapter->hw, E1000_EIMS, txr->eims);
 }
 
 
@@ -1416,23 +1324,21 @@ igb_msix_tx(void *arg)
 {
 	struct tx_ring *txr = arg;
 	struct adapter *adapter = txr->adapter;
-	u32		loop = IGB_MAX_LOOP;
 	bool		more;
 
-	++txr->tx_irq;
+	E1000_WRITE_REG(&adapter->hw, E1000_EIMC, txr->eims);
+
 	IGB_TX_LOCK(txr);
-
-	do {
-		more = igb_txeof(txr);
-	} while (loop-- && more);
-
+	++txr->tx_irq;
+	more = igb_txeof(txr);
 	IGB_TX_UNLOCK(txr);
 
-	/* Schedule a clean task */
-	taskqueue_enqueue(adapter->tq, &txr->tx_task);
-
-	/* Reenable this interrupt */
-	E1000_WRITE_REG(&adapter->hw, E1000_EIMS, txr->eims);
+	/* Schedule a clean task if needed*/
+	if (more) 
+		taskqueue_enqueue(txr->tq, &txr->tx_task);
+	else
+		/* Reenable this interrupt */
+		E1000_WRITE_REG(&adapter->hw, E1000_EIMS, txr->eims);
 	return;
 }
 
@@ -1447,23 +1353,23 @@ igb_msix_rx(void *arg)
 {
 	struct rx_ring *rxr = arg;
 	struct adapter *adapter = rxr->adapter;
-	u32		loop = IGB_MAX_LOOP;
 	bool		more;
 
+	E1000_WRITE_REG(&adapter->hw, E1000_EIMC, rxr->eims);
+
 	++rxr->rx_irq;
-	do {
-		more = igb_rxeof(rxr, adapter->rx_process_limit);
-	} while (loop-- && more);
+	more = igb_rxeof(rxr, adapter->rx_process_limit);
 
 	/* Update interrupt rate */
 	if (igb_enable_aim == TRUE)
 		igb_update_aim(rxr);
 
 	/* Schedule another clean */
-	taskqueue_enqueue(adapter->tq, &rxr->rx_task);
-
-	/* Reenable this interrupt */
-	E1000_WRITE_REG(&adapter->hw, E1000_EIMS, rxr->eims);
+	if (more)
+		taskqueue_enqueue(rxr->tq, &rxr->rx_task);
+	else
+		/* Reenable this interrupt */
+		E1000_WRITE_REG(&adapter->hw, E1000_EIMS, rxr->eims);
 	return;
 }
 
@@ -1536,11 +1442,8 @@ igb_update_aim(struct rx_ring *rxr)
 	if (olditr != newitr) {
 		/* Change interrupt rate */
 		rxr->eitr_setting = newitr;
-		if (adapter->hw.mac.type == e1000_82575)
-			newitr |= newitr << 16;
-		else
-			newitr |= 0x8000000;
-		E1000_WRITE_REG(&adapter->hw, E1000_EITR(rxr->me), newitr);
+		E1000_WRITE_REG(&adapter->hw, E1000_EITR(rxr->me),
+		    newitr | (newitr << 16));
 	}
 
 	rxr->bytes = 0;
@@ -1789,6 +1692,10 @@ igb_xmit(struct tx_ring *txr, struct mbuf **m_headp)
 	olinfo_status |= ((m_head->m_pkthdr.len - hdrlen)
 	    << E1000_ADVTXD_PAYLEN_SHIFT);
 
+	/* 82575 needs the queue index added */
+	if (adapter->hw.mac.type == e1000_82575)
+		olinfo_status |= txr->me << 4;
+
 	/* Set up our transmit descriptors */
 	i = txr->next_avail_desc;
 	for (j = 0; j < nsegs; j++) {
@@ -1896,7 +1803,11 @@ igb_set_multi(struct adapter *adapter)
 
 	IOCTL_DEBUGOUT("igb_set_multi: begin");
 
+#if __FreeBSD_version < 800000
+	IF_ADDR_LOCK(ifp);
+#else
 	if_maddr_rlock(ifp);
+#endif
 	TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
 		if (ifma->ifma_addr->sa_family != AF_LINK)
 			continue;
@@ -1908,8 +1819,11 @@ igb_set_multi(struct adapter *adapter)
 		    &mta[mcnt * ETH_ADDR_LEN], ETH_ADDR_LEN);
 		mcnt++;
 	}
+#if __FreeBSD_version < 800000
+	IF_ADDR_UNLOCK(ifp);
+#else
 	if_maddr_runlock(ifp);
-
+#endif
 	if (mcnt >= MAX_NUM_MULTICAST_ADDRESSES) {
 		reg_rctl = E1000_READ_REG(&adapter->hw, E1000_RCTL);
 		reg_rctl |= E1000_RCTL_MPE;
@@ -1920,17 +1834,20 @@ igb_set_multi(struct adapter *adapter)
 
 
 /*********************************************************************
- *  Timer routine
- *
- *  This routine checks for link status and updates statistics.
+ *  Timer routine:
+ *  	This routine checks for link status,
+ *	updates statistics, and does the watchdog.
  *
  **********************************************************************/
 
 static void
 igb_local_timer(void *arg)
 {
-	struct adapter	*adapter = arg;
-	struct ifnet	*ifp = adapter->ifp;
+	struct adapter		*adapter = arg;
+	struct ifnet		*ifp = adapter->ifp;
+	device_t		dev = adapter->dev;
+	struct tx_ring		*txr = adapter->tx_rings;
+
 
 	IGB_CORE_LOCK_ASSERT(adapter);
 
@@ -1940,17 +1857,32 @@ igb_local_timer(void *arg)
 	if (igb_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING)
 		igb_print_hw_stats(adapter);
 
-	/*
-	 * Each second we check the watchdog to 
-	 * protect against hardware hangs.
-	 */
-	igb_watchdog(adapter);
+        /*
+        ** Watchdog: check for time since any descriptor was cleaned
+        */
+	for (int i = 0; i < adapter->num_queues; i++, txr++) {
+		if (txr->watchdog_check == FALSE)
+			continue;
+		if ((ticks - txr->watchdog_time) > IGB_WATCHDOG)
+			goto timeout;
+	}
 
 	/* Trigger an RX interrupt on all queues */
 	E1000_WRITE_REG(&adapter->hw, E1000_EICS, adapter->rx_mask);
- 
 	callout_reset(&adapter->timer, hz, igb_local_timer, adapter);
+	return;
 
+timeout:
+	device_printf(adapter->dev, "Watchdog timeout -- resetting\n");
+	device_printf(dev,"Queue(%d) tdh = %d, hw tdt = %d\n", txr->me,
+            E1000_READ_REG(&adapter->hw, E1000_TDH(txr->me)),
+            E1000_READ_REG(&adapter->hw, E1000_TDT(txr->me)));
+	device_printf(dev,"TX(%d) desc avail = %d,"
+            "Next TX to Clean = %d\n",
+            txr->me, txr->tx_avail, txr->next_to_clean);
+	adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+	adapter->watchdog_events++;
+	igb_init_locked(adapter);
 }
 
 static void
@@ -2007,7 +1939,7 @@ igb_update_link_status(struct adapter *adapter)
 		if_link_state_change(ifp, LINK_STATE_DOWN);
 		/* Turn off watchdogs */
 		for (int i = 0; i < adapter->num_queues; i++, txr++)
-			txr->watchdog_timer = FALSE;
+			txr->watchdog_check = FALSE;
 	}
 }
 
@@ -2189,11 +2121,10 @@ igb_allocate_msix(struct adapter *adapter)
 		    igb_msix_tx, txr, &txr->tag);
 		if (error) {
 			txr->res = NULL;
-			device_printf(dev, "Failed to register TX handler");
+			device_printf(dev, "Failed to register TX handler\n");
 			return (error);
 		}
-		/* Make tasklet for deferred handling - one per queue */
-		TASK_INIT(&txr->tx_task, 0, igb_handle_tx, txr);
+		bus_describe_intr(dev, txr->res, txr->tag, "tx %d", i);
 		txr->msix = vector;
 		if (adapter->hw.mac.type == e1000_82575)
 			txr->eims = E1000_EICR_TX_QUEUE0 << i;
@@ -2205,6 +2136,12 @@ igb_allocate_msix(struct adapter *adapter)
 		*/
 		if (adapter->num_queues > 1)
 			bus_bind_intr(dev, txr->res, i);
+		/* Make tasklet for deferred handling - one per queue */
+		TASK_INIT(&txr->tx_task, 0, igb_handle_tx, txr);
+		txr->tq = taskqueue_create_fast("igb_txq", M_NOWAIT,
+		    taskqueue_thread_enqueue, &txr->tq);
+		taskqueue_start_threads(&txr->tq, 1, PI_NET, "%s txq",
+		    device_get_nameunit(adapter->dev));
 	}
 
 	/* RX Setup */
@@ -2223,11 +2160,10 @@ igb_allocate_msix(struct adapter *adapter)
 		    igb_msix_rx, rxr, &rxr->tag);
 		if (error) {
 			rxr->res = NULL;
-			device_printf(dev, "Failed to register RX handler");
+			device_printf(dev, "Failed to register RX handler\n");
 			return (error);
 		}
-		/* Make tasklet for deferred handling - one per queue */
-		TASK_INIT(&rxr->rx_task, 0, igb_handle_rx, rxr);
+		bus_describe_intr(dev, rxr->res, rxr->tag, "rx %d", i);
 		rxr->msix = vector;
 		if (adapter->hw.mac.type == e1000_82575)
 			rxr->eims = E1000_EICR_RX_QUEUE0 << i;
@@ -2244,6 +2180,13 @@ igb_allocate_msix(struct adapter *adapter)
 		*/
 		if (adapter->num_queues > 1)
 			bus_bind_intr(dev, rxr->res, i);
+
+		/* Make tasklet for deferred handling - one per queue */
+		TASK_INIT(&rxr->rx_task, 0, igb_handle_rx, rxr);
+		rxr->tq = taskqueue_create_fast("igb_rxq", M_NOWAIT,
+		    taskqueue_thread_enqueue, &rxr->tq);
+		taskqueue_start_threads(&rxr->tq, 1, PI_NET, "%s rxq",
+		    device_get_nameunit(adapter->dev));
 	}
 
 	/* And Link */
@@ -2259,14 +2202,11 @@ igb_allocate_msix(struct adapter *adapter)
 	if ((error = bus_setup_intr(dev, adapter->res,
 	    INTR_TYPE_NET | INTR_MPSAFE, NULL,
 	    igb_msix_link, adapter, &adapter->tag)) != 0) {
-		device_printf(dev, "Failed to register Link handler");
+		device_printf(dev, "Failed to register Link handler\n");
 		return (error);
 	}
+	bus_describe_intr(dev, adapter->res, adapter->tag, "link");
 	adapter->linkvec = vector;
-	adapter->tq = taskqueue_create_fast("igb_taskq", M_NOWAIT,
-	    taskqueue_thread_enqueue, &adapter->tq);
-	taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s taskq",
-	    device_get_nameunit(adapter->dev));
 
 	return (0);
 }
@@ -2278,20 +2218,55 @@ igb_configure_queues(struct adapter *adapter)
 	struct	e1000_hw *hw = &adapter->hw;
 	struct	tx_ring	*txr;
 	struct	rx_ring	*rxr;
+	u32	tmp, ivar = 0;
+
+	/* First turn on RSS capability */
+	if (adapter->hw.mac.type > e1000_82575)
+		E1000_WRITE_REG(hw, E1000_GPIE,
+		    E1000_GPIE_MSIX_MODE | E1000_GPIE_EIAME |
+		    E1000_GPIE_PBA | E1000_GPIE_NSICR);
 
 	/* Turn on MSIX */
-	/*
-	** 82576 uses IVARs to route MSI/X
-	** interrupts, its not very intuitive,
-	** study the code carefully :)
-	*/
-	if (adapter->hw.mac.type == e1000_82576) {
-		u32	ivar = 0;
-		/* First turn on the capability */
-		E1000_WRITE_REG(hw, E1000_GPIE,
-		    E1000_GPIE_MSIX_MODE |
-		    E1000_GPIE_EIAME |
-		    E1000_GPIE_PBA | E1000_GPIE_NSICR);
+	switch (adapter->hw.mac.type) {
+	case e1000_82580:
+		/* RX */
+		for (int i = 0; i < adapter->num_queues; i++) {
+			u32 index = i >> 1;
+			ivar = E1000_READ_REG_ARRAY(hw, E1000_IVAR0, index);
+			rxr = &adapter->rx_rings[i];
+			if (i & 1) {
+				ivar &= 0xFF00FFFF;
+				ivar |= (rxr->msix | E1000_IVAR_VALID) << 16;
+			} else {
+				ivar &= 0xFFFFFF00;
+				ivar |= rxr->msix | E1000_IVAR_VALID;
+			}
+			E1000_WRITE_REG_ARRAY(hw, E1000_IVAR0, index, ivar);
+			adapter->eims_mask |= rxr->eims;
+		}
+		/* TX */
+		for (int i = 0; i < adapter->num_queues; i++) {
+			u32 index = i >> 1;
+			ivar = E1000_READ_REG_ARRAY(hw, E1000_IVAR0, index);
+			txr = &adapter->tx_rings[i];
+			if (i & 1) {
+				ivar &= 0x00FFFFFF;
+				ivar |= (txr->msix | E1000_IVAR_VALID) << 24;
+			} else {
+				ivar &= 0xFFFF00FF;
+				ivar |= (txr->msix | E1000_IVAR_VALID) << 8;
+			}
+			E1000_WRITE_REG_ARRAY(hw, E1000_IVAR0, index, ivar);
+			adapter->eims_mask |= txr->eims;
+		}
+
+		/* And for the link interrupt */
+		ivar = (adapter->linkvec | E1000_IVAR_VALID) << 8;
+		adapter->link_mask = 1 << adapter->linkvec;
+		adapter->eims_mask |= adapter->link_mask;
+		E1000_WRITE_REG(hw, E1000_IVAR_MISC, ivar);
+		break;
+	case e1000_82576:
 		/* RX */
 		for (int i = 0; i < adapter->num_queues; i++) {
 			u32 index = i & 0x7; /* Each IVAR has two entries */
@@ -2328,11 +2303,10 @@ igb_configure_queues(struct adapter *adapter)
 		adapter->link_mask = 1 << adapter->linkvec;
 		adapter->eims_mask |= adapter->link_mask;
 		E1000_WRITE_REG(hw, E1000_IVAR_MISC, ivar);
-	} else
-	{ /* 82575 */
-		int tmp;
+		break;
 
-                /* enable MSI-X PBA support*/
+	case e1000_82575:
+                /* enable MSI-X support*/
 		tmp = E1000_READ_REG(hw, E1000_CTRL_EXT);
                 tmp |= E1000_CTRL_EXT_PBA_CLR;
                 /* Auto-Mask interrupts upon ICR read. */
@@ -2361,7 +2335,10 @@ igb_configure_queues(struct adapter *adapter)
 		    E1000_EIMS_OTHER);
 		adapter->link_mask |= E1000_EIMS_OTHER;
 		adapter->eims_mask |= adapter->link_mask;
+	default:
+		break;
 	}
+
 	return;
 }
 
@@ -2444,6 +2421,10 @@ igb_setup_msix(struct adapter *adapter)
 	device_t dev = adapter->dev;
 	int rid, want, queues, msgs;
 
+	/* tuneable override */
+	if (igb_enable_msix == 0)
+		goto msi;
+
 	/* First try MSI/X */
 	rid = PCIR_BAR(IGB_MSIX_BAR);
 	adapter->msix_mem = bus_alloc_resource_any(dev,
@@ -2497,24 +2478,70 @@ msi:
 
 /*********************************************************************
  *
- *  Initialize the hardware to a configuration
- *  as specified by the adapter structure.
+ *  Set up an fresh starting state
  *
  **********************************************************************/
-static int
-igb_hardware_init(struct adapter *adapter)
+static void
+igb_reset(struct adapter *adapter)
 {
 	device_t	dev = adapter->dev;
-	u32		rx_buffer_size;
+	struct e1000_hw *hw = &adapter->hw;
+	struct e1000_fc_info *fc = &hw->fc;
+	struct ifnet	*ifp = adapter->ifp;
+	u32		pba = 0;
+	u16		hwm;
 
-	INIT_DEBUGOUT("igb_hardware_init: begin");
-
-	/* Issue a global reset */
-	e1000_reset_hw(&adapter->hw);
+	INIT_DEBUGOUT("igb_reset: begin");
 
 	/* Let the firmware know the OS is in control */
 	igb_get_hw_control(adapter);
 
+	/*
+	 * Packet Buffer Allocation (PBA)
+	 * Writing PBA sets the receive portion of the buffer
+	 * the remainder is used for the transmit buffer.
+	 */
+	switch (hw->mac.type) {
+	case e1000_82575:
+		pba = E1000_PBA_32K;
+		break;
+	case e1000_82576:
+		pba = E1000_PBA_64K;
+		break;
+	case e1000_82580:
+		pba = E1000_PBA_35K;
+	default:
+		break;
+	}
+
+	/* Special needs in case of Jumbo frames */
+	if ((hw->mac.type == e1000_82575) && (ifp->if_mtu > ETHERMTU)) {
+		u32 tx_space, min_tx, min_rx;
+		pba = E1000_READ_REG(hw, E1000_PBA);
+		tx_space = pba >> 16;
+		pba &= 0xffff;
+		min_tx = (adapter->max_frame_size +
+		    sizeof(struct e1000_tx_desc) - ETHERNET_FCS_SIZE) * 2;
+		min_tx = roundup2(min_tx, 1024);
+		min_tx >>= 10;
+                min_rx = adapter->max_frame_size;
+                min_rx = roundup2(min_rx, 1024);
+                min_rx >>= 10;
+		if (tx_space < min_tx &&
+		    ((min_tx - tx_space) < pba)) {
+			pba = pba - (min_tx - tx_space);
+			/*
+                         * if short on rx space, rx wins
+                         * and must trump tx adjustment
+			 */
+                        if (pba < min_rx)
+                                pba = min_rx;
+		}
+		E1000_WRITE_REG(hw, E1000_PBA, pba);
+	}
+
+	INIT_DEBUGOUT1("igb_init: pba=%dK",pba);
+
 	/*
 	 * These parameters control the automatic generation (Tx) and
 	 * response (Rx) to Ethernet PAUSE frames.
@@ -2522,41 +2549,74 @@ igb_hardware_init(struct adapter *adapter)
 	 *   received after sending an XOFF.
 	 * - Low water mark works best when it is very near the high water mark.
 	 *   This allows the receiver to restart by sending XON when it has
-	 *   drained a bit. Here we use an arbitary value of 1500 which will
-	 *   restart after one full frame is pulled from the buffer. There
-	 *   could be several smaller frames in the buffer and if so they will
-	 *   not trigger the XON until their total number reduces the buffer
-	 *   by 1500.
-	 * - The pause time is fairly large at 1000 x 512ns = 512 usec.
+	 *   drained a bit.
 	 */
-	if (adapter->hw.mac.type == e1000_82576)
-		rx_buffer_size = ((E1000_READ_REG(&adapter->hw,
-		    E1000_RXPBS) & 0xffff) << 10 );
-	else
-		rx_buffer_size = ((E1000_READ_REG(&adapter->hw,
-		    E1000_PBA) & 0xffff) << 10 );
+	hwm = min(((pba << 10) * 9 / 10),
+	    ((pba << 10) - 2 * adapter->max_frame_size));
 
-	adapter->hw.fc.high_water = rx_buffer_size -
-	    roundup2(adapter->max_frame_size, 1024);
-	adapter->hw.fc.low_water = adapter->hw.fc.high_water - 1500;
+	if (hw->mac.type < e1000_82576) {
+		fc->high_water = hwm & 0xFFF8;  /* 8-byte granularity */
+		fc->low_water = fc->high_water - 8;
+	} else {
+		fc->high_water = hwm & 0xFFF0;  /* 16-byte granularity */
+		fc->low_water = fc->high_water - 16;
+	}
 
-	adapter->hw.fc.pause_time = IGB_FC_PAUSE_TIME;
-	adapter->hw.fc.send_xon = TRUE;
+	fc->pause_time = IGB_FC_PAUSE_TIME;
+	fc->send_xon = TRUE;
 
 	/* Set Flow control, use the tunable location if sane */
 	if ((igb_fc_setting >= 0) || (igb_fc_setting < 4))
-		adapter->hw.fc.requested_mode = igb_fc_setting;
+		fc->requested_mode = igb_fc_setting;
 	else
-		adapter->hw.fc.requested_mode = e1000_fc_none;
+		fc->requested_mode = e1000_fc_none;
 
-	if (e1000_init_hw(&adapter->hw) < 0) {
+	fc->current_mode = fc->requested_mode;
+
+	/* Issue a global reset */
+	e1000_reset_hw(hw);
+	E1000_WRITE_REG(hw, E1000_WUC, 0);
+
+	if (e1000_init_hw(hw) < 0)
 		device_printf(dev, "Hardware Initialization Failed\n");
-		return (EIO);
+
+	if (hw->mac.type == e1000_82580) {
+		u32 reg;
+
+		hwm = (pba << 10) - (2 * adapter->max_frame_size);
+		/*
+		 * 0x80000000 - enable DMA COAL
+		 * 0x10000000 - use L0s as low power
+		 * 0x20000000 - use L1 as low power
+		 * X << 16 - exit dma coal when rx data exceeds X kB
+		 * Y - upper limit to stay in dma coal in units of 32usecs
+		 */
+		E1000_WRITE_REG(hw, E1000_DMACR,
+		    0xA0000006 | ((hwm << 6) & 0x00FF0000));
+
+		/* set hwm to PBA -  2 * max frame size */
+		E1000_WRITE_REG(hw, E1000_FCRTC, hwm);
+		/*
+		 * This sets the time to wait before requesting transition to
+		 * low power state to number of usecs needed to receive 1 512
+		 * byte frame at gigabit line rate
+		 */
+		E1000_WRITE_REG(hw, E1000_DMCTLX, 4);
+
+		/* free space in tx packet buffer to wake from DMA coal */
+		E1000_WRITE_REG(hw, E1000_DMCTXTH,
+		    (20480 - (2 * adapter->max_frame_size)) >> 6);
+
+		/* make low power state decision controlled by DMA coal */
+		reg = E1000_READ_REG(hw, E1000_PCIEMISC);
+		E1000_WRITE_REG(hw, E1000_PCIEMISC,
+		    reg | E1000_PCIEMISC_LX_DECISION);
 	}
 
-	e1000_check_for_link(&adapter->hw);
-
-	return (0);
+	E1000_WRITE_REG(&adapter->hw, E1000_VET, ETHERTYPE_VLAN);
+	e1000_get_phy_info(hw);
+	e1000_check_for_link(hw);
+	return;
 }
 
 /*********************************************************************
@@ -2585,8 +2645,8 @@ igb_setup_interface(device_t dev, struct adapter *adapter)
 	ifp->if_transmit = igb_mq_start;
 	ifp->if_qflush = igb_qflush;
 #endif
-	IFQ_SET_MAXLEN(&ifp->if_snd, adapter->num_tx_desc - 1);
-	ifp->if_snd.ifq_drv_maxlen = adapter->num_tx_desc - 1;
+	IFQ_SET_MAXLEN(&ifp->if_snd, adapter->num_tx_desc - 2);
+	ifp->if_snd.ifq_drv_maxlen = adapter->num_tx_desc - 2;
 	IFQ_SET_READY(&ifp->if_snd);
 
 	ether_ifattach(ifp, adapter->hw.mac.addr);
@@ -2596,6 +2656,9 @@ igb_setup_interface(device_t dev, struct adapter *adapter)
 	ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_VLAN_MTU;
 	ifp->if_capabilities |= IFCAP_TSO4;
 	ifp->if_capabilities |= IFCAP_JUMBO_MTU;
+	if (igb_header_split)
+		ifp->if_capabilities |= IFCAP_LRO;
+
 	ifp->if_capenable = ifp->if_capabilities;
 
 	/*
@@ -2866,14 +2929,14 @@ igb_allocate_transmit_buffers(struct tx_ring *txr)
 	/*
 	 * Setup DMA descriptor areas.
 	 */
-	if ((error = bus_dma_tag_create(NULL,		/* parent */
+	if ((error = bus_dma_tag_create(bus_get_dma_tag(adapter->dev),
 			       1, 0,			/* alignment, bounds */
 			       BUS_SPACE_MAXADDR,	/* lowaddr */
 			       BUS_SPACE_MAXADDR,	/* highaddr */
 			       NULL, NULL,		/* filter, filterarg */
 			       IGB_TSO_SIZE,		/* maxsize */
 			       IGB_MAX_SCATTER,		/* nsegments */
-			       PAGE_SIZE,		/* maxsegsize */
+			       IGB_TSO_SEG_SIZE,	/* maxsegsize */
 			       0,			/* flags */
 			       NULL,			/* lockfunc */
 			       NULL,			/* lockfuncarg */
@@ -2977,7 +3040,10 @@ igb_initialize_transmit_units(struct adapter *adapter)
 
 	 INIT_DEBUGOUT("igb_initialize_transmit_units: begin");
 
-	/* Setup the Base and Length of the Tx Descriptor Rings */
+	/* Setup Transmit Descriptor Base Settings */   
+	adapter->txd_cmd = E1000_TXD_CMD_IFCS;
+
+	/* Setup the Tx Descriptor Rings */
 	for (int i = 0; i < adapter->num_queues; i++, txr++) {
 		u64 bus_addr = txr->txdma.dma_paddr;
 
@@ -2996,12 +3062,15 @@ igb_initialize_transmit_units(struct adapter *adapter)
 		    E1000_READ_REG(&adapter->hw, E1000_TDBAL(i)),
 		    E1000_READ_REG(&adapter->hw, E1000_TDLEN(i)));
 
-		/* Setup Transmit Descriptor Base Settings */   
-		adapter->txd_cmd = E1000_TXD_CMD_IFCS;
+		txr->watchdog_check = FALSE;
 
 		txdctl = E1000_READ_REG(&adapter->hw, E1000_TXDCTL(i));
 		txdctl |= E1000_TXDCTL_QUEUE_ENABLE;
 		E1000_WRITE_REG(&adapter->hw, E1000_TXDCTL(i), txdctl);
+
+		/* Default interrupt rate */
+		E1000_WRITE_REG(&adapter->hw, E1000_EITR(txr->msix),
+		    igb_ave_latency);
 	}
 
 	/* Program the Transmit Control Register */
@@ -3094,7 +3163,7 @@ igb_free_transmit_buffers(struct tx_ring *txr)
 /**********************************************************************
  *
  *  Setup work for hardware segmentation offload (TSO) on
- *  adapters using advanced tx descriptors (82575)
+ *  adapters using advanced tx descriptors
  *
  **********************************************************************/
 static boolean_t
@@ -3165,6 +3234,9 @@ igb_tso_setup(struct tx_ring *txr, struct mbuf *mp, u32 *hdrlen)
 	/* MSS L4LEN IDX */
 	mss_l4len_idx |= (mp->m_pkthdr.tso_segsz << E1000_ADVTXD_MSS_SHIFT);
 	mss_l4len_idx |= (tcp_hlen << E1000_ADVTXD_L4LEN_SHIFT);
+	/* 82575 needs the queue index added */
+	if (adapter->hw.mac.type == e1000_82575)
+		mss_l4len_idx |= txr->me << 4;
 	TXD->mss_l4len_idx = htole32(mss_l4len_idx);
 
 	TXD->seqnum_seed = htole32(0);
@@ -3192,7 +3264,7 @@ igb_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp)
 	struct adapter *adapter = txr->adapter;
 	struct e1000_adv_tx_context_desc *TXD;
 	struct igb_tx_buffer        *tx_buffer;
-	uint32_t vlan_macip_lens = 0, type_tucmd_mlhl = 0;
+	u32 vlan_macip_lens, type_tucmd_mlhl, mss_l4len_idx;
 	struct ether_vlan_header *eh;
 	struct ip *ip = NULL;
 	struct ip6_hdr *ip6;
@@ -3204,6 +3276,7 @@ igb_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp)
 	if ((mp->m_pkthdr.csum_flags & CSUM_OFFLOAD) == 0)
 		offload = FALSE;
 
+	vlan_macip_lens = type_tucmd_mlhl = mss_l4len_idx = 0;
 	ctxd = txr->next_avail_desc;
 	tx_buffer = &txr->tx_buffers[ctxd];
 	TXD = (struct e1000_adv_tx_context_desc *) &txr->tx_base[ctxd];
@@ -3283,11 +3356,15 @@ igb_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp)
 			break;
 	}
 
+	/* 82575 needs the queue index added */
+	if (adapter->hw.mac.type == e1000_82575)
+		mss_l4len_idx = txr->me << 4;
+
 	/* Now copy bits into descriptor */
 	TXD->vlan_macip_lens |= htole32(vlan_macip_lens);
 	TXD->type_tucmd_mlhl |= htole32(type_tucmd_mlhl);
 	TXD->seqnum_seed = htole32(0);
-	TXD->mss_l4len_idx = htole32(0);
+	TXD->mss_l4len_idx = htole32(mss_l4len_idx);
 
 	tx_buffer->m_head = NULL;
 	tx_buffer->next_eop = -1;
@@ -3314,8 +3391,7 @@ static bool
 igb_txeof(struct tx_ring *txr)
 {
 	struct adapter	*adapter = txr->adapter;
-        int first, last, done, num_avail;
-	u32	cleaned = 0;
+        int first, last, done;
         struct igb_tx_buffer *tx_buffer;
         struct e1000_tx_desc   *tx_desc, *eop_desc;
 	struct ifnet   *ifp = adapter->ifp;
@@ -3325,7 +3401,6 @@ igb_txeof(struct tx_ring *txr)
         if (txr->tx_avail == adapter->num_tx_desc)
                 return FALSE;
 
-        num_avail = txr->tx_avail;
         first = txr->next_to_clean;
         tx_desc = &txr->tx_base[first];
         tx_buffer = &txr->tx_buffers[first];
@@ -3343,7 +3418,7 @@ igb_txeof(struct tx_ring *txr)
 	done = last;
 
         bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
-            BUS_DMASYNC_POSTREAD);
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
 
         while (eop_desc->upper.fields.status & E1000_TXD_STAT_DD) {
 		/* We clean the range of the packet */
@@ -3351,7 +3426,7 @@ igb_txeof(struct tx_ring *txr)
                 	tx_desc->upper.data = 0;
                 	tx_desc->lower.data = 0;
                 	tx_desc->buffer_addr = 0;
-                	++num_avail; ++cleaned;
+                	++txr->tx_avail;
 
 			if (tx_buffer->m_head) {
 				ifp->if_opackets++;
@@ -3365,6 +3440,7 @@ igb_txeof(struct tx_ring *txr)
                         	tx_buffer->m_head = NULL;
                 	}
 			tx_buffer->next_eop = -1;
+			txr->watchdog_time = ticks;
 
 	                if (++first == adapter->num_tx_desc)
 				first = 0;
@@ -3388,141 +3464,112 @@ igb_txeof(struct tx_ring *txr)
         txr->next_to_clean = first;
 
         /*
-         * If we have enough room, clear IFF_DRV_OACTIVE to tell the stack
-         * that it is OK to send packets.
-         * If there are no pending descriptors, clear the timeout. Otherwise,
-         * if some descriptors have been freed, restart the timeout.
+         * If we have enough room, clear IFF_DRV_OACTIVE
+         * to tell the stack that it is OK to send packets.
          */
-        if (num_avail > IGB_TX_CLEANUP_THRESHOLD) {                
+        if (txr->tx_avail > IGB_TX_CLEANUP_THRESHOLD) {                
                 ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-		/* All clean, turn off the timer */
-                if (num_avail == adapter->num_tx_desc) {
-			txr->watchdog_timer = 0;
-        		txr->tx_avail = num_avail;
+		/* All clean, turn off the watchdog */
+                if (txr->tx_avail == adapter->num_tx_desc) {
+			txr->watchdog_check = FALSE;
 			return FALSE;
 		}
         }
 
-	/* Some cleaned, reset the timer */
-	if (cleaned)
-		txr->watchdog_timer = IGB_TX_TIMEOUT;
-        txr->tx_avail = num_avail;
         return TRUE;
 }
 
 
 /*********************************************************************
  *
- *  Setup descriptor buffer(s) from system mbuf buffer pools.
- *  		i - designates the ring index
- *		clean - tells the function whether to update
- *		        the header, the packet buffer, or both.
+ *  Refresh mbuf buffers for a range of descriptors
  *
  **********************************************************************/
 static int
-igb_get_buf(struct rx_ring *rxr, int i, u8 clean)
+igb_get_buf(struct rx_ring *rxr, int first, int limit)
 {
 	struct adapter		*adapter = rxr->adapter;
-	struct mbuf		*mh, *mp;
 	bus_dma_segment_t	seg[2];
+	struct igb_rx_buf	*rxbuf;
+	struct mbuf		*mh, *mp;
 	bus_dmamap_t		map;
-	struct igb_rx_buffer	*rx_buffer;
-	int			error, nsegs;
-	int			merr = 0;
+	int			i, nsegs, error;
 
+	i = first;
+	while (i != limit) {
+		rxbuf = &rxr->rx_buffers[i];
 
-	rx_buffer = &rxr->rx_buffers[i];
+		if (rxbuf->m_head == NULL) {
+			mh = m_gethdr(M_DONTWAIT, MT_DATA);
+			if (mh == NULL)
+				goto failure;
+		} else  /* reuse */
+			mh = rxbuf->m_head;
 
-	/* First get our header and payload mbuf */
-	if (clean & IGB_CLEAN_HEADER) {
-		mh = m_gethdr(M_DONTWAIT, MT_DATA);
-		if (mh == NULL)
-			goto remap;
-	} else  /* reuse */
-		mh = rxr->rx_buffers[i].m_head;
+		mh->m_len = MHLEN;
+		mh->m_flags |= M_PKTHDR;
 
-	mh->m_len = MHLEN;
-	mh->m_flags |= M_PKTHDR;
+		if (rxbuf->m_pack == NULL) {
+			mp = m_getjcl(M_DONTWAIT, MT_DATA,
+			    M_PKTHDR, adapter->rx_mbuf_sz);
+			if (mp == NULL)
+				goto failure;
+			mp->m_len = adapter->rx_mbuf_sz;
+			mp->m_flags &= ~M_PKTHDR;
+		} else {	/* reusing */
+			mp = rxbuf->m_pack;
+			mp->m_len = adapter->rx_mbuf_sz;
+			mp->m_flags &= ~M_PKTHDR;
+		}
 
-	if (clean & IGB_CLEAN_PAYLOAD) {
-		mp = m_getjcl(M_DONTWAIT, MT_DATA,
-		    M_PKTHDR, adapter->rx_mbuf_sz);
-		if (mp == NULL)
-			goto remap;
-		mp->m_len = adapter->rx_mbuf_sz;
-		mp->m_flags &= ~M_PKTHDR;
-	} else {	/* reusing */
-		mp = rxr->rx_buffers[i].m_pack;
-		mp->m_len = adapter->rx_mbuf_sz;
-		mp->m_flags &= ~M_PKTHDR;
+		/*
+		** Need to create a chain for the following
+		** dmamap call at this point.
+		*/
+		mh->m_next = mp;
+		mh->m_pkthdr.len = mh->m_len + mp->m_len;
+
+		/* Get the memory mapping */
+		error = bus_dmamap_load_mbuf_sg(rxr->rxtag,
+		    rxr->spare_map, mh, seg, &nsegs, BUS_DMA_NOWAIT);
+		if (error != 0)
+			panic("igb_get_buf: dmamap load failure\n");
+
+		/* Unload old mapping and update buffer struct */
+		if (rxbuf->m_head != NULL)
+			bus_dmamap_unload(rxr->rxtag, rxbuf->map);
+		map = rxbuf->map;
+		rxbuf->map = rxr->spare_map;
+		rxr->spare_map = map;
+		rxbuf->m_head = mh;
+		rxbuf->m_pack = mp;
+		bus_dmamap_sync(rxr->rxtag,
+		    rxbuf->map, BUS_DMASYNC_PREREAD);
+
+		/* Update descriptor */
+		rxr->rx_base[i].read.hdr_addr = htole64(seg[0].ds_addr);
+		rxr->rx_base[i].read.pkt_addr = htole64(seg[1].ds_addr);
+
+		/* Calculate next index */
+		if (++i == adapter->num_rx_desc)
+			i = 0;
 	}
-	/*
-	** Need to create a chain for the following
-	** dmamap call at this point.
-	*/
-	mh->m_next = mp;
-	mh->m_pkthdr.len = mh->m_len + mp->m_len;
-
-	/* Get the memory mapping */
-	error = bus_dmamap_load_mbuf_sg(rxr->rxtag,
-	    rxr->rx_spare_map, mh, seg, &nsegs, BUS_DMA_NOWAIT);
-	if (error != 0) {
-		printf("GET BUF: dmamap load failure - %d\n", error);
-		m_free(mh);
-		return (error);
-	}
-
-	/* Unload old mapping and update buffer struct */
-	if (rx_buffer->m_head != NULL)
-			bus_dmamap_unload(rxr->rxtag, rx_buffer->map);
-	map = rx_buffer->map;
-	rx_buffer->map = rxr->rx_spare_map;
-	rxr->rx_spare_map = map;
-	rx_buffer->m_head = mh;
-	rx_buffer->m_pack = mp;
-	bus_dmamap_sync(rxr->rxtag,
-	    rx_buffer->map, BUS_DMASYNC_PREREAD);
-
-	/* Update descriptor */
-	rxr->rx_base[i].read.hdr_addr = htole64(seg[0].ds_addr);
-	rxr->rx_base[i].read.pkt_addr = htole64(seg[1].ds_addr);
 
 	return (0);
 
+failure:
 	/*
-	** If we get here, we have an mbuf resource
-	** issue, so we discard the incoming packet
-	** and attempt to reuse existing mbufs next
-	** pass thru the ring, but to do so we must
-	** fix up the descriptor which had the address
-	** clobbered with writeback info.
+	** Its unforunate to have to panic, but
+	** with the new design I see no other
+	** graceful failure mode, this is ONLY
+	** called in the RX clean path, and the
+	** old mbuf has been used, it MUST be
+	** refreshed. This should be avoided by
+	** proper configuration. -jfv
 	*/
-remap:
-	adapter->mbuf_header_failed++;
-	merr = ENOBUFS;
-	/* Is there a reusable buffer? */
-	mh = rxr->rx_buffers[i].m_head;
-	if (mh == NULL) /* Nope, init error */
-		return (merr);
-	mp = rxr->rx_buffers[i].m_pack;
-	if (mp == NULL) /* Nope, init error */
-		return (merr);
-	/* Get our old mapping */
-	rx_buffer = &rxr->rx_buffers[i];
-	error = bus_dmamap_load_mbuf_sg(rxr->rxtag,
-	    rx_buffer->map, mh, seg, &nsegs, BUS_DMA_NOWAIT);
-	if (error != 0) {
-		/* We really have a problem */
-		m_free(mh);
-		return (error);
-	}
-	/* Now fix the descriptor as needed */
-	rxr->rx_base[i].read.hdr_addr = htole64(seg[0].ds_addr);
-	rxr->rx_base[i].read.pkt_addr = htole64(seg[1].ds_addr);
-	return (merr);
+	panic("igb_get_buf: ENOBUFS\n");
 }
 
-
 /*********************************************************************
  *
  *  Allocate memory for rx_buffer structures. Since we use one
@@ -3536,12 +3583,12 @@ igb_allocate_receive_buffers(struct rx_ring *rxr)
 {
 	struct	adapter 	*adapter = rxr->adapter;
 	device_t 		dev = adapter->dev;
-	struct igb_rx_buffer 	*rxbuf;
+	struct igb_rx_buf	*rxbuf;
 	int             	i, bsize, error;
 
-	bsize = sizeof(struct igb_rx_buffer) * adapter->num_rx_desc;
+	bsize = sizeof(struct igb_rx_buf) * adapter->num_rx_desc;
 	if (!(rxr->rx_buffers =
-	    (struct igb_rx_buffer *) malloc(bsize,
+	    (struct igb_rx_buf *) malloc(bsize,
 	    M_DEVBUF, M_NOWAIT | M_ZERO))) {
 		device_printf(dev, "Unable to allocate rx_buffer memory\n");
 		error = ENOMEM;
@@ -3553,7 +3600,7 @@ igb_allocate_receive_buffers(struct rx_ring *rxr)
 	** with packet split (hence the two segments, even though
 	** it may not always use this.
 	*/
-	if ((error = bus_dma_tag_create(NULL,		/* parent */
+	if ((error = bus_dma_tag_create(bus_get_dma_tag(adapter->dev),
 				   1, 0,		/* alignment, bounds */
 				   BUS_SPACE_MAXADDR,	/* lowaddr */
 				   BUS_SPACE_MAXADDR,	/* highaddr */
@@ -3571,7 +3618,7 @@ igb_allocate_receive_buffers(struct rx_ring *rxr)
 
 	/* Create the spare map (used by getbuf) */
         error = bus_dmamap_create(rxr->rxtag, BUS_DMA_NOWAIT,
-	     &rxr->rx_spare_map);
+	     &rxr->spare_map);
 	if (error) {
 		device_printf(dev,
 		    "%s: bus_dmamap_create header spare failed: %d\n",
@@ -3608,15 +3655,14 @@ igb_setup_receive_ring(struct rx_ring *rxr)
 	struct	adapter		*adapter;
 	struct  ifnet		*ifp;
 	device_t		dev;
-	struct igb_rx_buffer	*rxbuf;
+	struct igb_rx_buf	*rxbuf;
+	bus_dma_segment_t	seg[2];
 	struct lro_ctrl		*lro = &rxr->lro;
-	int			j, rsize;
+	int			rsize, nsegs, error = 0;
 
 	adapter = rxr->adapter;
 	dev = adapter->dev;
 	ifp = adapter->ifp;
-	rxr->lro_enabled = FALSE;
-	rxr->hdr_split = FALSE;
 
 	/* Clear the ring contents */
 	rsize = roundup2(adapter->num_rx_desc *
@@ -3639,20 +3685,48 @@ igb_setup_receive_ring(struct rx_ring *rxr)
 		rxbuf->m_pack = NULL;
 	}
 
-	/* Next replenish the ring */
-	for (j = 0; j < adapter->num_rx_desc; j++) {
-		if (igb_get_buf(rxr, j, IGB_CLEAN_BOTH) == ENOBUFS) {
-			rxr->rx_buffers[j].m_head = NULL;
-			rxr->rx_buffers[j].m_pack = NULL;
-			rxr->rx_base[j].read.hdr_addr = 0;
-			rxr->rx_base[j].read.pkt_addr = 0;
-			goto fail;
-		}
+	/* Now replenish the mbufs */
+	for (int j = 0; j != adapter->num_rx_desc; ++j) {
+
+		rxbuf = &rxr->rx_buffers[j];
+		rxbuf->m_head = m_gethdr(M_DONTWAIT, MT_DATA);
+		if (rxbuf->m_head == NULL)
+			panic("RX ring hdr initialization failed!\n");
+		rxbuf->m_head->m_len = MHLEN;
+		rxbuf->m_head->m_flags |= M_PKTHDR;
+		rxbuf->m_head->m_pkthdr.len = rxbuf->m_head->m_len;
+
+		rxbuf->m_pack = m_getjcl(M_DONTWAIT, MT_DATA,
+		    M_PKTHDR, adapter->rx_mbuf_sz);
+		if (rxbuf->m_pack == NULL)
+			panic("RX ring pkt initialization failed!\n");
+		rxbuf->m_pack->m_len = adapter->rx_mbuf_sz;
+		rxbuf->m_head->m_next = rxbuf->m_pack;
+		rxbuf->m_head->m_pkthdr.len += rxbuf->m_pack->m_len;
+
+		/* Get the memory mapping */
+		error = bus_dmamap_load_mbuf_sg(rxr->rxtag,
+		    rxbuf->map, rxbuf->m_head, seg,
+		    &nsegs, BUS_DMA_NOWAIT);
+		if (error != 0)
+			panic("RX ring dma initialization failed!\n");
+		bus_dmamap_sync(rxr->rxtag,
+		    rxbuf->map, BUS_DMASYNC_PREREAD);
+
+		/* Update descriptor */
+		rxr->rx_base[j].read.hdr_addr = htole64(seg[0].ds_addr);
+		rxr->rx_base[j].read.pkt_addr = htole64(seg[1].ds_addr);
 	}
 
 	/* Setup our descriptor indices */
 	rxr->next_to_check = 0;
 	rxr->last_cleaned = 0;
+	rxr->lro_enabled = FALSE;
+
+	if (igb_header_split)
+		rxr->hdr_split = TRUE;
+	else
+		ifp->if_capabilities &= ~IFCAP_LRO;
 
 	bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
 	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
@@ -3663,19 +3737,17 @@ igb_setup_receive_ring(struct rx_ring *rxr)
 	** is enabled, since so often they
 	** are undesireable in similar setups.
 	*/
-	if (ifp->if_capenable & IFCAP_LRO) {
+	if ((ifp->if_capenable & IFCAP_LRO) && (rxr->hdr_split)) {
 		int err = tcp_lro_init(lro);
-		if (err) {
-			device_printf(dev,"LRO Initialization failed!\n");
-			goto fail;
-		}
+		if (err)
+			panic("LRO Initialization failed!\n");
 		INIT_DEBUGOUT("RX LRO Initialized\n");
 		rxr->lro_enabled = TRUE;
-		rxr->hdr_split = TRUE;
 		lro->ifp = adapter->ifp;
 	}
 
 	return (0);
+#if 0
 fail:
 	/*
 	 * We need to clean up any buffers allocated
@@ -3692,6 +3764,7 @@ fail:
 		}
 	}
 	return (ENOBUFS);
+#endif
 }
 
 /*********************************************************************
@@ -3720,7 +3793,7 @@ fail:
 	rxr = adapter->rx_rings;
 	for (--i; i > 0; i--, rxr++) {
 		for (j = 0; j < adapter->num_rx_desc; j++) {
-			struct igb_rx_buffer *rxbuf;
+			struct igb_rx_buf *rxbuf;
 			rxbuf = &rxr->rx_buffers[j];
 			if (rxbuf->m_head != NULL) {
 				bus_dmamap_sync(rxr->rxtag, rxbuf->map,
@@ -3806,6 +3879,11 @@ igb_initialize_receive_units(struct adapter *adapter)
 		rxdctl |= IGB_RX_HTHRESH << 8;
 		rxdctl |= IGB_RX_WTHRESH << 16;
 		E1000_WRITE_REG(&adapter->hw, E1000_RXDCTL(i), rxdctl);
+
+		/* Initial RX interrupt moderation */
+		rxr->eitr_setting = igb_ave_latency;
+		E1000_WRITE_REG(&adapter->hw,
+		    E1000_EITR(rxr->msix), igb_ave_latency);
 	}
 
 	/*
@@ -3927,14 +4005,14 @@ igb_free_receive_structures(struct adapter *adapter)
 static void
 igb_free_receive_buffers(struct rx_ring *rxr)
 {
-	struct adapter	*adapter = rxr->adapter;
-	struct igb_rx_buffer *rx_buffer;
+	struct adapter		*adapter = rxr->adapter;
+	struct igb_rx_buf	*rx_buffer;
 
 	INIT_DEBUGOUT("free_receive_structures: begin");
 
-	if (rxr->rx_spare_map) {
-		bus_dmamap_destroy(rxr->rxtag, rxr->rx_spare_map);
-		rxr->rx_spare_map = NULL;
+	if (rxr->spare_map) {
+		bus_dmamap_destroy(rxr->rxtag, rxr->spare_map);
+		rxr->spare_map = NULL;
 	}
 
 	/* Cleanup any existing buffers */
@@ -3980,20 +4058,20 @@ igb_free_receive_buffers(struct rx_ring *rxr)
  *
  *  Return TRUE if more to clean, FALSE otherwise
  *********************************************************************/
+
 static bool
 igb_rxeof(struct rx_ring *rxr, int count)
 {
-	struct adapter		*adapter = rxr->adapter;
-	struct ifnet		*ifp;
+	struct adapter 		*adapter = rxr->adapter;
+	struct ifnet   		*ifp = adapter->ifp;
 	struct lro_ctrl		*lro = &rxr->lro;
 	struct lro_entry	*queued;
-	int			i;
+	int			i, processed = 0;
 	u32			staterr;
 	union e1000_adv_rx_desc	*cur;
 
 
 	IGB_RX_LOCK(rxr);
-	ifp = adapter->ifp;
 	i = rxr->next_to_check;
 	cur = &rxr->rx_base[i];
 	staterr = cur->wb.upper.status_error;
@@ -4007,35 +4085,56 @@ igb_rxeof(struct rx_ring *rxr, int count)
 	bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
 	    BUS_DMASYNC_POSTREAD);
 
-	/* Main clean loop */
-	while ((staterr & E1000_RXD_STAT_DD) &&
-	    (count != 0) &&
+	while ((staterr & E1000_RXD_STAT_DD) && (count != 0) &&
 	    (ifp->if_drv_flags & IFF_DRV_RUNNING)) {
-		struct mbuf *sendmp, *mh, *mp;
-		u16 hlen, plen, hdr, ptype, len_adj, vtag;
-		u8 dopayload, accept_frame, eop;
- 
-		accept_frame = 1;
-		hlen = plen = len_adj = vtag = 0;
-		sendmp = mh = mp = NULL;
-		ptype = (u16)(cur->wb.lower.lo_dword.data >> 4);
+		struct mbuf	*sendmp, *mh, *mp, *nh, *np;
+		struct igb_rx_buf	*nxtbuf;
+		u32		ptype;
+		u16		hlen, plen, hdr, nextp, vtag;	
+		bool		accept_frame, eop, sctp = FALSE;
+
+
+		accept_frame = TRUE;
+		hlen = plen = nextp = 0;
+		sendmp = mh = mp = nh = np = NULL;
+
+		ptype = (le32toh(cur->wb.lower.lo_dword.data) &
+		    IGB_PKTTYPE_MASK);
+		if (((ptype & E1000_RXDADV_PKTTYPE_ETQF) == 0) &&
+		    ((ptype & E1000_RXDADV_PKTTYPE_SCTP) != 0))
+			sctp = TRUE;
 
 		/* Sync the buffers */
 		bus_dmamap_sync(rxr->rxtag, rxr->rx_buffers[i].map,
 			    BUS_DMASYNC_POSTREAD);
+		mh = rxr->rx_buffers[i].m_head;
+		mp = rxr->rx_buffers[i].m_pack;
+		vtag = le16toh(cur->wb.upper.vlan);
+		eop = ((staterr & E1000_RXD_STAT_EOP) != 0);
+
+		/* Get the next descriptor we will process */
+		if (!eop) {
+			nextp = i + 1;
+			if (nextp == adapter->num_rx_desc)
+				nextp = 0;
+			nxtbuf = &rxr->rx_buffers[nextp];
+			prefetch(nxtbuf);
+		}
 
 		/*
 		** The way the hardware is configured to
 		** split, it will ONLY use the header buffer
 		** when header split is enabled, otherwise we
-		** get normal behavior, ie, both header and
-		** payload are DMA'd into the payload buffer.
+		** get legacy behavior, ie, both header and
+		** payload are DMA'd into JUST the payload buffer.
+		**
+		** Rather than using the fmp/lmp global pointers
+		** we now keep the head of a packet chain in the
+		** m_nextpkt pointer and pass this along from one
+		** descriptor to the next, until we get EOP.
 		**
-		** The fmp test is to catch the case where a
-		** packet spans multiple descriptors, in that
-		** case only the first header is valid.
 		*/
-		if ((rxr->hdr_split) && (rxr->fmp == NULL)){
+		if ((rxr->hdr_split) && (mh->m_nextpkt == NULL)) {
 			hdr = le16toh(cur->
 			    wb.lower.lo_dword.hs_rss.hdr_info);
 			hlen = (hdr & E1000_RXDADV_HDRBUFLEN_MASK) >>
@@ -4043,183 +4142,135 @@ igb_rxeof(struct rx_ring *rxr, int count)
 			if (hlen > IGB_HDR_BUF)
 				hlen = IGB_HDR_BUF;
 			plen = le16toh(cur->wb.upper.length);
-			/* Handle the header mbuf */
-			mh = rxr->rx_buffers[i].m_head;
 			mh->m_len = hlen;
-			dopayload = IGB_CLEAN_HEADER;
+			mh->m_flags |= M_PKTHDR;
+			mh->m_next = NULL;
+			mh->m_pkthdr.len = mh->m_len;
+			/* Null this so getbuf replenishes */
+			rxr->rx_buffers[i].m_head = NULL;
 			/*
 			** Get the payload length, this
 			** could be zero if its a small
 			** packet.
 			*/
 			if (plen) {
-				mp = rxr->rx_buffers[i].m_pack;
 				mp->m_len = plen;
 				mp->m_next = NULL;
 				mp->m_flags &= ~M_PKTHDR;
 				mh->m_next = mp;
-				mh->m_flags |= M_PKTHDR;
-				dopayload = IGB_CLEAN_BOTH;
+				mh->m_pkthdr.len += mp->m_len;
+				/* Null this so getbuf replenishes */
+				rxr->rx_buffers[i].m_pack = NULL;
 				rxr->rx_split_packets++;
-			} else {  /* small packets */
-				mh->m_flags &= ~M_PKTHDR;
-				mh->m_next = NULL;
+			}
+			/* Setup the forward chain */
+			if (eop == 0) {
+				nh = rxr->rx_buffers[nextp].m_head;
+				np = rxr->rx_buffers[nextp].m_pack;
+				nh->m_nextpkt = mh;
+				if (plen)
+					mp->m_next = np;
+				else
+					mh->m_next = np;
+			} else {
+				sendmp = mh;
+				if (staterr & E1000_RXD_STAT_VP) {
+					sendmp->m_pkthdr.ether_vtag = vtag;
+					sendmp->m_flags |= M_VLANTAG;
+				}
 			}
 		} else {
 			/*
 			** Either no header split, or a
 			** secondary piece of a fragmented
-			** split packet.
+			** packet.
 			*/
-			mh = rxr->rx_buffers[i].m_pack;
-			mh->m_flags |= M_PKTHDR;
-			mh->m_len = le16toh(cur->wb.upper.length);
-			dopayload = IGB_CLEAN_PAYLOAD;
+			mp->m_len = le16toh(cur->wb.upper.length);
+			rxr->rx_buffers[i].m_pack = NULL;
+			/* stored head pointer */
+			sendmp = mh->m_nextpkt;
+			if (sendmp != NULL) {
+				sendmp->m_pkthdr.len += mp->m_len;
+				sendmp->m_nextpkt = NULL;
+			} else { 
+				/* first desc of a non-ps chain */
+				sendmp = mp;
+				sendmp->m_flags |= M_PKTHDR;
+				sendmp->m_pkthdr.len = mp->m_len;
+				if (staterr & E1000_RXD_STAT_VP) {
+					sendmp->m_pkthdr.ether_vtag = vtag;
+					sendmp->m_flags |= M_VLANTAG;
+				}
+			}
+			/* Carry head forward */
+			if (eop == 0) {
+				nh = rxr->rx_buffers[nextp].m_head;
+				np = rxr->rx_buffers[nextp].m_pack;
+				nh->m_nextpkt = sendmp;
+				mp->m_next = np;
+				sendmp = NULL;
+			}
+			mh->m_nextpkt = NULL;
 		}
 
-		if (staterr & E1000_RXD_STAT_EOP) {
-			count--;
-			eop = 1;
-			/*
-			** Strip CRC and account for frag
-			*/
-			if (mp) { 
-				if (mp->m_len < ETHER_CRC_LEN) {
-					/* a frag, how much is left? */
-					len_adj = ETHER_CRC_LEN - mp->m_len;
-					mp->m_len = 0;
-				} else
-					mp->m_len -= ETHER_CRC_LEN;
-			} else { /* not split */
-				if (mh->m_len < ETHER_CRC_LEN) {
-					len_adj = ETHER_CRC_LEN - mh->m_len;
-					mh->m_len = 0;
-				} else
-					mh->m_len -= ETHER_CRC_LEN;
-			}
-		} else 
-			eop = 0;
-
 		if (staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK)
-			accept_frame = 0;
-#ifdef IGB_IEEE1588
-	This linux code needs to be converted to work here
-	-----------------------------------------------------
-               if (unlikely(staterr & E1000_RXD_STAT_TS)) {
-                       u64 regval;
-                       u64 ns;
-// Create an mtag and set it up
-                       struct skb_shared_hwtstamps *shhwtstamps =
-                               skb_hwtstamps(skb);
+			accept_frame = FALSE;
 
-                       rd32(E1000_TSYNCRXCTL) & E1000_TSYNCRXCTL_VALID),
-                       "igb: no RX time stamp available for time stamped packet");
-                       regval = rd32(E1000_RXSTMPL);
-                       regval |= (u64)rd32(E1000_RXSTMPH) << 32;
-// Do time conversion from the register
-                       ns = timecounter_cyc2time(&adapter->clock, regval);
-                       clocksync_update(&adapter->sync, ns);
-                       memset(shhwtstamps, 0, sizeof(*shhwtstamps));
-                       shhwtstamps->hwtstamp = ns_to_ktime(ns);
-                       shhwtstamps->syststamp =
-                               clocksync_hw2sys(&adapter->sync, ns);
-               }
-#endif
 		if (accept_frame) {
-			/*
-			** get_buf will overwrite the writeback
-			** descriptor so save the VLAN tag now.
-			*/
-			vtag = le16toh(cur->wb.upper.vlan);
-			if (igb_get_buf(rxr, i, dopayload) != 0) {
-				ifp->if_iqdrops++;
-				goto discard;
-			}
-			/* Initial frame - setup */
-			if (rxr->fmp == NULL) {
-				mh->m_flags |= M_PKTHDR;
-				mh->m_pkthdr.len = mh->m_len;
-				rxr->fmp = mh; /* Store the first mbuf */
-				rxr->lmp = mh;
-				if (mp) { /* Add payload if split */
-					mh->m_pkthdr.len += mp->m_len;
-					rxr->lmp = mh->m_next;
-				}
-			} else {
-				/* Chain mbuf's together */
-				mh->m_flags &= ~M_PKTHDR;
-				rxr->lmp->m_next = mh;
-				rxr->lmp = rxr->lmp->m_next;
-				rxr->fmp->m_pkthdr.len += mh->m_len;
-				/* Adjust for CRC frag */
-				if (len_adj) {
-					rxr->lmp->m_len -= len_adj;
-					rxr->fmp->m_pkthdr.len -= len_adj;
-				}
-			}
-
+			++processed;
 			if (eop) {
-				bool sctp = ((ptype & 0x40) != 0);
-				rxr->fmp->m_pkthdr.rcvif = ifp;
+				--count;
+				sendmp->m_pkthdr.rcvif = ifp;
 				ifp->if_ipackets++;
 				rxr->rx_packets++;
 				/* capture data for AIM */
-				rxr->bytes += rxr->fmp->m_pkthdr.len;
-				rxr->rx_bytes += rxr->fmp->m_pkthdr.len;
-
-				igb_rx_checksum(staterr, rxr->fmp, sctp);
-				if (staterr & E1000_RXD_STAT_VP) {
-					rxr->fmp->m_pkthdr.ether_vtag = vtag;
-					rxr->fmp->m_flags |= M_VLANTAG;
-				}
+				rxr->bytes += sendmp->m_pkthdr.len;
+				rxr->rx_bytes += rxr->bytes;
+				if (ifp->if_capenable & IFCAP_RXCSUM)
+					igb_rx_checksum(staterr, sendmp, sctp);
+				else
+					sendmp->m_pkthdr.csum_flags = 0;
 #if __FreeBSD_version >= 800000
-                                rxr->fmp->m_pkthdr.flowid = curcpu;
-                                rxr->fmp->m_flags |= M_FLOWID;
+				/* Get the RSS Hash */
+				sendmp->m_pkthdr.flowid =
+				    le32toh(cur->wb.lower.hi_dword.rss);
+				sendmp->m_flags |= M_FLOWID;
 #endif
-				sendmp = rxr->fmp;
-				rxr->fmp = NULL;
-				rxr->lmp = NULL;
 			}
 		} else {
 			ifp->if_ierrors++;
-discard:
 			/* Reuse loaded DMA map and just update mbuf chain */
-			if (hlen) {
-				mh = rxr->rx_buffers[i].m_head;
-				mh->m_len = MHLEN;
-				mh->m_next = NULL;
-			}
-			mp = rxr->rx_buffers[i].m_pack;
+			mh->m_len = MHLEN;
+			mh->m_flags |= M_PKTHDR;
+			mh->m_next = NULL;
 			mp->m_len = mp->m_pkthdr.len = adapter->rx_mbuf_sz;
 			mp->m_data = mp->m_ext.ext_buf;
+			if (mp->m_next) { /* Free chain */
+				sendmp = mp->m_next;
+				m_free(sendmp);
+			}
 			mp->m_next = NULL;
 			if (adapter->max_frame_size <=
 			    (MCLBYTES - ETHER_ALIGN))
 				m_adj(mp, ETHER_ALIGN);
-			if (rxr->fmp != NULL) {
-				/* handles the whole chain */
-				m_freem(rxr->fmp);
-				rxr->fmp = NULL;
-				rxr->lmp = NULL;
-			}
 			sendmp = NULL;
 		}
-
 		bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
 		    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
-		rxr->last_cleaned = i; /* For updating tail */
-
-		/* Advance our pointers to the next descriptor. */
+		rxr->last_cleaned = i; /* for updating tail */
 		if (++i == adapter->num_rx_desc)
 			i = 0;
- 
+		/* Prefetch next descriptor */
+		cur = &rxr->rx_base[i];
+		prefetch(cur);
+
 		/*
-		** Note that we hold the RX lock thru
-		** the following call so this ring's
-		** next_to_check is not gonna change.
+		** Now send up to the stack,
+		** note that the RX lock is
+		** held thru this call.
 		*/
-		if (sendmp != NULL) {
+                if (sendmp != NULL) {
 			/*
 			** Send to the stack if:
 			**  - LRO not enabled, or
@@ -4228,17 +4279,31 @@ discard:
 			*/
 			if ((!rxr->lro_enabled) ||
 			    ((!lro->lro_cnt) || (tcp_lro_rx(lro, sendmp, 0))))
-                                (*ifp->if_input)(ifp, sendmp);
+	                        (*ifp->if_input)(ifp, sendmp);
                 }
 
-		/* Get the next descriptor */
-		cur = &rxr->rx_base[i];
+		/* Replenish every 4 max */
+		if (processed == 4) {
+			igb_get_buf(rxr, rxr->next_to_check, i);
+			processed = 0;
+			E1000_WRITE_REG(&adapter->hw,
+			    E1000_RDT(rxr->me), rxr->last_cleaned);
+			rxr->next_to_check = i;
+		}
+
+		/* Next iteration */
 		staterr = cur->wb.upper.status_error;
 	}
-	rxr->next_to_check = i;
 
-	/* Advance the E1000's Receive Queue #0  "Tail Pointer". */
-	E1000_WRITE_REG(&adapter->hw, E1000_RDT(rxr->me), rxr->last_cleaned);
+	/* Replenish remaining */
+	if (processed != 0) {
+		igb_get_buf(rxr, rxr->next_to_check, i);
+		processed = 0;
+		E1000_WRITE_REG(&adapter->hw,
+		    E1000_RDT(rxr->me), rxr->last_cleaned);
+	}
+
+	rxr->next_to_check = i;
 
 	/*
 	 * Flush any outstanding LRO work
@@ -4252,8 +4317,8 @@ discard:
 	IGB_RX_UNLOCK(rxr);
 
 	/*
-	** We still have cleaning to do?
-	** Schedule another interrupt if so.
+	** Leaving with more to clean?
+	** then schedule another interrupt.
 	*/
 	if (staterr & E1000_RXD_STAT_DD) {
 		E1000_WRITE_REG(&adapter->hw, E1000_EICS, rxr->eims);
@@ -4263,7 +4328,6 @@ discard:
 	return FALSE;
 }
 
-
 /*********************************************************************
  *
  *  Verify that the hardware indicated that the checksum is valid.
@@ -4302,7 +4366,7 @@ igb_rx_checksum(u32 staterr, struct mbuf *mp, bool sctp)
 		/* Did it pass? */
 		if (!(errors & E1000_RXD_ERR_TCPE)) {
 			mp->m_pkthdr.csum_flags |= type;
-			if (!sctp)
+			if (sctp == FALSE)
 				mp->m_pkthdr.csum_data = htons(0xffff);
 		}
 	}
@@ -4319,7 +4383,7 @@ igb_register_vlan(void *arg, struct ifnet *ifp, u16 vtag)
 	struct adapter	*adapter = ifp->if_softc;
 	u32		index, bit;
 
-	if (ifp->if_softc !=  arg)   /* Not our event */
+	if (ifp->if_softc != arg)	/* Not our event */
 		return;
 
 	if ((vtag == 0) || (vtag > 4095))       /* Invalid */
@@ -4343,7 +4407,7 @@ igb_unregister_vlan(void *arg, struct ifnet *ifp, u16 vtag)
 	struct adapter	*adapter = ifp->if_softc;
 	u32		index, bit;
 
-	if (ifp->if_softc !=  arg)
+	if (ifp->if_softc != arg)
 		return;
 
 	if ((vtag == 0) || (vtag > 4095))       /* Invalid */
diff --git a/sys/dev/e1000/if_igb.h b/sys/dev/e1000/if_igb.h
index ddc4d8ae9e6..ce5b726413e 100644
--- a/sys/dev/e1000/if_igb.h
+++ b/sys/dev/e1000/if_igb.h
@@ -48,7 +48,7 @@
  *      (num_tx_desc * sizeof(struct e1000_tx_desc)) % 128 == 0
  */
 #define IGB_MIN_TXD		80
-#define IGB_DEFAULT_TXD		256
+#define IGB_DEFAULT_TXD		1024
 #define IGB_MAX_TXD		4096
 
 /*
@@ -63,7 +63,7 @@
  *      (num_tx_desc * sizeof(struct e1000_tx_desc)) % 128 == 0
  */
 #define IGB_MIN_RXD		80
-#define IGB_DEFAULT_RXD		256
+#define IGB_DEFAULT_RXD		1024
 #define IGB_MAX_RXD		4096
 
 /*
@@ -128,7 +128,7 @@
 /*
  * This parameter controls the duration of transmit watchdog timer.
  */
-#define IGB_TX_TIMEOUT                   5    /* set to 5 seconds */
+#define IGB_WATCHDOG                   (10 * hz)
 
 /*
  * This parameter controls when the driver calls the routine to reclaim
@@ -225,6 +225,7 @@
 #define IGB_TSO_SIZE		(65535 + sizeof(struct ether_vlan_header))
 #define IGB_TSO_SEG_SIZE	4096	/* Max dma segment size */
 #define IGB_HDR_BUF		128
+#define IGB_PKTTYPE_MASK	0x0000FFF0
 #define ETH_ZLEN		60
 #define ETH_ADDR_LEN		6
 
@@ -235,11 +236,6 @@
 #define CSUM_OFFLOAD		(CSUM_IP|CSUM_TCP|CSUM_UDP)
 #endif
 
-/* Header split codes for get_buf */
-#define IGB_CLEAN_HEADER		1
-#define IGB_CLEAN_PAYLOAD		2
-#define IGB_CLEAN_BOTH			3
-
 /*
  * Interrupt Moderation parameters
  */
@@ -280,6 +276,7 @@ struct tx_ring {
 	struct igb_dma_alloc	txdma;		/* bus_dma glue for tx desc */
 	struct e1000_tx_desc	*tx_base;
 	struct task		tx_task;	/* cleanup tasklet */
+	struct taskqueue	*tq;
 	u32			next_avail_desc;
 	u32			next_to_clean;
 	volatile u16		tx_avail;
@@ -291,7 +288,8 @@ struct tx_ring {
 	struct resource		*res;
 	void			*tag;
 
-	u32			watchdog_timer;
+	bool			watchdog_check;
+	int			watchdog_time;
 	u64			no_desc_avail;
 	u64			tx_irq;
 	u64			tx_packets;
@@ -311,13 +309,14 @@ struct rx_ring {
 	bool			lro_enabled;
 	bool			hdr_split;
 	struct task		rx_task;	/* cleanup tasklet */
+	struct taskqueue	*tq;
 	struct mtx		rx_mtx;
 	char			mtx_name[16];
 	u32			last_cleaned;
 	u32			next_to_check;
-	struct igb_rx_buffer	*rx_buffers;
+	struct igb_rx_buf	*rx_buffers;
 	bus_dma_tag_t		rxtag;		/* dma tag for tx */
-	bus_dmamap_t		rx_spare_map;
+	bus_dmamap_t		spare_map;
 	/*
 	 * First/last mbuf pointers, for
 	 * collecting multisegment RX packets.
@@ -364,7 +363,6 @@ struct adapter {
 	int		min_frame_size;
 	struct mtx	core_mtx;
 	int		igb_insert_vlan_header;
-	struct task     link_task;
 	struct task     rxtx_task;
 	struct taskqueue *tq;           /* private task queue */
         u16		num_queues;
@@ -445,7 +443,7 @@ struct igb_tx_buffer {
         bus_dmamap_t    map;         /* bus_dma map for packet */
 };
 
-struct igb_rx_buffer {
+struct igb_rx_buf {
         struct mbuf    *m_head;
         struct mbuf    *m_pack;
         bus_dmamap_t    map;         /* bus_dma map for packet */
@@ -454,12 +452,12 @@ struct igb_rx_buffer {
 #define	IGB_CORE_LOCK_INIT(_sc, _name) \
 	mtx_init(&(_sc)->core_mtx, _name, "IGB Core Lock", MTX_DEF)
 #define	IGB_CORE_LOCK_DESTROY(_sc)	mtx_destroy(&(_sc)->core_mtx)
-#define	IGB_TX_LOCK_DESTROY(_sc)		mtx_destroy(&(_sc)->tx_mtx)
-#define	IGB_RX_LOCK_DESTROY(_sc)		mtx_destroy(&(_sc)->rx_mtx)
+#define	IGB_TX_LOCK_DESTROY(_sc)	mtx_destroy(&(_sc)->tx_mtx)
+#define	IGB_RX_LOCK_DESTROY(_sc)	mtx_destroy(&(_sc)->rx_mtx)
 #define	IGB_CORE_LOCK(_sc)		mtx_lock(&(_sc)->core_mtx)
-#define	IGB_TX_LOCK(_sc)			mtx_lock(&(_sc)->tx_mtx)
-#define	IGB_TX_TRYLOCK(_sc)			mtx_trylock(&(_sc)->tx_mtx)
-#define	IGB_RX_LOCK(_sc)			mtx_lock(&(_sc)->rx_mtx)
+#define	IGB_TX_LOCK(_sc)		mtx_lock(&(_sc)->tx_mtx)
+#define	IGB_TX_TRYLOCK(_sc)		mtx_trylock(&(_sc)->tx_mtx)
+#define	IGB_RX_LOCK(_sc)		mtx_lock(&(_sc)->rx_mtx)
 #define	IGB_CORE_UNLOCK(_sc)		mtx_unlock(&(_sc)->core_mtx)
 #define	IGB_TX_UNLOCK(_sc)		mtx_unlock(&(_sc)->tx_mtx)
 #define	IGB_RX_UNLOCK(_sc)		mtx_unlock(&(_sc)->rx_mtx)
diff --git a/sys/dev/ed/if_ed.c b/sys/dev/ed/if_ed.c
index 12483a8608b..e065a670d5c 100644
--- a/sys/dev/ed/if_ed.c
+++ b/sys/dev/ed/if_ed.c
@@ -77,7 +77,8 @@ static int	ed_ioctl(struct ifnet *, u_long, caddr_t);
 static void	ed_start(struct ifnet *);
 static void	ed_start_locked(struct ifnet *);
 static void	ed_reset(struct ifnet *);
-static void	ed_watchdog(struct ifnet *);
+static void	ed_tick(void *);
+static void	ed_watchdog(struct ed_softc *);
 
 static void	ed_ds_getmcaf(struct ed_softc *, uint32_t *);
 
@@ -281,7 +282,6 @@ ed_attach(device_t dev)
 	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
 	ifp->if_start = ed_start;
 	ifp->if_ioctl = ed_ioctl;
-	ifp->if_watchdog = ed_watchdog;
 	ifp->if_init = ed_init;
 	IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN);
 	ifp->if_snd.ifq_drv_maxlen = IFQ_MAXLEN;
@@ -381,8 +381,8 @@ ed_detach(device_t dev)
 			ed_stop(sc);
 		ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 		ED_UNLOCK(sc);
-		callout_drain(&sc->tick_ch);
 		ether_ifdetach(ifp);
+		callout_drain(&sc->tick_ch);
 	}
 	if (sc->irq_res != NULL && sc->irq_handle)
 		bus_teardown_intr(dev, sc->irq_res, sc->irq_handle);
@@ -447,26 +447,42 @@ void
 ed_stop(struct ed_softc *sc)
 {
 	ED_ASSERT_LOCKED(sc);
-	if (sc->sc_tick)
-		callout_stop(&sc->tick_ch);
+	callout_stop(&sc->tick_ch);
 	ed_stop_hw(sc);
 }
 
+/*
+ * Periodic timer used to drive the watchdog and attachment-specific
+ * tick handler.
+ */
+static void
+ed_tick(void *arg)
+{
+	struct ed_softc *sc;
+
+	sc = arg;
+	ED_ASSERT_LOCKED(sc);
+	if (sc->sc_tick)
+		sc->sc_tick(sc);
+	if (sc->tx_timer != 0 && --sc->tx_timer == 0)
+		ed_watchdog(sc);
+	callout_reset(&sc->tick_ch, hz, ed_tick, sc);
+}
+
 /*
  * Device timeout/watchdog routine. Entered if the device neglects to
  *	generate an interrupt after a transmit has been started on it.
  */
 static void
-ed_watchdog(struct ifnet *ifp)
+ed_watchdog(struct ed_softc *sc)
 {
-	struct ed_softc *sc = ifp->if_softc;
+	struct ifnet *ifp;
 
+	ifp = sc->ifp;
 	log(LOG_ERR, "%s: device timeout\n", ifp->if_xname);
 	ifp->if_oerrors++;
 
-	ED_LOCK(sc);
 	ed_reset(ifp);
-	ED_UNLOCK(sc);
 }
 
 /*
@@ -499,7 +515,7 @@ ed_init_locked(struct ed_softc *sc)
 
 	/* reset transmitter flags */
 	sc->xmit_busy = 0;
-	ifp->if_timer = 0;
+	sc->tx_timer = 0;
 
 	sc->txb_inuse = 0;
 	sc->txb_new = 0;
@@ -612,8 +628,7 @@ ed_init_locked(struct ed_softc *sc)
 	 */
 	ed_start_locked(ifp);
 
-	if (sc->sc_tick)
-		callout_reset(&sc->tick_ch, hz, sc->sc_tick, sc);
+	callout_reset(&sc->tick_ch, hz, ed_tick, sc);
 }
 
 /*
@@ -622,7 +637,6 @@ ed_init_locked(struct ed_softc *sc)
 static __inline void
 ed_xmit(struct ed_softc *sc)
 {
-	struct ifnet *ifp = sc->ifp;
 	unsigned short len;
 
 	len = sc->txb_len[sc->txb_next_tx];
@@ -660,7 +674,7 @@ ed_xmit(struct ed_softc *sc)
 	/*
 	 * Set a timer just in case we never hear from the board again
 	 */
-	ifp->if_timer = 2;
+	sc->tx_timer = 2;
 }
 
 /*
@@ -1023,7 +1037,7 @@ edintr(void *arg)
 			/*
 			 * clear watchdog timer
 			 */
-			ifp->if_timer = 0;
+			sc->tx_timer = 0;
 
 			/*
 			 * Add in total number of collisions on last
diff --git a/sys/dev/ed/if_ed_pccard.c b/sys/dev/ed/if_ed_pccard.c
index 8ada18ea1eb..b9c1cad334c 100644
--- a/sys/dev/ed/if_ed_pccard.c
+++ b/sys/dev/ed/if_ed_pccard.c
@@ -250,7 +250,7 @@ static const struct ed_product {
  */
 static int	ed_pccard_probe(device_t);
 static int	ed_pccard_attach(device_t);
-static void	ed_pccard_tick(void *);
+static void	ed_pccard_tick(struct ed_softc *);
 
 static int	ed_pccard_dl100xx(device_t dev, const struct ed_product *);
 static void	ed_pccard_dl100xx_mii_reset(struct ed_softc *sc);
@@ -1196,9 +1196,8 @@ ed_child_detached(device_t dev, device_t child)
 }
 
 static void
-ed_pccard_tick(void *arg)
+ed_pccard_tick(struct ed_softc *sc)
 {
-	struct ed_softc *sc = arg;
 	struct mii_data *mii;
 	int media = 0;
 
@@ -1223,7 +1222,6 @@ ed_pccard_tick(void *arg)
 		}
 		
 	}
-	callout_reset(&sc->tick_ch, hz, ed_pccard_tick, sc);
 }
 
 static device_method_t ed_pccard_methods[] = {
diff --git a/sys/dev/ed/if_edvar.h b/sys/dev/ed/if_edvar.h
index 56e241ad797..e344cd5f8f7 100644
--- a/sys/dev/ed/if_edvar.h
+++ b/sys/dev/ed/if_edvar.h
@@ -65,11 +65,12 @@ struct ed_softc {
 	void	(*mii_writebits)(struct ed_softc *, u_int, int);
 	u_int	(*mii_readbits)(struct ed_softc *, int);
 	struct callout	      tick_ch;
-        void	(*sc_tick)(void *);
+        void	(*sc_tick)(struct ed_softc *);
 	void (*readmem)(struct ed_softc *sc, bus_size_t src, uint8_t *dst,
 	    uint16_t amount);
 	u_short	(*sc_write_mbufs)(struct ed_softc *, struct mbuf *, bus_size_t);
 
+	int	tx_timer;
 	int	nic_offset;	/* NIC (DS8390) I/O bus address offset */
 	int	asic_offset;	/* ASIC I/O bus address offset */
 
diff --git a/sys/dev/ep/if_ep.c b/sys/dev/ep/if_ep.c
index c5b516c783e..a1bbb01cefc 100644
--- a/sys/dev/ep/if_ep.c
+++ b/sys/dev/ep/if_ep.c
@@ -62,6 +62,7 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -91,10 +92,12 @@ static int ep_media2if_media[] =
 static void epinit(void *);
 static int epioctl(struct ifnet *, u_long, caddr_t);
 static void epstart(struct ifnet *);
-static void epwatchdog(struct ifnet *);
 
+static void ep_intr_locked(struct ep_softc *);
 static void epstart_locked(struct ifnet *);
 static void epinit_locked(struct ep_softc *);
+static void eptick(void *);
+static void epwatchdog(struct ep_softc *);
 
 /* if_media functions */
 static int ep_ifmedia_upd(struct ifnet *);
@@ -302,12 +305,12 @@ ep_attach(struct ep_softc *sc)
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_start = epstart;
 	ifp->if_ioctl = epioctl;
-	ifp->if_watchdog = epwatchdog;
 	ifp->if_init = epinit;
 	IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN);
 	ifp->if_snd.ifq_drv_maxlen = IFQ_MAXLEN;
 	IFQ_SET_READY(&ifp->if_snd);
 
+	callout_init_mtx(&sc->watchdog_timer, &sc->sc_mtx, 0);
 	if (!sc->epb.mii_trans) {
 		ifmedia_init(&sc->ifmedia, 0, ep_ifmedia_upd, ep_ifmedia_sts);
 
@@ -361,6 +364,7 @@ ep_detach(device_t dev)
 	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 	EP_UNLOCK(sc);
 	ether_ifdetach(ifp);
+	callout_drain(&sc->watchdog_timer);
 	ep_free(dev);
 
 	if_free(ifp);
@@ -457,6 +461,7 @@ epinit_locked(struct ep_softc *sc)
 
 	GO_WINDOW(sc, 1);
 	epstart_locked(ifp);
+	callout_reset(&sc->watchdog_timer, hz, eptick, sc);
 }
 
 static void
@@ -556,7 +561,7 @@ startagain:
 
 	BPF_MTAP(ifp, m0);
 
-	ifp->if_timer = 2;
+	sc->tx_timer = 2;
 	ifp->if_opackets++;
 	m_freem(m0);
 
@@ -583,20 +588,26 @@ void
 ep_intr(void *arg)
 {
 	struct ep_softc *sc;
-	int status;
-	struct ifnet *ifp;
 
 	sc = (struct ep_softc *) arg;
 	EP_LOCK(sc);
+	ep_intr_locked(sc);
+	EP_UNLOCK(sc);
+}
+
+static void
+ep_intr_locked(struct ep_softc *sc)
+{
+	int status;
+	struct ifnet *ifp;
+
 	/* XXX 4.x splbio'd here to reduce interruptability */
 
 	/*
 	 * quick fix: Try to detect an interrupt when the card goes away.
 	 */
-	if (sc->gone || CSR_READ_2(sc, EP_STATUS) == 0xffff) {
-		EP_UNLOCK(sc);
+	if (sc->gone || CSR_READ_2(sc, EP_STATUS) == 0xffff)
 		return;
-	}
 	ifp = sc->ifp;
 
 	CSR_WRITE_2(sc, EP_COMMAND, SET_INTR_MASK);	/* disable all Ints */
@@ -612,14 +623,14 @@ rescan:
 			epread(sc);
 		if (status & S_TX_AVAIL) {
 			/* we need ACK */
-			ifp->if_timer = 0;
+			sc->tx_timer = 0;
 			ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 			GO_WINDOW(sc, 1);
 			CSR_READ_2(sc, EP_W1_FREE_TX);
 			epstart_locked(ifp);
 		}
 		if (status & S_CARD_FAILURE) {
-			ifp->if_timer = 0;
+			sc->tx_timer = 0;
 #ifdef EP_LOCAL_STATS
 			device_printf(sc->dev, "\n\tStatus: %x\n", status);
 			GO_WINDOW(sc, 4);
@@ -642,11 +653,10 @@ rescan:
 
 #endif
 			epinit_locked(sc);
-			EP_UNLOCK(sc);
 			return;
 		}
 		if (status & S_TX_COMPLETE) {
-			ifp->if_timer = 0;
+			sc->tx_timer = 0;
 			/*
 			 * We need ACK. We do it at the end.
 			 *
@@ -700,7 +710,6 @@ rescan:
 
 	/* re-enable Ints */
 	CSR_WRITE_2(sc, EP_COMMAND, SET_INTR_MASK | S_5_INTS);
-	EP_UNLOCK(sc);
 }
 
 static void
@@ -933,7 +942,6 @@ epioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 		EP_LOCK(sc);
 		if (((ifp->if_flags & IFF_UP) == 0) &&
 		    (ifp->if_drv_flags & IFF_DRV_RUNNING)) {
-			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 			epstop(sc);
 		} else
 			/* reinitialize card on any parameter change */
@@ -966,15 +974,27 @@ epioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 }
 
 static void
-epwatchdog(struct ifnet *ifp)
+eptick(void *arg)
 {
-	struct ep_softc *sc = ifp->if_softc;
+	struct ep_softc *sc;
 
+	sc = arg;
+	if (sc->tx_timer != 0 && --sc->tx_timer == 0)
+		epwatchdog(sc);
+	callout_reset(&sc->watchdog_timer, hz, eptick, sc);
+}
+
+static void
+epwatchdog(struct ep_softc *sc)
+{
+	struct ifnet *ifp;
+
+	ifp = sc->ifp;
 	if (sc->gone)
 		return;
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-	epstart(ifp);
-	ep_intr(ifp->if_softc);
+	epstart_locked(ifp);
+	ep_intr_locked(sc);
 }
 
 static void
@@ -997,4 +1017,7 @@ epstop(struct ep_softc *sc)
 	CSR_WRITE_2(sc, EP_COMMAND, SET_RD_0_MASK);
 	CSR_WRITE_2(sc, EP_COMMAND, SET_INTR_MASK);
 	CSR_WRITE_2(sc, EP_COMMAND, SET_RX_FILTER);
+
+	sc->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
+	callout_stop(&sc->watchdog_timer);
 }
diff --git a/sys/dev/ep/if_epvar.h b/sys/dev/ep/if_epvar.h
index 922a264620b..c7b9cb39d5b 100644
--- a/sys/dev/ep/if_epvar.h
+++ b/sys/dev/ep/if_epvar.h
@@ -45,6 +45,9 @@ struct ep_softc {
 	bus_space_tag_t bst;
 	void *ep_intrhand;
 
+	struct callout watchdog_timer;
+	int tx_timer;
+
 	u_short ep_connectors;	/* Connectors on this card. */
 	u_char ep_connector;	/* Configured connector. */
 
diff --git a/sys/dev/et/if_et.c b/sys/dev/et/if_et.c
index 1e28f0be112..77ee4ab8d49 100644
--- a/sys/dev/et/if_et.c
+++ b/sys/dev/et/if_et.c
@@ -32,9 +32,11 @@
  * SUCH DAMAGE.
  *
  * $DragonFly: src/sys/dev/netif/et/if_et.c,v 1.10 2008/05/18 07:47:14 sephe Exp $
- * $FreeBSD$
  */
 
+#include 
+__FBSDID("$FreeBSD$");
+
 #include 
 #include 
 #include 
@@ -76,6 +78,12 @@ MODULE_DEPEND(et, pci, 1, 1, 1);
 MODULE_DEPEND(et, ether, 1, 1, 1);
 MODULE_DEPEND(et, miibus, 1, 1, 1);
 
+/* Tunables. */
+static int msi_disable = 0;
+TUNABLE_INT("hw.et.msi_disable", &msi_disable);
+
+#define	ET_CSUM_FEATURES	(CSUM_IP | CSUM_TCP | CSUM_UDP)
+
 static int	et_probe(device_t);
 static int	et_attach(device_t);
 static int	et_detach(device_t);
@@ -138,7 +146,7 @@ static int	et_stop_rxdma(struct et_softc *);
 static int	et_stop_txdma(struct et_softc *);
 static int	et_enable_txrx(struct et_softc *, int);
 static void	et_reset(struct et_softc *);
-static int	et_bus_config(device_t);
+static int	et_bus_config(struct et_softc *);
 static void	et_get_eaddr(device_t, uint8_t[]);
 static void	et_setmulti(struct et_softc *);
 static void	et_tick(void *);
@@ -218,10 +226,10 @@ et_probe(device_t dev)
 	for (d = et_devices; d->desc != NULL; ++d) {
 		if (vid == d->vid && did == d->did) {
 			device_set_desc(dev, d->desc);
-			return 0;
+			return (0);
 		}
 	}
-	return ENXIO;
+	return (ENXIO);
 }
 
 static int
@@ -230,7 +238,7 @@ et_attach(device_t dev)
 	struct et_softc *sc;
 	struct ifnet *ifp;
 	uint8_t eaddr[ETHER_ADDR_LEN];
-	int error;
+	int cap, error, msic;
 
 	sc = device_get_softc(dev);
 	sc->dev = dev;
@@ -263,25 +271,48 @@ et_attach(device_t dev)
 						&sc->sc_mem_rid, RF_ACTIVE);
 	if (sc->sc_mem_res == NULL) {
 		device_printf(dev, "can't allocate IO memory\n");
-		return ENXIO;
+		return (ENXIO);
+	}
+
+	msic = 0;
+	if (pci_find_extcap(dev, PCIY_EXPRESS, &cap) == 0) {
+		sc->sc_expcap = cap;
+		sc->sc_flags |= ET_FLAG_PCIE;
+		msic = pci_msi_count(dev);
+		if (bootverbose)
+			device_printf(dev, "MSI count: %d\n", msic);
+	}
+	if (msic > 0 && msi_disable == 0) {
+		msic = 1;
+		if (pci_alloc_msi(dev, &msic) == 0) {
+			if (msic == 1) {
+				device_printf(dev, "Using %d MSI message\n",
+				    msic);
+				sc->sc_flags |= ET_FLAG_MSI;
+			} else
+				pci_release_msi(dev);
+		}
 	}
-	sc->sc_mem_bt = rman_get_bustag(sc->sc_mem_res);
-	sc->sc_mem_bh = rman_get_bushandle(sc->sc_mem_res);
 
 	/*
 	 * Allocate IRQ
 	 */
-	sc->sc_irq_rid = 0;
-	sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ,
-						&sc->sc_irq_rid,
-						RF_SHAREABLE | RF_ACTIVE);
+	if ((sc->sc_flags & ET_FLAG_MSI) == 0) {
+		sc->sc_irq_rid = 0;
+		sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ,
+		    &sc->sc_irq_rid, RF_SHAREABLE | RF_ACTIVE);
+	} else {
+		sc->sc_irq_rid = 1;
+		sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ,
+		    &sc->sc_irq_rid, RF_ACTIVE);
+	}
 	if (sc->sc_irq_res == NULL) {
 		device_printf(dev, "can't allocate irq\n");
 		error = ENXIO;
 		goto fail;
 	}
 
-	error = et_bus_config(dev);
+	error = et_bus_config(sc);
 	if (error)
 		goto fail;
 
@@ -305,7 +336,7 @@ et_attach(device_t dev)
 	ifp->if_ioctl = et_ioctl;
 	ifp->if_start = et_start;
 	ifp->if_mtu = ETHERMTU;
-	ifp->if_capabilities = IFCAP_VLAN_MTU;
+	ifp->if_capabilities = IFCAP_TXCSUM | IFCAP_VLAN_MTU;
 	ifp->if_capenable = ifp->if_capabilities;
 	IFQ_SET_MAXLEN(&ifp->if_snd, ET_TX_NDESC);
 	IFQ_SET_READY(&ifp->if_snd);
@@ -322,14 +353,8 @@ et_attach(device_t dev)
 	ether_ifattach(ifp, eaddr);
 	callout_init_mtx(&sc->sc_tick, &sc->sc_mtx, 0);
 
-#if __FreeBSD_version > 700030
 	error = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_NET | INTR_MPSAFE,
-			       NULL, et_intr, sc, &sc->sc_irq_handle);
-#else
-	error = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_NET | INTR_MPSAFE,
-			       et_intr, sc, &sc->sc_irq_handle);
-#endif
-
+	    NULL, et_intr, sc, &sc->sc_irq_handle);
 	if (error) {
 		ether_ifdetach(ifp);
 		device_printf(dev, "can't setup intr\n");
@@ -338,10 +363,10 @@ et_attach(device_t dev)
 
 	et_add_sysctls(sc);
 
-	return 0;
+	return (0);
 fail:
 	et_detach(dev);
-	return error;
+	return (error);
 }
 
 static int
@@ -368,6 +393,8 @@ et_detach(device_t dev)
 		bus_release_resource(dev, SYS_RES_IRQ, sc->sc_irq_rid,
 				     sc->sc_irq_res);
 	}
+	if ((sc->sc_flags & ET_FLAG_MSI) != 0)
+		pci_release_msi(dev);
 
 	if (sc->sc_mem_res != NULL) {
 		bus_release_resource(dev, SYS_RES_MEMORY, sc->sc_mem_rid,
@@ -378,9 +405,10 @@ et_detach(device_t dev)
 		if_free(sc->ifp);
 
 	et_dma_free(dev);
-	/* XXX Destroy lock here */
 
-	return 0;
+	mtx_destroy(&sc->sc_mtx);
+
+	return (0);
 }
 
 static int
@@ -391,7 +419,7 @@ et_shutdown(device_t dev)
 	ET_LOCK(sc);
 	et_stop(sc);
 	ET_UNLOCK(sc);
-	return 0;
+	return (0);
 }
 
 static int
@@ -404,8 +432,8 @@ et_miibus_readreg(device_t dev, int phy, int reg)
 	/* Stop any pending operations */
 	CSR_WRITE_4(sc, ET_MII_CMD, 0);
 
-	val = __SHIFTIN(phy, ET_MII_ADDR_PHY) |
-	      __SHIFTIN(reg, ET_MII_ADDR_REG);
+	val = (phy << ET_MII_ADDR_PHY_SHIFT) & ET_MII_ADDR_PHY_MASK;
+	val |= (reg << ET_MII_ADDR_REG_SHIFT) & ET_MII_ADDR_REG_MASK;
 	CSR_WRITE_4(sc, ET_MII_ADDR, val);
 
 	/* Start reading */
@@ -429,12 +457,12 @@ et_miibus_readreg(device_t dev, int phy, int reg)
 #undef NRETRY
 
 	val = CSR_READ_4(sc, ET_MII_STAT);
-	ret = __SHIFTOUT(val, ET_MII_STAT_VALUE);
+	ret = val & ET_MII_STAT_VALUE_MASK;
 
 back:
 	/* Make sure that the current operation is stopped */
 	CSR_WRITE_4(sc, ET_MII_CMD, 0);
-	return ret;
+	return (ret);
 }
 
 static int
@@ -447,12 +475,13 @@ et_miibus_writereg(device_t dev, int phy, int reg, int val0)
 	/* Stop any pending operations */
 	CSR_WRITE_4(sc, ET_MII_CMD, 0);
 
-	val = __SHIFTIN(phy, ET_MII_ADDR_PHY) |
-	      __SHIFTIN(reg, ET_MII_ADDR_REG);
+	val = (phy << ET_MII_ADDR_PHY_SHIFT) & ET_MII_ADDR_PHY_MASK;
+	val |= (reg << ET_MII_ADDR_REG_SHIFT) & ET_MII_ADDR_REG_MASK;
 	CSR_WRITE_4(sc, ET_MII_ADDR, val);
 
 	/* Start writing */
-	CSR_WRITE_4(sc, ET_MII_CTRL, __SHIFTIN(val0, ET_MII_CTRL_VALUE));
+	CSR_WRITE_4(sc, ET_MII_CTRL,
+	    (val0 << ET_MII_CTRL_VALUE_SHIFT) & ET_MII_CTRL_VALUE_MASK);
 
 #define NRETRY 100
 
@@ -472,7 +501,7 @@ et_miibus_writereg(device_t dev, int phy, int reg, int val0)
 
 	/* Make sure that the current operation is stopped */
 	CSR_WRITE_4(sc, ET_MII_CMD, 0);
-	return 0;
+	return (0);
 }
 
 static void
@@ -495,7 +524,7 @@ et_ifmedia_upd_locked(struct ifnet *ifp)
 	}
 	mii_mediachg(mii);
 
-	return 0;
+	return (0);
 }
 
 static int
@@ -508,7 +537,7 @@ et_ifmedia_upd(struct ifnet *ifp)
 	res = et_ifmedia_upd_locked(ifp);
 	ET_UNLOCK(sc);
 
-	return res;
+	return (res);
 }
 
 static void
@@ -550,7 +579,7 @@ et_stop(struct et_softc *sc)
 }
 
 static int
-et_bus_config(device_t dev)
+et_bus_config(struct et_softc *sc)
 {
 	uint32_t val, max_plsz;
 	uint16_t ack_latency, replay_timer;
@@ -559,21 +588,25 @@ et_bus_config(device_t dev)
 	 * Test whether EEPROM is valid
 	 * NOTE: Read twice to get the correct value
 	 */
-	pci_read_config(dev, ET_PCIR_EEPROM_STATUS, 1);
-	val = pci_read_config(dev, ET_PCIR_EEPROM_STATUS, 1);
+	pci_read_config(sc->dev, ET_PCIR_EEPROM_STATUS, 1);
+	val = pci_read_config(sc->dev, ET_PCIR_EEPROM_STATUS, 1);
 	if (val & ET_PCIM_EEPROM_STATUS_ERROR) {
-		device_printf(dev, "EEPROM status error 0x%02x\n", val);
-		return ENXIO;
+		device_printf(sc->dev, "EEPROM status error 0x%02x\n", val);
+		return (ENXIO);
 	}
 
 	/* TODO: LED */
 
+	if ((sc->sc_flags & ET_FLAG_PCIE) == 0)
+		return (0);
+
 	/*
 	 * Configure ACK latency and replay timer according to
 	 * max playload size
 	 */
-	val = pci_read_config(dev, ET_PCIR_DEVICE_CAPS, 4);
-	max_plsz = val & ET_PCIM_DEVICE_CAPS_MAX_PLSZ;
+	val = pci_read_config(sc->dev,
+	    sc->sc_expcap + PCIR_EXPRESS_DEVICE_CAP, 4);
+	max_plsz = val & PCIM_EXP_CAP_MAX_PAYLOAD;
 
 	switch (max_plsz) {
 	case ET_PCIV_DEVICE_CAPS_PLSZ_128:
@@ -587,32 +620,41 @@ et_bus_config(device_t dev)
 		break;
 
 	default:
-		ack_latency = pci_read_config(dev, ET_PCIR_ACK_LATENCY, 2);
-		replay_timer = pci_read_config(dev, ET_PCIR_REPLAY_TIMER, 2);
-		device_printf(dev, "ack latency %u, replay timer %u\n",
+		ack_latency = pci_read_config(sc->dev, ET_PCIR_ACK_LATENCY, 2);
+		replay_timer = pci_read_config(sc->dev,
+		    ET_PCIR_REPLAY_TIMER, 2);
+		device_printf(sc->dev, "ack latency %u, replay timer %u\n",
 			      ack_latency, replay_timer);
 		break;
 	}
 	if (ack_latency != 0) {
-		pci_write_config(dev, ET_PCIR_ACK_LATENCY, ack_latency, 2);
-		pci_write_config(dev, ET_PCIR_REPLAY_TIMER, replay_timer, 2);
+		pci_write_config(sc->dev, ET_PCIR_ACK_LATENCY, ack_latency, 2);
+		pci_write_config(sc->dev, ET_PCIR_REPLAY_TIMER, replay_timer,
+		    2);
 	}
 
 	/*
 	 * Set L0s and L1 latency timer to 2us
 	 */
-	val = ET_PCIV_L0S_LATENCY(2) | ET_PCIV_L1_LATENCY(2);
-	pci_write_config(dev, ET_PCIR_L0S_L1_LATENCY, val, 1);
+	val = pci_read_config(sc->dev, ET_PCIR_L0S_L1_LATENCY, 4);
+	val &= ~(PCIM_LINK_CAP_L0S_EXIT | PCIM_LINK_CAP_L1_EXIT);
+	/* L0s exit latency : 2us */
+	val |= 0x00005000;
+	/* L1 exit latency : 2us */
+	val |= 0x00028000;
+	pci_write_config(sc->dev, ET_PCIR_L0S_L1_LATENCY, val, 4);
 
 	/*
 	 * Set max read request size to 2048 bytes
 	 */
-	val = pci_read_config(dev, ET_PCIR_DEVICE_CTRL, 2);
-	val &= ~ET_PCIM_DEVICE_CTRL_MAX_RRSZ;
+	val = pci_read_config(sc->dev,
+	    sc->sc_expcap + PCIR_EXPRESS_DEVICE_CTL, 2);
+	val &= ~PCIM_EXP_CTL_MAX_READ_REQUEST;
 	val |= ET_PCIV_DEVICE_CTRL_RRSZ_2K;
-	pci_write_config(dev, ET_PCIR_DEVICE_CTRL, val, 2);
+	pci_write_config(sc->dev,
+	    sc->sc_expcap + PCIR_EXPRESS_DEVICE_CTL, val, 2);
 
-	return 0;
+	return (0);
 }
 
 static void
@@ -684,7 +726,7 @@ et_dma_alloc(device_t dev)
 				   0, NULL, NULL, &sc->sc_dtag);
 	if (error) {
 		device_printf(dev, "can't create DMA tag\n");
-		return error;
+		return (error);
 	}
 
 	/*
@@ -695,7 +737,7 @@ et_dma_alloc(device_t dev)
 				  &tx_ring->tr_paddr, &tx_ring->tr_dmap);
 	if (error) {
 		device_printf(dev, "can't create TX ring DMA stuffs\n");
-		return error;
+		return (error);
 	}
 
 	/*
@@ -706,7 +748,7 @@ et_dma_alloc(device_t dev)
 				  &txsd->txsd_paddr, &txsd->txsd_dmap);
 	if (error) {
 		device_printf(dev, "can't create TX status DMA stuffs\n");
-		return error;
+		return (error);
 	}
 
 	/*
@@ -726,7 +768,7 @@ et_dma_alloc(device_t dev)
 		if (error) {
 			device_printf(dev, "can't create DMA stuffs for "
 				      "the %d RX ring\n", i);
-			return error;
+			return (error);
 		}
 		rx_ring->rr_posreg = rx_ring_posreg[i];
 	}
@@ -740,7 +782,7 @@ et_dma_alloc(device_t dev)
 				  &rxst_ring->rsr_paddr, &rxst_ring->rsr_dmap);
 	if (error) {
 		device_printf(dev, "can't create RX stat ring DMA stuffs\n");
-		return error;
+		return (error);
 	}
 
 	/*
@@ -752,7 +794,7 @@ et_dma_alloc(device_t dev)
 				  &rxsd->rxsd_paddr, &rxsd->rxsd_dmap);
 	if (error) {
 		device_printf(dev, "can't create RX status DMA stuffs\n");
-		return error;
+		return (error);
 	}
 
 	/*
@@ -760,9 +802,9 @@ et_dma_alloc(device_t dev)
 	 */
 	error = et_dma_mbuf_create(dev);
 	if (error)
-		return error;
+		return (error);
 
-	return 0;
+	return (0);
 }
 
 static void
@@ -841,7 +883,7 @@ et_dma_mbuf_create(device_t dev)
 				   BUS_DMA_ALLOCNOW, NULL, NULL, &sc->sc_mbuf_dtag);
 	if (error) {
 		device_printf(dev, "can't create mbuf DMA tag\n");
-		return error;
+		return (error);
 	}
 
 	/*
@@ -852,7 +894,7 @@ et_dma_mbuf_create(device_t dev)
 		device_printf(dev, "can't create spare mbuf DMA map\n");
 		bus_dma_tag_destroy(sc->sc_mbuf_dtag);
 		sc->sc_mbuf_dtag = NULL;
-		return error;
+		return (error);
 	}
 
 	/*
@@ -871,7 +913,7 @@ et_dma_mbuf_create(device_t dev)
 					      "for %d RX ring\n", j, i);
 				rx_done[i] = j;
 				et_dma_mbuf_destroy(dev, 0, rx_done);
-				return error;
+				return (error);
 			}
 		}
 		rx_done[i] = ET_RX_NDESC;
@@ -890,11 +932,11 @@ et_dma_mbuf_create(device_t dev)
 			device_printf(dev, "can't create %d TX mbuf "
 				      "DMA map\n", i);
 			et_dma_mbuf_destroy(dev, i, rx_done);
-			return error;
+			return (error);
 		}
 	}
 
-	return 0;
+	return (0);
 }
 
 static void
@@ -959,7 +1001,7 @@ et_dma_mem_create(device_t dev, bus_size_t size, bus_dma_tag_t *dtag,
 				   0, NULL, NULL, dtag);
 	if (error) {
 		device_printf(dev, "can't create DMA tag\n");
-		return error;
+		return (error);
 	}
 
 	error = bus_dmamem_alloc(*dtag, addr, BUS_DMA_WAITOK | BUS_DMA_ZERO,
@@ -968,7 +1010,7 @@ et_dma_mem_create(device_t dev, bus_size_t size, bus_dma_tag_t *dtag,
 		device_printf(dev, "can't allocate DMA mem\n");
 		bus_dma_tag_destroy(*dtag);
 		*dtag = NULL;
-		return error;
+		return (error);
 	}
 
 	error = bus_dmamap_load(*dtag, *dmap, *addr, size,
@@ -978,9 +1020,9 @@ et_dma_mem_create(device_t dev, bus_size_t size, bus_dma_tag_t *dtag,
 		bus_dmamem_free(*dtag, *addr, *dmap);
 		bus_dma_tag_destroy(*dtag);
 		*dtag = NULL;
-		return error;
+		return (error);
 	}
-	return 0;
+	return (0);
 }
 
 static void
@@ -1021,10 +1063,10 @@ et_chip_attach(struct et_softc *sc)
 	/*
 	 * Setup half duplex mode
 	 */
-	val = __SHIFTIN(10, ET_MAC_HDX_ALT_BEB_TRUNC) |
-	      __SHIFTIN(15, ET_MAC_HDX_REXMIT_MAX) |
-	      __SHIFTIN(55, ET_MAC_HDX_COLLWIN) |
-	      ET_MAC_HDX_EXC_DEFER;
+	val = (10 << ET_MAC_HDX_ALT_BEB_TRUNC_SHIFT) |
+	    (15 << ET_MAC_HDX_REXMIT_MAX_SHIFT) |
+	    (55 << ET_MAC_HDX_COLLWIN_SHIFT) |
+	    ET_MAC_HDX_EXC_DEFER;
 	CSR_WRITE_4(sc, ET_MAC_HDX, val);
 
 	/* Clear MAC control */
@@ -1137,7 +1179,7 @@ et_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 	struct et_softc *sc = ifp->if_softc;
 	struct mii_data *mii = device_get_softc(sc->sc_miibus);
 	struct ifreq *ifr = (struct ifreq *)data;
-	int error = 0, max_framelen;
+	int error = 0, mask, max_framelen;
 
 /* XXX LOCKSUSED */
 	switch (cmd) {
@@ -1194,11 +1236,25 @@ et_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 		}
 		break;
 
+	case SIOCSIFCAP:
+		ET_LOCK(sc);
+		mask = ifr->ifr_reqcap ^ ifp->if_capenable;
+		if ((mask & IFCAP_TXCSUM) != 0 &&
+		    (IFCAP_TXCSUM & ifp->if_capabilities) != 0) {
+			ifp->if_capenable ^= IFCAP_TXCSUM;
+			if ((IFCAP_TXCSUM & ifp->if_capenable) != 0)
+				ifp->if_hwassist |= ET_CSUM_FEATURES;
+			else
+				ifp->if_hwassist &= ~ET_CSUM_FEATURES;
+		}
+		ET_UNLOCK(sc);
+		break;
+
 	default:
 		error = ether_ioctl(ifp, cmd, data);
 		break;
 	}
-	return error;
+	return (error);
 }
 
 static void
@@ -1277,9 +1333,9 @@ et_stop_rxdma(struct et_softc *sc)
 	DELAY(5);
 	if ((CSR_READ_4(sc, ET_RXDMA_CTRL) & ET_RXDMA_CTRL_HALTED) == 0) {
 		if_printf(sc->ifp, "can't stop RX DMA engine\n");
-		return ETIMEDOUT;
+		return (ETIMEDOUT);
 	}
-	return 0;
+	return (0);
 }
 
 static int
@@ -1287,7 +1343,7 @@ et_stop_txdma(struct et_softc *sc)
 {
 	CSR_WRITE_4(sc, ET_TXDMA_CTRL,
 		    ET_TXDMA_CTRL_HALT | ET_TXDMA_CTRL_SINGLE_EPKT);
-	return 0;
+	return (0);
 }
 
 static void
@@ -1326,7 +1382,7 @@ et_free_rx_ring(struct et_softc *sc)
 			struct et_rxbuf *rb = &rbd->rbd_buf[i];
 
 			if (rb->rb_mbuf != NULL) {
-				bus_dmamap_unload(sc->sc_mbuf_dtag, 
+				bus_dmamap_unload(sc->sc_mbuf_dtag,
 			  	    rb->rb_dmap);
 				m_freem(rb->rb_mbuf);
 				rb->rb_mbuf = NULL;
@@ -1431,7 +1487,8 @@ et_chip_init(struct et_softc *sc)
 	CSR_WRITE_4(sc, ET_LOOPBACK, 0);
 
 	/* Clear MSI configure */
-	CSR_WRITE_4(sc, ET_MSI_CFG, 0);
+	if ((sc->sc_flags & ET_FLAG_MSI) == 0)
+		CSR_WRITE_4(sc, ET_MSI_CFG, 0);
 
 	/* Disable timer */
 	CSR_WRITE_4(sc, ET_TIMER, 0);
@@ -1451,14 +1508,14 @@ et_chip_init(struct et_softc *sc)
 	/* Initialize RX DMA engine */
 	error = et_init_rxdma(sc);
 	if (error)
-		return error;
+		return (error);
 
 	/* Initialize TX DMA engine */
 	error = et_init_txdma(sc);
 	if (error)
-		return error;
+		return (error);
 
-	return 0;
+	return (0);
 }
 
 static int
@@ -1479,7 +1536,7 @@ et_init_tx_ring(struct et_softc *sc)
 	bzero(txsd->txsd_status, sizeof(uint32_t));
 	bus_dmamap_sync(txsd->txsd_dtag, txsd->txsd_dmap,
 			BUS_DMASYNC_PREWRITE);
-	return 0;
+	return (0);
 }
 
 static int
@@ -1498,7 +1555,7 @@ et_init_rx_ring(struct et_softc *sc)
 			if (error) {
 				if_printf(sc->ifp, "%d ring %d buf, "
 					  "newbuf failed: %d\n", n, i, error);
-				return error;
+				return (error);
 			}
 		}
 	}
@@ -1511,7 +1568,7 @@ et_init_rx_ring(struct et_softc *sc)
 	bus_dmamap_sync(rxst_ring->rsr_dtag, rxst_ring->rsr_dmap,
 			BUS_DMASYNC_PREWRITE);
 
-	return 0;
+	return (0);
 }
 
 static void
@@ -1545,7 +1602,7 @@ et_init_rxdma(struct et_softc *sc)
 	error = et_stop_rxdma(sc);
 	if (error) {
 		if_printf(sc->ifp, "can't init RX DMA engine\n");
-		return error;
+		return (error);
 	}
 
 	/*
@@ -1601,7 +1658,7 @@ et_init_rxdma(struct et_softc *sc)
 	CSR_WRITE_4(sc, ET_RX_INTR_NPKTS, sc->sc_rx_intr_npkts);
 	CSR_WRITE_4(sc, ET_RX_INTR_DELAY, sc->sc_rx_intr_delay);
 
-	return 0;
+	return (0);
 }
 
 static int
@@ -1614,7 +1671,7 @@ et_init_txdma(struct et_softc *sc)
 	error = et_stop_txdma(sc);
 	if (error) {
 		if_printf(sc->ifp, "can't init TX DMA engine\n");
-		return error;
+		return (error);
 	}
 
 	/*
@@ -1636,7 +1693,7 @@ et_init_txdma(struct et_softc *sc)
 	tx_ring->tr_ready_index = 0;
 	tx_ring->tr_ready_wrap = 0;
 
-	return 0;
+	return (0);
 }
 
 static void
@@ -1655,19 +1712,19 @@ et_init_mac(struct et_softc *sc)
 	/*
 	 * Setup inter packet gap
 	 */
-	val = __SHIFTIN(56, ET_IPG_NONB2B_1) |
-	      __SHIFTIN(88, ET_IPG_NONB2B_2) |
-	      __SHIFTIN(80, ET_IPG_MINIFG) |
-	      __SHIFTIN(96, ET_IPG_B2B);
+	val = (56 << ET_IPG_NONB2B_1_SHIFT) |
+	    (88 << ET_IPG_NONB2B_2_SHIFT) |
+	    (80 << ET_IPG_MINIFG_SHIFT) |
+	    (96 << ET_IPG_B2B_SHIFT);
 	CSR_WRITE_4(sc, ET_IPG, val);
 
 	/*
 	 * Setup half duplex mode
 	 */
-	val = __SHIFTIN(10, ET_MAC_HDX_ALT_BEB_TRUNC) |
-	      __SHIFTIN(15, ET_MAC_HDX_REXMIT_MAX) |
-	      __SHIFTIN(55, ET_MAC_HDX_COLLWIN) |
-	      ET_MAC_HDX_EXC_DEFER;
+	val = (10 << ET_MAC_HDX_ALT_BEB_TRUNC_SHIFT) |
+	    (15 << ET_MAC_HDX_REXMIT_MAX_SHIFT) |
+	    (55 << ET_MAC_HDX_COLLWIN_SHIFT) |
+	    ET_MAC_HDX_EXC_DEFER;
 	CSR_WRITE_4(sc, ET_MAC_HDX, val);
 
 	/* Clear MAC control */
@@ -1738,7 +1795,7 @@ et_init_rxmac(struct et_softc *sc)
 		 * since this is the size of the PCI-Express TLP's
 		 * that the ET1310 uses.
 		 */
-		val = __SHIFTIN(ET_RXMAC_SEGSZ(256), ET_RXMAC_MC_SEGSZ_MAX) |
+		val = (ET_RXMAC_SEGSZ(256) & ET_RXMAC_MC_SEGSZ_MAX_MASK) |
 		      ET_RXMAC_MC_SEGSZ_ENABLE;
 	} else {
 		val = 0;
@@ -1761,7 +1818,9 @@ et_init_rxmac(struct et_softc *sc)
 	/*
 	 * Configure runt filtering (may not work on certain chip generation)
 	 */
-	val = __SHIFTIN(ETHER_MIN_LEN, ET_PKTFILT_MINLEN) | ET_PKTFILT_FRAG;
+	val = (ETHER_MIN_LEN << ET_PKTFILT_MINLEN_SHIFT) &
+	    ET_PKTFILT_MINLEN_MASK;
+	val |= ET_PKTFILT_FRAG;
 	CSR_WRITE_4(sc, ET_PKTFILT, val);
 
 	/* Enable RX MAC but leave WOL disabled */
@@ -1793,11 +1852,9 @@ et_start_rxdma(struct et_softc *sc)
 {
 	uint32_t val = 0;
 
-	val |= __SHIFTIN(sc->sc_rx_data[0].rbd_bufsize,
-			 ET_RXDMA_CTRL_RING0_SIZE) |
+	val |= (sc->sc_rx_data[0].rbd_bufsize & ET_RXDMA_CTRL_RING0_SIZE_MASK) |
 	       ET_RXDMA_CTRL_RING0_ENABLE;
-	val |= __SHIFTIN(sc->sc_rx_data[1].rbd_bufsize,
-			 ET_RXDMA_CTRL_RING1_SIZE) |
+	val |= (sc->sc_rx_data[1].rbd_bufsize & ET_RXDMA_CTRL_RING1_SIZE_MASK) |
 	       ET_RXDMA_CTRL_RING1_ENABLE;
 
 	CSR_WRITE_4(sc, ET_RXDMA_CTRL, val);
@@ -1806,16 +1863,16 @@ et_start_rxdma(struct et_softc *sc)
 
 	if (CSR_READ_4(sc, ET_RXDMA_CTRL) & ET_RXDMA_CTRL_HALTED) {
 		if_printf(sc->ifp, "can't start RX DMA engine\n");
-		return ETIMEDOUT;
+		return (ETIMEDOUT);
 	}
-	return 0;
+	return (0);
 }
 
 static int
 et_start_txdma(struct et_softc *sc)
 {
 	CSR_WRITE_4(sc, ET_TXDMA_CTRL, ET_TXDMA_CTRL_SINGLE_EPKT);
-	return 0;
+	return (0);
 }
 
 static int
@@ -1848,7 +1905,7 @@ et_enable_txrx(struct et_softc *sc, int media_upd)
 	}
 	if (i == NRETRY) {
 		if_printf(ifp, "can't enable RX/TX\n");
-		return 0;
+		return (0);
 	}
 	sc->sc_flags |= ET_FLAG_TXRX_ENABLED;
 
@@ -1859,13 +1916,13 @@ et_enable_txrx(struct et_softc *sc, int media_upd)
 	 */
 	error = et_start_rxdma(sc);
 	if (error)
-		return error;
+		return (error);
 
 	error = et_start_txdma(sc);
 	if (error)
-		return error;
+		return (error);
 
-	return 0;
+	return (0);
 }
 
 static void
@@ -1874,7 +1931,7 @@ et_rxeof(struct et_softc *sc)
 	struct ifnet *ifp;
 	struct et_rxstatus_data *rxsd;
 	struct et_rxstat_ring *rxst_ring;
-	uint32_t rxs_stat_ring;
+	uint32_t rxs_stat_ring, rxst_info2;
 	int rxst_wrap, rxst_index;
 
 	ET_LOCK_ASSERT(sc);
@@ -1890,9 +1947,10 @@ et_rxeof(struct et_softc *sc)
 	bus_dmamap_sync(rxst_ring->rsr_dtag, rxst_ring->rsr_dmap,
 			BUS_DMASYNC_POSTREAD);
 
-	rxs_stat_ring = rxsd->rxsd_status->rxs_stat_ring;
+	rxs_stat_ring = le32toh(rxsd->rxsd_status->rxs_stat_ring);
 	rxst_wrap = (rxs_stat_ring & ET_RXS_STATRING_WRAP) ? 1 : 0;
-	rxst_index = __SHIFTOUT(rxs_stat_ring, ET_RXS_STATRING_INDEX);
+	rxst_index = (rxs_stat_ring & ET_RXS_STATRING_INDEX_MASK) >>
+	    ET_RXS_STATRING_INDEX_SHIFT;
 
 	while (rxst_index != rxst_ring->rsr_index ||
 	       rxst_wrap != rxst_ring->rsr_wrap) {
@@ -1905,17 +1963,19 @@ et_rxeof(struct et_softc *sc)
 
 		MPASS(rxst_ring->rsr_index < ET_RX_NSTAT);
 		st = &rxst_ring->rsr_stat[rxst_ring->rsr_index];
-
-		buflen = __SHIFTOUT(st->rxst_info2, ET_RXST_INFO2_LEN);
-		buf_idx = __SHIFTOUT(st->rxst_info2, ET_RXST_INFO2_BUFIDX);
-		ring_idx = __SHIFTOUT(st->rxst_info2, ET_RXST_INFO2_RINGIDX);
+		rxst_info2 = le32toh(st->rxst_info2);
+		buflen = (rxst_info2 & ET_RXST_INFO2_LEN_MASK) >>
+		    ET_RXST_INFO2_LEN_SHIFT;
+		buf_idx = (rxst_info2 & ET_RXST_INFO2_BUFIDX_MASK) >>
+		    ET_RXST_INFO2_BUFIDX_SHIFT;
+		ring_idx = (rxst_info2 & ET_RXST_INFO2_RINGIDX_MASK) >>
+		    ET_RXST_INFO2_RINGIDX_SHIFT;
 
 		if (++rxst_ring->rsr_index == ET_RX_NSTAT) {
 			rxst_ring->rsr_index = 0;
 			rxst_ring->rsr_wrap ^= 1;
 		}
-		rxstat_pos = __SHIFTIN(rxst_ring->rsr_index,
-				       ET_RXSTAT_POS_INDEX);
+		rxstat_pos = rxst_ring->rsr_index & ET_RXSTAT_POS_INDEX_MASK;
 		if (rxst_ring->rsr_wrap)
 			rxstat_pos |= ET_RXSTAT_POS_WRAP;
 		CSR_WRITE_4(sc, ET_RXSTAT_POS, rxstat_pos);
@@ -1940,11 +2000,9 @@ et_rxeof(struct et_softc *sc)
 				m = NULL;
 				ifp->if_ierrors++;
 			} else {
-				m->m_pkthdr.len = m->m_len = buflen;
+				m->m_pkthdr.len = m->m_len =
+				    buflen - ETHER_CRC_LEN;
 				m->m_pkthdr.rcvif = ifp;
-
-				m_adj(m, -ETHER_CRC_LEN);
-
 				ifp->if_ipackets++;
 				ET_UNLOCK(sc);
 				ifp->if_input(ifp, m);
@@ -1968,7 +2026,7 @@ et_rxeof(struct et_softc *sc)
 			rx_ring->rr_index = 0;
 			rx_ring->rr_wrap ^= 1;
 		}
-		rxring_pos = __SHIFTIN(rx_ring->rr_index, ET_RX_RING_POS_INDEX);
+		rxring_pos = rx_ring->rr_index & ET_RX_RING_POS_INDEX_MASK;
 		if (rx_ring->rr_wrap)
 			rxring_pos |= ET_RX_RING_POS_WRAP;
 		CSR_WRITE_4(sc, rx_ring->rr_posreg, rxring_pos);
@@ -1986,7 +2044,7 @@ et_encap(struct et_softc *sc, struct mbuf **m0)
 	struct et_txdesc *td;
 	bus_dmamap_t map;
 	int error, maxsegs, first_idx, last_idx, i;
-	uint32_t tx_ready_pos, last_td_ctrl2;
+	uint32_t csum_flags, tx_ready_pos, last_td_ctrl2;
 
 	maxsegs = ET_TX_NDESC - tbd->tbd_used;
 	if (maxsegs > ET_NSEG_MAX)
@@ -2048,20 +2106,29 @@ et_encap(struct et_softc *sc, struct mbuf **m0)
 		last_td_ctrl2 |= ET_TDCTRL2_INTR;
 	}
 
+	csum_flags = 0;
+	if ((m->m_pkthdr.csum_flags & ET_CSUM_FEATURES) != 0) {
+		if ((m->m_pkthdr.csum_flags & CSUM_IP) != 0)
+			csum_flags |= ET_TDCTRL2_CSUM_IP;
+		if ((m->m_pkthdr.csum_flags & CSUM_UDP) != 0)
+			csum_flags |= ET_TDCTRL2_CSUM_UDP;
+		else if ((m->m_pkthdr.csum_flags & CSUM_TCP) != 0)
+			csum_flags |= ET_TDCTRL2_CSUM_TCP;
+	}
 	last_idx = -1;
 	for (i = 0; i < ctx.nsegs; ++i) {
 		int idx;
 
 		idx = (first_idx + i) % ET_TX_NDESC;
 		td = &tx_ring->tr_desc[idx];
-		td->td_addr_hi = ET_ADDR_HI(segs[i].ds_addr);
-		td->td_addr_lo = ET_ADDR_LO(segs[i].ds_addr);
-		td->td_ctrl1 = __SHIFTIN(segs[i].ds_len, ET_TDCTRL1_LEN);
-
+		td->td_addr_hi = htole32(ET_ADDR_HI(segs[i].ds_addr));
+		td->td_addr_lo = htole32(ET_ADDR_LO(segs[i].ds_addr));
+		td->td_ctrl1 =  htole32(segs[i].ds_len & ET_TDCTRL1_LEN_MASK);
 		if (i == ctx.nsegs - 1) {	/* Last frag */
-			td->td_ctrl2 = last_td_ctrl2;
+			td->td_ctrl2 = htole32(last_td_ctrl2 | csum_flags);
 			last_idx = idx;
-		}
+		} else
+			td->td_ctrl2 = htole32(csum_flags);
 
 		MPASS(tx_ring->tr_ready_index < ET_TX_NDESC);
 		if (++tx_ring->tr_ready_index == ET_TX_NDESC) {
@@ -2070,7 +2137,7 @@ et_encap(struct et_softc *sc, struct mbuf **m0)
 		}
 	}
 	td = &tx_ring->tr_desc[first_idx];
-	td->td_ctrl2 |= ET_TDCTRL2_FIRST_FRAG;	/* First frag */
+	td->td_ctrl2 |= htole32(ET_TDCTRL2_FIRST_FRAG);	/* First frag */
 
 	MPASS(last_idx >= 0);
 	tbd->tbd_buf[first_idx].tb_dmap = tbd->tbd_buf[last_idx].tb_dmap;
@@ -2083,8 +2150,7 @@ et_encap(struct et_softc *sc, struct mbuf **m0)
 	bus_dmamap_sync(tx_ring->tr_dtag, tx_ring->tr_dmap,
 			BUS_DMASYNC_PREWRITE);
 
-	tx_ready_pos = __SHIFTIN(tx_ring->tr_ready_index,
-		       ET_TX_READY_POS_INDEX);
+	tx_ready_pos = tx_ring->tr_ready_index & ET_TX_READY_POS_INDEX_MASK;
 	if (tx_ring->tr_ready_wrap)
 		tx_ready_pos |= ET_TX_READY_POS_WRAP;
 	CSR_WRITE_4(sc, ET_TX_READY_POS, tx_ready_pos);
@@ -2095,7 +2161,7 @@ back:
 		m_freem(m);
 		*m0 = NULL;
 	}
-	return error;
+	return (error);
 }
 
 static void
@@ -2119,7 +2185,7 @@ et_txeof(struct et_softc *sc)
 		return;
 
 	tx_done = CSR_READ_4(sc, ET_TX_DONE_POS);
-	end = __SHIFTOUT(tx_done, ET_TX_DONE_POS_INDEX);
+	end = tx_done & ET_TX_DONE_POS_INDEX_MASK;
 	wrap = (tx_done & ET_TX_DONE_POS_WRAP) ? 1 : 0;
 
 	while (tbd->tbd_start_index != end || tbd->tbd_start_wrap != wrap) {
@@ -2183,13 +2249,13 @@ et_tick(void *xsc)
 static int
 et_newbuf_cluster(struct et_rxbuf_data *rbd, int buf_idx, int init)
 {
-	return et_newbuf(rbd, buf_idx, init, MCLBYTES);
+	return (et_newbuf(rbd, buf_idx, init, MCLBYTES));
 }
 
 static int
 et_newbuf_hdr(struct et_rxbuf_data *rbd, int buf_idx, int init)
 {
-	return et_newbuf(rbd, buf_idx, init, MHLEN);
+	return (et_newbuf(rbd, buf_idx, init, MHLEN));
 }
 
 static int
@@ -2213,7 +2279,7 @@ et_newbuf(struct et_rxbuf_data *rbd, int buf_idx, int init, int len0)
 		if (init) {
 			if_printf(sc->ifp,
 				  "m_getl failed, size %d\n", len0);
-			return error;
+			return (error);
 		} else {
 			goto back;
 		}
@@ -2240,7 +2306,7 @@ et_newbuf(struct et_rxbuf_data *rbd, int buf_idx, int init, int len0)
 
 		if (init) {
 			if_printf(sc->ifp, "can't load RX mbuf\n");
-			return error;
+			return (error);
 		} else {
 			goto back;
 		}
@@ -2264,7 +2330,7 @@ et_newbuf(struct et_rxbuf_data *rbd, int buf_idx, int init, int len0)
 	error = 0;
 back:
 	et_setup_rxdesc(rbd, buf_idx, rb->rb_paddr);
-	return error;
+	return (error);
 }
 
 /*
@@ -2314,7 +2380,7 @@ et_sysctl_rx_intr_npkts(SYSCTL_HANDLER_ARGS)
 		sc->sc_rx_intr_npkts = v;
 	}
 back:
-	return error;
+	return (error);
 }
 
 static int
@@ -2339,7 +2405,7 @@ et_sysctl_rx_intr_delay(SYSCTL_HANDLER_ARGS)
 		sc->sc_rx_intr_delay = v;
 	}
 back:
-	return error;
+	return (error);
 }
 
 static void
@@ -2352,7 +2418,8 @@ et_setmedia(struct et_softc *sc)
 	cfg2 &= ~(ET_MAC_CFG2_MODE_MII | ET_MAC_CFG2_MODE_GMII |
 		  ET_MAC_CFG2_FDX | ET_MAC_CFG2_BIGFRM);
 	cfg2 |= ET_MAC_CFG2_LENCHK | ET_MAC_CFG2_CRC | ET_MAC_CFG2_PADCRC |
-		__SHIFTIN(7, ET_MAC_CFG2_PREAMBLE_LEN);
+	    ((7 << ET_MAC_CFG2_PREAMBLE_LEN_SHIFT) &
+	    ET_MAC_CFG2_PREAMBLE_LEN_MASK);
 
 	ctrl = CSR_READ_4(sc, ET_MAC_CTRL);
 	ctrl &= ~(ET_MAC_CTRL_GHDX | ET_MAC_CTRL_MODE_MII);
@@ -2382,9 +2449,9 @@ et_setup_rxdesc(struct et_rxbuf_data *rbd, int buf_idx, bus_addr_t paddr)
 	MPASS(buf_idx < ET_RX_NDESC);
 	desc = &rx_ring->rr_desc[buf_idx];
 
-	desc->rd_addr_hi = ET_ADDR_HI(paddr);
-	desc->rd_addr_lo = ET_ADDR_LO(paddr);
-	desc->rd_ctrl = __SHIFTIN(buf_idx, ET_RDCTRL_BUFIDX);
+	desc->rd_addr_hi = htole32(ET_ADDR_HI(paddr));
+	desc->rd_addr_lo = htole32(ET_ADDR_LO(paddr));
+	desc->rd_ctrl = htole32(buf_idx & ET_RDCTRL_BUFIDX_MASK);
 
 	bus_dmamap_sync(rx_ring->rr_dtag, rx_ring->rr_dmap,
 			BUS_DMASYNC_PREWRITE);
diff --git a/sys/dev/et/if_etreg.h b/sys/dev/et/if_etreg.h
index 136f6fbf584..1f6f48fec1a 100644
--- a/sys/dev/et/if_etreg.h
+++ b/sys/dev/et/if_etreg.h
@@ -1,13 +1,13 @@
 /*-
  * Copyright (c) 2007 The DragonFly Project.  All rights reserved.
- * 
+ *
  * This code is derived from software contributed to The DragonFly Project
  * by Sepherosa Ziehau 
- * 
+ *
  * 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
@@ -17,7 +17,7 @@
  * 3. Neither the name of The DragonFly Project 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 COPYRIGHT HOLDERS AND CONTRIBUTORS
  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
@@ -30,7 +30,7 @@
  * 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.
- * 
+ *
  * $DragonFly: src/sys/dev/netif/et/if_etreg.h,v 1.3 2007/10/23 14:28:42 sephe Exp $
  * $FreeBSD$
  */
@@ -73,50 +73,6 @@
 #ifndef _IF_ETREG_H
 #define _IF_ETREG_H
 
-/*
- * __BIT(n): Return a bitmask with bit n set, where the least
- *           significant bit is bit 0.
- *
- * __BITS(m, n): Return a bitmask with bits m through n, inclusive,
- *               set.  It does not matter whether m>n or m<=n.  The
- *               least significant bit is bit 0.
- *
- * A "bitfield" is a span of consecutive bits defined by a bitmask,
- * where 1s select the bits in the bitfield.  __SHIFTIN, __SHIFTOUT,
- * and __SHIFTOUT_MASK help read and write bitfields from device
- * registers.
- *
- * __SHIFTIN(v, mask): Left-shift bits `v' into the bitfield
- *                     defined by `mask', and return them.  No
- *                     side-effects.
- *
- * __SHIFTOUT(v, mask): Extract and return the bitfield selected
- *                      by `mask' from `v', right-shifting the
- *                      bits so that the rightmost selected bit
- *                      is at bit 0.  No side-effects.
- *
- * __SHIFTOUT_MASK(mask): Right-shift the bits in `mask' so that
- *                        the rightmost non-zero bit is at bit
- *                        0.  This is useful for finding the
- *                        greatest unsigned value that a bitfield
- *                        can hold.  No side-effects.  Note that
- *                        __SHIFTOUT_MASK(m) = __SHIFTOUT(m, m).
- */
-
-/* __BIT(n): nth bit, where __BIT(0) == 0x1. */
-#define	__BIT(__n) (((__n) == 32) ? 0 : ((uint32_t)1 << (__n)))
-
-/* __BITS(m, n): bits m through n, m < n. */
-#define	__BITS(__m, __n)	\
-	((__BIT(MAX((__m), (__n)) + 1) - 1) ^ (__BIT(MIN((__m), (__n))) - 1))
-
-/* Find least significant bit that is set */
-#define	__LOWEST_SET_BIT(__mask) ((((__mask) - 1) & (__mask)) ^ (__mask))
-
-#define	__SHIFTOUT(__x, __mask) (((__x) & (__mask)) / __LOWEST_SET_BIT(__mask))
-#define	__SHIFTIN(__x, __mask) ((__x) * __LOWEST_SET_BIT(__mask))
-#define	__SHIFTOUT_MASK(__mask) __SHIFTOUT((__mask), (__mask))
-
 #define ET_MEM_TXSIZE_EX		182
 #define ET_MEM_RXSIZE_MIN		608
 #define ET_MEM_RXSIZE_DEFAULT		11216
@@ -159,10 +115,6 @@
 #define ET_PCIV_REPLAY_TIMER_256	(1248 + ET_REPLAY_TIMER_RX_L0S_ADJ)
 
 #define ET_PCIR_L0S_L1_LATENCY		0xcf
-#define ET_PCIM_L0S_LATENCY		__BITS(2, 0)
-#define ET_PCIM_L1_LATENCY		__BITS(5, 3)
-#define ET_PCIV_L0S_LATENCY(l)		__SHIFTIN((l) - 1, ET_PCIM_L0S_LATENCY)
-#define ET_PCIV_L1_LATENCY(l)		__SHIFTIN((l) - 1, ET_PCIM_L1_LATENCY)
 
 /*
  * CSR
@@ -176,22 +128,22 @@
 #define ET_QUEUE_ADDR_END		ET_QUEUE_ADDR(ET_MEM_SIZE)
 
 #define ET_PM				0x0010
-#define ET_PM_SYSCLK_GATE		__BIT(3)
-#define ET_PM_TXCLK_GATE		__BIT(4)
-#define ET_PM_RXCLK_GATE		__BIT(5)
+#define ET_PM_SYSCLK_GATE		0x00000008
+#define ET_PM_TXCLK_GATE		0x00000010
+#define ET_PM_RXCLK_GATE		0x00000020
 
 #define ET_INTR_STATUS			0x0018
 #define ET_INTR_MASK			0x001c
 
 #define ET_SWRST			0x0028
-#define ET_SWRST_TXDMA			__BIT(0)
-#define ET_SWRST_RXDMA			__BIT(1)
-#define ET_SWRST_TXMAC			__BIT(2)
-#define ET_SWRST_RXMAC			__BIT(3)
-#define ET_SWRST_MAC			__BIT(4)
-#define ET_SWRST_MAC_STAT		__BIT(5)
-#define ET_SWRST_MMC			__BIT(6)
-#define ET_SWRST_SELFCLR_DISABLE	__BIT(31)
+#define ET_SWRST_TXDMA			0x00000001
+#define ET_SWRST_RXDMA			0x00000002
+#define ET_SWRST_TXMAC			0x00000004
+#define ET_SWRST_RXMAC			0x00000008
+#define ET_SWRST_MAC			0x00000010
+#define ET_SWRST_MAC_STAT		0x00000020
+#define ET_SWRST_MMC			0x00000040
+#define ET_SWRST_SELFCLR_DISABLE	0x80000000
 
 #define ET_MSI_CFG			0x0030
 
@@ -200,9 +152,9 @@
 #define ET_TIMER			0x0038
 
 #define ET_TXDMA_CTRL			0x1000
-#define ET_TXDMA_CTRL_HALT		__BIT(0)
-#define ET_TXDMA_CTRL_CACHE_THR		__BITS(7, 4)
-#define ET_TXDMA_CTRL_SINGLE_EPKT	__BIT(8)	/* ??? */
+#define ET_TXDMA_CTRL_HALT		0x00000001
+#define ET_TXDMA_CTRL_CACHE_THR_MASK	0x000000F0
+#define ET_TXDMA_CTRL_SINGLE_EPKT	0x00000100	/* ??? */
 
 #define ET_TX_RING_HI			0x1004
 #define ET_TX_RING_LO			0x1008
@@ -212,28 +164,28 @@
 #define ET_TX_STATUS_LO			0x1020
 
 #define ET_TX_READY_POS			0x1024
-#define ET_TX_READY_POS_INDEX		__BITS(9, 0)
-#define ET_TX_READY_POS_WRAP		__BIT(10)
+#define ET_TX_READY_POS_INDEX_MASK	0x000003FF
+#define ET_TX_READY_POS_WRAP		0x00000400
 
 #define ET_TX_DONE_POS			0x1060
-#define ET_TX_DONE_POS_INDEX		__BITS(9, 0)
-#define ET_TX_DONE_POS_WRAP		__BIT(10)
+#define ET_TX_DONE_POS_INDEX_MASK	0x0000003FF
+#define ET_TX_DONE_POS_WRAP		0x000000400
 
 #define ET_RXDMA_CTRL			0x2000
-#define ET_RXDMA_CTRL_HALT		__BIT(0)
-#define ET_RXDMA_CTRL_RING0_SIZE	__BITS(9, 8)
-#define ET_RXDMA_CTRL_RING0_128		0		/* 127 */
-#define ET_RXDMA_CTRL_RING0_256		1		/* 255 */
-#define ET_RXDMA_CTRL_RING0_512		2		/* 511 */
-#define ET_RXDMA_CTRL_RING0_1024	3		/* 1023 */
-#define ET_RXDMA_CTRL_RING0_ENABLE	__BIT(10)
-#define ET_RXDMA_CTRL_RING1_SIZE	__BITS(12, 11)
-#define ET_RXDMA_CTRL_RING1_2048	0		/* 2047 */
-#define ET_RXDMA_CTRL_RING1_4096	1		/* 4095 */
-#define ET_RXDMA_CTRL_RING1_8192	2		/* 8191 */
-#define ET_RXDMA_CTRL_RING1_16384	3		/* 16383 (9022?) */
-#define ET_RXDMA_CTRL_RING1_ENABLE	__BIT(13)
-#define ET_RXDMA_CTRL_HALTED		__BIT(17)
+#define ET_RXDMA_CTRL_HALT		0x00000001
+#define ET_RXDMA_CTRL_RING0_SIZE_MASK	0x00000300
+#define ET_RXDMA_CTRL_RING0_128		0x00000000	/* 127 */
+#define ET_RXDMA_CTRL_RING0_256		0x00000100	/* 255 */
+#define ET_RXDMA_CTRL_RING0_512		0x00000200	/* 511 */
+#define ET_RXDMA_CTRL_RING0_1024	0x00000300	/* 1023 */
+#define ET_RXDMA_CTRL_RING0_ENABLE	0x00000400
+#define ET_RXDMA_CTRL_RING1_SIZE_MASK	0x00001800
+#define ET_RXDMA_CTRL_RING1_2048	0x00000000	/* 2047 */
+#define ET_RXDMA_CTRL_RING1_4096	0x00000800	/* 4095 */
+#define ET_RXDMA_CTRL_RING1_8192	0x00001000	/* 8191 */
+#define ET_RXDMA_CTRL_RING1_16384	0x00001800	/* 16383 (9022?) */
+#define ET_RXDMA_CTRL_RING1_ENABLE	0x00002000
+#define ET_RXDMA_CTRL_HALTED		0x00020000
 
 #define ET_RX_STATUS_LO			0x2004
 #define ET_RX_STATUS_HI			0x2008
@@ -246,8 +198,8 @@
 #define ET_RXSTAT_CNT			0x2028
 
 #define ET_RXSTAT_POS			0x2030
-#define ET_RXSTAT_POS_INDEX		__BITS(11, 0)
-#define ET_RXSTAT_POS_WRAP		__BIT(12)
+#define ET_RXSTAT_POS_INDEX_MASK	0x00000FFF
+#define ET_RXSTAT_POS_WRAP		0x00001000
 
 #define ET_RXSTAT_MINCNT		0x2038
 
@@ -256,8 +208,8 @@
 #define ET_RX_RING0_CNT			0x2044
 
 #define ET_RX_RING0_POS			0x204c
-#define ET_RX_RING0_POS_INDEX		__BITS(9, 0)
-#define ET_RX_RING0_POS_WRAP		__BIT(10)
+#define ET_RX_RING0_POS_INDEX_MASK	0x000003FF
+#define ET_RX_RING0_POS_WRAP		0x00000400
 
 #define ET_RX_RING0_MINCNT		0x2054
 
@@ -266,21 +218,21 @@
 #define ET_RX_RING1_CNT			0x2060
 
 #define ET_RX_RING1_POS			0x2068
-#define ET_RX_RING1_POS_INDEX		__BITS(9, 0)
-#define ET_RX_RING1_POS_WRAP		__BIT(10)
+#define ET_RX_RING1_POS_INDEX		0x000003FF
+#define ET_RX_RING1_POS_WRAP		0x00000400
 
 #define ET_RX_RING1_MINCNT		0x2070
 
 #define ET_TXMAC_CTRL			0x3000
-#define ET_TXMAC_CTRL_ENABLE		__BIT(0)
-#define ET_TXMAC_CTRL_FC_DISABLE	__BIT(3)
+#define ET_TXMAC_CTRL_ENABLE		0x00000001
+#define ET_TXMAC_CTRL_FC_DISABLE	0x00000008
 
 #define ET_TXMAC_FLOWCTRL		0x3010
 
 #define ET_RXMAC_CTRL			0x4000
-#define ET_RXMAC_CTRL_ENABLE		__BIT(0)
-#define ET_RXMAC_CTRL_NO_PKTFILT	__BIT(2)
-#define ET_RXMAC_CTRL_WOL_DISABLE	__BIT(3)
+#define ET_RXMAC_CTRL_ENABLE		0x00000001
+#define ET_RXMAC_CTRL_NO_PKTFILT	0x00000004
+#define ET_RXMAC_CTRL_WOL_DISABLE	0x00000008
 
 #define ET_WOL_CRC			0x4004
 #define ET_WOL_SA_LO			0x4010
@@ -294,16 +246,17 @@
 #define ET_MULTI_HASH			0x4074
 
 #define ET_PKTFILT			0x4084
-#define ET_PKTFILT_BCAST		__BIT(0)
-#define ET_PKTFILT_MCAST		__BIT(1)
-#define ET_PKTFILT_UCAST		__BIT(2)
-#define ET_PKTFILT_FRAG			__BIT(3)
-#define ET_PKTFILT_MINLEN		__BITS(22, 16)
+#define ET_PKTFILT_BCAST		0x00000001
+#define ET_PKTFILT_MCAST		0x00000002
+#define ET_PKTFILT_UCAST		0x00000004
+#define ET_PKTFILT_FRAG			0x00000008
+#define ET_PKTFILT_MINLEN_MASK		0x007F0000
+#define ET_PKTFILT_MINLEN_SHIFT		16
 
 #define ET_RXMAC_MC_SEGSZ		0x4088
-#define ET_RXMAC_MC_SEGSZ_ENABLE	__BIT(0)
-#define ET_RXMAC_MC_SEGSZ_FC		__BIT(1)
-#define ET_RXMAC_MC_SEGSZ_MAX		__BITS(9, 2)
+#define ET_RXMAC_MC_SEGSZ_ENABLE	0x00000001
+#define ET_RXMAC_MC_SEGSZ_FC		0x00000002
+#define ET_RXMAC_MC_SEGSZ_MAX_MASK	0x000003FC
 #define ET_RXMAC_SEGSZ(segsz)		((segsz) / ET_MEM_UNIT)
 #define ET_RXMAC_CUT_THRU_FRMLEN	8074
 
@@ -311,110 +264,121 @@
 #define ET_RXMAC_SPACE_AVL		0x4094
 
 #define ET_RXMAC_MGT			0x4098
-#define ET_RXMAC_MGT_PASS_ECRC		__BIT(4)
-#define ET_RXMAC_MGT_PASS_ELEN		__BIT(5)
-#define ET_RXMAC_MGT_PASS_ETRUNC	__BIT(16)
-#define ET_RXMAC_MGT_CHECK_PKT		__BIT(17)
+#define ET_RXMAC_MGT_PASS_ECRC		0x00000010
+#define ET_RXMAC_MGT_PASS_ELEN		0x00000020
+#define ET_RXMAC_MGT_PASS_ETRUNC	0x00010000
+#define ET_RXMAC_MGT_CHECK_PKT		0x00020000
 
 #define ET_MAC_CFG1			0x5000
-#define ET_MAC_CFG1_TXEN		__BIT(0)
-#define ET_MAC_CFG1_SYNC_TXEN		__BIT(1)
-#define ET_MAC_CFG1_RXEN		__BIT(2)
-#define ET_MAC_CFG1_SYNC_RXEN		__BIT(3)
-#define ET_MAC_CFG1_TXFLOW		__BIT(4)
-#define ET_MAC_CFG1_RXFLOW		__BIT(5)
-#define ET_MAC_CFG1_LOOPBACK		__BIT(8)
-#define ET_MAC_CFG1_RST_TXFUNC		__BIT(16)
-#define ET_MAC_CFG1_RST_RXFUNC		__BIT(17)
-#define ET_MAC_CFG1_RST_TXMC		__BIT(18)
-#define ET_MAC_CFG1_RST_RXMC		__BIT(19)
-#define ET_MAC_CFG1_SIM_RST		__BIT(30)
-#define ET_MAC_CFG1_SOFT_RST		__BIT(31)
+#define ET_MAC_CFG1_TXEN		0x00000001
+#define ET_MAC_CFG1_SYNC_TXEN		0x00000002
+#define ET_MAC_CFG1_RXEN		0x00000004
+#define ET_MAC_CFG1_SYNC_RXEN		0x00000008
+#define ET_MAC_CFG1_TXFLOW		0x00000010
+#define ET_MAC_CFG1_RXFLOW		0x00000020
+#define ET_MAC_CFG1_LOOPBACK		0x00000100
+#define ET_MAC_CFG1_RST_TXFUNC		0x00010000
+#define ET_MAC_CFG1_RST_RXFUNC		0x00020000
+#define ET_MAC_CFG1_RST_TXMC		0x00040000
+#define ET_MAC_CFG1_RST_RXMC		0x00080000
+#define ET_MAC_CFG1_SIM_RST		0x40000000
+#define ET_MAC_CFG1_SOFT_RST		0x80000000
 
 #define ET_MAC_CFG2			0x5004
-#define ET_MAC_CFG2_FDX			__BIT(0)
-#define ET_MAC_CFG2_CRC			__BIT(1)
-#define ET_MAC_CFG2_PADCRC		__BIT(2)
-#define ET_MAC_CFG2_LENCHK		__BIT(4)
-#define ET_MAC_CFG2_BIGFRM		__BIT(5)
-#define ET_MAC_CFG2_MODE_MII		__BIT(8)
-#define ET_MAC_CFG2_MODE_GMII		__BIT(9)
-#define ET_MAC_CFG2_PREAMBLE_LEN	__BITS(15, 12)
+#define ET_MAC_CFG2_FDX			0x00000001
+#define ET_MAC_CFG2_CRC			0x00000002
+#define ET_MAC_CFG2_PADCRC		0x00000004
+#define ET_MAC_CFG2_LENCHK		0x00000010
+#define ET_MAC_CFG2_BIGFRM		0x00000020
+#define ET_MAC_CFG2_MODE_MII		0x00000100
+#define ET_MAC_CFG2_MODE_GMII		0x00000200
+#define ET_MAC_CFG2_PREAMBLE_LEN_MASK	0x0000F000
+#define ET_MAC_CFG2_PREAMBLE_LEN_SHIFT	12
 
 #define ET_IPG				0x5008
-#define ET_IPG_B2B			__BITS(6, 0)
-#define ET_IPG_MINIFG			__BITS(15, 8)
-#define ET_IPG_NONB2B_2			__BITS(22, 16)
-#define ET_IPG_NONB2B_1			__BITS(30, 24)
+#define ET_IPG_B2B_MASK			0x0000007F
+#define ET_IPG_MINIFG_MASK		0x0000FF00
+#define ET_IPG_NONB2B_2_MASK		0x007F0000
+#define ET_IPG_NONB2B_1_MASK		0x7F000000
+#define ET_IPG_B2B_SHIFT		0
+#define ET_IPG_MINIFG_SHIFT		8
+#define ET_IPG_NONB2B_2_SHIFT		16
+#define ET_IPG_NONB2B_1_SHIFT		24
 
 #define ET_MAC_HDX			0x500c
-#define ET_MAC_HDX_COLLWIN		__BITS(9, 0)
-#define ET_MAC_HDX_REXMIT_MAX		__BITS(15, 12)
-#define ET_MAC_HDX_EXC_DEFER		__BIT(16)
-#define ET_MAC_HDX_NOBACKOFF		__BIT(17)
-#define ET_MAC_HDX_BP_NOBACKOFF		__BIT(18)
-#define ET_MAC_HDX_ALT_BEB		__BIT(19)
-#define ET_MAC_HDX_ALT_BEB_TRUNC	__BITS(23, 20)
+#define ET_MAC_HDX_COLLWIN_MASK		0x000003FF
+#define ET_MAC_HDX_REXMIT_MAX_MASK	0x0000F000
+#define ET_MAC_HDX_EXC_DEFER		0x00010000
+#define ET_MAC_HDX_NOBACKOFF		0x00020000
+#define ET_MAC_HDX_BP_NOBACKOFF		0x00040000
+#define ET_MAC_HDX_ALT_BEB		0x00080000
+#define ET_MAC_HDX_ALT_BEB_TRUNC_MASK	0x00F00000
+#define ET_MAC_HDX_COLLWIN_SHIFT	0
+#define ET_MAC_HDX_REXMIT_MAX_SHIFT	12
+#define ET_MAC_HDX_ALT_BEB_TRUNC_SHIFT	20
 
 #define ET_MAX_FRMLEN			0x5010
 
 #define ET_MII_CFG			0x5020
-#define ET_MII_CFG_CLKRST		__BITS(2, 0)
-#define ET_MII_CFG_PREAMBLE_SUP		__BIT(4)
-#define ET_MII_CFG_SCAN_AUTOINC		__BIT(5)
-#define ET_MII_CFG_RST			__BIT(31)
+#define ET_MII_CFG_CLKRST		0x00000007
+#define ET_MII_CFG_PREAMBLE_SUP		0x00000010
+#define ET_MII_CFG_SCAN_AUTOINC		0x00000020
+#define ET_MII_CFG_RST			0x80000000
 
 #define ET_MII_CMD			0x5024
-#define ET_MII_CMD_READ			__BIT(0)
+#define ET_MII_CMD_READ			0x00000001
 
 #define ET_MII_ADDR			0x5028
-#define ET_MII_ADDR_REG			__BITS(4, 0)
-#define ET_MII_ADDR_PHY			__BITS(12, 8)
+#define ET_MII_ADDR_REG_MASK		0x0000001F
+#define ET_MII_ADDR_PHY_MASK		0x00001F00
+#define ET_MII_ADDR_REG_SHIFT		0
+#define ET_MII_ADDR_PHY_SHIFT		8
 
 #define ET_MII_CTRL			0x502c
-#define ET_MII_CTRL_VALUE		__BITS(15, 0) 
+#define ET_MII_CTRL_VALUE_MASK		0x0000FFFF
+#define ET_MII_CTRL_VALUE_SHIFT		0
 
 #define ET_MII_STAT			0x5030
-#define ET_MII_STAT_VALUE		__BITS(15, 0)
+#define ET_MII_STAT_VALUE_MASK		0x0000FFFF
 
 #define ET_MII_IND			0x5034
-#define ET_MII_IND_BUSY			__BIT(0)
-#define ET_MII_IND_INVALID		__BIT(2)
+#define ET_MII_IND_BUSY			0x00000001
+#define ET_MII_IND_INVALID		0x00000004
 
 #define ET_MAC_CTRL			0x5038
-#define ET_MAC_CTRL_MODE_MII		__BIT(24)
-#define ET_MAC_CTRL_LHDX		__BIT(25)
-#define ET_MAC_CTRL_GHDX		__BIT(26)
+#define ET_MAC_CTRL_MODE_MII		0x01000000
+#define ET_MAC_CTRL_LHDX		0x02000000
+#define ET_MAC_CTRL_GHDX		0x04000000
 
 #define ET_MAC_ADDR1			0x5040
 #define ET_MAC_ADDR2			0x5044
 
 #define ET_MMC_CTRL			0x7000
-#define ET_MMC_CTRL_ENABLE		__BIT(0)
-#define ET_MMC_CTRL_ARB_DISABLE		__BIT(1)
-#define ET_MMC_CTRL_RXMAC_DISABLE	__BIT(2)
-#define ET_MMC_CTRL_TXMAC_DISABLE	__BIT(3)
-#define ET_MMC_CTRL_TXDMA_DISABLE	__BIT(4)
-#define ET_MMC_CTRL_RXDMA_DISABLE	__BIT(5)
-#define ET_MMC_CTRL_FORCE_CE		__BIT(6)
+#define ET_MMC_CTRL_ENABLE		0x00000001
+#define ET_MMC_CTRL_ARB_DISABLE		0x00000002
+#define ET_MMC_CTRL_RXMAC_DISABLE	0x00000004
+#define ET_MMC_CTRL_TXMAC_DISABLE	0x00000008
+#define ET_MMC_CTRL_TXDMA_DISABLE	0x00000010
+#define ET_MMC_CTRL_RXDMA_DISABLE	0x00000020
+#define ET_MMC_CTRL_FORCE_CE		0x00000040
 
 /*
  * Interrupts
  */
-#define ET_INTR_TXEOF			__BIT(3)
-#define ET_INTR_TXDMA_ERROR		__BIT(4)
-#define ET_INTR_RXEOF			__BIT(5)
-#define ET_INTR_RXRING0_LOW		__BIT(6)
-#define ET_INTR_RXRING1_LOW		__BIT(7)
-#define ET_INTR_RXSTAT_LOW		__BIT(8)
-#define ET_INTR_RXDMA_ERROR		__BIT(9)
-#define ET_INTR_TIMER			__BIT(14)
-#define ET_INTR_WOL			__BIT(15)
-#define ET_INTR_PHY			__BIT(16)
-#define ET_INTR_TXMAC			__BIT(17)
-#define ET_INTR_RXMAC			__BIT(18)
-#define ET_INTR_MAC_STATS		__BIT(19)
-#define ET_INTR_SLAVE_TO		__BIT(20)
+#define ET_INTR_TXEOF			0x00000008
+#define ET_INTR_TXDMA_ERROR		0x00000010
+#define ET_INTR_RXEOF			0x00000020
+#define ET_INTR_RXRING0_LOW		0x00000040
+#define ET_INTR_RXRING1_LOW		0x00000080
+#define ET_INTR_RXSTAT_LOW		0x00000100
+#define ET_INTR_RXDMA_ERROR		0x00000200
+#define ET_INTR_TIMER			0x00004000
+#define ET_INTR_WOL			0x00008000
+#define ET_INTR_PHY			0x00010000
+#define ET_INTR_TXMAC			0x00020000
+#define ET_INTR_RXMAC			0x00040000
+#define ET_INTR_MAC_STATS		0x00080000
+#define ET_INTR_SLAVE_TO		0x00100000
 
 #define ET_INTRS			(ET_INTR_TXEOF | \
 					 ET_INTR_RXEOF | \
@@ -423,8 +387,8 @@
 /*
  * RX ring position uses same layout
  */
-#define ET_RX_RING_POS_INDEX		__BITS(9, 0)
-#define ET_RX_RING_POS_WRAP		__BIT(10)
+#define ET_RX_RING_POS_INDEX_MASK	0x000003FF
+#define ET_RX_RING_POS_WRAP		0x00000400
 
 /*
  * PCI IDs
diff --git a/sys/dev/et/if_etvar.h b/sys/dev/et/if_etvar.h
index 9fdf775d8fd..54932ca1501 100644
--- a/sys/dev/et/if_etvar.h
+++ b/sys/dev/et/if_etvar.h
@@ -1,13 +1,13 @@
 /*-
  * Copyright (c) 2007 The DragonFly Project.  All rights reserved.
- * 
+ *
  * This code is derived from software contributed to The DragonFly Project
  * by Sepherosa Ziehau 
- * 
+ *
  * 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
@@ -17,7 +17,7 @@
  * 3. Neither the name of The DragonFly Project 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 COPYRIGHT HOLDERS AND CONTRIBUTORS
  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
@@ -30,7 +30,7 @@
  * 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.
- * 
+ *
  * $DragonFly: src/sys/dev/netif/et/if_etvar.h,v 1.4 2007/10/23 14:28:42 sephe Exp $
  * $FreeBSD$
  */
@@ -40,7 +40,7 @@
 
 /* DragonFly compatibility */
 #define EVL_ENCAPLEN		ETHER_VLAN_ENCAP_LEN
- 
+
 /*
  * Allocate the right type of mbuf for the desired total length.
  */
@@ -92,9 +92,9 @@ m_getl(int len, int how, int type, int flags, int *psize)
 #define ET_JUMBO_MEM_SIZE	(ET_JSLOTS * ET_JLEN)
 
 #define CSR_WRITE_4(sc, reg, val)	\
-	bus_space_write_4((sc)->sc_mem_bt, (sc)->sc_mem_bh, (reg), (val))
+	bus_write_4((sc)->sc_mem_res, (reg), (val))
 #define CSR_READ_4(sc, reg)		\
-	bus_space_read_4((sc)->sc_mem_bt, (sc)->sc_mem_bh, (reg))
+	bus_read_4((sc)->sc_mem_res, (reg))
 
 #define ET_ADDR_HI(addr)	((uint64_t) (addr) >> 32)
 #define ET_ADDR_LO(addr)	((uint64_t) (addr) & 0xffffffff)
@@ -104,38 +104,54 @@ struct et_txdesc {
 	uint32_t	td_addr_lo;
 	uint32_t	td_ctrl1;	/* ET_TDCTRL1_ */
 	uint32_t	td_ctrl2;	/* ET_TDCTRL2_ */
-} __packed;
+};
 
-#define ET_TDCTRL1_LEN		__BITS(15, 0)
+#define ET_TDCTRL1_LEN_MASK	0x0000FFFF
 
-#define ET_TDCTRL2_LAST_FRAG	__BIT(0)
-#define ET_TDCTRL2_FIRST_FRAG	__BIT(1)
-#define ET_TDCTRL2_INTR		__BIT(2)
+#define ET_TDCTRL2_LAST_FRAG	0x00000001
+#define ET_TDCTRL2_FIRST_FRAG	0x00000002
+#define ET_TDCTRL2_INTR		0x00000004
+#define ET_TDCTRL2_CTRL_WORD	0x00000008
+#define ET_TDCTRL2_HDX_BACKP	0x00000010
+#define ET_TDCTRL2_XMIT_PAUSE	0x00000020
+#define ET_TDCTRL2_FRAME_ERR	0x00000040
+#define ET_TDCTRL2_NO_CRC	0x00000080
+#define ET_TDCTRL2_MAC_OVRRD	0x00000100
+#define ET_TDCTRL2_PAD_PACKET	0x00000200
+#define ET_TDCTRL2_JUMBO_PACKET	0x00000400
+#define ET_TDCTRL2_INS_VLAN	0x00000800
+#define ET_TDCTRL2_CSUM_IP	0x00001000
+#define ET_TDCTRL2_CSUM_TCP	0x00002000
+#define ET_TDCTRL2_CSUM_UDP	0x00004000
 
 struct et_rxdesc {
 	uint32_t	rd_addr_lo;
 	uint32_t	rd_addr_hi;
 	uint32_t	rd_ctrl;	/* ET_RDCTRL_ */
-} __packed;
+};
 
-#define ET_RDCTRL_BUFIDX	__BITS(9, 0)
+#define ET_RDCTRL_BUFIDX_MASK	0x000003FF
 
 struct et_rxstat {
 	uint32_t	rxst_info1;
 	uint32_t	rxst_info2;	/* ET_RXST_INFO2_ */
-} __packed;
+};
 
-#define ET_RXST_INFO2_LEN	__BITS(15, 0)
-#define ET_RXST_INFO2_BUFIDX	__BITS(25, 16)
-#define ET_RXST_INFO2_RINGIDX	__BITS(27, 26)
+#define ET_RXST_INFO2_LEN_MASK	0x0000FFFF
+#define ET_RXST_INFO2_LEN_SHIFT	0
+#define ET_RXST_INFO2_BUFIDX_MASK	0x03FF0000
+#define ET_RXST_INFO2_BUFIDX_SHIFT	16
+#define ET_RXST_INFO2_RINGIDX_MASK	0x0C000000
+#define ET_RXST_INFO2_RINGIDX_SHIFT	26
 
 struct et_rxstatus {
 	uint32_t	rxs_ring;
 	uint32_t	rxs_stat_ring;	/* ET_RXS_STATRING_ */
-} __packed;
+};
 
-#define ET_RXS_STATRING_INDEX	__BITS(27, 16)
-#define ET_RXS_STATRING_WRAP	__BIT(28)
+#define ET_RXS_STATRING_INDEX_MASK	0x0FFF0000
+#define ET_RXS_STATRING_INDEX_SHIFT	16
+#define ET_RXS_STATRING_WRAP	0x10000000
 
 struct et_dmamap_ctx {
 	int		nsegs;
@@ -225,8 +241,6 @@ struct et_softc {
 	device_t		dev;
 	struct mtx		sc_mtx;
 	device_t		sc_miibus;
-	bus_space_handle_t	sc_mem_bh;
-	bus_space_tag_t		sc_mem_bt;
 	void			*sc_irq_handle;
 	struct resource		*sc_irq_res;
 	struct resource		*sc_mem_res;
@@ -234,6 +248,7 @@ struct et_softc {
 	struct arpcom		arpcom;
 	int			sc_if_flags;
 	uint32_t		sc_flags;	/* ET_FLAG_ */
+	int			sc_expcap;
 
 	int			sc_mem_rid;
 
@@ -273,7 +288,9 @@ struct et_softc {
 #define ET_UNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx)
 #define ET_LOCK_ASSERT(_sc)	mtx_assert(&(_sc)->sc_mtx, MA_OWNED)
 
-#define ET_FLAG_TXRX_ENABLED	0x1
-#define ET_FLAG_JUMBO		0x2
+#define ET_FLAG_PCIE		0x0001
+#define ET_FLAG_MSI		0x0002
+#define ET_FLAG_TXRX_ENABLED	0x0100
+#define ET_FLAG_JUMBO		0x0200
 
 #endif	/* !_IF_ETVAR_H */
diff --git a/sys/dev/exca/excareg.h b/sys/dev/exca/excareg.h
index 3bb3b4c9474..c445efe6058 100644
--- a/sys/dev/exca/excareg.h
+++ b/sys/dev/exca/excareg.h
@@ -355,7 +355,7 @@
 /* #define	EXCA_RESERVED			0x3E */
 /* #define	EXCA_RESERVED			0x3F */
 
-/* cardbus extensions - memory window page registers */
+/* CardBus extensions - memory window page registers */
 
 #define	EXCA_MEMREG_WIN_SHIFT			24
 #define	EXCA_SYSMEM_ADDR0_WIN			0x40
diff --git a/sys/dev/fatm/if_fatm.c b/sys/dev/fatm/if_fatm.c
index 47a6443801b..18b619ac6b8 100644
--- a/sys/dev/fatm/if_fatm.c
+++ b/sys/dev/fatm/if_fatm.c
@@ -391,16 +391,14 @@ fatm_check_heartbeat(struct fatm_softc *sc)
  * Ensure that the heart is still beating.
  */
 static void
-fatm_watchdog(struct ifnet *ifp)
+fatm_watchdog(void *arg)
 {
-	struct fatm_softc *sc = ifp->if_softc;
+	struct fatm_softc *sc;
 
-	FATM_LOCK(sc);
-	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
-		fatm_check_heartbeat(sc);
-		ifp->if_timer = 5;
-	}
-	FATM_UNLOCK(sc);
+	sc = arg;
+	FATM_CHECKLOCK(sc);
+	fatm_check_heartbeat(sc);
+	callout_reset(&sc->watchdog_timer, hz * 5, fatm_watchdog, sc);
 }
 
 /*
@@ -474,7 +472,7 @@ fatm_stop(struct fatm_softc *sc)
 	(void)fatm_reset(sc);
 
 	/* stop watchdog */
-	sc->ifp->if_timer = 0;
+	callout_stop(&sc->watchdog_timer);
 
 	if (sc->ifp->if_drv_flags & IFF_DRV_RUNNING) {
 		sc->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
@@ -1341,7 +1339,7 @@ fatm_init_locked(struct fatm_softc *sc)
 	/*
 	 * Start the watchdog timer
 	 */
-	sc->ifp->if_timer = 5;
+	callout_reset(&sc->watchdog_timer, hz * 5, fatm_watchdog, sc);
 
 	/* start SUNI */
 	utopia_start(&sc->utopia);
@@ -2543,6 +2541,7 @@ fatm_detach(device_t dev)
 		FATM_UNLOCK(sc);
 		atm_ifdetach(sc->ifp);		/* XXX race */
 	}
+	callout_drain(&sc->watchdog_timer);
 
 	if (sc->ih != NULL)
 		bus_teardown_intr(dev, sc->irqres, sc->ih);
@@ -2784,6 +2783,7 @@ fatm_attach(device_t dev)
 	cv_init(&sc->cv_regs, "fatm_regs");
 
 	sysctl_ctx_init(&sc->sysctl_ctx);
+	callout_init_mtx(&sc->watchdog_timer, &sc->mtx, 0);
 
 	/*
 	 * Make the sysctl tree
@@ -2824,7 +2824,6 @@ fatm_attach(device_t dev)
 	ifp->if_flags = IFF_SIMPLEX;
 	ifp->if_ioctl = fatm_ioctl;
 	ifp->if_start = fatm_start;
-	ifp->if_watchdog = fatm_watchdog;
 	ifp->if_init = fatm_init;
 	ifp->if_linkmib = &IFP2IFATM(sc->ifp)->mib;
 	ifp->if_linkmiblen = sizeof(IFP2IFATM(sc->ifp)->mib);
diff --git a/sys/dev/fatm/if_fatmvar.h b/sys/dev/fatm/if_fatmvar.h
index 697e91543bd..bcd87599eab 100644
--- a/sys/dev/fatm/if_fatmvar.h
+++ b/sys/dev/fatm/if_fatmvar.h
@@ -188,6 +188,7 @@ struct fatm_softc {
 	struct ifnet	*ifp;		/* common part */
 	struct mtx	mtx;		/* lock this structure */
 	struct ifmedia	media;		/* media */
+	struct callout	watchdog_timer;
 
 	int		init_state;	/* initialisation step */
 	int		memid;		/* resource id for card memory */
diff --git a/sys/dev/fb/creator.c b/sys/dev/fb/creator.c
index 3abaa1ddce8..135fd3dedbb 100644
--- a/sys/dev/fb/creator.c
+++ b/sys/dev/fb/creator.c
@@ -692,8 +692,8 @@ creator_blank_display(video_adapter_t *adp, int mode)
 }
 
 static int
-creator_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
-    int prot)
+creator_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
 
 	return (EINVAL);
@@ -1048,8 +1048,8 @@ creator_fb_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int flags,
 }
 
 static int
-creator_fb_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
-    int prot)
+creator_fb_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
 	struct creator_softc *sc;
 	int i;
diff --git a/sys/dev/fb/fb.c b/sys/dev/fb/fb.c
index 21871f69e78..09fcebcb299 100644
--- a/sys/dev/fb/fb.c
+++ b/sys/dev/fb/fb.c
@@ -511,10 +511,10 @@ int genfbioctl(genfb_softc_t *sc, video_adapter_t *adp, u_long cmd,
 	return error;
 }
 
-int genfbmmap(genfb_softc_t *sc, video_adapter_t *adp, vm_offset_t offset,
-	      vm_offset_t *paddr, int prot)
+int genfbmmap(genfb_softc_t *sc, video_adapter_t *adp, vm_ooffset_t offset,
+	      vm_offset_t *paddr, int prot, vm_memattr_t *memattr)
 {
-	return vidd_mmap(adp, offset, paddr, prot);
+	return vidd_mmap(adp, offset, paddr, prot, memattr);
 }
 
 #endif /* FB_INSTALL_CDEV */
diff --git a/sys/dev/fb/fbreg.h b/sys/dev/fb/fbreg.h
index 0be91d3abd4..aabe3e36f5d 100644
--- a/sys/dev/fb/fbreg.h
+++ b/sys/dev/fb/fbreg.h
@@ -131,8 +131,8 @@ typedef int vi_blank_display_t(video_adapter_t *adp, int mode);
 #define V_DISPLAY_STAND_BY	2
 #define V_DISPLAY_SUSPEND	3
 */
-typedef int vi_mmap_t(video_adapter_t *adp, vm_offset_t offset,
-		      vm_paddr_t *paddr, int prot);
+typedef int vi_mmap_t(video_adapter_t *adp, vm_ooffset_t offset,
+		      vm_paddr_t *paddr, int prot, vm_memattr_t *memattr);
 typedef int vi_ioctl_t(video_adapter_t *adp, u_long cmd, caddr_t data);
 typedef int vi_clear_t(video_adapter_t *adp);
 typedef int vi_fill_rect_t(video_adapter_t *adp, int val, int x, int y,
@@ -228,8 +228,9 @@ typedef struct video_switch {
 	    (height), (celsize), (blink))
 #define vidd_blank_display(adp, mode)					\
 	(*vidsw[(adp)->va_index]->blank_display)((adp), (mode))
-#define vidd_mmap(adp, offset, paddr, prot)				\
-	(*vidsw[(adp)->va_index]->mmap)((adp), (offset), (paddr), (prot))
+#define vidd_mmap(adp, offset, paddr, prot, memattr)			\
+	(*vidsw[(adp)->va_index]->mmap)((adp), (offset), (paddr),	\
+	    (prot), (memattr))
 #define vidd_ioctl(adp, cmd, data)					\
 	(*vidsw[(adp)->va_index]->ioctl)((adp), (cmd), (data))
 #define vidd_clear(adp)							\
@@ -317,7 +318,8 @@ int		genfbwrite(genfb_softc_t *sc, video_adapter_t *adp,
 int		genfbioctl(genfb_softc_t *sc, video_adapter_t *adp,
 			   u_long cmd, caddr_t arg, int flag, struct thread *td);
 int		genfbmmap(genfb_softc_t *sc, video_adapter_t *adp,
-			  vm_offset_t offset, vm_offset_t *paddr, int prot);
+			  vm_ooffset_t offset, vm_offset_t *paddr,
+			  int prot, vm_memattr_t *memattr);
 
 #endif /* FB_INSTALL_CDEV */
 
diff --git a/sys/dev/fb/machfb.c b/sys/dev/fb/machfb.c
index a9574f35820..dad41d86ba7 100644
--- a/sys/dev/fb/machfb.c
+++ b/sys/dev/fb/machfb.c
@@ -837,8 +837,8 @@ machfb_blank_display(video_adapter_t *adp, int mode)
 }
 
 static int
-machfb_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
-    int prot)
+machfb_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
 	struct machfb_softc *sc;
 	video_info_t *vi;
diff --git a/sys/dev/fb/s3_pci.c b/sys/dev/fb/s3_pci.c
index cfddf3041f0..cd70774f950 100644
--- a/sys/dev/fb/s3_pci.c
+++ b/sys/dev/fb/s3_pci.c
@@ -388,10 +388,10 @@ s3lfb_blank_display(video_adapter_t *adp, int mode)
 }
 
 static int
-s3lfb_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
-	  int prot)
+s3lfb_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
+	  int prot, vm_memattr_t *memattr)
 {
-	return (*prevvidsw->mmap)(adp, offset, paddr, prot);
+	return (*prevvidsw->mmap)(adp, offset, paddr, prot, memattr);
 }
 
 static int
diff --git a/sys/dev/fb/vesa.c b/sys/dev/fb/vesa.c
index 36b05f84bac..96b9943dccc 100644
--- a/sys/dev/fb/vesa.c
+++ b/sys/dev/fb/vesa.c
@@ -250,8 +250,8 @@ vesa_bios_post(void)
 	dc = devclass_find("vgapci");
 	if (dc != NULL && devclass_get_devices(dc, &devs, &count) == 0) {
 		for (dev = NULL, i = 0; dev == NULL && i < count; devs++, i++)
-			if (x86bios_match_device(0xc0000, *devs) &&
-			    device_get_flags(*devs) != 0) {
+			if (device_get_flags(*devs) != 0 &&
+			    x86bios_match_device(0xc0000, *devs)) {
 				dev = *devs;
 				is_pci = 1;
 				break;
@@ -1528,12 +1528,12 @@ vesa_blank_display(video_adapter_t *adp, int mode)
 }
 
 static int
-vesa_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
-	  int prot)
+vesa_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
+	  int prot, vm_memattr_t *memattr)
 {
 
 #if VESA_DEBUG > 0
-	printf("vesa_mmap(): window:0x%tx, buffer:0x%tx, offset:0x%tx\n", 
+	printf("vesa_mmap(): window:0x%tx, buffer:0x%tx, offset:0x%jx\n", 
 	       adp->va_info.vi_window, adp->va_info.vi_buffer, offset);
 #endif
 
@@ -1546,7 +1546,7 @@ vesa_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
 		*paddr = adp->va_info.vi_buffer + offset;
 		return (0);
 	}
-	return ((*prevvidsw->mmap)(adp, offset, paddr, prot));
+	return ((*prevvidsw->mmap)(adp, offset, paddr, prot, memattr));
 }
 
 static int
diff --git a/sys/dev/fb/vga.c b/sys/dev/fb/vga.c
index 0cae0ae5059..7d702ad2b8e 100644
--- a/sys/dev/fb/vga.c
+++ b/sys/dev/fb/vga.c
@@ -144,10 +144,10 @@ vga_ioctl(struct cdev *dev, vga_softc_t *sc, u_long cmd, caddr_t arg, int flag,
 }
 
 int
-vga_mmap(struct cdev *dev, vga_softc_t *sc, vm_offset_t offset, vm_offset_t *paddr,
-	 int prot)
+vga_mmap(struct cdev *dev, vga_softc_t *sc, vm_ooffset_t offset,
+    vm_offset_t *paddr, int prot, vm_memattr_t *memattr)
 {
-	return genfbmmap(&sc->gensc, sc->adp, offset, paddr, prot);
+	return genfbmmap(&sc->gensc, sc->adp, offset, paddr, prot, memattr);
 }
 
 #endif /* FB_INSTALL_CDEV */
@@ -2465,8 +2465,8 @@ vga_blank_display(video_adapter_t *adp, int mode)
  * all adapters
  */
 static int
-vga_mmap_buf(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
-   	     int prot)
+vga_mmap_buf(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
+   	     int prot, vm_memattr_t *memattr)
 {
     if (adp->va_info.vi_flags & V_INFO_LINEAR)
 	return -1;
diff --git a/sys/dev/fb/vgareg.h b/sys/dev/fb/vgareg.h
index 8f23a83caac..249d32c5957 100644
--- a/sys/dev/fb/vgareg.h
+++ b/sys/dev/fb/vgareg.h
@@ -69,7 +69,6 @@
 struct video_adapter;
 typedef struct vga_softc {
 	struct video_adapter	*adp;
-	device_t		pci_dev;
 	void			*state_buf;
 	void			*pal_buf;
 #ifdef FB_INSTALL_CDEV
@@ -89,8 +88,8 @@ int		vga_read(struct cdev *dev, vga_softc_t *sc, struct uio *uio, int flag);
 int		vga_write(struct cdev *dev, vga_softc_t *sc, struct uio *uio, int flag);
 int		vga_ioctl(struct cdev *dev, vga_softc_t *sc, u_long cmd, caddr_t arg,
 			  int flag, struct thread *td);
-int		vga_mmap(struct cdev *dev, vga_softc_t *sc, vm_offset_t offset,
-			 vm_offset_t *paddr, int prot);
+int		vga_mmap(struct cdev *dev, vga_softc_t *sc, vm_ooffset_t offset,
+			 vm_offset_t *paddr, int prot, vm_memattr_t *memattr);
 #endif
 
 extern int	(*vga_sub_configure)(int flags);
diff --git a/sys/dev/fdc/fdc_acpi.c b/sys/dev/fdc/fdc_acpi.c
index 79fa66b93a1..97ec9cb3e5e 100644
--- a/sys/dev/fdc/fdc_acpi.c
+++ b/sys/dev/fdc/fdc_acpi.c
@@ -97,9 +97,7 @@ fdc_acpi_attach(device_t dev)
 	struct fdc_data *sc;
 	ACPI_BUFFER buf;
 	device_t bus;
-	int error, fde_count, i;
-	ACPI_OBJECT *obj, *pkg;
-	uint32_t fde[ACPI_FDC_MAXDEVS];
+	int error;
 
 	/* Get our softc and use the same accessor as ISA. */
 	sc = device_get_softc(dev);
@@ -128,63 +126,12 @@ fdc_acpi_attach(device_t dev)
 	 */
 	bus = device_get_parent(dev);
 	if (ACPI_FAILURE(ACPI_EVALUATE_OBJECT(bus, dev, "_FDE", NULL, &buf))) {
-		error = ENXIO;
-		goto out_hintsprobe;
-	}
-
-	/* Parse the output of _FDE in various ways. */
-	obj = pkg = (ACPI_OBJECT *)buf.Pointer;
-	switch (obj->Type) {
-	case ACPI_TYPE_BUFFER:
-		/*
-		 * The spec says _FDE should be a buffer of five 32-bit
-		 * integers.  In violation of the spec, some systems use
-		 * five bytes instead.
-		 */
-		switch (obj->Buffer.Length) {
-		case ACPI_FDC_FDE_LEN:
-			bcopy(obj->Buffer.Pointer, fde, ACPI_FDC_FDE_LEN);
-			break;
-		case ACPI_FDC_MAXDEVS:
-			for (i = 0; i < ACPI_FDC_MAXDEVS; i++)
-				fde[i] = ((uint8_t *)obj->Buffer.Pointer)[i];
-			break;
-		default:
-			device_printf(dev, "_FDE wrong length: %d\n",
-			    obj->Buffer.Length);
-			error = ENXIO;
-			goto out_hintsprobe;
-		}
-		break;
-	case ACPI_TYPE_PACKAGE:
-		/*
-		 * In violation of the spec, systems including the ASUS
-		 * K8V return a package of five integers instead of a
-		 * buffer of five 32-bit integers.
-		 */
-		fde_count = min(ACPI_FDC_MAXDEVS, pkg->Package.Count);
-		for (i = 0; i < fde_count; i++) {
-			obj = &pkg->Package.Elements[i];
-			if (obj->Type == ACPI_TYPE_INTEGER)
-				fde[i] = (uint32_t)obj->Integer.Value;
-		}
-		break;
-	default:
-		device_printf(dev, "invalid _FDE type %d\n", obj->Type);
-		error = ENXIO;
-		goto out_hintsprobe;
+		error = fdc_hints_probe(dev);
+		goto out;
 	}
 
 	/* Add fd child devices as specified. */
-	error = fdc_acpi_probe_children(bus, dev, fde);
-
-out_hintsprobe:
-	/*
-	 * If there was a problem with the _FDE drive enumeration, fall
-	 * back to the hints-based probe.
-	 */
-	if (error)
-		error = fdc_hints_probe(dev);
+	error = fdc_acpi_probe_children(bus, dev, buf.Pointer);
 
 out:
 	if (buf.Pointer)
diff --git a/sys/dev/fe/if_fe_pccard.c b/sys/dev/fe/if_fe_pccard.c
index e1cb10d6476..ee101c641ca 100644
--- a/sys/dev/fe/if_fe_pccard.c
+++ b/sys/dev/fe/if_fe_pccard.c
@@ -306,7 +306,7 @@ fe_pccard_xircom_mac(const struct pccard_tuple *tuple, void *argp)
  * Probe and initialization for TDK/CONTEC PCMCIA Ethernet interface.
  * by MASUI Kenji 
  *
- * (Contec uses TDK Ethenet chip -- hosokawa)
+ * (Contec uses TDK Ethernet chip -- hosokawa)
  *
  * This version of fe_probe_tdk has been rewrote to handle
  * *generic* PC Card implementation of Fujitsu MB8696x family.  The
diff --git a/sys/dev/firewire/fwdev.c b/sys/dev/firewire/fwdev.c
index 0facb6e3963..1475d00e3c3 100644
--- a/sys/dev/firewire/fwdev.c
+++ b/sys/dev/firewire/fwdev.c
@@ -884,7 +884,8 @@ static int
 #if defined(__DragonFly__) || __FreeBSD_version < 500102
 fw_mmap (struct cdev *dev, vm_offset_t offset, int nproto)
 #else
-fw_mmap (struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nproto)
+fw_mmap (struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nproto, vm_memattr_t *memattr)
 #endif
 {  
 
@@ -892,7 +893,7 @@ fw_mmap (struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nproto)
 #if defined(__DragonFly__) || __FreeBSD_version < 500102
 		return fwmem_mmap(dev, offset, nproto);
 #else
-		return fwmem_mmap(dev, offset, paddr, nproto);
+		return fwmem_mmap(dev, offset, paddr, nproto, memattr);
 #endif
 
 	return EINVAL;
diff --git a/sys/dev/firewire/fwmem.c b/sys/dev/firewire/fwmem.c
index f0aa7ae33cd..179968221d8 100644
--- a/sys/dev/firewire/fwmem.c
+++ b/sys/dev/firewire/fwmem.c
@@ -445,7 +445,8 @@ int
 #if defined(__DragonFly__) || __FreeBSD_version < 500102
 fwmem_mmap (struct cdev *dev, vm_offset_t offset, int nproto)
 #else
-fwmem_mmap (struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nproto)
+fwmem_mmap (struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nproto, vm_memattr_t *memattr)
 #endif
 {  
 	return EINVAL;
diff --git a/sys/dev/hatm/if_hatm.c b/sys/dev/hatm/if_hatm.c
index 325e5325c76..5344fe49eeb 100644
--- a/sys/dev/hatm/if_hatm.c
+++ b/sys/dev/hatm/if_hatm.c
@@ -1325,6 +1325,7 @@ kenv_getuint(struct hatm_softc *sc, const char *var,
 		freeenv(val);
 		return (EINVAL);
 	}
+	freeenv(val);
 	if (bootverbose)
 		if_printf(sc->ifp, "%s=%u\n", full, u);
 	*ptr = u;
diff --git a/sys/dev/hifn/hifn7751.c b/sys/dev/hifn/hifn7751.c
index c227f771a34..bd1173ee3e7 100644
--- a/sys/dev/hifn/hifn7751.c
+++ b/sys/dev/hifn/hifn7751.c
@@ -2929,8 +2929,8 @@ hifn_write_reg_1(struct hifn_softc *sc, bus_size_t reg, u_int32_t val)
  *
  */
 static int
-vulcanpk_mmap(struct cdev *dev, vm_offset_t offset,
-	      vm_paddr_t *paddr, int nprot)
+vulcanpk_mmap(struct cdev *dev, vm_ooffset_t offset,
+	      vm_paddr_t *paddr, int nprot, vm_memattr_t *memattr)
 {
 	struct hifn_softc *sc;
 	vm_paddr_t pd;
@@ -2942,7 +2942,8 @@ vulcanpk_mmap(struct cdev *dev, vm_offset_t offset,
 	b = rman_get_virtual(sc->sc_bar1res);
 
 #if 0
-	printf("vpk mmap: %p(%08x) offset=%d\n", b, pd, offset);
+	printf("vpk mmap: %p(%016llx) offset=%lld\n", b,
+	    (unsigned long long)pd, offset);
 	hexdump(b, HIFN_1_PUB_MEMEND, "vpk", 0);
 #endif
 
diff --git a/sys/dev/hwpmc/hwpmc_arm.c b/sys/dev/hwpmc/hwpmc_arm.c
index ce1caf69e10..86cfaf3cd93 100644
--- a/sys/dev/hwpmc/hwpmc_arm.c
+++ b/sys/dev/hwpmc/hwpmc_arm.c
@@ -30,19 +30,28 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
+#include 
 
 #include 
+#include 
 
 struct pmc_mdep *
 pmc_md_initialize()
 {
-	return NULL;
+	if (cpu_class == CPU_CLASS_XSCALE)
+		return pmc_xscale_initialize();
+	else
+		return NULL;
 }
 
 void
 pmc_md_finalize(struct pmc_mdep *md)
 {
-	(void) md;
+	if (cpu_class == CPU_CLASS_XSCALE)
+		pmc_xscale_finalize(md);
+	else
+		KASSERT(0, ("[arm,%d] Unknown CPU Class 0x%x", __LINE__,
+		    cpu_class));
 }
 
 int
diff --git a/sys/dev/hwpmc/hwpmc_core.c b/sys/dev/hwpmc/hwpmc_core.c
index b6de04dfce8..43a49143fc3 100644
--- a/sys/dev/hwpmc/hwpmc_core.c
+++ b/sys/dev/hwpmc/hwpmc_core.c
@@ -669,7 +669,7 @@ static struct iap_event_descr iap_events[] = {
     IAPDESCR(3CH_01H, 0x3C, 0x01, IAP_F_FM | IAP_F_ALLCPUS),
     IAPDESCR(3CH_02H, 0x3C, 0x02, IAP_F_FM | IAP_F_ALLCPUS),
 
-    IAPDESCR(40H, 0x40, IAP_M_MESI, IAP_F_CC),
+    IAPDESCR(40H, 0x40, IAP_M_MESI, IAP_F_CC | IAP_F_CC2),
     IAPDESCR(40H_21H, 0x40, 0x21, IAP_F_FM | IAP_F_CA),
 
     IAPDESCR(41H, 0x41, IAP_M_MESI, IAP_F_CC | IAP_F_CC2),
@@ -1419,17 +1419,17 @@ iap_allocate_pmc(int cpu, int ri, struct pmc *pm,
 
 		mask = 0;
 
-		if (ie->iap_flags & IAP_M_CORE) {
+		if (ie->iap_umask & IAP_M_CORE) {
 			if ((c = (config & IAP_F_CORE)) != IAP_CORE_ALL &&
 			    c != IAP_CORE_THIS)
 				return (EINVAL);
 			mask |= IAP_F_CORE;
 		}
 
-		if (ie->iap_flags & IAP_M_AGENT)
+		if (ie->iap_umask & IAP_M_AGENT)
 			mask |= IAP_F_AGENT;
 
-		if (ie->iap_flags & IAP_M_PREFETCH) {
+		if (ie->iap_umask & IAP_M_PREFETCH) {
 
 			if ((c = (config & IAP_F_PREFETCH)) ==
 			    IAP_PREFETCH_RESERVED)
@@ -1438,16 +1438,16 @@ iap_allocate_pmc(int cpu, int ri, struct pmc *pm,
 			mask |= IAP_F_PREFETCH;
 		}
 
-		if (ie->iap_flags & IAP_M_MESI)
+		if (ie->iap_umask & IAP_M_MESI)
 			mask |= IAP_F_MESI;
 
-		if (ie->iap_flags & IAP_M_SNOOPRESPONSE)
+		if (ie->iap_umask & IAP_M_SNOOPRESPONSE)
 			mask |= IAP_F_SNOOPRESPONSE;
 
-		if (ie->iap_flags & IAP_M_SNOOPTYPE)
+		if (ie->iap_umask & IAP_M_SNOOPTYPE)
 			mask |= IAP_F_SNOOPTYPE;
 
-		if (ie->iap_flags & IAP_M_TRANSITION)
+		if (ie->iap_umask & IAP_M_TRANSITION)
 			mask |= IAP_F_TRANSITION;
 
 		/*
diff --git a/sys/dev/hwpmc/hwpmc_intel.c b/sys/dev/hwpmc/hwpmc_intel.c
index cb2834faa35..e953f689f8b 100644
--- a/sys/dev/hwpmc/hwpmc_intel.c
+++ b/sys/dev/hwpmc/hwpmc_intel.c
@@ -131,6 +131,8 @@ pmc_intel_initialize(void)
 			nclasses = 3;
 			break;
 		case 0x1A:
+		case 0x1E:	/* Per Intel document 253669-032 9/2009, pages A-2 and A-57 */
+		case 0x1F:	/* Per Intel document 253669-032 9/2009, pages A-2 and A-57 */
 			cputype = PMC_CPU_INTEL_COREI7;
 			nclasses = 3;
 			break;
diff --git a/sys/dev/hwpmc/hwpmc_logging.c b/sys/dev/hwpmc/hwpmc_logging.c
index cfb055b37ab..a36a8dc7e72 100644
--- a/sys/dev/hwpmc/hwpmc_logging.c
+++ b/sys/dev/hwpmc/hwpmc_logging.c
@@ -240,6 +240,7 @@ pmclog_loop(void *arg)
 	int error;
 	struct pmc_owner *po;
 	struct pmclog_buffer *lb;
+	struct proc *p;
 	struct ucred *ownercred;
 	struct ucred *mycred;
 	struct thread *td;
@@ -248,12 +249,13 @@ pmclog_loop(void *arg)
 	size_t nbytes;
 
 	po = (struct pmc_owner *) arg;
+	p = po->po_owner;
 	td = curthread;
 	mycred = td->td_ucred;
 
-	PROC_LOCK(po->po_owner);
-	ownercred = crhold(po->po_owner->p_ucred);
-	PROC_UNLOCK(po->po_owner);
+	PROC_LOCK(p);
+	ownercred = crhold(p->p_ucred);
+	PROC_UNLOCK(p);
 
 	PMCDBG(LOG,INI,1, "po=%p kt=%p", po, po->po_kthread);
 	KASSERT(po->po_kthread == curthread->td_proc,
@@ -324,16 +326,16 @@ pmclog_loop(void *arg)
 		error = fo_write(po->po_file, &auio, ownercred, 0, td);
 		td->td_ucred = mycred;
 
-		mtx_lock(&pmc_kthread_mtx);
-
 		if (error) {
 			/* XXX some errors are recoverable */
 			/* XXX also check for SIGPIPE if a socket */
 
 			/* send a SIGIO to the owner and exit */
-			PROC_LOCK(po->po_owner);
-			psignal(po->po_owner, SIGIO);
-			PROC_UNLOCK(po->po_owner);
+			PROC_LOCK(p);
+			psignal(p, SIGIO);
+			PROC_UNLOCK(p);
+
+			mtx_lock(&pmc_kthread_mtx);
 
 			po->po_error = error; /* save for flush log */
 
@@ -342,6 +344,8 @@ pmclog_loop(void *arg)
 			break;
 		}
 
+		mtx_lock(&pmc_kthread_mtx);
+
 		/* put the used buffer back into the global pool */
 		PMCLOG_INIT_BUFFER_DESCRIPTOR(lb);
 
@@ -525,15 +529,20 @@ static void
 pmclog_stop_kthread(struct pmc_owner *po)
 {
 	/*
-	 * Unset flag, wakeup the helper thread,
+	 * Close the file to force the thread out of fo_write,
+	 * unset flag, wakeup the helper thread,
 	 * wait for it to exit
 	 */
 
-	mtx_assert(&pmc_kthread_mtx, MA_OWNED);
+	if (po->po_file != NULL)
+		fo_close(po->po_file, curthread);
+
+	mtx_lock(&pmc_kthread_mtx);
 	po->po_flags &= ~PMC_PO_OWNS_LOGFILE;
 	wakeup_one(po);
 	if (po->po_kthread)
 		msleep(po->po_kthread, &pmc_kthread_mtx, PPAUSE, "pmckstp", 0);
+	mtx_unlock(&pmc_kthread_mtx);
 }
 
 /*
@@ -602,10 +611,8 @@ pmclog_configure_log(struct pmc_mdep *md, struct pmc_owner *po, int logfd)
 
  error:
 	/* shutdown the thread */
-	mtx_lock(&pmc_kthread_mtx);
 	if (po->po_kthread)
 		pmclog_stop_kthread(po);
-	mtx_unlock(&pmc_kthread_mtx);
 
 	KASSERT(po->po_kthread == NULL, ("[pmclog,%d] po=%p kthread not "
 	    "stopped", __LINE__, po));
@@ -641,10 +648,8 @@ pmclog_deconfigure_log(struct pmc_owner *po)
 	    ("[pmclog,%d] po=%p no log file", __LINE__, po));
 
 	/* stop the kthread, this will reset the 'OWNS_LOGFILE' flag */
-	mtx_lock(&pmc_kthread_mtx);
 	if (po->po_kthread)
 		pmclog_stop_kthread(po);
-	mtx_unlock(&pmc_kthread_mtx);
 
 	KASSERT(po->po_kthread == NULL,
 	    ("[pmclog,%d] po=%p kthread not stopped", __LINE__, po));
diff --git a/sys/dev/hwpmc/hwpmc_mod.c b/sys/dev/hwpmc/hwpmc_mod.c
index d2e581aeb53..d331a85eafd 100644
--- a/sys/dev/hwpmc/hwpmc_mod.c
+++ b/sys/dev/hwpmc/hwpmc_mod.c
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -63,6 +64,12 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
+#include 
+#include 
+#include 
+#include 
+#include 
+
 /*
  * Types
  */
@@ -1401,7 +1408,7 @@ pmc_process_csw_out(struct thread *td)
 
 			tmp = newvalue - PMC_PCPU_SAVED(cpu,ri);
 
-			PMCDBG(CSW,SWI,1,"cpu=%d ri=%d tmp=%jd", cpu, ri,
+			PMCDBG(CSW,SWO,1,"cpu=%d ri=%d tmp=%jd", cpu, ri,
 			    tmp);
 
 			if (mode == PMC_MODE_TS) {
@@ -1619,6 +1626,156 @@ pmc_log_kernel_mappings(struct pmc *pm)
 static void
 pmc_log_process_mappings(struct pmc_owner *po, struct proc *p)
 {
+	int locked;
+	vm_map_t map;
+	struct vnode *vp;
+	struct vmspace *vm;
+	vm_map_entry_t entry;
+	vm_offset_t last_end;
+	u_int last_timestamp;
+	struct vnode *last_vp;
+	vm_offset_t start_addr;
+	vm_object_t obj, lobj, tobj;
+	char *fullpath, *freepath;
+
+	last_vp = NULL;
+	last_end = (vm_offset_t) 0;
+	fullpath = freepath = NULL;
+
+	if ((vm = vmspace_acquire_ref(p)) == NULL)
+		return;
+
+	map = &vm->vm_map;
+	vm_map_lock_read(map);
+
+	for (entry = map->header.next; entry != &map->header; entry = entry->next) {
+
+		if (entry == NULL) {
+			PMCDBG(LOG,OPS,2, "hwpmc: vm_map entry unexpectedly "
+			    "NULL! pid=%d vm_map=%p\n", p->p_pid, map);
+			break;
+		}
+
+		/*
+		 * We only care about executable map entries.
+		 */
+		if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) ||
+		    !(entry->protection & VM_PROT_EXECUTE) ||
+		    (entry->object.vm_object == NULL)) {
+			continue;
+		}
+
+		obj = entry->object.vm_object;
+		VM_OBJECT_LOCK(obj);
+
+		/* 
+		 * Walk the backing_object list to find the base
+		 * (non-shadowed) vm_object.
+		 */
+		for (lobj = tobj = obj; tobj != NULL; tobj = tobj->backing_object) {
+			if (tobj != obj)
+				VM_OBJECT_LOCK(tobj);
+			if (lobj != obj)
+				VM_OBJECT_UNLOCK(lobj);
+			lobj = tobj;
+		}
+
+		/*
+		 * At this point lobj is the base vm_object and it is locked.
+		 */
+		if (lobj == NULL) {
+			PMCDBG(LOG,OPS,2, "hwpmc: lobj unexpectedly NULL! pid=%d "
+			    "vm_map=%p vm_obj=%p\n", p->p_pid, map, obj);
+			VM_OBJECT_UNLOCK(obj);
+			continue;
+		}
+
+		if (lobj->type != OBJT_VNODE || lobj->handle == NULL) {
+			if (lobj != obj)
+				VM_OBJECT_UNLOCK(lobj);
+			VM_OBJECT_UNLOCK(obj);
+			continue;
+		}
+
+		/*
+		 * Skip contiguous regions that point to the same
+		 * vnode, so we don't emit redundant MAP-IN
+		 * directives.
+		 */
+		if (entry->start == last_end && lobj->handle == last_vp) {
+			last_end = entry->end;
+			if (lobj != obj)
+				VM_OBJECT_UNLOCK(lobj);
+			VM_OBJECT_UNLOCK(obj);
+			continue;
+		}
+
+		/* 
+		 * We don't want to keep the proc's vm_map or this
+		 * vm_object locked while we walk the pathname, since
+		 * vn_fullpath() can sleep.  However, if we drop the
+		 * lock, it's possible for concurrent activity to
+		 * modify the vm_map list.  To protect against this,
+		 * we save the vm_map timestamp before we release the
+		 * lock, and check it after we reacquire the lock
+		 * below.
+		 */
+		start_addr = entry->start;
+		last_end = entry->end;
+		last_timestamp = map->timestamp;
+		vm_map_unlock_read(map);
+
+		vp = lobj->handle;
+		vref(vp);
+		if (lobj != obj)
+			VM_OBJECT_UNLOCK(lobj);
+
+		VM_OBJECT_UNLOCK(obj);
+
+		freepath = NULL;
+		pmc_getfilename(vp, &fullpath, &freepath);
+		last_vp = vp;
+
+		locked = VFS_LOCK_GIANT(vp->v_mount);
+		vrele(vp);
+		VFS_UNLOCK_GIANT(locked);
+
+		vp = NULL;
+		pmclog_process_map_in(po, p->p_pid, start_addr, fullpath);
+		if (freepath)
+			free(freepath, M_TEMP);
+
+		vm_map_lock_read(map);
+
+		/*
+		 * If our saved timestamp doesn't match, this means
+		 * that the vm_map was modified out from under us and
+		 * we can't trust our current "entry" pointer.  Do a
+		 * new lookup for this entry.  If there is no entry
+		 * for this address range, vm_map_lookup_entry() will
+		 * return the previous one, so we always want to go to
+		 * entry->next on the next loop iteration.
+		 * 
+		 * There is an edge condition here that can occur if
+		 * there is no entry at or before this address.  In
+		 * this situation, vm_map_lookup_entry returns
+		 * &map->header, which would cause our loop to abort
+		 * without processing the rest of the map.  However,
+		 * in practice this will never happen for process
+		 * vm_map.  This is because the executable's text
+		 * segment is the first mapping in the proc's address
+		 * space, and this mapping is never removed until the
+		 * process exits, so there will always be a non-header
+		 * entry at or before the requested address for
+		 * vm_map_lookup_entry to return.
+		 */
+		if (map->timestamp != last_timestamp)
+			vm_map_lookup_entry(map, last_end - 1, &entry);
+	}
+
+	vm_map_unlock_read(map);
+	vmspace_free(vm);
+	return;
 }
 
 /*
@@ -1897,7 +2054,7 @@ pmc_allocate_owner_descriptor(struct proc *p)
 
 	/* allocate space for N pointers and one descriptor struct */
 	po = malloc(sizeof(struct pmc_owner), M_PMC, M_WAITOK|M_ZERO);
-	po->po_sscount = po->po_error = po->po_flags = 0;
+	po->po_sscount = po->po_error = po->po_flags = po->po_logprocmaps = 0;
 	po->po_file  = NULL;
 	po->po_owner = p;
 	po->po_kthread = NULL;
@@ -2520,8 +2677,15 @@ pmc_start(struct pmc *pm)
 		po->po_sscount++;
 	}
 
-	/* Log mapping information for all processes in the system. */
-	pmc_log_all_process_mappings(po);
+	/*
+	 * Log mapping information for all existing processes in the
+	 * system.  Subsequent mappings are logged as they happen;
+	 * see pmc_process_mmap().
+	 */
+	if (po->po_logprocmaps == 0) {
+		pmc_log_all_process_mappings(po);
+		po->po_logprocmaps = 1;
+	}
 
 	/*
 	 * Move to the CPU associated with this
diff --git a/sys/dev/hwpmc/hwpmc_x86.c b/sys/dev/hwpmc/hwpmc_x86.c
index 09d04bb713e..8c98983b571 100644
--- a/sys/dev/hwpmc/hwpmc_x86.c
+++ b/sys/dev/hwpmc/hwpmc_x86.c
@@ -101,7 +101,7 @@ pmc_save_user_callchain(uintptr_t *cc, int nframes, struct trapframe *tf)
 		if (copyin((void *) sp, &pc, sizeof(pc)) != 0)
 			return (n);
 	} else if (copyin((void *) r, &pc, sizeof(pc)) != 0 ||
-	    copyin((void *) fp, &fp, sizeof(fp) != 0))
+	    copyin((void *) fp, &fp, sizeof(fp)) != 0)
 		return (n);
 
 	for (; n < nframes;) {
@@ -176,7 +176,8 @@ pmc_save_kernel_callchain(uintptr_t *cc, int nframes, struct trapframe *tf)
 	stackend = (uintptr_t) td->td_kstack + td->td_kstack_pages * PAGE_SIZE;
 
 	if (PMC_IN_TRAP_HANDLER(pc) ||
-	    !PMC_IN_KERNEL(pc) || !PMC_IN_KERNEL(r) ||
+	    !PMC_IN_KERNEL(pc) ||
+	    !PMC_IN_KERNEL_STACK(r, stackstart, stackend) ||
 	    !PMC_IN_KERNEL_STACK(sp, stackstart, stackend) ||
 	    !PMC_IN_KERNEL_STACK(fp, stackstart, stackend))
 		return (1);
@@ -221,7 +222,7 @@ pmc_save_kernel_callchain(uintptr_t *cc, int nframes, struct trapframe *tf)
 
 		r = fp + sizeof(uintptr_t);
 		if (!PMC_IN_KERNEL_STACK(fp, stackstart, stackend) ||
-		    !PMC_IN_KERNEL(r))
+		    !PMC_IN_KERNEL_STACK(r, stackstart, stackend))
 			break;
 		pc = *(uintptr_t *) r;
 		fp = *(uintptr_t *) fp;
diff --git a/sys/dev/hwpmc/hwpmc_xscale.c b/sys/dev/hwpmc/hwpmc_xscale.c
new file mode 100644
index 00000000000..466f3b638fa
--- /dev/null
+++ b/sys/dev/hwpmc/hwpmc_xscale.c
@@ -0,0 +1,678 @@
+/*-
+ * Copyright (c) 2009 Rui Paulo 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+/*
+ * Support for the Intel XScale network processors
+ *
+ * XScale processors have up to now three generations.
+ *
+ * The first generation has two PMC; the event selection, interrupt config
+ * and overflow flag setup are done by writing to the PMNC register.
+ * It also has less monitoring events than the latter generations.
+ *
+ * The second and third generatiosn have four PMCs, one register for the event
+ * selection, one register for the interrupt config and one register for
+ * the overflow flags.
+ */
+static int xscale_npmcs;
+static int xscale_gen;	/* XScale Core generation */
+
+struct xscale_event_code_map {
+	enum pmc_event	pe_ev;
+	uint8_t		pe_code;
+};
+
+const struct xscale_event_code_map xscale_event_codes[] = {
+	/* 1st and 2nd Generation XScale cores */
+	{ PMC_EV_XSCALE_IC_FETCH,		0x00 },
+	{ PMC_EV_XSCALE_IC_MISS,		0x01 },
+	{ PMC_EV_XSCALE_DATA_DEPENDENCY_STALLED,0x02 },
+	{ PMC_EV_XSCALE_ITLB_MISS,		0x03 },
+	{ PMC_EV_XSCALE_DTLB_MISS,		0x04 },
+	{ PMC_EV_XSCALE_BRANCH_RETIRED,		0x05 },
+	{ PMC_EV_XSCALE_BRANCH_MISPRED,		0x06 },
+	{ PMC_EV_XSCALE_INSTR_RETIRED,		0x07 },
+	{ PMC_EV_XSCALE_DC_FULL_CYCLE,		0x08 },
+	{ PMC_EV_XSCALE_DC_FULL_CONTIG, 	0x09 },
+	{ PMC_EV_XSCALE_DC_ACCESS,		0x0a },
+	{ PMC_EV_XSCALE_DC_MISS,		0x0b },
+	{ PMC_EV_XSCALE_DC_WRITEBACK,		0x0c },
+	{ PMC_EV_XSCALE_PC_CHANGE,		0x0d },
+	/* 3rd Generation XScale cores */
+	{ PMC_EV_XSCALE_BRANCH_RETIRED_ALL,	0x0e },
+	{ PMC_EV_XSCALE_INSTR_CYCLE,		0x0f },
+	{ PMC_EV_XSCALE_CP_STALL,		0x17 },
+	{ PMC_EV_XSCALE_PC_CHANGE_ALL,		0x18 },
+	{ PMC_EV_XSCALE_PIPELINE_FLUSH,		0x19 },
+	{ PMC_EV_XSCALE_BACKEND_STALL,		0x1a },
+	{ PMC_EV_XSCALE_MULTIPLIER_USE,		0x1b },
+	{ PMC_EV_XSCALE_MULTIPLIER_STALLED,	0x1c },
+	{ PMC_EV_XSCALE_DATA_CACHE_STALLED,	0x1e },
+	{ PMC_EV_XSCALE_L2_CACHE_REQ,		0x20 },
+	{ PMC_EV_XSCALE_L2_CACHE_MISS,		0x23 },
+	{ PMC_EV_XSCALE_ADDRESS_BUS_TRANS,	0x40 },
+	{ PMC_EV_XSCALE_SELF_ADDRESS_BUS_TRANS,	0x41 },
+	{ PMC_EV_XSCALE_DATA_BUS_TRANS,		0x48 },
+};
+
+const int xscale_event_codes_size =
+	sizeof(xscale_event_codes) / sizeof(xscale_event_codes[0]);
+
+/*
+ * Per-processor information.
+ */
+struct xscale_cpu {
+	struct pmc_hw   *pc_xscalepmcs;
+};
+
+static struct xscale_cpu **xscale_pcpu;
+
+/*
+ * Performance Monitor Control Register
+ */
+static __inline uint32_t
+xscale_pmnc_read(void)
+{
+	uint32_t reg;
+
+	__asm __volatile("mrc p14, 0, %0, c0, c1, 0" : "=r" (reg));
+
+	return (reg);
+}
+
+static __inline void
+xscale_pmnc_write(uint32_t reg)
+{
+	__asm __volatile("mcr p14, 0, %0, c0, c1, 0" : : "r" (reg));
+}
+
+/*
+ * Clock Counter Register
+ */
+static __inline uint32_t
+xscale_ccnt_read(void)
+{
+	uint32_t reg;
+
+	__asm __volatile("mrc p14, 0, %0, c1, c1, 0" : "=r" (reg));
+	
+	return (reg);
+}
+
+static __inline void
+xscale_ccnt_write(uint32_t reg)
+{
+	__asm __volatile("mcr p14, 0, %0, c1, c1, 0" : : "r" (reg));
+}
+
+/*
+ * Interrupt Enable Register
+ */
+static __inline uint32_t
+xscale_inten_read(void)
+{
+	uint32_t reg;
+
+	__asm __volatile("mrc p14, 0, %0, c4, c1, 0" : "=r" (reg));
+
+	return (reg);
+}
+
+static __inline void
+xscale_inten_write(uint32_t reg)
+{
+	__asm __volatile("mcr p14, 0, %0, c4, c1, 0" : : "r" (reg));
+}
+
+/*
+ * Overflow Flag Register
+ */
+static __inline uint32_t
+xscale_flag_read(void)
+{
+	uint32_t reg;
+
+	__asm __volatile("mrc p14, 0, %0, c5, c1, 0" : "=r" (reg));
+
+	return (reg);
+}
+
+static __inline void
+xscale_flag_write(uint32_t reg)
+{
+	__asm __volatile("mcr p14, 0, %0, c5, c1, 0" : : "r" (reg));
+}
+
+/*
+ * Event Selection Register
+ */
+static __inline uint32_t
+xscale_evtsel_read(void)
+{
+	uint32_t reg;
+
+	__asm __volatile("mrc p14, 0, %0, c8, c1, 0" : "=r" (reg));
+
+	return (reg);
+}
+
+static __inline void
+xscale_evtsel_write(uint32_t reg)
+{
+	__asm __volatile("mcr p14, 0, %0, c8, c1, 0" : : "r" (reg));
+}
+
+/*
+ * Performance Count Register N
+ */
+static uint32_t
+xscale_pmcn_read(unsigned int pmc)
+{
+	uint32_t reg = 0;
+
+	KASSERT(pmc < 4, ("[xscale,%d] illegal PMC number %d", __LINE__, pmc));
+
+	switch (pmc) {
+	case 0:
+		__asm __volatile("mrc p14, 0, %0, c0, c2, 0" : "=r" (reg));
+		break;
+	case 1:
+		__asm __volatile("mrc p14, 0, %0, c1, c2, 0" : "=r" (reg));
+		break;
+	case 2:
+		__asm __volatile("mrc p14, 0, %0, c2, c2, 0" : "=r" (reg));
+		break;
+	case 3:
+		__asm __volatile("mrc p14, 0, %0, c3, c2, 0" : "=r" (reg));
+		break;
+	}
+
+	return (reg);
+}
+
+static uint32_t
+xscale_pmcn_write(unsigned int pmc, uint32_t reg)
+{
+
+	KASSERT(pmc < 4, ("[xscale,%d] illegal PMC number %d", __LINE__, pmc));
+
+	switch (pmc) {
+	case 0:
+		__asm __volatile("mcr p14, 0, %0, c0, c2, 0" : : "r" (reg));
+		break;
+	case 1:
+		__asm __volatile("mcr p14, 0, %0, c1, c2, 0" : : "r" (reg));
+		break;
+	case 2:
+		__asm __volatile("mcr p14, 0, %0, c2, c2, 0" : : "r" (reg));
+		break;
+	case 3:
+		__asm __volatile("mcr p14, 0, %0, c3, c2, 0" : : "r" (reg));
+		break;
+	}
+
+	return (reg);
+}
+
+static int
+xscale_allocate_pmc(int cpu, int ri, struct pmc *pm,
+  const struct pmc_op_pmcallocate *a)
+{
+	enum pmc_event pe;
+	uint32_t caps, config;
+	int i;
+
+	KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
+	    ("[xscale,%d] illegal CPU value %d", __LINE__, cpu));
+	KASSERT(ri >= 0 && ri < xscale_npmcs,
+	    ("[xscale,%d] illegal row index %d", __LINE__, ri));
+
+	caps = a->pm_caps;
+	if (a->pm_class != PMC_CLASS_XSCALE)
+		return (EINVAL);
+	pe = a->pm_ev;
+	for (i = 0; i < xscale_event_codes_size; i++) {
+		if (xscale_event_codes[i].pe_ev == pe) {
+			config = xscale_event_codes[i].pe_code;
+			break;
+		}
+	}
+	if (i == xscale_event_codes_size)
+		return EINVAL;
+	/* Generation 1 has fewer events */
+	if (xscale_gen == 1 && i > PMC_EV_XSCALE_PC_CHANGE)
+		return EINVAL;
+	pm->pm_md.pm_xscale.pm_xscale_evsel = config;
+
+	PMCDBG(MDP,ALL,2,"xscale-allocate ri=%d -> config=0x%x", ri, config);
+
+	return 0;
+}
+
+
+static int
+xscale_read_pmc(int cpu, int ri, pmc_value_t *v)
+{
+	struct pmc *pm;
+	pmc_value_t tmp;
+
+	KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
+	    ("[xscale,%d] illegal CPU value %d", __LINE__, cpu));
+	KASSERT(ri >= 0 && ri < xscale_npmcs,
+	    ("[xscale,%d] illegal row index %d", __LINE__, ri));
+
+	pm  = xscale_pcpu[cpu]->pc_xscalepmcs[ri].phw_pmc;
+	tmp = xscale_pmcn_read(ri);
+	PMCDBG(MDP,REA,2,"xscale-read id=%d -> %jd", ri, tmp);
+	if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
+		*v = XSCALE_PERFCTR_VALUE_TO_RELOAD_COUNT(tmp);
+	else
+		*v = tmp;
+
+	return 0;
+}
+
+static int
+xscale_write_pmc(int cpu, int ri, pmc_value_t v)
+{
+	struct pmc *pm;
+
+	KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
+	    ("[xscale,%d] illegal CPU value %d", __LINE__, cpu));
+	KASSERT(ri >= 0 && ri < xscale_npmcs,
+	    ("[xscale,%d] illegal row-index %d", __LINE__, ri));
+
+	pm  = xscale_pcpu[cpu]->pc_xscalepmcs[ri].phw_pmc;
+
+	if (PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
+		v = XSCALE_RELOAD_COUNT_TO_PERFCTR_VALUE(v);
+	
+	PMCDBG(MDP,WRI,1,"xscale-write cpu=%d ri=%d v=%jx", cpu, ri, v);
+
+	xscale_pmcn_write(ri, v);
+
+	return 0;
+}
+
+static int
+xscale_config_pmc(int cpu, int ri, struct pmc *pm)
+{
+	struct pmc_hw *phw;
+
+	PMCDBG(MDP,CFG,1, "cpu=%d ri=%d pm=%p", cpu, ri, pm);
+
+	KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
+	    ("[xscale,%d] illegal CPU value %d", __LINE__, cpu));
+	KASSERT(ri >= 0 && ri < xscale_npmcs,
+	    ("[xscale,%d] illegal row-index %d", __LINE__, ri));
+
+	phw = &xscale_pcpu[cpu]->pc_xscalepmcs[ri];
+
+	KASSERT(pm == NULL || phw->phw_pmc == NULL,
+	    ("[xscale,%d] pm=%p phw->pm=%p hwpmc not unconfigured",
+	    __LINE__, pm, phw->phw_pmc));
+
+	phw->phw_pmc = pm;
+
+	return 0;
+}
+
+static int
+xscale_start_pmc(int cpu, int ri)
+{
+	uint32_t pmnc, config, evtsel;
+        struct pmc *pm;
+        struct pmc_hw *phw;
+
+	phw    = &xscale_pcpu[cpu]->pc_xscalepmcs[ri];
+	pm     = phw->phw_pmc;
+	config = pm->pm_md.pm_xscale.pm_xscale_evsel;
+
+	/*
+	 * Configure the event selection.
+	 *
+	 * On the XScale 2nd Generation there's no EVTSEL register.
+	 */
+	if (xscale_npmcs == 2) {
+		pmnc = xscale_pmnc_read();
+		switch (ri) {
+		case 0:
+			pmnc &= ~XSCALE_PMNC_EVT0_MASK;
+			pmnc |= (config << 12) & XSCALE_PMNC_EVT0_MASK;
+			break;
+		case 1:
+			pmnc &= ~XSCALE_PMNC_EVT1_MASK;
+			pmnc |= (config << 20) & XSCALE_PMNC_EVT1_MASK;
+			break;
+		default:
+			/* XXX */
+			break;
+		}
+		xscale_pmnc_write(pmnc);
+	} else {
+		evtsel = xscale_evtsel_read();
+		switch (ri) {
+		case 0:
+			evtsel &= ~XSCALE_EVTSEL_EVT0_MASK;
+			evtsel |= config & XSCALE_EVTSEL_EVT0_MASK;
+			break;
+		case 1:
+			evtsel &= ~XSCALE_EVTSEL_EVT1_MASK;
+			evtsel |= (config << 8) & XSCALE_EVTSEL_EVT1_MASK;
+			break;
+		case 2:
+			evtsel &= ~XSCALE_EVTSEL_EVT2_MASK;
+			evtsel |= (config << 16) & XSCALE_EVTSEL_EVT2_MASK;
+			break;
+		case 3:
+			evtsel &= ~XSCALE_EVTSEL_EVT3_MASK;
+			evtsel |= (config << 24) & XSCALE_EVTSEL_EVT3_MASK;
+			break;
+		default:
+			/* XXX */
+			break;
+		}
+		xscale_evtsel_write(evtsel);
+	}
+	/*
+	 * Enable the PMC.
+	 *
+	 * Note that XScale provides only one bit to enable/disable _all_
+	 * performance monitoring units.
+	 */
+	pmnc = xscale_pmnc_read();
+	pmnc |= XSCALE_PMNC_ENABLE;
+	xscale_pmnc_write(pmnc);
+
+	return 0;
+}
+
+static int
+xscale_stop_pmc(int cpu, int ri)
+{
+	uint32_t pmnc, evtsel;
+        struct pmc *pm;
+        struct pmc_hw *phw;
+
+	phw    = &xscale_pcpu[cpu]->pc_xscalepmcs[ri];
+	pm     = phw->phw_pmc;
+
+	/*
+	 * Disable the PMCs.
+	 *
+	 * Note that XScale provides only one bit to enable/disable _all_
+	 * performance monitoring units.
+	 */
+	pmnc = xscale_pmnc_read();
+	pmnc &= ~XSCALE_PMNC_ENABLE;
+	xscale_pmnc_write(pmnc);
+	/*
+	 * A value of 0xff makes the corresponding PMU go into
+	 * power saving mode.
+	 */
+	if (xscale_npmcs == 2) {
+		pmnc = xscale_pmnc_read();
+		switch (ri) {
+		case 0:
+			pmnc |= XSCALE_PMNC_EVT0_MASK;
+			break;
+		case 1:
+			pmnc |= XSCALE_PMNC_EVT1_MASK;
+			break;
+		default:
+			/* XXX */
+			break;
+		}
+		xscale_pmnc_write(pmnc);
+	} else {
+		evtsel = xscale_evtsel_read();
+		switch (ri) {
+		case 0:
+			evtsel |= XSCALE_EVTSEL_EVT0_MASK;
+			break;
+		case 1:
+			evtsel |= XSCALE_EVTSEL_EVT1_MASK;
+			break;
+		case 2:
+			evtsel |= XSCALE_EVTSEL_EVT2_MASK;
+			break;
+		case 3:
+			evtsel |= XSCALE_EVTSEL_EVT3_MASK;
+			break;
+		default:
+			/* XXX */
+			break;
+		}
+		xscale_evtsel_write(evtsel);
+	}
+
+	return 0;
+}
+
+static int
+xscale_release_pmc(int cpu, int ri, struct pmc *pmc)
+{
+	struct pmc_hw *phw;
+
+	KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
+	    ("[xscale,%d] illegal CPU value %d", __LINE__, cpu));
+	KASSERT(ri >= 0 && ri < xscale_npmcs,
+	    ("[xscale,%d] illegal row-index %d", __LINE__, ri));
+
+	phw = &xscale_pcpu[cpu]->pc_xscalepmcs[ri];
+	KASSERT(phw->phw_pmc == NULL,
+	    ("[xscale,%d] PHW pmc %p non-NULL", __LINE__, phw->phw_pmc));
+
+	return 0;
+}
+
+static int
+xscale_intr(int cpu, struct trapframe *tf)
+{
+	printf("intr\n");
+	return 0;
+}
+
+static int
+xscale_describe(int cpu, int ri, struct pmc_info *pi, struct pmc **ppmc)
+{
+	int error;
+	struct pmc_hw *phw;
+	char xscale_name[PMC_NAME_MAX];
+
+	KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
+	    ("[xscale,%d], illegal CPU %d", __LINE__, cpu));
+	KASSERT(ri >= 0 && ri < xscale_npmcs,
+	    ("[xscale,%d] row-index %d out of range", __LINE__, ri));
+
+	phw = &xscale_pcpu[cpu]->pc_xscalepmcs[ri];
+	snprintf(xscale_name, sizeof(xscale_name), "XSCALE-%d", ri);
+	if ((error = copystr(xscale_name, pi->pm_name, PMC_NAME_MAX,
+	    NULL)) != 0)
+		return error;
+	pi->pm_class = PMC_CLASS_XSCALE;
+	if (phw->phw_state & PMC_PHW_FLAG_IS_ENABLED) {
+		pi->pm_enabled = TRUE;
+		*ppmc          = phw->phw_pmc;
+	} else {
+		pi->pm_enabled = FALSE;
+		*ppmc	       = NULL;
+	}
+
+	return (0);
+}
+
+static int
+xscale_get_config(int cpu, int ri, struct pmc **ppm)
+{
+	*ppm = xscale_pcpu[cpu]->pc_xscalepmcs[ri].phw_pmc;
+
+	return 0;
+}
+
+/*
+ * XXX don't know what we should do here.
+ */
+static int
+xscale_switch_in(struct pmc_cpu *pc, struct pmc_process *pp)
+{
+	return 0;
+}
+
+static int
+xscale_switch_out(struct pmc_cpu *pc, struct pmc_process *pp)
+{
+	return 0;
+}
+
+static int
+xscale_pcpu_init(struct pmc_mdep *md, int cpu)
+{
+	int first_ri, i;
+	struct pmc_cpu *pc;
+	struct xscale_cpu *pac;
+	struct pmc_hw  *phw;
+
+	KASSERT(cpu >= 0 && cpu < pmc_cpu_max(),
+	    ("[xscale,%d] wrong cpu number %d", __LINE__, cpu));
+	PMCDBG(MDP,INI,1,"xscale-init cpu=%d", cpu);
+
+	xscale_pcpu[cpu] = pac = malloc(sizeof(struct xscale_cpu), M_PMC,
+	    M_WAITOK|M_ZERO);
+	pac->pc_xscalepmcs = malloc(sizeof(struct pmc_hw) * xscale_npmcs,
+	    M_PMC, M_WAITOK|M_ZERO);
+	pc = pmc_pcpu[cpu];
+	first_ri = md->pmd_classdep[PMC_MDEP_CLASS_INDEX_XSCALE].pcd_ri;
+	KASSERT(pc != NULL, ("[xscale,%d] NULL per-cpu pointer", __LINE__));
+
+	for (i = 0, phw = pac->pc_xscalepmcs; i < xscale_npmcs; i++, phw++) {
+		phw->phw_state    = PMC_PHW_FLAG_IS_ENABLED |
+		    PMC_PHW_CPU_TO_STATE(cpu) | PMC_PHW_INDEX_TO_STATE(i);
+		phw->phw_pmc      = NULL;
+		pc->pc_hwpmcs[i + first_ri] = phw;
+	}
+
+	/*
+	 * Disable and put the PMUs into power save mode.
+	 */
+	if (xscale_npmcs == 2) {
+		xscale_pmnc_write(XSCALE_PMNC_EVT1_MASK |
+		    XSCALE_PMNC_EVT0_MASK);
+	} else {
+		xscale_evtsel_write(XSCALE_EVTSEL_EVT3_MASK |
+		    XSCALE_EVTSEL_EVT2_MASK | XSCALE_EVTSEL_EVT1_MASK |
+		    XSCALE_EVTSEL_EVT0_MASK);
+	}
+
+	return 0;
+}
+
+static int
+xscale_pcpu_fini(struct pmc_mdep *md, int cpu)
+{
+	return 0;
+}
+
+struct pmc_mdep *
+pmc_xscale_initialize()
+{
+	struct pmc_mdep *pmc_mdep;
+	struct pmc_classdep *pcd;
+	uint32_t idreg;
+
+	/* Get the Core Generation from CP15 */
+	__asm __volatile("mrc p15, 0, %0, c0, c0, 0" : "=r" (idreg));
+	xscale_gen = (idreg >> 13) & 0x3;
+	switch (xscale_gen) {
+	case 1:
+		xscale_npmcs = 2;
+		break;
+	case 2:
+	case 3:
+		xscale_npmcs = 4;
+		break;
+	default:
+		printf("%s: unknown XScale core generation\n", __func__);
+		return (NULL);
+	}
+	PMCDBG(MDP,INI,1,"xscale-init npmcs=%d", xscale_npmcs);
+	
+	/*
+	 * Allocate space for pointers to PMC HW descriptors and for
+	 * the MDEP structure used by MI code.
+	 */
+	xscale_pcpu = malloc(sizeof(struct xscale_cpu *) * pmc_cpu_max(), M_PMC,
+            M_WAITOK|M_ZERO);
+
+	/* Just one class */
+	pmc_mdep = malloc(sizeof(struct pmc_mdep) + sizeof(struct pmc_classdep),
+	    M_PMC, M_WAITOK|M_ZERO);
+
+	pmc_mdep->pmd_cputype = PMC_CPU_INTEL_XSCALE;
+	pmc_mdep->pmd_nclass  = 1;
+
+	pcd = &pmc_mdep->pmd_classdep[PMC_MDEP_CLASS_INDEX_XSCALE];
+	pcd->pcd_caps  = XSCALE_PMC_CAPS;
+	pcd->pcd_class = PMC_CLASS_XSCALE;
+	pcd->pcd_num   = xscale_npmcs;
+	pcd->pcd_ri    = pmc_mdep->pmd_npmc;
+	pcd->pcd_width = 32;
+
+	pcd->pcd_allocate_pmc   = xscale_allocate_pmc;
+	pcd->pcd_config_pmc     = xscale_config_pmc;
+	pcd->pcd_pcpu_fini      = xscale_pcpu_fini;
+	pcd->pcd_pcpu_init      = xscale_pcpu_init;
+	pcd->pcd_describe       = xscale_describe;
+	pcd->pcd_get_config	= xscale_get_config;
+	pcd->pcd_read_pmc       = xscale_read_pmc;
+	pcd->pcd_release_pmc    = xscale_release_pmc;
+	pcd->pcd_start_pmc      = xscale_start_pmc;
+	pcd->pcd_stop_pmc       = xscale_stop_pmc;
+	pcd->pcd_write_pmc      = xscale_write_pmc;
+
+	pmc_mdep->pmd_intr       = xscale_intr;
+	pmc_mdep->pmd_switch_in  = xscale_switch_in;
+	pmc_mdep->pmd_switch_out = xscale_switch_out;
+	
+	pmc_mdep->pmd_npmc   += xscale_npmcs;
+
+	return (pmc_mdep);
+}
+
+void
+pmc_xscale_finalize(struct pmc_mdep *md)
+{
+}
diff --git a/sys/dev/hwpmc/hwpmc_xscale.h b/sys/dev/hwpmc/hwpmc_xscale.h
new file mode 100644
index 00000000000..80e2d23a820
--- /dev/null
+++ b/sys/dev/hwpmc/hwpmc_xscale.h
@@ -0,0 +1,73 @@
+/*-
+ * Copyright (c) 2009 Rui Paulo 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _DEV_HWPMC_XSCALE_H_
+#define _DEV_HWPMC_XSCALE_H_
+
+#define	XSCALE_PMC_CAPS		(PMC_CAP_INTERRUPT | PMC_CAP_USER |     \
+				 PMC_CAP_SYSTEM | PMC_CAP_EDGE |	\
+				 PMC_CAP_THRESHOLD | PMC_CAP_READ |	\
+				 PMC_CAP_WRITE | PMC_CAP_INVERT |	\
+				 PMC_CAP_QUALIFIER)
+
+
+#define	XSCALE_PMNC_ENABLE		0x01	/* Enable all Counters */
+#define	XSCALE_PMNC_PMNRESET		0x02	/* Performance Counter Reset */
+#define	XSCALE_PMNC_CCNTRESET		0x04	/* Clock Counter Reset */
+#define	XSCALE_PMNC_CCNTDIV		0x08	/* Clock Counter Divider */
+/* IXP425 only -- first generation */
+#define	XSCALE_PMNC_EVT0_MASK		0x00ff000
+#define	XSCALE_PMNC_EVT1_MASK		0xff00000
+
+#define	XSCALE_INTEN_CCNT		0x01	/* Enable Clock Counter Int. */
+#define	XSCALE_INTEN_PMN0		0x02	/* Enable PMN0 Interrupts */
+#define	XSCALE_INTEN_PMN1		0x04	/* Enable PMN1 Interrupts */
+#define	XSCALE_INTEN_PMN2		0x08	/* Enable PMN2 Interrupts */
+#define	XSCALE_INTEN_PMN3		0x10	/* Enable PMN3 Interrupts */
+
+#define	XSCALE_EVTSEL_EVT0_MASK		0x000000ff
+#define	XSCALE_EVTSEL_EVT1_MASK		0x0000ff00
+#define	XSCALE_EVTSEL_EVT2_MASK		0x00ff0000
+#define	XSCALE_EVTSEL_EVT3_MASK		0xff000000
+
+#define	XSCALE_FLAG_CCNT_OVERFLOW	0x01
+#define	XSCALE_FLAG_PMN0_OVERFLOW	0x02
+#define	XSCALE_FLAG_PMN1_OVERFLOW	0x04
+#define	XSCALE_FLAG_PMN2_OVERFLOW	0x08
+#define	XSCALE_FLAG_PMN3_OVERFLOW	0x10
+
+#define	XSCALE_RELOAD_COUNT_TO_PERFCTR_VALUE(R)	(-(R))
+#define	XSCALE_PERFCTR_VALUE_TO_RELOAD_COUNT(P)	(-(P))
+
+#ifdef _KERNEL
+/* MD extension for 'struct pmc' */
+struct pmc_md_xscale_pmc {
+	uint32_t	pm_xscale_evsel;
+};
+#endif /* _KERNEL */
+#endif /* _DEV_HWPMC_XSCALE_H_ */
diff --git a/sys/dev/hwpmc/pmc_events.h b/sys/dev/hwpmc/pmc_events.h
index 45ebc21dd5d..f43e128bb20 100644
--- a/sys/dev/hwpmc/pmc_events.h
+++ b/sys/dev/hwpmc/pmc_events.h
@@ -1981,27 +1981,50 @@ __PMC_EV_ALIAS("SIMD_INT_64.SHUFFLE_MOVE",		IAP_EVENT_FDH_40H)
 
 
 /*
- * Intel XScale events from "Intel XScale Core Developer's Manual",
- * January 2004, #27347302
+ * Intel XScale events from:
+ *
+ * Intel XScale Core Developer's Manual
+ * January, 2004, #27347302
+ *
+ * 3rd Generation Intel XScale Microarchitecture
+ * Developer's Manual
+ * May 2007, #31628302
+ *
+ * First 14 events are for 1st and 2nd Generation Intel XScale cores. The
+ * remaining are available only on 3rd Generation Intel XScale cores.
  */
-#define	__PMC_EV_XSCALE()			\
-	__PMC_EV(XSCALE, IC_FETCH)		\
-	__PMC_EV(XSCALE, IC_MISS)		\
-	__PMC_EV(XSCALE, DATA_DEPENDENCY_STALL)	\
-	__PMC_EV(XSCALE, ITLB_MISS)		\
-	__PMC_EV(XSCALE, DTLB_MISS)		\
-	__PMC_EV(XSCALE, BRANCH_EXECUTED)	\
-	__PMC_EV(XSCALE, BRANCH_MISPRED)	\
-	__PMC_EV(XSCALE, INSTR_EXECUTED)	\
-	__PMC_EV(XSCALE, DC_FULL_CYCLE)		\
-	__PMC_EV(XSCALE, DC_FULL_CONTIG)	\
-	__PMC_EV(XSCALE, DC_ACCESS)		\
-	__PMC_EV(XSCALE, DC_MISS)		\
-	__PMC_EV(XSCALE, DC_WRITEBACK)		\
-	__PMC_EV(XSCALE, PC_CHANGE)
+#define	__PMC_EV_XSCALE()				\
+	__PMC_EV(XSCALE, IC_FETCH)			\
+	__PMC_EV(XSCALE, IC_MISS)			\
+	__PMC_EV(XSCALE, DATA_DEPENDENCY_STALLED)	\
+	__PMC_EV(XSCALE, ITLB_MISS)			\
+	__PMC_EV(XSCALE, DTLB_MISS)			\
+	__PMC_EV(XSCALE, BRANCH_RETIRED)		\
+	__PMC_EV(XSCALE, BRANCH_MISPRED)		\
+	__PMC_EV(XSCALE, INSTR_RETIRED)			\
+	__PMC_EV(XSCALE, DC_FULL_CYCLE)			\
+	__PMC_EV(XSCALE, DC_FULL_CONTIG)		\
+	__PMC_EV(XSCALE, DC_ACCESS)			\
+	__PMC_EV(XSCALE, DC_MISS)			\
+	__PMC_EV(XSCALE, DC_WRITEBACK)			\
+	__PMC_EV(XSCALE, PC_CHANGE)			\
+	__PMC_EV(XSCALE, BRANCH_RETIRED_ALL)		\
+	__PMC_EV(XSCALE, INSTR_CYCLE)			\
+	__PMC_EV(XSCALE, CP_STALL)			\
+	__PMC_EV(XSCALE, PC_CHANGE_ALL)			\
+	__PMC_EV(XSCALE, PIPELINE_FLUSH)		\
+	__PMC_EV(XSCALE, BACKEND_STALL)			\
+	__PMC_EV(XSCALE, MULTIPLIER_USE)		\
+	__PMC_EV(XSCALE, MULTIPLIER_STALLED)		\
+	__PMC_EV(XSCALE, DATA_CACHE_STALLED)		\
+	__PMC_EV(XSCALE, L2_CACHE_REQ)			\
+	__PMC_EV(XSCALE, L2_CACHE_MISS)			\
+	__PMC_EV(XSCALE, ADDRESS_BUS_TRANS)		\
+	__PMC_EV(XSCALE, SELF_ADDRESS_BUS_TRANS)	\
+	__PMC_EV(XSCALE, DATA_BUS_TRANS)
 
 #define	PMC_EV_XSCALE_FIRST	PMC_EV_XSCALE_IC_FETCH
-#define	PMC_EV_XSCALE_LAST	PMC_EV_XSCALE_PC_CHANGE
+#define	PMC_EV_XSCALE_LAST	PMC_EV_XSCALE_DATA_BUS_TRANS
 
 /*
  * All known PMC events.
diff --git a/sys/dev/ichsmb/ichsmb_pci.c b/sys/dev/ichsmb/ichsmb_pci.c
index b6d11df94ff..0843afe40cf 100644
--- a/sys/dev/ichsmb/ichsmb_pci.c
+++ b/sys/dev/ichsmb/ichsmb_pci.c
@@ -75,6 +75,10 @@ __FBSDID("$FreeBSD$");
 #define ID_82801EB			0x24D38086
 #define ID_82801FB			0x266A8086
 #define ID_82801GB			0x27da8086
+#define ID_82801H			0x283e8086
+#define ID_82801I			0x29308086
+#define ID_82801JI			0x3a308086
+#define ID_PCH				0x3b308086
 #define ID_6300ESB			0x25a48086
 #define	ID_631xESB			0x269b8086
 
@@ -152,6 +156,18 @@ ichsmb_pci_probe(device_t dev)
 	case ID_82801GB:
 		device_set_desc(dev, "Intel 82801GB (ICH7) SMBus controller");
 		break;
+	case ID_82801H:
+		device_set_desc(dev, "Intel 82801H (ICH8) SMBus controller");
+		break;
+	case ID_82801I:
+		device_set_desc(dev, "Intel 82801I (ICH9) SMBus controller");
+		break;
+	case ID_82801JI:
+		device_set_desc(dev, "Intel 82801JI (ICH10) SMBus controller");
+		break;
+	case ID_PCH:
+		device_set_desc(dev, "Intel PCH SMBus controller");
+		break;
 	case ID_6300ESB:
 		device_set_desc(dev, "Intel 6300ESB (ICH) SMBus controller");
 		break;
@@ -159,12 +175,6 @@ ichsmb_pci_probe(device_t dev)
 		device_set_desc(dev, "Intel 631xESB/6321ESB (ESB2) SMBus controller");
 		break;
 	default:
-		if (pci_get_class(dev) == PCIC_SERIALBUS
-		    && pci_get_subclass(dev) == PCIS_SERIALBUS_SMBUS
-		    && pci_get_progif(dev) == PCIS_SERIALBUS_SMBUS_PROGIF) {
-			device_set_desc(dev, "SMBus controller");
-			return (BUS_PROBE_DEFAULT); /* XXX */
-		}
 		return (ENXIO);
 	}
 
diff --git a/sys/dev/if_ndis/if_ndis.c b/sys/dev/if_ndis/if_ndis.c
index 7651145f6b0..62d0ed150de 100644
--- a/sys/dev/if_ndis/if_ndis.c
+++ b/sys/dev/if_ndis/if_ndis.c
@@ -189,6 +189,7 @@ static int ndis_set_offload	(struct ndis_softc *);
 static void ndis_getstate_80211	(struct ndis_softc *);
 static void ndis_setstate_80211	(struct ndis_softc *);
 static void ndis_auth_and_assoc	(struct ndis_softc *, struct ieee80211vap *);
+static void ndis_media_status	(struct ifnet *, struct ifmediareq *);
 static int ndis_set_cipher	(struct ndis_softc *, int);
 static int ndis_set_wpa		(struct ndis_softc *, void *, int);
 static int ndis_add_key		(struct ieee80211vap *,
@@ -993,7 +994,7 @@ ndis_vap_create(struct ieee80211com *ic,
 	vap->iv_newstate = ndis_newstate;
 
 	/* complete setup */
-	ieee80211_vap_attach(vap, ieee80211_media_change, ieee80211_media_status);
+	ieee80211_vap_attach(vap, ieee80211_media_change, ndis_media_status);
 	ic->ic_opmode = opmode;
 	/* install key handing routines */
 	vap->iv_key_set = ndis_add_key;
@@ -2236,6 +2237,23 @@ ndis_set_wpa(sc, ie, ielen)
 	return (0);
 }
 
+static void
+ndis_media_status(struct ifnet *ifp, struct ifmediareq *imr)
+{
+	struct ieee80211vap *vap = ifp->if_softc;
+	struct ndis_softc *sc = vap->iv_ic->ic_ifp->if_softc;
+	uint32_t txrate;
+	size_t len;
+
+	if (!NDIS_INITIALIZED(sc))
+		return;
+
+	len = sizeof(txrate);
+	if (ndis_get_info(sc, OID_GEN_LINK_SPEED, &txrate, &len) == 0)
+		vap->iv_bss->ni_txrate = txrate / 5000;
+	ieee80211_media_status(ifp, imr);
+}
+
 static void
 ndis_setstate_80211(sc)
 	struct ndis_softc	*sc;
@@ -2696,13 +2714,6 @@ ndis_getstate_80211(sc)
 	    bs->nwbx_ssid.ns_ssidlen);
 	ni->ni_esslen = bs->nwbx_ssid.ns_ssidlen;
 
-	len = sizeof(arg);
-	rval = ndis_get_info(sc, OID_GEN_LINK_SPEED, &arg, &len);
-	if (rval)
-		device_printf(sc->ndis_dev, "get link speed failed: %d\n",
-		    rval);
-	ni->ni_txrate = arg / 5000;
-
 	if (ic->ic_caps & IEEE80211_C_PMGT) {
 		len = sizeof(arg);
 		rval = ndis_get_info(sc, OID_802_11_POWER_MODE, &arg, &len);
@@ -3222,14 +3233,8 @@ ndis_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
 static void
 ndis_scan(void *arg)
 {
-	struct ndis_softc *sc = arg;
-	struct ieee80211com *ic;
-	struct ieee80211vap *vap;
+	struct ieee80211vap *vap = arg;
 
-	ic = sc->ifp->if_l2com;
-	vap = TAILQ_FIRST(&ic->ic_vaps);
-
-	ndis_scan_results(sc);
 	ieee80211_scan_done(vap);
 }
 
@@ -3305,24 +3310,11 @@ ndis_scan_results(struct ndis_softc *sc)
 			efrm = frm + wb->nwbx_ielen;
 			if (efrm - frm < 12)
 				goto done;
-			sp.tstamp = frm;
-			frm += 8;
-			sp.bintval = le16toh(*(uint16_t *)frm);
-			frm += 2;
-			sp.capinfo = le16toh(*(uint16_t *)frm);
-			frm += 2;
-
-			/* Grab variable length ies */
-			while (efrm - frm > 1) {
-				if (efrm - frm < frm[1] + 2)
-					break;
-				switch (*frm) {
-				case IEEE80211_ELEMID_RSN:
-					sp.rsn = frm;
-					break;
-				}
-				frm += frm[1] + 2;
-			}
+			sp.tstamp = frm;			frm += 8;
+			sp.bintval = le16toh(*(uint16_t *)frm);	frm += 2;
+			sp.capinfo = le16toh(*(uint16_t *)frm);	frm += 2;
+			sp.ies = frm;
+			sp.ies_len = efrm - frm;
 		}
 done:
 		DPRINTF(("scan: bssid %s chan %dMHz (%d/%d) rssi %d\n",
@@ -3377,7 +3369,7 @@ ndis_scan_start(struct ieee80211com *ic)
 		return;
 	}
 	/* Set a timer to collect the results */
-	callout_reset(&sc->ndis_scan_callout, hz * 3, ndis_scan, sc);
+	callout_reset(&sc->ndis_scan_callout, hz * 3, ndis_scan, vap);
 }
 
 static void
@@ -3401,5 +3393,7 @@ ndis_scan_mindwell(struct ieee80211_scan_state *ss)
 static void
 ndis_scan_end(struct ieee80211com *ic)
 {
-	/* ignore */
+	struct ndis_softc *sc = ic->ic_ifp->if_softc;
+
+	ndis_scan_results(sc);
 }
diff --git a/sys/dev/if_ndis/if_ndis_usb.c b/sys/dev/if_ndis/if_ndis_usb.c
index af5a284f4c0..8f22420342c 100644
--- a/sys/dev/if_ndis/if_ndis_usb.c
+++ b/sys/dev/if_ndis/if_ndis_usb.c
@@ -165,6 +165,7 @@ ndisusb_attach(device_t self)
 	driver_object		*drv;
 	int			devidx = 0;
 
+	device_set_usb_desc(self);
 	db = uaa->driver_ivar;
 	sc = (struct ndis_softc *)dummy;
 	sc->ndis_dev = self;
diff --git a/sys/dev/iir/iir_ctrl.c b/sys/dev/iir/iir_ctrl.c
index 51ef0434a48..5f9f3d597ce 100644
--- a/sys/dev/iir/iir_ctrl.c
+++ b/sys/dev/iir/iir_ctrl.c
@@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include 
@@ -83,8 +84,6 @@ static int iir_devsw_installed = 0;
 static int sdev_made = 0;
 #endif
 extern int gdt_cnt;
-extern char ostype[];
-extern char osrelease[];
 extern gdt_statist_t gdt_stat;
 
 /*
diff --git a/sys/dev/ipmi/ipmi.c b/sys/dev/ipmi/ipmi.c
index 8e53d01f388..da024fc767c 100644
--- a/sys/dev/ipmi/ipmi.c
+++ b/sys/dev/ipmi/ipmi.c
@@ -588,12 +588,15 @@ ipmi_polled_enqueue_request(struct ipmi_softc *sc, struct ipmi_request *req)
  * Watchdog event handler.
  */
 
-static void
-ipmi_set_watchdog(struct ipmi_softc *sc, int sec)
+static int
+ipmi_set_watchdog(struct ipmi_softc *sc, unsigned int sec)
 {
 	struct ipmi_request *req;
 	int error;
 
+	if (sec > 0xffff / 10)
+		return (EINVAL);
+
 	req = ipmi_alloc_driver_request(IPMI_ADDR(IPMI_APP_REQUEST, 0),
 	    IPMI_SET_WDOG, 6, 0);
 
@@ -604,7 +607,7 @@ ipmi_set_watchdog(struct ipmi_softc *sc, int sec)
 		req->ir_request[2] = 0;
 		req->ir_request[3] = 0;	/* Timer use */
 		req->ir_request[4] = (sec * 10) & 0xff;
-		req->ir_request[5] = (sec * 10) / 2550;
+		req->ir_request[5] = (sec * 10) >> 8;
 	} else {
 		req->ir_request[0] = IPMI_SET_WD_TIMER_SMS_OS;
 		req->ir_request[1] = 0;
@@ -617,8 +620,7 @@ ipmi_set_watchdog(struct ipmi_softc *sc, int sec)
 	error = ipmi_submit_driver_request(sc, req, 0);
 	if (error)
 		device_printf(sc->ipmi_dev, "Failed to set watchdog\n");
-
-	if (error == 0 && sec) {
+	else if (sec) {
 		ipmi_free_request(req);
 
 		req = ipmi_alloc_driver_request(IPMI_ADDR(IPMI_APP_REQUEST, 0),
@@ -631,6 +633,7 @@ ipmi_set_watchdog(struct ipmi_softc *sc, int sec)
 	}
 
 	ipmi_free_request(req);
+	return (error);
 	/*
 	dump_watchdog(sc);
 	*/
@@ -641,14 +644,22 @@ ipmi_wd_event(void *arg, unsigned int cmd, int *error)
 {
 	struct ipmi_softc *sc = arg;
 	unsigned int timeout;
+	int e;
 
 	cmd &= WD_INTERVAL;
 	if (cmd > 0 && cmd <= 63) {
-		timeout = ((uint64_t)1 << cmd) / 1800000000;
-		ipmi_set_watchdog(sc, timeout);
-		*error = 0;
+		timeout = ((uint64_t)1 << cmd) / 1000000000;
+		if (timeout == 0)
+			timeout = 1;
+		e = ipmi_set_watchdog(sc, timeout);
+		if (e == 0)
+			*error = 0;
+		else
+			(void)ipmi_set_watchdog(sc, 0);
 	} else {
-		ipmi_set_watchdog(sc, 0);
+		e = ipmi_set_watchdog(sc, 0);
+		if (e != 0 && cmd == 0)
+			*error = EOPNOTSUPP;
 	}
 }
 
diff --git a/sys/dev/ips/ips_pci.c b/sys/dev/ips/ips_pci.c
index 9ccaf373b3e..9781087891d 100644
--- a/sys/dev/ips/ips_pci.c
+++ b/sys/dev/ips/ips_pci.c
@@ -154,7 +154,7 @@ static int ips_pci_attach(device_t dev)
         }
 	sc->ips_ich.ich_func = ips_intrhook;
 	sc->ips_ich.ich_arg = sc;
-	mtx_init(&sc->queue_mtx, "IPS bioqueue lock", MTX_DEF, 0);
+	mtx_init(&sc->queue_mtx, "IPS bioqueue lock", NULL, MTX_DEF);
 	sema_init(&sc->cmd_sema, 0, "IPS Command Semaphore");
 	bioq_init(&sc->queue);
 	if (config_intrhook_establish(&sc->ips_ich) != 0) {
diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c
index d13e208b182..2a4718c2319 100644
--- a/sys/dev/isp/isp.c
+++ b/sys/dev/isp/isp.c
@@ -8285,6 +8285,8 @@ isp_parse_nvram_2100(ispsoftc_t *isp, uint8_t *nvram_data)
 			if ((wwn >> 60) == 0) {
 				wwn |= (((uint64_t) 2)<< 60);
 			}
+		} else {
+			wwn = fcp->isp_wwpn_nvram & ~((uint64_t) 0xfff << 48);
 		}
 	} else {
 		wwn &= ~((uint64_t) 0xfff << 48);
@@ -8350,11 +8352,6 @@ isp_parse_nvram_2400(ispsoftc_t *isp, uint8_t *nvram_data)
 	    ISP2400_NVRAM_FIRMWARE_OPTIONS3(nvram_data));
 
 	wwn = ISP2400_NVRAM_PORT_NAME(nvram_data);
-	if (wwn) {
-		if ((wwn >> 60) != 2 && (wwn >> 60) != 5) {
-			wwn = 0;
-		}
-	}
 	fcp->isp_wwpn_nvram = wwn;
 
 	wwn = ISP2400_NVRAM_NODE_NAME(nvram_data);
@@ -8363,6 +8360,10 @@ isp_parse_nvram_2400(ispsoftc_t *isp, uint8_t *nvram_data)
 			wwn = 0;
 		}
 	}
+	if (wwn == 0 && (fcp->isp_wwpn_nvram >> 60) == 2) {
+		wwn = fcp->isp_wwpn_nvram;
+		wwn &= ~((uint64_t) 0xfff << 48);
+	}
 	fcp->isp_wwnn_nvram = wwn;
 
 	if (ISP2400_NVRAM_EXCHANGE_COUNT(nvram_data)) {
diff --git a/sys/dev/isp/isp_freebsd.c b/sys/dev/isp/isp_freebsd.c
index ca85d64f50b..2861d7b3a02 100644
--- a/sys/dev/isp/isp_freebsd.c
+++ b/sys/dev/isp/isp_freebsd.c
@@ -133,33 +133,37 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan)
 		}
 #endif
 	} else {
+		fcparam *fcp = FCPARAM(isp, chan);
 		struct isp_fc *fc = ISP_FC_PC(isp, chan);
 
+		ISP_LOCK(isp);
 		fc->sim = sim;
 		fc->path = path;
 		fc->isp = isp;
+		fc->ready = 1;
 
 		callout_init_mtx(&fc->ldt, &isp->isp_osinfo.lock, 0);
 		callout_init_mtx(&fc->gdt, &isp->isp_osinfo.lock, 0);
-
-		if (THREAD_CREATE(isp_kthread, fc, &fc->kproc, 0, 0, "%s: fc_thrd%d", device_get_nameunit(isp->isp_osinfo.dev), chan)) {
-			xpt_free_path(fc->path);
-			ISP_LOCK(isp);
-			xpt_bus_deregister(cam_sim_path(fc->sim));
-			ISP_UNLOCK(isp);
-			cam_sim_free(fc->sim, FALSE);
-		}
 		/*
 		 * We start by being "loop down" if we have an initiator role
 		 */
-		ISP_LOCK(isp);
-		if ((FCPARAM(isp, chan)->role & ISP_ROLE_INITIATOR) && fc->ldt_running == 0) {
+		if (fcp->role & ISP_ROLE_INITIATOR) {
 			isp_freeze_loopdown(isp, chan, "isp_attach");
-			fc->ldt_running = 1;
 			callout_reset(&fc->ldt, isp_quickboot_time * hz, isp_ldt, fc);
 			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Starting Initial Loop Down Timer @ %lu", (unsigned long) time_uptime);
 		}
 		ISP_UNLOCK(isp);
+		if (THREAD_CREATE(isp_kthread, fc, &fc->kproc, 0, 0, "%s: fc_thrd%d", device_get_nameunit(isp->isp_osinfo.dev), chan)) {
+			xpt_free_path(fc->path);
+			ISP_LOCK(isp);
+			if (callout_active(&fc->ldt)) {
+				callout_stop(&fc->ldt);
+			}
+			xpt_bus_deregister(cam_sim_path(fc->sim));
+			ISP_UNLOCK(isp);
+			cam_sim_free(fc->sim, FALSE);
+			return (ENOMEM);
+		}
 #ifdef	ISP_INTERNAL_TARGET
 		ISP_SET_PC(isp, chan, proc_active, 1);
 		if (THREAD_CREATE(isp_target_thread_fc, fc, &fc->target_proc, 0, 0, "%s: isp_test_tgt%d", device_get_nameunit(isp->isp_osinfo.dev), chan)) {
@@ -3935,12 +3939,12 @@ isp_gdt(void *arg)
 		isp_prt(isp, ISP_LOGCONFIG, prom3, chan, lp->portid, tgt, "Gone Device Timeout");
 		isp_make_gone(isp, chan, tgt);
 	}
-	if (more_to_do) {
-		fc->gdt_running = 1;
-		callout_reset(&fc->gdt, hz, isp_gdt, fc);
-	} else {
-		isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d stopping Gone Device Timer", chan);
-		fc->gdt_running = 0;
+	if (fc->ready) {
+		if (more_to_do) {
+			callout_reset(&fc->gdt, hz, isp_gdt, fc);
+		} else {
+			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d stopping Gone Device Timer", chan);
+		}
 	}
 }
 
@@ -4017,6 +4021,7 @@ isp_kthread(void *arg)
 	ispsoftc_t *isp = fc->isp;
 	int chan = fc - isp->isp_osinfo.pc.fc;
 	int slp = 0;
+
 	mtx_lock(&isp->isp_osinfo.lock);
 
 	for (;;) {
@@ -4802,6 +4807,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 	char *msg = NULL;
 	target_id_t tgt;
 	fcportdb_t *lp;
+	struct isp_fc *fc;
 	struct cam_path *tmppath;
 	va_list ap;
 
@@ -4886,7 +4892,6 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 		/* FALLTHROUGH */
 	case ISPASYNC_LOOP_DOWN:
 	{
-		struct isp_fc *fc;
 		if (msg == NULL) {
 			msg = "LOOP Down";
 		}
@@ -4894,20 +4899,21 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 		bus = va_arg(ap, int);
 		va_end(ap);
 
-		FCPARAM(isp, bus)->link_active = 1;
+		FCPARAM(isp, bus)->link_active = 0;
 
 		fc = ISP_FC_PC(isp, bus);
-		/*
-		 * We don't do any simq freezing if we are only in target mode
-		 */
-		if (fc->role & ISP_ROLE_INITIATOR) {
-			if (fc->path) {
-				isp_freeze_loopdown(isp, bus, msg);
-			}
-			if (fc->ldt_running == 0) {
-				fc->ldt_running = 1;
-				callout_reset(&fc->ldt, fc->loop_down_limit * hz, isp_ldt, fc);
-				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "starting Loop Down Timer @ %lu", (unsigned long) time_uptime);
+		if (cmd == ISPASYNC_LOOP_DOWN && fc->ready) {
+			/*
+			 * We don't do any simq freezing if we are only in target mode
+			 */
+			if (fc->role & ISP_ROLE_INITIATOR) {
+				if (fc->path) {
+					isp_freeze_loopdown(isp, bus, msg);
+				}
+				if (!callout_active(&fc->ldt)) {
+					callout_reset(&fc->ldt, fc->loop_down_limit * hz, isp_ldt, fc);
+					isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "starting Loop Down Timer @ %lu", (unsigned long) time_uptime);
+				}
 			}
 		}
 		isp_prt(isp, ISP_LOGINFO, "Chan %d: %s", bus, msg);
@@ -4917,6 +4923,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 		va_start(ap, cmd);
 		bus = va_arg(ap, int);
 		va_end(ap);
+		fc = ISP_FC_PC(isp, bus);
 		/*
 		 * Now we just note that Loop has come up. We don't
 		 * actually do anything because we're waiting for a
@@ -4924,8 +4931,8 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 		 * thread to look at the state of the loop again.
 		 */
 		FCPARAM(isp, bus)->link_active = 1;
-		ISP_FC_PC(isp, bus)->loop_dead = 0;
-		ISP_FC_PC(isp, bus)->loop_down_time = 0;
+		fc->loop_dead = 0;
+		fc->loop_down_time = 0;
 		isp_prt(isp, ISP_LOGINFO, "Chan %d Loop UP", bus);
 		break;
 	case ISPASYNC_DEV_ARRIVED:
@@ -4933,8 +4940,9 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 		bus = va_arg(ap, int);
 		lp = va_arg(ap, fcportdb_t *);
 		va_end(ap);
+		fc = ISP_FC_PC(isp, bus);
 		lp->reserved = 0;
-		if ((ISP_FC_PC(isp, bus)->role & ISP_ROLE_INITIATOR) && (lp->roles & (SVC3_TGT_ROLE >> SVC3_ROLE_SHIFT))) {
+		if ((fc->role & ISP_ROLE_INITIATOR) && (lp->roles & (SVC3_TGT_ROLE >> SVC3_ROLE_SHIFT))) {
 			int dbidx = lp - FCPARAM(isp, bus)->portdb;
 			int i;
 
@@ -4967,6 +4975,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 		bus = va_arg(ap, int);
 		lp = va_arg(ap, fcportdb_t *);
 		va_end(ap);
+		fc = ISP_FC_PC(isp, bus);
 		lp->reserved = 0;
 		if (isp_change_is_bad) {
 			lp->state = FC_PORTDB_STATE_NIL;
@@ -5013,6 +5022,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 		bus = va_arg(ap, int);
 		lp = va_arg(ap, fcportdb_t *);
 		va_end(ap);
+		fc = ISP_FC_PC(isp, bus);
 		/*
 		 * If this has a virtual target and we haven't marked it
 		 * that we're going to have isp_gdt tell the OS it's gone,
@@ -5025,10 +5035,9 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 			lp->reserved = 1;
 			lp->new_reserved = ISP_FC_PC(isp, bus)->gone_device_time;
 			lp->state = FC_PORTDB_STATE_ZOMBIE;
-			if (ISP_FC_PC(isp, bus)->gdt_running == 0) {
+			if (fc->ready && !callout_active(&fc->gdt)) {
 				isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Chan %d starting Gone Device Timer", bus);
-				ISP_FC_PC(isp, bus)->gdt_running = 1;
-				callout_reset(&ISP_FC_PC(isp, bus)->gdt, hz, isp_gdt, ISP_FC_PC(isp, bus));
+				callout_reset(&fc->gdt, hz, isp_gdt, fc);
 			}
 			tgt = lp->dev_map_idx - 1;
 			isp_prt(isp, ISP_LOGCONFIG, prom2, bus, lp->portid, lp->handle, roles[lp->roles], "gone zombie at", tgt, (uint32_t) (lp->port_wwn >> 32), (uint32_t) lp->port_wwn);
@@ -5053,6 +5062,7 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 			nlstate = reason = 0;
 		}
 		va_end(ap);
+		fc = ISP_FC_PC(isp, bus);
 
 		if (evt == ISPASYNC_CHANGE_PDB) {
 			msg = "Chan %d Port Database Changed";
@@ -5065,16 +5075,15 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
 		/*
 		 * If the loop down timer is running, cancel it.
 		 */
-		if (ISP_FC_PC(isp, bus)->ldt_running) {
+		if (fc->ready && callout_active(&fc->ldt)) {
 			isp_prt(isp, ISP_LOGSANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ %lu", (unsigned long) time_uptime);
-			ISP_FC_PC(isp, bus)->ldt_running = 0;
-			callout_stop(&ISP_FC_PC(isp, bus)->ldt);
+			callout_stop(&fc->ldt);
 		}
 		isp_prt(isp, ISP_LOGINFO, msg, bus);
-		if (ISP_FC_PC(isp, bus)->role & ISP_ROLE_INITIATOR) {
+		if (fc->role & ISP_ROLE_INITIATOR) {
 			isp_freeze_loopdown(isp, bus, msg);
 		}
-		wakeup(ISP_FC_PC(isp, bus));
+		wakeup(fc);
 		break;
 	}
 #ifdef	ISP_TARGET_MODE
diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h
index 2988e3095ee..29425940c05 100644
--- a/sys/dev/isp/isp_freebsd.h
+++ b/sys/dev/isp/isp_freebsd.h
@@ -177,9 +177,9 @@ struct isp_fc {
 		hysteresis	: 8,
 		role		: 2,
 		gdt_running	: 1,
-		ldt_running	: 1,
 		loop_dead	: 1,
-		fcbsy		: 1;
+		fcbsy		: 1,
+		ready		: 1;
 	struct callout ldt;	/* loop down timer */
 	struct callout gdt;	/* gone device timer */
 #ifdef	ISP_TARGET_MODE
diff --git a/sys/dev/iwn/if_iwn.c b/sys/dev/iwn/if_iwn.c
index 9d1376bb352..9e032f7ffd4 100644
--- a/sys/dev/iwn/if_iwn.c
+++ b/sys/dev/iwn/if_iwn.c
@@ -19,8 +19,8 @@
  */
 
 /*
- * Driver for Intel Wireless WiFi Link 4965 and Intel WiFi Link 5000 Series
- * 802.11 network adapters.
+ * Driver for Intel WiFi Link 4965 and 1000/5000/6000 Series 802.11 network
+ * adapters.
  */
 
 #include 
@@ -94,6 +94,8 @@ int		iwn_alloc_sched(struct iwn_softc *);
 void		iwn_free_sched(struct iwn_softc *);
 int		iwn_alloc_kw(struct iwn_softc *);
 void		iwn_free_kw(struct iwn_softc *);
+int		iwn_alloc_ict(struct iwn_softc *);
+void		iwn_free_ict(struct iwn_softc *);
 int		iwn_alloc_fwmem(struct iwn_softc *);
 void		iwn_free_fwmem(struct iwn_softc *);
 int		iwn_alloc_rx_ring(struct iwn_softc *, struct iwn_rx_ring *);
@@ -103,12 +105,15 @@ int		iwn_alloc_tx_ring(struct iwn_softc *, struct iwn_tx_ring *,
 		    int);
 void		iwn_reset_tx_ring(struct iwn_softc *, struct iwn_tx_ring *);
 void		iwn_free_tx_ring(struct iwn_softc *, struct iwn_tx_ring *);
+void		iwn5000_ict_reset(struct iwn_softc *);
 int		iwn_read_eeprom(struct iwn_softc *,
 		    uint8_t macaddr[IEEE80211_ADDR_LEN]);
 void		iwn4965_read_eeprom(struct iwn_softc *);
 void		iwn4965_print_power_group(struct iwn_softc *, int);
 void		iwn5000_read_eeprom(struct iwn_softc *);
-static void	iwn_read_eeprom_channels(struct iwn_softc *, uint32_t, int);
+static void	iwn_read_eeprom_channels(struct iwn_softc *, int,
+		    uint32_t);
+void		iwn_read_eeprom_enhinfo(struct iwn_softc *);
 struct ieee80211_node *iwn_node_alloc(struct ieee80211vap *,
 		    const uint8_t mac[IEEE80211_ADDR_LEN]);
 void		iwn_newassoc(struct ieee80211_node *, int);
@@ -120,6 +125,10 @@ static void	iwn_timer_timeout(void *);
 static void	iwn_calib_reset(struct iwn_softc *);
 void		iwn_rx_done(struct iwn_softc *, struct iwn_rx_desc *,
 		    struct iwn_rx_data *);
+#if 0	/* HT */
+void		iwn_rx_compressed_ba(struct iwn_softc *, struct iwn_rx_desc *,
+		    struct iwn_rx_data *);
+#endif
 void		iwn5000_rx_calib_results(struct iwn_softc *,
 		    struct iwn_rx_desc *, struct iwn_rx_data *);
 void		iwn_rx_statistics(struct iwn_softc *, struct iwn_rx_desc *,
@@ -134,7 +143,7 @@ void		iwn_cmd_done(struct iwn_softc *, struct iwn_rx_desc *);
 void		iwn_notif_intr(struct iwn_softc *);
 void		iwn_wakeup_intr(struct iwn_softc *);
 void		iwn_rftoggle_intr(struct iwn_softc *);
-void		iwn_fatal_intr(struct iwn_softc *, uint32_t, uint32_t);
+void		iwn_fatal_intr(struct iwn_softc *);
 void		iwn_intr(void *);
 void		iwn4965_update_sched(struct iwn_softc *, int, int, uint8_t,
 		    uint16_t);
@@ -154,19 +163,16 @@ int		iwn4965_add_node(struct iwn_softc *, struct iwn_node_info *,
 		    int);
 int		iwn5000_add_node(struct iwn_softc *, struct iwn_node_info *,
 		    int);
-int		iwn_set_link_quality(struct iwn_softc *, uint8_t,
-		    const struct ieee80211_channel *, int);
-int		iwn_add_broadcast_node(struct iwn_softc *,
-		    const struct ieee80211_channel *, int);
+int		iwn_set_link_quality(struct iwn_softc *, uint8_t, int);
+int		iwn_add_broadcast_node(struct iwn_softc *, int);
 int		iwn_wme_update(struct ieee80211com *);
+static void	iwn_update_mcast(struct ifnet *);
 void		iwn_set_led(struct iwn_softc *, uint8_t, uint8_t, uint8_t);
 int		iwn_set_critical_temp(struct iwn_softc *);
 int		iwn_set_timing(struct iwn_softc *, struct ieee80211_node *);
 void		iwn4965_power_calibration(struct iwn_softc *, int);
-int		iwn4965_set_txpower(struct iwn_softc *,
-		    struct ieee80211_channel *, int);
-int		iwn5000_set_txpower(struct iwn_softc *,
-		    struct ieee80211_channel *, int);
+int		iwn4965_set_txpower(struct iwn_softc *, int);
+int		iwn5000_set_txpower(struct iwn_softc *, int);
 int		iwn4965_get_rssi(struct iwn_softc *, struct iwn_rx_stat *);
 int		iwn5000_get_rssi(struct iwn_softc *, struct iwn_rx_stat *);
 int		iwn_get_noise(const struct iwn_rx_general_stats *);
@@ -189,6 +195,7 @@ int		iwn_auth(struct iwn_softc *, struct ieee80211vap *vap);
 int		iwn_run(struct iwn_softc *, struct ieee80211vap *vap);
 int		iwn5000_query_calibration(struct iwn_softc *);
 int		iwn5000_send_calibration(struct iwn_softc *);
+int		iwn5000_send_wimax_coex(struct iwn_softc *);
 int		iwn4965_post_alive(struct iwn_softc *);
 int		iwn5000_post_alive(struct iwn_softc *);
 int		iwn4965_load_bootcode(struct iwn_softc *, const uint8_t *,
@@ -198,15 +205,13 @@ int		iwn5000_load_firmware_section(struct iwn_softc *, uint32_t,
 		    const uint8_t *, int);
 int		iwn5000_load_firmware(struct iwn_softc *);
 int		iwn_read_firmware(struct iwn_softc *);
-void		iwn_unload_firmware(struct iwn_softc *);
 int		iwn_clock_wait(struct iwn_softc *);
-int		iwn4965_apm_init(struct iwn_softc *);
-int		iwn5000_apm_init(struct iwn_softc *);
+int		iwn_apm_init(struct iwn_softc *);
 void		iwn_apm_stop_master(struct iwn_softc *);
 void		iwn_apm_stop(struct iwn_softc *);
 int		iwn4965_nic_config(struct iwn_softc *);
 int		iwn5000_nic_config(struct iwn_softc *);
-int		iwn_hw_prepare(struct iwn_softc *sc);
+int		iwn_hw_prepare(struct iwn_softc *);
 int		iwn_hw_init(struct iwn_softc *);
 void		iwn_hw_stop(struct iwn_softc *);
 void		iwn_init_locked(struct iwn_softc *);
@@ -218,6 +223,9 @@ static void 	iwn_scan_end(struct ieee80211com *);
 static void 	iwn_set_channel(struct ieee80211com *);
 static void 	iwn_scan_curchan(struct ieee80211_scan_state *, unsigned long);
 static void 	iwn_scan_mindwell(struct ieee80211_scan_state *);
+static int	iwn_setregdomain(struct ieee80211com *,
+		    struct ieee80211_regdomain *, int,
+		    struct ieee80211_channel []);
 static void	iwn_hw_reset(void *, int);
 static void	iwn_radio_on(void *, int);
 static void	iwn_radio_off(void *, int);
@@ -284,6 +292,8 @@ static const struct iwn_ident iwn_ident_table [] = {
 	{ 0x8086, 0x4239, "Intel(R) PRO/Wireless 6000" },
 	{ 0x8086, 0x422B, "Intel(R) PRO/Wireless 6000" },
 	{ 0x8086, 0x422C, "Intel(R) PRO/Wireless 6000" },
+	{ 0x8086, 0x0086, "Intel(R) PRO/Wireless 6050" },
+	{ 0x8086, 0x0087, "Intel(R) PRO/Wireless 6050" },
 	{ 0, 0, NULL }
 };
 
@@ -291,7 +301,6 @@ static const struct iwn_hal iwn4965_hal = {
 	iwn4965_load_firmware,
 	iwn4965_read_eeprom,
 	iwn4965_post_alive,
-	iwn4965_apm_init,
 	iwn4965_nic_config,
 	iwn4965_update_sched,
 	iwn4965_get_temperature,
@@ -301,7 +310,10 @@ static const struct iwn_hal iwn4965_hal = {
 	iwn4965_set_gains,
 	iwn4965_add_node,
 	iwn4965_tx_done,
-	&iwn4965_sensitivity_limits,
+#if 0	/* HT */
+	iwn4965_ampdu_tx_start,
+	iwn4965_ampdu_tx_stop,
+#endif
 	IWN4965_NTXQUEUES,
 	IWN4965_NDMACHNLS,
 	IWN4965_ID_BROADCAST,
@@ -310,14 +322,13 @@ static const struct iwn_hal iwn4965_hal = {
 	IWN4965_FW_TEXT_MAXSZ,
 	IWN4965_FW_DATA_MAXSZ,
 	IWN4965_FWSZ,
-	IWN4965_SCHED_TXFACT,
+	IWN4965_SCHED_TXFACT
 };
 
 static const struct iwn_hal iwn5000_hal = {
 	iwn5000_load_firmware,
 	iwn5000_read_eeprom,
 	iwn5000_post_alive,
-	iwn5000_apm_init,
 	iwn5000_nic_config,
 	iwn5000_update_sched,
 	iwn5000_get_temperature,
@@ -327,7 +338,10 @@ static const struct iwn_hal iwn5000_hal = {
 	iwn5000_set_gains,
 	iwn5000_add_node,
 	iwn5000_tx_done,
-	&iwn5000_sensitivity_limits,
+#if 0	/* HT */
+	iwn5000_ampdu_tx_start,
+	iwn5000_ampdu_tx_stop,
+#endif
 	IWN5000_NTXQUEUES,
 	IWN5000_NDMACHNLS,
 	IWN5000_ID_BROADCAST,
@@ -336,7 +350,7 @@ static const struct iwn_hal iwn5000_hal = {
 	IWN5000_FW_TEXT_MAXSZ,
 	IWN5000_FW_DATA_MAXSZ,
 	IWN5000_FWSZ,
-	IWN5000_SCHED_TXFACT,
+	IWN5000_SCHED_TXFACT
 };
 
 static int
@@ -434,14 +448,6 @@ iwn_attach(device_t dev)
 		goto fail;
 	}
 
-	/* Power ON adapter. */
-	error = hal->apm_init(sc);
-	if (error != 0) {
-		device_printf(dev, "could not power ON adapter, error %d\n",
-		    error);
-		goto fail;
-	}
-
 	/* Allocate DMA memory for firmware transfers. */
 	error = iwn_alloc_fwmem(sc);
 	if (error != 0) {
@@ -459,6 +465,15 @@ iwn_attach(device_t dev)
 		goto fail;
 	}
 
+	/* Allocate ICT table for 5000 Series. */
+	if (sc->hw_type != IWN_HW_REV_TYPE_4965 &&
+	    (error = iwn_alloc_ict(sc)) != 0) {
+		device_printf(dev,
+		    "%s: could not allocate ICT table, error %d\n",
+		    __func__, error);
+		goto fail;
+	}
+
 	/* Allocate TX scheduler "rings". */
 	error = iwn_alloc_sched(sc);
 	if (error != 0) {
@@ -490,8 +505,15 @@ iwn_attach(device_t dev)
 	/* Clear pending interrupts. */
 	IWN_WRITE(sc, IWN_INT, 0xffffffff);
 
-	/* Initialization firmware has not been loaded yet. */
-	sc->sc_flags |= IWN_FLAG_FIRST_BOOT;
+	/* Count the number of available chains. */
+	sc->ntxchains =
+	    ((sc->txchainmask >> 2) & 1) +
+	    ((sc->txchainmask >> 1) & 1) +
+	    ((sc->txchainmask >> 0) & 1);
+	sc->nrxchains =
+	    ((sc->rxchainmask >> 2) & 1) +
+	    ((sc->rxchainmask >> 1) & 1) +
+	    ((sc->rxchainmask >> 0) & 1);
 
 	ifp = sc->sc_ifp = if_alloc(IFT_IEEE80211);
 	if (ifp == NULL) {
@@ -512,13 +534,13 @@ iwn_attach(device_t dev)
 		| IEEE80211_C_SHSLOT		/* short slot time supported */
 		| IEEE80211_C_WPA
 		| IEEE80211_C_SHPREAMBLE	/* short preamble supported */
-#if 0
 		| IEEE80211_C_BGSCAN		/* background scanning */
+#if 0
 		| IEEE80211_C_IBSS		/* ibss/adhoc mode */
 #endif
 		| IEEE80211_C_WME		/* WME */
 		;
-#if 0
+#if 0	/* HT */
 	/* XXX disable until HT channel setup works */
 	ic->ic_htcaps =
 		  IEEE80211_HTCAP_SMPS_ENA	/* SM PS mode enabled */
@@ -532,6 +554,18 @@ iwn_attach(device_t dev)
 		| IEEE80211_HTC_AMPDU		/* tx A-MPDU */
 		| IEEE80211_HTC_AMSDU		/* tx A-MSDU */
 		;
+
+	/* Set HT capabilities. */
+	ic->ic_htcaps =
+#if IWN_RBUF_SIZE == 8192
+	    IEEE80211_HTCAP_AMSDU7935 |
+#endif
+	    IEEE80211_HTCAP_SMPS_DIS |
+	    IEEE80211_HTCAP_CBW20_40 |
+	    IEEE80211_HTCAP_SGI20 |
+	    IEEE80211_HTCAP_SGI40;
+	if (sc->hw_type != IWN_HW_REV_TYPE_4965)
+		ic->ic_htcaps |= IEEE80211_HTCAP_GF;
 #endif
 
 	/* Read MAC address, channels, etc from EEPROM. */
@@ -542,13 +576,19 @@ iwn_attach(device_t dev)
 		goto fail;
 	}
 
-	/* Power OFF adapter. */
-	iwn_apm_stop(sc);
-
 	device_printf(sc->sc_dev, "MIMO %dT%dR, %.4s, address %6D\n",
 	    sc->ntxchains, sc->nrxchains, sc->eeprom_domain,
 	    macaddr, ":");
 
+#if 0	/* HT */
+	/* Set supported HT rates. */
+	ic->ic_sup_mcs[0] = 0xff;
+	if (sc->nrxchains > 1)
+		ic->ic_sup_mcs[1] = 0xff;
+	if (sc->nrxchains > 2)
+		ic->ic_sup_mcs[2] = 0xff;
+#endif
+
 	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
 	ifp->if_softc = sc;
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
@@ -566,11 +606,19 @@ iwn_attach(device_t dev)
 	ic->ic_node_alloc = iwn_node_alloc;
 	ic->ic_newassoc = iwn_newassoc;
 	ic->ic_wme.wme_update = iwn_wme_update;
+	ic->ic_update_mcast = iwn_update_mcast;
 	ic->ic_scan_start = iwn_scan_start;
 	ic->ic_scan_end = iwn_scan_end;
 	ic->ic_set_channel = iwn_set_channel;
 	ic->ic_scan_curchan = iwn_scan_curchan;
 	ic->ic_scan_mindwell = iwn_scan_mindwell;
+	ic->ic_setregdomain = iwn_setregdomain;
+#if 0	/* HT */
+	ic->ic_ampdu_rx_start = iwn_ampdu_rx_start;
+	ic->ic_ampdu_rx_stop = iwn_ampdu_rx_stop;
+	ic->ic_ampdu_tx_start = iwn_ampdu_tx_start;
+	ic->ic_ampdu_tx_stop = iwn_ampdu_tx_stop;
+#endif
 
 	iwn_radiotap_attach(sc);
 	iwn_sysctlattach(sc);
@@ -601,65 +649,63 @@ iwn_hal_attach(struct iwn_softc *sc)
 	switch (sc->hw_type) {
 	case IWN_HW_REV_TYPE_4965:
 		sc->sc_hal = &iwn4965_hal;
+		sc->limits = &iwn4965_sensitivity_limits;
 		sc->fwname = "iwn4965fw";
-		sc->critical_temp = IWN_CTOK(110);
-		sc->txantmsk = IWN_ANT_A | IWN_ANT_B;
-		sc->rxantmsk = IWN_ANT_ABC;
-		sc->ntxchains = 2;
-		sc->nrxchains = 3;
+		sc->txchainmask = IWN_ANT_AB;
+		sc->rxchainmask = IWN_ANT_ABC;
 		break;
 	case IWN_HW_REV_TYPE_5100:
 		sc->sc_hal = &iwn5000_hal;
+		sc->limits = &iwn5000_sensitivity_limits;
 		sc->fwname = "iwn5000fw";
-		sc->critical_temp = 110;
-		sc->txantmsk = IWN_ANT_B;
-		sc->rxantmsk = IWN_ANT_A | IWN_ANT_B;
-		sc->ntxchains = 1;
-		sc->nrxchains = 2;
+		sc->txchainmask = IWN_ANT_B;
+		sc->rxchainmask = IWN_ANT_AB;
 		break;
 	case IWN_HW_REV_TYPE_5150:
 		sc->sc_hal = &iwn5000_hal;
+		sc->limits = &iwn5150_sensitivity_limits;
 		sc->fwname = "iwn5150fw";
-		/* NB: critical temperature will be read from EEPROM. */
-		sc->txantmsk = IWN_ANT_A;
-		sc->rxantmsk = IWN_ANT_A | IWN_ANT_B;
-		sc->ntxchains = 1;
-		sc->nrxchains = 2;
+		sc->txchainmask = IWN_ANT_A;
+		sc->rxchainmask = IWN_ANT_AB;
 		break;
 	case IWN_HW_REV_TYPE_5300:
 	case IWN_HW_REV_TYPE_5350:
 		sc->sc_hal = &iwn5000_hal;
+		sc->limits = &iwn5000_sensitivity_limits;
 		sc->fwname = "iwn5000fw";
-		sc->critical_temp = 110;
-		sc->txantmsk = sc->rxantmsk = IWN_ANT_ABC;
-		sc->ntxchains = sc->nrxchains = 3;
+		sc->txchainmask = IWN_ANT_ABC;
+		sc->rxchainmask = IWN_ANT_ABC;
 		break;
 	case IWN_HW_REV_TYPE_1000:
 		sc->sc_hal = &iwn5000_hal;
+		sc->limits = &iwn5000_sensitivity_limits;
 		sc->fwname = "iwn1000fw";
-		sc->critical_temp = 110;
-		sc->txantmsk = IWN_ANT_A;
-		sc->rxantmsk = IWN_ANT_A | IWN_ANT_B;
-		sc->ntxchains = 1;
-		sc->nrxchains = 2;
+		sc->txchainmask = IWN_ANT_A;
+		sc->rxchainmask = IWN_ANT_AB;
 		break;
 	case IWN_HW_REV_TYPE_6000:
 		sc->sc_hal = &iwn5000_hal;
+		sc->limits = &iwn6000_sensitivity_limits;
 		sc->fwname = "iwn6000fw";
-		sc->critical_temp = 110;
-		sc->txantmsk = IWN_ANT_ABC;
-		sc->rxantmsk = IWN_ANT_ABC;
-		sc->ntxchains = 3;
-		sc->nrxchains = 3;
+		switch (pci_get_device(sc->sc_dev)) {
+		case 0x422C:
+		case 0x4239:
+			sc->sc_flags |= IWN_FLAG_INTERNAL_PA;
+			sc->txchainmask = IWN_ANT_BC;
+			sc->rxchainmask = IWN_ANT_BC;
+			break;
+		default:
+			sc->txchainmask = IWN_ANT_ABC;
+			sc->rxchainmask = IWN_ANT_ABC;
+			break;
+		}
 		break;
 	case IWN_HW_REV_TYPE_6050:
 		sc->sc_hal = &iwn5000_hal;
-		sc->fwname = "iwn6050fw";
-		sc->critical_temp = 110;
-		sc->txantmsk = IWN_ANT_ABC;
-		sc->rxantmsk = IWN_ANT_ABC;
-		sc->ntxchains = 3;
-		sc->nrxchains = 3;
+		sc->limits = &iwn6000_sensitivity_limits;
+		sc->fwname = "iwn6000fw";
+		sc->txchainmask = IWN_ANT_AB;
+		sc->rxchainmask = IWN_ANT_AB;
 		break;
 	default:
 		device_printf(sc->sc_dev, "adapter type %d not supported\n",
@@ -749,16 +795,15 @@ iwn_cleanup(device_t dev)
 		ieee80211_ifdetach(ic);
 	}
 
-	iwn_unload_firmware(sc);
-
+	/* Free DMA resources. */
 	iwn_free_rx_ring(sc, &sc->rxq);
-
 	if (sc->sc_hal != NULL)
 		for (i = 0; i < sc->sc_hal->ntxqs; i++)
 			iwn_free_tx_ring(sc, &sc->txq[i]);
-
 	iwn_free_sched(sc);
 	iwn_free_kw(sc);
+	if (sc->ict != NULL)
+		iwn_free_ict(sc);
 	iwn_free_fwmem(sc);
 
 	if (sc->irq != NULL) {
@@ -814,6 +859,7 @@ static __inline uint32_t
 iwn_prph_read(struct iwn_softc *sc, uint32_t addr)
 {
 	IWN_WRITE(sc, IWN_PRPH_RADDR, IWN_PRPH_DWORD | addr);
+	IWN_BARRIER_READ_WRITE(sc);
 	return IWN_READ(sc, IWN_PRPH_RDATA);
 }
 
@@ -821,6 +867,7 @@ static __inline void
 iwn_prph_write(struct iwn_softc *sc, uint32_t addr, uint32_t data)
 {
 	IWN_WRITE(sc, IWN_PRPH_WADDR, IWN_PRPH_DWORD | addr);
+	IWN_BARRIER_WRITE(sc);
 	IWN_WRITE(sc, IWN_PRPH_WDATA, data);
 }
 
@@ -848,6 +895,7 @@ static __inline uint32_t
 iwn_mem_read(struct iwn_softc *sc, uint32_t addr)
 {
 	IWN_WRITE(sc, IWN_MEM_RADDR, addr);
+	IWN_BARRIER_READ_WRITE(sc);
 	return IWN_READ(sc, IWN_MEM_RDATA);
 }
 
@@ -855,6 +903,7 @@ static __inline void
 iwn_mem_write(struct iwn_softc *sc, uint32_t addr, uint32_t data)
 {
 	IWN_WRITE(sc, IWN_MEM_WADDR, addr);
+	IWN_BARRIER_WRITE(sc);
 	IWN_WRITE(sc, IWN_MEM_WDATA, data);
 }
 
@@ -921,8 +970,11 @@ iwn_eeprom_unlock(struct iwn_softc *sc)
 int
 iwn_init_otprom(struct iwn_softc *sc)
 {
-	int error;
+	uint32_t base;
+	uint16_t next;
+	int count, error;
 
+	/* Wait for clock stabilization before accessing prph. */
 	error = iwn_clock_wait(sc);
 	if (error != 0)
 		return error;
@@ -935,11 +987,37 @@ iwn_init_otprom(struct iwn_softc *sc)
 	iwn_prph_clrbits(sc, IWN_APMG_PS, IWN_APMG_PS_RESET_REQ);
 	iwn_nic_unlock(sc);
 
+	/* Set auto clock gate disable bit for HW with OTP shadow RAM. */
+	if (sc->hw_type != IWN_HW_REV_TYPE_1000) {
+		IWN_SETBITS(sc, IWN_DBG_LINK_PWR_MGMT,
+		    IWN_RESET_LINK_PWR_MGMT_DIS);
+	}
 	IWN_CLRBITS(sc, IWN_EEPROM_GP, IWN_EEPROM_GP_IF_OWNER);
 	/* Clear ECC status. */
 	IWN_SETBITS(sc, IWN_OTP_GP,
 	    IWN_OTP_GP_ECC_CORR_STTS | IWN_OTP_GP_ECC_UNCORR_STTS);
 
+	/*
+	 * Find last valid OTP block (contains the EEPROM image) for HW
+	 * without OTP shadow RAM.
+	 */
+	if (sc->hw_type == IWN_HW_REV_TYPE_1000) {
+		/* Switch to absolute addressing mode. */
+		IWN_CLRBITS(sc, IWN_OTP_GP, IWN_OTP_GP_RELATIVE_ACCESS);
+		base = 0;
+		for (count = 0; count < IWN1000_OTP_NBLOCKS; count++) {
+			error = iwn_read_prom_data(sc, base, &next, 2);
+			if (error != 0)
+				return error;
+			if (next == 0)	/* End of linked-list. */
+				break;
+			base = le16toh(next);
+		}
+		if (base == 0 || count == IWN1000_OTP_NBLOCKS)
+			return EIO;
+		/* Skip "next" word. */
+		sc->prom_base = base + 1;
+	}
 	return 0;
 }
 
@@ -950,15 +1028,16 @@ iwn_read_prom_data(struct iwn_softc *sc, uint32_t addr, void *data, int count)
 	int ntries;
 	uint8_t *out = data;
 
+	addr += sc->prom_base;
 	for (; count > 0; count -= 2, addr++) {
 		IWN_WRITE(sc, IWN_EEPROM, addr << 2);
-		for (ntries = 0; ntries < 100; ntries++) {
+		for (ntries = 0; ntries < 10; ntries++) {
 			val = IWN_READ(sc, IWN_EEPROM);
 			if (val & IWN_EEPROM_READ_VALID)
 				break;
 			DELAY(5);
 		}
-		if (ntries == 100) {
+		if (ntries == 10) {
 			device_printf(sc->sc_dev,
 			    "timeout reading ROM at 0x%x\n", addr);
 			return ETIMEDOUT;
@@ -1035,7 +1114,7 @@ fail:
 	return error;
 }
 
-static void
+void
 iwn_dma_contig_free(struct iwn_dma_info *dma)
 {
 	if (dma->tag != NULL) {
@@ -1079,6 +1158,20 @@ iwn_free_kw(struct iwn_softc *sc)
 	iwn_dma_contig_free(&sc->kw_dma);
 }
 
+int
+iwn_alloc_ict(struct iwn_softc *sc)
+{
+	/* ICT table must be aligned on a 4KB boundary. */
+	return iwn_dma_contig_alloc(sc, &sc->ict_dma,
+	    (void **)&sc->ict, IWN_ICT_SIZE, 4096, BUS_DMA_NOWAIT);
+}
+
+void
+iwn_free_ict(struct iwn_softc *sc)
+{
+	iwn_dma_contig_free(&sc->ict_dma);
+}
+
 int
 iwn_alloc_fwmem(struct iwn_softc *sc)
 {
@@ -1115,7 +1208,7 @@ iwn_alloc_rx_ring(struct iwn_softc *sc, struct iwn_rx_ring *ring)
 	error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0,
 	    BUS_SPACE_MAXADDR_32BIT,
 	    BUS_SPACE_MAXADDR, NULL, NULL, MJUMPAGESIZE, 1,
-	    MJUMPAGESIZE, BUS_DMA_NOWAIT, NULL, NULL, &ring->desc_dma.tag);
+	    MJUMPAGESIZE, BUS_DMA_NOWAIT, NULL, NULL, &ring->data_dmat);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
 		    "%s: bus_dma_tag_create_failed, error %d\n",
@@ -1134,17 +1227,6 @@ iwn_alloc_rx_ring(struct iwn_softc *sc, struct iwn_rx_ring *ring)
 		goto fail;
 	}
 
-	error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0,
-	    BUS_SPACE_MAXADDR_32BIT,
-	    BUS_SPACE_MAXADDR, NULL, NULL, MJUMPAGESIZE, 1,
-	    MJUMPAGESIZE, BUS_DMA_NOWAIT, NULL, NULL, &ring->desc_dma.tag);
-	if (error != 0) {
-		device_printf(sc->sc_dev,
-		    "%s: bus_dma_tag_create_failed, error %d\n",
-		    __func__, error);
-		goto fail;
-	}
-
 	/*
 	 * Allocate and map RX buffers.
 	 */
@@ -1152,7 +1234,7 @@ iwn_alloc_rx_ring(struct iwn_softc *sc, struct iwn_rx_ring *ring)
 		struct iwn_rx_data *data = &ring->data[i];
 		bus_addr_t paddr;
 
-		error = bus_dmamap_create(ring->desc_dma.tag, 0, &data->map);
+		error = bus_dmamap_create(ring->data_dmat, 0, &data->map);
 		if (error != 0) {
 			device_printf(sc->sc_dev,
 			    "%s: bus_dmamap_create failed, error %d\n",
@@ -1169,7 +1251,7 @@ iwn_alloc_rx_ring(struct iwn_softc *sc, struct iwn_rx_ring *ring)
 		}
 
 		/* Map page. */
-		error = bus_dmamap_load(ring->desc_dma.tag, data->map,
+		error = bus_dmamap_load(ring->data_dmat, data->map,
 		    mtod(data->m, caddr_t), MJUMPAGESIZE,
 		    iwn_dma_map_addr, &paddr, BUS_DMA_NOWAIT);
 		if (error != 0 && error != EFBIG) {
@@ -1180,6 +1262,8 @@ iwn_alloc_rx_ring(struct iwn_softc *sc, struct iwn_rx_ring *ring)
 			error = ENOMEM;	/* XXX unique code */
 			goto fail;
 		}
+		bus_dmamap_sync(ring->data_dmat, data->map,
+		    BUS_DMASYNC_PREWRITE);
 
 		/* Set physical address of RX buffer (256-byte aligned). */
 		ring->desc[i] = htole32(paddr >> 8);
@@ -1228,11 +1312,13 @@ iwn_free_rx_ring(struct iwn_softc *sc, struct iwn_rx_ring *ring)
 		struct iwn_rx_data *data = &ring->data[i];
 
 		if (data->m != NULL) {
-			bus_dmamap_sync(ring->desc_dma.tag, data->map,
+			bus_dmamap_sync(ring->data_dmat, data->map,
 			    BUS_DMASYNC_POSTREAD);
-			bus_dmamap_unload(ring->desc_dma.tag, data->map);
+			bus_dmamap_unload(ring->data_dmat, data->map);
 			m_freem(data->m);
 		}
+		if (data->map != NULL)
+			bus_dmamap_destroy(ring->data_dmat, data->map);
 	}
 }
 
@@ -1278,7 +1364,7 @@ iwn_alloc_tx_ring(struct iwn_softc *sc, struct iwn_tx_ring *ring, int qid)
 	error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0,
 	    BUS_SPACE_MAXADDR_32BIT,
 	    BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES, IWN_MAX_SCATTER - 1,
-	    MCLBYTES, BUS_DMA_NOWAIT, NULL, NULL, &ring->desc_dma.tag);
+	    MCLBYTES, BUS_DMA_NOWAIT, NULL, NULL, &ring->data_dmat);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
 		    "%s: bus_dma_tag_create_failed, error %d\n",
@@ -1294,13 +1380,15 @@ iwn_alloc_tx_ring(struct iwn_softc *sc, struct iwn_tx_ring *ring, int qid)
 		data->scratch_paddr = paddr + 12;
 		paddr += sizeof (struct iwn_tx_cmd);
 
-		error = bus_dmamap_create(ring->desc_dma.tag, 0, &data->map);
+		error = bus_dmamap_create(ring->data_dmat, 0, &data->map);
 		if (error != 0) {
 			device_printf(sc->sc_dev,
 			    "%s: bus_dmamap_create failed, error %d\n",
 			    __func__, error);
 			goto fail;
 		}
+		bus_dmamap_sync(ring->data_dmat, data->map,
+		    BUS_DMASYNC_PREWRITE);
 	}
 	return 0;
 fail:
@@ -1317,9 +1405,7 @@ iwn_reset_tx_ring(struct iwn_softc *sc, struct iwn_tx_ring *ring)
 		struct iwn_tx_data *data = &ring->data[i];
 
 		if (data->m != NULL) {
-			bus_dmamap_sync(ring->desc_dma.tag, data->map,
-			    BUS_DMASYNC_POSTWRITE);
-			bus_dmamap_unload(ring->desc_dma.tag, data->map);
+			bus_dmamap_unload(ring->data_dmat, data->map);
 			m_freem(data->m);
 			data->m = NULL;
 		}
@@ -1341,21 +1427,45 @@ iwn_free_tx_ring(struct iwn_softc *sc, struct iwn_tx_ring *ring)
 	iwn_dma_contig_free(&ring->desc_dma);
 	iwn_dma_contig_free(&ring->cmd_dma);
 
-	if (ring->data != NULL) {
-		for (i = 0; i < IWN_TX_RING_COUNT; i++) {
-			struct iwn_tx_data *data = &ring->data[i];
+	for (i = 0; i < IWN_TX_RING_COUNT; i++) {
+		struct iwn_tx_data *data = &ring->data[i];
 
-			if (data->m != NULL) {
-				bus_dmamap_sync(ring->desc_dma.tag, data->map,
-				     BUS_DMASYNC_POSTWRITE);
-				bus_dmamap_unload(ring->desc_dma.tag,
-				    data->map);
-				m_freem(data->m);
-			}
+		if (data->m != NULL) {
+			bus_dmamap_sync(ring->data_dmat, data->map,
+			    BUS_DMASYNC_POSTWRITE);
+			bus_dmamap_unload(ring->data_dmat, data->map);
+			m_freem(data->m);
 		}
+		if (data->map != NULL)
+			bus_dmamap_destroy(ring->data_dmat, data->map);
 	}
 }
 
+void
+iwn5000_ict_reset(struct iwn_softc *sc)
+{
+	/* Disable interrupts. */
+	IWN_WRITE(sc, IWN_INT_MASK, 0);
+
+	/* Reset ICT table. */
+	memset(sc->ict, 0, IWN_ICT_SIZE);
+	sc->ict_cur = 0;
+
+	/* Set physical address of ICT table (4KB aligned.) */
+	DPRINTF(sc, IWN_DEBUG_RESET, "%s: enabling ICT\n", __func__);
+	IWN_WRITE(sc, IWN_DRAM_INT_TBL, IWN_DRAM_INT_TBL_ENABLE |
+	    IWN_DRAM_INT_TBL_WRAP_CHECK | sc->ict_dma.paddr >> 12);
+
+	/* Enable periodic RX interrupt. */
+	sc->int_mask |= IWN_INT_RX_PERIODIC;
+	/* Switch to ICT interrupt mode in driver. */
+	sc->sc_flags |= IWN_FLAG_USE_ICT;
+
+	/* Re-enable interrupts. */
+	IWN_WRITE(sc, IWN_INT, 0xffffffff);
+	IWN_WRITE(sc, IWN_INT_MASK, sc->int_mask);
+}
+
 int
 iwn_read_eeprom(struct iwn_softc *sc, uint8_t macaddr[IEEE80211_ADDR_LEN])
 {
@@ -1370,6 +1480,15 @@ iwn_read_eeprom(struct iwn_softc *sc, uint8_t macaddr[IEEE80211_ADDR_LEN])
 	DPRINTF(sc, IWN_DEBUG_RESET, "%s found\n",
 	    (sc->sc_flags & IWN_FLAG_HAS_OTPROM) ? "OTPROM" : "EEPROM");
 
+	/* Adapter has to be powered on for EEPROM access to work. */
+	error = iwn_apm_init(sc);
+	if (error != 0) {
+		device_printf(sc->sc_dev,
+		    "%s: could not power ON adapter, error %d\n",
+		    __func__, error);
+		return error;
+	}
+
 	if ((IWN_READ(sc, IWN_EEPROM_GP) & 0x7) == 0) {
 		device_printf(sc->sc_dev, "%s: bad ROM signature\n", __func__);
 		return EIO;
@@ -1382,12 +1501,14 @@ iwn_read_eeprom(struct iwn_softc *sc, uint8_t macaddr[IEEE80211_ADDR_LEN])
 		return error;
 	}
 
-	if ((sc->sc_flags & IWN_FLAG_HAS_OTPROM) &&
-	    ((error = iwn_init_otprom(sc)) != 0)) {
-		device_printf(sc->sc_dev,
-		    "%s: could not initialize OTPROM, error %d\n",
-		    __func__, error);
-		return error;
+	if (sc->sc_flags & IWN_FLAG_HAS_OTPROM) {
+		error = iwn_init_otprom(sc);
+		if (error != 0) {
+			device_printf(sc->sc_dev,
+			    "%s: could not initialize OTPROM, error %d\n",
+			    __func__, error);
+			return error;
+		}
 	}
 
 	iwn_read_prom_data(sc, IWN_EEPROM_RFCFG, &val, 2);
@@ -1400,6 +1521,8 @@ iwn_read_eeprom(struct iwn_softc *sc, uint8_t macaddr[IEEE80211_ADDR_LEN])
 	/* Read adapter-specific information from EEPROM. */
 	hal->read_eeprom(sc);
 
+	iwn_apm_stop(sc);	/* Power OFF adapter. */
+
 	iwn_eeprom_unlock(sc);
 	return 0;
 }
@@ -1407,15 +1530,18 @@ iwn_read_eeprom(struct iwn_softc *sc, uint8_t macaddr[IEEE80211_ADDR_LEN])
 void
 iwn4965_read_eeprom(struct iwn_softc *sc)
 {
+	uint32_t addr;
 	int i;
 	uint16_t val;
 
 	/* Read regulatory domain (4 ASCII characters.) */
 	iwn_read_prom_data(sc, IWN4965_EEPROM_DOMAIN, sc->eeprom_domain, 4);
 
-	/* Read the list of authorized channels. */
-	for (i = 0; i < 7; i++)
-		iwn_read_eeprom_channels(sc, iwn4965_regulatory_bands[i], i);
+	/* Read the list of authorized channels (20MHz ones only.) */
+	for (i = 0; i < 5; i++) {
+		addr = iwn4965_regulatory_bands[i];
+		iwn_read_eeprom_channels(sc, i, addr);
+	}
 
 	/* Read maximum allowed TX power for 2GHz and 5GHz bands. */
 	iwn_read_prom_data(sc, IWN4965_EEPROM_MAXPOW, &val, 2);
@@ -1441,7 +1567,7 @@ iwn4965_read_eeprom(struct iwn_softc *sc)
 
 #ifdef IWN_DEBUG
 	/* Print samples. */
-	if (sc->sc_debug & IWN_DEBUG_ANY || 1) {
+	if (sc->sc_debug & IWN_DEBUG_ANY) {
 		for (i = 0; i < IWN_NBANDS; i++)
 			iwn4965_print_power_group(sc, i);
 	}
@@ -1486,7 +1612,7 @@ iwn4965_print_power_group(struct iwn_softc *sc, int i)
 void
 iwn5000_read_eeprom(struct iwn_softc *sc)
 {
-	int32_t temp, volt, delta;
+	int32_t temp, volt;
 	uint32_t addr, base;
 	int i;
 	uint16_t val;
@@ -1497,24 +1623,27 @@ iwn5000_read_eeprom(struct iwn_softc *sc)
 	iwn_read_prom_data(sc, base + IWN5000_EEPROM_DOMAIN,
 	    sc->eeprom_domain, 4);
 
-	/* Read the list of authorized channels. */
-	for (i = 0; i < 7; i++) {
+	/* Read the list of authorized channels (20MHz ones only.) */
+	for (i = 0; i < 5; i++) {
 		addr = base + iwn5000_regulatory_bands[i];
-		iwn_read_eeprom_channels(sc, addr, i);
+		iwn_read_eeprom_channels(sc, i, addr);
 	}
 
+	/* Read enhanced TX power information for 6000 Series. */
+	if (sc->hw_type >= IWN_HW_REV_TYPE_6000)
+		iwn_read_eeprom_enhinfo(sc);
+
 	iwn_read_prom_data(sc, IWN5000_EEPROM_CAL, &val, 2);
 	base = le16toh(val);
 	if (sc->hw_type == IWN_HW_REV_TYPE_5150) {
-		/* Compute critical temperature (in Kelvin.) */
+		/* Compute temperature offset. */
 		iwn_read_prom_data(sc, base + IWN5000_EEPROM_TEMP, &val, 2);
 		temp = le16toh(val);
 		iwn_read_prom_data(sc, base + IWN5000_EEPROM_VOLT, &val, 2);
 		volt = le16toh(val);
-		delta = temp - (volt / -5);
-		sc->critical_temp = (IWN_CTOK(110) - delta) * -5;
-		DPRINTF(sc, IWN_DEBUG_CALIBRATE, "temp=%d volt=%d delta=%dK\n",
-		    temp, volt, delta);
+		sc->temp_off = temp - (volt / -5);
+		DPRINTF(sc, IWN_DEBUG_CALIBRATE, "temp=%d volt=%d offset=%dK\n",
+		    temp, volt, sc->temp_off);
 	} else {
 		/* Read crystal calibration. */
 		iwn_read_prom_data(sc, base + IWN5000_EEPROM_CRYSTAL,
@@ -1524,19 +1653,38 @@ iwn5000_read_eeprom(struct iwn_softc *sc)
 	}
 }
 
+/*
+ * Translate EEPROM flags to net80211.
+ */
+static uint32_t
+iwn_eeprom_channel_flags(struct iwn_eeprom_chan *channel)
+{
+	uint32_t nflags;
+
+	nflags = 0;
+	if ((channel->flags & IWN_EEPROM_CHAN_ACTIVE) == 0)
+		nflags |= IEEE80211_CHAN_PASSIVE;
+	if ((channel->flags & IWN_EEPROM_CHAN_IBSS) == 0)
+		nflags |= IEEE80211_CHAN_NOADHOC;
+	if (channel->flags & IWN_EEPROM_CHAN_RADAR) {
+		nflags |= IEEE80211_CHAN_DFS;
+		/* XXX apparently IBSS may still be marked */
+		nflags |= IEEE80211_CHAN_NOADHOC;
+	}
+
+	return nflags;
+}
+
 static void
-iwn_read_eeprom_band(struct iwn_softc *sc, const struct iwn_chan_band *band,
-    uint32_t flags, uint32_t addr)
+iwn_read_eeprom_band(struct iwn_softc *sc, int n)
 {
 	struct ifnet *ifp = sc->sc_ifp;
 	struct ieee80211com *ic = ifp->if_l2com;
-	struct iwn_eeprom_chan channels[IWN_MAX_CHAN_PER_BAND];
+	struct iwn_eeprom_chan *channels = sc->eeprom_channels[n];
+	const struct iwn_chan_band *band = &iwn_bands[n];
 	struct ieee80211_channel *c;
 	int i, chan, nflags;
 
-	iwn_read_prom_data(sc, addr, channels,
-	    band->nchan * sizeof (struct iwn_eeprom_chan));
-
 	for (i = 0; i < band->nchan; i++) {
 		if (!(channels[i].flags & IWN_EEPROM_CHAN_VALID)) {
 			DPRINTF(sc, IWN_DEBUG_RESET,
@@ -1546,18 +1694,7 @@ iwn_read_eeprom_band(struct iwn_softc *sc, const struct iwn_chan_band *band,
 			continue;
 		}
 		chan = band->chan[i];
-
-		/* Translate EEPROM flags to net80211 */
-		nflags = 0;
-		if ((channels[i].flags & IWN_EEPROM_CHAN_ACTIVE) == 0)
-			nflags |= IEEE80211_CHAN_PASSIVE;
-		if ((channels[i].flags & IWN_EEPROM_CHAN_IBSS) == 0)
-			nflags |= IEEE80211_CHAN_NOADHOC;
-		if (channels[i].flags & IWN_EEPROM_CHAN_RADAR) {
-			nflags |= IEEE80211_CHAN_DFS;
-			/* XXX apparently IBSS may still be marked */
-			nflags |= IEEE80211_CHAN_NOADHOC;
-		}
+		nflags = iwn_eeprom_channel_flags(&channels[i]);
 
 		DPRINTF(sc, IWN_DEBUG_RESET,
 		    "add chan %d flags 0x%x maxpwr %d\n",
@@ -1565,10 +1702,12 @@ iwn_read_eeprom_band(struct iwn_softc *sc, const struct iwn_chan_band *band,
 
 		c = &ic->ic_channels[ic->ic_nchans++];
 		c->ic_ieee = chan;
-		c->ic_freq = ieee80211_ieee2mhz(chan, flags);
 		c->ic_maxregpower = channels[i].maxpwr;
 		c->ic_maxpower = 2*c->ic_maxregpower;
-		if (flags & IEEE80211_CHAN_2GHZ) {
+		if (n == 0) {	/* 2GHz band */
+			c->ic_freq = ieee80211_ieee2mhz(chan,
+			    IEEE80211_CHAN_G);
+
 			/* G =>'s B is supported */
 			c->ic_flags = IEEE80211_CHAN_B | nflags;
 
@@ -1576,31 +1715,33 @@ iwn_read_eeprom_band(struct iwn_softc *sc, const struct iwn_chan_band *band,
 			c[0] = c[-1];
 			c->ic_flags = IEEE80211_CHAN_G | nflags;
 		} else {	/* 5GHz band */
+			c->ic_freq = ieee80211_ieee2mhz(chan,
+			    IEEE80211_CHAN_A);
 			c->ic_flags = IEEE80211_CHAN_A | nflags;
 			sc->sc_flags |= IWN_FLAG_HAS_5GHZ;
 		}
+#if 0	/* HT */
 		/* XXX no constraints on using HT20 */
 		/* add HT20, HT40 added separately */
 		c = &ic->ic_channels[ic->ic_nchans++];
 		c[0] = c[-1];
 		c->ic_flags |= IEEE80211_CHAN_HT20;
 		/* XXX NARROW =>'s 1/2 and 1/4 width? */
+#endif
 	}
 }
 
+#if 0	/* HT */
 static void
-iwn_read_eeprom_ht40(struct iwn_softc *sc, const struct iwn_chan_band *band,
-    uint32_t flags, uint32_t addr)
+iwn_read_eeprom_ht40(struct iwn_softc *sc, int n)
 {
 	struct ifnet *ifp = sc->sc_ifp;
 	struct ieee80211com *ic = ifp->if_l2com;
-	struct iwn_eeprom_chan channels[IWN_MAX_CHAN_PER_BAND];
+	struct iwn_eeprom_chan *channels = sc->eeprom_channels[n];
+	const struct iwn_chan_band *band = &iwn_bands[n];
 	struct ieee80211_channel *c, *cent, *extc;
 	int i;
 
-	iwn_read_prom_data(sc, addr, channels,
-	    band->nchan * sizeof (struct iwn_eeprom_chan));
-
 	for (i = 0; i < band->nchan; i++) {
 		if (!(channels[i].flags & IWN_EEPROM_CHAN_VALID) ||
 		    !(channels[i].flags & IWN_EEPROM_CHAN_WIDE)) {
@@ -1615,7 +1756,7 @@ iwn_read_eeprom_ht40(struct iwn_softc *sc, const struct iwn_chan_band *band,
 		 * center channel, then the extension channel above.
 		 */
 		cent = ieee80211_find_channel_byieee(ic, band->chan[i],
-		    flags & ~IEEE80211_CHAN_HT);
+		    band->flags & ~IEEE80211_CHAN_HT);
 		if (cent == NULL) {	/* XXX shouldn't happen */
 			device_printf(sc->sc_dev,
 			    "%s: no entry for channel %d\n",
@@ -1623,7 +1764,7 @@ iwn_read_eeprom_ht40(struct iwn_softc *sc, const struct iwn_chan_band *band,
 			continue;
 		}
 		extc = ieee80211_find_channel(ic, cent->ic_freq+20,
-		    flags & ~IEEE80211_CHAN_HT);
+		    band->flags & ~IEEE80211_CHAN_HT);
 		if (extc == NULL) {
 			DPRINTF(sc, IWN_DEBUG_RESET,
 			    "skip chan %d, extension channel not found\n",
@@ -1647,29 +1788,65 @@ iwn_read_eeprom_ht40(struct iwn_softc *sc, const struct iwn_chan_band *band,
 		c->ic_flags |= IEEE80211_CHAN_HT40D;
 	}
 }
+#endif
 
 static void
-iwn_read_eeprom_channels(struct iwn_softc *sc, uint32_t addr, int n)
+iwn_read_eeprom_channels(struct iwn_softc *sc, int n, uint32_t addr)
 {
 	struct ifnet *ifp = sc->sc_ifp;
 	struct ieee80211com *ic = ifp->if_l2com;
-	static const uint32_t iwnband_flags[] = {
-		IEEE80211_CHAN_G,
-		IEEE80211_CHAN_A,
-		IEEE80211_CHAN_A,
-		IEEE80211_CHAN_A,
-		IEEE80211_CHAN_A,
-		IEEE80211_CHAN_G | IEEE80211_CHAN_HT40,
-		IEEE80211_CHAN_A | IEEE80211_CHAN_HT40
-	};
+
+	iwn_read_prom_data(sc, addr, &sc->eeprom_channels[n],
+	    iwn_bands[n].nchan * sizeof (struct iwn_eeprom_chan));
 
 	if (n < 5)
-		iwn_read_eeprom_band(sc, &iwn_bands[n], iwnband_flags[n], addr);
+		iwn_read_eeprom_band(sc, n);
+#if 0	/* HT */
 	else
-		iwn_read_eeprom_ht40(sc, &iwn_bands[n], iwnband_flags[n], addr);
+		iwn_read_eeprom_ht40(sc, n);
+#endif
 	ieee80211_sort_channels(ic->ic_channels, ic->ic_nchans);
 }
 
+#define nitems(_a)	(sizeof((_a)) / sizeof((_a)[0]))
+
+void
+iwn_read_eeprom_enhinfo(struct iwn_softc *sc)
+{
+	struct iwn_eeprom_enhinfo enhinfo[35];
+	uint16_t val, base;
+	int8_t maxpwr;
+	int i;
+
+	iwn_read_prom_data(sc, IWN5000_EEPROM_REG, &val, 2);
+	base = le16toh(val);
+	iwn_read_prom_data(sc, base + IWN6000_EEPROM_ENHINFO,
+	    enhinfo, sizeof enhinfo);
+
+	memset(sc->enh_maxpwr, 0, sizeof sc->enh_maxpwr);
+	for (i = 0; i < nitems(enhinfo); i++) {
+		if (enhinfo[i].chan == 0 || enhinfo[i].reserved != 0)
+			continue;	/* Skip invalid entries. */
+
+		maxpwr = 0;
+		if (sc->txchainmask & IWN_ANT_A)
+			maxpwr = MAX(maxpwr, enhinfo[i].chain[0]);
+		if (sc->txchainmask & IWN_ANT_B)
+			maxpwr = MAX(maxpwr, enhinfo[i].chain[1]);
+		if (sc->txchainmask & IWN_ANT_C)
+			maxpwr = MAX(maxpwr, enhinfo[i].chain[2]);
+		if (sc->ntxchains == 2)
+			maxpwr = MAX(maxpwr, enhinfo[i].mimo2);
+		else if (sc->ntxchains == 3)
+			maxpwr = MAX(maxpwr, enhinfo[i].mimo3);
+		maxpwr /= 2;	/* Convert half-dBm to dBm. */
+
+		DPRINTF(sc, IWN_DEBUG_RESET, "enhinfo %d, maxpwr=%d\n", i,
+		    maxpwr);
+		sc->enh_maxpwr[i] = maxpwr;
+	}
+}
+
 struct ieee80211_node *
 iwn_node_alloc(struct ieee80211vap *vap, const uint8_t mac[IEEE80211_ADDR_LEN])
 {
@@ -1680,9 +1857,10 @@ void
 iwn_newassoc(struct ieee80211_node *ni, int isnew)
 {
 	struct ieee80211vap *vap = ni->ni_vap;
+	struct iwn_node *wn = (void *)ni;
 
 	ieee80211_amrr_node_init(&IWN_VAP(vap)->iv_amrr,
-	    &IWN_NODE(ni)->amn, ni);
+	    &wn->amn, ni);
 }
 
 int
@@ -1757,13 +1935,15 @@ static void
 iwn_timer_timeout(void *arg)
 {
 	struct iwn_softc *sc = arg;
+	uint32_t flags = 0;
 
 	IWN_LOCK_ASSERT(sc);
 
 	if (sc->calib_cnt && --sc->calib_cnt == 0) {
 		DPRINTF(sc, IWN_DEBUG_CALIBRATE, "%s\n",
 		    "send statistics request");
-		(void) iwn_cmd(sc, IWN_CMD_GET_STATISTICS, NULL, 0, 1);
+		(void) iwn_cmd(sc, IWN_CMD_GET_STATISTICS, &flags,
+		    sizeof flags, 1);
 		sc->calib_cnt = 60;	/* do calibration every 60s */
 	}
 	iwn_watchdog(sc);		/* NB: piggyback tx watchdog */
@@ -1777,30 +1957,6 @@ iwn_calib_reset(struct iwn_softc *sc)
 	sc->calib_cnt = 60;		/* do calibration every 60s */
 }
 
-static __inline int
-maprate(int iwnrate)
-{
-	switch (iwnrate) {
-	/* CCK rates */
-	case  10: return   2;
-	case  20: return   4;
-	case  55: return  11;
-	case 110: return  22;
-	/* OFDM rates */
-	case 0xd: return  12;
-	case 0xf: return  18;
-	case 0x5: return  24;
-	case 0x7: return  36;
-	case 0x9: return  48;
-	case 0xb: return  72;
-	case 0x1: return  96;
-	case 0x3: return 108;
-	/* XXX MCS */
-	}
-	/* unknown rate: should not happen */
-	return 0;
-}
-
 /*
  * Process an RX_DONE (4965AGN only) or MPDU_RX_DONE firmware notification.
  * Each MPDU_RX_DONE notification must be preceded by an RX_PHY one.
@@ -1826,7 +1982,7 @@ iwn_rx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc,
 		/* Check for prior RX_PHY notification. */
 		if (!sc->last_rx_valid) {
 			DPRINTF(sc, IWN_DEBUG_ANY,
-			    "%s: missing AMPDU_RX_START\n", __func__);
+			    "%s: missing RX_PHY\n", __func__);
 			ifp->if_ierrors++;
 			return;
 		}
@@ -1835,7 +1991,7 @@ iwn_rx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc,
 	} else
 		stat = (struct iwn_rx_stat *)(desc + 1);
 
-	bus_dmamap_sync(ring->desc_dma.tag, data->map, BUS_DMASYNC_POSTREAD);
+	bus_dmamap_sync(ring->data_dmat, data->map, BUS_DMASYNC_POSTREAD);
 
 	if (stat->cfg_phy_len > IWN_STAT_MAXLEN) {
 		device_printf(sc->sc_dev,
@@ -1878,7 +2034,9 @@ iwn_rx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc,
 		ifp->if_ierrors++;
 		return;
 	}
-	error = bus_dmamap_load(ring->desc_dma.tag, data->map,
+	bus_dmamap_unload(ring->data_dmat, data->map);
+
+	error = bus_dmamap_load(ring->data_dmat, data->map,
 	    mtod(m1, caddr_t), MJUMPAGESIZE,
 	    iwn_dma_map_addr, &paddr, BUS_DMA_NOWAIT);
 	if (error != 0 && error != EFBIG) {
@@ -1893,7 +2051,8 @@ iwn_rx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc,
 	data->m = m1;
 	/* Update RX descriptor. */
 	ring->desc[ring->cur] = htole32(paddr >> 8);
-	bus_dmamap_sync(ring->desc_dma.tag, data->map, BUS_DMASYNC_PREWRITE);
+	bus_dmamap_sync(ring->desc_dma.tag, ring->desc_dma.map,
+	    BUS_DMASYNC_PREWRITE);
 
 	/* Finalize mbuf. */
 	m->m_pkthdr.rcvif = ifp;
@@ -1913,9 +2072,26 @@ iwn_rx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc,
 
 		tap->wr_tsft = htole64(stat->tstamp);
 		tap->wr_flags = 0;
-		if (stat->flags & htole16(IWN_RXON_SHPREAMBLE))
+		if (stat->flags & htole16(IWN_STAT_FLAG_SHPREAMBLE))
 			tap->wr_flags |= IEEE80211_RADIOTAP_F_SHORTPRE;
-		tap->wr_rate = maprate(stat->rate);
+		switch (stat->rate) {
+		/* CCK rates. */
+		case  10: tap->wr_rate =   2; break;
+		case  20: tap->wr_rate =   4; break;
+		case  55: tap->wr_rate =  11; break;
+		case 110: tap->wr_rate =  22; break;
+		/* OFDM rates. */
+		case 0xd: tap->wr_rate =  12; break;
+		case 0xf: tap->wr_rate =  18; break;
+		case 0x5: tap->wr_rate =  24; break;
+		case 0x7: tap->wr_rate =  36; break;
+		case 0x9: tap->wr_rate =  48; break;
+		case 0xb: tap->wr_rate =  72; break;
+		case 0x1: tap->wr_rate =  96; break;
+		case 0x3: tap->wr_rate = 108; break;
+		/* Unknown rate: should not happen. */
+		default:  tap->wr_rate =   0;
+		}
 		tap->wr_dbm_antsignal = rssi;
 		tap->wr_dbm_antnoise = nf;
 	}
@@ -1933,6 +2109,20 @@ iwn_rx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc,
 	IWN_LOCK(sc);
 }
 
+#if 0	/* HT */
+/* Process an incoming Compressed BlockAck. */
+void
+iwn_rx_compressed_ba(struct iwn_softc *sc, struct iwn_rx_desc *desc,
+    struct iwn_rx_data *data)
+{
+	struct iwn_compressed_ba *ba = (struct iwn_compressed_ba *)(desc + 1);
+	struct iwn_tx_ring *txq;
+
+	txq = &sc->txq[letoh16(ba->qid)];
+	/* XXX TBD */
+}
+#endif
+
 /*
  * Process a CALIBRATION_RESULT notification sent by the initialization
  * firmware on response to a CMD_CALIB_CONFIG command (5000 only.)
@@ -1945,7 +2135,7 @@ iwn5000_rx_calib_results(struct iwn_softc *sc, struct iwn_rx_desc *desc,
 	int len, idx = -1;
 
 	/* Runtime firmware should not send such a notification. */
-	if (!(sc->sc_flags & IWN_FLAG_FIRST_BOOT))
+	if (sc->sc_flags & IWN_FLAG_CALIB_DONE)
 		return;
 
 	len = (le32toh(desc->len) & 0x3fff) - 4;
@@ -1961,8 +2151,9 @@ iwn5000_rx_calib_results(struct iwn_softc *sc, struct iwn_rx_desc *desc,
 	case IWN5000_PHY_CALIB_TX_IQ:
 		idx = 2;
 		break;
-	case IWN5000_PHY_CALIB_TX_IQ_PERD:
-		if (sc->hw_type != IWN_HW_REV_TYPE_5150)
+	case IWN5000_PHY_CALIB_TX_IQ_PERIODIC:
+		if (sc->hw_type < IWN_HW_REV_TYPE_6000 &&
+		    sc->hw_type != IWN_HW_REV_TYPE_5150)
 			idx = 3;
 		break;
 	case IWN5000_PHY_CALIB_BASE_BAND:
@@ -2056,10 +2247,11 @@ iwn4965_tx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc,
 
 	DPRINTF(sc, IWN_DEBUG_XMIT, "%s: "
 	    "qid %d idx %d retries %d nkill %d rate %x duration %d status %x\n",
-	    __func__, desc->qid, desc->idx, stat->retrycnt,
-	    stat->killcnt, stat->rate, le16toh(stat->duration),
+	    __func__, desc->qid, desc->idx, stat->ackfailcnt,
+	    stat->btkillcnt, stat->rate, le16toh(stat->duration),
 	    le32toh(stat->status));
-	iwn_tx_done(sc, desc, stat->retrycnt, le32toh(stat->status) & 0xff);
+
+	iwn_tx_done(sc, desc, stat->ackfailcnt, le32toh(stat->status) & 0xff);
 }
 
 void
@@ -2070,33 +2262,36 @@ iwn5000_tx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc,
 
 	DPRINTF(sc, IWN_DEBUG_XMIT, "%s: "
 	    "qid %d idx %d retries %d nkill %d rate %x duration %d status %x\n",
-	    __func__, desc->qid, desc->idx, stat->retrycnt,
-	    stat->killcnt, stat->rate, le16toh(stat->duration),
+	    __func__, desc->qid, desc->idx, stat->ackfailcnt,
+	    stat->btkillcnt, stat->rate, le16toh(stat->duration),
 	    le32toh(stat->status));
 
+#ifdef notyet
 	/* Reset TX scheduler slot. */
 	iwn5000_reset_sched(sc, desc->qid & 0xf, desc->idx);
-	iwn_tx_done(sc, desc, stat->retrycnt, le16toh(stat->status) & 0xff);
+#endif
+	iwn_tx_done(sc, desc, stat->ackfailcnt, le16toh(stat->status) & 0xff);
 }
 
 /*
  * Adapter-independent backend for TX_DONE firmware notifications.
  */
 void
-iwn_tx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc, int retrycnt,
+iwn_tx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc, int ackfailcnt,
     uint8_t status)
 {
 	struct ifnet *ifp = sc->sc_ifp;
 	struct iwn_tx_ring *ring = &sc->txq[desc->qid & 0xf];
 	struct iwn_tx_data *data = &ring->data[desc->idx];
+	struct iwn_node *wn = (void *)data->ni;
 	struct mbuf *m;
 	struct ieee80211_node *ni;
 
 	KASSERT(data->ni != NULL, ("no node"));
 
 	/* Unmap and free mbuf. */
-	bus_dmamap_sync(ring->desc_dma.tag, data->map, BUS_DMASYNC_POSTWRITE);
-	bus_dmamap_unload(ring->desc_dma.tag, data->map);
+	bus_dmamap_sync(ring->data_dmat, data->map, BUS_DMASYNC_POSTWRITE);
+	bus_dmamap_unload(ring->data_dmat, data->map);
 	m = data->m, data->m = NULL;
 	ni = data->ni, data->ni = NULL;
 
@@ -2122,6 +2317,18 @@ iwn_tx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc, int retrycnt,
 			ieee80211_process_callback(ni, m,
 			    (status & IWN_TX_FAIL) != 0);
 	}
+
+	/*
+	 * Update rate control statistics for the node.
+	 */
+	if (status & 0x80) {
+		ifp->if_oerrors++;
+		ieee80211_amrr_tx_complete(&wn->amn,
+		    IEEE80211_AMRR_FAILURE, ackfailcnt);
+	} else {
+		ieee80211_amrr_tx_complete(&wn->amn,
+		    IEEE80211_AMRR_SUCCESS, ackfailcnt);
+	}
 	m_freem(m);
 	ieee80211_free_node(ni);
 
@@ -2130,7 +2337,6 @@ iwn_tx_done(struct iwn_softc *sc, struct iwn_rx_desc *desc, int retrycnt,
 		sc->qfullmsk &= ~(1 << ring->qid);
 		if (sc->qfullmsk == 0 &&
 		    (ifp->if_drv_flags & IFF_DRV_OACTIVE)) {
-			printf("hier :(\n");
 			ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 			iwn_start_locked(ifp);
 		}
@@ -2154,9 +2360,7 @@ iwn_cmd_done(struct iwn_softc *sc, struct iwn_rx_desc *desc)
 
 	/* If the command was mapped in an mbuf, free it. */
 	if (data->m != NULL) {
-		bus_dmamap_sync(ring->desc_dma.tag, data->map,
-		    BUS_DMASYNC_POSTWRITE);
-		bus_dmamap_unload(ring->desc_dma.tag, data->map);
+		bus_dmamap_unload(ring->data_dmat, data->map);
 		m_freem(data->m);
 		data->m = NULL;
 	}
@@ -2182,8 +2386,8 @@ iwn_notif_intr(struct iwn_softc *sc)
 		struct iwn_rx_data *data = &sc->rxq.data[sc->rxq.cur];
 		struct iwn_rx_desc *desc;
 
-		bus_dmamap_sync(sc->rxq.stat_dma.tag, data->map,
-		    BUS_DMASYNC_PREWRITE);
+		bus_dmamap_sync(sc->rxq.data_dmat, data->map,
+		    BUS_DMASYNC_POSTREAD);
 		desc = mtod(data->m, struct iwn_rx_desc *);
 
 		DPRINTF(sc, IWN_DEBUG_RECV,
@@ -2206,6 +2410,13 @@ iwn_notif_intr(struct iwn_softc *sc)
 			iwn_rx_done(sc, desc, data);
 			break;
 
+#if 0	/* HT */
+		case IWN_RX_COMPRESSED_BA:
+			/* A Compressed BlockAck has been received. */
+			iwn_rx_compressed_ba(sc, desc, data);
+			break;
+#endif
+
 		case IWN_TX_DONE:
 			/* An 802.11 frame has been transmitted. */
 			sc->sc_hal->tx_done(sc, desc, data);
@@ -2222,8 +2433,12 @@ iwn_notif_intr(struct iwn_softc *sc)
 			    (struct iwn_beacon_missed *)(desc + 1);
 			int misses = le32toh(miss->consecutive);
 
-			bus_dmamap_sync(sc->rxq.stat_dma.tag, data->map,
-			    BUS_DMASYNC_PREWRITE);
+			bus_dmamap_sync(sc->rxq.data_dmat, data->map,
+			    BUS_DMASYNC_POSTREAD);
+
+			/* XXX not sure why we're notified w/ zero */
+			if (misses == 0)
+				break;
 			DPRINTF(sc, IWN_DEBUG_STATE,
 			    "%s: beacons missed %d/%d\n", __func__,
 			    misses, le32toh(miss->total));
@@ -2234,8 +2449,11 @@ iwn_notif_intr(struct iwn_softc *sc)
 			 */
 			if (vap->iv_state == IEEE80211_S_RUN && misses > 5)
 				(void) iwn_init_sensitivity(sc);
-			if (misses >= vap->iv_bmissthreshold)
+			if (misses >= vap->iv_bmissthreshold) {
+				IWN_UNLOCK(sc);
 				ieee80211_beacon_miss(ic);
+				IWN_LOCK(sc);
+			}
 			break;
 		}
 		case IWN_UC_READY:
@@ -2244,8 +2462,8 @@ iwn_notif_intr(struct iwn_softc *sc)
 			    (struct iwn_ucode_info *)(desc + 1);
 
 			/* The microcontroller is ready. */
-			bus_dmamap_sync(sc->rxq.stat_dma.tag, data->map,
-			    BUS_DMASYNC_PREWRITE);
+			bus_dmamap_sync(sc->rxq.data_dmat, data->map,
+			    BUS_DMASYNC_POSTREAD);
 			DPRINTF(sc, IWN_DEBUG_RESET,
 			    "microcode alive notification version=%d.%d "
 			    "subtype=%x alive=%x\n", uc->major, uc->minor,
@@ -2257,7 +2475,7 @@ iwn_notif_intr(struct iwn_softc *sc)
 				break;
 			}
 			if (uc->subtype == IWN_UCODE_INIT) {
-				/* Save microcontroller's report. */
+				/* Save microcontroller report. */
 				memcpy(&sc->ucode_info, uc, sizeof (*uc));
 			}
 			/* Save the address of the error log in SRAM. */
@@ -2273,8 +2491,8 @@ iwn_notif_intr(struct iwn_softc *sc)
 			 * noted. However, we handle this in iwn_intr as we
 			 * get both the enable/disble intr.
 			 */
-			bus_dmamap_sync(sc->rxq.stat_dma.tag, data->map,
-			    BUS_DMASYNC_PREWRITE);
+			bus_dmamap_sync(sc->rxq.data_dmat, data->map,
+			    BUS_DMASYNC_POSTREAD);
 			DPRINTF(sc, IWN_DEBUG_INTR, "state changed to %x\n",
 			    le32toh(*status));
 			break;
@@ -2284,8 +2502,8 @@ iwn_notif_intr(struct iwn_softc *sc)
 			struct iwn_start_scan *scan =
 			    (struct iwn_start_scan *)(desc + 1);
 
-			bus_dmamap_sync(sc->rxq.stat_dma.tag, data->map,
-			    BUS_DMASYNC_PREWRITE);
+			bus_dmamap_sync(sc->rxq.data_dmat, data->map,
+			    BUS_DMASYNC_POSTREAD);
 			DPRINTF(sc, IWN_DEBUG_ANY,
 			    "%s: scanning channel %d status %x\n",
 			    __func__, scan->chan, le32toh(scan->status));
@@ -2296,13 +2514,15 @@ iwn_notif_intr(struct iwn_softc *sc)
 			struct iwn_stop_scan *scan =
 			    (struct iwn_stop_scan *)(desc + 1);
 
-			bus_dmamap_sync(sc->rxq.stat_dma.tag, data->map,
-			    BUS_DMASYNC_PREWRITE);
+			bus_dmamap_sync(sc->rxq.data_dmat, data->map,
+			    BUS_DMASYNC_POSTREAD);
 			DPRINTF(sc, IWN_DEBUG_STATE,
 			    "scan finished nchan=%d status=%d chan=%d\n",
 			    scan->nchan, scan->status, scan->chan);
 
+			IWN_UNLOCK(sc);
 			ieee80211_scan_next(vap);
+			IWN_LOCK(sc);
 			break;
 		}
 		case IWN5000_CALIBRATION_RESULT:
@@ -2310,6 +2530,7 @@ iwn_notif_intr(struct iwn_softc *sc)
 			break;
 
 		case IWN5000_CALIBRATION_DONE:
+			sc->sc_flags |= IWN_FLAG_CALIB_DONE;
 			wakeup(sc);
 			break;
 		}
@@ -2336,7 +2557,7 @@ iwn_wakeup_intr(struct iwn_softc *sc)
 
 	/* Wakeup RX and TX rings. */
 	IWN_WRITE(sc, IWN_FH_RX_WPTR, sc->rxq.cur & ~7);
-	for (qid = 0; qid < 6; qid++) {
+	for (qid = 0; qid < sc->sc_hal->ntxqs; qid++) {
 		struct iwn_tx_ring *ring = &sc->txq[qid];
 		IWN_WRITE(sc, IWN_HBUS_TARG_WRPTR, qid << 8 | ring->cur);
 	}
@@ -2365,18 +2586,17 @@ iwn_rftoggle_intr(struct iwn_softc *sc)
  * can help us to identify certain classes of problems.
  */
 void
-iwn_fatal_intr(struct iwn_softc *sc, uint32_t r1, uint32_t r2)
+iwn_fatal_intr(struct iwn_softc *sc)
 {
-#define nitems(_a)	(sizeof((_a)) / sizeof((_a)[0]))
 	const struct iwn_hal *hal = sc->sc_hal;
-	struct ifnet *ifp = sc->sc_ifp;
-	struct ieee80211com *ic = ifp->if_l2com;
-	struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
 	struct iwn_fw_dump dump;
 	int i;
 
 	IWN_LOCK_ASSERT(sc);
 
+	/* Force a complete recalibration on next init. */
+	sc->sc_flags &= ~IWN_FLAG_CALIB_DONE;
+
 	/* Check that the error log address is valid. */
 	if (sc->errptr < IWN_FW_DATA_BASE ||
 	    sc->errptr + sizeof (dump) >
@@ -2423,10 +2643,6 @@ iwn_fatal_intr(struct iwn_softc *sc, uint32_t r1, uint32_t r2)
 		    i, ring->qid, ring->cur, ring->queued);
 	}
 	printf("  rx ring: cur=%d\n", sc->rxq.cur);
-
-	if (vap != NULL)
-		ieee80211_cancel_scan(vap);
-	ieee80211_runtask(ic, &sc->sc_reinit_task);
 }
 
 void
@@ -2434,50 +2650,78 @@ iwn_intr(void *arg)
 {
 	struct iwn_softc *sc = arg;
 	struct ifnet *ifp = sc->sc_ifp;
-	uint32_t r1, r2;
+	uint32_t r1, r2, tmp;
 
 	IWN_LOCK(sc);
 
 	/* Disable interrupts. */
-	IWN_WRITE(sc, IWN_MASK, 0);
+	IWN_WRITE(sc, IWN_INT_MASK, 0);
 
-	r1 = IWN_READ(sc, IWN_INT);
-	r2 = IWN_READ(sc, IWN_FH_INT);
+	/* Read interrupts from ICT (fast) or from registers (slow). */
+	if (sc->sc_flags & IWN_FLAG_USE_ICT) {
+		tmp = 0;
+		while (sc->ict[sc->ict_cur] != 0) {
+			tmp |= sc->ict[sc->ict_cur];
+			sc->ict[sc->ict_cur] = 0;	/* Acknowledge. */
+			sc->ict_cur = (sc->ict_cur + 1) % IWN_ICT_COUNT;
+		}
+		tmp = le32toh(tmp);
+		if (tmp == 0xffffffff)
+			tmp = 0;	/* Shouldn't happen. */
+		r1 = (tmp & 0xff00) << 16 | (tmp & 0xff);
+		r2 = 0;	/* Unused. */
+	} else {
+		r1 = IWN_READ(sc, IWN_INT);
+		if (r1 == 0xffffffff || (r1 & 0xfffffff0) == 0xa5a5a5a0)
+			return;	/* Hardware gone! */
+		r2 = IWN_READ(sc, IWN_FH_INT);
+	}
 
 	DPRINTF(sc, IWN_DEBUG_INTR, "interrupt reg1=%x reg2=%x\n", r1, r2);
 
-	if (r1 == 0 && r2 == 0) {
-		if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
-			IWN_WRITE(sc, IWN_MASK, IWN_INT_MASK);
+	if (r1 == 0 && r2 == 0)
 		goto done;	/* Interrupt not for us. */
-	}
-	if (r1 == 0xffffffff || (r1 & 0xfffffff0) == 0xa5a5a5a0)
-		goto done;	/* Hardware gone! */
 
 	/* Acknowledge interrupts. */
 	IWN_WRITE(sc, IWN_INT, r1);
-	IWN_WRITE(sc, IWN_FH_INT, r2);
-
-	DPRINTF(sc, IWN_DEBUG_INTR, "interrupt reg1=%x reg2=%x\n", r1, r2);
+	if (!(sc->sc_flags & IWN_FLAG_USE_ICT))
+		IWN_WRITE(sc, IWN_FH_INT, r2);
 
 	if (r1 & IWN_INT_RF_TOGGLED) {
 		iwn_rftoggle_intr(sc);
+		goto done;
 	}
 	if (r1 & IWN_INT_CT_REACHED) {
 		device_printf(sc->sc_dev, "%s: critical temperature reached!\n",
 		    __func__);
-		/* XXX Reduce TX power? */
 	}
 	if (r1 & (IWN_INT_SW_ERR | IWN_INT_HW_ERR)) {
-		iwn_fatal_intr(sc, r1, r2);
+		iwn_fatal_intr(sc);
+		ifp->if_flags &= ~IFF_UP;
+		iwn_stop_locked(sc);
 		goto done;
 	}
-	if ((r1 & (IWN_INT_FH_RX | IWN_INT_SW_RX)) ||
-	    (r2 & IWN_FH_INT_RX))
-		iwn_notif_intr(sc);
+	if ((r1 & (IWN_INT_FH_RX | IWN_INT_SW_RX | IWN_INT_RX_PERIODIC)) ||
+	    (r2 & IWN_FH_INT_RX)) {
+		if (sc->sc_flags & IWN_FLAG_USE_ICT) {
+			if (r1 & (IWN_INT_FH_RX | IWN_INT_SW_RX))
+				IWN_WRITE(sc, IWN_FH_INT, IWN_FH_INT_RX);
+			IWN_WRITE_1(sc, IWN_INT_PERIODIC,
+			    IWN_INT_PERIODIC_DIS);
+			iwn_notif_intr(sc);
+			if (r1 & (IWN_INT_FH_RX | IWN_INT_SW_RX)) {
+				IWN_WRITE_1(sc, IWN_INT_PERIODIC,
+				    IWN_INT_PERIODIC_ENA);
+			}
+		} else
+			iwn_notif_intr(sc);
+	}
 
-	if ((r1 & IWN_INT_FH_TX) || (r2 & IWN_FH_INT_TX))
+	if ((r1 & IWN_INT_FH_TX) || (r2 & IWN_FH_INT_TX)) {
+		if (sc->sc_flags & IWN_FLAG_USE_ICT)
+			IWN_WRITE(sc, IWN_FH_INT, IWN_FH_INT_TX);
 		wakeup(sc);	/* FH DMA transfer completed. */
+	}
 
 	if (r1 & IWN_INT_ALIVE)
 		wakeup(sc);	/* Firmware is alive. */
@@ -2485,10 +2729,11 @@ iwn_intr(void *arg)
 	if (r1 & IWN_INT_WAKEUP)
 		iwn_wakeup_intr(sc);
 
-	/* Re-enable interrupts. */
-	IWN_WRITE(sc, IWN_MASK, IWN_INT_MASK);
-
 done:
+	/* Re-enable interrupts. */
+	if (ifp->if_flags & IFF_UP)
+		IWN_WRITE(sc, IWN_INT_MASK, sc->int_mask);
+
 	IWN_UNLOCK(sc);
 }
 
@@ -2505,7 +2750,7 @@ iwn4965_update_sched(struct iwn_softc *sc, int qid, int idx, uint8_t id,
 	*w = htole16(len + 8);
 	bus_dmamap_sync(sc->sched_dma.tag, sc->sched_dma.map,
 	    BUS_DMASYNC_PREWRITE);
-	if (idx < IWN4965_SCHEDSZ) {
+	if (idx < IWN_SCHED_WINSZ) {
 		*(w + IWN_TX_RING_COUNT) = *w;
 		bus_dmamap_sync(sc->sched_dma.tag, sc->sched_dma.map,
 		    BUS_DMASYNC_PREWRITE);
@@ -2544,19 +2789,16 @@ iwn5000_reset_sched(struct iwn_softc *sc, int qid, int idx)
 	}
 }
 
-/* Determine if a given rate is CCK or OFDM. */
-#define IWN_RATE_IS_OFDM(rate)	((rate) >= 12 && (rate) != 22)
-
-static const struct iwn_rate *
+static uint8_t
 iwn_plcp_signal(int rate) {
 	int i;
 
 	for (i = 0; i < IWN_RIDX_MAX + 1; i++) {
 		if (rate == iwn_rates[i].rate)
-			return &iwn_rates[i];
+			return i;
 	}
 
-	return &iwn_rates[0];
+	return 0;
 }
 
 int
@@ -2576,12 +2818,11 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 	struct ieee80211_frame *wh;
 	struct ieee80211_key *k = NULL;
 	struct mbuf *mnew;
-	bus_addr_t paddr;
 	bus_dma_segment_t segs[IWN_MAX_SCATTER];
 	uint32_t flags;
 	u_int hdrlen;
-	int totlen, error, pad, nsegs, i, rate;
-	uint8_t type, txant;
+	int totlen, error, pad, nsegs = 0, i, rate;
+	uint8_t ridx, type, txant;
 
 	IWN_LOCK_ASSERT(sc);
 
@@ -2593,8 +2834,7 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 	data = &ring->data[ring->cur];
 
 	/* Choose a TX rate index. */
-	/* XXX ni_chan */
-	tp = &vap->iv_txparms[ieee80211_chan2mode(ic->ic_curchan)];
+	tp = &vap->iv_txparms[ieee80211_chan2mode(ni->ni_chan)];
 	if (type == IEEE80211_FC0_TYPE_MGT)
 		rate = tp->mgmtrate;
 	else if (IEEE80211_IS_MULTICAST(wh->i_addr1))
@@ -2602,10 +2842,11 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 	else if (tp->ucastrate != IEEE80211_FIXED_RATE_NONE)
 		rate = tp->ucastrate;
 	else {
-		(void) ieee80211_amrr_choose(ni, &IWN_NODE(ni)->amn);
+		(void) ieee80211_amrr_choose(ni, &wn->amn);
 		rate = ni->ni_txrate;
 	}
-	rinfo = iwn_plcp_signal(rate);
+	ridx = iwn_plcp_signal(rate);
+	rinfo = &iwn_rates[ridx];
 
 	/* Encrypt the frame if need be. */
 	if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
@@ -2623,7 +2864,7 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 		struct iwn_tx_radiotap_header *tap = &sc->sc_txtap;
 
 		tap->wt_flags = 0;
-		tap->wt_rate = rate;
+		tap->wt_rate = rinfo->rate;
 		if (k != NULL)
 			tap->wt_flags |= IEEE80211_RADIOTAP_F_WEP;
 
@@ -2658,7 +2899,7 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 		if (totlen + IEEE80211_CRC_LEN > vap->iv_rtsthreshold) {
 			flags |= IWN_TX_NEED_RTS;
 		} else if ((ic->ic_flags & IEEE80211_F_USEPROT) &&
-		    IWN_RATE_IS_OFDM(rate)) {
+		    ridx >= IWN_RIDX_OFDM6) {
 			if (ic->ic_protmode == IEEE80211_PROT_CTSONLY)
 				flags |= IWN_TX_NEED_CTS;
 			else if (ic->ic_protmode == IEEE80211_PROT_RTSCTS)
@@ -2672,7 +2913,7 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 			} else
 				flags |= IWN_TX_FULL_TXOP;
 		}
-	} else
+	}
 
 	if (IEEE80211_IS_MULTICAST(wh->i_addr1) ||
 	    type != IEEE80211_FC0_TYPE_DATA)
@@ -2696,7 +2937,7 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 		tx->timeout = htole16(0);
 
 	if (hdrlen & 3) {
-		/* First segment's length must be a multiple of 4. */
+		/* First segment length must be a multiple of 4. */
 		flags |= IWN_TX_NEED_PADDING;
 		pad = 4 - (hdrlen & 3);
 	} else
@@ -2704,22 +2945,25 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 
 	tx->len = htole16(totlen);
 	tx->tid = 0;
-	tx->rts_ntries = 60;		/* XXX? */
-	tx->data_ntries = 15;		/* XXX? */
+	tx->rts_ntries = 60;
+	tx->data_ntries = 15;
 	tx->lifetime = htole32(IWN_LIFETIME_INFINITE);
 	tx->plcp = rinfo->plcp;
 	tx->rflags = rinfo->flags;
 	if (tx->id == hal->broadcast_id) {
+		/* Group or management frame. */
+		tx->linkq = 0;
 		/* XXX Alternate between antenna A and B? */
-		txant = IWN_LSB(sc->txantmsk);
+		txant = IWN_LSB(sc->txchainmask);
 		tx->rflags |= IWN_RFLAG_ANT(txant);
-	} else
-		flags |= IWN_TX_LINKQ;
+	} else {
+		tx->linkq = 0;
+		flags |= IWN_TX_LINKQ;	/* enable MRR */
+	}
 
 	/* Set physical address of "scratch area". */
-	paddr = ring->cmd_dma.paddr + ring->cur * sizeof (struct iwn_tx_cmd);
-	tx->loaddr = htole32(IWN_LOADDR(paddr));
-	tx->hiaddr = IWN_HIADDR(paddr);
+	tx->loaddr = htole32(IWN_LOADDR(data->scratch_paddr));
+	tx->hiaddr = IWN_HIADDR(data->scratch_paddr);
 
 	/* Copy 802.11 header in TX command. */
 	memcpy((uint8_t *)(tx + 1), wh, hdrlen);
@@ -2729,25 +2973,23 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 	tx->security = 0;
 	tx->flags = htole32(flags);
 
-	error = bus_dmamap_load_mbuf_sg(ring->desc_dma.tag, data->map, m, segs,
-	    &nsegs, BUS_DMA_NOWAIT);
-	if (error != 0) {
+	if (m->m_len > 0) {
+		error = bus_dmamap_load_mbuf_sg(ring->data_dmat, data->map,
+		    m, segs, &nsegs, BUS_DMA_NOWAIT);
 		if (error == EFBIG) {
 			/* too many fragments, linearize */
 			mnew = m_collapse(m, M_DONTWAIT, IWN_MAX_SCATTER);
 			if (mnew == NULL) {
-				IWN_UNLOCK(sc);
 				device_printf(sc->sc_dev,
 				    "%s: could not defrag mbuf\n", __func__);
 				m_freem(m);
 				return ENOBUFS;
 			}
 			m = mnew;
-			error = bus_dmamap_load_mbuf_sg(ring->desc_dma.tag,
+			error = bus_dmamap_load_mbuf_sg(ring->data_dmat,
 			    data->map, m, segs, &nsegs, BUS_DMA_NOWAIT);
 		}
 		if (error != 0) {
-			IWN_UNLOCK(sc);
 			device_printf(sc->sc_dev,
 			    "%s: bus_dmamap_load_mbuf_sg failed, error %d\n",
 			     __func__, error);
@@ -2765,8 +3007,8 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 	/* Fill TX descriptor. */
 	desc->nsegs = 1 + nsegs;
 	/* First DMA segment is used by the TX command. */
-	desc->segs[0].addr = htole32(IWN_LOADDR(paddr));
-	desc->segs[0].len  = htole16(IWN_HIADDR(paddr) |
+	desc->segs[0].addr = htole32(IWN_LOADDR(data->cmd_paddr));
+	desc->segs[0].len  = htole16(IWN_HIADDR(data->cmd_paddr) |
 	    (4 + sizeof (*tx) + hdrlen + pad) << 4);
 	/* Other DMA segments are for data payload. */
 	for (i = 1; i <= nsegs; i++) {
@@ -2775,14 +3017,16 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 		    segs[i - 1].ds_len << 4);
 	}
 
-	bus_dmamap_sync(ring->desc_dma.tag, data->map, BUS_DMASYNC_PREWRITE);
-	bus_dmamap_sync(ring->desc_dma.tag, ring->cmd_dma.map,
+	bus_dmamap_sync(ring->data_dmat, data->map, BUS_DMASYNC_PREWRITE);
+	bus_dmamap_sync(ring->data_dmat, ring->cmd_dma.map,
 	    BUS_DMASYNC_PREWRITE);
 	bus_dmamap_sync(ring->desc_dma.tag, ring->desc_dma.map,
 	    BUS_DMASYNC_PREWRITE);
 
+#ifdef notyet
 	/* Update TX scheduler. */
 	hal->update_sched(sc, ring->qid, ring->cur, tx->id, totlen);
+#endif
 
 	/* Kick TX ring. */
 	ring->cur = (ring->cur + 1) % IWN_TX_RING_COUNT;
@@ -2796,7 +3040,7 @@ iwn_tx_data(struct iwn_softc *sc, struct mbuf *m, struct ieee80211_node *ni,
 }
 
 static int
-iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m0,
+iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m,
     struct ieee80211_node *ni, struct iwn_tx_ring *ring,
     const struct ieee80211_bpf_params *params)
 {
@@ -2815,12 +3059,12 @@ iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m0,
 	bus_dma_segment_t segs[IWN_MAX_SCATTER];
 	uint32_t flags;
 	u_int hdrlen;
-	int totlen, error, pad, nsegs, i, rate;
-	uint8_t type, txant;
+	int totlen, error, pad, nsegs = 0, i, rate;
+	uint8_t ridx, type, txant;
 
 	IWN_LOCK_ASSERT(sc);
 
-	wh = mtod(m0, struct ieee80211_frame *);
+	wh = mtod(m, struct ieee80211_frame *);
 	hdrlen = ieee80211_anyhdrsize(wh);
 	type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
 
@@ -2831,13 +3075,15 @@ iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m0,
 	rate = params->ibp_rate0;
 	if (!ieee80211_isratevalid(ic->ic_rt, rate)) {
 		/* XXX fall back to mcast/mgmt rate? */
-		m_freem(m0);
+		m_freem(m);
 		return EINVAL;
 	}
-	rinfo = iwn_plcp_signal(rate);
+	ridx = iwn_plcp_signal(rate);
+	rinfo = &iwn_rates[ridx];
 
-	totlen = m0->m_pkthdr.len;
+	totlen = m->m_pkthdr.len;
 
+	/* Prepare TX firmware command. */
 	cmd = &ring->cmd[ring->cur];
 	cmd->code = IWN_CMD_TX_DATA;
 	cmd->flags = 0;
@@ -2845,7 +3091,7 @@ iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m0,
 	cmd->idx = ring->cur;
 
 	tx = (struct iwn_cmd_data *)cmd->data;
-	/* NB: no need to bzero tx, all fields are reinitialized here */
+	/* NB: No need to clear tx, all fields are reinitialized here. */
 	tx->scratch = 0;	/* clear "scratch" area */
 
 	flags = 0;
@@ -2882,7 +3128,7 @@ iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m0,
 		tx->timeout = htole16(0);
 
 	if (hdrlen & 3) {
-		/* First segment's length must be a multiple of 4. */
+		/* First segment length must be a multiple of 4. */
 		flags |= IWN_TX_NEED_PADDING;
 		pad = 4 - (hdrlen & 3);
 	} else
@@ -2894,7 +3140,7 @@ iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m0,
 		tap->wt_flags = 0;
 		tap->wt_rate = rate;
 
-		ieee80211_radiotap_tx(vap, m0);
+		ieee80211_radiotap_tx(vap, m);
 	}
 
 	tx->len = htole16(totlen);
@@ -2905,12 +3151,10 @@ iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m0,
 	tx->lifetime = htole32(IWN_LIFETIME_INFINITE);
 	tx->plcp = rinfo->plcp;
 	tx->rflags = rinfo->flags;
-	if (tx->id == hal->broadcast_id) {
-		txant = IWN_LSB(sc->txantmsk);
-		tx->rflags |= IWN_RFLAG_ANT(txant);
-	} else {
-		flags |= IWN_TX_LINKQ;	/* enable MRR */
-	}
+	/* Group or management frame. */
+	tx->linkq = 0;
+	txant = IWN_LSB(sc->txchainmask);
+	tx->rflags |= IWN_RFLAG_ANT(txant);
 	/* Set physical address of "scratch area". */
 	paddr = ring->cmd_dma.paddr + ring->cur * sizeof (struct iwn_tx_cmd);
 	tx->loaddr = htole32(IWN_LOADDR(paddr));
@@ -2920,48 +3164,46 @@ iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m0,
 	memcpy((uint8_t *)(tx + 1), wh, hdrlen);
 
 	/* Trim 802.11 header. */
-	m_adj(m0, hdrlen);
+	m_adj(m, hdrlen);
 	tx->security = 0;
 	tx->flags = htole32(flags);
 
-	error = bus_dmamap_load_mbuf_sg(ring->desc_dma.tag, data->map, m0, segs,
-	    &nsegs, BUS_DMA_NOWAIT);
-	if (error != 0) {
+	if (m->m_len > 0) {
+		error = bus_dmamap_load_mbuf_sg(ring->data_dmat, data->map,
+		    m, segs, &nsegs, BUS_DMA_NOWAIT);
 		if (error == EFBIG) {
 			/* Too many fragments, linearize. */
-			mnew = m_collapse(m0, M_DONTWAIT, IWN_MAX_SCATTER);
+			mnew = m_collapse(m, M_DONTWAIT, IWN_MAX_SCATTER);
 			if (mnew == NULL) {
-				IWN_UNLOCK(sc);
 				device_printf(sc->sc_dev,
 				    "%s: could not defrag mbuf\n", __func__);
-				m_freem(m0);
+				m_freem(m);
 				return ENOBUFS;
 			}
-			m0 = mnew;
-			error = bus_dmamap_load_mbuf_sg(ring->desc_dma.tag,
-			    data->map, m0, segs, &nsegs, BUS_DMA_NOWAIT);
+			m = mnew;
+			error = bus_dmamap_load_mbuf_sg(ring->data_dmat,
+			    data->map, m, segs, &nsegs, BUS_DMA_NOWAIT);
 		}
 		if (error != 0) {
-			IWN_UNLOCK(sc);
 			device_printf(sc->sc_dev,
 			    "%s: bus_dmamap_load_mbuf_sg failed, error %d\n",
 			     __func__, error);
-			m_freem(m0);
+			m_freem(m);
 			return error;
 		}
 	}
 
-	data->m = m0;
+	data->m = m;
 	data->ni = ni;
 
 	DPRINTF(sc, IWN_DEBUG_XMIT, "%s: qid %d idx %d len %d nsegs %d\n",
-	    __func__, ring->qid, ring->cur, m0->m_pkthdr.len, nsegs);
+	    __func__, ring->qid, ring->cur, m->m_pkthdr.len, nsegs);
 
 	/* Fill TX descriptor. */
 	desc->nsegs = 1 + nsegs;
 	/* First DMA segment is used by the TX command. */
-	desc->segs[0].addr = htole32(IWN_LOADDR(paddr));
-	desc->segs[0].len  = htole16(IWN_HIADDR(paddr) |
+	desc->segs[0].addr = htole32(IWN_LOADDR(data->cmd_paddr));
+	desc->segs[0].len  = htole16(IWN_HIADDR(data->cmd_paddr) |
 	    (4 + sizeof (*tx) + hdrlen + pad) << 4);
 	/* Other DMA segments are for data payload. */
 	for (i = 1; i <= nsegs; i++) {
@@ -2970,8 +3212,16 @@ iwn_tx_data_raw(struct iwn_softc *sc, struct mbuf *m0,
 		    segs[i - 1].ds_len << 4);
 	}
 
+	bus_dmamap_sync(ring->data_dmat, data->map, BUS_DMASYNC_PREWRITE);
+	bus_dmamap_sync(ring->data_dmat, ring->cmd_dma.map,
+	    BUS_DMASYNC_PREWRITE);
+	bus_dmamap_sync(ring->desc_dma.tag, ring->desc_dma.map,
+	    BUS_DMASYNC_PREWRITE);
+
+#ifdef notyet
 	/* Update TX scheduler. */
 	hal->update_sched(sc, ring->qid, ring->cur, tx->id, totlen);
+#endif
 
 	/* Kick TX ring. */
 	ring->cur = (ring->cur + 1) % IWN_TX_RING_COUNT;
@@ -3086,8 +3336,9 @@ iwn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 {
 	struct iwn_softc *sc = ifp->if_softc;
 	struct ieee80211com *ic = ifp->if_l2com;
+	struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
 	struct ifreq *ifr = (struct ifreq *) data;
-	int error = 0, startall = 0;
+	int error = 0, startall = 0, stop = 0;
 
 	switch (cmd) {
 	case SIOCSIFFLAGS:
@@ -3095,7 +3346,10 @@ iwn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 		if (ifp->if_flags & IFF_UP) {
 			if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
 				iwn_init_locked(sc);
-				startall = 1;
+				if (IWN_READ(sc, IWN_GP_CNTRL) & IWN_GP_CNTRL_RFKILL)
+					startall = 1;
+				else
+					stop = 1;
 			}
 		} else {
 			if (ifp->if_drv_flags & IFF_DRV_RUNNING)
@@ -3104,6 +3358,8 @@ iwn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 		IWN_UNLOCK(sc);
 		if (startall)
 			ieee80211_start_all(ic);
+		else if (vap != NULL && stop)
+			ieee80211_stop(vap);
 		break;
 	case SIOCGIFMEDIA:
 		error = ifmedia_ioctl(ifp, ifr, &ic->ic_media, cmd);
@@ -3124,7 +3380,6 @@ iwn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 int
 iwn_cmd(struct iwn_softc *sc, int code, const void *buf, int size, int async)
 {
-	const struct iwn_hal *hal = sc->sc_hal;
 	struct iwn_tx_ring *ring = &sc->txq[4];
 	struct iwn_tx_desc *desc;
 	struct iwn_tx_data *data;
@@ -3143,18 +3398,11 @@ iwn_cmd(struct iwn_softc *sc, int code, const void *buf, int size, int async)
 		/* Command is too large to fit in a descriptor. */
 		if (totlen > MCLBYTES)
 			return EINVAL;
-		MGETHDR(m, M_DONTWAIT, MT_DATA);
+		m = m_getjcl(M_DONTWAIT, MT_DATA, M_PKTHDR, MJUMPAGESIZE);
 		if (m == NULL)
 			return ENOMEM;
-		if (totlen > MHLEN) {
-			MCLGET(m, M_DONTWAIT);
-			if (!(m->m_flags & M_EXT)) {
-				m_freem(m);
-				return ENOMEM;
-			}
-		}
 		cmd = mtod(m, struct iwn_tx_cmd *);
-		error = bus_dmamap_load(ring->cmd_dma.tag, data->map, cmd,
+		error = bus_dmamap_load(ring->data_dmat, data->map, cmd,
 		    totlen, iwn_dma_map_addr, &paddr, BUS_DMA_NOWAIT);
 		if (error != 0) {
 			m_freem(m);
@@ -3181,17 +3429,19 @@ iwn_cmd(struct iwn_softc *sc, int code, const void *buf, int size, int async)
 	    cmd->flags, cmd->qid, cmd->idx);
 
 	if (size > sizeof cmd->data) {
-		bus_dmamap_sync(ring->cmd_dma.tag, data->map,
+		bus_dmamap_sync(ring->data_dmat, data->map,
 		    BUS_DMASYNC_PREWRITE);
 	} else {
-		bus_dmamap_sync(ring->cmd_dma.tag, ring->cmd_dma.map,
+		bus_dmamap_sync(ring->data_dmat, ring->cmd_dma.map,
 		    BUS_DMASYNC_PREWRITE);
 	}
 	bus_dmamap_sync(ring->desc_dma.tag, ring->desc_dma.map,
 	    BUS_DMASYNC_PREWRITE);
 
+#ifdef notyet
 	/* Update TX scheduler. */
-	hal->update_sched(sc, ring->qid, ring->cur, 0, 0);
+	sc->sc_hal->update_sched(sc, ring->qid, ring->cur, 0, 0);
+#endif
 
 	/* Kick command ring. */
 	ring->cur = (ring->cur + 1) % IWN_TX_RING_COUNT;
@@ -3226,6 +3476,7 @@ iwn5000_add_node(struct iwn_softc *sc, struct iwn_node_info *node, int async)
 	return iwn_cmd(sc, IWN_CMD_ADD_NODE, node, sizeof (*node), async);
 }
 
+#if 0	/* HT */
 static const uint8_t iwn_ridx_to_plcp[] = {
 	10, 20, 55, 110, /* CCK */
 	0xd, 0xf, 0x5, 0x7, 0x9, 0xb, 0x1, 0x3, 0x3 /* OFDM R1-R4 */
@@ -3238,6 +3489,7 @@ static const uint8_t iwn_mimo_mcs_to_plcp[] = {
 	0, 0, 0, 0, 			/* CCK */
 	8, 8, 9, 10, 11, 12, 13, 14, 15	/* HT */
 };
+#endif
 static const uint8_t iwn_prev_ridx[] = {
 	/* NB: allow fallback from CCK11 to OFDM9 and from OFDM6 to CCK5 */
 	0, 0, 1, 5,			/* CCK */
@@ -3249,35 +3501,41 @@ static const uint8_t iwn_prev_ridx[] = {
  * node operating on the specified channel.
  */
 int
-iwn_set_link_quality(struct iwn_softc *sc, uint8_t id,
-    const struct ieee80211_channel *c, int async)
+iwn_set_link_quality(struct iwn_softc *sc, uint8_t id, int async)
 {
+	struct ifnet *ifp = sc->sc_ifp;
+	struct ieee80211com *ic = ifp->if_l2com;
 	struct iwn_cmd_link_quality linkq;
-	int ridx, i;
-	uint8_t txant;
+	const struct iwn_rate *rinfo;
+	int i;
+	uint8_t txant, ridx;
 
 	/* Use the first valid TX antenna. */
-	txant = IWN_LSB(sc->txantmsk);
+	txant = IWN_LSB(sc->txchainmask);
 
 	memset(&linkq, 0, sizeof linkq);
 	linkq.id = id;
 	linkq.antmsk_1stream = txant;
-	linkq.antmsk_2stream = IWN_ANT_A | IWN_ANT_B;
-	linkq.ampdu_max = 64;
+	linkq.antmsk_2stream = IWN_ANT_AB;
+	linkq.ampdu_max = 31;
 	linkq.ampdu_threshold = 3;
 	linkq.ampdu_limit = htole16(4000);	/* 4ms */
 
+#if 0	/* HT */
 	if (IEEE80211_IS_CHAN_HT(c))
 		linkq.mimo = 1;
+#endif
 
 	if (id == IWN_ID_BSS)
 		ridx = IWN_RIDX_OFDM54;
-	else if (IEEE80211_IS_CHAN_A(c))
+	else if (IEEE80211_IS_CHAN_A(ic->ic_curchan))
 		ridx = IWN_RIDX_OFDM6;
 	else
 		ridx = IWN_RIDX_CCK1;
 
 	for (i = 0; i < IWN_MAX_TX_RETRIES; i++) {
+		rinfo = &iwn_rates[ridx];
+#if 0	/* HT */
 		if (IEEE80211_IS_CHAN_HT40(c)) {
 			linkq.retry[i].plcp = iwn_mimo_mcs_to_plcp[ridx]
 					 | IWN_RIDX_MCS;
@@ -3289,15 +3547,15 @@ iwn_set_link_quality(struct iwn_softc *sc, uint8_t id,
 					 | IWN_RIDX_MCS;
 			linkq.retry[i].rflags = IWN_RFLAG_HT;
 			/* XXX shortGI */
-		} else {
-			linkq.retry[i].plcp = iwn_ridx_to_plcp[ridx];
-			if (ridx <= IWN_RIDX_CCK11)
-				linkq.retry[i].rflags = IWN_RFLAG_CCK;
+		} else
+#endif
+		{
+			linkq.retry[i].plcp = rinfo->plcp;
+			linkq.retry[i].rflags = rinfo->flags;
 		}
 		linkq.retry[i].rflags |= IWN_RFLAG_ANT(txant);
 		ridx = iwn_prev_ridx[ridx];
 	}
-
 #ifdef IWN_DEBUG
 	if (sc->sc_debug & IWN_DEBUG_STATE) {
 		printf("%s: set link quality for node %d, mimo %d ssmask %d\n",
@@ -3316,8 +3574,7 @@ iwn_set_link_quality(struct iwn_softc *sc, uint8_t id,
  * Broadcast node is used to send group-addressed and management frames.
  */
 int
-iwn_add_broadcast_node(struct iwn_softc *sc, const struct ieee80211_channel *c,
-    int async)
+iwn_add_broadcast_node(struct iwn_softc *sc, int async)
 {
 	const struct iwn_hal *hal = sc->sc_hal;
 	struct ifnet *ifp = sc->sc_ifp;
@@ -3332,7 +3589,8 @@ iwn_add_broadcast_node(struct iwn_softc *sc, const struct ieee80211_channel *c,
 	if (error != 0)
 		return error;
 
-	return iwn_set_link_quality(sc, node.id, c, async);
+	error = iwn_set_link_quality(sc, hal->broadcast_id, async);
+	return error;
 }
 
 int
@@ -3355,14 +3613,22 @@ iwn_wme_update(struct ieee80211com *ic)
 		cmd.ac[i].txoplimit =
 		    htole16(IWN_TXOP_TO_US(wmep->wmep_txopLimit));
 	}
+	IEEE80211_UNLOCK(ic);
 	IWN_LOCK(sc);
 	(void) iwn_cmd(sc, IWN_CMD_EDCA_PARAMS, &cmd, sizeof cmd, 1 /*async*/);
 	IWN_UNLOCK(sc);
+	IEEE80211_LOCK(ic);
 	return 0;
 #undef IWN_TXOP_TO_US
 #undef IWN_EXP2
 }
 
+static void
+iwn_update_mcast(struct ifnet *ifp)
+{
+	/* Ignore */
+}
+
 void
 iwn_set_led(struct iwn_softc *sc, uint8_t which, uint8_t off, uint8_t on)
 {
@@ -3379,19 +3645,27 @@ iwn_set_led(struct iwn_softc *sc, uint8_t which, uint8_t off, uint8_t on)
 }
 
 /*
- * Set the critical temperature at which the firmware will notify us.
+ * Set the critical temperature at which the firmware will stop the radio
+ * and notify us.
  */
 int
 iwn_set_critical_temp(struct iwn_softc *sc)
 {
 	struct iwn_critical_temp crit;
+	int32_t temp;
 
 	IWN_WRITE(sc, IWN_UCODE_GP1_CLR, IWN_UCODE_GP1_CTEMP_STOP_RF);
 
+	if (sc->hw_type == IWN_HW_REV_TYPE_5150)
+		temp = (IWN_CTOK(110) - sc->temp_off) * -5;
+	else if (sc->hw_type == IWN_HW_REV_TYPE_4965)
+		temp = IWN_CTOK(110);
+	else
+		temp = 110;
 	memset(&crit, 0, sizeof crit);
-	crit.tempR = htole32(sc->critical_temp);
-	DPRINTF(sc, IWN_DEBUG_RESET, "setting critical temp to %u\n",
-	    crit.tempR);
+	crit.tempR = htole32(temp);
+	DPRINTF(sc, IWN_DEBUG_RESET, "setting critical temp to %d\n",
+	    temp);
 	return iwn_cmd(sc, IWN_CMD_SET_CRITICAL_TEMP, &crit, sizeof crit, 0);
 }
 
@@ -3420,16 +3694,13 @@ iwn_set_timing(struct iwn_softc *sc, struct ieee80211_node *ni)
 void
 iwn4965_power_calibration(struct iwn_softc *sc, int temp)
 {
-	struct ifnet *ifp = sc->sc_ifp;
-	struct ieee80211com *ic = ifp->if_l2com;
-
 	/* Adjust TX power if need be (delta >= 3 degC.) */
 	DPRINTF(sc, IWN_DEBUG_CALIBRATE, "%s: temperature %d->%d\n",
 	    __func__, sc->temp, temp);
 	if (abs(temp - sc->temp) >= 3) {
 		/* Record temperature of last calibration. */
 		sc->temp = temp;
-		(void)iwn4965_set_txpower(sc, ic->ic_bsschan, 1);
+		(void)iwn4965_set_txpower(sc, 1);
 	}
 }
 
@@ -3439,8 +3710,7 @@ iwn4965_power_calibration(struct iwn_softc *sc, int temp)
  * the current temperature and the current voltage.
  */
 int
-iwn4965_set_txpower(struct iwn_softc *sc, struct ieee80211_channel *ch,
-    int async)
+iwn4965_set_txpower(struct iwn_softc *sc, int async)
 {
 /* Fixed-point arithmetic division using a n-bit fractional part. */
 #define fdivround(a, b, n)	\
@@ -3453,6 +3723,7 @@ iwn4965_set_txpower(struct iwn_softc *sc, struct ieee80211_channel *ch,
 	struct ifnet *ifp = sc->sc_ifp;
 	struct ieee80211com *ic = ifp->if_l2com;
 	struct iwn_ucode_info *uc = &sc->ucode_info;
+	struct ieee80211_channel *ch;
 	struct iwn4965_cmd_txpower cmd;
 	struct iwn4965_eeprom_chan_samples *chans;
 	int32_t vdiff, tdiff;
@@ -3460,8 +3731,11 @@ iwn4965_set_txpower(struct iwn_softc *sc, struct ieee80211_channel *ch,
 	const uint8_t *rf_gain, *dsp_gain;
 	uint8_t chan;
 
-	/* Get channel number. */
-	chan = ieee80211_chan2ieee(ic, ch);
+	/* Retrieve current channel from last RXON. */
+	chan = sc->rxon.chan;
+	DPRINTF(sc, IWN_DEBUG_RESET, "setting TX power for channel %d\n",
+	    chan);
+	ch = &ic->ic_channels[chan];
 
 	memset(&cmd, 0, sizeof cmd);
 	cmd.band = IEEE80211_IS_CHAN_5GHZ(ch) ? 0 : 1;
@@ -3487,7 +3761,7 @@ iwn4965_set_txpower(struct iwn_softc *sc, struct ieee80211_channel *ch,
 	    "%s: voltage compensation=%d (UCODE=%d, EEPROM=%d)\n",
 	    __func__, vdiff, le32toh(uc->volt), sc->eeprom_voltage);
 
-	/* Get channel's attenuation group. */
+	/* Get channel attenuation group. */
 	if (chan <= 20)		/* 1-20 */
 		grp = 4;
 	else if (chan <= 43)	/* 34-43 */
@@ -3501,7 +3775,7 @@ iwn4965_set_txpower(struct iwn_softc *sc, struct ieee80211_channel *ch,
 	DPRINTF(sc, IWN_DEBUG_CALIBRATE | IWN_DEBUG_TXPOW,
 	    "%s: chan %d, attenuation group=%d\n", __func__, chan, grp);
 
-	/* Get channel's sub-band. */
+	/* Get channel sub-band. */
 	for (i = 0; i < IWN_NBANDS; i++)
 		if (sc->bands[i].lo != 0 &&
 		    sc->bands[i].lo <= chan && chan <= sc->bands[i].hi)
@@ -3536,6 +3810,7 @@ iwn4965_set_txpower(struct iwn_softc *sc, struct ieee80211_channel *ch,
 		    __func__, tdiff, sc->temp, temp);
 
 		for (ridx = 0; ridx <= IWN_RIDX_MAX; ridx++) {
+			/* Convert dBm to half-dBm. */
 			maxchpwr = sc->maxpwr[chan] * 2;
 			if ((ridx / 8) & 1)
 				maxchpwr -= 6;	/* MIMO 2T: -3dB */
@@ -3552,7 +3827,7 @@ iwn4965_set_txpower(struct iwn_softc *sc, struct ieee80211_channel *ch,
 			else
 				pwr -= 10;	/* Others: -5dB */
 
-			/* Do not exceed channel's max TX power. */
+			/* Do not exceed channel max TX power. */
 			if (pwr > maxchpwr)
 				pwr = maxchpwr;
 
@@ -3588,8 +3863,7 @@ iwn4965_set_txpower(struct iwn_softc *sc, struct ieee80211_channel *ch,
 }
 
 int
-iwn5000_set_txpower(struct iwn_softc *sc, struct ieee80211_channel *ch,
-    int async)
+iwn5000_set_txpower(struct iwn_softc *sc, int async)
 {
 	struct iwn5000_cmd_txpower cmd;
 
@@ -3615,7 +3889,7 @@ iwn4965_get_rssi(struct iwn_softc *sc, struct iwn_rx_stat *stat)
 	uint8_t mask, agc;
 	int rssi;
 
-	mask = (le16toh(phy->antenna) >> 4) & 0x7;
+	mask = (le16toh(phy->antenna) >> 4) & IWN_ANT_ABC;
 	agc  = (le16toh(phy->agc) >> 7) & 0x7f;
 
 	rssi = 0;
@@ -3701,18 +3975,27 @@ iwn4965_get_temperature(struct iwn_softc *sc)
 	temp = (259 * (r4 - r2)) / (r3 - r1);
 	temp = (temp * 97) / 100 + 8;
 
+	DPRINTF(sc, IWN_DEBUG_ANY, "temperature %dK/%dC\n", temp,
+	    IWN_KTOC(temp));
 	return IWN_KTOC(temp);
 }
 
 int
 iwn5000_get_temperature(struct iwn_softc *sc)
 {
+	int32_t temp;
+
 	/*
 	 * Temperature is not used by the driver for 5000 Series because
 	 * TX power calibration is handled by firmware.  We export it to
 	 * users through the sensor framework though.
 	 */
-	return le32toh(sc->rawtemp);
+	temp = le32toh(sc->rawtemp);
+	if (sc->hw_type == IWN_HW_REV_TYPE_5150) {
+		temp = (temp / -5) + sc->temp_off;
+		temp = IWN_KTOC(temp);
+	}
+	return temp;
 }
 
 /*
@@ -3731,13 +4014,13 @@ iwn_init_sensitivity(struct iwn_softc *sc)
 	calib->state = IWN_CALIB_STATE_INIT;
 	calib->cck_state = IWN_CCK_STATE_HIFA;
 	/* Set initial correlation values. */
-	calib->ofdm_x1     = hal->limits->min_ofdm_x1;
-	calib->ofdm_mrc_x1 = hal->limits->min_ofdm_mrc_x1;
+	calib->ofdm_x1     = sc->limits->min_ofdm_x1;
+	calib->ofdm_mrc_x1 = sc->limits->min_ofdm_mrc_x1;
 	calib->ofdm_x4     = 90;
-	calib->ofdm_mrc_x4 = hal->limits->min_ofdm_mrc_x4;
+	calib->ofdm_mrc_x4 = sc->limits->min_ofdm_mrc_x4;
 	calib->cck_x4      = 125;
-	calib->cck_mrc_x4  = hal->limits->min_cck_mrc_x4;
-	calib->energy_cck  = hal->limits->energy_cck;
+	calib->cck_mrc_x4  = sc->limits->min_cck_mrc_x4;
+	calib->energy_cck  = sc->limits->energy_cck;
 
 	/* Write initial sensitivity. */
 	error = iwn_send_sensitivity(sc);
@@ -3783,21 +4066,21 @@ iwn_collect_noise(struct iwn_softc *sc,
 	val = MAX(calib->rssi[2], val);
 
 	/* Determine which antennas are connected. */
-	sc->antmsk = 0;
+	sc->chainmask = 0;
 	for (i = 0; i < 3; i++)
 		if (val - calib->rssi[i] <= 15 * 20)
-			sc->antmsk |= 1 << i;
+			sc->chainmask |= 1 << i;
 	/* If none of the TX antennas are connected, keep at least one. */
-	if ((sc->antmsk & sc->txantmsk) == 0)
-		sc->antmsk |= IWN_LSB(sc->txantmsk);
+	if ((sc->chainmask & sc->txchainmask) == 0)
+		sc->chainmask |= IWN_LSB(sc->txchainmask);
 
 	(void)hal->set_gains(sc);
 	calib->state = IWN_CALIB_STATE_RUN;
 
 #ifdef notyet
 	/* XXX Disable RX chains with no antennas connected. */
-	sc->rxon.rxchain = htole16(IWN_RXCHAIN_SEL(sc->antmsk));
-	(void)iwn_cmd(sc, IWN_CMD_CONFIGURE, &sc->rxon, hal->rxonsz, 1);
+	sc->rxon.rxchain = htole16(IWN_RXCHAIN_SEL(sc->chainmask));
+	(void)iwn_cmd(sc, IWN_CMD_RXON, &sc->rxon, hal->rxonsz, 1);
 #endif
 
 #if 0
@@ -3826,8 +4109,7 @@ iwn5000_init_gains(struct iwn_softc *sc)
 {
 	struct iwn_phy_calib cmd;
 
-	if (sc->hw_type == IWN_HW_REV_TYPE_6000 ||
-	    sc->hw_type == IWN_HW_REV_TYPE_6050)
+	if (sc->hw_type == IWN_HW_REV_TYPE_6050)
 		return 0;
 
 	memset(&cmd, 0, sizeof cmd);
@@ -3847,16 +4129,16 @@ iwn4965_set_gains(struct iwn_softc *sc)
 	int i, delta, noise;
 
 	/* Get minimal noise among connected antennas. */
-	noise = INT_MAX;	/* NB: There's at least one antennaiwn. */
+	noise = INT_MAX;	/* NB: There's at least one antenna. */
 	for (i = 0; i < 3; i++)
-		if (sc->antmsk & (1 << i))
+		if (sc->chainmask & (1 << i))
 			noise = MIN(calib->noise[i], noise);
 
 	memset(&cmd, 0, sizeof cmd);
 	cmd.code = IWN4965_PHY_CALIB_DIFF_GAIN;
 	/* Set differential gains for connected antennas. */
 	for (i = 0; i < 3; i++) {
-		if (sc->antmsk & (1 << i)) {
+		if (sc->chainmask & (1 << i)) {
 			/* Compute attenuation (in unit of 1.5dB). */
 			delta = (noise - (int32_t)calib->noise[i]) / 30;
 			/* NB: delta <= 0 */
@@ -3868,7 +4150,7 @@ iwn4965_set_gains(struct iwn_softc *sc)
 	}
 	DPRINTF(sc, IWN_DEBUG_CALIBRATE,
 	    "setting differential gains Ant A/B/C: %x/%x/%x (%x)\n",
-	    cmd.gain[0], cmd.gain[1], cmd.gain[2], sc->antmsk);
+	    cmd.gain[0], cmd.gain[1], cmd.gain[2], sc->chainmask);
 	return iwn_cmd(sc, IWN_CMD_PHY_CALIB, &cmd, sizeof cmd, 1);
 }
 
@@ -3877,21 +4159,22 @@ iwn5000_set_gains(struct iwn_softc *sc)
 {
 	struct iwn_calib_state *calib = &sc->calib;
 	struct iwn_phy_calib_gain cmd;
-	int i, delta;
+	int i, ant, delta;
 
-	if (sc->hw_type == IWN_HW_REV_TYPE_6000 ||
-	    sc->hw_type == IWN_HW_REV_TYPE_6050)
+	if (sc->hw_type == IWN_HW_REV_TYPE_6050)
 		return 0;
 
 	memset(&cmd, 0, sizeof cmd);
 	cmd.code = IWN5000_PHY_CALIB_NOISE_GAIN;
 	cmd.ngroups = 1;
 	cmd.isvalid = 1;
-	/* Set differential gains for antennas B and C. */
-	for (i = 1; i < 3; i++) {
-		if (sc->antmsk & (1 << i)) {
-			/* The delta is relative to antenna A. */
-			delta = ((int32_t)calib->noise[0] -
+	/* Get first available RX antenna as referential. */
+	ant = IWN_LSB(sc->rxchainmask);
+	/* Set differential gains for other antennas. */
+	for (i = ant + 1; i < 3; i++) {
+		if (sc->chainmask & (1 << i)) {
+			/* The delta is relative to antenna "ant". */
+			delta = ((int32_t)calib->noise[ant] -
 			    (int32_t)calib->noise[i]) / 30;
 			/* Limit to [-4.5dB,+4.5dB]. */
 			cmd.gain[i - 1] = MIN(abs(delta), 3);
@@ -3901,7 +4184,7 @@ iwn5000_set_gains(struct iwn_softc *sc)
 	}
 	DPRINTF(sc, IWN_DEBUG_CALIBRATE,
 	    "setting differential gains Ant B/C: %x/%x (%x)\n",
-	    cmd.gain[0], cmd.gain[1], sc->antmsk);
+	    cmd.gain[0], cmd.gain[1], sc->chainmask);
 	return iwn_cmd(sc, IWN_CMD_PHY_CALIB, &cmd, sizeof cmd, 1);
 }
 
@@ -3929,8 +4212,7 @@ iwn_tune_sensitivity(struct iwn_softc *sc, const struct iwn_rx_stats *stats)
 		needs_update = 1;		\
 	}
 
-	const struct iwn_hal *hal = sc->sc_hal;
-	const struct iwn_sensitivity_limits *limits = hal->limits;
+	const struct iwn_sensitivity_limits *limits = sc->limits;
 	struct iwn_calib_state *calib = &sc->calib;
 	uint32_t val, rxena, fa;
 	uint32_t energy[3], energy_min;
@@ -4065,7 +4347,6 @@ iwn_tune_sensitivity(struct iwn_softc *sc, const struct iwn_rx_stats *stats)
 int
 iwn_send_sensitivity(struct iwn_softc *sc)
 {
-	const struct iwn_hal *hal = sc->sc_hal;
 	struct iwn_calib_state *calib = &sc->calib;
 	struct iwn_sensitivity_cmd cmd;
 
@@ -4076,7 +4357,7 @@ iwn_send_sensitivity(struct iwn_softc *sc)
 	cmd.corr_ofdm_mrc_x1 = htole16(calib->ofdm_mrc_x1);
 	cmd.corr_ofdm_x4     = htole16(calib->ofdm_x4);
 	cmd.corr_ofdm_mrc_x4 = htole16(calib->ofdm_mrc_x4);
-	cmd.energy_ofdm      = htole16(hal->limits->energy_ofdm);
+	cmd.energy_ofdm      = htole16(sc->limits->energy_ofdm);
 	cmd.energy_ofdm_th   = htole16(62);
 	/* CCK modulation. */
 	cmd.corr_cck_x4      = htole16(calib->cck_x4);
@@ -4120,6 +4401,7 @@ iwn_set_pslevel(struct iwn_softc *sc, int dtim, int level, int async)
 		cmd.flags |= htole16(IWN_PS_ALLOW_SLEEP);
 	if (level == 5)
 		cmd.flags |= htole16(IWN_PS_FAST_PD);
+	/* Retrieve PCIe Active State Power Management (ASPM). */
 	tmp = pci_read_config(sc->sc_dev, sc->sc_cap_off + 0x10, 1);
 	if (!(tmp & 0x1))	/* L0s Entry disabled. */
 		cmd.flags |= htole16(IWN_PS_PCI_PMGT);
@@ -4155,22 +4437,30 @@ iwn_config(struct iwn_softc *sc)
 	struct ifnet *ifp = sc->sc_ifp;
 	struct ieee80211com *ic = ifp->if_l2com;
 	struct iwn_bluetooth bluetooth;
+	uint32_t txmask;
 	int error;
 	uint16_t rxchain;
 
-	/* Set power saving level to CAM during initialization. */
-	if ((error = iwn_set_pslevel(sc, 0, 0, 0)) != 0) {
-		device_printf(sc->sc_dev,
-		    "%s: could not set power saving level, error %d\n",
-		    __func__, error);
-		return error;
+	/* Configure valid TX chains for 5000 Series. */
+	if (sc->hw_type != IWN_HW_REV_TYPE_4965) {
+		txmask = htole32(sc->txchainmask);
+		DPRINTF(sc, IWN_DEBUG_RESET,
+		    "%s: configuring valid TX chains 0x%x\n", __func__, txmask);
+		error = iwn_cmd(sc, IWN5000_CMD_TX_ANT_CONFIG, &txmask,
+		    sizeof txmask, 0);
+		if (error != 0) {
+			device_printf(sc->sc_dev,
+			    "%s: could not configure valid TX chains, "
+			    "error %d\n", __func__, error);
+			return error;
+		}
 	}
 
 	/* Configure bluetooth coexistence. */
 	memset(&bluetooth, 0, sizeof bluetooth);
-	bluetooth.flags = 3;
-	bluetooth.lead = 0xaa;
-	bluetooth.kill = 1;
+	bluetooth.flags = IWN_BT_COEX_MODE_4WIRE;
+	bluetooth.lead_time = IWN_BT_LEAD_TIME_DEF;
+	bluetooth.max_kill = IWN_BT_MAX_KILL_DEF;
 	DPRINTF(sc, IWN_DEBUG_RESET, "%s: config bluetooth coexistence\n",
 	    __func__);
 	error = iwn_cmd(sc, IWN_CMD_BT_COEX, &bluetooth, sizeof bluetooth, 0);
@@ -4181,11 +4471,10 @@ iwn_config(struct iwn_softc *sc)
 		return error;
 	}
 
-	/* Configure adapter. */
+	/* Set mode, channel, RX filter and enable RX. */
 	memset(&sc->rxon, 0, sizeof (struct iwn_rxon));
 	IEEE80211_ADDR_COPY(sc->rxon.myaddr, IF_LLADDR(ifp));
 	IEEE80211_ADDR_COPY(sc->rxon.wlap, IF_LLADDR(ifp));
-	/* Set default channel. */
 	sc->rxon.chan = ieee80211_chan2ieee(ic, ic->ic_curchan);
 	sc->rxon.flags = htole32(IWN_RXON_TSF | IWN_RXON_CTS_TO_SELF);
 	if (IEEE80211_IS_CHAN_2GHZ(ic->ic_curchan))
@@ -4195,13 +4484,6 @@ iwn_config(struct iwn_softc *sc)
 		sc->rxon.mode = IWN_MODE_STA;
 		sc->rxon.filter = htole32(IWN_FILTER_MULTICAST);
 		break;
-	case IEEE80211_M_IBSS:
-	case IEEE80211_M_AHDEMO:
-		sc->rxon.mode = IWN_MODE_IBSS;
-		break;
-	case IEEE80211_M_HOSTAP:
-		sc->rxon.mode = IWN_MODE_HOSTAP;
-		break;
 	case IEEE80211_M_MONITOR:
 		sc->rxon.mode = IWN_MODE_MONITOR;
 		sc->rxon.filter = htole32(IWN_FILTER_MULTICAST |
@@ -4215,37 +4497,47 @@ iwn_config(struct iwn_softc *sc)
 	sc->rxon.ofdm_mask = 0xff;	/* not yet negotiated */
 	sc->rxon.ht_single_mask = 0xff;
 	sc->rxon.ht_dual_mask = 0xff;
-	rxchain = IWN_RXCHAIN_VALID(IWN_ANT_ABC) | IWN_RXCHAIN_IDLE_COUNT(2) |
-	    IWN_RXCHAIN_MIMO_COUNT(2);
+	sc->rxon.ht_triple_mask = 0xff;
+	rxchain =
+	    IWN_RXCHAIN_VALID(sc->rxchainmask) |
+	    IWN_RXCHAIN_MIMO_COUNT(2) |
+	    IWN_RXCHAIN_IDLE_COUNT(2);
 	sc->rxon.rxchain = htole16(rxchain);
 	DPRINTF(sc, IWN_DEBUG_RESET, "%s: setting configuration\n", __func__);
-	error = iwn_cmd(sc, IWN_CMD_CONFIGURE, &sc->rxon, hal->rxonsz, 0);
+	error = iwn_cmd(sc, IWN_CMD_RXON, &sc->rxon, hal->rxonsz, 0);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
-		    "%s: configure command failed\n", __func__);
-		return error;
-	}
-	sc->sc_curchan = ic->ic_curchan;
-
-	/* Configuration has changed, set TX power accordingly. */
-	error = hal->set_txpower(sc, ic->ic_curchan, 0);
-	if (error != 0) {
-		device_printf(sc->sc_dev,
-		    "%s: could not set TX power\n", __func__);
+		    "%s: RXON command failed\n", __func__);
 		return error;
 	}
 
-	error = iwn_add_broadcast_node(sc, ic->ic_curchan, 0);
+	error = iwn_add_broadcast_node(sc, 0);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
 		    "%s: could not add broadcast node\n", __func__);
 		return error;
 	}
 
+	/* Configuration has changed, set TX power accordingly. */
+	error = hal->set_txpower(sc, 0);
+	if (error != 0) {
+		device_printf(sc->sc_dev,
+		    "%s: could not set TX power\n", __func__);
+		return error;
+	}
+
 	error = iwn_set_critical_temp(sc);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
-		    "%s: could not set critical temperature\n", __func__);
+		    "%s: ccould not set critical temperature\n", __func__);
+		return error;
+	}
+
+	/* Set power saving level to CAM during initialization. */
+	error = iwn_set_pslevel(sc, 0, 0, 0);
+	if (error != 0) {
+		device_printf(sc->sc_dev,
+		    "%s: could not set power saving level\n", __func__);
 		return error;
 	}
 	return 0;
@@ -4264,7 +4556,6 @@ iwn_scan(struct iwn_softc *sc)
 	struct ieee80211_frame *wh;
 	struct ieee80211_rateset *rs;
 	struct ieee80211_channel *c;
-	enum ieee80211_phymode mode;
 	int buflen, error, nrates;
 	uint16_t rxchain;
 	uint8_t *buf, *frm, txant;
@@ -4286,14 +4577,16 @@ iwn_scan(struct iwn_softc *sc)
 	hdr->quiet_threshold = htole16(1);	/* min # of packets */
 
 	/* Select antennas for scanning. */
-	rxchain = IWN_RXCHAIN_FORCE | IWN_RXCHAIN_VALID(IWN_ANT_ABC) |
-	    IWN_RXCHAIN_MIMO(IWN_ANT_ABC);
+	rxchain =
+	    IWN_RXCHAIN_VALID(sc->rxchainmask) |
+	    IWN_RXCHAIN_FORCE_MIMO_SEL(sc->rxchainmask) |
+	    IWN_RXCHAIN_DRIVER_FORCE;
 	if (IEEE80211_IS_CHAN_A(ic->ic_curchan) &&
 	    sc->hw_type == IWN_HW_REV_TYPE_4965) {
 		/* Ant A must be avoided in 5GHz because of an HW bug. */
-		rxchain |= IWN_RXCHAIN_SEL(IWN_ANT_B | IWN_ANT_C);
+		rxchain |= IWN_RXCHAIN_FORCE_SEL(IWN_ANT_BC);
 	} else	/* Use all available RX antennas. */
-		rxchain |= IWN_RXCHAIN_SEL(IWN_ANT_ABC);
+		rxchain |= IWN_RXCHAIN_FORCE_SEL(sc->rxchainmask);
 	hdr->rxchain = htole16(rxchain);
 	hdr->filter = htole32(IWN_FILTER_MULTICAST | IWN_FILTER_BEACON);
 
@@ -4303,17 +4596,18 @@ iwn_scan(struct iwn_softc *sc)
 	tx->lifetime = htole32(IWN_LIFETIME_INFINITE);
 
 	if (IEEE80211_IS_CHAN_A(ic->ic_curchan)) {
-		hdr->crc_threshold = htole16(1);
 		/* Send probe requests at 6Mbps. */
 		tx->plcp = iwn_rates[IWN_RIDX_OFDM6].plcp;
+		rs = &ic->ic_sup_rates[IEEE80211_MODE_11A];
 	} else {
 		hdr->flags = htole32(IWN_RXON_24GHZ | IWN_RXON_AUTO);
 		/* Send probe requests at 1Mbps. */
 		tx->plcp = iwn_rates[IWN_RIDX_CCK1].plcp;
 		tx->rflags = IWN_RFLAG_CCK;
+		rs = &ic->ic_sup_rates[IEEE80211_MODE_11G];
 	}
 	/* Use the first valid TX antenna. */
-	txant = IWN_LSB(sc->txantmsk);
+	txant = IWN_LSB(sc->txchainmask);
 	tx->rflags |= IWN_RFLAG_ANT(txant);
 
 	essid = (struct iwn_scan_essid *)(tx + 1);
@@ -4322,6 +4616,7 @@ iwn_scan(struct iwn_softc *sc)
 		essid[0].len = ss->ss_ssid[0].len;
 		memcpy(essid[0].data, ss->ss_ssid[0].ssid, ss->ss_ssid[0].len);
 	}
+
 	/*
 	 * Build a probe request frame.  Most of the following code is a
 	 * copy & paste of what is done in net80211.
@@ -4344,9 +4639,6 @@ iwn_scan(struct iwn_softc *sc)
 	memcpy(frm, ss->ss_ssid[0].ssid, ss->ss_ssid[0].len);
 	frm += ss->ss_ssid[0].len;
 
-	mode = ieee80211_chan2mode(ic->ic_curchan);
-	rs = &ic->ic_sup_rates[mode];
-
 	/* Add supported rates IE. */
 	*frm++ = IEEE80211_ELEMID_RATES;
 	nrates = rs->rs_nrates;
@@ -4370,30 +4662,48 @@ iwn_scan(struct iwn_softc *sc)
 
 	c = ic->ic_curchan;
 	chan = (struct iwn_scan_chan *)frm;
-	chan->chan = ieee80211_chan2ieee(ic, c);
+	chan->chan = htole16(ieee80211_chan2ieee(ic, c));
 	chan->flags = 0;
-	if (!(c->ic_flags & IEEE80211_CHAN_PASSIVE))
-		chan->flags |= htole32(IWN_CHAN_ACTIVE);
 	if (ss->ss_nssid > 0)
 		chan->flags |= htole32(IWN_CHAN_NPBREQS(1));
 	chan->dsp_gain = 0x6e;
-	if (IEEE80211_IS_CHAN_5GHZ(c)) {
+	if (IEEE80211_IS_CHAN_5GHZ(c) &&
+	    !(c->ic_flags & IEEE80211_CHAN_PASSIVE)) {
 		chan->rf_gain = 0x3b;
 		chan->active  = htole16(24);
 		chan->passive = htole16(110);
-	} else {
+		chan->flags |= htole32(IWN_CHAN_ACTIVE);
+	} else if (IEEE80211_IS_CHAN_5GHZ(c)) {
+		chan->rf_gain = 0x3b;
+		chan->active  = htole16(24);
+		if (sc->rxon.associd)
+			chan->passive = htole16(78);
+		else
+			chan->passive = htole16(110);
+		hdr->crc_threshold = htole16(1);
+	} else if (!(c->ic_flags & IEEE80211_CHAN_PASSIVE)) {
 		chan->rf_gain = 0x28;
 		chan->active  = htole16(36);
 		chan->passive = htole16(120);
+		chan->flags |= htole32(IWN_CHAN_ACTIVE);
+	} else {
+		chan->rf_gain = 0x28;
+		chan->active  = htole16(36);
+		if (sc->rxon.associd)
+			chan->passive = htole16(88);
+		else
+			chan->passive = htole16(120);
+		hdr->crc_threshold = htole16(1);
 	}
-	hdr->nchan++;
-	chan++;
 
-	DPRINTF(sc, IWN_DEBUG_STATE, "%s: chan %u flags 0x%x rf_gain 0x%x "
+	DPRINTF(sc, IWN_DEBUG_STATE,
+	    "%s: chan %u flags 0x%x rf_gain 0x%x "
 	    "dsp_gain 0x%x active 0x%x passive 0x%x\n", __func__,
 	    chan->chan, chan->flags, chan->rf_gain, chan->dsp_gain,
 	    chan->active, chan->passive);
 
+	hdr->nchan++;
+	chan++;
 	buflen = (uint8_t *)chan - buf;
 	hdr->len = htole16(buflen);
 
@@ -4415,7 +4725,7 @@ iwn_auth(struct iwn_softc *sc, struct ieee80211vap *vap)
 
 	sc->calib.state = IWN_CALIB_STATE_INIT;
 
-	/* Update adapter's configuration. */
+	/* Update adapter configuration. */
 	IEEE80211_ADDR_COPY(sc->rxon.bssid, ni->ni_bssid);
 	sc->rxon.chan = htole16(ieee80211_chan2ieee(ic, ni->ni_chan));
 	sc->rxon.flags = htole32(IWN_RXON_TSF | IWN_RXON_CTS_TO_SELF);
@@ -4447,28 +4757,28 @@ iwn_auth(struct iwn_softc *sc, struct ieee80211vap *vap)
 	    le16toh(sc->rxon.rxchain),
 	    sc->rxon.myaddr, ":", sc->rxon.wlap, ":", sc->rxon.bssid, ":",
 	    le16toh(sc->rxon.associd), le32toh(sc->rxon.filter));
-	error = iwn_cmd(sc, IWN_CMD_CONFIGURE, &sc->rxon, hal->rxonsz, 1);
+	error = iwn_cmd(sc, IWN_CMD_RXON, &sc->rxon, hal->rxonsz, 1);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
-		    "%s: could not configure, error %d\n", __func__, error);
+		    "%s: RXON command failed, error %d\n", __func__, error);
 		return error;
 	}
-	sc->sc_curchan = ic->ic_curchan;
 
 	/* Configuration has changed, set TX power accordingly. */
-	if ((error = hal->set_txpower(sc, ni->ni_chan, 1)) != 0) {
+	error = hal->set_txpower(sc, 1);
+	if (error != 0) {
 		device_printf(sc->sc_dev,
 		    "%s: could not set Tx power, error %d\n", __func__, error);
 		return error;
 	}
 	/*
-	 * Reconfiguring RXON clears the firmware's nodes table so we must
+	 * Reconfiguring RXON clears the firmware nodes table so we must
 	 * add the broadcast node again.
 	 */
-	error = iwn_add_broadcast_node(sc, ic->ic_curchan, 1);
+	error = iwn_add_broadcast_node(sc, 1);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
-		    "%s: 1 could not add broadcast node, error %d\n",
+		    "%s: could not add broadcast node, error %d\n",
 		    __func__, error);
 		return error;
 	}
@@ -4487,12 +4797,12 @@ iwn_run(struct iwn_softc *sc, struct ieee80211vap *vap)
 	struct ieee80211com *ic = ifp->if_l2com;
 	struct ieee80211_node *ni = vap->iv_bss;
 	struct iwn_node_info node;
-	int error, maxrxampdu, ampdudensity;
+	int error;
 
 	sc->calib.state = IWN_CALIB_STATE_INIT;
 
 	if (ic->ic_opmode == IEEE80211_M_MONITOR) {
-		/* link LED blinks while monitoring */
+		/* Link LED blinks while monitoring. */
 		iwn_set_led(sc, IWN_LED_LINK, 5, 5);
 		return 0;
 	}
@@ -4503,14 +4813,33 @@ iwn_run(struct iwn_softc *sc, struct ieee80211vap *vap)
 		return error;
 	}
 
-	/* Update adapter's configuration. */
+	/* Update adapter configuration. */
+	IEEE80211_ADDR_COPY(sc->rxon.bssid, ni->ni_bssid);
+	sc->rxon.chan = htole16(ieee80211_chan2ieee(ic, ni->ni_chan));
 	sc->rxon.associd = htole16(IEEE80211_AID(ni->ni_associd));
 	/* Short preamble and slot time are negotiated when associating. */
 	sc->rxon.flags &= ~htole32(IWN_RXON_SHPREAMBLE | IWN_RXON_SHSLOT);
+	sc->rxon.flags |= htole32(IWN_RXON_TSF | IWN_RXON_CTS_TO_SELF);
+	if (IEEE80211_IS_CHAN_2GHZ(ni->ni_chan))
+		sc->rxon.flags |= htole32(IWN_RXON_AUTO | IWN_RXON_24GHZ);
+	else
+		sc->rxon.flags &= ~htole32(IWN_RXON_AUTO | IWN_RXON_24GHZ);
 	if (ic->ic_flags & IEEE80211_F_SHSLOT)
 		sc->rxon.flags |= htole32(IWN_RXON_SHSLOT);
 	if (ic->ic_flags & IEEE80211_F_SHPREAMBLE)
 		sc->rxon.flags |= htole32(IWN_RXON_SHPREAMBLE);
+	if (IEEE80211_IS_CHAN_A(ni->ni_chan)) {
+		sc->rxon.cck_mask  = 0;
+		sc->rxon.ofdm_mask = 0x15;
+	} else if (IEEE80211_IS_CHAN_B(ni->ni_chan)) {
+		sc->rxon.cck_mask  = 0x03;
+		sc->rxon.ofdm_mask = 0;
+	} else {
+		/* XXX assume 802.11b/g */
+		sc->rxon.cck_mask  = 0x0f;
+		sc->rxon.ofdm_mask = 0x15;
+	}
+#if 0	/* HT */
 	if (IEEE80211_IS_CHAN_HT(ni->ni_chan)) {
 		sc->rxon.flags &= ~htole32(IWN_RXON_HT);
 		if (IEEE80211_IS_CHAN_HT40U(ni->ni_chan))
@@ -4529,6 +4858,7 @@ iwn_run(struct iwn_softc *sc, struct ieee80211vap *vap)
 		ampdudensity = MS(ni->ni_htparam, IEEE80211_HTCAP_MPDUDENSITY);
 	} else
 		maxrxampdu = ampdudensity = 0;
+#endif
 	sc->rxon.filter |= htole32(IWN_FILTER_BSS);
 
 	DPRINTF(sc, IWN_DEBUG_STATE,
@@ -4542,17 +4872,17 @@ iwn_run(struct iwn_softc *sc, struct ieee80211vap *vap)
 	    le16toh(sc->rxon.rxchain),
 	    sc->rxon.myaddr, ":", sc->rxon.wlap, ":", sc->rxon.bssid, ":",
 	    le16toh(sc->rxon.associd), le32toh(sc->rxon.filter));
-	error = iwn_cmd(sc, IWN_CMD_CONFIGURE, &sc->rxon, hal->rxonsz, 1);
+	error = iwn_cmd(sc, IWN_CMD_RXON, &sc->rxon, hal->rxonsz, 1);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
 		    "%s: could not update configuration, error %d\n",
 		    __func__, error);
 		return error;
 	}
-	sc->sc_curchan = ni->ni_chan;
+	
 
 	/* Configuration has changed, set TX power accordingly. */
-	error = hal->set_txpower(sc, ni->ni_chan, 1);
+	error = hal->set_txpower(sc, 1);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
 		    "%s: could not set Tx power, error %d\n", __func__, error);
@@ -4563,8 +4893,10 @@ iwn_run(struct iwn_softc *sc, struct ieee80211vap *vap)
 	memset(&node, 0, sizeof node);
 	IEEE80211_ADDR_COPY(node.macaddr, ni->ni_macaddr);
 	node.id = IWN_ID_BSS;
-	node.htflags = htole32(IWN_AMDPU_SIZE_FACTOR(maxrxampdu)
-	    | IWN_AMDPU_DENSITY(ampdudensity));
+#ifdef notyet
+	node.htflags = htole32(IWN_AMDPU_SIZE_FACTOR(3) |
+	    IWN_AMDPU_DENSITY(5));	/* 2us */
+#endif
 	DPRINTF(sc, IWN_DEBUG_STATE, "%s: add BSS node, id %d htflags 0x%x\n",
 	    __func__, node.id, le32toh(node.htflags));
 	error = hal->add_node(sc, &node, 1);
@@ -4572,7 +4904,9 @@ iwn_run(struct iwn_softc *sc, struct ieee80211vap *vap)
 		device_printf(sc->sc_dev, "could not add BSS node\n");
 		return error;
 	}
-	error = iwn_set_link_quality(sc, node.id, ni->ni_chan, 1);
+	DPRINTF(sc, IWN_DEBUG_STATE, "setting link quality for node %d\n",
+	    node.id);
+	error = iwn_set_link_quality(sc, node.id, 1);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
 		    "%s: could not setup MRR for node %d, error %d\n",
@@ -4599,6 +4933,221 @@ iwn_run(struct iwn_softc *sc, struct ieee80211vap *vap)
 #undef MS
 }
 
+#if 0	/* HT */
+/*
+ * This function is called by upper layer when an ADDBA request is received
+ * from another STA and before the ADDBA response is sent.
+ */
+int
+iwn_ampdu_rx_start(struct ieee80211com *ic, struct ieee80211_node *ni,
+    uint8_t tid)
+{
+	struct ieee80211_rx_ba *ba = &ni->ni_rx_ba[tid];
+	struct iwn_softc *sc = ic->ic_softc;
+	struct iwn_node *wn = (void *)ni;
+	struct iwn_node_info node;
+
+	memset(&node, 0, sizeof node);
+	node.id = wn->id;
+	node.control = IWN_NODE_UPDATE;
+	node.flags = IWN_FLAG_SET_ADDBA;
+	node.addba_tid = tid;
+	node.addba_ssn = htole16(ba->ba_winstart);
+	DPRINTF(sc, IWN_DEBUG_RECV, "ADDBA RA=%d TID=%d SSN=%d\n",
+	    wn->id, tid, ba->ba_winstart));
+	return sc->sc_hal->add_node(sc, &node, 1);
+}
+
+/*
+ * This function is called by upper layer on teardown of an HT-immediate
+ * Block Ack agreement (eg. uppon receipt of a DELBA frame.)
+ */
+void
+iwn_ampdu_rx_stop(struct ieee80211com *ic, struct ieee80211_node *ni,
+    uint8_t tid)
+{
+	struct iwn_softc *sc = ic->ic_softc;
+	struct iwn_node *wn = (void *)ni;
+	struct iwn_node_info node;
+
+	memset(&node, 0, sizeof node);
+	node.id = wn->id;
+	node.control = IWN_NODE_UPDATE;
+	node.flags = IWN_FLAG_SET_DELBA;
+	node.delba_tid = tid;
+	DPRINTF(sc, IWN_DEBUG_RECV, "DELBA RA=%d TID=%d\n", wn->id, tid);
+	(void)sc->sc_hal->add_node(sc, &node, 1);
+}
+
+/*
+ * This function is called by upper layer when an ADDBA response is received
+ * from another STA.
+ */
+int
+iwn_ampdu_tx_start(struct ieee80211com *ic, struct ieee80211_node *ni,
+    uint8_t tid)
+{
+	struct ieee80211_tx_ba *ba = &ni->ni_tx_ba[tid];
+	struct iwn_softc *sc = ic->ic_softc;
+	const struct iwn_hal *hal = sc->sc_hal;
+	struct iwn_node *wn = (void *)ni;
+	struct iwn_node_info node;
+	int error;
+
+	/* Enable TX for the specified RA/TID. */
+	wn->disable_tid &= ~(1 << tid);
+	memset(&node, 0, sizeof node);
+	node.id = wn->id;
+	node.control = IWN_NODE_UPDATE;
+	node.flags = IWN_FLAG_SET_DISABLE_TID;
+	node.disable_tid = htole16(wn->disable_tid);
+	error = hal->add_node(sc, &node, 1);
+	if (error != 0)
+		return error;
+
+	if ((error = iwn_nic_lock(sc)) != 0)
+		return error;
+	hal->ampdu_tx_start(sc, ni, tid, ba->ba_winstart);
+	iwn_nic_unlock(sc);
+	return 0;
+}
+
+void
+iwn_ampdu_tx_stop(struct ieee80211com *ic, struct ieee80211_node *ni,
+    uint8_t tid)
+{
+	struct ieee80211_tx_ba *ba = &ni->ni_tx_ba[tid];
+	struct iwn_softc *sc = ic->ic_softc;
+	int error;
+
+	error = iwn_nic_lock(sc);
+	if (error != 0)
+		return;
+	sc->sc_hal->ampdu_tx_stop(sc, tid, ba->ba_winstart);
+	iwn_nic_unlock(sc);
+}
+
+void
+iwn4965_ampdu_tx_start(struct iwn_softc *sc, struct ieee80211_node *ni,
+    uint8_t tid, uint16_t ssn)
+{
+	struct iwn_node *wn = (void *)ni;
+	int qid = 7 + tid;
+
+	/* Stop TX scheduler while we're changing its configuration. */
+	iwn_prph_write(sc, IWN4965_SCHED_QUEUE_STATUS(qid),
+	    IWN4965_TXQ_STATUS_CHGACT);
+
+	/* Assign RA/TID translation to the queue. */
+	iwn_mem_write_2(sc, sc->sched_base + IWN4965_SCHED_TRANS_TBL(qid),
+	    wn->id << 4 | tid);
+
+	/* Enable chain-building mode for the queue. */
+	iwn_prph_setbits(sc, IWN4965_SCHED_QCHAIN_SEL, 1 << qid);
+
+	/* Set starting sequence number from the ADDBA request. */
+	IWN_WRITE(sc, IWN_HBUS_TARG_WRPTR, qid << 8 | (ssn & 0xff));
+	iwn_prph_write(sc, IWN4965_SCHED_QUEUE_RDPTR(qid), ssn);
+
+	/* Set scheduler window size. */
+	iwn_mem_write(sc, sc->sched_base + IWN4965_SCHED_QUEUE_OFFSET(qid),
+	    IWN_SCHED_WINSZ);
+	/* Set scheduler frame limit. */
+	iwn_mem_write(sc, sc->sched_base + IWN4965_SCHED_QUEUE_OFFSET(qid) + 4,
+	    IWN_SCHED_LIMIT << 16);
+
+	/* Enable interrupts for the queue. */
+	iwn_prph_setbits(sc, IWN4965_SCHED_INTR_MASK, 1 << qid);
+
+	/* Mark the queue as active. */
+	iwn_prph_write(sc, IWN4965_SCHED_QUEUE_STATUS(qid),
+	    IWN4965_TXQ_STATUS_ACTIVE | IWN4965_TXQ_STATUS_AGGR_ENA |
+	    iwn_tid2fifo[tid] << 1);
+}
+
+void
+iwn4965_ampdu_tx_stop(struct iwn_softc *sc, uint8_t tid, uint16_t ssn)
+{
+	int qid = 7 + tid;
+
+	/* Stop TX scheduler while we're changing its configuration. */
+	iwn_prph_write(sc, IWN4965_SCHED_QUEUE_STATUS(qid),
+	    IWN4965_TXQ_STATUS_CHGACT);
+
+	/* Set starting sequence number from the ADDBA request. */
+	IWN_WRITE(sc, IWN_HBUS_TARG_WRPTR, qid << 8 | (ssn & 0xff));
+	iwn_prph_write(sc, IWN4965_SCHED_QUEUE_RDPTR(qid), ssn);
+
+	/* Disable interrupts for the queue. */
+	iwn_prph_clrbits(sc, IWN4965_SCHED_INTR_MASK, 1 << qid);
+
+	/* Mark the queue as inactive. */
+	iwn_prph_write(sc, IWN4965_SCHED_QUEUE_STATUS(qid),
+	    IWN4965_TXQ_STATUS_INACTIVE | iwn_tid2fifo[tid] << 1);
+}
+
+void
+iwn5000_ampdu_tx_start(struct iwn_softc *sc, struct ieee80211_node *ni,
+    uint8_t tid, uint16_t ssn)
+{
+	struct iwn_node *wn = (void *)ni;
+	int qid = 10 + tid;
+
+	/* Stop TX scheduler while we're changing its configuration. */
+	iwn_prph_write(sc, IWN5000_SCHED_QUEUE_STATUS(qid),
+	    IWN5000_TXQ_STATUS_CHGACT);
+
+	/* Assign RA/TID translation to the queue. */
+	iwn_mem_write_2(sc, sc->sched_base + IWN5000_SCHED_TRANS_TBL(qid),
+	    wn->id << 4 | tid);
+
+	/* Enable chain-building mode for the queue. */
+	iwn_prph_setbits(sc, IWN5000_SCHED_QCHAIN_SEL, 1 << qid);
+
+	/* Enable aggregation for the queue. */
+	iwn_prph_setbits(sc, IWN5000_SCHED_AGGR_SEL, 1 << qid);
+
+	/* Set starting sequence number from the ADDBA request. */
+	IWN_WRITE(sc, IWN_HBUS_TARG_WRPTR, qid << 8 | (ssn & 0xff));
+	iwn_prph_write(sc, IWN5000_SCHED_QUEUE_RDPTR(qid), ssn);
+
+	/* Set scheduler window size and frame limit. */
+	iwn_mem_write(sc, sc->sched_base + IWN5000_SCHED_QUEUE_OFFSET(qid) + 4,
+	    IWN_SCHED_LIMIT << 16 | IWN_SCHED_WINSZ);
+
+	/* Enable interrupts for the queue. */
+	iwn_prph_setbits(sc, IWN5000_SCHED_INTR_MASK, 1 << qid);
+
+	/* Mark the queue as active. */
+	iwn_prph_write(sc, IWN5000_SCHED_QUEUE_STATUS(qid),
+	    IWN5000_TXQ_STATUS_ACTIVE | iwn_tid2fifo[tid]);
+}
+
+void
+iwn5000_ampdu_tx_stop(struct iwn_softc *sc, uint8_t tid, uint16_t ssn)
+{
+	int qid = 10 + tid;
+
+	/* Stop TX scheduler while we're changing its configuration. */
+	iwn_prph_write(sc, IWN5000_SCHED_QUEUE_STATUS(qid),
+	    IWN5000_TXQ_STATUS_CHGACT);
+
+	/* Disable aggregation for the queue. */
+	iwn_prph_clrbits(sc, IWN5000_SCHED_AGGR_SEL, 1 << qid);
+
+	/* Set starting sequence number from the ADDBA request. */
+	IWN_WRITE(sc, IWN_HBUS_TARG_WRPTR, qid << 8 | (ssn & 0xff));
+	iwn_prph_write(sc, IWN5000_SCHED_QUEUE_RDPTR(qid), ssn);
+
+	/* Disable interrupts for the queue. */
+	iwn_prph_clrbits(sc, IWN5000_SCHED_INTR_MASK, 1 << qid);
+
+	/* Mark the queue as inactive. */
+	iwn_prph_write(sc, IWN5000_SCHED_QUEUE_STATUS(qid),
+	    IWN5000_TXQ_STATUS_INACTIVE | iwn_tid2fifo[tid]);
+}
+#endif
+
 /*
  * Query calibration tables from the initialization firmware.  We do this
  * only once at first boot.  Called from a process context.
@@ -4621,7 +5170,9 @@ iwn5000_query_calibration(struct iwn_softc *sc)
 		return error;
 
 	/* Wait at most two seconds for calibration to complete. */
-	return msleep(sc, &sc->sc_mtx, PCATCH, "iwninit", 2 * hz);
+	if (!(sc->sc_flags & IWN_FLAG_CALIB_DONE))
+		error = msleep(sc, &sc->sc_mtx, PCATCH, "iwninit", 2 * hz);
+	return error;
 }
 
 /*
@@ -4651,6 +5202,33 @@ iwn5000_send_calibration(struct iwn_softc *sc)
 	return 0;
 }
 
+int
+iwn5000_send_wimax_coex(struct iwn_softc *sc)
+{
+	struct iwn5000_wimax_coex wimax;
+
+#ifdef notyet
+	if (sc->hw_type == IWN_HW_REV_TYPE_6050) {
+		/* Enable WiMAX coexistence for combo adapters. */
+		wimax.flags =
+		    IWN_WIMAX_COEX_ASSOC_WA_UNMASK |
+		    IWN_WIMAX_COEX_UNASSOC_WA_UNMASK |
+		    IWN_WIMAX_COEX_STA_TABLE_VALID |
+		    IWN_WIMAX_COEX_ENABLE;
+		memcpy(wimax.events, iwn6050_wimax_events,
+		    sizeof iwn6050_wimax_events);
+	} else
+#endif
+	{
+		/* Disable WiMAX coexistence. */
+		wimax.flags = 0;
+		memset(wimax.events, 0, sizeof wimax.events);
+	}
+	DPRINTF(sc, IWN_DEBUG_RESET, "%s: Configuring WiMAX coexistence\n",
+	    __func__);
+	return iwn_cmd(sc, IWN5000_CMD_WIMAX_COEX, &wimax, sizeof wimax, 0);
+}
+
 /*
  * This function is called after the runtime firmware notifies us of its
  * readiness (called in a process context.)
@@ -4663,10 +5241,10 @@ iwn4965_post_alive(struct iwn_softc *sc)
 	if ((error = iwn_nic_lock(sc)) != 0)
 		return error;
 
-	/* Clear TX scheduler's state in SRAM. */
+	/* Clear TX scheduler state in SRAM. */
 	sc->sched_base = iwn_prph_read(sc, IWN_SCHED_SRAM_ADDR);
 	iwn_mem_set_region_4(sc, sc->sched_base + IWN4965_SCHED_CTX_OFF, 0,
-	    IWN4965_SCHED_CTX_LEN);
+	    IWN4965_SCHED_CTX_LEN / sizeof (uint32_t));
 
 	/* Set physical address of TX scheduler rings (1KB aligned.) */
 	iwn_prph_write(sc, IWN4965_SCHED_DRAM_ADDR, sc->sched_dma.paddr >> 10);
@@ -4711,24 +5289,27 @@ iwn4965_post_alive(struct iwn_softc *sc)
 int
 iwn5000_post_alive(struct iwn_softc *sc)
 {
-	struct iwn5000_wimax_coex wimax;
 	int error, qid;
 
-	if ((error = iwn_nic_lock(sc)) != 0)
+	/* Switch to using ICT interrupt mode. */
+	iwn5000_ict_reset(sc);
+
+	error = iwn_nic_lock(sc);
+	if (error != 0)
 		return error;
 
-	/* Clear TX scheduler's state in SRAM. */
+	/* Clear TX scheduler state in SRAM. */
 	sc->sched_base = iwn_prph_read(sc, IWN_SCHED_SRAM_ADDR);
 	iwn_mem_set_region_4(sc, sc->sched_base + IWN5000_SCHED_CTX_OFF, 0,
-	    IWN5000_SCHED_CTX_LEN);
+	    IWN5000_SCHED_CTX_LEN / sizeof (uint32_t));
 
 	/* Set physical address of TX scheduler rings (1KB aligned.) */
 	iwn_prph_write(sc, IWN5000_SCHED_DRAM_ADDR, sc->sched_dma.paddr >> 10);
 
 	IWN_SETBITS(sc, IWN_FH_TX_CHICKEN, IWN_FH_TX_CHICKEN_SCHED_RETRY);
 
-	/* Enable chain mode for all our 20 queues. */
-	iwn_prph_write(sc, IWN5000_SCHED_QCHAIN_SEL, 0xfffff);
+	/* Enable chain mode for all queues, except command queue. */
+	iwn_prph_write(sc, IWN5000_SCHED_QCHAIN_SEL, 0xfffef);
 	iwn_prph_write(sc, IWN5000_SCHED_AGGR_SEL, 0);
 
 	for (qid = 0; qid < IWN5000_NTXQUEUES; qid++) {
@@ -4756,18 +5337,14 @@ iwn5000_post_alive(struct iwn_softc *sc)
 	}
 	iwn_nic_unlock(sc);
 
-	/* Configure WiMAX (IEEE 802.16e) coexistence. */
-	memset(&wimax, 0, sizeof wimax);
-	DPRINTF(sc, IWN_DEBUG_RESET, "%s: Configuring WiMAX coexistence\n",
-	    __func__);
-	error = iwn_cmd(sc, IWN5000_CMD_WIMAX_COEX, &wimax, sizeof wimax, 0);
+	/* Configure WiMAX coexistence for combo adapters. */
+	error = iwn5000_send_wimax_coex(sc);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
 		    "%s: could not configure WiMAX coexistence, error %d\n",
 		    __func__, error);
 		return error;
 	}
-
 	if (sc->hw_type != IWN_HW_REV_TYPE_5150) {
 		struct iwn5000_phy_calib_crystal cmd;
 
@@ -4789,21 +5366,19 @@ iwn5000_post_alive(struct iwn_softc *sc)
 			return error;
 		}
 	}
-	if (sc->sc_flags & IWN_FLAG_FIRST_BOOT) {
+	if (!(sc->sc_flags & IWN_FLAG_CALIB_DONE)) {
 		/* Query calibration from the initialization firmware. */
-		if ((error = iwn5000_query_calibration(sc)) != 0) {
+		error = iwn5000_query_calibration(sc);
+		if (error != 0) {
 			device_printf(sc->sc_dev,
 			    "%s: could not query calibration, error %d\n",
 			    __func__, error);
 			return error;
 		}
 		/*
-		 * We have the calibration results now so we can skip
-		 * loading the initialization firmware next time.
+		 * We have the calibration results now, reboot with the
+		 * runtime firmware (call ourselves recursively!)
 		 */
-		sc->sc_flags &= ~IWN_FLAG_FIRST_BOOT;
-
-		/* Reboot (call ourselves recursively!) */
 		iwn_hw_stop(sc);
 		error = iwn_hw_init(sc);
 	} else {
@@ -4976,8 +5551,8 @@ iwn5000_load_firmware(struct iwn_softc *sc)
 	int error;
 
 	/* Load the initialization firmware on first boot only. */
-	fw = (sc->sc_flags & IWN_FLAG_FIRST_BOOT) ?
-	    &sc->fw.init : &sc->fw.main;
+	fw = (sc->sc_flags & IWN_FLAG_CALIB_DONE) ?
+	    &sc->fw.main : &sc->fw.init;
 
 	error = iwn5000_load_firmware_section(sc, IWN_FW_TEXT_BASE,
 	    fw->text, fw->textsz);
@@ -5005,8 +5580,9 @@ int
 iwn_read_firmware(struct iwn_softc *sc)
 {
 	const struct iwn_hal *hal = sc->sc_hal;
-	const struct iwn_firmware_hdr *hdr;
 	struct iwn_fw_info *fw = &sc->fw;
+	const uint32_t *ptr;
+	uint32_t rev;
 	size_t size;
 
 	IWN_UNLOCK(sc);
@@ -5023,21 +5599,33 @@ iwn_read_firmware(struct iwn_softc *sc)
 	IWN_LOCK(sc);
 
 	size = sc->fw_fp->datasize;
-	if (size < sizeof (*hdr)) {
+	if (size < 28) {
 		device_printf(sc->sc_dev,
 		    "%s: truncated firmware header: %zu bytes\n",
 		    __func__, size);
 		return EINVAL;
 	}
 
-	/* Extract firmware header information. */
-	hdr = (const struct iwn_firmware_hdr *)sc->fw_fp->data;
-	fw->main.textsz = le32toh(hdr->main_textsz);
-	fw->main.datasz = le32toh(hdr->main_datasz);
-	fw->init.textsz = le32toh(hdr->init_textsz);
-	fw->init.datasz = le32toh(hdr->init_datasz);
-	fw->boot.textsz = le32toh(hdr->boot_textsz);
-	fw->boot.datasz = 0;
+	/* Process firmware header. */
+	ptr = (const uint32_t *)sc->fw_fp->data;
+	rev = le32toh(*ptr++);
+	/* Check firmware API version. */
+	if (IWN_FW_API(rev) <= 1) {
+		device_printf(sc->sc_dev,
+		    "%s: bad firmware, need API version >=2\n", __func__);
+		return EINVAL;
+	}
+	if (IWN_FW_API(rev) >= 3) {
+		/* Skip build number (version 2 header). */
+		size -= 4;
+		ptr++;
+	}
+	fw->main.textsz = le32toh(*ptr++);
+	fw->main.datasz = le32toh(*ptr++);
+	fw->init.textsz = le32toh(*ptr++);
+	fw->init.datasz = le32toh(*ptr++);
+	fw->boot.textsz = le32toh(*ptr++);
+	size -= 24;
 
 	/* Sanity-check firmware header. */
 	if (fw->main.textsz > hal->fw_text_maxsz ||
@@ -5052,8 +5640,8 @@ iwn_read_firmware(struct iwn_softc *sc)
 	}
 
 	/* Check that all firmware sections fit. */
-	if (size < sizeof (*hdr) + fw->main.textsz + fw->main.datasz +
-	    fw->init.textsz + fw->init.datasz + fw->boot.textsz) {
+	if (fw->main.textsz + fw->main.datasz + fw->init.textsz +
+	    fw->init.datasz + fw->boot.textsz > size) {
 		device_printf(sc->sc_dev,
 		    "%s: firmware file too short: %zu bytes\n",
 		    __func__, size);
@@ -5061,7 +5649,7 @@ iwn_read_firmware(struct iwn_softc *sc)
 	}
 
 	/* Get pointers to firmware sections. */
-	fw->main.text = (const uint8_t *)(hdr + 1);
+	fw->main.text = (const uint8_t *)ptr;
 	fw->main.data = fw->main.text + fw->main.textsz;
 	fw->init.text = fw->main.data + fw->main.datasz;
 	fw->init.data = fw->init.text + fw->init.textsz;
@@ -5070,15 +5658,6 @@ iwn_read_firmware(struct iwn_softc *sc)
 	return 0;
 }
 
-void
-iwn_unload_firmware(struct iwn_softc *sc)
-{
-	if (sc->fw_fp != NULL) {
-		firmware_put(sc->fw_fp, FIRMWARE_UNLOAD);
-		sc->fw_fp = NULL;
-	}
-}
-
 int
 iwn_clock_wait(struct iwn_softc *sc)
 {
@@ -5088,10 +5667,10 @@ iwn_clock_wait(struct iwn_softc *sc)
 	IWN_SETBITS(sc, IWN_GP_CNTRL, IWN_GP_CNTRL_INIT_DONE);
 
 	/* Wait for clock stabilization. */
-	for (ntries = 0; ntries < 25000; ntries++) {
+	for (ntries = 0; ntries < 2500; ntries++) {
 		if (IWN_READ(sc, IWN_GP_CNTRL) & IWN_GP_CNTRL_MAC_CLOCK_READY)
 			return 0;
-		DELAY(100);
+		DELAY(10);
 	}
 	device_printf(sc->sc_dev,
 	    "%s: timeout waiting for clock stabilization\n", __func__);
@@ -5099,53 +5678,36 @@ iwn_clock_wait(struct iwn_softc *sc)
 }
 
 int
-iwn4965_apm_init(struct iwn_softc *sc)
+iwn_apm_init(struct iwn_softc *sc)
 {
+	uint32_t tmp;
 	int error;
 
-	/* Disable L0s. */
+	/* Disable L0s exit timer (NMI bug workaround.) */
 	IWN_SETBITS(sc, IWN_GIO_CHICKEN, IWN_GIO_CHICKEN_DIS_L0S_TIMER);
+	/* Don't wait for ICH L0s (ICH bug workaround.) */
 	IWN_SETBITS(sc, IWN_GIO_CHICKEN, IWN_GIO_CHICKEN_L1A_NO_L0S_RX);
 
-	error = iwn_clock_wait(sc);
-	if (error != 0)
-		return error;
-
-	error = iwn_nic_lock(sc);
-	if (error != 0)
-		return error;
-
-	/* Enable DMA. */
-	iwn_prph_write(sc, IWN_APMG_CLK_CTRL,
-	    IWN_APMG_CLK_CTRL_DMA_CLK_RQT | IWN_APMG_CLK_CTRL_BSM_CLK_RQT);
-	DELAY(20);
-
-	/* Disable L1. */
-	iwn_prph_setbits(sc, IWN_APMG_PCI_STT, IWN_APMG_PCI_STT_L1A_DIS);
-	iwn_nic_unlock(sc);
-
-	return 0;
-}
-
-int
-iwn5000_apm_init(struct iwn_softc *sc)
-{
-	int error;
-
-	/* Disable L0s. */
-	IWN_SETBITS(sc, IWN_GIO_CHICKEN, IWN_GIO_CHICKEN_DIS_L0S_TIMER);
-	IWN_SETBITS(sc, IWN_GIO_CHICKEN, IWN_GIO_CHICKEN_L1A_NO_L0S_RX);
-
-	/* Set Flow Handler wait threshold to the maximum. */
+	/* Set FH wait threshold to max (HW bug under stress workaround.) */
 	IWN_SETBITS(sc, IWN_DBG_HPET_MEM, 0xffff0000);
 
-	/* Enable HAP to move adapter from L1a to L0s. */
+	/* Enable HAP INTA to move adapter from L1a to L0s. */
 	IWN_SETBITS(sc, IWN_HW_IF_CONFIG, IWN_HW_IF_CONFIG_HAP_WAKE_L1A);
 
-	if (sc->hw_type != IWN_HW_REV_TYPE_6000 &&
+	/* Retrieve PCIe Active State Power Management (ASPM). */
+	tmp = pci_read_config(sc->sc_dev, sc->sc_cap_off + 0x10, 1);
+	/* Workaround for HW instability in PCIe L0->L0s->L1 transition. */
+	if (tmp & 0x02)	/* L1 Entry enabled. */
+		IWN_SETBITS(sc, IWN_GIO, IWN_GIO_L0S_ENA);
+	else
+		IWN_CLRBITS(sc, IWN_GIO, IWN_GIO_L0S_ENA);
+
+	if (sc->hw_type != IWN_HW_REV_TYPE_4965 &&
+	    sc->hw_type != IWN_HW_REV_TYPE_6000 &&
 	    sc->hw_type != IWN_HW_REV_TYPE_6050)
 		IWN_SETBITS(sc, IWN_ANA_PLL, IWN_ANA_PLL_INIT);
 
+	/* Wait for clock stabilization before accessing prph. */
 	error = iwn_clock_wait(sc);
 	if (error != 0)
 		return error;
@@ -5154,11 +5716,19 @@ iwn5000_apm_init(struct iwn_softc *sc)
 	if (error != 0)
 		return error;
 
-	/* Enable DMA. */
-	iwn_prph_write(sc, IWN_APMG_CLK_CTRL, IWN_APMG_CLK_CTRL_DMA_CLK_RQT);
+	if (sc->hw_type == IWN_HW_REV_TYPE_4965) {
+		/* Enable DMA and BSM (Bootstrap State Machine.) */
+		iwn_prph_write(sc, IWN_APMG_CLK_EN,
+		    IWN_APMG_CLK_CTRL_DMA_CLK_RQT |
+		    IWN_APMG_CLK_CTRL_BSM_CLK_RQT);
+	} else {
+		/* Enable DMA. */
+		iwn_prph_write(sc, IWN_APMG_CLK_EN,
+		    IWN_APMG_CLK_CTRL_DMA_CLK_RQT);
+	}
 	DELAY(20);
 
-	/* Disable L1. */
+	/* Disable L1-Active. */
 	iwn_prph_setbits(sc, IWN_APMG_PCI_STT, IWN_APMG_PCI_STT_L1A_DIS);
 	iwn_nic_unlock(sc);
 
@@ -5170,6 +5740,7 @@ iwn_apm_stop_master(struct iwn_softc *sc)
 {
 	int ntries;
 
+	/* Stop busmaster DMA activity. */
 	IWN_SETBITS(sc, IWN_RESET, IWN_RESET_STOP_MASTER);
 	for (ntries = 0; ntries < 100; ntries++) {
 		if (IWN_READ(sc, IWN_RESET) & IWN_RESET_MASTER_DISABLED)
@@ -5185,6 +5756,7 @@ iwn_apm_stop(struct iwn_softc *sc)
 {
 	iwn_apm_stop_master(sc);
 
+	/* Reset the entire device. */
 	IWN_SETBITS(sc, IWN_RESET, IWN_RESET_SW);
 	DELAY(10);
 	/* Clear "initialization complete" bit. */
@@ -5194,15 +5766,6 @@ iwn_apm_stop(struct iwn_softc *sc)
 int
 iwn4965_nic_config(struct iwn_softc *sc)
 {
-	uint32_t tmp;
-
-	/* Retrieve PCIe Active State Power Management (ASPM). */
-	tmp = pci_read_config(sc->sc_dev, sc->sc_cap_off + 0x10, 1);
-	if (tmp & 0x02)		/* L1 Entry enabled. */
-		IWN_SETBITS(sc, IWN_GIO, IWN_GIO_L0S_ENA);
-	else
-		IWN_CLRBITS(sc, IWN_GIO, IWN_GIO_L0S_ENA);
-
 	if (IWN_RFCFG_TYPE(sc->rfcfg) == 1) {
 		/*
 		 * I don't believe this to be correct but this is what the
@@ -5225,13 +5788,6 @@ iwn5000_nic_config(struct iwn_softc *sc)
 	uint32_t tmp;
 	int error;
 
-	/* Retrieve PCIe Active State Power Management (ASPM). */
-	tmp = pci_read_config(sc->sc_dev, sc->sc_cap_off + 0x10, 1);
-	if (tmp & 0x02)		/* L1 Entry enabled. */
-		IWN_SETBITS(sc, IWN_GIO, IWN_GIO_L0S_ENA);
-	else
-		IWN_CLRBITS(sc, IWN_GIO, IWN_GIO_L0S_ENA);
-
 	if (IWN_RFCFG_TYPE(sc->rfcfg) < 3) {
 		IWN_SETBITS(sc, IWN_HW_IF_CONFIG,
 		    IWN_RFCFG_TYPE(sc->rfcfg) |
@@ -5245,7 +5801,24 @@ iwn5000_nic_config(struct iwn_softc *sc)
 	if (error != 0)
 		return error;
 	iwn_prph_setbits(sc, IWN_APMG_PS, IWN_APMG_PS_EARLY_PWROFF_DIS);
+
+	if (sc->hw_type == IWN_HW_REV_TYPE_1000) {
+		/*
+		 * Select first Switching Voltage Regulator (1.32V) to
+		 * solve a stability issue related to noisy DC2DC line
+		 * in the silicon of 1000 Series.
+		 */
+		tmp = iwn_prph_read(sc, IWN_APMG_DIGITAL_SVR);
+		tmp &= ~IWN_APMG_DIGITAL_SVR_VOLTAGE_MASK;
+		tmp |= IWN_APMG_DIGITAL_SVR_VOLTAGE_1_32;
+		iwn_prph_write(sc, IWN_APMG_DIGITAL_SVR, tmp);
+	}
 	iwn_nic_unlock(sc);
+
+	if (sc->sc_flags & IWN_FLAG_INTERNAL_PA) {
+		/* Use internal power amplifier only. */
+		IWN_WRITE(sc, IWN_GP_DRIVER, IWN_GP_DRIVER_RADIO_2X2_IPA);
+	}
 	return 0;
 }
 
@@ -5257,6 +5830,16 @@ iwn_hw_prepare(struct iwn_softc *sc)
 {
 	int ntries;
 
+	/* Check if hardware is ready. */
+	IWN_SETBITS(sc, IWN_HW_IF_CONFIG, IWN_HW_IF_CONFIG_NIC_READY);
+	for (ntries = 0; ntries < 5; ntries++) {
+		if (IWN_READ(sc, IWN_HW_IF_CONFIG) &
+		    IWN_HW_IF_CONFIG_NIC_READY)
+			return 0;
+		DELAY(10);
+	}
+
+	/* Hardware not ready, force into ready state. */
 	IWN_SETBITS(sc, IWN_HW_IF_CONFIG, IWN_HW_IF_CONFIG_PREPARE);
 	for (ntries = 0; ntries < 15000; ntries++) {
 		if (!(IWN_READ(sc, IWN_HW_IF_CONFIG) &
@@ -5267,6 +5850,7 @@ iwn_hw_prepare(struct iwn_softc *sc)
 	if (ntries == 15000)
 		return ETIMEDOUT;
 
+	/* Hardware should be ready now. */
 	IWN_SETBITS(sc, IWN_HW_IF_CONFIG, IWN_HW_IF_CONFIG_NIC_READY);
 	for (ntries = 0; ntries < 5; ntries++) {
 		if (IWN_READ(sc, IWN_HW_IF_CONFIG) &
@@ -5286,7 +5870,7 @@ iwn_hw_init(struct iwn_softc *sc)
 	/* Clear pending interrupts. */
 	IWN_WRITE(sc, IWN_INT, 0xffffffff);
 
-	error = hal->apm_init(sc);
+	error = iwn_apm_init(sc);
 	if (error != 0) {
 		device_printf(sc->sc_dev,
 		    "%s: could not power ON adapter, error %d\n",
@@ -5363,7 +5947,7 @@ iwn_hw_init(struct iwn_softc *sc)
 	/* Enable interrupt coalescing. */
 	IWN_WRITE(sc, IWN_INT_COALESCING, 512 / 8);
 	/* Enable interrupts. */
-	IWN_WRITE(sc, IWN_MASK, IWN_INT_MASK);
+	IWN_WRITE(sc, IWN_INT_MASK, sc->int_mask);
 
 	/* _Really_ make sure "radio off" bit is cleared! */
 	IWN_WRITE(sc, IWN_UCODE_GP1_CLR, IWN_UCODE_GP1_RFKILL);
@@ -5398,9 +5982,10 @@ iwn_hw_stop(struct iwn_softc *sc)
 	IWN_WRITE(sc, IWN_RESET, IWN_RESET_NEVO);
 
 	/* Disable interrupts. */
-	IWN_WRITE(sc, IWN_MASK, 0);
+	IWN_WRITE(sc, IWN_INT_MASK, 0);
 	IWN_WRITE(sc, IWN_INT, 0xffffffff);
 	IWN_WRITE(sc, IWN_FH_INT, 0xffffffff);
+	sc->sc_flags &= ~IWN_FLAG_USE_ICT;
 
 	/* Make sure we no longer hold the NIC lock. */
 	iwn_nic_unlock(sc);
@@ -5431,7 +6016,8 @@ iwn_hw_stop(struct iwn_softc *sc)
 		iwn_reset_tx_ring(sc, &sc->txq[qid]);
 
 	if (iwn_nic_lock(sc) == 0) {
-		iwn_prph_write(sc, IWN_APMG_CLK_DIS, IWN_APMG_CLK_DMA_RQT);
+		iwn_prph_write(sc, IWN_APMG_CLK_DIS,
+		    IWN_APMG_CLK_CTRL_DMA_CLK_RQT);
 		iwn_nic_unlock(sc);
 	}
 	DELAY(5);
@@ -5448,8 +6034,6 @@ iwn_init_locked(struct iwn_softc *sc)
 
 	IWN_LOCK_ASSERT(sc);
 
-	iwn_stop_locked(sc);
-
 	error = iwn_hw_prepare(sc);
 	if (error != 0) {
 		device_printf(sc->sc_dev, "%s: hardware not ready, eror %d\n",
@@ -5457,13 +6041,19 @@ iwn_init_locked(struct iwn_softc *sc)
 		goto fail;
 	}
 
+	/* Initialize interrupt mask to default value. */
+	sc->int_mask = IWN_INT_MASK_DEF;
+	sc->sc_flags &= ~IWN_FLAG_USE_ICT;
+
 	/* Check that the radio is not disabled by hardware switch. */
 	if (!(IWN_READ(sc, IWN_GP_CNTRL) & IWN_GP_CNTRL_RFKILL)) {
 		device_printf(sc->sc_dev,
-		    "%s: radio is disabled by hardware switch\n",
-		    __func__);
-		error = EPERM;	/* :-) */
-		goto fail;
+		    "radio is disabled by hardware switch\n");
+
+		/* Enable interrupts to get RF toggle notifications. */
+		IWN_WRITE(sc, IWN_INT, 0xffffffff);
+		IWN_WRITE(sc, IWN_INT_MASK, sc->int_mask);
+		return;
 	}
 
 	/* Read firmware images from the filesystem. */
@@ -5477,6 +6067,8 @@ iwn_init_locked(struct iwn_softc *sc)
 
 	/* Initialize hardware and upload firmware. */
 	error = iwn_hw_init(sc);
+	firmware_put(sc->fw_fp, FIRMWARE_UNLOAD);
+	sc->fw_fp = NULL;
 	if (error != 0) {
 		device_printf(sc->sc_dev,
 		    "%s: could not initialize hardware, error %d\n",
@@ -5524,8 +6116,6 @@ iwn_stop_locked(struct iwn_softc *sc)
 
 	IWN_LOCK_ASSERT(sc);
 
-	IWN_WRITE(sc, IWN_RESET, IWN_RESET_NEVO);
-
 	sc->sc_tx_timer = 0;
 	callout_stop(&sc->sc_timer_to);
 	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
@@ -5534,7 +6124,6 @@ iwn_stop_locked(struct iwn_softc *sc)
 	iwn_hw_stop(sc);
 }
 
-
 void
 iwn_stop(struct iwn_softc *sc)
 {
@@ -5564,7 +6153,16 @@ iwn_scan_start(struct ieee80211com *ic)
 static void
 iwn_scan_end(struct ieee80211com *ic)
 {
-	/* ignore */
+	struct ifnet *ifp = ic->ic_ifp;
+	struct iwn_softc *sc = ifp->if_softc;
+	struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
+
+	IWN_LOCK(sc);
+	if (vap->iv_state == IEEE80211_S_RUN) {
+		/* Set link LED to ON status if we are associated */
+		iwn_set_led(sc, IWN_LED_LINK, 0, 1);
+	}
+	IWN_UNLOCK(sc);
 }
 
 /*
@@ -5576,27 +6174,12 @@ iwn_set_channel(struct ieee80211com *ic)
 	const struct ieee80211_channel *c = ic->ic_curchan;
 	struct ifnet *ifp = ic->ic_ifp;
 	struct iwn_softc *sc = ifp->if_softc;
-	struct ieee80211vap *vap;
-	int error;
-
-	vap = TAILQ_FIRST(&ic->ic_vaps);	/* XXX */
 
 	IWN_LOCK(sc);
-	if (c != sc->sc_curchan) {
-		sc->sc_rxtap.wr_chan_freq = htole16(c->ic_freq);
-		sc->sc_rxtap.wr_chan_flags = htole16(c->ic_flags);
-		sc->sc_txtap.wt_chan_freq = htole16(c->ic_freq);
-		sc->sc_txtap.wt_chan_flags = htole16(c->ic_flags);
-
-		error = iwn_config(sc);
-		if (error != 0) {
-			DPRINTF(sc, IWN_DEBUG_STATE,
-			    "%s: set chan failed, cancel scan\n",
-			    __func__);
-			//XXX Handle failed scan correctly
-			ieee80211_cancel_scan(vap);
-		}
-	}
+	sc->sc_rxtap.wr_chan_freq = htole16(c->ic_freq);
+	sc->sc_rxtap.wr_chan_flags = htole16(c->ic_flags);
+	sc->sc_txtap.wt_chan_freq = htole16(c->ic_freq);
+	sc->sc_txtap.wt_chan_flags = htole16(c->ic_flags);
 	IWN_UNLOCK(sc);
 }
 
@@ -5628,6 +6211,48 @@ iwn_scan_mindwell(struct ieee80211_scan_state *ss)
 	/* NB: don't try to abort scan; wait for firmware to finish */
 }
 
+static struct iwn_eeprom_chan *
+iwn_find_eeprom_channel(struct iwn_softc *sc, struct ieee80211_channel *c)
+{
+	int i, j;
+
+	for (j = 0; j < 7; j++) {
+		for (i = 0; i < iwn_bands[j].nchan; i++) {
+			if (iwn_bands[j].chan[i] == c->ic_ieee)
+				return &sc->eeprom_channels[j][i];
+		}
+	}
+
+	return NULL;
+}
+
+/*
+ * Enforce flags read from EEPROM.
+ */
+static int
+iwn_setregdomain(struct ieee80211com *ic, struct ieee80211_regdomain *rd,
+    int nchan, struct ieee80211_channel chans[])
+{
+	struct iwn_softc *sc = ic->ic_ifp->if_softc;
+	int i;
+
+	for (i = 0; i < nchan; i++) {
+		struct ieee80211_channel *c = &chans[i];
+		struct iwn_eeprom_chan *channel;
+
+		channel = iwn_find_eeprom_channel(sc, c);
+		if (channel == NULL) {
+			if_printf(ic->ic_ifp,
+			    "%s: invalid channel %u freq %u/0x%x\n",
+			    __func__, c->ic_ieee, c->ic_freq, c->ic_flags);
+			return EINVAL;
+		}
+		c->ic_flags |= iwn_eeprom_channel_flags(channel);
+	}
+
+	return 0;
+}
+
 static void
 iwn_hw_reset(void *arg0, int pending)
 {
@@ -5635,6 +6260,7 @@ iwn_hw_reset(void *arg0, int pending)
 	struct ifnet *ifp = sc->sc_ifp;
 	struct ieee80211com *ic = ifp->if_l2com;
 
+	iwn_stop(sc);
 	iwn_init(sc);
 	ieee80211_notify_radio(ic, 1);
 }
@@ -5643,8 +6269,14 @@ static void
 iwn_radio_on(void *arg0, int pending)
 {
 	struct iwn_softc *sc = arg0;
+	struct ifnet *ifp = sc->sc_ifp;
+	struct ieee80211com *ic = ifp->if_l2com;
+	struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
 
-	iwn_init(sc);
+	if (vap != NULL) {
+		iwn_init(sc);
+		ieee80211_init(vap);
+	}
 }
 
 static void
@@ -5653,10 +6285,16 @@ iwn_radio_off(void *arg0, int pending)
 	struct iwn_softc *sc = arg0;
 	struct ifnet *ifp = sc->sc_ifp;
 	struct ieee80211com *ic = ifp->if_l2com;
+	struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
 
+	iwn_stop(sc);
+	if (vap != NULL)
+		ieee80211_stop(vap);
+
+	/* Enable interrupts to get RF toggle notification. */
 	IWN_LOCK(sc);
-	ieee80211_notify_radio(ic, 0);
-	iwn_stop_locked(sc);
+	IWN_WRITE(sc, IWN_INT, 0xffffffff);
+	IWN_WRITE(sc, IWN_INT_MASK, sc->int_mask);
 	IWN_UNLOCK(sc);
 }
 
@@ -5686,8 +6324,13 @@ static int
 iwn_suspend(device_t dev)
 {
 	struct iwn_softc *sc = device_get_softc(dev);
+	struct ifnet *ifp = sc->sc_ifp;
+	struct ieee80211com *ic = ifp->if_l2com;
+	struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
 
 	iwn_stop(sc);
+	if (vap != NULL)
+		ieee80211_stop(vap);
 	return 0;
 }
 
@@ -5696,11 +6339,19 @@ iwn_resume(device_t dev)
 {
 	struct iwn_softc *sc = device_get_softc(dev);
 	struct ifnet *ifp = sc->sc_ifp;
+	struct ieee80211com *ic = ifp->if_l2com;
+	struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
 
+	/* Clear device-specific "PCI retry timeout" register (41h). */
 	pci_write_config(dev, 0x41, 0, 1);
 
-	if (ifp->if_flags & IFF_UP)
+	if (ifp->if_flags & IFF_UP) {
 		iwn_init(sc);
+		if (vap != NULL)
+			ieee80211_init(vap);
+		if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+			iwn_start(ifp);
+	}
 	return 0;
 }
 
@@ -5724,8 +6375,8 @@ iwn_intr_str(uint8_t cmd)
 	case IWN_RX_DONE:		return "RX_DONE";
 
 	/* Command Notifications */
-	case IWN_CMD_CONFIGURE:		return "IWN_CMD_CONFIGURE";
-	case IWN_CMD_ASSOCIATE:		return "IWN_CMD_ASSOCIATE";
+	case IWN_CMD_RXON:		return "IWN_CMD_RXON";
+	case IWN_CMD_RXON_ASSOC:	return "IWN_CMD_RXON_ASSOC";
 	case IWN_CMD_EDCA_PARAMS:	return "IWN_CMD_EDCA_PARAMS";
 	case IWN_CMD_TIMING:		return "IWN_CMD_TIMING";
 	case IWN_CMD_LINK_QUALITY:	return "IWN_CMD_LINK_QUALITY";
diff --git a/sys/dev/iwn/if_iwnreg.h b/sys/dev/iwn/if_iwnreg.h
index ed514afa12c..08ef36cabfe 100644
--- a/sys/dev/iwn/if_iwnreg.h
+++ b/sys/dev/iwn/if_iwnreg.h
@@ -1,5 +1,5 @@
 /*	$FreeBSD$	*/
-/*	$OpenBSD: if_iwnreg.h,v 1.26 2009/05/29 08:25:45 damien Exp $	*/
+/*	$OpenBSD: if_iwnreg.h,v 1.34 2009/11/08 11:54:48 damien Exp $	*/
 
 /*-
  * Copyright (c) 2007, 2008
@@ -18,8 +18,6 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#define EDCA_NUM_AC	4
-
 #define IWN_TX_RING_COUNT	256
 #define IWN_TX_RING_LOMARK	192
 #define IWN_TX_RING_HIMARK	224
@@ -34,6 +32,9 @@
 
 #define IWN_SRVC_DMACHNL	9
 
+#define IWN_ICT_SIZE		4096
+#define IWN_ICT_COUNT		(IWN_ICT_SIZE / sizeof (uint32_t))
+
 /* Maximum number of DMA segments for TX. */
 #define IWN_MAX_SCATTER	20
 
@@ -57,8 +58,9 @@
  */
 #define IWN_HW_IF_CONFIG	0x000
 #define IWN_INT_COALESCING	0x004
+#define IWN_INT_PERIODIC	0x005	/* use IWN_WRITE_1 */
 #define IWN_INT			0x008
-#define IWN_MASK		0x00c
+#define IWN_INT_MASK		0x00c
 #define IWN_FH_INT		0x010
 #define IWN_RESET		0x020
 #define IWN_GP_CNTRL		0x024
@@ -67,19 +69,23 @@
 #define IWN_EEPROM_GP		0x030
 #define IWN_OTP_GP		0x034
 #define IWN_GIO			0x03c
+#define IWN_GP_DRIVER		0x050
 #define IWN_UCODE_GP1_CLR	0x05c
 #define IWN_LED			0x094
+#define IWN_DRAM_INT_TBL	0x0a0
 #define IWN_GIO_CHICKEN		0x100
 #define IWN_ANA_PLL		0x20c
+#define IWN_HW_REV_WA		0x22c
 #define IWN_DBG_HPET_MEM	0x240
+#define IWN_DBG_LINK_PWR_MGMT	0x250
 #define IWN_MEM_RADDR		0x40c
 #define IWN_MEM_WADDR		0x410
 #define IWN_MEM_WDATA		0x418
 #define IWN_MEM_RDATA		0x41c
-#define IWN_PRPH_WADDR  	0x444
-#define IWN_PRPH_RADDR   	0x448
-#define IWN_PRPH_WDATA  	0x44c
-#define IWN_PRPH_RDATA   	0x450
+#define IWN_PRPH_WADDR		0x444
+#define IWN_PRPH_RADDR		0x448
+#define IWN_PRPH_WDATA		0x44c
+#define IWN_PRPH_RDATA		0x450
 #define IWN_HBUS_TARG_WRPTR	0x460
 
 /*
@@ -134,10 +140,12 @@
 /*
  * NIC internal memory offsets.
  */
-#define IWN_CLOCK_CTL		0x3000
-#define IWN_APMG_CLK_CTRL	0x3004
+#define IWN_APMG_CLK_CTRL	0x3000
+#define IWN_APMG_CLK_EN		0x3004
 #define IWN_APMG_CLK_DIS	0x3008
 #define IWN_APMG_PS		0x300c
+#define IWN_APMG_DIGITAL_SVR	0x3058
+#define IWN_APMG_ANALOG_SVR	0x306c
 #define IWN_APMG_PCI_STT	0x3010
 #define IWN_BSM_WR_CTRL		0x3400
 #define IWN_BSM_WR_MEM_SRC	0x3404
@@ -149,9 +157,6 @@
 #define IWN_BSM_DRAM_DATA_SIZE	0x349c
 #define IWN_BSM_SRAM_BASE	0x3800
 
-/* Possible values for IWN_APMG_CLK_DIS. */
-#define IWN_APMG_CLK_DMA_RQT	(1 << 9)
-
 /* Possible flags for register IWN_HW_IF_CONFIG. */
 #define IWN_HW_IF_CONFIG_4965_R		(1 <<  4)
 #define IWN_HW_IF_CONFIG_MAC_SI		(1 <<  8)
@@ -162,6 +167,10 @@
 #define IWN_HW_IF_CONFIG_PREPARE_DONE	(1 << 25)
 #define IWN_HW_IF_CONFIG_PREPARE	(1 << 27)
 
+/* Possible values for register IWN_INT_PERIODIC. */
+#define IWN_INT_PERIODIC_DIS	0x00
+#define IWN_INT_PERIODIC_ENA	0xff
+
 /* Possible flags for registers IWN_PRPH_RADDR/IWN_PRPH_WADDR. */
 #define IWN_PRPH_DWORD	((sizeof (uint32_t) - 1) << 24)
 
@@ -174,6 +183,7 @@
 #define IWN_RESET_SW			(1 << 7)
 #define IWN_RESET_MASTER_DISABLED	(1 << 8)
 #define IWN_RESET_STOP_MASTER		(1 << 9)
+#define IWN_RESET_LINK_PWR_MGMT_DIS	(1 << 31)
 
 /* Possible flags for register IWN_GP_CNTRL. */
 #define IWN_GP_CNTRL_MAC_ACCESS_ENA	(1 << 0)
@@ -202,6 +212,11 @@
 /* Possible flags for register IWN_GIO. */
 #define IWN_GIO_L0S_ENA		(1 << 1)
 
+/* Possible flags for register IWN_GP_DRIVER. */
+#define IWN_GP_DRIVER_RADIO_3X3_HYB	(0 << 0)
+#define IWN_GP_DRIVER_RADIO_2X2_HYB	(1 << 0)
+#define IWN_GP_DRIVER_RADIO_2X2_IPA	(2 << 0)
+
 /* Possible flags for register IWN_UCODE_GP1_CLR. */
 #define IWN_UCODE_GP1_RFKILL		(1 << 1)
 #define IWN_UCODE_GP1_CMD_BLOCKED	(1 << 2)
@@ -212,6 +227,10 @@
 #define IWN_LED_OFF		0x00000038
 #define IWN_LED_ON		0x00000078
 
+/* Possible flags for register IWN_DRAM_INT_TBL. */
+#define IWN_DRAM_INT_TBL_WRAP_CHECK	(1 << 27)
+#define IWN_DRAM_INT_TBL_ENABLE		(1 << 31)
+
 /* Possible values for register IWN_ANA_PLL. */
 #define IWN_ANA_PLL_INIT	0x00880300
 
@@ -229,12 +248,14 @@
 #define IWN_INT_CT_REACHED	(1 <<  6)
 #define IWN_INT_RF_TOGGLED	(1 <<  7)
 #define IWN_INT_SW_ERR		(1 << 25)
+#define IWN_INT_SCHED		(1 << 26)
 #define IWN_INT_FH_TX		(1 << 27)
+#define IWN_INT_RX_PERIODIC	(1 << 28)
 #define IWN_INT_HW_ERR		(1 << 29)
 #define IWN_INT_FH_RX		(1 << 31)
 
 /* Shortcut. */
-#define IWN_INT_MASK							\
+#define IWN_INT_MASK_DEF						\
 	(IWN_INT_SW_ERR | IWN_INT_HW_ERR | IWN_INT_FH_TX |		\
 	 IWN_INT_FH_RX | IWN_INT_ALIVE | IWN_INT_WAKEUP |		\
 	 IWN_INT_SW_RX | IWN_INT_CT_REACHED | IWN_INT_RF_TOGGLED)
@@ -301,7 +322,7 @@
 #define IWN5000_TXQ_STATUS_INACTIVE	0x00ff0010
 #define IWN5000_TXQ_STATUS_CHGACT	(1 << 19)
 
-/* Possible flags for register IWN_APMG_CLK_CTRL. */
+/* Possible flags for registers IWN_APMG_CLK_*. */
 #define IWN_APMG_CLK_CTRL_DMA_CLK_RQT	(1 <<  9)
 #define IWN_APMG_CLK_CTRL_BSM_CLK_RQT	(1 << 11)
 
@@ -313,6 +334,13 @@
 #define IWN_APMG_PS_PWR_SRC_MASK	IWN_APMG_PS_PWR_SRC(3)
 #define IWN_APMG_PS_RESET_REQ		(1 << 26)
 
+/* Possible flags for register IWN_APMG_DIGITAL_SVR. */
+#define IWN_APMG_DIGITAL_SVR_VOLTAGE(x)		(((x) & 0xf) << 5)
+#define IWN_APMG_DIGITAL_SVR_VOLTAGE_MASK	\
+	IWN_APMG_DIGITAL_SVR_VOLTAGE(0xf)
+#define IWN_APMG_DIGITAL_SVR_VOLTAGE_1_32	\
+	IWN_APMG_DIGITAL_SVR_VOLTAGE(3)
+
 /* Possible flags for IWN_APMG_PCI_STT. */
 #define IWN_APMG_PCI_STT_L1A_DIS	(1 << 11)
 
@@ -362,6 +390,7 @@ struct iwn_rx_desc {
 #define IWN_RX_PHY			192
 #define IWN_MPDU_RX_DONE		193
 #define IWN_RX_DONE			195
+#define IWN_RX_COMPRESSED_BA		197
 
 	uint8_t		flags;
 	uint8_t		idx;
@@ -382,8 +411,8 @@ struct iwn_rx_desc {
 
 struct iwn_tx_cmd {
 	uint8_t	code;
-#define IWN_CMD_CONFIGURE		 16
-#define IWN_CMD_ASSOCIATE		 17
+#define IWN_CMD_RXON			 16
+#define IWN_CMD_RXON_ASSOC		 17
 #define IWN_CMD_EDCA_PARAMS		 19
 #define IWN_CMD_TIMING			 20
 #define IWN_CMD_ADD_NODE		 24
@@ -394,8 +423,9 @@ struct iwn_tx_cmd {
 #define IWN5000_CMD_CALIB_CONFIG	101
 #define IWN_CMD_SET_POWER_MODE		119
 #define IWN_CMD_SCAN			128
+#define IWN_CMD_TXPOWER_DBM		149
 #define IWN_CMD_TXPOWER			151
-#define IWN_CMD_TXPOWER_DBM		152
+#define IWN5000_CMD_TX_ANT_CONFIG	152
 #define IWN_CMD_BT_COEX			155
 #define IWN_CMD_GET_STATISTICS		156
 #define IWN_CMD_SET_CRITICAL_TEMP	164
@@ -412,10 +442,12 @@ struct iwn_tx_cmd {
 #define IWN_ANT_A	(1 << 0)
 #define IWN_ANT_B	(1 << 1)
 #define IWN_ANT_C	(1 << 2)
-/* Shortcut. */
+/* Shortcuts. */
+#define IWN_ANT_AB	(IWN_ANT_A | IWN_ANT_B)
+#define IWN_ANT_BC	(IWN_ANT_B | IWN_ANT_C)
 #define IWN_ANT_ABC	(IWN_ANT_A | IWN_ANT_B | IWN_ANT_C)
 
-/* Structure for command IWN_CMD_CONFIGURE. */
+/* Structure for command IWN_CMD_RXON. */
 struct iwn_rxon {
 	uint8_t		myaddr[IEEE80211_ADDR_LEN];
 	uint16_t	reserved1;
@@ -431,10 +463,10 @@ struct iwn_rxon {
 
 	uint8_t		air;
 	uint16_t	rxchain;
-#define IWN_RXCHAIN_FORCE		(1 << 0)
-#define IWN_RXCHAIN_VALID(x)		((x) <<  1)
-#define IWN_RXCHAIN_SEL(x)		((x) <<  4)
-#define IWN_RXCHAIN_MIMO(x)		((x) <<  7)
+#define IWN_RXCHAIN_DRIVER_FORCE	(1 << 0)
+#define IWN_RXCHAIN_VALID(x)		(((x) & IWN_ANT_ABC) << 1)
+#define IWN_RXCHAIN_FORCE_SEL(x)	(((x) & IWN_ANT_ABC) << 4)
+#define IWN_RXCHAIN_FORCE_MIMO_SEL(x)	(((x) & IWN_ANT_ABC) << 7)
 #define IWN_RXCHAIN_IDLE_COUNT(x)	((x) << 10)
 #define IWN_RXCHAIN_MIMO_COUNT(x)	((x) << 12)
 #define IWN_RXCHAIN_MIMO_FORCE		(1 << 14)
@@ -443,23 +475,16 @@ struct iwn_rxon {
 	uint8_t		cck_mask;
 	uint16_t	associd;
 	uint32_t	flags;
-#define IWN_RXON_24GHZ		0x00000001	/* band */
-#define IWN_RXON_CCK		0x00000002	/* modulation */
-#define IWN_RXON_AUTO		0x00000004	/* 2.4-only auto-detect */
-#define IWN_RXON_HTPROT		0x00000008	/* xmit with HT protection */
-#define IWN_RXON_SHSLOT		0x00000010	/* short slot time */
-#define IWN_RXON_SHPREAMBLE	0x00000020	/* short premable */
-#define IWN_RXON_NODIVERSITY	0x00000080	/* disable antenna diversity */
-#define IWN_RXON_ANTENNA_A	0x00000100
-#define IWN_RXON_ANTENNA_B	0x00000200
-#define IWN_RXON_RADAR		0x00001000	/* enable radar detect */
-#define IWN_RXON_NARROW		0x00002000	/* MKK narrow band select */
-#define IWN_RXON_TSF		0x00008000
-#define IWN_RXON_HT		0x06400000
-#define IWN_RXON_HT20		0x02000000
-#define IWN_RXON_HT40U		0x04000000
-#define IWN_RXON_HT40D		0x04400000
-#define IWN_RXON_CTS_TO_SELF	0x40000000
+#define IWN_RXON_24GHZ		(1 <<  0)
+#define IWN_RXON_CCK		(1 <<  1)
+#define IWN_RXON_AUTO		(1 <<  2)
+#define IWN_RXON_SHSLOT		(1 <<  4)
+#define IWN_RXON_SHPREAMBLE	(1 <<  5)
+#define IWN_RXON_NODIVERSITY	(1 <<  7)
+#define IWN_RXON_ANTENNA_A	(1 <<  8)
+#define IWN_RXON_ANTENNA_B	(1 <<  9)
+#define IWN_RXON_TSF		(1 << 15)
+#define IWN_RXON_CTS_TO_SELF	(1 << 30)
 
 	uint32_t	filter;
 #define IWN_FILTER_PROMISC	(1 << 0)
@@ -473,7 +498,7 @@ struct iwn_rxon {
 	uint8_t		reserved4;
 	uint8_t		ht_single_mask;
 	uint8_t		ht_dual_mask;
-	/* The following fields are for 5000 Series only. */
+	/* The following fields are for >=5000 Series only. */
 	uint8_t		ht_triple_mask;
 	uint8_t		reserved5;
 	uint16_t	acquisition;
@@ -504,7 +529,7 @@ struct iwn_edca_params {
 		uint8_t		aifsn;
 		uint8_t		reserved;
 		uint16_t	txoplimit;
-	} __packed	ac[EDCA_NUM_AC];
+	} __packed	ac[WME_NUM_AC];
 } __packed;
 
 /* Structure for command IWN_CMD_TIMING. */
@@ -595,12 +620,7 @@ struct iwn4965_node_info {
 	uint32_t	reserved7;
 } __packed;
 
-#define IWN_RFLAG_HT	(1 << 0)	/* use HT modulation */
-#define IWN_RFLAG_CCK	(1 << 1)	/* use CCK modulation */
-#define IWN_RFLAG_HT40	(1 << 3)	/* use dual-stream */
-#define IWN_RFLAG_SGI	(1 << 5)	/* use short GI */
-#define IWN_RFLAG_ANT_A	(1 << 6)	/* start on antenna port A */
-#define IWN_RFLAG_ANT_B	(1 << 7)	/* start on antenna port B */
+#define IWN_RFLAG_CCK		(1 << 1)
 #define IWN_RFLAG_ANT(x)	((x) << 6)
 
 /* Structure for command IWN_CMD_TX_DATA. */
@@ -660,7 +680,7 @@ struct iwn_cmd_link_quality {
 	uint8_t		mimo;
 	uint8_t		antmsk_1stream;
 	uint8_t		antmsk_2stream;
-	uint8_t		ridx[EDCA_NUM_AC];
+	uint8_t		ridx[WME_NUM_AC];
 	uint16_t	ampdu_limit;
 	uint8_t		ampdu_threshold;
 	uint8_t		ampdu_max;
@@ -688,7 +708,12 @@ struct iwn_cmd_led {
 /* Structure for command IWN5000_CMD_WIMAX_COEX. */
 struct iwn5000_wimax_coex {
 	uint32_t	flags;
-	struct {
+#define IWN_WIMAX_COEX_STA_TABLE_VALID		(1 << 0)
+#define IWN_WIMAX_COEX_UNASSOC_WA_UNMASK	(1 << 2)
+#define IWN_WIMAX_COEX_ASSOC_WA_UNMASK		(1 << 3)
+#define IWN_WIMAX_COEX_ENABLE			(1 << 7)
+
+	struct iwn5000_wimax_event {
 		uint8_t	request;
 		uint8_t	window;
 		uint8_t	reserved;
@@ -804,11 +829,20 @@ struct iwn5000_cmd_txpower {
 /* Structure for command IWN_CMD_BLUETOOTH. */
 struct iwn_bluetooth {
 	uint8_t		flags;
-	uint8_t		lead;
-	uint8_t		kill;
+#define IWN_BT_COEX_DISABLE	0
+#define IWN_BT_COEX_MODE_2WIRE	1
+#define IWN_BT_COEX_MODE_3WIRE	2
+#define IWN_BT_COEX_MODE_4WIRE	3
+
+	uint8_t		lead_time;
+#define IWN_BT_LEAD_TIME_DEF	30
+
+	uint8_t		max_kill;
+#define IWN_BT_MAX_KILL_DEF	5
+
 	uint8_t		reserved;
-	uint32_t	ack;
-	uint32_t	cts;
+	uint32_t	kill_ack;
+	uint32_t	kill_cts;
 } __packed;
 
 /* Structure for command IWN_CMD_SET_CRITICAL_TEMP. */
@@ -850,7 +884,7 @@ struct iwn_phy_calib {
 #define IWN5000_PHY_CALIB_TX_IQ			11
 #define IWN5000_PHY_CALIB_CRYSTAL		15
 #define IWN5000_PHY_CALIB_BASE_BAND		16
-#define IWN5000_PHY_CALIB_TX_IQ_PERD		17
+#define IWN5000_PHY_CALIB_TX_IQ_PERIODIC	17
 #define IWN5000_PHY_CALIB_RESET_NOISE_GAIN	18
 #define IWN5000_PHY_CALIB_NOISE_GAIN		19
 
@@ -946,9 +980,9 @@ struct iwn_ucode_info {
 
 struct iwn4965_tx_stat {
 	uint8_t		nframes;
-	uint8_t		killcnt;
-	uint8_t		rtscnt;
-	uint8_t		retrycnt;
+	uint8_t		btkillcnt;
+	uint8_t		rtsfailcnt;
+	uint8_t		ackfailcnt;
 	uint8_t		rate;
 	uint8_t		rflags;
 	uint16_t	xrflags;
@@ -960,9 +994,9 @@ struct iwn4965_tx_stat {
 
 struct iwn5000_tx_stat {
 	uint8_t		nframes;
-	uint8_t		killcnt;
-	uint8_t		rtscnt;
-	uint8_t		retrycnt;
+	uint8_t		btkillcnt;
+	uint8_t		rtsfailcnt;
+	uint8_t		ackfailcnt;
 	uint8_t		rate;
 	uint8_t		rflags;
 	uint16_t	xrflags;
@@ -972,7 +1006,9 @@ struct iwn5000_tx_stat {
 	uint32_t	info;
 	uint16_t	seq;
 	uint16_t	len;
-	uint32_t	tlc;
+	uint8_t		tlc;
+	uint8_t		ratid;
+	uint8_t		fc[2];
 	uint16_t	status;
 	uint16_t	sequence;
 } __packed;
@@ -1027,6 +1063,18 @@ struct iwn_rx_stat {
 
 #define IWN_RSSI_TO_DBM	44
 
+/* Structure for IWN_RX_COMPRESSED_BA notification. */
+struct iwn_compressed_ba {
+	uint8_t		macaddr[IEEE80211_ADDR_LEN];
+	uint16_t	reserved;
+	uint8_t		id;
+	uint8_t		tid;
+	uint16_t	seq;
+	uint64_t	bitmap;
+	uint16_t	qid;
+	uint16_t	ssn;
+} __packed;
+
 /* Structure for IWN_START_SCAN notification. */
 struct iwn_start_scan {
 	uint64_t	tstamp;
@@ -1078,7 +1126,7 @@ struct iwn_spectrum_notif {
 #define IWN_MEASUREMENT_FAILED		8
 } __packed;
 
-/* Structure for IWN_{RX,BEACON}_STATISTICS notification. */
+/* Structures for IWN_{RX,BEACON}_STATISTICS notification. */
 struct iwn_rx_phy_stats {
 	uint32_t	ina;
 	uint32_t	fina;
@@ -1208,16 +1256,6 @@ struct iwn_fw_dump {
 	uint32_t	time[2];
 } __packed;
 
-/* Firmware image file header. */
-struct iwn_firmware_hdr {
-	uint32_t	version;
-	uint32_t	main_textsz;
-	uint32_t	main_datasz;
-	uint32_t	init_textsz;
-	uint32_t	init_datasz;
-	uint32_t	boot_textsz;
-} __packed;
-
 #define IWN4965_FW_TEXT_MAXSZ	( 96 * 1024)
 #define IWN4965_FW_DATA_MAXSZ	( 40 * 1024)
 #define IWN5000_FW_TEXT_MAXSZ	(256 * 1024)
@@ -1226,6 +1264,8 @@ struct iwn_firmware_hdr {
 #define IWN4965_FWSZ		(IWN4965_FW_TEXT_MAXSZ + IWN4965_FW_DATA_MAXSZ)
 #define IWN5000_FWSZ		IWN5000_FW_TEXT_MAXSZ
 
+#define IWN_FW_API(x)	(((x) >> 8) & 0xff)
+
 /*
  * Offsets into EEPROM.
  */
@@ -1253,6 +1293,7 @@ struct iwn_firmware_hdr {
 #define IWN5000_EEPROM_BAND5	0x03a
 #define IWN5000_EEPROM_BAND6	0x041
 #define IWN5000_EEPROM_BAND7	0x049
+#define IWN6000_EEPROM_ENHINFO	0x054
 #define IWN5000_EEPROM_CRYSTAL	0x128
 #define IWN5000_EEPROM_TEMP	0x12a
 #define IWN5000_EEPROM_VOLT	0x12b
@@ -1270,12 +1311,18 @@ struct iwn_eeprom_chan {
 #define IWN_EEPROM_CHAN_IBSS	(1 << 1)
 #define IWN_EEPROM_CHAN_ACTIVE	(1 << 3)
 #define IWN_EEPROM_CHAN_RADAR	(1 << 4)
-#define IWN_EEPROM_CHAN_WIDE	(1 << 5)	/* HT40 */
-#define IWN_EEPROM_CHAN_NARROW	(1 << 6)	/* HT20 */
 
 	int8_t	maxpwr;
 } __packed;
 
+struct iwn_eeprom_enhinfo {
+	uint16_t	chan;
+	int8_t		chain[3];	/* max power in half-dBm */
+	uint8_t		reserved;
+	int8_t		mimo2;		/* max power in half-dBm */
+	int8_t		mimo3;		/* max power in half-dBm */
+} __packed;
+
 #define IWN_NSAMPLES	3
 struct iwn4965_eeprom_chan_samples {
 	uint8_t	num;
@@ -1336,7 +1383,9 @@ static const struct iwn_chan_band {
 	{ 11, { 36, 44, 52, 60, 100, 108, 116, 124, 132, 149, 157 } }
 };
 
-#define IWN_RIDX_MCS	0x08		/* or'd to indicate MCS */
+#define IWN1000_OTP_NBLOCKS	3
+#define IWN6000_OTP_NBLOCKS	4
+#define IWN6050_OTP_NBLOCKS	7
 
 /* HW rate indices. */
 #define IWN_RIDX_CCK1	 0
@@ -1489,7 +1538,7 @@ struct iwn_sensitivity_limits {
  */
 static const struct iwn_sensitivity_limits iwn4965_sensitivity_limits = {
 	105, 140,
-	170, 210,
+	220, 270,
 	 85, 120,
 	170, 210,
 	125, 200,
@@ -1511,11 +1560,55 @@ static const struct iwn_sensitivity_limits iwn5000_sensitivity_limits = {
 	 95
 };
 
+static const struct iwn_sensitivity_limits iwn5150_sensitivity_limits = {
+	105, 105,	/* min = max for performance bug in DSP. */
+	220, 220,	/* min = max for performance bug in DSP. */
+	 90, 120,
+	170, 210,
+	125, 200,
+	170, 400,
+	 95,
+	 95,
+	 95
+};
+
+static const struct iwn_sensitivity_limits iwn6000_sensitivity_limits = {
+	105, 145,
+	192, 232,
+	 80, 145,
+	128, 232,
+	125, 175,
+	160, 310,
+	 97,
+	 97,
+	100
+};
+
 /* Map TID to TX scheduler's FIFO. */
 static const uint8_t iwn_tid2fifo[] = {
 	1, 0, 0, 1, 2, 2, 3, 3, 7, 7, 7, 7, 7, 7, 7, 7, 3
 };
 
+/* WiFi/WiMAX coexist event priority table for 6050. */
+static const struct iwn5000_wimax_event iwn6050_wimax_events[] = {
+	{ 0x04, 0x03, 0x00, 0x00 },
+	{ 0x04, 0x03, 0x00, 0x03 },
+	{ 0x04, 0x03, 0x00, 0x03 },
+	{ 0x04, 0x03, 0x00, 0x03 },
+	{ 0x04, 0x03, 0x00, 0x00 },
+	{ 0x04, 0x03, 0x00, 0x07 },
+	{ 0x04, 0x03, 0x00, 0x00 },
+	{ 0x04, 0x03, 0x00, 0x03 },
+	{ 0x04, 0x03, 0x00, 0x03 },
+	{ 0x04, 0x03, 0x00, 0x00 },
+	{ 0x06, 0x03, 0x00, 0x07 },
+	{ 0x04, 0x03, 0x00, 0x00 },
+	{ 0x06, 0x06, 0x00, 0x03 },
+	{ 0x04, 0x03, 0x00, 0x07 },
+	{ 0x04, 0x03, 0x00, 0x00 },
+	{ 0x04, 0x03, 0x00, 0x00 }
+};
+
 /* Firmware errors. */
 static const char * const iwn_fw_errmsg[] = {
 	"OK",
@@ -1558,8 +1651,19 @@ static const char * const iwn_fw_errmsg[] = {
 #define IWN_WRITE(sc, reg, val)						\
 	bus_space_write_4((sc)->sc_st, (sc)->sc_sh, (reg), (val))
 
+#define IWN_WRITE_1(sc, reg, val)					\
+	bus_space_write_1((sc)->sc_st, (sc)->sc_sh, (reg), (val))
+
 #define IWN_SETBITS(sc, reg, mask)					\
 	IWN_WRITE(sc, reg, IWN_READ(sc, reg) | (mask))
 
 #define IWN_CLRBITS(sc, reg, mask)					\
 	IWN_WRITE(sc, reg, IWN_READ(sc, reg) & ~(mask))
+
+#define IWN_BARRIER_WRITE(sc)						\
+	bus_space_barrier((sc)->sc_st, (sc)->sc_sh, 0, (sc)->sc_sz,	\
+	    BUS_SPACE_BARRIER_WRITE)
+
+#define IWN_BARRIER_READ_WRITE(sc)					\
+	bus_space_barrier((sc)->sc_st, (sc)->sc_sh, 0, (sc)->sc_sz,	\
+	    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE)
diff --git a/sys/dev/iwn/if_iwnvar.h b/sys/dev/iwn/if_iwnvar.h
index a5fb31f1258..432ece6c2c8 100644
--- a/sys/dev/iwn/if_iwnvar.h
+++ b/sys/dev/iwn/if_iwnvar.h
@@ -1,5 +1,5 @@
 /*	$FreeBSD$	*/
-/*	$OpenBSD: if_iwnvar.h,v 1.12 2009/05/29 08:25:45 damien Exp $	*/
+/*	$OpenBSD: if_iwnvar.h,v 1.16 2009/11/04 17:46:52 damien Exp $	*/
 
 /*-
  * Copyright (c) 2007, 2008
@@ -74,6 +74,7 @@ struct iwn_tx_ring {
 	struct iwn_tx_desc	*desc;
 	struct iwn_tx_cmd	*cmd;
 	struct iwn_tx_data	data[IWN_TX_RING_COUNT];
+	bus_dma_tag_t		data_dmat;
 	int			qid;
 	int			queued;
 	int			cur;
@@ -92,13 +93,12 @@ struct iwn_rx_ring {
 	uint32_t		*desc;
 	struct iwn_rx_status	*stat;
 	struct iwn_rx_data	data[IWN_RX_RING_COUNT];
+	bus_dma_tag_t		data_dmat;
 	int			cur;
 };
 
 struct iwn_node {
 	struct	ieee80211_node		ni;	/* must be the first */
-#define	IWN_NODE(_ni)	((struct iwn_node *)(_ni))
-
 	struct	ieee80211_amrr_node	amn;
 	uint16_t			disable_tid;
 	uint8_t				id;
@@ -161,21 +161,24 @@ struct iwn_hal {
 	int		(*load_firmware)(struct iwn_softc *);
 	void		(*read_eeprom)(struct iwn_softc *);
 	int		(*post_alive)(struct iwn_softc *);
-	int		(*apm_init)(struct iwn_softc *);
 	int		(*nic_config)(struct iwn_softc *);
 	void		(*update_sched)(struct iwn_softc *, int, int, uint8_t,
 			    uint16_t);
 	int		(*get_temperature)(struct iwn_softc *);
 	int		(*get_rssi)(struct iwn_softc *, struct iwn_rx_stat *);
-	int		(*set_txpower)(struct iwn_softc *,
-			    struct ieee80211_channel *, int);
+	int		(*set_txpower)(struct iwn_softc *, int);
 	int		(*init_gains)(struct iwn_softc *);
 	int		(*set_gains)(struct iwn_softc *);
 	int		(*add_node)(struct iwn_softc *, struct iwn_node_info *,
 			    int);
 	void		(*tx_done)(struct iwn_softc *, struct iwn_rx_desc *,
 			    struct iwn_rx_data *);
-	const struct	iwn_sensitivity_limits *limits;
+#if 0	/* HT */
+	void		(*ampdu_tx_start)(struct iwn_softc *,
+			    struct ieee80211_node *, uint8_t, uint16_t);
+	void		(*ampdu_tx_stop)(struct iwn_softc *, uint8_t,
+			    uint16_t);
+#endif
 	int		ntxqs;
 	int		ndmachnls;
 	uint8_t		broadcast_id;
@@ -202,7 +205,7 @@ struct iwn_softc {
 	struct ifnet		*sc_ifp;
 	int			sc_debug;
 
-	/* locks */
+	/* Locks */
 	struct mtx		sc_mtx;
 
 	/* Bus */
@@ -215,11 +218,15 @@ struct iwn_softc {
 	u_int			sc_flags;
 #define IWN_FLAG_HAS_5GHZ	(1 << 0)
 #define IWN_FLAG_HAS_OTPROM	(1 << 1)
-#define IWN_FLAG_FIRST_BOOT	(1 << 2)
+#define IWN_FLAG_CALIB_DONE	(1 << 2)
+#define IWN_FLAG_USE_ICT	(1 << 3)
+#define IWN_FLAG_INTERNAL_PA	(1 << 4)
 
 	uint8_t 		hw_type;
 	const struct iwn_hal	*sc_hal;
 	const char		*fwname;
+	const struct iwn_sensitivity_limits
+				*limits;
 
 	/* TX scheduler rings. */
 	struct iwn_dma_info	sched_dma;
@@ -235,6 +242,11 @@ struct iwn_softc {
 	/* Firmware DMA transfer. */
 	struct iwn_dma_info	fw_dma;
 
+	/* ICT table. */
+	struct iwn_dma_info	ict_dma;
+	uint32_t		*ict;
+	int			ict_cur;
+
 	/* TX/RX rings. */
 	struct iwn_tx_ring	txq[IWN5000_NTXQUEUES];
 	struct iwn_rx_ring	rxq;
@@ -249,7 +261,7 @@ struct iwn_softc {
 	struct task             sc_reinit_task;
 	struct task		sc_radioon_task;
 	struct task		sc_radiooff_task;
-	
+
 	int			calib_cnt;
 	struct iwn_calib_state	calib;
 
@@ -266,8 +278,10 @@ struct iwn_softc {
 	int			noise;
 	uint32_t		qfullmsk;
 
+	uint32_t		prom_base;
 	struct iwn4965_eeprom_band
 				bands[IWN_NBANDS];
+	struct iwn_eeprom_chan	eeprom_channels[IWN_NBANDS][IWN_MAX_CHAN_PER_BAND];
 	uint16_t		rfcfg;
 	char			eeprom_domain[4];
 	uint32_t		eeprom_crystal;
@@ -275,20 +289,21 @@ struct iwn_softc {
 	int8_t			maxpwr2GHz;
 	int8_t			maxpwr5GHz;
 	int8_t			maxpwr[IEEE80211_CHAN_MAX];
+	int8_t			enh_maxpwr[35];
 
-	uint32_t		critical_temp;
+	int32_t			temp_off;
+	uint32_t		int_mask;
 	uint8_t			ntxchains;
 	uint8_t			nrxchains;
-	uint8_t			txantmsk;
-	uint8_t			rxantmsk;
-	uint8_t			antmsk;
+	uint8_t			txchainmask;
+	uint8_t			rxchainmask;
+	uint8_t			chainmask;
 
 	struct callout		sc_timer_to;
 	int			sc_tx_timer;
 
 	struct iwn_rx_radiotap_header sc_rxtap;
 	struct iwn_tx_radiotap_header sc_txtap;
-	const struct ieee80211_channel *sc_curchan;
 };
 
 #define IWN_LOCK_INIT(_sc) \
diff --git a/sys/dev/ixgb/if_ixgb.c b/sys/dev/ixgb/if_ixgb.c
index 21d0bf02aa0..990f791dfbd 100644
--- a/sys/dev/ixgb/if_ixgb.c
+++ b/sys/dev/ixgb/if_ixgb.c
@@ -97,7 +97,7 @@ static void     ixgb_intr(void *);
 static void     ixgb_start(struct ifnet *);
 static void     ixgb_start_locked(struct ifnet *);
 static int      ixgb_ioctl(struct ifnet *, IOCTL_CMD_TYPE, caddr_t);
-static void     ixgb_watchdog(struct ifnet *);
+static void     ixgb_watchdog(struct adapter *);
 static void     ixgb_init(void *);
 static void     ixgb_init_locked(struct adapter *);
 static void     ixgb_stop(void *);
@@ -274,7 +274,7 @@ ixgb_attach(device_t dev)
 			(void *)adapter, 0,
 			ixgb_sysctl_stats, "I", "Statistics");
 
-	callout_init(&adapter->timer, CALLOUT_MPSAFE);
+	callout_init_mtx(&adapter->timer, &adapter->mtx, 0);
 
 	/* Determine hardware revision */
 	ixgb_identify_hardware(adapter);
@@ -382,13 +382,14 @@ ixgb_detach(device_t dev)
 	IXGB_UNLOCK(adapter);
 
 #if __FreeBSD_version < 500000
-	ether_ifdetach(adapter->ifp, ETHER_BPF_SUPPORTED);
+	ether_ifdetach(ifp, ETHER_BPF_SUPPORTED);
 #else
-	ether_ifdetach(adapter->ifp);
+	ether_ifdetach(ifp);
 #endif
+	callout_drain(&adapter->timer);
 	ixgb_free_pci_resources(adapter);
 #if __FreeBSD_version >= 500000
-	if_free(adapter->ifp);
+	if_free(ifp);
 #endif
 
 	/* Free Transmit Descriptor ring */
@@ -409,9 +410,6 @@ ixgb_detach(device_t dev)
 	if (adapter->prev != NULL)
 		adapter->prev->next = adapter->next;
 
-	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
-	ifp->if_timer = 0;
-
 	IXGB_LOCK_DESTROY(adapter);
 	return (0);
 }
@@ -473,7 +471,7 @@ ixgb_start_locked(struct ifnet * ifp)
 		ETHER_BPF_MTAP(ifp, m_head);
 #endif
 		/* Set timeout in case hardware has problems transmitting */
-		ifp->if_timer = IXGB_TX_TIMEOUT;
+		adapter->tx_timer = IXGB_TX_TIMEOUT;
 
 	}
 	return;
@@ -610,26 +608,24 @@ out:
  **********************************************************************/
 
 static void
-ixgb_watchdog(struct ifnet * ifp)
+ixgb_watchdog(struct adapter *adapter)
 {
-	struct adapter *adapter;
-	adapter = ifp->if_softc;
+	struct ifnet *ifp;
+
+	ifp = adapter->ifp;
 
 	/*
 	 * If we are in this routine because of pause frames, then don't
 	 * reset the hardware.
 	 */
 	if (IXGB_READ_REG(&adapter->hw, STATUS) & IXGB_STATUS_TXOFF) {
-		ifp->if_timer = IXGB_TX_TIMEOUT;
+		adapter->tx_timer = IXGB_TX_TIMEOUT;
 		return;
 	}
 	if_printf(ifp, "watchdog timeout -- resetting\n");
 
-	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
-
-
 	ixgb_stop(adapter);
-	ixgb_init(adapter);
+	ixgb_init_locked(adapter);
 
 
 	ifp->if_oerrors++;
@@ -713,7 +709,7 @@ ixgb_init_locked(struct adapter *adapter)
 		temp_reg |= IXGB_CTRL0_JFE;
 		IXGB_WRITE_REG(&adapter->hw, CTRL0, temp_reg);
 	}
-	callout_reset(&adapter->timer, 2 * hz, ixgb_local_timer, adapter);
+	callout_reset(&adapter->timer, hz, ixgb_local_timer, adapter);
 	ixgb_clear_hw_cntrs(&adapter->hw);
 #ifdef DEVICE_POLLING
 	/*
@@ -753,11 +749,8 @@ ixgb_poll_locked(struct ifnet * ifp, enum poll_cmd cmd, int count)
 	if (cmd == POLL_AND_CHECK_STATUS) {
 		reg_icr = IXGB_READ_REG(&adapter->hw, ICR);
 		if (reg_icr & (IXGB_INT_RXSEQ | IXGB_INT_LSC)) {
-			callout_stop(&adapter->timer);
 			ixgb_check_for_link(&adapter->hw);
 			ixgb_print_link_status(adapter);
-			callout_reset(&adapter->timer, 2 * hz, ixgb_local_timer,
-			    adapter);
 		}
 	}
 	rx_npkts = ixgb_process_receive_interrupts(adapter, count);
@@ -830,11 +823,8 @@ ixgb_intr(void *arg)
 
 	/* Link status change */
 	if (reg_icr & (IXGB_INT_RXSEQ | IXGB_INT_LSC)) {
-		callout_stop(&adapter->timer);
 		ixgb_check_for_link(&adapter->hw);
 		ixgb_print_link_status(adapter);
-		callout_reset(&adapter->timer, 2 * hz, ixgb_local_timer,
-		    adapter);
 	}
 	while (loop_cnt > 0) {
 		if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
@@ -1123,7 +1113,7 @@ ixgb_local_timer(void *arg)
 	struct adapter *adapter = arg;
 	ifp = adapter->ifp;
 
-	IXGB_LOCK(adapter);
+	IXGB_LOCK_ASSERT(adapter);
 
 	ixgb_check_for_link(&adapter->hw);
 	ixgb_print_link_status(adapter);
@@ -1131,10 +1121,9 @@ ixgb_local_timer(void *arg)
 	if (ixgb_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING) {
 		ixgb_print_hw_stats(adapter);
 	}
-	callout_reset(&adapter->timer, 2 * hz, ixgb_local_timer, adapter);
-
-	IXGB_UNLOCK(adapter);
-	return;
+	if (adapter->tx_timer != 0 && --adapter->tx_timer == 0)
+		ixgb_watchdog(adapter);
+	callout_reset(&adapter->timer, hz, ixgb_local_timer, adapter);
 }
 
 static void
@@ -1183,9 +1172,9 @@ ixgb_stop(void *arg)
 	ixgb_free_transmit_structures(adapter);
 	ixgb_free_receive_structures(adapter);
 
-
 	/* Tell the stack that the interface is no longer active */
 	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
+	adapter->tx_timer = 0;
 
 	return;
 }
@@ -1352,7 +1341,6 @@ ixgb_setup_interface(device_t dev, struct adapter * adapter)
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = ixgb_ioctl;
 	ifp->if_start = ixgb_start;
-	ifp->if_watchdog = ixgb_watchdog;
 	ifp->if_snd.ifq_maxlen = adapter->num_tx_desc - 1;
 
 #if __FreeBSD_version < 500000
@@ -1755,9 +1743,9 @@ ixgb_clean_transmit_interrupts(struct adapter * adapter)
 
 		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 		if (num_avail == adapter->num_tx_desc)
-			ifp->if_timer = 0;
+			adapter->tx_timer = 0;
 		else if (num_avail == adapter->num_tx_desc_avail)
-			ifp->if_timer = IXGB_TX_TIMEOUT;
+			adapter->tx_timer = IXGB_TX_TIMEOUT;
 	}
 	adapter->num_tx_desc_avail = num_avail;
 	return;
diff --git a/sys/dev/ixgb/if_ixgb.h b/sys/dev/ixgb/if_ixgb.h
index cef9b55e08c..9e5355a25dd 100644
--- a/sys/dev/ixgb/if_ixgb.h
+++ b/sys/dev/ixgb/if_ixgb.h
@@ -284,6 +284,7 @@ struct adapter {
 	struct ifmedia  media;
 	struct callout 	timer;
 	int             io_rid;
+	int		tx_timer;
 	struct mtx	mtx;
 
 	/* Info about the board itself */
diff --git a/sys/dev/ixgbe/ixgbe.c b/sys/dev/ixgbe/ixgbe.c
index d994529ea46..10a0e04df48 100644
--- a/sys/dev/ixgbe/ixgbe.c
+++ b/sys/dev/ixgbe/ixgbe.c
@@ -46,7 +46,7 @@ int             ixgbe_display_debug_stats = 0;
 /*********************************************************************
  *  Driver version
  *********************************************************************/
-char ixgbe_driver_version[] = "1.8.9";
+char ixgbe_driver_version[] = "2.0.7";
 
 /*********************************************************************
  *  PCI Device ID Table
@@ -64,16 +64,19 @@ static ixgbe_vendor_info_t ixgbe_vendor_info_array[] =
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598AF_SINGLE_PORT, 0, 0, 0},
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598EB_CX4, 0, 0, 0},
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598AT, 0, 0, 0},
+	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598AT2, 0, 0, 0},
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598, 0, 0, 0},
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598_DA_DUAL_PORT, 0, 0, 0},
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598_CX4_DUAL_PORT, 0, 0, 0},
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598EB_XF_LR, 0, 0, 0},
-	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598AT, 0, 0, 0},
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM, 0, 0, 0},
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82598EB_SFP_LOM, 0, 0, 0},
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_KX4, 0, 0, 0},
+	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_KX4_MEZZ, 0, 0, 0},
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_SFP, 0, 0, 0},
 	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_XAUI_LOM, 0, 0, 0},
+	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_CX4, 0, 0, 0},
+	{IXGBE_INTEL_VENDOR_ID, IXGBE_DEV_ID_82599_COMBO_BACKPLANE, 0, 0, 0},
 	/* required last entry */
 	{0, 0, 0, 0, 0}
 };
@@ -102,7 +105,6 @@ static int	ixgbe_mq_start_locked(struct ifnet *,
 static void	ixgbe_qflush(struct ifnet *);
 #endif
 static int      ixgbe_ioctl(struct ifnet *, u_long, caddr_t);
-static void     ixgbe_watchdog(struct adapter *);
 static void     ixgbe_init(void *);
 static void     ixgbe_init_locked(struct adapter *);
 static void     ixgbe_stop(void *);
@@ -116,8 +118,8 @@ static int	ixgbe_allocate_queues(struct adapter *);
 static int	ixgbe_setup_msix(struct adapter *);
 static void	ixgbe_free_pci_resources(struct adapter *);
 static void     ixgbe_local_timer(void *);
-static int      ixgbe_hardware_init(struct adapter *);
 static void     ixgbe_setup_interface(device_t, struct adapter *);
+static void     ixgbe_config_link(struct adapter *);
 
 static int      ixgbe_allocate_transmit_buffers(struct tx_ring *);
 static int	ixgbe_setup_transmit_structures(struct adapter *);
@@ -132,6 +134,7 @@ static int	ixgbe_setup_receive_ring(struct rx_ring *);
 static void     ixgbe_initialize_receive_units(struct adapter *);
 static void     ixgbe_free_receive_structures(struct adapter *);
 static void     ixgbe_free_receive_buffers(struct rx_ring *);
+static void	ixgbe_setup_hw_rsc(struct rx_ring *);
 
 static void	ixgbe_init_moderation(struct adapter *);
 static void     ixgbe_enable_intr(struct adapter *);
@@ -146,7 +149,7 @@ static void     ixgbe_set_multi(struct adapter *);
 static void     ixgbe_print_hw_stats(struct adapter *);
 static void	ixgbe_print_debug_info(struct adapter *);
 static void     ixgbe_update_link_status(struct adapter *);
-static int	ixgbe_get_buf(struct rx_ring *, int, u8);
+static int	ixgbe_get_buf(struct rx_ring *, int, int);
 static int      ixgbe_xmit(struct tx_ring *, struct mbuf **);
 static int      ixgbe_sysctl_stats(SYSCTL_HANDLER_ARGS);
 static int	ixgbe_sysctl_debug(SYSCTL_HANDLER_ARGS);
@@ -186,6 +189,10 @@ static void	ixgbe_handle_link(void *, int);
 static void	ixgbe_handle_msf(void *, int);
 static void	ixgbe_handle_mod(void *, int);
 
+#ifdef IXGBE_FDIR
+static void	ixgbe_atr(struct tx_ring *, struct mbuf *);
+static void	ixgbe_reinit_fdir(void *, int);
+#endif
 
 /*********************************************************************
  *  FreeBSD Device Interface Entry Points
@@ -238,6 +245,15 @@ TUNABLE_INT("hw.ixgbe.rx_process_limit", &ixgbe_rx_process_limit);
 static int ixgbe_flow_control = ixgbe_fc_full;
 TUNABLE_INT("hw.ixgbe.flow_control", &ixgbe_flow_control);
 
+/*
+** Smart speed setting, default to on
+** this only works as a compile option
+** right now as its during attach, set
+** this to 'ixgbe_smart_speed_off' to
+** disable.
+*/
+static int ixgbe_smart_speed = ixgbe_smart_speed_on;
+
 /*
  * MSIX should be the default for best performance,
  * but this allows it to be forced off for testing.
@@ -271,7 +287,7 @@ TUNABLE_INT("hw.ixgbe.txd", &ixgbe_txd);
 static int ixgbe_rxd = DEFAULT_RXD;
 TUNABLE_INT("hw.ixgbe.rxd", &ixgbe_rxd);
 
-/* Total number of Interfaces - need for config sanity check */
+/* Keep running tab on them for sanity check */
 static int ixgbe_total_ports;
 
 /*
@@ -288,6 +304,27 @@ static u32 ixgbe_shadow_vfta[IXGBE_VFTA_SIZE];
 */
 static int ixgbe_num_segs = IXGBE_82598_SCATTER;
 
+#ifdef IXGBE_FDIR
+/*
+** For Flow Director: this is the
+** number of TX packets we sample
+** for the filter pool, this means
+** every 20th packet will be probed.
+**
+** This feature can be disabled by 
+** setting this to 0.
+*/
+static int atr_sample_rate = 20;
+/* 
+** Flow Director actually 'steals'
+** part of the packet buffer as its
+** filter pool, this variable controls
+** how much it uses:
+**  0 = 64K, 1 = 128K, 2 = 256K
+*/
+static int fdir_pballoc = 1;
+#endif
+
 /*********************************************************************
  *  Device identification routine
  *
@@ -356,7 +393,7 @@ ixgbe_attach(device_t dev)
 	struct adapter *adapter;
 	struct ixgbe_hw *hw;
 	int             error = 0;
-	u16		pci_device_id;
+	u16		pci_device_id, csum;
 	u32		ctrl_ext;
 
 	INIT_DEBUGOUT("ixgbe_attach: begin");
@@ -376,10 +413,14 @@ ixgbe_attach(device_t dev)
 		case IXGBE_DEV_ID_82598EB_CX4 :
 			adapter->optics = IFM_10G_CX4;
 			break;
+		case IXGBE_DEV_ID_82598 :
 		case IXGBE_DEV_ID_82598AF_DUAL_PORT :
 		case IXGBE_DEV_ID_82598_DA_DUAL_PORT :
 		case IXGBE_DEV_ID_82598AF_SINGLE_PORT :
+		case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM :
+		case IXGBE_DEV_ID_82598EB_SFP_LOM :
 		case IXGBE_DEV_ID_82598AT :
+		case IXGBE_DEV_ID_82598AT2 :
 			adapter->optics = IFM_10G_SR;
 			break;
 		case IXGBE_DEV_ID_82598EB_XF_LR :
@@ -390,10 +431,13 @@ ixgbe_attach(device_t dev)
 			ixgbe_num_segs = IXGBE_82599_SCATTER;
 			break;
 		case IXGBE_DEV_ID_82599_KX4 :
+		case IXGBE_DEV_ID_82599_KX4_MEZZ:
+		case IXGBE_DEV_ID_82599_CX4 :
 			adapter->optics = IFM_10G_CX4;
 			ixgbe_num_segs = IXGBE_82599_SCATTER;
 			break;
 		case IXGBE_DEV_ID_82599_XAUI_LOM :
+		case IXGBE_DEV_ID_82599_COMBO_BACKPLANE :
 			ixgbe_num_segs = IXGBE_82599_SCATTER;
 		default:
 			break;
@@ -504,13 +548,40 @@ ixgbe_attach(device_t dev)
 		goto err_late;
 	}
 
-	/* Initialize the hardware */
-	if (ixgbe_hardware_init(adapter)) {
-		device_printf(dev,"Unable to initialize the hardware\n");
+	/* Make sure we have a good EEPROM before we read from it */
+	if (ixgbe_validate_eeprom_checksum(&adapter->hw, &csum) < 0) {
+		device_printf(dev,"The EEPROM Checksum Is Not Valid\n");
 		error = EIO;
 		goto err_late;
 	}
 
+	/* Pick up the smart speed setting */
+	if (hw->mac.type == ixgbe_mac_82599EB)
+		hw->phy.smart_speed = ixgbe_smart_speed;
+
+	/* Get Hardware Flow Control setting */
+	hw->fc.requested_mode = ixgbe_fc_full;
+	hw->fc.pause_time = IXGBE_FC_PAUSE;
+	hw->fc.low_water = IXGBE_FC_LO;
+	hw->fc.high_water = IXGBE_FC_HI;
+	hw->fc.send_xon = TRUE;
+
+	error = ixgbe_init_hw(hw);
+	if (error == IXGBE_ERR_EEPROM_VERSION) {
+		device_printf(dev, "This device is a pre-production adapter/"
+		    "LOM.  Please be aware there may be issues associated "
+		    "with your hardware.\n If you are experiencing problems "
+		    "please contact your Intel or hardware representative "
+		    "who provided you with this hardware.\n");
+	} else if (error == IXGBE_ERR_SFP_NOT_SUPPORTED)
+		device_printf(dev,"Unsupported SFP+ Module\n");
+
+	if (error) {
+		error = EIO;
+		device_printf(dev,"Hardware Initialization Failure\n");
+		goto err_late;
+	}
+
 	if ((adapter->msix > 1) && (ixgbe_enable_msix))
 		error = ixgbe_allocate_msix(adapter); 
 	else
@@ -529,10 +600,10 @@ ixgbe_attach(device_t dev)
 	adapter->cycles.mask = (u64)-1;
 	adapter->cycles.mult = 1;
 	adapter->cycles.shift = IXGBE_TSYNC_SHIFT;
-	IXGBE_WRITE_REG(&adapter->hw, IXGBE_TIMINCA, (1<<24) |
+	IXGBE_WRITE_REG(hw, IXGBE_TIMINCA, (1<<24) |
 	    IXGBE_TSYNC_CYCLE_TIME * IXGBE_TSYNC_SHIFT);
-	IXGBE_WRITE_REG(&adapter->hw, IXGBE_SYSTIML, 0x00000000);
-	IXGBE_WRITE_REG(&adapter->hw, IXGBE_SYSTIMH, 0xFF800000);
+	IXGBE_WRITE_REG(hw, IXGBE_SYSTIML, 0x00000000);
+	IXGBE_WRITE_REG(hw, IXGBE_SYSTIMH, 0xFF800000);
 
         // JFV - this is not complete yet
 #endif
@@ -551,6 +622,24 @@ ixgbe_attach(device_t dev)
 	adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig,
 	    ixgbe_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST);
 
+        /* Print PCIE bus type/speed/width info */
+	ixgbe_get_bus_info(hw);
+	device_printf(dev,"PCI Express Bus: Speed %s %s\n",
+	    ((hw->bus.speed == ixgbe_bus_speed_5000) ? "5.0Gb/s":
+	    (hw->bus.speed == ixgbe_bus_speed_2500) ? "2.5Gb/s":"Unknown"),
+	    (hw->bus.width == ixgbe_bus_width_pcie_x8) ? "Width x8" :
+	    (hw->bus.width == ixgbe_bus_width_pcie_x4) ? "Width x4" :
+	    (hw->bus.width == ixgbe_bus_width_pcie_x1) ? "Width x1" :
+	    ("Unknown"));
+
+	if (hw->bus.width <= ixgbe_bus_width_pcie_x4) {
+		device_printf(dev, "PCI-Express bandwidth available"
+		    " for this card\n     is not sufficient for"
+		    " optimal performance.\n");
+		device_printf(dev, "For optimal performance a x8 "
+		    "PCI-Express slot is required.\n");
+        }
+
 	/* let hardware know driver is loaded */
 	ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT);
 	ctrl_ext |= IXGBE_CTRL_EXT_DRV_LOAD;
@@ -616,6 +705,9 @@ ixgbe_detach(device_t dev)
 		taskqueue_drain(adapter->tq, &adapter->link_task);
 		taskqueue_drain(adapter->tq, &adapter->mod_task);
 		taskqueue_drain(adapter->tq, &adapter->msf_task);
+#ifdef IXGBE_FDIR
+		taskqueue_drain(adapter->tq, &adapter->fdir_task);
+#endif
 		taskqueue_free(adapter->tq);
 	}
 
@@ -700,8 +792,8 @@ ixgbe_start_locked(struct tx_ring *txr, struct ifnet * ifp)
 		/* Send a copy of the frame to the BPF listener */
 		ETHER_BPF_MTAP(ifp, m_head);
 
-		/* Set timeout in case hardware has problems transmitting */
-		txr->watchdog_timer = IXGBE_TX_TIMEOUT;
+		/* Set watchdog on */
+		txr->watchdog_check = TRUE;
 
 	}
 	return;
@@ -770,16 +862,17 @@ ixgbe_mq_start_locked(struct ifnet *ifp, struct tx_ring *txr, struct mbuf *m)
 
 	/* If nothing queued go right to xmit */
 	if (drbr_empty(ifp, txr->br)) {
-		if (ixgbe_xmit(txr, &m)) {
-			if (m && (err = drbr_enqueue(ifp, txr->br, m)) != 0)
-                                return (err);
+		if ((err = ixgbe_xmit(txr, &m)) != 0) {
+			if (m != NULL)
+				err = drbr_enqueue(ifp, txr->br, m);
+			return (err);
 		} else {
 			/* Success, update stats */
 			drbr_stats_update(ifp, m->m_pkthdr.len, m->m_flags);
 			/* Send a copy of the frame to the BPF listener */
 			ETHER_BPF_MTAP(ifp, m);
 			/* Set the watchdog */
-			txr->watchdog_timer = IXGBE_TX_TIMEOUT;
+			txr->watchdog_check = TRUE;
                 }
 
         } else if ((err = drbr_enqueue(ifp, txr->br, m)) != 0)
@@ -796,11 +889,15 @@ process:
 		next = drbr_dequeue(ifp, txr->br);
 		if (next == NULL)
 			break;
-		if (ixgbe_xmit(txr, &next))
+		if ((err = ixgbe_xmit(txr, &next)) != 0) {
+			if (next != NULL)
+				err = drbr_enqueue(ifp, txr->br, next);
 			break;
+		}
+		drbr_stats_update(ifp, next->m_pkthdr.len, next->m_flags);
 		ETHER_BPF_MTAP(ifp, next);
 		/* Set the watchdog */
-		txr->watchdog_timer = IXGBE_TX_TIMEOUT;
+		txr->watchdog_check = TRUE;
 	}
 		
 	if (txr->tx_avail <= IXGBE_TX_OP_THRESHOLD)
@@ -843,27 +940,10 @@ ixgbe_ioctl(struct ifnet * ifp, u_long command, caddr_t data)
 {
 	struct adapter *adapter = ifp->if_softc;
 	struct ifreq   *ifr = (struct ifreq *) data;
-#ifdef INET
-	struct ifaddr   *ifa = (struct ifaddr *) data;
-#endif
 	int             error = 0;
 
 	switch (command) {
-	case SIOCSIFADDR:
-#ifdef INET
-		IOCTL_DEBUGOUT("ioctl: SIOCxIFADDR (Get/Set Interface Addr)");
-		if (ifa->ifa_addr->sa_family == AF_INET) {
-			ifp->if_flags |= IFF_UP;
-			if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
-				IXGBE_CORE_LOCK(adapter);
-				ixgbe_init_locked(adapter);
-				IXGBE_CORE_UNLOCK(adapter);
-			}
-			arp_ifinit(ifp, ifa);
-                } else
-#endif
-			ether_ioctl(ifp, command, data);
-		break;
+
 	case SIOCSIFMTU:
 		IOCTL_DEBUGOUT("ioctl: SIOCSIFMTU (Set Interface MTU)");
 		if (ifr->ifr_mtu > IXGBE_MAX_FRAME_SIZE - ETHER_HDR_LEN) {
@@ -919,7 +999,8 @@ ixgbe_ioctl(struct ifnet * ifp, u_long command, caddr_t data)
 			ifp->if_capenable ^= IFCAP_HWCSUM;
 		if (mask & IFCAP_TSO4)
 			ifp->if_capenable ^= IFCAP_TSO4;
-		if (mask & IFCAP_LRO)
+		/* Only allow changing when using header split */
+		if ((mask & IFCAP_LRO) && (ixgbe_header_split))
 			ifp->if_capenable ^= IFCAP_LRO;
 		if (mask & IFCAP_VLAN_HWTAGGING)
 			ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
@@ -947,84 +1028,6 @@ ixgbe_ioctl(struct ifnet * ifp, u_long command, caddr_t data)
 	return (error);
 }
 
-/*********************************************************************
- *  Watchdog entry point
- *
- *  This routine is called by the local timer
- *  to detect hardware hangs .
- *
- **********************************************************************/
-
-static void
-ixgbe_watchdog(struct adapter *adapter)
-{
-	device_t 	dev = adapter->dev;
-	struct tx_ring *txr = adapter->tx_rings;
-	struct ixgbe_hw *hw = &adapter->hw;
-	bool		tx_hang = FALSE;
-
-	IXGBE_CORE_LOCK_ASSERT(adapter);
-
-        /*
-         * The timer is set to 5 every time ixgbe_start() queues a packet.
-         * Then ixgbe_txeof() keeps resetting to 5 as long as it cleans at
-         * least one descriptor.
-         * Finally, anytime all descriptors are clean the timer is
-         * set to 0.
-         */
-	for (int i = 0; i < adapter->num_queues; i++, txr++) {
-		u32 head, tail;
-
-		IXGBE_TX_LOCK(txr);
-        	if (txr->watchdog_timer == 0 || --txr->watchdog_timer) {
-			IXGBE_TX_UNLOCK(txr);
-                	continue;
-		} else {
-			head = IXGBE_READ_REG(hw, IXGBE_TDH(i));
-			tail = IXGBE_READ_REG(hw, IXGBE_TDT(i));
-			if (head == tail) { /* last minute check */
-				IXGBE_TX_UNLOCK(txr);
-				continue;
-			}
-			/* Well, seems something is really hung */
-			tx_hang = TRUE;
-			IXGBE_TX_UNLOCK(txr);
-			break;
-		}
-	}
-	if (tx_hang == FALSE)
-		return;
-
-	/*
-	 * If we are in this routine because of pause frames, then don't
-	 * reset the hardware.
-	 */
-	if (IXGBE_READ_REG(hw, IXGBE_TFCS) & IXGBE_TFCS_TXOFF) {
-		txr = adapter->tx_rings;	/* reset pointer */
-		for (int i = 0; i < adapter->num_queues; i++, txr++) {
-			IXGBE_TX_LOCK(txr);
-			txr->watchdog_timer = IXGBE_TX_TIMEOUT;
-			IXGBE_TX_UNLOCK(txr);
-		}
-		return;
-	}
-
-
-	device_printf(adapter->dev, "Watchdog timeout -- resetting\n");
-	for (int i = 0; i < adapter->num_queues; i++, txr++) {
-		device_printf(dev,"Queue(%d) tdh = %d, hw tdt = %d\n", i,
-		    IXGBE_READ_REG(hw, IXGBE_TDH(i)),
-		    IXGBE_READ_REG(hw, IXGBE_TDT(i)));
-		device_printf(dev,"TX(%d) desc avail = %d,"
-		    "Next TX to Clean = %d\n",
-		    i, txr->tx_avail, txr->next_tx_to_clean);
-	}
-	adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
-	adapter->watchdog_events++;
-
-	ixgbe_init_locked(adapter);
-}
-
 /*********************************************************************
  *  Init entry point
  *
@@ -1052,19 +1055,14 @@ ixgbe_init_locked(struct adapter *adapter)
 	hw = &adapter->hw;
 	mtx_assert(&adapter->core_mtx, MA_OWNED);
 
-	ixgbe_stop(adapter);
-
 	/* Get the latest mac address, User can use a LAA */
-	bcopy(IF_LLADDR(adapter->ifp), adapter->hw.mac.addr,
+	bcopy(IF_LLADDR(adapter->ifp), hw->mac.addr,
 	      IXGBE_ETH_LENGTH_OF_ADDRESS);
-	ixgbe_set_rar(&adapter->hw, 0, adapter->hw.mac.addr, 0, 1);
-	adapter->hw.addr_ctrl.rar_used_count = 1;
+	ixgbe_set_rar(hw, 0, hw->mac.addr, 0, 1);
+	hw->addr_ctrl.rar_used_count = 1;
 
-	/* Initialize the hardware */
-	if (ixgbe_hardware_init(adapter)) {
-		device_printf(dev, "Unable to initialize the hardware\n");
-		return;
-	}
+	/* Do a warm reset */
+	ixgbe_reset_hw(hw);
 
 	/* Prepare transmit descriptors and buffers */
 	if (ixgbe_setup_transmit_structures(adapter)) {
@@ -1102,7 +1100,7 @@ ixgbe_init_locked(struct adapter *adapter)
 
 	gpie = IXGBE_READ_REG(&adapter->hw, IXGBE_GPIE);
 
-	if (adapter->hw.mac.type == ixgbe_mac_82599EB) {
+	if (hw->mac.type == ixgbe_mac_82599EB) {
 		gpie |= IXGBE_SDP1_GPIEN;
 		gpie |= IXGBE_SDP2_GPIEN;
 	}
@@ -1117,7 +1115,7 @@ ixgbe_init_locked(struct adapter *adapter)
 		gpie |= IXGBE_GPIE_EIAME | IXGBE_GPIE_PBA_SUPPORT |
 		    IXGBE_GPIE_OCD;
 	}
-	IXGBE_WRITE_REG(&adapter->hw, IXGBE_GPIE, gpie);
+	IXGBE_WRITE_REG(hw, IXGBE_GPIE, gpie);
 
 	/* Set the various hardware offload abilities */
 	ifp->if_hwassist = 0;
@@ -1128,28 +1126,35 @@ ixgbe_init_locked(struct adapter *adapter)
 
 	/* Set MTU size */
 	if (ifp->if_mtu > ETHERMTU) {
-		mhadd = IXGBE_READ_REG(&adapter->hw, IXGBE_MHADD);
+		mhadd = IXGBE_READ_REG(hw, IXGBE_MHADD);
 		mhadd &= ~IXGBE_MHADD_MFS_MASK;
 		mhadd |= adapter->max_frame_size << IXGBE_MHADD_MFS_SHIFT;
-		IXGBE_WRITE_REG(&adapter->hw, IXGBE_MHADD, mhadd);
+		IXGBE_WRITE_REG(hw, IXGBE_MHADD, mhadd);
 	}
 	
 	/* Now enable all the queues */
 
 	for (int i = 0; i < adapter->num_queues; i++) {
-		txdctl = IXGBE_READ_REG(&adapter->hw, IXGBE_TXDCTL(i));
+		txdctl = IXGBE_READ_REG(hw, IXGBE_TXDCTL(i));
 		txdctl |= IXGBE_TXDCTL_ENABLE;
 		/* Set WTHRESH to 8, burst writeback */
 		txdctl |= (8 << 16);
-		IXGBE_WRITE_REG(&adapter->hw, IXGBE_TXDCTL(i), txdctl);
+		IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(i), txdctl);
 	}
 
 	for (int i = 0; i < adapter->num_queues; i++) {
-		rxdctl = IXGBE_READ_REG(&adapter->hw, IXGBE_RXDCTL(i));
-		/* PTHRESH set to 32 */
-		rxdctl |= 0x0020;
+		rxdctl = IXGBE_READ_REG(hw, IXGBE_RXDCTL(i));
+		if (hw->mac.type == ixgbe_mac_82598EB) {
+			/*
+			** PTHRESH = 21
+			** HTHRESH = 4
+			** WTHRESH = 8
+			*/
+			rxdctl &= ~0x3FFFFF;
+			rxdctl |= 0x080420;
+		}
 		rxdctl |= IXGBE_RXDCTL_ENABLE;
-		IXGBE_WRITE_REG(&adapter->hw, IXGBE_RXDCTL(i), rxdctl);
+		IXGBE_WRITE_REG(hw, IXGBE_RXDCTL(i), rxdctl);
 		for (k = 0; k < 10; k++) {
 			if (IXGBE_READ_REG(hw, IXGBE_RXDCTL(i)) &
 			    IXGBE_RXDCTL_ENABLE)
@@ -1166,7 +1171,7 @@ ixgbe_init_locked(struct adapter *adapter)
 
 	/* Enable Receive engine */
 	rxctrl = IXGBE_READ_REG(hw, IXGBE_RXCTRL);
-	if (adapter->hw.mac.type == ixgbe_mac_82598EB)
+	if (hw->mac.type == ixgbe_mac_82598EB)
 		rxctrl |= IXGBE_RXCTRL_DMBYPS;
 	rxctrl |= IXGBE_RXCTRL_RXEN;
 	IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, rxctrl);
@@ -1181,7 +1186,11 @@ ixgbe_init_locked(struct adapter *adapter)
                 ixgbe_set_ivar(adapter, 0, 0, 1);
 	}
 
-	ixgbe_enable_intr(adapter);
+#ifdef IXGBE_FDIR
+	/* Init Flow director */
+	if (adapter->hw.mac.type == ixgbe_mac_82599EB)
+		ixgbe_init_fdir_signature_82599(&adapter->hw, fdir_pballoc);
+#endif
 
 	/*
 	** Check on any SFP devices that
@@ -1194,14 +1203,12 @@ ixgbe_init_locked(struct adapter *adapter)
 		ixgbe_detach(dev);
 		return;
         }
-	if (ixgbe_is_sfp(hw)) { 
-		if (hw->phy.multispeed_fiber) {
-			hw->mac.ops.setup_sfp(hw);
-			taskqueue_enqueue(adapter->tq, &adapter->msf_task);
-		} else
-			taskqueue_enqueue(adapter->tq, &adapter->mod_task);
-	} else
-		taskqueue_enqueue(adapter->tq, &adapter->link_task);
+
+	/* Config/Enable Link */
+	ixgbe_config_link(adapter);
+
+	/* And now turn on interrupts */
+	ixgbe_enable_intr(adapter);
 
 	/* Now inform the stack we're ready */
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
@@ -1269,7 +1276,7 @@ ixgbe_disable_queue(struct adapter *adapter, u32 vector)
 }
 
 static inline void
-ixgbe_rearm_rx_queues(struct adapter *adapter, u64 queues)
+ixgbe_rearm_queues(struct adapter *adapter, u64 queues)
 {
 	u32 mask;
 
@@ -1464,11 +1471,25 @@ ixgbe_msix_link(void *arg)
 		taskqueue_enqueue(adapter->tq, &adapter->link_task);
 
 	if (adapter->hw.mac.type == ixgbe_mac_82599EB) {
+#ifdef IXGBE_FDIR
+		if (reg_eicr & IXGBE_EICR_FLOW_DIR) {
+			/* This is probably overkill :) */
+			if (!atomic_cmpset_int(&adapter->fdir_reinit, 0, 1))
+				return;
+                	/* Clear the interrupt */
+			IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_FLOW_DIR);
+			/* Turn off the interface */
+			adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+			taskqueue_enqueue(adapter->tq, &adapter->fdir_task);
+		} else
+#endif
 		if (reg_eicr & IXGBE_EICR_ECC) {
                 	device_printf(adapter->dev, "\nCRITICAL: ECC ERROR!! "
 			    "Please Reboot!!\n");
 			IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_ECC);
-		} else if (reg_eicr & IXGBE_EICR_GPI_SDP1) {
+		} else
+
+		if (reg_eicr & IXGBE_EICR_GPI_SDP1) {
                 	/* Clear the interrupt */
                 	IXGBE_WRITE_REG(hw, IXGBE_EICR, IXGBE_EICR_GPI_SDP1);
 			taskqueue_enqueue(adapter->tq, &adapter->msf_task);
@@ -1553,11 +1574,9 @@ ixgbe_init_moderation(struct adapter *adapter)
 	}
 
 	/* TX irq moderation rate is fixed */
-	for (int i = 0; i < adapter->num_queues; i++, txr++) {
+	for (int i = 0; i < adapter->num_queues; i++, txr++)
 		IXGBE_WRITE_REG(&adapter->hw,
 		    IXGBE_EITR(txr->msix), ixgbe_ave_latency);
-		txr->watchdog_timer = FALSE;
-	}
 
 	/* RX moderation will be adapted over time, set default */
 	for (int i = 0; i < adapter->num_queues; i++, rxr++) {
@@ -1633,7 +1652,6 @@ ixgbe_media_change(struct ifnet * ifp)
 
         switch (IFM_SUBTYPE(ifm->ifm_media)) {
         case IFM_AUTO:
-                adapter->hw.mac.autoneg = TRUE;
                 adapter->hw.phy.autoneg_advertised =
 		    IXGBE_LINK_SPEED_1GB_FULL | IXGBE_LINK_SPEED_10GB_FULL;
                 break;
@@ -1690,7 +1708,7 @@ ixgbe_xmit(struct tx_ring *txr, struct mbuf **m_headp)
          * used because it will contain the index of
          * the one we tell the hardware to report back
          */
-        first = txr->next_avail_tx_desc;
+        first = txr->next_avail_desc;
 	txbuf = &txr->tx_buffers[first];
 	txbuf_mapped = txbuf;
 	map = txbuf->map;
@@ -1767,12 +1785,22 @@ ixgbe_xmit(struct tx_ring *txr, struct mbuf **m_headp)
                 cmd_type_len |= IXGBE_ADVTXD_MAC_TSTAMP;
 #endif
 
+#ifdef IXGBE_FDIR
+	/* Do the flow director magic */
+	if ((txr->atr_sample) && (!adapter->fdir_reinit)) {
+		++txr->atr_count;
+		if (txr->atr_count >= atr_sample_rate) {
+			ixgbe_atr(txr, m_head);
+			txr->atr_count = 0;
+		}
+	}
+#endif
         /* Record payload length */
 	if (paylen == 0)
         	olinfo_status |= m_head->m_pkthdr.len <<
 		    IXGBE_ADVTXD_PAYLEN_SHIFT;
 
-	i = txr->next_avail_tx_desc;
+	i = txr->next_avail_desc;
 	for (j = 0; j < nsegs; j++) {
 		bus_size_t seglen;
 		bus_addr_t segaddr;
@@ -1798,7 +1826,7 @@ ixgbe_xmit(struct tx_ring *txr, struct mbuf **m_headp)
 	txd->read.cmd_type_len |=
 	    htole32(IXGBE_TXD_CMD_EOP | IXGBE_TXD_CMD_RS);
 	txr->tx_avail -= nsegs;
-	txr->next_avail_tx_desc = i;
+	txr->next_avail_desc = i;
 
 	txbuf->m_head = m_head;
 	txbuf->map = map;
@@ -1939,7 +1967,7 @@ ixgbe_mc_array_itr(struct ixgbe_hw *hw, u8 **update_ptr, u32 *vmdq)
  *  Timer routine
  *
  *  This routine checks for link status,updates statistics,
- *  and runs the watchdog timer.
+ *  and runs the watchdog check.
  *
  **********************************************************************/
 
@@ -1948,6 +1976,9 @@ ixgbe_local_timer(void *arg)
 {
 	struct adapter *adapter = arg;
 	struct ifnet   *ifp = adapter->ifp;
+	device_t	dev = adapter->dev;
+	struct tx_ring *txr = adapter->tx_rings;
+	bool   tx_hung = FALSE;
 
 	mtx_assert(&adapter->core_mtx, MA_OWNED);
 
@@ -1962,16 +1993,31 @@ ixgbe_local_timer(void *arg)
 		ixgbe_print_hw_stats(adapter);
 	}
 	/*
-	 * Each tick we check the watchdog
-	 * to protect against hardware hangs.
-	 */
-	ixgbe_watchdog(adapter);
-
+	** Check for time since any descriptor was cleaned
+	*/
+        for (int i = 0; i < adapter->num_queues; i++, txr++) {
+		if (txr->watchdog_check == FALSE)
+			continue;
+		if ((ticks - txr->watchdog_time) > IXGBE_WATCHDOG) {
+			tx_hung = TRUE;
+			goto hung;
+		}
+	}
 out:
-	/* Trigger an RX interrupt on all queues */
-        ixgbe_rearm_rx_queues(adapter, adapter->rx_mask);
-
 	callout_reset(&adapter->timer, hz, ixgbe_local_timer, adapter);
+	return;
+
+hung:
+	device_printf(adapter->dev, "Watchdog timeout -- resetting\n");
+	device_printf(dev,"Queue(%d) tdh = %d, hw tdt = %d\n", txr->me,
+	    IXGBE_READ_REG(&adapter->hw, IXGBE_TDH(txr->me)),
+	    IXGBE_READ_REG(&adapter->hw, IXGBE_TDT(txr->me)));
+	device_printf(dev,"TX(%d) desc avail = %d,"
+	    "Next TX to Clean = %d\n",
+	    txr->me, txr->tx_avail, txr->next_to_clean);
+	adapter->ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+	adapter->watchdog_events++;
+	ixgbe_init_locked(adapter);
 }
 
 /*
@@ -2004,7 +2050,7 @@ ixgbe_update_link_status(struct adapter *adapter)
 			adapter->link_active = FALSE;
 			for (int i = 0; i < adapter->num_queues;
 			    i++, txr++)
-				txr->watchdog_timer = FALSE;
+				txr->watchdog_check = FALSE;
 		}
 	}
 
@@ -2113,6 +2159,9 @@ ixgbe_allocate_legacy(struct adapter *adapter)
 	TASK_INIT(&adapter->link_task, 0, ixgbe_handle_link, adapter);
 	TASK_INIT(&adapter->mod_task, 0, ixgbe_handle_mod, adapter);
 	TASK_INIT(&adapter->msf_task, 0, ixgbe_handle_msf, adapter);
+#ifdef IXGBE_FDIR
+	TASK_INIT(&adapter->fdir_task, 0, ixgbe_reinit_fdir, adapter);
+#endif
 	adapter->tq = taskqueue_create_fast("ixgbe_link", M_NOWAIT,
 	    taskqueue_thread_enqueue, &adapter->tq);
 	taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s linkq",
@@ -2242,6 +2291,9 @@ ixgbe_allocate_msix(struct adapter *adapter)
 	TASK_INIT(&adapter->link_task, 0, ixgbe_handle_link, adapter);
 	TASK_INIT(&adapter->mod_task, 0, ixgbe_handle_mod, adapter);
 	TASK_INIT(&adapter->msf_task, 0, ixgbe_handle_msf, adapter);
+#ifdef IXGBE_FDIR
+	TASK_INIT(&adapter->fdir_task, 0, ixgbe_reinit_fdir, adapter);
+#endif
 	adapter->tq = taskqueue_create_fast("ixgbe_link", M_NOWAIT,
 	    taskqueue_thread_enqueue, &adapter->tq);
 	taskqueue_start_threads(&adapter->tq, 1, PI_NET, "%s linkq",
@@ -2430,57 +2482,6 @@ mem:
 	return;
 }
 
-/*********************************************************************
- *
- *  Initialize the hardware to a configuration as specified by the
- *  adapter structure. The controller is reset, the EEPROM is
- *  verified, the MAC address is set, then the shared initialization
- *  routines are called.
- *
- **********************************************************************/
-static int
-ixgbe_hardware_init(struct adapter *adapter)
-{
-	device_t dev = adapter->dev;
-	u32 ret;
-	u16 csum;
-
-	csum = 0;
-	/* Issue a global reset */
-	adapter->hw.adapter_stopped = FALSE;
-	ixgbe_stop_adapter(&adapter->hw);
-
-	/* Make sure we have a good EEPROM before we read from it */
-	if (ixgbe_validate_eeprom_checksum(&adapter->hw, &csum) < 0) {
-		device_printf(dev,"The EEPROM Checksum Is Not Valid\n");
-		return (EIO);
-	}
-
-	/* Get Hardware Flow Control setting */
-	adapter->hw.fc.requested_mode = ixgbe_fc_full;
-	adapter->hw.fc.pause_time = IXGBE_FC_PAUSE;
-	adapter->hw.fc.low_water = IXGBE_FC_LO;
-	adapter->hw.fc.high_water = IXGBE_FC_HI;
-	adapter->hw.fc.send_xon = TRUE;
-
-	ret = ixgbe_init_hw(&adapter->hw);
-	if (ret == IXGBE_ERR_EEPROM_VERSION) {
-		device_printf(dev, "This device is a pre-production adapter/"
-		    "LOM.  Please be aware there may be issues associated "
-		    "with your hardware.\n If you are experiencing problems "
-		    "please contact your Intel or hardware representative "
-		    "who provided you with this hardware.\n");
-	} else if (ret == IXGBE_ERR_SFP_NOT_SUPPORTED) {
-		device_printf(dev,"Unsupported SFP+ Module\n");
-		return (EIO);
-	} else if (ret != 0 ) {
-		device_printf(dev,"Hardware Initialization Failure\n");
-		return (EIO);
-	}
-
-	return (0);
-}
-
 /*********************************************************************
  *
  *  Setup networking device structure and register an interface.
@@ -2489,8 +2490,9 @@ ixgbe_hardware_init(struct adapter *adapter)
 static void
 ixgbe_setup_interface(device_t dev, struct adapter *adapter)
 {
-	struct ifnet   *ifp;
 	struct ixgbe_hw *hw = &adapter->hw;
+	struct ifnet   *ifp;
+
 	INIT_DEBUGOUT("ixgbe_setup_interface: begin");
 
 	ifp = adapter->ifp = if_alloc(IFT_ETHER);
@@ -2522,17 +2524,12 @@ ixgbe_setup_interface(device_t dev, struct adapter *adapter)
 
 	ifp->if_capabilities |= IFCAP_HWCSUM | IFCAP_TSO4 | IFCAP_VLAN_HWCSUM;
 	ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU;
-	ifp->if_capabilities |= IFCAP_JUMBO_MTU | IFCAP_LRO;
+	ifp->if_capabilities |= IFCAP_JUMBO_MTU;
+	if (ixgbe_header_split)
+		ifp->if_capabilities |= IFCAP_LRO;
 
 	ifp->if_capenable = ifp->if_capabilities;
 
-	if (hw->device_id == IXGBE_DEV_ID_82598AT)
-		ixgbe_setup_link_speed(hw, (IXGBE_LINK_SPEED_10GB_FULL |
-		    IXGBE_LINK_SPEED_1GB_FULL), TRUE, TRUE);
-	else
-		ixgbe_setup_link_speed(hw, IXGBE_LINK_SPEED_10GB_FULL,
-		    TRUE, FALSE);
-
 	/*
 	 * Specify the media types supported by this adapter and register
 	 * callbacks to update media and link information
@@ -2549,7 +2546,51 @@ ixgbe_setup_interface(device_t dev, struct adapter *adapter)
 	}
 	ifmedia_add(&adapter->media, IFM_ETHER | IFM_AUTO, 0, NULL);
 	ifmedia_set(&adapter->media, IFM_ETHER | IFM_AUTO);
+	return;
+}
 
+static void
+ixgbe_config_link(struct adapter *adapter)
+{
+	struct ixgbe_hw *hw = &adapter->hw;
+	u32	autoneg, err = 0;
+	bool	sfp, negotiate;
+
+	switch (hw->phy.type) {
+	case ixgbe_phy_sfp_avago:
+	case ixgbe_phy_sfp_ftl:
+	case ixgbe_phy_sfp_intel:
+	case ixgbe_phy_sfp_unknown:
+	case ixgbe_phy_tw_tyco:
+	case ixgbe_phy_tw_unknown:
+                sfp = TRUE;
+	default:
+                sfp = FALSE;
+        }
+
+	if (sfp) { 
+		if (hw->phy.multispeed_fiber) {
+			hw->mac.ops.setup_sfp(hw);
+			taskqueue_enqueue(adapter->tq, &adapter->msf_task);
+		} else
+			taskqueue_enqueue(adapter->tq, &adapter->mod_task);
+	} else {
+		if (hw->mac.ops.check_link)
+			err = ixgbe_check_link(hw, &autoneg,
+			    &adapter->link_up, FALSE);
+		if (err)
+			goto out;
+		autoneg = hw->phy.autoneg_advertised;
+		if ((!autoneg) && (hw->mac.ops.get_link_capabilities))
+                	err  = hw->mac.ops.get_link_capabilities(hw,
+			    &autoneg, &negotiate);
+		if (err)
+			goto out;
+		if (hw->mac.ops.setup_link)
+                	err = hw->mac.ops.setup_link(hw, autoneg,
+			    negotiate, adapter->link_up);
+	}
+out:
 	return;
 }
 
@@ -2833,8 +2874,8 @@ ixgbe_setup_transmit_ring(struct tx_ring *txr)
 	bzero((void *)txr->tx_base,
 	      (sizeof(union ixgbe_adv_tx_desc)) * adapter->num_tx_desc);
 	/* Reset indices */
-	txr->next_avail_tx_desc = 0;
-	txr->next_tx_to_clean = 0;
+	txr->next_avail_desc = 0;
+	txr->next_to_clean = 0;
 
 	/* Free any existing tx buffers. */
         txbuf = txr->tx_buffers;
@@ -2850,6 +2891,12 @@ ixgbe_setup_transmit_ring(struct tx_ring *txr)
 		txbuf->eop_index = -1;
         }
 
+#ifdef IXGBE_FDIR
+	/* Set the rate at which we sample packets */
+	if (adapter->hw.mac.type == ixgbe_mac_82599EB)
+		txr->atr_sample = atr_sample_rate;
+#endif
+
 	/* Set number of descriptors available */
 	txr->tx_avail = adapter->num_tx_desc;
 
@@ -2888,6 +2935,7 @@ ixgbe_initialize_transmit_units(struct adapter *adapter)
 
 	for (int i = 0; i < adapter->num_queues; i++, txr++) {
 		u64	tdba = txr->txdma.dma_paddr;
+		u32	txctrl;
 
 		IXGBE_WRITE_REG(hw, IXGBE_TDBAL(i),
 		       (tdba & 0x00000000ffffffffULL));
@@ -2901,15 +2949,43 @@ ixgbe_initialize_transmit_units(struct adapter *adapter)
 
 		/* Setup Transmit Descriptor Cmd Settings */
 		txr->txd_cmd = IXGBE_TXD_CMD_IFCS;
+		txr->watchdog_check = FALSE;
+
+		/* Disable Head Writeback */
+		switch (hw->mac.type) {
+		case ixgbe_mac_82598EB:
+			txctrl = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL(i));
+			break;
+		case ixgbe_mac_82599EB:
+		default:
+			txctrl = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL_82599(i));
+			break;
+                }
+		txctrl &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
+		switch (hw->mac.type) {
+		case ixgbe_mac_82598EB:
+			IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), txctrl);
+			break;
+		case ixgbe_mac_82599EB:
+		default:
+			IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL_82599(i), txctrl);
+			break;
+		}
 
-		txr->watchdog_timer = 0;
 	}
 
 	if (hw->mac.type == ixgbe_mac_82599EB) {
-		u32 dmatxctl;
+		u32 dmatxctl, rttdcs;
 		dmatxctl = IXGBE_READ_REG(hw, IXGBE_DMATXCTL);
 		dmatxctl |= IXGBE_DMATXCTL_TE;
 		IXGBE_WRITE_REG(hw, IXGBE_DMATXCTL, dmatxctl);
+		/* Disable arbiter to set MTQC */
+		rttdcs = IXGBE_READ_REG(hw, IXGBE_RTTDCS);
+		rttdcs |= IXGBE_RTTDCS_ARBDIS;
+		IXGBE_WRITE_REG(hw, IXGBE_RTTDCS, rttdcs);
+		IXGBE_WRITE_REG(hw, IXGBE_MTQC, IXGBE_MTQC_64Q_1PB);
+		rttdcs &= ~IXGBE_RTTDCS_ARBDIS;
+		IXGBE_WRITE_REG(hw, IXGBE_RTTDCS, rttdcs);
 	}
 
 	return;
@@ -3009,7 +3085,7 @@ ixgbe_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp)
 	u16	etype;
 	u8	ipproto = 0;
 	bool	offload = TRUE;
-	int ctxd = txr->next_avail_tx_desc;
+	int ctxd = txr->next_avail_desc;
 	u16 vtag = 0;
 
 
@@ -3099,7 +3175,7 @@ ixgbe_tx_ctx_setup(struct tx_ring *txr, struct mbuf *mp)
 	/* We've consumed the first desc, adjust counters */
 	if (++ctxd == adapter->num_tx_desc)
 		ctxd = 0;
-	txr->next_avail_tx_desc = ctxd;
+	txr->next_avail_desc = ctxd;
 	--txr->tx_avail;
 
         return (offload);
@@ -3140,7 +3216,7 @@ ixgbe_tso_setup(struct tx_ring *txr, struct mbuf *mp, u32 *paylen)
         if (mp->m_len < ehdrlen + sizeof(struct ip) + sizeof(struct tcphdr))
 		return FALSE;
 
-	ctxd = txr->next_avail_tx_desc;
+	ctxd = txr->next_avail_desc;
 	tx_buffer = &txr->tx_buffers[ctxd];
 	TXD = (struct ixgbe_adv_tx_context_desc *) &txr->tx_base[ctxd];
 
@@ -3188,10 +3264,88 @@ ixgbe_tso_setup(struct tx_ring *txr, struct mbuf *mp, u32 *paylen)
 		ctxd = 0;
 
 	txr->tx_avail--;
-	txr->next_avail_tx_desc = ctxd;
+	txr->next_avail_desc = ctxd;
 	return TRUE;
 }
 
+#ifdef IXGBE_FDIR
+/*
+** This routine parses packet headers so that Flow
+** Director can make a hashed filter table entry 
+** allowing traffic flows to be identified and kept
+** on the same cpu.  This would be a performance
+** hit, but we only do it at IXGBE_FDIR_RATE of
+** packets.
+*/
+static void
+ixgbe_atr(struct tx_ring *txr, struct mbuf *mp)
+{
+	struct adapter			*adapter = txr->adapter;
+	struct ixgbe_atr_input		atr_input;
+	struct ip			*ip;
+	struct tcphdr			*th;
+	struct udphdr			*uh;
+	struct ether_vlan_header	*eh;
+	int  				ehdrlen, ip_hlen;
+	u16 etype, vlan_id, src_port, dst_port, flex_bytes;
+	u32 src_ipv4_addr, dst_ipv4_addr;
+	u8 l4type = 0, ipproto = 0;
+
+	eh = mtod(mp, struct ether_vlan_header *);
+	if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) 
+		ehdrlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
+	else
+		ehdrlen = ETHER_HDR_LEN;
+	etype = ntohs(eh->evl_proto);
+
+	/* Only handling IPv4 */
+	if (etype != ETHERTYPE_IP)
+		return;
+
+	ip = (struct ip *)(mp->m_data + ehdrlen);
+	ipproto = ip->ip_p;
+	ip_hlen = ip->ip_hl << 2;
+	src_port = dst_port = 0;
+
+	/* check if we're UDP or TCP */
+	switch (ipproto) {
+	case IPPROTO_TCP:
+		th = (struct tcphdr *)((caddr_t)ip + ip_hlen);
+		src_port = th->th_sport;
+		dst_port = th->th_dport;
+		l4type |= IXGBE_ATR_L4TYPE_TCP;
+		break;
+	case IPPROTO_UDP:
+		uh = (struct udphdr *)((caddr_t)ip + ip_hlen);
+		src_port = uh->uh_sport;
+		dst_port = uh->uh_dport;
+		l4type |= IXGBE_ATR_L4TYPE_UDP;
+		break;
+	default:
+		return;
+	}
+
+	memset(&atr_input, 0, sizeof(struct ixgbe_atr_input));
+
+	vlan_id = htole16(mp->m_pkthdr.ether_vtag);
+	src_ipv4_addr = ip->ip_src.s_addr;
+	dst_ipv4_addr = ip->ip_dst.s_addr;
+	flex_bytes = etype;
+
+	ixgbe_atr_set_vlan_id_82599(&atr_input, vlan_id);
+	ixgbe_atr_set_src_port_82599(&atr_input, dst_port);
+	ixgbe_atr_set_dst_port_82599(&atr_input, src_port);
+	ixgbe_atr_set_flex_byte_82599(&atr_input, flex_bytes);
+	ixgbe_atr_set_l4type_82599(&atr_input, l4type);
+	/* src and dst are inverted, think how the receiver sees them */
+	ixgbe_atr_set_src_ipv4_82599(&atr_input, dst_ipv4_addr);
+	ixgbe_atr_set_dst_ipv4_82599(&atr_input, src_ipv4_addr);
+
+	/* This assumes the Rx queue and Tx queue are bound to the same CPU */
+	ixgbe_fdir_add_signature_filter_82599(&adapter->hw,
+	    &atr_input, txr->msix);
+}
+#endif
 
 /**********************************************************************
  *
@@ -3203,10 +3357,9 @@ ixgbe_tso_setup(struct tx_ring *txr, struct mbuf *mp, u32 *paylen)
 static boolean_t
 ixgbe_txeof(struct tx_ring *txr)
 {
-	struct adapter * adapter = txr->adapter;
+	struct adapter	*adapter = txr->adapter;
 	struct ifnet	*ifp = adapter->ifp;
-	u32	first, last, done, num_avail;
-	u32	cleaned = 0;
+	u32	first, last, done;
 	struct ixgbe_tx_buf *tx_buffer;
 	struct ixgbe_legacy_tx_desc *tx_desc, *eop_desc;
 
@@ -3215,17 +3368,15 @@ ixgbe_txeof(struct tx_ring *txr)
 	if (txr->tx_avail == adapter->num_tx_desc)
 		return FALSE;
 
-	num_avail = txr->tx_avail;
-	first = txr->next_tx_to_clean;
-
+	first = txr->next_to_clean;
 	tx_buffer = &txr->tx_buffers[first];
 	/* For cleanup we just use legacy struct */
 	tx_desc = (struct ixgbe_legacy_tx_desc *)&txr->tx_base[first];
 	last = tx_buffer->eop_index;
 	if (last == -1)
 		return FALSE;
-
 	eop_desc = (struct ixgbe_legacy_tx_desc *)&txr->tx_base[last];
+
 	/*
 	** Get the index of the first descriptor
 	** BEYOND the EOP and call that 'done'.
@@ -3247,7 +3398,7 @@ ixgbe_txeof(struct tx_ring *txr)
 			tx_desc->upper.data = 0;
 			tx_desc->lower.data = 0;
 			tx_desc->buffer_addr = 0;
-			num_avail++; cleaned++;
+			++txr->tx_avail;
 
 			if (tx_buffer->m_head) {
 				ifp->if_opackets++;
@@ -3261,6 +3412,7 @@ ixgbe_txeof(struct tx_ring *txr)
 				tx_buffer->map = NULL;
 			}
 			tx_buffer->eop_index = -1;
+			txr->watchdog_time = ticks;
 
 			if (++first == adapter->num_tx_desc)
 				first = 0;
@@ -3283,7 +3435,7 @@ ixgbe_txeof(struct tx_ring *txr)
 	bus_dmamap_sync(txr->txdma.dma_tag, txr->txdma.dma_map,
 	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
-	txr->next_tx_to_clean = first;
+	txr->next_to_clean = first;
 
 	/*
 	 * If we have enough room, clear IFF_DRV_OACTIVE to tell the stack that
@@ -3291,98 +3443,101 @@ ixgbe_txeof(struct tx_ring *txr)
 	 * clear the timeout. Otherwise, if some descriptors have been freed,
 	 * restart the timeout.
 	 */
-	if (num_avail > IXGBE_TX_CLEANUP_THRESHOLD) {
+	if (txr->tx_avail > IXGBE_TX_CLEANUP_THRESHOLD) {
 		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-		/* If all are clean turn off the timer */
-		if (num_avail == adapter->num_tx_desc) {
-			txr->watchdog_timer = 0;
-			txr->tx_avail = num_avail;
+		if (txr->tx_avail == adapter->num_tx_desc) {
+			txr->watchdog_check = FALSE;
 			return FALSE;
 		}
 	}
 
-	/* Some were cleaned, so reset timer */
-	if (cleaned)
-		txr->watchdog_timer = IXGBE_TX_TIMEOUT;
-	txr->tx_avail = num_avail;
 	return TRUE;
 }
 
 /*********************************************************************
  *
- *  Get a buffer from system mbuf buffer pool.
+ *  Refresh mbuf buffers for a range of descriptors
  *
  **********************************************************************/
 static int
-ixgbe_get_buf(struct rx_ring *rxr, int i, u8 clean)
+ixgbe_get_buf(struct rx_ring *rxr, int first, int limit)
 {
 	struct adapter		*adapter = rxr->adapter;
 	bus_dma_segment_t	seg[2];
 	struct ixgbe_rx_buf	*rxbuf;
 	struct mbuf		*mh, *mp;
 	bus_dmamap_t		map;
-	int			nsegs, error;
-	int			merr = 0;
+	int			i, nsegs, error;
 
+	i = first;
+	while (i != limit) {
+		rxbuf = &rxr->rx_buffers[i];
 
-	rxbuf = &rxr->rx_buffers[i];
+		if (rxbuf->m_head == NULL) {
+			mh = m_gethdr(M_DONTWAIT, MT_DATA);
+			if (mh == NULL)
+				goto failure;
+		} else  /* reuse */
+			mh = rxbuf->m_head;
 
-	/* First get our header and payload mbuf */
-	if (clean & IXGBE_CLEAN_HDR) {
-		mh = m_gethdr(M_DONTWAIT, MT_DATA);
-		if (mh == NULL)
-			goto remap;
-	} else  /* reuse */
-		mh = rxr->rx_buffers[i].m_head;
+		mh->m_len = MHLEN;
+		mh->m_flags |= M_PKTHDR;
 
-	mh->m_len = MHLEN;
-	mh->m_flags |= M_PKTHDR;
+		if (rxbuf->m_pack == NULL) {
+			mp = m_getjcl(M_DONTWAIT, MT_DATA,
+			    M_PKTHDR, adapter->rx_mbuf_sz);
+			if (mp == NULL)
+				goto failure;
+			mp->m_len = adapter->rx_mbuf_sz;
+			mp->m_flags &= ~M_PKTHDR;
+		} else {	/* reusing */
+			mp = rxbuf->m_pack;
+			mp->m_len = adapter->rx_mbuf_sz;
+			mp->m_flags &= ~M_PKTHDR;
+		}
 
-	if (clean & IXGBE_CLEAN_PKT) {
-		mp = m_getjcl(M_DONTWAIT, MT_DATA,
-		    M_PKTHDR, adapter->rx_mbuf_sz);
-		if (mp == NULL)
-			goto remap;
-		mp->m_len = adapter->rx_mbuf_sz;
-		mp->m_flags &= ~M_PKTHDR;
-	} else {	/* reusing */
-		mp = rxr->rx_buffers[i].m_pack;
-		mp->m_len = adapter->rx_mbuf_sz;
-		mp->m_flags &= ~M_PKTHDR;
+		/*
+		** Need to create a chain for the following
+		** dmamap call at this point.
+		*/
+		mh->m_next = mp;
+		mh->m_pkthdr.len = mh->m_len + mp->m_len;
+
+		/* Get the memory mapping */
+		error = bus_dmamap_load_mbuf_sg(rxr->rxtag,
+		    rxr->spare_map, mh, seg, &nsegs, BUS_DMA_NOWAIT);
+		if (error != 0) {
+			printf("GET BUF: dmamap load failure - %d\n", error);
+			m_free(mh);
+			return (error);
+		}
+
+		/* Unload old mapping and update buffer struct */
+		if (rxbuf->m_head != NULL)
+			bus_dmamap_unload(rxr->rxtag, rxbuf->map);
+		map = rxbuf->map;
+		rxbuf->map = rxr->spare_map;
+		rxr->spare_map = map;
+		rxbuf->m_head = mh;
+		rxbuf->m_pack = mp;
+		bus_dmamap_sync(rxr->rxtag,
+		    rxbuf->map, BUS_DMASYNC_PREREAD);
+
+		/* Update descriptor */
+		rxr->rx_base[i].read.hdr_addr = htole64(seg[0].ds_addr);
+		rxr->rx_base[i].read.pkt_addr = htole64(seg[1].ds_addr);
+
+		/* Calculate next index */
+		if (++i == adapter->num_rx_desc)
+			i = 0;
 	}
-	/*
-	** Need to create a chain for the following
-	** dmamap call at this point.
-	*/
-	mh->m_next = mp;
-	mh->m_pkthdr.len = mh->m_len + mp->m_len;
-
-	/* Get the memory mapping */
-	error = bus_dmamap_load_mbuf_sg(rxr->rxtag,
-	    rxr->spare_map, mh, seg, &nsegs, BUS_DMA_NOWAIT);
-	if (error != 0) {
-		printf("GET BUF: dmamap load failure - %d\n", error);
-		m_free(mh);
-		return (error);
-	}
-
-	/* Unload old mapping and update buffer struct */
-	if (rxbuf->m_head != NULL)
-		bus_dmamap_unload(rxr->rxtag, rxbuf->map);
-	map = rxbuf->map;
-	rxbuf->map = rxr->spare_map;
-	rxr->spare_map = map;
-	rxbuf->m_head = mh;
-	rxbuf->m_pack = mp;
-	bus_dmamap_sync(rxr->rxtag,
-	    rxbuf->map, BUS_DMASYNC_PREREAD);
-
-	/* Update descriptor */
-	rxr->rx_base[i].read.hdr_addr = htole64(seg[0].ds_addr);
-	rxr->rx_base[i].read.pkt_addr = htole64(seg[1].ds_addr);
 
 	return (0);
 
+failure:
+	panic("GET BUF: ENOBUFS\n");
+
+#if 0
 	/*
 	** If we get here, we have an mbuf resource
 	** issue, so we discard the incoming packet
@@ -3415,9 +3570,9 @@ remap:
 	rxr->rx_base[i].read.pkt_addr = htole64(seg[1].ds_addr);
 
 	return (merr);
+#endif
 }
 
-
 /*********************************************************************
  *
  *  Allocate memory for rx_buffer structures. Since we use one
@@ -3491,6 +3646,62 @@ fail:
 	return (error);
 }
 
+
+/*
+** Used to detect a descriptor that has
+** been merged by Hardware RSC.
+*/
+static inline u32
+ixgbe_rsc_count(union ixgbe_adv_rx_desc *rx)
+{
+	return (le32toh(rx->wb.lower.lo_dword.data) &
+	    IXGBE_RXDADV_RSCCNT_MASK) >> IXGBE_RXDADV_RSCCNT_SHIFT;
+}
+
+/*********************************************************************
+ *
+ *  Initialize Hardware RSC (LRO) feature on 82599
+ *  for an RX ring, this is toggled by the LRO capability
+ *  even though it is transparent to the stack.
+ *
+ **********************************************************************/
+static void
+ixgbe_setup_hw_rsc(struct rx_ring *rxr)
+{
+	struct	adapter 	*adapter = rxr->adapter;
+	struct	ixgbe_hw	*hw = &adapter->hw;
+	u32	rscctrl, rdrxctl;
+
+	rdrxctl = IXGBE_READ_REG(hw, IXGBE_RDRXCTL);
+	rdrxctl &= ~IXGBE_RDRXCTL_RSCFRSTSIZE;
+	rdrxctl |= IXGBE_RDRXCTL_CRCSTRIP;
+	IXGBE_WRITE_REG(hw, IXGBE_RDRXCTL, rdrxctl);
+
+	rscctrl = IXGBE_READ_REG(hw, IXGBE_RSCCTL(rxr->me));
+	rscctrl |= IXGBE_RSCCTL_RSCEN;
+	/*
+	** Limit the total number of descriptors that
+	** can be combined, so it does not exceed 64K
+	*/
+	if (adapter->rx_mbuf_sz == MCLBYTES)
+		rscctrl |= IXGBE_RSCCTL_MAXDESC_16;
+	else  /* using 4K clusters */
+		rscctrl |= IXGBE_RSCCTL_MAXDESC_8;
+	IXGBE_WRITE_REG(hw, IXGBE_RSCCTL(rxr->me), rscctrl);
+
+	/* Enable TCP header recognition */
+	IXGBE_WRITE_REG(hw, IXGBE_PSRTYPE(0),
+	    (IXGBE_READ_REG(hw, IXGBE_PSRTYPE(0)) |
+	    IXGBE_PSRTYPE_TCPHDR));
+
+	/* Disable RSC for ACK packets */
+	IXGBE_WRITE_REG(hw, IXGBE_RSCDBU,
+	    (IXGBE_RSCDBU_RSCACKDIS | IXGBE_READ_REG(hw, IXGBE_RSCDBU)));
+
+	rxr->hw_rsc = TRUE;
+}
+
+
 /*********************************************************************
  *
  *  Initialize a receive ring and its buffers.
@@ -3503,8 +3714,9 @@ ixgbe_setup_receive_ring(struct rx_ring *rxr)
 	struct ifnet		*ifp;
 	device_t		dev;
 	struct ixgbe_rx_buf	*rxbuf;
+	bus_dma_segment_t	seg[2];
 	struct lro_ctrl		*lro = &rxr->lro;
-	int			j, rsize;
+	int			rsize, nsegs, error;
 
 	adapter = rxr->adapter;
 	ifp = adapter->ifp;
@@ -3533,48 +3745,74 @@ ixgbe_setup_receive_ring(struct rx_ring *rxr)
 		}
 	}
 
-	/* Now refresh the mbufs */
-	for (j = 0; j < adapter->num_rx_desc; j++) {
-		if (ixgbe_get_buf(rxr, j, IXGBE_CLEAN_ALL) == ENOBUFS) {
-			rxr->rx_buffers[j].m_head = NULL;
-			rxr->rx_buffers[j].m_pack = NULL;
-			rxr->rx_base[j].read.hdr_addr = 0;
-			rxr->rx_base[j].read.pkt_addr = 0;
-			goto fail;
-		}
+	/* Now replenish the mbufs */
+	for (int j = 0; j != adapter->num_rx_desc; ++j) {
+
+		rxbuf = &rxr->rx_buffers[j];
+		rxbuf->m_head = m_gethdr(M_DONTWAIT, MT_DATA);
+		if (rxbuf->m_head == NULL)
+			panic("RX ring hdr initialization failed!\n");
+		rxbuf->m_head->m_len = MHLEN;
+		rxbuf->m_head->m_flags |= M_PKTHDR;
+		rxbuf->m_head->m_pkthdr.len = rxbuf->m_head->m_len;
+
+		rxbuf->m_pack = m_getjcl(M_DONTWAIT, MT_DATA,
+		    M_PKTHDR, adapter->rx_mbuf_sz);
+		if (rxbuf->m_pack == NULL)
+			panic("RX ring pkt initialization failed!\n");
+		rxbuf->m_pack->m_len = adapter->rx_mbuf_sz;
+		rxbuf->m_head->m_next = rxbuf->m_pack;
+		rxbuf->m_head->m_pkthdr.len += rxbuf->m_pack->m_len;
+
+		/* Get the memory mapping */
+		error = bus_dmamap_load_mbuf_sg(rxr->rxtag,
+		    rxbuf->map, rxbuf->m_head, seg,
+		    &nsegs, BUS_DMA_NOWAIT);
+		if (error != 0)
+			panic("RX ring dma initialization failed!\n");
+		bus_dmamap_sync(rxr->rxtag,
+		    rxbuf->map, BUS_DMASYNC_PREREAD);
+
+		/* Update descriptor */
+		rxr->rx_base[j].read.hdr_addr = htole64(seg[0].ds_addr);
+		rxr->rx_base[j].read.pkt_addr = htole64(seg[1].ds_addr);
 	}
 
+
 	/* Setup our descriptor indices */
 	rxr->next_to_check = 0;
-	rxr->last_cleaned = 0;
+	rxr->last_refreshed = 0;
 	rxr->lro_enabled = FALSE;
 
 	/* Use header split if configured */
 	if (ixgbe_header_split)
 		rxr->hdr_split = TRUE;
+	else
+		ifp->if_capabilities &= ~IFCAP_LRO;
 
 	bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
 	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
 	/*
-	** Now set up the LRO interface, we
-	** also only do head split when LRO
-	** is enabled, since so often they
-	** are undesireable in similar setups.
+	** Now set up the LRO interface:
+	** 82598 uses software LRO, the
+	** 82599 on the other hand uses a
+	** hardware assist to do the same.
+	** We only do LRO when header split
+	** is enabled, its simpler that way.
 	*/
-	if (ifp->if_capenable & IFCAP_LRO) {
+	if ((ifp->if_capenable & IFCAP_LRO) && (rxr->hdr_split)) {
 		int err = tcp_lro_init(lro);
-		if (err) {
-			INIT_DEBUGOUT("LRO Initialization failed!\n");
-			goto fail;
-		}
-		INIT_DEBUGOUT("RX LRO Initialized\n");
+		if (err)
+			panic("LRO Initialization failed!\n");
+		INIT_DEBUGOUT("RX Soft LRO Initialized\n");
 		rxr->lro_enabled = TRUE;
 		lro->ifp = adapter->ifp;
+		ixgbe_setup_hw_rsc(rxr);
 	}
 
 	return (0);
-
+#if 0
 fail:
 	/*
 	 * We need to clean up any buffers allocated
@@ -3591,6 +3829,7 @@ fail:
 		}
 	}
 	return (ENOBUFS);
+#endif
 }
 
 /*********************************************************************
@@ -3844,7 +4083,7 @@ ixgbe_rxeof(struct rx_ring *rxr, int count)
 	struct ifnet   		*ifp = adapter->ifp;
 	struct lro_ctrl		*lro = &rxr->lro;
 	struct lro_entry	*queued;
-	int             	i;
+	int             	i, processed = 0;
 	u32			staterr;
 	union ixgbe_adv_rx_desc	*cur;
 
@@ -3865,31 +4104,69 @@ ixgbe_rxeof(struct rx_ring *rxr, int count)
 
 	while ((staterr & IXGBE_RXD_STAT_DD) && (count != 0) &&
 	    (ifp->if_drv_flags & IFF_DRV_RUNNING)) {
-		struct mbuf	*sendmp, *mh, *mp;
-		u16		hlen, plen, hdr, vtag;	
-		u8		dopayload, accept_frame, eop;
+		struct mbuf	*sendmp, *mh, *mp, *nh, *np;
+		struct ixgbe_rx_buf	*nxtbuf;
+		u32		rsc;
+		u16		hlen, plen, hdr, nextp, vtag;	
+		bool		accept_frame, eop;
 
 
-		accept_frame = 1;
-		hlen = plen = vtag = 0;
-		sendmp = mh = mp = NULL;
+		accept_frame = TRUE;
+		hlen = plen = rsc = nextp = 0;
+		sendmp = mh = mp = nh = np = NULL;
 
 		/* Sync the buffers */
 		bus_dmamap_sync(rxr->rxtag, rxr->rx_buffers[i].map,
 			    BUS_DMASYNC_POSTREAD);
+		mh = rxr->rx_buffers[i].m_head;
+		mp = rxr->rx_buffers[i].m_pack;
+		vtag = le16toh(cur->wb.upper.vlan);
+		eop = ((staterr & IXGBE_RXD_STAT_EOP) != 0);
+
+		if (!eop) {
+			/*
+			** On 82599 which supports a hardware
+			** LRO (called HW RSC), packets need 
+			** not be fragmented across sequential
+			** descriptors, rather the next descriptor
+			** is indicated in bits of the current.
+			** This also means that we might proceses
+			** more than one packet at a time, something
+			** that has never been true before, it 
+			** required eliminating global chain pointers
+			** in favor of what we are doing here.  -jfv
+			*/
+			if (rxr->hw_rsc == TRUE) {
+				rsc = ixgbe_rsc_count(cur);
+				rxr->rsc_num += (rsc - 1);
+			}
+			if (rsc) {
+				nextp = ((staterr &
+				    IXGBE_RXDADV_NEXTP_MASK) >>
+				    IXGBE_RXDADV_NEXTP_SHIFT);
+			} else {
+				nextp = i + 1;
+				if (nextp == adapter->num_rx_desc)
+					nextp = 0;
+			}
+			nxtbuf = &rxr->rx_buffers[nextp];
+			prefetch(nxtbuf);
+		}
 
 		/*
 		** The way the hardware is configured to
 		** split, it will ONLY use the header buffer
 		** when header split is enabled, otherwise we
-		** get normal behavior, ie, both header and
-		** payload are DMA'd into the payload buffer.
+		** get legacy behavior, ie, both header and
+		** payload are DMA'd into JUST the payload buffer.
+		**
+		** Rather than using the fmp/lmp global pointers
+		** we now keep the head of a packet chain in the
+		** m_nextpkt pointer and pass this along from one
+		** descriptor to the next, until we get EOP.
 		**
-		** The fmp test is to catch the case where a
-		** packet spans multiple descriptors, in that
-		** case only the first header is valid.
 		*/
-		if ((rxr->hdr_split) && (rxr->fmp == NULL)){
+		if ((rxr->hdr_split) && (mh->m_nextpkt == NULL)) {
 			hdr = le16toh(cur->
 			    wb.lower.lo_dword.hs_rss.hdr_info);
 			hlen = (hdr & IXGBE_RXDADV_HDRBUFLEN_MASK) >>
@@ -3897,182 +4174,168 @@ ixgbe_rxeof(struct rx_ring *rxr, int count)
 			if (hlen > IXGBE_RX_HDR)
 				hlen = IXGBE_RX_HDR;
 			plen = le16toh(cur->wb.upper.length);
-			/* Handle the header mbuf */
-			mh = rxr->rx_buffers[i].m_head;
 			mh->m_len = hlen;
-			dopayload = IXGBE_CLEAN_HDR;
+			mh->m_flags |= M_PKTHDR;
+			mh->m_next = NULL;
+			mh->m_pkthdr.len = mh->m_len;
+			/* Null this so getbuf replenishes */
+			rxr->rx_buffers[i].m_head = NULL;
 			/*
 			** Get the payload length, this
 			** could be zero if its a small
 			** packet.
 			*/
 			if (plen) {
-				mp = rxr->rx_buffers[i].m_pack;
 				mp->m_len = plen;
 				mp->m_next = NULL;
 				mp->m_flags &= ~M_PKTHDR;
 				mh->m_next = mp;
-				mh->m_flags |= M_PKTHDR;
-				dopayload = IXGBE_CLEAN_ALL;
+				mh->m_pkthdr.len += mp->m_len;
+				/* Null this so getbuf replenishes */
+				rxr->rx_buffers[i].m_pack = NULL;
 				rxr->rx_split_packets++;
-			} else {  /* small packets */
-				mh->m_flags &= ~M_PKTHDR;
-				mh->m_next = NULL;
+			}
+			/* Setup the forward chain */
+			if (eop == 0) {
+				nh = rxr->rx_buffers[nextp].m_head;
+				np = rxr->rx_buffers[nextp].m_pack;
+				nh->m_nextpkt = mh;
+				if (plen)
+					mp->m_next = np;
+				else
+					mh->m_next = np;
+			} else {
+				sendmp = mh;
+				if (staterr & IXGBE_RXD_STAT_VP) {
+					sendmp->m_pkthdr.ether_vtag = vtag;
+					sendmp->m_flags |= M_VLANTAG;
+				}
 			}
 		} else {
 			/*
 			** Either no header split, or a
 			** secondary piece of a fragmented
-			** split packet.
+			** packet.
 			*/
-			mh = rxr->rx_buffers[i].m_pack;
-			mh->m_flags |= M_PKTHDR;
-			mh->m_len = le16toh(cur->wb.upper.length);
-			dopayload = IXGBE_CLEAN_PKT;
+			mp->m_len = le16toh(cur->wb.upper.length);
+			rxr->rx_buffers[i].m_pack = NULL;
+			/* stored head pointer */
+			sendmp = mh->m_nextpkt;
+			if (sendmp != NULL) {
+				sendmp->m_pkthdr.len += mp->m_len;
+				sendmp->m_nextpkt = NULL;
+			} else { 
+				/* first desc of a non-ps chain */
+				sendmp = mp;
+				sendmp->m_flags |= M_PKTHDR;
+				sendmp->m_pkthdr.len = mp->m_len;
+				if (staterr & IXGBE_RXD_STAT_VP) {
+					sendmp->m_pkthdr.ether_vtag = vtag;
+					sendmp->m_flags |= M_VLANTAG;
+				}
+			}
+			/* Carry head forward */
+			if (eop == 0) {
+				nh = rxr->rx_buffers[nextp].m_head;
+				np = rxr->rx_buffers[nextp].m_pack;
+				nh->m_nextpkt = sendmp;
+				mp->m_next = np;
+				sendmp = NULL;
+			}
+			mh->m_nextpkt = NULL;
 		}
 
-		if (staterr & IXGBE_RXD_STAT_EOP) {
-			count--;
-			eop = 1;
-		} else 
-			eop = 0;
-
-#ifdef IXGBE_IEEE1588
-        This code needs to be converted to work here
-        -----------------------------------------------------
-               if (unlikely(staterr & IXGBE_RXD_STAT_TS)) {
-                       u64 regval;
-                       u64 ns;
-// Create an mtag and set it up
-                       struct skb_shared_hwtstamps *shhwtstamps =
-                               skb_hwtstamps(skb);
-
-                       rd32(IXGBE_TSYNCRXCTL) & IXGBE_TSYNCRXCTL_VALID),
-                       "igb: no RX time stamp available for time stamped packet");
-                       regval = rd32(IXGBE_RXSTMPL);
-                       regval |= (u64)rd32(IXGBE_RXSTMPH) << 32;
-// Do time conversion from the register
-                       ns = timecounter_cyc2time(&adapter->clock, regval);
-                       clocksync_update(&adapter->sync, ns);
-                       memset(shhwtstamps, 0, sizeof(*shhwtstamps));
-                       shhwtstamps->hwtstamp = ns_to_ktime(ns);
-                       shhwtstamps->syststamp =
-                               clocksync_hw2sys(&adapter->sync, ns);
-               }
-#endif
-
 		if (staterr & IXGBE_RXDADV_ERR_FRAME_ERR_MASK)
-			accept_frame = 0;
+			accept_frame = FALSE;
 
 		if (accept_frame) {
-			/*
-			** Save the vlan id, because get_buf will
-			** clobber the writeback descriptor...
-			*/
-			vtag = le16toh(cur->wb.upper.vlan);
-			if (ixgbe_get_buf(rxr, i, dopayload) != 0) {
-				ifp->if_iqdrops++;
-				goto discard;
-			}
-			/* Initial frame - setup */
-			if (rxr->fmp == NULL) {
-				mh->m_flags |= M_PKTHDR;
-				mh->m_pkthdr.len = mh->m_len;
-				rxr->fmp = mh; /* Store the first mbuf */
-				rxr->lmp = mh;
-				if (mp) { /* Add payload if split */
-					mh->m_pkthdr.len += mp->m_len;
-					rxr->lmp = mh->m_next;
-				}
-			} else {
-				/* Chain mbuf's together */
-				mh->m_flags &= ~M_PKTHDR;
-				rxr->lmp->m_next = mh;
-				rxr->lmp = rxr->lmp->m_next;
-				rxr->fmp->m_pkthdr.len += mh->m_len;
-			}
-
+			++processed;
 			if (eop) {
-				rxr->fmp->m_pkthdr.rcvif = ifp;
+				--count;
+				sendmp->m_pkthdr.rcvif = ifp;
 				ifp->if_ipackets++;
 				rxr->rx_packets++;
 				/* capture data for AIM */
-				rxr->bytes += rxr->fmp->m_pkthdr.len;
+				rxr->bytes += sendmp->m_pkthdr.len;
 				rxr->rx_bytes += rxr->bytes;
 				if (ifp->if_capenable & IFCAP_RXCSUM)
-					ixgbe_rx_checksum(staterr, rxr->fmp);
+					ixgbe_rx_checksum(staterr, sendmp);
 				else
-					rxr->fmp->m_pkthdr.csum_flags = 0;
-				if (staterr & IXGBE_RXD_STAT_VP) {
-					rxr->fmp->m_pkthdr.ether_vtag = vtag;
-					rxr->fmp->m_flags |= M_VLANTAG;
-				}
+					sendmp->m_pkthdr.csum_flags = 0;
 #if __FreeBSD_version >= 800000
-				rxr->fmp->m_pkthdr.flowid = curcpu;
-				rxr->fmp->m_flags |= M_FLOWID;
+				/* Get the RSS Hash */
+				sendmp->m_pkthdr.flowid =
+				    le16toh(cur->wb.lower.hi_dword.rss);
+				sendmp->m_flags |= M_FLOWID;
 #endif
-				sendmp = rxr->fmp;
-				rxr->fmp = NULL;
-				rxr->lmp = NULL;
 			}
 		} else {
 			ifp->if_ierrors++;
-discard:
 			/* Reuse loaded DMA map and just update mbuf chain */
-			if (hlen) {
-				mh = rxr->rx_buffers[i].m_head;
-				mh->m_len = MHLEN;
-				mh->m_next = NULL;
-			}
-			mp = rxr->rx_buffers[i].m_pack;
+			mh->m_len = MHLEN;
+			mh->m_flags |= M_PKTHDR;
+			mh->m_next = NULL;
 			mp->m_len = mp->m_pkthdr.len = adapter->rx_mbuf_sz;
 			mp->m_data = mp->m_ext.ext_buf;
+			if (mp->m_next) { /* Free chain */
+				sendmp = mp->m_next;
+				m_free(sendmp);
+			}
 			mp->m_next = NULL;
 			if (adapter->max_frame_size <=
 			    (MCLBYTES - ETHER_ALIGN))
 				m_adj(mp, ETHER_ALIGN);
-			if (rxr->fmp != NULL) {
-				/* handles the whole chain */
-				m_freem(rxr->fmp);
-				rxr->fmp = NULL;
-				rxr->lmp = NULL;
-			}
 			sendmp = NULL;
 		}
 		bus_dmamap_sync(rxr->rxdma.dma_tag, rxr->rxdma.dma_map,
 		    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
-		rxr->last_cleaned = i; /* for updating tail */
-
+		rxr->last_refreshed = i; /* for updating tail */
 		if (++i == adapter->num_rx_desc)
 			i = 0;
+		/* Prefetch next descriptor */
+		cur = &rxr->rx_base[i];
+		prefetch(cur);
 
 		/*
 		** Now send up to the stack,
-		** note the the value of next_to_check
-		** is safe because we keep the RX lock
-		** thru this call.
+		** note that the RX lock is
+		** held thru this call.
 		*/
                 if (sendmp != NULL) {
 			/*
 			** Send to the stack if:
-			**  - LRO not enabled, or
-			**  - no LRO resources, or
-			**  - lro enqueue fails
+			**  - Soft LRO not enabled, or
+			**  - no Soft LRO resources, or
+			**  - soft lro enqueue fails
 			*/
 			if ((!rxr->lro_enabled) ||
 			    ((!lro->lro_cnt) || (tcp_lro_rx(lro, sendmp, 0))))
 	                        (*ifp->if_input)(ifp, sendmp);
                 }
 
-		/* Get next descriptor */
-		cur = &rxr->rx_base[i];
+		/* Replenish every 8 max */
+		if (processed == 8) {
+			ixgbe_get_buf(rxr, rxr->next_to_check, i);
+			processed = 0;
+			IXGBE_WRITE_REG(&adapter->hw,
+			    IXGBE_RDT(rxr->me), rxr->last_refreshed);
+			rxr->next_to_check = i;
+		}
+
+		/* Next iteration */
 		staterr = cur->wb.upper.status_error;
 	}
-	rxr->next_to_check = i;
 
-	/* Advance the IXGB's Receive Queue "Tail Pointer" */
-	IXGBE_WRITE_REG(&adapter->hw, IXGBE_RDT(rxr->me), rxr->last_cleaned);
+	/* Replenish remaining work */
+	if (processed != 0) {
+		ixgbe_get_buf(rxr, rxr->next_to_check, i);
+		processed = 0;
+		IXGBE_WRITE_REG(&adapter->hw,
+		    IXGBE_RDT(rxr->me), rxr->last_refreshed);
+	}
+
+	rxr->next_to_check = i;
 
 	/*
 	 * Flush any outstanding LRO work
@@ -4090,7 +4353,7 @@ discard:
 	** then schedule another interrupt.
 	*/
 	if (staterr & IXGBE_RXD_STAT_DD) {
-        	ixgbe_rearm_rx_queues(adapter, (u64)(1 << rxr->msix));
+        	ixgbe_rearm_queues(adapter, (u64)(1 << rxr->msix));
 		return TRUE;
 	}
 
@@ -4244,6 +4507,9 @@ ixgbe_enable_intr(struct adapter *adapter)
 		    mask |= IXGBE_EIMS_ECC;
 		    mask |= IXGBE_EIMS_GPI_SDP1;
 		    mask |= IXGBE_EIMS_GPI_SDP2;
+#ifdef IXGBE_FDIR
+		    mask |= IXGBE_EIMS_FLOW_DIR;
+#endif
 	}
 
 	IXGBE_WRITE_REG(hw, IXGBE_EIMS, mask);
@@ -4435,7 +4701,12 @@ ixgbe_handle_mod(void *context, int pending)
 		    "Unsupported SFP+ module type was detected.\n");
 		return;
 	}
-	hw->mac.ops.setup_sfp(hw);
+	err = hw->mac.ops.setup_sfp(hw);
+	if (err == IXGBE_ERR_SFP_NOT_SUPPORTED) {
+		device_printf(dev,
+		    "Setup failure - unsupported SFP+ module type.\n");
+		return;
+	}
 	taskqueue_enqueue(adapter->tq, &adapter->msf_task);
 	return;
 }
@@ -4450,18 +4721,40 @@ ixgbe_handle_msf(void *context, int pending)
 	struct adapter  *adapter = context;
 	struct ixgbe_hw *hw = &adapter->hw;
 	u32 autoneg;
+	bool negotiate;
 
-	if (hw->mac.ops.get_link_capabilities)
-		hw->mac.ops.get_link_capabilities(hw, &autoneg,
-                                                  &hw->mac.autoneg);
-	if (hw->mac.ops.setup_link_speed)
-		hw->mac.ops.setup_link_speed(hw, autoneg, TRUE, TRUE);
-	ixgbe_check_link(&adapter->hw,
-	    &adapter->link_speed, &adapter->link_up, 0);
+	autoneg = hw->phy.autoneg_advertised;
+	if ((!autoneg) && (hw->mac.ops.get_link_capabilities))
+		hw->mac.ops.get_link_capabilities(hw, &autoneg, &negotiate);
+	if (hw->mac.ops.setup_link)
+		hw->mac.ops.setup_link(hw, autoneg, negotiate, TRUE);
+#if 0
+	ixgbe_check_link(&adapter->hw, &speed, &adapter->link_up, 0);
        	ixgbe_update_link_status(adapter);
+#endif
 	return;
 }
 
+#ifdef IXGBE_FDIR
+/*
+** Tasklet for reinitializing the Flow Director filter table
+*/
+static void
+ixgbe_reinit_fdir(void *context, int pending)
+{
+	struct adapter  *adapter = context;
+	struct ifnet   *ifp = adapter->ifp;;
+
+	if (adapter->fdir_reinit != 1) /* Shouldn't happen */
+		return;
+	ixgbe_reinit_fdir_tables_82599(&adapter->hw);
+	adapter->fdir_reinit = 0;
+	/* Restart the interface */
+	ifp->if_drv_flags |= IFF_DRV_RUNNING;
+	return;
+}
+#endif
+
 /**********************************************************************
  *
  *  Update the board statistics counters.
@@ -4482,12 +4775,12 @@ ixgbe_update_stats_counters(struct adapter *adapter)
 		mp = IXGBE_READ_REG(hw, IXGBE_MPC(i));
 		/* missed_rx tallies misses for the gprc workaround */
 		missed_rx += mp;
+		/* global total per queue */
         	adapter->stats.mpc[i] += mp;
 		/* Running comprehensive total for stats display */
 		total_missed_rx += adapter->stats.mpc[i];
 		if (hw->mac.type == ixgbe_mac_82598EB)
-			adapter->stats.rnbc[i] +=
-			    IXGBE_READ_REG(hw, IXGBE_RNBC(i));
+			adapter->stats.rnbc[i] += IXGBE_READ_REG(hw, IXGBE_RNBC(i));
 	}
 
 	/* Hardware workaround, gprc counts missed packets */
@@ -4508,7 +4801,7 @@ ixgbe_update_stats_counters(struct adapter *adapter)
 		adapter->stats.lxoffrxc += IXGBE_READ_REG(hw, IXGBE_LXOFFRXC);
 		/* 82598 only has a counter in the high register */
 		adapter->stats.gorc += IXGBE_READ_REG(hw, IXGBE_GORCH);
-		adapter->stats.gotc += IXGBE_READ_REG(hw, IXGBE_GOTCH);
+		adapter->stats.gorc += IXGBE_READ_REG(hw, IXGBE_GOTCH);
 		adapter->stats.tor += IXGBE_READ_REG(hw, IXGBE_TORH);
 	}
 
@@ -4653,6 +4946,8 @@ ixgbe_print_debug_info(struct adapter *adapter)
 		    rxr->me, lro->lro_queued);
 		device_printf(dev,"RX(%d) LRO Flushed= %d\n",
 		    rxr->me, lro->lro_flushed);
+		device_printf(dev,"RX(%d) HW LRO Merges= %lu\n",
+		    rxr->me, (long)rxr->rsc_num);
 	}
 
 	for (int i = 0; i < adapter->num_queues; i++, txr++) {
diff --git a/sys/dev/ixgbe/ixgbe.h b/sys/dev/ixgbe/ixgbe.h
index 848820a8e95..d52eed3a07e 100644
--- a/sys/dev/ixgbe/ixgbe.h
+++ b/sys/dev/ixgbe/ixgbe.h
@@ -134,9 +134,11 @@
 #define MAX_LOOP	10
 
 /*
- * This parameter controls the duration of transmit watchdog timer.
+ * This is the max watchdog interval, ie. the time that can
+ * pass between any two TX clean operations, such only happening
+ * when the TX hardware is functioning.
  */
-#define IXGBE_TX_TIMEOUT                   5	/* set to 5 seconds */
+#define IXGBE_WATCHDOG                   (10 * hz)
 
 /*
  * This parameters control when the driver calls the routine to reclaim
@@ -148,7 +150,7 @@
 #define IXGBE_MAX_FRAME_SIZE	0x3F00
 
 /* Flow control constants */
-#define IXGBE_FC_PAUSE		0x680
+#define IXGBE_FC_PAUSE		0xFFFF
 #define IXGBE_FC_HI		0x20000
 #define IXGBE_FC_LO		0x10000
 
@@ -174,7 +176,7 @@
 #define MSIX_82599_BAR			4
 #define IXGBE_TSO_SIZE			65535
 #define IXGBE_TX_BUFFER_SIZE		((u32) 1514)
-#define IXGBE_RX_HDR			128
+#define IXGBE_RX_HDR			256
 #define IXGBE_VFTA_SIZE			128
 #define IXGBE_BR_SIZE			4096
 #define CSUM_OFFLOAD			7	/* Bits in csum flags */
@@ -253,14 +255,15 @@ struct tx_ring {
 	struct mtx		tx_mtx;
 	u32			me;
 	u32			msix;
-	u32			watchdog_timer;
+	bool			watchdog_check;
+	int			watchdog_time;
 	union ixgbe_adv_tx_desc	*tx_base;
 	volatile u32		tx_hwb;
 	struct ixgbe_dma_alloc	txdma;
 	struct task     	tx_task;
 	struct taskqueue	*tq;
-	u32			next_avail_tx_desc;
-	u32			next_tx_to_clean;
+	u32			next_avail_desc;
+	u32			next_to_clean;
 	struct ixgbe_tx_buf	*tx_buffers;
 	volatile u16		tx_avail;
 	u32			txd_cmd;
@@ -272,7 +275,10 @@ struct tx_ring {
 	/* Interrupt resources */
 	void			*tag;
 	struct resource		*res;
-
+#ifdef IXGBE_FDIR
+	u16			atr_sample;
+	u16			atr_count;
+#endif
 	/* Soft Stats */
 	u32			no_tx_desc_avail;
 	u32			no_tx_desc_late;
@@ -297,13 +303,12 @@ struct rx_ring {
 	struct lro_ctrl		lro;
 	bool			lro_enabled;
 	bool			hdr_split;
-        unsigned int		last_cleaned;
+	bool			hw_rsc;
+        unsigned int		last_refreshed;
         unsigned int		next_to_check;
 	struct ixgbe_rx_buf	*rx_buffers;
 	bus_dma_tag_t		rxtag;
 	bus_dmamap_t		spare_map;
-	struct mbuf		*fmp;
-	struct mbuf		*lmp;
 	char			mtx_name[16];
 
 	u32			bytes; /* Used for AIM calc */
@@ -318,6 +323,10 @@ struct rx_ring {
 	u64			rx_split_packets;
 	u64			rx_packets;
 	u64 			rx_bytes;
+	u64 			rsc_num;
+#ifdef IXGBE_FDIR
+	u64			flm;
+#endif
 };
 
 /* Our adapter structure */
@@ -349,21 +358,16 @@ struct adapter {
 	eventhandler_tag vlan_attach;
 	eventhandler_tag vlan_detach;
 
-	u32		num_vlans;
+	u16		num_vlans;
 	u16		num_queues;
 
 	/* Info about the board itself */
-	u32		part_num;
 	u32		optics;
 	bool		link_active;
 	u16		max_frame_size;
 	u32		link_speed;
 	bool		link_up;
 	u32 		linkvec;
-	u32		tx_int_delay;
-	u32		tx_abs_int_delay;
-	u32		rx_int_delay;
-	u32		rx_abs_int_delay;
 
 	/* Mbuf cluster size */
 	u32		rx_mbuf_sz;
@@ -373,6 +377,10 @@ struct adapter {
 	struct task     link_task; 	/* Link tasklet */
 	struct task     mod_task; 	/* SFP tasklet */
 	struct task     msf_task; 	/* Multispeed Fiber tasklet */
+#ifdef IXGBE_FDIR
+	int			fdir_reinit;
+	struct task     	fdir_task;
+#endif
 	struct taskqueue	*tq;
 
 	/*
@@ -423,12 +431,12 @@ struct adapter {
 #define IXGBE_CORE_LOCK_INIT(_sc, _name) \
         mtx_init(&(_sc)->core_mtx, _name, "IXGBE Core Lock", MTX_DEF)
 #define IXGBE_CORE_LOCK_DESTROY(_sc)      mtx_destroy(&(_sc)->core_mtx)
-#define IXGBE_TX_LOCK_DESTROY(_sc)                mtx_destroy(&(_sc)->tx_mtx)
-#define IXGBE_RX_LOCK_DESTROY(_sc)                mtx_destroy(&(_sc)->rx_mtx)
+#define IXGBE_TX_LOCK_DESTROY(_sc)        mtx_destroy(&(_sc)->tx_mtx)
+#define IXGBE_RX_LOCK_DESTROY(_sc)        mtx_destroy(&(_sc)->rx_mtx)
 #define IXGBE_CORE_LOCK(_sc)              mtx_lock(&(_sc)->core_mtx)
-#define IXGBE_TX_LOCK(_sc)                        mtx_lock(&(_sc)->tx_mtx)
-#define IXGBE_TX_TRYLOCK(_sc)                     mtx_trylock(&(_sc)->tx_mtx)
-#define IXGBE_RX_LOCK(_sc)                        mtx_lock(&(_sc)->rx_mtx)
+#define IXGBE_TX_LOCK(_sc)                mtx_lock(&(_sc)->tx_mtx)
+#define IXGBE_TX_TRYLOCK(_sc)             mtx_trylock(&(_sc)->tx_mtx)
+#define IXGBE_RX_LOCK(_sc)                mtx_lock(&(_sc)->rx_mtx)
 #define IXGBE_CORE_UNLOCK(_sc)            mtx_unlock(&(_sc)->core_mtx)
 #define IXGBE_TX_UNLOCK(_sc)              mtx_unlock(&(_sc)->tx_mtx)
 #define IXGBE_RX_UNLOCK(_sc)              mtx_unlock(&(_sc)->rx_mtx)
diff --git a/sys/dev/ixgbe/ixgbe_82598.c b/sys/dev/ixgbe/ixgbe_82598.c
index fb711c621ad..12711b0a9b4 100644
--- a/sys/dev/ixgbe/ixgbe_82598.c
+++ b/sys/dev/ixgbe/ixgbe_82598.c
@@ -44,20 +44,21 @@ static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
                                              bool *autoneg);
 static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw);
 s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num);
-static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw);
+static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
+					bool autoneg_wait_to_complete);
 static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
                                       ixgbe_link_speed *speed, bool *link_up,
                                       bool link_up_wait_to_complete);
-static s32 ixgbe_setup_mac_link_speed_82598(struct ixgbe_hw *hw,
+static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
                                             ixgbe_link_speed speed,
                                             bool autoneg,
                                             bool autoneg_wait_to_complete);
-static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw);
-static s32 ixgbe_setup_copper_link_speed_82598(struct ixgbe_hw *hw,
+static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
                                                ixgbe_link_speed speed,
                                                bool autoneg,
                                                bool autoneg_wait_to_complete);
 static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw);
+s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw);
 s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
 static s32 ixgbe_clear_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
 s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan,
@@ -70,7 +71,50 @@ s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
 u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw);
 s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw);
 void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw);
+void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw);
+static s32 ixgbe_validate_link_ready(struct ixgbe_hw *hw);
 
+/**
+ *  ixgbe_set_pcie_completion_timeout - set pci-e completion timeout
+ *  @hw: pointer to the HW structure
+ *
+ *  The defaults for 82598 should be in the range of 50us to 50ms,
+ *  however the hardware default for these parts is 500us to 1ms which is less
+ *  than the 10ms recommended by the pci-e spec.  To address this we need to
+ *  increase the value to either 10ms to 250ms for capability version 1 config,
+ *  or 16ms to 55ms for version 2.
+ **/
+void ixgbe_set_pcie_completion_timeout(struct ixgbe_hw *hw)
+{
+	u32 gcr = IXGBE_READ_REG(hw, IXGBE_GCR);
+	u16 pcie_devctl2;
+
+	/* only take action if timeout value is defaulted to 0 */
+	if (gcr & IXGBE_GCR_CMPL_TMOUT_MASK)
+		goto out;
+
+	/*
+	 * if capababilities version is type 1 we can write the
+	 * timeout of 10ms to 250ms through the GCR register
+	 */
+	if (!(gcr & IXGBE_GCR_CAP_VER2)) {
+		gcr |= IXGBE_GCR_CMPL_TMOUT_10ms;
+		goto out;
+	}
+
+	/*
+	 * for version 2 capabilities we need to write the config space
+	 * directly in order to set the completion timeout value for
+	 * 16ms to 55ms
+	 */
+	pcie_devctl2 = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2);
+	pcie_devctl2 |= IXGBE_PCI_DEVICE_CONTROL2_16ms;
+	IXGBE_WRITE_PCIE_WORD(hw, IXGBE_PCI_DEVICE_CONTROL2, pcie_devctl2);
+out:
+	/* disable completion timeout resend */
+	gcr &= ~IXGBE_GCR_CMPL_TMOUT_RESEND;
+	IXGBE_WRITE_REG(hw, IXGBE_GCR, gcr);
+}
 
 /**
  *  ixgbe_get_pcie_msix_count_82598 - Gets MSI-X vector count
@@ -83,6 +127,8 @@ u32 ixgbe_get_pcie_msix_count_82598(struct ixgbe_hw *hw)
 {
 	u32 msix_count = 18;
 
+	DEBUGFUNC("ixgbe_get_pcie_msix_count_82598");
+
 	if (hw->mac.msix_vectors_from_pcie) {
 		msix_count = IXGBE_READ_PCIE_WORD(hw,
 		                                  IXGBE_PCIE_MSIX_82598_CAPS);
@@ -108,6 +154,8 @@ s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw)
 	struct ixgbe_phy_info *phy = &hw->phy;
 	s32 ret_val;
 
+	DEBUGFUNC("ixgbe_init_ops_82598");
+
 	ret_val = ixgbe_init_phy_ops_generic(hw);
 	ret_val = ixgbe_init_ops_generic(hw);
 
@@ -115,6 +163,7 @@ s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw)
 	phy->ops.init = &ixgbe_init_phy_ops_82598;
 
 	/* MAC */
+	mac->ops.start_hw = &ixgbe_start_hw_82598;
 	mac->ops.reset_hw = &ixgbe_reset_hw_82598;
 	mac->ops.get_media_type = &ixgbe_get_media_type_82598;
 	mac->ops.get_supported_physical_layer =
@@ -145,7 +194,6 @@ s32 ixgbe_init_ops_82598(struct ixgbe_hw *hw)
 	/* Link */
 	mac->ops.check_link = &ixgbe_check_mac_link_82598;
 	mac->ops.setup_link = &ixgbe_setup_mac_link_82598;
-	mac->ops.setup_link_speed = &ixgbe_setup_mac_link_speed_82598;
 	mac->ops.get_link_capabilities =
 	                       &ixgbe_get_link_capabilities_82598;
 
@@ -168,6 +216,7 @@ s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw)
 	s32 ret_val = IXGBE_SUCCESS;
 	u16 list_offset, data_offset;
 
+	DEBUGFUNC("ixgbe_init_phy_ops_82598");
 
 	/* Identify the PHY */
 	phy->ops.identify(hw);
@@ -175,21 +224,20 @@ s32 ixgbe_init_phy_ops_82598(struct ixgbe_hw *hw)
 	/* Overwrite the link function pointers if copper PHY */
 	if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
 		mac->ops.setup_link = &ixgbe_setup_copper_link_82598;
-		mac->ops.setup_link_speed =
-		                     &ixgbe_setup_copper_link_speed_82598;
 		mac->ops.get_link_capabilities =
 		                  &ixgbe_get_copper_link_capabilities_generic;
 	}
 
 	switch (hw->phy.type) {
 	case ixgbe_phy_tn:
+		phy->ops.setup_link = &ixgbe_setup_phy_link_tnx;
 		phy->ops.check_link = &ixgbe_check_phy_link_tnx;
 		phy->ops.get_firmware_version =
 		             &ixgbe_get_phy_firmware_version_tnx;
 		break;
 	case ixgbe_phy_aq:
 		phy->ops.get_firmware_version =
-		             &ixgbe_get_phy_firmware_version_aq;
+		             &ixgbe_get_phy_firmware_version_generic;
 		break;
 	case ixgbe_phy_nl:
 		phy->ops.reset = &ixgbe_reset_phy_nl;
@@ -220,6 +268,46 @@ out:
 	return ret_val;
 }
 
+/**
+ *  ixgbe_start_hw_82598 - Prepare hardware for Tx/Rx
+ *  @hw: pointer to hardware structure
+ *
+ *  Starts the hardware using the generic start_hw function.
+ *  Then set pcie completion timeout
+ **/
+s32 ixgbe_start_hw_82598(struct ixgbe_hw *hw)
+{
+	u32 regval;
+	u32 i;
+	s32 ret_val = IXGBE_SUCCESS;
+
+	DEBUGFUNC("ixgbe_start_hw_82598");
+
+	ret_val = ixgbe_start_hw_generic(hw);
+
+	/* Disable relaxed ordering */
+	for (i = 0; ((i < hw->mac.max_tx_queues) &&
+		     (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
+		regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL(i));
+		regval &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
+		IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL(i), regval);
+	}
+
+	for (i = 0; ((i < hw->mac.max_rx_queues) &&
+		     (i < IXGBE_DCA_MAX_QUEUES_82598)); i++) {
+		regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
+		regval &= ~(IXGBE_DCA_RXCTRL_DESC_WRO_EN |
+			    IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
+		IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
+	}
+
+	/* set the completion timeout for interface */
+	if (ret_val == IXGBE_SUCCESS)
+		ixgbe_set_pcie_completion_timeout(hw);
+
+	return ret_val;
+}
+
 /**
  *  ixgbe_get_link_capabilities_82598 - Determines link capabilities
  *  @hw: pointer to hardware structure
@@ -235,6 +323,8 @@ static s32 ixgbe_get_link_capabilities_82598(struct ixgbe_hw *hw,
 	s32 status = IXGBE_SUCCESS;
 	u32 autoc = 0;
 
+	DEBUGFUNC("ixgbe_get_link_capabilities_82598");
+
 	/*
 	 * Determine link capabilities based on the stored value of AUTOC,
 	 * which represents EEPROM defaults.  If AUTOC value has not been
@@ -289,6 +379,8 @@ static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw)
 {
 	enum ixgbe_media_type media_type;
 
+	DEBUGFUNC("ixgbe_get_media_type_82598");
+
 	/* Detect if there is a copper PHY attached. */
 	if (hw->phy.type == ixgbe_phy_cu_unknown ||
 	    hw->phy.type == ixgbe_phy_tn ||
@@ -306,15 +398,18 @@ static enum ixgbe_media_type ixgbe_get_media_type_82598(struct ixgbe_hw *hw)
 		break;
 	case IXGBE_DEV_ID_82598AF_DUAL_PORT:
 	case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
-	case IXGBE_DEV_ID_82598EB_CX4:
-	case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
 	case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
 	case IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM:
 	case IXGBE_DEV_ID_82598EB_XF_LR:
 	case IXGBE_DEV_ID_82598EB_SFP_LOM:
 		media_type = ixgbe_media_type_fiber;
 		break;
+	case IXGBE_DEV_ID_82598EB_CX4:
+	case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
+		media_type = ixgbe_media_type_cx4;
+		break;
 	case IXGBE_DEV_ID_82598AT:
+	case IXGBE_DEV_ID_82598AT2:
 		media_type = ixgbe_media_type_copper;
 		break;
 	default:
@@ -338,9 +433,23 @@ s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
 	u32 fctrl_reg;
 	u32 rmcs_reg;
 	u32 reg;
+	u32 link_speed = 0;
+	bool link_up;
 
 	DEBUGFUNC("ixgbe_fc_enable_82598");
 
+	/*
+	 * On 82598 backplane having FC on causes resets while doing
+	 * KX, so turn off here.
+	 */
+	hw->mac.ops.check_link(hw, &link_speed, &link_up, FALSE);
+	if (link_up &&
+	    link_speed == IXGBE_LINK_SPEED_1GB_FULL &&
+	    hw->mac.ops.get_media_type(hw) == ixgbe_media_type_backplane) {
+		hw->fc.disable_fc_autoneg = TRUE;
+		hw->fc.requested_mode = ixgbe_fc_none;
+	}
+
 	/* Negotiate the fc mode to use */
 	ret_val = ixgbe_fc_autoneg(hw);
 	if (ret_val)
@@ -394,7 +503,7 @@ s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num)
 		break;
 	default:
 		DEBUGOUT("Flow control param set incorrectly\n");
-		ret_val = -IXGBE_ERR_CONFIG;
+		ret_val = IXGBE_ERR_CONFIG;
 		goto out;
 		break;
 	}
@@ -433,26 +542,29 @@ out:
 }
 
 /**
- *  ixgbe_setup_mac_link_82598 - Configures MAC link settings
+ *  ixgbe_start_mac_link_82598 - Configures MAC link settings
  *  @hw: pointer to hardware structure
  *
  *  Configures link settings based on values in the ixgbe_hw struct.
  *  Restarts the link.  Performs autonegotiation if needed.
  **/
-static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw)
+static s32 ixgbe_start_mac_link_82598(struct ixgbe_hw *hw,
+	                               bool autoneg_wait_to_complete)
 {
 	u32 autoc_reg;
 	u32 links_reg;
 	u32 i;
 	s32 status = IXGBE_SUCCESS;
 
+	DEBUGFUNC("ixgbe_start_mac_link_82598");
+
 	/* Restart link */
 	autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
 	autoc_reg |= IXGBE_AUTOC_AN_RESTART;
 	IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
 
 	/* Only poll for autoneg to complete if specified to do so */
-	if (hw->phy.autoneg_wait_to_complete) {
+	if (autoneg_wait_to_complete) {
 		if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
 		     IXGBE_AUTOC_LMS_KX4_AN ||
 		    (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
@@ -494,6 +606,8 @@ static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
 	u32 i;
 	u16 link_reg, adapt_comp_reg;
 
+	DEBUGFUNC("ixgbe_check_mac_link_82598");
+
 	/*
 	 * SERDES PHY requires us to read link status from undocumented
 	 * register 0xC79F.  Bit 0 set indicates link is up/ready; clear
@@ -558,17 +672,22 @@ static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw,
 	else
 		*speed = IXGBE_LINK_SPEED_1GB_FULL;
 
+	if ((hw->device_id == IXGBE_DEV_ID_82598AT2) && (*link_up == TRUE) &&
+	     (ixgbe_validate_link_ready(hw) != IXGBE_SUCCESS))
+		*link_up = FALSE;
+
 	/* if link is down, zero out the current_mode */
 	if (*link_up == FALSE) {
 		hw->fc.current_mode = ixgbe_fc_none;
 		hw->fc.fc_was_autonegged = FALSE;
 	}
+
 out:
 	return IXGBE_SUCCESS;
 }
 
 /**
- *  ixgbe_setup_mac_link_speed_82598 - Set MAC link speed
+ *  ixgbe_setup_mac_link_82598 - Set MAC link speed
  *  @hw: pointer to hardware structure
  *  @speed: new link speed
  *  @autoneg: TRUE if autonegotiation enabled
@@ -576,7 +695,7 @@ out:
  *
  *  Set the link speed in the AUTOC register and restarts link.
  **/
-static s32 ixgbe_setup_mac_link_speed_82598(struct ixgbe_hw *hw,
+static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw,
                                            ixgbe_link_speed speed, bool autoneg,
                                            bool autoneg_wait_to_complete)
 {
@@ -586,6 +705,8 @@ static s32 ixgbe_setup_mac_link_speed_82598(struct ixgbe_hw *hw,
 	u32              autoc             = curr_autoc;
 	u32              link_mode         = autoc & IXGBE_AUTOC_LMS_MASK;
 
+	DEBUGFUNC("ixgbe_setup_mac_link_82598");
+
 	/* Check to see if speed passed in is supported. */
 	ixgbe_get_link_capabilities(hw, &link_capabilities, &autoneg);
 	speed &= link_capabilities;
@@ -606,14 +727,13 @@ static s32 ixgbe_setup_mac_link_speed_82598(struct ixgbe_hw *hw,
 	}
 
 	if (status == IXGBE_SUCCESS) {
-		hw->phy.autoneg_wait_to_complete = autoneg_wait_to_complete;
-
 		/*
 		 * Setup and restart the link based on the new values in
 		 * ixgbe_hw This will write the AUTOC register based on the new
 		 * stored values
 		 */
-		status = ixgbe_setup_mac_link_82598(hw);
+		status = ixgbe_start_mac_link_82598(hw,
+		                                    autoneg_wait_to_complete);
 	}
 
 	return status;
@@ -621,29 +741,7 @@ static s32 ixgbe_setup_mac_link_speed_82598(struct ixgbe_hw *hw,
 
 
 /**
- *  ixgbe_setup_copper_link_82598 - Setup copper link settings
- *  @hw: pointer to hardware structure
- *
- *  Configures link settings based on values in the ixgbe_hw struct.
- *  Restarts the link.  Performs autonegotiation if needed.  Restart
- *  phy and wait for autonegotiate to finish.  Then synchronize the
- *  MAC and PHY.
- **/
-static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw)
-{
-	s32 status;
-
-	/* Restart autonegotiation on PHY */
-	status = hw->phy.ops.setup_link(hw);
-
-	/* Set up MAC */
-	ixgbe_setup_mac_link_82598(hw);
-
-	return status;
-}
-
-/**
- *  ixgbe_setup_copper_link_speed_82598 - Set the PHY autoneg advertised field
+ *  ixgbe_setup_copper_link_82598 - Set the PHY autoneg advertised field
  *  @hw: pointer to hardware structure
  *  @speed: new link speed
  *  @autoneg: TRUE if autonegotiation enabled
@@ -651,18 +749,20 @@ static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw)
  *
  *  Sets the link speed in the AUTOC register in the MAC and restarts link.
  **/
-static s32 ixgbe_setup_copper_link_speed_82598(struct ixgbe_hw *hw,
+static s32 ixgbe_setup_copper_link_82598(struct ixgbe_hw *hw,
                                                ixgbe_link_speed speed,
                                                bool autoneg,
                                                bool autoneg_wait_to_complete)
 {
 	s32 status;
 
+	DEBUGFUNC("ixgbe_setup_copper_link_82598");
+
 	/* Setup the PHY according to input speed */
 	status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
 	                                      autoneg_wait_to_complete);
 	/* Set up MAC */
-	ixgbe_setup_mac_link_82598(hw);
+	ixgbe_start_mac_link_82598(hw, autoneg_wait_to_complete);
 
 	return status;
 }
@@ -685,6 +785,8 @@ static s32 ixgbe_reset_hw_82598(struct ixgbe_hw *hw)
 	u32 autoc;
 	u8  analog_val;
 
+	DEBUGFUNC("ixgbe_reset_hw_82598");
+
 	/* Call adapter stop to disable tx/rx and clear interrupts */
 	hw->mac.ops.stop_adapter(hw);
 
@@ -811,6 +913,8 @@ s32 ixgbe_set_vmdq_82598(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
 {
 	u32 rar_high;
 
+	DEBUGFUNC("ixgbe_set_vmdq_82598");
+
 	rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
 	rar_high &= ~IXGBE_RAH_VIND_MASK;
 	rar_high |= ((vmdq << IXGBE_RAH_VIND_SHIFT) & IXGBE_RAH_VIND_MASK);
@@ -861,6 +965,8 @@ s32 ixgbe_set_vfta_82598(struct ixgbe_hw *hw, u32 vlan, u32 vind,
 	u32 bits;
 	u32 vftabyte;
 
+	DEBUGFUNC("ixgbe_set_vfta_82598");
+
 	if (vlan > 4095)
 		return IXGBE_ERR_PARAM;
 
@@ -903,6 +1009,8 @@ static s32 ixgbe_clear_vfta_82598(struct ixgbe_hw *hw)
 	u32 offset;
 	u32 vlanbyte;
 
+	DEBUGFUNC("ixgbe_clear_vfta_82598");
+
 	for (offset = 0; offset < hw->mac.vft_size; offset++)
 		IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
 
@@ -926,6 +1034,8 @@ s32 ixgbe_read_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 *val)
 {
 	u32  atlas_ctl;
 
+	DEBUGFUNC("ixgbe_read_analog_reg8_82598");
+
 	IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL,
 	                IXGBE_ATLASCTL_WRITE_CMD | (reg << 8));
 	IXGBE_WRITE_FLUSH(hw);
@@ -948,6 +1058,8 @@ s32 ixgbe_write_analog_reg8_82598(struct ixgbe_hw *hw, u32 reg, u8 val)
 {
 	u32  atlas_ctl;
 
+	DEBUGFUNC("ixgbe_write_analog_reg8_82598");
+
 	atlas_ctl = (reg << 8) | val;
 	IXGBE_WRITE_REG(hw, IXGBE_ATLASCTL, atlas_ctl);
 	IXGBE_WRITE_FLUSH(hw);
@@ -973,6 +1085,8 @@ s32 ixgbe_read_i2c_eeprom_82598(struct ixgbe_hw *hw, u8 byte_offset,
 	u16 sfp_stat = 0;
 	u32 i;
 
+	DEBUGFUNC("ixgbe_read_i2c_eeprom_82598");
+
 	if (hw->phy.type == ixgbe_phy_nl) {
 		/*
 		 * NetLogic phy SDA/SCL registers are at addresses 0xC30A to
@@ -1032,6 +1146,8 @@ u32 ixgbe_get_supported_physical_layer_82598(struct ixgbe_hw *hw)
 	u32 pma_pmd_1g = autoc & IXGBE_AUTOC_1G_PMA_PMD_MASK;
 	u16 ext_ability = 0;
 
+	DEBUGFUNC("ixgbe_get_supported_physical_layer_82598");
+
 	hw->phy.ops.identify(hw);
 
 	/* Copper PHY must be checked before AUTOC LMS to determine correct
@@ -1128,6 +1244,8 @@ void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw)
 	struct ixgbe_bus_info *bus = &hw->bus;
 	u16 pci_gen, pci_ctrl2;
 
+	DEBUGFUNC("ixgbe_set_lan_id_multi_port_pcie_82598");
+
 	ixgbe_set_lan_id_multi_port_pcie(hw);
 
 	/* check if LAN0 is disabled */
@@ -1146,4 +1264,38 @@ void ixgbe_set_lan_id_multi_port_pcie_82598(struct ixgbe_hw *hw)
 	}
 }
 
+/**
+ *  ixgbe_validate_link_ready - Function looks for phy link
+ *  @hw: pointer to hardware structure
+ *
+ *  Function indicates success when phy link is available. If phy is not ready
+ *  within 5 seconds of MAC indicating link, the function returns error.
+ **/
+static s32 ixgbe_validate_link_ready(struct ixgbe_hw *hw)
+{
+	u32 timeout;
+	u16 an_reg;
+
+	if (hw->device_id != IXGBE_DEV_ID_82598AT2)
+		return IXGBE_SUCCESS;
+
+	for (timeout = 0;
+	     timeout < IXGBE_VALIDATE_LINK_READY_TIMEOUT; timeout++) {
+		hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
+		                     IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &an_reg);
+
+		if ((an_reg & IXGBE_MII_AUTONEG_COMPLETE) &&
+		    (an_reg & IXGBE_MII_AUTONEG_LINK_UP))
+			break;
+
+		msec_delay(100);
+	}
+
+	if (timeout == IXGBE_VALIDATE_LINK_READY_TIMEOUT) {
+		DEBUGOUT("Link was indicated but link is down\n");
+		return IXGBE_ERR_LINK_SETUP;
+	}
+
+	return IXGBE_SUCCESS;
+}
 
diff --git a/sys/dev/ixgbe/ixgbe_82599.c b/sys/dev/ixgbe/ixgbe_82599.c
index c3d23afde55..97b655a26ac 100644
--- a/sys/dev/ixgbe/ixgbe_82599.c
+++ b/sys/dev/ixgbe/ixgbe_82599.c
@@ -37,39 +37,30 @@
 #include "ixgbe_common.h"
 #include "ixgbe_phy.h"
 
-u32 ixgbe_get_pcie_msix_count_82599(struct ixgbe_hw *hw);
 s32 ixgbe_init_ops_82599(struct ixgbe_hw *hw);
 s32 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw,
                                       ixgbe_link_speed *speed,
                                       bool *autoneg);
 enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw);
-s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw);
-s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
+s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
                                      ixgbe_link_speed speed, bool autoneg,
                                      bool autoneg_wait_to_complete);
-s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw);
-s32 ixgbe_check_mac_link_82599(struct ixgbe_hw *hw,
-                               ixgbe_link_speed *speed,
-                               bool *link_up, bool link_up_wait_to_complete);
-s32 ixgbe_setup_mac_link_speed_82599(struct ixgbe_hw *hw,
+s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
+				     ixgbe_link_speed speed, bool autoneg,
+				     bool autoneg_wait_to_complete);
+s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw,
+				bool autoneg_wait_to_complete);
+s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
                                      ixgbe_link_speed speed,
                                      bool autoneg,
                                      bool autoneg_wait_to_complete);
-static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw);
-static s32 ixgbe_setup_copper_link_speed_82599(struct ixgbe_hw *hw,
+static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
                                                ixgbe_link_speed speed,
                                                bool autoneg,
                                                bool autoneg_wait_to_complete);
 s32 ixgbe_setup_sfp_modules_82599(struct ixgbe_hw *hw);
 void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw);
 s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw);
-s32 ixgbe_set_vmdq_82599(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
-s32 ixgbe_clear_vmdq_82599(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
-s32 ixgbe_insert_mac_addr_82599(struct ixgbe_hw *hw, u8 *addr, u32 vmdq);
-s32 ixgbe_set_vfta_82599(struct ixgbe_hw *hw, u32 vlan,
-                         u32 vind, bool vlan_on);
-s32 ixgbe_clear_vfta_82599(struct ixgbe_hw *hw);
-s32 ixgbe_init_uta_tables_82599(struct ixgbe_hw *hw);
 s32 ixgbe_read_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 *val);
 s32 ixgbe_write_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 val);
 s32 ixgbe_start_hw_rev_1_82599(struct ixgbe_hw *hw);
@@ -77,14 +68,9 @@ s32 ixgbe_identify_phy_82599(struct ixgbe_hw *hw);
 s32 ixgbe_init_phy_ops_82599(struct ixgbe_hw *hw);
 u32 ixgbe_get_supported_physical_layer_82599(struct ixgbe_hw *hw);
 s32 ixgbe_enable_rx_dma_82599(struct ixgbe_hw *hw, u32 regval);
-s32 ixgbe_get_san_mac_addr_offset_82599(struct ixgbe_hw *hw,
-                                        u16 *san_mac_offset);
-s32 ixgbe_get_san_mac_addr_82599(struct ixgbe_hw *hw, u8 *san_mac_addr);
-s32 ixgbe_set_san_mac_addr_82599(struct ixgbe_hw *hw, u8 *san_mac_addr);
 s32 ixgbe_get_device_caps_82599(struct ixgbe_hw *hw, u16 *device_caps);
 static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw);
 
-
 void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
 {
 	struct ixgbe_mac_info *mac = &hw->mac;
@@ -93,15 +79,14 @@ void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
 
 	if (hw->phy.multispeed_fiber) {
 		/* Set up dual speed SFP+ support */
-		mac->ops.setup_link =
-		          &ixgbe_setup_mac_link_multispeed_fiber;
-		mac->ops.setup_link_speed =
-		          &ixgbe_setup_mac_link_speed_multispeed_fiber;
+		mac->ops.setup_link = &ixgbe_setup_mac_link_multispeed_fiber;
 	} else {
-		mac->ops.setup_link =
-			&ixgbe_setup_mac_link_82599;
-		mac->ops.setup_link_speed =
-		          &ixgbe_setup_mac_link_speed_82599;
+		if ((ixgbe_get_media_type(hw) == ixgbe_media_type_backplane) &&
+		     (hw->phy.smart_speed == ixgbe_smart_speed_auto ||
+		      hw->phy.smart_speed == ixgbe_smart_speed_on))
+			mac->ops.setup_link = &ixgbe_setup_mac_link_smartspeed;
+		else
+			mac->ops.setup_link = &ixgbe_setup_mac_link_82599;
 	}
 }
 
@@ -135,8 +120,6 @@ s32 ixgbe_init_phy_ops_82599(struct ixgbe_hw *hw)
 	/* If copper media, overwrite with copper function pointers */
 	if (mac->ops.get_media_type(hw) == ixgbe_media_type_copper) {
 		mac->ops.setup_link = &ixgbe_setup_copper_link_82599;
-		mac->ops.setup_link_speed =
-		                     &ixgbe_setup_copper_link_speed_82599;
 		mac->ops.get_link_capabilities =
 		                  &ixgbe_get_copper_link_capabilities_generic;
 	}
@@ -144,13 +127,14 @@ s32 ixgbe_init_phy_ops_82599(struct ixgbe_hw *hw)
 	/* Set necessary function pointers based on phy type */
 	switch (hw->phy.type) {
 	case ixgbe_phy_tn:
+		phy->ops.setup_link = &ixgbe_setup_phy_link_tnx;
 		phy->ops.check_link = &ixgbe_check_phy_link_tnx;
 		phy->ops.get_firmware_version =
 		             &ixgbe_get_phy_firmware_version_tnx;
 		break;
 	case ixgbe_phy_aq:
 		phy->ops.get_firmware_version =
-		             &ixgbe_get_phy_firmware_version_aq;
+		             &ixgbe_get_phy_firmware_version_generic;
 		break;
 	default:
 		break;
@@ -203,30 +187,6 @@ setup_sfp_out:
 	return ret_val;
 }
 
-/**
- *  ixgbe_get_pcie_msix_count_82599 - Gets MSI-X vector count
- *  @hw: pointer to hardware structure
- *
- *  Read PCIe configuration space, and get the MSI-X vector count from
- *  the capabilities table.
- **/
-u32 ixgbe_get_pcie_msix_count_82599(struct ixgbe_hw *hw)
-{
-	u32 msix_count = 64;
-
-	if (hw->mac.msix_vectors_from_pcie) {
-		msix_count = IXGBE_READ_PCIE_WORD(hw,
-		                                  IXGBE_PCIE_MSIX_82599_CAPS);
-		msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK;
-
-		/* MSI-X count is zero-based in HW, so increment to give
-		 * proper value */
-		msix_count++;
-	}
-
-	return msix_count;
-}
-
 /**
  *  ixgbe_init_ops_82599 - Inits func ptrs and MAC type
  *  @hw: pointer to hardware structure
@@ -241,6 +201,8 @@ s32 ixgbe_init_ops_82599(struct ixgbe_hw *hw)
 	struct ixgbe_phy_info *phy = &hw->phy;
 	s32 ret_val;
 
+	DEBUGFUNC("ixgbe_init_ops_82599");
+
 	ret_val = ixgbe_init_phy_ops_generic(hw);
 	ret_val = ixgbe_init_ops_generic(hw);
 
@@ -257,23 +219,24 @@ s32 ixgbe_init_ops_82599(struct ixgbe_hw *hw)
 	mac->ops.read_analog_reg8 = &ixgbe_read_analog_reg8_82599;
 	mac->ops.write_analog_reg8 = &ixgbe_write_analog_reg8_82599;
 	mac->ops.start_hw = &ixgbe_start_hw_rev_1_82599;
-	mac->ops.get_san_mac_addr = &ixgbe_get_san_mac_addr_82599;
-	mac->ops.set_san_mac_addr = &ixgbe_set_san_mac_addr_82599;
+	mac->ops.get_san_mac_addr = &ixgbe_get_san_mac_addr_generic;
+	mac->ops.set_san_mac_addr = &ixgbe_set_san_mac_addr_generic;
 	mac->ops.get_device_caps = &ixgbe_get_device_caps_82599;
+	mac->ops.get_wwn_prefix = &ixgbe_get_wwn_prefix_generic;
 
 	/* RAR, Multicast, VLAN */
-	mac->ops.set_vmdq = &ixgbe_set_vmdq_82599;
-	mac->ops.clear_vmdq = &ixgbe_clear_vmdq_82599;
-	mac->ops.insert_mac_addr = &ixgbe_insert_mac_addr_82599;
+	mac->ops.set_vmdq = &ixgbe_set_vmdq_generic;
+	mac->ops.clear_vmdq = &ixgbe_clear_vmdq_generic;
+	mac->ops.insert_mac_addr = &ixgbe_insert_mac_addr_generic;
 	mac->rar_highwater = 1;
-	mac->ops.set_vfta = &ixgbe_set_vfta_82599;
-	mac->ops.clear_vfta = &ixgbe_clear_vfta_82599;
-	mac->ops.init_uta_tables = &ixgbe_init_uta_tables_82599;
+	mac->ops.set_vfta = &ixgbe_set_vfta_generic;
+	mac->ops.clear_vfta = &ixgbe_clear_vfta_generic;
+	mac->ops.init_uta_tables = &ixgbe_init_uta_tables_generic;
 	mac->ops.setup_sfp = &ixgbe_setup_sfp_modules_82599;
 
 	/* Link */
 	mac->ops.get_link_capabilities = &ixgbe_get_link_capabilities_82599;
-	mac->ops.check_link            = &ixgbe_check_mac_link_82599;
+	mac->ops.check_link            = &ixgbe_check_mac_link_generic;
 	ixgbe_init_mac_link_ops_82599(hw);
 
 	mac->mcft_size        = 128;
@@ -281,7 +244,7 @@ s32 ixgbe_init_ops_82599(struct ixgbe_hw *hw)
 	mac->num_rar_entries  = 128;
 	mac->max_tx_queues    = 128;
 	mac->max_rx_queues    = 128;
-	mac->max_msix_vectors = ixgbe_get_pcie_msix_count_82599(hw);
+	mac->max_msix_vectors = ixgbe_get_pcie_msix_count_generic(hw);
 
 
 	return ret_val;
@@ -302,6 +265,8 @@ s32 ixgbe_get_link_capabilities_82599(struct ixgbe_hw *hw,
 	s32 status = IXGBE_SUCCESS;
 	u32 autoc = 0;
 
+	DEBUGFUNC("ixgbe_get_link_capabilities_82599");
+
 	/*
 	 * Determine link capabilities based on the stored value of AUTOC,
 	 * which represents EEPROM defaults.  If AUTOC value has not
@@ -387,6 +352,8 @@ enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw)
 {
 	enum ixgbe_media_type media_type;
 
+	DEBUGFUNC("ixgbe_get_media_type_82599");
+
 	/* Detect if there is a copper PHY attached. */
 	if (hw->phy.type == ixgbe_phy_cu_unknown ||
 	    hw->phy.type == ixgbe_phy_tn ||
@@ -397,6 +364,8 @@ enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw)
 
 	switch (hw->device_id) {
 	case IXGBE_DEV_ID_82599_KX4:
+	case IXGBE_DEV_ID_82599_KX4_MEZZ:
+	case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
 	case IXGBE_DEV_ID_82599_XAUI_LOM:
 		/* Default device ID is mezzanine card KX/KX4 */
 		media_type = ixgbe_media_type_backplane;
@@ -405,7 +374,7 @@ enum ixgbe_media_type ixgbe_get_media_type_82599(struct ixgbe_hw *hw)
 		media_type = ixgbe_media_type_fiber;
 		break;
 	case IXGBE_DEV_ID_82599_CX4:
-		media_type = ixgbe_media_type_fiber;
+		media_type = ixgbe_media_type_cx4;
 		break;
 	default:
 		media_type = ixgbe_media_type_unknown;
@@ -416,19 +385,22 @@ out:
 }
 
 /**
- *  ixgbe_setup_mac_link_82599 - Setup MAC link settings
+ *  ixgbe_start_mac_link_82599 - Setup MAC link settings
  *  @hw: pointer to hardware structure
  *
  *  Configures link settings based on values in the ixgbe_hw struct.
  *  Restarts the link.  Performs autonegotiation if needed.
  **/
-s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw)
+s32 ixgbe_start_mac_link_82599(struct ixgbe_hw *hw,
+                               bool autoneg_wait_to_complete)
 {
 	u32 autoc_reg;
 	u32 links_reg;
 	u32 i;
 	s32 status = IXGBE_SUCCESS;
 
+	DEBUGFUNC("ixgbe_start_mac_link_82599");
+
 
 	/* Restart link */
 	autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
@@ -436,7 +408,7 @@ s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw)
 	IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg);
 
 	/* Only poll for autoneg to complete if specified to do so */
-	if (hw->phy.autoneg_wait_to_complete) {
+	if (autoneg_wait_to_complete) {
 		if ((autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
 		     IXGBE_AUTOC_LMS_KX4_KX_KR ||
 		    (autoc_reg & IXGBE_AUTOC_LMS_MASK) ==
@@ -464,27 +436,7 @@ s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw)
 }
 
 /**
- *  ixgbe_setup_mac_link_multispeed_fiber - Setup MAC link settings
- *  @hw: pointer to hardware structure
- *
- *  Configures link settings based on values in the ixgbe_hw struct.
- *  Restarts the link for multi-speed fiber at 1G speed, if link
- *  fails at 10G.
- *  Performs autonegotiation if needed.
- **/
-s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw)
-{
-	s32 status = IXGBE_SUCCESS;
-	ixgbe_link_speed link_speed = IXGBE_LINK_SPEED_82599_AUTONEG;
-	DEBUGFUNC("ixgbe_setup_mac_link_multispeed_fiber");
-
-	status = ixgbe_setup_mac_link_speed_multispeed_fiber(hw,
-	                                               link_speed, TRUE, true);
-	return status;
-}
-
-/**
- *  ixgbe_setup_mac_link_speed_multispeed_fiber - Set MAC link speed
+ *  ixgbe_setup_mac_link_multispeed_fiber - Set MAC link speed
  *  @hw: pointer to hardware structure
  *  @speed: new link speed
  *  @autoneg: TRUE if autonegotiation enabled
@@ -492,7 +444,7 @@ s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw)
  *
  *  Set the link speed in the AUTOC register and restarts link.
  **/
-s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
+s32 ixgbe_setup_mac_link_multispeed_fiber(struct ixgbe_hw *hw,
                                      ixgbe_link_speed speed, bool autoneg,
                                      bool autoneg_wait_to_complete)
 {
@@ -505,22 +457,15 @@ s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
 	bool link_up = FALSE;
 	bool negotiation;
 
+	DEBUGFUNC("ixgbe_setup_mac_link_multispeed_fiber");
+
 	/* Mask off requested but non-supported speeds */
 	status = ixgbe_get_link_capabilities(hw, &link_speed, &negotiation);
 	if (status != IXGBE_SUCCESS)
-		goto out;
+		return status;
 
 	speed &= link_speed;
 
-	 /* Set autoneg_advertised value based on input link speed */
-	hw->phy.autoneg_advertised = 0;
-
-	if (speed & IXGBE_LINK_SPEED_10GB_FULL)
-		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
-
-	if (speed & IXGBE_LINK_SPEED_1GB_FULL)
-		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
-
 	/*
 	 * When the driver changes the link speeds that it can support,
 	 * it sets autotry_restart to TRUE to indicate that we need to
@@ -542,7 +487,7 @@ s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
 		/* If we already have link at this speed, just jump out */
 		status = ixgbe_check_link(hw, &link_speed, &link_up, FALSE);
 		if (status != IXGBE_SUCCESS)
-			goto out;
+			return status;
 
 		if ((link_speed == IXGBE_LINK_SPEED_10GB_FULL) && link_up)
 			goto out;
@@ -554,11 +499,11 @@ s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
 		/* Allow module to change analog characteristics (1G->10G) */
 		msec_delay(40);
 
-		status = ixgbe_setup_mac_link_speed_82599(
+		status = ixgbe_setup_mac_link_82599(
 			hw, IXGBE_LINK_SPEED_10GB_FULL, autoneg,
 			autoneg_wait_to_complete);
 		if (status != IXGBE_SUCCESS)
-			goto out;
+			return status;
 
 		/* Flap the tx laser if it has not already been done */
 		if (hw->mac.autotry_restart) {
@@ -575,7 +520,11 @@ s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
 			hw->mac.autotry_restart = FALSE;
 		}
 
-		/* The controller may take up to 500ms at 10g to acquire link */
+		/*
+		 * Wait for the controller to acquire link.  Per IEEE 802.3ap,
+		 * Section 73.10.2, we may have to wait up to 500ms if KR is
+		 * attempted.  82599 uses the same timing for 10g SFI.
+		 */
 		for (i = 0; i < 5; i++) {
 			/* Wait for the link partner to also set speed */
 			msec_delay(100);
@@ -584,7 +533,7 @@ s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
 			status = ixgbe_check_link(hw, &link_speed,
 			                          &link_up, FALSE);
 			if (status != IXGBE_SUCCESS)
-				goto out;
+				return status;
 
 			if (link_up)
 				goto out;
@@ -599,7 +548,7 @@ s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
 		/* If we already have link at this speed, just jump out */
 		status = ixgbe_check_link(hw, &link_speed, &link_up, FALSE);
 		if (status != IXGBE_SUCCESS)
-			goto out;
+			return status;
 
 		if ((link_speed == IXGBE_LINK_SPEED_1GB_FULL) && link_up)
 			goto out;
@@ -612,11 +561,11 @@ s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
 		/* Allow module to change analog characteristics (10G->1G) */
 		msec_delay(40);
 
-		status = ixgbe_setup_mac_link_speed_82599(
+		status = ixgbe_setup_mac_link_82599(
 			hw, IXGBE_LINK_SPEED_1GB_FULL, autoneg,
 			autoneg_wait_to_complete);
 		if (status != IXGBE_SUCCESS)
-			goto out;
+			return status;
 
 		/* Flap the tx laser if it has not already been done */
 		if (hw->mac.autotry_restart) {
@@ -639,7 +588,7 @@ s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
 		/* If we have link, just jump out */
 		status = ixgbe_check_link(hw, &link_speed, &link_up, FALSE);
 		if (status != IXGBE_SUCCESS)
-			goto out;
+			return status;
 
 		if (link_up)
 			goto out;
@@ -651,67 +600,134 @@ s32 ixgbe_setup_mac_link_speed_multispeed_fiber(struct ixgbe_hw *hw,
 	 * single highest speed that the user requested.
 	 */
 	if (speedcnt > 1)
-		status = ixgbe_setup_mac_link_speed_multispeed_fiber(hw,
+		status = ixgbe_setup_mac_link_multispeed_fiber(hw,
 		        highest_link_speed, autoneg, autoneg_wait_to_complete);
 
+out:
+	/* Set autoneg_advertised value based on input link speed */
+	hw->phy.autoneg_advertised = 0;
+
+	if (speed & IXGBE_LINK_SPEED_10GB_FULL)
+		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
+
+	if (speed & IXGBE_LINK_SPEED_1GB_FULL)
+		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
+
+	return status;
+}
+
+/**
+ *  ixgbe_setup_mac_link_smartspeed - Set MAC link speed using SmartSpeed
+ *  @hw: pointer to hardware structure
+ *  @speed: new link speed
+ *  @autoneg: TRUE if autonegotiation enabled
+ *  @autoneg_wait_to_complete: TRUE when waiting for completion is needed
+ *
+ *  Implements the Intel SmartSpeed algorithm.
+ **/
+s32 ixgbe_setup_mac_link_smartspeed(struct ixgbe_hw *hw,
+				     ixgbe_link_speed speed, bool autoneg,
+				     bool autoneg_wait_to_complete)
+{
+	s32 status = IXGBE_SUCCESS;
+	ixgbe_link_speed link_speed;
+	s32 i, j;
+	bool link_up = FALSE;
+	u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
+
+	DEBUGFUNC("ixgbe_setup_mac_link_smartspeed");
+
+	 /* Set autoneg_advertised value based on input link speed */
+	hw->phy.autoneg_advertised = 0;
+
+	if (speed & IXGBE_LINK_SPEED_10GB_FULL)
+		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_10GB_FULL;
+
+	if (speed & IXGBE_LINK_SPEED_1GB_FULL)
+		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_1GB_FULL;
+
+	if (speed & IXGBE_LINK_SPEED_100_FULL)
+		hw->phy.autoneg_advertised |= IXGBE_LINK_SPEED_100_FULL;
+
+	/*
+	 * Implement Intel SmartSpeed algorithm.  SmartSpeed will reduce the
+	 * autoneg advertisement if link is unable to be established at the
+	 * highest negotiated rate.  This can sometimes happen due to integrity
+	 * issues with the physical media connection.
+	 */
+
+	/* First, try to get link with full advertisement */
+	hw->phy.smart_speed_active = FALSE;
+	for (j = 0; j < IXGBE_SMARTSPEED_MAX_RETRIES; j++) {
+		status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
+						    autoneg_wait_to_complete);
+		if (status != IXGBE_SUCCESS)
+			goto out;
+
+		/*
+		 * Wait for the controller to acquire link.  Per IEEE 802.3ap,
+		 * Section 73.10.2, we may have to wait up to 500ms if KR is
+		 * attempted, or 200ms if KX/KX4/BX/BX4 is attempted, per
+		 * Table 9 in the AN MAS.
+		 */
+		for (i = 0; i < 5; i++) {
+			msec_delay(100);
+
+			/* If we have link, just jump out */
+			status = ixgbe_check_link(hw, &link_speed, &link_up,
+						  FALSE);
+			if (status != IXGBE_SUCCESS)
+				goto out;
+
+			if (link_up)
+				goto out;
+		}
+	}
+
+	/*
+	 * We didn't get link.  If we advertised KR plus one of KX4/KX
+	 * (or BX4/BX), then disable KR and try again.
+	 */
+	if (((autoc_reg & IXGBE_AUTOC_KR_SUPP) == 0) ||
+	    ((autoc_reg & IXGBE_AUTOC_KX4_KX_SUPP_MASK) == 0))
+		goto out;
+
+	/* Turn SmartSpeed on to disable KR support */
+	hw->phy.smart_speed_active = TRUE;
+	status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
+					    autoneg_wait_to_complete);
+	if (status != IXGBE_SUCCESS)
+		goto out;
+
+	/*
+	 * Wait for the controller to acquire link.  600ms will allow for
+	 * the AN link_fail_inhibit_timer as well for multiple cycles of
+	 * parallel detect, both 10g and 1g. This allows for the maximum
+	 * connect attempts as defined in the AN MAS table 73-7.
+	 */
+	for (i = 0; i < 6; i++) {
+		msec_delay(100);
+
+		/* If we have link, just jump out */
+		status = ixgbe_check_link(hw, &link_speed, &link_up, FALSE);
+		if (status != IXGBE_SUCCESS)
+			goto out;
+
+		if (link_up)
+			goto out;
+	}
+
+	/* We didn't get link.  Turn SmartSpeed back off. */
+	hw->phy.smart_speed_active = FALSE;
+	status = ixgbe_setup_mac_link_82599(hw, speed, autoneg,
+					    autoneg_wait_to_complete);
+
 out:
 	return status;
 }
 
 /**
- *  ixgbe_check_mac_link_82599 - Determine link and speed status
- *  @hw: pointer to hardware structure
- *  @speed: pointer to link speed
- *  @link_up: TRUE when link is up
- *  @link_up_wait_to_complete: bool used to wait for link up or not
- *
- *  Reads the links register to determine if link is up and the current speed
- **/
-s32 ixgbe_check_mac_link_82599(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
-                               bool *link_up, bool link_up_wait_to_complete)
-{
-	u32 links_reg;
-	u32 i;
-
-	links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
-	if (link_up_wait_to_complete) {
-		for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
-			if (links_reg & IXGBE_LINKS_UP) {
-				*link_up = TRUE;
-				break;
-			} else {
-				*link_up = FALSE;
-			}
-			msec_delay(100);
-			links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
-		}
-	} else {
-		if (links_reg & IXGBE_LINKS_UP)
-			*link_up = TRUE;
-		else
-			*link_up = FALSE;
-	}
-
-	if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
-	    IXGBE_LINKS_SPEED_10G_82599)
-		*speed = IXGBE_LINK_SPEED_10GB_FULL;
-	else if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
-	         IXGBE_LINKS_SPEED_1G_82599)
-		*speed = IXGBE_LINK_SPEED_1GB_FULL;
-	else
-		*speed = IXGBE_LINK_SPEED_100_FULL;
-
-	/* if link is down, zero out the current_mode */
-	if (*link_up == FALSE) {
-		hw->fc.current_mode = ixgbe_fc_none;
-		hw->fc.fc_was_autonegged = FALSE;
-	}
-
-	return IXGBE_SUCCESS;
-}
-
-/**
- *  ixgbe_setup_mac_link_speed_82599 - Set MAC link speed
+ *  ixgbe_setup_mac_link_82599 - Set MAC link speed
  *  @hw: pointer to hardware structure
  *  @speed: new link speed
  *  @autoneg: TRUE if autonegotiation enabled
@@ -719,7 +735,7 @@ s32 ixgbe_check_mac_link_82599(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
  *
  *  Set the link speed in the AUTOC register and restarts link.
  **/
-s32 ixgbe_setup_mac_link_speed_82599(struct ixgbe_hw *hw,
+s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw,
                                      ixgbe_link_speed speed, bool autoneg,
                                      bool autoneg_wait_to_complete)
 {
@@ -735,6 +751,8 @@ s32 ixgbe_setup_mac_link_speed_82599(struct ixgbe_hw *hw,
 	u32 i;
 	ixgbe_link_speed link_capabilities = IXGBE_LINK_SPEED_UNKNOWN;
 
+	DEBUGFUNC("ixgbe_setup_mac_link_82599");
+
 	/* Check to see if speed passed in is supported. */
 	status = ixgbe_get_link_capabilities(hw, &link_capabilities, &autoneg);
 	if (status != IXGBE_SUCCESS)
@@ -761,7 +779,8 @@ s32 ixgbe_setup_mac_link_speed_82599(struct ixgbe_hw *hw,
 		if (speed & IXGBE_LINK_SPEED_10GB_FULL)
 			if (orig_autoc & IXGBE_AUTOC_KX4_SUPP)
 				autoc |= IXGBE_AUTOC_KX4_SUPP;
-			if (orig_autoc & IXGBE_AUTOC_KR_SUPP)
+			if ((orig_autoc & IXGBE_AUTOC_KR_SUPP) &&
+			    (hw->phy.smart_speed_active == FALSE))
 				autoc |= IXGBE_AUTOC_KR_SUPP;
 		if (speed & IXGBE_LINK_SPEED_1GB_FULL)
 			autoc |= IXGBE_AUTOC_KX_SUPP;
@@ -823,26 +842,7 @@ out:
 }
 
 /**
- *  ixgbe_setup_copper_link_82599 - Setup copper link settings
- *  @hw: pointer to hardware structure
- *
- *  Restarts the link on PHY and then MAC. Performs autonegotiation if needed.
- **/
-static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw)
-{
-	s32 status;
-
-	/* Restart autonegotiation on PHY */
-	status = hw->phy.ops.setup_link(hw);
-
-	/* Set up MAC */
-	ixgbe_setup_mac_link_82599(hw);
-
-	return status;
-}
-
-/**
- *  ixgbe_setup_copper_link_speed_82599 - Set the PHY autoneg advertised field
+ *  ixgbe_setup_copper_link_82599 - Set the PHY autoneg advertised field
  *  @hw: pointer to hardware structure
  *  @speed: new link speed
  *  @autoneg: TRUE if autonegotiation enabled
@@ -850,18 +850,20 @@ static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw)
  *
  *  Restarts link on PHY and MAC based on settings passed in.
  **/
-static s32 ixgbe_setup_copper_link_speed_82599(struct ixgbe_hw *hw,
+static s32 ixgbe_setup_copper_link_82599(struct ixgbe_hw *hw,
                                                ixgbe_link_speed speed,
                                                bool autoneg,
                                                bool autoneg_wait_to_complete)
 {
 	s32 status;
 
+	DEBUGFUNC("ixgbe_setup_copper_link_82599");
+
 	/* Setup the PHY according to input speed */
 	status = hw->phy.ops.setup_link_speed(hw, speed, autoneg,
 	                                      autoneg_wait_to_complete);
 	/* Set up MAC */
-	ixgbe_setup_mac_link_82599(hw);
+	ixgbe_start_mac_link_82599(hw, autoneg_wait_to_complete);
 
 	return status;
 }
@@ -881,6 +883,8 @@ s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
 	u32 autoc;
 	u32 autoc2;
 
+	DEBUGFUNC("ixgbe_reset_hw_82599");
+
 	/* Call adapter stop to disable tx/rx and clear interrupts */
 	hw->mac.ops.stop_adapter(hw);
 
@@ -892,7 +896,6 @@ s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
 	if (status == IXGBE_ERR_SFP_NOT_SUPPORTED)
 		goto reset_hw_out;
 
-
 	/* Setup SFP module if there is one present. */
 	if (hw->phy.sfp_setup_needed) {
 		status = hw->mac.ops.setup_sfp(hw);
@@ -942,8 +945,6 @@ s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
 
 	msec_delay(50);
 
-
-
 	/*
 	 * Store the original AUTOC/AUTOC2 values if they have not been
 	 * stored off yet.  Otherwise restore the stored original
@@ -994,310 +995,14 @@ s32 ixgbe_reset_hw_82599(struct ixgbe_hw *hw)
 		hw->mac.num_rar_entries--;
        }
 
+	/* Store the alternative WWNN/WWPN prefix */
+	hw->mac.ops.get_wwn_prefix(hw, &hw->mac.wwnn_prefix,
+	                               &hw->mac.wwpn_prefix);
+
 reset_hw_out:
 	return status;
 }
 
-/**
- *  ixgbe_insert_mac_addr_82599 - Find a RAR for this mac address
- *  @hw: pointer to hardware structure
- *  @addr: Address to put into receive address register
- *  @vmdq: VMDq pool to assign
- *
- *  Puts an ethernet address into a receive address register, or
- *  finds the rar that it is aleady in; adds to the pool list
- **/
-s32 ixgbe_insert_mac_addr_82599(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
-{
-	static const u32 NO_EMPTY_RAR_FOUND = 0xFFFFFFFF;
-	u32 first_empty_rar = NO_EMPTY_RAR_FOUND;
-	u32 rar;
-	u32 rar_low, rar_high;
-	u32 addr_low, addr_high;
-
-	/* swap bytes for HW little endian */
-	addr_low  = addr[0] | (addr[1] << 8)
-			    | (addr[2] << 16)
-			    | (addr[3] << 24);
-	addr_high = addr[4] | (addr[5] << 8);
-
-	/*
-	 * Either find the mac_id in rar or find the first empty space.
-	 * rar_highwater points to just after the highest currently used
-	 * rar in order to shorten the search.  It grows when we add a new
-	 * rar to the top.
-	 */
-	for (rar = 0; rar < hw->mac.rar_highwater; rar++) {
-		rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
-
-		if (((IXGBE_RAH_AV & rar_high) == 0)
-		    && first_empty_rar == NO_EMPTY_RAR_FOUND) {
-			first_empty_rar = rar;
-		} else if ((rar_high & 0xFFFF) == addr_high) {
-			rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(rar));
-			if (rar_low == addr_low)
-				break;    /* found it already in the rars */
-		}
-	}
-
-	if (rar < hw->mac.rar_highwater) {
-		/* already there so just add to the pool bits */
-		ixgbe_set_vmdq(hw, rar, vmdq);
-	} else if (first_empty_rar != NO_EMPTY_RAR_FOUND) {
-		/* stick it into first empty RAR slot we found */
-		rar = first_empty_rar;
-		ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
-	} else if (rar == hw->mac.rar_highwater) {
-		/* add it to the top of the list and inc the highwater mark */
-		ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
-		hw->mac.rar_highwater++;
-	} else if (rar >= hw->mac.num_rar_entries) {
-		return IXGBE_ERR_INVALID_MAC_ADDR;
-	}
-
-	/*
-	 * If we found rar[0], make sure the default pool bit (we use pool 0)
-	 * remains cleared to be sure default pool packets will get delivered
-	 */
-	if (rar == 0)
-		ixgbe_clear_vmdq(hw, rar, 0);
-
-	return rar;
-}
-
-/**
- *  ixgbe_clear_vmdq_82599 - Disassociate a VMDq pool index from a rx address
- *  @hw: pointer to hardware struct
- *  @rar: receive address register index to disassociate
- *  @vmdq: VMDq pool index to remove from the rar
- **/
-s32 ixgbe_clear_vmdq_82599(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
-{
-	u32 mpsar_lo, mpsar_hi;
-	u32 rar_entries = hw->mac.num_rar_entries;
-
-	if (rar < rar_entries) {
-		mpsar_lo = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
-		mpsar_hi = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
-
-		if (!mpsar_lo && !mpsar_hi)
-			goto done;
-
-		if (vmdq == IXGBE_CLEAR_VMDQ_ALL) {
-			if (mpsar_lo) {
-				IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 0);
-				mpsar_lo = 0;
-			}
-			if (mpsar_hi) {
-				IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 0);
-				mpsar_hi = 0;
-			}
-		} else if (vmdq < 32) {
-			mpsar_lo &= ~(1 << vmdq);
-			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar_lo);
-		} else {
-			mpsar_hi &= ~(1 << (vmdq - 32));
-			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar_hi);
-		}
-
-		/* was that the last pool using this rar? */
-		if (mpsar_lo == 0 && mpsar_hi == 0 && rar != 0)
-			hw->mac.ops.clear_rar(hw, rar);
-	} else {
-		DEBUGOUT1("RAR index %d is out of range.\n", rar);
-	}
-
-done:
-	return IXGBE_SUCCESS;
-}
-
-/**
- *  ixgbe_set_vmdq_82599 - Associate a VMDq pool index with a rx address
- *  @hw: pointer to hardware struct
- *  @rar: receive address register index to associate with a VMDq index
- *  @vmdq: VMDq pool index
- **/
-s32 ixgbe_set_vmdq_82599(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
-{
-	u32 mpsar;
-	u32 rar_entries = hw->mac.num_rar_entries;
-
-	if (rar < rar_entries) {
-		if (vmdq < 32) {
-			mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
-			mpsar |= 1 << vmdq;
-			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar);
-		} else {
-			mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
-			mpsar |= 1 << (vmdq - 32);
-			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar);
-		}
-	} else {
-		DEBUGOUT1("RAR index %d is out of range.\n", rar);
-	}
-	return IXGBE_SUCCESS;
-}
-
-/**
- *  ixgbe_set_vfta_82599 - Set VLAN filter table
- *  @hw: pointer to hardware structure
- *  @vlan: VLAN id to write to VLAN filter
- *  @vind: VMDq output index that maps queue to VLAN id in VFVFB
- *  @vlan_on: boolean flag to turn on/off VLAN in VFVF
- *
- *  Turn on/off specified VLAN in the VLAN filter table.
- **/
-s32 ixgbe_set_vfta_82599(struct ixgbe_hw *hw, u32 vlan, u32 vind,
-                           bool vlan_on)
-{
-	u32 regindex;
-	u32 bitindex;
-	u32 bits;
-	u32 first_empty_slot;
-	u32 vt;
-
-	if (vlan > 4095)
-		return IXGBE_ERR_PARAM;
-
-	/*
-	 * this is a 2 part operation - first the VFTA, then the
-	 * VLVF and VLVFB if VT Mode is set
-	 */
-
-	/* Part 1
-	 * The VFTA is a bitstring made up of 128 32-bit registers
-	 * that enable the particular VLAN id, much like the MTA:
-	 *    bits[11-5]: which register
-	 *    bits[4-0]:  which bit in the register
-	 */
-	regindex = (vlan >> 5) & 0x7F;
-	bitindex = vlan & 0x1F;
-	bits = IXGBE_READ_REG(hw, IXGBE_VFTA(regindex));
-	if (vlan_on)
-		bits |= (1 << bitindex);
-	else
-		bits &= ~(1 << bitindex);
-	IXGBE_WRITE_REG(hw, IXGBE_VFTA(regindex), bits);
-
-
-	/* Part 2
-	 * If VT Mode is set
-	 *   Either vlan_on
-	 *     make sure the vlan is in VLVF
-	 *     set the vind bit in the matching VLVFB
-	 *   Or !vlan_on
-	 *     clear the pool bit and possibly the vind
-	 */
-	vt = IXGBE_READ_REG(hw, IXGBE_VT_CTL);
-	if (vt & IXGBE_VT_CTL_VT_ENABLE) {
-		/* find the vlanid or the first empty slot */
-		first_empty_slot = 0;
-
-		for (regindex = 1; regindex < IXGBE_VLVF_ENTRIES; regindex++) {
-			bits = IXGBE_READ_REG(hw, IXGBE_VLVF(regindex));
-			if (!bits && !first_empty_slot)
-				first_empty_slot = regindex;
-			else if ((bits & 0x0FFF) == vlan)
-				break;
-		}
-
-		if (regindex >= IXGBE_VLVF_ENTRIES) {
-			if (first_empty_slot)
-				regindex = first_empty_slot;
-			else {
-				DEBUGOUT("No space in VLVF.\n");
-				goto out;
-			}
-		}
-
-
-		if (vlan_on) {
-			/* set the pool bit */
-			if (vind < 32) {
-				bits = IXGBE_READ_REG(hw,
-						IXGBE_VLVFB(regindex*2));
-				bits |= (1 << vind);
-				IXGBE_WRITE_REG(hw,
-						IXGBE_VLVFB(regindex*2),
-						bits);
-			} else {
-				bits = IXGBE_READ_REG(hw,
-						IXGBE_VLVFB((regindex*2)+1));
-				bits |= (1 << vind);
-				IXGBE_WRITE_REG(hw,
-						IXGBE_VLVFB((regindex*2)+1),
-						bits);
-			}
-		} else {
-			/* clear the pool bit */
-			if (vind < 32) {
-				bits = IXGBE_READ_REG(hw,
-						IXGBE_VLVFB(regindex*2));
-				bits &= ~(1 << vind);
-				IXGBE_WRITE_REG(hw,
-						IXGBE_VLVFB(regindex*2),
-						bits);
-				bits |= IXGBE_READ_REG(hw,
-						IXGBE_VLVFB((regindex*2)+1));
-			} else {
-				bits = IXGBE_READ_REG(hw,
-						IXGBE_VLVFB((regindex*2)+1));
-				bits &= ~(1 << vind);
-				IXGBE_WRITE_REG(hw,
-						IXGBE_VLVFB((regindex*2)+1),
-						bits);
-				bits |= IXGBE_READ_REG(hw,
-						IXGBE_VLVFB(regindex*2));
-			}
-		}
-
-		if (bits)
-			IXGBE_WRITE_REG(hw, IXGBE_VLVF(regindex),
-					(IXGBE_VLVF_VIEN | vlan));
-		else
-			IXGBE_WRITE_REG(hw, IXGBE_VLVF(regindex), 0);
-	}
-out:
-	return IXGBE_SUCCESS;
-}
-
-/**
- *  ixgbe_clear_vfta_82599 - Clear VLAN filter table
- *  @hw: pointer to hardware structure
- *
- *  Clears the VLAN filer table, and the VMDq index associated with the filter
- **/
-s32 ixgbe_clear_vfta_82599(struct ixgbe_hw *hw)
-{
-	u32 offset;
-
-	for (offset = 0; offset < hw->mac.vft_size; offset++)
-		IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
-
-	for (offset = 0; offset < IXGBE_VLVF_ENTRIES; offset++) {
-		IXGBE_WRITE_REG(hw, IXGBE_VLVF(offset), 0);
-		IXGBE_WRITE_REG(hw, IXGBE_VLVFB(offset*2), 0);
-		IXGBE_WRITE_REG(hw, IXGBE_VLVFB((offset*2)+1), 0);
-	}
-
-	return IXGBE_SUCCESS;
-}
-
-/**
- *  ixgbe_init_uta_tables_82599 - Initialize the Unicast Table Array
- *  @hw: pointer to hardware structure
- **/
-s32 ixgbe_init_uta_tables_82599(struct ixgbe_hw *hw)
-{
-	int i;
-	DEBUGOUT(" Clearing UTA\n");
-
-	for (i = 0; i < 128; i++)
-		IXGBE_WRITE_REG(hw, IXGBE_UTA(i), 0);
-
-	return IXGBE_SUCCESS;
-}
-
 /**
  *  ixgbe_reinit_fdir_tables_82599 - Reinitialize Flow Director tables.
  *  @hw: pointer to hardware structure
@@ -1308,6 +1013,8 @@ s32 ixgbe_reinit_fdir_tables_82599(struct ixgbe_hw *hw)
 	u32 fdirctrl = IXGBE_READ_REG(hw, IXGBE_FDIRCTRL);
 	fdirctrl &= ~IXGBE_FDIRCTRL_INIT_DONE;
 
+	DEBUGFUNC("ixgbe_reinit_fdir_tables_82599");
+
 	/*
 	 * Before starting reinitialization process,
 	 * FDIRCMD.CMD must be zero.
@@ -1384,6 +1091,8 @@ s32 ixgbe_init_fdir_signature_82599(struct ixgbe_hw *hw, u32 pballoc)
 	u32 pbsize;
 	int i;
 
+	DEBUGFUNC("ixgbe_init_fdir_signature_82599");
+
 	/*
 	 * Before enabling Flow Director, the Rx Packet Buffer size
 	 * must be reduced.  The new value is the current size minus
@@ -1474,6 +1183,8 @@ s32 ixgbe_init_fdir_perfect_82599(struct ixgbe_hw *hw, u32 pballoc)
 	u32 pbsize;
 	int i;
 
+	DEBUGFUNC("ixgbe_init_fdir_perfect_82599");
+
 	/*
 	 * Before enabling Flow Director, the Rx Packet Buffer size
 	 * must be reduced.  The new value is the current size minus
@@ -1609,6 +1320,8 @@ u16 ixgbe_atr_compute_hash_82599(struct ixgbe_atr_input *atr_input, u32 key)
 	u16  hash_result = 0;
 	int  i, j, k, h;
 
+	DEBUGFUNC("ixgbe_atr_compute_hash_82599");
+
 	/*
 	 * Initialize the fill member to prevent warnings
 	 * on some compilers
@@ -1687,6 +1400,8 @@ u16 ixgbe_atr_compute_hash_82599(struct ixgbe_atr_input *atr_input, u32 key)
  **/
 s32 ixgbe_atr_set_vlan_id_82599(struct ixgbe_atr_input *input, u16 vlan)
 {
+	DEBUGFUNC("ixgbe_atr_set_vlan_id_82599");
+
 	input->byte_stream[IXGBE_ATR_VLAN_OFFSET + 1] = vlan >> 8;
 	input->byte_stream[IXGBE_ATR_VLAN_OFFSET] = vlan & 0xff;
 
@@ -1700,6 +1415,8 @@ s32 ixgbe_atr_set_vlan_id_82599(struct ixgbe_atr_input *input, u16 vlan)
  **/
 s32 ixgbe_atr_set_src_ipv4_82599(struct ixgbe_atr_input *input, u32 src_addr)
 {
+	DEBUGFUNC("ixgbe_atr_set_src_ipv4_82599");
+
 	input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET + 3] = src_addr >> 24;
 	input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET + 2] =
 	                                               (src_addr >> 16) & 0xff;
@@ -1717,6 +1434,8 @@ s32 ixgbe_atr_set_src_ipv4_82599(struct ixgbe_atr_input *input, u32 src_addr)
  **/
 s32 ixgbe_atr_set_dst_ipv4_82599(struct ixgbe_atr_input *input, u32 dst_addr)
 {
+	DEBUGFUNC("ixgbe_atr_set_dst_ipv4_82599");
+
 	input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET + 3] = dst_addr >> 24;
 	input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET + 2] =
 	                                               (dst_addr >> 16) & 0xff;
@@ -1739,6 +1458,8 @@ s32 ixgbe_atr_set_src_ipv6_82599(struct ixgbe_atr_input *input,
                                  u32 src_addr_1, u32 src_addr_2,
                                  u32 src_addr_3, u32 src_addr_4)
 {
+	DEBUGFUNC("ixgbe_atr_set_src_ipv6_82599");
+
 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET] = src_addr_4 & 0xff;
 	input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 1] =
 	                                               (src_addr_4 >> 8) & 0xff;
@@ -1782,6 +1503,8 @@ s32 ixgbe_atr_set_dst_ipv6_82599(struct ixgbe_atr_input *input,
                                  u32 dst_addr_1, u32 dst_addr_2,
                                  u32 dst_addr_3, u32 dst_addr_4)
 {
+	DEBUGFUNC("ixgbe_atr_set_dst_ipv6_82599");
+
 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET] = dst_addr_4 & 0xff;
 	input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 1] =
 	                                               (dst_addr_4 >> 8) & 0xff;
@@ -1820,6 +1543,8 @@ s32 ixgbe_atr_set_dst_ipv6_82599(struct ixgbe_atr_input *input,
  **/
 s32 ixgbe_atr_set_src_port_82599(struct ixgbe_atr_input *input, u16 src_port)
 {
+	DEBUGFUNC("ixgbe_atr_set_src_port_82599");
+
 	input->byte_stream[IXGBE_ATR_SRC_PORT_OFFSET + 1] = src_port >> 8;
 	input->byte_stream[IXGBE_ATR_SRC_PORT_OFFSET] = src_port & 0xff;
 
@@ -1833,6 +1558,8 @@ s32 ixgbe_atr_set_src_port_82599(struct ixgbe_atr_input *input, u16 src_port)
  **/
 s32 ixgbe_atr_set_dst_port_82599(struct ixgbe_atr_input *input, u16 dst_port)
 {
+	DEBUGFUNC("ixgbe_atr_set_dst_port_82599");
+
 	input->byte_stream[IXGBE_ATR_DST_PORT_OFFSET + 1] = dst_port >> 8;
 	input->byte_stream[IXGBE_ATR_DST_PORT_OFFSET] = dst_port & 0xff;
 
@@ -1846,6 +1573,8 @@ s32 ixgbe_atr_set_dst_port_82599(struct ixgbe_atr_input *input, u16 dst_port)
  **/
 s32 ixgbe_atr_set_flex_byte_82599(struct ixgbe_atr_input *input, u16 flex_byte)
 {
+	DEBUGFUNC("ixgbe_atr_set_flex_byte_82599");
+
 	input->byte_stream[IXGBE_ATR_FLEX_BYTE_OFFSET + 1] = flex_byte >> 8;
 	input->byte_stream[IXGBE_ATR_FLEX_BYTE_OFFSET] = flex_byte & 0xff;
 
@@ -1859,6 +1588,8 @@ s32 ixgbe_atr_set_flex_byte_82599(struct ixgbe_atr_input *input, u16 flex_byte)
  **/
 s32 ixgbe_atr_set_vm_pool_82599(struct ixgbe_atr_input *input, u8 vm_pool)
 {
+	DEBUGFUNC("ixgbe_atr_set_vm_pool_82599");
+
 	input->byte_stream[IXGBE_ATR_VM_POOL_OFFSET] = vm_pool;
 
 	return IXGBE_SUCCESS;
@@ -1871,6 +1602,8 @@ s32 ixgbe_atr_set_vm_pool_82599(struct ixgbe_atr_input *input, u8 vm_pool)
  **/
 s32 ixgbe_atr_set_l4type_82599(struct ixgbe_atr_input *input, u8 l4type)
 {
+	DEBUGFUNC("ixgbe_atr_set_l4type_82599");
+
 	input->byte_stream[IXGBE_ATR_L4TYPE_OFFSET] = l4type;
 
 	return IXGBE_SUCCESS;
@@ -1883,6 +1616,8 @@ s32 ixgbe_atr_set_l4type_82599(struct ixgbe_atr_input *input, u8 l4type)
  **/
 s32 ixgbe_atr_get_vlan_id_82599(struct ixgbe_atr_input *input, u16 *vlan)
 {
+	DEBUGFUNC("ixgbe_atr_get_vlan_id_82599");
+
 	*vlan = input->byte_stream[IXGBE_ATR_VLAN_OFFSET];
 	*vlan |= input->byte_stream[IXGBE_ATR_VLAN_OFFSET + 1] << 8;
 
@@ -1896,6 +1631,8 @@ s32 ixgbe_atr_get_vlan_id_82599(struct ixgbe_atr_input *input, u16 *vlan)
  **/
 s32 ixgbe_atr_get_src_ipv4_82599(struct ixgbe_atr_input *input, u32 *src_addr)
 {
+	DEBUGFUNC("ixgbe_atr_get_src_ipv4_82599");
+
 	*src_addr = input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET];
 	*src_addr |= input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET + 1] << 8;
 	*src_addr |= input->byte_stream[IXGBE_ATR_SRC_IPV4_OFFSET + 2] << 16;
@@ -1911,6 +1648,8 @@ s32 ixgbe_atr_get_src_ipv4_82599(struct ixgbe_atr_input *input, u32 *src_addr)
  **/
 s32 ixgbe_atr_get_dst_ipv4_82599(struct ixgbe_atr_input *input, u32 *dst_addr)
 {
+	DEBUGFUNC("ixgbe_atr_get_dst_ipv4_82599");
+
 	*dst_addr = input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET];
 	*dst_addr |= input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET + 1] << 8;
 	*dst_addr |= input->byte_stream[IXGBE_ATR_DST_IPV4_OFFSET + 2] << 16;
@@ -1931,6 +1670,8 @@ s32 ixgbe_atr_get_src_ipv6_82599(struct ixgbe_atr_input *input,
                                  u32 *src_addr_1, u32 *src_addr_2,
                                  u32 *src_addr_3, u32 *src_addr_4)
 {
+	DEBUGFUNC("ixgbe_atr_get_src_ipv6_82599");
+
 	*src_addr_1 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 12];
 	*src_addr_1 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 13] << 8;
 	*src_addr_1 = input->byte_stream[IXGBE_ATR_SRC_IPV6_OFFSET + 14] << 16;
@@ -1966,6 +1707,8 @@ s32 ixgbe_atr_get_dst_ipv6_82599(struct ixgbe_atr_input *input,
                                  u32 *dst_addr_1, u32 *dst_addr_2,
                                  u32 *dst_addr_3, u32 *dst_addr_4)
 {
+	DEBUGFUNC("ixgbe_atr_get_dst_ipv6_82599");
+
 	*dst_addr_1 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 12];
 	*dst_addr_1 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 13] << 8;
 	*dst_addr_1 = input->byte_stream[IXGBE_ATR_DST_IPV6_OFFSET + 14] << 16;
@@ -2001,6 +1744,8 @@ s32 ixgbe_atr_get_dst_ipv6_82599(struct ixgbe_atr_input *input,
  **/
 s32 ixgbe_atr_get_src_port_82599(struct ixgbe_atr_input *input, u16 *src_port)
 {
+	DEBUGFUNC("ixgbe_atr_get_src_port_82599");
+
 	*src_port = input->byte_stream[IXGBE_ATR_SRC_PORT_OFFSET] << 8;
 	*src_port |= input->byte_stream[IXGBE_ATR_SRC_PORT_OFFSET + 1];
 
@@ -2019,6 +1764,8 @@ s32 ixgbe_atr_get_src_port_82599(struct ixgbe_atr_input *input, u16 *src_port)
  **/
 s32 ixgbe_atr_get_dst_port_82599(struct ixgbe_atr_input *input, u16 *dst_port)
 {
+	DEBUGFUNC("ixgbe_atr_get_dst_port_82599");
+
 	*dst_port = input->byte_stream[IXGBE_ATR_DST_PORT_OFFSET] << 8;
 	*dst_port |= input->byte_stream[IXGBE_ATR_DST_PORT_OFFSET + 1];
 
@@ -2032,6 +1779,8 @@ s32 ixgbe_atr_get_dst_port_82599(struct ixgbe_atr_input *input, u16 *dst_port)
  **/
 s32 ixgbe_atr_get_flex_byte_82599(struct ixgbe_atr_input *input, u16 *flex_byte)
 {
+	DEBUGFUNC("ixgbe_atr_get_flex_byte_82599");
+
 	*flex_byte = input->byte_stream[IXGBE_ATR_FLEX_BYTE_OFFSET];
 	*flex_byte |= input->byte_stream[IXGBE_ATR_FLEX_BYTE_OFFSET + 1] << 8;
 
@@ -2045,6 +1794,8 @@ s32 ixgbe_atr_get_flex_byte_82599(struct ixgbe_atr_input *input, u16 *flex_byte)
  **/
 s32 ixgbe_atr_get_vm_pool_82599(struct ixgbe_atr_input *input, u8 *vm_pool)
 {
+	DEBUGFUNC("ixgbe_atr_get_vm_pool_82599");
+
 	*vm_pool = input->byte_stream[IXGBE_ATR_VM_POOL_OFFSET];
 
 	return IXGBE_SUCCESS;
@@ -2057,6 +1808,8 @@ s32 ixgbe_atr_get_vm_pool_82599(struct ixgbe_atr_input *input, u8 *vm_pool)
  **/
 s32 ixgbe_atr_get_l4type_82599(struct ixgbe_atr_input *input, u8 *l4type)
 {
+	DEBUGFUNC("ixgbe_atr_get_l4type__82599");
+
 	*l4type = input->byte_stream[IXGBE_ATR_L4TYPE_OFFSET];
 
 	return IXGBE_SUCCESS;
@@ -2078,6 +1831,8 @@ s32 ixgbe_fdir_add_signature_filter_82599(struct ixgbe_hw *hw,
 	u16  bucket_hash, sig_hash;
 	u8   l4type;
 
+	DEBUGFUNC("ixgbe_fdir_add_signature_filter_82599");
+
 	bucket_hash = ixgbe_atr_compute_hash_82599(input,
 	                                           IXGBE_ATR_BUCKET_HASH_KEY);
 
@@ -2149,6 +1904,8 @@ s32 ixgbe_fdir_add_perfect_filter_82599(struct ixgbe_hw *hw,
 	u16 bucket_hash;
 	u8  l4type;
 
+	DEBUGFUNC("ixgbe_fdir_add_perfect_filter_82599");
+
 	/* Get our input values */
 	ixgbe_atr_get_l4type_82599(input, &l4type);
 
@@ -2237,6 +1994,8 @@ s32 ixgbe_read_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 *val)
 {
 	u32  core_ctl;
 
+	DEBUGFUNC("ixgbe_read_analog_reg8_82599");
+
 	IXGBE_WRITE_REG(hw, IXGBE_CORECTL, IXGBE_CORECTL_WRITE_CMD |
 	                (reg << 8));
 	IXGBE_WRITE_FLUSH(hw);
@@ -2259,6 +2018,8 @@ s32 ixgbe_write_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 val)
 {
 	u32  core_ctl;
 
+	DEBUGFUNC("ixgbe_write_analog_reg8_82599");
+
 	core_ctl = (reg << 8) | val;
 	IXGBE_WRITE_REG(hw, IXGBE_CORECTL, core_ctl);
 	IXGBE_WRITE_FLUSH(hw);
@@ -2277,18 +2038,35 @@ s32 ixgbe_write_analog_reg8_82599(struct ixgbe_hw *hw, u32 reg, u8 val)
  **/
 s32 ixgbe_start_hw_rev_1_82599(struct ixgbe_hw *hw)
 {
-	u32 q_num;
+	u32 i;
+	u32 regval;
 	s32 ret_val = IXGBE_SUCCESS;
 
+	DEBUGFUNC("ixgbe_start_hw_rev_1__82599");
+
 	ret_val = ixgbe_start_hw_generic(hw);
 
 	/* Clear the rate limiters */
-	for (q_num = 0; q_num < hw->mac.max_tx_queues; q_num++) {
-		IXGBE_WRITE_REG(hw, IXGBE_RTTDQSEL, q_num);
+	for (i = 0; i < hw->mac.max_tx_queues; i++) {
+		IXGBE_WRITE_REG(hw, IXGBE_RTTDQSEL, i);
 		IXGBE_WRITE_REG(hw, IXGBE_RTTBCNRC, 0);
 	}
 	IXGBE_WRITE_FLUSH(hw);
 
+	/* Disable relaxed ordering */
+	for (i = 0; i < hw->mac.max_tx_queues; i++) {
+		regval = IXGBE_READ_REG(hw, IXGBE_DCA_TXCTRL_82599(i));
+		regval &= ~IXGBE_DCA_TXCTRL_TX_WB_RO_EN;
+		IXGBE_WRITE_REG(hw, IXGBE_DCA_TXCTRL_82599(i), regval);
+	}
+
+	for (i = 0; i < hw->mac.max_rx_queues; i++) {
+		regval = IXGBE_READ_REG(hw, IXGBE_DCA_RXCTRL(i));
+		regval &= ~(IXGBE_DCA_RXCTRL_DESC_WRO_EN |
+			    IXGBE_DCA_RXCTRL_DESC_HSRO_EN);
+		IXGBE_WRITE_REG(hw, IXGBE_DCA_RXCTRL(i), regval);
+	}
+
 	/* We need to run link autotry after the driver loads */
 	hw->mac.autotry_restart = TRUE;
 
@@ -2309,6 +2087,8 @@ s32 ixgbe_identify_phy_82599(struct ixgbe_hw *hw)
 {
 	s32 status = IXGBE_ERR_PHY_ADDR_INVALID;
 
+	DEBUGFUNC("ixgbe_identify_phy_82599");
+
 	/* Detect PHY if not unknown - returns success if already detected. */
 	status = ixgbe_identify_phy_generic(hw);
 	if (status != IXGBE_SUCCESS)
@@ -2343,6 +2123,8 @@ u32 ixgbe_get_supported_physical_layer_82599(struct ixgbe_hw *hw)
 	u16 ext_ability = 0;
 	u8 comp_codes_10g = 0;
 
+	DEBUGFUNC("ixgbe_get_support_physical_layer_82599");
+
 	hw->phy.ops.identify(hw);
 
 	if (hw->phy.type == ixgbe_phy_tn ||
@@ -2446,6 +2228,8 @@ s32 ixgbe_enable_rx_dma_82599(struct ixgbe_hw *hw, u32 regval)
 	int i;
 	int secrxreg;
 
+	DEBUGFUNC("ixgbe_enable_rx_dma_82599");
+
 	/*
 	 * Workaround for 82599 silicon errata when enabling the Rx datapath.
 	 * If traffic is incoming before we enable the Rx unit, it could hang
@@ -2488,118 +2272,13 @@ s32 ixgbe_enable_rx_dma_82599(struct ixgbe_hw *hw, u32 regval)
  **/
 s32 ixgbe_get_device_caps_82599(struct ixgbe_hw *hw, u16 *device_caps)
 {
+	DEBUGFUNC("ixgbe_get_device_caps_82599");
+
 	hw->eeprom.ops.read(hw, IXGBE_DEVICE_CAPS, device_caps);
 
 	return IXGBE_SUCCESS;
 }
 
-/**
- *  ixgbe_get_san_mac_addr_offset_82599 - SAN MAC address offset for 82599
- *  @hw: pointer to hardware structure
- *  @san_mac_offset: SAN MAC address offset
- *
- *  This function will read the EEPROM location for the SAN MAC address
- *  pointer, and returns the value at that location.  This is used in both
- *  get and set mac_addr routines.
- **/
-s32 ixgbe_get_san_mac_addr_offset_82599(struct ixgbe_hw *hw,
-                                        u16 *san_mac_offset)
-{
-	/*
-	 * First read the EEPROM pointer to see if the MAC addresses are
-	 * available.
-	 */
-	hw->eeprom.ops.read(hw, IXGBE_SAN_MAC_ADDR_PTR, san_mac_offset);
-
-	return IXGBE_SUCCESS;
-}
-
-/**
- *  ixgbe_get_san_mac_addr_82599 - SAN MAC address retrieval for 82599
- *  @hw: pointer to hardware structure
- *  @san_mac_addr: SAN MAC address
- *
- *  Reads the SAN MAC address from the EEPROM, if it's available.  This is
- *  per-port, so set_lan_id() must be called before reading the addresses.
- *  set_lan_id() is called by identify_sfp(), but this cannot be relied
- *  upon for non-SFP connections, so we must call it here.
- **/
-s32 ixgbe_get_san_mac_addr_82599(struct ixgbe_hw *hw, u8 *san_mac_addr)
-{
-	u16 san_mac_data, san_mac_offset;
-	u8 i;
-
-	/*
-	 * First read the EEPROM pointer to see if the MAC addresses are
-	 * available.  If they're not, no point in calling set_lan_id() here.
-	 */
-	ixgbe_get_san_mac_addr_offset_82599(hw, &san_mac_offset);
-
-	if ((san_mac_offset == 0) || (san_mac_offset == 0xFFFF)) {
-		/*
-		 * No addresses available in this EEPROM.  It's not an
-		 * error though, so just wipe the local address and return.
-		 */
-		for (i = 0; i < 6; i++)
-			san_mac_addr[i] = 0xFF;
-
-		goto san_mac_addr_out;
-	}
-
-	/* make sure we know which port we need to program */
-	hw->mac.ops.set_lan_id(hw);
-	/* apply the port offset to the address offset */
-	(hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
-	                 (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
-	for (i = 0; i < 3; i++) {
-		hw->eeprom.ops.read(hw, san_mac_offset, &san_mac_data);
-		san_mac_addr[i * 2] = (u8)(san_mac_data);
-		san_mac_addr[i * 2 + 1] = (u8)(san_mac_data >> 8);
-		san_mac_offset++;
-	}
-
-san_mac_addr_out:
-	return IXGBE_SUCCESS;
-}
-
-/**
- *  ixgbe_set_san_mac_addr_82599 - Write the SAN MAC address to the EEPROM
- *  @hw: pointer to hardware structure
- *  @san_mac_addr: SAN MAC address
- *
- *  Write a SAN MAC address to the EEPROM.
- **/
-s32 ixgbe_set_san_mac_addr_82599(struct ixgbe_hw *hw, u8 *san_mac_addr)
-{
-	s32 status = IXGBE_SUCCESS;
-	u16 san_mac_data, san_mac_offset;
-	u8 i;
-
-	/* Look for SAN mac address pointer.  If not defined, return */
-	ixgbe_get_san_mac_addr_offset_82599(hw, &san_mac_offset);
-
-	if ((san_mac_offset == 0) || (san_mac_offset == 0xFFFF)) {
-		status = IXGBE_ERR_NO_SAN_ADDR_PTR;
-		goto san_mac_addr_out;
-	}
-
-	/* Make sure we know which port we need to write */
-	hw->mac.ops.set_lan_id(hw);
-	/* Apply the port offset to the address offset */
-	(hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
-	                 (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
-
-	for (i = 0; i < 3; i++) {
-		san_mac_data = (u16)((u16)(san_mac_addr[i * 2 + 1]) << 8);
-		san_mac_data |= (u16)(san_mac_addr[i * 2]);
-		hw->eeprom.ops.write(hw, san_mac_offset, san_mac_data);
-		san_mac_offset++;
-	}
-
-san_mac_addr_out:
-	return status;
-}
-
 /**
  *  ixgbe_verify_fw_version_82599 - verify fw version for 82599
  *  @hw: pointer to hardware structure
@@ -2616,6 +2295,8 @@ static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw)
 	u16 fw_offset, fw_ptp_cfg_offset;
 	u16 fw_version = 0;
 
+	DEBUGFUNC("ixgbe_verify_fw_version_82599");
+
 	/* firmware check is only necessary for SFI devices */
 	if (hw->phy.media_type != ixgbe_media_type_fiber) {
 		status = IXGBE_SUCCESS;
diff --git a/sys/dev/ixgbe/ixgbe_api.c b/sys/dev/ixgbe/ixgbe_api.c
index 9c3356fff59..44644574860 100644
--- a/sys/dev/ixgbe/ixgbe_api.c
+++ b/sys/dev/ixgbe/ixgbe_api.c
@@ -54,6 +54,8 @@ s32 ixgbe_init_shared_code(struct ixgbe_hw *hw)
 {
 	s32 status;
 
+	DEBUGFUNC("ixgbe_init_shared_code");
+
 	/*
 	 * Set the mac type
 	 */
@@ -94,6 +96,7 @@ s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)
 		case IXGBE_DEV_ID_82598AF_SINGLE_PORT:
 		case IXGBE_DEV_ID_82598AF_DUAL_PORT:
 		case IXGBE_DEV_ID_82598AT:
+		case IXGBE_DEV_ID_82598AT2:
 		case IXGBE_DEV_ID_82598EB_CX4:
 		case IXGBE_DEV_ID_82598_CX4_DUAL_PORT:
 		case IXGBE_DEV_ID_82598_DA_DUAL_PORT:
@@ -103,7 +106,9 @@ s32 ixgbe_set_mac_type(struct ixgbe_hw *hw)
 			hw->mac.type = ixgbe_mac_82598EB;
 			break;
 		case IXGBE_DEV_ID_82599_KX4:
+		case IXGBE_DEV_ID_82599_KX4_MEZZ:
 		case IXGBE_DEV_ID_82599_XAUI_LOM:
+		case IXGBE_DEV_ID_82599_COMBO_BACKPLANE:
 		case IXGBE_DEV_ID_82599_SFP:
 		case IXGBE_DEV_ID_82599_CX4:
 			hw->mac.type = ixgbe_mac_82599EB;
@@ -243,6 +248,23 @@ s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps)
 	                       (hw, device_caps), IXGBE_NOT_IMPLEMENTED);
 }
 
+/**
+ *  ixgbe_get_wwn_prefix - Get alternative WWNN/WWPN prefix from the EEPROM
+ *  @hw: pointer to hardware structure
+ *  @wwnn_prefix: the alternative WWNN prefix
+ *  @wwpn_prefix: the alternative WWPN prefix
+ *
+ *  This function will read the EEPROM from the alternative SAN MAC address
+ *  block to check the support for the alternative WWNN/WWPN prefix support.
+ **/
+s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix,
+                         u16 *wwpn_prefix)
+{
+	return ixgbe_call_func(hw, hw->mac.ops.get_wwn_prefix,
+	                       (hw, wwnn_prefix, wwpn_prefix),
+	                       IXGBE_NOT_IMPLEMENTED);
+}
+
 /**
  *  ixgbe_get_bus_info - Set PCI bus info
  *  @hw: pointer to hardware structure
@@ -438,19 +460,6 @@ s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
 	                       IXGBE_NOT_IMPLEMENTED);
 }
 
-/**
- *  ixgbe_setup_link - Configure link settings
- *  @hw: pointer to hardware structure
- *
- *  Configures link settings based on values in the ixgbe_hw struct.
- *  Restarts the link.  Performs autonegotiation if needed.
- **/
-s32 ixgbe_setup_link(struct ixgbe_hw *hw)
-{
-	return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw),
-	                       IXGBE_NOT_IMPLEMENTED);
-}
-
 /**
  *  ixgbe_check_link - Get link and speed status
  *  @hw: pointer to hardware structure
@@ -466,18 +475,19 @@ s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
 }
 
 /**
- *  ixgbe_setup_link_speed - Set link speed
+ *  ixgbe_setup_link - Set link speed
  *  @hw: pointer to hardware structure
  *  @speed: new link speed
  *  @autoneg: TRUE if autonegotiation enabled
  *
- *  Set the link speed and restarts the link.
+ *  Configures link settings.  Restarts the link.
+ *  Performs autonegotiation if needed.
  **/
-s32 ixgbe_setup_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
+s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
                            bool autoneg,
                            bool autoneg_wait_to_complete)
 {
-	return ixgbe_call_func(hw, hw->mac.ops.setup_link_speed, (hw, speed,
+	return ixgbe_call_func(hw, hw->mac.ops.setup_link, (hw, speed,
 	                       autoneg, autoneg_wait_to_complete),
 	                       IXGBE_NOT_IMPLEMENTED);
 }
diff --git a/sys/dev/ixgbe/ixgbe_api.h b/sys/dev/ixgbe/ixgbe_api.h
index 654f22f6c32..8ab78ad8720 100644
--- a/sys/dev/ixgbe/ixgbe_api.h
+++ b/sys/dev/ixgbe/ixgbe_api.h
@@ -67,8 +67,7 @@ s32 ixgbe_setup_phy_link_speed(struct ixgbe_hw *hw,
                                ixgbe_link_speed speed,
                                bool autoneg,
                                bool autoneg_wait_to_complete);
-s32 ixgbe_setup_link(struct ixgbe_hw *hw);
-s32 ixgbe_setup_link_speed(struct ixgbe_hw *hw, ixgbe_link_speed speed,
+s32 ixgbe_setup_link(struct ixgbe_hw *hw, ixgbe_link_speed speed,
                            bool autoneg, bool autoneg_wait_to_complete);
 s32 ixgbe_check_link(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
                      bool *link_up, bool link_up_wait_to_complete);
@@ -97,6 +96,7 @@ s32 ixgbe_update_uc_addr_list(struct ixgbe_hw *hw, u8 *addr_list,
                               u32 addr_count, ixgbe_mc_addr_itr func);
 s32 ixgbe_update_mc_addr_list(struct ixgbe_hw *hw, u8 *mc_addr_list,
                               u32 mc_addr_count, ixgbe_mc_addr_itr func);
+void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr_list, u32 vmdq);
 s32 ixgbe_enable_mc(struct ixgbe_hw *hw);
 s32 ixgbe_disable_mc(struct ixgbe_hw *hw);
 s32 ixgbe_clear_vfta(struct ixgbe_hw *hw);
@@ -164,6 +164,8 @@ s32 ixgbe_set_san_mac_addr(struct ixgbe_hw *hw, u8 *san_mac_addr);
 s32 ixgbe_get_device_caps(struct ixgbe_hw *hw, u16 *device_caps);
 s32 ixgbe_acquire_swfw_semaphore(struct ixgbe_hw *hw, u16 mask);
 void ixgbe_release_swfw_semaphore(struct ixgbe_hw *hw, u16 mask);
+s32 ixgbe_get_wwn_prefix(struct ixgbe_hw *hw, u16 *wwnn_prefix,
+                         u16 *wwpn_prefix);
 
 
 #endif /* _IXGBE_API_H_ */
diff --git a/sys/dev/ixgbe/ixgbe_common.c b/sys/dev/ixgbe/ixgbe_common.c
index 30c372d8a9b..89e57d83dab 100644
--- a/sys/dev/ixgbe/ixgbe_common.c
+++ b/sys/dev/ixgbe/ixgbe_common.c
@@ -35,7 +35,6 @@
 #include "ixgbe_common.h"
 #include "ixgbe_api.h"
 
-static s32 ixgbe_poll_eeprom_eerd_done(struct ixgbe_hw *hw);
 static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw);
 static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw);
 static void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw);
@@ -47,9 +46,11 @@ static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count);
 static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
 static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec);
 static void ixgbe_release_eeprom(struct ixgbe_hw *hw);
-static u16 ixgbe_calc_eeprom_checksum(struct ixgbe_hw *hw);
 
 static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr);
+static s32 ixgbe_get_san_mac_addr_offset(struct ixgbe_hw *hw,
+                                        u16 *san_mac_offset);
+s32 ixgbe_find_vlvf_slot(struct ixgbe_hw *hw, u32 vlan);
 
 /**
  *  ixgbe_init_ops_generic - Inits function ptrs
@@ -63,17 +64,20 @@ s32 ixgbe_init_ops_generic(struct ixgbe_hw *hw)
 	struct ixgbe_mac_info *mac = &hw->mac;
 	u32 eec = IXGBE_READ_REG(hw, IXGBE_EEC);
 
+	DEBUGFUNC("ixgbe_init_ops_generic");
+
 	/* EEPROM */
 	eeprom->ops.init_params = &ixgbe_init_eeprom_params_generic;
 	/* If EEPROM is valid (bit 8 = 1), use EERD otherwise use bit bang */
 	if (eec & (1 << 8))
-		eeprom->ops.read = &ixgbe_read_eeprom_generic;
+		eeprom->ops.read = &ixgbe_read_eerd_generic;
 	else
 		eeprom->ops.read = &ixgbe_read_eeprom_bit_bang_generic;
 	eeprom->ops.write = &ixgbe_write_eeprom_generic;
 	eeprom->ops.validate_checksum =
 	                              &ixgbe_validate_eeprom_checksum_generic;
 	eeprom->ops.update_checksum = &ixgbe_update_eeprom_checksum_generic;
+	eeprom->ops.calc_checksum = &ixgbe_calc_eeprom_checksum_generic;
 
 	/* MAC */
 	mac->ops.init_hw = &ixgbe_init_hw_generic;
@@ -117,7 +121,6 @@ s32 ixgbe_init_ops_generic(struct ixgbe_hw *hw)
 	/* Link */
 	mac->ops.get_link_capabilities = NULL;
 	mac->ops.setup_link = NULL;
-	mac->ops.setup_link_speed = NULL;
 	mac->ops.check_link = NULL;
 
 	return IXGBE_SUCCESS;
@@ -137,6 +140,8 @@ s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw)
 	u32 ctrl_ext;
 	s32 ret_val = IXGBE_SUCCESS;
 
+	DEBUGFUNC("ixgbe_start_hw_generic");
+
 	/* Set the media type */
 	hw->phy.media_type = hw->mac.ops.get_media_type(hw);
 
@@ -177,6 +182,8 @@ s32 ixgbe_init_hw_generic(struct ixgbe_hw *hw)
 {
 	s32 status = IXGBE_SUCCESS;
 
+	DEBUGFUNC("ixgbe_init_hw_generic");
+
 	/* Reset the hardware */
 	status = hw->mac.ops.reset_hw(hw);
 
@@ -199,6 +206,8 @@ s32 ixgbe_clear_hw_cntrs_generic(struct ixgbe_hw *hw)
 {
 	u16 i = 0;
 
+	DEBUGFUNC("ixgbe_clear_hw_cntrs_generic");
+
 	IXGBE_READ_REG(hw, IXGBE_CRCERRS);
 	IXGBE_READ_REG(hw, IXGBE_ILLERRC);
 	IXGBE_READ_REG(hw, IXGBE_ERRBC);
@@ -324,6 +333,8 @@ s32 ixgbe_get_mac_addr_generic(struct ixgbe_hw *hw, u8 *mac_addr)
 	u32 rar_low;
 	u16 i;
 
+	DEBUGFUNC("ixgbe_get_mac_addr_generic");
+
 	rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(0));
 	rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(0));
 
@@ -347,6 +358,8 @@ s32 ixgbe_get_bus_info_generic(struct ixgbe_hw *hw)
 	struct ixgbe_mac_info *mac = &hw->mac;
 	u16 link_status;
 
+	DEBUGFUNC("ixgbe_get_bus_info_generic");
+
 	hw->bus.type = ixgbe_bus_type_pci_express;
 
 	/* Get the negotiated link width and speed from PCI config space */
@@ -399,6 +412,8 @@ void ixgbe_set_lan_id_multi_port_pcie(struct ixgbe_hw *hw)
 	struct ixgbe_bus_info *bus = &hw->bus;
 	u32 reg;
 
+	DEBUGFUNC("ixgbe_set_lan_id_multi_port_pcie");
+
 	reg = IXGBE_READ_REG(hw, IXGBE_STATUS);
 	bus->func = (reg & IXGBE_STATUS_LAN_ID) >> IXGBE_STATUS_LAN_ID_SHIFT;
 	bus->lan_id = bus->func;
@@ -424,6 +439,8 @@ s32 ixgbe_stop_adapter_generic(struct ixgbe_hw *hw)
 	u32 reg_val;
 	u16 i;
 
+	DEBUGFUNC("ixgbe_stop_adapter_generic");
+
 	/*
 	 * Set the adapter_stopped flag so other driver functions stop touching
 	 * the hardware
@@ -472,6 +489,8 @@ s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index)
 {
 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
 
+	DEBUGFUNC("ixgbe_led_on_generic");
+
 	/* To turn on the LED, set mode to ON. */
 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
 	led_reg |= IXGBE_LED_ON << IXGBE_LED_MODE_SHIFT(index);
@@ -490,6 +509,8 @@ s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index)
 {
 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
 
+	DEBUGFUNC("ixgbe_led_off_generic");
+
 	/* To turn off the LED, set mode to OFF. */
 	led_reg &= ~IXGBE_LED_MODE_MASK(index);
 	led_reg |= IXGBE_LED_OFF << IXGBE_LED_MODE_SHIFT(index);
@@ -512,6 +533,8 @@ s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw)
 	u32 eec;
 	u16 eeprom_size;
 
+	DEBUGFUNC("ixgbe_init_eeprom_params_generic");
+
 	if (eeprom->type == ixgbe_eeprom_uninitialized) {
 		eeprom->type = ixgbe_eeprom_none;
 		/* Set default semaphore delay to 10ms which is a well
@@ -533,7 +556,7 @@ s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw)
 			eeprom_size = (u16)((eec & IXGBE_EEC_SIZE) >>
 			                    IXGBE_EEC_SIZE_SHIFT);
 			eeprom->word_size = 1 << (eeprom_size +
-			                         IXGBE_EEPROM_WORD_SIZE_SHIFT);
+			                     IXGBE_EEPROM_WORD_SIZE_BASE_SHIFT);
 		}
 
 		if (eec & IXGBE_EEC_ADDR_SIZE)
@@ -562,6 +585,8 @@ s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data)
 	s32 status;
 	u8 write_opcode = IXGBE_EEPROM_WRITE_OPCODE_SPI;
 
+	DEBUGFUNC("ixgbe_write_eeprom_generic");
+
 	hw->eeprom.ops.init_params(hw);
 
 	if (offset >= hw->eeprom.word_size) {
@@ -629,6 +654,8 @@ s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
 	u16 word_in;
 	u8 read_opcode = IXGBE_EEPROM_READ_OPCODE_SPI;
 
+	DEBUGFUNC("ixgbe_read_eeprom_bit_bang_generic");
+
 	hw->eeprom.ops.init_params(hw);
 
 	if (offset >= hw->eeprom.word_size) {
@@ -675,18 +702,20 @@ out:
 }
 
 /**
- *  ixgbe_read_eeprom_generic - Read EEPROM word using EERD
+ *  ixgbe_read_eerd_generic - Read EEPROM word using EERD
  *  @hw: pointer to hardware structure
  *  @offset: offset of  word in the EEPROM to read
  *  @data: word read from the EEPROM
  *
  *  Reads a 16 bit word from the EEPROM using the EERD register.
  **/
-s32 ixgbe_read_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 *data)
+s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data)
 {
 	u32 eerd;
 	s32 status;
 
+	DEBUGFUNC("ixgbe_read_eerd_generic");
+
 	hw->eeprom.ops.init_params(hw);
 
 	if (offset >= hw->eeprom.word_size) {
@@ -694,15 +723,15 @@ s32 ixgbe_read_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 *data)
 		goto out;
 	}
 
-	eerd = (offset << IXGBE_EEPROM_READ_ADDR_SHIFT) +
-	       IXGBE_EEPROM_READ_REG_START;
+	eerd = (offset << IXGBE_EEPROM_RW_ADDR_SHIFT) +
+	       IXGBE_EEPROM_RW_REG_START;
 
 	IXGBE_WRITE_REG(hw, IXGBE_EERD, eerd);
-	status = ixgbe_poll_eeprom_eerd_done(hw);
+	status = ixgbe_poll_eerd_eewr_done(hw, IXGBE_NVM_POLL_READ);
 
 	if (status == IXGBE_SUCCESS)
 		*data = (IXGBE_READ_REG(hw, IXGBE_EERD) >>
-		         IXGBE_EEPROM_READ_REG_DATA);
+		         IXGBE_EEPROM_RW_REG_DATA);
 	else
 		DEBUGOUT("Eeprom read timed out\n");
 
@@ -711,20 +740,28 @@ out:
 }
 
 /**
- *  ixgbe_poll_eeprom_eerd_done - Poll EERD status
+ *  ixgbe_poll_eerd_eewr_done - Poll EERD read or EEWR write status
  *  @hw: pointer to hardware structure
+ *  @ee_reg: EEPROM flag for polling
  *
- *  Polls the status bit (bit 1) of the EERD to determine when the read is done.
+ *  Polls the status bit (bit 1) of the EERD or EEWR to determine when the
+ *  read or write is done respectively.
  **/
-static s32 ixgbe_poll_eeprom_eerd_done(struct ixgbe_hw *hw)
+s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg)
 {
 	u32 i;
 	u32 reg;
 	s32 status = IXGBE_ERR_EEPROM;
 
-	for (i = 0; i < IXGBE_EERD_ATTEMPTS; i++) {
-		reg = IXGBE_READ_REG(hw, IXGBE_EERD);
-		if (reg & IXGBE_EEPROM_READ_REG_DONE) {
+	DEBUGFUNC("ixgbe_poll_eerd_eewr_done");
+
+	for (i = 0; i < IXGBE_EERD_EEWR_ATTEMPTS; i++) {
+		if (ee_reg == IXGBE_NVM_POLL_READ)
+			reg = IXGBE_READ_REG(hw, IXGBE_EERD);
+		else
+			reg = IXGBE_READ_REG(hw, IXGBE_EEWR);
+
+		if (reg & IXGBE_EEPROM_RW_REG_DONE) {
 			status = IXGBE_SUCCESS;
 			break;
 		}
@@ -746,6 +783,8 @@ static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw)
 	u32 eec;
 	u32 i;
 
+	DEBUGFUNC("ixgbe_acquire_eeprom");
+
 	if (ixgbe_acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) != IXGBE_SUCCESS)
 		status = IXGBE_ERR_SWFW_SYNC;
 
@@ -798,6 +837,8 @@ static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw)
 	u32 i;
 	u32 swsm;
 
+	DEBUGFUNC("ixgbe_get_eeprom_semaphore");
+
 	/* Get SMBI software semaphore between device drivers first */
 	for (i = 0; i < timeout; i++) {
 		/*
@@ -860,6 +901,8 @@ static void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw)
 {
 	u32 swsm;
 
+	DEBUGFUNC("ixgbe_release_eeprom_semaphore");
+
 	swsm = IXGBE_READ_REG(hw, IXGBE_SWSM);
 
 	/* Release both semaphores by writing 0 to the bits SWESMBI and SMBI */
@@ -878,6 +921,8 @@ static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw)
 	u16 i;
 	u8 spi_stat_reg;
 
+	DEBUGFUNC("ixgbe_ready_eeprom");
+
 	/*
 	 * Read "Status Register" repeatedly until the LSB is cleared.  The
 	 * EEPROM will signal that the command has been completed by clearing
@@ -915,6 +960,8 @@ static void ixgbe_standby_eeprom(struct ixgbe_hw *hw)
 {
 	u32 eec;
 
+	DEBUGFUNC("ixgbe_standby_eeprom");
+
 	eec = IXGBE_READ_REG(hw, IXGBE_EEC);
 
 	/* Toggle CS to flush commands */
@@ -941,6 +988,8 @@ static void ixgbe_shift_out_eeprom_bits(struct ixgbe_hw *hw, u16 data,
 	u32 mask;
 	u32 i;
 
+	DEBUGFUNC("ixgbe_shift_out_eeprom_bits");
+
 	eec = IXGBE_READ_REG(hw, IXGBE_EEC);
 
 	/*
@@ -993,6 +1042,8 @@ static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count)
 	u32 i;
 	u16 data = 0;
 
+	DEBUGFUNC("ixgbe_shift_in_eeprom_bits");
+
 	/*
 	 * In order to read a register from the EEPROM, we need to shift
 	 * 'count' bits in from the EEPROM. Bits are "shifted in" by raising
@@ -1027,6 +1078,8 @@ static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count)
  **/
 static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec)
 {
+	DEBUGFUNC("ixgbe_raise_eeprom_clk");
+
 	/*
 	 * Raise the clock input to the EEPROM
 	 * (setting the SK bit), then delay
@@ -1044,6 +1097,8 @@ static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec)
  **/
 static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec)
 {
+	DEBUGFUNC("ixgbe_lower_eeprom_clk");
+
 	/*
 	 * Lower the clock input to the EEPROM (clearing the SK bit), then
 	 * delay
@@ -1062,6 +1117,8 @@ static void ixgbe_release_eeprom(struct ixgbe_hw *hw)
 {
 	u32 eec;
 
+	DEBUGFUNC("ixgbe_release_eeprom");
+
 	eec = IXGBE_READ_REG(hw, IXGBE_EEC);
 
 	eec |= IXGBE_EEC_CS;  /* Pull CS high */
@@ -1083,10 +1140,10 @@ static void ixgbe_release_eeprom(struct ixgbe_hw *hw)
 }
 
 /**
- *  ixgbe_calc_eeprom_checksum - Calculates and returns the checksum
+ *  ixgbe_calc_eeprom_checksum_generic - Calculates and returns the checksum
  *  @hw: pointer to hardware structure
  **/
-static u16 ixgbe_calc_eeprom_checksum(struct ixgbe_hw *hw)
+u16 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw)
 {
 	u16 i;
 	u16 j;
@@ -1095,6 +1152,8 @@ static u16 ixgbe_calc_eeprom_checksum(struct ixgbe_hw *hw)
 	u16 pointer = 0;
 	u16 word = 0;
 
+	DEBUGFUNC("ixgbe_calc_eeprom_checksum_generic");
+
 	/* Include 0x0-0x3F in the checksum */
 	for (i = 0; i < IXGBE_EEPROM_CHECKSUM; i++) {
 		if (hw->eeprom.ops.read(hw, i, &word) != IXGBE_SUCCESS) {
@@ -1141,6 +1200,8 @@ s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
 	u16 checksum;
 	u16 read_checksum = 0;
 
+	DEBUGFUNC("ixgbe_validate_eeprom_checksum_generic");
+
 	/*
 	 * Read the first word from the EEPROM. If this times out or fails, do
 	 * not continue or we could be in for a very long wait while every
@@ -1149,7 +1210,7 @@ s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
 	status = hw->eeprom.ops.read(hw, 0, &checksum);
 
 	if (status == IXGBE_SUCCESS) {
-		checksum = ixgbe_calc_eeprom_checksum(hw);
+		checksum = hw->eeprom.ops.calc_checksum(hw);
 
 		hw->eeprom.ops.read(hw, IXGBE_EEPROM_CHECKSUM, &read_checksum);
 
@@ -1179,6 +1240,8 @@ s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw)
 	s32 status;
 	u16 checksum;
 
+	DEBUGFUNC("ixgbe_update_eeprom_checksum_generic");
+
 	/*
 	 * Read the first word from the EEPROM. If this times out or fails, do
 	 * not continue or we could be in for a very long wait while every
@@ -1187,7 +1250,7 @@ s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw)
 	status = hw->eeprom.ops.read(hw, 0, &checksum);
 
 	if (status == IXGBE_SUCCESS) {
-		checksum = ixgbe_calc_eeprom_checksum(hw);
+		checksum = hw->eeprom.ops.calc_checksum(hw);
 		status = hw->eeprom.ops.write(hw, IXGBE_EEPROM_CHECKSUM,
 		                              checksum);
 	} else {
@@ -1207,6 +1270,8 @@ s32 ixgbe_validate_mac_addr(u8 *mac_addr)
 {
 	s32 status = IXGBE_SUCCESS;
 
+	DEBUGFUNC("ixgbe_validate_mac_addr");
+
 	/* Make sure it is not a multicast address */
 	if (IXGBE_IS_MULTICAST(mac_addr)) {
 		DEBUGOUT("MAC address is multicast\n");
@@ -1240,6 +1305,8 @@ s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
 	u32 rar_low, rar_high;
 	u32 rar_entries = hw->mac.num_rar_entries;
 
+	DEBUGFUNC("ixgbe_set_rar_generic");
+
 	/* setup VMDq pool selection before this RAR gets enabled */
 	hw->mac.ops.set_vmdq(hw, index, vmdq);
 
@@ -1286,6 +1353,8 @@ s32 ixgbe_clear_rar_generic(struct ixgbe_hw *hw, u32 index)
 	u32 rar_high;
 	u32 rar_entries = hw->mac.num_rar_entries;
 
+	DEBUGFUNC("ixgbe_clear_rar_generic");
+
 	/* Make sure we are using a valid rar index range */
 	if (index < rar_entries) {
 		/*
@@ -1321,6 +1390,8 @@ s32 ixgbe_init_rx_addrs_generic(struct ixgbe_hw *hw)
 	u32 i;
 	u32 rar_entries = hw->mac.num_rar_entries;
 
+	DEBUGFUNC("ixgbe_init_rx_addrs_generic");
+
 	/*
 	 * If the current mac address is valid, assume it is a software override
 	 * to the permanent address.
@@ -1383,6 +1454,8 @@ void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
 	u32 rar_entries = hw->mac.num_rar_entries;
 	u32 rar;
 
+	DEBUGFUNC("ixgbe_add_uc_addr");
+
 	DEBUGOUT6(" UC Addr = %.2X %.2X %.2X %.2X %.2X %.2X\n",
 	          addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
 
@@ -1426,6 +1499,8 @@ s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw, u8 *addr_list,
 	u32 fctrl;
 	u32 vmdq;
 
+	DEBUGFUNC("ixgbe_update_uc_addr_list_generic");
+
 	/*
 	 * Clear accounting of old secondary address list,
 	 * don't count RAR[0]
@@ -1435,10 +1510,10 @@ s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw, u8 *addr_list,
 	hw->addr_ctrl.overflow_promisc = 0;
 
 	/* Zero out the other receive addresses */
-	DEBUGOUT1("Clearing RAR[1-%d]\n", hw->addr_ctrl.rar_used_count);
-	for (i = 1; i <= hw->addr_ctrl.rar_used_count; i++) {
-		IXGBE_WRITE_REG(hw, IXGBE_RAL(i), 0);
-		IXGBE_WRITE_REG(hw, IXGBE_RAH(i), 0);
+	DEBUGOUT1("Clearing RAR[1-%d]\n", uc_addr_in_use+1);
+	for (i = 0; i < uc_addr_in_use; i++) {
+		IXGBE_WRITE_REG(hw, IXGBE_RAL(1+i), 0);
+		IXGBE_WRITE_REG(hw, IXGBE_RAH(1+i), 0);
 	}
 
 	/* Add the new addresses */
@@ -1486,6 +1561,8 @@ static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr)
 {
 	u32 vector = 0;
 
+	DEBUGFUNC("ixgbe_mta_vector");
+
 	switch (hw->mac.mc_filter_type) {
 	case 0:   /* use bits [47:36] of the address */
 		vector = ((mc_addr[4] >> 4) | (((u16)mc_addr[5]) << 4));
@@ -1524,6 +1601,8 @@ void ixgbe_set_mta(struct ixgbe_hw *hw, u8 *mc_addr)
 	u32 vector_reg;
 	u32 mta_reg;
 
+	DEBUGFUNC("ixgbe_set_mta");
+
 	hw->addr_ctrl.mta_in_use++;
 
 	vector = ixgbe_mta_vector(hw, mc_addr);
@@ -1563,6 +1642,8 @@ s32 ixgbe_update_mc_addr_list_generic(struct ixgbe_hw *hw, u8 *mc_addr_list,
 	u32 i;
 	u32 vmdq;
 
+	DEBUGFUNC("ixgbe_update_mc_addr_list_generic");
+
 	/*
 	 * Set the new number of MC addresses that we are being requested to
 	 * use.
@@ -1600,6 +1681,8 @@ s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw)
 {
 	struct ixgbe_addr_filter_info *a = &hw->addr_ctrl;
 
+	DEBUGFUNC("ixgbe_enable_mc_generic");
+
 	if (a->mta_in_use > 0)
 		IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, IXGBE_MCSTCTRL_MFE |
 		                hw->mac.mc_filter_type);
@@ -1617,6 +1700,8 @@ s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw)
 {
 	struct ixgbe_addr_filter_info *a = &hw->addr_ctrl;
 
+	DEBUGFUNC("ixgbe_disable_mc_generic");
+
 	if (a->mta_in_use > 0)
 		IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, hw->mac.mc_filter_type);
 
@@ -1692,7 +1777,7 @@ s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num)
 		break;
 	default:
 		DEBUGOUT("Flow control param set incorrectly\n");
-		ret_val = -IXGBE_ERR_CONFIG;
+		ret_val = IXGBE_ERR_CONFIG;
 		goto out;
 		break;
 	}
@@ -1761,6 +1846,7 @@ s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw)
 	s32 ret_val = IXGBE_SUCCESS;
 	ixgbe_link_speed speed;
 	u32 pcs_anadv_reg, pcs_lpab_reg, linkstat;
+	u32 links2, anlp1_reg, autoc_reg, links;
 	bool link_up;
 
 	DEBUGFUNC("ixgbe_fc_autoneg");
@@ -1769,27 +1855,68 @@ s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw)
 	 * AN should have completed when the cable was plugged in.
 	 * Look for reasons to bail out.  Bail out if:
 	 * - FC autoneg is disabled, or if
-	 * - we don't have multispeed fiber, or if
-	 * - we're not running at 1G, or if
-	 * - link is not up, or if
-	 * - link is up but AN did not complete, or if
-	 * - link is up and AN completed but timed out
+	 * - link is not up.
 	 *
-	 * Since we're being called from an LSC, link is already know to be up.
+	 * Since we're being called from an LSC, link is already known to be up.
 	 * So use link_up_wait_to_complete=FALSE.
 	 */
 	hw->mac.ops.check_link(hw, &speed, &link_up, FALSE);
-	linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA);
 
-	if (hw->fc.disable_fc_autoneg ||
-	    !hw->phy.multispeed_fiber ||
-	    (speed != IXGBE_LINK_SPEED_1GB_FULL) ||
-	    !link_up ||
-	    ((linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) ||
-	    ((linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1)) {
+	if (hw->fc.disable_fc_autoneg || (!link_up)) {
+		hw->fc.fc_was_autonegged = FALSE;
+		hw->fc.current_mode = hw->fc.requested_mode;
+		goto out;
+	}
+
+	/*
+	 * On backplane, bail out if
+	 * - backplane autoneg was not completed, or if
+	 * - we are 82599 and link partner is not AN enabled
+	 */
+	if (hw->phy.media_type == ixgbe_media_type_backplane) {
+		links = IXGBE_READ_REG(hw, IXGBE_LINKS);
+		if ((links & IXGBE_LINKS_KX_AN_COMP) == 0) {
+			hw->fc.fc_was_autonegged = FALSE;
+			hw->fc.current_mode = hw->fc.requested_mode;
+			goto out;
+		}
+
+		if (hw->mac.type == ixgbe_mac_82599EB) {
+			links2 = IXGBE_READ_REG(hw, IXGBE_LINKS2);
+			if ((links2 & IXGBE_LINKS2_AN_SUPPORTED) == 0) {
+				hw->fc.fc_was_autonegged = FALSE;
+				hw->fc.current_mode = hw->fc.requested_mode;
+				goto out;
+			}
+		}
+	}
+
+	/*
+	 * On multispeed fiber at 1g, bail out if
+	 * - link is up but AN did not complete, or if
+	 * - link is up and AN completed but timed out
+	 */
+	if (hw->phy.multispeed_fiber && (speed == IXGBE_LINK_SPEED_1GB_FULL)) {
+		linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA);
+		if (((linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) ||
+		    ((linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1)) {
+			hw->fc.fc_was_autonegged = FALSE;
+			hw->fc.current_mode = hw->fc.requested_mode;
+			goto out;
+		}
+	}
+
+	/*
+	 * Bail out on
+	 * - copper or CX4 adapters
+	 * - fiber adapters running at 10gig
+	 */
+	if ((hw->phy.media_type == ixgbe_media_type_copper) ||
+	     (hw->phy.media_type == ixgbe_media_type_cx4) ||
+	     ((hw->phy.media_type == ixgbe_media_type_fiber) &&
+	     (speed == IXGBE_LINK_SPEED_10GB_FULL))) {
 		hw->fc.fc_was_autonegged = FALSE;
 		hw->fc.current_mode = hw->fc.requested_mode;
-		DEBUGOUT("Autoneg FC was skipped.\n");
 		goto out;
 	}
 
@@ -1797,41 +1924,85 @@ s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw)
 	 * Read the AN advertisement and LP ability registers and resolve
 	 * local flow control settings accordingly
 	 */
-	pcs_anadv_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
-	pcs_lpab_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANLP);
-	if ((pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
-		(pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE)) {
-		/*
-		 * Now we need to check if the user selected Rx ONLY
-		 * of pause frames.  In this case, we had to advertise
-		 * FULL flow control because we could not advertise RX
-		 * ONLY. Hence, we must now check to see if we need to
-		 * turn OFF the TRANSMISSION of PAUSE frames.
-		 */
-		if (hw->fc.requested_mode == ixgbe_fc_full) {
-			hw->fc.current_mode = ixgbe_fc_full;
-			DEBUGOUT("Flow Control = FULL.\n");
-		} else {
+	if ((speed == IXGBE_LINK_SPEED_1GB_FULL) &&
+	    (hw->phy.media_type != ixgbe_media_type_backplane)) {
+		pcs_anadv_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA);
+		pcs_lpab_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANLP);
+		if ((pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
+		    (pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE)) {
+			/*
+			 * Now we need to check if the user selected Rx ONLY
+			 * of pause frames.  In this case, we had to advertise
+			 * FULL flow control because we could not advertise RX
+			 * ONLY. Hence, we must now check to see if we need to
+			 * turn OFF the TRANSMISSION of PAUSE frames.
+			 */
+			if (hw->fc.requested_mode == ixgbe_fc_full) {
+				hw->fc.current_mode = ixgbe_fc_full;
+				DEBUGOUT("Flow Control = FULL.\n");
+			} else {
+				hw->fc.current_mode = ixgbe_fc_rx_pause;
+				DEBUGOUT("Flow Control=RX PAUSE frames only\n");
+			}
+		} else if (!(pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
+			   (pcs_anadv_reg & IXGBE_PCS1GANA_ASM_PAUSE) &&
+			   (pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
+			   (pcs_lpab_reg & IXGBE_PCS1GANA_ASM_PAUSE)) {
+			hw->fc.current_mode = ixgbe_fc_tx_pause;
+			DEBUGOUT("Flow Control = TX PAUSE frames only.\n");
+		} else if ((pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
+			   (pcs_anadv_reg & IXGBE_PCS1GANA_ASM_PAUSE) &&
+			   !(pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
+			   (pcs_lpab_reg & IXGBE_PCS1GANA_ASM_PAUSE)) {
 			hw->fc.current_mode = ixgbe_fc_rx_pause;
 			DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
+		} else {
+			hw->fc.current_mode = ixgbe_fc_none;
+			DEBUGOUT("Flow Control = NONE.\n");
 		}
-	} else if (!(pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
-		   (pcs_anadv_reg & IXGBE_PCS1GANA_ASM_PAUSE) &&
-		   (pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
-		   (pcs_lpab_reg & IXGBE_PCS1GANA_ASM_PAUSE)) {
-		hw->fc.current_mode = ixgbe_fc_tx_pause;
-		DEBUGOUT("Flow Control = TX PAUSE frames only.\n");
-	} else if ((pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
-		   (pcs_anadv_reg & IXGBE_PCS1GANA_ASM_PAUSE) &&
-		   !(pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE) &&
-		   (pcs_lpab_reg & IXGBE_PCS1GANA_ASM_PAUSE)) {
-		hw->fc.current_mode = ixgbe_fc_rx_pause;
-		DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
-	} else {
-		hw->fc.current_mode = ixgbe_fc_none;
-		DEBUGOUT("Flow Control = NONE.\n");
 	}
 
+	if (hw->phy.media_type == ixgbe_media_type_backplane) {
+		/*
+		 * Read the 10g AN autoc and LP ability registers and resolve
+		 * local flow control settings accordingly
+		 */
+		autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
+		anlp1_reg = IXGBE_READ_REG(hw, IXGBE_ANLP1);
+
+		if ((autoc_reg & IXGBE_AUTOC_SYM_PAUSE) &&
+		    (anlp1_reg & IXGBE_ANLP1_SYM_PAUSE)) {
+			/*
+			 * Now we need to check if the user selected Rx ONLY
+			 * of pause frames.  In this case, we had to advertise
+			 * FULL flow control because we could not advertise RX
+			 * ONLY. Hence, we must now check to see if we need to
+			 * turn OFF the TRANSMISSION of PAUSE frames.
+			 */
+			if (hw->fc.requested_mode == ixgbe_fc_full) {
+				hw->fc.current_mode = ixgbe_fc_full;
+				DEBUGOUT("Flow Control = FULL.\n");
+			} else {
+				hw->fc.current_mode = ixgbe_fc_rx_pause;
+				DEBUGOUT("Flow Control=RX PAUSE frames only\n");
+			}
+		} else if (!(autoc_reg & IXGBE_AUTOC_SYM_PAUSE) &&
+			   (autoc_reg & IXGBE_AUTOC_ASM_PAUSE) &&
+			   (anlp1_reg & IXGBE_ANLP1_SYM_PAUSE) &&
+			   (anlp1_reg & IXGBE_ANLP1_ASM_PAUSE)) {
+			hw->fc.current_mode = ixgbe_fc_tx_pause;
+			DEBUGOUT("Flow Control = TX PAUSE frames only.\n");
+		} else if ((autoc_reg & IXGBE_AUTOC_SYM_PAUSE) &&
+			   (autoc_reg & IXGBE_AUTOC_ASM_PAUSE) &&
+			   !(anlp1_reg & IXGBE_ANLP1_SYM_PAUSE) &&
+			   (anlp1_reg & IXGBE_ANLP1_ASM_PAUSE)) {
+			hw->fc.current_mode = ixgbe_fc_rx_pause;
+			DEBUGOUT("Flow Control = RX PAUSE frames only.\n");
+		} else {
+			hw->fc.current_mode = ixgbe_fc_none;
+			DEBUGOUT("Flow Control = NONE.\n");
+		}
+	}
 	/* Record that current_mode is the result of a successful autoneg */
 	hw->fc.fc_was_autonegged = TRUE;
 
@@ -1850,6 +2021,8 @@ s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num)
 	s32 ret_val = IXGBE_SUCCESS;
 	u32 reg;
 
+	DEBUGFUNC("ixgbe_setup_fc");
+
 
 	/* Validate the packetbuf configuration */
 	if (packetbuf_num < 0 || packetbuf_num > 7) {
@@ -1933,7 +2106,7 @@ s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num)
 		break;
 	default:
 		DEBUGOUT("Flow control param set incorrectly\n");
-		ret_val = -IXGBE_ERR_CONFIG;
+		ret_val = IXGBE_ERR_CONFIG;
 		goto out;
 		break;
 	}
@@ -1941,9 +2114,6 @@ s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num)
 	IXGBE_WRITE_REG(hw, IXGBE_PCS1GANA, reg);
 	reg = IXGBE_READ_REG(hw, IXGBE_PCS1GLCTL);
 
-	/* Enable and restart autoneg to inform the link partner */
-	reg |= IXGBE_PCS1GLCTL_AN_ENABLE | IXGBE_PCS1GLCTL_AN_RESTART;
-
 	/* Disable AN timeout */
 	if (hw->fc.strict_ieee)
 		reg &= ~IXGBE_PCS1GLCTL_AN_1G_TIMEOUT_EN;
@@ -1951,6 +2121,65 @@ s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num)
 	IXGBE_WRITE_REG(hw, IXGBE_PCS1GLCTL, reg);
 	DEBUGOUT1("Set up FC; PCS1GLCTL = 0x%08X\n", reg);
 
+	/*
+	 * Set up the 10G flow control advertisement registers so the HW
+	 * can do fc autoneg once the cable is plugged in.  If we end up
+	 * using 1g instead, this is harmless.
+	 */
+	reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
+
+	/*
+	 * The possible values of fc.requested_mode are:
+	 * 0: Flow control is completely disabled
+	 * 1: Rx flow control is enabled (we can receive pause frames,
+	 *    but not send pause frames).
+	 * 2: Tx flow control is enabled (we can send pause frames but
+	 *    we do not support receiving pause frames).
+	 * 3: Both Rx and Tx flow control (symmetric) are enabled.
+	 * other: Invalid.
+	 */
+	switch (hw->fc.requested_mode) {
+	case ixgbe_fc_none:
+		/* Flow control completely disabled by software override. */
+		reg &= ~(IXGBE_AUTOC_SYM_PAUSE | IXGBE_AUTOC_ASM_PAUSE);
+		break;
+	case ixgbe_fc_rx_pause:
+		/*
+		 * Rx Flow control is enabled and Tx Flow control is
+		 * disabled by software override. Since there really
+		 * isn't a way to advertise that we are capable of RX
+		 * Pause ONLY, we will advertise that we support both
+		 * symmetric and asymmetric Rx PAUSE.  Later, we will
+		 * disable the adapter's ability to send PAUSE frames.
+		 */
+		reg |= (IXGBE_AUTOC_SYM_PAUSE | IXGBE_AUTOC_ASM_PAUSE);
+		break;
+	case ixgbe_fc_tx_pause:
+		/*
+		 * Tx Flow control is enabled, and Rx Flow control is
+		 * disabled by software override.
+		 */
+		reg |= (IXGBE_AUTOC_ASM_PAUSE);
+		reg &= ~(IXGBE_AUTOC_SYM_PAUSE);
+		break;
+	case ixgbe_fc_full:
+		/* Flow control (both Rx and Tx) is enabled by SW override. */
+		reg |= (IXGBE_AUTOC_SYM_PAUSE | IXGBE_AUTOC_ASM_PAUSE);
+		break;
+	default:
+		DEBUGOUT("Flow control param set incorrectly\n");
+		ret_val = IXGBE_ERR_CONFIG;
+		goto out;
+		break;
+	}
+	/*
+	 * AUTOC restart handles negotiation of 1G and 10G. There is
+	 * no need to set the PCS1GCTL register.
+	 */
+	reg |= IXGBE_AUTOC_AN_RESTART;
+	IXGBE_WRITE_REG(hw, IXGBE_AUTOC, reg);
+	DEBUGOUT1("Set up FC; IXGBE_AUTOC = 0x%08X\n", reg);
+
 out:
 	return ret_val;
 }
@@ -1971,6 +2200,8 @@ s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw)
 	u32 number_of_queues;
 	s32 status = IXGBE_ERR_MASTER_REQUESTS_PENDING;
 
+	DEBUGFUNC("ixgbe_disable_pcie_master");
+
 	/* Disable the receive unit by stopping each queue */
 	number_of_queues = hw->mac.max_rx_queues;
 	for (i = 0; i < number_of_queues; i++) {
@@ -2012,13 +2243,15 @@ s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask)
 	u32 fwmask = mask << 5;
 	s32 timeout = 200;
 
+	DEBUGFUNC("ixgbe_acquire_swfw_sync");
+
 	while (timeout) {
 		/*
 		 * SW EEPROM semaphore bit is used for access to all
 		 * SW_FW_SYNC/GSSR bits (not just EEPROM)
 		 */
 		if (ixgbe_get_eeprom_semaphore(hw))
-			return -IXGBE_ERR_SWFW_SYNC;
+			return IXGBE_ERR_SWFW_SYNC;
 
 		gssr = IXGBE_READ_REG(hw, IXGBE_GSSR);
 		if (!(gssr & (fwmask | swmask)))
@@ -2035,7 +2268,7 @@ s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask)
 
 	if (!timeout) {
 		DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n");
-		return -IXGBE_ERR_SWFW_SYNC;
+		return IXGBE_ERR_SWFW_SYNC;
 	}
 
 	gssr |= swmask;
@@ -2058,6 +2291,8 @@ void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u16 mask)
 	u32 gssr;
 	u32 swmask = mask;
 
+	DEBUGFUNC("ixgbe_release_swfw_sync");
+
 	ixgbe_get_eeprom_semaphore(hw);
 
 	gssr = IXGBE_READ_REG(hw, IXGBE_GSSR);
@@ -2076,6 +2311,8 @@ void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u16 mask)
  **/
 s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval)
 {
+	DEBUGFUNC("ixgbe_enable_rx_dma_generic");
+
 	IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, regval);
 
 	return IXGBE_SUCCESS;
@@ -2093,6 +2330,8 @@ s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index)
 	u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
 
+	DEBUGFUNC("ixgbe_blink_led_start_generic");
+
 	/*
 	 * Link must be up to auto-blink the LEDs;
 	 * Force it if link is down.
@@ -2125,6 +2364,8 @@ s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index)
 	u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC);
 	u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL);
 
+	DEBUGFUNC("ixgbe_blink_led_stop_generic");
+
 
 	autoc_reg &= ~IXGBE_AUTOC_FLU;
 	autoc_reg |= IXGBE_AUTOC_AN_RESTART;
@@ -2139,3 +2380,582 @@ s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index)
 	return IXGBE_SUCCESS;
 }
 
+/**
+ *  ixgbe_get_san_mac_addr_offset - Get SAN MAC address offset from the EEPROM
+ *  @hw: pointer to hardware structure
+ *  @san_mac_offset: SAN MAC address offset
+ *
+ *  This function will read the EEPROM location for the SAN MAC address
+ *  pointer, and returns the value at that location.  This is used in both
+ *  get and set mac_addr routines.
+ **/
+static s32 ixgbe_get_san_mac_addr_offset(struct ixgbe_hw *hw,
+                                        u16 *san_mac_offset)
+{
+	DEBUGFUNC("ixgbe_get_san_mac_addr_offset");
+
+	/*
+	 * First read the EEPROM pointer to see if the MAC addresses are
+	 * available.
+	 */
+	hw->eeprom.ops.read(hw, IXGBE_SAN_MAC_ADDR_PTR, san_mac_offset);
+
+	return IXGBE_SUCCESS;
+}
+
+/**
+ *  ixgbe_get_san_mac_addr_generic - SAN MAC address retrieval from the EEPROM
+ *  @hw: pointer to hardware structure
+ *  @san_mac_addr: SAN MAC address
+ *
+ *  Reads the SAN MAC address from the EEPROM, if it's available.  This is
+ *  per-port, so set_lan_id() must be called before reading the addresses.
+ *  set_lan_id() is called by identify_sfp(), but this cannot be relied
+ *  upon for non-SFP connections, so we must call it here.
+ **/
+s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
+{
+	u16 san_mac_data, san_mac_offset;
+	u8 i;
+
+	DEBUGFUNC("ixgbe_get_san_mac_addr_generic");
+
+	/*
+	 * First read the EEPROM pointer to see if the MAC addresses are
+	 * available.  If they're not, no point in calling set_lan_id() here.
+	 */
+	ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
+
+	if ((san_mac_offset == 0) || (san_mac_offset == 0xFFFF)) {
+		/*
+		 * No addresses available in this EEPROM.  It's not an
+		 * error though, so just wipe the local address and return.
+		 */
+		for (i = 0; i < 6; i++)
+			san_mac_addr[i] = 0xFF;
+
+		goto san_mac_addr_out;
+	}
+
+	/* make sure we know which port we need to program */
+	hw->mac.ops.set_lan_id(hw);
+	/* apply the port offset to the address offset */
+	(hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
+	                 (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
+	for (i = 0; i < 3; i++) {
+		hw->eeprom.ops.read(hw, san_mac_offset, &san_mac_data);
+		san_mac_addr[i * 2] = (u8)(san_mac_data);
+		san_mac_addr[i * 2 + 1] = (u8)(san_mac_data >> 8);
+		san_mac_offset++;
+	}
+
+san_mac_addr_out:
+	return IXGBE_SUCCESS;
+}
+
+/**
+ *  ixgbe_set_san_mac_addr_generic - Write the SAN MAC address to the EEPROM
+ *  @hw: pointer to hardware structure
+ *  @san_mac_addr: SAN MAC address
+ *
+ *  Write a SAN MAC address to the EEPROM.
+ **/
+s32 ixgbe_set_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr)
+{
+	s32 status = IXGBE_SUCCESS;
+	u16 san_mac_data, san_mac_offset;
+	u8 i;
+
+	DEBUGFUNC("ixgbe_set_san_mac_addr_generic");
+
+	/* Look for SAN mac address pointer.  If not defined, return */
+	ixgbe_get_san_mac_addr_offset(hw, &san_mac_offset);
+
+	if ((san_mac_offset == 0) || (san_mac_offset == 0xFFFF)) {
+		status = IXGBE_ERR_NO_SAN_ADDR_PTR;
+		goto san_mac_addr_out;
+	}
+
+	/* Make sure we know which port we need to write */
+	hw->mac.ops.set_lan_id(hw);
+	/* Apply the port offset to the address offset */
+	(hw->bus.func) ? (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT1_OFFSET) :
+	                 (san_mac_offset += IXGBE_SAN_MAC_ADDR_PORT0_OFFSET);
+
+	for (i = 0; i < 3; i++) {
+		san_mac_data = (u16)((u16)(san_mac_addr[i * 2 + 1]) << 8);
+		san_mac_data |= (u16)(san_mac_addr[i * 2]);
+		hw->eeprom.ops.write(hw, san_mac_offset, san_mac_data);
+		san_mac_offset++;
+	}
+
+san_mac_addr_out:
+	return status;
+}
+
+/**
+ *  ixgbe_get_pcie_msix_count_generic - Gets MSI-X vector count
+ *  @hw: pointer to hardware structure
+ *
+ *  Read PCIe configuration space, and get the MSI-X vector count from
+ *  the capabilities table.
+ **/
+u32 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw)
+{
+	u32 msix_count = 64;
+
+	DEBUGFUNC("ixgbe_get_pcie_msix_count_generic");
+	if (hw->mac.msix_vectors_from_pcie) {
+		msix_count = IXGBE_READ_PCIE_WORD(hw,
+		                                  IXGBE_PCIE_MSIX_82599_CAPS);
+		msix_count &= IXGBE_PCIE_MSIX_TBL_SZ_MASK;
+
+		/* MSI-X count is zero-based in HW, so increment to give
+		 * proper value */
+		msix_count++;
+	}
+
+	return msix_count;
+}
+
+/**
+ *  ixgbe_insert_mac_addr_generic - Find a RAR for this mac address
+ *  @hw: pointer to hardware structure
+ *  @addr: Address to put into receive address register
+ *  @vmdq: VMDq pool to assign
+ *
+ *  Puts an ethernet address into a receive address register, or
+ *  finds the rar that it is aleady in; adds to the pool list
+ **/
+s32 ixgbe_insert_mac_addr_generic(struct ixgbe_hw *hw, u8 *addr, u32 vmdq)
+{
+	static const u32 NO_EMPTY_RAR_FOUND = 0xFFFFFFFF;
+	u32 first_empty_rar = NO_EMPTY_RAR_FOUND;
+	u32 rar;
+	u32 rar_low, rar_high;
+	u32 addr_low, addr_high;
+
+	DEBUGFUNC("ixgbe_insert_mac_addr_generic");
+
+	/* swap bytes for HW little endian */
+	addr_low  = addr[0] | (addr[1] << 8)
+			    | (addr[2] << 16)
+			    | (addr[3] << 24);
+	addr_high = addr[4] | (addr[5] << 8);
+
+	/*
+	 * Either find the mac_id in rar or find the first empty space.
+	 * rar_highwater points to just after the highest currently used
+	 * rar in order to shorten the search.  It grows when we add a new
+	 * rar to the top.
+	 */
+	for (rar = 0; rar < hw->mac.rar_highwater; rar++) {
+		rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(rar));
+
+		if (((IXGBE_RAH_AV & rar_high) == 0)
+		    && first_empty_rar == NO_EMPTY_RAR_FOUND) {
+			first_empty_rar = rar;
+		} else if ((rar_high & 0xFFFF) == addr_high) {
+			rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(rar));
+			if (rar_low == addr_low)
+				break;    /* found it already in the rars */
+		}
+	}
+
+	if (rar < hw->mac.rar_highwater) {
+		/* already there so just add to the pool bits */
+		ixgbe_set_vmdq(hw, rar, vmdq);
+	} else if (first_empty_rar != NO_EMPTY_RAR_FOUND) {
+		/* stick it into first empty RAR slot we found */
+		rar = first_empty_rar;
+		ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
+	} else if (rar == hw->mac.rar_highwater) {
+		/* add it to the top of the list and inc the highwater mark */
+		ixgbe_set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV);
+		hw->mac.rar_highwater++;
+	} else if (rar >= hw->mac.num_rar_entries) {
+		return IXGBE_ERR_INVALID_MAC_ADDR;
+	}
+
+	/*
+	 * If we found rar[0], make sure the default pool bit (we use pool 0)
+	 * remains cleared to be sure default pool packets will get delivered
+	 */
+	if (rar == 0)
+		ixgbe_clear_vmdq(hw, rar, 0);
+
+	return rar;
+}
+
+/**
+ *  ixgbe_clear_vmdq_generic - Disassociate a VMDq pool index from a rx address
+ *  @hw: pointer to hardware struct
+ *  @rar: receive address register index to disassociate
+ *  @vmdq: VMDq pool index to remove from the rar
+ **/
+s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
+{
+	u32 mpsar_lo, mpsar_hi;
+	u32 rar_entries = hw->mac.num_rar_entries;
+
+	DEBUGFUNC("ixgbe_clear_vmdq_generic");
+
+	if (rar < rar_entries) {
+		mpsar_lo = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
+		mpsar_hi = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
+
+		if (!mpsar_lo && !mpsar_hi)
+			goto done;
+
+		if (vmdq == IXGBE_CLEAR_VMDQ_ALL) {
+			if (mpsar_lo) {
+				IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), 0);
+				mpsar_lo = 0;
+			}
+			if (mpsar_hi) {
+				IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), 0);
+				mpsar_hi = 0;
+			}
+		} else if (vmdq < 32) {
+			mpsar_lo &= ~(1 << vmdq);
+			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar_lo);
+		} else {
+			mpsar_hi &= ~(1 << (vmdq - 32));
+			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar_hi);
+		}
+
+		/* was that the last pool using this rar? */
+		if (mpsar_lo == 0 && mpsar_hi == 0 && rar != 0)
+			hw->mac.ops.clear_rar(hw, rar);
+	} else {
+		DEBUGOUT1("RAR index %d is out of range.\n", rar);
+	}
+
+done:
+	return IXGBE_SUCCESS;
+}
+
+/**
+ *  ixgbe_set_vmdq_generic - Associate a VMDq pool index with a rx address
+ *  @hw: pointer to hardware struct
+ *  @rar: receive address register index to associate with a VMDq index
+ *  @vmdq: VMDq pool index
+ **/
+s32 ixgbe_set_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq)
+{
+	u32 mpsar;
+	u32 rar_entries = hw->mac.num_rar_entries;
+
+	DEBUGFUNC("ixgbe_set_vmdq_generic");
+
+	if (rar < rar_entries) {
+		if (vmdq < 32) {
+			mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_LO(rar));
+			mpsar |= 1 << vmdq;
+			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_LO(rar), mpsar);
+		} else {
+			mpsar = IXGBE_READ_REG(hw, IXGBE_MPSAR_HI(rar));
+			mpsar |= 1 << (vmdq - 32);
+			IXGBE_WRITE_REG(hw, IXGBE_MPSAR_HI(rar), mpsar);
+		}
+	} else {
+		DEBUGOUT1("RAR index %d is out of range.\n", rar);
+	}
+	return IXGBE_SUCCESS;
+}
+
+/**
+ *  ixgbe_init_uta_tables_generic - Initialize the Unicast Table Array
+ *  @hw: pointer to hardware structure
+ **/
+s32 ixgbe_init_uta_tables_generic(struct ixgbe_hw *hw)
+{
+	int i;
+
+	DEBUGFUNC("ixgbe_init_uta_tables_generic");
+	DEBUGOUT(" Clearing UTA\n");
+
+	for (i = 0; i < 128; i++)
+		IXGBE_WRITE_REG(hw, IXGBE_UTA(i), 0);
+
+	return IXGBE_SUCCESS;
+}
+
+/**
+ *  ixgbe_find_vlvf_slot - find the vlanid or the first empty slot
+ *  @hw: pointer to hardware structure
+ *  @vlan: VLAN id to write to VLAN filter
+ *
+ *  return the VLVF index where this VLAN id should be placed
+ *
+ **/
+s32 ixgbe_find_vlvf_slot(struct ixgbe_hw *hw, u32 vlan)
+{
+	u32 bits = 0;
+	u32 first_empty_slot = 0;
+	s32 regindex;
+
+	/*
+	  * Search for the vlan id in the VLVF entries. Save off the first empty
+	  * slot found along the way
+	  */
+	for (regindex = 1; regindex < IXGBE_VLVF_ENTRIES; regindex++) {
+		bits = IXGBE_READ_REG(hw, IXGBE_VLVF(regindex));
+		if (!bits && !(first_empty_slot))
+			first_empty_slot = regindex;
+		else if ((bits & 0x0FFF) == vlan)
+			break;
+	}
+
+	/*
+	  * If regindex is less than IXGBE_VLVF_ENTRIES, then we found the vlan
+	  * in the VLVF. Else use the first empty VLVF register for this
+	  * vlan id.
+	  */
+	if (regindex >= IXGBE_VLVF_ENTRIES) {
+		if (first_empty_slot)
+			regindex = first_empty_slot;
+		else {
+			DEBUGOUT("No space in VLVF.\n");
+			regindex = -1;
+		}
+	}
+
+	return regindex;
+}
+
+/**
+ *  ixgbe_set_vfta_generic - Set VLAN filter table
+ *  @hw: pointer to hardware structure
+ *  @vlan: VLAN id to write to VLAN filter
+ *  @vind: VMDq output index that maps queue to VLAN id in VFVFB
+ *  @vlan_on: boolean flag to turn on/off VLAN in VFVF
+ *
+ *  Turn on/off specified VLAN in the VLAN filter table.
+ **/
+s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
+                           bool vlan_on)
+{
+	s32 regindex;
+	u32 bitindex;
+	u32 bits;
+	u32 vt;
+
+	DEBUGFUNC("ixgbe_set_vfta_generic");
+
+	if (vlan > 4095)
+		return IXGBE_ERR_PARAM;
+
+	/*
+	 * this is a 2 part operation - first the VFTA, then the
+	 * VLVF and VLVFB if VT Mode is set
+	 */
+
+	/* Part 1
+	 * The VFTA is a bitstring made up of 128 32-bit registers
+	 * that enable the particular VLAN id, much like the MTA:
+	 *    bits[11-5]: which register
+	 *    bits[4-0]:  which bit in the register
+	 */
+	regindex = (vlan >> 5) & 0x7F;
+	bitindex = vlan & 0x1F;
+	bits = IXGBE_READ_REG(hw, IXGBE_VFTA(regindex));
+	if (vlan_on)
+		bits |= (1 << bitindex);
+	else
+		bits &= ~(1 << bitindex);
+	IXGBE_WRITE_REG(hw, IXGBE_VFTA(regindex), bits);
+
+
+	/* Part 2
+	 * If VT Mode is set
+	 *   Either vlan_on
+	 *     make sure the vlan is in VLVF
+	 *     set the vind bit in the matching VLVFB
+	 *   Or !vlan_on
+	 *     clear the pool bit and possibly the vind
+	 */
+	vt = IXGBE_READ_REG(hw, IXGBE_VT_CTL);
+	if (vt & IXGBE_VT_CTL_VT_ENABLE) {
+		if (vlan == 0) {
+			regindex = 0;
+		} else {
+			regindex = ixgbe_find_vlvf_slot(hw, vlan);
+			if (regindex < 0)
+				goto out;
+		}
+
+		if (vlan_on) {
+			/* set the pool bit */
+			if (vind < 32) {
+				bits = IXGBE_READ_REG(hw,
+						IXGBE_VLVFB(regindex*2));
+				bits |= (1 << vind);
+				IXGBE_WRITE_REG(hw,
+						IXGBE_VLVFB(regindex*2),
+						bits);
+			} else {
+				bits = IXGBE_READ_REG(hw,
+						IXGBE_VLVFB((regindex*2)+1));
+				bits |= (1 << vind);
+				IXGBE_WRITE_REG(hw,
+						IXGBE_VLVFB((regindex*2)+1),
+						bits);
+			}
+		} else {
+			/* clear the pool bit */
+			if (vind < 32) {
+				bits = IXGBE_READ_REG(hw,
+						IXGBE_VLVFB(regindex*2));
+				bits &= ~(1 << vind);
+				IXGBE_WRITE_REG(hw,
+						IXGBE_VLVFB(regindex*2),
+						bits);
+				bits |= IXGBE_READ_REG(hw,
+						IXGBE_VLVFB((regindex*2)+1));
+			} else {
+				bits = IXGBE_READ_REG(hw,
+						IXGBE_VLVFB((regindex*2)+1));
+				bits &= ~(1 << vind);
+				IXGBE_WRITE_REG(hw,
+						IXGBE_VLVFB((regindex*2)+1),
+						bits);
+				bits |= IXGBE_READ_REG(hw,
+						IXGBE_VLVFB(regindex*2));
+			}
+		}
+
+		if (bits)
+			IXGBE_WRITE_REG(hw, IXGBE_VLVF(regindex),
+					(IXGBE_VLVF_VIEN | vlan));
+		else
+			IXGBE_WRITE_REG(hw, IXGBE_VLVF(regindex), 0);
+	}
+out:
+	return IXGBE_SUCCESS;
+}
+
+/**
+ *  ixgbe_clear_vfta_generic - Clear VLAN filter table
+ *  @hw: pointer to hardware structure
+ *
+ *  Clears the VLAN filer table, and the VMDq index associated with the filter
+ **/
+s32 ixgbe_clear_vfta_generic(struct ixgbe_hw *hw)
+{
+	u32 offset;
+
+	DEBUGFUNC("ixgbe_clear_vfta_generic");
+
+	for (offset = 0; offset < hw->mac.vft_size; offset++)
+		IXGBE_WRITE_REG(hw, IXGBE_VFTA(offset), 0);
+
+	for (offset = 0; offset < IXGBE_VLVF_ENTRIES; offset++) {
+		IXGBE_WRITE_REG(hw, IXGBE_VLVF(offset), 0);
+		IXGBE_WRITE_REG(hw, IXGBE_VLVFB(offset*2), 0);
+		IXGBE_WRITE_REG(hw, IXGBE_VLVFB((offset*2)+1), 0);
+	}
+
+	return IXGBE_SUCCESS;
+}
+
+/**
+ *  ixgbe_check_mac_link_generic - Determine link and speed status
+ *  @hw: pointer to hardware structure
+ *  @speed: pointer to link speed
+ *  @link_up: TRUE when link is up
+ *  @link_up_wait_to_complete: bool used to wait for link up or not
+ *
+ *  Reads the links register to determine if link is up and the current speed
+ **/
+s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
+                               bool *link_up, bool link_up_wait_to_complete)
+{
+	u32 links_reg;
+	u32 i;
+
+	DEBUGFUNC("ixgbe_check_mac_link_generic");
+
+	links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
+	if (link_up_wait_to_complete) {
+		for (i = 0; i < IXGBE_LINK_UP_TIME; i++) {
+			if (links_reg & IXGBE_LINKS_UP) {
+				*link_up = TRUE;
+				break;
+			} else {
+				*link_up = FALSE;
+			}
+			msec_delay(100);
+			links_reg = IXGBE_READ_REG(hw, IXGBE_LINKS);
+		}
+	} else {
+		if (links_reg & IXGBE_LINKS_UP)
+			*link_up = TRUE;
+		else
+			*link_up = FALSE;
+	}
+
+	if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
+	    IXGBE_LINKS_SPEED_10G_82599)
+		*speed = IXGBE_LINK_SPEED_10GB_FULL;
+	else if ((links_reg & IXGBE_LINKS_SPEED_82599) ==
+	         IXGBE_LINKS_SPEED_1G_82599)
+		*speed = IXGBE_LINK_SPEED_1GB_FULL;
+	else
+		*speed = IXGBE_LINK_SPEED_100_FULL;
+
+	/* if link is down, zero out the current_mode */
+	if (*link_up == FALSE) {
+		hw->fc.current_mode = ixgbe_fc_none;
+		hw->fc.fc_was_autonegged = FALSE;
+	}
+
+	return IXGBE_SUCCESS;
+}
+
+/**
+ *  ixgbe_get_wwn_prefix_generic - Get alternative WWNN/WWPN prefix from
+ *  the EEPROM
+ *  @hw: pointer to hardware structure
+ *  @wwnn_prefix: the alternative WWNN prefix
+ *  @wwpn_prefix: the alternative WWPN prefix
+ *
+ *  This function will read the EEPROM from the alternative SAN MAC address
+ *  block to check the support for the alternative WWNN/WWPN prefix support.
+ **/
+s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
+                                 u16 *wwpn_prefix)
+{
+	u16 offset, caps;
+	u16 alt_san_mac_blk_offset;
+
+	DEBUGFUNC("ixgbe_get_wwn_prefix_generic");
+
+	/* clear output first */
+	*wwnn_prefix = 0xFFFF;
+	*wwpn_prefix = 0xFFFF;
+
+	/* check if alternative SAN MAC is supported */
+	hw->eeprom.ops.read(hw, IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR,
+	                    &alt_san_mac_blk_offset);
+
+	if ((alt_san_mac_blk_offset == 0) ||
+	    (alt_san_mac_blk_offset == 0xFFFF))
+		goto wwn_prefix_out;
+
+	/* check capability in alternative san mac address block */
+	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET;
+	hw->eeprom.ops.read(hw, offset, &caps);
+	if (!(caps & IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN))
+		goto wwn_prefix_out;
+
+	/* get the corresponding prefix for WWNN/WWPN */
+	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET;
+	hw->eeprom.ops.read(hw, offset, wwnn_prefix);
+
+	offset = alt_san_mac_blk_offset + IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET;
+	hw->eeprom.ops.read(hw, offset, wwpn_prefix);
+
+wwn_prefix_out:
+	return IXGBE_SUCCESS;
+}
diff --git a/sys/dev/ixgbe/ixgbe_common.h b/sys/dev/ixgbe/ixgbe_common.h
index 0c535751880..f0707e21a2e 100644
--- a/sys/dev/ixgbe/ixgbe_common.h
+++ b/sys/dev/ixgbe/ixgbe_common.h
@@ -42,6 +42,8 @@
 		IXGBE_WRITE_REG(hw, reg + 4, (u32) (value >> 32)); \
 	} while (0)
 
+u32 ixgbe_get_pcie_msix_count_generic(struct ixgbe_hw *hw);
+
 s32 ixgbe_init_ops_generic(struct ixgbe_hw *hw);
 s32 ixgbe_init_hw_generic(struct ixgbe_hw *hw);
 s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw);
@@ -57,12 +59,14 @@ s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index);
 
 s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw);
 s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data);
-s32 ixgbe_read_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 *data);
+s32 ixgbe_read_eerd_generic(struct ixgbe_hw *hw, u16 offset, u16 *data);
 s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset,
                                        u16 *data);
+u16 ixgbe_calc_eeprom_checksum_generic(struct ixgbe_hw *hw);
 s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw,
                                            u16 *checksum_val);
 s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw);
+s32 ixgbe_poll_eerd_eewr_done(struct ixgbe_hw *hw, u32 ee_reg);
 
 s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq,
                           u32 enable_addr);
@@ -73,7 +77,6 @@ s32 ixgbe_update_mc_addr_list_generic(struct ixgbe_hw *hw, u8 *mc_addr_list,
                                       ixgbe_mc_addr_itr func);
 s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw, u8 *addr_list,
                                       u32 addr_count, ixgbe_mc_addr_itr func);
-void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq);
 s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw);
 s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw);
 s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval);
@@ -87,9 +90,25 @@ s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask);
 void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u16 mask);
 s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw);
 
-s32 ixgbe_read_analog_reg8_generic(struct ixgbe_hw *hw, u32 reg, u8 *val);
-s32 ixgbe_write_analog_reg8_generic(struct ixgbe_hw *hw, u32 reg, u8 val);
 s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index);
 s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index);
 
+s32 ixgbe_get_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr);
+s32 ixgbe_set_san_mac_addr_generic(struct ixgbe_hw *hw, u8 *san_mac_addr);
+
+s32 ixgbe_set_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
+s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
+s32 ixgbe_insert_mac_addr_generic(struct ixgbe_hw *hw, u8 *addr, u32 vmdq);
+s32 ixgbe_init_uta_tables_generic(struct ixgbe_hw *hw);
+s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan,
+                         u32 vind, bool vlan_on);
+s32 ixgbe_clear_vfta_generic(struct ixgbe_hw *hw);
+
+s32 ixgbe_check_mac_link_generic(struct ixgbe_hw *hw,
+                               ixgbe_link_speed *speed,
+                               bool *link_up, bool link_up_wait_to_complete);
+
+s32 ixgbe_get_wwn_prefix_generic(struct ixgbe_hw *hw, u16 *wwnn_prefix,
+                                 u16 *wwpn_prefix);
+
 #endif /* IXGBE_COMMON */
diff --git a/sys/dev/ixgbe/ixgbe_osdep.h b/sys/dev/ixgbe/ixgbe_osdep.h
index e1bbce08602..151e63ff1f6 100644
--- a/sys/dev/ixgbe/ixgbe_osdep.h
+++ b/sys/dev/ixgbe/ixgbe_osdep.h
@@ -110,6 +110,16 @@ typedef boolean_t	bool;
 #endif
 #endif
 
+#if defined(__i386__) || defined(__amd64__)
+static __inline
+void prefetch(void *x)
+{
+	__asm volatile("prefetcht0 %0" :: "m" (*(unsigned long *)x));
+}
+#else
+#define prefetch(x)
+#endif
+
 struct ixgbe_osdep
 {
 	bus_space_tag_t    mem_bus_space_tag;
diff --git a/sys/dev/ixgbe/ixgbe_phy.c b/sys/dev/ixgbe/ixgbe_phy.c
index daa37d91000..9bab98d2952 100644
--- a/sys/dev/ixgbe/ixgbe_phy.c
+++ b/sys/dev/ixgbe/ixgbe_phy.c
@@ -59,6 +59,8 @@ s32 ixgbe_init_phy_ops_generic(struct ixgbe_hw *hw)
 {
 	struct ixgbe_phy_info *phy = &hw->phy;
 
+	DEBUGFUNC("ixgbe_init_phy_ops_generic");
+
 	/* PHY */
 	phy->ops.identify = &ixgbe_identify_phy_generic;
 	phy->ops.reset = &ixgbe_reset_phy_generic;
@@ -67,7 +69,7 @@ s32 ixgbe_init_phy_ops_generic(struct ixgbe_hw *hw)
 	phy->ops.setup_link = &ixgbe_setup_phy_link_generic;
 	phy->ops.setup_link_speed = &ixgbe_setup_phy_link_speed_generic;
 	phy->ops.check_link = NULL;
-	phy->ops.get_firmware_version = NULL;
+	phy->ops.get_firmware_version = ixgbe_get_phy_firmware_version_generic;
 	phy->ops.read_i2c_byte = &ixgbe_read_i2c_byte_generic;
 	phy->ops.write_i2c_byte = &ixgbe_write_i2c_byte_generic;
 	phy->ops.read_i2c_eeprom = &ixgbe_read_i2c_eeprom_generic;
@@ -91,6 +93,8 @@ s32 ixgbe_identify_phy_generic(struct ixgbe_hw *hw)
 	u32 phy_addr;
 	u16 ext_ability = 0;
 
+	DEBUGFUNC("ixgbe_identify_phy_generic");
+
 	if (hw->phy.type == ixgbe_phy_unknown) {
 		for (phy_addr = 0; phy_addr < IXGBE_MAX_PHY_ADDR; phy_addr++) {
 			if (ixgbe_validate_phy_addr(hw, phy_addr)) {
@@ -138,6 +142,8 @@ bool ixgbe_validate_phy_addr(struct ixgbe_hw *hw, u32 phy_addr)
 	u16 phy_id = 0;
 	bool valid = FALSE;
 
+	DEBUGFUNC("ixgbe_validate_phy_addr");
+
 	hw->phy.addr = phy_addr;
 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
 	                     IXGBE_MDIO_PMA_PMD_DEV_TYPE, &phy_id);
@@ -159,6 +165,8 @@ s32 ixgbe_get_phy_id(struct ixgbe_hw *hw)
 	u16 phy_id_high = 0;
 	u16 phy_id_low = 0;
 
+	DEBUGFUNC("ixgbe_get_phy_id");
+
 	status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_ID_HIGH,
 	                              IXGBE_MDIO_PMA_PMD_DEV_TYPE,
 	                              &phy_id_high);
@@ -183,6 +191,8 @@ enum ixgbe_phy_type ixgbe_get_phy_type_from_id(u32 phy_id)
 {
 	enum ixgbe_phy_type phy_type;
 
+	DEBUGFUNC("ixgbe_get_phy_type_from_id");
+
 	switch (phy_id) {
 	case TN1010_PHY_ID:
 		phy_type = ixgbe_phy_tn;
@@ -215,6 +225,8 @@ s32 ixgbe_reset_phy_generic(struct ixgbe_hw *hw)
 	u16 ctrl = 0;
 	s32 status = IXGBE_SUCCESS;
 
+	DEBUGFUNC("ixgbe_reset_phy_generic");
+
 	if (hw->phy.type == ixgbe_phy_unknown)
 		status = ixgbe_identify_phy_generic(hw);
 
@@ -262,6 +274,8 @@ s32 ixgbe_read_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
 	s32 status = IXGBE_SUCCESS;
 	u16 gssr;
 
+	DEBUGFUNC("ixgbe_read_phy_reg_generic");
+
 	if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
 		gssr = IXGBE_GSSR_PHY1_SM;
 	else
@@ -359,6 +373,8 @@ s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
 	s32 status = IXGBE_SUCCESS;
 	u16 gssr;
 
+	DEBUGFUNC("ixgbe_write_phy_reg_generic");
+
 	if (IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_LAN_ID_1)
 		gssr = IXGBE_GSSR_PHY1_SM;
 	else
@@ -437,10 +453,10 @@ s32 ixgbe_write_phy_reg_generic(struct ixgbe_hw *hw, u32 reg_addr,
 }
 
 /**
- *  ixgbe_setup_phy_link_generic - Set and restart autoneg
- *  @hw: pointer to hardware structure
+ *	ixgbe_setup_phy_link_generic - Set and restart autoneg
+ *	@hw: pointer to hardware structure
  *
- *  Restart autonegotiation and PHY and waits for completion.
+ *	Restart autonegotiation and PHY and waits for completion.
  **/
 s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
 {
@@ -448,23 +464,59 @@ s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
 	u32 time_out;
 	u32 max_time_out = 10;
 	u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
+	bool autoneg = FALSE;
+	ixgbe_link_speed speed;
 
-	/*
-	 * Set advertisement settings in PHY based on autoneg_advertised
-	 * settings. If autoneg_advertised = 0, then advertise default values
-	 * tnx devices cannot be "forced" to a autoneg 10G and fail.  But can
-	 * for a 1G.
-	 */
-	hw->phy.ops.read_reg(hw, IXGBE_MII_SPEED_SELECTION_REG,
-	                     IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
+	DEBUGFUNC("ixgbe_setup_phy_link_generic");
 
-	if (hw->phy.autoneg_advertised == IXGBE_LINK_SPEED_1GB_FULL)
-		autoneg_reg &= 0xEFFF; /* 0 in bit 12 is 1G operation */
-	else
-		autoneg_reg |= 0x1000; /* 1 in bit 12 is 10G/1G operation */
+	ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
 
-	hw->phy.ops.write_reg(hw, IXGBE_MII_SPEED_SELECTION_REG,
-	                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
+	if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
+		/* Set or unset auto-negotiation 10G advertisement */
+		hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
+		                     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+	                             &autoneg_reg);
+
+		autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
+		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
+			autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
+
+		hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
+		                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                      autoneg_reg);
+	}
+
+	if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
+		/* Set or unset auto-negotiation 1G advertisement */
+		hw->phy.ops.read_reg(hw,
+		                     IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
+		                     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                     &autoneg_reg);
+
+		autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE;
+		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
+			autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE;
+
+		hw->phy.ops.write_reg(hw,
+		                      IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG,
+		                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                      autoneg_reg);
+	}
+
+	if (speed & IXGBE_LINK_SPEED_100_FULL) {
+		/* Set or unset auto-negotiation 100M advertisement */
+		hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
+		                     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                     &autoneg_reg);
+
+		autoneg_reg &= ~IXGBE_MII_100BASE_T_ADVERTISE;
+		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
+			autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
+
+		hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
+		                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                      autoneg_reg);
+	}
 
 	/* Restart PHY autonegotiation and wait for completion */
 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
@@ -489,8 +541,10 @@ s32 ixgbe_setup_phy_link_generic(struct ixgbe_hw *hw)
 		}
 	}
 
-	if (time_out == max_time_out)
+	if (time_out == max_time_out) {
 		status = IXGBE_ERR_LINK_SETUP;
+		DEBUGOUT("ixgbe_setup_phy_link_generic: time out");
+	}
 
 	return status;
 }
@@ -509,6 +563,8 @@ s32 ixgbe_setup_phy_link_speed_generic(struct ixgbe_hw *hw,
 	UNREFERENCED_PARAMETER(autoneg);
 	UNREFERENCED_PARAMETER(autoneg_wait_to_complete);
 
+	DEBUGFUNC("ixgbe_setup_phy_link_speed_generic");
+
 	/*
 	 * Clear autoneg_advertised and set new values based on input link
 	 * speed.
@@ -545,6 +601,8 @@ s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
 	s32 status = IXGBE_ERR_LINK_SETUP;
 	u16 speed_ability;
 
+	DEBUGFUNC("ixgbe_get_copper_link_capabilities_generic");
+
 	*speed = 0;
 	*autoneg = TRUE;
 
@@ -581,6 +639,8 @@ s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
 	u16 phy_speed = 0;
 	u16 phy_data = 0;
 
+	DEBUGFUNC("ixgbe_check_phy_link_tnx");
+
 	/* Initialize speed and link to default case */
 	*link_up = FALSE;
 	*speed = IXGBE_LINK_SPEED_10GB_FULL;
@@ -612,6 +672,102 @@ s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw, ixgbe_link_speed *speed,
 	return status;
 }
 
+/**
+ *	ixgbe_setup_phy_link_tnx - Set and restart autoneg
+ *	@hw: pointer to hardware structure
+ *
+ *	Restart autonegotiation and PHY and waits for completion.
+ **/
+s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw)
+{
+	s32 status = IXGBE_SUCCESS;
+	u32 time_out;
+	u32 max_time_out = 10;
+	u16 autoneg_reg = IXGBE_MII_AUTONEG_REG;
+	bool autoneg = FALSE;
+	ixgbe_link_speed speed;
+
+	DEBUGFUNC("ixgbe_setup_phy_link_tnx");
+
+	ixgbe_get_copper_link_capabilities_generic(hw, &speed, &autoneg);
+
+	if (speed & IXGBE_LINK_SPEED_10GB_FULL) {
+		/* Set or unset auto-negotiation 10G advertisement */
+		hw->phy.ops.read_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
+		                     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                     &autoneg_reg);
+
+		autoneg_reg &= ~IXGBE_MII_10GBASE_T_ADVERTISE;
+		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_10GB_FULL)
+			autoneg_reg |= IXGBE_MII_10GBASE_T_ADVERTISE;
+
+		hw->phy.ops.write_reg(hw, IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG,
+		                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                      autoneg_reg);
+	}
+
+	if (speed & IXGBE_LINK_SPEED_1GB_FULL) {
+		/* Set or unset auto-negotiation 1G advertisement */
+		hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
+		                     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                     &autoneg_reg);
+
+		autoneg_reg &= ~IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
+		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_1GB_FULL)
+			autoneg_reg |= IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX;
+
+		hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_XNP_TX_REG,
+		                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                      autoneg_reg);
+	}
+
+	if (speed & IXGBE_LINK_SPEED_100_FULL) {
+		/* Set or unset auto-negotiation 100M advertisement */
+		hw->phy.ops.read_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
+		                     IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                     &autoneg_reg);
+
+		autoneg_reg &= ~IXGBE_MII_100BASE_T_ADVERTISE;
+		if (hw->phy.autoneg_advertised & IXGBE_LINK_SPEED_100_FULL)
+			autoneg_reg |= IXGBE_MII_100BASE_T_ADVERTISE;
+
+		hw->phy.ops.write_reg(hw, IXGBE_MII_AUTONEG_ADVERTISE_REG,
+		                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                      autoneg_reg);
+	}
+
+	/* Restart PHY autonegotiation and wait for completion */
+	hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
+	                     IXGBE_MDIO_AUTO_NEG_DEV_TYPE, &autoneg_reg);
+
+	autoneg_reg |= IXGBE_MII_RESTART;
+
+	hw->phy.ops.write_reg(hw, IXGBE_MDIO_AUTO_NEG_CONTROL,
+	                      IXGBE_MDIO_AUTO_NEG_DEV_TYPE, autoneg_reg);
+
+	/* Wait for autonegotiation to finish */
+	for (time_out = 0; time_out < max_time_out; time_out++) {
+		usec_delay(10);
+		/* Restart PHY autonegotiation and wait for completion */
+		status = hw->phy.ops.read_reg(hw, IXGBE_MDIO_AUTO_NEG_STATUS,
+		                              IXGBE_MDIO_AUTO_NEG_DEV_TYPE,
+		                              &autoneg_reg);
+
+		autoneg_reg &= IXGBE_MII_AUTONEG_COMPLETE;
+		if (autoneg_reg == IXGBE_MII_AUTONEG_COMPLETE) {
+			break;
+		}
+	}
+
+	if (time_out == max_time_out) {
+		status = IXGBE_ERR_LINK_SETUP;
+		DEBUGOUT("ixgbe_setup_phy_link_tnx: time out");
+	}
+
+	return status;
+}
+
+
 /**
  *  ixgbe_get_phy_firmware_version_tnx - Gets the PHY Firmware Version
  *  @hw: pointer to hardware structure
@@ -622,6 +778,8 @@ s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
 {
 	s32 status = IXGBE_SUCCESS;
 
+	DEBUGFUNC("ixgbe_get_phy_firmware_version_tnx");
+
 	status = hw->phy.ops.read_reg(hw, TNX_FW_REV,
 	                              IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
 	                              firmware_version);
@@ -631,15 +789,17 @@ s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
 
 
 /**
- *  ixgbe_get_phy_firmware_version_aq - Gets the PHY Firmware Version
+ *  ixgbe_get_phy_firmware_version_generic - Gets the PHY Firmware Version
  *  @hw: pointer to hardware structure
  *  @firmware_version: pointer to the PHY Firmware Version
  **/
-s32 ixgbe_get_phy_firmware_version_aq(struct ixgbe_hw *hw,
+s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw,
                                        u16 *firmware_version)
 {
 	s32 status = IXGBE_SUCCESS;
 
+	DEBUGFUNC("ixgbe_get_phy_firmware_version_generic");
+
 	status = hw->phy.ops.read_reg(hw, AQ_FW_REV,
 	                              IXGBE_MDIO_VENDOR_SPECIFIC_1_DEV_TYPE,
 	                              firmware_version);
@@ -660,6 +820,8 @@ s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw)
 	s32 ret_val = IXGBE_SUCCESS;
 	u32 i;
 
+	DEBUGFUNC("ixgbe_reset_phy_nl");
+
 	hw->phy.ops.read_reg(hw, IXGBE_MDIO_PHY_XS_CONTROL,
 	                     IXGBE_MDIO_PHY_XS_DEV_TYPE, &phy_data);
 
@@ -762,6 +924,8 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
 	u8 cable_tech = 0;
 	u16 enforce_sfp = 0;
 
+	DEBUGFUNC("ixgbe_identify_sfp_module_generic");
+
 	if (hw->mac.ops.get_media_type(hw) != ixgbe_media_type_fiber) {
 		hw->phy.sfp_type = ixgbe_sfp_type_not_present;
 		status = IXGBE_ERR_SFP_NOT_PRESENT;
@@ -850,6 +1014,7 @@ s32 ixgbe_identify_sfp_module_generic(struct ixgbe_hw *hw)
 		   ((comp_codes_1g & IXGBE_SFF_1GBASELX_CAPABLE) &&
 		   (comp_codes_10g & IXGBE_SFF_10GBASELR_CAPABLE)))
 			hw->phy.multispeed_fiber = TRUE;
+
 		/* Determine PHY vendor */
 		if (hw->phy.type != ixgbe_phy_nl) {
 			hw->phy.id = identifier;
@@ -944,6 +1109,8 @@ s32 ixgbe_get_sfp_init_sequence_offsets(struct ixgbe_hw *hw,
 {
 	u16 sfp_id;
 
+	DEBUGFUNC("ixgbe_get_sfp_init_sequence_offsets");
+
 	if (hw->phy.sfp_type == ixgbe_sfp_type_unknown)
 		return IXGBE_ERR_SFP_NOT_SUPPORTED;
 
@@ -1370,6 +1537,8 @@ static s32 ixgbe_clock_in_i2c_bit(struct ixgbe_hw *hw, bool *data)
 	s32 status;
 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
 
+	DEBUGFUNC("ixgbe_clock_in_i2c_bit");
+
 	status = ixgbe_raise_i2c_clk(hw, &i2cctl);
 
 	/* Minimum high period of clock is 4us */
@@ -1398,6 +1567,8 @@ static s32 ixgbe_clock_out_i2c_bit(struct ixgbe_hw *hw, bool data)
 	s32 status;
 	u32 i2cctl = IXGBE_READ_REG(hw, IXGBE_I2CCTL);
 
+	DEBUGFUNC("ixgbe_clock_out_i2c_bit");
+
 	status = ixgbe_set_i2c_data(hw, &i2cctl, data);
 	if (status == IXGBE_SUCCESS) {
 		status = ixgbe_raise_i2c_clk(hw, &i2cctl);
@@ -1429,6 +1600,8 @@ static s32 ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
 {
 	s32 status = IXGBE_SUCCESS;
 
+	DEBUGFUNC("ixgbe_raise_i2c_clk");
+
 	*i2cctl |= IXGBE_I2C_CLK_OUT;
 
 	IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
@@ -1449,6 +1622,8 @@ static s32 ixgbe_raise_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
 static void ixgbe_lower_i2c_clk(struct ixgbe_hw *hw, u32 *i2cctl)
 {
 
+	DEBUGFUNC("ixgbe_lower_i2c_clk");
+
 	*i2cctl &= ~IXGBE_I2C_CLK_OUT;
 
 	IXGBE_WRITE_REG(hw, IXGBE_I2CCTL, *i2cctl);
@@ -1469,6 +1644,8 @@ static s32 ixgbe_set_i2c_data(struct ixgbe_hw *hw, u32 *i2cctl, bool data)
 {
 	s32 status = IXGBE_SUCCESS;
 
+	DEBUGFUNC("ixgbe_set_i2c_data");
+
 	if (data)
 		*i2cctl |= IXGBE_I2C_DATA_OUT;
 	else
@@ -1500,6 +1677,8 @@ static bool ixgbe_get_i2c_data(u32 *i2cctl)
 {
 	bool data;
 
+	DEBUGFUNC("ixgbe_get_i2c_data");
+
 	if (*i2cctl & IXGBE_I2C_DATA_IN)
 		data = 1;
 	else
diff --git a/sys/dev/ixgbe/ixgbe_phy.h b/sys/dev/ixgbe/ixgbe_phy.h
index bfe73de25b1..39f3bc83f0a 100644
--- a/sys/dev/ixgbe/ixgbe_phy.h
+++ b/sys/dev/ixgbe/ixgbe_phy.h
@@ -108,9 +108,10 @@ s32 ixgbe_get_copper_link_capabilities_generic(struct ixgbe_hw *hw,
 s32 ixgbe_check_phy_link_tnx(struct ixgbe_hw *hw,
                              ixgbe_link_speed *speed,
                              bool *link_up);
+s32 ixgbe_setup_phy_link_tnx(struct ixgbe_hw *hw);
 s32 ixgbe_get_phy_firmware_version_tnx(struct ixgbe_hw *hw,
                                        u16 *firmware_version);
-s32 ixgbe_get_phy_firmware_version_aq(struct ixgbe_hw *hw,
+s32 ixgbe_get_phy_firmware_version_generic(struct ixgbe_hw *hw,
                                        u16 *firmware_version);
 
 s32 ixgbe_reset_phy_nl(struct ixgbe_hw *hw);
diff --git a/sys/dev/ixgbe/ixgbe_type.h b/sys/dev/ixgbe/ixgbe_type.h
index 50345f4c2c1..0b101197709 100644
--- a/sys/dev/ixgbe/ixgbe_type.h
+++ b/sys/dev/ixgbe/ixgbe_type.h
@@ -47,6 +47,7 @@
 #define IXGBE_DEV_ID_82598AF_DUAL_PORT   0x10C6
 #define IXGBE_DEV_ID_82598AF_SINGLE_PORT 0x10C7
 #define IXGBE_DEV_ID_82598AT             0x10C8
+#define IXGBE_DEV_ID_82598AT2            0x150B
 #define IXGBE_DEV_ID_82598EB_SFP_LOM     0x10DB
 #define IXGBE_DEV_ID_82598EB_CX4         0x10DD
 #define IXGBE_DEV_ID_82598_CX4_DUAL_PORT 0x10EC
@@ -54,6 +55,8 @@
 #define IXGBE_DEV_ID_82598_SR_DUAL_PORT_EM      0x10E1
 #define IXGBE_DEV_ID_82598EB_XF_LR       0x10F4
 #define IXGBE_DEV_ID_82599_KX4     0x10F7
+#define IXGBE_DEV_ID_82599_KX4_MEZZ 0x1514
+#define IXGBE_DEV_ID_82599_COMBO_BACKPLANE 0x10F8
 #define IXGBE_DEV_ID_82599_CX4 0x10F9
 #define IXGBE_DEV_ID_82599_SFP 0x10FB
 #define IXGBE_DEV_ID_82599_XAUI_LOM 0x10FC
@@ -74,6 +77,7 @@
 /* NVM Registers */
 #define IXGBE_EEC       0x10010
 #define IXGBE_EERD      0x10014
+#define IXGBE_EEWR      0x10018
 #define IXGBE_FLA       0x1001C
 #define IXGBE_EEMNGCTL  0x10110
 #define IXGBE_EEMNGDATA 0x10114
@@ -352,7 +356,7 @@
 #define IXGBE_WUFC_FLX5 0x00200000 /* Flexible Filter 5 Enable */
 #define IXGBE_WUFC_FLX_FILTERS     0x000F0000 /* Mask for 4 flex filters */
 #define IXGBE_WUFC_EXT_FLX_FILTERS 0x00300000 /* Mask for Ext. flex filters */
-#define IXGBE_WUFC_ALL_FILTERS     0x003F00FF /* Mask for all 6 wakeup filters*/
+#define IXGBE_WUFC_ALL_FILTERS     0x003F00FF /* Mask for all wakeup filters */
 #define IXGBE_WUFC_FLX_OFFSET      16 /* Offset to the Flexible Filters bits */
 
 /* Wake Up Status */
@@ -703,6 +707,7 @@
 #define IXGBE_MREVID    0x11064
 #define IXGBE_DCA_ID    0x11070
 #define IXGBE_DCA_CTRL  0x11074
+#define IXGBE_SWFW_SYNC IXGBE_GSSR
 
 /* PCI-E registers 82599-Specific */
 #define IXGBE_GCR_EXT           0x11050
@@ -725,6 +730,12 @@
 #define IXGBE_ECC_STATUS_82599  0x110E0
 #define IXGBE_BAR_CTRL_82599    0x110F4
 
+/* PCI Express Control */
+#define IXGBE_GCR_CMPL_TMOUT_MASK       0x0000F000
+#define IXGBE_GCR_CMPL_TMOUT_10ms       0x00001000
+#define IXGBE_GCR_CMPL_TMOUT_RESEND     0x00010000
+#define IXGBE_GCR_CAP_VER2              0x00040000
+
 /* Time Sync Registers */
 #define IXGBE_TSYNCRXCTL 0x05188 /* Rx Time Sync Control register - RW */
 #define IXGBE_TSYNCTXCTL 0x08C00 /* Tx Time Sync Control register - RW */
@@ -848,12 +859,16 @@
 #define IXGBE_MPVC      0x04318
 #define IXGBE_SGMIIC    0x04314
 
+/* Copper Pond 2 link timeout */
+#define IXGBE_VALIDATE_LINK_READY_TIMEOUT 50
+
 /* Omer CORECTL */
 #define IXGBE_CORECTL           0x014F00
 /* BARCTRL */
-#define IXGBE_BARCTRL           0x110F4
-#define IXGBE_BARCTRL_FLSIZE    0x0700
-#define IXGBE_BARCTRL_CSRSIZE   0x2000
+#define IXGBE_BARCTRL               0x110F4
+#define IXGBE_BARCTRL_FLSIZE        0x0700
+#define IXGBE_BARCTRL_FLSIZE_SHIFT  8
+#define IXGBE_BARCTRL_CSRSIZE       0x2000
 
 /* RSCCTL Bit Masks */
 #define IXGBE_RSCCTL_RSCEN          0x01
@@ -1013,10 +1028,18 @@
 /* MII clause 22/28 definitions */
 #define IXGBE_MDIO_PHY_LOW_POWER_MODE  0x0800
 
-#define IXGBE_MII_SPEED_SELECTION_REG  0x10
-#define IXGBE_MII_RESTART              0x200
-#define IXGBE_MII_AUTONEG_COMPLETE     0x20
-#define IXGBE_MII_AUTONEG_REG          0x0
+#define IXGBE_MII_10GBASE_T_AUTONEG_CTRL_REG     0x20   /* 10G Control Reg */
+#define IXGBE_MII_AUTONEG_VENDOR_PROVISION_1_REG 0xC400 /* 1G Provisioning 1 */
+#define IXGBE_MII_AUTONEG_XNP_TX_REG             0x17   /* 1G XNP Transmit */
+#define IXGBE_MII_AUTONEG_ADVERTISE_REG          0x10   /* 100M Advertisement */
+#define IXGBE_MII_10GBASE_T_ADVERTISE            0x1000 /* full duplex, bit:12*/
+#define IXGBE_MII_1GBASE_T_ADVERTISE_XNP_TX      0x4000 /* full duplex, bit:14*/
+#define IXGBE_MII_1GBASE_T_ADVERTISE             0x8000 /* full duplex, bit:15*/
+#define IXGBE_MII_100BASE_T_ADVERTISE            0x0100 /* full duplex, bit:8 */
+#define IXGBE_MII_RESTART                        0x200
+#define IXGBE_MII_AUTONEG_COMPLETE               0x20
+#define IXGBE_MII_AUTONEG_LINK_UP                0x04
+#define IXGBE_MII_AUTONEG_REG                    0x0
 
 #define IXGBE_PHY_REVISION_MASK        0xFFFFFFF0
 #define IXGBE_MAX_PHY_ADDR             32
@@ -1408,6 +1431,8 @@
 #define IXGBE_AUTOC_KX4_SUPP    0x80000000
 #define IXGBE_AUTOC_KX_SUPP     0x40000000
 #define IXGBE_AUTOC_PAUSE       0x30000000
+#define IXGBE_AUTOC_ASM_PAUSE   0x20000000
+#define IXGBE_AUTOC_SYM_PAUSE   0x10000000
 #define IXGBE_AUTOC_RF          0x08000000
 #define IXGBE_AUTOC_PD_TMR      0x06000000
 #define IXGBE_AUTOC_AN_RX_LOOSE 0x01000000
@@ -1476,6 +1501,8 @@
 #define IXGBE_LINK_UP_TIME      90 /* 9.0 Seconds */
 #define IXGBE_AUTO_NEG_TIME     45 /* 4.5 Seconds */
 
+#define IXGBE_LINKS2_AN_SUPPORTED   0x00000040
+
 /* PCS1GLSTA Bit Masks */
 #define IXGBE_PCS1GLSTA_LINK_OK         1
 #define IXGBE_PCS1GLSTA_SYNK_OK         0x10
@@ -1496,12 +1523,18 @@
 #define IXGBE_PCS1GLCTL_AN_ENABLE       0x10000
 #define IXGBE_PCS1GLCTL_AN_RESTART      0x20000
 
+/* ANLP1 Bit Masks */
+#define IXGBE_ANLP1_PAUSE               0x0C00
+#define IXGBE_ANLP1_SYM_PAUSE           0x0400
+#define IXGBE_ANLP1_ASM_PAUSE           0x0800
+
 /* SW Semaphore Register bitmasks */
 #define IXGBE_SWSM_SMBI 0x00000001 /* Driver Semaphore bit */
 #define IXGBE_SWSM_SWESMBI 0x00000002 /* FW Semaphore bit */
 #define IXGBE_SWSM_WMNG 0x00000004 /* Wake MNG Clock */
+#define IXGBE_SWFW_REGSMP 0x80000000 /* Register Semaphore bit 31 */
 
-/* GSSR definitions */
+/* SW_FW_SYNC/GSSR definitions */
 #define IXGBE_GSSR_EEP_SM     0x0001
 #define IXGBE_GSSR_PHY0_SM    0x0002
 #define IXGBE_GSSR_PHY1_SM    0x0004
@@ -1521,20 +1554,24 @@
 #define IXGBE_EEC_GNT       0x00000080 /* EEPROM Access Grant */
 #define IXGBE_EEC_PRES      0x00000100 /* EEPROM Present */
 #define IXGBE_EEC_ARD       0x00000200 /* EEPROM Auto Read Done */
+#define IXGBE_EEC_FLUP      0x00800000 /* Flash update command */
+#define IXGBE_EEC_FLUDONE   0x04000000 /* Flash update done */
 /* EEPROM Addressing bits based on type (0-small, 1-large) */
 #define IXGBE_EEC_ADDR_SIZE 0x00000400
 #define IXGBE_EEC_SIZE      0x00007800 /* EEPROM Size */
 
-#define IXGBE_EEC_SIZE_SHIFT          11
-#define IXGBE_EEPROM_WORD_SIZE_SHIFT  6
-#define IXGBE_EEPROM_OPCODE_BITS      8
+#define IXGBE_EEC_SIZE_SHIFT               11
+#define IXGBE_EEPROM_WORD_SIZE_BASE_SHIFT  6
+#define IXGBE_EEPROM_OPCODE_BITS           8
 
 /* Checksum and EEPROM pointers */
 #define IXGBE_EEPROM_CHECKSUM   0x3F
 #define IXGBE_EEPROM_SUM        0xBABA
 #define IXGBE_PCIE_ANALOG_PTR   0x03
 #define IXGBE_ATLAS0_CONFIG_PTR 0x04
+#define IXGBE_PHY_PTR           0x04
 #define IXGBE_ATLAS1_CONFIG_PTR 0x05
+#define IXGBE_OPTION_ROM_PTR    0x05
 #define IXGBE_PCIE_GENERAL_PTR  0x06
 #define IXGBE_PCIE_CONFIG0_PTR  0x07
 #define IXGBE_PCIE_CONFIG1_PTR  0x08
@@ -1577,10 +1614,12 @@
 #define IXGBE_EEPROM_ERASE256_OPCODE_SPI  0xDB  /* EEPROM ERASE 256B */
 
 /* EEPROM Read Register */
-#define IXGBE_EEPROM_READ_REG_DATA   16   /* data offset in EEPROM read reg */
-#define IXGBE_EEPROM_READ_REG_DONE   2    /* Offset to READ done bit */
-#define IXGBE_EEPROM_READ_REG_START  1    /* First bit to start operation */
-#define IXGBE_EEPROM_READ_ADDR_SHIFT 2    /* Shift to the address bits */
+#define IXGBE_EEPROM_RW_REG_DATA   16 /* data offset in EEPROM read reg */
+#define IXGBE_EEPROM_RW_REG_DONE   2  /* Offset to READ done bit */
+#define IXGBE_EEPROM_RW_REG_START  1  /* First bit to start operation */
+#define IXGBE_EEPROM_RW_ADDR_SHIFT 2  /* Shift to the address bits */
+#define IXGBE_NVM_POLL_WRITE       1  /* Flag for polling for write complete */
+#define IXGBE_NVM_POLL_READ        0  /* Flag for polling for read complete */
 
 #define IXGBE_ETH_LENGTH_OF_ADDRESS   6
 
@@ -1588,10 +1627,12 @@
 #define IXGBE_EEPROM_GRANT_ATTEMPTS 1000 /* EEPROM # attempts to gain grant */
 #endif
 
-#ifndef IXGBE_EERD_ATTEMPTS
-/* Number of 5 microseconds we wait for EERD read to complete */
-#define IXGBE_EERD_ATTEMPTS 100000
-#endif
+/* Number of 5 microseconds we wait for EERD read and
+ * EERW write to complete */
+#define IXGBE_EERD_EEWR_ATTEMPTS 100000
+
+/* # attempts we wait for flush update to complete */
+#define IXGBE_FLUDONE_ATTEMPTS 20000
 
 #define IXGBE_PCIE_CTRL2                 0x5   /* PCIe Control 2 Offset */
 #define IXGBE_PCIE_CTRL2_DUMMY_ENABLE    0x8   /* Dummy Function Enable */
@@ -1604,9 +1645,18 @@
 #define IXGBE_DEVICE_CAPS_FCOE_OFFLOADS  0x2
 #define IXGBE_FW_PASSTHROUGH_PATCH_CONFIG_PTR   0x4
 #define IXGBE_FW_PATCH_VERSION_4   0x7
+#define IXGBE_ALT_SAN_MAC_ADDR_BLK_PTR      0x27 /* Alt. SAN MAC block */
+#define IXGBE_ALT_SAN_MAC_ADDR_CAPS_OFFSET  0x0 /* Alt. SAN MAC capability */
+#define IXGBE_ALT_SAN_MAC_ADDR_PORT0_OFFSET 0x1 /* Alt. SAN MAC 0 offset */
+#define IXGBE_ALT_SAN_MAC_ADDR_PORT1_OFFSET 0x4 /* Alt. SAN MAC 1 offset */
+#define IXGBE_ALT_SAN_MAC_ADDR_WWNN_OFFSET  0x7 /* Alt. WWNN prefix offset */
+#define IXGBE_ALT_SAN_MAC_ADDR_WWPN_OFFSET  0x8 /* Alt. WWPN prefix offset */
+#define IXGBE_ALT_SAN_MAC_ADDR_CAPS_SANMAC  0x0 /* Alt. SAN MAC exists */
+#define IXGBE_ALT_SAN_MAC_ADDR_CAPS_ALTWWN  0x1 /* Alt. WWN base exists */
 
 /* PCI Bus Info */
 #define IXGBE_PCI_LINK_STATUS     0xB2
+#define IXGBE_PCI_DEVICE_CONTROL2 0xC8
 #define IXGBE_PCI_LINK_WIDTH      0x3F0
 #define IXGBE_PCI_LINK_WIDTH_1    0x10
 #define IXGBE_PCI_LINK_WIDTH_2    0x20
@@ -1617,6 +1667,7 @@
 #define IXGBE_PCI_LINK_SPEED_5000 0x2
 #define IXGBE_PCI_HEADER_TYPE_REGISTER  0x0E
 #define IXGBE_PCI_HEADER_TYPE_MULTIFUNC 0x80
+#define IXGBE_PCI_DEVICE_CONTROL2_16ms  0x0005
 
 /* Number of 100 microseconds we wait for PCI Express master disable */
 #define IXGBE_PCI_MASTER_DISABLE_TIMEOUT 800
@@ -2210,6 +2261,7 @@ struct ixgbe_atr_input {
 enum ixgbe_eeprom_type {
 	ixgbe_eeprom_uninitialized = 0,
 	ixgbe_eeprom_spi,
+	ixgbe_flash,
 	ixgbe_eeprom_none /* No NVM support */
 };
 
@@ -2269,6 +2321,7 @@ enum ixgbe_media_type {
 	ixgbe_media_type_fiber,
 	ixgbe_media_type_copper,
 	ixgbe_media_type_backplane,
+	ixgbe_media_type_cx4,
 	ixgbe_media_type_virtual
 };
 
@@ -2281,6 +2334,14 @@ enum ixgbe_fc_mode {
 	ixgbe_fc_default
 };
 
+/* Smart Speed Settings */
+#define IXGBE_SMARTSPEED_MAX_RETRIES	3
+enum ixgbe_smart_speed {
+	ixgbe_smart_speed_auto = 0,
+	ixgbe_smart_speed_on,
+	ixgbe_smart_speed_off
+};
+
 /* PCI bus types */
 enum ixgbe_bus_type {
 	ixgbe_bus_type_unknown = 0,
@@ -2434,6 +2495,7 @@ struct ixgbe_eeprom_operations {
 	s32 (*write)(struct ixgbe_hw *, u16, u16);
 	s32 (*validate_checksum)(struct ixgbe_hw *, u16 *);
 	s32 (*update_checksum)(struct ixgbe_hw *);
+	u16 (*calc_checksum)(struct ixgbe_hw *);
 };
 
 struct ixgbe_mac_operations {
@@ -2447,6 +2509,7 @@ struct ixgbe_mac_operations {
 	s32 (*get_san_mac_addr)(struct ixgbe_hw *, u8 *);
 	s32 (*set_san_mac_addr)(struct ixgbe_hw *, u8 *);
 	s32 (*get_device_caps)(struct ixgbe_hw *, u16 *);
+	s32 (*get_wwn_prefix)(struct ixgbe_hw *, u16 *, u16 *);
 	s32 (*stop_adapter)(struct ixgbe_hw *);
 	s32 (*get_bus_info)(struct ixgbe_hw *);
 	void (*set_lan_id)(struct ixgbe_hw *);
@@ -2458,9 +2521,7 @@ struct ixgbe_mac_operations {
 	void (*release_swfw_sync)(struct ixgbe_hw *, u16);
 
 	/* Link */
-	s32 (*setup_link)(struct ixgbe_hw *);
-	s32 (*setup_link_speed)(struct ixgbe_hw *, ixgbe_link_speed, bool,
-	                        bool);
+	s32 (*setup_link)(struct ixgbe_hw *, ixgbe_link_speed, bool, bool);
 	s32 (*check_link)(struct ixgbe_hw *, ixgbe_link_speed *, bool *, bool);
 	s32 (*get_link_capabilities)(struct ixgbe_hw *, ixgbe_link_speed *,
 	                             bool *);
@@ -2525,6 +2586,10 @@ struct ixgbe_mac_info {
 	u8                              addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
 	u8                              perm_addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
 	u8                              san_addr[IXGBE_ETH_LENGTH_OF_ADDRESS];
+	/* prefix for World Wide Node Name (WWNN) */
+	u16                             wwnn_prefix;
+	/* prefix for World Wide Port Name (WWPN) */
+	u16                             wwpn_prefix;
 	s32                             mc_filter_type;
 	u32                             mcft_size;
 	u32                             vft_size;
@@ -2537,8 +2602,6 @@ struct ixgbe_mac_info {
 	u32                             orig_autoc;
 	u32                             orig_autoc2;
 	bool                            orig_link_settings_stored;
-	bool                            autoneg;
-	bool                            autoneg_succeeded;
 	bool                            autotry_restart;
 };
 
@@ -2553,7 +2616,8 @@ struct ixgbe_phy_info {
 	enum ixgbe_media_type           media_type;
 	bool                            reset_disable;
 	ixgbe_autoneg_advertised        autoneg_advertised;
-	bool                            autoneg_wait_to_complete;
+	enum ixgbe_smart_speed          smart_speed;
+	bool                            smart_speed_active;
 	bool                            multispeed_fiber;
 };
 
diff --git a/sys/dev/jme/if_jme.c b/sys/dev/jme/if_jme.c
index c2e64f02f8c..eb8b6304523 100644
--- a/sys/dev/jme/if_jme.c
+++ b/sys/dev/jme/if_jme.c
@@ -465,7 +465,7 @@ jme_reg_macaddr(struct jme_softc *sc)
 		    "generating fake ethernet address.\n");
 		par0 = arc4random();
 		/* Set OUI to JMicron. */
-		sc->jme_eaddr[0] = 0x00;
+		sc->jme_eaddr[0] = 0x02;	/* U/L bit set. */
 		sc->jme_eaddr[1] = 0x1B;
 		sc->jme_eaddr[2] = 0x8C;
 		sc->jme_eaddr[3] = (par0 >> 16) & 0xff;
diff --git a/sys/dev/ksyms/ksyms.c b/sys/dev/ksyms/ksyms.c
index fc368c7dca0..3a1adca78d3 100644
--- a/sys/dev/ksyms/ksyms.c
+++ b/sys/dev/ksyms/ksyms.c
@@ -94,7 +94,7 @@ struct ksyms_softc {
 static struct mtx 		 ksyms_mtx;
 static struct cdev 		*ksyms_dev;
 static LIST_HEAD(, ksyms_softc)	 ksyms_list = 
-	LIST_HEAD_INITIALIZER(&ksyms_list);
+	LIST_HEAD_INITIALIZER(ksyms_list);
 
 static const char 	ksyms_shstrtab[] = 
 	"\0" STR_SYMTAB "\0" STR_STRTAB "\0" STR_SHSTRTAB "\0";
@@ -589,8 +589,8 @@ ksyms_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int32_t flag __unused,
 
 /* ARGUSED */
 static int
-ksyms_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
-		int prot __unused)
+ksyms_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+		int prot __unused, vm_memattr_t *memattr __unused)
 {
     	struct ksyms_softc *sc;
 	int error;
diff --git a/sys/dev/led/led.c b/sys/dev/led/led.c
index 1d902d56aa7..fdd0fa2d006 100644
--- a/sys/dev/led/led.c
+++ b/sys/dev/led/led.c
@@ -40,7 +40,7 @@ struct ledsc {
 static struct unrhdr *led_unit;
 static struct mtx led_mtx;
 static struct sx led_sx;
-static LIST_HEAD(, ledsc) led_list = LIST_HEAD_INITIALIZER(&led_list);
+static LIST_HEAD(, ledsc) led_list = LIST_HEAD_INITIALIZER(led_list);
 static struct callout led_ch;
 
 static MALLOC_DEFINE(M_LED, "LED", "LED driver");
diff --git a/sys/dev/lge/if_lge.c b/sys/dev/lge/if_lge.c
index 79a915633df..b870bf0c8ba 100644
--- a/sys/dev/lge/if_lge.c
+++ b/sys/dev/lge/if_lge.c
@@ -137,7 +137,7 @@ static int lge_ioctl(struct ifnet *, u_long, caddr_t);
 static void lge_init(void *);
 static void lge_init_locked(struct lge_softc *);
 static void lge_stop(struct lge_softc *);
-static void lge_watchdog(struct ifnet *);
+static void lge_watchdog(struct lge_softc *);
 static int lge_shutdown(device_t);
 static int lge_ifmedia_upd(struct ifnet *);
 static void lge_ifmedia_upd_locked(struct ifnet *);
@@ -544,7 +544,6 @@ lge_attach(dev)
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = lge_ioctl;
 	ifp->if_start = lge_start;
-	ifp->if_watchdog = lge_watchdog;
 	ifp->if_init = lge_init;
 	ifp->if_snd.ifq_maxlen = LGE_TX_LIST_CNT - 1;
 	ifp->if_capabilities = IFCAP_RXCSUM;
@@ -1000,7 +999,7 @@ lge_txeof(sc)
 	ifp = sc->lge_ifp;
 
 	/* Clear the timeout timer. */
-	ifp->if_timer = 0;
+	sc->lge_timer = 0;
 
 	/*
 	 * Go through our tx list and free mbufs for those
@@ -1021,7 +1020,7 @@ lge_txeof(sc)
 
 		txdone--;
 		LGE_INC(idx, LGE_TX_LIST_CNT);
-		ifp->if_timer = 0;
+		sc->lge_timer = 0;
 	}
 
 	sc->lge_cdata.lge_tx_cons = idx;
@@ -1064,6 +1063,8 @@ lge_tick(xsc)
 		}
 	}
 
+	if (sc->lge_timer != 0 && --sc->lge_timer == 0)
+		lge_watchdog(sc);
 	callout_reset(&sc->lge_stat_callout, hz, lge_tick, sc);
 
 	return;
@@ -1236,7 +1237,7 @@ lge_start_locked(ifp)
 	/*
 	 * Set a timeout in case the chip goes out to lunch.
 	 */
-	ifp->if_timer = 5;
+	sc->lge_timer = 5;
 
 	return;
 }
@@ -1506,14 +1507,14 @@ lge_ioctl(ifp, command, data)
 }
 
 static void
-lge_watchdog(ifp)
-	struct ifnet		*ifp;
-{
+lge_watchdog(sc)
 	struct lge_softc	*sc;
+{
+	struct ifnet		*ifp;
 
-	sc = ifp->if_softc;
+	LGE_LOCK_ASSERT(sc);
+	ifp = sc->lge_ifp;
 
-	LGE_LOCK(sc);
 	ifp->if_oerrors++;
 	if_printf(ifp, "watchdog timeout\n");
 
@@ -1524,9 +1525,6 @@ lge_watchdog(ifp)
 
 	if (ifp->if_snd.ifq_head != NULL)
 		lge_start_locked(ifp);
-	LGE_UNLOCK(sc);
-
-	return;
 }
 
 /*
@@ -1542,7 +1540,7 @@ lge_stop(sc)
 
 	LGE_LOCK_ASSERT(sc);
 	ifp = sc->lge_ifp;
-	ifp->if_timer = 0;
+	sc->lge_timer = 0;
 	callout_stop(&sc->lge_stat_callout);
 	CSR_WRITE_4(sc, LGE_IMR, LGE_IMR_INTR_ENB);
 
diff --git a/sys/dev/lge/if_lgereg.h b/sys/dev/lge/if_lgereg.h
index d1894656cdc..b963d57ab94 100644
--- a/sys/dev/lge/if_lgereg.h
+++ b/sys/dev/lge/if_lgereg.h
@@ -534,6 +534,7 @@ struct lge_softc {
 	u_int8_t		lge_link;
 	u_int8_t		lge_pcs;
 	int			lge_if_flags;
+	int			lge_timer;
 	struct lge_list_data	*lge_ldata;
 	struct lge_ring_data	lge_cdata;
 	struct callout		lge_stat_callout;
diff --git a/sys/dev/lmc/if_lmc.c b/sys/dev/lmc/if_lmc.c
index e03f33c414a..23f6da9769c 100644
--- a/sys/dev/lmc/if_lmc.c
+++ b/sys/dev/lmc/if_lmc.c
@@ -4642,8 +4642,9 @@ lmc_raw_output(struct ifnet *ifp, struct mbuf *m,
 
 /* Called from a softirq once a second. */
 static void
-lmc_ifnet_watchdog(struct ifnet *ifp)
+lmc_watchdog(void *arg)
   {
+  struct ifnet *ifp = arg;
   softc_t *sc = IFP2SC(ifp);
   u_int8_t old_oper_status = sc->status.oper_status;
   struct event_cntrs *cntrs = &sc->status.cntrs;
@@ -4734,7 +4735,7 @@ lmc_ifnet_watchdog(struct ifnet *ifp)
 # endif
 
   /* Call this procedure again after one second. */
-  ifp->if_timer = 1;
+  callout_reset(&sc->callout, hz, lmc_watchdog, ifp);
   }
 
 # ifdef __OpenBSD__
@@ -4822,8 +4823,6 @@ setup_ifnet(struct ifnet *ifp)
   ifp->if_start    = lmc_ifnet_start;	/* sppp changes this */
   ifp->if_output   = lmc_raw_output;	/* sppp & p2p change this */
   ifp->if_input    = lmc_raw_input;
-  ifp->if_watchdog = lmc_ifnet_watchdog;
-  ifp->if_timer    = 1;
   ifp->if_mtu      = MAX_DESC_LEN;	/* sppp & p2p change this */
   ifp->if_type     = IFT_PTPSERIAL;	/* p2p changes this */
 
@@ -4917,6 +4916,8 @@ lmc_ifnet_attach(softc_t *sc)
     }
 # endif  /* __OpenBSD__ */
 
+  callout_reset(&sc->callout, hz, lmc_watchdog, sc);
+
   return 0;
   }
 
@@ -5244,7 +5245,7 @@ ng_watchdog(void *arg)
   sc->status.line_prot = 0;
 
   /* Call this procedure again after one second. */
-  callout_reset(&sc->ng_callout, hz, ng_watchdog, sc);
+  callout_reset(&sc->callout, hz, ng_watchdog, sc);
   }
 # endif
 
@@ -5301,16 +5302,9 @@ ng_attach(softc_t *sc)
   IFQ_SET_MAXLEN(&sc->ng_sndq,  SNDQ_MAXLEN);
   IFQ_SET_READY(&sc->ng_sndq);
 
-  /* If ifnet is present, it will call watchdog. */
-  /* Otherwise, arrange to call watchdog here. */
 # if (IFNET == 0)
   /* Arrange to call ng_watchdog() once a second. */
-#  if (__FreeBSD_version >= 500000)
-  callout_init(&sc->ng_callout, 0);
-#  else  /* FreeBSD-4 */
-  callout_init(&sc->ng_callout);
-#  endif
-  callout_reset(&sc->ng_callout, hz, ng_watchdog, sc);
+  callout_reset(&sc->callout, hz, ng_watchdog, sc);
 # endif
 
   return 0;
@@ -5319,9 +5313,7 @@ ng_attach(softc_t *sc)
 static void
 ng_detach(softc_t *sc)
   {
-# if (IFNET == 0)
-  callout_stop(&sc->ng_callout);
-# endif
+  callout_drain(&sc->callout);
 # if (__FreeBSD_version >= 500000)
   mtx_destroy(&sc->ng_sndq.ifq_mtx);
   mtx_destroy(&sc->ng_fastq.ifq_mtx);
@@ -5493,6 +5485,12 @@ attach_card(softc_t *sc, const char *intrstr)
   /* Start the card. */
   if ((error = startup_card(sc))) return error;
 
+#  if (__FreeBSD_version >= 500000)
+  callout_init(&sc->callout, 0);
+#  else  /* FreeBSD-4 */
+  callout_init(&sc->callout);
+#  endif
+
   /* Attach a kernel interface. */
 #if NETGRAPH
   if ((error = ng_attach(sc))) return error;
diff --git a/sys/dev/lmc/if_lmc.h b/sys/dev/lmc/if_lmc.h
index fb34e03117d..0212f514bf2 100644
--- a/sys/dev/lmc/if_lmc.h
+++ b/sys/dev/lmc/if_lmc.h
@@ -1140,7 +1140,6 @@ struct softc
 #endif
 
 #if NETGRAPH
-  struct callout ng_callout;	/* ng_watchdog needs this                  */
   node_p	ng_node;	/* pointer to our node struct              */
   hook_p	ng_hook;	/* non-zero means NETGRAPH owns device     */
 # if (__FreeBSD_version >= 503000)
@@ -1153,6 +1152,7 @@ struct softc
 #endif
 
 #ifdef __FreeBSD__
+  struct callout callout;	/* watchdog needs this                  */
   struct device	*dev;		/* base device pointer                     */
   bus_space_tag_t csr_tag;	/* bus_space needs this                    */
   bus_space_handle_t csr_handle;/* bus_space_needs this                    */
@@ -1596,7 +1596,6 @@ static int lmc_ifnet_ioctl(struct ifnet *, u_long, caddr_t);
 static void lmc_ifnet_start(struct ifnet *);
 static int lmc_raw_output(struct ifnet *, struct mbuf *,
  struct sockaddr *, struct route *);
-static void lmc_ifnet_watchdog(struct ifnet *);
 # ifdef __OpenBSD__
 static int ifmedia_change(struct ifnet *);
 static void ifmedia_status(struct ifnet *, struct ifmediareq *);
diff --git a/sys/dev/malo/if_malo.c b/sys/dev/malo/if_malo.c
index d77718b0d1e..dd88aa657e6 100644
--- a/sys/dev/malo/if_malo.c
+++ b/sys/dev/malo/if_malo.c
@@ -135,7 +135,7 @@ static	int	malo_setup_hwdma(struct malo_softc *);
 static	void	malo_txq_init(struct malo_softc *, struct malo_txq *, int);
 static	void	malo_tx_cleanupq(struct malo_softc *, struct malo_txq *);
 static	void	malo_start(struct ifnet *);
-static	void	malo_watchdog(struct ifnet *);
+static	void	malo_watchdog(void *);
 static	int	malo_ioctl(struct ifnet *, u_long, caddr_t);
 static	void	malo_updateslot(struct ifnet *);
 static	int	malo_newstate(struct ieee80211vap *, enum ieee80211_state, int);
@@ -191,6 +191,7 @@ malo_attach(uint16_t devid, struct malo_softc *sc)
 	ic = ifp->if_l2com;
 
 	MALO_LOCK_INIT(sc);
+	callout_init_mtx(&sc->malo_watchdog_timer, &sc->malo_mtx, 0);
 
 	/* set these up early for if_printf use */
 	if_initname(ifp, device_get_name(sc->malo_dev),
@@ -272,7 +273,6 @@ malo_attach(uint16_t devid, struct malo_softc *sc)
 	ifp->if_softc = sc;
 	ifp->if_flags = IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST;
 	ifp->if_start = malo_start;
-	ifp->if_watchdog = malo_watchdog;
 	ifp->if_ioctl = malo_ioctl;
 	ifp->if_init = malo_init;
 	IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN);
@@ -1076,7 +1076,7 @@ malo_tx_proc(void *arg, int npending)
 
 	if (nreaped != 0) {
 		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-		ifp->if_timer = 0;
+		sc->malo_timer = 0;
 		malo_start(ifp);
 	}
 }
@@ -1260,7 +1260,7 @@ malo_tx_start(struct malo_softc *sc, struct ieee80211_node *ni,
 	MALO_TXDESC_SYNC(txq, ds, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
 	ifp->if_opackets++;
-	ifp->if_timer = 5;
+	sc->malo_timer = 5;
 	MALO_TXQ_UNLOCK(txq);
 	return 0;
 #undef IEEE80211_DIR_DSTODS
@@ -1339,10 +1339,17 @@ malo_start(struct ifnet *ifp)
 }
 
 static void
-malo_watchdog(struct ifnet *ifp)
+malo_watchdog(void *arg)
 {
-	struct malo_softc *sc = ifp->if_softc;
+	struct malo_softc *sc;
+	struct ifnet *ifp;
 
+	sc = arg;
+	callout_reset(&sc->malo_watchdog_timer, hz, malo_watchdog, sc);
+	if (sc->malo_timer == 0 || --sc->malo_timer > 0)
+		return;
+
+	ifp = sc->malo_ifp;
 	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) && !sc->malo_invalid) {
 		if_printf(ifp, "watchdog timeout\n");
 
@@ -1536,6 +1543,7 @@ malo_init_locked(struct malo_softc *sc)
 
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
 	malo_hal_intrset(mh, sc->malo_imask);
+	callout_reset(&sc->malo_watchdog_timer, hz, malo_watchdog, sc);
 }
 
 static void
@@ -1699,7 +1707,8 @@ malo_stop_locked(struct ifnet *ifp, int disable)
 	 * is gone (invalid).
 	 */
 	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
-	ifp->if_timer = 0;
+	callout_stop(&sc->malo_watchdog_timer);
+	sc->malo_timer = 0;
 	/* diable interrupt.  */
 	malo_hal_intrset(mh, 0);
 	/* turn off the radio.  */
@@ -2241,6 +2250,7 @@ malo_detach(struct malo_softc *sc)
 	 * Other than that, it's straightforward...
 	 */
 	ieee80211_ifdetach(ic);
+	callout_drain(&sc->malo_watchdog_timer);
 	malo_dma_cleanup(sc);
 	malo_tx_cleanup(sc);
 	malo_hal_detach(sc->malo_mh);
diff --git a/sys/dev/malo/if_malo.h b/sys/dev/malo/if_malo.h
index 7e3a7e89e48..bac290c6330 100644
--- a/sys/dev/malo/if_malo.h
+++ b/sys/dev/malo/if_malo.h
@@ -550,6 +550,8 @@ struct malo_softc {
 
 	struct malo_txq		malo_txq[MALO_NUM_TX_QUEUES];
 	struct task		malo_txtask;	/* tx int processing */
+	struct callout	malo_watchdog_timer;
+	int			malo_timer;
 
 	struct malo_tx_radiotap_header malo_tx_th;
 	struct malo_rx_radiotap_header malo_rx_th;
diff --git a/sys/dev/mc146818/mc146818.c b/sys/dev/mc146818/mc146818.c
index ea59d2c3c54..108ee5ae41b 100644
--- a/sys/dev/mc146818/mc146818.c
+++ b/sys/dev/mc146818/mc146818.c
@@ -9,8 +9,6 @@
  * 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.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
@@ -23,7 +21,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- *	from: NetBSD: mc146818.c,v 1.4 2003/11/24 06:20:40 tsutsui Exp
+ *	$NetBSD: mc146818.c,v 1.16 2008/05/14 13:29:28 tsutsui Exp $
  */
 
 #include 
@@ -94,7 +92,7 @@ mc146818_attach(device_t dev)
 	(*sc->sc_mcwrite)(dev, MC_REGB, sc->sc_regb);
 	mtx_unlock_spin(&sc->sc_mtx);
 
-	clock_register(dev, 1000000);	/* 1 second resolution. */
+	clock_register(dev, 1000000);	/* 1 second resolution */
 
 	return (0);
 }
@@ -116,7 +114,7 @@ mc146818_gettime(device_t dev, struct timespec *ts)
 
 	/*
 	 * If MC_REGA_UIP is 0 we have at least 244us before the next
-	 * update. If it's 1 an update is imminent.
+	 * update.  If it's 1 an update is imminent.
 	 */
 	for (;;) {
 		mtx_lock_spin(&sc->sc_mtx);
@@ -260,6 +258,9 @@ mc146818_def_write(device_t dev, u_int reg, u_int val)
 	bus_space_write_1(sc->sc_bst, sc->sc_bsh, MC_DATA, val);
 }
 
+#undef MC_ADDR
+#undef MC_DATA
+
 /*
  * Looks like it's common even across platforms to store the century at
  * 0x32 in the NVRAM of the mc146818.
@@ -283,3 +284,5 @@ mc146818_def_setcent(device_t dev, u_int cent)
 	sc = device_get_softc(dev);
 	(*sc->sc_mcwrite)(dev, MC_CENT, cent);
 }
+
+#undef MC_CENT
diff --git a/sys/dev/mc146818/mc146818reg.h b/sys/dev/mc146818/mc146818reg.h
index 7e17aa248d3..811187e4b7d 100644
--- a/sys/dev/mc146818/mc146818reg.h
+++ b/sys/dev/mc146818/mc146818reg.h
@@ -1,17 +1,17 @@
 /*-
  * Copyright (c) 1995 Carnegie-Mellon University.
  * All rights reserved.
- * 
+ *
  * Permission to use, copy, modify and distribute this software and
  * its documentation is hereby granted, provided that both the copyright
  * notice and this permission notice appear in all copies of the
  * software, derivative works or modified versions, and any portions
  * thereof, and that both notices appear in supporting documentation.
- * 
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" 
- * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND 
+ *
+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
+ * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- * 
+ *
  * Carnegie Mellon requests users of this software to return to
  *
  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
@@ -22,7 +22,7 @@
  * any improvements or extensions that they make and grant Carnegie the
  * rights to redistribute these changes.
  *
- *	from: NetBSD: mc146818reg.h,v 1.5 2003/11/02 11:07:45 wiz Exp
+ *	$NetBSD: mc146818reg.h,v 1.9 2006/03/08 23:46:25 lukem Exp $
  *
  * $FreeBSD$
  */
@@ -122,8 +122,8 @@
  * Periodic Interrupt Rate Select constants (Control register A)
  */
 #define	MC_RATE_NONE	0x0	/* No periodic interrupt */
-#define	MC_RATE_1	0x1     /* 256 Hz if MC_BASE_32_KHz, else 32768 Hz */
-#define	MC_RATE_2	0x2     /* 128 Hz if MC_BASE_32_KHz, else 16384 Hz */
+#define	MC_RATE_1	0x1	/* 256 Hz if MC_BASE_32_KHz, else 32768 Hz */
+#define	MC_RATE_2	0x2	/* 128 Hz if MC_BASE_32_KHz, else 16384 Hz */
 #define	MC_RATE_8192_Hz	0x3	/* 122.070 us period */
 #define	MC_RATE_4096_Hz	0x4	/* 244.141 us period */
 #define	MC_RATE_2048_Hz	0x5	/* 488.281 us period */
@@ -141,8 +141,8 @@
 /*
  * Time base (divisor select) constants (Control register A)
  */
-#define	MC_BASE_4_MHz	0x00		/* 4MHz crystal */
-#define	MC_BASE_1_MHz	MC_REGA_DV0	/* 1MHz crystal */
-#define	MC_BASE_32_KHz	MC_REGA_DV1	/* 32KHz crystal */
+#define	MC_BASE_4_MHz	0x00		/* 4 MHz crystal */
+#define	MC_BASE_1_MHz	MC_REGA_DV0	/* 1 MHz crystal */
+#define	MC_BASE_32_KHz	MC_REGA_DV1	/* 32 KHz crystal */
 #define	MC_BASE_NONE	(MC_REGA_DV2 | MC_REGA_DV1) /* actually also resets */
 #define	MC_BASE_RESET	(MC_REGA_DV2 | MC_REGA_DV1 | MC_REGA_DV0)
diff --git a/sys/dev/mc146818/mc146818var.h b/sys/dev/mc146818/mc146818var.h
index cce95086edf..722b4fe1e77 100644
--- a/sys/dev/mc146818/mc146818var.h
+++ b/sys/dev/mc146818/mc146818var.h
@@ -9,8 +9,6 @@
  * 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.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
@@ -23,7 +21,7 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- *	from: NetBSD: mc146818var.h,v 1.3 2003/11/24 06:20:40 tsutsui Exp
+ *	$NetBSD: mc146818var.h,v 1.7 2008/05/14 13:29:29 tsutsui Exp $
  *
  * $FreeBSD$
  */
@@ -38,29 +36,30 @@ struct mc146818_softc {
 	u_char sc_regb;				/* register B */
 
 	u_int sc_year0;				/* year counter offset */
+
 	u_int sc_flag;				/* MD flags */
-#define MC146818_NO_CENT_ADJUST	0x0001		/* don't adjust century */
-#define MC146818_BCD		0x0002		/* use BCD mode */
-#define MC146818_12HR		0x0004		/* use AM/PM mode */
+#define	MC146818_NO_CENT_ADJUST	0x0001		/* don't adjust century */
+#define	MC146818_BCD		0x0002		/* use BCD mode */
+#define	MC146818_12HR		0x0004		/* use AM/PM mode */
 
 	/* MD chip register read/write functions */
-	u_int (*sc_mcread)(device_t, u_int);
-	void (*sc_mcwrite)(device_t, u_int, u_int);
+	u_int (*sc_mcread)(device_t dev, u_int reg);
+	void (*sc_mcwrite)(device_t dev, u_int reg, u_int val);
 	/* MD century get/set functions */
-	u_int (*sc_getcent)(device_t);
-	void (*sc_setcent)(device_t, u_int);
+	u_int (*sc_getcent)(device_t dev);
+	void (*sc_setcent)(device_t dev, u_int cent);
 };
 
 /* Default read/write functions */
-u_int mc146818_def_read(device_t, u_int);
-void mc146818_def_write(device_t, u_int, u_int);
+u_int mc146818_def_read(device_t dev, u_int reg);
+void mc146818_def_write(device_t dev, u_int reg, u_int val);
 
 /* Chip attach function */
 int mc146818_attach(device_t);
 
 /* Methods for the clock interface */
 #ifdef notyet
-int mc146818_getsecs(device_t, int *);
+int mc146818_getsecs(device_t dev, int *secp);
 #endif
-int mc146818_gettime(device_t, struct timespec *);
-int mc146818_settime(device_t, struct timespec *);
+int mc146818_gettime(device_t dev, struct timespec *ts);
+int mc146818_settime(device_t dev, struct timespec *ts);
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c
index 87e5ac9e6a6..20060999a23 100644
--- a/sys/dev/md/md.c
+++ b/sys/dev/md/md.c
@@ -152,7 +152,7 @@ struct g_class g_md_class = {
 DECLARE_GEOM_CLASS(g_md_class, g_md);
 
 
-static LIST_HEAD(, md_s) md_softc_list = LIST_HEAD_INITIALIZER(&md_softc_list);
+static LIST_HEAD(, md_s) md_softc_list = LIST_HEAD_INITIALIZER(md_softc_list);
 
 #define NINDIR	(PAGE_SIZE / sizeof(uintptr_t))
 #define NMASK	(NINDIR-1)
diff --git a/sys/dev/mge/if_mge.c b/sys/dev/mge/if_mge.c
index 0188ae3b79f..30d485ebd0c 100644
--- a/sys/dev/mge/if_mge.c
+++ b/sys/dev/mge/if_mge.c
@@ -611,6 +611,7 @@ static int
 mge_attach(device_t dev)
 {
 	struct mge_softc *sc;
+	struct mii_softc *miisc;
 	struct ifnet *ifp;
 	uint8_t hwaddr[ETHER_ADDR_LEN];
 	int i, error ;
@@ -689,13 +690,15 @@ mge_attach(device_t dev)
 	error = mii_phy_probe(dev, &sc->miibus, mge_ifmedia_upd, mge_ifmedia_sts);
 	if (error) {
 		device_printf(dev, "MII failed to find PHY\n");
-		if_free(ifp);
-		sc->ifp = NULL;
 		mge_detach(dev);
 		return (error);
 	}
 	sc->mii = device_get_softc(sc->miibus);
 
+	/* Tell the MAC where to find the PHY so autoneg works */
+	miisc = LIST_FIRST(&sc->mii->mii_phys);
+	MGE_WRITE(sc, MGE_REG_PHYDEV, miisc->mii_phy);
+
 	/* Attach interrupt handlers */
 	for (i = 0; i < 2; ++i) {
 		error = bus_setup_intr(dev, sc->res[1 + i],
@@ -704,7 +707,7 @@ mge_attach(device_t dev)
 		if (error) {
 			device_printf(dev, "could not setup %s\n",
 			    mge_intrs[i].description);
-			ether_ifdetach(sc->ifp);
+			mge_detach(dev);
 			return (error);
 		}
 	}
@@ -729,6 +732,9 @@ mge_detach(device_t dev)
 
 	/* Stop and release all interrupts */
 	for (i = 0; i < 2; ++i) {
+		if (!sc->ih_cookie[i])
+			continue;
+
 		error = bus_teardown_intr(dev, sc->res[1 + i], sc->ih_cookie[i]);
 		if (error)
 			device_printf(dev, "could not release %s\n",
diff --git a/sys/dev/mii/ip1000phy.c b/sys/dev/mii/ip1000phy.c
index 8e81d810b90..9b406d77895 100644
--- a/sys/dev/mii/ip1000phy.c
+++ b/sys/dev/mii/ip1000phy.c
@@ -398,8 +398,10 @@ ip1000phy_mii_phy_auto(struct mii_softc *sc)
 
 	isc = (struct ip1000phy_softc *)sc;
 	reg = 0;
-	if (isc->model == MII_MODEL_ICPLUS_IP1001)
+	if (isc->model == MII_MODEL_ICPLUS_IP1001) {
 		reg = PHY_READ(sc, IP1000PHY_MII_ANAR);
+		reg |= IP1000PHY_ANAR_NP;
+	}
 	reg |= IP1000PHY_ANAR_10T | IP1000PHY_ANAR_10T_FDX |
 	    IP1000PHY_ANAR_100TX | IP1000PHY_ANAR_100TX_FDX |
 	    IP1000PHY_ANAR_PAUSE | IP1000PHY_ANAR_APAUSE;
diff --git a/sys/dev/mii/tdkphy.c b/sys/dev/mii/tdkphy.c
index 83a394a339a..e05f2c05548 100644
--- a/sys/dev/mii/tdkphy.c
+++ b/sys/dev/mii/tdkphy.c
@@ -38,7 +38,7 @@ __FBSDID("$FreeBSD$");
  */
 
 /*
- * The TDK 78Q2120 is found on some Xircom X3201 based cardbus cards,
+ * The TDK 78Q2120 is found on some Xircom X3201 based CardBus cards,
  * also spotted on some 3C575 cards.  It's just like any other normal
  * phy, except it does auto negotiation in a different way.
  */
diff --git a/sys/dev/mk48txx/mk48txx.c b/sys/dev/mk48txx/mk48txx.c
index 71ab8f518df..9742e82748c 100644
--- a/sys/dev/mk48txx/mk48txx.c
+++ b/sys/dev/mk48txx/mk48txx.c
@@ -13,13 +13,6 @@
  * 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *        This product includes software developed by the NetBSD
- *        Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. AND CONTRIBUTORS
  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@@ -33,14 +26,14 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
- *	from: NetBSD: mk48txx.c,v 1.15 2004/07/05 09:24:31 pk Exp
+ *	$NetBSD: mk48txx.c,v 1.25 2008/04/28 20:23:50 martin Exp $
  */
 
 #include 
 __FBSDID("$FreeBSD$");
 
 /*
- * Mostek MK48T02, MK48T08, MK48T18, MK48T59 time-of-day chip subroutines.
+ * Mostek MK48T02, MK48T08, MK48T18, MK48T59 time-of-day chip subroutines
  */
 
 #include 
@@ -50,6 +43,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include 
@@ -59,17 +53,17 @@ __FBSDID("$FreeBSD$");
 
 #include "clock_if.h"
 
-static uint8_t	mk48txx_def_nvrd(device_t, int);
-static void	mk48txx_def_nvwr(device_t, int, uint8_t);
-static void	mk48txx_watchdog(void *, u_int, int *);
+static uint8_t	mk48txx_def_nvrd(device_t dev, int off);
+static void	mk48txx_def_nvwr(device_t dev, int off, uint8_t v);
+static void	mk48txx_watchdog(void *arg, u_int cmd, int *error);
 
-struct {
+static const struct {
 	const char *name;
 	bus_size_t nvramsz;
 	bus_size_t clkoff;
-	int flags;
-#define MK48TXX_EXT_REGISTERS	1	/* Has extended register set */
-} mk48txx_models[] = {
+	u_int flags;
+#define	MK48TXX_EXT_REGISTERS	1	/* Has extended register set. */
+} const mk48txx_models[] = {
 	{ "mk48t02", MK48T02_CLKSZ, MK48T02_CLKOFF, 0 },
 	{ "mk48t08", MK48T08_CLKSZ, MK48T08_CLKOFF, 0 },
 	{ "mk48t18", MK48T18_CLKSZ, MK48T18_CLKOFF, 0 },
@@ -112,7 +106,7 @@ mk48txx_attach(device_t dev)
 
 	if (mk48txx_models[i].flags & MK48TXX_EXT_REGISTERS) {
 		mtx_lock(&sc->sc_mtx);
-	    	if ((*sc->sc_nvrd)(dev, sc->sc_clkoffset + MK48TXX_FLAGS) &
+		if ((*sc->sc_nvrd)(dev, sc->sc_clkoffset + MK48TXX_FLAGS) &
 		    MK48TXX_FLAGS_BL) {
 			mtx_unlock(&sc->sc_mtx);
 			device_printf(dev, "%s: battery low\n", __func__);
@@ -140,7 +134,7 @@ mk48txx_attach(device_t dev)
 		}
 	}
 
-	clock_register(dev, 1000000);	/* 1 second resolution. */
+	clock_register(dev, 1000000);	/* 1 second resolution */
 
 	if ((sc->sc_flag & MK48TXX_WDOG_REGISTER) &&
 	    (mk48txx_models[i].flags & MK48TXX_EXT_REGISTERS)) {
@@ -182,8 +176,16 @@ mk48txx_gettime(device_t dev, struct timespec *ts)
 	ct.min = FROMBCD(FROMREG(MK48TXX_IMIN, MK48TXX_MIN_MASK));
 	ct.hour = FROMBCD(FROMREG(MK48TXX_IHOUR, MK48TXX_HOUR_MASK));
 	ct.day = FROMBCD(FROMREG(MK48TXX_IDAY, MK48TXX_DAY_MASK));
+#if 0
 	/* Map dow from 1 - 7 to 0 - 6; FROMBCD() isn't necessary here. */
 	ct.dow = FROMREG(MK48TXX_IWDAY, MK48TXX_WDAY_MASK) - 1;
+#else
+	/*
+	 * Set dow = -1 because some drivers (for example the NetBSD and
+	 * OpenBSD mk48txx(4)) don't set it correctly.
+	 */
+	ct.dow = -1;
+#endif
 	ct.mon = FROMBCD(FROMREG(MK48TXX_IMON, MK48TXX_MON_MASK));
 	year = FROMBCD(FROMREG(MK48TXX_IYEAR, MK48TXX_YEAR_MASK));
 	year += sc->sc_year0;
@@ -273,7 +275,7 @@ mk48txx_def_nvrd(device_t dev, int off)
 	struct mk48txx_softc *sc;
 
 	sc = device_get_softc(dev);
-	return (bus_space_read_1(sc->sc_bst, sc->sc_bsh, off));
+	return (bus_read_1(sc->sc_res, off));
 }
 
 static void
@@ -282,7 +284,7 @@ mk48txx_def_nvwr(device_t dev, int off, uint8_t v)
 	struct mk48txx_softc *sc;
 
 	sc = device_get_softc(dev);
-	bus_space_write_1(sc->sc_bst, sc->sc_bsh, off, v);
+	bus_write_1(sc->sc_res, off, v);
 }
 
 static void
diff --git a/sys/dev/mk48txx/mk48txxreg.h b/sys/dev/mk48txx/mk48txxreg.h
index 25b9cb39208..bae6ae5f51b 100644
--- a/sys/dev/mk48txx/mk48txxreg.h
+++ b/sys/dev/mk48txx/mk48txxreg.h
@@ -13,13 +13,6 @@
  * 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *        This product includes software developed by the NetBSD
- *        Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. AND CONTRIBUTORS
  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@@ -33,7 +26,7 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
- *	from: NetBSD: mk48txxreg.h,v 1.7 2003/11/01 22:41:42 tsutsui Exp
+ *	$NetBSD: mk48txxreg.h,v 1.10 2008/04/28 20:23:50 martin Exp $
  *
  * $FreeBSD$
  */
@@ -59,23 +52,23 @@
  * The first bank of eight registers at offset (nvramsz - 16) is
  * available only on recenter (which?) MK48Txx models.
  */
-#define MK48TXX_FLAGS	0	/* flags register */
-#define MK48TXX_UNUSED	1	/* unused */
-#define MK48TXX_ASEC	2	/* alarm seconds (0..59; BCD) */
-#define MK48TXX_AMIN	3	/* alarm minutes (0..59; BCD) */
-#define MK48TXX_AHOUR	4	/* alarm hours (0..23; BCD) */
-#define MK48TXX_ADAY	5	/* alarm day in month (1..31; BCD) */
-#define MK48TXX_INTR	6	/* interrupts register */
-#define MK48TXX_WDOG	7	/* watchdog register */
+#define	MK48TXX_FLAGS	0	/* flags register */
+#define	MK48TXX_UNUSED	1	/* unused */
+#define	MK48TXX_ASEC	2	/* alarm seconds (0..59; BCD) */
+#define	MK48TXX_AMIN	3	/* alarm minutes (0..59; BCD) */
+#define	MK48TXX_AHOUR	4	/* alarm hours (0..23; BCD) */
+#define	MK48TXX_ADAY	5	/* alarm day in month (1..31; BCD) */
+#define	MK48TXX_INTR	6	/* interrupts register */
+#define	MK48TXX_WDOG	7	/* watchdog register */
 
-#define MK48TXX_ICSR	8	/* control register */
-#define MK48TXX_ISEC	9	/* seconds (0..59; BCD) */
-#define MK48TXX_IMIN	10	/* minutes (0..59; BCD) */
-#define MK48TXX_IHOUR	11	/* hours (0..23; BCD) */
-#define MK48TXX_IWDAY	12	/* weekday (1..7) */
-#define MK48TXX_IDAY	13	/* day in month (1..31; BCD) */
-#define MK48TXX_IMON	14	/* month (1..12; BCD) */
-#define MK48TXX_IYEAR	15	/* year (0..99; BCD) */
+#define	MK48TXX_ICSR	8	/* control register */
+#define	MK48TXX_ISEC	9	/* seconds (0..59; BCD) */
+#define	MK48TXX_IMIN	10	/* minutes (0..59; BCD) */
+#define	MK48TXX_IHOUR	11	/* hours (0..23; BCD) */
+#define	MK48TXX_IWDAY	12	/* weekday (1..7) */
+#define	MK48TXX_IDAY	13	/* day in month (1..31; BCD) */
+#define	MK48TXX_IMON	14	/* month (1..12; BCD) */
+#define	MK48TXX_IYEAR	15	/* year (0..99; BCD) */
 
 /*
  * Note that some of the bits below that are not in the first eight
@@ -84,80 +77,80 @@
  */
 
 /* Bits in the flags register (extended only) */
-#define MK48TXX_FLAGS_BL	0x10	/* battery low (read only) */
-#define MK48TXX_FLAGS_AF	0x40	/* alarm flag (read only) */
-#define MK48TXX_FLAGS_WDF	0x80	/* watchdog flag (read only) */
+#define	MK48TXX_FLAGS_BL	0x10	/* battery low (read only) */
+#define	MK48TXX_FLAGS_AF	0x40	/* alarm flag (read only) */
+#define	MK48TXX_FLAGS_WDF	0x80	/* watchdog flag (read only) */
 
 /* Bits in the alarm seconds register (extended only) */
-#define MK48TXX_ASEC_MASK	0x7f	/* mask for alarm seconds */
-#define MK48TXX_ASEC_RPT1	0x80	/* alarm repeat mode bit 1 */
+#define	MK48TXX_ASEC_MASK	0x7f	/* mask for alarm seconds */
+#define	MK48TXX_ASEC_RPT1	0x80	/* alarm repeat mode bit 1 */
 
 /* Bits in the alarm minutes register (extended only) */
-#define MK48TXX_AMIN_MASK	0x7f	/* mask for alarm minutes */
-#define MK48TXX_AMIN_RPT2	0x80	/* alarm repeat mode bit 2 */
+#define	MK48TXX_AMIN_MASK	0x7f	/* mask for alarm minutes */
+#define	MK48TXX_AMIN_RPT2	0x80	/* alarm repeat mode bit 2 */
 
 /* Bits in the alarm hours register (extended only) */
-#define MK48TXX_AHOUR_MASK	0x3f	/* mask for alarm hours */
-#define MK48TXX_AHOUR_RPT3	0x80	/* alarm repeat mode bit 3 */
+#define	MK48TXX_AHOUR_MASK	0x3f	/* mask for alarm hours */
+#define	MK48TXX_AHOUR_RPT3	0x80	/* alarm repeat mode bit 3 */
 
 /* Bits in the alarm day in month register (extended only) */
-#define MK48TXX_ADAY_MASK	0x3f	/* mask for alarm day in month */
-#define MK48TXX_ADAY_RPT4	0x80	/* alarm repeat mode bit 4 */
+#define	MK48TXX_ADAY_MASK	0x3f	/* mask for alarm day in month */
+#define	MK48TXX_ADAY_RPT4	0x80	/* alarm repeat mode bit 4 */
 
 /* Bits in the interrupts register (extended only) */
-#define MK48TXX_INTR_ABE	0x20	/* alarm in battery back-up mode */
-#define MK48TXX_INTR_AFE	0x80	/* alarm flag enable */
+#define	MK48TXX_INTR_ABE	0x20	/* alarm in battery back-up mode */
+#define	MK48TXX_INTR_AFE	0x80	/* alarm flag enable */
 
 /* Bits in the watchdog register (extended only) */
-#define MK48TXX_WDOG_RB_1_16	0x00	/* watchdog resolution 1/16 second */
-#define MK48TXX_WDOG_RB_1_4	0x01	/* watchdog resolution 1/4 second */
-#define MK48TXX_WDOG_RB_1	0x02	/* watchdog resolution 1 second */
-#define MK48TXX_WDOG_RB_4	0x03	/* watchdog resolution 4 seconds */
-#define MK48TXX_WDOG_BMB_MASK	0x7c	/* mask for watchdog multiplier */
-#define MK48TXX_WDOG_BMB_SHIFT	2	/* shift for watchdog multiplier */
-#define MK48TXX_WDOG_WDS	0x80	/* watchdog steering bit */
+#define	MK48TXX_WDOG_RB_1_16	0x00	/* watchdog resolution 1/16 second */
+#define	MK48TXX_WDOG_RB_1_4	0x01	/* watchdog resolution 1/4 second */
+#define	MK48TXX_WDOG_RB_1	0x02	/* watchdog resolution 1 second */
+#define	MK48TXX_WDOG_RB_4	0x03	/* watchdog resolution 4 seconds */
+#define	MK48TXX_WDOG_BMB_MASK	0x7c	/* mask for watchdog multiplier */
+#define	MK48TXX_WDOG_BMB_SHIFT	2	/* shift for watchdog multiplier */
+#define	MK48TXX_WDOG_WDS	0x80	/* watchdog steering bit */
 
 /* Bits in the control register */
-#define MK48TXX_CSR_CALIB_MASK	0x1f	/* mask for calibration step width */
-#define MK48TXX_CSR_SIGN	0x20	/* sign of above calibration witdh */
-#define MK48TXX_CSR_READ	0x40	/* want to read (freeze clock) */
-#define MK48TXX_CSR_WRITE	0x80	/* want to write */
+#define	MK48TXX_CSR_CALIB_MASK	0x1f	/* mask for calibration step width */
+#define	MK48TXX_CSR_SIGN	0x20	/* sign of above calibration witdh */
+#define	MK48TXX_CSR_READ	0x40	/* want to read (freeze clock) */
+#define	MK48TXX_CSR_WRITE	0x80	/* want to write */
 
 /* Bits in the seconds register */
-#define MK48TXX_SEC_MASK	0x7f	/* mask for seconds */
-#define MK48TXX_SEC_ST		0x80	/* stop oscillator */
+#define	MK48TXX_SEC_MASK	0x7f	/* mask for seconds */
+#define	MK48TXX_SEC_ST		0x80	/* stop oscillator */
 
 /* Bits in the minutes register */
-#define MK48TXX_MIN_MASK	0x7f	/* mask for minutes */
+#define	MK48TXX_MIN_MASK	0x7f	/* mask for minutes */
 
 /* Bits in the hours register */
-#define MK48TXX_HOUR_MASK	0x3f	/* mask for hours */
+#define	MK48TXX_HOUR_MASK	0x3f	/* mask for hours */
 
 /* Bits in the century/weekday register */
-#define MK48TXX_WDAY_MASK	0x07	/* mask for weekday */
-#define MK48TXX_WDAY_CB		0x10	/* century bit (extended only) */
-#define MK48TXX_WDAY_CB_SHIFT	4	/* shift for century bit */
-#define MK48TXX_WDAY_CEB	0x20	/* century enable bit (extended only) */
-#define MK48TXX_WDAY_FT		0x40	/* frequency test */
+#define	MK48TXX_WDAY_MASK	0x07	/* mask for weekday */
+#define	MK48TXX_WDAY_CB		0x10	/* century bit (extended only) */
+#define	MK48TXX_WDAY_CB_SHIFT	4	/* shift for century bit */
+#define	MK48TXX_WDAY_CEB	0x20	/* century enable bit (extended only) */
+#define	MK48TXX_WDAY_FT		0x40	/* frequency test */
 
 /* Bits in the day in month register */
-#define MK48TXX_DAY_MASK	0x3f	/* mask for day in month */
+#define	MK48TXX_DAY_MASK	0x3f	/* mask for day in month */
 
 /* Bits in the month register */
-#define MK48TXX_MON_MASK	0x1f	/* mask for month */
+#define	MK48TXX_MON_MASK	0x1f	/* mask for month */
 
 /* Bits in the year register */
-#define MK48TXX_YEAR_MASK	0xff	/* mask for year */
+#define	MK48TXX_YEAR_MASK	0xff	/* mask for year */
 
 /* Model specific NVRAM sizes and clock offsets */
-#define MK48T02_CLKSZ		2048
-#define MK48T02_CLKOFF		0x7f0
+#define	MK48T02_CLKSZ		2048
+#define	MK48T02_CLKOFF		0x7f0
 
-#define MK48T08_CLKSZ		8192
-#define MK48T08_CLKOFF		0x1ff0
+#define	MK48T08_CLKSZ		8192
+#define	MK48T08_CLKOFF		0x1ff0
 
-#define MK48T18_CLKSZ		8192
-#define MK48T18_CLKOFF		0x1ff0
+#define	MK48T18_CLKSZ		8192
+#define	MK48T18_CLKOFF		0x1ff0
 
-#define MK48T59_CLKSZ		8192
-#define MK48T59_CLKOFF		0x1ff0
+#define	MK48T59_CLKSZ		8192
+#define	MK48T59_CLKOFF		0x1ff0
diff --git a/sys/dev/mk48txx/mk48txxvar.h b/sys/dev/mk48txx/mk48txxvar.h
index f7c3d319506..9706d8dbc94 100644
--- a/sys/dev/mk48txx/mk48txxvar.h
+++ b/sys/dev/mk48txx/mk48txxvar.h
@@ -13,13 +13,6 @@
  * 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.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *        This product includes software developed by the NetBSD
- *        Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. AND CONTRIBUTORS
  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
@@ -33,17 +26,16 @@
  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  * POSSIBILITY OF SUCH DAMAGE.
  *
- *	from: NetBSD: mk48txxvar.h,v 1.1 2003/11/01 22:41:42 tsutsui Exp
+ *	$NetBSD: mk48txxvar.h,v 1.6 2008/04/28 20:23:50 martin Exp $
  *
  * $FreeBSD$
  */
 
-typedef uint8_t (*mk48txx_nvrd_t)(device_t, int);
-typedef void (*mk48txx_nvwr_t)(device_t, int, uint8_t);
+typedef uint8_t (*mk48txx_nvrd_t)(device_t dev, int off);
+typedef void (*mk48txx_nvwr_t)(device_t dev, int off, uint8_t v);
 
 struct mk48txx_softc {
-	bus_space_tag_t		sc_bst;	/* bus space tag */
-	bus_space_handle_t	sc_bsh;	/* bus space handle */
+	struct resource		*sc_res;/* bus resource */
 
 	struct mtx		sc_mtx;	/* hardware mutex */
 	eventhandler_tag	sc_wet;	/* watchdog event handler tag */
@@ -53,17 +45,17 @@ struct mk48txx_softc {
 	bus_size_t	sc_clkoffset;	/* Offset in NVRAM to clock bits */
 	u_int		sc_year0;	/* year counter offset */
 	u_int		sc_flag;	/* MD flags */
-#define MK48TXX_NO_CENT_ADJUST	0x0001	/* don't manually adjust century */
-#define MK48TXX_WDOG_REGISTER	0x0002	/* register watchdog */
-#define MK48TXX_WDOG_ENABLE_WDS	0x0004	/* enable watchdog steering bit */
+#define	MK48TXX_NO_CENT_ADJUST	0x0001	/* don't manually adjust century */
+#define	MK48TXX_WDOG_REGISTER	0x0002	/* register watchdog */
+#define	MK48TXX_WDOG_ENABLE_WDS	0x0004	/* enable watchdog steering bit */
 
 	mk48txx_nvrd_t	sc_nvrd;	/* NVRAM/RTC read function */
 	mk48txx_nvwr_t	sc_nvwr;	/* NVRAM/RTC write function */
 };
 
 /* Chip attach function */
-int mk48txx_attach(device_t);
+int mk48txx_attach(device_t dev);
 
 /* Methods for the clock interface */
-int mk48txx_gettime(device_t, struct timespec *);
-int mk48txx_settime(device_t, struct timespec *);
+int mk48txx_gettime(device_t dev, struct timespec *ts);
+int mk48txx_settime(device_t dev, struct timespec *ts);
diff --git a/sys/dev/mpt/mpt_pci.c b/sys/dev/mpt/mpt_pci.c
index c6c59b7c9cc..1e9dc921c09 100644
--- a/sys/dev/mpt/mpt_pci.c
+++ b/sys/dev/mpt/mpt_pci.c
@@ -485,7 +485,7 @@ mpt_pci_attach(device_t dev)
 	 * Make sure we've disabled the ROM.
 	 */
 	data = pci_read_config(dev, PCIR_BIOS, 4);
-	data &= ~1;
+	data &= ~PCIM_BIOS_ENABLE;
 	pci_write_config(dev, PCIR_BIOS, data, 4);
 
 	/*
diff --git a/sys/dev/msk/if_msk.c b/sys/dev/msk/if_msk.c
index fbde7b73b19..9ff7f4a7caa 100644
--- a/sys/dev/msk/if_msk.c
+++ b/sys/dev/msk/if_msk.c
@@ -3198,6 +3198,8 @@ msk_tick(void *xsc_if)
 	mii = device_get_softc(sc_if->msk_miibus);
 
 	mii_tick(mii);
+	if ((sc_if->msk_flags & MSK_FLAG_LINK) == 0)
+		msk_miibus_statchg(sc_if->msk_if_dev);
 	msk_watchdog(sc_if);
 	callout_reset(&sc_if->msk_tick_ch, hz, msk_tick, sc_if);
 }
diff --git a/sys/dev/mwl/if_mwl.c b/sys/dev/mwl/if_mwl.c
index 4a1dc8ab578..e4e469b5bcf 100644
--- a/sys/dev/mwl/if_mwl.c
+++ b/sys/dev/mwl/if_mwl.c
@@ -98,7 +98,7 @@ static void	mwl_start(struct ifnet *);
 static int	mwl_raw_xmit(struct ieee80211_node *, struct mbuf *,
 			const struct ieee80211_bpf_params *);
 static int	mwl_media_change(struct ifnet *);
-static void	mwl_watchdog(struct ifnet *);
+static void	mwl_watchdog(void *);
 static int	mwl_ioctl(struct ifnet *, u_long, caddr_t);
 static void	mwl_radar_proc(void *, int);
 static void	mwl_chanswitch_proc(void *, int);
@@ -360,6 +360,7 @@ mwl_attach(uint16_t devid, struct mwl_softc *sc)
 		goto bad1;
 
 	callout_init(&sc->sc_timer, CALLOUT_MPSAFE);
+	callout_init_mtx(&sc->sc_watchdog, &sc->sc_mtx, 0);
 
 	sc->sc_tq = taskqueue_create("mwl_taskq", M_NOWAIT,
 		taskqueue_thread_enqueue, &sc->sc_tq);
@@ -401,7 +402,6 @@ mwl_attach(uint16_t devid, struct mwl_softc *sc)
 	ifp->if_softc = sc;
 	ifp->if_flags = IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST;
 	ifp->if_start = mwl_start;
-	ifp->if_watchdog = mwl_watchdog;
 	ifp->if_ioctl = mwl_ioctl;
 	ifp->if_init = mwl_init;
 	IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN);
@@ -558,6 +558,7 @@ mwl_detach(struct mwl_softc *sc)
 	 * Other than that, it's straightforward...
 	 */
 	ieee80211_ifdetach(ic);
+	callout_drain(&sc->sc_watchdog);
 	mwl_dma_cleanup(sc);
 	mwl_tx_cleanup(sc);
 	mwl_hal_detach(sc->sc_mh);
@@ -1214,6 +1215,7 @@ mwl_init_locked(struct mwl_softc *sc)
 
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
 	mwl_hal_intrset(mh, sc->sc_imask);
+	callout_reset(&sc->sc_watchdog, hz, mwl_watchdog, sc);
 
 	return 0;
 }
@@ -1251,7 +1253,8 @@ mwl_stop_locked(struct ifnet *ifp, int disable)
 		 * Shutdown the hardware and driver.
 		 */
 		ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
-		ifp->if_timer = 0;
+		callout_stop(&sc->sc_watchdog);
+		sc->sc_tx_timer = 0;
 		mwl_draintxq(sc);
 	}
 }
@@ -3411,7 +3414,7 @@ mwl_tx_start(struct mwl_softc *sc, struct ieee80211_node *ni, struct mwl_txbuf *
 	MWL_TXDESC_SYNC(txq, ds, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
 	ifp->if_opackets++;
-	ifp->if_timer = 5;
+	sc->sc_tx_timer = 5;
 	MWL_TXQ_UNLOCK(txq);
 
 	return 0;
@@ -3558,7 +3561,7 @@ mwl_tx_proc(void *arg, int npending)
 
 	if (nreaped != 0) {
 		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-		ifp->if_timer = 0;
+		sc->sc_tx_timer = 0;
 		if (!IFQ_IS_EMPTY(&ifp->if_snd)) {
 			/* NB: kick fw; the tx thread may have been preempted */
 			mwl_hal_txstart(sc->sc_mh, 0);
@@ -3624,7 +3627,7 @@ mwl_draintxq(struct mwl_softc *sc)
 	for (i = 0; i < MWL_NUM_TX_QUEUES; i++)
 		mwl_tx_draintxq(sc, &sc->sc_txq[i]);
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-	ifp->if_timer = 0;
+	sc->sc_tx_timer = 0;
 }
 
 #ifdef MWL_DIAGAPI
@@ -4770,10 +4773,17 @@ mwl_txq_dump(struct mwl_txq *txq)
 #endif
 
 static void
-mwl_watchdog(struct ifnet *ifp)
+mwl_watchdog(void *arg)
 {
-	struct mwl_softc *sc = ifp->if_softc;
+	struct mwl_softc *sc;
+	struct ifnet *ifp;
 
+	sc = arg;
+	callout_reset(&sc->sc_watchdog, hz, mwl_watchdog, sc);
+	if (sc->sc_tx_timer == 0 || --sc->sc_tx_timer > 0)
+		return;
+
+	ifp = sc->sc_ifp;
 	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) && !sc->sc_invalid) {
 		if (mwl_hal_setkeepalive(sc->sc_mh))
 			if_printf(ifp, "transmit timeout (firmware hung?)\n");
diff --git a/sys/dev/mwl/if_mwlvar.h b/sys/dev/mwl/if_mwlvar.h
index d69285d17de..a75cedaec9d 100644
--- a/sys/dev/mwl/if_mwlvar.h
+++ b/sys/dev/mwl/if_mwlvar.h
@@ -255,6 +255,8 @@ struct mwl_softc {
 	bus_space_tag_t		sc_io1t;
 	struct mtx		sc_mtx;		/* master lock (recursive) */
 	struct taskqueue	*sc_tq;		/* private task queue */
+	struct callout	sc_watchdog;
+	int			sc_tx_timer;
 	unsigned int		sc_invalid : 1,	/* disable hardware accesses */
 				sc_recvsetup:1,	/* recv setup */
 				sc_csapending:1,/* 11h channel switch pending */
diff --git a/sys/dev/mxge/if_mxge.c b/sys/dev/mxge/if_mxge.c
index 80d4840ef78..d424b49fd8f 100644
--- a/sys/dev/mxge/if_mxge.c
+++ b/sys/dev/mxge/if_mxge.c
@@ -3956,9 +3956,7 @@ mxge_tick(void *arg)
 	uint16_t cmd;
 
 	ticks = mxge_ticks;
-	mtx_lock(&sc->driver_mtx);
 	running = sc->ifp->if_drv_flags & IFF_DRV_RUNNING;
-	mtx_unlock(&sc->driver_mtx);
 	if (running) {
 		/* aggregate stats from different slices */
 		pkts = mxge_update_stats(sc);
diff --git a/sys/dev/my/if_my.c b/sys/dev/my/if_my.c
index 8bfeb34887b..99f6071ba20 100644
--- a/sys/dev/my/if_my.c
+++ b/sys/dev/my/if_my.c
@@ -126,7 +126,8 @@ static int      my_ioctl(struct ifnet *, u_long, caddr_t);
 static void     my_init(void *);
 static void     my_init_locked(struct my_softc *);
 static void     my_stop(struct my_softc *);
-static void     my_watchdog(struct ifnet *);
+static void     my_autoneg_timeout(void *);
+static void     my_watchdog(void *);
 static int      my_shutdown(device_t);
 static int      my_ifmedia_upd(struct ifnet *);
 static void     my_ifmedia_sts(struct ifnet *, struct ifmediareq *);
@@ -382,6 +383,15 @@ my_autoneg_xmit(struct my_softc * sc)
 	return;
 }
 
+static void
+my_autoneg_timeout(void *arg)
+{
+	struct my_softc *sc;
+
+	sc = arg;
+	MY_LOCK_ASSERT(sc);
+	my_autoneg_mii(sc, MY_FLAG_DELAYTIMEO, 1);
+}
 
 /*
  * Invoke autonegotiation on a PHY.
@@ -439,12 +449,13 @@ my_autoneg_mii(struct my_softc * sc, int flag, int verbose)
 			return;
 		}
 		my_autoneg_xmit(sc);
-		ifp->if_timer = 5;
+		callout_reset(&sc->my_autoneg_timer, hz * 5, my_autoneg_timeout,
+		    sc);
 		sc->my_autoneg = 1;
 		sc->my_want_auto = 0;
 		return;
 	case MY_FLAG_DELAYTIMEO:
-		ifp->if_timer = 0;
+		callout_stop(&sc->my_autoneg_timer);
 		sc->my_autoneg = 0;
 		break;
 	default:
@@ -661,7 +672,8 @@ my_setmode_mii(struct my_softc * sc, int media)
 	 */
 	if (sc->my_autoneg) {
 		device_printf(sc->my_dev, "canceling autoneg session\n");
-		ifp->if_timer = sc->my_autoneg = sc->my_want_auto = 0;
+		callout_stop(&sc->my_autoneg_timer);
+		sc->my_autoneg = sc->my_want_auto = 0;
 		bmcr = my_phy_readreg(sc, PHY_BMCR);
 		bmcr &= ~PHY_BMCR_AUTONEGENBL;
 		my_phy_writereg(sc, PHY_BMCR, bmcr);
@@ -808,6 +820,8 @@ my_attach(device_t dev)
 	sc->my_dev = dev;
 	mtx_init(&sc->my_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
 	    MTX_DEF);
+	callout_init_mtx(&sc->my_autoneg_timer, &sc->my_mtx, 0);
+	callout_init_mtx(&sc->my_watchdog, &sc->my_mtx, 0);
 
 	/*
 	 * Map control/status registers.
@@ -886,7 +900,6 @@ my_attach(device_t dev)
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = my_ioctl;
 	ifp->if_start = my_start;
-	ifp->if_watchdog = my_watchdog;
 	ifp->if_init = my_init;
 	ifp->if_baudrate = 10000000;
 	IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN);
@@ -984,13 +997,15 @@ my_detach(device_t dev)
 	struct ifnet   *ifp;
 
 	sc = device_get_softc(dev);
+	ifp = sc->my_ifp;
+	ether_ifdetach(ifp);
 	MY_LOCK(sc);
 	my_stop(sc);
 	MY_UNLOCK(sc);
 	bus_teardown_intr(dev, sc->my_irq, sc->my_intrhand);
+	callout_drain(&sc->my_watchdog);
+	callout_drain(&sc->my_autoneg_timer);
 
-	ifp = sc->my_ifp;
-	ether_ifdetach(ifp);
 	if_free(ifp);
 	free(sc->my_ldata_ptr, M_DEVBUF);
 
@@ -1188,7 +1203,7 @@ my_txeof(struct my_softc * sc)
 	MY_LOCK_ASSERT(sc);
 	ifp = sc->my_ifp;
 	/* Clear the timeout timer. */
-	ifp->if_timer = 0;
+	sc->my_timer = 0;
 	if (sc->my_cdata.my_tx_head == NULL) {
 		return;
 	}
@@ -1240,7 +1255,7 @@ my_txeoc(struct my_softc * sc)
 
 	MY_LOCK_ASSERT(sc);
 	ifp = sc->my_ifp;
-	ifp->if_timer = 0;
+	sc->my_timer = 0;
 	if (sc->my_cdata.my_tx_head == NULL) {
 		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 		sc->my_cdata.my_tx_tail = NULL;
@@ -1249,7 +1264,7 @@ my_txeoc(struct my_softc * sc)
 	} else {
 		if (MY_TXOWN(sc->my_cdata.my_tx_head) == MY_UNSENT) {
 			MY_TXOWN(sc->my_cdata.my_tx_head) = MY_OWNByNIC;
-			ifp->if_timer = 5;
+			sc->my_timer = 5;
 			CSR_WRITE_4(sc, MY_TXPDR, 0xFFFFFFFF);
 		}
 	}
@@ -1455,7 +1470,7 @@ my_start_locked(struct ifnet * ifp)
 	/*
 	 * Set a timeout in case the chip goes out to lunch.
 	 */
-	ifp->if_timer = 5;
+	sc->my_timer = 5;
 	return;
 }
 
@@ -1555,6 +1570,8 @@ my_init_locked(struct my_softc *sc)
 		my_phy_writereg(sc, PHY_BMCR, phy_bmcr);
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
+
+	callout_reset(&sc->my_watchdog, hz, my_watchdog, sc);
 	return;
 }
 
@@ -1680,17 +1697,18 @@ my_ioctl(struct ifnet * ifp, u_long command, caddr_t data)
 }
 
 static void
-my_watchdog(struct ifnet * ifp)
+my_watchdog(void *arg)
 {
 	struct my_softc *sc;
+	struct ifnet *ifp;
 
-	sc = ifp->if_softc;
-	MY_LOCK(sc);
-	if (sc->my_autoneg) {
-		my_autoneg_mii(sc, MY_FLAG_DELAYTIMEO, 1);
-		MY_UNLOCK(sc);
+	sc = arg;
+	MY_LOCK_ASSERT(sc);
+	callout_reset(&sc->my_watchdog, hz, my_watchdog, sc);
+	if (sc->my_timer == 0 || --sc->my_timer > 0)
 		return;
-	}
+
+	ifp = sc->my_ifp;
 	ifp->if_oerrors++;
 	if_printf(ifp, "watchdog timeout\n");
 	if (!(my_phy_readreg(sc, PHY_BMSR) & PHY_BMSR_LINKSTAT))
@@ -1700,8 +1718,6 @@ my_watchdog(struct ifnet * ifp)
 	my_init_locked(sc);
 	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		my_start_locked(ifp);
-	MY_UNLOCK(sc);
-	return;
 }
 
 
@@ -1716,7 +1732,9 @@ my_stop(struct my_softc * sc)
 
 	MY_LOCK_ASSERT(sc);
 	ifp = sc->my_ifp;
-	ifp->if_timer = 0;
+
+	callout_stop(&sc->my_autoneg_timer);
+	callout_stop(&sc->my_watchdog);
 
 	MY_CLRBIT(sc, MY_TCRRCR, (MY_RE | MY_TE));
 	CSR_WRITE_4(sc, MY_IMR, 0x00000000);
diff --git a/sys/dev/my/if_myreg.h b/sys/dev/my/if_myreg.h
index 71eb3f37bd5..f7870319fe3 100644
--- a/sys/dev/my/if_myreg.h
+++ b/sys/dev/my/if_myreg.h
@@ -371,8 +371,10 @@ struct my_softc {
         struct my_chain_data    my_cdata;
 	device_t		my_miibus;
 /* Add by Surfer 2001/12/2 */
-	struct mtx		my_mtx;	
-
+	struct mtx		my_mtx;
+	struct callout		my_autoneg_timer;
+	struct callout		my_watchdog;
+	int			my_timer;
 };
 
 /* Add by Surfer 2001/12/2 */
diff --git a/sys/dev/nve/if_nve.c b/sys/dev/nve/if_nve.c
index a987c6c89ac..121389cfe47 100644
--- a/sys/dev/nve/if_nve.c
+++ b/sys/dev/nve/if_nve.c
@@ -140,7 +140,7 @@ static int      nve_ioctl(struct ifnet *, u_long, caddr_t);
 static void     nve_intr(void *);
 static void     nve_tick(void *);
 static void     nve_setmulti(struct nve_softc *);
-static void     nve_watchdog(struct ifnet *);
+static void     nve_watchdog(struct nve_softc *);
 static void     nve_update_stats(struct nve_softc *);
 
 static int      nve_ifmedia_upd(struct ifnet *);
@@ -540,8 +540,6 @@ nve_attach(device_t dev)
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = nve_ioctl;
 	ifp->if_start = nve_ifstart;
-	ifp->if_watchdog = nve_watchdog;
-	ifp->if_timer = 0;
 	ifp->if_init = nve_init;
 	ifp->if_mtu = ETHERMTU;
 	ifp->if_baudrate = IF_Mbps(100);
@@ -709,7 +707,7 @@ nve_stop(struct nve_softc *sc)
 	DEBUGOUT(NVE_DEBUG_RUNNING, "nve: nve_stop - entry\n");
 
 	ifp = sc->ifp;
-	ifp->if_timer = 0;
+	sc->tx_timer = 0;
 
 	/* Cancel tick timer */
 	callout_stop(&sc->stat_callout);
@@ -983,7 +981,7 @@ nve_ifstart_locked(struct ifnet *ifp)
 			return;
 		}
 		/* Set watchdog timer. */
-		ifp->if_timer = 8;
+		sc->tx_timer = 8;
 
 		/* Copy packet to BPF tap */
 		BPF_MTAP(ifp, m0);
@@ -1095,7 +1093,7 @@ nve_intr(void *arg)
 
 	/* If no pending packets we don't need a timeout */
 	if (sc->pending_txs == 0)
-		sc->ifp->if_timer = 0;
+		sc->tx_timer = 0;
 	NVE_UNLOCK(sc);
 
 	DEBUGOUT(NVE_DEBUG_INTERRUPT, "nve: nve_intr - exit\n");
@@ -1236,6 +1234,9 @@ nve_tick(void *xsc)
 		if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 			nve_ifstart_locked(ifp);
 	}
+
+	if (sc->tx_timer > 0 && --sc->tx_timer == 0)
+		nve_watchdog(sc);
 	callout_reset(&sc->stat_callout, hz, nve_tick, sc);
 
 	return;
@@ -1307,12 +1308,13 @@ nve_miibus_writereg(device_t dev, int phy, int reg, int data)
 
 /* Watchdog timer to prevent PHY lockups */
 static void
-nve_watchdog(struct ifnet *ifp)
+nve_watchdog(struct nve_softc *sc)
 {
-	struct nve_softc *sc = ifp->if_softc;
+	struct ifnet *ifp;
 	int pending_txs_start;
 
-	NVE_LOCK(sc);
+	NVE_LOCK_ASSERT(sc);
+	ifp = sc->ifp;
 
 	/*
 	 * The nvidia driver blob defers tx completion notifications.
@@ -1328,24 +1330,18 @@ nve_watchdog(struct ifnet *ifp)
 	sc->hwapi->pfnDisableInterrupts(sc->hwapi->pADCX);
 	sc->hwapi->pfnHandleInterrupt(sc->hwapi->pADCX);
 	sc->hwapi->pfnEnableInterrupts(sc->hwapi->pADCX);
-	if (sc->pending_txs < pending_txs_start) {
-		NVE_UNLOCK(sc);
+	if (sc->pending_txs < pending_txs_start)
 		return;
-	}
 
 	device_printf(sc->dev, "device timeout (%d)\n", sc->pending_txs);
 
 	sc->tx_errors++;
 
 	nve_stop(sc);
-	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 	nve_init_locked(sc);
 
 	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		nve_ifstart_locked(ifp);
-	NVE_UNLOCK(sc);
-
-	return;
 }
 
 /* --- Start of NVOSAPI interface --- */
diff --git a/sys/dev/nve/if_nvereg.h b/sys/dev/nve/if_nvereg.h
index c3c4edc805d..b6346690d1a 100644
--- a/sys/dev/nve/if_nvereg.h
+++ b/sys/dev/nve/if_nvereg.h
@@ -138,6 +138,7 @@ struct nve_softc {
 	device_t miibus;
 	device_t dev;
 	struct callout stat_callout;
+	int tx_timer;
 
 	void *sc_ih;
 	bus_space_tag_t sc_st;
diff --git a/sys/dev/nxge/if_nxge.c b/sys/dev/nxge/if_nxge.c
index 129ccb5576f..c86d7b61bad 100644
--- a/sys/dev/nxge/if_nxge.c
+++ b/sys/dev/nxge/if_nxge.c
@@ -2943,10 +2943,8 @@ xge_flush_txds(xge_hal_channel_h channelh)
 	xge_lldev_t *lldev = xge_hal_channel_userdata(channelh);
 	xge_hal_dtr_h tx_dtr;
 	xge_tx_priv_t *tx_priv;
-	struct ifnet *ifnetp = lldev->ifnetp;
 	u8 t_code;
 
-	ifnetp->if_timer = 0;
 	while(xge_hal_fifo_dtr_next_completed(channelh, &tx_dtr, &t_code)
 	    == XGE_HAL_OK) {
 	    XGE_DRV_STATS(tx_desc_compl);
@@ -3006,7 +3004,7 @@ xge_send_locked(struct ifnet *ifnetp, int qindex)
 
 	/* If device is not initialized, return */
 	if((!lldev->initialized) || (!(ifnetp->if_drv_flags & IFF_DRV_RUNNING)))
-	    goto _exit;
+	    return;
 
 	XGE_DRV_STATS(tx_calls);
 
@@ -3016,7 +3014,10 @@ xge_send_locked(struct ifnet *ifnetp, int qindex)
 	 */
 	for(;;) {
 	    IF_DEQUEUE(&ifnetp->if_snd, m_head);
-	    if(m_head == NULL) break;
+	    if (m_head == NULL) {
+		ifnetp->if_drv_flags &= ~(IFF_DRV_OACTIVE);
+		return;
+	    }
 
 	    for(m_buf = m_head; m_buf != NULL; m_buf = m_buf->m_next) {
 	        if(m_buf->m_len) count += 1;
@@ -3033,7 +3034,7 @@ xge_send_locked(struct ifnet *ifnetp, int qindex)
 	    if(status != XGE_HAL_OK) {
 	        XGE_DRV_STATS(tx_no_txd);
 	        xge_flush_txds(channelh);
-	        goto _exit1;
+		break;
 	    }
 
 	    vlan_tag =
@@ -3054,7 +3055,7 @@ xge_send_locked(struct ifnet *ifnetp, int qindex)
 	        ll_tx_priv->dma_map, m_head, segs, &nsegs, BUS_DMA_NOWAIT)) {
 	        xge_trace(XGE_TRACE, "DMA map load failed");
 	        XGE_DRV_STATS(tx_map_fail);
-	        goto _exit1;
+		break;
 	    }
 
 	    if(lldev->driver_stats.tx_max_frags < nsegs)
@@ -3093,9 +3094,7 @@ xge_send_locked(struct ifnet *ifnetp, int qindex)
 	     * listener so that we can use tools like tcpdump */
 	    ETHER_BPF_MTAP(ifnetp, m_head);
 	}
-	ifnetp->if_drv_flags &= ~(IFF_DRV_OACTIVE);
-	goto _exit;
-_exit1:
+
 	/* Prepend the packet back to queue */
 	IF_PREPEND(&ifnetp->if_snd, m_head);
 	ifnetp->if_drv_flags |= IFF_DRV_OACTIVE;
@@ -3103,9 +3102,6 @@ _exit1:
 	xge_queue_produce_context(xge_hal_device_queue(lldev->devh),
 	    XGE_LL_EVENT_TRY_XMIT_AGAIN, lldev->devh);
 	XGE_DRV_STATS(tx_again);
-
-_exit:
-	ifnetp->if_timer = 15;
 }
 
 /**
@@ -3269,8 +3265,6 @@ xge_tx_compl(xge_hal_channel_h channelh,
 
 	XGE_DRV_STATS(tx_completions);
 
-	ifnetp->if_timer = 0;
-
 	/*
 	 * For each completed descriptor: Get private structure, free buffer,
 	 * do unmapping, and free descriptor
diff --git a/sys/dev/pccard/card_if.m b/sys/dev/pccard/card_if.m
index 26723c18ae3..606af16b3e5 100644
--- a/sys/dev/pccard/card_if.m
+++ b/sys/dev/pccard/card_if.m
@@ -35,7 +35,7 @@ INTERFACE card;
 #
 # Companion interface for pccard.  We need to set attributes for memory
 # and i/o port mappings (as well as other types of attributes) that have
-# a well defined meaning inside the pccard/cardbus system.  The bus
+# a well defined meaning inside the PC Card/CardBus system.  The bus
 # methods are inadequate for this because this must be done at the time the
 # resources are set for the device, which predates their activation.  Also,
 # the driver activating the resources doesn't necessarily know or need to know
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
index 8922aba4018..2402de16289 100644
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -80,6 +80,8 @@ static pci_addr_t	pci_mapbase(uint64_t mapreg);
 static const char	*pci_maptype(uint64_t mapreg);
 static int		pci_mapsize(uint64_t testval);
 static int		pci_maprange(uint64_t mapreg);
+static pci_addr_t	pci_rombase(uint64_t mapreg);
+static int		pci_romsize(uint64_t testval);
 static void		pci_fixancient(pcicfgregs *cfg);
 static int		pci_printf(pcicfgregs *cfg, const char *fmt, ...);
 
@@ -142,7 +144,7 @@ static device_method_t pci_methods[] = {
 	DEVMETHOD(bus_alloc_resource,	pci_alloc_resource),
 	DEVMETHOD(bus_release_resource,	bus_generic_rl_release_resource),
 	DEVMETHOD(bus_activate_resource, pci_activate_resource),
-	DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
+	DEVMETHOD(bus_deactivate_resource, pci_deactivate_resource),
 	DEVMETHOD(bus_child_pnpinfo_str, pci_child_pnpinfo_str_method),
 	DEVMETHOD(bus_child_location_str, pci_child_location_str_method),
 
@@ -253,7 +255,7 @@ disable.  1 means conservatively place devices into D3 state.  2 means\n\
 agressively place devices into D3 state.  3 means put absolutely everything\n\
 in D3 state.");
 
-static int pci_do_power_resume = 1;
+int pci_do_power_resume = 1;
 TUNABLE_INT("hw.pci.do_power_resume", &pci_do_power_resume);
 SYSCTL_INT(_hw_pci, OID_AUTO, do_power_resume, CTLFLAG_RW,
     &pci_do_power_resume, 1,
@@ -388,6 +390,34 @@ pci_mapsize(uint64_t testval)
 	return (ln2size);
 }
 
+/* return base address of device ROM */
+
+static pci_addr_t
+pci_rombase(uint64_t mapreg)
+{
+
+	return (mapreg & PCIM_BIOS_ADDR_MASK);
+}
+
+/* return log2 of map size decided for device ROM */
+
+static int
+pci_romsize(uint64_t testval)
+{
+	int ln2size;
+
+	testval = pci_rombase(testval);
+	ln2size = 0;
+	if (testval != 0) {
+		while ((testval & 1) == 0)
+		{
+			ln2size++;
+			testval >>= 1;
+		}
+	}
+	return (ln2size);
+}
+	
 /* return log2 of address range supported by map register */
 
 static int
@@ -2280,6 +2310,21 @@ pci_read_bar(device_t dev, int reg, pci_addr_t *mapp, pci_addr_t *testvalp)
 	int ln2range;
 	uint16_t cmd;
 
+	/*
+	 * The device ROM BAR is special.  It is always a 32-bit
+	 * memory BAR.  Bit 0 is special and should not be set when
+	 * sizing the BAR.
+	 */
+	if (reg == PCIR_BIOS) {
+		map = pci_read_config(dev, reg, 4);
+		pci_write_config(dev, reg, 0xfffffffe, 4);
+		testval = pci_read_config(dev, reg, 4);
+		pci_write_config(dev, reg, map, 4);
+		*mapp = map;
+		*testvalp = testval;
+		return;
+	}
+
 	map = pci_read_config(dev, reg, 4);
 	ln2range = pci_maprange(map);
 	if (ln2range == 64)
@@ -2327,6 +2372,10 @@ pci_write_bar(device_t dev, int reg, pci_addr_t base)
 	int ln2range;
 
 	map = pci_read_config(dev, reg, 4);
+
+	/* The device ROM BAR is always 32-bits. */
+	if (reg == PCIR_BIOS)
+		return;
 	ln2range = pci_maprange(map);
 	pci_write_config(dev, reg, base, 4);
 	if (ln2range == 64)
@@ -2451,7 +2500,7 @@ pci_add_map(device_t bus, device_t dev, int reg, struct resource_list *rl,
 	 * driver for this device will later inherit this resource in
 	 * pci_alloc_resource().
 	 */
-	res = resource_list_alloc(rl, bus, dev, type, ®, start, end, count,
+	res = resource_list_reserve(rl, bus, dev, type, ®, start, end, count,
 	    prefetch ? RF_PREFETCHABLE : 0);
 	if (res == NULL) {
 		/*
@@ -2462,10 +2511,8 @@ pci_add_map(device_t bus, device_t dev, int reg, struct resource_list *rl,
 		 */
 		resource_list_delete(rl, type, reg);
 		start = 0;
-	} else {
+	} else
 		start = rman_get_start(res);
-		rman_set_device(res, bus);
-	}
 	pci_write_bar(dev, reg, start);
 	return (barlen);
 }
@@ -2504,14 +2551,12 @@ pci_ata_maps(device_t bus, device_t dev, struct resource_list *rl, int force,
 	} else {
 		rid = PCIR_BAR(0);
 		resource_list_add(rl, type, rid, 0x1f0, 0x1f7, 8);
-		r = resource_list_alloc(rl, bus, dev, type, &rid, 0x1f0, 0x1f7,
-		    8, 0);
-		rman_set_device(r, bus);
+		r = resource_list_reserve(rl, bus, dev, type, &rid, 0x1f0,
+		    0x1f7, 8, 0);
 		rid = PCIR_BAR(1);
 		resource_list_add(rl, type, rid, 0x3f6, 0x3f6, 1);
-		r = resource_list_alloc(rl, bus, dev, type, &rid, 0x3f6, 0x3f6,
-		    1, 0);
-		rman_set_device(r, bus);
+		r = resource_list_reserve(rl, bus, dev, type, &rid, 0x3f6,
+		    0x3f6, 1, 0);
 	}
 	if (progif & PCIP_STORAGE_IDE_MODESEC) {
 		pci_add_map(bus, dev, PCIR_BAR(2), rl, force,
@@ -2521,14 +2566,12 @@ pci_ata_maps(device_t bus, device_t dev, struct resource_list *rl, int force,
 	} else {
 		rid = PCIR_BAR(2);
 		resource_list_add(rl, type, rid, 0x170, 0x177, 8);
-		r = resource_list_alloc(rl, bus, dev, type, &rid, 0x170, 0x177,
-		    8, 0);
-		rman_set_device(r, bus);
+		r = resource_list_reserve(rl, bus, dev, type, &rid, 0x170,
+		    0x177, 8, 0);
 		rid = PCIR_BAR(3);
 		resource_list_add(rl, type, rid, 0x376, 0x376, 1);
-		r = resource_list_alloc(rl, bus, dev, type, &rid, 0x376, 0x376,
-		    1, 0);
-		rman_set_device(r, bus);
+		r = resource_list_reserve(rl, bus, dev, type, &rid, 0x376,
+		    0x376, 1, 0);
 	}
 	pci_add_map(bus, dev, PCIR_BAR(4), rl, force,
 	    prefetchmask & (1 << 4));
@@ -2614,6 +2657,8 @@ ohci_early_takeover(device_t self)
 				    "SMM does not respond, resetting\n");
 			bus_write_4(res, OHCI_CONTROL, OHCI_HCFS_RESET);
 		}
+		/* Disable interrupts */
+		bus_write_4(res, OHCI_INTERRUPT_DISABLE, OHCI_ALL_INTRS);
 	}
 
 	bus_release_resource(self, SYS_RES_MEMORY, rid, res);
@@ -2623,6 +2668,9 @@ ohci_early_takeover(device_t self)
 static void
 uhci_early_takeover(device_t self)
 {
+	struct resource *res;
+	int rid;
+
 	/*
 	 * Set the PIRQD enable bit and switch off all the others. We don't
 	 * want legacy support to interfere with us XXX Does this also mean
@@ -2630,6 +2678,14 @@ uhci_early_takeover(device_t self)
 	 * to the ports of the root hub?
 	 */
 	pci_write_config(self, PCI_LEGSUP, PCI_LEGSUP_USBPIRQDEN, 2);
+
+	/* Disable interrupts */
+	rid = PCI_UHCI_BASE_REG;
+	res = bus_alloc_resource_any(self, SYS_RES_IOPORT, &rid, RF_ACTIVE);
+	if (res != NULL) {
+		bus_write_2(res, UHCI_INTR, 0);
+		bus_release_resource(self, SYS_RES_IOPORT, rid, res);
+	}
 }
 
 /* Perform early EHCI takeover from SMM. */
@@ -2641,6 +2697,7 @@ ehci_early_takeover(device_t self)
 	uint32_t eec;
 	uint8_t eecp;
 	uint8_t bios_sem;
+	uint8_t offs;
 	int rid;
 	int i;
 
@@ -2680,6 +2737,9 @@ ehci_early_takeover(device_t self)
 				printf("ehci early: "
 				    "SMM does not respond\n");
 		}
+		/* Disable interrupts */
+		offs = bus_read_1(res, EHCI_CAPLENGTH);
+		bus_write_4(res, offs + EHCI_USBINTR, 0);
 	}
 	bus_release_resource(self, SYS_RES_MEMORY, rid, res);
 }
@@ -3547,7 +3607,7 @@ DB_SHOW_COMMAND(pciregs, db_pci_dump)
 #endif /* DDB */
 
 static struct resource *
-pci_alloc_map(device_t dev, device_t child, int type, int *rid,
+pci_reserve_map(device_t dev, device_t child, int type, int *rid,
     u_long start, u_long end, u_long count, u_int flags)
 {
 	struct pci_devinfo *dinfo = device_get_ivars(child);
@@ -3568,10 +3628,11 @@ pci_alloc_map(device_t dev, device_t child, int type, int *rid,
 	pci_read_bar(child, *rid, &map, &testval);
 
 	/* Ignore a BAR with a base of 0. */
-	if (pci_mapbase(testval) == 0)
+	if ((*rid == PCIR_BIOS && pci_rombase(testval) == 0) ||
+	    pci_mapbase(testval) == 0)
 		goto out;
 
-	if (PCI_BAR_MEM(testval)) {
+	if (PCI_BAR_MEM(testval) || *rid == PCIR_BIOS) {
 		if (type != SYS_RES_MEMORY) {
 			if (bootverbose)
 				device_printf(dev,
@@ -3597,8 +3658,13 @@ pci_alloc_map(device_t dev, device_t child, int type, int *rid,
 	 * actually uses and we would otherwise have a
 	 * situation where we might allocate the excess to
 	 * another driver, which won't work.
+	 *
+	 * Device ROM BARs use a different mask value.
 	 */
-	mapsize = pci_mapsize(testval);
+	if (*rid == PCIR_BIOS)
+		mapsize = pci_romsize(testval);
+	else
+		mapsize = pci_mapsize(testval);
 	count = 1UL << mapsize;
 	if (RF_ALIGNMENT(flags) < mapsize)
 		flags = (flags & ~RF_ALIGNMENT_MASK) | RF_ALIGNMENT_LOG2(mapsize);
@@ -3617,15 +3683,15 @@ pci_alloc_map(device_t dev, device_t child, int type, int *rid,
 		    count, *rid, type, start, end);
 		goto out;
 	}
-	rman_set_device(res, dev);
 	resource_list_add(rl, type, *rid, start, end, count);
 	rle = resource_list_find(rl, type, *rid);
 	if (rle == NULL)
-		panic("pci_alloc_map: unexpectedly can't find resource.");
+		panic("pci_reserve_map: unexpectedly can't find resource.");
 	rle->res = res;
 	rle->start = rman_get_start(res);
 	rle->end = rman_get_end(res);
 	rle->count = count;
+	rle->flags = RLE_RESERVED;
 	if (bootverbose)
 		device_printf(child,
 		    "Lazy allocation of %#lx bytes rid %#x type %d at %#lx\n",
@@ -3675,71 +3741,19 @@ pci_alloc_resource(device_t dev, device_t child, int type, int *rid,
 		break;
 	case SYS_RES_IOPORT:
 	case SYS_RES_MEMORY:
-		/* Allocate resources for this BAR if needed. */
+		/* Reserve resources for this BAR if needed. */
 		rle = resource_list_find(rl, type, *rid);
 		if (rle == NULL) {
-			res = pci_alloc_map(dev, child, type, rid, start, end,
+			res = pci_reserve_map(dev, child, type, rid, start, end,
 			    count, flags);
 			if (res == NULL)
 				return (NULL);
-			rle = resource_list_find(rl, type, *rid);
-		}
-
-		/*
-		 * If the resource belongs to the bus, then give it to
-		 * the child.  We need to activate it if requested
-		 * since the bus always allocates inactive resources.
-		 */
-		if (rle != NULL && rle->res != NULL &&
-		    rman_get_device(rle->res) == dev) {
-			if (bootverbose)
-				device_printf(child,
-			    "Reserved %#lx bytes for rid %#x type %d at %#lx\n",
-				    rman_get_size(rle->res), *rid, type,
-				    rman_get_start(rle->res));
-			rman_set_device(rle->res, child);
-			if ((flags & RF_ACTIVE) &&
-			    bus_activate_resource(child, type, *rid,
-			    rle->res) != 0)
-				return (NULL);
-			return (rle->res);
 		}
 	}
 	return (resource_list_alloc(rl, dev, child, type, rid,
 	    start, end, count, flags));
 }
 
-int
-pci_release_resource(device_t dev, device_t child, int type, int rid,
-    struct resource *r)
-{
-	int error;
-
-	if (device_get_parent(child) != dev)
-		return (BUS_RELEASE_RESOURCE(device_get_parent(dev), child,
-		    type, rid, r));
-
-	/*
-	 * For BARs we don't actually want to release the resource.
-	 * Instead, we deactivate the resource if needed and then give
-	 * ownership of the BAR back to the bus.
-	 */
-	switch (type) {
-	case SYS_RES_IOPORT:
-	case SYS_RES_MEMORY:
-		if (rman_get_device(r) != child)
-			return (EINVAL);
-		if (rman_get_flags(r) & RF_ACTIVE) {
-			error = bus_deactivate_resource(child, type, rid, r);
-			if (error)
-				return (error);
-		}
-		rman_set_device(r, dev);
-		return (0);
-	}
-	return (bus_generic_rl_release_resource(dev, child, type, rid, r));
-}
-
 int
 pci_activate_resource(device_t dev, device_t child, int type, int rid,
     struct resource *r)
@@ -3752,6 +3766,10 @@ pci_activate_resource(device_t dev, device_t child, int type, int rid,
 
 	/* Enable decoding in the command register when activating BARs. */
 	if (device_get_parent(child) == dev) {
+		/* Device ROMs need their decoding explicitly enabled. */
+		if (rid == PCIR_BIOS)
+			pci_write_config(child, rid, rman_get_start(r) |
+			    PCIM_BIOS_ENABLE, 4);
 		switch (type) {
 		case SYS_RES_IOPORT:
 		case SYS_RES_MEMORY:
@@ -3762,6 +3780,62 @@ pci_activate_resource(device_t dev, device_t child, int type, int rid,
 	return (error);
 }
 
+int
+pci_deactivate_resource(device_t dev, device_t child, int type,
+    int rid, struct resource *r)
+{
+	int error;
+
+	error = bus_generic_deactivate_resource(dev, child, type, rid, r);
+	if (error)
+		return (error);
+
+	/* Disable decoding for device ROMs. */
+	if (rid == PCIR_BIOS)
+		pci_write_config(child, rid, rman_get_start(r), 4);
+	return (0);
+}
+
+void
+pci_delete_child(device_t dev, device_t child)
+{
+	struct resource_list_entry *rle;
+	struct resource_list *rl;
+	struct pci_devinfo *dinfo;
+
+	dinfo = device_get_ivars(child);
+	rl = &dinfo->resources;
+
+	if (device_is_attached(child))
+		device_detach(child);
+
+	/* Turn off access to resources we're about to free */
+	pci_write_config(child, PCIR_COMMAND, pci_read_config(child,
+	    PCIR_COMMAND, 2) & ~(PCIM_CMD_MEMEN | PCIM_CMD_PORTEN), 2);
+
+	/* Free all allocated resources */
+	STAILQ_FOREACH(rle, rl, link) {
+		if (rle->res) {
+			if (rman_get_flags(rle->res) & RF_ACTIVE ||
+			    resource_list_busy(rl, rle->type, rle->rid)) {
+				pci_printf(&dinfo->cfg,
+				    "Resource still owned, oops. "
+				    "(type=%d, rid=%d, addr=%lx)\n",
+				    rle->type, rle->rid,
+				    rman_get_start(rle->res));
+				bus_release_resource(child, rle->type, rle->rid,
+				    rle->res);
+			}
+			resource_list_unreserve(rl, dev, child, rle->type,
+			    rle->rid);
+		}
+	}
+	resource_list_free(rl);
+
+	device_delete_child(dev, child);
+	pci_freecfg(dinfo);
+}
+
 void
 pci_delete_resource(device_t dev, device_t child, int type, int rid)
 {
@@ -3779,13 +3853,12 @@ pci_delete_resource(device_t dev, device_t child, int type, int rid)
 		return;
 
 	if (rle->res) {
-		if (rman_get_device(rle->res) != dev ||
-		    rman_get_flags(rle->res) & RF_ACTIVE) {
+		if (rman_get_flags(rle->res) & RF_ACTIVE ||
+		    resource_list_busy(rl, type, rid)) {
 			device_printf(dev, "delete_resource: "
 			    "Resource still owned by child, oops. "
 			    "(type=%d, rid=%d, addr=%lx)\n",
-			    rle->type, rle->rid,
-			    rman_get_start(rle->res));
+			    type, rid, rman_get_start(rle->res));
 			return;
 		}
 
@@ -3801,7 +3874,7 @@ pci_delete_resource(device_t dev, device_t child, int type, int rid)
 			break;
 		}
 #endif
-		bus_release_resource(dev, type, rid, rle->res);
+		resource_list_unreserve(rl, dev, child, type, rid);
 	}
 	resource_list_delete(rl, type, rid);
 }
diff --git a/sys/dev/pci/pci_pci.c b/sys/dev/pci/pci_pci.c
index 15cad92484d..996d2745527 100644
--- a/sys/dev/pci/pci_pci.c
+++ b/sys/dev/pci/pci_pci.c
@@ -52,7 +52,18 @@ __FBSDID("$FreeBSD$");
 
 #include "pcib_if.h"
 
+#ifdef __HAVE_ACPI
+#include 
+#include "acpi_if.h"
+#else
+#define	ACPI_PWR_FOR_SLEEP(x, y, z)
+#endif
+
+extern int		pci_do_power_resume;
+
 static int		pcib_probe(device_t dev);
+static int		pcib_suspend(device_t dev);
+static int		pcib_resume(device_t dev);
 
 static device_method_t pcib_methods[] = {
     /* Device interface */
@@ -60,8 +71,8 @@ static device_method_t pcib_methods[] = {
     DEVMETHOD(device_attach,		pcib_attach),
     DEVMETHOD(device_detach,		bus_generic_detach),
     DEVMETHOD(device_shutdown,		bus_generic_shutdown),
-    DEVMETHOD(device_suspend,		bus_generic_suspend),
-    DEVMETHOD(device_resume,		bus_generic_resume),
+    DEVMETHOD(device_suspend,		pcib_suspend),
+    DEVMETHOD(device_resume,		pcib_resume),
 
     /* Bus interface */
     DEVMETHOD(bus_print_child,		bus_generic_print_child),
@@ -120,6 +131,154 @@ pcib_is_io_open(struct pcib_softc *sc)
 	return (sc->iobase > 0 && sc->iobase < sc->iolimit);
 }
 
+/*
+ * Get current I/O decode.
+ */
+static void
+pcib_get_io_decode(struct pcib_softc *sc)
+{
+	device_t	dev;
+	uint32_t	iolow;
+
+	dev = sc->dev;
+
+	iolow = pci_read_config(dev, PCIR_IOBASEL_1, 1);
+	if ((iolow & PCIM_BRIO_MASK) == PCIM_BRIO_32)
+		sc->iobase = PCI_PPBIOBASE(
+		    pci_read_config(dev, PCIR_IOBASEH_1, 2), iolow);
+	else
+		sc->iobase = PCI_PPBIOBASE(0, iolow);
+
+	iolow = pci_read_config(dev, PCIR_IOLIMITL_1, 1);
+	if ((iolow & PCIM_BRIO_MASK) == PCIM_BRIO_32)
+		sc->iolimit = PCI_PPBIOLIMIT(
+		    pci_read_config(dev, PCIR_IOLIMITH_1, 2), iolow);
+	else
+		sc->iolimit = PCI_PPBIOLIMIT(0, iolow);
+}
+
+/*
+ * Get current memory decode.
+ */
+static void
+pcib_get_mem_decode(struct pcib_softc *sc)
+{
+	device_t	dev;
+	pci_addr_t	pmemlow;
+
+	dev = sc->dev;
+
+	sc->membase = PCI_PPBMEMBASE(0,
+	    pci_read_config(dev, PCIR_MEMBASE_1, 2));
+	sc->memlimit = PCI_PPBMEMLIMIT(0,
+	    pci_read_config(dev, PCIR_MEMLIMIT_1, 2));
+
+	pmemlow = pci_read_config(dev, PCIR_PMBASEL_1, 2);
+	if ((pmemlow & PCIM_BRPM_MASK) == PCIM_BRPM_64)
+		sc->pmembase = PCI_PPBMEMBASE(
+		    pci_read_config(dev, PCIR_PMBASEH_1, 4), pmemlow);
+	else
+		sc->pmembase = PCI_PPBMEMBASE(0, pmemlow);
+
+	pmemlow = pci_read_config(dev, PCIR_PMLIMITL_1, 2);
+	if ((pmemlow & PCIM_BRPM_MASK) == PCIM_BRPM_64)	
+		sc->pmemlimit = PCI_PPBMEMLIMIT(
+		    pci_read_config(dev, PCIR_PMLIMITH_1, 4), pmemlow);
+	else
+		sc->pmemlimit = PCI_PPBMEMLIMIT(0, pmemlow);
+}
+
+/*
+ * Restore previous I/O decode.
+ */
+static void
+pcib_set_io_decode(struct pcib_softc *sc)
+{
+	device_t	dev;
+	uint32_t	iohi;
+
+	dev = sc->dev;
+
+	iohi = sc->iobase >> 16;
+	if (iohi > 0)
+		pci_write_config(dev, PCIR_IOBASEH_1, iohi, 2);
+	pci_write_config(dev, PCIR_IOBASEL_1, sc->iobase >> 8, 1);
+
+	iohi = sc->iolimit >> 16;
+	if (iohi > 0)
+		pci_write_config(dev, PCIR_IOLIMITH_1, iohi, 2);
+	pci_write_config(dev, PCIR_IOLIMITL_1, sc->iolimit >> 8, 1);
+}
+
+/*
+ * Restore previous memory decode.
+ */
+static void
+pcib_set_mem_decode(struct pcib_softc *sc)
+{
+	device_t	dev;
+	pci_addr_t	pmemhi;
+
+	dev = sc->dev;
+
+	pci_write_config(dev, PCIR_MEMBASE_1, sc->membase >> 16, 2);
+	pci_write_config(dev, PCIR_MEMLIMIT_1, sc->memlimit >> 16, 2);
+
+	pmemhi = sc->pmembase >> 32;
+	if (pmemhi > 0)
+		pci_write_config(dev, PCIR_PMBASEH_1, pmemhi, 4);
+	pci_write_config(dev, PCIR_PMBASEL_1, sc->pmembase >> 16, 2);
+
+	pmemhi = sc->pmemlimit >> 32;
+	if (pmemhi > 0)
+		pci_write_config(dev, PCIR_PMLIMITH_1, pmemhi, 4);
+	pci_write_config(dev, PCIR_PMLIMITL_1, sc->pmemlimit >> 16, 2);
+}
+
+/*
+ * Get current bridge configuration.
+ */
+static void
+pcib_cfg_save(struct pcib_softc *sc)
+{
+	device_t	dev;
+
+	dev = sc->dev;
+
+	sc->command = pci_read_config(dev, PCIR_COMMAND, 2);
+	sc->pribus = pci_read_config(dev, PCIR_PRIBUS_1, 1);
+	sc->secbus = pci_read_config(dev, PCIR_SECBUS_1, 1);
+	sc->subbus = pci_read_config(dev, PCIR_SUBBUS_1, 1);
+	sc->bridgectl = pci_read_config(dev, PCIR_BRIDGECTL_1, 2);
+	sc->seclat = pci_read_config(dev, PCIR_SECLAT_1, 1);
+	if (sc->command & PCIM_CMD_PORTEN)
+		pcib_get_io_decode(sc);
+	if (sc->command & PCIM_CMD_MEMEN)
+		pcib_get_mem_decode(sc);
+}
+
+/*
+ * Restore previous bridge configuration.
+ */
+static void
+pcib_cfg_restore(struct pcib_softc *sc)
+{
+	device_t	dev;
+
+	dev = sc->dev;
+
+	pci_write_config(dev, PCIR_COMMAND, sc->command, 2);
+	pci_write_config(dev, PCIR_PRIBUS_1, sc->pribus, 1);
+	pci_write_config(dev, PCIR_SECBUS_1, sc->secbus, 1);
+	pci_write_config(dev, PCIR_SUBBUS_1, sc->subbus, 1);
+	pci_write_config(dev, PCIR_BRIDGECTL_1, sc->bridgectl, 2);
+	pci_write_config(dev, PCIR_SECLAT_1, sc->seclat, 1);
+	if (sc->command & PCIM_CMD_PORTEN)
+		pcib_set_io_decode(sc);
+	if (sc->command & PCIM_CMD_MEMEN)
+		pcib_set_mem_decode(sc);
+}
+
 /*
  * Generic device interface
  */
@@ -138,7 +297,6 @@ void
 pcib_attach_common(device_t dev)
 {
     struct pcib_softc	*sc;
-    uint8_t		iolow;
     struct sysctl_ctx_list *sctx;
     struct sysctl_oid	*soid;
 
@@ -148,14 +306,9 @@ pcib_attach_common(device_t dev)
     /*
      * Get current bridge configuration.
      */
-    sc->command   = pci_read_config(dev, PCIR_COMMAND, 1);
-    sc->domain    = pci_get_domain(dev);
-    sc->pribus    = pci_read_config(dev, PCIR_PRIBUS_1, 1);
-    sc->secbus    = pci_read_config(dev, PCIR_SECBUS_1, 1);
-    sc->subbus    = pci_read_config(dev, PCIR_SUBBUS_1, 1);
-    sc->secstat   = pci_read_config(dev, PCIR_SECSTAT_1, 2);
-    sc->bridgectl = pci_read_config(dev, PCIR_BRIDGECTL_1, 2);
-    sc->seclat    = pci_read_config(dev, PCIR_SECLAT_1, 1);
+    sc->domain = pci_get_domain(dev);
+    sc->secstat = pci_read_config(dev, PCIR_SECSTAT_1, 2);
+    pcib_cfg_save(sc);
 
     /*
      * Setup sysctl reporting nodes
@@ -171,51 +324,6 @@ pcib_attach_common(device_t dev)
     SYSCTL_ADD_UINT(sctx, SYSCTL_CHILDREN(soid), OID_AUTO, "subbus",
       CTLFLAG_RD, &sc->subbus, 0, "Subordinate bus number");
 
-    /*
-     * Determine current I/O decode.
-     */
-    if (sc->command & PCIM_CMD_PORTEN) {
-	iolow = pci_read_config(dev, PCIR_IOBASEL_1, 1);
-	if ((iolow & PCIM_BRIO_MASK) == PCIM_BRIO_32) {
-	    sc->iobase = PCI_PPBIOBASE(pci_read_config(dev, PCIR_IOBASEH_1, 2),
-				       pci_read_config(dev, PCIR_IOBASEL_1, 1));
-	} else {
-	    sc->iobase = PCI_PPBIOBASE(0, pci_read_config(dev, PCIR_IOBASEL_1, 1));
-	}
-
-	iolow = pci_read_config(dev, PCIR_IOLIMITL_1, 1);
-	if ((iolow & PCIM_BRIO_MASK) == PCIM_BRIO_32) {
-	    sc->iolimit = PCI_PPBIOLIMIT(pci_read_config(dev, PCIR_IOLIMITH_1, 2),
-					 pci_read_config(dev, PCIR_IOLIMITL_1, 1));
-	} else {
-	    sc->iolimit = PCI_PPBIOLIMIT(0, pci_read_config(dev, PCIR_IOLIMITL_1, 1));
-	}
-    }
-
-    /*
-     * Determine current memory decode.
-     */
-    if (sc->command & PCIM_CMD_MEMEN) {
-	sc->membase   = PCI_PPBMEMBASE(0, pci_read_config(dev, PCIR_MEMBASE_1, 2));
-	sc->memlimit  = PCI_PPBMEMLIMIT(0, pci_read_config(dev, PCIR_MEMLIMIT_1, 2));
-	iolow = pci_read_config(dev, PCIR_PMBASEL_1, 1);
-	if ((iolow & PCIM_BRPM_MASK) == PCIM_BRPM_64)
-	    sc->pmembase = PCI_PPBMEMBASE(
-		pci_read_config(dev, PCIR_PMBASEH_1, 4),
-		pci_read_config(dev, PCIR_PMBASEL_1, 2));
-	else
-	    sc->pmembase = PCI_PPBMEMBASE(0,
-		pci_read_config(dev, PCIR_PMBASEL_1, 2));
-	iolow = pci_read_config(dev, PCIR_PMLIMITL_1, 1);
-	if ((iolow & PCIM_BRPM_MASK) == PCIM_BRPM_64)	
-	    sc->pmemlimit = PCI_PPBMEMLIMIT(
-		pci_read_config(dev, PCIR_PMLIMITH_1, 4),
-		pci_read_config(dev, PCIR_PMLIMITL_1, 2));
-	else
-	    sc->pmemlimit = PCI_PPBMEMLIMIT(0,
-		pci_read_config(dev, PCIR_PMLIMITL_1, 2));
-    }
-
     /*
      * Quirk handling.
      */
@@ -336,6 +444,41 @@ pcib_attach(device_t dev)
     return(0);
 }
 
+int
+pcib_suspend(device_t dev)
+{
+	device_t	acpi_dev;
+	int		dstate, error;
+
+	pcib_cfg_save(device_get_softc(dev));
+	error = bus_generic_suspend(dev);
+	if (error == 0 && pci_do_power_resume) {
+		acpi_dev = devclass_get_device(devclass_find("acpi"), 0);
+		if (acpi_dev != NULL) {
+			dstate = PCI_POWERSTATE_D3;
+			ACPI_PWR_FOR_SLEEP(acpi_dev, dev, &dstate);
+			pci_set_powerstate(dev, dstate);
+		}
+	}
+	return (error);
+}
+
+int
+pcib_resume(device_t dev)
+{
+	device_t	acpi_dev;
+
+	if (pci_do_power_resume) {
+		acpi_dev = devclass_get_device(devclass_find("acpi"), 0);
+		if (acpi_dev != NULL) {
+			ACPI_PWR_FOR_SLEEP(acpi_dev, dev, NULL);
+			pci_set_powerstate(dev, PCI_POWERSTATE_D0);
+		}
+	}
+	pcib_cfg_restore(device_get_softc(dev));
+	return (bus_generic_resume(dev));
+}
+
 int
 pcib_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)
 {
diff --git a/sys/dev/pci/pci_private.h b/sys/dev/pci/pci_private.h
index e45afb7ac1c..2240b4f2c0d 100644
--- a/sys/dev/pci/pci_private.h
+++ b/sys/dev/pci/pci_private.h
@@ -43,6 +43,7 @@ void		pci_add_children(device_t dev, int domain, int busno,
 void		pci_add_child(device_t bus, struct pci_devinfo *dinfo);
 void		pci_add_resources(device_t bus, device_t dev, int force,
 		    uint32_t prefetchmask);
+void		pci_delete_child(device_t dev, device_t child);
 void		pci_driver_added(device_t dev, driver_t *driver);
 int		pci_print_child(device_t dev, device_t child);
 void		pci_probe_nomatch(device_t dev, device_t child);
@@ -82,10 +83,10 @@ int		pci_msix_count_method(device_t dev, device_t child);
 struct resource	*pci_alloc_resource(device_t dev, device_t child, 
 		    int type, int *rid, u_long start, u_long end, u_long count,
 		    u_int flags);
-int		pci_release_resource(device_t dev, device_t child, int type,
-		    int rid, struct resource *r);
 int		pci_activate_resource(device_t dev, device_t child, int type,
 		    int rid, struct resource *r);
+int		pci_deactivate_resource(device_t dev, device_t child, int type,
+		    int rid, struct resource *r);
 void		pci_delete_resource(device_t dev, device_t child, 
 		    int type, int rid);
 struct resource_list *pci_get_resource_list (device_t dev, device_t child);
diff --git a/sys/dev/pci/vga_pci.c b/sys/dev/pci/vga_pci.c
index 9f6a449d955..19fe9df7beb 100644
--- a/sys/dev/pci/vga_pci.c
+++ b/sys/dev/pci/vga_pci.c
@@ -46,8 +46,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-#include 
-
 #include 
 #include 
 
@@ -57,7 +55,6 @@ struct vga_resource {
 };
 
 struct vga_pci_softc {
-	device_t	vga_isa_dev;	/* Sister isavga driver. */
 	device_t	vga_msi_child;	/* Child driver using MSI. */
 	struct vga_resource vga_res[PCIR_MAX_BAR_0 + 1];
 };
@@ -115,11 +112,6 @@ vga_pci_attach(device_t dev)
 static int
 vga_pci_suspend(device_t dev)
 {
-	struct vga_pci_softc *sc;
-
-	sc = device_get_softc(dev);
-	if (sc->vga_isa_dev != NULL)
-		(void)DEVICE_SUSPEND(sc->vga_isa_dev);
 
 	return (bus_generic_suspend(dev));
 }
@@ -127,11 +119,6 @@ vga_pci_suspend(device_t dev)
 static int
 vga_pci_resume(device_t dev)
 {
-	struct vga_pci_softc *sc;
-
-	sc = device_get_softc(dev);
-	if (sc->vga_isa_dev != NULL)
-		(void)DEVICE_RESUME(sc->vga_isa_dev);
 
 	return (bus_generic_resume(dev));
 }
diff --git a/sys/dev/pcn/if_pcn.c b/sys/dev/pcn/if_pcn.c
index c52c22be394..6295a46b5bd 100644
--- a/sys/dev/pcn/if_pcn.c
+++ b/sys/dev/pcn/if_pcn.c
@@ -143,7 +143,7 @@ static int pcn_ioctl(struct ifnet *, u_long, caddr_t);
 static void pcn_init(void *);
 static void pcn_init_locked(struct pcn_softc *);
 static void pcn_stop(struct pcn_softc *);
-static void pcn_watchdog(struct ifnet *);
+static void pcn_watchdog(struct pcn_softc *);
 static int pcn_shutdown(device_t);
 static int pcn_ifmedia_upd(struct ifnet *);
 static void pcn_ifmedia_sts(struct ifnet *, struct ifmediareq *);
@@ -630,7 +630,6 @@ pcn_attach(dev)
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = pcn_ioctl;
 	ifp->if_start = pcn_start;
-	ifp->if_watchdog = pcn_watchdog;
 	ifp->if_init = pcn_init;
 	ifp->if_snd.ifq_maxlen = PCN_TX_LIST_CNT - 1;
 
@@ -948,7 +947,7 @@ pcn_txeof(sc)
 		sc->pcn_cdata.pcn_tx_cons = idx;
 		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 	}
-	ifp->if_timer = (sc->pcn_cdata.pcn_tx_cnt == 0) ? 0 : 5;
+	sc->pcn_timer = (sc->pcn_cdata.pcn_tx_cnt == 0) ? 0 : 5;
 
 	return;
 }
@@ -980,6 +979,8 @@ pcn_tick(xsc)
 			pcn_start_locked(ifp);
 	}
 
+	if (sc->pcn_timer > 0 && --sc->pcn_timer == 0)
+		pcn_watchdog(sc);
 	callout_reset(&sc->pcn_stat_callout, hz, pcn_tick, sc);
 
 	return;
@@ -1147,7 +1148,7 @@ pcn_start_locked(ifp)
 	/*
 	 * Set a timeout in case the chip goes out to lunch.
 	 */
-	ifp->if_timer = 5;
+	sc->pcn_timer = 5;
 
 	return;
 }
@@ -1429,14 +1430,12 @@ pcn_ioctl(ifp, command, data)
 }
 
 static void
-pcn_watchdog(ifp)
-	struct ifnet		*ifp;
+pcn_watchdog(struct pcn_softc *sc)
 {
-	struct pcn_softc	*sc;
+	struct ifnet		*ifp;
 
-	sc = ifp->if_softc;
-
-	PCN_LOCK(sc);
+	PCN_LOCK_ASSERT(sc);
+	ifp = sc->pcn_ifp;
 
 	ifp->if_oerrors++;
 	if_printf(ifp, "watchdog timeout\n");
@@ -1447,10 +1446,6 @@ pcn_watchdog(ifp)
 
 	if (ifp->if_snd.ifq_head != NULL)
 		pcn_start_locked(ifp);
-
-	PCN_UNLOCK(sc);
-
-	return;
 }
 
 /*
@@ -1465,7 +1460,7 @@ pcn_stop(struct pcn_softc *sc)
 
 	PCN_LOCK_ASSERT(sc);
 	ifp = sc->pcn_ifp;
-	ifp->if_timer = 0;
+	sc->pcn_timer = 0;
 
 	callout_stop(&sc->pcn_stat_callout);
 
diff --git a/sys/dev/pcn/if_pcnreg.h b/sys/dev/pcn/if_pcnreg.h
index 406d4380be0..a10edfd76aa 100644
--- a/sys/dev/pcn/if_pcnreg.h
+++ b/sys/dev/pcn/if_pcnreg.h
@@ -465,6 +465,7 @@ struct pcn_softc {
 	struct pcn_ring_data	pcn_cdata;
 	struct callout		pcn_stat_callout;
 	struct mtx		pcn_mtx;
+	int			pcn_timer;
 };
 
 #define	PCN_LOCK(_sc)		mtx_lock(&(_sc)->pcn_mtx)
diff --git a/sys/dev/pdq/if_fea.c b/sys/dev/pdq/if_fea.c
index a2cb27fe7aa..4c70a02c6d3 100644
--- a/sys/dev/pdq/if_fea.c
+++ b/sys/dev/pdq/if_fea.c
@@ -163,11 +163,9 @@ static void
 pdq_eisa_ifintr(arg)
 	void *		arg;
 {
-	device_t	dev;
 	pdq_softc_t *	sc;
 
-	dev = (device_t)arg;
-	sc = device_get_softc(dev);
+	sc = arg;
 
 	PDQ_LOCK(sc);
 	(void) pdq_interrupt(sc->sc_pdq);
@@ -181,11 +179,9 @@ pdq_eisa_attach (dev)
 	device_t	dev;
 {
 	pdq_softc_t *	sc;
-	struct ifnet *	ifp;
 	int		error;
 
 	sc = device_get_softc(dev);
-	ifp = sc->ifp;
 
 	sc->dev = dev;
 
@@ -222,28 +218,20 @@ pdq_eisa_attach (dev)
 		goto bad;
 	}
 
-	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
-
 	pdq_eisa_devinit(sc);
-	sc->sc_pdq = pdq_initialize(sc->mem_bst, sc->mem_bsh,
-				    ifp->if_xname, -1,
-				    (void *)sc, PDQ_DEFEA);
-	if (sc->sc_pdq == NULL) {
-		device_printf(dev, "Initialization failed.\n");
-		error = ENXIO;
+	error = pdq_ifattach(sc, sc->sc_pdq->pdq_hwaddr.lanaddr_bytes,
+	    PDQ_DEFEA);
+	if (error)
 		goto bad;
-	}
 
-	error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET,
-		               NULL, pdq_eisa_ifintr, dev, &sc->irq_ih);
+	error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET | INTR_MPSAFE,
+		               NULL, pdq_eisa_ifintr, sc, &sc->irq_ih);
 	if (error) {
 		device_printf(dev, "Failed to setup interrupt handler.\n");
-		error = ENXIO;
-		goto bad;
+		pdq_ifdetach(sc);
+		return (error);
 	}
 
-	pdq_ifattach(sc, sc->sc_pdq->pdq_hwaddr.lanaddr_bytes);
-
 	return (0);
 bad:
 	pdq_free(dev);
@@ -269,7 +257,9 @@ pdq_eisa_shutdown(dev)
 	pdq_softc_t *	sc;
 
 	sc = device_get_softc(dev);
+	PDQ_LOCK(sc);
 	pdq_hwreset(sc->sc_pdq);
+	PDQ_UNLOCK(sc);
 
 	return (0);
 }
diff --git a/sys/dev/pdq/if_fpa.c b/sys/dev/pdq/if_fpa.c
index ced3b8f7663..3fe88add845 100644
--- a/sys/dev/pdq/if_fpa.c
+++ b/sys/dev/pdq/if_fpa.c
@@ -73,11 +73,9 @@ static void	pdq_pci_ifintr		(void *);
 static void
 pdq_pci_ifintr(void *arg)
 {
-    device_t dev;
     pdq_softc_t *sc;
 
-    dev = (device_t)arg;
-    sc = device_get_softc(dev);
+    sc = arg;
 
     PDQ_LOCK(sc);
     (void) pdq_interrupt(sc->sc_pdq);
@@ -105,12 +103,10 @@ static int
 pdq_pci_attach(device_t dev)
 {
     pdq_softc_t *sc;
-    struct ifnet *ifp;
     u_int32_t command;
     int error;
 
     sc = device_get_softc(dev);
-    ifp = sc->ifp;
 
     sc->dev = dev;
 
@@ -146,26 +142,18 @@ pdq_pci_attach(device_t dev)
 	goto bad;
     }
 
-    if_initname(ifp, device_get_name(dev), device_get_unit(dev));
-
-    sc->sc_pdq = pdq_initialize(sc->mem_bst, sc->mem_bsh,
-				ifp->if_xname, -1,
-				(void *)sc, PDQ_DEFPA);
-    if (sc->sc_pdq == NULL) {
-	device_printf(dev, "Initialization failed.\n");
-	error = ENXIO;
+    error = pdq_ifattach(sc, sc->sc_pdq->pdq_hwaddr.lanaddr_bytes, PDQ_DEFPA);
+    if (error)
 	goto bad;
-    }
-
-    error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET, NULL,
-			   pdq_pci_ifintr, dev, &sc->irq_ih);
+    
+    error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET | INTR_MPSAFE, NULL,
+			   pdq_pci_ifintr, sc, &sc->irq_ih);
     if (error) {
 	device_printf(dev, "Failed to setup interrupt handler.\n");
-	error = ENXIO;
-	goto bad;
+	pdq_ifdetach(sc);
+	return (error);
     }
 
-    pdq_ifattach(sc, sc->sc_pdq->pdq_hwaddr.lanaddr_bytes);
 
     return (0);
 bad:
@@ -191,7 +179,9 @@ pdq_pci_shutdown(device_t dev)
     pdq_softc_t *sc;
 
     sc = device_get_softc(dev);
+    PDQ_LOCK(sc);
     pdq_hwreset(sc->sc_pdq);
+    PDQ_UNLOCK(sc);
 
     return (0);
 }
diff --git a/sys/dev/pdq/pdq_freebsd.h b/sys/dev/pdq/pdq_freebsd.h
index cdbf3893e90..6efd6849b4e 100644
--- a/sys/dev/pdq/pdq_freebsd.h
+++ b/sys/dev/pdq/pdq_freebsd.h
@@ -124,10 +124,13 @@ typedef struct _pdq_os_ctx_t {
 	void *			irq_ih;
 
 	struct mtx		mtx;
+	struct callout		watchdog;
+	int			timer;
 } pdq_softc_t;
 
 #define PDQ_LOCK(_sc)		mtx_lock(&(_sc)->mtx)
 #define PDQ_UNLOCK(_sc)		mtx_unlock(&(_sc)->mtx)
+#define	PDQ_LOCK_ASSERT(_sc)	mtx_assert(&(_sc)->mtx, MA_OWNED)
 
 #define	PDQ_OS_HDR_OFFSET	PDQ_RX_FC_OFFSET
 
@@ -255,7 +258,8 @@ pdq_state_t	pdq_stop (pdq_t *pdq);
  * OS dependent functions provided by
  * pdq_ifsubr.c or pdq.c to the bus front ends
  */
-void		pdq_ifattach (pdq_softc_t *, const pdq_uint8_t *);
+int		pdq_ifattach (pdq_softc_t *, const pdq_uint8_t *,
+			      pdq_type_t type);
 void		pdq_ifdetach (pdq_softc_t *);
 void		pdq_free (device_t);
 int		pdq_interrupt (pdq_t *pdq);
diff --git a/sys/dev/pdq/pdq_ifsubr.c b/sys/dev/pdq/pdq_ifsubr.c
index ce67b0e7d07..ec141502a9e 100644
--- a/sys/dev/pdq/pdq_ifsubr.c
+++ b/sys/dev/pdq/pdq_ifsubr.c
@@ -69,10 +69,23 @@ __FBSDID("$FreeBSD$");
 
 devclass_t pdq_devclass;
 
+static void	pdq_watchdog(void *);
+
 static void
-pdq_ifinit(
-    pdq_softc_t *sc)
+pdq_ifstop(pdq_softc_t *sc)
 {
+
+    PDQ_IFNET(sc)->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
+    sc->sc_pdq->pdq_flags &= ~PDQ_RUNNING;
+    pdq_stop(sc->sc_pdq);
+    callout_stop(&sc->watchdog);
+}
+
+static void
+pdq_ifinit_locked(pdq_softc_t *sc)
+{
+
+    PDQ_LOCK_ASSERT(sc);
     if (PDQ_IFNET(sc)->if_flags & IFF_UP) {
 	PDQ_IFNET(sc)->if_drv_flags |= IFF_DRV_RUNNING;
 	if (PDQ_IFNET(sc)->if_flags & IFF_PROMISC) {
@@ -87,24 +100,40 @@ pdq_ifinit(
 	}
 	sc->sc_pdq->pdq_flags |= PDQ_RUNNING;
 	pdq_run(sc->sc_pdq);
-    } else {
-	PDQ_IFNET(sc)->if_drv_flags &= ~IFF_DRV_RUNNING;
-	sc->sc_pdq->pdq_flags &= ~PDQ_RUNNING;
-	pdq_stop(sc->sc_pdq);
-    }
+	callout_reset(&sc->watchdog, hz, pdq_watchdog, sc);
+    } else
+	pdq_ifstop(sc);
+}
+
+static void
+pdq_ifinit(void *arg)
+{
+    pdq_softc_t *sc;
+
+    sc = arg;
+    PDQ_LOCK(sc);
+    pdq_ifinit_locked(sc);
+    PDQ_UNLOCK(sc);
 }
 
 static void
-pdq_ifwatchdog(
-    struct ifnet *ifp)
+pdq_watchdog(void *arg)
 {
+    pdq_softc_t *sc;
+    struct ifnet *ifp;
+
+    sc = arg;
+    PDQ_LOCK_ASSERT(sc);
+    callout_reset(&sc->watchdog, hz, pdq_watchdog, sc);
+    if (sc->timer == 0 || --sc->timer > 0)
+	return;
+
     /*
      * No progress was made on the transmit queue for PDQ_OS_TX_TRANSMIT
      * seconds.  Remove all queued packets.
      */
-
+    ifp = PDQ_IFNET(sc);
     ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-    ifp->if_timer = 0;
     for (;;) {
 	struct mbuf *m;
 	IFQ_DEQUEUE(&ifp->if_snd, m);
@@ -115,18 +144,18 @@ pdq_ifwatchdog(
 }
 
 static void
-pdq_ifstart(
-    struct ifnet *ifp)
+pdq_ifstart_locked(struct ifnet *ifp)
 {
     pdq_softc_t * const sc = PDQ_OS_IFP_TO_SOFTC(ifp);
     struct mbuf *m;
     int tx = 0;
 
+    PDQ_LOCK_ASSERT(sc);
     if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
 	return;
 
-    if (PDQ_IFNET(sc)->if_timer == 0)
-	PDQ_IFNET(sc)->if_timer = PDQ_OS_TX_TIMEOUT;
+    if (sc->timer == 0)
+	sc->timer = PDQ_OS_TX_TIMEOUT;
 
     if ((sc->sc_pdq->pdq_flags & PDQ_TXOK) == 0) {
 	PDQ_IFNET(sc)->if_drv_flags |= IFF_DRV_OACTIVE;
@@ -177,6 +206,16 @@ pdq_ifstart(
 	PDQ_DO_TYPE2_PRODUCER(sc->sc_pdq);
     sc->sc_flags &= ~PDQIF_DOWNCALL;
 }
+
+static void
+pdq_ifstart(struct ifnet *ifp)
+{
+    pdq_softc_t * const sc = PDQ_OS_IFP_TO_SOFTC(ifp);
+
+    PDQ_LOCK(sc);
+    pdq_ifstart_locked(ifp);
+    PDQ_UNLOCK(sc);
+}
 
 void
 pdq_os_receive_pdu(
@@ -218,7 +257,9 @@ pdq_os_receive_pdu(
     }
 
     m->m_pkthdr.rcvif = ifp;
+    PDQ_UNLOCK(sc);
     (*ifp->if_input)(ifp, m);
+    PDQ_LOCK(sc);
 }
 
 void
@@ -228,11 +269,11 @@ pdq_os_restart_transmitter(
     pdq_softc_t *sc = pdq->pdq_os_ctx;
     PDQ_IFNET(sc)->if_drv_flags &= ~IFF_DRV_OACTIVE;
     if (IFQ_IS_EMPTY(&PDQ_IFNET(sc)->if_snd) == 0) {
-	PDQ_IFNET(sc)->if_timer = PDQ_OS_TX_TIMEOUT;
+	sc->timer = PDQ_OS_TX_TIMEOUT;
 	if ((sc->sc_flags & PDQIF_DOWNCALL) == 0)
-	    pdq_ifstart(PDQ_IFNET(sc));
+	    pdq_ifstart_locked(PDQ_IFNET(sc));
     } else {
-	PDQ_IFNET(sc)->if_timer = 0;
+	sc->timer = 0;
     }
 }
 
@@ -305,6 +346,7 @@ pdq_ifmedia_change(
 {
     pdq_softc_t * const sc = PDQ_OS_IFP_TO_SOFTC(ifp);
 
+    PDQ_LOCK(sc);
     if (sc->sc_ifmedia.ifm_media & IFM_FDX) {
 	if ((sc->sc_pdq->pdq_flags & PDQ_WANT_FDX) == 0) {
 	    sc->sc_pdq->pdq_flags |= PDQ_WANT_FDX;
@@ -316,6 +358,7 @@ pdq_ifmedia_change(
 	if (sc->sc_pdq->pdq_flags & PDQ_RUNNING)
 	    pdq_run(sc->sc_pdq);
     }
+    PDQ_UNLOCK(sc);
 
     return 0;
 }
@@ -327,6 +370,7 @@ pdq_ifmedia_status(
 {
     pdq_softc_t * const sc = PDQ_OS_IFP_TO_SOFTC(ifp);
 
+    PDQ_LOCK(sc);
     ifmr->ifm_status = IFM_AVALID;
     if (sc->sc_pdq->pdq_flags & PDQ_IS_ONRING)
 	ifmr->ifm_status |= IFM_ACTIVE;
@@ -334,6 +378,7 @@ pdq_ifmedia_status(
     ifmr->ifm_active = (ifmr->ifm_current & ~IFM_FDX);
     if (sc->sc_pdq->pdq_flags & PDQ_IS_FDX)
 	ifmr->ifm_active |= IFM_FDX;
+    PDQ_UNLOCK(sc);
 }
 
 void
@@ -369,8 +414,6 @@ pdq_ifioctl(
     pdq_softc_t *sc = PDQ_OS_IFP_TO_SOFTC(ifp);
     int error = 0;
 
-    PDQ_LOCK(sc);
-
     switch (cmd) {
 	case SIOCSIFFLAGS: {
 	    pdq_ifinit(sc);
@@ -379,10 +422,12 @@ pdq_ifioctl(
 
 	case SIOCADDMULTI:
 	case SIOCDELMULTI: {
+	    PDQ_LOCK(sc);
 	    if (PDQ_IFNET(sc)->if_drv_flags & IFF_DRV_RUNNING) {
 		    pdq_run(sc->sc_pdq);
 		error = 0;
 	    }
+	    PDQ_UNLOCK(sc);
 	    break;
 	}
 
@@ -401,7 +446,6 @@ pdq_ifioctl(
 	}
     }
 
-    PDQ_UNLOCK(sc);
     return error;
 }
 
@@ -409,25 +453,27 @@ pdq_ifioctl(
 #define	IFF_NOTRAILERS	0
 #endif
 
-void
-pdq_ifattach(pdq_softc_t *sc, const pdq_uint8_t *llc)
+int
+pdq_ifattach(pdq_softc_t *sc, const pdq_uint8_t *llc, pdq_type_t type)
 {
     struct ifnet *ifp;
 
     ifp = PDQ_IFNET(sc) = if_alloc(IFT_FDDI);
-    if (ifp == NULL)
-	panic("%s: can not if_alloc()", device_get_nameunit(sc->dev));
+    if (ifp == NULL) {
+	device_printf(sc->dev, "can not if_alloc()\n");
+	return (ENOSPC);
+    }
 
     mtx_init(&sc->mtx, device_get_nameunit(sc->dev), MTX_NETWORK_LOCK,
-	MTX_DEF | MTX_RECURSE);
+	MTX_DEF);
+    callout_init_mtx(&sc->watchdog, &sc->mtx, 0);
 
+    if_initname(ifp, device_get_name(sc->dev), device_get_unit(sc->dev));
     ifp->if_softc = sc;
-    ifp->if_init = (if_init_f_t *)pdq_ifinit;
+    ifp->if_init = pdq_ifinit;
     ifp->if_snd.ifq_maxlen = IFQ_MAXLEN;
     ifp->if_flags = IFF_BROADCAST|IFF_SIMPLEX|IFF_NOTRAILERS|IFF_MULTICAST;
 
-    ifp->if_watchdog = pdq_ifwatchdog;
-
     ifp->if_ioctl = pdq_ifioctl;
     ifp->if_start = pdq_ifstart;
 
@@ -441,7 +487,15 @@ pdq_ifattach(pdq_softc_t *sc, const pdq_uint8_t *llc)
     }
 #endif
   
+    sc->sc_pdq = pdq_initialize(sc->mem_bst, sc->mem_bsh, ifp->if_xname, -1,
+	sc, type);
+    if (sc->sc_pdq == NULL) {
+	device_printf(sc->dev, "Initialization failed.\n");
+	return (ENXIO);
+    }
+
     fddi_ifattach(ifp, llc, FDDI_BPF_SUPPORTED);
+    return (0);
 }
 
 void
@@ -452,8 +506,10 @@ pdq_ifdetach (pdq_softc_t *sc)
     ifp = sc->ifp;
 
     fddi_ifdetach(ifp, FDDI_BPF_SUPPORTED);
-    if_free(ifp);
-    pdq_stop(sc->sc_pdq);
+    PDQ_LOCK(sc);
+    pdq_ifstop(sc);
+    PDQ_UNLOCK(sc);
+    callout_drain(&sc->watchdog);
     pdq_free(sc->dev);
 
     return;
@@ -474,6 +530,8 @@ pdq_free (device_t dev)
 		bus_teardown_intr(dev, sc->irq, sc->irq_ih);
 	if (sc->irq)
 		bus_release_resource(dev, SYS_RES_IRQ, sc->irq_rid, sc->irq);
+	if (sc->ifp)
+		if_free(sc->ifp);
 
 	/*
 	 * Destroy the mutex.
diff --git a/sys/dev/puc/puc.c b/sys/dev/puc/puc.c
index 39e7a19a611..b6fa3c5e560 100644
--- a/sys/dev/puc/puc.c
+++ b/sys/dev/puc/puc.c
@@ -129,62 +129,78 @@ puc_intr(void *arg)
 {
 	struct puc_port *port;
 	struct puc_softc *sc = arg;
-	u_long dev, devs;
-	int i, idx, ipend, isrc;
+	u_long ds, dev, devs;
+	int i, idx, ipend, isrc, nints;
 	uint8_t ilr;
 
-	devs = sc->sc_serdevs;
-	if (sc->sc_ilr == PUC_ILR_DIGI) {
-		idx = 0;
-		while (devs & (0xfful << idx)) {
-			ilr = ~bus_read_1(sc->sc_port[idx].p_rres, 7);
-			devs &= ~0ul ^ ((u_long)ilr << idx);
-			idx += 8;
-		}
-	} else if (sc->sc_ilr == PUC_ILR_QUATECH) {
+	nints = 0;
+	while (1) {
 		/*
-		 * Don't trust the value if it's the same as the option
-		 * register. It may mean that the ILR is not active and
-		 * we're reading the option register instead. This may
-		 * lead to false positives on 8-port boards.
+		 * Obtain the set of devices with pending interrupts.
 		 */
-		ilr = bus_read_1(sc->sc_port[0].p_rres, 7);
-		if (ilr != (sc->sc_cfg_data & 0xff))
-			devs &= (u_long)ilr;
-	}
-
-	ipend = 0;
-	idx = 0, dev = 1UL;
-	while (devs != 0UL) {
-		while ((devs & dev) == 0UL)
-			idx++, dev <<= 1;
-		devs &= ~dev;
-		port = &sc->sc_port[idx];
-		port->p_ipend = SERDEV_IPEND(port->p_dev);
-		ipend |= port->p_ipend;
-	}
-
-	i = 0, isrc = SER_INT_OVERRUN;
-	while (ipend) {
-		while (i < PUC_ISRCCNT && !(ipend & isrc))
-			i++, isrc <<= 1;
-		KASSERT(i < PUC_ISRCCNT, ("%s", __func__));
-		ipend &= ~isrc;
-		idx = 0, dev = 1UL;
 		devs = sc->sc_serdevs;
-		while (devs != 0UL) {
-			while ((devs & dev) == 0UL)
-				idx++, dev <<= 1;
-			devs &= ~dev;
-			port = &sc->sc_port[idx];
-			if (!(port->p_ipend & isrc))
-				continue;
-			if (port->p_ihsrc[i] != NULL)
-				(*port->p_ihsrc[i])(port->p_iharg);
+		if (sc->sc_ilr == PUC_ILR_DIGI) {
+			idx = 0;
+			while (devs & (0xfful << idx)) {
+				ilr = ~bus_read_1(sc->sc_port[idx].p_rres, 7);
+				devs &= ~0ul ^ ((u_long)ilr << idx);
+				idx += 8;
+			}
+		} else if (sc->sc_ilr == PUC_ILR_QUATECH) {
+			/*
+			 * Don't trust the value if it's the same as the option
+			 * register. It may mean that the ILR is not active and
+			 * we're reading the option register instead. This may
+			 * lead to false positives on 8-port boards.
+			 */
+			ilr = bus_read_1(sc->sc_port[0].p_rres, 7);
+			if (ilr != (sc->sc_cfg_data & 0xff))
+				devs &= (u_long)ilr;
+		}
+		if (devs == 0UL)
+			break;
+
+		/*
+		 * Obtain the set of interrupt sources from those devices
+		 * that have pending interrupts.
+		 */
+		ipend = 0;
+		idx = 0, dev = 1UL;
+		ds = devs;
+		while (ds != 0UL) {
+			while ((ds & dev) == 0UL)
+				idx++, dev <<= 1;
+			ds &= ~dev;
+			port = &sc->sc_port[idx];
+			port->p_ipend = SERDEV_IPEND(port->p_dev);
+			ipend |= port->p_ipend;
+		}
+		if (ipend == 0)
+			break;
+
+		i = 0, isrc = SER_INT_OVERRUN;
+		while (ipend) {
+			while (i < PUC_ISRCCNT && !(ipend & isrc))
+				i++, isrc <<= 1;
+			KASSERT(i < PUC_ISRCCNT, ("%s", __func__));
+			ipend &= ~isrc;
+			idx = 0, dev = 1UL;
+			ds = devs;
+			while (ds != 0UL) {
+				while ((ds & dev) == 0UL)
+					idx++, dev <<= 1;
+				ds &= ~dev;
+				port = &sc->sc_port[idx];
+				if (!(port->p_ipend & isrc))
+					continue;
+				if (port->p_ihsrc[i] != NULL)
+					(*port->p_ihsrc[i])(port->p_iharg);
+				nints++;
+			}
 		}
-		return (FILTER_HANDLED);
 	}
-	return (FILTER_STRAY);
+
+	return ((nints > 0) ? FILTER_HANDLED : FILTER_STRAY);
 }
 
 int
diff --git a/sys/dev/puc/pucdata.c b/sys/dev/puc/pucdata.c
index 36183b75b52..b74574d2c3c 100644
--- a/sys/dev/puc/pucdata.c
+++ b/sys/dev/puc/pucdata.c
@@ -168,10 +168,10 @@ const struct puc_cfg puc_pci_devices[] = {
 
 	{   0x10e8, 0x818e, 0xffff, 0,
 	    "Applied Micro Circuits 8 Port UART",
-            DEFAULT_RCLK,
-            PUC_PORT_8S, 0x14, -1, -1,
+	    DEFAULT_RCLK,
+	    PUC_PORT_8S, 0x14, -1, -1,
 	    .config_function = puc_config_amc
-        },
+	},
 
 	{   0x11fe, 0x8010, 0xffff, 0,
 	    "Comtrol RocketPort 550/8 RJ11 part A",
@@ -808,6 +808,42 @@ const struct puc_cfg puc_pci_devices[] = {
 	    PUC_PORT_4S1P, 0x10, 4, 0,
 	},
 
+	{   0x9710, 0x9865, 0xa000, 0x3002,
+	    "NetMos NM9865 Dual UART",
+	    DEFAULT_RCLK,
+	    PUC_PORT_2S, 0x10, 4, 0,
+	},
+
+	{   0x9710, 0x9865, 0xa000, 0x3003,
+	    "NetMos NM9865 Triple UART",
+	    DEFAULT_RCLK,
+	    PUC_PORT_3S, 0x10, 4, 0,
+	},
+
+	{   0x9710, 0x9865, 0xa000, 0x3004,
+	    "NetMos NM9865 Quad UART",
+	    DEFAULT_RCLK,
+	    PUC_PORT_4S, 0x10, 4, 0,0
+	},
+
+	{   0x9710, 0x9865, 0xa000, 0x3011,
+	    "NetMos NM9865 Single UART and 1284 Printer port",
+	    DEFAULT_RCLK,
+	    PUC_PORT_1S1P, 0x10, 4, 0,
+	},
+
+	{   0x9710, 0x9865, 0xa000, 0x3012,
+	    "NetMos NM9865 Dual UART and 1284 Printer port",
+	    DEFAULT_RCLK,
+	    PUC_PORT_2S1P, 0x10, 4, 0,
+	},
+
+	{   0x9710, 0x9865, 0xa000, 0x3020,
+	    "NetMos NM9865 Dual 1284 Printer port",
+	    DEFAULT_RCLK,
+	    PUC_PORT_2P, 0x10, 4, 0,
+	},
+
 	{   0xb00c, 0x021c, 0xffff, 0,
 	    "IC Book Labs Gunboat x4 Lite",
 	    DEFAULT_RCLK,
diff --git a/sys/dev/re/if_re.c b/sys/dev/re/if_re.c
index 25d189b7982..aeb9cf20d7e 100644
--- a/sys/dev/re/if_re.c
+++ b/sys/dev/re/if_re.c
@@ -753,6 +753,7 @@ re_diag(struct rl_softc *sc)
 
 	ifp->if_flags |= IFF_PROMISC;
 	sc->rl_testmode = 1;
+	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 	re_init_locked(sc);
 	sc->rl_flags |= RL_FLAG_LINK;
 	if (sc->rl_type == RL_8169)
@@ -2145,8 +2146,10 @@ re_poll_locked(struct ifnet *ifp, enum poll_cmd cmd, int count)
 		 * XXX check behaviour on receiver stalls.
 		 */
 
-		if (status & RL_ISR_SYSTEM_ERR)
+		if (status & RL_ISR_SYSTEM_ERR) {
+			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 			re_init_locked(sc);
+		}
 	}
 	return (rx_npkts);
 }
@@ -2222,8 +2225,10 @@ re_int_task(void *arg, int npending)
 	    RL_ISR_TX_ERR|RL_ISR_TX_DESC_UNAVAIL))
 		re_txeof(sc);
 
-	if (status & RL_ISR_SYSTEM_ERR)
+	if (status & RL_ISR_SYSTEM_ERR) {
+		ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 		re_init_locked(sc);
+	}
 
 	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		taskqueue_enqueue_fast(taskqueue_fast, &sc->rl_txtask);
@@ -2539,6 +2544,9 @@ re_init_locked(struct rl_softc *sc)
 
 	mii = device_get_softc(sc->rl_miibus);
 
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+		return;
+
 	/*
 	 * Cancel pending I/O and free all RX/TX buffers.
 	 */
@@ -2793,7 +2801,8 @@ re_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 	case SIOCADDMULTI:
 	case SIOCDELMULTI:
 		RL_LOCK(sc);
-		re_set_rxmode(sc);
+		if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+			re_set_rxmode(sc);
 		RL_UNLOCK(sc);
 		break;
 	case SIOCGIFMEDIA:
@@ -2862,8 +2871,10 @@ re_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 			if ((mask & IFCAP_WOL_MAGIC) != 0)
 				ifp->if_capenable ^= IFCAP_WOL_MAGIC;
 		}
-		if (reinit && ifp->if_drv_flags & IFF_DRV_RUNNING)
+		if (reinit && ifp->if_drv_flags & IFF_DRV_RUNNING) {
+			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 			re_init(sc);
+		}
 		VLAN_CAPABILITIES(ifp);
 	    }
 		break;
@@ -2899,6 +2910,7 @@ re_watchdog(struct rl_softc *sc)
 	ifp->if_oerrors++;
 
 	re_rxeof(sc, NULL);
+	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 	re_init_locked(sc);
 	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		taskqueue_enqueue_fast(taskqueue_fast, &sc->rl_txtask);
@@ -3011,15 +3023,16 @@ re_resume(device_t dev)
 			    CSR_READ_1(sc, RL_GPIO) | 0x01);
 	}
 
-	/* reinitialize interface if necessary */
-	if (ifp->if_flags & IFF_UP)
-		re_init_locked(sc);
-
 	/*
 	 * Clear WOL matching such that normal Rx filtering
 	 * wouldn't interfere with WOL patterns.
 	 */
 	re_clrwol(sc);
+
+	/* reinitialize interface if necessary */
+	if (ifp->if_flags & IFF_UP)
+		re_init_locked(sc);
+
 	sc->suspended = 0;
 	RL_UNLOCK(sc);
 
diff --git a/sys/dev/siis/siis.c b/sys/dev/siis/siis.c
index 73786f3a613..6f693e4e8a2 100644
--- a/sys/dev/siis/siis.c
+++ b/sys/dev/siis/siis.c
@@ -69,7 +69,7 @@ static void siis_dmasetprd(void *arg, bus_dma_segment_t *segs, int nsegs, int er
 static void siis_execute_transaction(struct siis_slot *slot);
 static void siis_timeout(struct siis_slot *slot);
 static void siis_end_transaction(struct siis_slot *slot, enum siis_err_type et);
-static int siis_setup_fis(struct siis_cmd *ctp, union ccb *ccb, int tag);
+static int siis_setup_fis(device_t dev, struct siis_cmd *ctp, union ccb *ccb, int tag);
 static void siis_dmainit(device_t dev);
 static void siis_dmasetupc_cb(void *xsc, bus_dma_segment_t *segs, int nsegs, int error);
 static void siis_dmafini(device_t dev);
@@ -93,15 +93,17 @@ static struct {
 	uint32_t	id;
 	const char	*name;
 	int		ports;
+	int		quirks;
+#define SIIS_Q_SNTF	1
 } siis_ids[] = {
-	{0x31241095,	"SiI3124",	4},
-	{0x31248086,	"SiI3124",	4},
-	{0x31321095,	"SiI3132",	2},
-	{0x02421095,	"SiI3132",	2},
-	{0x02441095,	"SiI3132",	2},
-	{0x31311095,	"SiI3131",	1},
-	{0x35311095,	"SiI3531",	1},
-	{0,		NULL,		0}
+	{0x31241095,	"SiI3124",	4,	0},
+	{0x31248086,	"SiI3124",	4,	0},
+	{0x31321095,	"SiI3132",	2,	SIIS_Q_SNTF},
+	{0x02421095,	"SiI3132",	2,	SIIS_Q_SNTF},
+	{0x02441095,	"SiI3132",	2,	SIIS_Q_SNTF},
+	{0x31311095,	"SiI3131",	1,	SIIS_Q_SNTF},
+	{0x35311095,	"SiI3531",	1,	SIIS_Q_SNTF},
+	{0,		NULL,		0,	0}
 };
 
 static int
@@ -113,7 +115,7 @@ siis_probe(device_t dev)
 
 	for (i = 0; siis_ids[i].id != 0; i++) {
 		if (siis_ids[i].id == devid) {
-			snprintf(buf, sizeof(buf), "%s SATA2 controller",
+			snprintf(buf, sizeof(buf), "%s SATA controller",
 			    siis_ids[i].name);
 			device_set_desc_copy(dev, buf);
 			return (BUS_PROBE_VENDOR);
@@ -130,16 +132,18 @@ siis_attach(device_t dev)
 	device_t child;
 	int	error, i, unit;
 
+	ctlr->dev = dev;
 	for (i = 0; siis_ids[i].id != 0; i++) {
 		if (siis_ids[i].id == devid)
 			break;
 	}
-	ctlr->dev = dev;
+	ctlr->quirks = siis_ids[i].quirks;
 	/* Global memory */
 	ctlr->r_grid = PCIR_BAR(0);
 	if (!(ctlr->r_gmem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
 	    &ctlr->r_grid, RF_ACTIVE)))
 		return (ENXIO);
+	ctlr->gctl = ATA_INL(ctlr->r_gmem, SIIS_GCTL);
 	/* Channels memory */
 	ctlr->r_rid = PCIR_BAR(2);
 	if (!(ctlr->r_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
@@ -218,7 +222,8 @@ siis_suspend(device_t dev)
 
 	bus_generic_suspend(dev);
 	/* Put controller into reset state. */
-	ATA_OUTL(ctlr->r_gmem, SIIS_GCTL, SIIS_GCTL_GRESET);
+	ctlr->gctl |= SIIS_GCTL_GRESET;
+	ATA_OUTL(ctlr->r_gmem, SIIS_GCTL, ctlr->gctl);
 	return 0;
 }
 
@@ -226,12 +231,28 @@ static int
 siis_resume(device_t dev)
 {
 	struct siis_controller *ctlr = device_get_softc(dev);
+	int cap;
+	uint16_t val;
 
+	/* Set PCIe max read request size to at least 1024 bytes */
+	if (pci_find_extcap(dev, PCIY_EXPRESS, &cap) == 0) {
+		val = pci_read_config(dev,
+		    cap + PCIR_EXPRESS_DEVICE_CTL, 2);
+		if ((val & PCIM_EXP_CTL_MAX_READ_REQUEST) < 0x3000) {
+			val &= ~PCIM_EXP_CTL_MAX_READ_REQUEST;
+			val |= 0x3000;
+			pci_write_config(dev,
+			    cap + PCIR_EXPRESS_DEVICE_CTL, val, 2);
+		}
+	}
 	/* Put controller into reset state. */
-	ATA_OUTL(ctlr->r_gmem, SIIS_GCTL, SIIS_GCTL_GRESET);
+	ctlr->gctl |= SIIS_GCTL_GRESET;
+	ATA_OUTL(ctlr->r_gmem, SIIS_GCTL, ctlr->gctl);
 	DELAY(10000);
 	/* Get controller out of reset state and enable port interrupts. */
-	ATA_OUTL(ctlr->r_gmem, SIIS_GCTL, 0x0000000f);
+	ctlr->gctl &= ~(SIIS_GCTL_GRESET | SIIS_GCTL_I2C_IE);
+	ctlr->gctl |= 0x0000000f;
+	ATA_OUTL(ctlr->r_gmem, SIIS_GCTL, ctlr->gctl);
 	return (bus_generic_resume(dev));
 }
 
@@ -285,6 +306,11 @@ siis_intr(void *data)
 			ctlr->interrupt[unit].function(arg);
 		}
 	}
+	/* Acknowledge interrupt, if MSI enabled. */
+	if (ctlr->irq.r_irq_rid) {
+		ATA_OUTL(ctlr->r_gmem, SIIS_GCTL,
+		    ctlr->gctl | SIIS_GCTL_MSIACK);
+	}
 }
 
 static struct resource *
@@ -413,16 +439,25 @@ siis_ch_probe(device_t dev)
 static int
 siis_ch_attach(device_t dev)
 {
+	struct siis_controller *ctlr = device_get_softc(device_get_parent(dev));
 	struct siis_channel *ch = device_get_softc(dev);
 	struct cam_devq *devq;
-	int rid, error;
+	int rid, error, i, sata_rev = 0;
 
 	ch->dev = dev;
 	ch->unit = (intptr_t)device_get_ivars(dev);
+	ch->quirks = ctlr->quirks;
 	resource_int_value(device_get_name(dev),
 	    device_get_unit(dev), "pm_level", &ch->pm_level);
 	resource_int_value(device_get_name(dev),
-	    device_get_unit(dev), "sata_rev", &ch->sata_rev);
+	    device_get_unit(dev), "sata_rev", &sata_rev);
+	for (i = 0; i < 16; i++) {
+		ch->user[i].revision = sata_rev;
+		ch->user[i].mode = 0;
+		ch->user[i].bytecount = 8192;
+		ch->user[i].tags = SIIS_MAX_SLOTS;
+		ch->curr[i] = ch->user[i];
+	}
 	mtx_init(&ch->mtx, "SIIS channel lock", NULL, MTX_DEF);
 	rid = ch->unit;
 	if (!(ch->r_mem = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
@@ -579,7 +614,7 @@ siis_dmainit(device_t dev)
 	}
 	ch->dma.work_bus = dcba.maddr;
 	/* Data area. */
-	if (bus_dma_tag_create(bus_get_dma_tag(dev), 2, 0,
+	if (bus_dma_tag_create(bus_get_dma_tag(dev), 1, 0,
 	    BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR,
 	    NULL, NULL,
 	    SIIS_SG_ENTRIES * PAGE_SIZE * SIIS_MAX_SLOTS,
@@ -673,8 +708,16 @@ siis_notify_events(device_t dev)
 	u_int32_t status;
 	int i;
 
-	status = ATA_INL(ch->r_mem, SIIS_P_SNTF);
-	ATA_OUTL(ch->r_mem, SIIS_P_SNTF, status);
+	if (ch->quirks & SIIS_Q_SNTF) {
+		status = ATA_INL(ch->r_mem, SIIS_P_SNTF);
+		ATA_OUTL(ch->r_mem, SIIS_P_SNTF, status);
+	} else {
+		/*
+		 * Without SNTF we have no idea which device sent notification.
+		 * If PMP is connected, assume it, else - device.
+		 */
+		status = (ch->pm_present) ? 0x8000 : 0x0001;
+	}
 	if (bootverbose)
 		device_printf(dev, "SNTF 0x%04x\n", status);
 	for (i = 0; i < 16; i++) {
@@ -832,6 +875,13 @@ siis_check_collision(device_t dev, union ccb *ccb)
 	struct siis_channel *ch = device_get_softc(dev);
 
 	mtx_assert(&ch->mtx, MA_OWNED);
+	if ((ccb->ccb_h.func_code == XPT_ATA_IO) &&
+	    (ccb->ataio.cmd.flags & CAM_ATAIO_FPDMA)) {
+		/* Tagged command while we have no supported tag free. */
+		if (((~ch->oslots) & (0x7fffffff >> (31 -
+		    ch->curr[ccb->ccb_h.target_id].tags))) == 0)
+			return (1);
+	}
 	if ((ccb->ccb_h.func_code == XPT_ATA_IO) &&
 	    (ccb->ataio.cmd.flags & (CAM_ATAIO_CONTROL | CAM_ATAIO_NEEDRESULT))) {
 		/* Atomic command while anything active. */
@@ -850,21 +900,20 @@ siis_begin_transaction(device_t dev, union ccb *ccb)
 {
 	struct siis_channel *ch = device_get_softc(dev);
 	struct siis_slot *slot;
-	int tag;
+	int tag, tags;
 
 	mtx_assert(&ch->mtx, MA_OWNED);
 	/* Choose empty slot. */
-	tag = ch->lastslot;
-	while (ch->slot[tag].state != SIIS_SLOT_EMPTY) {
-		if (++tag >= SIIS_MAX_SLOTS)
-			tag = 0;
-		KASSERT(tag != ch->lastslot, ("siis: ALL SLOTS BUSY!"));
-	}
-	ch->lastslot = tag;
+	tags = SIIS_MAX_SLOTS;
+	if ((ccb->ccb_h.func_code == XPT_ATA_IO) &&
+	    (ccb->ataio.cmd.flags & CAM_ATAIO_FPDMA))
+		tags = ch->curr[ccb->ccb_h.target_id].tags;
+	tag = fls((~ch->oslots) & (0x7fffffff >> (31 - tags))) - 1;
 	/* Occupy chosen slot. */
 	slot = &ch->slot[tag];
 	slot->ccb = ccb;
 	/* Update channel stats. */
+	ch->oslots |= (1 << slot->slot);
 	ch->numrslots++;
 	if ((ccb->ccb_h.func_code == XPT_ATA_IO) &&
 	    (ccb->ataio.cmd.flags & CAM_ATAIO_FPDMA)) {
@@ -951,17 +1000,33 @@ siis_execute_transaction(struct siis_slot *slot)
 	ctp->protocol_override = 0;
 	ctp->transfer_count = 0;
 	/* Special handling for Soft Reset command. */
-	if ((ccb->ccb_h.func_code == XPT_ATA_IO) &&
-	    (ccb->ataio.cmd.flags & CAM_ATAIO_CONTROL)) {
-		ctp->control |= htole16(SIIS_PRB_SOFT_RESET);
+	if (ccb->ccb_h.func_code == XPT_ATA_IO) {
+		if (ccb->ataio.cmd.flags & CAM_ATAIO_CONTROL) {
+			ctp->control |= htole16(SIIS_PRB_SOFT_RESET);
+		} else {
+			ctp->control |= htole16(SIIS_PRB_PROTOCOL_OVERRIDE);
+			if (ccb->ataio.cmd.flags & CAM_ATAIO_FPDMA) {
+				ctp->protocol_override |=
+				    htole16(SIIS_PRB_PROTO_NCQ);
+			}
+			if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) {
+				ctp->protocol_override |=
+				    htole16(SIIS_PRB_PROTO_READ);
+			} else
+			if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT) {
+				ctp->protocol_override |=
+				    htole16(SIIS_PRB_PROTO_WRITE);
+			}
+		}
 	} else if (ccb->ccb_h.func_code == XPT_SCSI_IO) {
-		if (ccb->ccb_h.flags & CAM_DIR_IN)
+		if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN)
 			ctp->control |= htole16(SIIS_PRB_PACKET_READ);
-		if (ccb->ccb_h.flags & CAM_DIR_OUT)
+		else
+		if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT)
 			ctp->control |= htole16(SIIS_PRB_PACKET_WRITE);
 	}
 	/* Setup the FIS for this request */
-	if (!siis_setup_fis(ctp, ccb, slot->slot)) {
+	if (!siis_setup_fis(dev, ctp, ccb, slot->slot)) {
 		device_printf(ch->dev, "Setting up SATA FIS failed\n");
 		if (!ch->readlog)
 			xpt_freeze_simq(ch->sim, 1);
@@ -1118,6 +1183,7 @@ siis_end_transaction(struct siis_slot *slot, enum siis_err_type et)
 		ccb->ccb_h.status |= CAM_REQ_CMP_ERR;
 	}
 	/* Free slot. */
+	ch->oslots &= ~(1 << slot->slot);
 	ch->rslots &= ~(1 << slot->slot);
 	ch->aslots &= ~(1 << slot->slot);
 	if (et != SIIS_ERR_TIMEOUT) {
@@ -1143,7 +1209,7 @@ siis_end_transaction(struct siis_slot *slot, enum siis_err_type et)
 	} else
 		xpt_done(ccb);
 	/* Unfreeze frozen command. */
-	if (ch->frozen && ch->numrslots == 0) {
+	if (ch->frozen && !siis_check_collision(dev, ch->frozen)) {
 		union ccb *fccb = ch->frozen;
 		ch->frozen = NULL;
 		siis_begin_transaction(dev, fccb);
@@ -1332,7 +1398,7 @@ static void
 siis_reset(device_t dev)
 {
 	struct siis_channel *ch = device_get_softc(dev);
-	int i, retry = 0;
+	int i, retry = 0, sata_rev;
 	uint32_t val;
 
 	if (bootverbose)
@@ -1376,11 +1442,12 @@ siis_reset(device_t dev)
 	/* Disable port interrupts */
 	ATA_OUTL(ch->r_mem, SIIS_P_IECLR, 0x0000FFFF);
 	/* Set speed limit. */
-	if (ch->sata_rev == 1)
+	sata_rev = ch->user[ch->pm_present ? 15 : 0].revision;
+	if (sata_rev == 1)
 		val = ATA_SC_SPD_SPEED_GEN1;
-	else if (ch->sata_rev == 2)
+	else if (sata_rev == 2)
 		val = ATA_SC_SPD_SPEED_GEN2;
-	else if (ch->sata_rev == 3)
+	else if (sata_rev == 3)
 		val = ATA_SC_SPD_SPEED_GEN3;
 	else
 		val = 0;
@@ -1432,8 +1499,9 @@ retry:
 }
 
 static int
-siis_setup_fis(struct siis_cmd *ctp, union ccb *ccb, int tag)
+siis_setup_fis(device_t dev, struct siis_cmd *ctp, union ccb *ccb, int tag)
 {
+	struct siis_channel *ch = device_get_softc(dev);
 	u_int8_t *fis = &ctp->fis[0];
 
 	bzero(fis, 24);
@@ -1442,7 +1510,8 @@ siis_setup_fis(struct siis_cmd *ctp, union ccb *ccb, int tag)
 	if (ccb->ccb_h.func_code == XPT_SCSI_IO) {
 		fis[1] |= 0x80;
 		fis[2] = ATA_PACKET_CMD;
-		if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE)
+		if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE &&
+		    ch->curr[ccb->ccb_h.target_id].mode >= ATA_DMA)
 			fis[3] = ATA_F_DMA;
 		else {
 			fis[5] = ccb->csio.dxfer_len;
@@ -1554,7 +1623,20 @@ siisaction(struct cam_sim *sim, union ccb *ccb)
 	case XPT_SET_TRAN_SETTINGS:
 	{
 		struct	ccb_trans_settings *cts = &ccb->cts;
+		struct	siis_device *d; 
 
+		if (cts->type == CTS_TYPE_CURRENT_SETTINGS)
+			d = &ch->curr[ccb->ccb_h.target_id];
+		else
+			d = &ch->user[ccb->ccb_h.target_id];
+		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_REVISION)
+			d->revision = cts->xport_specific.sata.revision;
+		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_MODE)
+			d->mode = cts->xport_specific.sata.mode;
+		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_BYTECOUNT)
+			d->bytecount = min(8192, cts->xport_specific.sata.bytecount);
+		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_TAGS)
+			d->tags = min(SIIS_MAX_SLOTS, cts->xport_specific.sata.tags);
 		if (cts->xport_specific.sata.valid & CTS_SATA_VALID_PM) {
 			ch->pm_present = cts->xport_specific.sata.pm_present;
 			if (ch->pm_present)
@@ -1570,30 +1652,41 @@ siisaction(struct cam_sim *sim, union ccb *ccb)
 	/* Get default/user set transfer settings for the target */
 	{
 		struct	ccb_trans_settings *cts = &ccb->cts;
+		struct  siis_device *d;
 		uint32_t status;
 
+		if (cts->type == CTS_TYPE_CURRENT_SETTINGS)
+			d = &ch->curr[ccb->ccb_h.target_id];
+		else
+			d = &ch->user[ccb->ccb_h.target_id];
 		cts->protocol = PROTO_ATA;
 		cts->protocol_version = PROTO_VERSION_UNSPECIFIED;
 		cts->transport = XPORT_SATA;
 		cts->transport_version = XPORT_VERSION_UNSPECIFIED;
 		cts->proto_specific.valid = 0;
 		cts->xport_specific.sata.valid = 0;
-		if (cts->type == CTS_TYPE_CURRENT_SETTINGS)
+		if (cts->type == CTS_TYPE_CURRENT_SETTINGS &&
+		    (ccb->ccb_h.target_id == 15 ||
+		    (ccb->ccb_h.target_id == 0 && !ch->pm_present))) {
 			status = ATA_INL(ch->r_mem, SIIS_P_SSTS) & ATA_SS_SPD_MASK;
-		else
-			status = ATA_INL(ch->r_mem, SIIS_P_SCTL) & ATA_SC_SPD_MASK;
-		if (status & ATA_SS_SPD_GEN3) {
-			cts->xport_specific.sata.bitrate = 600000;
-			cts->xport_specific.sata.valid |= CTS_SATA_VALID_SPEED;
-		} else if (status & ATA_SS_SPD_GEN2) {
-			cts->xport_specific.sata.bitrate = 300000;
-			cts->xport_specific.sata.valid |= CTS_SATA_VALID_SPEED;
-		} else if (status & ATA_SS_SPD_GEN1) {
-			cts->xport_specific.sata.bitrate = 150000;
-			cts->xport_specific.sata.valid |= CTS_SATA_VALID_SPEED;
+			if (status & 0x0f0) {
+				cts->xport_specific.sata.revision =
+				    (status & 0x0f0) >> 4;
+				cts->xport_specific.sata.valid |=
+				    CTS_SATA_VALID_REVISION;
+			}
+		} else {
+			cts->xport_specific.sata.revision = d->revision;
+			cts->xport_specific.sata.valid |= CTS_SATA_VALID_REVISION;
 		}
+		cts->xport_specific.sata.mode = d->mode;
+		cts->xport_specific.sata.valid |= CTS_SATA_VALID_MODE;
+		cts->xport_specific.sata.bytecount = d->bytecount;
+		cts->xport_specific.sata.valid |= CTS_SATA_VALID_BYTECOUNT;
 		cts->xport_specific.sata.pm_present = ch->pm_present;
 		cts->xport_specific.sata.valid |= CTS_SATA_VALID_PM;
+		cts->xport_specific.sata.tags = d->tags;
+		cts->xport_specific.sata.valid |= CTS_SATA_VALID_TAGS;
 		ccb->ccb_h.status = CAM_REQ_CMP;
 		xpt_done(ccb);
 		break;
diff --git a/sys/dev/siis/siis.h b/sys/dev/siis/siis.h
index 20de88fd94d..f98d204384b 100644
--- a/sys/dev/siis/siis.h
+++ b/sys/dev/siis/siis.h
@@ -304,6 +304,12 @@ struct siis_cmd {
 #define SIIS_PRB_INTERRUPT_MASK		0x0040
 #define SIIS_PRB_SOFT_RESET		0x0080
     u_int16_t			protocol_override;
+#define SIIS_PRB_PROTO_PACKET		0x0001
+#define SIIS_PRB_PROTO_TCQ		0x0002
+#define SIIS_PRB_PROTO_NCQ		0x0004
+#define SIIS_PRB_PROTO_READ		0x0008
+#define SIIS_PRB_PROTO_WRITE		0x0010
+#define SIIS_PRB_PROTO_TRANSPARENT	0x0020
     u_int32_t			transfer_count;
     u_int8_t			fis[24];
     union {
@@ -346,6 +352,13 @@ struct siis_slot {
     struct callout              timeout;        /* Execution timeout */
 };
 
+struct siis_device {
+	int			revision;
+	int			mode;
+	u_int			bytecount;
+	u_int			tags;
+};
+
 /* structure describing an ATA channel */
 struct siis_channel {
 	device_t		dev;            /* Device handle */
@@ -356,14 +369,15 @@ struct siis_channel {
 	struct ata_dma		dma;            /* DMA data */
 	struct cam_sim		*sim;
 	struct cam_path		*path;
+	int			quirks;
 	int			pm_level;	/* power management level */
-	int			sata_rev;	/* Maximum allowed SATA generation */
 
 	struct siis_slot	slot[SIIS_MAX_SLOTS];
 	union ccb		*hold[SIIS_MAX_SLOTS];
 	struct mtx		mtx;		/* state lock */
 	int			devices;        /* What is present */
 	int			pm_present;	/* PM presence reported */
+	uint32_t		oslots;		/* Occupied slots */
 	uint32_t		rslots;		/* Running slots */
 	uint32_t		aslots;		/* Slots with atomic commands */
 	uint32_t		eslots;		/* Slots in error */
@@ -374,8 +388,10 @@ struct siis_channel {
 	int			readlog;	/* Our READ LOG active */
 	int			fatalerr;	/* Fatal error happend */
 	int			recovery;	/* Some slots are in error */
-	int			lastslot;	/* Last used slot */
 	union ccb		*frozen;	/* Frozen command */
+
+	struct siis_device	user[16];	/* User-specified settings */
+	struct siis_device	curr[16];	/* Current settings */
 };
 
 /* structure describing a SIIS controller */
@@ -391,7 +407,9 @@ struct siis_controller {
 		void			*handle;
 		int			r_irq_rid;
 	} irq;
+	int			quirks;
 	int			channels;
+	uint32_t		gctl;
 	struct {
 		void			(*function)(void *);
 		void			*argument;
diff --git a/sys/dev/sn/if_sn.c b/sys/dev/sn/if_sn.c
index 923c0285784..217d811cb0a 100644
--- a/sys/dev/sn/if_sn.c
+++ b/sys/dev/sn/if_sn.c
@@ -82,6 +82,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -121,6 +122,7 @@ static int snioctl(struct ifnet * ifp, u_long, caddr_t);
 
 static void snresume(struct ifnet *);
 
+static void snintr_locked(struct sn_softc *);
 static void sninit_locked(void *);
 static void snstart_locked(struct ifnet *);
 
@@ -128,7 +130,7 @@ static void sninit(void *);
 static void snread(struct ifnet *);
 static void snstart(struct ifnet *);
 static void snstop(struct sn_softc *);
-static void snwatchdog(struct ifnet *);
+static void snwatchdog(void *);
 
 static void sn_setmcast(struct sn_softc *);
 static int sn_getmcf(struct ifnet *ifp, u_char *mcf);
@@ -170,6 +172,7 @@ sn_attach(device_t dev)
 	}
 
 	SN_LOCK_INIT(sc);
+	callout_init_mtx(&sc->watchdog, &sc->sc_mtx, 0);
 	snstop(sc);
 	sc->pages_wanted = -1;
 
@@ -202,13 +205,11 @@ sn_attach(device_t dev)
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_start = snstart;
 	ifp->if_ioctl = snioctl;
-	ifp->if_watchdog = snwatchdog;
 	ifp->if_init = sninit;
 	ifp->if_baudrate = 10000000;
 	IFQ_SET_MAXLEN(&ifp->if_snd, IFQ_MAXLEN);
 	ifp->if_snd.ifq_maxlen = IFQ_MAXLEN;
 	IFQ_SET_READY(&ifp->if_snd);
-	ifp->if_timer = 0;
 
 	ether_ifattach(ifp, eaddr);
 
@@ -233,9 +234,11 @@ sn_detach(device_t dev)
 	struct sn_softc	*sc = device_get_softc(dev);
 	struct ifnet	*ifp = sc->ifp;
 
-	snstop(sc);
-	ifp->if_drv_flags &= ~IFF_DRV_RUNNING; 
 	ether_ifdetach(ifp);
+	SN_LOCK(sc);
+	snstop(sc);
+	SN_UNLOCK(sc);
+	callout_drain(&sc->watchdog);
 	sn_deactivate(dev);
 	if_free(ifp);
 	SN_LOCK_DESTROY(sc);
@@ -342,6 +345,7 @@ sninit_locked(void *xsc)
 	 */
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
+	callout_reset(&sc->watchdog, hz, snwatchdog, sc);
 
 	/*
 	 * Attempt to push out any waiting packets.
@@ -463,7 +467,7 @@ startagain:
 		CSR_WRITE_1(sc, INTR_MASK_REG_B, mask);
 		sc->intr_mask = mask;
 
-		ifp->if_timer = 1;
+		sc->timer = 1;
 		ifp->if_drv_flags |= IFF_DRV_OACTIVE;
 		sc->pages_wanted = numPages;
 		return;
@@ -548,7 +552,7 @@ startagain:
 	CSR_WRITE_2(sc, MMU_CMD_REG_W, MMUCR_ENQUEUE);
 
 	ifp->if_drv_flags |= IFF_DRV_OACTIVE;
-	ifp->if_timer = 1;
+	sc->timer = 1;
 
 	BPF_MTAP(ifp, top);
 
@@ -657,7 +661,7 @@ snresume(struct ifnet *ifp)
 	packet_no = CSR_READ_1(sc, ALLOC_RESULT_REG_B);
 	if (packet_no & ARR_FAILED) {
 		if_printf(ifp, "Memory allocation failed.  Weird.\n");
-		ifp->if_timer = 1;
+		sc->timer = 1;
 		goto try_start;
 	}
 	/*
@@ -755,24 +759,32 @@ try_start:
 	 * Now pass control to snstart() to queue any additional packets
 	 */
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-	snstart(ifp);
+	snstart_locked(ifp);
 
 	/*
 	 * We've sent something, so we're active.  Set a watchdog in case the
 	 * TX_EMPTY interrupt is lost.
 	 */
 	ifp->if_drv_flags |= IFF_DRV_OACTIVE;
-	ifp->if_timer = 1;
+	sc->timer = 1;
 
 	return;
 }
 
-
 void
 sn_intr(void *arg)
 {
-	int             status, interrupts;
 	struct sn_softc *sc = (struct sn_softc *) arg;
+
+	SN_LOCK(sc);
+	snintr_locked(sc);
+	SN_UNLOCK(sc);
+}
+
+static void
+snintr_locked(struct sn_softc *sc)
+{
+	int             status, interrupts;
 	struct ifnet   *ifp = sc->ifp;
 
 	/*
@@ -783,12 +795,10 @@ sn_intr(void *arg)
 	uint16_t        tx_status;
 	uint16_t        card_stats;
 
-	SN_LOCK(sc);
-
 	/*
 	 * Clear the watchdog.
 	 */
-	ifp->if_timer = 0;
+	sc->timer = 0;
 
 	SMC_SELECT_BANK(sc, 2);
 
@@ -981,7 +991,6 @@ out:
 	mask |= CSR_READ_1(sc, INTR_MASK_REG_B);
 	CSR_WRITE_1(sc, INTR_MASK_REG_B, mask);
 	sc->intr_mask = mask;
-	SN_UNLOCK(sc);
 }
 
 static void
@@ -1136,7 +1145,6 @@ snioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 		SN_LOCK(sc);
 		if ((ifp->if_flags & IFF_UP) == 0 &&
 		    ifp->if_drv_flags & IFF_DRV_RUNNING) {
-			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 			snstop(sc);
 		} else {
 			/* reinitialize card on any parameter change */
@@ -1161,9 +1169,16 @@ snioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 }
 
 static void
-snwatchdog(struct ifnet *ifp)
+snwatchdog(void *arg)
 {
-	sn_intr(ifp->if_softc);
+	struct sn_softc *sc;
+
+	sc = arg;
+	SN_ASSERT_LOCKED(sc);
+	callout_reset(&sc->watchdog, hz, snwatchdog, sc);
+	if (sc->timer == 0 || --sc->timer > 0)
+		return;
+	snintr_locked(sc);
 }
 
 
@@ -1193,7 +1208,9 @@ snstop(struct sn_softc *sc)
 	/*
 	 * Cancel watchdog.
 	 */
-	ifp->if_timer = 0;
+	sc->timer = 0;
+	callout_stop(&sc->watchdog);
+	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
 }
 
 
@@ -1220,8 +1237,6 @@ sn_activate(device_t dev)
 		sn_deactivate(dev);
 		return ENOMEM;
 	}
-	sc->bst = rman_get_bustag(sc->port_res);
-	sc->bsh = rman_get_bushandle(sc->port_res);
 	return (0);
 }
 
diff --git a/sys/dev/sn/if_sn_pccard.c b/sys/dev/sn/if_sn_pccard.c
index 034f51a7045..5c0d4eeeac3 100644
--- a/sys/dev/sn/if_sn_pccard.c
+++ b/sys/dev/sn/if_sn_pccard.c
@@ -271,8 +271,6 @@ sn_pccard_megahertz_activate(device_t dev)
 		sn_deactivate(dev);
 		return ENOMEM;
 	}
-	sc->bst = rman_get_bustag(sc->port_res);
-	sc->bsh = rman_get_bushandle(sc->port_res);
 	return 0;
 }
 
diff --git a/sys/dev/sn/if_snvar.h b/sys/dev/sn/if_snvar.h
index 048f23a41fc..bd4f31285c6 100644
--- a/sys/dev/sn/if_snvar.h
+++ b/sys/dev/sn/if_snvar.h
@@ -32,9 +32,9 @@
 
 struct sn_softc {
 	struct ifnet    *ifp;
-	bus_space_tag_t	bst;
-	bus_space_handle_t bsh;
 	struct mtx sc_mtx;
+	struct callout watchdog;
+	int		timer;
 	int             pages_wanted;	/* Size of outstanding MMU ALLOC */
 	int             intr_mask;	/* Most recently set interrupt mask */
 	device_t	dev;
@@ -55,20 +55,20 @@ void	sn_intr(void *);
 int	sn_activate(device_t);
 void	sn_deactivate(device_t);
 
-#define CSR_READ_1(sc, off) (bus_space_read_1((sc)->bst, (sc)->bsh, off))
-#define CSR_READ_2(sc, off) (bus_space_read_2((sc)->bst, (sc)->bsh, off))
+#define CSR_READ_1(sc, off) (bus_read_1((sc)->port_res, off))
+#define CSR_READ_2(sc, off) (bus_read_2((sc)->port_res, off))
 #define CSR_WRITE_1(sc, off, val) \
-	bus_space_write_1(sc->bst, sc->bsh, off, val)
+	bus_write_1((sc)->port_res, off, val)
 #define CSR_WRITE_2(sc, off, val) \
-	bus_space_write_2(sc->bst, sc->bsh, off, val)
+	bus_write_2((sc)->port_res, off, val)
 #define CSR_WRITE_MULTI_1(sc, off, addr, count) \
-	bus_space_write_multi_1(sc->bst, sc->bsh, off, addr, count)
+	bus_write_multi_1((sc)->port_res, off, addr, count)
 #define CSR_WRITE_MULTI_2(sc, off, addr, count) \
-	bus_space_write_multi_2(sc->bst, sc->bsh, off, addr, count)
+	bus_write_multi_2((sc)->port_res, off, addr, count)
 #define CSR_READ_MULTI_1(sc, off, addr, count) \
-	bus_space_read_multi_1(sc->bst, sc->bsh, off, addr, count)
+	bus_read_multi_1((sc)->port_res, off, addr, count)
 #define CSR_READ_MULTI_2(sc, off, addr, count) \
-	bus_space_read_multi_2(sc->bst, sc->bsh, off, addr, count)
+	bus_read_multi_2((sc)->port_res, off, addr, count)
 
 #define SN_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
 #define	SN_UNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx)
diff --git a/sys/dev/sound/pci/hda/hdac.c b/sys/dev/sound/pci/hda/hdac.c
index 21cb0a14a7a..7a9dd82a2c7 100644
--- a/sys/dev/sound/pci/hda/hdac.c
+++ b/sys/dev/sound/pci/hda/hdac.c
@@ -86,7 +86,7 @@
 
 #include "mixer_if.h"
 
-#define HDA_DRV_TEST_REV	"20090929_0137"
+#define HDA_DRV_TEST_REV	"20091113_0138"
 
 SND_DECLARE_FILE("$FreeBSD$");
 
@@ -315,6 +315,7 @@ SND_DECLARE_FILE("$FreeBSD$");
  * (see HDA_CODEC_STAC9221 below).
  */
 #define APPLE_INTEL_MAC		0x76808384
+#define APPLE_MACBOOKPRO55	0xcb7910de
 
 /* LG Electronics */
 #define LG_VENDORID		0x1854
@@ -605,6 +606,12 @@ static const struct {
 #define HDA_CODEC_CONSTRUCT(vendor, id) \
 		(((uint32_t)(vendor##_VENDORID) << 16) | ((id) & 0xffff))
 
+/* Cirrus Logic */
+#define CIRRUSLOGIC_VENDORID	0x1013
+#define HDA_CODEC_CS4206	HDA_CODEC_CONSTRUCT(CIRRUSLOGIC, 0x4206)
+#define HDA_CODEC_CS4207	HDA_CODEC_CONSTRUCT(CIRRUSLOGIC, 0x4207)
+#define HDA_CODEC_CSXXXX	HDA_CODEC_CONSTRUCT(CIRRUSLOGIC, 0xffff)
+
 /* Realtek */
 #define REALTEK_VENDORID	0x10ec
 #define HDA_CODEC_ALC260	HDA_CODEC_CONSTRUCT(REALTEK, 0x0260)
@@ -677,7 +684,9 @@ static const struct {
 #define HDA_CODEC_IDT92HD700D	HDA_CODEC_CONSTRUCT(SIGMATEL, 0x7639)
 #define HDA_CODEC_IDT92HD206X	HDA_CODEC_CONSTRUCT(SIGMATEL, 0x7645)
 #define HDA_CODEC_IDT92HD206D	HDA_CODEC_CONSTRUCT(SIGMATEL, 0x7646)
+#define HDA_CODEC_CXD9872RDK	HDA_CODEC_CONSTRUCT(SIGMATEL, 0x7661)
 #define HDA_CODEC_STAC9872AK	HDA_CODEC_CONSTRUCT(SIGMATEL, 0x7662)
+#define HDA_CODEC_CXD9872AKD	HDA_CODEC_CONSTRUCT(SIGMATEL, 0x7664)
 #define HDA_CODEC_STAC9221	HDA_CODEC_CONSTRUCT(SIGMATEL, 0x7680)
 #define HDA_CODEC_STAC922XD	HDA_CODEC_CONSTRUCT(SIGMATEL, 0x7681)
 #define HDA_CODEC_STAC9221_A2	HDA_CODEC_CONSTRUCT(SIGMATEL, 0x7682)
@@ -725,6 +734,7 @@ static const struct {
 #define HDA_CODEC_CX20549	HDA_CODEC_CONSTRUCT(CONEXANT, 0x5045)
 #define HDA_CODEC_CX20551	HDA_CODEC_CONSTRUCT(CONEXANT, 0x5047)
 #define HDA_CODEC_CX20561	HDA_CODEC_CONSTRUCT(CONEXANT, 0x5051)
+#define HDA_CODEC_CX20582	HDA_CODEC_CONSTRUCT(CONEXANT, 0x5066)
 #define HDA_CODEC_CXXXXX	HDA_CODEC_CONSTRUCT(CONEXANT, 0xffff)
 
 /* VIA */
@@ -764,6 +774,16 @@ static const struct {
 #define HDA_CODEC_VT1702_5	HDA_CODEC_CONSTRUCT(VIA, 0x5398)
 #define HDA_CODEC_VT1702_6	HDA_CODEC_CONSTRUCT(VIA, 0x6398)
 #define HDA_CODEC_VT1702_7	HDA_CODEC_CONSTRUCT(VIA, 0x7398)
+#define HDA_CODEC_VT1716S_0	HDA_CODEC_CONSTRUCT(VIA, 0x0433)
+#define HDA_CODEC_VT1716S_1	HDA_CODEC_CONSTRUCT(VIA, 0xa721)
+#define HDA_CODEC_VT1718S_0	HDA_CODEC_CONSTRUCT(VIA, 0x0428)
+#define HDA_CODEC_VT1718S_1	HDA_CODEC_CONSTRUCT(VIA, 0x4428)
+#define HDA_CODEC_VT1812	HDA_CODEC_CONSTRUCT(VIA, 0x0448)
+#define HDA_CODEC_VT1818S	HDA_CODEC_CONSTRUCT(VIA, 0x0440)
+#define HDA_CODEC_VT1828S	HDA_CODEC_CONSTRUCT(VIA, 0x4441)
+#define HDA_CODEC_VT2002P_0	HDA_CODEC_CONSTRUCT(VIA, 0x0438)
+#define HDA_CODEC_VT2002P_1	HDA_CODEC_CONSTRUCT(VIA, 0x4438)
+#define HDA_CODEC_VT2020	HDA_CODEC_CONSTRUCT(VIA, 0x0441)
 #define HDA_CODEC_VTXXXX	HDA_CODEC_CONSTRUCT(VIA, 0xffff)
 
 /* ATI */
@@ -786,6 +806,7 @@ static const struct {
 #define HDA_CODEC_INTELG45_2	HDA_CODEC_CONSTRUCT(INTEL, 0x2802)
 #define HDA_CODEC_INTELG45_3	HDA_CODEC_CONSTRUCT(INTEL, 0x2803)
 #define HDA_CODEC_INTELG45_4	HDA_CODEC_CONSTRUCT(INTEL, 0x29fb)
+#define HDA_CODEC_INTELQ57	HDA_CODEC_CONSTRUCT(INTEL, 0x0054)
 #define HDA_CODEC_INTELXXXX	HDA_CODEC_CONSTRUCT(INTEL, 0xffff)
 
 /* Codecs */
@@ -793,6 +814,8 @@ static const struct {
 	uint32_t id;
 	char *name;
 } hdac_codecs[] = {
+	{ HDA_CODEC_CS4206,    "Cirrus Logic CS4206" },
+	{ HDA_CODEC_CS4207,    "Cirrus Logic CS4207" },
 	{ HDA_CODEC_ALC260,    "Realtek ALC260" },
 	{ HDA_CODEC_ALC262,    "Realtek ALC262" },
 	{ HDA_CODEC_ALC267,    "Realtek ALC267" },
@@ -827,6 +850,8 @@ static const struct {
 	{ HDA_CODEC_AD1988B,   "Analog Devices AD1988B" },
 	{ HDA_CODEC_AD1989B,   "Analog Devices AD1989B" },
 	{ HDA_CODEC_CMI9880,   "CMedia CMI9880" },
+	{ HDA_CODEC_CXD9872RDK, "Sigmatel CXD9872RD/K" },
+	{ HDA_CODEC_CXD9872AKD, "Sigmatel CXD9872AKD" },
 	{ HDA_CODEC_STAC9200D, "Sigmatel STAC9200D" },
 	{ HDA_CODEC_STAC9204X, "Sigmatel STAC9204X" },
 	{ HDA_CODEC_STAC9204D, "Sigmatel STAC9204D" },
@@ -881,6 +906,7 @@ static const struct {
 	{ HDA_CODEC_CX20549,   "Conexant CX20549 (Venice)" },
 	{ HDA_CODEC_CX20551,   "Conexant CX20551 (Waikiki)" },
 	{ HDA_CODEC_CX20561,   "Conexant CX20561 (Hermosa)" },
+	{ HDA_CODEC_CX20582,   "Conexant CX20582 (Pebble)" },
 	{ HDA_CODEC_VT1708_8,  "VIA VT1708_8" },
 	{ HDA_CODEC_VT1708_9,  "VIA VT1708_9" },
 	{ HDA_CODEC_VT1708_A,  "VIA VT1708_A" },
@@ -917,6 +943,16 @@ static const struct {
 	{ HDA_CODEC_VT1702_5, "VIA VT1702_5" },
 	{ HDA_CODEC_VT1702_6, "VIA VT1702_6" },
 	{ HDA_CODEC_VT1702_7, "VIA VT1702_7" },
+	{ HDA_CODEC_VT1716S_0, "VIA VT1716S_0" },
+	{ HDA_CODEC_VT1716S_1, "VIA VT1716S_1" },
+	{ HDA_CODEC_VT1718S_0, "VIA VT1718S_0" },
+	{ HDA_CODEC_VT1718S_1, "VIA VT1718S_1" },
+	{ HDA_CODEC_VT1812, "VIA VT1812" },
+	{ HDA_CODEC_VT1818S, "VIA VT1818S" },
+	{ HDA_CODEC_VT1828S, "VIA VT1828S" },
+	{ HDA_CODEC_VT2002P_0, "VIA VT2002P_0" },
+	{ HDA_CODEC_VT2002P_1, "VIA VT2002P_1" },
+	{ HDA_CODEC_VT2020, "VIA VT2020" },
 	{ HDA_CODEC_ATIRS600_1,"ATI RS600 HDMI" },
 	{ HDA_CODEC_ATIRS600_2,"ATI RS600 HDMI" },
 	{ HDA_CODEC_ATIRS690,  "ATI RS690/780 HDMI" },
@@ -930,11 +966,13 @@ static const struct {
 	{ HDA_CODEC_INTELG45_2, "Intel G45 HDMI" },
 	{ HDA_CODEC_INTELG45_3, "Intel G45 HDMI" },
 	{ HDA_CODEC_INTELG45_4, "Intel G45 HDMI" },
+	{ HDA_CODEC_INTELQ57, "Intel Q57 HDMI" },
 	{ HDA_CODEC_SII1390,   "Silicon Image SiI1390 HDMI" },
 	{ HDA_CODEC_SII1392,   "Silicon Image SiI1392 HDMI" },
 	/* Unknown codec */
 	{ HDA_CODEC_ALCXXXX,   "Realtek (Unknown)" },
 	{ HDA_CODEC_ADXXXX,    "Analog Devices (Unknown)" },
+	{ HDA_CODEC_CSXXXX,    "Cirrus Logic (Unknown)" },
 	{ HDA_CODEC_CMIXXXX,   "CMedia (Unknown)" },
 	{ HDA_CODEC_STACXXXX,  "Sigmatel (Unknown)" },
 	{ HDA_CODEC_SIIXXXX,   "Silicon Image (Unknown)" },
@@ -4645,6 +4683,8 @@ static const struct {
 	    HDA_QUIRK_GPIO0 | HDA_QUIRK_OVREF50, 0},
 	{ APPLE_INTEL_MAC, HDA_CODEC_STAC9221,
 	    HDA_QUIRK_GPIO0 | HDA_QUIRK_GPIO1, 0 },
+	{ APPLE_MACBOOKPRO55, HDA_CODEC_CS4206,
+	    HDA_QUIRK_GPIO1 | HDA_QUIRK_GPIO3, 0 },
 	{ DELL_D630_SUBVENDOR, HDA_CODEC_STAC9205X,
 	    HDA_QUIRK_GPIO0, 0 },
 	{ DELL_V1400_SUBVENDOR, HDA_CODEC_STAC9228X,
diff --git a/sys/dev/sound/pcm/channel.c b/sys/dev/sound/pcm/channel.c
index 42ea86faab4..ec7cb9802ac 100644
--- a/sys/dev/sound/pcm/channel.c
+++ b/sys/dev/sound/pcm/channel.c
@@ -220,7 +220,7 @@ MTX_SYSINIT(pcm_syncgroup, &snd_pcm_syncgroups_mtx, "PCM channel sync group lock
  *
  * See SNDCTL_DSP_SYNCGROUP for more information.
  */
-struct pcm_synclist snd_pcm_syncgroups = SLIST_HEAD_INITIALIZER(head);
+struct pcm_synclist snd_pcm_syncgroups = SLIST_HEAD_INITIALIZER(snd_pcm_syncgroups);
 
 static void
 chn_lockinit(struct pcm_channel *c, int dir)
diff --git a/sys/dev/sound/pcm/dsp.c b/sys/dev/sound/pcm/dsp.c
index 66faef13c15..c78b1902b41 100644
--- a/sys/dev/sound/pcm/dsp.c
+++ b/sys/dev/sound/pcm/dsp.c
@@ -2179,7 +2179,8 @@ dsp_poll(struct cdev *i_dev, int events, struct thread *td)
 }
 
 static int
-dsp_mmap(struct cdev *i_dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
+dsp_mmap(struct cdev *i_dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nprot, vm_memattr_t *memattr)
 {
 	struct snddev_info *d;
 	struct pcm_channel *wrch, *rdch, *c;
diff --git a/sys/dev/sound/pcm/sndstat.c b/sys/dev/sound/pcm/sndstat.c
index 6d35803de87..293c777edfe 100644
--- a/sys/dev/sound/pcm/sndstat.c
+++ b/sys/dev/sound/pcm/sndstat.c
@@ -79,7 +79,7 @@ static int sndstat_files = 0;
 	}								\
 } while (0)
 
-static SLIST_HEAD(, sndstat_entry) sndstat_devlist = SLIST_HEAD_INITIALIZER(none);
+static SLIST_HEAD(, sndstat_entry) sndstat_devlist = SLIST_HEAD_INITIALIZER(sndstat_devlist);
 
 int snd_verbose = 1;
 TUNABLE_INT("hw.snd.verbose", &snd_verbose);
diff --git a/sys/dev/sound/usb/uaudio.c b/sys/dev/sound/usb/uaudio.c
index 2ac8766e828..dfbeb02c36e 100644
--- a/sys/dev/sound/usb/uaudio.c
+++ b/sys/dev/sound/usb/uaudio.c
@@ -87,20 +87,27 @@
 #include 
 #include "feeder_if.h"
 
-static int uaudio_default_rate = 96000;
+static int uaudio_default_rate = 0;		/* use rate list */
 static int uaudio_default_bits = 32;
-static int uaudio_default_channels = 2;
+static int uaudio_default_channels = 0;		/* use default */
 
 #if USB_DEBUG
 static int uaudio_debug = 0;
 
 SYSCTL_NODE(_hw_usb, OID_AUTO, uaudio, CTLFLAG_RW, 0, "USB uaudio");
+
 SYSCTL_INT(_hw_usb_uaudio, OID_AUTO, debug, CTLFLAG_RW,
     &uaudio_debug, 0, "uaudio debug level");
+
+TUNABLE_INT("hw.usb.uaudio.default_rate", &uaudio_default_rate);
 SYSCTL_INT(_hw_usb_uaudio, OID_AUTO, default_rate, CTLFLAG_RW,
     &uaudio_default_rate, 0, "uaudio default sample rate");
+
+TUNABLE_INT("hw.usb.uaudio.default_bits", &uaudio_default_bits);
 SYSCTL_INT(_hw_usb_uaudio, OID_AUTO, default_bits, CTLFLAG_RW,
     &uaudio_default_bits, 0, "uaudio default sample bits");
+
+TUNABLE_INT("hw.usb.uaudio.default_channels", &uaudio_default_channels);
 SYSCTL_INT(_hw_usb_uaudio, OID_AUTO, default_channels, CTLFLAG_RW,
     &uaudio_default_channels, 0, "uaudio default sample channels");
 #endif
@@ -118,7 +125,6 @@ struct uaudio_mixer_node {
 	int32_t	maxval;
 #define	MIX_MAX_CHAN 8
 	int32_t	wValue[MIX_MAX_CHAN];	/* using nchan */
-	uint32_t mod;		/* modulus */
 	uint32_t mul;
 	uint32_t ctl;
 
@@ -170,10 +176,16 @@ struct uaudio_chan {
 	uint32_t intr_size;		/* in bytes */
 	uint32_t intr_frames;		/* in units */
 	uint32_t sample_rate;
+	uint32_t frames_per_second;
+	uint32_t sample_rem;
+	uint32_t sample_curr;
+
 	uint32_t format;
 	uint32_t pcm_format[2];
 
-	uint16_t bytes_per_frame;
+	uint16_t bytes_per_frame[2];
+
+	uint16_t sample_size;
 
 	uint8_t	valid;
 	uint8_t	iface_index;
@@ -331,7 +343,7 @@ static usb_callback_t umidi_write_clear_stall_callback;
 static usb_callback_t umidi_bulk_write_callback;
 
 static void	uaudio_chan_fill_info_sub(struct uaudio_softc *,
-		    struct usb_device *, uint32_t, uint16_t, uint8_t, uint8_t);
+		    struct usb_device *, uint32_t, uint8_t, uint8_t);
 static void	uaudio_chan_fill_info(struct uaudio_softc *,
 		    struct usb_device *);
 static void	uaudio_mixer_add_ctl_sub(struct uaudio_softc *,
@@ -560,6 +572,13 @@ uaudio_probe(device_t dev)
 		else
 			return (0);
 	}
+
+	/* check for MIDI stream */
+
+	if ((uaa->info.bInterfaceClass == UICLASS_AUDIO) &&
+	    (uaa->info.bInterfaceSubClass == UISUBCLASS_MIDISTREAM)) {
+		return (0);
+	}
 	return (ENXIO);
 }
 
@@ -781,8 +800,7 @@ uaudio_chan_dump_ep_desc(const usb2_endpoint_descriptor_audio_t *ed)
 
 static void
 uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usb_device *udev,
-    uint32_t rate, uint16_t fps, uint8_t channels,
-    uint8_t bit_resolution)
+    uint32_t rate, uint8_t channels, uint8_t bit_resolution)
 {
 	struct usb_descriptor *desc = NULL;
 	const struct usb2_audio_streaming_interface_descriptor *asid = NULL;
@@ -805,7 +823,6 @@ uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usb_device *udev,
 	uint8_t bBitResolution;
 	uint8_t x;
 	uint8_t audio_if = 0;
-	uint8_t sample_size;
 
 	while ((desc = usb_desc_foreach(cd, desc))) {
 
@@ -1034,16 +1051,10 @@ uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usb_device *udev,
 						chan->usb2_cfg =
 						    uaudio_cfg_play;
 
-					sample_size = ((
+					chan->sample_size = ((
 					    UAUDIO_MAX_CHAN(chan->p_asf1d->bNrChannels) *
 					    chan->p_asf1d->bBitResolution) / 8);
 
-					/*
-					 * NOTE: "chan->bytes_per_frame"
-					 * should not be zero!
-					 */
-					chan->bytes_per_frame = ((rate / fps) * sample_size);
-
 					if (sc->sc_sndstat_valid) {
 						sbuf_printf(&sc->sc_sndstat, "\n\t"
 						    "mode %d.%d:(%s) %dch, %d/%dbit, %s, %dHz",
@@ -1061,12 +1072,32 @@ uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usb_device *udev,
 	}
 }
 
+/* This structure defines all the supported rates. */
+
+static const uint32_t uaudio_rate_list[] = {
+	96000,
+	88000,
+	80000,
+	72000,
+	64000,
+	56000,
+	48000,
+	44100,
+	40000,
+	32000,
+	24000,
+	22050,
+	16000,
+	11025,
+	8000,
+	0
+};
+
 static void
 uaudio_chan_fill_info(struct uaudio_softc *sc, struct usb_device *udev)
 {
 	uint32_t rate = uaudio_default_rate;
-	uint32_t z;
-	uint16_t fps = usbd_get_isoc_fps(udev);
+	uint8_t z;
 	uint8_t bits = uaudio_default_bits;
 	uint8_t y;
 	uint8_t channels = uaudio_default_channels;
@@ -1077,14 +1108,24 @@ uaudio_chan_fill_info(struct uaudio_softc *sc, struct usb_device *udev)
 		/* set a valid value */
 		bits = 32;
 	}
-	rate -= (rate % fps);
-	if ((rate == 0) || (rate > 192000)) {
-		/* set a valid value */
-		rate = 192000 - (192000 % fps);
-	}
-	if ((channels == 0) || (channels > 2)) {
-		/* set a valid value */
-		channels = 2;
+	if (channels == 0) {
+		switch (usbd_get_speed(udev)) {
+		case USB_SPEED_LOW:
+		case USB_SPEED_FULL:
+			/*
+			 * Due to high bandwidth usage and problems
+			 * with HIGH-speed split transactions we
+			 * disable surround setups on FULL-speed USB
+			 * by default
+			 */
+			channels = 2;
+			break;
+		default:
+			channels = 16;
+			break;
+		}
+	} else if (channels > 16) {
+		channels = 16;
 	}
 	if (sbuf_new(&sc->sc_sndstat, NULL, 4096, SBUF_AUTOEXTEND)) {
 		sc->sc_sndstat_valid = 1;
@@ -1093,8 +1134,14 @@ uaudio_chan_fill_info(struct uaudio_softc *sc, struct usb_device *udev)
 
 	for (x = channels; x; x--) {
 		for (y = bits; y; y -= 8) {
-			for (z = rate; z; z -= fps) {
-				uaudio_chan_fill_info_sub(sc, udev, z, fps, x, y);
+
+			/* try user defined rate, if any */
+			if (rate != 0)
+				uaudio_chan_fill_info_sub(sc, udev, rate, x, y);
+
+			/* try find a matching rate, if any */
+			for (z = 0; uaudio_rate_list[z]; z++) {
+				uaudio_chan_fill_info_sub(sc, udev, uaudio_rate_list[z], x, y);
 
 				if (sc->sc_rec_chan.valid &&
 				    sc->sc_play_chan.valid) {
@@ -1110,18 +1157,6 @@ done:
 	}
 }
 
-/*
- * The following function sets up data size and block count for the
- * next audio transfer.
- */
-static void
-uaudio_setup_blockcount(struct uaudio_chan *ch,
-    uint32_t *total, uint32_t *blockcount)
-{
-	*total = ch->intr_size;
-	*blockcount = ch->intr_frames;
-}
-
 static void
 uaudio_chan_play_callback(struct usb_xfer *xfer, usb_error_t error)
 {
@@ -1131,12 +1166,11 @@ uaudio_chan_play_callback(struct usb_xfer *xfer, usb_error_t error)
 	uint32_t blockcount;
 	uint32_t n;
 	uint32_t offset;
-	int actlen, sumlen;
+	int actlen;
+	int sumlen;
 
 	usbd_xfer_status(xfer, &actlen, &sumlen, NULL, NULL);
 
-	uaudio_setup_blockcount(ch, &total, &blockcount);
-
 	if (ch->end == ch->start) {
 		DPRINTF("no buffer!\n");
 		return;
@@ -1147,22 +1181,39 @@ uaudio_chan_play_callback(struct usb_xfer *xfer, usb_error_t error)
 tr_transferred:
 		if (actlen < sumlen) {
 			DPRINTF("short transfer, "
-			    "%d of %d bytes\n", actlen, total);
+			    "%d of %d bytes\n", actlen, sumlen);
 		}
 		chn_intr(ch->pcm_ch);
 
 	case USB_ST_SETUP:
-		if (ch->bytes_per_frame > usbd_xfer_max_framelen(xfer)) {
+		if (ch->bytes_per_frame[1] > usbd_xfer_max_framelen(xfer)) {
 			DPRINTF("bytes per transfer, %d, "
 			    "exceeds maximum, %d!\n",
-			    ch->bytes_per_frame,
+			    ch->bytes_per_frame[1],
 			    usbd_xfer_max_framelen(xfer));
 			break;
 		}
-		/* setup frame length */
+
+		blockcount = ch->intr_frames;
+
+		/* setup number of frames */
 		usbd_xfer_set_frames(xfer, blockcount);
-		for (n = 0; n != blockcount; n++)
-			usbd_xfer_set_frame_len(xfer, n, ch->bytes_per_frame);
+
+		/* reset total length */
+		total = 0;
+
+		/* setup frame lengths */
+		for (n = 0; n != blockcount; n++) {
+			ch->sample_curr += ch->sample_rem;
+			if (ch->sample_curr >= ch->frames_per_second) {
+				ch->sample_curr -= ch->frames_per_second;
+				usbd_xfer_set_frame_len(xfer, n, ch->bytes_per_frame[1]);
+				total += ch->bytes_per_frame[1];
+			} else {
+				usbd_xfer_set_frame_len(xfer, n, ch->bytes_per_frame[0]);
+				total += ch->bytes_per_frame[0];
+			}
+		}
 
 		DPRINTFN(6, "transfer %d bytes\n", total);
 
@@ -1204,7 +1255,6 @@ uaudio_chan_record_callback(struct usb_xfer *xfer, usb_error_t error)
 	struct usb_page_cache *pc;
 	uint32_t n;
 	uint32_t m;
-	uint32_t total;
 	uint32_t blockcount;
 	uint32_t offset0;
 	uint32_t offset1;
@@ -1216,8 +1266,6 @@ uaudio_chan_record_callback(struct usb_xfer *xfer, usb_error_t error)
 	usbd_xfer_status(xfer, &actlen, NULL, NULL, &nframes);
 	mfl = usbd_xfer_max_framelen(xfer);
 
-	uaudio_setup_blockcount(ch, &total, &blockcount);
-
 	if (ch->end == ch->start) {
 		DPRINTF("no buffer!\n");
 		return;
@@ -1225,12 +1273,8 @@ uaudio_chan_record_callback(struct usb_xfer *xfer, usb_error_t error)
 
 	switch (USB_GET_STATE(xfer)) {
 	case USB_ST_TRANSFERRED:
-		if (actlen < total) {
-			DPRINTF("short transfer, "
-			    "%d of %d bytes\n", actlen, total);
-		} else {
-			DPRINTFN(6, "transferred %d bytes\n", actlen);
-		}
+
+		DPRINTFN(6, "transferred %d bytes\n", actlen);
 
 		offset0 = 0;
 		pc = usbd_xfer_get_frame(xfer, 0);
@@ -1265,6 +1309,8 @@ uaudio_chan_record_callback(struct usb_xfer *xfer, usb_error_t error)
 
 	case USB_ST_SETUP:
 tr_setup:
+		blockcount = ch->intr_frames;
+
 		usbd_xfer_set_frames(xfer, blockcount);
 		for (n = 0; n < blockcount; n++) {
 			usbd_xfer_set_frame_len(xfer, n, mfl);
@@ -1289,6 +1335,8 @@ uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b,
 	    &sc->sc_play_chan : &sc->sc_rec_chan);
 	uint32_t buf_size;
 	uint32_t frames;
+	uint32_t format;
+	uint16_t fps;
 	uint8_t endpoint;
 	uint8_t blocks;
 	uint8_t iface_index;
@@ -1296,7 +1344,9 @@ uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b,
 	uint8_t fps_shift;
 	usb_error_t err;
 
-	if (usbd_get_isoc_fps(sc->sc_udev) < 8000) {
+	fps = usbd_get_isoc_fps(sc->sc_udev);
+
+	if (fps < 8000) {
 		/* FULL speed USB */
 		frames = 8;
 	} else {
@@ -1304,10 +1354,6 @@ uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b,
 		frames = UAUDIO_NFRAMES;
 	}
 
-	/* compute required buffer size */
-
-	buf_size = (ch->bytes_per_frame * frames);
-
 	/* setup play/record format */
 
 	ch->pcm_cap.fmtlist = ch->pcm_format;
@@ -1318,15 +1364,39 @@ uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b,
 	ch->pcm_cap.minspeed = ch->sample_rate;
 	ch->pcm_cap.maxspeed = ch->sample_rate;
 
-	if (ch->p_asf1d->bNrChannels >= 2)
-		ch->pcm_cap.fmtlist[0] =
-		    SND_FORMAT(ch->p_fmt->freebsd_fmt, 2, 0);
-	else
-		ch->pcm_cap.fmtlist[0] =
-		    SND_FORMAT(ch->p_fmt->freebsd_fmt, 1, 0);
+	/* setup mutex and PCM channel */
 
+	ch->pcm_ch = c;
+	ch->pcm_mtx = c->lock;
+
+	format = ch->p_fmt->freebsd_fmt;
+
+	switch (ch->p_asf1d->bNrChannels) {
+	case 2:
+		/* stereo */
+		format = SND_FORMAT(format, 2, 0);
+		break;
+	case 1:
+		/* mono */
+		format = SND_FORMAT(format, 1, 0);
+		break;
+	default:
+		/* surround and more */
+		format = feeder_matrix_default_format(
+		    SND_FORMAT(format, ch->p_asf1d->bNrChannels, 0));
+		break;
+	}
+
+	ch->pcm_cap.fmtlist[0] = format;
 	ch->pcm_cap.fmtlist[1] = 0;
 
+	/* check if format is not supported */
+
+	if (format == 0) {
+		DPRINTF("The selected audio format is not supported\n");
+		goto error;
+	}
+
 	/* set alternate interface corresponding to the mode */
 
 	endpoint = ch->p_ed1->bEndpointAddress;
@@ -1366,10 +1436,27 @@ uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b,
 
 	fps_shift = usbd_xfer_get_fps_shift(ch->xfer[0]);
 
-	/* setup frame sizes */
+	/* down shift number of frames per second, if any */
+	fps >>= fps_shift;
+	frames >>= fps_shift;
+
+	/* bytes per frame should not be zero */
+	ch->bytes_per_frame[0] = ((ch->sample_rate / fps) * ch->sample_size);
+	ch->bytes_per_frame[1] = (((ch->sample_rate + fps - 1) / fps) * ch->sample_size);
+
+	/* setup data rate dithering, if any */
+	ch->frames_per_second = fps;
+	ch->sample_rem = ch->sample_rate % fps;
+	ch->sample_curr = 0;
+	ch->frames_per_second = fps;
+
+	/* compute required buffer size */
+	buf_size = (ch->bytes_per_frame[1] * frames);
+
 	ch->intr_size = buf_size;
-	ch->intr_frames = (frames >> fps_shift);
-	ch->bytes_per_frame <<= fps_shift;
+	ch->intr_frames = frames;
+
+	DPRINTF("fps=%d sample_rem=%d\n", fps, ch->sample_rem);
 
 	if (ch->intr_frames == 0) {
 		DPRINTF("frame shift is too high!\n");
@@ -1391,8 +1478,6 @@ uaudio_chan_init(struct uaudio_softc *sc, struct snd_dbuf *b,
 	ch->start = ch->buf;
 	ch->end = ch->buf + buf_size;
 	ch->cur = ch->buf;
-	ch->pcm_ch = c;
-	ch->pcm_mtx = c->lock;
 	ch->pcm_buf = b;
 
 	if (ch->pcm_mtx == NULL) {
@@ -1570,9 +1655,7 @@ uaudio_mixer_add_ctl(struct uaudio_softc *sc, struct uaudio_mixer_node *mc)
 	if (mc->type == MIX_ON_OFF) {
 		mc->minval = 0;
 		mc->maxval = 1;
-		mc->mod = 1;
 	} else if (mc->type == MIX_SELECTOR) {
-		mc->mod = 1;
 	} else {
 
 		/* determine min and max values */
@@ -1600,11 +1683,8 @@ uaudio_mixer_add_ctl(struct uaudio_softc *sc, struct uaudio_mixer_node *mc)
 
 		/* compute value alignment */
 		res = uaudio_mixer_get(sc->sc_udev, GET_RES, mc);
-		if (res == 0)
-			res = 1;
-		mc->mod = mc->mul / res;
-		if (mc->mod == 0)
-			mc->mod = 1;
+
+		DPRINTF("Resolution = %d\n", (int)res);
 	}
 
 	uaudio_mixer_add_ctl_sub(sc, mc);
@@ -3097,9 +3177,6 @@ uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int32_t val)
 		/* compute actual volume */
 		val = (val * mc->mul) / 255;
 
-		/* align volume level */
-		val = val - (val % mc->mod);
-
 		/* add lower offset */
 		val = val + mc->minval;
 
diff --git a/sys/dev/ste/if_ste.c b/sys/dev/ste/if_ste.c
index f68a97d2e83..07412a50f1f 100644
--- a/sys/dev/ste/if_ste.c
+++ b/sys/dev/ste/if_ste.c
@@ -39,14 +39,19 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
-#include 
-#include 
-#include 
+#include 
+#include 
 #include 
+#include 
+#include 
+#include 
 #include 
+#include 
 #include 
+#include 
 #include 
 
+#include 
 #include 
 #include 
 #include 
@@ -55,14 +60,8 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-#include 
-
-#include               /* for vtophys */
-#include             /* for vtophys */
 #include 
 #include 
-#include 
-#include 
 
 #include 
 #include 
@@ -70,17 +69,18 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
+#include 
+
 /* "device miibus" required.  See GENERIC if you get errors here. */
 #include "miibus_if.h"
 
-#define STE_USEIOSPACE
-
-#include 
-
 MODULE_DEPEND(ste, pci, 1, 1, 1);
 MODULE_DEPEND(ste, ether, 1, 1, 1);
 MODULE_DEPEND(ste, miibus, 1, 1, 1);
 
+/* Define to show Tx error status. */
+#define	STE_SHOW_TXERRORS
+
 /*
  * Various supported device vendors/types and their names.
  */
@@ -91,53 +91,52 @@ static struct ste_type ste_devs[] = {
 	{ 0, 0, NULL }
 };
 
-static int ste_probe(device_t);
-static int ste_attach(device_t);
-static int ste_detach(device_t);
-static void ste_init(void *);
-static void ste_init_locked(struct ste_softc *);
-static void ste_intr(void *);
-static void ste_rxeoc(struct ste_softc *);
-static int ste_rxeof(struct ste_softc *);
-static void ste_txeoc(struct ste_softc *);
-static void ste_txeof(struct ste_softc *);
-static void ste_stats_update(void *);
-static void ste_stop(struct ste_softc *);
-static void ste_reset(struct ste_softc *);
-static int ste_ioctl(struct ifnet *, u_long, caddr_t);
-static int ste_encap(struct ste_softc *, struct ste_chain *, struct mbuf *);
-static void ste_start(struct ifnet *);
-static void ste_start_locked(struct ifnet *);
-static void ste_watchdog(struct ifnet *);
-static int ste_shutdown(device_t);
-static int ste_newbuf(struct ste_softc *, struct ste_chain_onefrag *,
-		struct mbuf *);
-static int ste_ifmedia_upd(struct ifnet *);
-static void ste_ifmedia_upd_locked(struct ifnet *);
-static void ste_ifmedia_sts(struct ifnet *, struct ifmediareq *);
+static int	ste_attach(device_t);
+static int	ste_detach(device_t);
+static int	ste_probe(device_t);
+static int	ste_resume(device_t);
+static int	ste_shutdown(device_t);
+static int	ste_suspend(device_t);
 
-static void ste_mii_sync(struct ste_softc *);
-static void ste_mii_send(struct ste_softc *, u_int32_t, int);
-static int ste_mii_readreg(struct ste_softc *, struct ste_mii_frame *);
-static int ste_mii_writereg(struct ste_softc *, struct ste_mii_frame *);
-static int ste_miibus_readreg(device_t, int, int);
-static int ste_miibus_writereg(device_t, int, int, int);
-static void ste_miibus_statchg(device_t);
-
-static int ste_eeprom_wait(struct ste_softc *);
-static int ste_read_eeprom(struct ste_softc *, caddr_t, int, int, int);
-static void ste_wait(struct ste_softc *);
-static void ste_setmulti(struct ste_softc *);
-static int ste_init_rx_list(struct ste_softc *);
-static void ste_init_tx_list(struct ste_softc *);
-
-#ifdef STE_USEIOSPACE
-#define STE_RES			SYS_RES_IOPORT
-#define STE_RID			STE_PCI_LOIO
-#else
-#define STE_RES			SYS_RES_MEMORY
-#define STE_RID			STE_PCI_LOMEM
-#endif
+static int	ste_dma_alloc(struct ste_softc *);
+static void	ste_dma_free(struct ste_softc *);
+static void	ste_dmamap_cb(void *, bus_dma_segment_t *, int, int);
+static int 	ste_eeprom_wait(struct ste_softc *);
+static int	ste_encap(struct ste_softc *, struct mbuf **,
+		    struct ste_chain *);
+static int	ste_ifmedia_upd(struct ifnet *);
+static void	ste_ifmedia_sts(struct ifnet *, struct ifmediareq *);
+static void	ste_init(void *);
+static void	ste_init_locked(struct ste_softc *);
+static int	ste_init_rx_list(struct ste_softc *);
+static void	ste_init_tx_list(struct ste_softc *);
+static void	ste_intr(void *);
+static int	ste_ioctl(struct ifnet *, u_long, caddr_t);
+static int	ste_mii_readreg(struct ste_softc *, struct ste_mii_frame *);
+static void	ste_mii_send(struct ste_softc *, uint32_t, int);
+static void	ste_mii_sync(struct ste_softc *);
+static int	ste_mii_writereg(struct ste_softc *, struct ste_mii_frame *);
+static int	ste_miibus_readreg(device_t, int, int);
+static void	ste_miibus_statchg(device_t);
+static int	ste_miibus_writereg(device_t, int, int, int);
+static int	ste_newbuf(struct ste_softc *, struct ste_chain_onefrag *);
+static int	ste_read_eeprom(struct ste_softc *, caddr_t, int, int, int);
+static void	ste_reset(struct ste_softc *);
+static void	ste_restart_tx(struct ste_softc *);
+static int	ste_rxeof(struct ste_softc *, int);
+static void	ste_rxfilter(struct ste_softc *);
+static void	ste_setwol(struct ste_softc *);
+static void	ste_start(struct ifnet *);
+static void	ste_start_locked(struct ifnet *);
+static void	ste_stats_clear(struct ste_softc *);
+static void	ste_stats_update(struct ste_softc *);
+static void	ste_stop(struct ste_softc *);
+static void	ste_sysctl_node(struct ste_softc *);
+static void	ste_tick(void *);
+static void	ste_txeoc(struct ste_softc *);
+static void	ste_txeof(struct ste_softc *);
+static void	ste_wait(struct ste_softc *);
+static void	ste_watchdog(struct ste_softc *);
 
 static device_method_t ste_methods[] = {
 	/* Device interface */
@@ -145,6 +144,8 @@ static device_method_t ste_methods[] = {
 	DEVMETHOD(device_attach,	ste_attach),
 	DEVMETHOD(device_detach,	ste_detach),
 	DEVMETHOD(device_shutdown,	ste_shutdown),
+	DEVMETHOD(device_suspend,	ste_suspend),
+	DEVMETHOD(device_resume,	ste_resume),
 
 	/* bus interface */
 	DEVMETHOD(bus_print_child,	bus_generic_print_child),
@@ -169,11 +170,6 @@ static devclass_t ste_devclass;
 DRIVER_MODULE(ste, pci, ste_driver, ste_devclass, 0, 0);
 DRIVER_MODULE(miibus, ste, miibus_driver, miibus_devclass, 0, 0);
 
-SYSCTL_NODE(_hw, OID_AUTO, ste, CTLFLAG_RD, 0, "if_ste parameters");
-
-static int ste_rxsyncs;
-SYSCTL_INT(_hw_ste, OID_AUTO, rxsyncs, CTLFLAG_RW, &ste_rxsyncs, 0, "");
-
 #define STE_SETBIT4(sc, reg, x)				\
 	CSR_WRITE_4(sc, reg, CSR_READ_4(sc, reg) | (x))
 
@@ -194,16 +190,15 @@ SYSCTL_INT(_hw_ste, OID_AUTO, rxsyncs, CTLFLAG_RW, &ste_rxsyncs, 0, "");
 
 
 #define MII_SET(x)		STE_SETBIT1(sc, STE_PHYCTL, x)
-#define MII_CLR(x)		STE_CLRBIT1(sc, STE_PHYCTL, x) 
+#define MII_CLR(x)		STE_CLRBIT1(sc, STE_PHYCTL, x)
 
 /*
  * Sync the PHYs by setting data bit and strobing the clock 32 times.
  */
 static void
-ste_mii_sync(sc)
-	struct ste_softc		*sc;
+ste_mii_sync(struct ste_softc *sc)
 {
-	register int		i;
+	int i;
 
 	MII_SET(STE_PHYCTL_MDIR|STE_PHYCTL_MDATA);
 
@@ -213,20 +208,15 @@ ste_mii_sync(sc)
 		MII_CLR(STE_PHYCTL_MCLK);
 		DELAY(1);
 	}
-
-	return;
 }
 
 /*
  * Clock a series of bits through the MII.
  */
 static void
-ste_mii_send(sc, bits, cnt)
-	struct ste_softc		*sc;
-	u_int32_t		bits;
-	int			cnt;
+ste_mii_send(struct ste_softc *sc, uint32_t bits, int cnt)
 {
-	int			i;
+	int i;
 
 	MII_CLR(STE_PHYCTL_MCLK);
 
@@ -247,12 +237,9 @@ ste_mii_send(sc, bits, cnt)
  * Read an PHY register through the MII.
  */
 static int
-ste_mii_readreg(sc, frame)
-	struct ste_softc		*sc;
-	struct ste_mii_frame	*frame;
-	
+ste_mii_readreg(struct ste_softc *sc, struct ste_mii_frame *frame)
 {
-	int			i, ack;
+	int i, ack;
 
 	/*
 	 * Set up frame for RX.
@@ -261,7 +248,7 @@ ste_mii_readreg(sc, frame)
 	frame->mii_opcode = STE_MII_READOP;
 	frame->mii_turnaround = 0;
 	frame->mii_data = 0;
-	
+
 	CSR_WRITE_2(sc, STE_PHYCTL, 0);
 	/*
  	 * Turn on data xmit.
@@ -299,7 +286,7 @@ ste_mii_readreg(sc, frame)
 	 * need to clock through 16 cycles to keep the PHY(s) in sync.
 	 */
 	if (ack) {
-		for(i = 0; i < 16; i++) {
+		for (i = 0; i < 16; i++) {
 			MII_CLR(STE_PHYCTL_MCLK);
 			DELAY(1);
 			MII_SET(STE_PHYCTL_MCLK);
@@ -328,18 +315,15 @@ fail:
 	DELAY(1);
 
 	if (ack)
-		return(1);
-	return(0);
+		return (1);
+	return (0);
 }
 
 /*
  * Write to a PHY register through the MII.
  */
 static int
-ste_mii_writereg(sc, frame)
-	struct ste_softc		*sc;
-	struct ste_mii_frame	*frame;
-	
+ste_mii_writereg(struct ste_softc *sc, struct ste_mii_frame *frame)
 {
 
 	/*
@@ -349,7 +333,7 @@ ste_mii_writereg(sc, frame)
 	frame->mii_stdelim = STE_MII_STARTDELIM;
 	frame->mii_opcode = STE_MII_WRITEOP;
 	frame->mii_turnaround = STE_MII_TURNAROUND;
-	
+
 	/*
  	 * Turn on data output.
 	 */
@@ -375,20 +359,18 @@ ste_mii_writereg(sc, frame)
 	 */
 	MII_CLR(STE_PHYCTL_MDIR);
 
-	return(0);
+	return (0);
 }
 
 static int
-ste_miibus_readreg(dev, phy, reg)
-	device_t		dev;
-	int			phy, reg;
+ste_miibus_readreg(device_t dev, int phy, int reg)
 {
-	struct ste_softc	*sc;
-	struct ste_mii_frame	frame;
+	struct ste_softc *sc;
+	struct ste_mii_frame frame;
 
 	sc = device_get_softc(dev);
 
-	if ( sc->ste_one_phy && phy != 0 )
+	if ((sc->ste_flags & STE_FLAG_ONE_PHY) != 0 && phy != 0)
 		return (0);
 
 	bzero((char *)&frame, sizeof(frame));
@@ -397,16 +379,14 @@ ste_miibus_readreg(dev, phy, reg)
 	frame.mii_regaddr = reg;
 	ste_mii_readreg(sc, &frame);
 
-	return(frame.mii_data);
+	return (frame.mii_data);
 }
 
 static int
-ste_miibus_writereg(dev, phy, reg, data)
-	device_t		dev;
-	int			phy, reg, data;
+ste_miibus_writereg(device_t dev, int phy, int reg, int data)
 {
-	struct ste_softc	*sc;
-	struct ste_mii_frame	frame;
+	struct ste_softc *sc;
+	struct ste_mii_frame frame;
 
 	sc = device_get_softc(dev);
 	bzero((char *)&frame, sizeof(frame));
@@ -417,97 +397,114 @@ ste_miibus_writereg(dev, phy, reg, data)
 
 	ste_mii_writereg(sc, &frame);
 
-	return(0);
+	return (0);
 }
 
 static void
-ste_miibus_statchg(dev)
-	device_t		dev;
+ste_miibus_statchg(device_t dev)
 {
-	struct ste_softc	*sc;
-	struct mii_data		*mii;
+	struct ste_softc *sc;
+	struct mii_data *mii;
+	struct ifnet *ifp;
+	uint16_t cfg;
 
 	sc = device_get_softc(dev);
 
 	mii = device_get_softc(sc->ste_miibus);
+	ifp = sc->ste_ifp;
+	if (mii == NULL || ifp == NULL ||
+	    (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
+		return;
 
-	if ((mii->mii_media_active & IFM_GMASK) == IFM_FDX) {
-		STE_SETBIT2(sc, STE_MACCTL0, STE_MACCTL0_FULLDUPLEX);
-	} else {
-		STE_CLRBIT2(sc, STE_MACCTL0, STE_MACCTL0_FULLDUPLEX);
+	sc->ste_flags &= ~STE_FLAG_LINK;
+	if ((mii->mii_media_status & (IFM_ACTIVE | IFM_AVALID)) ==
+	    (IFM_ACTIVE | IFM_AVALID)) {
+		switch (IFM_SUBTYPE(mii->mii_media_active)) {
+		case IFM_10_T:
+		case IFM_100_TX:
+		case IFM_100_FX:
+		case IFM_100_T4:
+			sc->ste_flags |= STE_FLAG_LINK;
+		default:
+			break;
+		}
 	}
 
-	return;
+	/* Program MACs with resolved speed/duplex/flow-control. */
+	if ((sc->ste_flags & STE_FLAG_LINK) != 0) {
+		cfg = CSR_READ_2(sc, STE_MACCTL0);
+		cfg &= ~(STE_MACCTL0_FLOWCTL_ENABLE | STE_MACCTL0_FULLDUPLEX);
+		if ((IFM_OPTIONS(mii->mii_media_active) & IFM_FDX) != 0) {
+			/*
+			 * ST201 data sheet says driver should enable receiving
+			 * MAC control frames bit of receive mode register to
+			 * receive flow-control frames but the register has no
+			 * such bits. In addition the controller has no ability
+			 * to send pause frames so it should be handled in
+			 * driver. Implementing pause timer handling in driver
+			 * layer is not trivial, so don't enable flow-control
+			 * here.
+			 */
+			cfg |= STE_MACCTL0_FULLDUPLEX;
+		}
+		CSR_WRITE_2(sc, STE_MACCTL0, cfg);
+	}
 }
- 
+
 static int
-ste_ifmedia_upd(ifp)
-	struct ifnet		*ifp;
+ste_ifmedia_upd(struct ifnet *ifp)
 {
-	struct ste_softc	*sc;
+	struct ste_softc *sc;
+	struct mii_data	*mii;
+	struct mii_softc *miisc;
+	int error;
 
 	sc = ifp->if_softc;
 	STE_LOCK(sc);
-	ste_ifmedia_upd_locked(ifp);
-	STE_UNLOCK(sc);
-
-	return(0);	
-}
-
-static void
-ste_ifmedia_upd_locked(ifp)
-	struct ifnet		*ifp;
-{
-	struct ste_softc	*sc;
-	struct mii_data		*mii;
-
-	sc = ifp->if_softc;
-	STE_LOCK_ASSERT(sc);
 	mii = device_get_softc(sc->ste_miibus);
-	sc->ste_link = 0;
 	if (mii->mii_instance) {
-		struct mii_softc	*miisc;
 		LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
 			mii_phy_reset(miisc);
 	}
-	mii_mediachg(mii);
+	error = mii_mediachg(mii);
+	STE_UNLOCK(sc);
+
+	return (error);
 }
 
 static void
-ste_ifmedia_sts(ifp, ifmr)
-	struct ifnet		*ifp;
-	struct ifmediareq	*ifmr;
+ste_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
 {
-	struct ste_softc	*sc;
-	struct mii_data		*mii;
+	struct ste_softc *sc;
+	struct mii_data *mii;
 
 	sc = ifp->if_softc;
 	mii = device_get_softc(sc->ste_miibus);
 
 	STE_LOCK(sc);
+	if ((ifp->if_flags & IFF_UP) == 0) {
+		STE_UNLOCK(sc);
+		return;
+	}
 	mii_pollstat(mii);
 	ifmr->ifm_active = mii->mii_media_active;
 	ifmr->ifm_status = mii->mii_media_status;
 	STE_UNLOCK(sc);
-
-	return;
 }
 
 static void
-ste_wait(sc)
-	struct ste_softc		*sc;
+ste_wait(struct ste_softc *sc)
 {
-	register int		i;
+	int i;
 
 	for (i = 0; i < STE_TIMEOUT; i++) {
 		if (!(CSR_READ_4(sc, STE_DMACTL) & STE_DMACTL_DMA_HALTINPROG))
 			break;
+		DELAY(1);
 	}
 
 	if (i == STE_TIMEOUT)
 		device_printf(sc->ste_dev, "command never completed!\n");
-
-	return;
 }
 
 /*
@@ -515,10 +512,9 @@ ste_wait(sc)
  * it a command.
  */
 static int
-ste_eeprom_wait(sc)
-	struct ste_softc		*sc;
+ste_eeprom_wait(struct ste_softc *sc)
 {
-	int			i;
+	int i;
 
 	DELAY(1000);
 
@@ -531,10 +527,10 @@ ste_eeprom_wait(sc)
 
 	if (i == 100) {
 		device_printf(sc->ste_dev, "eeprom failed to come ready\n");
-		return(1);
+		return (1);
 	}
 
-	return(0);
+	return (0);
 }
 
 /*
@@ -542,18 +538,13 @@ ste_eeprom_wait(sc)
  * data is stored in the EEPROM in network byte order.
  */
 static int
-ste_read_eeprom(sc, dest, off, cnt, swap)
-	struct ste_softc		*sc;
-	caddr_t			dest;
-	int			off;
-	int			cnt;
-	int			swap;
+ste_read_eeprom(struct ste_softc *sc, caddr_t dest, int off, int cnt, int swap)
 {
-	int			err = 0, i;
-	u_int16_t		word = 0, *ptr;
+	uint16_t word, *ptr;
+	int err = 0, i;
 
 	if (ste_eeprom_wait(sc))
-		return(1);
+		return (1);
 
 	for (i = 0; i < cnt; i++) {
 		CSR_WRITE_2(sc, STE_EEPROM_CTL, STE_EEOPCODE_READ | (off + i));
@@ -561,39 +552,44 @@ ste_read_eeprom(sc, dest, off, cnt, swap)
 		if (err)
 			break;
 		word = CSR_READ_2(sc, STE_EEPROM_DATA);
-		ptr = (u_int16_t *)(dest + (i * 2));
+		ptr = (uint16_t *)(dest + (i * 2));
 		if (swap)
 			*ptr = ntohs(word);
 		else
-			*ptr = word;	
+			*ptr = word;
 	}
 
-	return(err ? 1 : 0);
+	return (err ? 1 : 0);
 }
 
 static void
-ste_setmulti(sc)
-	struct ste_softc	*sc;
+ste_rxfilter(struct ste_softc *sc)
 {
-	struct ifnet		*ifp;
-	int			h = 0;
-	u_int32_t		hashes[2] = { 0, 0 };
-	struct ifmultiaddr	*ifma;
+	struct ifnet *ifp;
+	struct ifmultiaddr *ifma;
+	uint32_t hashes[2] = { 0, 0 };
+	uint8_t rxcfg;
+	int h;
+
+	STE_LOCK_ASSERT(sc);
 
 	ifp = sc->ste_ifp;
-	if (ifp->if_flags & IFF_ALLMULTI || ifp->if_flags & IFF_PROMISC) {
-		STE_SETBIT1(sc, STE_RX_MODE, STE_RXMODE_ALLMULTI);
-		STE_CLRBIT1(sc, STE_RX_MODE, STE_RXMODE_MULTIHASH);
-		return;
+	rxcfg = CSR_READ_1(sc, STE_RX_MODE);
+	rxcfg |= STE_RXMODE_UNICAST;
+	rxcfg &= ~(STE_RXMODE_ALLMULTI | STE_RXMODE_MULTIHASH |
+	    STE_RXMODE_BROADCAST | STE_RXMODE_PROMISC);
+	if (ifp->if_flags & IFF_BROADCAST)
+		rxcfg |= STE_RXMODE_BROADCAST;
+	if ((ifp->if_flags & (IFF_ALLMULTI | IFF_PROMISC)) != 0) {
+		if ((ifp->if_flags & IFF_ALLMULTI) != 0)
+			rxcfg |= STE_RXMODE_ALLMULTI;
+		if ((ifp->if_flags & IFF_PROMISC) != 0)
+			rxcfg |= STE_RXMODE_PROMISC;
+		goto chipit;
 	}
 
-	/* first, zot all the existing hash bits */
-	CSR_WRITE_2(sc, STE_MAR0, 0);
-	CSR_WRITE_2(sc, STE_MAR1, 0);
-	CSR_WRITE_2(sc, STE_MAR2, 0);
-	CSR_WRITE_2(sc, STE_MAR3, 0);
-
-	/* now program new ones */
+	rxcfg |= STE_RXMODE_MULTIHASH;
+	/* Now program new ones. */
 	if_maddr_rlock(ifp);
 	TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
 		if (ifma->ifma_addr->sa_family != AF_LINK)
@@ -607,14 +603,13 @@ ste_setmulti(sc)
 	}
 	if_maddr_runlock(ifp);
 
+chipit:
 	CSR_WRITE_2(sc, STE_MAR0, hashes[0] & 0xFFFF);
 	CSR_WRITE_2(sc, STE_MAR1, (hashes[0] >> 16) & 0xFFFF);
 	CSR_WRITE_2(sc, STE_MAR2, hashes[1] & 0xFFFF);
 	CSR_WRITE_2(sc, STE_MAR3, (hashes[1] >> 16) & 0xFFFF);
-	STE_CLRBIT1(sc, STE_RX_MODE, STE_RXMODE_ALLMULTI);
-	STE_SETBIT1(sc, STE_RX_MODE, STE_RXMODE_MULTIHASH);
-
-	return;
+	CSR_WRITE_1(sc, STE_RX_MODE, rxcfg);
+	CSR_READ_1(sc, STE_RX_MODE);
 }
 
 #ifdef DEVICE_POLLING
@@ -641,32 +636,22 @@ ste_poll_locked(struct ifnet *ifp, enum poll_cmd cmd, int count)
 
 	STE_LOCK_ASSERT(sc);
 
-	sc->rxcycles = count;
-	if (cmd == POLL_AND_CHECK_STATUS)
-		ste_rxeoc(sc);
-	rx_npkts = ste_rxeof(sc);
+	rx_npkts = ste_rxeof(sc, count);
 	ste_txeof(sc);
+	ste_txeoc(sc);
 	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		ste_start_locked(ifp);
 
 	if (cmd == POLL_AND_CHECK_STATUS) {
-		u_int16_t status;
+		uint16_t status;
 
 		status = CSR_READ_2(sc, STE_ISR_ACK);
 
-		if (status & STE_ISR_TX_DONE)
-			ste_txeoc(sc);
-
-		if (status & STE_ISR_STATS_OFLOW) {
-			callout_stop(&sc->ste_stat_callout);
+		if (status & STE_ISR_STATS_OFLOW)
 			ste_stats_update(sc);
-		}
-
-		if (status & STE_ISR_LINKEVENT)
-			mii_pollstat(device_get_softc(sc->ste_miibus));
 
 		if (status & STE_ISR_HOSTERR) {
-			ste_reset(sc);
+			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 			ste_init_locked(sc);
 		}
 	}
@@ -675,12 +660,11 @@ ste_poll_locked(struct ifnet *ifp, enum poll_cmd cmd, int count)
 #endif /* DEVICE_POLLING */
 
 static void
-ste_intr(xsc)
-	void			*xsc;
+ste_intr(void *xsc)
 {
-	struct ste_softc	*sc;
-	struct ifnet		*ifp;
-	u_int16_t		status;
+	struct ste_softc *sc;
+	struct ifnet *ifp;
+	uint16_t intrs, status;
 
 	sc = xsc;
 	STE_LOCK(sc);
@@ -692,77 +676,68 @@ ste_intr(xsc)
 		return;
 	}
 #endif
-
-	/* See if this is really our interrupt. */
-	if (!(CSR_READ_2(sc, STE_ISR) & STE_ISR_INTLATCH)) {
+	/* Reading STE_ISR_ACK clears STE_IMR register. */
+	status = CSR_READ_2(sc, STE_ISR_ACK);
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
 		STE_UNLOCK(sc);
 		return;
 	}
 
-	for (;;) {
-		status = CSR_READ_2(sc, STE_ISR_ACK);
+	intrs = STE_INTRS;
+	if (status == 0xFFFF || (status & intrs) == 0)
+		goto done;
 
-		if (!(status & STE_INTRS))
-			break;
+	if (sc->ste_int_rx_act > 0) {
+		status &= ~STE_ISR_RX_DMADONE;
+		intrs &= ~STE_IMR_RX_DMADONE;
+	}
 
-		if (status & STE_ISR_RX_DMADONE) {
-			ste_rxeoc(sc);
-			ste_rxeof(sc);
+	if ((status & (STE_ISR_SOFTINTR | STE_ISR_RX_DMADONE)) != 0) {
+		ste_rxeof(sc, -1);
+		/*
+		 * The controller has no ability to Rx interrupt
+		 * moderation feature. Receiving 64 bytes frames
+		 * from wire generates too many interrupts which in
+		 * turn make system useless to process other useful
+		 * things. Fortunately ST201 supports single shot
+		 * timer so use the timer to implement Rx interrupt
+		 * moderation in driver. This adds more register
+		 * access but it greatly reduces number of Rx
+		 * interrupts under high network load.
+		 */
+		if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 &&
+		    (sc->ste_int_rx_mod != 0)) {
+			if ((status & STE_ISR_RX_DMADONE) != 0) {
+				CSR_WRITE_2(sc, STE_COUNTDOWN,
+				    STE_TIMER_USECS(sc->ste_int_rx_mod));
+				intrs &= ~STE_IMR_RX_DMADONE;
+				sc->ste_int_rx_act = 1;
+			} else {
+				intrs |= STE_IMR_RX_DMADONE;
+				sc->ste_int_rx_act = 0;
+			}
 		}
-
-		if (status & STE_ISR_TX_DMADONE)
+	}
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) {
+		if ((status & STE_ISR_TX_DMADONE) != 0)
 			ste_txeof(sc);
-
-		if (status & STE_ISR_TX_DONE)
+		if ((status & STE_ISR_TX_DONE) != 0)
 			ste_txeoc(sc);
-
-		if (status & STE_ISR_STATS_OFLOW) {
-			callout_stop(&sc->ste_stat_callout);
+		if ((status & STE_ISR_STATS_OFLOW) != 0)
 			ste_stats_update(sc);
-		}
-
-		if (status & STE_ISR_LINKEVENT)
-			mii_pollstat(device_get_softc(sc->ste_miibus));
-
-
-		if (status & STE_ISR_HOSTERR) {
-			ste_reset(sc);
+		if ((status & STE_ISR_HOSTERR) != 0) {
+			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 			ste_init_locked(sc);
+			STE_UNLOCK(sc);
+			return;
 		}
+		if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+			ste_start_locked(ifp);
+done:
+		/* Re-enable interrupts */
+		CSR_WRITE_2(sc, STE_IMR, intrs);
 	}
-
-	/* Re-enable interrupts */
-	CSR_WRITE_2(sc, STE_IMR, STE_INTRS);
-
-	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
-		ste_start_locked(ifp);
-
 	STE_UNLOCK(sc);
-
-	return;
-}
-
-static void
-ste_rxeoc(struct ste_softc *sc)
-{
-	struct ste_chain_onefrag *cur_rx;
-
-	STE_LOCK_ASSERT(sc);
-
-	if (sc->ste_cdata.ste_rx_head->ste_ptr->ste_status == 0) {
-		cur_rx = sc->ste_cdata.ste_rx_head;
-		do {
-			cur_rx = cur_rx->ste_next;
-			/* If the ring is empty, just return. */
-			if (cur_rx == sc->ste_cdata.ste_rx_head)
-				return;
-		} while (cur_rx->ste_ptr->ste_status == 0);
-		if (sc->ste_cdata.ste_rx_head->ste_ptr->ste_status == 0) {
-			/* We've fallen behind the chip: catch it. */
-			sc->ste_cdata.ste_rx_head = cur_rx;
-			++ste_rxsyncs;
-		}
-	}
 }
 
 /*
@@ -770,35 +745,35 @@ ste_rxeoc(struct ste_softc *sc)
  * the higher level protocols.
  */
 static int
-ste_rxeof(sc)
-	struct ste_softc		*sc;
+ste_rxeof(struct ste_softc *sc, int count)
 {
-        struct mbuf		*m;
-        struct ifnet		*ifp;
-	struct ste_chain_onefrag	*cur_rx;
-	int			total_len = 0, count=0, rx_npkts = 0;
-	u_int32_t		rxstat;
-
-	STE_LOCK_ASSERT(sc);
+        struct mbuf *m;
+        struct ifnet *ifp;
+	struct ste_chain_onefrag *cur_rx;
+	uint32_t rxstat;
+	int total_len, rx_npkts;
 
 	ifp = sc->ste_ifp;
 
-	while((rxstat = sc->ste_cdata.ste_rx_head->ste_ptr->ste_status)
-	      & STE_RXSTAT_DMADONE) {
+	bus_dmamap_sync(sc->ste_cdata.ste_rx_list_tag,
+	    sc->ste_cdata.ste_rx_list_map,
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+
+	cur_rx = sc->ste_cdata.ste_rx_head;
+	for (rx_npkts = 0; rx_npkts < STE_RX_LIST_CNT; rx_npkts++,
+	    cur_rx = cur_rx->ste_next) {
+		rxstat = le32toh(cur_rx->ste_ptr->ste_status);
+		if ((rxstat & STE_RXSTAT_DMADONE) == 0)
+			break;
 #ifdef DEVICE_POLLING
 		if (ifp->if_capenable & IFCAP_POLLING) {
-			if (sc->rxcycles <= 0)
+			if (count == 0)
 				break;
-			sc->rxcycles--;
+			count--;
 		}
 #endif
-		if ((STE_RX_LIST_CNT - count) < 3) {
+		if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
 			break;
-		}
-
-		cur_rx = sc->ste_cdata.ste_rx_head;
-		sc->ste_cdata.ste_rx_head = cur_rx->ste_next;
-
 		/*
 		 * If an error occurs, update stats, clear the
 		 * status word and leave the mbuf cluster in place:
@@ -811,22 +786,9 @@ ste_rxeof(sc)
 			continue;
 		}
 
-		/*
-		 * If there error bit was not set, the upload complete
-		 * bit should be set which means we have a valid packet.
-		 * If not, something truly strange has happened.
-		 */
-		if (!(rxstat & STE_RXSTAT_DMADONE)) {
-			device_printf(sc->ste_dev,
-			    "bad receive status -- packet dropped\n");
-			ifp->if_ierrors++;
-			cur_rx->ste_ptr->ste_status = 0;
-			continue;
-		}
-
-		/* No errors; receive the packet. */	
+		/* No errors; receive the packet. */
 		m = cur_rx->ste_mbuf;
-		total_len = cur_rx->ste_ptr->ste_status & STE_RXSTAT_FRAMELEN;
+		total_len = STE_RX_BYTES(rxstat);
 
 		/*
 		 * Try to conjure up a new mbuf cluster. If that
@@ -835,8 +797,8 @@ ste_rxeof(sc)
 		 * result in a lost packet, but there's little else we
 		 * can do in this situation.
 		 */
-		if (ste_newbuf(sc, cur_rx, NULL) == ENOBUFS) {
-			ifp->if_ierrors++;
+		if (ste_newbuf(sc, cur_rx) != 0) {
+			ifp->if_iqdrops++;
 			cur_rx->ste_ptr->ste_status = 0;
 			continue;
 		}
@@ -848,137 +810,239 @@ ste_rxeof(sc)
 		STE_UNLOCK(sc);
 		(*ifp->if_input)(ifp, m);
 		STE_LOCK(sc);
+	}
 
-		cur_rx->ste_ptr->ste_status = 0;
-		count++;
-		rx_npkts++;
+	if (rx_npkts > 0) {
+		sc->ste_cdata.ste_rx_head = cur_rx;
+		bus_dmamap_sync(sc->ste_cdata.ste_rx_list_tag,
+		    sc->ste_cdata.ste_rx_list_map,
+		    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 	}
 
 	return (rx_npkts);
 }
 
 static void
-ste_txeoc(sc)
-	struct ste_softc	*sc;
+ste_txeoc(struct ste_softc *sc)
 {
-	u_int8_t		txstat;
-	struct ifnet		*ifp;
+	uint16_t txstat;
+	struct ifnet *ifp;
+
+	STE_LOCK_ASSERT(sc);
 
 	ifp = sc->ste_ifp;
 
-	while ((txstat = CSR_READ_1(sc, STE_TX_STATUS)) &
-	    STE_TXSTATUS_TXDONE) {
-		if (txstat & STE_TXSTATUS_UNDERRUN ||
-		    txstat & STE_TXSTATUS_EXCESSCOLLS ||
-		    txstat & STE_TXSTATUS_RECLAIMERR) {
+	/*
+	 * STE_TX_STATUS register implements a queue of up to 31
+	 * transmit status byte. Writing an arbitrary value to the
+	 * register will advance the queue to the next transmit
+	 * status byte. This means if driver does not read
+	 * STE_TX_STATUS register after completing sending more
+	 * than 31 frames the controller would be stalled so driver
+	 * should re-wake the Tx MAC. This is the most severe
+	 * limitation of ST201 based controller.
+	 */
+	for (;;) {
+		txstat = CSR_READ_2(sc, STE_TX_STATUS);
+		if ((txstat & STE_TXSTATUS_TXDONE) == 0)
+			break;
+		if ((txstat & (STE_TXSTATUS_UNDERRUN |
+		    STE_TXSTATUS_EXCESSCOLLS | STE_TXSTATUS_RECLAIMERR |
+		    STE_TXSTATUS_STATSOFLOW)) != 0) {
 			ifp->if_oerrors++;
-			device_printf(sc->ste_dev,
-			    "transmission error: %x\n", txstat);
-
-			ste_reset(sc);
-			ste_init_locked(sc);
-
-			if (txstat & STE_TXSTATUS_UNDERRUN &&
+#ifdef	STE_SHOW_TXERRORS
+			device_printf(sc->ste_dev, "TX error : 0x%b\n",
+			    txstat & 0xFF, STE_ERR_BITS);
+#endif
+			if ((txstat & STE_TXSTATUS_UNDERRUN) != 0 &&
 			    sc->ste_tx_thresh < STE_PACKET_SIZE) {
 				sc->ste_tx_thresh += STE_MIN_FRAMELEN;
+				if (sc->ste_tx_thresh > STE_PACKET_SIZE)
+					sc->ste_tx_thresh = STE_PACKET_SIZE;
 				device_printf(sc->ste_dev,
-				    "tx underrun, increasing tx"
+				    "TX underrun, increasing TX"
 				    " start threshold to %d bytes\n",
 				    sc->ste_tx_thresh);
+				/* Make sure to disable active DMA cycles. */
+				STE_SETBIT4(sc, STE_DMACTL,
+				    STE_DMACTL_TXDMA_STALL);
+				ste_wait(sc);
+				ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+				ste_init_locked(sc);
+				break;
 			}
-			CSR_WRITE_2(sc, STE_TX_STARTTHRESH, sc->ste_tx_thresh);
-			CSR_WRITE_2(sc, STE_TX_RECLAIM_THRESH,
-			    (STE_PACKET_SIZE >> 4));
+			/* Restart Tx. */
+			ste_restart_tx(sc);
 		}
-		ste_init_locked(sc);
+		/*
+		 * Advance to next status and ACK TxComplete
+		 * interrupt. ST201 data sheet was wrong here, to
+		 * get next Tx status, we have to write both
+		 * STE_TX_STATUS and STE_TX_FRAMEID register.
+		 * Otherwise controller returns the same status
+		 * as well as not acknowledge Tx completion
+		 * interrupt.
+		 */
 		CSR_WRITE_2(sc, STE_TX_STATUS, txstat);
 	}
-
-	return;
 }
 
 static void
-ste_txeof(sc)
-	struct ste_softc	*sc;
+ste_tick(void *arg)
 {
-	struct ste_chain	*cur_tx;
-	struct ifnet		*ifp;
-	int			idx;
+	struct ste_softc *sc;
+	struct mii_data *mii;
+
+	sc = (struct ste_softc *)arg;
+
+	STE_LOCK_ASSERT(sc);
+
+	mii = device_get_softc(sc->ste_miibus);
+	mii_tick(mii);
+	/*
+	 * ukphy(4) does not seem to generate CB that reports
+	 * resolved link state so if we know we lost a link,
+	 * explicitly check the link state.
+	 */
+	if ((sc->ste_flags & STE_FLAG_LINK) == 0)
+		ste_miibus_statchg(sc->ste_dev);
+	/*
+	 * Because we are not generating Tx completion
+	 * interrupt for every frame, reclaim transmitted
+	 * buffers here.
+	 */
+	ste_txeof(sc);
+	ste_txeoc(sc);
+	ste_stats_update(sc);
+	ste_watchdog(sc);
+	callout_reset(&sc->ste_callout, hz, ste_tick, sc);
+}
+
+static void
+ste_txeof(struct ste_softc *sc)
+{
+	struct ifnet *ifp;
+	struct ste_chain *cur_tx;
+	uint32_t txstat;
+	int idx;
+
+	STE_LOCK_ASSERT(sc);
 
 	ifp = sc->ste_ifp;
-
 	idx = sc->ste_cdata.ste_tx_cons;
-	while(idx != sc->ste_cdata.ste_tx_prod) {
+	if (idx == sc->ste_cdata.ste_tx_prod)
+		return;
+
+	bus_dmamap_sync(sc->ste_cdata.ste_tx_list_tag,
+	    sc->ste_cdata.ste_tx_list_map,
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
+
+	while (idx != sc->ste_cdata.ste_tx_prod) {
 		cur_tx = &sc->ste_cdata.ste_tx_chain[idx];
-
-		if (!(cur_tx->ste_ptr->ste_ctl & STE_TXCTL_DMADONE))
+		txstat = le32toh(cur_tx->ste_ptr->ste_ctl);
+		if ((txstat & STE_TXCTL_DMADONE) == 0)
 			break;
-
+		bus_dmamap_sync(sc->ste_cdata.ste_tx_tag, cur_tx->ste_map,
+		    BUS_DMASYNC_POSTWRITE);
+		bus_dmamap_unload(sc->ste_cdata.ste_tx_tag, cur_tx->ste_map);
+		KASSERT(cur_tx->ste_mbuf != NULL,
+		    ("%s: freeing NULL mbuf!\n", __func__));
 		m_freem(cur_tx->ste_mbuf);
 		cur_tx->ste_mbuf = NULL;
 		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 		ifp->if_opackets++;
-
+		sc->ste_cdata.ste_tx_cnt--;
 		STE_INC(idx, STE_TX_LIST_CNT);
 	}
 
 	sc->ste_cdata.ste_tx_cons = idx;
-	if (idx == sc->ste_cdata.ste_tx_prod)
-		ifp->if_timer = 0;
+	if (sc->ste_cdata.ste_tx_cnt == 0)
+		sc->ste_timer = 0;
 }
 
 static void
-ste_stats_update(xsc)
-	void			*xsc;
+ste_stats_clear(struct ste_softc *sc)
 {
-	struct ste_softc	*sc;
-	struct ifnet		*ifp;
-	struct mii_data		*mii;
 
-	sc = xsc;
+	STE_LOCK_ASSERT(sc);
+
+	/* Rx stats. */
+	CSR_READ_2(sc, STE_STAT_RX_OCTETS_LO);
+	CSR_READ_2(sc, STE_STAT_RX_OCTETS_HI);
+	CSR_READ_2(sc, STE_STAT_RX_FRAMES);
+	CSR_READ_1(sc, STE_STAT_RX_BCAST);
+	CSR_READ_1(sc, STE_STAT_RX_MCAST);
+	CSR_READ_1(sc, STE_STAT_RX_LOST);
+	/* Tx stats. */
+	CSR_READ_2(sc, STE_STAT_TX_OCTETS_LO);
+	CSR_READ_2(sc, STE_STAT_TX_OCTETS_HI);
+	CSR_READ_2(sc, STE_STAT_TX_FRAMES);
+	CSR_READ_1(sc, STE_STAT_TX_BCAST);
+	CSR_READ_1(sc, STE_STAT_TX_MCAST);
+	CSR_READ_1(sc, STE_STAT_CARRIER_ERR);
+	CSR_READ_1(sc, STE_STAT_SINGLE_COLLS);
+	CSR_READ_1(sc, STE_STAT_MULTI_COLLS);
+	CSR_READ_1(sc, STE_STAT_LATE_COLLS);
+	CSR_READ_1(sc, STE_STAT_TX_DEFER);
+	CSR_READ_1(sc, STE_STAT_TX_EXDEFER);
+	CSR_READ_1(sc, STE_STAT_TX_ABORT);
+}
+
+static void
+ste_stats_update(struct ste_softc *sc)
+{
+	struct ifnet *ifp;
+	struct ste_hw_stats *stats;
+	uint32_t val;
+
 	STE_LOCK_ASSERT(sc);
 
 	ifp = sc->ste_ifp;
-	mii = device_get_softc(sc->ste_miibus);
-
-	ifp->if_collisions += CSR_READ_1(sc, STE_LATE_COLLS)
-	    + CSR_READ_1(sc, STE_MULTI_COLLS)
-	    + CSR_READ_1(sc, STE_SINGLE_COLLS);
-
-	if (!sc->ste_link) {
-		mii_pollstat(mii);
-		if (mii->mii_media_status & IFM_ACTIVE &&
-		    IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
-			sc->ste_link++;
-			/*
-			* we don't get a call-back on re-init so do it
-			* otherwise we get stuck in the wrong link state
-			*/
-			ste_miibus_statchg(sc->ste_dev);
-			if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
-				ste_start_locked(ifp);
-		}
-	}
-
-	callout_reset(&sc->ste_stat_callout, hz, ste_stats_update, sc);
-
-	return;
+	stats = &sc->ste_stats;
+	/* Rx stats. */
+	val = (uint32_t)CSR_READ_2(sc, STE_STAT_RX_OCTETS_LO) |
+	    ((uint32_t)CSR_READ_2(sc, STE_STAT_RX_OCTETS_HI)) << 16;
+	val &= 0x000FFFFF;
+	stats->rx_bytes += val;
+	stats->rx_frames += CSR_READ_2(sc, STE_STAT_RX_FRAMES);
+	stats->rx_bcast_frames += CSR_READ_1(sc, STE_STAT_RX_BCAST);
+	stats->rx_mcast_frames += CSR_READ_1(sc, STE_STAT_RX_MCAST);
+	stats->rx_lost_frames += CSR_READ_1(sc, STE_STAT_RX_LOST);
+	/* Tx stats. */
+	val = (uint32_t)CSR_READ_2(sc, STE_STAT_TX_OCTETS_LO) |
+	    ((uint32_t)CSR_READ_2(sc, STE_STAT_TX_OCTETS_HI)) << 16;
+	val &= 0x000FFFFF;
+	stats->tx_bytes += val;
+	stats->tx_frames += CSR_READ_2(sc, STE_STAT_TX_FRAMES);
+	stats->tx_bcast_frames += CSR_READ_1(sc, STE_STAT_TX_BCAST);
+	stats->tx_mcast_frames += CSR_READ_1(sc, STE_STAT_TX_MCAST);
+	stats->tx_carrsense_errs += CSR_READ_1(sc, STE_STAT_CARRIER_ERR);
+	val = CSR_READ_1(sc, STE_STAT_SINGLE_COLLS);
+	stats->tx_single_colls += val;
+	ifp->if_collisions += val;
+	val = CSR_READ_1(sc, STE_STAT_MULTI_COLLS);
+	stats->tx_multi_colls += val;
+	ifp->if_collisions += val;
+	val += CSR_READ_1(sc, STE_STAT_LATE_COLLS);
+	stats->tx_late_colls += val;
+	ifp->if_collisions += val;
+	stats->tx_frames_defered += CSR_READ_1(sc, STE_STAT_TX_DEFER);
+	stats->tx_excess_defers += CSR_READ_1(sc, STE_STAT_TX_EXDEFER);
+	stats->tx_abort += CSR_READ_1(sc, STE_STAT_TX_ABORT);
 }
 
-
 /*
  * Probe for a Sundance ST201 chip. Check the PCI vendor and device
  * IDs against our list and return a device name if we find a match.
  */
 static int
-ste_probe(dev)
-	device_t		dev;
+ste_probe(device_t dev)
 {
-	struct ste_type		*t;
+	struct ste_type *t;
 
 	t = ste_devs;
 
-	while(t->ste_name != NULL) {
+	while (t->ste_name != NULL) {
 		if ((pci_get_vendor(dev) == t->ste_vid) &&
 		    (pci_get_device(dev) == t->ste_did)) {
 			device_set_desc(dev, t->ste_name);
@@ -987,7 +1051,7 @@ ste_probe(dev)
 		t++;
 	}
 
-	return(ENXIO);
+	return (ENXIO);
 }
 
 /*
@@ -995,13 +1059,12 @@ ste_probe(dev)
  * setup and ethernet/BPF attach.
  */
 static int
-ste_attach(dev)
-	device_t		dev;
+ste_attach(device_t dev)
 {
-	struct ste_softc	*sc;
-	struct ifnet		*ifp;
-	int			error = 0, rid;
-	u_char			eaddr[6];
+	struct ste_softc *sc;
+	struct ifnet *ifp;
+	u_char eaddr[6];
+	int error = 0, pmc, rid;
 
 	sc = device_get_softc(dev);
 	sc->ste_dev = dev;
@@ -1014,7 +1077,7 @@ ste_attach(dev)
 	if (pci_get_vendor(dev) == DL_VENDORID &&
 	    pci_get_device(dev) == DL_DEVICEID_DL10050 &&
 	    pci_get_revid(dev) == 0x12 )
-		sc->ste_one_phy = 1;
+		sc->ste_flags |= STE_FLAG_ONE_PHY;
 
 	mtx_init(&sc->ste_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
 	    MTX_DEF);
@@ -1023,18 +1086,23 @@ ste_attach(dev)
 	 */
 	pci_enable_busmaster(dev);
 
-	rid = STE_RID;
-	sc->ste_res = bus_alloc_resource_any(dev, STE_RES, &rid, RF_ACTIVE);
-
+	/* Prefer memory space register mapping over IO space. */
+	sc->ste_res_id = PCIR_BAR(1);
+	sc->ste_res_type = SYS_RES_MEMORY;
+	sc->ste_res = bus_alloc_resource_any(dev, sc->ste_res_type,
+	    &sc->ste_res_id, RF_ACTIVE);
+	if (sc->ste_res == NULL) {
+		sc->ste_res_id = PCIR_BAR(0);
+		sc->ste_res_type = SYS_RES_IOPORT;
+		sc->ste_res = bus_alloc_resource_any(dev, sc->ste_res_type,
+		    &sc->ste_res_id, RF_ACTIVE);
+	}
 	if (sc->ste_res == NULL) {
 		device_printf(dev, "couldn't map ports/memory\n");
 		error = ENXIO;
 		goto fail;
 	}
 
-	sc->ste_btag = rman_get_bustag(sc->ste_res);
-	sc->ste_bhandle = rman_get_bushandle(sc->ste_res);
-
 	/* Allocate interrupt */
 	rid = 0;
 	sc->ste_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
@@ -1046,7 +1114,7 @@ ste_attach(dev)
 		goto fail;
 	}
 
-	callout_init_mtx(&sc->ste_stat_callout, &sc->ste_mtx, 0);
+	callout_init_mtx(&sc->ste_callout, &sc->ste_mtx, 0);
 
 	/* Reset the adapter. */
 	ste_reset(sc);
@@ -1060,18 +1128,10 @@ ste_attach(dev)
 		error = ENXIO;;
 		goto fail;
 	}
+	ste_sysctl_node(sc);
 
-	/* Allocate the descriptor queues. */
-	sc->ste_ldata = contigmalloc(sizeof(struct ste_list_data), M_DEVBUF,
-	    M_NOWAIT, 0, 0xffffffff, PAGE_SIZE, 0);
-
-	if (sc->ste_ldata == NULL) {
-		device_printf(dev, "no memory for list buffers!\n");
-		error = ENXIO;
+	if ((error = ste_dma_alloc(sc)) != 0)
 		goto fail;
-	}
-
-	bzero(sc->ste_ldata, sizeof(struct ste_list_data));
 
 	ifp = sc->ste_ifp = if_alloc(IFT_ETHER);
 	if (ifp == NULL) {
@@ -1090,11 +1150,9 @@ ste_attach(dev)
 
 	ifp->if_softc = sc;
 	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
-	ifp->if_mtu = ETHERMTU;
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = ste_ioctl;
 	ifp->if_start = ste_start;
-	ifp->if_watchdog = ste_watchdog;
 	ifp->if_init = ste_init;
 	IFQ_SET_MAXLEN(&ifp->if_snd, STE_TX_LIST_CNT - 1);
 	ifp->if_snd.ifq_drv_maxlen = STE_TX_LIST_CNT - 1;
@@ -1112,6 +1170,8 @@ ste_attach(dev)
 	 */
 	ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
 	ifp->if_capabilities |= IFCAP_VLAN_MTU;
+	if (pci_find_extcap(dev, PCIY_PMG, &pmc) == 0)
+		ifp->if_capabilities |= IFCAP_WOL_MAGIC;
 	ifp->if_capenable = ifp->if_capabilities;
 #ifdef DEVICE_POLLING
 	ifp->if_capabilities |= IFCAP_POLLING;
@@ -1131,7 +1191,7 @@ fail:
 	if (error)
 		ste_detach(dev);
 
-	return(error);
+	return (error);
 }
 
 /*
@@ -1142,11 +1202,10 @@ fail:
  * allocated.
  */
 static int
-ste_detach(dev)
-	device_t		dev;
+ste_detach(device_t dev)
 {
-	struct ste_softc	*sc;
-	struct ifnet		*ifp;
+	struct ste_softc *sc;
+	struct ifnet *ifp;
 
 	sc = device_get_softc(dev);
 	KASSERT(mtx_initialized(&sc->ste_mtx), ("ste mutex not initialized"));
@@ -1159,11 +1218,11 @@ ste_detach(dev)
 
 	/* These should only be active if attach succeeded */
 	if (device_is_attached(dev)) {
+		ether_ifdetach(ifp);
 		STE_LOCK(sc);
 		ste_stop(sc);
 		STE_UNLOCK(sc);
-		callout_drain(&sc->ste_stat_callout);
-		ether_ifdetach(ifp);
+		callout_drain(&sc->ste_callout);
 	}
 	if (sc->ste_miibus)
 		device_delete_child(dev, sc->ste_miibus);
@@ -1174,123 +1233,409 @@ ste_detach(dev)
 	if (sc->ste_irq)
 		bus_release_resource(dev, SYS_RES_IRQ, 0, sc->ste_irq);
 	if (sc->ste_res)
-		bus_release_resource(dev, STE_RES, STE_RID, sc->ste_res);
+		bus_release_resource(dev, sc->ste_res_type, sc->ste_res_id,
+		    sc->ste_res);
 
 	if (ifp)
 		if_free(ifp);
 
-	if (sc->ste_ldata) {
-		contigfree(sc->ste_ldata, sizeof(struct ste_list_data),
-		    M_DEVBUF);
-	}
-
+	ste_dma_free(sc);
 	mtx_destroy(&sc->ste_mtx);
 
-	return(0);
+	return (0);
+}
+
+struct ste_dmamap_arg {
+	bus_addr_t	ste_busaddr;
+};
+
+static void
+ste_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
+{
+	struct ste_dmamap_arg *ctx;
+
+	if (error != 0)
+		return;
+
+	KASSERT(nsegs == 1, ("%s: %d segments returned!", __func__, nsegs));
+
+	ctx = (struct ste_dmamap_arg *)arg;
+	ctx->ste_busaddr = segs[0].ds_addr;
 }
 
 static int
-ste_newbuf(sc, c, m)
-	struct ste_softc	*sc;
-	struct ste_chain_onefrag	*c;
-	struct mbuf		*m;
+ste_dma_alloc(struct ste_softc *sc)
 {
-	struct mbuf		*m_new = NULL;
+	struct ste_chain *txc;
+	struct ste_chain_onefrag *rxc;
+	struct ste_dmamap_arg ctx;
+	int error, i;
 
-	if (m == NULL) {
-		MGETHDR(m_new, M_DONTWAIT, MT_DATA);
-		if (m_new == NULL)
-			return(ENOBUFS);
-		MCLGET(m_new, M_DONTWAIT);
-		if (!(m_new->m_flags & M_EXT)) {
-			m_freem(m_new);
-			return(ENOBUFS);
-		}
-		m_new->m_len = m_new->m_pkthdr.len = MCLBYTES;
-	} else {
-		m_new = m;
-		m_new->m_len = m_new->m_pkthdr.len = MCLBYTES;
-		m_new->m_data = m_new->m_ext.ext_buf;
+	/* Create parent DMA tag. */
+	error = bus_dma_tag_create(
+	    bus_get_dma_tag(sc->ste_dev), /* parent */
+	    1, 0,			/* alignment, boundary */
+	    BUS_SPACE_MAXADDR_32BIT,	/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,			/* filter, filterarg */
+	    BUS_SPACE_MAXSIZE_32BIT,	/* maxsize */
+	    0,				/* nsegments */
+	    BUS_SPACE_MAXSIZE_32BIT,	/* maxsegsize */
+	    0,				/* flags */
+	    NULL, NULL,			/* lockfunc, lockarg */
+	    &sc->ste_cdata.ste_parent_tag);
+	if (error != 0) {
+		device_printf(sc->ste_dev,
+		    "could not create parent DMA tag.\n");
+		goto fail;
 	}
 
-	m_adj(m_new, ETHER_ALIGN);
+	/* Create DMA tag for Tx descriptor list. */
+	error = bus_dma_tag_create(
+	    sc->ste_cdata.ste_parent_tag, /* parent */
+	    STE_DESC_ALIGN, 0,		/* alignment, boundary */
+	    BUS_SPACE_MAXADDR,		/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,			/* filter, filterarg */
+	    STE_TX_LIST_SZ,		/* maxsize */
+	    1,				/* nsegments */
+	    STE_TX_LIST_SZ,		/* maxsegsize */
+	    0,				/* flags */
+	    NULL, NULL,			/* lockfunc, lockarg */
+	    &sc->ste_cdata.ste_tx_list_tag);
+	if (error != 0) {
+		device_printf(sc->ste_dev,
+		    "could not create Tx list DMA tag.\n");
+		goto fail;
+	}
 
-	c->ste_mbuf = m_new;
-	c->ste_ptr->ste_status = 0;
-	c->ste_ptr->ste_frag.ste_addr = vtophys(mtod(m_new, caddr_t));
-	c->ste_ptr->ste_frag.ste_len = (1536 + ETHER_VLAN_ENCAP_LEN) | STE_FRAG_LAST;
+	/* Create DMA tag for Rx descriptor list. */
+	error = bus_dma_tag_create(
+	    sc->ste_cdata.ste_parent_tag, /* parent */
+	    STE_DESC_ALIGN, 0,		/* alignment, boundary */
+	    BUS_SPACE_MAXADDR,		/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,			/* filter, filterarg */
+	    STE_RX_LIST_SZ,		/* maxsize */
+	    1,				/* nsegments */
+	    STE_RX_LIST_SZ,		/* maxsegsize */
+	    0,				/* flags */
+	    NULL, NULL,			/* lockfunc, lockarg */
+	    &sc->ste_cdata.ste_rx_list_tag);
+	if (error != 0) {
+		device_printf(sc->ste_dev,
+		    "could not create Rx list DMA tag.\n");
+		goto fail;
+	}
 
-	return(0);
+	/* Create DMA tag for Tx buffers. */
+	error = bus_dma_tag_create(
+	    sc->ste_cdata.ste_parent_tag, /* parent */
+	    1, 0,			/* alignment, boundary */
+	    BUS_SPACE_MAXADDR,		/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,			/* filter, filterarg */
+	    MCLBYTES * STE_MAXFRAGS,	/* maxsize */
+	    STE_MAXFRAGS,		/* nsegments */
+	    MCLBYTES,			/* maxsegsize */
+	    0,				/* flags */
+	    NULL, NULL,			/* lockfunc, lockarg */
+	    &sc->ste_cdata.ste_tx_tag);
+	if (error != 0) {
+		device_printf(sc->ste_dev, "could not create Tx DMA tag.\n");
+		goto fail;
+	}
+
+	/* Create DMA tag for Rx buffers. */
+	error = bus_dma_tag_create(
+	    sc->ste_cdata.ste_parent_tag, /* parent */
+	    1, 0,			/* alignment, boundary */
+	    BUS_SPACE_MAXADDR,		/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,			/* filter, filterarg */
+	    MCLBYTES,			/* maxsize */
+	    1,				/* nsegments */
+	    MCLBYTES,			/* maxsegsize */
+	    0,				/* flags */
+	    NULL, NULL,			/* lockfunc, lockarg */
+	    &sc->ste_cdata.ste_rx_tag);
+	if (error != 0) {
+		device_printf(sc->ste_dev, "could not create Rx DMA tag.\n");
+		goto fail;
+	}
+
+	/* Allocate DMA'able memory and load the DMA map for Tx list. */
+	error = bus_dmamem_alloc(sc->ste_cdata.ste_tx_list_tag,
+	    (void **)&sc->ste_ldata.ste_tx_list,
+	    BUS_DMA_WAITOK | BUS_DMA_ZERO | BUS_DMA_COHERENT,
+	    &sc->ste_cdata.ste_tx_list_map);
+	if (error != 0) {
+		device_printf(sc->ste_dev,
+		    "could not allocate DMA'able memory for Tx list.\n");
+		goto fail;
+	}
+	ctx.ste_busaddr = 0;
+	error = bus_dmamap_load(sc->ste_cdata.ste_tx_list_tag,
+	    sc->ste_cdata.ste_tx_list_map, sc->ste_ldata.ste_tx_list,
+	    STE_TX_LIST_SZ, ste_dmamap_cb, &ctx, 0);
+	if (error != 0 || ctx.ste_busaddr == 0) {
+		device_printf(sc->ste_dev,
+		    "could not load DMA'able memory for Tx list.\n");
+		goto fail;
+	}
+	sc->ste_ldata.ste_tx_list_paddr = ctx.ste_busaddr;
+
+	/* Allocate DMA'able memory and load the DMA map for Rx list. */
+	error = bus_dmamem_alloc(sc->ste_cdata.ste_rx_list_tag,
+	    (void **)&sc->ste_ldata.ste_rx_list,
+	    BUS_DMA_WAITOK | BUS_DMA_ZERO | BUS_DMA_COHERENT,
+	    &sc->ste_cdata.ste_rx_list_map);
+	if (error != 0) {
+		device_printf(sc->ste_dev,
+		    "could not allocate DMA'able memory for Rx list.\n");
+		goto fail;
+	}
+	ctx.ste_busaddr = 0;
+	error = bus_dmamap_load(sc->ste_cdata.ste_rx_list_tag,
+	    sc->ste_cdata.ste_rx_list_map, sc->ste_ldata.ste_rx_list,
+	    STE_RX_LIST_SZ, ste_dmamap_cb, &ctx, 0);
+	if (error != 0 || ctx.ste_busaddr == 0) {
+		device_printf(sc->ste_dev,
+		    "could not load DMA'able memory for Rx list.\n");
+		goto fail;
+	}
+	sc->ste_ldata.ste_rx_list_paddr = ctx.ste_busaddr;
+
+	/* Create DMA maps for Tx buffers. */
+	for (i = 0; i < STE_TX_LIST_CNT; i++) {
+		txc = &sc->ste_cdata.ste_tx_chain[i];
+		txc->ste_ptr = NULL;
+		txc->ste_mbuf = NULL;
+		txc->ste_next = NULL;
+		txc->ste_phys = 0;
+		txc->ste_map = NULL;
+		error = bus_dmamap_create(sc->ste_cdata.ste_tx_tag, 0,
+		    &txc->ste_map);
+		if (error != 0) {
+			device_printf(sc->ste_dev,
+			    "could not create Tx dmamap.\n");
+			goto fail;
+		}
+	}
+	/* Create DMA maps for Rx buffers. */
+	if ((error = bus_dmamap_create(sc->ste_cdata.ste_rx_tag, 0,
+	    &sc->ste_cdata.ste_rx_sparemap)) != 0) {
+		device_printf(sc->ste_dev,
+		    "could not create spare Rx dmamap.\n");
+		goto fail;
+	}
+	for (i = 0; i < STE_RX_LIST_CNT; i++) {
+		rxc = &sc->ste_cdata.ste_rx_chain[i];
+		rxc->ste_ptr = NULL;
+		rxc->ste_mbuf = NULL;
+		rxc->ste_next = NULL;
+		rxc->ste_map = NULL;
+		error = bus_dmamap_create(sc->ste_cdata.ste_rx_tag, 0,
+		    &rxc->ste_map);
+		if (error != 0) {
+			device_printf(sc->ste_dev,
+			    "could not create Rx dmamap.\n");
+			goto fail;
+		}
+	}
+
+fail:
+	return (error);
+}
+
+static void
+ste_dma_free(struct ste_softc *sc)
+{
+	struct ste_chain *txc;
+	struct ste_chain_onefrag *rxc;
+	int i;
+
+	/* Tx buffers. */
+	if (sc->ste_cdata.ste_tx_tag != NULL) {
+		for (i = 0; i < STE_TX_LIST_CNT; i++) {
+			txc = &sc->ste_cdata.ste_tx_chain[i];
+			if (txc->ste_map != NULL) {
+				bus_dmamap_destroy(sc->ste_cdata.ste_tx_tag,
+				    txc->ste_map);
+				txc->ste_map = NULL;
+			}
+		}
+		bus_dma_tag_destroy(sc->ste_cdata.ste_tx_tag);
+		sc->ste_cdata.ste_tx_tag = NULL;
+	}
+	/* Rx buffers. */
+	if (sc->ste_cdata.ste_rx_tag != NULL) {
+		for (i = 0; i < STE_RX_LIST_CNT; i++) {
+			rxc = &sc->ste_cdata.ste_rx_chain[i];
+			if (rxc->ste_map != NULL) {
+				bus_dmamap_destroy(sc->ste_cdata.ste_rx_tag,
+				    rxc->ste_map);
+				rxc->ste_map = NULL;
+			}
+		}
+		if (sc->ste_cdata.ste_rx_sparemap != NULL) {
+			bus_dmamap_destroy(sc->ste_cdata.ste_rx_tag,
+			    sc->ste_cdata.ste_rx_sparemap);
+			sc->ste_cdata.ste_rx_sparemap = NULL;
+		}
+		bus_dma_tag_destroy(sc->ste_cdata.ste_rx_tag);
+		sc->ste_cdata.ste_rx_tag = NULL;
+	}
+	/* Tx descriptor list. */
+	if (sc->ste_cdata.ste_tx_list_tag != NULL) {
+		if (sc->ste_cdata.ste_tx_list_map != NULL)
+			bus_dmamap_unload(sc->ste_cdata.ste_tx_list_tag,
+			    sc->ste_cdata.ste_tx_list_map);
+		if (sc->ste_cdata.ste_tx_list_map != NULL &&
+		    sc->ste_ldata.ste_tx_list != NULL)
+			bus_dmamem_free(sc->ste_cdata.ste_tx_list_tag,
+			    sc->ste_ldata.ste_tx_list,
+			    sc->ste_cdata.ste_tx_list_map);
+		sc->ste_ldata.ste_tx_list = NULL;
+		sc->ste_cdata.ste_tx_list_map = NULL;
+		bus_dma_tag_destroy(sc->ste_cdata.ste_tx_list_tag);
+		sc->ste_cdata.ste_tx_list_tag = NULL;
+	}
+	/* Rx descriptor list. */
+	if (sc->ste_cdata.ste_rx_list_tag != NULL) {
+		if (sc->ste_cdata.ste_rx_list_map != NULL)
+			bus_dmamap_unload(sc->ste_cdata.ste_rx_list_tag,
+			    sc->ste_cdata.ste_rx_list_map);
+		if (sc->ste_cdata.ste_rx_list_map != NULL &&
+		    sc->ste_ldata.ste_rx_list != NULL)
+			bus_dmamem_free(sc->ste_cdata.ste_rx_list_tag,
+			    sc->ste_ldata.ste_rx_list,
+			    sc->ste_cdata.ste_rx_list_map);
+		sc->ste_ldata.ste_rx_list = NULL;
+		sc->ste_cdata.ste_rx_list_map = NULL;
+		bus_dma_tag_destroy(sc->ste_cdata.ste_rx_list_tag);
+		sc->ste_cdata.ste_rx_list_tag = NULL;
+	}
+	if (sc->ste_cdata.ste_parent_tag != NULL) {
+		bus_dma_tag_destroy(sc->ste_cdata.ste_parent_tag);
+		sc->ste_cdata.ste_parent_tag = NULL;
+	}
 }
 
 static int
-ste_init_rx_list(sc)
-	struct ste_softc	*sc;
+ste_newbuf(struct ste_softc *sc, struct ste_chain_onefrag *rxc)
 {
-	struct ste_chain_data	*cd;
-	struct ste_list_data	*ld;
-	int			i;
+	struct mbuf *m;
+	bus_dma_segment_t segs[1];
+	bus_dmamap_t map;
+	int error, nsegs;
 
+	m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
+	if (m == NULL)
+		return (ENOBUFS);
+	m->m_len = m->m_pkthdr.len = MCLBYTES;
+	m_adj(m, ETHER_ALIGN);
+
+	if ((error = bus_dmamap_load_mbuf_sg(sc->ste_cdata.ste_rx_tag,
+	    sc->ste_cdata.ste_rx_sparemap, m, segs, &nsegs, 0)) != 0) {
+		m_freem(m);
+		return (error);
+	}
+	KASSERT(nsegs == 1, ("%s: %d segments returned!", __func__, nsegs));
+
+	if (rxc->ste_mbuf != NULL) {
+		bus_dmamap_sync(sc->ste_cdata.ste_rx_tag, rxc->ste_map,
+		    BUS_DMASYNC_POSTREAD);
+		bus_dmamap_unload(sc->ste_cdata.ste_rx_tag, rxc->ste_map);
+	}
+	map = rxc->ste_map;
+	rxc->ste_map = sc->ste_cdata.ste_rx_sparemap;
+	sc->ste_cdata.ste_rx_sparemap = map;
+	bus_dmamap_sync(sc->ste_cdata.ste_rx_tag, rxc->ste_map,
+	    BUS_DMASYNC_PREREAD);
+	rxc->ste_mbuf = m;
+	rxc->ste_ptr->ste_status = 0;
+	rxc->ste_ptr->ste_frag.ste_addr = htole32(segs[0].ds_addr);
+	rxc->ste_ptr->ste_frag.ste_len = htole32(segs[0].ds_len |
+	    STE_FRAG_LAST);
+	return (0);
+}
+
+static int
+ste_init_rx_list(struct ste_softc *sc)
+{
+	struct ste_chain_data *cd;
+	struct ste_list_data *ld;
+	int error, i;
+
+	sc->ste_int_rx_act = 0;
 	cd = &sc->ste_cdata;
-	ld = sc->ste_ldata;
-
+	ld = &sc->ste_ldata;
+	bzero(ld->ste_rx_list, STE_RX_LIST_SZ);
 	for (i = 0; i < STE_RX_LIST_CNT; i++) {
 		cd->ste_rx_chain[i].ste_ptr = &ld->ste_rx_list[i];
-		if (ste_newbuf(sc, &cd->ste_rx_chain[i], NULL) == ENOBUFS)
-			return(ENOBUFS);
+		error = ste_newbuf(sc, &cd->ste_rx_chain[i]);
+		if (error != 0)
+			return (error);
 		if (i == (STE_RX_LIST_CNT - 1)) {
-			cd->ste_rx_chain[i].ste_next =
-			    &cd->ste_rx_chain[0];
-			ld->ste_rx_list[i].ste_next =
-			    vtophys(&ld->ste_rx_list[0]);
+			cd->ste_rx_chain[i].ste_next = &cd->ste_rx_chain[0];
+			ld->ste_rx_list[i].ste_next = ld->ste_rx_list_paddr +
+			    (sizeof(struct ste_desc_onefrag) * 0);
 		} else {
-			cd->ste_rx_chain[i].ste_next =
-			    &cd->ste_rx_chain[i + 1];
-			ld->ste_rx_list[i].ste_next =
-			    vtophys(&ld->ste_rx_list[i + 1]);
+			cd->ste_rx_chain[i].ste_next = &cd->ste_rx_chain[i + 1];
+			ld->ste_rx_list[i].ste_next = ld->ste_rx_list_paddr +
+			    (sizeof(struct ste_desc_onefrag) * (i + 1));
 		}
-		ld->ste_rx_list[i].ste_status = 0;
 	}
 
 	cd->ste_rx_head = &cd->ste_rx_chain[0];
+	bus_dmamap_sync(sc->ste_cdata.ste_rx_list_tag,
+	    sc->ste_cdata.ste_rx_list_map,
+	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
-	return(0);
+	return (0);
 }
 
 static void
-ste_init_tx_list(sc)
-	struct ste_softc	*sc;
+ste_init_tx_list(struct ste_softc *sc)
 {
-	struct ste_chain_data	*cd;
-	struct ste_list_data	*ld;
-	int			i;
+	struct ste_chain_data *cd;
+	struct ste_list_data *ld;
+	int i;
 
 	cd = &sc->ste_cdata;
-	ld = sc->ste_ldata;
+	ld = &sc->ste_ldata;
+	bzero(ld->ste_tx_list, STE_TX_LIST_SZ);
 	for (i = 0; i < STE_TX_LIST_CNT; i++) {
 		cd->ste_tx_chain[i].ste_ptr = &ld->ste_tx_list[i];
-		cd->ste_tx_chain[i].ste_ptr->ste_next = 0;
-		cd->ste_tx_chain[i].ste_ptr->ste_ctl  = 0;
-		cd->ste_tx_chain[i].ste_phys = vtophys(&ld->ste_tx_list[i]);
-		if (i == (STE_TX_LIST_CNT - 1))
-			cd->ste_tx_chain[i].ste_next =
-			    &cd->ste_tx_chain[0];
-		else
-			cd->ste_tx_chain[i].ste_next =
-			    &cd->ste_tx_chain[i + 1];
+		cd->ste_tx_chain[i].ste_mbuf = NULL;
+		if (i == (STE_TX_LIST_CNT - 1)) {
+			cd->ste_tx_chain[i].ste_next = &cd->ste_tx_chain[0];
+			cd->ste_tx_chain[i].ste_phys = htole32(STE_ADDR_LO(
+			    ld->ste_tx_list_paddr +
+			    (sizeof(struct ste_desc) * 0)));
+		} else {
+			cd->ste_tx_chain[i].ste_next = &cd->ste_tx_chain[i + 1];
+			cd->ste_tx_chain[i].ste_phys = htole32(STE_ADDR_LO(
+			    ld->ste_tx_list_paddr +
+			    (sizeof(struct ste_desc) * (i + 1))));
+		}
 	}
 
+	cd->ste_last_tx = NULL;
 	cd->ste_tx_prod = 0;
 	cd->ste_tx_cons = 0;
+	cd->ste_tx_cnt = 0;
 
-	return;
+	bus_dmamap_sync(sc->ste_cdata.ste_tx_list_tag,
+	    sc->ste_cdata.ste_tx_list_map,
+	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 }
 
 static void
-ste_init(xsc)
-	void			*xsc;
+ste_init(void *xsc)
 {
-	struct ste_softc	*sc;
+	struct ste_softc *sc;
 
 	sc = xsc;
 	STE_LOCK(sc);
@@ -1299,16 +1644,23 @@ ste_init(xsc)
 }
 
 static void
-ste_init_locked(sc)
-	struct ste_softc	*sc;
+ste_init_locked(struct ste_softc *sc)
 {
-	int			i;
-	struct ifnet		*ifp;
+	struct ifnet *ifp;
+	struct mii_data *mii;
+	uint8_t val;
+	int i;
 
 	STE_LOCK_ASSERT(sc);
 	ifp = sc->ste_ifp;
+	mii = device_get_softc(sc->ste_miibus);
+
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+		return;
 
 	ste_stop(sc);
+	/* Reset the chip to a known state. */
+	ste_reset(sc);
 
 	/* Init our MAC address */
 	for (i = 0; i < ETHER_ADDR_LEN; i += 2) {
@@ -1318,7 +1670,7 @@ ste_init_locked(sc)
 	}
 
 	/* Init RX list */
-	if (ste_init_rx_list(sc) == ENOBUFS) {
+	if (ste_init_rx_list(sc) != 0) {
 		device_printf(sc->ste_dev,
 		    "initialization failed: no memory for RX buffers\n");
 		ste_stop(sc);
@@ -1331,6 +1683,12 @@ ste_init_locked(sc)
 	/* Init TX descriptors */
 	ste_init_tx_list(sc);
 
+	/* Clear and disable WOL. */
+	val = CSR_READ_1(sc, STE_WAKE_EVENT);
+	val &= ~(STE_WAKEEVENT_WAKEPKT_ENB | STE_WAKEEVENT_MAGICPKT_ENB |
+	    STE_WAKEEVENT_LINKEVT_ENB | STE_WAKEEVENT_WAKEONLAN_ENB);
+	CSR_WRITE_1(sc, STE_WAKE_EVENT, val);
+
 	/* Set the TX freethresh value */
 	CSR_WRITE_1(sc, STE_TX_DMABURST_THRESH, STE_PACKET_SIZE >> 8);
 
@@ -1340,34 +1698,21 @@ ste_init_locked(sc)
 	/* Set the TX reclaim threshold. */
 	CSR_WRITE_1(sc, STE_TX_RECLAIM_THRESH, (STE_PACKET_SIZE >> 4));
 
+	/* Accept VLAN length packets */
+	CSR_WRITE_2(sc, STE_MAX_FRAMELEN, ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN);
+
 	/* Set up the RX filter. */
-	CSR_WRITE_1(sc, STE_RX_MODE, STE_RXMODE_UNICAST);
-
-	/* If we want promiscuous mode, set the allframes bit. */
-	if (ifp->if_flags & IFF_PROMISC) {
-		STE_SETBIT1(sc, STE_RX_MODE, STE_RXMODE_PROMISC);
-	} else {
-		STE_CLRBIT1(sc, STE_RX_MODE, STE_RXMODE_PROMISC);
-	}
-
-	/* Set capture broadcast bit to accept broadcast frames. */
-	if (ifp->if_flags & IFF_BROADCAST) {
-		STE_SETBIT1(sc, STE_RX_MODE, STE_RXMODE_BROADCAST);
-	} else {
-		STE_CLRBIT1(sc, STE_RX_MODE, STE_RXMODE_BROADCAST);
-	}
-
-	ste_setmulti(sc);
+	ste_rxfilter(sc);
 
 	/* Load the address of the RX list. */
 	STE_SETBIT4(sc, STE_DMACTL, STE_DMACTL_RXDMA_STALL);
 	ste_wait(sc);
 	CSR_WRITE_4(sc, STE_RX_DMALIST_PTR,
-	    vtophys(&sc->ste_ldata->ste_rx_list[0]));
+	    STE_ADDR_LO(sc->ste_ldata.ste_rx_list_paddr));
 	STE_SETBIT4(sc, STE_DMACTL, STE_DMACTL_RXDMA_UNSTALL);
 	STE_SETBIT4(sc, STE_DMACTL, STE_DMACTL_RXDMA_UNSTALL);
 
-	/* Set TX polling interval (defer until we TX first packet */
+	/* Set TX polling interval(defer until we TX first packet). */
 	CSR_WRITE_1(sc, STE_TX_DMAPOLL_PERIOD, 0);
 
 	/* Load address of the TX list */
@@ -1377,7 +1722,9 @@ ste_init_locked(sc)
 	STE_SETBIT4(sc, STE_DMACTL, STE_DMACTL_TXDMA_UNSTALL);
 	STE_SETBIT4(sc, STE_DMACTL, STE_DMACTL_TXDMA_UNSTALL);
 	ste_wait(sc);
-	sc->ste_tx_prev = NULL;
+	/* Select 3.2us timer. */
+	STE_CLRBIT4(sc, STE_DMACTL, STE_DMACTL_COUNTDOWN_SPEED |
+	    STE_DMACTL_COUNTDOWN_MODE);
 
 	/* Enable receiver and transmitter */
 	CSR_WRITE_2(sc, STE_MACCTL0, 0);
@@ -1387,153 +1734,183 @@ ste_init_locked(sc)
 
 	/* Enable stats counters. */
 	STE_SETBIT2(sc, STE_MACCTL1, STE_MACCTL1_STATS_ENABLE);
+	/* Clear stats counters. */
+	ste_stats_clear(sc);
 
+	CSR_WRITE_2(sc, STE_COUNTDOWN, 0);
 	CSR_WRITE_2(sc, STE_ISR, 0xFFFF);
 #ifdef DEVICE_POLLING
 	/* Disable interrupts if we are polling. */
 	if (ifp->if_capenable & IFCAP_POLLING)
 		CSR_WRITE_2(sc, STE_IMR, 0);
-	else   
+	else
 #endif
 	/* Enable interrupts. */
 	CSR_WRITE_2(sc, STE_IMR, STE_INTRS);
 
-	/* Accept VLAN length packets */
-	CSR_WRITE_2(sc, STE_MAX_FRAMELEN, ETHER_MAX_LEN + ETHER_VLAN_ENCAP_LEN);
-
-	ste_ifmedia_upd_locked(ifp);
+	sc->ste_flags &= ~STE_FLAG_LINK;
+	/* Switch to the current media. */
+	mii_mediachg(mii);
 
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 
-	callout_reset(&sc->ste_stat_callout, hz, ste_stats_update, sc);
-
-	return;
+	callout_reset(&sc->ste_callout, hz, ste_tick, sc);
 }
 
 static void
-ste_stop(sc)
-	struct ste_softc	*sc;
+ste_stop(struct ste_softc *sc)
 {
-	int			i;
-	struct ifnet		*ifp;
+	struct ifnet *ifp;
+	struct ste_chain_onefrag *cur_rx;
+	struct ste_chain *cur_tx;
+	uint32_t val;
+	int i;
 
 	STE_LOCK_ASSERT(sc);
 	ifp = sc->ste_ifp;
 
-	callout_stop(&sc->ste_stat_callout);
+	callout_stop(&sc->ste_callout);
+	sc->ste_timer = 0;
 	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING|IFF_DRV_OACTIVE);
 
 	CSR_WRITE_2(sc, STE_IMR, 0);
-	STE_SETBIT2(sc, STE_MACCTL1, STE_MACCTL1_TX_DISABLE);
-	STE_SETBIT2(sc, STE_MACCTL1, STE_MACCTL1_RX_DISABLE);
-	STE_SETBIT2(sc, STE_MACCTL1, STE_MACCTL1_STATS_DISABLE);
-	STE_SETBIT2(sc, STE_DMACTL, STE_DMACTL_TXDMA_STALL);
-	STE_SETBIT2(sc, STE_DMACTL, STE_DMACTL_RXDMA_STALL);
+	CSR_WRITE_2(sc, STE_COUNTDOWN, 0);
+	/* Stop pending DMA. */
+	val = CSR_READ_4(sc, STE_DMACTL);
+	val |= STE_DMACTL_TXDMA_STALL | STE_DMACTL_RXDMA_STALL;
+	CSR_WRITE_4(sc, STE_DMACTL, val);
 	ste_wait(sc);
-	/* 
-	 * Try really hard to stop the RX engine or under heavy RX 
-	 * data chip will write into de-allocated memory.
-	 */
-	ste_reset(sc);
-
-	sc->ste_link = 0;
+	/* Disable auto-polling. */
+	CSR_WRITE_1(sc, STE_RX_DMAPOLL_PERIOD, 0);
+	CSR_WRITE_1(sc, STE_TX_DMAPOLL_PERIOD, 0);
+	/* Nullify DMA address to stop any further DMA. */
+	CSR_WRITE_4(sc, STE_RX_DMALIST_PTR, 0);
+	CSR_WRITE_4(sc, STE_TX_DMALIST_PTR, 0);
+	/* Stop TX/RX MAC. */
+	val = CSR_READ_2(sc, STE_MACCTL1);
+	val |= STE_MACCTL1_TX_DISABLE | STE_MACCTL1_RX_DISABLE |
+	    STE_MACCTL1_STATS_DISABLE;
+	CSR_WRITE_2(sc, STE_MACCTL1, val);
+	for (i = 0; i < STE_TIMEOUT; i++) {
+		DELAY(10);
+		if ((CSR_READ_2(sc, STE_MACCTL1) & (STE_MACCTL1_TX_DISABLE |
+		    STE_MACCTL1_RX_DISABLE | STE_MACCTL1_STATS_DISABLE)) == 0)
+			break;
+	}
+	if (i == STE_TIMEOUT)
+		device_printf(sc->ste_dev, "Stopping MAC timed out\n");
+	/* Acknowledge any pending interrupts. */
+	CSR_READ_2(sc, STE_ISR_ACK);
+	ste_stats_update(sc);
 
 	for (i = 0; i < STE_RX_LIST_CNT; i++) {
-		if (sc->ste_cdata.ste_rx_chain[i].ste_mbuf != NULL) {
-			m_freem(sc->ste_cdata.ste_rx_chain[i].ste_mbuf);
-			sc->ste_cdata.ste_rx_chain[i].ste_mbuf = NULL;
+		cur_rx = &sc->ste_cdata.ste_rx_chain[i];
+		if (cur_rx->ste_mbuf != NULL) {
+			bus_dmamap_sync(sc->ste_cdata.ste_rx_tag,
+			    cur_rx->ste_map, BUS_DMASYNC_POSTREAD);
+			bus_dmamap_unload(sc->ste_cdata.ste_rx_tag,
+			    cur_rx->ste_map);
+			m_freem(cur_rx->ste_mbuf);
+			cur_rx->ste_mbuf = NULL;
 		}
 	}
 
 	for (i = 0; i < STE_TX_LIST_CNT; i++) {
-		if (sc->ste_cdata.ste_tx_chain[i].ste_mbuf != NULL) {
-			m_freem(sc->ste_cdata.ste_tx_chain[i].ste_mbuf);
-			sc->ste_cdata.ste_tx_chain[i].ste_mbuf = NULL;
+		cur_tx = &sc->ste_cdata.ste_tx_chain[i];
+		if (cur_tx->ste_mbuf != NULL) {
+			bus_dmamap_sync(sc->ste_cdata.ste_tx_tag,
+			    cur_tx->ste_map, BUS_DMASYNC_POSTWRITE);
+			bus_dmamap_unload(sc->ste_cdata.ste_tx_tag,
+			    cur_tx->ste_map);
+			m_freem(cur_tx->ste_mbuf);
+			cur_tx->ste_mbuf = NULL;
 		}
 	}
-
-	bzero(sc->ste_ldata, sizeof(struct ste_list_data));
-
-	return;
 }
 
 static void
-ste_reset(sc)
-	struct ste_softc	*sc;
+ste_reset(struct ste_softc *sc)
 {
-	int			i;
+	uint32_t ctl;
+	int i;
 
-	STE_SETBIT4(sc, STE_ASICCTL,
-	    STE_ASICCTL_GLOBAL_RESET|STE_ASICCTL_RX_RESET|
-	    STE_ASICCTL_TX_RESET|STE_ASICCTL_DMA_RESET|
-	    STE_ASICCTL_FIFO_RESET|STE_ASICCTL_NETWORK_RESET|
-	    STE_ASICCTL_AUTOINIT_RESET|STE_ASICCTL_HOST_RESET|
-	    STE_ASICCTL_EXTRESET_RESET);
-
-	DELAY(100000);
+	ctl = CSR_READ_4(sc, STE_ASICCTL);
+	ctl |= STE_ASICCTL_GLOBAL_RESET | STE_ASICCTL_RX_RESET |
+	    STE_ASICCTL_TX_RESET | STE_ASICCTL_DMA_RESET |
+	    STE_ASICCTL_FIFO_RESET | STE_ASICCTL_NETWORK_RESET |
+	    STE_ASICCTL_AUTOINIT_RESET |STE_ASICCTL_HOST_RESET |
+	    STE_ASICCTL_EXTRESET_RESET;
+	CSR_WRITE_4(sc, STE_ASICCTL, ctl);
+	CSR_READ_4(sc, STE_ASICCTL);
+	/*
+	 * Due to the need of accessing EEPROM controller can take
+	 * up to 1ms to complete the global reset.
+	 */
+	DELAY(1000);
 
 	for (i = 0; i < STE_TIMEOUT; i++) {
 		if (!(CSR_READ_4(sc, STE_ASICCTL) & STE_ASICCTL_RESET_BUSY))
 			break;
+		DELAY(10);
 	}
 
 	if (i == STE_TIMEOUT)
 		device_printf(sc->ste_dev, "global reset never completed\n");
+}
 
-	return;
+static void
+ste_restart_tx(struct ste_softc *sc)
+{
+	uint16_t mac;
+	int i;
+
+	for (i = 0; i < STE_TIMEOUT; i++) {
+		mac = CSR_READ_2(sc, STE_MACCTL1);
+		mac |= STE_MACCTL1_TX_ENABLE;
+		CSR_WRITE_2(sc, STE_MACCTL1, mac);
+		mac = CSR_READ_2(sc, STE_MACCTL1);
+		if ((mac & STE_MACCTL1_TX_ENABLED) != 0)
+			break;
+		DELAY(10);
+	}
+
+	if (i == STE_TIMEOUT)
+		device_printf(sc->ste_dev, "starting Tx failed");
 }
 
 static int
-ste_ioctl(ifp, command, data)
-	struct ifnet		*ifp;
-	u_long			command;
-	caddr_t			data;
+ste_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 {
-	struct ste_softc	*sc;
-	struct ifreq		*ifr;
-	struct mii_data		*mii;
-	int			error = 0;
+	struct ste_softc *sc;
+	struct ifreq *ifr;
+	struct mii_data *mii;
+	int error = 0, mask;
 
 	sc = ifp->if_softc;
 	ifr = (struct ifreq *)data;
 
-	switch(command) {
+	switch (command) {
 	case SIOCSIFFLAGS:
 		STE_LOCK(sc);
-		if (ifp->if_flags & IFF_UP) {
-			if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
-			    ifp->if_flags & IFF_PROMISC &&
-			    !(sc->ste_if_flags & IFF_PROMISC)) {
-				STE_SETBIT1(sc, STE_RX_MODE,
-				    STE_RXMODE_PROMISC);
-			} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
-			    !(ifp->if_flags & IFF_PROMISC) &&
-			    sc->ste_if_flags & IFF_PROMISC) {
-				STE_CLRBIT1(sc, STE_RX_MODE,
-				    STE_RXMODE_PROMISC);
-			} 
-			if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
-			    (ifp->if_flags ^ sc->ste_if_flags) & IFF_ALLMULTI)
-				ste_setmulti(sc);
-			if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
-				sc->ste_tx_thresh = STE_TXSTART_THRESH;
+		if ((ifp->if_flags & IFF_UP) != 0) {
+			if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 &&
+			    ((ifp->if_flags ^ sc->ste_if_flags) &
+			     (IFF_PROMISC | IFF_ALLMULTI)) != 0)
+				ste_rxfilter(sc);
+			else
 				ste_init_locked(sc);
-			}
-		} else {
-			if (ifp->if_drv_flags & IFF_DRV_RUNNING)
-				ste_stop(sc);
-		}
+		} else if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+			ste_stop(sc);
 		sc->ste_if_flags = ifp->if_flags;
 		STE_UNLOCK(sc);
-		error = 0;
 		break;
 	case SIOCADDMULTI:
 	case SIOCDELMULTI:
 		STE_LOCK(sc);
-		ste_setmulti(sc);
+		if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+			ste_rxfilter(sc);
 		STE_UNLOCK(sc);
-		error = 0;
 		break;
 	case SIOCGIFMEDIA:
 	case SIOCSIFMEDIA:
@@ -1541,95 +1918,107 @@ ste_ioctl(ifp, command, data)
 		error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, command);
 		break;
 	case SIOCSIFCAP:
+		STE_LOCK(sc);
+		mask = ifr->ifr_reqcap ^ ifp->if_capenable;
 #ifdef DEVICE_POLLING
-		if (ifr->ifr_reqcap & IFCAP_POLLING &&
-		    !(ifp->if_capenable & IFCAP_POLLING)) {
-			error = ether_poll_register(ste_poll, ifp);
-			if (error)
-				return(error);
-			STE_LOCK(sc);
-			/* Disable interrupts */
-			CSR_WRITE_2(sc, STE_IMR, 0);
-			ifp->if_capenable |= IFCAP_POLLING;
-			STE_UNLOCK(sc);
-			return (error);
-			
-		}
-		if (!(ifr->ifr_reqcap & IFCAP_POLLING) &&
-		    ifp->if_capenable & IFCAP_POLLING) {
-			error = ether_poll_deregister(ifp);
-			/* Enable interrupts. */
-			STE_LOCK(sc);
-			CSR_WRITE_2(sc, STE_IMR, STE_INTRS);
-			ifp->if_capenable &= ~IFCAP_POLLING;
-			STE_UNLOCK(sc);
-			return (error);
+		if ((mask & IFCAP_POLLING) != 0 &&
+		    (IFCAP_POLLING & ifp->if_capabilities) != 0) {
+			ifp->if_capenable ^= IFCAP_POLLING;
+			if ((IFCAP_POLLING & ifp->if_capenable) != 0) {
+				error = ether_poll_register(ste_poll, ifp);
+				if (error != 0) {
+					STE_UNLOCK(sc);
+					break;
+				}
+				/* Disable interrupts. */
+				CSR_WRITE_2(sc, STE_IMR, 0);
+			} else {
+				error = ether_poll_deregister(ifp);
+				/* Enable interrupts. */
+				CSR_WRITE_2(sc, STE_IMR, STE_INTRS);
+			}
 		}
 #endif /* DEVICE_POLLING */
+		if ((mask & IFCAP_WOL_MAGIC) != 0 &&
+		    (ifp->if_capabilities & IFCAP_WOL_MAGIC) != 0)
+			ifp->if_capenable ^= IFCAP_WOL_MAGIC;
+		STE_UNLOCK(sc);
 		break;
 	default:
 		error = ether_ioctl(ifp, command, data);
 		break;
 	}
 
-	return(error);
+	return (error);
 }
 
 static int
-ste_encap(sc, c, m_head)
-	struct ste_softc	*sc;
-	struct ste_chain	*c;
-	struct mbuf		*m_head;
+ste_encap(struct ste_softc *sc, struct mbuf **m_head, struct ste_chain *txc)
 {
-	int			frag = 0;
-	struct ste_frag		*f = NULL;
-	struct mbuf		*m;
-	struct ste_desc		*d;
+	struct ste_frag *frag;
+	struct mbuf *m;
+	struct ste_desc *desc;
+	bus_dma_segment_t txsegs[STE_MAXFRAGS];
+	int error, i, nsegs;
 
-	d = c->ste_ptr;
-	d->ste_ctl = 0;
+	STE_LOCK_ASSERT(sc);
+	M_ASSERTPKTHDR((*m_head));
 
-encap_retry:
-	for (m = m_head, frag = 0; m != NULL; m = m->m_next) {
-		if (m->m_len != 0) {
-			if (frag == STE_MAXFRAGS)
-				break;
-			f = &d->ste_frags[frag];
-			f->ste_addr = vtophys(mtod(m, vm_offset_t));
-			f->ste_len = m->m_len;
-			frag++;
+	error = bus_dmamap_load_mbuf_sg(sc->ste_cdata.ste_tx_tag,
+	    txc->ste_map, *m_head, txsegs, &nsegs, 0);
+	if (error == EFBIG) {
+		m = m_collapse(*m_head, M_DONTWAIT, STE_MAXFRAGS);
+		if (m == NULL) {
+			m_freem(*m_head);
+			*m_head = NULL;
+			return (ENOMEM);
 		}
-	}
-
-	if (m != NULL) {
-		struct mbuf *mn;
-
-		/*
-		 * We ran out of segments. We have to recopy this
-		 * mbuf chain first. Bail out if we can't get the
-		 * new buffers.
-		 */
-		mn = m_defrag(m_head, M_DONTWAIT);
-		if (mn == NULL) {
-			m_freem(m_head);
-			return ENOMEM;
+		*m_head = m;
+		error = bus_dmamap_load_mbuf_sg(sc->ste_cdata.ste_tx_tag,
+		    txc->ste_map, *m_head, txsegs, &nsegs, 0);
+		if (error != 0) {
+			m_freem(*m_head);
+			*m_head = NULL;
+			return (error);
 		}
-		m_head = mn;
-		goto encap_retry;
+	} else if (error != 0)
+		return (error);
+	if (nsegs == 0) {
+		m_freem(*m_head);
+		*m_head = NULL;
+		return (EIO);
 	}
+	bus_dmamap_sync(sc->ste_cdata.ste_tx_tag, txc->ste_map,
+	    BUS_DMASYNC_PREWRITE);
 
-	c->ste_mbuf = m_head;
-	d->ste_frags[frag - 1].ste_len |= STE_FRAG_LAST;
-	d->ste_ctl = 1;
+	desc = txc->ste_ptr;
+	for (i = 0; i < nsegs; i++) {
+		frag = &desc->ste_frags[i];
+		frag->ste_addr = htole32(STE_ADDR_LO(txsegs[i].ds_addr));
+		frag->ste_len = htole32(txsegs[i].ds_len);
+	}
+	desc->ste_frags[i - 1].ste_len |= htole32(STE_FRAG_LAST);
+	/*
+	 * Because we use Tx polling we can't chain multiple
+	 * Tx descriptors here. Otherwise we race with controller.
+	 */
+	desc->ste_next = 0;
+	if ((sc->ste_cdata.ste_tx_prod % STE_TX_INTR_FRAMES) == 0)
+		desc->ste_ctl = htole32(STE_TXCTL_ALIGN_DIS |
+		    STE_TXCTL_DMAINTR);
+	else
+		desc->ste_ctl = htole32(STE_TXCTL_ALIGN_DIS);
+	txc->ste_mbuf = *m_head;
+	STE_INC(sc->ste_cdata.ste_tx_prod, STE_TX_LIST_CNT);
+	sc->ste_cdata.ste_tx_cnt++;
 
-	return(0);
+	return (0);
 }
 
 static void
-ste_start(ifp)
-	struct ifnet		*ifp;
+ste_start(struct ifnet *ifp)
 {
-	struct ste_softc	*sc;
+	struct ste_softc *sc;
 
 	sc = ifp->if_softc;
 	STE_LOCK(sc);
@@ -1638,120 +2027,250 @@ ste_start(ifp)
 }
 
 static void
-ste_start_locked(ifp)
-	struct ifnet		*ifp;
+ste_start_locked(struct ifnet *ifp)
 {
-	struct ste_softc	*sc;
-	struct mbuf		*m_head = NULL;
-	struct ste_chain	*cur_tx;
-	int			idx;
+	struct ste_softc *sc;
+	struct ste_chain *cur_tx;
+	struct mbuf *m_head = NULL;
+	int enq;
 
 	sc = ifp->if_softc;
 	STE_LOCK_ASSERT(sc);
 
-	if (!sc->ste_link)
+	if ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
+	    IFF_DRV_RUNNING || (sc->ste_flags & STE_FLAG_LINK) == 0)
 		return;
 
-	if (ifp->if_drv_flags & IFF_DRV_OACTIVE)
-		return;
-
-	idx = sc->ste_cdata.ste_tx_prod;
-
-	while(sc->ste_cdata.ste_tx_chain[idx].ste_mbuf == NULL) {
-		/*
-		 * We cannot re-use the last (free) descriptor;
-		 * the chip may not have read its ste_next yet.
-		 */
-		if (STE_NEXT(idx, STE_TX_LIST_CNT) ==
-		    sc->ste_cdata.ste_tx_cons) {
+	for (enq = 0; !IFQ_DRV_IS_EMPTY(&ifp->if_snd);) {
+		if (sc->ste_cdata.ste_tx_cnt == STE_TX_LIST_CNT - 1) {
+			/*
+			 * Controller may have cached copy of the last used
+			 * next ptr so we have to reserve one TFD to avoid
+			 * TFD overruns.
+			 */
 			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
 			break;
 		}
-
 		IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head);
 		if (m_head == NULL)
 			break;
-
-		cur_tx = &sc->ste_cdata.ste_tx_chain[idx];
-
-		if (ste_encap(sc, cur_tx, m_head) != 0)
+		cur_tx = &sc->ste_cdata.ste_tx_chain[sc->ste_cdata.ste_tx_prod];
+		if (ste_encap(sc, &m_head, cur_tx) != 0) {
+			if (m_head == NULL)
+				break;
+			IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
 			break;
-
-		cur_tx->ste_ptr->ste_next = 0;
-
-		if (sc->ste_tx_prev == NULL) {
-			cur_tx->ste_ptr->ste_ctl = STE_TXCTL_DMAINTR | 1;
-			/* Load address of the TX list */
+		}
+		if (sc->ste_cdata.ste_last_tx == NULL) {
+			bus_dmamap_sync(sc->ste_cdata.ste_tx_list_tag,
+			    sc->ste_cdata.ste_tx_list_map,
+			    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 			STE_SETBIT4(sc, STE_DMACTL, STE_DMACTL_TXDMA_STALL);
 			ste_wait(sc);
-
 			CSR_WRITE_4(sc, STE_TX_DMALIST_PTR,
-			    vtophys(&sc->ste_ldata->ste_tx_list[0]));
-
-			/* Set TX polling interval to start TX engine */
+	    		    STE_ADDR_LO(sc->ste_ldata.ste_tx_list_paddr));
 			CSR_WRITE_1(sc, STE_TX_DMAPOLL_PERIOD, 64);
-		  
 			STE_SETBIT4(sc, STE_DMACTL, STE_DMACTL_TXDMA_UNSTALL);
 			ste_wait(sc);
-		}else{
-			cur_tx->ste_ptr->ste_ctl = STE_TXCTL_DMAINTR | 1;
-			sc->ste_tx_prev->ste_ptr->ste_next
-				= cur_tx->ste_phys;
+		} else {
+			sc->ste_cdata.ste_last_tx->ste_ptr->ste_next =
+			    sc->ste_cdata.ste_last_tx->ste_phys;
+			bus_dmamap_sync(sc->ste_cdata.ste_tx_list_tag,
+			    sc->ste_cdata.ste_tx_list_map,
+			    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 		}
+		sc->ste_cdata.ste_last_tx = cur_tx;
 
-		sc->ste_tx_prev = cur_tx;
-
+		enq++;
 		/*
 		 * If there's a BPF listener, bounce a copy of this frame
 		 * to him.
 	 	 */
-		BPF_MTAP(ifp, cur_tx->ste_mbuf);
-
-		STE_INC(idx, STE_TX_LIST_CNT);
-		ifp->if_timer = 5;
+		BPF_MTAP(ifp, m_head);
 	}
-	sc->ste_cdata.ste_tx_prod = idx;
 
-	return;
+	if (enq > 0)
+		sc->ste_timer = STE_TX_TIMEOUT;
 }
 
 static void
-ste_watchdog(ifp)
-	struct ifnet		*ifp;
+ste_watchdog(struct ste_softc *sc)
 {
-	struct ste_softc	*sc;
+	struct ifnet *ifp;
 
-	sc = ifp->if_softc;
-	STE_LOCK(sc);
+	ifp = sc->ste_ifp;
+	STE_LOCK_ASSERT(sc);
+
+	if (sc->ste_timer == 0 || --sc->ste_timer)
+		return;
 
 	ifp->if_oerrors++;
 	if_printf(ifp, "watchdog timeout\n");
 
-	ste_txeoc(sc);
 	ste_txeof(sc);
-	ste_rxeoc(sc);
-	ste_rxeof(sc);
-	ste_reset(sc);
+	ste_txeoc(sc);
+	ste_rxeof(sc, -1);
+	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 	ste_init_locked(sc);
 
 	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		ste_start_locked(ifp);
-	STE_UNLOCK(sc);
-
-	return;
 }
 
 static int
-ste_shutdown(dev)
-	device_t		dev;
+ste_shutdown(device_t dev)
 {
-	struct ste_softc	*sc;
+
+	return (ste_suspend(dev));
+}
+
+static int
+ste_suspend(device_t dev)
+{
+	struct ste_softc *sc;
 
 	sc = device_get_softc(dev);
 
 	STE_LOCK(sc);
 	ste_stop(sc);
+	ste_setwol(sc);
 	STE_UNLOCK(sc);
 
 	return (0);
 }
+
+static int
+ste_resume(device_t dev)
+{
+	struct ste_softc *sc;
+	struct ifnet *ifp;
+	int pmc;
+	uint16_t pmstat;
+
+	sc = device_get_softc(dev);
+	STE_LOCK(sc);
+	if (pci_find_extcap(sc->ste_dev, PCIY_PMG, &pmc) == 0) {
+		/* Disable PME and clear PME status. */
+		pmstat = pci_read_config(sc->ste_dev,
+		    pmc + PCIR_POWER_STATUS, 2);
+		if ((pmstat & PCIM_PSTAT_PMEENABLE) != 0) {
+			pmstat &= ~PCIM_PSTAT_PMEENABLE;
+			pci_write_config(sc->ste_dev,
+			    pmc + PCIR_POWER_STATUS, pmstat, 2);
+		}
+	}
+	ifp = sc->ste_ifp;
+	if ((ifp->if_flags & IFF_UP) != 0) {
+		ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+		ste_init_locked(sc);
+	}
+	STE_UNLOCK(sc);
+
+	return (0);
+}
+
+#define	STE_SYSCTL_STAT_ADD32(c, h, n, p, d)	\
+	    SYSCTL_ADD_UINT(c, h, OID_AUTO, n, CTLFLAG_RD, p, 0, d)
+#define	STE_SYSCTL_STAT_ADD64(c, h, n, p, d)	\
+	    SYSCTL_ADD_QUAD(c, h, OID_AUTO, n, CTLFLAG_RD, p, d)
+
+static void
+ste_sysctl_node(struct ste_softc *sc)
+{
+	struct sysctl_ctx_list *ctx;
+	struct sysctl_oid_list *child, *parent;
+	struct sysctl_oid *tree;
+	struct ste_hw_stats *stats;
+
+	stats = &sc->ste_stats;
+	ctx = device_get_sysctl_ctx(sc->ste_dev);
+	child = SYSCTL_CHILDREN(device_get_sysctl_tree(sc->ste_dev));
+
+	SYSCTL_ADD_INT(ctx, child, OID_AUTO, "int_rx_mod",
+	    CTLFLAG_RW, &sc->ste_int_rx_mod, 0, "ste RX interrupt moderation");
+	/* Pull in device tunables. */
+	sc->ste_int_rx_mod = STE_IM_RX_TIMER_DEFAULT;
+	resource_int_value(device_get_name(sc->ste_dev),
+	    device_get_unit(sc->ste_dev), "int_rx_mod", &sc->ste_int_rx_mod);
+
+	tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", CTLFLAG_RD,
+	    NULL, "STE statistics");
+	parent = SYSCTL_CHILDREN(tree);
+
+	/* Rx statistics. */
+	tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "rx", CTLFLAG_RD,
+	    NULL, "Rx MAC statistics");
+	child = SYSCTL_CHILDREN(tree);
+	STE_SYSCTL_STAT_ADD64(ctx, child, "good_octets",
+	    &stats->rx_bytes, "Good octets");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "good_frames",
+	    &stats->rx_frames, "Good frames");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames",
+	    &stats->rx_bcast_frames, "Good broadcast frames");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames",
+	    &stats->rx_mcast_frames, "Good multicast frames");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "lost_frames",
+	    &stats->rx_lost_frames, "Lost frames");
+
+	/* Tx statistics. */
+	tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "tx", CTLFLAG_RD,
+	    NULL, "Tx MAC statistics");
+	child = SYSCTL_CHILDREN(tree);
+	STE_SYSCTL_STAT_ADD64(ctx, child, "good_octets",
+	    &stats->tx_bytes, "Good octets");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "good_frames",
+	    &stats->tx_frames, "Good frames");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "good_bcast_frames",
+	    &stats->tx_bcast_frames, "Good broadcast frames");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "good_mcast_frames",
+	    &stats->tx_mcast_frames, "Good multicast frames");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "carrier_errs",
+	    &stats->tx_carrsense_errs, "Carrier sense errors");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "single_colls",
+	    &stats->tx_single_colls, "Single collisions");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "multi_colls",
+	    &stats->tx_multi_colls, "Multiple collisions");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "late_colls",
+	    &stats->tx_late_colls, "Late collisions");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "defers",
+	    &stats->tx_frames_defered, "Frames with deferrals");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "excess_defers",
+	    &stats->tx_excess_defers, "Frames with excessive derferrals");
+	STE_SYSCTL_STAT_ADD32(ctx, child, "abort",
+	    &stats->tx_abort, "Aborted frames due to Excessive collisions");
+}
+
+#undef STE_SYSCTL_STAT_ADD32
+#undef STE_SYSCTL_STAT_ADD64
+
+static void
+ste_setwol(struct ste_softc *sc)
+{
+	struct ifnet *ifp;
+	uint16_t pmstat;
+	uint8_t val;
+	int pmc;
+
+	STE_LOCK_ASSERT(sc);
+
+	if (pci_find_extcap(sc->ste_dev, PCIY_PMG, &pmc) != 0) {
+		/* Disable WOL. */
+		CSR_READ_1(sc, STE_WAKE_EVENT);
+		CSR_WRITE_1(sc, STE_WAKE_EVENT, 0);
+		return;
+	}
+
+	ifp = sc->ste_ifp;
+	val = CSR_READ_1(sc, STE_WAKE_EVENT);
+	val &= ~(STE_WAKEEVENT_WAKEPKT_ENB | STE_WAKEEVENT_MAGICPKT_ENB |
+	    STE_WAKEEVENT_LINKEVT_ENB | STE_WAKEEVENT_WAKEONLAN_ENB);
+	if ((ifp->if_capenable & IFCAP_WOL_MAGIC) != 0)
+		val |= STE_WAKEEVENT_MAGICPKT_ENB | STE_WAKEEVENT_WAKEONLAN_ENB;
+	CSR_WRITE_1(sc, STE_WAKE_EVENT, val);
+	/* Request PME. */
+	pmstat = pci_read_config(sc->ste_dev, pmc + PCIR_POWER_STATUS, 2);
+	pmstat &= ~(PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE);
+	if ((ifp->if_capenable & IFCAP_WOL_MAGIC) != 0)
+		pmstat |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE;
+	pci_write_config(sc->ste_dev, pmc + PCIR_POWER_STATUS, pmstat, 2);
+}
diff --git a/sys/dev/ste/if_stereg.h b/sys/dev/ste/if_stereg.h
index 0114ebe459c..840e0bfada5 100644
--- a/sys/dev/ste/if_stereg.h
+++ b/sys/dev/ste/if_stereg.h
@@ -63,6 +63,7 @@
 #define STE_RX_DMABURST_THRESH	0x14
 #define STE_RX_DMAURG_THRESH	0x15
 #define STE_RX_DMAPOLL_PERIOD	0x16
+#define	STE_COUNTDOWN		0x18
 #define STE_DEBUGCTL		0x1A
 #define STE_ASICCTL		0x30
 #define STE_EEPROM_DATA		0x34
@@ -75,7 +76,6 @@
 #define STE_WAKE_EVENT		0x45
 #define STE_TX_STATUS		0x46
 #define STE_TX_FRAMEID		0x47
-#define STE_COUNTDOWN		0x48
 #define STE_ISR_ACK		0x4A
 #define STE_IMR			0x4C
 #define STE_ISR			0x4E
@@ -92,11 +92,25 @@
 #define STE_MAR1		0x62
 #define STE_MAR2		0x64
 #define STE_MAR3		0x66
-#define STE_STATS		0x68
 
-#define STE_LATE_COLLS  0x75
-#define STE_MULTI_COLLS	0x76
-#define STE_SINGLE_COLLS 0x77	
+#define	STE_STAT_RX_OCTETS_LO	0x68
+#define	STE_STAT_RX_OCTETS_HI	0x6A
+#define	STE_STAT_TX_OCTETS_LO	0x6C
+#define	STE_STAT_TX_OCTETS_HI	0x6E
+#define	STE_STAT_TX_FRAMES	0x70
+#define	STE_STAT_RX_FRAMES	0x72
+#define	STE_STAT_CARRIER_ERR	0x74
+#define	STE_STAT_LATE_COLLS	0x75
+#define	STE_STAT_MULTI_COLLS	0x76
+#define	STE_STAT_SINGLE_COLLS	0x77
+#define	STE_STAT_TX_DEFER	0x78
+#define	STE_STAT_RX_LOST	0x79
+#define	STE_STAT_TX_EXDEFER	0x7A
+#define	STE_STAT_TX_ABORT	0x7B
+#define	STE_STAT_TX_BCAST	0x7C
+#define	STE_STAT_RX_BCAST	0x7D
+#define	STE_STAT_TX_MCAST	0x7E
+#define	STE_STAT_RX_MCAST	0x7F
 
 #define STE_DMACTL_RXDMA_STOPPED	0x00000001
 #define STE_DMACTL_TXDMA_CMPREQ		0x00000002
@@ -199,18 +213,6 @@
 #define STE_ASICCTL_SOFTINTR		0x02000000
 #define STE_ASICCTL_RESET_BUSY		0x04000000
 
-#define STE_ASICCTL1_GLOBAL_RESET	0x0001
-#define STE_ASICCTL1_RX_RESET		0x0002
-#define STE_ASICCTL1_TX_RESET		0x0004
-#define STE_ASICCTL1_DMA_RESET		0x0008
-#define STE_ASICCTL1_FIFO_RESET		0x0010
-#define STE_ASICCTL1_NETWORK_RESET	0x0020
-#define STE_ASICCTL1_HOST_RESET		0x0040
-#define STE_ASICCTL1_AUTOINIT_RESET	0x0080
-#define STE_ASICCTL1_EXTRESET_RESET	0x0100
-#define STE_ASICCTL1_SOFTINTR		0x0200
-#define STE_ASICCTL1_RESET_BUSY		0x0400
-
 #define STE_EECTL_ADDR			0x00FF
 #define STE_EECTL_OPCODE		0x0300
 #define STE_EECTL_BUSY			0x1000
@@ -253,6 +255,11 @@
 #define STE_TXSTATUS_TXINTR_REQ		0x40
 #define STE_TXSTATUS_TXDONE		0x80
 
+#define	STE_ERR_BITS			"\20"				\
+					"\2RECLAIM\3STSOFLOW"		\
+					"\4EXCESSCOLLS\5UNDERRUN"	\
+					"\6INTREQ\7DONE"
+
 #define STE_ISRACK_INTLATCH		0x0001
 #define STE_ISRACK_HOSTERR		0x0002
 #define STE_ISRACK_TX_DONE		0x0004
@@ -276,10 +283,10 @@
 #define STE_IMR_TX_DMADONE		0x0200
 #define STE_IMR_RX_DMADONE		0x0400
 
-#define STE_INTRS					\
+#define STE_INTRS				\
 	(STE_IMR_RX_DMADONE|STE_IMR_TX_DMADONE|	\
-	STE_IMR_TX_DONE|STE_IMR_HOSTERR| \
-        STE_IMR_LINKEVENT)
+	STE_IMR_TX_DONE|STE_IMR_SOFTINTR|	\
+	STE_IMR_HOSTERR)
 
 #define STE_ISR_INTLATCH		0x0001
 #define STE_ISR_HOSTERR			0x0002
@@ -343,6 +350,13 @@
 #define STE_PHYCTL_SPEEDSTAT		0x40
 #define STE_PHYCTL_LINKSTAT		0x80
 
+#define	STE_TIMER_TICKS			32
+#define	STE_TIMER_USECS(x)		((x * 10) / STE_TIMER_TICKS)
+
+#define	STE_IM_RX_TIMER_MIN		0
+#define	STE_IM_RX_TIMER_MAX		209712
+#define	STE_IM_RX_TIMER_DEFAULT		150
+
 /*
  * EEPROM offsets.
  */
@@ -384,49 +398,63 @@
 #define STE_PME_EN			0x0010
 #define STE_PME_STATUS			0x8000
 
-
-struct ste_stats {
-	u_int32_t		ste_rx_bytes;
-	u_int32_t		ste_tx_bytes;
-	u_int16_t		ste_tx_frames;
-	u_int16_t		ste_rx_frames;
-	u_int8_t		ste_carrsense_errs;
-	u_int8_t		ste_late_colls;
-	u_int8_t		ste_multi_colls;
-	u_int8_t		ste_single_colls;
-	u_int8_t		ste_tx_frames_defered;
-	u_int8_t		ste_rx_lost_frames;
-	u_int8_t		ste_tx_excess_defers;
-	u_int8_t		ste_tx_abort_excess_colls;
-	u_int8_t		ste_tx_bcast_frames;
-	u_int8_t		ste_rx_bcast_frames;
-	u_int8_t		ste_tx_mcast_frames;
-	u_int8_t		ste_rx_mcast_frames;
+struct ste_hw_stats {
+	uint64_t		rx_bytes;
+	uint32_t		rx_frames;
+	uint32_t		rx_bcast_frames;
+	uint32_t		rx_mcast_frames;
+	uint32_t		rx_lost_frames;
+	uint64_t		tx_bytes;
+	uint32_t		tx_frames;
+	uint32_t		tx_bcast_frames;
+	uint32_t		tx_mcast_frames;
+	uint32_t		tx_carrsense_errs;
+	uint32_t		tx_single_colls;
+	uint32_t		tx_multi_colls;
+	uint32_t		tx_late_colls;
+	uint32_t		tx_frames_defered;
+	uint32_t		tx_excess_defers;
+	uint32_t		tx_abort;
 };
 
 struct ste_frag {
-	u_int32_t		ste_addr;
-	u_int32_t		ste_len;
+	uint32_t		ste_addr;
+	uint32_t		ste_len;
 };
 
 #define STE_FRAG_LAST		0x80000000
 #define STE_FRAG_LEN		0x00001FFF
 
+/*
+ * A TFD is 16 to 512 bytes in length which means it can have up to 126
+ * fragments for a single Tx frame. Since most frames used in stack have
+ * 3-4 fragments supporting 8 fragments would be enough for normal
+ * operation. If we encounter more than 8 fragments we'll collapse them
+ * into a frame that has less than or equal to 8 fragments. Each buffer
+ * address of a fragment has no alignment limitation.
+ */
 #define STE_MAXFRAGS	8
 
 struct ste_desc {
-	u_int32_t		ste_next;
-	u_int32_t		ste_ctl;
+	uint32_t		ste_next;
+	uint32_t		ste_ctl;
 	struct ste_frag		ste_frags[STE_MAXFRAGS];
 };
 
+/*
+ * A RFD has the same structure of TFD which in turn means hardware
+ * supports scatter operation in Rx buffer. Since we just allocate Rx
+ * buffer with m_getcl(9) there is no fragmentation at all so use
+ * single fragment for RFD.
+ */
 struct ste_desc_onefrag {
-	u_int32_t		ste_next;
-	u_int32_t		ste_status;
+	uint32_t		ste_next;
+	uint32_t		ste_status;
 	struct ste_frag		ste_frag;
 };
 
 #define STE_TXCTL_WORDALIGN	0x00000003
+#define STE_TXCTL_ALIGN_DIS	0x00000001
 #define STE_TXCTL_FRAMEID	0x000003FC
 #define STE_TXCTL_NOCRC		0x00002000
 #define STE_TXCTL_TXINTR	0x00008000
@@ -445,87 +473,118 @@ struct ste_desc_onefrag {
 #define STE_RXSTAT_DMA_OFLOW	0x01000000
 #define STE_RXATAT_ONEBUF	0x10000000
 
+#define STE_RX_BYTES(x)		((x) & STE_RXSTAT_FRAMELEN)
+
 /*
  * register space access macros
  */
 #define CSR_WRITE_4(sc, reg, val)	\
-	bus_space_write_4(sc->ste_btag, sc->ste_bhandle, reg, val)
+	bus_write_4((sc)->ste_res, reg, val)
 #define CSR_WRITE_2(sc, reg, val)	\
-	bus_space_write_2(sc->ste_btag, sc->ste_bhandle, reg, val)
+	bus_write_2((sc)->ste_res, reg, val)
 #define CSR_WRITE_1(sc, reg, val)	\
-	bus_space_write_1(sc->ste_btag, sc->ste_bhandle, reg, val)
+	bus_write_1((sc)->ste_res, reg, val)
 
 #define CSR_READ_4(sc, reg)		\
-	bus_space_read_4(sc->ste_btag, sc->ste_bhandle, reg)
+	bus_read_4((sc)->ste_res, reg)
 #define CSR_READ_2(sc, reg)		\
-	bus_space_read_2(sc->ste_btag, sc->ste_bhandle, reg)
+	bus_read_2((sc)->ste_res, reg)
 #define CSR_READ_1(sc, reg)		\
-	bus_space_read_1(sc->ste_btag, sc->ste_bhandle, reg)
+	bus_read_1((sc)->ste_res, reg)
 
+#define	STE_DESC_ALIGN		8
+#define STE_RX_LIST_CNT		128
+#define STE_TX_LIST_CNT		128
+#define	STE_RX_LIST_SZ		\
+	(sizeof(struct ste_desc_onefrag) * STE_RX_LIST_CNT)
+#define	STE_TX_LIST_SZ		\
+	(sizeof(struct ste_desc) * STE_TX_LIST_CNT)
+#define	STE_ADDR_LO(x)		((uint64_t)(x) & 0xFFFFFFFF)
+#define	STE_ADDR_HI(x)		((uint64_t)(x) >> 32)
+
+/*
+ * Since Tx status can hold up to 31 status bytes we should
+ * check Tx status before controller fills it up. Otherwise
+ * Tx MAC stalls.
+ */
+#define	STE_TX_INTR_FRAMES	16
+#define	STE_TX_TIMEOUT		5
 #define STE_TIMEOUT		1000
 #define STE_MIN_FRAMELEN	60
 #define STE_PACKET_SIZE		1536
-#define ETHER_ALIGN		2
-#define STE_RX_LIST_CNT		64
-#define STE_TX_LIST_CNT		128
 #define STE_INC(x, y)		(x) = (x + 1) % y
+#define STE_DEC(x, y)		(x) = ((x) + ((y) - 1)) % (y)
 #define STE_NEXT(x, y)		(x + 1) % y
 
 struct ste_type {
-	u_int16_t		ste_vid;
-	u_int16_t		ste_did;
+	uint16_t		ste_vid;
+	uint16_t		ste_did;
 	char			*ste_name;
 };
 
 struct ste_list_data {
-	struct ste_desc_onefrag	ste_rx_list[STE_RX_LIST_CNT];
-	struct ste_desc		ste_tx_list[STE_TX_LIST_CNT];
+	struct ste_desc_onefrag	*ste_rx_list;
+	bus_addr_t		ste_rx_list_paddr;
+	struct ste_desc		*ste_tx_list;
+	bus_addr_t		ste_tx_list_paddr;
 };
 
 struct ste_chain {
 	struct ste_desc		*ste_ptr;
 	struct mbuf		*ste_mbuf;
 	struct ste_chain	*ste_next;
-	u_int32_t		ste_phys;
+	uint32_t		ste_phys;
+	bus_dmamap_t		ste_map;
 };
 
 struct ste_chain_onefrag {
 	struct ste_desc_onefrag	*ste_ptr;
 	struct mbuf		*ste_mbuf;
 	struct ste_chain_onefrag	*ste_next;
+	bus_dmamap_t		ste_map;
 };
 
 struct ste_chain_data {
+	bus_dma_tag_t		ste_parent_tag;
+	bus_dma_tag_t		ste_rx_tag;
+	bus_dma_tag_t		ste_tx_tag;
+	bus_dma_tag_t		ste_rx_list_tag;
+	bus_dmamap_t		ste_rx_list_map;
+	bus_dma_tag_t		ste_tx_list_tag;
+	bus_dmamap_t		ste_tx_list_map;
+	bus_dmamap_t		ste_rx_sparemap;
 	struct ste_chain_onefrag ste_rx_chain[STE_RX_LIST_CNT];
-	struct ste_chain	 ste_tx_chain[STE_TX_LIST_CNT];
+	struct ste_chain	ste_tx_chain[STE_TX_LIST_CNT];
 	struct ste_chain_onefrag *ste_rx_head;
-
+	struct ste_chain	*ste_last_tx;
 	int			ste_tx_prod;
 	int			ste_tx_cons;
+	int			ste_tx_cnt;
 };
 
 struct ste_softc {
 	struct ifnet		*ste_ifp;
-	bus_space_tag_t		ste_btag;
-	bus_space_handle_t	ste_bhandle;
 	struct resource		*ste_res;
+	int			ste_res_id;
+	int			ste_res_type;
 	struct resource		*ste_irq;
 	void			*ste_intrhand;
 	struct ste_type		*ste_info;
 	device_t		ste_miibus;
 	device_t		ste_dev;
 	int			ste_tx_thresh;
-	u_int8_t		ste_link;
+	int			ste_flags;
+#define	STE_FLAG_ONE_PHY	0x0001
+#define	STE_FLAG_LINK		0x8000
 	int			ste_if_flags;
-	struct ste_chain	*ste_tx_prev;
-	struct ste_list_data	*ste_ldata;
+	int			ste_timer;
+	int			ste_int_rx_act;
+	int			ste_int_rx_mod;
+	struct ste_list_data	ste_ldata;
 	struct ste_chain_data	ste_cdata;
-	struct callout		ste_stat_callout;
+	struct callout		ste_callout;
+	struct ste_hw_stats	ste_stats;
 	struct mtx		ste_mtx;
-	u_int8_t		ste_one_phy;
-#ifdef DEVICE_POLLING
-	int			rxcycles;
-#endif
 };
 
 #define	STE_LOCK(_sc)		mtx_lock(&(_sc)->ste_mtx)
@@ -533,12 +592,12 @@ struct ste_softc {
 #define	STE_LOCK_ASSERT(_sc)	mtx_assert(&(_sc)->ste_mtx, MA_OWNED)
 
 struct ste_mii_frame {
-	u_int8_t		mii_stdelim;
-	u_int8_t		mii_opcode;
-	u_int8_t		mii_phyaddr;
-	u_int8_t		mii_regaddr;
-	u_int8_t		mii_turnaround;
-	u_int16_t		mii_data;
+	uint8_t			mii_stdelim;
+	uint8_t			mii_opcode;
+	uint8_t			mii_phyaddr;
+	uint8_t			mii_regaddr;
+	uint8_t			mii_turnaround;
+	uint16_t		mii_data;
 };
 
 /*
diff --git a/sys/dev/syscons/scterm-teken.c b/sys/dev/syscons/scterm-teken.c
index 12b040e201f..1d110ab91c0 100644
--- a/sys/dev/syscons/scterm-teken.c
+++ b/sys/dev/syscons/scterm-teken.c
@@ -132,9 +132,9 @@ scteken_init(scr_stat *scp, void **softc, int code)
 #ifndef TEKEN_UTF8
 		teken_set_8bit(&ts->ts_teken);
 #endif /* !TEKEN_UTF8 */
-#ifndef TEKEN_XTERM
+#ifdef TEKEN_CONS25
 		teken_set_cons25(&ts->ts_teken);
-#endif /* !TEKEN_XTERM */
+#endif /* TEKEN_CONS25 */
 
 		tp.tp_row = scp->ysize;
 		tp.tp_col = scp->xsize;
diff --git a/sys/dev/syscons/scvidctl.c b/sys/dev/syscons/scvidctl.c
index d481e066430..f9731696a3c 100644
--- a/sys/dev/syscons/scvidctl.c
+++ b/sys/dev/syscons/scvidctl.c
@@ -321,6 +321,7 @@ sc_set_pixel_mode(scr_stat *scp, struct tty *tp, int xsize, int ysize,
     return ENODEV;
 #else
     video_info_t info;
+    ksiginfo_t ksi;
     u_char *font;
     int prev_ysize;
     int error;
@@ -458,8 +459,11 @@ sc_set_pixel_mode(scr_stat *scp, struct tty *tp, int xsize, int ysize,
 	tp->t_winsize.ws_col = scp->xsize;
 	tp->t_winsize.ws_row = scp->ysize;
 	if (tp->t_pgrp != NULL) {
+	    ksiginfo_init(&ksi);
+	    ksi.ksi_signo = SIGWINCH;
+	    ksi.ksi_code = SI_KERNEL;
 	    PGRP_LOCK(tp->t_pgrp);
-	    pgsignal(tp->t_pgrp, SIGWINCH, 1);
+	    pgsignal(tp->t_pgrp, SIGWINCH, 1, &ksi);
 	    PGRP_UNLOCK(tp->t_pgrp);
 	}
     }
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c
index 99d4246eb61..f50d68660ec 100644
--- a/sys/dev/syscons/syscons.c
+++ b/sys/dev/syscons/syscons.c
@@ -3431,14 +3431,15 @@ next_code:
 }
 
 static int
-sctty_mmap(struct tty *tp, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
+sctty_mmap(struct tty *tp, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nprot, vm_memattr_t *memattr)
 {
     scr_stat *scp;
 
     scp = sc_get_stat(tp);
     if (scp != scp->sc->cur_scp)
 	return -1;
-    return vidd_mmap(scp->sc->adp, offset, paddr, nprot);
+    return vidd_mmap(scp->sc->adp, offset, paddr, nprot, memattr);
 }
 
 static int
diff --git a/sys/dev/syscons/sysmouse.c b/sys/dev/syscons/sysmouse.c
index 4e787efbbe5..c58e9aeae89 100644
--- a/sys/dev/syscons/sysmouse.c
+++ b/sys/dev/syscons/sysmouse.c
@@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
diff --git a/sys/dev/tdfx/tdfx_pci.c b/sys/dev/tdfx/tdfx_pci.c
index 08db0857c5a..7ed00ac1979 100644
--- a/sys/dev/tdfx/tdfx_pci.c
+++ b/sys/dev/tdfx/tdfx_pci.c
@@ -421,7 +421,8 @@ tdfx_close(struct cdev *dev, int fflag, int devtype, struct thread *td)
 }
 
 static int
-tdfx_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
+tdfx_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nprot, vm_memattr_t *memattr)
 {
 	/* 
 	 * mmap(2) is called by a user process to request that an area of memory
diff --git a/sys/dev/ti/if_ti.c b/sys/dev/ti/if_ti.c
index 488d038c302..20130bcd15f 100644
--- a/sys/dev/ti/if_ti.c
+++ b/sys/dev/ti/if_ti.c
@@ -194,7 +194,7 @@ static void ti_init(void *);
 static void ti_init_locked(void *);
 static void ti_init2(struct ti_softc *);
 static void ti_stop(struct ti_softc *);
-static void ti_watchdog(struct ifnet *);
+static void ti_watchdog(void *);
 static int ti_shutdown(device_t);
 static int ti_ifmedia_upd(struct ifnet *);
 static void ti_ifmedia_sts(struct ifnet *, struct ifmediareq *);
@@ -2285,6 +2285,7 @@ ti_attach(dev)
 
 	mtx_init(&sc->ti_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
 	    MTX_DEF);
+	callout_init_mtx(&sc->ti_watchdog, &sc->ti_mtx, 0);
 	ifmedia_init(&sc->ifmedia, IFM_IMASK, ti_ifmedia_upd, ti_ifmedia_sts);
 	ifp = sc->ti_ifp = if_alloc(IFT_ETHER);
 	if (ifp == NULL) {
@@ -2486,7 +2487,6 @@ ti_attach(dev)
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = ti_ioctl;
 	ifp->if_start = ti_start;
-	ifp->if_watchdog = ti_watchdog;
 	ifp->if_init = ti_init;
 	ifp->if_baudrate = 1000000000;
 	ifp->if_mtu = ETHERMTU;
@@ -2565,24 +2565,22 @@ ti_detach(dev)
 {
 	struct ti_softc		*sc;
 	struct ifnet		*ifp;
-	int			attached;
 
 	sc = device_get_softc(dev);
 	if (sc->dev)
 		destroy_dev(sc->dev);
 	KASSERT(mtx_initialized(&sc->ti_mtx), ("ti mutex not initialized"));
-	attached = device_is_attached(dev);
-	TI_LOCK(sc);
 	ifp = sc->ti_ifp;
-	if (attached)
-		ti_stop(sc);
-	TI_UNLOCK(sc);
-	if (attached)
+	if (device_is_attached(dev)) {
 		ether_ifdetach(ifp);
+		TI_LOCK(sc);
+		ti_stop(sc);
+		TI_UNLOCK(sc);
+	}
 
 	/* These should only be active if attach succeeded */
-	if (attached)
-		bus_generic_detach(dev);
+	callout_drain(&sc->ti_watchdog);
+	bus_generic_detach(dev);
 	ti_free_dmamaps(sc);
 	ifmedia_removeall(&sc->ifmedia);
 
@@ -2866,7 +2864,7 @@ ti_txeof(sc)
 	}
 	sc->ti_tx_saved_considx = idx;
 
-	ifp->if_timer = sc->ti_txcnt > 0 ? 5 : 0;
+	sc->ti_timer = sc->ti_txcnt > 0 ? 5 : 0;
 }
 
 static void
@@ -3121,7 +3119,7 @@ ti_start_locked(ifp)
 		/*
 		 * Set a timeout in case the chip goes out to lunch.
 		 */
-		ifp->if_timer = 5;
+		sc->ti_timer = 5;
 	}
 }
 
@@ -3225,6 +3223,7 @@ static void ti_init2(sc)
 
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
+	callout_reset(&sc->ti_watchdog, hz, ti_watchdog, sc);
 
 	/*
 	 * Make sure to set media properly. We have to do this
@@ -3786,30 +3785,31 @@ ti_ioctl2(struct cdev *dev, u_long cmd, caddr_t addr, int flag,
 }
 
 static void
-ti_watchdog(ifp)
-	struct ifnet		*ifp;
+ti_watchdog(void *arg)
 {
 	struct ti_softc		*sc;
+	struct ifnet		*ifp;
 
-	sc = ifp->if_softc;
-	TI_LOCK(sc);
+	sc = arg;
+	TI_LOCK_ASSERT(sc);
+	callout_reset(&sc->ti_watchdog, hz, ti_watchdog, sc);
+	if (sc->ti_timer == 0 || --sc->ti_timer > 0)
+		return;
 
 	/*
 	 * When we're debugging, the chip is often stopped for long periods
 	 * of time, and that would normally cause the watchdog timer to fire.
 	 * Since that impedes debugging, we don't want to do that.
 	 */
-	if (sc->ti_flags & TI_FLAG_DEBUGING) {
-		TI_UNLOCK(sc);
+	if (sc->ti_flags & TI_FLAG_DEBUGING)
 		return;
-	}
 
+	ifp = sc->ti_ifp;
 	if_printf(ifp, "watchdog timeout -- resetting\n");
 	ti_stop(sc);
 	ti_init_locked(sc);
 
 	ifp->if_oerrors++;
-	TI_UNLOCK(sc);
 }
 
 /*
@@ -3859,6 +3859,7 @@ ti_stop(sc)
 	sc->ti_tx_saved_considx = TI_TXCONS_UNSET;
 
 	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
+	callout_stop(&sc->ti_watchdog);
 }
 
 /*
diff --git a/sys/dev/ti/if_tireg.h b/sys/dev/ti/if_tireg.h
index 5f0bda9561a..070a70af5ab 100644
--- a/sys/dev/ti/if_tireg.h
+++ b/sys/dev/ti/if_tireg.h
@@ -1038,6 +1038,8 @@ struct ti_softc {
 	int			ti_if_flags;
 	int			ti_txcnt;
 	struct mtx		ti_mtx;
+	struct callout		ti_watchdog;
+	int			ti_timer;
 	ti_flag_vals		ti_flags;
 	struct cdev		 *dev;
 };
diff --git a/sys/dev/tl/if_tl.c b/sys/dev/tl/if_tl.c
index f1a3db8b59c..d18d21a63b6 100644
--- a/sys/dev/tl/if_tl.c
+++ b/sys/dev/tl/if_tl.c
@@ -281,7 +281,7 @@ static int tl_ioctl(struct ifnet *, u_long, caddr_t);
 static void tl_init(void *);
 static void tl_init_locked(struct tl_softc *);
 static void tl_stop(struct tl_softc *);
-static void tl_watchdog(struct ifnet *);
+static void tl_watchdog(struct tl_softc *);
 static int tl_shutdown(device_t);
 static int tl_ifmedia_upd(struct ifnet *);
 static void tl_ifmedia_sts(struct ifnet *, struct ifmediareq *);
@@ -1170,9 +1170,6 @@ tl_attach(dev)
 		goto fail;
 	}
 
-	sc->tl_btag = rman_get_bustag(sc->tl_res);
-	sc->tl_bhandle = rman_get_bushandle(sc->tl_res);
-
 #ifdef notdef
 	/*
 	 * The ThunderLAN manual suggests jacking the PCI latency
@@ -1263,7 +1260,6 @@ tl_attach(dev)
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = tl_ioctl;
 	ifp->if_start = tl_start;
-	ifp->if_watchdog = tl_watchdog;
 	ifp->if_init = tl_init;
 	ifp->if_mtu = ETHERMTU;
 	ifp->if_snd.ifq_maxlen = TL_TX_LIST_CNT - 1;
@@ -1340,11 +1336,11 @@ tl_detach(dev)
 
 	/* These should only be active if attach succeeded */
 	if (device_is_attached(dev)) {
+		ether_ifdetach(ifp);
 		TL_LOCK(sc);
 		tl_stop(sc);
 		TL_UNLOCK(sc);
 		callout_drain(&sc->tl_stat_callout);
-		ether_ifdetach(ifp);
 	}
 	if (sc->tl_miibus)
 		device_delete_child(dev, sc->tl_miibus);
@@ -1638,7 +1634,7 @@ tl_intvec_txeoc(xsc, type)
 	ifp = sc->tl_ifp;
 
 	/* Clear the timeout timer. */
-	ifp->if_timer = 0;
+	sc->tl_timer = 0;
 
 	if (sc->tl_cdata.tl_tx_head == NULL) {
 		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
@@ -1824,6 +1820,9 @@ tl_stats_update(xsc)
 		}
 	}
 
+	if (sc->tl_timer > 0 && --sc->tl_timer == 0)
+		tl_watchdog(sc);
+
 	callout_reset(&sc->tl_stat_callout, hz, tl_stats_update, sc);
 
 	if (!sc->tl_bitrate) {
@@ -2032,7 +2031,7 @@ tl_start_locked(ifp)
 	/*
 	 * Set a timeout in case the chip goes out to lunch.
 	 */
-	ifp->if_timer = 5;
+	sc->tl_timer = 5;
 
 	return;
 }
@@ -2257,21 +2256,20 @@ tl_ioctl(ifp, command, data)
 }
 
 static void
-tl_watchdog(ifp)
-	struct ifnet		*ifp;
-{
+tl_watchdog(sc)
 	struct tl_softc		*sc;
+{
+	struct ifnet		*ifp;
 
-	sc = ifp->if_softc;
+	TL_LOCK_ASSERT(sc);
+	ifp = sc->tl_ifp;
 
 	if_printf(ifp, "device timeout\n");
 
-	TL_LOCK(sc);
 	ifp->if_oerrors++;
 
 	tl_softreset(sc, 1);
 	tl_init_locked(sc);
-	TL_UNLOCK(sc);
 
 	return;
 }
diff --git a/sys/dev/tl/if_tlreg.h b/sys/dev/tl/if_tlreg.h
index f04b52bda59..f0347e769ee 100644
--- a/sys/dev/tl/if_tlreg.h
+++ b/sys/dev/tl/if_tlreg.h
@@ -112,8 +112,6 @@ struct tl_softc {
 	struct ifnet		*tl_ifp;
 	device_t		tl_dev;
 	struct ifmedia		ifmedia;	/* media info */
-	bus_space_handle_t	tl_bhandle;
-	bus_space_tag_t		tl_btag;
 	void			*tl_intrhand;
 	struct resource		*tl_irq;
 	struct resource		*tl_res;
@@ -127,6 +125,7 @@ struct tl_softc {
 	int			tl_if_flags;
 	struct callout		tl_stat_callout;
 	struct mtx		tl_mtx;
+	int			tl_timer;
 };
 
 #define	TL_LOCK(_sc)		mtx_lock(&(_sc)->tl_mtx)
@@ -493,19 +492,13 @@ struct tl_stats {
 /*
  * register space access macros
  */
-#define CSR_WRITE_4(sc, reg, val)	\
-	bus_space_write_4(sc->tl_btag, sc->tl_bhandle, reg, val)
-#define CSR_WRITE_2(sc, reg, val)	\
-	bus_space_write_2(sc->tl_btag, sc->tl_bhandle, reg, val)
-#define CSR_WRITE_1(sc, reg, val)	\
-	bus_space_write_1(sc->tl_btag, sc->tl_bhandle, reg, val)
+#define CSR_WRITE_4(sc, reg, val)	bus_write_4(sc->tl_res, reg, val)
+#define CSR_WRITE_2(sc, reg, val)	bus_write_2(sc->tl_res, reg, val)
+#define CSR_WRITE_1(sc, reg, val)	bus_write_1(sc->tl_res, reg, val)
 
-#define CSR_READ_4(sc, reg)		\
-	bus_space_read_4(sc->tl_btag, sc->tl_bhandle, reg)
-#define CSR_READ_2(sc, reg)		\
-	bus_space_read_2(sc->tl_btag, sc->tl_bhandle, reg)
-#define CSR_READ_1(sc, reg)		\
-	bus_space_read_1(sc->tl_btag, sc->tl_bhandle, reg)
+#define CSR_READ_4(sc, reg)		bus_read_4(sc->tl_res, reg)
+#define CSR_READ_2(sc, reg)		bus_read_2(sc->tl_res, reg)
+#define CSR_READ_1(sc, reg)		bus_read_1(sc->tl_res, reg)
 
 #define CMD_PUT(sc, x) CSR_WRITE_4(sc, TL_HOSTCMD, x)
 #define CMD_SET(sc, x)	\
diff --git a/sys/dev/tsec/if_tsec.c b/sys/dev/tsec/if_tsec.c
index 2fb271019dd..204fce932b2 100644
--- a/sys/dev/tsec/if_tsec.c
+++ b/sys/dev/tsec/if_tsec.c
@@ -716,9 +716,9 @@ tsec_start_locked(struct ifnet *ifp)
 	bus_dmamap_sync(sc->tsec_tx_dtag, sc->tsec_tx_dmap,
 	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
 
-	for (;;) {
+	while (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
 		/* Get packet from the queue */
-		IF_DEQUEUE(&ifp->if_snd, m0);
+		IFQ_DRV_DEQUEUE(&ifp->if_snd, m0);
 		if (m0 == NULL)
 			break;
 
@@ -755,7 +755,7 @@ tsec_start_locked(struct ifnet *ifp)
 			m0 = mtmp;
 
 		if (tsec_encap(sc, m0, fcb_inserted)) {
-			IF_PREPEND(&ifp->if_snd, m0);
+			IFQ_DRV_PREPEND(&ifp->if_snd, m0);
 			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
 			break;
 		}
diff --git a/sys/dev/twe/twe.c b/sys/dev/twe/twe.c
index 90dfa2e505e..6994cb4106d 100644
--- a/sys/dev/twe/twe.c
+++ b/sys/dev/twe/twe.c
@@ -201,7 +201,7 @@ twe_add_unit(struct twe_softc *sc, int unit)
     int				table, error = 0;
     u_int16_t			dsize;
     TWE_Param			*drives = NULL, *param = NULL;
-    TWE_Unit_Descriptor		*ud;
+    TWE_Array_Descriptor	*ud;
 
     if (unit < 0 || unit > TWE_MAX_UNITS)
 	return (EINVAL);
@@ -244,8 +244,9 @@ twe_add_unit(struct twe_softc *sc, int unit)
 	error = EIO;
 	goto out;
     }
-    ud = (TWE_Unit_Descriptor *)param->data;
+    ud = (TWE_Array_Descriptor *)param->data;
     dr->td_type = ud->configuration;
+    dr->td_stripe = ud->stripe_size;
 
     /* build synthetic geometry as per controller internal rules */
     if (dr->td_size > 0x200000) {
diff --git a/sys/dev/twe/twe_freebsd.c b/sys/dev/twe/twe_freebsd.c
index 9ad65c94d9e..0328599c129 100644
--- a/sys/dev/twe/twe_freebsd.c
+++ b/sys/dev/twe/twe_freebsd.c
@@ -818,6 +818,13 @@ twed_attach(device_t dev)
     sc->twed_disk->d_maxsize = (TWE_MAX_SGL_LENGTH - 1) * PAGE_SIZE;
     sc->twed_disk->d_sectorsize = TWE_BLOCK_SIZE;
     sc->twed_disk->d_mediasize = TWE_BLOCK_SIZE * (off_t)sc->twed_drive->td_size;
+    if (sc->twed_drive->td_type == TWE_UD_CONFIG_RAID0 ||
+	sc->twed_drive->td_type == TWE_UD_CONFIG_RAID5 ||
+	sc->twed_drive->td_type == TWE_UD_CONFIG_RAID10) {
+	    sc->twed_disk->d_stripesize =
+		TWE_BLOCK_SIZE << sc->twed_drive->td_stripe;
+	    sc->twed_disk->d_stripeoffset = 0;
+    }
     sc->twed_disk->d_fwsectors = sc->twed_drive->td_sectors;
     sc->twed_disk->d_fwheads = sc->twed_drive->td_heads;
     sc->twed_disk->d_unit = sc->twed_drive->td_sys_unit;
diff --git a/sys/dev/twe/twevar.h b/sys/dev/twe/twevar.h
index 2711ccc9493..4990ca80666 100644
--- a/sys/dev/twe/twevar.h
+++ b/sys/dev/twe/twevar.h
@@ -59,6 +59,7 @@ struct twe_drive
     /* unit state and type */
     u_int8_t		td_state;
     u_int8_t		td_type;
+    u_int8_t		td_stripe;
 
     /* handle for attached driver */
     device_t		td_disk;
diff --git a/sys/dev/uart/uart_bus_acpi.c b/sys/dev/uart/uart_bus_acpi.c
index 042dfef5d21..d320b73a799 100644
--- a/sys/dev/uart/uart_bus_acpi.c
+++ b/sys/dev/uart/uart_bus_acpi.c
@@ -59,6 +59,7 @@ static driver_t uart_acpi_driver = {
 static struct isa_pnp_id acpi_ns8250_ids[] = {
 	{0x0005d041, "Standard PC COM port"},		/* PNP0500 */
 	{0x0105d041, "16550A-compatible COM port"},	/* PNP0501 */
+	{0x04f0235c, "Wacom Tablet PC Screen"},		/* WACF004 */
 	{0}
 };
 
diff --git a/sys/dev/uart/uart_bus_ebus.c b/sys/dev/uart/uart_bus_ebus.c
index e4ea2d14937..c79c91e908e 100644
--- a/sys/dev/uart/uart_bus_ebus.c
+++ b/sys/dev/uart/uart_bus_ebus.c
@@ -77,7 +77,7 @@ uart_ebus_probe(device_t dev)
 	if (!strcmp(nm, "lom-console") || !strcmp(nm, "su") ||
 	    !strcmp(nm, "su_pnp") || !strcmp(cmpt, "rsc-console") ||
 	    !strcmp(cmpt, "rsc-control") || !strcmp(cmpt, "su") ||
-	    !strcmp(cmpt, "su16550")) {
+	    !strcmp(cmpt, "su16550") || !strcmp(cmpt, "su16552")) {
 		/*
 		 * On AXi and AXmp boards the NS16550 (used to connect
 		 * keyboard/mouse) share their IRQ lines with the i8042.
diff --git a/sys/dev/uart/uart_bus_pci.c b/sys/dev/uart/uart_bus_pci.c
index 7a01e77a06a..24c45733032 100644
--- a/sys/dev/uart/uart_bus_pci.c
+++ b/sys/dev/uart/uart_bus_pci.c
@@ -110,7 +110,9 @@ static struct pci_id pci_ns8250_ids[] = {
 { 0x1415, 0x950b, 0xffff, 0, "Oxford Semiconductor OXCB950 Cardbus 16950 UART",
 	0x10, 16384000 },
 { 0x151f, 0x0000, 0xffff, 0, "TOPIC Semiconductor TP560 56k modem", 0x10 },
+{ 0x9710, 0x9820, 0x1000, 1, "NetMos NM9820 Serial Port", 0x10 },
 { 0x9710, 0x9835, 0x1000, 1, "NetMos NM9835 Serial Port", 0x10 },
+{ 0x9710, 0x9865, 0xa000, 0x1000, "NetMos NM9865 Serial Port", 0x10 },
 { 0xdeaf, 0x9051, 0xffff, 0, "Middle Digital PC Weasel Serial Port", 0x10 },
 { 0xffff, 0, 0xffff, 0, NULL, 0, 0}
 };
diff --git a/sys/dev/uart/uart_core.c b/sys/dev/uart/uart_core.c
index 98b044f7a7e..38d2a8f7377 100644
--- a/sys/dev/uart/uart_core.c
+++ b/sys/dev/uart/uart_core.c
@@ -45,7 +45,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 
diff --git a/sys/dev/uart/uart_cpu_sparc64.c b/sys/dev/uart/uart_cpu_sparc64.c
index 9d92a390873..0f40cb70bd7 100644
--- a/sys/dev/uart/uart_cpu_sparc64.c
+++ b/sys/dev/uart/uart_cpu_sparc64.c
@@ -254,7 +254,8 @@ uart_cpu_getdev(int devtype, struct uart_devinfo *di)
 		addr += range - range * (di->bas.chan - 1);
 	} else if (!strcmp(buf, "lom-console") || !strcmp(buf, "su") ||
 	    !strcmp(buf, "su_pnp") || !strcmp(compat, "rsc-console") ||
-	    !strcmp(compat, "su") || !strcmp(compat, "su16550")) {
+	    !strcmp(compat, "su") || !strcmp(compat, "su16550") ||
+	    !strcmp(compat, "su16552")) {
 		class = &uart_ns8250_class;
 		di->bas.chan = 0;
 	}
diff --git a/sys/dev/uart/uart_tty.c b/sys/dev/uart/uart_tty.c
index 2f442f7805d..f306af53f16 100644
--- a/sys/dev/uart/uart_tty.c
+++ b/sys/dev/uart/uart_tty.c
@@ -39,7 +39,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
diff --git a/sys/dev/usb/controller/at91dci.c b/sys/dev/usb/controller/at91dci.c
index d9f8e4066c3..fc0db86a3b8 100644
--- a/sys/dev/usb/controller/at91dci.c
+++ b/sys/dev/usb/controller/at91dci.c
@@ -894,6 +894,7 @@ at91dci_setup_standard_chain(struct usb_xfer *xfer)
 
 	/* setup temp */
 
+	temp.pc = NULL;
 	temp.td = NULL;
 	temp.td_next = xfer->td_start[0];
 	temp.offset = 0;
diff --git a/sys/dev/usb/controller/atmegadci.c b/sys/dev/usb/controller/atmegadci.c
index a864c5765c5..adbd972db6d 100644
--- a/sys/dev/usb/controller/atmegadci.c
+++ b/sys/dev/usb/controller/atmegadci.c
@@ -797,6 +797,7 @@ atmegadci_setup_standard_chain(struct usb_xfer *xfer)
 
 	/* setup temp */
 
+	temp.pc = NULL;
 	temp.td = NULL;
 	temp.td_next = xfer->td_start[0];
 	temp.offset = 0;
@@ -1191,7 +1192,8 @@ atmegadci_clear_stall_sub(struct atmegadci_softc *sc, uint8_t ep_no,
 
 		temp = ATMEGA_READ_1(sc, ATMEGA_UESTA0X);
 		if (!(temp & ATMEGA_UESTA0X_CFGOK)) {
-			DPRINTFN(0, "Chip rejected configuration\n");
+			device_printf(sc->sc_bus.bdev,
+			    "Chip rejected configuration\n");
 		}
 	} while (0);
 }
@@ -1913,7 +1915,8 @@ tr_handle_clear_port_feature:
 		/* check valid config */
 		temp = ATMEGA_READ_1(sc, ATMEGA_UESTA0X);
 		if (!(temp & ATMEGA_UESTA0X_CFGOK)) {
-			DPRINTFN(0, "Chip rejected EP0 configuration\n");
+			device_printf(sc->sc_bus.bdev,
+			    "Chip rejected EP0 configuration\n");
 		}
 		break;
 	case UHF_C_PORT_SUSPEND:
diff --git a/sys/dev/usb/controller/avr32dci.c b/sys/dev/usb/controller/avr32dci.c
index f251f9109ae..8abe46c4a6c 100644
--- a/sys/dev/usb/controller/avr32dci.c
+++ b/sys/dev/usb/controller/avr32dci.c
@@ -767,6 +767,7 @@ avr32dci_setup_standard_chain(struct usb_xfer *xfer)
 
 	/* setup temp */
 
+	temp.pc = NULL;
 	temp.td = NULL;
 	temp.td_next = xfer->td_start[0];
 	temp.offset = 0;
@@ -1159,7 +1160,7 @@ avr32dci_clear_stall_sub(struct avr32dci_softc *sc, uint8_t ep_no,
 	temp = AVR32_READ_4(sc, AVR32_EPTCFG(ep_no));
 
 	if (!(temp & AVR32_EPTCFG_EPT_MAPD)) {
-		DPRINTFN(0, "Chip rejected configuration\n");
+		device_printf(sc->sc_bus.bdev, "Chip rejected configuration\n");
 	} else {
 		AVR32_WRITE_4(sc, AVR32_EPTCTLENB(ep_no),
 		    AVR32_EPTCTL_EPT_ENABL);
@@ -1839,7 +1840,8 @@ tr_handle_clear_port_feature:
 		temp = AVR32_READ_4(sc, AVR32_EPTCFG(0));
 
 		if (!(temp & AVR32_EPTCFG_EPT_MAPD)) {
-			DPRINTFN(0, "Chip rejected configuration\n");
+			device_printf(sc->sc_bus.bdev,
+			    "Chip rejected configuration\n");
 		} else {
 			AVR32_WRITE_4(sc, AVR32_EPTCTLENB(0),
 			    AVR32_EPTCTL_EPT_ENABL);
diff --git a/sys/dev/usb/controller/ehci.c b/sys/dev/usb/controller/ehci.c
index 5cc9b29aea7..952dd983edd 100644
--- a/sys/dev/usb/controller/ehci.c
+++ b/sys/dev/usb/controller/ehci.c
@@ -99,6 +99,9 @@ SYSCTL_INT(_hw_usb_ehci, OID_AUTO, debug, CTLFLAG_RW,
 SYSCTL_INT(_hw_usb_ehci, OID_AUTO, no_hs, CTLFLAG_RW,
     &ehcinohighspeed, 0, "Disable High Speed USB");
 
+TUNABLE_INT("hw.usb.ehci.debug", &ehcidebug);
+TUNABLE_INT("hw.usb.ehci.no_hs", &ehcinohighspeed);
+
 static void ehci_dump_regs(ehci_softc_t *sc);
 static void ehci_dump_sqh(ehci_softc_t *sc, ehci_qh_t *sqh);
 
@@ -525,7 +528,7 @@ ehci_detach(ehci_softc_t *sc)
 	usb_callout_stop(&sc->sc_tmo_pcd);
 	usb_callout_stop(&sc->sc_tmo_poll);
 
-	EOWRITE4(sc, EHCI_USBINTR, sc->sc_eintrs);
+	EOWRITE4(sc, EHCI_USBINTR, 0);
 	USB_BUS_UNLOCK(&sc->sc_bus);
 
 	if (ehci_hcreset(sc)) {
@@ -2016,8 +2019,8 @@ ehci_setup_standard_chain(struct usb_xfer *xfer, ehci_qh_t **qh_last)
 
 	qh_endphub =
 	    (EHCI_QH_SET_MULT(xfer->max_packet_count & 3) |
-	    EHCI_QH_SET_CMASK(xfer->usb_cmask) |
-	    EHCI_QH_SET_SMASK(xfer->usb_smask) |
+	    EHCI_QH_SET_CMASK(xfer->endpoint->usb_cmask) |
+	    EHCI_QH_SET_SMASK(xfer->endpoint->usb_smask) |
 	    EHCI_QH_SET_HUBA(xfer->xroot->udev->hs_hub_addr) |
 	    EHCI_QH_SET_PORT(xfer->xroot->udev->hs_port_no));
 
@@ -2162,7 +2165,7 @@ ehci_isoc_hs_done(ehci_softc_t *sc, struct usb_xfer *xfer)
 
 		DPRINTFN(2, "status=0x%08x, len=%u\n", status, len);
 
-		if (xfer->usb_smask & (1 << td_no)) {
+		if (xfer->endpoint->usb_smask & (1 << td_no)) {
 
 			if (*plen >= len) {
 				/*
@@ -2348,22 +2351,8 @@ ehci_device_intr_open(struct usb_xfer *xfer)
 	uint16_t best;
 	uint16_t bit;
 	uint16_t x;
-	uint8_t slot;
 
-	/* Allocate a microframe slot first: */
-
-	slot = usb_intr_schedule_adjust
-	    (xfer->xroot->udev, xfer->max_frame_size, USB_HS_MICRO_FRAMES_MAX);
-
-	if (usbd_get_speed(xfer->xroot->udev) == USB_SPEED_HIGH) {
-		xfer->usb_uframe = slot;
-		xfer->usb_smask = (1 << slot) & 0xFF;
-		xfer->usb_cmask = 0;
-	} else {
-		xfer->usb_uframe = slot;
-		xfer->usb_smask = (1 << slot) & 0x3F;
-		xfer->usb_cmask = (-(4 << slot)) & 0xFE;
-	}
+	usb_hs_bandwidth_alloc(xfer);
 
 	/*
 	 * Find the best QH position corresponding to the given interval:
@@ -2399,12 +2388,12 @@ ehci_device_intr_close(struct usb_xfer *xfer)
 {
 	ehci_softc_t *sc = EHCI_BUS2SC(xfer->xroot->bus);
 
-	usb_intr_schedule_adjust(xfer->xroot->udev,
-	    -(xfer->max_frame_size), xfer->usb_uframe);
-
 	sc->sc_intr_stat[xfer->qh_pos]--;
 
 	ehci_device_done(xfer, USB_ERR_CANCELLED);
+
+	/* bandwidth must be freed after device done */
+	usb_hs_bandwidth_free(xfer);
 }
 
 static void
@@ -2726,28 +2715,8 @@ ehci_device_isoc_hs_open(struct usb_xfer *xfer)
 	ehci_itd_t *td;
 	uint32_t temp;
 	uint8_t ds;
-	uint8_t slot;
 
-	slot = usb_intr_schedule_adjust(xfer->xroot->udev, xfer->max_frame_size,
-	    USB_HS_MICRO_FRAMES_MAX);
-
-	xfer->usb_uframe = slot;
-	xfer->usb_cmask = 0;
-
-	switch (usbd_xfer_get_fps_shift(xfer)) {
-	case 0:
-		xfer->usb_smask = 0xFF;
-		break;
-	case 1:
-		xfer->usb_smask = 0x55 << (slot & 1);
-		break;
-	case 2:
-		xfer->usb_smask = 0x11 << (slot & 3);
-		break;
-	default:
-		xfer->usb_smask = 0x01 << (slot & 7);
-		break;
-	}
+	usb_hs_bandwidth_alloc(xfer);
 
 	/* initialize all TD's */
 
@@ -2791,11 +2760,10 @@ ehci_device_isoc_hs_open(struct usb_xfer *xfer)
 static void
 ehci_device_isoc_hs_close(struct usb_xfer *xfer)
 {
-
-	usb_intr_schedule_adjust(xfer->xroot->udev,
-	    -(xfer->max_frame_size), xfer->usb_uframe);
-
 	ehci_device_done(xfer, USB_ERR_CANCELLED);
+
+	/* bandwidth must be freed after device done */
+	usb_hs_bandwidth_free(xfer);
 }
 
 static void
@@ -2905,7 +2873,7 @@ ehci_device_isoc_hs_enter(struct usb_xfer *xfer)
 			*plen = xfer->max_frame_size;
 		}
 
-		if (xfer->usb_smask & (1 << td_no)) {
+		if (xfer->endpoint->usb_smask & (1 << td_no)) {
 			status = (EHCI_ITD_SET_LEN(*plen) |
 			    EHCI_ITD_ACTIVE |
 			    EHCI_ITD_SET_PG(0));
diff --git a/sys/dev/usb/controller/ehci_pci.c b/sys/dev/usb/controller/ehci_pci.c
index ec6f3f73fce..17ec65a512c 100644
--- a/sys/dev/usb/controller/ehci_pci.c
+++ b/sys/dev/usb/controller/ehci_pci.c
@@ -193,6 +193,14 @@ ehci_pci_match(device_t self)
 		return "Intel 82801I (ICH9) USB 2.0 controller";
 	case 0x293c8086:
 		return "Intel 82801I (ICH9) USB 2.0 controller";
+	case 0x3a3a8086:
+		return "Intel 82801JI (ICH10) USB 2.0 controller USB-A";
+	case 0x3a3c8086:
+		return "Intel 82801JI (ICH10) USB 2.0 controller USB-B";
+	case 0x3b348086:
+		return ("Intel PCH USB 2.0 controller USB-A");
+	case 0x3b3c8086:
+		return ("Intel PCH USB 2.0 controller USB-B");
 
 	case 0x00e01033:
 		return ("NEC uPD 720100 USB 2.0 controller");
@@ -209,6 +217,12 @@ ehci_pci_match(device_t self)
 		return "NVIDIA nForce4 USB 2.0 controller";
 	case 0x03f210de:
 		return "NVIDIA nForce MCP61 USB 2.0 controller";
+	case 0x0aa610de:
+		return "NVIDIA nForce MCP79 USB 2.0 controller";
+	case 0x0aa910de:
+		return "NVIDIA nForce MCP79 USB 2.0 controller";
+	case 0x0aaa10de:
+		return "NVIDIA nForce MCP79 USB 2.0 controller";
 
 	case 0x15621131:
 		return "Philips ISP156x USB 2.0 controller";
diff --git a/sys/dev/usb/controller/musb_otg.c b/sys/dev/usb/controller/musb_otg.c
index 60d29dd690b..987d3f65462 100644
--- a/sys/dev/usb/controller/musb_otg.c
+++ b/sys/dev/usb/controller/musb_otg.c
@@ -1144,6 +1144,7 @@ musbotg_setup_standard_chain(struct usb_xfer *xfer)
 
 	/* setup temp */
 
+	temp.pc = NULL;
 	temp.td = NULL;
 	temp.td_next = xfer->td_start[0];
 	temp.offset = 0;
@@ -1538,18 +1539,18 @@ musbotg_clear_stall_sub(struct musbotg_softc *sc, uint16_t wMaxPacket,
 		/* Configure endpoint */
 		switch (ep_type) {
 		case UE_INTERRUPT:
-			MUSB2_WRITE_1(sc, MUSB2_REG_TXMAXP, wMaxPacket);
+			MUSB2_WRITE_2(sc, MUSB2_REG_TXMAXP, wMaxPacket);
 			MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRH,
 			    MUSB2_MASK_CSRH_TXMODE | temp);
 			break;
 		case UE_ISOCHRONOUS:
-			MUSB2_WRITE_1(sc, MUSB2_REG_TXMAXP, wMaxPacket);
+			MUSB2_WRITE_2(sc, MUSB2_REG_TXMAXP, wMaxPacket);
 			MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRH,
 			    MUSB2_MASK_CSRH_TXMODE |
 			    MUSB2_MASK_CSRH_TXISO | temp);
 			break;
 		case UE_BULK:
-			MUSB2_WRITE_1(sc, MUSB2_REG_TXMAXP, wMaxPacket);
+			MUSB2_WRITE_2(sc, MUSB2_REG_TXMAXP, wMaxPacket);
 			MUSB2_WRITE_1(sc, MUSB2_REG_TXCSRH,
 			    MUSB2_MASK_CSRH_TXMODE | temp);
 			break;
@@ -1599,18 +1600,18 @@ musbotg_clear_stall_sub(struct musbotg_softc *sc, uint16_t wMaxPacket,
 		/* Configure endpoint */
 		switch (ep_type) {
 		case UE_INTERRUPT:
-			MUSB2_WRITE_1(sc, MUSB2_REG_RXMAXP, wMaxPacket);
+			MUSB2_WRITE_2(sc, MUSB2_REG_RXMAXP, wMaxPacket);
 			MUSB2_WRITE_1(sc, MUSB2_REG_RXCSRH,
 			    MUSB2_MASK_CSRH_RXNYET | temp);
 			break;
 		case UE_ISOCHRONOUS:
-			MUSB2_WRITE_1(sc, MUSB2_REG_RXMAXP, wMaxPacket);
+			MUSB2_WRITE_2(sc, MUSB2_REG_RXMAXP, wMaxPacket);
 			MUSB2_WRITE_1(sc, MUSB2_REG_RXCSRH,
 			    MUSB2_MASK_CSRH_RXNYET |
 			    MUSB2_MASK_CSRH_RXISO | temp);
 			break;
 		case UE_BULK:
-			MUSB2_WRITE_1(sc, MUSB2_REG_RXMAXP, wMaxPacket);
+			MUSB2_WRITE_2(sc, MUSB2_REG_RXMAXP, wMaxPacket);
 			MUSB2_WRITE_1(sc, MUSB2_REG_RXCSRH, temp);
 			break;
 		default:
@@ -1687,12 +1688,14 @@ usb_error_t
 musbotg_init(struct musbotg_softc *sc)
 {
 	struct usb_hw_ep_profile *pf;
+	uint16_t offset;
 	uint8_t nrx;
 	uint8_t ntx;
 	uint8_t temp;
 	uint8_t fsize;
 	uint8_t frx;
 	uint8_t ftx;
+	uint8_t dynfifo;
 
 	DPRINTFN(1, "start\n");
 
@@ -1775,11 +1778,20 @@ musbotg_init(struct musbotg_softc *sc)
 	DPRINTFN(2, "Config Data: 0x%02x\n",
 	    sc->sc_conf_data);
 
+	dynfifo = (sc->sc_conf_data & MUSB2_MASK_CD_DYNFIFOSZ) ? 1 : 0;
+
+	if (dynfifo) {
+		device_printf(sc->sc_bus.bdev, "Dynamic FIFO sizing detected, "
+		    "assuming 16Kbytes of FIFO RAM\n");
+	}
+
 	DPRINTFN(2, "HW version: 0x%04x\n",
 	    MUSB2_READ_1(sc, MUSB2_REG_HWVERS));
 
 	/* initialise endpoint profiles */
 
+	offset = 0;
+
 	for (temp = 1; temp <= sc->sc_ep_max; temp++) {
 		pf = sc->sc_hw_ep_profile + temp;
 
@@ -1790,9 +1802,45 @@ musbotg_init(struct musbotg_softc *sc)
 		frx = (fsize & MUSB2_MASK_RX_FSIZE) / 16;;
 		ftx = (fsize & MUSB2_MASK_TX_FSIZE);
 
-		DPRINTF("Endpoint %u FIFO size: IN=%u, OUT=%u\n",
-		    temp, pf->max_in_frame_size,
-		    pf->max_out_frame_size);
+		DPRINTF("Endpoint %u FIFO size: IN=%u, OUT=%u, DYN=%d\n",
+		    temp, ftx, frx, dynfifo);
+
+		if (dynfifo) {
+			if (frx && (temp <= nrx)) {
+				if (temp < 8) {
+					frx = 10;	/* 1K */
+					MUSB2_WRITE_1(sc, MUSB2_REG_RXFIFOSZ, 
+					    MUSB2_VAL_FIFOSZ_512 |
+					    MUSB2_MASK_FIFODB);
+				} else {
+					frx = 7;	/* 128 bytes */
+					MUSB2_WRITE_1(sc, MUSB2_REG_RXFIFOSZ, 
+					    MUSB2_VAL_FIFOSZ_128);
+				}
+
+				MUSB2_WRITE_2(sc, MUSB2_REG_RXFIFOADD,
+				    offset >> 3);
+
+				offset += (1 << frx);
+			}
+			if (ftx && (temp <= ntx)) {
+				if (temp < 8) {
+					ftx = 10;	/* 1K */
+					MUSB2_WRITE_1(sc, MUSB2_REG_TXFIFOSZ,
+	 				    MUSB2_VAL_FIFOSZ_512 |
+	 				    MUSB2_MASK_FIFODB);
+				} else {
+					ftx = 7;	/* 128 bytes */
+					MUSB2_WRITE_1(sc, MUSB2_REG_TXFIFOSZ,
+	 				    MUSB2_VAL_FIFOSZ_128);
+				}
+
+				MUSB2_WRITE_2(sc, MUSB2_REG_TXFIFOADD,
+				    offset >> 3);
+
+				offset += (1 << ftx);
+			}
+		}
 
 		if (frx && ftx && (temp <= nrx) && (temp <= ntx)) {
 			pf->max_in_frame_size = 1 << ftx;
@@ -1823,6 +1871,8 @@ musbotg_init(struct musbotg_softc *sc)
 		}
 	}
 
+	DPRINTFN(2, "Dynamic FIFO size = %d bytes\n", offset);
+
 	/* turn on default interrupts */
 
 	MUSB2_WRITE_1(sc, MUSB2_REG_INTUSBE,
diff --git a/sys/dev/usb/controller/musb_otg.h b/sys/dev/usb/controller/musb_otg.h
index 0e843c910e4..e8eafca6fb1 100644
--- a/sys/dev/usb/controller/musb_otg.h
+++ b/sys/dev/usb/controller/musb_otg.h
@@ -191,7 +191,7 @@
 
 #define	MUSB2_REG_EPFIFO(n) (0x0020 + (4*(n)))
 
-#define	MUSB2_REG_CONFDATA 0x000F	/* EPN=0 */
+#define	MUSB2_REG_CONFDATA (0x000F + MUSB2_REG_INDEXED_CSR)	/* EPN=0 */
 #define	MUSB2_MASK_CD_UTMI_DW 0x01
 #define	MUSB2_MASK_CD_SOFTCONE 0x02
 #define	MUSB2_MASK_CD_DYNFIFOSZ 0x04
diff --git a/sys/dev/usb/controller/ohci.c b/sys/dev/usb/controller/ohci.c
index 637b639e3f6..fa7f23ac196 100644
--- a/sys/dev/usb/controller/ohci.c
+++ b/sys/dev/usb/controller/ohci.c
@@ -84,6 +84,9 @@ static int ohcidebug = 0;
 SYSCTL_NODE(_hw_usb, OID_AUTO, ohci, CTLFLAG_RW, 0, "USB ohci");
 SYSCTL_INT(_hw_usb_ohci, OID_AUTO, debug, CTLFLAG_RW,
     &ohcidebug, 0, "ohci debug level");
+
+TUNABLE_INT("hw.usb.ohci.debug", &ohcidebug);
+
 static void ohci_dumpregs(ohci_softc_t *);
 static void ohci_dump_tds(ohci_td_t *);
 static uint8_t ohci_dump_td(ohci_td_t *);
diff --git a/sys/dev/usb/controller/ohci_pci.c b/sys/dev/usb/controller/ohci_pci.c
index 71891586f94..395947174e5 100644
--- a/sys/dev/usb/controller/ohci_pci.c
+++ b/sys/dev/usb/controller/ohci_pci.c
@@ -175,6 +175,12 @@ ohci_pci_match(device_t self)
 
 	case 0x03f110de:
 		return ("nVidia nForce MCP61 USB Controller");
+	case 0x0aa510de:
+		return ("nVidia nForce MCP79 USB Controller");
+	case 0x0aa710de:
+		return ("nVidia nForce MCP79 USB Controller");
+	case 0x0aa810de:
+		return ("nVidia nForce MCP79 USB Controller");
 
 	case 0x70011039:
 		return ("SiS 5571 USB controller");
diff --git a/sys/dev/usb/controller/uhci.c b/sys/dev/usb/controller/uhci.c
index 4e2659cdc83..918855bf5aa 100644
--- a/sys/dev/usb/controller/uhci.c
+++ b/sys/dev/usb/controller/uhci.c
@@ -91,6 +91,10 @@ SYSCTL_INT(_hw_usb_uhci, OID_AUTO, debug, CTLFLAG_RW,
     &uhcidebug, 0, "uhci debug level");
 SYSCTL_INT(_hw_usb_uhci, OID_AUTO, loop, CTLFLAG_RW,
     &uhcinoloop, 0, "uhci noloop");
+
+TUNABLE_INT("hw.usb.uhci.debug", &uhcidebug);
+TUNABLE_INT("hw.usb.uhci.loop", &uhcinoloop);
+
 static void uhci_dumpregs(uhci_softc_t *sc);
 static void uhci_dump_tds(uhci_td_t *td);
 
diff --git a/sys/dev/usb/controller/uhci_pci.c b/sys/dev/usb/controller/uhci_pci.c
index 3956eada423..81421e3e7a3 100644
--- a/sys/dev/usb/controller/uhci_pci.c
+++ b/sys/dev/usb/controller/uhci_pci.c
@@ -88,8 +88,6 @@ __FBSDID("$FreeBSD$");
 
 /* PIIX4E has no separate stepping */
 
-#define	PCI_UHCI_BASE_REG               0x20
-
 static device_probe_t uhci_pci_probe;
 static device_attach_t uhci_pci_attach;
 static device_detach_t uhci_pci_detach;
@@ -232,6 +230,18 @@ uhci_pci_match(device_t self)
 		return ("Intel 82801I (ICH9) USB controller");
 	case 0x29398086:
 		return ("Intel 82801I (ICH9) USB controller");
+	case 0x3a348086:
+		return ("Intel 82801JI (ICH10) USB controller USB-A");
+	case 0x3a358086:
+		return ("Intel 82801JI (ICH10) USB controller USB-B");
+	case 0x3a368086:
+		return ("Intel 82801JI (ICH10) USB controller USB-C");
+	case 0x3a378086:
+		return ("Intel 82801JI (ICH10) USB controller USB-D");
+	case 0x3a388086:
+		return ("Intel 82801JI (ICH10) USB controller USB-E");
+	case 0x3a398086:
+		return ("Intel 82801JI (ICH10) USB controller USB-F");
 
 	case 0x719a8086:
 		return ("Intel 82443MX USB controller");
diff --git a/sys/dev/usb/controller/uhcireg.h b/sys/dev/usb/controller/uhcireg.h
index eeabbf0eedc..993b73cd4ea 100644
--- a/sys/dev/usb/controller/uhcireg.h
+++ b/sys/dev/usb/controller/uhcireg.h
@@ -39,6 +39,8 @@
 #ifndef _UHCIREG_H_
 #define	_UHCIREG_H_
 
+#define	PCI_UHCI_BASE_REG	0x20
+
 /* PCI config registers  */
 #define	PCI_USBREV		0x60	/* USB protocol revision */
 #define	PCI_USB_REV_MASK		0xff
diff --git a/sys/dev/usb/controller/usb_controller.c b/sys/dev/usb/controller/usb_controller.c
index fe59e06ee1d..eb961fcb945 100644
--- a/sys/dev/usb/controller/usb_controller.c
+++ b/sys/dev/usb/controller/usb_controller.c
@@ -130,7 +130,7 @@ usb_attach(device_t dev)
 	DPRINTF("\n");
 
 	if (bus == NULL) {
-		DPRINTFN(0, "USB device has no ivars\n");
+		device_printf(dev, "USB device has no ivars\n");
 		return (ENXIO);
 	}
 
@@ -343,7 +343,7 @@ usb_bus_attach(struct usb_proc_msg *pm)
 		break;
 
 	default:
-		device_printf(bus->bdev, "Unsupported USB revision!\n");
+		device_printf(bus->bdev, "Unsupported USB revision\n");
 		return;
 	}
 
@@ -530,7 +530,7 @@ usb_bus_mem_alloc_all(struct usb_bus *bus, bus_dma_tag_t dmat,
 	    (bus->devices_max < USB_MIN_DEVICES) ||
 	    (bus->devices == NULL)) {
 		DPRINTFN(0, "Devices field has not been "
-		    "initialised properly!\n");
+		    "initialised properly\n");
 		bus->alloc_failed = 1;		/* failure */
 	}
 #if USB_HAVE_BUSDMA
diff --git a/sys/dev/usb/controller/uss820dci.c b/sys/dev/usb/controller/uss820dci.c
index 62fa8df4b61..fe14d513c8b 100644
--- a/sys/dev/usb/controller/uss820dci.c
+++ b/sys/dev/usb/controller/uss820dci.c
@@ -858,6 +858,7 @@ uss820dci_setup_standard_chain(struct usb_xfer *xfer)
 
 	/* setup temp */
 
+	temp.pc = NULL;
 	temp.td = NULL;
 	temp.td_next = xfer->td_start[0];
 	temp.offset = 0;
diff --git a/sys/dev/usb/input/atp.c b/sys/dev/usb/input/atp.c
index dcd95949b44..6c0ce2c7036 100644
--- a/sys/dev/usb/input/atp.c
+++ b/sys/dev/usb/input/atp.c
@@ -341,6 +341,7 @@ typedef struct atp_stroke {
 
 enum {
 	ATP_INTR_DT,
+	ATP_RESET,
 	ATP_N_TRANSFER,
 };
 
@@ -421,6 +422,7 @@ static struct usb_fifo_methods atp_fifo_methods = {
 /* device initialization and shutdown */
 static usb_error_t   atp_req_get_report(struct usb_device *udev, void *data);
 static int           atp_set_device_mode(device_t dev, interface_mode mode);
+static void          atp_reset_callback(struct usb_xfer *, usb_error_t);
 static int           atp_enable(struct atp_softc *sc);
 static void          atp_disable(struct atp_softc *sc);
 static int           atp_softc_populate(struct atp_softc *);
@@ -435,7 +437,7 @@ static void          atp_detect_pspans(int *, u_int, u_int, atp_pspan *,
 
 /* movement detection */
 static boolean_t     atp_match_stroke_component(atp_stroke_component *,
-			 const atp_pspan *);
+                         const atp_pspan *, atp_stroke_type);
 static void          atp_match_strokes_against_pspans(struct atp_softc *,
 			 atp_axis, atp_pspan *, u_int, u_int);
 static boolean_t     atp_update_strokes(struct atp_softc *,
@@ -456,6 +458,7 @@ static boolean_t     atp_compute_stroke_movement(atp_stroke *);
 /* tap detection */
 static __inline void atp_setup_reap_time(struct atp_softc *, struct timeval *);
 static void          atp_reap_zombies(struct atp_softc *, u_int *, u_int *);
+static void          atp_convert_to_slide(struct atp_softc *, atp_stroke *);
 
 /* updating fifo */
 static void          atp_reset_buf(struct atp_softc *sc);
@@ -501,6 +504,40 @@ atp_set_device_mode(device_t dev, interface_mode mode)
 	return (0);
 }
 
+void
+atp_reset_callback(struct usb_xfer *xfer, usb_error_t error)
+{
+	usb_device_request_t   req;
+	struct usb_page_cache *pc;
+	struct atp_softc      *sc = usbd_xfer_softc(xfer);
+
+	switch (USB_GET_STATE(xfer)) {
+	case USB_ST_SETUP:
+		sc->sc_mode_bytes[0] = RAW_SENSOR_MODE;
+		req.bmRequestType = UT_WRITE_CLASS_INTERFACE;
+		req.bRequest = UR_SET_REPORT;
+		USETW2(req.wValue,
+		    (uint8_t)0x03 /* type */, (uint8_t)0x00 /* id */);
+		USETW(req.wIndex, 0);
+		USETW(req.wLength, MODE_LENGTH);
+
+		pc = usbd_xfer_get_frame(xfer, 0);
+		usbd_copy_in(pc, 0, &req, sizeof(req));
+		pc = usbd_xfer_get_frame(xfer, 1);
+		usbd_copy_in(pc, 0, sc->sc_mode_bytes, MODE_LENGTH);
+
+		usbd_xfer_set_frame_len(xfer, 0, sizeof(req));
+		usbd_xfer_set_frame_len(xfer, 1, MODE_LENGTH);
+		usbd_xfer_set_frames(xfer, 2);
+		usbd_transfer_submit(xfer);
+		break;
+
+	case USB_ST_TRANSFERRED:
+	default:
+		break;
+	}
+}
+
 static int
 atp_enable(struct atp_softc *sc)
 {
@@ -689,7 +726,7 @@ atp_interpret_sensor_data(const int8_t *sensor_data, u_int num, atp_axis axis,
 		for (i = 0, di = (axis == Y) ? 1 : 2; i < 8; di += 5, i++) {
 			arr[i] = sensor_data[di];
 			arr[i+8] = sensor_data[di+2];
-			if (axis == X && num > 16) 
+			if (axis == X && num > 16)
 				arr[i+16] = sensor_data[di+40];
 		}
 
@@ -843,23 +880,43 @@ atp_detect_pspans(int *p, u_int num_sensors,
  */
 static boolean_t
 atp_match_stroke_component(atp_stroke_component *component,
-    const atp_pspan *pspan)
+    const atp_pspan *pspan, atp_stroke_type stroke_type)
 {
-	int delta_mickeys = pspan->loc - component->loc;
+	int   delta_mickeys;
+	u_int min_pressure;
+
+	delta_mickeys = pspan->loc - component->loc;
 
 	if (abs(delta_mickeys) > atp_max_delta_mickeys)
 		return (FALSE); /* the finger span is too far out; no match */
 
 	component->loc          = pspan->loc;
+
+	/*
+	 * A sudden and significant increase in a pspan's cumulative
+	 * pressure indicates the incidence of a new finger
+	 * contact. This usually revises the pspan's
+	 * centre-of-gravity, and hence the location of any/all
+	 * matching stroke component(s). But such a change should
+	 * *not* be interpreted as a movement.
+	 */
+        if (pspan->cum > ((3 * component->cum_pressure) >> 1))
+		delta_mickeys = 0;
+
 	component->cum_pressure = pspan->cum;
 	if (pspan->cum > component->max_cum_pressure)
 		component->max_cum_pressure = pspan->cum;
 
 	/*
-	 * If the cumulative pressure drops below a quarter of the max,
-	 * then disregard the component's movement.
+	 * Disregard the component's movement if its cumulative
+	 * pressure drops below a fraction of the maximum; this
+	 * fraction is determined based on the stroke's type.
 	 */
-	if (component->cum_pressure < (component->max_cum_pressure >> 2))
+	if (stroke_type == ATP_STROKE_TOUCH)
+		min_pressure = (3 * component->max_cum_pressure) >> 2;
+	else
+		min_pressure = component->max_cum_pressure >> 2;
+	if (component->cum_pressure < min_pressure)
 		delta_mickeys = 0;
 
 	component->delta_mickeys = delta_mickeys;
@@ -894,7 +951,8 @@ atp_match_strokes_against_pspans(struct atp_softc *sc, atp_axis axis,
 				continue; /* skip matched pspans */
 
 			if (atp_match_stroke_component(
-				    &stroke->components[axis], &pspans[j])) {
+				    &stroke->components[axis], &pspans[j],
+				    stroke->type)) {
 				/* There is a match. */
 				stroke->components[axis].matched = TRUE;
 
@@ -1029,19 +1087,23 @@ atp_update_strokes(struct atp_softc *sc, atp_pspan *pspans_x,
 		for (i = 0; i < sc->sc_n_strokes; i++) {
 			atp_stroke *stroke = &sc->sc_strokes[i];
 
-			printf(" %s%clc:%u,dm:%d,pnd:%d,mv:%d%c"
-			    ",%clc:%u,dm:%d,pnd:%d,mv:%d%c",
+			printf(" %s%clc:%u,dm:%d,pnd:%d,cum:%d,max:%d,mv:%d%c"
+			    ",%clc:%u,dm:%d,pnd:%d,cum:%d,max:%d,mv:%d%c",
 			    (stroke->flags & ATSF_ZOMBIE) ? "zomb:" : "",
 			    (stroke->type == ATP_STROKE_TOUCH) ? '[' : '<',
 			    stroke->components[X].loc,
 			    stroke->components[X].delta_mickeys,
 			    stroke->components[X].pending,
+			    stroke->components[X].cum_pressure,
+			    stroke->components[X].max_cum_pressure,
 			    stroke->components[X].movement,
 			    (stroke->type == ATP_STROKE_TOUCH) ? ']' : '>',
 			    (stroke->type == ATP_STROKE_TOUCH) ? '[' : '<',
 			    stroke->components[Y].loc,
 			    stroke->components[Y].delta_mickeys,
 			    stroke->components[Y].pending,
+			    stroke->components[Y].cum_pressure,
+			    stroke->components[Y].max_cum_pressure,
 			    stroke->components[Y].movement,
 			    (stroke->type == ATP_STROKE_TOUCH) ? ']' : '>');
 		}
@@ -1182,51 +1244,94 @@ atp_advance_stroke_state(struct atp_softc *sc, atp_stroke *stroke,
 	if (atp_compute_stroke_movement(stroke))
 		*movement = TRUE;
 
+	if (stroke->type != ATP_STROKE_TOUCH)
+		return;
+
 	/* Convert touch strokes to slides upon detecting movement or age. */
-	if (stroke->type == ATP_STROKE_TOUCH) {
-		struct timeval tdiff;
+	if (stroke->cum_movement >= atp_slide_min_movement) {
+		atp_convert_to_slide(sc, stroke);
+	} else {
+		/* If a touch stroke is found to be older than the
+		 * touch-timeout threshold, it should be converted to
+		 * a slide; except if there is a co-incident sibling
+		 * with a later creation time.
+		 *
+		 * When multiple fingers make contact with the
+		 * touchpad, they are likely to be separated in their
+		 * times of incidence.  During a multi-finger tap,
+		 * therefore, the last finger to make
+		 * contact--i.e. the one with the latest
+		 * 'ctime'--should be used to determine how the
+		 * touch-siblings get treated; otherwise older
+		 * siblings may lapse the touch-timeout and get
+		 * converted into slides prematurely.  The following
+		 * loop determines if there exists another touch
+		 * stroke with a larger 'ctime' than the current
+		 * stroke (NOTE: zombies with a larger 'ctime' are
+		 * also considered) .
+		 */
 
-		/* Compute the stroke's age. */
-		getmicrotime(&tdiff);
-		if (timevalcmp(&tdiff, &stroke->ctime, >))
-			timevalsub(&tdiff, &stroke->ctime);
-		else {
-			/*
-			 * If we are here, it is because getmicrotime
-			 * reported the current time as being behind
-			 * the stroke's start time; getmicrotime can
-			 * be imprecise.
-			 */
-			tdiff.tv_sec  = 0;
-			tdiff.tv_usec = 0;
+		u_int i;
+		for (i = 0; i < sc->sc_n_strokes; i++) {
+			if ((&sc->sc_strokes[i] == stroke) ||
+			    (sc->sc_strokes[i].type != ATP_STROKE_TOUCH))
+				continue;
+
+			if (timevalcmp(&sc->sc_strokes[i].ctime,
+				&stroke->ctime, >))
+				break;
 		}
+		if (i == sc->sc_n_strokes) {
+			/* Found no other touch stroke with a larger 'ctime'. */
+			struct timeval tdiff;
 
-		if ((tdiff.tv_sec > (atp_touch_timeout / 1000000)) ||
-		    ((tdiff.tv_sec == (atp_touch_timeout / 1000000)) &&
-			(tdiff.tv_usec > atp_touch_timeout)) ||
-		    (stroke->cum_movement >= atp_slide_min_movement)) {
-			/* Switch this stroke to being a slide. */
-			stroke->type = ATP_STROKE_SLIDE;
-
-			/* Are we at the beginning of a double-click-n-drag? */
-			if ((sc->sc_n_strokes == 1) &&
-			    ((sc->sc_state & ATP_ZOMBIES_EXIST) == 0) &&
-			    timevalcmp(&stroke->ctime, &sc->sc_reap_time, >)) {
-				struct timeval delta;
-				struct timeval window = {
-					atp_double_tap_threshold / 1000000,
-					atp_double_tap_threshold % 1000000
-				};
-
-				delta = stroke->ctime;
-				timevalsub(&delta, &sc->sc_reap_time);
-				if (timevalcmp(&delta, &window, <=))
-					sc->sc_state |= ATP_DOUBLE_TAP_DRAG;
+			/* Compute the stroke's age. */
+			getmicrotime(&tdiff);
+			if (timevalcmp(&tdiff, &stroke->ctime, >))
+				timevalsub(&tdiff, &stroke->ctime);
+			else {
+				/*
+				 * If we are here, it is because getmicrotime
+				 * reported the current time as being behind
+				 * the stroke's start time; getmicrotime can
+				 * be imprecise.
+				 */
+				tdiff.tv_sec  = 0;
+				tdiff.tv_usec = 0;
 			}
+
+			if ((tdiff.tv_sec > (atp_touch_timeout / 1000000)) ||
+			    ((tdiff.tv_sec == (atp_touch_timeout / 1000000)) &&
+				(tdiff.tv_usec >=
+				    (atp_touch_timeout % 1000000))))
+				atp_convert_to_slide(sc, stroke);
 		}
 	}
 }
 
+/* Switch a given touch stroke to being a slide. */
+void
+atp_convert_to_slide(struct atp_softc *sc, atp_stroke *stroke)
+{
+	stroke->type = ATP_STROKE_SLIDE;
+
+	/* Are we at the beginning of a double-click-n-drag? */
+	if ((sc->sc_n_strokes == 1) &&
+	    ((sc->sc_state & ATP_ZOMBIES_EXIST) == 0) &&
+	    timevalcmp(&stroke->ctime, &sc->sc_reap_time, >)) {
+		struct timeval delta;
+		struct timeval window = {
+			atp_double_tap_threshold / 1000000,
+			atp_double_tap_threshold % 1000000
+		};
+
+		delta = stroke->ctime;
+		timevalsub(&delta, &sc->sc_reap_time);
+		if (timevalcmp(&delta, &window, <=))
+			sc->sc_state |= ATP_DOUBLE_TAP_DRAG;
+	}
+}
+
 /*
  * Terminate a stroke. While SLIDE strokes are dropped, TOUCH strokes
  * are retained as zombies so as to reap all their siblings together;
@@ -1515,6 +1620,14 @@ static const struct usb_config atp_config[ATP_N_TRANSFER] = {
 		.bufsize   = 0, /* use wMaxPacketSize */
 		.callback  = &atp_intr,
 	},
+	[ATP_RESET] = {
+		.type      = UE_CONTROL,
+		.endpoint  = 0, /* Control pipe */
+		.direction = UE_DIR_ANY,
+		.bufsize = sizeof(struct usb_device_request) + MODE_LENGTH,
+		.callback  = &atp_reset_callback,
+		.interval = 0,  /* no pre-delay */
+	},
 };
 
 static int
@@ -1529,10 +1642,7 @@ atp_probe(device_t self)
 	    (uaa->info.bInterfaceProtocol != UIPROTO_MOUSE))
 		return (ENXIO);
 
-	if (usbd_lookup_id_by_uaa(atp_devs, sizeof(atp_devs), uaa) == 0)
-		return BUS_PROBE_SPECIFIC;
-	else
-		return ENXIO;
+	return (usbd_lookup_id_by_uaa(atp_devs, sizeof(atp_devs), uaa));
 }
 
 static int
@@ -1542,12 +1652,6 @@ atp_attach(device_t dev)
 	struct usb_attach_arg *uaa = device_get_ivars(dev);
 	usb_error_t            err;
 
-	/* ensure that the probe was successful */
-	if (uaa->driver_info >= ATP_N_DEV_PARAMS) {
-		DPRINTF("device probe returned bad id: %lu\n",
-		    uaa->driver_info);
-		return (ENXIO);
-	}
 	DPRINTFN(ATP_LLEVEL_INFO, "sc=%p\n", sc);
 
 	sc->sc_dev        = dev;
@@ -1626,7 +1730,6 @@ static int
 atp_detach(device_t dev)
 {
 	struct atp_softc *sc;
-	int err;
 
 	sc = device_get_softc(dev);
 	if (sc->sc_state & ATP_ENABLED) {
@@ -1641,12 +1744,6 @@ atp_detach(device_t dev)
 
 	mtx_destroy(&sc->sc_mutex);
 
-	err = atp_set_device_mode(dev, HID_MODE);
-	if (err != 0) {
-		DPRINTF("failed to reset mode to 'HID' (%d)\n", err);
-		return (err);
-	}
-
 	return (0);
 }
 
@@ -1695,7 +1792,7 @@ atp_intr(struct usb_xfer *xfer, usb_error_t error)
 		 */
 		status_bits = sc->sensor_data[sc->sc_params->data_len - 1];
 		if ((sc->sc_params->prot == ATP_PROT_GEYSER3 &&
-		    (status_bits & ATP_STATUS_BASE_UPDATE)) || 
+		    (status_bits & ATP_STATUS_BASE_UPDATE)) ||
 		    !(sc->sc_state & ATP_VALID)) {
 			memcpy(sc->base_x, sc->cur_x,
 			    sc->sc_params->n_xsensors * sizeof(*(sc->base_x)));
@@ -1822,11 +1919,23 @@ atp_intr(struct usb_xfer *xfer, usb_error_t error)
 			sc->sc_idlecount++;
 			if (sc->sc_idlecount >= ATP_IDLENESS_THRESHOLD) {
 				DPRINTFN(ATP_LLEVEL_INFO, "idle\n");
-				sc->sc_idlecount = 0;
 
-				mtx_unlock(&sc->sc_mutex);
-				atp_set_device_mode(sc->sc_dev,RAW_SENSOR_MODE);
-				mtx_lock(&sc->sc_mutex);
+				/*
+				 * Use the last frame before we go idle for
+				 * calibration on pads which do not send
+				 * calibration frames.
+				 */
+				if (sc->sc_params->prot < ATP_PROT_GEYSER3) {
+					memcpy(sc->base_x, sc->cur_x,
+					    sc->sc_params->n_xsensors *
+					    sizeof(*(sc->base_x)));
+					memcpy(sc->base_y, sc->cur_y,
+					    sc->sc_params->n_ysensors *
+					    sizeof(*(sc->base_y)));
+				}
+
+				sc->sc_idlecount = 0;
+				usbd_transfer_start(sc->sc_xfer[ATP_RESET]);
 			}
 		} else {
 			sc->sc_idlecount = 0;
diff --git a/sys/dev/usb/input/uhid.c b/sys/dev/usb/input/uhid.c
index 63972e43665..be356a5e49d 100644
--- a/sys/dev/usb/input/uhid.c
+++ b/sys/dev/usb/input/uhid.c
@@ -173,12 +173,21 @@ uhid_intr_callback(struct usb_xfer *xfer, usb_error_t error)
 		DPRINTF("transferred!\n");
 
 		pc = usbd_xfer_get_frame(xfer, 0);
-		if (actlen >= sc->sc_isize) {
+
+		/* 
+		 * If the ID byte is non zero we allow descriptors
+		 * having multiple sizes:
+		 */
+		if ((actlen >= sc->sc_isize) ||
+		    ((actlen > 0) && (sc->sc_iid != 0))) {
+			/* limit report length to the maximum */
+			if (actlen > sc->sc_isize)
+				actlen = sc->sc_isize;
 			usb_fifo_put_data(sc->sc_fifo.fp[USB_FIFO_RX], pc,
-			    0, sc->sc_isize, 1);
+			    0, actlen, 1);
 		} else {
 			/* ignore it */
-			DPRINTF("ignored short transfer, %d bytes\n", actlen);
+			DPRINTF("ignored transfer, %d bytes\n", actlen);
 		}
 
 	case USB_ST_SETUP:
diff --git a/sys/dev/usb/input/ukbd.c b/sys/dev/usb/input/ukbd.c
index 26ed8bce19c..d7bc2cd1a86 100644
--- a/sys/dev/usb/input/ukbd.c
+++ b/sys/dev/usb/input/ukbd.c
@@ -105,6 +105,8 @@ SYSCTL_INT(_hw_usb_ukbd, OID_AUTO, debug, CTLFLAG_RW,
 SYSCTL_INT(_hw_usb_ukbd, OID_AUTO, no_leds, CTLFLAG_RW,
     &ukbd_no_leds, 0, "Disables setting of keyboard leds");
 
+TUNABLE_INT("hw.usb.ukbd.debug", &ukbd_debug);
+TUNABLE_INT("hw.usb.ukbd.no_leds", &ukbd_no_leds);
 #endif
 
 #define	UPROTO_BOOT_KEYBOARD 1
@@ -924,7 +926,7 @@ ukbd_detach(device_t dev)
 	DPRINTF("\n");
 
 	if (sc->sc_flags & UKBD_FLAG_POLLING) {
-		panic("cannot detach polled keyboard!\n");
+		panic("cannot detach polled keyboard\n");
 	}
 	sc->sc_flags |= UKBD_FLAG_GONE;
 
diff --git a/sys/dev/usb/net/if_aue.c b/sys/dev/usb/net/if_aue.c
index 1a2ce70b5ae..b508474e468 100644
--- a/sys/dev/usb/net/if_aue.c
+++ b/sys/dev/usb/net/if_aue.c
@@ -112,74 +112,76 @@ SYSCTL_INT(_hw_usb_aue, OID_AUTO, debug, CTLFLAG_RW, &aue_debug, 0,
  * Various supported device vendors/products.
  */
 static const struct usb_device_id aue_devs[] = {
-    {USB_VPI(USB_VENDOR_3COM, USB_PRODUCT_3COM_3C460B, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_DSB650TX_PNA, 0)},
-    {USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UFE1000, AUE_FLAG_LSYS)},
-    {USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX10, 0)},
-    {USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX1, AUE_FLAG_PNA | AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX2, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX4, AUE_FLAG_PNA)},
-    {USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX5, AUE_FLAG_PNA)},
-    {USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX6, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX7, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX8, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_XX9, AUE_FLAG_PNA)},
-    {USB_VPI(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_SS1001, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ACCTON, USB_PRODUCT_ACCTON_USB320_EC, 0)},
-    {USB_VPI(USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_2, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_3, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII_4, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUSII, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ADMTEK, USB_PRODUCT_ADMTEK_PEGASUS, AUE_FLAG_PNA | AUE_FLAG_DUAL_PHY)},
-    {USB_VPI(USB_VENDOR_AEI, USB_PRODUCT_AEI_FASTETHERNET, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ALLIEDTELESYN, USB_PRODUCT_ALLIEDTELESYN_ATUSB100, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC110T, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_USB2LAN, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB100, 0)},
-    {USB_VPI(USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBE100, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBEL100, 0)},
-    {USB_VPI(USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USBLP100, AUE_FLAG_PNA)},
-    {USB_VPI(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TXS, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB_TX, 0)},
-    {USB_VPI(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX1, AUE_FLAG_LSYS)},
-    {USB_VPI(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX2, AUE_FLAG_LSYS | AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX3, AUE_FLAG_LSYS | AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX4, AUE_FLAG_LSYS | AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX_PNA, AUE_FLAG_PNA)},
-    {USB_VPI(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650TX, AUE_FLAG_LSYS)},
-    {USB_VPI(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650, AUE_FLAG_LSYS)},
-    {USB_VPI(USB_VENDOR_ELCON, USB_PRODUCT_ELCON_PLAN, AUE_FLAG_PNA | AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSB20, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBLTX, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX0, 0)},
-    {USB_VPI(USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX1, AUE_FLAG_LSYS)},
-    {USB_VPI(USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX2, 0)},
-    {USB_VPI(USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_LDUSBTX3, AUE_FLAG_LSYS)},
-    {USB_VPI(USB_VENDOR_ELSA, USB_PRODUCT_ELSA_USB2ETHERNET, 0)},
-    {USB_VPI(USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNBR402W, 0)},
-    {USB_VPI(USB_VENDOR_HAWKING, USB_PRODUCT_HAWKING_UF100, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_HP, USB_PRODUCT_HP_HN210E, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTXS, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETTX, 0)},
-    {USB_VPI(USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_KNU101TX, 0)},
-    {USB_VPI(USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100H1, AUE_FLAG_LSYS | AUE_FLAG_PNA)},
-    {USB_VPI(USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB100TX, AUE_FLAG_LSYS)},
-    {USB_VPI(USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TA, AUE_FLAG_LSYS)},
-    {USB_VPI(USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX1, AUE_FLAG_LSYS | AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10TX2, AUE_FLAG_LSYS | AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10T, AUE_FLAG_LSYS)},
-    {USB_VPI(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUA2TX5, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX1, 0)},
-    {USB_VPI(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUATX5, 0)},
-    {USB_VPI(USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_MN110, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_FA101, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_SIEMENS, USB_PRODUCT_SIEMENS_SPEEDSTREAM, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_SIIG2, USB_PRODUCT_SIIG2_USBTOETHER, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTNIC, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_SMC, USB_PRODUCT_SMC_2202USB, 0)},
-    {USB_VPI(USB_VENDOR_SMC, USB_PRODUCT_SMC_2206USB, AUE_FLAG_PII)},
-    {USB_VPI(USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB100, 0)},
-    {USB_VPI(USB_VENDOR_SOHOWARE, USB_PRODUCT_SOHOWARE_NUB110, AUE_FLAG_PII)},
+#define	AUE_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
+    AUE_DEV(3COM, 3C460B, AUE_FLAG_PII),
+    AUE_DEV(ABOCOM, DSB650TX_PNA, 0),
+    AUE_DEV(ABOCOM, UFE1000, AUE_FLAG_LSYS),
+    AUE_DEV(ABOCOM, XX10, 0),
+    AUE_DEV(ABOCOM, XX1, AUE_FLAG_PNA | AUE_FLAG_PII),
+    AUE_DEV(ABOCOM, XX2, AUE_FLAG_PII),
+    AUE_DEV(ABOCOM, XX4, AUE_FLAG_PNA),
+    AUE_DEV(ABOCOM, XX5, AUE_FLAG_PNA),
+    AUE_DEV(ABOCOM, XX6, AUE_FLAG_PII),
+    AUE_DEV(ABOCOM, XX7, AUE_FLAG_PII),
+    AUE_DEV(ABOCOM, XX8, AUE_FLAG_PII),
+    AUE_DEV(ABOCOM, XX9, AUE_FLAG_PNA),
+    AUE_DEV(ACCTON, SS1001, AUE_FLAG_PII),
+    AUE_DEV(ACCTON, USB320_EC, 0),
+    AUE_DEV(ADMTEK, PEGASUSII_2, AUE_FLAG_PII),
+    AUE_DEV(ADMTEK, PEGASUSII_3, AUE_FLAG_PII),
+    AUE_DEV(ADMTEK, PEGASUSII_4, AUE_FLAG_PII),
+    AUE_DEV(ADMTEK, PEGASUSII, AUE_FLAG_PII),
+    AUE_DEV(ADMTEK, PEGASUS, AUE_FLAG_PNA | AUE_FLAG_DUAL_PHY),
+    AUE_DEV(AEI, FASTETHERNET, AUE_FLAG_PII),
+    AUE_DEV(ALLIEDTELESYN, ATUSB100, AUE_FLAG_PII),
+    AUE_DEV(ATEN, UC110T, AUE_FLAG_PII),
+    AUE_DEV(BELKIN, USB2LAN, AUE_FLAG_PII),
+    AUE_DEV(BILLIONTON, USB100, 0),
+    AUE_DEV(BILLIONTON, USBE100, AUE_FLAG_PII),
+    AUE_DEV(BILLIONTON, USBEL100, 0),
+    AUE_DEV(BILLIONTON, USBLP100, AUE_FLAG_PNA),
+    AUE_DEV(COREGA, FETHER_USB_TXS, AUE_FLAG_PII),
+    AUE_DEV(COREGA, FETHER_USB_TX, 0),
+    AUE_DEV(DLINK, DSB650TX1, AUE_FLAG_LSYS),
+    AUE_DEV(DLINK, DSB650TX2, AUE_FLAG_LSYS | AUE_FLAG_PII),
+    AUE_DEV(DLINK, DSB650TX3, AUE_FLAG_LSYS | AUE_FLAG_PII),
+    AUE_DEV(DLINK, DSB650TX4, AUE_FLAG_LSYS | AUE_FLAG_PII),
+    AUE_DEV(DLINK, DSB650TX_PNA, AUE_FLAG_PNA),
+    AUE_DEV(DLINK, DSB650TX, AUE_FLAG_LSYS),
+    AUE_DEV(DLINK, DSB650, AUE_FLAG_LSYS),
+    AUE_DEV(ELCON, PLAN, AUE_FLAG_PNA | AUE_FLAG_PII),
+    AUE_DEV(ELECOM, LDUSB20, AUE_FLAG_PII),
+    AUE_DEV(ELECOM, LDUSBLTX, AUE_FLAG_PII),
+    AUE_DEV(ELECOM, LDUSBTX0, 0),
+    AUE_DEV(ELECOM, LDUSBTX1, AUE_FLAG_LSYS),
+    AUE_DEV(ELECOM, LDUSBTX2, 0),
+    AUE_DEV(ELECOM, LDUSBTX3, AUE_FLAG_LSYS),
+    AUE_DEV(ELSA, USB2ETHERNET, 0),
+    AUE_DEV(GIGABYTE, GNBR402W, 0),
+    AUE_DEV(HAWKING, UF100, AUE_FLAG_PII),
+    AUE_DEV(HP, HN210E, AUE_FLAG_PII),
+    AUE_DEV(IODATA, USBETTXS, AUE_FLAG_PII),
+    AUE_DEV(IODATA, USBETTX, 0),
+    AUE_DEV(KINGSTON, KNU101TX, 0),
+    AUE_DEV(LINKSYS, USB100H1, AUE_FLAG_LSYS | AUE_FLAG_PNA),
+    AUE_DEV(LINKSYS, USB100TX, AUE_FLAG_LSYS),
+    AUE_DEV(LINKSYS, USB10TA, AUE_FLAG_LSYS),
+    AUE_DEV(LINKSYS, USB10TX1, AUE_FLAG_LSYS | AUE_FLAG_PII),
+    AUE_DEV(LINKSYS, USB10TX2, AUE_FLAG_LSYS | AUE_FLAG_PII),
+    AUE_DEV(LINKSYS, USB10T, AUE_FLAG_LSYS),
+    AUE_DEV(MELCO, LUA2TX5, AUE_FLAG_PII),
+    AUE_DEV(MELCO, LUATX1, 0),
+    AUE_DEV(MELCO, LUATX5, 0),
+    AUE_DEV(MICROSOFT, MN110, AUE_FLAG_PII),
+    AUE_DEV(NETGEAR, FA101, AUE_FLAG_PII),
+    AUE_DEV(SIEMENS, SPEEDSTREAM, AUE_FLAG_PII),
+    AUE_DEV(SIIG2, USBTOETHER, AUE_FLAG_PII),
+    AUE_DEV(SMARTBRIDGES, SMARTNIC, AUE_FLAG_PII),
+    AUE_DEV(SMC, 2202USB, 0),
+    AUE_DEV(SMC, 2206USB, AUE_FLAG_PII),
+    AUE_DEV(SOHOWARE, NUB100, 0),
+    AUE_DEV(SOHOWARE, NUB110, AUE_FLAG_PII),
+#undef AUE_DEV
 };
 
 /* prototypes */
@@ -692,7 +694,7 @@ aue_attach(device_t dev)
 	    sc->sc_xfer, aue_config, AUE_N_TRANSFER,
 	    sc, &sc->sc_mtx);
 	if (error) {
-		device_printf(dev, "allocating USB transfers failed!\n");
+		device_printf(dev, "allocating USB transfers failed\n");
 		goto detach;
 	}
 
diff --git a/sys/dev/usb/net/if_axe.c b/sys/dev/usb/net/if_axe.c
index eca726810fc..9772f401b68 100644
--- a/sys/dev/usb/net/if_axe.c
+++ b/sys/dev/usb/net/if_axe.c
@@ -135,31 +135,34 @@ SYSCTL_INT(_hw_usb_axe, OID_AUTO, debug, CTLFLAG_RW, &axe_debug, 0,
  * Various supported device vendors/products.
  */
 static const struct usb_device_id axe_devs[] = {
-	{USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_UF200, 0)},
-	{USB_VPI(USB_VENDOR_ACERCM, USB_PRODUCT_ACERCM_EP1427X2, 0)},
-	{USB_VPI(USB_VENDOR_APPLE, USB_PRODUCT_APPLE_ETHERNET, AXE_FLAG_772)},
-	{USB_VPI(USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88172, 0)},
-	{USB_VPI(USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88178, AXE_FLAG_178)},
-	{USB_VPI(USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772, AXE_FLAG_772)},
-	{USB_VPI(USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC210T, 0)},
-	{USB_VPI(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D5055, AXE_FLAG_178)},
-	{USB_VPI(USB_VENDOR_BILLIONTON, USB_PRODUCT_BILLIONTON_USB2AR, 0)},
-	{USB_VPI(USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_USB200MV2, AXE_FLAG_772)},
-	{USB_VPI(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_FETHER_USB2_TX, 0)},
-	{USB_VPI(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100, 0)},
-	{USB_VPI(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DUBE100B1, AXE_FLAG_772)},
-	{USB_VPI(USB_VENDOR_GOODWAY, USB_PRODUCT_GOODWAY_GWUSB2E, 0)},
-	{USB_VPI(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_ETGUS2, AXE_FLAG_178)},
-	{USB_VPI(USB_VENDOR_JVC, USB_PRODUCT_JVC_MP_PRX1, 0)},
-	{USB_VPI(USB_VENDOR_LINKSYS2, USB_PRODUCT_LINKSYS2_USB200M, 0)},
-	{USB_VPI(USB_VENDOR_LINKSYS4, USB_PRODUCT_LINKSYS4_USB1000, AXE_FLAG_178)},
-	{USB_VPI(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAU2KTX, 0)},
-	{USB_VPI(USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_FA120, 0)},
-	{USB_VPI(USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01PLUS, AXE_FLAG_772)},
-	{USB_VPI(USB_VENDOR_PLANEX3, USB_PRODUCT_PLANEX3_GU1000T, AXE_FLAG_178)},
-	{USB_VPI(USB_VENDOR_SITECOM, USB_PRODUCT_SITECOM_LN029, 0)},
-	{USB_VPI(USB_VENDOR_SITECOMEU, USB_PRODUCT_SITECOMEU_LN028, AXE_FLAG_178)},
-	{USB_VPI(USB_VENDOR_SYSTEMTALKS, USB_PRODUCT_SYSTEMTALKS_SGCX2UL, 0)},
+#define	AXE_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
+	AXE_DEV(ABOCOM, UF200, 0),
+	AXE_DEV(ACERCM, EP1427X2, 0),
+	AXE_DEV(APPLE, ETHERNET, AXE_FLAG_772),
+	AXE_DEV(ASIX, AX88172, 0),
+	AXE_DEV(ASIX, AX88178, AXE_FLAG_178),
+	AXE_DEV(ASIX, AX88772, AXE_FLAG_772),
+	AXE_DEV(ASIX, AX88772A, AXE_FLAG_772),
+	AXE_DEV(ATEN, UC210T, 0),
+	AXE_DEV(BELKIN, F5D5055, AXE_FLAG_178),
+	AXE_DEV(BILLIONTON, USB2AR, 0),
+	AXE_DEV(CISCOLINKSYS, USB200MV2, AXE_FLAG_772),
+	AXE_DEV(COREGA, FETHER_USB2_TX, 0),
+	AXE_DEV(DLINK, DUBE100, 0),
+	AXE_DEV(DLINK, DUBE100B1, AXE_FLAG_772),
+	AXE_DEV(GOODWAY, GWUSB2E, 0),
+	AXE_DEV(IODATA, ETGUS2, AXE_FLAG_178),
+	AXE_DEV(JVC, MP_PRX1, 0),
+	AXE_DEV(LINKSYS2, USB200M, 0),
+	AXE_DEV(LINKSYS4, USB1000, AXE_FLAG_178),
+	AXE_DEV(MELCO, LUAU2KTX, 0),
+	AXE_DEV(NETGEAR, FA120, 0),
+	AXE_DEV(OQO, ETHER01PLUS, AXE_FLAG_772),
+	AXE_DEV(PLANEX3, GU1000T, AXE_FLAG_178),
+	AXE_DEV(SITECOM, LN029, 0),
+	AXE_DEV(SITECOMEU, LN028, AXE_FLAG_178),
+	AXE_DEV(SYSTEMTALKS, SGCX2UL, 0),
+#undef AXE_DEV
 };
 
 static device_probe_t axe_probe;
@@ -706,7 +709,7 @@ axe_attach(device_t dev)
 	error = usbd_transfer_setup(uaa->device, &iface_index, sc->sc_xfer,
 	    axe_config, AXE_N_TRANSFER, sc, &sc->sc_mtx);
 	if (error) {
-		device_printf(dev, "allocating USB transfers failed!\n");
+		device_printf(dev, "allocating USB transfers failed\n");
 		goto detach;
 	}
 
diff --git a/sys/dev/usb/net/if_cdce.c b/sys/dev/usb/net/if_cdce.c
index cb33249c8b8..2fcb0ff0b5b 100644
--- a/sys/dev/usb/net/if_cdce.c
+++ b/sys/dev/usb/net/if_cdce.c
@@ -489,7 +489,7 @@ cdce_attach(device_t dev)
 				break;
 			}
 		} else {
-			device_printf(dev, "no data interface found!\n");
+			device_printf(dev, "no data interface found\n");
 			goto detach;
 		}
 	}
@@ -541,7 +541,7 @@ alloc_transfers:
 
 	if (error || (i == 32)) {
 		device_printf(dev, "No valid alternate "
-		    "setting found!\n");
+		    "setting found\n");
 		goto detach;
 	}
 
@@ -1098,7 +1098,7 @@ cdce_ncm_fill_tx_frames(struct usb_xfer *xfer, uint8_t index)
 	sc->sc_ncm.dpt.dwSignature[0] = 'N';
 	sc->sc_ncm.dpt.dwSignature[1] = 'C';
 	sc->sc_ncm.dpt.dwSignature[2] = 'M';
-	sc->sc_ncm.dpt.dwSignature[3] = 'x';
+	sc->sc_ncm.dpt.dwSignature[3] = '0';
 	USETW(sc->sc_ncm.dpt.wNextNdpIndex, 0);		/* reserved */
 
 	usbd_copy_in(pc, 0, &(sc->sc_ncm.hdr), sizeof(sc->sc_ncm.hdr));
@@ -1182,7 +1182,7 @@ cdce_ncm_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error)
 		if (actlen < (sizeof(sc->sc_ncm.hdr) +
 		    sizeof(sc->sc_ncm.dpt))) {
 			DPRINTFN(1, "frame too short\n");
-			goto tr_stall;
+			goto tr_setup;
 		}
 		usbd_copy_out(pc, 0, &(sc->sc_ncm.hdr),
 		    sizeof(sc->sc_ncm.hdr));
@@ -1191,7 +1191,12 @@ cdce_ncm_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error)
 		    (sc->sc_ncm.hdr.dwSignature[1] != 'C') ||
 		    (sc->sc_ncm.hdr.dwSignature[2] != 'M') ||
 		    (sc->sc_ncm.hdr.dwSignature[3] != 'H')) {
-			DPRINTFN(1, "invalid HDR signature\n");
+			DPRINTFN(1, "invalid HDR signature: "
+			    "0x%02x:0x%02x:0x%02x:0x%02x\n",
+			    sc->sc_ncm.hdr.dwSignature[0],
+			    sc->sc_ncm.hdr.dwSignature[1],
+			    sc->sc_ncm.hdr.dwSignature[2],
+			    sc->sc_ncm.hdr.dwSignature[3]);
 			goto tr_stall;
 		}
 		temp = UGETW(sc->sc_ncm.hdr.wBlockLength);
@@ -1202,7 +1207,7 @@ cdce_ncm_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error)
 		}
 		temp = UGETW(sc->sc_ncm.hdr.wDptIndex);
 		if ((temp + sizeof(sc->sc_ncm.dpt)) > actlen) {
-			DPRINTFN(1, "invalid DPT index\n");
+			DPRINTFN(1, "invalid DPT index: 0x%04x\n", temp);
 			goto tr_stall;
 		}
 		usbd_copy_out(pc, temp, &(sc->sc_ncm.dpt),
@@ -1211,8 +1216,13 @@ cdce_ncm_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error)
 		if ((sc->sc_ncm.dpt.dwSignature[0] != 'N') ||
 		    (sc->sc_ncm.dpt.dwSignature[1] != 'C') ||
 		    (sc->sc_ncm.dpt.dwSignature[2] != 'M') ||
-		    (sc->sc_ncm.dpt.dwSignature[3] != 'x')) {
-			DPRINTFN(1, "invalid DPT signature\n");
+		    (sc->sc_ncm.dpt.dwSignature[3] != '0')) {
+			DPRINTFN(1, "invalid DPT signature"
+			    "0x%02x:0x%02x:0x%02x:0x%02x\n",
+			    sc->sc_ncm.dpt.dwSignature[0],
+			    sc->sc_ncm.dpt.dwSignature[1],
+			    sc->sc_ncm.dpt.dwSignature[2],
+			    sc->sc_ncm.dpt.dwSignature[3]);
 			goto tr_stall;
 		}
 		nframes = UGETW(sc->sc_ncm.dpt.wLength) / 4;
@@ -1284,6 +1294,7 @@ cdce_ncm_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error)
 		DPRINTFN(1, "Efficiency: %u/%u bytes\n", sumdata, actlen);
 
 	case USB_ST_SETUP:
+tr_setup:
 		usbd_xfer_set_frame_len(xfer, 0, sc->sc_ncm.rx_max);
 		usbd_xfer_set_frames(xfer, 1);
 		usbd_transfer_submit(xfer);
diff --git a/sys/dev/usb/net/if_cue.c b/sys/dev/usb/net/if_cue.c
index dcbef616dfc..05ff1a54a88 100644
--- a/sys/dev/usb/net/if_cue.c
+++ b/sys/dev/usb/net/if_cue.c
@@ -90,9 +90,11 @@ __FBSDID("$FreeBSD$");
 /* Belkin F5U111 adapter covered by NETMATE entry */
 
 static const struct usb_device_id cue_devs[] = {
-	{USB_VPI(USB_VENDOR_CATC, USB_PRODUCT_CATC_NETMATE, 0)},
-	{USB_VPI(USB_VENDOR_CATC, USB_PRODUCT_CATC_NETMATE2, 0)},
-	{USB_VPI(USB_VENDOR_SMARTBRIDGES, USB_PRODUCT_SMARTBRIDGES_SMARTLINK, 0)},
+#define	CUE_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
+	CUE_DEV(CATC, NETMATE),
+	CUE_DEV(CATC, NETMATE2),
+	CUE_DEV(SMARTBRIDGES, SMARTLINK),
+#undef CUE_DEV
 };
 
 /* prototypes */
@@ -404,7 +406,7 @@ cue_attach(device_t dev)
 	error = usbd_transfer_setup(uaa->device, &iface_index,
 	    sc->sc_xfer, cue_config, CUE_N_TRANSFER, sc, &sc->sc_mtx);
 	if (error) {
-		device_printf(dev, "allocating USB transfers failed!\n");
+		device_printf(dev, "allocating USB transfers failed\n");
 		goto detach;
 	}
 
diff --git a/sys/dev/usb/net/if_kue.c b/sys/dev/usb/net/if_kue.c
index 281d54f919a..5d35da40bd5 100644
--- a/sys/dev/usb/net/if_kue.c
+++ b/sys/dev/usb/net/if_kue.c
@@ -102,40 +102,41 @@ __FBSDID("$FreeBSD$");
  * Various supported device vendors/products.
  */
 static const struct usb_device_id kue_devs[] = {
-	{USB_VPI(USB_VENDOR_3COM, USB_PRODUCT_3COM_3C19250, 0)},
-	{USB_VPI(USB_VENDOR_3COM, USB_PRODUCT_3COM_3C460, 0)},
-	{USB_VPI(USB_VENDOR_ABOCOM, USB_PRODUCT_ABOCOM_URE450, 0)},
-	{USB_VPI(USB_VENDOR_ADS, USB_PRODUCT_ADS_UBS10BT, 0)},
-	{USB_VPI(USB_VENDOR_ADS, USB_PRODUCT_ADS_UBS10BTX, 0)},
-	{USB_VPI(USB_VENDOR_AOX, USB_PRODUCT_AOX_USB101, 0)},
-	{USB_VPI(USB_VENDOR_ASANTE, USB_PRODUCT_ASANTE_EA, 0)},
-	{USB_VPI(USB_VENDOR_ATEN, USB_PRODUCT_ATEN_DSB650C, 0)},
-	{USB_VPI(USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC10T, 0)},
-	{USB_VPI(USB_VENDOR_COREGA, USB_PRODUCT_COREGA_ETHER_USB_T, 0)},
-	{USB_VPI(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DSB650C, 0)},
-	{USB_VPI(USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_E45, 0)},
-	{USB_VPI(USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_XX1, 0)},
-	{USB_VPI(USB_VENDOR_ENTREGA, USB_PRODUCT_ENTREGA_XX2, 0)},
-	{USB_VPI(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBETT, 0)},
-	{USB_VPI(USB_VENDOR_JATON, USB_PRODUCT_JATON_EDA, 0)},
-	{USB_VPI(USB_VENDOR_KINGSTON, USB_PRODUCT_KINGSTON_XX1, 0)},
-	{USB_VPI(USB_VENDOR_KLSI, USB_PRODUCT_AOX_USB101, 0)},
-	{USB_VPI(USB_VENDOR_KLSI, USB_PRODUCT_KLSI_DUH3E10BT, 0)},
-	{USB_VPI(USB_VENDOR_KLSI, USB_PRODUCT_KLSI_DUH3E10BTN, 0)},
-	{USB_VPI(USB_VENDOR_LINKSYS, USB_PRODUCT_LINKSYS_USB10T, 0)},
-	{USB_VPI(USB_VENDOR_MOBILITY, USB_PRODUCT_MOBILITY_EA, 0)},
-	{USB_VPI(USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_EA101, 0)},
-	{USB_VPI(USB_VENDOR_NETGEAR, USB_PRODUCT_NETGEAR_EA101X, 0)},
-	{USB_VPI(USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET, 0)},
-	{USB_VPI(USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET2, 0)},
-	{USB_VPI(USB_VENDOR_PERACOM, USB_PRODUCT_PERACOM_ENET3, 0)},
-	{USB_VPI(USB_VENDOR_PORTGEAR, USB_PRODUCT_PORTGEAR_EA8, 0)},
-	{USB_VPI(USB_VENDOR_PORTGEAR, USB_PRODUCT_PORTGEAR_EA9, 0)},
-	{USB_VPI(USB_VENDOR_PORTSMITH, USB_PRODUCT_PORTSMITH_EEA, 0)},
-	{USB_VPI(USB_VENDOR_SHARK, USB_PRODUCT_SHARK_PA, 0)},
-	{USB_VPI(USB_VENDOR_SILICOM, USB_PRODUCT_SILICOM_GPE, 0)},
-	{USB_VPI(USB_VENDOR_SILICOM, USB_PRODUCT_SILICOM_U2E, 0)},
-	{USB_VPI(USB_VENDOR_SMC, USB_PRODUCT_SMC_2102USB, 0)},
+#define	KUE_DEV(v,p) { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
+	KUE_DEV(3COM, 3C19250),
+	KUE_DEV(3COM, 3C460),
+	KUE_DEV(ABOCOM, URE450),
+	KUE_DEV(ADS, UBS10BT),
+	KUE_DEV(ADS, UBS10BTX),
+	KUE_DEV(AOX, USB101),
+	KUE_DEV(ASANTE, EA),
+	KUE_DEV(ATEN, DSB650C),
+	KUE_DEV(ATEN, UC10T),
+	KUE_DEV(COREGA, ETHER_USB_T),
+	KUE_DEV(DLINK, DSB650C),
+	KUE_DEV(ENTREGA, E45),
+	KUE_DEV(ENTREGA, XX1),
+	KUE_DEV(ENTREGA, XX2),
+	KUE_DEV(IODATA, USBETT),
+	KUE_DEV(JATON, EDA),
+	KUE_DEV(KINGSTON, XX1),
+	KUE_DEV(KLSI, DUH3E10BT),
+	KUE_DEV(KLSI, DUH3E10BTN),
+	KUE_DEV(LINKSYS, USB10T),
+	KUE_DEV(MOBILITY, EA),
+	KUE_DEV(NETGEAR, EA101),
+	KUE_DEV(NETGEAR, EA101X),
+	KUE_DEV(PERACOM, ENET),
+	KUE_DEV(PERACOM, ENET2),
+	KUE_DEV(PERACOM, ENET3),
+	KUE_DEV(PORTGEAR, EA8),
+	KUE_DEV(PORTGEAR, EA9),
+	KUE_DEV(PORTSMITH, EEA),
+	KUE_DEV(SHARK, PA),
+	KUE_DEV(SILICOM, GPE),
+	KUE_DEV(SILICOM, U2E),
+	KUE_DEV(SMC, 2102USB),
+#undef KUE_DEV
 };
 
 /* prototypes */
@@ -480,14 +481,14 @@ kue_attach(device_t dev)
 	error = usbd_transfer_setup(uaa->device, &iface_index,
 	    sc->sc_xfer, kue_config, KUE_N_TRANSFER, sc, &sc->sc_mtx);
 	if (error) {
-		device_printf(dev, "allocating USB transfers failed!\n");
+		device_printf(dev, "allocating USB transfers failed\n");
 		goto detach;
 	}
 
 	sc->sc_mcfilters = malloc(KUE_MCFILTCNT(sc) * ETHER_ADDR_LEN,
 	    M_USBDEV, M_WAITOK);
 	if (sc->sc_mcfilters == NULL) {
-		device_printf(dev, "failed allocating USB memory!\n");
+		device_printf(dev, "failed allocating USB memory\n");
 		goto detach;
 	}
 
diff --git a/sys/dev/usb/net/if_rue.c b/sys/dev/usb/net/if_rue.c
index 7b92bc553e3..3e77305aa97 100644
--- a/sys/dev/usb/net/if_rue.c
+++ b/sys/dev/usb/net/if_rue.c
@@ -535,7 +535,7 @@ rue_reset(struct rue_softc *sc)
 			break;
 	}
 	if (i == RUE_TIMEOUT)
-		device_printf(sc->sc_ue.ue_dev, "reset never completed!\n");
+		device_printf(sc->sc_ue.ue_dev, "reset never completed\n");
 
 	uether_pause(&sc->sc_ue, hz / 100);
 }
@@ -591,7 +591,7 @@ rue_attach(device_t dev)
 	    sc->sc_xfer, rue_config, RUE_N_TRANSFER,
 	    sc, &sc->sc_mtx);
 	if (error) {
-		device_printf(dev, "allocating USB transfers failed!\n");
+		device_printf(dev, "allocating USB transfers failed\n");
 		goto detach;
 	}
 
diff --git a/sys/dev/usb/net/if_udav.c b/sys/dev/usb/net/if_udav.c
index 20853e0d8bf..ae30b142da6 100644
--- a/sys/dev/usb/net/if_udav.c
+++ b/sys/dev/usb/net/if_udav.c
@@ -254,7 +254,7 @@ udav_attach(device_t dev)
 	error = usbd_transfer_setup(uaa->device, &iface_index,
 	    sc->sc_xfer, udav_config, UDAV_N_TRANSFER, sc, &sc->sc_mtx);
 	if (error) {
-		device_printf(dev, "allocating USB transfers failed!\n");
+		device_printf(dev, "allocating USB transfers failed\n");
 		goto detach;
 	}
 
diff --git a/sys/dev/usb/quirk/usb_quirk.c b/sys/dev/usb/quirk/usb_quirk.c
index ea63cd64c7a..9a18dee556d 100644
--- a/sys/dev/usb/quirk/usb_quirk.c
+++ b/sys/dev/usb/quirk/usb_quirk.c
@@ -60,13 +60,7 @@
 MODULE_DEPEND(usb_quirk, usb, 1, 1, 1);
 MODULE_VERSION(usb_quirk, 1);
 
-/*
- * The following macro adds one or more quirks for a USB device:
- */
-#define	USB_QUIRK_ENTRY(v,p,l,h,...) \
-  .vid = (v), .pid = (p), .lo_rev = (l), .hi_rev = (h), .quirks = { __VA_ARGS__ }
-
-#define	USB_DEV_QUIRKS_MAX 128
+#define	USB_DEV_QUIRKS_MAX 256
 #define	USB_SUB_QUIRKS_MAX 8
 
 struct usb_quirk_entry {
@@ -79,56 +73,378 @@ struct usb_quirk_entry {
 
 static struct mtx usb_quirk_mtx;
 
+#define	USB_QUIRK_VP(v,p,l,h,...) \
+  { .vid = (v), .pid = (p), .lo_rev = (l), .hi_rev = (h), \
+    .quirks = { __VA_ARGS__ } }
+#define	USB_QUIRK(v,p,l,h,...) \
+  USB_QUIRK_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, l, h, __VA_ARGS__)
+
 static struct usb_quirk_entry usb_quirks[USB_DEV_QUIRKS_MAX] = {
-	{USB_QUIRK_ENTRY(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_LCM, 0x0000, 0xFFFF, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_INSIDEOUT, USB_PRODUCT_INSIDEOUT_EDGEPORT4, 0x094, 0x094, UQ_SWAP_UNICODE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502, 0x0a2, 0x0a2, UQ_BAD_ADC, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502, 0x0a2, 0x0a2, UQ_AU_NO_XU, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ADA70, 0x103, 0x103, UQ_BAD_ADC, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_ALTEC, USB_PRODUCT_ALTEC_ASC495, 0x000, 0x000, UQ_BAD_AUDIO, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_QTRONIX, USB_PRODUCT_QTRONIX_980N, 0x110, 0x110, UQ_SPUR_BUT_UP, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_ALCOR2, USB_PRODUCT_ALCOR2_KBD_HUB, 0x001, 0x001, UQ_SPUR_BUT_UP, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_MCT, USB_PRODUCT_MCT_HUB0100, 0x102, 0x102, UQ_BUS_POWERED, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_MCT, USB_PRODUCT_MCT_USB232, 0x102, 0x102, UQ_BUS_POWERED, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_TI, USB_PRODUCT_TI_UTUSB41, 0x110, 0x110, UQ_POWER_CLAIM, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_TELEX, USB_PRODUCT_TELEX_MIC1, 0x009, 0x009, UQ_AU_NO_FRAC, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_SILICONPORTALS, USB_PRODUCT_SILICONPORTALS_YAPPHONE, 0x100, 0x100, UQ_AU_INP_ASYNC, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_LOGITECH, USB_PRODUCT_LOGITECH_UN53B, 0x0000, 0xFFFF, UQ_NO_STRINGS, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_ELSA, USB_PRODUCT_ELSA_MODEM1, 0x0000, 0xFFFF, UQ_CFG_INDEX_1, UQ_NONE)},
+	USB_QUIRK(ASUS, LCM, 0x0000, 0xffff, UQ_HID_IGNORE),
+	USB_QUIRK(INSIDEOUT, EDGEPORT4, 0x094, 0x094, UQ_SWAP_UNICODE),
+	USB_QUIRK(DALLAS, J6502, 0x0a2, 0x0a2, UQ_BAD_ADC),
+	USB_QUIRK(DALLAS, J6502, 0x0a2, 0x0a2, UQ_AU_NO_XU),
+	USB_QUIRK(ALTEC, ADA70, 0x103, 0x103, UQ_BAD_ADC),
+	USB_QUIRK(ALTEC, ASC495, 0x000, 0x000, UQ_BAD_AUDIO),
+	USB_QUIRK(QTRONIX, 980N, 0x110, 0x110, UQ_SPUR_BUT_UP),
+	USB_QUIRK(ALCOR2, KBD_HUB, 0x001, 0x001, UQ_SPUR_BUT_UP),
+	USB_QUIRK(MCT, HUB0100, 0x102, 0x102, UQ_BUS_POWERED),
+	USB_QUIRK(MCT, USB232, 0x102, 0x102, UQ_BUS_POWERED),
+	USB_QUIRK(TI, UTUSB41, 0x110, 0x110, UQ_POWER_CLAIM),
+	USB_QUIRK(TELEX, MIC1, 0x009, 0x009, UQ_AU_NO_FRAC),
+	USB_QUIRK(SILICONPORTALS, YAPPHONE, 0x100, 0x100, UQ_AU_INP_ASYNC),
+	USB_QUIRK(LOGITECH, UN53B, 0x0000, 0xffff, UQ_NO_STRINGS),
+	USB_QUIRK(ELSA, MODEM1, 0x0000, 0xffff, UQ_CFG_INDEX_1),
 
 	/*
 	 * XXX The following quirks should have a more specific revision
 	 * number:
 	 */
-	{USB_QUIRK_ENTRY(USB_VENDOR_HP, USB_PRODUCT_HP_895C, 0x0000, 0xFFFF, UQ_BROKEN_BIDIR, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_HP, USB_PRODUCT_HP_880C, 0x0000, 0xFFFF, UQ_BROKEN_BIDIR, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_HP, USB_PRODUCT_HP_815C, 0x0000, 0xFFFF, UQ_BROKEN_BIDIR, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_HP, USB_PRODUCT_HP_810C, 0x0000, 0xFFFF, UQ_BROKEN_BIDIR, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_HP, USB_PRODUCT_HP_830C, 0x0000, 0xFFFF, UQ_BROKEN_BIDIR, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_HP, USB_PRODUCT_HP_1220C, 0x0000, 0xFFFF, UQ_BROKEN_BIDIR, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_XEROX, USB_PRODUCT_XEROX_WCM15, 0x0000, 0xFFFF, UQ_BROKEN_BIDIR, UQ_NONE)},
+	USB_QUIRK(HP, 895C, 0x0000, 0xffff, UQ_BROKEN_BIDIR),
+	USB_QUIRK(HP, 880C, 0x0000, 0xffff, UQ_BROKEN_BIDIR),
+	USB_QUIRK(HP, 815C, 0x0000, 0xffff, UQ_BROKEN_BIDIR),
+	USB_QUIRK(HP, 810C, 0x0000, 0xffff, UQ_BROKEN_BIDIR),
+	USB_QUIRK(HP, 830C, 0x0000, 0xffff, UQ_BROKEN_BIDIR),
+	USB_QUIRK(HP, 1220C, 0x0000, 0xffff, UQ_BROKEN_BIDIR),
+	USB_QUIRK(XEROX, WCM15, 0x0000, 0xffff, UQ_BROKEN_BIDIR),
 	/* Devices which should be ignored by uhid */
-	{USB_QUIRK_ENTRY(USB_VENDOR_APC, USB_PRODUCT_APC_UPS, 0x0000, 0xFFFF, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F6C550AVR, 0x0000, 0xFFFF, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_CYBERPOWER, USB_PRODUCT_CYBERPOWER_1500CAVRLCD, 0x0000, 0xFFFF, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_DELORME, USB_PRODUCT_DELORME_EARTHMATE, 0x0000, 0xFFFF, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_ITUNERNET, USB_PRODUCT_ITUNERNET_USBLCD2X20, 0x0000, 0xFFFF, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_ITUNERNET, USB_PRODUCT_ITUNERNET_USBLCD4X20, 0x0000, 0xFFFF, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS1, 0x0000, 0xFFFF, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_MGE, USB_PRODUCT_MGE_UPS2, 0x0000, 0xFFFF, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE, 0x0000, 0xFFFF, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_APPLE, USB_PRODUCT_APPLE_IPHONE_3G, 0x0000, 0xFFFF, UQ_HID_IGNORE, UQ_NONE)},
+	USB_QUIRK(APC, UPS, 0x0000, 0xffff, UQ_HID_IGNORE),
+	USB_QUIRK(BELKIN, F6C550AVR, 0x0000, 0xffff, UQ_HID_IGNORE),
+	USB_QUIRK(CYBERPOWER, 1500CAVRLCD, 0x0000, 0xffff, UQ_HID_IGNORE),
+	USB_QUIRK(DELORME, EARTHMATE, 0x0000, 0xffff, UQ_HID_IGNORE),
+	USB_QUIRK(ITUNERNET, USBLCD2X20, 0x0000, 0xffff, UQ_HID_IGNORE),
+	USB_QUIRK(ITUNERNET, USBLCD4X20, 0x0000, 0xffff, UQ_HID_IGNORE),
+	USB_QUIRK(MGE, UPS1, 0x0000, 0xffff, UQ_HID_IGNORE),
+	USB_QUIRK(MGE, UPS2, 0x0000, 0xffff, UQ_HID_IGNORE),
+	USB_QUIRK(APPLE, IPHONE, 0x0000, 0xffff, UQ_HID_IGNORE),
+	USB_QUIRK(APPLE, IPHONE_3G, 0x0000, 0xffff, UQ_HID_IGNORE),
 	/* Devices which should be ignored by both ukbd and uhid */
-	{USB_QUIRK_ENTRY(USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_WISPY1A, 0x0000, 0xFFFF, UQ_KBD_IGNORE, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY1B, 0x0000, 0xFFFF, UQ_KBD_IGNORE, UQ_HID_IGNORE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_TENX, USB_PRODUCT_TENX_UAUDIO0, 0x0101, 0x0101, UQ_AUDIO_SWAP_LR, UQ_NONE)},
+	USB_QUIRK(CYPRESS, WISPY1A, 0x0000, 0xffff, UQ_KBD_IGNORE, UQ_HID_IGNORE),
+	USB_QUIRK(METAGEEK, WISPY1B, 0x0000, 0xffff, UQ_KBD_IGNORE, UQ_HID_IGNORE),
+	USB_QUIRK(TENX, UAUDIO0, 0x0101, 0x0101, UQ_AUDIO_SWAP_LR),
 	/* MS keyboards do weird things */
-	{USB_QUIRK_ENTRY(USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_WLINTELLIMOUSE, 0x0000, 0xFFFF, UQ_MS_LEADING_BYTE, UQ_NONE)},
-	{USB_QUIRK_ENTRY(USB_VENDOR_METAGEEK, USB_PRODUCT_METAGEEK_WISPY24X, 0x0000, 0xFFFF, UQ_KBD_IGNORE, UQ_HID_IGNORE, UQ_NONE)},
+	USB_QUIRK(MICROSOFT, WLINTELLIMOUSE, 0x0000, 0xffff, UQ_MS_LEADING_BYTE),
+	USB_QUIRK(METAGEEK, WISPY24X, 0x0000, 0xffff, UQ_KBD_IGNORE, UQ_HID_IGNORE),
+	/* umodem(4) device quirks */
+	USB_QUIRK(METRICOM, RICOCHET_GS, 0x100, 0x100, UQ_ASSUME_CM_OVER_DATA),
+	USB_QUIRK(SANYO, SCP4900, 0x000, 0x000, UQ_ASSUME_CM_OVER_DATA),
+	USB_QUIRK(MOTOROLA2, T720C, 0x001, 0x001, UQ_ASSUME_CM_OVER_DATA),
+	USB_QUIRK(EICON, DIVA852, 0x100, 0x100, UQ_ASSUME_CM_OVER_DATA),
+	USB_QUIRK(SIEMENS2, ES75, 0x000, 0x000, UQ_ASSUME_CM_OVER_DATA),
+	USB_QUIRK(QUALCOMM, CDMA_MSM, 0x0000, 0xffff, UQ_ASSUME_CM_OVER_DATA),
+	USB_QUIRK(QUALCOMM2, CDMA_MSM, 0x0000, 0xffff, UQ_ASSUME_CM_OVER_DATA),
+	USB_QUIRK(CURITEL, UM175, 0x0000, 0xffff, UQ_ASSUME_CM_OVER_DATA),
+
+	/* USB Mass Storage Class Quirks */
+	USB_QUIRK_VP(USB_VENDOR_ASAHIOPTICAL, 0, UQ_MSC_NO_RS_CLEAR_UA,
+	    UQ_MATCH_VENDOR_ONLY),
+	USB_QUIRK(ADDON, ATTACHE, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(ADDON, A256MB, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(ADDON, DISKPRO512, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(ADDONICS2, CABLE_205, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(AIPTEK, POCKETCAM3M, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(AIPTEK2, SUNPLUS_TECH, 0x0000, 0xffff, UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(ALCOR, SDCR_6335, 0x0000, 0xffff, UQ_MSC_NO_TEST_UNIT_READY,
+	    UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(ALCOR, AU6390, 0x0000, 0xffff, UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(ALCOR, UMCR_9361, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(ALCOR, TRANSCEND, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(ASAHIOPTICAL, OPTIO230, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(ASAHIOPTICAL, OPTIO330, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(BELKIN, USB2SCSI, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(CASIO, QV_DIGICAM, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(CCYU, ED1064, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(CENTURY, EX35QUAT, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_FORCE_SHORT_INQ,
+	    UQ_MSC_NO_START_STOP, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(CYPRESS, XX6830XX, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN,
+	    UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(DESKNOTE, UCR_61S2B, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(DMI, CFSM_RW, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI,
+	    UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(EPSON, STYLUS_875DC, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(EPSON, STYLUS_895, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(FEIYA, 5IN1, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(FREECOM, DVD, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(FUJIPHOTO, MASS0100, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI_I,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_NO_RS_CLEAR_UA),
+	USB_QUIRK(GENESYS, GL641USB2IDE, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_FORCE_SHORT_INQ,
+	    UQ_MSC_NO_START_STOP, UQ_MSC_IGNORE_RESIDUE, UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(GENESYS, GL641USB2IDE_2, 0x0000, 0xffff,
+	    UQ_MSC_FORCE_WIRE_BBB, UQ_MSC_FORCE_PROTO_ATAPI,
+	    UQ_MSC_FORCE_SHORT_INQ, UQ_MSC_NO_START_STOP,
+	    UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(GENESYS, GL641USB, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_FORCE_SHORT_INQ,
+	    UQ_MSC_NO_START_STOP, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(GENESYS, GL641USB_2, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_WRONG_CSWSIG),
+	USB_QUIRK(HAGIWARA, FG, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(HAGIWARA, FGSM, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(HITACHI, DVDCAM_DZ_MV100A, 0x0000, 0xffff,
+	    UQ_MSC_FORCE_WIRE_CBI, UQ_MSC_FORCE_PROTO_SCSI,
+	    UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(HITACHI, DVDCAM_USB, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI_I,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(HP, CDW4E, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_ATAPI),
+	USB_QUIRK(HP, CDW8200, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI_I,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_NO_TEST_UNIT_READY,
+	    UQ_MSC_NO_START_STOP),
+	USB_QUIRK(IMAGINATION, DBX1, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_WRONG_CSWSIG),
+	USB_QUIRK(INSYSTEM, USBCABLE, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_NO_TEST_UNIT_READY,
+	    UQ_MSC_NO_START_STOP, UQ_MSC_ALT_IFACE_1),
+	USB_QUIRK(INSYSTEM, ATAPI, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_RBC),
+	USB_QUIRK(INSYSTEM, STORAGE_V2, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_RBC),
+	USB_QUIRK(IODATA, IU_CD2, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(IODATA, DVR_UEH8, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(IOMEGA, ZIP100, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI,
+	    UQ_MSC_NO_TEST_UNIT_READY), /* XXX ZIP drives can also use ATAPI */
+	USB_QUIRK(KYOCERA, FINECAM_L3, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(KYOCERA, FINECAM_S3X, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(KYOCERA, FINECAM_S4, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(KYOCERA, FINECAM_S5, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(LACIE, HD, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_RBC),
+	USB_QUIRK(LEXAR, CF_READER, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(LEXAR, JUMPSHOT, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(LOGITEC, LDR_H443SU2, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(LOGITEC, LDR_H443U2, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI,),
+	USB_QUIRK(MELCO, DUBPXXG, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_FORCE_SHORT_INQ,
+	    UQ_MSC_NO_START_STOP, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(MICROTECH, DPCM, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_TEST_UNIT_READY,
+	    UQ_MSC_NO_START_STOP),
+	USB_QUIRK(MICROTECH, SCSIDB25, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(MICROTECH, SCSIHD50, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(MINOLTA, E223, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(MINOLTA, F300, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(MITSUMI, CDRRW, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI |
+	    UQ_MSC_FORCE_PROTO_ATAPI),
+	USB_QUIRK(MITSUMI, FDD, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(MOTOROLA2, E398, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_FORCE_SHORT_INQ,
+	    UQ_MSC_NO_INQUIRY_EVPD, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK_VP(USB_VENDOR_MPMAN, 0, UQ_MSC_NO_SYNC_CACHE,
+	    UQ_MATCH_VENDOR_ONLY),
+	USB_QUIRK(MSYSTEMS, DISKONKEY, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_IGNORE_RESIDUE, UQ_MSC_NO_GETMAXLUN,
+	    UQ_MSC_NO_RS_CLEAR_UA),
+	USB_QUIRK(MSYSTEMS, DISKONKEY2, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_ATAPI),
+	USB_QUIRK(MYSON, HEDEN, 0x0000, 0xffff, UQ_MSC_IGNORE_RESIDUE,
+	    UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(MYSON, HEDEN_8813, 0x0000, 0xffff, UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(MYSON, STARREADER, 0x0000, 0xffff, UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(NEODIO, ND3260, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_FORCE_SHORT_INQ),
+	USB_QUIRK(NETAC, CF_CARD, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(NETAC, ONLYDISK, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(NETCHIP, CLIK_40, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_ATAPI,
+	    UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(NIKON, D300, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(OLYMPUS, C1, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_WRONG_CSWSIG),
+	USB_QUIRK(OLYMPUS, C700, 0x0000, 0xffff, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(ONSPEC, SDS_HOTFIND_D, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_GETMAXLUN, UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(ONSPEC, CFMS_RW, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(ONSPEC, CFSM_COMBO, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(ONSPEC, CFSM_READER, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(ONSPEC, CFSM_READER2, 0x0000, 0xffff,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(ONSPEC, MDCFE_B_CF_READER, 0x0000, 0xffff,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(ONSPEC, MDSM_B_READER, 0x0000, 0xffff,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(ONSPEC, READER, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(ONSPEC, UCF100, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_NO_INQUIRY | UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(ONSPEC2, IMAGEMATE_SDDR55, 0x0000, 0xffff,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(PANASONIC, KXL840AN, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(PANASONIC, KXLCB20AN, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(PANASONIC, KXLCB35AN, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(PANASONIC, LS120CAM, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_UFI),
+	USB_QUIRK(PHILIPS, SPE3030CC, 0x0000, 0xffff, UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(PLEXTOR, 40_12_40U, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_TEST_UNIT_READY),
+	USB_QUIRK(PNY, ATTACHE2, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_IGNORE_RESIDUE,
+	    UQ_MSC_NO_START_STOP),
+	USB_QUIRK_VP(USB_VENDOR_SAMSUNG_TECHWIN,
+	    USB_PRODUCT_SAMSUNG_TECHWIN_DIGIMAX_410, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(SANDISK, SDDR05A, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_READ_CAP_OFFBY1,
+	    UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(SANDISK, SDDR09, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI,
+	    UQ_MSC_READ_CAP_OFFBY1, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(SANDISK, SDDR12, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_READ_CAP_OFFBY1,
+	    UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(SANDISK, SDCZ2_256, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(SANDISK, SDCZ4_128, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(SANDISK, SDCZ4_256, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(SANDISK, SDDR31, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_READ_CAP_OFFBY1),
+	USB_QUIRK(SCANLOGIC, SL11R, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(SHUTTLE, EUSB, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI_I,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_NO_TEST_UNIT_READY,
+	    UQ_MSC_NO_START_STOP, UQ_MSC_SHUTTLE_INIT),
+	USB_QUIRK(SHUTTLE, CDRW, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_ATAPI),
+	USB_QUIRK(SHUTTLE, CF, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_ATAPI),
+	USB_QUIRK(SHUTTLE, EUSBATAPI, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_ATAPI),
+	USB_QUIRK(SHUTTLE, EUSBCFSM, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(SHUTTLE, EUSCSI, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(SHUTTLE, HIFD, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(SHUTTLE, SDDR09, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI,
+	    UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(SHUTTLE, ZIOMMC, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(SIGMATEL, I_BEAD100, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_SHUTTLE_INIT),
+	USB_QUIRK(SIIG, WINTERREADER, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(SKANHEX, MD_7425, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(SKANHEX, SX_520Z, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(SONY, HANDYCAM, 0x0500, 0x0500, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_RBC, UQ_MSC_RBC_PAD_TO_12),
+	USB_QUIRK(SONY, CLIE_40_MS, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(SONY, DSC, 0x0500, 0x0500, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_RBC, UQ_MSC_RBC_PAD_TO_12),
+	USB_QUIRK(SONY, DSC, 0x0600, 0x0600, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_RBC, UQ_MSC_RBC_PAD_TO_12),
+	USB_QUIRK(SONY, DSC, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_RBC),
+	USB_QUIRK(SONY, HANDYCAM, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_RBC),
+	USB_QUIRK(SONY, MSC, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_RBC),
+	USB_QUIRK(SONY, MS_MSC_U03, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_UFI, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(SONY, MS_NW_MS7, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(SONY, MS_PEG_N760C, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(SONY, MSACUS1, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(SONY, PORTABLE_HDD_V2, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(SUPERTOP, IDE, 0x0000, 0xffff, UQ_MSC_IGNORE_RESIDUE,
+	    UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(TAUGA, CAMERAMATE, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(TEAC, FD05PUB, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_UFI),
+	USB_QUIRK(TECLAST, TLC300, 0x0000, 0xffff, UQ_MSC_NO_TEST_UNIT_READY,
+	    UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(TREK, MEMKEY, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(TREK, THUMBDRIVE_8MB, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(TRUMPION, C3310, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_UFI),
+	USB_QUIRK(TRUMPION, MP3, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_RBC),
+	USB_QUIRK(TRUMPION, T33520, 0x0000, 0xffff, UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(TWINMOS, MDIV, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI),
+	USB_QUIRK(VIA, USB2IDEBRIDGE, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(VIVITAR, 35XX, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(WESTERN, COMBO, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_FORCE_SHORT_INQ,
+	    UQ_MSC_NO_START_STOP, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(WESTERN, EXTHDD, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_FORCE_SHORT_INQ,
+	    UQ_MSC_NO_START_STOP, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(WESTERN, MYBOOK, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY_EVPD),
+	USB_QUIRK(WESTERN, MYPASSWORD, 0x0000, 0xffff, UQ_MSC_FORCE_SHORT_INQ),
+	USB_QUIRK(WINMAXGROUP, FLASH64MC, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY),
+	USB_QUIRK(YANO, FW800HD, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_FORCE_SHORT_INQ,
+	    UQ_MSC_NO_START_STOP, UQ_MSC_IGNORE_RESIDUE),
+	USB_QUIRK(YANO, U640MO, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI_I,
+	    UQ_MSC_FORCE_PROTO_ATAPI, UQ_MSC_FORCE_SHORT_INQ),
+	USB_QUIRK(YEDATA, FLASHBUSTERU, 0x0000, 0x007F, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_UFI, UQ_MSC_NO_RS_CLEAR_UA, UQ_MSC_FLOPPY_SPEED,
+	    UQ_MSC_NO_TEST_UNIT_READY, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(YEDATA, FLASHBUSTERU, 0x0080, 0x0080, UQ_MSC_FORCE_WIRE_CBI_I,
+	    UQ_MSC_FORCE_PROTO_UFI, UQ_MSC_NO_RS_CLEAR_UA, UQ_MSC_FLOPPY_SPEED,
+	    UQ_MSC_NO_TEST_UNIT_READY, UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(YEDATA, FLASHBUSTERU, 0x0081, 0xFFFF, UQ_MSC_FORCE_WIRE_CBI_I,
+	    UQ_MSC_FORCE_PROTO_UFI, UQ_MSC_NO_RS_CLEAR_UA, UQ_MSC_FLOPPY_SPEED,
+	    UQ_MSC_NO_GETMAXLUN),
+	USB_QUIRK(ZORAN, EX20DSC, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_CBI,
+	    UQ_MSC_FORCE_PROTO_ATAPI),
+	USB_QUIRK(MEIZU, M6_SL, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_INQUIRY, UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(ACTIONS, MP4, 0x0000, 0xffff, UQ_MSC_FORCE_WIRE_BBB,
+	    UQ_MSC_FORCE_PROTO_SCSI, UQ_MSC_NO_SYNC_CACHE),
+	USB_QUIRK(ASUS, GMSC, 0x0000, 0xffff, UQ_MSC_NO_SYNC_CACHE),
 };
+#undef USB_QUIRK_VP
+#undef USB_QUIRK
 
 static const char *usb_quirk_str[USB_QUIRK_MAX] = {
 	[UQ_NONE]		= "UQ_NONE",
+	[UQ_MATCH_VENDOR_ONLY]	= "UQ_MATCH_VENDOR_ONLY",
 	[UQ_AUDIO_SWAP_LR]	= "UQ_AUDIO_SWAP_LR",
 	[UQ_AU_INP_ASYNC]	= "UQ_AU_INP_ASYNC",
 	[UQ_AU_NO_FRAC]		= "UQ_AU_NO_FRAC",
@@ -152,6 +468,29 @@ static const char *usb_quirk_str[USB_QUIRK_MAX] = {
 	[UQ_CFG_INDEX_3]	= "UQ_CFG_INDEX_3",
 	[UQ_CFG_INDEX_4]	= "UQ_CFG_INDEX_4",
 	[UQ_CFG_INDEX_0]	= "UQ_CFG_INDEX_0",
+	[UQ_ASSUME_CM_OVER_DATA]	= "UQ_ASSUME_CM_OVER_DATA",
+	[UQ_MSC_NO_TEST_UNIT_READY]	= "UQ_MSC_NO_TEST_UNIT_READY",
+	[UQ_MSC_NO_RS_CLEAR_UA]		= "UQ_MSC_NO_RS_CLEAR_UA",
+	[UQ_MSC_NO_START_STOP]		= "UQ_MSC_NO_START_STOP",
+	[UQ_MSC_NO_GETMAXLUN]		= "UQ_MSC_NO_GETMAXLUN",
+	[UQ_MSC_NO_INQUIRY]		= "UQ_MSC_NO_INQUIRY",
+	[UQ_MSC_NO_INQUIRY_EVPD]	= "UQ_MSC_NO_INQUIRY_EVPD",
+	[UQ_MSC_NO_SYNC_CACHE]		= "UQ_MSC_NO_SYNC_CACHE",
+	[UQ_MSC_SHUTTLE_INIT]		= "UQ_MSC_SHUTTLE_INIT",
+	[UQ_MSC_ALT_IFACE_1]		= "UQ_MSC_ALT_IFACE_1",
+	[UQ_MSC_FLOPPY_SPEED]		= "UQ_MSC_FLOPPY_SPEED",
+	[UQ_MSC_IGNORE_RESIDUE]		= "UQ_MSC_IGNORE_RESIDUE",
+	[UQ_MSC_WRONG_CSWSIG]		= "UQ_MSC_WRONG_CSWSIG",
+	[UQ_MSC_RBC_PAD_TO_12]		= "UQ_MSC_RBC_PAD_TO_12",
+	[UQ_MSC_READ_CAP_OFFBY1]	= "UQ_MSC_READ_CAP_OFFBY1",
+	[UQ_MSC_FORCE_SHORT_INQ]	= "UQ_MSC_FORCE_SHORT_INQ",
+	[UQ_MSC_FORCE_WIRE_BBB]		= "UQ_MSC_FORCE_WIRE_BBB",
+	[UQ_MSC_FORCE_WIRE_CBI]		= "UQ_MSC_FORCE_WIRE_CBI",
+	[UQ_MSC_FORCE_WIRE_CBI_I]	= "UQ_MSC_FORCE_WIRE_CBI_I",
+	[UQ_MSC_FORCE_PROTO_SCSI]	= "UQ_MSC_FORCE_PROTO_SCSI",
+	[UQ_MSC_FORCE_PROTO_ATAPI]	= "UQ_MSC_FORCE_PROTO_ATAPI",
+	[UQ_MSC_FORCE_PROTO_UFI]	= "UQ_MSC_FORCE_PROTO_UFI",
+	[UQ_MSC_FORCE_PROTO_RBC]	= "UQ_MSC_FORCE_PROTO_RBC",
 };
 
 /*------------------------------------------------------------------------*
@@ -187,11 +526,22 @@ usb_test_quirk_by_info(const struct usbd_lookup_info *info, uint16_t quirk)
 	for (x = 0; x != USB_DEV_QUIRKS_MAX; x++) {
 		/* see if quirk information does not match */
 		if ((usb_quirks[x].vid != info->idVendor) ||
-		    (usb_quirks[x].pid != info->idProduct) ||
 		    (usb_quirks[x].lo_rev > info->bcdDevice) ||
 		    (usb_quirks[x].hi_rev < info->bcdDevice)) {
 			continue;
 		}
+		/* see if quirk only should match vendor ID */
+		if (usb_quirks[x].pid != info->idProduct) {
+			if (usb_quirks[x].pid != 0)
+				continue;
+
+			for (y = 0; y != USB_SUB_QUIRKS_MAX; y++) {
+				if (usb_quirks[x].quirks[y] == UQ_MATCH_VENDOR_ONLY)
+					break;
+			}
+			if (y == USB_SUB_QUIRKS_MAX)
+				continue;
+		}
 		/* lookup quirk */
 		for (y = 0; y != USB_SUB_QUIRKS_MAX; y++) {
 			if (usb_quirks[x].quirks[y] == quirk) {
diff --git a/sys/dev/usb/quirk/usb_quirk.h b/sys/dev/usb/quirk/usb_quirk.h
index f4fb9b9fdc9..3187bcacc2c 100644
--- a/sys/dev/usb/quirk/usb_quirk.h
+++ b/sys/dev/usb/quirk/usb_quirk.h
@@ -30,6 +30,11 @@
 /* NOTE: UQ_NONE is not a valid quirk */
 enum {	/* keep in sync with usb_quirk_str table */
 	UQ_NONE,
+
+	UQ_MATCH_VENDOR_ONLY,
+
+	/* Various quirks */
+
 	UQ_AUDIO_SWAP_LR,	/* left and right sound channels are swapped */
 	UQ_AU_INP_ASYNC,	/* input is async despite claim of adaptive */
 	UQ_AU_NO_FRAC,		/* don't adjust for fractional samples */
@@ -53,6 +58,32 @@ enum {	/* keep in sync with usb_quirk_str table */
 	UQ_CFG_INDEX_3,		/* select configuration index 3 by default */
 	UQ_CFG_INDEX_4,		/* select configuration index 4 by default */
 	UQ_CFG_INDEX_0,		/* select configuration index 0 by default */
+	UQ_ASSUME_CM_OVER_DATA,	/* modem device breaks on cm over data */
+
+	/* USB Mass Storage Quirks. See "storage/umass.c" for a detailed description. */
+	UQ_MSC_NO_TEST_UNIT_READY,
+	UQ_MSC_NO_RS_CLEAR_UA,
+	UQ_MSC_NO_START_STOP,
+	UQ_MSC_NO_GETMAXLUN,
+	UQ_MSC_NO_INQUIRY,
+	UQ_MSC_NO_INQUIRY_EVPD,
+	UQ_MSC_NO_SYNC_CACHE,
+	UQ_MSC_SHUTTLE_INIT,
+	UQ_MSC_ALT_IFACE_1,
+	UQ_MSC_FLOPPY_SPEED,
+	UQ_MSC_IGNORE_RESIDUE,
+	UQ_MSC_WRONG_CSWSIG,
+	UQ_MSC_RBC_PAD_TO_12,
+	UQ_MSC_READ_CAP_OFFBY1,
+	UQ_MSC_FORCE_SHORT_INQ,
+	UQ_MSC_FORCE_WIRE_BBB,
+	UQ_MSC_FORCE_WIRE_CBI,
+	UQ_MSC_FORCE_WIRE_CBI_I,
+	UQ_MSC_FORCE_PROTO_SCSI,
+	UQ_MSC_FORCE_PROTO_ATAPI,
+	UQ_MSC_FORCE_PROTO_UFI,
+	UQ_MSC_FORCE_PROTO_RBC,
+
 	USB_QUIRK_MAX
 };
 
diff --git a/sys/dev/usb/serial/u3g.c b/sys/dev/usb/serial/u3g.c
index 92eaf1336bd..5b61948279a 100644
--- a/sys/dev/usb/serial/u3g.c
+++ b/sys/dev/usb/serial/u3g.c
@@ -122,8 +122,13 @@ static void u3g_stop_read(struct ucom_softc *ucom);
 static void u3g_start_write(struct ucom_softc *ucom);
 static void u3g_stop_write(struct ucom_softc *ucom);
 
+
+static void u3g_test_autoinst(void *, struct usb_device *,
+		struct usb_attach_arg *);
 static int u3g_driver_loaded(struct module *mod, int what, void *arg);
 
+static eventhandler_tag u3g_etag;
+
 static const struct usb_config u3g_config[U3G_N_TRANSFER] = {
 
 	[U3G_BULK_WR] = {
@@ -173,31 +178,123 @@ MODULE_DEPEND(u3g, usb, 1, 1, 1);
 
 static const struct usb_device_id u3g_devs[] = {
 #define	U3G_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
-	/* OEM: Option */
-	U3G_DEV(OPTION, GT3G, 0),
-	U3G_DEV(OPTION, GT3GQUAD, 0),
-	U3G_DEV(OPTION, GT3GPLUS, 0),
-	U3G_DEV(OPTION, GTMAX36, 0),
-	U3G_DEV(OPTION, GTHSDPA, 0),
-	U3G_DEV(OPTION, GTMAXHSUPA, 0),
-	U3G_DEV(OPTION, GTMAXHSUPAE, 0),
-	U3G_DEV(OPTION, GTMAX380HSUPAE, 0),
-	U3G_DEV(OPTION, VODAFONEMC3G, 0),
-	/* OEM: Qualcomm, Inc. */
-	U3G_DEV(QUALCOMMINC, ZTE_STOR, U3GFL_SCSI_EJECT),
-	U3G_DEV(QUALCOMMINC, CDMA_MSM, U3GFL_SCSI_EJECT),
-	/* OEM: Huawei */
-	U3G_DEV(HUAWEI, MOBILE, U3GFL_HUAWEI_INIT),
+	U3G_DEV(ACERP, H10, 0),
+	U3G_DEV(AIRPLUS, MCD650, 0),
+	U3G_DEV(AIRPRIME, PC5220, 0),
+	U3G_DEV(ALINK, 3G, 0),
+	U3G_DEV(ALINK, 3GU, 0),
+	U3G_DEV(ALINK, DWM652U5, 0),
+	U3G_DEV(AMOI, H01, 0),
+	U3G_DEV(AMOI, H01A, 0),
+	U3G_DEV(AMOI, H02, 0),
+	U3G_DEV(ANYDATA, ADU_500A, 0),
+	U3G_DEV(ANYDATA, ADU_620UW, 0),
+	U3G_DEV(ANYDATA, ADU_E100X, 0),
+	U3G_DEV(AXESSTEL, DATAMODEM, 0),
+	U3G_DEV(CMOTECH, CDMA_MODEM1, 0),
+	U3G_DEV(DELL, U5500, 0),
+	U3G_DEV(DELL, U5505, 0),
+	U3G_DEV(DELL, U5510, 0),
+	U3G_DEV(DELL, U5520, 0),
+	U3G_DEV(DELL, U5520_2, 0),
+	U3G_DEV(DELL, U5520_3, 0),
+	U3G_DEV(DELL, U5700, 0),
+	U3G_DEV(DELL, U5700_2, 0),
+	U3G_DEV(DELL, U5700_3, 0),
+	U3G_DEV(DELL, U5700_4, 0),
+	U3G_DEV(DELL, U5720, 0),
+	U3G_DEV(DELL, U5720_2, 0),
+	U3G_DEV(DELL, U5730, 0),
+	U3G_DEV(DELL, U5730_2, 0),
+	U3G_DEV(DELL, U5730_3, 0),
+	U3G_DEV(DELL, U740, 0),
+	U3G_DEV(DLINK3, DWM652, 0),
+	U3G_DEV(HP, EV2200, 0),
+	U3G_DEV(HP, HS2300, 0),
+	U3G_DEV(HUAWEI, E1401, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1402, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1403, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1404, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1405, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1406, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1407, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1408, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1409, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E140A, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E140B, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E140D, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E140E, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E140F, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1410, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1411, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1412, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1413, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1414, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1415, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1416, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1417, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1418, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1419, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E141A, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E141B, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E141C, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E141D, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E141E, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E141F, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1420, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1421, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1422, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1423, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1424, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1425, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1426, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1427, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1428, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1429, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E142A, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E142B, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E142C, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E142D, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E142E, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E142F, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1430, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1431, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1432, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1433, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1434, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1435, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1436, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1437, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1438, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E1439, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E143A, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E143B, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E143C, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E143D, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E143E, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E143F, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, E14AC, U3GFL_HUAWEI_INIT),
 	U3G_DEV(HUAWEI, E180V, U3GFL_HUAWEI_INIT),
 	U3G_DEV(HUAWEI, E220, U3GFL_HUAWEI_INIT),
-	/* OEM: Novatel */
-	U3G_DEV(NOVATEL, CDMA_MODEM, 0),
+	U3G_DEV(HUAWEI, E220BIS, U3GFL_HUAWEI_INIT),
+	U3G_DEV(HUAWEI, MOBILE, U3GFL_HUAWEI_INIT),
+	U3G_DEV(KYOCERA2, CDMA_MSM_K, 0),
+	U3G_DEV(KYOCERA2, KPC680, 0),
+	U3G_DEV(MERLIN, V620, 0),
+	U3G_DEV(NOVATEL, E725, 0),
 	U3G_DEV(NOVATEL, ES620, 0),
+	U3G_DEV(NOVATEL, ES620_2, 0),
+	U3G_DEV(NOVATEL, EU730, 0),
+	U3G_DEV(NOVATEL, EU740, 0),
+	U3G_DEV(NOVATEL, EU870D, 0),
+	U3G_DEV(NOVATEL, MC760, 0),
 	U3G_DEV(NOVATEL, MC950D, 0),
 	U3G_DEV(NOVATEL, U720, 0),
 	U3G_DEV(NOVATEL, U727, 0),
+	U3G_DEV(NOVATEL, U727_2, 0),
 	U3G_DEV(NOVATEL, U740, 0),
 	U3G_DEV(NOVATEL, U740_2, 0),
+	U3G_DEV(NOVATEL, U760, U3GFL_SCSI_EJECT),
 	U3G_DEV(NOVATEL, U870, 0),
 	U3G_DEV(NOVATEL, V620, 0),
 	U3G_DEV(NOVATEL, V640, 0),
@@ -205,43 +302,199 @@ static const struct usb_device_id u3g_devs[] = {
 	U3G_DEV(NOVATEL, V740, 0),
 	U3G_DEV(NOVATEL, X950D, 0),
 	U3G_DEV(NOVATEL, XU870, 0),
-	U3G_DEV(NOVATEL, ZEROCD, U3GFL_SCSI_EJECT),
-	U3G_DEV(NOVATEL, U760, U3GFL_SCSI_EJECT),
-	U3G_DEV(DELL, U740, 0),
-	/* OEM: Merlin */
-	U3G_DEV(MERLIN, V620, 0),
-	/* OEM: Sierra Wireless: */
-	U3G_DEV(SIERRA, AIRCARD580, 0),
-	U3G_DEV(SIERRA, AIRCARD595, 0),
+	U3G_DEV(OPTION, E6500, 0),
+	U3G_DEV(OPTION, E6501, 0),
+	U3G_DEV(OPTION, E6601, 0),
+	U3G_DEV(OPTION, E6721, 0),
+	U3G_DEV(OPTION, E6741, 0),
+	U3G_DEV(OPTION, E6761, 0),
+	U3G_DEV(OPTION, E6800, 0),
+	U3G_DEV(OPTION, E7021, 0),
+	U3G_DEV(OPTION, E7041, 0),
+	U3G_DEV(OPTION, E7061, 0),
+	U3G_DEV(OPTION, E7100, 0),
+	U3G_DEV(OPTION, GT3G, 0),
+	U3G_DEV(OPTION, GT3GPLUS, 0),
+	U3G_DEV(OPTION, GT3GQUAD, 0),
+	U3G_DEV(OPTION, GT3G_1, 0),
+	U3G_DEV(OPTION, GT3G_2, 0),
+	U3G_DEV(OPTION, GT3G_3, 0),
+	U3G_DEV(OPTION, GT3G_4, 0),
+	U3G_DEV(OPTION, GT3G_5, 0),
+	U3G_DEV(OPTION, GT3G_6, 0),
+	U3G_DEV(OPTION, GTHSDPA, 0),
+	U3G_DEV(OPTION, GTM380, 0),
+	U3G_DEV(OPTION, GTMAX36, 0),
+	U3G_DEV(OPTION, GTMAX380HSUPAE, 0),
+	U3G_DEV(OPTION, GTMAXHSUPA, 0),
+	U3G_DEV(OPTION, GTMAXHSUPAE, 0),
+	U3G_DEV(OPTION, VODAFONEMC3G, 0),
+	U3G_DEV(QISDA, H20_1, 0),
+	U3G_DEV(QISDA, H20_2, 0),
+	U3G_DEV(QISDA, H21_1, 0),
+	U3G_DEV(QISDA, H21_2, 0),
+	U3G_DEV(QUALCOMM2, AC8700, 0),
+	U3G_DEV(QUALCOMM2, MF330, 0),
+	U3G_DEV(QUALCOMMINC, AC2726, 0),
+	U3G_DEV(QUALCOMMINC, AC8700, 0),
+	U3G_DEV(QUALCOMMINC, AC8710, 0),
+	U3G_DEV(QUALCOMMINC, CDMA_MSM, U3GFL_SCSI_EJECT),
+	U3G_DEV(QUALCOMMINC, E0002, 0),
+	U3G_DEV(QUALCOMMINC, E0003, 0),
+	U3G_DEV(QUALCOMMINC, E0004, 0),
+	U3G_DEV(QUALCOMMINC, E0005, 0),
+	U3G_DEV(QUALCOMMINC, E0006, 0),
+	U3G_DEV(QUALCOMMINC, E0007, 0),
+	U3G_DEV(QUALCOMMINC, E0008, 0),
+	U3G_DEV(QUALCOMMINC, E0009, 0),
+	U3G_DEV(QUALCOMMINC, E000A, 0),
+	U3G_DEV(QUALCOMMINC, E000B, 0),
+	U3G_DEV(QUALCOMMINC, E000C, 0),
+	U3G_DEV(QUALCOMMINC, E000D, 0),
+	U3G_DEV(QUALCOMMINC, E000E, 0),
+	U3G_DEV(QUALCOMMINC, E000F, 0),
+	U3G_DEV(QUALCOMMINC, E0010, 0),
+	U3G_DEV(QUALCOMMINC, E0011, 0),
+	U3G_DEV(QUALCOMMINC, E0012, 0),
+	U3G_DEV(QUALCOMMINC, E0013, 0),
+	U3G_DEV(QUALCOMMINC, E0014, 0),
+	U3G_DEV(QUALCOMMINC, E0016, 0),
+	U3G_DEV(QUALCOMMINC, E0017, 0),
+	U3G_DEV(QUALCOMMINC, E0018, 0),
+	U3G_DEV(QUALCOMMINC, E0019, 0),
+	U3G_DEV(QUALCOMMINC, E0020, 0),
+	U3G_DEV(QUALCOMMINC, E0021, 0),
+	U3G_DEV(QUALCOMMINC, E0022, 0),
+	U3G_DEV(QUALCOMMINC, E0023, 0),
+	U3G_DEV(QUALCOMMINC, E0024, 0),
+	U3G_DEV(QUALCOMMINC, E0025, 0),
+	U3G_DEV(QUALCOMMINC, E0026, 0),
+	U3G_DEV(QUALCOMMINC, E0027, 0),
+	U3G_DEV(QUALCOMMINC, E0028, 0),
+	U3G_DEV(QUALCOMMINC, E0029, 0),
+	U3G_DEV(QUALCOMMINC, E0030, 0),
+	U3G_DEV(QUALCOMMINC, E0032, 0),
+	U3G_DEV(QUALCOMMINC, E0033, 0),
+	U3G_DEV(QUALCOMMINC, E0037, 0),
+	U3G_DEV(QUALCOMMINC, E0039, 0),
+	U3G_DEV(QUALCOMMINC, E0042, 0),
+	U3G_DEV(QUALCOMMINC, E0043, 0),
+	U3G_DEV(QUALCOMMINC, E0048, 0),
+	U3G_DEV(QUALCOMMINC, E0049, 0),
+	U3G_DEV(QUALCOMMINC, E0051, 0),
+	U3G_DEV(QUALCOMMINC, E0052, 0),
+	U3G_DEV(QUALCOMMINC, E0054, 0),
+	U3G_DEV(QUALCOMMINC, E0055, 0),
+	U3G_DEV(QUALCOMMINC, E0057, 0),
+	U3G_DEV(QUALCOMMINC, E0058, 0),
+	U3G_DEV(QUALCOMMINC, E0059, 0),
+	U3G_DEV(QUALCOMMINC, E0060, 0),
+	U3G_DEV(QUALCOMMINC, E0061, 0),
+	U3G_DEV(QUALCOMMINC, E0062, 0),
+	U3G_DEV(QUALCOMMINC, E0063, 0),
+	U3G_DEV(QUALCOMMINC, E0064, 0),
+	U3G_DEV(QUALCOMMINC, E0066, 0),
+	U3G_DEV(QUALCOMMINC, E0069, 0),
+	U3G_DEV(QUALCOMMINC, E0070, 0),
+	U3G_DEV(QUALCOMMINC, E0073, 0),
+	U3G_DEV(QUALCOMMINC, E0076, 0),
+	U3G_DEV(QUALCOMMINC, E0078, 0),
+	U3G_DEV(QUALCOMMINC, E0082, 0),
+	U3G_DEV(QUALCOMMINC, E0086, 0),
+	U3G_DEV(QUALCOMMINC, E2002, 0),
+	U3G_DEV(QUALCOMMINC, E2003, 0),
+	U3G_DEV(QUALCOMMINC, MF626, 0),
+	U3G_DEV(QUALCOMMINC, MF628, 0),
+	U3G_DEV(QUALCOMMINC, ZTE_STOR, U3GFL_SCSI_EJECT),
+	U3G_DEV(QUANTA, GKE, 0),
+	U3G_DEV(QUANTA, GLE, 0),
+	U3G_DEV(QUANTA, GLX, 0),
+	U3G_DEV(QUANTA, Q101, 0),
+	U3G_DEV(QUANTA, Q111, 0),
+	U3G_DEV(SIERRA, AC402, 0),
 	U3G_DEV(SIERRA, AC595U, 0),
 	U3G_DEV(SIERRA, AC597E, 0),
-	U3G_DEV(SIERRA, C597, 0),
+	U3G_DEV(SIERRA, AC875E, 0),
+	U3G_DEV(SIERRA, AC875U, 0),
+	U3G_DEV(SIERRA, AC875U_2, 0),
 	U3G_DEV(SIERRA, AC880, 0),
 	U3G_DEV(SIERRA, AC880E, 0),
 	U3G_DEV(SIERRA, AC880U, 0),
 	U3G_DEV(SIERRA, AC881, 0),
 	U3G_DEV(SIERRA, AC881E, 0),
 	U3G_DEV(SIERRA, AC881U, 0),
+	U3G_DEV(SIERRA, AC885E, 0),
+	U3G_DEV(SIERRA, AC885E_2, 0),
 	U3G_DEV(SIERRA, AC885U, 0),
+	U3G_DEV(SIERRA, AIRCARD580, 0),
+	U3G_DEV(SIERRA, AIRCARD595, 0),
+	U3G_DEV(SIERRA, AIRCARD875, 0),
+	U3G_DEV(SIERRA, C22, 0),
+	U3G_DEV(SIERRA, C597, 0),
+	U3G_DEV(SIERRA, C888, 0),
+	U3G_DEV(SIERRA, E0029, 0),
+	U3G_DEV(SIERRA, E6892, 0),
+	U3G_DEV(SIERRA, E6893, 0),
 	U3G_DEV(SIERRA, EM5625, 0),
+	U3G_DEV(SIERRA, EM5725, 0),
 	U3G_DEV(SIERRA, MC5720, 0),
 	U3G_DEV(SIERRA, MC5720_2, 0),
 	U3G_DEV(SIERRA, MC5725, 0),
-	U3G_DEV(SIERRA, MINI5725, 0),
-	U3G_DEV(SIERRA, AIRCARD875, 0),
+	U3G_DEV(SIERRA, MC5727, 0),
+	U3G_DEV(SIERRA, MC5727_2, 0),
+	U3G_DEV(SIERRA, MC5728, 0),
 	U3G_DEV(SIERRA, MC8755, 0),
 	U3G_DEV(SIERRA, MC8755_2, 0),
 	U3G_DEV(SIERRA, MC8755_3, 0),
+	U3G_DEV(SIERRA, MC8755_4, 0),
 	U3G_DEV(SIERRA, MC8765, 0),
-	U3G_DEV(SIERRA, AC875U, 0),
+	U3G_DEV(SIERRA, MC8765_2, 0),
+	U3G_DEV(SIERRA, MC8765_3, 0),
+	U3G_DEV(SIERRA, MC8775, 0),
 	U3G_DEV(SIERRA, MC8775_2, 0),
 	U3G_DEV(SIERRA, MC8780, 0),
+	U3G_DEV(SIERRA, MC8780_2, 0),
+	U3G_DEV(SIERRA, MC8780_3, 0),
 	U3G_DEV(SIERRA, MC8781, 0),
-	U3G_DEV(HP, HS2300, 0),
-	/* Sierra TruInstaller device ID */
-	U3G_DEV(SIERRA, TRUINSTALL, U3GFL_SIERRA_INIT),
-	/* PRUEBA SILABS */
+	U3G_DEV(SIERRA, MC8781_2, 0),
+	U3G_DEV(SIERRA, MC8781_3, 0),
+	U3G_DEV(SIERRA, MC8785, 0),
+	U3G_DEV(SIERRA, MC8785_2, 0),
+	U3G_DEV(SIERRA, MC8790, 0),
+	U3G_DEV(SIERRA, MC8791, 0),
+	U3G_DEV(SIERRA, MC8792, 0),
+	U3G_DEV(SIERRA, MINI5725, 0),
+	U3G_DEV(SIERRA, T11, 0),
+	U3G_DEV(SIERRA, T598, 0),
 	U3G_DEV(SILABS, SAEL, U3GFL_SAEL_M460_INIT),
+	U3G_DEV(STELERA, C105, 0),
+	U3G_DEV(STELERA, E1003, 0),
+	U3G_DEV(STELERA, E1004, 0),
+	U3G_DEV(STELERA, E1005, 0),
+	U3G_DEV(STELERA, E1006, 0),
+	U3G_DEV(STELERA, E1007, 0),
+	U3G_DEV(STELERA, E1008, 0),
+	U3G_DEV(STELERA, E1009, 0),
+	U3G_DEV(STELERA, E100A, 0),
+	U3G_DEV(STELERA, E100B, 0),
+	U3G_DEV(STELERA, E100C, 0),
+	U3G_DEV(STELERA, E100D, 0),
+	U3G_DEV(STELERA, E100E, 0),
+	U3G_DEV(STELERA, E100F, 0),
+	U3G_DEV(STELERA, E1010, 0),
+	U3G_DEV(STELERA, E1011, 0),
+	U3G_DEV(STELERA, E1012, 0),
+	U3G_DEV(TCTMOBILE, X060S, 0),
+	U3G_DEV(TELIT, UC864E, 0),
+	U3G_DEV(TELIT, UC864G, 0),
+	U3G_DEV(TLAYTECH, TEU800, 0),
+	U3G_DEV(TOSHIBA, G450, 0),
+	U3G_DEV(TOSHIBA, HSDPA, 0),
+	U3G_DEV(YISO, C893, 0),
+	/* Autoinstallers */
+	U3G_DEV(NOVATEL, ZEROCD, U3GFL_SCSI_EJECT),
+	U3G_DEV(SIERRA, TRUINSTALL, U3GFL_SIERRA_INIT),
+#undef	U3G_DEV
 };
 
 static void
@@ -249,8 +502,6 @@ u3g_sierra_init(struct usb_device *udev)
 {
 	struct usb_device_request req;
 
-	DPRINTFN(0, "\n");
-
 	req.bmRequestType = UT_VENDOR;
 	req.bRequest = UR_SET_INTERFACE;
 	USETW(req.wValue, UF_DEVICE_REMOTE_WAKEUP);
@@ -269,8 +520,6 @@ u3g_huawei_init(struct usb_device *udev)
 {
 	struct usb_device_request req;
 
-	DPRINTFN(0, "\n");
-
 	req.bmRequestType = UT_WRITE_DEVICE;
 	req.bRequest = UR_SET_FEATURE;
 	USETW(req.wValue, UF_DEVICE_REMOTE_WAKEUP);
@@ -364,58 +613,48 @@ u3g_sael_m460_init(struct usb_device *udev)
 	}
 }
 
-static int
-u3g_lookup_huawei(struct usb_attach_arg *uaa)
-{
-	/* Calling the lookup function will also set the driver info! */
-	return (usbd_lookup_id_by_uaa(u3g_devs, sizeof(u3g_devs), uaa));
-}
-
 /*
  * The following function handles 3G modem devices (E220, Mobile,
  * etc.) with auto-install flash disks for Windows/MacOSX on the first
  * interface.  After some command or some delay they change appearance
  * to a modem.
  */
-static usb_error_t
-u3g_test_huawei_autoinst(struct usb_device *udev,
+static void
+u3g_test_autoinst(void *arg, struct usb_device *udev,
     struct usb_attach_arg *uaa)
 {
 	struct usb_interface *iface;
 	struct usb_interface_descriptor *id;
 	uint32_t flags;
 
-	if (udev == NULL) {
-		return (USB_ERR_INVAL);
-	}
+	if (uaa->dev_state != UAA_DEV_READY)
+		return;
+
 	iface = usbd_get_iface(udev, 0);
-	if (iface == NULL) {
-		return (USB_ERR_INVAL);
-	}
+	if (iface == NULL)
+		return;
 	id = iface->idesc;
-	if (id == NULL) {
-		return (USB_ERR_INVAL);
-	}
-	if (id->bInterfaceClass != UICLASS_MASS) {
-		return (USB_ERR_INVAL);
-	}
-	if (u3g_lookup_huawei(uaa)) {
+	if (id == NULL || id->bInterfaceClass != UICLASS_MASS)
+		return;
+	if (usbd_lookup_id_by_uaa(u3g_devs, sizeof(u3g_devs), uaa)) {
 		/* no device match */
-		return (USB_ERR_INVAL);
+		return;
 	}
 	flags = USB_GET_DRIVER_INFO(uaa);
 
 	if (flags & U3GFL_HUAWEI_INIT) {
 		u3g_huawei_init(udev);
 	} else if (flags & U3GFL_SCSI_EJECT) {
-		return (usb_test_autoinstall(udev, 0, 1));
+		if (usb_test_autoinstall(udev, 0, 1) != 0)
+			return;
 	} else if (flags & U3GFL_SIERRA_INIT) {
 		u3g_sierra_init(udev);
 	} else {
 		/* no quirks */
-		return (USB_ERR_INVAL);
+		return;
 	}
-	return (0);			/* success */
+	uaa->dev_state = UAA_DEV_EJECTING;
+	return;		/* success */
 }
 
 static int
@@ -424,10 +663,11 @@ u3g_driver_loaded(struct module *mod, int what, void *arg)
 	switch (what) {
 	case MOD_LOAD:
 		/* register our autoinstall handler */
-		usb_test_huawei_autoinst_p = &u3g_test_huawei_autoinst;
+		u3g_etag = EVENTHANDLER_REGISTER(usb_dev_configured,
+		    u3g_test_autoinst, NULL, EVENTHANDLER_PRI_ANY);
 		break;
 	case MOD_UNLOAD:
-		usb_test_huawei_unload(NULL);
+		EVENTHANDLER_DEREGISTER(usb_dev_configured, u3g_etag);
 		break;
 	default:
 		return (EOPNOTSUPP);
@@ -449,7 +689,7 @@ u3g_probe(device_t self)
 	if (uaa->info.bInterfaceClass != UICLASS_VENDOR) {
 		return (ENXIO);
 	}
-	return (u3g_lookup_huawei(uaa));
+	return (usbd_lookup_id_by_uaa(u3g_devs, sizeof(u3g_devs), uaa));
 }
 
 static int
diff --git a/sys/dev/usb/serial/uark.c b/sys/dev/usb/serial/uark.c
index 492f68bd37c..7dfb0f83f6e 100644
--- a/sys/dev/usb/serial/uark.c
+++ b/sys/dev/usb/serial/uark.c
@@ -211,7 +211,7 @@ uark_attach(device_t dev)
 
 	if (error) {
 		device_printf(dev, "allocating control USB "
-		    "transfers failed!\n");
+		    "transfers failed\n");
 		goto detach;
 	}
 	/* clear stall at first run */
diff --git a/sys/dev/usb/serial/ubser.c b/sys/dev/usb/serial/ubser.c
index f95f464ad8c..06c96c026e5 100644
--- a/sys/dev/usb/serial/ubser.c
+++ b/sys/dev/usb/serial/ubser.c
@@ -282,7 +282,7 @@ ubser_attach(device_t dev)
 	sc->sc_tx_size = usbd_xfer_max_len(sc->sc_xfer[UBSER_BULK_DT_WR]);
 
 	if (sc->sc_tx_size == 0) {
-		DPRINTFN(0, "invalid tx_size!\n");
+		DPRINTFN(0, "invalid tx_size\n");
 		goto detach;
 	}
 	/* initialize port numbers */
diff --git a/sys/dev/usb/serial/ucycom.c b/sys/dev/usb/serial/ucycom.c
index 0c1619df64b..1cce28eb580 100644
--- a/sys/dev/usb/serial/ucycom.c
+++ b/sys/dev/usb/serial/ucycom.c
@@ -266,7 +266,7 @@ ucycom_attach(device_t dev)
 	    sc, &sc->sc_mtx);
 	if (error) {
 		device_printf(dev, "allocating USB "
-		    "transfers failed!\n");
+		    "transfers failed\n");
 		goto detach;
 	}
 	error = ucom_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc,
@@ -555,7 +555,7 @@ ucycom_intr_read_callback(struct usb_xfer *xfer, usb_error_t error)
 			break;
 
 		default:
-			DPRINTFN(0, "unsupported model number!\n");
+			DPRINTFN(0, "unsupported model number\n");
 			goto tr_setup;
 		}
 
diff --git a/sys/dev/usb/serial/ufoma.c b/sys/dev/usb/serial/ufoma.c
index 3d015fd7de2..b1a73494945 100644
--- a/sys/dev/usb/serial/ufoma.c
+++ b/sys/dev/usb/serial/ufoma.c
@@ -401,7 +401,7 @@ ufoma_attach(device_t dev)
 
 	if (error) {
 		device_printf(dev, "allocating control USB "
-		    "transfers failed!\n");
+		    "transfers failed\n");
 		goto detach;
 	}
 	mad = ufoma_get_intconf(cd, id, UDESC_VS_INTERFACE, UDESCSUB_MCPC_ACM);
@@ -1060,7 +1060,7 @@ ufoma_modem_setup(device_t dev, struct ufoma_softc *sc,
 				break;
 			}
 		} else {
-			device_printf(dev, "no data interface!\n");
+			device_printf(dev, "no data interface\n");
 			return (EINVAL);
 		}
 	}
@@ -1071,7 +1071,7 @@ ufoma_modem_setup(device_t dev, struct ufoma_softc *sc,
 
 	if (error) {
 		device_printf(dev, "allocating BULK USB "
-		    "transfers failed!\n");
+		    "transfers failed\n");
 		return (EINVAL);
 	}
 	return (0);
diff --git a/sys/dev/usb/serial/uftdi.c b/sys/dev/usb/serial/uftdi.c
index c7442b64270..e6eca43c57d 100644
--- a/sys/dev/usb/serial/uftdi.c
+++ b/sys/dev/usb/serial/uftdi.c
@@ -165,7 +165,7 @@ static const struct usb_config uftdi_config[UFTDI_N_TRANSFER] = {
 		.endpoint = UE_ADDR_ANY,
 		.direction = UE_DIR_OUT,
 		.bufsize = UFTDI_OBUFSIZE,
-		.flags = {.pipe_bof = 1,.force_short_xfer = 1,},
+		.flags = {.pipe_bof = 1,},
 		.callback = &uftdi_write_callback,
 	},
 
@@ -216,41 +216,46 @@ MODULE_DEPEND(uftdi, ucom, 1, 1, 1);
 MODULE_DEPEND(uftdi, usb, 1, 1, 1);
 
 static struct usb_device_id uftdi_devs[] = {
-	{USB_VPI(USB_VENDOR_ATMEL, USB_PRODUCT_ATMEL_STK541, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_DRESDENELEKTRONIK, USB_PRODUCT_DRESDENELEKTRONIK_SENSORTERMINALBOARD, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_DRESDENELEKTRONIK, USB_PRODUCT_DRESDENELEKTRONIK_WIRELESSHANDHELDTERMINAL, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U100AX, UFTDI_TYPE_SIO)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_2232C, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SERIAL_8U232AM4, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_SEMC_DSS20, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CFA_631, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CFA_632, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CFA_633, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CFA_634, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CFA_635, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_USBSERIAL, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MX2_3, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MX4_5, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LK202, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_LK204, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TACTRIX_OPENPORT_13M, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TACTRIX_OPENPORT_13S, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_TACTRIX_OPENPORT_13U, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_EISCOU, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_UOPTBR, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_EMCU2D, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_PCMSFU, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_EMCU2H, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_MAXSTREAM, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CTI_USB_NANO_485, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_FTDI, USB_PRODUCT_FTDI_CTI_USB_MINI_485, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_SIIG2, USB_PRODUCT_SIIG2_US2308, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_INTREPIDCS, USB_PRODUCT_INTREPIDCS_VALUECAN, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_INTREPIDCS, USB_PRODUCT_INTREPIDCS_NEOVI, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_BBELECTRONICS, USB_PRODUCT_BBELECTRONICS_USOTL4, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_MARVELL, USB_PRODUCT_MARVELL_SHEEVAPLUG, UFTDI_TYPE_8U232AM)},
-	{USB_VPI(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_PCOPRS1, UFTDI_TYPE_8U232AM)},
+#define	UFTDI_DEV(v,p,t) \
+  { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, UFTDI_TYPE_##t) }
+	UFTDI_DEV(ATMEL, STK541, 8U232AM),
+	UFTDI_DEV(DRESDENELEKTRONIK, SENSORTERMINALBOARD, 8U232AM),
+	UFTDI_DEV(DRESDENELEKTRONIK, WIRELESSHANDHELDTERMINAL, 8U232AM),
+	UFTDI_DEV(FTDI, SERIAL_8U100AX, SIO),
+	UFTDI_DEV(FTDI, SERIAL_2232C, 8U232AM),
+	UFTDI_DEV(FTDI, SERIAL_2232D, 8U232AM),
+	UFTDI_DEV(FTDI, SERIAL_8U232AM, 8U232AM),
+	UFTDI_DEV(FTDI, SERIAL_8U232AM4, 8U232AM),
+	UFTDI_DEV(FTDI, SEMC_DSS20, 8U232AM),
+	UFTDI_DEV(FTDI, CFA_631, 8U232AM),
+	UFTDI_DEV(FTDI, CFA_632, 8U232AM),
+	UFTDI_DEV(FTDI, CFA_633, 8U232AM),
+	UFTDI_DEV(FTDI, CFA_634, 8U232AM),
+	UFTDI_DEV(FTDI, CFA_635, 8U232AM),
+	UFTDI_DEV(FTDI, USBSERIAL, 8U232AM),
+	UFTDI_DEV(FTDI, MX2_3, 8U232AM),
+	UFTDI_DEV(FTDI, MX4_5, 8U232AM),
+	UFTDI_DEV(FTDI, LK202, 8U232AM),
+	UFTDI_DEV(FTDI, LK204, 8U232AM),
+	UFTDI_DEV(FTDI, TACTRIX_OPENPORT_13M, 8U232AM),
+	UFTDI_DEV(FTDI, TACTRIX_OPENPORT_13S, 8U232AM),
+	UFTDI_DEV(FTDI, TACTRIX_OPENPORT_13U, 8U232AM),
+	UFTDI_DEV(FTDI, EISCOU, 8U232AM),
+	UFTDI_DEV(FTDI, UOPTBR, 8U232AM),
+	UFTDI_DEV(FTDI, EMCU2D, 8U232AM),
+	UFTDI_DEV(FTDI, PCMSFU, 8U232AM),
+	UFTDI_DEV(FTDI, EMCU2H, 8U232AM),
+	UFTDI_DEV(FTDI, MAXSTREAM, 8U232AM),
+	UFTDI_DEV(FTDI, CTI_USB_NANO_485, 8U232AM),
+	UFTDI_DEV(FTDI, CTI_USB_MINI_485, 8U232AM),
+	UFTDI_DEV(SIIG2, US2308, 8U232AM),
+	UFTDI_DEV(INTREPIDCS, VALUECAN, 8U232AM),
+	UFTDI_DEV(INTREPIDCS, NEOVI, 8U232AM),
+	UFTDI_DEV(BBELECTRONICS, USOTL4, 8U232AM),
+	UFTDI_DEV(MARVELL, SHEEVAPLUG, 8U232AM),
+	UFTDI_DEV(MELCO, PCOPRS1, 8U232AM),
+	UFTDI_DEV(RATOC, REXUSB60F, 8U232AM),
+#undef UFTDI_DEV
 };
 
 static int
@@ -307,7 +312,7 @@ uftdi_attach(device_t dev)
 
 	if (error) {
 		device_printf(dev, "allocating USB "
-		    "transfers failed!\n");
+		    "transfers failed\n");
 		goto detach;
 	}
 	sc->sc_ucom.sc_portno = FTDI_PIT_SIOA + uaa->info.bIfaceNum;
diff --git a/sys/dev/usb/serial/ugensa.c b/sys/dev/usb/serial/ugensa.c
index dd6b6f1037a..99656dde46f 100644
--- a/sys/dev/usb/serial/ugensa.c
+++ b/sys/dev/usb/serial/ugensa.c
@@ -210,7 +210,7 @@ ugensa_attach(device_t dev)
 	}
 
 	if (cnt == 0) {
-		device_printf(dev, "No interfaces!\n");
+		device_printf(dev, "No interfaces\n");
 		goto detach;
 	}
 	for (x = 0; x < cnt; x++) {
@@ -229,7 +229,7 @@ ugensa_attach(device_t dev)
 
 		if (error) {
 			device_printf(dev, "allocating USB "
-			    "transfers failed!\n");
+			    "transfers failed\n");
 			goto detach;
 		}
 		/* clear stall at first run */
diff --git a/sys/dev/usb/serial/uipaq.c b/sys/dev/usb/serial/uipaq.c
index 3bdb2307a5f..0efcaaf8206 100644
--- a/sys/dev/usb/serial/uipaq.c
+++ b/sys/dev/usb/serial/uipaq.c
@@ -1015,6 +1015,8 @@ static const struct usb_device_id uipaq_devs[] = {
 	/**/
 	{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_WZERO3ES, 0)},
 	/**/
+	{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_WZERO3ADES, 0)},
+	/**/
 	{USB_VPI(USB_VENDOR_SHARP, USB_PRODUCT_SHARP_WILLCOM03, 0)},
 	/* Symbol USB Sync */
 	{USB_VPI(USB_VENDOR_SYMBOL, 0x2000, 0)},
diff --git a/sys/dev/usb/serial/umct.c b/sys/dev/usb/serial/umct.c
index 7331a0bf85c..524f8c4f4c0 100644
--- a/sys/dev/usb/serial/umct.c
+++ b/sys/dev/usb/serial/umct.c
@@ -263,7 +263,7 @@ umct_attach(device_t dev)
 
 	if (error) {
 		device_printf(dev, "allocating USB "
-		    "transfers failed!\n");
+		    "transfers failed\n");
 		goto detach;
 	}
 
diff --git a/sys/dev/usb/serial/umodem.c b/sys/dev/usb/serial/umodem.c
index 9b8da420eb2..6945e79e430 100644
--- a/sys/dev/usb/serial/umodem.c
+++ b/sys/dev/usb/serial/umodem.c
@@ -112,6 +112,7 @@ __FBSDID("$FreeBSD$");
 #define	USB_DEBUG_VAR umodem_debug
 #include 
 #include 
+#include 
 
 #include 
 
@@ -311,7 +312,7 @@ umodem_attach(device_t dev)
 		    0 - 1, UDESCSUB_CDC_UNION, 0 - 1);
 
 		if ((cud == NULL) || (cud->bLength < sizeof(*cud))) {
-			device_printf(dev, "no CM or union descriptor!\n");
+			device_printf(dev, "no CM or union descriptor\n");
 			goto detach;
 		}
 
@@ -344,21 +345,25 @@ umodem_attach(device_t dev)
 				break;
 			}
 		} else {
-			device_printf(dev, "no data interface!\n");
+			device_printf(dev, "no data interface\n");
 			goto detach;
 		}
 	}
 
-	if (sc->sc_cm_cap & USB_CDC_CM_OVER_DATA) {
-		if (sc->sc_acm_cap & USB_CDC_ACM_HAS_FEATURE) {
-
-			error = umodem_set_comm_feature
-			    (uaa->device, sc->sc_ctrl_iface_no,
-			    UCDC_ABSTRACT_STATE, UCDC_DATA_MULTIPLEXED);
-
-			/* ignore any errors */
-		}
+	if (usb_test_quirk(uaa, UQ_ASSUME_CM_OVER_DATA)) {
 		sc->sc_cm_over_data = 1;
+	} else {
+		if (sc->sc_cm_cap & USB_CDC_CM_OVER_DATA) {
+			if (sc->sc_acm_cap & USB_CDC_ACM_HAS_FEATURE) {
+
+				error = umodem_set_comm_feature
+				(uaa->device, sc->sc_ctrl_iface_no,
+				 UCDC_ABSTRACT_STATE, UCDC_DATA_MULTIPLEXED);
+
+				/* ignore any errors */
+			}
+			sc->sc_cm_over_data = 1;
+		}
 	}
 	error = usbd_transfer_setup(uaa->device,
 	    sc->sc_iface_index, sc->sc_xfer,
diff --git a/sys/dev/usb/serial/uplcom.c b/sys/dev/usb/serial/uplcom.c
index af6bdbafd07..c5d58e46dcb 100644
--- a/sys/dev/usb/serial/uplcom.c
+++ b/sys/dev/usb/serial/uplcom.c
@@ -243,57 +243,57 @@ static struct ucom_callback uplcom_callback = {
 	.ucom_poll = &uplcom_poll,
 };
 
-#define	USB_UPL(v,p,rl,rh,t)				\
-  USB_VENDOR(v), USB_PRODUCT(p), USB_DEV_BCD_GTEQ(rl),	\
-  USB_DEV_BCD_LTEQ(rh), USB_DRIVER_INFO(t)
+#define	UPLCOM_DEV(v,p,rl,rh,t)				\
+  { USB_VENDOR(USB_VENDOR_##v), USB_PRODUCT(USB_PRODUCT_##v##_##p), \
+    USB_DEV_BCD_GTEQ(rl), USB_DEV_BCD_LTEQ(rh), USB_DRIVER_INFO(TYPE_##t) }
 
 static const struct usb_device_id uplcom_devs[] = {
 	/* Belkin F5U257 */
-	{USB_UPL(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5U257, 0, 0xFFFF, TYPE_PL2303X)},
+	UPLCOM_DEV(BELKIN, F5U257, 0, 0xFFFF, PL2303X),
 	/* I/O DATA USB-RSAQ */
-	{USB_UPL(USB_VENDOR_IODATA, USB_PRODUCT_IODATA_USBRSAQ, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(IODATA, USBRSAQ, 0, 0xFFFF, PL2303),
 	/* I/O DATA USB-RSAQ2 */
-	{USB_UPL(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_RSAQ2, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(PROLIFIC, RSAQ2, 0, 0xFFFF, PL2303),
 	/* I/O DATA USB-RSAQ3 */
-	{USB_UPL(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_RSAQ3, 0, 0xFFFF, TYPE_PL2303X)},
+	UPLCOM_DEV(PROLIFIC, RSAQ3, 0, 0xFFFF, PL2303X),
 	/* PLANEX USB-RS232 URS-03 */
-	{USB_UPL(USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC232A, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(ATEN, UC232A, 0, 0xFFFF, PL2303),
 	/* TrendNet TU-S9 */
-	{USB_UPL(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303, 0x0400, 0xFFFF, TYPE_PL2303X)},
+	UPLCOM_DEV(PROLIFIC, PL2303, 0x0400, 0xFFFF, PL2303X),
 	/* ST Lab USB-SERIAL-4 */
-	{USB_UPL(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303, 0x0300, 0x03FF, TYPE_PL2303X)},
+	UPLCOM_DEV(PROLIFIC, PL2303, 0x0300, 0x03FF, PL2303X),
 	/* IOGEAR/ATEN UC-232A (also ST Lab USB-SERIAL-1) */
-	{USB_UPL(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PL2303, 0, 0x02FF, TYPE_PL2303)},
+	UPLCOM_DEV(PROLIFIC, PL2303, 0, 0x02FF, PL2303),
 	/* TDK USB-PHS Adapter UHA6400 */
-	{USB_UPL(USB_VENDOR_TDK, USB_PRODUCT_TDK_UHA6400, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(TDK, UHA6400, 0, 0xFFFF, PL2303),
 	/* RATOC REX-USB60 */
-	{USB_UPL(USB_VENDOR_RATOC, USB_PRODUCT_RATOC_REXUSB60, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(RATOC, REXUSB60, 0, 0xFFFF, PL2303),
 	/* ELECOM UC-SGT */
-	{USB_UPL(USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_UCSGT, 0, 0xFFFF, TYPE_PL2303)},
-	{USB_UPL(USB_VENDOR_ELECOM, USB_PRODUCT_ELECOM_UCSGT0, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(ELECOM, UCSGT, 0, 0xFFFF, PL2303),
+	UPLCOM_DEV(ELECOM, UCSGT0, 0, 0xFFFF, PL2303),
 	/* Sagem USB-Serial Controller */
-	{USB_UPL(USB_VENDOR_SAGEM, USB_PRODUCT_SAGEM_USBSERIAL, 0, 0xFFFF, TYPE_PL2303X)},
+	UPLCOM_DEV(SAGEM, USBSERIAL, 0, 0xFFFF, PL2303X),
 	/* Sony Ericsson USB Cable */
-	{USB_UPL(USB_VENDOR_SONYERICSSON, USB_PRODUCT_SONYERICSSON_DCU10, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(SONYERICSSON, DCU10, 0, 0xFFFF, PL2303),
 	/* SOURCENEXT KeikaiDenwa 8 */
-	{USB_UPL(USB_VENDOR_SOURCENEXT, USB_PRODUCT_SOURCENEXT_KEIKAI8, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(SOURCENEXT, KEIKAI8, 0, 0xFFFF, PL2303),
 	/* SOURCENEXT KeikaiDenwa 8 with charger */
-	{USB_UPL(USB_VENDOR_SOURCENEXT, USB_PRODUCT_SOURCENEXT_KEIKAI8_CHG, 0, 0, TYPE_PL2303)},
+	UPLCOM_DEV(SOURCENEXT, KEIKAI8_CHG, 0, 0, PL2303),
 	/* HAL Corporation Crossam2+USB */
-	{USB_UPL(USB_VENDOR_HAL, USB_PRODUCT_HAL_IMR001, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(HAL, IMR001, 0, 0xFFFF, PL2303),
 	/* Sitecom USB to Serial */
-	{USB_UPL(USB_VENDOR_SITECOM, USB_PRODUCT_SITECOM_SERIAL, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(SITECOM, SERIAL, 0, 0xFFFF, PL2303),
 	/* Tripp-Lite U209-000-R */
-	{USB_UPL(USB_VENDOR_TRIPPLITE, USB_PRODUCT_TRIPPLITE_U209, 0, 0xFFFF, TYPE_PL2303X)},
-	{USB_UPL(USB_VENDOR_RADIOSHACK, USB_PRODUCT_RADIOSHACK_USBCABLE, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(TRIPPLITE, U209, 0, 0xFFFF, PL2303X),
+	UPLCOM_DEV(RADIOSHACK, USBCABLE, 0, 0xFFFF, PL2303),
 	/* Prolific Pharos */
-	{USB_UPL(USB_VENDOR_PROLIFIC, USB_PRODUCT_PROLIFIC_PHAROS, 0, 0xFFFF, TYPE_PL2303)},
+	UPLCOM_DEV(PROLIFIC, PHAROS, 0, 0xFFFF, PL2303),
 	/* Willcom W-SIM */
-	{USB_UPL(USB_VENDOR_PROLIFIC2, USB_PRODUCT_PROLIFIC2_WSIM, 0, 0xFFFF, TYPE_PL2303X)},
+	UPLCOM_DEV(PROLIFIC2, WSIM, 0, 0xFFFF, PL2303X),
 	/* Mobile Action MA-620 Infrared Adapter */
-	{USB_UPL(USB_VENDOR_MOBILEACTION, USB_PRODUCT_MOBILEACTION_MA620, 0, 0xFFFF, TYPE_PL2303X)},
-
+	UPLCOM_DEV(MOBILEACTION, MA620, 0, 0xFFFF, PL2303X),
 };
+#undef UPLCOM_DEV
 
 static device_method_t uplcom_methods[] = {
 	DEVMETHOD(device_probe, uplcom_probe),
@@ -377,7 +377,7 @@ uplcom_attach(device_t dev)
 	if (iface) {
 		id = usbd_get_interface_descriptor(iface);
 		if (id == NULL) {
-			device_printf(dev, "no interface descriptor (2)!\n");
+			device_printf(dev, "no interface descriptor (2)\n");
 			goto detach;
 		}
 		sc->sc_data_iface_no = id->bInterfaceNumber;
@@ -420,7 +420,7 @@ uplcom_attach(device_t dev)
 	 */
 	if (sc->sc_chiptype == TYPE_PL2303X) {
 		if (uplcom_pl2303x_init(uaa->device)) {
-			device_printf(dev, "init failed!\n");
+			device_printf(dev, "init failed\n");
 			goto detach;
 		}
 	}
diff --git a/sys/dev/usb/serial/usb_serial.h b/sys/dev/usb/serial/usb_serial.h
index ce5f6a9f45f..7f7590b499d 100644
--- a/sys/dev/usb/serial/usb_serial.h
+++ b/sys/dev/usb/serial/usb_serial.h
@@ -70,7 +70,6 @@
 #include 
 #include 
 #include 
-#include 
 
 /* Module interface related macros */
 #define	UCOM_MODVER	1
diff --git a/sys/dev/usb/serial/uslcom.c b/sys/dev/usb/serial/uslcom.c
index 753625f29fc..d97cc2c542c 100644
--- a/sys/dev/usb/serial/uslcom.c
+++ b/sys/dev/usb/serial/uslcom.c
@@ -175,24 +175,26 @@ static struct ucom_callback uslcom_callback = {
 };
 
 static const struct usb_device_id uslcom_devs[] = {
-    { USB_VPI(USB_VENDOR_BALTECH,	USB_PRODUCT_BALTECH_CARDREADER, 0) },
-    { USB_VPI(USB_VENDOR_DYNASTREAM,	USB_PRODUCT_DYNASTREAM_ANTDEVBOARD, 0) },
-    { USB_VPI(USB_VENDOR_JABLOTRON,	USB_PRODUCT_JABLOTRON_PC60B, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_ARGUSISP, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_CRUMB128, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_DEGREE, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_BURNSIDE, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_HELICOM, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_LIPOWSKY_HARP, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_LIPOWSKY_JTAG, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_LIPOWSKY_LIN, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_POLOLU, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_CP2102, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_CP210X_2, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_SUUNTO, 0) },
-    { USB_VPI(USB_VENDOR_SILABS,	USB_PRODUCT_SILABS_TRAQMATE, 0) },
-    { USB_VPI(USB_VENDOR_SILABS2,	USB_PRODUCT_SILABS2_DCU11CLONE, 0) },
-    { USB_VPI(USB_VENDOR_USI,		USB_PRODUCT_USI_MC60, 0) },
+#define	USLCOM_DEV(v,p)  { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
+    USLCOM_DEV(BALTECH, CARDREADER),
+    USLCOM_DEV(DYNASTREAM, ANTDEVBOARD),
+    USLCOM_DEV(JABLOTRON, PC60B),
+    USLCOM_DEV(SILABS, ARGUSISP),
+    USLCOM_DEV(SILABS, CRUMB128),
+    USLCOM_DEV(SILABS, DEGREE),
+    USLCOM_DEV(SILABS, BURNSIDE),
+    USLCOM_DEV(SILABS, HELICOM),
+    USLCOM_DEV(SILABS, LIPOWSKY_HARP),
+    USLCOM_DEV(SILABS, LIPOWSKY_JTAG),
+    USLCOM_DEV(SILABS, LIPOWSKY_LIN),
+    USLCOM_DEV(SILABS, POLOLU),
+    USLCOM_DEV(SILABS, CP2102),
+    USLCOM_DEV(SILABS, CP210X_2),
+    USLCOM_DEV(SILABS, SUUNTO),
+    USLCOM_DEV(SILABS, TRAQMATE),
+    USLCOM_DEV(SILABS2, DCU11CLONE),
+    USLCOM_DEV(USI, MC60),
+#undef USLCOM_DEV
 };
 
 static device_method_t uslcom_methods[] = {
diff --git a/sys/dev/usb/serial/uvisor.c b/sys/dev/usb/serial/uvisor.c
index 3f1624bcbf4..9e6daa97cfa 100644
--- a/sys/dev/usb/serial/uvisor.c
+++ b/sys/dev/usb/serial/uvisor.c
@@ -261,32 +261,34 @@ MODULE_DEPEND(uvisor, ucom, 1, 1, 1);
 MODULE_DEPEND(uvisor, usb, 1, 1, 1);
 
 static const struct usb_device_id uvisor_devs[] = {
-	{USB_VPI(USB_VENDOR_ACEECA, USB_PRODUCT_ACEECA_MEZ1000, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_GARMIN, USB_PRODUCT_GARMIN_IQUE_3600, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_FOSSIL, USB_PRODUCT_FOSSIL_WRISTPDA, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_VISOR, UVISOR_FLAG_VISOR)},
-	{USB_VPI(USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_TREO, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_HANDSPRING, USB_PRODUCT_HANDSPRING_TREO600, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_PALM, USB_PRODUCT_PALM_M500, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_PALM, USB_PRODUCT_PALM_M505, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_PALM, USB_PRODUCT_PALM_M515, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_PALM, USB_PRODUCT_PALM_I705, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_PALM, USB_PRODUCT_PALM_M125, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_PALM, USB_PRODUCT_PALM_M130, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_PALM, USB_PRODUCT_PALM_TUNGSTEN_Z, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_PALM, USB_PRODUCT_PALM_TUNGSTEN_T, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_PALM, USB_PRODUCT_PALM_ZIRE, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_PALM, USB_PRODUCT_PALM_ZIRE31, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_SAMSUNG, USB_PRODUCT_SAMSUNG_I500, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40, 0)},
-	{USB_VPI(USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_41, 0)},
-	{USB_VPI(USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_S360, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_NX60, UVISOR_FLAG_PALM4)},
-	{USB_VPI(USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_35, UVISOR_FLAG_PALM35)},
-/*  {USB_VPI(USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_25, UVISOR_FLAG_PALM4 )}, */
-	{USB_VPI(USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_TJ37, UVISOR_FLAG_PALM4)},
-/*  {USB_VPI(USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_TH55, UVISOR_FLAG_PALM4 )}, See PR 80935 */
-	{USB_VPI(USB_VENDOR_TAPWAVE, USB_PRODUCT_TAPWAVE_ZODIAC, UVISOR_FLAG_PALM4)},
+#define	UVISOR_DEV(v,p,i) { USB_VPI(USB_VENDOR_##v, USB_PRODUCT_##v##_##p, i) }
+	UVISOR_DEV(ACEECA, MEZ1000, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(GARMIN, IQUE_3600, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(FOSSIL, WRISTPDA, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(HANDSPRING, VISOR, UVISOR_FLAG_VISOR),
+	UVISOR_DEV(HANDSPRING, TREO, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(HANDSPRING, TREO600, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(PALM, M500, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(PALM, M505, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(PALM, M515, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(PALM, I705, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(PALM, M125, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(PALM, M130, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(PALM, TUNGSTEN_Z, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(PALM, TUNGSTEN_T, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(PALM, ZIRE, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(PALM, ZIRE31, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(SAMSUNG, I500, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(SONY, CLIE_40, 0),
+	UVISOR_DEV(SONY, CLIE_41, 0),
+	UVISOR_DEV(SONY, CLIE_S360, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(SONY, CLIE_NX60, UVISOR_FLAG_PALM4),
+	UVISOR_DEV(SONY, CLIE_35, UVISOR_FLAG_PALM35),
+/*  UVISOR_DEV(SONY, CLIE_25, UVISOR_FLAG_PALM4 ), */
+	UVISOR_DEV(SONY, CLIE_TJ37, UVISOR_FLAG_PALM4),
+/*  UVISOR_DEV(SONY, CLIE_TH55, UVISOR_FLAG_PALM4 ), See PR 80935 */
+	UVISOR_DEV(TAPWAVE, ZODIAC, UVISOR_FLAG_PALM4),
+#undef UVISOR_DEV
 };
 
 static int
diff --git a/sys/dev/usb/storage/umass.c b/sys/dev/usb/storage/umass.c
index 18756c97cf9..0b6ceffa536 100644
--- a/sys/dev/usb/storage/umass.c
+++ b/sys/dev/usb/storage/umass.c
@@ -127,6 +127,8 @@ __FBSDID("$FreeBSD$");
 #include 
 #include "usbdevs.h"
 
+#include 
+
 #include 
 #include 
 #include 
@@ -175,6 +177,8 @@ static int umass_debug = 0;
 SYSCTL_NODE(_hw_usb, OID_AUTO, umass, CTLFLAG_RW, 0, "USB umass");
 SYSCTL_INT(_hw_usb_umass, OID_AUTO, debug, CTLFLAG_RW,
     &umass_debug, 0, "umass debug level");
+
+TUNABLE_INT("hw.usb.umass.debug", &umass_debug);
 #else
 #define	DIF(...) do { } while (0)
 #define	DPRINTF(...) do { } while (0)
@@ -309,32 +313,18 @@ typedef void (umass_callback_t)(struct umass_softc *sc, union ccb *ccb,
 typedef uint8_t (umass_transform_t)(struct umass_softc *sc, uint8_t *cmd_ptr,
     	uint8_t cmd_len);
 
-struct umass_devdescr {
-	uint32_t vid;
-#define	VID_WILDCARD	0xffffffff
-#define	VID_EOT		0xfffffffe
-	uint32_t pid;
-#define	PID_WILDCARD	0xffffffff
-#define	PID_EOT		0xfffffffe
-	uint32_t rid;
-#define	RID_WILDCARD	0xffffffff
-#define	RID_EOT		0xfffffffe
-
-	/* wire and command protocol */
-	uint16_t proto;
-#define	UMASS_PROTO_DEFAULT	0x0000	/* use protocol indicated by USB descriptors */
+/* Wire and command protocol */
 #define	UMASS_PROTO_BBB		0x0001	/* USB wire protocol */
 #define	UMASS_PROTO_CBI		0x0002
 #define	UMASS_PROTO_CBI_I	0x0004
-#define	UMASS_PROTO_WIRE		0x00ff	/* USB wire protocol mask */
-#define	UMASS_PROTO_SCSI		0x0100	/* command protocol */
+#define	UMASS_PROTO_WIRE	0x00ff	/* USB wire protocol mask */
+#define	UMASS_PROTO_SCSI	0x0100	/* command protocol */
 #define	UMASS_PROTO_ATAPI	0x0200
 #define	UMASS_PROTO_UFI		0x0400
 #define	UMASS_PROTO_RBC		0x0800
 #define	UMASS_PROTO_COMMAND	0xff00	/* command protocol mask */
 
-	/* Device specific quirks */
-	uint16_t quirks;
+/* Device specific quirks */
 #define	NO_QUIRKS		0x0000
 	/*
 	 * The drive does not support Test Unit Ready. Convert to Start Unit
@@ -382,608 +372,6 @@ struct umass_devdescr {
 	 * result.
 	 */
 #define	NO_SYNCHRONIZE_CACHE	0x4000
-};
-
-static const struct umass_devdescr umass_devdescr[] = {
-	{USB_VENDOR_ASAHIOPTICAL, PID_WILDCARD, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		RS_NO_CLEAR_UA
-	},
-	{USB_VENDOR_ADDON, USB_PRODUCT_ADDON_ATTACHE, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		IGNORE_RESIDUE
-	},
-	{USB_VENDOR_ADDON, USB_PRODUCT_ADDON_A256MB, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		IGNORE_RESIDUE
-	},
-	{USB_VENDOR_ADDON, USB_PRODUCT_ADDON_DISKPRO512, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		IGNORE_RESIDUE
-	},
-	{USB_VENDOR_ADDONICS2, USB_PRODUCT_ADDONICS2_CABLE_205, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_AIPTEK, USB_PRODUCT_AIPTEK_POCKETCAM3M, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_AIPTEK2, USB_PRODUCT_AIPTEK2_SUNPLUS_TECH, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_SDCR_6335, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		NO_TEST_UNIT_READY | NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_AU6390, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_UMCR_9361, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_ALCOR, USB_PRODUCT_ALCOR_TRANSCEND, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_ASAHIOPTICAL, USB_PRODUCT_ASAHIOPTICAL_OPTIO230, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_ASAHIOPTICAL, USB_PRODUCT_ASAHIOPTICAL_OPTIO330, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_USB2SCSI, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_CASIO, USB_PRODUCT_CASIO_QV_DIGICAM, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_CBI,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_CCYU, USB_PRODUCT_CCYU_ED1064, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_CENTURY, USB_PRODUCT_CENTURY_EX35QUAT, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		FORCE_SHORT_INQUIRY | NO_START_STOP | IGNORE_RESIDUE
-	},
-	{USB_VENDOR_CYPRESS, USB_PRODUCT_CYPRESS_XX6830XX, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		NO_GETMAXLUN | NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_DESKNOTE, USB_PRODUCT_DESKNOTE_UCR_61S2B, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_DMI, USB_PRODUCT_DMI_CFSM_RW, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_EPSON, USB_PRODUCT_EPSON_STYLUS_875DC, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_CBI,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_EPSON, USB_PRODUCT_EPSON_STYLUS_895, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_FEIYA, USB_PRODUCT_FEIYA_5IN1, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_FREECOM, USB_PRODUCT_FREECOM_DVD, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_FUJIPHOTO, USB_PRODUCT_FUJIPHOTO_MASS0100, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI_I,
-		RS_NO_CLEAR_UA
-	},
-	{USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL641USB2IDE, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		FORCE_SHORT_INQUIRY | NO_START_STOP | IGNORE_RESIDUE
-		    | NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL641USB2IDE_2, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_BBB,
-		FORCE_SHORT_INQUIRY | NO_START_STOP | IGNORE_RESIDUE
-	},
-	{USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL641USB, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		FORCE_SHORT_INQUIRY | NO_START_STOP | IGNORE_RESIDUE
-	},
-	{USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL641USB_2, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		WRONG_CSWSIG
-	},
-	{USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FG, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_HAGIWARA, USB_PRODUCT_HAGIWARA_FGSM, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_HITACHI, USB_PRODUCT_HITACHI_DVDCAM_DZ_MV100A, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_CBI,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_HITACHI, USB_PRODUCT_HITACHI_DVDCAM_USB, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI_I,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_HP, USB_PRODUCT_HP_CDW4E, RID_WILDCARD,
-		UMASS_PROTO_ATAPI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_HP, USB_PRODUCT_HP_CDW8200, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI_I,
-		NO_TEST_UNIT_READY | NO_START_STOP
-	},
-	{USB_VENDOR_IMAGINATION, USB_PRODUCT_IMAGINATION_DBX1, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		WRONG_CSWSIG
-	},
-	{USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_USBCABLE, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI,
-		NO_TEST_UNIT_READY | NO_START_STOP | ALT_IFACE_1
-	},
-	{USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_ATAPI, RID_WILDCARD,
-		UMASS_PROTO_RBC | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_INSYSTEM, USB_PRODUCT_INSYSTEM_STORAGE_V2, RID_WILDCARD,
-		UMASS_PROTO_RBC | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_IODATA, USB_PRODUCT_IODATA_IU_CD2, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_IODATA, USB_PRODUCT_IODATA_DVR_UEH8, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_IOMEGA, USB_PRODUCT_IOMEGA_ZIP100, RID_WILDCARD,
-		/*
-		 * XXX This is not correct as there are Zip drives that use
-		 * ATAPI.
-		 */
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_TEST_UNIT_READY
-	},
-	{USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_FINECAM_L3, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_FINECAM_S3X, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_FINECAM_S4, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_KYOCERA, USB_PRODUCT_KYOCERA_FINECAM_S5, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_LACIE, USB_PRODUCT_LACIE_HD, RID_WILDCARD,
-		UMASS_PROTO_RBC | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_LEXAR, USB_PRODUCT_LEXAR_CF_READER, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_LEXAR, USB_PRODUCT_LEXAR_JUMPSHOT, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LDR_H443SU2, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_LOGITEC, USB_PRODUCT_LOGITEC_LDR_H443U2, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_MELCO, USB_PRODUCT_MELCO_DUBPXXG, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		FORCE_SHORT_INQUIRY | NO_START_STOP | IGNORE_RESIDUE
-	},
-	{USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_DPCM, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_CBI,
-		NO_TEST_UNIT_READY | NO_START_STOP
-	},
-	{USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_SCSIDB25, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_SCSIHD50, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_E223, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_MINOLTA, USB_PRODUCT_MINOLTA_F300, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_CDRRW, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_MITSUMI, USB_PRODUCT_MITSUMI_FDD, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_MOTOROLA2, USB_PRODUCT_MOTOROLA2_E398, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		FORCE_SHORT_INQUIRY | NO_INQUIRY_EVPD | NO_GETMAXLUN
-	},
-	{USB_VENDOR_MPMAN, PID_WILDCARD, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		IGNORE_RESIDUE | NO_GETMAXLUN | RS_NO_CLEAR_UA
-	},
-	{USB_VENDOR_MSYSTEMS, USB_PRODUCT_MSYSTEMS_DISKONKEY2, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_MYSON, USB_PRODUCT_MYSON_HEDEN, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		IGNORE_RESIDUE | NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_MYSON, USB_PRODUCT_MYSON_HEDEN_8813, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_MYSON, USB_PRODUCT_MYSON_STARREADER, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_NEODIO, USB_PRODUCT_NEODIO_ND3260, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		FORCE_SHORT_INQUIRY
-	},
-	{USB_VENDOR_NETAC, USB_PRODUCT_NETAC_CF_CARD, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_NETAC, USB_PRODUCT_NETAC_ONLYDISK, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		IGNORE_RESIDUE
-	},
-	{USB_VENDOR_NETCHIP, USB_PRODUCT_NETCHIP_CLIK_40, RID_WILDCARD,
-		UMASS_PROTO_ATAPI,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_NIKON, USB_PRODUCT_NIKON_D300, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C1, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		WRONG_CSWSIG
-	},
-	{USB_VENDOR_OLYMPUS, USB_PRODUCT_OLYMPUS_C700, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_SDS_HOTFIND_D, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_GETMAXLUN | NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_CFMS_RW, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_CFSM_COMBO, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_CFSM_READER, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_CFSM_READER2, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MDCFE_B_CF_READER, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_MDSM_B_READER, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_READER, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_ONSPEC, USB_PRODUCT_ONSPEC_UCF100, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_BBB,
-		NO_INQUIRY | NO_GETMAXLUN
-	},
-	{USB_VENDOR_ONSPEC2, USB_PRODUCT_ONSPEC2_IMAGEMATE_SDDR55, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_KXL840AN, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_BBB,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_KXLCB20AN, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_KXLCB35AN, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_PANASONIC, USB_PRODUCT_PANASONIC_LS120CAM, RID_WILDCARD,
-		UMASS_PROTO_UFI,
-		NO_QUIRKS
-	},
-	{ USB_VENDOR_PHILIPS, USB_PRODUCT_PHILIPS_SPE3030CC, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_PLEXTOR, USB_PRODUCT_PLEXTOR_40_12_40U, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_TEST_UNIT_READY
-	},
-	{USB_VENDOR_PNY, USB_PRODUCT_PNY_ATTACHE2, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		IGNORE_RESIDUE | NO_START_STOP
-	},
-	{USB_VENDOR_SAMSUNG_TECHWIN, USB_PRODUCT_SAMSUNG_TECHWIN_DIGIMAX_410, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR05A, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_CBI,
-		READ_CAPACITY_OFFBY1 | NO_GETMAXLUN
-	},
-	{USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR09, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		READ_CAPACITY_OFFBY1 | NO_GETMAXLUN
-	},
-	{USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR12, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_CBI,
-		READ_CAPACITY_OFFBY1 | NO_GETMAXLUN
-	},
-	{USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDCZ2_256, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		IGNORE_RESIDUE
-	},
-	{USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDCZ4_128, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		IGNORE_RESIDUE
-	},
-	{USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDCZ4_256, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		IGNORE_RESIDUE
-	},
-	{USB_VENDOR_SANDISK, USB_PRODUCT_SANDISK_SDDR31, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		READ_CAPACITY_OFFBY1
-	},
-	{USB_VENDOR_SCANLOGIC, USB_PRODUCT_SCANLOGIC_SL11R, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSB, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI_I,
-		NO_TEST_UNIT_READY | NO_START_STOP | SHUTTLE_INIT
-	},
-	{USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_CDRW, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_CF, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSBATAPI, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSBCFSM, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_EUSCSI, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_HIFD, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_CBI,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_SDDR09, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_SHUTTLE, USB_PRODUCT_SHUTTLE_ZIOMMC, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_CBI,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_SIGMATEL, USB_PRODUCT_SIGMATEL_I_BEAD100, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		SHUTTLE_INIT
-	},
-	{USB_VENDOR_SIIG, USB_PRODUCT_SIIG_WINTERREADER, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		IGNORE_RESIDUE
-	},
-	{USB_VENDOR_SKANHEX, USB_PRODUCT_SKANHEX_MD_7425, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_SKANHEX, USB_PRODUCT_SKANHEX_SX_520Z, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_HANDYCAM, 0x0500,
-		UMASS_PROTO_RBC | UMASS_PROTO_CBI,
-		RBC_PAD_TO_12
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_CLIE_40_MS, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_DSC, 0x0500,
-		UMASS_PROTO_RBC | UMASS_PROTO_CBI,
-		RBC_PAD_TO_12
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_DSC, 0x0600,
-		UMASS_PROTO_RBC | UMASS_PROTO_CBI,
-		RBC_PAD_TO_12
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_DSC, RID_WILDCARD,
-		UMASS_PROTO_RBC | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_HANDYCAM, RID_WILDCARD,
-		UMASS_PROTO_RBC | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_MSC, RID_WILDCARD,
-		UMASS_PROTO_RBC | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_MS_MSC_U03, RID_WILDCARD,
-		UMASS_PROTO_UFI | UMASS_PROTO_CBI,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_MS_NW_MS7, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_MS_PEG_N760C, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_MSACUS1, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_SONY, USB_PRODUCT_SONY_PORTABLE_HDD_V2, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_SUPERTOP, USB_PRODUCT_SUPERTOP_IDE, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		IGNORE_RESIDUE | NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_TAUGA, USB_PRODUCT_TAUGA_CAMERAMATE, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_TEAC, USB_PRODUCT_TEAC_FD05PUB, RID_WILDCARD,
-		UMASS_PROTO_UFI | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_TECLAST, USB_PRODUCT_TECLAST_TLC300, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		NO_TEST_UNIT_READY | NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_TREK, USB_PRODUCT_TREK_MEMKEY, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_TREK, USB_PRODUCT_TREK_THUMBDRIVE_8MB, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_BBB,
-		IGNORE_RESIDUE
-	},
-	{USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_C3310, RID_WILDCARD,
-		UMASS_PROTO_UFI | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_MP3, RID_WILDCARD,
-		UMASS_PROTO_RBC,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_TRUMPION, USB_PRODUCT_TRUMPION_T33520, RID_WILDCARD,
-		UMASS_PROTO_SCSI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_TWINMOS, USB_PRODUCT_TWINMOS_MDIV, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_VIA, USB_PRODUCT_VIA_USB2IDEBRIDGE, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_VIVITAR, USB_PRODUCT_VIVITAR_35XX, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_WESTERN, USB_PRODUCT_WESTERN_COMBO, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		FORCE_SHORT_INQUIRY | NO_START_STOP | IGNORE_RESIDUE
-	},
-	{USB_VENDOR_WESTERN, USB_PRODUCT_WESTERN_EXTHDD, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		FORCE_SHORT_INQUIRY | NO_START_STOP | IGNORE_RESIDUE
-	},
-	{USB_VENDOR_WESTERN, USB_PRODUCT_WESTERN_MYBOOK, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY_EVPD
-	},
-	{USB_VENDOR_WESTERN, USB_PRODUCT_WESTERN_MYPASSWORD, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		FORCE_SHORT_INQUIRY
-	},
-	{USB_VENDOR_WINMAXGROUP, USB_PRODUCT_WINMAXGROUP_FLASH64MC, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY
-	},
-	{USB_VENDOR_YANO, USB_PRODUCT_YANO_FW800HD, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		FORCE_SHORT_INQUIRY | NO_START_STOP | IGNORE_RESIDUE
-	},
-	{USB_VENDOR_YANO, USB_PRODUCT_YANO_U640MO, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI_I,
-		FORCE_SHORT_INQUIRY
-	},
-	{USB_VENDOR_YEDATA, USB_PRODUCT_YEDATA_FLASHBUSTERU, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_CBI,
-		NO_GETMAXLUN
-	},
-	{USB_VENDOR_ZORAN, USB_PRODUCT_ZORAN_EX20DSC, RID_WILDCARD,
-		UMASS_PROTO_ATAPI | UMASS_PROTO_CBI,
-		NO_QUIRKS
-	},
-	{USB_VENDOR_MEIZU, USB_PRODUCT_MEIZU_M6_SL, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_INQUIRY | NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_ACTIONS, USB_PRODUCT_ACTIONS_MP4, RID_WILDCARD,
-		UMASS_PROTO_SCSI | UMASS_PROTO_BBB,
-		NO_SYNCHRONIZE_CACHE
-	},
-	{USB_VENDOR_ASUS, USB_PRODUCT_ASUS_GMSC, RID_WILDCARD,
-		UMASS_PROTO_DEFAULT,
-		NO_SYNCHRONIZE_CACHE
-	},
-	{VID_EOT, PID_EOT, RID_EOT, 0, 0}
-};
 
 struct umass_softc {
 
@@ -1025,9 +413,8 @@ struct umass_softc {
 	umass_transform_t *sc_transform;
 
 	uint32_t sc_unit;
-
-	uint16_t sc_proto;		/* wire and cmd protocol */
-	uint16_t sc_quirks;		/* they got it almost right */
+	uint32_t sc_quirks;		/* they got it almost right */
+	uint32_t sc_proto;		/* wire and cmd protocol */
 
 	uint8_t	sc_name[16];
 	uint8_t	sc_iface_no;		/* interface number */
@@ -1037,10 +424,10 @@ struct umass_softc {
 };
 
 struct umass_probe_proto {
-	uint16_t quirks;
-	uint16_t proto;
+	uint32_t quirks;
+	uint32_t proto;
 
-	int32_t	error;
+	int	error;
 };
 
 /* prototypes */
@@ -1364,7 +751,6 @@ umass_get_proto(struct usb_interface *iface)
 		retval |= UMASS_PROTO_ATAPI;
 		break;
 	default:
-		retval = 0;
 		goto done;
 	}
 
@@ -1380,7 +766,6 @@ umass_get_proto(struct usb_interface *iface)
 		retval |= UMASS_PROTO_BBB;
 		break;
 	default:
-		retval = 0;
 		goto done;
 	}
 done:
@@ -1388,78 +773,92 @@ done:
 }
 
 /*
- * Match the device we are seeing with the
- * devices supported.
+ * Match the device we are seeing with the devices supported.
  */
 static struct umass_probe_proto
 umass_probe_proto(device_t dev, struct usb_attach_arg *uaa)
 {
-	const struct umass_devdescr *udd = umass_devdescr;
 	struct umass_probe_proto ret;
+	uint32_t quirks = NO_QUIRKS;
+	uint32_t proto = umass_get_proto(uaa->iface);
 
 	memset(&ret, 0, sizeof(ret));
 
-	/*
-	 * An entry specifically for Y-E Data devices as they don't fit in
-	 * the device description table.
-	 */
-	if ((uaa->info.idVendor == USB_VENDOR_YEDATA) &&
-	    (uaa->info.idProduct == USB_PRODUCT_YEDATA_FLASHBUSTERU)) {
+	/* Search for protocol enforcement */
 
-		/*
-		 * Revisions < 1.28 do not handle the interrupt endpoint
-		 * very well.
-		 */
-		if (uaa->info.bcdDevice < 0x128) {
-			ret.proto = UMASS_PROTO_UFI | UMASS_PROTO_CBI;
-		} else {
-			ret.proto = UMASS_PROTO_UFI | UMASS_PROTO_CBI_I;
-		}
+	if (usb_test_quirk(uaa, UQ_MSC_FORCE_WIRE_BBB)) {
+		proto &= ~UMASS_PROTO_WIRE;
+		proto |= UMASS_PROTO_BBB;
+	} else if (usb_test_quirk(uaa, UQ_MSC_FORCE_WIRE_CBI)) {
+		proto &= ~UMASS_PROTO_WIRE;
+		proto |= UMASS_PROTO_CBI;
+	} else if (usb_test_quirk(uaa, UQ_MSC_FORCE_WIRE_CBI_I)) {
+		proto &= ~UMASS_PROTO_WIRE;
+		proto |= UMASS_PROTO_CBI_I;
+	}
 
-		/*
-		 * Revisions < 1.28 do not have the TEST UNIT READY command
-		 * Revisions == 1.28 have a broken TEST UNIT READY
-		 */
-		if (uaa->info.bcdDevice <= 0x128) {
-			ret.quirks |= NO_TEST_UNIT_READY;
-		}
-		ret.quirks |= RS_NO_CLEAR_UA | FLOPPY_SPEED;
+	if (usb_test_quirk(uaa, UQ_MSC_FORCE_PROTO_SCSI)) {
+		proto &= ~UMASS_PROTO_COMMAND;
+		proto |= UMASS_PROTO_SCSI;
+	} else if (usb_test_quirk(uaa, UQ_MSC_FORCE_PROTO_ATAPI)) {
+		proto &= ~UMASS_PROTO_COMMAND;
+		proto |= UMASS_PROTO_ATAPI;
+	} else if (usb_test_quirk(uaa, UQ_MSC_FORCE_PROTO_UFI)) {
+		proto &= ~UMASS_PROTO_COMMAND;
+		proto |= UMASS_PROTO_UFI;
+	} else if (usb_test_quirk(uaa, UQ_MSC_FORCE_PROTO_RBC)) {
+		proto &= ~UMASS_PROTO_COMMAND;
+		proto |= UMASS_PROTO_RBC;
+	}
+
+	/* Check if the protocol is invalid */
+
+	if ((proto & UMASS_PROTO_COMMAND) == 0) {
+		ret.error = ENXIO;
 		goto done;
 	}
-	/*
-	 * Check the list of supported devices for a match. While looking,
-	 * check for wildcarded and fully matched. First match wins.
-	 */
-	for (; udd->vid != VID_EOT; udd++) {
-		if (((udd->vid == uaa->info.idVendor) ||
-		    (udd->vid == VID_WILDCARD)) &&
-		    ((udd->pid == uaa->info.idProduct) ||
-		    (udd->pid == PID_WILDCARD))) {
-			if (udd->rid == RID_WILDCARD) {
-				ret.proto = udd->proto;
-				ret.quirks = udd->quirks;
-				if (ret.proto == UMASS_PROTO_DEFAULT)
-					goto default_proto;
-				else
-					goto done;
-			} else if (udd->rid == uaa->info.bcdDevice) {
-				ret.proto = udd->proto;
-				ret.quirks = udd->quirks;
-				if (ret.proto == UMASS_PROTO_DEFAULT)
-					goto default_proto;
-				else
-					goto done;
-			}		/* else RID does not match */
-		}
+
+	if ((proto & UMASS_PROTO_WIRE) == 0) {
+		ret.error = ENXIO;
+		goto done;
 	}
 
-default_proto:
-	ret.proto = umass_get_proto(uaa->iface);
-	if (ret.proto == 0)
-		ret.error = ENXIO;
-	else
-		ret.error = 0;
+	/* Search for quirks */
+
+	if (usb_test_quirk(uaa, UQ_MSC_NO_TEST_UNIT_READY))
+		quirks |= NO_TEST_UNIT_READY;
+	if (usb_test_quirk(uaa, UQ_MSC_NO_RS_CLEAR_UA))
+		quirks |= RS_NO_CLEAR_UA;
+	if (usb_test_quirk(uaa, UQ_MSC_NO_START_STOP))
+		quirks |= NO_START_STOP;
+	if (usb_test_quirk(uaa, UQ_MSC_NO_GETMAXLUN))
+		quirks |= NO_GETMAXLUN;
+	if (usb_test_quirk(uaa, UQ_MSC_NO_INQUIRY))
+		quirks |= NO_INQUIRY;
+	if (usb_test_quirk(uaa, UQ_MSC_NO_INQUIRY_EVPD))
+		quirks |= NO_INQUIRY_EVPD;
+	if (usb_test_quirk(uaa, UQ_MSC_NO_SYNC_CACHE))
+		quirks |= NO_SYNCHRONIZE_CACHE;
+	if (usb_test_quirk(uaa, UQ_MSC_SHUTTLE_INIT))
+		quirks |= SHUTTLE_INIT;
+	if (usb_test_quirk(uaa, UQ_MSC_ALT_IFACE_1))
+		quirks |= ALT_IFACE_1;
+	if (usb_test_quirk(uaa, UQ_MSC_FLOPPY_SPEED))
+		quirks |= FLOPPY_SPEED;
+	if (usb_test_quirk(uaa, UQ_MSC_IGNORE_RESIDUE))
+		quirks |= IGNORE_RESIDUE;
+	if (usb_test_quirk(uaa, UQ_MSC_WRONG_CSWSIG))
+		quirks |= WRONG_CSWSIG;
+	if (usb_test_quirk(uaa, UQ_MSC_RBC_PAD_TO_12))
+		quirks |= RBC_PAD_TO_12;
+	if (usb_test_quirk(uaa, UQ_MSC_READ_CAP_OFFBY1))
+		quirks |= READ_CAPACITY_OFFBY1;
+	if (usb_test_quirk(uaa, UQ_MSC_FORCE_SHORT_INQ))
+		quirks |= FORCE_SHORT_INQUIRY;
+
 done:
+	ret.quirks = quirks;
+	ret.proto = proto;
 	return (ret);
 }
 
@@ -2845,7 +2244,7 @@ umass_cam_detach_sim(struct umass_softc *sc)
 			sc->sc_sim->softc = UMASS_GONE;
 			cam_sim_free(sc->sc_sim, /* free_devq */ TRUE);
 		} else {
-			panic("%s: CAM layer is busy!\n",
+			panic("%s: CAM layer is busy\n",
 			    sc->sc_name);
 		}
 		sc->sc_sim = NULL;
diff --git a/sys/dev/usb/template/usb_template.c b/sys/dev/usb/template/usb_template.c
index d9e0dc16751..d3271b24f74 100644
--- a/sys/dev/usb/template/usb_template.c
+++ b/sys/dev/usb/template/usb_template.c
@@ -727,7 +727,7 @@ handle_endpoint_desc:
 				if ((pf->max_in_frame_size < wMaxPacketSize) ||
 				    (pf->max_out_frame_size < wMaxPacketSize)) {
 					DPRINTFN(0, "Endpoint profile %u "
-					    "has too small buffer!\n", ep_no);
+					    "has too small buffer\n", ep_no);
 					return (1);
 				}
 			} else if (ed->bEndpointAddress & UE_DIR_IN) {
@@ -735,7 +735,7 @@ handle_endpoint_desc:
 				    (1 << (ep_no % 8));
 				if (pf->max_in_frame_size < wMaxPacketSize) {
 					DPRINTFN(0, "Endpoint profile %u "
-					    "has too small buffer!\n", ep_no);
+					    "has too small buffer\n", ep_no);
 					return (1);
 				}
 			} else {
@@ -743,7 +743,7 @@ handle_endpoint_desc:
 				    (1 << (ep_no % 8));
 				if (pf->max_out_frame_size < wMaxPacketSize) {
 					DPRINTFN(0, "Endpoint profile %u "
-					    "has too small buffer!\n", ep_no);
+					    "has too small buffer\n", ep_no);
 					return (1);
 				}
 			}
diff --git a/sys/dev/usb/usb_busdma.c b/sys/dev/usb/usb_busdma.c
index 177b94faceb..45482e25da7 100644
--- a/sys/dev/usb/usb_busdma.c
+++ b/sys/dev/usb/usb_busdma.c
@@ -445,7 +445,7 @@ usb_pc_common_mem_cb(void *arg, bus_dma_segment_t *segs,
 		/*
 		 * This check verifies that the physical address is correct:
 		 */
-		DPRINTFN(0, "Page offset was not preserved!\n");
+		DPRINTFN(0, "Page offset was not preserved\n");
 		error = 1;
 		goto done;
 	}
@@ -764,8 +764,8 @@ usb_dma_tag_find(struct usb_dma_parent_tag *udpt,
 	struct usb_dma_tag *udt;
 	uint8_t nudt;
 
-	USB_ASSERT(align > 0, ("Invalid parameter align = 0!\n"));
-	USB_ASSERT(size > 0, ("Invalid parameter size = 0!\n"));
+	USB_ASSERT(align > 0, ("Invalid parameter align = 0\n"));
+	USB_ASSERT(size > 0, ("Invalid parameter size = 0\n"));
 
 	udt = udpt->utag_first;
 	nudt = udpt->utag_max;
diff --git a/sys/dev/usb/usb_core.h b/sys/dev/usb/usb_core.h
index 7541adbc703..3dfd0d1ab6c 100644
--- a/sys/dev/usb/usb_core.h
+++ b/sys/dev/usb/usb_core.h
@@ -161,9 +161,6 @@ struct usb_xfer {
 	uint8_t	address;		/* physical USB address */
 	uint8_t	endpointno;		/* physical USB endpoint */
 	uint8_t	max_packet_count;
-	uint8_t	usb_smask;
-	uint8_t	usb_cmask;
-	uint8_t	usb_uframe;
 	uint8_t	usb_state;
 	uint8_t fps_shift;		/* down shift of FPS, 0..3 */
 
diff --git a/sys/dev/usb/usb_debug.c b/sys/dev/usb/usb_debug.c
index 7f1e4e921a0..64c3a08b412 100644
--- a/sys/dev/usb/usb_debug.c
+++ b/sys/dev/usb/usb_debug.c
@@ -67,6 +67,8 @@ SYSCTL_NODE(_hw, OID_AUTO, usb, CTLFLAG_RW, 0, "USB debugging");
 SYSCTL_INT(_hw_usb, OID_AUTO, debug, CTLFLAG_RW,
     &usb_debug, 0, "Debug level");
 
+TUNABLE_INT("hw.usb.debug", &usb_debug);
+
 /*------------------------------------------------------------------------*
  *	usb_dump_iface
  *
diff --git a/sys/dev/usb/usb_debug.h b/sys/dev/usb/usb_debug.h
index dfe2edf55df..b6bfbcfca1a 100644
--- a/sys/dev/usb/usb_debug.h
+++ b/sys/dev/usb/usb_debug.h
@@ -35,11 +35,11 @@ extern int usb_debug;
 /* Check if USB debugging is enabled. */
 #ifdef USB_DEBUG_VAR
 #if (USB_DEBUG != 0)
-#define	DPRINTFN(n,fmt,...) do {				\
-  if ((USB_DEBUG_VAR) >= (n)) {				\
-    printf("%s:%u: " fmt,				\
-	   __FUNCTION__, __LINE__,## __VA_ARGS__);	\
-  }							\
+#define	DPRINTFN(n,fmt,...) do {		\
+  if ((USB_DEBUG_VAR) >= (n)) {			\
+    printf("%s: " fmt,				\
+	   __FUNCTION__,## __VA_ARGS__);	\
+  }						\
 } while (0)
 #define	DPRINTF(...)	DPRINTFN(1, __VA_ARGS__)
 #else
diff --git a/sys/dev/usb/usb_dev.c b/sys/dev/usb/usb_dev.c
index c828b24057f..dffabad29b9 100644
--- a/sys/dev/usb/usb_dev.c
+++ b/sys/dev/usb/usb_dev.c
@@ -85,6 +85,8 @@ static int usb_fifo_debug = 0;
 SYSCTL_NODE(_hw_usb, OID_AUTO, dev, CTLFLAG_RW, 0, "USB device");
 SYSCTL_INT(_hw_usb_dev, OID_AUTO, debug, CTLFLAG_RW,
     &usb_fifo_debug, 0, "Debug Level");
+
+TUNABLE_INT("hw.usb.dev.debug", &usb_fifo_debug);
 #endif
 
 #if ((__FreeBSD_version >= 700001) || (__FreeBSD_version == 0) || \
@@ -573,7 +575,7 @@ usb_fifo_free(struct usb_fifo *f)
 	    (f->udev->fifo[f->fifo_index] == f)) {
 		f->udev->fifo[f->fifo_index] = NULL;
 	} else {
-		DPRINTFN(0, "USB FIFO %p has not been linked!\n", f);
+		DPRINTFN(0, "USB FIFO %p has not been linked\n", f);
 	}
 
 	/* decrease refcount */
@@ -950,7 +952,7 @@ usb_dev_init_post(void *arg)
 	usb_dev = make_dev(&usb_static_devsw, 0, UID_ROOT, GID_OPERATOR,
 	    0644, USB_DEVICE_NAME);
 	if (usb_dev == NULL) {
-		DPRINTFN(0, "Could not create usb bus device!\n");
+		DPRINTFN(0, "Could not create usb bus device\n");
 	}
 }
 
diff --git a/sys/dev/usb/usb_device.c b/sys/dev/usb/usb_device.c
index 4339cb24777..7fdb7e4a2c2 100644
--- a/sys/dev/usb/usb_device.c
+++ b/sys/dev/usb/usb_device.c
@@ -665,7 +665,7 @@ usb_config_parse(struct usb_device *udev, uint8_t iface_index, uint8_t cmd)
 			/* look for matching endpoints */
 			if ((iface_index == USB_IFACE_INDEX_ANY) ||
 			    (iface_index == ep->iface_index)) {
-				if (ep->refcount != 0) {
+				if (ep->refcount_alloc != 0) {
 					/*
 					 * This typically indicates a
 					 * more serious error.
@@ -1023,7 +1023,7 @@ usb_detach_device_sub(struct usb_device *udev, device_t *ppdev,
 			if (udev->flags.peer_suspended) {
 				err = DEVICE_RESUME(dev);
 				if (err) {
-					device_printf(dev, "Resume failed!\n");
+					device_printf(dev, "Resume failed\n");
 				}
 			}
 			if (device_detach(dev)) {
@@ -1038,7 +1038,7 @@ usb_detach_device_sub(struct usb_device *udev, device_t *ppdev,
 
 error:
 	/* Detach is not allowed to fail in the USB world */
-	panic("An USB driver would not detach!\n");
+	panic("A USB driver would not detach\n");
 }
 
 /*------------------------------------------------------------------------*
@@ -1131,7 +1131,7 @@ usb_probe_and_attach_sub(struct usb_device *udev,
 			 * to device_detach().  USB devices should
 			 * never fail on detach!
 			 */
-			panic("device_delete_child() failed!\n");
+			panic("device_delete_child() failed\n");
 		}
 	}
 	if (uaa->temp_dev == NULL) {
@@ -1140,7 +1140,7 @@ usb_probe_and_attach_sub(struct usb_device *udev,
 		uaa->temp_dev = device_add_child(udev->parent_dev, NULL, -1);
 		if (uaa->temp_dev == NULL) {
 			device_printf(udev->parent_dev,
-			    "Device creation failed!\n");
+			    "Device creation failed\n");
 			return (1);	/* failure */
 		}
 		device_set_ivars(uaa->temp_dev, uaa);
@@ -1204,6 +1204,7 @@ usb_init_attach_arg(struct usb_device *udev,
 	uaa->device = udev;
 	uaa->usb_mode = udev->flags.usb_mode;
 	uaa->port = udev->port_no;
+	uaa->dev_state = UAA_DEV_READY;
 
 	uaa->info.idVendor = UGETW(udev->ddesc.idVendor);
 	uaa->info.idProduct = UGETW(udev->ddesc.idProduct);
@@ -1320,7 +1321,7 @@ usb_probe_and_attach(struct usb_device *udev, uint8_t iface_index)
 		/* remove the last created child; it is unused */
 
 		if (device_delete_child(udev->parent_dev, uaa.temp_dev)) {
-			DPRINTFN(0, "device delete child failed!\n");
+			DPRINTFN(0, "device delete child failed\n");
 		}
 	}
 done:
@@ -1353,7 +1354,7 @@ usb_suspend_resume_sub(struct usb_device *udev, device_t dev, uint8_t do_suspend
 		err = DEVICE_RESUME(dev);
 	}
 	if (err) {
-		device_printf(dev, "%s failed!\n",
+		device_printf(dev, "%s failed\n",
 		    do_suspend ? "Suspend" : "Resume");
 	}
 }
@@ -1453,6 +1454,9 @@ usb_alloc_device(device_t parent_dev, struct usb_bus *bus,
 	size_t scratch_size;
 	usb_error_t err;
 	uint8_t device_index;
+	uint8_t config_index;
+	uint8_t config_quirk;
+	uint8_t set_config_failed;
 
 	DPRINTF("parent_dev=%p, bus=%p, parent_hub=%p, depth=%u, "
 	    "port_index=%u, port_no=%u, speed=%u, usb_mode=%u\n",
@@ -1473,13 +1477,13 @@ usb_alloc_device(device_t parent_dev, struct usb_bus *bus,
 
 	if (device_index == bus->devices_max) {
 		device_printf(bus->bdev,
-		    "No free USB device index for new device!\n");
+		    "No free USB device index for new device\n");
 		return (NULL);
 	}
 
 	if (depth > 0x10) {
 		device_printf(bus->bdev,
-		    "Invalid device depth!\n");
+		    "Invalid device depth\n");
 		return (NULL);
 	}
 	udev = malloc(sizeof(*udev), M_USB, M_WAITOK | M_ZERO);
@@ -1631,7 +1635,7 @@ usb_alloc_device(device_t parent_dev, struct usb_bus *bus,
 	    USB_MAX_IPACKET, USB_MAX_IPACKET, 0, UDESC_DEVICE, 0, 0);
 	if (err) {
 		DPRINTFN(0, "getting device descriptor "
-		    "at addr %d failed, %s!\n", udev->address,
+		    "at addr %d failed, %s\n", udev->address,
 		    usbd_errstr(err));
 		/* XXX try to re-enumerate the device */
 		err = usbd_req_re_enumerate(udev, NULL);
@@ -1732,96 +1736,91 @@ usb_alloc_device(device_t parent_dev, struct usb_bus *bus,
 	/* fetch the vendor and product strings from the device */
 	usbd_set_device_strings(udev);
 
-	if (udev->flags.usb_mode == USB_MODE_HOST) {
-		uint8_t config_index;
-		uint8_t config_quirk;
-		uint8_t set_config_failed = 0;
+	if (udev->flags.usb_mode == USB_MODE_DEVICE) {
+		/* USB device mode setup is complete */
+		err = 0;
+		goto config_done;
+	}
 
-		/*
-		 * Most USB devices should attach to config index 0 by
-		 * default
-		 */
-		if (usb_test_quirk(&uaa, UQ_CFG_INDEX_0)) {
-			config_index = 0;
-			config_quirk = 1;
-		} else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_1)) {
-			config_index = 1;
-			config_quirk = 1;
-		} else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_2)) {
-			config_index = 2;
-			config_quirk = 1;
-		} else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_3)) {
-			config_index = 3;
-			config_quirk = 1;
-		} else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_4)) {
-			config_index = 4;
-			config_quirk = 1;
-		} else {
-			config_index = 0;
-			config_quirk = 0;
-		}
+	/*
+	 * Most USB devices should attach to config index 0 by
+	 * default
+	 */
+	if (usb_test_quirk(&uaa, UQ_CFG_INDEX_0)) {
+		config_index = 0;
+		config_quirk = 1;
+	} else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_1)) {
+		config_index = 1;
+		config_quirk = 1;
+	} else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_2)) {
+		config_index = 2;
+		config_quirk = 1;
+	} else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_3)) {
+		config_index = 3;
+		config_quirk = 1;
+	} else if (usb_test_quirk(&uaa, UQ_CFG_INDEX_4)) {
+		config_index = 4;
+		config_quirk = 1;
+	} else {
+		config_index = 0;
+		config_quirk = 0;
+	}
 
+	set_config_failed = 0;
 repeat_set_config:
 
-		DPRINTF("setting config %u\n", config_index);
+	DPRINTF("setting config %u\n", config_index);
 
-		/* get the USB device configured */
-		err = usbd_set_config_index(udev, config_index);
-		if (err) {
-			if (udev->ddesc.bNumConfigurations != 0) {
-				if (!set_config_failed) {
-					set_config_failed = 1;
-					/* XXX try to re-enumerate the device */
-					err = usbd_req_re_enumerate(
-					    udev, NULL);
-					if (err == 0)
-					    goto repeat_set_config;
-				}
-				DPRINTFN(0, "Failure selecting "
-				    "configuration index %u: %s, port %u, "
-				    "addr %u (ignored)\n",
-				    config_index, usbd_errstr(err), udev->port_no,
-				    udev->address);
+	/* get the USB device configured */
+	err = usbd_set_config_index(udev, config_index);
+	if (err) {
+		if (udev->ddesc.bNumConfigurations != 0) {
+			if (!set_config_failed) {
+				set_config_failed = 1;
+				/* XXX try to re-enumerate the device */
+				err = usbd_req_re_enumerate(udev, NULL);
+				if (err == 0)
+					goto repeat_set_config;
 			}
+			DPRINTFN(0, "Failure selecting configuration index %u:"
+			    "%s, port %u, addr %u (ignored)\n",
+			    config_index, usbd_errstr(err), udev->port_no,
+			    udev->address);
+		}
+		/*
+		 * Some USB devices do not have any configurations. Ignore any
+		 * set config failures!
+		 */
+		err = 0;
+		goto config_done;
+	}
+	if (!config_quirk && config_index + 1 < udev->ddesc.bNumConfigurations) {
+		if ((udev->cdesc->bNumInterface < 2) &&
+		    usbd_get_no_descriptors(udev->cdesc, UDESC_ENDPOINT) == 0) {
+			DPRINTFN(0, "Found no endpoints, trying next config\n");
+			config_index++;
+			goto repeat_set_config;
+		}
+		if (config_index == 0) {
 			/*
-			 * Some USB devices do not have any
-			 * configurations. Ignore any set config
-			 * failures!
+			 * Try to figure out if we have an
+			 * auto-install disk there:
 			 */
-			err = 0;
-		} else if (config_quirk) {
-			/* user quirk selects configuration index */
-		} else if ((config_index + 1) < udev->ddesc.bNumConfigurations) {
-
-			if ((udev->cdesc->bNumInterface < 2) &&
-			    (usbd_get_no_descriptors(udev->cdesc,
-			    UDESC_ENDPOINT) == 0)) {
-				DPRINTFN(0, "Found no endpoints "
-				    "(trying next config)!\n");
+			if (usb_test_autoinstall(udev, 0, 0) == 0) {
+				DPRINTFN(0, "Found possible auto-install "
+				    "disk (trying next config)\n");
 				config_index++;
 				goto repeat_set_config;
 			}
-			if (config_index == 0) {
-				/*
-				 * Try to figure out if we have an
-				 * auto-install disk there:
-				 */
-				if (usb_test_autoinstall(udev, 0, 0) == 0) {
-					DPRINTFN(0, "Found possible auto-install "
-					    "disk (trying next config)\n");
-					config_index++;
-					goto repeat_set_config;
-				}
-			}
-		} else if (usb_test_huawei_autoinst_p(udev, &uaa) == 0) {
-			DPRINTFN(0, "Found Huawei auto-install disk!\n");
-			/* leave device unconfigured */
-			usb_unconfigure(udev, 0);
 		}
-	} else {
-		err = 0;		/* set success */
+	}
+	EVENTHANDLER_INVOKE(usb_dev_configured, udev, &uaa);
+	if (uaa.dev_state != UAA_DEV_READY) {
+		/* leave device unconfigured */
+		usb_unconfigure(udev, 0);
 	}
 
+config_done:
 	DPRINTF("new dev (addr %d), udev=%p, parent_hub=%p\n",
 	    udev->address, udev, udev->parent_hub);
 
diff --git a/sys/dev/usb/usb_dynamic.c b/sys/dev/usb/usb_dynamic.c
index b64712fc340..add01ce282c 100644
--- a/sys/dev/usb/usb_dynamic.c
+++ b/sys/dev/usb/usb_dynamic.c
@@ -57,7 +57,6 @@ static usb_handle_req_t usb_temp_get_desc_w;
 static usb_temp_setup_by_index_t usb_temp_setup_by_index_w;
 static usb_temp_unsetup_t usb_temp_unsetup_w;
 static usb_test_quirk_t usb_test_quirk_w;
-static usb_test_huawei_autoinst_t usb_test_huawei_autoinst_w;
 static usb_quirk_ioctl_t usb_quirk_ioctl_w;
 
 /* global variables */
@@ -65,7 +64,6 @@ usb_handle_req_t *usb_temp_get_desc_p = &usb_temp_get_desc_w;
 usb_temp_setup_by_index_t *usb_temp_setup_by_index_p = &usb_temp_setup_by_index_w;
 usb_temp_unsetup_t *usb_temp_unsetup_p = &usb_temp_unsetup_w;
 usb_test_quirk_t *usb_test_quirk_p = &usb_test_quirk_w;
-usb_test_huawei_autoinst_t *usb_test_huawei_autoinst_p = &usb_test_huawei_autoinst_w;
 usb_quirk_ioctl_t *usb_quirk_ioctl_p = &usb_quirk_ioctl_w;
 devclass_t usb_devclass_ptr = NULL;
 
@@ -105,13 +103,6 @@ usb_temp_unsetup_w(struct usb_device *udev)
 	}
 }
 
-static usb_error_t
-usb_test_huawei_autoinst_w(struct usb_device *udev,
-    struct usb_attach_arg *uaa)
-{
-	return (USB_ERR_INVAL);
-}
-
 void
 usb_quirk_unload(void *arg)
 {
@@ -156,17 +147,3 @@ usb_bus_unload(void *arg)
 
 	pause("WAIT", hz);
 }
-
-void
-usb_test_huawei_unload(void *arg)
-{
-	/* reset function pointers */
-
-	usb_test_huawei_autoinst_p = &usb_test_huawei_autoinst_w;
-
-	/* wait for CPU to exit the loaded functions, if any */
-
-	/* XXX this is a tradeoff */
-
-	pause("WAIT", 16*hz);
-}
diff --git a/sys/dev/usb/usb_dynamic.h b/sys/dev/usb/usb_dynamic.h
index f8b7caf69f3..568494204c1 100644
--- a/sys/dev/usb/usb_dynamic.h
+++ b/sys/dev/usb/usb_dynamic.h
@@ -37,8 +37,6 @@ struct usb_device_request;
 
 typedef usb_error_t	(usb_temp_setup_by_index_t)(struct usb_device *udev,
 			    uint16_t index);
-typedef usb_error_t	(usb_test_huawei_autoinst_t)(struct usb_device *udev, 
-			    struct usb_attach_arg *uaa);
 typedef uint8_t		(usb_test_quirk_t)(const struct usbd_lookup_info *info,
 			    uint16_t quirk);
 typedef int		(usb_quirk_ioctl_t)(unsigned long cmd, caddr_t data,
@@ -51,13 +49,11 @@ extern usb_handle_req_t *usb_temp_get_desc_p;
 extern usb_temp_setup_by_index_t *usb_temp_setup_by_index_p;
 extern usb_temp_unsetup_t *usb_temp_unsetup_p;
 extern usb_test_quirk_t *usb_test_quirk_p;
-extern usb_test_huawei_autoinst_t *usb_test_huawei_autoinst_p;
 extern usb_quirk_ioctl_t *usb_quirk_ioctl_p;
 extern devclass_t usb_devclass_ptr;
 
 /* function prototypes */
 
-void	usb_test_huawei_unload(void *);
 void	usb_temp_unload(void *);
 void	usb_quirk_unload(void *);
 void	usb_bus_unload(void *);
diff --git a/sys/dev/usb/usb_generic.c b/sys/dev/usb/usb_generic.c
index 5990cd5ff94..9fc0cc7eef2 100644
--- a/sys/dev/usb/usb_generic.c
+++ b/sys/dev/usb/usb_generic.c
@@ -130,6 +130,8 @@ static int ugen_debug = 0;
 SYSCTL_NODE(_hw_usb, OID_AUTO, ugen, CTLFLAG_RW, 0, "USB generic");
 SYSCTL_INT(_hw_usb_ugen, OID_AUTO, debug, CTLFLAG_RW, &ugen_debug,
     0, "Debug level");
+
+TUNABLE_INT("hw.usb.ugen.debug", &ugen_debug);
 #endif
 
 
diff --git a/sys/dev/usb/usb_hid.c b/sys/dev/usb/usb_hid.c
index b9d61c91c39..f13bbf1b1b4 100644
--- a/sys/dev/usb/usb_hid.c
+++ b/sys/dev/usb/usb_hid.c
@@ -450,7 +450,7 @@ hid_get_item(struct hid_data *s, struct hid_item *h)
 					c = &s->cur[s->pushlevel];
 				} else {
 					DPRINTFN(0, "Cannot push "
-					    "item @ %d!\n", s->pushlevel);
+					    "item @ %d\n", s->pushlevel);
 				}
 				break;
 			case 11:	/* Pop */
@@ -468,7 +468,7 @@ hid_get_item(struct hid_data *s, struct hid_item *h)
 					c->loc.count = 0;
 				} else {
 					DPRINTFN(0, "Cannot pop "
-					    "item @ %d!\n", s->pushlevel);
+					    "item @ %d\n", s->pushlevel);
 				}
 				break;
 			default:
@@ -490,7 +490,7 @@ hid_get_item(struct hid_data *s, struct hid_item *h)
 					s->usages_max[s->nusage] = dval;
 					s->nusage ++;
 				} else {
-					DPRINTFN(0, "max usage reached!\n");
+					DPRINTFN(0, "max usage reached\n");
 				}
 
 				/* clear any pending usage sets */
@@ -525,7 +525,7 @@ hid_get_item(struct hid_data *s, struct hid_item *h)
 					    c->usage_maximum;
 					s->nusage ++;
 				} else {
-					DPRINTFN(0, "Usage set dropped!\n");
+					DPRINTFN(0, "Usage set dropped\n");
 				}
 				s->susage = 0;
 				break;
diff --git a/sys/dev/usb/usb_hub.c b/sys/dev/usb/usb_hub.c
index 07a0970b33b..97797963269 100644
--- a/sys/dev/usb/usb_hub.c
+++ b/sys/dev/usb/usb_hub.c
@@ -79,6 +79,8 @@ static int uhub_debug = 0;
 SYSCTL_NODE(_hw_usb, OID_AUTO, uhub, CTLFLAG_RW, 0, "USB HUB");
 SYSCTL_INT(_hw_usb_uhub, OID_AUTO, debug, CTLFLAG_RW, &uhub_debug, 0,
     "Debug level");
+
+TUNABLE_INT("hw.usb.uhub.debug", &uhub_debug);
 #endif
 
 #if USB_HAVE_POWERD
@@ -383,7 +385,7 @@ repeat:
 		    (!(sc->sc_st.port_status & UPS_CURRENT_CONNECT_STATUS))) {
 			if (timeout) {
 				DPRINTFN(0, "giving up port reset "
-				    "- device vanished!\n");
+				    "- device vanished\n");
 				goto error;
 			}
 			timeout = 1;
@@ -433,7 +435,7 @@ repeat:
 	child = usb_alloc_device(sc->sc_dev, udev->bus, udev,
 	    udev->depth + 1, portno - 1, portno, speed, mode);
 	if (child == NULL) {
-		DPRINTFN(0, "could not allocate new device!\n");
+		DPRINTFN(0, "could not allocate new device\n");
 		goto error;
 	}
 	return (0);			/* success */
@@ -709,14 +711,14 @@ uhub_attach(device_t dev)
 	    parent_hub->flags.self_powered : 0);
 
 	if (udev->depth > USB_HUB_MAX_DEPTH) {
-		DPRINTFN(0, "hub depth, %d, exceeded. HUB ignored!\n",
+		DPRINTFN(0, "hub depth, %d, exceeded. HUB ignored\n",
 		    USB_HUB_MAX_DEPTH);
 		goto error;
 	}
 	if (!udev->flags.self_powered && parent_hub &&
 	    (!parent_hub->flags.self_powered)) {
 		DPRINTFN(0, "bus powered HUB connected to "
-		    "bus powered HUB. HUB ignored!\n");
+		    "bus powered HUB. HUB ignored\n");
 		goto error;
 	}
 	/* get HUB descriptor */
@@ -738,11 +740,11 @@ uhub_attach(device_t dev)
 		goto error;
 	}
 	if (hubdesc.bNbrPorts != nports) {
-		DPRINTFN(0, "number of ports changed!\n");
+		DPRINTFN(0, "number of ports changed\n");
 		goto error;
 	}
 	if (nports == 0) {
-		DPRINTFN(0, "portless HUB!\n");
+		DPRINTFN(0, "portless HUB\n");
 		goto error;
 	}
 	hub = malloc(sizeof(hub[0]) + (sizeof(hub->ports[0]) * nports),
@@ -782,7 +784,7 @@ uhub_attach(device_t dev)
 	}
 	if (err) {
 		DPRINTFN(0, "cannot setup interrupt transfer, "
-		    "errstr=%s!\n", usbd_errstr(err));
+		    "errstr=%s\n", usbd_errstr(err));
 		goto error;
 	}
 	/* wait with power off for a while */
@@ -1106,43 +1108,62 @@ done:
  *   The best Transaction Translation slot for an interrupt endpoint.
  *------------------------------------------------------------------------*/
 static uint8_t
-usb_intr_find_best_slot(usb_size_t *ptr, uint8_t start, uint8_t end)
+usb_intr_find_best_slot(usb_size_t *ptr, uint8_t start,
+    uint8_t end, uint8_t mask)
 {
-	usb_size_t max = 0 - 1;
+	usb_size_t min = 0 - 1;
+	usb_size_t sum;
 	uint8_t x;
 	uint8_t y;
+	uint8_t z;
 
 	y = 0;
 
 	/* find the last slot with lesser used bandwidth */
 
 	for (x = start; x < end; x++) {
-		if (max >= ptr[x]) {
-			max = ptr[x];
+
+		sum = 0;
+
+		/* compute sum of bandwidth */
+		for (z = x; z < end; z++) {
+			if (mask & (1U << (z - x)))
+				sum += ptr[z];
+		}
+
+		/* check if the current multi-slot is more optimal */
+		if (min >= sum) {
+			min = sum;
 			y = x;
 		}
+
+		/* check if the mask is about to be shifted out */
+		if (mask & (1U << (end - 1 - x)))
+			break;
 	}
 	return (y);
 }
 
 /*------------------------------------------------------------------------*
- *	usb_intr_schedule_adjust
+ *	usb_hs_bandwidth_adjust
  *
  * This function will update the bandwith usage for the microframe
  * having index "slot" by "len" bytes. "len" can be negative.  If the
  * "slot" argument is greater or equal to "USB_HS_MICRO_FRAMES_MAX"
  * the "slot" argument will be replaced by the slot having least used
- * bandwidth.
+ * bandwidth. The "mask" argument is used for multi-slot allocations.
  *
  * Returns:
- *   The slot on which the bandwidth update was done.
+ *    The slot in which the bandwidth update was done: 0..7
  *------------------------------------------------------------------------*/
-uint8_t
-usb_intr_schedule_adjust(struct usb_device *udev, int16_t len, uint8_t slot)
+static uint8_t
+usb_hs_bandwidth_adjust(struct usb_device *udev, int16_t len,
+    uint8_t slot, uint8_t mask)
 {
 	struct usb_bus *bus = udev->bus;
 	struct usb_hub *hub;
 	enum usb_dev_speed speed;
+	uint8_t x;
 
 	USB_BUS_LOCK_ASSERT(bus, MA_OWNED);
 
@@ -1164,22 +1185,156 @@ usb_intr_schedule_adjust(struct usb_device *udev, int16_t len, uint8_t slot)
 		hub = udev->parent_hs_hub->hub;
 		if (slot >= USB_HS_MICRO_FRAMES_MAX) {
 			slot = usb_intr_find_best_slot(hub->uframe_usage,
-			    USB_FS_ISOC_UFRAME_MAX, 6);
+			    USB_FS_ISOC_UFRAME_MAX, 6, mask);
+		}
+		for (x = slot; x < 8; x++) {
+			if (mask & (1U << (x - slot))) {
+				hub->uframe_usage[x] += len;
+				bus->uframe_usage[x] += len;
+			}
 		}
-		hub->uframe_usage[slot] += len;
-		bus->uframe_usage[slot] += len;
 		break;
 	default:
 		if (slot >= USB_HS_MICRO_FRAMES_MAX) {
 			slot = usb_intr_find_best_slot(bus->uframe_usage, 0,
-			    USB_HS_MICRO_FRAMES_MAX);
+			    USB_HS_MICRO_FRAMES_MAX, mask);
+		}
+		for (x = slot; x < 8; x++) {
+			if (mask & (1U << (x - slot))) {
+				bus->uframe_usage[x] += len;
+			}
 		}
-		bus->uframe_usage[slot] += len;
 		break;
 	}
 	return (slot);
 }
 
+/*------------------------------------------------------------------------*
+ *	usb_hs_bandwidth_alloc
+ *
+ * This function is a wrapper function for "usb_hs_bandwidth_adjust()".
+ *------------------------------------------------------------------------*/
+void
+usb_hs_bandwidth_alloc(struct usb_xfer *xfer)
+{
+	struct usb_device *udev;
+	uint8_t slot;
+	uint8_t mask;
+	uint8_t speed;
+
+	udev = xfer->xroot->udev;
+
+	if (udev->flags.usb_mode != USB_MODE_HOST)
+		return;		/* not supported */
+
+	xfer->endpoint->refcount_bw++;
+	if (xfer->endpoint->refcount_bw != 1)
+		return;		/* already allocated */
+
+	speed = usbd_get_speed(udev);
+
+	switch (xfer->endpoint->edesc->bmAttributes & UE_XFERTYPE) {
+	case UE_INTERRUPT:
+		/* allocate a microframe slot */
+
+		mask = 0x01;
+		slot = usb_hs_bandwidth_adjust(udev,
+		    xfer->max_frame_size, USB_HS_MICRO_FRAMES_MAX, mask);
+
+		xfer->endpoint->usb_uframe = slot;
+		xfer->endpoint->usb_smask = mask << slot;
+
+		if ((speed != USB_SPEED_FULL) &&
+		    (speed != USB_SPEED_LOW)) {
+			xfer->endpoint->usb_cmask = 0x00 ;
+		} else {
+			xfer->endpoint->usb_cmask = (-(0x04 << slot)) & 0xFE;
+		}
+		break;
+
+	case UE_ISOCHRONOUS:
+		switch (usbd_xfer_get_fps_shift(xfer)) {
+		case 0:
+			mask = 0xFF;
+			break;
+		case 1:
+			mask = 0x55;
+			break;
+		case 2:
+			mask = 0x11;
+			break;
+		default:
+			mask = 0x01;
+			break;
+		}
+
+		/* allocate a microframe multi-slot */
+
+		slot = usb_hs_bandwidth_adjust(udev,
+		    xfer->max_frame_size, USB_HS_MICRO_FRAMES_MAX, mask);
+
+		xfer->endpoint->usb_uframe = slot;
+		xfer->endpoint->usb_cmask = 0;
+		xfer->endpoint->usb_smask = mask << slot;
+		break;
+
+	default:
+		xfer->endpoint->usb_uframe = 0;
+		xfer->endpoint->usb_cmask = 0;
+		xfer->endpoint->usb_smask = 0;
+		break;
+	}
+
+	DPRINTFN(11, "slot=%d, mask=0x%02x\n", 
+	    xfer->endpoint->usb_uframe, 
+	    xfer->endpoint->usb_smask >> xfer->endpoint->usb_uframe);
+}
+
+/*------------------------------------------------------------------------*
+ *	usb_hs_bandwidth_free
+ *
+ * This function is a wrapper function for "usb_hs_bandwidth_adjust()".
+ *------------------------------------------------------------------------*/
+void
+usb_hs_bandwidth_free(struct usb_xfer *xfer)
+{
+	struct usb_device *udev;
+	uint8_t slot;
+	uint8_t mask;
+
+	udev = xfer->xroot->udev;
+
+	if (udev->flags.usb_mode != USB_MODE_HOST)
+		return;		/* not supported */
+
+	xfer->endpoint->refcount_bw--;
+	if (xfer->endpoint->refcount_bw != 0)
+		return;		/* still allocated */
+
+	switch (xfer->endpoint->edesc->bmAttributes & UE_XFERTYPE) {
+	case UE_INTERRUPT:
+	case UE_ISOCHRONOUS:
+
+		slot = xfer->endpoint->usb_uframe;
+		mask = xfer->endpoint->usb_smask;
+
+		/* free microframe slot(s): */ 	  
+		usb_hs_bandwidth_adjust(udev,
+		    -xfer->max_frame_size, slot, mask >> slot);
+
+		DPRINTFN(11, "slot=%d, mask=0x%02x\n", 
+		    slot, mask >> slot);
+
+		xfer->endpoint->usb_uframe = 0;
+		xfer->endpoint->usb_cmask = 0;
+		xfer->endpoint->usb_smask = 0;
+		break;
+
+	default:
+		break;
+	}
+}
+
 /*------------------------------------------------------------------------*
  *	usbd_fs_isoc_schedule_init_sub
  *
@@ -1769,7 +1924,7 @@ usb_dev_resume_peer(struct usb_device *udev)
 	err = usbd_req_clear_port_feature(udev->parent_hub,
 	    NULL, udev->port_no, UHF_PORT_SUSPEND);
 	if (err) {
-		DPRINTFN(0, "Resuming port failed!\n");
+		DPRINTFN(0, "Resuming port failed\n");
 		return;
 	}
 	/* resume settle time */
@@ -1817,7 +1972,7 @@ usb_dev_resume_peer(struct usb_device *udev)
 		    NULL, UF_DEVICE_REMOTE_WAKEUP);
 		if (err) {
 			DPRINTFN(0, "Clearing device "
-			    "remote wakeup failed: %s!\n",
+			    "remote wakeup failed: %s\n",
 			    usbd_errstr(err));
 		}
 	}
@@ -1887,7 +2042,7 @@ repeat:
 		    NULL, UF_DEVICE_REMOTE_WAKEUP);
 		if (err) {
 			DPRINTFN(0, "Setting device "
-			    "remote wakeup failed!\n");
+			    "remote wakeup failed\n");
 		}
 	}
 	USB_BUS_LOCK(udev->bus);
diff --git a/sys/dev/usb/usb_hub.h b/sys/dev/usb/usb_hub.h
index ceb0cc2283d..5b8dedf6e64 100644
--- a/sys/dev/usb/usb_hub.h
+++ b/sys/dev/usb/usb_hub.h
@@ -66,8 +66,8 @@ struct usb_hub {
 
 /* function prototypes */
 
-uint8_t	usb_intr_schedule_adjust(struct usb_device *udev, int16_t len,
-	    uint8_t slot);
+void	usb_hs_bandwidth_alloc(struct usb_xfer *xfer);
+void	usb_hs_bandwidth_free(struct usb_xfer *xfer);
 void	usbd_fs_isoc_schedule_init_all(struct usb_fs_isoc_schedule *fss);
 void	usb_bus_port_set_device(struct usb_bus *bus, struct usb_port *up,
 	    struct usb_device *udev, uint8_t device_index);
diff --git a/sys/dev/usb/usb_msctest.c b/sys/dev/usb/usb_msctest.c
index 4af0766eb18..61df5f1925d 100644
--- a/sys/dev/usb/usb_msctest.c
+++ b/sys/dev/usb/usb_msctest.c
@@ -284,7 +284,7 @@ bbb_command_callback(struct usb_xfer *xfer, usb_error_t error)
 		sc->cbw.bCDBLength = sc->cmd_len;
 		if (sc->cbw.bCDBLength > sizeof(sc->cbw.CBWCDB)) {
 			sc->cbw.bCDBLength = sizeof(sc->cbw.CBWCDB);
-			DPRINTFN(0, "Truncating long command!\n");
+			DPRINTFN(0, "Truncating long command\n");
 		}
 		usbd_xfer_set_frame_data(xfer, 0, &sc->cbw, sizeof(sc->cbw));
 		usbd_transfer_submit(xfer);
diff --git a/sys/dev/usb/usb_process.c b/sys/dev/usb/usb_process.c
index eb503fd18c4..53461d21502 100644
--- a/sys/dev/usb/usb_process.c
+++ b/sys/dev/usb/usb_process.c
@@ -83,6 +83,8 @@ static int usb_proc_debug;
 SYSCTL_NODE(_hw_usb, OID_AUTO, proc, CTLFLAG_RW, 0, "USB process");
 SYSCTL_INT(_hw_usb_proc, OID_AUTO, debug, CTLFLAG_RW, &usb_proc_debug, 0,
     "Debug level");
+
+TUNABLE_INT("hw.usb.proc.debug", &usb_proc_debug);
 #endif
 
 /*------------------------------------------------------------------------*
@@ -442,7 +444,7 @@ usb_proc_drain(struct usb_process *up)
 		if (cold) {
 			USB_THREAD_SUSPEND(up->up_ptr);
 			printf("WARNING: A USB process has "
-			    "been left suspended!\n");
+			    "been left suspended\n");
 			break;
 		}
 		cv_wait(&up->up_cv, up->up_mtx);
diff --git a/sys/dev/usb/usb_request.c b/sys/dev/usb/usb_request.c
index 8ccaa14f7a5..03745faa7a5 100644
--- a/sys/dev/usb/usb_request.c
+++ b/sys/dev/usb/usb_request.c
@@ -1549,7 +1549,7 @@ retry:
 	    USB_MAX_IPACKET, USB_MAX_IPACKET, 0, UDESC_DEVICE, 0, 0);
 	if (err) {
 		DPRINTFN(0, "getting device descriptor "
-		    "at addr %d failed, %s!\n", udev->address,
+		    "at addr %d failed, %s\n", udev->address,
 		    usbd_errstr(err));
 		goto done;
 	}
@@ -1557,7 +1557,7 @@ retry:
 	err = usbd_req_get_device_desc(udev, mtx, &udev->ddesc);
 	if (err) {
 		DPRINTFN(0, "addr=%d, getting device "
-		    "descriptor failed, %s!\n", old_addr, 
+		    "descriptor failed, %s\n", old_addr, 
 		    usbd_errstr(err));
 		goto done;
 	}
diff --git a/sys/dev/usb/usb_transfer.c b/sys/dev/usb/usb_transfer.c
index 4169ac8b5af..e7cb202aef5 100644
--- a/sys/dev/usb/usb_transfer.c
+++ b/sys/dev/usb/usb_transfer.c
@@ -201,9 +201,9 @@ usbd_transfer_setup_sub_malloc(struct usb_setup_params *parm,
 	usb_size_t r;
 	usb_size_t z;
 
-	USB_ASSERT(align > 1, ("Invalid alignment, 0x%08x!\n",
+	USB_ASSERT(align > 1, ("Invalid alignment, 0x%08x\n",
 	    align));
-	USB_ASSERT(size > 0, ("Invalid size = 0!\n"));
+	USB_ASSERT(size > 0, ("Invalid size = 0\n"));
 
 	if (count == 0) {
 		return (0);		/* nothing to allocate */
@@ -942,10 +942,18 @@ usbd_transfer_setup(struct usb_device *udev,
 				 * configuration and alternate setting
 				 * when USB transfers are in use on
 				 * the given interface. Search the USB
-				 * code for "endpoint->refcount" if you
+				 * code for "endpoint->refcount_alloc" if you
 				 * want more information.
 				 */
-				xfer->endpoint->refcount++;
+				USB_BUS_LOCK(info->bus);
+				if (xfer->endpoint->refcount_alloc >= USB_EP_REF_MAX)
+					parm.err = USB_ERR_INVAL;
+
+				xfer->endpoint->refcount_alloc++;
+
+				if (xfer->endpoint->refcount_alloc == 0)
+					panic("usbd_transfer_setup(): Refcount wrapped to zero\n");
+				USB_BUS_UNLOCK(info->bus);
 
 				/*
 				 * Whenever we set ppxfer[] then we
@@ -960,6 +968,10 @@ usbd_transfer_setup(struct usb_device *udev,
 				 */
 				ppxfer[n] = xfer;
 			}
+
+			/* check for error */
+			if (parm.err)
+				goto done;
 		}
 
 		if (buf || parm.err) {
@@ -1179,14 +1191,16 @@ usbd_transfer_unsetup(struct usb_xfer **pxfer, uint16_t n_setup)
 		 * NOTE: default endpoint does not have an
 		 * interface, even if endpoint->iface_index == 0
 		 */
-		xfer->endpoint->refcount--;
+		USB_BUS_LOCK(info->bus);
+		xfer->endpoint->refcount_alloc--;
+		USB_BUS_UNLOCK(info->bus);
 
 		usb_callout_drain(&xfer->timeout_handle);
 
 		USB_BUS_LOCK(info->bus);
 
 		USB_ASSERT(info->setup_refcount != 0, ("Invalid setup "
-		    "reference count!\n"));
+		    "reference count\n"));
 
 		info->setup_refcount--;
 
@@ -1339,7 +1353,7 @@ usbd_setup_ctrl_transfer(struct usb_xfer *xfer)
 
 	if (len > xfer->flags_int.control_rem) {
 		DPRINTFN(0, "Length (%d) greater than "
-		    "remaining length (%d)!\n", len,
+		    "remaining length (%d)\n", len,
 		    xfer->flags_int.control_rem);
 		goto error;
 	}
@@ -1352,7 +1366,7 @@ usbd_setup_ctrl_transfer(struct usb_xfer *xfer)
 		    (len != xfer->flags_int.control_rem) &&
 		    (xfer->nframes != 1)) {
 			DPRINTFN(0, "Short control transfer without "
-			    "force_short_xfer set!\n");
+			    "force_short_xfer set\n");
 			goto error;
 		}
 		xfer->flags_int.control_rem -= len;
@@ -1913,7 +1927,7 @@ usbd_xfer_set_frame_offset(struct usb_xfer *xfer, usb_frlength_t offset,
     usb_frcount_t frindex)
 {
 	KASSERT(!xfer->flags.ext_buffer, ("Cannot offset data frame "
-	    "when the USB buffer is external!\n"));
+	    "when the USB buffer is external\n"));
 	KASSERT(frindex < xfer->max_frame_count, ("frame index overflow"));
 
 	/* set virtual address to load */
@@ -2423,7 +2437,7 @@ usbd_pipe_start(struct usb_xfer_queue *pq)
 				    &udev->cs_msg[0], &udev->cs_msg[1]);
 			} else {
 				/* should not happen */
-				DPRINTFN(0, "No stall handler!\n");
+				DPRINTFN(0, "No stall handler\n");
 			}
 			/*
 			 * Check if we should stall. Some USB hardware
@@ -2566,7 +2580,7 @@ usbd_callback_wrapper_sub(struct usb_xfer *xfer)
 	if (xfer->aframes > xfer->nframes) {
 		if (xfer->error == 0) {
 			panic("%s: actual number of frames, %d, is "
-			    "greater than initial number of frames, %d!\n",
+			    "greater than initial number of frames, %d\n",
 			    __FUNCTION__, xfer->aframes, xfer->nframes);
 		} else {
 			/* just set some valid value */
@@ -2593,7 +2607,7 @@ usbd_callback_wrapper_sub(struct usb_xfer *xfer)
 	if (xfer->actlen > xfer->sumlen) {
 		if (xfer->error == 0) {
 			panic("%s: actual length, %d, is greater than "
-			    "initial length, %d!\n",
+			    "initial length, %d\n",
 			    __FUNCTION__, xfer->actlen, xfer->sumlen);
 		} else {
 			/* just set some valid value */
@@ -2795,7 +2809,7 @@ repeat:
 	    udev->default_xfer, usb_control_ep_cfg, USB_DEFAULT_XFER_MAX, NULL,
 	    udev->default_mtx)) {
 		DPRINTFN(0, "could not setup default "
-		    "USB transfer!\n");
+		    "USB transfer\n");
 	} else {
 		goto repeat;
 	}
diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs
index 9281462036d..b8c83f1983b 100644
--- a/sys/dev/usb/usbdevs
+++ b/sys/dev/usb/usbdevs
@@ -328,6 +328,7 @@ vendor AVISION		0x0638	Avision
 vendor TEAC		0x0644	TEAC
 vendor SGI		0x065e	Silicon Graphics
 vendor SANWASUPPLY	0x0663	Sanwa Supply
+vendor MEGATEC		0x0665	Megatec
 vendor LINKSYS		0x066b	Linksys
 vendor ACERSA		0x066e	Acer Semiconductor America
 vendor SIGMATEL		0x066f	Sigmatel
@@ -554,6 +555,7 @@ vendor PLX		0x10b5	PLX
 vendor ASANTE		0x10bd	Asante
 vendor SILABS		0x10c4	Silicon Labs
 vendor ACTIONS		0x10d6  Actions
+vendor AIRPLUS		0x1011  Airplus
 vendor ANALOG		0x1110	Analog Devices
 vendor TENX		0x1130	Ten X Technology, Inc.
 vendor ISSC		0x1131	Integrated System Solution Corp.
@@ -561,6 +563,7 @@ vendor JRC		0x1145	Japan Radio Company
 vendor SPHAIRON		0x114b	Sphairon Access Systems GmbH
 vendor DELORME		0x1163	DeLorme
 vendor SERVERWORKS	0x1166	ServerWorks
+vendor DLINK3		0x1186	Dlink
 vendor ACERCM		0x1189	Acer Communications & Multimedia
 vendor SIERRA		0x1199	Sierra Wireless
 vendor TOPFIELD		0x11db	Topfield Co., Ltd
@@ -609,6 +612,7 @@ vendor SPARKLAN		0x15a9	SparkLAN
 vendor SOHOWARE		0x15e8	SOHOware
 vendor UMAX		0x1606	UMAX Data Systems
 vendor INSIDEOUT	0x1608	Inside Out Networks
+vendor AMOI		0x1614	Amoi Electronics
 vendor GOODWAY		0x1631	Good Way Technology
 vendor ENTREGA		0x1645	Entrega
 vendor ACTIONTEC	0x1668	Actiontec Electronics
@@ -628,10 +632,15 @@ vendor LINKSYS3		0x1915	Linksys
 vendor QUALCOMMINC	0x19d2	Qualcomm, Incorporated
 vendor WCH2		0x1a86	QinHeng Electronics
 vendor STELERA		0x1a8d	Stelera Wireless
+vendor TCTMOBILE	0x1bbb  TCT Mobile
+vendor TELIT		0x1bc7  Telit
 vendor MPMAN		0x1cae	MpMan
 vendor DRESDENELEKTRONIK 0x1cf1 dresden elektronik
+vendor QISDA		0x1da5  Qisda
+vendor ALINK		0x1e0e  Alink
 vendor DLINK		0x2001	D-Link
 vendor PLANEX2		0x2019	Planex Communications
+vendor TLAYTECH		0x20b9	Tlay Tech
 vendor ERICSSON		0x2282	Ericsson
 vendor MOTOROLA2	0x22b8	Motorola
 vendor TRIPPLITE	0x2478	Tripp-Lite
@@ -658,6 +667,7 @@ vendor SITECOM		0x6189	Sitecom
 vendor ARKMICRO		0x6547	Arkmicro Technologies Inc.
 vendor 3COM2		0x6891	3Com
 vendor INTEL		0x8086	Intel
+vendor INTEL2		0x8087	Intel
 vendor SITECOM2		0x9016	Sitecom
 vendor MOSCHIP		0x9710	MosChip Semiconductor
 vendor MARVELL		0x9e88	Marvell Technology Group Ltd.
@@ -739,6 +749,7 @@ product ACERP ACERSCAN_620U	0x2060	Acerscan 620U
 product ACERP ACERSCAN_4300U	0x20b0	Benq 3300U/4300U
 product ACERP ACERSCAN_640BT	0x20be	Acerscan 640BT
 product ACERP ACERSCAN_1240U	0x20c0	Acerscan 1240U
+product ACERP H10		0x4068	AWL400 Wireless Adapter
 product ACERP ATAPI		0x6003	ATA/ATAPI Adapter
 product ACERP AWL300		0x9000	AWL300 Wireless Adapter
 product ACERP AWL400		0x9001	AWL400 Wireless Adapter
@@ -815,6 +826,9 @@ product AIPTEK POCKETCAM3M	0x2011	PocketCAM 3Mega
 product AIPTEK2 PENCAM_MEGA_1_3 0x504a	PenCam Mega 1.3
 product AIPTEK2 SUNPLUS_TECH	0x0c15	Sunplus Technology Inc.
 
+/* AirPlis products */
+product AIRPLUS MCD650		0x3198	MCD650 modem
+
 /* AirPrime products */
 product AIRPRIME PC5220		0x0112	CDMA Wireless PC Card
 
@@ -833,6 +847,11 @@ product ALCOR SM_KBD		0x9410	MicroConnectors/StrongMan Keyboard
 product ALCOR NEC_KBD_HUB	0x9472	NEC Kbd Hub
 product ALCOR AU6390	0x6390	AU6390 USB-IDE converter
 
+/* Alink products */
+product ALINK DWM652U5		0xce16	DWM-652
+product ALINK 3G		0x9000	3G modem
+product ALINK 3GU		0x9200	3G modem
+
 /* Altec Lansing products */
 product ALTEC ADA70		0x0070	ADA70 Speakers
 product ALTEC ASC495		0xff05	ASC495 Speakers
@@ -840,6 +859,11 @@ product ALTEC ASC495		0xff05	ASC495 Speakers
 /* Allied Telesyn International products */
 product ALLIEDTELESYN ATUSB100	0xb100	AT-USB100
 
+/* Amoi products */
+product AMOI H01		0x0800	H01 3G modem
+product AMOI H01A		0x7002	H01A 3G modem
+product AMOI H02		0x0802	H02 3G modem
+
 /* American Power Conversion products */
 product APC UPS			0x0002	Uninterruptible Power Supply
 
@@ -855,6 +879,7 @@ product ANCHOR EZUSB		0x2131	EZUSB
 product ANCHOR EZLINK		0x2720	EZLINK
 
 /* AnyData products */
+product ANYDATA ADU_620UW	0x6202	CDMA 2000 EV-DO USB Modem
 product ANYDATA ADU_E100X	0x6501	CDMA 2000 1xRTT/EV-DO USB Modem
 product ANYDATA ADU_500A	0x6502	CDMA 2000 EV-DO USB Modem
 
@@ -904,6 +929,7 @@ product ASANTE EA		0x1427	Ethernet
 product ASIX AX88172		0x1720	10/100 Ethernet
 product ASIX AX88178		0x1780	AX88178
 product ASIX AX88772		0x7720	AX88772
+product ASIX AX88772A		0x772a	AX88772A USB 2.0 10/100 Ethernet
 
 /* ASUS products */
 product ASUS WL167G		0x1707	WL-167g Wireless Adapter
@@ -915,6 +941,7 @@ product ASUS RT2573_2		0x1724	RT2573
 product ASUS LCM		0x1726	LCM display
 product ASUS P535		0x420f	ASUS P535 PDA
 product	ASUS GMSC		0x422f	ASUS Generic Mass Storage
+product ASUS RT2570		0x1706	RT2500USB Wireless Adapter
 
 /* ATen products */
 product ATEN UC1284		0x2001	Parallel printer
@@ -1038,6 +1065,7 @@ product CHIC CYPRESS		0x0003	Cypress USB Mouse
 
 /* Chicony products */
 product CHICONY KB8933		0x0001	KB-8933 keyboard
+product CHICONY CNF7129		0xb071	Notebook Web Camera
 product CHICONY2 TWINKLECAM	0x600d	TwinkleCam USB camera
 
 /* CH Products */
@@ -1116,6 +1144,7 @@ product CTX EX1300		0x9999	Ex1300 hub
 product CURITEL HX550C		0x1101	CDMA 2000 1xRTT USB modem (HX-550C)
 product CURITEL HX57XB		0x2101	CDMA 2000 1xRTT USB modem (HX-570/575B/PR-600)
 product CURITEL PC5740		0x3701	Broadband Wireless modem
+product CURITEL UM175		0x3714	EVDO modem
 
 /* CyberPower products */
 product CYBERPOWER 1500CAVRLCD	0x0501	1500CAVRLCD
@@ -1148,7 +1177,22 @@ product DELL BC02		0x8000	BC02 Bluetooth USB Adapter
 product DELL PRISM_GT_1		0x8102	PrismGT USB 2.0 WLAN
 product DELL TM350		0x8103	TrueMobile 350 Bluetooth USB Adapter
 product DELL PRISM_GT_2		0x8104	PrismGT USB 2.0 WLAN
+product DELL U5700		0x8114	Dell 5700 3G
+product DELL U5500		0x8115	Dell 5500 3G
+product DELL U5505		0x8116	Dell 5505 3G
+product DELL U5700_2		0x8117	Dell 5700 3G
+product DELL U5510		0x8118	Dell 5510 3G
+product DELL U5700_3		0x8128	Dell 5700 3G
+product DELL U5700_4		0x8129	Dell 5700 3G
+product DELL U5720		0x8133	Dell 5720 3G
+product DELL U5720_2		0x8134	Dell 5720 3G
 product DELL U740		0x8135	Dell U740 CDMA
+product DELL U5520		0x8136	Dell 5520 3G
+product DELL U5520_2		0x8137	Dell 5520 3G
+product DELL U5520_3		0x8138	Dell 5520 3G
+product DELL U5730		0x8180	Dell 5730 3G
+product DELL U5730_2		0x8181	Dell 5730 3G
+product DELL U5730_3		0x8182	Dell 5730 3G
 
 /* Delorme Paublishing products */
 product DELORME EARTHMATE	0x0100	Earthmate GPS
@@ -1197,6 +1241,7 @@ product DLINK2 DWLG122C1	0x3c03	DWL-G122 c1
 product DLINK2 WUA1340		0x3c04	WUA-1340
 product DLINK2 DWA111		0x3c06	DWA-111
 product DLINK2 DWA110		0x3c07	DWA-110
+product DLINK3 DWM652		0x3e04	DWM-652
 
 /* DMI products */
 product DMI CFSM_RW		0xa109	CF/SM Reader/Writer
@@ -1211,6 +1256,9 @@ product DRESDENELEKTRONIK WIRELESSHANDHELDTERMINAL  0x0004 Wireless Handheld Ter
 /* Dynastream Innovations */
 product DYNASTREAM ANTDEVBOARD	0x1003	ANT dev board
 
+/* Eicon Networks */
+product EICON DIVA852		0x4905	Diva 852 ISDN TA
+
 /* EIZO products */
 product EIZO HUB		0x0000	hub
 product EIZO MONITOR		0x0001	monitor
@@ -1319,6 +1367,7 @@ product FTDI SERIAL_8U100AX	0x8372	8U100AX Serial
 product FTDI SERIAL_8U232AM	0x6001	8U232AM Serial
 product FTDI SERIAL_8U232AM4	0x6004	8U232AM Serial
 product FTDI SERIAL_2232C	0x6010	FT2232C Dual port Serial
+product FTDI SERIAL_2232D	0x9e90	FT2232D Dual port Serial
 /* Gude Analog- und Digitalsysteme products also uses FTDI's id: */
 product FTDI TACTRIX_OPENPORT_13M 0xcc48 OpenPort 1.3 Mitsubishi
 product FTDI TACTRIX_OPENPORT_13S 0xcc49 OpenPort 1.3 Subaru
@@ -1484,6 +1533,7 @@ product HP P1100		0x3102	Photosmart P1100
 product HP OJ4215		0x3d11	OfficeJet 4215
 product HP HN210E		0x811c	Ethernet HN210E
 product HP2 C500		0x6002	PhotoSmart C500
+product HP EV2200		0x1b1d  ev2200 HSDPA (aka MC5720)
 product HP HS2300		0x1e1d  hs2300 HSDPA (aka MC8775)
 
 /* HTC products */
@@ -1494,7 +1544,71 @@ product HTC SMARTPHONE		0x0a51	SmartPhone USB Sync
 /* HUAWEI products */
 product HUAWEI MOBILE		0x1001	Huawei Mobile
 product HUAWEI E220		0x1003	Huawei HSDPA modem
+product HUAWEI E220BIS		0x1004	Huawei HSDPA modem
+product HUAWEI E1401		0x1401	3G modem
+product HUAWEI E1402		0x1402	3G modem
+product HUAWEI E1403		0x1403	3G modem
+product HUAWEI E1404		0x1404	3G modem
+product HUAWEI E1405		0x1405	3G modem
+product HUAWEI E1406		0x1406	3G modem
+product HUAWEI E1407		0x1407	3G modem
+product HUAWEI E1408		0x1408	3G modem
+product HUAWEI E1409		0x1409	3G modem
+product HUAWEI E140A		0x140a	3G modem
+product HUAWEI E140B		0x140b	3G modem
 product HUAWEI E180V		0x140c	Huawei Mobile E180V
+product HUAWEI E140D		0x140d	3G modem
+product HUAWEI E140E		0x140e	3G modem
+product HUAWEI E140F		0x140f	3G modem
+product HUAWEI E1410		0x1410	3G modem
+product HUAWEI E1411		0x1411	3G modem
+product HUAWEI E1412		0x1412	3G modem
+product HUAWEI E1413		0x1413	3G modem
+product HUAWEI E1414		0x1414	3G modem
+product HUAWEI E1415		0x1415	3G modem
+product HUAWEI E1416		0x1416	3G modem
+product HUAWEI E1417		0x1417	3G modem
+product HUAWEI E1418		0x1418	3G modem
+product HUAWEI E1419		0x1419	3G modem
+product HUAWEI E141A		0x141a	3G modem
+product HUAWEI E141B		0x141b	3G modem
+product HUAWEI E141C		0x141c	3G modem
+product HUAWEI E141D		0x141d	3G modem
+product HUAWEI E141E		0x141e	3G modem
+product HUAWEI E141F		0x141f	3G modem
+product HUAWEI E1420		0x1420	3G modem
+product HUAWEI E1421		0x1421	3G modem
+product HUAWEI E1422		0x1422	3G modem
+product HUAWEI E1423		0x1423	3G modem
+product HUAWEI E1424		0x1424	3G modem
+product HUAWEI E1425		0x1425	3G modem
+product HUAWEI E1426		0x1426	3G modem
+product HUAWEI E1427		0x1427	3G modem
+product HUAWEI E1428		0x1428	3G modem
+product HUAWEI E1429		0x1429	3G modem
+product HUAWEI E142A		0x142a	3G modem
+product HUAWEI E142B		0x142b	3G modem
+product HUAWEI E142C		0x142c	3G modem
+product HUAWEI E142D		0x142d	3G modem
+product HUAWEI E142E		0x142e	3G modem
+product HUAWEI E142F		0x142f	3G modem
+product HUAWEI E1430		0x1430	3G modem
+product HUAWEI E1431		0x1431	3G modem
+product HUAWEI E1432		0x1432	3G modem
+product HUAWEI E1433		0x1433	3G modem
+product HUAWEI E1434		0x1434	3G modem
+product HUAWEI E1435		0x1435	3G modem
+product HUAWEI E1436		0x1436	3G modem
+product HUAWEI E1437		0x1437	3G modem
+product HUAWEI E1438		0x1438	3G modem
+product HUAWEI E1439		0x1439	3G modem
+product HUAWEI E143A		0x143a	3G modem
+product HUAWEI E143B		0x143b	3G modem
+product HUAWEI E143C		0x143c	3G modem
+product HUAWEI E143D		0x143d	3G modem
+product HUAWEI E143E		0x143e	3G modem
+product HUAWEI E143F		0x143f	3G modem
+product HUAWEI E14AC		0x14ac	3G modem
 
 /* HUAWEI 3com products */
 product HUAWEI3COM WUB320G	0x0009	Aolynk WUB320g
@@ -1519,6 +1633,7 @@ product INSYSTEM STORAGE_V2	0x5701	USB Storage Adapter V2
 /* Intel products */
 product INTEL EASYPC_CAMERA	0x0110	Easy PC Camera
 product INTEL TESTBOARD		0x9890	82930 test board
+product INTEL2 IRMH        	0x0020	Integrated Rate Matching Hub
 
 /* Intersil products */
 product INTERSIL PRISM_GT	0x1000	PrismGT USB 2.0 WLAN
@@ -1635,6 +1750,7 @@ product KYOCERA FINECAM_S5	0x0103	Finecam S5
 product KYOCERA FINECAM_L3	0x0105	Finecam L3
 product KYOCERA AHK3001V	0x0203	AH-K3001V
 product KYOCERA2 CDMA_MSM_K	0x17da	Qualcomm Kyocera CDMA Technologies MSM
+product KYOCERA2 KPC680		0x180a	Qualcomm Kyocera CDMA Technologies MSM
 
 /* LaCie products */
 product LACIE HD		0xa601	Hard Disk
@@ -1824,6 +1940,7 @@ product MOSCHIP MCS7830		0x7830	MCS7830 Ethernet
 /* Motorola products */
 product MOTOROLA MC141555	0x1555	MC141555 hub controller
 product MOTOROLA SB4100		0x4100	SB4100 USB Cable Modem
+product MOTOROLA2 T720C		0x2822	T720c
 product MOTOROLA2 A41XV32X	0x2a22	A41x/V32x Mobile Phones
 product MOTOROLA2 E398		0x4810	E398 Mobile Phone
 product MOTOROLA2 USBLAN	0x600c	USBLAN
@@ -1902,7 +2019,6 @@ product NOVATECH RT2573		0x9021	RT2573
 
 /* Novatel Wireless products */
 product NOVATEL V640		0x1100	Merlin V620
-product NOVATEL CDMA_MODEM	0x1110	Novatel Wireless Merlin CDMA
 product NOVATEL V620		0x1110	Merlin V620
 product NOVATEL V740		0x1120	Merlin V740
 product NOVATEL V720		0x1130	Merlin V720
@@ -1911,13 +2027,20 @@ product NOVATEL U740_2		0x1410	Merlin U740
 product NOVATEL U870		0x1420	Merlin U870
 product NOVATEL XU870		0x1430	Merlin XU870
 product NOVATEL X950D		0x1450	Merlin X950D
-product NOVATEL ES620		0x2100	ES620 CDMA
+product NOVATEL ES620		0x2100	Expedite ES620
+product NOVATEL E725		0x2120	Expedite E725
+product NOVATEL ES620_2		0x2130	Expedite ES620
 product NOVATEL U720		0x2110	Merlin U720
+product NOVATEL EU730		0x2400	Expedite EU730
+product NOVATEL EU740		0x2410	Expedite EU740
+product NOVATEL EU870D		0x2420	Expedite EU870D
 product NOVATEL U727		0x4100	Merlin U727 CDMA
 product NOVATEL MC950D		0x4400	Novatel MC950D HSUPA
 product NOVATEL ZEROCD		0x5010	Novatel ZeroCD
 product NOVATEL ZEROCD2		0x5030	Novatel ZeroCD
+product NOVATEL U727_2		0x5100	Merlin U727 CDMA
 product NOVATEL U760		0x6000	Novatel U760
+product NOVATEL MC760		0x6002	Novatel MC760
 product NOVATEL2 FLEXPACKGPS	0x0100	NovAtel FlexPack GPS receiver
 
 /* Merlin products */
@@ -1954,6 +2077,24 @@ product OPTION GTHSDPA		0x6971	GlobeTrotter HSDPA
 product OPTION GTMAXHSUPA	0x7001	GlobeTrotter HSUPA
 product OPTION GTMAXHSUPAE	0x6901	GlobeTrotter HSUPA PCIe
 product OPTION GTMAX380HSUPAE	0x7211	GlobeTrotter 380HSUPA PCIe
+product OPTION GT3G_1		0x6050	3G modem
+product OPTION GT3G_2		0x6100	3G modem
+product OPTION GT3G_3		0x6150	3G modem
+product OPTION GT3G_4		0x6200	3G modem
+product OPTION GT3G_5		0x6250	3G modem
+product OPTION GT3G_6		0x6350	3G modem
+product OPTION E6500		0x6500	3G modem
+product OPTION E6501		0x6501	3G modem
+product OPTION E6601		0x6601	3G modem
+product OPTION E6721		0x6721	3G modem
+product OPTION E6741		0x6741	3G modem
+product OPTION E6761		0x6761	3G modem
+product OPTION E6800		0x6800	3G modem
+product OPTION E7021		0x7021	3G modem
+product OPTION E7041		0x7041	3G modem
+product OPTION E7061		0x7061	3G modem
+product OPTION E7100		0x7100	3G modem
+product OPTION GTM380		0x7201	3G modem
 
 /* OQO */
 product OQO WIFI01		0x0002	model 01 WiFi interface
@@ -2001,7 +2142,10 @@ product PHILIPS UM10016		0x1552	ISP 1581 Hi-Speed USB MPEG2 Encoder Reference Ki
 product PHILIPS DIVAUSB		0x1801	DIVA USB mp3 player
 
 /* Philips Semiconductor products */
-product PHILIPSSEMI HUB1122	0x1122	hub
+product PHILIPSSEMI HUB1122	0x1122	HUB
+
+/* Megatec */
+product MEGATEC UPS		0x5161	Protocol based UPS
 
 /* P.I. Engineering products */
 product PIENGINEERING PS2USB	0x020b	PS2 to Mac USB Adapter
@@ -2074,13 +2218,96 @@ product QCOM RT2573		0x6196	RT2573
 product QCOM RT2573_2		0x6229	RT2573
 product QCOM RT2573_3		0x6238	RT2573
 
+/* Qisda products */
+product QISDA H21_1		0x4512	3G modem
+product QISDA H21_2		0x4523	3G modem
+product QISDA H20_1		0x4515	3G modem
+product QISDA H20_2		0x4519	3G modem
+
 /* Qualcomm products */
 product QUALCOMM CDMA_MSM	0x6000	CDMA Technologies MSM phone
 product QUALCOMM2 RWT_FCT	0x3100	RWT FCT-CDMA 2000 1xRTT modem
 product QUALCOMM2 CDMA_MSM	0x3196	CDMA Technologies MSM modem
+product QUALCOMM2 AC8700	0x6000	AC8700
+product QUALCOMM2 MF330		0x6613	MF330
 product QUALCOMMINC CDMA_MSM	0x0001	CDMA Technologies MSM modem
 product QUALCOMMINC ZTE_STOR	0x2000	USB ZTE Storage
+product QUALCOMMINC AC8710	0xfff1	3G modem
+product QUALCOMMINC AC2726	0xfff5	3G modem
 product QUALCOMMINC AC8700	0xfffe	CDMA 1xEVDO USB modem
+product QUALCOMMINC E0002	0x0002	3G modem
+product QUALCOMMINC E0003	0x0003	3G modem
+product QUALCOMMINC E0004	0x0004	3G modem
+product QUALCOMMINC E0005	0x0005	3G modem
+product QUALCOMMINC E0006	0x0006	3G modem
+product QUALCOMMINC E0007	0x0007	3G modem
+product QUALCOMMINC E0008	0x0008	3G modem
+product QUALCOMMINC E0009	0x0009	3G modem
+product QUALCOMMINC E000A	0x000a	3G modem
+product QUALCOMMINC E000B	0x000b	3G modem
+product QUALCOMMINC E000C	0x000c	3G modem
+product QUALCOMMINC E000D	0x000d	3G modem
+product QUALCOMMINC E000E	0x000e	3G modem
+product QUALCOMMINC E000F	0x000f	3G modem
+product QUALCOMMINC E0010	0x0010	3G modem
+product QUALCOMMINC E0011	0x0011	3G modem
+product QUALCOMMINC E0012	0x0012	3G modem
+product QUALCOMMINC E0013	0x0013	3G modem
+product QUALCOMMINC E0014	0x0014	3G modem
+product QUALCOMMINC MF628	0x0015	3G modem
+product QUALCOMMINC E0016	0x0016	3G modem
+product QUALCOMMINC E0017	0x0017	3G modem
+product QUALCOMMINC E0018	0x0018	3G modem
+product QUALCOMMINC E0019	0x0019	3G modem
+product QUALCOMMINC E0020	0x0020	3G modem
+product QUALCOMMINC E0021	0x0021	3G modem
+product QUALCOMMINC E0022	0x0022	3G modem
+product QUALCOMMINC E0023	0x0023	3G modem
+product QUALCOMMINC E0024	0x0024	3G modem
+product QUALCOMMINC E0025	0x0025	3G modem
+product QUALCOMMINC E0026	0x0026	3G modem
+product QUALCOMMINC E0027	0x0027	3G modem
+product QUALCOMMINC E0028	0x0028	3G modem
+product QUALCOMMINC E0029	0x0029	3G modem
+product QUALCOMMINC E0030	0x0030	3G modem
+product QUALCOMMINC MF626	0x0031	3G modem
+product QUALCOMMINC E0032	0x0032	3G modem
+product QUALCOMMINC E0033	0x0033	3G modem
+product QUALCOMMINC E0037	0x0037	3G modem
+product QUALCOMMINC E0039	0x0039	3G modem
+product QUALCOMMINC E0042	0x0042	3G modem
+product QUALCOMMINC E0043	0x0043	3G modem
+product QUALCOMMINC E0048	0x0048	3G modem
+product QUALCOMMINC E0049	0x0049	3G modem
+product QUALCOMMINC E0051	0x0051	3G modem
+product QUALCOMMINC E0052	0x0052	3G modem
+product QUALCOMMINC E0054	0x0054	3G modem
+product QUALCOMMINC E0055	0x0055	3G modem
+product QUALCOMMINC E0057	0x0057	3G modem
+product QUALCOMMINC E0058	0x0058	3G modem
+product QUALCOMMINC E0059	0x0059	3G modem
+product QUALCOMMINC E0060	0x0060	3G modem
+product QUALCOMMINC E0061	0x0061	3G modem
+product QUALCOMMINC E0062	0x0062	3G modem
+product QUALCOMMINC E0063	0x0063	3G modem
+product QUALCOMMINC E0064	0x0064	3G modem
+product QUALCOMMINC E0066	0x0066	3G modem
+product QUALCOMMINC E0069	0x0069	3G modem
+product QUALCOMMINC E0070	0x0070	3G modem
+product QUALCOMMINC E0073	0x0073	3G modem
+product QUALCOMMINC E0076	0x0076	3G modem
+product QUALCOMMINC E0078	0x0078	3G modem
+product QUALCOMMINC E0082	0x0082	3G modem
+product QUALCOMMINC E0086	0x0086	3G modem
+product QUALCOMMINC E2002	0x2002	3G modem
+product QUALCOMMINC E2003	0x2003	3G modem
+
+/* Quanta products */
+product QUANTA Q101		0xea02	HSDPA modem
+product QUANTA Q111		0xea03	HSDPA modem
+product QUANTA GLX		0xea04	HSDPA modem
+product QUANTA GKE		0xea05	HSDPA modem
+product QUANTA GLE		0xea06	HSDPA modem
 
 /* Qtronix products */
 product QTRONIX 980N		0x2011	Scorpion-980N keyboard
@@ -2128,6 +2355,7 @@ product ROCKFIRE GAMEPAD	0x2033	gamepad 203USB
 
 /* RATOC Systems products */
 product RATOC REXUSB60		0xb000	REX-USB60
+product RATOC REXUSB60F		0xb020	REX-USB60F
 
 /* Sagem products */
 product SAGEM USBSERIAL		0x0027	USB-Serial Controller
@@ -2177,6 +2405,7 @@ product SHARP SL5600		0x8006	Zaurus SL-5600 PDA
 product SHARP SLC700		0x8007	Zaurus SL-C700 PDA
 product SHARP SLC750		0x9031	Zaurus SL-C750 PDA
 product SHARP WZERO3ES		0x9123	W-ZERO3 ES Smartphone
+product SHARP WZERO3ADES	0x91ac	Advanced W-ZERO3 ES Smartphone
 product SHARP WILLCOM03		0x9242	WILLCOM03
 
 /* Shuttle Technology products */
@@ -2204,33 +2433,62 @@ product SIEMENS3 X65		0x0003	X65
 product SIEMENS3 X75		0x0004	X75
 
 /* Sierra Wireless products */
-product SIERRA AIRCARD580	0x0112	Sierra Wireless AirCard 580
+product SIERRA EM5625		0x0017	EM5625
+product SIERRA MC5720_2		0x0018	MC5720
+product SIERRA MC5725		0x0020	MC5725
 product SIERRA AIRCARD595	0x0019	Sierra Wireless AirCard 595
-product SIERRA AC595U		0x0120	Sierra Wireless AirCard 595U
 product SIERRA AC597E		0x0021	Sierra Wireless AirCard 597E
+product SIERRA EM5725		0x0022	EM5725
 product SIERRA C597		0x0023	Sierra Wireless Compass 597
+product SIERRA MC5727		0x0024	MC5727
+product SIERRA T598		0x0025	T598
+product SIERRA T11		0x0026	T11
+product SIERRA AC402		0x0027	AC402
+product SIERRA MC5728		0x0028	MC5728
+product SIERRA E0029		0x0029	E0029
+product SIERRA AIRCARD580	0x0112	Sierra Wireless AirCard 580
+product SIERRA AC595U		0x0120	Sierra Wireless AirCard 595U
+product SIERRA MC5720		0x0218	MC5720 Wireless Modem
+product SIERRA MINI5725		0x0220	Sierra Wireless miniPCI 5275
+product SIERRA MC5727_2		0x0224	MC5727
+product SIERRA MC8755_2		0x6802	MC8755
+product SIERRA MC8765		0x6803	MC8765
+product SIERRA MC8755		0x6804	MC8755
+product SIERRA MC8765_2		0x6805	MC8765
+product SIERRA MC8755_4		0x6808	MC8755
+product SIERRA MC8765_3		0x6809	MC8765
+product SIERRA AC875U		0x6812	AC875U HSDPA USB Modem
+product SIERRA MC8755_3		0x6813	MC8755 HSDPA
+product SIERRA MC8775_2		0x6815	MC8775
+product SIERRA MC8775		0x6816	MC8775
 product SIERRA AC875		0x6820	Sierra Wireless AirCard 875
+product SIERRA AC875U_2		0x6821	AC875U
+product SIERRA AC875E		0x6822	AC875E
+product SIERRA MC8780		0x6832	MC8780
+product SIERRA MC8781		0x6833	MC8781
+product SIERRA MC8780_2		0x6834	MC8780
+product SIERRA MC8781_2		0x6835	MC8781
+product SIERRA MC8780_3		0x6838	MC8780
+product SIERRA MC8781_3		0x6839	MC8781
+product SIERRA MC8785		0x683A	MC8785
+product SIERRA MC8785_2		0x683B	MC8785
+product SIERRA MC8790		0x683C	MC8790
+product SIERRA MC8791		0x683D	MC8791
+product SIERRA MC8792		0x683E	MC8792
 product SIERRA AC880		0x6850	Sierra Wireless AirCard 880
 product SIERRA AC881		0x6851	Sierra Wireless AirCard 881
 product SIERRA AC880E		0x6852	Sierra Wireless AirCard 880E
 product SIERRA AC881E		0x6853	Sierra Wireless AirCard 881E
 product SIERRA AC880U		0x6855	Sierra Wireless AirCard 880U
 product SIERRA AC881U		0x6856	Sierra Wireless AirCard 881U
+product SIERRA AC885E		0x6859	AC885E
+product SIERRA AC885E_2		0x685A	AC885E
 product SIERRA AC885U		0x6880	Sierra Wireless AirCard 885U
-product SIERRA EM5625		0x0017	EM5625
-product SIERRA MC5720		0x0218	MC5720 Wireless Modem
-product SIERRA MC5720_2		0x0018	MC5720
-product SIERRA MC5725		0x0020	MC5725
-product SIERRA MINI5725		0x0220	Sierra Wireless miniPCI 5275
-product SIERRA MC8755_2		0x6802	MC8755
-product SIERRA MC8765		0x6803	MC8765
-product SIERRA MC8755		0x6804	MC8755
-product SIERRA AC875U		0x6812	AC875U HSDPA USB Modem
-product SIERRA MC8755_3		0x6813	MC8755 HSDPA
-product SIERRA MC8775_2		0x6815	MC8775
+product SIERRA C888		0x6890	C888
+product SIERRA C22		0x6891	C22
+product SIERRA E6892		0x6892	E6892
+product SIERRA E6893		0x6893	E6893
 product SIERRA AIRCARD875	0x6820	Aircard 875 HSDPA
-product SIERRA MC8780		0x6832	MC8780
-product SIERRA MC8781		0x6833	MC8781
 product SIERRA TRUINSTALL	0x0fff	Aircard Tru Installer
 
 /* Sigmatel products */
@@ -2345,6 +2603,22 @@ product SPHAIRON UB801R		0x0110	UB801R
 /* Stelera Wireless products */
 product STELERA ZEROCD		0x1000	Zerocd Installer
 product STELERA C105		0x1002	Stelera/Bandrish C105 USB
+product STELERA E1003		0x1003	3G modem
+product STELERA E1004		0x1004	3G modem
+product STELERA E1005		0x1005	3G modem
+product STELERA E1006		0x1006	3G modem
+product STELERA E1007		0x1007	3G modem
+product STELERA E1008		0x1008	3G modem
+product STELERA E1009		0x1009	3G modem
+product STELERA E100A		0x100a	3G modem
+product STELERA E100B		0x100b	3G modem
+product STELERA E100C		0x100c	3G modem
+product STELERA E100D		0x100d	3G modem
+product STELERA E100E		0x100e	3G modem
+product STELERA E100F		0x100f	3G modem
+product STELERA E1010		0x1010	3G modem
+product STELERA E1011		0x1011	3G modem
+product STELERA E1012		0x1012	3G modem
 
 /* MpMan products */
 product MPMAN MPF400_1		0x36d0	MPF400 Music Player 1Go
@@ -2401,6 +2675,9 @@ product TAPWAVE ZODIAC		0x0100	Zodiac
 /* Taugagreining products */
 product TAUGA CAMERAMATE	0x0005	CameraMate (DPCM_USB)
 
+/* TCTMobile products */
+product TCTMOBILE X060S		0x0000	X060S 3G modem
+
 /* TDK products */
 product TDK UPA9664		0x0115	USB-PDC Adapter UPA9664
 product TDK UCA1464		0x0116	USB-cdmaOne Adapter UCA1464
@@ -2419,6 +2696,10 @@ product TEKRAM ZD1211_2		0x6630	ZD1211
 /* Telex Communications products */
 product TELEX MIC1		0x0001	Enhanced USB Microphone
 
+/* Telit products */
+product TELIT UC864E		0x1003	UC864E 3G modem
+product TELIT UC864G		0x1004	UC864G 3G modem
+
 /* Ten X Technology, Inc. */
 product TENX UAUDIO0		0xf211	USB audio headset
 
@@ -2429,11 +2710,16 @@ product TI TUSB2046		0x2046	TUSB2046 hub
 /* Thrustmaster products */
 product THRUST FUSION_PAD	0xa0a3	Fusion Digital Gamepad
 
+/* TLayTech products */
+product TLAYTECH TEU800		0x1682	TEU800 3G modem
+
 /* Topre Corporation products */
 product TOPRE HHKB		0x0100	HHKB Professional
 
 /* Toshiba Corporation products */
 product TOSHIBA POCKETPC_E740	0x0706	PocketPC e740
+product TOSHIBA G450		0x0d45	G450 modem
+product TOSHIBA HSDPA		0x1302	G450 modem
 
 /* Trek Technology products */
 product TREK THUMBDRIVE		0x1111	ThumbDrive
diff --git a/sys/dev/usb/usbdi.h b/sys/dev/usb/usbdi.h
index 46747d7baf0..9adf39adc77 100644
--- a/sys/dev/usb/usbdi.h
+++ b/sys/dev/usb/usbdi.h
@@ -29,6 +29,7 @@
 struct usb_fifo;
 struct usb_xfer;
 struct usb_device;
+struct usb_attach_arg;
 struct usb_interface;
 struct usb_endpoint;
 struct usb_page_cache;
@@ -98,6 +99,13 @@ typedef int (usb_fifo_ioctl_t)(struct usb_fifo *fifo, u_long cmd, void *addr, in
 typedef void (usb_fifo_cmd_t)(struct usb_fifo *fifo);
 typedef void (usb_fifo_filter_t)(struct usb_fifo *fifo, struct usb_mbuf *m);
 
+
+/* USB events */
+#include 
+typedef void (*usb_dev_configured_t)(void *, struct usb_device *,
+    struct usb_attach_arg *);
+EVENTHANDLER_DECLARE(usb_dev_configured, usb_dev_configured_t);
+
 /*
  * The following macros are used used to convert milliseconds into
  * HZ. We use 1024 instead of 1000 milliseconds per second to save a
@@ -130,13 +138,22 @@ struct usb_endpoint {
 	struct usb_pipe_methods *methods;	/* set by HC driver */
 
 	uint16_t isoc_next;
-	uint16_t refcount;
 
 	uint8_t	toggle_next:1;		/* next data toggle value */
 	uint8_t	is_stalled:1;		/* set if endpoint is stalled */
 	uint8_t	is_synced:1;		/* set if we a synchronised */
 	uint8_t	unused:5;
 	uint8_t	iface_index;		/* not used by "default endpoint" */
+
+	uint8_t refcount_alloc;		/* allocation refcount */
+	uint8_t refcount_bw;		/* bandwidth refcount */
+#define	USB_EP_REF_MAX 0x3f
+
+	/* High-Speed resource allocation (valid if "refcount_bw" > 0) */
+
+	uint8_t	usb_smask;		/* USB start mask */
+	uint8_t	usb_cmask;		/* USB complete mask */
+	uint8_t	usb_uframe;		/* USB microframe */
 };
 
 /*
@@ -329,6 +346,10 @@ struct usb_attach_arg {
 	enum usb_hc_mode usb_mode;	/* host or device mode */
 	uint8_t	port;
 	uint8_t	use_generic;		/* hint for generic drivers */
+	uint8_t dev_state;
+#define UAA_DEV_READY		0
+#define UAA_DEV_DISABLED	1
+#define UAA_DEV_EJECTING	2
 };
 
 /*
diff --git a/sys/dev/usb/wlan/if_rum.c b/sys/dev/usb/wlan/if_rum.c
index e7c387c5fa7..316bbec881e 100644
--- a/sys/dev/usb/wlan/if_rum.c
+++ b/sys/dev/usb/wlan/if_rum.c
@@ -86,54 +86,56 @@ SYSCTL_INT(_hw_usb_rum, OID_AUTO, debug, CTLFLAG_RW, &rum_debug, 0,
 #endif
 
 static const struct usb_device_id rum_devs[] = {
-    { USB_VP(USB_VENDOR_ABOCOM,		USB_PRODUCT_ABOCOM_HWU54DM) },
-    { USB_VP(USB_VENDOR_ABOCOM,		USB_PRODUCT_ABOCOM_RT2573_2) },
-    { USB_VP(USB_VENDOR_ABOCOM,		USB_PRODUCT_ABOCOM_RT2573_3) },
-    { USB_VP(USB_VENDOR_ABOCOM,		USB_PRODUCT_ABOCOM_RT2573_4) },
-    { USB_VP(USB_VENDOR_ABOCOM,		USB_PRODUCT_ABOCOM_WUG2700) },
-    { USB_VP(USB_VENDOR_AMIT,		USB_PRODUCT_AMIT_CGWLUSB2GO) },
-    { USB_VP(USB_VENDOR_ASUS,		USB_PRODUCT_ASUS_RT2573_1) },
-    { USB_VP(USB_VENDOR_ASUS,		USB_PRODUCT_ASUS_RT2573_2) },
-    { USB_VP(USB_VENDOR_BELKIN,		USB_PRODUCT_BELKIN_F5D7050A) },
-    { USB_VP(USB_VENDOR_BELKIN,		USB_PRODUCT_BELKIN_F5D9050V3) },
-    { USB_VP(USB_VENDOR_CISCOLINKSYS,	USB_PRODUCT_CISCOLINKSYS_WUSB54GC) },
-    { USB_VP(USB_VENDOR_CISCOLINKSYS,	USB_PRODUCT_CISCOLINKSYS_WUSB54GR) },
-    { USB_VP(USB_VENDOR_CONCEPTRONIC2,	USB_PRODUCT_CONCEPTRONIC2_C54RU2) },
-    { USB_VP(USB_VENDOR_COREGA,		USB_PRODUCT_COREGA_CGWLUSB2GL) },
-    { USB_VP(USB_VENDOR_COREGA,		USB_PRODUCT_COREGA_CGWLUSB2GPX) },
-    { USB_VP(USB_VENDOR_DICKSMITH,	USB_PRODUCT_DICKSMITH_CWD854F) },
-    { USB_VP(USB_VENDOR_DICKSMITH,	USB_PRODUCT_DICKSMITH_RT2573) },
-    { USB_VP(USB_VENDOR_DLINK2,		USB_PRODUCT_DLINK2_DWLG122C1) },
-    { USB_VP(USB_VENDOR_DLINK2,		USB_PRODUCT_DLINK2_WUA1340) },
-    { USB_VP(USB_VENDOR_DLINK2,		USB_PRODUCT_DLINK2_DWA111) },
-    { USB_VP(USB_VENDOR_DLINK2,		USB_PRODUCT_DLINK2_DWA110) },
-    { USB_VP(USB_VENDOR_GIGABYTE,	USB_PRODUCT_GIGABYTE_GNWB01GS) },
-    { USB_VP(USB_VENDOR_GIGABYTE,	USB_PRODUCT_GIGABYTE_GNWI05GS) },
-    { USB_VP(USB_VENDOR_GIGASET,	USB_PRODUCT_GIGASET_RT2573) },
-    { USB_VP(USB_VENDOR_GOODWAY,	USB_PRODUCT_GOODWAY_RT2573) },
-    { USB_VP(USB_VENDOR_GUILLEMOT,	USB_PRODUCT_GUILLEMOT_HWGUSB254LB) },
-    { USB_VP(USB_VENDOR_GUILLEMOT,	USB_PRODUCT_GUILLEMOT_HWGUSB254V2AP) },
-    { USB_VP(USB_VENDOR_HUAWEI3COM,	USB_PRODUCT_HUAWEI3COM_WUB320G) },
-    { USB_VP(USB_VENDOR_MELCO,		USB_PRODUCT_MELCO_G54HP) },
-    { USB_VP(USB_VENDOR_MELCO,		USB_PRODUCT_MELCO_SG54HP) },
-    { USB_VP(USB_VENDOR_MSI,		USB_PRODUCT_MSI_RT2573_1) },
-    { USB_VP(USB_VENDOR_MSI,		USB_PRODUCT_MSI_RT2573_2) },
-    { USB_VP(USB_VENDOR_MSI,		USB_PRODUCT_MSI_RT2573_3) },
-    { USB_VP(USB_VENDOR_MSI,		USB_PRODUCT_MSI_RT2573_4) },
-    { USB_VP(USB_VENDOR_NOVATECH,	USB_PRODUCT_NOVATECH_RT2573) },
-    { USB_VP(USB_VENDOR_PLANEX2,	USB_PRODUCT_PLANEX2_GWUS54HP) },
-    { USB_VP(USB_VENDOR_PLANEX2,	USB_PRODUCT_PLANEX2_GWUS54MINI2) },
-    { USB_VP(USB_VENDOR_PLANEX2,	USB_PRODUCT_PLANEX2_GWUSMM) },
-    { USB_VP(USB_VENDOR_QCOM,		USB_PRODUCT_QCOM_RT2573) },
-    { USB_VP(USB_VENDOR_QCOM,		USB_PRODUCT_QCOM_RT2573_2) },
-    { USB_VP(USB_VENDOR_QCOM,		USB_PRODUCT_QCOM_RT2573_3) },
-    { USB_VP(USB_VENDOR_RALINK,		USB_PRODUCT_RALINK_RT2573) },
-    { USB_VP(USB_VENDOR_RALINK,		USB_PRODUCT_RALINK_RT2573_2) },
-    { USB_VP(USB_VENDOR_RALINK,		USB_PRODUCT_RALINK_RT2671) },
-    { USB_VP(USB_VENDOR_SITECOMEU,	USB_PRODUCT_SITECOMEU_WL113R2) },
-    { USB_VP(USB_VENDOR_SITECOMEU,	USB_PRODUCT_SITECOMEU_WL172) },
-    { USB_VP(USB_VENDOR_SPARKLAN,	USB_PRODUCT_SPARKLAN_RT2573) },
-    { USB_VP(USB_VENDOR_SURECOM,	USB_PRODUCT_SURECOM_RT2573) },
+#define	RUM_DEV(v,p)  { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
+    RUM_DEV(ABOCOM, HWU54DM),
+    RUM_DEV(ABOCOM, RT2573_2),
+    RUM_DEV(ABOCOM, RT2573_3),
+    RUM_DEV(ABOCOM, RT2573_4),
+    RUM_DEV(ABOCOM, WUG2700),
+    RUM_DEV(AMIT, CGWLUSB2GO),
+    RUM_DEV(ASUS, RT2573_1),
+    RUM_DEV(ASUS, RT2573_2),
+    RUM_DEV(BELKIN, F5D7050A),
+    RUM_DEV(BELKIN, F5D9050V3),
+    RUM_DEV(CISCOLINKSYS, WUSB54GC),
+    RUM_DEV(CISCOLINKSYS, WUSB54GR),
+    RUM_DEV(CONCEPTRONIC2, C54RU2),
+    RUM_DEV(COREGA, CGWLUSB2GL),
+    RUM_DEV(COREGA, CGWLUSB2GPX),
+    RUM_DEV(DICKSMITH, CWD854F),
+    RUM_DEV(DICKSMITH, RT2573),
+    RUM_DEV(DLINK2, DWLG122C1),
+    RUM_DEV(DLINK2, WUA1340),
+    RUM_DEV(DLINK2, DWA111),
+    RUM_DEV(DLINK2, DWA110),
+    RUM_DEV(GIGABYTE, GNWB01GS),
+    RUM_DEV(GIGABYTE, GNWI05GS),
+    RUM_DEV(GIGASET, RT2573),
+    RUM_DEV(GOODWAY, RT2573),
+    RUM_DEV(GUILLEMOT, HWGUSB254LB),
+    RUM_DEV(GUILLEMOT, HWGUSB254V2AP),
+    RUM_DEV(HUAWEI3COM, WUB320G),
+    RUM_DEV(MELCO, G54HP),
+    RUM_DEV(MELCO, SG54HP),
+    RUM_DEV(MSI, RT2573_1),
+    RUM_DEV(MSI, RT2573_2),
+    RUM_DEV(MSI, RT2573_3),
+    RUM_DEV(MSI, RT2573_4),
+    RUM_DEV(NOVATECH, RT2573),
+    RUM_DEV(PLANEX2, GWUS54HP),
+    RUM_DEV(PLANEX2, GWUS54MINI2),
+    RUM_DEV(PLANEX2, GWUSMM),
+    RUM_DEV(QCOM, RT2573),
+    RUM_DEV(QCOM, RT2573_2),
+    RUM_DEV(QCOM, RT2573_3),
+    RUM_DEV(RALINK, RT2573),
+    RUM_DEV(RALINK, RT2573_2),
+    RUM_DEV(RALINK, RT2671),
+    RUM_DEV(SITECOMEU, WL113R2),
+    RUM_DEV(SITECOMEU, WL172),
+    RUM_DEV(SPARKLAN, RT2573),
+    RUM_DEV(SURECOM, RT2573),
+#undef RUM_DEV
 };
 
 MODULE_DEPEND(rum, wlan, 1, 1, 1);
diff --git a/sys/dev/usb/wlan/if_upgt.c b/sys/dev/usb/wlan/if_upgt.c
index 67e6980701b..20f06c6ddea 100644
--- a/sys/dev/usb/wlan/if_upgt.c
+++ b/sys/dev/usb/wlan/if_upgt.c
@@ -292,7 +292,7 @@ upgt_attach(device_t dev)
 	/* Calculate device memory space.  */
 	if (sc->sc_memaddr_frame_start == 0 || sc->sc_memaddr_frame_end == 0) {
 		device_printf(dev,
-		    "could not find memory space addresses on FW!\n");
+		    "could not find memory space addresses on FW\n");
 		error = EIO;
 		goto fail5;
 	}
@@ -732,7 +732,7 @@ upgt_set_macfilter(struct upgt_softc *sc, uint8_t state)
 		break;
 	default:
 		device_printf(sc->sc_dev,
-		    "MAC filter does not know that state!\n");
+		    "MAC filter does not know that state\n");
 		break;
 	}
 
@@ -1181,7 +1181,7 @@ upgt_eeprom_parse(struct upgt_softc *sc)
 			break;
 		case UPGT_EEPROM_TYPE_OFF:
 			DPRINTF(sc, UPGT_DEBUG_FW,
-			    "%s: EEPROM off without end option!\n", __func__);
+			    "%s: EEPROM off without end option\n", __func__);
 			return (EIO);
 		default:
 			DPRINTF(sc, UPGT_DEBUG_FW,
@@ -1356,7 +1356,7 @@ upgt_eeprom_read(struct upgt_softc *sc)
 		error = mtx_sleep(sc, &sc->sc_mtx, 0, "eeprom_request", hz);
 		if (error != 0) {
 			device_printf(sc->sc_dev,
-			    "timeout while waiting for EEPROM data!\n");
+			    "timeout while waiting for EEPROM data\n");
 			UPGT_UNLOCK(sc);
 			return (EIO);
 		}
@@ -1490,7 +1490,7 @@ upgt_rx(struct upgt_softc *sc, uint8_t *data, int pkglen, int *rssi)
 	    ("A current mbuf storage is small (%d)", pkglen + ETHER_ALIGN));
 	m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
 	if (m == NULL) {
-		device_printf(sc->sc_dev, "could not create RX mbuf!\n");
+		device_printf(sc->sc_dev, "could not create RX mbuf\n");
 		return (NULL);
 	}
 	m_adj(m, ETHER_ALIGN);
@@ -1587,7 +1587,7 @@ upgt_mem_free(struct upgt_softc *sc, uint32_t addr)
 	}
 
 	device_printf(sc->sc_dev,
-	    "could not free memory address 0x%08x!\n", addr);
+	    "could not free memory address 0x%08x\n", addr);
 }
 
 static int
@@ -1602,7 +1602,7 @@ upgt_fw_load(struct upgt_softc *sc)
 
 	fw = firmware_get(upgt_fwname);
 	if (fw == NULL) {
-		device_printf(sc->sc_dev, "could not read microcode %s!\n",
+		device_printf(sc->sc_dev, "could not read microcode %s\n",
 		    upgt_fwname);
 		return (EIO);
 	}
@@ -1676,7 +1676,7 @@ upgt_fw_load(struct upgt_softc *sc)
 	usbd_transfer_start(sc->sc_xfer[UPGT_BULK_RX]);
 	error = mtx_sleep(sc, &sc->sc_mtx, 0, "upgtfw", 2 * hz);
 	if (error != 0) {
-		device_printf(sc->sc_dev, "firmware load failed!\n");
+		device_printf(sc->sc_dev, "firmware load failed\n");
 		error = EIO;
 	}
 
@@ -1782,7 +1782,7 @@ upgt_fw_verify(struct upgt_softc *sc)
 
 	fw = firmware_get(upgt_fwname);
 	if (fw == NULL) {
-		device_printf(sc->sc_dev, "could not read microcode %s!\n",
+		device_printf(sc->sc_dev, "could not read microcode %s\n",
 		    upgt_fwname);
 		return EIO;
 	}
@@ -1802,7 +1802,7 @@ upgt_fw_verify(struct upgt_softc *sc)
 	}
 	if (offset == fw->datasize) { 
 		device_printf(sc->sc_dev,
-		    "firmware Boot Record Area not found!\n");
+		    "firmware Boot Record Area not found\n");
 		error = EIO;
 		goto fail;
 	}
@@ -1827,7 +1827,7 @@ upgt_fw_verify(struct upgt_softc *sc)
 
 			if (bra_option_len != UPGT_BRA_FWTYPE_SIZE) {
 				device_printf(sc->sc_dev,
-				    "wrong UPGT_BRA_TYPE_FW len!\n");
+				    "wrong UPGT_BRA_TYPE_FW len\n");
 				error = EIO;
 				goto fail;
 			}
@@ -1842,7 +1842,7 @@ upgt_fw_verify(struct upgt_softc *sc)
 				break;
 			}
 			device_printf(sc->sc_dev,
-			    "unsupported firmware type!\n");
+			    "unsupported firmware type\n");
 			error = EIO;
 			goto fail;
 		case UPGT_BRA_TYPE_VERSION:
@@ -1946,7 +1946,7 @@ upgt_alloc_tx(struct upgt_softc *sc)
 		data->buf = malloc(MCLBYTES, M_USBDEV, M_NOWAIT | M_ZERO);
 		if (data->buf == NULL) {
 			device_printf(sc->sc_dev,
-			    "could not allocate TX buffer!\n");
+			    "could not allocate TX buffer\n");
 			return (ENOMEM);
 		}
 		STAILQ_INSERT_TAIL(&sc->sc_tx_inactive, data, next);
@@ -1970,7 +1970,7 @@ upgt_alloc_rx(struct upgt_softc *sc)
 		data->buf = malloc(MCLBYTES, M_USBDEV, M_NOWAIT | M_ZERO);
 		if (data->buf == NULL) {
 			device_printf(sc->sc_dev,
-			    "could not allocate RX buffer!\n");
+			    "could not allocate RX buffer\n");
 			return (ENOMEM);
 		}
 		STAILQ_INSERT_TAIL(&sc->sc_rx_inactive, data, next);
diff --git a/sys/dev/usb/wlan/if_ural.c b/sys/dev/usb/wlan/if_ural.c
index c2e6d75a68d..25fb86fafa5 100644
--- a/sys/dev/usb/wlan/if_ural.c
+++ b/sys/dev/usb/wlan/if_ural.c
@@ -92,35 +92,37 @@ SYSCTL_INT(_hw_usb_ural, OID_AUTO, debug, CTLFLAG_RW, &ural_debug, 0,
 
 /* various supported device vendors/products */
 static const struct usb_device_id ural_devs[] = {
-	{ USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_ASUS_WL167G) },
-	{ USB_VP(USB_VENDOR_ASUS, USB_PRODUCT_RALINK_RT2570) },
-	{ USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7050) },
-	{ USB_VP(USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D7051) },
-	{ USB_VP(USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_HU200TS) },
-	{ USB_VP(USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54G) },
-	{ USB_VP(USB_VENDOR_CISCOLINKSYS, USB_PRODUCT_CISCOLINKSYS_WUSB54GP) },
-	{ USB_VP(USB_VENDOR_CONCEPTRONIC2, USB_PRODUCT_CONCEPTRONIC2_C54RU) },
-	{ USB_VP(USB_VENDOR_DLINK, USB_PRODUCT_DLINK_DWLG122) },
-	{ USB_VP(USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GN54G) },
-	{ USB_VP(USB_VENDOR_GIGABYTE, USB_PRODUCT_GIGABYTE_GNWBKG) },
-	{ USB_VP(USB_VENDOR_GUILLEMOT, USB_PRODUCT_GUILLEMOT_HWGUSB254) },
-	{ USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54) },
-	{ USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54AI) },
-	{ USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_KG54YB) },
-	{ USB_VP(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_NINWIFI) },
-	{ USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570) },
-	{ USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570_2) },
-	{ USB_VP(USB_VENDOR_MSI, USB_PRODUCT_MSI_RT2570_3) },
-	{ USB_VP(USB_VENDOR_NOVATECH, USB_PRODUCT_NOVATECH_NV902) },
-	{ USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570) },
-	{ USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570_2) },
-	{ USB_VP(USB_VENDOR_RALINK, USB_PRODUCT_RALINK_RT2570_3) },
-	{ USB_VP(USB_VENDOR_SIEMENS2, USB_PRODUCT_SIEMENS2_WL54G) },
-	{ USB_VP(USB_VENDOR_SMC, USB_PRODUCT_SMC_2862WG) },
-	{ USB_VP(USB_VENDOR_SPHAIRON, USB_PRODUCT_SPHAIRON_UB801R) },
-	{ USB_VP(USB_VENDOR_SURECOM, USB_PRODUCT_SURECOM_RT2570) },
-	{ USB_VP(USB_VENDOR_VTECH, USB_PRODUCT_VTECH_RT2570) },
-	{ USB_VP(USB_VENDOR_ZINWELL, USB_PRODUCT_ZINWELL_RT2570) },
+#define	URAL_DEV(v,p)  { USB_VP(USB_VENDOR_##v, USB_PRODUCT_##v##_##p) }
+	URAL_DEV(ASUS, WL167G),
+	URAL_DEV(ASUS, RT2570),
+	URAL_DEV(BELKIN, F5D7050),
+	URAL_DEV(BELKIN, F5D7051),
+	URAL_DEV(CISCOLINKSYS, HU200TS),
+	URAL_DEV(CISCOLINKSYS, WUSB54G),
+	URAL_DEV(CISCOLINKSYS, WUSB54GP),
+	URAL_DEV(CONCEPTRONIC2, C54RU),
+	URAL_DEV(DLINK, DWLG122),
+	URAL_DEV(GIGABYTE, GN54G),
+	URAL_DEV(GIGABYTE, GNWBKG),
+	URAL_DEV(GUILLEMOT, HWGUSB254),
+	URAL_DEV(MELCO, KG54),
+	URAL_DEV(MELCO, KG54AI),
+	URAL_DEV(MELCO, KG54YB),
+	URAL_DEV(MELCO, NINWIFI),
+	URAL_DEV(MSI, RT2570),
+	URAL_DEV(MSI, RT2570_2),
+	URAL_DEV(MSI, RT2570_3),
+	URAL_DEV(NOVATECH, NV902),
+	URAL_DEV(RALINK, RT2570),
+	URAL_DEV(RALINK, RT2570_2),
+	URAL_DEV(RALINK, RT2570_3),
+	URAL_DEV(SIEMENS2, WL54G),
+	URAL_DEV(SMC, 2862WG),
+	URAL_DEV(SPHAIRON, UB801R),
+	URAL_DEV(SURECOM, RT2570),
+	URAL_DEV(VTECH, RT2570),
+	URAL_DEV(ZINWELL, RT2570),
+#undef URAL_DEV
 };
 
 static usb_callback_t ural_bulk_read_callback;
diff --git a/sys/dev/vge/if_vge.c b/sys/dev/vge/if_vge.c
index a2457695e8e..127a123cc63 100644
--- a/sys/dev/vge/if_vge.c
+++ b/sys/dev/vge/if_vge.c
@@ -93,7 +93,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
+#include 
 
 #include 
 #include 
@@ -128,68 +128,79 @@ MODULE_DEPEND(vge, miibus, 1, 1, 1);
 
 #define VGE_CSUM_FEATURES    (CSUM_IP | CSUM_TCP | CSUM_UDP)
 
+/* Tunables */
+static int msi_disable = 0;
+TUNABLE_INT("hw.vge.msi_disable", &msi_disable);
+
+/*
+ * The SQE error counter of MIB seems to report bogus value.
+ * Vendor's workaround does not seem to work on PCIe based
+ * controllers. Disable it until we find better workaround.
+ */
+#undef VGE_ENABLE_SQEERR
+
 /*
  * Various supported device vendors/types and their names.
  */
 static struct vge_type vge_devs[] = {
 	{ VIA_VENDORID, VIA_DEVICEID_61XX,
-		"VIA Networking Gigabit Ethernet" },
+		"VIA Networking Velocity Gigabit Ethernet" },
 	{ 0, 0, NULL }
 };
 
-static int vge_probe		(device_t);
-static int vge_attach		(device_t);
-static int vge_detach		(device_t);
-
-static int vge_encap		(struct vge_softc *, struct mbuf *, int);
-
-static void vge_dma_map_addr	(void *, bus_dma_segment_t *, int, int);
-static void vge_dma_map_rx_desc	(void *, bus_dma_segment_t *, int,
-				    bus_size_t, int);
-static void vge_dma_map_tx_desc	(void *, bus_dma_segment_t *, int,
-				    bus_size_t, int);
-static int vge_allocmem		(device_t, struct vge_softc *);
-static int vge_newbuf		(struct vge_softc *, int, struct mbuf *);
-static int vge_rx_list_init	(struct vge_softc *);
-static int vge_tx_list_init	(struct vge_softc *);
-#ifdef VGE_FIXUP_RX
-static __inline void vge_fixup_rx
-				(struct mbuf *);
-#endif
-static int vge_rxeof		(struct vge_softc *);
-static void vge_txeof		(struct vge_softc *);
-static void vge_intr		(void *);
-static void vge_tick		(void *);
-static void vge_tx_task		(void *, int);
-static void vge_start		(struct ifnet *);
-static int vge_ioctl		(struct ifnet *, u_long, caddr_t);
-static void vge_init		(void *);
-static void vge_stop		(struct vge_softc *);
-static void vge_watchdog	(struct ifnet *);
-static int vge_suspend		(device_t);
-static int vge_resume		(device_t);
-static int vge_shutdown		(device_t);
-static int vge_ifmedia_upd	(struct ifnet *);
-static void vge_ifmedia_sts	(struct ifnet *, struct ifmediareq *);
+static int	vge_attach(device_t);
+static int	vge_detach(device_t);
+static int	vge_probe(device_t);
+static int	vge_resume(device_t);
+static int	vge_shutdown(device_t);
+static int	vge_suspend(device_t);
 
+static void	vge_cam_clear(struct vge_softc *);
+static int	vge_cam_set(struct vge_softc *, uint8_t *);
+static void	vge_clrwol(struct vge_softc *);
+static void	vge_discard_rxbuf(struct vge_softc *, int);
+static int	vge_dma_alloc(struct vge_softc *);
+static void	vge_dma_free(struct vge_softc *);
+static void	vge_dmamap_cb(void *, bus_dma_segment_t *, int, int);
 #ifdef VGE_EEPROM
-static void vge_eeprom_getword	(struct vge_softc *, int, u_int16_t *);
+static void	vge_eeprom_getword(struct vge_softc *, int, uint16_t *);
 #endif
-static void vge_read_eeprom	(struct vge_softc *, caddr_t, int, int, int);
-
-static void vge_miipoll_start	(struct vge_softc *);
-static void vge_miipoll_stop	(struct vge_softc *);
-static int vge_miibus_readreg	(device_t, int, int);
-static int vge_miibus_writereg	(device_t, int, int, int);
-static void vge_miibus_statchg	(device_t);
-
-static void vge_cam_clear	(struct vge_softc *);
-static int vge_cam_set		(struct vge_softc *, uint8_t *);
-static void vge_setmulti	(struct vge_softc *);
-static void vge_reset		(struct vge_softc *);
-
-#define VGE_PCI_LOIO             0x10
-#define VGE_PCI_LOMEM            0x14
+static int	vge_encap(struct vge_softc *, struct mbuf **);
+#ifndef __NO_STRICT_ALIGNMENT
+static __inline void
+		vge_fixup_rx(struct mbuf *);
+#endif
+static void	vge_freebufs(struct vge_softc *);
+static void	vge_ifmedia_sts(struct ifnet *, struct ifmediareq *);
+static int	vge_ifmedia_upd(struct ifnet *);
+static void	vge_init(void *);
+static void	vge_init_locked(struct vge_softc *);
+static void	vge_intr(void *);
+static void	vge_intr_holdoff(struct vge_softc *);
+static int	vge_ioctl(struct ifnet *, u_long, caddr_t);
+static void	vge_link_statchg(void *);
+static int	vge_miibus_readreg(device_t, int, int);
+static void	vge_miibus_statchg(device_t);
+static int	vge_miibus_writereg(device_t, int, int, int);
+static void	vge_miipoll_start(struct vge_softc *);
+static void	vge_miipoll_stop(struct vge_softc *);
+static int	vge_newbuf(struct vge_softc *, int);
+static void	vge_read_eeprom(struct vge_softc *, caddr_t, int, int, int);
+static void	vge_reset(struct vge_softc *);
+static int	vge_rx_list_init(struct vge_softc *);
+static int	vge_rxeof(struct vge_softc *, int);
+static void	vge_rxfilter(struct vge_softc *);
+static void	vge_setvlan(struct vge_softc *);
+static void	vge_setwol(struct vge_softc *);
+static void	vge_start(struct ifnet *);
+static void	vge_start_locked(struct ifnet *);
+static void	vge_stats_clear(struct vge_softc *);
+static void	vge_stats_update(struct vge_softc *);
+static void	vge_stop(struct vge_softc *);
+static void	vge_sysctl_node(struct vge_softc *);
+static int	vge_tx_list_init(struct vge_softc *);
+static void	vge_txeof(struct vge_softc *);
+static void	vge_watchdog(void *);
 
 static device_method_t vge_methods[] = {
 	/* Device interface */
@@ -228,13 +239,10 @@ DRIVER_MODULE(miibus, vge, miibus_driver, miibus_devclass, 0, 0);
  * Read a word of data stored in the EEPROM at address 'addr.'
  */
 static void
-vge_eeprom_getword(sc, addr, dest)
-	struct vge_softc	*sc;
-	int			addr;
-	u_int16_t		*dest;
+vge_eeprom_getword(struct vge_softc *sc, int addr, uint16_t *dest)
 {
-	register int		i;
-	u_int16_t		word = 0;
+	int i;
+	uint16_t word = 0;
 
 	/*
 	 * Enter EEPROM embedded programming mode. In order to
@@ -270,8 +278,6 @@ vge_eeprom_getword(sc, addr, dest)
 	CSR_CLRBIT_1(sc, VGE_CHIPCFG2, VGE_CHIPCFG2_EELOAD);
 
 	*dest = word;
-
-	return;
 }
 #endif
 
@@ -279,20 +285,15 @@ vge_eeprom_getword(sc, addr, dest)
  * Read a sequence of words from the EEPROM.
  */
 static void
-vge_read_eeprom(sc, dest, off, cnt, swap)
-	struct vge_softc	*sc;
-	caddr_t			dest;
-	int			off;
-	int			cnt;
-	int			swap;
+vge_read_eeprom(struct vge_softc *sc, caddr_t dest, int off, int cnt, int swap)
 {
-	int			i;
+	int i;
 #ifdef VGE_EEPROM
-	u_int16_t		word = 0, *ptr;
+	uint16_t word = 0, *ptr;
 
 	for (i = 0; i < cnt; i++) {
 		vge_eeprom_getword(sc, off + i, &word);
-		ptr = (u_int16_t *)(dest + (i * 2));
+		ptr = (uint16_t *)(dest + (i * 2));
 		if (swap)
 			*ptr = ntohs(word);
 		else
@@ -305,10 +306,9 @@ vge_read_eeprom(sc, dest, off, cnt, swap)
 }
 
 static void
-vge_miipoll_stop(sc)
-	struct vge_softc	*sc;
+vge_miipoll_stop(struct vge_softc *sc)
 {
-	int			i;
+	int i;
 
 	CSR_WRITE_1(sc, VGE_MIICMD, 0);
 
@@ -320,15 +320,12 @@ vge_miipoll_stop(sc)
 
 	if (i == VGE_TIMEOUT)
 		device_printf(sc->vge_dev, "failed to idle MII autopoll\n");
-
-	return;
 }
 
 static void
-vge_miipoll_start(sc)
-	struct vge_softc	*sc;
+vge_miipoll_start(struct vge_softc *sc)
 {
-	int			i;
+	int i;
 
 	/* First, make sure we're idle. */
 
@@ -360,25 +357,20 @@ vge_miipoll_start(sc)
 
 	if (i == VGE_TIMEOUT)
 		device_printf(sc->vge_dev, "failed to start MII autopoll\n");
-
-	return;
 }
 
 static int
-vge_miibus_readreg(dev, phy, reg)
-	device_t		dev;
-	int			phy, reg;
+vge_miibus_readreg(device_t dev, int phy, int reg)
 {
-	struct vge_softc	*sc;
-	int			i;
-	u_int16_t		rval = 0;
+	struct vge_softc *sc;
+	int i;
+	uint16_t rval = 0;
 
 	sc = device_get_softc(dev);
 
-	if (phy != (CSR_READ_1(sc, VGE_MIICFG) & 0x1F))
-		return(0);
+	if (phy != sc->vge_phyaddr)
+		return (0);
 
-	VGE_LOCK(sc);
 	vge_miipoll_stop(sc);
 
 	/* Specify the register we want to read. */
@@ -400,25 +392,21 @@ vge_miibus_readreg(dev, phy, reg)
 		rval = CSR_READ_2(sc, VGE_MIIDATA);
 
 	vge_miipoll_start(sc);
-	VGE_UNLOCK(sc);
 
 	return (rval);
 }
 
 static int
-vge_miibus_writereg(dev, phy, reg, data)
-	device_t		dev;
-	int			phy, reg, data;
+vge_miibus_writereg(device_t dev, int phy, int reg, int data)
 {
-	struct vge_softc	*sc;
-	int			i, rval = 0;
+	struct vge_softc *sc;
+	int i, rval = 0;
 
 	sc = device_get_softc(dev);
 
-	if (phy != (CSR_READ_1(sc, VGE_MIICFG) & 0x1F))
-		return(0);
+	if (phy != sc->vge_phyaddr)
+		return (0);
 
-	VGE_LOCK(sc);
 	vge_miipoll_stop(sc);
 
 	/* Specify the register we want to write. */
@@ -443,16 +431,14 @@ vge_miibus_writereg(dev, phy, reg, data)
 	}
 
 	vge_miipoll_start(sc);
-	VGE_UNLOCK(sc);
 
 	return (rval);
 }
 
 static void
-vge_cam_clear(sc)
-	struct vge_softc	*sc;
+vge_cam_clear(struct vge_softc *sc)
 {
-	int			i;
+	int i;
 
 	/*
 	 * Turn off all the mask bits. This tells the chip
@@ -477,19 +463,15 @@ vge_cam_clear(sc)
 	CSR_SETBIT_1(sc, VGE_CAMCTL, VGE_PAGESEL_MAR);
 
 	sc->vge_camidx = 0;
-
-	return;
 }
 
 static int
-vge_cam_set(sc, addr)
-	struct vge_softc	*sc;
-	uint8_t			*addr;
+vge_cam_set(struct vge_softc *sc, uint8_t *addr)
 {
-	int			i, error = 0;
+	int i, error = 0;
 
 	if (sc->vge_camidx == VGE_CAM_MAXADDRS)
-		return(ENOSPC);
+		return (ENOSPC);
 
 	/* Select the CAM data page. */
 	CSR_CLRBIT_1(sc, VGE_CAMCTL, VGE_CAMCTL_PAGESEL);
@@ -537,37 +519,66 @@ fail:
 	return (error);
 }
 
+static void
+vge_setvlan(struct vge_softc *sc)
+{
+	struct ifnet *ifp;
+	uint8_t cfg;
+
+	VGE_LOCK_ASSERT(sc);
+
+	ifp = sc->vge_ifp;
+	cfg = CSR_READ_1(sc, VGE_RXCFG);
+	if ((ifp->if_capenable & IFCAP_VLAN_HWTAGGING) != 0)
+		cfg |= VGE_VTAG_OPT2;
+	else
+		cfg &= ~VGE_VTAG_OPT2;
+	CSR_WRITE_1(sc, VGE_RXCFG, cfg);
+}
+
 /*
  * Program the multicast filter. We use the 64-entry CAM filter
  * for perfect filtering. If there's more than 64 multicast addresses,
- * we use the hash filter insted.
+ * we use the hash filter instead.
  */
 static void
-vge_setmulti(sc)
-	struct vge_softc	*sc;
+vge_rxfilter(struct vge_softc *sc)
 {
-	struct ifnet		*ifp;
-	int			error = 0/*, h = 0*/;
-	struct ifmultiaddr	*ifma;
-	u_int32_t		h, hashes[2] = { 0, 0 };
+	struct ifnet *ifp;
+	struct ifmultiaddr *ifma;
+	uint32_t h, hashes[2];
+	uint8_t rxcfg;
+	int error = 0;
 
-	ifp = sc->vge_ifp;
+	VGE_LOCK_ASSERT(sc);
 
 	/* First, zot all the multicast entries. */
-	vge_cam_clear(sc);
-	CSR_WRITE_4(sc, VGE_MAR0, 0);
-	CSR_WRITE_4(sc, VGE_MAR1, 0);
+	hashes[0] = 0;
+	hashes[1] = 0;
 
+	rxcfg = CSR_READ_1(sc, VGE_RXCTL);
+	rxcfg &= ~(VGE_RXCTL_RX_MCAST | VGE_RXCTL_RX_BCAST |
+	    VGE_RXCTL_RX_PROMISC);
 	/*
-	 * If the user wants allmulti or promisc mode, enable reception
-	 * of all multicast frames.
+	 * Always allow VLAN oversized frames and frames for
+	 * this host.
 	 */
-	if (ifp->if_flags & IFF_ALLMULTI || ifp->if_flags & IFF_PROMISC) {
-		CSR_WRITE_4(sc, VGE_MAR0, 0xFFFFFFFF);
-		CSR_WRITE_4(sc, VGE_MAR1, 0xFFFFFFFF);
-		return;
+	rxcfg |= VGE_RXCTL_RX_GIANT | VGE_RXCTL_RX_UCAST;
+
+	ifp = sc->vge_ifp;
+	if ((ifp->if_flags & IFF_BROADCAST) != 0)
+		rxcfg |= VGE_RXCTL_RX_BCAST;
+	if ((ifp->if_flags & (IFF_PROMISC | IFF_ALLMULTI)) != 0) {
+		if ((ifp->if_flags & IFF_PROMISC) != 0)
+			rxcfg |= VGE_RXCTL_RX_PROMISC;
+		if ((ifp->if_flags & IFF_ALLMULTI) != 0) {
+			hashes[0] = 0xFFFFFFFF;
+			hashes[1] = 0xFFFFFFFF;
+		}
+		goto done;
 	}
 
+	vge_cam_clear(sc);
 	/* Now program new ones */
 	if_maddr_rlock(ifp);
 	TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
@@ -593,20 +604,21 @@ vge_setmulti(sc)
 			else
 				hashes[1] |= (1 << (h - 32));
 		}
-
-		CSR_WRITE_4(sc, VGE_MAR0, hashes[0]);
-		CSR_WRITE_4(sc, VGE_MAR1, hashes[1]);
 	}
 	if_maddr_runlock(ifp);
 
-	return;
+done:
+	if (hashes[0] != 0 || hashes[1] != 0)
+		rxcfg |= VGE_RXCTL_RX_MCAST;
+	CSR_WRITE_4(sc, VGE_MAR0, hashes[0]);
+	CSR_WRITE_4(sc, VGE_MAR1, hashes[1]);
+	CSR_WRITE_1(sc, VGE_RXCTL, rxcfg);
 }
 
 static void
-vge_reset(sc)
-	struct vge_softc		*sc;
+vge_reset(struct vge_softc *sc)
 {
-	register int		i;
+	int i;
 
 	CSR_WRITE_1(sc, VGE_CRS1, VGE_CR1_SOFTRESET);
 
@@ -617,29 +629,12 @@ vge_reset(sc)
 	}
 
 	if (i == VGE_TIMEOUT) {
-		device_printf(sc->vge_dev, "soft reset timed out");
+		device_printf(sc->vge_dev, "soft reset timed out\n");
 		CSR_WRITE_1(sc, VGE_CRS3, VGE_CR3_STOP_FORCE);
 		DELAY(2000);
 	}
 
 	DELAY(5000);
-
-	CSR_SETBIT_1(sc, VGE_EECSR, VGE_EECSR_RELOAD);
-
-	for (i = 0; i < VGE_TIMEOUT; i++) {
-		DELAY(5);
-		if ((CSR_READ_1(sc, VGE_EECSR) & VGE_EECSR_RELOAD) == 0)
-			break;
-	}
-
-	if (i == VGE_TIMEOUT) {
-		device_printf(sc->vge_dev, "EEPROM reload timed out\n");
-		return;
-	}
-
-	CSR_CLRBIT_1(sc, VGE_CHIPCFG0, VGE_CHIPCFG0_PACPI);
-
-	return;
 }
 
 /*
@@ -647,10 +642,9 @@ vge_reset(sc)
  * IDs against our list and return a device name if we find a match.
  */
 static int
-vge_probe(dev)
-	device_t		dev;
+vge_probe(device_t dev)
 {
-	struct vge_type		*t;
+	struct vge_type	*t;
 
 	t = vge_devs;
 
@@ -666,249 +660,320 @@ vge_probe(dev)
 	return (ENXIO);
 }
 
-static void
-vge_dma_map_rx_desc(arg, segs, nseg, mapsize, error)
-	void			*arg;
-	bus_dma_segment_t	*segs;
-	int			nseg;
-	bus_size_t		mapsize;
-	int			error;
-{
-
-	struct vge_dmaload_arg	*ctx;
-	struct vge_rx_desc	*d = NULL;
-
-	if (error)
-		return;
-
-	ctx = arg;
-
-	/* Signal error to caller if there's too many segments */
-	if (nseg > ctx->vge_maxsegs) {
-		ctx->vge_maxsegs = 0;
-		return;
-	}
-
-	/*
-	 * Map the segment array into descriptors.
-	 */
-
-	d = &ctx->sc->vge_ldata.vge_rx_list[ctx->vge_idx];
-
-	/* If this descriptor is still owned by the chip, bail. */
-
-	if (le32toh(d->vge_sts) & VGE_RDSTS_OWN) {
-		device_printf(ctx->sc->vge_dev,
-		    "tried to map busy descriptor\n");
-		ctx->vge_maxsegs = 0;
-		return;
-	}
-
-	d->vge_buflen = htole16(VGE_BUFLEN(segs[0].ds_len) | VGE_RXDESC_I);
-	d->vge_addrlo = htole32(VGE_ADDR_LO(segs[0].ds_addr));
-	d->vge_addrhi = htole16(VGE_ADDR_HI(segs[0].ds_addr) & 0xFFFF);
-	d->vge_sts = 0;
-	d->vge_ctl = 0;
-
-	ctx->vge_maxsegs = 1;
-
-	return;
-}
-
-static void
-vge_dma_map_tx_desc(arg, segs, nseg, mapsize, error)
-	void			*arg;
-	bus_dma_segment_t	*segs;
-	int			nseg;
-	bus_size_t		mapsize;
-	int			error;
-{
-	struct vge_dmaload_arg	*ctx;
-	struct vge_tx_desc	*d = NULL;
-	struct vge_tx_frag	*f;
-	int			i = 0;
-
-	if (error)
-		return;
-
-	ctx = arg;
-
-	/* Signal error to caller if there's too many segments */
-	if (nseg > ctx->vge_maxsegs) {
-		ctx->vge_maxsegs = 0;
-		return;
-	}
-
-	/* Map the segment array into descriptors. */
-
-	d = &ctx->sc->vge_ldata.vge_tx_list[ctx->vge_idx];
-
-	/* If this descriptor is still owned by the chip, bail. */
-
-	if (le32toh(d->vge_sts) & VGE_TDSTS_OWN) {
-		ctx->vge_maxsegs = 0;
-		return;
-	}
-
-	for (i = 0; i < nseg; i++) {
-		f = &d->vge_frag[i];
-		f->vge_buflen = htole16(VGE_BUFLEN(segs[i].ds_len));
-		f->vge_addrlo = htole32(VGE_ADDR_LO(segs[i].ds_addr));
-		f->vge_addrhi = htole16(VGE_ADDR_HI(segs[i].ds_addr) & 0xFFFF);
-	}
-
-	/* Argh. This chip does not autopad short frames */
-
-	if (ctx->vge_m0->m_pkthdr.len < VGE_MIN_FRAMELEN) {
-		f = &d->vge_frag[i];
-		f->vge_buflen = htole16(VGE_BUFLEN(VGE_MIN_FRAMELEN -
-		    ctx->vge_m0->m_pkthdr.len));
-		f->vge_addrlo = htole32(VGE_ADDR_LO(segs[0].ds_addr));
-		f->vge_addrhi = htole16(VGE_ADDR_HI(segs[0].ds_addr) & 0xFFFF);
-		ctx->vge_m0->m_pkthdr.len = VGE_MIN_FRAMELEN;
-		i++;
-	}
-
-	/*
-	 * When telling the chip how many segments there are, we
-	 * must use nsegs + 1 instead of just nsegs. Darned if I
-	 * know why.
-	 */
-	i++;
-
-	d->vge_sts = ctx->vge_m0->m_pkthdr.len << 16;
-	d->vge_ctl = ctx->vge_flags|(i << 28)|VGE_TD_LS_NORM;
-
-	if (ctx->vge_m0->m_pkthdr.len > ETHERMTU + ETHER_HDR_LEN)
-		d->vge_ctl |= VGE_TDCTL_JUMBO;
-
-	ctx->vge_maxsegs = nseg;
-
-	return;
-}
-
 /*
  * Map a single buffer address.
  */
 
-static void
-vge_dma_map_addr(arg, segs, nseg, error)
-	void			*arg;
-	bus_dma_segment_t	*segs;
-	int			nseg;
-	int			error;
-{
-	bus_addr_t		*addr;
+struct vge_dmamap_arg {
+	bus_addr_t	vge_busaddr;
+};
 
-	if (error)
+static void
+vge_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
+{
+	struct vge_dmamap_arg *ctx;
+
+	if (error != 0)
 		return;
 
-	KASSERT(nseg == 1, ("too many DMA segments, %d should be 1", nseg));
-	addr = arg;
-	*addr = segs->ds_addr;
+	KASSERT(nsegs == 1, ("%s: %d segments returned!", __func__, nsegs));
 
-	return;
+	ctx = (struct vge_dmamap_arg *)arg;
+	ctx->vge_busaddr = segs[0].ds_addr;
 }
 
 static int
-vge_allocmem(dev, sc)
-	device_t		dev;
-	struct vge_softc		*sc;
+vge_dma_alloc(struct vge_softc *sc)
 {
-	int			error;
-	int			nseg;
-	int			i;
+	struct vge_dmamap_arg ctx;
+	struct vge_txdesc *txd;
+	struct vge_rxdesc *rxd;
+	bus_addr_t lowaddr, tx_ring_end, rx_ring_end;
+	int error, i;
 
-	/*
-	 * Allocate map for RX mbufs.
-	 */
-	nseg = 32;
-	error = bus_dma_tag_create(sc->vge_parent_tag, ETHER_ALIGN, 0,
-	    BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL,
-	    NULL, MCLBYTES * nseg, nseg, MCLBYTES, BUS_DMA_ALLOCNOW,
-	    NULL, NULL, &sc->vge_ldata.vge_mtag);
-	if (error) {
-		device_printf(dev, "could not allocate dma tag\n");
-		return (ENOMEM);
+	lowaddr = BUS_SPACE_MAXADDR;
+
+again:
+	/* Create parent ring tag. */
+	error = bus_dma_tag_create(bus_get_dma_tag(sc->vge_dev),/* parent */
+	    1, 0,			/* algnmnt, boundary */
+	    lowaddr,			/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,			/* filter, filterarg */
+	    BUS_SPACE_MAXSIZE_32BIT,	/* maxsize */
+	    0,				/* nsegments */
+	    BUS_SPACE_MAXSIZE_32BIT,	/* maxsegsize */
+	    0,				/* flags */
+	    NULL, NULL,			/* lockfunc, lockarg */
+	    &sc->vge_cdata.vge_ring_tag);
+	if (error != 0) {
+		device_printf(sc->vge_dev,
+		    "could not create parent DMA tag.\n");
+		goto fail;
 	}
 
-	/*
-	 * Allocate map for TX descriptor list.
-	 */
-	error = bus_dma_tag_create(sc->vge_parent_tag, VGE_RING_ALIGN,
-	    0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL,
-	    NULL, VGE_TX_LIST_SZ, 1, VGE_TX_LIST_SZ, BUS_DMA_ALLOCNOW,
-	    NULL, NULL, &sc->vge_ldata.vge_tx_list_tag);
-	if (error) {
-		device_printf(dev, "could not allocate dma tag\n");
-		return (ENOMEM);
+	/* Create tag for Tx ring. */
+	error = bus_dma_tag_create(sc->vge_cdata.vge_ring_tag,/* parent */
+	    VGE_TX_RING_ALIGN, 0,	/* algnmnt, boundary */
+	    BUS_SPACE_MAXADDR,		/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,			/* filter, filterarg */
+	    VGE_TX_LIST_SZ,		/* maxsize */
+	    1,				/* nsegments */
+	    VGE_TX_LIST_SZ,		/* maxsegsize */
+	    0,				/* flags */
+	    NULL, NULL,			/* lockfunc, lockarg */
+	    &sc->vge_cdata.vge_tx_ring_tag);
+	if (error != 0) {
+		device_printf(sc->vge_dev,
+		    "could not allocate Tx ring DMA tag.\n");
+		goto fail;
 	}
 
-	/* Allocate DMA'able memory for the TX ring */
+	/* Create tag for Rx ring. */
+	error = bus_dma_tag_create(sc->vge_cdata.vge_ring_tag,/* parent */
+	    VGE_RX_RING_ALIGN, 0,	/* algnmnt, boundary */
+	    BUS_SPACE_MAXADDR,		/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,			/* filter, filterarg */
+	    VGE_RX_LIST_SZ,		/* maxsize */
+	    1,				/* nsegments */
+	    VGE_RX_LIST_SZ,		/* maxsegsize */
+	    0,				/* flags */
+	    NULL, NULL,			/* lockfunc, lockarg */
+	    &sc->vge_cdata.vge_rx_ring_tag);
+	if (error != 0) {
+		device_printf(sc->vge_dev,
+		    "could not allocate Rx ring DMA tag.\n");
+		goto fail;
+	}
 
-	error = bus_dmamem_alloc(sc->vge_ldata.vge_tx_list_tag,
-	    (void **)&sc->vge_ldata.vge_tx_list, BUS_DMA_NOWAIT | BUS_DMA_ZERO,
-	    &sc->vge_ldata.vge_tx_list_map);
-	if (error)
-		return (ENOMEM);
+	/* Allocate DMA'able memory and load the DMA map for Tx ring. */
+	error = bus_dmamem_alloc(sc->vge_cdata.vge_tx_ring_tag,
+	    (void **)&sc->vge_rdata.vge_tx_ring,
+	    BUS_DMA_WAITOK | BUS_DMA_ZERO | BUS_DMA_COHERENT,
+	    &sc->vge_cdata.vge_tx_ring_map);
+	if (error != 0) {
+		device_printf(sc->vge_dev,
+		    "could not allocate DMA'able memory for Tx ring.\n");
+		goto fail;
+	}
 
-	/* Load the map for the TX ring. */
+	ctx.vge_busaddr = 0;
+	error = bus_dmamap_load(sc->vge_cdata.vge_tx_ring_tag,
+	    sc->vge_cdata.vge_tx_ring_map, sc->vge_rdata.vge_tx_ring,
+	    VGE_TX_LIST_SZ, vge_dmamap_cb, &ctx, BUS_DMA_NOWAIT);
+	if (error != 0 || ctx.vge_busaddr == 0) {
+		device_printf(sc->vge_dev,
+		    "could not load DMA'able memory for Tx ring.\n");
+		goto fail;
+	}
+	sc->vge_rdata.vge_tx_ring_paddr = ctx.vge_busaddr;
 
-	error = bus_dmamap_load(sc->vge_ldata.vge_tx_list_tag,
-	     sc->vge_ldata.vge_tx_list_map, sc->vge_ldata.vge_tx_list,
-	     VGE_TX_LIST_SZ, vge_dma_map_addr,
-	     &sc->vge_ldata.vge_tx_list_addr, BUS_DMA_NOWAIT);
+	/* Allocate DMA'able memory and load the DMA map for Rx ring. */
+	error = bus_dmamem_alloc(sc->vge_cdata.vge_rx_ring_tag,
+	    (void **)&sc->vge_rdata.vge_rx_ring,
+	    BUS_DMA_WAITOK | BUS_DMA_ZERO | BUS_DMA_COHERENT,
+	    &sc->vge_cdata.vge_rx_ring_map);
+	if (error != 0) {
+		device_printf(sc->vge_dev,
+		    "could not allocate DMA'able memory for Rx ring.\n");
+		goto fail;
+	}
 
-	/* Create DMA maps for TX buffers */
+	ctx.vge_busaddr = 0;
+	error = bus_dmamap_load(sc->vge_cdata.vge_rx_ring_tag,
+	    sc->vge_cdata.vge_rx_ring_map, sc->vge_rdata.vge_rx_ring,
+	    VGE_RX_LIST_SZ, vge_dmamap_cb, &ctx, BUS_DMA_NOWAIT);
+	if (error != 0 || ctx.vge_busaddr == 0) {
+		device_printf(sc->vge_dev,
+		    "could not load DMA'able memory for Rx ring.\n");
+		goto fail;
+	}
+	sc->vge_rdata.vge_rx_ring_paddr = ctx.vge_busaddr;
 
+	/* Tx/Rx descriptor queue should reside within 4GB boundary. */
+	tx_ring_end = sc->vge_rdata.vge_tx_ring_paddr + VGE_TX_LIST_SZ;
+	rx_ring_end = sc->vge_rdata.vge_rx_ring_paddr + VGE_RX_LIST_SZ;
+	if ((VGE_ADDR_HI(tx_ring_end) !=
+	    VGE_ADDR_HI(sc->vge_rdata.vge_tx_ring_paddr)) ||
+	    (VGE_ADDR_HI(rx_ring_end) !=
+	    VGE_ADDR_HI(sc->vge_rdata.vge_rx_ring_paddr)) ||
+	    VGE_ADDR_HI(tx_ring_end) != VGE_ADDR_HI(rx_ring_end)) {
+		device_printf(sc->vge_dev, "4GB boundary crossed, "
+		    "switching to 32bit DMA address mode.\n");
+		vge_dma_free(sc);
+		/* Limit DMA address space to 32bit and try again. */
+		lowaddr = BUS_SPACE_MAXADDR_32BIT;
+		goto again;
+	}
+
+	/* Create parent buffer tag. */
+	error = bus_dma_tag_create(bus_get_dma_tag(sc->vge_dev),/* parent */
+	    1, 0,			/* algnmnt, boundary */
+	    VGE_BUF_DMA_MAXADDR,	/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,			/* filter, filterarg */
+	    BUS_SPACE_MAXSIZE_32BIT,	/* maxsize */
+	    0,				/* nsegments */
+	    BUS_SPACE_MAXSIZE_32BIT,	/* maxsegsize */
+	    0,				/* flags */
+	    NULL, NULL,			/* lockfunc, lockarg */
+	    &sc->vge_cdata.vge_buffer_tag);
+	if (error != 0) {
+		device_printf(sc->vge_dev,
+		    "could not create parent buffer DMA tag.\n");
+		goto fail;
+	}
+
+	/* Create tag for Tx buffers. */
+	error = bus_dma_tag_create(sc->vge_cdata.vge_buffer_tag,/* parent */
+	    1, 0,			/* algnmnt, boundary */
+	    BUS_SPACE_MAXADDR,		/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,			/* filter, filterarg */
+	    MCLBYTES * VGE_MAXTXSEGS,	/* maxsize */
+	    VGE_MAXTXSEGS,		/* nsegments */
+	    MCLBYTES,			/* maxsegsize */
+	    0,				/* flags */
+	    NULL, NULL,			/* lockfunc, lockarg */
+	    &sc->vge_cdata.vge_tx_tag);
+	if (error != 0) {
+		device_printf(sc->vge_dev, "could not create Tx DMA tag.\n");
+		goto fail;
+	}
+
+	/* Create tag for Rx buffers. */
+	error = bus_dma_tag_create(sc->vge_cdata.vge_buffer_tag,/* parent */
+	    VGE_RX_BUF_ALIGN, 0,	/* algnmnt, boundary */
+	    BUS_SPACE_MAXADDR,		/* lowaddr */
+	    BUS_SPACE_MAXADDR,		/* highaddr */
+	    NULL, NULL,			/* filter, filterarg */
+	    MCLBYTES,			/* maxsize */
+	    1,				/* nsegments */
+	    MCLBYTES,			/* maxsegsize */
+	    0,				/* flags */
+	    NULL, NULL,			/* lockfunc, lockarg */
+	    &sc->vge_cdata.vge_rx_tag);
+	if (error != 0) {
+		device_printf(sc->vge_dev, "could not create Rx DMA tag.\n");
+		goto fail;
+	}
+
+	/* Create DMA maps for Tx buffers. */
 	for (i = 0; i < VGE_TX_DESC_CNT; i++) {
-		error = bus_dmamap_create(sc->vge_ldata.vge_mtag, 0,
-			    &sc->vge_ldata.vge_tx_dmamap[i]);
-		if (error) {
-			device_printf(dev, "can't create DMA map for TX\n");
-			return (ENOMEM);
+		txd = &sc->vge_cdata.vge_txdesc[i];
+		txd->tx_m = NULL;
+		txd->tx_dmamap = NULL;
+		error = bus_dmamap_create(sc->vge_cdata.vge_tx_tag, 0,
+		    &txd->tx_dmamap);
+		if (error != 0) {
+			device_printf(sc->vge_dev,
+			    "could not create Tx dmamap.\n");
+			goto fail;
 		}
 	}
-
-	/*
-	 * Allocate map for RX descriptor list.
-	 */
-	error = bus_dma_tag_create(sc->vge_parent_tag, VGE_RING_ALIGN,
-	    0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL,
-	    NULL, VGE_TX_LIST_SZ, 1, VGE_TX_LIST_SZ, BUS_DMA_ALLOCNOW,
-	    NULL, NULL, &sc->vge_ldata.vge_rx_list_tag);
-	if (error) {
-		device_printf(dev, "could not allocate dma tag\n");
-		return (ENOMEM);
+	/* Create DMA maps for Rx buffers. */
+	if ((error = bus_dmamap_create(sc->vge_cdata.vge_rx_tag, 0,
+	    &sc->vge_cdata.vge_rx_sparemap)) != 0) {
+		device_printf(sc->vge_dev,
+		    "could not create spare Rx dmamap.\n");
+		goto fail;
 	}
-
-	/* Allocate DMA'able memory for the RX ring */
-
-	error = bus_dmamem_alloc(sc->vge_ldata.vge_rx_list_tag,
-	    (void **)&sc->vge_ldata.vge_rx_list, BUS_DMA_NOWAIT | BUS_DMA_ZERO,
-	    &sc->vge_ldata.vge_rx_list_map);
-	if (error)
-		return (ENOMEM);
-
-	/* Load the map for the RX ring. */
-
-	error = bus_dmamap_load(sc->vge_ldata.vge_rx_list_tag,
-	     sc->vge_ldata.vge_rx_list_map, sc->vge_ldata.vge_rx_list,
-	     VGE_TX_LIST_SZ, vge_dma_map_addr,
-	     &sc->vge_ldata.vge_rx_list_addr, BUS_DMA_NOWAIT);
-
-	/* Create DMA maps for RX buffers */
-
 	for (i = 0; i < VGE_RX_DESC_CNT; i++) {
-		error = bus_dmamap_create(sc->vge_ldata.vge_mtag, 0,
-			    &sc->vge_ldata.vge_rx_dmamap[i]);
-		if (error) {
-			device_printf(dev, "can't create DMA map for RX\n");
-			return (ENOMEM);
+		rxd = &sc->vge_cdata.vge_rxdesc[i];
+		rxd->rx_m = NULL;
+		rxd->rx_dmamap = NULL;
+		error = bus_dmamap_create(sc->vge_cdata.vge_rx_tag, 0,
+		    &rxd->rx_dmamap);
+		if (error != 0) {
+			device_printf(sc->vge_dev,
+			    "could not create Rx dmamap.\n");
+			goto fail;
 		}
 	}
 
-	return (0);
+fail:
+	return (error);
+}
+
+static void
+vge_dma_free(struct vge_softc *sc)
+{
+	struct vge_txdesc *txd;
+	struct vge_rxdesc *rxd;
+	int i;
+
+	/* Tx ring. */
+	if (sc->vge_cdata.vge_tx_ring_tag != NULL) {
+		if (sc->vge_cdata.vge_tx_ring_map)
+			bus_dmamap_unload(sc->vge_cdata.vge_tx_ring_tag,
+			    sc->vge_cdata.vge_tx_ring_map);
+		if (sc->vge_cdata.vge_tx_ring_map &&
+		    sc->vge_rdata.vge_tx_ring)
+			bus_dmamem_free(sc->vge_cdata.vge_tx_ring_tag,
+			    sc->vge_rdata.vge_tx_ring,
+			    sc->vge_cdata.vge_tx_ring_map);
+		sc->vge_rdata.vge_tx_ring = NULL;
+		sc->vge_cdata.vge_tx_ring_map = NULL;
+		bus_dma_tag_destroy(sc->vge_cdata.vge_tx_ring_tag);
+		sc->vge_cdata.vge_tx_ring_tag = NULL;
+	}
+	/* Rx ring. */
+	if (sc->vge_cdata.vge_rx_ring_tag != NULL) {
+		if (sc->vge_cdata.vge_rx_ring_map)
+			bus_dmamap_unload(sc->vge_cdata.vge_rx_ring_tag,
+			    sc->vge_cdata.vge_rx_ring_map);
+		if (sc->vge_cdata.vge_rx_ring_map &&
+		    sc->vge_rdata.vge_rx_ring)
+			bus_dmamem_free(sc->vge_cdata.vge_rx_ring_tag,
+			    sc->vge_rdata.vge_rx_ring,
+			    sc->vge_cdata.vge_rx_ring_map);
+		sc->vge_rdata.vge_rx_ring = NULL;
+		sc->vge_cdata.vge_rx_ring_map = NULL;
+		bus_dma_tag_destroy(sc->vge_cdata.vge_rx_ring_tag);
+		sc->vge_cdata.vge_rx_ring_tag = NULL;
+	}
+	/* Tx buffers. */
+	if (sc->vge_cdata.vge_tx_tag != NULL) {
+		for (i = 0; i < VGE_TX_DESC_CNT; i++) {
+			txd = &sc->vge_cdata.vge_txdesc[i];
+			if (txd->tx_dmamap != NULL) {
+				bus_dmamap_destroy(sc->vge_cdata.vge_tx_tag,
+				    txd->tx_dmamap);
+				txd->tx_dmamap = NULL;
+			}
+		}
+		bus_dma_tag_destroy(sc->vge_cdata.vge_tx_tag);
+		sc->vge_cdata.vge_tx_tag = NULL;
+	}
+	/* Rx buffers. */
+	if (sc->vge_cdata.vge_rx_tag != NULL) {
+		for (i = 0; i < VGE_RX_DESC_CNT; i++) {
+			rxd = &sc->vge_cdata.vge_rxdesc[i];
+			if (rxd->rx_dmamap != NULL) {
+				bus_dmamap_destroy(sc->vge_cdata.vge_rx_tag,
+				    rxd->rx_dmamap);
+				rxd->rx_dmamap = NULL;
+			}
+		}
+		if (sc->vge_cdata.vge_rx_sparemap != NULL) {
+			bus_dmamap_destroy(sc->vge_cdata.vge_rx_tag,
+			    sc->vge_cdata.vge_rx_sparemap);
+			sc->vge_cdata.vge_rx_sparemap = NULL;
+		}
+		bus_dma_tag_destroy(sc->vge_cdata.vge_rx_tag);
+		sc->vge_cdata.vge_rx_tag = NULL;
+	}
+
+	if (sc->vge_cdata.vge_buffer_tag != NULL) {
+		bus_dma_tag_destroy(sc->vge_cdata.vge_buffer_tag);
+		sc->vge_cdata.vge_buffer_tag = NULL;
+	}
+	if (sc->vge_cdata.vge_ring_tag != NULL) {
+		bus_dma_tag_destroy(sc->vge_cdata.vge_ring_tag);
+		sc->vge_cdata.vge_ring_tag = NULL;
+	}
 }
 
 /*
@@ -916,76 +981,105 @@ vge_allocmem(dev, sc)
  * setup and ethernet/BPF attach.
  */
 static int
-vge_attach(dev)
-	device_t		dev;
+vge_attach(device_t dev)
 {
-	u_char			eaddr[ETHER_ADDR_LEN];
-	struct vge_softc	*sc;
-	struct ifnet		*ifp;
-	int			unit, error = 0, rid;
+	u_char eaddr[ETHER_ADDR_LEN];
+	struct vge_softc *sc;
+	struct ifnet *ifp;
+	int error = 0, cap, i, msic, rid;
 
 	sc = device_get_softc(dev);
-	unit = device_get_unit(dev);
 	sc->vge_dev = dev;
 
 	mtx_init(&sc->vge_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
-	    MTX_DEF | MTX_RECURSE);
+	    MTX_DEF);
+	callout_init_mtx(&sc->vge_watchdog, &sc->vge_mtx, 0);
+
 	/*
 	 * Map control/status registers.
 	 */
 	pci_enable_busmaster(dev);
 
-	rid = VGE_PCI_LOMEM;
-	sc->vge_res = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid,
-	    0, ~0, 1, RF_ACTIVE);
+	rid = PCIR_BAR(1);
+	sc->vge_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
+	    RF_ACTIVE);
 
 	if (sc->vge_res == NULL) {
-		printf ("vge%d: couldn't map ports/memory\n", unit);
+		device_printf(dev, "couldn't map ports/memory\n");
 		error = ENXIO;
 		goto fail;
 	}
 
-	sc->vge_btag = rman_get_bustag(sc->vge_res);
-	sc->vge_bhandle = rman_get_bushandle(sc->vge_res);
+	if (pci_find_extcap(dev, PCIY_EXPRESS, &cap) == 0) {
+		sc->vge_flags |= VGE_FLAG_PCIE;
+		sc->vge_expcap = cap;
+	} else
+		sc->vge_flags |= VGE_FLAG_JUMBO;
+	if (pci_find_extcap(dev, PCIY_PMG, &cap) == 0) {
+		sc->vge_flags |= VGE_FLAG_PMCAP;
+		sc->vge_pmcap = cap;
+	}
+	rid = 0;
+	msic = pci_msi_count(dev);
+	if (msi_disable == 0 && msic > 0) {
+		msic = 1;
+		if (pci_alloc_msi(dev, &msic) == 0) {
+			if (msic == 1) {
+				sc->vge_flags |= VGE_FLAG_MSI;
+				device_printf(dev, "Using %d MSI message\n",
+				    msic);
+				rid = 1;
+			} else
+				pci_release_msi(dev);
+		}
+	}
 
 	/* Allocate interrupt */
-	rid = 0;
-	sc->vge_irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid,
-	    0, ~0, 1, RF_SHAREABLE | RF_ACTIVE);
-
+	sc->vge_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
+	    ((sc->vge_flags & VGE_FLAG_MSI) ? 0 : RF_SHAREABLE) | RF_ACTIVE);
 	if (sc->vge_irq == NULL) {
-		printf("vge%d: couldn't map interrupt\n", unit);
+		device_printf(dev, "couldn't map interrupt\n");
 		error = ENXIO;
 		goto fail;
 	}
 
 	/* Reset the adapter. */
 	vge_reset(sc);
+	/* Reload EEPROM. */
+	CSR_WRITE_1(sc, VGE_EECSR, VGE_EECSR_RELOAD);
+	for (i = 0; i < VGE_TIMEOUT; i++) {
+		DELAY(5);
+		if ((CSR_READ_1(sc, VGE_EECSR) & VGE_EECSR_RELOAD) == 0)
+			break;
+	}
+	if (i == VGE_TIMEOUT)
+		device_printf(dev, "EEPROM reload timed out\n");
+	/*
+	 * Clear PACPI as EEPROM reload will set the bit. Otherwise
+	 * MAC will receive magic packet which in turn confuses
+	 * controller.
+	 */
+	CSR_CLRBIT_1(sc, VGE_CHIPCFG0, VGE_CHIPCFG0_PACPI);
 
 	/*
 	 * Get station address from the EEPROM.
 	 */
 	vge_read_eeprom(sc, (caddr_t)eaddr, VGE_EE_EADDR, 3, 0);
-
 	/*
-	 * Allocate the parent bus DMA tag appropriate for PCI.
+	 * Save configured PHY address.
+	 * It seems the PHY address of PCIe controllers just
+	 * reflects media jump strapping status so we assume the
+	 * internal PHY address of PCIe controller is at 1.
 	 */
-#define VGE_NSEG_NEW 32
-	error = bus_dma_tag_create(NULL,	/* parent */
-			1, 0,			/* alignment, boundary */
-			BUS_SPACE_MAXADDR_32BIT,/* lowaddr */
-			BUS_SPACE_MAXADDR,	/* highaddr */
-			NULL, NULL,		/* filter, filterarg */
-			MAXBSIZE, VGE_NSEG_NEW,	/* maxsize, nsegments */
-			BUS_SPACE_MAXSIZE_32BIT,/* maxsegsize */
-			BUS_DMA_ALLOCNOW,	/* flags */
-			NULL, NULL,		/* lockfunc, lockarg */
-			&sc->vge_parent_tag);
-	if (error)
-		goto fail;
-
-	error = vge_allocmem(dev, sc);
-
+	if ((sc->vge_flags & VGE_FLAG_PCIE) != 0)
+		sc->vge_phyaddr = 1;
+	else
+		sc->vge_phyaddr = CSR_READ_1(sc, VGE_MIICFG) &
+		    VGE_MIICFG_PHYADDR;
+	/* Clear WOL and take hardware from powerdown. */
+	vge_clrwol(sc);
+	vge_sysctl_node(sc);
+	error = vge_dma_alloc(sc);
 	if (error)
 		goto fail;
 
@@ -1006,36 +1100,38 @@ vge_attach(dev)
 
 	ifp->if_softc = sc;
 	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
-	ifp->if_mtu = ETHERMTU;
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = vge_ioctl;
 	ifp->if_capabilities = IFCAP_VLAN_MTU;
 	ifp->if_start = vge_start;
 	ifp->if_hwassist = VGE_CSUM_FEATURES;
-	ifp->if_capabilities |= IFCAP_HWCSUM|IFCAP_VLAN_HWTAGGING;
+	ifp->if_capabilities |= IFCAP_HWCSUM | IFCAP_VLAN_HWCSUM |
+	    IFCAP_VLAN_HWTAGGING;
+	if ((sc->vge_flags & VGE_FLAG_PMCAP) != 0)
+		ifp->if_capabilities |= IFCAP_WOL;
 	ifp->if_capenable = ifp->if_capabilities;
 #ifdef DEVICE_POLLING
 	ifp->if_capabilities |= IFCAP_POLLING;
 #endif
-	ifp->if_watchdog = vge_watchdog;
 	ifp->if_init = vge_init;
-	IFQ_SET_MAXLEN(&ifp->if_snd, VGE_IFQ_MAXLEN);
-	ifp->if_snd.ifq_drv_maxlen = VGE_IFQ_MAXLEN;
+	IFQ_SET_MAXLEN(&ifp->if_snd, VGE_TX_DESC_CNT - 1);
+	ifp->if_snd.ifq_drv_maxlen = VGE_TX_DESC_CNT - 1;
 	IFQ_SET_READY(&ifp->if_snd);
 
-	TASK_INIT(&sc->vge_txtask, 0, vge_tx_task, ifp);
-
 	/*
 	 * Call MI attach routine.
 	 */
 	ether_ifattach(ifp, eaddr);
 
+	/* Tell the upper layer(s) we support long frames. */
+	ifp->if_data.ifi_hdrlen = sizeof(struct ether_vlan_header);
+
 	/* Hook interrupt last to avoid having to lock softc */
 	error = bus_setup_intr(dev, sc->vge_irq, INTR_TYPE_NET|INTR_MPSAFE,
 	    NULL, vge_intr, sc, &sc->vge_intrhand);
 
 	if (error) {
-		printf("vge%d: couldn't set up irq\n", unit);
+		device_printf(dev, "couldn't set up irq\n");
 		ether_ifdetach(ifp);
 		goto fail;
 	}
@@ -1055,12 +1151,10 @@ fail:
  * allocated.
  */
 static int
-vge_detach(dev)
-	device_t		dev;
+vge_detach(device_t dev)
 {
-	struct vge_softc		*sc;
-	struct ifnet		*ifp;
-	int			i;
+	struct vge_softc *sc;
+	struct ifnet *ifp;
 
 	sc = device_get_softc(dev);
 	KASSERT(mtx_initialized(&sc->vge_mtx), ("vge mutex not initialized"));
@@ -1073,21 +1167,11 @@ vge_detach(dev)
 
 	/* These should only be active if attach succeeded */
 	if (device_is_attached(dev)) {
-		vge_stop(sc);
-		/*
-		 * Force off the IFF_UP flag here, in case someone
-		 * still had a BPF descriptor attached to this
-		 * interface. If they do, ether_ifattach() will cause
-		 * the BPF code to try and clear the promisc mode
-		 * flag, which will bubble down to vge_ioctl(),
-		 * which will try to call vge_init() again. This will
-		 * turn the NIC back on and restart the MII ticker,
-		 * which will panic the system when the kernel tries
-		 * to invoke the vge_tick() function that isn't there
-		 * anymore.
-		 */
-		ifp->if_flags &= ~IFF_UP;
 		ether_ifdetach(ifp);
+		VGE_LOCK(sc);
+		vge_stop(sc);
+		VGE_UNLOCK(sc);
+		callout_drain(&sc->vge_watchdog);
 	}
 	if (sc->vge_miibus)
 		device_delete_child(dev, sc->vge_miibus);
@@ -1096,104 +1180,31 @@ vge_detach(dev)
 	if (sc->vge_intrhand)
 		bus_teardown_intr(dev, sc->vge_irq, sc->vge_intrhand);
 	if (sc->vge_irq)
-		bus_release_resource(dev, SYS_RES_IRQ, 0, sc->vge_irq);
+		bus_release_resource(dev, SYS_RES_IRQ,
+		    sc->vge_flags & VGE_FLAG_MSI ? 1 : 0, sc->vge_irq);
+	if (sc->vge_flags & VGE_FLAG_MSI)
+		pci_release_msi(dev);
 	if (sc->vge_res)
 		bus_release_resource(dev, SYS_RES_MEMORY,
-		    VGE_PCI_LOMEM, sc->vge_res);
+		    PCIR_BAR(1), sc->vge_res);
 	if (ifp)
 		if_free(ifp);
 
-	/* Unload and free the RX DMA ring memory and map */
-
-	if (sc->vge_ldata.vge_rx_list_tag) {
-		bus_dmamap_unload(sc->vge_ldata.vge_rx_list_tag,
-		    sc->vge_ldata.vge_rx_list_map);
-		bus_dmamem_free(sc->vge_ldata.vge_rx_list_tag,
-		    sc->vge_ldata.vge_rx_list,
-		    sc->vge_ldata.vge_rx_list_map);
-		bus_dma_tag_destroy(sc->vge_ldata.vge_rx_list_tag);
-	}
-
-	/* Unload and free the TX DMA ring memory and map */
-
-	if (sc->vge_ldata.vge_tx_list_tag) {
-		bus_dmamap_unload(sc->vge_ldata.vge_tx_list_tag,
-		    sc->vge_ldata.vge_tx_list_map);
-		bus_dmamem_free(sc->vge_ldata.vge_tx_list_tag,
-		    sc->vge_ldata.vge_tx_list,
-		    sc->vge_ldata.vge_tx_list_map);
-		bus_dma_tag_destroy(sc->vge_ldata.vge_tx_list_tag);
-	}
-
-	/* Destroy all the RX and TX buffer maps */
-
-	if (sc->vge_ldata.vge_mtag) {
-		for (i = 0; i < VGE_TX_DESC_CNT; i++)
-			bus_dmamap_destroy(sc->vge_ldata.vge_mtag,
-			    sc->vge_ldata.vge_tx_dmamap[i]);
-		for (i = 0; i < VGE_RX_DESC_CNT; i++)
-			bus_dmamap_destroy(sc->vge_ldata.vge_mtag,
-			    sc->vge_ldata.vge_rx_dmamap[i]);
-		bus_dma_tag_destroy(sc->vge_ldata.vge_mtag);
-	}
-
-	if (sc->vge_parent_tag)
-		bus_dma_tag_destroy(sc->vge_parent_tag);
-
+	vge_dma_free(sc);
 	mtx_destroy(&sc->vge_mtx);
 
 	return (0);
 }
 
-static int
-vge_newbuf(sc, idx, m)
-	struct vge_softc	*sc;
-	int			idx;
-	struct mbuf		*m;
+static void
+vge_discard_rxbuf(struct vge_softc *sc, int prod)
 {
-	struct vge_dmaload_arg	arg;
-	struct mbuf		*n = NULL;
-	int			i, error;
+	struct vge_rxdesc *rxd;
+	int i;
 
-	if (m == NULL) {
-		n = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
-		if (n == NULL)
-			return (ENOBUFS);
-		m = n;
-	} else
-		m->m_data = m->m_ext.ext_buf;
-
-
-#ifdef VGE_FIXUP_RX
-	/*
-	 * This is part of an evil trick to deal with non-x86 platforms.
-	 * The VIA chip requires RX buffers to be aligned on 32-bit
-	 * boundaries, but that will hose non-x86 machines. To get around
-	 * this, we leave some empty space at the start of each buffer
-	 * and for non-x86 hosts, we copy the buffer back two bytes
-	 * to achieve word alignment. This is slightly more efficient
-	 * than allocating a new buffer, copying the contents, and
-	 * discarding the old buffer.
-	 */
-	m->m_len = m->m_pkthdr.len = MCLBYTES - VGE_ETHER_ALIGN;
-	m_adj(m, VGE_ETHER_ALIGN);
-#else
-	m->m_len = m->m_pkthdr.len = MCLBYTES;
-#endif
-
-	arg.sc = sc;
-	arg.vge_idx = idx;
-	arg.vge_maxsegs = 1;
-	arg.vge_flags = 0;
-
-	error = bus_dmamap_load_mbuf(sc->vge_ldata.vge_mtag,
-	    sc->vge_ldata.vge_rx_dmamap[idx], m, vge_dma_map_rx_desc,
-	    &arg, BUS_DMA_NOWAIT);
-	if (error || arg.vge_maxsegs != 1) {
-		if (n != NULL)
-			m_freem(n);
-		return (ENOMEM);
-	}
+	rxd = &sc->vge_cdata.vge_rxdesc[prod];
+	rxd->rx_desc->vge_sts = 0;
+	rxd->rx_desc->vge_ctl = 0;
 
 	/*
 	 * Note: the manual fails to document the fact that for
@@ -1203,79 +1214,197 @@ vge_newbuf(sc, idx, m)
 	 * but we should not set the OWN bits until we're ready
 	 * to hand back 4 of them in one shot.
 	 */
+	if ((prod % VGE_RXCHUNK) == (VGE_RXCHUNK - 1)) {
+		for (i = VGE_RXCHUNK; i > 0; i--) {
+			rxd->rx_desc->vge_sts = htole32(VGE_RDSTS_OWN);
+			rxd = rxd->rxd_prev;
+		}
+		sc->vge_cdata.vge_rx_commit += VGE_RXCHUNK;
+	}
+}
 
-#define VGE_RXCHUNK 4
-	sc->vge_rx_consumed++;
-	if (sc->vge_rx_consumed == VGE_RXCHUNK) {
-		for (i = idx; i != idx - sc->vge_rx_consumed; i--)
-			sc->vge_ldata.vge_rx_list[i].vge_sts |=
-			    htole32(VGE_RDSTS_OWN);
-		sc->vge_rx_consumed = 0;
+static int
+vge_newbuf(struct vge_softc *sc, int prod)
+{
+	struct vge_rxdesc *rxd;
+	struct mbuf *m;
+	bus_dma_segment_t segs[1];
+	bus_dmamap_t map;
+	int i, nsegs;
+
+	m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR);
+	if (m == NULL)
+		return (ENOBUFS);
+	/*
+	 * This is part of an evil trick to deal with strict-alignment
+	 * architectures. The VIA chip requires RX buffers to be aligned
+	 * on 32-bit boundaries, but that will hose strict-alignment
+	 * architectures. To get around this, we leave some empty space
+	 * at the start of each buffer and for non-strict-alignment hosts,
+	 * we copy the buffer back two bytes to achieve word alignment.
+	 * This is slightly more efficient than allocating a new buffer,
+	 * copying the contents, and discarding the old buffer.
+	 */
+	m->m_len = m->m_pkthdr.len = MCLBYTES;
+	m_adj(m, VGE_RX_BUF_ALIGN);
+
+	if (bus_dmamap_load_mbuf_sg(sc->vge_cdata.vge_rx_tag,
+	    sc->vge_cdata.vge_rx_sparemap, m, segs, &nsegs, 0) != 0) {
+		m_freem(m);
+		return (ENOBUFS);
+	}
+	KASSERT(nsegs == 1, ("%s: %d segments returned!", __func__, nsegs));
+
+	rxd = &sc->vge_cdata.vge_rxdesc[prod];
+	if (rxd->rx_m != NULL) {
+		bus_dmamap_sync(sc->vge_cdata.vge_rx_tag, rxd->rx_dmamap,
+		    BUS_DMASYNC_POSTREAD);
+		bus_dmamap_unload(sc->vge_cdata.vge_rx_tag, rxd->rx_dmamap);
+	}
+	map = rxd->rx_dmamap;
+	rxd->rx_dmamap = sc->vge_cdata.vge_rx_sparemap;
+	sc->vge_cdata.vge_rx_sparemap = map;
+	bus_dmamap_sync(sc->vge_cdata.vge_rx_tag, rxd->rx_dmamap,
+	    BUS_DMASYNC_PREREAD);
+	rxd->rx_m = m;
+
+	rxd->rx_desc->vge_sts = 0;
+	rxd->rx_desc->vge_ctl = 0;
+	rxd->rx_desc->vge_addrlo = htole32(VGE_ADDR_LO(segs[0].ds_addr));
+	rxd->rx_desc->vge_addrhi = htole32(VGE_ADDR_HI(segs[0].ds_addr) |
+	    (VGE_BUFLEN(segs[0].ds_len) << 16) | VGE_RXDESC_I);
+
+	/*
+	 * Note: the manual fails to document the fact that for
+	 * proper operation, the driver needs to replenish the RX
+	 * DMA ring 4 descriptors at a time (rather than one at a
+	 * time, like most chips). We can allocate the new buffers
+	 * but we should not set the OWN bits until we're ready
+	 * to hand back 4 of them in one shot.
+	 */
+	if ((prod % VGE_RXCHUNK) == (VGE_RXCHUNK - 1)) {
+		for (i = VGE_RXCHUNK; i > 0; i--) {
+			rxd->rx_desc->vge_sts = htole32(VGE_RDSTS_OWN);
+			rxd = rxd->rxd_prev;
+		}
+		sc->vge_cdata.vge_rx_commit += VGE_RXCHUNK;
 	}
 
-	sc->vge_ldata.vge_rx_mbuf[idx] = m;
+	return (0);
+}
 
-	bus_dmamap_sync(sc->vge_ldata.vge_mtag,
-	    sc->vge_ldata.vge_rx_dmamap[idx],
-	    BUS_DMASYNC_PREREAD);
+static int
+vge_tx_list_init(struct vge_softc *sc)
+{
+	struct vge_ring_data *rd;
+	struct vge_txdesc *txd;
+	int i;
+
+	VGE_LOCK_ASSERT(sc);
+
+	sc->vge_cdata.vge_tx_prodidx = 0;
+	sc->vge_cdata.vge_tx_considx = 0;
+	sc->vge_cdata.vge_tx_cnt = 0;
+
+	rd = &sc->vge_rdata;
+	bzero(rd->vge_tx_ring, VGE_TX_LIST_SZ);
+	for (i = 0; i < VGE_TX_DESC_CNT; i++) {
+		txd = &sc->vge_cdata.vge_txdesc[i];
+		txd->tx_m = NULL;
+		txd->tx_desc = &rd->vge_tx_ring[i];
+	}
+
+	bus_dmamap_sync(sc->vge_cdata.vge_tx_ring_tag,
+	    sc->vge_cdata.vge_tx_ring_map,
+	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
 	return (0);
 }
 
 static int
-vge_tx_list_init(sc)
-	struct vge_softc		*sc;
+vge_rx_list_init(struct vge_softc *sc)
 {
-	bzero ((char *)sc->vge_ldata.vge_tx_list, VGE_TX_LIST_SZ);
-	bzero ((char *)&sc->vge_ldata.vge_tx_mbuf,
-	    (VGE_TX_DESC_CNT * sizeof(struct mbuf *)));
+	struct vge_ring_data *rd;
+	struct vge_rxdesc *rxd;
+	int i;
 
-	bus_dmamap_sync(sc->vge_ldata.vge_tx_list_tag,
-	    sc->vge_ldata.vge_tx_list_map, BUS_DMASYNC_PREWRITE);
-	sc->vge_ldata.vge_tx_prodidx = 0;
-	sc->vge_ldata.vge_tx_considx = 0;
-	sc->vge_ldata.vge_tx_free = VGE_TX_DESC_CNT;
+	VGE_LOCK_ASSERT(sc);
 
-	return (0);
-}
-
-static int
-vge_rx_list_init(sc)
-	struct vge_softc		*sc;
-{
-	int			i;
-
-	bzero ((char *)sc->vge_ldata.vge_rx_list, VGE_RX_LIST_SZ);
-	bzero ((char *)&sc->vge_ldata.vge_rx_mbuf,
-	    (VGE_RX_DESC_CNT * sizeof(struct mbuf *)));
-
-	sc->vge_rx_consumed = 0;
+	sc->vge_cdata.vge_rx_prodidx = 0;
+	sc->vge_cdata.vge_head = NULL;
+	sc->vge_cdata.vge_tail = NULL;
+	sc->vge_cdata.vge_rx_commit = 0;
 
+	rd = &sc->vge_rdata;
+	bzero(rd->vge_rx_ring, VGE_RX_LIST_SZ);
 	for (i = 0; i < VGE_RX_DESC_CNT; i++) {
-		if (vge_newbuf(sc, i, NULL) == ENOBUFS)
+		rxd = &sc->vge_cdata.vge_rxdesc[i];
+		rxd->rx_m = NULL;
+		rxd->rx_desc = &rd->vge_rx_ring[i];
+		if (i == 0)
+			rxd->rxd_prev =
+			    &sc->vge_cdata.vge_rxdesc[VGE_RX_DESC_CNT - 1];
+		else
+			rxd->rxd_prev = &sc->vge_cdata.vge_rxdesc[i - 1];
+		if (vge_newbuf(sc, i) != 0)
 			return (ENOBUFS);
 	}
 
-	/* Flush the RX descriptors */
+	bus_dmamap_sync(sc->vge_cdata.vge_rx_ring_tag,
+	    sc->vge_cdata.vge_rx_ring_map,
+	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
 
-	bus_dmamap_sync(sc->vge_ldata.vge_rx_list_tag,
-	    sc->vge_ldata.vge_rx_list_map,
-	    BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD);
-
-	sc->vge_ldata.vge_rx_prodidx = 0;
-	sc->vge_rx_consumed = 0;
-	sc->vge_head = sc->vge_tail = NULL;
+	sc->vge_cdata.vge_rx_commit = 0;
 
 	return (0);
 }
 
-#ifdef VGE_FIXUP_RX
-static __inline void
-vge_fixup_rx(m)
-	struct mbuf		*m;
+static void
+vge_freebufs(struct vge_softc *sc)
 {
-	int			i;
-	uint16_t		*src, *dst;
+	struct vge_txdesc *txd;
+	struct vge_rxdesc *rxd;
+	struct ifnet *ifp;
+	int i;
+
+	VGE_LOCK_ASSERT(sc);
+
+	ifp = sc->vge_ifp;
+	/*
+	 * Free RX and TX mbufs still in the queues.
+	 */
+	for (i = 0; i < VGE_RX_DESC_CNT; i++) {
+		rxd = &sc->vge_cdata.vge_rxdesc[i];
+		if (rxd->rx_m != NULL) {
+			bus_dmamap_sync(sc->vge_cdata.vge_rx_tag,
+			    rxd->rx_dmamap, BUS_DMASYNC_POSTREAD);
+			bus_dmamap_unload(sc->vge_cdata.vge_rx_tag,
+			    rxd->rx_dmamap);
+			m_freem(rxd->rx_m);
+			rxd->rx_m = NULL;
+		}
+	}
+
+	for (i = 0; i < VGE_TX_DESC_CNT; i++) {
+		txd = &sc->vge_cdata.vge_txdesc[i];
+		if (txd->tx_m != NULL) {
+			bus_dmamap_sync(sc->vge_cdata.vge_tx_tag,
+			    txd->tx_dmamap, BUS_DMASYNC_POSTWRITE);
+			bus_dmamap_unload(sc->vge_cdata.vge_tx_tag,
+			    txd->tx_dmamap);
+			m_freem(txd->tx_m);
+			txd->tx_m = NULL;
+			ifp->if_oerrors++;
+		}
+	}
+}
+
+#ifndef	__NO_STRICT_ALIGNMENT
+static __inline void
+vge_fixup_rx(struct mbuf *m)
+{
+	int i;
+	uint16_t *src, *dst;
 
 	src = mtod(m, uint16_t *);
 	dst = src - 1;
@@ -1284,8 +1413,6 @@ vge_fixup_rx(m)
 		*dst++ = *src++;
 
 	m->m_data -= ETHER_ALIGN;
-
-	return;
 }
 #endif
 
@@ -1294,49 +1421,37 @@ vge_fixup_rx(m)
  * been fragmented across multiple 2K mbuf cluster buffers.
  */
 static int
-vge_rxeof(sc)
-	struct vge_softc	*sc;
+vge_rxeof(struct vge_softc *sc, int count)
 {
-	struct mbuf		*m;
-	struct ifnet		*ifp;
-	int			i, total_len;
-	int			lim = 0;
-	struct vge_rx_desc	*cur_rx;
-	u_int32_t		rxstat, rxctl;
+	struct mbuf *m;
+	struct ifnet *ifp;
+	int prod, prog, total_len;
+	struct vge_rxdesc *rxd;
+	struct vge_rx_desc *cur_rx;
+	uint32_t rxstat, rxctl;
 
 	VGE_LOCK_ASSERT(sc);
+
 	ifp = sc->vge_ifp;
-	i = sc->vge_ldata.vge_rx_prodidx;
 
-	/* Invalidate the descriptor memory */
+	bus_dmamap_sync(sc->vge_cdata.vge_rx_ring_tag,
+	    sc->vge_cdata.vge_rx_ring_map,
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
 
-	bus_dmamap_sync(sc->vge_ldata.vge_rx_list_tag,
-	    sc->vge_ldata.vge_rx_list_map,
-	    BUS_DMASYNC_POSTREAD);
-
-	while (!VGE_OWN(&sc->vge_ldata.vge_rx_list[i])) {
-
-#ifdef DEVICE_POLLING
-		if (ifp->if_capenable & IFCAP_POLLING) {
-			if (sc->rxcycles <= 0)
-				break;
-			sc->rxcycles--;
-		}
-#endif
-
-		cur_rx = &sc->vge_ldata.vge_rx_list[i];
-		m = sc->vge_ldata.vge_rx_mbuf[i];
-		total_len = VGE_RXBYTES(cur_rx);
+	prod = sc->vge_cdata.vge_rx_prodidx;
+	for (prog = 0; count > 0 &&
+	    (ifp->if_drv_flags & IFF_DRV_RUNNING) != 0;
+	    VGE_RX_DESC_INC(prod)) {
+		cur_rx = &sc->vge_rdata.vge_rx_ring[prod];
 		rxstat = le32toh(cur_rx->vge_sts);
+		if ((rxstat & VGE_RDSTS_OWN) != 0)
+			break;
+		count--;
+		prog++;
 		rxctl = le32toh(cur_rx->vge_ctl);
-
-		/* Invalidate the RX mbuf and unload its map */
-
-		bus_dmamap_sync(sc->vge_ldata.vge_mtag,
-		    sc->vge_ldata.vge_rx_dmamap[i],
-		    BUS_DMASYNC_POSTWRITE);
-		bus_dmamap_unload(sc->vge_ldata.vge_mtag,
-		    sc->vge_ldata.vge_rx_dmamap[i]);
+		total_len = VGE_RXBYTES(rxstat);
+		rxd = &sc->vge_cdata.vge_rxdesc[prod];
+		m = rxd->rx_m;
 
 		/*
 		 * If the 'start of frame' bit is set, this indicates
@@ -1344,17 +1459,22 @@ vge_rxeof(sc)
 		 * or an intermediate fragment. Either way, we want to
 		 * accumulate the buffers.
 		 */
-		if (rxstat & VGE_RXPKT_SOF) {
-			m->m_len = MCLBYTES - VGE_ETHER_ALIGN;
-			if (sc->vge_head == NULL)
-				sc->vge_head = sc->vge_tail = m;
-			else {
-				m->m_flags &= ~M_PKTHDR;
-				sc->vge_tail->m_next = m;
-				sc->vge_tail = m;
+		if ((rxstat & VGE_RXPKT_SOF) != 0) {
+			if (vge_newbuf(sc, prod) != 0) {
+				ifp->if_iqdrops++;
+				VGE_CHAIN_RESET(sc);
+				vge_discard_rxbuf(sc, prod);
+				continue;
+			}
+			m->m_len = MCLBYTES - VGE_RX_BUF_ALIGN;
+			if (sc->vge_cdata.vge_head == NULL) {
+				sc->vge_cdata.vge_head = m;
+				sc->vge_cdata.vge_tail = m;
+			} else {
+				m->m_flags &= ~M_PKTHDR;
+				sc->vge_cdata.vge_tail->m_next = m;
+				sc->vge_cdata.vge_tail = m;
 			}
-			vge_newbuf(sc, i, NULL);
-			VGE_RX_DESC_INC(i);
 			continue;
 		}
 
@@ -1366,43 +1486,32 @@ vge_rxeof(sc)
 		 * a 'VLAN CAM filter miss' and clears the 'RXOK' bit.
 		 * We don't want to drop the frame though: our VLAN
 		 * filtering is done in software.
+		 * We also want to receive bad-checksummed frames and
+		 * and frames with bad-length.
 		 */
-		if (!(rxstat & VGE_RDSTS_RXOK) && !(rxstat & VGE_RDSTS_VIDM)
-		    && !(rxstat & VGE_RDSTS_CSUMERR)) {
+		if ((rxstat & VGE_RDSTS_RXOK) == 0 &&
+		    (rxstat & (VGE_RDSTS_VIDM | VGE_RDSTS_RLERR |
+		    VGE_RDSTS_CSUMERR)) == 0) {
 			ifp->if_ierrors++;
 			/*
 			 * If this is part of a multi-fragment packet,
 			 * discard all the pieces.
 			 */
-			if (sc->vge_head != NULL) {
-				m_freem(sc->vge_head);
-				sc->vge_head = sc->vge_tail = NULL;
-			}
-			vge_newbuf(sc, i, m);
-			VGE_RX_DESC_INC(i);
+			VGE_CHAIN_RESET(sc);
+			vge_discard_rxbuf(sc, prod);
 			continue;
 		}
 
-		/*
-		 * If allocating a replacement mbuf fails,
-		 * reload the current one.
-		 */
-
-		if (vge_newbuf(sc, i, NULL)) {
-			ifp->if_ierrors++;
-			if (sc->vge_head != NULL) {
-				m_freem(sc->vge_head);
-				sc->vge_head = sc->vge_tail = NULL;
-			}
-			vge_newbuf(sc, i, m);
-			VGE_RX_DESC_INC(i);
+		if (vge_newbuf(sc, prod) != 0) {
+			ifp->if_iqdrops++;
+			VGE_CHAIN_RESET(sc);
+			vge_discard_rxbuf(sc, prod);
 			continue;
 		}
 
-		VGE_RX_DESC_INC(i);
-
-		if (sc->vge_head != NULL) {
-			m->m_len = total_len % (MCLBYTES - VGE_ETHER_ALIGN);
+		/* Chain received mbufs. */
+		if (sc->vge_cdata.vge_head != NULL) {
+			m->m_len = total_len % (MCLBYTES - VGE_RX_BUF_ALIGN);
 			/*
 			 * Special case: if there's 4 bytes or less
 			 * in this buffer, the mbuf can be discarded:
@@ -1410,46 +1519,47 @@ vge_rxeof(sc)
 			 * care about anyway.
 			 */
 			if (m->m_len <= ETHER_CRC_LEN) {
-				sc->vge_tail->m_len -=
+				sc->vge_cdata.vge_tail->m_len -=
 				    (ETHER_CRC_LEN - m->m_len);
 				m_freem(m);
 			} else {
 				m->m_len -= ETHER_CRC_LEN;
 				m->m_flags &= ~M_PKTHDR;
-				sc->vge_tail->m_next = m;
+				sc->vge_cdata.vge_tail->m_next = m;
 			}
-			m = sc->vge_head;
-			sc->vge_head = sc->vge_tail = NULL;
+			m = sc->vge_cdata.vge_head;
+			m->m_flags |= M_PKTHDR;
 			m->m_pkthdr.len = total_len - ETHER_CRC_LEN;
-		} else
+		} else {
+			m->m_flags |= M_PKTHDR;
 			m->m_pkthdr.len = m->m_len =
 			    (total_len - ETHER_CRC_LEN);
+		}
 
-#ifdef VGE_FIXUP_RX
+#ifndef	__NO_STRICT_ALIGNMENT
 		vge_fixup_rx(m);
 #endif
-		ifp->if_ipackets++;
 		m->m_pkthdr.rcvif = ifp;
 
 		/* Do RX checksumming if enabled */
-		if (ifp->if_capenable & IFCAP_RXCSUM) {
-
+		if ((ifp->if_capenable & IFCAP_RXCSUM) != 0 &&
+		    (rxctl & VGE_RDCTL_FRAG) == 0) {
 			/* Check IP header checksum */
-			if (rxctl & VGE_RDCTL_IPPKT)
+			if ((rxctl & VGE_RDCTL_IPPKT) != 0)
 				m->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
-			if (rxctl & VGE_RDCTL_IPCSUMOK)
+			if ((rxctl & VGE_RDCTL_IPCSUMOK) != 0)
 				m->m_pkthdr.csum_flags |= CSUM_IP_VALID;
 
 			/* Check TCP/UDP checksum */
-			if (rxctl & (VGE_RDCTL_TCPPKT|VGE_RDCTL_UDPPKT) &&
+			if (rxctl & (VGE_RDCTL_TCPPKT | VGE_RDCTL_UDPPKT) &&
 			    rxctl & VGE_RDCTL_PROTOCSUMOK) {
 				m->m_pkthdr.csum_flags |=
-				    CSUM_DATA_VALID|CSUM_PSEUDO_HDR;
+				    CSUM_DATA_VALID | CSUM_PSEUDO_HDR;
 				m->m_pkthdr.csum_data = 0xffff;
 			}
 		}
 
-		if (rxstat & VGE_RDSTS_VTAG) {
+		if ((rxstat & VGE_RDSTS_VTAG) != 0) {
 			/*
 			 * The 32-bit rxctl register is stored in little-endian.
 			 * However, the 16-bit vlan tag is stored in big-endian,
@@ -1463,120 +1573,107 @@ vge_rxeof(sc)
 		VGE_UNLOCK(sc);
 		(*ifp->if_input)(ifp, m);
 		VGE_LOCK(sc);
-
-		lim++;
-		if (lim == VGE_RX_DESC_CNT)
-			break;
-
+		sc->vge_cdata.vge_head = NULL;
+		sc->vge_cdata.vge_tail = NULL;
 	}
 
-	/* Flush the RX DMA ring */
-
-	bus_dmamap_sync(sc->vge_ldata.vge_rx_list_tag,
-	    sc->vge_ldata.vge_rx_list_map,
-	    BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD);
-
-	sc->vge_ldata.vge_rx_prodidx = i;
-	CSR_WRITE_2(sc, VGE_RXDESC_RESIDUECNT, lim);
-
-
-	return (lim);
+	if (prog > 0) {
+		sc->vge_cdata.vge_rx_prodidx = prod;
+		bus_dmamap_sync(sc->vge_cdata.vge_rx_ring_tag,
+		    sc->vge_cdata.vge_rx_ring_map,
+		    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
+		/* Update residue counter. */
+		if (sc->vge_cdata.vge_rx_commit != 0) {
+			CSR_WRITE_2(sc, VGE_RXDESC_RESIDUECNT,
+			    sc->vge_cdata.vge_rx_commit);
+			sc->vge_cdata.vge_rx_commit = 0;
+		}
+	}
+	return (prog);
 }
 
 static void
-vge_txeof(sc)
-	struct vge_softc		*sc;
+vge_txeof(struct vge_softc *sc)
 {
-	struct ifnet		*ifp;
-	u_int32_t		txstat;
-	int			idx;
+	struct ifnet *ifp;
+	struct vge_tx_desc *cur_tx;
+	struct vge_txdesc *txd;
+	uint32_t txstat;
+	int cons, prod;
+
+	VGE_LOCK_ASSERT(sc);
 
 	ifp = sc->vge_ifp;
-	idx = sc->vge_ldata.vge_tx_considx;
 
-	/* Invalidate the TX descriptor list */
+	if (sc->vge_cdata.vge_tx_cnt == 0)
+		return;
 
-	bus_dmamap_sync(sc->vge_ldata.vge_tx_list_tag,
-	    sc->vge_ldata.vge_tx_list_map,
-	    BUS_DMASYNC_POSTREAD);
-
-	while (idx != sc->vge_ldata.vge_tx_prodidx) {
-
-		txstat = le32toh(sc->vge_ldata.vge_tx_list[idx].vge_sts);
-		if (txstat & VGE_TDSTS_OWN)
-			break;
-
-		m_freem(sc->vge_ldata.vge_tx_mbuf[idx]);
-		sc->vge_ldata.vge_tx_mbuf[idx] = NULL;
-		bus_dmamap_unload(sc->vge_ldata.vge_mtag,
-		    sc->vge_ldata.vge_tx_dmamap[idx]);
-		if (txstat & (VGE_TDSTS_EXCESSCOLL|VGE_TDSTS_COLL))
-			ifp->if_collisions++;
-		if (txstat & VGE_TDSTS_TXERR)
-			ifp->if_oerrors++;
-		else
-			ifp->if_opackets++;
-
-		sc->vge_ldata.vge_tx_free++;
-		VGE_TX_DESC_INC(idx);
-	}
-
-	/* No changes made to the TX ring, so no flush needed */
-
-	if (idx != sc->vge_ldata.vge_tx_considx) {
-		sc->vge_ldata.vge_tx_considx = idx;
-		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-		ifp->if_timer = 0;
-	}
+	bus_dmamap_sync(sc->vge_cdata.vge_tx_ring_tag,
+	    sc->vge_cdata.vge_tx_ring_map,
+	    BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
 
 	/*
-	 * If not all descriptors have been released reaped yet,
-	 * reload the timer so that we will eventually get another
-	 * interrupt that will cause us to re-enter this routine.
-	 * This is done in case the transmitter has gone idle.
+	 * Go through our tx list and free mbufs for those
+	 * frames that have been transmitted.
 	 */
-	if (sc->vge_ldata.vge_tx_free != VGE_TX_DESC_CNT) {
-		CSR_WRITE_1(sc, VGE_CRS1, VGE_CR1_TIMER0_ENABLE);
-	}
+	cons = sc->vge_cdata.vge_tx_considx;
+	prod = sc->vge_cdata.vge_tx_prodidx;
+	for (; cons != prod; VGE_TX_DESC_INC(cons)) {
+		cur_tx = &sc->vge_rdata.vge_tx_ring[cons];
+		txstat = le32toh(cur_tx->vge_sts);
+		if ((txstat & VGE_TDSTS_OWN) != 0)
+			break;
+		sc->vge_cdata.vge_tx_cnt--;
+		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 
-	return;
+		txd = &sc->vge_cdata.vge_txdesc[cons];
+		bus_dmamap_sync(sc->vge_cdata.vge_tx_tag, txd->tx_dmamap,
+		    BUS_DMASYNC_POSTWRITE);
+		bus_dmamap_unload(sc->vge_cdata.vge_tx_tag, txd->tx_dmamap);
+
+		KASSERT(txd->tx_m != NULL, ("%s: freeing NULL mbuf!\n",
+		    __func__));
+		m_freem(txd->tx_m);
+		txd->tx_m = NULL;
+		txd->tx_desc->vge_frag[0].vge_addrhi = 0;
+	}
+	bus_dmamap_sync(sc->vge_cdata.vge_tx_ring_tag,
+	    sc->vge_cdata.vge_tx_ring_map,
+	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
+	sc->vge_cdata.vge_tx_considx = cons;
+	if (sc->vge_cdata.vge_tx_cnt == 0)
+		sc->vge_timer = 0;
 }
 
 static void
-vge_tick(xsc)
-	void			*xsc;
+vge_link_statchg(void *xsc)
 {
-	struct vge_softc	*sc;
-	struct ifnet		*ifp;
-	struct mii_data		*mii;
+	struct vge_softc *sc;
+	struct ifnet *ifp;
+	struct mii_data *mii;
 
 	sc = xsc;
 	ifp = sc->vge_ifp;
-	VGE_LOCK(sc);
+	VGE_LOCK_ASSERT(sc);
 	mii = device_get_softc(sc->vge_miibus);
 
-	mii_tick(mii);
-	if (sc->vge_link) {
+	mii_pollstat(mii);
+	if ((sc->vge_flags & VGE_FLAG_LINK) != 0) {
 		if (!(mii->mii_media_status & IFM_ACTIVE)) {
-			sc->vge_link = 0;
+			sc->vge_flags &= ~VGE_FLAG_LINK;
 			if_link_state_change(sc->vge_ifp,
 			    LINK_STATE_DOWN);
 		}
 	} else {
 		if (mii->mii_media_status & IFM_ACTIVE &&
 		    IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
-			sc->vge_link = 1;
+			sc->vge_flags |= VGE_FLAG_LINK;
 			if_link_state_change(sc->vge_ifp,
 			    LINK_STATE_UP);
 			if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
-				taskqueue_enqueue(taskqueue_swi,
-				    &sc->vge_txtask);
+				vge_start_locked(ifp);
 		}
 	}
-
-	VGE_UNLOCK(sc);
-
-	return;
 }
 
 #ifdef DEVICE_POLLING
@@ -1590,15 +1687,14 @@ vge_poll (struct ifnet *ifp, enum poll_cmd cmd, int count)
 	if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
 		goto done;
 
-	sc->rxcycles = count;
-	rx_npkts = vge_rxeof(sc);
+	rx_npkts = vge_rxeof(sc, count);
 	vge_txeof(sc);
 
 	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
-		taskqueue_enqueue(taskqueue_swi, &sc->vge_txtask);
+		vge_start_locked(ifp);
 
 	if (cmd == POLL_AND_CHECK_STATUS) { /* also check status register */
-		u_int32_t       status;
+		uint32_t       status;
 		status = CSR_READ_4(sc, VGE_ISR);
 		if (status == 0xFFFFFFFF)
 			goto done;
@@ -1610,12 +1706,13 @@ vge_poll (struct ifnet *ifp, enum poll_cmd cmd, int count)
 		 */
 
 		if (status & VGE_ISR_TXDMA_STALL ||
-		    status & VGE_ISR_RXDMA_STALL)
-			vge_init(sc);
+		    status & VGE_ISR_RXDMA_STALL) {
+			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+			vge_init_locked(sc);
+		}
 
 		if (status & (VGE_ISR_RXOFLOW|VGE_ISR_RXNODESC)) {
-			vge_rxeof(sc);
-			ifp->if_ierrors++;
+			vge_rxeof(sc, count);
 			CSR_WRITE_1(sc, VGE_RXQCSRS, VGE_RXQCSR_RUN);
 			CSR_WRITE_1(sc, VGE_RXQCSRS, VGE_RXQCSR_WAK);
 		}
@@ -1627,23 +1724,18 @@ done:
 #endif /* DEVICE_POLLING */
 
 static void
-vge_intr(arg)
-	void			*arg;
+vge_intr(void *arg)
 {
-	struct vge_softc	*sc;
-	struct ifnet		*ifp;
-	u_int32_t		status;
+	struct vge_softc *sc;
+	struct ifnet *ifp;
+	uint32_t status;
 
 	sc = arg;
-
-	if (sc->suspended) {
-		return;
-	}
-
 	VGE_LOCK(sc);
-	ifp = sc->vge_ifp;
 
-	if (!(ifp->if_flags & IFF_UP)) {
+	ifp = sc->vge_ifp;
+	if ((sc->vge_flags & VGE_FLAG_SUSPENDED) != 0 ||
+	    (ifp->if_flags & IFF_UP) == 0) {
 		VGE_UNLOCK(sc);
 		return;
 	}
@@ -1657,188 +1749,223 @@ vge_intr(arg)
 
 	/* Disable interrupts */
 	CSR_WRITE_1(sc, VGE_CRC3, VGE_CR3_INT_GMSK);
-
-	for (;;) {
-
-		status = CSR_READ_4(sc, VGE_ISR);
-		/* If the card has gone away the read returns 0xffff. */
-		if (status == 0xFFFFFFFF)
-			break;
-
-		if (status)
-			CSR_WRITE_4(sc, VGE_ISR, status);
-
-		if ((status & VGE_INTRS) == 0)
-			break;
-
+	status = CSR_READ_4(sc, VGE_ISR);
+	CSR_WRITE_4(sc, VGE_ISR, status | VGE_ISR_HOLDOFF_RELOAD);
+	/* If the card has gone away the read returns 0xffff. */
+	if (status == 0xFFFFFFFF || (status & VGE_INTRS) == 0)
+		goto done;
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) {
 		if (status & (VGE_ISR_RXOK|VGE_ISR_RXOK_HIPRIO))
-			vge_rxeof(sc);
-
+			vge_rxeof(sc, VGE_RX_DESC_CNT);
 		if (status & (VGE_ISR_RXOFLOW|VGE_ISR_RXNODESC)) {
-			vge_rxeof(sc);
+			vge_rxeof(sc, VGE_RX_DESC_CNT);
 			CSR_WRITE_1(sc, VGE_RXQCSRS, VGE_RXQCSR_RUN);
 			CSR_WRITE_1(sc, VGE_RXQCSRS, VGE_RXQCSR_WAK);
 		}
 
-		if (status & (VGE_ISR_TXOK0|VGE_ISR_TIMER0))
+		if (status & (VGE_ISR_TXOK0|VGE_ISR_TXOK_HIPRIO))
 			vge_txeof(sc);
 
-		if (status & (VGE_ISR_TXDMA_STALL|VGE_ISR_RXDMA_STALL))
-			vge_init(sc);
+		if (status & (VGE_ISR_TXDMA_STALL|VGE_ISR_RXDMA_STALL)) {
+			ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+			vge_init_locked(sc);
+		}
 
 		if (status & VGE_ISR_LINKSTS)
-			vge_tick(sc);
+			vge_link_statchg(sc);
 	}
+done:
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) {
+		/* Re-enable interrupts */
+		CSR_WRITE_1(sc, VGE_CRS3, VGE_CR3_INT_GMSK);
 
-	/* Re-enable interrupts */
-	CSR_WRITE_1(sc, VGE_CRS3, VGE_CR3_INT_GMSK);
-
+		if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
+			vge_start_locked(ifp);
+	}
 	VGE_UNLOCK(sc);
-
-	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
-		taskqueue_enqueue(taskqueue_swi, &sc->vge_txtask);
-
-	return;
 }
 
 static int
-vge_encap(sc, m_head, idx)
-	struct vge_softc	*sc;
-	struct mbuf		*m_head;
-	int			idx;
+vge_encap(struct vge_softc *sc, struct mbuf **m_head)
 {
-	struct mbuf		*m_new = NULL;
-	struct vge_dmaload_arg	arg;
-	bus_dmamap_t		map;
-	int			error;
+	struct vge_txdesc *txd;
+	struct vge_tx_frag *frag;
+	struct mbuf *m;
+	bus_dma_segment_t txsegs[VGE_MAXTXSEGS];
+	int error, i, nsegs, padlen;
+	uint32_t cflags;
 
-	if (sc->vge_ldata.vge_tx_free <= 2)
-		return (EFBIG);
+	VGE_LOCK_ASSERT(sc);
 
-	arg.vge_flags = 0;
+	M_ASSERTPKTHDR((*m_head));
 
-	if (m_head->m_pkthdr.csum_flags & CSUM_IP)
-		arg.vge_flags |= VGE_TDCTL_IPCSUM;
-	if (m_head->m_pkthdr.csum_flags & CSUM_TCP)
-		arg.vge_flags |= VGE_TDCTL_TCPCSUM;
-	if (m_head->m_pkthdr.csum_flags & CSUM_UDP)
-		arg.vge_flags |= VGE_TDCTL_UDPCSUM;
-
-	arg.sc = sc;
-	arg.vge_idx = idx;
-	arg.vge_m0 = m_head;
-	arg.vge_maxsegs = VGE_TX_FRAGS;
-
-	map = sc->vge_ldata.vge_tx_dmamap[idx];
-	error = bus_dmamap_load_mbuf(sc->vge_ldata.vge_mtag, map,
-	    m_head, vge_dma_map_tx_desc, &arg, BUS_DMA_NOWAIT);
-
-	if (error && error != EFBIG) {
-		if_printf(sc->vge_ifp, "can't map mbuf (error %d)\n", error);
-		return (ENOBUFS);
-	}
-
-	/* Too many segments to map, coalesce into a single mbuf */
-
-	if (error || arg.vge_maxsegs == 0) {
-		m_new = m_defrag(m_head, M_DONTWAIT);
-		if (m_new == NULL)
-			return (1);
-		else
-			m_head = m_new;
-
-		arg.sc = sc;
-		arg.vge_m0 = m_head;
-		arg.vge_idx = idx;
-		arg.vge_maxsegs = 1;
-
-		error = bus_dmamap_load_mbuf(sc->vge_ldata.vge_mtag, map,
-		    m_head, vge_dma_map_tx_desc, &arg, BUS_DMA_NOWAIT);
-		if (error) {
-			if_printf(sc->vge_ifp, "can't map mbuf (error %d)\n",
-			    error);
-			return (EFBIG);
+	/* Argh. This chip does not autopad short frames. */
+	if ((*m_head)->m_pkthdr.len < VGE_MIN_FRAMELEN) {
+		m = *m_head;
+		padlen = VGE_MIN_FRAMELEN - m->m_pkthdr.len;
+		if (M_WRITABLE(m) == 0) {
+			/* Get a writable copy. */
+			m = m_dup(*m_head, M_DONTWAIT);
+			m_freem(*m_head);
+			if (m == NULL) {
+				*m_head = NULL;
+				return (ENOBUFS);
+			}
+			*m_head = m;
 		}
+		if (M_TRAILINGSPACE(m) < padlen) {
+			m = m_defrag(m, M_DONTWAIT);
+			if (m == NULL) {
+				m_freem(*m_head);
+				*m_head = NULL;
+				return (ENOBUFS);
+			}
+		}
+		/*
+		 * Manually pad short frames, and zero the pad space
+		 * to avoid leaking data.
+		 */
+		bzero(mtod(m, char *) + m->m_pkthdr.len, padlen);
+		m->m_pkthdr.len += padlen;
+		m->m_len = m->m_pkthdr.len;
+		*m_head = m;
 	}
 
-	sc->vge_ldata.vge_tx_mbuf[idx] = m_head;
-	sc->vge_ldata.vge_tx_free--;
+	txd = &sc->vge_cdata.vge_txdesc[sc->vge_cdata.vge_tx_prodidx];
+
+	error = bus_dmamap_load_mbuf_sg(sc->vge_cdata.vge_tx_tag,
+	    txd->tx_dmamap, *m_head, txsegs, &nsegs, 0);
+	if (error == EFBIG) {
+		m = m_collapse(*m_head, M_DONTWAIT, VGE_MAXTXSEGS);
+		if (m == NULL) {
+			m_freem(*m_head);
+			*m_head = NULL;
+			return (ENOMEM);
+		}
+		*m_head = m;
+		error = bus_dmamap_load_mbuf_sg(sc->vge_cdata.vge_tx_tag,
+		    txd->tx_dmamap, *m_head, txsegs, &nsegs, 0);
+		if (error != 0) {
+			m_freem(*m_head);
+			*m_head = NULL;
+			return (error);
+		}
+	} else if (error != 0)
+		return (error);
+	bus_dmamap_sync(sc->vge_cdata.vge_tx_tag, txd->tx_dmamap,
+	    BUS_DMASYNC_PREWRITE);
+
+	m = *m_head;
+	cflags = 0;
+
+	/* Configure checksum offload. */
+	if ((m->m_pkthdr.csum_flags & CSUM_IP) != 0)
+		cflags |= VGE_TDCTL_IPCSUM;
+	if ((m->m_pkthdr.csum_flags & CSUM_TCP) != 0)
+		cflags |= VGE_TDCTL_TCPCSUM;
+	if ((m->m_pkthdr.csum_flags & CSUM_UDP) != 0)
+		cflags |= VGE_TDCTL_UDPCSUM;
+
+	/* Configure VLAN. */
+	if ((m->m_flags & M_VLANTAG) != 0)
+		cflags |= m->m_pkthdr.ether_vtag | VGE_TDCTL_VTAG;
+	txd->tx_desc->vge_sts = htole32(m->m_pkthdr.len << 16);
+	/*
+	 * XXX
+	 * Velocity family seems to support TSO but no information
+	 * for MSS configuration is available. Also the number of
+	 * fragments supported by a descriptor is too small to hold
+	 * entire 64KB TCP/IP segment. Maybe VGE_TD_LS_MOF,
+	 * VGE_TD_LS_SOF and VGE_TD_LS_EOF could be used to build
+	 * longer chain of buffers but no additional information is
+	 * available.
+	 *
+	 * When telling the chip how many segments there are, we
+	 * must use nsegs + 1 instead of just nsegs. Darned if I
+	 * know why. This also means we can't use the last fragment
+	 * field of Tx descriptor.
+	 */
+	txd->tx_desc->vge_ctl = htole32(cflags | ((nsegs + 1) << 28) |
+	    VGE_TD_LS_NORM);
+	for (i = 0; i < nsegs; i++) {
+		frag = &txd->tx_desc->vge_frag[i];
+		frag->vge_addrlo = htole32(VGE_ADDR_LO(txsegs[i].ds_addr));
+		frag->vge_addrhi = htole32(VGE_ADDR_HI(txsegs[i].ds_addr) |
+		    (VGE_BUFLEN(txsegs[i].ds_len) << 16));
+	}
+
+	sc->vge_cdata.vge_tx_cnt++;
+	VGE_TX_DESC_INC(sc->vge_cdata.vge_tx_prodidx);
 
 	/*
-	 * Set up hardware VLAN tagging.
+	 * Finally request interrupt and give the first descriptor
+	 * ownership to hardware.
 	 */
-
-	if (m_head->m_flags & M_VLANTAG)
-		sc->vge_ldata.vge_tx_list[idx].vge_ctl |=
-		    htole32(m_head->m_pkthdr.ether_vtag | VGE_TDCTL_VTAG);
-
-	sc->vge_ldata.vge_tx_list[idx].vge_sts |= htole32(VGE_TDSTS_OWN);
+	txd->tx_desc->vge_ctl |= htole32(VGE_TDCTL_TIC);
+	txd->tx_desc->vge_sts |= htole32(VGE_TDSTS_OWN);
+	txd->tx_m = m;
 
 	return (0);
 }
 
-static void
-vge_tx_task(arg, npending)
-	void			*arg;
-	int			npending;
-{
-	struct ifnet		*ifp;
-
-	ifp = arg;
-	vge_start(ifp);
-
-	return;
-}
-
 /*
  * Main transmit routine.
  */
 
 static void
-vge_start(ifp)
-	struct ifnet		*ifp;
+vge_start(struct ifnet *ifp)
 {
-	struct vge_softc	*sc;
-	struct mbuf		*m_head = NULL;
-	int			idx, pidx = 0;
+	struct vge_softc *sc;
 
 	sc = ifp->if_softc;
 	VGE_LOCK(sc);
+	vge_start_locked(ifp);
+	VGE_UNLOCK(sc);
+}
 
-	if (!sc->vge_link || ifp->if_drv_flags & IFF_DRV_OACTIVE) {
-		VGE_UNLOCK(sc);
+
+static void
+vge_start_locked(struct ifnet *ifp)
+{
+	struct vge_softc *sc;
+	struct vge_txdesc *txd;
+	struct mbuf *m_head;
+	int enq, idx;
+
+	sc = ifp->if_softc;
+
+	VGE_LOCK_ASSERT(sc);
+
+	if ((sc->vge_flags & VGE_FLAG_LINK) == 0 ||
+	    (ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) !=
+	    IFF_DRV_RUNNING)
 		return;
-	}
 
-	if (IFQ_DRV_IS_EMPTY(&ifp->if_snd)) {
-		VGE_UNLOCK(sc);
-		return;
-	}
-
-	idx = sc->vge_ldata.vge_tx_prodidx;
-
-	pidx = idx - 1;
-	if (pidx < 0)
-		pidx = VGE_TX_DESC_CNT - 1;
-
-
-	while (sc->vge_ldata.vge_tx_mbuf[idx] == NULL) {
+	idx = sc->vge_cdata.vge_tx_prodidx;
+	VGE_TX_DESC_DEC(idx);
+	for (enq = 0; !IFQ_DRV_IS_EMPTY(&ifp->if_snd) &&
+	    sc->vge_cdata.vge_tx_cnt < VGE_TX_DESC_CNT - 1; ) {
 		IFQ_DRV_DEQUEUE(&ifp->if_snd, m_head);
 		if (m_head == NULL)
 			break;
-
-		if (vge_encap(sc, m_head, idx)) {
+		/*
+		 * Pack the data into the transmit ring. If we
+		 * don't have room, set the OACTIVE flag and wait
+		 * for the NIC to drain the ring.
+		 */
+		if (vge_encap(sc, &m_head)) {
+			if (m_head == NULL)
+				break;
 			IFQ_DRV_PREPEND(&ifp->if_snd, m_head);
 			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
 			break;
 		}
 
-		sc->vge_ldata.vge_tx_list[pidx].vge_frag[0].vge_buflen |=
-		    htole16(VGE_TXDESC_Q);
-
-		pidx = idx;
+		txd = &sc->vge_cdata.vge_txdesc[idx];
+		txd->tx_desc->vge_frag[0].vge_addrhi |= htole32(VGE_TXDESC_Q);
 		VGE_TX_DESC_INC(idx);
 
+		enq++;
 		/*
 		 * If there's a BPF listener, bounce a copy of this frame
 		 * to him.
@@ -1846,55 +1973,42 @@ vge_start(ifp)
 		ETHER_BPF_MTAP(ifp, m_head);
 	}
 
-	if (idx == sc->vge_ldata.vge_tx_prodidx) {
-		VGE_UNLOCK(sc);
-		return;
+	if (enq > 0) {
+		bus_dmamap_sync(sc->vge_cdata.vge_tx_ring_tag,
+		    sc->vge_cdata.vge_tx_ring_map,
+		    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
+		/* Issue a transmit command. */
+		CSR_WRITE_2(sc, VGE_TXQCSRS, VGE_TXQCSR_WAK0);
+		/*
+		 * Set a timeout in case the chip goes out to lunch.
+		 */
+		sc->vge_timer = 5;
 	}
-
-	/* Flush the TX descriptors */
-
-	bus_dmamap_sync(sc->vge_ldata.vge_tx_list_tag,
-	    sc->vge_ldata.vge_tx_list_map,
-	    BUS_DMASYNC_PREWRITE|BUS_DMASYNC_PREREAD);
-
-	/* Issue a transmit command. */
-	CSR_WRITE_2(sc, VGE_TXQCSRS, VGE_TXQCSR_WAK0);
-
-	sc->vge_ldata.vge_tx_prodidx = idx;
-
-	/*
-	 * Use the countdown timer for interrupt moderation.
-	 * 'TX done' interrupts are disabled. Instead, we reset the
-	 * countdown timer, which will begin counting until it hits
-	 * the value in the SSTIMER register, and then trigger an
-	 * interrupt. Each time we set the TIMER0_ENABLE bit, the
-	 * the timer count is reloaded. Only when the transmitter
-	 * is idle will the timer hit 0 and an interrupt fire.
-	 */
-	CSR_WRITE_1(sc, VGE_CRS1, VGE_CR1_TIMER0_ENABLE);
-
-	VGE_UNLOCK(sc);
-
-	/*
-	 * Set a timeout in case the chip goes out to lunch.
-	 */
-	ifp->if_timer = 5;
-
-	return;
 }
 
 static void
-vge_init(xsc)
-	void			*xsc;
+vge_init(void *xsc)
 {
-	struct vge_softc	*sc = xsc;
-	struct ifnet		*ifp = sc->vge_ifp;
-	struct mii_data		*mii;
-	int			i;
+	struct vge_softc *sc = xsc;
 
 	VGE_LOCK(sc);
+	vge_init_locked(sc);
+	VGE_UNLOCK(sc);
+}
+
+static void
+vge_init_locked(struct vge_softc *sc)
+{
+	struct ifnet *ifp = sc->vge_ifp;
+	struct mii_data *mii;
+	int error, i;
+
+	VGE_LOCK_ASSERT(sc);
 	mii = device_get_softc(sc->vge_miibus);
 
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+		return;
+
 	/*
 	 * Cancel pending I/O and free all RX/TX buffers.
 	 */
@@ -1905,9 +2019,14 @@ vge_init(xsc)
 	 * Initialize the RX and TX descriptors and mbufs.
 	 */
 
-	vge_rx_list_init(sc);
+	error = vge_rx_list_init(sc);
+	if (error != 0) {
+                device_printf(sc->vge_dev, "no memory for Rx buffers.\n");
+                return;
+	}
 	vge_tx_list_init(sc);
-
+	/* Clear MAC statistics. */
+	vge_stats_clear(sc);
 	/* Set our station address */
 	for (i = 0; i < ETHER_ADDR_LEN; i++)
 		CSR_WRITE_1(sc, VGE_PAR0 + i, IF_LLADDR(sc->vge_ifp)[i]);
@@ -1917,7 +2036,7 @@ vge_init(xsc)
 	 * reception of VLAN tagged frames.
 	 */
 	CSR_CLRBIT_1(sc, VGE_RXCFG, VGE_RXCFG_FIFO_THR|VGE_RXCFG_VTAGOPT);
-	CSR_SETBIT_1(sc, VGE_RXCFG, VGE_RXFIFOTHR_128BYTES|VGE_VTAG_OPT2);
+	CSR_SETBIT_1(sc, VGE_RXCFG, VGE_RXFIFOTHR_128BYTES);
 
 	/* Set DMA burst length */
 	CSR_CLRBIT_1(sc, VGE_DMACFG0, VGE_DMACFG0_BURSTLEN);
@@ -1938,15 +2057,20 @@ vge_init(xsc)
 	 * Note that we only use one transmit queue.
 	 */
 
+	CSR_WRITE_4(sc, VGE_TXDESC_HIADDR,
+	    VGE_ADDR_HI(sc->vge_rdata.vge_tx_ring_paddr));
 	CSR_WRITE_4(sc, VGE_TXDESC_ADDR_LO0,
-	    VGE_ADDR_LO(sc->vge_ldata.vge_tx_list_addr));
+	    VGE_ADDR_LO(sc->vge_rdata.vge_tx_ring_paddr));
 	CSR_WRITE_2(sc, VGE_TXDESCNUM, VGE_TX_DESC_CNT - 1);
 
 	CSR_WRITE_4(sc, VGE_RXDESC_ADDR_LO,
-	    VGE_ADDR_LO(sc->vge_ldata.vge_rx_list_addr));
+	    VGE_ADDR_LO(sc->vge_rdata.vge_rx_ring_paddr));
 	CSR_WRITE_2(sc, VGE_RXDESCNUM, VGE_RX_DESC_CNT - 1);
 	CSR_WRITE_2(sc, VGE_RXDESC_RESIDUECNT, VGE_RX_DESC_CNT);
 
+	/* Configure interrupt moderation. */
+	vge_intr_holdoff(sc);
+
 	/* Enable and wake up the RX descriptor queue */
 	CSR_WRITE_1(sc, VGE_RXQCSRS, VGE_RXQCSR_RUN);
 	CSR_WRITE_1(sc, VGE_RXQCSRS, VGE_RXQCSR_WAK);
@@ -1954,29 +2078,12 @@ vge_init(xsc)
 	/* Enable the TX descriptor queue */
 	CSR_WRITE_2(sc, VGE_TXQCSRS, VGE_TXQCSR_RUN0);
 
-	/* Set up the receive filter -- allow large frames for VLANs. */
-	CSR_WRITE_1(sc, VGE_RXCTL, VGE_RXCTL_RX_UCAST|VGE_RXCTL_RX_GIANT);
-
-	/* If we want promiscuous mode, set the allframes bit. */
-	if (ifp->if_flags & IFF_PROMISC) {
-		CSR_SETBIT_1(sc, VGE_RXCTL, VGE_RXCTL_RX_PROMISC);
-	}
-
-	/* Set capture broadcast bit to capture broadcast frames. */
-	if (ifp->if_flags & IFF_BROADCAST) {
-		CSR_SETBIT_1(sc, VGE_RXCTL, VGE_RXCTL_RX_BCAST);
-	}
-
-	/* Set multicast bit to capture multicast frames. */
-	if (ifp->if_flags & IFF_MULTICAST) {
-		CSR_SETBIT_1(sc, VGE_RXCTL, VGE_RXCTL_RX_MCAST);
-	}
-
 	/* Init the cam filter. */
 	vge_cam_clear(sc);
 
-	/* Init the multicast filter. */
-	vge_setmulti(sc);
+	/* Set up receiver filter. */
+	vge_rxfilter(sc);
+	vge_setvlan(sc);
 
 	/* Enable flow control */
 
@@ -1990,42 +2097,6 @@ vge_init(xsc)
 	CSR_WRITE_1(sc, VGE_CRS0,
 	    VGE_CR0_TX_ENABLE|VGE_CR0_RX_ENABLE|VGE_CR0_START);
 
-	/*
-	 * Configure one-shot timer for microsecond
-	 * resulution and load it for 500 usecs.
-	 */
-	CSR_SETBIT_1(sc, VGE_DIAGCTL, VGE_DIAGCTL_TIMER0_RES);
-	CSR_WRITE_2(sc, VGE_SSTIMER, 400);
-
-	/*
-	 * Configure interrupt moderation for receive. Enable
-	 * the holdoff counter and load it, and set the RX
-	 * suppression count to the number of descriptors we
-	 * want to allow before triggering an interrupt.
-	 * The holdoff timer is in units of 20 usecs.
-	 */
-
-#ifdef notyet
-	CSR_WRITE_1(sc, VGE_INTCTL1, VGE_INTCTL_TXINTSUP_DISABLE);
-	/* Select the interrupt holdoff timer page. */
-	CSR_CLRBIT_1(sc, VGE_CAMCTL, VGE_CAMCTL_PAGESEL);
-	CSR_SETBIT_1(sc, VGE_CAMCTL, VGE_PAGESEL_INTHLDOFF);
-	CSR_WRITE_1(sc, VGE_INTHOLDOFF, 10); /* ~200 usecs */
-
-	/* Enable use of the holdoff timer. */
-	CSR_WRITE_1(sc, VGE_CRS3, VGE_CR3_INT_HOLDOFF);
-	CSR_WRITE_1(sc, VGE_INTCTL1, VGE_INTCTL_SC_RELOAD);
-
-	/* Select the RX suppression threshold page. */
-	CSR_CLRBIT_1(sc, VGE_CAMCTL, VGE_CAMCTL_PAGESEL);
-	CSR_SETBIT_1(sc, VGE_CAMCTL, VGE_PAGESEL_RXSUPPTHR);
-	CSR_WRITE_1(sc, VGE_RXSUPPTHR, 64); /* interrupt after 64 packets */
-
-	/* Restore the page select bits. */
-	CSR_CLRBIT_1(sc, VGE_CAMCTL, VGE_CAMCTL_PAGESEL);
-	CSR_SETBIT_1(sc, VGE_CAMCTL, VGE_PAGESEL_MAR);
-#endif
-
 #ifdef DEVICE_POLLING
 	/*
 	 * Disable interrupts if we are polling.
@@ -2040,70 +2111,66 @@ vge_init(xsc)
 	 * Enable interrupts.
 	 */
 		CSR_WRITE_4(sc, VGE_IMR, VGE_INTRS);
-		CSR_WRITE_4(sc, VGE_ISR, 0);
+		CSR_WRITE_4(sc, VGE_ISR, 0xFFFFFFFF);
 		CSR_WRITE_1(sc, VGE_CRS3, VGE_CR3_INT_GMSK);
 	}
 
+	sc->vge_flags &= ~VGE_FLAG_LINK;
 	mii_mediachg(mii);
 
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-
-	sc->vge_if_flags = 0;
-	sc->vge_link = 0;
-
-	VGE_UNLOCK(sc);
-
-	return;
+	callout_reset(&sc->vge_watchdog, hz, vge_watchdog, sc);
 }
 
 /*
  * Set media options.
  */
 static int
-vge_ifmedia_upd(ifp)
-	struct ifnet		*ifp;
+vge_ifmedia_upd(struct ifnet *ifp)
 {
-	struct vge_softc	*sc;
-	struct mii_data		*mii;
+	struct vge_softc *sc;
+	struct mii_data *mii;
+	int error;
 
 	sc = ifp->if_softc;
 	VGE_LOCK(sc);
 	mii = device_get_softc(sc->vge_miibus);
-	mii_mediachg(mii);
+	error = mii_mediachg(mii);
 	VGE_UNLOCK(sc);
 
-	return (0);
+	return (error);
 }
 
 /*
  * Report current media status.
  */
 static void
-vge_ifmedia_sts(ifp, ifmr)
-	struct ifnet		*ifp;
-	struct ifmediareq	*ifmr;
+vge_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
 {
-	struct vge_softc	*sc;
-	struct mii_data		*mii;
+	struct vge_softc *sc;
+	struct mii_data *mii;
 
 	sc = ifp->if_softc;
 	mii = device_get_softc(sc->vge_miibus);
 
+	VGE_LOCK(sc);
+	if ((ifp->if_flags & IFF_UP) == 0) {
+		VGE_UNLOCK(sc);
+		return;
+	}
 	mii_pollstat(mii);
+	VGE_UNLOCK(sc);
 	ifmr->ifm_active = mii->mii_media_active;
 	ifmr->ifm_status = mii->mii_media_status;
-
-	return;
 }
 
 static void
-vge_miibus_statchg(dev)
-	device_t		dev;
+vge_miibus_statchg(device_t dev)
 {
-	struct vge_softc	*sc;
-	struct mii_data		*mii;
-	struct ifmedia_entry	*ife;
+	struct vge_softc *sc;
+	struct mii_data *mii;
+	struct ifmedia_entry *ife;
 
 	sc = device_get_softc(dev);
 	mii = device_get_softc(sc->vge_miibus);
@@ -2143,52 +2210,50 @@ vge_miibus_statchg(dev)
 		    IFM_SUBTYPE(ife->ifm_media));
 		break;
 	}
-
-	return;
 }
 
 static int
-vge_ioctl(ifp, command, data)
-	struct ifnet		*ifp;
-	u_long			command;
-	caddr_t			data;
+vge_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
 {
-	struct vge_softc	*sc = ifp->if_softc;
-	struct ifreq		*ifr = (struct ifreq *) data;
-	struct mii_data		*mii;
-	int			error = 0;
+	struct vge_softc *sc = ifp->if_softc;
+	struct ifreq *ifr = (struct ifreq *) data;
+	struct mii_data *mii;
+	int error = 0, mask;
 
 	switch (command) {
 	case SIOCSIFMTU:
-		if (ifr->ifr_mtu > VGE_JUMBO_MTU)
+		VGE_LOCK(sc);
+		if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > VGE_JUMBO_MTU)
 			error = EINVAL;
-		ifp->if_mtu = ifr->ifr_mtu;
+		else if (ifp->if_mtu != ifr->ifr_mtu) {
+			if (ifr->ifr_mtu > ETHERMTU &&
+			    (sc->vge_flags & VGE_FLAG_JUMBO) == 0)
+				error = EINVAL;
+			else
+				ifp->if_mtu = ifr->ifr_mtu;
+		}
+		VGE_UNLOCK(sc);
 		break;
 	case SIOCSIFFLAGS:
-		if (ifp->if_flags & IFF_UP) {
-			if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
-			    ifp->if_flags & IFF_PROMISC &&
-			    !(sc->vge_if_flags & IFF_PROMISC)) {
-				CSR_SETBIT_1(sc, VGE_RXCTL,
-				    VGE_RXCTL_RX_PROMISC);
-				vge_setmulti(sc);
-			} else if (ifp->if_drv_flags & IFF_DRV_RUNNING &&
-			    !(ifp->if_flags & IFF_PROMISC) &&
-			    sc->vge_if_flags & IFF_PROMISC) {
-				CSR_CLRBIT_1(sc, VGE_RXCTL,
-				    VGE_RXCTL_RX_PROMISC);
-				vge_setmulti(sc);
-                        } else
-				vge_init(sc);
-		} else {
-			if (ifp->if_drv_flags & IFF_DRV_RUNNING)
-				vge_stop(sc);
-		}
+		VGE_LOCK(sc);
+		if ((ifp->if_flags & IFF_UP) != 0) {
+			if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 &&
+			    ((ifp->if_flags ^ sc->vge_if_flags) &
+			    (IFF_PROMISC | IFF_ALLMULTI)) != 0)
+				vge_rxfilter(sc);
+			else
+				vge_init_locked(sc);
+		} else if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+			vge_stop(sc);
 		sc->vge_if_flags = ifp->if_flags;
+		VGE_UNLOCK(sc);
 		break;
 	case SIOCADDMULTI:
 	case SIOCDELMULTI:
-		vge_setmulti(sc);
+		VGE_LOCK(sc);
+		if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+			vge_rxfilter(sc);
+		VGE_UNLOCK(sc);
 		break;
 	case SIOCGIFMEDIA:
 	case SIOCSIFMEDIA:
@@ -2196,14 +2261,13 @@ vge_ioctl(ifp, command, data)
 		error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, command);
 		break;
 	case SIOCSIFCAP:
-	    {
-		int mask = ifr->ifr_reqcap ^ ifp->if_capenable;
+		mask = ifr->ifr_reqcap ^ ifp->if_capenable;
 #ifdef DEVICE_POLLING
 		if (mask & IFCAP_POLLING) {
 			if (ifr->ifr_reqcap & IFCAP_POLLING) {
 				error = ether_poll_register(vge_poll, ifp);
 				if (error)
-					return(error);
+					return (error);
 				VGE_LOCK(sc);
 					/* Disable interrupts */
 				CSR_WRITE_4(sc, VGE_IMR, 0);
@@ -2222,6 +2286,7 @@ vge_ioctl(ifp, command, data)
 			}
 		}
 #endif /* DEVICE_POLLING */
+		VGE_LOCK(sc);
 		if ((mask & IFCAP_TXCSUM) != 0 &&
 		    (ifp->if_capabilities & IFCAP_TXCSUM) != 0) {
 			ifp->if_capenable ^= IFCAP_TXCSUM;
@@ -2233,7 +2298,25 @@ vge_ioctl(ifp, command, data)
 		if ((mask & IFCAP_RXCSUM) != 0 &&
 		    (ifp->if_capabilities & IFCAP_RXCSUM) != 0)
 			ifp->if_capenable ^= IFCAP_RXCSUM;
-	    }
+		if ((mask & IFCAP_WOL_UCAST) != 0 &&
+		    (ifp->if_capabilities & IFCAP_WOL_UCAST) != 0)
+			ifp->if_capenable ^= IFCAP_WOL_UCAST;
+		if ((mask & IFCAP_WOL_MCAST) != 0 &&
+		    (ifp->if_capabilities & IFCAP_WOL_MCAST) != 0)
+			ifp->if_capenable ^= IFCAP_WOL_MCAST;
+		if ((mask & IFCAP_WOL_MAGIC) != 0 &&
+		    (ifp->if_capabilities & IFCAP_WOL_MAGIC) != 0)
+			ifp->if_capenable ^= IFCAP_WOL_MAGIC;
+		if ((mask & IFCAP_VLAN_HWCSUM) != 0 &&
+		    (ifp->if_capabilities & IFCAP_VLAN_HWCSUM) != 0)
+			ifp->if_capenable ^= IFCAP_VLAN_HWCSUM;
+		if ((mask & IFCAP_VLAN_HWTAGGING) != 0 &&
+		    (IFCAP_VLAN_HWTAGGING & ifp->if_capabilities) != 0) {
+			ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
+			vge_setvlan(sc);
+		}
+		VGE_UNLOCK(sc);
+		VLAN_CAPABILITIES(ifp);
 		break;
 	default:
 		error = ether_ioctl(ifp, command, data);
@@ -2244,24 +2327,27 @@ vge_ioctl(ifp, command, data)
 }
 
 static void
-vge_watchdog(ifp)
-	struct ifnet		*ifp;
+vge_watchdog(void *arg)
 {
-	struct vge_softc		*sc;
+	struct vge_softc *sc;
+	struct ifnet *ifp;
 
-	sc = ifp->if_softc;
-	VGE_LOCK(sc);
+	sc = arg;
+	VGE_LOCK_ASSERT(sc);
+	vge_stats_update(sc);
+	callout_reset(&sc->vge_watchdog, hz, vge_watchdog, sc);
+	if (sc->vge_timer == 0 || --sc->vge_timer > 0)
+		return;
+
+	ifp = sc->vge_ifp;
 	if_printf(ifp, "watchdog timeout\n");
 	ifp->if_oerrors++;
 
 	vge_txeof(sc);
-	vge_rxeof(sc);
+	vge_rxeof(sc, VGE_RX_DESC_CNT);
 
-	vge_init(sc);
-
-	VGE_UNLOCK(sc);
-
-	return;
+	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+	vge_init_locked(sc);
 }
 
 /*
@@ -2269,15 +2355,14 @@ vge_watchdog(ifp)
  * RX and TX lists.
  */
 static void
-vge_stop(sc)
-	struct vge_softc		*sc;
+vge_stop(struct vge_softc *sc)
 {
-	register int		i;
-	struct ifnet		*ifp;
+	struct ifnet *ifp;
 
-	VGE_LOCK(sc);
+	VGE_LOCK_ASSERT(sc);
 	ifp = sc->vge_ifp;
-	ifp->if_timer = 0;
+	sc->vge_timer = 0;
+	callout_stop(&sc->vge_watchdog);
 
 	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
 
@@ -2288,36 +2373,10 @@ vge_stop(sc)
 	CSR_WRITE_1(sc, VGE_RXQCSRC, 0xFF);
 	CSR_WRITE_4(sc, VGE_RXDESC_ADDR_LO, 0);
 
-	if (sc->vge_head != NULL) {
-		m_freem(sc->vge_head);
-		sc->vge_head = sc->vge_tail = NULL;
-	}
-
-	/* Free the TX list buffers. */
-
-	for (i = 0; i < VGE_TX_DESC_CNT; i++) {
-		if (sc->vge_ldata.vge_tx_mbuf[i] != NULL) {
-			bus_dmamap_unload(sc->vge_ldata.vge_mtag,
-			    sc->vge_ldata.vge_tx_dmamap[i]);
-			m_freem(sc->vge_ldata.vge_tx_mbuf[i]);
-			sc->vge_ldata.vge_tx_mbuf[i] = NULL;
-		}
-	}
-
-	/* Free the RX list buffers. */
-
-	for (i = 0; i < VGE_RX_DESC_CNT; i++) {
-		if (sc->vge_ldata.vge_rx_mbuf[i] != NULL) {
-			bus_dmamap_unload(sc->vge_ldata.vge_mtag,
-			    sc->vge_ldata.vge_rx_dmamap[i]);
-			m_freem(sc->vge_ldata.vge_rx_mbuf[i]);
-			sc->vge_ldata.vge_rx_mbuf[i] = NULL;
-		}
-	}
-
-	VGE_UNLOCK(sc);
-
-	return;
+	vge_stats_update(sc);
+	VGE_CHAIN_RESET(sc);
+	vge_txeof(sc);
+	vge_freebufs(sc);
 }
 
 /*
@@ -2326,16 +2385,17 @@ vge_stop(sc)
  * resume.
  */
 static int
-vge_suspend(dev)
-	device_t		dev;
+vge_suspend(device_t dev)
 {
-	struct vge_softc	*sc;
+	struct vge_softc *sc;
 
 	sc = device_get_softc(dev);
 
+	VGE_LOCK(sc);
 	vge_stop(sc);
-
-	sc->suspended = 1;
+	vge_setwol(sc);
+	sc->vge_flags |= VGE_FLAG_SUSPENDED;
+	VGE_UNLOCK(sc);
 
 	return (0);
 }
@@ -2346,24 +2406,35 @@ vge_suspend(dev)
  * appropriate.
  */
 static int
-vge_resume(dev)
-	device_t		dev;
+vge_resume(device_t dev)
 {
-	struct vge_softc	*sc;
-	struct ifnet		*ifp;
+	struct vge_softc *sc;
+	struct ifnet *ifp;
+	uint16_t pmstat;
 
 	sc = device_get_softc(dev);
+	VGE_LOCK(sc);
+	if ((sc->vge_flags & VGE_FLAG_PMCAP) != 0) {
+		/* Disable PME and clear PME status. */
+		pmstat = pci_read_config(sc->vge_dev,
+		    sc->vge_pmcap + PCIR_POWER_STATUS, 2);
+		if ((pmstat & PCIM_PSTAT_PMEENABLE) != 0) {
+			pmstat &= ~PCIM_PSTAT_PMEENABLE;
+			pci_write_config(sc->vge_dev,
+			    sc->vge_pmcap + PCIR_POWER_STATUS, pmstat, 2);
+		}
+	}
+	vge_clrwol(sc);
+	/* Restart MII auto-polling. */
+	vge_miipoll_start(sc);
 	ifp = sc->vge_ifp;
-
-	/* reenable busmastering */
-	pci_enable_busmaster(dev);
-	pci_enable_io(dev, SYS_RES_MEMORY);
-
-	/* reinitialize interface if necessary */
-	if (ifp->if_flags & IFF_UP)
-		vge_init(sc);
-
-	sc->suspended = 0;
+	/* Reinitialize interface if necessary. */
+	if ((ifp->if_flags & IFF_UP) != 0) {
+		ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
+		vge_init_locked(sc);
+	}
+	sc->vge_flags &= ~VGE_FLAG_SUSPENDED;
+	VGE_UNLOCK(sc);
 
 	return (0);
 }
@@ -2373,14 +2444,444 @@ vge_resume(dev)
  * get confused by errant DMAs when rebooting.
  */
 static int
-vge_shutdown(dev)
-	device_t		dev;
+vge_shutdown(device_t dev)
 {
-	struct vge_softc		*sc;
 
-	sc = device_get_softc(dev);
-
-	vge_stop(sc);
-
-	return (0);
+	return (vge_suspend(dev));
+}
+
+#define	VGE_SYSCTL_STAT_ADD32(c, h, n, p, d)	\
+	    SYSCTL_ADD_UINT(c, h, OID_AUTO, n, CTLFLAG_RD, p, 0, d)
+
+static void
+vge_sysctl_node(struct vge_softc *sc)
+{
+	struct sysctl_ctx_list *ctx;
+	struct sysctl_oid_list *child, *parent;
+	struct sysctl_oid *tree;
+	struct vge_hw_stats *stats;
+
+	stats = &sc->vge_stats;
+	ctx = device_get_sysctl_ctx(sc->vge_dev);
+	child = SYSCTL_CHILDREN(device_get_sysctl_tree(sc->vge_dev));
+
+	SYSCTL_ADD_INT(ctx, child, OID_AUTO, "int_holdoff",
+	    CTLFLAG_RW, &sc->vge_int_holdoff, 0, "interrupt holdoff");
+	SYSCTL_ADD_INT(ctx, child, OID_AUTO, "rx_coal_pkt",
+	    CTLFLAG_RW, &sc->vge_rx_coal_pkt, 0, "rx coalescing packet");
+	SYSCTL_ADD_INT(ctx, child, OID_AUTO, "tx_coal_pkt",
+	    CTLFLAG_RW, &sc->vge_tx_coal_pkt, 0, "tx coalescing packet");
+
+	/* Pull in device tunables. */
+	sc->vge_int_holdoff = VGE_INT_HOLDOFF_DEFAULT;
+	resource_int_value(device_get_name(sc->vge_dev),
+	    device_get_unit(sc->vge_dev), "int_holdoff", &sc->vge_int_holdoff);
+	sc->vge_rx_coal_pkt = VGE_RX_COAL_PKT_DEFAULT;
+	resource_int_value(device_get_name(sc->vge_dev),
+	    device_get_unit(sc->vge_dev), "rx_coal_pkt", &sc->vge_rx_coal_pkt);
+	sc->vge_tx_coal_pkt = VGE_TX_COAL_PKT_DEFAULT;
+	resource_int_value(device_get_name(sc->vge_dev),
+	    device_get_unit(sc->vge_dev), "tx_coal_pkt", &sc->vge_tx_coal_pkt);
+
+	tree = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, "stats", CTLFLAG_RD,
+	    NULL, "VGE statistics");
+	parent = SYSCTL_CHILDREN(tree);
+
+	/* Rx statistics. */
+	tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "rx", CTLFLAG_RD,
+	    NULL, "RX MAC statistics");
+	child = SYSCTL_CHILDREN(tree);
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames",
+	    &stats->rx_frames, "frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "good_frames",
+	    &stats->rx_good_frames, "Good frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "fifo_oflows",
+	    &stats->rx_fifo_oflows, "FIFO overflows");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "runts",
+	    &stats->rx_runts, "Too short frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "runts_errs",
+	    &stats->rx_runts_errs, "Too short frames with errors");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_64",
+	    &stats->rx_pkts_64, "64 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_65_127",
+	    &stats->rx_pkts_65_127, "65 to 127 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_128_255",
+	    &stats->rx_pkts_128_255, "128 to 255 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_256_511",
+	    &stats->rx_pkts_256_511, "256 to 511 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_512_1023",
+	    &stats->rx_pkts_512_1023, "512 to 1023 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_1024_1518",
+	    &stats->rx_pkts_1024_1518, "1024 to 1518 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_1519_max",
+	    &stats->rx_pkts_1519_max, "1519 to max frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_1519_max_errs",
+	    &stats->rx_pkts_1519_max_errs, "1519 to max frames with error");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_jumbo",
+	    &stats->rx_jumbos, "Jumbo frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "crcerrs",
+	    &stats->rx_crcerrs, "CRC errors");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "pause_frames",
+	    &stats->rx_pause_frames, "CRC errors");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "align_errs",
+	    &stats->rx_alignerrs, "Alignment errors");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "nobufs",
+	    &stats->rx_nobufs, "Frames with no buffer event");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "sym_errs",
+	    &stats->rx_symerrs, "Frames with symbol errors");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "len_errs",
+	    &stats->rx_lenerrs, "Frames with length mismatched");
+
+	/* Tx statistics. */
+	tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "tx", CTLFLAG_RD,
+	    NULL, "TX MAC statistics");
+	child = SYSCTL_CHILDREN(tree);
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "good_frames",
+	    &stats->tx_good_frames, "Good frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_64",
+	    &stats->tx_pkts_64, "64 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_65_127",
+	    &stats->tx_pkts_65_127, "65 to 127 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_128_255",
+	    &stats->tx_pkts_128_255, "128 to 255 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_256_511",
+	    &stats->tx_pkts_256_511, "256 to 511 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_512_1023",
+	    &stats->tx_pkts_512_1023, "512 to 1023 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_1024_1518",
+	    &stats->tx_pkts_1024_1518, "1024 to 1518 bytes frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "frames_jumbo",
+	    &stats->tx_jumbos, "Jumbo frames");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "colls",
+	    &stats->tx_colls, "Collisions");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "late_colls",
+	    &stats->tx_latecolls, "Late collisions");
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "pause_frames",
+	    &stats->tx_pause, "Pause frames");
+#ifdef VGE_ENABLE_SQEERR
+	VGE_SYSCTL_STAT_ADD32(ctx, child, "sqeerrs",
+	    &stats->tx_sqeerrs, "SQE errors");
+#endif
+	/* Clear MAC statistics. */
+	vge_stats_clear(sc);
+}
+
+#undef	VGE_SYSCTL_STAT_ADD32
+
+static void
+vge_stats_clear(struct vge_softc *sc)
+{
+	int i;
+
+	CSR_WRITE_1(sc, VGE_MIBCSR,
+	    CSR_READ_1(sc, VGE_MIBCSR) | VGE_MIBCSR_FREEZE);
+	CSR_WRITE_1(sc, VGE_MIBCSR,
+	    CSR_READ_1(sc, VGE_MIBCSR) | VGE_MIBCSR_CLR);
+	for (i = VGE_TIMEOUT; i > 0; i--) {
+		DELAY(1);
+		if ((CSR_READ_1(sc, VGE_MIBCSR) & VGE_MIBCSR_CLR) == 0)
+			break;
+	}
+	if (i == 0)
+		device_printf(sc->vge_dev, "MIB clear timed out!\n");
+	CSR_WRITE_1(sc, VGE_MIBCSR, CSR_READ_1(sc, VGE_MIBCSR) &
+	    ~VGE_MIBCSR_FREEZE);
+}
+
+static void
+vge_stats_update(struct vge_softc *sc)
+{
+	struct vge_hw_stats *stats;
+	struct ifnet *ifp;
+	uint32_t mib[VGE_MIB_CNT], val;
+	int i;
+
+	VGE_LOCK_ASSERT(sc);
+
+	stats = &sc->vge_stats;
+	ifp = sc->vge_ifp;
+
+	CSR_WRITE_1(sc, VGE_MIBCSR,
+	    CSR_READ_1(sc, VGE_MIBCSR) | VGE_MIBCSR_FLUSH);
+	for (i = VGE_TIMEOUT; i > 0; i--) {
+		DELAY(1);
+		if ((CSR_READ_1(sc, VGE_MIBCSR) & VGE_MIBCSR_FLUSH) == 0)
+			break;
+	}
+	if (i == 0) {
+		device_printf(sc->vge_dev, "MIB counter dump timed out!\n");
+		vge_stats_clear(sc);
+		return;
+	}
+
+	bzero(mib, sizeof(mib));
+reset_idx:
+	/* Set MIB read index to 0. */
+	CSR_WRITE_1(sc, VGE_MIBCSR,
+	    CSR_READ_1(sc, VGE_MIBCSR) | VGE_MIBCSR_RINI);
+	for (i = 0; i < VGE_MIB_CNT; i++) {
+		val = CSR_READ_4(sc, VGE_MIBDATA);
+		if (i != VGE_MIB_DATA_IDX(val)) {
+			/* Reading interrupted. */
+			goto reset_idx;
+		}
+		mib[i] = val & VGE_MIB_DATA_MASK;
+	}
+
+	/* Rx stats. */
+	stats->rx_frames += mib[VGE_MIB_RX_FRAMES];
+	stats->rx_good_frames += mib[VGE_MIB_RX_GOOD_FRAMES];
+	stats->rx_fifo_oflows += mib[VGE_MIB_RX_FIFO_OVERRUNS];
+	stats->rx_runts += mib[VGE_MIB_RX_RUNTS];
+	stats->rx_runts_errs += mib[VGE_MIB_RX_RUNTS_ERRS];
+	stats->rx_pkts_64 += mib[VGE_MIB_RX_PKTS_64];
+	stats->rx_pkts_65_127 += mib[VGE_MIB_RX_PKTS_65_127];
+	stats->rx_pkts_128_255 += mib[VGE_MIB_RX_PKTS_128_255];
+	stats->rx_pkts_256_511 += mib[VGE_MIB_RX_PKTS_256_511];
+	stats->rx_pkts_512_1023 += mib[VGE_MIB_RX_PKTS_512_1023];
+	stats->rx_pkts_1024_1518 += mib[VGE_MIB_RX_PKTS_1024_1518];
+	stats->rx_pkts_1519_max += mib[VGE_MIB_RX_PKTS_1519_MAX];
+	stats->rx_pkts_1519_max_errs += mib[VGE_MIB_RX_PKTS_1519_MAX_ERRS];
+	stats->rx_jumbos += mib[VGE_MIB_RX_JUMBOS];
+	stats->rx_crcerrs += mib[VGE_MIB_RX_CRCERRS];
+	stats->rx_pause_frames += mib[VGE_MIB_RX_PAUSE];
+	stats->rx_alignerrs += mib[VGE_MIB_RX_ALIGNERRS];
+	stats->rx_nobufs += mib[VGE_MIB_RX_NOBUFS];
+	stats->rx_symerrs += mib[VGE_MIB_RX_SYMERRS];
+	stats->rx_lenerrs += mib[VGE_MIB_RX_LENERRS];
+
+	/* Tx stats. */
+	stats->tx_good_frames += mib[VGE_MIB_TX_GOOD_FRAMES];
+	stats->tx_pkts_64 += mib[VGE_MIB_TX_PKTS_64];
+	stats->tx_pkts_65_127 += mib[VGE_MIB_TX_PKTS_65_127];
+	stats->tx_pkts_128_255 += mib[VGE_MIB_TX_PKTS_128_255];
+	stats->tx_pkts_256_511 += mib[VGE_MIB_TX_PKTS_256_511];
+	stats->tx_pkts_512_1023 += mib[VGE_MIB_TX_PKTS_512_1023];
+	stats->tx_pkts_1024_1518 += mib[VGE_MIB_TX_PKTS_1024_1518];
+	stats->tx_jumbos += mib[VGE_MIB_TX_JUMBOS];
+	stats->tx_colls += mib[VGE_MIB_TX_COLLS];
+	stats->tx_pause += mib[VGE_MIB_TX_PAUSE];
+#ifdef VGE_ENABLE_SQEERR
+	stats->tx_sqeerrs += mib[VGE_MIB_TX_SQEERRS];
+#endif
+	stats->tx_latecolls += mib[VGE_MIB_TX_LATECOLLS];
+
+	/* Update counters in ifnet. */
+	ifp->if_opackets += mib[VGE_MIB_TX_GOOD_FRAMES];
+
+	ifp->if_collisions += mib[VGE_MIB_TX_COLLS] +
+	    mib[VGE_MIB_TX_LATECOLLS];
+
+	ifp->if_oerrors += mib[VGE_MIB_TX_COLLS] +
+	    mib[VGE_MIB_TX_LATECOLLS];
+
+	ifp->if_ipackets += mib[VGE_MIB_RX_GOOD_FRAMES];
+
+	ifp->if_ierrors += mib[VGE_MIB_RX_FIFO_OVERRUNS] +
+	    mib[VGE_MIB_RX_RUNTS] +
+	    mib[VGE_MIB_RX_RUNTS_ERRS] +
+	    mib[VGE_MIB_RX_CRCERRS] +
+	    mib[VGE_MIB_RX_ALIGNERRS] +
+	    mib[VGE_MIB_RX_NOBUFS] +
+	    mib[VGE_MIB_RX_SYMERRS] +
+	    mib[VGE_MIB_RX_LENERRS];
+}
+
+static void
+vge_intr_holdoff(struct vge_softc *sc)
+{
+	uint8_t intctl;
+
+	VGE_LOCK_ASSERT(sc);
+
+	/*
+	 * Set Tx interrupt supression threshold.
+	 * It's possible to use single-shot timer in VGE_CRS1 register
+	 * in Tx path such that driver can remove most of Tx completion
+	 * interrupts. However this requires additional access to
+	 * VGE_CRS1 register to reload the timer in addintion to
+	 * activating Tx kick command. Another downside is we don't know
+	 * what single-shot timer value should be used in advance so
+	 * reclaiming transmitted mbufs could be delayed a lot which in
+	 * turn slows down Tx operation.
+	 */
+	CSR_WRITE_1(sc, VGE_CAMCTL, VGE_PAGESEL_TXSUPPTHR);
+	CSR_WRITE_1(sc, VGE_TXSUPPTHR, sc->vge_tx_coal_pkt);
+
+	/* Set Rx interrupt suppresion threshold. */
+	CSR_WRITE_1(sc, VGE_CAMCTL, VGE_PAGESEL_RXSUPPTHR);
+	CSR_WRITE_1(sc, VGE_RXSUPPTHR, sc->vge_rx_coal_pkt);
+
+	intctl = CSR_READ_1(sc, VGE_INTCTL1);
+	intctl &= ~VGE_INTCTL_SC_RELOAD;
+	intctl |= VGE_INTCTL_HC_RELOAD;
+	if (sc->vge_tx_coal_pkt <= 0)
+		intctl |= VGE_INTCTL_TXINTSUP_DISABLE;
+	else
+		intctl &= ~VGE_INTCTL_TXINTSUP_DISABLE;
+	if (sc->vge_rx_coal_pkt <= 0)
+		intctl |= VGE_INTCTL_RXINTSUP_DISABLE;
+	else
+		intctl &= ~VGE_INTCTL_RXINTSUP_DISABLE;
+	CSR_WRITE_1(sc, VGE_INTCTL1, intctl);
+	CSR_WRITE_1(sc, VGE_CRC3, VGE_CR3_INT_HOLDOFF);
+	if (sc->vge_int_holdoff > 0) {
+		/* Set interrupt holdoff timer. */
+		CSR_WRITE_1(sc, VGE_CAMCTL, VGE_PAGESEL_INTHLDOFF);
+		CSR_WRITE_1(sc, VGE_INTHOLDOFF,
+		    VGE_INT_HOLDOFF_USEC(sc->vge_int_holdoff));
+		/* Enable holdoff timer. */
+		CSR_WRITE_1(sc, VGE_CRS3, VGE_CR3_INT_HOLDOFF);
+	}
+}
+
+static void
+vge_setlinkspeed(struct vge_softc *sc)
+{
+	struct mii_data *mii;
+	int aneg, i;
+
+	VGE_LOCK_ASSERT(sc);
+
+	mii = device_get_softc(sc->vge_miibus);
+	mii_pollstat(mii);
+	aneg = 0;
+	if ((mii->mii_media_status & (IFM_ACTIVE | IFM_AVALID)) ==
+	    (IFM_ACTIVE | IFM_AVALID)) {
+		switch IFM_SUBTYPE(mii->mii_media_active) {
+		case IFM_10_T:
+		case IFM_100_TX:
+			return;
+		case IFM_1000_T:
+			aneg++;
+		default:
+			break;
+		}
+	}
+	vge_miibus_writereg(sc->vge_dev, sc->vge_phyaddr, MII_100T2CR, 0);
+	vge_miibus_writereg(sc->vge_dev, sc->vge_phyaddr, MII_ANAR,
+	    ANAR_TX_FD | ANAR_TX | ANAR_10_FD | ANAR_10 | ANAR_CSMA);
+	vge_miibus_writereg(sc->vge_dev, sc->vge_phyaddr, MII_BMCR,
+	    BMCR_AUTOEN | BMCR_STARTNEG);
+	DELAY(1000);
+	if (aneg != 0) {
+		/* Poll link state until vge(4) get a 10/100 link. */
+		for (i = 0; i < MII_ANEGTICKS_GIGE; i++) {
+			mii_pollstat(mii);
+			if ((mii->mii_media_status & (IFM_ACTIVE | IFM_AVALID))
+			    == (IFM_ACTIVE | IFM_AVALID)) {
+				switch (IFM_SUBTYPE(mii->mii_media_active)) {
+				case IFM_10_T:
+				case IFM_100_TX:
+					return;
+				default:
+					break;
+				}
+			}
+			VGE_UNLOCK(sc);
+			pause("vgelnk", hz);
+			VGE_LOCK(sc);
+		}
+		if (i == MII_ANEGTICKS_GIGE)
+			device_printf(sc->vge_dev, "establishing link failed, "
+			    "WOL may not work!");
+	}
+	/*
+	 * No link, force MAC to have 100Mbps, full-duplex link.
+	 * This is the last resort and may/may not work.
+	 */
+	mii->mii_media_status = IFM_AVALID | IFM_ACTIVE;
+	mii->mii_media_active = IFM_ETHER | IFM_100_TX | IFM_FDX;
+}
+
+static void
+vge_setwol(struct vge_softc *sc)
+{
+	struct ifnet *ifp;
+	uint16_t pmstat;
+	uint8_t val;
+
+	VGE_LOCK_ASSERT(sc);
+
+	if ((sc->vge_flags & VGE_FLAG_PMCAP) == 0) {
+		/* No PME capability, PHY power down. */
+		vge_miibus_writereg(sc->vge_dev, sc->vge_phyaddr, MII_BMCR,
+		    BMCR_PDOWN);
+		vge_miipoll_stop(sc);
+		return;
+	}
+
+	ifp = sc->vge_ifp;
+
+	/* Clear WOL on pattern match. */
+	CSR_WRITE_1(sc, VGE_WOLCR0C, VGE_WOLCR0_PATTERN_ALL);
+	/* Disable WOL on magic/unicast packet. */
+	CSR_WRITE_1(sc, VGE_WOLCR1C, 0x0F);
+	CSR_WRITE_1(sc, VGE_WOLCFGC, VGE_WOLCFG_SAB | VGE_WOLCFG_SAM |
+	    VGE_WOLCFG_PMEOVR);
+	if ((ifp->if_capenable & IFCAP_WOL) != 0) {
+		vge_setlinkspeed(sc);
+		val = 0;
+		if ((ifp->if_capenable & IFCAP_WOL_UCAST) != 0)
+			val |= VGE_WOLCR1_UCAST;
+		if ((ifp->if_capenable & IFCAP_WOL_MAGIC) != 0)
+			val |= VGE_WOLCR1_MAGIC;
+		CSR_WRITE_1(sc, VGE_WOLCR1S, val);
+		val = 0;
+		if ((ifp->if_capenable & IFCAP_WOL_MCAST) != 0)
+			val |= VGE_WOLCFG_SAM | VGE_WOLCFG_SAB;
+		CSR_WRITE_1(sc, VGE_WOLCFGS, val | VGE_WOLCFG_PMEOVR);
+		/* Disable MII auto-polling. */
+		vge_miipoll_stop(sc);
+	}
+	CSR_SETBIT_1(sc, VGE_DIAGCTL,
+	    VGE_DIAGCTL_MACFORCE | VGE_DIAGCTL_FDXFORCE);
+	CSR_CLRBIT_1(sc, VGE_DIAGCTL, VGE_DIAGCTL_GMII);
+
+	/* Clear WOL status on pattern match. */
+	CSR_WRITE_1(sc, VGE_WOLSR0C, 0xFF);
+	CSR_WRITE_1(sc, VGE_WOLSR1C, 0xFF);
+
+	val = CSR_READ_1(sc, VGE_PWRSTAT);
+	val |= VGE_STICKHW_SWPTAG;
+	CSR_WRITE_1(sc, VGE_PWRSTAT, val);
+	/* Put hardware into sleep. */
+	val = CSR_READ_1(sc, VGE_PWRSTAT);
+	val |= VGE_STICKHW_DS0 | VGE_STICKHW_DS1;
+	CSR_WRITE_1(sc, VGE_PWRSTAT, val);
+	/* Request PME if WOL is requested. */
+	pmstat = pci_read_config(sc->vge_dev, sc->vge_pmcap +
+	    PCIR_POWER_STATUS, 2);
+	pmstat &= ~(PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE);
+	if ((ifp->if_capenable & IFCAP_WOL) != 0)
+		pmstat |= PCIM_PSTAT_PME | PCIM_PSTAT_PMEENABLE;
+	pci_write_config(sc->vge_dev, sc->vge_pmcap + PCIR_POWER_STATUS,
+	    pmstat, 2);
+}
+
+static void
+vge_clrwol(struct vge_softc *sc)
+{
+	uint8_t val;
+
+	val = CSR_READ_1(sc, VGE_PWRSTAT);
+	val &= ~VGE_STICKHW_SWPTAG;
+	CSR_WRITE_1(sc, VGE_PWRSTAT, val);
+	/* Disable WOL and clear power state indicator. */
+	val = CSR_READ_1(sc, VGE_PWRSTAT);
+	val &= ~(VGE_STICKHW_DS0 | VGE_STICKHW_DS1);
+	CSR_WRITE_1(sc, VGE_PWRSTAT, val);
+
+	CSR_CLRBIT_1(sc, VGE_DIAGCTL, VGE_DIAGCTL_GMII);
+	CSR_CLRBIT_1(sc, VGE_DIAGCTL, VGE_DIAGCTL_MACFORCE);
+
+	/* Clear WOL on pattern match. */
+	CSR_WRITE_1(sc, VGE_WOLCR0C, VGE_WOLCR0_PATTERN_ALL);
+	/* Disable WOL on magic/unicast packet. */
+	CSR_WRITE_1(sc, VGE_WOLCR1C, 0x0F);
+	CSR_WRITE_1(sc, VGE_WOLCFGC, VGE_WOLCFG_SAB | VGE_WOLCFG_SAM |
+	    VGE_WOLCFG_PMEOVR);
+	/* Clear WOL status on pattern match. */
+	CSR_WRITE_1(sc, VGE_WOLSR0C, 0xFF);
+	CSR_WRITE_1(sc, VGE_WOLSR1C, 0xFF);
 }
diff --git a/sys/dev/vge/if_vgereg.h b/sys/dev/vge/if_vgereg.h
index 8d11a9c3e1f..77cd61eb6ba 100644
--- a/sys/dev/vge/if_vgereg.h
+++ b/sys/dev/vge/if_vgereg.h
@@ -89,8 +89,8 @@
 #define VGE_RXQCSRC		0x36	/* RX queue ctl/status clear */
 #define VGE_RXDESC_ADDR_LO	0x38	/* RX desc base addr (lo 32 bits) */
 #define VGE_RXDESC_CONSIDX	0x3C	/* Current RX descriptor index */
-#define VGE_RXQTIMER		0x3E	/* RX queue timer pend register */
-#define VGE_TXQTIMER		0x3F	/* TX queue timer pend register */
+#define VGE_TXQTIMER		0x3E	/* TX queue timer pend register */
+#define VGE_RXQTIMER		0x3F	/* RX queue timer pend register */
 #define VGE_TXDESC_ADDR_LO0	0x40	/* TX desc0 base addr (lo 32 bits) */
 #define VGE_TXDESC_ADDR_LO1	0x44	/* TX desc1 base addr (lo 32 bits) */
 #define VGE_TXDESC_ADDR_LO2	0x48	/* TX desc2 base addr (lo 32 bits) */
@@ -300,8 +300,7 @@
 #define VGE_INTRS	(VGE_ISR_TXOK0|VGE_ISR_RXOK|VGE_ISR_STOPPED|	\
 			 VGE_ISR_RXOFLOW|VGE_ISR_PHYINT|		\
 			 VGE_ISR_LINKSTS|VGE_ISR_RXNODESC|		\
-			 VGE_ISR_RXDMA_STALL|VGE_ISR_TXDMA_STALL|	\
-			 VGE_ISR_MIBOFLOW|VGE_ISR_TIMER0)
+			 VGE_ISR_RXDMA_STALL|VGE_ISR_TXDMA_STALL)
 
 /* Interrupt mask register */
 
@@ -339,19 +338,19 @@
 #define VGE_TXQCSR_RUN0		0x0001	/* Enable TX queue 0 */
 #define VGE_TXQCSR_ACT0		0x0002	/* queue 0 active indicator */
 #define VGE_TXQCSR_WAK0		0x0004	/* Wake up (poll) queue 0 */
-#define VGE_TXQCST_DEAD0	0x0008	/* queue 0 dead indicator */
+#define VGE_TXQCSR_DEAD0	0x0008	/* queue 0 dead indicator */
 #define VGE_TXQCSR_RUN1		0x0010	/* Enable TX queue 1 */
 #define VGE_TXQCSR_ACT1		0x0020	/* queue 1 active indicator */
 #define VGE_TXQCSR_WAK1		0x0040	/* Wake up (poll) queue 1 */
-#define VGE_TXQCST_DEAD1	0x0080	/* queue 1 dead indicator */
+#define VGE_TXQCSR_DEAD1	0x0080	/* queue 1 dead indicator */
 #define VGE_TXQCSR_RUN2		0x0100	/* Enable TX queue 2 */
 #define VGE_TXQCSR_ACT2		0x0200	/* queue 2 active indicator */
 #define VGE_TXQCSR_WAK2		0x0400	/* Wake up (poll) queue 2 */
-#define VGE_TXQCST_DEAD2	0x0800	/* queue 2 dead indicator */
+#define VGE_TXQCSR_DEAD2	0x0800	/* queue 2 dead indicator */
 #define VGE_TXQCSR_RUN3		0x1000	/* Enable TX queue 3 */
 #define VGE_TXQCSR_ACT3		0x2000	/* queue 3 active indicator */
 #define VGE_TXQCSR_WAK3		0x4000	/* Wake up (poll) queue 3 */
-#define VGE_TXQCST_DEAD3	0x8000	/* queue 3 dead indicator */
+#define VGE_TXQCSR_DEAD3	0x8000	/* queue 3 dead indicator */
 
 /* RX descriptor queue control/status register */
 
@@ -543,6 +542,90 @@
 #define VGE_TXBLOCK_128PKTS	0x08
 #define VGE_TXBLOCK_8PKTS	0x0C
 
+/* MIB control/status register */
+#define	VGE_MIBCSR_CLR		0x01
+#define	VGE_MIBCSR_RINI		0x02
+#define	VGE_MIBCSR_FLUSH	0x04
+#define	VGE_MIBCSR_FREEZE	0x08
+#define	VGE_MIBCSR_HI_80	0x00
+#define	VGE_MIBCSR_HI_C0	0x10
+#define	VGE_MIBCSR_BISTGO	0x40
+#define	VGE_MIBCSR_BISTOK	0x80
+
+/* MIB data index. */
+#define	VGE_MIB_RX_FRAMES		0
+#define	VGE_MIB_RX_GOOD_FRAMES		1
+#define	VGE_MIB_TX_GOOD_FRAMES		2
+#define	VGE_MIB_RX_FIFO_OVERRUNS	3
+#define	VGE_MIB_RX_RUNTS		4
+#define	VGE_MIB_RX_RUNTS_ERRS		5
+#define	VGE_MIB_RX_PKTS_64		6
+#define	VGE_MIB_TX_PKTS_64		7
+#define	VGE_MIB_RX_PKTS_65_127		8
+#define	VGE_MIB_TX_PKTS_65_127		9
+#define	VGE_MIB_RX_PKTS_128_255		10
+#define	VGE_MIB_TX_PKTS_128_255		11
+#define	VGE_MIB_RX_PKTS_256_511		12
+#define	VGE_MIB_TX_PKTS_256_511		13
+#define	VGE_MIB_RX_PKTS_512_1023	14
+#define	VGE_MIB_TX_PKTS_512_1023	15
+#define	VGE_MIB_RX_PKTS_1024_1518	16
+#define	VGE_MIB_TX_PKTS_1024_1518	17
+#define	VGE_MIB_TX_COLLS		18
+#define	VGE_MIB_RX_CRCERRS		19
+#define	VGE_MIB_RX_JUMBOS		20
+#define	VGE_MIB_TX_JUMBOS		21
+#define	VGE_MIB_RX_PAUSE		22
+#define	VGE_MIB_TX_PAUSE		23
+#define	VGE_MIB_RX_ALIGNERRS		24
+#define	VGE_MIB_RX_PKTS_1519_MAX	25
+#define	VGE_MIB_RX_PKTS_1519_MAX_ERRS	26
+#define	VGE_MIB_TX_SQEERRS		27
+#define	VGE_MIB_RX_NOBUFS		28
+#define	VGE_MIB_RX_SYMERRS		29
+#define	VGE_MIB_RX_LENERRS		30
+#define	VGE_MIB_TX_LATECOLLS		31
+
+#define	VGE_MIB_CNT		(VGE_MIB_TX_LATECOLLS - VGE_MIB_RX_FRAMES + 1)
+#define	VGE_MIB_DATA_MASK	0x00FFFFFF
+#define	VGE_MIB_DATA_IDX(x)	((x) >> 24)
+
+/* Sticky bit shadow register */
+
+#define	VGE_STICKHW_DS0		0x01
+#define	VGE_STICKHW_DS1		0x02
+#define	VGE_STICKHW_WOL_ENB	0x04
+#define	VGE_STICKHW_WOL_STS	0x08
+#define	VGE_STICKHW_SWPTAG	0x10
+
+/* WOL pattern control */
+#define	VGE_WOLCR0_PATTERN0	0x01
+#define	VGE_WOLCR0_PATTERN1	0x02
+#define	VGE_WOLCR0_PATTERN2	0x04
+#define	VGE_WOLCR0_PATTERN3	0x08
+#define	VGE_WOLCR0_PATTERN4	0x10
+#define	VGE_WOLCR0_PATTERN5	0x20
+#define	VGE_WOLCR0_PATTERN6	0x40
+#define	VGE_WOLCR0_PATTERN7	0x80
+#define	VGE_WOLCR0_PATTERN_ALL	0xFF
+
+/* WOL event control */
+#define	VGE_WOLCR1_UCAST	0x01
+#define	VGE_WOLCR1_MAGIC	0x02
+#define	VGE_WOLCR1_LINKON	0x04
+#define	VGE_WOLCR1_LINKOFF	0x08
+
+/* Poweer management config */
+#define VGE_PWRCFG_LEGACY_WOLEN	0x01
+#define VGE_PWRCFG_WOL_PULSE	0x20
+#define VGE_PWRCFG_WOL_BUTTON	0x00
+
+/* WOL config register */
+#define	VGE_WOLCFG_PHYINT_ENB	0x01
+#define	VGE_WOLCFG_SAB		0x10
+#define	VGE_WOLCFG_SAM		0x20
+#define	VGE_WOLCFG_PMEOVR	0x80
+
 /* EEPROM control/status register */
 
 #define VGE_EECSR_EDO		0x01	/* data out pin */
@@ -587,8 +670,7 @@
 
 struct vge_tx_frag {
 	uint32_t		vge_addrlo;
-	uint16_t		vge_addrhi;
-	uint16_t		vge_buflen;
+	uint32_t		vge_addrhi;
 };
 
 /*
@@ -600,7 +682,7 @@ struct vge_tx_frag {
  * to obtain this behavior, the special 'queue' bit must be set.
  */
 
-#define VGE_TXDESC_Q		0x8000
+#define VGE_TXDESC_Q		0x80000000
 
 struct vge_tx_desc {
 	uint32_t		vge_sts;
@@ -645,11 +727,10 @@ struct vge_tx_desc {
 /* Receive DMA descriptors have a single fragment pointer. */
 
 struct vge_rx_desc {
-	volatile uint32_t	vge_sts;
-	volatile uint32_t	vge_ctl;
-	volatile uint32_t	vge_addrlo;
-	volatile uint16_t	vge_addrhi;
-	volatile uint16_t	vge_buflen;
+	uint32_t	vge_sts;
+	uint32_t	vge_ctl;
+	uint32_t	vge_addrlo;
+	uint32_t	vge_addrhi;
 };
 
 /*
@@ -658,7 +739,7 @@ struct vge_rx_desc {
  * not interrupts are generated for this descriptor.
  */
 
-#define VGE_RXDESC_I		0x8000
+#define VGE_RXDESC_I		0x80000000
 
 #define VGE_RDSTS_VIDM		0x00000001	/* VLAN tag filter miss */
 #define VGE_RDSTS_CRCERR	0x00000002	/* bad CRC error */
@@ -680,8 +761,8 @@ struct vge_rx_desc {
 #define VGE_RDSTS_OWN		0x80000000	/* own bit. */
 
 #define VGE_RXPKT_ONEFRAG	0x00000000	/* only one fragment */
-#define VGE_RXPKT_EOF		0x00000100	/* first frag in frame */
-#define VGE_RXPKT_SOF		0x00000200	/* last frag in frame */
+#define VGE_RXPKT_EOF		0x00000100	/* last frag in frame */
+#define VGE_RXPKT_SOF		0x00000200	/* first frag in frame */
 #define VGE_RXPKT_MOF		0x00000300	/* intermediate frag */
 
 #define VGE_RDCTL_VLANID	0x0000FFFF	/* VLAN ID info */
diff --git a/sys/dev/vge/if_vgevar.h b/sys/dev/vge/if_vgevar.h
index aab52281b7f..ca899cc5fc0 100644
--- a/sys/dev/vge/if_vgevar.h
+++ b/sys/dev/vge/if_vgevar.h
@@ -32,34 +32,52 @@
  * $FreeBSD$
  */
 
-#if !defined(__i386__)
-#define VGE_FIXUP_RX
-#endif
-
 #define VGE_JUMBO_MTU	9000
 
-#define VGE_IFQ_MAXLEN 64
-
 #define VGE_TX_DESC_CNT		256
-#define VGE_RX_DESC_CNT		256	/* Must be a multiple of 4!! */
-#define VGE_RING_ALIGN		256
+#define VGE_RX_DESC_CNT		252	/* Must be a multiple of 4!! */
+#define VGE_TX_RING_ALIGN	64
+#define VGE_RX_RING_ALIGN	64
+#define VGE_MAXTXSEGS		6
+#define VGE_RX_BUF_ALIGN	sizeof(uint64_t)
+
+/*
+ * VIA Velocity allows 64bit DMA addressing but high 16bits
+ * of the DMA address should be the same for Tx/Rx buffers.
+ * Because this condition can't be guaranteed vge(4) limit
+ * DMA address space to 48bits.
+ */
+#if (BUS_SPACE_MAXADDR < 0xFFFFFFFFFF)
+#define	VGE_BUF_DMA_MAXADDR	BUS_SPACE_MAXADDR
+#else
+#define	VGE_BUF_DMA_MAXADDR	0xFFFFFFFFFFFF
+#endif
+
 #define VGE_RX_LIST_SZ		(VGE_RX_DESC_CNT * sizeof(struct vge_rx_desc))
 #define VGE_TX_LIST_SZ		(VGE_TX_DESC_CNT * sizeof(struct vge_tx_desc))
-#define VGE_TX_DESC_INC(x)	(x = (x + 1) % VGE_TX_DESC_CNT)
-#define VGE_RX_DESC_INC(x)	(x = (x + 1) % VGE_RX_DESC_CNT)
-#define VGE_ADDR_LO(y)		((u_int64_t) (y) & 0xFFFFFFFF)
-#define VGE_ADDR_HI(y)		((u_int64_t) (y) >> 32)
-#define VGE_BUFLEN(y)		((y) & 0x7FFF)
-#define VGE_OWN(x)		(le32toh((x)->vge_sts) & VGE_RDSTS_OWN)
-#define VGE_RXBYTES(x)		((le32toh((x)->vge_sts) & \
-				 VGE_RDSTS_BUFSIZ) >> 16)
+#define VGE_TX_DESC_INC(x)	((x) = ((x) + 1) % VGE_TX_DESC_CNT)
+#define VGE_TX_DESC_DEC(x)	\
+	((x) = (((x) + VGE_TX_DESC_CNT - 1) % VGE_TX_DESC_CNT))
+#define VGE_RX_DESC_INC(x)	((x) = ((x) + 1) % VGE_RX_DESC_CNT)
+#define VGE_ADDR_LO(y)		((uint64_t) (y) & 0xFFFFFFFF)
+#define VGE_ADDR_HI(y)		((uint64_t) (y) >> 32)
+#define VGE_BUFLEN(y)		((y) & 0x3FFF)
+#define VGE_RXBYTES(x)		(((x) & VGE_RDSTS_BUFSIZ) >> 16)
 #define VGE_MIN_FRAMELEN	60
 
-#ifdef VGE_FIXUP_RX
-#define VGE_ETHER_ALIGN		sizeof(uint32_t)
-#else
-#define VGE_ETHER_ALIGN		0
-#endif
+#define	VGE_INT_HOLDOFF_TICK	20
+#define	VGE_INT_HOLDOFF_USEC(x)	((x) / VGE_INT_HOLDOFF_TICK)
+#define	VGE_INT_HOLDOFF_MIN	0
+#define	VGE_INT_HOLDOFF_MAX	(255 * VGE_INT_HOLDOFF_TICK)
+#define	VGE_INT_HOLDOFF_DEFAULT	150
+
+#define	VGE_RX_COAL_PKT_MIN	1
+#define	VGE_RX_COAL_PKT_MAX	VGE_RX_DESC_CNT
+#define	VGE_RX_COAL_PKT_DEFAULT	64
+
+#define	VGE_TX_COAL_PKT_MIN	1
+#define	VGE_TX_COAL_PKT_MAX	VGE_TX_DESC_CNT
+#define	VGE_TX_COAL_PKT_DEFAULT	128
 
 struct vge_type {
 	uint16_t		vge_vid;
@@ -67,63 +85,124 @@ struct vge_type {
 	char			*vge_name;
 };
 
-struct vge_softc;
-
-struct vge_dmaload_arg {
-	struct vge_softc	*sc;
-	int			vge_idx;
-	int			vge_maxsegs;
-	struct mbuf		*vge_m0;
-	u_int32_t		vge_flags;
+struct vge_txdesc {
+	struct mbuf		*tx_m;
+	bus_dmamap_t		tx_dmamap;
+	struct vge_tx_desc	*tx_desc;
+	struct vge_txdesc	*txd_prev;
 };
 
-struct vge_list_data {
-	struct mbuf		*vge_tx_mbuf[VGE_TX_DESC_CNT];
-	struct mbuf		*vge_rx_mbuf[VGE_RX_DESC_CNT];
+struct vge_rxdesc {
+	struct mbuf 		*rx_m;
+	bus_dmamap_t		rx_dmamap;
+	struct vge_rx_desc	*rx_desc;
+	struct vge_rxdesc	*rxd_prev;
+};
+
+struct vge_chain_data{
+	bus_dma_tag_t		vge_ring_tag;
+	bus_dma_tag_t		vge_buffer_tag;
+	bus_dma_tag_t		vge_tx_tag;
+	struct vge_txdesc	vge_txdesc[VGE_TX_DESC_CNT];
+	bus_dma_tag_t		vge_rx_tag;
+	struct vge_rxdesc	vge_rxdesc[VGE_RX_DESC_CNT];
+	bus_dma_tag_t		vge_tx_ring_tag;
+	bus_dmamap_t		vge_tx_ring_map;
+	bus_dma_tag_t		vge_rx_ring_tag;
+	bus_dmamap_t		vge_rx_ring_map;
+	bus_dmamap_t		vge_rx_sparemap;
+
 	int			vge_tx_prodidx;
-	int			vge_rx_prodidx;
 	int			vge_tx_considx;
-	int			vge_tx_free;
-	bus_dmamap_t		vge_tx_dmamap[VGE_TX_DESC_CNT];
-	bus_dmamap_t		vge_rx_dmamap[VGE_RX_DESC_CNT];
-	bus_dma_tag_t		vge_mtag;        /* mbuf mapping tag */
-	bus_dma_tag_t		vge_rx_list_tag;
-	bus_dmamap_t		vge_rx_list_map;
-	struct vge_rx_desc	*vge_rx_list;
-	bus_addr_t		vge_rx_list_addr;
-	bus_dma_tag_t		vge_tx_list_tag;
-	bus_dmamap_t		vge_tx_list_map;
-	struct vge_tx_desc	*vge_tx_list;
-	bus_addr_t		vge_tx_list_addr;
+	int			vge_tx_cnt;
+	int			vge_rx_prodidx;
+	int			vge_rx_commit;
+
+	struct mbuf		*vge_head;
+	struct mbuf		*vge_tail;
+};
+
+#define	VGE_CHAIN_RESET(_sc)						\
+do {									\
+	if ((_sc)->vge_cdata.vge_head != NULL) {			\
+		m_freem((_sc)->vge_cdata.vge_head);			\
+		(_sc)->vge_cdata.vge_head = NULL;			\
+		(_sc)->vge_cdata.vge_tail = NULL;			\
+	}								\
+} while (0);
+
+struct vge_ring_data {
+	struct vge_tx_desc	*vge_tx_ring;
+	bus_addr_t		vge_tx_ring_paddr;
+	struct vge_rx_desc	*vge_rx_ring;
+	bus_addr_t		vge_rx_ring_paddr;
+};
+
+struct vge_hw_stats {
+	uint32_t		rx_frames;
+	uint32_t		rx_good_frames;
+	uint32_t		rx_fifo_oflows;
+	uint32_t		rx_runts;
+	uint32_t		rx_runts_errs;
+	uint32_t		rx_pkts_64;
+	uint32_t		rx_pkts_65_127;
+	uint32_t		rx_pkts_128_255;
+	uint32_t		rx_pkts_256_511;
+	uint32_t		rx_pkts_512_1023;
+	uint32_t		rx_pkts_1024_1518;
+	uint32_t		rx_pkts_1519_max;
+	uint32_t		rx_pkts_1519_max_errs;
+	uint32_t		rx_jumbos;
+	uint32_t		rx_crcerrs;
+	uint32_t		rx_pause_frames;
+	uint32_t		rx_alignerrs;
+	uint32_t		rx_nobufs;
+	uint32_t		rx_symerrs;
+	uint32_t		rx_lenerrs;
+
+	uint32_t		tx_good_frames;
+	uint32_t		tx_pkts_64;
+	uint32_t		tx_pkts_65_127;
+	uint32_t		tx_pkts_128_255;
+	uint32_t		tx_pkts_256_511;
+	uint32_t		tx_pkts_512_1023;
+	uint32_t		tx_pkts_1024_1518;
+	uint32_t		tx_jumbos;
+	uint32_t		tx_colls;
+	uint32_t		tx_pause;
+	uint32_t		tx_sqeerrs;
+	uint32_t		tx_latecolls;
 };
 
 struct vge_softc {
 	struct ifnet		*vge_ifp;	/* interface info */
 	device_t		vge_dev;
-	bus_space_handle_t	vge_bhandle;	/* bus space handle */
-	bus_space_tag_t		vge_btag;	/* bus space tag */
 	struct resource		*vge_res;
 	struct resource		*vge_irq;
 	void			*vge_intrhand;
 	device_t		vge_miibus;
-	bus_dma_tag_t		vge_parent_tag;
-	bus_dma_tag_t		vge_tag;
-	u_int8_t		vge_type;
 	int			vge_if_flags;
-	int			vge_rx_consumed;
-	int			vge_link;
+	int			vge_phyaddr;
+	int			vge_flags;
+#define	VGE_FLAG_PCIE		0x0001
+#define	VGE_FLAG_MSI		0x0002
+#define	VGE_FLAG_PMCAP		0x0004
+#define	VGE_FLAG_JUMBO		0x0008
+#define	VGE_FLAG_SUSPENDED	0x4000
+#define	VGE_FLAG_LINK		0x8000
+	int			vge_expcap;
+	int			vge_pmcap;
 	int			vge_camidx;
-	struct task		vge_txtask;
+	int			vge_int_holdoff;
+	int			vge_rx_coal_pkt;
+	int			vge_tx_coal_pkt;
 	struct mtx		vge_mtx;
-	struct mbuf		*vge_head;
-	struct mbuf		*vge_tail;
+	struct callout		vge_watchdog;
+	int			vge_timer;
 
-	struct vge_list_data	vge_ldata;
-
-	int			suspended;	/* 0 = normal  1 = suspended */
-#ifdef DEVICE_POLLING
-	int			rxcycles;
-#endif
+	struct vge_chain_data	vge_cdata;
+	struct vge_ring_data	vge_rdata;
+	struct vge_hw_stats	vge_stats;
 };
 
 #define	VGE_LOCK(_sc)		mtx_lock(&(_sc)->vge_mtx)
@@ -134,20 +213,20 @@ struct vge_softc {
  * register space access macros
  */
 #define CSR_WRITE_STREAM_4(sc, reg, val)	\
-	bus_space_write_stream_4(sc->vge_btag, sc->vge_bhandle, reg, val)
+	bus_write_stream_4(sc->vge_res, reg, val)
 #define CSR_WRITE_4(sc, reg, val)	\
-	bus_space_write_4(sc->vge_btag, sc->vge_bhandle, reg, val)
+	bus_write_4(sc->vge_res, reg, val)
 #define CSR_WRITE_2(sc, reg, val)	\
-	bus_space_write_2(sc->vge_btag, sc->vge_bhandle, reg, val)
+	bus_write_2(sc->vge_res, reg, val)
 #define CSR_WRITE_1(sc, reg, val)	\
-	bus_space_write_1(sc->vge_btag, sc->vge_bhandle, reg, val)
+	bus_write_1(sc->vge_res, reg, val)
 
 #define CSR_READ_4(sc, reg)		\
-	bus_space_read_4(sc->vge_btag, sc->vge_bhandle, reg)
+	bus_read_4(sc->vge_res, reg)
 #define CSR_READ_2(sc, reg)		\
-	bus_space_read_2(sc->vge_btag, sc->vge_bhandle, reg)
+	bus_read_2(sc->vge_res, reg)
 #define CSR_READ_1(sc, reg)		\
-	bus_space_read_1(sc->vge_btag, sc->vge_bhandle, reg)
+	bus_read_1(sc->vge_res, reg)
 
 #define CSR_SETBIT_1(sc, reg, x)	\
 	CSR_WRITE_1(sc, reg, CSR_READ_1(sc, reg) | (x))
@@ -163,5 +242,6 @@ struct vge_softc {
 #define CSR_CLRBIT_4(sc, reg, x)	\
 	CSR_WRITE_4(sc, reg, CSR_READ_4(sc, reg) & ~(x))
 
+#define VGE_RXCHUNK		4
 #define VGE_TIMEOUT		10000
 
diff --git a/sys/dev/vx/if_vx.c b/sys/dev/vx/if_vx.c
index c810c711d09..0dea9bf9093 100644
--- a/sys/dev/vx/if_vx.c
+++ b/sys/dev/vx/if_vx.c
@@ -129,7 +129,7 @@ static void vx_init_locked(struct vx_softc *);
 static int vx_ioctl(struct ifnet *, u_long, caddr_t);
 static void vx_start(struct ifnet *);
 static void vx_start_locked(struct ifnet *);
-static void vx_watchdog(struct ifnet *);
+static void vx_watchdog(void *);
 static void vx_reset(struct vx_softc *);
 static void vx_read(struct vx_softc *);
 static struct mbuf *vx_get(struct vx_softc *, u_int);
@@ -157,6 +157,7 @@ vx_attach(device_t dev)
 	mtx_init(&sc->vx_mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
 	    MTX_DEF);
 	callout_init_mtx(&sc->vx_callout, &sc->vx_mtx, 0);
+	callout_init_mtx(&sc->vx_watchdog, &sc->vx_mtx, 0);
 	GO_WINDOW(0);
 	CSR_WRITE_2(sc, VX_COMMAND, GLOBAL_RESET);
 	VX_BUSY_WAIT;
@@ -193,7 +194,6 @@ vx_attach(device_t dev)
 	ifp->if_start = vx_start;
 	ifp->if_ioctl = vx_ioctl;
 	ifp->if_init = vx_init;
-	ifp->if_watchdog = vx_watchdog;
 	ifp->if_softc = sc;
 
 	ether_ifattach(ifp, eaddr);
@@ -269,6 +269,7 @@ vx_init_locked(struct vx_softc *sc)
 	/* Interface is now `running', with no output active. */
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
+	callout_reset(&sc->vx_watchdog, hz, vx_watchdog, sc);
 
 	/* Attempt to start output, if any. */
 	vx_start_locked(ifp);
@@ -474,7 +475,7 @@ startagain:
 		/* not enough room in FIFO - make sure */
 		if (CSR_READ_2(sc, VX_W1_FREE_TX) < len + pad + 4) {
 			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
-			ifp->if_timer = 1;
+			sc->vx_timer = 1;
 			return;
 		}
 	}
@@ -513,7 +514,7 @@ startagain:
 		CSR_WRITE_1(sc, VX_W1_TX_PIO_WR_1, 0);	/* Padding */
 
 	++ifp->if_opackets;
-	ifp->if_timer = 1;
+	sc->vx_timer = 1;
 
 readcheck:
 	if ((CSR_READ_2(sc, VX_W1_RX_STATUS) & ERR_INCOMPLETE) == 0) {
@@ -661,18 +662,18 @@ vx_intr(void *voidsc)
 		if (status & S_RX_COMPLETE)
 			vx_read(sc);
 		if (status & S_TX_AVAIL) {
-			ifp->if_timer = 0;
+			sc->vx_timer = 0;
 			sc->vx_ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 			vx_start_locked(sc->vx_ifp);
 		}
 		if (status & S_CARD_FAILURE) {
 			if_printf(ifp, "adapter failure (%x)\n", status);
-			ifp->if_timer = 0;
+			sc->vx_timer = 0;
 			vx_reset(sc);
 			break;
 		}
 		if (status & S_TX_COMPLETE) {
-			ifp->if_timer = 0;
+			sc->vx_timer = 0;
 			vx_txstat(sc);
 			vx_start_locked(ifp);
 		}
@@ -970,26 +971,32 @@ vx_reset(struct vx_softc *sc)
 }
 
 static void
-vx_watchdog(struct ifnet *ifp)
+vx_watchdog(void *arg)
 {
-	struct vx_softc *sc = ifp->if_softc;
+	struct vx_softc *sc;
+	struct ifnet *ifp;
 
-	VX_LOCK(sc);
+	sc = arg;
+	VX_LOCK_ASSERT(sc);
+	callout_reset(&sc->vx_watchdog, hz, vx_watchdog, sc);
+	if (sc->vx_timer == 0 || --sc->vx_timer > 0)
+		return;
+
+	ifp = sc->vx_ifp;
 	if (ifp->if_flags & IFF_DEBUG)
 		if_printf(ifp, "device timeout\n");
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
 	vx_start_locked(ifp);
 	vx_intr(sc);
-	VX_UNLOCK(sc);
 }
 
 void
 vx_stop(struct vx_softc *sc)
 {
-	struct ifnet *ifp = sc->vx_ifp;
 
 	VX_LOCK_ASSERT(sc);
-	ifp->if_timer = 0;
+	sc->vx_timer = 0;
+	callout_stop(&sc->vx_watchdog);
 
 	CSR_WRITE_2(sc, VX_COMMAND, RX_DISABLE);
 	CSR_WRITE_2(sc, VX_COMMAND, RX_DISCARD_TOP_PACK);
diff --git a/sys/dev/vx/if_vxvar.h b/sys/dev/vx/if_vxvar.h
index ec20a3fbcfe..8c312e2cbe9 100644
--- a/sys/dev/vx/if_vxvar.h
+++ b/sys/dev/vx/if_vxvar.h
@@ -51,8 +51,10 @@ struct vx_softc {
 	int vx_tx_succ_ok;		/* # packets sent in sequence	 */
 					/* w/o underrun			 */
 	struct callout vx_callout;	/* Callout for timeouts		 */
+	struct callout vx_watchdog;
 	struct mtx vx_mtx;
 	int vx_buffill_pending;
+	int vx_timer;
 };
 
 #define CSR_WRITE_4(sc, reg, val)	\
diff --git a/sys/dev/wb/if_wb.c b/sys/dev/wb/if_wb.c
index d9015953505..cb4f3bb817f 100644
--- a/sys/dev/wb/if_wb.c
+++ b/sys/dev/wb/if_wb.c
@@ -158,7 +158,7 @@ static int wb_ioctl(struct ifnet *, u_long, caddr_t);
 static void wb_init(void *);
 static void wb_init_locked(struct wb_softc *);
 static void wb_stop(struct wb_softc *);
-static void wb_watchdog(struct ifnet *);
+static void wb_watchdog(struct wb_softc *);
 static int wb_shutdown(device_t);
 static int wb_ifmedia_upd(struct ifnet *);
 static void wb_ifmedia_sts(struct ifnet *, struct ifmediareq *);
@@ -804,9 +804,6 @@ wb_attach(dev)
 		goto fail;
 	}
 
-	sc->wb_btag = rman_get_bustag(sc->wb_res);
-	sc->wb_bhandle = rman_get_bushandle(sc->wb_res);
-
 	/* Allocate interrupt */
 	rid = 0;
 	sc->wb_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
@@ -852,7 +849,6 @@ wb_attach(dev)
 	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
 	ifp->if_ioctl = wb_ioctl;
 	ifp->if_start = wb_start;
-	ifp->if_watchdog = wb_watchdog;
 	ifp->if_init = wb_init;
 	ifp->if_snd.ifq_maxlen = WB_TX_LIST_CNT - 1;
 
@@ -910,11 +906,11 @@ wb_detach(dev)
 	 * This should only be done if attach succeeded.
 	 */
 	if (device_is_attached(dev)) {
+		ether_ifdetach(ifp);
 		WB_LOCK(sc);
 		wb_stop(sc);
 		WB_UNLOCK(sc);
 		callout_drain(&sc->wb_stat_callout);
-		ether_ifdetach(ifp);
 	}
 	if (sc->wb_miibus)
 		device_delete_child(dev, sc->wb_miibus);
@@ -1160,7 +1156,7 @@ wb_txeof(sc)
 	ifp = sc->wb_ifp;
 
 	/* Clear the timeout timer. */
-	ifp->if_timer = 0;
+	sc->wb_timer = 0;
 
 	if (sc->wb_cdata.wb_tx_head == NULL)
 		return;
@@ -1215,7 +1211,7 @@ wb_txeoc(sc)
 
 	ifp = sc->wb_ifp;
 
-	ifp->if_timer = 0;
+	sc->wb_timer = 0;
 
 	if (sc->wb_cdata.wb_tx_head == NULL) {
 		ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
@@ -1223,7 +1219,7 @@ wb_txeoc(sc)
 	} else {
 		if (WB_TXOWN(sc->wb_cdata.wb_tx_head) == WB_UNSENT) {
 			WB_TXOWN(sc->wb_cdata.wb_tx_head) = WB_TXSTAT_OWN;
-			ifp->if_timer = 5;
+			sc->wb_timer = 5;
 			CSR_WRITE_4(sc, WB_TXSTART, 0xFFFFFFFF);
 		}
 	}
@@ -1332,6 +1328,8 @@ wb_tick(xsc)
 
 	mii_tick(mii);
 
+	if (sc->wb_timer > 0 && --sc->wb_timer == 0)
+		wb_watchdog(sc);
 	callout_reset(&sc->wb_stat_callout, hz, wb_tick, sc);
 
 	return;
@@ -1532,7 +1530,7 @@ wb_start_locked(ifp)
 	/*
 	 * Set a timeout in case the chip goes out to lunch.
 	 */
-	ifp->if_timer = 5;
+	sc->wb_timer = 5;
 
 	return;
 }
@@ -1751,14 +1749,13 @@ wb_ioctl(ifp, command, data)
 }
 
 static void
-wb_watchdog(ifp)
-	struct ifnet		*ifp;
-{
+wb_watchdog(sc)
 	struct wb_softc		*sc;
+{
+	struct ifnet		*ifp;
 
-	sc = ifp->if_softc;
-
-	WB_LOCK(sc);
+	WB_LOCK_ASSERT(sc);
+	ifp = sc->wb_ifp;
 	ifp->if_oerrors++;
 	if_printf(ifp, "watchdog timeout\n");
 #ifdef foo
@@ -1771,7 +1768,6 @@ wb_watchdog(ifp)
 
 	if (ifp->if_snd.ifq_head != NULL)
 		wb_start_locked(ifp);
-	WB_UNLOCK(sc);
 
 	return;
 }
@@ -1789,7 +1785,7 @@ wb_stop(sc)
 
 	WB_LOCK_ASSERT(sc);
 	ifp = sc->wb_ifp;
-	ifp->if_timer = 0;
+	sc->wb_timer = 0;
 
 	callout_stop(&sc->wb_stat_callout);
 
diff --git a/sys/dev/wb/if_wbreg.h b/sys/dev/wb/if_wbreg.h
index c5315c4efcb..95d0a8e761b 100644
--- a/sys/dev/wb/if_wbreg.h
+++ b/sys/dev/wb/if_wbreg.h
@@ -365,8 +365,6 @@ struct wb_softc {
 	struct ifnet		*wb_ifp;	/* interface info */
 	device_t		wb_dev;
 	device_t		wb_miibus;
-	bus_space_handle_t	wb_bhandle;
-	bus_space_tag_t		wb_btag;
 	struct resource		*wb_res;
 	struct resource		*wb_irq;
 	void			*wb_intrhand;
@@ -374,6 +372,7 @@ struct wb_softc {
 	u_int8_t		wb_type;
 	u_int16_t		wb_txthresh;
 	int			wb_cachesize;
+	int			wb_timer;
 	caddr_t			wb_ldata_ptr;
 	struct wb_list_data	*wb_ldata;
 	struct wb_chain_data	wb_cdata;
@@ -388,19 +387,13 @@ struct wb_softc {
 /*
  * register space access macros
  */
-#define CSR_WRITE_4(sc, reg, val)	\
-	bus_space_write_4(sc->wb_btag, sc->wb_bhandle, reg, val)
-#define CSR_WRITE_2(sc, reg, val)	\
-	bus_space_write_2(sc->wb_btag, sc->wb_bhandle, reg, val)
-#define CSR_WRITE_1(sc, reg, val)	\
-	bus_space_write_1(sc->wb_btag, sc->wb_bhandle, reg, val)
+#define CSR_WRITE_4(sc, reg, val)	bus_write_4(sc->wb_res, reg, val)
+#define CSR_WRITE_2(sc, reg, val)	bus_write_2(sc->wb_res, reg, val)
+#define CSR_WRITE_1(sc, reg, val)	bus_write_1(sc->wb_res, reg, val)
 
-#define CSR_READ_4(sc, reg)	\
-	bus_space_read_4(sc->wb_btag, sc->wb_bhandle, reg)
-#define CSR_READ_2(sc, reg)	\
-	bus_space_read_2(sc->wb_btag, sc->wb_bhandle, reg)
-#define CSR_READ_1(sc, reg)	\
-	bus_space_read_1(sc->wb_btag, sc->wb_bhandle, reg)
+#define CSR_READ_4(sc, reg)		bus_read_4(sc->wb_res, reg)
+#define CSR_READ_2(sc, reg)		bus_read_2(sc->wb_res, reg)
+#define CSR_READ_1(sc, reg)		bus_read_1(sc->wb_res, reg)
 
 #define WB_TIMEOUT		1000
 
diff --git a/sys/dev/wl/if_wl.c b/sys/dev/wl/if_wl.c
index e773fd3438f..ed291ed8dbd 100644
--- a/sys/dev/wl/if_wl.c
+++ b/sys/dev/wl/if_wl.c
@@ -559,10 +559,8 @@ wlattach(device_t device)
     ifp->if_init = wlinit;
     ifp->if_start = wlstart;
     ifp->if_ioctl = wlioctl;
-    ifp->if_timer = 0;   /* paranoia */
     ifp->if_snd.ifq_maxlen = IFQ_MAXLEN;
     /* no entries
-       ifp->if_watchdog
        ifp->if_done
        ifp->if_reset
        */
diff --git a/sys/dev/wpi/if_wpi.c b/sys/dev/wpi/if_wpi.c
index 85812375218..1797c2d7271 100644
--- a/sys/dev/wpi/if_wpi.c
+++ b/sys/dev/wpi/if_wpi.c
@@ -713,13 +713,14 @@ wpi_detach(device_t dev)
 {
 	struct wpi_softc *sc = device_get_softc(dev);
 	struct ifnet *ifp = sc->sc_ifp;
-	struct ieee80211com *ic = ifp->if_l2com;
+	struct ieee80211com *ic;
 	int ac;
 
-	ieee80211_draintask(ic, &sc->sc_restarttask);
-	ieee80211_draintask(ic, &sc->sc_radiotask);
-
 	if (ifp != NULL) {
+		ic = ifp->if_l2com;
+
+		ieee80211_draintask(ic, &sc->sc_restarttask);
+		ieee80211_draintask(ic, &sc->sc_radiotask);
 		wpi_stop(sc);
 		callout_drain(&sc->watchdog_to);
 		callout_drain(&sc->calib_to);
diff --git a/sys/dev/xen/blkfront/blkfront.c b/sys/dev/xen/blkfront/blkfront.c
index 8487e8e35f4..6c222ea6ecf 100644
--- a/sys/dev/xen/blkfront/blkfront.c
+++ b/sys/dev/xen/blkfront/blkfront.c
@@ -1,24 +1,30 @@
-/*-
- * All rights reserved.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
- *
- */
-
 /*
  * XenBSD block device driver
  *
+ * Copyright (c) 2009 Scott Long, Yahoo!
  * Copyright (c) 2009 Frank Suchomel, Citrix
+ * Copyright (c) 2009 Doug F. Rabson, Citrix
+ * Copyright (c) 2005 Kip Macy
+ * Copyright (c) 2003-2004, Keir Fraser & Steve Hand
+ * Modifications by Mark A. Williamson are (c) Intel Research Cambridge
+ *
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
  */
 
 #include 
@@ -41,6 +47,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -58,27 +65,21 @@ __FBSDID("$FreeBSD$");
 
 #include "xenbus_if.h"
 
-#define    ASSERT(S)       KASSERT(S, (#S))
 /* prototypes */
-struct xb_softc;
+static void xb_free_command(struct xb_command *cm);
 static void xb_startio(struct xb_softc *sc);
-static void connect(device_t, struct blkfront_info *);
+static void connect(struct xb_softc *);
 static void blkfront_closing(device_t);
 static int blkfront_detach(device_t);
-static int talk_to_backend(device_t, struct blkfront_info *);
-static int setup_blkring(device_t, struct blkfront_info *);
+static int talk_to_backend(struct xb_softc *);
+static int setup_blkring(struct xb_softc *);
 static void blkif_int(void *);
-#if 0
-static void blkif_restart_queue(void *arg);
-#endif
-static void blkif_recover(struct blkfront_info *);
-static void blkif_completion(struct blk_shadow *);
-static void blkif_free(struct blkfront_info *, int);
+static void blkif_recover(struct xb_softc *);
+static void blkif_completion(struct xb_command *);
+static void blkif_free(struct xb_softc *, int);
+static void blkif_queue_cb(void *, bus_dma_segment_t *, int, int);
 
 #define GRANT_INVALID_REF 0
-#define BLK_RING_SIZE __RING_SIZE((blkif_sring_t *)0, PAGE_SIZE)
-
-LIST_HEAD(xb_softc_list_head, xb_softc) xbsl_head;
 
 /* Control whether runtime update of vbds is enabled. */
 #define ENABLE_VBD_UPDATE 0
@@ -87,7 +88,6 @@ LIST_HEAD(xb_softc_list_head, xb_softc) xbsl_head;
 static void vbd_update(void);
 #endif
 
-
 #define BLKIF_STATE_DISCONNECTED 0
 #define BLKIF_STATE_CONNECTED    1
 #define BLKIF_STATE_SUSPENDED    2
@@ -106,44 +106,34 @@ static char * blkif_status_name[] = {
 	[BLKIF_INTERFACE_STATUS_CHANGED]      = "changed",
 };
 #endif
-#define WPRINTK(fmt, args...) printf("[XEN] " fmt, ##args)
+
 #if 0
 #define DPRINTK(fmt, args...) printf("[XEN] %s:%d: " fmt ".\n", __func__, __LINE__, ##args)
 #else
 #define DPRINTK(fmt, args...) 
 #endif
 
-static grant_ref_t gref_head;
 #define MAXIMUM_OUTSTANDING_BLOCK_REQS \
     (BLKIF_MAX_SEGMENTS_PER_REQUEST * BLK_RING_SIZE)
 
-static void kick_pending_request_queues(struct blkfront_info *);
+#define BLKIF_MAXIO	(32 * 1024)
+
 static int blkif_open(struct disk *dp);
 static int blkif_close(struct disk *dp);
 static int blkif_ioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td);
-static int blkif_queue_request(struct bio *bp);
+static int blkif_queue_request(struct xb_softc *sc, struct xb_command *cm);
 static void xb_strategy(struct bio *bp);
 
 // In order to quiesce the device during kernel dumps, outstanding requests to
 // DOM0 for disk reads/writes need to be accounted for.
-static	int	blkif_queued_requests;
 static	int	xb_dump(void *, void *, vm_offset_t, off_t, size_t);
 
-
 /* XXX move to xb_vbd.c when VBD update support is added */
 #define MAX_VBDS 64
 
 #define XBD_SECTOR_SIZE		512	/* XXX: assume for now */
 #define XBD_SECTOR_SHFT		9
 
-static struct mtx blkif_io_lock;
-
-static vm_paddr_t
-pfn_to_mfn(vm_paddr_t pfn)
-{
-	return (phystomach(pfn << PAGE_SHIFT) >> PAGE_SHIFT);
-}
-
 /*
  * Translate Linux major/minor to an appropriate name and unit
  * number. For HVM guests, this allows us to use the same drive names
@@ -212,23 +202,18 @@ blkfront_vdevice_to_unit(int vdevice, int *unit, const char **name)
 }
 
 int
-xlvbd_add(device_t dev, blkif_sector_t capacity,
-    int vdevice, uint16_t vdisk_info, uint16_t sector_size, 
-    struct blkfront_info *info)
+xlvbd_add(struct xb_softc *sc, blkif_sector_t capacity,
+    int vdevice, uint16_t vdisk_info, uint16_t sector_size)
 {
-	struct xb_softc	*sc;
 	int	unit, error = 0;
 	const char *name;
 
 	blkfront_vdevice_to_unit(vdevice, &unit, &name);
 
-	sc = (struct xb_softc *)malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
 	sc->xb_unit = unit;
-	sc->xb_info = info;
-	info->sc = sc;
 
 	if (strcmp(name, "xbd"))
-		device_printf(dev, "attaching as %s%d\n", name, unit);
+		device_printf(sc->xb_dev, "attaching as %s%d\n", name, unit);
 
 	memset(&sc->xb_disk, 0, sizeof(sc->xb_disk)); 
 	sc->xb_disk = disk_alloc();
@@ -242,31 +227,18 @@ xlvbd_add(device_t dev, blkif_sector_t capacity,
 	sc->xb_disk->d_drv1 = sc;
 	sc->xb_disk->d_sectorsize = sector_size;
 
-	/* XXX */
 	sc->xb_disk->d_mediasize = capacity << XBD_SECTOR_SHFT;
-#if 0
-	sc->xb_disk->d_maxsize = DFLTPHYS;
-#else /* XXX: xen can't handle large single i/o requests */
-	sc->xb_disk->d_maxsize = 4096;
-#endif
-#ifdef notyet
-	XENPRINTF("attaching device 0x%x unit %d capacity %llu\n",
-		  xb_diskinfo[sc->xb_unit].device, sc->xb_unit,
-		  sc->xb_disk->d_mediasize);
-#endif
+	sc->xb_disk->d_maxsize = BLKIF_MAXIO;
 	sc->xb_disk->d_flags = 0;
 	disk_create(sc->xb_disk, DISK_VERSION_00);
-	bioq_init(&sc->xb_bioq);
 
 	return error;
 }
 
 void
-xlvbd_del(struct blkfront_info *info)
+xlvbd_del(struct xb_softc *sc)
 {
-	struct xb_softc	*sc;
 
-	sc = info->sc;
 	disk_destroy(sc->xb_disk);
 }
 /************************ end VBD support *****************/
@@ -284,102 +256,147 @@ xb_strategy(struct bio *bp)
 	if (sc == NULL) {
 		bp->bio_error = EINVAL;
 		bp->bio_flags |= BIO_ERROR;
-		goto bad;
+		bp->bio_resid = bp->bio_bcount;
+		biodone(bp);
+		return;
 	}
 
-	DPRINTK("");
-
 	/*
 	 * Place it in the queue of disk activities for this disk
 	 */
-	mtx_lock(&blkif_io_lock);
+	mtx_lock(&sc->xb_io_lock);
 
-	bioq_disksort(&sc->xb_bioq, bp);
+	xb_enqueue_bio(sc, bp);
 	xb_startio(sc);
 
-	mtx_unlock(&blkif_io_lock);
-	return;
-
- bad:
-	/*
-	 * Correctly set the bio to indicate a failed tranfer.
-	 */
-	bp->bio_resid = bp->bio_bcount;
-	biodone(bp);
+	mtx_unlock(&sc->xb_io_lock);
 	return;
 }
 
-static void xb_quiesce(struct blkfront_info *info);
+static void
+xb_bio_complete(struct xb_softc *sc, struct xb_command *cm)
+{
+	struct bio *bp;
+
+	bp = cm->bp;
+
+	if ( unlikely(cm->status != BLKIF_RSP_OKAY) ) {
+		disk_err(bp, "disk error" , -1, 0);
+		printf(" status: %x\n", cm->status);
+		bp->bio_flags |= BIO_ERROR;
+	}
+
+	if (bp->bio_flags & BIO_ERROR)
+		bp->bio_error = EIO;
+	else
+		bp->bio_resid = 0;
+
+	xb_free_command(cm);
+	biodone(bp);
+}
+
 // Quiesce the disk writes for a dump file before allowing the next buffer.
 static void
-xb_quiesce(struct blkfront_info *info)
+xb_quiesce(struct xb_softc *sc)
 {
 	int		mtd;
 
 	// While there are outstanding requests
-	while (blkif_queued_requests) {
-		RING_FINAL_CHECK_FOR_RESPONSES(&info->ring, mtd);
+	while (!TAILQ_EMPTY(&sc->cm_busy)) {
+		RING_FINAL_CHECK_FOR_RESPONSES(&sc->ring, mtd);
 		if (mtd) {
-			// Recieved request completions, update queue.
-			blkif_int(info);
+			/* Recieved request completions, update queue. */
+			blkif_int(sc);
 		}
-		if (blkif_queued_requests) {
-			// Still pending requests, wait for the disk i/o to complete
-			HYPERVISOR_block();
+		if (!TAILQ_EMPTY(&sc->cm_busy)) {
+			/*
+			 * Still pending requests, wait for the disk i/o
+			 * to complete.
+			 */
+			HYPERVISOR_yield();
 		}
 	}
 }
 
-// Some bio structures for dumping core
-#define DUMP_BIO_NO 16				// 16 * 4KB = 64KB dump block
-static	struct bio		xb_dump_bp[DUMP_BIO_NO];
+/* Kernel dump function for a paravirtualized disk device */
+static void
+xb_dump_complete(struct xb_command *cm)
+{
+
+	xb_enqueue_complete(cm);
+}
 
-// Kernel dump function for a paravirtualized disk device
 static int
 xb_dump(void *arg, void *virtual, vm_offset_t physical, off_t offset,
         size_t length)
 {
-			int				 sbp;
-  			int			     mbp;
-			size_t			 chunk;
-	struct	disk   			*dp = arg;
-	struct	xb_softc		*sc = (struct xb_softc *) dp->d_drv1;
-	        int	    		 rc = 0;
+	struct	disk   	*dp = arg;
+	struct xb_softc	*sc = (struct xb_softc *) dp->d_drv1;
+	struct xb_command *cm;
+	size_t		chunk;
+	int		sbp;
+	int		rc = 0;
 
-	xb_quiesce(sc->xb_info);		// All quiet on the western front.
-	if (length > 0) {
-		// If this lock is held, then this module is failing, and a successful
-		// kernel dump is highly unlikely anyway.
-		mtx_lock(&blkif_io_lock);
-		// Split the 64KB block into 16 4KB blocks
-		for (sbp=0; length>0 && sbp PAGE_SIZE ? PAGE_SIZE : length;
-			xb_dump_bp[sbp].bio_disk   = dp;
-			xb_dump_bp[sbp].bio_pblkno = offset / dp->d_sectorsize;
-			xb_dump_bp[sbp].bio_bcount = chunk;
-			xb_dump_bp[sbp].bio_resid  = chunk;
-			xb_dump_bp[sbp].bio_data   = virtual;
-			xb_dump_bp[sbp].bio_cmd    = BIO_WRITE;
-			xb_dump_bp[sbp].bio_done   = NULL;
+	if (length <= 0)
+		return (rc);
 
-			bioq_disksort(&sc->xb_bioq, &xb_dump_bp[sbp]);
+	xb_quiesce(sc);	/* All quiet on the western front. */
 
-			length -= chunk;
-			offset += chunk;
-			virtual = (char *) virtual + chunk;
+	/*
+	 * If this lock is held, then this module is failing, and a
+	 * successful kernel dump is highly unlikely anyway.
+	 */
+	mtx_lock(&sc->xb_io_lock);
+
+	/* Split the 64KB block as needed */
+	for (sbp=0; length > 0; sbp++) {
+		cm = xb_dequeue_free(sc);
+		if (cm == NULL) {
+			mtx_unlock(&sc->xb_io_lock);
+			device_printf(sc->xb_dev, "dump: no more commands?\n");
+			return (EBUSY);
 		}
-		// Tell DOM0 to do the I/O
-		xb_startio(sc);
-		mtx_unlock(&blkif_io_lock);
 
-		// Must wait for the completion: the dump routine reuses the same
-		//                               16 x 4KB buffer space.
-		xb_quiesce(sc->xb_info);	// All quite on the eastern front
-		// If there were any errors, bail out...
-		for (mbp=0; mbpgref_head) < 0) {
+			xb_free_command(cm);
+			mtx_unlock(&sc->xb_io_lock);
+			device_printf(sc->xb_dev, "no more grant allocs?\n");
+			return (EBUSY);
 		}
+
+		chunk = length > BLKIF_MAXIO ? BLKIF_MAXIO : length;
+		cm->data = virtual;
+		cm->datalen = chunk;
+		cm->operation = BLKIF_OP_WRITE;
+		cm->sector_number = offset / dp->d_sectorsize;
+		cm->cm_complete = xb_dump_complete;
+
+		xb_enqueue_ready(cm);
+
+		length -= chunk;
+		offset += chunk;
+		virtual = (char *) virtual + chunk;
 	}
+
+	/* Tell DOM0 to do the I/O */
+	xb_startio(sc);
+	mtx_unlock(&sc->xb_io_lock);
+
+	/* Poll for the completion. */
+	xb_quiesce(sc);	/* All quite on the eastern front */
+
+	/* If there were any errors, bail out... */
+	while ((cm = xb_dequeue_complete(sc)) != NULL) {
+		if (cm->status != BLKIF_RSP_OKAY) {
+			device_printf(sc->xb_dev,
+			    "Dump I/O failed at sector %jd\n",
+			    cm->sector_number);
+			rc = EIO;
+		}
+		xb_free_command(cm);
+	}
+
 	return (rc);
 }
 
@@ -405,9 +422,10 @@ blkfront_probe(device_t dev)
 static int
 blkfront_attach(device_t dev)
 {
-	int error, vdevice, i, unit;
-	struct blkfront_info *info;
+	struct xb_softc *sc;
+	struct xb_command *cm;
 	const char *name;
+	int error, vdevice, i, unit;
 
 	/* FIXME: Use dynamic device id if this is not set. */
 	error = xenbus_scanf(XBT_NIL, xenbus_get_node(dev),
@@ -422,29 +440,56 @@ blkfront_attach(device_t dev)
 	if (!strcmp(name, "xbd"))
 		device_set_unit(dev, unit);
 
-	info = device_get_softc(dev);
-	
-	/*
-	 * XXX debug only
-	 */
-	for (i = 0; i < sizeof(*info); i++)
-			if (((uint8_t *)info)[i] != 0)
-					panic("non-null memory");
+	sc = device_get_softc(dev);
+	mtx_init(&sc->xb_io_lock, "blkfront i/o lock", NULL, MTX_DEF);
+	xb_initq_free(sc);
+	xb_initq_busy(sc);
+	xb_initq_ready(sc);
+	xb_initq_complete(sc);
+	xb_initq_bio(sc);
 
-	info->shadow_free = 0;
-	info->xbdev = dev;
-	info->vdevice = vdevice;
-	info->connected = BLKIF_STATE_DISCONNECTED;
+	/* Allocate parent DMA tag */
+	if (bus_dma_tag_create(	NULL,			/* parent */
+				512, 4096,		/* algnmnt, boundary */
+				BUS_SPACE_MAXADDR,	/* lowaddr */
+				BUS_SPACE_MAXADDR,	/* highaddr */
+				NULL, NULL,		/* filter, filterarg */
+				BLKIF_MAXIO,		/* maxsize */
+				BLKIF_MAX_SEGMENTS_PER_REQUEST,	/* nsegments */
+				PAGE_SIZE,		/* maxsegsize */
+				BUS_DMA_ALLOCNOW,	/* flags */
+				busdma_lock_mutex,	/* lockfunc */
+				&sc->xb_io_lock,	/* lockarg */
+				&sc->xb_io_dmat)) {
+		device_printf(dev, "Cannot allocate parent DMA tag\n");
+		return (ENOMEM);
+	}
+#ifdef notyet
+	if (bus_dma_tag_set(sc->xb_io_dmat, BUS_DMA_SET_MINSEGSZ,
+		XBD_SECTOR_SIZE)) {
+		device_printf(dev, "Cannot set sector size\n");
+		return (EINVAL);
+	}
+#endif		
+
+	sc->xb_dev = dev;
+	sc->vdevice = vdevice;
+	sc->connected = BLKIF_STATE_DISCONNECTED;
 
 	/* work queue needed ? */
-	for (i = 0; i < BLK_RING_SIZE; i++)
-		info->shadow[i].req.id = i+1;
-	info->shadow[BLK_RING_SIZE-1].req.id = 0x0fffffff;
+	for (i = 0; i < BLK_RING_SIZE; i++) {
+		cm = &sc->shadow[i];
+		cm->req.id = i;
+		cm->cm_sc = sc;
+		if (bus_dmamap_create(sc->xb_io_dmat, 0, &cm->map) != 0)
+			break;
+		xb_free_command(cm);
+	}
 
 	/* Front end dir is a number, which is used as the id. */
-	info->handle = strtoul(strrchr(xenbus_get_node(dev),'/')+1, NULL, 0);
+	sc->handle = strtoul(strrchr(xenbus_get_node(dev),'/')+1, NULL, 0);
 
-	error = talk_to_backend(dev, info);
+	error = talk_to_backend(sc);
 	if (error)
 		return (error);
 
@@ -454,12 +499,12 @@ blkfront_attach(device_t dev)
 static int
 blkfront_suspend(device_t dev)
 {
-	struct blkfront_info *info = device_get_softc(dev);
+	struct xb_softc *sc = device_get_softc(dev);
 
 	/* Prevent new requests being issued until we fix things up. */
-	mtx_lock(&blkif_io_lock);
-	info->connected = BLKIF_STATE_SUSPENDED;
-	mtx_unlock(&blkif_io_lock);
+	mtx_lock(&sc->xb_io_lock);
+	sc->connected = BLKIF_STATE_SUSPENDED;
+	mtx_unlock(&sc->xb_io_lock);
 
 	return (0);
 }
@@ -467,29 +512,31 @@ blkfront_suspend(device_t dev)
 static int
 blkfront_resume(device_t dev)
 {
-	struct blkfront_info *info = device_get_softc(dev);
+	struct xb_softc *sc = device_get_softc(dev);
 	int err;
 
 	DPRINTK("blkfront_resume: %s\n", xenbus_get_node(dev));
 
-	blkif_free(info, 1);
-	err = talk_to_backend(dev, info);
-	if (info->connected == BLKIF_STATE_SUSPENDED && !err)
-		blkif_recover(info);
+	blkif_free(sc, 1);
+	err = talk_to_backend(sc);
+	if (sc->connected == BLKIF_STATE_SUSPENDED && !err)
+		blkif_recover(sc);
 
 	return (err);
 }
 
 /* Common code used when first setting up, and when resuming. */
 static int
-talk_to_backend(device_t dev, struct blkfront_info *info)
+talk_to_backend(struct xb_softc *sc)
 {
-	const char *message = NULL;
+	device_t dev;
 	struct xenbus_transaction xbt;
+	const char *message = NULL;
 	int err;
 
 	/* Create shared ring, alloc event channel. */
-	err = setup_blkring(dev, info);
+	dev = sc->xb_dev;
+	err = setup_blkring(sc);
 	if (err)
 		goto out;
 
@@ -501,13 +548,13 @@ talk_to_backend(device_t dev, struct blkfront_info *info)
 	}
 
 	err = xenbus_printf(xbt, xenbus_get_node(dev),
-			    "ring-ref","%u", info->ring_ref);
+			    "ring-ref","%u", sc->ring_ref);
 	if (err) {
 		message = "writing ring-ref";
 		goto abort_transaction;
 	}
 	err = xenbus_printf(xbt, xenbus_get_node(dev),
-		"event-channel", "%u", irq_to_evtchn_port(info->irq));
+		"event-channel", "%u", irq_to_evtchn_port(sc->irq));
 	if (err) {
 		message = "writing event-channel";
 		goto abort_transaction;
@@ -535,47 +582,47 @@ talk_to_backend(device_t dev, struct blkfront_info *info)
 	if (message)
 		xenbus_dev_fatal(dev, err, "%s", message);
  destroy_blkring:
-	blkif_free(info, 0);
+	blkif_free(sc, 0);
  out:
 	return err;
 }
 
 static int 
-setup_blkring(device_t dev, struct blkfront_info *info)
+setup_blkring(struct xb_softc *sc)
 {
 	blkif_sring_t *sring;
 	int error;
 
-	info->ring_ref = GRANT_INVALID_REF;
+	sc->ring_ref = GRANT_INVALID_REF;
 
 	sring = (blkif_sring_t *)malloc(PAGE_SIZE, M_DEVBUF, M_NOWAIT|M_ZERO);
 	if (sring == NULL) {
-		xenbus_dev_fatal(dev, ENOMEM, "allocating shared ring");
+		xenbus_dev_fatal(sc->xb_dev, ENOMEM, "allocating shared ring");
 		return ENOMEM;
 	}
 	SHARED_RING_INIT(sring);
-	FRONT_RING_INIT(&info->ring, sring, PAGE_SIZE);
+	FRONT_RING_INIT(&sc->ring, sring, PAGE_SIZE);
 
-	error = xenbus_grant_ring(dev,
-	    (vtomach(info->ring.sring) >> PAGE_SHIFT), &info->ring_ref);
+	error = xenbus_grant_ring(sc->xb_dev,
+	    (vtomach(sc->ring.sring) >> PAGE_SHIFT), &sc->ring_ref);
 	if (error) {
 		free(sring, M_DEVBUF);
-		info->ring.sring = NULL;
+		sc->ring.sring = NULL;
 		goto fail;
 	}
 	
-	error = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(dev),
-	    "xbd", (driver_intr_t *)blkif_int, info,
-	    INTR_TYPE_BIO | INTR_MPSAFE, &info->irq);
+	error = bind_listening_port_to_irqhandler(xenbus_get_otherend_id(sc->xb_dev),
+	    "xbd", (driver_intr_t *)blkif_int, sc,
+	    INTR_TYPE_BIO | INTR_MPSAFE, &sc->irq);
 	if (error) {
-		xenbus_dev_fatal(dev, error,
+		xenbus_dev_fatal(sc->xb_dev, error,
 		    "bind_evtchn_to_irqhandler failed");
 		goto fail;
 	}
 
 	return (0);
  fail:
-	blkif_free(info, 0);
+	blkif_free(sc, 0);
 	return (error);
 }
 
@@ -586,7 +633,7 @@ setup_blkring(device_t dev, struct blkfront_info *info)
 static int
 blkfront_backend_changed(device_t dev, XenbusState backend_state)
 {
-	struct blkfront_info *info = device_get_softc(dev);
+	struct xb_softc *sc = device_get_softc(dev);
 
 	DPRINTK("backend_state=%d\n", backend_state);
 
@@ -601,22 +648,22 @@ blkfront_backend_changed(device_t dev, XenbusState backend_state)
 		break;
 
 	case XenbusStateConnected:
-		connect(dev, info);
+		connect(sc);
 		break;
 
 	case XenbusStateClosing:
-		if (info->users > 0)
+		if (sc->users > 0)
 			xenbus_dev_error(dev, -EBUSY,
 					 "Device in use; refusing to close");
 		else
 			blkfront_closing(dev);
 #ifdef notyet
-		bd = bdget(info->dev);
+		bd = bdget(sc->dev);
 		if (bd == NULL)
 			xenbus_dev_fatal(dev, -ENODEV, "bdget failed");
 
 		down(&bd->bd_sem);
-		if (info->users > 0)
+		if (sc->users > 0)
 			xenbus_dev_error(dev, -EBUSY,
 					 "Device in use; refusing to close");
 		else
@@ -634,14 +681,15 @@ blkfront_backend_changed(device_t dev, XenbusState backend_state)
 ** the details about the physical device - #sectors, size, etc). 
 */
 static void 
-connect(device_t dev, struct blkfront_info *info)
+connect(struct xb_softc *sc)
 {
+	device_t dev = sc->xb_dev;
 	unsigned long sectors, sector_size;
 	unsigned int binfo;
-	int err;
+	int err, feature_barrier;
 
-        if( (info->connected == BLKIF_STATE_CONNECTED) || 
-	    (info->connected == BLKIF_STATE_SUSPENDED) )
+        if( (sc->connected == BLKIF_STATE_CONNECTED) || 
+	    (sc->connected == BLKIF_STATE_SUSPENDED) )
 		return;
 
 	DPRINTK("blkfront.c:connect:%s.\n", xenbus_get_otherend_path(dev));
@@ -658,10 +706,10 @@ connect(device_t dev, struct blkfront_info *info)
 		return;
 	}
 	err = xenbus_gather(XBT_NIL, xenbus_get_otherend_path(dev),
-			    "feature-barrier", "%lu", &info->feature_barrier,
+			    "feature-barrier", "%lu", &feature_barrier,
 			    NULL);
-	if (err)
-		info->feature_barrier = 0;
+	if (!err || feature_barrier)
+		sc->xb_flags |= XB_BARRIER;
 
 	device_printf(dev, "%juMB <%s> at %s",
 	    (uintmax_t) sectors / (1048576 / sector_size),
@@ -669,39 +717,36 @@ connect(device_t dev, struct blkfront_info *info)
 	    xenbus_get_node(dev));
 	bus_print_child_footer(device_get_parent(dev), dev);
 
-	xlvbd_add(dev, sectors, info->vdevice, binfo, sector_size, info);
+	xlvbd_add(sc, sectors, sc->vdevice, binfo, sector_size);
 
 	(void)xenbus_set_state(dev, XenbusStateConnected); 
 
 	/* Kick pending requests. */
-	mtx_lock(&blkif_io_lock);
-	info->connected = BLKIF_STATE_CONNECTED;
-	kick_pending_request_queues(info);
-	mtx_unlock(&blkif_io_lock);
-	info->is_ready = 1;
+	mtx_lock(&sc->xb_io_lock);
+	sc->connected = BLKIF_STATE_CONNECTED;
+	xb_startio(sc);
+	sc->xb_flags |= XB_READY;
+	mtx_unlock(&sc->xb_io_lock);
 	
-#if 0
-	add_disk(info->gd);
-#endif
 }
 
 /**
  * Handle the change of state of the backend to Closing.  We must delete our
  * device-layer structures now, to ensure that writes are flushed through to
- * the backend.  Once is this done, we can switch to Closed in
+ * the backend.  Once this is done, we can switch to Closed in
  * acknowledgement.
  */
 static void
 blkfront_closing(device_t dev)
 {
-	struct blkfront_info *info = device_get_softc(dev);
+	struct xb_softc *sc = device_get_softc(dev);
 
 	DPRINTK("blkfront_closing: %s removed\n", xenbus_get_node(dev));
 
-	if (info->mi) {
+	if (sc->mi) {
 		DPRINTK("Calling xlvbd_del\n");
-		xlvbd_del(info);
-		info->mi = NULL;
+		xlvbd_del(sc);
+		sc->mi = NULL;
 	}
 
 	xenbus_set_state(dev, XenbusStateClosed);
@@ -711,92 +756,33 @@ blkfront_closing(device_t dev)
 static int
 blkfront_detach(device_t dev)
 {
-	struct blkfront_info *info = device_get_softc(dev);
+	struct xb_softc *sc = device_get_softc(dev);
 
 	DPRINTK("blkfront_remove: %s removed\n", xenbus_get_node(dev));
 
-	blkif_free(info, 0);
+	blkif_free(sc, 0);
+	mtx_destroy(&sc->xb_io_lock);
 
 	return 0;
 }
 
 
-static inline int 
-GET_ID_FROM_FREELIST(struct blkfront_info *info)
-{
-	unsigned long nfree = info->shadow_free;
-	
-	KASSERT(nfree <= BLK_RING_SIZE, ("free %lu > RING_SIZE", nfree));
-	info->shadow_free = info->shadow[nfree].req.id;
-	info->shadow[nfree].req.id = 0x0fffffee; /* debug */
-	atomic_add_int(&blkif_queued_requests, 1);
-	return nfree;
-}
-
 static inline void 
-ADD_ID_TO_FREELIST(struct blkfront_info *info, unsigned long id)
-{
-	info->shadow[id].req.id  = info->shadow_free;
-	info->shadow[id].request = 0;
-	info->shadow_free = id;
-	atomic_subtract_int(&blkif_queued_requests, 1);
-}
-
-static inline void 
-flush_requests(struct blkfront_info *info)
+flush_requests(struct xb_softc *sc)
 {
 	int notify;
 
-	RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&info->ring, notify);
+	RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&sc->ring, notify);
 
 	if (notify)
-		notify_remote_via_irq(info->irq);
+		notify_remote_via_irq(sc->irq);
 }
 
-static void 
-kick_pending_request_queues(struct blkfront_info *info)
-{
-	/* XXX check if we can't simplify */
-#if 0
-	if (!RING_FULL(&info->ring)) {
-		/* Re-enable calldowns. */
-		blk_start_queue(info->rq);
-		/* Kick things off immediately. */
-		do_blkif_request(info->rq);
-	}
-#endif
-	if (!RING_FULL(&info->ring)) {
-#if 0
-		sc = LIST_FIRST(&xbsl_head);
-		LIST_REMOVE(sc, entry);
-		/* Re-enable calldowns. */
-		blk_start_queue(di->rq);
-#endif
-		/* Kick things off immediately. */
-		xb_startio(info->sc);
-	}
-}
-
-#if 0
-/* XXX */
-static void blkif_restart_queue(void *arg)
-{
-	struct blkfront_info *info = (struct blkfront_info *)arg;
-
-	mtx_lock(&blkif_io_lock);
-	kick_pending_request_queues(info);
-	mtx_unlock(&blkif_io_lock);
-}
-#endif
-
 static void blkif_restart_queue_callback(void *arg)
 {
-#if 0
-	struct blkfront_info *info = (struct blkfront_info *)arg;
-	/* XXX BSD equiv ? */
+	struct xb_softc *sc = arg;
 
-	schedule_work(&info->work);
-#endif
+	xb_startio(sc);
 }
 
 static int
@@ -810,7 +796,7 @@ blkif_open(struct disk *dp)
 	}
 
 	sc->xb_flags |= XB_OPEN;
-	sc->xb_info->users++;
+	sc->users++;
 	return (0);
 }
 
@@ -822,11 +808,11 @@ blkif_close(struct disk *dp)
 	if (sc == NULL)
 		return (ENXIO);
 	sc->xb_flags &= ~XB_OPEN;
-	if (--(sc->xb_info->users) == 0) {
+	if (--(sc->users) == 0) {
 		/* Check whether we have been instructed to close.  We will
 		   have ignored this request initially, as the device was
 		   still mounted. */
-		device_t dev = sc->xb_info->xbdev;
+		device_t dev = sc->xb_dev;
 		XenbusState state =
 			xenbus_read_driver_state(xenbus_get_otherend_path(dev));
 
@@ -847,6 +833,18 @@ blkif_ioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td
 	return (ENOTTY);
 }
 
+static void
+xb_free_command(struct xb_command *cm)
+{
+
+	KASSERT((cm->cm_flags & XB_ON_XBQ_MASK) == 0,
+	    ("Freeing command that is still on a queue\n"));
+
+	cm->cm_flags = 0;
+	cm->bp = NULL;
+	cm->cm_complete = NULL;
+	xb_enqueue_free(cm);
+}
 
 /*
  * blkif_queue_request
@@ -858,106 +856,152 @@ blkif_ioctl(struct disk *dp, u_long cmd, void *addr, int flag, struct thread *td
  * buffer: buffer to read/write into. this should be a
  *   virtual address in the guest os.
  */
-static int blkif_queue_request(struct bio *bp)
+static struct xb_command *
+xb_bio_command(struct xb_softc *sc)
 {
-	caddr_t alignbuf;
-	vm_paddr_t buffer_ma;
-	blkif_request_t     *ring_req;
-	unsigned long id;
-	uint64_t fsect, lsect;
-	struct xb_softc *sc = (struct xb_softc *)bp->bio_disk->d_drv1;
-	struct blkfront_info *info = sc->xb_info;
-	int ref;
+	struct xb_command *cm;
+	struct bio *bp;
 
-	if (unlikely(sc->xb_info->connected != BLKIF_STATE_CONNECTED))
-		return 1;
+	if (unlikely(sc->connected != BLKIF_STATE_CONNECTED))
+		return (NULL);
 
-	if (gnttab_alloc_grant_references(
-		    BLKIF_MAX_SEGMENTS_PER_REQUEST, &gref_head) < 0) {
-		gnttab_request_free_callback(
-			&info->callback,
-			blkif_restart_queue_callback,
-			info,
-			BLKIF_MAX_SEGMENTS_PER_REQUEST);
-		return 1;
+	bp = xb_dequeue_bio(sc);
+	if (bp == NULL)
+		return (NULL);
+
+	if ((cm = xb_dequeue_free(sc)) == NULL) {
+		xb_requeue_bio(sc, bp);
+		return (NULL);
 	}
 
-	/* Check if the buffer is properly aligned */
-	if ((vm_offset_t)bp->bio_data & PAGE_MASK) {
-		int align = (bp->bio_bcount < PAGE_SIZE/2) ? XBD_SECTOR_SIZE : 
-			PAGE_SIZE;
-		caddr_t newbuf = malloc(bp->bio_bcount + align, M_DEVBUF, 
-					M_NOWAIT);
+	if (gnttab_alloc_grant_references(BLKIF_MAX_SEGMENTS_PER_REQUEST,
+	    &cm->gref_head) < 0) {
+		gnttab_request_free_callback(&sc->callback,
+			blkif_restart_queue_callback, sc,
+			BLKIF_MAX_SEGMENTS_PER_REQUEST);
+		xb_requeue_bio(sc, bp);
+		xb_enqueue_free(cm);
+		sc->xb_flags |= XB_FROZEN;
+		return (NULL);
+	}
 
-		alignbuf = (char *)roundup2((u_long)newbuf, align);
+	/* XXX Can we grab refs before doing the load so that the ref can
+	 * be filled out here?
+	 */
+	cm->bp = bp;
+	cm->data = bp->bio_data;
+	cm->datalen = bp->bio_bcount;
+	cm->operation = (bp->bio_cmd == BIO_READ) ? BLKIF_OP_READ :
+	    BLKIF_OP_WRITE;
+	cm->sector_number = (blkif_sector_t)bp->bio_pblkno;
 
-		/* save a copy of the current buffer */
-		bp->bio_driver1 = newbuf;
-		bp->bio_driver2 = alignbuf;
-
-		/* Copy the data for a write */
-		if (bp->bio_cmd == BIO_WRITE)
-			bcopy(bp->bio_data, alignbuf, bp->bio_bcount);
-	} else
-		alignbuf = bp->bio_data;
-	
-	/* Fill out a communications ring structure. */
-	ring_req 	         = RING_GET_REQUEST(&info->ring, 
-						    info->ring.req_prod_pvt);
-	id		         = GET_ID_FROM_FREELIST(info);
-	info->shadow[id].request = (unsigned long)bp;
-	
-	ring_req->id 	         = id;
-	ring_req->operation 	 = (bp->bio_cmd == BIO_READ) ? BLKIF_OP_READ :
-		BLKIF_OP_WRITE;
-	
-	ring_req->sector_number= (blkif_sector_t)bp->bio_pblkno;
-	ring_req->handle 	  = (blkif_vdev_t)(uintptr_t)sc->xb_disk;
-	
-	ring_req->nr_segments  = 0;	/* XXX not doing scatter/gather since buffer
-					 * chaining is not supported.
-					 */
-
-	buffer_ma = vtomach(alignbuf);
-	fsect = (buffer_ma & PAGE_MASK) >> XBD_SECTOR_SHFT;
-	lsect = fsect + (bp->bio_bcount >> XBD_SECTOR_SHFT) - 1;
-	/* install a grant reference. */
-	ref = gnttab_claim_grant_reference(&gref_head);
-	KASSERT( ref != -ENOSPC, ("grant_reference failed") );
-
-	gnttab_grant_foreign_access_ref(
-		ref,
-		xenbus_get_otherend_id(info->xbdev),
-		buffer_ma >> PAGE_SHIFT,
-		ring_req->operation & 1 ); /* ??? */
-	info->shadow[id].frame[ring_req->nr_segments] = 
-		buffer_ma >> PAGE_SHIFT;
-
-	ring_req->seg[ring_req->nr_segments] =
-		(struct blkif_request_segment) {
-			.gref       = ref,
-			.first_sect = fsect, 
-			.last_sect  = lsect };
-
-	ring_req->nr_segments++;
-	KASSERT((buffer_ma & (XBD_SECTOR_SIZE-1)) == 0,
-		("XEN buffer must be sector aligned"));
-	KASSERT(lsect <= 7, 
-		("XEN disk driver data cannot cross a page boundary"));
-	
-	buffer_ma &= ~PAGE_MASK;
-
-	info->ring.req_prod_pvt++;
-
-	/* Keep a private copy so we can reissue requests when recovering. */
-	info->shadow[id].req = *ring_req;
-
-	gnttab_free_grant_references(gref_head);
-
-	return 0;
+	return (cm);
 }
 
+static int
+blkif_queue_request(struct xb_softc *sc, struct xb_command *cm)
+{
+	int	error;
 
+	error = bus_dmamap_load(sc->xb_io_dmat, cm->map, cm->data, cm->datalen,
+	    blkif_queue_cb, cm, 0);
+	if (error == EINPROGRESS) {
+		printf("EINPROGRESS\n");
+		sc->xb_flags |= XB_FROZEN;
+		cm->cm_flags |= XB_CMD_FROZEN;
+		return (0);
+	}
+
+	return (error);
+}
+
+static void
+blkif_queue_cb(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
+{
+	struct xb_softc *sc;
+	struct xb_command *cm;
+	blkif_request_t	*ring_req;
+	vm_paddr_t buffer_ma;
+	uint64_t fsect, lsect;
+	int ref, i, op;
+
+	cm = arg;
+	sc = cm->cm_sc;
+
+	if (error) {
+		printf("error %d in blkif_queue_cb\n", error);
+		cm->bp->bio_error = EIO;
+		biodone(cm->bp);
+		xb_free_command(cm);
+		return;
+	}
+
+	/* Fill out a communications ring structure. */
+	ring_req = RING_GET_REQUEST(&sc->ring, sc->ring.req_prod_pvt);
+	if (ring_req == NULL) {
+		/* XXX Is this possible? */
+		printf("ring_req NULL, requeuing\n");
+		xb_enqueue_ready(cm);
+		return;
+	}
+	ring_req->id = cm->req.id;
+	ring_req->operation = cm->operation;
+	ring_req->sector_number = cm->sector_number;
+	ring_req->handle = (blkif_vdev_t)(uintptr_t)sc->xb_disk;
+	ring_req->nr_segments = nsegs;
+
+	for (i = 0; i < nsegs; i++) {
+		buffer_ma = segs[i].ds_addr;
+		fsect = (buffer_ma & PAGE_MASK) >> XBD_SECTOR_SHFT;
+		lsect = fsect + (segs[i].ds_len  >> XBD_SECTOR_SHFT) - 1;
+
+		KASSERT(lsect <= 7, 
+		    ("XEN disk driver data cannot cross a page boundary"));
+
+		/* install a grant reference. */
+		ref = gnttab_claim_grant_reference(&cm->gref_head);
+		KASSERT( ref >= 0, ("grant_reference failed") );
+
+		gnttab_grant_foreign_access_ref(
+			ref,
+			xenbus_get_otherend_id(sc->xb_dev),
+			buffer_ma >> PAGE_SHIFT,
+			ring_req->operation & 1 ); /* ??? */
+
+		ring_req->seg[i] =
+			(struct blkif_request_segment) {
+				.gref       = ref,
+				.first_sect = fsect, 
+				.last_sect  = lsect };
+	}
+
+
+	if (cm->operation == BLKIF_OP_READ)
+		op = BUS_DMASYNC_PREREAD;
+	else if (cm->operation == BLKIF_OP_WRITE)
+		op = BUS_DMASYNC_PREWRITE;
+	else
+		op = 0;
+	bus_dmamap_sync(sc->xb_io_dmat, cm->map, op);
+
+	sc->ring.req_prod_pvt++;
+
+	/* Keep a private copy so we can reissue requests when recovering. */
+	cm->req = *ring_req;
+
+	xb_enqueue_busy(cm);
+
+	gnttab_free_grant_references(cm->gref_head);
+
+	/*
+	 * This flag means that we're probably executing in the busdma swi
+	 * instead of in the startio context, so an explicit flush is needed.
+	 */
+	if (cm->cm_flags & XB_CMD_FROZEN)
+		flush_requests(sc);
+
+	return;
+}
 
 /*
  * Dequeue buffers and place them in the shared communication ring.
@@ -969,140 +1013,131 @@ static int blkif_queue_request(struct bio *bp)
 static void
 xb_startio(struct xb_softc *sc)
 {
-	struct bio		*bp;
-	int			queued = 0;
-	struct blkfront_info *info = sc->xb_info;
-	DPRINTK("");
+	struct xb_command *cm;
+	int error, queued = 0;
 
-	mtx_assert(&blkif_io_lock, MA_OWNED);
+	mtx_assert(&sc->xb_io_lock, MA_OWNED);
 
-	while ((bp = bioq_takefirst(&sc->xb_bioq)) != NULL) {
+	while (!RING_FULL(&sc->ring)) {
+		if (sc->xb_flags & XB_FROZEN)
+			break;
 
-		if (RING_FULL(&info->ring)) 
-			goto wait;
-    	
-		if (blkif_queue_request(bp)) {
-		wait:
-			bioq_insert_head(&sc->xb_bioq, bp);
+		cm = xb_dequeue_ready(sc);
+
+		if (cm == NULL)
+		    cm = xb_bio_command(sc);
+
+		if (cm == NULL)
+			break;
+
+		if ((error = blkif_queue_request(sc, cm)) != 0) {
+			printf("blkif_queue_request returned %d\n", error);
 			break;
 		}
 		queued++;
 	}
 
 	if (queued != 0) 
-		flush_requests(sc->xb_info);
+		flush_requests(sc);
 }
 
 static void
 blkif_int(void *xsc)
 {
-	struct xb_softc *sc = NULL;
-	struct bio *bp;
+	struct xb_softc *sc = xsc;
+	struct xb_command *cm;
 	blkif_response_t *bret;
 	RING_IDX i, rp;
-	struct blkfront_info *info = xsc;
-	DPRINTK("");
+	int op;
 
-	TRACE_ENTER;
+	mtx_lock(&sc->xb_io_lock);
 
-	mtx_lock(&blkif_io_lock);
-
-	if (unlikely(info->connected != BLKIF_STATE_CONNECTED)) {
-		mtx_unlock(&blkif_io_lock);
+	if (unlikely(sc->connected != BLKIF_STATE_CONNECTED)) {
+		mtx_unlock(&sc->xb_io_lock);
 		return;
 	}
 
  again:
-	rp = info->ring.sring->rsp_prod;
+	rp = sc->ring.sring->rsp_prod;
 	rmb(); /* Ensure we see queued responses up to 'rp'. */
 
-	for (i = info->ring.rsp_cons; i != rp; i++) {
-		unsigned long id;
+	for (i = sc->ring.rsp_cons; i != rp; i++) {
+		bret = RING_GET_RESPONSE(&sc->ring, i);
+		cm   = &sc->shadow[bret->id];
 
-		bret = RING_GET_RESPONSE(&info->ring, i);
-		id   = bret->id;
-		bp   = (struct bio *)info->shadow[id].request;
+		xb_remove_busy(cm);
+		blkif_completion(cm);
 
-		blkif_completion(&info->shadow[id]);
+		if (cm->operation == BLKIF_OP_READ)
+			op = BUS_DMASYNC_POSTREAD;
+		else if (cm->operation == BLKIF_OP_WRITE)
+			op = BUS_DMASYNC_POSTWRITE;
+		else
+			op = 0;
+		bus_dmamap_sync(sc->xb_io_dmat, cm->map, op);
+		bus_dmamap_unload(sc->xb_io_dmat, cm->map);
 
-		ADD_ID_TO_FREELIST(info, id);
+		/*
+		 * If commands are completing then resources are probably
+		 * being freed as well.  It's a cheap assumption even when
+		 * wrong.
+		 */
+		sc->xb_flags &= ~XB_FROZEN;
 
-		switch (bret->operation) {
-		case BLKIF_OP_READ:
-			/* had an unaligned buffer that needs to be copied */
-			if (bp->bio_driver1)
-				bcopy(bp->bio_driver2, bp->bio_data, bp->bio_bcount);
-			/* FALLTHROUGH */
-		case BLKIF_OP_WRITE:
-
-			/* free the copy buffer */
-			if (bp->bio_driver1) {
-				free(bp->bio_driver1, M_DEVBUF);
-				bp->bio_driver1 = NULL;
-			}
-
-			if ( unlikely(bret->status != BLKIF_RSP_OKAY) ) {
-					printf("Bad return from blkdev data request: %x\n", 
-					  bret->status);
-				bp->bio_flags |= BIO_ERROR;
-			}
-
-			sc = (struct xb_softc *)bp->bio_disk->d_drv1;
-
-			if (bp->bio_flags & BIO_ERROR)
-				bp->bio_error = EIO;
-			else
-				bp->bio_resid = 0;
-
-			biodone(bp);
-			break;
-		default:
-			panic("received invalid operation");
-			break;
-		}
+		/*
+		 * Directly call the i/o complete routine to save an
+		 * an indirection in the common case.
+		 */
+		cm->status = bret->status;
+		if (cm->bp)
+			xb_bio_complete(sc, cm);
+		else if (cm->cm_complete)
+			(cm->cm_complete)(cm);
+		else
+			xb_free_command(cm);
 	}
 
-	info->ring.rsp_cons = i;
+	sc->ring.rsp_cons = i;
 
-	if (i != info->ring.req_prod_pvt) {
+	if (i != sc->ring.req_prod_pvt) {
 		int more_to_do;
-		RING_FINAL_CHECK_FOR_RESPONSES(&info->ring, more_to_do);
+		RING_FINAL_CHECK_FOR_RESPONSES(&sc->ring, more_to_do);
 		if (more_to_do)
 			goto again;
 	} else {
-		info->ring.sring->rsp_event = i + 1;
+		sc->ring.sring->rsp_event = i + 1;
 	}
 
-	kick_pending_request_queues(info);
+	xb_startio(sc);
 
-	mtx_unlock(&blkif_io_lock);
+	mtx_unlock(&sc->xb_io_lock);
 }
 
 static void 
-blkif_free(struct blkfront_info *info, int suspend)
+blkif_free(struct xb_softc *sc, int suspend)
 {
 	
 /* Prevent new requests being issued until we fix things up. */
-	mtx_lock(&blkif_io_lock);
-	info->connected = suspend ? 
+	mtx_lock(&sc->xb_io_lock);
+	sc->connected = suspend ? 
 		BLKIF_STATE_SUSPENDED : BLKIF_STATE_DISCONNECTED; 
-	mtx_unlock(&blkif_io_lock);
+	mtx_unlock(&sc->xb_io_lock);
 
 	/* Free resources associated with old device channel. */
-	if (info->ring_ref != GRANT_INVALID_REF) {
-		gnttab_end_foreign_access(info->ring_ref, 
-					  info->ring.sring);
-		info->ring_ref = GRANT_INVALID_REF;
-		info->ring.sring = NULL;
+	if (sc->ring_ref != GRANT_INVALID_REF) {
+		gnttab_end_foreign_access(sc->ring_ref, 
+					  sc->ring.sring);
+		sc->ring_ref = GRANT_INVALID_REF;
+		sc->ring.sring = NULL;
 	}
-	if (info->irq)
-		unbind_from_irqhandler(info->irq);
-	info->irq = 0;
+	if (sc->irq)
+		unbind_from_irqhandler(sc->irq);
+	sc->irq = 0;
 
 }
 
 static void 
-blkif_completion(struct blk_shadow *s)
+blkif_completion(struct xb_command *s)
 {
 	int i;
 
@@ -1111,70 +1146,16 @@ blkif_completion(struct blk_shadow *s)
 }
 
 static void 
-blkif_recover(struct blkfront_info *info)
+blkif_recover(struct xb_softc *sc)
 {
-	int i, j;
-	blkif_request_t *req;
-	struct blk_shadow *copy;
-
-	if (!info->sc)
-		return;
-
-	/* Stage 1: Make a safe copy of the shadow state. */
-	copy = (struct blk_shadow *)malloc(sizeof(info->shadow), M_DEVBUF, M_NOWAIT|M_ZERO);
-	memcpy(copy, info->shadow, sizeof(info->shadow));
-
-	/* Stage 2: Set up free list. */
-	memset(&info->shadow, 0, sizeof(info->shadow));
-	for (i = 0; i < BLK_RING_SIZE; i++)
-		info->shadow[i].req.id = i+1;
-	info->shadow_free = info->ring.req_prod_pvt;
-	info->shadow[BLK_RING_SIZE-1].req.id = 0x0fffffff;
-
-	/* Stage 3: Find pending requests and requeue them. */
-	for (i = 0; i < BLK_RING_SIZE; i++) {
-		/* Not in use? */
-		if (copy[i].request == 0)
-			continue;
-
-		/* Grab a request slot and copy shadow state into it. */
-		req = RING_GET_REQUEST(
-			&info->ring, info->ring.req_prod_pvt);
-		*req = copy[i].req;
-
-		/* We get a new request id, and must reset the shadow state. */
-		req->id = GET_ID_FROM_FREELIST(info);
-		memcpy(&info->shadow[req->id], ©[i], sizeof(copy[i]));
-
-		/* Rewrite any grant references invalidated by suspend/resume. */
-		for (j = 0; j < req->nr_segments; j++)
-			gnttab_grant_foreign_access_ref(
-				req->seg[j].gref,
-				xenbus_get_otherend_id(info->xbdev),
-				pfn_to_mfn(info->shadow[req->id].frame[j]),
-				0 /* assume not readonly */);
-
-		info->shadow[req->id].req = *req;
-
-		info->ring.req_prod_pvt++;
-	}
-
-	free(copy, M_DEVBUF);
-
-	xenbus_set_state(info->xbdev, XenbusStateConnected); 
-	
-	/* Now safe for us to use the shared ring */
-	mtx_lock(&blkif_io_lock);
-	info->connected = BLKIF_STATE_CONNECTED;
-	mtx_unlock(&blkif_io_lock);
-
-	/* Send off requeued requests */
-	mtx_lock(&blkif_io_lock);
-	flush_requests(info);
-
-	/* Kick any other new requests queued since we resumed */
-	kick_pending_request_queues(info);
-	mtx_unlock(&blkif_io_lock);
+	/*
+	 * XXX The whole concept of not quiescing and completing all i/o
+	 * during suspend, and then hoping to recover and replay the
+	 * resulting abandoned I/O during resume, is laughable.  At best,
+	 * it invalidates the i/o ordering rules required by just about
+	 * every filesystem, and at worst it'll corrupt data.  The code
+	 * has been removed until further notice.
+	 */
 }
 
 /* ** Driver registration ** */
@@ -1196,11 +1177,8 @@ static device_method_t blkfront_methods[] = {
 static driver_t blkfront_driver = { 
 	"xbd", 
 	blkfront_methods, 
-	sizeof(struct blkfront_info),                      
+	sizeof(struct xb_softc),                      
 }; 
 devclass_t blkfront_devclass; 
  
 DRIVER_MODULE(xbd, xenbus, blkfront_driver, blkfront_devclass, 0, 0); 
-
-MTX_SYSINIT(ioreq, &blkif_io_lock, "BIO LOCK", MTX_NOWITNESS); /* XXX how does one enroll a lock? */
-
diff --git a/sys/dev/xen/blkfront/block.h b/sys/dev/xen/blkfront/block.h
index 97dfe7e7d0b..32bfc96a095 100644
--- a/sys/dev/xen/blkfront/block.h
+++ b/sys/dev/xen/blkfront/block.h
@@ -1,12 +1,30 @@
 /*
- * 
+ * XenBSD block device driver
+ *
+ * Copyright (c) 2009 Scott Long, Yahoo!
+ * Copyright (c) 2009 Frank Suchomel, Citrix
+ * Copyright (c) 2009 Doug F. Rabson, Citrix
+ * Copyright (c) 2005 Kip Macy
+ * Copyright (c) 2003-2004, Keir Fraser & Steve Hand
+ * Modifications by Mark A. Williamson are (c) Intel Research Cambridge
+ *
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
  *
  * $FreeBSD$
  */
@@ -32,66 +50,208 @@ struct xlbd_major_info
 	struct xlbd_type_info *type;
 };
 
-struct blk_shadow {
-	blkif_request_t req;
-	unsigned long request;
-	unsigned long frame[BLKIF_MAX_SEGMENTS_PER_REQUEST];
+struct xb_command {
+	TAILQ_ENTRY(xb_command)	cm_link;
+	struct xb_softc		*cm_sc;
+	u_int			cm_flags;
+#define XB_CMD_FROZEN		(1<<0)
+#define XB_CMD_POLLED		(1<<1)
+#define XB_ON_XBQ_FREE		(1<<2)
+#define XB_ON_XBQ_READY		(1<<3)
+#define XB_ON_XBQ_BUSY		(1<<4)
+#define XB_ON_XBQ_COMPLETE	(1<<5)
+#define XB_ON_XBQ_MASK		((1<<2)|(1<<3)|(1<<4)|(1<<5))
+	bus_dmamap_t		map;
+	blkif_request_t		req;
+	struct bio		*bp;
+	grant_ref_t		gref_head;
+	void			*data;
+	size_t			datalen;
+	int			operation;
+	blkif_sector_t		sector_number;
+	int			status;
+	void			(* cm_complete)(struct xb_command *);
 };
 
 #define BLK_RING_SIZE __RING_SIZE((blkif_sring_t *)0, PAGE_SIZE)
 
+#define XBQ_FREE	0
+#define XBQ_BIO		1
+#define XBQ_READY	2
+#define XBQ_BUSY	3
+#define XBQ_COMPLETE	4
+#define XBQ_COUNT	5
 
-struct xb_softc {
-	device_t		  xb_dev;
-	struct disk		  *xb_disk;		/* disk params */
-	struct bio_queue_head     xb_bioq;		/* sort queue */
-	int			  xb_unit;
-	int			  xb_flags;
-	struct blkfront_info      *xb_info;
-	LIST_ENTRY(xb_softc)      entry;
-#define XB_OPEN	(1<<0)		/* drive is open (can't shut down) */
+struct xb_qstat {
+	uint32_t	q_length;
+	uint32_t	q_max;
 };
 
+union xb_statrequest {
+	uint32_t		ms_item;
+	struct xb_qstat		ms_qstat;
+};
 
 /*
- * We have one of these per vbd, whether ide, scsi or 'other'.  They
- * hang in private_data off the gendisk structure. We may end up
- * putting all kinds of interesting stuff here :-)
+ * We have one of these per vbd, whether ide, scsi or 'other'.
  */
-struct blkfront_info
-{
-	device_t xbdev;
-	dev_t dev;
- 	struct gendisk *gd;
-	int vdevice;
-	blkif_vdev_t handle;
-	int connected;
-	int ring_ref;
-	blkif_front_ring_t ring;
-	unsigned int irq;
-	struct xlbd_major_info *mi;
-#if 0
-	request_queue_t *rq;
-	struct work_struct work;
-#endif
-	struct gnttab_free_callback callback;
-	struct blk_shadow shadow[BLK_RING_SIZE];
-	unsigned long shadow_free;
-	struct xb_softc *sc;
-	int feature_barrier;
-	int is_ready;
+struct xb_softc {
+	device_t		xb_dev;
+	struct disk		*xb_disk;		/* disk params */
+	struct bio_queue_head   xb_bioq;		/* sort queue */
+	int			xb_unit;
+	int			xb_flags;
+#define XB_OPEN		(1<<0)		/* drive is open (can't shut down) */
+#define XB_BARRIER	(1 << 1)	/* backend supports barriers */
+#define XB_READY	(1 << 2)	/* Is ready */
+#define XB_FROZEN	(1 << 3)	/* Waiting for resources */
+	int			vdevice;
+	blkif_vdev_t		handle;
+	int			connected;
+	int			ring_ref;
+	blkif_front_ring_t	ring;
+	unsigned int		irq;
+	struct xlbd_major_info	*mi;
+	struct gnttab_free_callback	callback;
+	TAILQ_HEAD(,xb_command)	cm_free;
+	TAILQ_HEAD(,xb_command)	cm_ready;
+	TAILQ_HEAD(,xb_command)	cm_busy;
+	TAILQ_HEAD(,xb_command)	cm_complete;
+	struct xb_qstat		xb_qstat[XBQ_COUNT];
+	bus_dma_tag_t		xb_io_dmat;
+
 	/**
 	 * The number of people holding this device open.  We won't allow a
 	 * hot-unplug unless this is 0.
 	 */
-	int users;
+	int			users;
+	struct mtx		xb_io_lock;
+	struct xb_command	shadow[BLK_RING_SIZE];
 };
-/* Note that xlvbd_add doesn't call add_disk for you: you're expected
-   to call add_disk on info->gd once the disk is properly connected
-   up. */
-int xlvbd_add(device_t, blkif_sector_t capacity, int device,
-	      uint16_t vdisk_info, uint16_t sector_size, struct blkfront_info *info);
-void xlvbd_del(struct blkfront_info *info);
+
+int xlvbd_add(struct xb_softc *, blkif_sector_t capacity, int device,
+	      uint16_t vdisk_info, uint16_t sector_size);
+void xlvbd_del(struct xb_softc *);
+
+#define XBQ_ADD(sc, qname)					\
+	do {							\
+		struct xb_qstat *qs;				\
+								\
+		qs = &(sc)->xb_qstat[qname];			\
+		qs->q_length++;					\
+		if (qs->q_length > qs->q_max)			\
+			qs->q_max = qs->q_length;		\
+	} while (0)
+
+#define XBQ_REMOVE(sc, qname)	(sc)->xb_qstat[qname].q_length--
+
+#define XBQ_INIT(sc, qname)					\
+	do {							\
+		sc->xb_qstat[qname].q_length = 0;		\
+		sc->xb_qstat[qname].q_max = 0;			\
+	} while (0)
+
+#define XBQ_COMMAND_QUEUE(name, index)					\
+	static __inline void						\
+	xb_initq_ ## name (struct xb_softc *sc)				\
+	{								\
+		TAILQ_INIT(&sc->cm_ ## name);				\
+		XBQ_INIT(sc, index);					\
+	}								\
+	static __inline void						\
+	xb_enqueue_ ## name (struct xb_command *cm)			\
+	{								\
+		if ((cm->cm_flags & XB_ON_XBQ_MASK) != 0) {		\
+			printf("command %p is on another queue, "	\
+			    "flags = %#x\n", cm, cm->cm_flags);		\
+			panic("command is on another queue");		\
+		}							\
+		TAILQ_INSERT_TAIL(&cm->cm_sc->cm_ ## name, cm, cm_link); \
+		cm->cm_flags |= XB_ON_ ## index;			\
+		XBQ_ADD(cm->cm_sc, index);				\
+	}								\
+	static __inline void						\
+	xb_requeue_ ## name (struct xb_command *cm)			\
+	{								\
+		if ((cm->cm_flags & XB_ON_XBQ_MASK) != 0) {		\
+			printf("command %p is on another queue, "	\
+			    "flags = %#x\n", cm, cm->cm_flags);		\
+			panic("command is on another queue");		\
+		}							\
+		TAILQ_INSERT_HEAD(&cm->cm_sc->cm_ ## name, cm, cm_link); \
+		cm->cm_flags |= XB_ON_ ## index;			\
+		XBQ_ADD(cm->cm_sc, index);				\
+	}								\
+	static __inline struct xb_command *				\
+	xb_dequeue_ ## name (struct xb_softc *sc)			\
+	{								\
+		struct xb_command *cm;					\
+									\
+		if ((cm = TAILQ_FIRST(&sc->cm_ ## name)) != NULL) {	\
+			if ((cm->cm_flags & XB_ON_ ## index) == 0) {	\
+				printf("command %p not in queue, "	\
+				    "flags = %#x, bit = %#x\n", cm,	\
+				    cm->cm_flags, XB_ON_ ## index);	\
+				panic("command not in queue");		\
+			}						\
+			TAILQ_REMOVE(&sc->cm_ ## name, cm, cm_link);	\
+			cm->cm_flags &= ~XB_ON_ ## index;		\
+			XBQ_REMOVE(sc, index);				\
+		}							\
+		return (cm);						\
+	}								\
+	static __inline void						\
+	xb_remove_ ## name (struct xb_command *cm)			\
+	{								\
+		if ((cm->cm_flags & XB_ON_ ## index) == 0) {		\
+			printf("command %p not in queue, flags = %#x, " \
+			    "bit = %#x\n", cm, cm->cm_flags,		\
+			    XB_ON_ ## index);				\
+			panic("command not in queue");			\
+		}							\
+		TAILQ_REMOVE(&cm->cm_sc->cm_ ## name, cm, cm_link);	\
+		cm->cm_flags &= ~XB_ON_ ## index;			\
+		XBQ_REMOVE(cm->cm_sc, index);				\
+	}								\
+struct hack
+
+XBQ_COMMAND_QUEUE(free, XBQ_FREE);
+XBQ_COMMAND_QUEUE(ready, XBQ_READY);
+XBQ_COMMAND_QUEUE(busy, XBQ_BUSY);
+XBQ_COMMAND_QUEUE(complete, XBQ_COMPLETE);
+
+static __inline void
+xb_initq_bio(struct xb_softc *sc)
+{
+	bioq_init(&sc->xb_bioq);
+	XBQ_INIT(sc, XBQ_BIO);
+}
+
+static __inline void
+xb_enqueue_bio(struct xb_softc *sc, struct bio *bp)
+{
+	bioq_insert_tail(&sc->xb_bioq, bp);
+	XBQ_ADD(sc, XBQ_BIO);
+}
+
+static __inline void
+xb_requeue_bio(struct xb_softc *sc, struct bio *bp)
+{
+	bioq_insert_head(&sc->xb_bioq, bp);
+	XBQ_ADD(sc, XBQ_BIO);
+}
+
+static __inline struct bio *
+xb_dequeue_bio(struct xb_softc *sc)
+{
+	struct bio *bp;
+
+	if ((bp = bioq_first(&sc->xb_bioq)) != NULL) {
+		bioq_remove(&sc->xb_bioq, bp);
+		XBQ_REMOVE(sc, XBQ_BIO);
+	}
+	return (bp);
+}
 
 #endif /* __XEN_DRIVERS_BLOCK_H__ */
 
diff --git a/sys/dev/xen/console/console.c b/sys/dev/xen/console/console.c
index df5c3ee5907..8f765e20c65 100644
--- a/sys/dev/xen/console/console.c
+++ b/sys/dev/xen/console/console.c
@@ -132,7 +132,6 @@ xc_cngetc(struct consdev *dev)
 	
 	CN_LOCK(cn_mtx);
 	if ((rp - rc)) {
-		/* if (kdb_active) printf("%s:%d\n", __func__, __LINE__); */
 		/* we need to return only one char */
 		ret = (int)rbuf[RBUF_MASK(rc)];
 		rc++;
diff --git a/sys/dev/xen/netfront/netfront.c b/sys/dev/xen/netfront/netfront.c
index 571ecd0e3c0..93beb8b1946 100644
--- a/sys/dev/xen/netfront/netfront.c
+++ b/sys/dev/xen/netfront/netfront.c
@@ -155,6 +155,9 @@ static void netif_disconnect_backend(struct netfront_info *info);
 static int setup_device(device_t dev, struct netfront_info *info);
 static void end_access(int ref, void *page);
 
+static int  xn_ifmedia_upd(struct ifnet *ifp);
+static void xn_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr);
+
 /* Xenolinux helper functions */
 int network_connect(struct netfront_info *);
 
@@ -240,7 +243,9 @@ struct netfront_info {
 	/* Receive-ring batched refills. */
 #define RX_MIN_TARGET 32
 #define RX_MAX_TARGET NET_RX_RING_SIZE
-	int rx_min_target, rx_max_target, rx_target;
+	int rx_min_target;
+	int rx_max_target;
+	int rx_target;
 
 	/*
 	 * {tx,rx}_skbs store outstanding skbuffs. The first entry in each
@@ -253,19 +258,20 @@ struct netfront_info {
 	grant_ref_t grant_rx_ref[NET_TX_RING_SIZE + 1]; 
 
 #define TX_MAX_TARGET min(NET_RX_RING_SIZE, 256)
-	device_t xbdev;
-	int tx_ring_ref;
-	int rx_ring_ref;
-	uint8_t mac[ETHER_ADDR_LEN];
+	device_t		xbdev;
+	int			tx_ring_ref;
+	int			rx_ring_ref;
+	uint8_t			mac[ETHER_ADDR_LEN];
 	struct xn_chain_data	xn_cdata;	/* mbufs */
-	struct mbuf_head xn_rx_batch;	/* head of the batch queue */
+	struct mbuf_head	xn_rx_batch;	/* head of the batch queue */
 
 	int			xn_if_flags;
 	struct callout	        xn_stat_ch;
 
-	u_long rx_pfn_array[NET_RX_RING_SIZE];
-	multicall_entry_t rx_mcl[NET_RX_RING_SIZE+1];
-	mmu_update_t rx_mmu[NET_RX_RING_SIZE];
+	u_long			rx_pfn_array[NET_RX_RING_SIZE];
+	multicall_entry_t	rx_mcl[NET_RX_RING_SIZE+1];
+	mmu_update_t		rx_mmu[NET_RX_RING_SIZE];
+	struct ifmedia		sc_media;
 };
 
 #define rx_mbufs xn_cdata.xn_rx_chain
@@ -1056,7 +1062,6 @@ xn_txeof(struct netfront_info *np)
 		return;
 	
 	ifp = np->xn_ifp;
-	ifp->if_timer = 0;
 	
 	do {
 		prod = np->tx.sring->rsp_prod;
@@ -1623,6 +1628,7 @@ xn_ifinit_locked(struct netfront_info *sc)
 	
 	ifp->if_drv_flags |= IFF_DRV_RUNNING;
 	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
+	if_link_state_change(ifp, LINK_STATE_UP);
 	
 	callout_reset(&sc->xn_stat_ch, hz, xn_tick, sc);
 
@@ -1762,7 +1768,7 @@ xn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 		/* FALLTHROUGH */
 	case SIOCSIFMEDIA:
 	case SIOCGIFMEDIA:
-		error = EINVAL;
+		error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
 		break;
 	default:
 		error = ether_ioctl(ifp, cmd, data);
@@ -1786,6 +1792,7 @@ xn_stop(struct netfront_info *sc)
 	xn_free_tx_ring(sc);
     
 	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
+	if_link_state_change(ifp, LINK_STATE_DOWN);
 }
 
 /* START of Xenolinux helper functions adapted to FreeBSD */
@@ -1904,6 +1911,11 @@ create_netdev(device_t dev)
 	np->xbdev         = dev;
     
 	XN_LOCK_INIT(np, xennetif);
+
+	ifmedia_init(&np->sc_media, 0, xn_ifmedia_upd, xn_ifmedia_sts);
+	ifmedia_add(&np->sc_media, IFM_ETHER|IFM_MANUAL, 0, NULL);
+	ifmedia_set(&np->sc_media, IFM_ETHER|IFM_MANUAL);
+
 	np->rx_target     = RX_MIN_TARGET;
 	np->rx_min_target = RX_MIN_TARGET;
 	np->rx_max_target = RX_MAX_TARGET;
@@ -1948,9 +1960,6 @@ create_netdev(device_t dev)
     	ifp->if_ioctl = xn_ioctl;
     	ifp->if_output = ether_output;
     	ifp->if_start = xn_start;
-#ifdef notyet
-    	ifp->if_watchdog = xn_watchdog;
-#endif
     	ifp->if_init = xn_ifinit;
     	ifp->if_mtu = ETHERMTU;
     	ifp->if_snd.ifq_maxlen = NET_TX_RING_SIZE - 1;
@@ -1991,7 +2000,8 @@ out:
  * acknowledgement.
  */
 #if 0
-static void netfront_closing(device_t dev)
+static void
+netfront_closing(device_t dev)
 {
 #if 0
 	struct netfront_info *info = dev->dev_driver_data;
@@ -2004,7 +2014,8 @@ static void netfront_closing(device_t dev)
 }
 #endif
 
-static int netfront_detach(device_t dev)
+static int
+netfront_detach(device_t dev)
 {
 	struct netfront_info *info = device_get_softc(dev);
 
@@ -2015,8 +2026,8 @@ static int netfront_detach(device_t dev)
 	return 0;
 }
 
-
-static void netif_free(struct netfront_info *info)
+static void
+netif_free(struct netfront_info *info)
 {
 	netif_disconnect_backend(info);
 #if 0
@@ -2024,7 +2035,8 @@ static void netif_free(struct netfront_info *info)
 #endif
 }
 
-static void netif_disconnect_backend(struct netfront_info *info)
+static void
+netif_disconnect_backend(struct netfront_info *info)
 {
 	XN_RX_LOCK(info);
 	XN_TX_LOCK(info);
@@ -2046,12 +2058,26 @@ static void netif_disconnect_backend(struct netfront_info *info)
 }
 
 
-static void end_access(int ref, void *page)
+static void
+end_access(int ref, void *page)
 {
 	if (ref != GRANT_INVALID_REF)
 		gnttab_end_foreign_access(ref, page);
 }
 
+static int
+xn_ifmedia_upd(struct ifnet *ifp)
+{
+	return (0);
+}
+
+static void
+xn_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
+{
+	ifmr->ifm_status = IFM_AVALID|IFM_ACTIVE;
+	ifmr->ifm_active = IFM_ETHER|IFM_MANUAL;
+}
+
 /* ** Driver registration ** */
 static device_method_t netfront_methods[] = { 
 	/* Device interface */ 
diff --git a/sys/dev/xl/if_xl.c b/sys/dev/xl/if_xl.c
index 3b330a90791..05150af2b7f 100644
--- a/sys/dev/xl/if_xl.c
+++ b/sys/dev/xl/if_xl.c
@@ -929,7 +929,7 @@ xl_reset(struct xl_softc *sc)
 	/*
 	 * If we're using memory mapped register mode, pause briefly
 	 * after issuing the reset command before trying to access any
-	 * other registers. With my 3c575C cardbus card, failing to do
+	 * other registers. With my 3c575C CardBus card, failing to do
 	 * this results in the system locking up while trying to poll
 	 * the command busy bit in the status register.
 	 */
@@ -1392,7 +1392,7 @@ xl_attach(device_t dev)
 	 * Figure out the card type. 3c905B adapters have the
 	 * 'supportsNoTxLength' bit set in the capabilities
 	 * word in the EEPROM.
-	 * Note: my 3c575C cardbus card lies. It returns a value
+	 * Note: my 3c575C CardBus card lies. It returns a value
 	 * of 0x1578 for its capabilities word, which is somewhat
 	 * nonsensical. Another way to distinguish a 3c90x chip
 	 * from a 3c90xB/C chip is to check for the 'supportsLargePackets'
diff --git a/sys/fs/devfs/devfs_vnops.c b/sys/fs/devfs/devfs_vnops.c
index 3d6e0f0330d..4c059cd840c 100644
--- a/sys/fs/devfs/devfs_vnops.c
+++ b/sys/fs/devfs/devfs_vnops.c
@@ -436,14 +436,14 @@ devfs_access(struct vop_access_args *ap)
 
 	error = vaccess(vp->v_type, de->de_mode, de->de_uid, de->de_gid,
 	    ap->a_accmode, ap->a_cred, NULL);
-	if (!error)
-		return (error);
+	if (error == 0)
+		return (0);
 	if (error != EACCES)
 		return (error);
 	/* We do, however, allow access to the controlling terminal */
 	if (!(ap->a_td->td_proc->p_flag & P_CONTROLT))
 		return (error);
-	if (ap->a_td->td_proc->p_session->s_ttyvp == de->de_vnode)
+	if (ap->a_td->td_proc->p_session->s_ttydp == de->de_cdp)
 		return (0);
 	return (error);
 }
@@ -474,6 +474,7 @@ devfs_close(struct vop_close_args *ap)
 		VI_LOCK(vp);
 		if (count_dev(dev) == 2 && (vp->v_iflag & VI_DOOMED) == 0) {
 			td->td_proc->p_session->s_ttyvp = NULL;
+			td->td_proc->p_session->s_ttydp = NULL;
 			oldvp = vp;
 		}
 		VI_UNLOCK(vp);
@@ -675,6 +676,7 @@ devfs_ioctl_f(struct file *fp, u_long com, void *data, struct ucred *cred, struc
 		VREF(vp);
 		SESS_LOCK(td->td_proc->p_session);
 		td->td_proc->p_session->s_ttyvp = vp;
+		td->td_proc->p_session->s_ttydp = cdev2priv(dev);
 		SESS_UNLOCK(td->td_proc->p_session);
 
 		sx_sunlock(&proctree_lock);
@@ -708,10 +710,11 @@ devfs_kqfilter_f(struct file *fp, struct knote *kn)
 }
 
 static inline int
-devfs_prison_check(struct devfs_dirent *de, struct ucred *tcr)
+devfs_prison_check(struct devfs_dirent *de, struct thread *td)
 {
 	struct cdev_priv *cdp;
 	struct ucred *dcr;
+	int error;
 
 	cdp = de->de_cdp;
 	if (cdp == NULL)
@@ -720,7 +723,15 @@ devfs_prison_check(struct devfs_dirent *de, struct ucred *tcr)
 	if (dcr == NULL)
 		return (0);
 
-	return (prison_check(tcr, dcr));
+	error = prison_check(td->td_ucred, dcr);
+	if (error == 0)
+		return (0);
+	/* We do, however, allow access to the controlling terminal */
+	if (!(td->td_proc->p_flag & P_CONTROLT))
+		return (error);
+	if (td->td_proc->p_session->s_ttydp == cdp)
+		return (0);
+	return (error);
 }
 
 static int
@@ -848,7 +859,7 @@ devfs_lookupx(struct vop_lookup_args *ap, int *dm_unlock)
 		return (ENOENT);
 	}
 
-	if (devfs_prison_check(de, td->td_ucred))
+	if (devfs_prison_check(de, td))
 		return (ENOENT);
 
 	if ((cnp->cn_nameiop == DELETE) && (flags & ISLASTCN)) {
@@ -1126,7 +1137,7 @@ devfs_readdir(struct vop_readdir_args *ap)
 		KASSERT(dd->de_cdp != (void *)0xdeadc0de, ("%s %d\n", __func__, __LINE__));
 		if (dd->de_flags & DE_WHITEOUT)
 			continue;
-		if (devfs_prison_check(dd, ap->a_cred))
+		if (devfs_prison_check(dd, uio->uio_td))
 			continue;
 		if (dd->de_dirent->d_type == DT_DIR)
 			de = dd->de_dir;
diff --git a/sys/fs/nfs/nfs_commonacl.c b/sys/fs/nfs/nfs_commonacl.c
index 0ac1590e258..910a6a42cd5 100644
--- a/sys/fs/nfs/nfs_commonacl.c
+++ b/sys/fs/nfs/nfs_commonacl.c
@@ -37,7 +37,6 @@ extern int nfsrv_useacl;
 static int nfsrv_acemasktoperm(u_int32_t acetype, u_int32_t mask, int owner,
     enum vtype type, acl_perm_t *permp);
 
-#if defined(NFS4_ACL_EXTATTR_NAME)
 /*
  * Handle xdr for an ace.
  */
@@ -263,189 +262,7 @@ nfsrv_acemasktoperm(u_int32_t acetype, u_int32_t mask, int owner,
 	*permp = perm;
 	return (0);
 }
-#else
-/*
- * Handle xdr for an ace.
- */
-APPLESTATIC int
-nfsrv_dissectace(struct nfsrv_descript *nd, struct acl_entry *acep,
-    int *aceerrp, int *acesizep, NFSPROC_T *p)
-{
-	u_int32_t *tl;
-	int len, gotid = 0, owner = 0, error = 0, aceerr = 0;
-	u_char *name, namestr[NFSV4_SMALLSTR + 1];
-	u_int32_t flag, mask, acetype;
-	gid_t gid;
-	uid_t uid;
 
-	*aceerrp = 0;
-	NFSM_DISSECT(tl, u_int32_t *, 4 * NFSX_UNSIGNED);
-	acetype = fxdr_unsigned(u_int32_t, *tl++);
-	flag = fxdr_unsigned(u_int32_t, *tl++);
-	mask = fxdr_unsigned(u_int32_t, *tl++);
-	len = fxdr_unsigned(int, *tl);
-	if (len < 0) {
-		return (NFSERR_BADXDR);
-	} else if (len == 0) {
-		/* Netapp filers return a 0 length who for nil users */
-		acep->ae_tag = ACL_UNDEFINED_TAG;
-		acep->ae_id = ACL_UNDEFINED_ID;
-		acep->ae_perm = (acl_perm_t)0;
-		if (acesizep)
-			*acesizep = 4 * NFSX_UNSIGNED;
-		return (0);
-	}
-	if (len > NFSV4_SMALLSTR)
-		name = malloc(len + 1, M_NFSSTRING, M_WAITOK);
-	else
-		name = namestr;
-	error = nfsrv_mtostr(nd, name, len);
-	if (error) {
-		if (len > NFSV4_SMALLSTR)
-			free(name, M_NFSSTRING);
-		return (error);
-	}
-	if (len == 6) {
-		if (!NFSBCMP(name, "OWNER@", 6)) {
-			acep->ae_tag = ACL_USER_OBJ;
-			acep->ae_id = ACL_UNDEFINED_ID;
-			owner = 1;
-			gotid = 1;
-		} else if (!NFSBCMP(name, "GROUP@", 6)) {
-			acep->ae_tag = ACL_GROUP_OBJ;
-			acep->ae_id = ACL_UNDEFINED_ID;
-			gotid = 1;
-			flag &= ~NFSV4ACE_IDENTIFIERGROUP;
-		}
-	} else if (len == 9 && !NFSBCMP(name, "EVERYONE@", 9)) {
-		acep->ae_tag = ACL_OTHER;
-		acep->ae_id = ACL_UNDEFINED_ID;
-		gotid = 1;
-	}
-	if (!gotid) {
-		if (flag & NFSV4ACE_IDENTIFIERGROUP) {
-			flag &= ~NFSV4ACE_IDENTIFIERGROUP;
-			acep->ae_tag = ACL_GROUP;
-			aceerr = nfsv4_strtogid(name, len, &gid, p);
-			if (!aceerr)
-				acep->ae_id = (uid_t)gid;
-		} else {
-			acep->ae_tag = ACL_USER;
-			aceerr = nfsv4_strtouid(name, len, &uid, p);
-			if (!aceerr)
-				acep->ae_id = uid;
-		}
-	}
-	if (len > NFSV4_SMALLSTR)
-		free(name, M_NFSSTRING);
-
-	/*
-	 * Now, check for unsupported types or flag bits.
-	 */
-	if (!aceerr && ((acetype != NFSV4ACE_ALLOWEDTYPE &&
-	     acetype != NFSV4ACE_AUDITTYPE && acetype != NFSV4ACE_ALARMTYPE
-	     && acetype != NFSV4ACE_DENIEDTYPE) || flag))
-		aceerr = NFSERR_ATTRNOTSUPP;
-
-	/*
-	 * And turn the mask into perm bits.
-	 */
-	if (!aceerr)
-		aceerr = nfsrv_acemasktoperm(acetype, mask, owner, VREG,
-			&acep->ae_perm);
-	*aceerrp = aceerr;
-	if (acesizep)
-		*acesizep = NFSM_RNDUP(len) + (4 * NFSX_UNSIGNED);
-	return (0);
-nfsmout:
-	return (error);
-}
-
-/*
- * Turn an NFSv4 ace mask into R/W/X flag bits.
- */
-static int
-nfsrv_acemasktoperm(u_int32_t acetype, u_int32_t mask, int owner,
-    enum vtype type, acl_perm_t *permp)
-{
-	acl_perm_t perm = 0x0;
-
-	if (acetype != NFSV4ACE_ALLOWEDTYPE && acetype != NFSV4ACE_DENIEDTYPE){
-		if (mask & ~NFSV4ACE_AUDITMASK)
-			return (NFSERR_ATTRNOTSUPP);
-	}
-	if (mask & NFSV4ACE_DELETE) {
-		return (NFSERR_ATTRNOTSUPP);
-	}
-	if (acetype == NFSV4ACE_DENIEDTYPE) {
-		if (mask & NFSV4ACE_ALLFILESMASK) {
-			return (NFSERR_ATTRNOTSUPP);
-		}
-		if (owner) {
-			if (mask & NFSV4ACE_OWNERMASK) {
-				return (NFSERR_ATTRNOTSUPP);
-			}
-		} else {
-			if ((mask & NFSV4ACE_OWNERMASK) != NFSV4ACE_OWNERMASK) {
-				return (NFSERR_ATTRNOTSUPP);
-			}
-			mask &= ~NFSV4ACE_OWNERMASK;
-		}
-	} else if (acetype == NFSV4ACE_ALLOWEDTYPE) {
-		if ((mask & NFSV4ACE_ALLFILESMASK) != NFSV4ACE_ALLFILESMASK) {
-			return (NFSERR_ATTRNOTSUPP);
-		}
-		mask &= ~NFSV4ACE_ALLFILESMASK;
-		if (owner) {
-			if ((mask & NFSV4ACE_OWNERMASK) != NFSV4ACE_OWNERMASK) {
-				return (NFSERR_ATTRNOTSUPP);
-			}
-			mask &= ~NFSV4ACE_OWNERMASK;
-		} else if (mask & NFSV4ACE_OWNERMASK) {
-			return (NFSERR_ATTRNOTSUPP);
-		}
-	}
-	if (type == VDIR) {
-		if ((mask & NFSV4ACE_DIRREADMASK) == NFSV4ACE_DIRREADMASK) {
-			perm |= ACL_READ;
-			mask &= ~NFSV4ACE_DIRREADMASK;
-		}
-		if ((mask & NFSV4ACE_DIRWRITEMASK) == NFSV4ACE_DIRWRITEMASK) {
-			perm |= ACL_WRITE;
-			mask &= ~NFSV4ACE_DIRWRITEMASK;
-		}
-		if ((mask & NFSV4ACE_DIREXECUTEMASK)==NFSV4ACE_DIREXECUTEMASK){
-			perm |= ACL_EXECUTE;
-			mask &= ~NFSV4ACE_DIREXECUTEMASK;
-		}
-	} else {
-		if (acetype == NFSV4ACE_DENIEDTYPE &&
-		    (mask & NFSV4ACE_SYNCHRONIZE)) {
-			return (NFSERR_ATTRNOTSUPP);
-		}
-		mask &= ~(NFSV4ACE_SYNCHRONIZE | NFSV4ACE_DELETECHILD);
-		if ((mask & NFSV4ACE_READMASK) == NFSV4ACE_READMASK) {
-			perm |= ACL_READ;
-			mask &= ~NFSV4ACE_READMASK;
-		}
-		if ((mask & NFSV4ACE_WRITEMASK) == NFSV4ACE_WRITEMASK) {
-			perm |= ACL_WRITE;
-			mask &= ~NFSV4ACE_WRITEMASK;
-		}
-		if ((mask & NFSV4ACE_EXECUTEMASK) == NFSV4ACE_EXECUTEMASK) {
-			perm |= ACL_EXECUTE;
-			mask &= ~NFSV4ACE_EXECUTEMASK;
-		}
-	}
-	if (mask) {
-		return (NFSERR_ATTRNOTSUPP);
-	}
-	*permp = perm;
-	return (0);
-}
-#endif	/* !NFS4_ACL_EXTATTR_NAME */
-
-#ifdef NFS4_ACL_EXTATTR_NAME
 /* local functions */
 static int nfsrv_buildace(struct nfsrv_descript *, u_char *, int,
     enum vtype, int, int, struct acl_entry *);
@@ -619,70 +436,6 @@ nfsrv_buildacl(struct nfsrv_descript *nd, NFSACL_T *aclp, enum vtype type,
 	return (retlen);
 }
 
-/*
- * Check access for an NFSv4 acl.
- * The vflags are the basic VREAD, VWRITE, VEXEC. The mask is the NFSV4ACE
- * mask bits for the more detailed check.
- * If the more detailed check fails, due to no acl, do a basic one.
- */
-APPLESTATIC int
-nfsrv_aclaccess(vnode_t vp, accmode_t vflags, u_int32_t mask,
-    struct ucred *cred, NFSPROC_T *p)
-{
-	int error = 0;
-	accmode_t access;
-
-	if (nfsrv_useacl == 0) {
-		error = VOP_ACCESS(vp, vflags, cred, p);
-		return (error);
-	}
-
-	/* Convert NFSV4ACE mask to vaccess_t */
-	access = 0;
-	if (mask & NFSV4ACE_READDATA)
-		access |= VREAD;
-	if (mask & NFSV4ACE_LISTDIRECTORY)
-		access |= VREAD;
-	if (mask & NFSV4ACE_WRITEDATA)
-		access |= VWRITE;
-	if (mask & NFSV4ACE_ADDFILE)
-		access |= VWRITE;
-	if (mask & NFSV4ACE_APPENDDATA)
-		access |= VAPPEND;
-	if (mask & NFSV4ACE_ADDSUBDIRECTORY)
-		access |= VAPPEND;
-	if (mask & NFSV4ACE_READNAMEDATTR)
-		access |= VREAD_NAMED_ATTRS;
-	if (mask & NFSV4ACE_WRITENAMEDATTR)
-		access |= VWRITE_NAMED_ATTRS;
-	if (mask & NFSV4ACE_EXECUTE)
-		access |= VEXEC;
-	if (mask & NFSV4ACE_SEARCH)
-		access |= VEXEC;
-	if (mask & NFSV4ACE_DELETECHILD)
-		access |= VDELETE_CHILD;
-	if (mask & NFSV4ACE_READATTRIBUTES)
-		access |= VREAD_ATTRIBUTES;
-	if (mask & NFSV4ACE_WRITEATTRIBUTES)
-		access |= VWRITE_ATTRIBUTES;
-	if (mask & NFSV4ACE_DELETE)
-		access |= VDELETE;
-	if (mask & NFSV4ACE_READACL)
-		access |= VREAD_ACL;
-	if (mask & NFSV4ACE_WRITEACL)
-		access |= VWRITE_ACL;
-	if (mask & NFSV4ACE_WRITEOWNER)
-		access |= VWRITE_OWNER;
-	if (mask & NFSV4ACE_SYNCHRONIZE)
-		access |= VSYNCHRONIZE;
-
-	if (access != 0)
-		error = VOP_ACCESS(vp, access, cred, p);
-	else
-		error = VOP_ACCESS(vp, vflags, cred, p);
-	return (error);
-}
-
 /*
  * Set an NFSv4 acl.
  */
@@ -742,5 +495,3 @@ nfsrv_compareacl(NFSACL_T *aclp1, NFSACL_T *aclp2)
 	}
 	return (0);
 }
-
-#endif	/* NFS4_ACL_EXTATTR_NAME */
diff --git a/sys/fs/nfs/nfs_commonport.c b/sys/fs/nfs/nfs_commonport.c
index bf982aa0c0e..7f27494bb8b 100644
--- a/sys/fs/nfs/nfs_commonport.c
+++ b/sys/fs/nfs/nfs_commonport.c
@@ -421,7 +421,6 @@ newnfs_portinit(void)
 	mtx_init(&nfs_state_mutex, "nfs_state_mutex", NULL, MTX_DEF);
 }
 
-#ifdef NFS4_ACL_EXTATTR_NAME
 /*
  * Determine if the file system supports NFSv4 ACLs.
  * Return 1 if it does, 0 otherwise.
@@ -441,7 +440,6 @@ nfs_supportsnfsv4acls(struct mount *mp)
 	}
 	return (0);
 }
-#endif	/* NFS4_ACL_EXTATTR_NAME */
 
 extern int (*nfsd_call_nfscommon)(struct thread *, struct nfssvc_args *);
 
diff --git a/sys/fs/nfs/nfs_commonsubs.c b/sys/fs/nfs/nfs_commonsubs.c
index b1a7051359b..8e53ae6a369 100644
--- a/sys/fs/nfs/nfs_commonsubs.c
+++ b/sys/fs/nfs/nfs_commonsubs.c
@@ -650,10 +650,8 @@ nfsrv_dissectacl(struct nfsrv_descript *nd, NFSACL_T *aclp, int *aclerrp,
 	int acecnt, error = 0, aceerr = 0, acesize;
 
 	*aclerrp = 0;
-#ifdef NFS4_ACL_EXTATTR_NAME
 	if (aclp)
 		aclp->acl_cnt = 0;
-#endif
 	/*
 	 * Parse out the ace entries and expect them to conform to
 	 * what can be supported by R/W/X bits.
@@ -661,28 +659,22 @@ nfsrv_dissectacl(struct nfsrv_descript *nd, NFSACL_T *aclp, int *aclerrp,
 	NFSM_DISSECT(tl, u_int32_t *, NFSX_UNSIGNED);
 	aclsize = NFSX_UNSIGNED;
 	acecnt = fxdr_unsigned(int, *tl);
-#ifdef NFS4_ACL_EXTATTR_NAME
 	if (acecnt > ACL_MAX_ENTRIES)
 		aceerr = 1;
-#endif
 	if (nfsrv_useacl == 0)
 		aceerr = 1;
 	for (i = 0; i < acecnt; i++) {
-#ifdef NFS4_ACL_EXTATTR_NAME
 		if (aclp && !aceerr)
 			error = nfsrv_dissectace(nd, &aclp->acl_entry[i],
 			    &aceerr, &acesize, p);
 		else
-#endif
 			error = nfsrv_skipace(nd, &acesize);
 		if (error)
 			return (error);
 		aclsize += acesize;
 	}
-#ifdef NFS4_ACL_EXTATTR_NAME
 	if (aclp && !aceerr)
 		aclp->acl_cnt = acecnt;
-#endif
 	if (aceerr)
 		*aclerrp = aceerr;
 	if (aclsizep)
@@ -1014,7 +1006,6 @@ nfsv4_loadattr(struct nfsrv_descript *nd, vnode_t vp,
 		case NFSATTRBIT_ACL:
 			if (compare) {
 			  if (!(*retcmpp)) {
-#ifdef NFS4_ACL_EXTATTR_NAME
 			    if (nfsrv_useacl) {
 				NFSACL_T *naclp;
 
@@ -1028,9 +1019,7 @@ nfsv4_loadattr(struct nfsrv_descript *nd, vnode_t vp,
 				if (aceerr || nfsrv_compareacl(aclp, naclp))
 				    *retcmpp = NFSERR_NOTSAME;
 				acl_free(naclp);
-			    } else
-#endif
-			    {
+			    } else {
 				error = nfsrv_dissectacl(nd, NULL, &aceerr,
 				    &cnt, p);
 				*retcmpp = NFSERR_ATTRNOTSUPP;
@@ -1932,9 +1921,7 @@ nfsv4_fillattr(struct nfsrv_descript *nd, vnode_t vp, NFSACL_T *saclp,
 		aclp = saclp;
 	} else {
 		NFSCLRNOTFILLABLE_ATTRBIT(retbitp);
-#ifdef NFS4_ACL_EXTATTR_NAME
 		naclp = acl_alloc(M_WAITOK);
-#endif
 		aclp = naclp;
 	}
 	nfsvno_getfs(&fsinf, isdgram);
@@ -1957,21 +1944,15 @@ nfsv4_fillattr(struct nfsrv_descript *nd, vnode_t vp, NFSACL_T *saclp,
 	/*
 	 * And the NFSv4 ACL...
 	 */
-	if (NFSISSET_ATTRBIT(retbitp, NFSATTRBIT_ACLSUPPORT)
-#ifdef NFS4_ACL_EXTATTR_NAME
-	    && (nfsrv_useacl == 0 || ((cred != NULL || p != NULL) &&
-		!NFSHASNFS4ACL(vnode_mount(vp))))
-#endif
-	    ) {
+	if (NFSISSET_ATTRBIT(retbitp, NFSATTRBIT_ACLSUPPORT) &&
+	    (nfsrv_useacl == 0 || ((cred != NULL || p != NULL) &&
+		!NFSHASNFS4ACL(vnode_mount(vp))))) {
 		NFSCLRBIT_ATTRBIT(retbitp, NFSATTRBIT_ACLSUPPORT);
 	}
 	if (NFSISSET_ATTRBIT(retbitp, NFSATTRBIT_ACL)) {
-#ifdef NFS4_ACL_EXTATTR_NAME
 		if (nfsrv_useacl == 0 || ((cred != NULL || p != NULL) &&
 		    !NFSHASNFS4ACL(vnode_mount(vp)))) {
-#endif
 			NFSCLRBIT_ATTRBIT(retbitp, NFSATTRBIT_ACL);
-#ifdef NFS4_ACL_EXTATTR_NAME
 		} else if (naclp != NULL) {
 			NFSVOPLOCK(vp, LK_EXCLUSIVE | LK_RETRY, p);
 			error = VOP_ACCESS(vp, VREAD_ACL, cred, p);
@@ -1987,7 +1968,6 @@ nfsv4_fillattr(struct nfsrv_descript *nd, vnode_t vp, NFSACL_T *saclp,
 				NFSCLRBIT_ATTRBIT(retbitp, NFSATTRBIT_ACL);
 			}
 		}
-#endif
 	}
 	/*
 	 * Put out the attribute bitmap for the ones being filled in
@@ -2005,11 +1985,8 @@ nfsv4_fillattr(struct nfsrv_descript *nd, vnode_t vp, NFSACL_T *saclp,
 		switch (bitpos) {
 		case NFSATTRBIT_SUPPORTEDATTRS:
 			NFSSETSUPP_ATTRBIT(&attrbits);
-#ifdef NFS4_ACL_EXTATTR_NAME
 			if (nfsrv_useacl == 0 || ((cred != NULL || p != NULL)
-			    && !NFSHASNFS4ACL(vnode_mount(vp))))
-#endif
-			{
+			    && !NFSHASNFS4ACL(vnode_mount(vp)))) {
 			    NFSCLRBIT_ATTRBIT(&attrbits,NFSATTRBIT_ACLSUPPORT);
 			    NFSCLRBIT_ATTRBIT(&attrbits,NFSATTRBIT_ACL);
 			}
@@ -2082,7 +2059,6 @@ nfsv4_fillattr(struct nfsrv_descript *nd, vnode_t vp, NFSACL_T *saclp,
 		/*
 		 * Recommended Attributes. (Only the supported ones.)
 		 */
-#ifdef NFS4_ACL_EXTATTR_NAME
 		case NFSATTRBIT_ACL:
 			retnum += nfsrv_buildacl(nd, aclp, vnode_vtype(vp), p);
 			break;
@@ -2091,7 +2067,6 @@ nfsv4_fillattr(struct nfsrv_descript *nd, vnode_t vp, NFSACL_T *saclp,
 			*tl = txdr_unsigned(NFSV4ACE_SUPTYPES);
 			retnum += NFSX_UNSIGNED;
 			break;
-#endif
 		case NFSATTRBIT_CANSETTIME:
 			NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED);
 			if (fsinf.fs_properties & NFSV3FSINFO_CANSETTIME)
@@ -2397,10 +2372,8 @@ nfsv4_fillattr(struct nfsrv_descript *nd, vnode_t vp, NFSACL_T *saclp,
 		};
 	    }
 	}
-#ifdef NFS4_ACL_EXTATTR_NAME
 	if (naclp != NULL)
 		acl_free(naclp);
-#endif
 	*retnump = txdr_unsigned(retnum);
 	return (retnum + prefixnum);
 }
diff --git a/sys/fs/nfs/nfs_var.h b/sys/fs/nfs/nfs_var.h
index 2556e354910..17714d70aaa 100644
--- a/sys/fs/nfs/nfs_var.h
+++ b/sys/fs/nfs/nfs_var.h
@@ -329,15 +329,11 @@ void newnfs_timer(void *);
 /* nfs_commonacl.c */
 int nfsrv_dissectace(struct nfsrv_descript *, struct acl_entry *,
     int *, int *, NFSPROC_T *);
-#ifdef NFS4_ACL_EXTATTR_NAME
 int nfsrv_buildacl(struct nfsrv_descript *, NFSACL_T *, enum vtype,
     NFSPROC_T *);
-int nfsrv_aclaccess(vnode_t, accmode_t, u_int32_t, struct ucred *,
-    NFSPROC_T *);
 int nfsrv_setacl(vnode_t, NFSACL_T *, struct ucred *,
     NFSPROC_T *);
 int nfsrv_compareacl(NFSACL_T *, NFSACL_T *);
-#endif
 
 /* nfs_clrpcops.c */
 int nfsrpc_null(vnode_t, struct ucred *, NFSPROC_T *);
@@ -516,8 +512,8 @@ int nfsvno_getattr(vnode_t, struct nfsvattr *, struct ucred *,
 int nfsvno_setattr(vnode_t, struct nfsvattr *, struct ucred *,
     NFSPROC_T *, struct nfsexstuff *);
 int nfsvno_getfh(vnode_t, fhandle_t *, NFSPROC_T *);
-int nfsvno_accchk(vnode_t, u_int32_t, struct ucred *,
-    struct nfsexstuff *, NFSPROC_T *, int, int);
+int nfsvno_accchk(vnode_t, accmode_t, struct ucred *,
+    struct nfsexstuff *, NFSPROC_T *, int, int, u_int32_t *);
 int nfsvno_namei(struct nfsrv_descript *, struct nameidata *,
     vnode_t, int, struct nfsexstuff *, NFSPROC_T *, vnode_t *);
 void nfsvno_setpathbuf(struct nameidata *, char **, u_long **);
@@ -529,7 +525,7 @@ int nfsvno_read(vnode_t, off_t, int, struct ucred *, NFSPROC_T *,
 int nfsvno_write(vnode_t, off_t, int, int, int, mbuf_t,
     char *, struct ucred *, NFSPROC_T *);
 int nfsvno_createsub(struct nfsrv_descript *, struct nameidata *,
-    vnode_t *, struct nfsvattr *, int *, u_char *, NFSDEV_T, NFSPROC_T *,
+    vnode_t *, struct nfsvattr *, int *, int32_t *, NFSDEV_T, NFSPROC_T *,
     struct nfsexstuff *);
 int nfsvno_mknod(struct nameidata *, struct nfsvattr *, struct ucred *,
     NFSPROC_T *);
@@ -552,7 +548,7 @@ int nfsvno_fsync(vnode_t, u_int64_t, int, struct ucred *, NFSPROC_T *);
 int nfsvno_statfs(vnode_t, struct statfs *);
 void nfsvno_getfs(struct nfsfsinfo *, int);
 void nfsvno_open(struct nfsrv_descript *, struct nameidata *, nfsquad_t,
-    nfsv4stateid_t *, struct nfsstate *, int *, struct nfsvattr *, u_char *,
+    nfsv4stateid_t *, struct nfsstate *, int *, struct nfsvattr *, int32_t *,
     int, NFSACL_T *, nfsattrbit_t *, struct ucred *, NFSPROC_T *,
     struct nfsexstuff *, vnode_t *);
 void nfsvno_updfilerev(vnode_t, struct nfsvattr *, struct ucred *,
diff --git a/sys/fs/nfs/nfsport.h b/sys/fs/nfs/nfsport.h
index f320316be7d..c7ef67c51b0 100644
--- a/sys/fs/nfs/nfsport.h
+++ b/sys/fs/nfs/nfsport.h
@@ -125,11 +125,7 @@
 #define	NFSPROC_T	struct thread
 #define	NFSDEV_T	dev_t
 #define	NFSSVCARGS	nfssvc_args
-#ifdef NFS4_ACL_EXTATTR_NAME
 #define	NFSACL_T	struct acl
-#else
-#define	NFSACL_T	void
-#endif
 
 /*
  * These should be defined as the types used for the corresponding VOP's
diff --git a/sys/fs/nfsclient/nfs.h b/sys/fs/nfsclient/nfs.h
index 8029a00c2db..a72ec6da75d 100644
--- a/sys/fs/nfsclient/nfs.h
+++ b/sys/fs/nfsclient/nfs.h
@@ -67,7 +67,6 @@ int ncl_vinvalbuf(struct vnode *, int, struct thread *, int);
 int ncl_asyncio(struct nfsmount *, struct buf *, struct ucred *,
     struct thread *);
 int ncl_doio(struct vnode *, struct buf *, struct ucred *, struct thread *);
-int ncl_msleep(struct thread *, void *, struct mtx *, int, char *, int);
 void ncl_nhinit(void);
 void ncl_nhuninit(void);
 void ncl_nodelock(struct nfsnode *);
diff --git a/sys/fs/nfsclient/nfs_clbio.c b/sys/fs/nfsclient/nfs_clbio.c
index 030e322cd99..3193822f47e 100644
--- a/sys/fs/nfsclient/nfs_clbio.c
+++ b/sys/fs/nfsclient/nfs_clbio.c
@@ -74,101 +74,6 @@ static struct buf *nfs_getcacheblk(struct vnode *vp, daddr_t bn, int size,
 static int nfs_directio_write(struct vnode *vp, struct uio *uiop, 
     struct ucred *cred, int ioflag);
 
-/*
- * Any signal that can interrupt an NFS operation in an intr mount
- * should be added to this set. SIGSTOP and SIGKILL cannot be masked.
- */
-static int nfs_sig_set[] = {
-	SIGINT,
-	SIGTERM,
-	SIGHUP,
-	SIGKILL,
-	SIGSTOP,
-	SIGQUIT
-};
-
-#ifdef notnow
-/*
- * Check to see if one of the signals in our subset is pending on
- * the process (in an intr mount).
- */
-int
-ncl_sig_pending(sigset_t set)
-{
-	int i;
-	
-	for (i = 0 ; i < sizeof(nfs_sig_set)/sizeof(int) ; i++)
-		if (SIGISMEMBER(set, nfs_sig_set[i]))
-			return (1);
-	return (0);
-}
-#endif
- 
-/*
- * The set/restore sigmask functions are used to (temporarily) overwrite
- * the process p_sigmask during an RPC call (for example). These are also
- * used in other places in the NFS client that might tsleep().
- */
-static void
-ncl_set_sigmask(struct thread *td, sigset_t *oldset)
-{
-	sigset_t newset;
-	int i;
-	struct proc *p;
-	
-	SIGFILLSET(newset);
-	if (td == NULL)
-		td = curthread; /* XXX */
-	p = td->td_proc;
-	/* Remove the NFS set of signals from newset */
-	PROC_LOCK(p);
-	mtx_lock(&p->p_sigacts->ps_mtx);
-	for (i = 0 ; i < sizeof(nfs_sig_set)/sizeof(int) ; i++) {
-		/*
-		 * But make sure we leave the ones already masked
-		 * by the process, ie. remove the signal from the
-		 * temporary signalmask only if it wasn't already
-		 * in p_sigmask.
-		 */
-		if (!SIGISMEMBER(td->td_sigmask, nfs_sig_set[i]) &&
-		    !SIGISMEMBER(p->p_sigacts->ps_sigignore, nfs_sig_set[i]))
-			SIGDELSET(newset, nfs_sig_set[i]);
-	}
-	mtx_unlock(&p->p_sigacts->ps_mtx);
-	PROC_UNLOCK(p);
-	kern_sigprocmask(td, SIG_SETMASK, &newset, oldset, 0);
-}
-
-static void
-ncl_restore_sigmask(struct thread *td, sigset_t *set)
-{
-	if (td == NULL)
-		td = curthread; /* XXX */
-	kern_sigprocmask(td, SIG_SETMASK, set, NULL, 0);
-}
-
-/*
- * NFS wrapper to msleep(), that shoves a new p_sigmask and restores the
- * old one after msleep() returns.
- */
-int
-ncl_msleep(struct thread *td, void *ident, struct mtx *mtx, int priority, char *wmesg, int timo)
-{
-	sigset_t oldset;
-	int error;
-	struct proc *p;
-	
-	if ((priority & PCATCH) == 0)
-		return msleep(ident, mtx, priority, wmesg, timo);
-	if (td == NULL)
-		td = curthread; /* XXX */
-	ncl_set_sigmask(td, &oldset);
-	error = msleep(ident, mtx, priority, wmesg, timo);
-	ncl_restore_sigmask(td, &oldset);
-	p = td->td_proc;
-	return (error);
-}
-
 /*
  * Vnode op for VM getpages.
  */
@@ -1356,9 +1261,9 @@ nfs_getcacheblk(struct vnode *vp, daddr_t bn, int size, struct thread *td)
 	if (nmp->nm_flag & NFSMNT_INT) {
  		sigset_t oldset;
 
- 		ncl_set_sigmask(td, &oldset);
+ 		newnfs_set_sigmask(td, &oldset);
 		bp = getblk(vp, bn, size, NFS_PCATCH, 0, 0);
- 		ncl_restore_sigmask(td, &oldset);
+ 		newnfs_restore_sigmask(td, &oldset);
 		while (bp == NULL) {
 			if (newnfs_sigintr(nmp, td))
 				return (NULL);
@@ -1544,9 +1449,9 @@ again:
 			NFS_DPF(ASYNCIO,
 				("ncl_asyncio: waiting for mount %p queue to drain\n", nmp));
 			nmp->nm_bufqwant = TRUE;
- 			error = ncl_msleep(td, &nmp->nm_bufq, &ncl_iod_mutex, 
-					   slpflag | PRIBIO,
- 					   "nfsaio", slptimeo);
+ 			error = newnfs_msleep(td, &nmp->nm_bufq, 
+			    &ncl_iod_mutex, slpflag | PRIBIO, "nfsaio",
+  			   slptimeo);
 			if (error) {
 				error2 = newnfs_sigintr(nmp, td);
 				if (error2) {
diff --git a/sys/fs/nfsclient/nfs_clrpcops.c b/sys/fs/nfsclient/nfs_clrpcops.c
index 37131cf9448..95943a9660b 100644
--- a/sys/fs/nfsclient/nfs_clrpcops.c
+++ b/sys/fs/nfsclient/nfs_clrpcops.c
@@ -81,10 +81,8 @@ static int nfsrpc_createv4(vnode_t , char *, int, struct vattr *,
 static int nfsrpc_locku(struct nfsrv_descript *, struct nfsmount *,
     struct nfscllockowner *, u_int64_t, u_int64_t,
     u_int32_t, struct ucred *, NFSPROC_T *, int);
-#ifdef NFS4_ACL_EXTATTR_NAME
 static int nfsrpc_setaclrpc(vnode_t, struct ucred *, NFSPROC_T *,
     struct acl *, nfsv4stateid_t *, void *);
-#endif
 
 /*
  * nfs null call from vfs.
@@ -983,14 +981,9 @@ nfsrpc_setattr(vnode_t vp, struct vattr *vap, NFSACL_T *aclp,
 		if (vap != NULL)
 			error = nfsrpc_setattrrpc(vp, vap, &stateid, cred, p,
 			    rnap, attrflagp, stuff);
-#ifdef NFS4_ACL_EXTATTR_NAME
 		else
 			error = nfsrpc_setaclrpc(vp, cred, p, aclp, &stateid,
 			    stuff);
-#else
-		else
-			error = EOPNOTSUPP;
-#endif
 		if (error == NFSERR_STALESTATEID)
 			nfscl_initiate_recovery(nmp->nm_clp);
 		if (lckp != NULL)
@@ -1633,10 +1626,15 @@ nfsrpc_mknod(vnode_t dvp, char *name, int namelen, struct vattr *vap,
 		return (ENAMETOOLONG);
 	NFSCL_REQSTART(nd, NFSPROC_MKNOD, dvp);
 	if (nd->nd_flag & ND_NFSV4) {
-		NFSM_BUILD(tl, u_int32_t *, 3 * NFSX_UNSIGNED);
-		*tl++ = vtonfsv34_type(vtyp);
-		*tl++ = txdr_unsigned(NFSMAJOR(rdev));
-		*tl = txdr_unsigned(NFSMINOR(rdev));
+		if (vtyp == VBLK || vtyp == VCHR) {
+			NFSM_BUILD(tl, u_int32_t *, 3 * NFSX_UNSIGNED);
+			*tl++ = vtonfsv34_type(vtyp);
+			*tl++ = txdr_unsigned(NFSMAJOR(rdev));
+			*tl = txdr_unsigned(NFSMINOR(rdev));
+		} else {
+			NFSM_BUILD(tl, u_int32_t *, NFSX_UNSIGNED);
+			*tl = vtonfsv34_type(vtyp);
+		}
 	}
 	(void) nfsm_strtom(nd, name, namelen);
 	if (nd->nd_flag & ND_NFSV3) {
@@ -4094,7 +4092,6 @@ nfsrpc_delegreturn(struct nfscldeleg *dp, struct ucred *cred,
 	return (error);
 }
 
-#ifdef NFS4_ACL_EXTATTR_NAME
 /*
  * nfs getacl call.
  */
@@ -4168,5 +4165,3 @@ nfsrpc_setaclrpc(vnode_t vp, struct ucred *cred, NFSPROC_T *p,
 	mbuf_freem(nd->nd_mrep);
 	return (nd->nd_repstat);
 }
-
-#endif	/* NFS4_ACL_EXTATTR_NAME */
diff --git a/sys/fs/nfsclient/nfs_clstate.c b/sys/fs/nfsclient/nfs_clstate.c
index 67727e0c741..568c5de640a 100644
--- a/sys/fs/nfsclient/nfs_clstate.c
+++ b/sys/fs/nfsclient/nfs_clstate.c
@@ -116,8 +116,8 @@ static int nfscl_checkconflict(struct nfscllockownerhead *, struct nfscllock *,
     u_int8_t *, struct nfscllock **);
 static void nfscl_freelockowner(struct nfscllockowner *, int);
 static void nfscl_freealllocks(struct nfscllockownerhead *, int);
-static int nfscl_localconflict(struct nfsclclient *, struct nfscllock *,
-    u_int8_t *, struct nfscldeleg *, struct nfscllock **);
+static int nfscl_localconflict(struct nfsclclient *, u_int8_t *, int,
+    struct nfscllock *, u_int8_t *, struct nfscldeleg *, struct nfscllock **);
 static void nfscl_newopen(struct nfsclclient *, struct nfscldeleg *,
     struct nfsclowner **, struct nfsclowner **, struct nfsclopen **,
     struct nfsclopen **, u_int8_t *, u_int8_t *, int, int *);
@@ -955,7 +955,8 @@ nfscl_getbytelock(vnode_t vp, u_int64_t off, u_int64_t len,
 			lhp = &op->nfso_lock;
 	}
 	if (!error && !recovery)
-		error = nfscl_localconflict(clp, nlop, ownp, ldp, NULL);
+		error = nfscl_localconflict(clp, np->n_fhp->nfh_fh,
+		    np->n_fhp->nfh_len, nlop, ownp, ldp, NULL);
 	if (error) {
 		if (!recovery) {
 			nfscl_clrelease(clp);
@@ -1047,7 +1048,7 @@ nfscl_relbytelock(vnode_t vp, u_int64_t off, u_int64_t len,
 	struct nfscldeleg *dp;
 	struct nfsnode *np;
 	u_int8_t own[NFSV4CL_LOCKNAMELEN];
-	int ret = 0, fnd, error;
+	int ret = 0, fnd;
 
 	np = VTONFS(vp);
 	*lpp = NULL;
@@ -1082,16 +1083,6 @@ nfscl_relbytelock(vnode_t vp, u_int64_t off, u_int64_t len,
 		dp = nfscl_finddeleg(clp, np->n_fhp->nfh_fh,
 		    np->n_fhp->nfh_len);
 
-	/* Search for a local conflict. */
-	error = nfscl_localconflict(clp, nlop, own, dp, NULL);
-	if (error) {
-		NFSUNLOCKCLSTATE();
-		FREE((caddr_t)nlop, M_NFSCLLOCK);
-		if (other_lop != NULL)
-			FREE((caddr_t)other_lop, M_NFSCLLOCK);
-		return (error);
-	}
-
 	/*
 	 * First, unlock any local regions on a delegation.
 	 */
@@ -3169,8 +3160,9 @@ nfscl_getmnt(u_int32_t cbident)
  *   a write lock or this is an unlock.
  */
 static int
-nfscl_localconflict(struct nfsclclient *clp, struct nfscllock *nlop,
-    u_int8_t *own, struct nfscldeleg *dp, struct nfscllock **lopp)
+nfscl_localconflict(struct nfsclclient *clp, u_int8_t *fhp, int fhlen,
+    struct nfscllock *nlop, u_int8_t *own, struct nfscldeleg *dp,
+    struct nfscllock **lopp)
 {
 	struct nfsclowner *owp;
 	struct nfsclopen *op;
@@ -3183,10 +3175,13 @@ nfscl_localconflict(struct nfsclclient *clp, struct nfscllock *nlop,
 	}
 	LIST_FOREACH(owp, &clp->nfsc_owner, nfsow_list) {
 		LIST_FOREACH(op, &owp->nfsow_open, nfso_list) {
-			ret = nfscl_checkconflict(&op->nfso_lock, nlop, own,
-			    lopp);
-			if (ret)
-				return (ret);
+			if (op->nfso_fhlen == fhlen &&
+			    !NFSBCMP(op->nfso_fh, fhp, fhlen)) {
+				ret = nfscl_checkconflict(&op->nfso_lock, nlop,
+				    own, lopp);
+				if (ret)
+					return (ret);
+			}
 		}
 	}
 	return (0);
@@ -3245,10 +3240,9 @@ nfscl_lockt(vnode_t vp, struct nfsclclient *clp, u_int64_t off,
 	nfscl_filllockowner(p, own);
 	NFSLOCKCLSTATE();
 	dp = nfscl_finddeleg(clp, np->n_fhp->nfh_fh, np->n_fhp->nfh_len);
-	error = nfscl_localconflict(clp, &nlck, own, dp, &lop);
-	if (error == NFSERR_DENIED)
-		error = EACCES;
-	if (error) {
+	error = nfscl_localconflict(clp, np->n_fhp->nfh_fh, np->n_fhp->nfh_len,
+	    &nlck, own, dp, &lop);
+	if (error != 0) {
 		fl->l_whence = SEEK_SET;
 		fl->l_start = lop->nfslo_first;
 		if (lop->nfslo_end == NFS64BITSSET)
@@ -3257,6 +3251,7 @@ nfscl_lockt(vnode_t vp, struct nfsclclient *clp, u_int64_t off,
 			fl->l_len = lop->nfslo_end - lop->nfslo_first;
 		fl->l_pid = (pid_t)0;
 		fl->l_type = lop->nfslo_type;
+		error = -1;			/* no RPC required */
 	} else if (dp != NULL && ((dp->nfsdl_flags & NFSCLDL_WRITE) ||
 	    fl->l_type == F_RDLCK)) {
 		/*
diff --git a/sys/fs/nfsclient/nfs_clvnops.c b/sys/fs/nfsclient/nfs_clvnops.c
index c60ae57c878..251966df56f 100644
--- a/sys/fs/nfsclient/nfs_clvnops.c
+++ b/sys/fs/nfsclient/nfs_clvnops.c
@@ -128,10 +128,8 @@ static vop_readlink_t	nfs_readlink;
 static vop_print_t	nfs_print;
 static vop_advlock_t	nfs_advlock;
 static vop_advlockasync_t nfs_advlockasync;
-#ifdef NFS4_ACL_EXTATTR_NAME
 static vop_getacl_t nfs_getacl;
 static vop_setacl_t nfs_setacl;
-#endif
 
 /*
  * Global vfs data structures for nfs
@@ -166,10 +164,8 @@ struct vop_vector newnfs_vnodeops = {
 	.vop_strategy =		nfs_strategy,
 	.vop_symlink =		nfs_symlink,
 	.vop_write =		ncl_write,
-#ifdef NFS4_ACL_EXTATTR_NAME
 	.vop_getacl =		nfs_getacl,
 	.vop_setacl =		nfs_setacl,
-#endif
 };
 
 struct vop_vector newnfs_fifoops = {
@@ -331,12 +327,9 @@ nfs_access(struct vop_access_args *ap)
 	 * unless the file is a socket, fifo, or a block or character
 	 * device resident on the filesystem.
 	 */
-	if ((ap->a_accmode & (VWRITE | VAPPEND
-#ifdef NFS4_ACL_EXTATTR_NAME
-	    | VWRITE_NAMED_ATTRS | VDELETE_CHILD | VWRITE_ATTRIBUTES |
-	    VDELETE | VWRITE_ACL | VWRITE_OWNER
-#endif
-	    )) != 0 && (vp->v_mount->mnt_flag & MNT_RDONLY) != 0) {
+	if ((ap->a_accmode & (VWRITE | VAPPEND | VWRITE_NAMED_ATTRS |
+	    VDELETE_CHILD | VWRITE_ATTRIBUTES | VDELETE | VWRITE_ACL |
+	    VWRITE_OWNER)) != 0 && (vp->v_mount->mnt_flag & MNT_RDONLY) != 0) {
 		switch (vp->v_type) {
 		case VREG:
 		case VDIR:
@@ -366,10 +359,8 @@ nfs_access(struct vop_access_args *ap)
 				mode |= NFSACCESS_EXTEND;
 			if (ap->a_accmode & VEXEC)
 				mode |= NFSACCESS_EXECUTE;
-#ifdef NFS4_ACL_EXTATTR_NAME
 			if (ap->a_accmode & VDELETE)
 				mode |= NFSACCESS_DELETE;
-#endif
 		} else {
 			if (ap->a_accmode & VWRITE)
 				mode |= (NFSACCESS_MODIFY | NFSACCESS_EXTEND);
@@ -377,12 +368,10 @@ nfs_access(struct vop_access_args *ap)
 				mode |= NFSACCESS_EXTEND;
 			if (ap->a_accmode & VEXEC)
 				mode |= NFSACCESS_LOOKUP;
-#ifdef NFS4_ACL_EXTATTR_NAME
 			if (ap->a_accmode & VDELETE)
 				mode |= NFSACCESS_DELETE;
 			if (ap->a_accmode & VDELETE_CHILD)
 				mode |= NFSACCESS_MODIFY;
-#endif
 		}
 		/* XXX safety belt, only make blanket request if caching */
 		if (nfsaccess_cache_timeout > 0) {
@@ -2719,9 +2708,9 @@ loop:
 		mtx_lock(&np->n_mtx);
 		while (np->n_directio_asyncwr > 0) {
 			np->n_flag |= NFSYNCWAIT;
-			error = ncl_msleep(td, (caddr_t)&np->n_directio_asyncwr,
-					   &np->n_mtx, slpflag | (PRIBIO + 1), 
-					   "nfsfsync", 0);
+			error = newnfs_msleep(td, &np->n_directio_asyncwr,
+			    &np->n_mtx, slpflag | (PRIBIO + 1), 
+			    "nfsfsync", 0);
 			if (error) {
 				if (newnfs_sigintr(nmp, td)) {
 					mtx_unlock(&np->n_mtx);
@@ -3136,7 +3125,6 @@ nfs_lock1(struct vop_lock1_args *ap)
 	    ap->a_line));
 }
 
-#ifdef NFS4_ACL_EXTATTR_NAME
 static int
 nfs_getacl(struct vop_getacl_args *ap)
 {
@@ -3168,5 +3156,3 @@ nfs_setacl(struct vop_setacl_args *ap)
 	}
 	return (error);
 }
-
-#endif	/* NFS4_ACL_EXTATTR_NAME */
diff --git a/sys/fs/nfsserver/nfs_nfsdcache.c b/sys/fs/nfsserver/nfs_nfsdcache.c
index a83510e73cc..2598fb83b3a 100644
--- a/sys/fs/nfsserver/nfs_nfsdcache.c
+++ b/sys/fs/nfsserver/nfs_nfsdcache.c
@@ -522,8 +522,9 @@ nfsrvd_sentcache(struct nfsrvcache *rp, struct socket *so, int err)
 	if (!(rp->rc_flag & RC_LOCKED))
 		panic("nfsrvd_sentcache not locked");
 	if (!err) {
-		if (so->so_proto->pr_domain->dom_family != AF_INET ||
-		    so->so_proto->pr_protocol != IPPROTO_TCP)
+		if ((so->so_proto->pr_domain->dom_family != AF_INET &&
+		     so->so_proto->pr_domain->dom_family != AF_INET6) ||
+		     so->so_proto->pr_protocol != IPPROTO_TCP)
 			panic("nfs sent cache");
 		if (nfsrv_getsockseqnum(so, &rp->rc_tcpseq))
 			rp->rc_flag |= RC_TCPSEQ;
diff --git a/sys/fs/nfsserver/nfs_nfsdport.c b/sys/fs/nfsserver/nfs_nfsdport.c
index 0cebc21ce7b..3b7f8d0a1df 100644
--- a/sys/fs/nfsserver/nfs_nfsdport.c
+++ b/sys/fs/nfsserver/nfs_nfsdport.c
@@ -131,32 +131,20 @@ nfsvno_getfh(struct vnode *vp, fhandle_t *fhp, struct thread *p)
 /*
  * Perform access checking for vnodes obtained from file handles that would
  * refer to files already opened by a Unix client. You cannot just use
- * vn_writechk() and VOP_ACCESS() for two reasons.
- * 1 - You must check for exported rdonly as well as MNT_RDONLY for the write case
+ * vn_writechk() and VOP_ACCESSX() for two reasons.
+ * 1 - You must check for exported rdonly as well as MNT_RDONLY for the write
+ *     case.
  * 2 - The owner is to be given access irrespective of mode bits for some
  *     operations, so that processes that chmod after opening a file don't
  *     break.
  */
 int
-nfsvno_accchk(struct vnode *vp, u_int32_t accessbits, struct ucred *cred,
-    struct nfsexstuff *exp, struct thread *p, int override, int vpislocked)
+nfsvno_accchk(struct vnode *vp, accmode_t accmode, struct ucred *cred,
+    struct nfsexstuff *exp, struct thread *p, int override, int vpislocked,
+    u_int32_t *supportedtypep)
 {
 	struct vattr vattr;
 	int error = 0, getret = 0;
-	accmode_t accmode;
-
-	/*
-	 * Convert accessbits to Vxxx flags.
-	 */
-	if (accessbits & (NFSV4ACE_WRITEDATA | NFSV4ACE_APPENDDATA |
-	    NFSV4ACE_ADDFILE | NFSV4ACE_ADDSUBDIRECTORY |
-	    NFSV4ACE_DELETECHILD | NFSV4ACE_WRITEATTRIBUTES |
-	    NFSV4ACE_DELETE | NFSV4ACE_WRITEACL | NFSV4ACE_WRITEOWNER))
-		accmode = VWRITE;
-	else if (accessbits & (NFSV4ACE_EXECUTE | NFSV4ACE_SEARCH))
-		accmode = VEXEC;
-	else
-		accmode = VREAD;
 
 	if (accmode & VWRITE) {
 		/* Just vn_writechk() changed to check rdonly */
@@ -166,7 +154,7 @@ nfsvno_accchk(struct vnode *vp, u_int32_t accessbits, struct ucred *cred,
 		 * device resident on the file system.
 		 */
 		if (NFSVNO_EXRDONLY(exp) ||
-			(vp->v_mount->mnt_flag & MNT_RDONLY)) {
+		    (vp->v_mount->mnt_flag & MNT_RDONLY)) {
 			switch (vp->v_type) {
 			case VREG:
 			case VDIR:
@@ -187,22 +175,26 @@ nfsvno_accchk(struct vnode *vp, u_int32_t accessbits, struct ucred *cred,
 	if (vpislocked == 0)
 		NFSVOPLOCK(vp, LK_EXCLUSIVE | LK_RETRY, p);
 
-#if defined(NFS4_ACL_EXTATTR_NAME) && defined(notyet)
-	/*
-	 * This function should be called once FFS has NFSv4 ACL support
-	 * in it.
-	 */
 	/*
 	 * Should the override still be applied when ACLs are enabled?
 	 */
-	if (nfsrv_useacl != 0 && NFSHASNFS4ACL(vp->v_mount))
-		error = nfsrv_aclaccess(vp, accmode, accessbits, cred, p);
-	else
-#endif
-	if (accessbits == NFSV4ACE_READATTRIBUTES)
-		error = 0;
-	else
-		error = VOP_ACCESS(vp, accmode, cred, p);
+	error = VOP_ACCESSX(vp, accmode, cred, p);
+	if (error != 0 && (accmode & (VDELETE | VDELETE_CHILD))) {
+		/*
+		 * Try again with VEXPLICIT_DENY, to see if the test for
+		 * deletion is supported.
+		 */
+		error = VOP_ACCESSX(vp, accmode | VEXPLICIT_DENY, cred, p);
+		if (error == 0) {
+			if (vp->v_type == VDIR) {
+				accmode &= ~(VDELETE | VDELETE_CHILD);
+				accmode |= VWRITE;
+				error = VOP_ACCESSX(vp, accmode, cred, p);
+			} else if (supportedtypep != NULL) {
+				*supportedtypep &= ~NFSACCESS_DELETE;
+			}
+		}
+	}
 
 	/*
 	 * Allow certain operations for the owner (reads and writes
@@ -720,7 +712,7 @@ nfsvno_write(struct vnode *vp, off_t off, int retlen, int cnt, int stable,
 int
 nfsvno_createsub(struct nfsrv_descript *nd, struct nameidata *ndp,
     struct vnode **vpp, struct nfsvattr *nvap, int *exclusive_flagp,
-    u_char *cverf, NFSDEV_T rdev, struct thread *p, struct nfsexstuff *exp)
+    int32_t *cverf, NFSDEV_T rdev, struct thread *p, struct nfsexstuff *exp)
 {
 	u_quad_t tempsize;
 	int error;
@@ -737,8 +729,8 @@ nfsvno_createsub(struct nfsrv_descript *nd, struct nameidata *ndp,
 				if (*exclusive_flagp) {
 					*exclusive_flagp = 0;
 					NFSVNO_ATTRINIT(nvap);
-					NFSBCOPY(cverf,(caddr_t)&nvap->na_atime,
-					    NFSX_VERF);
+					nvap->na_atime.tv_sec = cverf[0];
+					nvap->na_atime.tv_nsec = cverf[1];
 					error = VOP_SETATTR(ndp->ni_vp,
 					    &nvap->na_vattr, nd->nd_cred);
 				}
@@ -790,9 +782,9 @@ nfsvno_createsub(struct nfsrv_descript *nd, struct nameidata *ndp,
 		else
 			vput(ndp->ni_dvp);
 		if (!error && nvap->na_size != VNOVAL) {
-			error = nfsvno_accchk(*vpp, NFSV4ACE_ADDFILE,
+			error = nfsvno_accchk(*vpp, VWRITE,
 			    nd->nd_cred, exp, p, NFSACCCHK_NOOVERRIDE,
-			    NFSACCCHK_VPISLOCKED);
+			    NFSACCCHK_VPISLOCKED, NULL);
 			if (!error) {
 				tempsize = nvap->na_size;
 				NFSVNO_ATTRINIT(nvap);
@@ -1285,7 +1277,7 @@ nfsvno_statfs(struct vnode *vp, struct statfs *sf)
 void
 nfsvno_open(struct nfsrv_descript *nd, struct nameidata *ndp,
     nfsquad_t clientid, nfsv4stateid_t *stateidp, struct nfsstate *stp,
-    int *exclusive_flagp, struct nfsvattr *nvap, u_char *cverf, int create,
+    int *exclusive_flagp, struct nfsvattr *nvap, int32_t *cverf, int create,
     NFSACL_T *aclp, nfsattrbit_t *attrbitp, struct ucred *cred, struct thread *p,
     struct nfsexstuff *exp, struct vnode **vpp)
 {
@@ -1307,9 +1299,8 @@ nfsvno_open(struct nfsrv_descript *nd, struct nameidata *ndp,
 				if (*exclusive_flagp) {
 					*exclusive_flagp = 0;
 					NFSVNO_ATTRINIT(nvap);
-					NFSBCOPY(cverf,
-					    (caddr_t)&nvap->na_atime,
-					    NFSX_VERF);
+					nvap->na_atime.tv_sec = cverf[0];
+					nvap->na_atime.tv_nsec = cverf[1];
 					nd->nd_repstat = VOP_SETATTR(ndp->ni_vp,
 					    &nvap->na_vattr, cred);
 				} else {
@@ -1335,8 +1326,9 @@ nfsvno_open(struct nfsrv_descript *nd, struct nameidata *ndp,
 				else
 					NFSVNO_EXINIT(&nes);
 				nd->nd_repstat = nfsvno_accchk(vp, 
-				    NFSV4ACE_ADDFILE, cred, &nes, p,
-				    NFSACCCHK_NOOVERRIDE,NFSACCCHK_VPISLOCKED);
+				    VWRITE, cred, &nes, p,
+				    NFSACCCHK_NOOVERRIDE,
+				    NFSACCCHK_VPISLOCKED, NULL);
 				nd->nd_repstat = nfsrv_opencheck(clientid,
 				    stateidp, stp, vp, nd, p, nd->nd_repstat);
 				if (!nd->nd_repstat) {
@@ -1482,9 +1474,9 @@ nfsrvd_readdir(struct nfsrv_descript *nd, int isdgram,
 #endif
 	}
 	if (!nd->nd_repstat)
-		nd->nd_repstat = nfsvno_accchk(vp, NFSV4ACE_SEARCH,
+		nd->nd_repstat = nfsvno_accchk(vp, VEXEC,
 		    nd->nd_cred, exp, p, NFSACCCHK_NOOVERRIDE,
-		    NFSACCCHK_VPISLOCKED);
+		    NFSACCCHK_VPISLOCKED, NULL);
 	if (nd->nd_repstat) {
 		vput(vp);
 		if (nd->nd_flag & ND_NFSV3)
@@ -1676,7 +1668,7 @@ nfsrvd_readdirplus(struct nfsrv_descript *nd, int isdgram,
 	struct nfsvattr nva, at, *nvap = &nva;
 	struct mbuf *mb0, *mb1;
 	struct nfsreferral *refp;
-	int nlen, r, error = 0, getret = 1, vgetret;
+	int nlen, r, error = 0, getret = 1, usevget = 1;
 	int siz, cnt, fullsiz, eofflag, ncookies, entrycnt;
 	caddr_t bpos0, bpos1;
 	u_int64_t off, toff, verf;
@@ -1684,6 +1676,7 @@ nfsrvd_readdirplus(struct nfsrv_descript *nd, int isdgram,
 	nfsattrbit_t attrbits, rderrbits, savbits;
 	struct uio io;
 	struct iovec iv;
+	struct componentname cn;
 
 	if (nd->nd_repstat) {
 		nfsrv_postopattr(nd, getret, &at);
@@ -1752,9 +1745,9 @@ nfsrvd_readdirplus(struct nfsrv_descript *nd, int isdgram,
 	if (!nd->nd_repstat && cnt == 0)
 		nd->nd_repstat = NFSERR_TOOSMALL;
 	if (!nd->nd_repstat)
-		nd->nd_repstat = nfsvno_accchk(vp, NFSV4ACE_SEARCH,
+		nd->nd_repstat = nfsvno_accchk(vp, VEXEC,
 		    nd->nd_cred, exp, p, NFSACCCHK_NOOVERRIDE,
-		    NFSACCCHK_VPISLOCKED);
+		    NFSACCCHK_VPISLOCKED, NULL);
 	if (nd->nd_repstat) {
 		vput(vp);
 		if (nd->nd_flag & ND_NFSV3)
@@ -1762,8 +1755,6 @@ nfsrvd_readdirplus(struct nfsrv_descript *nd, int isdgram,
 		return (0);
 	}
 
-	NFSVOPUNLOCK(vp, 0, p);
-
 	MALLOC(rbuf, caddr_t, siz, M_TEMP, M_WAITOK);
 again:
 	eofflag = 0;
@@ -1781,10 +1772,8 @@ again:
 	io.uio_segflg = UIO_SYSSPACE;
 	io.uio_rw = UIO_READ;
 	io.uio_td = NULL;
-	NFSVOPLOCK(vp, LK_EXCLUSIVE | LK_RETRY, p);
 	nd->nd_repstat = VOP_READDIR(vp, &io, nd->nd_cred, &eofflag, &ncookies,
 	    &cookies);
-	NFSVOPUNLOCK(vp, 0, p);
 	off = (u_int64_t)io.uio_offset;
 	if (io.uio_resid)
 		siz -= io.uio_resid;
@@ -1796,7 +1785,7 @@ again:
 	if (!nd->nd_repstat)
 		nd->nd_repstat = getret;
 	if (nd->nd_repstat) {
-		vrele(vp);
+		vput(vp);
 		if (cookies)
 			free((caddr_t)cookies, M_TEMP);
 		free((caddr_t)rbuf, M_TEMP);
@@ -1809,7 +1798,7 @@ again:
 	 * rpc reply
 	 */
 	if (siz == 0) {
-		vrele(vp);
+		vput(vp);
 		if (nd->nd_flag & ND_NFSV3)
 			nfsrv_postopattr(nd, getret, &at);
 		NFSM_BUILD(tl, u_int32_t *, 4 * NFSX_UNSIGNED);
@@ -1854,33 +1843,7 @@ again:
 		toff = off;
 		goto again;
 	}
-
-	/*
-	 * Probe one of the directory entries to see if the filesystem
-	 * supports VGET for NFSv3. For NFSv4, it will return an
-	 * error later, if attributes are required.
-	 * (To be honest, most if not all NFSv4 clients will require
-	 *  attributes, but??)
-	 */
-	if ((nd->nd_flag & ND_NFSV3)) {
-		vgetret = VFS_VGET(vp->v_mount, dp->d_fileno, LK_EXCLUSIVE,
-		    &nvp);
-		if (vgetret != 0) {
-			if (vgetret == EOPNOTSUPP)
-				nd->nd_repstat = NFSERR_NOTSUPP;
-			else
-				nd->nd_repstat = NFSERR_SERVERFAULT;
-			vrele(vp);
-			if (cookies)
-				free((caddr_t)cookies, M_TEMP);
-			free((caddr_t)rbuf, M_TEMP);
-			nfsrv_postopattr(nd, getret, &at);
-			return (0);
-		}
-		if (!vgetret)
-			vput(nvp);
-		nvp = NULL;
-	}
+	NFSVOPUNLOCK(vp, 0, p);
 
 	/*
 	 * Save this position, in case there is an error before one entry
@@ -1938,9 +1901,41 @@ again:
 				if (nd->nd_flag & ND_NFSV4)
 					refp = nfsv4root_getreferral(NULL,
 					    vp, dp->d_fileno);
-				if (refp == NULL)
-					r = VFS_VGET(vp->v_mount, dp->d_fileno,
-					    LK_EXCLUSIVE, &nvp);
+				if (refp == NULL) {
+					if (usevget)
+						r = VFS_VGET(vp->v_mount,
+						    dp->d_fileno, LK_EXCLUSIVE,
+						    &nvp);
+					else
+						r = EOPNOTSUPP;
+					if (r == EOPNOTSUPP) {
+						if (usevget) {
+							usevget = 0;
+							cn.cn_nameiop = LOOKUP;
+							cn.cn_lkflags =
+							    LK_EXCLUSIVE |
+							    LK_RETRY;
+							cn.cn_cred =
+							    nd->nd_cred;
+							cn.cn_thread = p;
+						}
+						cn.cn_nameptr = dp->d_name;
+						cn.cn_namelen = nlen;
+						cn.cn_flags = ISLASTCN |
+						    NOFOLLOW | LOCKLEAF |
+						    MPSAFE;
+						if (nlen == 2 &&
+						    dp->d_name[0] == '.' &&
+						    dp->d_name[1] == '.')
+							cn.cn_flags |=
+							    ISDOTDOT;
+						if (!VOP_ISLOCKED(vp))
+							vn_lock(vp,
+							    LK_EXCLUSIVE |
+							    LK_RETRY);
+						r = VOP_LOOKUP(vp, &nvp, &cn);
+					}
+				}
 				if (!r) {
 				    if (refp == NULL &&
 					((nd->nd_flag & ND_NFSV3) ||
@@ -2019,7 +2014,10 @@ again:
 		cookiep++;
 		ncookies--;
 	}
-	vrele(vp);
+	if (!usevget && VOP_ISLOCKED(vp))
+		vput(vp);
+	else
+		vrele(vp);
 
 	/*
 	 * If dirlen > cnt, we must strip off the last entry. If that
diff --git a/sys/fs/nfsserver/nfs_nfsdserv.c b/sys/fs/nfsserver/nfs_nfsdserv.c
index 668c7fb585b..e56610b660e 100644
--- a/sys/fs/nfsserver/nfs_nfsdserv.c
+++ b/sys/fs/nfsserver/nfs_nfsdserv.c
@@ -88,6 +88,7 @@ nfsrvd_access(struct nfsrv_descript *nd, __unused int isdgram,
 	int getret, error = 0;
 	struct nfsvattr nva;
 	u_int32_t testmode, nfsmode, supported = 0;
+	accmode_t deletebit;
 
 	if (nd->nd_repstat) {
 		nfsrv_postopattr(nd, 1, &nva);
@@ -105,26 +106,30 @@ nfsrvd_access(struct nfsrv_descript *nd, __unused int isdgram,
 	}
 	if (nfsmode & NFSACCESS_READ) {
 		supported |= NFSACCESS_READ;
-		if (nfsvno_accchk(vp, NFSV4ACE_READDATA, nd->nd_cred, exp, p,
-		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED))
+		if (nfsvno_accchk(vp, VREAD, nd->nd_cred, exp, p,
+		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED, &supported))
 			nfsmode &= ~NFSACCESS_READ;
 	}
 	if (nfsmode & NFSACCESS_MODIFY) {
 		supported |= NFSACCESS_MODIFY;
-		if (nfsvno_accchk(vp, NFSV4ACE_WRITEDATA, nd->nd_cred, exp, p,
-		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED))
+		if (nfsvno_accchk(vp, VWRITE, nd->nd_cred, exp, p,
+		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED, &supported))
 			nfsmode &= ~NFSACCESS_MODIFY;
 	}
 	if (nfsmode & NFSACCESS_EXTEND) {
 		supported |= NFSACCESS_EXTEND;
-		if (nfsvno_accchk(vp, NFSV4ACE_APPENDDATA, nd->nd_cred, exp, p,
-		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED))
+		if (nfsvno_accchk(vp, VWRITE | VAPPEND, nd->nd_cred, exp, p,
+		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED, &supported))
 			nfsmode &= ~NFSACCESS_EXTEND;
 	}
 	if (nfsmode & NFSACCESS_DELETE) {
 		supported |= NFSACCESS_DELETE;
-		if (nfsvno_accchk(vp, NFSV4ACE_DELETE, nd->nd_cred, exp, p,
-		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED))
+		if (vp->v_type == VDIR)
+			deletebit = VDELETE_CHILD;
+		else
+			deletebit = VDELETE;
+		if (nfsvno_accchk(vp, deletebit, nd->nd_cred, exp, p,
+		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED, &supported))
 			nfsmode &= ~NFSACCESS_DELETE;
 	}
 	if (vnode_vtype(vp) == VDIR)
@@ -133,8 +138,8 @@ nfsrvd_access(struct nfsrv_descript *nd, __unused int isdgram,
 		testmode = NFSACCESS_EXECUTE;
 	if (nfsmode & testmode) {
 		supported |= (nfsmode & testmode);
-		if (nfsvno_accchk(vp, NFSV4ACE_EXECUTE, nd->nd_cred, exp, p,
-		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED))
+		if (nfsvno_accchk(vp, VEXEC, nd->nd_cred, exp, p,
+		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED, &supported))
 			nfsmode &= ~testmode;
 	}
 	nfsmode &= supported;
@@ -189,9 +194,9 @@ nfsrvd_getattr(struct nfsrv_descript *nd, int isdgram,
 		}
 		if (!nd->nd_repstat)
 			nd->nd_repstat = nfsvno_accchk(vp,
-			    NFSV4ACE_READATTRIBUTES,
-			    nd->nd_cred, exp, p,
-			    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED);
+			    VREAD_ATTRIBUTES,
+			    nd->nd_cred, exp, p, NFSACCCHK_NOOVERRIDE,
+			    NFSACCCHK_VPISLOCKED, NULL);
 	}
 	if (!nd->nd_repstat)
 		nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
@@ -291,8 +296,9 @@ nfsrvd_setattr(struct nfsrv_descript *nd, __unused int isdgram,
 			else if (nva2.na_uid != nd->nd_cred->cr_uid ||
 			    NFSVNO_EXSTRICTACCESS(exp))
 				nd->nd_repstat = nfsvno_accchk(vp,
-				    NFSV4ACE_WRITEDATA, nd->nd_cred, exp, p,
-				    NFSACCCHK_NOOVERRIDE,NFSACCCHK_VPISLOCKED);
+				    VWRITE, nd->nd_cred, exp, p,
+				    NFSACCCHK_NOOVERRIDE,
+				    NFSACCCHK_VPISLOCKED, NULL);
 		}
 	}
 	if (!nd->nd_repstat && (nd->nd_flag & ND_NFSV4))
@@ -612,13 +618,13 @@ nfsrvd_read(struct nfsrv_descript *nd, __unused int isdgram,
 	if (!nd->nd_repstat &&
 	    (nva.na_uid != nd->nd_cred->cr_uid ||
 	     NFSVNO_EXSTRICTACCESS(exp))) {
-		nd->nd_repstat = nfsvno_accchk(vp, NFSV4ACE_READDATA,
+		nd->nd_repstat = nfsvno_accchk(vp, VREAD,
 		    nd->nd_cred, exp, p,
-		    NFSACCCHK_ALLOWOWNER, NFSACCCHK_VPISLOCKED);
+		    NFSACCCHK_ALLOWOWNER, NFSACCCHK_VPISLOCKED, NULL);
 		if (nd->nd_repstat)
-			nd->nd_repstat = nfsvno_accchk(vp, NFSV4ACE_EXECUTE,
-			    nd->nd_cred, exp, p,
-			    NFSACCCHK_ALLOWOWNER, NFSACCCHK_VPISLOCKED);
+			nd->nd_repstat = nfsvno_accchk(vp, VEXEC,
+			    nd->nd_cred, exp, p, NFSACCCHK_ALLOWOWNER,
+			    NFSACCCHK_VPISLOCKED, NULL);
 	}
 	if ((nd->nd_flag & ND_NFSV4) && !nd->nd_repstat)
 		nd->nd_repstat = nfsrv_lockctrl(vp, &stp, &lop, NULL, clientid,
@@ -788,9 +794,9 @@ nfsrvd_write(struct nfsrv_descript *nd, __unused int isdgram,
 	if (!nd->nd_repstat &&
 	    (forat.na_uid != nd->nd_cred->cr_uid ||
 	     NFSVNO_EXSTRICTACCESS(exp)))
-		nd->nd_repstat = nfsvno_accchk(vp, NFSV4ACE_WRITEDATA,
+		nd->nd_repstat = nfsvno_accchk(vp, VWRITE,
 		    nd->nd_cred, exp, p,
-		    NFSACCCHK_ALLOWOWNER, NFSACCCHK_VPISLOCKED);
+		    NFSACCCHK_ALLOWOWNER, NFSACCCHK_VPISLOCKED, NULL);
 	if ((nd->nd_flag & ND_NFSV4) && !nd->nd_repstat) {
 		nd->nd_repstat = nfsrv_lockctrl(vp, &stp, &lop, NULL, clientid,
 		    &stateid, exp, nd, p);
@@ -865,11 +871,11 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram,
 	int how = NFSCREATE_UNCHECKED, exclusive_flag = 0;
 	NFSDEV_T rdev = 0;
 	vnode_t vp = NULL, dirp = NULL;
-	u_char cverf[NFSX_VERF], *cp;
 	fhandle_t fh;
 	char *bufp;
 	u_long *hashp;
 	enum vtype vtyp;
+	int32_t cverf[2], tverf[2] = { 0, 0 };
 
 	if (nd->nd_repstat) {
 		nfsrv_wcc(nd, dirfor_ret, &dirfor, diraft_ret, &diraft);
@@ -920,8 +926,9 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram,
 					goto nfsmout;
 				break;
 			case NFSCREATE_EXCLUSIVE:
-				NFSM_DISSECT(cp, u_char *, NFSX_VERF);
-				NFSBCOPY(cp, cverf, NFSX_VERF);
+				NFSM_DISSECT(tl, u_int32_t *, NFSX_VERF);
+				cverf[0] = *tl++;
+				cverf[1] = *tl;
 				exclusive_flag = 1;
 				break;
 			};
@@ -988,6 +995,10 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram,
 			nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred,
 			    p);
 		vput(vp);
+		if (!nd->nd_repstat) {
+			tverf[0] = nva.na_atime.tv_sec;
+			tverf[1] = nva.na_atime.tv_nsec;
+		}
 	}
 	if (nd->nd_flag & ND_NFSV2) {
 		if (!nd->nd_repstat) {
@@ -995,8 +1006,8 @@ nfsrvd_create(struct nfsrv_descript *nd, __unused int isdgram,
 			nfsrv_fillattr(nd, &nva);
 		}
 	} else {
-		if (exclusive_flag && !nd->nd_repstat &&
-			NFSBCMP(cverf, (caddr_t)&nva.na_atime, NFSX_VERF))
+		if (exclusive_flag && !nd->nd_repstat && (cverf[0] != tverf[0]
+		    || cverf[1] != tverf[1]))
 			nd->nd_repstat = EEXIST;
 		diraft_ret = nfsvno_getattr(dirp, &diraft, nd->nd_cred, p);
 		vrele(dirp);
@@ -2141,17 +2152,17 @@ nfsrvd_lock(struct nfsrv_descript *nd, __unused int isdgram,
 	}
 	if (!nd->nd_repstat) {
 	    if (lflags & NFSLCK_WRITE) {
-		nd->nd_repstat = nfsvno_accchk(vp, NFSV4ACE_WRITEDATA,
+		nd->nd_repstat = nfsvno_accchk(vp, VWRITE,
 		    nd->nd_cred, exp, p, NFSACCCHK_ALLOWOWNER,
-		    NFSACCCHK_VPISLOCKED);
+		    NFSACCCHK_VPISLOCKED, NULL);
 	    } else {
-		nd->nd_repstat = nfsvno_accchk(vp, NFSV4ACE_READDATA,
+		nd->nd_repstat = nfsvno_accchk(vp, VREAD,
 		    nd->nd_cred, exp, p, NFSACCCHK_ALLOWOWNER,
-		    NFSACCCHK_VPISLOCKED);
+		    NFSACCCHK_VPISLOCKED, NULL);
 		if (nd->nd_repstat)
-		    nd->nd_repstat = nfsvno_accchk(vp, NFSV4ACE_EXECUTE,
+		    nd->nd_repstat = nfsvno_accchk(vp, VEXEC,
 			nd->nd_cred, exp, p, NFSACCCHK_ALLOWOWNER,
-			NFSACCCHK_VPISLOCKED);
+			NFSACCCHK_VPISLOCKED, NULL);
 	    }
 	}
 
@@ -2406,7 +2417,7 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram,
 	int error = 0, create, claim, exclusive_flag = 0;
 	u_int32_t rflags = NFSV4OPEN_LOCKTYPEPOSIX, acemask;
 	int how = NFSCREATE_UNCHECKED;
-	u_char cverf[NFSX_VERF];
+	int32_t cverf[2], tverf[2] = { 0, 0 };
 	vnode_t vp = NULL, dirp = NULL;
 	struct nfsvattr nva, dirfor, diraft;
 	struct nameidata named;
@@ -2517,7 +2528,8 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram,
 			break;
 		case NFSCREATE_EXCLUSIVE:
 			NFSM_DISSECT(tl, u_int32_t *, NFSX_VERF);
-			NFSBCOPY((caddr_t)tl, cverf, NFSX_VERF);
+			cverf[0] = *tl++;
+			cverf[1] = *tl;
 			break;
 		default:
 			nd->nd_repstat = NFSERR_BADXDR;
@@ -2666,21 +2678,26 @@ nfsrvd_open(struct nfsrv_descript *nd, __unused int isdgram,
 		nd->nd_repstat = NFSERR_INVAL;
 	}
 	if (!nd->nd_repstat && (stp->ls_flags & NFSLCK_WRITEACCESS))
-	    nd->nd_repstat = nfsvno_accchk(vp, NFSV4ACE_WRITEDATA, nd->nd_cred,
-	        exp, p, NFSACCCHK_ALLOWOWNER, NFSACCCHK_VPISLOCKED);
+	    nd->nd_repstat = nfsvno_accchk(vp, VWRITE, nd->nd_cred,
+	        exp, p, NFSACCCHK_ALLOWOWNER, NFSACCCHK_VPISLOCKED, NULL);
 	if (!nd->nd_repstat && (stp->ls_flags & NFSLCK_READACCESS)) {
-	    nd->nd_repstat = nfsvno_accchk(vp, NFSV4ACE_READDATA, nd->nd_cred,
-	        exp, p, NFSACCCHK_ALLOWOWNER, NFSACCCHK_VPISLOCKED);
+	    nd->nd_repstat = nfsvno_accchk(vp, VREAD, nd->nd_cred,
+	        exp, p, NFSACCCHK_ALLOWOWNER, NFSACCCHK_VPISLOCKED, NULL);
 	    if (nd->nd_repstat)
-		nd->nd_repstat = nfsvno_accchk(vp, NFSV4ACE_EXECUTE,
+		nd->nd_repstat = nfsvno_accchk(vp, VEXEC,
 		    nd->nd_cred, exp, p, NFSACCCHK_ALLOWOWNER,
-		    NFSACCCHK_VPISLOCKED);
+		    NFSACCCHK_VPISLOCKED, NULL);
 	}
 
-	if (!nd->nd_repstat)
+	if (!nd->nd_repstat) {
 		nd->nd_repstat = nfsvno_getattr(vp, &nva, nd->nd_cred, p);
-	if (!nd->nd_repstat && exclusive_flag &&
-	    NFSBCMP(cverf, (caddr_t)&nva.na_atime, NFSX_VERF))
+		if (!nd->nd_repstat) {
+			tverf[0] = nva.na_atime.tv_sec;
+			tverf[1] = nva.na_atime.tv_nsec;
+		}
+	}
+	if (!nd->nd_repstat && exclusive_flag && (cverf[0] != tverf[0] ||
+	    cverf[1] != tverf[1]))
 		nd->nd_repstat = EEXIST;
 	/*
 	 * Do the open locking/delegation stuff.
diff --git a/sys/fs/nfsserver/nfs_nfsdstate.c b/sys/fs/nfsserver/nfs_nfsdstate.c
index 77942783155..ba97c545e52 100644
--- a/sys/fs/nfsserver/nfs_nfsdstate.c
+++ b/sys/fs/nfsserver/nfs_nfsdstate.c
@@ -1753,7 +1753,7 @@ tryagain:
 		(new_lop->lo_flags == NFSLCK_WRITE ||
 		 lop->lo_flags == NFSLCK_WRITE) &&
 		lckstp != lop->lo_stp &&
-		(lckstp->ls_clp != lop->lo_stp->ls_clp ||
+		(clp != lop->lo_stp->ls_clp ||
 		 lckstp->ls_ownerlen != lop->lo_stp->ls_ownerlen ||
 		 NFSBCMP(lckstp->ls_owner, lop->lo_stp->ls_owner,
 		    lckstp->ls_ownerlen))) {
diff --git a/sys/fs/ntfs/ntfs.h b/sys/fs/ntfs/ntfs.h
index 3e88086c408..4f6431f3715 100644
--- a/sys/fs/ntfs/ntfs.h
+++ b/sys/fs/ntfs/ntfs.h
@@ -183,6 +183,7 @@ struct attr_indexentry {
 };
 
 #define	NTFS_FILEMAGIC	(u_int32_t)(0x454C4946)
+#define	NTFS_BLOCK_SIZE	512
 #define	NTFS_FRFLAG_DIR	0x0002
 struct filerec {
 	struct fixuphdr fr_fixup;
@@ -257,6 +258,7 @@ struct ntfsmount {
  	char **		ntm_u28;	/* Unicode to 8 bit */
 	void *		ntm_ic_l2u;	/* Local to Unicode (iconv) */
 	void *		ntm_ic_u2l;	/* Unicode to Local (iconv) */
+	u_int8_t	ntm_multiplier; /* NTFS blockno to DEV_BSIZE sectorno */
 };
 
 #define ntm_mftcn	ntm_bootfile.bf_mftcn
diff --git a/sys/fs/ntfs/ntfs_subr.c b/sys/fs/ntfs/ntfs_subr.c
index f7157419ea1..a6c3b85fa24 100644
--- a/sys/fs/ntfs/ntfs_subr.c
+++ b/sys/fs/ntfs/ntfs_subr.c
@@ -278,6 +278,7 @@ ntfs_loadntnode(
 
 		bn = ntfs_cntobn(ntmp->ntm_mftcn) +
 			ntmp->ntm_bpmftrec * ip->i_number;
+		bn *= ntmp->ntm_multiplier;
 
 		error = bread(ntmp->ntm_devvp,
 			      bn, ntfs_bntob(ntmp->ntm_bpmftrec),
@@ -581,7 +582,7 @@ ntfs_attrtontvattr(
 		memcpy(vap->va_datap, (caddr_t) rap + rap->a_r.a_dataoff,
 		       rap->a_r.a_datalen);
 	}
-	ddprintf((", len: %d", vap->va_datalen));
+	ddprintf((", len: %lld", vap->va_datalen));
 
 	if (error)
 		free(vap, M_NTFSNTVATTR);
@@ -1491,11 +1492,13 @@ ntfs_writentvattr_plain(
 				(u_int32_t) left));
 			if ((off == 0) && (tocopy == ntfs_cntob(cl)))
 			{
-				bp = getblk(ntmp->ntm_devvp, ntfs_cntobn(cn),
+				bp = getblk(ntmp->ntm_devvp, ntfs_cntobn(cn)
+					    * ntmp->ntm_multiplier,
 					    ntfs_cntob(cl), 0, 0, 0);
 				clrbuf(bp);
 			} else {
-				error = bread(ntmp->ntm_devvp, ntfs_cntobn(cn),
+				error = bread(ntmp->ntm_devvp, ntfs_cntobn(cn)
+					      * ntmp->ntm_multiplier,
 					      ntfs_cntob(cl), NOCRED, &bp);
 				if (error) {
 					brelse(bp);
@@ -1602,7 +1605,8 @@ ntfs_readntvattr_plain(
 						(u_int32_t) tocopy, 
 						(u_int32_t) left));
 					error = bread(ntmp->ntm_devvp,
-						      ntfs_cntobn(cn),
+						      ntfs_cntobn(cn)
+						      * ntmp->ntm_multiplier,
 						      ntfs_cntob(cl),
 						      NOCRED, &bp);
 					if (error) {
@@ -1878,7 +1882,7 @@ ntfs_procfixups(
 		       fhp->fh_magic, magic);
 		return (EINVAL);
 	}
-	if ((fhp->fh_fnum - 1) * ntmp->ntm_bps != len) {
+	if ((fhp->fh_fnum - 1) * NTFS_BLOCK_SIZE != len) {
 		printf("ntfs_procfixups: " \
 		       "bad fixups number: %d for %ld bytes block\n", 
 		       fhp->fh_fnum, (long)len);	/* XXX printf kludge */
@@ -1889,7 +1893,7 @@ ntfs_procfixups(
 		return (EINVAL);
 	}
 	fxp = (u_int16_t *) (buf + fhp->fh_foff);
-	cfxp = (u_int16_t *) (buf + ntmp->ntm_bps - 2);
+	cfxp = (u_int16_t *) (buf + NTFS_BLOCK_SIZE - 2);
 	fixup = *fxp++;
 	for (i = 1; i < fhp->fh_fnum; i++, fxp++) {
 		if (*cfxp != fixup) {
@@ -1897,7 +1901,7 @@ ntfs_procfixups(
 			return (EINVAL);
 		}
 		*cfxp = *fxp;
-		cfxp = (u_int16_t *) ((caddr_t) cfxp + ntmp->ntm_bps);
+		cfxp = (u_int16_t *) ((caddr_t) cfxp + NTFS_BLOCK_SIZE);
 	}
 	return (0);
 }
diff --git a/sys/fs/ntfs/ntfs_vfsops.c b/sys/fs/ntfs/ntfs_vfsops.c
index 07dc2ddb2f2..ab5eede3f72 100644
--- a/sys/fs/ntfs/ntfs_vfsops.c
+++ b/sys/fs/ntfs/ntfs_vfsops.c
@@ -316,6 +316,8 @@ ntfs_mountfs(devvp, mp, td)
 		else
 			ntmp->ntm_bpmftrec = (1 << (-cpr)) / ntmp->ntm_bps;
 	}
+	ntmp->ntm_multiplier = ntmp->ntm_bps / DEV_BSIZE;
+
 	dprintf(("ntfs_mountfs(): bps: %d, spc: %d, media: %x, mftrecsz: %d (%d sects)\n",
 		ntmp->ntm_bps,ntmp->ntm_spc,ntmp->ntm_bootfile.bf_media,
 		ntmp->ntm_mftrecsz,ntmp->ntm_bpmftrec));
diff --git a/sys/fs/portalfs/portal_vnops.c b/sys/fs/portalfs/portal_vnops.c
index 8d30ebbcc97..64e5afda33a 100644
--- a/sys/fs/portalfs/portal_vnops.c
+++ b/sys/fs/portalfs/portal_vnops.c
@@ -246,7 +246,7 @@ portal_open(ap)
 	/*
 	 * Create a new socket.
 	 */
-	error = socreate(AF_UNIX, &so, SOCK_STREAM, 0, ap->a_td->td_ucred,
+	error = socreate(AF_UNIX, &so, SOCK_STREAM, 0, ap->a_cred,
 	    ap->a_td);
 	if (error)
 		goto bad;
diff --git a/sys/geom/concat/g_concat.c b/sys/geom/concat/g_concat.c
index a12f7b830e0..1f523755c7d 100644
--- a/sys/geom/concat/g_concat.c
+++ b/sys/geom/concat/g_concat.c
@@ -347,14 +347,14 @@ static void
 g_concat_check_and_run(struct g_concat_softc *sc)
 {
 	struct g_concat_disk *disk;
+	struct g_provider *pp;
 	u_int no, sectorsize = 0;
 	off_t start;
 
 	if (g_concat_nvalid(sc) != sc->sc_ndisks)
 		return;
 
-	sc->sc_provider = g_new_providerf(sc->sc_geom, "concat/%s",
-	    sc->sc_name);
+	pp = g_new_providerf(sc->sc_geom, "concat/%s", sc->sc_name);
 	start = 0;
 	for (no = 0; no < sc->sc_ndisks; no++) {
 		disk = &sc->sc_disks[no];
@@ -371,10 +371,13 @@ g_concat_check_and_run(struct g_concat_softc *sc)
 			    disk->d_consumer->provider->sectorsize);
 		}
 	}
-	sc->sc_provider->sectorsize = sectorsize;
+	pp->sectorsize = sectorsize;
 	/* We have sc->sc_disks[sc->sc_ndisks - 1].d_end in 'start'. */
-	sc->sc_provider->mediasize = start;
-	g_error_provider(sc->sc_provider, 0);
+	pp->mediasize = start;
+	pp->stripesize = sc->sc_disks[0].d_consumer->provider->stripesize;
+	pp->stripeoffset = sc->sc_disks[0].d_consumer->provider->stripeoffset;
+	sc->sc_provider = pp;
+	g_error_provider(pp, 0);
 
 	G_CONCAT_DEBUG(0, "Device %s activated.", sc->sc_name);
 }
diff --git a/sys/geom/gate/g_gate.c b/sys/geom/gate/g_gate.c
index 3737ee05868..26df0f41855 100644
--- a/sys/geom/gate/g_gate.c
+++ b/sys/geom/gate/g_gate.c
@@ -72,7 +72,7 @@ static struct cdevsw g_gate_cdevsw = {
 
 
 static LIST_HEAD(, g_gate_softc) g_gate_list =
-    LIST_HEAD_INITIALIZER(&g_gate_list);
+    LIST_HEAD_INITIALIZER(g_gate_list);
 static struct mtx g_gate_list_mtx;
 
 
diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c
index 8b560abe37b..b2d9d3b94fb 100644
--- a/sys/geom/geom_dev.c
+++ b/sys/geom/geom_dev.c
@@ -299,8 +299,8 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread
 		}
 		while (length > 0) { 
 			chunk = length;
-			if (chunk > 1024 * cp->provider->sectorsize)
-				chunk = 1024 * cp->provider->sectorsize;
+			if (chunk > 65536 * cp->provider->sectorsize)
+				chunk = 65536 * cp->provider->sectorsize;
 			error = g_delete_data(cp, offset, chunk);
 			length -= chunk;
 			offset += chunk;
@@ -323,7 +323,12 @@ g_dev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag, struct thread
 			return (ENOENT);
 		strlcpy(data, pp->name, i);
 		break;
-
+	case DIOCGSTRIPESIZE:
+		*(off_t *)data = cp->provider->stripesize;
+		break;
+	case DIOCGSTRIPEOFFSET:
+		*(off_t *)data = cp->provider->stripeoffset;
+		break;
 	default:
 		if (cp->provider->geom->ioctl != NULL) {
 			error = cp->provider->geom->ioctl(cp->provider, cmd, data, fflag, td);
diff --git a/sys/geom/geom_io.c b/sys/geom/geom_io.c
index c95840a1a3b..0b6525e79e8 100644
--- a/sys/geom/geom_io.c
+++ b/sys/geom/geom_io.c
@@ -391,6 +391,7 @@ void
 g_io_request(struct bio *bp, struct g_consumer *cp)
 {
 	struct g_provider *pp;
+	int first;
 
 	KASSERT(cp != NULL, ("NULL cp in g_io_request"));
 	KASSERT(bp != NULL, ("NULL bp in g_io_request"));
@@ -463,12 +464,14 @@ g_io_request(struct bio *bp, struct g_consumer *cp)
 
 	pp->nstart++;
 	cp->nstart++;
+	first = TAILQ_EMPTY(&g_bio_run_down.bio_queue);
 	TAILQ_INSERT_TAIL(&g_bio_run_down.bio_queue, bp, bio_queue);
 	g_bio_run_down.bio_queue_length++;
 	g_bioq_unlock(&g_bio_run_down);
 
 	/* Pass it on down. */
-	wakeup(&g_wait_down);
+	if (first)
+		wakeup(&g_wait_down);
 }
 
 void
@@ -476,6 +479,7 @@ g_io_deliver(struct bio *bp, int error)
 {
 	struct g_consumer *cp;
 	struct g_provider *pp;
+	int first;
 
 	KASSERT(bp != NULL, ("NULL bp in g_io_deliver"));
 	pp = bp->bio_to;
@@ -536,11 +540,13 @@ g_io_deliver(struct bio *bp, int error)
 	pp->nend++;
 	if (error != ENOMEM) {
 		bp->bio_error = error;
+		first = TAILQ_EMPTY(&g_bio_run_up.bio_queue);
 		TAILQ_INSERT_TAIL(&g_bio_run_up.bio_queue, bp, bio_queue);
 		bp->bio_flags |= BIO_ONQUEUE;
 		g_bio_run_up.bio_queue_length++;
 		g_bioq_unlock(&g_bio_run_up);
-		wakeup(&g_wait_up);
+		if (first)
+			wakeup(&g_wait_up);
 		return;
 	}
 	g_bioq_unlock(&g_bio_run_up);
diff --git a/sys/geom/label/g_label.c b/sys/geom/label/g_label.c
index e39c2335e74..48329aa3656 100644
--- a/sys/geom/label/g_label.c
+++ b/sys/geom/label/g_label.c
@@ -34,7 +34,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
@@ -316,6 +315,8 @@ g_label_taste(struct g_class *mp, struct g_provider *pp, int flags __unused)
 	for (i = 0; g_labels[i] != NULL; i++) {
 		char label[64];
 
+		if (g_labels[i]->ld_enabled == 0)
+			continue;
 		g_topology_unlock();
 		g_labels[i]->ld_taste(cp, label, sizeof(label));
 		g_topology_lock();
diff --git a/sys/geom/label/g_label.h b/sys/geom/label/g_label.h
index 6e5d8f0d992..06ba2f55ef2 100644
--- a/sys/geom/label/g_label.h
+++ b/sys/geom/label/g_label.h
@@ -30,6 +30,9 @@
 #define	_G_LABEL_H_
 
 #include 
+#ifdef _KERNEL
+#include 
+#endif
 
 #define	G_LABEL_CLASS_NAME	"LABEL"
 
@@ -56,23 +59,34 @@ extern u_int g_label_debug;
 	}								\
 } while (0)
 
+SYSCTL_DECL(_kern_geom_label);
+
+#define	G_LABEL_INIT(kind, label, descr) 				\
+	SYSCTL_NODE(_kern_geom_label, OID_AUTO, kind, CTLFLAG_RD,	\
+	    NULL, "");							\
+	SYSCTL_INT(_kern_geom_label_##kind, OID_AUTO, enable, 		\
+	    CTLFLAG_RW, &label.ld_enabled, 1, descr);			\
+	TUNABLE_INT("kern.geom.label." __XSTRING(kind) ".enable",	\
+	    &label.ld_enabled)
+
 typedef void g_label_taste_t (struct g_consumer *cp, char *label, size_t size);
 
 struct g_label_desc {
 	g_label_taste_t	*ld_taste;
 	char		*ld_dir;
+	int		 ld_enabled;
 };
 
 /* Supported labels. */
-extern const struct g_label_desc g_label_ufs_id;
-extern const struct g_label_desc g_label_ufs_volume;
-extern const struct g_label_desc g_label_iso9660;
-extern const struct g_label_desc g_label_msdosfs;
-extern const struct g_label_desc g_label_ext2fs;
-extern const struct g_label_desc g_label_reiserfs;
-extern const struct g_label_desc g_label_ntfs;
-extern const struct g_label_desc g_label_gpt;
-extern const struct g_label_desc g_label_gpt_uuid;
+extern struct g_label_desc g_label_ufs_id;
+extern struct g_label_desc g_label_ufs_volume;
+extern struct g_label_desc g_label_iso9660;
+extern struct g_label_desc g_label_msdosfs;
+extern struct g_label_desc g_label_ext2fs;
+extern struct g_label_desc g_label_reiserfs;
+extern struct g_label_desc g_label_ntfs;
+extern struct g_label_desc g_label_gpt;
+extern struct g_label_desc g_label_gpt_uuid;
 #endif	/* _KERNEL */
 
 struct g_label_metadata {
diff --git a/sys/geom/label/g_label_ext2fs.c b/sys/geom/label/g_label_ext2fs.c
index 379785f5455..2e004930730 100644
--- a/sys/geom/label/g_label_ext2fs.c
+++ b/sys/geom/label/g_label_ext2fs.c
@@ -86,7 +86,10 @@ exit_free:
 	g_free(fs);
 }
 
-const struct g_label_desc g_label_ext2fs = {
+struct g_label_desc g_label_ext2fs = {
 	.ld_taste = g_label_ext2fs_taste,
-	.ld_dir = "ext2fs"
+	.ld_dir = "ext2fs",
+	.ld_enabled = 1
 };
+
+G_LABEL_INIT(ext2fs, g_label_ext2fs, "Create device nodes for EXT2FS volumes");
diff --git a/sys/geom/label/g_label_gpt.c b/sys/geom/label/g_label_gpt.c
index b186782097a..37014959cff 100644
--- a/sys/geom/label/g_label_gpt.c
+++ b/sys/geom/label/g_label_gpt.c
@@ -153,12 +153,17 @@ g_label_gpt_uuid_taste(struct g_consumer *cp, char *label, size_t size)
 	snprintf_uuid(label, size, &part_gpt_entry->ent.ent_uuid);
 }
 
-const struct g_label_desc g_label_gpt = {
+struct g_label_desc g_label_gpt = {
 	.ld_taste = g_label_gpt_taste,
-	.ld_dir = G_LABEL_GPT_VOLUME_DIR
+	.ld_dir = G_LABEL_GPT_VOLUME_DIR,
+	.ld_enabled = 1
 };
 
-const struct g_label_desc g_label_gpt_uuid = {
+struct g_label_desc g_label_gpt_uuid = {
 	.ld_taste = g_label_gpt_uuid_taste,
-	.ld_dir = G_LABEL_GPT_ID_DIR
+	.ld_dir = G_LABEL_GPT_ID_DIR,
+	.ld_enabled = 1
 };
+
+G_LABEL_INIT(gpt, g_label_gpt, "Create device nodes for GPT labels");
+G_LABEL_INIT(gptid, g_label_gpt_uuid, "Create device nodes for GPT UUIDs");
diff --git a/sys/geom/label/g_label_iso9660.c b/sys/geom/label/g_label_iso9660.c
index 7d29bcd864d..154cefcb4a8 100644
--- a/sys/geom/label/g_label_iso9660.c
+++ b/sys/geom/label/g_label_iso9660.c
@@ -78,7 +78,10 @@ g_label_iso9660_taste(struct g_consumer *cp, char *label, size_t size)
 	}
 }
 
-const struct g_label_desc g_label_iso9660 = {
+struct g_label_desc g_label_iso9660 = {
 	.ld_taste = g_label_iso9660_taste,
-	.ld_dir = G_LABEL_ISO9660_DIR
+	.ld_dir = G_LABEL_ISO9660_DIR,
+	.ld_enabled = 1
 };
+
+G_LABEL_INIT(iso9660, g_label_iso9660, "Create device nodes for ISO9660 volume names");
diff --git a/sys/geom/label/g_label_msdosfs.c b/sys/geom/label/g_label_msdosfs.c
index 94d88d20fa4..5f65a72d20d 100644
--- a/sys/geom/label/g_label_msdosfs.c
+++ b/sys/geom/label/g_label_msdosfs.c
@@ -216,7 +216,10 @@ error:
 		g_free(sector);
 }
 
-const struct g_label_desc g_label_msdosfs = {
+struct g_label_desc g_label_msdosfs = {
 	.ld_taste = g_label_msdosfs_taste,
-	.ld_dir = G_LABEL_MSDOSFS_DIR
+	.ld_dir = G_LABEL_MSDOSFS_DIR,
+	.ld_enabled = 1
 };
+
+G_LABEL_INIT(msdosfs, g_label_msdosfs, "Create device nodes for MSDOSFS volumes");
diff --git a/sys/geom/label/g_label_ntfs.c b/sys/geom/label/g_label_ntfs.c
index 4781d7debbe..1ee3f797f26 100644
--- a/sys/geom/label/g_label_ntfs.c
+++ b/sys/geom/label/g_label_ntfs.c
@@ -114,7 +114,10 @@ done:
 		g_free(filerecp);
 }
 
-const struct g_label_desc g_label_ntfs = {
+struct g_label_desc g_label_ntfs = {
 	.ld_taste = g_label_ntfs_taste,
-	.ld_dir = G_LABEL_NTFS_DIR
+	.ld_dir = G_LABEL_NTFS_DIR,
+	.ld_enabled = 1
 };
+
+G_LABEL_INIT(ntfs, g_label_ntfs, "Create device nodes for NTFS volumes");
diff --git a/sys/geom/label/g_label_reiserfs.c b/sys/geom/label/g_label_reiserfs.c
index 18ce1efd4f8..a912e979914 100644
--- a/sys/geom/label/g_label_reiserfs.c
+++ b/sys/geom/label/g_label_reiserfs.c
@@ -111,7 +111,10 @@ exit_free:
 	g_free(fs);
 }
 
-const struct g_label_desc g_label_reiserfs = {
+struct g_label_desc g_label_reiserfs = {
 	.ld_taste = g_label_reiserfs_taste,
-	.ld_dir = "reiserfs"
+	.ld_dir = "reiserfs",
+	.ld_enabled = 1
 };
+
+G_LABEL_INIT(reiserfs, g_label_reiserfs, "Create device nodes for REISERFS volumes");
diff --git a/sys/geom/label/g_label_ufs.c b/sys/geom/label/g_label_ufs.c
index 8510fc06912..b9b04437f0a 100644
--- a/sys/geom/label/g_label_ufs.c
+++ b/sys/geom/label/g_label_ufs.c
@@ -137,13 +137,17 @@ g_label_ufs_id_taste(struct g_consumer *cp, char *label, size_t size)
 	g_label_ufs_taste_common(cp, label, size, G_LABEL_UFS_ID);
 }
 
-
-const struct g_label_desc g_label_ufs_volume = {
+struct g_label_desc g_label_ufs_volume = {
 	.ld_taste = g_label_ufs_volume_taste,
-	.ld_dir = G_LABEL_UFS_VOLUME_DIR
+	.ld_dir = G_LABEL_UFS_VOLUME_DIR,
+	.ld_enabled = 1
 };
 
-const struct g_label_desc g_label_ufs_id = {
+struct g_label_desc g_label_ufs_id = {
 	.ld_taste = g_label_ufs_id_taste,
-	.ld_dir = G_LABEL_UFS_ID_DIR
+	.ld_dir = G_LABEL_UFS_ID_DIR,
+	.ld_enabled = 1
 };
+
+G_LABEL_INIT(ufsid, g_label_ufs_id, "Create device nodes for UFS file system IDs");
+G_LABEL_INIT(ufs, g_label_ufs_volume, "Create device nodes for UFS volume names");
diff --git a/sys/geom/mirror/g_mirror.c b/sys/geom/mirror/g_mirror.c
index 13ff6eaabb6..404ab986b35 100644
--- a/sys/geom/mirror/g_mirror.c
+++ b/sys/geom/mirror/g_mirror.c
@@ -451,9 +451,6 @@ g_mirror_init_disk(struct g_mirror_softc *sc, struct g_provider *pp,
 	disk->d_id = md->md_did;
 	disk->d_state = G_MIRROR_DISK_STATE_NONE;
 	disk->d_priority = md->md_priority;
-	disk->d_delay.sec = 0;
-	disk->d_delay.frac = 0;
-	binuptime(&disk->d_last_used);
 	disk->d_flags = md->md_dflags;
 	if (md->md_provider[0] != '\0')
 		disk->d_flags |= G_MIRROR_DISK_FLAG_HARDCODED;
@@ -862,16 +859,6 @@ bintime_cmp(struct bintime *bt1, struct bintime *bt2)
 	return (0);
 }
 
-static void
-g_mirror_update_delay(struct g_mirror_disk *disk, struct bio *bp)
-{
-
-	if (disk->d_softc->sc_balance != G_MIRROR_BALANCE_LOAD)
-		return;
-	binuptime(&disk->d_delay);
-	bintime_sub(&disk->d_delay, &bp->bio_t0);
-}
-
 static void
 g_mirror_done(struct bio *bp)
 {
@@ -881,8 +868,8 @@ g_mirror_done(struct bio *bp)
 	bp->bio_cflags = G_MIRROR_BIO_FLAG_REGULAR;
 	mtx_lock(&sc->sc_queue_mtx);
 	bioq_disksort(&sc->sc_queue, bp);
-	wakeup(sc);
 	mtx_unlock(&sc->sc_queue_mtx);
+	wakeup(sc);
 }
 
 static void
@@ -904,8 +891,6 @@ g_mirror_regular_request(struct bio *bp)
 		g_topology_lock();
 		g_mirror_kill_consumer(sc, bp->bio_from);
 		g_topology_unlock();
-	} else {
-		g_mirror_update_delay(disk, bp);
 	}
 
 	pbp->bio_inbed++;
@@ -969,9 +954,9 @@ g_mirror_regular_request(struct bio *bp)
 			pbp->bio_error = 0;
 			mtx_lock(&sc->sc_queue_mtx);
 			bioq_disksort(&sc->sc_queue, pbp);
+			mtx_unlock(&sc->sc_queue_mtx);
 			G_MIRROR_DEBUG(4, "%s: Waking up %p.", __func__, sc);
 			wakeup(sc);
-			mtx_unlock(&sc->sc_queue_mtx);
 		}
 		break;
 	case BIO_DELETE:
@@ -1009,8 +994,8 @@ g_mirror_sync_done(struct bio *bp)
 	bp->bio_cflags = G_MIRROR_BIO_FLAG_SYNC;
 	mtx_lock(&sc->sc_queue_mtx);
 	bioq_disksort(&sc->sc_queue, bp);
-	wakeup(sc);
 	mtx_unlock(&sc->sc_queue_mtx);
+	wakeup(sc);
 }
 
 static void
@@ -1122,9 +1107,9 @@ g_mirror_start(struct bio *bp)
 	}
 	mtx_lock(&sc->sc_queue_mtx);
 	bioq_disksort(&sc->sc_queue, bp);
+	mtx_unlock(&sc->sc_queue_mtx);
 	G_MIRROR_DEBUG(4, "%s: Waking up %p.", __func__, sc);
 	wakeup(sc);
-	mtx_unlock(&sc->sc_queue_mtx);
 }
 
 /*
@@ -1465,30 +1450,35 @@ g_mirror_request_round_robin(struct g_mirror_softc *sc, struct bio *bp)
 	g_io_request(cbp, cp);
 }
 
+#define TRACK_SIZE  (1 * 1024 * 1024)
+#define LOAD_SCALE	256
+#define ABS(x)		(((x) >= 0) ? (x) : (-(x)))
+
 static void
 g_mirror_request_load(struct g_mirror_softc *sc, struct bio *bp)
 {
 	struct g_mirror_disk *disk, *dp;
 	struct g_consumer *cp;
 	struct bio *cbp;
-	struct bintime curtime;
+	int prio, best;
 
-	binuptime(&curtime);
-	/*
-	 * Find a disk which the smallest load.
-	 */
+	/* Find a disk with the smallest load. */
 	disk = NULL;
+	best = INT_MAX;
 	LIST_FOREACH(dp, &sc->sc_disks, d_next) {
 		if (dp->d_state != G_MIRROR_DISK_STATE_ACTIVE)
 			continue;
-		/* If disk wasn't used for more than 2 sec, use it. */
-		if (curtime.sec - dp->d_last_used.sec >= 2) {
-			disk = dp;
-			break;
-		}
-		if (disk == NULL ||
-		    bintime_cmp(&dp->d_delay, &disk->d_delay) < 0) {
+		prio = dp->load;
+		/* If disk head is precisely in position - highly prefer it. */
+		if (dp->d_last_offset == bp->bio_offset)
+			prio -= 2 * LOAD_SCALE;
+		else
+		/* If disk head is close to position - prefer it. */
+		if (ABS(dp->d_last_offset - bp->bio_offset) < TRACK_SIZE)
+			prio -= 1 * LOAD_SCALE;
+		if (prio <= best) {
 			disk = dp;
+			best = prio;
 		}
 	}
 	KASSERT(disk != NULL, ("NULL disk for %s.", sc->sc_name));
@@ -1505,12 +1495,18 @@ g_mirror_request_load(struct g_mirror_softc *sc, struct bio *bp)
 	cp = disk->d_consumer;
 	cbp->bio_done = g_mirror_done;
 	cbp->bio_to = cp->provider;
-	binuptime(&disk->d_last_used);
 	G_MIRROR_LOGREQ(3, cbp, "Sending request.");
 	KASSERT(cp->acr >= 1 && cp->acw >= 1 && cp->ace >= 1,
 	    ("Consumer %s not opened (r%dw%de%d).", cp->provider->name, cp->acr,
 	    cp->acw, cp->ace));
 	cp->index++;
+	/* Remember last head position */
+	disk->d_last_offset = bp->bio_offset + bp->bio_length;
+	/* Update loads. */
+	LIST_FOREACH(dp, &sc->sc_disks, d_next) {
+		dp->load = (dp->d_consumer->index * LOAD_SCALE +
+		    dp->load * 7) / 8;
+	}
 	g_io_request(cbp, cp);
 }
 
@@ -2040,6 +2036,15 @@ g_mirror_launch_provider(struct g_mirror_softc *sc)
 	pp = g_new_providerf(sc->sc_geom, "mirror/%s", sc->sc_name);
 	pp->mediasize = sc->sc_mediasize;
 	pp->sectorsize = sc->sc_sectorsize;
+	pp->stripesize = 0;
+	pp->stripeoffset = 0;
+	LIST_FOREACH(disk, &sc->sc_disks, d_next) {
+		if (disk->d_consumer && disk->d_consumer->provider &&
+		    disk->d_consumer->provider->stripesize > pp->stripesize) {
+			pp->stripesize = disk->d_consumer->provider->stripesize;
+			pp->stripeoffset = disk->d_consumer->provider->stripeoffset;
+		}
+	}
 	sc->sc_provider = pp;
 	g_error_provider(pp, 0);
 	g_topology_unlock();
diff --git a/sys/geom/mirror/g_mirror.h b/sys/geom/mirror/g_mirror.h
index eb67b6e08ba..8cd9a691e40 100644
--- a/sys/geom/mirror/g_mirror.h
+++ b/sys/geom/mirror/g_mirror.h
@@ -133,8 +133,8 @@ struct g_mirror_disk {
 	struct g_mirror_softc	*d_softc; /* Back-pointer to softc. */
 	int		 d_state;	/* Disk state. */
 	u_int		 d_priority;	/* Disk priority. */
-	struct bintime	 d_delay;	/* Disk delay. */
-	struct bintime	 d_last_used;	/* When disk was last used. */
+	u_int		 load;		/* Averaged queue length */
+	off_t		 d_last_offset;	/* Last read offset */
 	uint64_t	 d_flags;	/* Additional flags. */
 	u_int		 d_genid;	/* Disk's generation ID. */
 	struct g_mirror_disk_sync d_sync;/* Sync information. */
diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c
index 92a1db0f3ee..2b57a262edc 100644
--- a/sys/geom/part/g_part.c
+++ b/sys/geom/part/g_part.c
@@ -69,7 +69,13 @@ struct g_part_alias_list {
 	const char *lexeme;
 	enum g_part_alias alias;
 } g_part_alias_list[G_PART_ALIAS_COUNT] = {
+	{ "apple-boot", G_PART_ALIAS_APPLE_BOOT },
 	{ "apple-hfs", G_PART_ALIAS_APPLE_HFS },
+	{ "apple-label", G_PART_ALIAS_APPLE_LABEL },
+	{ "apple-raid", G_PART_ALIAS_APPLE_RAID },
+	{ "apple-raid-offline", G_PART_ALIAS_APPLE_RAID_OFFLINE },
+	{ "apple-tv-recovery", G_PART_ALIAS_APPLE_TV_RECOVERY },
+	{ "apple-ufs", G_PART_ALIAS_APPLE_UFS },
 	{ "efi", G_PART_ALIAS_EFI },
 	{ "freebsd", G_PART_ALIAS_FREEBSD },
 	{ "freebsd-boot", G_PART_ALIAS_FREEBSD_BOOT },
@@ -77,6 +83,20 @@ struct g_part_alias_list {
 	{ "freebsd-ufs", G_PART_ALIAS_FREEBSD_UFS },
 	{ "freebsd-vinum", G_PART_ALIAS_FREEBSD_VINUM },
 	{ "freebsd-zfs", G_PART_ALIAS_FREEBSD_ZFS },
+	{ "linux-data", G_PART_ALIAS_LINUX_DATA },
+	{ "linux-lvm", G_PART_ALIAS_LINUX_LVM },
+	{ "linux-raid", G_PART_ALIAS_LINUX_RAID },
+	{ "linux-swap", G_PART_ALIAS_LINUX_SWAP },
+	{ "ms-basic-data", G_PART_ALIAS_MS_BASIC_DATA },
+	{ "ms-ldm-data", G_PART_ALIAS_MS_LDM_DATA },
+	{ "ms-ldm-metadata", G_PART_ALIAS_MS_LDM_METADATA },
+	{ "ms-reserved", G_PART_ALIAS_MS_RESERVED },
+	{ "netbsd-ccd", G_PART_ALIAS_NETBSD_CCD },
+	{ "netbsd-cgd", G_PART_ALIAS_NETBSD_CGD },
+	{ "netbsd-ffs", G_PART_ALIAS_NETBSD_FFS },
+	{ "netbsd-lfs", G_PART_ALIAS_NETBSD_LFS },
+	{ "netbsd-raid", G_PART_ALIAS_NETBSD_RAID },
+	{ "netbsd-swap", G_PART_ALIAS_NETBSD_SWAP },
 	{ "mbr", G_PART_ALIAS_MBR }
 };
 
diff --git a/sys/geom/part/g_part.h b/sys/geom/part/g_part.h
index 504d8aef474..e146cba6116 100644
--- a/sys/geom/part/g_part.h
+++ b/sys/geom/part/g_part.h
@@ -36,7 +36,13 @@
 #define	G_PART_PROBE_PRI_HIGH	0
 
 enum g_part_alias {
-	G_PART_ALIAS_APPLE_HFS,		/* An HFS file system entry. */
+	G_PART_ALIAS_APPLE_BOOT,	/* An Apple boot partition entry. */
+	G_PART_ALIAS_APPLE_HFS,		/* An HFS+ file system entry. */
+	G_PART_ALIAS_APPLE_LABEL,	/* An Apple label partition entry. */
+	G_PART_ALIAS_APPLE_RAID,	/* An Apple RAID partition entry. */
+	G_PART_ALIAS_APPLE_RAID_OFFLINE,/* An Apple RAID (offline) part entry.*/
+	G_PART_ALIAS_APPLE_TV_RECOVERY,	/* An Apple TV recovery part entry. */
+	G_PART_ALIAS_APPLE_UFS,		/* An Apple UFS partition entry. */
 	G_PART_ALIAS_EFI,		/* A EFI system partition entry. */
 	G_PART_ALIAS_FREEBSD,		/* A BSD labeled partition entry. */
 	G_PART_ALIAS_FREEBSD_BOOT,	/* A FreeBSD boot partition entry. */
@@ -45,6 +51,20 @@ enum g_part_alias {
 	G_PART_ALIAS_FREEBSD_VINUM,	/* A Vinum partition entry. */
 	G_PART_ALIAS_FREEBSD_ZFS,	/* A ZFS file system entry. */
 	G_PART_ALIAS_MBR,		/* A MBR (extended) partition entry. */
+	G_PART_ALIAS_LINUX_DATA,	/* A Linux data partition entry. */
+	G_PART_ALIAS_LINUX_LVM,		/* A Linux LVM partition entry. */
+	G_PART_ALIAS_LINUX_RAID,	/* A Linux RAID partition entry. */
+	G_PART_ALIAS_LINUX_SWAP,	/* A Linux swap partition entry. */
+	G_PART_ALIAS_MS_BASIC_DATA,	/* A Microsoft Data part. entry. */
+	G_PART_ALIAS_MS_LDM_DATA,	/* A Microsoft LDM Data part. entry. */
+	G_PART_ALIAS_MS_LDM_METADATA,	/* A Microsoft LDM Metadata entry. */
+	G_PART_ALIAS_MS_RESERVED,	/* A Microsoft Reserved part. entry. */
+	G_PART_ALIAS_NETBSD_CCD,	/* A NetBSD CCD partition entry. */
+	G_PART_ALIAS_NETBSD_CGD,	/* A NetBSD CGD partition entry. */
+	G_PART_ALIAS_NETBSD_FFS,	/* A NetBSD FFS partition entry. */
+	G_PART_ALIAS_NETBSD_RAID,	/* A NetBSD RAID partition entry. */
+	G_PART_ALIAS_NETBSD_SWAP,	/* A NetBSD swap partition entry. */
+	G_PART_ALIAS_NETBSD_LFS,	/* A NetBSD LFS partition entry. */
 	/* Keep the following last */
 	G_PART_ALIAS_COUNT
 };
diff --git a/sys/geom/part/g_part_gpt.c b/sys/geom/part/g_part_gpt.c
index aabbec1cde8..7489e688565 100644
--- a/sys/geom/part/g_part_gpt.c
+++ b/sys/geom/part/g_part_gpt.c
@@ -131,7 +131,13 @@ static struct g_part_scheme g_part_gpt_scheme = {
 };
 G_PART_SCHEME_DECLARE(g_part_gpt);
 
+static struct uuid gpt_uuid_apple_boot = GPT_ENT_TYPE_APPLE_BOOT;
 static struct uuid gpt_uuid_apple_hfs = GPT_ENT_TYPE_APPLE_HFS;
+static struct uuid gpt_uuid_apple_label = GPT_ENT_TYPE_APPLE_LABEL;
+static struct uuid gpt_uuid_apple_raid = GPT_ENT_TYPE_APPLE_RAID;
+static struct uuid gpt_uuid_apple_raid_offline = GPT_ENT_TYPE_APPLE_RAID_OFFLINE;
+static struct uuid gpt_uuid_apple_tv_recovery = GPT_ENT_TYPE_APPLE_TV_RECOVERY;
+static struct uuid gpt_uuid_apple_ufs = GPT_ENT_TYPE_APPLE_UFS;
 static struct uuid gpt_uuid_efi = GPT_ENT_TYPE_EFI;
 static struct uuid gpt_uuid_freebsd = GPT_ENT_TYPE_FREEBSD;
 static struct uuid gpt_uuid_freebsd_boot = GPT_ENT_TYPE_FREEBSD_BOOT;
@@ -139,10 +145,60 @@ static struct uuid gpt_uuid_freebsd_swap = GPT_ENT_TYPE_FREEBSD_SWAP;
 static struct uuid gpt_uuid_freebsd_ufs = GPT_ENT_TYPE_FREEBSD_UFS;
 static struct uuid gpt_uuid_freebsd_vinum = GPT_ENT_TYPE_FREEBSD_VINUM;
 static struct uuid gpt_uuid_freebsd_zfs = GPT_ENT_TYPE_FREEBSD_ZFS;
+static struct uuid gpt_uuid_linux_data = GPT_ENT_TYPE_LINUX_DATA;
+static struct uuid gpt_uuid_linux_lvm = GPT_ENT_TYPE_LINUX_LVM;
+static struct uuid gpt_uuid_linux_raid = GPT_ENT_TYPE_LINUX_RAID;
 static struct uuid gpt_uuid_linux_swap = GPT_ENT_TYPE_LINUX_SWAP;
+static struct uuid gpt_uuid_ms_basic_data = GPT_ENT_TYPE_MS_BASIC_DATA;
+static struct uuid gpt_uuid_ms_reserved = GPT_ENT_TYPE_MS_RESERVED;
+static struct uuid gpt_uuid_ms_ldm_data = GPT_ENT_TYPE_MS_LDM_DATA;
+static struct uuid gpt_uuid_ms_ldm_metadata = GPT_ENT_TYPE_MS_LDM_METADATA;
+static struct uuid gpt_uuid_netbsd_ccd = GPT_ENT_TYPE_NETBSD_CCD;
+static struct uuid gpt_uuid_netbsd_cgd = GPT_ENT_TYPE_NETBSD_CGD;
+static struct uuid gpt_uuid_netbsd_ffs = GPT_ENT_TYPE_NETBSD_FFS;
+static struct uuid gpt_uuid_netbsd_lfs = GPT_ENT_TYPE_NETBSD_LFS;
+static struct uuid gpt_uuid_netbsd_raid = GPT_ENT_TYPE_NETBSD_RAID;
+static struct uuid gpt_uuid_netbsd_swap = GPT_ENT_TYPE_NETBSD_SWAP;
 static struct uuid gpt_uuid_mbr = GPT_ENT_TYPE_MBR;
 static struct uuid gpt_uuid_unused = GPT_ENT_TYPE_UNUSED;
 
+static struct g_part_uuid_alias {
+	struct uuid *uuid;
+	int alias;		
+} gpt_uuid_alias_match[] = {
+	{ &gpt_uuid_apple_boot,		G_PART_ALIAS_APPLE_BOOT },
+	{ &gpt_uuid_apple_hfs,		G_PART_ALIAS_APPLE_HFS },
+	{ &gpt_uuid_apple_label,	G_PART_ALIAS_APPLE_LABEL },
+	{ &gpt_uuid_apple_raid,		G_PART_ALIAS_APPLE_RAID },
+	{ &gpt_uuid_apple_raid_offline,	G_PART_ALIAS_APPLE_RAID_OFFLINE },
+	{ &gpt_uuid_apple_tv_recovery,	G_PART_ALIAS_APPLE_TV_RECOVERY },
+	{ &gpt_uuid_apple_ufs,		G_PART_ALIAS_APPLE_UFS },
+	{ &gpt_uuid_efi, 		G_PART_ALIAS_EFI },
+	{ &gpt_uuid_freebsd,		G_PART_ALIAS_FREEBSD },
+	{ &gpt_uuid_freebsd_boot, 	G_PART_ALIAS_FREEBSD_BOOT },
+	{ &gpt_uuid_freebsd_swap,	G_PART_ALIAS_FREEBSD_SWAP },
+	{ &gpt_uuid_freebsd_ufs,	G_PART_ALIAS_FREEBSD_UFS },
+	{ &gpt_uuid_freebsd_vinum,	G_PART_ALIAS_FREEBSD_VINUM },
+	{ &gpt_uuid_freebsd_zfs,	G_PART_ALIAS_FREEBSD_ZFS },
+	{ &gpt_uuid_linux_data,		G_PART_ALIAS_LINUX_DATA },
+	{ &gpt_uuid_linux_lvm,		G_PART_ALIAS_LINUX_LVM },
+	{ &gpt_uuid_linux_raid,		G_PART_ALIAS_LINUX_RAID },
+	{ &gpt_uuid_linux_swap,		G_PART_ALIAS_LINUX_SWAP },
+	{ &gpt_uuid_mbr,		G_PART_ALIAS_MBR },
+	{ &gpt_uuid_ms_basic_data,	G_PART_ALIAS_MS_BASIC_DATA },
+	{ &gpt_uuid_ms_ldm_data,	G_PART_ALIAS_MS_LDM_DATA },
+	{ &gpt_uuid_ms_ldm_metadata,	G_PART_ALIAS_MS_LDM_METADATA },
+	{ &gpt_uuid_ms_reserved,	G_PART_ALIAS_MS_RESERVED },
+	{ &gpt_uuid_netbsd_ccd,		G_PART_ALIAS_NETBSD_CCD },
+	{ &gpt_uuid_netbsd_cgd,		G_PART_ALIAS_NETBSD_CGD },
+	{ &gpt_uuid_netbsd_ffs,		G_PART_ALIAS_NETBSD_FFS },
+	{ &gpt_uuid_netbsd_lfs,		G_PART_ALIAS_NETBSD_LFS },
+	{ &gpt_uuid_netbsd_raid,	G_PART_ALIAS_NETBSD_RAID },
+	{ &gpt_uuid_netbsd_swap,	G_PART_ALIAS_NETBSD_SWAP },
+
+	{ NULL, 0 }
+};
+
 static struct gpt_hdr *
 gpt_read_hdr(struct g_part_gpt_table *table, struct g_consumer *cp,
     enum gpt_elt elt)
@@ -305,6 +361,7 @@ gpt_parse_type(const char *type, struct uuid *uuid)
 	struct uuid tmp;
 	const char *alias;
 	int error;
+	struct g_part_uuid_alias *uap;
 
 	if (type[0] == '!') {
 		error = parse_uuid(type + 1, &tmp);
@@ -315,50 +372,12 @@ gpt_parse_type(const char *type, struct uuid *uuid)
 		*uuid = tmp;
 		return (0);
 	}
-	alias = g_part_alias_name(G_PART_ALIAS_EFI);
-	if (!strcasecmp(type, alias)) {
-		*uuid = gpt_uuid_efi;
-		return (0);
-	}
-	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD);
-	if (!strcasecmp(type, alias)) {
-		*uuid = gpt_uuid_freebsd;
-		return (0);
-	}
-	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_BOOT);
-	if (!strcasecmp(type, alias)) {
-		*uuid = gpt_uuid_freebsd_boot;
-		return (0);
-	}
-	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP);
-	if (!strcasecmp(type, alias)) {
-		*uuid = gpt_uuid_freebsd_swap;
-		return (0);
-	}
-	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_UFS);
-	if (!strcasecmp(type, alias)) {
-		*uuid = gpt_uuid_freebsd_ufs;
-		return (0);
-	}
-	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_VINUM);
-	if (!strcasecmp(type, alias)) {
-		*uuid = gpt_uuid_freebsd_vinum;
-		return (0);
-	}
-	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD_ZFS);
-	if (!strcasecmp(type, alias)) {
-		*uuid = gpt_uuid_freebsd_zfs;
-		return (0);
-	}
-	alias = g_part_alias_name(G_PART_ALIAS_MBR);
-	if (!strcasecmp(type, alias)) {
-		*uuid = gpt_uuid_mbr;
-		return (0);
-	}
-	alias = g_part_alias_name(G_PART_ALIAS_APPLE_HFS);
-	if (!strcasecmp(type, alias)) {
-		*uuid = gpt_uuid_apple_hfs;
-		return (0);
+	for (uap = &gpt_uuid_alias_match[0]; uap->uuid; uap++) {
+		alias = g_part_alias_name(uap->alias);
+		if (!strcasecmp(type, alias)) {
+			*uuid = *uap->uuid;
+			return (0);
+		}
 	}
 	return (EINVAL);
 }
@@ -444,6 +463,9 @@ g_part_gpt_create(struct g_part_table *basetable, struct g_part_parms *gpp)
 	table->lba[GPT_ELT_SECHDR] = last;
 	table->lba[GPT_ELT_SECTBL] = last - tblsz;
 
+	/* Allocate space for the header */
+	table->hdr = g_malloc(sizeof(struct gpt_hdr), M_WAITOK | M_ZERO);
+
 	bcopy(GPT_HDR_SIG, table->hdr->hdr_sig, sizeof(table->hdr->hdr_sig));
 	table->hdr->hdr_revision = GPT_HDR_REVISION;
 	table->hdr->hdr_size = offsetof(struct gpt_hdr, padding);
@@ -714,27 +736,16 @@ g_part_gpt_type(struct g_part_table *basetable, struct g_part_entry *baseentry,
 {
 	struct g_part_gpt_entry *entry;
 	struct uuid *type;
+	struct g_part_uuid_alias *uap;
  
 	entry = (struct g_part_gpt_entry *)baseentry;
 	type = &entry->ent.ent_type;
-	if (EQUUID(type, &gpt_uuid_efi))
-		return (g_part_alias_name(G_PART_ALIAS_EFI));
-	if (EQUUID(type, &gpt_uuid_freebsd))
-		return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
-	if (EQUUID(type, &gpt_uuid_freebsd_boot))
-		return (g_part_alias_name(G_PART_ALIAS_FREEBSD_BOOT));
-	if (EQUUID(type, &gpt_uuid_freebsd_swap))
-		return (g_part_alias_name(G_PART_ALIAS_FREEBSD_SWAP));
-	if (EQUUID(type, &gpt_uuid_freebsd_ufs))
-		return (g_part_alias_name(G_PART_ALIAS_FREEBSD_UFS));
-	if (EQUUID(type, &gpt_uuid_freebsd_vinum))
-		return (g_part_alias_name(G_PART_ALIAS_FREEBSD_VINUM));
-	if (EQUUID(type, &gpt_uuid_freebsd_zfs))
-		return (g_part_alias_name(G_PART_ALIAS_FREEBSD_ZFS));
-	if (EQUUID(type, &gpt_uuid_mbr))
-		return (g_part_alias_name(G_PART_ALIAS_MBR));
+	for (uap = &gpt_uuid_alias_match[0]; uap->uuid; uap++)
+		if (EQUUID(type, uap->uuid))
+			return (g_part_alias_name(uap->alias));
 	buf[0] = '!';
 	snprintf_uuid(buf + 1, bufsz - 1, type);
+
 	return (buf);
 }
 
diff --git a/sys/geom/raid3/g_raid3.c b/sys/geom/raid3/g_raid3.c
index 1cbce257b59..08792fe3599 100644
--- a/sys/geom/raid3/g_raid3.c
+++ b/sys/geom/raid3/g_raid3.c
@@ -183,15 +183,17 @@ static void *
 g_raid3_alloc(struct g_raid3_softc *sc, size_t size, int flags)
 {
 	void *ptr;
+	enum g_raid3_zones zone;
 
-	if (g_raid3_use_malloc)
+	if (g_raid3_use_malloc ||
+	    (zone = g_raid3_zone(size)) == G_RAID3_NUM_ZONES)
 		ptr = malloc(size, M_RAID3, flags);
 	else {
-		ptr = uma_zalloc_arg(sc->sc_zones[g_raid3_zone(size)].sz_zone,
-		   &sc->sc_zones[g_raid3_zone(size)], flags);
-		sc->sc_zones[g_raid3_zone(size)].sz_requested++;
+		ptr = uma_zalloc_arg(sc->sc_zones[zone].sz_zone,
+		   &sc->sc_zones[zone], flags);
+		sc->sc_zones[zone].sz_requested++;
 		if (ptr == NULL)
-			sc->sc_zones[g_raid3_zone(size)].sz_failed++;
+			sc->sc_zones[zone].sz_failed++;
 	}
 	return (ptr);
 }
@@ -199,12 +201,14 @@ g_raid3_alloc(struct g_raid3_softc *sc, size_t size, int flags)
 static void
 g_raid3_free(struct g_raid3_softc *sc, void *ptr, size_t size)
 {
+	enum g_raid3_zones zone;
 
-	if (g_raid3_use_malloc)
+	if (g_raid3_use_malloc ||
+	    (zone = g_raid3_zone(size)) == G_RAID3_NUM_ZONES)
 		free(ptr, M_RAID3);
 	else {
-		uma_zfree_arg(sc->sc_zones[g_raid3_zone(size)].sz_zone,
-		    ptr, &sc->sc_zones[g_raid3_zone(size)]);
+		uma_zfree_arg(sc->sc_zones[zone].sz_zone,
+		    ptr, &sc->sc_zones[zone]);
 	}
 }
 
@@ -227,31 +231,31 @@ g_raid3_uma_dtor(void *mem, int size, void *arg)
 	sz->sz_inuse--;
 }
 
-#define	g_raid3_xor(src1, src2, dst, size)				\
-	_g_raid3_xor((uint64_t *)(src1), (uint64_t *)(src2),		\
+#define	g_raid3_xor(src, dst, size)					\
+	_g_raid3_xor((uint64_t *)(src),					\
 	    (uint64_t *)(dst), (size_t)size)
 static void
-_g_raid3_xor(uint64_t *src1, uint64_t *src2, uint64_t *dst, size_t size)
+_g_raid3_xor(uint64_t *src, uint64_t *dst, size_t size)
 {
 
 	KASSERT((size % 128) == 0, ("Invalid size: %zu.", size));
 	for (; size > 0; size -= 128) {
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
-		*dst++ = (*src1++) ^ (*src2++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
+		*dst++ ^= (*src++);
 	}
 }
 
@@ -1045,6 +1049,7 @@ g_raid3_scatter(struct bio *pbp)
 	struct g_raid3_disk *disk;
 	struct bio *bp, *cbp, *tmpbp;
 	off_t atom, cadd, padd, left;
+	int first;
 
 	sc = pbp->bio_to->geom->softc;
 	bp = NULL;
@@ -1075,12 +1080,18 @@ g_raid3_scatter(struct bio *pbp)
 		/*
 		 * Calculate parity.
 		 */
-		bzero(bp->bio_data, bp->bio_length);
+		first = 1;
 		G_RAID3_FOREACH_SAFE_BIO(pbp, cbp, tmpbp) {
 			if (cbp == bp)
 				continue;
-			g_raid3_xor(cbp->bio_data, bp->bio_data, bp->bio_data,
-			    bp->bio_length);
+			if (first) {
+				bcopy(cbp->bio_data, bp->bio_data,
+				    bp->bio_length);
+				first = 0;
+			} else {
+				g_raid3_xor(cbp->bio_data, bp->bio_data,
+				    bp->bio_length);
+			}
 			if ((cbp->bio_cflags & G_RAID3_BIO_CFLAG_NODISK) != 0)
 				g_raid3_destroy_bio(sc, cbp);
 		}
@@ -1212,7 +1223,7 @@ g_raid3_gather(struct bio *pbp)
 		G_RAID3_FOREACH_BIO(pbp, cbp) {
 			if ((cbp->bio_cflags & G_RAID3_BIO_CFLAG_PARITY) != 0)
 				continue;
-			g_raid3_xor(cbp->bio_data, xbp->bio_data, xbp->bio_data,
+			g_raid3_xor(cbp->bio_data, xbp->bio_data,
 			    xbp->bio_length);
 		}
 		xbp->bio_cflags &= ~G_RAID3_BIO_CFLAG_PARITY;
@@ -1260,9 +1271,9 @@ g_raid3_done(struct bio *bp)
 	G_RAID3_LOGREQ(3, bp, "Regular request done (error=%d).", bp->bio_error);
 	mtx_lock(&sc->sc_queue_mtx);
 	bioq_insert_head(&sc->sc_queue, bp);
+	mtx_unlock(&sc->sc_queue_mtx);
 	wakeup(sc);
 	wakeup(&sc->sc_queue);
-	mtx_unlock(&sc->sc_queue_mtx);
 }
 
 static void
@@ -1368,9 +1379,9 @@ g_raid3_sync_done(struct bio *bp)
 	bp->bio_cflags |= G_RAID3_BIO_CFLAG_SYNC;
 	mtx_lock(&sc->sc_queue_mtx);
 	bioq_insert_head(&sc->sc_queue, bp);
+	mtx_unlock(&sc->sc_queue_mtx);
 	wakeup(sc);
 	wakeup(&sc->sc_queue);
-	mtx_unlock(&sc->sc_queue_mtx);
 }
 
 static void
@@ -1448,9 +1459,9 @@ g_raid3_start(struct bio *bp)
 	}
 	mtx_lock(&sc->sc_queue_mtx);
 	bioq_insert_tail(&sc->sc_queue, bp);
+	mtx_unlock(&sc->sc_queue_mtx);
 	G_RAID3_DEBUG(4, "%s: Waking up %p.", __func__, sc);
 	wakeup(sc);
-	mtx_unlock(&sc->sc_queue_mtx);
 }
 
 /*
@@ -1635,7 +1646,7 @@ g_raid3_sync_request(struct bio *bp)
 				bcopy(src, dst, atom);
 				src += atom;
 				for (n = 1; n < sc->sc_ndisks - 1; n++) {
-					g_raid3_xor(src, dst, dst, atom);
+					g_raid3_xor(src, dst, atom);
 					src += atom;
 				}
 				dst += atom;
@@ -2313,6 +2324,8 @@ static void
 g_raid3_launch_provider(struct g_raid3_softc *sc)
 {
 	struct g_provider *pp;
+	struct g_raid3_disk *disk;
+	int n;
 
 	sx_assert(&sc->sc_lock, SX_LOCKED);
 
@@ -2320,6 +2333,18 @@ g_raid3_launch_provider(struct g_raid3_softc *sc)
 	pp = g_new_providerf(sc->sc_geom, "raid3/%s", sc->sc_name);
 	pp->mediasize = sc->sc_mediasize;
 	pp->sectorsize = sc->sc_sectorsize;
+	pp->stripesize = 0;
+	pp->stripeoffset = 0;
+	for (n = 0; n < sc->sc_ndisks; n++) {
+		disk = &sc->sc_disks[n];
+		if (disk->d_consumer && disk->d_consumer->provider &&
+		    disk->d_consumer->provider->stripesize > pp->stripesize) {
+			pp->stripesize = disk->d_consumer->provider->stripesize;
+			pp->stripeoffset = disk->d_consumer->provider->stripeoffset;
+		}
+	}
+	pp->stripesize *= sc->sc_ndisks - 1;
+	pp->stripeoffset *= sc->sc_ndisks - 1;
 	sc->sc_provider = pp;
 	g_error_provider(pp, 0);
 	g_topology_unlock();
diff --git a/sys/geom/raid3/g_raid3.h b/sys/geom/raid3/g_raid3.h
index a3759999935..5daf16d2077 100644
--- a/sys/geom/raid3/g_raid3.h
+++ b/sys/geom/raid3/g_raid3.h
@@ -183,7 +183,9 @@ enum g_raid3_zones {
 
 static __inline enum g_raid3_zones
 g_raid3_zone(size_t nbytes) {
-	if (nbytes > 16384)
+	if (nbytes > 65536)
+		return (G_RAID3_NUM_ZONES);
+	else if (nbytes > 16384)
 		return (G_RAID3_ZONE_64K);
 	else if (nbytes > 4096)
 		return (G_RAID3_ZONE_16K);
diff --git a/sys/geom/stripe/g_stripe.c b/sys/geom/stripe/g_stripe.c
index 81f75610777..a91335790ba 100644
--- a/sys/geom/stripe/g_stripe.c
+++ b/sys/geom/stripe/g_stripe.c
@@ -675,6 +675,8 @@ g_stripe_check_and_run(struct g_stripe_softc *sc)
 	}
 	sc->sc_provider->sectorsize = sectorsize;
 	sc->sc_provider->mediasize = mediasize * sc->sc_ndisks;
+	sc->sc_provider->stripesize = sc->sc_stripesize;
+	sc->sc_provider->stripeoffset = 0;
 	g_error_provider(sc->sc_provider, 0);
 
 	G_STRIPE_DEBUG(0, "Device %s activated.", sc->sc_name);
diff --git a/sys/gnu/fs/reiserfs/reiserfs_vfsops.c b/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
index 739eff9a56b..6b4272e9660 100644
--- a/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
+++ b/sys/gnu/fs/reiserfs/reiserfs_vfsops.c
@@ -429,40 +429,11 @@ reiserfs_mountfs(struct vnode *devvp, struct mount *mp, struct thread *td)
 	struct reiserfs_super_block *rs;
 	struct cdev *dev = devvp->v_rdev;
 
-#if (__FreeBSD_version >= 600000)
 	struct g_consumer *cp;
 	struct bufobj *bo;
-#endif
 
 	//ronly = (mp->mnt_flag & MNT_RDONLY) != 0;
 
-#if (__FreeBSD_version < 600000)
-	/*
-	 * Disallow multiple mounts of the same device.
-	 * Disallow mounting of a device that is currently in use
-	 * (except for root, which might share swap device for miniroot).
-	 * Flush out any old buffers remaining from a previous use.
-	 */
-	if ((error = vfs_mountedon(devvp)) != 0)
-		return (error);
-	if (vcount(devvp) > 1)
-		return (EBUSY);
-
-	error = vinvalbuf(devvp, V_SAVE, td->td_ucred, td, 0, 0);
-	if (error) {
-		VOP_UNLOCK(devvp, 0);
-		return (error);
-	}
-
-	/*
-	 * Open the device in read-only, 'cause we don't support write
-	 * for now
-	 */
-	error = VOP_OPEN(devvp, FREAD, FSCRED, td, NULL);
-	VOP_UNLOCK(devvp, 0);
-	if (error)
-		return (error);
-#else
 	DROP_GIANT();
 	g_topology_lock();
 	error = g_vfs_open(devvp, &cp, "reiserfs", /* read-only */ 0);
@@ -475,7 +446,6 @@ reiserfs_mountfs(struct vnode *devvp, struct mount *mp, struct thread *td)
 	bo = &devvp->v_bufobj;
 	bo->bo_private = cp;
 	bo->bo_ops = g_vfs_bufops;
-#endif
 
 	if (devvp->v_rdev->si_iosize_max != 0)
 		mp->mnt_iosize_max = devvp->v_rdev->si_iosize_max;
@@ -500,10 +470,8 @@ reiserfs_mountfs(struct vnode *devvp, struct mount *mp, struct thread *td)
 	rmp->rm_mountp   = mp;
 	rmp->rm_devvp    = devvp;
 	rmp->rm_dev      = dev;
-#if (__FreeBSD_version >= 600000)
 	rmp->rm_bo       = &devvp->v_bufobj;
 	rmp->rm_cp       = cp;
-#endif
 
 	/* Set default values for options: non-aggressive tails */
 	REISERFS_SB(sbi)->s_mount_opt = (1 << REISERFS_SMALLTAIL);
@@ -630,9 +598,6 @@ out:
 		}
 	}
 
-#if (__FreeBSD_version < 600000)
-	(void)VOP_CLOSE(devvp, FREAD, NOCRED, td);
-#else
 	if (cp != NULL) {
 		DROP_GIANT();
 		g_topology_lock();
@@ -640,7 +605,6 @@ out:
 		g_topology_unlock();
 		PICKUP_GIANT();
 	}
-#endif
 
 	if (sbi)
 		free(sbi, M_REISERFSMNT);
diff --git a/sys/i386/conf/GENERIC b/sys/i386/conf/GENERIC
index 5dbfd6f4153..6403634de7d 100644
--- a/sys/i386/conf/GENERIC
+++ b/sys/i386/conf/GENERIC
@@ -287,6 +287,7 @@ device		wi		# WaveLAN/Intersil/Symbol 802.11 wireless NICs.
 device		loop		# Network loopback
 device		random		# Entropy device
 device		ether		# Ethernet support
+device		vlan		# 802.1Q VLAN support
 device		tun		# Packet tunnel.
 device		pty		# BSD-style compatibility pseudo ttys
 device		md		# Memory "disks"
diff --git a/sys/i386/conf/NOTES b/sys/i386/conf/NOTES
index ead43eca200..87bbf97c222 100644
--- a/sys/i386/conf/NOTES
+++ b/sys/i386/conf/NOTES
@@ -469,9 +469,6 @@ device		tdfx_linux		# Enable Linuxulator support
 # kernel environment variables to select initial debugging levels for the
 # Intel ACPICA code.  (Note that the Intel code must also have USE_DEBUGGER
 # defined when it is built).
-#
-# Note that building ACPI into the kernel is deprecated; the module is
-# normally loaded automatically by the loader.
 
 device		acpi
 options 	ACPI_DEBUG
@@ -536,7 +533,6 @@ hint.mse.0.irq="5"
 # Network interfaces:
 #
 
-# ath:  Atheros a/b/g WiFi adapters (requires ath_hal and wlan)
 # ce:   Cronyx Tau-PCI/32 sync single/dual port G.703/E1 serial adaptor
 #       with 32 HDLC subchannels (requires sppp (default), or NETGRAPH if
 #       NETGRAPH_CRONYX is configured)
@@ -558,27 +554,12 @@ hint.mse.0.irq="5"
 # iwn:	Intel Wireless WiFi Link 4965AGN 802.11 network adapters
 # nfe:	nVidia nForce MCP on-board Ethernet Networking (BSD open source)
 # nve:	nVidia nForce MCP on-board Ethernet Networking
-# ral:	Ralink Technology IEEE 802.11 wireless adapter
 # sbni: Granch SBNI12-xx ISA and PCI adapters
 # wl:   Lucent Wavelan (ISA card only).
 # wpi:	Intel 3945ABG Wireless LAN controller
 
 # Order for ISA/EISA devices is important here
 
-device		ath		# Atheros pci/cardbus NIC's
-device		ath_hal		# pci/cardbus chip support
-#device		ath_ar5210	# AR5210 chips
-#device		ath_ar5211	# AR5211 chips
-#device		ath_ar5212	# AR5212 chips
-#device		ath_rf2413
-#device		ath_rf2417
-#device		ath_rf2425
-#device		ath_rf5111
-#device		ath_rf5112
-#device		ath_rf5413
-#device		ath_ar5416	# AR5416 chips
-options 	AH_SUPPORT_AR5416	# enable AR5416 tx/rx descriptors
-device		ath_rate_sample	# SampleRate tx rate control for ath
 device		ce
 device		cp
 device		cs
@@ -613,7 +594,6 @@ hint.le.0.irq="10"
 hint.le.0.drq="0"
 device		nfe		# nVidia nForce MCP on-board Ethernet Networking
 device		nve		# nVidia nForce MCP on-board Ethernet Networking
-device		ral
 device		sbni
 hint.sbni.0.at="isa"
 hint.sbni.0.port="0x210"
@@ -785,8 +765,10 @@ hint.pcf.0.irq="5"
 # Hardware watchdog timers:
 #
 # ichwd: Intel ICH watchdog timer
+# amdsbwd: AMD SB7xx watchdog timer
 #
 device		ichwd
+device		amdsbwd
 
 #
 # Temperature sensors:
diff --git a/sys/i386/cpufreq/est.c b/sys/i386/cpufreq/est.c
index 2c6fd2ce618..6a7b514a2c3 100644
--- a/sys/i386/cpufreq/est.c
+++ b/sys/i386/cpufreq/est.c
@@ -96,6 +96,8 @@ struct est_softc {
 
 static int msr_info_enabled = 0;
 TUNABLE_INT("hw.est.msr_info", &msr_info_enabled);
+static int strict = -1;
+TUNABLE_INT("hw.est.strict", &strict);
 
 /* Default bus clock value for Centrino processors. */
 #define INTEL_BUS_CLK		100
@@ -1025,6 +1027,9 @@ est_attach(device_t dev)
 	sc = device_get_softc(dev);
 	sc->dev = dev;
 
+	/* On SMP system we can't guarantie independent freq setting. */
+	if (strict == -1 && mp_ncpus > 1)
+		strict = 0;
 	/* Check CPU for supported settings. */
 	if (est_get_info(dev))
 		return (ENXIO);
@@ -1119,17 +1124,21 @@ est_acpi_info(device_t dev, freq_info **freqs)
 		 */
 		if (sets[i].freq > 0) {
 			error = est_set_id16(dev, sets[i].spec[0], 1);
-			if (error != 0) {
+			if (error != 0 && strict) {
 				if (bootverbose) 
 					device_printf(dev, "Invalid freq %u, "
 					    "ignored.\n", sets[i].freq);
-			} else {
-				table[j].freq = sets[i].freq;
-				table[j].volts = sets[i].volts;
-				table[j].id16 = sets[i].spec[0];
-				table[j].power = sets[i].power;
-				++j;
+				continue;
+			} else if (error != 0 && bootverbose) {
+				device_printf(dev, "Can't check freq %u, "
+				    "it may be invalid\n",
+				    sets[i].freq);
 			}
+			table[j].freq = sets[i].freq;
+			table[j].volts = sets[i].volts;
+			table[j].id16 = sets[i].spec[0];
+			table[j].power = sets[i].power;
+			++j;
 		}
 	}
 	/* restore saved setting */
diff --git a/sys/i386/i386/bpf_jit_machdep.c b/sys/i386/i386/bpf_jit_machdep.c
index 5d8e0345640..e9d9ecabe40 100644
--- a/sys/i386/i386/bpf_jit_machdep.c
+++ b/sys/i386/i386/bpf_jit_machdep.c
@@ -1,6 +1,6 @@
 /*-
  * Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
- * Copyright (C) 2005-2008 Jung-uk Kim 
+ * Copyright (C) 2005-2009 Jung-uk Kim 
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -42,6 +42,9 @@ __FBSDID("$FreeBSD$");
 #include 
 #else
 #include 
+#include 
+#include 
+#include 
 #endif
 
 #include 
@@ -51,21 +54,22 @@ __FBSDID("$FreeBSD$");
 
 #include 
 
-bpf_filter_func	bpf_jit_compile(struct bpf_insn *, u_int, int *);
+bpf_filter_func	bpf_jit_compile(struct bpf_insn *, u_int, size_t *);
 
 /*
- * emit routine to update the jump table
+ * Emit routine to update the jump table.
  */
 static void
 emit_length(bpf_bin_stream *stream, __unused u_int value, u_int len)
 {
 
-	(stream->refs)[stream->bpf_pc] += len;
+	if (stream->refs != NULL)
+		(stream->refs)[stream->bpf_pc] += len;
 	stream->cur_ip += len;
 }
 
 /*
- * emit routine to output the actual binary code
+ * Emit routine to output the actual binary code.
  */
 static void
 emit_code(bpf_bin_stream *stream, u_int value, u_int len)
@@ -92,56 +96,124 @@ emit_code(bpf_bin_stream *stream, u_int value, u_int len)
 }
 
 /*
- * Function that does the real stuff
+ * Scan the filter program and find possible optimization.
+ */
+static int
+bpf_jit_optimize(struct bpf_insn *prog, u_int nins)
+{
+	int flags;
+	u_int i;
+
+	/* Do we return immediately? */
+	if (BPF_CLASS(prog[0].code) == BPF_RET)
+		return (BPF_JIT_FRET);
+
+	for (flags = 0, i = 0; i < nins; i++) {
+		switch (prog[i].code) {
+		case BPF_LD|BPF_W|BPF_ABS:
+		case BPF_LD|BPF_H|BPF_ABS:
+		case BPF_LD|BPF_B|BPF_ABS:
+		case BPF_LD|BPF_W|BPF_IND:
+		case BPF_LD|BPF_H|BPF_IND:
+		case BPF_LD|BPF_B|BPF_IND:
+		case BPF_LDX|BPF_MSH|BPF_B:
+			flags |= BPF_JIT_FPKT;
+			break;
+		case BPF_LD|BPF_MEM:
+		case BPF_LDX|BPF_MEM:
+		case BPF_ST:
+		case BPF_STX:
+			flags |= BPF_JIT_FMEM;
+			break;
+		case BPF_JMP|BPF_JA:
+		case BPF_JMP|BPF_JGT|BPF_K:
+		case BPF_JMP|BPF_JGE|BPF_K:
+		case BPF_JMP|BPF_JEQ|BPF_K:
+		case BPF_JMP|BPF_JSET|BPF_K:
+		case BPF_JMP|BPF_JGT|BPF_X:
+		case BPF_JMP|BPF_JGE|BPF_X:
+		case BPF_JMP|BPF_JEQ|BPF_X:
+		case BPF_JMP|BPF_JSET|BPF_X:
+			flags |= BPF_JIT_FJMP;
+			break;
+		case BPF_ALU|BPF_DIV|BPF_K:
+			flags |= BPF_JIT_FADK;
+			break;
+		}
+		if (flags == BPF_JIT_FLAG_ALL)
+			break;
+	}
+
+	return (flags);
+}
+
+/*
+ * Function that does the real stuff.
  */
 bpf_filter_func
-bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
+bpf_jit_compile(struct bpf_insn *prog, u_int nins, size_t *size)
 {
-	struct bpf_insn *ins;
-	u_int i, pass;
 	bpf_bin_stream stream;
+	struct bpf_insn *ins;
+	int flags, fret, fpkt, fmem, fjmp, fadk;
+	int save_esp;
+	u_int i, pass;
 
 	/*
-	 * NOTE: do not modify the name of this variable, as it's used by
+	 * NOTE: Do not modify the name of this variable, as it's used by
 	 * the macros to emit code.
 	 */
 	emit_func emitm;
 
-	/* Allocate the reference table for the jumps */
+	flags = bpf_jit_optimize(prog, nins);
+	fret = (flags & BPF_JIT_FRET) != 0;
+	fpkt = (flags & BPF_JIT_FPKT) != 0;
+	fmem = (flags & BPF_JIT_FMEM) != 0;
+	fjmp = (flags & BPF_JIT_FJMP) != 0;
+	fadk = (flags & BPF_JIT_FADK) != 0;
+	save_esp = (fpkt || fmem || fadk);	/* Stack is used. */
+
+	if (fret)
+		nins = 1;
+
+	memset(&stream, 0, sizeof(stream));
+
+	/* Allocate the reference table for the jumps. */
+	if (fjmp) {
 #ifdef _KERNEL
-	stream.refs = (u_int *)malloc((nins + 1) * sizeof(u_int),
-	    M_BPFJIT, M_NOWAIT);
+		stream.refs = malloc((nins + 1) * sizeof(u_int), M_BPFJIT,
+		    M_NOWAIT | M_ZERO);
 #else
-	stream.refs = (u_int *)malloc((nins + 1) * sizeof(u_int));
+		stream.refs = calloc(nins + 1, sizeof(u_int));
 #endif
-	if (stream.refs == NULL)
-		return (NULL);
-
-	/* Reset the reference table */
-	for (i = 0; i < nins + 1; i++)
-		stream.refs[i] = 0;
-
-	stream.cur_ip = 0;
-	stream.bpf_pc = 0;
+		if (stream.refs == NULL)
+			return (NULL);
+	}
 
 	/*
-	 * the first pass will emit the lengths of the instructions
-	 * to create the reference table
+	 * The first pass will emit the lengths of the instructions
+	 * to create the reference table.
 	 */
 	emitm = emit_length;
 
-	pass = 0;
-	for (;;) {
+	for (pass = 0; pass < 2; pass++) {
 		ins = prog;
 
-		/* create the procedure header */
-		PUSH(EBP);
-		MOVrd(ESP, EBP);
-		PUSH(EDI);
-		PUSH(ESI);
-		PUSH(EBX);
-		MOVodd(8, EBP, EBX);
-		MOVodd(16, EBP, EDI);
+		/* Create the procedure header. */
+		if (save_esp) {
+			PUSH(EBP);
+			MOVrd(ESP, EBP);
+		}
+		if (fmem)
+			SUBib(BPF_MEMWORDS * sizeof(uint32_t), ESP);
+		if (save_esp)
+			PUSH(ESI);
+		if (fpkt) {
+			PUSH(EDI);
+			PUSH(EBX);
+			MOVodd(8, EBP, EBX);
+			MOVodd(16, EBP, EDI);
+		}
 
 		for (i = 0; i < nins; i++) {
 			stream.bpf_pc++;
@@ -156,17 +228,27 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 
 			case BPF_RET|BPF_K:
 				MOVid(ins->k, EAX);
-				POP(EBX);
-				POP(ESI);
-				POP(EDI);
-				LEAVE_RET();
+				if (save_esp) {
+					if (fpkt) {
+						POP(EBX);
+						POP(EDI);
+					}
+					POP(ESI);
+					LEAVE();
+				}
+				RET();
 				break;
 
 			case BPF_RET|BPF_A:
-				POP(EBX);
-				POP(ESI);
-				POP(EDI);
-				LEAVE_RET();
+				if (save_esp) {
+					if (fpkt) {
+						POP(EBX);
+						POP(EDI);
+					}
+					POP(ESI);
+					LEAVE();
+				}
+				RET();
 				break;
 
 			case BPF_LD|BPF_W|BPF_ABS:
@@ -179,9 +261,10 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				JAEb(7);
 				ZEROrd(EAX);
 				POP(EBX);
-				POP(ESI);
 				POP(EDI);
-				LEAVE_RET();
+				POP(ESI);
+				LEAVE();
+				RET();
 				MOVobd(EBX, ESI, EAX);
 				BSWAP(EAX);
 				break;
@@ -196,9 +279,10 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				CMPid(sizeof(int16_t), ECX);
 				JAEb(5);
 				POP(EBX);
-				POP(ESI);
 				POP(EDI);
-				LEAVE_RET();
+				POP(ESI);
+				LEAVE();
+				RET();
 				MOVobw(EBX, ESI, AX);
 				SWAP_AX();
 				break;
@@ -209,18 +293,29 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				CMPrd(EDI, ESI);
 				JBb(5);
 				POP(EBX);
-				POP(ESI);
 				POP(EDI);
-				LEAVE_RET();
+				POP(ESI);
+				LEAVE();
+				RET();
 				MOVobb(EBX, ESI, AL);
 				break;
 
 			case BPF_LD|BPF_W|BPF_LEN:
-				MOVodd(12, EBP, EAX);
+				if (save_esp)
+					MOVodd(12, EBP, EAX);
+				else {
+					MOVrd(ESP, ECX);
+					MOVodd(12, ECX, EAX);
+				}
 				break;
 
 			case BPF_LDX|BPF_W|BPF_LEN:
-				MOVodd(12, EBP, EDX);
+				if (save_esp)
+					MOVodd(12, EBP, EDX);
+				else {
+					MOVrd(ESP, ECX);
+					MOVodd(12, ECX, EDX);
+				}
 				break;
 
 			case BPF_LD|BPF_W|BPF_IND:
@@ -238,9 +333,10 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				JAEb(7);
 				ZEROrd(EAX);
 				POP(EBX);
-				POP(ESI);
 				POP(EDI);
-				LEAVE_RET();
+				POP(ESI);
+				LEAVE();
+				RET();
 				MOVobd(EBX, ESI, EAX);
 				BSWAP(EAX);
 				break;
@@ -260,9 +356,10 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				CMPid(sizeof(int16_t), ECX);
 				JAEb(5);
 				POP(EBX);
-				POP(ESI);
 				POP(EDI);
-				LEAVE_RET();
+				POP(ESI);
+				LEAVE();
+				RET();
 				MOVobw(EBX, ESI, AX);
 				SWAP_AX();
 				break;
@@ -277,9 +374,10 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				CMPrd(ESI, ECX);
 				JAb(5);
 				POP(EBX);
-				POP(ESI);
 				POP(EDI);
-				LEAVE_RET();
+				POP(ESI);
+				LEAVE();
+				RET();
 				ADDrd(EDX, ESI);
 				MOVobb(EBX, ESI, AL);
 				break;
@@ -290,9 +388,10 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				JBb(7);
 				ZEROrd(EAX);
 				POP(EBX);
-				POP(ESI);
 				POP(EDI);
-				LEAVE_RET();
+				POP(ESI);
+				LEAVE();
+				RET();
 				ZEROrd(EDX);
 				MOVobb(EBX, ESI, DL);
 				ANDib(0x0f, DL);
@@ -308,14 +407,16 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				break;
 
 			case BPF_LD|BPF_MEM:
-				MOVid((uintptr_t)mem, ECX);
-				MOVid(ins->k * 4, ESI);
+				MOVrd(EBP, ECX);
+				MOVid(((int)ins->k - BPF_MEMWORDS) *
+				    sizeof(uint32_t), ESI);
 				MOVobd(ECX, ESI, EAX);
 				break;
 
 			case BPF_LDX|BPF_MEM:
-				MOVid((uintptr_t)mem, ECX);
-				MOVid(ins->k * 4, ESI);
+				MOVrd(EBP, ECX);
+				MOVid(((int)ins->k - BPF_MEMWORDS) *
+				    sizeof(uint32_t), ESI);
 				MOVobd(ECX, ESI, EDX);
 				break;
 
@@ -325,14 +426,16 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 				 * be optimized if the previous instruction
 				 * was already of this type
 				 */
-				MOVid((uintptr_t)mem, ECX);
-				MOVid(ins->k * 4, ESI);
+				MOVrd(EBP, ECX);
+				MOVid(((int)ins->k - BPF_MEMWORDS) *
+				    sizeof(uint32_t), ESI);
 				MOVomd(EAX, ECX, ESI);
 				break;
 
 			case BPF_STX:
-				MOVid((uintptr_t)mem, ECX);
-				MOVid(ins->k * 4, ESI);
+				MOVrd(EBP, ECX);
+				MOVid(((int)ins->k - BPF_MEMWORDS) *
+				    sizeof(uint32_t), ESI);
 				MOVomd(EDX, ECX, ESI);
 				break;
 
@@ -413,12 +516,23 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 
 			case BPF_ALU|BPF_DIV|BPF_X:
 				TESTrd(EDX, EDX);
-				JNEb(7);
-				ZEROrd(EAX);
-				POP(EBX);
-				POP(ESI);
-				POP(EDI);
-				LEAVE_RET();
+				if (save_esp) {
+					if (fpkt) {
+						JNEb(7);
+						ZEROrd(EAX);
+						POP(EBX);
+						POP(EDI);
+					} else {
+						JNEb(5);
+						ZEROrd(EAX);
+					}
+					POP(ESI);
+					LEAVE();
+				} else {
+					JNEb(3);
+					ZEROrd(EAX);
+				}
+				RET();
 				MOVrd(EDX, ECX);
 				ZEROrd(EDX);
 				DIVrd(ECX);
@@ -497,47 +611,56 @@ bpf_jit_compile(struct bpf_insn *prog, u_int nins, int *mem)
 			ins++;
 		}
 
-		pass++;
-		if (pass == 2)
-			break;
+		if (pass > 0)
+			continue;
 
+		*size = stream.cur_ip;
 #ifdef _KERNEL
-		stream.ibuf = (char *)malloc(stream.cur_ip, M_BPFJIT, M_NOWAIT);
-		if (stream.ibuf == NULL) {
-			free(stream.refs, M_BPFJIT);
-			return (NULL);
-		}
+		stream.ibuf = malloc(*size, M_BPFJIT, M_NOWAIT);
+		if (stream.ibuf == NULL)
+			break;
 #else
-		stream.ibuf = (char *)malloc(stream.cur_ip);
-		if (stream.ibuf == NULL) {
-			free(stream.refs);
-			return (NULL);
+		stream.ibuf = mmap(NULL, *size, PROT_READ | PROT_WRITE,
+		    MAP_ANON, -1, 0);
+		if (stream.ibuf == MAP_FAILED) {
+			stream.ibuf = NULL;
+			break;
 		}
 #endif
 
 		/*
-		 * modify the reference table to contain the offsets and
-		 * not the lengths of the instructions
+		 * Modify the reference table to contain the offsets and
+		 * not the lengths of the instructions.
 		 */
-		for (i = 1; i < nins + 1; i++)
-			stream.refs[i] += stream.refs[i - 1];
+		if (fjmp)
+			for (i = 1; i < nins + 1; i++)
+				stream.refs[i] += stream.refs[i - 1];
 
-		/* Reset the counters */
+		/* Reset the counters. */
 		stream.cur_ip = 0;
 		stream.bpf_pc = 0;
 
-		/* the second pass creates the actual code */
+		/* The second pass creates the actual code. */
 		emitm = emit_code;
 	}
 
 	/*
-	 * the reference table is needed only during compilation,
-	 * now we can free it
+	 * The reference table is needed only during compilation,
+	 * now we can free it.
 	 */
+	if (fjmp)
 #ifdef _KERNEL
-	free(stream.refs, M_BPFJIT);
+		free(stream.refs, M_BPFJIT);
 #else
-	free(stream.refs);
+		free(stream.refs);
+#endif
+
+#ifndef _KERNEL
+	if (stream.ibuf != NULL &&
+	    mprotect(stream.ibuf, *size, PROT_READ | PROT_EXEC) != 0) {
+		munmap(stream.ibuf, *size);
+		stream.ibuf = NULL;
+	}
 #endif
 
 	return ((bpf_filter_func)stream.ibuf);
diff --git a/sys/i386/i386/bpf_jit_machdep.h b/sys/i386/i386/bpf_jit_machdep.h
index 78a3b33134a..e82f68a2ec7 100644
--- a/sys/i386/i386/bpf_jit_machdep.h
+++ b/sys/i386/i386/bpf_jit_machdep.h
@@ -1,6 +1,6 @@
 /*-
  * Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
- * Copyright (C) 2005-2008 Jung-uk Kim 
+ * Copyright (C) 2005-2009 Jung-uk Kim 
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -60,7 +60,17 @@
 #define DL	2
 #define BL	3
 
-/* A stream of native binary code.*/
+/* Optimization flags */
+#define	BPF_JIT_FRET	0x01
+#define	BPF_JIT_FPKT	0x02
+#define	BPF_JIT_FMEM	0x04
+#define	BPF_JIT_FJMP	0x08
+#define	BPF_JIT_FADK	0x10
+
+#define	BPF_JIT_FLAG_ALL	\
+    (BPF_JIT_FPKT | BPF_JIT_FMEM | BPF_JIT_FJMP | BPF_JIT_FADK)
+
+/* A stream of native binary code */
 typedef struct bpf_bin_stream {
 	/* Current native instruction pointer. */
 	int		cur_ip;
@@ -92,7 +102,7 @@ typedef struct bpf_bin_stream {
 typedef void (*emit_func)(bpf_bin_stream *stream, u_int value, u_int n);
 
 /*
- * native Instruction Macros
+ * Native instruction macros
  */
 
 /* movl i32,r32 */
@@ -165,9 +175,14 @@ typedef void (*emit_func)(bpf_bin_stream *stream, u_int value, u_int n);
 	emitm(&stream, (5 << 4) | (1 << 3) | (r32 & 0x7), 1);		\
 } while (0)
 
-/* leave/ret */
-#define LEAVE_RET() do {						\
-	emitm(&stream, 0xc3c9, 2);					\
+/* leave */
+#define LEAVE() do {							\
+	emitm(&stream, 0xc9, 1);					\
+} while (0)
+
+/* ret */
+#define RET() do {							\
+	emitm(&stream, 0xc3, 1);					\
 } while (0)
 
 /* addl sr32,dr32 */
@@ -203,6 +218,13 @@ typedef void (*emit_func)(bpf_bin_stream *stream, u_int value, u_int n);
 	emitm(&stream, i32, 4);						\
 } while (0)
 
+/* subl i8,r32 */
+#define SUBib(i8, r32) do {						\
+	emitm(&stream, 0x83, 1);					\
+	emitm(&stream, (29 << 3) | (r32 & 0x7), 1);			\
+	emitm(&stream, i8, 1);						\
+} while (0)
+
 /* mull r32 */
 #define MULrd(r32) do {							\
 	emitm(&stream, 0xf7, 1);					\
diff --git a/sys/i386/i386/elan-mmcr.c b/sys/i386/i386/elan-mmcr.c
index 45f7c3ac27c..b184237b971 100644
--- a/sys/i386/i386/elan-mmcr.c
+++ b/sys/i386/i386/elan-mmcr.c
@@ -416,7 +416,8 @@ elan_watchdog(void *foo __unused, u_int spec, int *error)
 }
 
 static int
-elan_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
+elan_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nprot, vm_memattr_t *memattr)
 {
 
 	if (offset >= 0x1000) 
diff --git a/sys/i386/i386/identcpu.c b/sys/i386/i386/identcpu.c
index b0bcd094a5a..62c27abca47 100644
--- a/sys/i386/i386/identcpu.c
+++ b/sys/i386/i386/identcpu.c
@@ -265,7 +265,7 @@ printcpuinfo(void)
 				        strcat(cpu_model, "/P54C");
 					break;
 				case 0x30:
-				        strcat(cpu_model, "/P54T Overdrive");
+				        strcat(cpu_model, "/P24T");
 					break;
 				case 0x40:
 				        strcat(cpu_model, "/P55C");
@@ -746,7 +746,7 @@ printcpuinfo(void)
 				"\024SSE4.1"
 				"\025SSE4.2"
 				"\026x2APIC"	/* xAPIC Extensions */
-				"\027"
+				"\027MOVBE"
 				"\030POPCNT"
 				"\031"
 				"\032"
diff --git a/sys/i386/i386/initcpu.c b/sys/i386/i386/initcpu.c
index bcd9922b089..dad79197ec0 100644
--- a/sys/i386/i386/initcpu.c
+++ b/sys/i386/i386/initcpu.c
@@ -81,7 +81,6 @@ SYSCTL_INT(_hw, OID_AUTO, instruction_sse, CTLFLAG_RD,
  *  1: force disable CLFLUSH
  */
 static int	hw_clflush_disable = -1;
-TUNABLE_INT("hw.clflush_disable", &hw_clflush_disable);
 
 /* Must *NOT* be BSS or locore will bzero these after setting them */
 int	cpu = 0;		/* Are we 386, 386sx, 486, etc? */
@@ -737,9 +736,8 @@ initializecpu(void)
 	 * hw.clflush_disable tunable.  This may help Xen guest on some AMD
 	 * CPUs.
 	 */
-	if (hw_clflush_disable == 1) {
+	if (hw_clflush_disable == 1)
 		cpu_feature &= ~CPUID_CLFSH;
-	}
 
 #if defined(PC98) && !defined(CPU_UPGRADE_HW_CACHE)
 	/*
diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c
index 5c294eb35c1..8313216b116 100644
--- a/sys/i386/i386/machdep.c
+++ b/sys/i386/i386/machdep.c
@@ -2432,6 +2432,9 @@ do_next:
 #else
 	phys_avail[0] = physfree;
 	phys_avail[1] = xen_start_info->nr_pages*PAGE_SIZE;
+	dump_avail[0] = 0;	
+	dump_avail[1] = xen_start_info->nr_pages*PAGE_SIZE;
+	
 #endif
 	
 	/*
diff --git a/sys/i386/i386/mca.c b/sys/i386/i386/mca.c
index 5e7e4ffea26..eaa78b86262 100644
--- a/sys/i386/i386/mca.c
+++ b/sys/i386/i386/mca.c
@@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -117,48 +118,6 @@ sysctl_mca_records(SYSCTL_HANDLER_ARGS)
 	return (SYSCTL_OUT(req, &record, sizeof(record)));
 }
 
-static struct mca_record *
-mca_record_entry(int bank)
-{
-	struct mca_internal *rec;
-	uint64_t status;
-	u_int p[4];
-
-	status = rdmsr(MSR_MC_STATUS(bank));
-	if (!(status & MC_STATUS_VAL))
-		return (NULL);
-
-	rec = malloc(sizeof(*rec), M_MCA, M_NOWAIT | M_ZERO);
-	if (rec == NULL) {
-		printf("MCA: Unable to allocate space for an event.\n");
-		return (NULL);
-	}
-
-	/* Save exception information. */
-	rec->rec.mr_status = status;
-	if (status & MC_STATUS_ADDRV)
-		rec->rec.mr_addr = rdmsr(MSR_MC_ADDR(bank));
-	if (status & MC_STATUS_MISCV)
-		rec->rec.mr_misc = rdmsr(MSR_MC_MISC(bank));
-	rec->rec.mr_tsc = rdtsc();
-	rec->rec.mr_apic_id = PCPU_GET(apic_id);
-
-	/*
-	 * Clear machine check.  Don't do this for uncorrectable
-	 * errors so that the BIOS can see them.
-	 */
-	if (!(rec->rec.mr_status & (MC_STATUS_PCC | MC_STATUS_UC))) {
-		wrmsr(MSR_MC_STATUS(bank), 0);
-		do_cpuid(0, p);
-	}
-
-	mtx_lock_spin(&mca_lock);
-	STAILQ_INSERT_TAIL(&mca_records, rec, link);
-	mca_count++;
-	mtx_unlock_spin(&mca_lock);
-	return (&rec->rec);
-}
-
 static const char *
 mca_error_ttype(uint16_t mca_error)
 {
@@ -219,11 +178,13 @@ mca_error_request(uint16_t mca_error)
 }
 
 /* Dump details about a single machine check. */
-static void
-mca_log(struct mca_record *rec)
+static void __nonnull(1)
+mca_log(const struct mca_record *rec)
 {
 	uint16_t mca_error;
 
+	printf("MCA: bank %d, status 0x%016llx\n", rec->mr_bank,
+	    (long long)rec->mr_status);
 	printf("MCA: CPU %d ", rec->mr_apic_id);
 	if (rec->mr_status & MC_STATUS_UC)
 		printf("UNCOR ");
@@ -329,6 +290,59 @@ mca_log(struct mca_record *rec)
 		printf("MCA: Address 0x%llx\n", (long long)rec->mr_addr);
 }
 
+static int __nonnull(2)
+mca_check_status(int bank, struct mca_record *rec)
+{
+	uint64_t status;
+	u_int p[4];
+
+	status = rdmsr(MSR_MC_STATUS(bank));
+	if (!(status & MC_STATUS_VAL))
+		return (0);
+
+	/* Save exception information. */
+	rec->mr_status = status;
+	rec->mr_bank = bank;
+	rec->mr_addr = 0;
+	if (status & MC_STATUS_ADDRV)
+		rec->mr_addr = rdmsr(MSR_MC_ADDR(bank));
+	rec->mr_misc = 0;
+	if (status & MC_STATUS_MISCV)
+		rec->mr_misc = rdmsr(MSR_MC_MISC(bank));
+	rec->mr_tsc = rdtsc();
+	rec->mr_apic_id = PCPU_GET(apic_id);
+
+	/*
+	 * Clear machine check.  Don't do this for uncorrectable
+	 * errors so that the BIOS can see them.
+	 */
+	if (!(rec->mr_status & (MC_STATUS_PCC | MC_STATUS_UC))) {
+		wrmsr(MSR_MC_STATUS(bank), 0);
+		do_cpuid(0, p);
+	}
+	return (1);
+}
+
+static void __nonnull(1)
+mca_record_entry(const struct mca_record *record)
+{
+	struct mca_internal *rec;
+
+	rec = malloc(sizeof(*rec), M_MCA, M_NOWAIT);
+	if (rec == NULL) {
+		printf("MCA: Unable to allocate space for an event.\n");
+		mca_log(record);
+		return;
+	}
+
+	rec->rec = *record;
+	rec->logged = 0;
+	mtx_lock_spin(&mca_lock);
+	STAILQ_INSERT_TAIL(&mca_records, rec, link);
+	mca_count++;
+	mtx_unlock_spin(&mca_lock);
+}
+
 /*
  * This scans all the machine check banks of the current CPU to see if
  * there are any machine checks.  Any non-recoverable errors are
@@ -341,7 +355,7 @@ mca_log(struct mca_record *rec)
 static int
 mca_scan(int mcip)
 {
-	struct mca_record *rec;
+	struct mca_record rec;
 	uint64_t mcg_cap, ucmask;
 	int count, i, recoverable;
 
@@ -354,13 +368,13 @@ mca_scan(int mcip)
 		ucmask |= MC_STATUS_OVER;
 	mcg_cap = rdmsr(MSR_MCG_CAP);
 	for (i = 0; i < (mcg_cap & MCG_CAP_COUNT); i++) {
-		rec = mca_record_entry(i);
-		if (rec != NULL) {
+		if (mca_check_status(i, &rec)) {
 			count++;
-			if (rec->mr_status & ucmask) {
+			if (rec.mr_status & ucmask) {
 				recoverable = 0;
-				mca_log(rec);
+				mca_log(&rec);
 			}
+			mca_record_entry(&rec);
 		}
 	}
 	return (mcip ? recoverable : count);
@@ -465,6 +479,8 @@ void
 mca_init(void)
 {
 	uint64_t mcg_cap;
+	uint64_t ctl;
+	int skip;
 	int i;
 
 	/* MCE is required. */
@@ -482,15 +498,26 @@ mca_init(void)
 			wrmsr(MSR_MCG_CTL, MCG_CTL_ENABLE);
 
 		for (i = 0; i < (mcg_cap & MCG_CAP_COUNT); i++) {
-			/*
-			 * Enable logging of all errors.  For P6
-			 * processors, MC0_CTL is always enabled.
-			 *
-			 * XXX: Better CPU test needed here?
-			 */
-			if (!(i == 0 && (cpu_id & 0xf00) == 0x600))
-				wrmsr(MSR_MC_CTL(i), 0xffffffffffffffffUL);
+			/* By default enable logging of all errors. */
+			ctl = 0xffffffffffffffffUL;
+			skip = 0;
 
+			if (cpu_vendor_id == CPU_VENDOR_INTEL) {
+				/*
+				 * For P6 models before Nehalem MC0_CTL is
+				 * always enabled and reserved.
+				 */
+				if (i == 0 && CPUID_TO_FAMILY(cpu_id) == 0x6
+				    && CPUID_TO_MODEL(cpu_id) < 0x1a)
+					skip = 1;
+			} else if (cpu_vendor_id == CPU_VENDOR_AMD) {
+				/* BKDG for Family 10h: unset GartTblWkEn. */
+				if (i == 4 && CPUID_TO_FAMILY(cpu_id) >= 0xf)
+					ctl &= ~(1UL << 10);
+			}
+
+			if (!skip)
+				wrmsr(MSR_MC_CTL(i), ctl);
 			/* Clear all errors. */
 			wrmsr(MSR_MC_STATUS(i), 0);
 		}
diff --git a/sys/i386/i386/mem.c b/sys/i386/i386/mem.c
index b2deab21c7e..11bfc37cfbe 100644
--- a/sys/i386/i386/mem.c
+++ b/sys/i386/i386/mem.c
@@ -163,8 +163,8 @@ memrw(struct cdev *dev, struct uio *uio, int flags)
  */
 /* ARGSUSED */
 int
-memmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
-    int prot __unused)
+memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot __unused, vm_memattr_t *memattr __unused)
 {
 	if (dev2unit(dev) == CDEV_MINOR_MEM)
 		*paddr = offset;
diff --git a/sys/i386/i386/minidump_machdep.c b/sys/i386/i386/minidump_machdep.c
index af523061ca8..92c0b8f6ffc 100644
--- a/sys/i386/i386/minidump_machdep.c
+++ b/sys/i386/i386/minidump_machdep.c
@@ -65,6 +65,11 @@ static void *dump_va;
 static uint64_t counter, progress;
 
 CTASSERT(sizeof(*vm_page_dump) == 4);
+#ifndef XEN
+#define xpmap_mtop(x) (x)
+#define xpmap_ptom(x) (x)
+#endif
+
 
 static int
 is_dumpable(vm_paddr_t pa)
@@ -194,7 +199,7 @@ minidumpsys(struct dumperinfo *di)
 		j = va >> PDRSHIFT;
 		if ((pd[j] & (PG_PS | PG_V)) == (PG_PS | PG_V))  {
 			/* This is an entire 2M page. */
-			pa = pd[j] & PG_PS_FRAME;
+			pa = xpmap_mtop(pd[j] & PG_PS_FRAME);
 			for (k = 0; k < NPTEPG; k++) {
 				if (is_dumpable(pa))
 					dump_add_page(pa);
@@ -204,10 +209,10 @@ minidumpsys(struct dumperinfo *di)
 		}
 		if ((pd[j] & PG_V) == PG_V) {
 			/* set bit for each valid page in this 2MB block */
-			pt = pmap_kenter_temporary(pd[j] & PG_FRAME, 0);
+			pt = pmap_kenter_temporary(xpmap_mtop(pd[j] & PG_FRAME), 0);
 			for (k = 0; k < NPTEPG; k++) {
 				if ((pt[k] & PG_V) == PG_V) {
-					pa = pt[k] & PG_FRAME;
+					pa = xpmap_mtop(pt[k] & PG_FRAME);
 					if (is_dumpable(pa))
 						dump_add_page(pa);
 				}
@@ -307,8 +312,24 @@ minidumpsys(struct dumperinfo *di)
 			continue;
 		}
 		if ((pd[j] & PG_V) == PG_V) {
-			pa = pd[j] & PG_FRAME;
+			pa = xpmap_mtop(pd[j] & PG_FRAME);
+#ifndef XEN
 			error = blk_write(di, 0, pa, PAGE_SIZE);
+#else
+			pt = pmap_kenter_temporary(pa, 0);
+			memcpy(fakept, pt, PAGE_SIZE);
+			for (i = 0; i < NPTEPG; i++) 
+				fakept[i] = xpmap_mtop(fakept[i]);
+			error = blk_write(di, (char *)&fakept, 0, PAGE_SIZE);
+			if (error)
+				goto fail;
+			/* flush, in case we reuse fakept in the same block */
+			error = blk_flush(di);
+			if (error)
+				goto fail;
+			bzero(fakept, sizeof(fakept));
+#endif			
+			
 			if (error)
 				goto fail;
 		} else {
diff --git a/sys/i386/i386/trap.c b/sys/i386/i386/trap.c
index f8d0ea02634..1d3dc3be712 100644
--- a/sys/i386/i386/trap.c
+++ b/sys/i386/i386/trap.c
@@ -825,9 +825,7 @@ trap_pfault(frame, usermode, eva)
 		PROC_UNLOCK(p);
 
 		/* Fault in the user page: */
-		rv = vm_fault(map, va, ftype,
-			      (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY
-						      : VM_FAULT_NORMAL);
+		rv = vm_fault(map, va, ftype, VM_FAULT_NORMAL);
 
 		PROC_LOCK(p);
 		--p->p_lock;
diff --git a/sys/i386/include/cpufunc.h b/sys/i386/include/cpufunc.h
index a0cecca0578..2de6f448c9a 100644
--- a/sys/i386/include/cpufunc.h
+++ b/sys/i386/include/cpufunc.h
@@ -203,28 +203,28 @@ inl(u_int port)
 }
 
 static __inline void
-insb(u_int port, void *addr, size_t cnt)
+insb(u_int port, void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; insb"
-			 : "+D" (addr), "+c" (cnt)
+			 : "+D" (addr), "+c" (count)
 			 : "d" (port)
 			 : "memory");
 }
 
 static __inline void
-insw(u_int port, void *addr, size_t cnt)
+insw(u_int port, void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; insw"
-			 : "+D" (addr), "+c" (cnt)
+			 : "+D" (addr), "+c" (count)
 			 : "d" (port)
 			 : "memory");
 }
 
 static __inline void
-insl(u_int port, void *addr, size_t cnt)
+insl(u_int port, void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; insl"
-			 : "+D" (addr), "+c" (cnt)
+			 : "+D" (addr), "+c" (count)
 			 : "d" (port)
 			 : "memory");
 }
@@ -257,26 +257,26 @@ outl(u_int port, u_int data)
 }
 
 static __inline void
-outsb(u_int port, const void *addr, size_t cnt)
+outsb(u_int port, const void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; outsb"
-			 : "+S" (addr), "+c" (cnt)
+			 : "+S" (addr), "+c" (count)
 			 : "d" (port));
 }
 
 static __inline void
-outsw(u_int port, const void *addr, size_t cnt)
+outsw(u_int port, const void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; outsw"
-			 : "+S" (addr), "+c" (cnt)
+			 : "+S" (addr), "+c" (count)
 			 : "d" (port));
 }
 
 static __inline void
-outsl(u_int port, const void *addr, size_t cnt)
+outsl(u_int port, const void *addr, size_t count)
 {
 	__asm __volatile("cld; rep; outsl"
-			 : "+S" (addr), "+c" (cnt)
+			 : "+S" (addr), "+c" (count)
 			 : "d" (port));
 }
 
@@ -684,9 +684,9 @@ void	halt(void);
 void	ia32_pause(void);
 u_char	inb(u_int port);
 u_int	inl(u_int port);
-void	insb(u_int port, void *addr, size_t cnt);
-void	insl(u_int port, void *addr, size_t cnt);
-void	insw(u_int port, void *addr, size_t cnt);
+void	insb(u_int port, void *addr, size_t count);
+void	insl(u_int port, void *addr, size_t count);
+void	insw(u_int port, void *addr, size_t count);
 register_t	intr_disable(void);
 void	intr_restore(register_t ef);
 void	invd(void);
@@ -711,9 +711,9 @@ void	load_gs(u_int sel);
 void	ltr(u_short sel);
 void	outb(u_int port, u_char data);
 void	outl(u_int port, u_int data);
-void	outsb(u_int port, const void *addr, size_t cnt);
-void	outsl(u_int port, const void *addr, size_t cnt);
-void	outsw(u_int port, const void *addr, size_t cnt);
+void	outsb(u_int port, const void *addr, size_t count);
+void	outsl(u_int port, const void *addr, size_t count);
+void	outsw(u_int port, const void *addr, size_t count);
 void	outw(u_int port, u_short data);
 u_int	rcr0(void);
 u_int	rcr2(void);
diff --git a/sys/i386/include/mca.h b/sys/i386/include/mca.h
index c43d98953e4..ddc3aeb649a 100644
--- a/sys/i386/include/mca.h
+++ b/sys/i386/include/mca.h
@@ -36,6 +36,7 @@ struct mca_record {
 	uint64_t	mr_misc;
 	uint64_t	mr_tsc;
 	int		mr_apic_id;
+	int		mr_bank;
 };
 
 #ifdef _KERNEL
diff --git a/sys/i386/include/specialreg.h b/sys/i386/include/specialreg.h
index c2030597a06..d51da6d59fe 100644
--- a/sys/i386/include/specialreg.h
+++ b/sys/i386/include/specialreg.h
@@ -126,6 +126,7 @@
 #define	CPUID2_SSE41	0x00080000
 #define	CPUID2_SSE42	0x00100000
 #define	CPUID2_X2APIC	0x00200000
+#define	CPUID2_MOVBE	0x00400000
 #define	CPUID2_POPCNT	0x00800000
 
 /*
diff --git a/sys/i386/xbox/xboxfb.c b/sys/i386/xbox/xboxfb.c
index 906ced585d7..5d83d12eee6 100644
--- a/sys/i386/xbox/xboxfb.c
+++ b/sys/i386/xbox/xboxfb.c
@@ -521,8 +521,8 @@ xboxfb_blank_display(video_adapter_t *adp, int mode)
 }
 
 static int
-xboxfb_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
-    int prot)
+xboxfb_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
 	return (EINVAL);
 }
diff --git a/sys/i386/xen/exception.s b/sys/i386/xen/exception.s
index 607f96a46b2..e965ffd026d 100644
--- a/sys/i386/xen/exception.s
+++ b/sys/i386/xen/exception.s
@@ -295,10 +295,6 @@ ENTRY(fork_trampoline)
 	SUPERALIGN_TEXT
 MCOUNT_LABEL(bintr)
 
-#ifdef DEV_ATPIC	
-#include 
-#endif
-	
 #ifdef DEV_APIC
 	.data
 	.p2align 4
diff --git a/sys/i386/xen/pmap.c b/sys/i386/xen/pmap.c
index b25d0ba32ca..c5c3e66ba73 100644
--- a/sys/i386/xen/pmap.c
+++ b/sys/i386/xen/pmap.c
@@ -3101,9 +3101,10 @@ void *
 pmap_kenter_temporary(vm_paddr_t pa, int i)
 {
 	vm_offset_t va;
+	vm_paddr_t ma = xpmap_ptom(pa);
 
 	va = (vm_offset_t)crashdumpmap + (i * PAGE_SIZE);
-	pmap_kenter(va, pa);
+	PT_SET_MA(va, (ma & ~PAGE_MASK) | PG_V | pgeflag);
 	invlpg(va);
 	return ((void *)crashdumpmap);
 }
diff --git a/sys/ia64/conf/GENERIC b/sys/ia64/conf/GENERIC
index f9250075acf..59d1a85c524 100644
--- a/sys/ia64/conf/GENERIC
+++ b/sys/ia64/conf/GENERIC
@@ -149,6 +149,7 @@ device		sbp		# SCSI over FireWire (need scbus & da)
 
 # Various (pseudo) devices
 device		ether		# Ethernet support
+device		vlan		# 802.1Q VLAN support
 device		faith		# IPv6-to-IPv4 relaying (translation)
 device		gif		# IPv6 and IPv4 tunneling
 device		loop		# Network loopback
diff --git a/sys/ia64/ia64/bus_machdep.c b/sys/ia64/ia64/bus_machdep.c
new file mode 100644
index 00000000000..f9e019bfc64
--- /dev/null
+++ b/sys/ia64/ia64/bus_machdep.c
@@ -0,0 +1,356 @@
+/*-
+ * Copyright (c) 2009 Marcel Moolenaar
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+
+extern u_long ia64_port_base;
+
+#define __PIO_ADDR(port)        \
+        (void *)(ia64_port_base | (((port) & 0xfffc) << 10) | ((port) & 0xFFF))
+
+uint8_t
+bus_space_read_io_1(u_long port)
+{
+	uint8_t v;
+
+	ia64_mf();
+	v = ia64_ld1(__PIO_ADDR(port));
+	ia64_mf_a();
+	ia64_mf();
+	return (v);
+}
+
+uint16_t
+bus_space_read_io_2(u_long port)
+{
+	uint16_t v;
+
+	ia64_mf();
+	v = ia64_ld2(__PIO_ADDR(port));
+	ia64_mf_a();
+	ia64_mf();
+	return (v);
+}
+
+uint32_t
+bus_space_read_io_4(u_long port)
+{
+	uint32_t v;
+
+	ia64_mf();
+	v = ia64_ld4(__PIO_ADDR(port));
+	ia64_mf_a();
+	ia64_mf();
+	return (v);
+}
+
+#if 0
+uint64_t
+bus_space_read_io_8(u_long port)
+{
+}
+#endif
+
+void
+bus_space_write_io_1(u_long port, uint8_t val)
+{
+
+	ia64_mf();
+	ia64_st1(__PIO_ADDR(port), val);
+	ia64_mf_a();
+	ia64_mf();
+}
+
+void
+bus_space_write_io_2(u_long port, uint16_t val)
+{
+
+	ia64_mf();
+	ia64_st2(__PIO_ADDR(port), val);
+	ia64_mf_a();
+	ia64_mf();
+}
+
+void
+bus_space_write_io_4(u_long port, uint32_t val)
+{
+
+	ia64_mf();
+	ia64_st4(__PIO_ADDR(port), val);
+	ia64_mf_a();
+	ia64_mf();
+}
+
+#if 0
+void
+bus_space_write_io_8(u_long port, uint64_t val)
+{
+}
+#endif
+
+void
+bus_space_read_multi_io_1(u_long port, uint8_t *ptr, size_t count)
+{
+
+	while (count-- > 0)
+		*ptr++ = bus_space_read_io_1(port);
+}
+
+void
+bus_space_read_multi_io_2(u_long port, uint16_t *ptr, size_t count)
+{
+
+	while (count-- > 0)
+		*ptr++ = bus_space_read_io_2(port);
+}
+
+void
+bus_space_read_multi_io_4(u_long port, uint32_t *ptr, size_t count)
+{
+
+	while (count-- > 0)
+		*ptr++ = bus_space_read_io_4(port);
+}
+
+#if 0
+void
+bus_space_read_multi_io_8(u_long port, uint64_t *ptr, size_t count)
+{
+}
+#endif
+
+void
+bus_space_write_multi_io_1(u_long port, const uint8_t *ptr, size_t count)
+{
+
+	while (count-- > 0)
+		bus_space_write_io_1(port, *ptr++);
+}
+
+void
+bus_space_write_multi_io_2(u_long port, const uint16_t *ptr, size_t count)
+{
+
+	while (count-- > 0)
+		bus_space_write_io_2(port, *ptr++);
+}
+
+void
+bus_space_write_multi_io_4(u_long port, const uint32_t *ptr, size_t count)
+{
+
+	while (count-- > 0)
+		bus_space_write_io_4(port, *ptr++);
+}
+
+#if 0
+void
+bus_space_write_multi_io_8(u_long port, const uint64_t *ptr, size_t count)
+{
+}
+#endif
+
+void
+bus_space_read_region_io_1(u_long port, uint8_t *ptr, size_t count)
+{
+
+	while (count-- > 0) {
+		*ptr++ = bus_space_read_io_1(port);
+		port += 1;
+	}
+}
+
+void
+bus_space_read_region_io_2(u_long port, uint16_t *ptr, size_t count) 
+{
+
+	while (count-- > 0) {
+		*ptr++ = bus_space_read_io_2(port);
+		port += 2;
+	}
+}
+
+void
+bus_space_read_region_io_4(u_long port, uint32_t *ptr, size_t count) 
+{
+
+	while (count-- > 0) {
+		*ptr++ = bus_space_read_io_4(port);
+		port += 4;
+	}
+}
+
+#if 0
+void bus_space_read_region_io_8(u_long, uint64_t *, size_t);
+#endif
+
+void
+bus_space_write_region_io_1(u_long port, const uint8_t *ptr, size_t count)
+{
+
+	while (count-- > 0) {
+		bus_space_write_io_1(port, *ptr++);
+		port += 1;
+	}
+}
+
+void
+bus_space_write_region_io_2(u_long port, const uint16_t *ptr, size_t count)
+{
+
+	while (count-- > 0) {
+		bus_space_write_io_2(port, *ptr++);
+		port += 2;
+	}
+}
+
+void
+bus_space_write_region_io_4(u_long port, const uint32_t *ptr, size_t count)
+{
+
+	while (count-- > 0) {
+		bus_space_write_io_4(port, *ptr++);
+		port += 4;
+	}
+}
+
+#if 0
+void
+bus_space_write_region_io_8(u_long port, const uint64_t *ptr, size_t count)
+{
+}
+#endif
+
+void
+bus_space_set_region_io_1(u_long port, uint8_t val, size_t count)
+{
+
+	while (count-- > 0) {
+		bus_space_write_io_1(port, val);
+		port += 1;
+	}
+}
+
+void
+bus_space_set_region_io_2(u_long port, uint16_t val, size_t count)
+{
+
+	while (count-- > 0) {
+		bus_space_write_io_2(port, val);
+		port += 2;
+	}
+}
+
+void
+bus_space_set_region_io_4(u_long port, uint32_t val, size_t count)
+{
+
+	while (count-- > 0) {
+		bus_space_write_io_4(port, val);
+		port += 4;
+	}
+}
+
+#if 0
+void
+bus_space_set_region_io_8(u_long port, uint64_t val, size_t count)
+{
+}
+#endif
+
+void 
+bus_space_copy_region_io_1(u_long src, u_long dst, size_t count) 
+{
+	long delta;
+	uint8_t val;
+
+	if (src < dst) {
+		src += count - 1;
+		dst += count - 1;
+		delta = -1;
+	} else
+		delta = 1;
+
+	while (count-- > 0) {
+		val = bus_space_read_io_1(src);
+		bus_space_write_io_1(dst, val);
+		src += delta;
+		dst += delta;
+	}
+}
+
+void 
+bus_space_copy_region_io_2(u_long src, u_long dst, size_t count) 
+{
+	long delta;
+	uint16_t val;
+
+	if (src < dst) {
+		src += 2 * (count - 1);
+		dst += 2 * (count - 1);
+		delta = -2;
+	} else
+		delta = 2;
+
+	while (count-- > 0) {
+		val = bus_space_read_io_2(src);
+		bus_space_write_io_2(dst, val);
+		src += delta;
+		dst += delta;
+	}
+}
+
+void 
+bus_space_copy_region_io_4(u_long src, u_long dst, size_t count) 
+{
+	long delta;
+	uint32_t val;
+
+	if (src < dst) {
+		src += 4 * (count - 1);
+		dst += 4 * (count - 1);
+		delta = -4;
+	} else
+		delta = 4;
+
+	while (count-- > 0) {
+		val = bus_space_read_io_4(src);
+		bus_space_write_io_4(dst, val);
+		src += delta;
+		dst += delta;
+	}
+}
+
+#if 0
+void
+bus_space_copy_region_io_8(u_long src, u_long dst, size_t count)
+{
+}
+#endif
diff --git a/sys/ia64/ia64/clock.c b/sys/ia64/ia64/clock.c
index 22fcf9bf452..a9c39fce359 100644
--- a/sys/ia64/ia64/clock.c
+++ b/sys/ia64/ia64/clock.c
@@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 
 uint64_t ia64_clock_reload;
 
@@ -64,9 +65,9 @@ void
 pcpu_initclock(void)
 {
 
-	PCPU_SET(clockadj, 0);
-	PCPU_SET(clock, ia64_get_itc());
-	ia64_set_itm(PCPU_GET(clock) + ia64_clock_reload);
+	PCPU_SET(md.clockadj, 0);
+	PCPU_SET(md.clock, ia64_get_itc());
+	ia64_set_itm(PCPU_GET(md.clock) + ia64_clock_reload);
 	ia64_set_itv(CLOCK_VECTOR);	/* highest priority class */
 	ia64_srlz_d();
 }
@@ -78,15 +79,15 @@ pcpu_initclock(void)
 void
 cpu_initclocks()
 {
+	u_long itc_freq;
 
-	if (itc_frequency == 0)
-		panic("Unknown clock frequency");
+	itc_freq = (u_long)ia64_itc_freq() * 1000000ul;
 
 	stathz = hz;
-	ia64_clock_reload = (itc_frequency + hz/2) / hz;
+	ia64_clock_reload = (itc_freq + hz/2) / hz;
 
 #ifndef SMP
-	ia64_timecounter.tc_frequency = itc_frequency;
+	ia64_timecounter.tc_frequency = itc_freq;
 	tc_init(&ia64_timecounter);
 #endif
 
diff --git a/sys/ia64/ia64/db_machdep.c b/sys/ia64/ia64/db_machdep.c
index cdd60ab03c6..d1163cbd050 100644
--- a/sys/ia64/ia64/db_machdep.c
+++ b/sys/ia64/ia64/db_machdep.c
@@ -29,7 +29,7 @@
 #include 
 __FBSDID("$FreeBSD$");
 
-#include 
+#include "opt_xtrace.h"
 
 #include 
 #include 
diff --git a/sys/ia64/ia64/exception.S b/sys/ia64/ia64/exception.S
index 1f076020f77..1a5fa32eacd 100644
--- a/sys/ia64/ia64/exception.S
+++ b/sys/ia64/ia64/exception.S
@@ -28,11 +28,19 @@
 #include 
 __FBSDID("$FreeBSD$");
 
-#include 
+#include "opt_xtrace.h"
 
 #include 
 #include 
 
+/*
+ * Nested TLB restart tokens. These are used by the
+ * nested TLB handler for jumping back to the code
+ * where the nested TLB was caused.
+ */
+#define	NTLBRT_SAVE	0x12c12c
+#define	NTLBRT_RESTORE  0x12c12d
+
 /*
  * ar.k7 = kernel memory stack
  * ar.k6 = kernel register stack
@@ -140,9 +148,10 @@ ENTRY_NOPROFILE(exception_save, 0)
 	add		r31=8,r30
 	;;
 }
-{	.mlx
+{	.mib
 	mov		r22=cr.iip
-	movl		r26=exception_save_restart
+	addl		r29=NTLBRT_SAVE,r0	// 22-bit restart token.
+	nop		0
 	;;
 }
 
@@ -157,7 +166,7 @@ ENTRY_NOPROFILE(exception_save, 0)
 	 * that are currently alive:
 	 *	r16,r17=arguments
 	 *	r18=pr, r19=length, r20=unat, r21=rsc, r22=iip, r23=TOS
-	 *	r26=restart point
+	 *	r29=restart point
 	 *	r30,r31=trapframe pointers
 	 *	p14,p15=memory stack switch
 	 */
@@ -219,43 +228,42 @@ exception_save_restart:
 (p13)	dep		r20=r20,r21,0,9		// align dirty registers
 	;;
 }
-	// r20=bspstore, r22=iip, r23=ipsr
+	// r19=rnat, r20=bspstore, r22=iip, r23=ipsr
 {	.mmi
 	st8		[r31]=r23,16		// psr
 (p13)	mov		ar.bspstore=r20
 	nop		0
 	;;
 }
-{	.mmi
+{	.mmb
+(p13)	mov		ar.rnat=r19
 	mov		r18=ar.bsp
+	nop		0
 	;;
+}
+{	.mmi
 	mov		r19=cr.ifs
+	st8.spill	[r30]=gp,16		// gp
 	sub		r18=r18,r20
 	;;
-}
-{	.mmi
-	st8.spill	[r30]=gp,16		// gp
-	st8		[r31]=r18,16		// ndirty
-	nop		0
-	;;
 }
 	// r19=ifs, r22=iip
-{	.mmi
+{	.mmb
+	st8		[r31]=r18,16		// ndirty
 	st8		[r30]=r19,16		// cfm
-	st8		[r31]=r22,16		// iip
 	nop		0
 	;;
 }
 {	.mmi
-	st8		[r30]=r17		// ifa
 	mov		r18=cr.isr
+	st8		[r31]=r22,16		// iip
 	add		r29=16,r30
 	;;
 }
-{	.mmi
-	st8		[r31]=r18		// isr
-	add		r30=8,r29
-	add		r31=16,r29
+{	.mmb
+	st8		[r30]=r17,24		// ifa
+	st8		[r31]=r18,24		// isr
+	nop		0
 	;;
 }
 {	.mmi
@@ -544,7 +552,7 @@ ENTRY_NOPROFILE(exception_restore, 0)
 	ld8		r21=[r31],24		// rnat
 	mov		ar.pfs=r28
 	;;
-	ld8.fill	r29=[r30],16		// tp
+	ld8.fill	r26=[r30],16		// tp
 	ld8		r22=[r31],16		// rsc
 	;;
 {	.mmi
@@ -555,21 +563,21 @@ ENTRY_NOPROFILE(exception_restore, 0)
 }
 {	.mmi
 	ld8.fill	r1=[r30],16		// gp
-	ld8		r25=[r31],16		// ndirty
+	ld8		r27=[r31],16		// ndirty
 	cmp.le		p14,p15=5,r28
 	;;
 }
 {	.mmb
-	ld8		r26=[r30]		// cfm
+	ld8		r25=[r30]		// cfm
 	ld8		r19=[r31]		// ip
 	nop		0
 	;;
 }
-{	.mib
+{	.mii
 	// Switch register stack
 	alloc		r30=ar.pfs,0,0,0,0	// discard current frame
-	shl		r31=r25,16		// value for ar.rsc
-	nop		0
+	shl		r31=r27,16		// value for ar.rsc
+(p15)	mov		r13=r26
 	;;
 }
 	// The loadrs can fault if the backing store is not currently
@@ -580,7 +588,7 @@ ENTRY_NOPROFILE(exception_restore, 0)
 {	.mmi
 	mov		ar.rsc=r31		// setup for loadrs
 	mov		ar.k7=r16
-(p15)	mov		r13=r29
+	addl		r29=NTLBRT_RESTORE,r0	// 22-bit restart token 
 	;;
 }
 exception_restore_restart:
@@ -611,7 +619,7 @@ exception_restore_restart:
 }
 {	.mmi
 	mov		cr.ipsr=r24
-	mov		cr.ifs=r26
+	mov		cr.ifs=r25
 	mov		pr=r18,0x1ffff
 	;;
 }
@@ -944,7 +952,7 @@ IVT_ENTRY(Data_Nested_TLB, 0x1400)
 }
 {	.mii
 	ld8		r27=[r27]				// dir L0 page
-	extr.u		r29=r30,2*PAGE_SHIFT-5, PAGE_SHIFT-3	// dir L1 index
+	extr.u		r26=r30,2*PAGE_SHIFT-5, PAGE_SHIFT-3	// dir L1 index
 	;;
 	dep		r27=0,r27,61,3
 	;;
@@ -957,16 +965,16 @@ IVT_ENTRY(Data_Nested_TLB, 0x1400)
 	;;
 }
 {	.mmi
-	shladd		r27=r29,3,r27
+	shladd		r27=r26,3,r27
 	;;
-	mov		r29=rr[r30]
+	mov		r26=rr[r30]
 	dep		r27=0,r27,61,3
 	;;
 }
 {	.mii
 	ld8		r27=[r27]				// pte page
 	shl		r28=r28,5
-	dep		r29=0,r29,0,2
+	dep		r26=0,r26,0,2
 	;;
 }
 {	.mmi
@@ -979,28 +987,54 @@ IVT_ENTRY(Data_Nested_TLB, 0x1400)
 {	.mmi
 	ld8		r28=[r27]		// pte
 	;;
-	mov		cr.itir=r29
+	mov		cr.itir=r26
 	or		r28=PTE_DIRTY+PTE_ACCESSED,r28
 	;;
 }
-{	.mlx
+{	.mmi
 	st8		[r27]=r28
-	movl		r29=exception_save_restart
 	;;
+	addl		r26=NTLBRT_SAVE,r0
+	addl		r27=NTLBRT_RESTORE,r0
 }
 {	.mmi
 	itc.d		r28
 	;;
 	ssm		psr.dt
-	cmp.eq		p12,p13=r26,r29
+	cmp.eq		p12,p0=r29,r26
 	;;
 }
-{	.mbb
+{	.mib
 	srlz.d
+	cmp.eq		p13,p0=r29,r27
 (p12)	br.sptk		exception_save_restart
+	;;
+}
+{	.mib
+	nop		0
+	nop		0
 (p13)	br.sptk		exception_restore_restart
 	;;
 }
+{	.mlx
+	mov		r26=ar.bsp
+	movl		r27=kstack
+	;;
+}
+{	.mib
+	mov		r28=sp
+	addl		r27=KSTACK_PAGES*PAGE_SIZE-16,r0
+	nop		0
+	;;
+}
+{	.mmi
+	mov		sp=r27
+	;;
+	mov		r27=ar.bspstore
+	nop		0
+	;;
+}
+	CALL(trap, 5, r30)
 IVT_END(Data_Nested_TLB)
 
 IVT_ENTRY(Instruction_Key_Miss, 0x1800)
diff --git a/sys/ia64/ia64/genassym.c b/sys/ia64/ia64/genassym.c
index 4a192fd79e3..9f7625279d9 100644
--- a/sys/ia64/ia64/genassym.c
+++ b/sys/ia64/ia64/genassym.c
@@ -91,7 +91,7 @@ ASSYM(MC_SPECIAL_RNAT,	offsetof(mcontext_t, mc_special.rnat));
 ASSYM(PAGE_SHIFT,	PAGE_SHIFT);
 ASSYM(PAGE_SIZE,	PAGE_SIZE);
 
-ASSYM(PC_CURRENT_PMAP,	offsetof(struct pcpu, pc_current_pmap));
+ASSYM(PC_CURRENT_PMAP,	offsetof(struct pcpu, pc_md.current_pmap));
 ASSYM(PC_CURTHREAD,	offsetof(struct pcpu, pc_curthread));
 ASSYM(PC_IDLETHREAD,	offsetof(struct pcpu, pc_idlethread));
 
diff --git a/sys/ia64/ia64/interrupt.c b/sys/ia64/ia64/interrupt.c
index a2b1ec5cd0d..8a8cbb81a95 100644
--- a/sys/ia64/ia64/interrupt.c
+++ b/sys/ia64/ia64/interrupt.c
@@ -84,28 +84,6 @@ dummy_perf(unsigned long vector, struct trapframe *tf)
 
 void (*perf_irq)(unsigned long, struct trapframe *) = dummy_perf;
 
-static unsigned int ints[MAXCPU];
-SYSCTL_OPAQUE(_debug, OID_AUTO, ints, CTLFLAG_RW, &ints, sizeof(ints), "IU",
-    "");
-
-static unsigned int clks[MAXCPU];
-#ifdef SMP
-SYSCTL_OPAQUE(_debug, OID_AUTO, clks, CTLFLAG_RW, &clks, sizeof(clks), "IU",
-    "");
-#else
-SYSCTL_INT(_debug, OID_AUTO, clks, CTLFLAG_RW, clks, 0, "");
-#endif
-
-#ifdef SMP
-static unsigned int asts[MAXCPU];
-SYSCTL_OPAQUE(_debug, OID_AUTO, asts, CTLFLAG_RW, &asts, sizeof(asts), "IU",
-    "");
-
-static unsigned int rdvs[MAXCPU];
-SYSCTL_OPAQUE(_debug, OID_AUTO, rdvs, CTLFLAG_RW, &rdvs, sizeof(rdvs), "IU",
-    "");
-#endif
-
 SYSCTL_NODE(_debug, OID_AUTO, clock, CTLFLAG_RW, 0, "clock statistics");
 
 static int adjust_edges = 0;
@@ -139,43 +117,45 @@ interrupt(struct trapframe *tf)
 
 	td = curthread;
 
+	PCPU_INC(cnt.v_intr);
+
 	vector = tf->tf_special.ifa;
 
  next:
 	/*
 	 * Handle ExtINT interrupts by generating an INTA cycle to
 	 * read the vector.
-	 * IPI_STOP_HARD is mapped to IPI_STOP so it is not necessary
-	 * to add it to this switch-like construct.
 	 */
 	if (vector == 0) {
+		PCPU_INC(md.stats.pcs_nextints);
 		inta = ib->ib_inta;
-		printf("ExtINT interrupt: vector=%u\n", (int)inta);
 		if (inta == 15) {
+			PCPU_INC(md.stats.pcs_nstrays);
 			__asm __volatile("mov cr.eoi = r0;; srlz.d");
 			goto stray;
 		}
 		vector = (int)inta;
-	} else if (vector == 15)
+	} else if (vector == 15) {
+		PCPU_INC(md.stats.pcs_nstrays);
 		goto stray;
+	}
 
 	if (vector == CLOCK_VECTOR) {/* clock interrupt */
 		/* CTR0(KTR_INTR, "clock interrupt"); */
 
 		itc = ia64_get_itc();
 
-		PCPU_INC(cnt.v_intr);
+		PCPU_INC(md.stats.pcs_nclks);
 #ifdef EVCNT_COUNTERS
 		clock_intr_evcnt.ev_count++;
 #else
 		intrcnt[INTRCNT_CLOCK]++;
 #endif
-		clks[PCPU_GET(cpuid)]++;
 
 		critical_enter();
 
-		adj = PCPU_GET(clockadj);
-		clk = PCPU_GET(clock);
+		adj = PCPU_GET(md.clockadj);
+		clk = PCPU_GET(md.clock);
 		delta = itc - clk;
 		count = 0;
 		while (delta >= ia64_clock_reload) {
@@ -206,33 +186,40 @@ interrupt(struct trapframe *tf)
 			adj = 0;
 			adjust_excess++;
 		}
-		PCPU_SET(clock, clk);
-		PCPU_SET(clockadj, adj);
+		PCPU_SET(md.clock, clk);
+		PCPU_SET(md.clockadj, adj);
 		critical_exit();
 		ia64_srlz_d();
 
 #ifdef SMP
 	} else if (vector == ipi_vector[IPI_AST]) {
-		asts[PCPU_GET(cpuid)]++;
+		PCPU_INC(md.stats.pcs_nasts);
 		CTR1(KTR_SMP, "IPI_AST, cpuid=%d", PCPU_GET(cpuid));
 	} else if (vector == ipi_vector[IPI_HIGH_FP]) {
+		PCPU_INC(md.stats.pcs_nhighfps);
 		ia64_highfp_save_ipi();
 	} else if (vector == ipi_vector[IPI_RENDEZVOUS]) {
-		rdvs[PCPU_GET(cpuid)]++;
+		PCPU_INC(md.stats.pcs_nrdvs);
 		CTR1(KTR_SMP, "IPI_RENDEZVOUS, cpuid=%d", PCPU_GET(cpuid));
 		enable_intr();
 		smp_rendezvous_action();
 		disable_intr();
 	} else if (vector == ipi_vector[IPI_STOP]) {
+		PCPU_INC(md.stats.pcs_nstops);
 		cpumask_t mybit = PCPU_GET(cpumask);
 
-		savectx(PCPU_PTR(pcb));
+		/* Make sure IPI_STOP_HARD is mapped to IPI_STOP. */
+		KASSERT(IPI_STOP == IPI_STOP_HARD,
+		    ("%s: IPI_STOP_HARD not handled.", __func__));
+
+		savectx(PCPU_PTR(md.pcb));
 		atomic_set_int(&stopped_cpus, mybit);
 		while ((started_cpus & mybit) == 0)
 			cpu_spinwait();
 		atomic_clear_int(&started_cpus, mybit);
 		atomic_clear_int(&stopped_cpus, mybit);
 	} else if (vector == ipi_vector[IPI_PREEMPT]) {
+		PCPU_INC(md.stats.pcs_npreempts);
 		CTR1(KTR_SMP, "IPI_PREEMPT, cpuid=%d", PCPU_GET(cpuid));
 		__asm __volatile("mov cr.eoi = r0;; srlz.d");
 		enable_intr();
@@ -241,7 +228,7 @@ interrupt(struct trapframe *tf)
 		goto stray;
 #endif
 	} else {
-		ints[PCPU_GET(cpuid)]++;
+		PCPU_INC(md.stats.pcs_nhwints);
 		atomic_add_int(&td->td_intr_nesting_level, 1);
 		ia64_dispatch_intr(tf, vector);
 		atomic_subtract_int(&td->td_intr_nesting_level, 1);
diff --git a/sys/ia64/ia64/machdep.c b/sys/ia64/ia64/machdep.c
index e578e8bb05a..95b604f6c9f 100644
--- a/sys/ia64/ia64/machdep.c
+++ b/sys/ia64/ia64/machdep.c
@@ -101,9 +101,21 @@ __FBSDID("$FreeBSD$");
 
 #include 
 
-u_int64_t processor_frequency;
-u_int64_t bus_frequency;
-u_int64_t itc_frequency;
+SYSCTL_NODE(_hw, OID_AUTO, freq, CTLFLAG_RD, 0, "");
+SYSCTL_NODE(_machdep, OID_AUTO, cpu, CTLFLAG_RD, 0, "");
+
+static u_int bus_freq;
+SYSCTL_UINT(_hw_freq, OID_AUTO, bus, CTLFLAG_RD, &bus_freq, 0,
+    "Bus clock frequency");
+
+static u_int cpu_freq;
+SYSCTL_UINT(_hw_freq, OID_AUTO, cpu, CTLFLAG_RD, &cpu_freq, 0,
+    "CPU clock frequency");
+
+static u_int itc_freq;
+SYSCTL_UINT(_hw_freq, OID_AUTO, itc, CTLFLAG_RD, &itc_freq, 0,
+    "ITC frequency");
+
 int cold = 1;
 
 u_int64_t pa_bootinfo;
@@ -139,8 +151,6 @@ SYSCTL_STRING(_hw, OID_AUTO, family, CTLFLAG_RD, cpu_family, 0,
 extern vm_offset_t ksym_start, ksym_end;
 #endif
 
-static void cpu_startup(void *);
-SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST, cpu_startup, NULL);
 
 struct msgbuf *msgbufp = NULL;
 
@@ -203,9 +213,7 @@ identifycpu(void)
 			 * (i.e. the clock frequency) to identify those.
 			 * Allow for roughly 1% error margin.
 			 */
-			tmp = processor_frequency >> 7;
-			if ((processor_frequency - tmp) < 1*Ghz &&
-			    (processor_frequency + tmp) >= 1*Ghz)
+			if (cpu_freq > 990 && cpu_freq < 1010)
 				model_name = "Deerfield";
 			else
 				model_name = "Madison";
@@ -232,11 +240,8 @@ identifycpu(void)
 	features = ia64_get_cpuid(4);
 
 	printf("CPU: %s (", model_name);
-	if (processor_frequency) {
-		printf("%ld.%02ld-Mhz ",
-		    (processor_frequency + 4999) / Mhz,
-		    ((processor_frequency + 4999) / (Mhz/100)) % 100);
-	}
+	if (cpu_freq)
+		printf("%u Mhz ", cpu_freq);
 	printf("%s)\n", family_name);
 	printf("  Origin = \"%s\"  Revision = %d\n", vendor, revision);
 	printf("  Features = 0x%b\n", (u_int32_t) features,
@@ -247,9 +252,11 @@ identifycpu(void)
 }
 
 static void
-cpu_startup(dummy)
-	void *dummy;
+cpu_startup(void *dummy)
 {
+	char nodename[16];
+	struct pcpu *pc;
+	struct pcpu_stats *pcs;
 
 	/*
 	 * Good {morning,afternoon,evening,night}.
@@ -302,7 +309,68 @@ cpu_startup(dummy)
 	 */
 	ia64_probe_sapics();
 	ia64_mca_init();
+
+	/*
+	 * Create sysctl tree for per-CPU information.
+	 */
+	SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
+		snprintf(nodename, sizeof(nodename), "%u", pc->pc_cpuid);
+		sysctl_ctx_init(&pc->pc_md.sysctl_ctx);
+		pc->pc_md.sysctl_tree = SYSCTL_ADD_NODE(&pc->pc_md.sysctl_ctx,
+		    SYSCTL_STATIC_CHILDREN(_machdep_cpu), OID_AUTO, nodename,
+		    CTLFLAG_RD, NULL, "");
+		if (pc->pc_md.sysctl_tree == NULL)
+			continue;
+
+		pcs = &pc->pc_md.stats;
+
+		SYSCTL_ADD_ULONG(&pc->pc_md.sysctl_ctx,
+		    SYSCTL_CHILDREN(pc->pc_md.sysctl_tree), OID_AUTO,
+		    "nasts", CTLFLAG_RD, &pcs->pcs_nasts,
+		    "Number of IPI_AST interrupts");
+
+		SYSCTL_ADD_ULONG(&pc->pc_md.sysctl_ctx,
+		    SYSCTL_CHILDREN(pc->pc_md.sysctl_tree), OID_AUTO,
+		    "nclks", CTLFLAG_RD, &pcs->pcs_nclks,
+		    "Number of clock interrupts");
+
+		SYSCTL_ADD_ULONG(&pc->pc_md.sysctl_ctx,
+		    SYSCTL_CHILDREN(pc->pc_md.sysctl_tree), OID_AUTO,
+		    "nextints", CTLFLAG_RD, &pcs->pcs_nextints,
+		    "Number of ExtINT interrupts");
+
+		SYSCTL_ADD_ULONG(&pc->pc_md.sysctl_ctx,
+		    SYSCTL_CHILDREN(pc->pc_md.sysctl_tree), OID_AUTO,
+		    "nhighfps", CTLFLAG_RD, &pcs->pcs_nhighfps,
+		    "Number of IPI_HIGH_FP interrupts");
+
+		SYSCTL_ADD_ULONG(&pc->pc_md.sysctl_ctx,
+		    SYSCTL_CHILDREN(pc->pc_md.sysctl_tree), OID_AUTO,
+		    "nhwints", CTLFLAG_RD, &pcs->pcs_nhwints,
+		    "Number of hardware (device) interrupts");
+
+		SYSCTL_ADD_ULONG(&pc->pc_md.sysctl_ctx,
+		    SYSCTL_CHILDREN(pc->pc_md.sysctl_tree), OID_AUTO,
+		    "npreempts", CTLFLAG_RD, &pcs->pcs_npreempts,
+		    "Number of IPI_PREEMPT interrupts");
+
+		SYSCTL_ADD_ULONG(&pc->pc_md.sysctl_ctx,
+		    SYSCTL_CHILDREN(pc->pc_md.sysctl_tree), OID_AUTO,
+		    "nrdvs", CTLFLAG_RD, &pcs->pcs_nrdvs,
+		    "Number of IPI_RENDEZVOUS interrupts");
+
+		SYSCTL_ADD_ULONG(&pc->pc_md.sysctl_ctx,
+		    SYSCTL_CHILDREN(pc->pc_md.sysctl_tree), OID_AUTO,
+		    "nstops", CTLFLAG_RD, &pcs->pcs_nstops,
+		    "Number of IPI_STOP interrupts");
+
+		SYSCTL_ADD_ULONG(&pc->pc_md.sysctl_ctx,
+		    SYSCTL_CHILDREN(pc->pc_md.sysctl_tree), OID_AUTO,
+		    "nstrays", CTLFLAG_RD, &pcs->pcs_nstrays,
+		    "Number of stray vectors");
+	}
 }
+SYSINIT(cpu_startup, SI_SUB_CPU, SI_ORDER_FIRST, cpu_startup, NULL);
 
 void
 cpu_boot(int howto)
@@ -333,7 +401,7 @@ cpu_est_clockrate(int cpu_id, uint64_t *rate)
 
 	if (pcpu_find(cpu_id) == NULL || rate == NULL)
 		return (EINVAL);
-	*rate = processor_frequency;
+	*rate = (u_long)cpu_freq * 1000000ul;
 	return (0);
 }
 
@@ -537,6 +605,15 @@ map_gateway_page(void)
 	ia64_set_k5(VM_MAX_ADDRESS);
 }
 
+static u_int
+freq_ratio(u_long base, u_long ratio)
+{
+	u_long f;
+
+	f = (base * (ratio >> 32)) / (ratio & 0xfffffffful);
+	return ((f + 500000) / 1000000);
+}
+
 static void
 calculate_frequencies(void)
 {
@@ -559,15 +636,9 @@ calculate_frequencies(void)
 			       pal.pal_result[2] >> 32,
 			       pal.pal_result[2] & ((1L << 32) - 1));
 		}
-		processor_frequency =
-			sal.sal_result[0] * (pal.pal_result[0] >> 32)
-			/ (pal.pal_result[0] & ((1L << 32) - 1));
-		bus_frequency =
-			sal.sal_result[0] * (pal.pal_result[1] >> 32)
-			/ (pal.pal_result[1] & ((1L << 32) - 1));
-		itc_frequency =
-			sal.sal_result[0] * (pal.pal_result[2] >> 32)
-			/ (pal.pal_result[2] & ((1L << 32) - 1));
+		cpu_freq = freq_ratio(sal.sal_result[0], pal.pal_result[0]);
+		bus_freq = freq_ratio(sal.sal_result[0], pal.pal_result[1]);
+		itc_freq = freq_ratio(sal.sal_result[0], pal.pal_result[2]);
 	}
 }
 
@@ -859,16 +930,6 @@ ia64_init(void)
 	return (ret);
 }
 
-__volatile void *
-ia64_ioport_address(u_int port)
-{
-	uint64_t addr;
-
-	addr = (port > 0xffff) ? IA64_PHYS_TO_RR6((uint64_t)port) :
-	    ia64_port_base | ((port & 0xfffc) << 10) | (port & 0xFFF);
-	return ((__volatile void *)addr);
-}
-
 uint64_t
 ia64_get_hcdp(void)
 {
@@ -908,6 +969,13 @@ bzero(void *buf, size_t len)
 	}
 }
 
+u_int
+ia64_itc_freq(void)
+{
+
+	return (itc_freq);
+}
+
 void
 DELAY(int n)
 {
@@ -916,7 +984,7 @@ DELAY(int n)
 	sched_pin();
 
 	start = ia64_get_itc();
-	end = start + (itc_frequency * n) / 1000000;
+	end = start + itc_freq * n;
 	/* printf("DELAY from 0x%lx to 0x%lx\n", start, end); */
 	do {
 		now = ia64_get_itc();
diff --git a/sys/ia64/ia64/mem.c b/sys/ia64/ia64/mem.c
index ab213d75794..53b86877c27 100644
--- a/sys/ia64/ia64/mem.c
+++ b/sys/ia64/ia64/mem.c
@@ -148,7 +148,8 @@ kmemphys:
  * instead of going through read/write
  */
 int
-memmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int prot)
+memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
 	/*
 	 * /dev/mem is the only one that makes sense through this
diff --git a/sys/ia64/ia64/mp_machdep.c b/sys/ia64/ia64/mp_machdep.c
index 92e26216e48..9cbf7705df9 100644
--- a/sys/ia64/ia64/mp_machdep.c
+++ b/sys/ia64/ia64/mp_machdep.c
@@ -76,7 +76,6 @@ void ia64_ap_startup(void);
 /* Variables used by os_boot_rendez and ia64_ap_startup */
 struct pcpu *ap_pcpu;
 void *ap_stack;
-uint64_t ap_vhpt;
 volatile int ap_delay;
 volatile int ap_awake;
 volatile int ap_spin;
@@ -116,13 +115,15 @@ void
 ia64_ap_startup(void)
 {
 	volatile struct ia64_interrupt_block *ib = IA64_INTERRUPT_BLOCK;
+	uint64_t vhpt;
 	int vector;
 
 	pcpup = ap_pcpu;
 	ia64_set_k4((intptr_t)pcpup);
 
-	map_vhpt(ap_vhpt);
-	ia64_set_pta(ap_vhpt + (1 << 8) + (pmap_vhpt_log2size << 2) + 1);
+	vhpt = PCPU_GET(md.vhpt);
+	map_vhpt(vhpt);
+	ia64_set_pta(vhpt + (1 << 8) + (pmap_vhpt_log2size << 2) + 1);
 	ia64_srlz_i();
 
 	ap_awake = 1;
@@ -225,7 +226,7 @@ cpu_mp_add(u_int acpiid, u_int apicid, u_int apiceid)
 		pc = pcpup;
 
 	pc->pc_acpi_id = acpiid;
-	pc->pc_lid = lid;
+	pc->pc_md.lid = lid;
 	all_cpus |= (1UL << cpuid);
 }
 
@@ -239,8 +240,8 @@ cpu_mp_announce()
 		pc = pcpu_find(i);
 		if (pc != NULL) {
 			printf("cpu%d: ACPI Id=%x, SAPIC Id=%x, SAPIC Eid=%x",
-			    i, pc->pc_acpi_id, LID_SAPIC_ID(pc->pc_lid),
-			    LID_SAPIC_EID(pc->pc_lid));
+			    i, pc->pc_acpi_id, LID_SAPIC_ID(pc->pc_md.lid),
+			    LID_SAPIC_EID(pc->pc_md.lid));
 			if (i == 0)
 				printf(" (BSP)\n");
 			else
@@ -257,13 +258,18 @@ cpu_mp_start()
 	ap_spin = 1;
 
 	SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
-		pc->pc_current_pmap = kernel_pmap;
+		pc->pc_md.current_pmap = kernel_pmap;
 		pc->pc_other_cpus = all_cpus & ~pc->pc_cpumask;
 		if (pc->pc_cpuid > 0) {
 			ap_pcpu = pc;
+			pc->pc_md.vhpt = pmap_alloc_vhpt();
+			if (pc->pc_md.vhpt == 0) {
+				printf("SMP: WARNING: unable to allocate VHPT"
+				    " for cpu%d", pc->pc_cpuid);
+				continue;
+			}
 			ap_stack = malloc(KSTACK_PAGES * PAGE_SIZE, M_SMP,
 			    M_WAITOK);
-			ap_vhpt = pmap_vhpt_base[pc->pc_cpuid];
 			ap_delay = 2000;
 			ap_awake = 0;
 
@@ -275,13 +281,13 @@ cpu_mp_start()
 			do {
 				DELAY(1000);
 			} while (--ap_delay > 0);
-			pc->pc_awake = ap_awake;
+			pc->pc_md.awake = ap_awake;
 
 			if (!ap_awake)
 				printf("SMP: WARNING: cpu%d did not wake up\n",
 				    pc->pc_cpuid);
 		} else
-			pc->pc_awake = 1;
+			pc->pc_md.awake = 1;
 	}
 }
 
@@ -298,7 +304,7 @@ cpu_mp_unleash(void *dummy)
 	smp_cpus = 0;
 	SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
 		cpus++;
-		if (pc->pc_awake) {
+		if (pc->pc_md.awake) {
 			kproc_create(ia64_store_mca_state,
 			    (void*)((uintptr_t)pc->pc_cpuid), NULL, 0, 0,
 			    "mca %u", pc->pc_cpuid);
@@ -360,8 +366,8 @@ ipi_send(struct pcpu *cpu, int ipi)
 	volatile uint64_t *pipi;
 	uint64_t vector;
 
-	pipi = __MEMIO_ADDR(ia64_lapic_address |
-	    ((cpu->pc_lid & LID_SAPIC_MASK) >> 12));
+	pipi = (void *)IA64_PHYS_TO_RR6(ia64_lapic_address |
+	    ((cpu->pc_md.lid & LID_SAPIC_MASK) >> 12));
 	vector = (uint64_t)(ipi_vector[ipi] & 0xff);
 	KASSERT(vector != 0, ("IPI %d is not assigned a vector", ipi));
 	*pipi = vector;
diff --git a/sys/ia64/ia64/nexus.c b/sys/ia64/ia64/nexus.c
index 502dc72a4fc..5ce4731eb8f 100644
--- a/sys/ia64/ia64/nexus.c
+++ b/sys/ia64/ia64/nexus.c
@@ -389,26 +389,23 @@ nexus_alloc_resource(device_t bus, device_t child, int type, int *rid,
 
 static int
 nexus_activate_resource(device_t bus, device_t child, int type, int rid,
-			struct resource *r)
+    struct resource *r)
 {
-	vm_paddr_t paddr, psize;
+	vm_paddr_t paddr;
 	void *vaddr;
 
-	/*
-	 * If this is a memory resource, map it into the kernel.
-	 */
+	paddr = rman_get_start(r);
+
 	switch (type) {
 	case SYS_RES_IOPORT:
 		rman_set_bustag(r, IA64_BUS_SPACE_IO);
-		rman_set_bushandle(r, rman_get_start(r));
+		rman_set_bushandle(r, paddr);
 		break;
 	case SYS_RES_MEMORY:
-		paddr = rman_get_start(r);
-		psize = rman_get_size(r);
-		vaddr = pmap_mapdev(paddr, psize);
-		rman_set_virtual(r, vaddr);
+		vaddr = pmap_mapdev(paddr, rman_get_size(r));
 		rman_set_bustag(r, IA64_BUS_SPACE_MEM);
-		rman_set_bushandle(r, (bus_space_handle_t) paddr);
+		rman_set_bushandle(r, (bus_space_handle_t) vaddr);
+		rman_set_virtual(r, vaddr);
 		break;
 	}
 	return (rman_activate_resource(r));
@@ -488,11 +485,27 @@ nexus_get_reslist(device_t dev, device_t child)
 }
 
 static int
-nexus_set_resource(device_t dev, device_t child, int type, int rid, u_long start, u_long count)
+nexus_set_resource(device_t dev, device_t child, int type, int rid,
+    u_long start, u_long count)
 {
 	struct nexus_device	*ndev = DEVTONX(child);
 	struct resource_list	*rl = &ndev->nx_resources;
 
+	if (type == SYS_RES_IOPORT && start > (0x10000 - count)) {
+		/*
+		 * Work around a firmware bug in the HP rx2660, where in ACPI
+		 * an I/O port is really a memory mapped I/O address. The bug
+		 * is in the GAS that describes the address and in particular
+		 * the SpaceId field. The field should not say the address is
+		 * an I/O port when it is in fact an I/O memory address.
+		 */
+		if (bootverbose)
+			printf("%s: invalid port range (%#lx-%#lx); "
+			    "assuming I/O memory range.\n", __func__, start,
+			    start + count - 1);
+		type = SYS_RES_MEMORY;
+	}
+
 	/* XXX this should return a success/failure indicator */
 	resource_list_add(rl, type, rid, start, start + count - 1, count);
 	return(0);
diff --git a/sys/ia64/ia64/pmap.c b/sys/ia64/ia64/pmap.c
index a6fac1f57a8..6a0e2149844 100644
--- a/sys/ia64/ia64/pmap.c
+++ b/sys/ia64/ia64/pmap.c
@@ -217,8 +217,6 @@ int pmap_vhpt_nbuckets;
 SYSCTL_INT(_machdep_vhpt, OID_AUTO, nbuckets, CTLFLAG_RD,
     &pmap_vhpt_nbuckets, 0, "");
 
-uint64_t pmap_vhpt_base[MAXCPU];
-
 int pmap_vhpt_log2size = 0;
 TUNABLE_INT("machdep.vhpt.log2size", &pmap_vhpt_log2size);
 SYSCTL_INT(_machdep_vhpt, OID_AUTO, log2size, CTLFLAG_RD,
@@ -277,6 +275,40 @@ pmap_steal_memory(vm_size_t size)
 	return va;
 }
 
+static void
+pmap_initialize_vhpt(vm_offset_t vhpt)
+{
+	struct ia64_lpte *pte;
+	u_int i;
+
+	pte = (struct ia64_lpte *)vhpt;
+	for (i = 0; i < pmap_vhpt_nbuckets; i++) {
+		pte[i].pte = 0;
+		pte[i].itir = 0;
+		pte[i].tag = 1UL << 63; /* Invalid tag */
+		pte[i].chain = (uintptr_t)(pmap_vhpt_bucket + i);
+	}
+}
+
+#ifdef SMP
+MALLOC_DECLARE(M_SMP);
+
+vm_offset_t
+pmap_alloc_vhpt(void)
+{
+	vm_offset_t vhpt;
+	vm_size_t size;
+
+	size = 1UL << pmap_vhpt_log2size;
+	vhpt = (uintptr_t)contigmalloc(size, M_SMP, 0, 0UL, ~0UL, size, 0UL);
+	if (vhpt != 0) {
+		vhpt = IA64_PHYS_TO_RR7(ia64_tpa(vhpt));
+		pmap_initialize_vhpt(vhpt);
+	}
+	return (vhpt);
+}
+#endif
+
 /*
  *	Bootstrap the system enough to run with virtual memory.
  */
@@ -284,8 +316,7 @@ void
 pmap_bootstrap()
 {
 	struct ia64_pal_result res;
-	struct ia64_lpte *pte;
-	vm_offset_t base, limit;
+	vm_offset_t base;
 	size_t size;
 	int i, j, count, ridbits;
 
@@ -365,94 +396,52 @@ pmap_bootstrap()
 		;
 	count = i+2;
 
-	/*
-	 * Figure out a useful size for the VHPT, based on the size of
-	 * physical memory and try to locate a region which is large
-	 * enough to contain the VHPT (which must be a power of two in
-	 * size and aligned to a natural boundary).
-	 * We silently bump up the VHPT size to the minimum size if the
-	 * user has set the tunable too small. Likewise, the VHPT size
-	 * is silently capped to the maximum allowed.
-	 */
 	TUNABLE_INT_FETCH("machdep.vhpt.log2size", &pmap_vhpt_log2size);
-	if (pmap_vhpt_log2size == 0) {
+	if (pmap_vhpt_log2size == 0)
+		pmap_vhpt_log2size = 20;
+	else if (pmap_vhpt_log2size < 15)
 		pmap_vhpt_log2size = 15;
-		size = 1UL << pmap_vhpt_log2size;
-		while (size < Maxmem * 32) {
-			pmap_vhpt_log2size++;
-			size <<= 1;
-		}
-	} else if (pmap_vhpt_log2size < 15)
-		pmap_vhpt_log2size = 15;
-	if (pmap_vhpt_log2size > 61)
+	else if (pmap_vhpt_log2size > 61)
 		pmap_vhpt_log2size = 61;
 
-	pmap_vhpt_base[0] = 0;
-	base = limit = 0;
+	base = 0;
 	size = 1UL << pmap_vhpt_log2size;
-	while (pmap_vhpt_base[0] == 0) {
-		if (bootverbose)
-			printf("Trying VHPT size 0x%lx\n", size);
-		for (i = 0; i < count; i += 2) {
-			base = (phys_avail[i] + size - 1) & ~(size - 1);
-			limit = base + MAXCPU * size;
-			if (limit <= phys_avail[i+1])
-				/*
-				 * VHPT can fit in this region
-				 */
-				break;
-		}
-		if (!phys_avail[i]) {
-			/* Can't fit, try next smaller size. */
-			pmap_vhpt_log2size--;
-			size >>= 1;
-		} else
-			pmap_vhpt_base[0] = IA64_PHYS_TO_RR7(base);
+	for (i = 0; i < count; i += 2) {
+		base = (phys_avail[i] + size - 1) & ~(size - 1);
+		if (base + size <= phys_avail[i+1])
+			break;
 	}
-	if (pmap_vhpt_log2size < 15)
-		panic("Can't find space for VHPT");
-
-	if (bootverbose)
-		printf("Putting VHPT at 0x%lx\n", base);
+	if (!phys_avail[i])
+		panic("Unable to allocate VHPT");
 
 	if (base != phys_avail[i]) {
 		/* Split this region. */
-		if (bootverbose)
-			printf("Splitting [%p-%p]\n", (void *)phys_avail[i],
-			    (void *)phys_avail[i+1]);
 		for (j = count; j > i; j -= 2) {
 			phys_avail[j] = phys_avail[j-2];
 			phys_avail[j+1] = phys_avail[j-2+1];
 		}
 		phys_avail[i+1] = base;
-		phys_avail[i+2] = limit;
+		phys_avail[i+2] = base + size;
 	} else
-		phys_avail[i] = limit;
+		phys_avail[i] = base + size;
+
+	base = IA64_PHYS_TO_RR7(base);
+	PCPU_SET(md.vhpt, base);
+	if (bootverbose)
+		printf("VHPT: address=%#lx, size=%#lx\n", base, size);
 
 	pmap_vhpt_nbuckets = size / sizeof(struct ia64_lpte);
-
 	pmap_vhpt_bucket = (void *)pmap_steal_memory(pmap_vhpt_nbuckets *
 	    sizeof(struct ia64_bucket));
-	pte = (struct ia64_lpte *)pmap_vhpt_base[0];
 	for (i = 0; i < pmap_vhpt_nbuckets; i++) {
-		pte[i].pte = 0;
-		pte[i].itir = 0;
-		pte[i].tag = 1UL << 63;	/* Invalid tag */
-		pte[i].chain = (uintptr_t)(pmap_vhpt_bucket + i);
-		/* Stolen memory is zeroed! */
+		/* Stolen memory is zeroed. */
 		mtx_init(&pmap_vhpt_bucket[i].mutex, "VHPT bucket lock", NULL,
 		    MTX_NOWITNESS | MTX_SPIN);
 	}
 
-	for (i = 1; i < MAXCPU; i++) {
-		pmap_vhpt_base[i] = pmap_vhpt_base[i - 1] + size;
-		bcopy((void *)pmap_vhpt_base[i - 1], (void *)pmap_vhpt_base[i],
-		    size);
-	}
-
-	map_vhpt(pmap_vhpt_base[0]);
-	ia64_set_pta(pmap_vhpt_base[0] + (1 << 8) +
-	    (pmap_vhpt_log2size << 2) + 1);
+	pmap_initialize_vhpt(base);
+	map_vhpt(base);
+	ia64_set_pta(base + (1 << 8) + (pmap_vhpt_log2size << 2) + 1);
 	ia64_srlz_i();
 
 	virtual_avail = VM_MIN_KERNEL_ADDRESS;
@@ -466,7 +455,7 @@ pmap_bootstrap()
 		kernel_pmap->pm_rid[i] = 0;
 	kernel_pmap->pm_active = 1;
 	TAILQ_INIT(&kernel_pmap->pm_pvlist);
-	PCPU_SET(current_pmap, kernel_pmap);
+	PCPU_SET(md.current_pmap, kernel_pmap);
 
 	/*
 	 * Region 5 is mapped via the vhpt.
@@ -551,15 +540,16 @@ static void
 pmap_invalidate_page(pmap_t pmap, vm_offset_t va)
 {
 	struct ia64_lpte *pte;
-	int i, vhpt_ofs;
+	struct pcpu *pc;
+	u_int vhpt_ofs;
 
-	KASSERT((pmap == kernel_pmap || pmap == PCPU_GET(current_pmap)),
+	KASSERT((pmap == kernel_pmap || pmap == PCPU_GET(md.current_pmap)),
 		("invalidating TLB for non-current pmap"));
 
-	vhpt_ofs = ia64_thash(va) - pmap_vhpt_base[PCPU_GET(cpuid)];
+	vhpt_ofs = ia64_thash(va) - PCPU_GET(md.vhpt);
 	critical_enter();
-	for (i = 0; i < MAXCPU; i++) {
-		pte = (struct ia64_lpte *)(pmap_vhpt_base[i] + vhpt_ofs);
+	SLIST_FOREACH(pc, &cpuhead, pc_allcpu) {
+		pte = (struct ia64_lpte *)(pc->pc_md.vhpt + vhpt_ofs);
 		if (pte->tag == ia64_ttag(va))
 			pte->tag = 1UL << 63;
 	}
@@ -591,7 +581,7 @@ static void
 pmap_invalidate_all(pmap_t pmap)
 {
 
-	KASSERT((pmap == kernel_pmap || pmap == PCPU_GET(current_pmap)),
+	KASSERT((pmap == kernel_pmap || pmap == PCPU_GET(md.current_pmap)),
 		("invalidating TLB for non-current pmap"));
 
 #ifdef SMP
@@ -1172,7 +1162,7 @@ pmap_remove_pte(pmap_t pmap, struct ia64_lpte *pte, vm_offset_t va,
 	int error;
 	vm_page_t m;
 
-	KASSERT((pmap == kernel_pmap || pmap == PCPU_GET(current_pmap)),
+	KASSERT((pmap == kernel_pmap || pmap == PCPU_GET(md.current_pmap)),
 		("removing pte for non-current pmap"));
 
 	/*
@@ -1340,7 +1330,7 @@ pmap_remove_page(pmap_t pmap, vm_offset_t va)
 {
 	struct ia64_lpte *pte;
 
-	KASSERT((pmap == kernel_pmap || pmap == PCPU_GET(current_pmap)),
+	KASSERT((pmap == kernel_pmap || pmap == PCPU_GET(md.current_pmap)),
 		("removing page for non-current pmap"));
 
 	pte = pmap_find_vhpt(va);
@@ -2251,7 +2241,7 @@ pmap_switch(pmap_t pm)
 	int i;
 
 	critical_enter();
-	prevpm = PCPU_GET(current_pmap);
+	prevpm = PCPU_GET(md.current_pmap);
 	if (prevpm == pm)
 		goto out;
 	if (prevpm != NULL)
@@ -2268,7 +2258,7 @@ pmap_switch(pmap_t pm)
 		}
 		atomic_set_32(&pm->pm_active, PCPU_GET(cpumask));
 	}
-	PCPU_SET(current_pmap, pm);
+	PCPU_SET(md.current_pmap, pm);
 	ia64_srlz_d();
 
 out:
diff --git a/sys/ia64/ia64/sscdisk.c b/sys/ia64/ia64/sscdisk.c
index 0d5e32190cc..f9abc0abd25 100644
--- a/sys/ia64/ia64/sscdisk.c
+++ b/sys/ia64/ia64/sscdisk.c
@@ -76,7 +76,7 @@ MALLOC_DEFINE(M_SSC, "ssc_disk", "Simulator Disk");
 
 static d_strategy_t sscstrategy;
 
-static LIST_HEAD(, ssc_s) ssc_softc_list = LIST_HEAD_INITIALIZER(&ssc_softc_list);
+static LIST_HEAD(, ssc_s) ssc_softc_list = LIST_HEAD_INITIALIZER(ssc_softc_list);
 
 struct ssc_s {
 	int unit;
diff --git a/sys/ia64/ia64/sys_machdep.c b/sys/ia64/ia64/sys_machdep.c
index d4dcc1fd536..e39cbab621e 100644
--- a/sys/ia64/ia64/sys_machdep.c
+++ b/sys/ia64/ia64/sys_machdep.c
@@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
+#include 
 #include 
 #include 
 
diff --git a/sys/ia64/ia64/trap.c b/sys/ia64/ia64/trap.c
index 2a4dca83a9f..4e38b5e7d9b 100644
--- a/sys/ia64/ia64/trap.c
+++ b/sys/ia64/ia64/trap.c
@@ -414,11 +414,9 @@ trap(int vector, struct trapframe *tf)
 
 	case IA64_VEC_NESTED_DTLB:
 		/*
-		 * We never call trap() with this vector. We may want to
-		 * do that in the future in case the nested TLB handler
-		 * could not find the translation it needs. In that case
-		 * we could switch to a special (hardwired) stack and
-		 * come here to produce a nice panic().
+		 * When the nested TLB handler encounters an unexpected
+		 * condition, it'll switch to the backup stack and transfer
+		 * here. All we need to do is panic.
 		 */
 		trap_panic(vector, tf);
 		break;
@@ -574,8 +572,7 @@ trap(int vector, struct trapframe *tf)
 			PROC_UNLOCK(p);
 
 			/* Fault in the user page: */
-			rv = vm_fault(map, va, ftype, (ftype & VM_PROT_WRITE)
-			    ? VM_FAULT_DIRTY : VM_FAULT_NORMAL);
+			rv = vm_fault(map, va, ftype, VM_FAULT_NORMAL);
 
 			PROC_LOCK(p);
 			--p->p_lock;
diff --git a/sys/ia64/include/bus.h b/sys/ia64/include/bus.h
index 02fe8bee105..a2a02a09f5a 100644
--- a/sys/ia64/include/bus.h
+++ b/sys/ia64/include/bus.h
@@ -1,3 +1,29 @@
+/*-
+ * Copyright (c) 2009 Marcel Moolenaar
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ */
+
 /*	$NetBSD: bus.h,v 1.12 1997/10/01 08:25:15 fvdl Exp $	*/
 
 /*-
@@ -75,39 +101,50 @@
 #include 
 #include 
 
+/*
+ * I/O port reads with ia32 semantics.
+ */
+#define inb     bus_space_read_io_1
+#define inw     bus_space_read_io_2
+#define inl     bus_space_read_io_4
+
+#define outb    bus_space_write_io_1
+#define outw    bus_space_write_io_2
+#define outl    bus_space_write_io_4
+
 /*
  * Values for the ia64 bus space tag, not to be used directly by MI code.
  */
 #define	IA64_BUS_SPACE_IO	0	/* space is i/o space */
 #define IA64_BUS_SPACE_MEM	1	/* space is mem space */
 
+#define	BUS_SPACE_BARRIER_READ	0x01	/* force read barrier */
+#define	BUS_SPACE_BARRIER_WRITE	0x02	/* force write barrier */
+
 #define BUS_SPACE_MAXSIZE_24BIT	0xFFFFFF
 #define BUS_SPACE_MAXSIZE_32BIT 0xFFFFFFFF
 #define BUS_SPACE_MAXSIZE	0xFFFFFFFFFFFFFFFF
 #define BUS_SPACE_MAXADDR_24BIT	0xFFFFFF
 #define BUS_SPACE_MAXADDR_32BIT 0xFFFFFFFF
-#define BUS_SPACE_MAXADDR	0xFFFFFFFF
+#define BUS_SPACE_MAXADDR	0xFFFFFFFFFFFFFFFF
 
 #define BUS_SPACE_UNRESTRICTED	(~0)
 
+
 /*
  * Map a region of device bus space into CPU virtual address space.
  */
-
-static __inline int bus_space_map(bus_space_tag_t t, bus_addr_t addr,
-				  bus_size_t size, int flags,
-				  bus_space_handle_t *bshp);
-
 static __inline int
-bus_space_map(bus_space_tag_t t __unused, bus_addr_t addr,
-	      bus_size_t size __unused, int flags __unused,
-	      bus_space_handle_t *bshp)
+bus_space_map(bus_space_tag_t bst, bus_addr_t addr, bus_size_t size __unused,
+    int flags __unused, bus_space_handle_t *bshp)
 {
 
-	*bshp = addr;
+	*bshp = (__predict_false(bst == IA64_BUS_SPACE_IO))
+	    ? addr : IA64_PHYS_TO_RR6(addr);
 	return (0);
 }
 
+
 /*
  * Unmap a region of device bus space.
  */
@@ -123,7 +160,7 @@ bus_space_unmap(bus_space_tag_t bst __unused, bus_space_handle_t bsh __unused,
  */
 static __inline int
 bus_space_subregion(bus_space_tag_t bst, bus_space_handle_t bsh,
-    bus_size_t ofs, bus_size_t size, bus_space_handle_t *nbshp)
+    bus_size_t ofs, bus_size_t size __unused, bus_space_handle_t *nbshp)
 {
 	*nbshp = bsh + ofs;
 	return (0);
@@ -149,12 +186,9 @@ bus_space_free(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t size);
 /*
  * Bus read/write barrier method.
  */
-#define	BUS_SPACE_BARRIER_READ	0x01		/* force read barrier */
-#define	BUS_SPACE_BARRIER_WRITE	0x02		/* force write barrier */
-
 static __inline void
-bus_space_barrier(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs,
-    bus_size_t size, int flags)
+bus_space_barrier(bus_space_tag_t bst __unused, bus_space_handle_t bsh __unused,
+    bus_size_t ofs __unused, bus_size_t size __unused, int flags __unused)
 {
 	ia64_mf_a();
 	ia64_mf();
@@ -166,40 +200,53 @@ bus_space_barrier(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs,
  * tuple. A unit of data can be 1 byte, 2 bytes, 4 bytes or 8 bytes. The
  * data is returned.
  */
+uint8_t  bus_space_read_io_1(u_long);
+uint16_t bus_space_read_io_2(u_long);
+uint32_t bus_space_read_io_4(u_long);
+uint64_t bus_space_read_io_8(u_long);
+
 static __inline uint8_t
 bus_space_read_1(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs)
 {
-	uint8_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	return (*bsp);
+	uint8_t val;
+
+	val = (__predict_false(bst == IA64_BUS_SPACE_IO))
+	    ? bus_space_read_io_1(bsh + ofs)
+	    : ia64_ld1((void *)(bsh + ofs));
+	return (val);
 }
 
 static __inline uint16_t
 bus_space_read_2(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs)
 {
-	uint16_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	return (*bsp);
+	uint16_t val;
+
+	val = (__predict_false(bst == IA64_BUS_SPACE_IO))
+	    ? bus_space_read_io_2(bsh + ofs)
+	    : ia64_ld2((void *)(bsh + ofs));
+	return (val);
 }
 
 static __inline uint32_t
 bus_space_read_4(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs)
 {
-	uint32_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	return (*bsp);
+	uint32_t val;
+
+	val = (__predict_false(bst == IA64_BUS_SPACE_IO))
+	    ? bus_space_read_io_4(bsh + ofs)
+	    : ia64_ld4((void *)(bsh + ofs));
+	return (val);
 }
 
 static __inline uint64_t
 bus_space_read_8(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs)
 {
-	uint64_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	return (*bsp);
+	uint64_t val;
+
+	val = (__predict_false(bst == IA64_BUS_SPACE_IO))
+	    ? bus_space_read_io_8(bsh + ofs)
+	    : ia64_ld8((void *)(bsh + ofs));
+	return (val);
 }
 
 
@@ -208,44 +255,53 @@ bus_space_read_8(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs)
  * tuple. A unit of data can be 1 byte, 2 bytes, 4 bytes or 8 bytes. The
  * data is passed by value.
  */
+void bus_space_write_io_1(u_long, uint8_t);
+void bus_space_write_io_2(u_long, uint16_t);
+void bus_space_write_io_4(u_long, uint32_t);
+void bus_space_write_io_8(u_long, uint64_t);
+
 static __inline void
 bus_space_write_1(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs,
     uint8_t val)
 {
-	uint8_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	*bsp = val;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_io_1(bsh + ofs, val);
+	else
+		ia64_st1((void *)(bsh + ofs), val);
 }
 
 static __inline void
 bus_space_write_2(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs,
     uint16_t val)
 {
-	uint16_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	*bsp = val;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_io_2(bsh + ofs, val);
+	else
+		ia64_st2((void *)(bsh + ofs), val);
 }
 
 static __inline void
 bus_space_write_4(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs,
     uint32_t val)
 {
-	uint32_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	*bsp = val;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_io_4(bsh + ofs, val);
+	else
+		ia64_st4((void *)(bsh + ofs), val);
 }
 
 static __inline void
 bus_space_write_8(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs,
     uint64_t val)
 {
-	uint64_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	*bsp = val;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_io_8(bsh + ofs, val);
+	else
+		ia64_st8((void *)(bsh + ofs), val);
 }
 
 
@@ -254,48 +310,61 @@ bus_space_write_8(bus_space_tag_t bst, bus_space_handle_t bsh, bus_size_t ofs,
  * ofs tuple. A unit of data can be 1 byte, 2 bytes, 4 bytes or 8 bytes. The
  * data is returned in the buffer passed by reference.
  */
+void bus_space_read_multi_io_1(u_long, uint8_t *, size_t);
+void bus_space_read_multi_io_2(u_long, uint16_t *, size_t);
+void bus_space_read_multi_io_4(u_long, uint32_t *, size_t);
+void bus_space_read_multi_io_8(u_long, uint64_t *, size_t);
+
 static __inline void
 bus_space_read_multi_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint8_t *bufp, size_t count)
 {
-	uint8_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	while (count-- > 0)
-		*bufp++ = *bsp;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_read_multi_io_1(bsh + ofs, bufp, count);
+	else {
+		while (count-- > 0)
+			*bufp++ = ia64_ld1((void *)(bsh + ofs));
+	}
 }
 
 static __inline void
 bus_space_read_multi_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint16_t *bufp, size_t count)
 {
-	uint16_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	while (count-- > 0)
-		*bufp++ = *bsp;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_read_multi_io_2(bsh + ofs, bufp, count);
+	else {
+		while (count-- > 0)
+			*bufp++ = ia64_ld2((void *)(bsh + ofs));
+	}
 }
 
 static __inline void
 bus_space_read_multi_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint32_t *bufp, size_t count)
 {
-	uint32_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	while (count-- > 0)
-		*bufp++ = *bsp;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_read_multi_io_4(bsh + ofs, bufp, count);
+	else {
+		while (count-- > 0)
+			*bufp++ = ia64_ld4((void *)(bsh + ofs));
+	}
 }
 
 static __inline void
 bus_space_read_multi_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint64_t *bufp, size_t count)
 {
-	uint64_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	while (count-- > 0)
-		*bufp++ = *bsp;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_read_multi_io_8(bsh + ofs, bufp, count);
+	else {
+		while (count-- > 0)
+			*bufp++ = ia64_ld8((void *)(bsh + ofs));
+	}
 }
 
 
@@ -304,48 +373,61 @@ bus_space_read_multi_8(bus_space_tag_t bst, bus_space_handle_t bsh,
  * ofs tuple. A unit of data can be 1 byte, 2 bytes, 4 bytes or 8 bytes. The
  * data is read from the buffer passed by reference.
  */
+void bus_space_write_multi_io_1(u_long, const uint8_t *, size_t);
+void bus_space_write_multi_io_2(u_long, const uint16_t *, size_t);
+void bus_space_write_multi_io_4(u_long, const uint32_t *, size_t);
+void bus_space_write_multi_io_8(u_long, const uint64_t *, size_t);
+
 static __inline void
 bus_space_write_multi_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint8_t *bufp, size_t count)
 {
-	uint8_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	while (count-- > 0)
-		*bsp = *bufp++;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_multi_io_1(bsh + ofs, bufp, count);
+	else {
+		while (count-- > 0)
+			ia64_st1((void *)(bsh + ofs), *bufp++);
+	}
 }
 
 static __inline void
 bus_space_write_multi_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint16_t *bufp, size_t count)
 {
-	uint16_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	while (count-- > 0)
-		*bsp = *bufp++;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_multi_io_2(bsh + ofs, bufp, count);
+	else {
+		while (count-- > 0)
+			ia64_st2((void *)(bsh + ofs), *bufp++);
+	}
 }
 
 static __inline void
 bus_space_write_multi_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint32_t *bufp, size_t count)
 {
-	uint32_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	while (count-- > 0)
-		*bsp = *bufp++;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_multi_io_4(bsh + ofs, bufp, count);
+	else {
+		while (count-- > 0)
+			ia64_st4((void *)(bsh + ofs), *bufp++);
+	}
 }
 
 static __inline void
 bus_space_write_multi_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint64_t *bufp, size_t count)
 {
-	uint64_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
-	while (count-- > 0)
-		*bsp = *bufp++;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_multi_io_8(bsh + ofs, bufp, count);
+	else {
+		while (count-- > 0)
+			ia64_st8((void *)(bsh + ofs), *bufp++);
+	}
 }
 
 
@@ -355,16 +437,22 @@ bus_space_write_multi_8(bus_space_tag_t bst, bus_space_handle_t bsh,
  * data is written to the buffer passed by reference and read from successive
  * bus space addresses. Access is unordered.
  */
+void bus_space_read_region_io_1(u_long, uint8_t *, size_t);
+void bus_space_read_region_io_2(u_long, uint16_t *, size_t);
+void bus_space_read_region_io_4(u_long, uint32_t *, size_t);
+void bus_space_read_region_io_8(u_long, uint64_t *, size_t);
+
 static __inline void
 bus_space_read_region_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint8_t *bufp, size_t count)
 {
-	uint8_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bufp++ = *bsp;
-		ofs += 1;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_read_region_io_1(bsh + ofs, bufp, count);
+	else {
+		uint8_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			*bufp++ = ia64_ld1(bsp++);
 	}
 }
 
@@ -372,12 +460,13 @@ static __inline void
 bus_space_read_region_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint16_t *bufp, size_t count)
 {
-	uint16_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bufp++ = *bsp;
-		ofs += 2;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_read_region_io_2(bsh + ofs, bufp, count);
+	else {
+		uint16_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			*bufp++ = ia64_ld2(bsp++);
 	}
 }
 
@@ -385,12 +474,13 @@ static __inline void
 bus_space_read_region_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint32_t *bufp, size_t count)
 {
-	uint32_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bufp++ = *bsp;
-		ofs += 4;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_read_region_io_4(bsh + ofs, bufp, count);
+	else {
+		uint32_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			*bufp++ = ia64_ld4(bsp++);
 	}
 }
 
@@ -398,12 +488,13 @@ static __inline void
 bus_space_read_region_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint64_t *bufp, size_t count)
 {
-	uint64_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bufp++ = *bsp;
-		ofs += 8;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_read_region_io_8(bsh + ofs, bufp, count);
+	else {
+		uint64_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			*bufp++ = ia64_ld8(bsp++);
 	}
 }
 
@@ -414,16 +505,22 @@ bus_space_read_region_8(bus_space_tag_t bst, bus_space_handle_t bsh,
  * data is read from the buffer passed by reference and written to successive
  * bus space addresses. Access is unordered.
  */
+void bus_space_write_region_io_1(u_long, const uint8_t *, size_t);
+void bus_space_write_region_io_2(u_long, const uint16_t *, size_t);
+void bus_space_write_region_io_4(u_long, const uint32_t *, size_t);
+void bus_space_write_region_io_8(u_long, const uint64_t *, size_t);
+
 static __inline void
 bus_space_write_region_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint8_t *bufp, size_t count)
 {
-	uint8_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = *bufp++;
-		ofs += 1;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_region_io_1(bsh + ofs, bufp, count);
+	else {
+		uint8_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			ia64_st1(bsp++, *bufp++);
 	}
 }
 
@@ -431,12 +528,13 @@ static __inline void
 bus_space_write_region_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint16_t *bufp, size_t count)
 {
-	uint16_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = *bufp++;
-		ofs += 2;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_region_io_2(bsh + ofs, bufp, count);
+	else {
+		uint16_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			ia64_st2(bsp++, *bufp++);
 	}
 }
 
@@ -444,12 +542,13 @@ static __inline void
 bus_space_write_region_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint32_t *bufp, size_t count)
 {
-	uint32_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = *bufp++;
-		ofs += 4;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_region_io_4(bsh + ofs, bufp, count);
+	else {
+		uint32_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			ia64_st4(bsp++, *bufp++);
 	}
 }
 
@@ -457,12 +556,13 @@ static __inline void
 bus_space_write_region_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, const uint64_t *bufp, size_t count)
 {
-	uint64_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = *bufp++;
-		ofs += 8;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_write_region_io_8(bsh + ofs, bufp, count);
+	else {
+		uint64_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			ia64_st8(bsp++, *bufp++);
 	}
 }
 
@@ -476,44 +576,36 @@ static __inline void
 bus_space_set_multi_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint8_t val, size_t count)
 {
-	uint8_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
+
 	while (count-- > 0)
-		*bsp = val;
+		bus_space_write_1(bst, bsh, ofs, val);
 }
 
 static __inline void
 bus_space_set_multi_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint16_t val, size_t count)
 {
-	uint16_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
+
 	while (count-- > 0)
-		*bsp = val;
+		bus_space_write_2(bst, bsh, ofs, val);
 }
 
 static __inline void
 bus_space_set_multi_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint32_t val, size_t count)
 {
-	uint32_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
+
 	while (count-- > 0)
-		*bsp = val;
+		bus_space_write_4(bst, bsh, ofs, val);
 }
 
 static __inline void
 bus_space_set_multi_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint64_t val, size_t count)
 {
-	uint64_t __volatile *bsp;
-	bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-	    __MEMIO_ADDR(bsh + ofs);
+
 	while (count-- > 0)
-		*bsp = val;
+		bus_space_write_8(bst, bsh, ofs, val);
 }
 
 
@@ -523,16 +615,22 @@ bus_space_set_multi_8(bus_space_tag_t bst, bus_space_handle_t bsh,
  * data is passed by value and written to successive bus space addresses.
  * Writes are unordered.
  */
+void bus_space_set_region_io_1(u_long, uint8_t, size_t);
+void bus_space_set_region_io_2(u_long, uint16_t, size_t);
+void bus_space_set_region_io_4(u_long, uint32_t, size_t);
+void bus_space_set_region_io_8(u_long, uint64_t, size_t);
+
 static __inline void
 bus_space_set_region_1(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint8_t val, size_t count)
 {
-	uint8_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = val;
-		ofs += 1;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_set_region_io_1(bsh + ofs, val, count);
+	else {
+		uint8_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			ia64_st1(bsp++, val);
 	}
 }
 
@@ -540,12 +638,13 @@ static __inline void
 bus_space_set_region_2(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint16_t val, size_t count)
 {
-	uint16_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = val;
-		ofs += 2;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_set_region_io_2(bsh + ofs, val, count);
+	else {
+		uint16_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			ia64_st2(bsp++, val);
 	}
 }
 
@@ -553,12 +652,13 @@ static __inline void
 bus_space_set_region_4(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint32_t val, size_t count)
 {
-	uint32_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = val;
-		ofs += 4;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_set_region_io_4(bsh + ofs, val, count);
+	else {
+		uint32_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			ia64_st4(bsp++, val);
 	}
 }
 
@@ -566,12 +666,13 @@ static __inline void
 bus_space_set_region_8(bus_space_tag_t bst, bus_space_handle_t bsh,
     bus_size_t ofs, uint64_t val, size_t count)
 {
-	uint64_t __volatile *bsp;
-	while (count-- > 0) {
-		bsp = (bst == IA64_BUS_SPACE_IO) ? __PIO_ADDR(bsh + ofs) :
-		    __MEMIO_ADDR(bsh + ofs);
-		*bsp = val;
-		ofs += 8;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO))
+		bus_space_set_region_io_4(bsh + ofs, val, count);
+	else {
+		uint64_t *bsp = (void *)(bsh + ofs);
+		while (count-- > 0)
+			ia64_st8(bsp++, val);
 	}
 }
 
@@ -583,159 +684,104 @@ bus_space_set_region_8(bus_space_tag_t bst, bus_space_handle_t bsh,
  * The data is read from successive bus space addresses and also written to
  * successive bus space addresses. Both reads and writes are unordered.
  */
+void bus_space_copy_region_io_1(u_long, u_long, size_t);
+void bus_space_copy_region_io_2(u_long, u_long, size_t);
+void bus_space_copy_region_io_4(u_long, u_long, size_t);
+void bus_space_copy_region_io_8(u_long, u_long, size_t);
+
 static __inline void
-bus_space_copy_region_1(bus_space_tag_t bst, bus_space_handle_t bsh1,
-    bus_size_t ofs1, bus_space_handle_t bsh2, bus_size_t ofs2, size_t count)
+bus_space_copy_region_1(bus_space_tag_t bst, bus_space_handle_t sbsh,
+    bus_size_t sofs, bus_space_handle_t dbsh, bus_size_t dofs, size_t count)
 {
-	bus_addr_t dst, src;
-	uint8_t __volatile *dstp, *srcp;
-	src = bsh1 + ofs1;
-	dst = bsh2 + ofs2;
-	if (dst > src) {
+	uint8_t *dst, *src;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO)) {
+		bus_space_copy_region_io_1(sbsh + sofs, dbsh + dofs, count);
+		return;
+	}
+
+	src = (void *)(sbsh + sofs);
+	dst = (void *)(dbsh + dofs);
+	if (src < dst) {
 		src += count - 1;
 		dst += count - 1;
-		while (count-- > 0) {
-			if (bst == IA64_BUS_SPACE_IO) {
-				srcp = __PIO_ADDR(src);
-				dstp = __PIO_ADDR(dst);
-			} else {
-				srcp = __MEMIO_ADDR(src);
-				dstp = __MEMIO_ADDR(dst);
-			}
-			*dstp = *srcp;
-			src -= 1;
-			dst -= 1;
-		}
+		while (count-- > 0)
+			ia64_st1(dst--, ia64_ld1(src--));
 	} else {
-		while (count-- > 0) {
-			if (bst == IA64_BUS_SPACE_IO) {
-				srcp = __PIO_ADDR(src);
-				dstp = __PIO_ADDR(dst);
-			} else {
-				srcp = __MEMIO_ADDR(src);
-				dstp = __MEMIO_ADDR(dst);
-			}
-			*dstp = *srcp;
-			src += 1;
-			dst += 1;
-		}
+		while (count-- > 0)
+			ia64_st1(dst++, ia64_ld1(src++));
 	}
 }
 
 static __inline void
-bus_space_copy_region_2(bus_space_tag_t bst, bus_space_handle_t bsh1,
-    bus_size_t ofs1, bus_space_handle_t bsh2, bus_size_t ofs2, size_t count)
+bus_space_copy_region_2(bus_space_tag_t bst, bus_space_handle_t sbsh,
+    bus_size_t sofs, bus_space_handle_t dbsh, bus_size_t dofs, size_t count)
 {
-	bus_addr_t dst, src;
-	uint16_t __volatile *dstp, *srcp;
-	src = bsh1 + ofs1;
-	dst = bsh2 + ofs2;
-	if (dst > src) {
-		src += (count - 1) << 1;
-		dst += (count - 1) << 1;
-		while (count-- > 0) {
-			if (bst == IA64_BUS_SPACE_IO) {
-				srcp = __PIO_ADDR(src);
-				dstp = __PIO_ADDR(dst);
-			} else {
-				srcp = __MEMIO_ADDR(src);
-				dstp = __MEMIO_ADDR(dst);
-			}
-			*dstp = *srcp;
-			src -= 2;
-			dst -= 2;
-		}
+	uint16_t *dst, *src;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO)) {
+		bus_space_copy_region_io_2(sbsh + sofs, dbsh + dofs, count);
+		return;
+	}
+
+	src = (void *)(sbsh + sofs);
+	dst = (void *)(dbsh + dofs);
+	if (src < dst) {
+		src += count - 1;
+		dst += count - 1;
+		while (count-- > 0)
+			ia64_st2(dst--, ia64_ld2(src--));
 	} else {
-		while (count-- > 0) {
-			if (bst == IA64_BUS_SPACE_IO) {
-				srcp = __PIO_ADDR(src);
-				dstp = __PIO_ADDR(dst);
-			} else {
-				srcp = __MEMIO_ADDR(src);
-				dstp = __MEMIO_ADDR(dst);
-			}
-			*dstp = *srcp;
-			src += 2;
-			dst += 2;
-		}
+		while (count-- > 0)
+			ia64_st2(dst++, ia64_ld2(src++));
 	}
 }
 
 static __inline void
-bus_space_copy_region_4(bus_space_tag_t bst, bus_space_handle_t bsh1,
-    bus_size_t ofs1, bus_space_handle_t bsh2, bus_size_t ofs2, size_t count)
+bus_space_copy_region_4(bus_space_tag_t bst, bus_space_handle_t sbsh,
+    bus_size_t sofs, bus_space_handle_t dbsh, bus_size_t dofs, size_t count)
 {
-	bus_addr_t dst, src;
-	uint32_t __volatile *dstp, *srcp;
-	src = bsh1 + ofs1;
-	dst = bsh2 + ofs2;
-	if (dst > src) {
-		src += (count - 1) << 2;
-		dst += (count - 1) << 2;
-		while (count-- > 0) {
-			if (bst == IA64_BUS_SPACE_IO) {
-				srcp = __PIO_ADDR(src);
-				dstp = __PIO_ADDR(dst);
-			} else {
-				srcp = __MEMIO_ADDR(src);
-				dstp = __MEMIO_ADDR(dst);
-			}
-			*dstp = *srcp;
-			src -= 4;
-			dst -= 4;
-		}
+	uint32_t *dst, *src;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO)) {
+		bus_space_copy_region_io_4(sbsh + sofs, dbsh + dofs, count);
+		return;
+	}
+
+	src = (void *)(sbsh + sofs);
+	dst = (void *)(dbsh + dofs);
+	if (src < dst) {
+		src += count - 1;
+		dst += count - 1;
+		while (count-- > 0)
+			ia64_st4(dst--, ia64_ld4(src--));
 	} else {
-		while (count-- > 0) {
-			if (bst == IA64_BUS_SPACE_IO) {
-				srcp = __PIO_ADDR(src);
-				dstp = __PIO_ADDR(dst);
-			} else {
-				srcp = __MEMIO_ADDR(src);
-				dstp = __MEMIO_ADDR(dst);
-			}
-			*dstp = *srcp;
-			src += 4;
-			dst += 4;
-		}
+		while (count-- > 0)
+			ia64_st4(dst++, ia64_ld4(src++));
 	}
 }
 
 static __inline void
-bus_space_copy_region_8(bus_space_tag_t bst, bus_space_handle_t bsh1,
-    bus_size_t ofs1, bus_space_handle_t bsh2, bus_size_t ofs2, size_t count)
+bus_space_copy_region_8(bus_space_tag_t bst, bus_space_handle_t sbsh,
+    bus_size_t sofs, bus_space_handle_t dbsh, bus_size_t dofs, size_t count)
 {
-	bus_addr_t dst, src;
-	uint64_t __volatile *dstp, *srcp;
-	src = bsh1 + ofs1;
-	dst = bsh2 + ofs2;
-	if (dst > src) {
-		src += (count - 1) << 3;
-		dst += (count - 1) << 3;
-		while (count-- > 0) {
-			if (bst == IA64_BUS_SPACE_IO) {
-				srcp = __PIO_ADDR(src);
-				dstp = __PIO_ADDR(dst);
-			} else {
-				srcp = __MEMIO_ADDR(src);
-				dstp = __MEMIO_ADDR(dst);
-			}
-			*dstp = *srcp;
-			src -= 8;
-			dst -= 8;
-		}
+	uint64_t *dst, *src;
+
+	if (__predict_false(bst == IA64_BUS_SPACE_IO)) {
+		bus_space_copy_region_io_8(sbsh + sofs, dbsh + dofs, count);
+		return;
+	}
+
+	src = (void *)(sbsh + sofs);
+	dst = (void *)(dbsh + dofs);
+	if (src < dst) {
+		src += count - 1;
+		dst += count - 1;
+		while (count-- > 0)
+			ia64_st8(dst--, ia64_ld8(src--));
 	} else {
-		while (count-- > 0) {
-			if (bst == IA64_BUS_SPACE_IO) {
-				srcp = __PIO_ADDR(src);
-				dstp = __PIO_ADDR(dst);
-			} else {
-				srcp = __MEMIO_ADDR(src);
-				dstp = __MEMIO_ADDR(dst);
-			}
-			*dstp = *srcp;
-			src += 8;
-			dst += 8;
-		}
+		while (count-- > 0)
+			ia64_st8(dst++, ia64_ld8(src++));
 	}
 }
 
@@ -744,86 +790,51 @@ bus_space_copy_region_8(bus_space_tag_t bst, bus_space_handle_t bsh1,
  * Stream accesses are the same as normal accesses on ia64; there are no
  * supported bus systems with an endianess different from the host one.
  */
-#define	bus_space_read_stream_1(t, h, o)	\
-	bus_space_read_1(t, h, o)
-#define	bus_space_read_stream_2(t, h, o)	\
-	bus_space_read_2(t, h, o)
-#define	bus_space_read_stream_4(t, h, o)	\
-	bus_space_read_4(t, h, o)
-#define	bus_space_read_stream_8(t, h, o)	\
-	bus_space_read_8(t, h, o)
 
-#define	bus_space_read_multi_stream_1(t, h, o, a, c)	\
-	bus_space_read_multi_1(t, h, o, a, c)
-#define	bus_space_read_multi_stream_2(t, h, o, a, c)	\
-	bus_space_read_multi_2(t, h, o, a, c)
-#define	bus_space_read_multi_stream_4(t, h, o, a, c)	\
-	bus_space_read_multi_4(t, h, o, a, c)
-#define	bus_space_read_multi_stream_8(t, h, o, a, c)	\
-	bus_space_read_multi_8(t, h, o, a, c)
+#define	bus_space_read_stream_1		bus_space_read_1
+#define	bus_space_read_stream_2		bus_space_read_2
+#define	bus_space_read_stream_4		bus_space_read_4
+#define	bus_space_read_stream_8		bus_space_read_8
 
-#define	bus_space_write_stream_1(t, h, o, v)	\
-	bus_space_write_1(t, h, o, v)
-#define	bus_space_write_stream_2(t, h, o, v)	\
-	bus_space_write_2(t, h, o, v)
-#define	bus_space_write_stream_4(t, h, o, v)	\
-	bus_space_write_4(t, h, o, v)
-#define	bus_space_write_stream_8(t, h, o, v)	\
-	bus_space_write_8(t, h, o, v)
+#define	bus_space_write_stream_1	bus_space_write_1
+#define	bus_space_write_stream_2	bus_space_write_2
+#define	bus_space_write_stream_4	bus_space_write_4
+#define	bus_space_write_stream_8	bus_space_write_8
 
-#define	bus_space_write_multi_stream_1(t, h, o, a, c)	\
-	bus_space_write_multi_1(t, h, o, a, c)
-#define	bus_space_write_multi_stream_2(t, h, o, a, c)	\
-	bus_space_write_multi_2(t, h, o, a, c)
-#define	bus_space_write_multi_stream_4(t, h, o, a, c)	\
-	bus_space_write_multi_4(t, h, o, a, c)
-#define	bus_space_write_multi_stream_8(t, h, o, a, c)	\
-	bus_space_write_multi_8(t, h, o, a, c)
+#define	bus_space_read_multi_stream_1	bus_space_read_multi_1
+#define	bus_space_read_multi_stream_2	bus_space_read_multi_2
+#define	bus_space_read_multi_stream_4	bus_space_read_multi_4
+#define	bus_space_read_multi_stream_8	bus_space_read_multi_8
 
-#define	bus_space_set_multi_stream_1(t, h, o, v, c)	\
-	bus_space_set_multi_1(t, h, o, v, c)
-#define	bus_space_set_multi_stream_2(t, h, o, v, c)	\
-	bus_space_set_multi_2(t, h, o, v, c)
-#define	bus_space_set_multi_stream_4(t, h, o, v, c)	\
-	bus_space_set_multi_4(t, h, o, v, c)
-#define	bus_space_set_multi_stream_8(t, h, o, v, c)	\
-	bus_space_set_multi_8(t, h, o, v, c)
+#define	bus_space_write_multi_stream_1	bus_space_write_multi_1
+#define	bus_space_write_multi_stream_2	bus_space_write_multi_2
+#define	bus_space_write_multi_stream_4	bus_space_write_multi_4
+#define	bus_space_write_multi_stream_8	bus_space_write_multi_8
 
-#define	bus_space_read_region_stream_1(t, h, o, a, c)	\
-	bus_space_read_region_1(t, h, o, a, c)
-#define	bus_space_read_region_stream_2(t, h, o, a, c)	\
-	bus_space_read_region_2(t, h, o, a, c)
-#define	bus_space_read_region_stream_4(t, h, o, a, c)	\
-	bus_space_read_region_4(t, h, o, a, c)
-#define	bus_space_read_region_stream_8(t, h, o, a, c)	\
-	bus_space_read_region_8(t, h, o, a, c)
+#define	bus_space_read_region_stream_1	bus_space_read_region_1
+#define	bus_space_read_region_stream_2	bus_space_read_region_2
+#define	bus_space_read_region_stream_4	bus_space_read_region_4
+#define	bus_space_read_region_stream_8	bus_space_read_region_8
 
-#define	bus_space_write_region_stream_1(t, h, o, a, c)	\
-	bus_space_write_region_1(t, h, o, a, c)
-#define	bus_space_write_region_stream_2(t, h, o, a, c)	\
-	bus_space_write_region_2(t, h, o, a, c)
-#define	bus_space_write_region_stream_4(t, h, o, a, c)	\
-	bus_space_write_region_4(t, h, o, a, c)
-#define	bus_space_write_region_stream_8(t, h, o, a, c)	\
-	bus_space_write_region_8(t, h, o, a, c)
+#define	bus_space_write_region_stream_1	bus_space_write_region_1
+#define	bus_space_write_region_stream_2	bus_space_write_region_2
+#define	bus_space_write_region_stream_4	bus_space_write_region_4
+#define	bus_space_write_region_stream_8	bus_space_write_region_8
 
-#define	bus_space_set_region_stream_1(t, h, o, v, c)	\
-	bus_space_set_region_1(t, h, o, v, c)
-#define	bus_space_set_region_stream_2(t, h, o, v, c)	\
-	bus_space_set_region_2(t, h, o, v, c)
-#define	bus_space_set_region_stream_4(t, h, o, v, c)	\
-	bus_space_set_region_4(t, h, o, v, c)
-#define	bus_space_set_region_stream_8(t, h, o, v, c)	\
-	bus_space_set_region_8(t, h, o, v, c)
+#define	bus_space_set_multi_stream_1	bus_space_set_multi_1
+#define	bus_space_set_multi_stream_2	bus_space_set_multi_2
+#define	bus_space_set_multi_stream_4	bus_space_set_multi_4
+#define	bus_space_set_multi_stream_8	bus_space_set_multi_8
 
-#define	bus_space_copy_region_stream_1(t, h1, o1, h2, o2, c)	\
-	bus_space_copy_region_1(t, h1, o1, h2, o2, c)
-#define	bus_space_copy_region_stream_2(t, h1, o1, h2, o2, c)	\
-	bus_space_copy_region_2(t, h1, o1, h2, o2, c)
-#define	bus_space_copy_region_stream_4(t, h1, o1, h2, o2, c)	\
-	bus_space_copy_region_4(t, h1, o1, h2, o2, c)
-#define	bus_space_copy_region_stream_8(t, h1, o1, h2, o2, c)	\
-	bus_space_copy_region_8(t, h1, o1, h2, o2, c)
+#define	bus_space_set_region_stream_1	bus_space_set_region_1
+#define	bus_space_set_region_stream_2	bus_space_set_region_2
+#define	bus_space_set_region_stream_4	bus_space_set_region_4
+#define	bus_space_set_region_stream_8	bus_space_set_region_8
+
+#define	bus_space_copy_region_stream_1	bus_space_copy_region_1
+#define	bus_space_copy_region_stream_2	bus_space_copy_region_2
+#define	bus_space_copy_region_stream_4	bus_space_copy_region_4
+#define	bus_space_copy_region_stream_8	bus_space_copy_region_8
 
 #include 
 
diff --git a/sys/ia64/include/clock.h b/sys/ia64/include/clock.h
index aa4220aa128..772fc2a29ed 100644
--- a/sys/ia64/include/clock.h
+++ b/sys/ia64/include/clock.h
@@ -14,7 +14,6 @@
 #define	CLOCK_VECTOR	254
 
 extern uint64_t	ia64_clock_reload;
-extern uint64_t	itc_frequency;
 
 #endif
 
diff --git a/sys/ia64/include/cpufunc.h b/sys/ia64/include/cpufunc.h
index 339bd95801a..9ae06a2253d 100644
--- a/sys/ia64/include/cpufunc.h
+++ b/sys/ia64/include/cpufunc.h
@@ -54,132 +54,6 @@ breakpoint(void)
 #define	HAVE_INLINE_FFS
 #define	ffs(x)	__builtin_ffs(x)
 
-#define	__MEMIO_ADDR(x)		(__volatile void*)(IA64_PHYS_TO_RR6(x))
-extern __volatile void *ia64_ioport_address(u_int);
-#define	__PIO_ADDR(x)		ia64_ioport_address(x)
-
-/*
- * I/O port reads with ia32 semantics.
- */
-static __inline uint8_t
-inb(unsigned int port)
-{
-	__volatile uint8_t *p;
-	uint8_t v;
-	p = __PIO_ADDR(port);
-	ia64_mf();
-	v = *p;
-	ia64_mf_a();
-	ia64_mf();
-	return (v);
-}
-
-static __inline uint16_t
-inw(unsigned int port)
-{
-	__volatile uint16_t *p;
-	uint16_t v;
-	p = __PIO_ADDR(port);
-	ia64_mf();
-	v = *p;
-	ia64_mf_a();
-	ia64_mf();
-	return (v);
-}
-
-static __inline uint32_t
-inl(unsigned int port)
-{
-	volatile uint32_t *p;
-	uint32_t v;
-	p = __PIO_ADDR(port);
-	ia64_mf();
-	v = *p;
-	ia64_mf_a();
-	ia64_mf();
-	return (v);
-}
-
-static __inline void
-insb(unsigned int port, void *addr, size_t count)
-{
-	uint8_t *buf = addr;
-	while (count--)
-		*buf++ = inb(port);
-}
-
-static __inline void
-insw(unsigned int port, void *addr, size_t count)
-{
-	uint16_t *buf = addr;
-	while (count--)
-		*buf++ = inw(port);
-}
-
-static __inline void
-insl(unsigned int port, void *addr, size_t count)
-{
-	uint32_t *buf = addr;
-	while (count--)
-		*buf++ = inl(port);
-}
-
-static __inline void
-outb(unsigned int port, uint8_t data)
-{
-	volatile uint8_t *p;
-	p = __PIO_ADDR(port);
-	ia64_mf();
-	*p = data;
-	ia64_mf_a();
-	ia64_mf();
-}
-
-static __inline void
-outw(unsigned int port, uint16_t data)
-{
-	volatile uint16_t *p;
-	p = __PIO_ADDR(port);
-	ia64_mf();
-	*p = data;
-	ia64_mf_a();
-	ia64_mf();
-}
-
-static __inline void
-outl(unsigned int port, uint32_t data)
-{
-	volatile uint32_t *p;
-	p = __PIO_ADDR(port);
-	ia64_mf();
-	*p = data;
-	ia64_mf_a();
-	ia64_mf();
-}
-
-static __inline void
-outsb(unsigned int port, const void *addr, size_t count)
-{
-	const uint8_t *buf = addr;
-	while (count--)
-		outb(port, *buf++);
-}
-
-static __inline void
-outsw(unsigned int port, const void *addr, size_t count)
-{
-	const uint16_t *buf = addr;
-	while (count--)
-		outw(port, *buf++);
-}
-
-static __inline void
-outsl(unsigned int port, const void *addr, size_t count)
-{
-	const uint32_t *buf = addr;
-	while (count--)
-		outl(port, *buf++);
-}
 
 static __inline void
 disable_intr(void)
diff --git a/sys/ia64/include/ia64_cpu.h b/sys/ia64/include/ia64_cpu.h
index 3d6c725c150..0a5a1154aeb 100644
--- a/sys/ia64/include/ia64_cpu.h
+++ b/sys/ia64/include/ia64_cpu.h
@@ -281,6 +281,74 @@ ia64_ptc_l(u_int64_t va, u_int64_t log2size)
 	__asm __volatile("ptc.l %0,%1;; srlz.i;;" :: "r"(va), "r"(log2size));
 }
 
+/*
+ * Unordered memory load.
+ */
+
+static __inline uint8_t
+ia64_ld1(uint8_t *p)
+{
+	uint8_t v;
+
+	__asm __volatile("ld1 %0=[%1];;" : "=r"(v) : "r"(p));
+	return (v);
+}
+
+static __inline uint16_t
+ia64_ld2(uint16_t *p)        
+{
+	uint16_t v;
+
+	__asm __volatile("ld2 %0=[%1];;" : "=r"(v) : "r"(p));
+	return (v);
+}
+
+static __inline uint32_t
+ia64_ld4(uint32_t *p)        
+{
+	uint32_t v;
+
+	__asm __volatile("ld4 %0=[%1];;" : "=r"(v) : "r"(p));
+	return (v);
+}
+
+static __inline uint64_t
+ia64_ld8(uint64_t *p)        
+{
+	uint64_t v;
+
+	__asm __volatile("ld8 %0=[%1];;" : "=r"(v) : "r"(p));
+	return (v);
+}
+
+/*
+ * Unordered memory store.
+ */
+
+static __inline void
+ia64_st1(uint8_t *p, uint8_t v)
+{
+	__asm __volatile("st1 [%0]=%1;;" :: "r"(p), "r"(v));
+}
+
+static __inline void
+ia64_st2(uint16_t *p, uint16_t v)
+{
+	__asm __volatile("st2 [%0]=%1;;" :: "r"(p), "r"(v));
+}
+
+static __inline void
+ia64_st4(uint32_t *p, uint32_t v)
+{
+	__asm __volatile("st4 [%0]=%1;;" :: "r"(p), "r"(v));
+}
+
+static __inline void
+ia64_st8(uint64_t *p, uint64_t v)
+{
+	__asm __volatile("st8 [%0]=%1;;" :: "r"(p), "r"(v));
+}
+
 /*
  * Read the value of psr.
  */
diff --git a/sys/ia64/include/kdb.h b/sys/ia64/include/kdb.h
index d8a12e037b4..8a9cc3a1e3b 100644
--- a/sys/ia64/include/kdb.h
+++ b/sys/ia64/include/kdb.h
@@ -33,7 +33,7 @@
 #include 
 #include 
 
-#define	KDB_STOPPEDPCB(pc)	(&(pc)->pc_pcb)
+#define	KDB_STOPPEDPCB(pc)	(&(pc)->pc_md.pcb)
 
 static __inline void
 kdb_cpu_clear_singlestep(void)
diff --git a/sys/ia64/include/mca.h b/sys/ia64/include/mca.h
index 75831c76ceb..94926d16915 100644
--- a/sys/ia64/include/mca.h
+++ b/sys/ia64/include/mca.h
@@ -39,6 +39,7 @@ struct mca_record_header {
 #define	MCA_RH_ERROR_CORRECTED		2
 	uint8_t		rh_flags;
 #define	MCA_RH_FLAGS_PLATFORM_ID	0x01	/* Platform_id present. */
+#define	MCA_RH_FLAGS_TIME_STAMP		0x02	/* Timestamp invalid. */
 	uint32_t	rh_length;		/* Size including header. */
 	uint8_t		rh_time[8];
 #define	MCA_RH_TIME_SEC		0
diff --git a/sys/ia64/include/md_var.h b/sys/ia64/include/md_var.h
index 6ee4cb4ee5c..7fdcb2de539 100644
--- a/sys/ia64/include/md_var.h
+++ b/sys/ia64/include/md_var.h
@@ -90,6 +90,7 @@ int	ia64_highfp_enable(struct thread *, struct trapframe *);
 int	ia64_highfp_save(struct thread *);
 int	ia64_highfp_save_ipi(void);
 struct ia64_init_return ia64_init(void);
+u_int	ia64_itc_freq(void);
 void	ia64_probe_sapics(void);
 void	ia64_sync_icache(vm_offset_t, vm_size_t);
 void	interrupt(struct trapframe *);
diff --git a/sys/ia64/include/param.h b/sys/ia64/include/param.h
index 4c8e8b9cee0..ba2629096bb 100644
--- a/sys/ia64/include/param.h
+++ b/sys/ia64/include/param.h
@@ -59,7 +59,7 @@
 #endif
 
 #if defined(SMP) || defined(KLD_MODULE)
-#define	MAXCPU		4
+#define	MAXCPU		32
 #else
 #define MAXCPU		1
 #endif
@@ -92,7 +92,7 @@
 #define	MAXPAGESIZES	1		/* maximum number of supported page sizes */
 
 #ifndef	KSTACK_PAGES
-#define	KSTACK_PAGES	5		/* pages of kernel stack */
+#define	KSTACK_PAGES	4		/* pages of kernel stack */
 #endif
 #define	KSTACK_GUARD_PAGES 0		/* pages of kstack guard; 0 disables */
 
diff --git a/sys/ia64/include/pcpu.h b/sys/ia64/include/pcpu.h
index c63573b9992..bc9fe0813d7 100644
--- a/sys/ia64/include/pcpu.h
+++ b/sys/ia64/include/pcpu.h
@@ -30,16 +30,39 @@
 #ifndef	_MACHINE_PCPU_H_
 #define	_MACHINE_PCPU_H_
 
+#include 
 #include 
 
+struct pcpu_stats {
+	u_long		pcs_nasts;		/* IPI_AST counter. */
+	u_long		pcs_nclks;		/* Clock interrupt counter. */
+	u_long		pcs_nextints;		/* ExtINT counter. */
+	u_long		pcs_nhighfps;		/* IPI_HIGH_FP counter. */
+	u_long		pcs_nhwints;		/* Hardware int. counter. */
+	u_long		pcs_npreempts;		/* IPI_PREEMPT counter. */
+	u_long		pcs_nrdvs;		/* IPI_RENDEZVOUS counter. */
+	u_long		pcs_nstops;		/* IPI_STOP counter. */
+	u_long		pcs_nstrays;		/* Stray interrupt counter. */
+};
+
+struct pcpu_md {
+	struct pcb	pcb;			/* Used by IPI_STOP */
+	struct pmap	*current_pmap;		/* active pmap */
+	vm_offset_t	vhpt;			/* Address of VHPT */
+	uint64_t	lid;			/* local CPU ID */
+	uint64_t	clock;			/* Clock counter. */
+	uint64_t	clockadj;		/* Clock adjust. */
+	uint32_t	awake:1;		/* CPU is awake? */
+	struct pcpu_stats stats;		/* Interrupt stats. */
+#ifdef _KERNEL
+	struct sysctl_ctx_list sysctl_ctx;
+	struct sysctl_oid *sysctl_tree;
+#endif
+};
+
 #define	PCPU_MD_FIELDS							\
-	struct pcb	pc_pcb;			/* Used by IPI_STOP */	\
-	struct pmap	*pc_current_pmap;	/* active pmap */	\
-	uint64_t	pc_lid;			/* local CPU ID */	\
-	uint64_t	pc_clock;		/* Clock counter. */	\
-	uint64_t	pc_clockadj;		/* Clock adjust. */	\
-	uint32_t	pc_awake:1;		/* CPU is awake? */	\
-	uint32_t	pc_acpi_id		/* ACPI CPU id. */
+	uint32_t	pc_acpi_id;		/* ACPI CPU id. */	\
+	struct pcpu_md	pc_md			/* MD fields. */
 
 #ifdef _KERNEL
 
diff --git a/sys/ia64/include/pmap.h b/sys/ia64/include/pmap.h
index c6b975477a7..f878d279c5f 100644
--- a/sys/ia64/include/pmap.h
+++ b/sys/ia64/include/pmap.h
@@ -125,6 +125,7 @@ extern int pmap_vhpt_log2size;
 #define	pmap_unmapbios(va, sz)	pmap_unmapdev(va, sz)
 
 vm_offset_t pmap_steal_memory(vm_size_t);
+vm_offset_t pmap_alloc_vhpt(void);
 void	pmap_bootstrap(void);
 void	pmap_kenter(vm_offset_t va, vm_offset_t pa);
 vm_paddr_t pmap_kextract(vm_offset_t va);
diff --git a/sys/isa/vga_isa.c b/sys/isa/vga_isa.c
index e86ee4680a3..093e555f457 100644
--- a/sys/isa/vga_isa.c
+++ b/sys/isa/vga_isa.c
@@ -59,6 +59,69 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
+static void
+vga_suspend(device_t dev)
+{
+	vga_softc_t *sc;
+	int nbytes;
+
+	sc = device_get_softc(dev);
+
+	/* Save the video state across the suspend. */
+	if (sc->state_buf != NULL)
+		goto save_palette;
+	nbytes = vidd_save_state(sc->adp, NULL, 0);
+	if (nbytes <= 0)
+		goto save_palette;
+	sc->state_buf = malloc(nbytes, M_TEMP, M_NOWAIT);
+	if (sc->state_buf == NULL)
+		goto save_palette;
+	if (bootverbose)
+		device_printf(dev, "saving %d bytes of video state\n", nbytes);
+	if (vidd_save_state(sc->adp, sc->state_buf, nbytes) != 0) {
+		device_printf(dev, "failed to save state (nbytes=%d)\n",
+		    nbytes);
+		free(sc->state_buf, M_TEMP);
+		sc->state_buf = NULL;
+	}
+
+save_palette:
+	/* Save the color palette across the suspend. */
+	if (sc->pal_buf != NULL)
+		return;
+	sc->pal_buf = malloc(256 * 3, M_TEMP, M_NOWAIT);
+	if (sc->pal_buf == NULL)
+		return;
+	if (bootverbose)
+		device_printf(dev, "saving color palette\n");
+	if (vidd_save_palette(sc->adp, sc->pal_buf) != 0) {
+		device_printf(dev, "failed to save palette\n");
+		free(sc->pal_buf, M_TEMP);
+		sc->pal_buf = NULL;
+	}
+}
+
+static void
+vga_resume(device_t dev)
+{
+	vga_softc_t *sc;
+
+	sc = device_get_softc(dev);
+
+	if (sc->state_buf != NULL) {
+		if (vidd_load_state(sc->adp, sc->state_buf) != 0)
+			device_printf(dev, "failed to reload state\n");
+		free(sc->state_buf, M_TEMP);
+		sc->state_buf = NULL;
+	}
+	if (sc->pal_buf != NULL) {
+		if (vidd_load_palette(sc->adp, sc->pal_buf) != 0)
+			device_printf(dev, "failed to reload palette\n");
+		free(sc->pal_buf, M_TEMP);
+		sc->pal_buf = NULL;
+	}
+}
+
 #define VGA_SOFTC(unit)		\
 	((vga_softc_t *)devclass_get_softc(isavga_devclass, unit))
 
@@ -103,9 +166,9 @@ isavga_probe(device_t dev)
 	if (isa_get_vendorid(dev))
 		return (ENXIO);
 
-	device_set_desc(dev, "Generic ISA VGA");
 	error = vga_probe_unit(device_get_unit(dev), &adp, device_get_flags(dev));
 	if (error == 0) {
+		device_set_desc(dev, "Generic ISA VGA");
 		bus_set_resource(dev, SYS_RES_IOPORT, 0,
 				 adp.va_io_base, adp.va_io_size);
 		bus_set_resource(dev, SYS_RES_MEMORY, 0,
@@ -124,10 +187,6 @@ static int
 isavga_attach(device_t dev)
 {
 	vga_softc_t *sc;
-	devclass_t dc;
-	device_t *devs;
-	void *vgapci_sc;
-	int count, i;
 	int unit;
 	int rid;
 	int error;
@@ -161,108 +220,29 @@ isavga_attach(device_t dev)
 	bus_generic_attach(dev);
 #endif
 
-	/* Find the matching PCI video controller. */
-	if (unit == 0) {
-		dc = devclass_find("vgapci");
-		if (dc != NULL &&
-		    devclass_get_devices(dc, &devs, &count) == 0) {
-			for (i = 0; i < count; i++)
-				if (device_get_flags(devs[i]) != 0) {
-					sc->pci_dev = devs[i];
-					break;
-				}
-			free(devs, M_TEMP);
-		}
-		if (sc->pci_dev != NULL) {
-			vgapci_sc = device_get_softc(sc->pci_dev);
-			*(device_t *)vgapci_sc = dev;
-			device_printf(dev, "associated with %s\n",
-			    device_get_nameunit(sc->pci_dev));
-		}
-	}
-
 	return (0);
 }
 
 static int
 isavga_suspend(device_t dev)
 {
-	vga_softc_t *sc;
-	device_t isa_dev;
-	int err, nbytes;
+	int error;
 
-	err = 0;
-	isa_dev = dev;
-	sc = device_get_softc(isa_dev);
-	if (sc->pci_dev != NULL)
-		dev = sc->pci_dev;
-	else
-		err = bus_generic_suspend(isa_dev);
+	error = bus_generic_suspend(dev);
+	if (error != 0)
+		return (error);
+	vga_suspend(dev);
 
-	/* Save the video state across the suspend. */
-	if (sc->state_buf != NULL)
-		goto save_palette;
-	nbytes = vidd_save_state(sc->adp, NULL, 0);
-	if (nbytes <= 0)
-		goto save_palette;
-	sc->state_buf = malloc(nbytes, M_TEMP, M_NOWAIT);
-	if (sc->state_buf == NULL)
-		goto save_palette;
-	if (bootverbose)
-		device_printf(dev, "saving %d bytes of video state\n", nbytes);
-	if (vidd_save_state(sc->adp, sc->state_buf, nbytes) != 0) {
-		device_printf(dev, "failed to save state (nbytes=%d)\n",
-		    nbytes);
-		free(sc->state_buf, M_TEMP);
-		sc->state_buf = NULL;
-	}
-
-save_palette:
-	/* Save the color palette across the suspend. */
-	if (sc->pal_buf != NULL)
-		return (err);
-	sc->pal_buf = malloc(256 * 3, M_TEMP, M_NOWAIT);
-	if (sc->pal_buf != NULL) {
-		if (bootverbose)
-			device_printf(dev, "saving color palette\n");
-		if (vidd_save_palette(sc->adp, sc->pal_buf) != 0) {
-			device_printf(dev, "failed to save palette\n");
-			free(sc->pal_buf, M_TEMP);
-			sc->pal_buf = NULL;
-		}
-	}
-
-	return (err);
+	return (error);
 }
 
 static int
 isavga_resume(device_t dev)
 {
-	vga_softc_t *sc;
-	device_t isa_dev;
 
-	isa_dev = dev;
-	sc = device_get_softc(isa_dev);
-	if (sc->pci_dev != NULL)
-		dev = sc->pci_dev;
+	vga_resume(dev);
 
-	if (sc->state_buf != NULL) {
-		if (vidd_load_state(sc->adp, sc->state_buf) != 0)
-			device_printf(dev, "failed to reload state\n");
-		free(sc->state_buf, M_TEMP);
-		sc->state_buf = NULL;
-	}
-	if (sc->pal_buf != NULL) {
-		if (vidd_load_palette(sc->adp, sc->pal_buf) != 0)
-			device_printf(dev, "failed to reload palette\n");
-		free(sc->pal_buf, M_TEMP);
-		sc->pal_buf = NULL;
-	}
-
-	if (isa_dev != dev)
-		return (0);
-
-	return (bus_generic_resume(isa_dev));
+	return (bus_generic_resume(dev));
 }
 
 #ifdef FB_INSTALL_CDEV
@@ -298,9 +278,11 @@ isavga_ioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag, struct thread
 }
 
 static int
-isavga_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int prot)
+isavga_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
-	return (vga_mmap(dev, VGA_SOFTC(VGA_UNIT(dev)), offset, paddr, prot));
+	return (vga_mmap(dev, VGA_SOFTC(VGA_UNIT(dev)), offset, paddr, prot,
+	    memattr));
 }
 
 #endif /* FB_INSTALL_CDEV */
@@ -323,3 +305,79 @@ static driver_t isavga_driver = {
 };
 
 DRIVER_MODULE(vga, isa, isavga_driver, isavga_devclass, 0, 0);
+
+static devclass_t	vgapm_devclass;
+
+static void
+vgapm_identify(driver_t *driver, device_t parent)
+{
+
+	if (device_get_flags(parent) != 0)
+		device_add_child(parent, "vgapm", 0);
+}
+
+static int
+vgapm_probe(device_t dev)
+{
+
+	device_set_desc(dev, "VGA suspend/resume");
+	device_quiet(dev);
+
+	return (BUS_PROBE_DEFAULT);
+}
+
+static int
+vgapm_attach(device_t dev)
+{
+
+	bus_generic_probe(dev);
+	bus_generic_attach(dev);
+
+	return (0);
+}
+
+static int
+vgapm_suspend(device_t dev)
+{
+	device_t vga_dev;
+	int error;
+
+	error = bus_generic_suspend(dev);
+	if (error != 0)
+		return (error);
+	vga_dev = devclass_get_device(isavga_devclass, 0);
+	if (vga_dev == NULL)
+		return (0);
+	vga_suspend(vga_dev);
+
+	return (0);
+}
+
+static int
+vgapm_resume(device_t dev)
+{
+	device_t vga_dev;
+
+	vga_dev = devclass_get_device(isavga_devclass, 0);
+	if (vga_dev != NULL)
+		vga_resume(vga_dev);
+
+	return (bus_generic_resume(dev));
+}
+
+static device_method_t vgapm_methods[] = {
+	DEVMETHOD(device_identify,	vgapm_identify),
+	DEVMETHOD(device_probe,		vgapm_probe),
+	DEVMETHOD(device_attach,	vgapm_attach),
+	DEVMETHOD(device_suspend,	vgapm_suspend),
+	DEVMETHOD(device_resume,	vgapm_resume),
+	{ 0, 0 }
+};
+
+static driver_t vgapm_driver = {
+	"vgapm",
+	vgapm_methods,
+	0
+};
+
+DRIVER_MODULE(vgapm, vgapci, vgapm_driver, vgapm_devclass, 0, 0);
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c
index 8504e48d3e5..f4510ac4fa2 100644
--- a/sys/kern/kern_conf.c
+++ b/sys/kern/kern_conf.c
@@ -63,7 +63,7 @@ static struct cdev *make_dev_credv(int flags,
 static struct cdev_priv_list cdevp_free_list =
     TAILQ_HEAD_INITIALIZER(cdevp_free_list);
 static SLIST_HEAD(free_cdevsw, cdevsw) cdevsw_gt_post_list =
-    SLIST_HEAD_INITIALIZER();
+    SLIST_HEAD_INITIALIZER(cdevsw_gt_post_list);
 
 void
 dev_lock(void)
@@ -302,7 +302,7 @@ static struct cdevsw dead_cdevsw = {
 #define no_read		(d_read_t *)enodev
 #define no_write	(d_write_t *)enodev
 #define no_ioctl	(d_ioctl_t *)enodev
-#define no_mmap		(d_mmap2_t *)enodev
+#define no_mmap		(d_mmap_t *)enodev
 #define no_kqfilter	(d_kqfilter_t *)enodev
 #define no_mmap_single	(d_mmap_single_t *)enodev
 
@@ -469,7 +469,7 @@ giant_kqfilter(struct cdev *dev, struct knote *kn)
 }
 
 static int
-giant_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot,
+giant_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, int nprot,
     vm_memattr_t *memattr)
 {
 	struct cdevsw *dsw;
@@ -479,11 +479,8 @@ giant_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot,
 	if (dsw == NULL)
 		return (ENXIO);
 	mtx_lock(&Giant);
-	if (dsw->d_gianttrick->d_flags & D_MMAP2)
-		retval = dsw->d_gianttrick->d_mmap2(dev, offset, paddr, nprot,
-		    memattr);
-	else
-		retval = dsw->d_gianttrick->d_mmap(dev, offset, paddr, nprot);
+	retval = dsw->d_gianttrick->d_mmap(dev, offset, paddr, nprot,
+	    memattr);
 	mtx_unlock(&Giant);
 	dev_relthread(dev);
 	return (retval);
@@ -595,8 +592,7 @@ prep_cdevsw(struct cdevsw *devsw)
 		return;
 	}
 
-	if (devsw->d_version != D_VERSION_01 &&
-	    devsw->d_version != D_VERSION_02) {
+	if (devsw->d_version != D_VERSION_03) {
 		printf(
 		    "WARNING: Device driver \"%s\" has wrong version %s\n",
 		    devsw->d_name == NULL ? "???" : devsw->d_name,
@@ -608,18 +604,16 @@ prep_cdevsw(struct cdevsw *devsw)
 		devsw->d_ioctl = dead_ioctl;
 		devsw->d_poll = dead_poll;
 		devsw->d_mmap = dead_mmap;
+		devsw->d_mmap_single = dead_mmap_single;
 		devsw->d_strategy = dead_strategy;
 		devsw->d_dump = dead_dump;
 		devsw->d_kqfilter = dead_kqfilter;
 	}
-	if (devsw->d_version == D_VERSION_01)
-		devsw->d_mmap_single = NULL;
 	
 	if (devsw->d_flags & D_NEEDGIANT) {
 		if (devsw->d_gianttrick == NULL) {
 			memcpy(dsw2, devsw, sizeof *dsw2);
 			devsw->d_gianttrick = dsw2;
-			devsw->d_flags |= D_MMAP2;
 			dsw2 = NULL;
 		}
 	}
@@ -640,7 +634,7 @@ prep_cdevsw(struct cdevsw *devsw)
 	FIXUP(d_write,		no_write,	giant_write);
 	FIXUP(d_ioctl,		no_ioctl,	giant_ioctl);
 	FIXUP(d_poll,		no_poll,	giant_poll);
-	FIXUP(d_mmap2,		no_mmap,	giant_mmap);
+	FIXUP(d_mmap,		no_mmap,	giant_mmap);
 	FIXUP(d_strategy,	no_strategy,	giant_strategy);
 	FIXUP(d_kqfilter,	no_kqfilter,	giant_kqfilter);
 	FIXUP(d_mmap_single,	no_mmap_single,	giant_mmap_single);
diff --git a/sys/kern/kern_descrip.c b/sys/kern/kern_descrip.c
index 434f54a4dd8..676de650524 100644
--- a/sys/kern/kern_descrip.c
+++ b/sys/kern/kern_descrip.c
@@ -718,14 +718,15 @@ kern_fcntl(struct thread *td, int fd, int cmd, intptr_t arg)
 			do {
 				new = old = fp->f_flag;
 				new |= FRDAHEAD;
-			} while (atomic_cmpset_rel_int(&fp->f_flag, old, new) == 0);
+			} while (!atomic_cmpset_rel_int(&fp->f_flag, old, new));
 readahead_vnlock_fail:
 			VFS_UNLOCK_GIANT(vfslocked);
+			vfslocked = 0;
 		} else {
 			do {
 				new = old = fp->f_flag;
 				new &= ~FRDAHEAD;
-			} while (atomic_cmpset_rel_int(&fp->f_flag, old, new) == 0);
+			} while (!atomic_cmpset_rel_int(&fp->f_flag, old, new));
 		}
 		fdrop(fp, td);
 		break;
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c
index 7c405945cdc..0ba6c818e92 100644
--- a/sys/kern/kern_event.c
+++ b/sys/kern/kern_event.c
@@ -279,7 +279,7 @@ static struct {
 	{ &proc_filtops },			/* EVFILT_PROC */
 	{ &sig_filtops },			/* EVFILT_SIGNAL */
 	{ &timer_filtops },			/* EVFILT_TIMER */
-	{ &file_filtops },			/* EVFILT_NETDEV */
+	{ &null_filtops },			/* former EVFILT_NETDEV */
 	{ &fs_filtops },			/* EVFILT_FS */
 	{ &null_filtops },			/* EVFILT_LIO */
 	{ &user_filtops },			/* EVFILT_USER */
@@ -867,6 +867,7 @@ kqueue_add_filteropts(int filt, struct filterops *filtops)
 {
 	int error;
 
+	error = 0;
 	if (filt > 0 || filt + EVFILT_SYSCOUNT < 0) {
 		printf(
 "trying to add a filterop that is out of range: %d is beyond %d\n",
@@ -883,7 +884,7 @@ kqueue_add_filteropts(int filt, struct filterops *filtops)
 	}
 	mtx_unlock(&filterops_lock);
 
-	return (0);
+	return (error);
 }
 
 int
diff --git a/sys/kern/kern_exit.c b/sys/kern/kern_exit.c
index b96cdbf0976..af00f420c26 100644
--- a/sys/kern/kern_exit.c
+++ b/sys/kern/kern_exit.c
@@ -316,6 +316,7 @@ exit1(struct thread *td, int rv)
 		ttyvp = sp->s_ttyvp;
 		tp = sp->s_ttyp;
 		sp->s_ttyvp = NULL;
+		sp->s_ttydp = NULL;
 		sp->s_leader = NULL;
 		SESS_UNLOCK(sp);
 
diff --git a/sys/kern/kern_jail.c b/sys/kern/kern_jail.c
index e98c712ed51..7ee68c449c2 100644
--- a/sys/kern/kern_jail.c
+++ b/sys/kern/kern_jail.c
@@ -87,7 +87,7 @@ struct prison prison0 = {
 	.pr_securelevel	= -1,
 	.pr_childmax	= JAIL_MAX,
 	.pr_hostuuid	= DEFAULT_HOSTUUID,
-	.pr_children	= LIST_HEAD_INITIALIZER(&prison0.pr_children),
+	.pr_children	= LIST_HEAD_INITIALIZER(prison0.pr_children),
 #ifdef VIMAGE
 	.pr_flags	= PR_HOST|PR_VNET,
 #else
@@ -3161,7 +3161,7 @@ prison_check_af(struct ucred *cred, int af)
 	pr = cred->cr_prison;
 #ifdef VIMAGE
 	/* Prisons with their own network stack are not limited. */
-	if (pr->pr_flags & PR_VNET)
+	if (prison_owns_vnet(cred))
 		return (0);
 #endif
 
@@ -3222,6 +3222,11 @@ prison_if(struct ucred *cred, struct sockaddr *sa)
 	KASSERT(cred != NULL, ("%s: cred is NULL", __func__));
 	KASSERT(sa != NULL, ("%s: sa is NULL", __func__));
 
+#ifdef VIMAGE
+	if (prison_owns_vnet(cred))
+		return (0);
+#endif
+
 	error = 0;
 	switch (sa->sa_family)
 	{
@@ -3278,6 +3283,24 @@ jailed(struct ucred *cred)
 	return (cred->cr_prison != &prison0);
 }
 
+/*
+ * Return 1 if the passed credential is in a jail and that jail does not
+ * have its own virtual network stack, otherwise 0.
+ */
+int
+jailed_without_vnet(struct ucred *cred)
+{
+
+	if (!jailed(cred))
+		return (0);
+#ifdef VIMAGE
+	if (prison_owns_vnet(cred))
+		return (0);
+#endif
+
+	return (1);
+}
+
 /*
  * Return the correct hostname (domainname, et al) for the passed credential.
  */
@@ -3467,7 +3490,6 @@ prison_priv_check(struct ucred *cred, int priv)
 	case PRIV_NET_SETIFMTU:
 	case PRIV_NET_SETIFFLAGS:
 	case PRIV_NET_SETIFCAP:
-	case PRIV_NET_SETIFDESCR:
 	case PRIV_NET_SETIFNAME	:
 	case PRIV_NET_SETIFMETRIC:
 	case PRIV_NET_SETIFPHYS:
diff --git a/sys/kern/kern_linker.c b/sys/kern/kern_linker.c
index 9387ba8ea97..dd293023494 100644
--- a/sys/kern/kern_linker.c
+++ b/sys/kern/kern_linker.c
@@ -64,6 +64,8 @@ __FBSDID("$FreeBSD$");
 
 #ifdef KLD_DEBUG
 int kld_debug = 0;
+SYSCTL_INT(_debug, OID_AUTO, kld_debug, CTLFLAG_RW,
+        &kld_debug, 0, "Set various levels of KLD debug");
 #endif
 
 #define	KLD_LOCK()		sx_xlock(&kld_sx)
@@ -632,7 +634,7 @@ linker_file_unload(linker_file_t file, int flags)
 		 */
 		if ((error = module_unload(mod)) != 0) {
 			KLD_DPF(FILE, ("linker_file_unload: module %s"
-			    " failed unload\n", mod));
+			    " failed unload\n", module_getname(mod)));
 			return (error);
 		}
 		MOD_XLOCK;
@@ -709,6 +711,9 @@ linker_file_add_dependency(linker_file_t file, linker_file_t dep)
 	file->deps = newdeps;
 	file->deps[file->ndeps] = dep;
 	file->ndeps++;
+	KLD_DPF(FILE, ("linker_file_add_dependency:"
+	    " adding %s as dependency for %s\n", 
+	    dep->filename, file->filename));
 	return (0);
 }
 
diff --git a/sys/kern/kern_lock.c b/sys/kern/kern_lock.c
index 90df2fcb634..531c851e7f4 100644
--- a/sys/kern/kern_lock.c
+++ b/sys/kern/kern_lock.c
@@ -197,6 +197,8 @@ sleeplk(struct lock *lk, u_int flags, struct lock_object *ilk,
 
 	if (flags & LK_INTERLOCK)
 		class->lc_unlock(ilk);
+	if (queue == SQ_EXCLUSIVE_QUEUE && (flags & LK_SLEEPFAIL) != 0)
+		lk->lk_exslpfail++;
 	GIANT_SAVE();
 	sleepq_add(&lk->lock_object, NULL, wmesg, SLEEPQ_LK | (catch ?
 	    SLEEPQ_INTERRUPTIBLE : 0), queue);
@@ -225,6 +227,7 @@ static __inline int
 wakeupshlk(struct lock *lk, const char *file, int line)
 {
 	uintptr_t v, x;
+	u_int realexslp;
 	int queue, wakeup_swapper;
 
 	TD_LOCKS_DEC(curthread);
@@ -270,13 +273,34 @@ wakeupshlk(struct lock *lk, const char *file, int line)
 		/*
 		 * If the lock has exclusive waiters, give them preference in
 		 * order to avoid deadlock with shared runners up.
+		 * If interruptible sleeps left the exclusive queue empty
+		 * avoid a starvation for the threads sleeping on the shared
+		 * queue by giving them precedence and cleaning up the
+		 * exclusive waiters bit anyway.
 		 */
-		if (x & LK_EXCLUSIVE_WAITERS) {
-			queue = SQ_EXCLUSIVE_QUEUE;
-			v |= (x & LK_SHARED_WAITERS);
+		realexslp = sleepq_sleepcnt(&lk->lock_object,
+		    SQ_EXCLUSIVE_QUEUE);
+		if ((x & LK_EXCLUSIVE_WAITERS) != 0 && realexslp != 0) {
+			if (lk->lk_exslpfail < realexslp) {
+				lk->lk_exslpfail = 0;
+				queue = SQ_EXCLUSIVE_QUEUE;
+				v |= (x & LK_SHARED_WAITERS);
+			} else {
+				lk->lk_exslpfail = 0;
+				LOCK_LOG2(lk,
+				    "%s: %p has only LK_SLEEPFAIL sleepers",
+				    __func__, lk);
+				LOCK_LOG2(lk,
+			    "%s: %p waking up threads on the exclusive queue",
+				    __func__, lk);
+				wakeup_swapper =
+				    sleepq_broadcast(&lk->lock_object,
+				    SLEEPQ_LK, 0, SQ_EXCLUSIVE_QUEUE);
+				queue = SQ_SHARED_QUEUE;
+			}
+				
 		} else {
-			MPASS((x & ~LK_EXCLUSIVE_SPINNERS) ==
-			    LK_SHARED_WAITERS);
+			MPASS(lk->lk_exslpfail == 0);
 			queue = SQ_SHARED_QUEUE;
 		}
 
@@ -288,7 +312,7 @@ wakeupshlk(struct lock *lk, const char *file, int line)
 		LOCK_LOG3(lk, "%s: %p waking up threads on the %s queue",
 		    __func__, lk, queue == SQ_SHARED_QUEUE ? "shared" :
 		    "exclusive");
-		wakeup_swapper = sleepq_broadcast(&lk->lock_object, SLEEPQ_LK,
+		wakeup_swapper |= sleepq_broadcast(&lk->lock_object, SLEEPQ_LK,
 		    0, queue);
 		sleepq_release(&lk->lock_object);
 		break;
@@ -353,6 +377,7 @@ lockinit(struct lock *lk, int pri, const char *wmesg, int timo, int flags)
 
 	lk->lk_lock = LK_UNLOCKED;
 	lk->lk_recurse = 0;
+	lk->lk_exslpfail = 0;
 	lk->lk_timo = timo;
 	lk->lk_pri = pri;
 	lock_init(&lk->lock_object, &lock_class_lockmgr, wmesg, NULL, iflags);
@@ -365,6 +390,7 @@ lockdestroy(struct lock *lk)
 
 	KASSERT(lk->lk_lock == LK_UNLOCKED, ("lockmgr still held"));
 	KASSERT(lk->lk_recurse == 0, ("lockmgr still recursed"));
+	KASSERT(lk->lk_exslpfail == 0, ("lockmgr still exclusive waiters"));
 	lock_destroy(&lk->lock_object);
 }
 
@@ -376,7 +402,7 @@ __lockmgr_args(struct lock *lk, u_int flags, struct lock_object *ilk,
 	struct lock_class *class;
 	const char *iwmesg;
 	uintptr_t tid, v, x;
-	u_int op;
+	u_int op, realexslp;
 	int error, ipri, itimo, queue, wakeup_swapper;
 #ifdef LOCK_PROFILING
 	uint64_t waittime = 0;
@@ -906,14 +932,34 @@ __lockmgr_args(struct lock *lk, u_int flags, struct lock_object *ilk,
 		 	 * If the lock has exclusive waiters, give them
 			 * preference in order to avoid deadlock with
 			 * shared runners up.
+			 * If interruptible sleeps left the exclusive queue
+			 * empty avoid a starvation for the threads sleeping
+			 * on the shared queue by giving them precedence
+			 * and cleaning up the exclusive waiters bit anyway.
 			 */
 			MPASS((x & LK_EXCLUSIVE_SPINNERS) == 0);
-			if (x & LK_EXCLUSIVE_WAITERS) {
-				queue = SQ_EXCLUSIVE_QUEUE;
-				v |= (x & LK_SHARED_WAITERS);
+			realexslp = sleepq_sleepcnt(&lk->lock_object,
+			    SQ_EXCLUSIVE_QUEUE);
+			if ((x & LK_EXCLUSIVE_WAITERS) != 0 && realexslp != 0) {
+				if (lk->lk_exslpfail < realexslp) {
+					lk->lk_exslpfail = 0;
+					queue = SQ_EXCLUSIVE_QUEUE;
+					v |= (x & LK_SHARED_WAITERS);
+				} else {
+					lk->lk_exslpfail = 0;
+					LOCK_LOG2(lk,
+					"%s: %p has only LK_SLEEPFAIL sleepers",
+					    __func__, lk);
+					LOCK_LOG2(lk,
+			"%s: %p waking up threads on the exclusive queue",
+					    __func__, lk);
+					wakeup_swapper =
+					    sleepq_broadcast(&lk->lock_object,
+					    SLEEPQ_LK, 0, SQ_EXCLUSIVE_QUEUE);
+					queue = SQ_SHARED_QUEUE;
+				}
 			} else {
-				MPASS((x & LK_ALL_WAITERS) ==
-				    LK_SHARED_WAITERS);
+				MPASS(lk->lk_exslpfail == 0);
 				queue = SQ_SHARED_QUEUE;
 			}
 
@@ -922,7 +968,7 @@ __lockmgr_args(struct lock *lk, u_int flags, struct lock_object *ilk,
 			    __func__, lk, queue == SQ_SHARED_QUEUE ? "shared" :
 			    "exclusive");
 			atomic_store_rel_ptr(&lk->lk_lock, v);
-			wakeup_swapper = sleepq_broadcast(&lk->lock_object,
+			wakeup_swapper |= sleepq_broadcast(&lk->lock_object,
 			    SLEEPQ_LK, 0, queue);
 			sleepq_release(&lk->lock_object);
 			break;
@@ -979,14 +1025,47 @@ __lockmgr_args(struct lock *lk, u_int flags, struct lock_object *ilk,
 			v = x & (LK_ALL_WAITERS | LK_EXCLUSIVE_SPINNERS);
 			if ((x & ~v) == LK_UNLOCKED) {
 				v = (x & ~LK_EXCLUSIVE_SPINNERS);
+
+				/*
+				 * If interruptible sleeps left the exclusive
+				 * queue empty avoid a starvation for the
+				 * threads sleeping on the shared queue by
+				 * giving them precedence and cleaning up the
+				 * exclusive waiters bit anyway.
+				 */
 				if (v & LK_EXCLUSIVE_WAITERS) {
 					queue = SQ_EXCLUSIVE_QUEUE;
 					v &= ~LK_EXCLUSIVE_WAITERS;
 				} else {
 					MPASS(v & LK_SHARED_WAITERS);
+					MPASS(lk->lk_exslpfail == 0);
 					queue = SQ_SHARED_QUEUE;
 					v &= ~LK_SHARED_WAITERS;
 				}
+				if (queue == SQ_EXCLUSIVE_QUEUE) {
+					realexslp =
+					    sleepq_sleepcnt(&lk->lock_object,
+					    SQ_EXCLUSIVE_QUEUE);
+					if (lk->lk_exslpfail >= realexslp) {
+						lk->lk_exslpfail = 0;
+						queue = SQ_SHARED_QUEUE;
+						v &= ~LK_SHARED_WAITERS;
+						if (realexslp != 0) {
+							LOCK_LOG2(lk,
+					"%s: %p has only LK_SLEEPFAIL sleepers",
+							    __func__, lk);
+							LOCK_LOG2(lk,
+			"%s: %p waking up threads on the exclusive queue",
+							    __func__, lk);
+							wakeup_swapper =
+							    sleepq_broadcast(
+							    &lk->lock_object,
+							    SLEEPQ_LK, 0,
+							    SQ_EXCLUSIVE_QUEUE);
+						}
+					} else
+						lk->lk_exslpfail = 0;
+				}
 				if (!atomic_cmpset_ptr(&lk->lk_lock, x, v)) {
 					sleepq_release(&lk->lock_object);
 					continue;
diff --git a/sys/kern/kern_proc.c b/sys/kern/kern_proc.c
index f931245fda4..eaf13f2965d 100644
--- a/sys/kern/kern_proc.c
+++ b/sys/kern/kern_proc.c
@@ -140,7 +140,6 @@ struct sx allproc_lock;
 struct sx proctree_lock;
 struct mtx ppeers_lock;
 uma_zone_t proc_zone;
-uma_zone_t ithread_zone;
 
 int kstack_pages = KSTACK_PAGES;
 SYSCTL_INT(_kern, OID_AUTO, kstack_pages, CTLFLAG_RD, &kstack_pages, 0, "");
@@ -358,6 +357,7 @@ enterpgrp(p, pgid, pgrp, sess)
 		sess->s_sid = p->p_pid;
 		refcount_init(&sess->s_count, 1);
 		sess->s_ttyvp = NULL;
+		sess->s_ttydp = NULL;
 		sess->s_ttyp = NULL;
 		bcopy(p->p_session->s_login, sess->s_login,
 			    sizeof(sess->s_login));
diff --git a/sys/kern/kern_rmlock.c b/sys/kern/kern_rmlock.c
index b56de666a32..a6a622e141f 100644
--- a/sys/kern/kern_rmlock.c
+++ b/sys/kern/kern_rmlock.c
@@ -128,9 +128,9 @@ static struct mtx rm_spinlock;
 MTX_SYSINIT(rm_spinlock, &rm_spinlock, "rm_spinlock", MTX_SPIN);
 
 /*
- * Add or remove tracker from per cpu list.
+ * Add or remove tracker from per-cpu list.
  *
- * The per cpu list can be traversed at any time in forward direction from an
+ * The per-cpu list can be traversed at any time in forward direction from an
  * interrupt on the *local* cpu.
  */
 static void inline
@@ -147,7 +147,7 @@ rm_tracker_add(struct pcpu *pc, struct rm_priotracker *tracker)
 	next->rmq_prev = &tracker->rmp_cpuQueue;
 
 	/* Update pointer to first element. */
-	pc->pc_rm_queue.rmq_next =  &tracker->rmp_cpuQueue;
+	pc->pc_rm_queue.rmq_next = &tracker->rmp_cpuQueue;
 }
 
 static void inline
@@ -257,7 +257,7 @@ _rm_rlock_hard(struct rmlock *rm, struct rm_priotracker *tracker)
 		return;
 	}
 
-	/* Remove our tracker from the per cpu list. */
+	/* Remove our tracker from the per-cpu list. */
 	rm_tracker_remove(pc, tracker);
 
 	/* Check to see if the IPI granted us the lock after all. */
@@ -274,11 +274,11 @@ _rm_rlock_hard(struct rmlock *rm, struct rm_priotracker *tracker)
 	 */
 	if ((rm->lock_object.lo_flags & LO_RECURSABLE) != 0) {
 		/*
-		 * Just grand the lock if this thread already have a tracker
-		 * for this lock on the per cpu queue.
+		 * Just grant the lock if this thread already has a tracker
+		 * for this lock on the per-cpu queue.
 		 */
 		for (queue = pc->pc_rm_queue.rmq_next;
-		    queue !=  &pc->pc_rm_queue; queue = queue->rmq_next) {
+		    queue != &pc->pc_rm_queue; queue = queue->rmq_next) {
 			atracker = (struct rm_priotracker *)queue;
 			if ((atracker->rmp_rmlock == rm) &&
 			    (atracker->rmp_thread == tracker->rmp_thread)) {
@@ -337,7 +337,7 @@ _rm_rlock(struct rmlock *rm, struct rm_priotracker *tracker)
 	 * Fast path to combine two common conditions into a single
 	 * conditional jump.
 	 */
-	if (0 == (td->td_owepreempt |  rm->rm_noreadtoken))
+	if (0 == (td->td_owepreempt | rm->rm_noreadtoken))
 		return;
 
 	/* We do not have a read token and need to acquire one. */
@@ -413,7 +413,7 @@ _rm_wlock(struct rmlock *rm)
 		 * before rm_cleanIPI is called.
 		 */
 #ifdef SMP
-   		smp_rendezvous(smp_no_rendevous_barrier,
+		smp_rendezvous(smp_no_rendevous_barrier,
 		    rm_cleanIPI,
 		    smp_no_rendevous_barrier,
 		    rm);
@@ -487,7 +487,7 @@ _rm_rlock_debug(struct rmlock *rm, struct rm_priotracker *tracker,
 }
 
 void
-_rm_runlock_debug(struct rmlock *rm,  struct rm_priotracker *tracker,
+_rm_runlock_debug(struct rmlock *rm, struct rm_priotracker *tracker,
     const char *file, int line)
 {
 
@@ -526,7 +526,7 @@ _rm_rlock_debug(struct rmlock *rm, struct rm_priotracker *tracker,
 }
 
 void
-_rm_runlock_debug(struct rmlock *rm,  struct rm_priotracker *tracker,
+_rm_runlock_debug(struct rmlock *rm, struct rm_priotracker *tracker,
     const char *file, int line)
 {
 
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 412e00db618..1c21bc52ead 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -99,7 +99,8 @@ SDT_PROBE_ARGTYPE(proc, kernel, , signal_discard, 2, "int");
 
 static int	coredump(struct thread *);
 static char	*expand_name(const char *, uid_t, pid_t);
-static int	killpg1(struct thread *td, int sig, int pgid, int all);
+static int	killpg1(struct thread *td, int sig, int pgid, int all,
+		    ksiginfo_t *ksi);
 static int	issignal(struct thread *td, int stop_allowed);
 static int	sigprop(int sig);
 static void	tdsigwakeup(struct thread *, int, sig_t, int);
@@ -381,7 +382,8 @@ sigqueue_add(sigqueue_t *sq, int signo, ksiginfo_t *si)
 		ksi->ksi_sigq = sq;
 	}
 
-	if ((si->ksi_flags & KSI_TRAP) != 0) {
+	if ((si->ksi_flags & KSI_TRAP) != 0 ||
+	    (si->ksi_flags & KSI_SIGQ) == 0) {
 		if (ret != 0)
 			SIGADDSET(sq->sq_kill, signo);
 		ret = 0;
@@ -1611,11 +1613,9 @@ kern_sigaltstack(struct thread *td, stack_t *ss, stack_t *oss)
  * cp is calling process.
  */
 static int
-killpg1(td, sig, pgid, all)
-	register struct thread *td;
-	int sig, pgid, all;
+killpg1(struct thread *td, int sig, int pgid, int all, ksiginfo_t *ksi)
 {
-	register struct proc *p;
+	struct proc *p;
 	struct pgrp *pgrp;
 	int nfound = 0;
 
@@ -1634,7 +1634,7 @@ killpg1(td, sig, pgid, all)
 			if (p_cansignal(td, p, sig) == 0) {
 				nfound++;
 				if (sig)
-					psignal(p, sig);
+					pksignal(p, sig, ksi);
 			}
 			PROC_UNLOCK(p);
 		}
@@ -1665,7 +1665,7 @@ killpg1(td, sig, pgid, all)
 			if (p_cansignal(td, p, sig) == 0) {
 				nfound++;
 				if (sig)
-					psignal(p, sig);
+					pksignal(p, sig, ksi);
 			}
 			PROC_UNLOCK(p);
 		}
@@ -1682,11 +1682,10 @@ struct kill_args {
 #endif
 /* ARGSUSED */
 int
-kill(td, uap)
-	register struct thread *td;
-	register struct kill_args *uap;
+kill(struct thread *td, struct kill_args *uap)
 {
-	register struct proc *p;
+	ksiginfo_t ksi;
+	struct proc *p;
 	int error;
 
 	AUDIT_ARG_SIGNUM(uap->signum);
@@ -1694,6 +1693,12 @@ kill(td, uap)
 	if ((u_int)uap->signum > _SIG_MAXSIG)
 		return (EINVAL);
 
+	ksiginfo_init(&ksi);
+	ksi.ksi_signo = uap->signum;
+	ksi.ksi_code = SI_USER;
+	ksi.ksi_pid = td->td_proc->p_pid;
+	ksi.ksi_uid = td->td_ucred->cr_ruid;
+
 	if (uap->pid > 0) {
 		/* kill single process */
 		if ((p = pfind(uap->pid)) == NULL) {
@@ -1703,17 +1708,17 @@ kill(td, uap)
 		AUDIT_ARG_PROCESS(p);
 		error = p_cansignal(td, p, uap->signum);
 		if (error == 0 && uap->signum)
-			psignal(p, uap->signum);
+			pksignal(p, uap->signum, &ksi);
 		PROC_UNLOCK(p);
 		return (error);
 	}
 	switch (uap->pid) {
 	case -1:		/* broadcast signal */
-		return (killpg1(td, uap->signum, 0, 1));
+		return (killpg1(td, uap->signum, 0, 1, &ksi));
 	case 0:			/* signal own process group */
-		return (killpg1(td, uap->signum, 0, 0));
+		return (killpg1(td, uap->signum, 0, 0, &ksi));
 	default:		/* negative explicit process group */
-		return (killpg1(td, uap->signum, -uap->pid, 0));
+		return (killpg1(td, uap->signum, -uap->pid, 0, &ksi));
 	}
 	/* NOTREACHED */
 }
@@ -1727,17 +1732,21 @@ struct okillpg_args {
 #endif
 /* ARGSUSED */
 int
-okillpg(td, uap)
-	struct thread *td;
-	register struct okillpg_args *uap;
+okillpg(struct thread *td, struct okillpg_args *uap)
 {
+	ksiginfo_t ksi;
 
 	AUDIT_ARG_SIGNUM(uap->signum);
 	AUDIT_ARG_PID(uap->pgid);
 	if ((u_int)uap->signum > _SIG_MAXSIG)
 		return (EINVAL);
 
-	return (killpg1(td, uap->signum, uap->pgid, 0));
+	ksiginfo_init(&ksi);
+	ksi.ksi_signo = uap->signum;
+	ksi.ksi_code = SI_USER;
+	ksi.ksi_pid = td->td_proc->p_pid;
+	ksi.ksi_uid = td->td_ucred->cr_ruid;
+	return (killpg1(td, uap->signum, uap->pgid, 0, &ksi));
 }
 #endif /* COMPAT_43 */
 
@@ -1772,6 +1781,7 @@ sigqueue(struct thread *td, struct sigqueue_args *uap)
 	error = p_cansignal(td, p, uap->signum);
 	if (error == 0 && uap->signum != 0) {
 		ksiginfo_init(&ksi);
+		ksi.ksi_flags = KSI_SIGQ;
 		ksi.ksi_signo = uap->signum;
 		ksi.ksi_code = SI_QUEUE;
 		ksi.ksi_pid = td->td_proc->p_pid;
@@ -1787,8 +1797,7 @@ sigqueue(struct thread *td, struct sigqueue_args *uap)
  * Send a signal to a process group.
  */
 void
-gsignal(pgid, sig)
-	int pgid, sig;
+gsignal(int pgid, int sig, ksiginfo_t *ksi)
 {
 	struct pgrp *pgrp;
 
@@ -1797,7 +1806,7 @@ gsignal(pgid, sig)
 		pgrp = pgfind(pgid);
 		sx_sunlock(&proctree_lock);
 		if (pgrp != NULL) {
-			pgsignal(pgrp, sig, 0);
+			pgsignal(pgrp, sig, 0, ksi);
 			PGRP_UNLOCK(pgrp);
 		}
 	}
@@ -1808,18 +1817,16 @@ gsignal(pgid, sig)
  * limit to members which have a controlling terminal.
  */
 void
-pgsignal(pgrp, sig, checkctty)
-	struct pgrp *pgrp;
-	int sig, checkctty;
+pgsignal(struct pgrp *pgrp, int sig, int checkctty, ksiginfo_t *ksi)
 {
-	register struct proc *p;
+	struct proc *p;
 
 	if (pgrp) {
 		PGRP_LOCK_ASSERT(pgrp, MA_OWNED);
 		LIST_FOREACH(p, &pgrp->pg_members, p_pglist) {
 			PROC_LOCK(p);
 			if (checkctty == 0 || p->p_flag & P_CONTROLT)
-				psignal(p, sig);
+				pksignal(p, sig, ksi);
 			PROC_UNLOCK(p);
 		}
 	}
@@ -1940,7 +1947,19 @@ sigtd(struct proc *p, int sig, int prop)
 void
 psignal(struct proc *p, int sig)
 {
-	(void) tdsignal(p, NULL, sig, NULL);
+	ksiginfo_t ksi;
+
+	ksiginfo_init(&ksi);
+	ksi.ksi_signo = sig;
+	ksi.ksi_code = SI_KERNEL;
+	(void) tdsignal(p, NULL, sig, &ksi);
+}
+
+void
+pksignal(struct proc *p, int sig, ksiginfo_t *ksi)
+{
+
+	(void) tdsignal(p, NULL, sig, ksi);
 }
 
 int
@@ -2473,7 +2492,7 @@ issignal(struct thread *td, int stop_allowed)
 	struct sigacts *ps;
 	struct sigqueue *queue;
 	sigset_t sigpending;
-	int sig, prop, newsig, signo;
+	int sig, prop, newsig;
 
 	p = td->td_proc;
 	ps = p->p_sigacts;
@@ -2526,8 +2545,7 @@ issignal(struct thread *td, int stop_allowed)
 				 */
 				if (sigqueue_get(queue, sig, &ksi) == 0) {
 					queue = &p->p_sigqueue;
-					signo = sigqueue_get(queue, sig, &ksi);
-					KASSERT(signo == sig, ("signo != sig"));
+					sigqueue_get(queue, sig, &ksi);
 				}
 
 				/*
@@ -3143,8 +3161,13 @@ pgsigio(sigiop, sig, checkctty)
 	struct sigio **sigiop;
 	int sig, checkctty;
 {
+	ksiginfo_t ksi;
 	struct sigio *sigio;
 
+	ksiginfo_init(&ksi);
+	ksi.ksi_signo = sig;
+	ksi.ksi_code = SI_KERNEL;
+
 	SIGIO_LOCK();
 	sigio = *sigiop;
 	if (sigio == NULL) {
diff --git a/sys/kern/kern_sx.c b/sys/kern/kern_sx.c
index 2d777a280be..37e5d032af9 100644
--- a/sys/kern/kern_sx.c
+++ b/sys/kern/kern_sx.c
@@ -705,8 +705,12 @@ _sx_xunlock_hard(struct sx *sx, uintptr_t tid, const char *file, int line)
 	 * ideal.  It gives precedence to shared waiters if they are
 	 * present.  For this condition, we have to preserve the
 	 * state of the exclusive waiters flag.
+	 * If interruptible sleeps left the shared queue empty avoid a
+	 * starvation for the threads sleeping on the exclusive queue by giving
+	 * them precedence and cleaning up the shared waiters bit anyway.
 	 */
-	if (sx->sx_lock & SX_LOCK_SHARED_WAITERS) {
+	if ((sx->sx_lock & SX_LOCK_SHARED_WAITERS) != 0 &&
+	    sleepq_sleepcnt(&sx->lock_object, SQ_SHARED_QUEUE) != 0) {
 		queue = SQ_SHARED_QUEUE;
 		x |= (sx->sx_lock & SX_LOCK_EXCLUSIVE_WAITERS);
 	} else
diff --git a/sys/kern/kern_timeout.c b/sys/kern/kern_timeout.c
index 3ce5069db22..c38888a5f89 100644
--- a/sys/kern/kern_timeout.c
+++ b/sys/kern/kern_timeout.c
@@ -82,6 +82,23 @@ SYSCTL_INT(_debug, OID_AUTO, to_avg_mpcalls, CTLFLAG_RD, &avg_mpcalls, 0,
  */
 int callwheelsize, callwheelbits, callwheelmask;
 
+/*
+ * There is one struct callout_cpu per cpu, holding all relevant
+ * state for the callout processing thread on the individual CPU.
+ * In particular:
+ *	cc_ticks is incremented once per tick in callout_cpu().
+ *	It tracks the global 'ticks' but in a way that the individual
+ *	threads should not worry about races in the order in which
+ *	hardclock() and hardclock_cpu() run on the various CPUs.
+ *	cc_softclock is advanced in callout_cpu() to point to the
+ *	first entry in cc_callwheel that may need handling. In turn,
+ *	a softclock() is scheduled so it can serve the various entries i
+ *	such that cc_softclock <= i <= cc_ticks .
+ *	XXX maybe cc_softclock and cc_ticks should be volatile ?
+ *
+ *	cc_ticks is also used in callout_reset_cpu() to determine
+ *	when the callout should be served.
+ */
 struct callout_cpu {
 	struct mtx		cc_lock;
 	struct callout		*cc_callout;
@@ -90,6 +107,7 @@ struct callout_cpu {
 	struct callout		*cc_next;
 	struct callout		*cc_curr;
 	void			*cc_cookie;
+	int 			cc_ticks;
 	int 			cc_softticks;
 	int			cc_cancel;
 	int			cc_waiting;
@@ -244,7 +262,8 @@ callout_tick(void)
 	need_softclock = 0;
 	cc = CC_SELF();
 	mtx_lock_spin_flags(&cc->cc_lock, MTX_QUIET);
-	for (; (cc->cc_softticks - ticks) <= 0; cc->cc_softticks++) {
+	cc->cc_ticks++;
+	for (; (cc->cc_softticks - cc->cc_ticks) <= 0; cc->cc_softticks++) {
 		bucket = cc->cc_softticks & callwheelmask;
 		if (!TAILQ_EMPTY(&cc->cc_callwheel[bucket])) {
 			need_softclock = 1;
@@ -323,7 +342,7 @@ softclock(void *arg)
 	steps = 0;
 	cc = (struct callout_cpu *)arg;
 	CC_LOCK(cc);
-	while (cc->cc_softticks - 1 != ticks) {
+	while (cc->cc_softticks - 1 != cc->cc_ticks) {
 		/*
 		 * cc_softticks may be modified by hard clock, so cache
 		 * it while we work on a given bucket.
@@ -622,7 +641,7 @@ retry:
 	c->c_arg = arg;
 	c->c_flags |= (CALLOUT_ACTIVE | CALLOUT_PENDING);
 	c->c_func = ftn;
-	c->c_time = ticks + to_ticks;
+	c->c_time = cc->cc_ticks + to_ticks;
 	TAILQ_INSERT_TAIL(&cc->cc_callwheel[c->c_time & callwheelmask], 
 			  c, c_links.tqe);
 	CTR5(KTR_CALLOUT, "%sscheduled %p func %p arg %p in %d",
diff --git a/sys/kern/kern_umtx.c b/sys/kern/kern_umtx.c
index 2ab099d758f..2e2af2bc1cc 100644
--- a/sys/kern/kern_umtx.c
+++ b/sys/kern/kern_umtx.c
@@ -2759,6 +2759,110 @@ out:
 	return (error);
 }
 
+static int
+do_sem_wait(struct thread *td, struct _usem *sem, struct timespec *timeout)
+{
+	struct umtx_q *uq;
+	struct timeval tv;
+	struct timespec cts, ets, tts;
+	uint32_t flags, count;
+	int error;
+
+	uq = td->td_umtxq;
+	flags = fuword32(&sem->_flags);
+	error = umtx_key_get(sem, TYPE_CV, GET_SHARE(flags), &uq->uq_key);
+	if (error != 0)
+		return (error);
+	umtxq_lock(&uq->uq_key);
+	umtxq_busy(&uq->uq_key);
+	umtxq_insert(uq);
+	umtxq_unlock(&uq->uq_key);
+
+	count = fuword32(__DEVOLATILE(uint32_t *, &sem->_count));
+	if (count != 0) {
+		umtxq_lock(&uq->uq_key);
+		umtxq_unbusy(&uq->uq_key);
+		umtxq_remove(uq);
+		umtxq_unlock(&uq->uq_key);
+		umtx_key_release(&uq->uq_key);
+		return (0);
+	}
+
+	/*
+	 * The magic thing is we should set c_has_waiters to 1 before
+	 * releasing user mutex.
+	 */
+	suword32(__DEVOLATILE(uint32_t *, &sem->_has_waiters), 1);
+
+	umtxq_lock(&uq->uq_key);
+	umtxq_unbusy(&uq->uq_key);
+	umtxq_unlock(&uq->uq_key);
+
+	umtxq_lock(&uq->uq_key);
+	if (timeout == NULL) {
+		error = umtxq_sleep(uq, "usem", 0);
+	} else {
+		getnanouptime(&ets);
+		timespecadd(&ets, timeout);
+		TIMESPEC_TO_TIMEVAL(&tv, timeout);
+		for (;;) {
+			error = umtxq_sleep(uq, "usem", tvtohz(&tv));
+			if (error != ETIMEDOUT)
+				break;
+			getnanouptime(&cts);
+			if (timespeccmp(&cts, &ets, >=)) {
+				error = ETIMEDOUT;
+				break;
+			}
+			tts = ets;
+			timespecsub(&tts, &cts);
+			TIMESPEC_TO_TIMEVAL(&tv, &tts);
+		}
+	}
+
+	if (error != 0) {
+		if ((uq->uq_flags & UQF_UMTXQ) == 0) {
+			if (!umtxq_signal(&uq->uq_key, 1))
+				error = 0;
+		}
+		if (error == ERESTART)
+			error = EINTR;
+	}
+	umtxq_remove(uq);
+	umtxq_unlock(&uq->uq_key);
+	umtx_key_release(&uq->uq_key);
+	return (error);
+}
+
+/*
+ * Signal a userland condition variable.
+ */
+static int
+do_sem_wake(struct thread *td, struct _usem *sem)
+{
+	struct umtx_key key;
+	int error, cnt, nwake;
+	uint32_t flags;
+
+	flags = fuword32(&sem->_flags);
+	if ((error = umtx_key_get(sem, TYPE_CV, GET_SHARE(flags), &key)) != 0)
+		return (error);	
+	umtxq_lock(&key);
+	umtxq_busy(&key);
+	cnt = umtxq_count(&key);
+	nwake = umtxq_signal(&key, 1);
+	if (cnt <= nwake) {
+		umtxq_unlock(&key);
+		error = suword32(
+		    __DEVOLATILE(uint32_t *, &sem->_has_waiters), 0);
+		umtxq_lock(&key);
+	}
+	umtxq_unbusy(&key);
+	umtxq_unlock(&key);
+	umtx_key_release(&key);
+	return (error);
+}
+
 int
 _umtx_lock(struct thread *td, struct _umtx_lock_args *uap)
     /* struct umtx *umtx */
@@ -3031,6 +3135,35 @@ __umtx_op_rw_unlock(struct thread *td, struct _umtx_op_args *uap)
 	return do_rw_unlock(td, uap->obj);
 }
 
+static int
+__umtx_op_sem_wait(struct thread *td, struct _umtx_op_args *uap)
+{
+	struct timespec *ts, timeout;
+	int error;
+
+	/* Allow a null timespec (wait forever). */
+	if (uap->uaddr2 == NULL)
+		ts = NULL;
+	else {
+		error = copyin(uap->uaddr2, &timeout,
+		    sizeof(timeout));
+		if (error != 0)
+			return (error);
+		if (timeout.tv_nsec >= 1000000000 ||
+		    timeout.tv_nsec < 0) {
+			return (EINVAL);
+		}
+		ts = &timeout;
+	}
+	return (do_sem_wait(td, uap->obj, ts));
+}
+
+static int
+__umtx_op_sem_wake(struct thread *td, struct _umtx_op_args *uap)
+{
+	return do_sem_wake(td, uap->obj);
+}
+
 typedef int (*_umtx_op_func)(struct thread *td, struct _umtx_op_args *uap);
 
 static _umtx_op_func op_table[] = {
@@ -3052,7 +3185,9 @@ static _umtx_op_func op_table[] = {
 	__umtx_op_wait_uint_private,	/* UMTX_OP_WAIT_UINT_PRIVATE */
 	__umtx_op_wake_private,		/* UMTX_OP_WAKE_PRIVATE */
 	__umtx_op_wait_umutex,		/* UMTX_OP_UMUTEX_WAIT */
-	__umtx_op_wake_umutex		/* UMTX_OP_UMUTEX_WAKE */
+	__umtx_op_wake_umutex,		/* UMTX_OP_UMUTEX_WAKE */
+	__umtx_op_sem_wait,		/* UMTX_OP_SEM_WAIT */
+	__umtx_op_sem_wake		/* UMTX_OP_SEM_WAKE */
 };
 
 int
@@ -3274,6 +3409,27 @@ __umtx_op_wait_uint_private_compat32(struct thread *td, struct _umtx_op_args *ua
 	return do_wait(td, uap->obj, uap->val, ts, 1, 1);
 }
 
+static int
+__umtx_op_sem_wait_compat32(struct thread *td, struct _umtx_op_args *uap)
+{
+	struct timespec *ts, timeout;
+	int error;
+
+	/* Allow a null timespec (wait forever). */
+	if (uap->uaddr2 == NULL)
+		ts = NULL;
+	else {
+		error = copyin_timeout32(uap->uaddr2, &timeout);
+		if (error != 0)
+			return (error);
+		if (timeout.tv_nsec >= 1000000000 ||
+		    timeout.tv_nsec < 0)
+			return (EINVAL);
+		ts = &timeout;
+	}
+	return (do_sem_wait(td, uap->obj, ts));
+}
+
 static _umtx_op_func op_table_compat32[] = {
 	__umtx_op_lock_umtx_compat32,	/* UMTX_OP_LOCK */
 	__umtx_op_unlock_umtx_compat32,	/* UMTX_OP_UNLOCK */
@@ -3293,7 +3449,9 @@ static _umtx_op_func op_table_compat32[] = {
 	__umtx_op_wait_uint_private_compat32,	/* UMTX_OP_WAIT_UINT_PRIVATE */
 	__umtx_op_wake_private,		/* UMTX_OP_WAKE_PRIVATE */
 	__umtx_op_wait_umutex_compat32, /* UMTX_OP_UMUTEX_WAIT */
-	__umtx_op_wake_umutex		/* UMTX_OP_UMUTEX_WAKE */
+	__umtx_op_wake_umutex,		/* UMTX_OP_UMUTEX_WAKE */
+	__umtx_op_sem_wait_compat32,	/* UMTX_OP_SEM_WAIT */
+	__umtx_op_sem_wake		/* UMTX_OP_SEM_WAKE */
 };
 
 int
diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c
index e13cffc70d9..c0019a91270 100644
--- a/sys/kern/sched_4bsd.c
+++ b/sys/kern/sched_4bsd.c
@@ -913,7 +913,7 @@ sched_sleep(struct thread *td, int pri)
 	td->td_sched->ts_slptime = 0;
 	if (pri)
 		sched_prio(td, pri);
-	if (TD_IS_SUSPENDED(td) || pri <= PSOCK)
+	if (TD_IS_SUSPENDED(td) || pri >= PSOCK)
 		td->td_flags |= TDF_CANSWAP;
 }
 
diff --git a/sys/kern/sched_ule.c b/sys/kern/sched_ule.c
index 1ebfda2da3c..43c9a867ab0 100644
--- a/sys/kern/sched_ule.c
+++ b/sys/kern/sched_ule.c
@@ -103,6 +103,7 @@ struct td_sched {
 	u_int		ts_slptime;	/* Number of ticks we vol. slept */
 	u_int		ts_runtime;	/* Number of ticks we were running */
 	int		ts_ltick;	/* Last tick that we were running on */
+	int		ts_incrtick;	/* Last tick that we incremented on */
 	int		ts_ftick;	/* First tick that we were running on */
 	int		ts_ticks;	/* Tick count */
 #ifdef KTR
@@ -773,7 +774,7 @@ sched_balance_group(struct cpu_group *cg)
 }
 
 static void
-sched_balance()
+sched_balance(void)
 {
 	struct tdq *tdq;
 
@@ -1908,7 +1909,7 @@ sched_sleep(struct thread *td, int prio)
 	THREAD_LOCK_ASSERT(td, MA_OWNED);
 
 	td->td_slptick = ticks;
-	if (TD_IS_SUSPENDED(td) || prio <= PSOCK)
+	if (TD_IS_SUSPENDED(td) || prio >= PSOCK)
 		td->td_flags |= TDF_CANSWAP;
 	if (static_boost == 1 && prio)
 		sched_prio(td, prio);
@@ -1991,6 +1992,7 @@ sched_fork_thread(struct thread *td, struct thread *child)
 	 */
 	ts2->ts_ticks = ts->ts_ticks;
 	ts2->ts_ltick = ts->ts_ltick;
+	ts2->ts_incrtick = ts->ts_incrtick;
 	ts2->ts_ftick = ts->ts_ftick;
 	child->td_user_pri = td->td_user_pri;
 	child->td_base_user_pri = td->td_base_user_pri;
@@ -2182,11 +2184,12 @@ sched_tick(void)
 	 * Ticks is updated asynchronously on a single cpu.  Check here to
 	 * avoid incrementing ts_ticks multiple times in a single tick.
 	 */
-	if (ts->ts_ltick == ticks)
+	if (ts->ts_incrtick == ticks)
 		return;
 	/* Adjust ticks for pctcpu */
 	ts->ts_ticks += 1 << SCHED_TICK_SHIFT;
 	ts->ts_ltick = ticks;
+	ts->ts_incrtick = ticks;
 	/*
 	 * Update if we've exceeded our desired tick threshhold by over one
 	 * second.
diff --git a/sys/kern/subr_acl_nfs4.c b/sys/kern/subr_acl_nfs4.c
index c3f4b65cbd5..1a015772588 100644
--- a/sys/kern/subr_acl_nfs4.c
+++ b/sys/kern/subr_acl_nfs4.c
@@ -82,6 +82,13 @@ _access_mask_from_accmode(accmode_t accmode)
 			access_mask |= accmode2mask[i].mask;
 	}
 
+	/*
+	 * VAPPEND is just a modifier for VWRITE; if the caller asked
+	 * for 'VAPPEND | VWRITE', we want to check for ACL_APPEND_DATA only.
+	 */
+	if (access_mask & ACL_APPEND_DATA)
+		access_mask &= ~ACL_WRITE_DATA;
+
 	return (access_mask);
 }
 
@@ -156,6 +163,14 @@ vaccess_acl_nfs4(enum vtype type, uid_t file_uid, gid_t file_gid,
 	int denied, explicitly_denied, access_mask, is_directory,
 	    must_be_owner = 0;
 
+	KASSERT((accmode & ~(VEXEC | VWRITE | VREAD | VADMIN | VAPPEND |
+	    VEXPLICIT_DENY | VREAD_NAMED_ATTRS | VWRITE_NAMED_ATTRS |
+	    VDELETE_CHILD | VREAD_ATTRIBUTES | VWRITE_ATTRIBUTES | VDELETE |
+	    VREAD_ACL | VWRITE_ACL | VWRITE_OWNER | VSYNCHRONIZE)) == 0,
+	    ("invalid bit in accmode"));
+	KASSERT((accmode & VAPPEND) == 0 || (accmode & VWRITE),
+	    	("VAPPEND without VWRITE"));
+
 	if (privused != NULL)
 		*privused = 0;
 
@@ -970,7 +985,7 @@ _acls_are_equal(const struct acl *a, const struct acl *b)
 }
 
 /*
- * This routine is used to determine whether to remove entry_type attribute
+ * This routine is used to determine whether to remove extended attribute
  * that stores ACL contents.
  */
 int
@@ -989,9 +1004,8 @@ acl_nfs4_is_trivial(const struct acl *aclp, int file_owner_id)
 	 *
 	 * XXX: I guess there is a faster way to do this.  However, even
 	 *      this slow implementation significantly speeds things up
-	 *      for files that don't have any entry_type ACL entries - it's
-	 *      critical for performance to not use EA when they are not
-	 *      needed.
+	 *      for files that don't have non-trivial ACLs - it's critical
+	 *      for performance to not use EA when they are not needed.
 	 */
 	tmpaclp = acl_alloc(M_WAITOK | M_ZERO);
 	acl_nfs4_sync_mode_from_acl(&tmpmode, aclp);
diff --git a/sys/kern/subr_acl_posix1e.c b/sys/kern/subr_acl_posix1e.c
index 9690580e3d8..600067c279a 100644
--- a/sys/kern/subr_acl_posix1e.c
+++ b/sys/kern/subr_acl_posix1e.c
@@ -63,6 +63,8 @@ vaccess_acl_posix1e(enum vtype type, uid_t file_uid, gid_t file_gid,
 
 	KASSERT((accmode & ~(VEXEC | VWRITE | VREAD | VADMIN | VAPPEND)) == 0,
 	    ("invalid bit in accmode"));
+	KASSERT((accmode & VAPPEND) == 0 || (accmode & VWRITE),
+	    	("VAPPEND without VWRITE"));
 
 	/*
 	 * Look for a normal, non-privileged way to access the file/directory
diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c
index 0e3ef80c690..f76211baab6 100644
--- a/sys/kern/subr_bus.c
+++ b/sys/kern/subr_bus.c
@@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -1584,7 +1585,7 @@ devclass_add_device(devclass_t dc, device_t dev)
 
 	PDEBUG(("%s in devclass %s", DEVICENAME(dev), DEVCLANAME(dc)));
 
-	buflen = snprintf(NULL, 0, "%s%d$", dc->name, dev->unit);
+	buflen = snprintf(NULL, 0, "%s%d$", dc->name, INT_MAX);
 	if (buflen < 0)
 		return (ENOMEM);
 	dev->nameunit = malloc(buflen, M_BUS, M_NOWAIT|M_ZERO);
@@ -2865,6 +2866,7 @@ resource_list_add(struct resource_list *rl, int type, int rid,
 		rle->type = type;
 		rle->rid = rid;
 		rle->res = NULL;
+		rle->flags = 0;
 	}
 
 	if (rle->res)
@@ -2876,6 +2878,34 @@ resource_list_add(struct resource_list *rl, int type, int rid,
 	return (rle);
 }
 
+/**
+ * @brief Determine if a resource entry is busy.
+ *
+ * Returns true if a resource entry is busy meaning that it has an
+ * associated resource that is not an unallocated "reserved" resource.
+ *
+ * @param rl		the resource list to search
+ * @param type		the resource entry type (e.g. SYS_RES_MEMORY)
+ * @param rid		the resource identifier
+ *
+ * @returns Non-zero if the entry is busy, zero otherwise.
+ */
+int
+resource_list_busy(struct resource_list *rl, int type, int rid)
+{
+	struct resource_list_entry *rle;
+
+	rle = resource_list_find(rl, type, rid);
+	if (rle == NULL || rle->res == NULL)
+		return (0);
+	if ((rle->flags & (RLE_RESERVED | RLE_ALLOCATED)) == RLE_RESERVED) {
+		KASSERT(!(rman_get_flags(rle->res) & RF_ACTIVE),
+		    ("reserved resource is active"));
+		return (0);
+	}
+	return (1);
+}
+
 /**
  * @brief Find a resource entry by type and rid.
  *
@@ -2918,6 +2948,66 @@ resource_list_delete(struct resource_list *rl, int type, int rid)
 	}
 }
 
+/**
+ * @brief Allocate a reserved resource
+ *
+ * This can be used by busses to force the allocation of resources
+ * that are always active in the system even if they are not allocated
+ * by a driver (e.g. PCI BARs).  This function is usually called when
+ * adding a new child to the bus.  The resource is allocated from the
+ * parent bus when it is reserved.  The resource list entry is marked
+ * with RLE_RESERVED to note that it is a reserved resource.
+ *
+ * Subsequent attempts to allocate the resource with
+ * resource_list_alloc() will succeed the first time and will set
+ * RLE_ALLOCATED to note that it has been allocated.  When a reserved
+ * resource that has been allocated is released with
+ * resource_list_release() the resource RLE_ALLOCATED is cleared, but
+ * the actual resource remains allocated.  The resource can be released to
+ * the parent bus by calling resource_list_unreserve().
+ *
+ * @param rl		the resource list to allocate from
+ * @param bus		the parent device of @p child
+ * @param child		the device for which the resource is being reserved
+ * @param type		the type of resource to allocate
+ * @param rid		a pointer to the resource identifier
+ * @param start		hint at the start of the resource range - pass
+ *			@c 0UL for any start address
+ * @param end		hint at the end of the resource range - pass
+ *			@c ~0UL for any end address
+ * @param count		hint at the size of range required - pass @c 1
+ *			for any size
+ * @param flags		any extra flags to control the resource
+ *			allocation - see @c RF_XXX flags in
+ *			 for details
+ * 
+ * @returns		the resource which was allocated or @c NULL if no
+ *			resource could be allocated
+ */
+struct resource *
+resource_list_reserve(struct resource_list *rl, device_t bus, device_t child,
+    int type, int *rid, u_long start, u_long end, u_long count, u_int flags)
+{
+	struct resource_list_entry *rle = NULL;
+	int passthrough = (device_get_parent(child) != bus);
+	struct resource *r;
+
+	if (passthrough)
+		panic(
+    "resource_list_reserve() should only be called for direct children");
+	if (flags & RF_ACTIVE)
+		panic(
+    "resource_list_reserve() should only reserve inactive resources");
+
+	r = resource_list_alloc(rl, bus, child, type, rid, start, end, count,
+	    flags);
+	if (r != NULL) {
+		rle = resource_list_find(rl, type, *rid);
+		rle->flags |= RLE_RESERVED;
+	}
+	return (r);
+}
+
 /**
  * @brief Helper function for implementing BUS_ALLOC_RESOURCE()
  *
@@ -2969,8 +3059,19 @@ resource_list_alloc(struct resource_list *rl, device_t bus, device_t child,
 	if (!rle)
 		return (NULL);		/* no resource of that type/rid */
 
-	if (rle->res)
+	if (rle->res) {
+		if (rle->flags & RLE_RESERVED) {
+			if (rle->flags & RLE_ALLOCATED)
+				return (NULL);
+			if ((flags & RF_ACTIVE) &&
+			    bus_activate_resource(child, type, *rid,
+			    rle->res) != 0)
+				return (NULL);
+			rle->flags |= RLE_ALLOCATED;
+			return (rle->res);
+		}
 		panic("resource_list_alloc: resource entry is busy");
+	}
 
 	if (isdefault) {
 		start = rle->start;
@@ -3002,7 +3103,7 @@ resource_list_alloc(struct resource_list *rl, device_t bus, device_t child,
  * @param rl		the resource list which was allocated from
  * @param bus		the parent device of @p child
  * @param child		the device which is requesting a release
- * @param type		the type of resource to allocate
+ * @param type		the type of resource to release
  * @param rid		the resource identifier
  * @param res		the resource to release
  * 
@@ -3029,6 +3130,19 @@ resource_list_release(struct resource_list *rl, device_t bus, device_t child,
 		panic("resource_list_release: can't find resource");
 	if (!rle->res)
 		panic("resource_list_release: resource entry is not busy");
+	if (rle->flags & RLE_RESERVED) {
+		if (rle->flags & RLE_ALLOCATED) {
+			if (rman_get_flags(res) & RF_ACTIVE) {
+				error = bus_deactivate_resource(child, type,
+				    rid, res);
+				if (error)
+					return (error);
+			}
+			rle->flags &= ~RLE_ALLOCATED;
+			return (0);
+		}
+		return (EINVAL);
+	}
 
 	error = BUS_RELEASE_RESOURCE(device_get_parent(bus), child,
 	    type, rid, res);
@@ -3039,6 +3153,45 @@ resource_list_release(struct resource_list *rl, device_t bus, device_t child,
 	return (0);
 }
 
+/**
+ * @brief Fully release a reserved resource
+ *
+ * Fully releases a resouce reserved via resource_list_reserve().
+ *
+ * @param rl		the resource list which was allocated from
+ * @param bus		the parent device of @p child
+ * @param child		the device whose reserved resource is being released
+ * @param type		the type of resource to release
+ * @param rid		the resource identifier
+ * @param res		the resource to release
+ * 
+ * @retval 0		success
+ * @retval non-zero	a standard unix error code indicating what
+ *			error condition prevented the operation
+ */
+int
+resource_list_unreserve(struct resource_list *rl, device_t bus, device_t child,
+    int type, int rid)
+{
+	struct resource_list_entry *rle = NULL;
+	int passthrough = (device_get_parent(child) != bus);
+
+	if (passthrough)
+		panic(
+    "resource_list_unreserve() should only be called for direct children");
+
+	rle = resource_list_find(rl, type, rid);
+
+	if (!rle)
+		panic("resource_list_unreserve: can't find resource");
+	if (!(rle->flags & RLE_RESERVED))
+		return (EINVAL);
+	if (rle->flags & RLE_ALLOCATED)
+		return (EBUSY);
+	rle->flags &= ~RLE_RESERVED;
+	return (resource_list_release(rl, bus, child, type, rid, rle->res));
+}
+
 /**
  * @brief Print a description of resources in a resource list
  *
@@ -3651,6 +3804,10 @@ bus_generic_rl_release_resource(device_t dev, device_t child, int type,
 {
 	struct resource_list *		rl = NULL;
 
+	if (device_get_parent(child) != dev)
+		return (BUS_RELEASE_RESOURCE(device_get_parent(dev), child,
+		    type, rid, r));
+
 	rl = BUS_GET_RESOURCE_LIST(dev, child);
 	if (!rl)
 		return (EINVAL);
@@ -3671,6 +3828,10 @@ bus_generic_rl_alloc_resource(device_t dev, device_t child, int type,
 {
 	struct resource_list *		rl = NULL;
 
+	if (device_get_parent(child) != dev)
+		return (BUS_ALLOC_RESOURCE(device_get_parent(dev), child,
+		    type, rid, start, end, count, flags));
+
 	rl = BUS_GET_RESOURCE_LIST(dev, child);
 	if (!rl)
 		return (NULL);
diff --git a/sys/kern/subr_devstat.c b/sys/kern/subr_devstat.c
index e90df59a5a2..a214bf63992 100644
--- a/sys/kern/subr_devstat.c
+++ b/sys/kern/subr_devstat.c
@@ -449,7 +449,8 @@ static TAILQ_HEAD(, statspage)	pagelist = TAILQ_HEAD_INITIALIZER(pagelist);
 static MALLOC_DEFINE(M_DEVSTAT, "devstat", "Device statistics");
 
 static int
-devstat_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
+devstat_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nprot, vm_memattr_t *memattr)
 {
 	struct statspage *spp;
 
diff --git a/sys/kern/subr_eventhandler.c b/sys/kern/subr_eventhandler.c
index f9c8eadaf4e..37c482cbd7f 100644
--- a/sys/kern/subr_eventhandler.c
+++ b/sys/kern/subr_eventhandler.c
@@ -178,6 +178,8 @@ eventhandler_deregister(struct eventhandler_list *list, eventhandler_tag tag)
 		ep->ee_priority = EHE_DEAD_PRIORITY;
 	}
     }
+    while (list->el_runcount > 0)
+	    mtx_sleep(list, &list->el_lock, 0, "evhrm", 0);
     EHL_UNLOCK(list);
 }
 
@@ -225,16 +227,17 @@ void
 eventhandler_prune_list(struct eventhandler_list *list)
 {
     struct eventhandler_entry *ep, *en;
+    int pruned = 0;
 
     CTR2(KTR_EVH, "%s: pruning list \"%s\"", __func__, list->el_name);
     EHL_LOCK_ASSERT(list, MA_OWNED);
-    ep = TAILQ_FIRST(&list->el_entries);
-    while (ep != NULL) {
-	en = TAILQ_NEXT(ep, ee_link);
+    TAILQ_FOREACH_SAFE(ep, &list->el_entries, ee_link, en) {
 	if (ep->ee_priority == EHE_DEAD_PRIORITY) {
 	    TAILQ_REMOVE(&list->el_entries, ep, ee_link);
 	    free(ep, M_EVENTHANDLER);
+	    pruned++;
 	}
-	ep = en;
     }
+    if (pruned > 0)
+	    wakeup(list);
 }
diff --git a/sys/kern/subr_sleepqueue.c b/sys/kern/subr_sleepqueue.c
index b3ae6fddc04..a0496bdaad3 100644
--- a/sys/kern/subr_sleepqueue.c
+++ b/sys/kern/subr_sleepqueue.c
@@ -118,6 +118,7 @@ __FBSDID("$FreeBSD$");
  */
 struct sleepqueue {
 	TAILQ_HEAD(, thread) sq_blocked[NR_SLEEPQS];	/* (c) Blocked threads. */
+	u_int sq_blockedcnt[NR_SLEEPQS];	/* (c) N. of blocked threads. */
 	LIST_ENTRY(sleepqueue) sq_hash;		/* (c) Chain and free list. */
 	LIST_HEAD(, sleepqueue) sq_free;	/* (c) Free queues. */
 	void	*sq_wchan;			/* (c) Wait channel. */
@@ -306,9 +307,12 @@ sleepq_add(void *wchan, struct lock_object *lock, const char *wmesg, int flags,
 		int i;
 
 		sq = td->td_sleepqueue;
-		for (i = 0; i < NR_SLEEPQS; i++)
+		for (i = 0; i < NR_SLEEPQS; i++) {
 			KASSERT(TAILQ_EMPTY(&sq->sq_blocked[i]),
-				("thread's sleep queue %d is not empty", i));
+			    ("thread's sleep queue %d is not empty", i));
+			KASSERT(sq->sq_blockedcnt[i] == 0,
+			    ("thread's sleep queue %d count mismatches", i));
+		}
 		KASSERT(LIST_EMPTY(&sq->sq_free),
 		    ("thread's sleep queue has a non-empty free list"));
 		KASSERT(sq->sq_wchan == NULL, ("stale sq_wchan pointer"));
@@ -334,6 +338,7 @@ sleepq_add(void *wchan, struct lock_object *lock, const char *wmesg, int flags,
 	}
 	thread_lock(td);
 	TAILQ_INSERT_TAIL(&sq->sq_blocked[queue], td, td_slpq);
+	sq->sq_blockedcnt[queue]++;
 	td->td_sleepqueue = NULL;
 	td->td_sqqueue = queue;
 	td->td_wchan = wchan;
@@ -366,6 +371,22 @@ sleepq_set_timeout(void *wchan, int timo)
 	callout_reset_curcpu(&td->td_slpcallout, timo, sleepq_timeout, td);
 }
 
+/*
+ * Return the number of actual sleepers for the specified queue.
+ */
+u_int
+sleepq_sleepcnt(void *wchan, int queue)
+{
+	struct sleepqueue *sq;
+
+	KASSERT(wchan != NULL, ("%s: invalid NULL wait channel", __func__));
+	MPASS((queue >= 0) && (queue < NR_SLEEPQS));
+	sq = sleepq_lookup(wchan);
+	if (sq == NULL)
+		return (0);
+	return (sq->sq_blockedcnt[queue]);
+}
+
 /*
  * Marks the pending sleep of the current thread as interruptible and
  * makes an initial check for pending signals before putting a thread
@@ -665,6 +686,7 @@ sleepq_resume_thread(struct sleepqueue *sq, struct thread *td, int pri)
 	mtx_assert(&sc->sc_lock, MA_OWNED);
 
 	/* Remove the thread from the queue. */
+	sq->sq_blockedcnt[td->td_sqqueue]--;
 	TAILQ_REMOVE(&sq->sq_blocked[td->td_sqqueue], td, td_slpq);
 
 	/*
@@ -720,8 +742,10 @@ sleepq_dtor(void *mem, int size, void *arg)
 	int i;
 
 	sq = mem;
-	for (i = 0; i < NR_SLEEPQS; i++)
+	for (i = 0; i < NR_SLEEPQS; i++) {
 		MPASS(TAILQ_EMPTY(&sq->sq_blocked[i]));
+		MPASS(sq->sq_blockedcnt[i] == 0);
+	}
 }
 #endif
 
@@ -736,8 +760,10 @@ sleepq_init(void *mem, int size, int flags)
 
 	bzero(mem, size);
 	sq = mem;
-	for (i = 0; i < NR_SLEEPQS; i++)
+	for (i = 0; i < NR_SLEEPQS; i++) {
 		TAILQ_INIT(&sq->sq_blocked[i]);
+		sq->sq_blockedcnt[i] = 0;
+	}
 	LIST_INIT(&sq->sq_free);
 	return (0);
 }
@@ -1170,6 +1196,7 @@ found:
 					  td->td_tid, td->td_proc->p_pid,
 					  td->td_name);
 			}
+		db_printf("(expected: %u)\n", sq->sq_blockedcnt[i]);
 	}
 }
 
diff --git a/sys/kern/subr_turnstile.c b/sys/kern/subr_turnstile.c
index 31c8cfc4837..2aad2329e17 100644
--- a/sys/kern/subr_turnstile.c
+++ b/sys/kern/subr_turnstile.c
@@ -686,7 +686,7 @@ turnstile_wait(struct turnstile *ts, struct thread *owner, int queue)
 	 */
 	tc = TC_LOOKUP(ts->ts_lockobj);
 	if (ts == td->td_turnstile) {
-	mtx_assert(&tc->tc_lock, MA_OWNED);
+		mtx_assert(&tc->tc_lock, MA_OWNED);
 #ifdef TURNSTILE_PROFILING
 		tc->tc_depth++;
 		if (tc->tc_depth > tc->tc_max_depth) {
diff --git a/sys/kern/subr_witness.c b/sys/kern/subr_witness.c
index aa46edb60f0..5b7d5651750 100644
--- a/sys/kern/subr_witness.c
+++ b/sys/kern/subr_witness.c
@@ -551,12 +551,6 @@ static struct witness_order_list_entry order_lists[] = {
 	{ "tcpinp", &lock_class_rw },
 	{ "so_snd", &lock_class_mtx_sleep },
 	{ NULL, NULL },
-	/*
-	 * SLIP
-	 */
-	{ "slip_mtx", &lock_class_mtx_sleep },
-	{ "slip sc_mtx", &lock_class_mtx_sleep },
-	{ NULL, NULL },
 	/*
 	 * netatalk
 	 */
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
index 1aa6995a4af..dfc36bae003 100644
--- a/sys/kern/sys_process.c
+++ b/sys/kern/sys_process.c
@@ -59,6 +59,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #ifdef COMPAT_IA32
@@ -213,10 +214,10 @@ int
 proc_rwmem(struct proc *p, struct uio *uio)
 {
 	vm_map_t map;
-	vm_object_t backing_object, object = NULL;
-	vm_offset_t pageno = 0;		/* page number */
+	vm_object_t backing_object, object;
+	vm_offset_t pageno;		/* page number */
 	vm_prot_t reqprot;
-	int error, fault_flags, writing;
+	int error, writing;
 
 	/*
 	 * Assert that someone has locked this vmspace.  (Should be
@@ -232,9 +233,7 @@ proc_rwmem(struct proc *p, struct uio *uio)
 	map = &p->p_vmspace->vm_map;
 
 	writing = uio->uio_rw == UIO_WRITE;
-	reqprot = writing ? (VM_PROT_WRITE | VM_PROT_OVERRIDE_WRITE) :
-	    VM_PROT_READ;
-	fault_flags = writing ? VM_FAULT_DIRTY : VM_FAULT_NORMAL; 
+	reqprot = writing ? VM_PROT_COPY | VM_PROT_READ : VM_PROT_READ;
 
 	/*
 	 * Only map in one page at a time.  We don't have to, but it
@@ -269,7 +268,7 @@ proc_rwmem(struct proc *p, struct uio *uio)
 		/*
 		 * Fault the page on behalf of the process
 		 */
-		error = vm_fault(map, pageno, reqprot, fault_flags);
+		error = vm_fault(map, pageno, reqprot, VM_FAULT_NORMAL);
 		if (error) {
 			if (error == KERN_RESOURCE_SHORTAGE)
 				error = ENOMEM;
@@ -279,8 +278,8 @@ proc_rwmem(struct proc *p, struct uio *uio)
 		}
 
 		/*
-		 * Now we need to get the page.  out_entry, wired,
-		 * and single_use aren't used.  One would think the vm code
+		 * Now we need to get the page.  out_entry and wired
+		 * aren't used.  One would think the vm code
 		 * would be a *bit* nicer...  We use tmap because
 		 * vm_map_lookup() can change the map argument.
 		 */
@@ -303,6 +302,10 @@ proc_rwmem(struct proc *p, struct uio *uio)
 			VM_OBJECT_UNLOCK(object);
 			object = backing_object;
 		}
+		if (writing && m != NULL) {
+			vm_page_dirty(m);
+			vm_pager_page_unswapped(m);
+		}
 		VM_OBJECT_UNLOCK(object);
 		if (m == NULL) {
 			vm_map_lookup_done(tmap, out_entry);
diff --git a/sys/kern/tty.c b/sys/kern/tty.c
index 81f674163f6..1928c1f310b 100644
--- a/sys/kern/tty.c
+++ b/sys/kern/tty.c
@@ -102,10 +102,11 @@ static const char	*dev_console_filename;
 static void
 tty_watermarks(struct tty *tp)
 {
-	size_t bs;
+	size_t bs = 0;
 
 	/* Provide an input buffer for 0.2 seconds of data. */
-	bs = MIN(tp->t_termios.c_ispeed / 5, TTYBUF_MAX);
+	if (tp->t_termios.c_cflag & CREAD)
+		bs = MIN(tp->t_termios.c_ispeed / 5, TTYBUF_MAX);
 	ttyinq_setsize(&tp->t_inq, tp, bs);
 
 	/* Set low watermark at 10% (when 90% is available). */
@@ -355,6 +356,7 @@ tty_wait_background(struct tty *tp, struct thread *td, int sig)
 {
 	struct proc *p = td->td_proc;
 	struct pgrp *pg;
+	ksiginfo_t ksi;
 	int error;
 
 	MPASS(sig == SIGTTIN || sig == SIGTTOU);
@@ -396,8 +398,14 @@ tty_wait_background(struct tty *tp, struct thread *td, int sig)
 		 * Send the signal and sleep until we're the new
 		 * foreground process group.
 		 */
+		if (sig != 0) {
+			ksiginfo_init(&ksi);
+			ksi.ksi_code = SI_KERNEL;
+			ksi.ksi_signo = sig;
+			sig = 0;
+		}
 		PGRP_LOCK(pg);
-		pgsignal(pg, sig, 1);
+		pgsignal(pg, ksi.ksi_signo, 1, &ksi);
 		PGRP_UNLOCK(pg);
 
 		error = tty_wait(tp, &tp->t_bgwait);
@@ -497,12 +505,12 @@ ttydev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
 	case TIOCSPGRP:
 	case TIOCSTART:
 	case TIOCSTAT:
+	case TIOCSTI:
 	case TIOCSTOP:
 	case TIOCSWINSZ:
 #if 0
 	case TIOCSDRAINWAIT:
 	case TIOCSETD:
-	case TIOCSTI:
 #endif
 #ifdef COMPAT_43TTY
 	case  TIOCLBIC:
@@ -551,7 +559,7 @@ ttydev_ioctl(struct cdev *dev, u_long cmd, caddr_t data, int fflag,
 			new->c_ospeed = old->c_ospeed;
 	}
 
-	error = tty_ioctl(tp, cmd, data, td);
+	error = tty_ioctl(tp, cmd, data, fflag, td);
 done:	tty_unlock(tp);
 
 	return (error);
@@ -595,7 +603,8 @@ ttydev_poll(struct cdev *dev, int events, struct thread *td)
 }
 
 static int
-ttydev_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
+ttydev_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nprot, vm_memattr_t *memattr)
 {
 	struct tty *tp = dev->si_drv1;
 	int error;
@@ -605,7 +614,7 @@ ttydev_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
 	error = ttydev_enter(tp);
 	if (error)
 		return (-1);
-	error = ttydevsw_mmap(tp, offset, paddr, nprot);
+	error = ttydevsw_mmap(tp, offset, paddr, nprot, memattr);
 	tty_unlock(tp);
 
 	return (error);
@@ -883,6 +892,7 @@ ttydevsw_defparam(struct tty *tp, struct termios *t)
 		t->c_ospeed = B50;
 	else if (t->c_ospeed > B115200)
 		t->c_ospeed = B115200;
+	t->c_cflag |= CREAD;
 
 	return (0);
 }
@@ -896,8 +906,8 @@ ttydevsw_defmodem(struct tty *tp, int sigon, int sigoff)
 }
 
 static int
-ttydevsw_defmmap(struct tty *tp, vm_offset_t offset, vm_paddr_t *paddr,
-    int nprot)
+ttydevsw_defmmap(struct tty *tp, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nprot, vm_memattr_t *memattr)
 {
 
 	return (-1);
@@ -1240,6 +1250,8 @@ tty_signal_sessleader(struct tty *tp, int sig)
 void
 tty_signal_pgrp(struct tty *tp, int sig)
 {
+	ksiginfo_t ksi;
+
 	tty_lock_assert(tp, MA_OWNED);
 	MPASS(sig >= 1 && sig < NSIG);
 
@@ -1249,8 +1261,11 @@ tty_signal_pgrp(struct tty *tp, int sig)
 	if (sig == SIGINFO && !(tp->t_termios.c_lflag & NOKERNINFO))
 		tty_info(tp);
 	if (tp->t_pgrp != NULL) {
+		ksiginfo_init(&ksi);
+		ksi.ksi_signo = sig;
+		ksi.ksi_code = SI_KERNEL;
 		PGRP_LOCK(tp->t_pgrp);
-		pgsignal(tp->t_pgrp, sig, 1);
+		pgsignal(tp->t_pgrp, sig, 1, &ksi);
 		PGRP_UNLOCK(tp->t_pgrp);
 	}
 }
@@ -1335,7 +1350,8 @@ tty_flush(struct tty *tp, int flags)
 }
 
 static int
-tty_generic_ioctl(struct tty *tp, u_long cmd, void *data, struct thread *td)
+tty_generic_ioctl(struct tty *tp, u_long cmd, void *data, int fflag,
+    struct thread *td)
 {
 	int error;
 
@@ -1662,17 +1678,26 @@ tty_generic_ioctl(struct tty *tp, u_long cmd, void *data, struct thread *td)
 	case TIOCSTAT:
 		tty_info(tp);
 		return (0);
+	case TIOCSTI:
+		if ((fflag & FREAD) == 0 && priv_check(td, PRIV_TTY_STI))
+			return (EPERM);
+		if (!tty_is_ctty(tp, td->td_proc) &&
+		    priv_check(td, PRIV_TTY_STI))
+			return (EACCES);
+		ttydisc_rint(tp, *(char *)data, 0);
+		ttydisc_rint_done(tp);
+		return (0);
 	}
 
 #ifdef COMPAT_43TTY
-	return tty_ioctl_compat(tp, cmd, data, td);
+	return tty_ioctl_compat(tp, cmd, data, fflag, td);
 #else /* !COMPAT_43TTY */
 	return (ENOIOCTL);
 #endif /* COMPAT_43TTY */
 }
 
 int
-tty_ioctl(struct tty *tp, u_long cmd, void *data, struct thread *td)
+tty_ioctl(struct tty *tp, u_long cmd, void *data, int fflag, struct thread *td)
 {
 	int error;
 
@@ -1683,7 +1708,7 @@ tty_ioctl(struct tty *tp, u_long cmd, void *data, struct thread *td)
 	
 	error = ttydevsw_ioctl(tp, cmd, data, td);
 	if (error == ENOIOCTL)
-		error = tty_generic_ioctl(tp, cmd, data, td);
+		error = tty_generic_ioctl(tp, cmd, data, fflag, td);
 
 	return (error);
 }
diff --git a/sys/kern/tty_compat.c b/sys/kern/tty_compat.c
index 00764b89d3e..6dce01d0b6d 100644
--- a/sys/kern/tty_compat.c
+++ b/sys/kern/tty_compat.c
@@ -180,7 +180,8 @@ ttsetcompat(struct tty *tp, u_long *com, caddr_t data, struct termios *term)
 
 /*ARGSUSED*/
 int
-tty_ioctl_compat(struct tty *tp, u_long com, caddr_t data, struct thread *td)
+tty_ioctl_compat(struct tty *tp, u_long com, caddr_t data, int fflag,
+    struct thread *td)
 {
 	switch (com) {
 	case TIOCSETP:
@@ -196,7 +197,7 @@ tty_ioctl_compat(struct tty *tp, u_long com, caddr_t data, struct thread *td)
 		term = tp->t_termios;
 		if ((error = ttsetcompat(tp, &com, data, &term)) != 0)
 			return error;
-		return tty_ioctl(tp, com, &term, td);
+		return tty_ioctl(tp, com, &term, fflag, td);
 	}
 	case TIOCGETP: {
 		struct sgttyb *sg = (struct sgttyb *)data;
@@ -255,12 +256,13 @@ tty_ioctl_compat(struct tty *tp, u_long com, caddr_t data, struct thread *td)
 		int ldisczero = 0;
 
 		return (tty_ioctl(tp, TIOCSETD,
-			*(int *)data == 2 ? (caddr_t)&ldisczero : data, td));
+			*(int *)data == 2 ? (caddr_t)&ldisczero : data,
+			fflag, td));
 	    }
 
 	case OTIOCCONS:
 		*(int *)data = 1;
-		return (tty_ioctl(tp, TIOCCONS, data, td));
+		return (tty_ioctl(tp, TIOCCONS, data, fflag, td));
 
 	default:
 		return (ENOIOCTL);
diff --git a/sys/kern/tty_pts.c b/sys/kern/tty_pts.c
index bc6e1582867..632175b209d 100644
--- a/sys/kern/tty_pts.c
+++ b/sys/kern/tty_pts.c
@@ -379,7 +379,7 @@ ptsdev_ioctl(struct file *fp, u_long cmd, void *data,
 
 	/* Just redirect this ioctl to the slave device. */
 	tty_lock(tp);
-	error = tty_ioctl(tp, cmd, data, td);
+	error = tty_ioctl(tp, cmd, data, fp->f_flag, td);
 	tty_unlock(tp);
 	if (error == ENOIOCTL)
 		error = ENOTTY;
@@ -733,8 +733,8 @@ pts_alloc(int fflags, struct thread *td, struct file *fp)
 
 	/* Allocate TTY and softc. */
 	psc = malloc(sizeof(struct pts_softc), M_PTS, M_WAITOK|M_ZERO);
-	cv_init(&psc->pts_inwait, "pts inwait");
-	cv_init(&psc->pts_outwait, "pts outwait");
+	cv_init(&psc->pts_inwait, "ptsin");
+	cv_init(&psc->pts_outwait, "ptsout");
 
 	psc->pts_unit = unit;
 	psc->pts_uidinfo = uid;
@@ -772,8 +772,8 @@ pts_alloc_external(int fflags, struct thread *td, struct file *fp,
 
 	/* Allocate TTY and softc. */
 	psc = malloc(sizeof(struct pts_softc), M_PTS, M_WAITOK|M_ZERO);
-	cv_init(&psc->pts_inwait, "pts inwait");
-	cv_init(&psc->pts_outwait, "pts outwait");
+	cv_init(&psc->pts_inwait, "ptsin");
+	cv_init(&psc->pts_outwait, "ptsout");
 
 	psc->pts_unit = -1;
 	psc->pts_cdev = dev;
diff --git a/sys/kern/uipc_accf.c b/sys/kern/uipc_accf.c
index 102c04f2663..236b60d01cf 100644
--- a/sys/kern/uipc_accf.c
+++ b/sys/kern/uipc_accf.c
@@ -54,7 +54,7 @@ MTX_SYSINIT(accept_filter, &accept_filter_mtx, "accept_filter_mtx",
 #define	ACCEPT_FILTER_UNLOCK()	mtx_unlock(&accept_filter_mtx)
 
 static SLIST_HEAD(, accept_filter) accept_filtlsthd =
-	SLIST_HEAD_INITIALIZER(&accept_filtlsthd);
+	SLIST_HEAD_INITIALIZER(accept_filtlsthd);
 
 MALLOC_DEFINE(M_ACCF, "accf", "accept filter data");
 
diff --git a/sys/kern/uipc_sem.c b/sys/kern/uipc_sem.c
index 5ca13f8844f..f41b49c63b9 100644
--- a/sys/kern/uipc_sem.c
+++ b/sys/kern/uipc_sem.c
@@ -51,7 +51,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
 #include 
diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c
index c00fd2d1236..a9001d96c22 100644
--- a/sys/kern/uipc_syscalls.c
+++ b/sys/kern/uipc_syscalls.c
@@ -1886,7 +1886,7 @@ kern_sendfile(struct thread *td, struct sendfile_args *uap,
 	if (uap->flags & SF_SYNC) {
 		sfs = malloc(sizeof *sfs, M_TEMP, M_WAITOK);
 		memset(sfs, 0, sizeof *sfs);
-		mtx_init(&sfs->mtx, "sendfile", MTX_DEF, 0);
+		mtx_init(&sfs->mtx, "sendfile", NULL, MTX_DEF);
 		cv_init(&sfs->cv, "sendfile");
 	}
 
diff --git a/sys/kern/vfs_acl.c b/sys/kern/vfs_acl.c
index a6a1ebfca77..c44bb250819 100644
--- a/sys/kern/vfs_acl.c
+++ b/sys/kern/vfs_acl.c
@@ -173,7 +173,7 @@ acl_copyout(struct acl *kernel_acl, void *user_acl, acl_type_t type)
 
 /*
  * Convert "old" type - ACL_TYPE_{ACCESS,DEFAULT}_OLD - into its "new"
- * counterpart.  It's required for old (pre-NFS4 ACLs) libc to work
+ * counterpart.  It's required for old (pre-NFSv4 ACLs) libc to work
  * with new kernel.  Fixing 'type' for old binaries with new libc
  * is being done in lib/libc/posix1e/acl_support.c:_acl_type_unold().
  */
@@ -307,7 +307,8 @@ vacl_aclcheck(struct thread *td, struct vnode *vp, acl_type_t type,
 	error = acl_copyin(aclp, inkernelacl, type);
 	if (error != 0)
 		goto out;
-	error = VOP_ACLCHECK(vp, type, inkernelacl, td->td_ucred, td);
+	error = VOP_ACLCHECK(vp, acl_type_unold(type), inkernelacl,
+	    td->td_ucred, td);
 out:
 	acl_free(inkernelacl);
 	return (error);
diff --git a/sys/kern/vfs_mount.c b/sys/kern/vfs_mount.c
index 71084f5069b..b443152af08 100644
--- a/sys/kern/vfs_mount.c
+++ b/sys/kern/vfs_mount.c
@@ -104,13 +104,17 @@ struct vnode	*rootvnode;
  * The root filesystem is detailed in the kernel environment variable
  * vfs.root.mountfrom, which is expected to be in the general format
  *
- * :[]
+ * :[][	:[] ...]
  * vfsname   := the name of a VFS known to the kernel and capable
  *              of being mounted as root
  * path      := disk device name or other data used by the filesystem
  *              to locate its physical store
  *
- * The environment variable vfs.root.mountfrom options is a comma delimited
+ * If the environment variable vfs.root.mountfrom is a space separated list,
+ * each list element is tried in turn and the root filesystem will be mounted
+ * from the first one that suceeds.
+ *
+ * The environment variable vfs.root.mountfrom.options is a comma delimited
  * set of string mount options.  These mount options must be parseable
  * by nmount() in the kernel.
  */
@@ -1350,7 +1354,7 @@ struct root_hold_token {
 };
 
 static LIST_HEAD(, root_hold_token)	root_holds =
-    LIST_HEAD_INITIALIZER(&root_holds);
+    LIST_HEAD_INITIALIZER(root_holds);
 
 static int root_mount_complete;
 
@@ -1643,7 +1647,7 @@ vfs_opterror(struct vfsoptlist *opts, const char *fmt, ...)
 void
 vfs_mountroot(void)
 {
-	char *cp, *options;
+	char *cp, *cpt, *options, *tmpdev;
 	int error, i, asked = 0;
 
 	options = NULL;
@@ -1695,10 +1699,15 @@ vfs_mountroot(void)
 	 */
 	cp = getenv("vfs.root.mountfrom");
 	if (cp != NULL) {
-		error = vfs_mountroot_try(cp, options);
+		cpt = cp;
+		while ((tmpdev = strsep(&cpt, " \t")) != NULL) {
+			error = vfs_mountroot_try(tmpdev, options);
+			if (error == 0) {
+				freeenv(cp);
+				goto mounted;
+			}
+		}
 		freeenv(cp);
-		if (!error)
-			goto mounted;
 	}
 
 	/*
diff --git a/sys/kern/vfs_subr.c b/sys/kern/vfs_subr.c
index d92555fa15b..87328c19c20 100644
--- a/sys/kern/vfs_subr.c
+++ b/sys/kern/vfs_subr.c
@@ -152,6 +152,10 @@ SYSCTL_LONG(_vfs, OID_AUTO, wantfreevnodes, CTLFLAG_RW, &wantfreevnodes, 0, "");
 static u_long freevnodes;
 SYSCTL_LONG(_vfs, OID_AUTO, freevnodes, CTLFLAG_RD, &freevnodes, 0, "");
 
+static int vlru_allow_cache_src;
+SYSCTL_INT(_vfs, OID_AUTO, vlru_allow_cache_src, CTLFLAG_RW,
+    &vlru_allow_cache_src, 0, "Allow vlru to reclaim source vnode");
+
 /*
  * Various variables used for debugging the new implementation of
  * reassignbuf().
@@ -643,7 +647,9 @@ vlrureclaim(struct mount *mp)
 		 * If it's been deconstructed already, it's still
 		 * referenced, or it exceeds the trigger, skip it.
 		 */
-		if (vp->v_usecount || !LIST_EMPTY(&(vp)->v_cache_src) ||
+		if (vp->v_usecount ||
+		    (!vlru_allow_cache_src &&
+			!LIST_EMPTY(&(vp)->v_cache_src)) ||
 		    (vp->v_iflag & VI_DOOMED) != 0 || (vp->v_object != NULL &&
 		    vp->v_object->resident_page_count > trigger)) {
 			VI_UNLOCK(vp);
@@ -668,7 +674,9 @@ vlrureclaim(struct mount *mp)
 		 * interlock, the other thread will be unable to drop the
 		 * vnode lock before our VOP_LOCK() call fails.
 		 */
-		if (vp->v_usecount || !LIST_EMPTY(&(vp)->v_cache_src) ||
+		if (vp->v_usecount ||
+		    (!vlru_allow_cache_src &&
+			!LIST_EMPTY(&(vp)->v_cache_src)) ||
 		    (vp->v_object != NULL &&
 		    vp->v_object->resident_page_count > trigger)) {
 			VOP_UNLOCK(vp, LK_INTERLOCK);
@@ -2689,14 +2697,12 @@ vn_printf(struct vnode *vp, const char *fmt, ...)
 		strlcat(buf, "|VI_DOOMED", sizeof(buf));
 	if (vp->v_iflag & VI_FREE)
 		strlcat(buf, "|VI_FREE", sizeof(buf));
-	if (vp->v_iflag & VI_OBJDIRTY)
-		strlcat(buf, "|VI_OBJDIRTY", sizeof(buf));
 	if (vp->v_iflag & VI_DOINGINACT)
 		strlcat(buf, "|VI_DOINGINACT", sizeof(buf));
 	if (vp->v_iflag & VI_OWEINACT)
 		strlcat(buf, "|VI_OWEINACT", sizeof(buf));
 	flags = vp->v_iflag & ~(VI_MOUNT | VI_AGE | VI_DOOMED | VI_FREE |
-	    VI_OBJDIRTY | VI_DOINGINACT | VI_OWEINACT);
+	    VI_DOINGINACT | VI_OWEINACT);
 	if (flags != 0) {
 		snprintf(buf2, sizeof(buf2), "|VI(0x%lx)", flags);
 		strlcat(buf, buf2, sizeof(buf));
@@ -2761,6 +2767,7 @@ DB_SHOW_COMMAND(vnode, db_show_vnode)
 DB_SHOW_COMMAND(mount, db_show_mount)
 {
 	struct mount *mp;
+	struct vfsopt *opt;
 	struct statfs *sp;
 	struct vnode *vp;
 	char buf[512];
@@ -2866,6 +2873,18 @@ DB_SHOW_COMMAND(mount, db_show_mount)
 	}
 	db_printf("    mnt_kern_flag = %s\n", buf);
 
+	db_printf("    mnt_opt = ");
+	opt = TAILQ_FIRST(mp->mnt_opt);
+	if (opt != NULL) {
+		db_printf("%s", opt->name);
+		opt = TAILQ_NEXT(opt, link);
+		while (opt != NULL) {
+			db_printf(", %s", opt->name);
+			opt = TAILQ_NEXT(opt, link);
+		}
+	}
+	db_printf("\n");
+
 	sp = &mp->mnt_stat;
 	db_printf("    mnt_stat = { version=%u type=%u flags=0x%016jx "
 	    "bsize=%ju iosize=%ju blocks=%ju bfree=%ju bavail=%jd files=%ju "
@@ -3177,7 +3196,8 @@ vfs_msync(struct mount *mp, int flags)
 	MNT_ILOCK(mp);
 	MNT_VNODE_FOREACH(vp, mp, mvp) {
 		VI_LOCK(vp);
-		if ((vp->v_iflag & VI_OBJDIRTY) &&
+		obj = vp->v_object;
+		if (obj != NULL && (obj->flags & OBJ_MIGHTBEDIRTY) != 0 &&
 		    (flags == MNT_WAIT || VOP_ISLOCKED(vp) == 0)) {
 			MNT_IUNLOCK(mp);
 			if (!vget(vp,
@@ -3522,6 +3542,8 @@ vaccess(enum vtype type, mode_t file_mode, uid_t file_uid, gid_t file_gid,
 
 	KASSERT((accmode & ~(VEXEC | VWRITE | VREAD | VADMIN | VAPPEND)) == 0,
 	    ("invalid bit in accmode"));
+	KASSERT((accmode & VAPPEND) == 0 || (accmode & VWRITE),
+	    	("VAPPEND without VWRITE"));
 
 	/*
 	 * Look for a normal, non-privileged way to access the file/directory
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index 0a8ef463957..eb5fb8709cf 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -4426,7 +4426,7 @@ fhopen(td, uap)
 	}
 	if (fmode & FREAD)
 		accmode |= VREAD;
-	if (fmode & O_APPEND)
+	if ((fmode & O_APPEND) && (fmode & FWRITE))
 		accmode |= VAPPEND;
 #ifdef MAC
 	error = mac_vnode_check_open(td->td_ucred, vp, accmode);
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 03e8d938bac..d0b713cb310 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -212,7 +212,7 @@ restart:
 		accmode |= VREAD;
 	if (fmode & FEXEC)
 		accmode |= VEXEC;
-	if (fmode & O_APPEND)
+	if ((fmode & O_APPEND) && (fmode & FWRITE))
 		accmode |= VAPPEND;
 #ifdef MAC
 	error = mac_vnode_check_open(cred, vp, accmode);
diff --git a/sys/libkern/inet_aton.c b/sys/libkern/inet_aton.c
new file mode 100644
index 00000000000..a4625cb4fd1
--- /dev/null
+++ b/sys/libkern/inet_aton.c
@@ -0,0 +1,136 @@
+/*-
+ * Copyright (c) 2001 Charles Mott 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+int
+inet_aton(const char *cp, struct in_addr *addr)
+{
+	u_long parts[4];
+	in_addr_t val;
+	const char *c;
+	char *endptr;
+	int gotend, n;
+
+	c = (const char *)cp;
+	n = 0;
+
+	/*
+	 * Run through the string, grabbing numbers until
+	 * the end of the string, or some error
+	 */
+	gotend = 0;
+	while (!gotend) {
+		unsigned long l;
+
+		l = strtoul(c, &endptr, 0);
+
+		if (l == ULONG_MAX || (l == 0 && endptr == c))
+			return (0);
+
+		val = (in_addr_t)l;
+
+		/*
+		 * If the whole string is invalid, endptr will equal
+		 * c.. this way we can make sure someone hasn't
+		 * gone '.12' or something which would get past
+		 * the next check.
+		 */
+		if (endptr == c)
+			return (0);
+		parts[n] = val;
+		c = endptr;
+
+		/* Check the next character past the previous number's end */
+		switch (*c) {
+		case '.' :
+
+			/* Make sure we only do 3 dots .. */
+			if (n == 3)	/* Whoops. Quit. */
+				return (0);
+			n++;
+			c++;
+			break;
+
+		case '\0':
+			gotend = 1;
+			break;
+
+		default:
+			if (isspace((unsigned char)*c)) {
+				gotend = 1;
+				break;
+			} else {
+
+				/* Invalid character, then fail. */
+				return (0);
+			}
+		}
+
+	}
+
+	/* Concoct the address according to the number of parts specified. */
+	switch (n) {
+	case 0:				/* a -- 32 bits */
+
+		/*
+		 * Nothing is necessary here.  Overflow checking was
+		 * already done in strtoul().
+		 */
+		break;
+	case 1:				/* a.b -- 8.24 bits */
+		if (val > 0xffffff || parts[0] > 0xff)
+			return (0);
+		val |= parts[0] << 24;
+		break;
+
+	case 2:				/* a.b.c -- 8.8.16 bits */
+		if (val > 0xffff || parts[0] > 0xff || parts[1] > 0xff)
+			return (0);
+		val |= (parts[0] << 24) | (parts[1] << 16);
+		break;
+
+	case 3:				/* a.b.c.d -- 8.8.8.8 bits */
+		if (val > 0xff || parts[0] > 0xff || parts[1] > 0xff ||
+		    parts[2] > 0xff)
+			return (0);
+		val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
+		break;
+	}
+
+	if (addr != NULL)
+		addr->s_addr = htonl(val);
+	return (1);
+}
+
diff --git a/sys/mips/adm5120/if_admsw.c b/sys/mips/adm5120/if_admsw.c
index fff8930c2c5..164e84008a2 100644
--- a/sys/mips/adm5120/if_admsw.c
+++ b/sys/mips/adm5120/if_admsw.c
@@ -128,7 +128,7 @@ static uint8_t vlan_matrix[SW_DEVS] = {
 
 /* ifnet entry points */
 static void	admsw_start(struct ifnet *);
-static void	admsw_watchdog(struct ifnet *);
+static void	admsw_watchdog(void *);
 static int	admsw_ioctl(struct ifnet *, u_long, caddr_t);
 static void	admsw_init(void *);
 static void	admsw_stop(struct ifnet *, int);
@@ -398,6 +398,7 @@ admsw_attach(device_t dev)
 
 	device_printf(sc->sc_dev, "base Ethernet address %s\n",
 	    ether_sprintf(enaddr));
+	callout_init(&sc->sc_watchdog, 1);
 
 	rid = 0;
 	if ((sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, 
@@ -536,8 +537,6 @@ admsw_attach(device_t dev)
 		ifp->if_ioctl = admsw_ioctl;
 		ifp->if_output = ether_output;
 		ifp->if_start = admsw_start;
-		ifp->if_watchdog = admsw_watchdog;
-		ifp->if_timer = 0;
 		ifp->if_init = admsw_init;
 		ifp->if_mtu = ETHERMTU;
 		ifp->if_baudrate = IF_Mbps(100);
@@ -733,7 +732,7 @@ admsw_start(struct ifnet *ifp)
 		BPF_MTAP(ifp, m0);
 
 		/* Set a watchdog timer in case the chip flakes out. */
-		sc->sc_ifnet[0]->if_timer = 5;
+		sc->sc_timer = 5;
 	}
 }
 
@@ -743,25 +742,30 @@ admsw_start(struct ifnet *ifp)
  *	Watchdog timer handler.
  */
 static void
-admsw_watchdog(struct ifnet *ifp)
+admsw_watchdog(void *arg)
 {
-	struct admsw_softc *sc = ifp->if_softc;
+	struct admsw_softc *sc = arg;
+	struct ifnet *ifp;
 	int vlan;
 
+	callout_reset(&sc->sc_watchdog, hz, admsw_watchdog, sc);
+	if (sc->sc_timer == 0 || --sc->sc_timer > 0)
+		return;
+
 	/* Check if an interrupt was lost. */
 	if (sc->sc_txfree == ADMSW_NTXLDESC) {
 		device_printf(sc->sc_dev, "watchdog false alarm\n");
 		return;
 	}
-	if (sc->sc_ifnet[0]->if_timer != 0)
+	if (sc->sc_timer != 0)
 		device_printf(sc->sc_dev, "watchdog timer is %d!\n",  
-		    sc->sc_ifnet[0]->if_timer);
+		    sc->sc_timer);
 	admsw_txintr(sc, 0);
 	if (sc->sc_txfree == ADMSW_NTXLDESC) {
 		device_printf(sc->sc_dev, "tx IRQ lost (queue empty)\n");
 		return;
 	}
-	if (sc->sc_ifnet[0]->if_timer != 0) {
+	if (sc->sc_timer != 0) {
 		device_printf(sc->sc_dev, "tx IRQ lost (timer recharged)\n");
 		return;
 	}
@@ -772,6 +776,8 @@ admsw_watchdog(struct ifnet *ifp)
 		admsw_stop(sc->sc_ifnet[vlan], 0);
 	admsw_init(sc);
 
+	ifp = sc->sc_ifnet[0];
+
 	/* Try to get more packets going. */
 	admsw_start(ifp);
 }
@@ -938,7 +944,7 @@ admsw_txintr(struct admsw_softc *sc, int prio)
 		 * cancel the watchdog timer.
 		 */
 		if (sc->sc_txfree == ADMSW_NTXLDESC)
-			ifp->if_timer = 0;
+			sc->sc_timer = 0;
 
 	}
 
@@ -1096,6 +1102,9 @@ admsw_init(void *xsc)
 				    ~(ADMSW_INTR_SHD | ADMSW_INTR_SLD | 
 					ADMSW_INTR_RHD | ADMSW_INTR_RLD | 
 					ADMSW_INTR_HDF | ADMSW_INTR_LDF));
+
+				callout_reset(&sc->sc_watchdog, hz,
+				    admsw_watchdog, sc);
 			}
 			sc->ndevs++;
 		}
@@ -1137,11 +1146,14 @@ admsw_stop(struct ifnet *ifp, int disable)
 
 		/* disable interrupts */
 		REG_WRITE(ADMSW_INT_MASK, INT_MASK);
+
+		/* Cancel the watchdog timer. */
+		sc->sc_timer = 0;
+		callout_stop(&sc->sc_watchdog);
 	}
 
-	/* Mark the interface as down and cancel the watchdog timer. */
+	/* Mark the interface as down. */
 	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
-	ifp->if_timer = 0;
 
 	return;
 }
diff --git a/sys/mips/adm5120/if_admswvar.h b/sys/mips/adm5120/if_admswvar.h
index a94bb89f3a1..1304fac4dd0 100644
--- a/sys/mips/adm5120/if_admswvar.h
+++ b/sys/mips/adm5120/if_admswvar.h
@@ -132,7 +132,9 @@ struct admsw_softc {
 	bus_dma_tag_t	 sc_bufs_dmat;	/* bus DMA tag for buffers */
 	struct ifmedia	 sc_ifmedia[SW_DEVS];
 	int		 ndevs;		/* number of IFF_RUNNING interfaces */
-	struct ifnet	*sc_ifnet[SW_DEVS];	
+	struct ifnet	*sc_ifnet[SW_DEVS];
+	struct callout	 sc_watchdog;
+	int		 sc_timer;
 					/* Ethernet common data */
 	void		*sc_ih;		/* interrupt cookie */
 	struct resource	*irq_res;
diff --git a/sys/mips/mips/mem.c b/sys/mips/mips/mem.c
index 3a3cbaebb52..c0e88e08e0c 100644
--- a/sys/mips/mips/mem.c
+++ b/sys/mips/mips/mem.c
@@ -183,7 +183,8 @@ memrw(dev, uio, flags)
 
 /*ARGSUSED*/
 int
-memmmap(struct cdev *dev, vm_offset_t off, vm_paddr_t *paddr, int prot)
+memmmap(struct cdev *dev, vm_ooffset_t off, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
 
 	return (EOPNOTSUPP);
diff --git a/sys/mips/mips/trap.c b/sys/mips/mips/trap.c
index 1419f8c98f9..76b5d1fa563 100644
--- a/sys/mips/mips/trap.c
+++ b/sys/mips/mips/trap.c
@@ -505,17 +505,11 @@ dofault:
 			struct vmspace *vm;
 			vm_map_t map;
 			int rv = 0;
-			int flag;
 
 			vm = p->p_vmspace;
 			map = &vm->vm_map;
 			va = trunc_page((vm_offset_t)trapframe->badvaddr);
-			if ((vm_offset_t)trapframe->badvaddr < VM_MIN_KERNEL_ADDRESS) {
-				if (ftype & VM_PROT_WRITE)
-					flag = VM_FAULT_DIRTY;
-				else
-					flag = VM_FAULT_NORMAL;
-			} else {
+			if ((vm_offset_t)trapframe->badvaddr >= VM_MIN_KERNEL_ADDRESS) {
 				/*
 				 * Don't allow user-mode faults in kernel
 				 * address space.
@@ -531,14 +525,14 @@ dofault:
 			++p->p_lock;
 			PROC_UNLOCK(p);
 
-			rv = vm_fault(map, va, ftype, flag);
+			rv = vm_fault(map, va, ftype, VM_FAULT_NORMAL);
 
 			PROC_LOCK(p);
 			--p->p_lock;
 			PROC_UNLOCK(p);
 #ifdef VMFAULT_TRACE
 			printf("vm_fault(%p (pmap %p), %x (%x), %x, %d) -> %x at pc %x\n",
-			    map, &vm->vm_pmap, va, trapframe->badvaddr, ftype, flag,
+			    map, &vm->vm_pmap, va, trapframe->badvaddr, ftype, VM_FAULT_NORMAL,
 			    rv, trapframe->pc);
 #endif
 
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index 9606a524472..1530cfd0b84 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -21,6 +21,7 @@ SUBDIR=	${_3dfx} \
 	alc \
 	ale \
 	${_amd} \
+	${_amdsbwd} \
 	${_amdtemp} \
 	amr \
 	${_an} \
@@ -416,6 +417,7 @@ _zfs=		zfs
 _aac=		aac
 _acpi=		acpi
 _ahb=		ahb
+_amdsbwd=	amdsbwd
 _amdtemp=	amdtemp
 _arcmsr=	arcmsr
 _asmc=		asmc
@@ -472,6 +474,7 @@ _aac=		aac
 _acpi=		acpi
 _agp=		agp
 _an=		an
+_amdsbwd=	amdsbwd
 _amdtemp=	amdtemp
 _arcmsr=	arcmsr
 _asmc=		asmc
diff --git a/sys/modules/acpi/acpi/Makefile b/sys/modules/acpi/acpi/Makefile
index 80b9b942880..992c59c09a6 100644
--- a/sys/modules/acpi/acpi/Makefile
+++ b/sys/modules/acpi/acpi/Makefile
@@ -41,8 +41,8 @@ SRCS+=	exprep.c exregion.c exresnte.c exresolv.c exresop.c exstore.c
 SRCS+=	exstoren.c exstorob.c exsystem.c exutils.c
 SRCS+=	hwacpi.c hwgpe.c hwregs.c hwsleep.c hwtimer.c hwvalid.c hwxface.c
 SRCS+=	nsaccess.c nsalloc.c nsdump.c nseval.c nsinit.c nsload.c nsnames.c
-SRCS+=	nsobject.c nsparse.c nspredef.c nsrepair.c nssearch.c nsutils.c
-SRCS+=	nswalk.c nsxfeval.c nsxfname.c nsxfobj.c
+SRCS+=	nsobject.c nsparse.c nspredef.c nsrepair.c nsrepair2.c nssearch.c
+SRCS+=	nsutils.c nswalk.c nsxfeval.c nsxfname.c nsxfobj.c
 SRCS+=	psargs.c psloop.c psopcode.c psparse.c psscope.c pstree.c psutils.c
 SRCS+=	pswalk.c psxface.c
 SRCS+=	rsaddr.c rscalc.c rscreate.c rsdump.c rsinfo.c rsio.c rsirq.c rslist.c
diff --git a/sys/modules/amdsbwd/Makefile b/sys/modules/amdsbwd/Makefile
new file mode 100644
index 00000000000..56f9ab79b87
--- /dev/null
+++ b/sys/modules/amdsbwd/Makefile
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+.PATH:  ${.CURDIR}/../../dev/amdsbwd
+KMOD    = amdsbwd
+SRCS    = amdsbwd.c
+SRCS    += device_if.h bus_if.h pci_if.h isa_if.h
+
+.include 
diff --git a/sys/modules/ata/atausb/Makefile b/sys/modules/ata/atausb/Makefile
deleted file mode 100644
index 714adfee5d4..00000000000
--- a/sys/modules/ata/atausb/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-# $FreeBSD$
-
-.PATH: ${.CURDIR}/../../../dev/ata
-
-KMOD=	atausb
-SRCS=	ata-usb.c
-SRCS+=	opt_bus.h opt_usb.h opt_ata.h usbdevs.h
-SRCS+=	ata_if.h device_if.h bus_if.h pci_if.h usb_if.h
-
-.include 
diff --git a/sys/modules/ipfw/Makefile b/sys/modules/ipfw/Makefile
index dd31d7e053f..b48d5c59882 100644
--- a/sys/modules/ipfw/Makefile
+++ b/sys/modules/ipfw/Makefile
@@ -6,6 +6,8 @@
 
 KMOD=	ipfw
 SRCS=	ip_fw2.c ip_fw_pfil.c
+SRCS+=	ip_fw_dynamic.c ip_fw_log.c ip_fw_nat.c
+SRCS+=	ip_fw_sockopt.c ip_fw_table.c
 SRCS+=	opt_inet6.h opt_ipsec.h
 
 CFLAGS+= -DIPFIREWALL
diff --git a/sys/modules/iwnfw/Makefile b/sys/modules/iwnfw/Makefile
index 8d260b7e64c..41556df8c59 100644
--- a/sys/modules/iwnfw/Makefile
+++ b/sys/modules/iwnfw/Makefile
@@ -1,5 +1,5 @@
 # $FreeBSD$
 
-SUBDIR=	iwn4965 iwn5000 iwn5150
+SUBDIR=	iwn1000 iwn4965 iwn5000 iwn5150 iwn6000
 
 .include 
diff --git a/sys/modules/iwnfw/iwn1000/Makefile b/sys/modules/iwnfw/iwn1000/Makefile
new file mode 100644
index 00000000000..68b343e0883
--- /dev/null
+++ b/sys/modules/iwnfw/iwn1000/Makefile
@@ -0,0 +1,6 @@
+# $FreeBSD$
+
+KMOD=	iwn1000fw
+IMG=	iwlwifi-1000-128.50.3.1
+
+.include 
diff --git a/sys/modules/iwnfw/iwn4965/Makefile b/sys/modules/iwnfw/iwn4965/Makefile
index 6e88f8edf0e..c1cc961342e 100644
--- a/sys/modules/iwnfw/iwn4965/Makefile
+++ b/sys/modules/iwnfw/iwn4965/Makefile
@@ -1,6 +1,6 @@
 # $FreeBSD$
 
 KMOD=	iwn4965fw
-IMG=	iwlwifi-4965-228.57.2.23
+IMG=	iwlwifi-4965-228.61.2.24
 
 .include 
diff --git a/sys/modules/iwnfw/iwn5000/Makefile b/sys/modules/iwnfw/iwn5000/Makefile
index 88e9e993628..a1031d2aa16 100644
--- a/sys/modules/iwnfw/iwn5000/Makefile
+++ b/sys/modules/iwnfw/iwn5000/Makefile
@@ -1,6 +1,6 @@
 # $FreeBSD$
 
 KMOD=	iwn5000fw
-IMG=	iwlwifi-5000-5.4.A.11
+IMG=	iwlwifi-5000-8.24.2.12
 
 .include 
diff --git a/sys/modules/iwnfw/iwn6000/Makefile b/sys/modules/iwnfw/iwn6000/Makefile
new file mode 100644
index 00000000000..c0295a92cf1
--- /dev/null
+++ b/sys/modules/iwnfw/iwn6000/Makefile
@@ -0,0 +1,6 @@
+# $FreeBSD$
+
+KMOD=	iwn6000fw
+IMG=	iwlwifi-6000-9.176.4.1
+
+.include 
diff --git a/sys/net/bpf_jitter.c b/sys/net/bpf_jitter.c
index cb644f4d95e..d024047582b 100644
--- a/sys/net/bpf_jitter.c
+++ b/sys/net/bpf_jitter.c
@@ -1,6 +1,6 @@
 /*-
  * Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
- * Copyright (C) 2005-2008 Jung-uk Kim 
+ * Copyright (C) 2005-2009 Jung-uk Kim 
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -42,14 +42,15 @@ __FBSDID("$FreeBSD$");
 #include 
 #else
 #include 
-#include 
+#include 
+#include 
 #include 
 #endif
 
 #include 
 #include 
 
-bpf_filter_func	bpf_jit_compile(struct bpf_insn *, u_int, int *);
+bpf_filter_func	bpf_jit_compile(struct bpf_insn *, u_int, size_t *);
 
 static u_int	bpf_jit_accept_all(u_char *, u_int, u_int);
 
@@ -60,27 +61,36 @@ SYSCTL_NODE(_net, OID_AUTO, bpf_jitter, CTLFLAG_RW, 0, "BPF JIT compiler");
 int bpf_jitter_enable = 1;
 SYSCTL_INT(_net_bpf_jitter, OID_AUTO, enable, CTLFLAG_RW,
     &bpf_jitter_enable, 0, "enable BPF JIT compiler");
+#endif
 
 bpf_jit_filter *
 bpf_jitter(struct bpf_insn *fp, int nins)
 {
 	bpf_jit_filter *filter;
 
-	/* Allocate the filter structure */
+	/* Allocate the filter structure. */
+#ifdef _KERNEL
 	filter = (struct bpf_jit_filter *)malloc(sizeof(*filter),
-	    M_BPFJIT, M_NOWAIT | M_ZERO);
+	    M_BPFJIT, M_NOWAIT);
+#else
+	filter = (struct bpf_jit_filter *)malloc(sizeof(*filter));
+#endif
 	if (filter == NULL)
 		return (NULL);
 
-	/* No filter means accept all */
+	/* No filter means accept all. */
 	if (fp == NULL || nins == 0) {
 		filter->func = bpf_jit_accept_all;
 		return (filter);
 	}
 
-	/* Create the binary */
-	if ((filter->func = bpf_jit_compile(fp, nins, filter->mem)) == NULL) {
+	/* Create the binary. */
+	if ((filter->func = bpf_jit_compile(fp, nins, &filter->size)) == NULL) {
+#ifdef _KERNEL
 		free(filter, M_BPFJIT);
+#else
+		free(filter);
+#endif
 		return (NULL);
 	}
 
@@ -91,46 +101,16 @@ void
 bpf_destroy_jit_filter(bpf_jit_filter *filter)
 {
 
+#ifdef _KERNEL
 	if (filter->func != bpf_jit_accept_all)
 		free(filter->func, M_BPFJIT);
 	free(filter, M_BPFJIT);
-}
 #else
-bpf_jit_filter *
-bpf_jitter(struct bpf_insn *fp, int nins)
-{
-	bpf_jit_filter *filter;
-
-	/* Allocate the filter structure */
-	filter = (struct bpf_jit_filter *)malloc(sizeof(*filter));
-	if (filter == NULL)
-		return (NULL);
-	memset(filter, 0, sizeof(*filter));
-
-	/* No filter means accept all */
-	if (fp == NULL || nins == 0) {
-		filter->func = bpf_jit_accept_all;
-		return (filter);
-	}
-
-	/* Create the binary */
-	if ((filter->func = bpf_jit_compile(fp, nins, filter->mem)) == NULL) {
-		free(filter);
-		return (NULL);
-	}
-
-	return (filter);
-}
-
-void
-bpf_destroy_jit_filter(bpf_jit_filter *filter)
-{
-
 	if (filter->func != bpf_jit_accept_all)
-		free(filter->func);
+		munmap(filter->func, filter->size);
 	free(filter);
-}
 #endif
+}
 
 static u_int
 bpf_jit_accept_all(__unused u_char *p, __unused u_int wirelen,
diff --git a/sys/net/bpf_jitter.h b/sys/net/bpf_jitter.h
index 04491b01ef0..90a1ff5fbb0 100644
--- a/sys/net/bpf_jitter.h
+++ b/sys/net/bpf_jitter.h
@@ -1,6 +1,6 @@
 /*-
  * Copyright (C) 2002-2003 NetGroup, Politecnico di Torino (Italy)
- * Copyright (C) 2005-2008 Jung-uk Kim 
+ * Copyright (C) 2005-2009 Jung-uk Kim 
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -53,8 +53,7 @@ typedef u_int (*bpf_filter_func)(u_char *, u_int, u_int);
 typedef struct bpf_jit_filter {
 	/* The native filtering binary, in the form of a bpf_filter_func. */
 	bpf_filter_func	func;
-
-	int		mem[BPF_MEMWORDS];	/* Scratch memory */
+	size_t		size;
 } bpf_jit_filter;
 
 /*
diff --git a/sys/net/if.c b/sys/net/if.c
index 4ba453af28b..ad77d654c5a 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -96,8 +96,6 @@ struct ifindex_entry {
 	struct  ifnet *ife_ifnet;
 };
 
-static int slowtimo_started;
-
 SYSCTL_NODE(_net, PF_LINK, link, CTLFLAG_RW, 0, "Link layers");
 SYSCTL_NODE(_net_link, 0, generic, CTLFLAG_RW, 0, "Generic link-management");
 
@@ -125,10 +123,8 @@ static int	ifconf(u_long, caddr_t);
 static void	if_freemulti(struct ifmultiaddr *);
 static void	if_init(void *);
 static void	if_grow(void);
-static void	if_check(void *);
 static void	if_route(struct ifnet *, int flag, int fam);
 static int	if_setflag(struct ifnet *, int, int, int *, int);
-static void	if_slowtimo(void *);
 static int	if_transmit(struct ifnet *ifp, struct mbuf *m);
 static void	if_unroute(struct ifnet *, int flag, int fam);
 static void	link_rtrequest(int, struct rtentry *, struct rt_addrinfo *);
@@ -185,11 +181,6 @@ struct sx ifnet_sxlock;
 static	if_com_alloc_t *if_com_alloc[256];
 static	if_com_free_t *if_com_free[256];
 
-/*
- * System initialization
- */
-SYSINIT(interface_check, SI_SUB_PROTO_IF, SI_ORDER_FIRST, if_check, NULL);
-
 MALLOC_DEFINE(M_IFNET, "ifnet", "interface internals");
 MALLOC_DEFINE(M_IFADDR, "ifaddr", "interface address");
 MALLOC_DEFINE(M_IFMADDR, "ether_multi", "link-level multicast address");
@@ -375,18 +366,6 @@ if_grow(void)
 	V_ifindex_table = e;
 }
 
-static void
-if_check(void *dummy __unused)
-{
-
-	/*
-	 * If at least one interface added during boot uses
-	 * if_watchdog then start the timer.
-	 */
-	if (slowtimo_started)
-		if_slowtimo(0);
-}
-
 /*
  * Allocate a struct ifnet and an index for an interface.  A layer 2
  * common structure will also be allocated if an allocation routine is
@@ -463,8 +442,6 @@ if_free_internal(struct ifnet *ifp)
 #ifdef MAC
 	mac_ifnet_destroy(ifp);
 #endif /* MAC */
-	if (ifp->if_description != NULL)
-		sbuf_delete(ifp->if_description);
 	IF_AFDATA_DESTROY(ifp);
 	IF_ADDR_LOCK_DESTROY(ifp);
 	ifq_delete(&ifp->if_snd);
@@ -672,18 +649,6 @@ if_attach_internal(struct ifnet *ifp, int vmove)
 
 	/* Announce the interface. */
 	rt_ifannouncemsg(ifp, IFAN_ARRIVAL);
-
-	if (!vmove && ifp->if_watchdog != NULL) {
-		if_printf(ifp,
-		    "WARNING: using obsoleted if_watchdog interface\n");
-
-		/*
-		 * Note that we need if_slowtimo().  If this happens after
-		 * boot, then call if_slowtimo() directly.
-		 */
-		if (atomic_cmpset_int(&slowtimo_started, 0, 1) && !cold)
-			if_slowtimo(0);
-	}
 }
 
 static void
@@ -1854,7 +1819,7 @@ if_route(struct ifnet *ifp, int flag, int fam)
 #endif
 }
 
-void	(*vlan_link_state_p)(struct ifnet *, int);	/* XXX: private from if_vlan */
+void	(*vlan_link_state_p)(struct ifnet *);	/* XXX: private from if_vlan */
 void	(*vlan_trunk_cap_p)(struct ifnet *);		/* XXX: private from if_vlan */
 
 /*
@@ -1880,19 +1845,12 @@ do_link_state_change(void *arg, int pending)
 {
 	struct ifnet *ifp = (struct ifnet *)arg;
 	int link_state = ifp->if_link_state;
-	int link;
 	CURVNET_SET(ifp->if_vnet);
 
 	/* Notify that the link state has changed. */
 	rt_ifmsg(ifp);
-	if (link_state == LINK_STATE_UP)
-		link = NOTE_LINKUP;
-	else if (link_state == LINK_STATE_DOWN)
-		link = NOTE_LINKDOWN;
-	else
-		link = NOTE_LINKINV;
 	if (ifp->if_vlantrunk != NULL)
-		(*vlan_link_state_p)(ifp, link);
+		(*vlan_link_state_p)(ifp);
 
 	if ((ifp->if_type == IFT_ETHER || ifp->if_type == IFT_L2VLAN) &&
 	    IFP2AC(ifp)->ac_netgraph != NULL)
@@ -1974,39 +1932,6 @@ if_qflush(struct ifnet *ifp)
 	IFQ_UNLOCK(ifq);
 }
 
-/*
- * Handle interface watchdog timer routines.  Called
- * from softclock, we decrement timers (if set) and
- * call the appropriate interface routine on expiration.
- *
- * XXXRW: Note that because timeouts run with Giant, if_watchdog() is called
- * holding Giant.
- */
-static void
-if_slowtimo(void *arg)
-{
-	VNET_ITERATOR_DECL(vnet_iter);
-	struct ifnet *ifp;
-	int s = splimp();
-
-	VNET_LIST_RLOCK_NOSLEEP();
-	IFNET_RLOCK_NOSLEEP();
-	VNET_FOREACH(vnet_iter) {
-		CURVNET_SET(vnet_iter);
-		TAILQ_FOREACH(ifp, &V_ifnet, if_link) {
-			if (ifp->if_timer == 0 || --ifp->if_timer)
-				continue;
-			if (ifp->if_watchdog)
-				(*ifp->if_watchdog)(ifp);
-		}
-		CURVNET_RESTORE();
-	}
-	IFNET_RUNLOCK_NOSLEEP();
-	VNET_LIST_RUNLOCK_NOSLEEP();
-	splx(s);
-	timeout(if_slowtimo, (void *)0, hz / IFNET_SLOWHZ);
-}
-
 /*
  * Map interface name to interface structure pointer, with or without
  * returning a reference.
@@ -2092,45 +2017,6 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)
 		ifr->ifr_phys = ifp->if_physical;
 		break;
 
-	case SIOCGIFDESCR:
-		IF_AFDATA_RLOCK(ifp);
-		if (ifp->if_description == NULL)
-			error = ENOMSG;
-		else
-			error = copystr(sbuf_data(ifp->if_description),
-					ifr->ifr_buffer.buffer,
-					ifr->ifr_buffer.length, NULL);
-		IF_AFDATA_RUNLOCK(ifp);
-		break;
-
-	case SIOCSIFDESCR:
-		error = priv_check(td, PRIV_NET_SETIFDESCR);
-		if (error)
-			return (error);
-
-		IF_AFDATA_WLOCK(ifp);
-		if (ifp->if_description == NULL) {
-			ifp->if_description = sbuf_new_auto();
-			if (ifp->if_description == NULL) {
-				error = ENOMEM;
-				IF_AFDATA_WUNLOCK(ifp);
-				break;
-			}
-		} else
-			sbuf_clear(ifp->if_description);
-
-		if (sbuf_copyin(ifp->if_description, ifr->ifr_buffer.buffer,
-				ifr->ifr_buffer.length) == -1)
-			error = EFAULT;
-
-		if (error == 0) {
-			sbuf_finish(ifp->if_description);
-			getmicrotime(&ifp->if_lastchange);
-		}
-		IF_AFDATA_WUNLOCK(ifp);
-
-		break;
-
 	case SIOCSIFFLAGS:
 		error = priv_check(td, PRIV_NET_SETIFFLAGS);
 		if (error)
@@ -2202,6 +2088,14 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)
 			return (EINVAL);
 		if (ifunit(new_name) != NULL)
 			return (EEXIST);
+
+		/*
+		 * XXX: Locking.  Nothing else seems to lock if_flags,
+		 * and there are numerous other races with the
+		 * ifunit() checks not being atomic with namespace
+		 * changes (renames, vmoves, if_attach, etc).
+		 */
+		ifp->if_flags |= IFF_RENAMING;
 		
 		/* Announce the departure of the interface. */
 		rt_ifannouncemsg(ifp, IFAN_DEPARTURE);
@@ -2236,6 +2130,8 @@ ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)
 		EVENTHANDLER_INVOKE(ifnet_arrival_event, ifp);
 		/* Announce the return of the interface. */
 		rt_ifannouncemsg(ifp, IFAN_ARRIVAL);
+
+		ifp->if_flags &= ~IFF_RENAMING;
 		break;
 
 #ifdef VIMAGE
diff --git a/sys/net/if.h b/sys/net/if.h
index 89f172bce9f..f94b54a1b62 100644
--- a/sys/net/if.h
+++ b/sys/net/if.h
@@ -150,6 +150,7 @@ struct if_data {
 #define	IFF_MONITOR	0x40000		/* (n) user-requested monitor mode */
 #define	IFF_STATICARP	0x80000		/* (n) static ARP */
 #define	IFF_DYING	0x200000	/* (n) interface is winding down */
+#define	IFF_RENAMING	0x400000	/* (n) interface is being renamed */
 
 /*
  * Old names for driver flags so that user space tools can continue to use
@@ -294,7 +295,6 @@ struct	ifreq {
 		struct	sockaddr ifru_addr;
 		struct	sockaddr ifru_dstaddr;
 		struct	sockaddr ifru_broadaddr;
-		struct { size_t length; caddr_t	buffer; } ifru_buffer;
 		short	ifru_flags[2];
 		short	ifru_index;
 		int	ifru_jid;
@@ -308,7 +308,6 @@ struct	ifreq {
 #define	ifr_addr	ifr_ifru.ifru_addr	/* address */
 #define	ifr_dstaddr	ifr_ifru.ifru_dstaddr	/* other end of p-to-p link */
 #define	ifr_broadaddr	ifr_ifru.ifru_broadaddr	/* broadcast address */
-#define	ifr_buffer	ifr_ifru.ifru_buffer	/* user supplied buffer with its length */
 #define	ifr_flags	ifr_ifru.ifru_flags[0]	/* flags (low 16 bits) */
 #define	ifr_flagshigh	ifr_ifru.ifru_flags[1]	/* flags (high 16 bits) */
 #define	ifr_jid		ifr_ifru.ifru_jid	/* jail/vnet */
diff --git a/sys/net/if_bridge.c b/sys/net/if_bridge.c
index 8e0e6e1e6a5..36fb9d8a7a2 100644
--- a/sys/net/if_bridge.c
+++ b/sys/net/if_bridge.c
@@ -134,6 +134,7 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
+#include 
 #include 
 
 /*
@@ -3038,20 +3039,28 @@ bridge_pfil(struct mbuf **mp, struct ifnet *bifp, struct ifnet *ifp, int dir)
 			goto bad;
 	}
 
-	if (V_ip_fw_chk_ptr && pfil_ipfw != 0 && dir == PFIL_OUT && ifp != NULL) {
-		struct dn_pkt_tag *dn_tag;
+	/* XXX this section is also in if_ethersubr.c */
+	// XXX PFIL_OUT or DIR_OUT ?
+	if (V_ip_fw_chk_ptr && pfil_ipfw != 0 &&
+			dir == PFIL_OUT && ifp != NULL) {
+		struct m_tag *mtag;
 
 		error = -1;
-		dn_tag = ip_dn_claim_tag(*mp);
-		if (dn_tag != NULL) {
-			if (dn_tag->rule != NULL && V_fw_one_pass)
-				/* packet already partially processed */
+		/* fetch the start point from existing tags, if any */
+		mtag = m_tag_locate(*mp, MTAG_IPFW_RULE, 0, NULL);
+		if (mtag == NULL) {
+			args.rule.slot = 0;
+		} else {
+			struct dn_pkt_tag *dn_tag;
+
+			/* XXX can we free the tag after use ? */
+			mtag->m_tag_id = PACKET_TAG_NONE;
+			dn_tag = (struct dn_pkt_tag *)(mtag + 1);
+			/* packet already partially processed ? */
+			if (dn_tag->rule.slot != 0 && V_fw_one_pass)
 				goto ipfwpass;
-			args.rule = dn_tag->rule; /* matching rule to restart */
-			args.rule_id = dn_tag->rule_id;
-			args.chain_id = dn_tag->chain_id;
-		} else
-			args.rule = NULL;
+			args.rule = dn_tag->rule;
+		}
 
 		args.m = *mp;
 		args.oif = ifp;
@@ -3077,7 +3086,7 @@ bridge_pfil(struct mbuf **mp, struct ifnet *bifp, struct ifnet *ifp, int dir)
 			 * packet will return to us via bridge_dummynet().
 			 */
 			args.oif = ifp;
-			ip_dn_io_ptr(mp, DN_TO_IFB_FWD, &args);
+			ip_dn_io_ptr(mp, DIR_FWD | PROTO_IFB, &args);
 			return (error);
 		}
 
diff --git a/sys/net/if_dead.c b/sys/net/if_dead.c
index b28ffc2c4d0..7c941d83052 100644
--- a/sys/net/if_dead.c
+++ b/sys/net/if_dead.c
@@ -70,12 +70,6 @@ ifdead_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
 	return (ENXIO);
 }
 
-static void
-ifdead_watchdog(struct ifnet *ifp)
-{
-
-}
-
 static int
 ifdead_resolvemulti(struct ifnet *ifp, struct sockaddr **llsa,
     struct sockaddr *sa)
@@ -107,7 +101,6 @@ if_dead(struct ifnet *ifp)
 	ifp->if_input = ifdead_input;
 	ifp->if_start = ifdead_start;
 	ifp->if_ioctl = ifdead_ioctl;
-	ifp->if_watchdog = ifdead_watchdog;
 	ifp->if_resolvemulti = ifdead_resolvemulti;
 	ifp->if_qflush = ifdead_qflush;
 	ifp->if_transmit = ifdead_transmit;
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index 5dff9bce55d..7b32e5b208e 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -71,6 +71,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #endif
@@ -466,19 +467,23 @@ ether_ipfw_chk(struct mbuf **m0, struct ifnet *dst, int shared)
 	struct mbuf *m;
 	int i;
 	struct ip_fw_args args;
-	struct dn_pkt_tag *dn_tag;
+	struct m_tag *mtag;
 
-	dn_tag = ip_dn_claim_tag(*m0);
+	/* fetch start point from rule, if any */
+	mtag = m_tag_locate(*m0, MTAG_IPFW_RULE, 0, NULL);
+	if (mtag == NULL) {
+		args.rule.slot = 0;
+	} else {
+		struct dn_pkt_tag *dn_tag;
 
-	if (dn_tag != NULL) {
-		if (dn_tag->rule != NULL && V_fw_one_pass)
+		/* XXX can we free it after use ? */
+		mtag->m_tag_id = PACKET_TAG_NONE;
+		dn_tag = (struct dn_pkt_tag *)(mtag + 1);
+		if (dn_tag->rule.slot != 0 && V_fw_one_pass)
 			/* dummynet packet, already partially processed */
 			return (1);
-		args.rule = dn_tag->rule;	/* matching rule to restart */
-		args.rule_id = dn_tag->rule_id;
-		args.chain_id = dn_tag->chain_id;
-	} else
-		args.rule = NULL;
+		args.rule = dn_tag->rule;
+	}
 
 	/*
 	 * I need some amt of data to be contiguous, and in case others need
@@ -529,6 +534,7 @@ ether_ipfw_chk(struct mbuf **m0, struct ifnet *dst, int shared)
 		return 1;
 
 	if (ip_dn_io_ptr && (i == IP_FW_DUMMYNET)) {
+		int dir;
 		/*
 		 * Pass the pkt to dummynet, which consumes it.
 		 * If shared, make a copy and keep the original.
@@ -544,7 +550,8 @@ ether_ipfw_chk(struct mbuf **m0, struct ifnet *dst, int shared)
 			 */
 			*m0 = NULL ;
 		}
-		ip_dn_io_ptr(&m, dst ? DN_TO_ETH_OUT: DN_TO_ETH_DEMUX, &args);
+		dir = PROTO_LAYER2 | (dst ? DIR_OUT : DIR_IN);
+		ip_dn_io_ptr(&m, dir, &args);
 		return 0;
 	}
 	/*
diff --git a/sys/net/if_llatbl.c b/sys/net/if_llatbl.c
index 4991c81d92c..5992f6d82e0 100644
--- a/sys/net/if_llatbl.c
+++ b/sys/net/if_llatbl.c
@@ -274,7 +274,9 @@ lla_rt_output(struct rt_msghdr *rtm, struct rt_addrinfo *info)
 #ifdef INET
 			if (dst->sa_family == AF_INET && 
 			    ((struct sockaddr_inarp *)dst)->sin_other != 0) {
-				struct rtentry *rt = rtalloc1(dst, 0, 0);
+				struct rtentry *rt;
+				((struct sockaddr_inarp *)dst)->sin_other = 0;
+				rt = rtalloc1(dst, 0, 0);
 				if (rt == NULL || !(rt->rt_flags & RTF_HOST)) {
 					log(LOG_INFO, "%s: RTM_ADD publish "
 					    "(proxy only) is invalid\n",
diff --git a/sys/net/if_llatbl.h b/sys/net/if_llatbl.h
index f54c78ad8a2..21357ebaef6 100644
--- a/sys/net/if_llatbl.h
+++ b/sys/net/if_llatbl.h
@@ -159,7 +159,7 @@ struct lltable {
 				    const struct sockaddr *mask);
 	struct llentry *	(*llt_lookup)(struct lltable *, u_int flags,
 				    const struct sockaddr *l3addr);
-	int			(*llt_rtcheck)(struct ifnet *,
+	int			(*llt_rtcheck)(struct ifnet *, u_int flags,
 				    const struct sockaddr *);
 	int			(*llt_dump)(struct lltable *,
 				     struct sysctl_req *);
diff --git a/sys/net/if_var.h b/sys/net/if_var.h
index 82e7aabdb99..28b5571e6a6 100644
--- a/sys/net/if_var.h
+++ b/sys/net/if_var.h
@@ -141,7 +141,7 @@ struct ifnet {
 	struct	carp_if *if_carp;	/* carp interface structure */
 	struct	bpf_if *if_bpf;		/* packet filter structure */
 	u_short	if_index;		/* numeric abbreviation for this if  */
-	short	if_timer;		/* time 'til if_watchdog called */
+	short	if_index_reserved;	/* spare space to grow if_index */
 	struct  ifvlantrunk *if_vlantrunk; /* pointer to 802.1q data */
 	int	if_flags;		/* up/down, broadcast, etc. */
 	int	if_capabilities;	/* interface features & capabilities */
@@ -161,8 +161,6 @@ struct ifnet {
 		(struct ifnet *);
 	int	(*if_ioctl)		/* ioctl routine */
 		(struct ifnet *, u_long, caddr_t);
-	void	(*if_watchdog)		/* timer routine */
-		(struct ifnet *);
 	void	(*if_init)		/* Init routine */
 		(void *);
 	int	(*if_resolvemulti)	/* validate/resolve multicast */
@@ -198,7 +196,6 @@ struct ifnet {
 	void	*if_pf_kif;
 	void	*if_lagg;		/* lagg glue */
 	u_char	 if_alloctype;		/* if_type at time of allocation */
-	struct sbuf *if_description;	/* interface description */
 
 	/*
 	 * Spare fields are added so that we can modify sensitive data
@@ -206,7 +203,7 @@ struct ifnet {
 	 * be used with care where binary compatibility is required.
 	 */
 	char	 if_cspare[3];
-	void	*if_pspare[7];
+	void	*if_pspare[8];
 	int	if_ispare[4];
 };
 
@@ -713,6 +710,7 @@ struct ifaddr {
 	struct mtx ifa_mtx;
 };
 #define	IFA_ROUTE	RTF_UP		/* route installed */
+#define IFA_RTSELF	RTF_HOST	/* loopback route to self installed */
 
 /* for compatibility with other BSDs */
 #define	ifa_list	ifa_link
@@ -846,7 +844,6 @@ void	if_ref(struct ifnet *);
 void	if_rele(struct ifnet *);
 int	if_setlladdr(struct ifnet *, const u_char *, int);
 void	if_up(struct ifnet *);
-/*void	ifinit(void);*/ /* declared in systm.h for main() */
 int	ifioctl(struct socket *, u_long, caddr_t, struct thread *);
 int	ifpromisc(struct ifnet *, int);
 struct	ifnet *ifunit(const char *);
diff --git a/sys/net/if_vlan.c b/sys/net/if_vlan.c
index bb9068284bf..6a8595642d6 100644
--- a/sys/net/if_vlan.c
+++ b/sys/net/if_vlan.c
@@ -188,7 +188,7 @@ static	int vlan_setmulti(struct ifnet *ifp);
 static	int vlan_unconfig(struct ifnet *ifp);
 static	int vlan_unconfig_locked(struct ifnet *ifp);
 static	int vlan_config(struct ifvlan *ifv, struct ifnet *p, uint16_t tag);
-static	void vlan_link_state(struct ifnet *ifp, int link);
+static	void vlan_link_state(struct ifnet *ifp);
 static	void vlan_capabilities(struct ifvlan *ifv);
 static	void vlan_trunk_capabilities(struct ifnet *ifp);
 
@@ -466,7 +466,8 @@ vlan_setmulti(struct ifnet *ifp)
  * A handler for network interface departure events.
  * Track departure of trunks here so that we don't access invalid
  * pointers or whatever if a trunk is ripped from under us, e.g.,
- * by ejecting its hot-plug card.
+ * by ejecting its hot-plug card.  However, if an ifnet is simply
+ * being renamed, then there's no need to tear down the state.
  */
 static void
 vlan_ifdetach(void *arg __unused, struct ifnet *ifp)
@@ -481,6 +482,10 @@ vlan_ifdetach(void *arg __unused, struct ifnet *ifp)
 	if (ifp->if_vlantrunk == NULL)
 		return;
 
+	/* If the ifnet is just being renamed, don't do anything. */
+	if (ifp->if_flags & IFF_RENAMING)
+		return;
+
 	VLAN_LOCK();
 	/*
 	 * OK, it's a trunk.  Loop over and detach all vlan's on it.
@@ -520,7 +525,7 @@ restart:
 extern	void (*vlan_input_p)(struct ifnet *, struct mbuf *);
 
 /* For if_link_state_change() eyes only... */
-extern	void (*vlan_link_state_p)(struct ifnet *, int);
+extern	void (*vlan_link_state_p)(struct ifnet *);
 
 static int
 vlan_modevent(module_t mod, int type, void *data)
@@ -577,7 +582,7 @@ vlan_clone_match_ethertag(struct if_clone *ifc, const char *name, int *tag)
 {
 	const char *cp;
 	struct ifnet *ifp;
-	int t = 0;
+	int t;
 
 	/* Check for . style interface names. */
 	IFNET_RLOCK_NOSLEEP();
@@ -587,13 +592,15 @@ vlan_clone_match_ethertag(struct if_clone *ifc, const char *name, int *tag)
 		if (strncmp(ifp->if_xname, name, strlen(ifp->if_xname)) != 0)
 			continue;
 		cp = name + strlen(ifp->if_xname);
-		if (*cp != '.')
+		if (*cp++ != '.')
 			continue;
-		for(; *cp != '\0'; cp++) {
-			if (*cp < '0' || *cp > '9')
-				continue;
+		if (*cp == '\0')
+			continue;
+		t = 0;
+		for(; *cp >= '0' && *cp <= '9'; cp++)
 			t = (t * 10) + (*cp - '0');
-		}
+		if (*cp != '\0')
+			continue;
 		if (tag != NULL)
 			*tag = t;
 		break;
@@ -1226,7 +1233,7 @@ vlan_setflags(struct ifnet *ifp, int status)
 
 /* Inform all vlans that their parent has changed link state */
 static void
-vlan_link_state(struct ifnet *ifp, int link)
+vlan_link_state(struct ifnet *ifp)
 {
 	struct ifvlantrunk *trunk = ifp->if_vlantrunk;
 	struct ifvlan *ifv;
diff --git a/sys/net/netisr.c b/sys/net/netisr.c
index c8da579834e..c63c627cd63 100644
--- a/sys/net/netisr.c
+++ b/sys/net/netisr.c
@@ -32,13 +32,13 @@ __FBSDID("$FreeBSD$");
  * dispatched) and asynchronous (deferred dispatch) processing of packets by
  * registered protocol handlers.  Callers pass a protocol identifier and
  * packet to netisr, along with a direct dispatch hint, and work will either
- * be immediately processed with the registered handler, or passed to a
- * kernel software interrupt (SWI) thread for deferred dispatch.  Callers
- * will generally select one or the other based on:
+ * be immediately processed by the registered handler, or passed to a
+ * software interrupt (SWI) thread for deferred dispatch.  Callers will
+ * generally select one or the other based on:
  *
- * - Might directly dispatching a netisr handler lead to code reentrance or
+ * - Whether directly dispatching a netisr handler lead to code reentrance or
  *   lock recursion, such as entering the socket code from the socket code.
- * - Might directly dispatching a netisr handler lead to recursive
+ * - Whether directly dispatching a netisr handler lead to recursive
  *   processing, such as when decapsulating several wrapped layers of tunnel
  *   information (IPSEC within IPSEC within ...).
  *
@@ -54,9 +54,9 @@ __FBSDID("$FreeBSD$");
  * more than one flow.
  *
  * netisr supports several policy variations, represented by the
- * NETISR_POLICY_* constants, allowing protocols to play a varying role in
+ * NETISR_POLICY_* constants, allowing protocols to play various roles in
  * identifying flows, assigning work to CPUs, etc.  These are described in
- * detail in netisr.h.
+ * netisr.h.
  */
 
 #include "opt_ddb.h"
@@ -101,7 +101,7 @@ __FBSDID("$FreeBSD$");
  *
  * Note: the NETISR_LOCKING define controls whether read locks are acquired
  * in packet processing paths requiring netisr registration stability.  This
- * is disabled by default as it can lead to a measurable performance
+ * is disabled by default as it can lead to measurable performance
  * degradation even with rmlocks (3%-6% for loopback ping-pong traffic), and
  * because netisr registration and unregistration is extremely rare at
  * runtime.  If it becomes more common, this decision should be revisited.
@@ -166,8 +166,9 @@ SYSCTL_INT(_net_isr, OID_AUTO, bindthreads, CTLFLAG_RD,
     &netisr_bindthreads, 0, "Bind netisr threads to CPUs.");
 
 /*
- * Limit per-workstream queues to at most net.isr.maxqlimit, both for initial
- * configuration and later modification using netisr_setqlimit().
+ * Limit per-workstream mbuf queue limits s to at most net.isr.maxqlimit,
+ * both for initial configuration and later modification using
+ * netisr_setqlimit().
  */
 #define	NETISR_DEFAULT_MAXQLIMIT	10240
 static u_int	netisr_maxqlimit = NETISR_DEFAULT_MAXQLIMIT;
@@ -177,9 +178,9 @@ SYSCTL_INT(_net_isr, OID_AUTO, maxqlimit, CTLFLAG_RD,
     "Maximum netisr per-protocol, per-CPU queue depth.");
 
 /*
- * The default per-workstream queue limit for protocols that don't initialize
- * the nh_qlimit field of their struct netisr_handler.  If this is set above
- * netisr_maxqlimit, we truncate it to the maximum during boot.
+ * The default per-workstream mbuf queue limit for protocols that don't
+ * initialize the nh_qlimit field of their struct netisr_handler.  If this is
+ * set above netisr_maxqlimit, we truncate it to the maximum during boot.
  */
 #define	NETISR_DEFAULT_DEFAULTQLIMIT	256
 static u_int	netisr_defaultqlimit = NETISR_DEFAULT_DEFAULTQLIMIT;
@@ -237,12 +238,14 @@ struct netisr_work {
 };
 
 /*
- * Workstreams hold a set of ordered work across each protocol, and are
+ * Workstreams hold a queue of ordered work across each protocol, and are
  * described by netisr_workstream.  Each workstream is associated with a
  * worker thread, which in turn is pinned to a CPU.  Work associated with a
  * workstream can be processd in other threads during direct dispatch;
  * concurrent processing is prevented by the NWS_RUNNING flag, which
- * indicates that a thread is already processing the work queue.
+ * indicates that a thread is already processing the work queue.  It is
+ * important to prevent a directly dispatched packet from "skipping ahead" of
+ * work already in the workstream queue.
  */
 struct netisr_workstream {
 	struct intr_event *nws_intr_event;	/* Handler for stream. */
@@ -317,7 +320,7 @@ netisr_get_cpuid(u_int cpunumber)
 }
 
 /*
- * The default implementation of -> CPU ID mapping.
+ * The default implementation of flow -> CPU ID mapping.
  *
  * Non-static so that protocols can use it to map their own work to specific
  * CPUs in a manner consistent to netisr for affinity purposes.
@@ -437,7 +440,7 @@ netisr_clearqdrops(const struct netisr_handler *nhp)
 }
 
 /*
- * Query the current drop counters across all workstreams for a protocol.
+ * Query current drop counters across all workstreams for a protocol.
  */
 void
 netisr_getqdrops(const struct netisr_handler *nhp, u_int64_t *qdropp)
@@ -472,7 +475,7 @@ netisr_getqdrops(const struct netisr_handler *nhp, u_int64_t *qdropp)
 }
 
 /*
- * Query the current queue limit for per-workstream queues for a protocol.
+ * Query current per-workstream queue limit for a protocol.
  */
 void
 netisr_getqlimit(const struct netisr_handler *nhp, u_int *qlimitp)
@@ -726,7 +729,7 @@ netisr_process_workstream_proto(struct netisr_workstream *nwsp, u_int proto)
 }
 
 /*
- * SWI handler for netisr -- processes prackets in a set of workstreams that
+ * SWI handler for netisr -- processes packets in a set of workstreams that
  * it owns, woken up by calls to NWS_SIGNAL().  If this workstream is already
  * being direct dispatched, go back to sleep and wait for the dispatching
  * thread to wake us up again.
@@ -794,6 +797,11 @@ netisr_queue_workstream(struct netisr_workstream *nwsp, u_int proto,
 		npwp->nw_len++;
 		if (npwp->nw_len > npwp->nw_watermark)
 			npwp->nw_watermark = npwp->nw_len;
+
+		/*
+		 * We must set the bit regardless of NWS_RUNNING, so that
+		 * swi_net() keeps calling netisr_process_workstream_proto().
+		 */
 		nwsp->nws_pendingbits |= (1 << proto);
 		if (!(nwsp->nws_flags & 
 		    (NWS_RUNNING | NWS_DISPATCHING | NWS_SCHEDULED))) {
@@ -874,7 +882,7 @@ netisr_queue(u_int proto, struct mbuf *m)
 }
 
 /*
- * Dispatch a packet for netisr processing, direct dispatch permitted by
+ * Dispatch a packet for netisr processing; direct dispatch is permitted by
  * calling context.
  */
 int
@@ -1068,12 +1076,12 @@ netisr_init(void *arg)
 	if (netisr_maxthreads < 1)
 		netisr_maxthreads = 1;
 	if (netisr_maxthreads > mp_ncpus) {
-		printf("netisr2: forcing maxthreads from %d to %d\n",
+		printf("netisr_init: forcing maxthreads from %d to %d\n",
 		    netisr_maxthreads, mp_ncpus);
 		netisr_maxthreads = mp_ncpus;
 	}
 	if (netisr_defaultqlimit > netisr_maxqlimit) {
-		printf("netisr2: forcing defaultqlimit from %d to %d\n",
+		printf("netisr_init: forcing defaultqlimit from %d to %d\n",
 		    netisr_defaultqlimit, netisr_maxqlimit);
 		netisr_defaultqlimit = netisr_maxqlimit;
 	}
@@ -1084,8 +1092,8 @@ netisr_init(void *arg)
 	 * polling disables parallel netisr workers.
 	 */
 	if (netisr_maxthreads != 1 || netisr_bindthreads != 0) {
-		printf("netisr2: forcing maxthreads to 1 and bindthreads to "
-		    "0 for device polling\n");
+		printf("netisr_init: forcing maxthreads to 1 and "
+		    "bindthreads to 0 for device polling\n");
 		netisr_maxthreads = 1;
 		netisr_bindthreads = 0;
 	}
diff --git a/sys/net/radix.c b/sys/net/radix.c
index 39b198eaf49..f092aa143c9 100644
--- a/sys/net/radix.c
+++ b/sys/net/radix.c
@@ -33,7 +33,6 @@
 /*
  * Routines to build and maintain radix trees for routing lookups.
  */
-#ifndef _RADIX_H_
 #include 
 #ifdef	_KERNEL
 #include 
@@ -41,20 +40,21 @@
 #include 
 #include 
 #include 
-#include 
-#else
-#include 
-#endif
 #include 
 #include 
-#endif
-
 #include "opt_mpath.h"
-
 #ifdef RADIX_MPATH
 #include 
 #endif
-
+#else /* !_KERNEL */
+#include 
+#include 
+#include 
+#define log(x, arg...)  fprintf(stderr, ## arg)
+#define panic(x)        fprintf(stderr, "PANIC: %s", x), exit(1)
+#define min(a, b) ((a) < (b) ? (a) : (b) )
+#include 
+#endif /* !_KERNEL */
 
 static int	rn_walktree_from(struct radix_node_head *h, void *a, void *m,
 		    walktree_f_t *f, void *w);
@@ -72,6 +72,8 @@ static struct radix_node_head *mask_rnhead;
 /*
  * Work area -- the following point to 3 buffers of size max_keylen,
  * allocated in this order in a block of memory malloc'ed by rn_init.
+ * rn_zeros, rn_ones are set in rn_init and used in readonly afterwards.
+ * addmask_key is used in rn_addmask in rw mode and not thread-safe.
  */
 static char *rn_zeros, *rn_ones, *addmask_key;
 
@@ -135,8 +137,9 @@ static int	rn_satisfies_leaf(char *trial, struct radix_node *leaf,
  * To make the assumption more explicit, we use the LEN() macro to access
  * this field. It is safe to pass an expression with side effects
  * to LEN() as the argument is evaluated only once.
+ * We cast the result to int as this is the dominant usage.
  */
-#define LEN(x) (*(const u_char *)(x))
+#define LEN(x) ( (int) (*(const u_char *)(x)) )
 
 /*
  * XXX THIS NEEDS TO BE FIXED
@@ -197,7 +200,7 @@ rn_refines(m_arg, n_arg)
 {
 	register caddr_t m = m_arg, n = n_arg;
 	register caddr_t lim, lim2 = lim = n + LEN(n);
-	int longer = LEN(n++) - (int)LEN(m++);
+	int longer = LEN(n++) - LEN(m++);
 	int masks_are_equal = 1;
 
 	if (longer > 0)
@@ -250,10 +253,10 @@ rn_satisfies_leaf(trial, leaf, skip)
 	char *cplim;
 	int length = min(LEN(cp), LEN(cp2));
 
-	if (cp3 == 0)
+	if (cp3 == NULL)
 		cp3 = rn_ones;
 	else
-		length = min(length, *(u_char *)cp3);
+		length = min(length, LEN(cp3));
 	cplim = cp + length; cp3 += skip; cp2 += skip;
 	for (cp += skip; cp < cplim; cp++, cp2++, cp3++)
 		if ((*cp ^ *cp2) & *cp3)
@@ -424,7 +427,7 @@ rn_insert(v_arg, head, dupentry, nodes)
 {
 	caddr_t v = v_arg;
 	struct radix_node *top = head->rnh_treetop;
-	int head_off = top->rn_offset, vlen = (int)LEN(v);
+	int head_off = top->rn_offset, vlen = LEN(v);
 	register struct radix_node *t = rn_search(v_arg, top);
 	register caddr_t cp = v + head_off;
 	register int b;
@@ -1159,16 +1162,11 @@ rn_inithead(head, off)
 }
 
 void
-rn_init()
+rn_init(int maxk)
 {
 	char *cp, *cplim;
-#ifdef _KERNEL
-	struct domain *dom;
 
-	for (dom = domains; dom; dom = dom->dom_next)
-		if (dom->dom_maxrtkey > max_keylen)
-			max_keylen = dom->dom_maxrtkey;
-#endif
+	max_keylen = maxk;
 	if (max_keylen == 0) {
 		log(LOG_ERR,
 		    "rn_init: radix functions require max_keylen be set\n");
diff --git a/sys/net/radix.h b/sys/net/radix.h
index e84072fb9ef..aa341b6caea 100644
--- a/sys/net/radix.h
+++ b/sys/net/radix.h
@@ -160,7 +160,7 @@ struct radix_node_head {
 #define	RADIX_NODE_HEAD_WLOCK_ASSERT(rnh) rw_assert(&(rnh)->rnh_lock, RA_WLOCKED)
 #endif /* _KERNEL */
 
-void	 rn_init(void);
+void	 rn_init(int);
 int	 rn_inithead(void **, int);
 int	 rn_refines(void *, void *);
 struct radix_node
diff --git a/sys/net/route.c b/sys/net/route.c
index 2fc53af45be..a938c9c1b7f 100644
--- a/sys/net/route.c
+++ b/sys/net/route.c
@@ -98,8 +98,6 @@ VNET_DEFINE(struct rtstat, rtstat);
 #define	V_rttrash	VNET(rttrash)
 #define	V_rtstat	VNET(rtstat)
 
-static void rt_maskedcopy(struct sockaddr *,
-	    struct sockaddr *, struct sockaddr *);
 
 /* compare two sockaddr structures */
 #define	sa_equal(a1, a2) (bcmp((a1), (a2), (a1)->sa_len) == 0)
@@ -171,13 +169,20 @@ rt_tables_get_rnh(int table, int fam)
 static void
 route_init(void)
 {
+	struct domain *dom;
+	int max_keylen = 0;
 
 	/* whack the tunable ints into  line. */
 	if (rt_numfibs > RT_MAXFIBS)
 		rt_numfibs = RT_MAXFIBS;
 	if (rt_numfibs == 0)
 		rt_numfibs = 1;
-	rn_init();	/* initialize all zeroes, all ones, mask table */
+
+	for (dom = domains; dom; dom = dom->dom_next)
+		if (dom->dom_maxrtkey > max_keylen)
+			max_keylen = dom->dom_maxrtkey;
+
+	rn_init(max_keylen);	/* init all zeroes, all ones, mask table */
 }
 SYSINIT(route_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, route_init, 0);
 
@@ -1315,7 +1320,7 @@ rt_setgate(struct rtentry *rt, struct sockaddr *dst, struct sockaddr *gate)
 	return (0);
 }
 
-static void
+void
 rt_maskedcopy(struct sockaddr *src, struct sockaddr *dst, struct sockaddr *netmask)
 {
 	register u_char *cp1 = (u_char *)src;
@@ -1497,7 +1502,11 @@ rtinit1(struct ifaddr *ifa, int cmd, int flags, int fibnum)
 			    ((struct sockaddr_dl *)rt->rt_gateway)->sdl_index =
 				rt->rt_ifp->if_index;
 			}
+			RT_ADDREF(rt);
+			RT_UNLOCK(rt);
 			rt_newaddrmsg(cmd, ifa, error, rt);
+			RT_LOCK(rt);
+			RT_REMREF(rt);
 			if (cmd == RTM_DELETE) {
 				/*
 				 * If we are deleting, and we found an entry,
diff --git a/sys/net/route.h b/sys/net/route.h
index 9a0bc63b69a..a8ae867f526 100644
--- a/sys/net/route.h
+++ b/sys/net/route.h
@@ -384,6 +384,7 @@ void	 rt_missmsg(int, struct rt_addrinfo *, int, int);
 void	 rt_newaddrmsg(int, struct ifaddr *, int, struct rtentry *);
 void	 rt_newmaddrmsg(int, struct ifmultiaddr *);
 int	 rt_setgate(struct rtentry *, struct sockaddr *, struct sockaddr *);
+void 	 rt_maskedcopy(struct sockaddr *, struct sockaddr *, struct sockaddr *);
 
 /*
  * Note the following locking behavior:
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index 4bbd6e32fa9..df4f9ae762b 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -60,6 +60,7 @@
 #include 
 
 #include 
+#include 
 #ifdef INET6
 #include 
 #endif
@@ -622,6 +623,27 @@ route_output(struct mbuf *m, struct socket *so)
 			}
 		}
 #endif
+		/*
+		 * If performing proxied L2 entry insertion, and
+		 * the actual PPP host entry is found, perform
+		 * another search to retrieve the prefix route of
+		 * the local end point of the PPP link.
+		 */
+		if ((rtm->rtm_flags & RTF_ANNOUNCE) &&
+		    (rt->rt_ifp->if_flags & IFF_POINTOPOINT)) {
+			struct sockaddr laddr;
+			rt_maskedcopy(rt->rt_ifa->ifa_addr,
+				      &laddr,
+				      rt->rt_ifa->ifa_netmask);
+			/* 
+			 * refactor rt and no lock operation necessary
+			 */
+			rt = (struct rtentry *)rnh->rnh_matchaddr(&laddr, rnh);
+			if (rt == NULL) {
+				RADIX_NODE_HEAD_RUNLOCK(rnh);
+				senderr(ESRCH);
+			}
+		} 
 		RT_LOCK(rt);
 		RT_ADDREF(rt);
 		RADIX_NODE_HEAD_RUNLOCK(rnh);
@@ -651,7 +673,7 @@ route_output(struct mbuf *m, struct socket *so)
 		report:
 			RT_LOCK_ASSERT(rt);
 			if ((rt->rt_flags & RTF_HOST) == 0
-			    ? jailed(curthread->td_ucred)
+			    ? jailed_without_vnet(curthread->td_ucred)
 			    : prison_if(curthread->td_ucred,
 			    rt_key(rt)) != 0) {
 				RT_UNLOCK(rt);
@@ -1312,7 +1334,7 @@ sysctl_dumpentry(struct radix_node *rn, void *vw)
 	if (w->w_op == NET_RT_FLAGS && !(rt->rt_flags & w->w_arg))
 		return 0;
 	if ((rt->rt_flags & RTF_HOST) == 0
-	    ? jailed(w->w_req->td->td_ucred)
+	    ? jailed_without_vnet(w->w_req->td->td_ucred)
 	    : prison_if(w->w_req->td->td_ucred, rt_key(rt)) != 0)
 		return (0);
 	bzero((caddr_t)&info, sizeof(info));
diff --git a/sys/net80211/ieee80211_hostap.c b/sys/net80211/ieee80211_hostap.c
index 240ea7cb30f..6083cf5449d 100644
--- a/sys/net80211/ieee80211_hostap.c
+++ b/sys/net80211/ieee80211_hostap.c
@@ -1252,7 +1252,7 @@ ieee80211_parse_wpa(struct ieee80211vap *vap, const uint8_t *frm,
 		return IEEE80211_REASON_IE_INVALID;
 	}
 	frm += 6, len -= 4;		/* NB: len is payload only */
-	/* NB: iswapoui already validated the OUI and type */
+	/* NB: iswpaoui already validated the OUI and type */
 	w = LE_READ_2(frm);
 	if (w != WPA_VERSION) {
 		IEEE80211_DISCARD_IE(vap,
diff --git a/sys/netgraph/atm/uni/ng_uni.c b/sys/netgraph/atm/uni/ng_uni.c
index e6fa04ba55a..5b2a7ff712a 100644
--- a/sys/netgraph/atm/uni/ng_uni.c
+++ b/sys/netgraph/atm/uni/ng_uni.c
@@ -771,18 +771,18 @@ struct unimem_debug {
 LIST_HEAD(unimem_debug_list, unimem_debug);
 
 static struct unimem_debug_list nguni_freemem[UNIMEM_TYPES] = {
-    LIST_HEAD_INITIALIZER(unimem_debug),
-    LIST_HEAD_INITIALIZER(unimem_debug),
-    LIST_HEAD_INITIALIZER(unimem_debug),
-    LIST_HEAD_INITIALIZER(unimem_debug),
-    LIST_HEAD_INITIALIZER(unimem_debug),
+    LIST_HEAD_INITIALIZER(nguni_freemem[0]),
+    LIST_HEAD_INITIALIZER(nguni_freemem[1]),
+    LIST_HEAD_INITIALIZER(nguni_freemem[2]),
+    LIST_HEAD_INITIALIZER(nguni_freemem[3]),
+    LIST_HEAD_INITIALIZER(nguni_freemem[4]),
 };
 static struct unimem_debug_list nguni_usedmem[UNIMEM_TYPES] = {
-    LIST_HEAD_INITIALIZER(unimem_debug),
-    LIST_HEAD_INITIALIZER(unimem_debug),
-    LIST_HEAD_INITIALIZER(unimem_debug),
-    LIST_HEAD_INITIALIZER(unimem_debug),
-    LIST_HEAD_INITIALIZER(unimem_debug),
+    LIST_HEAD_INITIALIZER(nguni_usedmem[0]),
+    LIST_HEAD_INITIALIZER(nguni_usedmem[1]),
+    LIST_HEAD_INITIALIZER(nguni_usedmem[2]),
+    LIST_HEAD_INITIALIZER(nguni_usedmem[3]),
+    LIST_HEAD_INITIALIZER(nguni_usedmem[4]),
 };
 
 static struct mtx nguni_unilist_mtx;
diff --git a/sys/netgraph/ng_base.c b/sys/netgraph/ng_base.c
index 65707b20914..fdfe878dbc9 100644
--- a/sys/netgraph/ng_base.c
+++ b/sys/netgraph/ng_base.c
@@ -120,7 +120,7 @@ struct ng_node ng_deadnode = {
 	0,	/* numhooks */
 	NULL,	/* private */
 	0,	/* ID */
-	LIST_HEAD_INITIALIZER(ng_deadnode.hooks),
+	LIST_HEAD_INITIALIZER(ng_deadnode.nd_hooks),
 	{},	/* all_nodes list entry */
 	{},	/* id hashtable list entry */
 	{	0,
diff --git a/sys/netgraph/ng_bridge.c b/sys/netgraph/ng_bridge.c
index c6f41836cca..35e13927812 100644
--- a/sys/netgraph/ng_bridge.c
+++ b/sys/netgraph/ng_bridge.c
@@ -75,8 +75,9 @@
 #include 
 
 #include 
+#if 0	/* not used yet */
 #include 
-
+#endif
 #include 
 #include 
 #include 
diff --git a/sys/netgraph/ng_ipfw.c b/sys/netgraph/ng_ipfw.c
index 46bac8eb9bc..0112f66b69d 100644
--- a/sys/netgraph/ng_ipfw.c
+++ b/sys/netgraph/ng_ipfw.c
@@ -44,6 +44,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 
@@ -220,21 +221,23 @@ ng_ipfw_findhook1(node_p node, u_int16_t rulenum)
 static int
 ng_ipfw_rcvdata(hook_p hook, item_p item)
 {
-	struct ng_ipfw_tag	*ngit;
+	struct ipfw_rule_ref	*tag;
 	struct mbuf *m;
 
 	NGI_GET_M(item, m);
 	NG_FREE_ITEM(item);
 
-	if ((ngit = (struct ng_ipfw_tag *)m_tag_locate(m, NGM_IPFW_COOKIE, 0,
-	    NULL)) == NULL) {
+	tag = (struct ipfw_rule_ref *)
+		m_tag_locate(m, MTAG_IPFW_RULE, 0, NULL);
+	if (tag == NULL) {
 		NG_FREE_M(m);
 		return (EINVAL);	/* XXX: find smth better */
 	};
 
-	switch (ngit->dir) {
-	case NG_IPFW_OUT:
-	    {
+	if (tag->info & IPFW_INFO_IN) {
+		ip_input(m);
+		return (0);
+	} else {
 		struct ip *ip;
 
 		if (m->m_len < sizeof(struct ip) &&
@@ -243,27 +246,16 @@ ng_ipfw_rcvdata(hook_p hook, item_p item)
 
 		ip = mtod(m, struct ip *);
 
-		ip->ip_len = ntohs(ip->ip_len);
-		ip->ip_off = ntohs(ip->ip_off);
+		SET_HOST_IPLEN(ip);
 
 		return ip_output(m, NULL, NULL, IP_FORWARDING, NULL, NULL);
-	    }
-	case NG_IPFW_IN:
-		ip_input(m);
-		return (0);
-	default:
-		panic("ng_ipfw_rcvdata: bad dir %u", ngit->dir);
 	}	
-
-	/* not reached */
-	return (0);
 }
 
 static int
 ng_ipfw_input(struct mbuf **m0, int dir, struct ip_fw_args *fwa, int tee)
 {
 	struct mbuf *m;
-	struct ng_ipfw_tag *ngit;
 	struct ip *ip;
 	hook_p	hook;
 	int error = 0;
@@ -272,7 +264,7 @@ ng_ipfw_input(struct mbuf **m0, int dir, struct ip_fw_args *fwa, int tee)
 	 * Node must be loaded and corresponding hook must be present.
 	 */
 	if (fw_node == NULL || 
-	   (hook = ng_ipfw_findhook1(fw_node, fwa->cookie)) == NULL) {
+	   (hook = ng_ipfw_findhook1(fw_node, fwa->rule.info)) == NULL) {
 		if (tee == 0)
 			m_freem(*m0);
 		return (ESRCH);		/* no hook associated with this rule */
@@ -284,20 +276,21 @@ ng_ipfw_input(struct mbuf **m0, int dir, struct ip_fw_args *fwa, int tee)
 	 * a copy of a packet and forward it into netgraph without a tag.
 	 */
 	if (tee == 0) {
+		struct m_tag *tag;
+		struct ipfw_rule_ref *r;
 		m = *m0;
 		*m0 = NULL;	/* it belongs now to netgraph */
 
-		if ((ngit = (struct ng_ipfw_tag *)m_tag_alloc(NGM_IPFW_COOKIE,
-		    0, TAGSIZ, M_NOWAIT|M_ZERO)) == NULL) {
+		tag = m_tag_alloc(MTAG_IPFW_RULE, 0, sizeof(*r),
+			M_NOWAIT|M_ZERO);
+		if (tag == NULL) {
 			m_freem(m);
 			return (ENOMEM);
 		}
-		ngit->rule = fwa->rule;
-		ngit->rule_id = fwa->rule_id;
-		ngit->chain_id = fwa->chain_id;
-		ngit->dir = dir;
-		ngit->ifp = fwa->oif;
-		m_tag_prepend(m, &ngit->mt);
+		r = (struct ipfw_rule_ref *)(tag + 1);
+		*r = fwa->rule;
+		r->info = dir ? IPFW_INFO_IN : IPFW_INFO_OUT;
+		m_tag_prepend(m, tag);
 
 	} else
 		if ((m = m_dup(*m0, M_DONTWAIT)) == NULL)
@@ -308,8 +301,6 @@ ng_ipfw_input(struct mbuf **m0, int dir, struct ip_fw_args *fwa, int tee)
 		return (EINVAL);
 
 	ip = mtod(m, struct ip *);
-	ip->ip_len = htons(ip->ip_len);
-	ip->ip_off = htons(ip->ip_off);
 
 	NG_SEND_DATA_ONLY(error, hook, m);
 
diff --git a/sys/netgraph/ng_ipfw.h b/sys/netgraph/ng_ipfw.h
index 29039f2f7a6..c2cab6a0396 100644
--- a/sys/netgraph/ng_ipfw.h
+++ b/sys/netgraph/ng_ipfw.h
@@ -26,26 +26,8 @@
  * $FreeBSD$
  */
 
+#ifndef _NG_IPFW_H
+#define _NG_IPFW_H
 #define NG_IPFW_NODE_TYPE    "ipfw"
 #define NGM_IPFW_COOKIE      1105988990
-
-#ifdef _KERNEL
-
-typedef int ng_ipfw_input_t(struct mbuf **, int, struct ip_fw_args *, int);
-extern	ng_ipfw_input_t	*ng_ipfw_input_p;
-#define	NG_IPFW_LOADED	(ng_ipfw_input_p != NULL)
-
-struct ng_ipfw_tag {
-	struct m_tag	mt;		/* tag header */
-	struct ip_fw	*rule;		/* matching rule */
-	uint32_t	rule_id;	/* matching rule id */
-	uint32_t	chain_id;	/* ruleset id */
-	struct ifnet	*ifp;		/* interface, for ip_output */
-	int		dir;
-#define	NG_IPFW_OUT	0
-#define	NG_IPFW_IN	1
-};
-
-#define	TAGSIZ	(sizeof(struct ng_ipfw_tag) - sizeof(struct m_tag))
-
-#endif /* _KERNEL */
+#endif /* _NG_IPFW_H */
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index 4e26ebc2e33..97152a72dbe 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -175,18 +175,24 @@ arptimer(void *arg)
 	CURVNET_SET(ifp->if_vnet);
 	IF_AFDATA_LOCK(ifp);
 	LLE_WLOCK(lle);
-	if ((!callout_pending(&lle->la_timer) &&
-	    callout_active(&lle->la_timer))) {
-		(void) llentry_free(lle);
-		ARPSTAT_INC(timeouts);
-	} 
-#ifdef DIAGNOSTIC
+	if (lle->la_flags & LLE_STATIC)
+		LLE_WUNLOCK(lle);
 	else {
-		struct sockaddr *l3addr = L3_ADDR(lle);
-		log(LOG_INFO, "arptimer issue: %p, IPv4 address: \"%s\"\n", lle,
-		    inet_ntoa(((const struct sockaddr_in *)l3addr)->sin_addr));
-	}
+		if (!callout_pending(&lle->la_timer) &&
+		    callout_active(&lle->la_timer)) {
+			(void) llentry_free(lle);
+			ARPSTAT_INC(timeouts);
+		} 
+#ifdef DIAGNOSTIC
+		else {
+			struct sockaddr *l3addr = L3_ADDR(lle);
+			log(LOG_INFO, 
+			    "arptimer issue: %p, IPv4 address: \"%s\"\n", lle,
+			    inet_ntoa(
+			        ((const struct sockaddr_in *)l3addr)->sin_addr));
+		}
 #endif
+	}
 	IF_AFDATA_UNLOCK(ifp);
 	CURVNET_RESTORE();
 }
@@ -372,8 +378,8 @@ retry:
 	if (la->la_asked < V_arp_maxtries)
 		error = EWOULDBLOCK;	/* First request. */
 	else
-		error =
-			(rt0->rt_flags & RTF_GATEWAY) ? EHOSTUNREACH : EHOSTDOWN;
+		error = rt0 != NULL && (rt0->rt_flags & RTF_GATEWAY) ?
+		    EHOSTUNREACH : EHOSTDOWN;
 
 	if (renew) {
 		LLE_ADDREF(la);
diff --git a/sys/netinet/in.c b/sys/netinet/in.c
index 09f2f449b19..a0d6ac9e213 100644
--- a/sys/netinet/in.c
+++ b/sys/netinet/in.c
@@ -924,9 +924,25 @@ in_ifinit(struct ifnet *ifp, struct in_ifaddr *ia, struct sockaddr_in *sin,
 	/*
 	 * add a loopback route to self
 	 */
-	if (V_useloopback && !(ifp->if_flags & IFF_LOOPBACK))
-		error = ifa_add_loopback_route((struct ifaddr *)ia, 
+	if (V_useloopback && !(ifp->if_flags & IFF_LOOPBACK)) {
+		struct route ia_ro;
+
+		bzero(&ia_ro, sizeof(ia_ro));
+		*((struct sockaddr_in *)(&ia_ro.ro_dst)) = ia->ia_addr;
+		rtalloc_ign_fib(&ia_ro, 0, 0);
+		if ((ia_ro.ro_rt != NULL) && (ia_ro.ro_rt->rt_ifp != NULL) &&
+		    (ia_ro.ro_rt->rt_ifp == V_loif)) {
+			RT_LOCK(ia_ro.ro_rt);
+			RT_ADDREF(ia_ro.ro_rt);
+			RTFREE_LOCKED(ia_ro.ro_rt);
+		} else
+			error = ifa_add_loopback_route((struct ifaddr *)ia, 
 				       (struct sockaddr *)&ia->ia_addr);
+		if (error == 0)
+			ia->ia_flags |= IFA_RTSELF;
+		if (ia_ro.ro_rt != NULL)
+			RTFREE(ia_ro.ro_rt);
+	}
 
 	return (error);
 }
@@ -934,6 +950,49 @@ in_ifinit(struct ifnet *ifp, struct in_ifaddr *ia, struct sockaddr_in *sin,
 #define rtinitflags(x) \
 	((((x)->ia_ifp->if_flags & (IFF_LOOPBACK | IFF_POINTOPOINT)) != 0) \
 	    ? RTF_HOST : 0)
+
+/*
+ * Generate a routing message when inserting or deleting 
+ * an interface address alias.
+ */
+static void in_addralias_rtmsg(int cmd, struct in_addr *prefix, 
+    struct in_ifaddr *target)
+{
+	struct route pfx_ro;
+	struct sockaddr_in *pfx_addr;
+	struct rtentry msg_rt;
+
+	/* QL: XXX
+	 * This is a bit questionable because there is no
+	 * additional route entry added/deleted for an address
+	 * alias. Therefore this route report is inaccurate.
+	 */
+	bzero(&pfx_ro, sizeof(pfx_ro));
+	pfx_addr = (struct sockaddr_in *)(&pfx_ro.ro_dst);
+	pfx_addr->sin_len = sizeof(*pfx_addr);
+	pfx_addr->sin_family = AF_INET;
+	pfx_addr->sin_addr = *prefix;
+	rtalloc_ign_fib(&pfx_ro, 0, 0);
+	if (pfx_ro.ro_rt != NULL) {
+		msg_rt = *pfx_ro.ro_rt;
+
+		/* QL: XXX
+		 * Point the gateway to the new interface
+		 * address as if a new prefix route entry has 
+		 * been added through the new address alias. 
+		 * All other parts of the rtentry is accurate, 
+		 * e.g., rt_key, rt_mask, rt_ifp etc.
+		 */
+		msg_rt.rt_gateway = 
+			(struct sockaddr *)&target->ia_addr;
+		rt_newaddrmsg(cmd, 
+			      (struct ifaddr *)target,
+			      0, &msg_rt);
+		RTFREE(pfx_ro.ro_rt);
+	}
+	return;
+}
+
 /*
  * Check if we have a route for the given prefix already or add one accordingly.
  */
@@ -981,40 +1040,7 @@ in_addprefix(struct in_ifaddr *target, int flags)
 				IN_IFADDR_RUNLOCK();
 				return (EEXIST);
 			} else {
-				struct route pfx_ro;
-				struct sockaddr_in *pfx_addr;
-				struct rtentry msg_rt;
-
-				/* QL: XXX
-				 * This is a bit questionable because there is no
-				 * additional route entry added for an address alias.
-				 * Therefore this route report is inaccurate. Perhaps
-				 * it's better to supply a empty rtentry as how it
-				 * is done in in_scrubprefix().
-				 */
-				bzero(&pfx_ro, sizeof(pfx_ro));
-				pfx_addr = (struct sockaddr_in *)(&pfx_ro.ro_dst);
-				pfx_addr->sin_len = sizeof(*pfx_addr);
-				pfx_addr->sin_family = AF_INET;
-				pfx_addr->sin_addr = prefix;
-				rtalloc_ign_fib(&pfx_ro, 0, 0);
-				if (pfx_ro.ro_rt != NULL) {
-					msg_rt = *pfx_ro.ro_rt;
-					/* QL: XXX
-					 * Point the gateway to the given interface
-					 * address as if a new prefix route entry has 
-					 * been added through the new address alias. 
-					 * All other parts of the rtentry is accurate, 
-					 * e.g., rt_key, rt_mask, rt_ifp etc.
-					 */
-					msg_rt.rt_gateway = 
-						(struct sockaddr *)&ia->ia_addr;
-					rt_newaddrmsg(RTM_ADD, 
-						      (struct ifaddr *)target,
-						      0, &msg_rt);
-					RTFREE(pfx_ro.ro_rt);
-				}
-
+				in_addralias_rtmsg(RTM_ADD, &prefix, target);
 				IN_IFADDR_RUNLOCK();
 				return (0);
 			}
@@ -1043,7 +1069,7 @@ in_scrubprefix(struct in_ifaddr *target)
 {
 	struct in_ifaddr *ia;
 	struct in_addr prefix, mask, p;
-	int error;
+	int error = 0;
 	struct sockaddr_in prefix0, mask0;
 
 	/*
@@ -1057,27 +1083,32 @@ in_scrubprefix(struct in_ifaddr *target)
 	 * deletion is unconditional.
 	 */
 	if ((target->ia_addr.sin_addr.s_addr != INADDR_ANY) &&
-	    !(target->ia_ifp->if_flags & IFF_LOOPBACK)) {
-		error = ifa_del_loopback_route((struct ifaddr *)target,
+	    !(target->ia_ifp->if_flags & IFF_LOOPBACK) &&
+	    (target->ia_flags & IFA_RTSELF)) {
+		struct route ia_ro;
+		int freeit = 0;
+
+		bzero(&ia_ro, sizeof(ia_ro));
+		*((struct sockaddr_in *)(&ia_ro.ro_dst)) = target->ia_addr;
+		rtalloc_ign_fib(&ia_ro, 0, 0);
+		if ((ia_ro.ro_rt != NULL) && (ia_ro.ro_rt->rt_ifp != NULL) &&
+		    (ia_ro.ro_rt->rt_ifp == V_loif)) {
+			RT_LOCK(ia_ro.ro_rt);
+			if (ia_ro.ro_rt->rt_refcnt <= 1)
+				freeit = 1;
+			else
+				RT_REMREF(ia_ro.ro_rt);
+			RTFREE_LOCKED(ia_ro.ro_rt);
+		}
+		if (freeit)
+			error = ifa_del_loopback_route((struct ifaddr *)target,
 				       (struct sockaddr *)&target->ia_addr);
+		if (error == 0)
+			target->ia_flags &= ~IFA_RTSELF;
 		/* remove arp cache */
 		arp_ifscrub(target->ia_ifp, IA_SIN(target)->sin_addr.s_addr);
 	}
 
-	if ((target->ia_flags & IFA_ROUTE) == 0) {
-		struct rtentry rt;
-
-		/* QL: XXX
-		 * Report a blank rtentry when a route has not been
-		 * installed for the given interface address.
-		 */
-		bzero(&rt, sizeof(rt));
-		rt_newaddrmsg(RTM_DELETE, 
-			      (struct ifaddr *)target,
-			      0, &rt);
-		return (0);
-	}
-
 	if (rtinitflags(target))
 		prefix = target->ia_dstaddr.sin_addr;
 	else {
@@ -1086,6 +1117,11 @@ in_scrubprefix(struct in_ifaddr *target)
 		prefix.s_addr &= mask.s_addr;
 	}
 
+	if ((target->ia_flags & IFA_ROUTE) == 0) {
+		in_addralias_rtmsg(RTM_DELETE, &prefix, target);
+		return (0);
+	}
+
 	IN_IFADDR_RLOCK();
 	TAILQ_FOREACH(ia, &V_in_ifaddrhead, ia_link) {
 		if (rtinitflags(ia))
@@ -1317,7 +1353,7 @@ in_lltable_prefix_free(struct lltable *llt,
 
 
 static int
-in_lltable_rtcheck(struct ifnet *ifp, const struct sockaddr *l3addr)
+in_lltable_rtcheck(struct ifnet *ifp, u_int flags, const struct sockaddr *l3addr)
 {
 	struct rtentry *rt;
 
@@ -1326,7 +1362,8 @@ in_lltable_rtcheck(struct ifnet *ifp, const struct sockaddr *l3addr)
 
 	/* XXX rtalloc1 should take a const param */
 	rt = rtalloc1(__DECONST(struct sockaddr *, l3addr), 0, 0);
-	if (rt == NULL || (rt->rt_flags & RTF_GATEWAY) || rt->rt_ifp != ifp) {
+	if (rt == NULL || (rt->rt_flags & RTF_GATEWAY) || 
+	    ((rt->rt_ifp != ifp) && !(flags & LLE_PUB))) {
 #ifdef DIAGNOSTIC
 		log(LOG_INFO, "IPv4 address: \"%s\" is not on the network\n",
 		    inet_ntoa(((const struct sockaddr_in *)l3addr)->sin_addr));
@@ -1378,7 +1415,7 @@ in_lltable_lookup(struct lltable *llt, u_int flags, const struct sockaddr *l3add
 		 * verify this.
 		 */
 		if (!(flags & LLE_IFADDR) &&
-		    in_lltable_rtcheck(ifp, l3addr) != 0)
+		    in_lltable_rtcheck(ifp, flags, l3addr) != 0)
 			goto done;
 
 		lle = in_lltable_new(l3addr, flags);
diff --git a/sys/netinet/in.h b/sys/netinet/in.h
index 1f60bce04a2..4f4765819d2 100644
--- a/sys/netinet/in.h
+++ b/sys/netinet/in.h
@@ -423,12 +423,20 @@ __END_DECLS
 #define	IP_ONESBCAST		23   /* bool: send all-ones broadcast */
 #define	IP_BINDANY		24   /* bool: allow bind to any address */
 
+/*
+ * Options for controlling the firewall and dummynet.
+ * Historical options (from 40 to 64) will eventually be
+ * replaced by only two options, IP_FW3 and IP_DUMMYNET3.
+ */
 #define	IP_FW_TABLE_ADD		40   /* add entry */
 #define	IP_FW_TABLE_DEL		41   /* delete entry */
 #define	IP_FW_TABLE_FLUSH	42   /* flush table */
 #define	IP_FW_TABLE_GETSIZE	43   /* get table size */
 #define	IP_FW_TABLE_LIST	44   /* list table contents */
 
+#define	IP_FW3			48   /* generic ipfw v.3 sockopts */
+#define	IP_DUMMYNET3		49   /* generic dummynet v.3 sockopts */
+
 #define	IP_FW_ADD		50   /* add a firewall rule to chain */
 #define	IP_FW_DEL		51   /* delete a firewall rule from chain */
 #define	IP_FW_FLUSH		52   /* flush firewall rule chain */
@@ -713,6 +721,7 @@ int	 in_broadcast(struct in_addr, struct ifnet *);
 int	 in_canforward(struct in_addr);
 int	 in_localaddr(struct in_addr);
 int	 in_localip(struct in_addr);
+int	 inet_aton(const char *, struct in_addr *); /* in libkern */
 char	*inet_ntoa(struct in_addr); /* in libkern */
 char	*inet_ntoa_r(struct in_addr ina, char *buf); /* in libkern */
 void	 in_ifdetach(struct ifnet *);
@@ -725,6 +734,32 @@ void	 in_ifdetach(struct ifnet *);
 #define	sintosa(sin)	((struct sockaddr *)(sin))
 #define	ifatoia(ifa)	((struct in_ifaddr *)(ifa))
 
+/*
+ * Historically, BSD keeps ip_len and ip_off in host format
+ * when doing layer 3 processing, and this often requires
+ * to translate the format back and forth.
+ * To make the process explicit, we define a couple of macros
+ * that also take into account the fact that at some point
+ * we may want to keep those fields always in net format.
+ */
+
+#if (BYTE_ORDER == BIG_ENDIAN) || defined(HAVE_NET_IPLEN)
+#define SET_NET_IPLEN(p)	do {} while (0)
+#define SET_HOST_IPLEN(p)	do {} while (0)
+#else
+#define SET_NET_IPLEN(p)	do {		\
+	struct ip *h_ip = (p);			\
+	h_ip->ip_len = htons(h_ip->ip_len);	\
+	h_ip->ip_off = htons(h_ip->ip_off);	\
+	} while (0)
+
+#define SET_HOST_IPLEN(p)	do {		\
+	struct ip *h_ip = (p);			\
+	h_ip->ip_len = ntohs(h_ip->ip_len);	\
+	h_ip->ip_off = ntohs(h_ip->ip_off);	\
+	} while (0)
+#endif /* !HAVE_NET_IPLEN */
+
 #endif /* _KERNEL */
 
 /* INET6 stuff */
diff --git a/sys/netinet/in_mcast.c b/sys/netinet/in_mcast.c
index 2ef6d3a4e57..1f658da6d83 100644
--- a/sys/netinet/in_mcast.c
+++ b/sys/netinet/in_mcast.c
@@ -1967,7 +1967,7 @@ inp_join_group(struct inpcb *inp, struct sockopt *sopt)
 		imf = &imo->imo_mfilters[idx];
 		if (ssa->ss.ss_family != AF_UNSPEC) {
 			/*
-			 * MCAST_JOIN_SOURCE on an exclusive membership
+			 * MCAST_JOIN_SOURCE_GROUP on an exclusive membership
 			 * is an error. On an existing inclusive membership,
 			 * it just adds the source to the filter list.
 			 */
diff --git a/sys/netinet/ip_carp.c b/sys/netinet/ip_carp.c
index e3ffe5a4a6d..55fbb02fa38 100644
--- a/sys/netinet/ip_carp.c
+++ b/sys/netinet/ip_carp.c
@@ -550,7 +550,7 @@ carp_input(struct mbuf *m, int hlen)
 	/* check if received on a valid carp interface */
 	if (m->m_pkthdr.rcvif->if_carp == NULL) {
 		CARPSTATS_INC(carps_badif);
-		CARP_LOG("carp_input: packet received on non-carp "
+		CARP_DEBUG("carp_input: packet received on non-carp "
 		    "interface: %s\n",
 		    m->m_pkthdr.rcvif->if_xname);
 		m_freem(m);
@@ -571,7 +571,7 @@ carp_input(struct mbuf *m, int hlen)
 
 	if (m->m_pkthdr.len < iplen + sizeof(*ch)) {
 		CARPSTATS_INC(carps_badlen);
-		CARP_LOG("carp_input: received len %zd < "
+		CARP_DEBUG("carp_input: received len %zd < "
 		    "sizeof(struct carp_header) on %s\n",
 		    m->m_len - sizeof(struct ip),
 		    m->m_pkthdr.rcvif->if_xname);
@@ -582,7 +582,7 @@ carp_input(struct mbuf *m, int hlen)
 	if (iplen + sizeof(*ch) < m->m_len) {
 		if ((m = m_pullup(m, iplen + sizeof(*ch))) == NULL) {
 			CARPSTATS_INC(carps_hdrops);
-			CARP_LOG("carp_input: pullup failed\n");
+			CARP_DEBUG("carp_input: pullup failed\n");
 			return;
 		}
 		ip = mtod(m, struct ip *);
@@ -596,7 +596,7 @@ carp_input(struct mbuf *m, int hlen)
 	len = iplen + sizeof(*ch);
 	if (len > m->m_pkthdr.len) {
 		CARPSTATS_INC(carps_badlen);
-		CARP_LOG("carp_input: packet too short %d on %s\n",
+		CARP_DEBUG("carp_input: packet too short %d on %s\n",
 		    m->m_pkthdr.len,
 		    m->m_pkthdr.rcvif->if_xname);
 		m_freem(m);
@@ -614,7 +614,7 @@ carp_input(struct mbuf *m, int hlen)
 	m->m_data += iplen;
 	if (carp_cksum(m, len - iplen)) {
 		CARPSTATS_INC(carps_badsum);
-		CARP_LOG("carp_input: checksum failed on %s\n",
+		CARP_DEBUG("carp_input: checksum failed on %s\n",
 		    m->m_pkthdr.rcvif->if_xname);
 		m_freem(m);
 		return;
@@ -643,7 +643,7 @@ carp6_input(struct mbuf **mp, int *offp, int proto)
 	/* check if received on a valid carp interface */
 	if (m->m_pkthdr.rcvif->if_carp == NULL) {
 		CARPSTATS_INC(carps_badif);
-		CARP_LOG("carp6_input: packet received on non-carp "
+		CARP_DEBUG("carp6_input: packet received on non-carp "
 		    "interface: %s\n",
 		    m->m_pkthdr.rcvif->if_xname);
 		m_freem(m);
@@ -653,7 +653,7 @@ carp6_input(struct mbuf **mp, int *offp, int proto)
 	/* verify that the IP TTL is 255 */
 	if (ip6->ip6_hlim != CARP_DFLTTL) {
 		CARPSTATS_INC(carps_badttl);
-		CARP_LOG("carp6_input: received ttl %d != 255 on %s\n",
+		CARP_DEBUG("carp6_input: received ttl %d != 255 on %s\n",
 		    ip6->ip6_hlim,
 		    m->m_pkthdr.rcvif->if_xname);
 		m_freem(m);
@@ -665,7 +665,7 @@ carp6_input(struct mbuf **mp, int *offp, int proto)
 	IP6_EXTHDR_GET(ch, struct carp_header *, m, *offp, sizeof(*ch));
 	if (ch == NULL) {
 		CARPSTATS_INC(carps_badlen);
-		CARP_LOG("carp6_input: packet size %u too small\n", len);
+		CARP_DEBUG("carp6_input: packet size %u too small\n", len);
 		return (IPPROTO_DONE);
 	}
 
@@ -674,7 +674,7 @@ carp6_input(struct mbuf **mp, int *offp, int proto)
 	m->m_data += *offp;
 	if (carp_cksum(m, sizeof(*ch))) {
 		CARPSTATS_INC(carps_badsum);
-		CARP_LOG("carp6_input: checksum failed, on %s\n",
+		CARP_DEBUG("carp6_input: checksum failed, on %s\n",
 		    m->m_pkthdr.rcvif->if_xname);
 		m_freem(m);
 		return (IPPROTO_DONE);
@@ -727,7 +727,7 @@ carp_input_c(struct mbuf *m, struct carp_header *ch, sa_family_t af)
 		CARPSTATS_INC(carps_badver);
 		SC2IFP(sc)->if_ierrors++;
 		CARP_UNLOCK(ifp->if_carp);
-		CARP_LOG("%s; invalid version %d\n",
+		CARP_DEBUG("%s; invalid version %d\n",
 		    SC2IFP(sc)->if_xname,
 		    ch->carp_version);
 		m_freem(m);
@@ -772,7 +772,7 @@ carp_input_c(struct mbuf *m, struct carp_header *ch, sa_family_t af)
 		if (timevalcmp(&sc_tv, &ch_tv, >) ||
 		    timevalcmp(&sc_tv, &ch_tv, ==)) {
 			callout_stop(&sc->sc_ad_tmo);
-			CARP_DEBUG("%s: MASTER -> BACKUP "
+			CARP_LOG("%s: MASTER -> BACKUP "
 			   "(more frequent advertisement received)\n",
 			   SC2IFP(sc)->if_xname);
 			carp_set_state(sc, BACKUP);
@@ -787,7 +787,7 @@ carp_input_c(struct mbuf *m, struct carp_header *ch, sa_family_t af)
 		 */
 		if (carp_opts[CARPCTL_PREEMPT] &&
 		    timevalcmp(&sc_tv, &ch_tv, <)) {
-			CARP_DEBUG("%s: BACKUP -> MASTER "
+			CARP_LOG("%s: BACKUP -> MASTER "
 			    "(preempting a slower master)\n",
 			    SC2IFP(sc)->if_xname);
 			carp_master_down_locked(sc);
@@ -801,7 +801,7 @@ carp_input_c(struct mbuf *m, struct carp_header *ch, sa_family_t af)
 		 */
 		sc_tv.tv_sec = sc->sc_advbase * 3;
 		if (timevalcmp(&sc_tv, &ch_tv, <)) {
-			CARP_DEBUG("%s: BACKUP -> MASTER "
+			CARP_LOG("%s: BACKUP -> MASTER "
 			    "(master timed out)\n",
 			    SC2IFP(sc)->if_xname);
 			carp_master_down_locked(sc);
@@ -1024,7 +1024,7 @@ carp_send_ad_locked(struct carp_softc *sc)
 		if (in6_setscope(&ip6->ip6_dst, sc->sc_carpdev, NULL) != 0) {
 			SC2IFP(sc)->if_oerrors++;
 			m_freem(m);
-			CARP_LOG("%s: in6_setscope failed\n", __func__);
+			CARP_DEBUG("%s: in6_setscope failed\n", __func__);
 			return;
 		}
 
@@ -1385,12 +1385,12 @@ carp_setrun(struct carp_softc *sc, sa_family_t af)
 #ifdef INET6
 			carp_send_na(sc);
 #endif /* INET6 */
-			CARP_DEBUG("%s: INIT -> MASTER (preempting)\n",
+			CARP_LOG("%s: INIT -> MASTER (preempting)\n",
 			    SC2IFP(sc)->if_xname);
 			carp_set_state(sc, MASTER);
 			carp_setroute(sc, RTM_ADD);
 		} else {
-			CARP_DEBUG("%s: INIT -> BACKUP\n", SC2IFP(sc)->if_xname);
+			CARP_LOG("%s: INIT -> BACKUP\n", SC2IFP(sc)->if_xname);
 			carp_set_state(sc, BACKUP);
 			carp_setroute(sc, RTM_DELETE);
 			carp_setrun(sc, 0);
diff --git a/sys/netinet/ip_divert.c b/sys/netinet/ip_divert.c
index 401c0908de5..811ca062c2e 100644
--- a/sys/netinet/ip_divert.c
+++ b/sys/netinet/ip_divert.c
@@ -52,19 +52,12 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
-#include 
 #include 
 #include 
-#include 
 #include 
-#include 
-
-#include 
 
 #include 
 #include  
-#include 
 #include 
 
 #include 
@@ -72,9 +65,9 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
 #include 
 #include 
+#include 
 #ifdef SCTP
 #include 
 #endif
@@ -193,7 +186,7 @@ div_destroy(void)
  * IPPROTO_DIVERT is not in the real IP protocol number space; this
  * function should never be called.  Just in case, drop any packets.
  */
-void
+static void
 div_input(struct mbuf *m, int off)
 {
 
@@ -217,9 +210,8 @@ divert_packet(struct mbuf *m, int incoming)
 	struct sockaddr_in divsrc;
 	struct m_tag *mtag;
 
-	mtag = m_tag_find(m, PACKET_TAG_DIVERT, NULL);
+	mtag = m_tag_locate(m, MTAG_IPFW_RULE, 0, NULL);
 	if (mtag == NULL) {
-		printf("%s: no divert tag\n", __func__);
 		m_freem(m);
 		return;
 	}
@@ -244,14 +236,15 @@ divert_packet(struct mbuf *m, int incoming)
 		ip->ip_len = htons(ip->ip_len);
 	}
 #endif
+	bzero(&divsrc, sizeof(divsrc));
+	divsrc.sin_len = sizeof(divsrc);
+	divsrc.sin_family = AF_INET;
+	/* record matching rule, in host format */
+	divsrc.sin_port = ((struct ipfw_rule_ref *)(mtag+1))->rulenum;
 	/*
 	 * Record receive interface address, if any.
 	 * But only for incoming packets.
 	 */
-	bzero(&divsrc, sizeof(divsrc));
-	divsrc.sin_len = sizeof(divsrc);
-	divsrc.sin_family = AF_INET;
-	divsrc.sin_port = divert_cookie(mtag);	/* record matching rule */
 	if (incoming) {
 		struct ifaddr *ifa;
 		struct ifnet *ifp;
@@ -299,7 +292,7 @@ divert_packet(struct mbuf *m, int incoming)
 
 	/* Put packet on socket queue, if any */
 	sa = NULL;
-	nport = htons((u_int16_t)divert_info(mtag));
+	nport = htons((u_int16_t)(((struct ipfw_rule_ref *)(mtag+1))->info));
 	INP_INFO_RLOCK(&V_divcbinfo);
 	LIST_FOREACH(inp, &V_divcb, inp_list) {
 		/* XXX why does only one socket match? */
@@ -338,7 +331,7 @@ div_output(struct socket *so, struct mbuf *m, struct sockaddr_in *sin,
     struct mbuf *control)
 {
 	struct m_tag *mtag;
-	struct divert_tag *dt;
+	struct ipfw_rule_ref *dt;
 	int error = 0;
 	struct mbuf *options;
 
@@ -353,23 +346,31 @@ div_output(struct socket *so, struct mbuf *m, struct sockaddr_in *sin,
 	if (control)
 		m_freem(control);		/* XXX */
 
-	if ((mtag = m_tag_find(m, PACKET_TAG_DIVERT, NULL)) == NULL) {
-		mtag = m_tag_get(PACKET_TAG_DIVERT, sizeof(struct divert_tag),
-		    M_NOWAIT | M_ZERO);
+	mtag = m_tag_locate(m, MTAG_IPFW_RULE, 0, NULL);
+	if (mtag == NULL) {
+		/* this should be normal */
+		mtag = m_tag_alloc(MTAG_IPFW_RULE, 0,
+		    sizeof(struct ipfw_rule_ref), M_NOWAIT | M_ZERO);
 		if (mtag == NULL) {
 			error = ENOBUFS;
 			goto cantsend;
 		}
-		dt = (struct divert_tag *)(mtag+1);
 		m_tag_prepend(m, mtag);
-	} else
-		dt = (struct divert_tag *)(mtag+1);
+	}
+	dt = (struct ipfw_rule_ref *)(mtag+1);
 
 	/* Loopback avoidance and state recovery */
 	if (sin) {
 		int i;
 
-		dt->cookie = sin->sin_port;
+		/* set the starting point. We provide a non-zero slot,
+		 * but a non_matching chain_id to skip that info and use
+		 * the rulenum/rule_id.
+		 */
+		dt->slot = 1; /* dummy, chain_id is invalid */
+		dt->chain_id = 0;
+		dt->rulenum = sin->sin_port+1; /* host format ? */
+		dt->rule_id = 0;
 		/*
 		 * Find receive interface with the given name, stuffed
 		 * (if it exists) in the sin_zero[] field.
@@ -387,7 +388,7 @@ div_output(struct socket *so, struct mbuf *m, struct sockaddr_in *sin,
 		struct ip *const ip = mtod(m, struct ip *);
 		struct inpcb *inp;
 
-		dt->info |= IP_FW_DIVERT_OUTPUT_FLAG;
+		dt->info |= IPFW_IS_DIVERT | IPFW_INFO_OUT;
 		INP_INFO_WLOCK(&V_divcbinfo);
 		inp = sotoinpcb(so);
 		INP_RLOCK(inp);
@@ -453,7 +454,7 @@ div_output(struct socket *so, struct mbuf *m, struct sockaddr_in *sin,
 				m_freem(options);
 		}
 	} else {
-		dt->info |= IP_FW_DIVERT_LOOPBACK_FLAG;
+		dt->info |= IPFW_IS_DIVERT | IPFW_INFO_IN;
 		if (m->m_pkthdr.rcvif == NULL) {
 			/*
 			 * No luck with the name, check by IP address.
@@ -587,7 +588,7 @@ div_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *nam,
 	return div_output(so, m, (struct sockaddr_in *)nam, control);
 }
 
-void
+static void
 div_ctlinput(int cmd, struct sockaddr *sa, void *vip)
 {
         struct in_addr faddr;
@@ -800,5 +801,5 @@ static moduledata_t ipdivertmod = {
 };
 
 DECLARE_MODULE(ipdivert, ipdivertmod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY);
-MODULE_DEPEND(dummynet, ipfw, 2, 2, 2);
+MODULE_DEPEND(ipdivert, ipfw, 2, 2, 2);
 MODULE_VERSION(ipdivert, 1);
diff --git a/sys/netinet/ip_divert.h b/sys/netinet/ip_divert.h
index 50363554982..b8bcf4fb675 100644
--- a/sys/netinet/ip_divert.h
+++ b/sys/netinet/ip_divert.h
@@ -36,53 +36,20 @@
 #define	_NETINET_IP_DIVERT_H_
 
 /*
- * Sysctl declaration.
+ * divert has no custom kernel-userland API.
+ *
+ * All communication occurs through a sockaddr_in socket where
+ *
+ * kernel-->userland
+ *	sin_port = matching rule, host format;
+ * 	sin_addr = IN: first address of the incoming interface;
+ *		   OUT: INADDR_ANY
+ *	sin_zero = if fits, the interface name (max 7 bytes + NUL)
+ *
+ * userland->kernel
+ *	sin_port = restart-rule - 1, host order
+ *		(we restart at sin_port + 1)
+ *	sin_addr = IN: address of the incoming interface;
+ *		   OUT: INADDR_ANY
  */
-#ifdef SYSCTL_DECL
-SYSCTL_DECL(_net_inet_divert);
-#endif
-
-/*
- * Divert socket definitions.
- */
-struct divert_tag {
-	u_int32_t	info;		/* port & flags */
-	u_int16_t	cookie;		/* ipfw rule number */
-};
-
-/*
- * Return the divert cookie associated with the mbuf; if any.
- */
-static __inline u_int16_t
-divert_cookie(struct m_tag *mtag)
-{
-	return ((struct divert_tag *)(mtag+1))->cookie;
-}
-static __inline u_int16_t
-divert_find_cookie(struct mbuf *m)
-{
-	struct m_tag *mtag = m_tag_find(m, PACKET_TAG_DIVERT, NULL);
-	return mtag ? divert_cookie(mtag) : 0;
-}
-
-/*
- * Return the divert info associated with the mbuf; if any.
- */
-static __inline u_int32_t
-divert_info(struct m_tag *mtag)
-{
-	return ((struct divert_tag *)(mtag+1))->info;
-}
-static __inline u_int32_t
-divert_find_info(struct mbuf *m)
-{
-	struct m_tag *mtag = m_tag_find(m, PACKET_TAG_DIVERT, NULL);
-	return mtag ? divert_info(mtag) : 0;
-}
-
-typedef	void ip_divert_packet_t(struct mbuf *m, int incoming);
-extern	ip_divert_packet_t *ip_divert_ptr;
-
-extern	void div_input(struct mbuf *, int);
-extern	void div_ctlinput(int, struct sockaddr *, void *);
 #endif /* _NETINET_IP_DIVERT_H_ */
diff --git a/sys/netinet/ip_dummynet.h b/sys/netinet/ip_dummynet.h
index b5ef19e49a6..3a193e99c0c 100644
--- a/sys/netinet/ip_dummynet.h
+++ b/sys/netinet/ip_dummynet.h
@@ -110,20 +110,15 @@ struct dn_heap {
  * them that carries their dummynet state.  This is used within
  * the dummynet code as well as outside when checking for special
  * processing requirements.
+ * Note that the first part is the reinject info and is common to
+ * other forms of packet reinjection.
  */
 struct dn_pkt_tag {
-    struct ip_fw *rule;		/* matching rule */
-    uint32_t rule_id;		/* matching rule id */
-    uint32_t chain_id;		/* ruleset id */
+	struct ipfw_rule_ref rule;	/* matching rule */
+
+    /* second part, dummynet specific */
     int dn_dir;			/* action when packet comes out. */
-#define DN_TO_IP_OUT	1
-#define DN_TO_IP_IN	2
-/* Obsolete: #define DN_TO_BDG_FWD	3 */
-#define DN_TO_ETH_DEMUX	4
-#define DN_TO_ETH_OUT	5
-#define DN_TO_IP6_IN	6
-#define DN_TO_IP6_OUT	7
-#define DN_TO_IFB_FWD	8
+				/* see ip_fw_private.h */
 
     dn_key output_time;		/* when the pkt is due for delivery	*/
     struct ifnet *ifp;		/* interface, for ip_output		*/
@@ -376,21 +371,4 @@ struct dn_pipe_max {
 
 SLIST_HEAD(dn_pipe_head, dn_pipe);
 
-#ifdef _KERNEL
-
-/*
- * Return the dummynet tag; if any.
- * Make sure that the dummynet tag is not reused by lower layers.
- */
-static __inline struct dn_pkt_tag *
-ip_dn_claim_tag(struct mbuf *m)
-{
-	struct m_tag *mtag = m_tag_find(m, PACKET_TAG_DUMMYNET, NULL);
-	if (mtag != NULL) {
-		mtag->m_tag_id = PACKET_TAG_NONE;
-		return ((struct dn_pkt_tag *)(mtag + 1));
-	} else
-		return (NULL);
-}
-#endif
 #endif /* _IP_DUMMYNET_H */
diff --git a/sys/netinet/ip_encap.c b/sys/netinet/ip_encap.c
index 0efd22aaf0d..ce1319d447e 100644
--- a/sys/netinet/ip_encap.c
+++ b/sys/netinet/ip_encap.c
@@ -103,7 +103,7 @@ static void encap_fillarg(struct mbuf *, const struct encaptab *);
  */
 static struct mtx encapmtx;
 MTX_SYSINIT(encapmtx, &encapmtx, "encapmtx", MTX_DEF);
-LIST_HEAD(, encaptab) encaptab = LIST_HEAD_INITIALIZER(&encaptab);
+LIST_HEAD(, encaptab) encaptab = LIST_HEAD_INITIALIZER(encaptab);
 
 /*
  * We currently keey encap_init() for source code compatibility reasons --
diff --git a/sys/netinet/ip_fw.h b/sys/netinet/ip_fw.h
index 9967a29607b..21a79ecdec3 100644
--- a/sys/netinet/ip_fw.h
+++ b/sys/netinet/ip_fw.h
@@ -237,7 +237,7 @@ enum ipfw_opcodes {		/* arguments (4 byte each)	*/
  *
  */
 typedef struct	_ipfw_insn {	/* template for instructions */
-	enum ipfw_opcodes	opcode:8;
+	u_int8_t 	opcode;
 	u_int8_t	len;	/* number of 32-bit words */
 #define	F_NOT		0x80
 #define	F_OR		0x40
@@ -461,7 +461,7 @@ typedef struct _ipfw_insn_icmp6 {
  */
 
 struct ip_fw {
-	struct ip_fw	*next;		/* linked list of rules		*/
+	struct ip_fw	*x_next;	/* linked list of rules		*/
 	struct ip_fw	*next_rule;	/* ptr to next [skipto] rule	*/
 	/* 'next_rule' is used to pass up 'set_disable' status		*/
 
@@ -571,133 +571,4 @@ typedef struct	_ipfw_table {
 	ipfw_table_entry ent[0];	/* entries			*/
 } ipfw_table;
 
-/*
- * Main firewall chains definitions and global var's definitions.
- */
-#ifdef _KERNEL
-
-#define MTAG_IPFW	1148380143	/* IPFW-tagged cookie */
-
-/* Return values from ipfw_chk() */
-enum {
-	IP_FW_PASS = 0,
-	IP_FW_DENY,
-	IP_FW_DIVERT,
-	IP_FW_TEE,
-	IP_FW_DUMMYNET,
-	IP_FW_NETGRAPH,
-	IP_FW_NGTEE,
-	IP_FW_NAT,
-	IP_FW_REASS,
-};
-
-/* flags for divert mtag */
-#define	IP_FW_DIVERT_LOOPBACK_FLAG	0x00080000
-#define	IP_FW_DIVERT_OUTPUT_FLAG	0x00100000
-
-/*
- * Structure for collecting parameters to dummynet for ip6_output forwarding
- */
-struct _ip6dn_args {
-       struct ip6_pktopts *opt_or;
-       struct route_in6 ro_or;
-       int flags_or;
-       struct ip6_moptions *im6o_or;
-       struct ifnet *origifp_or;
-       struct ifnet *ifp_or;
-       struct sockaddr_in6 dst_or;
-       u_long mtu_or;
-       struct route_in6 ro_pmtu_or;
-};
-
-/*
- * Arguments for calling ipfw_chk() and dummynet_io(). We put them
- * all into a structure because this way it is easier and more
- * efficient to pass variables around and extend the interface.
- */
-struct ip_fw_args {
-	struct mbuf	*m;		/* the mbuf chain		*/
-	struct ifnet	*oif;		/* output interface		*/
-	struct sockaddr_in *next_hop;	/* forward address		*/
-	struct ip_fw	*rule;		/* matching rule		*/
-	uint32_t	rule_id;	/* matching rule id */
-	uint32_t	chain_id;	/* ruleset id */
-	struct ether_header *eh;	/* for bridged packets		*/
-
-	struct ipfw_flow_id f_id;	/* grabbed from IP header	*/
-	uint32_t	cookie;		/* a cookie depending on rule action */
-	struct inpcb	*inp;
-
-	struct _ip6dn_args	dummypar; /* dummynet->ip6_output */
-	struct sockaddr_in hopstore;	/* store here if cannot use a pointer */
-};
-
-/*
- * Function definitions.
- */
-
-/* Firewall hooks */
-struct sockopt;
-struct dn_flow_set;
-
-int ipfw_check_in(void *, struct mbuf **, struct ifnet *, int, struct inpcb *inp);
-int ipfw_check_out(void *, struct mbuf **, struct ifnet *, int, struct inpcb *inp);
-
-int ipfw_chk(struct ip_fw_args *);
-
-int ipfw_hook(void);
-int ipfw6_hook(void);
-int ipfw_unhook(void);
-int ipfw6_unhook(void);
-#ifdef NOTYET
-void ipfw_nat_destroy(void);
-#endif
-
-VNET_DECLARE(int, fw_one_pass);
-VNET_DECLARE(int, fw_enable);
-#define	V_fw_one_pass		VNET(fw_one_pass)
-#define	V_fw_enable		VNET(fw_enable)
-
-#ifdef INET6
-VNET_DECLARE(int, fw6_enable);
-#define	V_fw6_enable		VNET(fw6_enable)
-#endif
-
-struct ip_fw_chain {
-	struct ip_fw	*rules;		/* list of rules */
-	struct ip_fw	*reap;		/* list of rules to reap */
-	LIST_HEAD(, cfg_nat) nat;       /* list of nat entries */
-	struct radix_node_head *tables[IPFW_TABLES_MAX];
-	struct rwlock	rwmtx;
-	uint32_t	id;		/* ruleset id */
-};
-
-#ifdef IPFW_INTERNAL
-
-#define	IPFW_LOCK_INIT(_chain) \
-	rw_init(&(_chain)->rwmtx, "IPFW static rules")
-#define	IPFW_LOCK_DESTROY(_chain)	rw_destroy(&(_chain)->rwmtx)
-#define	IPFW_WLOCK_ASSERT(_chain)	rw_assert(&(_chain)->rwmtx, RA_WLOCKED)
-
-#define IPFW_RLOCK(p) rw_rlock(&(p)->rwmtx)
-#define IPFW_RUNLOCK(p) rw_runlock(&(p)->rwmtx)
-#define IPFW_WLOCK(p) rw_wlock(&(p)->rwmtx)
-#define IPFW_WUNLOCK(p) rw_wunlock(&(p)->rwmtx)
-
-#define LOOKUP_NAT(l, i, p) do {					\
-		LIST_FOREACH((p), &(l.nat), _next) {			\
-			if ((p)->id == (i)) {				\
-				break;					\
-			} 						\
-		}							\
-	} while (0)
-
-typedef int ipfw_nat_t(struct ip_fw_args *, struct cfg_nat *, struct mbuf *);
-typedef int ipfw_nat_cfg_t(struct sockopt *);
-#endif
-
-VNET_DECLARE(struct ip_fw_chain, layer3_chain);
-#define	V_layer3_chain		VNET(layer3_chain)
-
-#endif /* _KERNEL */
 #endif /* _IPFW2_H */
diff --git a/sys/netinet/ip_mroute.c b/sys/netinet/ip_mroute.c
index f074fea9b0b..debde7db7ad 100644
--- a/sys/netinet/ip_mroute.c
+++ b/sys/netinet/ip_mroute.c
@@ -1386,6 +1386,15 @@ fail:
 	    rt->mfc_rp.s_addr = INADDR_ANY;
 	    rt->mfc_bw_meter = NULL;
 
+	    /* initialize pkt counters per src-grp */
+	    rt->mfc_pkt_cnt = 0;
+	    rt->mfc_byte_cnt = 0;
+	    rt->mfc_wrong_if = 0;
+	    timevalclear(&rt->mfc_last_assert);
+
+	    TAILQ_INIT(&rt->mfc_stall);
+	    rt->mfc_nstall = 0;
+
 	    /* link into table */
 	    LIST_INSERT_HEAD(&mfchashtbl[hash], rt, mfc_hash);
 	    TAILQ_INSERT_HEAD(&rt->mfc_stall, rte, rte_link);
diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c
index 8a53043b3d0..d6f361d6e88 100644
--- a/sys/netinet/ip_output.c
+++ b/sys/netinet/ip_output.c
@@ -84,12 +84,6 @@ __FBSDID("$FreeBSD$");
 
 #include 
 
-#define print_ip(x, a, y)	 printf("%s %d.%d.%d.%d%s",\
-				x, (ntohl(a.s_addr)>>24)&0xFF,\
-				  (ntohl(a.s_addr)>>16)&0xFF,\
-				  (ntohl(a.s_addr)>>8)&0xFF,\
-				  (ntohl(a.s_addr))&0xFF, y);
-
 VNET_DEFINE(u_short, ip_id);
 
 #ifdef MBUF_STRESS_TEST
@@ -108,6 +102,7 @@ extern	struct protosw inetsw[];
 /*
  * IP output.  The packet in mbuf chain m contains a skeletal IP
  * header (with len, off, ttl, proto, tos, src, dst).
+ * ip_len and ip_off are in host format.
  * The mbuf chain containing the packet will be freed.
  * The mbuf opt, if present, will not be freed.
  * In the IP forwarding case, the packet will arrive with options already
@@ -122,12 +117,14 @@ ip_output(struct mbuf *m, struct mbuf *opt, struct route *ro, int flags,
 	struct mbuf *m0;
 	int hlen = sizeof (struct ip);
 	int mtu;
-	int len, error = 0;
+	int n;	/* scratchpad */
+	int error = 0;
 	int nortfree = 0;
-	struct sockaddr_in *dst = NULL;	/* keep compiler happy */
+	struct sockaddr_in *dst;
 	struct in_ifaddr *ia = NULL;
 	int isbroadcast, sw_csum;
 	struct route iproute;
+	struct rtentry *rte;	/* cache for ro->ro_rt */
 	struct in_addr odst;
 #ifdef IPFIREWALL_FORWARD
 	struct m_tag *fwd_tag = NULL;
@@ -163,10 +160,10 @@ ip_output(struct mbuf *m, struct mbuf *opt, struct route *ro, int flags,
 	}
 
 	if (opt) {
-		len = 0;
+		int len = 0;
 		m = ip_insertoptions(m, opt, &len);
 		if (len != 0)
-			hlen = len;
+			hlen = len; /* ip->ip_hl is updated above */
 	}
 	ip = mtod(m, struct ip *);
 
@@ -187,6 +184,7 @@ ip_output(struct mbuf *m, struct mbuf *opt, struct route *ro, int flags,
 		ip->ip_id = ip_newid();
 		IPSTAT_INC(ips_localout);
 	} else {
+		/* Header already set, fetch hlen from there */
 		hlen = ip->ip_hl << 2;
 	}
 
@@ -199,18 +197,19 @@ again:
 	 * The address family should also be checked in case of sharing the
 	 * cache with IPv6.
 	 */
-	if (ro->ro_rt && ((ro->ro_rt->rt_flags & RTF_UP) == 0 ||
+	rte = ro->ro_rt;
+	if (rte && ((rte->rt_flags & RTF_UP) == 0 ||
 			  dst->sin_family != AF_INET ||
 			  dst->sin_addr.s_addr != ip->ip_dst.s_addr)) {
 		if (!nortfree)
-			RTFREE(ro->ro_rt);
-		ro->ro_rt = (struct rtentry *)NULL;
+			RTFREE(rte);
+		rte = ro->ro_rt = (struct rtentry *)NULL;
 		ro->ro_lle = (struct llentry *)NULL;
 	}
 #ifdef IPFIREWALL_FORWARD
-	if (ro->ro_rt == NULL && fwd_tag == NULL) {
+	if (rte == NULL && fwd_tag == NULL) {
 #else
-	if (ro->ro_rt == NULL) {
+	if (rte == NULL) {
 #endif
 		bzero(dst, sizeof(*dst));
 		dst->sin_family = AF_INET;
@@ -260,7 +259,7 @@ again:
 		 * as this is probably required in all cases for correct
 		 * operation (as it is for ARP).
 		 */
-		if (ro->ro_rt == NULL)
+		if (rte == NULL) {
 #ifdef RADIX_MPATH
 			rtalloc_mpath_fib(ro,
 			    ntohl(ip->ip_src.s_addr ^ ip->ip_dst.s_addr),
@@ -269,7 +268,9 @@ again:
 			in_rtalloc_ign(ro, 0,
 			    inp ? inp->inp_inc.inc_fibnum : M_GETFIB(m));
 #endif
-		if (ro->ro_rt == NULL) {
+			rte = ro->ro_rt;
+		}
+		if (rte == NULL) {
 #ifdef IPSEC
 			/*
 			 * There is no route for this packet, but it is
@@ -283,14 +284,14 @@ again:
 			error = EHOSTUNREACH;
 			goto bad;
 		}
-		ia = ifatoia(ro->ro_rt->rt_ifa);
+		ia = ifatoia(rte->rt_ifa);
 		ifa_ref(&ia->ia_ifa);
-		ifp = ro->ro_rt->rt_ifp;
-		ro->ro_rt->rt_rmx.rmx_pksent++;
-		if (ro->ro_rt->rt_flags & RTF_GATEWAY)
-			dst = (struct sockaddr_in *)ro->ro_rt->rt_gateway;
-		if (ro->ro_rt->rt_flags & RTF_HOST)
-			isbroadcast = (ro->ro_rt->rt_flags & RTF_BROADCAST);
+		ifp = rte->rt_ifp;
+		rte->rt_rmx.rmx_pksent++;
+		if (rte->rt_flags & RTF_GATEWAY)
+			dst = (struct sockaddr_in *)rte->rt_gateway;
+		if (rte->rt_flags & RTF_HOST)
+			isbroadcast = (rte->rt_flags & RTF_BROADCAST);
 		else
 			isbroadcast = in_broadcast(dst->sin_addr, ifp);
 	}
@@ -298,7 +299,7 @@ again:
 	 * Calculate MTU.  If we have a route that is up, use that,
 	 * otherwise use the interface's MTU.
 	 */
-	if (ro->ro_rt != NULL && (ro->ro_rt->rt_flags & (RTF_UP|RTF_HOST))) {
+	if (rte != NULL && (rte->rt_flags & (RTF_UP|RTF_HOST))) {
 		/*
 		 * This case can happen if the user changed the MTU
 		 * of an interface after enabling IP on it.  Because
@@ -306,9 +307,9 @@ again:
 		 * them, there is no way for one to update all its
 		 * routes when the MTU is changed.
 		 */
-		if (ro->ro_rt->rt_rmx.rmx_mtu > ifp->if_mtu)
-			ro->ro_rt->rt_rmx.rmx_mtu = ifp->if_mtu;
-		mtu = ro->ro_rt->rt_rmx.rmx_mtu;
+		if (rte->rt_rmx.rmx_mtu > ifp->if_mtu)
+			rte->rt_rmx.rmx_mtu = ifp->if_mtu;
+		mtu = rte->rt_rmx.rmx_mtu;
 	} else {
 		mtu = ifp->if_mtu;
 	}
@@ -425,18 +426,15 @@ again:
 	 * packet or packet fragments, unless ALTQ is enabled on the given
 	 * interface in which case packetdrop should be done by queueing.
 	 */
+	n = ip->ip_len / mtu + 1; /* how many fragments ? */
+	if (
 #ifdef ALTQ
-	if ((!ALTQ_IS_ENABLED(&ifp->if_snd)) &&
-	    ((ifp->if_snd.ifq_len + ip->ip_len / mtu + 1) >=
-	    ifp->if_snd.ifq_maxlen))
-#else
-	if ((ifp->if_snd.ifq_len + ip->ip_len / mtu + 1) >=
-	    ifp->if_snd.ifq_maxlen)
+	    (!ALTQ_IS_ENABLED(&ifp->if_snd)) &&
 #endif /* ALTQ */
-	{
+	    (ifp->if_snd.ifq_len + n) >= ifp->if_snd.ifq_maxlen ) {
 		error = ENOBUFS;
 		IPSTAT_INC(ips_odropped);
-		ifp->if_snd.ifq_drops += (ip->ip_len / ifp->if_mtu + 1);
+		ifp->if_snd.ifq_drops += n;
 		goto bad;
 	}
 
diff --git a/sys/netinet/ipfw/ip_dummynet.c b/sys/netinet/ipfw/ip_dummynet.c
index e961a55e817..7126acebea8 100644
--- a/sys/netinet/ipfw/ip_dummynet.c
+++ b/sys/netinet/ipfw/ip_dummynet.c
@@ -76,6 +76,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 		/* ip_len, ip_off */
 #include 
+#include 
 #include 
 #include 	/* ip_output(), IP_FORWARDING */
 
@@ -460,6 +461,22 @@ heap_free(struct dn_heap *h)
  * --- end of heap management functions ---
  */
 
+/*
+ * Dispose a list of packet. Use an inline functions so if we
+ * need to free extra state associated to a packet, this is a
+ * central point to do it.
+ */
+
+static __inline void dn_free_pkts(struct mbuf *mnext)
+{
+	struct mbuf *m;
+
+	while ((m = mnext) != NULL) {
+		mnext = m->m_nextpkt;
+		FREE_PKT(m);
+	}
+}
+
 /*
  * Return the mbuf tag holding the dummynet state.  As an optimization
  * this is assumed to be the first tag on the list.  If this turns out
@@ -529,7 +546,6 @@ transmit_event(struct dn_pipe *pipe, struct mbuf **head, struct mbuf **tail)
 }
 
 #define div64(a, b)	((int64_t)(a) / (int64_t)(b))
-#define DN_TO_DROP	0xffff
 /*
  * Compute how many ticks we have to wait before being able to send
  * a packet. This is computed as the "wire time" for the packet
@@ -544,13 +560,6 @@ set_ticks(struct mbuf *m, struct dn_flow_queue *q, struct dn_pipe *p)
 
 	ret = div64( (m->m_pkthdr.len * 8 + q->extra_bits) * hz
 		- q->numbytes + p->bandwidth - 1 , p->bandwidth);
-#if 0
-	printf("%s %d extra_bits %d numb %d ret %d\n",
-		__FUNCTION__, __LINE__,
-		(int)(q->extra_bits & 0xffffffff),
-		(int)(q->numbytes & 0xffffffff),
-		(int)(ret & 0xffffffff));
-#endif
 	if (ret < 0)
 		ret = 0;
 	return ret;
@@ -570,11 +579,11 @@ compute_extra_bits(struct mbuf *pkt, struct dn_pipe *p)
 	if (!p->samples || p->samples_no == 0)
 		return 0;
 	index  = random() % p->samples_no;
-	extra_bits = ((dn_key)p->samples[index] * p->bandwidth) / 1000;
+	extra_bits = div64((dn_key)p->samples[index] * p->bandwidth, 1000);
 	if (index >= p->loss_level) {
 		struct dn_pkt_tag *dt = dn_tag_get(pkt);
 		if (dt)
-			dt->dn_dir = DN_TO_DROP;
+			dt->dn_dir = DIR_DROP;
 	}
 	return extra_bits;
 }
@@ -696,11 +705,20 @@ ready_event_wfq(struct dn_pipe *p, struct mbuf **head, struct mbuf **tail)
 	int p_was_empty = (p->head == NULL);
 	struct dn_heap *sch = &(p->scheduler_heap);
 	struct dn_heap *neh = &(p->not_eligible_heap);
+	int64_t p_numbytes = p->numbytes;
+
+	/*
+	 * p->numbytes is only 32bits in FBSD7, but we might need 64 bits.
+	 * Use a local variable for the computations, and write back the
+	 * results when done, saturating if needed.
+	 * The local variable has no impact on performance and helps
+	 * reducing diffs between the various branches.
+	 */
 
 	DUMMYNET_LOCK_ASSERT();
 
 	if (p->if_name[0] == 0)		/* tx clock is simulated */
-		p->numbytes += (curr_time - p->sched_time) * p->bandwidth;
+		p_numbytes += (curr_time - p->sched_time) * p->bandwidth;
 	else {	/*
 		 * tx clock is for real,
 		 * the ifq must be empty or this is a NOP.
@@ -717,7 +735,7 @@ ready_event_wfq(struct dn_pipe *p, struct mbuf **head, struct mbuf **tail)
 	 * While we have backlogged traffic AND credit, we need to do
 	 * something on the queue.
 	 */
-	while (p->numbytes >= 0 && (sch->elements > 0 || neh->elements > 0)) {
+	while (p_numbytes >= 0 && (sch->elements > 0 || neh->elements > 0)) {
 		if (sch->elements > 0) {
 			/* Have some eligible pkts to send out. */
 			struct dn_flow_queue *q = sch->p[0].object;
@@ -727,10 +745,10 @@ ready_event_wfq(struct dn_pipe *p, struct mbuf **head, struct mbuf **tail)
 			int len_scaled = p->bandwidth ? len * 8 * hz : 0;
 
 			heap_extract(sch, NULL); /* Remove queue from heap. */
-			p->numbytes -= len_scaled;
+			p_numbytes -= len_scaled;
 			move_pkt(pkt, q, p, len);
 
-			p->V += (len << MY_M) / p->sum;	/* Update V. */
+			p->V += div64((len << MY_M), p->sum);	/* Update V. */
 			q->S = q->F;			/* Update start time. */
 			if (q->len == 0) {
 				/* Flow not backlogged any more. */
@@ -745,7 +763,7 @@ ready_event_wfq(struct dn_pipe *p, struct mbuf **head, struct mbuf **tail)
 				 * (we will fix this later).
 				 */
 				len = (q->head)->m_pkthdr.len;
-				q->F += (len << MY_M) / (uint64_t)fs->weight;
+				q->F += div64((len << MY_M), fs->weight);
 				if (DN_KEY_LEQ(q->S, p->V))
 					heap_insert(neh, q->S, q);
 				else
@@ -768,11 +786,11 @@ ready_event_wfq(struct dn_pipe *p, struct mbuf **head, struct mbuf **tail)
 		}
 
 		if (p->if_name[0] != '\0') { /* Tx clock is from a real thing */
-			p->numbytes = -1;	/* Mark not ready for I/O. */
+			p_numbytes = -1;	/* Mark not ready for I/O. */
 			break;
 		}
 	}
-	if (sch->elements == 0 && neh->elements == 0 && p->numbytes >= 0) {
+	if (sch->elements == 0 && neh->elements == 0 && p_numbytes >= 0) {
 		p->idle_time = curr_time;
 		/*
 		 * No traffic and no events scheduled.
@@ -798,11 +816,11 @@ ready_event_wfq(struct dn_pipe *p, struct mbuf **head, struct mbuf **tail)
 	 * If we are under credit, schedule the next ready event.
 	 * Also fix the delivery time of the last packet.
 	 */
-	if (p->if_name[0]==0 && p->numbytes < 0) { /* This implies bw > 0. */
+	if (p->if_name[0]==0 && p_numbytes < 0) { /* This implies bw > 0. */
 		dn_key t = 0;		/* Number of ticks i have to wait. */
 
 		if (p->bandwidth > 0)
-			t = (p->bandwidth - 1 - p->numbytes) / p->bandwidth;
+			t = div64(p->bandwidth - 1 - p_numbytes, p->bandwidth);
 		dn_tag_get(p->tail)->output_time += t;
 		p->sched_time = curr_time;
 		heap_insert(&wfq_ready_heap, curr_time + t, (void *)p);
@@ -812,6 +830,9 @@ ready_event_wfq(struct dn_pipe *p, struct mbuf **head, struct mbuf **tail)
 		 */
 	}
 
+	/* Write back p_numbytes (adjust 64->32bit if necessary). */
+	p->numbytes = p_numbytes;
+
 	/*
 	 * If the delay line was empty call transmit_event() now.
 	 * Otherwise, the scheduler will take care of it.
@@ -911,8 +932,8 @@ dummynet_task(void *context, int pending)
 	}
 
 	/* Sweep pipes trying to expire idle flow_queues. */
-	for (i = 0; i < HASHSIZE; i++)
-		SLIST_FOREACH(pipe, &pipehash[i], next)
+	for (i = 0; i < HASHSIZE; i++) {
+		SLIST_FOREACH(pipe, &pipehash[i], next) {
 			if (pipe->idle_heap.elements > 0 &&
 			    DN_KEY_LT(pipe->idle_heap.p[0].key, pipe->V)) {
 				struct dn_flow_queue *q =
@@ -923,6 +944,8 @@ dummynet_task(void *context, int pending)
 				q->S = q->F + 1;
 				pipe->sum -= q->fs->weight;
 			}
+		}
+	}
 
 	DUMMYNET_UNLOCK();
 
@@ -935,41 +958,56 @@ dummynet_task(void *context, int pending)
 static void
 dummynet_send(struct mbuf *m)
 {
-	struct dn_pkt_tag *pkt;
 	struct mbuf *n;
-	struct ip *ip;
 
 	for (; m != NULL; m = n) {
+		struct ifnet *ifp;
+		int dst;
+        	struct m_tag *tag;
+
 		n = m->m_nextpkt;
 		m->m_nextpkt = NULL;
-		pkt = dn_tag_get(m);
-		switch (pkt->dn_dir) {
-		case DN_TO_IP_OUT:
+		tag = m_tag_first(m);
+		if (tag == NULL) {
+			dst = DIR_DROP;
+		} else {
+			struct dn_pkt_tag *pkt = dn_tag_get(m);
+			/* extract the dummynet info, rename the tag */
+			dst = pkt->dn_dir;
+			ifp = pkt->ifp;
+			/* rename the tag so it carries reinject info */
+			tag->m_tag_cookie = MTAG_IPFW_RULE;
+			tag->m_tag_id = 0;
+		}
+
+		switch (dst) {
+		case DIR_OUT:
+			SET_HOST_IPLEN(mtod(m, struct ip *));
 			ip_output(m, NULL, NULL, IP_FORWARDING, NULL, NULL);
 			break ;
-		case DN_TO_IP_IN :
-			ip = mtod(m, struct ip *);
-			ip->ip_len = htons(ip->ip_len);
-			ip->ip_off = htons(ip->ip_off);
+		case DIR_IN :
+			/* put header in network format for ip_input() */
+			//SET_NET_IPLEN(mtod(m, struct ip *));
 			netisr_dispatch(NETISR_IP, m);
 			break;
 #ifdef INET6
-		case DN_TO_IP6_IN:
+		case DIR_IN | PROTO_IPV6:
 			netisr_dispatch(NETISR_IPV6, m);
 			break;
 
-		case DN_TO_IP6_OUT:
+		case DIR_OUT | PROTO_IPV6:
+			SET_HOST_IPLEN(mtod(m, struct ip *));
 			ip6_output(m, NULL, NULL, IPV6_FORWARDING, NULL, NULL, NULL);
 			break;
 #endif
-		case DN_TO_IFB_FWD:
+		case DIR_FWD | PROTO_IFB: /* DN_TO_IFB_FWD: */
 			if (bridge_dn_p != NULL)
-				((*bridge_dn_p)(m, pkt->ifp));
+				((*bridge_dn_p)(m, ifp));
 			else
 				printf("dummynet: if_bridge not loaded\n");
 
 			break;
-		case DN_TO_ETH_DEMUX:
+		case DIR_IN | PROTO_LAYER2: /* DN_TO_ETH_DEMUX: */
 			/*
 			 * The Ethernet code assumes the Ethernet header is
 			 * contiguous in the first mbuf header.
@@ -983,18 +1021,18 @@ dummynet_send(struct mbuf *m)
 			}
 			ether_demux(m->m_pkthdr.rcvif, m);
 			break;
-		case DN_TO_ETH_OUT:
-			ether_output_frame(pkt->ifp, m);
+		case DIR_OUT | PROTO_LAYER2: /* N_TO_ETH_OUT: */
+			ether_output_frame(ifp, m);
 			break;
 
-		case DN_TO_DROP:
+		case DIR_DROP:
 			/* drop the packet after some time */
-			m_freem(m);
+			FREE_PKT(m);
 			break;
 
 		default:
-			printf("dummynet: bad switch %d!\n", pkt->dn_dir);
-			m_freem(m);
+			printf("dummynet: bad switch %d!\n", dst);
+			FREE_PKT(m);
 			break;
 		}
 	}
@@ -1013,8 +1051,8 @@ expire_queues(struct dn_flow_set *fs)
     if (fs->last_expired == time_uptime)
 	return 0 ;
     fs->last_expired = time_uptime ;
-    for (i = 0 ; i <= fs->rq_size ; i++) /* last one is overflow */
-	for (prev=NULL, q = fs->rq[i] ; q != NULL ; )
+    for (i = 0 ; i <= fs->rq_size ; i++) { /* last one is overflow */
+	for (prev=NULL, q = fs->rq[i] ; q != NULL ; ) {
 	    if (!QUEUE_IS_IDLE(q)) {
   		prev = q ;
   	        q = q->next ;
@@ -1028,6 +1066,8 @@ expire_queues(struct dn_flow_set *fs)
 		fs->rq_elements-- ;
 		free(old_q, M_DUMMYNET);
 	    }
+	}
+    }
     return initial_elements - fs->rq_elements ;
 }
 
@@ -1218,7 +1258,8 @@ red_drops(struct dn_flow_set *fs, struct dn_flow_queue *q, int len)
 		 * XXX check wraps...
 		 */
 		if (q->avg) {
-			u_int t = (curr_time - q->idle_time) / fs->lookup_step;
+			u_int t = div64(curr_time - q->idle_time,
+			    fs->lookup_step);
 
 			q->avg = (t < fs->lookup_depth) ?
 			    SCALE_MUL(q->avg, fs->w_q_lookup[t]) : 0;
@@ -1258,7 +1299,7 @@ red_drops(struct dn_flow_set *fs, struct dn_flow_queue *q, int len)
 	}
 
 	if (fs->flags_fs & DN_QSIZE_IS_BYTES)
-		p_b = (p_b * len) / fs->max_pkt_size;
+		p_b = div64(p_b * len, fs->max_pkt_size);
 	if (++q->count == 0)
 		q->random = random() & 0xffff;
 	else {
@@ -1324,34 +1365,22 @@ dummynet_io(struct mbuf **m0, int dir, struct ip_fw_args *fwa)
 	struct dn_pipe *pipe;
 	uint64_t len = m->m_pkthdr.len;
 	struct dn_flow_queue *q = NULL;
-	int is_pipe;
-	ipfw_insn *cmd = ACTION_PTR(fwa->rule);
+	int is_pipe = fwa->rule.info & IPFW_IS_PIPE;
 
 	KASSERT(m->m_nextpkt == NULL,
 	    ("dummynet_io: mbuf queue passed to dummynet"));
 
-	if (cmd->opcode == O_LOG)
-		cmd += F_LEN(cmd);
-	if (cmd->opcode == O_ALTQ)
-		cmd += F_LEN(cmd);
-	if (cmd->opcode == O_TAG)
-		cmd += F_LEN(cmd);
-	is_pipe = (cmd->opcode == O_PIPE);
-
 	DUMMYNET_LOCK();
 	io_pkt++;
 	/*
 	 * This is a dummynet rule, so we expect an O_PIPE or O_QUEUE rule.
-	 *
-	 * XXXGL: probably the pipe->fs and fs->pipe logic here
-	 * below can be simplified.
 	 */
 	if (is_pipe) {
-		pipe = locate_pipe(fwa->cookie);
+		pipe = locate_pipe(fwa->rule.info & IPFW_INFO_MASK);
 		if (pipe != NULL)
 			fs = &(pipe->fs);
 	} else
-		fs = locate_flowset(fwa->cookie);
+		fs = locate_flowset(fwa->rule.info & IPFW_INFO_MASK);
 
 	if (fs == NULL)
 		goto dropit;	/* This queue/pipe does not exist! */
@@ -1398,10 +1427,8 @@ dummynet_io(struct mbuf **m0, int dir, struct ip_fw_args *fwa)
 	 * Build and enqueue packet + parameters.
 	 */
 	pkt->rule = fwa->rule;
-	pkt->rule_id = fwa->rule_id;
-	pkt->chain_id = fwa->chain_id;
+	pkt->rule.info &= IPFW_ONEPASS;	/* only keep this info */
 	pkt->dn_dir = dir;
-
 	pkt->ifp = fwa->oif;
 
 	if (q->head == NULL)
@@ -1426,7 +1453,9 @@ dummynet_io(struct mbuf **m0, int dir, struct ip_fw_args *fwa)
 				q->numbytes += pipe->bandwidth;
 		}
 	} else {			/* WF2Q. */
-		if (pipe->idle_time < curr_time) {
+		if (pipe->idle_time < curr_time &&
+		    pipe->scheduler_heap.elements == 0 &&
+		    pipe->not_eligible_heap.elements == 0) {
 			/* Calculate available burst size. */
 			pipe->numbytes +=
 			    (curr_time - pipe->idle_time - 1) * pipe->bandwidth;
@@ -1475,7 +1504,7 @@ dummynet_io(struct mbuf **m0, int dir, struct ip_fw_args *fwa)
 			heap_extract(&(pipe->idle_heap), q);
 			q->S = MAX64(q->F, pipe->V);
 		}
-		q->F = q->S + (len << MY_M) / (uint64_t)fs->weight;
+		q->F = q->S + div64(len << MY_M, fs->weight);
 
 		if (pipe->not_eligible_heap.elements == 0 &&
 		    pipe->scheduler_heap.elements == 0)
@@ -1511,8 +1540,8 @@ dummynet_io(struct mbuf **m0, int dir, struct ip_fw_args *fwa)
 		}
 	}
 done:
-	if (head == m && dir != DN_TO_IFB_FWD && dir != DN_TO_ETH_DEMUX &&
-	    dir != DN_TO_ETH_OUT) {	/* Fast io. */
+	if (head == m && (dir & PROTO_LAYER2) == 0 ) {
+		/* Fast io. */
 		io_pkt_fast++;
 		if (m->m_nextpkt != NULL)
 			printf("dummynet: fast io: pkt chain detected!\n");
@@ -1530,19 +1559,11 @@ dropit:
 	if (q)
 		q->drops++;
 	DUMMYNET_UNLOCK();
-	m_freem(m);
+	FREE_PKT(m);
 	*m0 = NULL;
 	return ((fs && (fs->flags_fs & DN_NOERROR)) ? 0 : ENOBUFS);
 }
 
-/*
- * Below, the rt_unref is only needed when (pkt->dn_dir == DN_TO_IP_OUT)
- * Doing this would probably save us the initial bzero of dn_pkt
- */
-#define	DN_FREE_PKT(_m) do {				\
-	m_freem(_m);					\
-} while (0)
-
 /*
  * Dispose all packets and flow_queues on a flow_set.
  * If all=1, also remove red lookup table and other storage,
@@ -1559,13 +1580,7 @@ purge_flow_set(struct dn_flow_set *fs, int all)
 
 	for (i = 0; i <= fs->rq_size; i++) {
 		for (q = fs->rq[i]; q != NULL; q = qn) {
-			struct mbuf *m, *mnext;
-
-			mnext = q->head;
-			while ((m = mnext) != NULL) {
-				mnext = m->m_nextpkt;
-				DN_FREE_PKT(m);
-			}
+			dn_free_pkts(q->head);
 			qn = q->next;
 			free(q, M_DUMMYNET);
 		}
@@ -1593,15 +1608,10 @@ purge_flow_set(struct dn_flow_set *fs, int all)
 static void
 purge_pipe(struct dn_pipe *pipe)
 {
-    struct mbuf *m, *mnext;
 
     purge_flow_set( &(pipe->fs), 1 );
 
-    mnext = pipe->head;
-    while ((m = mnext) != NULL) {
-	mnext = m->m_nextpkt;
-	DN_FREE_PKT(m);
-    }
+    dn_free_pkts(pipe->head);
 
     heap_free( &(pipe->scheduler_heap) );
     heap_free( &(pipe->not_eligible_heap) );
@@ -1796,13 +1806,15 @@ config_pipe(struct dn_pipe *p)
 			pipe->idle_heap.size = pipe->idle_heap.elements = 0;
 			pipe->idle_heap.offset =
 			    offsetof(struct dn_flow_queue, heap_pos);
-		} else
+		} else {
 			/* Flush accumulated credit for all queues. */
-			for (i = 0; i <= pipe->fs.rq_size; i++)
+			for (i = 0; i <= pipe->fs.rq_size; i++) {
 				for (q = pipe->fs.rq[i]; q; q = q->next) {
 					q->numbytes = p->burst +
 					    (io_fast ? p->bandwidth : 0);
 				}
+			}
+		}
 
 		pipe->bandwidth = p->bandwidth;
 		pipe->burst = p->burst;
@@ -1912,14 +1924,16 @@ config_pipe(struct dn_pipe *p)
 static void
 fs_remove_from_heap(struct dn_heap *h, struct dn_flow_set *fs)
 {
-    int i = 0, found = 0 ;
-    for (; i < h->elements ;)
+    int i, found;
+
+    for (i = found = 0 ; i < h->elements ;) {
 	if ( ((struct dn_flow_queue *)h->p[i].object)->fs == fs) {
 	    h->elements-- ;
 	    h->p[i] = h->p[h->elements] ;
 	    found++ ;
 	} else
 	    i++ ;
+    }
     if (found)
 	heapify(h);
 }
@@ -1930,17 +1944,16 @@ fs_remove_from_heap(struct dn_heap *h, struct dn_flow_set *fs)
 static void
 pipe_remove_from_heap(struct dn_heap *h, struct dn_pipe *p)
 {
-    if (h->elements > 0) {
-	int i = 0 ;
+	int i;
+
 	for (i=0; i < h->elements ; i++ ) {
-	    if (h->p[i].object == p) { /* found it */
-		h->elements-- ;
-		h->p[i] = h->p[h->elements] ;
-		heapify(h);
-		break ;
-	    }
+		if (h->p[i].object == p) { /* found it */
+			h->elements-- ;
+			h->p[i] = h->p[h->elements] ;
+			heapify(h);
+			break ;
+		}
 	}
-    }
 }
 
 /*
@@ -1951,7 +1964,6 @@ dummynet_drain(void)
 {
     struct dn_flow_set *fs;
     struct dn_pipe *pipe;
-    struct mbuf *m, *mnext;
     int i;
 
     DUMMYNET_LOCK_ASSERT();
@@ -1967,12 +1979,7 @@ dummynet_drain(void)
     for (i = 0; i < HASHSIZE; i++) {
 	SLIST_FOREACH(pipe, &pipehash[i], next) {
 		purge_flow_set(&(pipe->fs), 0);
-
-		mnext = pipe->head;
-		while ((m = mnext) != NULL) {
-			mnext = m->m_nextpkt;
-			DN_FREE_PKT(m);
-		}
+		dn_free_pkts(pipe->head);
 		pipe->head = pipe->tail = NULL;
 	}
     }
@@ -2006,14 +2013,16 @@ delete_pipe(struct dn_pipe *p)
 	SLIST_REMOVE(&pipehash[HASH(pipe->pipe_nr)], pipe, dn_pipe, next);
 
 	/* Remove all references to this pipe from flow_sets. */
-	for (i = 0; i < HASHSIZE; i++)
-	    SLIST_FOREACH(fs, &flowsethash[i], next)
+	for (i = 0; i < HASHSIZE; i++) {
+	    SLIST_FOREACH(fs, &flowsethash[i], next) {
 		if (fs->pipe == pipe) {
 			printf("dummynet: ++ ref to pipe %d from fs %d\n",
 			    p->pipe_nr, fs->fs_nr);
 			fs->pipe = NULL ;
 			purge_flow_set(fs, 0);
 		}
+	    }
+	}
 	fs_remove_from_heap(&ready_heap, &(pipe->fs));
 	purge_pipe(pipe); /* remove all data associated to this pipe */
 	/* remove reference to here from extract_heap and wfq_ready_heap */
@@ -2062,7 +2071,7 @@ dn_copy_set(struct dn_flow_set *set, char *bp)
 
     DUMMYNET_LOCK_ASSERT();
 
-    for (i = 0 ; i <= set->rq_size ; i++)
+    for (i = 0 ; i <= set->rq_size ; i++) {
 	for (q = set->rq[i] ; q ; q = q->next, qp++ ) {
 	    if (q->hash_slot != i)
 		printf("dummynet: ++ at %d: wrong slot (have %d, "
@@ -2077,6 +2086,7 @@ dn_copy_set(struct dn_flow_set *set, char *bp)
 	    qp->head = qp->tail = NULL ;
 	    qp->fs = NULL ;
 	}
+    }
     if (copied != set->rq_elements)
 	printf("dummynet: ++ wrong count, have %d should be %d\n",
 	    copied, set->rq_elements);
@@ -2126,7 +2136,7 @@ dummynet_get(struct sockopt *sopt)
 	DUMMYNET_UNLOCK();
 	buf = malloc(size, M_TEMP, M_WAITOK);
 	DUMMYNET_LOCK();
-	if (size == dn_calc_size())
+	if (size >= dn_calc_size())
 		break;
 	free(buf, M_TEMP);
 	buf = NULL;
@@ -2136,7 +2146,7 @@ dummynet_get(struct sockopt *sopt)
 	return ENOBUFS ;
     }
     bp = buf;
-    for (i = 0; i < HASHSIZE; i++)
+    for (i = 0; i < HASHSIZE; i++) {
 	SLIST_FOREACH(pipe, &pipehash[i], next) {
 		struct dn_pipe *pipe_bp = (struct dn_pipe *)bp;
 
@@ -2147,7 +2157,7 @@ dummynet_get(struct sockopt *sopt)
 		 */
 		bcopy(pipe, bp, sizeof(*pipe));
 		pipe_bp->delay = (pipe_bp->delay * 1000) / hz;
-		pipe_bp->burst /= 8 * hz;
+		pipe_bp->burst = div64(pipe_bp->burst, 8 * hz);
 		/*
 		 * XXX the following is a hack based on ->next being the
 		 * first field in dn_pipe and dn_flow_set. The correct
@@ -2165,8 +2175,9 @@ dummynet_get(struct sockopt *sopt)
 		bp += sizeof(*pipe) ;
 		bp = dn_copy_set(&(pipe->fs), bp);
 	}
+    }
 
-    for (i = 0; i < HASHSIZE; i++)
+    for (i = 0; i < HASHSIZE; i++) {
 	SLIST_FOREACH(fs, &flowsethash[i], next) {
 		struct dn_flow_set *fs_bp = (struct dn_flow_set *)bp;
 
@@ -2178,6 +2189,7 @@ dummynet_get(struct sockopt *sopt)
 		bp += sizeof(*fs);
 		bp = dn_copy_set(fs, bp);
 	}
+    }
 
     DUMMYNET_UNLOCK();
 
@@ -2245,8 +2257,10 @@ ip_dn_ctl(struct sockopt *sopt)
 	error = delete_pipe(p);
 	break ;
     }
+
     if (p != NULL)
 	free(p, M_TEMP);
+
     return error ;
 }
 
@@ -2343,3 +2357,4 @@ static moduledata_t dummynet_mod = {
 DECLARE_MODULE(dummynet, dummynet_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY);
 MODULE_DEPEND(dummynet, ipfw, 2, 2, 2);
 MODULE_VERSION(dummynet, 1);
+/* end of file */
diff --git a/sys/netinet/ipfw/ip_fw2.c b/sys/netinet/ipfw/ip_fw2.c
index 975d3033130..b584326850a 100644
--- a/sys/netinet/ipfw/ip_fw2.c
+++ b/sys/netinet/ipfw/ip_fw2.c
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2002 Luigi Rizzo, Universita` di Pisa
+ * Copyright (c) 2002-2009 Luigi Rizzo, Universita` di Pisa
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -26,11 +26,8 @@
 #include 
 __FBSDID("$FreeBSD$");
 
-#define        DEB(x)
-#define        DDB(x) x
-
 /*
- * Implement IP packet firewall (new version)
+ * The FreeBSD IP packet firewall, main file
  */
 
 #if !defined(KLD_MODULE)
@@ -65,13 +62,10 @@ __FBSDID("$FreeBSD$");
 #include 
 #include  /* for ETHERTYPE_IP */
 #include 
-#include 
 #include 
 #include 
 #include 
 
-#define	IPFW_INTERNAL	/* Access to protected data structures in ip_fw.h. */
-
 #include 
 #include 
 #include 
@@ -79,8 +73,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
-#include 
+#include 
 #include 
 #include 
 #include 
@@ -88,12 +81,11 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-#include 
-
 #include 
 #include 
 #ifdef INET6
 #include 
+#include 
 #endif
 
 #include 	/* XXX for in_cksum */
@@ -102,73 +94,61 @@ __FBSDID("$FreeBSD$");
 #include 
 #endif
 
+/*
+ * static variables followed by global ones.
+ * All ipfw global variables are here.
+ */
+
+/* ipfw_vnet_ready controls when we are open for business */
 static VNET_DEFINE(int, ipfw_vnet_ready) = 0;
 #define	V_ipfw_vnet_ready	VNET(ipfw_vnet_ready)
-/*
- * set_disable contains one bit per set value (0..31).
- * If the bit is set, all rules with the corresponding set
- * are disabled. Set RESVD_SET(31) is reserved for the default rule
- * and rules that are not deleted by the flush command,
- * and CANNOT be disabled.
- * Rules in set RESVD_SET can only be deleted explicitly.
- */
-static VNET_DEFINE(u_int32_t, set_disable);
-static VNET_DEFINE(int, fw_verbose);
-static VNET_DEFINE(struct callout, ipfw_timeout);
-static VNET_DEFINE(int, verbose_limit);
 
-#define	V_set_disable			VNET(set_disable)
-#define	V_fw_verbose			VNET(fw_verbose)
-#define	V_ipfw_timeout			VNET(ipfw_timeout)
-#define	V_verbose_limit			VNET(verbose_limit)
+static VNET_DEFINE(int, fw_deny_unknown_exthdrs);
+#define	V_fw_deny_unknown_exthdrs	VNET(fw_deny_unknown_exthdrs)
 
 #ifdef IPFIREWALL_DEFAULT_TO_ACCEPT
 static int default_to_accept = 1;
 #else
 static int default_to_accept;
 #endif
-static uma_zone_t ipfw_dyn_rule_zone;
 
-struct ip_fw *ip_fw_default_rule;
+VNET_DEFINE(int, autoinc_step);
 
 /*
- * list of rules for layer 3
+ * Each rule belongs to one of 32 different sets (0..31).
+ * The variable set_disable contains one bit per set.
+ * If the bit is set, all rules in the corresponding set
+ * are disabled. Set RESVD_SET(31) is reserved for the default rule
+ * and rules that are not deleted by the flush command,
+ * and CANNOT be disabled.
+ * Rules in set RESVD_SET can only be deleted individually.
  */
+VNET_DEFINE(u_int32_t, set_disable);
+#define	V_set_disable			VNET(set_disable)
+
+VNET_DEFINE(int, fw_verbose);
+/* counter for ipfw_log(NULL...) */
+VNET_DEFINE(u_int64_t, norule_counter);
+VNET_DEFINE(int, verbose_limit);
+
+/* layer3_chain contains the list of rules for layer 3 */
 VNET_DEFINE(struct ip_fw_chain, layer3_chain);
 
-MALLOC_DEFINE(M_IPFW, "IpFw/IpAcct", "IpFw/IpAcct chain's");
-MALLOC_DEFINE(M_IPFW_TBL, "ipfw_tbl", "IpFw tables");
-#define IPFW_NAT_LOADED (ipfw_nat_ptr != NULL)
 ipfw_nat_t *ipfw_nat_ptr = NULL;
+struct cfg_nat *(*lookup_nat_ptr)(struct nat_list *, int);
 ipfw_nat_cfg_t *ipfw_nat_cfg_ptr;
 ipfw_nat_cfg_t *ipfw_nat_del_ptr;
 ipfw_nat_cfg_t *ipfw_nat_get_cfg_ptr;
 ipfw_nat_cfg_t *ipfw_nat_get_log_ptr;
 
-struct table_entry {
-	struct radix_node	rn[2];
-	struct sockaddr_in	addr, mask;
-	u_int32_t		value;
-};
-
-static VNET_DEFINE(int, autoinc_step);
-#define	V_autoinc_step			VNET(autoinc_step)
-static VNET_DEFINE(int, fw_deny_unknown_exthdrs);
-#define	V_fw_deny_unknown_exthdrs	VNET(fw_deny_unknown_exthdrs)
-
-extern int ipfw_chg_hook(SYSCTL_HANDLER_ARGS);
-
 #ifdef SYSCTL_NODE
 SYSCTL_NODE(_net_inet_ip, OID_AUTO, fw, CTLFLAG_RW, 0, "Firewall");
-SYSCTL_VNET_PROC(_net_inet_ip_fw, OID_AUTO, enable,
-    CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_SECURE3, &VNET_NAME(fw_enable), 0,
-    ipfw_chg_hook, "I", "Enable ipfw");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, autoinc_step,
-    CTLFLAG_RW, &VNET_NAME(autoinc_step), 0,
-    "Rule number auto-increment step");
 SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, one_pass,
     CTLFLAG_RW | CTLFLAG_SECURE3, &VNET_NAME(fw_one_pass), 0,
     "Only do a single pass through ipfw when using dummynet(4)");
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, autoinc_step,
+    CTLFLAG_RW, &VNET_NAME(autoinc_step), 0,
+    "Rule number auto-increment step");
 SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, verbose,
     CTLFLAG_RW | CTLFLAG_SECURE3, &VNET_NAME(fw_verbose), 0,
     "Log matches to ipfw rules");
@@ -185,153 +165,23 @@ SYSCTL_INT(_net_inet_ip_fw, OID_AUTO, default_to_accept, CTLFLAG_RDTUN,
     &default_to_accept, 0,
     "Make the default rule accept all packets.");
 TUNABLE_INT("net.inet.ip.fw.default_to_accept", &default_to_accept);
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, static_count,
+    CTLFLAG_RD, &VNET_NAME(layer3_chain.n_rules), 0,
+    "Number of static rules");
+
 #ifdef INET6
 SYSCTL_DECL(_net_inet6_ip6);
 SYSCTL_NODE(_net_inet6_ip6, OID_AUTO, fw, CTLFLAG_RW, 0, "Firewall");
-SYSCTL_VNET_PROC(_net_inet6_ip6_fw, OID_AUTO, enable,
-    CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_SECURE3, &VNET_NAME(fw6_enable), 0,
-    ipfw_chg_hook, "I", "Enable ipfw+6");
 SYSCTL_VNET_INT(_net_inet6_ip6_fw, OID_AUTO, deny_unknown_exthdrs,
     CTLFLAG_RW | CTLFLAG_SECURE, &VNET_NAME(fw_deny_unknown_exthdrs), 0,
     "Deny packets with unknown IPv6 Extension Headers");
-#endif
-#endif
+#endif /* INET6 */
 
-/*
- * Description of dynamic rules.
- *
- * Dynamic rules are stored in lists accessed through a hash table
- * (ipfw_dyn_v) whose size is curr_dyn_buckets. This value can
- * be modified through the sysctl variable dyn_buckets which is
- * updated when the table becomes empty.
- *
- * XXX currently there is only one list, ipfw_dyn.
- *
- * When a packet is received, its address fields are first masked
- * with the mask defined for the rule, then hashed, then matched
- * against the entries in the corresponding list.
- * Dynamic rules can be used for different purposes:
- *  + stateful rules;
- *  + enforcing limits on the number of sessions;
- *  + in-kernel NAT (not implemented yet)
- *
- * The lifetime of dynamic rules is regulated by dyn_*_lifetime,
- * measured in seconds and depending on the flags.
- *
- * The total number of dynamic rules is stored in dyn_count.
- * The max number of dynamic rules is dyn_max. When we reach
- * the maximum number of rules we do not create anymore. This is
- * done to avoid consuming too much memory, but also too much
- * time when searching on each packet (ideally, we should try instead
- * to put a limit on the length of the list on each bucket...).
- *
- * Each dynamic rule holds a pointer to the parent ipfw rule so
- * we know what action to perform. Dynamic rules are removed when
- * the parent rule is deleted. XXX we should make them survive.
- *
- * There are some limitations with dynamic rules -- we do not
- * obey the 'randomized match', and we do not do multiple
- * passes through the firewall. XXX check the latter!!!
- */
-static VNET_DEFINE(ipfw_dyn_rule **, ipfw_dyn_v);
-static VNET_DEFINE(u_int32_t, dyn_buckets);
-static VNET_DEFINE(u_int32_t, curr_dyn_buckets);
-
-#define	V_ipfw_dyn_v			VNET(ipfw_dyn_v)
-#define	V_dyn_buckets			VNET(dyn_buckets)
-#define	V_curr_dyn_buckets		VNET(curr_dyn_buckets)
-
-static struct mtx ipfw_dyn_mtx;		/* mutex guarding dynamic rules */
-#define	IPFW_DYN_LOCK_INIT() \
-	mtx_init(&ipfw_dyn_mtx, "IPFW dynamic rules", NULL, MTX_DEF)
-#define	IPFW_DYN_LOCK_DESTROY()	mtx_destroy(&ipfw_dyn_mtx)
-#define	IPFW_DYN_LOCK()		mtx_lock(&ipfw_dyn_mtx)
-#define	IPFW_DYN_UNLOCK()	mtx_unlock(&ipfw_dyn_mtx)
-#define	IPFW_DYN_LOCK_ASSERT()	mtx_assert(&ipfw_dyn_mtx, MA_OWNED)
-
-/*
- * Timeouts for various events in handing dynamic rules.
- */
-static VNET_DEFINE(u_int32_t, dyn_ack_lifetime);
-static VNET_DEFINE(u_int32_t, dyn_syn_lifetime);
-static VNET_DEFINE(u_int32_t, dyn_fin_lifetime);
-static VNET_DEFINE(u_int32_t, dyn_rst_lifetime);
-static VNET_DEFINE(u_int32_t, dyn_udp_lifetime);
-static VNET_DEFINE(u_int32_t, dyn_short_lifetime);
-
-#define	V_dyn_ack_lifetime		VNET(dyn_ack_lifetime)
-#define	V_dyn_syn_lifetime		VNET(dyn_syn_lifetime)
-#define	V_dyn_fin_lifetime		VNET(dyn_fin_lifetime)
-#define	V_dyn_rst_lifetime		VNET(dyn_rst_lifetime)
-#define	V_dyn_udp_lifetime		VNET(dyn_udp_lifetime)
-#define	V_dyn_short_lifetime		VNET(dyn_short_lifetime)
-
-/*
- * Keepalives are sent if dyn_keepalive is set. They are sent every
- * dyn_keepalive_period seconds, in the last dyn_keepalive_interval
- * seconds of lifetime of a rule.
- * dyn_rst_lifetime and dyn_fin_lifetime should be strictly lower
- * than dyn_keepalive_period.
- */
-
-static VNET_DEFINE(u_int32_t, dyn_keepalive_interval);
-static VNET_DEFINE(u_int32_t, dyn_keepalive_period);
-static VNET_DEFINE(u_int32_t, dyn_keepalive);
-
-#define	V_dyn_keepalive_interval	VNET(dyn_keepalive_interval)
-#define	V_dyn_keepalive_period		VNET(dyn_keepalive_period)
-#define	V_dyn_keepalive			VNET(dyn_keepalive)
-
-static VNET_DEFINE(u_int32_t, static_count);	/* # of static rules */
-static VNET_DEFINE(u_int32_t, static_len);	/* bytes of static rules */
-static VNET_DEFINE(u_int32_t, dyn_count);	/* # of dynamic rules */
-static VNET_DEFINE(u_int32_t, dyn_max);		/* max # of dynamic rules */
-
-#define	V_static_count			VNET(static_count)
-#define	V_static_len			VNET(static_len)
-#define	V_dyn_count			VNET(dyn_count)
-#define	V_dyn_max			VNET(dyn_max)
-
-#ifdef SYSCTL_NODE
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_buckets,
-    CTLFLAG_RW, &VNET_NAME(dyn_buckets), 0,
-    "Number of dyn. buckets");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, curr_dyn_buckets,
-    CTLFLAG_RD, &VNET_NAME(curr_dyn_buckets), 0,
-    "Current Number of dyn. buckets");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_count,
-    CTLFLAG_RD, &VNET_NAME(dyn_count), 0,
-    "Number of dyn. rules");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_max,
-    CTLFLAG_RW, &VNET_NAME(dyn_max), 0,
-    "Max number of dyn. rules");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, static_count,
-    CTLFLAG_RD, &VNET_NAME(static_count), 0,
-    "Number of static rules");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_ack_lifetime,
-    CTLFLAG_RW, &VNET_NAME(dyn_ack_lifetime), 0,
-    "Lifetime of dyn. rules for acks");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_syn_lifetime,
-    CTLFLAG_RW, &VNET_NAME(dyn_syn_lifetime), 0,
-    "Lifetime of dyn. rules for syn");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_fin_lifetime,
-    CTLFLAG_RW, &VNET_NAME(dyn_fin_lifetime), 0,
-    "Lifetime of dyn. rules for fin");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_rst_lifetime,
-    CTLFLAG_RW, &VNET_NAME(dyn_rst_lifetime), 0,
-    "Lifetime of dyn. rules for rst");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_udp_lifetime,
-    CTLFLAG_RW, &VNET_NAME(dyn_udp_lifetime), 0,
-    "Lifetime of dyn. rules for UDP");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_short_lifetime,
-    CTLFLAG_RW, &VNET_NAME(dyn_short_lifetime), 0,
-    "Lifetime of dyn. rules for other situations");
-SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_keepalive,
-    CTLFLAG_RW, &VNET_NAME(dyn_keepalive), 0,
-    "Enable keepalives for dyn. rules");
 #endif /* SYSCTL_NODE */
 
+
 /*
+ * Some macros used in the various matching options.
  * L3HDR maps an ipv4 pointer into a layer3 header pointer of type T
  * Other macros just cast void * into the appropriate type
  */
@@ -517,19 +367,20 @@ iface_match(struct ifnet *ifp, ipfw_insn_if *cmd)
  * 
  * The 'verrevpath' option checks that the interface that an IP packet
  * arrives on is the same interface that traffic destined for the
- * packet's source address would be routed out of.  The 'versrcreach'
- * option just checks that the source address is reachable via any route
- * (except default) in the routing table.  These two are a measure to block
- * forged packets.  This is also commonly known as "anti-spoofing" or Unicast
- * Reverse Path Forwarding (Unicast RFP) in Cisco-ese. The name of the knobs
+ * packet's source address would be routed out of.
+ * The 'versrcreach' option just checks that the source address is
+ * reachable via any route (except default) in the routing table.
+ * These two are a measure to block forged packets. This is also
+ * commonly known as "anti-spoofing" or Unicast Reverse Path
+ * Forwarding (Unicast RFP) in Cisco-ese. The name of the knobs
  * is purposely reminiscent of the Cisco IOS command,
  *
  *   ip verify unicast reverse-path
  *   ip verify unicast source reachable-via any
  *
- * which implements the same functionality. But note that syntax is
- * misleading. The check may be performed on all IP packets whether unicast,
- * multicast, or broadcast.
+ * which implements the same functionality. But note that the syntax
+ * is misleading, and the check may be performed on all IP packets
+ * whether unicast, multicast, or broadcast.
  */
 static int
 verify_path(struct in_addr src, struct ifnet *ifp, u_int fib)
@@ -674,17 +525,6 @@ verify_path6(struct in6_addr *src, struct ifnet *ifp)
 	return 1;
 
 }
-static __inline int
-hash_packet6(struct ipfw_flow_id *id)
-{
-	u_int32_t i;
-	i = (id->dst_ip6.__u6_addr.__u6_addr32[2]) ^
-	    (id->dst_ip6.__u6_addr.__u6_addr32[3]) ^
-	    (id->src_ip6.__u6_addr.__u6_addr32[2]) ^
-	    (id->src_ip6.__u6_addr.__u6_addr32[3]) ^
-	    (id->dst_port) ^ (id->src_port);
-	return i;
-}
 
 static int
 is_icmp6_query(int icmp6_type)
@@ -708,60 +548,18 @@ send_reject6(struct ip_fw_args *args, int code, u_int hlen, struct ip6_hdr *ip6)
 	m = args->m;
 	if (code == ICMP6_UNREACH_RST && args->f_id.proto == IPPROTO_TCP) {
 		struct tcphdr *tcp;
-		tcp_seq ack, seq;
-		int flags;
-		struct {
-			struct ip6_hdr ip6;
-			struct tcphdr th;
-		} ti;
 		tcp = (struct tcphdr *)((char *)ip6 + hlen);
 
-		if ((tcp->th_flags & TH_RST) != 0) {
-			m_freem(m);
-			args->m = NULL;
-			return;
+		if ((tcp->th_flags & TH_RST) == 0) {
+			struct mbuf *m0;
+			m0 = ipfw_send_pkt(args->m, &(args->f_id),
+			    ntohl(tcp->th_seq), ntohl(tcp->th_ack),
+			    tcp->th_flags | TH_RST);
+			if (m0 != NULL)
+				ip6_output(m0, NULL, NULL, 0, NULL, NULL,
+				    NULL);
 		}
-
-		ti.ip6 = *ip6;
-		ti.th = *tcp;
-		ti.th.th_seq = ntohl(ti.th.th_seq);
-		ti.th.th_ack = ntohl(ti.th.th_ack);
-		ti.ip6.ip6_nxt = IPPROTO_TCP;
-
-		if (ti.th.th_flags & TH_ACK) {
-			ack = 0;
-			seq = ti.th.th_ack;
-			flags = TH_RST;
-		} else {
-			ack = ti.th.th_seq;
-			if ((m->m_flags & M_PKTHDR) != 0) {
-				/*
-				 * total new data to ACK is:
-				 * total packet length,
-				 * minus the header length,
-				 * minus the tcp header length.
-				 */
-				ack += m->m_pkthdr.len - hlen
-					- (ti.th.th_off << 2);
-			} else if (ip6->ip6_plen) {
-				ack += ntohs(ip6->ip6_plen) + sizeof(*ip6) -
-				    hlen - (ti.th.th_off << 2);
-			} else {
-				m_freem(m);
-				return;
-			}
-			if (tcp->th_flags & TH_SYN)
-				ack++;
-			seq = 0;
-			flags = TH_RST|TH_ACK;
-		}
-		bcopy(&ti, ip6, sizeof(ti));
-		/*
-		 * m is only used to recycle the mbuf
-		 * The data in it is never read so we don't need
-		 * to correct the offsets or anything
-		 */
-		tcp_respond(NULL, ip6, tcp, m, ack, seq, flags);
+		FREE_PKT(m);
 	} else if (code != ICMP6_UNREACH_RST) { /* Send an ICMPv6 unreach. */
 #if 0
 		/*
@@ -777,965 +575,19 @@ send_reject6(struct ip_fw_args *args, int code, u_int hlen, struct ip6_hdr *ip6)
 #endif
 		icmp6_error(m, ICMP6_DST_UNREACH, code, 0);
 	} else
-		m_freem(m);
+		FREE_PKT(m);
 
 	args->m = NULL;
 }
 
 #endif /* INET6 */
 
-/* counter for ipfw_log(NULL...) */
-static VNET_DEFINE(u_int64_t, norule_counter);
-#define	V_norule_counter		VNET(norule_counter)
-
-#define SNPARGS(buf, len) buf + len, sizeof(buf) > len ? sizeof(buf) - len : 0
-#define SNP(buf) buf, sizeof(buf)
-
-/*
- * We enter here when we have a rule with O_LOG.
- * XXX this function alone takes about 2Kbytes of code!
- */
-static void
-ipfw_log(struct ip_fw *f, u_int hlen, struct ip_fw_args *args,
-    struct mbuf *m, struct ifnet *oif, u_short offset, uint32_t tablearg,
-    struct ip *ip)
-{
-	struct ether_header *eh = args->eh;
-	char *action;
-	int limit_reached = 0;
-	char action2[40], proto[128], fragment[32];
-
-	fragment[0] = '\0';
-	proto[0] = '\0';
-
-	if (f == NULL) {	/* bogus pkt */
-		if (V_verbose_limit != 0 && V_norule_counter >= V_verbose_limit)
-			return;
-		V_norule_counter++;
-		if (V_norule_counter == V_verbose_limit)
-			limit_reached = V_verbose_limit;
-		action = "Refuse";
-	} else {	/* O_LOG is the first action, find the real one */
-		ipfw_insn *cmd = ACTION_PTR(f);
-		ipfw_insn_log *l = (ipfw_insn_log *)cmd;
-
-		if (l->max_log != 0 && l->log_left == 0)
-			return;
-		l->log_left--;
-		if (l->log_left == 0)
-			limit_reached = l->max_log;
-		cmd += F_LEN(cmd);	/* point to first action */
-		if (cmd->opcode == O_ALTQ) {
-			ipfw_insn_altq *altq = (ipfw_insn_altq *)cmd;
-
-			snprintf(SNPARGS(action2, 0), "Altq %d",
-				altq->qid);
-			cmd += F_LEN(cmd);
-		}
-		if (cmd->opcode == O_PROB)
-			cmd += F_LEN(cmd);
-
-		if (cmd->opcode == O_TAG)
-			cmd += F_LEN(cmd);
-
-		action = action2;
-		switch (cmd->opcode) {
-		case O_DENY:
-			action = "Deny";
-			break;
-
-		case O_REJECT:
-			if (cmd->arg1==ICMP_REJECT_RST)
-				action = "Reset";
-			else if (cmd->arg1==ICMP_UNREACH_HOST)
-				action = "Reject";
-			else
-				snprintf(SNPARGS(action2, 0), "Unreach %d",
-					cmd->arg1);
-			break;
-
-		case O_UNREACH6:
-			if (cmd->arg1==ICMP6_UNREACH_RST)
-				action = "Reset";
-			else
-				snprintf(SNPARGS(action2, 0), "Unreach %d",
-					cmd->arg1);
-			break;
-
-		case O_ACCEPT:
-			action = "Accept";
-			break;
-		case O_COUNT:
-			action = "Count";
-			break;
-		case O_DIVERT:
-			snprintf(SNPARGS(action2, 0), "Divert %d",
-				cmd->arg1);
-			break;
-		case O_TEE:
-			snprintf(SNPARGS(action2, 0), "Tee %d",
-				cmd->arg1);
-			break;
-		case O_SETFIB:
-			snprintf(SNPARGS(action2, 0), "SetFib %d",
-				cmd->arg1);
-			break;
-		case O_SKIPTO:
-			snprintf(SNPARGS(action2, 0), "SkipTo %d",
-				cmd->arg1);
-			break;
-		case O_PIPE:
-			snprintf(SNPARGS(action2, 0), "Pipe %d",
-				cmd->arg1);
-			break;
-		case O_QUEUE:
-			snprintf(SNPARGS(action2, 0), "Queue %d",
-				cmd->arg1);
-			break;
-		case O_FORWARD_IP: {
-			ipfw_insn_sa *sa = (ipfw_insn_sa *)cmd;
-			int len;
-			struct in_addr dummyaddr;
-			if (sa->sa.sin_addr.s_addr == INADDR_ANY)
-				dummyaddr.s_addr = htonl(tablearg);
-			else
-				dummyaddr.s_addr = sa->sa.sin_addr.s_addr;
-
-			len = snprintf(SNPARGS(action2, 0), "Forward to %s",
-				inet_ntoa(dummyaddr));
-
-			if (sa->sa.sin_port)
-				snprintf(SNPARGS(action2, len), ":%d",
-				    sa->sa.sin_port);
-			}
-			break;
-		case O_NETGRAPH:
-			snprintf(SNPARGS(action2, 0), "Netgraph %d",
-				cmd->arg1);
-			break;
-		case O_NGTEE:
-			snprintf(SNPARGS(action2, 0), "Ngtee %d",
-				cmd->arg1);
-			break;
-		case O_NAT:
-			action = "Nat";
- 			break;
-		case O_REASS:
-			action = "Reass";
-			break;
-		default:
-			action = "UNKNOWN";
-			break;
-		}
-	}
-
-	if (hlen == 0) {	/* non-ip */
-		snprintf(SNPARGS(proto, 0), "MAC");
-
-	} else {
-		int len;
-		char src[48], dst[48];
-		struct icmphdr *icmp;
-		struct tcphdr *tcp;
-		struct udphdr *udp;
-#ifdef INET6
-		struct ip6_hdr *ip6 = NULL;
-		struct icmp6_hdr *icmp6;
-#endif
-		src[0] = '\0';
-		dst[0] = '\0';
-#ifdef INET6
-		if (IS_IP6_FLOW_ID(&(args->f_id))) {
-			char ip6buf[INET6_ADDRSTRLEN];
-			snprintf(src, sizeof(src), "[%s]",
-			    ip6_sprintf(ip6buf, &args->f_id.src_ip6));
-			snprintf(dst, sizeof(dst), "[%s]",
-			    ip6_sprintf(ip6buf, &args->f_id.dst_ip6));
-
-			ip6 = (struct ip6_hdr *)ip;
-			tcp = (struct tcphdr *)(((char *)ip) + hlen);
-			udp = (struct udphdr *)(((char *)ip) + hlen);
-		} else
-#endif
-		{
-			tcp = L3HDR(struct tcphdr, ip);
-			udp = L3HDR(struct udphdr, ip);
-
-			inet_ntoa_r(ip->ip_src, src);
-			inet_ntoa_r(ip->ip_dst, dst);
-		}
-
-		switch (args->f_id.proto) {
-		case IPPROTO_TCP:
-			len = snprintf(SNPARGS(proto, 0), "TCP %s", src);
-			if (offset == 0)
-				snprintf(SNPARGS(proto, len), ":%d %s:%d",
-				    ntohs(tcp->th_sport),
-				    dst,
-				    ntohs(tcp->th_dport));
-			else
-				snprintf(SNPARGS(proto, len), " %s", dst);
-			break;
-
-		case IPPROTO_UDP:
-			len = snprintf(SNPARGS(proto, 0), "UDP %s", src);
-			if (offset == 0)
-				snprintf(SNPARGS(proto, len), ":%d %s:%d",
-				    ntohs(udp->uh_sport),
-				    dst,
-				    ntohs(udp->uh_dport));
-			else
-				snprintf(SNPARGS(proto, len), " %s", dst);
-			break;
-
-		case IPPROTO_ICMP:
-			icmp = L3HDR(struct icmphdr, ip);
-			if (offset == 0)
-				len = snprintf(SNPARGS(proto, 0),
-				    "ICMP:%u.%u ",
-				    icmp->icmp_type, icmp->icmp_code);
-			else
-				len = snprintf(SNPARGS(proto, 0), "ICMP ");
-			len += snprintf(SNPARGS(proto, len), "%s", src);
-			snprintf(SNPARGS(proto, len), " %s", dst);
-			break;
-#ifdef INET6
-		case IPPROTO_ICMPV6:
-			icmp6 = (struct icmp6_hdr *)(((char *)ip) + hlen);
-			if (offset == 0)
-				len = snprintf(SNPARGS(proto, 0),
-				    "ICMPv6:%u.%u ",
-				    icmp6->icmp6_type, icmp6->icmp6_code);
-			else
-				len = snprintf(SNPARGS(proto, 0), "ICMPv6 ");
-			len += snprintf(SNPARGS(proto, len), "%s", src);
-			snprintf(SNPARGS(proto, len), " %s", dst);
-			break;
-#endif
-		default:
-			len = snprintf(SNPARGS(proto, 0), "P:%d %s",
-			    args->f_id.proto, src);
-			snprintf(SNPARGS(proto, len), " %s", dst);
-			break;
-		}
-
-#ifdef INET6
-		if (IS_IP6_FLOW_ID(&(args->f_id))) {
-			if (offset & (IP6F_OFF_MASK | IP6F_MORE_FRAG))
-				snprintf(SNPARGS(fragment, 0),
-				    " (frag %08x:%d@%d%s)",
-				    args->f_id.frag_id6,
-				    ntohs(ip6->ip6_plen) - hlen,
-				    ntohs(offset & IP6F_OFF_MASK) << 3,
-				    (offset & IP6F_MORE_FRAG) ? "+" : "");
-		} else
-#endif
-		{
-			int ip_off, ip_len;
-			if (eh != NULL) { /* layer 2 packets are as on the wire */
-				ip_off = ntohs(ip->ip_off);
-				ip_len = ntohs(ip->ip_len);
-			} else {
-				ip_off = ip->ip_off;
-				ip_len = ip->ip_len;
-			}
-			if (ip_off & (IP_MF | IP_OFFMASK))
-				snprintf(SNPARGS(fragment, 0),
-				    " (frag %d:%d@%d%s)",
-				    ntohs(ip->ip_id), ip_len - (ip->ip_hl << 2),
-				    offset << 3,
-				    (ip_off & IP_MF) ? "+" : "");
-		}
-	}
-	if (oif || m->m_pkthdr.rcvif)
-		log(LOG_SECURITY | LOG_INFO,
-		    "ipfw: %d %s %s %s via %s%s\n",
-		    f ? f->rulenum : -1,
-		    action, proto, oif ? "out" : "in",
-		    oif ? oif->if_xname : m->m_pkthdr.rcvif->if_xname,
-		    fragment);
-	else
-		log(LOG_SECURITY | LOG_INFO,
-		    "ipfw: %d %s %s [no if info]%s\n",
-		    f ? f->rulenum : -1,
-		    action, proto, fragment);
-	if (limit_reached)
-		log(LOG_SECURITY | LOG_NOTICE,
-		    "ipfw: limit %d reached on entry %d\n",
-		    limit_reached, f ? f->rulenum : -1);
-}
-
-/*
- * IMPORTANT: the hash function for dynamic rules must be commutative
- * in source and destination (ip,port), because rules are bidirectional
- * and we want to find both in the same bucket.
- */
-static __inline int
-hash_packet(struct ipfw_flow_id *id)
-{
-	u_int32_t i;
-
-#ifdef INET6
-	if (IS_IP6_FLOW_ID(id)) 
-		i = hash_packet6(id);
-	else
-#endif /* INET6 */
-	i = (id->dst_ip) ^ (id->src_ip) ^ (id->dst_port) ^ (id->src_port);
-	i &= (V_curr_dyn_buckets - 1);
-	return i;
-}
-
-/**
- * unlink a dynamic rule from a chain. prev is a pointer to
- * the previous one, q is a pointer to the rule to delete,
- * head is a pointer to the head of the queue.
- * Modifies q and potentially also head.
- */
-#define UNLINK_DYN_RULE(prev, head, q) {				\
-	ipfw_dyn_rule *old_q = q;					\
-									\
-	/* remove a refcount to the parent */				\
-	if (q->dyn_type == O_LIMIT)					\
-		q->parent->count--;					\
-	DEB(printf("ipfw: unlink entry 0x%08x %d -> 0x%08x %d, %d left\n",\
-		(q->id.src_ip), (q->id.src_port),			\
-		(q->id.dst_ip), (q->id.dst_port), V_dyn_count-1 ); )	\
-	if (prev != NULL)						\
-		prev->next = q = q->next;				\
-	else								\
-		head = q = q->next;					\
-	V_dyn_count--;							\
-	uma_zfree(ipfw_dyn_rule_zone, old_q); }
-
-#define TIME_LEQ(a,b)       ((int)((a)-(b)) <= 0)
-
-/**
- * Remove dynamic rules pointing to "rule", or all of them if rule == NULL.
- *
- * If keep_me == NULL, rules are deleted even if not expired,
- * otherwise only expired rules are removed.
- *
- * The value of the second parameter is also used to point to identify
- * a rule we absolutely do not want to remove (e.g. because we are
- * holding a reference to it -- this is the case with O_LIMIT_PARENT
- * rules). The pointer is only used for comparison, so any non-null
- * value will do.
- */
-static void
-remove_dyn_rule(struct ip_fw *rule, ipfw_dyn_rule *keep_me)
-{
-	static u_int32_t last_remove = 0;
-
-#define FORCE (keep_me == NULL)
-
-	ipfw_dyn_rule *prev, *q;
-	int i, pass = 0, max_pass = 0;
-
-	IPFW_DYN_LOCK_ASSERT();
-
-	if (V_ipfw_dyn_v == NULL || V_dyn_count == 0)
-		return;
-	/* do not expire more than once per second, it is useless */
-	if (!FORCE && last_remove == time_uptime)
-		return;
-	last_remove = time_uptime;
-
-	/*
-	 * because O_LIMIT refer to parent rules, during the first pass only
-	 * remove child and mark any pending LIMIT_PARENT, and remove
-	 * them in a second pass.
-	 */
-next_pass:
-	for (i = 0 ; i < V_curr_dyn_buckets ; i++) {
-		for (prev=NULL, q = V_ipfw_dyn_v[i] ; q ; ) {
-			/*
-			 * Logic can become complex here, so we split tests.
-			 */
-			if (q == keep_me)
-				goto next;
-			if (rule != NULL && rule != q->rule)
-				goto next; /* not the one we are looking for */
-			if (q->dyn_type == O_LIMIT_PARENT) {
-				/*
-				 * handle parent in the second pass,
-				 * record we need one.
-				 */
-				max_pass = 1;
-				if (pass == 0)
-					goto next;
-				if (FORCE && q->count != 0 ) {
-					/* XXX should not happen! */
-					printf("ipfw: OUCH! cannot remove rule,"
-					     " count %d\n", q->count);
-				}
-			} else {
-				if (!FORCE &&
-				    !TIME_LEQ( q->expire, time_uptime ))
-					goto next;
-			}
-             if (q->dyn_type != O_LIMIT_PARENT || !q->count) {
-                     UNLINK_DYN_RULE(prev, V_ipfw_dyn_v[i], q);
-                     continue;
-             }
-next:
-			prev=q;
-			q=q->next;
-		}
-	}
-	if (pass++ < max_pass)
-		goto next_pass;
-}
-
-
-/**
- * lookup a dynamic rule.
- */
-static ipfw_dyn_rule *
-lookup_dyn_rule_locked(struct ipfw_flow_id *pkt, int *match_direction,
-    struct tcphdr *tcp)
-{
-	/*
-	 * stateful ipfw extensions.
-	 * Lookup into dynamic session queue
-	 */
-#define MATCH_REVERSE	0
-#define MATCH_FORWARD	1
-#define MATCH_NONE	2
-#define MATCH_UNKNOWN	3
-	int i, dir = MATCH_NONE;
-	ipfw_dyn_rule *prev, *q=NULL;
-
-	IPFW_DYN_LOCK_ASSERT();
-
-	if (V_ipfw_dyn_v == NULL)
-		goto done;	/* not found */
-	i = hash_packet( pkt );
-	for (prev=NULL, q = V_ipfw_dyn_v[i] ; q != NULL ; ) {
-		if (q->dyn_type == O_LIMIT_PARENT && q->count)
-			goto next;
-		if (TIME_LEQ( q->expire, time_uptime)) { /* expire entry */
-			UNLINK_DYN_RULE(prev, V_ipfw_dyn_v[i], q);
-			continue;
-		}
-		if (pkt->proto == q->id.proto &&
-		    q->dyn_type != O_LIMIT_PARENT) {
-			if (IS_IP6_FLOW_ID(pkt)) {
-			    if (IN6_ARE_ADDR_EQUAL(&(pkt->src_ip6),
-				&(q->id.src_ip6)) &&
-			    IN6_ARE_ADDR_EQUAL(&(pkt->dst_ip6),
-				&(q->id.dst_ip6)) &&
-			    pkt->src_port == q->id.src_port &&
-			    pkt->dst_port == q->id.dst_port ) {
-				dir = MATCH_FORWARD;
-				break;
-			    }
-			    if (IN6_ARE_ADDR_EQUAL(&(pkt->src_ip6),
-				    &(q->id.dst_ip6)) &&
-				IN6_ARE_ADDR_EQUAL(&(pkt->dst_ip6),
-				    &(q->id.src_ip6)) &&
-				pkt->src_port == q->id.dst_port &&
-				pkt->dst_port == q->id.src_port ) {
-				    dir = MATCH_REVERSE;
-				    break;
-			    }
-			} else {
-			    if (pkt->src_ip == q->id.src_ip &&
-				pkt->dst_ip == q->id.dst_ip &&
-				pkt->src_port == q->id.src_port &&
-				pkt->dst_port == q->id.dst_port ) {
-				    dir = MATCH_FORWARD;
-				    break;
-			    }
-			    if (pkt->src_ip == q->id.dst_ip &&
-				pkt->dst_ip == q->id.src_ip &&
-				pkt->src_port == q->id.dst_port &&
-				pkt->dst_port == q->id.src_port ) {
-				    dir = MATCH_REVERSE;
-				    break;
-			    }
-			}
-		}
-next:
-		prev = q;
-		q = q->next;
-	}
-	if (q == NULL)
-		goto done; /* q = NULL, not found */
-
-	if ( prev != NULL) { /* found and not in front */
-		prev->next = q->next;
-		q->next = V_ipfw_dyn_v[i];
-		V_ipfw_dyn_v[i] = q;
-	}
-	if (pkt->proto == IPPROTO_TCP) { /* update state according to flags */
-		u_char flags = pkt->flags & (TH_FIN|TH_SYN|TH_RST);
-
-#define BOTH_SYN	(TH_SYN | (TH_SYN << 8))
-#define BOTH_FIN	(TH_FIN | (TH_FIN << 8))
-		q->state |= (dir == MATCH_FORWARD ) ? flags : (flags << 8);
-		switch (q->state) {
-		case TH_SYN:				/* opening */
-			q->expire = time_uptime + V_dyn_syn_lifetime;
-			break;
-
-		case BOTH_SYN:			/* move to established */
-		case BOTH_SYN | TH_FIN :	/* one side tries to close */
-		case BOTH_SYN | (TH_FIN << 8) :
- 			if (tcp) {
-#define _SEQ_GE(a,b) ((int)(a) - (int)(b) >= 0)
-			    u_int32_t ack = ntohl(tcp->th_ack);
-			    if (dir == MATCH_FORWARD) {
-				if (q->ack_fwd == 0 || _SEQ_GE(ack, q->ack_fwd))
-				    q->ack_fwd = ack;
-				else { /* ignore out-of-sequence */
-				    break;
-				}
-			    } else {
-				if (q->ack_rev == 0 || _SEQ_GE(ack, q->ack_rev))
-				    q->ack_rev = ack;
-				else { /* ignore out-of-sequence */
-				    break;
-				}
-			    }
-			}
-			q->expire = time_uptime + V_dyn_ack_lifetime;
-			break;
-
-		case BOTH_SYN | BOTH_FIN:	/* both sides closed */
-			if (V_dyn_fin_lifetime >= V_dyn_keepalive_period)
-				V_dyn_fin_lifetime = V_dyn_keepalive_period - 1;
-			q->expire = time_uptime + V_dyn_fin_lifetime;
-			break;
-
-		default:
-#if 0
-			/*
-			 * reset or some invalid combination, but can also
-			 * occur if we use keep-state the wrong way.
-			 */
-			if ( (q->state & ((TH_RST << 8)|TH_RST)) == 0)
-				printf("invalid state: 0x%x\n", q->state);
-#endif
-			if (V_dyn_rst_lifetime >= V_dyn_keepalive_period)
-				V_dyn_rst_lifetime = V_dyn_keepalive_period - 1;
-			q->expire = time_uptime + V_dyn_rst_lifetime;
-			break;
-		}
-	} else if (pkt->proto == IPPROTO_UDP) {
-		q->expire = time_uptime + V_dyn_udp_lifetime;
-	} else {
-		/* other protocols */
-		q->expire = time_uptime + V_dyn_short_lifetime;
-	}
-done:
-	if (match_direction)
-		*match_direction = dir;
-	return q;
-}
-
-static ipfw_dyn_rule *
-lookup_dyn_rule(struct ipfw_flow_id *pkt, int *match_direction,
-    struct tcphdr *tcp)
-{
-	ipfw_dyn_rule *q;
-
-	IPFW_DYN_LOCK();
-	q = lookup_dyn_rule_locked(pkt, match_direction, tcp);
-	if (q == NULL)
-		IPFW_DYN_UNLOCK();
-	/* NB: return table locked when q is not NULL */
-	return q;
-}
-
-static void
-realloc_dynamic_table(void)
-{
-	IPFW_DYN_LOCK_ASSERT();
-
-	/*
-	 * Try reallocation, make sure we have a power of 2 and do
-	 * not allow more than 64k entries. In case of overflow,
-	 * default to 1024.
-	 */
-
-	if (V_dyn_buckets > 65536)
-		V_dyn_buckets = 1024;
-	if ((V_dyn_buckets & (V_dyn_buckets-1)) != 0) { /* not a power of 2 */
-		V_dyn_buckets = V_curr_dyn_buckets; /* reset */
-		return;
-	}
-	V_curr_dyn_buckets = V_dyn_buckets;
-	if (V_ipfw_dyn_v != NULL)
-		free(V_ipfw_dyn_v, M_IPFW);
-	for (;;) {
-		V_ipfw_dyn_v = malloc(V_curr_dyn_buckets * sizeof(ipfw_dyn_rule *),
-		       M_IPFW, M_NOWAIT | M_ZERO);
-		if (V_ipfw_dyn_v != NULL || V_curr_dyn_buckets <= 2)
-			break;
-		V_curr_dyn_buckets /= 2;
-	}
-}
-
-/**
- * Install state of type 'type' for a dynamic session.
- * The hash table contains two type of rules:
- * - regular rules (O_KEEP_STATE)
- * - rules for sessions with limited number of sess per user
- *   (O_LIMIT). When they are created, the parent is
- *   increased by 1, and decreased on delete. In this case,
- *   the third parameter is the parent rule and not the chain.
- * - "parent" rules for the above (O_LIMIT_PARENT).
- */
-static ipfw_dyn_rule *
-add_dyn_rule(struct ipfw_flow_id *id, u_int8_t dyn_type, struct ip_fw *rule)
-{
-	ipfw_dyn_rule *r;
-	int i;
-
-	IPFW_DYN_LOCK_ASSERT();
-
-	if (V_ipfw_dyn_v == NULL ||
-	    (V_dyn_count == 0 && V_dyn_buckets != V_curr_dyn_buckets)) {
-		realloc_dynamic_table();
-		if (V_ipfw_dyn_v == NULL)
-			return NULL; /* failed ! */
-	}
-	i = hash_packet(id);
-
-	r = uma_zalloc(ipfw_dyn_rule_zone, M_NOWAIT | M_ZERO);
-	if (r == NULL) {
-		printf ("ipfw: sorry cannot allocate state\n");
-		return NULL;
-	}
-
-	/* increase refcount on parent, and set pointer */
-	if (dyn_type == O_LIMIT) {
-		ipfw_dyn_rule *parent = (ipfw_dyn_rule *)rule;
-		if ( parent->dyn_type != O_LIMIT_PARENT)
-			panic("invalid parent");
-		parent->count++;
-		r->parent = parent;
-		rule = parent->rule;
-	}
-
-	r->id = *id;
-	r->expire = time_uptime + V_dyn_syn_lifetime;
-	r->rule = rule;
-	r->dyn_type = dyn_type;
-	r->pcnt = r->bcnt = 0;
-	r->count = 0;
-
-	r->bucket = i;
-	r->next = V_ipfw_dyn_v[i];
-	V_ipfw_dyn_v[i] = r;
-	V_dyn_count++;
-	DEB(printf("ipfw: add dyn entry ty %d 0x%08x %d -> 0x%08x %d, total %d\n",
-	   dyn_type,
-	   (r->id.src_ip), (r->id.src_port),
-	   (r->id.dst_ip), (r->id.dst_port),
-	   V_dyn_count ); )
-	return r;
-}
-
-/**
- * lookup dynamic parent rule using pkt and rule as search keys.
- * If the lookup fails, then install one.
- */
-static ipfw_dyn_rule *
-lookup_dyn_parent(struct ipfw_flow_id *pkt, struct ip_fw *rule)
-{
-	ipfw_dyn_rule *q;
-	int i;
-
-	IPFW_DYN_LOCK_ASSERT();
-
-	if (V_ipfw_dyn_v) {
-		int is_v6 = IS_IP6_FLOW_ID(pkt);
-		i = hash_packet( pkt );
-		for (q = V_ipfw_dyn_v[i] ; q != NULL ; q=q->next)
-			if (q->dyn_type == O_LIMIT_PARENT &&
-			    rule== q->rule &&
-			    pkt->proto == q->id.proto &&
-			    pkt->src_port == q->id.src_port &&
-			    pkt->dst_port == q->id.dst_port &&
-			    (
-				(is_v6 &&
-				 IN6_ARE_ADDR_EQUAL(&(pkt->src_ip6),
-					&(q->id.src_ip6)) &&
-				 IN6_ARE_ADDR_EQUAL(&(pkt->dst_ip6),
-					&(q->id.dst_ip6))) ||
-				(!is_v6 &&
-				 pkt->src_ip == q->id.src_ip &&
-				 pkt->dst_ip == q->id.dst_ip)
-			    )
-			) {
-				q->expire = time_uptime + V_dyn_short_lifetime;
-				DEB(printf("ipfw: lookup_dyn_parent found 0x%p\n",q);)
-				return q;
-			}
-	}
-	return add_dyn_rule(pkt, O_LIMIT_PARENT, rule);
-}
-
-/**
- * Install dynamic state for rule type cmd->o.opcode
- *
- * Returns 1 (failure) if state is not installed because of errors or because
- * session limitations are enforced.
- */
-static int
-install_state(struct ip_fw *rule, ipfw_insn_limit *cmd,
-    struct ip_fw_args *args, uint32_t tablearg)
-{
-	static int last_log;
-	ipfw_dyn_rule *q;
-	struct in_addr da;
-	char src[48], dst[48];
-
-	src[0] = '\0';
-	dst[0] = '\0';
-
-	DEB(
-	printf("ipfw: %s: type %d 0x%08x %u -> 0x%08x %u\n",
-	    __func__, cmd->o.opcode,
-	    (args->f_id.src_ip), (args->f_id.src_port),
-	    (args->f_id.dst_ip), (args->f_id.dst_port));
-	)
-
-	IPFW_DYN_LOCK();
-
-	q = lookup_dyn_rule_locked(&args->f_id, NULL, NULL);
-
-	if (q != NULL) {	/* should never occur */
-		if (last_log != time_uptime) {
-			last_log = time_uptime;
-			printf("ipfw: %s: entry already present, done\n",
-			    __func__);
-		}
-		IPFW_DYN_UNLOCK();
-		return (0);
-	}
-
-	if (V_dyn_count >= V_dyn_max)
-		/* Run out of slots, try to remove any expired rule. */
-		remove_dyn_rule(NULL, (ipfw_dyn_rule *)1);
-
-	if (V_dyn_count >= V_dyn_max) {
-		if (last_log != time_uptime) {
-			last_log = time_uptime;
-			printf("ipfw: %s: Too many dynamic rules\n", __func__);
-		}
-		IPFW_DYN_UNLOCK();
-		return (1);	/* cannot install, notify caller */
-	}
-
-	switch (cmd->o.opcode) {
-	case O_KEEP_STATE:	/* bidir rule */
-		add_dyn_rule(&args->f_id, O_KEEP_STATE, rule);
-		break;
-
-	case O_LIMIT: {		/* limit number of sessions */
-		struct ipfw_flow_id id;
-		ipfw_dyn_rule *parent;
-		uint32_t conn_limit;
-		uint16_t limit_mask = cmd->limit_mask;
-
-		conn_limit = (cmd->conn_limit == IP_FW_TABLEARG) ?
-		    tablearg : cmd->conn_limit;
-		  
-		DEB(
-		if (cmd->conn_limit == IP_FW_TABLEARG)
-			printf("ipfw: %s: O_LIMIT rule, conn_limit: %u "
-			    "(tablearg)\n", __func__, conn_limit);
-		else
-			printf("ipfw: %s: O_LIMIT rule, conn_limit: %u\n",
-			    __func__, conn_limit);
-		)
-
-		id.dst_ip = id.src_ip = id.dst_port = id.src_port = 0;
-		id.proto = args->f_id.proto;
-		id.addr_type = args->f_id.addr_type;
-		id.fib = M_GETFIB(args->m);
-
-		if (IS_IP6_FLOW_ID (&(args->f_id))) {
-			if (limit_mask & DYN_SRC_ADDR)
-				id.src_ip6 = args->f_id.src_ip6;
-			if (limit_mask & DYN_DST_ADDR)
-				id.dst_ip6 = args->f_id.dst_ip6;
-		} else {
-			if (limit_mask & DYN_SRC_ADDR)
-				id.src_ip = args->f_id.src_ip;
-			if (limit_mask & DYN_DST_ADDR)
-				id.dst_ip = args->f_id.dst_ip;
-		}
-		if (limit_mask & DYN_SRC_PORT)
-			id.src_port = args->f_id.src_port;
-		if (limit_mask & DYN_DST_PORT)
-			id.dst_port = args->f_id.dst_port;
-		if ((parent = lookup_dyn_parent(&id, rule)) == NULL) {
-			printf("ipfw: %s: add parent failed\n", __func__);
-			IPFW_DYN_UNLOCK();
-			return (1);
-		}
-
-		if (parent->count >= conn_limit) {
-			/* See if we can remove some expired rule. */
-			remove_dyn_rule(rule, parent);
-			if (parent->count >= conn_limit) {
-				if (V_fw_verbose && last_log != time_uptime) {
-					last_log = time_uptime;
-#ifdef INET6
-					/*
-					 * XXX IPv6 flows are not
-					 * supported yet.
-					 */
-					if (IS_IP6_FLOW_ID(&(args->f_id))) {
-						char ip6buf[INET6_ADDRSTRLEN];
-						snprintf(src, sizeof(src),
-						    "[%s]", ip6_sprintf(ip6buf,
-							&args->f_id.src_ip6));
-						snprintf(dst, sizeof(dst),
-						    "[%s]", ip6_sprintf(ip6buf,
-							&args->f_id.dst_ip6));
-					} else
-#endif
-					{
-						da.s_addr =
-						    htonl(args->f_id.src_ip);
-						inet_ntoa_r(da, src);
-						da.s_addr =
-						    htonl(args->f_id.dst_ip);
-						inet_ntoa_r(da, dst);
-					}
-					log(LOG_SECURITY | LOG_DEBUG,
-					    "ipfw: %d %s %s:%u -> %s:%u, %s\n",
-					    parent->rule->rulenum,
-					    "drop session",
-					    src, (args->f_id.src_port),
-					    dst, (args->f_id.dst_port),
-					    "too many entries");
-				}
-				IPFW_DYN_UNLOCK();
-				return (1);
-			}
-		}
-		add_dyn_rule(&args->f_id, O_LIMIT, (struct ip_fw *)parent);
-		break;
-	}
-	default:
-		printf("ipfw: %s: unknown dynamic rule type %u\n",
-		    __func__, cmd->o.opcode);
-		IPFW_DYN_UNLOCK();
-		return (1);
-	}
-
-	/* XXX just set lifetime */
-	lookup_dyn_rule_locked(&args->f_id, NULL, NULL);
-
-	IPFW_DYN_UNLOCK();
-	return (0);
-}
-
-/*
- * Generate a TCP packet, containing either a RST or a keepalive.
- * When flags & TH_RST, we are sending a RST packet, because of a
- * "reset" action matched the packet.
- * Otherwise we are sending a keepalive, and flags & TH_
- * The 'replyto' mbuf is the mbuf being replied to, if any, and is required
- * so that MAC can label the reply appropriately.
- */
-static struct mbuf *
-send_pkt(struct mbuf *replyto, struct ipfw_flow_id *id, u_int32_t seq,
-    u_int32_t ack, int flags)
-{
-	struct mbuf *m;
-	struct ip *ip;
-	struct tcphdr *tcp;
-
-	MGETHDR(m, M_DONTWAIT, MT_DATA);
-	if (m == 0)
-		return (NULL);
-	m->m_pkthdr.rcvif = (struct ifnet *)0;
-
-	M_SETFIB(m, id->fib);
-#ifdef MAC
-	if (replyto != NULL)
-		mac_netinet_firewall_reply(replyto, m);
-	else
-		mac_netinet_firewall_send(m);
-#else
-	(void)replyto;		/* don't warn about unused arg */
-#endif
-
-	m->m_pkthdr.len = m->m_len = sizeof(struct ip) + sizeof(struct tcphdr);
-	m->m_data += max_linkhdr;
-
-	ip = mtod(m, struct ip *);
-	bzero(ip, m->m_len);
-	tcp = (struct tcphdr *)(ip + 1); /* no IP options */
-	ip->ip_p = IPPROTO_TCP;
-	tcp->th_off = 5;
-	/*
-	 * Assume we are sending a RST (or a keepalive in the reverse
-	 * direction), swap src and destination addresses and ports.
-	 */
-	ip->ip_src.s_addr = htonl(id->dst_ip);
-	ip->ip_dst.s_addr = htonl(id->src_ip);
-	tcp->th_sport = htons(id->dst_port);
-	tcp->th_dport = htons(id->src_port);
-	if (flags & TH_RST) {	/* we are sending a RST */
-		if (flags & TH_ACK) {
-			tcp->th_seq = htonl(ack);
-			tcp->th_ack = htonl(0);
-			tcp->th_flags = TH_RST;
-		} else {
-			if (flags & TH_SYN)
-				seq++;
-			tcp->th_seq = htonl(0);
-			tcp->th_ack = htonl(seq);
-			tcp->th_flags = TH_RST | TH_ACK;
-		}
-	} else {
-		/*
-		 * We are sending a keepalive. flags & TH_SYN determines
-		 * the direction, forward if set, reverse if clear.
-		 * NOTE: seq and ack are always assumed to be correct
-		 * as set by the caller. This may be confusing...
-		 */
-		if (flags & TH_SYN) {
-			/*
-			 * we have to rewrite the correct addresses!
-			 */
-			ip->ip_dst.s_addr = htonl(id->dst_ip);
-			ip->ip_src.s_addr = htonl(id->src_ip);
-			tcp->th_dport = htons(id->dst_port);
-			tcp->th_sport = htons(id->src_port);
-		}
-		tcp->th_seq = htonl(seq);
-		tcp->th_ack = htonl(ack);
-		tcp->th_flags = TH_ACK;
-	}
-	/*
-	 * set ip_len to the payload size so we can compute
-	 * the tcp checksum on the pseudoheader
-	 * XXX check this, could save a couple of words ?
-	 */
-	ip->ip_len = htons(sizeof(struct tcphdr));
-	tcp->th_sum = in_cksum(m, m->m_pkthdr.len);
-	/*
-	 * now fill fields left out earlier
-	 */
-	ip->ip_ttl = V_ip_defttl;
-	ip->ip_len = m->m_pkthdr.len;
-	m->m_flags |= M_SKIP_FIREWALL;
-	return (m);
-}
 
 /*
  * sends a reject message, consuming the mbuf passed as an argument.
  */
 static void
-send_reject(struct ip_fw_args *args, int code, int ip_len, struct ip *ip)
+send_reject(struct ip_fw_args *args, int code, int iplen, struct ip *ip)
 {
 
 #if 0
@@ -1750,263 +602,35 @@ send_reject(struct ip_fw_args *args, int code, int ip_len, struct ip *ip)
 #endif
 	if (code != ICMP_REJECT_RST) { /* Send an ICMP unreach */
 		/* We need the IP header in host order for icmp_error(). */
-		if (args->eh != NULL) {
-			ip->ip_len = ntohs(ip->ip_len);
-			ip->ip_off = ntohs(ip->ip_off);
-		}
+		SET_HOST_IPLEN(ip);
 		icmp_error(args->m, ICMP_UNREACH, code, 0L, 0);
 	} else if (args->f_id.proto == IPPROTO_TCP) {
 		struct tcphdr *const tcp =
 		    L3HDR(struct tcphdr, mtod(args->m, struct ip *));
 		if ( (tcp->th_flags & TH_RST) == 0) {
 			struct mbuf *m;
-			m = send_pkt(args->m, &(args->f_id),
+			m = ipfw_send_pkt(args->m, &(args->f_id),
 				ntohl(tcp->th_seq), ntohl(tcp->th_ack),
 				tcp->th_flags | TH_RST);
 			if (m != NULL)
 				ip_output(m, NULL, NULL, 0, NULL, NULL);
 		}
-		m_freem(args->m);
+		FREE_PKT(args->m);
 	} else
-		m_freem(args->m);
+		FREE_PKT(args->m);
 	args->m = NULL;
 }
 
-/**
- *
- * Given an ip_fw *, lookup_next_rule will return a pointer
- * to the next rule, which can be either the jump
- * target (for skipto instructions) or the next one in the list (in
- * all other cases including a missing jump target).
- * The result is also written in the "next_rule" field of the rule.
- * Backward jumps are not allowed, so start looking from the next
- * rule...
- *
- * This never returns NULL -- in case we do not have an exact match,
- * the next rule is returned. When the ruleset is changed,
- * pointers are flushed so we are always correct.
+/*
+ * Support for uid/gid/jail lookup. These tests are expensive
+ * (because we may need to look into the list of active sockets)
+ * so we cache the results. ugid_lookupp is 0 if we have not
+ * yet done a lookup, 1 if we succeeded, and -1 if we tried
+ * and failed. The function always returns the match value.
+ * We could actually spare the variable and use *uc, setting
+ * it to '(void *)check_uidgid if we have no info, NULL if
+ * we tried and failed, or any other value if successful.
  */
-
-static struct ip_fw *
-lookup_next_rule(struct ip_fw *me, u_int32_t tablearg)
-{
-	struct ip_fw *rule = NULL;
-	ipfw_insn *cmd;
-	u_int16_t	rulenum;
-
-	/* look for action, in case it is a skipto */
-	cmd = ACTION_PTR(me);
-	if (cmd->opcode == O_LOG)
-		cmd += F_LEN(cmd);
-	if (cmd->opcode == O_ALTQ)
-		cmd += F_LEN(cmd);
-	if (cmd->opcode == O_TAG)
-		cmd += F_LEN(cmd);
-	if (cmd->opcode == O_SKIPTO ) {
-		if (tablearg != 0) {
-			rulenum = (u_int16_t)tablearg;
-		} else {
-			rulenum = cmd->arg1;
-		}
-		for (rule = me->next; rule ; rule = rule->next) {
-			if (rule->rulenum >= rulenum) {
-				break;
-			}
-		}
-	}
-	if (rule == NULL)			/* failure or not a skipto */
-		rule = me->next;
-	me->next_rule = rule;
-	return rule;
-}
-
-static int
-add_table_entry(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
-    uint8_t mlen, uint32_t value)
-{
-	struct radix_node_head *rnh;
-	struct table_entry *ent;
-	struct radix_node *rn;
-
-	if (tbl >= IPFW_TABLES_MAX)
-		return (EINVAL);
-	rnh = ch->tables[tbl];
-	ent = malloc(sizeof(*ent), M_IPFW_TBL, M_NOWAIT | M_ZERO);
-	if (ent == NULL)
-		return (ENOMEM);
-	ent->value = value;
-	ent->addr.sin_len = ent->mask.sin_len = 8;
-	ent->mask.sin_addr.s_addr = htonl(mlen ? ~((1 << (32 - mlen)) - 1) : 0);
-	ent->addr.sin_addr.s_addr = addr & ent->mask.sin_addr.s_addr;
-	IPFW_WLOCK(ch);
-	rn = rnh->rnh_addaddr(&ent->addr, &ent->mask, rnh, (void *)ent);
-	if (rn == NULL) {
-		IPFW_WUNLOCK(ch);
-		free(ent, M_IPFW_TBL);
-		return (EEXIST);
-	}
-	IPFW_WUNLOCK(ch);
-	return (0);
-}
-
-static int
-del_table_entry(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
-    uint8_t mlen)
-{
-	struct radix_node_head *rnh;
-	struct table_entry *ent;
-	struct sockaddr_in sa, mask;
-
-	if (tbl >= IPFW_TABLES_MAX)
-		return (EINVAL);
-	rnh = ch->tables[tbl];
-	sa.sin_len = mask.sin_len = 8;
-	mask.sin_addr.s_addr = htonl(mlen ? ~((1 << (32 - mlen)) - 1) : 0);
-	sa.sin_addr.s_addr = addr & mask.sin_addr.s_addr;
-	IPFW_WLOCK(ch);
-	ent = (struct table_entry *)rnh->rnh_deladdr(&sa, &mask, rnh);
-	if (ent == NULL) {
-		IPFW_WUNLOCK(ch);
-		return (ESRCH);
-	}
-	IPFW_WUNLOCK(ch);
-	free(ent, M_IPFW_TBL);
-	return (0);
-}
-
-static int
-flush_table_entry(struct radix_node *rn, void *arg)
-{
-	struct radix_node_head * const rnh = arg;
-	struct table_entry *ent;
-
-	ent = (struct table_entry *)
-	    rnh->rnh_deladdr(rn->rn_key, rn->rn_mask, rnh);
-	if (ent != NULL)
-		free(ent, M_IPFW_TBL);
-	return (0);
-}
-
-static int
-flush_table(struct ip_fw_chain *ch, uint16_t tbl)
-{
-	struct radix_node_head *rnh;
-
-	IPFW_WLOCK_ASSERT(ch);
-
-	if (tbl >= IPFW_TABLES_MAX)
-		return (EINVAL);
-	rnh = ch->tables[tbl];
-	KASSERT(rnh != NULL, ("NULL IPFW table"));
-	rnh->rnh_walktree(rnh, flush_table_entry, rnh);
-	return (0);
-}
-
-static void
-flush_tables(struct ip_fw_chain *ch)
-{
-	uint16_t tbl;
-
-	IPFW_WLOCK_ASSERT(ch);
-
-	for (tbl = 0; tbl < IPFW_TABLES_MAX; tbl++)
-		flush_table(ch, tbl);
-}
-
-static int
-init_tables(struct ip_fw_chain *ch)
-{ 
-	int i;
-	uint16_t j;
-
-	for (i = 0; i < IPFW_TABLES_MAX; i++) {
-		if (!rn_inithead((void **)&ch->tables[i], 32)) {
-			for (j = 0; j < i; j++) {
-				(void) flush_table(ch, j);
-			}
-			return (ENOMEM);
-		}
-	}
-	return (0);
-}
-
-static int
-lookup_table(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
-    uint32_t *val)
-{
-	struct radix_node_head *rnh;
-	struct table_entry *ent;
-	struct sockaddr_in sa;
-
-	if (tbl >= IPFW_TABLES_MAX)
-		return (0);
-	rnh = ch->tables[tbl];
-	sa.sin_len = 8;
-	sa.sin_addr.s_addr = addr;
-	ent = (struct table_entry *)(rnh->rnh_lookup(&sa, NULL, rnh));
-	if (ent != NULL) {
-		*val = ent->value;
-		return (1);
-	}
-	return (0);
-}
-
-static int
-count_table_entry(struct radix_node *rn, void *arg)
-{
-	u_int32_t * const cnt = arg;
-
-	(*cnt)++;
-	return (0);
-}
-
-static int
-count_table(struct ip_fw_chain *ch, uint32_t tbl, uint32_t *cnt)
-{
-	struct radix_node_head *rnh;
-
-	if (tbl >= IPFW_TABLES_MAX)
-		return (EINVAL);
-	rnh = ch->tables[tbl];
-	*cnt = 0;
-	rnh->rnh_walktree(rnh, count_table_entry, cnt);
-	return (0);
-}
-
-static int
-dump_table_entry(struct radix_node *rn, void *arg)
-{
-	struct table_entry * const n = (struct table_entry *)rn;
-	ipfw_table * const tbl = arg;
-	ipfw_table_entry *ent;
-
-	if (tbl->cnt == tbl->size)
-		return (1);
-	ent = &tbl->ent[tbl->cnt];
-	ent->tbl = tbl->tbl;
-	if (in_nullhost(n->mask.sin_addr))
-		ent->masklen = 0;
-	else
-		ent->masklen = 33 - ffs(ntohl(n->mask.sin_addr.s_addr));
-	ent->addr = n->addr.sin_addr.s_addr;
-	ent->value = n->value;
-	tbl->cnt++;
-	return (0);
-}
-
-static int
-dump_table(struct ip_fw_chain *ch, ipfw_table *tbl)
-{
-	struct radix_node_head *rnh;
-
-	if (tbl->tbl >= IPFW_TABLES_MAX)
-		return (EINVAL);
-	rnh = ch->tables[tbl->tbl];
-	tbl->cnt = 0;
-	rnh->rnh_walktree(rnh, dump_table_entry, tbl);
-	return (0);
-}
-
 static int
 check_uidgid(ipfw_insn_u32 *insn, int proto, struct ifnet *oif,
     struct in_addr dst_ip, u_int16_t dst_port, struct in_addr src_ip,
@@ -2065,10 +689,8 @@ check_uidgid(ipfw_insn_u32 *insn, int proto, struct ifnet *oif,
 		INP_INFO_RUNLOCK(pi);
 		if (*ugid_lookupp == 0) {
 			/*
-			 * If the lookup did not yield any results, there
-			 * is no sense in coming back and trying again. So
-			 * we can set lookup to -1 and ensure that we wont
-			 * bother the pcb system again.
+			 * We tried and failed, set the variable to -1
+			 * so we will not try again on this packet.
 			 */
 			*ugid_lookupp = -1;
 			return (0);
@@ -2083,6 +705,21 @@ check_uidgid(ipfw_insn_u32 *insn, int proto, struct ifnet *oif,
 	return match;
 }
 
+/*
+ * Helper function to set args with info on the rule after the matching
+ * one. slot is precise, whereas we guess rule_id as they are
+ * assigned sequentially.
+ */
+static inline void
+set_match(struct ip_fw_args *args, int slot,
+	struct ip_fw_chain *chain)
+{
+	args->rule.chain_id = chain->id;
+	args->rule.slot = slot + 1; /* we use 0 as a marker */
+	args->rule.rule_id = 1 + chain->map[slot]->id;
+	args->rule.rulenum = chain->map[slot]->rulenum;
+}
+
 /*
  * The main check routine for the firewall.
  *
@@ -2093,10 +730,10 @@ check_uidgid(ipfw_insn_u32 *insn, int proto, struct ifnet *oif,
  *
  *	args->m	(in/out) The packet; we set to NULL when/if we nuke it.
  *		Starts with the IP header.
- *	args->eh (in)	Mac header if present, or NULL for layer3 packet.
+ *	args->eh (in)	Mac header if present, NULL for layer3 packet.
  *	args->L3offset	Number of bytes bypassed if we came from L2.
  *			e.g. often sizeof(eh)  ** NOTYET **
- *	args->oif	Outgoing interface, or NULL if packet is incoming.
+ *	args->oif	Outgoing interface, NULL if packet is incoming.
  *		The incoming interface is in the mbuf. (in)
  *	args->divert_rule (in/out)
  *		Skip up to the first rule past this rule number;
@@ -2105,7 +742,7 @@ check_uidgid(ipfw_insn_u32 *insn, int proto, struct ifnet *oif,
  *	args->rule	Pointer to the last matching rule (in/out)
  *	args->next_hop	Socket we are forwarding to (out).
  *	args->f_id	Addresses grabbed from the packet (out)
- * 	args->cookie	a cookie depending on rule action
+ * 	args->rule.info	a cookie depending on rule action
  *
  * Return value:
  *
@@ -2115,6 +752,8 @@ check_uidgid(ipfw_insn_u32 *insn, int proto, struct ifnet *oif,
  *	IP_FW_TEE	tee packet, port in m_tag
  *	IP_FW_DUMMYNET	to dummynet, pipe in args->cookie
  *	IP_FW_NETGRAPH	into netgraph, cookie args->cookie
+ *		args->rule contains the matching rule,
+ *		args->rule.info has additional information.
  *
  */
 int
@@ -2122,7 +761,7 @@ ipfw_chk(struct ip_fw_args *args)
 {
 
 	/*
-	 * Local variables holding state during the processing of a packet:
+	 * Local variables holding state while processing a packet:
 	 *
 	 * IMPORTANT NOTE: to speed up the processing of rules, there
 	 * are some assumption on the values of the variables, which
@@ -2158,14 +797,6 @@ ipfw_chk(struct ip_fw_args *args)
 	struct ucred *ucred_cache = NULL;
 	int ucred_lookup = 0;
 
-	/*
-	 * divinput_flags	If non-zero, set to the IP_FW_DIVERT_*_FLAG
-	 *	associated with a packet input on a divert socket.  This
-	 *	will allow to distinguish traffic and its direction when
-	 *	it originates from a divert socket.
-	 */
-	u_int divinput_flags = 0;
-
 	/*
 	 * oif | args->oif	If NULL, ipfw_chk has been called on the
 	 *	inbound path (ether_input, ip_input).
@@ -2174,7 +805,7 @@ ipfw_chk(struct ip_fw_args *args)
 	 */
 	struct ifnet *oif = args->oif;
 
-	struct ip_fw *f = NULL;		/* matching rule */
+	int f_pos = 0;		/* index of current rule in the array */
 	int retval = 0;
 
 	/*
@@ -2209,12 +840,12 @@ ipfw_chk(struct ip_fw_args *args)
 	 * src_ip, dst_ip	ip addresses, in NETWORK format.
 	 *	Only valid for IPv4 packets.
 	 */
-	u_int8_t proto;
-	u_int16_t src_port = 0, dst_port = 0;	/* NOTE: host format	*/
+	uint8_t proto;
+	uint16_t src_port = 0, dst_port = 0;	/* NOTE: host format	*/
 	struct in_addr src_ip, dst_ip;		/* NOTE: network format	*/
-	u_int16_t ip_len=0;
+	uint16_t iplen=0;
 	int pktlen;
-	u_int16_t	etype = 0;	/* Host order stored ether type */
+	uint16_t	etype = 0;	/* Host order stored ether type */
 
 	/*
 	 * dyn_dir = MATCH_UNKNOWN when rules unchecked,
@@ -2224,7 +855,6 @@ ipfw_chk(struct ip_fw_args *args)
 	int dyn_dir = MATCH_UNKNOWN;
 	ipfw_dyn_rule *q = NULL;
 	struct ip_fw_chain *chain = &V_layer3_chain;
-	struct m_tag *mtag;
 
 	/*
 	 * We store in ulp a pointer to the upper layer protocol header.
@@ -2239,10 +869,13 @@ ipfw_chk(struct ip_fw_args *args)
 	/* end of ipv6 variables */
 	int is_ipv4 = 0;
 
+	int done = 0;		/* flag to exit the outer loop */
+
 	if (m->m_flags & M_SKIP_FIREWALL || (! V_ipfw_vnet_ready))
 		return (IP_FW_PASS);	/* accept */
 
 	dst_ip.s_addr = 0;		/* make sure it is initialized */
+	src_ip.s_addr = 0;		/* make sure it is initialized */
 	pktlen = m->m_pkthdr.len;
 	args->f_id.fib = M_GETFIB(m); /* note mbuf not altered) */
 	proto = args->f_id.proto = 0;	/* mark f_id invalid */
@@ -2254,15 +887,15 @@ ipfw_chk(struct ip_fw_args *args)
  * pointer might become stale after other pullups (but we never use it
  * this way).
  */
-#define PULLUP_TO(len, p, T)						\
-do {									\
-	int x = (len) + sizeof(T);					\
-	if ((m)->m_len < x) {						\
-		args->m = m = m_pullup(m, x);				\
-		if (m == NULL)						\
-			goto pullup_failed;				\
-	}								\
-	p = (mtod(m, char *) + (len));					\
+#define PULLUP_TO(_len, p, T)					\
+do {								\
+	int x = (_len) + sizeof(T);				\
+	if ((m)->m_len < x) {					\
+		args->m = m = m_pullup(m, x);			\
+		if (m == NULL)					\
+			goto pullup_failed;			\
+	}							\
+	p = (mtod(m, char *) + (_len));				\
 } while (0)
 
 	/*
@@ -2449,14 +1082,9 @@ do {									\
 		proto = ip->ip_p;
 		src_ip = ip->ip_src;
 		dst_ip = ip->ip_dst;
-		if (args->eh != NULL) { /* layer 2 packets are as on the wire */
-			offset = ntohs(ip->ip_off) & IP_OFFMASK;
-			ip_len = ntohs(ip->ip_len);
-		} else {
-			offset = ip->ip_off & IP_OFFMASK;
-			ip_len = ip->ip_len;
-		}
-		pktlen = ip_len < pktlen ? ip_len : pktlen;
+		offset = ntohs(ip->ip_off) & IP_OFFMASK;
+		iplen = ntohs(ip->ip_len);
+		pktlen = iplen < pktlen ? iplen : pktlen;
 
 		if (offset == 0) {
 			switch (proto) {
@@ -2499,64 +1127,47 @@ do {									\
 		IPFW_RUNLOCK(chain);
 		return (IP_FW_PASS);	/* accept */
 	}
-	mtag = m_tag_find(m, PACKET_TAG_DIVERT, NULL);
-	if (args->rule) {
+	if (args->rule.slot) {
 		/*
-		 * Packet has already been tagged. Look for the next rule
-		 * to restart processing. Make sure that args->rule still
-		 * exists and not changed.
+		 * Packet has already been tagged as a result of a previous
+		 * match on rule args->rule aka args->rule_id (PIPE, QUEUE,
+		 * REASS, NETGRAPH, DIVERT/TEE...)
+		 * Validate the slot and continue from the next one
+		 * if still present, otherwise do a lookup.
 		 */
-		if (chain->id != args->chain_id) {
-			for (f = chain->rules; f != NULL; f = f->next)
-				if (f == args->rule && f->id == args->rule_id)
-					break;
-
-			if (f != NULL)
-				f = f->next_rule;
-			else
-				f = ip_fw_default_rule;
-		} else 
-			f = args->rule->next_rule;
-
-		if (f == NULL)
-			f = lookup_next_rule(args->rule, 0);
+		f_pos = (args->rule.chain_id == chain->id) ?
+		    args->rule.slot :
+		    ipfw_find_rule(chain, args->rule.rulenum,
+			args->rule.rule_id);
 	} else {
-		/*
-		 * Find the starting rule. It can be either the first
-		 * one, or the one after divert_rule if asked so.
-		 */
-		int skipto = mtag ? divert_cookie(mtag) : 0;
-
-		f = chain->rules;
-		if (args->eh == NULL && skipto != 0) {
-			if (skipto >= IPFW_DEFAULT_RULE) {
-				IPFW_RUNLOCK(chain);
-				return (IP_FW_DENY); /* invalid */
-			}
-			while (f && f->rulenum <= skipto)
-				f = f->next;
-			if (f == NULL) {	/* drop packet */
-				IPFW_RUNLOCK(chain);
-				return (IP_FW_DENY);
-			}
-		}
-	}
-	/* reset divert rule to avoid confusion later */
-	if (mtag) {
-		divinput_flags = divert_info(mtag) &
-		    (IP_FW_DIVERT_OUTPUT_FLAG | IP_FW_DIVERT_LOOPBACK_FLAG);
-		m_tag_delete(m, mtag);
+		f_pos = 0;
 	}
 
 	/*
 	 * Now scan the rules, and parse microinstructions for each rule.
+	 * We have two nested loops and an inner switch. Sometimes we
+	 * need to break out of one or both loops, or re-enter one of
+	 * the loops with updated variables. Loop variables are:
+	 *
+	 *	f_pos (outer loop) points to the current rule.
+	 *		On output it points to the matching rule.
+	 *	done (outer loop) is used as a flag to break the loop.
+	 *	l (inner loop)	residual length of current rule.
+	 *		cmd points to the current microinstruction.
+	 *
+	 * We break the inner loop by setting l=0 and possibly
+	 * cmdlen=0 if we don't want to advance cmd.
+	 * We break the outer loop by setting done=1
+	 * We can restart the inner loop by setting l>0 and f_pos, f, cmd
+	 * as needed.
 	 */
-	for (; f; f = f->next) {
+	for (; f_pos < chain->n_rules; f_pos++) {
 		ipfw_insn *cmd;
 		uint32_t tablearg = 0;
 		int l, cmdlen, skip_or; /* skip rest of OR block */
+		struct ip_fw *f;
 
-again:
+		f = chain->map[f_pos];
 		if (V_set_disable & (1 << f->set) )
 			continue;
 
@@ -2571,7 +1182,7 @@ again:
 			 * the target rule.
 			 */
 
-check_body:
+/* check_body: */
 			cmdlen = F_LEN(cmd);
 			/*
 			 * An OR block (insn_1 || .. || insn_n) has the
@@ -2681,10 +1292,15 @@ check_body:
 				break;
 
 			case O_DIVERTED:
-				match = (cmd->arg1 & 1 && divinput_flags &
-				    IP_FW_DIVERT_LOOPBACK_FLAG) ||
-					(cmd->arg1 & 2 && divinput_flags &
-				    IP_FW_DIVERT_OUTPUT_FLAG);
+			    {
+				/* For diverted packets, args->rule.info
+				 * contains the divert port (in host format)
+				 * reason and direction.
+	 			 */
+				uint32_t i = args->rule.info;
+				match = (i&IPFW_IS_MASK) == IPFW_IS_DIVERT &&
+				    cmd->arg1 & ((i & IPFW_INFO_IN) ? 1 : 2);
+			    }
 				break;
 
 			case O_PROTO:
@@ -2704,13 +1320,46 @@ check_body:
 			case O_IP_SRC_LOOKUP:
 			case O_IP_DST_LOOKUP:
 				if (is_ipv4) {
-				    uint32_t a =
+				    uint32_t key =
 					(cmd->opcode == O_IP_DST_LOOKUP) ?
 					    dst_ip.s_addr : src_ip.s_addr;
 				    uint32_t v = 0;
 
-				    match = lookup_table(chain, cmd->arg1, a,
-					&v);
+				    if (cmdlen > F_INSN_SIZE(ipfw_insn_u32)) {
+					/* generic lookup. The key must be
+					 * in 32bit big-endian format.
+					 */
+					v = ((ipfw_insn_u32 *)cmd)->d[1];
+					if (v == 0)
+					    key = dst_ip.s_addr;
+					else if (v == 1)
+					    key = src_ip.s_addr;
+					else if (offset != 0)
+					    break;
+					else if (proto != IPPROTO_TCP &&
+						proto != IPPROTO_UDP)
+					    break;
+					else if (v == 2)
+					    key = htonl(dst_port);
+					else if (v == 3)
+					    key = htonl(src_port);
+					else if (v == 4 || v == 5) {
+					    check_uidgid(
+						(ipfw_insn_u32 *)cmd,
+						proto, oif,
+						dst_ip, dst_port,
+						src_ip, src_port, &ucred_cache,
+						&ucred_lookup, args->inp);
+					    if (v == 4 /* O_UID */)
+						key = ucred_cache->cr_uid;
+					    else if (v == 5 /* O_JAIL */)
+						key = ucred_cache->cr_prison->pr_id;
+					    key = htonl(key);
+					} else
+					    break;
+				    }
+				    match = ipfw_lookup_table(chain,
+					cmd->arg1, key, &v);
 				    if (!match)
 					break;
 				    if (cmdlen == F_INSN_SIZE(ipfw_insn_u32))
@@ -2833,7 +1482,7 @@ check_body:
 				    int i;
 
 				    if (cmd->opcode == O_IPLEN)
-					x = ip_len;
+					x = iplen;
 				    else if (cmd->opcode == O_IPTTL)
 					x = ip->ip_ttl;
 				    else /* must be IPID */
@@ -2868,7 +1517,7 @@ check_body:
 				    int i;
 
 				    tcp = TCP(ulp);
-				    x = ip_len -
+				    x = iplen -
 					((ip->ip_hl + tcp->th_off) << 2);
 				    if (cmdlen == 1) {
 					match = (cmd->arg1 == x);
@@ -2943,8 +1592,7 @@ check_body:
 			}
 
 			case O_LOG:
-				if (V_fw_verbose)
-					ipfw_log(f, hlen, args, m,
+				ipfw_log(f, hlen, args, m,
 					    oif, offset, tablearg, ip);
 				match = 1;
 				break;
@@ -3072,6 +1720,7 @@ check_body:
 				break;
 
 			case O_TAG: {
+				struct m_tag *mtag;
 				uint32_t tag = (cmd->arg1 == IP_FW_TABLEARG) ?
 				    tablearg : cmd->arg1;
 
@@ -3088,12 +1737,13 @@ check_body:
 				if (cmd->len & F_NOT) { /* `untag' action */
 					if (mtag != NULL)
 						m_tag_delete(m, mtag);
+					match = 0;
 				} else if (mtag == NULL) {
 					if ((mtag = m_tag_alloc(MTAG_IPFW,
 					    tag, 0, M_NOWAIT)) != NULL)
 						m_tag_prepend(m, mtag);
+					match = 1;
 				}
-				match = (cmd->len & F_NOT) ? 0: 1;
 				break;
 			}
 
@@ -3103,6 +1753,7 @@ check_body:
 				break;
 
 			case O_TAGGED: {
+				struct m_tag *mtag;
 				uint32_t tag = (cmd->arg1 == IP_FW_TABLEARG) ?
 				    tablearg : cmd->arg1;
 
@@ -3142,14 +1793,13 @@ check_body:
 			 *
 			 * In general, here we set retval and terminate the
 			 * outer loop (would be a 'break 3' in some language,
-			 * but we need to do a 'goto done').
+			 * but we need to set l=0, done=1)
 			 *
 			 * Exceptions:
 			 * O_COUNT and O_SKIPTO actions:
 			 *   instead of terminating, we jump to the next rule
-			 *   ('goto next_rule', equivalent to a 'break 2'),
-			 *   or to the SKIPTO target ('goto again' after
-			 *   having set f, cmd and l), respectively.
+			 *   (setting l=0), or to the SKIPTO target (setting
+			 *   f/f_len, cmd and l as needed), respectively.
 			 *
 			 * O_TAG, O_LOG and O_ALTQ action parameters:
 			 *   perform some action and set match = 1;
@@ -3160,25 +1810,28 @@ check_body:
 			 *   These opcodes try to install an entry in the
 			 *   state tables; if successful, we continue with
 			 *   the next opcode (match=1; break;), otherwise
-			 *   the packet *   must be dropped
-			 *   ('goto done' after setting retval);
+			 *   the packet must be dropped (set retval,
+			 *   break loops with l=0, done=1)
 			 *
 			 * O_PROBE_STATE and O_CHECK_STATE: these opcodes
 			 *   cause a lookup of the state table, and a jump
 			 *   to the 'action' part of the parent rule
-			 *   ('goto check_body') if an entry is found, or
+			 *   if an entry is found, or
 			 *   (CHECK_STATE only) a jump to the next rule if
-			 *   the entry is not found ('goto next_rule').
-			 *   The result of the lookup is cached to make
-			 *   further instances of these opcodes are
-			 *   effectively NOPs.
+			 *   the entry is not found.
+			 *   The result of the lookup is cached so that
+			 *   further instances of these opcodes become NOPs.
+			 *   The jump to the next rule is done by setting
+			 *   l=0, cmdlen=0.
 			 */
 			case O_LIMIT:
 			case O_KEEP_STATE:
-				if (install_state(f,
+				if (ipfw_install_state(f,
 				    (ipfw_insn_limit *)cmd, args, tablearg)) {
+					/* error or limit violation */
 					retval = IP_FW_DENY;
-					goto done; /* error/limit violation */
+					l = 0;	/* exit inner loop */
+					done = 1; /* exit outer loop */
 				}
 				match = 1;
 				break;
@@ -3195,22 +1848,32 @@ check_body:
 				 * to be run first).
 				 */
 				if (dyn_dir == MATCH_UNKNOWN &&
-				    (q = lookup_dyn_rule(&args->f_id,
+				    (q = ipfw_lookup_dyn_rule(&args->f_id,
 				     &dyn_dir, proto == IPPROTO_TCP ?
 					TCP(ulp) : NULL))
 					!= NULL) {
 					/*
 					 * Found dynamic entry, update stats
 					 * and jump to the 'action' part of
-					 * the parent rule.
+					 * the parent rule by setting
+					 * f, cmd, l and clearing cmdlen.
 					 */
 					q->pcnt++;
 					q->bcnt += pktlen;
+					/* XXX we would like to have f_pos
+					 * readily accessible in the dynamic
+				         * rule, instead of having to
+					 * lookup q->rule.
+					 */
 					f = q->rule;
+					f_pos = ipfw_find_rule(chain,
+						f->rulenum, f->id);
 					cmd = ACTION_PTR(f);
 					l = f->cmd_len - f->act_ofs;
-					IPFW_DYN_UNLOCK();
-					goto check_body;
+					ipfw_dyn_unlock();
+					cmdlen = 0;
+					match = 1;
+					break;
 				}
 				/*
 				 * Dynamic entry not found. If CHECK_STATE,
@@ -3218,70 +1881,96 @@ check_body:
 				 * ignore and continue with next opcode.
 				 */
 				if (cmd->opcode == O_CHECK_STATE)
-					goto next_rule;
+					l = 0;	/* exit inner loop */
 				match = 1;
 				break;
 
 			case O_ACCEPT:
 				retval = 0;	/* accept */
-				goto done;
+				l = 0;		/* exit inner loop */
+				done = 1;	/* exit outer loop */
+				break;
 
 			case O_PIPE:
 			case O_QUEUE:
-				args->rule = f; /* report matching rule */
-				args->rule_id = f->id;
-				args->chain_id = chain->id;
-				if (cmd->arg1 == IP_FW_TABLEARG)
-					args->cookie = tablearg;
-				else
-					args->cookie = cmd->arg1;
+				set_match(args, f_pos, chain);
+				args->rule.info = (cmd->arg1 == IP_FW_TABLEARG) ?
+					tablearg : cmd->arg1;
+				if (cmd->opcode == O_PIPE)
+					args->rule.info |= IPFW_IS_PIPE;
+				if (V_fw_one_pass)
+					args->rule.info |= IPFW_ONEPASS;
 				retval = IP_FW_DUMMYNET;
-				goto done;
+				l = 0;          /* exit inner loop */
+				done = 1;       /* exit outer loop */
+				break;
 
 			case O_DIVERT:
-			case O_TEE: {
-				struct divert_tag *dt;
-
+			case O_TEE:
 				if (args->eh) /* not on layer 2 */
-					break;
-				mtag = m_tag_get(PACKET_TAG_DIVERT,
-						sizeof(struct divert_tag),
-						M_NOWAIT);
-				if (mtag == NULL) {
-					/* XXX statistic */
-					/* drop packet */
-					IPFW_RUNLOCK(chain);
-					if (ucred_cache != NULL)
-						crfree(ucred_cache);
-					return (IP_FW_DENY);
-				}
-				dt = (struct divert_tag *)(mtag+1);
-				dt->cookie = f->rulenum;
-				if (cmd->arg1 == IP_FW_TABLEARG)
-					dt->info = tablearg;
-				else
-					dt->info = cmd->arg1;
-				m_tag_prepend(m, mtag);
+				    break;
+				/* otherwise this is terminal */
+				l = 0;		/* exit inner loop */
+				done = 1;	/* exit outer loop */
 				retval = (cmd->opcode == O_DIVERT) ?
-				    IP_FW_DIVERT : IP_FW_TEE;
-				goto done;
-			}
+					IP_FW_DIVERT : IP_FW_TEE;
+				set_match(args, f_pos, chain);
+				args->rule.info = (cmd->arg1 == IP_FW_TABLEARG) ?
+				    tablearg : cmd->arg1;
+				break;
+
 			case O_COUNT:
-			case O_SKIPTO:
 				f->pcnt++;	/* update stats */
 				f->bcnt += pktlen;
 				f->timestamp = time_uptime;
-				if (cmd->opcode == O_COUNT)
-					goto next_rule;
-				/* handle skipto */
-				if (cmd->arg1 == IP_FW_TABLEARG) {
-					f = lookup_next_rule(f, tablearg);
-				} else {
-					if (f->next_rule == NULL)
-						lookup_next_rule(f, 0);
-					f = f->next_rule;
+				l = 0;		/* exit inner loop */
+				break;
+
+			case O_SKIPTO:
+			    f->pcnt++;	/* update stats */
+			    f->bcnt += pktlen;
+			    f->timestamp = time_uptime;
+			    /* If possible use cached f_pos (in f->next_rule),
+			     * whose version is written in f->next_rule
+			     * (horrible hacks to avoid changing the ABI).
+			     */
+			    if (cmd->arg1 != IP_FW_TABLEARG &&
+				    (uintptr_t)f->x_next == chain->id) {
+				f_pos = (uintptr_t)f->next_rule;
+			    } else {
+				int i = (cmd->arg1 == IP_FW_TABLEARG) ?
+					tablearg : cmd->arg1;
+				/* make sure we do not jump backward */
+				if (i <= f->rulenum)
+				    i = f->rulenum + 1;
+				f_pos = ipfw_find_rule(chain, i, 0);
+				/* update the cache */
+				if (cmd->arg1 != IP_FW_TABLEARG) {
+				    f->next_rule =
+					(void *)(uintptr_t)f_pos;
+				    f->x_next =
+					(void *)(uintptr_t)chain->id;
 				}
-				goto again;
+			    }
+			    /*
+			     * Skip disabled rules, and re-enter
+			     * the inner loop with the correct
+			     * f_pos, f, l and cmd.
+			     * Also clear cmdlen and skip_or
+			     */
+			    for (; f_pos < chain->n_rules - 1 &&
+				    (V_set_disable &
+				     (1 << chain->map[f_pos]->set));
+				    f_pos++)
+				;
+			    /* prepare to enter the inner loop */
+			    f = chain->map[f_pos];
+			    l = f->cmd_len;
+			    cmd = f->cmd;
+			    match = 1;
+			    cmdlen = 0;
+			    skip_or = 0;
+			    break;
 
 			case O_REJECT:
 				/*
@@ -3294,7 +1983,7 @@ check_body:
 				     is_icmp_query(ICMP(ulp))) &&
 				    !(m->m_flags & (M_BCAST|M_MCAST)) &&
 				    !IN_MULTICAST(ntohl(dst_ip.s_addr))) {
-					send_reject(args, cmd->arg1, ip_len, ip);
+					send_reject(args, cmd->arg1, iplen, ip);
 					m = args->m;
 				}
 				/* FALLTHROUGH */
@@ -3315,41 +2004,41 @@ check_body:
 #endif
 			case O_DENY:
 				retval = IP_FW_DENY;
-				goto done;
+				l = 0;		/* exit inner loop */
+				done = 1;	/* exit outer loop */
+				break;
 
-			case O_FORWARD_IP: {
-				struct sockaddr_in *sa;
-				sa = &(((ipfw_insn_sa *)cmd)->sa);
+			case O_FORWARD_IP:
 				if (args->eh)	/* not valid on layer2 pkts */
 					break;
 				if (!q || dyn_dir == MATCH_FORWARD) {
-					if (sa->sin_addr.s_addr == INADDR_ANY) {
-						bcopy(sa, &args->hopstore,
+				    struct sockaddr_in *sa;
+				    sa = &(((ipfw_insn_sa *)cmd)->sa);
+				    if (sa->sin_addr.s_addr == INADDR_ANY) {
+					bcopy(sa, &args->hopstore,
 							sizeof(*sa));
-						args->hopstore.sin_addr.s_addr =
+					args->hopstore.sin_addr.s_addr =
 						    htonl(tablearg);
-						args->next_hop =
-						    &args->hopstore;
-					} else {
-						args->next_hop = sa;
-					}
+					args->next_hop = &args->hopstore;
+				    } else {
+					args->next_hop = sa;
+				    }
 				}
 				retval = IP_FW_PASS;
-			    }
-			    goto done;
+				l = 0;          /* exit inner loop */
+				done = 1;       /* exit outer loop */
+				break;
 
 			case O_NETGRAPH:
 			case O_NGTEE:
-				args->rule = f;	/* report matching rule */
-				args->rule_id = f->id;
-				args->chain_id = chain->id;
-				if (cmd->arg1 == IP_FW_TABLEARG)
-					args->cookie = tablearg;
-				else
-					args->cookie = cmd->arg1;
+				set_match(args, f_pos, chain);
+				args->rule.info = (cmd->arg1 == IP_FW_TABLEARG) ?
+					tablearg : cmd->arg1;
 				retval = (cmd->opcode == O_NETGRAPH) ?
 				    IP_FW_NETGRAPH : IP_FW_NGTEE;
-				goto done;
+				l = 0;          /* exit inner loop */
+				done = 1;       /* exit outer loop */
+				break;
 
 			case O_SETFIB:
 				f->pcnt++;	/* update stats */
@@ -3357,88 +2046,86 @@ check_body:
 				f->timestamp = time_uptime;
 				M_SETFIB(m, cmd->arg1);
 				args->f_id.fib = cmd->arg1;
-				goto next_rule;
+				l = 0;		/* exit inner loop */
+				break;
 
-			case O_NAT: {
-                        	struct cfg_nat *t;
-                        	int nat_id;
+			case O_NAT:
+ 				if (!IPFW_NAT_LOADED) {
+				    retval = IP_FW_DENY;
+				} else {
+				    struct cfg_nat *t;
+				    int nat_id;
+
+				    set_match(args, f_pos, chain);
+				    t = ((ipfw_insn_nat *)cmd)->nat;
+				    if (t == NULL) {
+					nat_id = (cmd->arg1 == IP_FW_TABLEARG) ?
+						tablearg : cmd->arg1;
+					t = (*lookup_nat_ptr)(&chain->nat, nat_id);
 
- 				if (IPFW_NAT_LOADED) {
-					args->rule = f; /* Report matching rule. */
-					args->rule_id = f->id;
-					args->chain_id = chain->id;
-					t = ((ipfw_insn_nat *)cmd)->nat;
 					if (t == NULL) {
-						nat_id = (cmd->arg1 == IP_FW_TABLEARG) ?
-						    tablearg : cmd->arg1;
-						LOOKUP_NAT(V_layer3_chain, nat_id, t);
-						if (t == NULL) {
-							retval = IP_FW_DENY;
-							goto done;
-						}
-						if (cmd->arg1 != IP_FW_TABLEARG)
-							((ipfw_insn_nat *)cmd)->nat = t;
+					    retval = IP_FW_DENY;
+					    l = 0;	/* exit inner loop */
+					    done = 1;	/* exit outer loop */
+					    break;
 					}
-					retval = ipfw_nat_ptr(args, t, m);
-				} else
-					retval = IP_FW_DENY;
-				goto done;
-			}
+					if (cmd->arg1 != IP_FW_TABLEARG)
+					    ((ipfw_insn_nat *)cmd)->nat = t;
+				    }
+				    retval = ipfw_nat_ptr(args, t, m);
+				}
+				l = 0;          /* exit inner loop */
+				done = 1;       /* exit outer loop */
+				break;
 
 			case O_REASS: {
 				int ip_off;
 
 				f->pcnt++;
 				f->bcnt += pktlen;
-				ip_off = (args->eh != NULL) ? ntohs(ip->ip_off) : ip->ip_off;
-				if (ip_off & (IP_MF | IP_OFFMASK)) {
-					/* 
-					 * ip_reass() expects len & off in host
-					 * byte order: fix them in case we come
-					 * from layer2.
-					 */
-					if (args->eh != NULL) {
-						ip->ip_len = ntohs(ip->ip_len);
-						ip->ip_off = ntohs(ip->ip_off);
-					}
+				l = 0;	/* in any case exit inner loop */
+				ip_off = ntohs(ip->ip_off);
 
-					m = ip_reass(m);
-					args->m = m;
-					
-					/*
-					 * IP header checksum fixup after 
-					 * reassembly and leave header
-					 * in network byte order.
-					 */
-					if (m != NULL) {
-						int hlen;
-					
-						ip = mtod(m, struct ip *);
-						hlen = ip->ip_hl << 2;
-						/* revert len & off for layer2 pkts */
-						if (args->eh != NULL)
-							ip->ip_len = htons(ip->ip_len);
-						ip->ip_sum = 0;
-						if (hlen == sizeof(struct ip))
-							ip->ip_sum = in_cksum_hdr(ip);
-						else
-							ip->ip_sum = in_cksum(m, hlen);
-						retval = IP_FW_REASS;
-						args->rule = f;
-						args->rule_id = f->id;
-						args->chain_id = chain->id;
-						goto done;
-					} else {
-						retval = IP_FW_DENY;
-						goto done;
-					}
+				/* if not fragmented, go to next rule */
+				if ((ip_off & (IP_MF | IP_OFFMASK)) == 0)
+				    break;
+				/* 
+				 * ip_reass() expects len & off in host
+				 * byte order.
+				 */
+				SET_HOST_IPLEN(ip);
+
+				args->m = m = ip_reass(m);
+
+				/*
+				 * do IP header checksum fixup.
+				 */
+				if (m == NULL) { /* fragment got swallowed */
+				    retval = IP_FW_DENY;
+				} else { /* good, packet complete */
+				    int hlen;
+
+				    ip = mtod(m, struct ip *);
+				    hlen = ip->ip_hl << 2;
+				    SET_NET_IPLEN(ip);
+				    ip->ip_sum = 0;
+				    if (hlen == sizeof(struct ip))
+					ip->ip_sum = in_cksum_hdr(ip);
+				    else
+					ip->ip_sum = in_cksum(m, hlen);
+				    retval = IP_FW_REASS;
+				    set_match(args, f_pos, chain);
 				}
-				goto next_rule;
+				done = 1;	/* exit outer loop */
+				break;
 			}
 
 			default:
 				panic("-- unknown opcode %d\n", cmd->opcode);
 			} /* end of switch() on opcodes */
+			/*
+			 * if we get here with l=0, then match is irrelevant.
+			 */
 
 			if (cmd->len & F_NOT)
 				match = !match;
@@ -3451,22 +2138,25 @@ check_body:
 					break;		/* try next rule    */
 			}
 
-		}	/* end of inner for, scan opcodes */
+		}	/* end of inner loop, scan opcodes */
 
-next_rule:;		/* try next rule		*/
+		if (done)
+			break;
+
+/* next_rule:; */	/* try next rule		*/
 
 	}		/* end of outer for, scan rules */
-	printf("ipfw: ouch!, skip past end of rules, denying packet\n");
-	IPFW_RUNLOCK(chain);
-	if (ucred_cache != NULL)
-		crfree(ucred_cache);
-	return (IP_FW_DENY);
 
-done:
-	/* Update statistics */
-	f->pcnt++;
-	f->bcnt += pktlen;
-	f->timestamp = time_uptime;
+	if (done) {
+		struct ip_fw *rule = chain->map[f_pos];
+		/* Update statistics */
+		rule->pcnt++;
+		rule->bcnt += pktlen;
+		rule->timestamp = time_uptime;
+	} else {
+		retval = IP_FW_DENY;
+		printf("ipfw: ouch!, skip past end of rules, denying packet\n");
+	}
 	IPFW_RUNLOCK(chain);
 	if (ucred_cache != NULL)
 		crfree(ucred_cache);
@@ -3479,1113 +2169,10 @@ pullup_failed:
 }
 
 /*
- * When a rule is added/deleted, clear the next_rule pointers in all rules.
- * These will be reconstructed on the fly as packets are matched.
+ * Module and VNET glue
  */
-static void
-flush_rule_ptrs(struct ip_fw_chain *chain)
-{
-	struct ip_fw *rule;
-
-	IPFW_WLOCK_ASSERT(chain);
-
-	chain->id++;
-
-	for (rule = chain->rules; rule; rule = rule->next)
-		rule->next_rule = NULL;
-}
 
 /*
- * Add a new rule to the list. Copy the rule into a malloc'ed area, then
- * possibly create a rule number and add the rule to the list.
- * Update the rule_number in the input struct so the caller knows it as well.
- */
-static int
-add_rule(struct ip_fw_chain *chain, struct ip_fw *input_rule)
-{
-	struct ip_fw *rule, *f, *prev;
-	int l = RULESIZE(input_rule);
-
-	if (chain->rules == NULL && input_rule->rulenum != IPFW_DEFAULT_RULE)
-		return (EINVAL);
-
-	rule = malloc(l, M_IPFW, M_NOWAIT | M_ZERO);
-	if (rule == NULL)
-		return (ENOSPC);
-
-	bcopy(input_rule, rule, l);
-
-	rule->next = NULL;
-	rule->next_rule = NULL;
-
-	rule->pcnt = 0;
-	rule->bcnt = 0;
-	rule->timestamp = 0;
-
-	IPFW_WLOCK(chain);
-
-	if (chain->rules == NULL) {	/* default rule */
-		chain->rules = rule;
-		rule->id = ++chain->id;
-		goto done;
-        }
-
-	/*
-	 * If rulenum is 0, find highest numbered rule before the
-	 * default rule, and add autoinc_step
-	 */
-	if (V_autoinc_step < 1)
-		V_autoinc_step = 1;
-	else if (V_autoinc_step > 1000)
-		V_autoinc_step = 1000;
-	if (rule->rulenum == 0) {
-		/*
-		 * locate the highest numbered rule before default
-		 */
-		for (f = chain->rules; f; f = f->next) {
-			if (f->rulenum == IPFW_DEFAULT_RULE)
-				break;
-			rule->rulenum = f->rulenum;
-		}
-		if (rule->rulenum < IPFW_DEFAULT_RULE - V_autoinc_step)
-			rule->rulenum += V_autoinc_step;
-		input_rule->rulenum = rule->rulenum;
-	}
-
-	/*
-	 * Now insert the new rule in the right place in the sorted list.
-	 */
-	for (prev = NULL, f = chain->rules; f; prev = f, f = f->next) {
-		if (f->rulenum > rule->rulenum) { /* found the location */
-			if (prev) {
-				rule->next = f;
-				prev->next = rule;
-			} else { /* head insert */
-				rule->next = chain->rules;
-				chain->rules = rule;
-			}
-			break;
-		}
-	}
-	flush_rule_ptrs(chain);
-	/* chain->id incremented inside flush_rule_ptrs() */
-	rule->id = chain->id;
-done:
-	V_static_count++;
-	V_static_len += l;
-	IPFW_WUNLOCK(chain);
-	DEB(printf("ipfw: installed rule %d, static count now %d\n",
-		rule->rulenum, V_static_count);)
-	return (0);
-}
-
-/**
- * Remove a static rule (including derived * dynamic rules)
- * and place it on the ``reap list'' for later reclamation.
- * The caller is in charge of clearing rule pointers to avoid
- * dangling pointers.
- * @return a pointer to the next entry.
- * Arguments are not checked, so they better be correct.
- */
-static struct ip_fw *
-remove_rule(struct ip_fw_chain *chain, struct ip_fw *rule,
-    struct ip_fw *prev)
-{
-	struct ip_fw *n;
-	int l = RULESIZE(rule);
-
-	IPFW_WLOCK_ASSERT(chain);
-
-	n = rule->next;
-	IPFW_DYN_LOCK();
-	remove_dyn_rule(rule, NULL /* force removal */);
-	IPFW_DYN_UNLOCK();
-	if (prev == NULL)
-		chain->rules = n;
-	else
-		prev->next = n;
-	V_static_count--;
-	V_static_len -= l;
-
-	rule->next = chain->reap;
-	chain->reap = rule;
-
-	return n;
-}
-
-/*
- * Reclaim storage associated with a list of rules.  This is
- * typically the list created using remove_rule.
- * A NULL pointer on input is handled correctly.
- */
-static void
-reap_rules(struct ip_fw *head)
-{
-	struct ip_fw *rule;
-
-	while ((rule = head) != NULL) {
-		head = head->next;
-		free(rule, M_IPFW);
-	}
-}
-
-/*
- * Remove all rules from a chain (except rules in set RESVD_SET
- * unless kill_default = 1).  The caller is responsible for
- * reclaiming storage for the rules left in chain->reap.
- */
-static void
-free_chain(struct ip_fw_chain *chain, int kill_default)
-{
-	struct ip_fw *prev, *rule;
-
-	IPFW_WLOCK_ASSERT(chain);
-
-	chain->reap = NULL;
-	flush_rule_ptrs(chain); /* more efficient to do outside the loop */
-	for (prev = NULL, rule = chain->rules; rule ; )
-		if (kill_default || rule->set != RESVD_SET)
-			rule = remove_rule(chain, rule, prev);
-		else {
-			prev = rule;
-			rule = rule->next;
-		}
-}
-
-/**
- * Remove all rules with given number, and also do set manipulation.
- * Assumes chain != NULL && *chain != NULL.
- *
- * The argument is an u_int32_t. The low 16 bit are the rule or set number,
- * the next 8 bits are the new set, the top 8 bits are the command:
- *
- *	0	delete rules with given number
- *	1	delete rules with given set number
- *	2	move rules with given number to new set
- *	3	move rules with given set number to new set
- *	4	swap sets with given numbers
- *	5	delete rules with given number and with given set number
- */
-static int
-del_entry(struct ip_fw_chain *chain, u_int32_t arg)
-{
-	struct ip_fw *prev = NULL, *rule;
-	u_int16_t rulenum;	/* rule or old_set */
-	u_int8_t cmd, new_set;
-
-	rulenum = arg & 0xffff;
-	cmd = (arg >> 24) & 0xff;
-	new_set = (arg >> 16) & 0xff;
-
-	if (cmd > 5 || new_set > RESVD_SET)
-		return EINVAL;
-	if (cmd == 0 || cmd == 2 || cmd == 5) {
-		if (rulenum >= IPFW_DEFAULT_RULE)
-			return EINVAL;
-	} else {
-		if (rulenum > RESVD_SET)	/* old_set */
-			return EINVAL;
-	}
-
-	IPFW_WLOCK(chain);
-	rule = chain->rules;	/* common starting point */
-	chain->reap = NULL;	/* prepare for deletions */
-	switch (cmd) {
-	case 0:	/* delete rules with given number */
-		/*
-		 * locate first rule to delete
-		 */
-		for (; rule->rulenum < rulenum; prev = rule, rule = rule->next)
-			;
-		if (rule->rulenum != rulenum) {
-			IPFW_WUNLOCK(chain);
-			return EINVAL;
-		}
-
-		/*
-		 * flush pointers outside the loop, then delete all matching
-		 * rules. prev remains the same throughout the cycle.
-		 */
-		flush_rule_ptrs(chain);
-		while (rule->rulenum == rulenum)
-			rule = remove_rule(chain, rule, prev);
-		break;
-
-	case 1:	/* delete all rules with given set number */
-		flush_rule_ptrs(chain);
-		while (rule->rulenum < IPFW_DEFAULT_RULE) {
-			if (rule->set == rulenum)
-				rule = remove_rule(chain, rule, prev);
-			else {
-				prev = rule;
-				rule = rule->next;
-			}
-		}
-		break;
-
-	case 2:	/* move rules with given number to new set */
-		for (; rule->rulenum < IPFW_DEFAULT_RULE; rule = rule->next)
-			if (rule->rulenum == rulenum)
-				rule->set = new_set;
-		break;
-
-	case 3: /* move rules with given set number to new set */
-		for (; rule->rulenum < IPFW_DEFAULT_RULE; rule = rule->next)
-			if (rule->set == rulenum)
-				rule->set = new_set;
-		break;
-
-	case 4: /* swap two sets */
-		for (; rule->rulenum < IPFW_DEFAULT_RULE; rule = rule->next)
-			if (rule->set == rulenum)
-				rule->set = new_set;
-			else if (rule->set == new_set)
-				rule->set = rulenum;
-		break;
-
-	case 5: /* delete rules with given number and with given set number.
-		 * rulenum - given rule number;
-		 * new_set - given set number.
-		 */
-		for (; rule->rulenum < rulenum; prev = rule, rule = rule->next)
-			;
-		if (rule->rulenum != rulenum) {
-			IPFW_WUNLOCK(chain);
-			return (EINVAL);
-		}
-		flush_rule_ptrs(chain);
-		while (rule->rulenum == rulenum) {
-			if (rule->set == new_set)
-				rule = remove_rule(chain, rule, prev);
-			else {
-				prev = rule;
-				rule = rule->next;
-			}
-		}
-	}
-	/*
-	 * Look for rules to reclaim.  We grab the list before
-	 * releasing the lock then reclaim them w/o the lock to
-	 * avoid a LOR with dummynet.
-	 */
-	rule = chain->reap;
-	IPFW_WUNLOCK(chain);
-	reap_rules(rule);
-	return 0;
-}
-
-/*
- * Clear counters for a specific rule.
- * The enclosing "table" is assumed locked.
- */
-static void
-clear_counters(struct ip_fw *rule, int log_only)
-{
-	ipfw_insn_log *l = (ipfw_insn_log *)ACTION_PTR(rule);
-
-	if (log_only == 0) {
-		rule->bcnt = rule->pcnt = 0;
-		rule->timestamp = 0;
-	}
-	if (l->o.opcode == O_LOG)
-		l->log_left = l->max_log;
-}
-
-/**
- * Reset some or all counters on firewall rules.
- * The argument `arg' is an u_int32_t. The low 16 bit are the rule number,
- * the next 8 bits are the set number, the top 8 bits are the command:
- *	0	work with rules from all set's;
- *	1	work with rules only from specified set.
- * Specified rule number is zero if we want to clear all entries.
- * log_only is 1 if we only want to reset logs, zero otherwise.
- */
-static int
-zero_entry(struct ip_fw_chain *chain, u_int32_t arg, int log_only)
-{
-	struct ip_fw *rule;
-	char *msg;
-
-	uint16_t rulenum = arg & 0xffff;
-	uint8_t set = (arg >> 16) & 0xff;
-	uint8_t cmd = (arg >> 24) & 0xff;
-
-	if (cmd > 1)
-		return (EINVAL);
-	if (cmd == 1 && set > RESVD_SET)
-		return (EINVAL);
-
-	IPFW_WLOCK(chain);
-	if (rulenum == 0) {
-		V_norule_counter = 0;
-		for (rule = chain->rules; rule; rule = rule->next) {
-			/* Skip rules from another set. */
-			if (cmd == 1 && rule->set != set)
-				continue;
-			clear_counters(rule, log_only);
-		}
-		msg = log_only ? "All logging counts reset" :
-		    "Accounting cleared";
-	} else {
-		int cleared = 0;
-		/*
-		 * We can have multiple rules with the same number, so we
-		 * need to clear them all.
-		 */
-		for (rule = chain->rules; rule; rule = rule->next)
-			if (rule->rulenum == rulenum) {
-				while (rule && rule->rulenum == rulenum) {
-					if (cmd == 0 || rule->set == set)
-						clear_counters(rule, log_only);
-					rule = rule->next;
-				}
-				cleared = 1;
-				break;
-			}
-		if (!cleared) {	/* we did not find any matching rules */
-			IPFW_WUNLOCK(chain);
-			return (EINVAL);
-		}
-		msg = log_only ? "logging count reset" : "cleared";
-	}
-	IPFW_WUNLOCK(chain);
-
-	if (V_fw_verbose) {
-		int lev = LOG_SECURITY | LOG_NOTICE;
-
-		if (rulenum)
-			log(lev, "ipfw: Entry %d %s.\n", rulenum, msg);
-		else
-			log(lev, "ipfw: %s.\n", msg);
-	}
-	return (0);
-}
-
-/*
- * Check validity of the structure before insert.
- * Fortunately rules are simple, so this mostly need to check rule sizes.
- */
-static int
-check_ipfw_struct(struct ip_fw *rule, int size)
-{
-	int l, cmdlen = 0;
-	int have_action=0;
-	ipfw_insn *cmd;
-
-	if (size < sizeof(*rule)) {
-		printf("ipfw: rule too short\n");
-		return (EINVAL);
-	}
-	/* first, check for valid size */
-	l = RULESIZE(rule);
-	if (l != size) {
-		printf("ipfw: size mismatch (have %d want %d)\n", size, l);
-		return (EINVAL);
-	}
-	if (rule->act_ofs >= rule->cmd_len) {
-		printf("ipfw: bogus action offset (%u > %u)\n",
-		    rule->act_ofs, rule->cmd_len - 1);
-		return (EINVAL);
-	}
-	/*
-	 * Now go for the individual checks. Very simple ones, basically only
-	 * instruction sizes.
-	 */
-	for (l = rule->cmd_len, cmd = rule->cmd ;
-			l > 0 ; l -= cmdlen, cmd += cmdlen) {
-		cmdlen = F_LEN(cmd);
-		if (cmdlen > l) {
-			printf("ipfw: opcode %d size truncated\n",
-			    cmd->opcode);
-			return EINVAL;
-		}
-		DEB(printf("ipfw: opcode %d\n", cmd->opcode);)
-		switch (cmd->opcode) {
-		case O_PROBE_STATE:
-		case O_KEEP_STATE:
-		case O_PROTO:
-		case O_IP_SRC_ME:
-		case O_IP_DST_ME:
-		case O_LAYER2:
-		case O_IN:
-		case O_FRAG:
-		case O_DIVERTED:
-		case O_IPOPT:
-		case O_IPTOS:
-		case O_IPPRECEDENCE:
-		case O_IPVER:
-		case O_TCPWIN:
-		case O_TCPFLAGS:
-		case O_TCPOPTS:
-		case O_ESTAB:
-		case O_VERREVPATH:
-		case O_VERSRCREACH:
-		case O_ANTISPOOF:
-		case O_IPSEC:
-#ifdef INET6
-		case O_IP6_SRC_ME:
-		case O_IP6_DST_ME:
-		case O_EXT_HDR:
-		case O_IP6:
-#endif
-		case O_IP4:
-		case O_TAG:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn))
-				goto bad_size;
-			break;
-
-		case O_FIB:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn))
-				goto bad_size;
-			if (cmd->arg1 >= rt_numfibs) {
-				printf("ipfw: invalid fib number %d\n",
-					cmd->arg1);
-				return EINVAL;
-			}
-			break;
-
-		case O_SETFIB:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn))
-				goto bad_size;
-			if (cmd->arg1 >= rt_numfibs) {
-				printf("ipfw: invalid fib number %d\n",
-					cmd->arg1);
-				return EINVAL;
-			}
-			goto check_action;
-
-		case O_UID:
-		case O_GID:
-		case O_JAIL:
-		case O_IP_SRC:
-		case O_IP_DST:
-		case O_TCPSEQ:
-		case O_TCPACK:
-		case O_PROB:
-		case O_ICMPTYPE:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn_u32))
-				goto bad_size;
-			break;
-
-		case O_LIMIT:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn_limit))
-				goto bad_size;
-			break;
-
-		case O_LOG:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn_log))
-				goto bad_size;
-
-			((ipfw_insn_log *)cmd)->log_left =
-			    ((ipfw_insn_log *)cmd)->max_log;
-
-			break;
-
-		case O_IP_SRC_MASK:
-		case O_IP_DST_MASK:
-			/* only odd command lengths */
-			if ( !(cmdlen & 1) || cmdlen > 31)
-				goto bad_size;
-			break;
-
-		case O_IP_SRC_SET:
-		case O_IP_DST_SET:
-			if (cmd->arg1 == 0 || cmd->arg1 > 256) {
-				printf("ipfw: invalid set size %d\n",
-					cmd->arg1);
-				return EINVAL;
-			}
-			if (cmdlen != F_INSN_SIZE(ipfw_insn_u32) +
-			    (cmd->arg1+31)/32 )
-				goto bad_size;
-			break;
-
-		case O_IP_SRC_LOOKUP:
-		case O_IP_DST_LOOKUP:
-			if (cmd->arg1 >= IPFW_TABLES_MAX) {
-				printf("ipfw: invalid table number %d\n",
-				    cmd->arg1);
-				return (EINVAL);
-			}
-			if (cmdlen != F_INSN_SIZE(ipfw_insn) &&
-			    cmdlen != F_INSN_SIZE(ipfw_insn_u32))
-				goto bad_size;
-			break;
-
-		case O_MACADDR2:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn_mac))
-				goto bad_size;
-			break;
-
-		case O_NOP:
-		case O_IPID:
-		case O_IPTTL:
-		case O_IPLEN:
-		case O_TCPDATALEN:
-		case O_TAGGED:
-			if (cmdlen < 1 || cmdlen > 31)
-				goto bad_size;
-			break;
-
-		case O_MAC_TYPE:
-		case O_IP_SRCPORT:
-		case O_IP_DSTPORT: /* XXX artificial limit, 30 port pairs */
-			if (cmdlen < 2 || cmdlen > 31)
-				goto bad_size;
-			break;
-
-		case O_RECV:
-		case O_XMIT:
-		case O_VIA:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn_if))
-				goto bad_size;
-			break;
-
-		case O_ALTQ:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn_altq))
-				goto bad_size;
-			break;
-
-		case O_PIPE:
-		case O_QUEUE:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn))
-				goto bad_size;
-			goto check_action;
-
-		case O_FORWARD_IP:
-#ifdef	IPFIREWALL_FORWARD
-			if (cmdlen != F_INSN_SIZE(ipfw_insn_sa))
-				goto bad_size;
-			goto check_action;
-#else
-			return EINVAL;
-#endif
-
-		case O_DIVERT:
-		case O_TEE:
-			if (ip_divert_ptr == NULL)
-				return EINVAL;
-			else
-				goto check_size;
-		case O_NETGRAPH:
-		case O_NGTEE:
-			if (!NG_IPFW_LOADED)
-				return EINVAL;
-			else
-				goto check_size;
-		case O_NAT:
-			if (!IPFW_NAT_LOADED)
-				return EINVAL;
-			if (cmdlen != F_INSN_SIZE(ipfw_insn_nat))
- 				goto bad_size;		
- 			goto check_action;
-		case O_FORWARD_MAC: /* XXX not implemented yet */
-		case O_CHECK_STATE:
-		case O_COUNT:
-		case O_ACCEPT:
-		case O_DENY:
-		case O_REJECT:
-#ifdef INET6
-		case O_UNREACH6:
-#endif
-		case O_SKIPTO:
-		case O_REASS:
-check_size:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn))
-				goto bad_size;
-check_action:
-			if (have_action) {
-				printf("ipfw: opcode %d, multiple actions"
-					" not allowed\n",
-					cmd->opcode);
-				return EINVAL;
-			}
-			have_action = 1;
-			if (l != cmdlen) {
-				printf("ipfw: opcode %d, action must be"
-					" last opcode\n",
-					cmd->opcode);
-				return EINVAL;
-			}
-			break;
-#ifdef INET6
-		case O_IP6_SRC:
-		case O_IP6_DST:
-			if (cmdlen != F_INSN_SIZE(struct in6_addr) +
-			    F_INSN_SIZE(ipfw_insn))
-				goto bad_size;
-			break;
-
-		case O_FLOW6ID:
-			if (cmdlen != F_INSN_SIZE(ipfw_insn_u32) +
-			    ((ipfw_insn_u32 *)cmd)->o.arg1)
-				goto bad_size;
-			break;
-
-		case O_IP6_SRC_MASK:
-		case O_IP6_DST_MASK:
-			if ( !(cmdlen & 1) || cmdlen > 127)
-				goto bad_size;
-			break;
-		case O_ICMP6TYPE:
-			if( cmdlen != F_INSN_SIZE( ipfw_insn_icmp6 ) )
-				goto bad_size;
-			break;
-#endif
-
-		default:
-			switch (cmd->opcode) {
-#ifndef INET6
-			case O_IP6_SRC_ME:
-			case O_IP6_DST_ME:
-			case O_EXT_HDR:
-			case O_IP6:
-			case O_UNREACH6:
-			case O_IP6_SRC:
-			case O_IP6_DST:
-			case O_FLOW6ID:
-			case O_IP6_SRC_MASK:
-			case O_IP6_DST_MASK:
-			case O_ICMP6TYPE:
-				printf("ipfw: no IPv6 support in kernel\n");
-				return EPROTONOSUPPORT;
-#endif
-			default:
-				printf("ipfw: opcode %d, unknown opcode\n",
-					cmd->opcode);
-				return EINVAL;
-			}
-		}
-	}
-	if (have_action == 0) {
-		printf("ipfw: missing action\n");
-		return EINVAL;
-	}
-	return 0;
-
-bad_size:
-	printf("ipfw: opcode %d size %d wrong\n",
-		cmd->opcode, cmdlen);
-	return EINVAL;
-}
-
-/*
- * Copy the static and dynamic rules to the supplied buffer
- * and return the amount of space actually used.
- */
-static size_t
-ipfw_getrules(struct ip_fw_chain *chain, void *buf, size_t space)
-{
-	char *bp = buf;
-	char *ep = bp + space;
-	struct ip_fw *rule;
-	int i;
-	time_t	boot_seconds;
-
-        boot_seconds = boottime.tv_sec;
-	/* XXX this can take a long time and locking will block packet flow */
-	IPFW_RLOCK(chain);
-	for (rule = chain->rules; rule ; rule = rule->next) {
-		/*
-		 * Verify the entry fits in the buffer in case the
-		 * rules changed between calculating buffer space and
-		 * now.  This would be better done using a generation
-		 * number but should suffice for now.
-		 */
-		i = RULESIZE(rule);
-		if (bp + i <= ep) {
-			bcopy(rule, bp, i);
-			/*
-			 * XXX HACK. Store the disable mask in the "next"
-			 * pointer in a wild attempt to keep the ABI the same.
-			 * Why do we do this on EVERY rule?
-			 */
-			bcopy(&V_set_disable,
-			    &(((struct ip_fw *)bp)->next_rule),
-			    sizeof(V_set_disable));
-			if (((struct ip_fw *)bp)->timestamp)
-				((struct ip_fw *)bp)->timestamp += boot_seconds;
-			bp += i;
-		}
-	}
-	IPFW_RUNLOCK(chain);
-	if (V_ipfw_dyn_v) {
-		ipfw_dyn_rule *p, *last = NULL;
-
-		IPFW_DYN_LOCK();
-		for (i = 0 ; i < V_curr_dyn_buckets; i++)
-			for (p = V_ipfw_dyn_v[i] ; p != NULL; p = p->next) {
-				if (bp + sizeof *p <= ep) {
-					ipfw_dyn_rule *dst =
-						(ipfw_dyn_rule *)bp;
-					bcopy(p, dst, sizeof *p);
-					bcopy(&(p->rule->rulenum), &(dst->rule),
-					    sizeof(p->rule->rulenum));
-					/*
-					 * store set number into high word of
-					 * dst->rule pointer.
-					 */
-					bcopy(&(p->rule->set),
-					    (char *)&dst->rule +
-					    sizeof(p->rule->rulenum),
-					    sizeof(p->rule->set));
-					/*
-					 * store a non-null value in "next".
-					 * The userland code will interpret a
-					 * NULL here as a marker
-					 * for the last dynamic rule.
-					 */
-					bcopy(&dst, &dst->next, sizeof(dst));
-					last = dst;
-					dst->expire =
-					    TIME_LEQ(dst->expire, time_uptime) ?
-						0 : dst->expire - time_uptime ;
-					bp += sizeof(ipfw_dyn_rule);
-				}
-			}
-		IPFW_DYN_UNLOCK();
-		if (last != NULL) /* mark last dynamic rule */
-			bzero(&last->next, sizeof(last));
-	}
-	return (bp - (char *)buf);
-}
-
-
-/**
- * {set|get}sockopt parser.
- */
-static int
-ipfw_ctl(struct sockopt *sopt)
-{
-#define	RULE_MAXSIZE	(256*sizeof(u_int32_t))
-	int error;
-	size_t size;
-	struct ip_fw *buf, *rule;
-	u_int32_t rulenum[2];
-
-	error = priv_check(sopt->sopt_td, PRIV_NETINET_IPFW);
-	if (error)
-		return (error);
-
-	/*
-	 * Disallow modifications in really-really secure mode, but still allow
-	 * the logging counters to be reset.
-	 */
-	if (sopt->sopt_name == IP_FW_ADD ||
-	    (sopt->sopt_dir == SOPT_SET && sopt->sopt_name != IP_FW_RESETLOG)) {
-		error = securelevel_ge(sopt->sopt_td->td_ucred, 3);
-		if (error)
-			return (error);
-	}
-
-	error = 0;
-
-	switch (sopt->sopt_name) {
-	case IP_FW_GET:
-		/*
-		 * pass up a copy of the current rules. Static rules
-		 * come first (the last of which has number IPFW_DEFAULT_RULE),
-		 * followed by a possibly empty list of dynamic rule.
-		 * The last dynamic rule has NULL in the "next" field.
-		 *
-		 * Note that the calculated size is used to bound the
-		 * amount of data returned to the user.  The rule set may
-		 * change between calculating the size and returning the
-		 * data in which case we'll just return what fits.
-		 */
-		size = V_static_len;	/* size of static rules */
-		if (V_ipfw_dyn_v)		/* add size of dyn.rules */
-			size += (V_dyn_count * sizeof(ipfw_dyn_rule));
-
-		if (size >= sopt->sopt_valsize)
-			break;
-		/*
-		 * XXX todo: if the user passes a short length just to know
-		 * how much room is needed, do not bother filling up the
-		 * buffer, just jump to the sooptcopyout.
-		 */
-		buf = malloc(size, M_TEMP, M_WAITOK);
-		error = sooptcopyout(sopt, buf,
-				ipfw_getrules(&V_layer3_chain, buf, size));
-		free(buf, M_TEMP);
-		break;
-
-	case IP_FW_FLUSH:
-		/*
-		 * Normally we cannot release the lock on each iteration.
-		 * We could do it here only because we start from the head all
-		 * the times so there is no risk of missing some entries.
-		 * On the other hand, the risk is that we end up with
-		 * a very inconsistent ruleset, so better keep the lock
-		 * around the whole cycle.
-		 *
-		 * XXX this code can be improved by resetting the head of
-		 * the list to point to the default rule, and then freeing
-		 * the old list without the need for a lock.
-		 */
-
-		IPFW_WLOCK(&V_layer3_chain);
-		free_chain(&V_layer3_chain, 0 /* keep default rule */);
-		rule = V_layer3_chain.reap;
-		IPFW_WUNLOCK(&V_layer3_chain);
-		reap_rules(rule);
-		break;
-
-	case IP_FW_ADD:
-		rule = malloc(RULE_MAXSIZE, M_TEMP, M_WAITOK);
-		error = sooptcopyin(sopt, rule, RULE_MAXSIZE,
-			sizeof(struct ip_fw) );
-		if (error == 0)
-			error = check_ipfw_struct(rule, sopt->sopt_valsize);
-		if (error == 0) {
-			error = add_rule(&V_layer3_chain, rule);
-			size = RULESIZE(rule);
-			if (!error && sopt->sopt_dir == SOPT_GET)
-				error = sooptcopyout(sopt, rule, size);
-		}
-		free(rule, M_TEMP);
-		break;
-
-	case IP_FW_DEL:
-		/*
-		 * IP_FW_DEL is used for deleting single rules or sets,
-		 * and (ab)used to atomically manipulate sets. Argument size
-		 * is used to distinguish between the two:
-		 *    sizeof(u_int32_t)
-		 *	delete single rule or set of rules,
-		 *	or reassign rules (or sets) to a different set.
-		 *    2*sizeof(u_int32_t)
-		 *	atomic disable/enable sets.
-		 *	first u_int32_t contains sets to be disabled,
-		 *	second u_int32_t contains sets to be enabled.
-		 */
-		error = sooptcopyin(sopt, rulenum,
-			2*sizeof(u_int32_t), sizeof(u_int32_t));
-		if (error)
-			break;
-		size = sopt->sopt_valsize;
-		if (size == sizeof(u_int32_t))	/* delete or reassign */
-			error = del_entry(&V_layer3_chain, rulenum[0]);
-		else if (size == 2*sizeof(u_int32_t)) /* set enable/disable */
-			V_set_disable =
-			    (V_set_disable | rulenum[0]) & ~rulenum[1] &
-			    ~(1<sopt_val != 0) {
-		    error = sooptcopyin(sopt, rulenum,
-			    sizeof(u_int32_t), sizeof(u_int32_t));
-		    if (error)
-			break;
-		}
-		error = zero_entry(&V_layer3_chain, rulenum[0],
-			sopt->sopt_name == IP_FW_RESETLOG);
-		break;
-
-	case IP_FW_TABLE_ADD:
-		{
-			ipfw_table_entry ent;
-
-			error = sooptcopyin(sopt, &ent,
-			    sizeof(ent), sizeof(ent));
-			if (error)
-				break;
-			error = add_table_entry(&V_layer3_chain, ent.tbl,
-			    ent.addr, ent.masklen, ent.value);
-		}
-		break;
-
-	case IP_FW_TABLE_DEL:
-		{
-			ipfw_table_entry ent;
-
-			error = sooptcopyin(sopt, &ent,
-			    sizeof(ent), sizeof(ent));
-			if (error)
-				break;
-			error = del_table_entry(&V_layer3_chain, ent.tbl,
-			    ent.addr, ent.masklen);
-		}
-		break;
-
-	case IP_FW_TABLE_FLUSH:
-		{
-			u_int16_t tbl;
-
-			error = sooptcopyin(sopt, &tbl,
-			    sizeof(tbl), sizeof(tbl));
-			if (error)
-				break;
-			IPFW_WLOCK(&V_layer3_chain);
-			error = flush_table(&V_layer3_chain, tbl);
-			IPFW_WUNLOCK(&V_layer3_chain);
-		}
-		break;
-
-	case IP_FW_TABLE_GETSIZE:
-		{
-			u_int32_t tbl, cnt;
-
-			if ((error = sooptcopyin(sopt, &tbl, sizeof(tbl),
-			    sizeof(tbl))))
-				break;
-			IPFW_RLOCK(&V_layer3_chain);
-			error = count_table(&V_layer3_chain, tbl, &cnt);
-			IPFW_RUNLOCK(&V_layer3_chain);
-			if (error)
-				break;
-			error = sooptcopyout(sopt, &cnt, sizeof(cnt));
-		}
-		break;
-
-	case IP_FW_TABLE_LIST:
-		{
-			ipfw_table *tbl;
-
-			if (sopt->sopt_valsize < sizeof(*tbl)) {
-				error = EINVAL;
-				break;
-			}
-			size = sopt->sopt_valsize;
-			tbl = malloc(size, M_TEMP, M_WAITOK);
-			error = sooptcopyin(sopt, tbl, size, sizeof(*tbl));
-			if (error) {
-				free(tbl, M_TEMP);
-				break;
-			}
-			tbl->size = (size - sizeof(*tbl)) /
-			    sizeof(ipfw_table_entry);
-			IPFW_RLOCK(&V_layer3_chain);
-			error = dump_table(&V_layer3_chain, tbl);
-			IPFW_RUNLOCK(&V_layer3_chain);
-			if (error) {
-				free(tbl, M_TEMP);
-				break;
-			}
-			error = sooptcopyout(sopt, tbl, size);
-			free(tbl, M_TEMP);
-		}
-		break;
-
-	case IP_FW_NAT_CFG:
-		if (IPFW_NAT_LOADED)
-			error = ipfw_nat_cfg_ptr(sopt);
-		else {
-			printf("IP_FW_NAT_CFG: %s\n",
-			    "ipfw_nat not present, please load it");
-			error = EINVAL;
-		}
-		break;
-
-	case IP_FW_NAT_DEL:
-		if (IPFW_NAT_LOADED)
-			error = ipfw_nat_del_ptr(sopt);
-		else {
-			printf("IP_FW_NAT_DEL: %s\n",
-			    "ipfw_nat not present, please load it");
-			error = EINVAL;
-		}
-		break;
-
-	case IP_FW_NAT_GET_CONFIG:
-		if (IPFW_NAT_LOADED)
-			error = ipfw_nat_get_cfg_ptr(sopt);
-		else {
-			printf("IP_FW_NAT_GET_CFG: %s\n",
-			    "ipfw_nat not present, please load it");
-			error = EINVAL;
-		}
-		break;
-
-	case IP_FW_NAT_GET_LOG:
-		if (IPFW_NAT_LOADED)
-			error = ipfw_nat_get_log_ptr(sopt);
-		else {
-			printf("IP_FW_NAT_GET_LOG: %s\n",
-			    "ipfw_nat not present, please load it");
-			error = EINVAL;
-		}
-		break;
-
-	default:
-		printf("ipfw: ipfw_ctl invalid option %d\n", sopt->sopt_name);
-		error = EINVAL;
-	}
-
-	return (error);
-#undef RULE_MAXSIZE
-}
-
-
-/*
- * This procedure is only used to handle keepalives. It is invoked
- * every dyn_keepalive_period
- */
-static void
-ipfw_tick(void * vnetx) 
-{
-	struct mbuf *m0, *m, *mnext, **mtailp;
-	int i;
-	ipfw_dyn_rule *q;
-#ifdef VIMAGE
-	struct vnet *vp = vnetx;
-#endif
-
-        CURVNET_SET(vp);
-	if (V_dyn_keepalive == 0 || V_ipfw_dyn_v == NULL || V_dyn_count == 0)
-		goto done;
-
-	/*
-	 * We make a chain of packets to go out here -- not deferring
-	 * until after we drop the IPFW dynamic rule lock would result
-	 * in a lock order reversal with the normal packet input -> ipfw
-	 * call stack.
-	 */
-	m0 = NULL;
-	mtailp = &m0;
-	IPFW_DYN_LOCK();
-	for (i = 0 ; i < V_curr_dyn_buckets ; i++) {
-		for (q = V_ipfw_dyn_v[i] ; q ; q = q->next ) {
-			if (q->dyn_type == O_LIMIT_PARENT)
-				continue;
-			if (q->id.proto != IPPROTO_TCP)
-				continue;
-			if ( (q->state & BOTH_SYN) != BOTH_SYN)
-				continue;
-			if (TIME_LEQ(time_uptime + V_dyn_keepalive_interval,
-			    q->expire))
-				continue;	/* too early */
-			if (TIME_LEQ(q->expire, time_uptime))
-				continue;	/* too late, rule expired */
-
-			*mtailp = send_pkt(NULL, &(q->id), q->ack_rev - 1,
-				q->ack_fwd, TH_SYN);
-			if (*mtailp != NULL)
-				mtailp = &(*mtailp)->m_nextpkt;
-			*mtailp = send_pkt(NULL, &(q->id), q->ack_fwd - 1,
-				q->ack_rev, 0);
-			if (*mtailp != NULL)
-				mtailp = &(*mtailp)->m_nextpkt;
-		}
-	}
-	IPFW_DYN_UNLOCK();
-	for (m = mnext = m0; m != NULL; m = mnext) {
-		mnext = m->m_nextpkt;
-		m->m_nextpkt = NULL;
-		ip_output(m, NULL, NULL, 0, NULL, NULL);
-	}
-done:
-	callout_reset(&V_ipfw_timeout, V_dyn_keepalive_period * hz,
-		      ipfw_tick, vnetx);
-	CURVNET_RESTORE();
-}
-
-/****************
  * Stuff that must be initialised only on boot or module load
  */
 static int
@@ -4593,11 +2180,7 @@ ipfw_init(void)
 {
 	int error = 0;
 
-	ipfw_dyn_rule_zone = uma_zcreate("IPFW dynamic rule",
-	    sizeof(ipfw_dyn_rule), NULL, NULL, NULL, NULL,
-	    UMA_ALIGN_PTR, 0);
-
-	IPFW_DYN_LOCK_INIT();
+	ipfw_dyn_attach();
 	/*
  	 * Only print out this stuff the first time around,
 	 * when called from the sysinit code.
@@ -4641,22 +2224,23 @@ ipfw_init(void)
 		printf("limited to %d packets/entry by default\n",
 		    V_verbose_limit);
 
+	ipfw_log_bpf(1); /* init */
 	return (error);
 }
 
-/**********************
+/*
  * Called for the removal of the last instance only on module unload.
  */
 static void
 ipfw_destroy(void)
 {
 
-	uma_zdestroy(ipfw_dyn_rule_zone);
-	IPFW_DYN_LOCK_DESTROY();
+	ipfw_log_bpf(0); /* uninit */
+	ipfw_dyn_detach();
 	printf("IP firewall unloaded\n");
 }
 
-/****************
+/*
  * Stuff that must be initialized for every instance
  * (including the first of course).
  */
@@ -4664,139 +2248,121 @@ static int
 vnet_ipfw_init(const void *unused)
 {
 	int error;
-	struct ip_fw default_rule;
+	struct ip_fw *rule = NULL;
+	struct ip_fw_chain *chain;
+
+	chain = &V_layer3_chain;
 
 	/* First set up some values that are compile time options */
+	V_autoinc_step = 100;	/* bounded to 1..1000 in add_rule() */
+	V_fw_deny_unknown_exthdrs = 1;
 #ifdef IPFIREWALL_VERBOSE
 	V_fw_verbose = 1;
 #endif
 #ifdef IPFIREWALL_VERBOSE_LIMIT
 	V_verbose_limit = IPFIREWALL_VERBOSE_LIMIT;
 #endif
+#ifdef IPFIREWALL_NAT
+	LIST_INIT(&chain->nat);
+#endif
 
-	error = init_tables(&V_layer3_chain);
+	/* insert the default rule and create the initial map */
+	chain->n_rules = 1;
+	chain->static_len = sizeof(struct ip_fw);
+	chain->map = malloc(sizeof(struct ip_fw *), M_IPFW, M_NOWAIT | M_ZERO);
+	if (chain->map)
+		rule = malloc(chain->static_len, M_IPFW, M_NOWAIT | M_ZERO);
+	if (rule == NULL) {
+		if (chain->map)
+			free(chain->map, M_IPFW);
+		printf("ipfw2: ENOSPC initializing default rule "
+			"(support disabled)\n");
+		return (ENOSPC);
+	}
+	error = ipfw_init_tables(chain);
 	if (error) {
 		panic("init_tables"); /* XXX Marko fix this ! */
 	}
-#ifdef IPFIREWALL_NAT
-	LIST_INIT(&V_layer3_chain.nat);
-#endif
 
-	V_autoinc_step = 100;	/* bounded to 1..1000 in add_rule() */
+	/* fill and insert the default rule */
+	rule->act_ofs = 0;
+	rule->rulenum = IPFW_DEFAULT_RULE;
+	rule->cmd_len = 1;
+	rule->set = RESVD_SET;
+	rule->cmd[0].len = 1;
+	rule->cmd[0].opcode = default_to_accept ? O_ACCEPT : O_DENY;
+	chain->rules = chain->default_rule = chain->map[0] = rule;
+	chain->id = rule->id = 1;
 
-	V_ipfw_dyn_v = NULL;
-	V_dyn_buckets = 256;	/* must be power of 2 */
-	V_curr_dyn_buckets = 256; /* must be power of 2 */
-
-	V_dyn_ack_lifetime = 300;
-	V_dyn_syn_lifetime = 20;
-	V_dyn_fin_lifetime = 1;
-	V_dyn_rst_lifetime = 1;
-	V_dyn_udp_lifetime = 10;
-	V_dyn_short_lifetime = 5;
-
-	V_dyn_keepalive_interval = 20;
-	V_dyn_keepalive_period = 5;
-	V_dyn_keepalive = 1;	/* do send keepalives */
-
-	V_dyn_max = 4096;	/* max # of dynamic rules */
-
-	V_fw_deny_unknown_exthdrs = 1;
-
-	V_layer3_chain.rules = NULL;
-	IPFW_LOCK_INIT(&V_layer3_chain);
-	callout_init(&V_ipfw_timeout, CALLOUT_MPSAFE);
-
-	bzero(&default_rule, sizeof default_rule);
-	default_rule.act_ofs = 0;
-	default_rule.rulenum = IPFW_DEFAULT_RULE;
-	default_rule.cmd_len = 1;
-	default_rule.set = RESVD_SET;
-	default_rule.cmd[0].len = 1;
-	default_rule.cmd[0].opcode = default_to_accept ? O_ACCEPT : O_DENY;
-	error = add_rule(&V_layer3_chain, &default_rule);
-
-	if (error != 0) {
-		printf("ipfw2: error %u initializing default rule "
-			"(support disabled)\n", error);
-		IPFW_LOCK_DESTROY(&V_layer3_chain);
-		printf("leaving ipfw_iattach (1) with error %d\n", error);
-		return (error);
-	}
-
-	ip_fw_default_rule = V_layer3_chain.rules;
-
-	if (error) {
-		IPFW_LOCK_DESTROY(&V_layer3_chain);
-		printf("leaving ipfw_iattach (2) with error %d\n", error);
-		return (error);
-	}
-#ifdef VIMAGE  /* want a better way to do this */
-	callout_reset(&V_ipfw_timeout, hz, ipfw_tick, curvnet);	
-#else
-	callout_reset(&V_ipfw_timeout, hz, ipfw_tick, NULL);	
-#endif
+	IPFW_LOCK_INIT(chain);
+	ipfw_dyn_init();
 
 	/* First set up some values that are compile time options */
 	V_ipfw_vnet_ready = 1;		/* Open for business */
 
-	/* Hook up the raw inputs */
+	/*
+	 * Hook the sockopt handler, and the layer2 (V_ip_fw_chk_ptr)
+	 * and pfil hooks for ipv4 and ipv6. Even if the latter two fail
+	 * we still keep the module alive because the sockopt and
+	 * layer2 paths are still useful.
+	 * ipfw[6]_hook return 0 on success, ENOENT on failure,
+	 * so we can ignore the exact return value and just set a flag.
+	 *
+	 * Note that V_fw[6]_enable are manipulated by a SYSCTL_PROC so
+	 * changes in the underlying (per-vnet) variables trigger
+	 * immediate hook()/unhook() calls.
+	 * In layer2 we have the same behaviour, except that V_ether_ipfw
+	 * is checked on each packet because there are no pfil hooks.
+	 */
 	V_ip_fw_ctl_ptr = ipfw_ctl;
 	V_ip_fw_chk_ptr = ipfw_chk;
-
-	/*
-	 * Hook us up to pfil.
-	 */
-	if (V_fw_enable) {
-		if ((error = ipfw_hook()) != 0) {
-			printf("ipfw_hook() error\n");
-			return (error);
-		}
-	}
-#ifdef INET6
-	if (V_fw6_enable) {
-		if ((error = ipfw6_hook()) != 0) {
-			printf("ipfw6_hook() error\n");
-			/* XXX should we unhook everything else? */
-			return (error);
-		}
-	}
-#endif
-	return (0);
+	error = ipfw_attach_hooks(1);
+	return (error);
 }
 
-/***********************
+/*
  * Called for the removal of each instance.
  */
 static int
 vnet_ipfw_uninit(const void *unused)
 {
-	struct ip_fw *reap;
+	struct ip_fw *reap, *rule;
+	struct ip_fw_chain *chain = &V_layer3_chain;
+	int i;
 
 	V_ipfw_vnet_ready = 0; /* tell new callers to go away */
-	ipfw_unhook();
-#ifdef INET6
-	ipfw6_unhook();
-#endif
-	/* layer2 and other entrypoints still come in this way. */
+	/*
+	 * disconnect from ipv4, ipv6, layer2 and sockopt.
+	 * Then grab, release and grab again the WLOCK so we make
+	 * sure the update is propagated and nobody will be in.
+	 */
+	(void)ipfw_attach_hooks(0 /* detach */);
 	V_ip_fw_chk_ptr = NULL;
 	V_ip_fw_ctl_ptr = NULL;
-	IPFW_WLOCK(&V_layer3_chain);
-	/* We wait on the wlock here until the last user leaves */
-	IPFW_WUNLOCK(&V_layer3_chain);
-	IPFW_WLOCK(&V_layer3_chain);
-	callout_drain(&V_ipfw_timeout);
-	flush_tables(&V_layer3_chain);
-	V_layer3_chain.reap = NULL;
-	free_chain(&V_layer3_chain, 1 /* kill default rule */);
-	reap = V_layer3_chain.reap;
-	V_layer3_chain.reap = NULL;
-	IPFW_WUNLOCK(&V_layer3_chain);
+	IPFW_UH_WLOCK(chain);
+	IPFW_UH_WUNLOCK(chain);
+	IPFW_UH_WLOCK(chain);
+
+	IPFW_WLOCK(chain);
+	IPFW_WUNLOCK(chain);
+	IPFW_WLOCK(chain);
+
+	ipfw_dyn_uninit(0);	/* run the callout_drain */
+	ipfw_flush_tables(chain);
+	reap = NULL;
+	for (i = 0; i < chain->n_rules; i++) {
+		rule = chain->map[i];
+		rule->x_next = reap;
+		reap = rule;
+	}
+	if (chain->map)
+		free(chain->map, M_IPFW);
+	IPFW_WUNLOCK(chain);
+	IPFW_UH_WUNLOCK(chain);
 	if (reap != NULL)
-		reap_rules(reap);
-	IPFW_LOCK_DESTROY(&V_layer3_chain);
-	if (V_ipfw_dyn_v != NULL)
-		free(V_ipfw_dyn_v, M_IPFW);
+		ipfw_reap_rules(reap);
+	IPFW_LOCK_DESTROY(chain);
+	ipfw_dyn_uninit(1);	/* free the remaining parts */
 	return 0;
 }
 
@@ -4870,4 +2436,4 @@ SYSUNINIT(ipfw_destroy, IPFW_SI_SUB_FIREWALL, IPFW_MODULE_ORDER,
 	    ipfw_destroy, NULL);
 VNET_SYSUNINIT(vnet_ipfw_uninit, IPFW_SI_SUB_FIREWALL, IPFW_VNET_ORDER,
 	    vnet_ipfw_uninit, NULL);
-
+/* end of file */
diff --git a/sys/netinet/ipfw/ip_fw_dynamic.c b/sys/netinet/ipfw/ip_fw_dynamic.c
new file mode 100644
index 00000000000..6d1ac6064fc
--- /dev/null
+++ b/sys/netinet/ipfw/ip_fw_dynamic.c
@@ -0,0 +1,1229 @@
+/*-
+ * Copyright (c) 2002 Luigi Rizzo, Universita` di Pisa
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+#define        DEB(x)
+#define        DDB(x) x
+
+/*
+ * Dynamic rule support for ipfw
+ */
+
+#if !defined(KLD_MODULE)
+#include "opt_ipfw.h"
+#include "opt_ipdivert.h"
+#include "opt_ipdn.h"
+#include "opt_inet.h"
+#ifndef INET
+#error IPFIREWALL requires INET.
+#endif /* INET */
+#endif
+#include "opt_inet6.h"
+#include "opt_ipsec.h"
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include  /* for ETHERTYPE_IP */
+#include 
+#include 
+
+#include 
+#include 
+#include 	/* ip_defttl */
+#include 
+#include 
+#include 
+#include 
+
+#include 	/* IN6_ARE_ADDR_EQUAL */
+#ifdef INET6
+#include 
+#include 
+#endif
+
+#include 	/* XXX for in_cksum */
+
+#ifdef MAC
+#include 
+#endif
+
+/*
+ * Description of dynamic rules.
+ *
+ * Dynamic rules are stored in lists accessed through a hash table
+ * (ipfw_dyn_v) whose size is curr_dyn_buckets. This value can
+ * be modified through the sysctl variable dyn_buckets which is
+ * updated when the table becomes empty.
+ *
+ * XXX currently there is only one list, ipfw_dyn.
+ *
+ * When a packet is received, its address fields are first masked
+ * with the mask defined for the rule, then hashed, then matched
+ * against the entries in the corresponding list.
+ * Dynamic rules can be used for different purposes:
+ *  + stateful rules;
+ *  + enforcing limits on the number of sessions;
+ *  + in-kernel NAT (not implemented yet)
+ *
+ * The lifetime of dynamic rules is regulated by dyn_*_lifetime,
+ * measured in seconds and depending on the flags.
+ *
+ * The total number of dynamic rules is stored in dyn_count.
+ * The max number of dynamic rules is dyn_max. When we reach
+ * the maximum number of rules we do not create anymore. This is
+ * done to avoid consuming too much memory, but also too much
+ * time when searching on each packet (ideally, we should try instead
+ * to put a limit on the length of the list on each bucket...).
+ *
+ * Each dynamic rule holds a pointer to the parent ipfw rule so
+ * we know what action to perform. Dynamic rules are removed when
+ * the parent rule is deleted. XXX we should make them survive.
+ *
+ * There are some limitations with dynamic rules -- we do not
+ * obey the 'randomized match', and we do not do multiple
+ * passes through the firewall. XXX check the latter!!!
+ */
+
+/*
+ * Static variables followed by global ones
+ */
+static VNET_DEFINE(ipfw_dyn_rule **, ipfw_dyn_v);
+static VNET_DEFINE(u_int32_t, dyn_buckets);
+static VNET_DEFINE(u_int32_t, curr_dyn_buckets);
+static VNET_DEFINE(struct callout, ipfw_timeout);
+#define	V_ipfw_dyn_v			VNET(ipfw_dyn_v)
+#define	V_dyn_buckets			VNET(dyn_buckets)
+#define	V_curr_dyn_buckets		VNET(curr_dyn_buckets)
+#define V_ipfw_timeout                  VNET(ipfw_timeout)
+
+static uma_zone_t ipfw_dyn_rule_zone;
+static struct mtx ipfw_dyn_mtx;		/* mutex guarding dynamic rules */
+
+#define	IPFW_DYN_LOCK_INIT() \
+	mtx_init(&ipfw_dyn_mtx, "IPFW dynamic rules", NULL, MTX_DEF)
+#define	IPFW_DYN_LOCK_DESTROY()	mtx_destroy(&ipfw_dyn_mtx)
+#define	IPFW_DYN_LOCK()		mtx_lock(&ipfw_dyn_mtx)
+#define	IPFW_DYN_UNLOCK()	mtx_unlock(&ipfw_dyn_mtx)
+#define	IPFW_DYN_LOCK_ASSERT()	mtx_assert(&ipfw_dyn_mtx, MA_OWNED)
+
+void
+ipfw_dyn_unlock(void)
+{
+	IPFW_DYN_UNLOCK();
+}
+
+/*
+ * Timeouts for various events in handing dynamic rules.
+ */
+static VNET_DEFINE(u_int32_t, dyn_ack_lifetime);
+static VNET_DEFINE(u_int32_t, dyn_syn_lifetime);
+static VNET_DEFINE(u_int32_t, dyn_fin_lifetime);
+static VNET_DEFINE(u_int32_t, dyn_rst_lifetime);
+static VNET_DEFINE(u_int32_t, dyn_udp_lifetime);
+static VNET_DEFINE(u_int32_t, dyn_short_lifetime);
+
+#define	V_dyn_ack_lifetime		VNET(dyn_ack_lifetime)
+#define	V_dyn_syn_lifetime		VNET(dyn_syn_lifetime)
+#define	V_dyn_fin_lifetime		VNET(dyn_fin_lifetime)
+#define	V_dyn_rst_lifetime		VNET(dyn_rst_lifetime)
+#define	V_dyn_udp_lifetime		VNET(dyn_udp_lifetime)
+#define	V_dyn_short_lifetime		VNET(dyn_short_lifetime)
+
+/*
+ * Keepalives are sent if dyn_keepalive is set. They are sent every
+ * dyn_keepalive_period seconds, in the last dyn_keepalive_interval
+ * seconds of lifetime of a rule.
+ * dyn_rst_lifetime and dyn_fin_lifetime should be strictly lower
+ * than dyn_keepalive_period.
+ */
+
+static VNET_DEFINE(u_int32_t, dyn_keepalive_interval);
+static VNET_DEFINE(u_int32_t, dyn_keepalive_period);
+static VNET_DEFINE(u_int32_t, dyn_keepalive);
+
+#define	V_dyn_keepalive_interval	VNET(dyn_keepalive_interval)
+#define	V_dyn_keepalive_period		VNET(dyn_keepalive_period)
+#define	V_dyn_keepalive			VNET(dyn_keepalive)
+
+static VNET_DEFINE(u_int32_t, dyn_count);	/* # of dynamic rules */
+static VNET_DEFINE(u_int32_t, dyn_max);		/* max # of dynamic rules */
+
+#define	V_dyn_count			VNET(dyn_count)
+#define	V_dyn_max			VNET(dyn_max)
+
+#ifdef SYSCTL_NODE
+SYSCTL_DECL(_net_inet_ip_fw);
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_buckets,
+    CTLFLAG_RW, &VNET_NAME(dyn_buckets), 0,
+    "Number of dyn. buckets");
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, curr_dyn_buckets,
+    CTLFLAG_RD, &VNET_NAME(curr_dyn_buckets), 0,
+    "Current Number of dyn. buckets");
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_count,
+    CTLFLAG_RD, &VNET_NAME(dyn_count), 0,
+    "Number of dyn. rules");
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_max,
+    CTLFLAG_RW, &VNET_NAME(dyn_max), 0,
+    "Max number of dyn. rules");
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_ack_lifetime,
+    CTLFLAG_RW, &VNET_NAME(dyn_ack_lifetime), 0,
+    "Lifetime of dyn. rules for acks");
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_syn_lifetime,
+    CTLFLAG_RW, &VNET_NAME(dyn_syn_lifetime), 0,
+    "Lifetime of dyn. rules for syn");
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_fin_lifetime,
+    CTLFLAG_RW, &VNET_NAME(dyn_fin_lifetime), 0,
+    "Lifetime of dyn. rules for fin");
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_rst_lifetime,
+    CTLFLAG_RW, &VNET_NAME(dyn_rst_lifetime), 0,
+    "Lifetime of dyn. rules for rst");
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_udp_lifetime,
+    CTLFLAG_RW, &VNET_NAME(dyn_udp_lifetime), 0,
+    "Lifetime of dyn. rules for UDP");
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_short_lifetime,
+    CTLFLAG_RW, &VNET_NAME(dyn_short_lifetime), 0,
+    "Lifetime of dyn. rules for other situations");
+SYSCTL_VNET_INT(_net_inet_ip_fw, OID_AUTO, dyn_keepalive,
+    CTLFLAG_RW, &VNET_NAME(dyn_keepalive), 0,
+    "Enable keepalives for dyn. rules");
+#endif /* SYSCTL_NODE */
+
+
+static __inline int
+hash_packet6(struct ipfw_flow_id *id)
+{
+	u_int32_t i;
+	i = (id->dst_ip6.__u6_addr.__u6_addr32[2]) ^
+	    (id->dst_ip6.__u6_addr.__u6_addr32[3]) ^
+	    (id->src_ip6.__u6_addr.__u6_addr32[2]) ^
+	    (id->src_ip6.__u6_addr.__u6_addr32[3]) ^
+	    (id->dst_port) ^ (id->src_port);
+	return i;
+}
+
+/*
+ * IMPORTANT: the hash function for dynamic rules must be commutative
+ * in source and destination (ip,port), because rules are bidirectional
+ * and we want to find both in the same bucket.
+ */
+static __inline int
+hash_packet(struct ipfw_flow_id *id)
+{
+	u_int32_t i;
+
+#ifdef INET6
+	if (IS_IP6_FLOW_ID(id)) 
+		i = hash_packet6(id);
+	else
+#endif /* INET6 */
+	i = (id->dst_ip) ^ (id->src_ip) ^ (id->dst_port) ^ (id->src_port);
+	i &= (V_curr_dyn_buckets - 1);
+	return i;
+}
+
+static __inline void
+unlink_dyn_rule_print(struct ipfw_flow_id *id)
+{
+	struct in_addr da;
+#ifdef INET6
+	char src[INET6_ADDRSTRLEN], dst[INET6_ADDRSTRLEN];
+#else
+	char src[INET_ADDRSTRLEN], dst[INET_ADDRSTRLEN];
+#endif
+
+#ifdef INET6
+	if (IS_IP6_FLOW_ID(id)) {
+		ip6_sprintf(src, &id->src_ip6);
+		ip6_sprintf(dst, &id->dst_ip6);
+	} else
+#endif
+	{
+		da.s_addr = htonl(id->src_ip);
+		inet_ntoa_r(da, src);
+		da.s_addr = htonl(id->dst_ip);
+		inet_ntoa_r(da, dst);
+	}
+	printf("ipfw: unlink entry %s %d -> %s %d, %d left\n",
+	    src, id->src_port, dst, id->dst_port, V_dyn_count - 1);
+}
+
+/**
+ * unlink a dynamic rule from a chain. prev is a pointer to
+ * the previous one, q is a pointer to the rule to delete,
+ * head is a pointer to the head of the queue.
+ * Modifies q and potentially also head.
+ */
+#define UNLINK_DYN_RULE(prev, head, q) {				\
+	ipfw_dyn_rule *old_q = q;					\
+									\
+	/* remove a refcount to the parent */				\
+	if (q->dyn_type == O_LIMIT)					\
+		q->parent->count--;					\
+	DEB(unlink_dyn_rule_print(&q->id);)				\
+	if (prev != NULL)						\
+		prev->next = q = q->next;				\
+	else								\
+		head = q = q->next;					\
+	V_dyn_count--;							\
+	uma_zfree(ipfw_dyn_rule_zone, old_q); }
+
+#define TIME_LEQ(a,b)       ((int)((a)-(b)) <= 0)
+
+/**
+ * Remove dynamic rules pointing to "rule", or all of them if rule == NULL.
+ *
+ * If keep_me == NULL, rules are deleted even if not expired,
+ * otherwise only expired rules are removed.
+ *
+ * The value of the second parameter is also used to point to identify
+ * a rule we absolutely do not want to remove (e.g. because we are
+ * holding a reference to it -- this is the case with O_LIMIT_PARENT
+ * rules). The pointer is only used for comparison, so any non-null
+ * value will do.
+ */
+static void
+remove_dyn_rule(struct ip_fw *rule, ipfw_dyn_rule *keep_me)
+{
+	static u_int32_t last_remove = 0;
+
+#define FORCE (keep_me == NULL)
+
+	ipfw_dyn_rule *prev, *q;
+	int i, pass = 0, max_pass = 0;
+
+	IPFW_DYN_LOCK_ASSERT();
+
+	if (V_ipfw_dyn_v == NULL || V_dyn_count == 0)
+		return;
+	/* do not expire more than once per second, it is useless */
+	if (!FORCE && last_remove == time_uptime)
+		return;
+	last_remove = time_uptime;
+
+	/*
+	 * because O_LIMIT refer to parent rules, during the first pass only
+	 * remove child and mark any pending LIMIT_PARENT, and remove
+	 * them in a second pass.
+	 */
+next_pass:
+	for (i = 0 ; i < V_curr_dyn_buckets ; i++) {
+		for (prev=NULL, q = V_ipfw_dyn_v[i] ; q ; ) {
+			/*
+			 * Logic can become complex here, so we split tests.
+			 */
+			if (q == keep_me)
+				goto next;
+			if (rule != NULL && rule != q->rule)
+				goto next; /* not the one we are looking for */
+			if (q->dyn_type == O_LIMIT_PARENT) {
+				/*
+				 * handle parent in the second pass,
+				 * record we need one.
+				 */
+				max_pass = 1;
+				if (pass == 0)
+					goto next;
+				if (FORCE && q->count != 0 ) {
+					/* XXX should not happen! */
+					printf("ipfw: OUCH! cannot remove rule,"
+					     " count %d\n", q->count);
+				}
+			} else {
+				if (!FORCE &&
+				    !TIME_LEQ( q->expire, time_uptime ))
+					goto next;
+			}
+             if (q->dyn_type != O_LIMIT_PARENT || !q->count) {
+                     UNLINK_DYN_RULE(prev, V_ipfw_dyn_v[i], q);
+                     continue;
+             }
+next:
+			prev=q;
+			q=q->next;
+		}
+	}
+	if (pass++ < max_pass)
+		goto next_pass;
+}
+
+void
+ipfw_remove_dyn_children(struct ip_fw *rule)
+{
+	IPFW_DYN_LOCK();
+	remove_dyn_rule(rule, NULL /* force removal */);
+	IPFW_DYN_UNLOCK();
+}
+
+/**
+ * lookup a dynamic rule, locked version
+ */
+static ipfw_dyn_rule *
+lookup_dyn_rule_locked(struct ipfw_flow_id *pkt, int *match_direction,
+    struct tcphdr *tcp)
+{
+	/*
+	 * stateful ipfw extensions.
+	 * Lookup into dynamic session queue
+	 */
+#define MATCH_REVERSE	0
+#define MATCH_FORWARD	1
+#define MATCH_NONE	2
+#define MATCH_UNKNOWN	3
+	int i, dir = MATCH_NONE;
+	ipfw_dyn_rule *prev, *q=NULL;
+
+	IPFW_DYN_LOCK_ASSERT();
+
+	if (V_ipfw_dyn_v == NULL)
+		goto done;	/* not found */
+	i = hash_packet( pkt );
+	for (prev=NULL, q = V_ipfw_dyn_v[i] ; q != NULL ; ) {
+		if (q->dyn_type == O_LIMIT_PARENT && q->count)
+			goto next;
+		if (TIME_LEQ( q->expire, time_uptime)) { /* expire entry */
+			UNLINK_DYN_RULE(prev, V_ipfw_dyn_v[i], q);
+			continue;
+		}
+		if (pkt->proto == q->id.proto &&
+		    q->dyn_type != O_LIMIT_PARENT) {
+			if (IS_IP6_FLOW_ID(pkt)) {
+			    if (IN6_ARE_ADDR_EQUAL(&(pkt->src_ip6),
+				&(q->id.src_ip6)) &&
+			    IN6_ARE_ADDR_EQUAL(&(pkt->dst_ip6),
+				&(q->id.dst_ip6)) &&
+			    pkt->src_port == q->id.src_port &&
+			    pkt->dst_port == q->id.dst_port ) {
+				dir = MATCH_FORWARD;
+				break;
+			    }
+			    if (IN6_ARE_ADDR_EQUAL(&(pkt->src_ip6),
+				    &(q->id.dst_ip6)) &&
+				IN6_ARE_ADDR_EQUAL(&(pkt->dst_ip6),
+				    &(q->id.src_ip6)) &&
+				pkt->src_port == q->id.dst_port &&
+				pkt->dst_port == q->id.src_port ) {
+				    dir = MATCH_REVERSE;
+				    break;
+			    }
+			} else {
+			    if (pkt->src_ip == q->id.src_ip &&
+				pkt->dst_ip == q->id.dst_ip &&
+				pkt->src_port == q->id.src_port &&
+				pkt->dst_port == q->id.dst_port ) {
+				    dir = MATCH_FORWARD;
+				    break;
+			    }
+			    if (pkt->src_ip == q->id.dst_ip &&
+				pkt->dst_ip == q->id.src_ip &&
+				pkt->src_port == q->id.dst_port &&
+				pkt->dst_port == q->id.src_port ) {
+				    dir = MATCH_REVERSE;
+				    break;
+			    }
+			}
+		}
+next:
+		prev = q;
+		q = q->next;
+	}
+	if (q == NULL)
+		goto done; /* q = NULL, not found */
+
+	if ( prev != NULL) { /* found and not in front */
+		prev->next = q->next;
+		q->next = V_ipfw_dyn_v[i];
+		V_ipfw_dyn_v[i] = q;
+	}
+	if (pkt->proto == IPPROTO_TCP) { /* update state according to flags */
+		u_char flags = pkt->flags & (TH_FIN|TH_SYN|TH_RST);
+
+#define BOTH_SYN	(TH_SYN | (TH_SYN << 8))
+#define BOTH_FIN	(TH_FIN | (TH_FIN << 8))
+		q->state |= (dir == MATCH_FORWARD ) ? flags : (flags << 8);
+		switch (q->state) {
+		case TH_SYN:				/* opening */
+			q->expire = time_uptime + V_dyn_syn_lifetime;
+			break;
+
+		case BOTH_SYN:			/* move to established */
+		case BOTH_SYN | TH_FIN :	/* one side tries to close */
+		case BOTH_SYN | (TH_FIN << 8) :
+ 			if (tcp) {
+#define _SEQ_GE(a,b) ((int)(a) - (int)(b) >= 0)
+			    u_int32_t ack = ntohl(tcp->th_ack);
+			    if (dir == MATCH_FORWARD) {
+				if (q->ack_fwd == 0 || _SEQ_GE(ack, q->ack_fwd))
+				    q->ack_fwd = ack;
+				else { /* ignore out-of-sequence */
+				    break;
+				}
+			    } else {
+				if (q->ack_rev == 0 || _SEQ_GE(ack, q->ack_rev))
+				    q->ack_rev = ack;
+				else { /* ignore out-of-sequence */
+				    break;
+				}
+			    }
+			}
+			q->expire = time_uptime + V_dyn_ack_lifetime;
+			break;
+
+		case BOTH_SYN | BOTH_FIN:	/* both sides closed */
+			if (V_dyn_fin_lifetime >= V_dyn_keepalive_period)
+				V_dyn_fin_lifetime = V_dyn_keepalive_period - 1;
+			q->expire = time_uptime + V_dyn_fin_lifetime;
+			break;
+
+		default:
+#if 0
+			/*
+			 * reset or some invalid combination, but can also
+			 * occur if we use keep-state the wrong way.
+			 */
+			if ( (q->state & ((TH_RST << 8)|TH_RST)) == 0)
+				printf("invalid state: 0x%x\n", q->state);
+#endif
+			if (V_dyn_rst_lifetime >= V_dyn_keepalive_period)
+				V_dyn_rst_lifetime = V_dyn_keepalive_period - 1;
+			q->expire = time_uptime + V_dyn_rst_lifetime;
+			break;
+		}
+	} else if (pkt->proto == IPPROTO_UDP) {
+		q->expire = time_uptime + V_dyn_udp_lifetime;
+	} else {
+		/* other protocols */
+		q->expire = time_uptime + V_dyn_short_lifetime;
+	}
+done:
+	if (match_direction)
+		*match_direction = dir;
+	return q;
+}
+
+ipfw_dyn_rule *
+ipfw_lookup_dyn_rule(struct ipfw_flow_id *pkt, int *match_direction,
+    struct tcphdr *tcp)
+{
+	ipfw_dyn_rule *q;
+
+	IPFW_DYN_LOCK();
+	q = lookup_dyn_rule_locked(pkt, match_direction, tcp);
+	if (q == NULL)
+		IPFW_DYN_UNLOCK();
+	/* NB: return table locked when q is not NULL */
+	return q;
+}
+
+static void
+realloc_dynamic_table(void)
+{
+	IPFW_DYN_LOCK_ASSERT();
+
+	/*
+	 * Try reallocation, make sure we have a power of 2 and do
+	 * not allow more than 64k entries. In case of overflow,
+	 * default to 1024.
+	 */
+
+	if (V_dyn_buckets > 65536)
+		V_dyn_buckets = 1024;
+	if ((V_dyn_buckets & (V_dyn_buckets-1)) != 0) { /* not a power of 2 */
+		V_dyn_buckets = V_curr_dyn_buckets; /* reset */
+		return;
+	}
+	V_curr_dyn_buckets = V_dyn_buckets;
+	if (V_ipfw_dyn_v != NULL)
+		free(V_ipfw_dyn_v, M_IPFW);
+	for (;;) {
+		V_ipfw_dyn_v = malloc(V_curr_dyn_buckets * sizeof(ipfw_dyn_rule *),
+		       M_IPFW, M_NOWAIT | M_ZERO);
+		if (V_ipfw_dyn_v != NULL || V_curr_dyn_buckets <= 2)
+			break;
+		V_curr_dyn_buckets /= 2;
+	}
+}
+
+/**
+ * Install state of type 'type' for a dynamic session.
+ * The hash table contains two type of rules:
+ * - regular rules (O_KEEP_STATE)
+ * - rules for sessions with limited number of sess per user
+ *   (O_LIMIT). When they are created, the parent is
+ *   increased by 1, and decreased on delete. In this case,
+ *   the third parameter is the parent rule and not the chain.
+ * - "parent" rules for the above (O_LIMIT_PARENT).
+ */
+static ipfw_dyn_rule *
+add_dyn_rule(struct ipfw_flow_id *id, u_int8_t dyn_type, struct ip_fw *rule)
+{
+	ipfw_dyn_rule *r;
+	int i;
+
+	IPFW_DYN_LOCK_ASSERT();
+
+	if (V_ipfw_dyn_v == NULL ||
+	    (V_dyn_count == 0 && V_dyn_buckets != V_curr_dyn_buckets)) {
+		realloc_dynamic_table();
+		if (V_ipfw_dyn_v == NULL)
+			return NULL; /* failed ! */
+	}
+	i = hash_packet(id);
+
+	r = uma_zalloc(ipfw_dyn_rule_zone, M_NOWAIT | M_ZERO);
+	if (r == NULL) {
+		printf ("ipfw: sorry cannot allocate state\n");
+		return NULL;
+	}
+
+	/* increase refcount on parent, and set pointer */
+	if (dyn_type == O_LIMIT) {
+		ipfw_dyn_rule *parent = (ipfw_dyn_rule *)rule;
+		if ( parent->dyn_type != O_LIMIT_PARENT)
+			panic("invalid parent");
+		parent->count++;
+		r->parent = parent;
+		rule = parent->rule;
+	}
+
+	r->id = *id;
+	r->expire = time_uptime + V_dyn_syn_lifetime;
+	r->rule = rule;
+	r->dyn_type = dyn_type;
+	r->pcnt = r->bcnt = 0;
+	r->count = 0;
+
+	r->bucket = i;
+	r->next = V_ipfw_dyn_v[i];
+	V_ipfw_dyn_v[i] = r;
+	V_dyn_count++;
+	DEB({
+		struct in_addr da;
+#ifdef INET6
+		char src[INET6_ADDRSTRLEN];
+		char dst[INET6_ADDRSTRLEN];
+#else
+		char src[INET_ADDRSTRLEN];
+		char dst[INET_ADDRSTRLEN];
+#endif
+
+#ifdef INET6
+		if (IS_IP6_FLOW_ID(&(r->id))) {
+			ip6_sprintf(src, &r->id.src_ip6);
+			ip6_sprintf(dst, &r->id.dst_ip6);
+		} else
+#endif
+		{
+			da.s_addr = htonl(r->id.src_ip);
+			inet_ntoa_r(da, src);
+			da.s_addr = htonl(r->id.dst_ip);
+			inet_ntoa_r(da, dst);
+		}
+		printf("ipfw: add dyn entry ty %d %s %d -> %s %d, total %d\n",
+		    dyn_type, src, r->id.src_port, dst, r->id.dst_port,
+		    V_dyn_count);
+	})
+	return r;
+}
+
+/**
+ * lookup dynamic parent rule using pkt and rule as search keys.
+ * If the lookup fails, then install one.
+ */
+static ipfw_dyn_rule *
+lookup_dyn_parent(struct ipfw_flow_id *pkt, struct ip_fw *rule)
+{
+	ipfw_dyn_rule *q;
+	int i;
+
+	IPFW_DYN_LOCK_ASSERT();
+
+	if (V_ipfw_dyn_v) {
+		int is_v6 = IS_IP6_FLOW_ID(pkt);
+		i = hash_packet( pkt );
+		for (q = V_ipfw_dyn_v[i] ; q != NULL ; q=q->next)
+			if (q->dyn_type == O_LIMIT_PARENT &&
+			    rule== q->rule &&
+			    pkt->proto == q->id.proto &&
+			    pkt->src_port == q->id.src_port &&
+			    pkt->dst_port == q->id.dst_port &&
+			    (
+				(is_v6 &&
+				 IN6_ARE_ADDR_EQUAL(&(pkt->src_ip6),
+					&(q->id.src_ip6)) &&
+				 IN6_ARE_ADDR_EQUAL(&(pkt->dst_ip6),
+					&(q->id.dst_ip6))) ||
+				(!is_v6 &&
+				 pkt->src_ip == q->id.src_ip &&
+				 pkt->dst_ip == q->id.dst_ip)
+			    )
+			) {
+				q->expire = time_uptime + V_dyn_short_lifetime;
+				DEB(printf("ipfw: lookup_dyn_parent found 0x%p\n",q);)
+				return q;
+			}
+	}
+	return add_dyn_rule(pkt, O_LIMIT_PARENT, rule);
+}
+
+/**
+ * Install dynamic state for rule type cmd->o.opcode
+ *
+ * Returns 1 (failure) if state is not installed because of errors or because
+ * session limitations are enforced.
+ */
+int
+ipfw_install_state(struct ip_fw *rule, ipfw_insn_limit *cmd,
+    struct ip_fw_args *args, uint32_t tablearg)
+{
+	static int last_log;
+	ipfw_dyn_rule *q;
+	struct in_addr da;
+#ifdef INET6
+	char src[INET6_ADDRSTRLEN + 2], dst[INET6_ADDRSTRLEN + 2];
+#else
+	char src[INET_ADDRSTRLEN], dst[INET_ADDRSTRLEN];
+#endif
+
+	src[0] = '\0';
+	dst[0] = '\0';
+
+	IPFW_DYN_LOCK();
+
+	DEB(
+#ifdef INET6
+	if (IS_IP6_FLOW_ID(&(args->f_id))) {
+		ip6_sprintf(src, &args->f_id.src_ip6);
+		ip6_sprintf(dst, &args->f_id.dst_ip6);
+	} else
+#endif
+	{
+		da.s_addr = htonl(args->f_id.src_ip);
+		inet_ntoa_r(da, src);
+		da.s_addr = htonl(args->f_id.dst_ip);
+		inet_ntoa_r(da, dst);
+	}
+	printf("ipfw: %s: type %d %s %u -> %s %u\n",
+	    __func__, cmd->o.opcode, src, args->f_id.src_port,
+	    dst, args->f_id.dst_port);
+	src[0] = '\0';
+	dst[0] = '\0';
+	)
+
+	q = lookup_dyn_rule_locked(&args->f_id, NULL, NULL);
+
+	if (q != NULL) {	/* should never occur */
+		if (last_log != time_uptime) {
+			last_log = time_uptime;
+			printf("ipfw: %s: entry already present, done\n",
+			    __func__);
+		}
+		IPFW_DYN_UNLOCK();
+		return (0);
+	}
+
+	if (V_dyn_count >= V_dyn_max)
+		/* Run out of slots, try to remove any expired rule. */
+		remove_dyn_rule(NULL, (ipfw_dyn_rule *)1);
+
+	if (V_dyn_count >= V_dyn_max) {
+		if (last_log != time_uptime) {
+			last_log = time_uptime;
+			printf("ipfw: %s: Too many dynamic rules\n", __func__);
+		}
+		IPFW_DYN_UNLOCK();
+		return (1);	/* cannot install, notify caller */
+	}
+
+	switch (cmd->o.opcode) {
+	case O_KEEP_STATE:	/* bidir rule */
+		add_dyn_rule(&args->f_id, O_KEEP_STATE, rule);
+		break;
+
+	case O_LIMIT: {		/* limit number of sessions */
+		struct ipfw_flow_id id;
+		ipfw_dyn_rule *parent;
+		uint32_t conn_limit;
+		uint16_t limit_mask = cmd->limit_mask;
+
+		conn_limit = (cmd->conn_limit == IP_FW_TABLEARG) ?
+		    tablearg : cmd->conn_limit;
+		  
+		DEB(
+		if (cmd->conn_limit == IP_FW_TABLEARG)
+			printf("ipfw: %s: O_LIMIT rule, conn_limit: %u "
+			    "(tablearg)\n", __func__, conn_limit);
+		else
+			printf("ipfw: %s: O_LIMIT rule, conn_limit: %u\n",
+			    __func__, conn_limit);
+		)
+
+		id.dst_ip = id.src_ip = id.dst_port = id.src_port = 0;
+		id.proto = args->f_id.proto;
+		id.addr_type = args->f_id.addr_type;
+		id.fib = M_GETFIB(args->m);
+
+		if (IS_IP6_FLOW_ID (&(args->f_id))) {
+			if (limit_mask & DYN_SRC_ADDR)
+				id.src_ip6 = args->f_id.src_ip6;
+			if (limit_mask & DYN_DST_ADDR)
+				id.dst_ip6 = args->f_id.dst_ip6;
+		} else {
+			if (limit_mask & DYN_SRC_ADDR)
+				id.src_ip = args->f_id.src_ip;
+			if (limit_mask & DYN_DST_ADDR)
+				id.dst_ip = args->f_id.dst_ip;
+		}
+		if (limit_mask & DYN_SRC_PORT)
+			id.src_port = args->f_id.src_port;
+		if (limit_mask & DYN_DST_PORT)
+			id.dst_port = args->f_id.dst_port;
+		if ((parent = lookup_dyn_parent(&id, rule)) == NULL) {
+			printf("ipfw: %s: add parent failed\n", __func__);
+			IPFW_DYN_UNLOCK();
+			return (1);
+		}
+
+		if (parent->count >= conn_limit) {
+			/* See if we can remove some expired rule. */
+			remove_dyn_rule(rule, parent);
+			if (parent->count >= conn_limit) {
+				if (V_fw_verbose && last_log != time_uptime) {
+					last_log = time_uptime;
+#ifdef INET6
+					/*
+					 * XXX IPv6 flows are not
+					 * supported yet.
+					 */
+					if (IS_IP6_FLOW_ID(&(args->f_id))) {
+						char ip6buf[INET6_ADDRSTRLEN];
+						snprintf(src, sizeof(src),
+						    "[%s]", ip6_sprintf(ip6buf,
+							&args->f_id.src_ip6));
+						snprintf(dst, sizeof(dst),
+						    "[%s]", ip6_sprintf(ip6buf,
+							&args->f_id.dst_ip6));
+					} else
+#endif
+					{
+						da.s_addr =
+						    htonl(args->f_id.src_ip);
+						inet_ntoa_r(da, src);
+						da.s_addr =
+						    htonl(args->f_id.dst_ip);
+						inet_ntoa_r(da, dst);
+					}
+					log(LOG_SECURITY | LOG_DEBUG,
+					    "ipfw: %d %s %s:%u -> %s:%u, %s\n",
+					    parent->rule->rulenum,
+					    "drop session",
+					    src, (args->f_id.src_port),
+					    dst, (args->f_id.dst_port),
+					    "too many entries");
+				}
+				IPFW_DYN_UNLOCK();
+				return (1);
+			}
+		}
+		add_dyn_rule(&args->f_id, O_LIMIT, (struct ip_fw *)parent);
+		break;
+	}
+	default:
+		printf("ipfw: %s: unknown dynamic rule type %u\n",
+		    __func__, cmd->o.opcode);
+		IPFW_DYN_UNLOCK();
+		return (1);
+	}
+
+	/* XXX just set lifetime */
+	lookup_dyn_rule_locked(&args->f_id, NULL, NULL);
+
+	IPFW_DYN_UNLOCK();
+	return (0);
+}
+
+/*
+ * Generate a TCP packet, containing either a RST or a keepalive.
+ * When flags & TH_RST, we are sending a RST packet, because of a
+ * "reset" action matched the packet.
+ * Otherwise we are sending a keepalive, and flags & TH_
+ * The 'replyto' mbuf is the mbuf being replied to, if any, and is required
+ * so that MAC can label the reply appropriately.
+ */
+struct mbuf *
+ipfw_send_pkt(struct mbuf *replyto, struct ipfw_flow_id *id, u_int32_t seq,
+    u_int32_t ack, int flags)
+{
+	struct mbuf *m;
+	int len, dir;
+	struct ip *h = NULL;		/* stupid compiler */
+#ifdef INET6
+	struct ip6_hdr *h6 = NULL;
+#endif
+	struct tcphdr *th = NULL;
+
+	MGETHDR(m, M_DONTWAIT, MT_DATA);
+	if (m == NULL)
+		return (NULL);
+
+	M_SETFIB(m, id->fib);
+#ifdef MAC
+	if (replyto != NULL)
+		mac_netinet_firewall_reply(replyto, m);
+	else
+		mac_netinet_firewall_send(m);
+#else
+	(void)replyto;		/* don't warn about unused arg */
+#endif
+
+	switch (id->addr_type) {
+	case 4:
+		len = sizeof(struct ip) + sizeof(struct tcphdr);
+		break;
+#ifdef INET6
+	case 6:
+		len = sizeof(struct ip6_hdr) + sizeof(struct tcphdr);
+		break;
+#endif
+	default:
+		/* XXX: log me?!? */
+		FREE_PKT(m);
+		return (NULL);
+	}
+	dir = ((flags & (TH_SYN | TH_RST)) == TH_SYN);
+
+	m->m_data += max_linkhdr;
+	m->m_flags |= M_SKIP_FIREWALL;
+	m->m_pkthdr.len = m->m_len = len;
+	m->m_pkthdr.rcvif = NULL;
+	bzero(m->m_data, len);
+
+	switch (id->addr_type) {
+	case 4:
+		h = mtod(m, struct ip *);
+
+		/* prepare for checksum */
+		h->ip_p = IPPROTO_TCP;
+		h->ip_len = htons(sizeof(struct tcphdr));
+		if (dir) {
+			h->ip_src.s_addr = htonl(id->src_ip);
+			h->ip_dst.s_addr = htonl(id->dst_ip);
+		} else {
+			h->ip_src.s_addr = htonl(id->dst_ip);
+			h->ip_dst.s_addr = htonl(id->src_ip);
+		}
+
+		th = (struct tcphdr *)(h + 1);
+		break;
+#ifdef INET6
+	case 6:
+		h6 = mtod(m, struct ip6_hdr *);
+
+		/* prepare for checksum */
+		h6->ip6_nxt = IPPROTO_TCP;
+		h6->ip6_plen = htons(sizeof(struct tcphdr));
+		if (dir) {
+			h6->ip6_src = id->src_ip6;
+			h6->ip6_dst = id->dst_ip6;
+		} else {
+			h6->ip6_src = id->dst_ip6;
+			h6->ip6_dst = id->src_ip6;
+		}
+
+		th = (struct tcphdr *)(h6 + 1);
+		break;
+#endif
+	}
+
+	if (dir) {
+		th->th_sport = htons(id->src_port);
+		th->th_dport = htons(id->dst_port);
+	} else {
+		th->th_sport = htons(id->dst_port);
+		th->th_dport = htons(id->src_port);
+	}
+	th->th_off = sizeof(struct tcphdr) >> 2;
+
+	if (flags & TH_RST) {
+		if (flags & TH_ACK) {
+			th->th_seq = htonl(ack);
+			th->th_flags = TH_RST;
+		} else {
+			if (flags & TH_SYN)
+				seq++;
+			th->th_ack = htonl(seq);
+			th->th_flags = TH_RST | TH_ACK;
+		}
+	} else {
+		/*
+		 * Keepalive - use caller provided sequence numbers
+		 */
+		th->th_seq = htonl(seq);
+		th->th_ack = htonl(ack);
+		th->th_flags = TH_ACK;
+	}
+
+	switch (id->addr_type) {
+	case 4:
+		th->th_sum = in_cksum(m, len);
+
+		/* finish the ip header */
+		h->ip_v = 4;
+		h->ip_hl = sizeof(*h) >> 2;
+		h->ip_tos = IPTOS_LOWDELAY;
+		h->ip_off = 0;
+		h->ip_len = htons(len);
+		h->ip_ttl = V_ip_defttl;
+		h->ip_sum = 0;
+		break;
+#ifdef INET6
+	case 6:
+		th->th_sum = in6_cksum(m, IPPROTO_TCP, sizeof(*h6),
+		    sizeof(struct tcphdr));
+
+		/* finish the ip6 header */
+		h6->ip6_vfc |= IPV6_VERSION;
+		h6->ip6_hlim = IPV6_DEFHLIM;
+		break;
+#endif
+	}
+
+	return (m);
+}
+
+/*
+ * This procedure is only used to handle keepalives. It is invoked
+ * every dyn_keepalive_period
+ */
+static void
+ipfw_tick(void * vnetx) 
+{
+	struct mbuf *m0, *m, *mnext, **mtailp;
+#ifdef INET6
+	struct mbuf *m6, **m6_tailp;
+#endif
+	int i;
+	ipfw_dyn_rule *q;
+#ifdef VIMAGE
+	struct vnet *vp = vnetx;
+#endif
+
+	CURVNET_SET(vp);
+	if (V_dyn_keepalive == 0 || V_ipfw_dyn_v == NULL || V_dyn_count == 0)
+		goto done;
+
+	/*
+	 * We make a chain of packets to go out here -- not deferring
+	 * until after we drop the IPFW dynamic rule lock would result
+	 * in a lock order reversal with the normal packet input -> ipfw
+	 * call stack.
+	 */
+	m0 = NULL;
+	mtailp = &m0;
+#ifdef INET6
+	m6 = NULL;
+	m6_tailp = &m6;
+#endif
+	IPFW_DYN_LOCK();
+	for (i = 0 ; i < V_curr_dyn_buckets ; i++) {
+		for (q = V_ipfw_dyn_v[i] ; q ; q = q->next ) {
+			if (q->dyn_type == O_LIMIT_PARENT)
+				continue;
+			if (q->id.proto != IPPROTO_TCP)
+				continue;
+			if ( (q->state & BOTH_SYN) != BOTH_SYN)
+				continue;
+			if (TIME_LEQ(time_uptime + V_dyn_keepalive_interval,
+			    q->expire))
+				continue;	/* too early */
+			if (TIME_LEQ(q->expire, time_uptime))
+				continue;	/* too late, rule expired */
+
+			m = ipfw_send_pkt(NULL, &(q->id), q->ack_rev - 1,
+				q->ack_fwd, TH_SYN);
+			mnext = ipfw_send_pkt(NULL, &(q->id), q->ack_fwd - 1,
+				q->ack_rev, 0);
+
+			switch (q->id.addr_type) {
+			case 4:
+				if (m != NULL) {
+					*mtailp = m;
+					mtailp = &(*mtailp)->m_nextpkt;
+				}
+				if (mnext != NULL) {
+					*mtailp = mnext;
+					mtailp = &(*mtailp)->m_nextpkt;
+				}
+				break;
+#ifdef INET6
+			case 6:
+				if (m != NULL) {
+					*m6_tailp = m;
+					m6_tailp = &(*m6_tailp)->m_nextpkt;
+				}
+				if (mnext != NULL) {
+					*m6_tailp = mnext;
+					m6_tailp = &(*m6_tailp)->m_nextpkt;
+				}
+				break;
+#endif
+			}
+
+			m = mnext = NULL;
+		}
+	}
+	IPFW_DYN_UNLOCK();
+	for (m = mnext = m0; m != NULL; m = mnext) {
+		mnext = m->m_nextpkt;
+		m->m_nextpkt = NULL;
+		ip_output(m, NULL, NULL, 0, NULL, NULL);
+	}
+#ifdef INET6
+	for (m = mnext = m6; m != NULL; m = mnext) {
+		mnext = m->m_nextpkt;
+		m->m_nextpkt = NULL;
+		ip6_output(m, NULL, NULL, 0, NULL, NULL, NULL);
+	}
+#endif
+done:
+	callout_reset(&V_ipfw_timeout, V_dyn_keepalive_period * hz,
+		      ipfw_tick, vnetx);
+	CURVNET_RESTORE();
+}
+
+void
+ipfw_dyn_attach(void)
+{
+        ipfw_dyn_rule_zone = uma_zcreate("IPFW dynamic rule",
+            sizeof(ipfw_dyn_rule), NULL, NULL, NULL, NULL,
+            UMA_ALIGN_PTR, 0);
+
+        IPFW_DYN_LOCK_INIT();
+}
+
+void
+ipfw_dyn_detach(void)
+{
+        uma_zdestroy(ipfw_dyn_rule_zone);
+        IPFW_DYN_LOCK_DESTROY();
+}
+
+void
+ipfw_dyn_init(void)
+{
+        V_ipfw_dyn_v = NULL;
+        V_dyn_buckets = 256;    /* must be power of 2 */
+        V_curr_dyn_buckets = 256; /* must be power of 2 */
+ 
+        V_dyn_ack_lifetime = 300;
+        V_dyn_syn_lifetime = 20;
+        V_dyn_fin_lifetime = 1;
+        V_dyn_rst_lifetime = 1;
+        V_dyn_udp_lifetime = 10;
+        V_dyn_short_lifetime = 5;
+
+        V_dyn_keepalive_interval = 20;
+        V_dyn_keepalive_period = 5;
+        V_dyn_keepalive = 1;    /* do send keepalives */
+        
+        V_dyn_max = 4096;       /* max # of dynamic rules */
+        callout_init(&V_ipfw_timeout, CALLOUT_MPSAFE);
+        callout_reset(&V_ipfw_timeout, hz, ipfw_tick, curvnet);
+}
+
+void
+ipfw_dyn_uninit(int pass)
+{
+	if (pass == 0)
+		callout_drain(&V_ipfw_timeout);
+	else {
+		if (V_ipfw_dyn_v != NULL)
+			free(V_ipfw_dyn_v, M_IPFW);
+	}
+}
+
+int
+ipfw_dyn_len(void)
+{
+	return (V_ipfw_dyn_v == NULL) ? 0 :
+		(V_dyn_count * sizeof(ipfw_dyn_rule));
+}
+
+void
+ipfw_get_dynamic(char **pbp, const char *ep)
+{
+	ipfw_dyn_rule *p, *last = NULL;
+	char *bp;
+	int i;
+
+	if (V_ipfw_dyn_v == NULL)
+		return;
+	bp = *pbp;
+
+	IPFW_DYN_LOCK();
+	for (i = 0 ; i < V_curr_dyn_buckets; i++)
+		for (p = V_ipfw_dyn_v[i] ; p != NULL; p = p->next) {
+			if (bp + sizeof *p <= ep) {
+				ipfw_dyn_rule *dst =
+					(ipfw_dyn_rule *)bp;
+				bcopy(p, dst, sizeof *p);
+				bcopy(&(p->rule->rulenum), &(dst->rule),
+				    sizeof(p->rule->rulenum));
+				/*
+				 * store set number into high word of
+				 * dst->rule pointer.
+				 */
+				bcopy(&(p->rule->set),
+				    (char *)&dst->rule +
+				    sizeof(p->rule->rulenum),
+				    sizeof(p->rule->set));
+				/*
+				 * store a non-null value in "next".
+				 * The userland code will interpret a
+				 * NULL here as a marker
+				 * for the last dynamic rule.
+				 */
+				bcopy(&dst, &dst->next, sizeof(dst));
+				last = dst;
+				dst->expire =
+				    TIME_LEQ(dst->expire, time_uptime) ?
+					0 : dst->expire - time_uptime ;
+				bp += sizeof(ipfw_dyn_rule);
+			}
+		}
+	IPFW_DYN_UNLOCK();
+	if (last != NULL) /* mark last dynamic rule */
+		bzero(&last->next, sizeof(last));
+	*pbp = bp;
+}
+/* end of file */
diff --git a/sys/netinet/ipfw/ip_fw_log.c b/sys/netinet/ipfw/ip_fw_log.c
new file mode 100644
index 00000000000..e9f05e77dce
--- /dev/null
+++ b/sys/netinet/ipfw/ip_fw_log.c
@@ -0,0 +1,432 @@
+/*-
+ * Copyright (c) 2002-2009 Luigi Rizzo, Universita` di Pisa
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+/*
+ * Logging support for ipfw
+ */
+
+#if !defined(KLD_MODULE)
+#include "opt_ipfw.h"
+#include "opt_ipdivert.h"
+#include "opt_ipdn.h"
+#include "opt_inet.h"
+#ifndef INET
+#error IPFIREWALL requires INET.
+#endif /* INET */
+#endif
+#include "opt_inet6.h"
+#include "opt_ipsec.h"
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include  /* for ETHERTYPE_IP */
+#include 
+#include 
+#include 	/* for IFT_ETHER */
+#include 		/* for BPF */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#ifdef INET6
+#include 	/* ip6_sprintf() */
+#endif
+
+#ifdef MAC
+#include 
+#endif
+
+/*
+ * L3HDR maps an ipv4 pointer into a layer3 header pointer of type T
+ * Other macros just cast void * into the appropriate type
+ */
+#define	L3HDR(T, ip)	((T *)((u_int32_t *)(ip) + (ip)->ip_hl))
+#define	TCP(p)		((struct tcphdr *)(p))
+#define	SCTP(p)		((struct sctphdr *)(p))
+#define	UDP(p)		((struct udphdr *)(p))
+#define	ICMP(p)		((struct icmphdr *)(p))
+#define	ICMP6(p)	((struct icmp6_hdr *)(p))
+
+#define SNPARGS(buf, len) buf + len, sizeof(buf) > len ? sizeof(buf) - len : 0
+#define SNP(buf) buf, sizeof(buf)
+
+#ifdef WITHOUT_BPF
+void
+ipfw_log_bpf(int onoff)
+{
+}
+#else /* !WITHOUT_BPF */
+static struct ifnet *log_if;	/* hook to attach to bpf */
+
+/* we use this dummy function for all ifnet callbacks */
+static int
+log_dummy(struct ifnet *ifp, u_long cmd, caddr_t addr)
+{
+	return EINVAL;
+}
+
+void
+ipfw_log_bpf(int onoff)
+{
+	struct ifnet *ifp;
+
+	if (onoff) {
+		if (log_if)
+			return;
+		ifp = if_alloc(IFT_ETHER);
+		if (ifp == NULL)
+			return;
+		if_initname(ifp, "ipfw", 0);
+		ifp->if_mtu = 65536;
+		ifp->if_flags = IFF_UP | IFF_SIMPLEX | IFF_MULTICAST;
+		ifp->if_init = (void *)log_dummy;
+		ifp->if_ioctl = log_dummy;
+		ifp->if_start = (void *)log_dummy;
+		ifp->if_output = (void *)log_dummy;
+		ifp->if_addrlen = 6;
+		ifp->if_hdrlen = 14;
+		if_attach(ifp);
+		ifp->if_baudrate = IF_Mbps(10);
+		bpfattach(ifp, DLT_EN10MB, 14);
+		log_if = ifp;
+	} else {
+		if (log_if) {
+			ether_ifdetach(log_if);
+			if_free(log_if);
+		}
+		log_if = NULL;
+	}
+}
+#endif /* !WITHOUT_BPF */
+
+/*
+ * We enter here when we have a rule with O_LOG.
+ * XXX this function alone takes about 2Kbytes of code!
+ */
+void
+ipfw_log(struct ip_fw *f, u_int hlen, struct ip_fw_args *args,
+    struct mbuf *m, struct ifnet *oif, u_short offset, uint32_t tablearg,
+    struct ip *ip)
+{
+	char *action;
+	int limit_reached = 0;
+	char action2[40], proto[128], fragment[32];
+
+	if (V_fw_verbose == 0) {
+#ifndef WITHOUT_BPF
+		struct m_hdr mh;
+
+		if (log_if == NULL || log_if->if_bpf == NULL)
+			return;
+		/* BPF treats the "mbuf" as read-only */
+		mh.mh_next = m;
+		mh.mh_len = ETHER_HDR_LEN;
+		if (args->eh) { /* layer2, use orig hdr */
+			mh.mh_data = (char *)args->eh;
+		} else {
+			/* add fake header. Later we will store
+			 * more info in the header
+			 */
+			mh.mh_data = "DDDDDDSSSSSS\x08\x00";
+		}
+		BPF_MTAP(log_if, (struct mbuf *)&mh);
+#endif /* !WITHOUT_BPF */
+		return;
+	}
+	/* the old 'log' function */
+	fragment[0] = '\0';
+	proto[0] = '\0';
+
+	if (f == NULL) {	/* bogus pkt */
+		if (V_verbose_limit != 0 && V_norule_counter >= V_verbose_limit)
+			return;
+		V_norule_counter++;
+		if (V_norule_counter == V_verbose_limit)
+			limit_reached = V_verbose_limit;
+		action = "Refuse";
+	} else {	/* O_LOG is the first action, find the real one */
+		ipfw_insn *cmd = ACTION_PTR(f);
+		ipfw_insn_log *l = (ipfw_insn_log *)cmd;
+
+		if (l->max_log != 0 && l->log_left == 0)
+			return;
+		l->log_left--;
+		if (l->log_left == 0)
+			limit_reached = l->max_log;
+		cmd += F_LEN(cmd);	/* point to first action */
+		if (cmd->opcode == O_ALTQ) {
+			ipfw_insn_altq *altq = (ipfw_insn_altq *)cmd;
+
+			snprintf(SNPARGS(action2, 0), "Altq %d",
+				altq->qid);
+			cmd += F_LEN(cmd);
+		}
+		if (cmd->opcode == O_PROB)
+			cmd += F_LEN(cmd);
+
+		if (cmd->opcode == O_TAG)
+			cmd += F_LEN(cmd);
+
+		action = action2;
+		switch (cmd->opcode) {
+		case O_DENY:
+			action = "Deny";
+			break;
+
+		case O_REJECT:
+			if (cmd->arg1==ICMP_REJECT_RST)
+				action = "Reset";
+			else if (cmd->arg1==ICMP_UNREACH_HOST)
+				action = "Reject";
+			else
+				snprintf(SNPARGS(action2, 0), "Unreach %d",
+					cmd->arg1);
+			break;
+
+		case O_UNREACH6:
+			if (cmd->arg1==ICMP6_UNREACH_RST)
+				action = "Reset";
+			else
+				snprintf(SNPARGS(action2, 0), "Unreach %d",
+					cmd->arg1);
+			break;
+
+		case O_ACCEPT:
+			action = "Accept";
+			break;
+		case O_COUNT:
+			action = "Count";
+			break;
+		case O_DIVERT:
+			snprintf(SNPARGS(action2, 0), "Divert %d",
+				cmd->arg1);
+			break;
+		case O_TEE:
+			snprintf(SNPARGS(action2, 0), "Tee %d",
+				cmd->arg1);
+			break;
+		case O_SETFIB:
+			snprintf(SNPARGS(action2, 0), "SetFib %d",
+				cmd->arg1);
+			break;
+		case O_SKIPTO:
+			snprintf(SNPARGS(action2, 0), "SkipTo %d",
+				cmd->arg1);
+			break;
+		case O_PIPE:
+			snprintf(SNPARGS(action2, 0), "Pipe %d",
+				cmd->arg1);
+			break;
+		case O_QUEUE:
+			snprintf(SNPARGS(action2, 0), "Queue %d",
+				cmd->arg1);
+			break;
+		case O_FORWARD_IP: {
+			ipfw_insn_sa *sa = (ipfw_insn_sa *)cmd;
+			int len;
+			struct in_addr dummyaddr;
+			if (sa->sa.sin_addr.s_addr == INADDR_ANY)
+				dummyaddr.s_addr = htonl(tablearg);
+			else
+				dummyaddr.s_addr = sa->sa.sin_addr.s_addr;
+
+			len = snprintf(SNPARGS(action2, 0), "Forward to %s",
+				inet_ntoa(dummyaddr));
+
+			if (sa->sa.sin_port)
+				snprintf(SNPARGS(action2, len), ":%d",
+				    sa->sa.sin_port);
+			}
+			break;
+		case O_NETGRAPH:
+			snprintf(SNPARGS(action2, 0), "Netgraph %d",
+				cmd->arg1);
+			break;
+		case O_NGTEE:
+			snprintf(SNPARGS(action2, 0), "Ngtee %d",
+				cmd->arg1);
+			break;
+		case O_NAT:
+			action = "Nat";
+ 			break;
+		case O_REASS:
+			action = "Reass";
+			break;
+		default:
+			action = "UNKNOWN";
+			break;
+		}
+	}
+
+	if (hlen == 0) {	/* non-ip */
+		snprintf(SNPARGS(proto, 0), "MAC");
+
+	} else {
+		int len;
+#ifdef INET6
+		char src[INET6_ADDRSTRLEN + 2], dst[INET6_ADDRSTRLEN + 2];
+#else
+		char src[INET_ADDRSTRLEN], dst[INET_ADDRSTRLEN];
+#endif
+		struct icmphdr *icmp;
+		struct tcphdr *tcp;
+		struct udphdr *udp;
+#ifdef INET6
+		struct ip6_hdr *ip6 = NULL;
+		struct icmp6_hdr *icmp6;
+#endif
+		src[0] = '\0';
+		dst[0] = '\0';
+#ifdef INET6
+		if (IS_IP6_FLOW_ID(&(args->f_id))) {
+			char ip6buf[INET6_ADDRSTRLEN];
+			snprintf(src, sizeof(src), "[%s]",
+			    ip6_sprintf(ip6buf, &args->f_id.src_ip6));
+			snprintf(dst, sizeof(dst), "[%s]",
+			    ip6_sprintf(ip6buf, &args->f_id.dst_ip6));
+
+			ip6 = (struct ip6_hdr *)ip;
+			tcp = (struct tcphdr *)(((char *)ip) + hlen);
+			udp = (struct udphdr *)(((char *)ip) + hlen);
+		} else
+#endif
+		{
+			tcp = L3HDR(struct tcphdr, ip);
+			udp = L3HDR(struct udphdr, ip);
+
+			inet_ntoa_r(ip->ip_src, src);
+			inet_ntoa_r(ip->ip_dst, dst);
+		}
+
+		switch (args->f_id.proto) {
+		case IPPROTO_TCP:
+			len = snprintf(SNPARGS(proto, 0), "TCP %s", src);
+			if (offset == 0)
+				snprintf(SNPARGS(proto, len), ":%d %s:%d",
+				    ntohs(tcp->th_sport),
+				    dst,
+				    ntohs(tcp->th_dport));
+			else
+				snprintf(SNPARGS(proto, len), " %s", dst);
+			break;
+
+		case IPPROTO_UDP:
+			len = snprintf(SNPARGS(proto, 0), "UDP %s", src);
+			if (offset == 0)
+				snprintf(SNPARGS(proto, len), ":%d %s:%d",
+				    ntohs(udp->uh_sport),
+				    dst,
+				    ntohs(udp->uh_dport));
+			else
+				snprintf(SNPARGS(proto, len), " %s", dst);
+			break;
+
+		case IPPROTO_ICMP:
+			icmp = L3HDR(struct icmphdr, ip);
+			if (offset == 0)
+				len = snprintf(SNPARGS(proto, 0),
+				    "ICMP:%u.%u ",
+				    icmp->icmp_type, icmp->icmp_code);
+			else
+				len = snprintf(SNPARGS(proto, 0), "ICMP ");
+			len += snprintf(SNPARGS(proto, len), "%s", src);
+			snprintf(SNPARGS(proto, len), " %s", dst);
+			break;
+#ifdef INET6
+		case IPPROTO_ICMPV6:
+			icmp6 = (struct icmp6_hdr *)(((char *)ip) + hlen);
+			if (offset == 0)
+				len = snprintf(SNPARGS(proto, 0),
+				    "ICMPv6:%u.%u ",
+				    icmp6->icmp6_type, icmp6->icmp6_code);
+			else
+				len = snprintf(SNPARGS(proto, 0), "ICMPv6 ");
+			len += snprintf(SNPARGS(proto, len), "%s", src);
+			snprintf(SNPARGS(proto, len), " %s", dst);
+			break;
+#endif
+		default:
+			len = snprintf(SNPARGS(proto, 0), "P:%d %s",
+			    args->f_id.proto, src);
+			snprintf(SNPARGS(proto, len), " %s", dst);
+			break;
+		}
+
+#ifdef INET6
+		if (IS_IP6_FLOW_ID(&(args->f_id))) {
+			if (offset & (IP6F_OFF_MASK | IP6F_MORE_FRAG))
+				snprintf(SNPARGS(fragment, 0),
+				    " (frag %08x:%d@%d%s)",
+				    args->f_id.frag_id6,
+				    ntohs(ip6->ip6_plen) - hlen,
+				    ntohs(offset & IP6F_OFF_MASK) << 3,
+				    (offset & IP6F_MORE_FRAG) ? "+" : "");
+		} else
+#endif
+		{
+			int ipoff, iplen;
+			ipoff = ntohs(ip->ip_off);
+			iplen = ntohs(ip->ip_len);
+			if (ipoff & (IP_MF | IP_OFFMASK))
+				snprintf(SNPARGS(fragment, 0),
+				    " (frag %d:%d@%d%s)",
+				    ntohs(ip->ip_id), iplen - (ip->ip_hl << 2),
+				    offset << 3,
+				    (ipoff & IP_MF) ? "+" : "");
+		}
+	}
+	if (oif || m->m_pkthdr.rcvif)
+		log(LOG_SECURITY | LOG_INFO,
+		    "ipfw: %d %s %s %s via %s%s\n",
+		    f ? f->rulenum : -1,
+		    action, proto, oif ? "out" : "in",
+		    oif ? oif->if_xname : m->m_pkthdr.rcvif->if_xname,
+		    fragment);
+	else
+		log(LOG_SECURITY | LOG_INFO,
+		    "ipfw: %d %s %s [no if info]%s\n",
+		    f ? f->rulenum : -1,
+		    action, proto, fragment);
+	if (limit_reached)
+		log(LOG_SECURITY | LOG_NOTICE,
+		    "ipfw: limit %d reached on entry %d\n",
+		    limit_reached, f ? f->rulenum : -1);
+}
+/* end of file */
diff --git a/sys/netinet/ipfw/ip_fw_nat.c b/sys/netinet/ipfw/ip_fw_nat.c
index cd6a1cfd740..f30b754dc16 100644
--- a/sys/netinet/ipfw/ip_fw_nat.c
+++ b/sys/netinet/ipfw/ip_fw_nat.c
@@ -29,114 +29,80 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
-#include 
 #include 
 #include 
-#include 
 #include 
 #include 
-#include 
 #include 
-#include 
-#include 
 #include 
-#include 
-#include 
-#include 
-#include 
-#include 
+
+#define        IPFW_INTERNAL   /* Access to protected data structures in ip_fw.h. */
 
 #include 
 #include 
 
-#define	IPFW_INTERNAL	/* Access to protected data structures in ip_fw.h. */
-
 #include 
 #include 
 #include 
 #include 
-#include 
 #include 
+#include 
 #include 
-#include 
-#include 
-#include 
 #include 
-#include 
 
 #include 	/* XXX for in_cksum */
 
-MALLOC_DECLARE(M_IPFW);
-
 static VNET_DEFINE(eventhandler_tag, ifaddr_event_tag);
 #define	V_ifaddr_event_tag	VNET(ifaddr_event_tag)
 
-extern ipfw_nat_t *ipfw_nat_ptr;
-extern ipfw_nat_cfg_t *ipfw_nat_cfg_ptr;
-extern ipfw_nat_cfg_t *ipfw_nat_del_ptr;
-extern ipfw_nat_cfg_t *ipfw_nat_get_cfg_ptr;
-extern ipfw_nat_cfg_t *ipfw_nat_get_log_ptr;
-
-static void 
+static void
 ifaddr_change(void *arg __unused, struct ifnet *ifp)
 {
 	struct cfg_nat *ptr;
 	struct ifaddr *ifa;
+	struct ip_fw_chain *chain;
 
-	IPFW_WLOCK(&V_layer3_chain);			
+	chain = &V_layer3_chain;
+	IPFW_WLOCK(chain);
 	/* Check every nat entry... */
-	LIST_FOREACH(ptr, &V_layer3_chain.nat, _next) {
+	LIST_FOREACH(ptr, &chain->nat, _next) {
 		/* ...using nic 'ifp->if_xname' as dynamic alias address. */
-		if (strncmp(ptr->if_name, ifp->if_xname, IF_NAMESIZE) == 0) {
-			if_addr_rlock(ifp);
-			TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
-				if (ifa->ifa_addr == NULL)
-					continue;
-				if (ifa->ifa_addr->sa_family != AF_INET)
-					continue;
-				ptr->ip = ((struct sockaddr_in *) 
-				    (ifa->ifa_addr))->sin_addr;
-				LibAliasSetAddress(ptr->lib, ptr->ip);
-			}
-			if_addr_runlock(ifp);
+		if (strncmp(ptr->if_name, ifp->if_xname, IF_NAMESIZE) != 0)
+			continue;
+		if_addr_rlock(ifp);
+		TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
+			if (ifa->ifa_addr == NULL)
+				continue;
+			if (ifa->ifa_addr->sa_family != AF_INET)
+				continue;
+			ptr->ip = ((struct sockaddr_in *)
+			    (ifa->ifa_addr))->sin_addr;
+			LibAliasSetAddress(ptr->lib, ptr->ip);
 		}
+		if_addr_runlock(ifp);
 	}
-	IPFW_WUNLOCK(&V_layer3_chain);	
+	IPFW_WUNLOCK(chain);
 }
 
+/*
+ * delete the pointers for nat entry ix, or all of them if ix < 0
+ */
 static void
-flush_nat_ptrs(const int i)
+flush_nat_ptrs(struct ip_fw_chain *chain, const int ix)
 {
-	struct ip_fw *rule;
+	int i;
+	ipfw_insn_nat *cmd;
 
-	IPFW_WLOCK_ASSERT(&V_layer3_chain);
-	for (rule = V_layer3_chain.rules; rule; rule = rule->next) {
-		ipfw_insn_nat *cmd = (ipfw_insn_nat *)ACTION_PTR(rule);
-		if (cmd->o.opcode != O_NAT)
-			continue;
-		if (cmd->nat != NULL && cmd->nat->id == i)
+	IPFW_WLOCK_ASSERT(chain);
+	for (i = 0; i < chain->n_rules; i++) {
+		cmd = (ipfw_insn_nat *)ACTION_PTR(chain->map[i]);
+		/* XXX skip log and the like ? */
+		if (cmd->o.opcode == O_NAT && cmd->nat != NULL &&
+			    (ix < 0 || cmd->nat->id == ix))
 			cmd->nat = NULL;
 	}
 }
 
-#define HOOK_NAT(b, p) do {				\
-		IPFW_WLOCK_ASSERT(&V_layer3_chain);	\
-		LIST_INSERT_HEAD(b, p, _next);		\
-	} while (0)
-
-#define UNHOOK_NAT(p) do {				\
-		IPFW_WLOCK_ASSERT(&V_layer3_chain);	\
-		LIST_REMOVE(p, _next);			\
-	} while (0)
-
-#define HOOK_REDIR(b, p) do {			\
-		LIST_INSERT_HEAD(b, p, _next);	\
-	} while (0)
-
-#define HOOK_SPOOL(b, p) do {			\
-		LIST_INSERT_HEAD(b, p, _next);	\
-	} while (0)
-
 static void
 del_redir_spool_cfg(struct cfg_nat *n, struct redir_chain *head)
 {
@@ -165,9 +131,9 @@ del_redir_spool_cfg(struct cfg_nat *n, struct redir_chain *head)
 			free(r, M_IPFW);
 			break;
 		default:
-			printf("unknown redirect mode: %u\n", r->mode);				
+			printf("unknown redirect mode: %u\n", r->mode);
 			/* XXX - panic?!?!? */
-			break; 
+			break;
 		}
 	}
 }
@@ -178,7 +144,6 @@ add_redir_spool_cfg(char *buf, struct cfg_nat *ptr)
 	struct cfg_redir *r, *ser_r;
 	struct cfg_spool *s, *ser_s;
 	int cnt, off, i;
-	char *panic_err;
 
 	for (cnt = 0, off = 0; cnt < ptr->redir_cnt; cnt++) {
 		ser_r = (struct cfg_redir *)&buf[off];
@@ -201,7 +166,7 @@ add_redir_spool_cfg(char *buf, struct cfg_nat *ptr)
 					remotePortCopy = 0;
 				r->alink[i] = LibAliasRedirectPort(ptr->lib,
 				    r->laddr, htons(r->lport + i), r->raddr,
-				    htons(remotePortCopy), r->paddr, 
+				    htons(remotePortCopy), r->paddr,
 				    htons(r->pport + i), r->proto);
 				if (r->alink[i] == NULL) {
 					r->alink[0] = NULL;
@@ -215,30 +180,26 @@ add_redir_spool_cfg(char *buf, struct cfg_nat *ptr)
 			break;
 		default:
 			printf("unknown redirect mode: %u\n", r->mode);
-			break; 
+			break;
+		}
+		/* XXX perhaps return an error instead of panic ? */
+		if (r->alink[0] == NULL)
+			panic("LibAliasRedirect* returned NULL");
+		/* LSNAT handling. */
+		for (i = 0; i < r->spool_cnt; i++) {
+			ser_s = (struct cfg_spool *)&buf[off];
+			s = malloc(SOF_REDIR, M_IPFW, M_WAITOK | M_ZERO);
+			memcpy(s, ser_s, SOF_SPOOL);
+			LibAliasAddServer(ptr->lib, r->alink[0],
+			    s->addr, htons(s->port));
+			off += SOF_SPOOL;
+			/* Hook spool entry. */
+			LIST_INSERT_HEAD(&r->spool_chain, s, _next);
 		}
-		if (r->alink[0] == NULL) {
-			panic_err = "LibAliasRedirect* returned NULL";
-			goto bad;
-		} else /* LSNAT handling. */
-			for (i = 0; i < r->spool_cnt; i++) {
-				ser_s = (struct cfg_spool *)&buf[off];
-				s = malloc(SOF_REDIR, M_IPFW, 
-				    M_WAITOK | M_ZERO);
-				memcpy(s, ser_s, SOF_SPOOL);
-				LibAliasAddServer(ptr->lib, r->alink[0], 
-				    s->addr, htons(s->port));
-				off += SOF_SPOOL;
-				/* Hook spool entry. */
-				HOOK_SPOOL(&r->spool_chain, s);
-			}
 		/* And finally hook this redir entry. */
-		HOOK_REDIR(&ptr->redir_chain, r);
+		LIST_INSERT_HEAD(&ptr->redir_chain, r, _next);
 	}
 	return (1);
-bad:
-	/* something really bad happened: panic! */
-	panic("%s\n", panic_err);
 }
 
 static int
@@ -252,101 +213,80 @@ ipfw_nat(struct ip_fw_args *args, struct cfg_nat *t, struct mbuf *m)
 
 	ldt = 0;
 	retval = 0;
-	if ((mcl = m_megapullup(m, m->m_pkthdr.len)) ==
-	    NULL)
-		goto badnat;
-	ip = mtod(mcl, struct ip *);
-	if (args->eh == NULL) {
-		ip->ip_len = htons(ip->ip_len);
-		ip->ip_off = htons(ip->ip_off);
+	mcl = m_megapullup(m, m->m_pkthdr.len);
+	if (mcl == NULL) {
+		args->m = NULL;
+		return (IP_FW_DENY);
 	}
+	ip = mtod(mcl, struct ip *);
 
-	/* 
+	/*
 	 * XXX - Libalias checksum offload 'duct tape':
-	 * 
-	 * locally generated packets have only
-	 * pseudo-header checksum calculated
-	 * and libalias will screw it[1], so
-	 * mark them for later fix.  Moreover
-	 * there are cases when libalias
-	 * modify tcp packet data[2], mark it
-	 * for later fix too.
 	 *
-	 * [1] libalias was never meant to run
-	 * in kernel, so it doesn't have any
-	 * knowledge about checksum
-	 * offloading, and it expects a packet
-	 * with a full internet
-	 * checksum. Unfortunately, packets
-	 * generated locally will have just the
-	 * pseudo header calculated, and when
-	 * libalias tries to adjust the
-	 * checksum it will actually screw it.
+	 * locally generated packets have only pseudo-header checksum
+	 * calculated and libalias will break it[1], so mark them for
+	 * later fix.  Moreover there are cases when libalias modifies
+	 * tcp packet data[2], mark them for later fix too.
 	 *
-	 * [2] when libalias modify tcp's data
-	 * content, full TCP checksum has to
-	 * be recomputed: the problem is that
-	 * libalias doesn't have any idea
-	 * about checksum offloading To
-	 * workaround this, we do not do
-	 * checksumming in LibAlias, but only
-	 * mark the packets in th_x2 field. If
-	 * we receive a marked packet, we
-	 * calculate correct checksum for it
-	 * aware of offloading.  Why such a
-	 * terrible hack instead of
-	 * recalculating checksum for each
-	 * packet?  Because the previous
-	 * checksum was not checked!
-	 * Recalculating checksums for EVERY
-	 * packet will hide ALL transmission
-	 * errors. Yes, marked packets still
-	 * suffer from this problem. But,
-	 * sigh, natd(8) has this problem,
-	 * too.
+	 * [1] libalias was never meant to run in kernel, so it does
+	 * not have any knowledge about checksum offloading, and
+	 * expects a packet with a full internet checksum.
+	 * Unfortunately, packets generated locally will have just the
+	 * pseudo header calculated, and when libalias tries to adjust
+	 * the checksum it will actually compute a wrong value.
+	 *
+	 * [2] when libalias modifies tcp's data content, full TCP
+	 * checksum has to be recomputed: the problem is that
+	 * libalias does not have any idea about checksum offloading.
+	 * To work around this, we do not do checksumming in LibAlias,
+	 * but only mark the packets in th_x2 field. If we receive a
+	 * marked packet, we calculate correct checksum for it
+	 * aware of offloading.  Why such a terrible hack instead of
+	 * recalculating checksum for each packet?
+	 * Because the previous checksum was not checked!
+	 * Recalculating checksums for EVERY packet will hide ALL
+	 * transmission errors. Yes, marked packets still suffer from
+	 * this problem. But, sigh, natd(8) has this problem, too.
 	 *
 	 * TODO: -make libalias mbuf aware (so
 	 * it can handle delayed checksum and tso)
 	 */
 
-	if (mcl->m_pkthdr.rcvif == NULL && 
-	    mcl->m_pkthdr.csum_flags & 
-	    CSUM_DELAY_DATA)
+	if (mcl->m_pkthdr.rcvif == NULL &&
+	    mcl->m_pkthdr.csum_flags & CSUM_DELAY_DATA)
 		ldt = 1;
 
 	c = mtod(mcl, char *);
 	if (args->oif == NULL)
-		retval = LibAliasIn(t->lib, c, 
+		retval = LibAliasIn(t->lib, c,
 			mcl->m_len + M_TRAILINGSPACE(mcl));
 	else
-		retval = LibAliasOut(t->lib, c, 
+		retval = LibAliasOut(t->lib, c,
 			mcl->m_len + M_TRAILINGSPACE(mcl));
 	if (retval == PKT_ALIAS_RESPOND) {
-	  m->m_flags |= M_SKIP_FIREWALL;
-	  retval = PKT_ALIAS_OK;
+		m->m_flags |= M_SKIP_FIREWALL;
+		retval = PKT_ALIAS_OK;
 	}
 	if (retval != PKT_ALIAS_OK &&
 	    retval != PKT_ALIAS_FOUND_HEADER_FRAGMENT) {
 		/* XXX - should i add some logging? */
 		m_free(mcl);
-	badnat:
 		args->m = NULL;
 		return (IP_FW_DENY);
 	}
-	mcl->m_pkthdr.len = mcl->m_len = 
-	    ntohs(ip->ip_len);
+	mcl->m_pkthdr.len = mcl->m_len = ntohs(ip->ip_len);
 
-	/* 
-	 * XXX - libalias checksum offload 
-	 * 'duct tape' (see above) 
+	/*
+	 * XXX - libalias checksum offload
+	 * 'duct tape' (see above)
 	 */
 
-	if ((ip->ip_off & htons(IP_OFFMASK)) == 0 && 
+	if ((ip->ip_off & htons(IP_OFFMASK)) == 0 &&
 	    ip->ip_p == IPPROTO_TCP) {
-		struct tcphdr 	*th; 
+		struct tcphdr 	*th;
 
 		th = (struct tcphdr *)(ip + 1);
-		if (th->th_x2) 
+		if (th->th_x2)
 			ldt = 1;
 	}
 
@@ -355,82 +295,83 @@ ipfw_nat(struct ip_fw_args *args, struct cfg_nat *t, struct mbuf *m)
 		struct udphdr 	*uh;
 		u_short cksum;
 
-		ip->ip_len = ntohs(ip->ip_len);
+		/* XXX check if ip_len can stay in net format */
 		cksum = in_pseudo(
 		    ip->ip_src.s_addr,
-		    ip->ip_dst.s_addr, 
-		    htons(ip->ip_p + ip->ip_len - (ip->ip_hl << 2))
+		    ip->ip_dst.s_addr,
+		    htons(ip->ip_p + ntohs(ip->ip_len) - (ip->ip_hl << 2))
 		);
-					
+
 		switch (ip->ip_p) {
 		case IPPROTO_TCP:
 			th = (struct tcphdr *)(ip + 1);
-			/* 
-			 * Maybe it was set in 
-			 * libalias... 
+			/*
+			 * Maybe it was set in
+			 * libalias...
 			 */
 			th->th_x2 = 0;
 			th->th_sum = cksum;
-			mcl->m_pkthdr.csum_data = 
+			mcl->m_pkthdr.csum_data =
 			    offsetof(struct tcphdr, th_sum);
 			break;
 		case IPPROTO_UDP:
 			uh = (struct udphdr *)(ip + 1);
 			uh->uh_sum = cksum;
-			mcl->m_pkthdr.csum_data = 
+			mcl->m_pkthdr.csum_data =
 			    offsetof(struct udphdr, uh_sum);
-			break;						
+			break;
 		}
-		/* 
-		 * No hw checksum offloading: do it 
-		 * by ourself. 
-		 */
-		if ((mcl->m_pkthdr.csum_flags & 
-		     CSUM_DELAY_DATA) == 0) {
+		/* No hw checksum offloading: do it ourselves */
+		if ((mcl->m_pkthdr.csum_flags & CSUM_DELAY_DATA) == 0) {
 			in_delayed_cksum(mcl);
-			mcl->m_pkthdr.csum_flags &= 
-			    ~CSUM_DELAY_DATA;
+			mcl->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA;
 		}
-		ip->ip_len = htons(ip->ip_len);
 	}
-
-	if (args->eh == NULL) {
-		ip->ip_len = ntohs(ip->ip_len);
-		ip->ip_off = ntohs(ip->ip_off);
-	}
-
 	args->m = mcl;
 	return (IP_FW_NAT);
 }
 
-static int 
+static struct cfg_nat *
+lookup_nat(struct nat_list *l, int nat_id)
+{
+	struct cfg_nat *res;
+
+	LIST_FOREACH(res, l, _next) {
+		if (res->id == nat_id)
+			break;
+	}
+	return res;
+}
+
+static int
 ipfw_nat_cfg(struct sockopt *sopt)
 {
 	struct cfg_nat *ptr, *ser_n;
 	char *buf;
+	struct ip_fw_chain *chain = &V_layer3_chain;
 
 	buf = malloc(NAT_BUF_LEN, M_IPFW, M_WAITOK | M_ZERO);
-	sooptcopyin(sopt, buf, NAT_BUF_LEN, 
-	    sizeof(struct cfg_nat));
+	sooptcopyin(sopt, buf, NAT_BUF_LEN, sizeof(struct cfg_nat));
 	ser_n = (struct cfg_nat *)buf;
 
-	/* 
+	/* check valid parameter ser_n->id > 0 ? */
+	/*
 	 * Find/create nat rule.
 	 */
-	IPFW_WLOCK(&V_layer3_chain);
-	LOOKUP_NAT(V_layer3_chain, ser_n->id, ptr);
+	IPFW_WLOCK(chain);
+	ptr = lookup_nat(&chain->nat, ser_n->id);
 	if (ptr == NULL) {
 		/* New rule: allocate and init new instance. */
-		ptr = malloc(sizeof(struct cfg_nat), 
+		ptr = malloc(sizeof(struct cfg_nat),
 		    M_IPFW, M_NOWAIT | M_ZERO);
 		if (ptr == NULL) {
-			IPFW_WUNLOCK(&V_layer3_chain);				
+			IPFW_WUNLOCK(chain);
 			free(buf, M_IPFW);
 			return (ENOSPC);
 		}
 		ptr->lib = LibAliasInit(NULL);
 		if (ptr->lib == NULL) {
-			IPFW_WUNLOCK(&V_layer3_chain);
+			IPFW_WUNLOCK(chain);
 			free(ptr, M_IPFW);
 			free(buf, M_IPFW);
 			return (EINVAL);
@@ -438,18 +379,18 @@ ipfw_nat_cfg(struct sockopt *sopt)
 		LIST_INIT(&ptr->redir_chain);
 	} else {
 		/* Entry already present: temporarly unhook it. */
-		UNHOOK_NAT(ptr);
-		flush_nat_ptrs(ser_n->id);
+		LIST_REMOVE(ptr, _next);
+		flush_nat_ptrs(chain, ser_n->id);
 	}
-	IPFW_WUNLOCK(&V_layer3_chain);
+	IPFW_WUNLOCK(chain);
 
-	/* 
+	/*
 	 * Basic nat configuration.
 	 */
 	ptr->id = ser_n->id;
-	/* 
-	 * XXX - what if this rule doesn't nat any ip and just 
-	 * redirect? 
+	/*
+	 * XXX - what if this rule doesn't nat any ip and just
+	 * redirect?
 	 * do we set aliasaddress to 0.0.0.0?
 	 */
 	ptr->ip = ser_n->ip;
@@ -459,7 +400,7 @@ ipfw_nat_cfg(struct sockopt *sopt)
 	LibAliasSetAddress(ptr->lib, ptr->ip);
 	memcpy(ptr->if_name, ser_n->if_name, IF_NAMESIZE);
 
-	/* 
+	/*
 	 * Redir and LSNAT configuration.
 	 */
 	/* Delete old cfgs. */
@@ -467,9 +408,9 @@ ipfw_nat_cfg(struct sockopt *sopt)
 	/* Add new entries. */
 	add_redir_spool_cfg(&buf[(sizeof(struct cfg_nat))], ptr);
 	free(buf, M_IPFW);
-	IPFW_WLOCK(&V_layer3_chain);
-	HOOK_NAT(&V_layer3_chain.nat, ptr);
-	IPFW_WUNLOCK(&V_layer3_chain);
+	IPFW_WLOCK(chain);
+	LIST_INSERT_HEAD(&chain->nat, ptr, _next);
+	IPFW_WUNLOCK(chain);
 	return (0);
 }
 
@@ -477,18 +418,20 @@ static int
 ipfw_nat_del(struct sockopt *sopt)
 {
 	struct cfg_nat *ptr;
+	struct ip_fw_chain *chain = &V_layer3_chain;
 	int i;
-		
+
 	sooptcopyin(sopt, &i, sizeof i, sizeof i);
-	IPFW_WLOCK(&V_layer3_chain);
-	LOOKUP_NAT(V_layer3_chain, i, ptr);
+	/* XXX validate i */
+	IPFW_WLOCK(chain);
+	ptr = lookup_nat(&chain->nat, i);
 	if (ptr == NULL) {
-		IPFW_WUNLOCK(&V_layer3_chain);
+		IPFW_WUNLOCK(chain);
 		return (EINVAL);
 	}
-	UNHOOK_NAT(ptr);
-	flush_nat_ptrs(i);
-	IPFW_WUNLOCK(&V_layer3_chain);
+	LIST_REMOVE(ptr, _next);
+	flush_nat_ptrs(chain, i);
+	IPFW_WUNLOCK(chain);
 	del_redir_spool_cfg(ptr, &ptr->redir_chain);
 	LibAliasUninit(ptr->lib);
 	free(ptr, M_IPFW);
@@ -497,56 +440,53 @@ ipfw_nat_del(struct sockopt *sopt)
 
 static int
 ipfw_nat_get_cfg(struct sockopt *sopt)
-{	
+{
 	uint8_t *data;
 	struct cfg_nat *n;
 	struct cfg_redir *r;
 	struct cfg_spool *s;
 	int nat_cnt, off;
-		
+	struct ip_fw_chain *chain;
+	int err = ENOSPC;
+
+	chain = &V_layer3_chain;
 	nat_cnt = 0;
 	off = sizeof(nat_cnt);
 
 	data = malloc(NAT_BUF_LEN, M_IPFW, M_WAITOK | M_ZERO);
-	IPFW_RLOCK(&V_layer3_chain);
+	IPFW_RLOCK(chain);
 	/* Serialize all the data. */
-	LIST_FOREACH(n, &V_layer3_chain.nat, _next) {
+	LIST_FOREACH(n, &chain->nat, _next) {
 		nat_cnt++;
-		if (off + SOF_NAT < NAT_BUF_LEN) {
-			bcopy(n, &data[off], SOF_NAT);
-			off += SOF_NAT;
-			LIST_FOREACH(r, &n->redir_chain, _next) {
-				if (off + SOF_REDIR < NAT_BUF_LEN) {
-					bcopy(r, &data[off], 
-					    SOF_REDIR);
-					off += SOF_REDIR;
-					LIST_FOREACH(s, &r->spool_chain, 
-					    _next) {
-						if (off + SOF_SPOOL < 
-						    NAT_BUF_LEN) {
-							bcopy(s, &data[off],
-							    SOF_SPOOL);
-							off += SOF_SPOOL;
-						} else
-							goto nospace;
-					}
-				} else
-					goto nospace;
-			}
-		} else
+		if (off + SOF_NAT >= NAT_BUF_LEN)
 			goto nospace;
+		bcopy(n, &data[off], SOF_NAT);
+		off += SOF_NAT;
+		LIST_FOREACH(r, &n->redir_chain, _next) {
+			if (off + SOF_REDIR >= NAT_BUF_LEN)
+				goto nospace;
+			bcopy(r, &data[off], SOF_REDIR);
+			off += SOF_REDIR;
+			LIST_FOREACH(s, &r->spool_chain, _next) {
+				if (off + SOF_SPOOL >= NAT_BUF_LEN)
+					goto nospace;
+				bcopy(s, &data[off], SOF_SPOOL);
+				off += SOF_SPOOL;
+			}
+		}
 	}
-	bcopy(&nat_cnt, data, sizeof(nat_cnt));
-	IPFW_RUNLOCK(&V_layer3_chain);
-	sooptcopyout(sopt, data, NAT_BUF_LEN);
-	free(data, M_IPFW);
-	return (0);
+	err = 0; /* all good */
 nospace:
-	IPFW_RUNLOCK(&V_layer3_chain);
-	printf("serialized data buffer not big enough:"
-	    "please increase NAT_BUF_LEN\n");
+	IPFW_RUNLOCK(chain);
+	if (err == 0) {
+		bcopy(&nat_cnt, data, sizeof(nat_cnt));
+		sooptcopyout(sopt, data, NAT_BUF_LEN);
+	} else {
+		printf("serialized data buffer not big enough:"
+		    "please increase NAT_BUF_LEN\n");
+	}
 	free(data, M_IPFW);
-	return (ENOSPC);
+	return (err);
 }
 
 static int
@@ -554,30 +494,35 @@ ipfw_nat_get_log(struct sockopt *sopt)
 {
 	uint8_t *data;
 	struct cfg_nat *ptr;
-	int i, size, cnt, sof;
+	int i, size;
+	struct ip_fw_chain *chain;
 
-	data = NULL;
-	sof = LIBALIAS_BUF_SIZE;
-	cnt = 0;
+	chain = &V_layer3_chain;
 
-	IPFW_RLOCK(&V_layer3_chain);
-	size = i = 0;
-	LIST_FOREACH(ptr, &V_layer3_chain.nat, _next) {
-		if (ptr->lib->logDesc == NULL) 
+	IPFW_RLOCK(chain);
+	/* one pass to count, one to copy the data */
+	i = 0;
+	LIST_FOREACH(ptr, &chain->nat, _next) {
+		if (ptr->lib->logDesc == NULL)
+			continue;
+		i++;
+	}
+	size = i * (LIBALIAS_BUF_SIZE + sizeof(int));
+	data = malloc(size, M_IPFW, M_NOWAIT | M_ZERO);
+	if (data == NULL) {
+		IPFW_RUNLOCK(chain);
+		return (ENOSPC);
+	}
+	i = 0;
+	LIST_FOREACH(ptr, &chain->nat, _next) {
+		if (ptr->lib->logDesc == NULL)
 			continue;
-		cnt++;
-		size = cnt * (sof + sizeof(int));
-		data = realloc(data, size, M_IPFW, M_NOWAIT | M_ZERO);
-		if (data == NULL) {
-			IPFW_RUNLOCK(&V_layer3_chain);
-			return (ENOSPC);
-		}
 		bcopy(&ptr->id, &data[i], sizeof(int));
 		i += sizeof(int);
-		bcopy(ptr->lib->logDesc, &data[i], sof);
-		i += sof;
+		bcopy(ptr->lib->logDesc, &data[i], LIBALIAS_BUF_SIZE);
+		i += LIBALIAS_BUF_SIZE;
 	}
-	IPFW_RUNLOCK(&V_layer3_chain);
+	IPFW_RUNLOCK(chain);
 	sooptcopyout(sopt, data, size);
 	free(data, M_IPFW);
 	return(0);
@@ -590,38 +535,41 @@ ipfw_nat_init(void)
 	IPFW_WLOCK(&V_layer3_chain);
 	/* init ipfw hooks */
 	ipfw_nat_ptr = ipfw_nat;
+	lookup_nat_ptr = lookup_nat;
 	ipfw_nat_cfg_ptr = ipfw_nat_cfg;
 	ipfw_nat_del_ptr = ipfw_nat_del;
 	ipfw_nat_get_cfg_ptr = ipfw_nat_get_cfg;
 	ipfw_nat_get_log_ptr = ipfw_nat_get_log;
 	IPFW_WUNLOCK(&V_layer3_chain);
-	V_ifaddr_event_tag = EVENTHANDLER_REGISTER(ifaddr_event, ifaddr_change, 
+	V_ifaddr_event_tag = EVENTHANDLER_REGISTER(
+	    ifaddr_event, ifaddr_change,
 	    NULL, EVENTHANDLER_PRI_ANY);
 }
 
 static void
 ipfw_nat_destroy(void)
 {
-	struct ip_fw *rule;
 	struct cfg_nat *ptr, *ptr_temp;
-	
-	IPFW_WLOCK(&V_layer3_chain);
-	LIST_FOREACH_SAFE(ptr, &V_layer3_chain.nat, _next, ptr_temp) {
+	struct ip_fw_chain *chain;
+
+	chain = &V_layer3_chain;
+	IPFW_WLOCK(chain);
+	LIST_FOREACH_SAFE(ptr, &chain->nat, _next, ptr_temp) {
 		LIST_REMOVE(ptr, _next);
 		del_redir_spool_cfg(ptr, &ptr->redir_chain);
 		LibAliasUninit(ptr->lib);
 		free(ptr, M_IPFW);
 	}
 	EVENTHANDLER_DEREGISTER(ifaddr_event, V_ifaddr_event_tag);
-	/* flush all nat ptrs */
-	for (rule = V_layer3_chain.rules; rule; rule = rule->next) {
-		ipfw_insn_nat *cmd = (ipfw_insn_nat *)ACTION_PTR(rule);
-		if (cmd->o.opcode == O_NAT)
-			cmd->nat = NULL;
-	}
+	flush_nat_ptrs(chain, -1 /* flush all */);
 	/* deregister ipfw_nat */
 	ipfw_nat_ptr = NULL;
-	IPFW_WUNLOCK(&V_layer3_chain);
+	lookup_nat_ptr = NULL;
+	ipfw_nat_cfg_ptr = NULL;
+	ipfw_nat_del_ptr = NULL;
+	ipfw_nat_get_cfg_ptr = NULL;
+	ipfw_nat_get_log_ptr = NULL;
+	IPFW_WUNLOCK(chain);
 }
 
 static int
@@ -655,3 +603,4 @@ DECLARE_MODULE(ipfw_nat, ipfw_nat_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY
 MODULE_DEPEND(ipfw_nat, libalias, 1, 1, 1);
 MODULE_DEPEND(ipfw_nat, ipfw, 2, 2, 2);
 MODULE_VERSION(ipfw_nat, 1);
+/* end of file */
diff --git a/sys/netinet/ipfw/ip_fw_pfil.c b/sys/netinet/ipfw/ip_fw_pfil.c
index db7308407a8..113210924b6 100644
--- a/sys/netinet/ipfw/ip_fw_pfil.c
+++ b/sys/netinet/ipfw/ip_fw_pfil.c
@@ -46,9 +46,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
 #include 
-#include 
 
 #include 
 #include 
@@ -60,471 +58,325 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
-#include 
-
+#include 
 #include 
 
 #include 
 
-VNET_DEFINE(int, fw_enable) = 1;
+static VNET_DEFINE(int, fw_enable) = 1;
+#define V_fw_enable	VNET(fw_enable)
+
 #ifdef INET6
-VNET_DEFINE(int, fw6_enable) = 1;
+static VNET_DEFINE(int, fw6_enable) = 1;
+#define V_fw6_enable	VNET(fw6_enable)
 #endif
 
 int ipfw_chg_hook(SYSCTL_HANDLER_ARGS);
 
 /* Divert hooks. */
-ip_divert_packet_t *ip_divert_ptr = NULL;
+void (*ip_divert_ptr)(struct mbuf *m, int incoming);
 
 /* ng_ipfw hooks. */
 ng_ipfw_input_t *ng_ipfw_input_p = NULL;
 
 /* Forward declarations. */
-static int	ipfw_divert(struct mbuf **, int, int);
-#define	DIV_DIR_IN	1
-#define	DIV_DIR_OUT	0
+static int ipfw_divert(struct mbuf **, int, struct ipfw_rule_ref *, int);
 
-int
-ipfw_check_in(void *arg, struct mbuf **m0, struct ifnet *ifp, int dir,
+#ifdef SYSCTL_NODE
+SYSCTL_DECL(_net_inet_ip_fw);
+SYSCTL_VNET_PROC(_net_inet_ip_fw, OID_AUTO, enable,
+    CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_SECURE3, &VNET_NAME(fw_enable), 0,
+    ipfw_chg_hook, "I", "Enable ipfw");
+#ifdef INET6
+SYSCTL_DECL(_net_inet6_ip6_fw);
+SYSCTL_VNET_PROC(_net_inet6_ip6_fw, OID_AUTO, enable,
+    CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_SECURE3, &VNET_NAME(fw6_enable), 0,
+    ipfw_chg_hook, "I", "Enable ipfw+6");
+#endif /* INET6 */
+#endif /* SYSCTL_NODE */
+
+/*
+ * The pfilter hook to pass packets to ipfw_chk and then to
+ * dummynet, divert, netgraph or other modules.
+ * The packet may be consumed.
+ */
+static int
+ipfw_check_hook(void *arg, struct mbuf **m0, struct ifnet *ifp, int dir,
     struct inpcb *inp)
 {
 	struct ip_fw_args args;
-	struct ng_ipfw_tag *ng_tag;
-	struct m_tag *dn_tag;
-	int ipfw = 0;
-	int divert;
-	int tee;
-#ifdef IPFIREWALL_FORWARD
-	struct m_tag *fwd_tag;
-#endif
+	struct m_tag *tag;
+	int ipfw;
+	int ret;
 
-	KASSERT(dir == PFIL_IN, ("ipfw_check_in wrong direction!"));
+	/* all the processing now uses ip_len in net format */
+	SET_NET_IPLEN(mtod(*m0, struct ip *));
 
+	/* convert dir to IPFW values */
+	dir = (dir == PFIL_IN) ? DIR_IN : DIR_OUT;
 	bzero(&args, sizeof(args));
 
-	ng_tag = (struct ng_ipfw_tag *)m_tag_locate(*m0, NGM_IPFW_COOKIE, 0,
-	    NULL);
-	if (ng_tag != NULL) {
-		KASSERT(ng_tag->dir == NG_IPFW_IN,
-		    ("ng_ipfw tag with wrong direction"));
-		args.rule = ng_tag->rule;
-		args.rule_id = ng_tag->rule_id;
-		args.chain_id = ng_tag->chain_id;
-		m_tag_delete(*m0, (struct m_tag *)ng_tag);
-	}
-
 again:
-	dn_tag = m_tag_find(*m0, PACKET_TAG_DUMMYNET, NULL);
-	if (dn_tag != NULL){
-		struct dn_pkt_tag *dt;
-
-		dt = (struct dn_pkt_tag *)(dn_tag+1);
-		args.rule = dt->rule;
-		args.rule_id = dt->rule_id;
-		args.chain_id = dt->chain_id;
-
-		m_tag_delete(*m0, dn_tag);
-	}
-
-	args.m = *m0;
-	args.inp = inp;
-	tee = 0;
-
-	if (V_fw_one_pass == 0 || args.rule == NULL) {
-		ipfw = ipfw_chk(&args);
-		*m0 = args.m;
-	} else
-		ipfw = IP_FW_PASS;
-		
-	KASSERT(*m0 != NULL || ipfw == IP_FW_DENY, ("%s: m0 is NULL",
-	    __func__));
-
-	switch (ipfw) {
-	case IP_FW_PASS:
-		if (args.next_hop == NULL)
-			goto pass;
-
-#ifdef IPFIREWALL_FORWARD
-		fwd_tag = m_tag_get(PACKET_TAG_IPFORWARD,
-				sizeof(struct sockaddr_in), M_NOWAIT);
-		if (fwd_tag == NULL)
-			goto drop;
-		bcopy(args.next_hop, (fwd_tag+1), sizeof(struct sockaddr_in));
-		m_tag_prepend(*m0, fwd_tag);
-
-		if (in_localip(args.next_hop->sin_addr))
-			(*m0)->m_flags |= M_FASTFWD_OURS;
-		goto pass;
-#endif
-		break;			/* not reached */
-
-	case IP_FW_DENY:
-		goto drop;
-		break;			/* not reached */
-
-	case IP_FW_DUMMYNET:
-		if (ip_dn_io_ptr == NULL)
-			goto drop;
-		if (mtod(*m0, struct ip *)->ip_v == 4)
-			ip_dn_io_ptr(m0, DN_TO_IP_IN, &args);
-		else if (mtod(*m0, struct ip *)->ip_v == 6)
-			ip_dn_io_ptr(m0, DN_TO_IP6_IN, &args);
-		if (*m0 != NULL)
-			goto again;
-		return 0;		/* packet consumed */
-
-	case IP_FW_TEE:
-		tee = 1;
-		/* fall through */
-
-	case IP_FW_DIVERT:
-		divert = ipfw_divert(m0, DIV_DIR_IN, tee);
-		if (divert) {
-			*m0 = NULL;
-			return 0;	/* packet consumed */
-		} else {
-			args.rule = NULL;
-			goto again;	/* continue with packet */
+	/*
+	 * extract and remove the tag if present. If we are left
+	 * with onepass, optimize the outgoing path.
+	 */
+	tag = m_tag_locate(*m0, MTAG_IPFW_RULE, 0, NULL);
+	if (tag != NULL) {
+		args.rule = *((struct ipfw_rule_ref *)(tag+1));
+		m_tag_delete(*m0, tag);
+		if (args.rule.info & IPFW_ONEPASS) {
+			SET_HOST_IPLEN(mtod(*m0, struct ip *));
+			return 0;
 		}
-
-	case IP_FW_NGTEE:
-		if (!NG_IPFW_LOADED)
-			goto drop;
-		(void)ng_ipfw_input_p(m0, NG_IPFW_IN, &args, 1);
-		goto again;		/* continue with packet */
-
-	case IP_FW_NETGRAPH:
-		if (!NG_IPFW_LOADED)
-			goto drop;
-		return ng_ipfw_input_p(m0, NG_IPFW_IN, &args, 0);
-		
-	case IP_FW_NAT:
-		goto again;		/* continue with packet */
-
-	case IP_FW_REASS:
-		goto again;
-
-	default:
-		KASSERT(0, ("%s: unknown retval", __func__));
-	}
-
-drop:
-	if (*m0)
-		m_freem(*m0);
-	*m0 = NULL;
-	return (EACCES);
-pass:
-	return 0;	/* not filtered */
-}
-
-int
-ipfw_check_out(void *arg, struct mbuf **m0, struct ifnet *ifp, int dir,
-    struct inpcb *inp)
-{
-	struct ip_fw_args args;
-	struct ng_ipfw_tag *ng_tag;
-	struct m_tag *dn_tag;
-	int ipfw = 0;
-	int divert;
-	int tee;
-#ifdef IPFIREWALL_FORWARD
-	struct m_tag *fwd_tag;
-#endif
-
-	KASSERT(dir == PFIL_OUT, ("ipfw_check_out wrong direction!"));
-
-	bzero(&args, sizeof(args));
-
-	ng_tag = (struct ng_ipfw_tag *)m_tag_locate(*m0, NGM_IPFW_COOKIE, 0,
-	    NULL);
-	if (ng_tag != NULL) {
-		KASSERT(ng_tag->dir == NG_IPFW_OUT,
-		    ("ng_ipfw tag with wrong direction"));
-		args.rule = ng_tag->rule;
-		args.rule_id = ng_tag->rule_id;
-		args.chain_id = ng_tag->chain_id;
-		m_tag_delete(*m0, (struct m_tag *)ng_tag);
-	}
-
-again:
-	dn_tag = m_tag_find(*m0, PACKET_TAG_DUMMYNET, NULL);
-	if (dn_tag != NULL) {
-		struct dn_pkt_tag *dt;
-
-		dt = (struct dn_pkt_tag *)(dn_tag+1);
-		args.rule = dt->rule;
-		args.rule_id = dt->rule_id;
-		args.chain_id = dt->chain_id;
-
-		m_tag_delete(*m0, dn_tag);
 	}
 
 	args.m = *m0;
-	args.oif = ifp;
+	args.oif = dir == DIR_OUT ? ifp : NULL;
 	args.inp = inp;
-	tee = 0;
 
-	if (V_fw_one_pass == 0 || args.rule == NULL) {
-		ipfw = ipfw_chk(&args);
-		*m0 = args.m;
-	} else
-		ipfw = IP_FW_PASS;
+	ipfw = ipfw_chk(&args);
+	*m0 = args.m;
 
 	KASSERT(*m0 != NULL || ipfw == IP_FW_DENY, ("%s: m0 is NULL",
 	    __func__));
 
+	/* breaking out of the switch means drop */
+	ret = 0;	/* default return value for pass */
 	switch (ipfw) {
 	case IP_FW_PASS:
+		/* next_hop may be set by ipfw_chk */
                 if (args.next_hop == NULL)
-                        goto pass;
-#ifdef IPFIREWALL_FORWARD
-		/* Overwrite existing tag. */
-		fwd_tag = m_tag_find(*m0, PACKET_TAG_IPFORWARD, NULL);
-		if (fwd_tag == NULL) {
+                        break; /* pass */
+#ifndef IPFIREWALL_FORWARD
+		ret = EACCES;
+#else
+	    {
+		struct m_tag *fwd_tag;
+
+		/* Incoming packets should not be tagged so we do not
+		 * m_tag_find. Outgoing packets may be tagged, so we
+		 * reuse the tag if present.
+		 */
+		fwd_tag = (dir == DIR_IN) ? NULL :
+			m_tag_find(*m0, PACKET_TAG_IPFORWARD, NULL);
+		if (fwd_tag != NULL) {
+			m_tag_unlink(*m0, fwd_tag);
+		} else {
 			fwd_tag = m_tag_get(PACKET_TAG_IPFORWARD,
 				sizeof(struct sockaddr_in), M_NOWAIT);
-			if (fwd_tag == NULL)
-				goto drop;
-		} else
-			m_tag_unlink(*m0, fwd_tag);
+			if (fwd_tag == NULL) {
+				ret = EACCES;
+				break; /* i.e. drop */
+			}
+		}
 		bcopy(args.next_hop, (fwd_tag+1), sizeof(struct sockaddr_in));
 		m_tag_prepend(*m0, fwd_tag);
 
 		if (in_localip(args.next_hop->sin_addr))
 			(*m0)->m_flags |= M_FASTFWD_OURS;
-		goto pass;
+	    }
 #endif
-		break;			/* not reached */
+		break;
 
 	case IP_FW_DENY:
-		goto drop;
-		break;  		/* not reached */
+		ret = EACCES;
+		break; /* i.e. drop */
 
 	case IP_FW_DUMMYNET:
+		ret = EACCES;
 		if (ip_dn_io_ptr == NULL)
-			break;
+			break; /* i.e. drop */
 		if (mtod(*m0, struct ip *)->ip_v == 4)
-			ip_dn_io_ptr(m0, DN_TO_IP_OUT, &args);
+			ret = ip_dn_io_ptr(m0, dir, &args);
 		else if (mtod(*m0, struct ip *)->ip_v == 6)
-			ip_dn_io_ptr(m0, DN_TO_IP6_OUT, &args);
+			ret = ip_dn_io_ptr(m0, dir | PROTO_IPV6, &args);
+		else
+			break; /* drop it */
+		/*
+		 * XXX should read the return value.
+		 * dummynet normally eats the packet and sets *m0=NULL
+		 * unless the packet can be sent immediately. In this
+		 * case args is updated and we should re-run the
+		 * check without clearing args.
+		 */
 		if (*m0 != NULL)
 			goto again;
-		return 0;		/* packet consumed */
-
 		break;
 
 	case IP_FW_TEE:
-		tee = 1;
-		/* fall through */
-
 	case IP_FW_DIVERT:
-		divert = ipfw_divert(m0, DIV_DIR_OUT, tee);
-		if (divert) {
-			*m0 = NULL;
-			return 0;	/* packet consumed */
-		} else {
-			args.rule = NULL;
-			goto again;	/* continue with packet */
+		if (ip_divert_ptr == NULL) {
+			ret = EACCES;
+			break; /* i.e. drop */
 		}
+		ret = ipfw_divert(m0, dir, &args.rule,
+			(ipfw == IP_FW_TEE) ? 1 : 0);
+		/* continue processing for the original packet (tee). */
+		if (*m0)
+			goto again;
+		break;
 
 	case IP_FW_NGTEE:
-		if (!NG_IPFW_LOADED)
-			goto drop;
-		(void)ng_ipfw_input_p(m0, NG_IPFW_OUT, &args, 1);
-		goto again;		/* continue with packet */
-
 	case IP_FW_NETGRAPH:
-		if (!NG_IPFW_LOADED)
-			goto drop;
-		return ng_ipfw_input_p(m0, NG_IPFW_OUT, &args, 0);
+		if (!NG_IPFW_LOADED) {
+			ret = EACCES;
+			break; /* i.e. drop */
+		}
+		ret = ng_ipfw_input_p(m0, dir, &args,
+			(ipfw == IP_FW_NGTEE) ? 1 : 0);
+		if (ipfw == IP_FW_NGTEE) /* ignore errors for NGTEE */
+			goto again;	/* continue with packet */
+		break;
 
 	case IP_FW_NAT:
-		goto again;		/* continue with packet */
-		
 	case IP_FW_REASS:
-		goto again;	
+		goto again;		/* continue with packet */
 	
 	default:
 		KASSERT(0, ("%s: unknown retval", __func__));
 	}
 
-drop:
+	if (ret != 0) {
+		if (*m0)
+			FREE_PKT(*m0);
+		*m0 = NULL;
+	}
 	if (*m0)
-		m_freem(*m0);
-	*m0 = NULL;
-	return (EACCES);
-pass:
-	return 0;	/* not filtered */
+		SET_HOST_IPLEN(mtod(*m0, struct ip *));
+	return ret;
 }
 
+/* do the divert, return 1 on error 0 on success */
 static int
-ipfw_divert(struct mbuf **m, int incoming, int tee)
+ipfw_divert(struct mbuf **m0, int incoming, struct ipfw_rule_ref *rule,
+	int tee)
 {
 	/*
 	 * ipfw_chk() has already tagged the packet with the divert tag.
 	 * If tee is set, copy packet and return original.
 	 * If not tee, consume packet and send it to divert socket.
 	 */
-	struct mbuf *clone, *reass;
+	struct mbuf *clone;
 	struct ip *ip;
-	int hlen;
-
-	reass = NULL;
-
-	/* Is divert module loaded? */
-	if (ip_divert_ptr == NULL)
-		goto nodivert;
+	struct m_tag *tag;
 
 	/* Cloning needed for tee? */
-	if (tee)
-		clone = m_dup(*m, M_DONTWAIT);
-	else
-		clone = *m;
-
-	/* In case m_dup was unable to allocate mbufs. */
-	if (clone == NULL)
-		goto teeout;
+	if (tee == 0) {
+		clone = *m0;	/* use the original mbuf */
+		*m0 = NULL;
+	} else {
+		clone = m_dup(*m0, M_DONTWAIT);
+		/* If we cannot duplicate the mbuf, we sacrifice the divert
+		 * chain and continue with the tee-ed packet.
+		 */
+		if (clone == NULL)
+			return 1;
+	}
 
 	/*
-	 * Divert listeners can only handle non-fragmented packets.
-	 * However when tee is set we will *not* de-fragment the packets;
-	 * Doing do would put the reassembly into double-jeopardy.  On top
-	 * of that someone doing a tee will probably want to get the packet
-	 * in its original form.
+	 * Divert listeners can normally handle non-fragmented packets,
+	 * but we can only reass in the non-tee case.
+	 * This means that listeners on a tee rule may get fragments,
+	 * and have to live with that.
+	 * Note that we now have the 'reass' ipfw option so if we care
+	 * we can do it before a 'tee'.
 	 */
 	ip = mtod(clone, struct ip *);
-	if (!tee && ip->ip_off & (IP_MF | IP_OFFMASK)) {
-
-		/* Reassemble packet. */
-		reass = ip_reass(clone);
+	if (!tee && ntohs(ip->ip_off) & (IP_MF | IP_OFFMASK)) {
+		int hlen;
+		struct mbuf *reass;
 
+		SET_HOST_IPLEN(ip); /* ip_reass wants host order */
+		reass = ip_reass(clone); /* Reassemble packet. */
+		if (reass == NULL)
+			return 0; /* not an error */
+		/* if reass = NULL then it was consumed by ip_reass */
 		/*
 		 * IP header checksum fixup after reassembly and leave header
 		 * in network byte order.
 		 */
-		if (reass != NULL) {
-			ip = mtod(reass, struct ip *);
-			hlen = ip->ip_hl << 2;
-			ip->ip_len = htons(ip->ip_len);
-			ip->ip_off = htons(ip->ip_off);
-			ip->ip_sum = 0;
-			if (hlen == sizeof(struct ip))
-				ip->ip_sum = in_cksum_hdr(ip);
-			else
-				ip->ip_sum = in_cksum(reass, hlen);
-			clone = reass;
-		} else
-			clone = NULL;
-	} else {
-		/* Convert header to network byte order. */
-		ip->ip_len = htons(ip->ip_len);
-		ip->ip_off = htons(ip->ip_off);
+		ip = mtod(reass, struct ip *);
+		hlen = ip->ip_hl << 2;
+		SET_NET_IPLEN(ip);
+		ip->ip_sum = 0;
+		if (hlen == sizeof(struct ip))
+			ip->ip_sum = in_cksum_hdr(ip);
+		else
+			ip->ip_sum = in_cksum(reass, hlen);
+		clone = reass;
 	}
+	/* attach a tag to the packet with the reinject info */
+	tag = m_tag_alloc(MTAG_IPFW_RULE, 0,
+		    sizeof(struct ipfw_rule_ref), M_NOWAIT);
+	if (tag == NULL) {
+		FREE_PKT(clone);
+		return 1;
+	}
+	*((struct ipfw_rule_ref *)(tag+1)) = *rule;
+	m_tag_prepend(clone, tag);
 
 	/* Do the dirty job... */
-	if (clone && ip_divert_ptr != NULL)
-		ip_divert_ptr(clone, incoming);
-
-teeout:
-	/*
-	 * For tee we leave the divert tag attached to original packet.
-	 * It will then continue rule evaluation after the tee rule.
-	 */
-	if (tee)
-		return 0;
-
-	/* Packet diverted and consumed */
-	return 1;
-
-nodivert:
-	m_freem(*m);
-	return 1;
+	ip_divert_ptr(clone, incoming);
+	return 0;
 }
 
-int
-ipfw_hook(void)
+/*
+ * attach or detach hooks for a given protocol family
+ */
+static int
+ipfw_hook(int onoff, int pf)
 {
-	struct pfil_head *pfh_inet;
+	struct pfil_head *pfh;
 
-	pfh_inet = pfil_head_get(PFIL_TYPE_AF, AF_INET);
-	if (pfh_inet == NULL)
+	pfh = pfil_head_get(PFIL_TYPE_AF, pf);
+	if (pfh == NULL)
 		return ENOENT;
 
-	(void)pfil_add_hook(ipfw_check_in, NULL, PFIL_IN | PFIL_WAITOK,
-	    pfh_inet);
-	(void)pfil_add_hook(ipfw_check_out, NULL, PFIL_OUT | PFIL_WAITOK,
-	    pfh_inet);
+	(void) (onoff ? pfil_add_hook : pfil_remove_hook)
+	    (ipfw_check_hook, NULL, PFIL_IN | PFIL_OUT | PFIL_WAITOK, pfh);
 
 	return 0;
 }
 
 int
-ipfw_unhook(void)
+ipfw_attach_hooks(int arg)
 {
-	struct pfil_head *pfh_inet;
-
-	pfh_inet = pfil_head_get(PFIL_TYPE_AF, AF_INET);
-	if (pfh_inet == NULL)
-		return ENOENT;
-
-	(void)pfil_remove_hook(ipfw_check_in, NULL, PFIL_IN | PFIL_WAITOK,
-	    pfh_inet);
-	(void)pfil_remove_hook(ipfw_check_out, NULL, PFIL_OUT | PFIL_WAITOK,
-	    pfh_inet);
-
-	return 0;
-}
+	int error = 0;
 
+	if (arg == 0) /* detach */
+		ipfw_hook(0, AF_INET);
+        else if (V_fw_enable && ipfw_hook(1, AF_INET) != 0) {
+                error = ENOENT; /* see ip_fw_pfil.c::ipfw_hook() */
+                printf("ipfw_hook() error\n");
+        }
 #ifdef INET6
-int
-ipfw6_hook(void)
-{
-	struct pfil_head *pfh_inet6;
-
-	pfh_inet6 = pfil_head_get(PFIL_TYPE_AF, AF_INET6);
-	if (pfh_inet6 == NULL)
-		return ENOENT;
-
-	(void)pfil_add_hook(ipfw_check_in, NULL, PFIL_IN | PFIL_WAITOK,
-	    pfh_inet6);
-	(void)pfil_add_hook(ipfw_check_out, NULL, PFIL_OUT | PFIL_WAITOK,
-	    pfh_inet6);
-
-	return 0;
+	if (arg == 0) /* detach */
+		ipfw_hook(0, AF_INET6);
+        else if (V_fw6_enable && ipfw_hook(1, AF_INET6) != 0) {
+                error = ENOENT;
+                printf("ipfw6_hook() error\n");
+        }
+#endif
+	return error;
 }
 
-int
-ipfw6_unhook(void)
-{
-	struct pfil_head *pfh_inet6;
-
-	pfh_inet6 = pfil_head_get(PFIL_TYPE_AF, AF_INET6);
-	if (pfh_inet6 == NULL)
-		return ENOENT;
-
-	(void)pfil_remove_hook(ipfw_check_in, NULL, PFIL_IN | PFIL_WAITOK,
-	    pfh_inet6);
-	(void)pfil_remove_hook(ipfw_check_out, NULL, PFIL_OUT | PFIL_WAITOK,
-	    pfh_inet6);
-
-	return 0;
-}
-#endif /* INET6 */
-
 int
 ipfw_chg_hook(SYSCTL_HANDLER_ARGS)
 {
 	int enable;
 	int oldenable;
 	int error;
+	int af;
 
 	if (arg1 == &VNET_NAME(fw_enable)) {
 		enable = V_fw_enable;
+		af = AF_INET;
 	}
 #ifdef INET6
 	else if (arg1 == &VNET_NAME(fw6_enable)) {
 		enable = V_fw6_enable;
+		af = AF_INET6;
 	}
 #endif
 	else 
@@ -542,27 +394,16 @@ ipfw_chg_hook(SYSCTL_HANDLER_ARGS)
 	if (enable == oldenable)
 		return (0);
 
-	if (arg1 == &VNET_NAME(fw_enable)) {
-		if (enable)
-			error = ipfw_hook();
-		else
-			error = ipfw_unhook();
-		if (error)
-			return (error);
+	error = ipfw_hook(enable, af);
+	if (error)
+		return (error);
+	if (af == AF_INET)
 		V_fw_enable = enable;
-	}
 #ifdef INET6
-	else if (arg1 == &VNET_NAME(fw6_enable)) {
-		if (enable)
-			error = ipfw6_hook();
-		else
-			error = ipfw6_unhook();
-		if (error)
-			return (error);
+	else if (af == AF_INET6)
 		V_fw6_enable = enable;
-	}
 #endif
 
 	return (0);
 }
-
+/* end of file */
diff --git a/sys/netinet/ipfw/ip_fw_private.h b/sys/netinet/ipfw/ip_fw_private.h
new file mode 100644
index 00000000000..cfc07aab401
--- /dev/null
+++ b/sys/netinet/ipfw/ip_fw_private.h
@@ -0,0 +1,320 @@
+/*-
+ * Copyright (c) 2002-2009 Luigi Rizzo, Universita` di Pisa
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _IPFW2_PRIVATE_H
+#define _IPFW2_PRIVATE_H
+
+/*
+ * Internal constants and data structures used by ipfw components
+ * and not meant to be exported outside the kernel.
+ */
+
+#ifdef _KERNEL
+
+#define MTAG_IPFW	1148380143	/* IPFW-tagged cookie */
+#define MTAG_IPFW_RULE	1262273568	/* rule reference */
+
+/* Return values from ipfw_chk() */
+enum {
+	IP_FW_PASS = 0,
+	IP_FW_DENY,
+	IP_FW_DIVERT,
+	IP_FW_TEE,
+	IP_FW_DUMMYNET,
+	IP_FW_NETGRAPH,
+	IP_FW_NGTEE,
+	IP_FW_NAT,
+	IP_FW_REASS,
+};
+
+/*
+ * Structure for collecting parameters to dummynet for ip6_output forwarding
+ */
+struct _ip6dn_args {
+       struct ip6_pktopts *opt_or;
+       struct route_in6 ro_or;
+       int flags_or;
+       struct ip6_moptions *im6o_or;
+       struct ifnet *origifp_or;
+       struct ifnet *ifp_or;
+       struct sockaddr_in6 dst_or;
+       u_long mtu_or;
+       struct route_in6 ro_pmtu_or;
+};
+
+/*
+ * Reference to an ipfw rule that can be carried outside critical sections.
+ * A rule is identified by rulenum:rule_id which is ordered.
+ * In version chain_id the rule can be found in slot 'slot', so
+ * we don't need a lookup if chain_id == chain->id.
+ *
+ * On exit from the firewall this structure refers to the rule after
+ * the matching one (slot points to the new rule; rulenum:rule_id-1
+ * is the matching rule), and additional info (e.g. info often contains
+ * the insn argument or tablearg in the low 16 bits, in host format).
+ * On entry, the structure is valid if slot>0, and refers to the starting
+ * rules. 'info' contains the reason for reinject, e.g. divert port,
+ * divert direction, and so on.
+ */
+struct ipfw_rule_ref {
+	uint32_t	slot;		/* slot for matching rule	*/
+	uint32_t	rulenum;	/* matching rule number		*/
+	uint32_t	rule_id;	/* matching rule id		*/
+	uint32_t	chain_id;	/* ruleset id			*/
+	uint32_t	info;		/* see below			*/
+};
+
+enum {
+	IPFW_INFO_MASK	= 0x0000ffff,
+	IPFW_INFO_OUT	= 0x00000000,	/* outgoing, just for convenience */
+	IPFW_INFO_IN	= 0x80000000,	/* incoming, overloads dir */
+	IPFW_ONEPASS	= 0x40000000,	/* One-pass, do not reinject */
+	IPFW_IS_MASK	= 0x30000000,	/* which source ? */
+	IPFW_IS_DIVERT	= 0x20000000,
+	IPFW_IS_DUMMYNET =0x10000000,
+	IPFW_IS_PIPE	= 0x08000000,	/* pip1=1, queue = 0 */
+};
+
+/*
+ * Arguments for calling ipfw_chk() and dummynet_io(). We put them
+ * all into a structure because this way it is easier and more
+ * efficient to pass variables around and extend the interface.
+ */
+struct ip_fw_args {
+	struct mbuf	*m;		/* the mbuf chain		*/
+	struct ifnet	*oif;		/* output interface		*/
+	struct sockaddr_in *next_hop;	/* forward address		*/
+
+	/*
+	 * On return, it points to the matching rule.
+	 * On entry, rule.slot > 0 means the info is valid and
+	 * contains the the starting rule for an ipfw search.
+	 * If chain_id == chain->id && slot >0 then jump to that slot.
+	 * Otherwise, we locate the first rule >= rulenum:rule_id
+	 */
+	struct ipfw_rule_ref rule;	/* match/restart info		*/
+
+	struct ether_header *eh;	/* for bridged packets		*/
+
+	struct ipfw_flow_id f_id;	/* grabbed from IP header	*/
+	//uint32_t	cookie;		/* a cookie depending on rule action */
+	struct inpcb	*inp;
+
+	struct _ip6dn_args	dummypar; /* dummynet->ip6_output */
+	struct sockaddr_in hopstore;	/* store here if cannot use a pointer */
+};
+
+MALLOC_DECLARE(M_IPFW);
+
+/*
+ * Hooks sometime need to know the direction of the packet
+ * (divert, dummynet, netgraph, ...)
+ * We use a generic definition here, with bit0-1 indicating the
+ * direction, bit 2 indicating layer2 or 3, bit 3-4 indicating the
+ * specific protocol
+ * indicating the protocol (if necessary)
+ */
+enum {
+	DIR_MASK =	0x3,
+	DIR_OUT =	0,
+	DIR_IN =	1,
+	DIR_FWD =	2,
+	DIR_DROP =	3,
+	PROTO_LAYER2 =	0x4, /* set for layer 2 */
+	/* PROTO_DEFAULT = 0, */
+	PROTO_IPV4 =	0x08,
+	PROTO_IPV6 =	0x10,
+	PROTO_IFB =	0x0c, /* layer2 + ifbridge */
+   /*	PROTO_OLDBDG =	0x14, unused, old bridge */
+};
+
+/* wrapper for freeing a packet, in case we need to do more work */
+#define FREE_PKT(m)	m_freem(m)
+
+/*
+ * Function definitions.
+ */
+
+/* attach (arg = 1) or detach (arg = 0) hooks */
+int ipfw_attach_hooks(int);
+#ifdef NOTYET
+void ipfw_nat_destroy(void);
+#endif
+
+/* In ip_fw_log.c */
+struct ip;
+void ipfw_log_bpf(int);
+void ipfw_log(struct ip_fw *f, u_int hlen, struct ip_fw_args *args,
+	struct mbuf *m, struct ifnet *oif, u_short offset, uint32_t tablearg,
+	struct ip *ip);
+VNET_DECLARE(u_int64_t, norule_counter);
+#define	V_norule_counter	VNET(norule_counter)
+VNET_DECLARE(int, verbose_limit);
+#define	V_verbose_limit		VNET(verbose_limit)
+
+/* In ip_fw_dynamic.c */
+
+enum { /* result for matching dynamic rules */
+	MATCH_REVERSE = 0,
+	MATCH_FORWARD,
+	MATCH_NONE,
+	MATCH_UNKNOWN,
+};
+
+/*
+ * The lock for dynamic rules is only used once outside the file,
+ * and only to release the result of lookup_dyn_rule().
+ * Eventually we may implement it with a callback on the function.
+ */
+void ipfw_dyn_unlock(void);
+
+struct tcphdr;
+struct mbuf *ipfw_send_pkt(struct mbuf *, struct ipfw_flow_id *,
+    u_int32_t, u_int32_t, int);
+int ipfw_install_state(struct ip_fw *rule, ipfw_insn_limit *cmd,
+    struct ip_fw_args *args, uint32_t tablearg);
+ipfw_dyn_rule *ipfw_lookup_dyn_rule(struct ipfw_flow_id *pkt,
+	int *match_direction, struct tcphdr *tcp);
+void ipfw_remove_dyn_children(struct ip_fw *rule);
+void ipfw_get_dynamic(char **bp, const char *ep);
+
+void ipfw_dyn_attach(void);	/* uma_zcreate .... */
+void ipfw_dyn_detach(void);	/* uma_zdestroy ... */
+void ipfw_dyn_init(void);	/* per-vnet initialization */
+void ipfw_dyn_uninit(int);	/* per-vnet deinitialization */
+int ipfw_dyn_len(void);
+
+/* common variables */
+VNET_DECLARE(int, fw_one_pass);
+#define	V_fw_one_pass		VNET(fw_one_pass)
+
+VNET_DECLARE(int, fw_verbose);
+#define	V_fw_verbose		VNET(fw_verbose)
+
+VNET_DECLARE(struct ip_fw_chain, layer3_chain);
+#define	V_layer3_chain		VNET(layer3_chain)
+
+VNET_DECLARE(u_int32_t, set_disable);
+#define	V_set_disable		VNET(set_disable)
+
+VNET_DECLARE(int, autoinc_step);
+#define V_autoinc_step		VNET(autoinc_step)
+
+struct ip_fw_chain {
+	struct ip_fw	*rules;		/* list of rules */
+	struct ip_fw	*reap;		/* list of rules to reap */
+	struct ip_fw	*default_rule;
+	int		n_rules;	/* number of static rules */
+	int		static_len;	/* total len of static rules */
+	struct ip_fw    **map;	/* array of rule ptrs to ease lookup */
+	LIST_HEAD(nat_list, cfg_nat) nat;       /* list of nat entries */
+	struct radix_node_head *tables[IPFW_TABLES_MAX];
+	struct rwlock	rwmtx;
+	struct rwlock	uh_lock;	/* lock for upper half */
+	uint32_t	id;		/* ruleset id */
+};
+
+struct sockopt;	/* used by tcp_var.h */
+
+/*
+ * The lock is heavily used by ip_fw2.c (the main file) and ip_fw_nat.c
+ * so the variable and the macros must be here.
+ */
+
+#define	IPFW_LOCK_INIT(_chain) do {			\
+	rw_init(&(_chain)->rwmtx, "IPFW static rules");	\
+	rw_init(&(_chain)->uh_lock, "IPFW UH lock");	\
+	} while (0)
+
+#define	IPFW_LOCK_DESTROY(_chain) do {			\
+	rw_destroy(&(_chain)->rwmtx);			\
+	rw_destroy(&(_chain)->uh_lock);			\
+	} while (0)
+
+#define	IPFW_WLOCK_ASSERT(_chain)	rw_assert(&(_chain)->rwmtx, RA_WLOCKED)
+
+#define IPFW_RLOCK(p) rw_rlock(&(p)->rwmtx)
+#define IPFW_RUNLOCK(p) rw_runlock(&(p)->rwmtx)
+#define IPFW_WLOCK(p) rw_wlock(&(p)->rwmtx)
+#define IPFW_WUNLOCK(p) rw_wunlock(&(p)->rwmtx)
+
+#define IPFW_UH_RLOCK(p) rw_rlock(&(p)->uh_lock)
+#define IPFW_UH_RUNLOCK(p) rw_runlock(&(p)->uh_lock)
+#define IPFW_UH_WLOCK(p) rw_wlock(&(p)->uh_lock)
+#define IPFW_UH_WUNLOCK(p) rw_wunlock(&(p)->uh_lock)
+
+/* In ip_fw_sockopt.c */
+int ipfw_find_rule(struct ip_fw_chain *chain, uint32_t key, uint32_t id);
+int ipfw_add_rule(struct ip_fw_chain *chain, struct ip_fw *input_rule);
+int ipfw_ctl(struct sockopt *sopt);
+int ipfw_chk(struct ip_fw_args *args);
+void ipfw_reap_rules(struct ip_fw *head);
+
+/* In ip_fw_table.c */
+struct radix_node;
+int ipfw_lookup_table(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
+    uint32_t *val);
+int ipfw_init_tables(struct ip_fw_chain *ch);
+int ipfw_flush_table(struct ip_fw_chain *ch, uint16_t tbl);
+void ipfw_flush_tables(struct ip_fw_chain *ch);
+int ipfw_add_table_entry(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
+    uint8_t mlen, uint32_t value);
+int ipfw_dump_table_entry(struct radix_node *rn, void *arg);
+int ipfw_del_table_entry(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
+    uint8_t mlen);
+int ipfw_count_table(struct ip_fw_chain *ch, uint32_t tbl, uint32_t *cnt);
+int ipfw_dump_table(struct ip_fw_chain *ch, ipfw_table *tbl);
+
+/* hooks for divert */
+extern void (*ip_divert_ptr)(struct mbuf *m, int incoming);
+
+/* In ip_fw_nat.c */
+
+extern struct cfg_nat *(*lookup_nat_ptr)(struct nat_list *, int);
+
+typedef int ipfw_nat_t(struct ip_fw_args *, struct cfg_nat *, struct mbuf *);
+typedef int ipfw_nat_cfg_t(struct sockopt *);
+
+extern ipfw_nat_t *ipfw_nat_ptr;
+#define IPFW_NAT_LOADED (ipfw_nat_ptr != NULL)
+
+extern ipfw_nat_cfg_t *ipfw_nat_cfg_ptr;
+extern ipfw_nat_cfg_t *ipfw_nat_del_ptr;
+extern ipfw_nat_cfg_t *ipfw_nat_get_cfg_ptr;
+extern ipfw_nat_cfg_t *ipfw_nat_get_log_ptr;
+
+/* netgraph prototypes */
+
+typedef int ng_ipfw_input_t(struct mbuf **, int, struct ip_fw_args *, int);
+extern  ng_ipfw_input_t *ng_ipfw_input_p;
+#define NG_IPFW_LOADED  (ng_ipfw_input_p != NULL)
+
+#define TAGSIZ  (sizeof(struct ng_ipfw_tag) - sizeof(struct m_tag))
+
+
+#endif /* _KERNEL */
+#endif /* _IPFW2_PRIVATE_H */
diff --git a/sys/netinet/ipfw/ip_fw_sockopt.c b/sys/netinet/ipfw/ip_fw_sockopt.c
new file mode 100644
index 00000000000..10dd8612887
--- /dev/null
+++ b/sys/netinet/ipfw/ip_fw_sockopt.c
@@ -0,0 +1,1086 @@
+/*-
+ * Copyright (c) 2002-2009 Luigi Rizzo, Universita` di Pisa
+ *
+ * Supported by: Valeria Paoli
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+/*
+ * Sockopt support for ipfw. The routines here implement
+ * the upper half of the ipfw code.
+ */
+
+#if !defined(KLD_MODULE)
+#include "opt_ipfw.h"
+#include "opt_ipdivert.h"
+#include "opt_ipdn.h"
+#include "opt_inet.h"
+#ifndef INET
+#error IPFIREWALL requires INET.
+#endif /* INET */
+#endif
+#include "opt_inet6.h"
+#include "opt_ipsec.h"
+
+#include 
+#include 
+#include 
+#include 	/* struct m_tag used by nested headers */
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#ifdef MAC
+#include 
+#endif
+
+MALLOC_DEFINE(M_IPFW, "IpFw/IpAcct", "IpFw/IpAcct chain's");
+
+/*
+ * static variables followed by global ones (none in this file)
+ */
+
+/*
+ * Find the smallest rule >= key, id.
+ * We could use bsearch but it is so simple that we code it directly
+ */
+int
+ipfw_find_rule(struct ip_fw_chain *chain, uint32_t key, uint32_t id)
+{
+	int i, lo, hi;
+	struct ip_fw *r;
+
+  	for (lo = 0, hi = chain->n_rules - 1; lo < hi;) {
+		i = (lo + hi) / 2;
+		r = chain->map[i];
+		if (r->rulenum < key)
+			lo = i + 1;	/* continue from the next one */
+		else if (r->rulenum > key)
+			hi = i;		/* this might be good */
+		else if (r->id < id)
+			lo = i + 1;	/* continue from the next one */
+		else /* r->id >= id */
+			hi = i;		/* this might be good */
+	};
+	return hi;
+}
+
+/*
+ * allocate a new map, returns the chain locked. extra is the number
+ * of entries to add or delete.
+ */
+static struct ip_fw **
+get_map(struct ip_fw_chain *chain, int extra, int locked)
+{
+
+	for (;;) {
+		struct ip_fw **map;
+		int i;
+
+		i = chain->n_rules + extra;
+		map = malloc(i * sizeof(struct ip_fw *), M_IPFW, M_WAITOK);
+		if (map == NULL) {
+			printf("%s: cannot allocate map\n", __FUNCTION__);
+			return NULL;
+		}
+		if (!locked)
+			IPFW_UH_WLOCK(chain);
+		if (i >= chain->n_rules + extra) /* good */
+			return map;
+		/* otherwise we lost the race, free and retry */
+		if (!locked)
+			IPFW_UH_WUNLOCK(chain);
+		free(map, M_IPFW);
+	}
+}
+
+/*
+ * swap the maps. It is supposed to be called with IPFW_UH_WLOCK
+ */
+static struct ip_fw **
+swap_map(struct ip_fw_chain *chain, struct ip_fw **new_map, int new_len)
+{
+	struct ip_fw **old_map;
+
+	IPFW_WLOCK(chain);
+	chain->id++;
+	chain->n_rules = new_len;
+	old_map = chain->map;
+	chain->map = new_map;
+	IPFW_WUNLOCK(chain);
+	return old_map;
+}
+
+/*
+ * Add a new rule to the list. Copy the rule into a malloc'ed area, then
+ * possibly create a rule number and add the rule to the list.
+ * Update the rule_number in the input struct so the caller knows it as well.
+ * XXX DO NOT USE FOR THE DEFAULT RULE.
+ * Must be called without IPFW_UH held
+ */
+int
+ipfw_add_rule(struct ip_fw_chain *chain, struct ip_fw *input_rule)
+{
+	struct ip_fw *rule;
+	int i, l, insert_before;
+	struct ip_fw **map;	/* the new array of pointers */
+
+	if (chain->rules == NULL || input_rule->rulenum > IPFW_DEFAULT_RULE-1)
+		return (EINVAL);
+
+	l = RULESIZE(input_rule);
+	rule = malloc(l, M_IPFW, M_WAITOK | M_ZERO);
+	if (rule == NULL)
+		return (ENOSPC);
+	/* get_map returns with IPFW_UH_WLOCK if successful */
+	map = get_map(chain, 1, 0 /* not locked */);
+	if (map == NULL) {
+		free(rule, M_IPFW);
+		return ENOSPC;
+	}
+
+	bcopy(input_rule, rule, l);
+	/* clear fields not settable from userland */
+	rule->x_next = NULL;
+	rule->next_rule = NULL;
+	rule->pcnt = 0;
+	rule->bcnt = 0;
+	rule->timestamp = 0;
+
+	if (V_autoinc_step < 1)
+		V_autoinc_step = 1;
+	else if (V_autoinc_step > 1000)
+		V_autoinc_step = 1000;
+	/* find the insertion point, we will insert before */
+	insert_before = rule->rulenum ? rule->rulenum + 1 : IPFW_DEFAULT_RULE;
+	i = ipfw_find_rule(chain, insert_before, 0);
+	/* duplicate first part */
+	if (i > 0)
+		bcopy(chain->map, map, i * sizeof(struct ip_fw *));
+	map[i] = rule;
+	/* duplicate remaining part, we always have the default rule */
+	bcopy(chain->map + i, map + i + 1,
+		sizeof(struct ip_fw *) *(chain->n_rules - i));
+	if (rule->rulenum == 0) {
+		/* write back the number */
+		rule->rulenum = i > 0 ? map[i-1]->rulenum : 0;
+		if (rule->rulenum < IPFW_DEFAULT_RULE - V_autoinc_step)
+			rule->rulenum += V_autoinc_step;
+		input_rule->rulenum = rule->rulenum;
+	}
+
+	rule->id = chain->id + 1;
+	map = swap_map(chain, map, chain->n_rules + 1);
+	chain->static_len += l;
+	IPFW_UH_WUNLOCK(chain);
+	if (map)
+		free(map, M_IPFW);
+	return (0);
+}
+
+/*
+ * Reclaim storage associated with a list of rules.  This is
+ * typically the list created using remove_rule.
+ * A NULL pointer on input is handled correctly.
+ */
+void
+ipfw_reap_rules(struct ip_fw *head)
+{
+	struct ip_fw *rule;
+
+	while ((rule = head) != NULL) {
+		head = head->x_next;
+		free(rule, M_IPFW);
+	}
+}
+
+/**
+ * Remove all rules with given number, and also do set manipulation.
+ * Assumes chain != NULL && *chain != NULL.
+ *
+ * The argument is an u_int32_t. The low 16 bit are the rule or set number,
+ * the next 8 bits are the new set, the top 8 bits are the command:
+ *
+ *	0	delete rules with given number
+ *	1	delete rules with given set number
+ *	2	move rules with given number to new set
+ *	3	move rules with given set number to new set
+ *	4	swap sets with given numbers
+ *	5	delete rules with given number and with given set number
+ */
+static int
+del_entry(struct ip_fw_chain *chain, u_int32_t arg)
+{
+	struct ip_fw *rule;
+	uint32_t rulenum;	/* rule or old_set */
+	uint8_t cmd, new_set;
+	int start, end = 0, i, ofs, n;
+	struct ip_fw **map = NULL;
+	int error = 0;
+
+	rulenum = arg & 0xffff;
+	cmd = (arg >> 24) & 0xff;
+	new_set = (arg >> 16) & 0xff;
+
+	if (cmd > 5 || new_set > RESVD_SET)
+		return EINVAL;
+	if (cmd == 0 || cmd == 2 || cmd == 5) {
+		if (rulenum >= IPFW_DEFAULT_RULE)
+			return EINVAL;
+	} else {
+		if (rulenum > RESVD_SET)	/* old_set */
+			return EINVAL;
+	}
+
+	IPFW_UH_WLOCK(chain); /* prevent conflicts among the writers */
+	chain->reap = NULL;	/* prepare for deletions */
+
+	switch (cmd) {
+	case 0:	/* delete rules with given number (0 is special means all) */
+	case 1:	/* delete all rules with given set number, rule->set == rulenum */
+	case 5: /* delete rules with given number and with given set number.
+		 * rulenum - given rule number;
+		 * new_set - given set number.
+		 */
+		/* locate first rule to delete (start), the one after the
+		 * last one (end), and count how many rules to delete (n)
+		 */
+		n = 0;
+		if (cmd == 1) { /* look for a specific set, must scan all */
+			for (start = -1, i = 0; i < chain->n_rules; i++) {
+				if (chain->map[start]->set != rulenum)
+					continue;
+				if (start < 0)
+					start = i;
+				end = i;
+				n++;
+			}
+			end++;	/* first non-matching */
+		} else {
+			start = ipfw_find_rule(chain, rulenum, 0);
+			for (end = start; end < chain->n_rules; end++) {
+				rule = chain->map[end];
+				if (rulenum > 0 && rule->rulenum != rulenum)
+					break;
+				if (rule->set != RESVD_SET &&
+				    (cmd == 0 || rule->set == new_set) )
+					n++;
+			}
+		}
+		if (n == 0 && arg == 0)
+			break; /* special case, flush on empty ruleset */
+		/* allocate the map, if needed */
+		if (n > 0)
+			map = get_map(chain, -n, 1 /* locked */);
+		if (n == 0 || map == NULL) {
+			error = EINVAL;
+			break;
+		}
+		/* copy the initial part of the map */
+		if (start > 0)
+			bcopy(chain->map, map, start * sizeof(struct ip_fw *));
+		/* copy active rules between start and end */
+		for (i = ofs = start; i < end; i++) {
+			rule = chain->map[i];
+			if (!(rule->set != RESVD_SET &&
+			    (cmd == 0 || rule->set == new_set) ))
+				map[ofs++] = chain->map[i];
+		}
+		/* finally the tail */
+		bcopy(chain->map + end, map + ofs,
+			(chain->n_rules - end) * sizeof(struct ip_fw *));
+		map = swap_map(chain, map, chain->n_rules - n);
+		/* now remove the rules deleted */
+		for (i = start; i < end; i++) {
+			rule = map[i];
+			if (rule->set != RESVD_SET &&
+			    (cmd == 0 || rule->set == new_set) ) {
+				int l = RULESIZE(rule);
+
+				chain->static_len -= l;
+				ipfw_remove_dyn_children(rule);
+				rule->x_next = chain->reap;
+				chain->reap = rule;
+			}
+		}
+		break;
+
+	case 2:	/* move rules with given number to new set */
+		IPFW_UH_WLOCK(chain);
+		for (i = 0; i < chain->n_rules; i++) {
+			rule = chain->map[i];
+			if (rule->rulenum == rulenum)
+				rule->set = new_set;
+		}
+		IPFW_UH_WUNLOCK(chain);
+		break;
+
+	case 3: /* move rules with given set number to new set */
+		IPFW_UH_WLOCK(chain);
+		for (i = 0; i < chain->n_rules; i++) {
+			rule = chain->map[i];
+			if (rule->set == rulenum)
+				rule->set = new_set;
+		}
+		IPFW_UH_WUNLOCK(chain);
+		break;
+
+	case 4: /* swap two sets */
+		IPFW_UH_WLOCK(chain);
+		for (i = 0; i < chain->n_rules; i++) {
+			rule = chain->map[i];
+			if (rule->set == rulenum)
+				rule->set = new_set;
+			else if (rule->set == new_set)
+				rule->set = rulenum;
+		}
+		IPFW_UH_WUNLOCK(chain);
+		break;
+	}
+	rule = chain->reap;
+	chain->reap = NULL;
+	IPFW_UH_WUNLOCK(chain);
+	ipfw_reap_rules(rule);
+	if (map)
+		free(map, M_IPFW);
+	return error;
+}
+
+/*
+ * Clear counters for a specific rule.
+ * Normally run under IPFW_UH_RLOCK, but these are idempotent ops
+ * so we only care that rules do not disappear.
+ */
+static void
+clear_counters(struct ip_fw *rule, int log_only)
+{
+	ipfw_insn_log *l = (ipfw_insn_log *)ACTION_PTR(rule);
+
+	if (log_only == 0) {
+		rule->bcnt = rule->pcnt = 0;
+		rule->timestamp = 0;
+	}
+	if (l->o.opcode == O_LOG)
+		l->log_left = l->max_log;
+}
+
+/**
+ * Reset some or all counters on firewall rules.
+ * The argument `arg' is an u_int32_t. The low 16 bit are the rule number,
+ * the next 8 bits are the set number, the top 8 bits are the command:
+ *	0	work with rules from all set's;
+ *	1	work with rules only from specified set.
+ * Specified rule number is zero if we want to clear all entries.
+ * log_only is 1 if we only want to reset logs, zero otherwise.
+ */
+static int
+zero_entry(struct ip_fw_chain *chain, u_int32_t arg, int log_only)
+{
+	struct ip_fw *rule;
+	char *msg;
+	int i;
+
+	uint16_t rulenum = arg & 0xffff;
+	uint8_t set = (arg >> 16) & 0xff;
+	uint8_t cmd = (arg >> 24) & 0xff;
+
+	if (cmd > 1)
+		return (EINVAL);
+	if (cmd == 1 && set > RESVD_SET)
+		return (EINVAL);
+
+	IPFW_UH_RLOCK(chain);
+	if (rulenum == 0) {
+		V_norule_counter = 0;
+		for (i = 0; i < chain->n_rules; i++) {
+			rule = chain->map[i];
+			/* Skip rules not in our set. */
+			if (cmd == 1 && rule->set != set)
+				continue;
+			clear_counters(rule, log_only);
+		}
+		msg = log_only ? "All logging counts reset" :
+		    "Accounting cleared";
+	} else {
+		int cleared = 0;
+		for (i = 0; i < chain->n_rules; i++) {
+			rule = chain->map[i];
+			if (rule->rulenum == rulenum) {
+				if (cmd == 0 || rule->set == set)
+					clear_counters(rule, log_only);
+				cleared = 1;
+			}
+			if (rule->rulenum > rulenum)
+				break;
+		}
+		if (!cleared) {	/* we did not find any matching rules */
+			IPFW_WUNLOCK(chain);
+			return (EINVAL);
+		}
+		msg = log_only ? "logging count reset" : "cleared";
+	}
+	IPFW_UH_RUNLOCK(chain);
+
+	if (V_fw_verbose) {
+		int lev = LOG_SECURITY | LOG_NOTICE;
+
+		if (rulenum)
+			log(lev, "ipfw: Entry %d %s.\n", rulenum, msg);
+		else
+			log(lev, "ipfw: %s.\n", msg);
+	}
+	return (0);
+}
+
+/*
+ * Check validity of the structure before insert.
+ * Rules are simple, so this mostly need to check rule sizes.
+ */
+static int
+check_ipfw_struct(struct ip_fw *rule, int size)
+{
+	int l, cmdlen = 0;
+	int have_action=0;
+	ipfw_insn *cmd;
+
+	if (size < sizeof(*rule)) {
+		printf("ipfw: rule too short\n");
+		return (EINVAL);
+	}
+	/* first, check for valid size */
+	l = RULESIZE(rule);
+	if (l != size) {
+		printf("ipfw: size mismatch (have %d want %d)\n", size, l);
+		return (EINVAL);
+	}
+	if (rule->act_ofs >= rule->cmd_len) {
+		printf("ipfw: bogus action offset (%u > %u)\n",
+		    rule->act_ofs, rule->cmd_len - 1);
+		return (EINVAL);
+	}
+	/*
+	 * Now go for the individual checks. Very simple ones, basically only
+	 * instruction sizes.
+	 */
+	for (l = rule->cmd_len, cmd = rule->cmd ;
+			l > 0 ; l -= cmdlen, cmd += cmdlen) {
+		cmdlen = F_LEN(cmd);
+		if (cmdlen > l) {
+			printf("ipfw: opcode %d size truncated\n",
+			    cmd->opcode);
+			return EINVAL;
+		}
+		switch (cmd->opcode) {
+		case O_PROBE_STATE:
+		case O_KEEP_STATE:
+		case O_PROTO:
+		case O_IP_SRC_ME:
+		case O_IP_DST_ME:
+		case O_LAYER2:
+		case O_IN:
+		case O_FRAG:
+		case O_DIVERTED:
+		case O_IPOPT:
+		case O_IPTOS:
+		case O_IPPRECEDENCE:
+		case O_IPVER:
+		case O_TCPWIN:
+		case O_TCPFLAGS:
+		case O_TCPOPTS:
+		case O_ESTAB:
+		case O_VERREVPATH:
+		case O_VERSRCREACH:
+		case O_ANTISPOOF:
+		case O_IPSEC:
+#ifdef INET6
+		case O_IP6_SRC_ME:
+		case O_IP6_DST_ME:
+		case O_EXT_HDR:
+		case O_IP6:
+#endif
+		case O_IP4:
+		case O_TAG:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn))
+				goto bad_size;
+			break;
+
+		case O_FIB:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn))
+				goto bad_size;
+			if (cmd->arg1 >= rt_numfibs) {
+				printf("ipfw: invalid fib number %d\n",
+					cmd->arg1);
+				return EINVAL;
+			}
+			break;
+
+		case O_SETFIB:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn))
+				goto bad_size;
+			if (cmd->arg1 >= rt_numfibs) {
+				printf("ipfw: invalid fib number %d\n",
+					cmd->arg1);
+				return EINVAL;
+			}
+			goto check_action;
+
+		case O_UID:
+		case O_GID:
+		case O_JAIL:
+		case O_IP_SRC:
+		case O_IP_DST:
+		case O_TCPSEQ:
+		case O_TCPACK:
+		case O_PROB:
+		case O_ICMPTYPE:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn_u32))
+				goto bad_size;
+			break;
+
+		case O_LIMIT:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn_limit))
+				goto bad_size;
+			break;
+
+		case O_LOG:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn_log))
+				goto bad_size;
+
+			((ipfw_insn_log *)cmd)->log_left =
+			    ((ipfw_insn_log *)cmd)->max_log;
+
+			break;
+
+		case O_IP_SRC_MASK:
+		case O_IP_DST_MASK:
+			/* only odd command lengths */
+			if ( !(cmdlen & 1) || cmdlen > 31)
+				goto bad_size;
+			break;
+
+		case O_IP_SRC_SET:
+		case O_IP_DST_SET:
+			if (cmd->arg1 == 0 || cmd->arg1 > 256) {
+				printf("ipfw: invalid set size %d\n",
+					cmd->arg1);
+				return EINVAL;
+			}
+			if (cmdlen != F_INSN_SIZE(ipfw_insn_u32) +
+			    (cmd->arg1+31)/32 )
+				goto bad_size;
+			break;
+
+		case O_IP_SRC_LOOKUP:
+		case O_IP_DST_LOOKUP:
+			if (cmd->arg1 >= IPFW_TABLES_MAX) {
+				printf("ipfw: invalid table number %d\n",
+				    cmd->arg1);
+				return (EINVAL);
+			}
+			if (cmdlen != F_INSN_SIZE(ipfw_insn) &&
+			    cmdlen != F_INSN_SIZE(ipfw_insn_u32) + 1 &&
+			    cmdlen != F_INSN_SIZE(ipfw_insn_u32))
+				goto bad_size;
+			break;
+
+		case O_MACADDR2:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn_mac))
+				goto bad_size;
+			break;
+
+		case O_NOP:
+		case O_IPID:
+		case O_IPTTL:
+		case O_IPLEN:
+		case O_TCPDATALEN:
+		case O_TAGGED:
+			if (cmdlen < 1 || cmdlen > 31)
+				goto bad_size;
+			break;
+
+		case O_MAC_TYPE:
+		case O_IP_SRCPORT:
+		case O_IP_DSTPORT: /* XXX artificial limit, 30 port pairs */
+			if (cmdlen < 2 || cmdlen > 31)
+				goto bad_size;
+			break;
+
+		case O_RECV:
+		case O_XMIT:
+		case O_VIA:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn_if))
+				goto bad_size;
+			break;
+
+		case O_ALTQ:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn_altq))
+				goto bad_size;
+			break;
+
+		case O_PIPE:
+		case O_QUEUE:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn))
+				goto bad_size;
+			goto check_action;
+
+		case O_FORWARD_IP:
+#ifdef	IPFIREWALL_FORWARD
+			if (cmdlen != F_INSN_SIZE(ipfw_insn_sa))
+				goto bad_size;
+			goto check_action;
+#else
+			return EINVAL;
+#endif
+
+		case O_DIVERT:
+		case O_TEE:
+			if (ip_divert_ptr == NULL)
+				return EINVAL;
+			else
+				goto check_size;
+		case O_NETGRAPH:
+		case O_NGTEE:
+			if (!NG_IPFW_LOADED)
+				return EINVAL;
+			else
+				goto check_size;
+		case O_NAT:
+			if (!IPFW_NAT_LOADED)
+				return EINVAL;
+			if (cmdlen != F_INSN_SIZE(ipfw_insn_nat))
+ 				goto bad_size;		
+ 			goto check_action;
+		case O_FORWARD_MAC: /* XXX not implemented yet */
+		case O_CHECK_STATE:
+		case O_COUNT:
+		case O_ACCEPT:
+		case O_DENY:
+		case O_REJECT:
+#ifdef INET6
+		case O_UNREACH6:
+#endif
+		case O_SKIPTO:
+		case O_REASS:
+check_size:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn))
+				goto bad_size;
+check_action:
+			if (have_action) {
+				printf("ipfw: opcode %d, multiple actions"
+					" not allowed\n",
+					cmd->opcode);
+				return EINVAL;
+			}
+			have_action = 1;
+			if (l != cmdlen) {
+				printf("ipfw: opcode %d, action must be"
+					" last opcode\n",
+					cmd->opcode);
+				return EINVAL;
+			}
+			break;
+#ifdef INET6
+		case O_IP6_SRC:
+		case O_IP6_DST:
+			if (cmdlen != F_INSN_SIZE(struct in6_addr) +
+			    F_INSN_SIZE(ipfw_insn))
+				goto bad_size;
+			break;
+
+		case O_FLOW6ID:
+			if (cmdlen != F_INSN_SIZE(ipfw_insn_u32) +
+			    ((ipfw_insn_u32 *)cmd)->o.arg1)
+				goto bad_size;
+			break;
+
+		case O_IP6_SRC_MASK:
+		case O_IP6_DST_MASK:
+			if ( !(cmdlen & 1) || cmdlen > 127)
+				goto bad_size;
+			break;
+		case O_ICMP6TYPE:
+			if( cmdlen != F_INSN_SIZE( ipfw_insn_icmp6 ) )
+				goto bad_size;
+			break;
+#endif
+
+		default:
+			switch (cmd->opcode) {
+#ifndef INET6
+			case O_IP6_SRC_ME:
+			case O_IP6_DST_ME:
+			case O_EXT_HDR:
+			case O_IP6:
+			case O_UNREACH6:
+			case O_IP6_SRC:
+			case O_IP6_DST:
+			case O_FLOW6ID:
+			case O_IP6_SRC_MASK:
+			case O_IP6_DST_MASK:
+			case O_ICMP6TYPE:
+				printf("ipfw: no IPv6 support in kernel\n");
+				return EPROTONOSUPPORT;
+#endif
+			default:
+				printf("ipfw: opcode %d, unknown opcode\n",
+					cmd->opcode);
+				return EINVAL;
+			}
+		}
+	}
+	if (have_action == 0) {
+		printf("ipfw: missing action\n");
+		return EINVAL;
+	}
+	return 0;
+
+bad_size:
+	printf("ipfw: opcode %d size %d wrong\n",
+		cmd->opcode, cmdlen);
+	return EINVAL;
+}
+
+/*
+ * Copy the static and dynamic rules to the supplied buffer
+ * and return the amount of space actually used.
+ * Must be run under IPFW_UH_RLOCK
+ */
+static size_t
+ipfw_getrules(struct ip_fw_chain *chain, void *buf, size_t space)
+{
+	char *bp = buf;
+	char *ep = bp + space;
+	struct ip_fw *rule, *dst;
+	int l, i;
+	time_t	boot_seconds;
+
+        boot_seconds = boottime.tv_sec;
+	for (i = 0; i < chain->n_rules; i++) {
+		rule = chain->map[i];
+		l = RULESIZE(rule);
+		if (bp + l > ep) { /* should not happen */
+			printf("overflow dumping static rules\n");
+			break;
+		}
+		dst = (struct ip_fw *)bp;
+		bcopy(rule, dst, l);
+		/*
+		 * XXX HACK. Store the disable mask in the "next"
+		 * pointer in a wild attempt to keep the ABI the same.
+		 * Why do we do this on EVERY rule?
+		 */
+		bcopy(&V_set_disable, &dst->next_rule, sizeof(V_set_disable));
+		if (dst->timestamp)
+			dst->timestamp += boot_seconds;
+		bp += l;
+	}
+	ipfw_get_dynamic(&bp, ep); /* protected by the dynamic lock */
+	return (bp - (char *)buf);
+}
+
+
+/**
+ * {set|get}sockopt parser.
+ */
+int
+ipfw_ctl(struct sockopt *sopt)
+{
+#define	RULE_MAXSIZE	(256*sizeof(u_int32_t))
+	int error;
+	size_t size;
+	struct ip_fw *buf, *rule;
+	struct ip_fw_chain *chain;
+	u_int32_t rulenum[2];
+
+	error = priv_check(sopt->sopt_td, PRIV_NETINET_IPFW);
+	if (error)
+		return (error);
+
+	/*
+	 * Disallow modifications in really-really secure mode, but still allow
+	 * the logging counters to be reset.
+	 */
+	if (sopt->sopt_name == IP_FW_ADD ||
+	    (sopt->sopt_dir == SOPT_SET && sopt->sopt_name != IP_FW_RESETLOG)) {
+		error = securelevel_ge(sopt->sopt_td->td_ucred, 3);
+		if (error)
+			return (error);
+	}
+
+	chain = &V_layer3_chain;
+	error = 0;
+
+	switch (sopt->sopt_name) {
+	case IP_FW_GET:
+		/*
+		 * pass up a copy of the current rules. Static rules
+		 * come first (the last of which has number IPFW_DEFAULT_RULE),
+		 * followed by a possibly empty list of dynamic rule.
+		 * The last dynamic rule has NULL in the "next" field.
+		 *
+		 * Note that the calculated size is used to bound the
+		 * amount of data returned to the user.  The rule set may
+		 * change between calculating the size and returning the
+		 * data in which case we'll just return what fits.
+		 */
+		for (;;) {
+			int len = 0, want;
+
+			size = chain->static_len;
+			size += ipfw_dyn_len();
+			if (size >= sopt->sopt_valsize)
+				break;
+			buf = malloc(size, M_TEMP, M_WAITOK);
+			if (buf == NULL)
+				break;
+			IPFW_UH_RLOCK(chain);
+			/* check again how much space we need */
+			want = chain->static_len + ipfw_dyn_len();
+			if (size >= want)
+				len = ipfw_getrules(chain, buf, size);
+			IPFW_UH_RUNLOCK(chain);
+			if (size >= want)
+				error = sooptcopyout(sopt, buf, len);
+			free(buf, M_TEMP);
+			if (size >= want)
+				break;
+		}
+		break;
+
+	case IP_FW_FLUSH:
+		/* locking is done within del_entry() */
+		error = del_entry(chain, 0); /* special case, rule=0, cmd=0 means all */
+		break;
+
+	case IP_FW_ADD:
+		rule = malloc(RULE_MAXSIZE, M_TEMP, M_WAITOK);
+		error = sooptcopyin(sopt, rule, RULE_MAXSIZE,
+			sizeof(struct ip_fw) );
+		if (error == 0)
+			error = check_ipfw_struct(rule, sopt->sopt_valsize);
+		if (error == 0) {
+			/* locking is done within ipfw_add_rule() */
+			error = ipfw_add_rule(chain, rule);
+			size = RULESIZE(rule);
+			if (!error && sopt->sopt_dir == SOPT_GET)
+				error = sooptcopyout(sopt, rule, size);
+		}
+		free(rule, M_TEMP);
+		break;
+
+	case IP_FW_DEL:
+		/*
+		 * IP_FW_DEL is used for deleting single rules or sets,
+		 * and (ab)used to atomically manipulate sets. Argument size
+		 * is used to distinguish between the two:
+		 *    sizeof(u_int32_t)
+		 *	delete single rule or set of rules,
+		 *	or reassign rules (or sets) to a different set.
+		 *    2*sizeof(u_int32_t)
+		 *	atomic disable/enable sets.
+		 *	first u_int32_t contains sets to be disabled,
+		 *	second u_int32_t contains sets to be enabled.
+		 */
+		error = sooptcopyin(sopt, rulenum,
+			2*sizeof(u_int32_t), sizeof(u_int32_t));
+		if (error)
+			break;
+		size = sopt->sopt_valsize;
+		if (size == sizeof(u_int32_t) && rulenum[0] != 0) {
+			/* delete or reassign, locking done in del_entry() */
+			error = del_entry(chain, rulenum[0]);
+		} else if (size == 2*sizeof(u_int32_t)) { /* set enable/disable */
+			IPFW_UH_WLOCK(chain);
+			V_set_disable =
+			    (V_set_disable | rulenum[0]) & ~rulenum[1] &
+			    ~(1<sopt_val != 0) {
+		    error = sooptcopyin(sopt, rulenum,
+			    sizeof(u_int32_t), sizeof(u_int32_t));
+		    if (error)
+			break;
+		}
+		error = zero_entry(chain, rulenum[0],
+			sopt->sopt_name == IP_FW_RESETLOG);
+		break;
+
+	/*--- TABLE manipulations are protected by the IPFW_LOCK ---*/
+	case IP_FW_TABLE_ADD:
+		{
+			ipfw_table_entry ent;
+
+			error = sooptcopyin(sopt, &ent,
+			    sizeof(ent), sizeof(ent));
+			if (error)
+				break;
+			error = ipfw_add_table_entry(chain, ent.tbl,
+			    ent.addr, ent.masklen, ent.value);
+		}
+		break;
+
+	case IP_FW_TABLE_DEL:
+		{
+			ipfw_table_entry ent;
+
+			error = sooptcopyin(sopt, &ent,
+			    sizeof(ent), sizeof(ent));
+			if (error)
+				break;
+			error = ipfw_del_table_entry(chain, ent.tbl,
+			    ent.addr, ent.masklen);
+		}
+		break;
+
+	case IP_FW_TABLE_FLUSH:
+		{
+			u_int16_t tbl;
+
+			error = sooptcopyin(sopt, &tbl,
+			    sizeof(tbl), sizeof(tbl));
+			if (error)
+				break;
+			IPFW_WLOCK(chain);
+			error = ipfw_flush_table(chain, tbl);
+			IPFW_WUNLOCK(chain);
+		}
+		break;
+
+	case IP_FW_TABLE_GETSIZE:
+		{
+			u_int32_t tbl, cnt;
+
+			if ((error = sooptcopyin(sopt, &tbl, sizeof(tbl),
+			    sizeof(tbl))))
+				break;
+			IPFW_RLOCK(chain);
+			error = ipfw_count_table(chain, tbl, &cnt);
+			IPFW_RUNLOCK(chain);
+			if (error)
+				break;
+			error = sooptcopyout(sopt, &cnt, sizeof(cnt));
+		}
+		break;
+
+	case IP_FW_TABLE_LIST:
+		{
+			ipfw_table *tbl;
+
+			if (sopt->sopt_valsize < sizeof(*tbl)) {
+				error = EINVAL;
+				break;
+			}
+			size = sopt->sopt_valsize;
+			tbl = malloc(size, M_TEMP, M_WAITOK);
+			error = sooptcopyin(sopt, tbl, size, sizeof(*tbl));
+			if (error) {
+				free(tbl, M_TEMP);
+				break;
+			}
+			tbl->size = (size - sizeof(*tbl)) /
+			    sizeof(ipfw_table_entry);
+			IPFW_RLOCK(chain);
+			error = ipfw_dump_table(chain, tbl);
+			IPFW_RUNLOCK(chain);
+			if (error) {
+				free(tbl, M_TEMP);
+				break;
+			}
+			error = sooptcopyout(sopt, tbl, size);
+			free(tbl, M_TEMP);
+		}
+		break;
+
+	/*--- NAT operations are protected by the IPFW_LOCK ---*/
+	case IP_FW_NAT_CFG:
+		if (IPFW_NAT_LOADED)
+			error = ipfw_nat_cfg_ptr(sopt);
+		else {
+			printf("IP_FW_NAT_CFG: %s\n",
+			    "ipfw_nat not present, please load it");
+			error = EINVAL;
+		}
+		break;
+
+	case IP_FW_NAT_DEL:
+		if (IPFW_NAT_LOADED)
+			error = ipfw_nat_del_ptr(sopt);
+		else {
+			printf("IP_FW_NAT_DEL: %s\n",
+			    "ipfw_nat not present, please load it");
+			error = EINVAL;
+		}
+		break;
+
+	case IP_FW_NAT_GET_CONFIG:
+		if (IPFW_NAT_LOADED)
+			error = ipfw_nat_get_cfg_ptr(sopt);
+		else {
+			printf("IP_FW_NAT_GET_CFG: %s\n",
+			    "ipfw_nat not present, please load it");
+			error = EINVAL;
+		}
+		break;
+
+	case IP_FW_NAT_GET_LOG:
+		if (IPFW_NAT_LOADED)
+			error = ipfw_nat_get_log_ptr(sopt);
+		else {
+			printf("IP_FW_NAT_GET_LOG: %s\n",
+			    "ipfw_nat not present, please load it");
+			error = EINVAL;
+		}
+		break;
+
+	default:
+		printf("ipfw: ipfw_ctl invalid option %d\n", sopt->sopt_name);
+		error = EINVAL;
+	}
+
+	return (error);
+#undef RULE_MAXSIZE
+}
+/* end of file */
diff --git a/sys/netinet/ipfw/ip_fw_table.c b/sys/netinet/ipfw/ip_fw_table.c
new file mode 100644
index 00000000000..c4fd31b238e
--- /dev/null
+++ b/sys/netinet/ipfw/ip_fw_table.c
@@ -0,0 +1,280 @@
+/*-
+ * Copyright (c) 2004 Ruslan Ermilov and Vsevolod Lobko.
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+/*
+ * Lookup table support for ipfw
+ *
+ * Lookup tables are implemented (at the moment) using the radix
+ * tree used for routing tables. Tables store key-value entries, where
+ * keys are network prefixes (addr/masklen), and values are integers.
+ * As a degenerate case we can interpret keys as 32-bit integers
+ * (with a /32 mask).
+ *
+ * The table is protected by the IPFW lock even for manipulation coming
+ * from userland, because operations are typically fast.
+ */
+
+#if !defined(KLD_MODULE)
+#include "opt_ipfw.h"
+#include "opt_ipdivert.h"
+#include "opt_ipdn.h"
+#include "opt_inet.h"
+#ifndef INET
+#error IPFIREWALL requires INET.
+#endif /* INET */
+#endif
+#include "opt_inet6.h"
+#include "opt_ipsec.h"
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 	/* ip_fw.h requires IFNAMSIZ */
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#ifdef MAC
+#include 
+#endif
+
+MALLOC_DEFINE(M_IPFW_TBL, "ipfw_tbl", "IpFw tables");
+
+struct table_entry {
+	struct radix_node	rn[2];
+	struct sockaddr_in	addr, mask;
+	u_int32_t		value;
+};
+
+/*
+ * The radix code expects addr and mask to be array of bytes,
+ * with the first byte being the length of the array. rn_inithead
+ * is called with the offset in bits of the lookup key within the
+ * array. If we use a sockaddr_in as the underlying type,
+ * sin_len is conveniently located at offset 0, sin_addr is at
+ * offset 4 and normally aligned.
+ * But for portability, let's avoid assumption and make the code explicit
+ */
+#define KEY_LEN(v)	*((uint8_t *)&(v))
+#define KEY_OFS		(8*offsetof(struct sockaddr_in, sin_addr))
+
+int
+ipfw_add_table_entry(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
+    uint8_t mlen, uint32_t value)
+{
+	struct radix_node_head *rnh;
+	struct table_entry *ent;
+	struct radix_node *rn;
+
+	if (tbl >= IPFW_TABLES_MAX)
+		return (EINVAL);
+	rnh = ch->tables[tbl];
+	ent = malloc(sizeof(*ent), M_IPFW_TBL, M_NOWAIT | M_ZERO);
+	if (ent == NULL)
+		return (ENOMEM);
+	ent->value = value;
+	KEY_LEN(ent->addr) = KEY_LEN(ent->mask) = 8;
+	ent->mask.sin_addr.s_addr = htonl(mlen ? ~((1 << (32 - mlen)) - 1) : 0);
+	ent->addr.sin_addr.s_addr = addr & ent->mask.sin_addr.s_addr;
+	IPFW_WLOCK(ch);
+	rn = rnh->rnh_addaddr(&ent->addr, &ent->mask, rnh, (void *)ent);
+	if (rn == NULL) {
+		IPFW_WUNLOCK(ch);
+		free(ent, M_IPFW_TBL);
+		return (EEXIST);
+	}
+	IPFW_WUNLOCK(ch);
+	return (0);
+}
+
+int
+ipfw_del_table_entry(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
+    uint8_t mlen)
+{
+	struct radix_node_head *rnh;
+	struct table_entry *ent;
+	struct sockaddr_in sa, mask;
+
+	if (tbl >= IPFW_TABLES_MAX)
+		return (EINVAL);
+	rnh = ch->tables[tbl];
+	KEY_LEN(sa) = KEY_LEN(mask) = 8;
+	mask.sin_addr.s_addr = htonl(mlen ? ~((1 << (32 - mlen)) - 1) : 0);
+	sa.sin_addr.s_addr = addr & mask.sin_addr.s_addr;
+	IPFW_WLOCK(ch);
+	ent = (struct table_entry *)rnh->rnh_deladdr(&sa, &mask, rnh);
+	if (ent == NULL) {
+		IPFW_WUNLOCK(ch);
+		return (ESRCH);
+	}
+	IPFW_WUNLOCK(ch);
+	free(ent, M_IPFW_TBL);
+	return (0);
+}
+
+static int
+flush_table_entry(struct radix_node *rn, void *arg)
+{
+	struct radix_node_head * const rnh = arg;
+	struct table_entry *ent;
+
+	ent = (struct table_entry *)
+	    rnh->rnh_deladdr(rn->rn_key, rn->rn_mask, rnh);
+	if (ent != NULL)
+		free(ent, M_IPFW_TBL);
+	return (0);
+}
+
+int
+ipfw_flush_table(struct ip_fw_chain *ch, uint16_t tbl)
+{
+	struct radix_node_head *rnh;
+
+	IPFW_WLOCK_ASSERT(ch);
+
+	if (tbl >= IPFW_TABLES_MAX)
+		return (EINVAL);
+	rnh = ch->tables[tbl];
+	KASSERT(rnh != NULL, ("NULL IPFW table"));
+	rnh->rnh_walktree(rnh, flush_table_entry, rnh);
+	return (0);
+}
+
+void
+ipfw_flush_tables(struct ip_fw_chain *ch)
+{
+	uint16_t tbl;
+
+	IPFW_WLOCK_ASSERT(ch);
+
+	for (tbl = 0; tbl < IPFW_TABLES_MAX; tbl++)
+		ipfw_flush_table(ch, tbl);
+}
+
+int
+ipfw_init_tables(struct ip_fw_chain *ch)
+{ 
+	int i;
+	uint16_t j;
+
+	for (i = 0; i < IPFW_TABLES_MAX; i++) {
+		if (!rn_inithead((void **)&ch->tables[i], KEY_OFS)) {
+			for (j = 0; j < i; j++) {
+				(void) ipfw_flush_table(ch, j);
+			}
+			return (ENOMEM);
+		}
+	}
+	return (0);
+}
+
+int
+ipfw_lookup_table(struct ip_fw_chain *ch, uint16_t tbl, in_addr_t addr,
+    uint32_t *val)
+{
+	struct radix_node_head *rnh;
+	struct table_entry *ent;
+	struct sockaddr_in sa;
+
+	if (tbl >= IPFW_TABLES_MAX)
+		return (0);
+	rnh = ch->tables[tbl];
+	KEY_LEN(sa) = 8;
+	sa.sin_addr.s_addr = addr;
+	ent = (struct table_entry *)(rnh->rnh_lookup(&sa, NULL, rnh));
+	if (ent != NULL) {
+		*val = ent->value;
+		return (1);
+	}
+	return (0);
+}
+
+static int
+count_table_entry(struct radix_node *rn, void *arg)
+{
+	u_int32_t * const cnt = arg;
+
+	(*cnt)++;
+	return (0);
+}
+
+int
+ipfw_count_table(struct ip_fw_chain *ch, uint32_t tbl, uint32_t *cnt)
+{
+	struct radix_node_head *rnh;
+
+	if (tbl >= IPFW_TABLES_MAX)
+		return (EINVAL);
+	rnh = ch->tables[tbl];
+	*cnt = 0;
+	rnh->rnh_walktree(rnh, count_table_entry, cnt);
+	return (0);
+}
+
+static int
+dump_table_entry(struct radix_node *rn, void *arg)
+{
+	struct table_entry * const n = (struct table_entry *)rn;
+	ipfw_table * const tbl = arg;
+	ipfw_table_entry *ent;
+
+	if (tbl->cnt == tbl->size)
+		return (1);
+	ent = &tbl->ent[tbl->cnt];
+	ent->tbl = tbl->tbl;
+	if (in_nullhost(n->mask.sin_addr))
+		ent->masklen = 0;
+	else
+		ent->masklen = 33 - ffs(ntohl(n->mask.sin_addr.s_addr));
+	ent->addr = n->addr.sin_addr.s_addr;
+	ent->value = n->value;
+	tbl->cnt++;
+	return (0);
+}
+
+int
+ipfw_dump_table(struct ip_fw_chain *ch, ipfw_table *tbl)
+{
+	struct radix_node_head *rnh;
+
+	if (tbl->tbl >= IPFW_TABLES_MAX)
+		return (EINVAL);
+	rnh = ch->tables[tbl->tbl];
+	tbl->cnt = 0;
+	rnh->rnh_walktree(rnh, dump_table_entry, tbl);
+	return (0);
+}
+/* end of file */
diff --git a/sys/netinet/libalias/alias_mod.c b/sys/netinet/libalias/alias_mod.c
index 2713137ec20..b2576da6be6 100644
--- a/sys/netinet/libalias/alias_mod.c
+++ b/sys/netinet/libalias/alias_mod.c
@@ -52,11 +52,11 @@ __FBSDID("$FreeBSD$");
 #endif
 
 /* Protocol and userland module handlers chains. */
-LIST_HEAD(handler_chain, proto_handler) handler_chain = LIST_HEAD_INITIALIZER(foo);
+LIST_HEAD(handler_chain, proto_handler) handler_chain = LIST_HEAD_INITIALIZER(handler_chain);
 #ifdef _KERNEL
 struct rwlock   handler_rw;
 #endif
-SLIST_HEAD(dll_chain, dll) dll_chain = SLIST_HEAD_INITIALIZER(foo); 
+SLIST_HEAD(dll_chain, dll) dll_chain = SLIST_HEAD_INITIALIZER(dll_chain); 
 
 #ifdef _KERNEL
 
diff --git a/sys/netinet/libalias/alias_proxy.c b/sys/netinet/libalias/alias_proxy.c
index 4e11d4d74be..d5b1b81eb36 100644
--- a/sys/netinet/libalias/alias_proxy.c
+++ b/sys/netinet/libalias/alias_proxy.c
@@ -137,9 +137,6 @@ struct proxy_entry {
 				destination of a proxied IP packet
 */
 
-#ifdef	_KERNEL		/* XXX: can it be moved to libkern? */
-static int inet_aton(const char *cp, struct in_addr *addr);
-#endif
 static int	IpMask(int, struct in_addr *);
 static int	IpAddr(char *, struct in_addr *);
 static int	IpPort(char *, int, int *);
@@ -149,107 +146,6 @@ static int	RuleNumberDelete(struct libalias *la, int);
 static void	ProxyEncodeTcpStream(struct alias_link *, struct ip *, int);
 static void	ProxyEncodeIpHeader(struct ip *, int);
 
-#ifdef	_KERNEL
-static int
-inet_aton(cp, addr)
-        const char *cp;
-        struct in_addr *addr;
-{
-	u_long parts[4];
-	in_addr_t val;
-	const char *c;
-	char *endptr;
-	int gotend, n;
-
-	c = (const char *)cp;
-	n = 0;
-	/*
-	 * Run through the string, grabbing numbers until
-	 * the end of the string, or some error
-	 */
-	gotend = 0;
-	while (!gotend) {
-		unsigned long l;
-
-		l = strtoul(c, &endptr, 0);
-
-		if (l == ULONG_MAX || (l == 0 && endptr == c))
-			return (0);
-
-		val = (in_addr_t)l;
-		/*
-		 * If the whole string is invalid, endptr will equal
-		 * c.. this way we can make sure someone hasn't
-		 * gone '.12' or something which would get past
-		 * the next check.
-		 */
-		if (endptr == c)
-			return (0);
-		parts[n] = val;
-		c = endptr;
-
-		/* Check the next character past the previous number's end */
-		switch (*c) {
-		case '.' :
-			/* Make sure we only do 3 dots .. */
-			if (n == 3)	/* Whoops. Quit. */
-				return (0);
-			n++;
-			c++;
-			break;
-
-		case '\0':
-			gotend = 1;
-			break;
-
-		default:
-			if (isspace((unsigned char)*c)) {
-				gotend = 1;
-				break;
-			} else
-				return (0);	/* Invalid character, so fail */
-		}
-
-	}
-
-	/*
-	 * Concoct the address according to
-	 * the number of parts specified.
-	 */
-
-	switch (n) {
-	case 0:				/* a -- 32 bits */
-		/*
-		 * Nothing is necessary here.  Overflow checking was
-		 * already done in strtoul().
-		 */
-		break;
-	case 1:				/* a.b -- 8.24 bits */
-		if (val > 0xffffff || parts[0] > 0xff)
-			return (0);
-		val |= parts[0] << 24;
-		break;
-
-	case 2:				/* a.b.c -- 8.8.16 bits */
-		if (val > 0xffff || parts[0] > 0xff || parts[1] > 0xff)
-			return (0);
-		val |= (parts[0] << 24) | (parts[1] << 16);
-		break;
-
-	case 3:				/* a.b.c.d -- 8.8.8.8 bits */
-		if (val > 0xff || parts[0] > 0xff || parts[1] > 0xff ||
-		    parts[2] > 0xff)
-			return (0);
-		val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
-		break;
-	}
-
-	if (addr != NULL)
-		addr->s_addr = htonl(val);
-	return (1);
-}
-#endif
-
 static int
 IpMask(int nbits, struct in_addr *mask)
 {
diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c
index d612c2c1d5a..3573472bf25 100644
--- a/sys/netinet/raw_ip.c
+++ b/sys/netinet/raw_ip.c
@@ -291,7 +291,7 @@ rip_input(struct mbuf *m, int off)
 			continue;
 		if (inp->inp_faddr.s_addr != ip->ip_src.s_addr)
 			continue;
-		if (jailed(inp->inp_cred)) {
+		if (jailed_without_vnet(inp->inp_cred)) {
 			/*
 			 * XXX: If faddr was bound to multicast group,
 			 * jailed raw socket will drop datagram.
@@ -325,7 +325,7 @@ rip_input(struct mbuf *m, int off)
 		if (!in_nullhost(inp->inp_faddr) &&
 		    !in_hosteq(inp->inp_faddr, ip->ip_src))
 			continue;
-		if (jailed(inp->inp_cred)) {
+		if (jailed_without_vnet(inp->inp_cred)) {
 			/*
 			 * Allow raw socket in jail to receive multicast;
 			 * assume process had PRIV_NETINET_RAW at attach,
@@ -343,17 +343,35 @@ rip_input(struct mbuf *m, int off)
 		 */
 		if (inp->inp_moptions != NULL &&
 		    IN_MULTICAST(ntohl(ip->ip_dst.s_addr))) {
-			struct sockaddr_in group;
+			/*
+			 * If the incoming datagram is for IGMP, allow it
+			 * through unconditionally to the raw socket.
+			 *
+			 * In the case of IGMPv2, we may not have explicitly
+			 * joined the group, and may have set IFF_ALLMULTI
+			 * on the interface. imo_multi_filter() may discard
+			 * control traffic we actually need to see.
+			 *
+			 * Userland multicast routing daemons should continue
+			 * filter the control traffic appropriately.
+			 */
 			int blocked;
 
-			bzero(&group, sizeof(struct sockaddr_in));
-			group.sin_len = sizeof(struct sockaddr_in);
-			group.sin_family = AF_INET;
-			group.sin_addr = ip->ip_dst;
+			blocked = MCAST_PASS;
+			if (proto != IPPROTO_IGMP) {
+				struct sockaddr_in group;
+
+				bzero(&group, sizeof(struct sockaddr_in));
+				group.sin_len = sizeof(struct sockaddr_in);
+				group.sin_family = AF_INET;
+				group.sin_addr = ip->ip_dst;
+
+				blocked = imo_multi_filter(inp->inp_moptions,
+				    ifp,
+				    (struct sockaddr *)&group,
+				    (struct sockaddr *)&ripsrc);
+			}
 
-			blocked = imo_multi_filter(inp->inp_moptions, ifp,
-			    (struct sockaddr *)&group,
-			    (struct sockaddr *)&ripsrc);
 			if (blocked != MCAST_PASS) {
 				IPSTAT_INC(ips_notmember);
 				continue;
@@ -517,6 +535,7 @@ rip_ctloutput(struct socket *so, struct sockopt *sopt)
 			error = sooptcopyout(sopt, &optval, sizeof optval);
 			break;
 
+		case IP_FW3:	/* generic ipfw v.3 functions */
 		case IP_FW_ADD:	/* ADD actually returns the body... */
 		case IP_FW_GET:
 		case IP_FW_TABLE_GETSIZE:
@@ -529,6 +548,7 @@ rip_ctloutput(struct socket *so, struct sockopt *sopt)
 				error = ENOPROTOOPT;
 			break;
 
+		case IP_DUMMYNET3:	/* generic dummynet v.3 functions */
 		case IP_DUMMYNET_GET:
 			if (ip_dn_ctl_ptr != NULL)
 				error = ip_dn_ctl_ptr(sopt);
@@ -574,6 +594,7 @@ rip_ctloutput(struct socket *so, struct sockopt *sopt)
 				inp->inp_flags &= ~INP_HDRINCL;
 			break;
 
+		case IP_FW3:	/* generic ipfw v.3 functions */
 		case IP_FW_ADD:
 		case IP_FW_DEL:
 		case IP_FW_FLUSH:
@@ -590,6 +611,7 @@ rip_ctloutput(struct socket *so, struct sockopt *sopt)
 				error = ENOPROTOOPT;
 			break;
 
+		case IP_DUMMYNET3:	/* generic dummynet v.3 functions */
 		case IP_DUMMYNET_CONFIGURE:
 		case IP_DUMMYNET_DEL:
 		case IP_DUMMYNET_FLUSH:
diff --git a/sys/netinet/sctp_asconf.c b/sys/netinet/sctp_asconf.c
index 404b5ad0aa7..9c46e7992ea 100644
--- a/sys/netinet/sctp_asconf.c
+++ b/sys/netinet/sctp_asconf.c
@@ -3180,24 +3180,6 @@ sctp_addr_mgmt_ep_sa(struct sctp_inpcb *inp, struct sockaddr *sa,
 		ifa = NULL;
 	}
 	if (ifa != NULL) {
-		/* add this address */
-		struct sctp_asconf_iterator *asc;
-		struct sctp_laddr *wi;
-
-		SCTP_MALLOC(asc, struct sctp_asconf_iterator *,
-		    sizeof(struct sctp_asconf_iterator),
-		    SCTP_M_ASC_IT);
-		if (asc == NULL) {
-			SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_ASCONF, ENOMEM);
-			return (ENOMEM);
-		}
-		wi = SCTP_ZONE_GET(SCTP_BASE_INFO(ipi_zone_laddr),
-		    struct sctp_laddr);
-		if (wi == NULL) {
-			SCTP_FREE(asc, SCTP_M_ASC_IT);
-			SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_ASCONF, ENOMEM);
-			return (ENOMEM);
-		}
 		if (type == SCTP_ADD_IP_ADDRESS) {
 			sctp_add_local_addr_ep(inp, ifa, type);
 		} else if (type == SCTP_DEL_IP_ADDRESS) {
@@ -3205,8 +3187,6 @@ sctp_addr_mgmt_ep_sa(struct sctp_inpcb *inp, struct sockaddr *sa,
 
 			if (inp->laddr_count < 2) {
 				/* can't delete the last local address */
-				SCTP_FREE(asc, SCTP_M_ASC_IT);
-				SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_laddr), wi);
 				SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_ASCONF, EINVAL);
 				return (EINVAL);
 			}
@@ -3218,27 +3198,49 @@ sctp_addr_mgmt_ep_sa(struct sctp_inpcb *inp, struct sockaddr *sa,
 				}
 			}
 		}
-		LIST_INIT(&asc->list_of_work);
-		asc->cnt = 1;
-		SCTP_INCR_LADDR_COUNT();
-		wi->ifa = ifa;
-		wi->action = type;
-		atomic_add_int(&ifa->refcount, 1);
-		LIST_INSERT_HEAD(&asc->list_of_work, wi, sctp_nxt_addr);
-		(void)sctp_initiate_iterator(sctp_asconf_iterator_ep,
-		    sctp_asconf_iterator_stcb,
-		    sctp_asconf_iterator_ep_end,
-		    SCTP_PCB_ANY_FLAGS,
-		    SCTP_PCB_ANY_FEATURES,
-		    SCTP_ASOC_ANY_STATE,
-		    (void *)asc, 0,
-		    sctp_asconf_iterator_end, inp, 0);
+		if (!LIST_EMPTY(&inp->sctp_asoc_list)) {
+			/*
+			 * There is no need to start the iterator if the inp
+			 * has no associations.
+			 */
+			struct sctp_asconf_iterator *asc;
+			struct sctp_laddr *wi;
+
+			SCTP_MALLOC(asc, struct sctp_asconf_iterator *,
+			    sizeof(struct sctp_asconf_iterator),
+			    SCTP_M_ASC_IT);
+			if (asc == NULL) {
+				SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_ASCONF, ENOMEM);
+				return (ENOMEM);
+			}
+			wi = SCTP_ZONE_GET(SCTP_BASE_INFO(ipi_zone_laddr), struct sctp_laddr);
+			if (wi == NULL) {
+				SCTP_FREE(asc, SCTP_M_ASC_IT);
+				SCTP_LTRACE_ERR_RET(inp, NULL, NULL, SCTP_FROM_SCTP_ASCONF, ENOMEM);
+				return (ENOMEM);
+			}
+			LIST_INIT(&asc->list_of_work);
+			asc->cnt = 1;
+			SCTP_INCR_LADDR_COUNT();
+			wi->ifa = ifa;
+			wi->action = type;
+			atomic_add_int(&ifa->refcount, 1);
+			LIST_INSERT_HEAD(&asc->list_of_work, wi, sctp_nxt_addr);
+			(void)sctp_initiate_iterator(sctp_asconf_iterator_ep,
+			    sctp_asconf_iterator_stcb,
+			    sctp_asconf_iterator_ep_end,
+			    SCTP_PCB_ANY_FLAGS,
+			    SCTP_PCB_ANY_FEATURES,
+			    SCTP_ASOC_ANY_STATE,
+			    (void *)asc, 0,
+			    sctp_asconf_iterator_end, inp, 0);
+		}
+		return (0);
 	} else {
 		/* invalid address! */
 		SCTP_LTRACE_ERR_RET(NULL, NULL, NULL, SCTP_FROM_SCTP_ASCONF, EADDRNOTAVAIL);
 		return (EADDRNOTAVAIL);
 	}
-	return (0);
 }
 
 void
diff --git a/sys/netinet/sctp_auth.c b/sys/netinet/sctp_auth.c
index a166cb4b9c9..5e8c51890fe 100644
--- a/sys/netinet/sctp_auth.c
+++ b/sys/netinet/sctp_auth.c
@@ -573,7 +573,7 @@ sctp_insert_sharedkey(struct sctp_keyhead *shared_keys,
 		return (EINVAL);
 
 	/* insert into an empty list? */
-	if (SCTP_LIST_EMPTY(shared_keys)) {
+	if (LIST_EMPTY(shared_keys)) {
 		LIST_INSERT_HEAD(shared_keys, new_skey, next);
 		return (0);
 	}
diff --git a/sys/netinet/sctp_constants.h b/sys/netinet/sctp_constants.h
index 8df34909634..2b17cbc214f 100644
--- a/sys/netinet/sctp_constants.h
+++ b/sys/netinet/sctp_constants.h
@@ -87,10 +87,13 @@ __FBSDID("$FreeBSD$");
 /* #define SCTP_AUDITING_ENABLED 1 used for debug/auditing */
 #define SCTP_AUDIT_SIZE 256
 
+/* temporary disabled since it does not work with VNET. */
+#if 0
 #define SCTP_USE_THREAD_BASED_ITERATOR 1
+#endif
 
 #define SCTP_KTRHEAD_NAME "sctp_iterator"
-#define SCTP_KTHREAD_PAGES 2
+#define SCTP_KTHREAD_PAGES 0
 
 
 /* If you support Multi-VRF how big to
diff --git a/sys/netinet/sctp_input.c b/sys/netinet/sctp_input.c
index e59e78858fc..18b7d557e7b 100644
--- a/sys/netinet/sctp_input.c
+++ b/sys/netinet/sctp_input.c
@@ -834,6 +834,9 @@ sctp_handle_shutdown(struct sctp_shutdown_chunk *cp,
 		return;
 	} else {
 		sctp_update_acked(stcb, cp, net, abort_flag);
+		if (*abort_flag) {
+			return;
+		}
 	}
 	if (asoc->control_pdapi) {
 		/*
diff --git a/sys/netinet/sctp_os_bsd.h b/sys/netinet/sctp_os_bsd.h
index 00878c4528b..349d1642f88 100644
--- a/sys/netinet/sctp_os_bsd.h
+++ b/sys/netinet/sctp_os_bsd.h
@@ -153,7 +153,6 @@ MALLOC_DECLARE(SCTP_M_SOCKOPT);
  *
  */
 #define USER_ADDR_NULL	(NULL)	/* FIX ME: temp */
-#define SCTP_LIST_EMPTY(list)	LIST_EMPTY(list)
 
 #if defined(SCTP_DEBUG)
 #define SCTPDBG(level, params...)					\
@@ -255,10 +254,9 @@ MALLOC_DECLARE(SCTP_M_SOCKOPT);
 /* SCTP_ZONE_INIT: initialize the zone */
 typedef struct uma_zone *sctp_zone_t;
 
-#define UMA_ZFLAG_FULL	0x0020
 #define SCTP_ZONE_INIT(zone, name, size, number) { \
 	zone = uma_zcreate(name, size, NULL, NULL, NULL, NULL, UMA_ALIGN_PTR,\
-		UMA_ZFLAG_FULL); \
+		0); \
 	uma_zone_set_max(zone, number); \
 }
 
diff --git a/sys/netinet/sctp_output.c b/sys/netinet/sctp_output.c
index 8c29f70b7c4..cbc9a9aabef 100644
--- a/sys/netinet/sctp_output.c
+++ b/sys/netinet/sctp_output.c
@@ -5875,10 +5875,8 @@ sctp_msg_append(struct sctp_tcb *stcb,
 	sp->strseq = 0;
 	if (sp->sinfo_flags & SCTP_ADDR_OVER) {
 		sp->net = net;
-		sp->addr_over = 1;
 	} else {
 		sp->net = stcb->asoc.primary_destination;
-		sp->addr_over = 0;
 	}
 	atomic_add_int(&sp->net->ref_count, 1);
 	(void)SCTP_GETTIME_TIMEVAL(&sp->ts);
@@ -7052,7 +7050,6 @@ dont_do_it:
 
 	chk->rec.data.timetodrop = sp->ts;
 	chk->flags = sp->act_flags;
-	chk->addr_over = sp->addr_over;
 
 	chk->whoTo = net;
 	atomic_add_int(&chk->whoTo->ref_count, 1);
@@ -9442,6 +9439,7 @@ sctp_chunk_output(struct sctp_inpcb *inp,
 
 	if ((un_sent <= 0) &&
 	    (TAILQ_EMPTY(&asoc->control_send_queue)) &&
+	    (TAILQ_EMPTY(&asoc->asconf_send_queue)) &&
 	    (asoc->sent_queue_retran_cnt == 0)) {
 		/* Nothing to do unless there is something to be sent left */
 		return;
@@ -12251,10 +12249,8 @@ skip_copy:
 	} else {
 		if (sp->sinfo_flags & SCTP_ADDR_OVER) {
 			sp->net = net;
-			sp->addr_over = 1;
 		} else {
 			sp->net = asoc->primary_destination;
-			sp->addr_over = 0;
 		}
 		atomic_add_int(&sp->net->ref_count, 1);
 		sctp_set_prsctp_policy(sp);
diff --git a/sys/netinet/sctp_pcb.c b/sys/netinet/sctp_pcb.c
index 7d12f375a8e..682af5e40c2 100644
--- a/sys/netinet/sctp_pcb.c
+++ b/sys/netinet/sctp_pcb.c
@@ -452,7 +452,7 @@ sctp_remove_ifa_from_ifn(struct sctp_ifa *sctp_ifap)
 			sctp_ifap->ifn_p->num_v4--;
 
 		ifn_index = sctp_ifap->ifn_p->ifn_index;
-		if (SCTP_LIST_EMPTY(&sctp_ifap->ifn_p->ifalist)) {
+		if (LIST_EMPTY(&sctp_ifap->ifn_p->ifalist)) {
 			/* remove the ifn, possibly freeing it */
 			sctp_delete_ifn(sctp_ifap->ifn_p, SCTP_ADDR_LOCKED);
 		} else {
@@ -4262,7 +4262,7 @@ sctp_delete_from_timewait(uint32_t tag, uint16_t lport, uint16_t rport)
 	int i;
 
 	chain = &SCTP_BASE_INFO(vtag_timewait)[(tag % SCTP_STACK_VTAG_HASH_SIZE)];
-	if (!SCTP_LIST_EMPTY(chain)) {
+	if (!LIST_EMPTY(chain)) {
 		LIST_FOREACH(twait_block, chain, sctp_nxt_tagblock) {
 			for (i = 0; i < SCTP_NUMBER_IN_VTAG_BLOCK; i++) {
 				if ((twait_block->vtag_block[i].v_tag == tag) &&
@@ -4292,7 +4292,7 @@ sctp_is_in_timewait(uint32_t tag, uint16_t lport, uint16_t rport)
 
 	SCTP_INP_INFO_WLOCK();
 	chain = &SCTP_BASE_INFO(vtag_timewait)[(tag % SCTP_STACK_VTAG_HASH_SIZE)];
-	if (!SCTP_LIST_EMPTY(chain)) {
+	if (!LIST_EMPTY(chain)) {
 		LIST_FOREACH(twait_block, chain, sctp_nxt_tagblock) {
 			for (i = 0; i < SCTP_NUMBER_IN_VTAG_BLOCK; i++) {
 				if ((twait_block->vtag_block[i].v_tag == tag) &&
@@ -4326,7 +4326,7 @@ sctp_add_vtag_to_timewait(uint32_t tag, uint32_t time, uint16_t lport, uint16_t
 	(void)SCTP_GETTIME_TIMEVAL(&now);
 	chain = &SCTP_BASE_INFO(vtag_timewait)[(tag % SCTP_STACK_VTAG_HASH_SIZE)];
 	set = 0;
-	if (!SCTP_LIST_EMPTY(chain)) {
+	if (!LIST_EMPTY(chain)) {
 		/* Block(s) present, lets find space, and expire on the fly */
 		LIST_FOREACH(twait_block, chain, sctp_nxt_tagblock) {
 			for (i = 0; i < SCTP_NUMBER_IN_VTAG_BLOCK; i++) {
@@ -4953,7 +4953,7 @@ sctp_free_assoc(struct sctp_inpcb *inp, struct sctp_tcb *stcb, int from_inpcbfre
 		sctp_free_remote_addr(net);
 	}
 
-	while (!SCTP_LIST_EMPTY(&asoc->sctp_restricted_addrs)) {
+	while (!LIST_EMPTY(&asoc->sctp_restricted_addrs)) {
 		/* sa_ignore FREED_MEMORY */
 		laddr = LIST_FIRST(&asoc->sctp_restricted_addrs);
 		sctp_remove_laddr(laddr);
@@ -5528,7 +5528,7 @@ sctp_pcb_init()
 
 	/* Init the TIMEWAIT list */
 	for (i = 0; i < SCTP_STACK_VTAG_HASH_SIZE; i++) {
-		LIST_INIT(&SCTP_BASE_INFO(vtag_timewait[i]));
+		LIST_INIT(&SCTP_BASE_INFO(vtag_timewait)[i]);
 	}
 
 #if defined(SCTP_USE_THREAD_BASED_ITERATOR)
@@ -5558,36 +5558,54 @@ sctp_pcb_finish(void)
 	struct sctp_ifa *ifa;
 	struct sctpvtaghead *chain;
 	struct sctp_tagblock *twait_block, *prev_twait_block;
+	struct sctp_laddr *wi;
+	struct sctp_iterator *it;
 	int i;
 
+#if defined(SCTP_USE_THREAD_BASED_ITERATOR)
+	SCTP_BASE_INFO(threads_must_exit) = 1;
+	/* Wake the thread up so it will exit now */
+	sctp_wakeup_iterator();
+
+#endif
+	SCTP_OS_TIMER_STOP(&SCTP_BASE_INFO(addr_wq_timer.timer));
+	SCTP_IPI_ITERATOR_WQ_LOCK();
+	while ((wi = LIST_FIRST(&SCTP_BASE_INFO(addr_wq))) != NULL) {
+		LIST_REMOVE(wi, sctp_nxt_addr);
+		SCTP_DECR_LADDR_COUNT();
+		SCTP_ZONE_FREE(SCTP_BASE_INFO(ipi_zone_laddr), wi);
+	}
+	SCTP_IPI_ITERATOR_WQ_UNLOCK();
+	while ((it = TAILQ_FIRST(&SCTP_BASE_INFO(iteratorhead))) != NULL) {
+		if (it->function_atend != NULL) {
+			(*it->function_atend) (it->pointer, it->val);
+		}
+		TAILQ_REMOVE(&SCTP_BASE_INFO(iteratorhead), it, sctp_nxt_itr);
+		SCTP_FREE(it, SCTP_M_ITER);
+	}
+
 	/*
 	 * free the vrf/ifn/ifa lists and hashes (be sure address monitor is
 	 * destroyed first).
 	 */
 	vrf_bucket = &SCTP_BASE_INFO(sctp_vrfhash)[(SCTP_DEFAULT_VRFID & SCTP_BASE_INFO(hashvrfmark))];
-	vrf = LIST_FIRST(vrf_bucket);
-	while (vrf) {
-		ifn = LIST_FIRST(&vrf->ifnlist);
-		while (ifn) {
-			ifa = LIST_FIRST(&ifn->ifalist);
-			while (ifa) {
+	while ((vrf = LIST_FIRST(vrf_bucket)) != NULL) {
+		while ((ifn = LIST_FIRST(&vrf->ifnlist)) != NULL) {
+			while ((ifa = LIST_FIRST(&ifn->ifalist)) != NULL) {
 				/* free the ifa */
 				LIST_REMOVE(ifa, next_bucket);
 				LIST_REMOVE(ifa, next_ifa);
 				SCTP_FREE(ifa, SCTP_M_IFA);
-				ifa = LIST_FIRST(&ifn->ifalist);
 			}
 			/* free the ifn */
 			LIST_REMOVE(ifn, next_bucket);
 			LIST_REMOVE(ifn, next_ifn);
 			SCTP_FREE(ifn, SCTP_M_IFN);
-			ifn = LIST_FIRST(&vrf->ifnlist);
 		}
 		SCTP_HASH_FREE(vrf->vrf_addr_hash, vrf->vrf_addr_hashmark);
 		/* free the vrf */
 		LIST_REMOVE(vrf, next_vrf);
 		SCTP_FREE(vrf, SCTP_M_VRF);
-		vrf = LIST_FIRST(vrf_bucket);
 	}
 	/* free the vrf hashes */
 	SCTP_HASH_FREE(SCTP_BASE_INFO(sctp_vrfhash), SCTP_BASE_INFO(hashvrfmark));
@@ -5599,7 +5617,7 @@ sctp_pcb_finish(void)
 	 */
 	for (i = 0; i < SCTP_STACK_VTAG_HASH_SIZE; i++) {
 		chain = &SCTP_BASE_INFO(vtag_timewait)[i];
-		if (!SCTP_LIST_EMPTY(chain)) {
+		if (!LIST_EMPTY(chain)) {
 			prev_twait_block = NULL;
 			LIST_FOREACH(twait_block, chain, sctp_nxt_tagblock) {
 				if (prev_twait_block) {
@@ -5614,7 +5632,6 @@ sctp_pcb_finish(void)
 	/* free the locks and mutexes */
 #ifdef SCTP_PACKET_LOGGING
 	SCTP_IP_PKTLOG_DESTROY();
-
 #endif
 	SCTP_IPI_ADDR_DESTROY();
 	SCTP_ITERATOR_LOCK_DESTROY();
@@ -6368,9 +6385,9 @@ sctp_is_vtag_good(struct sctp_inpcb *inp, uint32_t tag, uint16_t lport, uint16_t
 	}
 skip_vtag_check:
 
-	chain = &SCTP_BASE_INFO(vtag_timewait[(tag % SCTP_STACK_VTAG_HASH_SIZE))];
+	chain = &SCTP_BASE_INFO(vtag_timewait)[(tag % SCTP_STACK_VTAG_HASH_SIZE)];
 	/* Now what about timed wait ? */
-	if (!SCTP_LIST_EMPTY(chain)) {
+	if (!LIST_EMPTY(chain)) {
 		/*
 		 * Block(s) are present, lets see if we have this tag in the
 		 * list
diff --git a/sys/netinet/sctp_structs.h b/sys/netinet/sctp_structs.h
index 595c37c3e7a..b1a0f13a650 100644
--- a/sys/netinet/sctp_structs.h
+++ b/sys/netinet/sctp_structs.h
@@ -364,9 +364,6 @@ struct sctp_tmit_chunk {
 	uint8_t pad_inplace;
 	uint8_t do_rtt;
 	uint8_t book_size_scale;
-	uint8_t addr_over;	/* flag which is set if the dest address for
-				 * this chunk is overridden by user. Used for
-				 * CMT (iyengar@cis.udel.edu, 2005/06/21) */
 	uint8_t no_fr_allowed;
 	uint8_t pr_sctp_on;
 	uint8_t copy_by_ref;
@@ -444,7 +441,6 @@ struct sctp_stream_queue_pending {
 	uint8_t holds_key_ref;
 	uint8_t msg_is_complete;
 	uint8_t some_taken;
-	uint8_t addr_over;
 	uint8_t pr_sctp_on;
 	uint8_t sender_all_done;
 	uint8_t put_last_out;
diff --git a/sys/netinet/sctp_usrreq.c b/sys/netinet/sctp_usrreq.c
index a8ea998a3b3..9e1c01a2c3b 100644
--- a/sys/netinet/sctp_usrreq.c
+++ b/sys/netinet/sctp_usrreq.c
@@ -759,7 +759,7 @@ sctp_disconnect(struct socket *so)
 	SCTP_INP_RLOCK(inp);
 	if ((inp->sctp_flags & SCTP_PCB_FLAGS_TCPTYPE) ||
 	    (inp->sctp_flags & SCTP_PCB_FLAGS_IN_TCPPOOL)) {
-		if (SCTP_LIST_EMPTY(&inp->sctp_asoc_list)) {
+		if (LIST_EMPTY(&inp->sctp_asoc_list)) {
 			/* No connection */
 			SCTP_INP_RUNLOCK(inp);
 			return (0);
diff --git a/sys/netinet/sctputil.c b/sys/netinet/sctputil.c
index 94dea3fa73d..65de46229e4 100644
--- a/sys/netinet/sctputil.c
+++ b/sys/netinet/sctputil.c
@@ -4791,7 +4791,6 @@ next_on_sent:
 					chk->rec.data.payloadtype = sp->ppid;
 					chk->rec.data.context = sp->context;
 					chk->flags = sp->act_flags;
-					chk->addr_over = sp->addr_over;
 					chk->whoTo = sp->net;
 					atomic_add_int(&chk->whoTo->ref_count, 1);
 					chk->rec.data.TSN_seq = atomic_fetchadd_int(&stcb->asoc.sending_seq, 1);
@@ -6156,11 +6155,11 @@ sctp_dynamic_set_primary(struct sockaddr *sa, uint32_t vrf_id)
 	 * newest first :-0
 	 */
 	LIST_INSERT_HEAD(&SCTP_BASE_INFO(addr_wq), wi, sctp_nxt_addr);
+	SCTP_IPI_ITERATOR_WQ_UNLOCK();
 	sctp_timer_start(SCTP_TIMER_TYPE_ADDR_WQ,
 	    (struct sctp_inpcb *)NULL,
 	    (struct sctp_tcb *)NULL,
 	    (struct sctp_nets *)NULL);
-	SCTP_IPI_ITERATOR_WQ_UNLOCK();
 	return (0);
 }
 
diff --git a/sys/netinet/tcp.h b/sys/netinet/tcp.h
index 03b8bf63708..8779582adc1 100644
--- a/sys/netinet/tcp.h
+++ b/sys/netinet/tcp.h
@@ -181,10 +181,10 @@ struct tcp_info {
 	u_int8_t	tcpi_snd_wscale:4,	/* RFC1323 send shift value. */
 			tcpi_rcv_wscale:4;	/* RFC1323 recv shift value. */
 
-	u_int32_t	__tcpi_rto;
+	u_int32_t	tcpi_rto;		/* Retransmission timeout (usec). */
 	u_int32_t	__tcpi_ato;
-	u_int32_t	__tcpi_snd_mss;
-	u_int32_t	__tcpi_rcv_mss;
+	u_int32_t	tcpi_snd_mss;		/* Max segment size for send. */
+	u_int32_t	tcpi_rcv_mss;		/* Max segment size for receive. */
 
 	u_int32_t	__tcpi_unacked;
 	u_int32_t	__tcpi_sacked;
@@ -195,7 +195,7 @@ struct tcp_info {
 	/* Times; measurements in usecs. */
 	u_int32_t	__tcpi_last_data_sent;
 	u_int32_t	__tcpi_last_ack_sent;	/* Also unimpl. on Linux? */
-	u_int32_t	__tcpi_last_data_recv;
+	u_int32_t	tcpi_last_data_recv;	/* Time since last recv data. */
 	u_int32_t	__tcpi_last_ack_recv;
 
 	/* Metrics; variable units. */
diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c
index 4913e6c29f7..dc9f11b8a0f 100644
--- a/sys/netinet/tcp_usrreq.c
+++ b/sys/netinet/tcp_usrreq.c
@@ -1194,6 +1194,8 @@ tcp_fill_info(struct tcpcb *tp, struct tcp_info *ti)
 		ti->tcpi_rcv_wscale = tp->rcv_scale;
 	}
 
+	ti->tcpi_rto = tp->t_rxtcur * tick;
+	ti->tcpi_last_data_recv = (long)(ticks - (int)tp->t_rcvtime) * tick;
 	ti->tcpi_rtt = ((u_int64_t)tp->t_srtt * tick) >> TCP_RTT_SHIFT;
 	ti->tcpi_rttvar = ((u_int64_t)tp->t_rttvar * tick) >> TCP_RTTVAR_SHIFT;
 
@@ -1208,8 +1210,8 @@ tcp_fill_info(struct tcpcb *tp, struct tcp_info *ti)
 	ti->tcpi_snd_wnd = tp->snd_wnd;
 	ti->tcpi_snd_bwnd = tp->snd_bwnd;
 	ti->tcpi_snd_nxt = tp->snd_nxt;
-	ti->__tcpi_snd_mss = tp->t_maxseg;
-	ti->__tcpi_rcv_mss = tp->t_maxseg;
+	ti->tcpi_snd_mss = tp->t_maxseg;
+	ti->tcpi_rcv_mss = tp->t_maxseg;
 	if (tp->t_flags & TF_TOE)
 		ti->tcpi_options |= TCPI_OPT_TOE;
 }
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c
index 7254c4d0eb0..c839efdc8df 100644
--- a/sys/netinet6/in6.c
+++ b/sys/netinet6/in6.c
@@ -1200,8 +1200,12 @@ in6_purgeaddr(struct ifaddr *ifa)
 	 * The check for the current setting of "nd6_useloopback" 
 	 * is not needed.
 	 */
-	error = ifa_del_loopback_route((struct ifaddr *)ia,
-			       (struct sockaddr *)&ia->ia_addr);
+	if (ia->ia_flags & IFA_RTSELF) {
+		error = ifa_del_loopback_route((struct ifaddr *)ia,
+				       (struct sockaddr *)&ia->ia_addr);
+		if (error == 0)
+			ia->ia_flags &= ~IFA_RTSELF;
+	}
 
 	/* stop DAD processing */
 	nd6_dad_stop(ifa);
@@ -1762,6 +1766,8 @@ in6_ifinit(struct ifnet *ifp, struct in6_ifaddr *ia,
 		|| (ifp->if_flags & IFF_LOOPBACK))) {
 		error = ifa_add_loopback_route((struct ifaddr *)ia,
 				       (struct sockaddr *)&ia->ia_addr);
+		if (error == 0)
+			ia->ia_flags |= IFA_RTSELF;
 	}
 
 	/* Add ownaddr as loopback rtentry, if necessary (ex. on p2p link). */
@@ -2347,7 +2353,9 @@ in6_lltable_prefix_free(struct lltable *llt,
 }
 
 static int
-in6_lltable_rtcheck(struct ifnet *ifp, const struct sockaddr *l3addr)
+in6_lltable_rtcheck(struct ifnet *ifp, 
+		    u_int flags, 
+		    const struct sockaddr *l3addr)
 {
 	struct rtentry *rt;
 	char ip6buf[INET6_ADDRSTRLEN];
@@ -2415,7 +2423,7 @@ in6_lltable_lookup(struct lltable *llt, u_int flags,
 		 * verify this.
 		 */
 		if (!(flags & LLE_IFADDR) &&
-		    in6_lltable_rtcheck(ifp, l3addr) != 0)
+		    in6_lltable_rtcheck(ifp, flags, l3addr) != 0)
 			return NULL;
 
 		lle = in6_lltable_new(l3addr, flags);
diff --git a/sys/netinet6/in6_mcast.c b/sys/netinet6/in6_mcast.c
index eedebb91b48..1438c32030d 100644
--- a/sys/netinet6/in6_mcast.c
+++ b/sys/netinet6/in6_mcast.c
@@ -1814,6 +1814,7 @@ in6p_join_group(struct inpcb *inp, struct sockopt *sopt)
 
 	ifp = NULL;
 	imf = NULL;
+	lims = NULL;
 	error = 0;
 	is_new = 0;
 
@@ -1917,11 +1918,6 @@ in6p_join_group(struct inpcb *inp, struct sockopt *sopt)
 	 */
 	(void)in6_setscope(&gsa->sin6.sin6_addr, ifp, NULL);
 
-	/*
-	 * MCAST_JOIN_SOURCE on an exclusive membership is an error.
-	 * On an existing inclusive membership, it just adds the
-	 * source to the filter list.
-	 */
 	imo = in6p_findmoptions(inp);
 	idx = im6o_match_group(imo, ifp, &gsa->sa);
 	if (idx == -1) {
@@ -1929,16 +1925,53 @@ in6p_join_group(struct inpcb *inp, struct sockopt *sopt)
 	} else {
 		inm = imo->im6o_membership[idx];
 		imf = &imo->im6o_mfilters[idx];
-		if (ssa->ss.ss_family != AF_UNSPEC &&
-		    imf->im6f_st[1] != MCAST_INCLUDE) {
+		if (ssa->ss.ss_family != AF_UNSPEC) {
+			/*
+			 * MCAST_JOIN_SOURCE_GROUP on an exclusive membership
+			 * is an error. On an existing inclusive membership,
+			 * it just adds the source to the filter list.
+			 */
+			if (imf->im6f_st[1] != MCAST_INCLUDE) {
+				error = EINVAL;
+				goto out_in6p_locked;
+			}
+			/*
+			 * Throw out duplicates.
+			 *
+			 * XXX FIXME: This makes a naive assumption that
+			 * even if entries exist for *ssa in this imf,
+			 * they will be rejected as dupes, even if they
+			 * are not valid in the current mode (in-mode).
+			 *
+			 * in6_msource is transactioned just as for anything
+			 * else in SSM -- but note naive use of in6m_graft()
+			 * below for allocating new filter entries.
+			 *
+			 * This is only an issue if someone mixes the
+			 * full-state SSM API with the delta-based API,
+			 * which is discouraged in the relevant RFCs.
+			 */
+			lims = im6o_match_source(imo, idx, &ssa->sa);
+			if (lims != NULL /*&&
+			    lims->im6sl_st[1] == MCAST_INCLUDE*/) {
+				error = EADDRNOTAVAIL;
+				goto out_in6p_locked;
+			}
+		} else {
+			/*
+			 * MCAST_JOIN_GROUP alone, on any existing membership,
+			 * is rejected, to stop the same inpcb tying up
+			 * multiple refs to the in_multi.
+			 * On an existing inclusive membership, this is also
+			 * an error; if you want to change filter mode,
+			 * you must use the userland API setsourcefilter().
+			 * XXX We don't reject this for imf in UNDEFINED
+			 * state at t1, because allocation of a filter
+			 * is atomic with allocation of a membership.
+			 */
 			error = EINVAL;
 			goto out_in6p_locked;
 		}
-		lims = im6o_match_source(imo, idx, &ssa->sa);
-		if (lims != NULL) {
-			error = EADDRNOTAVAIL;
-			goto out_in6p_locked;
-		}
 	}
 
 	/*
@@ -1970,7 +2003,13 @@ in6p_join_group(struct inpcb *inp, struct sockopt *sopt)
 	/*
 	 * Graft new source into filter list for this inpcb's
 	 * membership of the group. The in6_multi may not have
-	 * been allocated yet if this is a new membership.
+	 * been allocated yet if this is a new membership, however,
+	 * the in_mfilter slot will be allocated and must be initialized.
+	 *
+	 * Note: Grafting of exclusive mode filters doesn't happen
+	 * in this path.
+	 * XXX: Should check for non-NULL lims (node exists but may
+	 * not be in-mode) for interop with full-state API.
 	 */
 	if (ssa->ss.ss_family != AF_UNSPEC) {
 		/* Membership starts in IN mode */
@@ -1987,6 +2026,12 @@ in6p_join_group(struct inpcb *inp, struct sockopt *sopt)
 			error = ENOMEM;
 			goto out_im6o_free;
 		}
+	} else {
+		/* No address specified; Membership starts in EX mode */
+		if (is_new) {
+			CTR1(KTR_MLD, "%s: new join w/o source", __func__);
+			im6f_init(imf, MCAST_UNDEFINED, MCAST_EXCLUDE);
+		}
 	}
 
 	/*
@@ -2272,8 +2317,10 @@ out_im6f_rollback:
 
 	if (is_final) {
 		/* Remove the gap in the membership array. */
-		for (++idx; idx < imo->im6o_num_memberships; ++idx)
+		for (++idx; idx < imo->im6o_num_memberships; ++idx) {
 			imo->im6o_membership[idx-1] = imo->im6o_membership[idx];
+			imo->im6o_mfilters[idx-1] = imo->im6o_mfilters[idx];
+		}
 		imo->im6o_num_memberships--;
 	}
 
@@ -2340,9 +2387,11 @@ in6p_set_source_filters(struct inpcb *inp, struct sockopt *sopt)
 	if (error)
 		return (error);
 
-	if (msfr.msfr_nsrcs > in6_mcast_maxsocksrc ||
-	    (msfr.msfr_fmode != MCAST_EXCLUDE &&
-	     msfr.msfr_fmode != MCAST_INCLUDE))
+	if (msfr.msfr_nsrcs > in6_mcast_maxsocksrc)
+		return (ENOBUFS);
+
+	if (msfr.msfr_fmode != MCAST_EXCLUDE &&
+	    msfr.msfr_fmode != MCAST_INCLUDE)
 		return (EINVAL);
 
 	if (msfr.msfr_group.ss_family != AF_INET6 ||
diff --git a/sys/netinet6/mld6.c b/sys/netinet6/mld6.c
index 172a8d6eb8a..cade0d2b208 100644
--- a/sys/netinet6/mld6.c
+++ b/sys/netinet6/mld6.c
@@ -79,6 +79,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -131,7 +132,8 @@ static struct mbuf *
 static int	mld_v2_enqueue_filter_change(struct ifqueue *,
 		    struct in6_multi *);
 static int	mld_v2_enqueue_group_record(struct ifqueue *,
-		    struct in6_multi *, const int, const int, const int);
+		    struct in6_multi *, const int, const int, const int,
+		    const int);
 static int	mld_v2_input_query(struct ifnet *, const struct ip6_hdr *,
 		    struct mbuf *, const int, const int);
 static int	mld_v2_merge_state_changes(struct in6_multi *,
@@ -235,6 +237,11 @@ SYSCTL_INT(_net_inet6_mld, OID_AUTO, v1enable, CTLFLAG_RW,
     &mld_v1enable, 0, "Enable fallback to MLDv1");
 TUNABLE_INT("net.inet6.mld.v1enable", &mld_v1enable);
 
+static int	mld_use_allow = 1;
+SYSCTL_INT(_net_inet6_mld, OID_AUTO, use_allow, CTLFLAG_RW,
+    &mld_use_allow, 0, "Use ALLOW/BLOCK for RFC 4604 SSM joins/leaves");
+TUNABLE_INT("net.inet6.mld.use_allow", &mld_use_allow);
+
 /*
  * Packed Router Alert option structure declaration.
  */
@@ -460,6 +467,8 @@ mld_domifattach(struct ifnet *ifp)
 	mli = mli_alloc_locked(ifp);
 	if (!(ifp->if_flags & IFF_MULTICAST))
 		mli->mli_flags |= MLIF_SILENT;
+	if (mld_use_allow)
+		mli->mli_flags |= MLIF_USEALLOW;
 
 	MLD_UNLOCK();
 
@@ -1549,7 +1558,8 @@ mld_v2_process_group_timers(struct mld_ifinfo *mli,
 			int retval;
 
 			retval = mld_v2_enqueue_group_record(qrq, inm, 0, 1,
-			    (inm->in6m_state == MLD_SG_QUERY_PENDING_MEMBER));
+			    (inm->in6m_state == MLD_SG_QUERY_PENDING_MEMBER),
+			    0);
 			CTR2(KTR_MLD, "%s: enqueue record = %d",
 			    __func__, retval);
 			inm->in6m_state = MLD_REPORTING_MEMBER;
@@ -2024,7 +2034,7 @@ mld_initial_join(struct in6_multi *inm, struct mld_ifinfo *mli,
 			ifq = &inm->in6m_scq;
 			_IF_DRAIN(ifq);
 			retval = mld_v2_enqueue_group_record(ifq, inm, 1,
-			    0, 0);
+			    0, 0, (mli->mli_flags & MLIF_USEALLOW));
 			CTR2(KTR_MLD, "%s: enqueue record = %d",
 			    __func__, retval);
 			if (retval <= 0) {
@@ -2117,7 +2127,8 @@ mld_handle_state_change(struct in6_multi *inm, struct mld_ifinfo *mli)
 
 	_IF_DRAIN(&inm->in6m_scq);
 
-	retval = mld_v2_enqueue_group_record(&inm->in6m_scq, inm, 1, 0, 0);
+	retval = mld_v2_enqueue_group_record(&inm->in6m_scq, inm, 1, 0, 0,
+	    (mli->mli_flags & MLIF_USEALLOW));
 	CTR2(KTR_MLD, "%s: enqueue record = %d", __func__, retval);
 	if (retval <= 0)
 		return (-retval);
@@ -2202,7 +2213,8 @@ mld_final_leave(struct in6_multi *inm, struct mld_ifinfo *mli)
 				in6m_acquire_locked(inm);
 
 				retval = mld_v2_enqueue_group_record(
-				    &inm->in6m_scq, inm, 1, 0, 0);
+				    &inm->in6m_scq, inm, 1, 0, 0,
+				    (mli->mli_flags & MLIF_USEALLOW));
 				KASSERT(retval != 0,
 				    ("%s: enqueue record = %d", __func__,
 				     retval));
@@ -2249,6 +2261,10 @@ mld_final_leave(struct in6_multi *inm, struct mld_ifinfo *mli)
  * it was recorded for a Group-Source query, and will be omitted if
  * it is not both in-mode and recorded.
  *
+ * If use_block_allow is non-zero, state change reports for initial join
+ * and final leave, on an inclusive mode group with a source list, will be
+ * rewritten to use the ALLOW_NEW and BLOCK_OLD record types, respectively.
+ *
  * The function will attempt to allocate leading space in the packet
  * for the IPv6+ICMP headers to be prepended without fragmenting the chain.
  *
@@ -2259,7 +2275,7 @@ mld_final_leave(struct in6_multi *inm, struct mld_ifinfo *mli)
 static int
 mld_v2_enqueue_group_record(struct ifqueue *ifq, struct in6_multi *inm,
     const int is_state_change, const int is_group_query,
-    const int is_source_query)
+    const int is_source_query, const int use_block_allow)
 {
 	struct mldv2_record	 mr;
 	struct mldv2_record	*pmr;
@@ -2307,10 +2323,16 @@ mld_v2_enqueue_group_record(struct ifqueue *ifq, struct in6_multi *inm,
 		 * If the mode did not change, and there are non-ASM
 		 * listeners or source filters present,
 		 * we potentially need to issue two records for the group.
-		 * If we are transitioning to MCAST_UNDEFINED, we need
-		 * not send any sources.
 		 * If there are ASM listeners, and there was no filter
 		 * mode transition of any kind, do nothing.
+		 *
+		 * If we are transitioning to MCAST_UNDEFINED, we need
+		 * not send any sources. A transition to/from this state is
+		 * considered inclusive with some special treatment.
+		 *
+		 * If we are rewriting initial joins/leaves to use
+		 * ALLOW/BLOCK, and the group's membership is inclusive,
+		 * we need to send sources in all cases.
 		 */
 		if (mode != inm->in6m_st[0].iss_fmode) {
 			if (mode == MCAST_EXCLUDE) {
@@ -2320,9 +2342,26 @@ mld_v2_enqueue_group_record(struct ifqueue *ifq, struct in6_multi *inm,
 			} else {
 				CTR1(KTR_MLD, "%s: change to INCLUDE",
 				    __func__);
-				type = MLD_CHANGE_TO_INCLUDE_MODE;
-				if (mode == MCAST_UNDEFINED)
-					record_has_sources = 0;
+				if (use_block_allow) {
+					/*
+					 * XXX
+					 * Here we're interested in state
+					 * edges either direction between
+					 * MCAST_UNDEFINED and MCAST_INCLUDE.
+					 * Perhaps we should just check
+					 * the group state, rather than
+					 * the filter mode.
+					 */
+					if (mode == MCAST_UNDEFINED) {
+						type = MLD_BLOCK_OLD_SOURCES;
+					} else {
+						type = MLD_ALLOW_NEW_SOURCES;
+					}
+				} else {
+					type = MLD_CHANGE_TO_INCLUDE_MODE;
+					if (mode == MCAST_UNDEFINED)
+						record_has_sources = 0;
+				}
 			}
 		} else {
 			if (record_has_sources) {
@@ -2435,9 +2474,12 @@ mld_v2_enqueue_group_record(struct ifqueue *ifq, struct in6_multi *inm,
 	 * If we are appending to an existing packet, we need to obtain
 	 * a pointer to the group record after m_append(), in case a new
 	 * mbuf was allocated.
+	 *
 	 * Only append sources which are in-mode at t1. If we are
-	 * transitioning to MCAST_UNDEFINED state on the group, do not
-	 * include source entries.
+	 * transitioning to MCAST_UNDEFINED state on the group, and
+	 * use_block_allow is zero, do not include source entries.
+	 * Otherwise, we need to include this source in the report.
+	 *
 	 * Only report recorded sources in our filter set when responding
 	 * to a group-source query.
 	 */
@@ -2459,7 +2501,8 @@ mld_v2_enqueue_group_record(struct ifqueue *ifq, struct in6_multi *inm,
 			now = im6s_get_mode(inm, ims, 1);
 			CTR2(KTR_MLD, "%s: node is %d", __func__, now);
 			if ((now != mode) ||
-			    (now == mode && mode == MCAST_UNDEFINED)) {
+			    (now == mode &&
+			     (!use_block_allow && mode == MCAST_UNDEFINED))) {
 				CTR1(KTR_MLD, "%s: skip node", __func__);
 				continue;
 			}
@@ -2549,7 +2592,8 @@ mld_v2_enqueue_group_record(struct ifqueue *ifq, struct in6_multi *inm,
 			    __func__, ip6_sprintf(ip6tbuf, &ims->im6s_addr));
 			now = im6s_get_mode(inm, ims, 1);
 			if ((now != mode) ||
-			    (now == mode && mode == MCAST_UNDEFINED)) {
+			    (now == mode &&
+			     (!use_block_allow && mode == MCAST_UNDEFINED))) {
 				CTR1(KTR_MLD, "%s: skip node", __func__);
 				continue;
 			}
@@ -2960,7 +3004,7 @@ mld_v2_dispatch_general_query(struct mld_ifinfo *mli)
 		case MLD_AWAKENING_MEMBER:
 			inm->in6m_state = MLD_REPORTING_MEMBER;
 			retval = mld_v2_enqueue_group_record(&mli->mli_gq,
-			    inm, 0, 0, 0);
+			    inm, 0, 0, 0, 0);
 			CTR2(KTR_MLD, "%s: enqueue record = %d",
 			    __func__, retval);
 			break;
diff --git a/sys/netinet6/mld6_var.h b/sys/netinet6/mld6_var.h
index efd01abb559..e62ec236ce5 100644
--- a/sys/netinet6/mld6_var.h
+++ b/sys/netinet6/mld6_var.h
@@ -55,6 +55,7 @@ struct mld_ifinfo {
 	struct ifqueue	 mli_gq;	/* queue of general query responses */
 };
 #define MLIF_SILENT	0x00000001	/* Do not use MLD on this ifp */
+#define MLIF_USEALLOW	0x00000002	/* Use ALLOW/BLOCK for joins/leaves */
 
 #define MLD_RANDOM_DELAY(X)		(arc4random() % (X) + 1)
 #define MLD_MAX_STATE_CHANGES		24 /* Max pending changes per group */
diff --git a/sys/netinet6/nd6.c b/sys/netinet6/nd6.c
index 3225b82f30d..d90520eded1 100644
--- a/sys/netinet6/nd6.c
+++ b/sys/netinet6/nd6.c
@@ -439,31 +439,27 @@ skip1:
 void
 nd6_llinfo_settimer_locked(struct llentry *ln, long tick)
 {
+	int canceled;
+
 	if (tick < 0) {
 		ln->la_expire = 0;
 		ln->ln_ntick = 0;
-		callout_stop(&ln->ln_timer_ch);
-		/*
-		 * XXX - do we know that there is
-		 * callout installed? i.e. are we 
-		 * guaranteed that we're not dropping
-		 * a reference that we did not add?
-		 * KMM 
-		 */
-		LLE_REMREF(ln);
+		canceled = callout_stop(&ln->ln_timer_ch);
 	} else {
 		ln->la_expire = time_second + tick / hz;
 		LLE_ADDREF(ln);
 		if (tick > INT_MAX) {
 			ln->ln_ntick = tick - INT_MAX;
-			callout_reset(&ln->ln_timer_ch, INT_MAX,
+			canceled = callout_reset(&ln->ln_timer_ch, INT_MAX,
 			    nd6_llinfo_timer, ln);
 		} else {
 			ln->ln_ntick = 0;
-			callout_reset(&ln->ln_timer_ch, tick,
+			canceled = callout_reset(&ln->ln_timer_ch, tick,
 			    nd6_llinfo_timer, ln);
 		}
 	}
+	if (canceled)
+		LLE_REMREF(ln);
 }
 
 void
@@ -939,8 +935,28 @@ nd6_is_new_addr_neighbor(struct sockaddr_in6 *addr, struct ifnet *ifp)
 		if (pr->ndpr_ifp != ifp)
 			continue;
 
-		if (!(pr->ndpr_stateflags & NDPRF_ONLINK))
-			continue;
+		if (!(pr->ndpr_stateflags & NDPRF_ONLINK)) {
+			struct rtentry *rt;
+			rt = rtalloc1((struct sockaddr *)&pr->ndpr_prefix, 0, 0);
+			if (rt == NULL)
+				continue;
+			/*
+			 * This is the case where multiple interfaces
+			 * have the same prefix, but only one is installed 
+			 * into the routing table and that prefix entry
+			 * is not the one being examined here. In the case
+			 * where RADIX_MPATH is enabled, multiple route
+			 * entries (of the same rt_key value) will be 
+			 * installed because the interface addresses all
+			 * differ.
+			 */
+			if (!IN6_ARE_ADDR_EQUAL(&pr->ndpr_prefix.sin6_addr,
+			       &((struct sockaddr_in6 *)rt_key(rt))->sin6_addr)) {
+				RTFREE_LOCKED(rt);
+				continue;
+			}
+			RTFREE_LOCKED(rt);
+		}
 
 		if (IN6_ARE_MASKED_ADDR_EQUAL(&pr->ndpr_prefix.sin6_addr,
 		    &addr->sin6_addr, &pr->ndpr_mask))
@@ -1048,6 +1064,9 @@ nd6_free(struct llentry *ln, int gc)
 			else
 				nd6_llinfo_settimer(ln, (long)V_nd6_gctimer * hz);
 			splx(s);
+			LLE_WLOCK(ln);
+			LLE_REMREF(ln);
+			LLE_WUNLOCK(ln);
 			return (LIST_NEXT(ln, lle_next));
 		}
 
diff --git a/sys/netinet6/nd6_rtr.c b/sys/netinet6/nd6_rtr.c
index 23be4c5232c..74f4954bf0f 100644
--- a/sys/netinet6/nd6_rtr.c
+++ b/sys/netinet6/nd6_rtr.c
@@ -1629,7 +1629,7 @@ nd6_prefix_onlink(struct nd_prefix *pr)
 	bzero(&mask6, sizeof(mask6));
 	mask6.sin6_len = sizeof(mask6);
 	mask6.sin6_addr = pr->ndpr_mask;
-	rtflags = ifa->ifa_flags | RTF_UP;
+	rtflags = (ifa->ifa_flags & ~IFA_RTSELF) | RTF_UP;
 	error = rtrequest(RTM_ADD, (struct sockaddr *)&pr->ndpr_prefix,
 	    ifa->ifa_addr, (struct sockaddr *)&mask6, rtflags, &rt);
 	if (error == 0) {
diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c
index 108742d55b6..9f1236ab1bd 100644
--- a/sys/netinet6/raw_ip6.c
+++ b/sys/netinet6/raw_ip6.c
@@ -184,7 +184,7 @@ rip6_input(struct mbuf **mp, int *offp, int proto)
 		if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_faddr) &&
 		    !IN6_ARE_ADDR_EQUAL(&in6p->in6p_faddr, &ip6->ip6_src))
 			continue;
-		if (jailed(in6p->inp_cred)) {
+		if (jailed_without_vnet(in6p->inp_cred)) {
 			/*
 			 * Allow raw socket in jail to receive multicast;
 			 * assume process had PRIV_NETINET_RAW at attach,
@@ -213,17 +213,39 @@ rip6_input(struct mbuf **mp, int *offp, int proto)
 		 */
 		if (in6p->in6p_moptions &&
 		    IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) {
-			struct sockaddr_in6 mcaddr;
+			/*
+			 * If the incoming datagram is for MLD, allow it
+			 * through unconditionally to the raw socket.
+			 *
+			 * Use the M_RTALERT_MLD flag to check for MLD
+			 * traffic without having to inspect the mbuf chain
+			 * more deeply, as all MLDv1/v2 host messages MUST
+			 * contain the Router Alert option.
+			 *
+			 * In the case of MLDv1, we may not have explicitly
+			 * joined the group, and may have set IFF_ALLMULTI
+			 * on the interface. im6o_mc_filter() may discard
+			 * control traffic we actually need to see.
+			 *
+			 * Userland multicast routing daemons should continue
+			 * filter the control traffic appropriately.
+			 */
 			int blocked;
 
-			bzero(&mcaddr, sizeof(struct sockaddr_in6));
-			mcaddr.sin6_len = sizeof(struct sockaddr_in6);
-			mcaddr.sin6_family = AF_INET6;
-			mcaddr.sin6_addr = ip6->ip6_dst;
+			blocked = MCAST_PASS;
+			if ((m->m_flags & M_RTALERT_MLD) == 0) {
+				struct sockaddr_in6 mcaddr;
 
-			blocked = im6o_mc_filter(in6p->in6p_moptions, ifp,
-			    (struct sockaddr *)&mcaddr,
-			    (struct sockaddr *)&fromsa);
+				bzero(&mcaddr, sizeof(struct sockaddr_in6));
+				mcaddr.sin6_len = sizeof(struct sockaddr_in6);
+				mcaddr.sin6_family = AF_INET6;
+				mcaddr.sin6_addr = ip6->ip6_dst;
+
+				blocked = im6o_mc_filter(in6p->in6p_moptions,
+				    ifp,
+				    (struct sockaddr *)&mcaddr,
+				    (struct sockaddr *)&fromsa);
+			}
 			if (blocked != MCAST_PASS) {
 				IP6STAT_INC(ip6s_notmember);
 				continue;
diff --git a/sys/netipsec/ipcomp_var.h b/sys/netipsec/ipcomp_var.h
index a9dbe86f6e1..78f18488221 100644
--- a/sys/netipsec/ipcomp_var.h
+++ b/sys/netipsec/ipcomp_var.h
@@ -41,6 +41,7 @@
  */
 #define	IPCOMP_ALG_MAX	8
 
+#define	IPCOMPSTAT_VERSION	1
 struct ipcompstat {
 	u_int32_t	ipcomps_hdrops;	/* Packet shorter than header shows */
 	u_int32_t	ipcomps_nopf;	/* Protocol family not supported */
@@ -58,6 +59,9 @@ struct ipcompstat {
 	u_int32_t	ipcomps_pdrops;	/* Packet blocked due to policy */
 	u_int32_t	ipcomps_crypto;	/* "Crypto" processing failure */
 	u_int32_t	ipcomps_hist[IPCOMP_ALG_MAX];/* Per-algorithm op count */
+	u_int32_t	version;	/* Version of this structure. */
+	u_int32_t	ipcomps_threshold; /* Packet < comp. algo. threshold. */
+	u_int32_t	ipcomps_uncompr; /* Compression was useles. */
 };
 
 #ifdef _KERNEL
diff --git a/sys/netipsec/ipsec_mbuf.c b/sys/netipsec/ipsec_mbuf.c
index 97f97142d6b..ffbe6649b34 100644
--- a/sys/netipsec/ipsec_mbuf.c
+++ b/sys/netipsec/ipsec_mbuf.c
@@ -69,7 +69,7 @@ m_makespace(struct mbuf *m0, int skip, int hlen, int *off)
 	 * At this point skip is the offset into the mbuf m
 	 * where the new header should be placed.  Figure out
 	 * if there's space to insert the new header.  If so,
-	 * and copying the remainder makese sense then do so.
+	 * and copying the remainder makes sense then do so.
 	 * Otherwise insert a new mbuf in the chain, splitting
 	 * the contents of m as needed.
 	 */
diff --git a/sys/netipsec/key.c b/sys/netipsec/key.c
index 3cc5a6c2fdc..c5aa4b78ba8 100644
--- a/sys/netipsec/key.c
+++ b/sys/netipsec/key.c
@@ -2852,9 +2852,10 @@ key_newsav(m, mhp, sah, errp, where, tag)
 	sa_initref(newsav);
 	newsav->state = SADB_SASTATE_LARVAL;
 
-	/* XXX locking??? */
+	SAHTREE_LOCK();
 	LIST_INSERT_TAIL(&sah->savtree[SADB_SASTATE_LARVAL], newsav,
 			secasvar, chain);
+	SAHTREE_UNLOCK();
 done:
 	KEYDEBUG(KEYDEBUG_IPSEC_STAMP,
 		printf("DP %s from %s:%u return SP:%p\n", __func__,
@@ -5698,8 +5699,8 @@ key_delete(so, m, mhp)
 	}
 
 	key_sa_chgstate(sav, SADB_SASTATE_DEAD);
-	SAHTREE_UNLOCK();
 	KEY_FREESAV(&sav);
+	SAHTREE_UNLOCK();
 
     {
 	struct mbuf *n;
diff --git a/sys/netipsec/xform_ipcomp.c b/sys/netipsec/xform_ipcomp.c
index 4049154ac3e..d528d2abd60 100644
--- a/sys/netipsec/xform_ipcomp.c
+++ b/sys/netipsec/xform_ipcomp.c
@@ -68,7 +68,7 @@
 #include 
 #include 
 
-VNET_DEFINE(int, ipcomp_enable) = 0;
+VNET_DEFINE(int, ipcomp_enable) = 1;
 VNET_DEFINE(struct ipcompstat, ipcompstat);
 
 SYSCTL_DECL(_net_inet_ipcomp);
@@ -249,10 +249,8 @@ ipcomp_input_cb(struct cryptop *crp)
 
 		if (crp->crp_etype == EAGAIN) {
 			KEY_FREESAV(&sav);
-			error = crypto_dispatch(crp);
-			return error;
+			return crypto_dispatch(crp);
 		}
-
 		V_ipcompstat.ipcomps_noxform++;
 		DPRINTF(("%s: crypto error %d\n", __func__, crp->crp_etype));
 		error = crp->crp_etype;
@@ -330,34 +328,40 @@ ipcomp_output(
 {
 	struct secasvar *sav;
 	struct comp_algo *ipcompx;
-	int error, ralen, hlen, maxpacketsize, roff;
-	u_int8_t prot;
+	int error, ralen, maxpacketsize;
 	struct cryptodesc *crdc;
 	struct cryptop *crp;
 	struct tdb_crypto *tc;
-	struct mbuf *mo;
-	struct ipcomp *ipcomp;
 
 	sav = isr->sav;
 	IPSEC_ASSERT(sav != NULL, ("null SA"));
 	ipcompx = sav->tdb_compalgxform;
 	IPSEC_ASSERT(ipcompx != NULL, ("null compression xform"));
 
-	ralen = m->m_pkthdr.len - skip;	/* Raw payload length before comp. */
-	hlen = IPCOMP_HLENGTH;
+	/*
+	 * Do not touch the packet in case our payload to compress
+	 * is lower than the minimal threshold of the compression
+	 * alogrithm.  We will just send out the data uncompressed.
+	 * See RFC 3173, 2.2. Non-Expansion Policy.
+	 */
+	if (m->m_pkthdr.len <= ipcompx->minlen) {
+		V_ipcompstat.ipcomps_threshold++;
+		return ipsec_process_done(m, isr);
+	}
 
+	ralen = m->m_pkthdr.len - skip;	/* Raw payload length before comp. */
 	V_ipcompstat.ipcomps_output++;
 
 	/* Check for maximum packet size violations. */
 	switch (sav->sah->saidx.dst.sa.sa_family) {
 #ifdef INET
 	case AF_INET:
-		maxpacketsize =  IP_MAXPACKET;
+		maxpacketsize = IP_MAXPACKET;
 		break;
 #endif /* INET */
 #ifdef INET6
 	case AF_INET6:
-		maxpacketsize =  IPV6_MAXPACKET;
+		maxpacketsize = IPV6_MAXPACKET;
 		break;
 #endif /* INET6 */
 	default:
@@ -370,13 +374,13 @@ ipcomp_output(
 		error = EPFNOSUPPORT;
 		goto bad;
 	}
-	if (skip + hlen + ralen > maxpacketsize) {
+	if (ralen + skip + IPCOMP_HLENGTH > maxpacketsize) {
 		V_ipcompstat.ipcomps_toobig++;
 		DPRINTF(("%s: packet in IPCA %s/%08lx got too big "
 		    "(len %u, max len %u)\n", __func__,
 		    ipsec_address(&sav->sah->saidx.dst),
 		    (u_long) ntohl(sav->spi),
-		    skip + hlen + ralen, maxpacketsize));
+		    ralen + skip + IPCOMP_HLENGTH, maxpacketsize));
 		error = EMSGSIZE;
 		goto bad;
 	}
@@ -394,40 +398,7 @@ ipcomp_output(
 		goto bad;
 	}
 
-	/* Inject IPCOMP header */
-	mo = m_makespace(m, skip, hlen, &roff);
-	if (mo == NULL) {
-		V_ipcompstat.ipcomps_wrap++;
-		DPRINTF(("%s: IPCOMP header inject failed for IPCA %s/%08lx\n",
-		    __func__, ipsec_address(&sav->sah->saidx.dst),
-		    (u_long) ntohl(sav->spi)));
-		error = ENOBUFS;
-		goto bad;
-	}
-	ipcomp = (struct ipcomp *)(mtod(mo, caddr_t) + roff);
-
-	/* Initialize the IPCOMP header */
-	/* XXX alignment always correct? */
-	switch (sav->sah->saidx.dst.sa.sa_family) {
-#ifdef INET
-	case AF_INET:
-		ipcomp->comp_nxt = mtod(m, struct ip *)->ip_p;
-		break;
-#endif /* INET */
-#ifdef INET6
-	case AF_INET6:
-		ipcomp->comp_nxt = mtod(m, struct ip6_hdr *)->ip6_nxt;
-		break;
-#endif
-	}
-	ipcomp->comp_flags = 0;
-	ipcomp->comp_cpi = htons((u_int16_t) ntohl(sav->spi));
-
-	/* Fix Next Protocol in IPv4/IPv6 header */
-	prot = IPPROTO_IPCOMP;
-	m_copyback(m, protoff, sizeof(u_int8_t), (u_char *) &prot);
-
-	/* Ok now, we can pass to the crypto processing */
+	/* Ok now, we can pass to the crypto processing. */
 
 	/* Get crypto descriptors */
 	crp = crypto_getreq(1);
@@ -440,10 +411,10 @@ ipcomp_output(
 	crdc = crp->crp_desc;
 
 	/* Compression descriptor */
-	crdc->crd_skip = skip + hlen;
-	crdc->crd_len = m->m_pkthdr.len - (skip + hlen);
+	crdc->crd_skip = skip;
+	crdc->crd_len = ralen;
 	crdc->crd_flags = CRD_F_COMP;
-	crdc->crd_inject = skip + hlen;
+	crdc->crd_inject = skip;
 
 	/* Compression operation */
 	crdc->crd_alg = ipcompx->type;
@@ -463,7 +434,8 @@ ipcomp_output(
 	tc->tc_spi = sav->spi;
 	tc->tc_dst = sav->sah->saidx.dst;
 	tc->tc_proto = sav->sah->saidx.proto;
-	tc->tc_skip = skip + hlen;
+	tc->tc_protoff = protoff;
+	tc->tc_skip = skip;
 
 	/* Crypto operation descriptor */
 	crp->crp_ilen = m->m_pkthdr.len;	/* Total input length */
@@ -490,13 +462,12 @@ ipcomp_output_cb(struct cryptop *crp)
 	struct ipsecrequest *isr;
 	struct secasvar *sav;
 	struct mbuf *m;
-	int error, skip, rlen;
+	int error, skip;
 
 	tc = (struct tdb_crypto *) crp->crp_opaque;
 	IPSEC_ASSERT(tc != NULL, ("null opaque data area!"));
 	m = (struct mbuf *) crp->crp_buf;
 	skip = tc->tc_skip;
-	rlen = crp->crp_ilen - skip;
 
 	isr = tc->tc_isr;
 	IPSECREQUEST_LOCK(isr);
@@ -511,15 +482,14 @@ ipcomp_output_cb(struct cryptop *crp)
 
 	/* Check for crypto errors */
 	if (crp->crp_etype) {
-		/* Reset session ID */
+		/* Reset the session ID */
 		if (sav->tdb_cryptoid != 0)
 			sav->tdb_cryptoid = crp->crp_sid;
 
 		if (crp->crp_etype == EAGAIN) {
 			KEY_FREESAV(&sav);
 			IPSECREQUEST_UNLOCK(isr);
-			error = crypto_dispatch(crp);
-			return error;
+			return crypto_dispatch(crp);
 		}
 		V_ipcompstat.ipcomps_noxform++;
 		DPRINTF(("%s: crypto error %d\n", __func__, crp->crp_etype));
@@ -535,7 +505,46 @@ ipcomp_output_cb(struct cryptop *crp)
 	}
 	V_ipcompstat.ipcomps_hist[sav->alg_comp]++;
 
-	if (rlen > crp->crp_olen) {
+	if (crp->crp_ilen - skip > crp->crp_olen) {
+		struct mbuf *mo;
+		struct ipcomp *ipcomp;
+		int roff;
+		uint8_t prot;
+
+		/* Compression helped, inject IPCOMP header. */
+		mo = m_makespace(m, skip, IPCOMP_HLENGTH, &roff);
+		if (mo == NULL) {
+			V_ipcompstat.ipcomps_wrap++;
+			DPRINTF(("%s: IPCOMP header inject failed for IPCA %s/%08lx\n",
+			    __func__, ipsec_address(&sav->sah->saidx.dst),
+			    (u_long) ntohl(sav->spi)));
+			error = ENOBUFS;
+			goto bad;
+		}
+		ipcomp = (struct ipcomp *)(mtod(mo, caddr_t) + roff);
+
+		/* Initialize the IPCOMP header */
+		/* XXX alignment always correct? */
+		switch (sav->sah->saidx.dst.sa.sa_family) {
+#ifdef INET
+		case AF_INET:
+			ipcomp->comp_nxt = mtod(m, struct ip *)->ip_p;
+			break;
+#endif /* INET */
+#ifdef INET6
+		case AF_INET6:
+			ipcomp->comp_nxt = mtod(m, struct ip6_hdr *)->ip6_nxt;
+			break;
+#endif
+		}
+		ipcomp->comp_flags = 0;
+		ipcomp->comp_cpi = htons((u_int16_t) ntohl(sav->spi));
+
+		/* Fix Next Protocol in IPv4/IPv6 header */
+		prot = IPPROTO_IPCOMP;
+		m_copyback(m, tc->tc_protoff, sizeof(u_int8_t),
+		    (u_char *)&prot);
+
 		/* Adjust the length in the IP header */
 		switch (sav->sah->saidx.dst.sa.sa_family) {
 #ifdef INET
@@ -554,14 +563,18 @@ ipcomp_output_cb(struct cryptop *crp)
 			DPRINTF(("%s: unknown/unsupported protocol "
 			    "family %d, IPCA %s/%08lx\n", __func__,
 			    sav->sah->saidx.dst.sa.sa_family,
-			    ipsec_address(&sav->sah->saidx.dst), 
+			    ipsec_address(&sav->sah->saidx.dst),
 			    (u_long) ntohl(sav->spi)));
 			error = EPFNOSUPPORT;
 			goto bad;
 		}
 	} else {
-		/* compression was useless, we have lost time */
-		/* XXX add statistic */
+		/* Compression was useless, we have lost time. */
+		V_ipcompstat.ipcomps_uncompr++;
+		DPRINTF(("%s: compressions was useless %d - %d <= %d\n",
+		    __func__, crp->crp_ilen, skip, crp->crp_olen));
+		/* XXX remember state to not compress the next couple
+		 *     of packets, RFC 3173, 2.2. Non-Expansion Policy */
 	}
 
 	/* Release the crypto descriptor */
@@ -598,3 +611,13 @@ ipcomp_attach(void)
 }
 
 SYSINIT(ipcomp_xform_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE, ipcomp_attach, NULL);
+
+static void
+vnet_ipcomp_attach(const void *unused __unused)
+{
+
+	V_ipcompstat.version = IPCOMPSTAT_VERSION;
+}
+
+VNET_SYSINIT(vnet_ipcomp_xform_init, SI_SUB_PROTO_DOMAIN, SI_ORDER_MIDDLE,
+    vnet_ipcomp_attach, NULL);
diff --git a/sys/nfsclient/bootp_subr.c b/sys/nfsclient/bootp_subr.c
index e57b32a1bed..4377f74367b 100644
--- a/sys/nfsclient/bootp_subr.c
+++ b/sys/nfsclient/bootp_subr.c
@@ -584,6 +584,8 @@ bootpc_call(struct bootpc_globalcontext *gctx, struct thread *td)
 	int retry;
 	const char *s;
 
+	CURVNET_SET(TD_TO_VNET(td));
+
 	/*
 	 * Create socket and set its recieve timeout.
 	 */
@@ -960,6 +962,7 @@ gotreply:
 out:
 	soclose(so);
 out0:
+	CURVNET_RESTORE();
 	return error;
 }
 
@@ -974,6 +977,8 @@ bootpc_fakeup_interface(struct bootpc_ifcontext *ifctx,
 	struct ifaddr *ifa;
 	struct sockaddr_dl *sdl;
 
+	CURVNET_SET(TD_TO_VNET(td));
+
 	error = socreate(AF_INET, &ifctx->so, SOCK_DGRAM, 0, td->td_ucred, td);
 	if (error != 0)
 		panic("nfs_boot: socreate, error=%d", error);
@@ -1048,6 +1053,8 @@ bootpc_fakeup_interface(struct bootpc_ifcontext *ifctx,
 		      ifctx->ireq.ifr_name);
 	ifctx->sdl = sdl;
 
+	CURVNET_RESTORE();
+
 	return error;
 }
 
diff --git a/sys/nfsclient/krpc_subr.c b/sys/nfsclient/krpc_subr.c
index 996cb050bd7..c2a84506390 100644
--- a/sys/nfsclient/krpc_subr.c
+++ b/sys/nfsclient/krpc_subr.c
@@ -47,6 +47,7 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -55,6 +56,8 @@ __FBSDID("$FreeBSD$");
 #include 
 
 #include 
+#include 
+
 #include 
 
 #include 
@@ -213,6 +216,8 @@ krpc_call(struct sockaddr_in *sa, u_int prog, u_int vers, u_int func,
 	nam = mhead = NULL;
 	from = NULL;
 
+	CURVNET_SET(TD_TO_VNET(td));
+
 	/*
 	 * Create socket and set its recieve timeout.
 	 */
@@ -425,6 +430,7 @@ krpc_call(struct sockaddr_in *sa, u_int prog, u_int vers, u_int func,
 	if (mhead) m_freem(mhead);
 	if (from) free(from, M_SONAME);
 	soclose(so);
+	CURVNET_RESTORE();
 	return error;
 }
 
diff --git a/sys/nfsclient/nfs_vfsops.c b/sys/nfsclient/nfs_vfsops.c
index 17dc5d4b5de..0e100935f14 100644
--- a/sys/nfsclient/nfs_vfsops.c
+++ b/sys/nfsclient/nfs_vfsops.c
@@ -64,6 +64,8 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
+#include 
+
 #include 
 
 #include 
@@ -825,6 +827,8 @@ nfs_mount(struct mount *mp)
 	has_fh_opt = 0;
 	has_hostname_opt = 0;
 
+	CURVNET_SET(CRED_TO_VNET(curthread->td_ucred));
+
 	if (vfs_filteropt(mp->mnt_optnew, nfs_opts)) {
 		error = EINVAL;
 		goto out;
@@ -1124,6 +1128,7 @@ out:
 		mp->mnt_kern_flag |= (MNTK_MPSAFE|MNTK_LOOKUP_SHARED);
 		MNT_IUNLOCK(mp);
 	}
+	CURVNET_RESTORE();
 	return (error);
 }
 
diff --git a/sys/nfsclient/nfs_vnops.c b/sys/nfsclient/nfs_vnops.c
index dc619275aea..b3c28a3cdd0 100644
--- a/sys/nfsclient/nfs_vnops.c
+++ b/sys/nfsclient/nfs_vnops.c
@@ -1555,14 +1555,21 @@ nfs_create(struct vop_create_args *ap)
 	struct vattr vattr;
 	int v3 = NFS_ISV3(dvp);
 
+	CURVNET_SET(CRED_TO_VNET(curthread->td_ucred));
+
 	/*
 	 * Oops, not for me..
 	 */
-	if (vap->va_type == VSOCK)
-		return (nfs_mknodrpc(dvp, ap->a_vpp, cnp, vap));
-
-	if ((error = VOP_GETATTR(dvp, &vattr, cnp->cn_cred)) != 0)
+	if (vap->va_type == VSOCK) {
+		error = nfs_mknodrpc(dvp, ap->a_vpp, cnp, vap);
+		CURVNET_RESTORE();
 		return (error);
+	}
+
+	if ((error = VOP_GETATTR(dvp, &vattr, cnp->cn_cred)) != 0) {
+		CURVNET_RESTORE();
+		return (error);
+	}
 	if (vap->va_vaflags & VA_EXCLUSIVE)
 		fmode |= O_EXCL;
 again:
@@ -1658,6 +1665,7 @@ nfsmout:
 		KDTRACE_NFS_ATTRCACHE_FLUSH_DONE(dvp);
 	}
 	mtx_unlock(&(VTONFS(dvp))->n_mtx);
+	CURVNET_RESTORE();
 	return (error);
 }
 
diff --git a/sys/nfsserver/nfs_fha.c b/sys/nfsserver/nfs_fha.c
index 901a0ce512c..0469e4a1880 100644
--- a/sys/nfsserver/nfs_fha.c
+++ b/sys/nfsserver/nfs_fha.c
@@ -206,7 +206,7 @@ fha_extract_info(struct svc_req *req, struct fha_info *i)
 	if (error)
 		goto out;
 
-	i->fh = *(const u_int64_t *)(fh.fh_generic.fh_fid.fid_data);
+	bcopy(fh.fh_generic.fh_fid.fid_data, &i->fh, sizeof(i->fh));
 
 	/* Content ourselves with zero offset for all but reads. */
 	if (procnum != NFSPROC_READ)
diff --git a/sys/nfsserver/nfs_serv.c b/sys/nfsserver/nfs_serv.c
index 3bb9a6a2880..d1be5e55333 100644
--- a/sys/nfsserver/nfs_serv.c
+++ b/sys/nfsserver/nfs_serv.c
@@ -1810,10 +1810,9 @@ out:
 	}
 ereply:
 	nfsm_reply(NFSX_WCCDATA(v3));
-	if (v3) {
+	if (v3)
 		nfsm_srvwcc_data(dirfor_ret, &dirfor, diraft_ret, &diraft);
-		error = 0;
-	}
+	error = 0;
 nfsmout:
 	NDFREE(&nd, NDF_ONLY_PNBUF);
 	if (nd.ni_dvp) {
@@ -2187,8 +2186,8 @@ ereply:
 	if (v3) {
 		nfsm_srvpostop_attr(getret, &at);
 		nfsm_srvwcc_data(dirfor_ret, &dirfor, diraft_ret, &diraft);
-		error = 0;
 	}
+	error = 0;
 	/* fall through */
 
 nfsmout:
diff --git a/sys/opencrypto/crypto.c b/sys/opencrypto/crypto.c
index 0637c86411b..58107802fd7 100644
--- a/sys/opencrypto/crypto.c
+++ b/sys/opencrypto/crypto.c
@@ -57,6 +57,7 @@ __FBSDID("$FreeBSD$");
 #define	CRYPTO_TIMING				/* enable timing support */
 
 #include "opt_ddb.h"
+#include "opt_kdtrace.h"
 
 #include 
 #include 
@@ -68,6 +69,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include 
@@ -80,6 +82,8 @@ __FBSDID("$FreeBSD$");
 #include 
 #include "cryptodev_if.h"
 
+SDT_PROVIDER_DEFINE(opencrypto);
+
 /*
  * Crypto drivers register themselves by allocating a slot in the
  * crypto_drivers table with crypto_get_driverid() and then registering
diff --git a/sys/opencrypto/cryptosoft.c b/sys/opencrypto/cryptosoft.c
index 2769be6672d..97b73a214f4 100644
--- a/sys/opencrypto/cryptosoft.c
+++ b/sys/opencrypto/cryptosoft.c
@@ -552,7 +552,7 @@ swcr_compdec(struct cryptodesc *crd, struct swcr_data *sw,
 	sw->sw_size = result;
 	/* Check the compressed size when doing compression */
 	if (crd->crd_flags & CRD_F_COMP) {
-		if (result > crd->crd_len) {
+		if (result >= crd->crd_len) {
 			/* Compression was useless, we lost time */
 			free(out, M_CRYPTO_DATA);
 			return 0;
diff --git a/sys/opencrypto/deflate.c b/sys/opencrypto/deflate.c
index f4b4f48ff43..2113611ae0d 100644
--- a/sys/opencrypto/deflate.c
+++ b/sys/opencrypto/deflate.c
@@ -35,16 +35,30 @@
 #include 
 __FBSDID("$FreeBSD$");
 
+#include "opt_kdtrace.h"
+
 #include 
 #include 
 #include 
 #include 
+#include 
+#include 
 #include 
 #include 
 
 #include 
 #include 
 
+SDT_PROVIDER_DECLARE(opencrypto);
+SDT_PROBE_DEFINE2(opencrypto, deflate, deflate_global, entry,
+    "int", "u_int32_t");
+SDT_PROBE_DEFINE5(opencrypto, deflate, deflate_global, bad,
+    "int", "int", "int", "int", "int");
+SDT_PROBE_DEFINE5(opencrypto, deflate, deflate_global, iter,
+    "int", "int", "int", "int", "int");
+SDT_PROBE_DEFINE2(opencrypto, deflate, deflate_global, return,
+    "int", "u_int32_t");
+
 int window_inflate = -1 * MAX_WBITS;
 int window_deflate = -12;
 
@@ -65,111 +79,170 @@ deflate_global(data, size, decomp, out)
 	z_stream zbuf;
 	u_int8_t *output;
 	u_int32_t count, result;
-	int error, i = 0, j;
-	struct deflate_buf buf[ZBUF];
+	int error, i;
+	struct deflate_buf *bufh, *bufp;
 
-	bzero(&zbuf, sizeof(z_stream));
-	for (j = 0; j < ZBUF; j++)
-		buf[j].flag = 0;
-
-	zbuf.next_in = data;	/* data that is going to be processed */
-	zbuf.zalloc = z_alloc;
-	zbuf.zfree = z_free;
-	zbuf.opaque = Z_NULL;
-	zbuf.avail_in = size;	/* Total length of data to be processed */
+	SDT_PROBE2(opencrypto, deflate, deflate_global, entry, decomp, size);
 
+	bufh = bufp = NULL;
 	if (!decomp) {
-		buf[i].out = malloc((u_long) size, M_CRYPTO_DATA, 
-		    M_NOWAIT);
-		if (buf[i].out == NULL)
-			goto bad;
-		buf[i].size = size;
-		buf[i].flag = 1;
-		i++;
+		i = 1;
 	} else {
 		/*
 	 	 * Choose a buffer with 4x the size of the input buffer
 	 	 * for the size of the output buffer in the case of
 	 	 * decompression. If it's not sufficient, it will need to be
-	 	 * updated while the decompression is going on
+	 	 * updated while the decompression is going on.
 	 	 */
-
-		buf[i].out = malloc((u_long) (size * 4), 
-		    M_CRYPTO_DATA, M_NOWAIT);
-		if (buf[i].out == NULL)
-			goto bad;
-		buf[i].size = size * 4;
-		buf[i].flag = 1;
-		i++;
+		i = 4;
 	}
+	/*
+	 * Make sure we do have enough output space.  Repeated calls to
+	 * deflate need at least 6 bytes of output buffer space to avoid
+	 * repeated markers.  We will always provide at least 16 bytes.
+	 */
+	while ((size * i) < 16)
+		i++;
 
-	zbuf.next_out = buf[0].out;
-	zbuf.avail_out = buf[0].size;
+	bufh = bufp = malloc(sizeof(*bufp) + (size_t)(size * i),
+	    M_CRYPTO_DATA, M_NOWAIT);
+	if (bufp == NULL) {
+		SDT_PROBE3(opencrypto, deflate, deflate_global, bad,
+		    decomp, 0, __LINE__);
+		goto bad2;
+	}
+	bufp->next = NULL;
+	bufp->size = size * i;
+
+	bzero(&zbuf, sizeof(z_stream));
+	zbuf.zalloc = z_alloc;
+	zbuf.zfree = z_free;
+	zbuf.opaque = Z_NULL;
+	zbuf.next_in = data;	/* Data that is going to be processed. */
+	zbuf.avail_in = size;	/* Total length of data to be processed. */
+	zbuf.next_out = bufp->data;
+	zbuf.avail_out = bufp->size;
 
 	error = decomp ? inflateInit2(&zbuf, window_inflate) :
 	    deflateInit2(&zbuf, Z_DEFAULT_COMPRESSION, Z_METHOD,
 		    window_deflate, Z_MEMLEVEL, Z_DEFAULT_STRATEGY);
-
-	if (error != Z_OK)
+	if (error != Z_OK) {
+		SDT_PROBE3(opencrypto, deflate, deflate_global, bad,
+		    decomp, error, __LINE__);
 		goto bad;
-	for (;;) {
-		error = decomp ? inflate(&zbuf, Z_PARTIAL_FLUSH) :
-				 deflate(&zbuf, Z_PARTIAL_FLUSH);
-		if (error != Z_OK && error != Z_STREAM_END)
-			goto bad;
-		else if (zbuf.avail_in == 0 && zbuf.avail_out != 0)
-			goto end;
-		else if (zbuf.avail_out == 0 && i < (ZBUF - 1)) {
-			/* we need more output space, allocate size */
-			buf[i].out = malloc((u_long) size,
-			    M_CRYPTO_DATA, M_NOWAIT);
-			if (buf[i].out == NULL)
-				goto bad;
-			zbuf.next_out = buf[i].out;
-			buf[i].size = size;
-			buf[i].flag = 1;
-			zbuf.avail_out = buf[i].size;
-			i++;
-		} else
-			goto bad;
 	}
 
-end:
+	for (;;) {
+		error = decomp ? inflate(&zbuf, Z_SYNC_FLUSH) :
+				 deflate(&zbuf, Z_FINISH);
+		if (error != Z_OK && error != Z_STREAM_END) {
+			/*
+			 * Unfortunately we are limited to 5 arguments,
+			 * thus use two probes.
+			 */
+			SDT_PROBE5(opencrypto, deflate, deflate_global, bad,
+			    decomp, error, __LINE__,
+			    zbuf.avail_in, zbuf.avail_out);
+			SDT_PROBE5(opencrypto, deflate, deflate_global, bad,
+			    decomp, error, __LINE__,
+			    zbuf.state->dummy, zbuf.total_out);
+			goto bad;
+		}
+		SDT_PROBE5(opencrypto, deflate, deflate_global, iter,
+		    decomp, error, __LINE__,
+		    zbuf.avail_in, zbuf.avail_out);
+		SDT_PROBE5(opencrypto, deflate, deflate_global, iter,
+		    decomp, error, __LINE__,
+		    zbuf.state->dummy, zbuf.total_out);
+		if (decomp && zbuf.avail_in == 0 && error == Z_STREAM_END) {
+			/* Done. */
+			break;
+		} else if (!decomp && error == Z_STREAM_END) {
+			/* Done. */
+			break;
+		} else if (zbuf.avail_out == 0) {
+			struct deflate_buf *p;
+
+			/* We need more output space for another iteration. */
+			p = malloc(sizeof(*p) + (size_t)(size * i),
+			    M_CRYPTO_DATA, M_NOWAIT);
+			if (p == NULL) {
+				SDT_PROBE3(opencrypto, deflate, deflate_global,
+				    bad, decomp, 0, __LINE__);
+				goto bad;
+			}
+			p->next = NULL;
+			p->size = size * i;
+			bufp->next = p;
+			bufp = p;
+			zbuf.next_out = bufp->data;
+			zbuf.avail_out = bufp->size;
+		} else {
+			/* Unexpect result. */
+			/*
+			 * Unfortunately we are limited to 5 arguments,
+			 * thus, again, use two probes.
+			 */
+			SDT_PROBE5(opencrypto, deflate, deflate_global, bad,
+			    decomp, error, __LINE__,
+			    zbuf.avail_in, zbuf.avail_out);
+			SDT_PROBE5(opencrypto, deflate, deflate_global, bad,
+			    decomp, error, __LINE__,
+			    zbuf.state->dummy, zbuf.total_out);
+			goto bad;
+		}
+	}
+
 	result = count = zbuf.total_out;
 
-	*out = malloc((u_long) result, M_CRYPTO_DATA, M_NOWAIT);
-	if (*out == NULL)
+	*out = malloc(result, M_CRYPTO_DATA, M_NOWAIT);
+	if (*out == NULL) {
+		SDT_PROBE3(opencrypto, deflate, deflate_global, bad,
+		    decomp, 0, __LINE__);
 		goto bad;
+	}
 	if (decomp)
 		inflateEnd(&zbuf);
 	else
 		deflateEnd(&zbuf);
 	output = *out;
-	for (j = 0; buf[j].flag != 0; j++) {
-		if (count > buf[j].size) {
-			bcopy(buf[j].out, *out, buf[j].size);
-			*out += buf[j].size;
-			free(buf[j].out, M_CRYPTO_DATA);
-			count -= buf[j].size;
+	for (bufp = bufh; bufp != NULL; ) {
+		if (count > bufp->size) {
+			struct deflate_buf *p;
+
+			bcopy(bufp->data, *out, bufp->size);
+			*out += bufp->size;
+			count -= bufp->size;
+			p = bufp;
+			bufp = bufp->next;
+			free(p, M_CRYPTO_DATA);
 		} else {
-			/* it should be the last buffer */
-			bcopy(buf[j].out, *out, count);
+			/* It should be the last buffer. */
+			bcopy(bufp->data, *out, count);
 			*out += count;
-			free(buf[j].out, M_CRYPTO_DATA);
+			free(bufp, M_CRYPTO_DATA);
+			bufp = NULL;
 			count = 0;
 		}
 	}
 	*out = output;
+	SDT_PROBE2(opencrypto, deflate, deflate_global, return, decomp, result);
 	return result;
 
 bad:
-	*out = NULL;
-	for (j = 0; buf[j].flag != 0; j++)
-		free(buf[j].out, M_CRYPTO_DATA);
 	if (decomp)
 		inflateEnd(&zbuf);
 	else
 		deflateEnd(&zbuf);
+	for (bufp = bufh; bufp != NULL; ) {
+		struct deflate_buf *p;
+
+		p = bufp;
+		bufp = bufp->next;
+		free(p, M_CRYPTO_DATA);
+	}
+bad2:
+	*out = NULL;
 	return 0;
 }
 
diff --git a/sys/opencrypto/deflate.h b/sys/opencrypto/deflate.h
index 5c8ebd41e8d..dcf7a844135 100644
--- a/sys/opencrypto/deflate.h
+++ b/sys/opencrypto/deflate.h
@@ -47,10 +47,14 @@ u_int32_t deflate_global(u_int8_t *, u_int32_t, int, u_int8_t **);
 void *z_alloc(void *, u_int, u_int);
 void z_free(void *, void *);
 
+/*
+ * We are going to use a combined allocation to hold the metadata
+ * from the struct immediately followed by the real application data.
+ */
 struct deflate_buf {
-	u_int8_t *out;
-	u_int32_t size;
-	int flag;
+	struct deflate_buf *next;
+	uint32_t size;
+	uint8_t data[];
 };
 
 #endif /* _CRYPTO_DEFLATE_H_ */
diff --git a/sys/pc98/cbus/cbus_dma.c b/sys/pc98/cbus/cbus_dma.c
index 255f7e0ebd1..3d489e0c2b8 100644
--- a/sys/pc98/cbus/cbus_dma.c
+++ b/sys/pc98/cbus/cbus_dma.c
@@ -72,6 +72,8 @@ static u_int8_t	dma_bounced = 0;
 static u_int8_t	dma_busy = 0;		/* Used in isa_dmastart() */
 static u_int8_t	dma_inuse = 0;		/* User for acquire/release */
 static u_int8_t dma_auto_mode = 0;
+static struct mtx isa_dma_lock;
+MTX_SYSINIT(isa_dma_lock, &isa_dma_lock, "isa DMA lock", MTX_DEF);
 
 #define VALID_DMA_MASK (3)
 
@@ -93,22 +95,31 @@ isa_dma_init(int chan, u_int bouncebufsize, int flag)
 		panic("isa_dma_init: impossible request"); 
 #endif
 
-	dma_bouncebufsize[chan] = bouncebufsize;
 
 	/* Try malloc() first.  It works better if it works. */
 	buf = malloc(bouncebufsize, M_DEVBUF, flag);
 	if (buf != NULL) {
-		if (isa_dmarangecheck(buf, bouncebufsize, chan) == 0) {
-			dma_bouncebuf[chan] = buf;
-			return (0);
+		if (isa_dmarangecheck(buf, bouncebufsize, chan) != 0) {
+			free(buf, M_DEVBUF);
+			buf = NULL;
 		}
-		free(buf, M_DEVBUF);
 	}
-	buf = contigmalloc(bouncebufsize, M_DEVBUF, flag, 0ul, 0xfffffful,
+
+	if (buf == NULL) {
+		buf = contigmalloc(bouncebufsize, M_DEVBUF, flag, 0ul, 0xfffffful,
 			   1ul, chan & 4 ? 0x20000ul : 0x10000ul);
+	}
+
 	if (buf == NULL)
 		return (ENOMEM);
+
+	mtx_lock(&isa_dma_lock);
+
+	dma_bouncebufsize[chan] = bouncebufsize;
 	dma_bouncebuf[chan] = buf;
+
+	mtx_unlock(&isa_dma_lock);
+
 	return (0);
 }
 
@@ -125,12 +136,15 @@ isa_dma_acquire(chan)
 		panic("isa_dma_acquire: channel out of range");
 #endif
 
+	mtx_lock(&isa_dma_lock);
 	if (dma_inuse & (1 << chan)) {
 		printf("isa_dma_acquire: channel %d already in use\n", chan);
+		mtx_unlock(&isa_dma_lock);
 		return (EBUSY);
 	}
 	dma_inuse |= (1 << chan);
 	dma_auto_mode &= ~(1 << chan);
+	mtx_unlock(&isa_dma_lock);
 
 	return (0);
 }
@@ -147,8 +161,11 @@ isa_dma_release(chan)
 	if (chan & ~VALID_DMA_MASK)
 		panic("isa_dma_release: channel out of range");
 
+	mtx_lock(&isa_dma_lock);
 	if ((dma_inuse & (1 << chan)) == 0)
 		printf("isa_dma_release: channel %d not in use\n", chan);
+#else
+	mtx_lock(&isa_dma_lock);
 #endif
 
 	if (dma_busy & (1 << chan)) {
@@ -163,6 +180,8 @@ isa_dma_release(chan)
 
 	dma_inuse &= ~(1 << chan);
 	dma_auto_mode &= ~(1 << chan);
+
+	mtx_unlock(&isa_dma_lock);
 }
 
 /*
@@ -175,8 +194,11 @@ isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan)
 	vm_paddr_t phys;
 	int waport;
 	caddr_t newaddr;
+	int dma_range_checked;
 
-	GIANT_REQUIRED;
+	/* translate to physical */
+	phys = pmap_extract(kernel_pmap, (vm_offset_t)addr);
+	dma_range_checked = isa_dmarangecheck(addr, nbytes, chan);
 
 #ifdef DIAGNOSTIC
 	if (chan & ~VALID_DMA_MASK)
@@ -186,8 +208,11 @@ isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan)
 	    || (chan >= 4 && (nbytes > (1<<17) || (u_int)addr & 1)))
 		panic("isa_dmastart: impossible request");
 
+	mtx_lock(&isa_dma_lock);
 	if ((dma_inuse & (1 << chan)) == 0)
 		printf("isa_dmastart: channel %d not acquired\n", chan);
+#else
+	mtx_lock(&isa_dma_lock);
 #endif
 
 #if 0
@@ -202,7 +227,7 @@ isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan)
 
 	dma_busy |= (1 << chan);
 
-	if (isa_dmarangecheck(addr, nbytes, chan)) {
+	if (dma_range_checked) {
 		if (dma_bouncebuf[chan] == NULL
 		    || dma_bouncebufsize[chan] < nbytes)
 			panic("isa_dmastart: bad bounce buffer"); 
@@ -215,9 +240,6 @@ isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan)
 		addr = newaddr;
 	}
 
-	/* translate to physical */
-	phys = pmap_extract(kernel_pmap, (vm_offset_t)addr);
-
 	if (flags & ISADMA_RAW) {
 	    dma_auto_mode |= (1 << chan);
 	} else { 
@@ -255,6 +277,8 @@ isa_dmastart(int flags, caddr_t addr, u_int nbytes, int chan)
 
 	/* unmask channel */
 	outb(DMA1_SMSK, chan);
+
+	mtx_unlock(&isa_dma_lock);
 }
 
 void
@@ -275,6 +299,7 @@ isa_dmadone(int flags, caddr_t addr, int nbytes, int chan)
 		printf("isa_dmadone: channel %d not acquired\n", chan);
 #endif
 
+	mtx_lock(&isa_dma_lock);
 	if (((dma_busy & (1 << chan)) == 0) && 
 	    (dma_auto_mode & (1 << chan)) == 0 )
 		printf("isa_dmadone: channel %d not busy\n", chan);
@@ -290,6 +315,7 @@ isa_dmadone(int flags, caddr_t addr, int nbytes, int chan)
 		dma_bounced &= ~(1 << chan);
 	}
 	dma_busy &= ~(1 << chan);
+	mtx_unlock(&isa_dma_lock);
 }
 
 /*
@@ -306,8 +332,6 @@ isa_dmarangecheck(caddr_t va, u_int length, int chan)
 	vm_offset_t endva;
 	u_int dma_pgmsk = (chan & 4) ?  ~(128*1024-1) : ~(64*1024-1);
 
-	GIANT_REQUIRED;
-
 	endva = (vm_offset_t)round_page((vm_offset_t)va + length);
 	for (; va < (caddr_t) endva ; va += PAGE_SIZE) {
 		phys = trunc_page(pmap_extract(kernel_pmap, (vm_offset_t)va));
@@ -364,13 +388,15 @@ isa_dmarangecheck(caddr_t va, u_int length, int chan)
  * or -1 if the channel requested is not active.
  *
  */
-int
-isa_dmastatus(int chan)
+static int
+isa_dmastatus_locked(int chan)
 {
 	u_long	cnt = 0;
 	int	ffport, waport;
 	u_long	low1, high1, low2, high2;
 
+	mtx_assert(&isa_dma_lock, MA_OWNED);
+
 	/* channel active? */
 	if ((dma_inuse & (1 << chan)) == 0) {
 		printf("isa_dmastatus: channel %d not active\n", chan);
@@ -411,6 +437,18 @@ isa_dmastatus(int chan)
 	return(cnt);
 }
 
+int
+isa_dmastatus(int chan)
+{
+	int status;
+
+	mtx_lock(&isa_dma_lock);
+	status = isa_dmastatus_locked(chan);
+	mtx_unlock(&isa_dma_lock);
+
+	return (status);
+}
+
 /*
  * Reached terminal count yet ?
  */
@@ -427,19 +465,27 @@ isa_dmatc(int chan)
 int
 isa_dmastop(int chan) 
 {
+	int status;
+
+	mtx_lock(&isa_dma_lock);
 	if ((dma_inuse & (1 << chan)) == 0)
 		printf("isa_dmastop: channel %d not acquired\n", chan);  
 
 	if (((dma_busy & (1 << chan)) == 0) &&
 	    ((dma_auto_mode & (1 << chan)) == 0)) {
 		printf("chan %d not busy\n", chan);
+		mtx_unlock(&isa_dma_lock);
 		return -2 ;
 	}
     
 	if ((chan & 4) == 0)
 		outb(DMA1_SMSK, (chan & 3) | 4 /* disable mask */);
 
-	return(isa_dmastatus(chan));
+	status = isa_dmastatus_locked(chan);
+
+	mtx_unlock(&isa_dma_lock);
+
+	return (status);
 }
 
 /*
diff --git a/sys/pc98/cbus/gdc.c b/sys/pc98/cbus/gdc.c
index 3fb6c82d689..b048dad742c 100644
--- a/sys/pc98/cbus/gdc.c
+++ b/sys/pc98/cbus/gdc.c
@@ -395,12 +395,13 @@ gdcioctl(struct cdev *dev, u_long cmd, caddr_t arg, int flag, struct thread *td)
 }
 
 static int
-gdcmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int prot)
+gdcmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
     gdc_softc_t *sc;
 
     sc = GDC_SOFTC(GDC_UNIT(dev));
-    return genfbmmap(&sc->gensc, sc->adp, offset, paddr, prot);
+    return genfbmmap(&sc->gensc, sc->adp, offset, paddr, prot, memattr);
 }
 
 #endif /* FB_INSTALL_CDEV */
@@ -1337,8 +1338,8 @@ gdc_blank_display(video_adapter_t *adp, int mode)
  * Mmap frame buffer.
  */
 static int
-gdc_mmap_buf(video_adapter_t *adp, vm_offset_t offset, vm_offset_t *paddr,
-	     int prot)
+gdc_mmap_buf(video_adapter_t *adp, vm_ooffset_t offset, vm_offset_t *paddr,
+	     int prot, vm_memattr_t *memattr)
 {
     /* FIXME: is this correct? XXX */
     if (offset > VIDEO_BUF_SIZE - PAGE_SIZE)
diff --git a/sys/pc98/conf/GENERIC b/sys/pc98/conf/GENERIC
index 5212e775d54..858a43cb586 100644
--- a/sys/pc98/conf/GENERIC
+++ b/sys/pc98/conf/GENERIC
@@ -38,7 +38,7 @@ options 	SCHED_4BSD		# 4BSD scheduler
 #options 	PREEMPTION		# Enable kernel thread preemption
 options 	INET			# InterNETworking
 options 	INET6			# IPv6 communications protocols
-#options 	SCTP			# Stream Control Transmission Protocol
+options 	SCTP			# Stream Control Transmission Protocol
 options 	FFS			# Berkeley Fast Filesystem
 options 	SOFTUPDATES		# Enable FFS soft updates support
 options 	UFS_ACL			# Support for access control lists
@@ -46,13 +46,13 @@ options 	UFS_DIRHASH		# Improve performance on big directories
 options 	UFS_GJOURNAL		# Enable gjournal-based UFS journaling
 options 	MD_ROOT			# MD is a potential root device
 options 	NFSCLIENT		# Network Filesystem Client
-#options 	NFSSERVER		# Network Filesystem Server
-#options 	NFSLOCKD		# Network Lock Manager
+options 	NFSSERVER		# Network Filesystem Server
+options 	NFSLOCKD		# Network Lock Manager
 options 	NFS_ROOT		# NFS usable as /, requires NFSCLIENT
 options 	MSDOSFS			# MSDOS Filesystem
 options 	CD9660			# ISO 9660 Filesystem
-#options 	PROCFS			# Process filesystem (requires PSEUDOFS)
-#options 	PSEUDOFS		# Pseudo-filesystem framework
+options 	PROCFS			# Process filesystem (requires PSEUDOFS)
+options 	PSEUDOFS		# Pseudo-filesystem framework
 options 	GEOM_PART_GPT		# GUID Partition Tables.
 options 	GEOM_LABEL		# Provides labelization
 options 	COMPAT_43TTY		# BSD 4.3 TTY compat (sgtty)
@@ -66,9 +66,9 @@ options 	EPSON_BOUNCEDMA		# use bounce buffer for 15-16M
 #options 	LINE30
 options 	KTRACE			# ktrace(1) support
 options 	STACK			# stack(9) support
-#options 	SYSVSHM			# SYSV-style shared memory
-#options 	SYSVMSG			# SYSV-style message queues
-#options 	SYSVSEM			# SYSV-style semaphores
+options 	SYSVSHM			# SYSV-style shared memory
+options 	SYSVMSG			# SYSV-style message queues
+options 	SYSVSEM			# SYSV-style semaphores
 options 	P1003_1B_SEMAPHORES	# POSIX-style semaphores
 options 	_KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
 options 	KBD_INSTALL_CDEV	# install a CDEV entry in /dev
@@ -114,9 +114,9 @@ device		sym		# NCR/Symbios Logic (newer chipsets + those of `ncr')
 device		aic		# PC-9801-100
 device		ct		# host adapter using WD33C93[ABC] chip (C bus)
 
-#device		ncv		# NCR 53C500
-#device		nsp		# Workbit Ninja SCSI-3
-#device		stg		# TMC 18C30/18C50
+device		ncv		# NCR 53C500
+device		nsp		# Workbit Ninja SCSI-3
+device		stg		# TMC 18C30/18C50
 
 # SCSI peripherals
 device		scbus		# SCSI bus (required for SCSI)
@@ -155,9 +155,9 @@ device		sc
 
 # PCCARD (PCMCIA) support
 # PCMCIA and cardbus bridge support
-#device		cbb		# cardbus (yenta) bridge
-#device		pccard		# PC Card (16-bit) bus
-#device		cardbus		# CardBus (32-bit) bus
+device		cbb		# cardbus (yenta) bridge
+device		pccard		# PC Card (16-bit) bus
+device		cardbus		# CardBus (32-bit) bus
 
 # Serial (COM) ports
 #options 	COM_MULTIPORT
@@ -169,15 +169,15 @@ device		mse
 #device		joy
 
 # NEW Parallel port
-#device		ppc
-#device		ppbus		# Parallel port bus (required)
-#device		lpt		# Printer
-#device		plip		# TCP/IP over parallel
-#device		ppi		# Parallel port interface device
+device		ppc
+device		ppbus		# Parallel port bus (required)
+device		lpt		# Printer
+device		plip		# TCP/IP over parallel
+device		ppi		# Parallel port interface device
 #device		vpo		# Requires scbus and da
 # OLD Parallel port
 # Please stay olpt driver after ppc driver
-#device		olpt
+device		olpt
 
 # PCI Ethernet NICs.
 device		de		# DEC/Intel DC21x4x (``Tulip'')
@@ -241,6 +241,7 @@ device		xe		# Xircom pccard Ethernet
 device		loop		# Network loopback
 device		random		# Entropy device
 device		ether		# Ethernet support
+device		vlan		# 802.1Q VLAN support
 device		tun		# Packet tunnel.
 device		pty		# BSD-style compatibility pseudo ttys
 device		md		# Memory "disks"
diff --git a/sys/pc98/conf/NOTES b/sys/pc98/conf/NOTES
index 990fc94a2ea..03cabb1cdee 100644
--- a/sys/pc98/conf/NOTES
+++ b/sys/pc98/conf/NOTES
@@ -382,11 +382,8 @@ hint.mse.0.irq="13"
 # ie:   AT&T StarLAN 10 and EN100; 3Com 3C507; unknown NI5210;
 #       Intel EtherExpress
 # le:	AMD Am7900 LANCE and Am79C9xx ILACC/PCnet Ethernet interface driver
-# ral:	Ralink Technology IEEE 802.11 wireless adapter
 # sbni: Granch SBNI12-xx ISA and PCI adapters
 # snc:	National Semiconductor DP8393X SONIC Ethernet adapter driver
-# ural:	Ralink Technology RT2500USB IEEE 802.11 wireless adapter
-# ath:  Atheros a/b/g WiFi adapters (requires ath_hal and wlan)
 
 # Order for ISA/EISA devices is important here
 
@@ -408,7 +405,6 @@ hint.ie.2.maddr="0xd0000"
 hint.le.0.at="isa"
 hint.le.0.port="0x03d0"
 hint.le.0.irq="6"
-device		ral
 device		sbni
 hint.sbni.0.at="isa"
 hint.sbni.0.port="0x210"
@@ -419,22 +415,6 @@ hint.snc.0.at="isa"
 hint.snc.0.port="0x888"
 hint.snc.0.irq="6"
 hint.snc.0.maddr="0xc0000"
-device		ural
-
-device		ath		# Atheros pci/cardbus NIC's
-device		ath_hal		# pci/cardbus chip support
-#device		ath_ar5210	# AR5210 chips
-#device		ath_ar5211	# AR5211 chips
-#device		ath_ar5212	# AR5212 chips
-#device		ath_rf2413
-#device		ath_rf2417
-#device		ath_rf2425
-#device		ath_rf5111
-#device		ath_rf5112
-#device		ath_rf5413
-#device		ath_ar5416	# AR5416 chips
-options 	AH_SUPPORT_AR5416	# enable AR5416 tx/rx descriptors
-device		ath_rate_sample	# SampleRate tx rate control for ath
 
 #
 # SCSI host adapters:
diff --git a/sys/powerpc/aim/machdep.c b/sys/powerpc/aim/machdep.c
index 01272b45b6c..b2e57b8eead 100644
--- a/sys/powerpc/aim/machdep.c
+++ b/sys/powerpc/aim/machdep.c
@@ -130,7 +130,6 @@ extern vm_offset_t ksym_start, ksym_end;
 
 int cold = 1;
 int cacheline_size = 32;
-int ppc64 = 0;
 int hw_direct_map = 1;
 
 struct pcpu __pcpu[MAXCPU];
@@ -256,6 +255,7 @@ powerpc_init(u_int startkernel, u_int endkernel, u_int basekernel, void *mdp)
         char		*env;
 	uint32_t	msr, scratch;
 	uint8_t		*cache_check;
+	int		ppc64;
 
 	end = 0;
 	kmdp = NULL;
@@ -374,7 +374,7 @@ powerpc_init(u_int startkernel, u_int endkernel, u_int basekernel, void *mdp)
 	for (cacheline_size = 0; cacheline_size < 0x100; cacheline_size++)
 		cache_check[cacheline_size] = 0xff;
 
-	__asm __volatile("dcbz %0,0":: "r" (cache_check) : "memory");
+	__asm __volatile("dcbz 0,%0":: "r" (cache_check) : "memory");
 
 	/* Find the first byte dcbz did not zero to get the cache line size */
 	for (cacheline_size = 0; cacheline_size < 0x100 &&
@@ -405,12 +405,15 @@ powerpc_init(u_int startkernel, u_int endkernel, u_int basekernel, void *mdp)
 		mfsprg2 %1;"
 	    : "=r"(scratch), "=r"(ppc64));
 
+	if (ppc64)
+		cpu_features |= PPC_FEATURE_64;
+
 	/*
 	 * Now copy restorebridge into all the handlers, if necessary,
 	 * and set up the trap tables.
 	 */
 
-	if (ppc64) {
+	if (cpu_features & PPC_FEATURE_64) {
 		/* Patch the two instances of rfi -> rfid */
 		bcopy(&rfid_patch,&rfi_patch1,4);
 	#ifdef KDB
@@ -489,7 +492,7 @@ powerpc_init(u_int startkernel, u_int endkernel, u_int basekernel, void *mdp)
 	 * in case the platform module had a better idea of what we
 	 * should do.
 	 */
-	if (ppc64)
+	if (cpu_features & PPC_FEATURE_64)
 		pmap_mmu_install(MMU_TYPE_G5, BUS_PROBE_GENERIC);
 	else
 		pmap_mmu_install(MMU_TYPE_OEA, BUS_PROBE_GENERIC);
diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c
index 0fde1c981df..7fb9a791a1b 100644
--- a/sys/powerpc/aim/mmu_oea64.c
+++ b/sys/powerpc/aim/mmu_oea64.c
@@ -264,7 +264,6 @@ static struct	mem_region *pregions;
 extern u_int	phys_avail_count;
 extern int	regions_sz, pregions_sz;
 extern int	ofw_real_mode;
-static struct	ofw_map translations[96];
 
 extern struct pmap ofw_pmap;
 
@@ -708,18 +707,74 @@ moea64_bridge_cpu_bootstrap(mmu_t mmup, int ap)
 	tlbia();
 }
 
+static void
+moea64_add_ofw_mappings(mmu_t mmup, phandle_t mmu, size_t sz)
+{
+	struct ofw_map	translations[sz/sizeof(struct ofw_map)];
+	register_t	msr;
+	vm_offset_t	off;
+	int		i, ofw_mappings;
+
+	bzero(translations, sz);
+	if (OF_getprop(mmu, "translations", translations, sz) == -1)
+		panic("moea64_bootstrap: can't get ofw translations");
+
+	CTR0(KTR_PMAP, "moea64_add_ofw_mappings: translations");
+	sz /= sizeof(*translations);
+	qsort(translations, sz, sizeof (*translations), om_cmp);
+
+	for (i = 0, ofw_mappings = 0; i < sz; i++) {
+		CTR3(KTR_PMAP, "translation: pa=%#x va=%#x len=%#x",
+		    (uint32_t)(translations[i].om_pa_lo), translations[i].om_va,
+		    translations[i].om_len);
+
+		if (translations[i].om_pa_lo % PAGE_SIZE)
+			panic("OFW translation not page-aligned!");
+
+		if (translations[i].om_pa_hi)
+			panic("OFW translations above 32-bit boundary!");
+
+		/* Now enter the pages for this mapping */
+
+		/*
+		 * Lock the ofw pmap. pmap_kenter(), which we use for the
+		 * pages the kernel also needs, does its own locking.
+		 */
+		PMAP_LOCK(&ofw_pmap); 
+		DISABLE_TRANS(msr);
+		for (off = 0; off < translations[i].om_len; off += PAGE_SIZE) {
+			struct vm_page m;
+
+			/* Map low memory mappings into the kernel pmap, too.
+			 * These are typically mappings made by the loader,
+			 * so we need them if we want to keep executing. */
+
+			if (translations[i].om_va + off < SEGMENT_LENGTH)
+				moea64_kenter(mmup, translations[i].om_va + off,
+				    translations[i].om_va + off);
+
+			m.phys_addr = translations[i].om_pa_lo + off;
+			moea64_enter_locked(&ofw_pmap,
+			    translations[i].om_va + off, &m, VM_PROT_ALL, 1);
+
+			ofw_mappings++;
+		}
+		ENABLE_TRANS(msr);
+		PMAP_UNLOCK(&ofw_pmap);
+	}
+}
+
 static void
 moea64_bridge_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernelend)
 {
 	ihandle_t	mmui;
 	phandle_t	chosen;
 	phandle_t	mmu;
-	int		sz;
+	size_t		sz;
 	int		i, j;
-	int		ofw_mappings;
 	vm_size_t	size, physsz, hwphyssz;
 	vm_offset_t	pa, va, off;
-	uint32_t	msr;
+	register_t	msr;
 	void		*dpcpu;
 
 	/* We don't have a direct map since there is no BAT */
@@ -865,7 +920,6 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernele
 	off = (vm_offset_t)(moea64_bpvo_pool);
 	for (pa = off; pa < off + size; pa += PAGE_SIZE) 
 		moea64_kenter(mmup, pa, pa);
-	ENABLE_TRANS(msr);
 
 	/*
 	 * Map certain important things, like ourselves.
@@ -876,7 +930,6 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernele
 	 * address.
 	 */
 
-	DISABLE_TRANS(msr);
 	for (pa = kernelstart & ~PAGE_MASK; pa < kernelend; pa += PAGE_SIZE) 
 		moea64_kenter(mmup, pa, pa);
 	ENABLE_TRANS(msr);
@@ -897,57 +950,10 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernele
 		panic("moea64_bootstrap: can't get mmu package");
 	    if ((sz = OF_getproplen(mmu, "translations")) == -1)
 		panic("moea64_bootstrap: can't get ofw translation count");
-	    if (sz > sizeof(translations))
-		panic("moea64_bootstrap: too many ofw translations (%d)",
-		      sz/sizeof(*translations));
+	    if (sz > 6144 /* tmpstksz - 2 KB headroom */)
+		panic("moea64_bootstrap: too many ofw translations");
 
-	    bzero(translations, sz);
-	    if (OF_getprop(mmu, "translations", translations, sz) == -1)
-		panic("moea64_bootstrap: can't get ofw translations");
-
-	    CTR0(KTR_PMAP, "moea64_bootstrap: translations");
-	    sz /= sizeof(*translations);
-	    qsort(translations, sz, sizeof (*translations), om_cmp);
-
-	    for (i = 0, ofw_mappings = 0; i < sz; i++) {
-		CTR3(KTR_PMAP, "translation: pa=%#x va=%#x len=%#x",
-		    (uint32_t)(translations[i].om_pa_lo), translations[i].om_va,
-		    translations[i].om_len);
-
-		if (translations[i].om_pa_lo % PAGE_SIZE)
-			panic("OFW translation not page-aligned!");
-
-		if (translations[i].om_pa_hi)
-			panic("OFW translations above 32-bit boundary!");
-
-		/* Now enter the pages for this mapping */
-
-		/*
-		 * Lock the ofw pmap. pmap_kenter(), which we use for the
-		 * pages the kernel also needs, does its own locking.
-		 */
-		PMAP_LOCK(&ofw_pmap); 
-		DISABLE_TRANS(msr);
-		for (off = 0; off < translations[i].om_len; off += PAGE_SIZE) {
-			struct vm_page m;
-
-			/* Map low memory mappings into the kernel pmap, too.
-			 * These are typically mappings made by the loader,
-			 * so we need them if we want to keep executing. */
-
-			if (translations[i].om_va + off < SEGMENT_LENGTH)
-				moea64_kenter(mmup, translations[i].om_va + off,
-				    translations[i].om_va + off);
-
-			m.phys_addr = translations[i].om_pa_lo + off;
-			moea64_enter_locked(&ofw_pmap,
-			    translations[i].om_va + off, &m, VM_PROT_ALL, 1);
-
-			ofw_mappings++;
-		}
-		ENABLE_TRANS(msr);
-		PMAP_UNLOCK(&ofw_pmap);
-	    }
+	    moea64_add_ofw_mappings(mmup, mmu, sz);
 	}
 
 #ifdef SMP
diff --git a/sys/powerpc/aim/ofw_machdep.c b/sys/powerpc/aim/ofw_machdep.c
index 773d229d3a2..6e276970edd 100644
--- a/sys/powerpc/aim/ofw_machdep.c
+++ b/sys/powerpc/aim/ofw_machdep.c
@@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$");
 #include 
 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -336,7 +337,7 @@ openfirmware(void *args)
 		/*
 		 * Clear battable[] translations
 		 */
-		if (!ppc64) {
+		if (!(cpu_features & PPC_FEATURE_64)) {
 			__asm __volatile("mtdbatu 2, %0\n"
 					 "mtdbatu 3, %0" : : "r" (0));
 		}
diff --git a/sys/powerpc/aim/trap.c b/sys/powerpc/aim/trap.c
index 60c6bb07977..943e3c6de98 100644
--- a/sys/powerpc/aim/trap.c
+++ b/sys/powerpc/aim/trap.c
@@ -236,12 +236,6 @@ trap(struct trapframe *frame)
 		trap_fatal(frame);
 	}
 
-#ifdef	ALTIVEC
-	if (td != PCPU_GET(vecthread) ||
-	    td->td_pcb->pcb_veccpu != PCPU_GET(cpuid))
-		frame->srr1 &= ~PSL_VEC;
-#endif /* ALTIVEC */
-
 	if (sig != 0) {
 		if (p->p_sysent->sv_transtrap != NULL)
 			sig = (p->p_sysent->sv_transtrap)(sig, type);
@@ -497,9 +491,7 @@ trap_pfault(struct trapframe *frame, int user)
 		PROC_UNLOCK(p);
 
 		/* Fault in the user page: */
-		rv = vm_fault(map, va, ftype,
-		      (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY
-					      : VM_FAULT_NORMAL);
+		rv = vm_fault(map, va, ftype, VM_FAULT_NORMAL);
 
 		PROC_LOCK(p);
 		--p->p_lock;
diff --git a/sys/powerpc/booke/clock.c b/sys/powerpc/booke/clock.c
index 1d9043ebbed..74f7d7490c2 100644
--- a/sys/powerpc/booke/clock.c
+++ b/sys/powerpc/booke/clock.c
@@ -197,15 +197,8 @@ DELAY(int n)
 {
 	u_quad_t start, end, now;
 
-#define USECS_IN_SEC	1000000ULL
-
-	if (n > USECS_IN_SEC) {
-		printf("WARNING: %s(%d) called from %p", __func__, n,
-		    __builtin_return_address(0));
-	}
-
 	start = mftb();
-	end = start + (u_quad_t)ticks_per_sec / (USECS_IN_SEC / n);
+	end = start + (u_quad_t)ticks_per_sec / (1000000ULL / n);
 	do {
 		now = mftb();
 	} while (now < end || (now > start && end < start));
diff --git a/sys/powerpc/booke/machdep.c b/sys/powerpc/booke/machdep.c
index 1eace0e8e60..9f5960b6daa 100644
--- a/sys/powerpc/booke/machdep.c
+++ b/sys/powerpc/booke/machdep.c
@@ -179,7 +179,6 @@ SYSCTL_INT(_machdep, CPU_CACHELINE, cacheline_size,
 	   CTLFLAG_RD, &cacheline_size, 0, "");
 
 int hw_direct_map = 0;
-int ppc64 = 0;
 
 static void cpu_e500_startup(void *);
 SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST, cpu_e500_startup, NULL);
diff --git a/sys/powerpc/booke/trap.c b/sys/powerpc/booke/trap.c
index d98efb99292..db9be64fe35 100644
--- a/sys/powerpc/booke/trap.c
+++ b/sys/powerpc/booke/trap.c
@@ -497,8 +497,7 @@ trap_pfault(struct trapframe *frame, int user)
 		PROC_UNLOCK(p);
 
 		/* Fault in the user page: */
-		rv = vm_fault(map, va, ftype,
-		    (ftype & VM_PROT_WRITE) ? VM_FAULT_DIRTY : VM_FAULT_NORMAL);
+		rv = vm_fault(map, va, ftype, VM_FAULT_NORMAL);
 
 		PROC_LOCK(p);
 		--p->p_lock;
diff --git a/sys/powerpc/conf/GENERIC b/sys/powerpc/conf/GENERIC
index 7d9f9b09997..e34d8058850 100644
--- a/sys/powerpc/conf/GENERIC
+++ b/sys/powerpc/conf/GENERIC
@@ -131,6 +131,7 @@ device		fxp		# Intel EtherExpress PRO/100B (82557, 82558)
 device		loop		# Network loopback
 device		random		# Entropy device
 device		ether		# Ethernet support
+device		vlan		# 802.1Q VLAN support
 device		tun		# Packet tunnel.
 device		pty		# BSD-style compatibility pseudo ttys
 device		md		# Memory "disks"
@@ -155,6 +156,7 @@ options 	KBD_INSTALL_CDEV # install a CDEV entry in /dev
 device		ulpt		# Printer
 device		umass		# Disks/Mass storage - Requires scbus and da0
 device		ums		# Mouse
+device		atp		# Apple USB touchpad
 device		urio		# Diamond Rio 500 MP3 player
 # USB Ethernet
 device		aue		# ADMtek USB Ethernet
diff --git a/sys/powerpc/include/cpu.h b/sys/powerpc/include/cpu.h
index 9856ab0588e..16cabe7887c 100644
--- a/sys/powerpc/include/cpu.h
+++ b/sys/powerpc/include/cpu.h
@@ -39,6 +39,27 @@
 #include 
 #include 
 
+/*
+ * CPU Feature Attributes
+ *
+ * These are defined in the PowerPC ELF ABI for the AT_HWCAP vector,
+ * and are exported to userland via the machdep.cpu_features
+ * sysctl.
+ */
+
+extern int cpu_features;
+
+#define	PPC_FEATURE_32		0x80000000	/* Always true */
+#define	PPC_FEATURE_64		0x40000000	/* Defined on a 64-bit CPU */
+#define	PPC_FEATURE_HAS_ALTIVEC	0x10000000	
+#define	PPC_FEATURE_HAS_FPU	0x08000000
+#define	PPC_FEATURE_HAS_MMU	0x04000000
+#define PPC_FEATURE_UNIFIED_CACHE 0x01000000
+
+#define	PPC_FEATURE_BITMASK						\
+	"\20"								\
+	"\040PPC32\037PPC64\035ALTIVEC\034FPU\033MMU\031UNIFIEDCACHE"
+
 #define	TRAPF_USERMODE(frame)	(((frame)->srr1 & PSL_PR) != 0)
 #define	TRAPF_PC(frame)		((frame)->srr0)
 
diff --git a/sys/powerpc/include/md_var.h b/sys/powerpc/include/md_var.h
index d1785adfbe0..bfe5ed23829 100644
--- a/sys/powerpc/include/md_var.h
+++ b/sys/powerpc/include/md_var.h
@@ -46,7 +46,6 @@ extern	u_long	ns_per_tick;
 
 extern	int powerpc_pow_enabled;
 extern	int cacheline_size;
-extern  int ppc64;
 extern  int hw_direct_map;
 
 void	__syncicache(void *, int);
diff --git a/sys/powerpc/include/vmparam.h b/sys/powerpc/include/vmparam.h
index 8b6ef2b13fe..e77823363a1 100644
--- a/sys/powerpc/include/vmparam.h
+++ b/sys/powerpc/include/vmparam.h
@@ -38,23 +38,23 @@
 #define	USRSTACK	VM_MAXUSER_ADDRESS
 
 #ifndef	MAXTSIZ
-#define	MAXTSIZ		(16*1024*1024)		/* max text size */
+#define	MAXTSIZ		(64*1024*1024)		/* max text size */
 #endif
 
 #ifndef	DFLDSIZ
-#define	DFLDSIZ		(32*1024*1024)		/* default data size */
+#define	DFLDSIZ		(128*1024*1024)		/* default data size */
 #endif
 
 #ifndef	MAXDSIZ
-#define	MAXDSIZ		(512*1024*1024)		/* max data size */
+#define	MAXDSIZ		(1*1024*1024*1024)	/* max data size */
 #endif
 
 #ifndef	DFLSSIZ
-#define	DFLSSIZ		(1*1024*1024)		/* default stack size */
+#define	DFLSSIZ		(8*1024*1024)		/* default stack size */
 #endif
 
 #ifndef	MAXSSIZ
-#define	MAXSSIZ		(32*1024*1024)		/* max stack size */
+#define	MAXSSIZ		(64*1024*1024)		/* max stack size */
 #endif
 
 /*
diff --git a/sys/powerpc/mpc85xx/pci_ocp.c b/sys/powerpc/mpc85xx/pci_ocp.c
index b98f62c7e90..4fe4fbcb577 100644
--- a/sys/powerpc/mpc85xx/pci_ocp.c
+++ b/sys/powerpc/mpc85xx/pci_ocp.c
@@ -783,6 +783,7 @@ pci_ocp_alloc_resource(device_t dev, device_t child, int type, int *rid,
 			device_printf(dev, "%s requested ISA interrupt %lu\n",
 			    device_get_nameunit(child), start);
 		}
+		flags |= RF_SHAREABLE;
 		return (BUS_ALLOC_RESOURCE(device_get_parent(dev), child,
 		    type, rid, start, end, count, flags));
 	default:
diff --git a/sys/powerpc/ofw/ofw_syscons.c b/sys/powerpc/ofw/ofw_syscons.c
index 5ab5939fe6f..56d0ca8da1d 100644
--- a/sys/powerpc/ofw/ofw_syscons.c
+++ b/sys/powerpc/ofw/ofw_syscons.c
@@ -624,8 +624,8 @@ ofwfb_blank_display(video_adapter_t *adp, int mode)
 }
 
 static int
-ofwfb_mmap(video_adapter_t *adp, vm_offset_t offset, vm_paddr_t *paddr,
-    int prot)
+ofwfb_mmap(video_adapter_t *adp, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
 	struct ofwfb_softc *sc;
 	int i;
diff --git a/sys/powerpc/powermac/ata_dbdma.c b/sys/powerpc/powermac/ata_dbdma.c
index b08ade6bc07..c8f37581b42 100644
--- a/sys/powerpc/powermac/ata_dbdma.c
+++ b/sys/powerpc/powermac/ata_dbdma.c
@@ -204,7 +204,6 @@ static int
 ata_dbdma_load(struct ata_request *request, void *addr, int *entries)
 {
 	struct ata_channel *ch = device_get_softc(request->parent);
-	struct ata_device *atadev = device_get_softc(request->dev);
 	struct ata_dbdma_dmaload_args args;
 
 	int error;
@@ -230,7 +229,7 @@ ata_dbdma_load(struct ata_request *request, void *addr, int *entries)
 		return EIO;
 	}
 
-	request->dma = &ch->dma.slot[atadev->unit];
+	request->dma = &ch->dma.slot[0];
 
 	if ((error = bus_dmamap_load(request->dma->data_tag, 
 	    request->dma->data_map, request->data, request->bytecount,
diff --git a/sys/powerpc/powermac/ata_kauai.c b/sys/powerpc/powermac/ata_kauai.c
index 415d0fb0e69..f7b6daa5a7b 100644
--- a/sys/powerpc/powermac/ata_kauai.c
+++ b/sys/powerpc/powermac/ata_kauai.c
@@ -85,7 +85,7 @@ __FBSDID("$FreeBSD$");
  */
 static  int  ata_kauai_probe(device_t dev);
 static  int  ata_kauai_attach(device_t dev);
-static  void ata_kauai_setmode(device_t parent, device_t dev);
+static  int  ata_kauai_setmode(device_t dev, int target, int mode);
 static  int  ata_kauai_begin_transaction(struct ata_request *request);
 
 static device_method_t ata_kauai_methods[] = {
@@ -307,34 +307,26 @@ ata_kauai_attach(device_t dev)
 	return ata_attach(dev);
 }
 
-static void
-ata_kauai_setmode(device_t parent, device_t dev)
+static int
+ata_kauai_setmode(device_t dev, int target, int mode)
 {
-	struct ata_device *atadev = device_get_softc(dev);
-	struct ata_kauai_softc *sc = device_get_softc(parent);
-	uint32_t mode;
+	struct ata_kauai_softc *sc = device_get_softc(dev);
 
-	mode = ata_limit_mode(dev,atadev->mode, 
-	    (sc->shasta) ? ATA_UDMA6 : ATA_UDMA5);
-
-	if (ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
-		return;
-
-	atadev->mode = mode;
+	mode = min(mode,sc->shasta ? ATA_UDMA6 : ATA_UDMA5);
 
 	if (sc->shasta) {
 		switch (mode & ATA_DMA_MASK) {
 		    case ATA_UDMA0:
-			sc->udmaconf[atadev->unit] 
+			sc->udmaconf[target] 
 			    = udma_timing_shasta[mode & ATA_MODE_MASK];
 			break;
 		    case ATA_WDMA0:
-			sc->udmaconf[atadev->unit] = 0;
-			sc->wdmaconf[atadev->unit] 
+			sc->udmaconf[target] = 0;
+			sc->wdmaconf[target] 
 			    = dma_timing_shasta[mode & ATA_MODE_MASK];
 			break;
 		    default:
-			sc->pioconf[atadev->unit] 
+			sc->pioconf[target] 
 			    = pio_timing_shasta[(mode & ATA_MODE_MASK) - 
 			    ATA_PIO0];
 			break;
@@ -342,32 +334,33 @@ ata_kauai_setmode(device_t parent, device_t dev)
 	} else {
 		switch (mode & ATA_DMA_MASK) {
 		    case ATA_UDMA0:
-			sc->udmaconf[atadev->unit] 
+			sc->udmaconf[target] 
 			    = udma_timing_kauai[mode & ATA_MODE_MASK];
 			break;
 		    case ATA_WDMA0:
-			sc->udmaconf[atadev->unit] = 0;
-			sc->wdmaconf[atadev->unit]
+			sc->udmaconf[target] = 0;
+			sc->wdmaconf[target]
 			    = dma_timing_kauai[mode & ATA_MODE_MASK];
 			break;
 		    default:
-			sc->pioconf[atadev->unit] 
+			sc->pioconf[target] 
 			    = pio_timing_kauai[(mode & ATA_MODE_MASK)
 			    - ATA_PIO0];
 			break;
 		}
 	}
+
+	return (mode);
 }
 
 static int
 ata_kauai_begin_transaction(struct ata_request *request)
 {
-	struct ata_device *atadev = device_get_softc(request->dev);
 	struct ata_kauai_softc *sc = device_get_softc(request->parent);
 
-	bus_write_4(sc->sc_memr, UDMA_CONFIG_REG, sc->udmaconf[atadev->unit]);
+	bus_write_4(sc->sc_memr, UDMA_CONFIG_REG, sc->udmaconf[request->unit]);
 	bus_write_4(sc->sc_memr, PIO_CONFIG_REG, 
-	    sc->wdmaconf[atadev->unit] | sc->pioconf[atadev->unit]);
+	    sc->wdmaconf[request->unit] | sc->pioconf[request->unit]);
 
 	return ata_begin_transaction(request);
 }
diff --git a/sys/powerpc/powermac/ata_macio.c b/sys/powerpc/powermac/ata_macio.c
index 320e86e3381..447009da7ea 100644
--- a/sys/powerpc/powermac/ata_macio.c
+++ b/sys/powerpc/powermac/ata_macio.c
@@ -111,7 +111,7 @@ static const struct ide_timings udma_timings[5] = {
  * Define the macio ata bus attachment.
  */
 static  int  ata_macio_probe(device_t dev);
-static  void ata_macio_setmode(device_t parent, device_t dev);
+static  int  ata_macio_setmode(device_t dev, int target, int mode);
 static  int  ata_macio_attach(device_t dev);
 static  int  ata_macio_begin_transaction(struct ata_request *request);
 
@@ -193,7 +193,7 @@ ata_macio_probe(device_t dev)
 	ata_default_registers(dev);
 
 	ch->unit = 0;
-	ch->flags |= ATA_USE_16BIT;
+	ch->flags |= ATA_USE_16BIT | ATA_NO_ATAPI_DMA;
 	ata_generic_hw(dev);
 
 	return (ata_probe(dev));
@@ -247,26 +247,15 @@ ata_macio_attach(device_t dev)
 	return ata_attach(dev);
 }
 
-static void
-ata_macio_setmode(device_t parent, device_t dev)
+static int
+ata_macio_setmode(device_t dev, int target, int mode)
 {
-	struct ata_device *atadev = device_get_softc(dev);
-	struct ata_macio_softc *sc = device_get_softc(parent);
-	int mode = atadev->mode;
+	struct ata_macio_softc *sc = device_get_softc(dev);
 
 	int min_cycle = 0, min_active = 0;
         int cycle_tick = 0, act_tick = 0, inact_tick = 0, half_tick;
 
-	mode = ata_limit_mode(dev, mode, sc->max_mode);
-
-	/* XXX Some controllers don't work correctly with ATAPI DMA */
-	if (atadev->param.config & ATA_PROTO_ATAPI)
-		mode = ata_limit_mode(dev, mode, ATA_PIO_MAX);
-
-	if (ata_controlcmd(dev, ATA_SETFEATURES, ATA_SF_SETXFER, 0, mode))
-		return;
-
-	atadev->mode = mode;
+	mode = min(mode, sc->max_mode);
 
 	if ((mode & ATA_DMA_MASK) == ATA_UDMA0) {
 		min_cycle = udma_timings[mode & ATA_MODE_MASK].cycle;
@@ -276,7 +265,7 @@ ata_macio_setmode(device_t parent, device_t dev)
 		act_tick = ATA_TIME_TO_TICK(sc->rev,min_active);
 
 		/* mask: 0x1ff00000 */
-		sc->udmaconf[atadev->unit] =
+		sc->udmaconf[target] =
 		    (cycle_tick << 21) | (act_tick << 25) | 0x100000;
 	} else if ((mode & ATA_DMA_MASK) == ATA_WDMA0) {
 		min_cycle = dma_timings[mode & ATA_MODE_MASK].cycle;
@@ -288,7 +277,7 @@ ata_macio_setmode(device_t parent, device_t dev)
 		if (sc->rev == 4) {
 			inact_tick = cycle_tick - act_tick;
 			/* mask: 0x001ffc00 */
-			sc->wdmaconf[atadev->unit] = 
+			sc->wdmaconf[target] = 
 			    (act_tick << 10) | (inact_tick << 15);
 		} else {
 			inact_tick = cycle_tick - act_tick - DMA_REC_OFFSET;
@@ -297,7 +286,7 @@ ata_macio_setmode(device_t parent, device_t dev)
 			half_tick = 0;  /* XXX */
 
 			/* mask: 0xfffff800 */
-			sc->wdmaconf[atadev->unit] = (half_tick << 21) 
+			sc->wdmaconf[target] = (half_tick << 21) 
 			    | (inact_tick << 16) | (act_tick << 11);
 		}
 	} else {
@@ -313,7 +302,7 @@ ata_macio_setmode(device_t parent, device_t dev)
 			inact_tick = cycle_tick - act_tick;
 
 			/* mask: 0x000003ff */
-			sc->pioconf[atadev->unit] =
+			sc->pioconf[target] =
 			    (inact_tick << 5) | act_tick;
 		} else {
 			if (act_tick < PIO_ACT_MIN)
@@ -324,21 +313,22 @@ ata_macio_setmode(device_t parent, device_t dev)
 				inact_tick = PIO_REC_MIN;
 
 			/* mask: 0x000007ff */
-			sc->pioconf[atadev->unit] = 
+			sc->pioconf[target] = 
 			    (inact_tick << 5) | act_tick;
 		}
 	}
+
+	return (mode);
 }
 
 static int
 ata_macio_begin_transaction(struct ata_request *request)
 {
-	struct ata_device *atadev = device_get_softc(request->dev);
 	struct ata_macio_softc *sc = device_get_softc(request->parent);
 
 	bus_write_4(sc->sc_mem, ATA_MACIO_TIMINGREG, 
-	    sc->udmaconf[atadev->unit] | sc->wdmaconf[atadev->unit] 
-	    | sc->pioconf[atadev->unit]); 
+	    sc->udmaconf[request->unit] | sc->wdmaconf[request->unit] 
+	    | sc->pioconf[request->unit]); 
 
 	return ata_begin_transaction(request);
 }
diff --git a/sys/powerpc/powerpc/cpu.c b/sys/powerpc/powerpc/cpu.c
index b4224a4a673..ebf36ee161b 100644
--- a/sys/powerpc/powerpc/cpu.c
+++ b/sys/powerpc/powerpc/cpu.c
@@ -67,6 +67,7 @@
 #include 
 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -74,59 +75,102 @@
 
 int powerpc_pow_enabled;
 
+static void	cpu_6xx_setup(int cpuid, uint16_t vers);
+static void	cpu_e500_setup(int cpuid, uint16_t vers);
+static void	cpu_970_setup(int cpuid, uint16_t vers);
+
 struct cputab {
 	const char	*name;
 	uint16_t	version;
 	uint16_t	revfmt;
+	int		features;	/* Do not include PPC_FEATURE_32 or
+					 * PPC_FEATURE_HAS_MMU */
+	void		(*cpu_setup)(int cpuid, uint16_t vers);
 };
 #define	REVFMT_MAJMIN	1	/* %u.%u */
 #define	REVFMT_HEX	2	/* 0x%04x */
 #define	REVFMT_DEC	3	/* %u */
 static const struct cputab models[] = {
-        { "Motorola PowerPC 601",	MPC601,		REVFMT_DEC },
-        { "Motorola PowerPC 602",	MPC602,		REVFMT_DEC },
-        { "Motorola PowerPC 603",	MPC603,		REVFMT_MAJMIN },
-        { "Motorola PowerPC 603e",	MPC603e,	REVFMT_MAJMIN },
-        { "Motorola PowerPC 603ev",	MPC603ev,	REVFMT_MAJMIN },
-        { "Motorola PowerPC 604",	MPC604,		REVFMT_MAJMIN },
-        { "Motorola PowerPC 604ev",	MPC604ev,	REVFMT_MAJMIN },
-        { "Motorola PowerPC 620",	MPC620,		REVFMT_HEX },
-        { "Motorola PowerPC 750",	MPC750,		REVFMT_MAJMIN },
-        { "IBM PowerPC 750FX",		IBM750FX,	REVFMT_MAJMIN },
-        { "IBM PowerPC 970",		IBM970,		REVFMT_MAJMIN },
-        { "IBM PowerPC 970FX",		IBM970FX,	REVFMT_MAJMIN },
-        { "IBM PowerPC 970GX",		IBM970GX,	REVFMT_MAJMIN },
-        { "IBM PowerPC 970MP",		IBM970MP,	REVFMT_MAJMIN },
-        { "Motorola PowerPC 7400",	MPC7400,	REVFMT_MAJMIN },
-        { "Motorola PowerPC 7410",	MPC7410,	REVFMT_MAJMIN },
-        { "Motorola PowerPC 7450",	MPC7450,	REVFMT_MAJMIN },
-        { "Motorola PowerPC 7455",	MPC7455,	REVFMT_MAJMIN },
-        { "Motorola PowerPC 7457",	MPC7457,	REVFMT_MAJMIN },
-        { "Motorola PowerPC 7447A",	MPC7447A,	REVFMT_MAJMIN },
-        { "Motorola PowerPC 7448",	MPC7448,	REVFMT_MAJMIN },
-        { "Motorola PowerPC 8240",	MPC8240,	REVFMT_MAJMIN },
-        { "Freescale e500v1 core",	FSL_E500v1,	REVFMT_MAJMIN },
-        { "Freescale e500v2 core",	FSL_E500v2,	REVFMT_MAJMIN },
-        { "Unknown PowerPC CPU",	0,		REVFMT_HEX }
+        { "Motorola PowerPC 601",	MPC601,		REVFMT_DEC,
+	   PPC_FEATURE_HAS_FPU | PPC_FEATURE_UNIFIED_CACHE, cpu_6xx_setup },
+        { "Motorola PowerPC 602",	MPC602,		REVFMT_DEC,
+	   PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 603",	MPC603,		REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 603e",	MPC603e,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 603ev",	MPC603ev,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 604",	MPC604,		REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 604ev",	MPC604ev,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 620",	MPC620,		REVFMT_HEX,
+	   PPC_FEATURE_64 | PPC_FEATURE_HAS_FPU, NULL },
+        { "Motorola PowerPC 750",	MPC750,		REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "IBM PowerPC 750FX",		IBM750FX,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "IBM PowerPC 970",		IBM970,		REVFMT_MAJMIN,
+	   PPC_FEATURE_64 | PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU,
+	   cpu_970_setup },
+        { "IBM PowerPC 970FX",		IBM970FX,	REVFMT_MAJMIN,
+	   PPC_FEATURE_64 | PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU,
+	   cpu_970_setup },
+        { "IBM PowerPC 970GX",		IBM970GX,	REVFMT_MAJMIN,
+	   PPC_FEATURE_64 | PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU,
+	   cpu_970_setup },
+        { "IBM PowerPC 970MP",		IBM970MP,	REVFMT_MAJMIN,
+	   PPC_FEATURE_64 | PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU,
+	   cpu_970_setup },
+        { "Motorola PowerPC 7400",	MPC7400,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 7410",	MPC7410,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 7450",	MPC7450,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 7455",	MPC7455,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 7457",	MPC7457,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 7447A",	MPC7447A,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 7448",	MPC7448,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_ALTIVEC | PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 8240",	MPC8240,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Motorola PowerPC 8245",	MPC8245,	REVFMT_MAJMIN,
+	   PPC_FEATURE_HAS_FPU, cpu_6xx_setup },
+        { "Freescale e500v1 core",	FSL_E500v1,	REVFMT_MAJMIN,
+	   0, cpu_e500_setup },
+        { "Freescale e500v2 core",	FSL_E500v2,	REVFMT_MAJMIN,
+	   0, cpu_e500_setup },
+        { "Unknown PowerPC CPU",	0,		REVFMT_HEX, 0, NULL },
 };
 
+static void	cpu_6xx_print_cacheinfo(u_int, uint16_t);
+static int	cpu_feature_bit(SYSCTL_HANDLER_ARGS);
+
 static char model[64];
 SYSCTL_STRING(_hw, HW_MODEL, model, CTLFLAG_RD, model, 0, "");
 
-static void	cpu_print_speed(void);
+int cpu_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU;
+SYSCTL_OPAQUE(_hw, OID_AUTO, cpu_features, CTLTYPE_INT | CTLFLAG_RD,
+    &cpu_features, sizeof(cpu_features), "IX", "PowerPC CPU features");
 
-static void	cpu_6xx_setup(int cpuid, uint16_t vers);
-static void	cpu_6xx_print_cacheinfo(u_int, uint16_t);
-static void	cpu_e500_setup(int cpuid, uint16_t vers);
-#ifndef E500
-static void	cpu_970_setup(int cpuid, uint16_t vers);
-#endif
+/* Provide some user-friendly aliases for bits in cpu_features */
+SYSCTL_PROC(_hw, OID_AUTO, floatingpoint, CTLTYPE_INT | CTLFLAG_RD,
+    0, PPC_FEATURE_HAS_FPU, cpu_feature_bit, "I",
+    "Floating point instructions executed in hardware");
+SYSCTL_PROC(_hw, OID_AUTO, altivec, CTLTYPE_INT | CTLFLAG_RD,
+    0, PPC_FEATURE_HAS_ALTIVEC, cpu_feature_bit, "I", "CPU supports Altivec");
 
 void
 cpu_setup(u_int cpuid)
 {
 	u_int		pvr, maj, min;
 	uint16_t	vers, rev, revfmt;
+	uint64_t	cps;
 	const struct	cputab *cp;
 	const char	*name;
 
@@ -175,57 +219,19 @@ cpu_setup(u_int cpuid)
 			break;
 	}
 
+	if (cpu_est_clockrate(0, &cps) == 0)
+		printf(", %lld.%02lld MHz", cps / 1000000, (cps / 10000) % 100);
+	printf("\n");
+
+	cpu_features |= cp->features;
+	printf("cpu%d: Features %b\n", cpuid, cpu_features,
+	    PPC_FEATURE_BITMASK);
+
 	/*
 	 * Configure CPU
 	 */
-	switch (vers) {
-		case MPC603:
-		case MPC603e:
-		case MPC603ev:
-		case MPC604ev:
-		case MPC750:
-		case IBM750FX:
-		case MPC7400:
-		case MPC7410:
-		case MPC7447A:
-		case MPC7448:
-		case MPC7450:
-		case MPC7455:
-		case MPC7457:
-		case MPC8240:
-		case MPC8245:
-			cpu_6xx_setup(cpuid, vers);
-			break;
-
-#ifndef E500
-		case IBM970:
-		case IBM970FX:
-		case IBM970GX:
-		case IBM970MP:
-			cpu_970_setup(cpuid, vers);
-			break;
-#endif
-
-		case FSL_E500v1:
-		case FSL_E500v2:
-			cpu_e500_setup(cpuid, vers);
-			break;
-
-		default:
-			/* HID setup is unknown */
-			break;
-	}
-
-	printf("\n");
-}
-
-void
-cpu_print_speed(void)
-{
-	uint64_t	cps;
-	
-	if (cpu_est_clockrate(0, &cps) == 0)
-		printf(", %lld.%02lld MHz", cps / 1000000, (cps / 10000) % 100);
+	if (cp->cpu_setup != NULL)
+		cp->cpu_setup(cpuid, vers);
 }
 
 /* Get current clock frequency for the given cpu id. */
@@ -351,9 +357,6 @@ cpu_6xx_setup(int cpuid, uint16_t vers)
 
 	mtspr(SPR_HID0, hid0);
 
-	cpu_print_speed();
-	printf("\n");
-
 	if (bootverbose)
 		cpu_6xx_print_cacheinfo(cpuid, vers);
 
@@ -370,7 +373,7 @@ cpu_6xx_setup(int cpuid, uint16_t vers)
 			break;
 	}
 
-	printf("cpu%d: HID0 %b", cpuid, (int)hid0, bitmask);
+	printf("cpu%d: HID0 %b\n", cpuid, (int)hid0, bitmask);
 }
 
 
@@ -430,13 +433,13 @@ cpu_e500_setup(int cpuid, uint16_t vers)
 	register_t hid0;
 
 	hid0 = mfspr(SPR_HID0);
-	printf("cpu%d: HID0 %b", cpuid, (int)hid0, HID0_E500_BITMASK);
+	printf("cpu%d: HID0 %b\n", cpuid, (int)hid0, HID0_E500_BITMASK);
 }
 
-#ifndef E500
 static void
 cpu_970_setup(int cpuid, uint16_t vers)
 {
+#ifdef AIM
 	uint32_t hid0_hi, hid0_lo;
 
 	__asm __volatile ("mfspr %0,%2; clrldi %1,%0,32; srdi %0,%0,32;"
@@ -456,11 +459,19 @@ cpu_970_setup(int cpuid, uint16_t vers)
 		sync; isync"
 	    :: "r" (hid0_hi), "r"(hid0_lo), "K" (SPR_HID0));
 
-	cpu_print_speed();
-	printf("\n");
-
 	__asm __volatile ("mfspr %0,%1; srdi %0,%0,32;"
 	    : "=r" (hid0_hi) : "K" (SPR_HID0));
-	printf("cpu%d: HID0 %b", cpuid, (int)(hid0_hi), HID0_970_BITMASK);
-}
+	printf("cpu%d: HID0 %b\n", cpuid, (int)(hid0_hi), HID0_970_BITMASK);
 #endif
+}
+
+static int
+cpu_feature_bit(SYSCTL_HANDLER_ARGS)
+{
+	int result;
+
+	result = (cpu_features & arg2) ? 1 : 0;
+
+	return (sysctl_handle_int(oidp, &result, 0, req));
+}
+
diff --git a/sys/powerpc/powerpc/mem.c b/sys/powerpc/powerpc/mem.c
index 22d99c42bbe..d56d6345324 100644
--- a/sys/powerpc/powerpc/mem.c
+++ b/sys/powerpc/powerpc/mem.c
@@ -161,7 +161,8 @@ kmem_direct_mapped:	v = uio->uio_offset;
  * instead of going through read/write
  */
 int
-memmmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int prot)
+memmmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int prot, vm_memattr_t *memattr)
 {
 	/*
 	 * /dev/mem is the only one that makes sense through this
diff --git a/sys/powerpc/psim/ata_iobus.c b/sys/powerpc/psim/ata_iobus.c
index a70d0087a87..60f6c508870 100644
--- a/sys/powerpc/psim/ata_iobus.c
+++ b/sys/powerpc/psim/ata_iobus.c
@@ -210,7 +210,7 @@ ata_iobus_release_resource(device_t dev, device_t child, int type, int rid,
  */
 
 static  int  ata_iobus_sub_probe(device_t dev);
-static  void ata_iobus_sub_setmode(device_t parent, device_t dev);
+static  int  ata_iobus_sub_setmode(device_t dev, int target, int mode);
 
 static device_method_t ata_iobus_sub_methods[] = {
 	/* Device interface */
@@ -245,11 +245,9 @@ ata_iobus_sub_probe(device_t dev)
 	return ata_probe(dev);
 }
 
-static void
-ata_iobus_sub_setmode(device_t parent, device_t dev)
+static int
+ata_iobus_sub_setmode(device_t parent, int target, int mode)
 {
-	struct ata_device *atadev = device_get_softc(dev);
-
 	/* Only ever PIO mode here... */
-	atadev->mode = ATA_PIO;
+	return (ATA_PIO);
 }
diff --git a/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c b/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c
index b6e328e6760..55c0a8309ed 100644
--- a/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c
+++ b/sys/rpc/rpcsec_gss/svc_rpcsec_gss.c
@@ -100,7 +100,7 @@ struct svc_rpc_gss_callback {
 	rpc_gss_callback_t	cb_callback;
 };
 static SLIST_HEAD(svc_rpc_gss_callback_list, svc_rpc_gss_callback)
-	svc_rpc_gss_callbacks = SLIST_HEAD_INITIALIZER(&svc_rpc_gss_callbacks);
+	svc_rpc_gss_callbacks = SLIST_HEAD_INITIALIZER(svc_rpc_gss_callbacks);
 
 struct svc_rpc_gss_svc_name {
 	SLIST_ENTRY(svc_rpc_gss_svc_name) sn_link;
@@ -112,7 +112,7 @@ struct svc_rpc_gss_svc_name {
 	u_int			sn_version;
 };
 static SLIST_HEAD(svc_rpc_gss_svc_name_list, svc_rpc_gss_svc_name)
-	svc_rpc_gss_svc_names = SLIST_HEAD_INITIALIZER(&svc_rpc_gss_svc_names);
+	svc_rpc_gss_svc_names = SLIST_HEAD_INITIALIZER(svc_rpc_gss_svc_names);
 
 enum svc_rpc_gss_client_state {
 	CLIENT_NEW,				/* still authenticating */
diff --git a/sys/security/mac_lomac/mac_lomac.c b/sys/security/mac_lomac/mac_lomac.c
index 63a6a63a2f8..af9539ccd5e 100644
--- a/sys/security/mac_lomac/mac_lomac.c
+++ b/sys/security/mac_lomac/mac_lomac.c
@@ -2470,7 +2470,7 @@ lomac_vnode_check_open(struct ucred *cred, struct vnode *vp,
 	obj = SLOT(vplabel);
 
 	/* XXX privilege override for admin? */
-	if (accmode & (VWRITE | VAPPEND | VADMIN)) {
+	if (accmode & VMODIFY_PERMS) {
 		if (!lomac_subject_dominate(subj, obj))
 			return (EACCES);
 	}
diff --git a/sys/sparc64/central/central.c b/sys/sparc64/central/central.c
index 4ded549e70d..777660fdfeb 100644
--- a/sys/sparc64/central/central.c
+++ b/sys/sparc64/central/central.c
@@ -105,7 +105,9 @@ static driver_t central_driver = {
 
 static devclass_t central_devclass;
 
-DRIVER_MODULE(central, nexus, central_driver, central_devclass, 0, 0);
+EARLY_DRIVER_MODULE(central, nexus, central_driver, central_devclass, 0, 0,
+    BUS_PASS_BUS);
+MODULE_DEPEND(fhc, nexus, 1, 1, 1);
 MODULE_VERSION(central, 1);
 
 static int
diff --git a/sys/sparc64/conf/GENERIC b/sys/sparc64/conf/GENERIC
index 33e7838a577..a2953d1405f 100644
--- a/sys/sparc64/conf/GENERIC
+++ b/sys/sparc64/conf/GENERIC
@@ -216,6 +216,7 @@ device		ath_rate_sample	# SampleRate tx rate control for ath
 device		loop		# Network loopback
 device		random		# Entropy device
 device		ether		# Ethernet support
+device		vlan		# 802.1Q VLAN support
 device		tun		# Packet tunnel.
 device		pty		# BSD-style compatibility pseudo ttys
 device		md		# Memory "disks"
diff --git a/sys/sparc64/conf/NOTES b/sys/sparc64/conf/NOTES
index 211165a1fe8..e189286bd90 100644
--- a/sys/sparc64/conf/NOTES
+++ b/sys/sparc64/conf/NOTES
@@ -129,6 +129,7 @@ nodevice	ex
 # Options we don't want to deal with
 
 nooption	FDC_DEBUG
+nooption	COMPAT_FREEBSD4
 nooption	SC_RENDER_DEBUG
 nooption	SC_DEBUG_LEVEL
 nooption	PPC_DEBUG
diff --git a/sys/sparc64/ebus/ebus.c b/sys/sparc64/ebus/ebus.c
index 3bafaae3323..124eebb8204 100644
--- a/sys/sparc64/ebus/ebus.c
+++ b/sys/sparc64/ebus/ebus.c
@@ -1,6 +1,7 @@
 /*-
  * Copyright (c) 1999, 2000 Matthew R. Green
  * Copyright (c) 2001 Thomas Moestl 
+ * Copyright (c) 2009 by Marius Strobl 
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -33,7 +34,7 @@
 __FBSDID("$FreeBSD$");
 
 /*
- * UltraSPARC 5 and beyond EBus support
+ * Driver for JBus to EBus and PCI to EBus bridges
  */
 
 #include 
@@ -43,14 +44,17 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-#include 
-
 #include 
 
 #include 
 #include 
 #include 
 
+#include 
+#ifndef SUN4V
+#include 
+#endif
+#include 
 #include 
 
 #include 
@@ -59,11 +63,19 @@ __FBSDID("$FreeBSD$");
 #include 
 
 /*
- * The register, ranges and interrupt map properties are identical to the ISA
- * ones.
+ * The register, interrupt map and for the PCI variant also the ranges
+ * properties are identical to the ISA ones.
  */
 #include 
 
+struct ebus_nexus_ranges {
+	uint32_t	child_hi;
+	uint32_t	child_lo;
+	uint32_t	phys_hi;
+	uint32_t	phys_lo;
+	uint32_t	size;
+};
+
 struct ebus_devinfo {
 	struct ofw_bus_devinfo	edi_obdinfo;
 	struct resource_list	edi_rl;
@@ -76,32 +88,92 @@ struct ebus_rinfo {
 };
 
 struct ebus_softc {
-	struct isa_ranges	*sc_range;
+	void			*sc_range;
 	struct ebus_rinfo	*sc_rinfo;
 
+	u_int			sc_flags;
+#define	EBUS_PCI		(1 << 0)
+
 	int			sc_nrange;
 
 	struct ofw_bus_iinfo	sc_iinfo;
+
+#ifndef SUN4V
+	uint32_t		sc_ign;
+#endif
 };
 
-static device_probe_t ebus_probe;
-static device_attach_t ebus_attach;
+static device_probe_t ebus_nexus_probe;
+static device_attach_t ebus_nexus_attach;
+static device_probe_t ebus_pci_probe;
+static device_attach_t ebus_pci_attach;
 static bus_print_child_t ebus_print_child;
 static bus_probe_nomatch_t ebus_probe_nomatch;
 static bus_alloc_resource_t ebus_alloc_resource;
 static bus_release_resource_t ebus_release_resource;
+static bus_setup_intr_t ebus_setup_intr;
 static bus_get_resource_list_t ebus_get_resource_list;
 static ofw_bus_get_devinfo_t ebus_get_devinfo;
 
-static struct ebus_devinfo *ebus_setup_dinfo(device_t, struct ebus_softc *,
-    phandle_t);
-static void ebus_destroy_dinfo(struct ebus_devinfo *);
-static int ebus_print_res(struct ebus_devinfo *);
+static int ebus_attach(device_t dev, struct ebus_softc *sc, phandle_t node);
+static struct ebus_devinfo *ebus_setup_dinfo(device_t dev,
+    struct ebus_softc *sc, phandle_t node);
+static void ebus_destroy_dinfo(struct ebus_devinfo *edi);
+static int ebus_print_res(struct ebus_devinfo *edi);
 
-static device_method_t ebus_methods[] = {
+static devclass_t ebus_devclass;
+
+static device_method_t ebus_nexus_methods[] = {
 	/* Device interface */
-	DEVMETHOD(device_probe,		ebus_probe),
-	DEVMETHOD(device_attach,	ebus_attach),
+	DEVMETHOD(device_probe,		ebus_nexus_probe),
+	DEVMETHOD(device_attach,	ebus_nexus_attach),
+	DEVMETHOD(device_shutdown,	bus_generic_shutdown),
+	DEVMETHOD(device_suspend,	bus_generic_suspend),
+	DEVMETHOD(device_resume,	bus_generic_resume),
+
+	/* Bus interface */
+	DEVMETHOD(bus_print_child,	ebus_print_child),
+	DEVMETHOD(bus_probe_nomatch,	ebus_probe_nomatch),
+	DEVMETHOD(bus_alloc_resource,	ebus_alloc_resource),
+	DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
+	DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
+	DEVMETHOD(bus_release_resource,	ebus_release_resource),
+	DEVMETHOD(bus_setup_intr,	ebus_setup_intr),
+	DEVMETHOD(bus_teardown_intr,	bus_generic_teardown_intr),
+	DEVMETHOD(bus_get_resource,	bus_generic_rl_get_resource),
+	DEVMETHOD(bus_get_resource_list, ebus_get_resource_list),
+	DEVMETHOD(bus_child_pnpinfo_str, ofw_bus_gen_child_pnpinfo_str),
+
+	/* ofw_bus interface */
+	DEVMETHOD(ofw_bus_get_devinfo,	ebus_get_devinfo),
+	DEVMETHOD(ofw_bus_get_compat,	ofw_bus_gen_get_compat),
+	DEVMETHOD(ofw_bus_get_model,	ofw_bus_gen_get_model),
+	DEVMETHOD(ofw_bus_get_name,	ofw_bus_gen_get_name),
+	DEVMETHOD(ofw_bus_get_node,	ofw_bus_gen_get_node),
+	DEVMETHOD(ofw_bus_get_type,	ofw_bus_gen_get_type),
+
+	KOBJMETHOD_END
+};
+
+static driver_t ebus_nexus_driver = {
+	"ebus",
+	ebus_nexus_methods,
+	sizeof(struct ebus_softc),
+};
+
+/*
+ * NB: we rely on the interrupt controllers of the accompanying PCI-Express
+ * bridge to be registered as the nexus variant of the EBus bridges doesn't
+ * employ its own one.
+ */
+EARLY_DRIVER_MODULE(ebus, nexus, ebus_nexus_driver, ebus_devclass, 0, 0,
+    BUS_PASS_BUS + 1);
+MODULE_DEPEND(ebus, nexus, 1, 1, 1);
+
+static device_method_t ebus_pci_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_probe,		ebus_pci_probe),
+	DEVMETHOD(device_attach,	ebus_pci_attach),
 	DEVMETHOD(device_shutdown,	bus_generic_shutdown),
 	DEVMETHOD(device_suspend,	bus_generic_suspend),
 	DEVMETHOD(device_resume,	bus_generic_resume),
@@ -130,20 +202,33 @@ static device_method_t ebus_methods[] = {
 	KOBJMETHOD_END
 };
 
-static driver_t ebus_driver = {
+static driver_t ebus_pci_driver = {
 	"ebus",
-	ebus_methods,
+	ebus_pci_methods,
 	sizeof(struct ebus_softc),
 };
 
-static devclass_t ebus_devclass;
-
-DRIVER_MODULE(ebus, pci, ebus_driver, ebus_devclass, 0, 0);
+EARLY_DRIVER_MODULE(ebus, pci, ebus_pci_driver, ebus_devclass, 0, 0,
+    BUS_PASS_BUS);
 MODULE_DEPEND(ebus, pci, 1, 1, 1);
 MODULE_VERSION(ebus, 1);
 
 static int
-ebus_probe(device_t dev)
+ebus_nexus_probe(device_t dev)
+{
+	const char* compat;
+
+	compat = ofw_bus_get_compat(dev);
+	if (compat != NULL && strcmp(ofw_bus_get_name(dev), "ebus") == 0 &&
+	    strcmp(compat, "jbus-ebus") == 0) {
+		device_set_desc(dev, "JBus-EBus bridge");
+		return (BUS_PROBE_GENERIC);
+	}
+	return (ENXIO);
+}
+
+static int
+ebus_pci_probe(device_t dev)
 {
 
 	if (pci_get_class(dev) != PCIC_BRIDGE ||
@@ -157,27 +242,58 @@ ebus_probe(device_t dev)
 		device_set_desc(dev, "PCI-EBus3 bridge");
 	else
 		return (ENXIO);
-	return (0);
+	return (BUS_PROBE_GENERIC);
 }
 
 static int
-ebus_attach(device_t dev)
+ebus_nexus_attach(device_t dev)
+{
+	struct ebus_softc *sc;
+	phandle_t node;
+
+	sc = device_get_softc(dev);
+	node = ofw_bus_get_node(dev);
+
+#ifndef SUN4V
+	if (OF_getprop(node, "portid", &sc->sc_ign,
+	    sizeof(sc->sc_ign)) == -1) {
+		device_printf(dev, "could not determine IGN");
+		return (ENXIO);
+	}
+#endif
+
+	sc->sc_nrange = OF_getprop_alloc(node, "ranges",
+	    sizeof(struct ebus_nexus_ranges), &sc->sc_range);
+	if (sc->sc_nrange == -1) {
+		printf("%s: could not get ranges property\n", __func__);
+		return (ENXIO);
+	}
+	return (ebus_attach(dev, sc, node));
+}
+
+static int
+ebus_pci_attach(device_t dev)
 {
 	struct ebus_softc *sc;
-	struct ebus_devinfo *edi;
 	struct ebus_rinfo *eri;
 	struct resource *res;
-	device_t cdev;
 	phandle_t node;
 	int i, rnum, rid;
 
 	sc = device_get_softc(dev);
+	sc->sc_flags |= EBUS_PCI;
+
+	pci_write_config(dev, PCIR_COMMAND,
+	    pci_read_config(dev, PCIR_COMMAND, 2) | PCIM_CMD_SERRESPEN |
+	    PCIM_CMD_PERRESPEN | PCIM_CMD_BUSMASTEREN | PCIM_CMD_MEMEN, 2);
+	pci_write_config(dev, PCIR_CACHELNSZ, 16 /* 64 bytes */, 1);
+	pci_write_config(dev, PCIR_LATTIMER, 64 /* 64 PCI cycles */, 1);
 
 	node = ofw_bus_get_node(dev);
 	sc->sc_nrange = OF_getprop_alloc(node, "ranges",
-	    sizeof(*sc->sc_range), (void **)&sc->sc_range);
+	    sizeof(struct isa_ranges), &sc->sc_range);
 	if (sc->sc_nrange == -1) {
-		printf("ebus_attach: could not get ranges property\n");
+		printf("%s: could not get ranges property\n", __func__);
 		return (ENXIO);
 	}
 
@@ -187,29 +303,52 @@ ebus_attach(device_t dev)
 	/* For every range, there must be a matching resource. */
 	for (rnum = 0; rnum < sc->sc_nrange; rnum++) {
 		eri = &sc->sc_rinfo[rnum];
-		eri->eri_rtype = ofw_isa_range_restype(&sc->sc_range[rnum]);
+		eri->eri_rtype = ofw_isa_range_restype(
+		    &((struct isa_ranges *)sc->sc_range)[rnum]);
 		rid = PCIR_BAR(rnum);
 		res = bus_alloc_resource_any(dev, eri->eri_rtype, &rid,
 		    RF_ACTIVE);
 		if (res == NULL) {
-			printf("ebus_attach: failed to allocate range "
-			    "resource!\n");
+			printf("%s: failed to allocate range resource!\n",
+			    __func__);
 			goto fail;
 		}
 		eri->eri_res = res;
 		eri->eri_rman.rm_type = RMAN_ARRAY;
 		eri->eri_rman.rm_descr = "EBus range";
 		if (rman_init(&eri->eri_rman) != 0) {
-			printf("ebus_attach: failed to initialize rman!");
+			printf("%s: failed to initialize rman!", __func__);
 			goto fail;
 		}
 		if (rman_manage_region(&eri->eri_rman, rman_get_start(res),
 		    rman_get_end(res)) != 0) {
-			printf("ebus_attach: failed to register region!");
+			printf("%s: failed to register region!", __func__);
 			rman_fini(&eri->eri_rman);
 			goto fail;
 		}
 	}
+	return (ebus_attach(dev, sc, node));
+
+ fail:
+	for (i = rnum; i >= 0; i--) {
+		eri = &sc->sc_rinfo[i];
+		if (i < rnum)
+			rman_fini(&eri->eri_rman);
+		if (eri->eri_res != 0) {
+			bus_release_resource(dev, eri->eri_rtype,
+			    PCIR_BAR(rnum), eri->eri_res);
+		}
+	}
+	free(sc->sc_rinfo, M_DEVBUF);
+	free(sc->sc_range, M_OFWPROP);
+	return (ENXIO);
+}
+
+static int
+ebus_attach(device_t dev, struct ebus_softc *sc, phandle_t node)
+{
+	struct ebus_devinfo *edi;
+	device_t cdev;
 
 	ofw_bus_setup_iinfo(node, &sc->sc_iinfo, sizeof(ofw_isa_intr_t));
 
@@ -228,20 +367,6 @@ ebus_attach(device_t dev)
 		device_set_ivars(cdev, edi);
 	}
 	return (bus_generic_attach(dev));
-
-fail:
-	for (i = rnum; i >= 0; i--) {
-		eri = &sc->sc_rinfo[i];
-		if (i < rnum)
-			rman_fini(&eri->eri_rman);
-		if (eri->eri_res != 0) {
-			bus_release_resource(dev, eri->eri_rtype,
-			    PCIR_BAR(rnum), eri->eri_res);
-		}
-	}
-	free(sc->sc_rinfo, M_DEVBUF);
-	free(sc->sc_range, M_OFWPROP);
-	return (ENXIO);
 }
 
 static int
@@ -273,28 +398,26 @@ ebus_alloc_resource(device_t bus, device_t child, int type, int *rid,
 	struct resource_list_entry *rle = NULL;
 	struct resource *res;
 	struct ebus_rinfo *ri;
+	struct ebus_nexus_ranges *enr;
 	bus_space_tag_t bt;
 	bus_space_handle_t bh;
-	int passthrough = (device_get_parent(child) != bus);
-	int isdefault = (start == 0UL && end == ~0UL);
-	int ridx, rv;
+	uint64_t cend, cstart, offset;
+	int i, isdefault, passthrough, ridx, rv;
 
-	sc = (struct ebus_softc *)device_get_softc(bus);
+	isdefault = (start == 0UL && end == ~0UL);
+	passthrough = (device_get_parent(child) != bus);
+	sc = device_get_softc(bus);
 	rl = BUS_GET_RESOURCE_LIST(bus, child);
-	/*
-	 * Map EBus ranges to PCI ranges.  This may include changing the
-	 * allocation type.
-	 */
 	switch (type) {
 	case SYS_RES_MEMORY:
 		KASSERT(!(isdefault && passthrough),
-		    ("ebus_alloc_resource: passthrough of default alloc"));
+		    ("%s: passthrough of default allocation", __func__));
 		if (!passthrough) {
 			rle = resource_list_find(rl, type, *rid);
 			if (rle == NULL)
 				return (NULL);
 			KASSERT(rle->res == NULL,
-			    ("ebus_alloc_resource: resource entry is busy"));
+			    ("%s: resource entry is busy", __func__));
 			if (isdefault) {
 				start = rle->start;
 				count = ulmax(count, rle->count);
@@ -302,25 +425,53 @@ ebus_alloc_resource(device_t bus, device_t child, int type, int *rid,
 			}
 		}
 
-		(void)ofw_isa_range_map(sc->sc_range, sc->sc_nrange,
-		    &start, &end, &ridx);
+		res = NULL;
+		if ((sc->sc_flags & EBUS_PCI) != 0) {
+			/*
+			 * Map EBus ranges to PCI ranges.  This may include
+			 * changing the allocation type.
+			 */
+			(void)ofw_isa_range_map(sc->sc_range, sc->sc_nrange,
+			    &start, &end, &ridx);
+			ri = &sc->sc_rinfo[ridx];
+			res = rman_reserve_resource(&ri->eri_rman, start, end,
+			    count, flags, child);
+			if (res == NULL)
+				return (NULL);
+			rman_set_rid(res, *rid);
+			bt = rman_get_bustag(ri->eri_res);
+			rman_set_bustag(res, bt);
+			rv = bus_space_subregion(bt,
+			    rman_get_bushandle(ri->eri_res),
+			    rman_get_start(res) - rman_get_start(ri->eri_res),
+			    count, &bh);
+			if (rv != 0) {
+				rman_release_resource(res);
+				return (NULL);
+			}
+			rman_set_bushandle(res, bh);
+		} else {
+			/* Map EBus ranges to nexus ranges. */
+			for (i = 0; i < sc->sc_nrange; i++) {
+				enr = &((struct ebus_nexus_ranges *)
+				    sc->sc_range)[i];
+				cstart = (((uint64_t)enr->child_hi) << 32) |
+				    enr->child_lo;
+				cend = cstart + enr->size - 1;
+				if (start >= cstart && end <= cend) {
+					offset =
+					    (((uint64_t)enr->phys_hi) << 32) |
+					    enr->phys_lo;
+					start += offset - cstart;
+					end += offset - cstart;
+					res = bus_generic_alloc_resource(bus,
+					    child, type, rid, start, end,
+					    count, flags);
+					break;
+				}
+			}
 
-		ri = &sc->sc_rinfo[ridx];
-		res = rman_reserve_resource(&ri->eri_rman, start, end, count,
-		    flags, child);
-		if (res == NULL)
-			return (NULL);
-		rman_set_rid(res, *rid);
-		bt = rman_get_bustag(ri->eri_res);
-		rman_set_bustag(res, bt);
-		rv = bus_space_subregion(bt, rman_get_bushandle(ri->eri_res),
-		    rman_get_start(res) - rman_get_start(ri->eri_res), count,
-		    &bh);
-		if (rv != 0) {
-			rman_release_resource(res);
-			return (NULL);
 		}
-		rman_set_bushandle(res, bh);
 		if (!passthrough)
 			rle->res = res;
 		return (res);
@@ -335,34 +486,77 @@ static int
 ebus_release_resource(device_t bus, device_t child, int type, int rid,
     struct resource *res)
 {
+	struct ebus_softc *sc;
 	struct resource_list *rl;
 	struct resource_list_entry *rle;
-	int passthrough = (device_get_parent(child) != bus);
-	int rv;
+	int passthrough, rv;
 
+	passthrough = (device_get_parent(child) != bus);
 	rl = BUS_GET_RESOURCE_LIST(bus, child);
 	switch (type) {
 	case SYS_RES_MEMORY:
+		sc = device_get_softc(bus);
+		if ((sc->sc_flags & EBUS_PCI) == 0)
+			return (resource_list_release(rl, bus, child, type,
+			    rid, res));
 		if ((rv = rman_release_resource(res)) != 0)
 			return (rv);
 		if (!passthrough) {
 			rle = resource_list_find(rl, type, rid);
-			KASSERT(rle != NULL, ("ebus_release_resource: "
-			    "resource entry not found!"));
-			KASSERT(rle->res != NULL, ("ebus_alloc_resource: "
-			    "resource entry is not busy"));
+			KASSERT(rle != NULL,
+			    ("%s: resource entry not found!", __func__));
+			KASSERT(rle->res != NULL,
+			   ("%s: resource entry is not busy", __func__));
 			rle->res = NULL;
 		}
 		break;
 	case SYS_RES_IRQ:
 		return (resource_list_release(rl, bus, child, type, rid, res));
 	default:
-		panic("ebus_release_resource: unsupported resource type %d",
-		    type);
+		panic("%s: unsupported resource type %d", __func__, type);
 	}
 	return (0);
 }
 
+static int
+ebus_setup_intr(device_t dev, device_t child, struct resource *ires,
+    int flags, driver_filter_t *filt, driver_intr_t *intr, void *arg,
+    void **cookiep)
+{
+#ifndef SUN4V
+	struct ebus_softc *sc;
+	u_long vec;
+
+	sc = device_get_softc(dev);
+	if ((sc->sc_flags & EBUS_PCI) == 0) {
+		/*
+		 * Make sure the vector is fully specified.  This isn't
+		 * necessarily the case with the PCI variant.
+		 */
+		vec = rman_get_start(ires);
+		if (INTIGN(vec) != sc->sc_ign) {
+			device_printf(dev,
+			    "invalid interrupt vector 0x%lx\n", vec);
+			return (EINVAL);
+		}
+
+		/*
+		 * As we rely on the interrupt controllers of the
+		 * accompanying PCI-Express bridge ensure at least
+		 * something is registered for this vector.
+		 */
+		if (intr_vectors[vec].iv_ic == NULL) {
+			device_printf(dev,
+			    "invalid interrupt controller for vector 0x%lx\n",
+			    vec);
+			return (EINVAL);
+		}
+	}
+#endif
+	return (bus_generic_setup_intr(dev, child, ires, flags, filt, intr,
+	    arg, cookiep));
+}
+
 static struct resource_list *
 ebus_get_resource_list(device_t dev, device_t child)
 {
@@ -384,12 +578,13 @@ ebus_get_devinfo(device_t bus, device_t dev)
 static struct ebus_devinfo *
 ebus_setup_dinfo(device_t dev, struct ebus_softc *sc, phandle_t node)
 {
+	struct isa_regs reg, *regs;
+	ofw_isa_intr_t intr, *intrs;
 	struct ebus_devinfo *edi;
-	struct isa_regs *reg;
-	ofw_isa_intr_t *intrs;
-	ofw_pci_intr_t rintr;
-	u_int64_t start;
-	int nreg, nintr, i;
+	uint64_t start;
+	uint32_t rintr;
+	int i, nintr, nreg, rv;
+	uint8_t maskbuf[sizeof(reg) + sizeof(intr)];
 
 	edi = malloc(sizeof(*edi), M_DEVBUF, M_ZERO | M_WAITOK);
 	if (ofw_bus_gen_setup_devinfo(&edi->edi_obdinfo, node) != 0) {
@@ -397,40 +592,51 @@ ebus_setup_dinfo(device_t dev, struct ebus_softc *sc, phandle_t node)
 		return (NULL);
 	}
 	resource_list_init(&edi->edi_rl);
-	nreg = OF_getprop_alloc(node, "reg", sizeof(*reg), (void **)®);
+	nreg = OF_getprop_alloc(node, "reg", sizeof(*regs), (void **)®s);
 	if (nreg == -1) {
 		device_printf(dev, "<%s>: incomplete\n",
 		    edi->edi_obdinfo.obd_name);
-		goto fail;
+		ebus_destroy_dinfo(edi);
+		return (NULL);
 	}
 	for (i = 0; i < nreg; i++) {
-		start = ISA_REG_PHYS(reg + i);
-		resource_list_add(&edi->edi_rl, SYS_RES_MEMORY, i,
-		    start, start + reg[i].size - 1, reg[i].size);
+		start = ISA_REG_PHYS(regs + i);
+		(void)resource_list_add(&edi->edi_rl, SYS_RES_MEMORY, i,
+		    start, start + regs[i].size - 1, regs[i].size);
 	}
-	free(reg, M_OFWPROP);
+	free(regs, M_OFWPROP);
 
 	nintr = OF_getprop_alloc(node, "interrupts",  sizeof(*intrs),
 	    (void **)&intrs);
+	if (nintr == -1)
+		return (edi);
 	for (i = 0; i < nintr; i++) {
-		rintr = ofw_isa_route_intr(dev, node, &sc->sc_iinfo, intrs[i]);
-		if (rintr == PCI_INVALID_IRQ) {
+		rv = 0;
+		if ((sc->sc_flags & EBUS_PCI) != 0) {
+			rintr = ofw_isa_route_intr(dev, node, &sc->sc_iinfo,
+			    intrs[i]);
+		} else {
+			intr = intrs[i];
+			rv = ofw_bus_lookup_imap(node, &sc->sc_iinfo, ®,
+			    sizeof(reg), &intr, sizeof(intr), &rintr,
+			    sizeof(rintr), maskbuf);
+#ifndef SUN4V
+			if (rv != 0)
+				rintr = INTMAP_VEC(sc->sc_ign, rintr);
+#endif
+		}
+		if ((sc->sc_flags & EBUS_PCI) == 0 ? rv == 0 :
+		    rintr == PCI_INVALID_IRQ) {
 			device_printf(dev,
 			    "<%s>: could not map EBus interrupt %d\n",
 			    edi->edi_obdinfo.obd_name, intrs[i]);
-			free(intrs, M_OFWPROP);
-			goto fail;
+			continue;
 		}
-		resource_list_add(&edi->edi_rl, SYS_RES_IRQ, i,
-		    rintr, rintr, 1);
+		(void)resource_list_add(&edi->edi_rl, SYS_RES_IRQ, i, rintr,
+		    rintr, 1);
 	}
 	free(intrs, M_OFWPROP);
-
 	return (edi);
-
-fail:
-	ebus_destroy_dinfo(edi);
-	return (NULL);
 }
 
 static void
diff --git a/sys/sparc64/fhc/fhc.c b/sys/sparc64/fhc/fhc.c
index 91416ec8431..6aefffa1a6f 100644
--- a/sys/sparc64/fhc/fhc.c
+++ b/sys/sparc64/fhc/fhc.c
@@ -119,9 +119,12 @@ static driver_t fhc_driver = {
 
 static devclass_t fhc_devclass;
 
-DRIVER_MODULE(fhc, central, fhc_driver, fhc_devclass, 0, 0);
-DRIVER_MODULE(fhc, nexus, fhc_driver, fhc_devclass, 0, 0);
+EARLY_DRIVER_MODULE(fhc, central, fhc_driver, fhc_devclass, 0, 0,
+    BUS_PASS_BUS);
 MODULE_DEPEND(fhc, central, 1, 1, 1);
+EARLY_DRIVER_MODULE(fhc, nexus, fhc_driver, fhc_devclass, 0, 0,
+    BUS_PASS_BUS);
+MODULE_DEPEND(fhc, nexus, 1, 1, 1);
 MODULE_VERSION(fhc, 1);
 
 static const struct intr_controller fhc_ic = {
diff --git a/sys/sparc64/include/bus_common.h b/sys/sparc64/include/bus_common.h
index e2ea4e9984b..f04eb7f5b4c 100644
--- a/sys/sparc64/include/bus_common.h
+++ b/sys/sparc64/include/bus_common.h
@@ -39,18 +39,22 @@
 #ifndef _MACHINE_BUS_COMMON_H_
 #define	_MACHINE_BUS_COMMON_H_
 
-#define	INTMAP_V		0x080000000LL	/* Interrupt valid (enabled) */
-#define	INTMAP_TID_MASK		0x07c000000LL	/* UPA target ID */
+#define	INTCLR_PENDING		0x000000003ULL	/* Interrupt queued to CPU */
+#define	INTCLR_RECEIVED		0x000000001ULL	/* Interrupt received */
+#define	INTCLR_IDLE		0x000000000ULL	/* Interrupt idle */
+
+#define	INTMAP_V		0x080000000ULL	/* Interrupt valid (enabled) */
+#define	INTMAP_TID_MASK		0x07c000000ULL	/* UPA target ID */
 #define	INTMAP_TID_SHIFT	26
-#define	INTMAP_IGN_MASK		0x0000007c0LL	/* Interrupt group no. */
+#define	INTMAP_IGN_MASK		0x0000007c0ULL	/* Interrupt group no. */
 #define	INTMAP_IGN_SHIFT	6
-#define	INTMAP_INO_MASK		0x00000003fLL	/* Interrupt number */
+#define	INTMAP_INO_MASK		0x00000003fULL	/* Interrupt number */
 #define	INTMAP_INR_MASK		(INTMAP_IGN_MASK | INTMAP_INO_MASK)
-#define	INTMAP_SBUSSLOT_MASK	0x000000018LL	/* SBus slot # */
-#define	INTMAP_PCIBUS_MASK	0x000000010LL	/* PCI bus number (A or B) */
-#define	INTMAP_PCISLOT_MASK	0x00000000cLL	/* PCI slot # */
-#define	INTMAP_PCIINT_MASK	0x000000003LL	/* PCI interrupt #A,#B,#C,#D */
-#define	INTMAP_OBIO_MASK	0x000000020LL	/* Onboard device */
+#define	INTMAP_SBUSSLOT_MASK	0x000000018ULL	/* SBus slot # */
+#define	INTMAP_PCIBUS_MASK	0x000000010ULL	/* PCI bus number (A or B) */
+#define	INTMAP_PCISLOT_MASK	0x00000000cULL	/* PCI slot # */
+#define	INTMAP_PCIINT_MASK	0x000000003ULL	/* PCI interrupt #A,#B,#C,#D */
+#define	INTMAP_OBIO_MASK	0x000000020ULL	/* Onboard device */
 #define	INTIGN(x)		(((x) & INTMAP_IGN_MASK) >> INTMAP_IGN_SHIFT)
 #define	INTVEC(x)		((x) & INTMAP_INR_MASK)
 #define	INTSLOT(x)		(((x) >> 3) & 0x7)
@@ -60,9 +64,9 @@
 	(INTMAP_TID((mr), (mid)) | INTMAP_V)
 #define	INTMAP_TID(mr, mid)						\
 	(((mr) & ~INTMAP_TID_MASK) | ((mid) << INTMAP_TID_SHIFT))
-#define	INTMAP_VEC(ign, inr)						\
+#define	INTMAP_VEC(ign, ino)						\
 	((((ign) << INTMAP_IGN_SHIFT) & INTMAP_IGN_MASK) |		\
-	((inr) & INTMAP_INR_MASK))
+	((ino) & INTMAP_INO_MASK))
 
 /* counter-timer support. */
 void sparc64_counter_init(const char *name, bus_space_tag_t tag,
diff --git a/sys/sparc64/include/intr_machdep.h b/sys/sparc64/include/intr_machdep.h
index ef24d187ae1..46a61969389 100644
--- a/sys/sparc64/include/intr_machdep.h
+++ b/sys/sparc64/include/intr_machdep.h
@@ -93,6 +93,7 @@ extern struct intr_vector intr_vectors[];
 void	intr_add_cpu(u_int cpu);
 #endif
 int	intr_bind(int vec, u_char cpu);
+int	intr_describe(int vec, void *ih, const char *descr);
 void	intr_setup(int level, ih_func_t *ihf, int pri, iv_func_t *ivf,
 	    void *iva);
 void	intr_init1(void);
diff --git a/sys/sparc64/include/iommureg.h b/sys/sparc64/include/iommureg.h
index 6032ac585a6..f4d0349903e 100644
--- a/sys/sparc64/include/iommureg.h
+++ b/sys/sparc64/include/iommureg.h
@@ -37,17 +37,20 @@
  */
 
 #ifndef _MACHINE_IOMMUREG_H_
-#define _MACHINE_IOMMUREG_H_
+#define	_MACHINE_IOMMUREG_H_
 
 /*
  * UltraSPARC IOMMU registers, common to both the PCI and SBus
  * controllers.
  */
 
-/* iommmu registers */
+/* IOMMU registers */
 #define	IMR_CTL		0x0000	/* IOMMU control register */
 #define	IMR_TSB		0x0008	/* IOMMU TSB base register */
 #define	IMR_FLUSH	0x0010	/* IOMMU flush register */
+/* The TTE Cache is Fire and Oberon only. */
+#define	IMR_CACHE_FLUSH	0x0100	/* IOMMU TTE cache flush address register */
+#define	IMR_CACHE_INVAL	0x0108	/* IOMMU TTE cache invalidate register */
 
 /* streaming buffer registers */
 #define	ISR_CTL		0x0000	/* streaming buffer control reg */
@@ -61,35 +64,64 @@
 #define	ISD_LN_TAG_DIAG	0x0900	/* streaming buffer line tag diag 0..15 */
 
 /* streaming buffer control register */
-#define STRBUF_EN		0x0000000000000001UL
-#define STRBUF_D		0x0000000000000002UL
-#define STRBUF_RR_DIS		0x0000000000000004UL
+#define	STRBUF_EN		0x0000000000000001UL
+#define	STRBUF_D		0x0000000000000002UL
+#define	STRBUF_RR_DIS		0x0000000000000004UL
 
 #define	IOMMU_MAXADDR(bits)	((1UL << (bits)) - 1)
 
 /*
  * control register bits
  */
-/* Nummber of entries in IOTSB */
+/* Nummber of entries in the IOTSB - pre-Fire only */
+#define	IOMMUCR_TSBSZ_MASK	0x0000000000070000UL
 #define	IOMMUCR_TSBSZ_SHIFT	16
-#define IOMMUCR_TSB1K		0x0000000000000000UL
-#define IOMMUCR_TSB2K		0x0000000000010000UL
-#define IOMMUCR_TSB4K		0x0000000000020000UL
-#define IOMMUCR_TSB8K		0x0000000000030000UL
-#define IOMMUCR_TSB16K		0x0000000000040000UL
-#define IOMMUCR_TSB32K		0x0000000000050000UL
-#define IOMMUCR_TSB64K		0x0000000000060000UL
-#define IOMMUCR_TSB128K		0x0000000000070000UL
-/* Mask for above */
-#define IOMMUCR_TSBMASK		0xfffffffffff8ffffUL
-/* 8K iommu page size */
-#define IOMMUCR_8KPG		0x0000000000000000UL
-/* 64K iommu page size */
-#define IOMMUCR_64KPG		0x0000000000000004UL
-/* Diag enable */
-#define IOMMUCR_DE		0x0000000000000002UL
-/* Enable IOMMU */
-#define IOMMUCR_EN		0x0000000000000001UL
+/* TSB cache snoop enable */
+#define	IOMMUCR_SE		0x0000000000000400UL
+/* Cache modes - Fire and Oberon */
+#define	IOMMUCR_CM_NC_TLB_TBW	0x0000000000000000UL
+#define	IOMMUCR_CM_LC_NTLB_NTBW	0x0000000000000100UL
+#define	IOMMUCR_CM_LC_TLB_TBW	0x0000000000000200UL
+#define	IOMMUCR_CM_C_TLB_TBW	0x0000000000000300UL
+/* IOMMU page size - pre-Fire only */
+#define	IOMMUCR_8KPG		0x0000000000000000UL
+#define	IOMMUCR_64KPG		0x0000000000000004UL
+/* Bypass enable - Fire and Oberon */
+#define	IOMMUCR_BE		0x0000000000000002UL
+/* Diagnostic mode enable - pre-Fire only */
+#define	IOMMUCR_DE		0x0000000000000002UL
+/* IOMMU/translation enable */
+#define	IOMMUCR_EN		0x0000000000000001UL
+
+/*
+ * TSB base register bits
+ */
+ /* TSB base address */
+#define	IOMMUTB_TB_MASK		0x000007ffffffe000UL
+#define	IOMMUTB_TB_SHIFT	13
+/* IOMMU page size - Fire and Oberon */
+#define	IOMMUTB_8KPG		0x0000000000000000UL
+#define	IOMMUTB_64KPG		0x0000000000000100UL
+/* Nummber of entries in the IOTSB - Fire and Oberon */
+#define	IOMMUTB_TSBSZ_MASK	0x0000000000000004UL
+#define	IOMMUTB_TSBSZ_SHIFT	0
+
+/*
+ * TSB size definitions for both control and TSB base register */
+#define	IOMMU_TSB1K		0
+#define	IOMMU_TSB2K		1
+#define	IOMMU_TSB4K		2
+#define	IOMMU_TSB8K		3
+#define	IOMMU_TSB16K		4
+#define	IOMMU_TSB32K		5
+#define	IOMMU_TSB64K		6
+#define	IOMMU_TSB128K		7
+/* Fire and Oberon */
+#define	IOMMU_TSB256K		8
+/* Fire and Oberon */
+#define	IOMMU_TSB512K		9
+#define	IOMMU_TSBENTRIES(tsbsz)						\
+	((1 << (tsbsz)) << (IO_PAGE_SHIFT - IOTTE_SHIFT))
 
 /*
  * Diagnostic register definitions
@@ -97,9 +129,9 @@
 #define	IOMMU_DTAG_VPNBITS	19
 #define	IOMMU_DTAG_VPNMASK	((1 << IOMMU_DTAG_VPNBITS) - 1)
 #define	IOMMU_DTAG_VPNSHIFT	13
-#define IOMMU_DTAG_ERRBITS	3
+#define	IOMMU_DTAG_ERRBITS	3
 #define	IOMMU_DTAG_ERRSHIFT	22
-#define	IOMMU_DTAG_ERRMASK \
+#define	IOMMU_DTAG_ERRMASK						\
 	(((1 << IOMMU_DTAG_ERRBITS) - 1) << IOMMU_DTAG_ERRSHIFT)
 
 #define	IOMMU_DDATA_PGBITS	21
@@ -113,19 +145,19 @@
  */
 /* Entry valid */
 #define	IOTTE_V			0x8000000000000000UL
-/* 8K or 64K page? */
-#define IOTTE_64K		0x2000000000000000UL
-#define IOTTE_8K		0x0000000000000000UL
-/* Is page streamable? */
-#define IOTTE_STREAM		0x1000000000000000UL
-/* Accesses to same bus segment? */
+/* Page size - pre-Fire only */
+#define	IOTTE_64K		0x2000000000000000UL
+#define	IOTTE_8K		0x0000000000000000UL
+/* Streamable page - streaming buffer equipped variants only */
+#define	IOTTE_STREAM		0x1000000000000000UL
+/* Accesses to the same bus segment - SBus only */
 #define	IOTTE_LOCAL		0x0800000000000000UL
-/* Let's assume this is correct */
-#define IOTTE_PAMASK		0x000007ffffffe000UL
-/* Accesses to cacheable space */
-#define IOTTE_C			0x0000000000000010UL
+/* Physical address mask (based on Oberon) */
+#define	IOTTE_PAMASK		0x00007fffffffe000UL
+/* Accesses to cacheable space - pre-Fire only */
+#define	IOTTE_C			0x0000000000000010UL
 /* Writeable */
-#define IOTTE_W			0x0000000000000002UL
+#define	IOTTE_W			0x0000000000000002UL
 
 /* log2 of the IOMMU TTE size */
 #define	IOTTE_SHIFT		3
@@ -167,14 +199,14 @@
  */
 
 #define	IOTSB_BASESZ		(1024 << IOTTE_SHIFT)
-#define IOTSB_VEND		(~IO_PAGE_MASK)
-#define IOTSB_VSTART(sz)	(u_int)(IOTSB_VEND << ((sz) + 10))
+#define	IOTSB_VEND		(~IO_PAGE_MASK)
+#define	IOTSB_VSTART(sz)	(u_int)(IOTSB_VEND << ((sz) + 10))
 
-#define MAKEIOTTE(pa,w,c,s)						\
+#define	MAKEIOTTE(pa, w, c, s)						\
 	(((pa) & IOTTE_PAMASK) | ((w) ? IOTTE_W : 0) |			\
 	((c) ? IOTTE_C : 0) | ((s) ? IOTTE_STREAM : 0) |		\
 	(IOTTE_V | IOTTE_8K))
-#define IOTSBSLOT(va)						\
+#define	IOTSBSLOT(va)							\
 	((u_int)(((vm_offset_t)(va)) - (is->is_dvmabase)) >> IO_PAGE_SHIFT)
 
 #endif /* !_MACHINE_IOMMUREG_H_ */
diff --git a/sys/sparc64/include/iommuvar.h b/sys/sparc64/include/iommuvar.h
index 5904f046a2a..1ef4e0bd0ae 100644
--- a/sys/sparc64/include/iommuvar.h
+++ b/sys/sparc64/include/iommuvar.h
@@ -66,10 +66,10 @@ struct iommu_state {
 	int			is_tsbsize;	/* (r) 0 = 8K, ... */
 	uint64_t		is_pmaxaddr;	/* (r) max. physical address */
 	uint64_t		is_dvmabase;	/* (r) */
-	int64_t			is_cr;		/* (r) Control reg value */
+	uint64_t		is_cr;		/* (r) Control reg value */
 
 	vm_paddr_t		is_flushpa[2];	/* (r) */
-	volatile int64_t	*is_flushva[2];	/* (r, *i) */
+	volatile uint64_t	*is_flushva[2];	/* (r, *i) */
 	/*
 	 * (i)
 	 * When a flush is completed, 64 bytes will be stored at the given
@@ -99,11 +99,14 @@ struct iommu_state {
 	/* behavior flags */
 	u_int			is_flags;	/* (r) */
 #define	IOMMU_RERUN_DISABLE	(1 << 0)
+#define	IOMMU_FIRE		(1 << 1)
+#define	IOMMU_FLUSH_CACHE	(1 << 2)
+#define	IOMMU_PRESERVE_PROM	(1 << 3)
 };
 
 /* interfaces for PCI/SBus code */
-void iommu_init(const char *name, struct iommu_state *is, int tsbsize,
-    uint32_t iovabase, int resvpg);
+void iommu_init(const char *name, struct iommu_state *is, u_int tsbsize,
+    uint32_t iovabase, u_int resvpg);
 void iommu_reset(struct iommu_state *is);
 void iommu_decode_fault(struct iommu_state *is, vm_offset_t phys);
 
diff --git a/sys/sparc64/isa/ofw_isa.c b/sys/sparc64/isa/ofw_isa.c
index de5e4cecd38..6139ba7a059 100644
--- a/sys/sparc64/isa/ofw_isa.c
+++ b/sys/sparc64/isa/ofw_isa.c
@@ -79,11 +79,11 @@ ofw_isa_range_map(struct isa_ranges *range, int nrange, u_long *start,
 	for (i = 0; i < nrange; i++) {
 		r = &range[i];
 		cstart = ISA_RANGE_CHILD(r);
-		cend = cstart + r->size;
+		cend = cstart + r->size - 1;
 		if (*start < cstart || *start > cend)
 			continue;
 		if (*end < cstart || *end > cend) {
-			panic("ofw_isa_map_iorange: iorange crosses pci "
+			panic("ofw_isa_map_iorange: iorange crosses PCI "
 			    "ranges (%#lx not in %#lx - %#lx)", *end, cstart,
 			    cend);
 		}
diff --git a/sys/sparc64/pci/apb.c b/sys/sparc64/pci/apb.c
index ad4dfca7cd1..2f4932e2c1c 100644
--- a/sys/sparc64/pci/apb.c
+++ b/sys/sparc64/pci/apb.c
@@ -111,7 +111,8 @@ static device_method_t apb_methods[] = {
 static devclass_t pcib_devclass;
 
 DEFINE_CLASS_0(pcib, apb_driver, apb_methods, sizeof(struct apb_softc));
-DRIVER_MODULE(apb, pci, apb_driver, pcib_devclass, 0, 0);
+EARLY_DRIVER_MODULE(apb, pci, apb_driver, pcib_devclass, 0, 0, BUS_PASS_BUS);
+MODULE_DEPEND(apb, pci, 1, 1, 1);
 
 /* APB specific registers */
 #define	APBR_IOMAP	0xde
diff --git a/sys/sparc64/pci/fire.c b/sys/sparc64/pci/fire.c
new file mode 100644
index 00000000000..9d78a608daa
--- /dev/null
+++ b/sys/sparc64/pci/fire.c
@@ -0,0 +1,2121 @@
+/*-
+ * Copyright (c) 1999, 2000 Matthew R. Green
+ * Copyright (c) 2001 - 2003 by Thomas Moestl 
+ * Copyright (c) 2009 by Marius Strobl 
+ * 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.
+ * 3. The name of the author may not be used to endorse or promote products
+ *    derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	from: NetBSD: psycho.c,v 1.39 2001/10/07 20:30:41 eeh Exp
+ *	from: FreeBSD: psycho.c 183152 2008-09-18 19:45:22Z marius
+ */
+
+#include 
+__FBSDID("$FreeBSD$");
+
+/*
+ * Driver for `Fire' JBus to PCI Express and `Oberon' Uranus to PCI Express
+ * bridges
+ */
+
+#include "opt_fire.h"
+#include "opt_ofw_pci.h"
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+
+#include "pcib_if.h"
+
+static bus_space_tag_t fire_alloc_bus_tag(struct fire_softc *sc, int type);
+static const struct fire_desc *fire_get_desc(device_t dev);
+static void fire_dmamap_sync(bus_dma_tag_t dt __unused, bus_dmamap_t map,
+    bus_dmasync_op_t op);
+static int fire_get_intrmap(struct fire_softc *sc, u_int ino,
+    bus_addr_t *intrmapptr, bus_addr_t *intrclrptr);
+static void fire_intr_assign(void *arg);
+static void fire_intr_clear(void *arg);
+static void fire_intr_disable(void *arg);
+static void fire_intr_enable(void *arg);
+static int fire_intr_register(struct fire_softc *sc, u_int ino);
+static void fire_msiq_handler(void *cookie);
+static void fire_set_intr(struct fire_softc *sc, u_int index, u_int ino,
+    driver_filter_t handler, void *arg);
+static timecounter_get_t fire_get_timecount;
+
+/* Interrupt handlers */
+static driver_filter_t fire_dmc_pec;
+static driver_filter_t fire_pcie;
+static driver_filter_t fire_xcb;
+
+/*
+ * Methods
+ */
+static bus_activate_resource_t fire_activate_resource;
+static pcib_alloc_msi_t fire_alloc_msi;
+static pcib_alloc_msix_t fire_alloc_msix;
+static bus_alloc_resource_t fire_alloc_resource;
+static device_attach_t fire_attach;
+static bus_deactivate_resource_t fire_deactivate_resource;
+static bus_get_dma_tag_t fire_get_dma_tag;
+static ofw_bus_get_node_t fire_get_node;
+static pcib_map_msi_t fire_map_msi;
+static pcib_maxslots_t fire_maxslots;
+static device_probe_t fire_probe;
+static pcib_read_config_t fire_read_config;
+static bus_read_ivar_t fire_read_ivar;
+static pcib_release_msi_t fire_release_msi;
+static pcib_release_msix_t fire_release_msix;
+static bus_release_resource_t fire_release_resource;
+static pcib_route_interrupt_t fire_route_interrupt;
+static bus_setup_intr_t fire_setup_intr;
+static bus_teardown_intr_t fire_teardown_intr;
+static pcib_write_config_t fire_write_config;
+
+static device_method_t fire_methods[] = {
+	/* Device interface */
+	DEVMETHOD(device_probe,		fire_probe),
+	DEVMETHOD(device_attach,	fire_attach),
+	DEVMETHOD(device_shutdown,	bus_generic_shutdown),
+	DEVMETHOD(device_suspend,	bus_generic_suspend),
+	DEVMETHOD(device_resume,	bus_generic_resume),
+
+	/* Bus interface */
+	DEVMETHOD(bus_print_child,	bus_generic_print_child),
+	DEVMETHOD(bus_read_ivar,	fire_read_ivar),
+	DEVMETHOD(bus_setup_intr,	fire_setup_intr),
+	DEVMETHOD(bus_teardown_intr,	fire_teardown_intr),
+	DEVMETHOD(bus_alloc_resource,	fire_alloc_resource),
+	DEVMETHOD(bus_activate_resource,	fire_activate_resource),
+	DEVMETHOD(bus_deactivate_resource,	fire_deactivate_resource),
+	DEVMETHOD(bus_release_resource,	fire_release_resource),
+	DEVMETHOD(bus_get_dma_tag,	fire_get_dma_tag),
+
+	/* pcib interface */
+	DEVMETHOD(pcib_maxslots,	fire_maxslots),
+	DEVMETHOD(pcib_read_config,	fire_read_config),
+	DEVMETHOD(pcib_write_config,	fire_write_config),
+	DEVMETHOD(pcib_route_interrupt,	fire_route_interrupt),
+	DEVMETHOD(pcib_alloc_msi,	fire_alloc_msi),
+	DEVMETHOD(pcib_release_msi,	fire_release_msi),
+	DEVMETHOD(pcib_alloc_msix,	fire_alloc_msix),
+	DEVMETHOD(pcib_release_msix,	fire_release_msix),
+	DEVMETHOD(pcib_map_msi,		fire_map_msi),
+
+	/* ofw_bus interface */
+	DEVMETHOD(ofw_bus_get_node,	fire_get_node),
+
+	KOBJMETHOD_END
+};
+
+static devclass_t fire_devclass;
+
+DEFINE_CLASS_0(pcib, fire_driver, fire_methods, sizeof(struct fire_softc));
+EARLY_DRIVER_MODULE(fire, nexus, fire_driver, fire_devclass, 0, 0,
+    BUS_PASS_BUS);
+MODULE_DEPEND(fire, nexus, 1, 1, 1);
+
+static const struct intr_controller fire_ic = {
+	fire_intr_enable,
+	fire_intr_disable,
+	fire_intr_assign,
+	fire_intr_clear
+};
+
+struct fire_icarg {
+	struct fire_softc	*fica_sc;
+	bus_addr_t		fica_map;
+	bus_addr_t		fica_clr;
+};
+
+struct fire_msiqarg {
+	struct fire_icarg	fmqa_fica;
+	struct mtx		fmqa_mtx;
+	struct fo_msiq_record	*fmqa_base;
+	uint64_t		fmqa_head;
+	uint64_t		fmqa_tail;
+	uint32_t		fmqa_msiq;
+	uint32_t		fmqa_msi;
+};
+
+#define	FIRE_PERF_CNT_QLTY	100
+
+#define	FIRE_SPC_BARRIER(spc, sc, offs, len, flags)			\
+	bus_barrier((sc)->sc_mem_res[(spc)], (offs), (len), (flags))
+#define	FIRE_SPC_READ_8(spc, sc, offs)					\
+	bus_read_8((sc)->sc_mem_res[(spc)], (offs))
+#define	FIRE_SPC_WRITE_8(spc, sc, offs, v)				\
+	bus_write_8((sc)->sc_mem_res[(spc)], (offs), (v))
+
+#ifndef FIRE_DEBUG
+#define	FIRE_SPC_SET(spc, sc, offs, reg, v)				\
+	FIRE_SPC_WRITE_8((spc), (sc), (offs), (v))
+#else
+#define	FIRE_SPC_SET(spc, sc, offs, reg, v) do {			\
+	device_printf((sc)->sc_dev, reg " 0x%016llx -> 0x%016llx\n",	\
+	    (unsigned long long)FIRE_SPC_READ_8((spc), (sc), (offs)),	\
+	    (unsigned long long)(v));					\
+	FIRE_SPC_WRITE_8((spc), (sc), (offs), (v));			\
+	} while (0)
+#endif
+
+#define	FIRE_PCI_BARRIER(sc, offs, len, flags)				\
+	FIRE_SPC_BARRIER(FIRE_PCI, (sc), (offs), len, flags)
+#define	FIRE_PCI_READ_8(sc, offs)					\
+	FIRE_SPC_READ_8(FIRE_PCI, (sc), (offs))
+#define	FIRE_PCI_WRITE_8(sc, offs, v)					\
+	FIRE_SPC_WRITE_8(FIRE_PCI, (sc), (offs), (v))
+#define	FIRE_CTRL_BARRIER(sc, offs, len, flags)				\
+	FIRE_SPC_BARRIER(FIRE_CTRL, (sc), (offs), len, flags)
+#define	FIRE_CTRL_READ_8(sc, offs)					\
+	FIRE_SPC_READ_8(FIRE_CTRL, (sc), (offs))
+#define	FIRE_CTRL_WRITE_8(sc, offs, v)					\
+	FIRE_SPC_WRITE_8(FIRE_CTRL, (sc), (offs), (v))
+
+#define	FIRE_PCI_SET(sc, offs, v)					\
+	FIRE_SPC_SET(FIRE_PCI, (sc), (offs), # offs, (v))
+#define	FIRE_CTRL_SET(sc, offs, v)					\
+	FIRE_SPC_SET(FIRE_CTRL, (sc), (offs), # offs, (v))
+
+struct fire_desc {
+	const char	*fd_string;
+	int		fd_mode;
+	const char	*fd_name;
+};
+
+static const struct fire_desc const fire_compats[] = {
+	{ "pciex108e,80f0",	FIRE_MODE_FIRE,		"Fire" },
+#if 0
+	{ "pciex108e,80f8",	FIRE_MODE_OBERON,	"Oberon" },
+#endif
+	{ NULL,			0,			NULL }
+};
+
+static const struct fire_desc *
+fire_get_desc(device_t dev)
+{
+	const struct fire_desc *desc;
+	const char *compat;
+
+	compat = ofw_bus_get_compat(dev);
+	if (compat == NULL)
+		return (NULL);
+	for (desc = fire_compats; desc->fd_string != NULL; desc++)
+		if (strcmp(desc->fd_string, compat) == 0)
+			return (desc);
+	return (NULL);
+}
+
+static int
+fire_probe(device_t dev)
+{
+	const char *dtype;
+
+	dtype = ofw_bus_get_type(dev);
+	if (dtype != NULL && strcmp(dtype, OFW_TYPE_PCIE) == 0 &&
+	    fire_get_desc(dev) != NULL) {
+		device_set_desc(dev, "Sun Host-PCIe bridge");
+		return (BUS_PROBE_GENERIC);
+	}
+	return (ENXIO);
+}
+
+static int
+fire_attach(device_t dev)
+{
+	struct fire_softc *sc;
+	const struct fire_desc *desc;
+	struct ofw_pci_msi_ranges msi_ranges;
+	struct ofw_pci_msi_addr_ranges msi_addr_ranges;
+	struct ofw_pci_msi_eq_to_devino msi_eq_to_devino;
+	struct fire_msiqarg *fmqa;
+	struct timecounter *tc;
+	struct ofw_pci_ranges *range;
+	uint64_t ino_bitmap, val;
+	phandle_t node;
+	uint32_t prop, prop_array[2];
+	int i, j, mode;
+	u_int lw;
+	uint16_t mps;
+
+	sc = device_get_softc(dev);
+	node = ofw_bus_get_node(dev);
+	desc = fire_get_desc(dev);
+	mode = desc->fd_mode;
+
+	sc->sc_dev = dev;
+	sc->sc_node = node;
+	sc->sc_mode = mode;
+	sc->sc_flags = 0;
+
+	mtx_init(&sc->sc_msi_mtx, "msi_mtx", NULL, MTX_DEF);
+	mtx_init(&sc->sc_pcib_mtx, "pcib_mtx", NULL, MTX_SPIN);
+
+	/*
+	 * Fire and Oberon have two register banks:
+	 * (0) per-PBM PCI Express configuration and status registers
+	 * (1) (shared) Fire/Oberon controller configuration and status
+	 *     registers
+	 */
+	for (i = 0; i < FIRE_NREG; i++) {
+		j = i;
+		sc->sc_mem_res[i] = bus_alloc_resource_any(dev,
+		    SYS_RES_MEMORY, &j, RF_ACTIVE);
+		if (sc->sc_mem_res[i] == NULL)
+			panic("%s: could not allocate register bank %d",
+			    __func__, i);
+	}
+
+	if (OF_getprop(node, "portid", &sc->sc_ign, sizeof(sc->sc_ign)) == -1)
+		panic("%s: could not determine IGN", __func__);
+	if (OF_getprop(node, "module-revision#", &prop, sizeof(prop)) == -1)
+		panic("%s: could not determine revision", __func__);
+
+	device_printf(dev, "%s, module-revision %d, IGN %#x\n",
+	    desc->fd_name, prop, sc->sc_ign);
+
+	/*
+	 * Hunt through all the interrupt mapping regs and register
+	 * the interrupt controller for our interrupt vectors.  We do
+	 * this early in order to be able to catch stray interrupts.
+	 */
+	i = OF_getprop(node, "ino-bitmap", (void *)prop_array,
+	    sizeof(prop_array));
+	if (i == -1)
+		panic("%s: could not get ino-bitmap", __func__);
+	ino_bitmap = ((uint64_t)prop_array[1] << 32) | prop_array[0];
+	for (i = 0; i <= FO_MAX_INO; i++) {
+		if ((ino_bitmap & (1ULL << i)) == 0)
+			continue;
+		j = fire_intr_register(sc, i);
+		if (j != 0)
+			device_printf(dev, "could not register interrupt "
+			    "controller for INO %d (%d)\n", i, j);
+	}
+
+	/* JBC/UBC module initialization */
+	FIRE_CTRL_SET(sc, FO_XBC_ERR_LOG_EN, ~0ULL);
+	FIRE_CTRL_SET(sc, FO_XBC_ERR_STAT_CLR, ~0ULL);
+	/* not enabled by OpenSolaris */
+	FIRE_CTRL_SET(sc, FO_XBC_INT_EN, ~0ULL);
+	if (sc->sc_mode == FIRE_MODE_FIRE) {
+		FIRE_CTRL_SET(sc, FIRE_JBUS_PAR_CTRL,
+		    FIRE_JBUS_PAR_CTRL_P_EN);
+		FIRE_CTRL_SET(sc, FIRE_JBC_FATAL_RST_EN,
+		    ((1ULL << FIRE_JBC_FATAL_RST_EN_SPARE_P_INT_SHFT) &
+		    FIRE_JBC_FATAL_RST_EN_SPARE_P_INT_MASK) |
+		    FIRE_JBC_FATAL_RST_EN_MB_PEA_P_INT |
+		    FIRE_JBC_FATAL_RST_EN_CPE_P_INT |
+		    FIRE_JBC_FATAL_RST_EN_APE_P_INT |
+		    FIRE_JBC_FATAL_RST_EN_PIO_CPE_INT |
+		    FIRE_JBC_FATAL_RST_EN_JTCEEW_P_INT |
+		    FIRE_JBC_FATAL_RST_EN_JTCEEI_P_INT |
+		    FIRE_JBC_FATAL_RST_EN_JTCEER_P_INT);
+		FIRE_CTRL_SET(sc, FIRE_JBC_CORE_BLOCK_INT_EN, ~0ULL);
+	}
+
+	/* TLU initialization */
+	FIRE_PCI_SET(sc, FO_PCI_TLU_OEVENT_STAT_CLR,
+	    FO_PCI_TLU_OEVENT_S_MASK | FO_PCI_TLU_OEVENT_P_MASK);
+	/* not enabled by OpenSolaris */
+	FIRE_PCI_SET(sc, FO_PCI_TLU_OEVENT_INT_EN,
+	    FO_PCI_TLU_OEVENT_S_MASK | FO_PCI_TLU_OEVENT_P_MASK);
+	FIRE_PCI_SET(sc, FO_PCI_TLU_UERR_STAT_CLR,
+	    FO_PCI_TLU_UERR_INT_S_MASK | FO_PCI_TLU_UERR_INT_P_MASK);
+	/* not enabled by OpenSolaris */
+	FIRE_PCI_SET(sc, FO_PCI_TLU_UERR_INT_EN,
+	    FO_PCI_TLU_UERR_INT_S_MASK | FO_PCI_TLU_UERR_INT_P_MASK);
+	FIRE_PCI_SET(sc, FO_PCI_TLU_CERR_STAT_CLR,
+	    FO_PCI_TLU_CERR_INT_S_MASK | FO_PCI_TLU_CERR_INT_P_MASK);
+	/* not enabled by OpenSolaris */
+	FIRE_PCI_SET(sc, FO_PCI_TLU_CERR_INT_EN,
+	    FO_PCI_TLU_CERR_INT_S_MASK | FO_PCI_TLU_CERR_INT_P_MASK);
+	val = FIRE_PCI_READ_8(sc, FO_PCI_TLU_CTRL) |
+	    ((FO_PCI_TLU_CTRL_L0S_TIM_DFLT << FO_PCI_TLU_CTRL_L0S_TIM_SHFT) &
+	    FO_PCI_TLU_CTRL_L0S_TIM_MASK) |
+	    ((FO_PCI_TLU_CTRL_CFG_DFLT << FO_PCI_TLU_CTRL_CFG_SHFT) &
+	    FO_PCI_TLU_CTRL_CFG_MASK);
+	if (sc->sc_mode == FIRE_MODE_OBERON)
+		val &= ~FO_PCI_TLU_CTRL_NWPR_EN;
+	val |= FO_PCI_TLU_CTRL_CFG_REMAIN_DETECT_QUIET;
+	FIRE_PCI_SET(sc, FO_PCI_TLU_CTRL, val);
+	FIRE_PCI_SET(sc, FO_PCI_TLU_DEV_CTRL, 0);
+	FIRE_PCI_SET(sc, FO_PCI_TLU_LNK_CTRL, FO_PCI_TLU_LNK_CTRL_CLK);
+
+	/* DLU/LPU initialization */
+	if (sc->sc_mode == FIRE_MODE_OBERON)
+		FIRE_PCI_SET(sc, FO_PCI_LPU_INT_MASK, 0);
+	else
+		FIRE_PCI_SET(sc, FO_PCI_LPU_RST, 0);
+	FIRE_PCI_SET(sc, FO_PCI_LPU_LNK_LYR_CFG,
+	    FO_PCI_LPU_LNK_LYR_CFG_VC0_EN);
+	FIRE_PCI_SET(sc, FO_PCI_LPU_FLW_CTRL_UPDT_CTRL,
+	    FO_PCI_LPU_FLW_CTRL_UPDT_CTRL_FC0_NP_EN |
+	    FO_PCI_LPU_FLW_CTRL_UPDT_CTRL_FC0_P_EN);
+	if (sc->sc_mode == FIRE_MODE_OBERON)
+		FIRE_PCI_SET(sc, FO_PCI_LPU_TXLNK_RPLY_TMR_THRS,
+		    (OBERON_PCI_LPU_TXLNK_RPLY_TMR_THRS_DFLT <<
+		    FO_PCI_LPU_TXLNK_RPLY_TMR_THRS_SHFT) &
+		    FO_PCI_LPU_TXLNK_RPLY_TMR_THRS_MASK);
+	else {
+		switch ((FIRE_PCI_READ_8(sc, FO_PCI_TLU_LNK_STAT) &
+		    FO_PCI_TLU_LNK_STAT_WDTH_MASK) >>
+		    FO_PCI_TLU_LNK_STAT_WDTH_SHFT) {
+		case 1:
+			lw = 0;
+			break;
+		case 4:
+			lw = 1;
+			break;
+		case 8:
+			lw = 2;
+			break;
+		case 16:
+			lw = 3;
+			break;
+		default:
+			lw = 0;
+		}
+		mps = (FIRE_PCI_READ_8(sc, FO_PCI_TLU_CTRL) &
+		    FO_PCI_TLU_CTRL_CFG_MASK) >> FO_PCI_TLU_CTRL_CFG_SHFT;
+		i = sizeof(fire_freq_nak_tmr_thrs) /
+		    sizeof(*fire_freq_nak_tmr_thrs);
+		if (mps >= i);
+			mps = i - 1;
+		FIRE_PCI_SET(sc, FO_PCI_LPU_TXLNK_FREQ_LAT_TMR_THRS,
+		    (fire_freq_nak_tmr_thrs[mps][lw] <<
+		    FO_PCI_LPU_TXLNK_FREQ_LAT_TMR_THRS_SHFT) &
+		    FO_PCI_LPU_TXLNK_FREQ_LAT_TMR_THRS_MASK);
+		FIRE_PCI_SET(sc, FO_PCI_LPU_TXLNK_RPLY_TMR_THRS,
+		    (fire_rply_tmr_thrs[mps][lw] <<
+		    FO_PCI_LPU_TXLNK_RPLY_TMR_THRS_SHFT) &
+		    FO_PCI_LPU_TXLNK_RPLY_TMR_THRS_MASK);
+		FIRE_PCI_SET(sc, FO_PCI_LPU_TXLNK_RTR_FIFO_PTR,
+		    ((FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_TL_DFLT <<
+		    FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_TL_SHFT) &
+		    FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_TL_MASK) |
+		    ((FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_HD_DFLT <<
+		    FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_HD_SHFT) &
+		    FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_HD_MASK));
+		FIRE_PCI_SET(sc, FO_PCI_LPU_LTSSM_CFG2,
+		    (FO_PCI_LPU_LTSSM_CFG2_12_TO_DFLT <<
+		    FO_PCI_LPU_LTSSM_CFG2_12_TO_SHFT) &
+		    FO_PCI_LPU_LTSSM_CFG2_12_TO_MASK);
+		FIRE_PCI_SET(sc, FO_PCI_LPU_LTSSM_CFG3,
+		    (FO_PCI_LPU_LTSSM_CFG3_2_TO_DFLT <<
+		    FO_PCI_LPU_LTSSM_CFG3_2_TO_SHFT) &
+		    FO_PCI_LPU_LTSSM_CFG3_2_TO_MASK);
+		FIRE_PCI_SET(sc, FO_PCI_LPU_LTSSM_CFG4,
+		    ((FO_PCI_LPU_LTSSM_CFG4_DATA_RATE_DFLT <<
+		    FO_PCI_LPU_LTSSM_CFG4_DATA_RATE_SHFT) &
+		    FO_PCI_LPU_LTSSM_CFG4_DATA_RATE_MASK) |
+		    ((FO_PCI_LPU_LTSSM_CFG4_N_FTS_DFLT <<
+		    FO_PCI_LPU_LTSSM_CFG4_N_FTS_SHFT) &
+		    FO_PCI_LPU_LTSSM_CFG4_N_FTS_MASK));
+		FIRE_PCI_SET(sc, FO_PCI_LPU_LTSSM_CFG5, 0);
+	}
+
+	/* ILU initialization */
+	FIRE_PCI_SET(sc, FO_PCI_ILU_ERR_STAT_CLR, ~0ULL);
+	/* not enabled by OpenSolaris */
+	FIRE_PCI_SET(sc, FO_PCI_ILU_INT_EN, ~0ULL);
+
+	/* IMU initialization */
+	FIRE_PCI_SET(sc, FO_PCI_IMU_ERR_STAT_CLR, ~0ULL);
+	FIRE_PCI_SET(sc, FO_PCI_IMU_INT_EN,
+	    FIRE_PCI_READ_8(sc, FO_PCI_IMU_INT_EN) &
+	    ~(FO_PCI_IMU_ERR_INT_FATAL_MES_NOT_EN_S |
+	    FO_PCI_IMU_ERR_INT_NFATAL_MES_NOT_EN_S |
+	    FO_PCI_IMU_ERR_INT_COR_MES_NOT_EN_S |
+	    FO_PCI_IMU_ERR_INT_FATAL_MES_NOT_EN_P |
+	    FO_PCI_IMU_ERR_INT_NFATAL_MES_NOT_EN_P |
+	    FO_PCI_IMU_ERR_INT_COR_MES_NOT_EN_P));
+
+	/* MMU initialization */
+	FIRE_PCI_SET(sc, FO_PCI_MMU_ERR_STAT_CLR,
+	    FO_PCI_MMU_ERR_INT_S_MASK | FO_PCI_MMU_ERR_INT_P_MASK);
+	/* not enabled by OpenSolaris */
+	FIRE_PCI_SET(sc, FO_PCI_MMU_INT_EN,
+	    FO_PCI_MMU_ERR_INT_S_MASK | FO_PCI_MMU_ERR_INT_P_MASK);
+
+	/* DMC initialization */
+	FIRE_PCI_SET(sc, FO_PCI_DMC_CORE_BLOCK_INT_EN, ~0ULL);
+	FIRE_PCI_SET(sc, FO_PCI_DMC_DBG_SEL_PORTA, 0);
+	FIRE_PCI_SET(sc, FO_PCI_DMC_DBG_SEL_PORTB, 0);
+
+	/* PEC initialization */
+	FIRE_PCI_SET(sc, FO_PCI_PEC_CORE_BLOCK_INT_EN, ~0ULL);
+
+	/* Establish handlers for interesting interrupts. */
+	if ((ino_bitmap & (1ULL << FO_DMC_PEC_INO)) != 0)
+		fire_set_intr(sc, 1, FO_DMC_PEC_INO, fire_dmc_pec, sc);
+	if ((ino_bitmap & (1ULL << FO_XCB_INO)) != 0)
+		fire_set_intr(sc, 0, FO_XCB_INO, fire_xcb, sc);
+
+	/* MSI/MSI-X support */
+	if (OF_getprop(node, "#msi", &sc->sc_msi_count,
+	    sizeof(sc->sc_msi_count)) == -1)
+		panic("%s: could not determine MSI count", __func__);
+	if (OF_getprop(node, "msi-ranges", &msi_ranges,
+	    sizeof(msi_ranges)) == -1)
+		sc->sc_msi_first = 0;
+	else
+		sc->sc_msi_first = msi_ranges.first;
+	if (OF_getprop(node, "msi-data-mask", &sc->sc_msi_data_mask,
+	    sizeof(sc->sc_msi_data_mask)) == -1)
+		panic("%s: could not determine MSI data mask", __func__);
+	if (OF_getprop(node, "msix-data-width", &sc->sc_msix_data_width,
+	    sizeof(sc->sc_msix_data_width)) > 0)
+		sc->sc_flags |= FIRE_MSIX;
+	if (OF_getprop(node, "msi-address-ranges", &msi_addr_ranges,
+	    sizeof(msi_addr_ranges)) == -1)
+		panic("%s: could not determine MSI address ranges", __func__);
+	sc->sc_msi_addr32 = OFW_PCI_MSI_ADDR_RANGE_32(&msi_addr_ranges);
+	sc->sc_msi_addr64 = OFW_PCI_MSI_ADDR_RANGE_64(&msi_addr_ranges);
+	if (OF_getprop(node, "#msi-eqs", &sc->sc_msiq_count,
+	    sizeof(sc->sc_msiq_count)) == -1)
+		panic("%s: could not determine MSI event queue count",
+		    __func__);
+	if (OF_getprop(node, "msi-eq-size", &sc->sc_msiq_size,
+	    sizeof(sc->sc_msiq_size)) == -1)
+		panic("%s: could not determine MSI event queue size",
+		    __func__);
+	if (OF_getprop(node, "msi-eq-to-devino", &msi_eq_to_devino,
+	    sizeof(msi_eq_to_devino)) == -1 &&
+	    OF_getprop(node, "msi-eq-devino", &msi_eq_to_devino,
+	    sizeof(msi_eq_to_devino)) == -1) {
+		sc->sc_msiq_first = 0;
+		sc->sc_msiq_ino_first = FO_EQ_FIRST_INO;
+	} else {
+		sc->sc_msiq_first = msi_eq_to_devino.eq_first;
+		sc->sc_msiq_ino_first = msi_eq_to_devino.devino_first;
+	}
+	if (sc->sc_msiq_ino_first < FO_EQ_FIRST_INO ||
+	    sc->sc_msiq_ino_first + sc->sc_msiq_count - 1 > FO_EQ_LAST_INO)
+		panic("%s: event queues exceed INO range", __func__);
+	sc->sc_msi_bitmap = malloc(roundup2(sc->sc_msi_count, NBBY) / NBBY,
+	    M_DEVBUF, M_NOWAIT | M_ZERO);
+	if (sc->sc_msi_bitmap == NULL)
+		panic("%s: could not malloc MSI bitmap", __func__);
+	sc->sc_msi_msiq_table = malloc(sc->sc_msi_count *
+	    sizeof(*sc->sc_msi_msiq_table), M_DEVBUF, M_NOWAIT | M_ZERO);
+	if (sc->sc_msi_msiq_table == NULL)
+		panic("%s: could not malloc MSI-MSI event queue table",
+		    __func__);
+	sc->sc_msiq_bitmap = malloc(roundup2(sc->sc_msiq_count, NBBY) / NBBY,
+	    M_DEVBUF, M_NOWAIT | M_ZERO);
+	if (sc->sc_msiq_bitmap == NULL)
+		panic("%s: could not malloc MSI event queue bitmap", __func__);
+	j = FO_EQ_RECORD_SIZE * FO_EQ_NRECORDS * sc->sc_msiq_count;
+	sc->sc_msiq = contigmalloc(j, M_DEVBUF, M_NOWAIT, 0, ~0UL,
+	    FO_EQ_ALIGNMENT, 0);
+	if (sc->sc_msiq == NULL)
+		panic("%s: could not contigmalloc MSI event queue", __func__);
+	memset(sc->sc_msiq, 0, j);
+	FIRE_PCI_SET(sc, FO_PCI_EQ_BASE_ADDR, FO_PCI_EQ_BASE_ADDR_BYPASS |
+	    (pmap_kextract((vm_offset_t)sc->sc_msiq) &
+	    FO_PCI_EQ_BASE_ADDR_MASK));
+	for (i = 0; i < sc->sc_msi_count; i++) {
+		j = (i + sc->sc_msi_first) << 3;
+		FIRE_PCI_WRITE_8(sc, FO_PCI_MSI_MAP_BASE + j,
+		    FIRE_PCI_READ_8(sc, FO_PCI_MSI_MAP_BASE + j) &
+		    ~FO_PCI_MSI_MAP_V);
+	}
+	for (i = 0; i < sc->sc_msiq_count; i++) {
+		j = i + sc->sc_msiq_ino_first;
+		if ((ino_bitmap & (1ULL << j)) == 0) {
+			mtx_lock(&sc->sc_msi_mtx);
+			setbit(sc->sc_msiq_bitmap, i);
+			mtx_unlock(&sc->sc_msi_mtx);
+		}
+		fmqa = intr_vectors[INTMAP_VEC(sc->sc_ign, j)].iv_icarg;
+		mtx_init(&fmqa->fmqa_mtx, "msiq_mtx", NULL, MTX_SPIN);
+		fmqa->fmqa_base =
+		    (struct fo_msiq_record *)((caddr_t)sc->sc_msiq +
+		    (FO_EQ_RECORD_SIZE * FO_EQ_NRECORDS * i));
+		j = i + sc->sc_msiq_first;
+		fmqa->fmqa_msiq = j;
+		j <<= 3;
+		fmqa->fmqa_head = FO_PCI_EQ_HD_BASE + j;
+		fmqa->fmqa_tail = FO_PCI_EQ_TL_BASE + j;
+		FIRE_PCI_WRITE_8(sc, FO_PCI_EQ_CTRL_CLR_BASE + j,
+		    FO_PCI_EQ_CTRL_CLR_COVERR | FO_PCI_EQ_CTRL_CLR_E2I |
+		    FO_PCI_EQ_CTRL_CLR_DIS);
+		FIRE_PCI_WRITE_8(sc, fmqa->fmqa_tail,
+		    (0 << FO_PCI_EQ_TL_SHFT) & FO_PCI_EQ_TL_MASK);
+		FIRE_PCI_WRITE_8(sc, fmqa->fmqa_head,
+		    (0 << FO_PCI_EQ_HD_SHFT) & FO_PCI_EQ_HD_MASK);
+	}
+	FIRE_PCI_SET(sc, FO_PCI_MSI_32_BIT_ADDR, sc->sc_msi_addr32 &
+	    FO_PCI_MSI_32_BIT_ADDR_MASK);
+	FIRE_PCI_SET(sc, FO_PCI_MSI_64_BIT_ADDR, sc->sc_msi_addr64 &
+	    FO_PCI_MSI_64_BIT_ADDR_MASK);
+
+	/*
+	 * Establish a handler for interesting PCIe messages and disable
+	 * unintersting ones.
+	 */
+	mtx_lock(&sc->sc_msi_mtx);
+	for (i = 0; i < sc->sc_msiq_count; i++) {
+		if (isclr(sc->sc_msiq_bitmap, i) != 0) {
+			j = i;
+			break;
+		}
+	}
+	if (i == sc->sc_msiq_count) {
+		mtx_unlock(&sc->sc_msi_mtx);
+		panic("%s: no spare event queue for PCIe messages", __func__);
+	}
+	setbit(sc->sc_msiq_bitmap, j);
+	mtx_unlock(&sc->sc_msi_mtx);
+	i = INTMAP_VEC(sc->sc_ign, j + sc->sc_msiq_ino_first);
+	if (bus_set_resource(dev, SYS_RES_IRQ, 2, i, 1) != 0)
+		panic("%s: failed to add interrupt for PCIe messages",
+		    __func__);
+	fire_set_intr(sc, 2, INTINO(i), fire_pcie, intr_vectors[i].iv_icarg);
+	j += sc->sc_msiq_first;
+	/*
+	 * "Please note that setting the EQNUM field to a value larger than
+	 * 35 will yield unpredictable results."
+	 */
+	if (j > 35)
+		panic("%s: invalid queue for PCIe messages (%d)",
+		    __func__, j);
+	FIRE_PCI_SET(sc, FO_PCI_ERR_COR, FO_PCI_ERR_PME_V |
+	    ((j << FO_PCI_ERR_PME_EQNUM_SHFT) & FO_PCI_ERR_PME_EQNUM_MASK));
+	FIRE_PCI_SET(sc, FO_PCI_ERR_NONFATAL, FO_PCI_ERR_PME_V |
+	    ((j << FO_PCI_ERR_PME_EQNUM_SHFT) & FO_PCI_ERR_PME_EQNUM_MASK));
+	FIRE_PCI_SET(sc, FO_PCI_ERR_FATAL, FO_PCI_ERR_PME_V |
+	    ((j << FO_PCI_ERR_PME_EQNUM_SHFT) & FO_PCI_ERR_PME_EQNUM_MASK));
+	FIRE_PCI_SET(sc, FO_PCI_PM_PME, 0);
+	FIRE_PCI_SET(sc, FO_PCI_PME_TO_ACK, 0);
+	FIRE_PCI_WRITE_8(sc, FO_PCI_EQ_CTRL_SET_BASE + (j << 3),
+	    FO_PCI_EQ_CTRL_SET_EN);
+
+#define	TC_COUNTER_MAX_MASK	0xffffffff
+
+	/*
+	 * Setup JBC/UBC performance counter 0 in bus cycle counting
+	 * mode as timecounter.  Unfortunately, at least with Fire all
+	 * JBus-driven performance counters just don't advance in bus
+	 * cycle counting mode.
+	 */
+	if (device_get_unit(dev) == 0) {
+		FIRE_CTRL_SET(sc, FO_XBC_PRF_CNT0, 0);
+		FIRE_CTRL_SET(sc, FO_XBC_PRF_CNT1, 0);
+		FIRE_CTRL_SET(sc, FO_XBC_PRF_CNT_SEL,
+		    (FO_XBC_PRF_CNT_NONE << FO_XBC_PRF_CNT_CNT1_SHFT) |
+		    (FO_XBC_PRF_CNT_XB_CLK << FO_XBC_PRF_CNT_CNT0_SHFT));
+#ifdef FIRE_DEBUG
+		device_printf(dev, "FO_XBC_PRF_CNT0 0x%016llx\n",
+		    (long long unsigned)FIRE_CTRL_READ_8(sc,
+		    FO_XBC_PRF_CNT0));
+		device_printf(dev, "FO_XBC_PRF_CNT0 0x%016llx\n",
+		    (long long unsigned)FIRE_CTRL_READ_8(sc,
+		    FO_XBC_PRF_CNT0));
+#endif
+		tc = malloc(sizeof(*tc), M_DEVBUF, M_NOWAIT | M_ZERO);
+		if (tc == NULL)
+			panic("%s: could not malloc timecounter", __func__);
+		tc->tc_get_timecount = fire_get_timecount;
+		tc->tc_poll_pps = NULL;
+		tc->tc_counter_mask = TC_COUNTER_MAX_MASK;
+		if (OF_getprop(OF_peer(0), "clock-frequency", &prop,
+		    sizeof(prop)) == -1)
+			panic("%s: could not determine clock frequency",
+			    __func__);
+		tc->tc_frequency = prop;
+		tc->tc_name = strdup(device_get_nameunit(dev), M_DEVBUF);
+		tc->tc_quality = -FIRE_PERF_CNT_QLTY;
+		tc->tc_priv = sc;
+		tc_init(tc);
+	}
+
+	/*
+	 * Set up the IOMMU.  Both Fire and Oberon have one per PBM, but
+	 * neither has a streaming buffer.
+	 */
+	memcpy(&sc->sc_dma_methods, &iommu_dma_methods,
+	    sizeof(sc->sc_dma_methods));
+	sc->sc_is.is_flags = IOMMU_FIRE | IOMMU_PRESERVE_PROM;
+	if (sc->sc_mode == FIRE_MODE_OBERON) {
+		sc->sc_is.is_flags |= IOMMU_FLUSH_CACHE;
+		sc->sc_is.is_pmaxaddr = IOMMU_MAXADDR(OBERON_IOMMU_BITS);
+	} else {
+		sc->sc_dma_methods.dm_dmamap_sync = fire_dmamap_sync;
+		sc->sc_is.is_pmaxaddr = IOMMU_MAXADDR(FIRE_IOMMU_BITS);
+	}
+	sc->sc_is.is_sb[0] = sc->sc_is.is_sb[1] = 0;
+	/* Punch in our copies. */
+	sc->sc_is.is_bustag = rman_get_bustag(sc->sc_mem_res[FIRE_PCI]);
+	sc->sc_is.is_bushandle = rman_get_bushandle(sc->sc_mem_res[FIRE_PCI]);
+	sc->sc_is.is_iommu = FO_PCI_MMU;
+	val = FIRE_PCI_READ_8(sc, FO_PCI_MMU + IMR_CTL);
+	iommu_init(device_get_nameunit(sc->sc_dev), &sc->sc_is, 7, -1, 0);
+#ifdef FIRE_DEBUG
+	device_printf(dev, "FO_PCI_MMU + IMR_CTL 0x%016llx -> 0x%016llx\n",
+	    (long long unsigned)val, (long long unsigned)sc->sc_is.is_cr);
+#endif
+
+	/* Initialize memory and I/O rmans. */
+	sc->sc_pci_io_rman.rm_type = RMAN_ARRAY;
+	sc->sc_pci_io_rman.rm_descr = "Fire PCI I/O Ports";
+	if (rman_init(&sc->sc_pci_io_rman) != 0 ||
+	    rman_manage_region(&sc->sc_pci_io_rman, 0, FO_IO_SIZE) != 0)
+		panic("%s: failed to set up I/O rman", __func__);
+	sc->sc_pci_mem_rman.rm_type = RMAN_ARRAY;
+	sc->sc_pci_mem_rman.rm_descr = "Fire PCI Memory";
+	if (rman_init(&sc->sc_pci_mem_rman) != 0 ||
+	    rman_manage_region(&sc->sc_pci_mem_rman, 0, FO_MEM_SIZE) != 0)
+		panic("%s: failed to set up memory rman", __func__);
+
+	i = OF_getprop_alloc(node, "ranges", sizeof(*range), (void **)&range);
+	/*
+	 * Make sure that the expected ranges are present.  The
+	 * OFW_PCI_CS_MEM64 one is not currently used though.
+	 */
+	if (i != FIRE_NRANGE)
+		panic("%s: unsupported number of ranges", __func__);
+	/*
+	 * Find the addresses of the various bus spaces.
+	 * There should not be multiple ones of one kind.
+	 * The physical start addresses of the ranges are the configuration,
+	 * memory and I/O handles.
+	 */
+	for (i = 0; i < FIRE_NRANGE; i++) {
+		j = OFW_PCI_RANGE_CS(&range[i]);
+		if (sc->sc_pci_bh[j] != 0)
+			panic("%s: duplicate range for space %d",
+			    __func__, j);
+		sc->sc_pci_bh[j] = OFW_PCI_RANGE_PHYS(&range[i]);
+	}
+	free(range, M_OFWPROP);
+
+	/* Allocate our tags. */
+	sc->sc_pci_memt = fire_alloc_bus_tag(sc, PCI_MEMORY_BUS_SPACE);
+	sc->sc_pci_iot = fire_alloc_bus_tag(sc, PCI_IO_BUS_SPACE);
+	sc->sc_pci_cfgt = fire_alloc_bus_tag(sc, PCI_CONFIG_BUS_SPACE);
+	if (bus_dma_tag_create(bus_get_dma_tag(dev), 8, 0,
+	    sc->sc_is.is_pmaxaddr, ~0, NULL, NULL, sc->sc_is.is_pmaxaddr,
+	    0xff, 0xffffffff, 0, NULL, NULL, &sc->sc_pci_dmat) != 0)
+		panic("%s: bus_dma_tag_create failed", __func__);
+	/* Customize the tag. */
+	sc->sc_pci_dmat->dt_cookie = &sc->sc_is;
+	sc->sc_pci_dmat->dt_mt = &sc->sc_dma_methods;
+
+	/*
+	 * Get the bus range from the firmware.
+	 * NB: Neither Fire nor Oberon support PCI bus reenumeration.
+	 */
+	i = OF_getprop(node, "bus-range", (void *)prop_array,
+	    sizeof(prop_array));
+	if (i == -1)
+		panic("%s: could not get bus-range", __func__);
+	if (i != sizeof(prop_array))
+		panic("%s: broken bus-range (%d)", __func__, i);
+	sc->sc_pci_secbus = prop_array[0];
+	sc->sc_pci_subbus = prop_array[1];
+	if (bootverbose != 0)
+		device_printf(dev, "bus range %u to %u; PCI bus %d\n",
+		    sc->sc_pci_secbus, sc->sc_pci_subbus, sc->sc_pci_secbus);
+
+	ofw_bus_setup_iinfo(node, &sc->sc_pci_iinfo, sizeof(ofw_pci_intr_t));
+
+#define	FIRE_SYSCTL_ADD_UINT(name, arg, desc)				\
+	SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev),			\
+	    SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO,	\
+	    (name), CTLFLAG_RD, (arg), 0, (desc))
+
+	FIRE_SYSCTL_ADD_UINT("ilu_err", &sc->sc_stats_ilu_err,
+	    "ILU unknown errors");
+	FIRE_SYSCTL_ADD_UINT("jbc_ce_async", &sc->sc_stats_jbc_ce_async,
+	    "JBC correctable errors");
+	FIRE_SYSCTL_ADD_UINT("jbc_unsol_int", &sc->sc_stats_jbc_unsol_int,
+	    "JBC unsolicited interrupt ACK/NACK errors");
+	FIRE_SYSCTL_ADD_UINT("jbc_unsol_rd", &sc->sc_stats_jbc_unsol_rd,
+	    "JBC unsolicited read response errors");
+	FIRE_SYSCTL_ADD_UINT("mmu_err", &sc->sc_stats_mmu_err, "MMU errors");
+	FIRE_SYSCTL_ADD_UINT("tlu_ce", &sc->sc_stats_tlu_ce,
+	    "DLU/TLU correctable errors");
+	FIRE_SYSCTL_ADD_UINT("tlu_oe_non_fatal",
+	    &sc->sc_stats_tlu_oe_non_fatal,
+	    "DLU/TLU other event non-fatal errors summary"),
+	FIRE_SYSCTL_ADD_UINT("tlu_oe_rx_err", &sc->sc_stats_tlu_oe_rx_err,
+	    "DLU/TLU receive other event errors"),
+	FIRE_SYSCTL_ADD_UINT("tlu_oe_tx_err", &sc->sc_stats_tlu_oe_tx_err,
+	    "DLU/TLU transmit other event errors"),
+	FIRE_SYSCTL_ADD_UINT("ubc_dmardue", &sc->sc_stats_ubc_dmardue,
+	    "UBC DMARDUE erros");
+
+#undef FIRE_SYSCTL_ADD_UINT
+
+	device_add_child(dev, "pci", -1);
+	return (bus_generic_attach(dev));
+}
+
+static void
+fire_set_intr(struct fire_softc *sc, u_int index, u_int ino,
+    driver_filter_t handler, void *arg)
+{
+	u_long vec;
+	int rid;
+
+	rid = index;
+	sc->sc_irq_res[index] = bus_alloc_resource_any(sc->sc_dev,
+	    SYS_RES_IRQ, &rid, RF_ACTIVE);
+	if (sc->sc_irq_res[index] == NULL ||
+	    INTINO(vec = rman_get_start(sc->sc_irq_res[index])) != ino ||
+	    INTIGN(vec) != sc->sc_ign ||
+	    intr_vectors[vec].iv_ic != &fire_ic ||
+	    bus_setup_intr(sc->sc_dev, sc->sc_irq_res[index],
+	    INTR_TYPE_MISC | INTR_FAST, handler, NULL, arg,
+	    &sc->sc_ihand[index]) != 0)
+		panic("%s: failed to set up interrupt %d", __func__, index);
+}
+
+static int
+fire_intr_register(struct fire_softc *sc, u_int ino)
+{
+	struct fire_icarg *fica;
+	bus_addr_t intrclr, intrmap;
+	int error;
+
+	if (fire_get_intrmap(sc, ino, &intrmap, &intrclr) == 0)
+		return (ENXIO);
+	fica = malloc((ino >= FO_EQ_FIRST_INO && ino <= FO_EQ_LAST_INO) ?
+	    sizeof(struct fire_msiqarg) : sizeof(struct fire_icarg), M_DEVBUF,
+	    M_NOWAIT);
+	if (fica == NULL)
+		return (ENOMEM);
+	fica->fica_sc = sc;
+	fica->fica_map = intrmap;
+	fica->fica_clr = intrclr;
+	error = (intr_controller_register(INTMAP_VEC(sc->sc_ign, ino),
+	    &fire_ic, fica));
+	if (error != 0)
+		free(fica, M_DEVBUF);
+	return (error);
+}
+
+static int
+fire_get_intrmap(struct fire_softc *sc, u_int ino, bus_addr_t *intrmapptr,
+    bus_addr_t *intrclrptr)
+{
+
+	if (ino > FO_MAX_INO) {
+		device_printf(sc->sc_dev, "out of range INO %d requested\n",
+		    ino);
+		return (0);
+	}
+
+	ino <<= 3;
+	if (intrmapptr != NULL)
+		*intrmapptr = FO_PCI_INT_MAP_BASE + ino;
+	if (intrclrptr != NULL)
+		*intrclrptr = FO_PCI_INT_CLR_BASE + ino;
+	return (1);
+}
+
+/*
+ * Interrupt handlers
+ */
+static int
+fire_dmc_pec(void *arg)
+{
+	struct fire_softc *sc;
+	device_t dev;
+	uint64_t cestat, dmcstat, ilustat, imustat, mcstat, mmustat, mmutfar;
+	uint64_t mmutfsr, oestat, pecstat, uestat, val;
+	u_int fatal, oenfatal;
+
+	fatal = 0;
+	sc = arg;
+	dev = sc->sc_dev;
+	mtx_lock_spin(&sc->sc_pcib_mtx);
+	mcstat = FIRE_PCI_READ_8(sc, FO_PCI_MULTI_CORE_ERR_STAT);
+	if ((mcstat & FO_PCI_MULTI_CORE_ERR_STAT_DMC) != 0) {
+		dmcstat = FIRE_PCI_READ_8(sc, FO_PCI_DMC_CORE_BLOCK_ERR_STAT);
+		if ((dmcstat & FO_PCI_DMC_CORE_BLOCK_INT_EN_IMU) != 0) {
+			imustat = FIRE_PCI_READ_8(sc, FO_PCI_IMU_INT_STAT);
+			device_printf(dev, "IMU error %#llx\n",
+			    (unsigned long long)imustat);
+			if ((imustat &
+			    FO_PCI_IMU_ERR_INT_EQ_NOT_EN_P) != 0) {
+				fatal = 1;
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_IMU_SCS_ERR_LOG);
+				device_printf(dev, "SCS error log %#llx\n",
+				    (unsigned long long)val);
+			}
+			if ((imustat & FO_PCI_IMU_ERR_INT_EQ_OVER_P) != 0) {
+				fatal = 1;
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_IMU_EQS_ERR_LOG);
+				device_printf(dev, "EQS error log %#llx\n",
+				    (unsigned long long)val);
+			}
+			if ((imustat & (FO_PCI_IMU_ERR_INT_MSI_MAL_ERR_P |
+			    FO_PCI_IMU_ERR_INT_MSI_PAR_ERR_P |
+			    FO_PCI_IMU_ERR_INT_PMEACK_MES_NOT_EN_P |
+			    FO_PCI_IMU_ERR_INT_PMPME_MES_NOT_EN_P |
+			    FO_PCI_IMU_ERR_INT_FATAL_MES_NOT_EN_P |
+			    FO_PCI_IMU_ERR_INT_NFATAL_MES_NOT_EN_P |
+			    FO_PCI_IMU_ERR_INT_COR_MES_NOT_EN_P |
+			    FO_PCI_IMU_ERR_INT_MSI_NOT_EN_P)) != 0) {
+				fatal = 1;
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_IMU_RDS_ERR_LOG);
+				device_printf(dev, "RDS error log %#llx\n",
+				    (unsigned long long)val);
+			}
+		}
+		if ((dmcstat & FO_PCI_DMC_CORE_BLOCK_INT_EN_MMU) != 0) {
+			fatal = 1;
+			mmustat = FIRE_PCI_READ_8(sc, FO_PCI_MMU_INT_STAT);
+			mmutfar = FIRE_PCI_READ_8(sc,
+			    FO_PCI_MMU_TRANS_FAULT_ADDR);
+			mmutfsr = FIRE_PCI_READ_8(sc,
+			    FO_PCI_MMU_TRANS_FAULT_STAT);
+			if ((mmustat & (FO_PCI_MMU_ERR_INT_TBW_DPE_P |
+			    FO_PCI_MMU_ERR_INT_TBW_ERR_P |
+			    FO_PCI_MMU_ERR_INT_TBW_UDE_P |
+			    FO_PCI_MMU_ERR_INT_TBW_DME_P |
+			    FO_PCI_MMU_ERR_INT_TTC_CAE_P |
+			    FIRE_PCI_MMU_ERR_INT_TTC_DPE_P |
+			    OBERON_PCI_MMU_ERR_INT_TTC_DUE_P |
+			    FO_PCI_MMU_ERR_INT_TRN_ERR_P)) != 0)
+				fatal = 1;
+			else {
+				sc->sc_stats_mmu_err++;
+				FIRE_PCI_WRITE_8(sc, FO_PCI_MMU_ERR_STAT_CLR,
+				    mmustat);
+			}
+			device_printf(dev,
+			    "MMU error %#llx: TFAR %#llx TFSR %#llx\n",
+			    (unsigned long long)mmustat,
+			    (unsigned long long)mmutfar,
+			    (unsigned long long)mmutfsr);
+		}
+	}
+	if ((mcstat & FO_PCI_MULTI_CORE_ERR_STAT_PEC) != 0) {
+		pecstat = FIRE_PCI_READ_8(sc, FO_PCI_PEC_CORE_BLOCK_INT_STAT);
+		if ((pecstat & FO_PCI_PEC_CORE_BLOCK_INT_STAT_UERR) != 0) {
+			fatal = 1;
+			uestat = FIRE_PCI_READ_8(sc,
+			    FO_PCI_TLU_UERR_INT_STAT);
+			device_printf(dev,
+			    "DLU/TLU uncorrectable error %#llx\n",
+			    (unsigned long long)uestat);
+			if ((uestat & (FO_PCI_TLU_UERR_INT_UR_P |
+			    OBERON_PCI_TLU_UERR_INT_POIS_P |
+			    FO_PCI_TLU_UERR_INT_MFP_P |
+			    FO_PCI_TLU_UERR_INT_ROF_P |
+			    FO_PCI_TLU_UERR_INT_UC_P |
+			    FIRE_PCI_TLU_UERR_INT_PP_P |
+			    OBERON_PCI_TLU_UERR_INT_POIS_P)) != 0) {
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_TLU_RX_UERR_HDR1_LOG);
+				device_printf(dev,
+				    "receive header log %#llx\n",
+				    (unsigned long long)val);
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_TLU_RX_UERR_HDR2_LOG);
+				device_printf(dev,
+				    "receive header log 2 %#llx\n",
+				    (unsigned long long)val);
+			}
+			if ((uestat & FO_PCI_TLU_UERR_INT_CTO_P) != 0) {
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_TLU_TX_UERR_HDR1_LOG);
+				device_printf(dev,
+				    "transmit header log %#llx\n",
+				    (unsigned long long)val);
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_TLU_TX_UERR_HDR2_LOG);
+				device_printf(dev,
+				    "transmit header log 2 %#llx\n",
+				    (unsigned long long)val);
+			}
+			if ((uestat & FO_PCI_TLU_UERR_INT_DLP_P) != 0) {
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_LPU_LNK_LYR_INT_STAT);
+				device_printf(dev,
+				    "link layer interrupt and status %#llx\n",
+				    (unsigned long long)val);
+			}
+			if ((uestat & FO_PCI_TLU_UERR_INT_TE_P) != 0) {
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_LPU_PHY_LYR_INT_STAT);
+				device_printf(dev,
+				    "phy layer interrupt and status %#llx\n",
+				    (unsigned long long)val);
+			}
+		}
+		if ((pecstat & FO_PCI_PEC_CORE_BLOCK_INT_STAT_CERR) != 0) {
+			sc->sc_stats_tlu_ce++;
+			cestat = FIRE_PCI_READ_8(sc,
+			    FO_PCI_TLU_CERR_INT_STAT);
+			device_printf(dev,
+			    "DLU/TLU correctable error %#llx\n",
+			    (unsigned long long)cestat);
+			val = FIRE_PCI_READ_8(sc,
+			    FO_PCI_LPU_LNK_LYR_INT_STAT);
+			device_printf(dev,
+			    "link layer interrupt and status %#llx\n",
+			    (unsigned long long)val);
+			if ((cestat & FO_PCI_TLU_CERR_INT_RE_P) != 0) {
+				FIRE_PCI_WRITE_8(sc,
+				    FO_PCI_LPU_LNK_LYR_INT_STAT, val);
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_LPU_PHY_LYR_INT_STAT);
+				device_printf(dev,
+				    "phy layer interrupt and status %#llx\n",
+				    (unsigned long long)val);
+			}
+			FIRE_PCI_WRITE_8(sc, FO_PCI_TLU_CERR_STAT_CLR,
+			    cestat);
+		}
+		if ((pecstat & FO_PCI_PEC_CORE_BLOCK_INT_STAT_OEVENT) != 0) {
+			oenfatal = 0;
+			oestat = FIRE_PCI_READ_8(sc,
+			    FO_PCI_TLU_OEVENT_INT_STAT);
+			device_printf(dev, "DLU/TLU other event %#llx\n",
+			    (unsigned long long)oestat);
+			if ((oestat & (FO_PCI_TLU_OEVENT_MFC_P |
+			    FO_PCI_TLU_OEVENT_MRC_P |
+			    FO_PCI_TLU_OEVENT_WUC_P |
+			    FO_PCI_TLU_OEVENT_RUC_P |
+			    FO_PCI_TLU_OEVENT_CRS_P)) != 0) {
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_TLU_RX_OEVENT_HDR1_LOG);
+				device_printf(dev,
+				    "receive header log %#llx\n",
+				    (unsigned long long)val);
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_TLU_RX_OEVENT_HDR2_LOG);
+				device_printf(dev,
+				    "receive header log 2 %#llx\n",
+				    (unsigned long long)val);
+				if ((oestat & (FO_PCI_TLU_OEVENT_MFC_P |
+				    FO_PCI_TLU_OEVENT_MRC_P |
+				    FO_PCI_TLU_OEVENT_WUC_P |
+				    FO_PCI_TLU_OEVENT_RUC_P)) != 0)
+					fatal = 1;
+				else {
+					sc->sc_stats_tlu_oe_rx_err++;
+					oenfatal = 1;
+				}
+			}
+			if ((oestat & (FO_PCI_TLU_OEVENT_MFC_P |
+			    FO_PCI_TLU_OEVENT_CTO_P |
+			    FO_PCI_TLU_OEVENT_WUC_P |
+			    FO_PCI_TLU_OEVENT_RUC_P)) != 0) {
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_TLU_TX_OEVENT_HDR1_LOG);
+				device_printf(dev,
+				    "transmit header log %#llx\n",
+				    (unsigned long long)val);
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_TLU_TX_OEVENT_HDR2_LOG);
+				device_printf(dev,
+				    "transmit header log 2 %#llx\n",
+				    (unsigned long long)val);
+				if ((oestat & (FO_PCI_TLU_OEVENT_MFC_P |
+				    FO_PCI_TLU_OEVENT_CTO_P |
+				    FO_PCI_TLU_OEVENT_WUC_P |
+				    FO_PCI_TLU_OEVENT_RUC_P)) != 0)
+					fatal = 1;
+				else {
+					sc->sc_stats_tlu_oe_tx_err++;
+					oenfatal = 1;
+				}
+			}
+			if ((oestat & (FO_PCI_TLU_OEVENT_ERO_P |
+			    FO_PCI_TLU_OEVENT_EMP_P |
+			    FO_PCI_TLU_OEVENT_EPE_P |
+			    FIRE_PCI_TLU_OEVENT_ERP_P |
+			    OBERON_PCI_TLU_OEVENT_ERBU_P |
+			    FIRE_PCI_TLU_OEVENT_EIP_P |
+			    OBERON_PCI_TLU_OEVENT_EIUE_P)) != 0) {
+				fatal = 1;
+				val = FIRE_PCI_READ_8(sc,
+				    FO_PCI_LPU_LNK_LYR_INT_STAT);
+				device_printf(dev,
+				    "link layer interrupt and status %#llx\n",
+				    (unsigned long long)val);
+			}
+			if ((oestat & (FO_PCI_TLU_OEVENT_IIP_P |
+			    FO_PCI_TLU_OEVENT_EDP_P |
+			    FIRE_PCI_TLU_OEVENT_EHP_P |
+			    OBERON_PCI_TLU_OEVENT_TLUEITMO_S |
+			    FO_PCI_TLU_OEVENT_ERU_P)) != 0)
+				fatal = 1;
+			if ((oestat & (FO_PCI_TLU_OEVENT_NFP_P |
+			    FO_PCI_TLU_OEVENT_LWC_P |
+			    FO_PCI_TLU_OEVENT_LIN_P |
+			    FO_PCI_TLU_OEVENT_LRS_P |
+			    FO_PCI_TLU_OEVENT_LDN_P |
+			    FO_PCI_TLU_OEVENT_LUP_P)) != 0)
+				oenfatal = 1;
+			if (oenfatal != 0) {
+				sc->sc_stats_tlu_oe_non_fatal++;
+				FIRE_PCI_WRITE_8(sc,
+				    FO_PCI_TLU_OEVENT_STAT_CLR, oestat);
+				if ((oestat & FO_PCI_TLU_OEVENT_LIN_P) != 0)
+					FIRE_PCI_WRITE_8(sc,
+					    FO_PCI_LPU_LNK_LYR_INT_STAT,
+					    FIRE_PCI_READ_8(sc,
+					    FO_PCI_LPU_LNK_LYR_INT_STAT));
+			}
+		}
+		if ((pecstat & FO_PCI_PEC_CORE_BLOCK_INT_STAT_ILU) != 0) {
+			ilustat = FIRE_PCI_READ_8(sc, FO_PCI_ILU_INT_STAT);
+			device_printf(dev, "ILU error %#llx\n",
+			    (unsigned long long)ilustat);
+			if ((ilustat & (FIRE_PCI_ILU_ERR_INT_IHB_PE_P |
+			    FIRE_PCI_ILU_ERR_INT_IHB_PE_P)) != 0)
+			    fatal = 1;
+			else {
+				sc->sc_stats_ilu_err++;
+				FIRE_PCI_WRITE_8(sc, FO_PCI_ILU_INT_STAT,
+				    ilustat);
+			}
+		}
+	}
+	mtx_unlock_spin(&sc->sc_pcib_mtx);
+	if (fatal != 0)
+		panic("%s: fatal DMC/PEC error",
+		    device_get_nameunit(sc->sc_dev));
+	return (FILTER_HANDLED);
+}
+
+static int
+fire_xcb(void *arg)
+{
+	struct fire_softc *sc;
+	device_t dev;
+	uint64_t errstat, intstat, val;
+	u_int fatal;
+
+	fatal = 0;
+	sc = arg;
+	dev = sc->sc_dev;
+	mtx_lock_spin(&sc->sc_pcib_mtx);
+	if (sc->sc_mode == FIRE_MODE_OBERON) {
+		intstat = FIRE_CTRL_READ_8(sc, FO_XBC_INT_STAT);
+		device_printf(dev, "UBC error: interrupt status %#llx\n",
+		    (unsigned long long)intstat);
+		if ((intstat & ~(OBERON_UBC_ERR_INT_DMARDUEB_P |
+		    OBERON_UBC_ERR_INT_DMARDUEA_P)) != 0)
+			fatal = 1;
+		else
+			sc->sc_stats_ubc_dmardue++;
+		if (fatal != 0) {
+			mtx_unlock_spin(&sc->sc_pcib_mtx);
+			panic("%s: fatal UBC core block error",
+			    device_get_nameunit(sc->sc_dev));
+		} else {
+			FIRE_CTRL_SET(sc, FO_XBC_ERR_STAT_CLR, ~0ULL);
+			mtx_unlock_spin(&sc->sc_pcib_mtx);
+		}
+	} else {
+		errstat = FIRE_CTRL_READ_8(sc, FIRE_JBC_CORE_BLOCK_ERR_STAT);
+		if ((errstat & (FIRE_JBC_CORE_BLOCK_ERR_STAT_MERGE |
+		    FIRE_JBC_CORE_BLOCK_ERR_STAT_JBCINT |
+		    FIRE_JBC_CORE_BLOCK_ERR_STAT_DMCINT)) != 0) {
+			intstat = FIRE_CTRL_READ_8(sc, FO_XBC_INT_STAT);
+			device_printf(dev, "JBC interrupt status %#llx\n",
+			    (unsigned long long)intstat);
+			if ((intstat & FIRE_JBC_ERR_INT_EBUS_TO_P) != 0) {
+				val = FIRE_CTRL_READ_8(sc,
+				    FIRE_JBC_CSR_ERR_LOG);
+				device_printf(dev, "CSR error log %#llx\n",
+				    (unsigned long long)val);
+			}
+			if ((intstat & (FIRE_JBC_ERR_INT_UNSOL_RD_P |
+			    FIRE_JBC_ERR_INT_UNSOL_INT_P)) != 0) {
+				if ((intstat &
+				    FIRE_JBC_ERR_INT_UNSOL_RD_P) != 0)
+					sc->sc_stats_jbc_unsol_rd++;
+				if ((intstat &
+				    FIRE_JBC_ERR_INT_UNSOL_INT_P) != 0)
+					sc->sc_stats_jbc_unsol_int++;
+				val = FIRE_CTRL_READ_8(sc,
+				    FIRE_DMCINT_IDC_ERR_LOG);
+				device_printf(dev,
+				    "DMCINT IDC error log %#llx\n",
+				    (unsigned long long)val);
+			}
+			if ((intstat & (FIRE_JBC_ERR_INT_MB_PER_P |
+			    FIRE_JBC_ERR_INT_MB_PEW_P)) != 0) {
+				fatal = 1;
+				val = FIRE_CTRL_READ_8(sc,
+				    FIRE_MERGE_TRANS_ERR_LOG);
+				device_printf(dev,
+				    "merge transaction error log %#llx\n",
+				    (unsigned long long)val);
+			}
+			if ((intstat & FIRE_JBC_ERR_INT_IJP_P) != 0) {
+				fatal = 1;
+				val = FIRE_CTRL_READ_8(sc,
+				    FIRE_JBCINT_OTRANS_ERR_LOG);
+				device_printf(dev,
+				    "JBCINT out transaction error log "
+				    "%#llx\n", (unsigned long long)val);
+				val = FIRE_CTRL_READ_8(sc,
+				    FIRE_JBCINT_OTRANS_ERR_LOG2);
+				device_printf(dev,
+				    "JBCINT out transaction error log 2 "
+				    "%#llx\n", (unsigned long long)val);
+			}
+			if ((intstat & (FIRE_JBC_ERR_INT_UE_ASYN_P |
+			    FIRE_JBC_ERR_INT_CE_ASYN_P |
+			    FIRE_JBC_ERR_INT_JTE_P | FIRE_JBC_ERR_INT_JBE_P |
+			    FIRE_JBC_ERR_INT_JUE_P |
+			    FIRE_JBC_ERR_INT_ICISE_P |
+			    FIRE_JBC_ERR_INT_WR_DPE_P |
+			    FIRE_JBC_ERR_INT_RD_DPE_P |
+			    FIRE_JBC_ERR_INT_ILL_BMW_P |
+			    FIRE_JBC_ERR_INT_ILL_BMR_P |
+			    FIRE_JBC_ERR_INT_BJC_P)) != 0) {
+				if ((intstat & (FIRE_JBC_ERR_INT_UE_ASYN_P |
+				    FIRE_JBC_ERR_INT_JTE_P |
+				    FIRE_JBC_ERR_INT_JBE_P |
+				    FIRE_JBC_ERR_INT_JUE_P |
+				    FIRE_JBC_ERR_INT_ICISE_P |
+				    FIRE_JBC_ERR_INT_WR_DPE_P |
+				    FIRE_JBC_ERR_INT_RD_DPE_P |
+				    FIRE_JBC_ERR_INT_ILL_BMW_P |
+				    FIRE_JBC_ERR_INT_ILL_BMR_P |
+				    FIRE_JBC_ERR_INT_BJC_P)) != 0)
+					fatal = 1;
+				else
+					sc->sc_stats_jbc_ce_async++;
+				val = FIRE_CTRL_READ_8(sc,
+				    FIRE_JBCINT_ITRANS_ERR_LOG);
+				device_printf(dev,
+				    "JBCINT in transaction error log %#llx\n",
+				    (unsigned long long)val);
+				val = FIRE_CTRL_READ_8(sc,
+				    FIRE_JBCINT_ITRANS_ERR_LOG2);
+				device_printf(dev,
+				    "JBCINT in transaction error log 2 "
+				    "%#llx\n", (unsigned long long)val);
+			}
+			if ((intstat & (FIRE_JBC_ERR_INT_PIO_UNMAP_RD_P |
+			    FIRE_JBC_ERR_INT_ILL_ACC_RD_P |
+			    FIRE_JBC_ERR_INT_PIO_UNMAP_P |
+			    FIRE_JBC_ERR_INT_PIO_DPE_P |
+			    FIRE_JBC_ERR_INT_PIO_CPE_P |
+			    FIRE_JBC_ERR_INT_ILL_ACC_P)) != 0) {
+				fatal = 1;
+				val = FIRE_CTRL_READ_8(sc,
+				    FIRE_JBC_CSR_ERR_LOG);
+				device_printf(dev,
+				    "DMCINT ODCD error log %#llx\n",
+				    (unsigned long long)val);
+			}
+			if ((intstat & (FIRE_JBC_ERR_INT_MB_PEA_P |
+			    FIRE_JBC_ERR_INT_CPE_P | FIRE_JBC_ERR_INT_APE_P |
+			    FIRE_JBC_ERR_INT_PIO_CPE_P |
+			    FIRE_JBC_ERR_INT_JTCEEW_P |
+			    FIRE_JBC_ERR_INT_JTCEEI_P |
+			    FIRE_JBC_ERR_INT_JTCEER_P)) != 0) {
+				fatal = 1;
+				val = FIRE_CTRL_READ_8(sc,
+				    FIRE_FATAL_ERR_LOG);
+				device_printf(dev, "fatal error log %#llx\n",
+				    (unsigned long long)val);
+				val = FIRE_CTRL_READ_8(sc,
+				    FIRE_FATAL_ERR_LOG2);
+				device_printf(dev, "fatal error log 2 "
+				    "%#llx\n", (unsigned long long)val);
+			}
+			if (fatal != 0) {
+				mtx_unlock_spin(&sc->sc_pcib_mtx);
+				panic("%s: fatal JBC core block error",
+				    device_get_nameunit(sc->sc_dev));
+			} else {
+				FIRE_CTRL_SET(sc, FO_XBC_ERR_STAT_CLR, ~0ULL);
+				mtx_unlock_spin(&sc->sc_pcib_mtx);
+			}
+		} else {
+			mtx_unlock_spin(&sc->sc_pcib_mtx);
+			panic("%s: unknown JCB core block error status %#llx",
+			    device_get_nameunit(sc->sc_dev),
+			    (unsigned long long)errstat);
+		}
+	}
+	return (FILTER_HANDLED);
+}
+
+static int
+fire_pcie(void *arg)
+{
+	struct fire_msiqarg *fmqa;
+	struct fire_softc *sc;
+	struct fo_msiq_record *qrec;
+	device_t dev;
+	uint64_t word0;
+	u_int head, msg, msiq;
+
+	fmqa = arg;
+	sc = fmqa->fmqa_fica.fica_sc;
+	dev = sc->sc_dev;
+	msiq = fmqa->fmqa_msiq;
+	mtx_lock_spin(&fmqa->fmqa_mtx);
+	head = (FIRE_PCI_READ_8(sc, fmqa->fmqa_head) & FO_PCI_EQ_HD_MASK) >>
+	    FO_PCI_EQ_HD_SHFT;
+	qrec = &fmqa->fmqa_base[head];
+	word0 = qrec->fomqr_word0;
+	for (;;) {
+		KASSERT((word0 & FO_MQR_WORD0_FMT_TYPE_MSG) != 0,
+		    ("%s: received non-PCIe message in event queue %d "
+		    "(word0 %#llx)", device_get_nameunit(dev), msiq,
+		    (unsigned long long)word0));
+		msg = (word0 & FO_MQR_WORD0_DATA0_MASK) >>
+		    FO_MQR_WORD0_DATA0_SHFT;
+
+#define	PCIE_MSG_CODE_ERR_COR		0x30
+#define	PCIE_MSG_CODE_ERR_NONFATAL	0x31
+#define	PCIE_MSG_CODE_ERR_FATAL		0x33
+
+		if (msg == PCIE_MSG_CODE_ERR_COR)
+			device_printf(dev, "correctable PCIe error\n");
+		else if (msg == PCIE_MSG_CODE_ERR_NONFATAL ||
+		    msg == PCIE_MSG_CODE_ERR_FATAL)
+			panic("%s: %sfatal PCIe error",
+			    device_get_nameunit(dev),
+			    msg == PCIE_MSG_CODE_ERR_NONFATAL ? "non-" : "");
+		else
+			panic("%s: received unknown PCIe message %#x",
+			    device_get_nameunit(dev), msg);
+		qrec->fomqr_word0 &= ~FO_MQR_WORD0_FMT_TYPE_MASK;
+		head = (head + 1) % sc->sc_msiq_size;
+		qrec = &fmqa->fmqa_base[head];
+		word0 = qrec->fomqr_word0;
+		if (__predict_true((word0 & FO_MQR_WORD0_FMT_TYPE_MASK) == 0))
+			break;
+	}
+	FIRE_PCI_WRITE_8(sc, fmqa->fmqa_head, (head & FO_PCI_EQ_HD_MASK) <<
+	    FO_PCI_EQ_HD_SHFT);
+	if ((FIRE_PCI_READ_8(sc, fmqa->fmqa_tail) &
+	    FO_PCI_EQ_TL_OVERR) != 0) {
+		device_printf(dev, "event queue %d overflow\n", msiq);
+		msiq <<= 3;
+		FIRE_PCI_WRITE_8(sc, FO_PCI_EQ_CTRL_CLR_BASE + msiq,
+		    FIRE_PCI_READ_8(sc, FO_PCI_EQ_CTRL_CLR_BASE + msiq) |
+		    FO_PCI_EQ_CTRL_CLR_COVERR);
+	}
+	mtx_unlock_spin(&fmqa->fmqa_mtx);
+	return (FILTER_HANDLED);
+}
+
+static int
+fire_maxslots(device_t dev)
+{
+
+	return (1);
+}
+
+static uint32_t
+fire_read_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg,
+    int width)
+{
+	struct fire_softc *sc;
+	bus_space_handle_t bh;
+	u_long offset = 0;
+	uint32_t r, wrd;
+	int i;
+	uint16_t shrt;
+	uint8_t byte;
+
+	sc = device_get_softc(dev);
+	if (bus < sc->sc_pci_secbus || bus > sc->sc_pci_subbus ||
+	    slot > PCI_SLOTMAX || func > PCI_FUNCMAX || reg > PCIE_REGMAX)
+		return (-1);
+
+	offset = FO_CONF_OFF(bus, slot, func, reg);
+	bh = sc->sc_pci_bh[OFW_PCI_CS_CONFIG];
+	switch (width) {
+	case 1:
+		i = bus_space_peek_1(sc->sc_pci_cfgt, bh, offset, &byte);
+		r = byte;
+		break;
+	case 2:
+		i = bus_space_peek_2(sc->sc_pci_cfgt, bh, offset, &shrt);
+		r = shrt;
+		break;
+	case 4:
+		i = bus_space_peek_4(sc->sc_pci_cfgt, bh, offset, &wrd);
+		r = wrd;
+		break;
+	default:
+		panic("%s: bad width", __func__);
+		/* NOTREACHED */
+	}
+
+	if (i) {
+#ifdef FIRE_DEBUG
+		printf("%s: read data error reading: %d.%d.%d: 0x%x\n",
+		    __func__, bus, slot, func, reg);
+#endif
+		r = -1;
+	}
+	return (r);
+}
+
+static void
+fire_write_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg,
+    uint32_t val, int width)
+{
+	struct fire_softc *sc;
+	bus_space_handle_t bh;
+	u_long offset = 0;
+
+	sc = device_get_softc(dev);
+	if (bus < sc->sc_pci_secbus || bus > sc->sc_pci_subbus ||
+	    slot > PCI_SLOTMAX || func > PCI_FUNCMAX || reg > PCIE_REGMAX)
+		return;
+
+	offset = FO_CONF_OFF(bus, slot, func, reg);
+	bh = sc->sc_pci_bh[OFW_PCI_CS_CONFIG];
+	switch (width) {
+	case 1:
+		bus_space_write_1(sc->sc_pci_cfgt, bh, offset, val);
+		break;
+	case 2:
+		bus_space_write_2(sc->sc_pci_cfgt, bh, offset, val);
+		break;
+	case 4:
+		bus_space_write_4(sc->sc_pci_cfgt, bh, offset, val);
+		break;
+	default:
+		panic("%s: bad width", __func__);
+		/* NOTREACHED */
+	}
+}
+
+static int
+fire_route_interrupt(device_t bridge, device_t dev, int pin)
+{
+	struct fire_softc *sc;
+	struct ofw_pci_register reg;
+	ofw_pci_intr_t pintr, mintr;
+	uint8_t maskbuf[sizeof(reg) + sizeof(pintr)];
+
+	sc = device_get_softc(bridge);
+	pintr = pin;
+	if (ofw_bus_lookup_imap(ofw_bus_get_node(dev), &sc->sc_pci_iinfo,
+	    ®, sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr),
+	    maskbuf) != 0)
+		return (mintr);
+
+	device_printf(bridge, "could not route pin %d for device %d.%d\n",
+	    pin, pci_get_slot(dev), pci_get_function(dev));
+	return (PCI_INVALID_IRQ);
+}
+
+static int
+fire_read_ivar(device_t dev, device_t child, int which, uintptr_t *result)
+{
+	struct fire_softc *sc;
+
+	sc = device_get_softc(dev);
+	switch (which) {
+	case PCIB_IVAR_DOMAIN:
+		*result = device_get_unit(dev);
+		return (0);
+	case PCIB_IVAR_BUS:
+		*result = sc->sc_pci_secbus;
+		return (0);
+	}
+	return (ENOENT);
+}
+
+#define	VIS_BLOCKSIZE	64
+
+static void
+fire_dmamap_sync(bus_dma_tag_t dt __unused, bus_dmamap_t map,
+    bus_dmasync_op_t op)
+{
+	static u_char buf[VIS_BLOCKSIZE] __aligned(VIS_BLOCKSIZE);
+	register_t reg, s;
+
+	if ((map->dm_flags & DMF_LOADED) == 0 ||
+	    (op & ~BUS_DMASYNC_POSTWRITE) == 0)
+		return;
+
+	s = intr_disable();
+	reg = rd(fprs);
+	wr(fprs, reg | FPRS_FEF, 0);
+	__asm __volatile("stda %%f0, [%0] %1"
+	    : : "r" (buf), "n" (ASI_BLK_COMMIT_S));
+	membar(Sync);
+	wr(fprs, reg, 0);
+	intr_restore(s);
+}
+
+static void
+fire_intr_enable(void *arg)
+{
+	struct intr_vector *iv;
+	struct fire_icarg *fica;
+	struct fire_softc *sc;
+	struct pcpu *pc;
+	uint64_t mr;
+	u_int ctrl, i;
+
+	iv = arg;
+	fica = iv->iv_icarg;
+	sc = fica->fica_sc;
+	mr = FO_PCI_IMAP_V;
+	if (sc->sc_mode == FIRE_MODE_OBERON)
+		mr |= (iv->iv_mid << OBERON_PCI_IMAP_T_DESTID_SHFT) &
+		    OBERON_PCI_IMAP_T_DESTID_MASK;
+	else
+		mr |= (iv->iv_mid << FIRE_PCI_IMAP_T_JPID_SHFT) &
+		    FIRE_PCI_IMAP_T_JPID_MASK;
+	/*
+	 * Given that all mondos for the same target are required to use the
+	 * same interrupt controller we just use the CPU ID for indexing the
+	 * latter.
+	 */
+	ctrl = 0;
+	for (i = 0; i < mp_ncpus; ++i) {
+		pc = pcpu_find(i);
+		if (pc == NULL || iv->iv_mid != pc->pc_mid)
+			continue;
+		ctrl = pc->pc_cpuid % 4;
+		break;
+	}
+	mr |= (1ULL << ctrl) << FO_PCI_IMAP_INT_CTRL_NUM_SHFT &
+	    FO_PCI_IMAP_INT_CTRL_NUM_MASK;
+	FIRE_PCI_WRITE_8(sc, fica->fica_map, mr);
+}
+
+static void
+fire_intr_disable(void *arg)
+{
+	struct intr_vector *iv;
+	struct fire_icarg *fica;
+	struct fire_softc *sc;
+
+	iv = arg;
+	fica = iv->iv_icarg;
+	sc = fica->fica_sc;
+	FIRE_PCI_WRITE_8(sc, fica->fica_map,
+	    FIRE_PCI_READ_8(sc, fica->fica_map) & ~FO_PCI_IMAP_V);
+}
+
+static void
+fire_intr_assign(void *arg)
+{
+	struct intr_vector *iv;
+	struct fire_icarg *fica;
+	struct fire_softc *sc;
+	uint64_t mr;
+
+	iv = arg;
+	fica = iv->iv_icarg;
+	sc = fica->fica_sc;
+	mr = FIRE_PCI_READ_8(sc, fica->fica_map);
+	if ((mr & FO_PCI_IMAP_V) != 0) {
+		FIRE_PCI_WRITE_8(sc, fica->fica_map, mr & ~FO_PCI_IMAP_V);
+		FIRE_PCI_BARRIER(sc, fica->fica_map, 8,
+		    BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+	}
+	while (FIRE_PCI_READ_8(sc, fica->fica_clr) != INTCLR_IDLE)
+		;
+	if ((mr & FO_PCI_IMAP_V) != 0)
+		fire_intr_enable(arg);
+}
+
+static void
+fire_intr_clear(void *arg)
+{
+	struct intr_vector *iv;
+	struct fire_icarg *fica;
+
+	iv = arg;
+	fica = iv->iv_icarg;
+	FIRE_PCI_WRITE_8(fica->fica_sc, fica->fica_clr, INTCLR_IDLE);
+}
+
+/*
+ * Given that the event queue implementation matches our current MD and MI
+ * interrupt frameworks like square pegs fit into round holes we are generous
+ * and use one event queue per MSI for now, which limits us to 35 MSIs/MSI-Xs
+ * per Host-PCIe-bridge (we use one event queue for the PCIe error messages).
+ * This seems tolerable as long as most devices just use one MSI/MSI-X anyway.
+ * Adding knowledge about MSIs/MSI-Xs to the MD interrupt code should allow us
+ * to decouple the 1:1 mapping at the cost of no longer being able to bind
+ * MSIs/MSI-Xs to specific CPUs as we currently have no reliable way to
+ * quiesce a device while we move its MSIs/MSI-Xs to another event queue.
+ */
+
+static int
+fire_alloc_msi(device_t dev, device_t child, int count, int maxcount,
+    int *irqs)
+{
+	struct fire_softc *sc;
+	u_int i, j, msiqrun;
+
+	if (powerof2(count) == 0 || count > 32)
+		return (EINVAL);
+
+	sc = device_get_softc(dev);
+	mtx_lock(&sc->sc_msi_mtx);
+	msiqrun = 0;
+	for (i = 0; i < sc->sc_msiq_count; i++) {
+		for (j = i; j < i + count; j++) {
+			if (isclr(sc->sc_msiq_bitmap, j) == 0)
+				break;
+		}
+		if (j == i + count) {
+			msiqrun = i;
+			break;
+		}
+	}
+	if (i == sc->sc_msiq_count) {
+		mtx_unlock(&sc->sc_msi_mtx);
+		return (ENXIO);
+	}
+	/*
+	 * It's unclear whether we need to actually align the MSIs in the
+	 * mapping table based on the maxcount or just the count. We use
+	 * maxcount to be on the safe side.
+	 */
+	for (i = 0; i + maxcount < sc->sc_msi_count; i += maxcount) {
+		for (j = i; j < i + maxcount; j++)
+			if (isclr(sc->sc_msi_bitmap, j) == 0)
+				break;
+		if (j == i + maxcount) {
+			for (j = 0; j < count; j++) {
+				setbit(sc->sc_msiq_bitmap, msiqrun + j);
+				setbit(sc->sc_msi_bitmap, i + j);
+				sc->sc_msi_msiq_table[i + j] = msiqrun + j;
+				irqs[j] = sc->sc_msi_first + i + j;
+			}
+			mtx_unlock(&sc->sc_msi_mtx);
+			return (0);
+		}
+	}
+	mtx_unlock(&sc->sc_msi_mtx);
+	return (ENXIO);
+}
+
+static int
+fire_release_msi(device_t dev, device_t child, int count, int *irqs)
+{
+	struct fire_softc *sc;
+	u_int i;
+
+	sc = device_get_softc(dev);
+	mtx_lock(&sc->sc_msi_mtx);
+	for (i = 0; i < count; i++) {
+		clrbit(sc->sc_msiq_bitmap,
+		    sc->sc_msi_msiq_table[irqs[i] - sc->sc_msi_first]);
+		clrbit(sc->sc_msi_bitmap, irqs[i] - sc->sc_msi_first);
+	}
+	mtx_unlock(&sc->sc_msi_mtx);
+	return (0);
+}
+
+static int
+fire_alloc_msix(device_t dev, device_t child, int *irq)
+{
+	struct fire_softc *sc;
+	u_int i, msiq;
+
+	sc = device_get_softc(dev);
+	if ((sc->sc_flags & FIRE_MSIX) == 0)
+		return (ENXIO);
+	mtx_lock(&sc->sc_msi_mtx);
+	msiq = 0;
+	for (i = 0; i < sc->sc_msiq_count; i++) {
+		if (isclr(sc->sc_msiq_bitmap, i) != 0) {
+			msiq = i;
+			break;
+		}
+	}
+	if (i == sc->sc_msiq_count) {
+		mtx_unlock(&sc->sc_msi_mtx);
+		return (ENXIO);
+	}
+	for (i = sc->sc_msi_count - 1; i >= 0; i--) {
+		if (isclr(sc->sc_msi_bitmap, i) != 0) {
+			setbit(sc->sc_msiq_bitmap, msiq);
+			setbit(sc->sc_msi_bitmap, i);
+			sc->sc_msi_msiq_table[i] = msiq;
+			*irq = sc->sc_msi_first + i;
+			mtx_unlock(&sc->sc_msi_mtx);
+			return (0);
+		}
+	}
+	mtx_unlock(&sc->sc_msi_mtx);
+	return (ENXIO);
+}
+
+static int
+fire_release_msix(device_t dev, device_t child, int irq)
+{
+	struct fire_softc *sc;
+
+	sc = device_get_softc(dev);
+	if ((sc->sc_flags & FIRE_MSIX) == 0)
+		return (ENXIO);
+	mtx_lock(&sc->sc_msi_mtx);
+	clrbit(sc->sc_msiq_bitmap,
+	    sc->sc_msi_msiq_table[irq - sc->sc_msi_first]);
+	clrbit(sc->sc_msi_bitmap, irq - sc->sc_msi_first);
+	mtx_unlock(&sc->sc_msi_mtx);
+	return (0);
+}
+
+static int
+fire_map_msi(device_t dev, device_t child, int irq, uint64_t *addr,
+    uint32_t *data)
+{
+	struct fire_softc *sc;
+	struct pci_devinfo *dinfo;
+
+	sc = device_get_softc(dev);
+	dinfo = device_get_ivars(child);
+	if (dinfo->cfg.msi.msi_alloc > 0) {
+		if ((irq & ~sc->sc_msi_data_mask) != 0) {
+			device_printf(dev, "invalid MSI 0x%x\n", irq);
+			return (EINVAL);
+		}
+	} else {
+		if ((sc->sc_flags & FIRE_MSIX) == 0)
+			return (ENXIO);
+		if (fls(irq) > sc->sc_msix_data_width) {
+			device_printf(dev, "invalid MSI-X 0x%x\n", irq);
+			return (EINVAL);
+		}
+	}
+	if (dinfo->cfg.msi.msi_alloc > 0 &&
+	    (dinfo->cfg.msi.msi_ctrl & PCIM_MSICTRL_64BIT) == 0)
+		*addr = sc->sc_msi_addr32;
+	else
+		*addr = sc->sc_msi_addr64;
+	*data = irq;
+	return (0);
+}
+
+static void
+fire_msiq_handler(void *cookie)
+{
+	struct intr_vector *iv;
+	struct fire_msiqarg *fmqa;
+	struct fire_softc *sc;
+	struct fo_msiq_record *qrec;
+	device_t dev;
+	uint64_t word0;
+	u_int head, msi, msiq;
+
+	iv = cookie;
+	fmqa = iv->iv_icarg;
+	sc = fmqa->fmqa_fica.fica_sc;
+	dev = sc->sc_dev;
+	msiq = fmqa->fmqa_msiq;
+	/*
+	 * Note that since fire_intr_clear() will clear the event queue
+	 * interrupt after the filter/handler associated with the MSI [sic]
+	 * has been executed we have to protect the access to the event queue
+	 * as otherwise nested event queue interrupts cause corruption of the
+	 * event queue on MP machines.  Obviously especially when abandoning
+	 * the 1:1 mapping it would be better to not clear the event queue
+	 * interrupt after each filter/handler invocation but only once when
+	 * the outstanding MSIs have been processed but unfortunately that
+	 * doesn't work well and leads to interrupt storms with controllers/
+	 * drivers which don't mask interrupts while the filter/handler is
+	 * executed.  Maybe delaying clearing the MSI until after the filter/
+	 * handler has been executed could be used to work around this but
+	 * that's not the intended usage and might in turn cause lost MSIs.
+	 */
+	mtx_lock_spin(&fmqa->fmqa_mtx);
+	head = (FIRE_PCI_READ_8(sc, fmqa->fmqa_head) & FO_PCI_EQ_HD_MASK) >>
+	    FO_PCI_EQ_HD_SHFT;
+	qrec = &fmqa->fmqa_base[head];
+	word0 = qrec->fomqr_word0;
+	for (;;) {
+		KASSERT((word0 & FO_MQR_WORD0_FMT_TYPE_MSI64) != 0 ||
+		    (word0 & FO_MQR_WORD0_FMT_TYPE_MSI32) != 0,
+		    ("%s: received non-MSI/MSI-X message in event queue %d "
+		    "(word0 %#llx)", device_get_nameunit(dev), msiq,
+		    (unsigned long long)word0));
+		if (__predict_false((word0 & FO_MQR_WORD0_FMT_TYPE_MASK) == 0))
+			break;
+		msi = (word0 & FO_MQR_WORD0_DATA0_MASK) >>
+		    FO_MQR_WORD0_DATA0_SHFT;
+		/*
+		 * Sanity check the MSI/MSI-X as long as we use a 1:1 mapping.
+		 */
+		KASSERT(msi == fmqa->fmqa_msi,
+		    ("%s: received non-matching MSI/MSI-X in event queue %d "
+		    "(%d versus %d)", device_get_nameunit(dev), msiq, msi,
+		    fmqa->fmqa_msi));
+		FIRE_PCI_WRITE_8(sc, FO_PCI_MSI_CLR_BASE + (msi << 3),
+		    FO_PCI_MSI_CLR_EQWR_N);
+		if (__predict_false(intr_event_handle(iv->iv_event,
+		    NULL) != 0))
+			printf("stray MSI/MSI-X in event queue %d\n", msiq);
+		qrec->fomqr_word0 &= ~FO_MQR_WORD0_FMT_TYPE_MASK;
+		head = (head + 1) % sc->sc_msiq_size;
+		qrec = &fmqa->fmqa_base[head];
+		word0 = qrec->fomqr_word0;
+	}
+	FIRE_PCI_WRITE_8(sc, fmqa->fmqa_head, (head & FO_PCI_EQ_HD_MASK) <<
+	    FO_PCI_EQ_HD_SHFT);
+	if (__predict_false((FIRE_PCI_READ_8(sc, fmqa->fmqa_tail) &
+	    FO_PCI_EQ_TL_OVERR) != 0)) {
+		device_printf(dev, "event queue %d overflow\n", msiq);
+		msiq <<= 3;
+		FIRE_PCI_WRITE_8(sc, FO_PCI_EQ_CTRL_CLR_BASE + msiq,
+		    FIRE_PCI_READ_8(sc, FO_PCI_EQ_CTRL_CLR_BASE + msiq) |
+		    FO_PCI_EQ_CTRL_CLR_COVERR);
+	}
+	mtx_unlock_spin(&fmqa->fmqa_mtx);
+}
+
+static int
+fire_setup_intr(device_t dev, device_t child, struct resource *ires,
+    int flags, driver_filter_t *filt, driver_intr_t *intr, void *arg,
+    void **cookiep)
+{
+	struct fire_softc *sc;
+	u_long vec;
+	int error;
+	u_int msi, msiq;
+
+	sc = device_get_softc(dev);
+	/*
+	 * XXX this assumes that a device only has one INTx, while in fact
+	 * Cassini+ and Saturn can use all four the firmware has assigned
+	 * to them, but so does pci(4).
+	 */
+	if (rman_get_rid(ires) != 0) {
+		msi = rman_get_start(ires);
+		msiq = sc->sc_msi_msiq_table[msi - sc->sc_msi_first];
+		vec = INTMAP_VEC(sc->sc_ign, sc->sc_msiq_ino_first + msiq);
+		msiq += sc->sc_msiq_first;
+		if (intr_vectors[vec].iv_ic != &fire_ic) {
+			device_printf(dev,
+			    "invalid interrupt controller for vector 0x%lx\n",
+			    vec);
+			return (EINVAL);
+		}
+		/*
+		 * The MD interrupt code needs the vector rather than the MSI.
+		 */
+		rman_set_start(ires, vec);
+		rman_set_end(ires, vec);
+		error = bus_generic_setup_intr(dev, child, ires, flags, filt,
+		    intr, arg, cookiep);
+		rman_set_start(ires, msi);
+		rman_set_end(ires, msi);
+		if (error == 0) {
+			/*
+			 * XXX inject our event queue handler.
+			 */
+			intr_vectors[vec].iv_func = fire_msiq_handler;
+			/*
+			 * Record the MSI/MSI-X as long as we we use a 1:1
+			 * mapping.
+			 */
+			((struct fire_msiqarg *)intr_vectors[vec].iv_icarg)->
+			    fmqa_msi = msi;
+			FIRE_PCI_WRITE_8(sc, FO_PCI_EQ_CTRL_SET_BASE +
+			    (msiq << 3), FO_PCI_EQ_CTRL_SET_EN);
+			msi <<= 3;
+			FIRE_PCI_WRITE_8(sc, FO_PCI_MSI_MAP_BASE + msi,
+			    (FIRE_PCI_READ_8(sc, FO_PCI_MSI_MAP_BASE + msi) &
+			    ~FO_PCI_MSI_MAP_EQNUM_MASK) |
+			    ((msiq << FO_PCI_MSI_MAP_EQNUM_SHFT) &
+			    FO_PCI_MSI_MAP_EQNUM_MASK));
+			FIRE_PCI_WRITE_8(sc, FO_PCI_MSI_CLR_BASE + msi,
+			    FO_PCI_MSI_CLR_EQWR_N);
+			FIRE_PCI_WRITE_8(sc, FO_PCI_MSI_MAP_BASE + msi,
+			    FIRE_PCI_READ_8(sc, FO_PCI_MSI_MAP_BASE + msi) |
+			    FO_PCI_MSI_MAP_V);
+		}
+		return (error);
+	}
+
+	/*
+	 * Make sure the vector is fully specified and we registered
+	 * our interrupt controller for it.
+	 */
+	vec = rman_get_start(ires);
+	if (INTIGN(vec) != sc->sc_ign) {
+		device_printf(dev, "invalid interrupt vector 0x%lx\n", vec);
+		return (EINVAL);
+	}
+	if (intr_vectors[vec].iv_ic != &fire_ic) {
+		device_printf(dev,
+		    "invalid interrupt controller for vector 0x%lx\n", vec);
+		return (EINVAL);
+	}
+	return (bus_generic_setup_intr(dev, child, ires, flags, filt, intr,
+	    arg, cookiep));
+}
+
+static int
+fire_teardown_intr(device_t dev, device_t child, struct resource *ires,
+    void *cookie)
+{
+	struct fire_softc *sc;
+	u_long vec;
+	int error;
+	u_int msi, msiq;
+
+	sc = device_get_softc(dev);
+	if (rman_get_rid(ires) != 0) {
+		msi = rman_get_start(ires);
+		msiq = sc->sc_msi_msiq_table[msi - sc->sc_msi_first];
+		vec = INTMAP_VEC(sc->sc_ign, msiq + sc->sc_msiq_ino_first);
+		msiq += sc->sc_msiq_first;
+		msi <<= 3;
+		FIRE_PCI_WRITE_8(sc, FO_PCI_MSI_MAP_BASE + msi,
+		    FIRE_PCI_READ_8(sc, FO_PCI_MSI_MAP_BASE + msi) &
+		    ~FO_PCI_MSI_MAP_V);
+		msiq <<= 3;
+		FIRE_PCI_WRITE_8(sc, FO_PCI_EQ_CTRL_CLR_BASE + msiq,
+		    FO_PCI_EQ_CTRL_CLR_COVERR | FO_PCI_EQ_CTRL_CLR_E2I |
+		    FO_PCI_EQ_CTRL_CLR_DIS);
+		FIRE_PCI_WRITE_8(sc, FO_PCI_EQ_TL_BASE + msiq,
+		    (0 << FO_PCI_EQ_TL_SHFT) & FO_PCI_EQ_TL_MASK);
+		FIRE_PCI_WRITE_8(sc, FO_PCI_EQ_HD_BASE + msiq,
+		    (0 << FO_PCI_EQ_HD_SHFT) & FO_PCI_EQ_HD_MASK);
+		/*
+		 * The MD interrupt code needs the vector rather than the MSI.
+		 */
+		rman_set_start(ires, vec);
+		rman_set_end(ires, vec);
+		error = bus_generic_teardown_intr(dev, child, ires, cookie);
+		rman_set_start(ires, msi);
+		rman_set_end(ires, msi >> 3);
+		return (error);
+	}
+	return (bus_generic_teardown_intr(dev, child, ires, cookie));
+}
+
+static struct resource *
+fire_alloc_resource(device_t bus, device_t child, int type, int *rid,
+    u_long start, u_long end, u_long count, u_int flags)
+{
+	struct fire_softc *sc;
+	struct resource *rv;
+	struct rman *rm;
+	bus_space_tag_t bt;
+	bus_space_handle_t bh;
+	int needactivate = flags & RF_ACTIVE;
+
+	flags &= ~RF_ACTIVE;
+
+	sc = device_get_softc(bus);
+	if (type == SYS_RES_IRQ) {
+		/*
+		 * XXX: Don't accept blank ranges for now, only single
+		 * interrupts.  The other case should not happen with
+		 * the MI PCI code...
+		 * XXX: This may return a resource that is out of the
+		 * range that was specified.  Is this correct...?
+		 */
+		if (start != end)
+			panic("%s: XXX: interrupt range", __func__);
+		if (*rid == 0)
+			start = end = INTMAP_VEC(sc->sc_ign, end);
+		return (BUS_ALLOC_RESOURCE(device_get_parent(bus), child,
+		    type, rid, start, end, count, flags));
+	}
+	switch (type) {
+	case SYS_RES_MEMORY:
+		rm = &sc->sc_pci_mem_rman;
+		bt = sc->sc_pci_memt;
+		bh = sc->sc_pci_bh[OFW_PCI_CS_MEM32];
+		break;
+	case SYS_RES_IOPORT:
+		rm = &sc->sc_pci_io_rman;
+		bt = sc->sc_pci_iot;
+		bh = sc->sc_pci_bh[OFW_PCI_CS_IO];
+		break;
+	default:
+		return (NULL);
+		/* NOTREACHED */
+	}
+
+	rv = rman_reserve_resource(rm, start, end, count, flags, child);
+	if (rv == NULL)
+		return (NULL);
+	rman_set_rid(rv, *rid);
+	bh += rman_get_start(rv);
+	rman_set_bustag(rv, bt);
+	rman_set_bushandle(rv, bh);
+
+	if (needactivate) {
+		if (bus_activate_resource(child, type, *rid, rv)) {
+			rman_release_resource(rv);
+			return (NULL);
+		}
+	}
+	return (rv);
+}
+
+static int
+fire_activate_resource(device_t bus, device_t child, int type, int rid,
+    struct resource *r)
+{
+	void *p;
+	int error;
+
+	if (type == SYS_RES_IRQ)
+		return (BUS_ACTIVATE_RESOURCE(device_get_parent(bus), child,
+		    type, rid, r));
+	if (type == SYS_RES_MEMORY) {
+		/*
+		 * Need to memory-map the device space, as some drivers
+		 * depend on the virtual address being set and usable.
+		 */
+		error = sparc64_bus_mem_map(rman_get_bustag(r),
+		    rman_get_bushandle(r), rman_get_size(r), 0, 0, &p);
+		if (error != 0)
+			return (error);
+		rman_set_virtual(r, p);
+	}
+	return (rman_activate_resource(r));
+}
+
+static int
+fire_deactivate_resource(device_t bus, device_t child, int type, int rid,
+    struct resource *r)
+{
+
+	if (type == SYS_RES_IRQ)
+		return (BUS_DEACTIVATE_RESOURCE(device_get_parent(bus), child,
+		    type, rid, r));
+	if (type == SYS_RES_MEMORY) {
+		sparc64_bus_mem_unmap(rman_get_virtual(r), rman_get_size(r));
+		rman_set_virtual(r, NULL);
+	}
+	return (rman_deactivate_resource(r));
+}
+
+static int
+fire_release_resource(device_t bus, device_t child, int type, int rid,
+    struct resource *r)
+{
+	int error;
+
+	if (type == SYS_RES_IRQ)
+		return (BUS_RELEASE_RESOURCE(device_get_parent(bus), child,
+		    type, rid, r));
+	if (rman_get_flags(r) & RF_ACTIVE) {
+		error = bus_deactivate_resource(child, type, rid, r);
+		if (error)
+			return (error);
+	}
+	return (rman_release_resource(r));
+}
+
+static bus_dma_tag_t
+fire_get_dma_tag(device_t bus, device_t child)
+{
+	struct fire_softc *sc;
+
+	sc = device_get_softc(bus);
+	return (sc->sc_pci_dmat);
+}
+
+static phandle_t
+fire_get_node(device_t bus, device_t dev)
+{
+	struct fire_softc *sc;
+
+	sc = device_get_softc(bus);
+	/* We only have one child, the PCI bus, which needs our own node. */
+	return (sc->sc_node);
+}
+
+static bus_space_tag_t
+fire_alloc_bus_tag(struct fire_softc *sc, int type)
+{
+	bus_space_tag_t bt;
+
+	bt = malloc(sizeof(struct bus_space_tag), M_DEVBUF,
+	    M_NOWAIT | M_ZERO);
+	if (bt == NULL)
+		panic("%s: out of memory", __func__);
+
+	bt->bst_cookie = sc;
+	bt->bst_parent = rman_get_bustag(sc->sc_mem_res[FIRE_PCI]);
+	bt->bst_type = type;
+	return (bt);
+}
+
+static u_int
+fire_get_timecount(struct timecounter *tc)
+{
+	struct fire_softc *sc;
+
+	sc = tc->tc_priv;
+	return (FIRE_CTRL_READ_8(sc, FO_XBC_PRF_CNT0) & TC_COUNTER_MAX_MASK);
+}
diff --git a/sys/sparc64/pci/firereg.h b/sys/sparc64/pci/firereg.h
new file mode 100644
index 00000000000..1471b09de99
--- /dev/null
+++ b/sys/sparc64/pci/firereg.h
@@ -0,0 +1,1004 @@
+/*-
+ * Copyright (c) 2009 Marius Strobl 
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _SPARC64_PCI_FIREREG_H_
+#define	_SPARC64_PCI_FIREREG_H_
+
+#define	FIRE_NINTR				3	/* 2 OFW + 1 MSIq */
+#define	FIRE_NRANGE				4
+#define	FIRE_NREG				2
+
+#define	FIRE_PCI				0
+#define	FIRE_CTRL				1
+
+/* PCI configuration and status registers */
+#define	FO_PCI_INT_MAP_BASE			0x01000
+#define	FO_PCI_INT_CLR_BASE			0x01400
+#define	FO_PCI_EQ_BASE_ADDR			0x10000
+#define	FO_PCI_EQ_CTRL_SET_BASE			0x11000
+#define	FO_PCI_EQ_CTRL_CLR_BASE			0x11200
+#define	FO_PCI_EQ_TL_BASE			0x11600
+#define	FO_PCI_EQ_HD_BASE			0x11800
+#define	FO_PCI_MSI_MAP_BASE			0x20000
+#define	FO_PCI_MSI_CLR_BASE			0x28000
+#define	FO_PCI_ERR_COR				0x30000
+#define	FO_PCI_ERR_NONFATAL			0x30008
+#define	FO_PCI_ERR_FATAL			0x30010
+#define	FO_PCI_PM_PME				0x30018
+#define	FO_PCI_PME_TO_ACK			0x30020
+#define	FO_PCI_IMU_INT_EN			0x31008
+#define	FO_PCI_IMU_INT_STAT			0x31010
+#define	FO_PCI_IMU_ERR_STAT_CLR			0x31018
+#define	FO_PCI_IMU_RDS_ERR_LOG			0x31028
+#define	FO_PCI_IMU_SCS_ERR_LOG			0x31030
+#define	FO_PCI_IMU_EQS_ERR_LOG			0x31038
+#define	FO_PCI_DMC_CORE_BLOCK_INT_EN		0x31800
+#define	FO_PCI_DMC_CORE_BLOCK_ERR_STAT		0x31808
+#define	FO_PCI_MULTI_CORE_ERR_STAT		0x31810
+#define	FO_PCI_MSI_32_BIT_ADDR			0x34000
+#define	FO_PCI_MSI_64_BIT_ADDR			0x34008
+#define	FO_PCI_MMU				0x40000
+#define	FO_PCI_MMU_INT_EN			0x41008
+#define	FO_PCI_MMU_INT_STAT			0x41010
+#define	FO_PCI_MMU_ERR_STAT_CLR			0x41018
+#define	FO_PCI_MMU_TRANS_FAULT_ADDR		0x41028
+#define	FO_PCI_MMU_TRANS_FAULT_STAT		0x41030
+#define	FO_PCI_ILU_INT_EN			0x51008
+#define	FO_PCI_ILU_INT_STAT			0x51010
+#define	FO_PCI_ILU_ERR_STAT_CLR			0x51018
+#define	FO_PCI_DMC_DBG_SEL_PORTA		0x53000
+#define	FO_PCI_DMC_DBG_SEL_PORTB		0x53008
+#define	FO_PCI_PEC_CORE_BLOCK_INT_EN		0x51800
+#define	FO_PCI_PEC_CORE_BLOCK_INT_STAT		0x51808
+#define	FO_PCI_TLU_CTRL				0x80000
+#define	FO_PCI_TLU_OEVENT_INT_EN		0x81008
+#define	FO_PCI_TLU_OEVENT_INT_STAT		0x81010
+#define	FO_PCI_TLU_OEVENT_STAT_CLR		0x81018
+#define	FO_PCI_TLU_RX_OEVENT_HDR1_LOG		0x81028
+#define	FO_PCI_TLU_RX_OEVENT_HDR2_LOG		0x81030
+#define	FO_PCI_TLU_TX_OEVENT_HDR1_LOG		0x81038
+#define	FO_PCI_TLU_TX_OEVENT_HDR2_LOG		0x81040
+#define	FO_PCI_TLU_DEV_CTRL			0x90008
+#define	FO_PCI_TLU_LNK_CTRL			0x90020
+#define	FO_PCI_TLU_LNK_STAT			0x90028
+#define	FO_PCI_TLU_UERR_INT_EN			0x91008
+#define	FO_PCI_TLU_UERR_INT_STAT		0x91010
+#define	FO_PCI_TLU_UERR_STAT_CLR		0x91018
+#define	FO_PCI_TLU_RX_UERR_HDR1_LOG		0x91028
+#define	FO_PCI_TLU_RX_UERR_HDR2_LOG		0x91030
+#define	FO_PCI_TLU_TX_UERR_HDR1_LOG		0x91038
+#define	FO_PCI_TLU_TX_UERR_HDR2_LOG		0x91040
+#define	FO_PCI_TLU_CERR_INT_EN			0xa1008
+#define	FO_PCI_TLU_CERR_INT_STAT		0xa1010
+#define	FO_PCI_TLU_CERR_STAT_CLR		0xa1018
+#define	FO_PCI_LPU_RST				0xe2008
+#define	FO_PCI_LPU_INT_STAT			0xe2040
+#define	FO_PCI_LPU_INT_MASK			0xe0248
+#define	FO_PCI_LPU_LNK_LYR_CFG			0xe2200
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT		0xe2210
+#define	FO_PCI_LPU_FLW_CTRL_UPDT_CTRL		0xe2240
+#define	FO_PCI_LPU_TXLNK_FREQ_LAT_TMR_THRS	0xe2400
+#define	FO_PCI_LPU_TXLNK_RPLY_TMR_THRS		0xe2410
+#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR		0xe2430
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT		0xe2610
+#define	FO_PCI_LPU_LTSSM_CFG2			0xe2788
+#define	FO_PCI_LPU_LTSSM_CFG3			0xe2790
+#define	FO_PCI_LPU_LTSSM_CFG4			0xe2798
+#define	FO_PCI_LPU_LTSSM_CFG5			0xe27a0
+
+/* PCI interrupt mapping registers */
+#define	FO_PCI_IMAP_MDO_MODE			0x8000000000000000ULL
+#define	FO_PCI_IMAP_V				0x0000000080000000ULL
+#define	FIRE_PCI_IMAP_T_JPID_MASK		0x000000007c000000ULL
+#define	FIRE_PCI_IMAP_T_JPID_SHFT		26
+#define	OBERON_PCI_IMAP_T_DESTID_MASK		0x000000007fe00000ULL
+#define	OBERON_PCI_IMAP_T_DESTID_SHFT		21
+#define	FO_PCI_IMAP_INT_CTRL_NUM_MASK		0x00000000000003c0ULL
+#define	FO_PCI_IMAP_INT_CTRL_NUM_SHFT		6
+
+/* PCI interrupt clear registers - use INTCLR_* from  */
+
+/* PCI event queue base address register */
+#define	FO_PCI_EQ_BASE_ADDR_BYPASS		0xfffc000000000000ULL
+#define	FO_PCI_EQ_BASE_ADDR_MASK		0xfffffffffff80000ULL
+#define	FO_PCI_EQ_BASE_ADDR_SHFT		19
+
+/* PCI event queue control set registers */
+#define	FO_PCI_EQ_CTRL_SET_ENOVERR		0x0200000000000000ULL
+#define	FO_PCI_EQ_CTRL_SET_EN			0x0000100000000000ULL
+
+/* PCI event queue control clear registers */
+#define	FO_PCI_EQ_CTRL_CLR_COVERR		0x0200000000000000ULL
+#define	FO_PCI_EQ_CTRL_CLR_E2I			0x0000800000000000ULL
+#define	FO_PCI_EQ_CTRL_CLR_DIS			0x0000100000000000ULL
+
+/* PCI event queue tail registers */
+#define	FO_PCI_EQ_TL_OVERR			0x0200000000000000ULL
+#define	FO_PCI_EQ_TL_MASK			0x000000000000007fULL
+#define	FO_PCI_EQ_TL_SHFT			0
+
+/* PCI event queue head registers */
+#define	FO_PCI_EQ_HD_MASK			0x000000000000007fULL
+#define	FO_PCI_EQ_HD_SHFT			0
+
+/* PCI MSI mapping registers */
+#define	FO_PCI_MSI_MAP_V			0x8000000000000000ULL
+#define	FO_PCI_MSI_MAP_EQWR_N			0x4000000000000000ULL
+#define	FO_PCI_MSI_MAP_EQNUM_MASK		0x000000000000003fULL
+#define	FO_PCI_MSI_MAP_EQNUM_SHFT		0
+
+/* PCI MSI clear registers */
+#define	FO_PCI_MSI_CLR_EQWR_N			0x4000000000000000ULL
+
+/*
+ * PCI IMU interrupt enable, interrupt status and error status clear
+ * registers
+ */
+#define	FO_PCI_IMU_ERR_INT_SPARE_S_MASK		0x00007c0000000000ULL
+#define	FO_PCI_IMU_ERR_INT_SPARE_S_SHFT		42
+#define	FO_PCI_IMU_ERR_INT_EQ_OVER_S		0x0000020000000000ULL
+#define	FO_PCI_IMU_ERR_INT_EQ_NOT_EN_S		0x0000010000000000ULL
+#define	FO_PCI_IMU_ERR_INT_MSI_MAL_ERR_S	0x0000008000000000ULL
+#define	FO_PCI_IMU_ERR_INT_MSI_PAR_ERR_S	0x0000004000000000ULL
+#define	FO_PCI_IMU_ERR_INT_PMEACK_MES_NOT_EN_S	0x0000002000000000ULL
+#define	FO_PCI_IMU_ERR_INT_PMPME_MES_NOT_EN_S	0x0000001000000000ULL
+#define	FO_PCI_IMU_ERR_INT_FATAL_MES_NOT_EN_S	0x0000000800000000ULL
+#define	FO_PCI_IMU_ERR_INT_NFATAL_MES_NOT_EN_S	0x0000000400000000ULL
+#define	FO_PCI_IMU_ERR_INT_COR_MES_NOT_EN_S	0x0000000200000000ULL
+#define	FO_PCI_IMU_ERR_INT_MSI_NOT_EN_S		0x0000000100000000ULL
+#define	FO_PCI_IMU_ERR_INT_SPARE_P_MASK		0x0000000000007c00ULL
+#define	FO_PCI_IMU_ERR_INT_SPARE_P_SHFT		10
+#define	FO_PCI_IMU_ERR_INT_EQ_OVER_P		0x0000000000000200ULL
+#define	FO_PCI_IMU_ERR_INT_EQ_NOT_EN_P		0x0000000000000100ULL
+#define	FO_PCI_IMU_ERR_INT_MSI_MAL_ERR_P	0x0000000000000080ULL
+#define	FO_PCI_IMU_ERR_INT_MSI_PAR_ERR_P	0x0000000000000040ULL
+#define	FO_PCI_IMU_ERR_INT_PMEACK_MES_NOT_EN_P	0x0000000000000020ULL
+#define	FO_PCI_IMU_ERR_INT_PMPME_MES_NOT_EN_P	0x0000000000000010ULL
+#define	FO_PCI_IMU_ERR_INT_FATAL_MES_NOT_EN_P	0x0000000000000008ULL
+#define	FO_PCI_IMU_ERR_INT_NFATAL_MES_NOT_EN_P	0x0000000000000004ULL
+#define	FO_PCI_IMU_ERR_INT_COR_MES_NOT_EN_P	0x0000000000000002ULL
+#define	FO_PCI_IMU_ERR_INT_MSI_NOT_EN_P		0x0000000000000001ULL
+
+/* PCI IMU RDS error log register */
+#define	FO_PCI_IMU_RDS_ERR_LOG_TYPE_MASK	0xfc00000000000000ULL
+#define	FO_PCI_IMU_RDS_ERR_LOG_TYPE_SHFT	58
+#define	FO_PCI_IMU_RDS_ERR_LOG_LENGTH_MASK	0x03ff000000000000ULL
+#define	FO_PCI_IMU_RDS_ERR_LOG_LENGTH_SHFT	48
+#define	FO_PCI_IMU_RDS_ERR_LOG_REQ_ID_MASK	0x0000ffff00000000ULL
+#define	FO_PCI_IMU_RDS_ERR_LOG_REQ_ID_SHFT	32
+#define	FO_PCI_IMU_RDS_ERR_LOG_TLP_TAG_MASK	0x00000000ff000000ULL
+#define	FO_PCI_IMU_RDS_ERR_LOG_TLP_TAG_SHFT	24
+#define	FO_PCI_IMU_RDS_ERR_LOG_BE_MCODE_MASK	0x0000000000ff0000ULL
+#define	FO_PCI_IMU_RDS_ERR_LOG_BE_MCODE_SHFT	16
+#define	FO_PCI_IMU_RDS_ERR_LOG_MSI_DATA_MASK	0x000000000000ffffULL
+#define	FO_PCI_IMU_RDS_ERR_LOG_MSI_DATA_SHFT	0
+
+/* PCI IMU SCS error log register */
+#define	FO_PCI_IMU_SCS_ERR_LOG_TYPE_MASK	0xfc00000000000000ULL
+#define	FO_PCI_IMU_SCS_ERR_LOG_TYPE_SHFT	58
+#define	FO_PCI_IMU_SCS_ERR_LOG_LENGTH_MASK	0x03ff000000000000ULL
+#define	FO_PCI_IMU_SCS_ERR_LOG_LENGTH_SHFT	48
+#define	FO_PCI_IMU_SCS_ERR_LOG_REQ_ID_MASK	0x0000ffff00000000ULL
+#define	FO_PCI_IMU_SCS_ERR_LOG_REQ_ID_SHFT	32
+#define	FO_PCI_IMU_SCS_ERR_LOG_TLP_TAG_MASK	0x00000000ff000000ULL
+#define	FO_PCI_IMU_SCS_ERR_LOG_TLP_TAG_SHFT	24
+#define	FO_PCI_IMU_SCS_ERR_LOG_BE_MODE_MASK	0x0000000000ff0000ULL
+#define	FO_PCI_IMU_SCS_ERR_LOG_BE_MCODE_SHFT	16
+#define	FO_PCI_IMU_SCS_ERR_LOG_EQ_NUM_MASK	0x000000000000003fULL
+#define	FO_PCI_IMU_SCS_ERR_LOG_EQ_NUM_SHFT	0
+
+/* PCI IMU EQS error log register */
+#define	FO_PCI_IMU_EQS_ERR_LOG_EQ_NUM_MASK	0x000000000000003fULL
+#define	FO_PCI_IMU_EQS_ERROR_LOG_EQ_NUM_SHFT	0
+
+/*
+ * PCI ERR COR, ERR NONFATAL, ERR FATAL, PM PME and PME To ACK mapping
+ * registers
+ */
+#define	FO_PCI_ERR_PME_V			0x8000000000000000ULL
+#define	FO_PCI_ERR_PME_EQNUM_MASK		0x000000000000003fULL
+#define	FO_PCI_ERR_PME_EQNUM_SHFT		0
+
+/* PCI DMC core and block interrupt enable register */
+#define	FO_PCI_DMC_CORE_BLOCK_INT_EN_DMC	0x8000000000000000ULL
+#define	FO_PCI_DMC_CORE_BLOCK_INT_EN_MMU	0x0000000000000002ULL
+#define	FO_PCI_DMC_CORE_BLOCK_INT_EN_IMU	0x0000000000000001ULL
+
+/* PCI DMC core and block error status register */
+#define	FO_PCI_DMC_CORE_BLOCK_ERR_STAT_MMU	0x0000000000000002ULL
+#define	FO_PCI_DMC_CORE_BLOCK_ERR_STAT_IMU	0x0000000000000001ULL
+
+/* PCI multi core error status register */
+#define	FO_PCI_MULTI_CORE_ERR_STAT_PEC		0x0000000000000002ULL
+#define	FO_PCI_MULTI_CORE_ERR_STAT_DMC		0x0000000000000001ULL
+
+/* PCI MSI 32-bit address register */
+#define	FO_PCI_MSI_32_BIT_ADDR_MASK		0x00000000ffff0000ULL
+#define	FO_PCI_MSI_32_BIT_ADDR_SHFT		16
+
+/* PCI MSI 64-bit address register */
+#define	FO_PCI_MSI_64_BIT_ADDR_MASK		0x0000ffffffff0000ULL
+#define	FO_PCI_MSI_64_BIT_ADDR_SHFT		16
+
+/*
+ * PCI MMU interrupt enable, interrupt status and error status clear
+ * registers
+ */
+#define	FO_PCI_MMU_ERR_INT_S_MASK		0x0000ffff00000000ULL
+#define	FO_PCI_MMU_ERR_INT_S_SHFT		32
+#define	FO_PCI_MMU_ERR_INT_TBW_DPE_S		0x0000800000000000ULL
+#define	FO_PCI_MMU_ERR_INT_TBW_ERR_S		0x0000400000000000ULL
+#define	FO_PCI_MMU_ERR_INT_TBW_UDE_S		0x0000200000000000ULL
+#define	FO_PCI_MMU_ERR_INT_TBW_DME_S		0x0000100000000000ULL
+#define	FO_PCI_MMU_ERR_INT_SPARE3_S		0x0000080000000000ULL
+#define	FO_PCI_MMU_ERR_INT_SPARE2_S		0x0000040000000000ULL
+#define	FO_PCI_MMU_ERR_INT_TTC_CAE_S		0x0000020000000000ULL
+#define	FIRE_PCI_MMU_ERR_INT_TTC_DPE_S		0x0000010000000000ULL
+#define	OBERON_PCI_MMU_ERR_INT_TTC_DUE_S	0x0000010000000000ULL
+#define	FO_PCI_MMU_ERR_INT_TTE_PRT_S		0x0000008000000000ULL
+#define	FO_PCI_MMU_ERR_INT_TTE_INV_S		0x0000004000000000ULL
+#define	FO_PCI_MMU_ERR_INT_TRN_OOR_S		0x0000002000000000ULL
+#define	FO_PCI_MMU_ERR_INT_TRN_ERR_S		0x0000001000000000ULL
+#define	FO_PCI_MMU_ERR_INT_SPARE1_S		0x0000000800000000ULL
+#define	FO_PCI_MMU_ERR_INT_SPARE0_S		0x0000000400000000ULL
+#define	FO_PCI_MMU_ERR_INT_BYP_OOR_S		0x0000000200000000ULL
+#define	FO_PCI_MMU_ERR_INT_BYP_ERR_S		0x0000000100000000ULL
+#define	FO_PCI_MMU_ERR_INT_P_MASK		0x000000000000ffffULL
+#define	FO_PCI_MMU_ERR_INT_P_SHFT		0
+#define	FO_PCI_MMU_ERR_INT_TBW_DPE_P		0x0000000000008000ULL
+#define	FO_PCI_MMU_ERR_INT_TBW_ERR_P		0x0000000000004000ULL
+#define	FO_PCI_MMU_ERR_INT_TBW_UDE_P		0x0000000000002000ULL
+#define	FO_PCI_MMU_ERR_INT_TBW_DME_P		0x0000000000001000ULL
+#define	FO_PCI_MMU_ERR_INT_SPARE3_P		0x0000000000000800ULL
+#define	FO_PCI_MMU_ERR_INT_SPARE2_P		0x0000000000000400ULL
+#define	FO_PCI_MMU_ERR_INT_TTC_CAE_P		0x0000000000000200ULL
+#define	FIRE_PCI_MMU_ERR_INT_TTC_DPE_P		0x0000000000000100ULL
+#define	OBERON_PCI_MMU_ERR_INT_TTC_DUE_P	0x0000000000000100ULL
+#define	FO_PCI_MMU_ERR_INT_TTE_PRT_P		0x0000000000000080ULL
+#define	FO_PCI_MMU_ERR_INT_TTE_INV_P		0x0000000000000040ULL
+#define	FO_PCI_MMU_ERR_INT_TRN_OOR_P		0x0000000000000020ULL
+#define	FO_PCI_MMU_ERR_INT_TRN_ERR_P		0x0000000000000010ULL
+#define	FO_PCI_MMU_ERR_INT_SPARE1_P		0x0000000000000008ULL
+#define	FO_PCI_MMU_ERR_INT_SPARE0_P		0x0000000000000004ULL
+#define	FO_PCI_MMU_ERR_INT_BYP_OOR_P		0x0000000000000002ULL
+#define	FO_PCI_MMU_ERR_INT_BYP_ERR_P		0x0000000000000001ULL
+
+/* PCI MMU translation fault address register */
+#define	FO_PCI_MMU_TRANS_FAULT_ADDR_VA_MASK	0xfffffffffffffffcULL
+#define	FO_PCI_MMU_TRANS_FAULT_ADDR_VA_SHFT	2
+
+/* PCI MMU translation fault status register */
+#define	FO_PCI_MMU_TRANS_FAULT_STAT_ENTRY_MASK	0x000001ff00000000ULL
+#define	FO_PCI_MMU_TRANS_FAULT_STAT_ENTRY_SHFT	32
+#define	FO_PCI_MMU_TRANS_FAULT_STAT_TYPE_MASK	0x00000000007f0000ULL
+#define	FO_PCI_MMU_TRANS_FAULT_STAT_TYPE_SHFT	16
+#define	FO_PCI_MMU_TRANS_FAULT_STAT_ID_MASK	0x000000000000ffffULL
+#define	FO_PCI_MMU_TRANS_FAULT_STAT_ID_SHFT	0
+
+/*
+ * PCI ILU interrupt enable, interrupt status and error status clear
+ * registers
+ */
+#define	FO_PCI_ILU_ERR_INT_SPARE3_S		0x0000008000000000ULL
+#define	FO_PCI_ILU_ERR_INT_SPARE2_S		0x0000004000000000ULL
+#define	FO_PCI_ILU_ERR_INT_SPARE1_S		0x0000002000000000ULL
+#define	FIRE_PCI_ILU_ERR_INT_IHB_PE_S		0x0000001000000000ULL
+#define	OBERON_PCI_ILU_ERR_INT_IHB_UE_S		0x0000001000000000ULL
+#define	FO_PCI_ILU_ERR_INT_SPARE3_P		0x0000000000000080ULL
+#define	FO_PCI_ILU_ERR_INT_SPARE2_P		0x0000000000000040ULL
+#define	FO_PCI_ILU_ERR_INT_SPARE1_P		0x0000000000000020ULL
+#define	FIRE_PCI_ILU_ERR_INT_IHB_PE_P		0x0000000000000010ULL
+#define	OBERON_PCI_ILU_ERR_INT_IHB_UE_P		0x0000000000000010ULL
+
+/* PCI DMC debug select registers for port a/b */
+#define	FO_PCI_DMC_DBG_SEL_PORT_BLCK_MASK	0x00000000000003c0ULL
+#define	FO_PCI_DMC_DBG_SEL_PORT_BLCK_SHFT	6
+#define	FO_PCI_DMC_DBG_SEL_PORT_SUB_MASK	0x0000000000000038ULL
+#define	FO_PCI_DMC_DBG_SEL_PORT_SUB_SHFT	3
+#define	FO_PCI_DMC_DBG_SEL_PORT_SUB_SGNL_MASK	0x0000000000000007ULL
+#define	FO_PCI_DMC_DBG_SEL_PORT_SUB_SGNL_SHFT	0
+
+/* PCI PEC core and block interrupt enable register */
+#define	FO_PCI_PEC_CORE_BLOCK_INT_EN_PEC	0x8000000000000000ULL
+#define	FO_PCI_PEC_CORE_BLOCK_INT_EN_ILU	0x0000000000000008ULL
+#define	FO_PCI_PEC_CORE_BLOCK_INT_EN_UERR	0x0000000000000004ULL
+#define	FO_PCI_PEC_CORE_BLOCK_INT_EN_CERR	0x0000000000000002ULL
+#define	FO_PCI_PEC_CORE_BLOCK_INT_EN_OEVENT	0x0000000000000001ULL
+
+/* PCI PEC core and block interrupt status register */
+#define	FO_PCI_PEC_CORE_BLOCK_INT_STAT_ILU	0x0000000000000008ULL
+#define	FO_PCI_PEC_CORE_BLOCK_INT_STAT_UERR	0x0000000000000004ULL
+#define	FO_PCI_PEC_CORE_BLOCK_INT_STAT_CERR	0x0000000000000002ULL
+#define	FO_PCI_PEC_CORE_BLOCK_INT_STAT_OEVENT	0x0000000000000001ULL
+
+/* PCI TLU control register */
+#define	FO_PCI_TLU_CTRL_L0S_TIM_MASK		0x00000000ff000000ULL
+#define	FO_PCI_TLU_CTRL_L0S_TIM_SHFT		24
+#define	FO_PCI_TLU_CTRL_NWPR_EN			0x0000000000100000ULL
+#define	FO_PCI_TLU_CTRL_CTO_SEL_MASK		0x0000000000070000ULL
+#define	FO_PCI_TLU_CTRL_CTO_SEL_SHFT		16
+#define	FO_PCI_TLU_CTRL_CFG_MASK		0x000000000000ffffULL
+#define	FO_PCI_TLU_CTRL_CFG_SHFT		0
+#define	FO_PCI_TLU_CTRL_CFG_REMAIN_DETECT_QUIET	0x0000000000000100ULL
+
+/*
+ * PCI TLU other event interrupt enable, interrupt status and status clear
+ * registers
+ */
+#define	FO_PCI_TLU_OEVENT_S_MASK		0x00ffffff00000000ULL
+#define	FO_PCI_TLU_OEVENT_S_SHFT		32
+#define	FO_PCI_TLU_OEVENT_SPARE_S		0x0080000000000000ULL
+#define	FO_PCI_TLU_OEVENT_MFC_S			0x0040000000000000ULL
+#define	FO_PCI_TLU_OEVENT_CTO_S			0x0020000000000000ULL
+#define	FO_PCI_TLU_OEVENT_NFP_S			0x0010000000000000ULL
+#define	FO_PCI_TLU_OEVENT_LWC_S			0x0008000000000000ULL
+#define	FO_PCI_TLU_OEVENT_MRC_S			0x0004000000000000ULL
+#define	FO_PCI_TLU_OEVENT_WUC_S			0x0002000000000000ULL
+#define	FO_PCI_TLU_OEVENT_RUC_S			0x0001000000000000ULL
+#define	FO_PCI_TLU_OEVENT_CRS_S			0x0000800000000000ULL
+#define	FO_PCI_TLU_OEVENT_IIP_S			0x0000400000000000ULL
+#define	FO_PCI_TLU_OEVENT_EDP_S			0x0000200000000000ULL
+#define	FIRE_PCI_TLU_OEVENT_EHP_S		0x0000100000000000ULL
+#define	OBERON_PCI_TLU_OEVENT_EHBUE_S		0x0000100000000000ULL
+#define	OBERON_PCI_TLU_OEVENT_EDBUE_S		0x0000100000000000ULL
+#define	FO_PCI_TLU_OEVENT_LIN_S			0x0000080000000000ULL
+#define	FO_PCI_TLU_OEVENT_LRS_S			0x0000040000000000ULL
+#define	FO_PCI_TLU_OEVENT_LDN_S			0x0000020000000000ULL
+#define	FO_PCI_TLU_OEVENT_LUP_S			0x0000010000000000ULL
+#define	FO_PCI_TLU_OEVENT_LPU_S_MASK		0x000000c000000000ULL
+#define	FO_PCI_TLU_OEVENT_LPU_S_SHFT		38
+#define	OBERON_PCI_TLU_OEVENT_TLUEITMO_S	0x0000008000000000ULL
+#define	FO_PCI_TLU_OEVENT_ERU_S			0x0000002000000000ULL
+#define	FO_PCI_TLU_OEVENT_ERO_S			0x0000001000000000ULL
+#define	FO_PCI_TLU_OEVENT_EMP_S			0x0000000800000000ULL
+#define	FO_PCI_TLU_OEVENT_EPE_S			0x0000000400000000ULL
+#define	FIRE_PCI_TLU_OEVENT_ERP_S		0x0000000200000000ULL
+#define	OBERON_PCI_TLU_OEVENT_ERBU_S		0x0000000200000000ULL
+#define	FIRE_PCI_TLU_OEVENT_EIP_S		0x0000000100000000ULL
+#define	OBERON_PCI_TLU_OEVENT_EIUE_S		0x0000000100000000ULL
+#define	FO_PCI_TLU_OEVENT_P_MASK		0x0000000000ffffffULL
+#define	FO_PCI_TLU_OEVENT_P_SHFT		0
+#define	FO_PCI_TLU_OEVENT_SPARE_P		0x0000000000800000ULL
+#define	FO_PCI_TLU_OEVENT_MFC_P			0x0000000000400000ULL
+#define	FO_PCI_TLU_OEVENT_CTO_P			0x0000000000200000ULL
+#define	FO_PCI_TLU_OEVENT_NFP_P			0x0000000000100000ULL
+#define	FO_PCI_TLU_OEVENT_LWC_P			0x0000000000080000ULL
+#define	FO_PCI_TLU_OEVENT_MRC_P			0x0000000000040000ULL
+#define	FO_PCI_TLU_OEVENT_WUC_P			0x0000000000020000ULL
+#define	FO_PCI_TLU_OEVENT_RUC_P			0x0000000000010000ULL
+#define	FO_PCI_TLU_OEVENT_CRS_P			0x0000000000008000ULL
+#define	FO_PCI_TLU_OEVENT_IIP_P			0x0000000000004000ULL
+#define	FO_PCI_TLU_OEVENT_EDP_P			0x0000000000002000ULL
+#define	FIRE_PCI_TLU_OEVENT_EHP_P		0x0000000000001000ULL
+#define	OBERON_PCI_TLU_OEVENT_EHBUE_P		0x0000000000001000ULL
+#define	OBERON_PCI_TLU_OEVENT_EDBUE_P		0x0000000000001000ULL
+#define	FO_PCI_TLU_OEVENT_LIN_P			0x0000000000000800ULL
+#define	FO_PCI_TLU_OEVENT_LRS_P			0x0000000000000400ULL
+#define	FO_PCI_TLU_OEVENT_LDN_P			0x0000000000000200ULL
+#define	FO_PCI_TLU_OEVENT_LUP_P			0x0000000000000100ULL
+#define	FO_PCI_TLU_OEVENT_LPU_P_MASK		0x00000000000000c0ULL
+#define	FO_PCI_TLU_OEVENT_LPU_P_SHFT		6
+#define	OBERON_PCI_TLU_OEVENT_TLUEITMO_P	0x0000000000000080ULL
+#define	FO_PCI_TLU_OEVENT_ERU_P			0x0000000000000020ULL
+#define	FO_PCI_TLU_OEVENT_ERO_P			0x0000000000000010ULL
+#define	FO_PCI_TLU_OEVENT_EMP_P			0x0000000000000008ULL
+#define	FO_PCI_TLU_OEVENT_EPE_P			0x0000000000000004ULL
+#define	FIRE_PCI_TLU_OEVENT_ERP_P		0x0000000000000002ULL
+#define	OBERON_PCI_TLU_OEVENT_ERBU_P		0x0000000000000002ULL
+#define	FIRE_PCI_TLU_OEVENT_EIP_P		0x0000000000000001ULL
+#define	OBERON_PCI_TLU_OEVENT_EIUE_P		0x0000000000000001ULL
+
+/* PCI receive/transmit DLU/TLU other event header 1/2 log registers */
+#define	FO_PCI_TLU_OEVENT_HDR_LOG_MASK		0xffffffffffffffffULL
+#define	FO_PCI_TLU_OEVENT_HDR_LOG_SHFT		0
+
+/* PCI TLU device control register */
+#define	FO_PCI_TLU_DEV_CTRL_MRRS_MASK		0x0000000000007000ULL
+#define	FO_PCI_TLU_DEV_CTRL_MRRS_SHFT		12
+#define	FO_PCI_TLU_DEV_CTRL_MPS_MASK		0x00000000000000e0ULL
+#define	FO_PCI_TLU_DEV_CTRL_MPS_SHFT		5
+
+/*
+ * PCI TLU uncorrectable error interrupt enable, interrupt status and
+ * status clear registers
+ */
+#define	FO_PCI_TLU_UERR_INT_S_MASK		0x001fffff00000000ULL
+#define	FO_PCI_TLU_UERR_INT_S_SHFT		32
+#define	FO_PCI_TLU_UERR_INT_UR_S		0x0010000000000000ULL
+#define	OBERON_PCI_TLU_UERR_INT_ECRC_S		0x0008000000000000ULL
+#define	FO_PCI_TLU_UERR_INT_MFP_S		0x0004000000000000ULL
+#define	FO_PCI_TLU_UERR_INT_ROF_S		0x0002000000000000ULL
+#define	FO_PCI_TLU_UERR_INT_UC_S		0x0001000000000000ULL
+#define	FO_PCI_TLU_UERR_INT_CA_S		0x0000800000000000ULL
+#define	FO_PCI_TLU_UERR_INT_CTO_S		0x0000400000000000ULL
+#define	FO_PCI_TLU_UERR_INT_FCP_S		0x0000200000000000ULL
+#define	FIRE_PCI_TLU_UERR_INT_PP_S		0x0000100000000000ULL
+#define	OBERON_PCI_TLU_UERR_INT_POIS_S		0x0000100000000000ULL
+#define	FO_PCI_TLU_UERR_INT_DLP_S		0x0000001000000000ULL
+#define	FO_PCI_TLU_UERR_INT_TE_S		0x0000000100000000ULL
+#define	FO_PCI_TLU_UERR_INT_P_MASK		0x00000000001fffffULL
+#define	FO_PCI_TLU_UERR_INT_P_SHFT		0
+#define	FO_PCI_TLU_UERR_INT_UR_P		0x0000000000100000ULL
+#define	OBERON_PCI_TLU_UERR_INT_ECRC_P		0x0000000000080000ULL
+#define	FO_PCI_TLU_UERR_INT_MFP_P		0x0000000000040000ULL
+#define	FO_PCI_TLU_UERR_INT_ROF_P		0x0000000000020000ULL
+#define	FO_PCI_TLU_UERR_INT_UC_P		0x0000000000010000ULL
+#define	FO_PCI_TLU_UERR_INT_CA_P		0x0000000000008000ULL
+#define	FO_PCI_TLU_UERR_INT_CTO_P		0x0000000000004000ULL
+#define	FO_PCI_TLU_UERR_INT_FCP_P		0x0000000000002000ULL
+#define	FIRE_PCI_TLU_UERR_INT_PP_P		0x0000000000001000ULL
+#define	OBERON_PCI_TLU_UERR_INT_POIS_P		0x0000000000001000ULL
+#define	FO_PCI_TLU_UERR_INT_DLP_P		0x0000000000000010ULL
+#define	FO_PCI_TLU_UERR_INT_TE_P		0x0000000000000001ULL
+
+/*
+ * PCI TLU correctable error interrupt enable, interrupt status and
+ * status clear registers
+ */
+#define	FO_PCI_TLU_CERR_INT_S_MASK		0x001fffff00000000ULL
+#define	FO_PCI_TLU_CERR_INT_S_SHFT		32
+#define	FO_PCI_TLU_CERR_INT_RTO_S		0x0000100000000000ULL
+#define	FO_PCI_TLU_CERR_INT_RNR_S		0x0000010000000000ULL
+#define	FO_PCI_TLU_CERR_INT_BDP_S		0x0000008000000000ULL
+#define	FO_PCI_TLU_CERR_INT_BTP_S		0x0000004000000000ULL
+#define	FO_PCI_TLU_CERR_INT_RE_S		0x0000000100000000ULL
+#define	FO_PCI_TLU_CERR_INT_P_MASK		0x00000000001fffffULL
+#define	FO_PCI_TLU_CERR_INT_P_SHFT		0
+#define	FO_PCI_TLU_CERR_INT_RTO_P		0x0000000000001000ULL
+#define	FO_PCI_TLU_CERR_INT_RNR_P		0x0000000000000100ULL
+#define	FO_PCI_TLU_CERR_INT_BDP_P		0x0000000000000080ULL
+#define	FO_PCI_TLU_CERR_INT_BTP_P		0x0000000000000040ULL
+#define	FO_PCI_TLU_CERR_INT_RE_P		0x0000000000000001ULL
+
+/* PCI TLU reset register */
+#define	FO_PCI_LPU_RST_WE			0x0000000080000000ULL
+#define	FO_PCI_LPU_RST_UNUSED_MASK		0x0000000000000e00ULL
+#define	FO_PCI_LPU_RST_UNUSED_SHFT		9
+#define	FO_PCI_LPU_RST_ERR			0x0000000000000100ULL
+#define	FO_PCI_LPU_RST_TXLINK			0x0000000000000080ULL
+#define	FO_PCI_LPU_RST_RXLINK			0x0000000000000040ULL
+#define	FO_PCI_LPU_RST_SMLINK			0x0000000000000020ULL
+#define	FO_PCI_LPU_RST_LTSSM			0x0000000000000010ULL
+#define	FO_PCI_LPU_RST_TXPHY			0x0000000000000008ULL
+#define	FO_PCI_LPU_RST_RXPHY			0x0000000000000004ULL
+#define	FO_PCI_LPU_RST_TXPCS			0x0000000000000002ULL
+#define	FO_PCI_LPU_RST_RXPCS			0x0000000000000001ULL
+
+/* PCI TLU link control register */
+#define	FO_PCI_TLU_LNK_CTRL_EXTSYNC		0x0000000000000080ULL
+#define	FO_PCI_TLU_LNK_CTRL_CLK			0x0000000000000040ULL
+#define	FO_PCI_TLU_LNK_CTRL_RETRAIN		0x0000000000000020ULL
+#define	FO_PCI_TLU_LNK_CTRL_DIS			0x0000000000000010ULL
+#define	FO_PCI_TLU_LNK_CTRL_RCB			0x0000000000000008ULL
+#define	FO_PCI_TLU_LNK_CTRL_ASPM_L0S_L1S	0x0000000000000003ULL
+#define	FO_PCI_TLU_LNK_CTRL_ASPM_L1S		0x0000000000000002ULL
+#define	FO_PCI_TLU_LNK_CTRL_ASPM_L0S		0x0000000000000001ULL
+#define	FO_PCI_TLU_LNK_CTRL_ASPM_DIS		0x0000000000000000ULL
+
+/* PCI TLU link status register */
+#define	FO_PCI_TLU_LNK_STAT_CLK			0x0000000000001000ULL
+#define	FO_PCI_TLU_LNK_STAT_TRAIN		0x0000000000000800ULL
+#define	FO_PCI_TLU_LNK_STAT_ERR			0x0000000000000400ULL
+#define	FO_PCI_TLU_LNK_STAT_WDTH_MASK		0x00000000000003f0ULL
+#define	FO_PCI_TLU_LNK_STAT_WDTH_SHFT		4
+#define	FO_PCI_TLU_LNK_STAT_SPEED_MASK		0x000000000000000fULL
+#define	FO_PCI_TLU_LNK_STAT_SPEED_SHFT		0
+
+/*
+ * PCI receive/transmit DLU/TLU uncorrectable error header 1/2 log
+ * registers
+ */
+#define	FO_PCI_TLU_UERR_HDR_LOG_MASK		0xffffffffffffffffULL
+#define	FO_PCI_TLU_UERR_HDR_LOG_SHFT		0
+
+/* PCI DLU/LPU interrupt status and mask registers */
+#define	FO_PCI_LPU_INT_INT			0x0000000080000000ULL
+#define	FIRE_PCI_LPU_INT_PRF_CNT2_OFLW		0x0000000000000080ULL
+#define	FIRE_PCI_LPU_INT_PRF_CNT1_OFLW		0x0000000000000040ULL
+#define	FO_PCI_LPU_INT_LNK_LYR			0x0000000000000020ULL
+#define	FO_PCI_LPU_INT_PHY_ERR			0x0000000000000010ULL
+#define	FIRE_PCI_LPU_INT_LTSSM			0x0000000000000008ULL
+#define	FIRE_PCI_LPU_INT_PHY_TX			0x0000000000000004ULL
+#define	FIRE_PCI_LPU_INT_PHY_RX			0x0000000000000002ULL
+#define	FIRE_PCI_LPU_INT_PHY_GB			0x0000000000000001ULL
+
+/* PCI DLU/LPU link layer config register */
+#define	FIRE_PCI_LPU_LNK_LYR_CFG_AUTO_UPDT_DIS	0x0000000000080000ULL
+#define	FIRE_PCI_LPU_LNK_LYR_CFG_FREQ_NAK_EN	0x0000000000040000ULL
+#define	FIRE_PCI_LPU_LNK_LYR_CFG_RPLY_AFTER_REQ	0x0000000000020000ULL
+#define	FIRE_PCI_LPU_LNK_LYR_CFG_LAT_THRS_WR_EN	0x0000000000010000ULL
+#define	FO_PCI_LPU_LNK_LYR_CFG_VC0_EN		0x0000000000000100ULL
+#define	FIRE_PCI_LPU_LNK_LYR_CFG_L0S_ADJ_FAC_EN	0x0000000000000010ULL
+#define	FIER_PCI_LPU_LNK_LYR_CFG_TLP_XMIT_FC_EN	0x0000000000000008ULL
+#define	FO_PCI_LPU_LNK_LYR_CFG_FREQ_ACK_EN	0x0000000000000004ULL
+#define	FO_PCI_LPU_LNK_LYR_CFG_RETRY_DIS	0x0000000000000002ULL
+
+/* PCI DLU/LPU link layer interrupt and status register */
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_LNK_ERR_ACT	0x0000000080000000ULL
+#define	OBERON_PCI_LPU_LNK_LYR_INT_STAT_PBUS_PE 0x0000000000800000ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_USPRTD_DLLP	0x0000000000400000ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_DLLP_RX_ERR	0x0000000000200000ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_BAD_DLLP	0x0000000000100000ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_TLP_RX_ERR	0x0000000000040000ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_SRC_ERR_TLP	0x0000000000020000ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_BAD_TLP	0x0000000000010000ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_RBF_UDF_ERR	0x0000000000000200ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_RBF_OVF_ERR	0x0000000000000100ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_EG_TLPM_ERR	0x0000000000000080ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_EG_TFRM_ERR	0x0000000000000040ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_RBF_PE	0x0000000000000020ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_EGRESS_PE	0x0000000000000010ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_RPLY_TMR_TO	0x0000000000000004ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_RPLY_NUM_RO	0x0000000000000002ULL
+#define	FO_PCI_LPU_LNK_LYR_INT_STAT_DLNK_PES	0x0000000000000001ULL
+
+/* PCI DLU/LPU flow control update control register */
+#define	FO_PCI_LPU_FLW_CTRL_UPDT_CTRL_FC0_C_EN	0x0000000000000004ULL
+#define	FO_PCI_LPU_FLW_CTRL_UPDT_CTRL_FC0_NP_EN	0x0000000000000002ULL
+#define	FO_PCI_LPU_FLW_CTRL_UPDT_CTRL_FC0_P_EN	0x0000000000000001ULL
+
+/* PCI DLU/LPU txlink ACKNAK latency timer threshold register */
+#define	FO_PCI_LPU_TXLNK_FREQ_LAT_TMR_THRS_MASK	0x000000000000ffffULL
+#define	FO_PCI_LPU_TXLNK_FREQ_LAT_TMR_THRS_SHFT	0
+
+/* PCI DLU/LPU txlink replay timer threshold register */
+#define	FO_PCI_LPU_TXLNK_RPLY_TMR_THRS_MASK	0x00000000000fffffULL
+#define	FO_PCI_LPU_TXLNK_RPLY_TMR_THRS_SHFT	0
+
+/* PCI DLU/LPU txlink FIFO pointer register */
+#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_TL_MASK	0x00000000ffff0000ULL
+#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_TL_SHFT	16
+#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_HD_MASK	0x000000000000ffffULL
+#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_HD_SHFT	0
+
+/* PCI DLU/LPU phy layer interrupt and status register */
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_PHY_LYR_ERR	0x0000000080000000ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_KC_DLLP_ERR	0x0000000000000800ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_END_POS_ERR	0x0000000000000400ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_LNK_ERR	0x0000000000000200ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_TRN_ERR	0x0000000000000100ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_EDB_DET	0x0000000000000080ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_SDP_END	0x0000000000000040ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_STP_END_EDB	0x0000000000000020ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_INVC_ERR	0x0000000000000010ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_MULTI_SDP	0x0000000000000008ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_MULTI_STP	0x0000000000000004ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_ILL_SDP_POS	0x0000000000000002ULL
+#define	FO_PCI_LPU_PHY_LYR_INT_STAT_ILL_STP_POS	0x0000000000000001ULL
+
+/* PCI DLU/LPU LTSSM config2 register */
+#define	FO_PCI_LPU_LTSSM_CFG2_12_TO_MASK	0x00000000ffffffffULL
+#define	FO_PCI_LPU_LTSSM_CFG2_12_TO_SHFT	0
+
+/* PCI DLU/LPU LTSSM config3 register */
+#define	FO_PCI_LPU_LTSSM_CFG3_2_TO_MASK		0x00000000ffffffffULL
+#define	FO_PCI_LPU_LTSSM_CFG3_2_TO_SHFT		0
+
+/* PCI DLU/LPU LTSSM config4 register */
+#define	FO_PCI_LPU_LTSSM_CFG4_TRN_CTRL_MASK	0x00000000ff000000ULL
+#define	FO_PCI_LPU_LTSSM_CFG4_TRN_CTRL_SHFT	24
+#define	FO_PCI_LPU_LTSSM_CFG4_DATA_RATE_MASK	0x0000000000ff0000ULL
+#define	FO_PCI_LPU_LTSSM_CFG4_DATA_RATE_SHFT	16
+#define	FO_PCI_LPU_LTSSM_CFG4_N_FTS_MASK	0x000000000000ff00ULL
+#define	FO_PCI_LPU_LTSSM_CFG4_N_FTS_SHFT	8
+#define	FO_PCI_LPU_LTSSM_CFG4_LNK_NUM_MASK	0x00000000000000ffULL
+#define	FO_PCI_LPU_LTSSM_CFG4_LNK_NUM_SHFT	0
+
+/* PCI DLU/LPU LTSSM config5 register */
+#define	FO_PCI_LPU_LTSSM_CFG5_UNUSED0_MASK	0x00000000ffffe000ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_UNUSED0_SHFT	13
+#define	FO_PCI_LPU_LTSSM_CFG5_RCV_DET_TST_MODE	0x0000000000001000ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_POLL_CMPLNC_DIS	0x0000000000000800ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_TX_IDLE_TX_FTS	0x0000000000000400ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_RX_FTS_RVR_LK	0x0000000000000200ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_UNUSED1_MASK	0x0000000000000180ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_UNUSED1_SHFT	7
+#define	FO_PCI_LPU_LTSSM_CFG5_LPBK_NTRY_ACTIVE	0x0000000000000040ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_LPBK_NTRY_EXIT	0x0000000000000020ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_LPBK_ACTIVE_EXIT	0x0000000000000010ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_L1_IDLE_RCVRY_LK	0x0000000000000008ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_L0_TRN_CNTRL_RST	0x0000000000000004ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_L0_LPBK		0x0000000000000002ULL
+#define	FO_PCI_LPU_LTSSM_CFG5_UNUSED2		0x0000000000000001ULL
+
+/* Controller configuration and status registers */
+#define	FIRE_JBUS_PAR_CTRL			0x60010
+#define	FO_XBC_ERR_LOG_EN			0x61000
+#define	FO_XBC_INT_EN				0x61008
+#define	FO_XBC_INT_STAT				0x61010
+#define	FO_XBC_ERR_STAT_CLR			0x61018
+#define	FIRE_JBC_FATAL_RST_EN			0x61028
+#define	FIRE_JBCINT_ITRANS_ERR_LOG		0x61040
+#define	FIRE_JBCINT_ITRANS_ERR_LOG2		0x61048
+#define	FIRE_JBCINT_OTRANS_ERR_LOG		0x61040
+#define	FIRE_JBCINT_OTRANS_ERR_LOG2		0x61048
+#define	FIRE_FATAL_ERR_LOG			0x61050
+#define	FIRE_FATAL_ERR_LOG2			0x61058
+#define	FIRE_MERGE_TRANS_ERR_LOG		0x61060
+#define	FIRE_DMCINT_ODCD_ERR_LOG		0x61068
+#define	FIRE_DMCINT_IDC_ERR_LOG			0x61070
+#define	FIRE_JBC_CSR_ERR_LOG			0x61078
+#define	FIRE_JBC_CORE_BLOCK_INT_EN		0x61800
+#define	FIRE_JBC_CORE_BLOCK_ERR_STAT		0x61808
+#define	FO_XBC_PRF_CNT_SEL			0x62000
+#define	FO_XBC_PRF_CNT0				0x62008
+#define	FO_XBC_PRF_CNT1				0x62010
+
+/* JBus parity control register */
+#define	FIRE_JBUS_PAR_CTRL_P_EN			0x8000000000000000ULL
+#define	FIRE_JBUS_PAR_CTRL_INVRTD_PAR_MASK	0x000000000000003cULL
+#define	FIRE_JBUS_PAR_CTRL_INVRTD_PAR_SHFT	2
+#define	FIRE_JBUS_PAR_CTRL_NEXT_DATA		0x0000000000000002ULL
+#define	FIRE_JBUS_PAR_CTRL_NEXT_ADDR		0x0000000000000001ULL
+
+/* JBC error log enable register - may also apply to UBC */
+#define	FIRE_JBC_ERR_LOG_EN_SPARE_MASK		0x00000000e0000000ULL
+#define	FIRE_JBC_ERR_LOG_EN_SPARE_SHFT		29
+#define	FIRE_JBC_ERR_LOG_EN_PIO_UNMAP_RD	0x0000000010000000ULL
+#define	FIRE_JBC_ERR_LOG_EN_ILL_ACC_RD		0x0000000008000000ULL
+#define	FIRE_JBC_ERR_LOG_EN_EBUS_TO		0x0000000004000000ULL
+#define	FIRE_JBC_ERR_LOG_EN_MB_PEA		0x0000000002000000ULL
+#define	FIRE_JBC_ERR_LOG_EN_MB_PER		0x0000000001000000ULL
+#define	FIRE_JBC_ERR_LOG_EN_MB_PEW		0x0000000000800000ULL
+#define	FIRE_JBC_ERR_LOG_EN_UE_ASYN		0x0000000000400000ULL
+#define	FIRE_JBC_ERR_LOG_EN_CE_ASYN		0x0000000000200000ULL
+#define	FIRE_JBC_ERR_LOG_EN_JTE			0x0000000000100000ULL
+#define	FIRE_JBC_ERR_LOG_EN_JBE			0x0000000000080000ULL
+#define	FIRE_JBC_ERR_LOG_EN_JUE			0x0000000000040000ULL
+#define	FIRE_JBC_ERR_LOG_EN_IJP			0x0000000000020000ULL
+#define	FIRE_JBC_ERR_LOG_EN_ICISE		0x0000000000010000ULL
+#define	FIRE_JBC_ERR_LOG_EN_CPE			0x0000000000008000ULL
+#define	FIRE_JBC_ERR_LOG_EN_APE			0x0000000000004000ULL
+#define	FIRE_JBC_ERR_LOG_EN_WR_DPE		0x0000000000002000ULL
+#define	FIRE_JBC_ERR_LOG_EN_RD_DPE		0x0000000000001000ULL
+#define	FIRE_JBC_ERR_LOG_EN_ILL_BMW		0x0000000000000800ULL
+#define	FIRE_JBC_ERR_LOG_EN_ILL_BMR		0x0000000000000400ULL
+#define	FIRE_JBC_ERR_LOG_EN_BJC			0x0000000000000200ULL
+#define	FIRE_JBC_ERR_LOG_EN_PIO_UNMAP		0x0000000000000100ULL
+#define	FIRE_JBC_ERR_LOG_EN_PIO_DPE		0x0000000000000080ULL
+#define	FIRE_JBC_ERR_LOG_EN_PIO_CPE		0x0000000000000040ULL
+#define	FIRE_JBC_ERR_LOG_EN_ILL_ACC		0x0000000000000020ULL
+#define	FIRE_JBC_ERR_LOG_EN_UNSOL_RD		0x0000000000000010ULL
+#define	FIRE_JBC_ERR_LOG_EN_UNSOL_INT		0x0000000000000008ULL
+#define	FIRE_JBC_ERR_LOG_EN_JTCEEW		0x0000000000000004ULL
+#define	FIRE_JBC_ERR_LOG_EN_JTCEEI		0x0000000000000002ULL
+#define	FIRE_JBC_ERR_LOG_EN_JTCEER		0x0000000000000001ULL
+
+/* JBC interrupt enable, interrupt status and error status clear registers */
+#define	FIRE_JBC_ERR_INT_SPARE_S_MASK		0xe000000000000000ULL
+#define	FIRE_JBC_ERR_INT_SPARE_S_SHFT		61
+#define	FIRE_JBC_ERR_INT_PIO_UNMAP_RD_S		0x1000000000000000ULL
+#define	FIRE_JBC_ERR_INT_ILL_ACC_RD_S		0x0800000000000000ULL
+#define	FIRE_JBC_ERR_INT_EBUS_TO_S		0x0400000000000000ULL
+#define	FIRE_JBC_ERR_INT_MB_PEA_S		0x0200000000000000ULL
+#define	FIRE_JBC_ERR_INT_MB_PER_S		0x0100000000000000ULL
+#define	FIRE_JBC_ERR_INT_MB_PEW_S		0x0080000000000000ULL
+#define	FIRE_JBC_ERR_INT_UE_ASYN_S		0x0040000000000000ULL
+#define	FIRE_JBC_ERR_INT_CE_ASYN_S		0x0020000000000000ULL
+#define	FIRE_JBC_ERR_INT_JTE_S			0x0010000000000000ULL
+#define	FIRE_JBC_ERR_INT_JBE_S			0x0008000000000000ULL
+#define	FIRE_JBC_ERR_INT_JUE_S			0x0004000000000000ULL
+#define	FIRE_JBC_ERR_INT_IJP_S			0x0002000000000000ULL
+#define	FIRE_JBC_ERR_INT_ICISE_S		0x0001000000000000ULL
+#define	FIRE_JBC_ERR_INT_CPE_S			0x0000800000000000ULL
+#define	FIRE_JBC_ERR_INT_APE_S			0x0000400000000000ULL
+#define	FIRE_JBC_ERR_INT_WR_DPE_S		0x0000200000000000ULL
+#define	FIRE_JBC_ERR_INT_RD_DPE_S		0x0000100000000000ULL
+#define	FIRE_JBC_ERR_INT_ILL_BMW_S		0x0000080000000000ULL
+#define	FIRE_JBC_ERR_INT_ILL_BMR_S		0x0000040000000000ULL
+#define	FIRE_JBC_ERR_INT_BJC_S			0x0000020000000000ULL
+#define	FIRE_JBC_ERR_INT_PIO_UNMAP_S		0x0000010000000000ULL
+#define	FIRE_JBC_ERR_INT_PIO_DPE_S		0x0000008000000000ULL
+#define	FIRE_JBC_ERR_INT_PIO_CPE_S		0x0000004000000000ULL
+#define	FIRE_JBC_ERR_INT_ILL_ACC_S		0x0000002000000000ULL
+#define	FIRE_JBC_ERR_INT_UNSOL_RD_S		0x0000001000000000ULL
+#define	FIRE_JBC_ERR_INT_UNSOL_INT_S		0x0000000800000000ULL
+#define	FIRE_JBC_ERR_INT_JTCEEW_S		0x0000000400000000ULL
+#define	FIRE_JBC_ERR_INT_JTCEEI_S		0x0000000200000000ULL
+#define	FIRE_JBC_ERR_INT_JTCEER_S		0x0000000100000000ULL
+#define	FIRE_JBC_ERR_INT_SPARE_P_MASK		0x00000000e0000000ULL
+#define	FIRE_JBC_ERR_INT_SPARE_P_SHFT		29
+#define	FIRE_JBC_ERR_INT_PIO_UNMAP_RD_P		0x0000000010000000ULL
+#define	FIRE_JBC_ERR_INT_ILL_ACC_RD_P		0x0000000008000000ULL
+#define	FIRE_JBC_ERR_INT_EBUS_TO_P		0x0000000004000000ULL
+#define	FIRE_JBC_ERR_INT_MB_PEA_P		0x0000000002000000ULL
+#define	FIRE_JBC_ERR_INT_MB_PER_P		0x0000000001000000ULL
+#define	FIRE_JBC_ERR_INT_MB_PEW_P		0x0000000000800000ULL
+#define	FIRE_JBC_ERR_INT_UE_ASYN_P		0x0000000000400000ULL
+#define	FIRE_JBC_ERR_INT_CE_ASYN_P		0x0000000000200000ULL
+#define	FIRE_JBC_ERR_INT_JTE_P			0x0000000000100000ULL
+#define	FIRE_JBC_ERR_INT_JBE_P			0x0000000000080000ULL
+#define	FIRE_JBC_ERR_INT_JUE_P			0x0000000000040000ULL
+#define	FIRE_JBC_ERR_INT_IJP_P			0x0000000000020000ULL
+#define	FIRE_JBC_ERR_INT_ICISE_P		0x0000000000010000ULL
+#define	FIRE_JBC_ERR_INT_CPE_P			0x0000000000008000ULL
+#define	FIRE_JBC_ERR_INT_APE_P			0x0000000000004000ULL
+#define	FIRE_JBC_ERR_INT_WR_DPE_P		0x0000000000002000ULL
+#define	FIRE_JBC_ERR_INT_RD_DPE_P		0x0000000000001000ULL
+#define	FIRE_JBC_ERR_INT_ILL_BMW_P		0x0000000000000800ULL
+#define	FIRE_JBC_ERR_INT_ILL_BMR_P		0x0000000000000400ULL
+#define	FIRE_JBC_ERR_INT_BJC_P			0x0000000000000200ULL
+#define	FIRE_JBC_ERR_INT_PIO_UNMAP_P		0x0000000000000100ULL
+#define	FIRE_JBC_ERR_INT_PIO_DPE_P		0x0000000000000080ULL
+#define	FIRE_JBC_ERR_INT_PIO_CPE_P		0x0000000000000040ULL
+#define	FIRE_JBC_ERR_INT_ILL_ACC_P		0x0000000000000020ULL
+#define	FIRE_JBC_ERR_INT_UNSOL_RD_P		0x0000000000000010ULL
+#define	FIRE_JBC_ERR_INT_UNSOL_INT_P		0x0000000000000008ULL
+#define	FIRE_JBC_ERR_INT_JTCEEW_P		0x0000000000000004ULL
+#define	FIRE_JBC_ERR_INT_JTCEEI_P		0x0000000000000002ULL
+#define	FIRE_JBC_ERR_INT_JTCEER_P		0x0000000000000001ULL
+
+/* UBC interrupt enable, error status and error status clear registers */
+#define	OBERON_UBC_ERR_INT_PIORBEUE_S		0x0004000000000000ULL
+#define	OBERON_UBC_ERR_INT_PIOWBEUE_S		0x0002000000000000ULL
+#define	OBERON_UBC_ERR_INT_PIOWTUE_S		0x0001000000000000ULL
+#define	OBERON_UBC_ERR_INT_MEMWTAXB_S		0x0000080000000000ULL
+#define	OBERON_UBC_ERR_INT_MEMRDAXB_S		0x0000040000000000ULL
+#define	OBERON_UBC_ERR_INT_DMAWTUEB_S		0x0000020000000000ULL
+#define	OBERON_UBC_ERR_INT_DMARDUEB_S		0x0000010000000000ULL
+#define	OBERON_UBC_ERR_INT_MEMWTAXA_S		0x0000000800000000ULL
+#define	OBERON_UBC_ERR_INT_MEMRDAXA_S		0x0000000400000000ULL
+#define	OBERON_UBC_ERR_INT_DMAWTUEA_S		0x0000000200000000ULL
+#define	OBERON_UBC_ERR_INT_DMARDUEA_S		0x0000000100000000ULL
+#define	OBERON_UBC_ERR_INT_PIORBEUE_P		0x0000000000040000ULL
+#define	OBERON_UBC_ERR_INT_PIOWBEUE_P		0x0000000000020000ULL
+#define	OBERON_UBC_ERR_INT_PIOWTUE_P		0x0000000000010000ULL
+#define	OBERON_UBC_ERR_INT_MEMWTAXB_P		0x0000000000000800ULL
+#define	OBERON_UBC_ERR_INT_MEMRDAXB_P		0x0000000000000400ULL
+#define	OBERON_UBC_ERR_INT_DMARDUEB_P		0x0000000000000200ULL
+#define	OBERON_UBC_ERR_INT_DMAWTUEB_P		0x0000000000000100ULL
+#define	OBERON_UBC_ERR_INT_MEMWTAXA_P		0x0000000000000008ULL
+#define	OBERON_UBC_ERR_INT_MEMRDAXA_P		0x0000000000000004ULL
+#define	OBERON_UBC_ERR_INT_DMAWTUEA_P		0x0000000000000002ULL
+#define	OBERON_UBC_ERR_INT_DMARDUEA_P		0x0000000000000001ULL
+
+/* JBC fatal reset enable register */
+#define	FIRE_JBC_FATAL_RST_EN_SPARE_P_INT_MASK	0x000000000c000000ULL
+#define	FIRE_JBC_FATAL_RST_EN_SPARE_P_INT_SHFT	26
+#define	FIRE_JBC_FATAL_RST_EN_MB_PEA_P_INT	0x0000000002000000ULL
+#define	FIRE_JBC_FATAL_RST_EN_CPE_P_INT		0x0000000000008000ULL
+#define	FIRE_JBC_FATAL_RST_EN_APE_P_INT		0x0000000000004000ULL
+#define	FIRE_JBC_FATAL_RST_EN_PIO_CPE_INT	0x0000000000000040ULL
+#define	FIRE_JBC_FATAL_RST_EN_JTCEEW_P_INT	0x0000000000000004ULL
+#define	FIRE_JBC_FATAL_RST_EN_JTCEEI_P_INT	0x0000000000000002ULL
+#define	FIRE_JBC_FATAL_RST_EN_JTCEER_P_INT	0x0000000000000001ULL
+
+/* JBC JBCINT in transaction error log register */
+#define	FIRE_JBCINT_ITRANS_ERR_LOG_Q_WORD_MASK	0x00c0000000000000ULL
+#define	FIRE_JBCINT_ITRANS_ERR_LOG_Q_WORD_SHFT	54
+#define	FIRE_JBCINT_ITRANS_ERR_LOG_TRANSID_MASK	0x0003000000000000ULL
+#define	FIRE_JBCINT_ITRANS_ERR_LOG_TRANSID_SHFT	48
+#define	FIRE_JBCINT_ITRANS_ERR_LOG_ADDR_MASK	0x000007ffffffffffULL
+#define	FIRE_JBCINT_ITRANS_ERR_LOG_ADDR_SHFT	0
+
+/* JBC JBCINT in transaction error log register 2 */
+#define	FIRE_JBCINT_ITRANS_ERR_LOG2_ARB_WN_MASK	0x000ffffff0000000ULL
+#define	FIRE_JBCINT_ITRANS_ERR_LOG2_ARB_WN_SHFT	28
+#define	FIRE_JBCINT_ITRANS_ERR_LOG2_J_REQ_MASK	0x000000000fe00000ULL
+#define	FIRE_JBCINT_ITRANS_ERR_LOG2_J_REQ_SHFT	21
+#define	FIRE_JBCINT_ITRANS_ERR_LOG2_J_PACK_MASK	0x00000000001fffffULL
+#define	FIRE_JBCINT_ITRANS_ERR_LOG2_J_PACK_SHFT	0
+
+/* JBC JBCINT out transaction error log register */
+#define	FIRE_JBCINT_OTRANS_ERR_LOG_TRANSID_MASK	0x003f000000000000ULL
+#define	FIRE_JBCINT_OTRANS_ERR_LOG_TRANSID_SHFT	48
+#define	FIRE_JBCINT_OTRANS_ERR_LOG_ADDR_MASK	0x000007ffffffffffULL
+#define	FIRE_JBCINT_OTRANS_ERR_LOG_ADDR_SHFT	0
+
+/* JBC JBCINT out transaction error log register 2 */
+#define	FIRE_JBCINT_OTRANS_ERR_LOG2_ARB_WN_MASK	0x000ffffff0000000ULL
+#define	FIRE_JBCINT_OTRANS_ERR_LOG2_ARB_WN_SHFT	28
+#define	FIRE_JBCINT_OTRANS_ERR_LOG2_J_REQ_MASK	0x000000000fe00000ULL
+#define	FIRE_JBCINT_OTRANS_ERR_LOG2_J_REQ_SHFT	21
+#define	FIRE_JBCINT_OTRANS_ERR_LOG2_J_PACK_MASK	0x00000000001fffffULL
+#define	FIRE_JBCINT_OTRANS_ERR_LOG2_J_PACK_SHFT	0
+
+/* JBC merge transaction error log register */
+#define	FIRE_FATAL_ERR_LOG_DATA_MASK		0xffffffffffffffffULL
+#define	FIRE_FATAL_ERR_LOG_DATA_SHFT		0
+
+/* JBC merge transaction error log register 2 */
+#define	FIRE_FATAL_ERR_LOG2_ARB_WN_MASK		0x000ffffff0000000ULL
+#define	FIRE_FATAL_ERR_LOG2_ARB_WN_SHFT		28
+#define	FIRE_FATAL_ERR_LOG2_J_REQ_MASK		0x000000000fe00000ULL
+#define	FIRE_FATAL_ERR_LOG2_J_REQ_SHFT		21
+#define	FIRE_FATAL_ERR_LOG2_J_PACK_MASK		0x00000000001fffffULL
+#define	FIRE_FATAL_ERR_LOG2_J_PACK_SHFT		0
+
+/* JBC merge transaction error log register */
+#define	FIRE_MERGE_TRANS_ERR_LOG_Q_WORD_MASK	0x00c0000000000000ULL
+#define	FIRE_MERGE_TRANS_ERR_LOG_Q_WORD_SHFT	54
+#define	FIRE_MERGE_TRANS_ERR_LOG_TRANSID_MASK	0x0003000000000000ULL
+#define	FIRE_MERGE_TRANS_ERR_LOG_TRANSID_SHFT	48
+#define	FIRE_MERGE_TRANS_ERR_LOG_JBC_TAG_MASK	0x0000f80000000000ULL
+#define	FIRE_MERGE_TRANS_ERR_LOG_JBC_TAG_SHFT	43
+#define	FIRE_MERGE_TRANS_ERR_LOG_ADDR_MASK	0x000007ffffffffffULL
+#define	FIRE_MERGE_TRANS_ERR_LOG_ADDR_SHFT	0
+
+/* JBC DMCINT ODCD error log register */
+#define	FIRE_DMCINT_ODCD_ERR_LOG_TRANS_ID_MASK	0x0030000000000000ULL
+#define	FIRE_DMCINT_ODCD_ERR_LOG_TRANS_ID_SHFT	52
+#define	FIRE_DMCINT_ODCD_ERR_LOG_AID_MASK	0x000f000000000000ULL
+#define	FIRE_DMCINT_ODCD_ERR_LOG_AID_SHFT	48
+#define	FIRE_DMCINT_ODCD_ERR_LOG_TTYPE_MASK	0x0000f80000000000ULL
+#define	FIRE_DMCINT_ODCD_ERR_LOG_TTYPE_SHFT	43
+#define	FIRE_DMCINT_ODCD_ERR_LOG_ADDR_MASK	0x000007ffffffffffULL
+#define	FIRE_DMCINT_ODCD_ERR_LOG_ADDR_SHFT	0
+
+/* JBC DMCINT IDC error log register */
+#define	FIRE_DMCINT_IDC_ERR_DMC_CTAG_MASK	0x000000000fff0000ULL
+#define	FIRE_DMCINT_IDC_ERR_DMC_CTAG_SHFT	16
+#define	FIRE_DMCINT_IDC_ERR_TRANSID_MASK	0x000000000000c000ULL
+#define	FIRE_DMCINT_IDC_ERR_AGNTID_MASK		0x0000000000003c00ULL
+#define	FIRE_DMCINT_IDC_ERR_AGNTID_SHFT		10
+#define	FIRE_DMCINT_IDC_ERR_SRCID_MASK		0x00000000000003e0ULL
+#define	FIRE_DMCINT_IDC_ERR_SRCID_SHFT		5
+#define	FIRE_DMCINT_IDC_ERR_TARGID_MASK		0x000000000000001fULL
+#define	FIRE_DMCINT_IDC_ERRO_TARGID_SHFT	0
+
+/* JBC CSR error log register */
+#define	FIRE_JBC_CSR_ERR_LOG_WR			0x0000040000000000ULL
+#define	FIRE_JBC_CSR_ERR_LOG_BMASK_MASK		0x000003fffc000000ULL
+#define	FIRE_JBC_CSR_ERR_LOG_BMASK_SHFT		26
+#define	FIRE_JBC_CSR_ERR_LOG_ADDR_MASK		0x0000000003ffffffULL
+#define	FIRE_JBC_CSR_ERR_LOG_ADDR_SHFT		0
+
+/* JBC core and block interrupt enable register */
+#define	FIRE_JBC_CORE_BLOCK_INT_EN_JBC		0x8000000000000000ULL
+#define	FIRE_JBC_CORE_BLOCK_INT_EN_CSR		0x0000000000000008ULL
+#define	FIRE_JBC_CORE_BLOCK_INT_EN_MERGE	0x0000000000000004ULL
+#define	FIRE_JBC_CORE_BLOCK_INT_EN_JBCINT	0x0000000000000002ULL
+#define	FIRE_JBC_CORE_BLOCK_INT_EN_DMCINT	0x0000000000000001ULL
+
+/* JBC core and block error status register */
+#define	FIRE_JBC_CORE_BLOCK_ERR_STAT_CSR	0x0000000000000008ULL
+#define	FIRE_JBC_CORE_BLOCK_ERR_STAT_MERGE	0x0000000000000004ULL
+#define	FIRE_JBC_CORE_BLOCK_ERR_STAT_JBCINT	0x0000000000000002ULL
+#define	FIRE_JBC_CORE_BLOCK_ERR_STAT_DMCINT	0x0000000000000001ULL
+
+/* JBC performance counter select register - may also apply to UBC */
+#define	FO_XBC_PRF_CNT_PIO_RD_PCIEB		0x0000000000000018ULL
+#define	FO_XBC_PRF_CNT_PIO_WR_PCIEB		0x0000000000000017ULL
+#define	FO_XBC_PRF_CNT_PIO_RD_PCIEA		0x0000000000000016ULL
+#define	FO_XBC_PRF_CNT_PIO_WR_PCIEA		0x0000000000000015ULL
+#define	FO_XBC_PRF_CNT_WB			0x0000000000000014ULL
+#define	FO_XBC_PRF_CNT_PIO_FRGN			0x0000000000000013ULL
+#define	FO_XBC_PRF_CNT_XB_NCHRNT		0x0000000000000012ULL
+#define	FO_XBC_PRF_CNT_FO_CHRNT			0x0000000000000011ULL
+#define	FO_XBC_PRF_CNT_XB_CHRNT			0x0000000000000010ULL
+#define	FO_XBC_PRF_CNT_AOKOFF_DOKOFF		0x000000000000000fULL
+#define	FO_XBC_PRF_CNT_DOKOFF			0x000000000000000eULL
+#define	FO_XBC_PRF_CNT_AOKOFF			0x000000000000000dULL
+#define	FO_XBC_PRF_CNT_RD_TOTAL			0x000000000000000cULL
+#define	FO_XBC_PRF_CNT_WR_TOTAL			0x000000000000000bULL
+#define	FO_XBC_PRF_CNT_WR_PARTIAL		0x000000000000000aULL
+#define	FO_XBC_PRF_CNT_PIOS_CSR_RINGB		0x0000000000000009ULL
+#define	FO_XBC_PRF_CNT_PIOS_CSR_RINGA		0x0000000000000008ULL
+#define	FO_XBC_PRF_CNT_PIOS_EBUS		0x0000000000000007ULL
+#define	FO_XBC_PRF_CNT_PIOS_I2C			0x0000000000000006ULL
+#define	FO_XBC_PRF_CNT_RD_LAT_SMPLS		0x0000000000000005ULL
+#define	FO_XBC_PRF_CNT_RD_LAT			0x0000000000000004ULL
+#define	FO_XBC_PRF_CNT_ON_XB			0x0000000000000003ULL
+#define	FO_XBC_PRF_CNT_XB_IDL			0x0000000000000002ULL
+#define	FO_XBC_PRF_CNT_XB_CLK			0x0000000000000001ULL
+#define	FO_XBC_PRF_CNT_NONE			0x0000000000000000ULL
+#define	FO_XBC_PRF_CNT_CNT1_SHFT		8
+#define	FO_XBC_PRF_CNT_CNT0_SHFT		0
+
+/* JBC performance counter 0/1 registers - may also apply to UBC */
+#define	FO_XBC_PRF_CNT_MASK			0xffffffffffffffffULL
+#define	FO_XBC_PRF_CNT_SHFT			0
+
+/* Lookup tables */
+const uint16_t const fire_freq_nak_tmr_thrs[6][4] = {
+	{ 0x00ed, 0x049, 0x043, 0x030 },
+	{ 0x01a0, 0x076, 0x06b, 0x048 },
+	{ 0x022f, 0x09a, 0x056, 0x056 },
+	{ 0x042f, 0x11a, 0x096, 0x096 },
+	{ 0x082f, 0x21a, 0x116, 0x116 },
+	{ 0x102f, 0x41a, 0x216, 0x216 }
+};
+
+const uint16_t const fire_rply_tmr_thrs[6][4] = {
+	{ 0x0379, 0x112, 0x0fc, 0x0b4 },
+	{ 0x0618, 0x1BA, 0x192, 0x10e },
+	{ 0x0831, 0x242, 0x143, 0x143 },
+	{ 0x0fb1, 0x422, 0x233, 0x233 },
+	{ 0x1eb0, 0x7e1, 0x412, 0x412 },
+	{ 0x3cb0, 0xf61, 0x7d2, 0x7d2 }
+};
+
+/* Register default values */
+#define	FO_PCI_TLU_CTRL_L0S_TIM_DFLT		0xda
+#define	FO_PCI_TLU_CTRL_CFG_DFLT		0x1
+#define	FO_PCI_LPU_LTSSM_CFG2_12_TO_DFLT	0x2dc6c0
+#define	FO_PCI_LPU_LTSSM_CFG3_2_TO_DFLT		0x7a120
+#define	FO_PCI_LPU_LTSSM_CFG4_DATA_RATE_DFLT	0x2
+#define	FO_PCI_LPU_LTSSM_CFG4_N_FTS_DFLT	0x8c
+#define	OBERON_PCI_LPU_TXLNK_RPLY_TMR_THRS_DFLT	0xc9
+#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_HD_DFLT	0x0
+#define	FO_PCI_LPU_TXLNK_RTR_FIFO_PTR_TL_DFLT	0xffff
+
+/* INO macros */
+#define	FO_EQ_FIRST_INO				0x18
+#define	FO_EQ_LAST_INO				0x3b
+#define	FO_DMC_PEC_INO				0x3e
+#define	FO_XCB_INO				0x3f
+#define	FO_MAX_INO				FO_XCB_INO
+
+/* Device space macros */
+#define	FO_CONF_BUS_SHFT			20
+#define	FO_CONF_DEV_SHFT			15
+#define	FO_CONF_FUNC_SHFT			12
+#define	FO_CONF_REG_SHFT			0
+#define	FO_IO_SIZE				0x10000000
+#define	FO_MEM_SIZE				0x1ffff0000
+
+#define	FO_CONF_OFF(bus, slot, func, reg)				\
+	(((bus) << FO_CONF_BUS_SHFT) |					\
+	((slot) << FO_CONF_DEV_SHFT) |					\
+	((func) << FO_CONF_FUNC_SHFT) |					\
+	((reg) << FO_CONF_REG_SHFT))
+
+/* Width of the physical addresses the IOMMU translates to */
+#define	FIRE_IOMMU_BITS				43
+#define	OBERON_IOMMU_BITS			47
+
+/* Event queue macros */
+#define	FO_EQ_ALIGNMENT				(512 * 1024)
+#define	FO_EQ_NRECORDS				128
+#define	FO_EQ_RECORD_SIZE			64
+
+/* Event queue record format */
+struct fo_msiq_record {
+	uint64_t	fomqr_word0;
+	uint64_t	fomqr_word1;
+	uint64_t	fomqr_reserved[6];
+};
+
+#define	FO_MQR_WORD0_FMT_TYPE_MASK		0x7f00000000000000ULL
+#define	FO_MQR_WORD0_FMT_TYPE_SHFT		56
+#define	FO_MQR_WORD0_FMT_TYPE_MSI64		0x7800000000000000ULL
+#define	FO_MQR_WORD0_FMT_TYPE_MSI32		0x5800000000000000ULL
+#define	FO_MQR_WORD0_FMT_TYPE_MSG		0x3000000000000000ULL
+#define	FO_MQR_WORD0_FMT_TYPE_MSG_ROUTE_MASK	0x0700000000000000ULL
+#define	FO_MQR_WORD0_FMT_TYPE_MSG_ROUTE_SHFT	56
+#define	FO_MQR_WORD0_LENGTH_MASK		0x00ffc00000000000ULL
+#define	FO_MQR_WORD0_LENGTH_SHFT		46
+#define	FO_MQR_WORD0_ADDR0_MASK			0x00003fff00000000ULL
+#define	FO_MQR_WORD0_ADDR0_SHFT			32
+#define	FO_MQR_WORD0_RID_MASK			0x00000000ffff0000ULL
+#define	FO_MQR_WORD0_RID_SHFT			16
+#define	FO_MQR_WORD0_DATA0_MASK			0x000000000000ffffULL
+#define	FO_MQR_WORD0_DATA0_SHFT			0
+#define	FO_MQR_WORD1_ADDR1_MASK			0xffffffffffff0000ULL
+#define	FO_MQR_WORD1_ADDR1_SHFT			16
+#define	FO_MQR_WORD1_DATA1_MASK			0x000000000000ffffULL
+#define	FO_MQR_WORD1_DATA1_SHFT			0
+
+#endif /* !_SPARC64_PCI_FIREREG_H_ */
diff --git a/sys/sparc64/pci/firevar.h b/sys/sparc64/pci/firevar.h
new file mode 100644
index 00000000000..58ba419daee
--- /dev/null
+++ b/sys/sparc64/pci/firevar.h
@@ -0,0 +1,98 @@
+/*-
+ * Copyright (c) 2009 by Marius Strobl .
+ * 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,
+ *    without modification, immediately at the beginning of the file.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _SPARC64_PCI_FIREVAR_H_
+#define	_SPARC64_PCI_FIREVAR_H_
+
+struct fire_softc {
+	struct iommu_state		sc_is;
+	struct bus_dma_methods		sc_dma_methods;
+
+	struct mtx			sc_msi_mtx;
+	struct mtx			sc_pcib_mtx;
+
+	struct resource			*sc_mem_res[FIRE_NREG];
+	struct resource			*sc_irq_res[FIRE_NINTR];
+	void				*sc_ihand[FIRE_NINTR];
+
+	struct rman			sc_pci_mem_rman;
+	struct rman			sc_pci_io_rman;
+	bus_space_handle_t		sc_pci_bh[FIRE_NRANGE];
+	bus_space_tag_t			sc_pci_cfgt;
+	bus_space_tag_t			sc_pci_iot;
+	bus_space_tag_t			sc_pci_memt;
+	bus_dma_tag_t			sc_pci_dmat;
+
+	device_t			sc_dev;
+
+	uint64_t			*sc_msiq;
+	u_char				*sc_msi_bitmap;
+	uint32_t			*sc_msi_msiq_table;
+	u_char				*sc_msiq_bitmap;
+	uint64_t			sc_msi_addr32;
+	uint64_t			sc_msi_addr64;
+	uint32_t			sc_msi_count;
+	uint32_t			sc_msi_first;
+	uint32_t			sc_msi_data_mask;
+	uint32_t			sc_msix_data_width;
+	uint32_t			sc_msiq_count;
+	uint32_t			sc_msiq_size;
+	uint32_t			sc_msiq_first;
+	uint32_t			sc_msiq_ino_first;
+
+	phandle_t			sc_node;
+
+	u_int				sc_mode;
+#define	FIRE_MODE_FIRE			0
+#define	FIRE_MODE_OBERON		1
+
+	u_int				sc_flags;
+#define	FIRE_MSIX			(1 << 0)
+
+	uint32_t			sc_ign;
+
+	uint32_t			sc_stats_ilu_err;
+	uint32_t			sc_stats_jbc_ce_async;
+	uint32_t			sc_stats_jbc_unsol_int;
+	uint32_t			sc_stats_jbc_unsol_rd;
+	uint32_t			sc_stats_mmu_err;
+	uint32_t			sc_stats_tlu_ce;
+	uint32_t			sc_stats_tlu_oe_non_fatal;
+	uint32_t			sc_stats_tlu_oe_rx_err;
+	uint32_t			sc_stats_tlu_oe_tx_err;
+	uint32_t			sc_stats_ubc_dmardue;
+
+	uint8_t				sc_pci_secbus;
+	uint8_t				sc_pci_subbus;
+
+	struct ofw_bus_iinfo		sc_pci_iinfo;
+};
+
+#endif /* !_SPARC64_PCI_FIREVAR_H_ */
diff --git a/sys/sparc64/pci/ofw_pci.h b/sys/sparc64/pci/ofw_pci.h
index 3b5059858c1..ad9642014d4 100644
--- a/sys/sparc64/pci/ofw_pci.h
+++ b/sys/sparc64/pci/ofw_pci.h
@@ -48,6 +48,31 @@ typedef uint32_t ofw_pci_intr_t;
 #define	OFW_TYPE_PCI		"pci"
 #define	OFW_TYPE_PCIE		"pciex"
 
+struct ofw_pci_msi_addr_ranges {
+	uint32_t	addr32_hi;
+	uint32_t	addr32_lo;
+	uint32_t	addr32_sz;
+	uint32_t	addr64_hi;
+	uint32_t	addr64_lo;
+	uint32_t	addr64_sz;
+};
+
+#define	OFW_PCI_MSI_ADDR_RANGE_32(r) \
+	(((uint64_t)(r)->addr32_hi << 32) | (uint64_t)(r)->addr32_lo)
+#define	OFW_PCI_MSI_ADDR_RANGE_64(r) \
+	(((uint64_t)(r)->addr64_hi << 32) | (uint64_t)(r)->addr64_lo)
+
+struct ofw_pci_msi_eq_to_devino {
+	uint32_t	eq_first;
+	uint32_t	eq_count;
+	uint32_t	devino_first;
+};
+
+struct ofw_pci_msi_ranges {
+	uint32_t	first;
+	uint32_t	count;
+};
+
 struct ofw_pci_ranges {
 	uint32_t	cspace;
 	uint32_t	child_hi;
diff --git a/sys/sparc64/pci/ofw_pcib.c b/sys/sparc64/pci/ofw_pcib.c
index 3be57e3d340..c18d7c0e349 100644
--- a/sys/sparc64/pci/ofw_pcib.c
+++ b/sys/sparc64/pci/ofw_pcib.c
@@ -3,6 +3,7 @@
  * Copyright (c) 2000 Michael Smith 
  * Copyright (c) 2000 BSDi
  * Copyright (c) 2001 - 2003 Thomas Moestl 
+ * Copyright (c) 2009 by Marius Strobl 
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -37,8 +38,9 @@ __FBSDID("$FreeBSD$");
 #include "opt_ofw_pci.h"
 
 #include 
-#include 
 #include 
+#include 
+#include 
 #include 
 
 #include 
@@ -82,6 +84,11 @@ static device_method_t ofw_pcib_methods[] = {
 	DEVMETHOD(pcib_read_config,	pcib_read_config),
 	DEVMETHOD(pcib_write_config,	pcib_write_config),
 	DEVMETHOD(pcib_route_interrupt,	ofw_pcib_gen_route_interrupt),
+	DEVMETHOD(pcib_alloc_msi,	pcib_alloc_msi),
+	DEVMETHOD(pcib_release_msi,	pcib_release_msi),
+	DEVMETHOD(pcib_alloc_msix,	pcib_alloc_msix),
+	DEVMETHOD(pcib_release_msix,	pcib_release_msix),
+	DEVMETHOD(pcib_map_msi,		pcib_map_msi),
 
 	/* ofw_bus interface */
 	DEVMETHOD(ofw_bus_get_node,	ofw_pcib_gen_get_node),
@@ -93,24 +100,56 @@ static devclass_t pcib_devclass;
 
 DEFINE_CLASS_0(pcib, ofw_pcib_driver, ofw_pcib_methods,
     sizeof(struct ofw_pcib_gen_softc));
-DRIVER_MODULE(ofw_pcib, pci, ofw_pcib_driver, pcib_devclass, 0, 0);
+EARLY_DRIVER_MODULE(ofw_pcib, pci, ofw_pcib_driver, pcib_devclass, 0, 0,
+    BUS_PASS_BUS);
+MODULE_DEPEND(ofw_pcib, pci, 1, 1, 1);
 
 static int
 ofw_pcib_probe(device_t dev)
 {
+	char desc[sizeof("OFW PCIe-PCIe bridge")];
+	const char *dtype, *pbdtype;
+
+#define	ISDTYPE(dtype, type)						\
+	(((dtype) != NULL) && strcmp((dtype), (type)) == 0)
 
 	if ((pci_get_class(dev) == PCIC_BRIDGE) &&
 	    (pci_get_subclass(dev) == PCIS_BRIDGE_PCI) &&
 	    ofw_bus_get_node(dev) != 0) {
-		device_set_desc(dev, "OFW PCI-PCI bridge");
+		dtype = ofw_bus_get_type(dev);
+		pbdtype = ofw_bus_get_type(device_get_parent(
+		    device_get_parent(dev)));
+		snprintf(desc, sizeof(desc), "OFW PCI%s-PCI%s bridge",
+		    ISDTYPE(pbdtype, OFW_TYPE_PCIE) ? "e" : "",
+		    ISDTYPE(dtype, OFW_TYPE_PCIE) ? "e" : "");
+		device_set_desc_copy(dev, desc);
 		return (0);
 	}
+
+#undef ISDTYPE
+
 	return (ENXIO);
 }
 
 static int
 ofw_pcib_attach(device_t dev)
 {
+	struct ofw_pcib_gen_softc *sc;
+
+	sc = device_get_softc(dev);
+
+	/* Quirk handling */
+	switch (pci_get_devid(dev)) {
+	/*
+	 * The ALi M5249 found in Fire-based machines by definition must me
+	 * subtractive as they have a ISA bridge on their secondary side but
+	 * don't indicate this in the class code although the ISA I/O range
+	 * isn't included in their bridge decode.
+	 */
+	case 0x524910b9:
+		sc->ops_pcib_sc.flags |= PCIB_SUBTRACTIVE;
+		break;
+	}
 
 	ofw_pcib_gen_setup(dev);
 	pcib_attach_common(dev);
diff --git a/sys/sparc64/pci/ofw_pcibus.c b/sys/sparc64/pci/ofw_pcibus.c
index bd2c7a65888..a0a447bbf0c 100644
--- a/sys/sparc64/pci/ofw_pcibus.c
+++ b/sys/sparc64/pci/ofw_pcibus.c
@@ -3,6 +3,7 @@
  * Copyright (c) 2000, Michael Smith 
  * Copyright (c) 2000, BSDi
  * Copyright (c) 2003, Thomas Moestl 
+ * Copyright (c) 2005 - 2009 Marius Strobl 
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -64,11 +65,11 @@ static void ofw_pcibus_setup_device(device_t bridge, uint32_t clock,
     u_int busno, u_int slot, u_int func);
 
 /* Methods */
-static device_probe_t ofw_pcibus_probe;
-static device_attach_t ofw_pcibus_attach;
-static pci_assign_interrupt_t ofw_pcibus_assign_interrupt;
-static ofw_bus_get_devinfo_t ofw_pcibus_get_devinfo;
 static bus_child_pnpinfo_str_t ofw_pcibus_pnpinfo_str;
+static device_attach_t ofw_pcibus_attach;
+static device_probe_t ofw_pcibus_probe;
+static ofw_bus_get_devinfo_t ofw_pcibus_get_devinfo;
+static pci_assign_interrupt_t ofw_pcibus_assign_interrupt;
 
 static device_method_t ofw_pcibus_methods[] = {
 	/* Device interface */
@@ -101,7 +102,8 @@ static devclass_t pci_devclass;
 
 DEFINE_CLASS_1(pci, ofw_pcibus_driver, ofw_pcibus_methods, 1 /* no softc */,
     pci_driver);
-DRIVER_MODULE(ofw_pcibus, pcib, ofw_pcibus_driver, pci_devclass, 0, 0);
+EARLY_DRIVER_MODULE(ofw_pcibus, pcib, ofw_pcibus_driver, pci_devclass, 0, 0,
+    BUS_PASS_BUS);
 MODULE_VERSION(ofw_pcibus, 1);
 MODULE_DEPEND(ofw_pcibus, pci, 1, 1, 1);
 
@@ -123,6 +125,11 @@ static void
 ofw_pcibus_setup_device(device_t bridge, uint32_t clock, u_int busno,
     u_int slot, u_int func)
 {
+#define	CS_READ(n, w)							\
+	PCIB_READ_CONFIG(bridge, busno, slot, func, (n), (w))
+#define	CS_WRITE(n, v, w)						\
+	PCIB_WRITE_CONFIG(bridge, busno, slot, func, (n), (v), (w))
+
 #ifndef SUN4V
 	uint32_t reg;
 
@@ -137,33 +144,27 @@ ofw_pcibus_setup_device(device_t bridge, uint32_t clock, u_int busno,
 	 * For bridges, we additionally set up the bridge control and the
 	 * secondary latency registers.
 	 */
-	if ((PCIB_READ_CONFIG(bridge, busno, slot, func, PCIR_HDRTYPE, 1) &
-	    PCIM_HDRTYPE) == PCIM_HDRTYPE_BRIDGE) {
-		reg = PCIB_READ_CONFIG(bridge, busno, slot, func,
-		    PCIR_BRIDGECTL_1, 1);
+	if ((CS_READ(PCIR_HDRTYPE, 1) & PCIM_HDRTYPE) ==
+	    PCIM_HDRTYPE_BRIDGE) {
+		reg = CS_READ(PCIR_BRIDGECTL_1, 1);
 		reg |= PCIB_BCR_MASTER_ABORT_MODE | PCIB_BCR_SERR_ENABLE |
 		    PCIB_BCR_PERR_ENABLE;
 #ifdef OFW_PCI_DEBUG
 		device_printf(bridge,
 		    "bridge %d/%d/%d: control 0x%x -> 0x%x\n",
-		    busno, slot, func, PCIB_READ_CONFIG(bridge, busno, slot,
-		    func, PCIR_BRIDGECTL_1, 1), reg);
+		    busno, slot, func, CS_READ(PCIR_BRIDGECTL_1, 1), reg);
 #endif /* OFW_PCI_DEBUG */
-		PCIB_WRITE_CONFIG(bridge, busno, slot, func, PCIR_BRIDGECTL_1,
-		    reg, 1);
+		CS_WRITE(PCIR_BRIDGECTL_1, reg, 1);
 
 		reg = OFW_PCI_LATENCY;
 #ifdef OFW_PCI_DEBUG
 		device_printf(bridge,
 		    "bridge %d/%d/%d: latency timer %d -> %d\n",
-		    busno, slot, func, PCIB_READ_CONFIG(bridge, busno, slot,
-		    func, PCIR_SECLAT_1, 1), reg);
+		    busno, slot, func, CS_READ(PCIR_SECLAT_1, 1), reg);
 #endif /* OFW_PCI_DEBUG */
-		PCIB_WRITE_CONFIG(bridge, busno, slot, func, PCIR_SECLAT_1,
-		    reg, 1);
+		CS_WRITE(PCIR_SECLAT_1, reg, 1);
 	} else {
-		reg = PCIB_READ_CONFIG(bridge, busno, slot, func,
-		    PCIR_MINGNT, 1);
+		reg = CS_READ(PCIR_MINGNT, 1);
 		if (reg != 0) {
 			switch (clock) {
 			case 33000000:
@@ -179,10 +180,9 @@ ofw_pcibus_setup_device(device_t bridge, uint32_t clock, u_int busno,
 	}
 #ifdef OFW_PCI_DEBUG
 	device_printf(bridge, "device %d/%d/%d: latency timer %d -> %d\n",
-	    busno, slot, func, PCIB_READ_CONFIG(bridge, busno, slot, func,
-	    PCIR_LATTIMER, 1), reg);
+	    busno, slot, func, CS_READ(PCIR_LATTIMER, 1), reg);
 #endif /* OFW_PCI_DEBUG */
-	PCIB_WRITE_CONFIG(bridge, busno, slot, func, PCIR_LATTIMER, reg, 1);
+	CS_WRITE(PCIR_LATTIMER, reg, 1);
 
 	/*
 	 * Compute a value to write into the cache line size register.
@@ -191,17 +191,34 @@ ofw_pcibus_setup_device(device_t bridge, uint32_t clock, u_int busno,
 	 * reached.  Generally, the cache line size is fixed at 64 bytes
 	 * by Fireplane/Safari, JBus and UPA.
 	 */
-	PCIB_WRITE_CONFIG(bridge, busno, slot, func, PCIR_CACHELNSZ,
-	    STRBUF_LINESZ / sizeof(uint32_t), 1);
+	CS_WRITE(PCIR_CACHELNSZ, STRBUF_LINESZ / sizeof(uint32_t), 1);
 #endif
 
+	/*
+	 * Ensure that ALi M5229 report the actual content of PCIR_PROGIF
+	 * and that IDE I/O is force enabled.  The former is done in order
+	 * to have unique behavior across revisions as some default to
+	 * hiding bits 4-6 for compliance with PCI 2.3.  The latter is done
+	 * as at least revision 0xc8 requires the PCIM_CMD_PORTEN bypass
+	 * to be always enabled as otherwise even enabling PCIM_CMD_PORTEN
+	 * results in an instant data access trap on Fire-based machines.
+	 * Thus these quirks have to be handled before pci(4) adds the maps.
+	 * Note that for older revisions bit 0 of register 0x50 enables the
+	 * internal IDE function instead of force enabling IDE I/O.
+	 */
+	if ((CS_READ(PCIR_VENDOR, 2) == 0x10b9 &&
+	    CS_READ(PCIR_DEVICE, 2) == 0x5229))
+		CS_WRITE(0x50, CS_READ(0x50, 1) | 0x3, 1);
+
 	/*
 	 * The preset in the intline register is usually wrong.  Reset
 	 * it to 255, so that the PCI code will reroute the interrupt if
 	 * needed.
 	 */
-	PCIB_WRITE_CONFIG(bridge, busno, slot, func, PCIR_INTLINE,
-	    PCI_INVALID_IRQ, 1);
+	CS_WRITE(PCIR_INTLINE, PCI_INVALID_IRQ, 1);
+
+#undef CS_READ
+#undef CS_WRITE
 }
 
 static int
@@ -222,9 +239,14 @@ ofw_pcibus_attach(device_t dev)
 		    domain, busno);
 	node = ofw_bus_get_node(dev);
 
-#ifndef SUN4V
-	/* Add the PCI side of the HOST-PCI bridge itself to the bus. */
+	/*
+	 * Add the PCI side of the host-PCI bridge itself to the bus.
+	 * Note that we exclude the host-PCIe bridges here as these
+	 * have no configuration space implemented themselves.
+	 */
 	if (strcmp(device_get_name(device_get_parent(pcib)), "nexus") == 0 &&
+	    ofw_bus_get_type(pcib) != NULL &&
+	    strcmp(ofw_bus_get_type(pcib), OFW_TYPE_PCIE) != 0 &&
 	    (dinfo = (struct ofw_pcibus_devinfo *)pci_read_device(pcib,
 	    domain, busno, 0, 0, sizeof(*dinfo))) != NULL) {
 		if (ofw_bus_gen_setup_devinfo(&dinfo->opd_obdinfo, node) != 0)
@@ -232,7 +254,6 @@ ofw_pcibus_attach(device_t dev)
 		else
 			pci_add_child(dev, (struct pci_devinfo *)dinfo);
 	}
-#endif
 
 	if (OF_getprop(ofw_bus_get_node(pcib), "clock-frequency", &clock,
 	    sizeof(clock)) == -1)
diff --git a/sys/sparc64/pci/psycho.c b/sys/sparc64/pci/psycho.c
index 8034612fd4c..486136a4600 100644
--- a/sys/sparc64/pci/psycho.c
+++ b/sys/sparc64/pci/psycho.c
@@ -115,6 +115,7 @@ static bus_alloc_resource_t psycho_alloc_resource;
 static bus_activate_resource_t psycho_activate_resource;
 static bus_deactivate_resource_t psycho_deactivate_resource;
 static bus_release_resource_t psycho_release_resource;
+static bus_describe_intr_t psycho_describe_intr;
 static bus_get_dma_tag_t psycho_get_dma_tag;
 static pcib_maxslots_t psycho_maxslots;
 static pcib_read_config_t psycho_read_config;
@@ -139,6 +140,7 @@ static device_method_t psycho_methods[] = {
 	DEVMETHOD(bus_activate_resource,	psycho_activate_resource),
 	DEVMETHOD(bus_deactivate_resource,	psycho_deactivate_resource),
 	DEVMETHOD(bus_release_resource,	psycho_release_resource),
+	DEVMETHOD(bus_describe_intr,	psycho_describe_intr),
 	DEVMETHOD(bus_get_dma_tag,	psycho_get_dma_tag),
 
 	/* pcib interface */
@@ -181,9 +183,9 @@ struct psycho_dma_sync {
 	void			*pds_arg;	/* argument for the handler */
 	void			*pds_cookie;	/* parent bus int. cookie */
 	device_t		pds_ppb;	/* farest PCI-PCI bridge */
-	uint8_t			pds_bus;	/* bus of farest PCI device */
-	uint8_t			pds_slot;	/* slot of farest PCI device */
-	uint8_t			pds_func;	/* func. of farest PCI device */
+	uint8_t			pds_bus;	/* bus of farest PCI dev. */
+	uint8_t			pds_slot;	/* slot of farest PCI dev. */
+	uint8_t			pds_func;	/* func. of farest PCI dev. */
 };
 
 #define	PSYCHO_READ8(sc, off) \
@@ -205,8 +207,8 @@ struct psycho_dma_sync {
  * "Hummingbird" is the UltraSPARC IIe onboard UPA to PCI bridge. It's
  * basically the same as Sabre but without an APB underneath it.
  *
- * "Psycho" and "Psycho+" are dual UPA to PCI bridges.  They sit on the UPA bus
- * and manage two PCI buses.  "Psycho" has two 64-bit 33MHz buses, while
+ * "Psycho" and "Psycho+" are dual UPA to PCI bridges.  They sit on the UPA
+ * bus and manage two PCI buses.  "Psycho" has two 64-bit 33MHz buses, while
  * "Psycho+" controls both a 64-bit 33Mhz and a 64-bit 66Mhz PCI bus.  You
  * will usually find a "Psycho+" since I don't think the original "Psycho"
  * ever shipped, and if it did it would be in the U30.
@@ -263,7 +265,8 @@ psycho_get_desc(device_t dev)
 
 	rv = psycho_find_desc(psycho_models, ofw_bus_get_model(dev));
 	if (rv == NULL)
-		rv = psycho_find_desc(psycho_compats, ofw_bus_get_compat(dev));
+		rv = psycho_find_desc(psycho_compats,
+		    ofw_bus_get_compat(dev));
 	return (rv);
 }
 
@@ -295,7 +298,7 @@ psycho_attach(device_t dev)
 	uint32_t dvmabase, prop, prop_array[2];
 	int32_t rev;
 	u_int rerun, ver;
-	int i, n;
+	int i, j;
 
 	node = ofw_bus_get_node(dev);
 	sc = device_get_softc(dev);
@@ -461,12 +464,12 @@ psycho_attach(device_t dev)
 	    rman_manage_region(&sc->sc_pci_mem_rman, 0, PSYCHO_MEM_SIZE) != 0)
 		panic("%s: failed to set up memory rman", __func__);
 
-	n = OF_getprop_alloc(node, "ranges", sizeof(*range), (void **)&range);
+	i = OF_getprop_alloc(node, "ranges", sizeof(*range), (void **)&range);
 	/*
 	 * Make sure that the expected ranges are present.  The
 	 * OFW_PCI_CS_MEM64 one is not currently used though.
 	 */
-	if (n != PSYCHO_NRANGE)
+	if (i != PSYCHO_NRANGE)
 		panic("%s: unsupported number of ranges", __func__);
 	/*
 	 * Find the addresses of the various bus spaces.
@@ -474,11 +477,12 @@ psycho_attach(device_t dev)
 	 * The physical start addresses of the ranges are the configuration,
 	 * memory and I/O handles.
 	 */
-	for (n = 0; n < PSYCHO_NRANGE; n++) {
-		i = OFW_PCI_RANGE_CS(&range[n]);
-		if (sc->sc_pci_bh[i] != 0)
-			panic("%s: duplicate range for space %d", __func__, i);
-		sc->sc_pci_bh[i] = OFW_PCI_RANGE_PHYS(&range[n]);
+	for (i = 0; i < PSYCHO_NRANGE; i++) {
+		j = OFW_PCI_RANGE_CS(&range[i]);
+		if (sc->sc_pci_bh[j] != 0)
+			panic("%s: duplicate range for space %d",
+			    __func__, j);
+		sc->sc_pci_bh[j] = OFW_PCI_RANGE_PHYS(&range[i]);
 	}
 	free(range, M_OFWPROP);
 
@@ -496,8 +500,8 @@ psycho_attach(device_t dev)
 		 * vectors.  We do this early in order to be able to catch
 		 * stray interrupts.
 		 */
-		for (n = 0; n <= PSYCHO_MAX_INO; n++) {
-			if (psycho_find_intrmap(sc, n, &intrmap, &intrclr,
+		for (i = 0; i <= PSYCHO_MAX_INO; i++) {
+			if (psycho_find_intrmap(sc, i, &intrmap, &intrclr,
 			    NULL) == 0)
 				continue;
 			pica = malloc(sizeof(*pica), M_DEVBUF, M_NOWAIT);
@@ -515,21 +519,21 @@ psycho_attach(device_t dev)
 			 */
 			device_printf(dev,
 			    "intr map (INO %d, %s) %#lx: %#lx, clr: %#lx\n",
-			    n, intrmap <= PSR_PCIB3_INT_MAP ? "PCI" : "OBIO",
-			    (u_long)intrmap, (u_long)PSYCHO_READ8(sc, intrmap),
-			    (u_long)intrclr);
-			PSYCHO_WRITE8(sc, intrmap, INTMAP_VEC(sc->sc_ign, n));
+			    i, intrmap <= PSR_PCIB3_INT_MAP ? "PCI" : "OBIO",
+			    (u_long)intrmap, (u_long)PSYCHO_READ8(sc,
+			    intrmap), (u_long)intrclr);
+			PSYCHO_WRITE8(sc, intrmap, INTMAP_VEC(sc->sc_ign, i));
 			PSYCHO_WRITE8(sc, intrclr, 0);
 			PSYCHO_WRITE8(sc, intrmap,
-			    INTMAP_ENABLE(INTMAP_VEC(sc->sc_ign, n),
+			    INTMAP_ENABLE(INTMAP_VEC(sc->sc_ign, i),
 			    PCPU_GET(mid)));
 #endif
-			i = intr_controller_register(INTMAP_VEC(sc->sc_ign, n),
-			    &psycho_ic, pica);
-			if (i != 0)
+			j = intr_controller_register(INTMAP_VEC(sc->sc_ign,
+			    i), &psycho_ic, pica);
+			if (j != 0)
 				device_printf(dev, "could not register "
 				    "interrupt controller for INO %d (%d)\n",
-				    n, i);
+				    i, j);
 		}
 
 		if (sc->sc_mode == PSYCHO_MODE_PSYCHO)
@@ -552,6 +556,7 @@ psycho_attach(device_t dev)
 		    M_NOWAIT | M_ZERO);
 		if (sc->sc_is == NULL)
 			panic("%s: malloc iommu_state failed", __func__);
+		sc->sc_is->is_flags = IOMMU_PRESERVE_PROM;
 		if (sc->sc_mode == PSYCHO_MODE_SABRE)
 			sc->sc_is->is_pmaxaddr =
 			    IOMMU_MAXADDR(SABRE_IOMMU_BITS);
@@ -583,16 +588,17 @@ psycho_attach(device_t dev)
 	sc->sc_pci_dmat->dt_cookie = sc->sc_is;
 	sc->sc_pci_dmat->dt_mt = &iommu_dma_methods;
 
-	n = OF_getprop(node, "bus-range", (void *)prop_array,
+	i = OF_getprop(node, "bus-range", (void *)prop_array,
 	    sizeof(prop_array));
-	if (n == -1)
+	if (i == -1)
 		panic("%s: could not get bus-range", __func__);
-	if (n != sizeof(prop_array))
-		panic("%s: broken bus-range (%d)", __func__, n);
+	if (i != sizeof(prop_array))
+		panic("%s: broken bus-range (%d)", __func__, i);
+	sc->sc_pci_secbus = prop_array[0];
+	sc->sc_pci_subbus = prop_array[1];
 	if (bootverbose)
 		device_printf(dev, "bus range %u to %u; PCI bus %d\n",
-		    prop_array[0], prop_array[1], prop_array[0]);
-	sc->sc_pci_secbus = prop_array[0];
+		    sc->sc_pci_secbus, sc->sc_pci_subbus, sc->sc_pci_secbus);
 
 	/* Clear any pending PCI error bits. */
 	PCIB_WRITE_CONFIG(dev, sc->sc_pci_secbus, PCS_DEVICE, PCS_FUNC,
@@ -657,15 +663,15 @@ psycho_attach(device_t dev)
 	PCIB_WRITE_CONFIG(dev, sc->sc_pci_secbus, PCS_DEVICE, PCS_FUNC,
 	    PCIR_LATTIMER, OFW_PCI_LATENCY, 1);
 
-	for (n = PCIR_VENDOR; n < PCIR_STATUS; n += sizeof(uint16_t))
-		le16enc(&sc->sc_pci_hpbcfg[n], bus_space_read_2(
+	for (i = PCIR_VENDOR; i < PCIR_STATUS; i += sizeof(uint16_t))
+		le16enc(&sc->sc_pci_hpbcfg[i], bus_space_read_2(
 		    sc->sc_pci_cfgt, sc->sc_pci_bh[OFW_PCI_CS_CONFIG],
 		    PSYCHO_CONF_OFF(sc->sc_pci_secbus, PCS_DEVICE,
-		    PCS_FUNC, n)));
-	for (n = PCIR_REVID; n <= PCIR_BIST; n += sizeof(uint8_t))
-		sc->sc_pci_hpbcfg[n] = bus_space_read_1(sc->sc_pci_cfgt,
+		    PCS_FUNC, i)));
+	for (i = PCIR_REVID; i <= PCIR_BIST; i += sizeof(uint8_t))
+		sc->sc_pci_hpbcfg[i] = bus_space_read_1(sc->sc_pci_cfgt,
 		    sc->sc_pci_bh[OFW_PCI_CS_CONFIG], PSYCHO_CONF_OFF(
-		    sc->sc_pci_secbus, PCS_DEVICE, PCS_FUNC, n));
+		    sc->sc_pci_secbus, PCS_DEVICE, PCS_FUNC, i));
 
 	ofw_bus_setup_iinfo(node, &sc->sc_pci_iinfo, sizeof(ofw_pci_intr_t));
 	/*
@@ -694,8 +700,8 @@ psycho_set_intr(struct psycho_softc *sc, u_int index, bus_addr_t intrmap,
 	int rid;
 
 	rid = index;
-	sc->sc_irq_res[index] = bus_alloc_resource_any(sc->sc_dev, SYS_RES_IRQ,
-	    &rid, RF_ACTIVE);
+	sc->sc_irq_res[index] = bus_alloc_resource_any(sc->sc_dev,
+	    SYS_RES_IRQ, &rid, RF_ACTIVE);
 	if (sc->sc_irq_res[index] == NULL && intrmap >= PSR_POWER_INT_MAP) {
 		/*
 		 * These interrupts aren't mandatory and not available
@@ -704,7 +710,8 @@ psycho_set_intr(struct psycho_softc *sc, u_int index, bus_addr_t intrmap,
 		return;
 	}
 	if (sc->sc_irq_res[index] == NULL ||
-	    INTIGN(vec = rman_get_start(sc->sc_irq_res[index])) != sc->sc_ign ||
+	    INTIGN(vec = rman_get_start(sc->sc_irq_res[index])) !=
+	    sc->sc_ign ||
 	    INTVEC(PSYCHO_READ8(sc, intrmap)) != vec ||
 	    intr_vectors[vec].iv_ic != &psycho_ic ||
 	    bus_setup_intr(sc->sc_dev, sc->sc_irq_res[index],
@@ -714,8 +721,8 @@ psycho_set_intr(struct psycho_softc *sc, u_int index, bus_addr_t intrmap,
 }
 
 static int
-psycho_find_intrmap(struct psycho_softc *sc, u_int ino, bus_addr_t *intrmapptr,
-    bus_addr_t *intrclrptr, bus_addr_t *intrdiagptr)
+psycho_find_intrmap(struct psycho_softc *sc, u_int ino,
+    bus_addr_t *intrmapptr, bus_addr_t *intrclrptr, bus_addr_t *intrdiagptr)
 {
 	bus_addr_t intrclr, intrmap;
 	uint64_t diag;
@@ -875,7 +882,7 @@ psycho_wakeup(void *arg)
 {
 	struct psycho_softc *sc = arg;
 
-	/* Gee, we don't really have a framework to deal with this properly. */
+	/* We don't really have a framework to deal with this properly. */
 	device_printf(sc->sc_dev, "power management wakeup\n");
 	return (FILTER_HANDLED);
 }
@@ -920,6 +927,10 @@ psycho_read_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg,
 	int i;
 
 	sc = device_get_softc(dev);
+	if (bus < sc->sc_pci_secbus || bus > sc->sc_pci_subbus ||
+	    slot > PCI_SLOTMAX || func > PCI_FUNCMAX || reg > PCI_REGMAX)
+		return (-1);
+
 	bh = sc->sc_pci_bh[OFW_PCI_CS_CONFIG];
 
 	/*
@@ -992,14 +1003,18 @@ psycho_read_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg,
 }
 
 static void
-psycho_write_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg,
-    uint32_t val, int width)
+psycho_write_config(device_t dev, u_int bus, u_int slot, u_int func,
+    u_int reg, uint32_t val, int width)
 {
 	struct psycho_softc *sc;
 	bus_space_handle_t bh;
 	u_long offset = 0;
 
 	sc = device_get_softc(dev);
+	if (bus < sc->sc_pci_secbus || bus > sc->sc_pci_subbus ||
+	    slot > PCI_SLOTMAX || func > PCI_FUNCMAX || reg > PCI_REGMAX)
+		return;
+
 	offset = PSYCHO_CONF_OFF(bus, slot, func, reg);
 	bh = sc->sc_pci_bh[OFW_PCI_CS_CONFIG];
 	switch (width) {
@@ -1029,8 +1044,9 @@ psycho_route_interrupt(device_t bridge, device_t dev, int pin)
 
 	sc = device_get_softc(bridge);
 	pintr = pin;
-	if (ofw_bus_lookup_imap(ofw_bus_get_node(dev), &sc->sc_pci_iinfo, ®,
-	    sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr), maskbuf))
+	if (ofw_bus_lookup_imap(ofw_bus_get_node(dev), &sc->sc_pci_iinfo,
+	    ®, sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr),
+	    maskbuf))
 		return (mintr);
 	/*
 	 * If this is outside of the range for an intpin, it's likely a full
@@ -1052,7 +1068,8 @@ psycho_route_interrupt(device_t bridge, device_t dev, int pin)
 	intrmap = PSR_PCIA0_INT_MAP +
 	    8 * (pci_get_slot(dev) - 1 + 3 * sc->sc_half);
 	mintr = INTINO(PSYCHO_READ8(sc, intrmap)) + pin - 1;
-	device_printf(bridge, "guessing interrupt %d for device %d.%d pin %d\n",
+	device_printf(bridge,
+	    "guessing interrupt %d for device %d.%d pin %d\n",
 	    (int)mintr, pci_get_slot(dev), pci_get_function(dev), pin);
 	return (mintr);
 }
@@ -1246,6 +1263,18 @@ psycho_teardown_intr(device_t dev, device_t child, struct resource *vec,
 	return (bus_generic_teardown_intr(dev, child, vec, cookie));
 }
 
+static int
+psycho_describe_intr(device_t dev, device_t child, struct resource *vec,
+    void *cookie, const char *descr)
+{
+	struct psycho_softc *sc;
+
+	sc = device_get_softc(dev);
+	if (sc->sc_mode == PSYCHO_MODE_SABRE)
+		cookie = ((struct psycho_dma_sync *)cookie)->pds_cookie;
+	return (bus_generic_describe_intr(dev, child, vec, cookie, descr));
+}
+
 static struct resource *
 psycho_alloc_resource(device_t bus, device_t child, int type, int *rid,
     u_long start, u_long end, u_long count, u_int flags)
@@ -1271,8 +1300,8 @@ psycho_alloc_resource(device_t bus, device_t child, int type, int *rid,
 		if (start != end)
 			panic("%s: XXX: interrupt range", __func__);
 		start = end = INTMAP_VEC(sc->sc_ign, end);
-		return (BUS_ALLOC_RESOURCE(device_get_parent(bus), child, type,
-		    rid, start, end, count, flags));
+		return (BUS_ALLOC_RESOURCE(device_get_parent(bus), child,
+		    type, rid, start, end, count, flags));
 	}
 	switch (type) {
 	case SYS_RES_MEMORY:
@@ -1387,7 +1416,8 @@ psycho_alloc_bus_tag(struct psycho_softc *sc, int type)
 {
 	bus_space_tag_t bt;
 
-	bt = malloc(sizeof(struct bus_space_tag), M_DEVBUF, M_NOWAIT | M_ZERO);
+	bt = malloc(sizeof(struct bus_space_tag), M_DEVBUF,
+	    M_NOWAIT | M_ZERO);
 	if (bt == NULL)
 		panic("%s: out of memory", __func__);
 
diff --git a/sys/sparc64/pci/psychovar.h b/sys/sparc64/pci/psychovar.h
index 04d81adf731..e7c6980bba5 100644
--- a/sys/sparc64/pci/psychovar.h
+++ b/sys/sparc64/pci/psychovar.h
@@ -75,6 +75,7 @@ struct psycho_softc {
 	struct rman			sc_pci_io_rman;
 
 	uint8_t				sc_pci_secbus;
+	uint8_t				sc_pci_subbus;
 
 	uint8_t				sc_pci_hpbcfg[16];
 
diff --git a/sys/sparc64/pci/schizo.c b/sys/sparc64/pci/schizo.c
index 4685a611315..f783b23f1c4 100644
--- a/sys/sparc64/pci/schizo.c
+++ b/sys/sparc64/pci/schizo.c
@@ -113,6 +113,7 @@ static bus_alloc_resource_t schizo_alloc_resource;
 static bus_activate_resource_t schizo_activate_resource;
 static bus_deactivate_resource_t schizo_deactivate_resource;
 static bus_release_resource_t schizo_release_resource;
+static bus_describe_intr_t schizo_describe_intr;
 static bus_get_dma_tag_t schizo_get_dma_tag;
 static pcib_maxslots_t schizo_maxslots;
 static pcib_read_config_t schizo_read_config;
@@ -137,6 +138,7 @@ static device_method_t schizo_methods[] = {
 	DEVMETHOD(bus_activate_resource,	schizo_activate_resource),
 	DEVMETHOD(bus_deactivate_resource,	schizo_deactivate_resource),
 	DEVMETHOD(bus_release_resource,	schizo_release_resource),
+	DEVMETHOD(bus_describe_intr,	schizo_describe_intr),
 	DEVMETHOD(bus_get_dma_tag,	schizo_get_dma_tag),
 
 	/* pcib interface */
@@ -180,9 +182,9 @@ struct schizo_dma_sync {
 	void			*sds_cookie;
 	uint64_t		sds_syncval;
 	device_t		sds_ppb;	/* farest PCI-PCI bridge */
-	uint8_t			sds_bus;	/* bus of farest PCI device */
-	uint8_t			sds_slot;	/* slot of farest PCI device */
-	uint8_t			sds_func;	/* func. of farest PCI device */
+	uint8_t			sds_bus;	/* bus of farest PCI dev. */
+	uint8_t			sds_slot;	/* slot of farest PCI dev. */
+	uint8_t			sds_func;	/* func. of farest PCI dev. */
 };
 
 #define	SCHIZO_PERF_CNT_QLTY	100
@@ -260,7 +262,7 @@ schizo_attach(device_t dev)
 	uint64_t ino_bitmap, reg;
 	phandle_t node;
 	uint32_t prop, prop_array[2];
-	int i, mode, n, nrange, rid, tsbsize;
+	int i, j, mode, rid, tsbsize;
 
 	sc = device_get_softc(dev);
 	node = ofw_bus_get_node(dev);
@@ -289,18 +291,18 @@ schizo_attach(device_t dev)
 	 */
 	sc->sc_half = (bus_get_resource_start(dev, SYS_RES_MEMORY, STX_PCI) >>
 	    20) & 1;
-	for (n = 0; n < (mode == SCHIZO_MODE_SCZ ? SCZ_NREG : TOM_NREG);
-	    n++) {
-		rid = n;
-		sc->sc_mem_res[n] = bus_alloc_resource_any(dev,
+	for (i = 0; i < (mode == SCHIZO_MODE_SCZ ? SCZ_NREG : TOM_NREG);
+	    i++) {
+		rid = i;
+		sc->sc_mem_res[i] = bus_alloc_resource_any(dev,
 		    SYS_RES_MEMORY, &rid,
 		    (((mode == SCHIZO_MODE_SCZ && ((sc->sc_half == 1 &&
-		    n == STX_PCI) || n == STX_CTRL)) ||
+		    i == STX_PCI) || i == STX_CTRL)) ||
 		    (mode == SCHIZO_MODE_TOM && sc->sc_half == 0 &&
-		    n == STX_CTRL)) ? RF_SHAREABLE : 0) | RF_ACTIVE);
-		if (sc->sc_mem_res[n] == NULL)
+		    i == STX_CTRL)) ? RF_SHAREABLE : 0) | RF_ACTIVE);
+		if (sc->sc_mem_res[i] == NULL)
 			panic("%s: could not allocate register bank %d",
-			    __func__, n);
+			    __func__, i);
 	}
 
 	/*
@@ -333,7 +335,8 @@ schizo_attach(device_t dev)
 
 	if (OF_getprop(node, "portid", &sc->sc_ign, sizeof(sc->sc_ign)) == -1)
 		panic("%s: could not determine IGN", __func__);
-	if (OF_getprop(node, "version#", &sc->sc_ver, sizeof(sc->sc_ver)) == -1)
+	if (OF_getprop(node, "version#", &sc->sc_ver, sizeof(sc->sc_ver)) ==
+	    -1)
 		panic("%s: could not determine version", __func__);
 	if (OF_getprop(node, "clock-frequency", &prop, sizeof(prop)) == -1)
 		prop = 33000000;
@@ -397,21 +400,21 @@ schizo_attach(device_t dev)
 	 * This is complicated by the fact that a pair of Schizo PBMs
 	 * shares one IGN.
 	 */
-	n = OF_getprop(node, "ino-bitmap", (void *)prop_array,
+	i = OF_getprop(node, "ino-bitmap", (void *)prop_array,
 	    sizeof(prop_array));
-	if (n == -1)
+	if (i == -1)
 		panic("%s: could not get ino-bitmap", __func__);
 	ino_bitmap = ((uint64_t)prop_array[1] << 32) | prop_array[0];
-	for (n = 0; n <= STX_MAX_INO; n++) {
-		if ((ino_bitmap & (1ULL << n)) == 0)
+	for (i = 0; i <= STX_MAX_INO; i++) {
+		if ((ino_bitmap & (1ULL << i)) == 0)
 			continue;
-		if (n == STX_FB0_INO || n == STX_FB1_INO)
+		if (i == STX_FB0_INO || i == STX_FB1_INO)
 			/* Leave for upa(4). */
 			continue;
-		i = schizo_intr_register(sc, n);
-		if (i != 0)
+		j = schizo_intr_register(sc, i);
+		if (j != 0)
 			device_printf(dev, "could not register interrupt "
-			    "controller for INO %d (%d)\n", n, i);
+			    "controller for INO %d (%d)\n", i, j);
 	}
 
 	/*
@@ -453,6 +456,7 @@ schizo_attach(device_t dev)
 	 * buffer, in Schizo version < 5 (i.e. revision < 2.3) it's
 	 * affected by several errata and basically unusable though.
 	 */
+	sc->sc_is.is_flags = IOMMU_PRESERVE_PROM;
 	sc->sc_is.is_pmaxaddr = IOMMU_MAXADDR(STX_IOMMU_BITS);
 	sc->sc_is.is_sb[0] = sc->sc_is.is_sb[1] = 0;
 	if (OF_getproplen(node, "no-streaming-cache") < 0 &&
@@ -464,9 +468,9 @@ schizo_attach(device_t dev)
 		tsbsize = (x);						\
 		break;							\
 
-	n = OF_getprop(node, "virtual-dma", (void *)prop_array,
+	i = OF_getprop(node, "virtual-dma", (void *)prop_array,
 	    sizeof(prop_array));
-	if (n == -1 || n != sizeof(prop_array))
+	if (i == -1 || i != sizeof(prop_array))
 		schizo_iommu_init(sc, 7, -1);
 	else {
 		switch (prop_array[1]) {
@@ -500,13 +504,12 @@ schizo_attach(device_t dev)
 	    rman_manage_region(&sc->sc_pci_mem_rman, 0, STX_MEM_SIZE) != 0)
 		panic("%s: failed to set up memory rman", __func__);
 
-	nrange = OF_getprop_alloc(node, "ranges", sizeof(*range),
-	    (void **)&range);
+	i = OF_getprop_alloc(node, "ranges", sizeof(*range), (void **)&range);
 	/*
 	 * Make sure that the expected ranges are present.  The
 	 * OFW_PCI_CS_MEM64 one is not currently used though.
 	 */
-	if (nrange != STX_NRANGE)
+	if (i != STX_NRANGE)
 		panic("%s: unsupported number of ranges", __func__);
 	/*
 	 * Find the addresses of the various bus spaces.
@@ -514,11 +517,12 @@ schizo_attach(device_t dev)
 	 * The physical start addresses of the ranges are the configuration,
 	 * memory and I/O handles.
 	 */
-	for (n = 0; n < STX_NRANGE; n++) {
-		i = OFW_PCI_RANGE_CS(&range[n]);
-		if (sc->sc_pci_bh[i] != 0)
-			panic("%s: duplicate range for space %d", __func__, i);
-		sc->sc_pci_bh[i] = OFW_PCI_RANGE_PHYS(&range[n]);
+	for (i = 0; i < STX_NRANGE; i++) {
+		j = OFW_PCI_RANGE_CS(&range[i]);
+		if (sc->sc_pci_bh[j] != 0)
+			panic("%s: duplicate range for space %d",
+			    __func__, j);
+		sc->sc_pci_bh[j] = OFW_PCI_RANGE_PHYS(&range[i]);
 	}
 	free(range, M_OFWPROP);
 
@@ -541,16 +545,17 @@ schizo_attach(device_t dev)
 	 * Get the bus range from the firmware.
 	 * NB: Tomatillos don't support PCI bus reenumeration.
 	 */
-	n = OF_getprop(node, "bus-range", (void *)prop_array,
+	i = OF_getprop(node, "bus-range", (void *)prop_array,
 	    sizeof(prop_array));
-	if (n == -1)
+	if (i == -1)
 		panic("%s: could not get bus-range", __func__);
-	if (n != sizeof(prop_array))
-		panic("%s: broken bus-range (%d)", __func__, n);
+	if (i != sizeof(prop_array))
+		panic("%s: broken bus-range (%d)", __func__, i);
+	sc->sc_pci_secbus = prop_array[0];
+	sc->sc_pci_subbus = prop_array[1];
 	if (bootverbose)
 		device_printf(dev, "bus range %u to %u; PCI bus %d\n",
-		    prop_array[0], prop_array[1], prop_array[0]);
-	sc->sc_pci_secbus = prop_array[0];
+		    sc->sc_pci_secbus, sc->sc_pci_subbus, sc->sc_pci_secbus);
 
 	/* Clear any pending PCI error bits. */
 	PCIB_WRITE_CONFIG(dev, sc->sc_pci_secbus, STX_CS_DEVICE, STX_CS_FUNC,
@@ -626,31 +631,45 @@ schizo_attach(device_t dev)
 	/*
 	 * According to the Schizo Errata I-13, consistent DMA flushing/
 	 * syncing is FUBAR in version < 5 (i.e. revision < 2.3) bridges,
-	 * so we can't use it and need to live with the consequences.
-	 * With Schizo version >= 5, CDMA flushing/syncing is usable
-	 * but requires the the workaround described in Schizo Errata
-	 * I-23.  With Tomatillo and XMITS, CDMA flushing/syncing works
-	 * as expected, Tomatillo version <= 4 (i.e. revision <= 2.3)
-	 * bridges additionally require a block store after a write to
-	 * TOMXMS_PCI_DMA_SYNC_PEND though.
+	 * so we can't use it and need to live with the consequences.  With
+	 * Schizo version >= 5, CDMA flushing/syncing is usable but requires
+	 * the workaround described in Schizo Errata I-23.  With Tomatillo
+	 * and XMITS, CDMA flushing/syncing works as expected, Tomatillo
+	 * version <= 4 (i.e. revision <= 2.3) bridges additionally require
+	 * a block store after a write to TOMXMS_PCI_DMA_SYNC_PEND though.
 	 */
 	if ((sc->sc_mode == SCHIZO_MODE_SCZ && sc->sc_ver >= 5) ||
-	    sc->sc_mode == SCHIZO_MODE_TOM || sc->sc_mode == SCHIZO_MODE_XMS) {
+	    sc->sc_mode == SCHIZO_MODE_TOM ||
+	    sc->sc_mode == SCHIZO_MODE_XMS) {
 		sc->sc_flags |= SCHIZO_FLAGS_CDMA;
 		if (sc->sc_mode == SCHIZO_MODE_SCZ) {
-			n = STX_CDMA_A_INO + sc->sc_half;
-			if (bus_set_resource(dev, SYS_RES_IRQ, 5,
-			    INTMAP_VEC(sc->sc_ign, n), 1) != 0)
-				panic("%s: failed to add CDMA interrupt",
-				    __func__);
-			i = schizo_intr_register(sc, n);
-			if (i != 0)
-				panic("%s: could not register interrupt "
-				    "controller for CDMA (%d)", __func__, i);
-			(void)schizo_get_intrmap(sc, n, NULL,
-			   &sc->sc_cdma_clr);
 			sc->sc_cdma_state = SCHIZO_CDMA_STATE_DONE;
-			schizo_set_intr(sc, 5, n, schizo_cdma);
+			/*
+			 * Some firmware versions include the CDMA interrupt
+			 * at RID 4 but most don't.  With the latter we add
+			 * it ourselves at the spare RID 5.
+			 */
+			i = INTINO(bus_get_resource_start(dev, SYS_RES_IRQ,
+			    4));
+			if (i == STX_CDMA_A_INO || i == STX_CDMA_B_INO) {
+				(void)schizo_get_intrmap(sc, i, NULL,
+				   &sc->sc_cdma_clr);
+				schizo_set_intr(sc, 4, i, schizo_cdma);
+			} else {
+				i = STX_CDMA_A_INO + sc->sc_half;
+				if (bus_set_resource(dev, SYS_RES_IRQ, 5,
+				    INTMAP_VEC(sc->sc_ign, i), 1) != 0)
+					panic("%s: failed to add CDMA "
+					    "interrupt", __func__);
+				j = schizo_intr_register(sc, i);
+				if (j != 0)
+					panic("%s: could not register "
+					    "interrupt controller for CDMA "
+					    "(%d)", __func__, j);
+				(void)schizo_get_intrmap(sc, i, NULL,
+				   &sc->sc_cdma_clr);
+				schizo_set_intr(sc, 5, i, schizo_cdma);
+			}
 		}
 		if (sc->sc_mode == SCHIZO_MODE_TOM && sc->sc_ver <= 4)
 			sc->sc_flags |= SCHIZO_FLAGS_BSWAR;
@@ -677,11 +696,11 @@ schizo_set_intr(struct schizo_softc *sc, u_int index, u_int ino,
 	int rid;
 
 	rid = index;
-	sc->sc_irq_res[index] = bus_alloc_resource_any(sc->sc_dev, SYS_RES_IRQ,
-	    &rid, RF_ACTIVE);
+	sc->sc_irq_res[index] = bus_alloc_resource_any(sc->sc_dev,
+	    SYS_RES_IRQ, &rid, RF_ACTIVE);
 	if (sc->sc_irq_res[index] == NULL ||
-	    INTIGN(vec = rman_get_start(sc->sc_irq_res[index])) != sc->sc_ign ||
-	    INTINO(vec) != ino ||
+	    INTINO(vec = rman_get_start(sc->sc_irq_res[index])) != ino ||
+	    INTIGN(vec) != sc->sc_ign ||
 	    intr_vectors[vec].iv_ic != &schizo_ic ||
 	    bus_setup_intr(sc->sc_dev, sc->sc_irq_res[index],
 	    INTR_TYPE_MISC | INTR_FAST, handler, NULL, sc,
@@ -717,8 +736,8 @@ schizo_intr_register(struct schizo_softc *sc, u_int ino)
 }
 
 static int
-schizo_get_intrmap(struct schizo_softc *sc, u_int ino, bus_addr_t *intrmapptr,
-    bus_addr_t *intrclrptr)
+schizo_get_intrmap(struct schizo_softc *sc, u_int ino,
+    bus_addr_t *intrmapptr, bus_addr_t *intrclrptr)
 {
 	bus_addr_t intrclr, intrmap;
 	uint64_t mr;
@@ -912,6 +931,9 @@ schizo_read_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg,
 	uint8_t byte;
 
 	sc = device_get_softc(dev);
+	if (bus < sc->sc_pci_secbus || bus > sc->sc_pci_subbus ||
+	    slot > PCI_SLOTMAX || func > PCI_FUNCMAX || reg > PCI_REGMAX)
+		return (-1);
 
 	/*
 	 * The Schizo bridges contain a dupe of their header at 0x80.
@@ -952,14 +974,18 @@ schizo_read_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg,
 }
 
 static void
-schizo_write_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg,
-    uint32_t val, int width)
+schizo_write_config(device_t dev, u_int bus, u_int slot, u_int func,
+    u_int reg, uint32_t val, int width)
 {
 	struct schizo_softc *sc;
 	bus_space_handle_t bh;
 	u_long offset = 0;
 
 	sc = device_get_softc(dev);
+	if (bus < sc->sc_pci_secbus || bus > sc->sc_pci_subbus ||
+	    slot > PCI_SLOTMAX || func > PCI_FUNCMAX || reg > PCI_REGMAX)
+		return;
+
 	offset = STX_CONF_OFF(bus, slot, func, reg);
 	bh = sc->sc_pci_bh[OFW_PCI_CS_CONFIG];
 	switch (width) {
@@ -988,8 +1014,9 @@ schizo_route_interrupt(device_t bridge, device_t dev, int pin)
 
 	sc = device_get_softc(bridge);
 	pintr = pin;
-	if (ofw_bus_lookup_imap(ofw_bus_get_node(dev), &sc->sc_pci_iinfo, ®,
-	    sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr), maskbuf))
+	if (ofw_bus_lookup_imap(ofw_bus_get_node(dev), &sc->sc_pci_iinfo,
+	    ®, sizeof(reg), &pintr, sizeof(pintr), &mintr, sizeof(mintr),
+	    maskbuf))
 		return (mintr);
 
 	device_printf(bridge, "could not route pin %d for device %d.%d\n",
@@ -1024,8 +1051,8 @@ schizo_dma_sync_stub(void *arg)
 
 	(void)PCIB_READ_CONFIG(sds->sds_ppb, sds->sds_bus, sds->sds_slot,
 	    sds->sds_func, PCIR_VENDOR, 2);
-	for (; atomic_cmpset_acq_32(&sc->sc_cdma_state, SCHIZO_CDMA_STATE_DONE,
-	    SCHIZO_CDMA_STATE_PENDING) == 0;)
+	for (; atomic_cmpset_acq_32(&sc->sc_cdma_state,
+	    SCHIZO_CDMA_STATE_DONE, SCHIZO_CDMA_STATE_PENDING) == 0;)
 		;
 	SCHIZO_PCI_WRITE_8(sc, sc->sc_cdma_clr, 1);
 	microuptime(&cur);
@@ -1257,6 +1284,18 @@ schizo_teardown_intr(device_t dev, device_t child, struct resource *vec,
 	return (bus_generic_teardown_intr(dev, child, vec, cookie));
 }
 
+static int
+schizo_describe_intr(device_t dev, device_t child, struct resource *vec,
+    void *cookie, const char *descr)
+{
+	struct schizo_softc *sc;
+
+	sc = device_get_softc(dev);
+	if ((sc->sc_flags & SCHIZO_FLAGS_CDMA) != 0)
+		cookie = ((struct schizo_dma_sync *)cookie)->sds_cookie;
+	return (bus_generic_describe_intr(dev, child, vec, cookie, descr));
+}
+
 static struct resource *
 schizo_alloc_resource(device_t bus, device_t child, int type, int *rid,
     u_long start, u_long end, u_long count, u_int flags)
@@ -1282,8 +1321,8 @@ schizo_alloc_resource(device_t bus, device_t child, int type, int *rid,
 		if (start != end)
 			panic("%s: XXX: interrupt range", __func__);
 		start = end = INTMAP_VEC(sc->sc_ign, end);
-		return (BUS_ALLOC_RESOURCE(device_get_parent(bus), child, type,
-		    rid, start, end, count, flags));
+		return (BUS_ALLOC_RESOURCE(device_get_parent(bus), child,
+		    type, rid, start, end, count, flags));
 	}
 	switch (type) {
 	case SYS_RES_MEMORY:
@@ -1398,7 +1437,7 @@ schizo_alloc_bus_tag(struct schizo_softc *sc, int type)
 {
 	bus_space_tag_t bt;
 
-	bt = (bus_space_tag_t)malloc(sizeof(struct bus_space_tag), M_DEVBUF,
+	bt = malloc(sizeof(struct bus_space_tag), M_DEVBUF,
 	    M_NOWAIT | M_ZERO);
 	if (bt == NULL)
 		panic("%s: out of memory", __func__);
diff --git a/sys/sparc64/pci/schizovar.h b/sys/sparc64/pci/schizovar.h
index 6b2bca9c601..144ace7c065 100644
--- a/sys/sparc64/pci/schizovar.h
+++ b/sys/sparc64/pci/schizovar.h
@@ -71,6 +71,7 @@ struct schizo_softc {
 	bus_dma_tag_t			sc_pci_dmat;
 
 	uint8_t				sc_pci_secbus;
+	uint8_t				sc_pci_subbus;
 
 	struct ofw_bus_iinfo		sc_pci_iinfo;
 
diff --git a/sys/sparc64/sbus/dma_sbus.c b/sys/sparc64/sbus/dma_sbus.c
index b4c2e5e6224..4bc1d438723 100644
--- a/sys/sparc64/sbus/dma_sbus.c
+++ b/sys/sparc64/sbus/dma_sbus.c
@@ -149,7 +149,13 @@ static driver_t dma_driver = {
 	sizeof(struct dma_softc),
 };
 
-DRIVER_MODULE(dma, sbus, dma_driver, dma_devclass, 0, 0);
+/*
+ * The probe order is handled by sbus(4) as we don't want the variants
+ * with children to be attached earlier than the stand-alone controllers
+ * in order to generally preserve the OFW device tree order.
+ */
+EARLY_DRIVER_MODULE(dma, sbus, dma_driver, dma_devclass, 0, 0,
+    BUS_PASS_DEFAULT);
 MODULE_DEPEND(dma, sbus, 1, 1, 1);
 MODULE_VERSION(dma, 1);
 
diff --git a/sys/sparc64/sbus/sbus.c b/sys/sparc64/sbus/sbus.c
index dd36f036d7e..0c4b509e508 100644
--- a/sys/sparc64/sbus/sbus.c
+++ b/sys/sparc64/sbus/sbus.c
@@ -247,7 +247,9 @@ static driver_t sbus_driver = {
 
 static devclass_t sbus_devclass;
 
-DRIVER_MODULE(sbus, nexus, sbus_driver, sbus_devclass, 0, 0);
+EARLY_DRIVER_MODULE(sbus, nexus, sbus_driver, sbus_devclass, 0, 0,
+    BUS_PASS_BUS);
+MODULE_DEPEND(sbus, nexus, 1, 1, 1);
 MODULE_VERSION(sbus, 1);
 
 #define	OFW_SBUS_TYPE	"sbus"
diff --git a/sys/sparc64/sparc64/eeprom.c b/sys/sparc64/sparc64/eeprom.c
index 223b96c93c5..da9909a5d30 100644
--- a/sys/sparc64/sparc64/eeprom.c
+++ b/sys/sparc64/sparc64/eeprom.c
@@ -107,7 +107,7 @@ DRIVER_MODULE(eeprom, sbus, eeprom_driver, eeprom_devclass, 0, 0);
 static int
 eeprom_probe(device_t dev)
 {
- 
+
 	if (strcmp("eeprom", ofw_bus_get_name(dev)) == 0) {
 		device_set_desc(dev, "EEPROM/clock");
 		return (0);
@@ -119,7 +119,6 @@ static int
 eeprom_attach(device_t dev)
 {
 	struct mk48txx_softc *sc;
-	struct resource *res;
 	struct timespec ts;
 	int error, rid;
 
@@ -128,14 +127,13 @@ eeprom_attach(device_t dev)
 	mtx_init(&sc->sc_mtx, "eeprom_mtx", NULL, MTX_DEF);
 
 	rid = 0;
-	res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
-	if (res == NULL) {
+	sc->sc_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
+	    RF_ACTIVE);
+	if (sc->sc_res == NULL) {
 		device_printf(dev, "cannot allocate resources\n");
 		error = ENXIO;
 		goto fail_mtx;
 	}
-	sc->sc_bst = rman_get_bustag(res);
-	sc->sc_bsh = rman_get_bushandle(res);
 
 	if ((sc->sc_model = ofw_bus_get_model(dev)) == NULL) {
 		device_printf(dev, "cannot determine model\n");
@@ -180,7 +178,7 @@ eeprom_attach(device_t dev)
 	return (0);
 
  fail_res:
-	bus_release_resource(dev, SYS_RES_MEMORY, rid, res);
+	bus_release_resource(dev, SYS_RES_MEMORY, rid, sc->sc_res);
  fail_mtx:
 	mtx_destroy(&sc->sc_mtx);
 
diff --git a/sys/sparc64/sparc64/identcpu.c b/sys/sparc64/sparc64/identcpu.c
index 020dc924fb3..cdb09e65806 100644
--- a/sys/sparc64/sparc64/identcpu.c
+++ b/sys/sparc64/sparc64/identcpu.c
@@ -27,6 +27,13 @@ static char cpu_model[128];
 SYSCTL_STRING(_hw, HW_MODEL, model, CTLFLAG_RD,
     cpu_model, 0, "Machine model");
 
+SYSCTL_NODE(_hw, OID_AUTO, freq, CTLFLAG_RD, 0, "");
+
+static u_int cpu_count;
+static u_int cpu_freq;
+SYSCTL_UINT(_hw_freq, OID_AUTO, cpu, CTLFLAG_RD, &cpu_freq, 0,
+    "CPU clock frequency");
+
 int cpu_impl;
 
 void
@@ -104,4 +111,11 @@ cpu_identify(u_long vers, u_int freq, u_int id)
 		printf("  mask=0x%lx maxtl=%ld maxwin=%ld\n", VER_MASK(vers),
 		    VER_MAXTL(vers), VER_MAXWIN(vers));
 	}
+
+	/*
+	 * Calculate the average CPU frequency.
+	 */
+	freq = (freq + 500000ul) / 1000000ul;
+	cpu_freq = (cpu_freq * cpu_count + freq) / (cpu_count + 1);
+	cpu_count++;
 }
diff --git a/sys/sparc64/sparc64/interrupt.S b/sys/sparc64/sparc64/interrupt.S
index ca4456faa4c..75a97275301 100644
--- a/sys/sparc64/sparc64/interrupt.S
+++ b/sys/sparc64/sparc64/interrupt.S
@@ -176,7 +176,7 @@ ENTRY(intr_fast)
 
 3:	ldx	[%l0 + IR_FUNC], %o0
 	ldx	[%l0 + IR_ARG], %o1
-	lduw	[%l0 + IR_VEC], %o2
+	lduw	[%l0 + IR_VEC], %l2
 
 	ldx	[PCPU(IRFREE)], %l1
 	stx	%l1, [%l0 + IR_NEXT]
@@ -188,17 +188,17 @@ ENTRY(intr_fast)
 	call	%o0
 	 mov	%o1, %o0
 
-	/* intrcnt[intr_countp[%o2]]++ */
-	SET(intrcnt, %l7, %l2)		/* %l2 = intrcnt */
-	prefetcha [%l2] ASI_N, 1
-	SET(intr_countp, %l7, %l3)	/* %l3 = intr_countp */
-	sllx	%o2, 1, %l4		/* %l4 = vec << 1 */
-	lduh	[%l4 + %l3], %l5	/* %l5 = intr_countp[%o2] */
-	sllx	%l5, 3, %l6		/* %l6 = intr_countp[%o2] << 3 */
-	add	%l6, %l2, %l7		/* %l7 = intrcnt[intr_countp[%o2]] */
-	ldx	[%l7], %l2
+	/* intrcnt[intr_countp[%l2]]++ */
+	SET(intrcnt, %l7, %l3)		/* %l3 = intrcnt */
+	prefetcha [%l3] ASI_N, 1
+	SET(intr_countp, %l7, %l4)	/* %l4 = intr_countp */
+	sllx	%l2, 1, %l2		/* %l2 = vec << 1 */
+	lduh	[%l4 + %l2], %l4	/* %l4 = intr_countp[%l2] */
+	sllx	%l4, 3, %l4		/* %l4 = intr_countp[%l2] << 3 */
+	add	%l4, %l3, %l4		/* %l4 = intrcnt[intr_countp[%l2]] */
+	ldx	[%l4], %l2
 	inc	%l2
-	stx	%l2, [%l7]
+	stx	%l2, [%l4]
 
 	ba,a	%xcc, 1b
 	 nop
diff --git a/sys/sparc64/sparc64/intr_machdep.c b/sys/sparc64/sparc64/intr_machdep.c
index 9f9df1b4a26..7a73bbc6768 100644
--- a/sys/sparc64/sparc64/intr_machdep.c
+++ b/sys/sparc64/sparc64/intr_machdep.c
@@ -276,7 +276,7 @@ intr_execute_handlers(void *cookie)
 	struct intr_vector *iv;
 
 	iv = cookie;
-	if (iv->iv_ic == NULL || intr_event_handle(iv->iv_event, NULL) != 0)
+	if (__predict_false(intr_event_handle(iv->iv_event, NULL) != 0))
 		intr_stray_vector(iv);
 }
 
@@ -377,7 +377,8 @@ inthand_add(const char *name, int vec, driver_filter_t *filt,
 #endif
 	ic->ic_enable(iv);
 	/* Ensure the interrupt is cleared, it might have triggered before. */
-	ic->ic_clear(iv);
+	if (ic->ic_clear != NULL)
+		ic->ic_clear(iv);
 	sx_xunlock(&intr_table_lock);
 	return (0);
 }
@@ -412,6 +413,31 @@ inthand_remove(int vec, void *cookie)
 	return (error);
 }
 
+/* Add a description to an active interrupt handler. */
+int
+intr_describe(int vec, void *ih, const char *descr)
+{
+	struct intr_vector *iv;
+	int error;
+
+	if (vec < 0 || vec >= IV_MAX)
+		return (EINVAL);
+	sx_xlock(&intr_table_lock);
+	iv = &intr_vectors[vec];
+	if (iv == NULL) {
+		sx_xunlock(&intr_table_lock);
+		return (EINVAL);
+	}
+	error = intr_event_describe_handler(iv->iv_event, ih, descr);
+	if (error) {
+		sx_xunlock(&intr_table_lock);
+		return (error);
+	}
+	intrcnt_updatename(vec, iv->iv_event->ie_fullname, 0);
+	sx_xunlock(&intr_table_lock);
+	return (error);
+}
+
 #ifdef SMP
 /*
  * Support for balancing interrupt sources across CPUs.  For now we just
@@ -449,13 +475,19 @@ int
 intr_bind(int vec, u_char cpu)
 {
 	struct intr_vector *iv;
+	int error;
 
 	if (vec < 0 || vec >= IV_MAX)
 		return (EINVAL);
+	sx_xlock(&intr_table_lock);
 	iv = &intr_vectors[vec];
-	if (iv == NULL)
+	if (iv == NULL) {
+		sx_xunlock(&intr_table_lock);
 		return (EINVAL);
-	return (intr_event_bind(iv->iv_event, cpu));
+	}
+	error = intr_event_bind(iv->iv_event, cpu);
+	sx_xunlock(&intr_table_lock);
+	return (error);
 }
 
 /*
diff --git a/sys/sparc64/sparc64/iommu.c b/sys/sparc64/sparc64/iommu.c
index 88ab2c9fb6a..b5f24dbb2ab 100644
--- a/sys/sparc64/sparc64/iommu.c
+++ b/sys/sparc64/sparc64/iommu.c
@@ -138,11 +138,13 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
+#include 
 #include 
 #include 
 #include 
 #include 
 #include 
+#include 
 
 #include 
 
@@ -212,6 +214,12 @@ static __inline void
 iommu_tlb_flush(struct iommu_state *is, bus_addr_t va)
 {
 
+	if ((is->is_flags & IOMMU_FIRE) != 0)
+		/*
+		 * Direct page flushing is not supported and also not
+		 * necessary due to cache snooping.
+		 */
+		return;
 	IOMMU_WRITE8(is, is_iommu, IMR_FLUSH, va);
 }
 
@@ -282,18 +290,19 @@ iommu_map_remq(struct iommu_state *is, bus_dmamap_t map)
  *	- create a private DVMA map.
  */
 void
-iommu_init(const char *name, struct iommu_state *is, int tsbsize,
-    uint32_t iovabase, int resvpg)
+iommu_init(const char *name, struct iommu_state *is, u_int tsbsize,
+    uint32_t iovabase, u_int resvpg)
 {
 	vm_size_t size;
 	vm_offset_t offs;
-	uint64_t end;
+	uint64_t end, obpmap, obpptsb, tte;
+	u_int maxtsbsize, obptsbentries, obptsbsize, slot, tsbentries;
 	int i;
 
 	/*
-	 * Setup the iommu.
+	 * Setup the IOMMU.
 	 *
-	 * The sun4u iommu is part of the PCI or SBus controller so we
+	 * The sun4u IOMMU is part of the PCI or SBus controller so we
 	 * will deal with it here..
 	 *
 	 * The IOMMU address space always ends at 0xffffe000, but the starting
@@ -301,16 +310,30 @@ iommu_init(const char *name, struct iommu_state *is, int tsbsize,
 	 * is->is_tsbsize entries, where each entry is 8 bytes.  The start of
 	 * the map can be calculated by (0xffffe000 << (8 + is->is_tsbsize)).
 	 */
-	is->is_cr = (tsbsize << IOMMUCR_TSBSZ_SHIFT) | IOMMUCR_EN;
+	if ((is->is_flags & IOMMU_FIRE) != 0) {
+		maxtsbsize = IOMMU_TSB512K;
+		/*
+		 * We enable bypass in order to be able to use a physical
+		 * address for the event queue base.
+		 */
+		is->is_cr = IOMMUCR_SE | IOMMUCR_CM_C_TLB_TBW | IOMMUCR_BE;
+	} else {
+		maxtsbsize = IOMMU_TSB128K;
+		is->is_cr = (tsbsize << IOMMUCR_TSBSZ_SHIFT) | IOMMUCR_DE;
+	}
+	if (tsbsize > maxtsbsize)
+		panic("%s: unsupported TSB size	", __func__);
+	tsbentries = IOMMU_TSBENTRIES(tsbsize);
+	is->is_cr |= IOMMUCR_EN;
 	is->is_tsbsize = tsbsize;
 	is->is_dvmabase = iovabase;
 	if (iovabase == -1)
 		is->is_dvmabase = IOTSB_VSTART(is->is_tsbsize);
 
 	size = IOTSB_BASESZ << is->is_tsbsize;
-	printf("%s: DVMA map: %#lx to %#lx%s\n", name,
+	printf("%s: DVMA map: %#lx to %#lx %d entries%s\n", name,
 	    is->is_dvmabase, is->is_dvmabase +
-	    (size << (IO_PAGE_SHIFT - IOTTE_SHIFT)) - 1,
+	    (size << (IO_PAGE_SHIFT - IOTTE_SHIFT)) - 1, tsbentries,
 	    IOMMU_HAS_SB(is) ? ", streaming buffer" : "");
 
 	/*
@@ -333,11 +356,53 @@ iommu_init(const char *name, struct iommu_state *is, int tsbsize,
 	 */
 	is->is_tsb = contigmalloc(size, M_DEVBUF, M_NOWAIT, 0, ~0UL,
 	    PAGE_SIZE, 0);
-	if (is->is_tsb == 0)
+	if (is->is_tsb == NULL)
 		panic("%s: contigmalloc failed", __func__);
 	is->is_ptsb = pmap_kextract((vm_offset_t)is->is_tsb);
 	bzero(is->is_tsb, size);
 
+	/*
+	 * Add the PROM mappings to the kernel IOTSB if desired.
+	 * Note that the firmware of certain Darwin boards doesn't set
+	 * the TSB size correctly.
+	 */
+	if ((is->is_flags & IOMMU_FIRE) != 0)
+		obptsbsize = (IOMMU_READ8(is, is_iommu, IMR_TSB) &
+		    IOMMUTB_TSBSZ_MASK) >> IOMMUTB_TSBSZ_SHIFT;
+	else
+		obptsbsize = (IOMMU_READ8(is, is_iommu, IMR_CTL) &
+		    IOMMUCR_TSBSZ_MASK) >> IOMMUCR_TSBSZ_SHIFT;
+	obptsbentries = IOMMU_TSBENTRIES(obptsbsize);
+	if (bootverbose)
+		printf("%s: PROM IOTSB size: %d (%d entries)\n", name,
+		    obptsbsize, obptsbentries);
+	if ((is->is_flags & IOMMU_PRESERVE_PROM) != 0 &&
+	    !(cpu_impl == CPU_IMPL_ULTRASPARCIIi && obptsbsize == 7)) {
+		if (obptsbentries > tsbentries)
+			panic("%s: PROM IOTSB entries exceed kernel",
+			    __func__);
+		obpptsb = IOMMU_READ8(is, is_iommu, IMR_TSB) &
+		    IOMMUTB_TB_MASK;
+		for (i = 0; i < obptsbentries; i++) {
+			tte = ldxa(obpptsb + i * 8, ASI_PHYS_USE_EC);
+			if ((tte & IOTTE_V) == 0)
+				continue;
+			slot = tsbentries - obptsbentries + i;
+			if (bootverbose)
+				printf("%s: adding PROM IOTSB slot %d "
+				    "(kernel slot %d) TTE: %#lx\n", name,
+				    i, slot, tte);
+			obpmap = (is->is_dvmabase + slot * IO_PAGE_SIZE) >>
+			    IO_PAGE_SHIFT;
+			if (rman_reserve_resource(&is->is_dvma_rman, obpmap,
+			    obpmap, IO_PAGE_SIZE >> IO_PAGE_SHIFT, RF_ACTIVE,
+			    NULL) == NULL)
+				panic("%s: could not reserve PROM IOTSB slot "
+				    "%d (kernel slot %d)", __func__, i, slot);
+			is->is_tsb[slot] = tte;
+		}
+	}
+
 	/*
 	 * Initialize streaming buffer, if it is there.
 	 */
@@ -349,7 +414,7 @@ iommu_init(const char *name, struct iommu_state *is, int tsbsize,
 		offs = roundup2((vm_offset_t)is->is_flush,
 		    STRBUF_FLUSHSYNC_NBYTES);
 		for (i = 0; i < 2; i++, offs += STRBUF_FLUSHSYNC_NBYTES) {
-			is->is_flushva[i] = (int64_t *)offs;
+			is->is_flushva[i] = (uint64_t *)offs;
 			is->is_flushpa[i] = pmap_kextract(offs);
 		}
 	}
@@ -368,11 +433,16 @@ iommu_init(const char *name, struct iommu_state *is, int tsbsize,
 void
 iommu_reset(struct iommu_state *is)
 {
+	uint64_t tsb;
 	int i;
 
-	IOMMU_WRITE8(is, is_iommu, IMR_TSB, is->is_ptsb);
-	/* Enable IOMMU in diagnostic mode */
-	IOMMU_WRITE8(is, is_iommu, IMR_CTL, is->is_cr | IOMMUCR_DE);
+	tsb = is->is_ptsb;
+	if ((is->is_flags & IOMMU_FIRE) != 0) {
+		tsb |= is->is_tsbsize;
+		IOMMU_WRITE8(is, is_iommu, IMR_CACHE_INVAL, ~0ULL);
+	}
+	IOMMU_WRITE8(is, is_iommu, IMR_TSB, tsb);
+	IOMMU_WRITE8(is, is_iommu, IMR_CTL, is->is_cr);
 
 	for (i = 0; i < 2; i++) {
 		if (is->is_sb[i] != 0) {
@@ -386,6 +456,8 @@ iommu_reset(struct iommu_state *is)
 				is->is_sb[i] = 0;
 		}
 	}
+
+	(void)IOMMU_READ8(is, is_iommu, IMR_CTL);
 }
 
 /*
@@ -396,7 +468,7 @@ static void
 iommu_enter(struct iommu_state *is, vm_offset_t va, vm_paddr_t pa,
     int stream, int flags)
 {
-	int64_t tte;
+	uint64_t tte;
 
 	KASSERT(va >= is->is_dvmabase,
 	    ("%s: va %#lx not in DVMA space", __func__, va));
@@ -423,7 +495,7 @@ iommu_enter(struct iommu_state *is, vm_offset_t va, vm_paddr_t pa,
 static int
 iommu_remove(struct iommu_state *is, vm_offset_t va, vm_size_t len)
 {
-	int streamed = 0;
+	int slot, streamed = 0;
 
 #ifdef IOMMU_DIAG
 	iommu_diag(is, va);
@@ -443,6 +515,12 @@ iommu_remove(struct iommu_state *is, vm_offset_t va, vm_size_t len)
 		len -= ulmin(len, IO_PAGE_SIZE);
 		IOMMU_SET_TTE(is, va, 0);
 		iommu_tlb_flush(is, va);
+		if ((is->is_flags & IOMMU_FLUSH_CACHE) != 0) {
+			slot = IOTSBSLOT(va);
+			if (len <= IO_PAGE_SIZE || slot % 8 == 7)
+				IOMMU_WRITE8(is, is_iommu, IMR_CACHE_FLUSH,
+				    is->is_ptsb + slot * 8);
+		}
 		va += IO_PAGE_SIZE;
 	}
 	return (streamed);
@@ -829,12 +907,13 @@ iommu_dvmamap_load_buffer(bus_dma_tag_t dt, struct iommu_state *is,
     bus_dmamap_t map, void *buf, bus_size_t buflen, struct thread *td,
     int flags, bus_dma_segment_t *segs, int *segp, int align)
 {
-	bus_addr_t amask, dvmaddr;
+	bus_addr_t amask, dvmaddr, dvmoffs;
 	bus_size_t sgsize, esize;
 	vm_offset_t vaddr, voffs;
 	vm_paddr_t curaddr;
 	pmap_t pmap = NULL;
 	int error, firstpg, sgcnt;
+	u_int slot;
 
 	KASSERT(buflen != 0, ("%s: buflen == 0!", __func__));
 	if (buflen > dt->dt_maxsize)
@@ -877,8 +956,15 @@ iommu_dvmamap_load_buffer(bus_dma_tag_t dt, struct iommu_state *is,
 		buflen -= sgsize;
 		vaddr += sgsize;
 
-		iommu_enter(is, trunc_io_page(dvmaddr), trunc_io_page(curaddr),
+		dvmoffs = trunc_io_page(dvmaddr);
+		iommu_enter(is, dvmoffs, trunc_io_page(curaddr),
 		    (map->dm_flags & DMF_STREAMED) != 0, flags);
+		if ((is->is_flags & IOMMU_FLUSH_CACHE) != 0) {
+			slot = IOTSBSLOT(dvmoffs);
+			if (buflen <= 0 || slot % 8 == 7)
+				IOMMU_WRITE8(is, is_iommu, IMR_CACHE_FLUSH,
+				    is->is_ptsb + slot * 8);
+		}
 
 		/*
 		 * Chop the chunk up into segments of at most maxsegsz, but try
@@ -1183,6 +1269,8 @@ iommu_diag(struct iommu_state *is, vm_offset_t va)
 	int i;
 	uint64_t data, tag;
 
+	if ((is->is_flags & IOMMU_FIRE) != 0)
+		return;
 	IS_LOCK_ASSERT(is);
 	IOMMU_WRITE8(is, is_dva, 0, trunc_io_page(va));
 	membar(StoreStore | StoreLoad);
diff --git a/sys/sparc64/sparc64/machdep.c b/sys/sparc64/sparc64/machdep.c
index 4b55c0ef380..06f6ebca8eb 100644
--- a/sys/sparc64/sparc64/machdep.c
+++ b/sys/sparc64/sparc64/machdep.c
@@ -383,8 +383,9 @@ sparc64_init(caddr_t mdp, u_long o1, u_long o2, u_long o3, ofw_vec_t *vec)
 	 */
 	for (va = KERNBASE + (kernel_tlb_slots - 1) * PAGE_SIZE_4M;
 	    va >= roundup2(end, PAGE_SIZE_4M); va -= PAGE_SIZE_4M) {
-		printf("demapping unused kernel TLB slot (va %#lx - %#lx)\n",
-		    va, va + PAGE_SIZE_4M - 1);
+		if (bootverbose)
+			printf("demapping unused kernel TLB slot "
+			    "(va %#lx - %#lx)\n", va, va + PAGE_SIZE_4M - 1);
 		stxa(TLB_DEMAP_VA(va) | TLB_DEMAP_PRIMARY | TLB_DEMAP_PAGE,
 		    ASI_DMMU_DEMAP, 0);
 		stxa(TLB_DEMAP_VA(va) | TLB_DEMAP_PRIMARY | TLB_DEMAP_PAGE,
@@ -660,15 +661,6 @@ sigreturn(struct thread *td, struct sigreturn_args *uap)
 	return (EJUSTRETURN);
 }
 
-#ifdef COMPAT_FREEBSD4
-int
-freebsd4_sigreturn(struct thread *td, struct freebsd4_sigreturn_args *uap)
-{
-
-	return sigreturn(td, (struct sigreturn_args *)uap);
-}
-#endif
-
 /*
  * Construct a PCB from a trapframe. This is called from kdb_trap() where
  * we want to start a backtrace from the function that caused us to enter
@@ -692,12 +684,39 @@ get_mcontext(struct thread *td, mcontext_t *mc, int flags)
 
 	tf = td->td_frame;
 	pcb = td->td_pcb;
-	bcopy(tf, mc, sizeof(*tf));
+	/*
+	 * Copy the registers which will be restored by tl0_ret() from the
+	 * trapframe.
+	 * Note that we skip %g7 which is used as the userland TLS register
+	 * and %wstate.
+	 */
+	mc->mc_flags = _MC_VERSION;
+	mc->mc_global[1] = tf->tf_global[1];
+	mc->mc_global[2] = tf->tf_global[2];
+	mc->mc_global[3] = tf->tf_global[3];
+	mc->mc_global[4] = tf->tf_global[4];
+	mc->mc_global[5] = tf->tf_global[5];
+	mc->mc_global[6] = tf->tf_global[6];
 	if (flags & GET_MC_CLEAR_RET) {
 		mc->mc_out[0] = 0;
 		mc->mc_out[1] = 0;
+	} else {
+		mc->mc_out[0] = tf->tf_out[0];
+		mc->mc_out[1] = tf->tf_out[1];
 	}
-	mc->mc_flags = _MC_VERSION;
+	mc->mc_out[2] = tf->tf_out[2];
+	mc->mc_out[3] = tf->tf_out[3];
+	mc->mc_out[4] = tf->tf_out[4];
+	mc->mc_out[5] = tf->tf_out[5];
+	mc->mc_out[6] = tf->tf_out[6];
+	mc->mc_out[7] = tf->tf_out[7];
+	mc->mc_fprs = tf->tf_fprs;
+	mc->mc_fsr = tf->tf_fsr;
+	mc->mc_gsr = tf->tf_gsr;
+	mc->mc_tnpc = tf->tf_tnpc;
+	mc->mc_tpc = tf->tf_tpc;
+	mc->mc_tstate = tf->tf_tstate;
+	mc->mc_y = tf->tf_y;
 	critical_enter();
 	if ((tf->tf_fprs & FPRS_FEF) != 0) {
 		savefpctx(pcb->pcb_ufp);
@@ -717,7 +736,6 @@ set_mcontext(struct thread *td, const mcontext_t *mc)
 {
 	struct trapframe *tf;
 	struct pcb *pcb;
-	uint64_t wstate;
 
 	if (!TSTATE_SECURE(mc->mc_tstate) ||
 	    (mc->mc_flags & ((1L << _MC_VERSION_BITS) - 1)) != _MC_VERSION)
@@ -726,9 +744,33 @@ set_mcontext(struct thread *td, const mcontext_t *mc)
 	pcb = td->td_pcb;
 	/* Make sure the windows are spilled first. */
 	flushw();
-	wstate = tf->tf_wstate;
-	bcopy(mc, tf, sizeof(*tf));
-	tf->tf_wstate = wstate;
+	/*
+	 * Copy the registers which will be restored by tl0_ret() to the
+	 * trapframe.
+	 * Note that we skip %g7 which is used as the userland TLS register
+	 * and %wstate.
+	 */
+	tf->tf_global[1] = mc->mc_global[1];
+	tf->tf_global[2] = mc->mc_global[2];
+	tf->tf_global[3] = mc->mc_global[3];
+	tf->tf_global[4] = mc->mc_global[4];
+	tf->tf_global[5] = mc->mc_global[5];
+	tf->tf_global[6] = mc->mc_global[6];
+	tf->tf_out[0] = mc->mc_out[0];
+	tf->tf_out[1] = mc->mc_out[1];
+	tf->tf_out[2] = mc->mc_out[2];
+	tf->tf_out[3] = mc->mc_out[3];
+	tf->tf_out[4] = mc->mc_out[4];
+	tf->tf_out[5] = mc->mc_out[5];
+	tf->tf_out[6] = mc->mc_out[6];
+	tf->tf_out[7] = mc->mc_out[7];
+	tf->tf_fprs = mc->mc_fprs;
+	tf->tf_fsr = mc->mc_fsr;
+	tf->tf_gsr = mc->mc_gsr;
+	tf->tf_tnpc = mc->mc_tnpc;
+	tf->tf_tpc = mc->mc_tpc;
+	tf->tf_tstate = mc->mc_tstate;
+	tf->tf_y = mc->mc_y;
 	if ((mc->mc_fprs & FPRS_FEF) != 0) {
 		tf->tf_fprs = 0;
 		bcopy(mc->mc_fp, pcb->pcb_ufp, sizeof(pcb->pcb_ufp));
diff --git a/sys/sparc64/sparc64/nexus.c b/sys/sparc64/sparc64/nexus.c
index 58c0805600e..0f96a2101d3 100644
--- a/sys/sparc64/sparc64/nexus.c
+++ b/sys/sparc64/sparc64/nexus.c
@@ -90,12 +90,13 @@ static bus_activate_resource_t nexus_activate_resource;
 static bus_deactivate_resource_t nexus_deactivate_resource;
 static bus_release_resource_t nexus_release_resource;
 static bus_get_resource_list_t nexus_get_resource_list;
+#ifdef SMP
+static bus_bind_intr_t nexus_bind_intr;
+#endif
+static bus_describe_intr_t nexus_describe_intr;
 static bus_get_dma_tag_t nexus_get_dma_tag;
 static ofw_bus_get_devinfo_t nexus_get_devinfo;
 
-#ifdef SMP
-static int nexus_bind_intr(device_t, device_t, struct resource *, int);
-#endif
 static int nexus_inlist(const char *, const char *const *);
 static struct nexus_devinfo * nexus_setup_dinfo(device_t, phandle_t);
 static void nexus_destroy_dinfo(struct nexus_devinfo *);
@@ -128,6 +129,7 @@ static device_method_t nexus_methods[] = {
 #ifdef SMP
 	DEVMETHOD(bus_bind_intr,	nexus_bind_intr),
 #endif
+	DEVMETHOD(bus_describe_intr,	nexus_describe_intr),
 	DEVMETHOD(bus_get_dma_tag,	nexus_get_dma_tag),
 
 	/* ofw_bus interface */
@@ -144,7 +146,9 @@ static device_method_t nexus_methods[] = {
 static devclass_t nexus_devclass;
 
 DEFINE_CLASS_0(nexus, nexus_driver, nexus_methods, sizeof(struct nexus_softc));
-DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0);
+EARLY_DRIVER_MODULE(nexus, root, nexus_driver, nexus_devclass, 0, 0,
+    BUS_PASS_BUS);
+MODULE_VERSION(nexus, 1);
 
 static const char *const nexus_excl_name[] = {
 	"aliases",
@@ -327,6 +331,14 @@ nexus_bind_intr(device_t dev, device_t child, struct resource *r, int cpu)
 }
 #endif
 
+static int
+nexus_describe_intr(device_t dev, device_t child, struct resource *r,
+    void *cookie, const char *descr)
+{
+
+	return (intr_describe(rman_get_start(r), cookie, descr));
+}
+
 static struct resource *
 nexus_alloc_resource(device_t bus, device_t child, int type, int *rid,
     u_long start, u_long end, u_long count, u_int flags)
diff --git a/sys/sparc64/sparc64/ofw_machdep.c b/sys/sparc64/sparc64/ofw_machdep.c
index bcacea77b41..9d522629c78 100644
--- a/sys/sparc64/sparc64/ofw_machdep.c
+++ b/sys/sparc64/sparc64/ofw_machdep.c
@@ -1,6 +1,6 @@
 /*-
  * Copyright (c) 2001 by Thomas Moestl .
- * Copyright (c) 2005 by Marius Strobl .
+ * Copyright (c) 2005 - 2009 by Marius Strobl .
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -23,7 +23,7 @@
  * 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 
 __FBSDID("$FreeBSD$");
 
@@ -64,34 +64,32 @@ OF_getetheraddr(device_t dev, u_char *addr)
 
 	node = OF_peer(0);
 	if (node <= 0 || OF_getprop(node, "idprom", &idp, sizeof(idp)) == -1)
-		panic("Could not determine the machine ethernet address");
+		panic("Could not determine the machine Ethernet address");
 	bcopy(&idp.id_ether, addr, ETHER_ADDR_LEN);
 }
 
 static __inline uint32_t
 phys_hi_mask_space(const char *bus, uint32_t phys_hi)
 {
-	uint32_t space;
 
-	space = phys_hi;
 	if (strcmp(bus, "ebus") == 0 || strcmp(bus, "isa") == 0)
-		space &= 0x1;
+		phys_hi &= 0x1;
 	else if (strcmp(bus, "pci") == 0)
-		space &= OFW_PCI_PHYS_HI_SPACEMASK;
+		phys_hi &= OFW_PCI_PHYS_HI_SPACEMASK;
 	/* The phys.hi cells of the other busses only contain space bits. */
-	return (space);
+	return (phys_hi);
 }
 
 /*
  * Return the physical address and the bus space to use for a node
  * referenced by its package handle and the index of the register bank
- * to decode. Intended to be used to together with sparc64_fake_bustag()
+ * to decode.  Intended to be used to together with sparc64_fake_bustag()
  * by console drivers in early boot only.
  * Works by mapping the address of the node's bank given in the address
  * space of its parent upward in the device tree at each bridge along the
  * path.
  * Currently only really deals with max. 64-bit addresses, i.e. addresses
- * consisting of max. 2 phys cells (phys.hi and phys.lo). If we encounter
+ * consisting of max. 2 phys cells (phys.hi and phys.lo).  If we encounter
  * a 3 phys cells address (as with PCI addresses) we assume phys.hi can
  * be ignored except for the space bits (generally contained in phys.hi)
  * and treat phys.mid as phys.hi.
@@ -100,26 +98,26 @@ int
 OF_decode_addr(phandle_t node, int bank, int *space, bus_addr_t *addr)
 {
 	char name[32];
-	uint64_t cend, cstart, end, phys, sz, start;
+	uint64_t cend, cstart, end, phys, pphys, sz, start;
 	pcell_t addrc, szc, paddrc;
 	phandle_t bus, lbus, pbus;
 	uint32_t banks[10 * 5];	/* 10 PCI banks */
-	uint32_t cspace, spc;
+	uint32_t cspc, pspc, spc;
 	int i, j, nbank;
 
 	/*
 	 * In general the addresses are contained in the "reg" property
-	 * of a node. The first address in the "reg" property of a PCI
+	 * of a node.  The first address in the "reg" property of a PCI
 	 * node however is the address of its configuration registers in
-	 * the configuration space of the host bridge. Additional entries
-	 * denote the memory and I/O addresses. For relocatable addresses
+	 * the configuration space of the host bridge.  Additional entries
+	 * denote the memory and I/O addresses.  For relocatable addresses
 	 * the "reg" property contains the BAR, for non-relocatable
-	 * addresses it contains the absolute PCI address. The PCI-only
+	 * addresses it contains the absolute PCI address.  The PCI-only
 	 * "assigned-addresses" property however always contains the
 	 * absolute PCI addresses.
 	 * The "assigned-addresses" and "reg" properties are arrays of
 	 * address structures consisting of #address-cells 32-bit phys
-	 * cells and #size-cells 32-bit size cells. If a parent lacks
+	 * cells and #size-cells 32-bit size cells.  If a parent lacks
 	 * the "#address-cells" or "#size-cells" property the default
 	 * for #address-cells to use is 2 and for #size-cells 1.
 	 */
@@ -150,17 +148,18 @@ OF_decode_addr(phandle_t node, int bank, int *space, bus_addr_t *addr)
 	nbank /= sizeof(banks[0]) * (addrc + szc);
 	if (bank < 0 || bank > nbank - 1)
 		return (ENXIO);
+	bank *= addrc + szc;
+	spc = phys_hi_mask_space(name, banks[bank]);
+	/* Skip the high cell for 3-cell addresses. */
+	bank += addrc - 2;
 	phys = 0;
 	for (i = 0; i < MIN(2, addrc); i++)
-		phys |= (uint64_t)banks[(addrc + szc) * bank + addrc - 2 + i] <<
-		    32 * (MIN(2, addrc) - i - 1);
+		phys = ((uint64_t)phys << 32) | banks[bank++];
 	sz = 0;
 	for (i = 0; i < szc; i++)
-		sz |= (uint64_t)banks[(addrc + szc) * bank + addrc + i] <<
-		    32 * (szc - i - 1);
+		sz = ((uint64_t)sz << 32) | banks[bank++];
 	start = phys;
 	end = phys + sz - 1;
-	spc = phys_hi_mask_space(name, banks[(addrc + szc) * bank]);
 
 	/*
 	 * Map upward in the device tree at every bridge we encounter
@@ -172,7 +171,7 @@ OF_decode_addr(phandle_t node, int bank, int *space, bus_addr_t *addr)
 	 * If a bridge doesn't have a "ranges" property no mapping is
 	 * necessary at that bridge.
 	 */
-	cspace = 0;
+	cspc = 0;
 	lbus = bus;
 	while ((pbus = OF_parent(bus)) != 0) {
 		if (OF_getprop(pbus, "#address-cells", &paddrc,
@@ -195,42 +194,40 @@ OF_decode_addr(phandle_t node, int bank, int *space, bus_addr_t *addr)
 				return (ENXIO);
 		}
 		nbank /= sizeof(banks[0]) * (addrc + paddrc + szc);
+		bank = 0;
 		for (i = 0; i < nbank; i++) {
-			cspace = phys_hi_mask_space(name,
-			    banks[(addrc + paddrc + szc) * i]);
-			if (cspace != spc)
+			cspc = phys_hi_mask_space(name, banks[bank]);
+			if (cspc != spc) {
+				bank += addrc + paddrc + szc;
 				continue;
+			}
+			/* Skip the high cell for 3-cell addresses. */
+			bank += addrc - 2;
 			phys = 0;
 			for (j = 0; j < MIN(2, addrc); j++)
-				phys |= (uint64_t)banks[
-				    (addrc + paddrc + szc) * i +
-				    addrc - 2 + j] <<
-				    32 * (MIN(2, addrc) - j - 1);
+				phys = ((uint64_t)phys << 32) | banks[bank++];
+			pspc = banks[bank];
+			/* Skip the high cell for 3-cell addresses. */
+			bank += paddrc - 2;
+			pphys = 0;
+			for (j = 0; j < MIN(2, paddrc); j++)
+				pphys =
+				    ((uint64_t)pphys << 32) | banks[bank++];
 			sz = 0;
 			for (j = 0; j < szc; j++)
-				sz |= (uint64_t)banks[
-				    (addrc + paddrc + szc) * i + addrc +
-				    paddrc + j] <<
-				    32 * (szc - j - 1);
+				sz = ((uint64_t)sz << 32) | banks[bank++];
 			cstart = phys;
 			cend = phys + sz - 1;
 			if (start < cstart || start > cend)
 				continue;
 			if (end < cstart || end > cend)
 				return (ENXIO);
-			phys = 0;
-			for (j = 0; j < MIN(2, paddrc); j++)
-				phys |= (uint64_t)banks[
-				    (addrc + paddrc + szc) * i + addrc +
-				    paddrc - 2 + j] <<
-				    32 * (MIN(2, paddrc) - j - 1);
-			start += phys - cstart;
-			end += phys - cstart;
 			if (OF_getprop(pbus, "name", name, sizeof(name)) == -1)
 				return (ENXIO);
 			name[sizeof(name) - 1] = '\0';
-			spc = phys_hi_mask_space(name,
-			    banks[(addrc + paddrc + szc) * i + addrc]);
+			spc = phys_hi_mask_space(name, pspc);
+			start += pphys - cstart;
+			end += pphys - cstart;
 			break;
 		}
 		if (i == nbank)
@@ -241,8 +238,8 @@ OF_decode_addr(phandle_t node, int bank, int *space, bus_addr_t *addr)
 		bus = pbus;
 	}
 
-	/* Done with mapping. Return the bus space as used by FreeBSD. */
 	*addr = start;
+	/* Determine the bus space based on the last bus we mapped. */
 	if (OF_parent(lbus) == 0) {
 		*space = NEXUS_BUS_SPACE;
 		return (0);
@@ -250,11 +247,12 @@ OF_decode_addr(phandle_t node, int bank, int *space, bus_addr_t *addr)
 	if (OF_getprop(lbus, "name", name, sizeof(name)) == -1)
 		return (ENXIO);
 	name[sizeof(name) - 1] = '\0';
-	if (strcmp(name, "central") == 0 || strcmp(name, "upa") == 0) {
+	if (strcmp(name, "central") == 0 || strcmp(name, "ebus") == 0 ||
+	    strcmp(name, "upa") == 0) {
 		*space = NEXUS_BUS_SPACE;
 		return (0);
 	} else if (strcmp(name, "pci") == 0) {
-		switch (cspace) {
+		switch (cspc) {
 		case OFW_PCI_PHYS_HI_SPACE_IO:
 			*space = PCI_IO_BUS_SPACE;
 			return (0);
diff --git a/sys/sparc64/sparc64/rtc.c b/sys/sparc64/sparc64/rtc.c
index 5bd196b25ef..d9b0da95d4b 100644
--- a/sys/sparc64/sparc64/rtc.c
+++ b/sys/sparc64/sparc64/rtc.c
@@ -28,10 +28,11 @@
 __FBSDID("$FreeBSD$");
 
 /*
- * The `rtc' device is a MC146818 compatible clock found on the ISA
- * bus and EBus. The EBus variant actually is the Real-Time Clock
- * function of a National Semiconductor PC87317/PC97317 which also
- * provides Advanced Power Control functionality.
+ * The `rtc' device is found on the ISA bus and the EBus.  The ISA version
+ * always is a MC146818 compatible clock while the EBus variant either is the
+ * MC146818 compatible Real-Time Clock function of a National Semiconductor
+ * PC87317/PC97317 which also provides Advanced Power Control functionality
+ * or a Texas Instruments bq4802.
  */
 
 #include "opt_isa.h"
@@ -110,7 +111,7 @@ static device_method_t rtc_isa_methods[] = {
 	DEVMETHOD(clock_gettime,	mc146818_gettime),
 	DEVMETHOD(clock_settime,	mc146818_settime),
 
-	{ 0, 0 }
+	KOBJMETHOD_END
 };
 
 static driver_t rtc_isa_driver = {
@@ -122,14 +123,18 @@ static driver_t rtc_isa_driver = {
 DRIVER_MODULE(rtc, isa, rtc_isa_driver, rtc_devclass, 0, 0);
 #endif
 
-static u_int pc87317_getcent(device_t);
-static void pc87317_setcent(device_t, u_int);
+static u_int pc87317_getcent(device_t dev);
+static void pc87317_setcent(device_t dev, u_int cent);
 
 static int
 rtc_ebus_probe(device_t dev)
 {
 
 	if (strcmp(ofw_bus_get_name(dev), "rtc") == 0) {
+		/* The bq4802 is not supported, yet. */
+		if (ofw_bus_get_compat(dev) != NULL &&
+		    strcmp(ofw_bus_get_compat(dev), "bq4802") == 0)
+			return (ENXIO);
 		device_set_desc(dev, RTC_DESC);
 		return (0);
 	}
diff --git a/sys/sparc64/sparc64/stack_machdep.c b/sys/sparc64/sparc64/stack_machdep.c
index f05ad6b7f49..a4309ef45c4 100644
--- a/sys/sparc64/sparc64/stack_machdep.c
+++ b/sys/sparc64/sparc64/stack_machdep.c
@@ -36,15 +36,20 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-static void stack_capture(struct stack *st, struct frame *fp);
+static void stack_capture(struct stack *st, struct frame *frame);
 
 static void
-stack_capture(struct stack *st, struct frame *fp)
+stack_capture(struct stack *st, struct frame *frame)
 {
+	struct frame *fp;
 	vm_offset_t callpc;
 
 	stack_zero(st);
-	while (1) {
+	fp = frame;
+	for (;;) {
+		if (!INKERNEL((vm_offset_t)fp) ||
+		    !ALIGNED_POINTER(fp, uint64_t))
+                        break;
 		callpc = fp->fr_pc;
 		if (!INKERNEL(callpc))
 			break;
@@ -56,6 +61,9 @@ stack_capture(struct stack *st, struct frame *fp)
 			break;
 		if (stack_put(st, callpc) == -1)
 			break;
+		if (v9next_frame(fp) <= fp ||
+		    v9next_frame(fp) >= frame + KSTACK_PAGES * PAGE_SIZE)
+			break;
 		fp = v9next_frame(fp);
 	}
 }
diff --git a/sys/sparc64/sparc64/trap.c b/sys/sparc64/sparc64/trap.c
index 0c07eafd4f7..bfd7743e5e3 100644
--- a/sys/sparc64/sparc64/trap.c
+++ b/sys/sparc64/sparc64/trap.c
@@ -84,6 +84,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -409,7 +410,6 @@ trap_pfault(struct thread *td, struct trapframe *tf)
 	vm_prot_t prot;
 	vm_map_entry_t entry;
 	u_long ctx;
-	int flags;
 	int type;
 	int rv;
 
@@ -429,15 +429,13 @@ trap_pfault(struct thread *td, struct trapframe *tf)
 	CTR4(KTR_TRAP, "trap_pfault: td=%p pm_ctx=%#lx va=%#lx ctx=%#lx",
 	    td, p->p_vmspace->vm_pmap.pm_context[curcpu], va, ctx);
 
-	if (type == T_DATA_PROTECTION) {
+	if (type == T_DATA_PROTECTION)
 		prot = VM_PROT_WRITE;
-		flags = VM_FAULT_DIRTY;
-	} else {
+	else {
 		if (type == T_DATA_MISS)
 			prot = VM_PROT_READ;
 		else
 			prot = VM_PROT_READ | VM_PROT_EXECUTE;
-		flags = VM_FAULT_NORMAL;
 	}
 
 	if (ctx != TLB_CTX_KERNEL) {
@@ -463,7 +461,7 @@ trap_pfault(struct thread *td, struct trapframe *tf)
 		PROC_UNLOCK(p);
 
 		/* Fault in the user page. */
-		rv = vm_fault(&vm->vm_map, va, prot, flags);
+		rv = vm_fault(&vm->vm_map, va, prot, VM_FAULT_NORMAL);
 
 		/*
 		 * Now the process can be swapped again.
diff --git a/sys/sparc64/sparc64/upa.c b/sys/sparc64/sparc64/upa.c
index 7e81c8923ae..ecb11a2db4f 100644
--- a/sys/sparc64/sparc64/upa.c
+++ b/sys/sparc64/sparc64/upa.c
@@ -151,7 +151,7 @@ static device_method_t upa_methods[] = {
 static devclass_t upa_devclass;
 
 DEFINE_CLASS_0(upa, upa_driver, upa_methods, sizeof(struct upa_softc));
-DRIVER_MODULE(upa, nexus, upa_driver, upa_devclass, 0, 0);
+EARLY_DRIVER_MODULE(upa, nexus, upa_driver, upa_devclass, 0, 0, BUS_PASS_BUS);
 
 static const struct intr_controller upa_ic = {
 	upa_intr_enable,
diff --git a/sys/sun4v/conf/GENERIC b/sys/sun4v/conf/GENERIC
index ea72139d0a9..e0e2cc25b8b 100644
--- a/sys/sun4v/conf/GENERIC
+++ b/sys/sun4v/conf/GENERIC
@@ -169,6 +169,7 @@ device		bge		# Broadcom BCM570xx Gigabit Ethernet
 device		loop		# Network loopback
 device		random		# Entropy device
 device		ether		# Ethernet support
+device		vlan		# 802.1Q VLAN support
 device		tun		# Packet tunnel.
 device		pty		# BSD-style compatibility pseudo ttys
 device		md		# Memory "disks"
diff --git a/sys/sun4v/conf/NOTES b/sys/sun4v/conf/NOTES
index a773e5cffd6..b655ae278a6 100644
--- a/sys/sun4v/conf/NOTES
+++ b/sys/sun4v/conf/NOTES
@@ -19,39 +19,20 @@ cpu		SUN4V
 # HARDWARE BUS CONFIGURATION
 
 device		ebus
-#device		isa
+device		isa
 device		pci
-device		sbus
-#device		central
-device		fhc
 
 
 #####################################################################
 # HARDWARE DEVICE CONFIGURATION
 
-#
-# Mandatory devices:
-#
-
-#device		eeprom		# eeprom (really a front-end for the MK48Txx)
-device		mk48txx		# Mostek MK48Txx clocks
-#device		rtc		# rtc (really a front-end for the MC146818)
-device		mc146818	# Motorola MC146818 and compatible clocks
-
 #
 # Optional devices:
 #
 
-#device		auxio		# auxiliary I/O device
-#device		clkbrd		# Clock Board (blinkenlight on Sun Exx00)
-#device		creator		# Creator, Creator3D and Elite3D framebuffers
-#device		machfb		# ATI Mach64 framebuffers
-
 device		ofw_console	# Open Firmware console device
 option 		OFWCONS_POLL_HZ=4 # 20 or more works best on Ultra2
 
-#device		sab		# Siemens SAB82532 based serial ports
-
 
 #####################################################################
 # Devices we don't want to deal with
diff --git a/sys/sun4v/sun4v/stack_machdep.c b/sys/sun4v/sun4v/stack_machdep.c
index e29ce88ef73..6b91dc1d52f 100644
--- a/sys/sun4v/sun4v/stack_machdep.c
+++ b/sys/sun4v/sun4v/stack_machdep.c
@@ -36,20 +36,28 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-static void stack_capture(struct stack *st, struct frame *fp);
+static void stack_capture(struct stack *st, struct frame *frame);
 
 static void
-stack_capture(struct stack *st, struct frame *fp)
+stack_capture(struct stack *st, struct frame *frame)
 {
+	struct frame *fp;
 	vm_offset_t callpc;
 
 	stack_zero(st);
-	while (1) {
+	fp = frame;
+	for (;;) {
+		if (!INKERNEL((vm_offset_t)fp) ||
+		    !ALIGNED_POINTER(fp, uint64_t))
+                        break;
 		callpc = fp->fr_pc;
 		if (!INKERNEL(callpc))
 			break;
 		if (stack_put(st, callpc) == -1)
 			break;
+		if (v9next_frame(fp) <= fp ||
+		    v9next_frame(fp) >= frame + KSTACK_PAGES * PAGE_SIZE)
+			break;
 		fp = v9next_frame(fp);
 	}
 }
diff --git a/sys/sun4v/sun4v/trap.c b/sys/sun4v/sun4v/trap.c
index 353462da7c3..702fd5ce28f 100644
--- a/sys/sun4v/sun4v/trap.c
+++ b/sys/sun4v/sun4v/trap.c
@@ -460,7 +460,6 @@ trap_pfault(struct thread *td, struct trapframe *tf, int64_t type, uint64_t data
 	vm_offset_t va;
 	vm_prot_t prot;
 	u_long ctx;
-	int flags;
 	int rv;
 
 	if (td == NULL)
@@ -487,15 +486,13 @@ trap_pfault(struct thread *td, struct trapframe *tf, int64_t type, uint64_t data
 	KASSERT(td->td_proc->p_vmspace != NULL, ("trap_pfault: vmspace NULL"));
 
 
-	if (type == T_DATA_PROTECTION) {
+	if (type == T_DATA_PROTECTION)
 		prot = VM_PROT_WRITE;
-		flags = VM_FAULT_DIRTY;
-	} else {
+	else {
 		if (type == T_DATA_MISS)
 			prot = VM_PROT_READ;
 		else
 			prot = VM_PROT_READ | VM_PROT_EXECUTE;
-		flags = VM_FAULT_NORMAL;
 	}
 
 	if (ctx != TLB_CTX_KERNEL) {
@@ -521,7 +518,7 @@ trap_pfault(struct thread *td, struct trapframe *tf, int64_t type, uint64_t data
 		PROC_UNLOCK(p);
 
 		/* Fault in the user page. */
-		rv = vm_fault(&vm->vm_map, va, prot, flags);
+		rv = vm_fault(&vm->vm_map, va, prot, VM_FAULT_NORMAL);
 
 		/*
 		 * Now the process can be swapped again.
diff --git a/sys/sys/_lockmgr.h b/sys/sys/_lockmgr.h
index 0b99e1a4cba..0367ff1e7ba 100644
--- a/sys/sys/_lockmgr.h
+++ b/sys/sys/_lockmgr.h
@@ -38,6 +38,7 @@
 struct lock {
 	struct lock_object	lock_object;
 	volatile uintptr_t	lk_lock;
+	u_int			lk_exslpfail;
 	int			lk_timo;
 	int			lk_pri;
 #ifdef DEBUG_LOCKS
diff --git a/sys/sys/_semaphore.h b/sys/sys/_semaphore.h
index df3c5da1bd6..5266d044ff8 100644
--- a/sys/sys/_semaphore.h
+++ b/sys/sys/_semaphore.h
@@ -31,27 +31,10 @@
 typedef intptr_t semid_t;
 struct timespec;
 
+#define SEM_VALUE_MAX  __INT_MAX
+
 #ifndef _KERNEL
 
-#include 
-
-/*
- * Semaphore definitions.
- */
-struct sem {
-#define SEM_MAGIC       ((u_int32_t) 0x09fa4012)
-        u_int32_t       magic;
-        pthread_mutex_t lock;
-        pthread_cond_t  gtzero;
-        u_int32_t       count;
-        u_int32_t       nwaiters;
-#define SEM_USER        (NULL)
-        semid_t         semid;  /* semaphore id if kernel (shared) semaphore */
-        int             syssem; /* 1 if kernel (shared) semaphore */
-        LIST_ENTRY(sem) entry;
-        struct sem      **backpointer;
-};
-
 __BEGIN_DECLS
 
 int ksem_close(semid_t id);
diff --git a/sys/sys/_termios.h b/sys/sys/_termios.h
new file mode 100644
index 00000000000..3fb5bf4d441
--- /dev/null
+++ b/sys/sys/_termios.h
@@ -0,0 +1,222 @@
+/*-
+ * Copyright (c) 1988, 1989, 1993, 1994
+ *	The 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.
+ *
+ *	@(#)termios.h	8.3 (Berkeley) 3/28/94
+ * $FreeBSD$
+ */
+
+#ifndef _SYS__TERMIOS_H_
+#define	_SYS__TERMIOS_H_
+
+/*
+ * Special Control Characters
+ *
+ * Index into c_cc[] character array.
+ *
+ *	Name	     Subscript	Enabled by
+ */
+#define	VEOF		0	/* ICANON */
+#define	VEOL		1	/* ICANON */
+#ifndef _POSIX_SOURCE
+#define	VEOL2		2	/* ICANON together with IEXTEN */
+#endif
+#define	VERASE		3	/* ICANON */
+#ifndef _POSIX_SOURCE
+#define	VWERASE 	4	/* ICANON together with IEXTEN */
+#endif
+#define	VKILL		5	/* ICANON */
+#ifndef _POSIX_SOURCE
+#define	VREPRINT 	6	/* ICANON together with IEXTEN */
+#define	VERASE2 	7	/* ICANON */
+#endif
+/*			7	   ex-spare 1 */
+#define	VINTR		8	/* ISIG */
+#define	VQUIT		9	/* ISIG */
+#define	VSUSP		10	/* ISIG */
+#ifndef _POSIX_SOURCE
+#define	VDSUSP		11	/* ISIG together with IEXTEN */
+#endif
+#define	VSTART		12	/* IXON, IXOFF */
+#define	VSTOP		13	/* IXON, IXOFF */
+#ifndef _POSIX_SOURCE
+#define	VLNEXT		14	/* IEXTEN */
+#define	VDISCARD	15	/* IEXTEN */
+#endif
+#define	VMIN		16	/* !ICANON */
+#define	VTIME		17	/* !ICANON */
+#ifndef _POSIX_SOURCE
+#define	VSTATUS		18	/* ICANON together with IEXTEN */
+/*			19	   spare 2 */
+#endif
+#define	NCCS		20
+
+#define	_POSIX_VDISABLE	0xff
+
+/*
+ * Input flags - software input processing
+ */
+#define	IGNBRK		0x00000001	/* ignore BREAK condition */
+#define	BRKINT		0x00000002	/* map BREAK to SIGINTR */
+#define	IGNPAR		0x00000004	/* ignore (discard) parity errors */
+#define	PARMRK		0x00000008	/* mark parity and framing errors */
+#define	INPCK		0x00000010	/* enable checking of parity errors */
+#define	ISTRIP		0x00000020	/* strip 8th bit off chars */
+#define	INLCR		0x00000040	/* map NL into CR */
+#define	IGNCR		0x00000080	/* ignore CR */
+#define	ICRNL		0x00000100	/* map CR to NL (ala CRMOD) */
+#define	IXON		0x00000200	/* enable output flow control */
+#define	IXOFF		0x00000400	/* enable input flow control */
+#ifndef _POSIX_SOURCE
+#define	IXANY		0x00000800	/* any char will restart after stop */
+#define	IMAXBEL		0x00002000	/* ring bell on input queue full */
+#endif  /*_POSIX_SOURCE */
+
+/*
+ * Output flags - software output processing
+ */
+#define	OPOST		0x00000001	/* enable following output processing */
+#ifndef _POSIX_SOURCE
+#define	ONLCR		0x00000002	/* map NL to CR-NL (ala CRMOD) */
+#define	TABDLY		0x00000004	/* tab delay mask */
+#define	    TAB0	    0x00000000	    /* no tab delay and expansion */
+#define	    TAB3	    0x00000004	    /* expand tabs to spaces */
+#define	ONOEOT		0x00000008	/* discard EOT's (^D) on output) */
+#define	OCRNL		0x00000010	/* map CR to NL on output */
+#define	ONOCR		0x00000020	/* no CR output at column 0 */
+#define	ONLRET		0x00000040	/* NL performs CR function */
+#endif  /*_POSIX_SOURCE */
+
+/*
+ * Control flags - hardware control of terminal
+ */
+#ifndef _POSIX_SOURCE
+#define	CIGNORE		0x00000001	/* ignore control flags */
+#endif
+#define	CSIZE		0x00000300	/* character size mask */
+#define	    CS5		    0x00000000	    /* 5 bits (pseudo) */
+#define	    CS6		    0x00000100	    /* 6 bits */
+#define	    CS7		    0x00000200	    /* 7 bits */
+#define	    CS8		    0x00000300	    /* 8 bits */
+#define	CSTOPB		0x00000400	/* send 2 stop bits */
+#define	CREAD		0x00000800	/* enable receiver */
+#define	PARENB		0x00001000	/* parity enable */
+#define	PARODD		0x00002000	/* odd parity, else even */
+#define	HUPCL		0x00004000	/* hang up on last close */
+#define	CLOCAL		0x00008000	/* ignore modem status lines */
+#ifndef _POSIX_SOURCE
+#define	CCTS_OFLOW	0x00010000	/* CTS flow control of output */
+#define	CRTSCTS		(CCTS_OFLOW | CRTS_IFLOW)
+#define	CRTS_IFLOW	0x00020000	/* RTS flow control of input */
+#define	CDTR_IFLOW	0x00040000	/* DTR flow control of input */
+#define	CDSR_OFLOW	0x00080000	/* DSR flow control of output */
+#define	CCAR_OFLOW	0x00100000	/* DCD flow control of output */
+#endif
+
+
+/*
+ * "Local" flags - dumping ground for other state
+ *
+ * Warning: some flags in this structure begin with
+ * the letter "I" and look like they belong in the
+ * input flag.
+ */
+
+#ifndef _POSIX_SOURCE
+#define	ECHOKE		0x00000001	/* visual erase for line kill */
+#endif  /*_POSIX_SOURCE */
+#define	ECHOE		0x00000002	/* visually erase chars */
+#define	ECHOK		0x00000004	/* echo NL after line kill */
+#define	ECHO		0x00000008	/* enable echoing */
+#define	ECHONL		0x00000010	/* echo NL even if ECHO is off */
+#ifndef _POSIX_SOURCE
+#define	ECHOPRT		0x00000020	/* visual erase mode for hardcopy */
+#define	ECHOCTL  	0x00000040	/* echo control chars as ^(Char) */
+#endif  /*_POSIX_SOURCE */
+#define	ISIG		0x00000080	/* enable signals INTR, QUIT, [D]SUSP */
+#define	ICANON		0x00000100	/* canonicalize input lines */
+#ifndef _POSIX_SOURCE
+#define	ALTWERASE	0x00000200	/* use alternate WERASE algorithm */
+#endif  /*_POSIX_SOURCE */
+#define	IEXTEN		0x00000400	/* enable DISCARD and LNEXT */
+#define	EXTPROC         0x00000800      /* external processing */
+#define	TOSTOP		0x00400000	/* stop background jobs from output */
+#ifndef _POSIX_SOURCE
+#define	FLUSHO		0x00800000	/* output being flushed (state) */
+#define	NOKERNINFO	0x02000000	/* no kernel output from VSTATUS */
+#define	PENDIN		0x20000000	/* XXX retype pending input (state) */
+#endif  /*_POSIX_SOURCE */
+#define	NOFLSH		0x80000000	/* don't flush after interrupt */
+
+/*
+ * Standard speeds
+ */
+#define	B0	0
+#define	B50	50
+#define	B75	75
+#define	B110	110
+#define	B134	134
+#define	B150	150
+#define	B200	200
+#define	B300	300
+#define	B600	600
+#define	B1200	1200
+#define	B1800	1800
+#define	B2400	2400
+#define	B4800	4800
+#define	B9600	9600
+#define	B19200	19200
+#define	B38400	38400
+#ifndef _POSIX_SOURCE
+#define	B7200	7200
+#define	B14400	14400
+#define	B28800	28800
+#define	B57600	57600
+#define	B76800	76800
+#define	B115200	115200
+#define	B230400	230400
+#define	B460800	460800
+#define	B921600	921600
+#define	EXTA	19200
+#define	EXTB	38400
+#endif  /* !_POSIX_SOURCE */
+
+typedef unsigned int	tcflag_t;
+typedef unsigned char	cc_t;
+typedef unsigned int	speed_t;
+
+struct termios {
+	tcflag_t	c_iflag;	/* input flags */
+	tcflag_t	c_oflag;	/* output flags */
+	tcflag_t	c_cflag;	/* control flags */
+	tcflag_t	c_lflag;	/* local flags */
+	cc_t		c_cc[NCCS];	/* control chars */
+	speed_t		c_ispeed;	/* input speed */
+	speed_t		c_ospeed;	/* output speed */
+};
+
+#endif /* !_SYS__TERMIOS_H_ */
diff --git a/sys/sys/_umtx.h b/sys/sys/_umtx.h
new file mode 100644
index 00000000000..fcda9744c35
--- /dev/null
+++ b/sys/sys/_umtx.h
@@ -0,0 +1,66 @@
+/*-
+ * Copyright (c) 2010, David Xu 
+ * 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 unmodified, 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ *
+ */
+
+#ifndef _SYS__UMTX_H_
+#define	_SYS__UMTX_H_
+
+#include 
+
+struct umtx {
+	volatile unsigned long	u_owner;	/* Owner of the mutex. */
+};
+
+struct umutex {
+	volatile __lwpid_t	m_owner;	/* Owner of the mutex */
+	__uint32_t		m_flags;	/* Flags of the mutex */
+	__uint32_t		m_ceilings[2];	/* Priority protect ceiling */
+	__uint32_t		m_spare[4];
+};
+
+struct ucond {
+	volatile __uint32_t	c_has_waiters;	/* Has waiters in kernel */
+	__uint32_t		c_flags;	/* Flags of the condition variable */
+	__uint32_t		c_spare[2];	/* Spare space */
+};
+
+struct urwlock {
+	volatile __int32_t	rw_state;
+	__uint32_t		rw_flags;
+	__uint32_t		rw_blocked_readers;
+	__uint32_t		rw_blocked_writers;
+	__uint32_t		rw_spare[4];
+};
+
+struct _usem {
+	volatile __uint32_t	_has_waiters;
+	volatile __uint32_t	_count;
+	__uint32_t		_flags;
+};
+
+#endif /* !_SYS__UMTX_H_ */
diff --git a/sys/sys/acl.h b/sys/sys/acl.h
index 855e85c7ce6..80a3fe61637 100644
--- a/sys/sys/acl.h
+++ b/sys/sys/acl.h
@@ -99,13 +99,13 @@ struct oldacl {
  * Current "struct acl".
  */
 struct acl_entry {
-	acl_tag_t	ae_tag;
-	uid_t		ae_id;
-	acl_perm_t	ae_perm;
-	/* "allow" or "deny".  Unused in POSIX ACLs. */
+	acl_tag_t		ae_tag;
+	uid_t			ae_id;
+	acl_perm_t		ae_perm;
+	/* NFSv4 entry type, "allow" or "deny".  Unused in POSIX.1e ACLs. */
 	acl_entry_type_t	ae_entry_type;
-	/* Flags control inheritance.  Unused in POSIX ACLs. */
-	acl_flag_t	ae_flags;
+	/* NFSv4 ACL inheritance.  Unused in POSIX.1e ACLs. */
+	acl_flag_t		ae_flags;
 };
 typedef struct acl_entry	*acl_entry_t;
 
diff --git a/sys/sys/apm.h b/sys/sys/apm.h
index 5fbfa65bbb0..e1b0e85c9c2 100644
--- a/sys/sys/apm.h
+++ b/sys/sys/apm.h
@@ -61,6 +61,8 @@ struct apm_ent {
 #define	APM_ENT_TYPE_FREEBSD_VINUM	"FreeBSD-Vinum"
 #define	APM_ENT_TYPE_FREEBSD_ZFS	"FreeBSD-ZFS"
 
+#define	APM_ENT_TYPE_APPLE_BOOT		"Apple_Bootstrap"
 #define	APM_ENT_TYPE_APPLE_HFS		"Apple_HFS"
+#define	APM_ENT_TYPE_APPLE_UFS		"Apple_UNIX_SVR2"
 
 #endif /* _SYS_APM_H_ */
diff --git a/sys/sys/ata.h b/sys/sys/ata.h
index e6dd2fe22ad..fab5e387ab2 100644
--- a/sys/sys/ata.h
+++ b/sys/sys/ata.h
@@ -101,7 +101,9 @@ struct ata_params {
 /*066*/ u_int16_t       mwdmarec;               /* rec. M/W DMA time ns */
 /*067*/ u_int16_t       pioblind;               /* min. PIO cycle w/o flow */
 /*068*/ u_int16_t       pioiordy;               /* min. PIO cycle IORDY flow */
-	u_int16_t       reserved69;
+/*069*/ u_int16_t       support3;
+#define ATA_SUPPORT_RZAT                0x0020
+#define ATA_SUPPORT_DRAT                0x4000
 	u_int16_t       reserved70;
 /*071*/ u_int16_t       rlsovlap;               /* rel time (us) for overlap */
 /*072*/ u_int16_t       rlsservice;             /* rel time (us) for service */
@@ -204,7 +206,8 @@ struct ata_params {
 	u_int16_t       lba_size48_2;
 	u_int16_t       lba_size48_3;
 	u_int16_t       lba_size48_4;
-	u_int16_t       reserved104[2];
+	u_int16_t       reserved104;
+/*105*/	u_int16_t       max_dsm_blocks;
 /*106*/	u_int16_t       pss;
 #define ATA_PSS_LSPPS			0x000F
 #define ATA_PSS_LSSABOVE512		0x1000
@@ -230,7 +233,10 @@ struct ata_params {
 /*162*/ u_int16_t       cfa_kms_support;
 /*163*/ u_int16_t       cfa_trueide_modes;
 /*164*/ u_int16_t       cfa_memory_modes;
-	u_int16_t       reserved165[11];
+	u_int16_t       reserved165[4];
+/*169*/	u_int16_t       support_dsm;
+#define ATA_SUPPORT_DSM_TRIM		0x0001
+	u_int16_t       reserved170[6];
 /*176*/ u_int8_t        media_serial[60];
 /*206*/ u_int16_t       sct;
 	u_int16_t       reserved206[2];
@@ -278,15 +284,14 @@ struct ata_params {
 #define ATA_SA150               0x47
 #define ATA_SA300               0x48
 #define ATA_DMA_MAX             0x4f
-#define ATA_USB			0x80
-#define ATA_USB1		0x81
-#define ATA_USB2		0x82
 
 
 /* ATA commands */
 #define ATA_NOP                         0x00    /* NOP */
 #define         ATA_NF_FLUSHQUEUE       0x00    /* flush queued cmd's */
 #define         ATA_NF_AUTOPOLL         0x01    /* start autopoll function */
+#define ATA_DATA_SET_MANAGEMENT		0x06
+#define 	ATA_DSM_TRIM		0x01
 #define ATA_DEVICE_RESET                0x08    /* reset device */
 #define ATA_READ                        0x20    /* read */
 #define ATA_READ48                      0x24    /* read 48bit LBA */
@@ -294,12 +299,21 @@ struct ata_params {
 #define ATA_READ_DMA_QUEUED48           0x26    /* read DMA QUEUED 48bit LBA */
 #define ATA_READ_NATIVE_MAX_ADDRESS48   0x27    /* read native max addr 48bit */
 #define ATA_READ_MUL48                  0x29    /* read multi 48bit LBA */
+#define ATA_READ_STREAM_DMA48           0x2a    /* read DMA stream 48bit LBA */
+#define ATA_READ_STREAM48               0x2b    /* read stream 48bit LBA */
 #define ATA_WRITE                       0x30    /* write */
 #define ATA_WRITE48                     0x34    /* write 48bit LBA */
 #define ATA_WRITE_DMA48                 0x35    /* write DMA 48bit LBA */
 #define ATA_WRITE_DMA_QUEUED48          0x36    /* write DMA QUEUED 48bit LBA*/
 #define ATA_SET_MAX_ADDRESS48           0x37    /* set max address 48bit */
 #define ATA_WRITE_MUL48                 0x39    /* write multi 48bit LBA */
+#define ATA_WRITE_STREAM_DMA48          0x3a
+#define ATA_WRITE_STREAM48              0x3b
+#define ATA_WRITE_DMA_FUA48             0x3d
+#define ATA_WRITE_DMA_QUEUED_FUA48      0x3e
+#define ATA_WRITE_LOG_EXT               0x3f
+#define ATA_READ_VERIFY                 0x40
+#define ATA_READ_VERIFY48               0x42
 #define ATA_READ_FPDMA_QUEUED           0x60    /* read DMA NCQ */
 #define ATA_WRITE_FPDMA_QUEUED          0x61    /* write DMA NCQ */
 #define ATA_SEEK                        0x70    /* seek */
@@ -315,6 +329,7 @@ struct ata_params {
 #define ATA_READ_DMA                    0xc8    /* read DMA */
 #define ATA_WRITE_DMA                   0xca    /* write DMA */
 #define ATA_WRITE_DMA_QUEUED            0xcc    /* write DMA QUEUED */
+#define ATA_WRITE_MUL_FUA48             0xce
 #define ATA_STANDBY_IMMEDIATE           0xe0    /* standby immediate */
 #define ATA_IDLE_IMMEDIATE              0xe1    /* idle immediate */
 #define ATA_STANDBY_CMD                 0xe2    /* standby */
diff --git a/sys/sys/bio.h b/sys/sys/bio.h
index 5af902bdae6..8b6ff0ec696 100644
--- a/sys/sys/bio.h
+++ b/sys/sys/bio.h
@@ -40,6 +40,22 @@
 
 #include 
 
+/* bio_cmd */
+#define BIO_READ	0x01
+#define BIO_WRITE	0x02
+#define BIO_DELETE	0x04
+#define BIO_GETATTR	0x08
+#define BIO_FLUSH	0x10
+#define BIO_CMD0	0x20	/* Available for local hacks */
+#define BIO_CMD1	0x40	/* Available for local hacks */
+#define BIO_CMD2	0x80	/* Available for local hacks */
+
+/* bio_flags */
+#define BIO_ERROR	0x01
+#define BIO_DONE	0x02
+#define BIO_ONQUEUE	0x04
+
+#ifdef _KERNEL
 struct disk;
 struct bio;
 
@@ -95,23 +111,6 @@ struct bio {
 	daddr_t bio_pblkno;               /* physical block number */
 };
 
-/* bio_cmd */
-#define BIO_READ	0x01
-#define BIO_WRITE	0x02
-#define BIO_DELETE	0x04
-#define BIO_GETATTR	0x08
-#define BIO_FLUSH	0x10
-#define BIO_CMD0	0x20	/* Available for local hacks */
-#define BIO_CMD1	0x40	/* Available for local hacks */
-#define BIO_CMD2	0x80	/* Available for local hacks */
-
-/* bio_flags */
-#define BIO_ERROR	0x01
-#define BIO_DONE	0x02
-#define BIO_ONQUEUE	0x04
-
-#ifdef _KERNEL
-
 struct uio;
 struct devstat;
 
diff --git a/sys/sys/bus.h b/sys/sys/bus.h
index 92f4238e234..402d3cca862 100644
--- a/sys/sys/bus.h
+++ b/sys/sys/bus.h
@@ -231,6 +231,7 @@ struct resource_list_entry {
 	STAILQ_ENTRY(resource_list_entry) link;
 	int	type;			/**< @brief type argument to alloc_resource */
 	int	rid;			/**< @brief resource identifier */
+	int	flags;			/**< @brief resource flags */
 	struct	resource *res;		/**< @brief the real resource when allocated */
 	u_long	start;			/**< @brief start of resource range */
 	u_long	end;			/**< @brief end of resource range */
@@ -238,6 +239,9 @@ struct resource_list_entry {
 };
 STAILQ_HEAD(resource_list, resource_list_entry);
 
+#define	RLE_RESERVED		0x0001	/* Reserved by the parent bus. */
+#define	RLE_ALLOCATED		0x0002	/* Reserved resource is allocated. */
+
 void	resource_list_init(struct resource_list *rl);
 void	resource_list_free(struct resource_list *rl);
 struct resource_list_entry *
@@ -247,6 +251,8 @@ struct resource_list_entry *
 int	resource_list_add_next(struct resource_list *rl,
 			  int type,
 			  u_long start, u_long end, u_long count);
+int	resource_list_busy(struct resource_list *rl,
+			   int type, int rid);
 struct resource_list_entry*
 	resource_list_find(struct resource_list *rl,
 			   int type, int rid);
@@ -261,6 +267,15 @@ struct resource *
 int	resource_list_release(struct resource_list *rl,
 			      device_t bus, device_t child,
 			      int type, int rid, struct resource *res);
+struct resource *
+	resource_list_reserve(struct resource_list *rl,
+			      device_t bus, device_t child,
+			      int type, int *rid,
+			      u_long start, u_long end,
+			      u_long count, u_int flags);
+int	resource_list_unreserve(struct resource_list *rl,
+				device_t bus, device_t child,
+				int type, int rid);
 void	resource_list_purge(struct resource_list *rl);
 int	resource_list_print_type(struct resource_list *rl,
 				 const char *name, int type,
diff --git a/sys/sys/conf.h b/sys/sys/conf.h
index 4d89070128c..a18d6996a6c 100644
--- a/sys/sys/conf.h
+++ b/sys/sys/conf.h
@@ -135,9 +135,7 @@ typedef int d_read_t(struct cdev *dev, struct uio *uio, int ioflag);
 typedef int d_write_t(struct cdev *dev, struct uio *uio, int ioflag);
 typedef int d_poll_t(struct cdev *dev, int events, struct thread *td);
 typedef int d_kqfilter_t(struct cdev *dev, struct knote *kn);
-typedef int d_mmap_t(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
-   		     int nprot);
-typedef int d_mmap2_t(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr,
+typedef int d_mmap_t(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr,
 		     int nprot, vm_memattr_t *memattr);
 typedef int d_mmap_single_t(struct cdev *cdev, vm_ooffset_t *offset,
     vm_size_t size, struct vm_object **object, int nprot);
@@ -172,7 +170,6 @@ typedef int dumper_t(
 #define D_PSEUDO	0x00200000	/* make_dev() can return NULL */
 #define D_NEEDGIANT	0x00400000	/* driver want Giant */
 #define	D_NEEDMINOR	0x00800000	/* driver uses clone_create() */
-#define	D_MMAP2		0x01000000	/* driver uses d_mmap2() */
 
 /*
  * Version numbers.
@@ -180,7 +177,8 @@ typedef int dumper_t(
 #define D_VERSION_00	0x20011966
 #define D_VERSION_01	0x17032005	/* Add d_uid,gid,mode & kind */
 #define D_VERSION_02	0x28042009	/* Add d_mmap_single */
-#define D_VERSION	D_VERSION_02
+#define D_VERSION_03	0x17122009	/* d_mmap takes memattr,vm_ooffset_t */
+#define D_VERSION	D_VERSION_03
 
 /*
  * Flags used for internal housekeeping
@@ -201,10 +199,7 @@ struct cdevsw {
 	d_write_t		*d_write;
 	d_ioctl_t		*d_ioctl;
 	d_poll_t		*d_poll;
-	union {
-		d_mmap_t		*old;
-		d_mmap2_t		*new;
-	} __d_mmap;
+	d_mmap_t		*d_mmap;
 	d_strategy_t		*d_strategy;
 	dumper_t		*d_dump;
 	d_kqfilter_t		*d_kqfilter;
@@ -222,8 +217,6 @@ struct cdevsw {
 		SLIST_ENTRY(cdevsw)	postfree_list;
 	} __d_giant;
 };
-#define	d_mmap			__d_mmap.old
-#define	d_mmap2			__d_mmap.new
 #define	d_gianttrick		__d_giant.gianttrick
 #define	d_postfree_list		__d_giant.postfree_list
 
diff --git a/sys/sys/copyright.h b/sys/sys/copyright.h
index 1b0b96a5b98..62a4ac9d920 100644
--- a/sys/sys/copyright.h
+++ b/sys/sys/copyright.h
@@ -1,5 +1,5 @@
 /*-
- * Copyright (C) 1992-2009 The FreeBSD Project. All rights reserved.
+ * Copyright (C) 1992-2010 The FreeBSD Project. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -30,7 +30,7 @@
   
 /* FreeBSD */
 #define COPYRIGHT_FreeBSD \
-	"Copyright (c) 1992-2009 The FreeBSD Project.\n"
+	"Copyright (c) 1992-2010 The FreeBSD Project.\n"
 
 /* Foundation */
 #define	TRADEMARK_Foundation \
diff --git a/sys/sys/disk.h b/sys/sys/disk.h
index 4fe2e09c22f..422229ef69c 100644
--- a/sys/sys/disk.h
+++ b/sys/sys/disk.h
@@ -104,4 +104,16 @@ void disk_err(struct bio *bp, const char *what, int blkdone, int nl);
 	 * must be at least MAXPATHLEN bytes long.
 	 */
 
+#define DIOCGSTRIPESIZE	_IOR('d', 139, off_t)	/* Get stripe size in bytes */
+	/*-
+	 * Get the size of the device's optimal access block in bytes.
+	 * This should be a multiple of the sectorsize.
+	 */
+
+#define DIOCGSTRIPEOFFSET _IOR('d', 140, off_t)	/* Get stripe offset in bytes */
+	/*-
+	 * Get the offset of the first device's optimal access block in bytes.
+	 * This should be a multiple of the sectorsize.
+	 */
+
 #endif /* _SYS_DISK_H_ */
diff --git a/sys/sys/elf_common.h b/sys/sys/elf_common.h
index f642c710c8c..39f6d347b7a 100644
--- a/sys/sys/elf_common.h
+++ b/sys/sys/elf_common.h
@@ -471,6 +471,7 @@ typedef struct {
 #define	DF_1_BIND_NOW	0x00000001	/* Same as DF_BIND_NOW */
 #define	DF_1_GLOBAL	0x00000002	/* Set the RTLD_GLOBAL for object */
 #define	DF_1_NODELETE	0x00000008	/* Set the RTLD_NODELETE for object */
+#define	DF_1_NOOPEN     0x00000040	/* Do not allow loading on dlopen() */
 #define	DF_1_ORIGIN	0x00000080	/* Process $ORIGIN */
 
 /* Values for n_type.  Used in core files. */
diff --git a/sys/sys/event.h b/sys/sys/event.h
index 4365e44e58d..d92eb55d43d 100644
--- a/sys/sys/event.h
+++ b/sys/sys/event.h
@@ -38,7 +38,7 @@
 #define EVFILT_PROC		(-5)	/* attached to struct proc */
 #define EVFILT_SIGNAL		(-6)	/* attached to struct proc */
 #define EVFILT_TIMER		(-7)	/* timers */
-#define EVFILT_NETDEV		(-8)	/* network devices */
+/*	EVFILT_NETDEV		(-8)	   no longer supported */
 #define EVFILT_FS		(-9)	/* filesystem events */
 #define EVFILT_LIO		(-10)	/* attached to lio requests */
 #define EVFILT_USER		(-11)	/* User events */
@@ -131,13 +131,6 @@ struct kevent {
 #define	NOTE_TRACKERR	0x00000002		/* could not track child */
 #define	NOTE_CHILD	0x00000004		/* am a child process */
 
-/*
- * data/hint flags for EVFILT_NETDEV, shared with userspace
- */
-#define NOTE_LINKUP	0x0001			/* link is up */
-#define NOTE_LINKDOWN	0x0002			/* link is down */
-#define NOTE_LINKINV	0x0004			/* link state is invalid */
-
 struct knote;
 SLIST_HEAD(klist, knote);
 struct kqueue;
diff --git a/sys/sys/file.h b/sys/sys/file.h
index 5c58e8251ce..8ad30a5aee7 100644
--- a/sys/sys/file.h
+++ b/sys/sys/file.h
@@ -216,87 +216,62 @@ static __inline fo_stat_t	fo_stat;
 static __inline fo_close_t	fo_close;
 
 static __inline int
-fo_read(fp, uio, active_cred, flags, td)
-	struct file *fp;
-	struct uio *uio;
-	struct ucred *active_cred;
-	int flags;
-	struct thread *td;
+fo_read(struct file *fp, struct uio *uio, struct ucred *active_cred,
+    int flags, struct thread *td)
 {
 
 	return ((*fp->f_ops->fo_read)(fp, uio, active_cred, flags, td));
 }
 
 static __inline int
-fo_write(fp, uio, active_cred, flags, td)
-	struct file *fp;
-	struct uio *uio;
-	struct ucred *active_cred;
-	int flags;
-	struct thread *td;
+fo_write(struct file *fp, struct uio *uio, struct ucred *active_cred,
+    int flags, struct thread *td)
 {
 
 	return ((*fp->f_ops->fo_write)(fp, uio, active_cred, flags, td));
 }
 
 static __inline int
-fo_truncate(fp, length, active_cred, td)
-	struct file *fp;
-	off_t length;
-	struct ucred *active_cred;
-	struct thread *td;
+fo_truncate(struct file *fp, off_t length, struct ucred *active_cred,
+    struct thread *td)
 {
 
 	return ((*fp->f_ops->fo_truncate)(fp, length, active_cred, td));
 }
 
 static __inline int
-fo_ioctl(fp, com, data, active_cred, td)
-	struct file *fp;
-	u_long com;
-	void *data;
-	struct ucred *active_cred;
-	struct thread *td;
+fo_ioctl(struct file *fp, u_long com, void *data, struct ucred *active_cred,
+    struct thread *td)
 {
 
 	return ((*fp->f_ops->fo_ioctl)(fp, com, data, active_cred, td));
 }
 
 static __inline int
-fo_poll(fp, events, active_cred, td)
-	struct file *fp;
-	int events;
-	struct ucred *active_cred;
-	struct thread *td;
+fo_poll(struct file *fp, int events, struct ucred *active_cred,
+    struct thread *td)
 {
 
 	return ((*fp->f_ops->fo_poll)(fp, events, active_cred, td));
 }
 
 static __inline int
-fo_stat(fp, sb, active_cred, td)
-	struct file *fp;
-	struct stat *sb;
-	struct ucred *active_cred;
-	struct thread *td;
+fo_stat(struct file *fp, struct stat *sb, struct ucred *active_cred,
+    struct thread *td)
 {
 
 	return ((*fp->f_ops->fo_stat)(fp, sb, active_cred, td));
 }
 
 static __inline int
-fo_close(fp, td)
-	struct file *fp;
-	struct thread *td;
+fo_close(struct file *fp, struct thread *td)
 {
 
 	return ((*fp->f_ops->fo_close)(fp, td));
 }
 
 static __inline int
-fo_kqfilter(fp, kn)
-	struct file *fp;
-	struct knote *kn;
+fo_kqfilter(struct file *fp, struct knote *kn)
 {
 
 	return ((*fp->f_ops->fo_kqfilter)(fp, kn));
diff --git a/sys/sys/gpt.h b/sys/sys/gpt.h
index 1e6c595341d..a3e39f23d7f 100644
--- a/sys/sys/gpt.h
+++ b/sys/sys/gpt.h
@@ -117,6 +117,8 @@ struct gpt_ent {
 #define	GPT_ENT_TYPE_LINUX_LVM		\
 	{0xe6d6d379,0xf507,0x44c2,0xa2,0x3c,{0x23,0x8f,0x2a,0x3d,0xf9,0x28}}
 
+#define	GPT_ENT_TYPE_APPLE_BOOT		\
+	{0x426F6F74,0x0000,0x11aa,0xaa,0x11,{0x00,0x30,0x65,0x43,0xec,0xac}}
 #define	GPT_ENT_TYPE_APPLE_HFS		\
 	{0x48465300,0x0000,0x11aa,0xaa,0x11,{0x00,0x30,0x65,0x43,0xec,0xac}}
 #define	GPT_ENT_TYPE_APPLE_UFS		\
@@ -127,6 +129,10 @@ struct gpt_ent {
 	{0x52414944,0x0000,0x11aa,0xaa,0x22,{0x00,0x30,0x65,0x43,0xec,0xac}}
 #define	GPT_ENT_TYPE_APPLE_RAID_OFFLINE	\
 	{0x52414944,0x5f4f,0x11aa,0xaa,0x22,{0x00,0x30,0x65,0x43,0xec,0xac}}
+#define GPT_ENT_TYPE_APPLE_LABEL	\
+    	{0x4C616265,0x6c00,0x11aa,0xaa,0x11,{0x00,0x30,0x65,0x43,0xec,0xac}}
+#define	GPT_ENT_TYPE_APPLE_TV_RECOVERY	\
+    	{0x5265636f,0x7665,0x11AA,0xaa,0x11,{0x00,0x30,0x65,0x43,0xec,0xac}}
 
 #define	GPT_ENT_TYPE_NETBSD_FFS		\
 	{0x49f48d5a,0xb10e,0x11dc,0xb9,0x9b,{0x00,0x19,0xd1,0x87,0x96,0x48}}
diff --git a/sys/sys/jail.h b/sys/sys/jail.h
index cb26a64ec7d..2c5d1787786 100644
--- a/sys/sys/jail.h
+++ b/sys/sys/jail.h
@@ -335,6 +335,7 @@ struct mount;
 struct sockaddr;
 struct statfs;
 int jailed(struct ucred *cred);
+int jailed_without_vnet(struct ucred *);
 void getcredhostname(struct ucred *, char *, size_t);
 void getcreddomainname(struct ucred *, char *, size_t);
 void getcredhostuuid(struct ucred *, char *, size_t);
diff --git a/sys/sys/mount.h b/sys/sys/mount.h
index dbf8c20fcc8..b8264130a17 100644
--- a/sys/sys/mount.h
+++ b/sys/sys/mount.h
@@ -239,6 +239,7 @@ void          __mnt_vnode_markerfree(struct vnode **mvp, struct mount *mp);
 #define	MNT_NOATIME	0x10000000	/* disable update of file access time */
 #define	MNT_NOCLUSTERR	0x40000000	/* disable cluster read */
 #define	MNT_NOCLUSTERW	0x80000000	/* disable cluster write */
+#define	MNT_NFS4ACLS	0x00000010
 
 /*
  * NFS export related mount flags.
@@ -274,7 +275,7 @@ void          __mnt_vnode_markerfree(struct vnode **mvp, struct mount *mp);
 			MNT_ROOTFS	| MNT_NOATIME	| MNT_NOCLUSTERR| \
 			MNT_NOCLUSTERW	| MNT_SUIDDIR	| MNT_SOFTDEP	| \
 			MNT_IGNORE	| MNT_EXPUBLIC	| MNT_NOSYMFOLLOW | \
-			MNT_GJOURNAL	| MNT_MULTILABEL | MNT_ACLS)
+			MNT_GJOURNAL	| MNT_MULTILABEL | MNT_ACLS | MNT_NFS4ACLS)
 
 /* Mask of flags that can be updated. */
 #define	MNT_UPDATEMASK (MNT_NOSUID	| MNT_NOEXEC	| \
@@ -282,7 +283,7 @@ void          __mnt_vnode_markerfree(struct vnode **mvp, struct mount *mp);
 			MNT_NOATIME | \
 			MNT_NOSYMFOLLOW	| MNT_IGNORE	| \
 			MNT_NOCLUSTERR	| MNT_NOCLUSTERW | MNT_SUIDDIR	| \
-			MNT_ACLS	| MNT_USER)
+			MNT_ACLS	| MNT_USER | MNT_NFS4ACLS)
 
 /*
  * External filesystem command modifier flags.
@@ -299,10 +300,6 @@ void          __mnt_vnode_markerfree(struct vnode **mvp, struct mount *mp);
 #define	MNT_BYFSID	0x08000000	/* specify filesystem by ID. */
 #define MNT_CMDFLAGS   (MNT_UPDATE	| MNT_DELEXPORT	| MNT_RELOAD	| \
 			MNT_FORCE	| MNT_SNAPSHOT	| MNT_BYFSID)
-/*
- * Still available.
- */
-#define	MNT_SPARE_0x00000010	0x00000010
 /*
  * Internal filesystem control flags stored in mnt_kern_flag.
  *
diff --git a/sys/sys/param.h b/sys/sys/param.h
index a17151c9e4b..e3c356e0f76 100644
--- a/sys/sys/param.h
+++ b/sys/sys/param.h
@@ -58,7 +58,7 @@
  *		in the range 5 to 9.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 900003	/* Master, propagated to newvers */
+#define __FreeBSD_version 900006	/* Master, propagated to newvers */
 
 #ifndef LOCORE
 #include 
@@ -144,7 +144,14 @@
 
 #define MCLBYTES	(1 << MCLSHIFT)	/* size of an mbuf cluster */
 
-#define	MJUMPAGESIZE	PAGE_SIZE	/* jumbo cluster 4k */
+#if PAGE_SIZE < 2048
+#define	MJUMPAGESIZE	MCLBYTES
+#elif PAGE_SIZE <= 8192
+#define	MJUMPAGESIZE	PAGE_SIZE
+#else
+#define	MJUMPAGESIZE	(8 * 1024)
+#endif
+
 #define	MJUM9BYTES	(9 * 1024)	/* jumbo cluster 9k */
 #define	MJUM16BYTES	(16 * 1024)	/* jumbo cluster 16k */
 
diff --git a/sys/sys/pmc.h b/sys/sys/pmc.h
index 3bad4432624..f4a29ce911a 100644
--- a/sys/sys/pmc.h
+++ b/sys/sys/pmc.h
@@ -752,7 +752,8 @@ struct pmc_owner  {
 	struct pmclog_buffer	*po_curbuf;	/* current log buffer */
 	struct file		*po_file;	/* file reference */
 	int			po_error;	/* recorded error */
-	int			po_sscount;	/* # SS PMCs owned */
+	short			po_sscount;	/* # SS PMCs owned */
+	short			po_logprocmaps;	/* global mappings done */
 };
 
 #define	PMC_PO_OWNS_LOGFILE		0x00000001 /* has a log file */
diff --git a/sys/sys/priv.h b/sys/sys/priv.h
index 5738fca5d44..c8ccfa62a72 100644
--- a/sys/sys/priv.h
+++ b/sys/sys/priv.h
@@ -335,7 +335,6 @@
 #define	PRIV_NET_LAGG		415	/* Administer lagg interface. */
 #define	PRIV_NET_GIF		416	/* Administer gif interface. */
 #define	PRIV_NET_SETIFVNET	417	/* Move interface to vnet. */
-#define	PRIV_NET_SETIFDESCR	418	/* Set interface description. */
 
 /*
  * 802.11-related privileges.
diff --git a/sys/sys/proc.h b/sys/sys/proc.h
index 3eb6ea6a4d3..d8e9fc80b0a 100644
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -77,6 +77,7 @@ struct session {
 	u_int		s_count;	/* Ref cnt; pgrps in session - atomic. */
 	struct proc	*s_leader;	/* (m + e) Session leader. */
 	struct vnode	*s_ttyvp;	/* (m) Vnode of controlling tty. */
+	struct cdev_priv *s_ttydp;	/* (m) Device of controlling tty.  */
 	struct tty	*s_ttyp;	/* (e) Controlling tty. */
 	pid_t		s_sid;		/* (c) Session ID. */
 					/* (m) Setlogin() name: */
diff --git a/sys/sys/sdt.h b/sys/sys/sdt.h
index 8d212c8a96f..eeae665c141 100644
--- a/sys/sys/sdt.h
+++ b/sys/sys/sdt.h
@@ -59,6 +59,12 @@
 #define	SDT_PROBE_DEFINE4(prov, mod, func, name, arg0, arg1, arg2, arg3)
 #define	SDT_PROBE_DEFINE5(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4)
 
+#define	SDT_PROBE1(prov, mod, func, name, arg0)
+#define	SDT_PROBE2(prov, mod, func, name, arg0, arg1)
+#define	SDT_PROBE3(prov, mod, func, name, arg0, arg1, arg2)
+#define	SDT_PROBE4(prov, mod, func, name, arg0, arg1, arg2, arg3)
+#define	SDT_PROBE5(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4)
+
 #else
 
 /*
@@ -192,6 +198,17 @@ struct sdt_provider {
 	SDT_PROBE_ARGTYPE(prov, mod, func, name, 3, arg3);		\
 	SDT_PROBE_ARGTYPE(prov, mod, func, name, 4, arg4)
 
+#define	SDT_PROBE1(prov, mod, func, name, arg0)				\
+	SDT_PROBE(prov, mod, func, name, arg0, 0, 0, 0, 0)
+#define	SDT_PROBE2(prov, mod, func, name, arg0, arg1)			\
+	SDT_PROBE(prov, mod, func, name, arg0, arg1, 0, 0, 0)
+#define	SDT_PROBE3(prov, mod, func, name, arg0, arg1, arg2)		\
+	SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2,  0, 0)
+#define	SDT_PROBE4(prov, mod, func, name, arg0, arg1, arg2, arg3)	\
+	SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, 0)
+#define	SDT_PROBE5(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4) \
+	SDT_PROBE(prov, mod, func, name, arg0, arg1, arg2, arg3, arg4)
+
 typedef int (*sdt_argtype_listall_func_t)(struct sdt_argtype *, void *);
 typedef int (*sdt_probe_listall_func_t)(struct sdt_probe *, void *);
 typedef int (*sdt_provider_listall_func_t)(struct sdt_provider *, void *);
diff --git a/sys/sys/signal.h b/sys/sys/signal.h
index e90b107d170..ff2d1fcbed2 100644
--- a/sys/sys/signal.h
+++ b/sys/sys/signal.h
@@ -119,9 +119,8 @@
 #define	SIG_DFL		((__sighandler_t *)0)
 #define	SIG_IGN		((__sighandler_t *)1)
 #define	SIG_ERR		((__sighandler_t *)-1)
-/*
- * XXX missing SIG_HOLD.
- */
+/* #define	SIG_CATCH	((__sighandler_t *)2) See signalvar.h */
+#define SIG_HOLD        ((__sighandler_t *)3)
 
 /*-
  * Type of a signal handling function.
@@ -338,6 +337,7 @@ struct sigaction {
 					/* an asynchronous I/O request.*/
 #define	SI_MESGQ	0x10005		/* Signal generated by arrival of a */
 					/* message on an empty message queue. */
+#define	SI_KERNEL	0x10006
 #endif
 #if __BSD_VISIBLE
 #define	SI_UNDEFINED	0
diff --git a/sys/sys/signalvar.h b/sys/sys/signalvar.h
index 65d9cf53ef3..c9455c2b83c 100644
--- a/sys/sys/signalvar.h
+++ b/sys/sys/signalvar.h
@@ -97,7 +97,7 @@ typedef void __osiginfohandler_t(int, osiginfo_t *, void *);
 
 /* additional signal action values, used only temporarily/internally */
 #define	SIG_CATCH	((__sighandler_t *)2)
-#define SIG_HOLD        ((__sighandler_t *)3)
+/* #define SIG_HOLD        ((__sighandler_t *)3) See signal.h */
 
 /*
  * get signal action for process and signal; currently only for current process
@@ -233,7 +233,8 @@ typedef struct ksiginfo {
 #define KSI_TRAP	0x01	/* Generated by trap. */
 #define	KSI_EXT		0x02	/* Externally managed ksi. */
 #define KSI_INS		0x04	/* Directly insert ksi, not the copy */
-#define	KSI_COPYMASK	KSI_TRAP
+#define	KSI_SIGQ	0x08	/* Generated by sigqueue, might ret EGAIN. */
+#define	KSI_COPYMASK	(KSI_TRAP|KSI_SIGQ)
 
 #define	KSI_ONQ(ksi)	((ksi)->ksi_sigq != NULL)
 
@@ -326,10 +327,11 @@ extern int kern_logsigexit;	/* Sysctl variable kern.logsigexit */
  */
 int	cursig(struct thread *td, int stop_allowed);
 void	execsigs(struct proc *p);
-void	gsignal(int pgid, int sig);
+void	gsignal(int pgid, int sig, ksiginfo_t *ksi);
 void	killproc(struct proc *p, char *why);
+void	pksignal(struct proc *p, int sig, ksiginfo_t *ksi);
 void	pgsigio(struct sigio **, int signum, int checkctty);
-void	pgsignal(struct pgrp *pgrp, int sig, int checkctty);
+void	pgsignal(struct pgrp *pgrp, int sig, int checkctty, ksiginfo_t *ksi);
 int	postsig(int sig);
 void	psignal(struct proc *p, int sig);
 int	psignal_event(struct proc *p, struct sigevent *, ksiginfo_t *);
diff --git a/sys/sys/sleepqueue.h b/sys/sys/sleepqueue.h
index 362945aabeb..224d602c01f 100644
--- a/sys/sys/sleepqueue.h
+++ b/sys/sys/sleepqueue.h
@@ -109,6 +109,7 @@ void	sleepq_release(void *wchan);
 void	sleepq_remove(struct thread *td, void *wchan);
 int	sleepq_signal(void *wchan, int flags, int pri, int queue);
 void	sleepq_set_timeout(void *wchan, int timo);
+u_int	sleepq_sleepcnt(void *wchan, int queue);
 int	sleepq_timedwait(void *wchan, int pri);
 int	sleepq_timedwait_sig(void *wchan, int pri);
 void	sleepq_wait(void *wchan, int pri);
diff --git a/sys/sys/sockio.h b/sys/sys/sockio.h
index 2af2467da3b..a5911b7a0d1 100644
--- a/sys/sys/sockio.h
+++ b/sys/sys/sockio.h
@@ -82,8 +82,6 @@
 #define	SIOCGIFMAC	_IOWR('i', 38, struct ifreq)	/* get IF MAC label */
 #define	SIOCSIFMAC	 _IOW('i', 39, struct ifreq)	/* set IF MAC label */
 #define	SIOCSIFNAME	 _IOW('i', 40, struct ifreq)	/* set IF name */
-#define	SIOCSIFDESCR	 _IOW('i', 41, struct ifreq)	/* set ifnet descr */ 
-#define	SIOCGIFDESCR	_IOWR('i', 42, struct ifreq)	/* get ifnet descr */ 
 
 #define	SIOCADDMULTI	 _IOW('i', 49, struct ifreq)	/* add m'cast addr */
 #define	SIOCDELMULTI	 _IOW('i', 50, struct ifreq)	/* del m'cast addr */
diff --git a/sys/sys/termios.h b/sys/sys/termios.h
index 0543d6ee64b..e5bacf46550 100644
--- a/sys/sys/termios.h
+++ b/sys/sys/termios.h
@@ -1,302 +1,5 @@
-/*-
- * Copyright (c) 1988, 1989, 1993, 1994
- *	The 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.
- *
- *	@(#)termios.h	8.3 (Berkeley) 3/28/94
- * $FreeBSD$
- */
-
-#ifndef _SYS_TERMIOS_H_
-#define	_SYS_TERMIOS_H_
-
-#include 
-#ifndef _PID_T_DECLARED
-typedef	__pid_t		pid_t;
-#define	_PID_T_DECLARED
-#endif
-
-/*
- * Special Control Characters
- *
- * Index into c_cc[] character array.
- *
- *	Name	     Subscript	Enabled by
- */
-#define	VEOF		0	/* ICANON */
-#define	VEOL		1	/* ICANON */
-#ifndef _POSIX_SOURCE
-#define	VEOL2		2	/* ICANON together with IEXTEN */
-#endif
-#define	VERASE		3	/* ICANON */
-#ifndef _POSIX_SOURCE
-#define	VWERASE 	4	/* ICANON together with IEXTEN */
-#endif
-#define	VKILL		5	/* ICANON */
-#ifndef _POSIX_SOURCE
-#define	VREPRINT 	6	/* ICANON together with IEXTEN */
-#define	VERASE2 	7	/* ICANON */
-#endif
-/*			7	   ex-spare 1 */
-#define	VINTR		8	/* ISIG */
-#define	VQUIT		9	/* ISIG */
-#define	VSUSP		10	/* ISIG */
-#ifndef _POSIX_SOURCE
-#define	VDSUSP		11	/* ISIG together with IEXTEN */
-#endif
-#define	VSTART		12	/* IXON, IXOFF */
-#define	VSTOP		13	/* IXON, IXOFF */
-#ifndef _POSIX_SOURCE
-#define	VLNEXT		14	/* IEXTEN */
-#define	VDISCARD	15	/* IEXTEN */
-#endif
-#define	VMIN		16	/* !ICANON */
-#define	VTIME		17	/* !ICANON */
-#ifndef _POSIX_SOURCE
-#define	VSTATUS		18	/* ICANON together with IEXTEN */
-/*			19	   spare 2 */
-#endif
-#define	NCCS		20
-
-#define	_POSIX_VDISABLE	0xff
-
-/*
- * Input flags - software input processing
- */
-#define	IGNBRK		0x00000001	/* ignore BREAK condition */
-#define	BRKINT		0x00000002	/* map BREAK to SIGINTR */
-#define	IGNPAR		0x00000004	/* ignore (discard) parity errors */
-#define	PARMRK		0x00000008	/* mark parity and framing errors */
-#define	INPCK		0x00000010	/* enable checking of parity errors */
-#define	ISTRIP		0x00000020	/* strip 8th bit off chars */
-#define	INLCR		0x00000040	/* map NL into CR */
-#define	IGNCR		0x00000080	/* ignore CR */
-#define	ICRNL		0x00000100	/* map CR to NL (ala CRMOD) */
-#define	IXON		0x00000200	/* enable output flow control */
-#define	IXOFF		0x00000400	/* enable input flow control */
-#ifndef _POSIX_SOURCE
-#define	IXANY		0x00000800	/* any char will restart after stop */
-#define	IMAXBEL		0x00002000	/* ring bell on input queue full */
-#endif  /*_POSIX_SOURCE */
-
-/*
- * Output flags - software output processing
- */
-#define	OPOST		0x00000001	/* enable following output processing */
-#ifndef _POSIX_SOURCE
-#define	ONLCR		0x00000002	/* map NL to CR-NL (ala CRMOD) */
-#define	TABDLY		0x00000004	/* tab delay mask */
-#define	    TAB0	    0x00000000	    /* no tab delay and expansion */
-#define	    TAB3	    0x00000004	    /* expand tabs to spaces */
-#ifndef _KERNEL
-#define	OXTABS		TAB3
-#endif /* !_KERNEL */
-#define	ONOEOT		0x00000008	/* discard EOT's (^D) on output) */
-#define	OCRNL		0x00000010	/* map CR to NL on output */
-#define	ONOCR		0x00000020	/* no CR output at column 0 */
-#define	ONLRET		0x00000040	/* NL performs CR function */
-#endif  /*_POSIX_SOURCE */
-
-/*
- * Control flags - hardware control of terminal
- */
-#ifndef _POSIX_SOURCE
-#define	CIGNORE		0x00000001	/* ignore control flags */
-#endif
-#define	CSIZE		0x00000300	/* character size mask */
-#define	    CS5		    0x00000000	    /* 5 bits (pseudo) */
-#define	    CS6		    0x00000100	    /* 6 bits */
-#define	    CS7		    0x00000200	    /* 7 bits */
-#define	    CS8		    0x00000300	    /* 8 bits */
-#define	CSTOPB		0x00000400	/* send 2 stop bits */
-#define	CREAD		0x00000800	/* enable receiver */
-#define	PARENB		0x00001000	/* parity enable */
-#define	PARODD		0x00002000	/* odd parity, else even */
-#define	HUPCL		0x00004000	/* hang up on last close */
-#define	CLOCAL		0x00008000	/* ignore modem status lines */
-#ifndef _POSIX_SOURCE
-#define	CCTS_OFLOW	0x00010000	/* CTS flow control of output */
-#define	CRTSCTS		(CCTS_OFLOW | CRTS_IFLOW)
-#define	CRTS_IFLOW	0x00020000	/* RTS flow control of input */
-#define	CDTR_IFLOW	0x00040000	/* DTR flow control of input */
-#define	CDSR_OFLOW	0x00080000	/* DSR flow control of output */
-#define	CCAR_OFLOW	0x00100000	/* DCD flow control of output */
-#ifndef _KERNEL
-#define	MDMBUF		CCAR_OFLOW
-#endif /* !_KERNEL */
-#endif
-
-
-/*
- * "Local" flags - dumping ground for other state
- *
- * Warning: some flags in this structure begin with
- * the letter "I" and look like they belong in the
- * input flag.
- */
-
-#ifndef _POSIX_SOURCE
-#define	ECHOKE		0x00000001	/* visual erase for line kill */
-#endif  /*_POSIX_SOURCE */
-#define	ECHOE		0x00000002	/* visually erase chars */
-#define	ECHOK		0x00000004	/* echo NL after line kill */
-#define	ECHO		0x00000008	/* enable echoing */
-#define	ECHONL		0x00000010	/* echo NL even if ECHO is off */
-#ifndef _POSIX_SOURCE
-#define	ECHOPRT		0x00000020	/* visual erase mode for hardcopy */
-#define	ECHOCTL  	0x00000040	/* echo control chars as ^(Char) */
-#endif  /*_POSIX_SOURCE */
-#define	ISIG		0x00000080	/* enable signals INTR, QUIT, [D]SUSP */
-#define	ICANON		0x00000100	/* canonicalize input lines */
-#ifndef _POSIX_SOURCE
-#define	ALTWERASE	0x00000200	/* use alternate WERASE algorithm */
-#endif  /*_POSIX_SOURCE */
-#define	IEXTEN		0x00000400	/* enable DISCARD and LNEXT */
-#define	EXTPROC         0x00000800      /* external processing */
-#define	TOSTOP		0x00400000	/* stop background jobs from output */
-#ifndef _POSIX_SOURCE
-#define	FLUSHO		0x00800000	/* output being flushed (state) */
-#define	NOKERNINFO	0x02000000	/* no kernel output from VSTATUS */
-#define	PENDIN		0x20000000	/* XXX retype pending input (state) */
-#endif  /*_POSIX_SOURCE */
-#define	NOFLSH		0x80000000	/* don't flush after interrupt */
-
-typedef unsigned int	tcflag_t;
-typedef unsigned char	cc_t;
-typedef unsigned int	speed_t;
-
-struct termios {
-	tcflag_t	c_iflag;	/* input flags */
-	tcflag_t	c_oflag;	/* output flags */
-	tcflag_t	c_cflag;	/* control flags */
-	tcflag_t	c_lflag;	/* local flags */
-	cc_t		c_cc[NCCS];	/* control chars */
-	speed_t		c_ispeed;	/* input speed */
-	speed_t		c_ospeed;	/* output speed */
-};
-
-/*
- * Standard speeds
- */
-#define	B0	0
-#define	B50	50
-#define	B75	75
-#define	B110	110
-#define	B134	134
-#define	B150	150
-#define	B200	200
-#define	B300	300
-#define	B600	600
-#define	B1200	1200
-#define	B1800	1800
-#define	B2400	2400
-#define	B4800	4800
-#define	B9600	9600
-#define	B19200	19200
-#define	B38400	38400
-#ifndef _POSIX_SOURCE
-#define	B7200	7200
-#define	B14400	14400
-#define	B28800	28800
-#define	B57600	57600
-#define	B76800	76800
-#define	B115200	115200
-#define	B230400	230400
-#define	B460800	460800
-#define	B921600	921600
-#define	EXTA	19200
-#define	EXTB	38400
-#endif  /* !_POSIX_SOURCE */
-
-#ifndef _KERNEL
-
-#ifndef _POSIX_SOURCE
-#define	CCEQ(val, c)	((c) == (val) && (val) != _POSIX_VDISABLE)
-#endif
-
-/*
- * Commands passed to tcsetattr() for setting the termios structure.
- */
-#define	TCSANOW		0		/* make change immediate */
-#define	TCSADRAIN	1		/* drain output, then change */
-#define	TCSAFLUSH	2		/* drain output, flush input */
-#ifndef _POSIX_SOURCE
-#define	TCSASOFT	0x10		/* flag - don't alter h.w. state */
-#endif
-
-#define	TCIFLUSH	1
-#define	TCOFLUSH	2
-#define	TCIOFLUSH	3
-#define	TCOOFF		1
-#define	TCOON		2
-#define	TCIOFF		3
-#define	TCION		4
-
-#include 
-
-__BEGIN_DECLS
-speed_t	cfgetispeed(const struct termios *);
-speed_t	cfgetospeed(const struct termios *);
-int	cfsetispeed(struct termios *, speed_t);
-int	cfsetospeed(struct termios *, speed_t);
-int	tcgetattr(int, struct termios *);
-int	tcsetattr(int, int, const struct termios *);
-int	tcdrain(int);
-int	tcflow(int, int);
-int	tcflush(int, int);
-int	tcsendbreak(int, int);
-
-#if __POSIX_VISIBLE >= 200112 || __BSD_VISIBLE
-pid_t	tcgetsid(int);
-#endif
-#if __BSD_VISIBLE
-int	tcsetsid(int, pid_t);
-
-void	cfmakeraw(struct termios *);
-int	cfsetspeed(struct termios *, speed_t);
-#endif
-__END_DECLS
-
-#endif /* !_KERNEL */
-
-#ifndef _POSIX_SOURCE
-
-/*
- * Include tty ioctl's that aren't just for backwards compatibility
- * with the old tty driver.  These ioctl definitions were previously
- * in .
- */
-#include 
-#endif
-
-/*
- * END OF PROTECTED INCLUDE.
- */
-#endif /* !_SYS_TERMIOS_H_ */
-
-#ifndef _POSIX_SOURCE
-#include 
+/* $FreeBSD$ */
+#ifdef __GNUC__
+#warning "this file includes  which is deprecated, use  instead"
 #endif
+#include 
diff --git a/sys/sys/tty.h b/sys/sys/tty.h
index 13c89f92c07..c594e11211d 100644
--- a/sys/sys/tty.h
+++ b/sys/sys/tty.h
@@ -38,7 +38,7 @@
 #include 
 #include 
 #include 
-#include 
+#include 
 #include 
 #include 
 
@@ -182,9 +182,10 @@ void	tty_wakeup(struct tty *tp, int flags);
 int	tty_checkoutq(struct tty *tp);
 int	tty_putchar(struct tty *tp, char c);
 
-int	tty_ioctl(struct tty *tp, u_long cmd, void *data, struct thread *td);
-int	tty_ioctl_compat(struct tty *tp, u_long cmd, caddr_t data,
+int	tty_ioctl(struct tty *tp, u_long cmd, void *data, int fflag,
     struct thread *td);
+int	tty_ioctl_compat(struct tty *tp, u_long cmd, caddr_t data,
+    int fflag, struct thread *td);
 void	tty_init_console(struct tty *tp, speed_t speed);
 void	tty_flush(struct tty *tp, int flags);
 void	tty_hiwat_in_block(struct tty *tp);
diff --git a/sys/sys/ttydevsw.h b/sys/sys/ttydevsw.h
index e2278c3ab43..4506919832f 100644
--- a/sys/sys/ttydevsw.h
+++ b/sys/sys/ttydevsw.h
@@ -48,8 +48,8 @@ typedef int tsw_ioctl_t(struct tty *tp, u_long cmd, caddr_t data,
     struct thread *td);
 typedef int tsw_param_t(struct tty *tp, struct termios *t);
 typedef int tsw_modem_t(struct tty *tp, int sigon, int sigoff);
-typedef int tsw_mmap_t(struct tty *tp, vm_offset_t offset,
-    vm_paddr_t * paddr, int nprot);
+typedef int tsw_mmap_t(struct tty *tp, vm_ooffset_t offset,
+    vm_paddr_t * paddr, int nprot, vm_memattr_t *memattr);
 typedef void tsw_pktnotify_t(struct tty *tp, char event);
 typedef void tsw_free_t(void *softc);
 
@@ -142,11 +142,12 @@ ttydevsw_modem(struct tty *tp, int sigon, int sigoff)
 }
 
 static __inline int
-ttydevsw_mmap(struct tty *tp, vm_offset_t offset, vm_paddr_t *paddr, int nprot)
+ttydevsw_mmap(struct tty *tp, vm_ooffset_t offset, vm_paddr_t *paddr,
+    int nprot, vm_memattr_t *memattr)
 {
 	MPASS(!tty_gone(tp));
 
-	return tp->t_devsw->tsw_mmap(tp, offset, paddr, nprot);
+	return tp->t_devsw->tsw_mmap(tp, offset, paddr, nprot, memattr);
 }
 
 static __inline void
diff --git a/sys/sys/umtx.h b/sys/sys/umtx.h
index 2d45677ee1a..dab862ef1b9 100644
--- a/sys/sys/umtx.h
+++ b/sys/sys/umtx.h
@@ -30,19 +30,11 @@
 #ifndef _SYS_UMTX_H_
 #define	_SYS_UMTX_H_
 
-#include 
+#include 
 #include 
 
-/* 
- * See pthread_*
- */
-
-#define	UMTX_UNOWNED	0x0
-#define	UMTX_CONTESTED	LONG_MIN
-
-struct umtx {
-	volatile u_long	u_owner;	/* Owner of the mutex. */
-};
+#define	UMTX_UNOWNED		0x0
+#define	UMTX_CONTESTED		LONG_MIN
 
 #define USYNC_PROCESS_SHARED	0x0001	/* Process shared sync objs */
 
@@ -53,27 +45,6 @@ struct umtx {
 #define	UMUTEX_PRIO_INHERIT	0x0004	/* Priority inherited mutex */
 #define	UMUTEX_PRIO_PROTECT	0x0008	/* Priority protect mutex */
 
-struct umutex {
-	volatile __lwpid_t	m_owner;	/* Owner of the mutex */
-	uint32_t		m_flags;	/* Flags of the mutex */
-	uint32_t		m_ceilings[2];	/* Priority protect ceiling */
-	uint32_t		m_spare[4];
-};
-
-struct ucond {
-	volatile uint32_t	c_has_waiters;	/* Has waiters in kernel */
-	uint32_t		c_flags;	/* Flags of the condition variable */
-	uint32_t		c_spare[2];	/* Spare space */
-};
-
-struct urwlock {
-	volatile int32_t	rw_state;
-	uint32_t		rw_flags;
-	uint32_t		rw_blocked_readers;
-	uint32_t		rw_blocked_writers;
-	uint32_t		rw_spare[4];
-};
-
 /* urwlock flags */
 #define URWLOCK_PREFER_READER	0x0002
 
@@ -83,6 +54,9 @@ struct urwlock {
 #define URWLOCK_MAX_READERS	0x1fffffffU
 #define URWLOCK_READER_COUNT(c)	((c) & URWLOCK_MAX_READERS)
 
+/* _usem flags */
+#define SEM_NAMED	0x0002
+
 /* op code for _umtx_op */
 #define	UMTX_OP_LOCK		0
 #define	UMTX_OP_UNLOCK		1
@@ -100,10 +74,12 @@ struct urwlock {
 #define	UMTX_OP_RW_WRLOCK	13
 #define	UMTX_OP_RW_UNLOCK	14
 #define	UMTX_OP_WAIT_UINT_PRIVATE	15
-#define	UMTX_OP_WAKE_PRIVATE		16
-#define	UMTX_OP_MUTEX_WAIT		17
-#define	UMTX_OP_MUTEX_WAKE		18
-#define	UMTX_OP_MAX		19
+#define	UMTX_OP_WAKE_PRIVATE	16
+#define	UMTX_OP_MUTEX_WAIT	17
+#define	UMTX_OP_MUTEX_WAKE	18
+#define	UMTX_OP_SEM_WAIT	19
+#define	UMTX_OP_SEM_WAKE	20
+#define	UMTX_OP_MAX		21
 
 /* flags for UMTX_OP_CV_WAIT */
 #define UMTX_CHECK_UNPARKING	0x01
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index b38c1d08746..fc919a95927 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -237,7 +237,6 @@ struct xvnode {
 #define	VI_AGE		0x0040	/* Insert vnode at head of free list */
 #define	VI_DOOMED	0x0080	/* This vnode is being recycled */
 #define	VI_FREE		0x0100	/* This vnode is on the freelist */
-#define	VI_OBJDIRTY	0x0400	/* object might be dirty */
 #define	VI_DOINGINACT	0x0800	/* VOP_INACTIVE is in progress */
 #define	VI_OWEINACT	0x1000	/* Need to call inactive */
 
diff --git a/sys/ufs/ffs/ffs_rawread.c b/sys/ufs/ffs/ffs_rawread.c
index 434c833f7c3..574d89c57d3 100644
--- a/sys/ufs/ffs/ffs_rawread.c
+++ b/sys/ufs/ffs/ffs_rawread.c
@@ -101,6 +101,7 @@ ffs_rawread_sync(struct vnode *vp)
 	int upgraded;
 	struct bufobj *bo;
 	struct mount *mp;
+	vm_object_t obj;
 
 	/* Check for dirty mmap, pending writes and dirty buffers */
 	bo = &vp->v_bufobj;
@@ -108,7 +109,8 @@ ffs_rawread_sync(struct vnode *vp)
 	VI_LOCK(vp);
 	if (bo->bo_numoutput > 0 ||
 	    bo->bo_dirty.bv_cnt > 0 ||
-	    (vp->v_iflag & VI_OBJDIRTY) != 0) {
+	    ((obj = vp->v_object) != NULL &&
+	     (obj->flags & OBJ_MIGHTBEDIRTY) != 0)) {
 		VI_UNLOCK(vp);
 		BO_UNLOCK(bo);
 		
@@ -138,13 +140,12 @@ ffs_rawread_sync(struct vnode *vp)
 			return (EIO);
 		}
 		/* Attempt to msync mmap() regions to clean dirty mmap */ 
-		if ((vp->v_iflag & VI_OBJDIRTY) != 0) {
+		if ((obj = vp->v_object) != NULL &&
+		    (obj->flags & OBJ_MIGHTBEDIRTY) != 0) {
 			VI_UNLOCK(vp);
-			if (vp->v_object != NULL) {
-				VM_OBJECT_LOCK(vp->v_object);
-				vm_object_page_clean(vp->v_object, 0, 0, OBJPC_SYNC);
-				VM_OBJECT_UNLOCK(vp->v_object);
-			}
+			VM_OBJECT_LOCK(obj);
+			vm_object_page_clean(obj, 0, 0, OBJPC_SYNC);
+			VM_OBJECT_UNLOCK(obj);
 		} else
 			VI_UNLOCK(vp);
 
diff --git a/sys/ufs/ffs/ffs_vfsops.c b/sys/ufs/ffs/ffs_vfsops.c
index d3d7c2c6073..6eb89642645 100644
--- a/sys/ufs/ffs/ffs_vfsops.c
+++ b/sys/ufs/ffs/ffs_vfsops.c
@@ -128,7 +128,7 @@ static struct buf_ops ffs_ops = {
 static const char *ffs_opts[] = { "acls", "async", "noatime", "noclusterr",
     "noclusterw", "noexec", "export", "force", "from", "multilabel", 
     "snapshot", "nosuid", "suiddir", "nosymfollow", "sync",
-    "union", NULL };
+    "union", "nfsv4acls", NULL };
 
 static int
 ffs_mount(struct mount *mp)
@@ -177,6 +177,15 @@ ffs_mount(struct mount *mp)
 		vfs_deleteopt(mp->mnt_opt, "snapshot");
 	}
 
+	if (vfs_getopt(mp->mnt_optnew, "nfsv4acls", NULL, NULL) == 0) {
+		if (mntorflags & MNT_ACLS) {
+			printf("WARNING: \"acls\" and \"nfsv4acls\" "
+			    "options are mutually exclusive\n");
+			return (EINVAL);
+		}
+		mntorflags |= MNT_NFS4ACLS;
+	}
+
 	MNT_ILOCK(mp);
 	mp->mnt_flag = (mp->mnt_flag | mntorflags) & ~mntandnotflags;
 	MNT_IUNLOCK(mp);
@@ -360,6 +369,13 @@ ffs_mount(struct mount *mp)
 			MNT_IUNLOCK(mp);
 		}
 
+		if ((fs->fs_flags & FS_NFS4ACLS) != 0) {
+			/* XXX: Set too late ? */
+			MNT_ILOCK(mp);
+			mp->mnt_flag |= MNT_NFS4ACLS;
+			MNT_IUNLOCK(mp);
+		}
+	
 		/*
 		 * If this is a snapshot request, take the snapshot.
 		 */
@@ -834,7 +850,13 @@ ffs_mountfs(devvp, mp, td)
 	if ((fs->fs_flags & FS_ACLS) != 0) {
 #ifdef UFS_ACL
 		MNT_ILOCK(mp);
+
+		if (mp->mnt_flag & MNT_NFS4ACLS)
+			printf("WARNING: ACLs flag on fs conflicts with "
+			    "\"nfsv4acls\" mount option; option ignored\n");
+		mp->mnt_flag &= ~MNT_NFS4ACLS;
 		mp->mnt_flag |= MNT_ACLS;
+
 		MNT_IUNLOCK(mp);
 #else
 		printf(
@@ -842,6 +864,24 @@ ffs_mountfs(devvp, mp, td)
 		    mp->mnt_stat.f_mntonname);
 #endif
 	}
+	if ((fs->fs_flags & FS_NFS4ACLS) != 0) {
+#ifdef UFS_ACL
+		MNT_ILOCK(mp);
+
+		if (mp->mnt_flag & MNT_ACLS)
+			printf("WARNING: NFSv4 ACLs flag on fs conflicts with "
+			    "\"acls\" mount option; option ignored\n");
+		mp->mnt_flag &= ~MNT_ACLS;
+		mp->mnt_flag |= MNT_NFS4ACLS;
+
+		MNT_IUNLOCK(mp);
+#else
+		printf(
+"WARNING: %s: NFSv4 ACLs flag on fs but no ACLs support\n",
+		    mp->mnt_stat.f_mntonname);
+#endif
+	}
+
 	ump->um_mountp = mp;
 	ump->um_dev = dev;
 	ump->um_devvp = devvp;
diff --git a/sys/ufs/ffs/fs.h b/sys/ufs/ffs/fs.h
index 7da18ea6c09..93c12a45843 100644
--- a/sys/ufs/ffs/fs.h
+++ b/sys/ufs/ffs/fs.h
@@ -393,22 +393,24 @@ CTASSERT(sizeof(struct fs) == 1376);
  * flag to indicate that the indicies need to be rebuilt (by fsck) before
  * they can be used.
  *
- * FS_ACLS indicates that ACLs are administratively enabled for the
- * file system, so they should be loaded from extended attributes,
+ * FS_ACLS indicates that POSIX.1e ACLs are administratively enabled
+ * for the file system, so they should be loaded from extended attributes,
  * observed for access control purposes, and be administered by object
- * owners.  FS_MULTILABEL indicates that the TrustedBSD MAC Framework
- * should attempt to back MAC labels into extended attributes on the
- * file system rather than maintain a single mount label for all
- * objects.
+ * owners.  FS_NFS4ACLS indicates that NFSv4 ACLs are administratively
+ * enabled.  This flag is mutually exclusive with FS_ACLS.  FS_MULTILABEL
+ * indicates that the TrustedBSD MAC Framework should attempt to back MAC
+ * labels into extended attributes on the file system rather than maintain
+ * a single mount label for all objects.
  */
-#define FS_UNCLEAN    0x01	/* filesystem not clean at mount */
-#define FS_DOSOFTDEP  0x02	/* filesystem using soft dependencies */
-#define FS_NEEDSFSCK  0x04	/* filesystem needs sync fsck before mount */
-#define FS_INDEXDIRS  0x08	/* kernel supports indexed directories */
-#define FS_ACLS       0x10	/* file system has ACLs enabled */
-#define FS_MULTILABEL 0x20	/* file system is MAC multi-label */
-#define FS_GJOURNAL   0x40	/* gjournaled file system */
-#define FS_FLAGS_UPDATED 0x80	/* flags have been moved to new location */
+#define FS_UNCLEAN	0x0001	/* filesystem not clean at mount */
+#define FS_DOSOFTDEP	0x0002	/* filesystem using soft dependencies */
+#define FS_NEEDSFSCK	0x0004	/* filesystem needs sync fsck before mount */
+#define FS_INDEXDIRS	0x0008	/* kernel supports indexed directories */
+#define FS_ACLS		0x0010	/* file system has POSIX.1e ACLs enabled */
+#define FS_MULTILABEL	0x0020	/* file system is MAC multi-label */
+#define FS_GJOURNAL	0x0040	/* gjournaled file system */
+#define FS_FLAGS_UPDATED 0x0080	/* flags have been moved to new location */
+#define FS_NFS4ACLS	0x0100	/* file system has NFSv4 ACLs enabled */
 
 /*
  * Macros to access bits in the fs_active array.
diff --git a/sys/ufs/ufs/acl.h b/sys/ufs/ufs/acl.h
index b53e3284df1..235261e5164 100644
--- a/sys/ufs/ufs/acl.h
+++ b/sys/ufs/ufs/acl.h
@@ -37,6 +37,8 @@
 
 #ifdef _KERNEL
 
+int	ufs_getacl_nfs4_internal(struct vnode *vp, struct acl *aclp, struct thread *td);
+int	ufs_setacl_nfs4_internal(struct vnode *vp, struct acl *aclp, struct thread *td);
 void	ufs_sync_acl_from_inode(struct inode *ip, struct acl *acl);
 void	ufs_sync_inode_from_acl(struct acl *acl, struct inode *ip);
 
diff --git a/sys/ufs/ufs/ufs_acl.c b/sys/ufs/ufs/ufs_acl.c
index 68e5015c2d4..c244e871cac 100644
--- a/sys/ufs/ufs/ufs_acl.c
+++ b/sys/ufs/ufs/ufs_acl.c
@@ -140,6 +140,81 @@ ufs_sync_inode_from_acl(struct acl *acl, struct inode *ip)
 	DIP_SET(ip, i_mode, ip->i_mode);
 }
 
+/*
+ * Retrieve NFSv4 ACL, skipping access checks.  Must be used in UFS code
+ * instead of VOP_GETACL() when we don't want to be restricted by the user
+ * not having ACL_READ_ACL permission, e.g. when calculating inherited ACL
+ * or in ufs_vnops.c:ufs_accessx().
+ */
+int
+ufs_getacl_nfs4_internal(struct vnode *vp, struct acl *aclp, struct thread *td)
+{
+	int error, len;
+	struct inode *ip = VTOI(vp);
+
+	len = sizeof(*aclp);
+	bzero(aclp, len);
+
+	error = vn_extattr_get(vp, IO_NODELOCKED,
+	    NFS4_ACL_EXTATTR_NAMESPACE, NFS4_ACL_EXTATTR_NAME,
+	    &len, (char *) aclp, td);
+	aclp->acl_maxcnt = ACL_MAX_ENTRIES;
+	if (error == ENOATTR) {
+		/*
+		 * Legitimately no ACL set on object, purely
+		 * emulate it through the inode.
+		 */
+		acl_nfs4_sync_acl_from_mode(aclp, ip->i_mode, ip->i_uid);
+
+		return (0);
+	}
+
+	if (error)
+		return (error);
+
+	if (len != sizeof(*aclp)) {
+		/*
+		 * A short (or long) read, meaning that for
+		 * some reason the ACL is corrupted.  Return
+		 * EPERM since the object DAC protections
+		 * are unsafe.
+		 */
+		printf("ufs_getacl_nfs4(): Loaded invalid ACL ("
+		    "%d bytes), inumber %d on %s\n", len,
+		    ip->i_number, ip->i_fs->fs_fsmnt);
+
+		return (EPERM);
+	}
+
+	error = acl_nfs4_check(aclp, vp->v_type == VDIR);
+	if (error) {
+		printf("ufs_getacl_nfs4(): Loaded invalid ACL "
+		    "(failed acl_nfs4_check), inumber %d on %s\n",
+		    ip->i_number, ip->i_fs->fs_fsmnt);
+
+		return (EPERM);
+	}
+
+	return (0);
+}
+
+static int
+ufs_getacl_nfs4(struct vop_getacl_args *ap)
+{
+	int error;
+
+	if ((ap->a_vp->v_mount->mnt_flag & MNT_NFS4ACLS) == 0)
+		return (EINVAL);
+
+	error = VOP_ACCESSX(ap->a_vp, VREAD_ACL, ap->a_td->td_ucred, ap->a_td);
+	if (error)
+		return (error);
+
+	error = ufs_getacl_nfs4_internal(ap->a_vp, ap->a_aclp, ap->a_td);
+
+	return (error);
+}
+
 /*
  * Read POSIX.1e ACL from an EA.  Return error if its not found
  * or if any other error has occured.
@@ -209,7 +284,7 @@ ufs_getacl_posix1e(struct vop_getacl_args *ap)
 	 * ACLs, remove this check.
 	 */
 	if ((ap->a_vp->v_mount->mnt_flag & MNT_ACLS) == 0)
-		return (EOPNOTSUPP);
+		return (EINVAL);
 
 	old = malloc(sizeof(*old), M_ACL, M_WAITOK | M_ZERO);
 
@@ -282,9 +357,117 @@ ufs_getacl(ap)
 	} */ *ap;
 {
 
+	if ((ap->a_vp->v_mount->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS)) == 0)
+		return (EOPNOTSUPP);
+
+	if (ap->a_type == ACL_TYPE_NFS4)
+		return (ufs_getacl_nfs4(ap));
+
 	return (ufs_getacl_posix1e(ap));
 }
 
+/*
+ * Set NFSv4 ACL without doing any access checking.  This is required
+ * e.g. by the UFS code that implements ACL inheritance, or from
+ * ufs_vnops.c:ufs_chmod(), as some of the checks have to be skipped
+ * in that case, and others are redundant.
+ */
+int
+ufs_setacl_nfs4_internal(struct vnode *vp, struct acl *aclp, struct thread *td)
+{
+	int error;
+	mode_t mode;
+	struct inode *ip = VTOI(vp);
+
+	KASSERT(acl_nfs4_check(aclp, vp->v_type == VDIR) == 0,
+	    ("invalid ACL passed to ufs_setacl_nfs4_internal"));
+
+	if (acl_nfs4_is_trivial(aclp, ip->i_uid)) {
+		error = vn_extattr_rm(vp, IO_NODELOCKED,
+		    NFS4_ACL_EXTATTR_NAMESPACE, NFS4_ACL_EXTATTR_NAME, td);
+
+		/*
+		 * An attempt to remove ACL from a file that didn't have
+		 * any extended entries is not an error.
+		 */
+		if (error == ENOATTR)
+			error = 0;
+
+	} else {
+		error = vn_extattr_set(vp, IO_NODELOCKED,
+		    NFS4_ACL_EXTATTR_NAMESPACE, NFS4_ACL_EXTATTR_NAME,
+		    sizeof(*aclp), (char *) aclp, td);
+	}
+
+	/*
+	 * Map lack of attribute definition in UFS_EXTATTR into lack of
+	 * support for ACLs on the filesystem.
+	 */
+	if (error == ENOATTR)
+		return (EOPNOTSUPP);
+
+	if (error)
+		return (error);
+
+	mode = ip->i_mode;
+
+	acl_nfs4_sync_mode_from_acl(&mode, aclp);
+
+	ip->i_mode &= ACL_PRESERVE_MASK;
+	ip->i_mode |= mode;
+	DIP_SET(ip, i_mode, ip->i_mode);
+	ip->i_flag |= IN_CHANGE;
+
+	VN_KNOTE_UNLOCKED(vp, NOTE_ATTRIB);
+
+	return (0);
+}
+
+static int
+ufs_setacl_nfs4(struct vop_setacl_args *ap)
+{
+	int error;
+	struct inode *ip = VTOI(ap->a_vp);
+
+	if ((ap->a_vp->v_mount->mnt_flag & MNT_NFS4ACLS) == 0)
+		return (EINVAL);
+
+	if (ap->a_vp->v_mount->mnt_flag & MNT_RDONLY)
+		return (EROFS);
+
+	if (ap->a_aclp == NULL)
+		return (EINVAL);
+
+	error = VOP_ACLCHECK(ap->a_vp, ap->a_type, ap->a_aclp, ap->a_cred,
+	    ap->a_td);
+	if (error)
+		return (error);
+
+	/*
+	 * Authorize the ACL operation.
+	 */
+	if (ip->i_flags & (IMMUTABLE | APPEND))
+		return (EPERM);
+
+	/*
+	 * Must hold VWRITE_ACL or have appropriate privilege.
+	 */
+	if ((error = VOP_ACCESSX(ap->a_vp, VWRITE_ACL, ap->a_cred, ap->a_td)))
+		return (error);
+
+	/*
+	 * With NFSv4 ACLs, chmod(2) may need to add additional entries.
+	 * Make sure it has enough room for that - splitting every entry
+	 * into two and appending "canonical six" entries at the end.
+	 */
+	if (ap->a_aclp->acl_cnt > (ACL_MAX_ENTRIES - 6) / 2)
+		return (ENOSPC);
+
+	error = ufs_setacl_nfs4_internal(ap->a_vp, ap->a_aclp, ap->a_td);
+
+	return (0);
+}
+
 /*
  * Set the ACL on a file.
  *
@@ -302,7 +485,7 @@ ufs_setacl_posix1e(struct vop_setacl_args *ap)
 	struct oldacl *old;
 
 	if ((ap->a_vp->v_mount->mnt_flag & MNT_ACLS) == 0)
-		return (EOPNOTSUPP);
+		return (EINVAL);
 
 	/*
 	 * If this is a set operation rather than a delete operation,
@@ -422,16 +605,43 @@ ufs_setacl(ap)
 		struct thread *td;
 	} */ *ap;
 {
+	if ((ap->a_vp->v_mount->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS)) == 0)
+		return (EOPNOTSUPP);
+
+	if (ap->a_type == ACL_TYPE_NFS4)
+		return (ufs_setacl_nfs4(ap));
 
 	return (ufs_setacl_posix1e(ap));
 }
 
+static int
+ufs_aclcheck_nfs4(struct vop_aclcheck_args *ap)
+{
+	int is_directory = 0;
+
+	if ((ap->a_vp->v_mount->mnt_flag & MNT_NFS4ACLS) == 0)
+		return (EINVAL);
+
+	/*
+	 * With NFSv4 ACLs, chmod(2) may need to add additional entries.
+	 * Make sure it has enough room for that - splitting every entry
+	 * into two and appending "canonical six" entries at the end.
+	 */
+	if (ap->a_aclp->acl_cnt > (ACL_MAX_ENTRIES - 6) / 2)
+		return (ENOSPC);
+
+	if (ap->a_vp->v_type == VDIR)
+		is_directory = 1;
+
+	return (acl_nfs4_check(ap->a_aclp, is_directory));
+}
+
 static int
 ufs_aclcheck_posix1e(struct vop_aclcheck_args *ap)
 {
 
 	if ((ap->a_vp->v_mount->mnt_flag & MNT_ACLS) == 0)
-		return (EOPNOTSUPP);
+		return (EINVAL);
 
 	/*
 	 * Verify we understand this type of ACL, and that it applies
@@ -471,6 +681,12 @@ ufs_aclcheck(ap)
 	} */ *ap;
 {
 
+	if ((ap->a_vp->v_mount->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS)) == 0)
+		return (EOPNOTSUPP);
+
+	if (ap->a_type == ACL_TYPE_NFS4)
+		return (ufs_aclcheck_nfs4(ap));
+
 	return (ufs_aclcheck_posix1e(ap));
 }
 
diff --git a/sys/ufs/ufs/ufs_lookup.c b/sys/ufs/ufs/ufs_lookup.c
index ea73b1ff861..a19068ee075 100644
--- a/sys/ufs/ufs/ufs_lookup.c
+++ b/sys/ufs/ufs/ufs_lookup.c
@@ -80,6 +80,61 @@ SYSCTL_INT(_debug, OID_AUTO, dircheck, CTLFLAG_RW, &dirchk, 0, "");
 static int ufs_lookup_(struct vnode *, struct vnode **, struct componentname *,
     ino_t *);
 
+static int
+ufs_delete_denied(struct vnode *vdp, struct vnode *tdp, struct ucred *cred,
+    struct thread *td)
+{
+	int error;
+
+#ifdef UFS_ACL
+	/*
+	 * NFSv4 Minor Version 1, draft-ietf-nfsv4-minorversion1-03.txt
+	 *
+	 * 3.16.2.1. ACE4_DELETE vs. ACE4_DELETE_CHILD
+	 */
+
+	/*
+	 * XXX: Is this check required?
+	 */
+	error = VOP_ACCESS(vdp, VEXEC, cred, td);
+	if (error)
+		return (error);
+
+	error = VOP_ACCESSX(tdp, VDELETE, cred, td);
+	if (error == 0)
+		return (0);
+
+	error = VOP_ACCESSX(vdp, VDELETE_CHILD, cred, td);
+	if (error == 0)
+		return (0);
+
+	error = VOP_ACCESSX(vdp, VEXPLICIT_DENY | VDELETE_CHILD, cred, td);
+	if (error)
+		return (error);
+
+#endif /* !UFS_ACL */
+
+	/*
+	 * Standard Unix access control - delete access requires VWRITE.
+	 */
+	error = VOP_ACCESS(vdp, VWRITE, cred, td);
+	if (error)
+		return (error);
+
+	/*
+	 * If directory is "sticky", then user must own
+	 * the directory, or the file in it, else she
+	 * may not delete it (unless she's root). This
+	 * implements append-only directories.
+	 */
+	if ((VTOI(vdp)->i_mode & ISVTX) &&
+	    VOP_ACCESS(vdp, VADMIN, cred, td) &&
+	    VOP_ACCESS(tdp, VADMIN, cred, td))
+		return (EPERM);
+
+	return (0);
+}
+
 /*
  * Convert a component of a pathname into a pointer to a locked inode.
  * This is a very central and rather complicated routine.
@@ -410,8 +465,13 @@ notfound:
 		/*
 		 * Access for write is interpreted as allowing
 		 * creation of files in the directory.
+		 *
+		 * XXX: Fix the comment above.
 		 */
-		error = VOP_ACCESS(vdp, VWRITE, cred, cnp->cn_thread);
+		if (flags & WILLBEDIR)
+			error = VOP_ACCESSX(vdp, VWRITE | VAPPEND, cred, cnp->cn_thread);
+		else
+			error = VOP_ACCESS(vdp, VWRITE, cred, cnp->cn_thread);
 		if (error)
 			return (error);
 		/*
@@ -498,12 +558,17 @@ found:
 	if (nameiop == DELETE && (flags & ISLASTCN)) {
 		if (flags & LOCKPARENT)
 			ASSERT_VOP_ELOCKED(vdp, __FUNCTION__);
-		/*
-		 * Write access to directory required to delete files.
-		 */
-		error = VOP_ACCESS(vdp, VWRITE, cred, cnp->cn_thread);
-		if (error)
+		if ((error = VFS_VGET(vdp->v_mount, ino,
+		    LK_EXCLUSIVE, &tdp)) != 0)
 			return (error);
+
+		error = ufs_delete_denied(vdp, tdp, cred, cnp->cn_thread);
+		if (error) {
+			vput(tdp);
+			return (error);
+		}
+
+
 		/*
 		 * Return pointer to current entry in dp->i_offset,
 		 * and distance past previous entry (if there
@@ -523,23 +588,10 @@ found:
 		if (dp->i_number == ino) {
 			VREF(vdp);
 			*vpp = vdp;
+			vput(tdp);
 			return (0);
 		}
-		if ((error = VFS_VGET(vdp->v_mount, ino,
-		    LK_EXCLUSIVE, &tdp)) != 0)
-			return (error);
-		/*
-		 * If directory is "sticky", then user must own
-		 * the directory, or the file in it, else she
-		 * may not delete it (unless she's root). This
-		 * implements append-only directories.
-		 */
-		if ((dp->i_mode & ISVTX) &&
-		    VOP_ACCESS(vdp, VADMIN, cred, cnp->cn_thread) &&
-		    VOP_ACCESS(tdp, VADMIN, cred, cnp->cn_thread)) {
-			vput(tdp);
-			return (EPERM);
-		}
+
 		*vpp = tdp;
 		return (0);
 	}
@@ -551,7 +603,11 @@ found:
 	 * regular file, or empty directory.
 	 */
 	if (nameiop == RENAME && (flags & ISLASTCN)) {
-		if ((error = VOP_ACCESS(vdp, VWRITE, cred, cnp->cn_thread)))
+		if (flags & WILLBEDIR)
+			error = VOP_ACCESSX(vdp, VWRITE | VAPPEND, cred, cnp->cn_thread);
+		else
+			error = VOP_ACCESS(vdp, VWRITE, cred, cnp->cn_thread);
+		if (error)
 			return (error);
 		/*
 		 * Careful about locking second inode.
@@ -563,6 +619,33 @@ found:
 		if ((error = VFS_VGET(vdp->v_mount, ino,
 		    LK_EXCLUSIVE, &tdp)) != 0)
 			return (error);
+
+		error = ufs_delete_denied(vdp, tdp, cred, cnp->cn_thread);
+		if (error) {
+			vput(tdp);
+			return (error);
+		}
+
+#ifdef SunOS_doesnt_do_that
+		/*
+		 * The only purpose of this check is to return the correct
+		 * error.  Assume that we want to rename directory "a"
+		 * to a file "b", and that we have no ACL_WRITE_DATA on
+		 * a containing directory, but we _do_ have ACL_APPEND_DATA. 
+		 * In that case, the VOP_ACCESS check above will return 0,
+		 * and the operation will fail with ENOTDIR instead
+		 * of EACCESS.
+		 */
+		if (tdp->v_type == VDIR)
+			error = VOP_ACCESSX(vdp, VWRITE | VAPPEND, cred, cnp->cn_thread);
+		else
+			error = VOP_ACCESS(vdp, VWRITE, cred, cnp->cn_thread);
+		if (error) {
+			vput(tdp);
+			return (error);
+		}
+#endif
+
 		*vpp = tdp;
 		cnp->cn_flags |= SAVENAME;
 		return (0);
diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c
index 08b77ae0729..2d8f276c927 100644
--- a/sys/ufs/ufs/ufs_vnops.c
+++ b/sys/ufs/ufs/ufs_vnops.c
@@ -88,7 +88,7 @@ __FBSDID("$FreeBSD$");
 
 #include 
 
-static vop_access_t	ufs_access;
+static vop_accessx_t	ufs_accessx;
 static int ufs_chmod(struct vnode *, int, struct ucred *, struct thread *);
 static int ufs_chown(struct vnode *, uid_t, gid_t, struct ucred *, struct thread *);
 static vop_close_t	ufs_close;
@@ -298,8 +298,8 @@ ufs_close(ap)
 }
 
 static int
-ufs_access(ap)
-	struct vop_access_args /* {
+ufs_accessx(ap)
+	struct vop_accessx_args /* {
 		struct vnode *a_vp;
 		accmode_t a_accmode;
 		struct ucred *a_cred;
@@ -315,6 +315,7 @@ ufs_access(ap)
 #endif
 #ifdef UFS_ACL
 	struct acl *acl;
+	acl_type_t type;
 #endif
 
 	/*
@@ -322,7 +323,7 @@ ufs_access(ap)
 	 * unless the file is a socket, fifo, or a block or
 	 * character device resident on the filesystem.
 	 */
-	if (accmode & VWRITE) {
+	if (accmode & VMODIFY_PERMS) {
 		switch (vp->v_type) {
 		case VDIR:
 		case VLNK:
@@ -367,41 +368,63 @@ relock:
 		}
 	}
 
-	/* If immutable bit set, nobody gets to write it. */
-	if ((accmode & VWRITE) && (ip->i_flags & (IMMUTABLE | SF_SNAPSHOT)))
+	/*
+	 * If immutable bit set, nobody gets to write it.  "& ~VADMIN_PERMS"
+	 * is here, because without it, * it would be impossible for the owner
+	 * to remove the IMMUTABLE flag.
+	 */
+	if ((accmode & (VMODIFY_PERMS & ~VADMIN_PERMS)) &&
+	    (ip->i_flags & (IMMUTABLE | SF_SNAPSHOT)))
 		return (EPERM);
 
 #ifdef UFS_ACL
-	if ((vp->v_mount->mnt_flag & MNT_ACLS) != 0) {
+	if ((vp->v_mount->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS)) != 0) {
+		if (vp->v_mount->mnt_flag & MNT_NFS4ACLS)
+			type = ACL_TYPE_NFS4;
+		else
+			type = ACL_TYPE_ACCESS;
+
 		acl = acl_alloc(M_WAITOK);
-		error = VOP_GETACL(vp, ACL_TYPE_ACCESS, acl, ap->a_cred,
-		    ap->a_td);
+		if (type == ACL_TYPE_NFS4)
+			error = ufs_getacl_nfs4_internal(vp, acl, ap->a_td);
+		else
+			error = VOP_GETACL(vp, type, acl, ap->a_cred, ap->a_td);
 		switch (error) {
-		case EOPNOTSUPP:
-			error = vaccess(vp->v_type, ip->i_mode, ip->i_uid,
-			    ip->i_gid, ap->a_accmode, ap->a_cred, NULL);
-			break;
 		case 0:
-			error = vaccess_acl_posix1e(vp->v_type, ip->i_uid,
-			    ip->i_gid, acl, ap->a_accmode, ap->a_cred, NULL);
+			if (type == ACL_TYPE_NFS4) {
+				error = vaccess_acl_nfs4(vp->v_type, ip->i_uid,
+				    ip->i_gid, acl, accmode, ap->a_cred, NULL);
+			} else {
+				error = vfs_unixify_accmode(&accmode);
+				if (error == 0)
+					error = vaccess_acl_posix1e(vp->v_type, ip->i_uid,
+					    ip->i_gid, acl, accmode, ap->a_cred, NULL);
+			}
 			break;
 		default:
-			printf(
-"ufs_access(): Error retrieving ACL on object (%d).\n",
-			    error);
+			if (error != EOPNOTSUPP)
+				printf(
+"ufs_accessx(): Error retrieving ACL on object (%d).\n",
+				    error);
 			/*
 			 * XXX: Fall back until debugged.  Should
 			 * eventually possibly log an error, and return
 			 * EPERM for safety.
 			 */
-			error = vaccess(vp->v_type, ip->i_mode, ip->i_uid,
-			    ip->i_gid, ap->a_accmode, ap->a_cred, NULL);
+			error = vfs_unixify_accmode(&accmode);
+			if (error == 0)
+				error = vaccess(vp->v_type, ip->i_mode, ip->i_uid,
+				    ip->i_gid, accmode, ap->a_cred, NULL);
 		}
 		acl_free(acl);
-	} else
+
+		return (error);
+	}
 #endif /* !UFS_ACL */
+	error = vfs_unixify_accmode(&accmode);
+	if (error == 0)
 		error = vaccess(vp->v_type, ip->i_mode, ip->i_uid, ip->i_gid,
-		    ap->a_accmode, ap->a_cred, NULL);
+		    accmode, ap->a_cred, NULL);
 	return (error);
 }
 
@@ -608,11 +631,20 @@ ufs_setattr(ap)
 		 * check succeeds.
 		 */
 		if (vap->va_vaflags & VA_UTIMES_NULL) {
-			error = VOP_ACCESS(vp, VADMIN, cred, td);
+			/*
+			 * NFSv4.1, draft 21, 6.2.1.3.1, Discussion of Mask Attributes
+			 *
+			 * "A user having ACL_WRITE_DATA or ACL_WRITE_ATTRIBUTES
+			 * will be allowed to set the times [..] to the current
+			 * server time."
+			 *
+			 * XXX: Calling it four times seems a little excessive.
+			 */
+			error = VOP_ACCESSX(vp, VWRITE_ATTRIBUTES, cred, td);
 			if (error)
 				error = VOP_ACCESS(vp, VWRITE, cred, td);
 		} else
-			error = VOP_ACCESS(vp, VADMIN, cred, td);
+			error = VOP_ACCESSX(vp, VWRITE_ATTRIBUTES, cred, td);
 		if (error)
 			return (error);
 		if (vap->va_atime.tv_sec != VNOVAL)
@@ -652,6 +684,32 @@ ufs_setattr(ap)
 	return (error);
 }
 
+#ifdef UFS_ACL
+static int
+ufs_update_nfs4_acl_after_mode_change(struct vnode *vp, int mode,
+    int file_owner_id, struct ucred *cred, struct thread *td)
+{
+	int error;
+	struct acl *aclp;
+
+	aclp = acl_alloc(M_WAITOK);
+	error = ufs_getacl_nfs4_internal(vp, aclp, td);
+	/*
+	 * We don't have to handle EOPNOTSUPP here, as the filesystem claims
+	 * it supports ACLs.
+	 */
+	if (error)
+		goto out;
+
+	acl_nfs4_sync_acl_from_mode(aclp, mode, file_owner_id);
+	error = ufs_setacl_nfs4_internal(vp, aclp, td);
+
+out:
+	acl_free(aclp);
+	return (error);
+}
+#endif /* UFS_ACL */
+
 /*
  * Mark this file's access time for update for vfs_mark_atime().  This
  * is called from execve() and mmap().
@@ -689,7 +747,7 @@ ufs_chmod(vp, mode, cred, td)
 	 * To modify the permissions on a file, must possess VADMIN
 	 * for that file.
 	 */
-	if ((error = VOP_ACCESS(vp, VADMIN, cred, td)))
+	if ((error = VOP_ACCESSX(vp, VWRITE_ACL, cred, td)))
 		return (error);
 	/*
 	 * Privileged processes may set the sticky bit on non-directories,
@@ -706,11 +764,25 @@ ufs_chmod(vp, mode, cred, td)
 		if (error)
 			return (error);
 	}
+
+	/*
+	 * Deny setting setuid if we are not the file owner.
+	 */
+	if ((mode & ISUID) && ip->i_uid != cred->cr_uid) {
+		error = priv_check_cred(cred, PRIV_VFS_ADMIN, 0);
+		if (error)
+			return (error);
+	}
+
 	ip->i_mode &= ~ALLPERMS;
 	ip->i_mode |= (mode & ALLPERMS);
 	DIP_SET(ip, i_mode, ip->i_mode);
 	ip->i_flag |= IN_CHANGE;
-	return (0);
+#ifdef UFS_ACL
+	if ((vp->v_mount->mnt_flag & MNT_NFS4ACLS) != 0)
+		error = ufs_update_nfs4_acl_after_mode_change(vp, mode, ip->i_uid, cred, td);
+#endif
+	return (error);
 }
 
 /*
@@ -742,14 +814,14 @@ ufs_chown(vp, uid, gid, cred, td)
 	 * To modify the ownership of a file, must possess VADMIN for that
 	 * file.
 	 */
-	if ((error = VOP_ACCESS(vp, VADMIN, cred, td)))
+	if ((error = VOP_ACCESSX(vp, VWRITE_OWNER, cred, td)))
 		return (error);
 	/*
 	 * To change the owner of a file, or change the group of a file to a
 	 * group of which we are not a member, the caller must have
 	 * privilege.
 	 */
-	if ((uid != ip->i_uid || 
+	if (((uid != ip->i_uid && uid != cred->cr_uid) || 
 	    (gid != ip->i_gid && !groupmember(gid, cred))) &&
 	    (error = priv_check_cred(cred, PRIV_VFS_CHOWN, 0)))
 		return (error);
@@ -1397,6 +1469,33 @@ out:
 	return (error);
 }
 
+#ifdef UFS_ACL
+static int
+ufs_do_nfs4_acl_inheritance(struct vnode *dvp, struct vnode *tvp,
+    mode_t child_mode, struct ucred *cred, struct thread *td)
+{
+	int error;
+	struct acl *parent_aclp, *child_aclp;
+
+	parent_aclp = acl_alloc(M_WAITOK);
+	child_aclp = acl_alloc(M_WAITOK | M_ZERO);
+
+	error = ufs_getacl_nfs4_internal(dvp, parent_aclp, td);
+	if (error)
+		goto out;
+	acl_nfs4_compute_inherited_acl(parent_aclp, child_aclp,
+	    child_mode, VTOI(tvp)->i_uid, tvp->v_type == VDIR);
+	error = ufs_setacl_nfs4_internal(tvp, child_aclp, td);
+	if (error)
+		goto out;
+out:
+	acl_free(parent_aclp);
+	acl_free(child_aclp);
+
+	return (error);
+}
+#endif
+
 /*
  * Mkdir system call
  */
@@ -1630,6 +1729,13 @@ ufs_mkdir(ap)
 		acl_free(dacl);
 		dacl = acl = NULL;
 	}
+
+	if (dvp->v_mount->mnt_flag & MNT_NFS4ACLS) {
+		error = ufs_do_nfs4_acl_inheritance(dvp, tvp, dmode,
+		    cnp->cn_cred, cnp->cn_thread);
+		if (error)
+			goto bad;
+	}
 #endif /* !UFS_ACL */
 
 	/*
@@ -2117,6 +2223,7 @@ ufsfifo_pathconf(ap)
 
 	switch (ap->a_name) {
 	case _PC_ACL_EXTENDED:
+	case _PC_ACL_NFS4:
 	case _PC_ACL_PATH_MAX:
 	case _PC_MAC_PRESENT:
 		return (ufs_pathconf(ap));
@@ -2169,9 +2276,21 @@ ufs_pathconf(ap)
 		*ap->a_retval = 0;
 #endif
 		break;
+
+	case _PC_ACL_NFS4:
+#ifdef UFS_ACL
+		if (ap->a_vp->v_mount->mnt_flag & MNT_NFS4ACLS)
+			*ap->a_retval = 1;
+		else
+			*ap->a_retval = 0;
+#else
+		*ap->a_retval = 0;
+#endif
+		break;
+
 	case _PC_ACL_PATH_MAX:
 #ifdef UFS_ACL
-		if (ap->a_vp->v_mount->mnt_flag & MNT_ACLS)
+		if (ap->a_vp->v_mount->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS))
 			*ap->a_retval = ACL_MAX_ENTRIES;
 		else
 			*ap->a_retval = 3;
@@ -2466,6 +2585,13 @@ ufs_makeinode(mode, dvp, vpp, cnp)
 		}
 		acl_free(acl);
 	}
+
+	if (dvp->v_mount->mnt_flag & MNT_NFS4ACLS) {
+		error = ufs_do_nfs4_acl_inheritance(dvp, tvp, mode,
+		    cnp->cn_cred, cnp->cn_thread);
+		if (error)
+			goto bad;
+	}
 #endif /* !UFS_ACL */
 	ufs_makedirentry(ip, cnp, &newdir);
 	error = ufs_direnter(dvp, tvp, &newdir, cnp, NULL);
@@ -2496,7 +2622,7 @@ struct vop_vector ufs_vnodeops = {
 	.vop_read =		VOP_PANIC,
 	.vop_reallocblks =	VOP_PANIC,
 	.vop_write =		VOP_PANIC,
-	.vop_access =		ufs_access,
+	.vop_accessx =		ufs_accessx,
 	.vop_bmap =		ufs_bmap,
 	.vop_cachedlookup =	ufs_lookup,
 	.vop_close =		ufs_close,
@@ -2540,7 +2666,7 @@ struct vop_vector ufs_vnodeops = {
 struct vop_vector ufs_fifoops = {
 	.vop_default =		&fifo_specops,
 	.vop_fsync =		VOP_PANIC,
-	.vop_access =		ufs_access,
+	.vop_accessx =		ufs_accessx,
 	.vop_close =		ufsfifo_close,
 	.vop_getattr =		ufs_getattr,
 	.vop_inactive =		ufs_inactive,
diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c
index c7f559381fd..9002e775bb9 100644
--- a/sys/vm/device_pager.c
+++ b/sys/vm/device_pager.c
@@ -93,17 +93,6 @@ dev_pager_init()
 	    UMA_ZONE_NOFREE|UMA_ZONE_VM); 
 }
 
-static __inline int
-dev_mmap(struct cdevsw *csw, struct cdev *dev, vm_offset_t offset,
-    vm_paddr_t *paddr, int nprot, vm_memattr_t *memattr)
-{
-
-	if (csw->d_flags & D_MMAP2)
-		return (csw->d_mmap2(dev, offset, paddr, nprot, memattr));
-	else
-		return (csw->d_mmap(dev, offset, paddr, nprot));
-}
-
 /*
  * MPSAFE
  */
@@ -116,7 +105,7 @@ dev_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot,
 	vm_pindex_t pindex;
 	unsigned int npages;
 	vm_paddr_t paddr;
-	vm_offset_t off;
+	vm_ooffset_t off;
 	vm_memattr_t dummy;
 	struct cdevsw *csw;
 
@@ -145,7 +134,7 @@ dev_pager_alloc(void *handle, vm_ooffset_t size, vm_prot_t prot,
 	 */
 	npages = OFF_TO_IDX(size);
 	for (off = foff; npages--; off += PAGE_SIZE)
-		if (dev_mmap(csw, dev, off, &paddr, (int)prot, &dummy) != 0) {
+		if (csw->d_mmap(dev, off, &paddr, (int)prot, &dummy) != 0) {
 			dev_relthread(dev);
 			return (NULL);
 		}
@@ -242,7 +231,7 @@ dev_pager_getpages(object, m, count, reqpage)
 	td = curthread;
 	fpop = td->td_fpop;
 	td->td_fpop = NULL;
-	ret = dev_mmap(csw, dev, (vm_offset_t)offset << PAGE_SHIFT, &paddr,
+	ret = csw->d_mmap(dev, (vm_ooffset_t)offset << PAGE_SHIFT, &paddr,
 	    PROT_READ, &memattr);
 	KASSERT(ret == 0, ("dev_pager_getpage: map function returns error"));
 	td->td_fpop = fpop;
diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c
index 81254828ead..a2d5633bd51 100644
--- a/sys/vm/uma_core.c
+++ b/sys/vm/uma_core.c
@@ -122,14 +122,14 @@ static MALLOC_DEFINE(M_UMAHASH, "UMAHash", "UMA Hash Buckets");
 static int bucketdisable = 1;
 
 /* Linked list of all kegs in the system */
-static LIST_HEAD(,uma_keg) uma_kegs = LIST_HEAD_INITIALIZER(&uma_kegs);
+static LIST_HEAD(,uma_keg) uma_kegs = LIST_HEAD_INITIALIZER(uma_kegs);
 
 /* This mutex protects the keg list */
 static struct mtx uma_mtx;
 
 /* Linked list of boot time pages */
 static LIST_HEAD(,uma_slab) uma_boot_pages =
-    LIST_HEAD_INITIALIZER(&uma_boot_pages);
+    LIST_HEAD_INITIALIZER(uma_boot_pages);
 
 /* This mutex protects the boot time pages list */
 static struct mtx uma_boot_pages_mtx;
diff --git a/sys/vm/uma_int.h b/sys/vm/uma_int.h
index c2ed06dc7db..1aaf84f819d 100644
--- a/sys/vm/uma_int.h
+++ b/sys/vm/uma_int.h
@@ -144,10 +144,10 @@
 
 #define UMA_HASH_INSERT(h, s, mem)					\
 		SLIST_INSERT_HEAD(&(h)->uh_slab_hash[UMA_HASH((h),	\
-		    (mem))], (s), us_hlink);
+		    (mem))], (s), us_hlink)
 #define UMA_HASH_REMOVE(h, s, mem)					\
 		SLIST_REMOVE(&(h)->uh_slab_hash[UMA_HASH((h),		\
-		    (mem))], (s), uma_slab, us_hlink);
+		    (mem))], (s), uma_slab, us_hlink)
 
 /* Hash table for freed address -> slab translation */
 
diff --git a/sys/vm/vm.h b/sys/vm/vm.h
index 941300a0894..6dd3cbe8a64 100644
--- a/sys/vm/vm.h
+++ b/sys/vm/vm.h
@@ -76,7 +76,7 @@ typedef u_char vm_prot_t;	/* protection codes */
 #define	VM_PROT_READ		((vm_prot_t) 0x01)
 #define	VM_PROT_WRITE		((vm_prot_t) 0x02)
 #define	VM_PROT_EXECUTE		((vm_prot_t) 0x04)
-#define	VM_PROT_OVERRIDE_WRITE	((vm_prot_t) 0x08)	/* copy-on-write */
+#define	VM_PROT_COPY		((vm_prot_t) 0x08)	/* copy-on-read */
 
 #define	VM_PROT_ALL		(VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE)
 #define VM_PROT_RW		(VM_PROT_READ|VM_PROT_WRITE)
diff --git a/sys/vm/vm_extern.h b/sys/vm/vm_extern.h
index ff489839a36..ad6087eae33 100644
--- a/sys/vm/vm_extern.h
+++ b/sys/vm/vm_extern.h
@@ -58,7 +58,7 @@ int vm_fault(vm_map_t, vm_offset_t, vm_prot_t, int);
 void vm_fault_copy_entry(vm_map_t, vm_map_t, vm_map_entry_t, vm_map_entry_t,
     vm_ooffset_t *);
 void vm_fault_unwire(vm_map_t, vm_offset_t, vm_offset_t, boolean_t);
-int vm_fault_wire(vm_map_t, vm_offset_t, vm_offset_t, boolean_t, boolean_t);
+int vm_fault_wire(vm_map_t, vm_offset_t, vm_offset_t, boolean_t);
 int vm_forkproc(struct thread *, struct proc *, struct thread *, struct vmspace *, int);
 void vm_waitproc(struct proc *);
 int vm_mmap(vm_map_t, vm_offset_t *, vm_size_t, vm_prot_t, vm_prot_t, int, objtype_t, void *, vm_ooffset_t);
diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c
index b10270c9cb0..0a5a4125bef 100644
--- a/sys/vm/vm_fault.c
+++ b/sys/vm/vm_fault.c
@@ -185,7 +185,7 @@ unlock_and_deallocate(struct faultstate *fs)
  *	      default objects are zero-fill, there is no real pager.
  */
 #define TRYPAGER	(fs.object->type != OBJT_DEFAULT && \
-			(((fault_flags & VM_FAULT_WIRE_MASK) == 0) || wired))
+			((fault_flags & VM_FAULT_CHANGE_WIRING) == 0 || wired))
 
 /*
  *	vm_fault:
@@ -238,31 +238,15 @@ RetryFault:;
 	result = vm_map_lookup(&fs.map, vaddr, fault_type, &fs.entry,
 	    &fs.first_object, &fs.first_pindex, &prot, &wired);
 	if (result != KERN_SUCCESS) {
-		if (result != KERN_PROTECTION_FAILURE ||
-		    (fault_flags & VM_FAULT_WIRE_MASK) != VM_FAULT_USER_WIRE) {
-			if (growstack && result == KERN_INVALID_ADDRESS &&
-			    map != kernel_map && curproc != NULL) {
-				result = vm_map_growstack(curproc, vaddr);
-				if (result != KERN_SUCCESS)
-					return (KERN_FAILURE);
-				growstack = FALSE;
-				goto RetryFault;
-			}
-			return (result);
+		if (growstack && result == KERN_INVALID_ADDRESS &&
+		    map != kernel_map) {
+			result = vm_map_growstack(curproc, vaddr);
+			if (result != KERN_SUCCESS)
+				return (KERN_FAILURE);
+			growstack = FALSE;
+			goto RetryFault;
 		}
-
-		/*
-   		 * If we are user-wiring a r/w segment, and it is COW, then
-   		 * we need to do the COW operation.  Note that we don't COW
-   		 * currently RO sections now, because it is NOT desirable
-   		 * to COW .text.  We simply keep .text from ever being COW'ed
-   		 * and take the heat that one cannot debug wired .text sections.
-   		 */
-		result = vm_map_lookup(&fs.map, vaddr,
-			VM_PROT_READ|VM_PROT_WRITE|VM_PROT_OVERRIDE_WRITE,
-			&fs.entry, &fs.first_object, &fs.first_pindex, &prot, &wired);
-		if (result != KERN_SUCCESS)
-			return (result);
+		return (result);
 	}
 
 	map_generation = fs.map->timestamp;
@@ -289,7 +273,7 @@ RetryFault:;
 	fs.lookup_still_valid = TRUE;
 
 	if (wired)
-		fault_type = prot;
+		fault_type = prot | (fault_type & VM_PROT_COPY);
 
 	fs.first_m = NULL;
 
@@ -718,7 +702,7 @@ vnode_locked:
 		/*
 		 * We only really need to copy if we want to write it.
 		 */
-		if (fault_type & VM_PROT_WRITE) {
+		if ((fault_type & (VM_PROT_COPY | VM_PROT_WRITE)) != 0) {
 			/*
 			 * This allows pages to be virtually copied from a 
 			 * backing_object into the first_object, where the 
@@ -775,8 +759,13 @@ vnode_locked:
 				 */
 				pmap_copy_page(fs.m, fs.first_m);
 				fs.first_m->valid = VM_PAGE_BITS_ALL;
-			}
-			if (fs.m) {
+				if (wired && (fault_flags &
+				    VM_FAULT_CHANGE_WIRING) == 0) {
+					vm_page_lock_queues();
+					vm_page_wire(fs.first_m);
+					vm_page_unwire(fs.m, FALSE);
+					vm_page_unlock_queues();
+				}
 				/*
 				 * We no longer need the old page or object.
 				 */
@@ -873,19 +862,12 @@ vnode_locked:
 		vm_object_set_writeable_dirty(fs.object);
 
 		/*
-		 * If the fault is a write, we know that this page is being
-		 * written NOW so dirty it explicitly to save on 
-		 * pmap_is_modified() calls later.
-		 *
 		 * If this is a NOSYNC mmap we do not want to set VPO_NOSYNC
 		 * if the page is already dirty to prevent data written with
 		 * the expectation of being synced from not being synced.
 		 * Likewise if this entry does not request NOSYNC then make
 		 * sure the page isn't marked NOSYNC.  Applications sharing
 		 * data should use the same flags to avoid ping ponging.
-		 *
-		 * Also tell the backing pager, if any, that it should remove
-		 * any swap backing since the page is now dirty.
 		 */
 		if (fs.entry->eflags & MAP_ENTRY_NOSYNC) {
 			if (fs.m->dirty == 0)
@@ -893,7 +875,17 @@ vnode_locked:
 		} else {
 			fs.m->oflags &= ~VPO_NOSYNC;
 		}
-		if (fault_flags & VM_FAULT_DIRTY) {
+
+		/*
+		 * If the fault is a write, we know that this page is being
+		 * written NOW so dirty it explicitly to save on 
+		 * pmap_is_modified() calls later.
+		 *
+		 * Also tell the backing pager, if any, that it should remove
+		 * any swap backing since the page is now dirty.
+		 */
+		if ((fault_type & VM_PROT_WRITE) != 0 &&
+		    (fault_flags & VM_FAULT_CHANGE_WIRING) == 0) {
 			vm_page_dirty(fs.m);
 			vm_pager_page_unswapped(fs.m);
 		}
@@ -919,9 +911,8 @@ vnode_locked:
 	 * won't find it (yet).
 	 */
 	pmap_enter(fs.map->pmap, vaddr, fault_type, fs.m, prot, wired);
-	if (((fault_flags & VM_FAULT_WIRE_MASK) == 0) && (wired == 0)) {
+	if ((fault_flags & VM_FAULT_CHANGE_WIRING) == 0 && wired == 0)
 		vm_fault_prefault(fs.map->pmap, vaddr, fs.entry);
-	}
 	VM_OBJECT_LOCK(fs.object);
 	vm_page_lock_queues();
 	vm_page_flag_set(fs.m, PG_REFERENCED);
@@ -930,7 +921,7 @@ vnode_locked:
 	 * If the page is not wired down, then put it where the pageout daemon
 	 * can find it.
 	 */
-	if (fault_flags & VM_FAULT_WIRE_MASK) {
+	if (fault_flags & VM_FAULT_CHANGE_WIRING) {
 		if (wired)
 			vm_page_wire(fs.m);
 		else
@@ -1048,7 +1039,7 @@ vm_fault_quick(caddr_t v, int prot)
  */
 int
 vm_fault_wire(vm_map_t map, vm_offset_t start, vm_offset_t end,
-    boolean_t user_wire, boolean_t fictitious)
+    boolean_t fictitious)
 {
 	vm_offset_t va;
 	int rv;
@@ -1059,9 +1050,7 @@ vm_fault_wire(vm_map_t map, vm_offset_t start, vm_offset_t end,
 	 * read-only sections.
 	 */
 	for (va = start; va < end; va += PAGE_SIZE) {
-		rv = vm_fault(map, va,
-		    user_wire ? VM_PROT_READ : VM_PROT_READ | VM_PROT_WRITE,
-		    user_wire ? VM_FAULT_USER_WIRE : VM_FAULT_CHANGE_WIRING);
+		rv = vm_fault(map, va, VM_PROT_NONE, VM_FAULT_CHANGE_WIRING);
 		if (rv) {
 			if (va != start)
 				vm_fault_unwire(map, start, va, fictitious);
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c
index 414d4e6378e..d27c3a72e8b 100644
--- a/sys/vm/vm_map.c
+++ b/sys/vm/vm_map.c
@@ -2381,7 +2381,7 @@ vm_map_wire(vm_map_t map, vm_offset_t start, vm_offset_t end,
 			 */
 			vm_map_unlock(map);
 			rv = vm_fault_wire(map, saved_start, saved_end,
-			    user_wire, fictitious);
+			    fictitious);
 			vm_map_lock(map);
 			if (last_timestamp + 1 != map->timestamp) {
 				/*
@@ -3554,23 +3554,16 @@ RetryLookup:;
 
 	/*
 	 * Check whether this task is allowed to have this page.
-	 * Note the special case for MAP_ENTRY_COW
-	 * pages with an override.  This is to implement a forced
-	 * COW for debuggers.
 	 */
-	if (fault_type & VM_PROT_OVERRIDE_WRITE)
-		prot = entry->max_protection;
-	else
-		prot = entry->protection;
+	prot = entry->protection;
 	fault_type &= (VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE);
-	if ((fault_type & prot) != fault_type) {
+	if ((fault_type & prot) != fault_type || prot == VM_PROT_NONE) {
 		vm_map_unlock_read(map);
 		return (KERN_PROTECTION_FAILURE);
 	}
 	if ((entry->eflags & MAP_ENTRY_USER_WIRED) &&
 	    (entry->eflags & MAP_ENTRY_COW) &&
-	    (fault_type & VM_PROT_WRITE) &&
-	    (fault_typea & VM_PROT_OVERRIDE_WRITE) == 0) {
+	    (fault_type & VM_PROT_WRITE)) {
 		vm_map_unlock_read(map);
 		return (KERN_PROTECTION_FAILURE);
 	}
@@ -3581,7 +3574,7 @@ RetryLookup:;
 	 */
 	*wired = (entry->wired_count != 0);
 	if (*wired)
-		prot = fault_type = entry->protection;
+		fault_type = entry->protection;
 	size = entry->end - entry->start;
 	/*
 	 * If the entry was copy-on-write, we either ...
@@ -3594,7 +3587,8 @@ RetryLookup:;
 		 * If we don't need to write the page, we just demote the
 		 * permissions allowed.
 		 */
-		if (fault_type & VM_PROT_WRITE) {
+		if ((fault_type & VM_PROT_WRITE) != 0 ||
+		    (fault_typea & VM_PROT_COPY) != 0) {
 			/*
 			 * Make a new object, and place it in the object
 			 * chain.  Note that no new references have appeared
@@ -3717,21 +3711,14 @@ vm_map_lookup_locked(vm_map_t *var_map,		/* IN/OUT */
 
 	/*
 	 * Check whether this task is allowed to have this page.
-	 * Note the special case for MAP_ENTRY_COW
-	 * pages with an override.  This is to implement a forced
-	 * COW for debuggers.
 	 */
-	if (fault_type & VM_PROT_OVERRIDE_WRITE)
-		prot = entry->max_protection;
-	else
-		prot = entry->protection;
+	prot = entry->protection;
 	fault_type &= VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE;
 	if ((fault_type & prot) != fault_type)
 		return (KERN_PROTECTION_FAILURE);
 	if ((entry->eflags & MAP_ENTRY_USER_WIRED) &&
 	    (entry->eflags & MAP_ENTRY_COW) &&
-	    (fault_type & VM_PROT_WRITE) &&
-	    (fault_typea & VM_PROT_OVERRIDE_WRITE) == 0)
+	    (fault_type & VM_PROT_WRITE))
 		return (KERN_PROTECTION_FAILURE);
 
 	/*
@@ -3740,7 +3727,7 @@ vm_map_lookup_locked(vm_map_t *var_map,		/* IN/OUT */
 	 */
 	*wired = (entry->wired_count != 0);
 	if (*wired)
-		prot = fault_type = entry->protection;
+		fault_type = entry->protection;
 
 	if (entry->eflags & MAP_ENTRY_NEEDS_COPY) {
 		/*
diff --git a/sys/vm/vm_map.h b/sys/vm/vm_map.h
index 0c586ab2ae5..96308455512 100644
--- a/sys/vm/vm_map.h
+++ b/sys/vm/vm_map.h
@@ -319,9 +319,6 @@ long vmspace_wired_count(struct vmspace *vmspace);
  */
 #define VM_FAULT_NORMAL 0		/* Nothing special */
 #define VM_FAULT_CHANGE_WIRING 1	/* Change the wiring as appropriate */
-#define VM_FAULT_USER_WIRE 2		/* Likewise, but for user purposes */
-#define VM_FAULT_WIRE_MASK (VM_FAULT_CHANGE_WIRING|VM_FAULT_USER_WIRE)
-#define VM_FAULT_DIRTY 8		/* Dirty the page */
 
 /*
  * The following "find_space" options are supported by vm_map_find()
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index d7a6e97ac46..399cb10a1f9 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -773,9 +773,9 @@ vm_object_page_clean(vm_object_t object, vm_pindex_t start, vm_pindex_t end, int
 	int curgeneration;
 
 	VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
-	if (object->type != OBJT_VNODE ||
-		(object->flags & OBJ_MIGHTBEDIRTY) == 0)
+	if ((object->flags & OBJ_MIGHTBEDIRTY) == 0)
 		return;
+	KASSERT(object->type == OBJT_VNODE, ("Not a vnode object"));
 
 	pagerflags = (flags & (OBJPC_SYNC | OBJPC_INVAL)) ? VM_PAGER_PUT_SYNC : VM_PAGER_CLUSTER_OK;
 	pagerflags |= (flags & OBJPC_INVAL) ? VM_PAGER_PUT_INVAL : 0;
@@ -875,18 +875,8 @@ vm_object_page_clean(vm_object_t object, vm_pindex_t start, vm_pindex_t end, int
 			pmap_remove_write(p);
 	}
 
-	if (clearobjflags && (tstart == 0) && (tend == object->size)) {
-		struct vnode *vp;
-
+	if (clearobjflags && (tstart == 0) && (tend == object->size))
 		vm_object_clear_flag(object, OBJ_MIGHTBEDIRTY);
-		if (object->type == OBJT_VNODE &&
-		    (vp = (struct vnode *)object->handle) != NULL) {
-			VI_LOCK(vp);
-			if (vp->v_iflag & VI_OBJDIRTY)
-				vp->v_iflag &= ~VI_OBJDIRTY;
-			VI_UNLOCK(vp);
-		}
-	}
 
 rescan:
 	curgeneration = object->generation;
@@ -2148,18 +2138,12 @@ vm_object_coalesce(vm_object_t prev_object, vm_ooffset_t prev_offset,
 void
 vm_object_set_writeable_dirty(vm_object_t object)
 {
-	struct vnode *vp;
 
 	VM_OBJECT_LOCK_ASSERT(object, MA_OWNED);
-	if ((object->flags & OBJ_MIGHTBEDIRTY) != 0)
+	if (object->type != OBJT_VNODE ||
+	    (object->flags & OBJ_MIGHTBEDIRTY) != 0)
 		return;
 	vm_object_set_flag(object, OBJ_MIGHTBEDIRTY);
-	if (object->type == OBJT_VNODE &&
-	    (vp = (struct vnode *)object->handle) != NULL) {
-		VI_LOCK(vp);
-		vp->v_iflag |= VI_OBJDIRTY;
-		VI_UNLOCK(vp);
-	}
 }
 
 #include "opt_ddb.h"
diff --git a/sys/vm/vm_object.h b/sys/vm/vm_object.h
index 0b06fed2828..6a9f129cf83 100644
--- a/sys/vm/vm_object.h
+++ b/sys/vm/vm_object.h
@@ -154,7 +154,7 @@ struct vm_object {
 #define OBJ_DEAD	0x0008		/* dead objects (during rundown) */
 #define	OBJ_NOSPLIT	0x0010		/* dont split this object */
 #define OBJ_PIPWNT	0x0040		/* paging in progress wanted */
-#define OBJ_MIGHTBEDIRTY 0x0100		/* object might be dirty */
+#define OBJ_MIGHTBEDIRTY 0x0100		/* object might be dirty, only for vnode */
 #define OBJ_CLEANING	0x0200
 #define	OBJ_COLORED	0x1000		/* pg_color is defined */
 #define	OBJ_ONEMAPPING	0x2000		/* One USE (a single, non-forked) mapping flag */
diff --git a/sys/xen/gnttab.c b/sys/xen/gnttab.c
index d05790bbf84..ae44e8f6a8f 100644
--- a/sys/xen/gnttab.c
+++ b/sys/xen/gnttab.c
@@ -325,7 +325,7 @@ gnttab_claim_grant_reference(grant_ref_t *private_head)
 	grant_ref_t g = *private_head;
 
 	if (unlikely(g == GNTTAB_LIST_END))
-		return (ENOSPC);
+		return (g);
 	*private_head = gnttab_entry(g);
 	return (g);
 }
diff --git a/tools/regression/acct/Makefile b/tools/regression/acct/Makefile
index 6834fcbe283..09f8b323ecd 100644
--- a/tools/regression/acct/Makefile
+++ b/tools/regression/acct/Makefile
@@ -6,12 +6,16 @@
 PROG=	pack
 NO_MAN=
 
+CFLAGS= -include /usr/include/sys/limits.h \
+	-include /usr/include/sys/syslog.h
+
 all: regress
 
 pack: pack.c convert.c
 
 convert.c: ../../../sys/kern/kern_acct.c
-	sed -n '/FLOAT_CONVERSION_START/,/FLOAT_CONVERSION_END/p' $? >$@
+	sed -n -e 's/log(/syslog(/g' \
+	       -e '/FLOAT_CONVERSION_START/,/FLOAT_CONVERSION_END/p' $? >$@
 
 regress: pack regress.t
 	./regress.t
diff --git a/tools/regression/acct/regress.t b/tools/regression/acct/regress.t
old mode 100644
new mode 100755
index c078caa924e..8bb8969af7e
--- a/tools/regression/acct/regress.t
+++ b/tools/regression/acct/regress.t
@@ -17,6 +17,8 @@ check()
 	fi
 }
 
+(cd $DIR ; make pack) >/dev/null 2>&1
+
 echo 1..7
 
 check 1 0 0
@@ -27,4 +29,6 @@ check 5 1 1000000
 check 6 2147483647 999999
 check 7 10000000
 
+(cd $DIR ; make clean) >/dev/null 2>&1
+
 exit 0
diff --git a/tools/regression/acltools/02.t b/tools/regression/acltools/02.t
new file mode 100644
index 00000000000..431375ed5b7
--- /dev/null
+++ b/tools/regression/acltools/02.t
@@ -0,0 +1,86 @@
+#!/bin/sh
+#
+# Copyright (c) 2008, 2009 Edward Tomasz Napierała 
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+#
+# $FreeBSD$
+#
+
+# This is a wrapper script to run tools-nfs4.test.
+#
+# If any of the tests fails, here is how to debug it: go to
+# the directory with problematic filesystem mounted on it,
+# and do /path/to/test run /path/to/test tools-nfs4.test, e.g.
+#
+# /usr/src/tools/regression/acltools/run /usr/src/tools/regression/acltools/tools-nfs4.test
+#
+# Output should be obvious.
+
+echo "1..4"
+
+if [ `whoami` != "root" ]; then
+	echo "not ok 1 - you need to be root to run this test."
+	exit 1
+fi
+
+TESTDIR=`dirname $0`
+
+# Set up the test filesystem.
+MD=`mdconfig -at swap -s 10m`
+MNT=`mktemp -dt acltools`
+newfs /dev/$MD > /dev/null
+mount -o nfsv4acls /dev/$MD $MNT
+if [ $? -ne 0 ]; then
+	echo "not ok 1 - mount failed."
+	exit 1
+fi
+
+echo "ok 1"
+
+cd $MNT
+
+# First, check whether we can crash the kernel by creating too many
+# entries.  For some reason this won't work in the test file.
+touch xxx
+setfacl -x5 xxx
+while :; do setfacl -a0 u:42:rwx:allow xxx 2> /dev/null; if [ $? -ne 0 ]; then break; fi; done
+chmod 600 xxx
+rm xxx
+echo "ok 2"
+
+perl $TESTDIR/run $TESTDIR/tools-nfs4.test > /dev/null
+
+if [ $? -eq 0 ]; then
+	echo "ok 3"
+else
+	echo "not ok 3"
+fi
+
+cd /
+umount -f $MNT
+rmdir $MNT
+mdconfig -du $MD
+
+echo "ok 4"
+
diff --git a/tools/regression/acltools/tools-crossfs.test b/tools/regression/acltools/tools-crossfs.test
index f6c5ed408b7..6652a120bef 100644
--- a/tools/regression/acltools/tools-crossfs.test
+++ b/tools/regression/acltools/tools-crossfs.test
@@ -56,17 +56,14 @@ $ getfacl -nq posix/xxx
 > group::r--
 > other::r--
 
-$ rm posix/xxx
-
-# mv without any ACLs.
-$ chmod 456 nfs4/xxx
-$ mv nfs4/xxx posix/
+# mv with POSIX.1e ACLs.
+$ rm -f posix/xxx
+$ rm -f posix/yyy
+$ touch posix/xxx
+$ chmod 456 posix/xxx
 $ ls -l posix/xxx | cut -d' ' -f1
 > -r--r-xrw-
-
-# mv with POSIX.1e ACLs.
 $ setfacl -m u:42:x,g:43:w posix/xxx
-$ rm -f posix/yyy
 $ mv posix/xxx posix/yyy
 $ getfacl -nq posix/yyy
 > user::r--
@@ -75,9 +72,30 @@ $ getfacl -nq posix/yyy
 > group:43:-w-
 > mask::rwx
 > other::rw-
+$ ls -l posix/yyy | cut -d' ' -f1
+> -r--rwxrw-+
+
+# mv from POSIX.1e to none.
+$ rm -f posix/xxx
+$ rm -f none/xxx
+$ touch posix/xxx
+$ chmod 345 posix/xxx
+$ setfacl -m u:42:x,g:43:w posix/xxx
+$ ls -l posix/xxx | cut -d' ' -f1
+> --wxrwxr-x+
+$ mv posix/xxx none/xxx
+> mv: failed to set acl entries for none/xxx: Operation not supported
+$ ls -l none/xxx | cut -d' ' -f1
+> --wxrwxr-x
 
 # mv from POSIX.1e to NFSv4.
+$ rm -f posix/xxx
 $ rm -f nfs4/xxx
+$ touch posix/xxx
+$ chmod 456 posix/xxx
+$ setfacl -m u:42:x,g:43:w posix/xxx
+$ ls -l posix/xxx | cut -d' ' -f1
+> -r--rwxrw-+
 $ mv posix/yyy nfs4/xxx
 > mv: failed to set acl entries for nfs4/xxx: Invalid argument
 $ getfacl -nq nfs4/xxx
@@ -87,37 +105,82 @@ $ getfacl -nq nfs4/xxx
 >             group@:rwxp----------:------:allow
 >          everyone@:--x----A-W-Co-:------:deny
 >          everyone@:rw-p--a-R-c--s:------:allow
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> -r--rwxrw-
 
 # mv with NFSv4 ACLs.
-$ setfacl -a0 u:42:x:allow,g:43:w:allow nfs4/xxx
+$ rm -f nfs4/xxx
 $ rm -f nfs4/yyy
+$ touch nfs4/xxx
+$ setfacl -a0 u:42:x:allow,g:43:w:allow nfs4/xxx
 $ mv nfs4/xxx nfs4/yyy
 $ getfacl -nq nfs4/yyy
 >            user:42:--x-----------:------:allow
 >           group:43:-w------------:------:allow
->             owner@:-wxp----------:------:deny
->             owner@:r------A-W-Co-:------:allow
->             group@:--------------:------:deny
->             group@:rwxp----------:------:allow
->          everyone@:--x----A-W-Co-:------:deny
->          everyone@:rw-p--a-R-c--s:------:allow
+>             owner@:--x-----------:------:deny
+>             owner@:rw-p---A-W-Co-:------:allow
+>             group@:-wxp----------:------:deny
+>             group@:r-------------:------:allow
+>          everyone@:-wxp---A-W-Co-:------:deny
+>          everyone@:r-----a-R-c--s:------:allow
+$ ls -l nfs4/yyy | cut -d' ' -f1
+> -rw-r--r--+
 
-# mv from NFSv4 to POSIX.1e.
+# mv from NFSv4 to POSIX.1e without any ACLs.
+$ rm -f nfs4/xxx
 $ rm -f posix/xxx
-$ mv nfs4/yyy posix/xxx
-> mv: failed to set acl entries for posix/xxx: Invalid argument
+$ touch nfs4/xxx
+$ chmod 456 nfs4/xxx
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> -r--r-xrw-
+$ mv nfs4/xxx posix/xxx
 $ ls -l posix/xxx | cut -d' ' -f1
-> -r--rwxrw-
+> -r--r-xrw-
 
-# mv from POSIX.1e to none.
-$ setfacl -m u:42:x,g:43:w posix/xxx
-$ mv posix/xxx none/xxx
+# mv from NFSv4 to none.
+$ rm -f nfs4/xxx
+$ rm -f none/xxx
+$ touch nfs4/xxx
+$ chmod 345 nfs4/xxx
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> --wxr--r-x
+$ setfacl -a0 u:42:x:allow,g:43:w:allow nfs4/xxx
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> --wxr--r-x+
+$ mv nfs4/xxx none/xxx
 > mv: failed to set acl entries for none/xxx: Operation not supported
 $ ls -l none/xxx | cut -d' ' -f1
-> -r--rwxrw-
+> --wxr--r-x
+
+# mv from NFSv4 to POSIX.1e.
+$ rm -f nfs4/xxx
+$ rm -f posix/xxx
+$ touch nfs4/xxx
+$ chmod 345 nfs4/xxx
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> --wxr--r-x
+$ setfacl -a0 u:42:x:allow,g:43:w:allow nfs4/xxx
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> --wxr--r-x+
+$ mv nfs4/xxx posix/xxx
+> mv: failed to set acl entries for posix/xxx: Invalid argument
+$ ls -l posix/xxx | cut -d' ' -f1
+> --wxr--r-x
 
 # cp with POSIX.1e ACLs.
 $ rm -f posix/xxx
+$ rm -f posix/yyy
+$ touch posix/xxx
+$ setfacl -m u:42:x,g:43:w posix/xxx
+$ ls -l posix/xxx | cut -d' ' -f1
+> -rw-rwxr--+
+$ cp posix/xxx posix/yyy
+$ ls -l posix/yyy | cut -d' ' -f1
+> -rw-r-xr--
+
+# cp -p with POSIX.1e ACLs.
+$ rm -f posix/xxx
+$ rm -f posix/yyy
 $ touch posix/xxx
 $ setfacl -m u:42:x,g:43:w posix/xxx
 $ getfacl -nq posix/xxx
@@ -127,15 +190,8 @@ $ getfacl -nq posix/xxx
 > group:43:-w-
 > mask::rwx
 > other::r--
-
-$ rm -f posix/yyy
-$ cp posix/xxx posix/yyy
-$ getfacl -nq posix/yyy
-> user::rw-
-> group::r-x
-> other::r--
-
-$ rm -f posix/yyy
+$ ls -l posix/xxx | cut -d' ' -f1
+> -rw-rwxr--+
 $ cp -p posix/xxx posix/yyy
 $ getfacl -nq posix/yyy
 > user::rw-
@@ -144,35 +200,132 @@ $ getfacl -nq posix/yyy
 > group:43:-w-
 > mask::rwx
 > other::r--
+$ ls -l posix/yyy | cut -d' ' -f1
+> -rw-rwxr--+
 
-# mv from POSIX.1e to NFSv4.
+# cp from POSIX.1e to none.
+$ rm -f posix/xxx
+$ rm -f none/xxx
+$ touch posix/xxx
+$ setfacl -m u:42:x,g:43:w posix/xxx
+$ ls -l posix/xxx | cut -d' ' -f1
+> -rw-rwxr--+
+$ cp posix/xxx none/xxx
+$ ls -l none/xxx | cut -d' ' -f1
+> -rw-r-xr--
+
+# cp -p from POSIX.1e to none.
+$ rm -f posix/xxx
+$ rm -f none/xxx
+$ touch posix/xxx
+$ setfacl -m u:42:x,g:43:w posix/xxx
+$ ls -l posix/xxx | cut -d' ' -f1
+> -rw-rwxr--+
+$ cp -p posix/xxx none/xxx
+> cp: failed to set acl entries for none/xxx: Operation not supported
+$ ls -l none/xxx | cut -d' ' -f1
+> -rw-rwxr--
+
+# cp from POSIX.1e to NFSv4.
+$ rm -f posix/xxx
 $ rm -f nfs4/xxx
+$ touch posix/xxx
+$ setfacl -m u:42:x,g:43:w posix/xxx
+$ ls -l posix/xxx | cut -d' ' -f1
+> -rw-rwxr--+
+$ cp posix/xxx nfs4/xxx
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> -rw-r-xr--
+
+# cp -p from POSIX.1e to NFSv4.
+$ rm -f posix/xxx
+$ rm -f nfs4/xxx
+$ touch posix/xxx
+$ setfacl -m u:42:x,g:43:w posix/xxx
+$ ls -l posix/xxx | cut -d' ' -f1
+> -rw-rwxr--+
 $ cp -p posix/xxx nfs4/xxx
 > cp: failed to set acl entries for nfs4/xxx: Invalid argument
 $ ls -l nfs4/xxx | cut -d' ' -f1
 > -rw-rwxr--
 
 # cp with NFSv4 ACLs.
-$ setfacl -a0 u:42:x:allow,g:43:w:allow nfs4/xxx
+$ rm -f nfs4/xxx
 $ rm -f nfs4/yyy
+$ touch nfs4/xxx
+$ chmod 543 nfs4/xxx
+$ setfacl -a0 u:42:x:allow,g:43:w:allow nfs4/xxx
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> -r-xr---wx+
+$ cp nfs4/xxx nfs4/yyy
+$ ls -l nfs4/yyy | cut -d' ' -f1
+> -r-xr----x
+
+# cp -p with NFSv4 ACLs.
+$ rm -f nfs4/xxx
+$ rm -f nfs4/yyy
+$ touch nfs4/xxx
+$ chmod 543 nfs4/xxx
+$ setfacl -a0 u:42:x:allow,g:43:w:allow nfs4/xxx
 $ cp -p nfs4/xxx nfs4/yyy
 $ getfacl -nq nfs4/yyy
 >            user:42:--x-----------:------:allow
 >           group:43:-w------------:------:allow
->             owner@:--x-----------:------:deny
->             owner@:rw-p---A-W-Co-:------:allow
->             group@:--------------:------:deny
->             group@:rwxp----------:------:allow
->          everyone@:-wxp---A-W-Co-:------:deny
->          everyone@:r-----a-R-c--s:------:allow
+>             owner@:-w-p----------:------:deny
+>             owner@:r-x----A-W-Co-:------:allow
+>             group@:-wxp----------:------:deny
+>             group@:r-------------:------:allow
+>          everyone@:r------A-W-Co-:------:deny
+>          everyone@:-wxp--a-R-c--s:------:allow
+$ ls -l nfs4/yyy | cut -d' ' -f1
+> -r-xr---wx+
+
+# cp from NFSv4 to none.
+$ rm -f nfs4/xxx
+$ rm -f none/xxx
+$ touch nfs4/xxx
+$ chmod 543 nfs4/xxx
+$ setfacl -a0 u:42:x:allow,g:43:w:allow nfs4/xxx
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> -r-xr---wx+
+$ cp nfs4/xxx none/xxx
+$ ls -l none/xxx | cut -d' ' -f1
+> -r-xr----x
+
+# cp -p from NFSv4 to none.
+$ rm -f nfs4/xxx
+$ rm -f none/xxx
+$ touch nfs4/xxx
+$ chmod 543 nfs4/xxx
+$ setfacl -a0 u:42:x:allow,g:43:w:allow nfs4/xxx
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> -r-xr---wx+
+$ cp -p nfs4/xxx none/xxx
+> cp: failed to set acl entries for none/xxx: Operation not supported
+$ ls -l none/xxx | cut -d' ' -f1
+> -r-xr---wx
 
 # cp from NFSv4 to POSIX.1e.
+$ rm -f nfs4/xxx
 $ rm -f posix/xxx
+$ touch nfs4/xxx
+$ chmod 543 nfs4/xxx
+$ setfacl -a0 u:42:x:allow,g:43:w:allow nfs4/xxx
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> -r-xr---wx+
+$ cp nfs4/xxx posix/xxx
+$ ls -l posix/xxx | cut -d' ' -f1
+> -r-xr----x
+
+# cp -p from NFSv4 to POSIX.1e.
+$ rm -f nfs4/xxx
+$ rm -f posix/xxx
+$ touch nfs4/xxx
+$ chmod 543 nfs4/xxx
+$ setfacl -a0 u:42:x:allow,g:43:w:allow nfs4/xxx
+$ ls -l nfs4/xxx | cut -d' ' -f1
+> -r-xr---wx+
 $ cp -p nfs4/xxx posix/xxx
 > cp: failed to set acl entries for posix/xxx: Invalid argument
 $ ls -l posix/xxx | cut -d' ' -f1
-> -rw-rwxr--
-
-$ cp -p nfs4/yyy none/xxx
-> cp: failed to set acl entries for none/xxx: Operation not supported
-
+> -r-xr---wx
diff --git a/tools/regression/bin/date/regress.sh b/tools/regression/bin/date/regress.sh
index 463e49c8f8f..9f4b68bef13 100644
--- a/tools/regression/bin/date/regress.sh
+++ b/tools/regression/bin/date/regress.sh
@@ -35,19 +35,21 @@ check()
 
 	R=`date -r ${TEST1} +%${S}`
 	if [ "${R}" = "${A1}" ]; then
-		echo "${count}a. ${S} - ok"
+		echo "ok ${S}{t1}"
 	else
-		echo "${count}a. ${S} - not ok (got ${R}, expected ${A1})"
+		echo "no ok ${S}{t1} - (got ${R}, expected ${A1})"
 	fi
 
 	R=`date -r ${TEST2} +%${S}`
 	if [ "${R}" = "${A2}" ]; then
-		echo "${count}b. ${S} - ok"
+		echo "ok ${S}{t2}"
 	else
-		echo "${count}b. ${S} - not ok (got ${R}, expected ${A2})"
+		echo "no ok ${S}{t2} - (got ${R}, expected ${A2})"
 	fi
 }
 
+echo "1..78"
+
 check A Saturday Monday
 check a Sat Mon
 check B February November
diff --git a/tools/regression/bin/mv/regress.sh b/tools/regression/bin/mv/regress.sh
index 9283a9f3b1c..d0a5e83440c 100644
--- a/tools/regression/bin/mv/regress.sh
+++ b/tools/regression/bin/mv/regress.sh
@@ -184,7 +184,7 @@ do
 	# Should fail per POSIX step 3a:
 	# Destination path is a file of type directory and
 	# source_file is not a file of type directory
-	mv 1/2/3/fa ${FS}db
+	mv 1/2/3/fa ${FS}db 2>/dev/null
 	ckfail $?
 	ckf fa 1/2/3/fa
 	end
@@ -238,7 +238,7 @@ do
 	mkd da1/da2/da3/da
 	mkdir -p ${FS}db1/db2/db3/da/full
 	# Should fail (per the semantics of rename(2))
-	mv da1/da2/da3/da ${FS}db1/db2/db3
+	mv da1/da2/da3/da ${FS}db1/db2/db3 2>/dev/null
 	ckfail $?
 	ckd da da1/da2/da3/da
 	end
@@ -250,7 +250,7 @@ do
 	# Should fail per POSIX step 3b:
 	# Destination path is a file not of type directory
 	# and source_file is a file of type directory
-	mv da1/da2/da3/da ${FS}db1/db2/db3/da
+	mv da1/da2/da3/da ${FS}db1/db2/db3/da 2>/dev/null
 	ckfail $?
 	ckd da da1/da2/da3/da
 	end
diff --git a/tools/regression/bin/sh/builtins/builtin1.0 b/tools/regression/bin/sh/builtins/builtin1.0
new file mode 100644
index 00000000000..b6083858f67
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/builtin1.0
@@ -0,0 +1,31 @@
+# $FreeBSD$
+
+failures=0
+
+check() {
+	if ! eval "[ $* ]"; then
+		echo "Failed: $*"
+		: $((failures += 1))
+	fi
+}
+
+builtin : || echo "Bad return code at $LINENO"
+builtin true || echo "Bad return code at $LINENO"
+builtin ls 2>/dev/null && echo "Bad return code at $LINENO"
+check '"$(builtin pwd)" = "$(pwd)"'
+check '-z "$(builtin :)"'
+check '-z "$(builtin true)"'
+check '-z "$( (builtin nosuchtool) 2>/dev/null)"'
+check '-z "$(builtin nosuchtool 2>/dev/null)"'
+check '-z "$(builtin nosuchtool 2>/dev/null; :)"'
+check '-z "$( (builtin ls) 2>/dev/null)"'
+check '-z "$(builtin ls 2>/dev/null)"'
+check '-z "$(builtin ls 2>/dev/null; :)"'
+check '-n "$( (builtin nosuchtool) 2>&1)"'
+check '-n "$(builtin nosuchtool 2>&1)"'
+check '-n "$(builtin nosuchtool 2>&1; :)"'
+check '-n "$( (builtin ls) 2>&1)"'
+check '-n "$(builtin ls 2>&1)"'
+check '-n "$(builtin ls 2>&1; :)"'
+
+exit $((failures > 0))
diff --git a/tools/regression/bin/sh/builtins/cd1.0 b/tools/regression/bin/sh/builtins/cd1.0
index 52970232bf4..b6151743ebf 100644
--- a/tools/regression/bin/sh/builtins/cd1.0
+++ b/tools/regression/bin/sh/builtins/cd1.0
@@ -1,17 +1,27 @@
 # $FreeBSD$
 set -e
 
-PDIR=${TMPDIR:-/tmp}
-cd ${PDIR}
-TMPDIR=$(mktemp -d sh-test.XXXXXX)
-chmod 0 ${TMPDIR}
+P=${TMPDIR:-/tmp}
+cd $P
+T=$(mktemp -d sh-test.XXXXXX)
 
-cd -L ${TMPDIR} 2>/dev/null && exit 1
-[ "${PWD}" = "${PDIR}" ]
-[ "$(pwd)" = "${PDIR}" ]
-cd -P ${TMPDIR} 2>/dev/null && exit 1
-[ "${PWD}" = "${PDIR}" ]
-[ "$(pwd)" = "${PDIR}" ]
+chmod 0 $T
+cd -L $T 2>/dev/null && exit 1
+[ "$PWD" = "$P" ]
+[ "$(pwd)" = "$P" ]
+cd -P $T 2>/dev/null && exit 1
+[ "$PWD" = "$P" ]
+[ "$(pwd)" = "$P" ]
 
-chmod 755 ${TMPDIR}
-rmdir ${TMPDIR}
+chmod 755 $T
+cd $T
+mkdir -p 1/2/3
+ln -s 1/2 link1
+ln -s 2/3 1/link2
+(cd -L 1/../1 && [ "$(pwd -L)" = "$P/$T/1" ])
+(cd -L link1 && [ "$(pwd -L)" = "$P/$T/link1" ])
+(cd -L link1 && [ "$(pwd -P)" = "$P/$T/1/2" ])
+(cd -P link1 && [ "$(pwd -L)" = "$P/$T/1/2" ])
+(cd -P link1 && [ "$(pwd -P)" = "$P/$T/1/2" ])
+
+rm -rf ${P}/${T}
diff --git a/tools/regression/bin/sh/builtins/cd2.0 b/tools/regression/bin/sh/builtins/cd2.0
new file mode 100644
index 00000000000..eb8caf5dada
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/cd2.0
@@ -0,0 +1,15 @@
+# $FreeBSD$
+set -e
+
+T=$(mktemp -d ${TMPDIR:-/tmp}/sh-test.XXXXXX)
+cd $T
+D=$T
+for i in 0 1 2 3 4 5 6 7 8 9; do
+	for j in 0 1 2 3 4 5 6 7 8 9; do
+		mkdir veryverylongdirectoryname
+		cd veryverylongdirectoryname
+		D=$D/veryverylongdirectoryname
+	done
+done
+[ $(pwd | wc -c) -eq $((${#D} + 1)) ] # +\n
+rm -rf ${T}
diff --git a/tools/regression/bin/sh/builtins/command6.0 b/tools/regression/bin/sh/builtins/command6.0
new file mode 100644
index 00000000000..2ba836e58a2
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/command6.0
@@ -0,0 +1,15 @@
+# $FreeBSD$
+PATH=/var/empty
+command -pV ls
+command -pV true
+command -pV /bin/ls
+
+fun() {
+}
+command -pV fun
+command -pV break
+command -pV if
+command -pV {
+
+alias foo=bar
+command -pV foo
diff --git a/tools/regression/bin/sh/builtins/command6.0.stdout b/tools/regression/bin/sh/builtins/command6.0.stdout
new file mode 100644
index 00000000000..4cb2b11fb49
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/command6.0.stdout
@@ -0,0 +1,8 @@
+ls is /bin/ls
+true is a shell builtin
+/bin/ls is /bin/ls
+fun is a shell function
+break is a special shell builtin
+if is a shell keyword
+{ is a shell keyword
+foo is an alias for bar 
diff --git a/tools/regression/bin/sh/builtins/command7.0 b/tools/regression/bin/sh/builtins/command7.0
new file mode 100644
index 00000000000..897a14cf6bc
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/command7.0
@@ -0,0 +1,29 @@
+# $FreeBSD$
+
+failures=0
+
+check() {
+	if ! eval "[ $* ]"; then
+		echo "Failed: $*"
+		: $((failures += 1))
+	fi
+}
+
+check '"$(PATH=/libexec command -V ld-elf.so.1)" = "ld-elf.so.1 is /libexec/ld-elf.so.1"'
+check '"$(PATH=/libexec command -V ld-elf.so.1; :)" = "ld-elf.so.1 is /libexec/ld-elf.so.1"'
+check '"$(PATH=/libexec command -pv ld-elf.so.1)" = ""'
+check '"$(PATH=/libexec command -pv ld-elf.so.1; :)" = ""'
+
+PATH=/libexec:$PATH
+
+check '"$(command -V ld-elf.so.1)" = "ld-elf.so.1 is /libexec/ld-elf.so.1"'
+check '"$(command -V ld-elf.so.1; :)" = "ld-elf.so.1 is /libexec/ld-elf.so.1"'
+check '"$(command -pv ld-elf.so.1)" = ""'
+check '"$(command -pv ld-elf.so.1; :)" = ""'
+
+PATH=/libexec
+
+check '"$(command -v ls)" = ""'
+check '"$(command -pv ls)" = "/bin/ls"'
+
+exit $((failures > 0))
diff --git a/tools/regression/bin/sh/builtins/fc1.0 b/tools/regression/bin/sh/builtins/fc1.0
new file mode 100644
index 00000000000..7cf0d943a13
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/fc1.0
@@ -0,0 +1,27 @@
+# $FreeBSD$
+set -e
+trap 'echo Broken pipe -- test failed' pipe
+
+P=${TMPDIR:-/tmp}
+cd $P
+T=$(mktemp -d sh-test.XXXXXX)
+cd $T
+
+mkfifo input output error
+HISTFILE=/dev/null sh +m -i output 2>error &
+{
+	# Syntax error
+	echo ')' >&3
+	# Read error message, shell will read new input now
+	read dummy <&5
+	# Execute bad command again
+	echo 'fc -e true' >&3
+	# Verify that the shell is still running
+	echo 'echo continued' >&3 || rc=3
+	echo 'exit' >&3 || rc=3
+	read line <&4 && [ "$line" = continued ] && : ${rc:=0}
+} 3>input 4output 2>error &
+exec 3>input
+{
+	# Command not found, containing slash
+	echo '/var/empty/nonexistent' >&3
+	# Read error message, shell will read new input now
+	read dummy <&5
+	# Execute bad command again
+	echo 'fc -e true; echo continued' >&3
+	read dummy <&5
+	read line <&4 && [ "$line" = continued ] && : ${rc:=0}
+	exec 3>&-
+	# Old sh duplicates itself after the fc, producing another line
+	# of output.
+	if read line <&4; then
+		echo "Extraneous output: $line"
+		rc=1
+	fi
+} 4&-
+
+rm input output error
+rmdir ${P}/${T}
+exit ${rc:-3}
diff --git a/tools/regression/bin/sh/builtins/trap3.0 b/tools/regression/bin/sh/builtins/trap3.0
new file mode 100644
index 00000000000..41bdd61747a
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/trap3.0
@@ -0,0 +1,12 @@
+# $FreeBSD$
+
+{
+	trap '' garbage && exit 3
+	trap - garbage && exit 3
+	trap true garbage && exit 3
+	trap '' 99999 && exit 3
+	trap - 99999 && exit 3
+	trap true 99999 && exit 3
+} 2>/dev/null
+test -n "$(trap true garbage TERM 2>/dev/null || trap)" || exit 3
+exit 0
diff --git a/tools/regression/bin/sh/builtins/type2.0 b/tools/regression/bin/sh/builtins/type2.0
new file mode 100644
index 00000000000..fe44d957fc0
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/type2.0
@@ -0,0 +1,26 @@
+# $FreeBSD$
+
+failures=0
+
+check() {
+	if ! eval "$*"; then
+		echo "Failed: $*"
+		: $((failures += 1))
+	fi
+}
+
+check 'PATH=/libexec type ld-elf.so.1 >/dev/null'
+check '! PATH=/libexec type ls 2>/dev/null'
+
+PATH=/libexec:$PATH
+
+check 'type ld-elf.so.1 >/dev/null'
+
+PATH=/libexec
+
+check 'type ld-elf.so.1 >/dev/null'
+check '! type ls 2>/dev/null'
+check 'PATH=/bin type ls >/dev/null'
+check '! PATH=/bin type ld-elf.so.1 2>/dev/null'
+
+exit $((failures > 0))
diff --git a/tools/regression/bin/sh/errors/backquote-error1.0 b/tools/regression/bin/sh/errors/backquote-error1.0
index 4d539c03178..2a40c88e1be 100644
--- a/tools/regression/bin/sh/errors/backquote-error1.0
+++ b/tools/regression/bin/sh/errors/backquote-error1.0
@@ -1,4 +1,4 @@
 # $FreeBSD$
 
-echo 'echo `for` echo ".BAD"CODE.' | sh -i 2>&1 | grep -q BADCODE && exit 1
+echo 'echo `for` echo ".BAD"CODE.' | sh +m -i 2>&1 | grep -q BADCODE && exit 1
 exit 0
diff --git a/tools/regression/bin/sh/execution/redir1.0 b/tools/regression/bin/sh/execution/redir1.0
new file mode 100644
index 00000000000..cc5cc49318f
--- /dev/null
+++ b/tools/regression/bin/sh/execution/redir1.0
@@ -0,0 +1,27 @@
+# $FreeBSD$
+trap ': $((brokenpipe+=1))' pipe
+
+P=${TMPDIR:-/tmp}
+cd $P
+T=$(mktemp -d sh-test.XXXXXX)
+cd $T
+
+brokenpipe=0
+mkfifo fifo1 fifo2
+read dummy >fifo2 fifo2
+} 3fifo1
+if [ $brokenpipe -ne 0 ]; then
+	rc=3
+fi
+wait
+echo dummy >&4
+if [ $brokenpipe -eq 1 ]; then
+	: ${rc:=0}
+fi
+
+rm fifo1 fifo2
+rmdir ${P}/${T}
+exit ${rc:-3}
diff --git a/tools/regression/bin/sh/execution/redir2.0 b/tools/regression/bin/sh/execution/redir2.0
new file mode 100644
index 00000000000..079ee82f533
--- /dev/null
+++ b/tools/regression/bin/sh/execution/redir2.0
@@ -0,0 +1,29 @@
+# $FreeBSD$
+trap ': $((brokenpipe+=1))' pipe
+
+P=${TMPDIR:-/tmp}
+cd $P
+T=$(mktemp -d sh-test.XXXXXX)
+cd $T
+
+brokenpipe=0
+mkfifo fifo1 fifo2
+{
+	{
+		exec sh -c 'exec fifo2
+exec 3>fifo1
+echo dummy >&4
+if [ $brokenpipe -eq 1 ]; then
+	: ${rc:=0}
+fi
+echo dummy >&3
+wait
+
+rm fifo1 fifo2
+rmdir ${P}/${T}
+exit ${rc:-3}
diff --git a/tools/regression/bin/sh/expansion/arith1.0 b/tools/regression/bin/sh/expansion/arith1.0
new file mode 100644
index 00000000000..118ba226568
--- /dev/null
+++ b/tools/regression/bin/sh/expansion/arith1.0
@@ -0,0 +1,30 @@
+# $FreeBSD$
+
+failures=0
+
+check() {
+	if [ $(($1)) != $2 ]; then
+		failures=$((failures+1))
+		echo "For $1, expected $2 actual $(($1))"
+	fi
+}
+
+check "0&&0" 0
+check "1&&0" 0
+check "0&&1" 0
+check "1&&1" 1
+check "2&&2" 1
+check "1&&2" 1
+check "1<<40&&1<<40" 1
+check "1<<40&&4" 1
+
+check "0||0" 0
+check "1||0" 1
+check "0||1" 1
+check "1||1" 1
+check "2||2" 1
+check "1||2" 1
+check "1<<40||1<<40" 1
+check "1<<40||4" 1
+
+exit $((failures != 0))
diff --git a/tools/regression/bin/sh/expansion/arith2.0 b/tools/regression/bin/sh/expansion/arith2.0
new file mode 100644
index 00000000000..c4fdccd5531
--- /dev/null
+++ b/tools/regression/bin/sh/expansion/arith2.0
@@ -0,0 +1,76 @@
+# $FreeBSD$
+
+failures=0
+
+check() {
+	if [ $(($1)) != $2 ]; then
+		failures=$((failures+1))
+		echo "For $1, expected $2 actual $(($1))"
+	fi
+}
+
+# variables
+unset v
+check "v=2" 2
+check "v" 2
+check "$(($v))" 2
+check "v+=1" 3
+check "v" 3
+
+# constants
+check "4611686018427387904" 4611686018427387904
+check "0x4000000000000000" 4611686018427387904
+check "0400000000000000000000" 4611686018427387904
+check "0x4Ab0000000000000" 5381801554707742720
+
+# try out all operators
+v=42
+check "!v" 0
+check "!!v" 1
+check "!0" 1
+check "~0" -1
+check "~(-1)" 0
+check "-0" 0
+check "-v" -42
+check "v*v" 1764
+check "v/2" 21
+check "v%10" 2
+check "v+v" 84
+check "v-4" 38
+check "v<<1" 84
+check "v>>1" 21
+check "v<43" 1
+check "v>42" 0
+check "v<=43" 1
+check "v>=43" 0
+check "v==41" 0
+check "v!=42" 0
+check "v&3" 2
+check "v^3" 41
+check "v|3" 43
+check "v>=40&&v<=44" 1
+check "v<40||v>44" 0
+check "(v=42)&&(v+=1)==43" 1
+check "v" 43
+check "(v=42)&&(v-=1)==41" 1
+check "v" 41
+check "(v=42)&&(v*=2)==84" 1
+check "v" 84
+check "(v=42)&&(v/=10)==4" 1
+check "v" 4
+check "(v=42)&&(v%=10)==2" 1
+check "v" 2
+check "(v=42)&&(v<<=1)==84" 1
+check "v" 84
+check "(v=42)&&(v>>=2)==10" 1
+check "v" 10
+check "(v=42)&&(v&=32)==32" 1
+check "v" 32
+check "(v=42)&&(v^=32)==10" 1
+check "v" 10
+check "(v=42)&&(v|=32)==42" 1
+check "v" 42
+
+# missing: ternary, comma
+
+exit $((failures != 0))
diff --git a/tools/regression/bin/sh/expansion/cmdsubst1.0 b/tools/regression/bin/sh/expansion/cmdsubst1.0
new file mode 100644
index 00000000000..515c7da9aca
--- /dev/null
+++ b/tools/regression/bin/sh/expansion/cmdsubst1.0
@@ -0,0 +1,48 @@
+# $FreeBSD$
+
+failures=0
+
+check() {
+	if ! eval "[ $* ]"; then
+		echo "Failed: $*"
+		: $((failures += 1))
+	fi
+}
+
+check '"$(echo abcde)" = "abcde"'
+check '"$(echo abcde; :)" = "abcde"'
+
+check '"$(printf abcde)" = "abcde"'
+check '"$(printf abcde; :)" = "abcde"'
+
+# regular
+check '-n "$(umask)"'
+check '-n "$(umask; :)"'
+check '-n "$(umask 2>&1)"'
+check '-n "$(umask 2>&1; :)"'
+
+# special
+check '-n "$(times)"'
+check '-n "$(times; :)"'
+check '-n "$(times 2>&1)"'
+check '-n "$(times 2>&1; :)"'
+
+# regular
+check '".$(umask -@ 2>&1)." = ".umask: Illegal option -@."'
+check '".$(umask -@ 2>&1; :)." = ".umask: Illegal option -@."'
+check '".$({ umask -@; } 2>&1)." = ".umask: Illegal option -@."'
+
+# special
+check '".$(shift xyz 2>&1)." = ".shift: Illegal number: xyz."'
+check '".$(shift xyz 2>&1; :)." = ".shift: Illegal number: xyz."'
+check '".$({ shift xyz; } 2>&1)." = ".shift: Illegal number: xyz."'
+
+v=1
+check '-z "$(v=2 :)"'
+check '"$v" = 1'
+check '-z "$(v=3)"'
+check '"$v" = 1'
+check '"$(v=4 eval echo \$v)" = 4'
+check '"$v" = 1'
+
+exit $((failures > 0))
diff --git a/tools/regression/bin/sh/parser/for1.0 b/tools/regression/bin/sh/parser/for1.0
new file mode 100644
index 00000000000..64e14420a4d
--- /dev/null
+++ b/tools/regression/bin/sh/parser/for1.0
@@ -0,0 +1,29 @@
+# $FreeBSD$
+
+nl='
+'
+list=' a b c'
+for s1 in "$nl" " "; do
+	for s2 in "$nl" ";" ";$nl"; do
+		for s3 in "$nl" " "; do
+			r=''
+			eval "for i${s1}in ${list}${s2}do${s3}r=\"\$r \$i\"; done"
+			[ "$r" = "$list" ] || exit 1
+		done
+	done
+done
+set -- $list
+for s2 in "$nl" " " ";" ";$nl"; do # s2=";" and ";$nl" are extensions to POSIX
+	for s3 in "$nl" " "; do
+		r=''
+		eval "for i${s2}do${s3}r=\"\$r \$i\"; done"
+		[ "$r" = "$list" ] || exit 1
+	done
+done
+for s1 in "$nl" " "; do
+	for s2 in "$nl" ";" ";$nl"; do
+		for s3 in "$nl" " "; do
+			eval "for i${s1}in${s2}do${s3}exit 1; done"
+		done
+	done
+done
diff --git a/tools/regression/bpf/bpf_filter/Makefile b/tools/regression/bpf/bpf_filter/Makefile
index adeead17574..79a2e0cb0a4 100644
--- a/tools/regression/bpf/bpf_filter/Makefile
+++ b/tools/regression/bpf/bpf_filter/Makefile
@@ -20,7 +20,7 @@ TEST_CASES?=	test0001 test0002 test0003 test0004	\
 		test0069 test0070 test0071 test0072	\
 		test0073 test0074 test0075 test0076	\
 		test0077 test0078 test0079 test0080	\
-		test0081 test0082 test0083
+		test0081 test0082 test0083 test0084
 
 SYSDIR?=	${.CURDIR}/../../../../sys
 
@@ -43,6 +43,7 @@ CFLAGS+=	-DBPF_VALIDATE
 SRCS+=		${SYSDIR}/net/bpf_jitter.c	\
 		${SYSDIR}/${MACHINE_ARCH}/${MACHINE_ARCH}/bpf_jit_machdep.c
 CFLAGS+=	-DBPF_JIT_COMPILER
+LIBS+=		-lutil
 WARNS?=		6
 .else
 SRCS+=		${SYSDIR}/net/bpf_filter.c
@@ -52,7 +53,7 @@ WARNS?=		2
 .for TEST in ${TEST_CASES}
 ${TEST}:	${.CURDIR}/tests/${TEST}.h ${SRCS}
 	@${CC} ${CFLAGS} -DBPF_TEST_H=\"${TEST}.h\"	\
-	    -o ${.CURDIR}/${TEST} ${SRCS}
+	    -o ${.CURDIR}/${TEST} ${SRCS} ${LIBS}
 .endfor
 
 all:		${TEST_CASES}
diff --git a/tools/regression/bpf/bpf_filter/bpf_test.c b/tools/regression/bpf/bpf_filter/bpf_test.c
index cd16fd68e9e..6bd67cfe4ca 100644
--- a/tools/regression/bpf/bpf_filter/bpf_test.c
+++ b/tools/regression/bpf/bpf_filter/bpf_test.c
@@ -1,5 +1,5 @@
 /*-
- * Copyright (C) 2008 Jung-uk Kim . All rights reserved.
+ * Copyright (C) 2008-2009 Jung-uk Kim . All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -57,6 +57,8 @@ static int	verbose = LOG_LEVEL;
 
 #ifdef BPF_JIT_COMPILER
 
+#include 
+
 #include 
 
 static u_int
@@ -73,6 +75,10 @@ bpf_compile_and_filter(void)
 			printf("FATAL\n");
 		exit(FATAL);
 	}
+	if (verbose > 2) {
+		printf("\n");
+		hexdump(filter->func, filter->size, NULL, HD_OMIT_CHARS);
+	}
 
 	for (i = 0; i < BPF_NRUNS; i++)
 		ret = (*(filter->func))(pkt, wirelen, buflen);
@@ -222,6 +228,14 @@ main(void)
 	for (i = 0; i < BPF_NRUNS; i++)
 		ret = bpf_filter(nins != 0 ? pc : NULL, pkt, wirelen, buflen);
 #endif
+	if (expect_signal != 0) {
+		if (verbose > 1)
+			printf("Expected signal %d but got none:\t",
+			    expect_signal);
+		if (verbose > 0)
+			printf("FAILED\n");
+		return (FAILED);
+	}
 	if (ret != expect) {
 		if (verbose > 1)
 			printf("Expected 0x%x but got 0x%x:\t", expect, ret);
diff --git a/tools/regression/bpf/bpf_filter/tests/test0075.h b/tools/regression/bpf/bpf_filter/tests/test0075.h
index 0d94c7af72a..fa85dd0351a 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0075.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0075.h
@@ -7,7 +7,7 @@
 /* BPF program */
 struct bpf_insn pc[] = {
 	BPF_STMT(BPF_LD+BPF_IMM, 0xdeadc0de),
-	BPF_STMT(BPF_LD+BPF_MEM, 0xffffffff),
+	BPF_STMT(BPF_LD+BPF_MEM, 0x8fffffff),
 	BPF_STMT(BPF_RET+BPF_A, 0),
 };
 
@@ -29,8 +29,8 @@ int	invalid =	1;
 u_int	expect =	0xdeadc0de;
 
 /* Expected signal */
-#ifdef BPF_JIT_COMPILER
-int	expect_signal =	SIGSEGV;
-#else
+#ifdef __amd64__
 int	expect_signal =	SIGBUS;
+#else
+int	expect_signal =	SIGSEGV;
 #endif
diff --git a/tools/regression/bpf/bpf_filter/tests/test0076.h b/tools/regression/bpf/bpf_filter/tests/test0076.h
index 6513459e3d0..318cbea0cc1 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0076.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0076.h
@@ -7,7 +7,7 @@
 /* BPF program */
 struct bpf_insn pc[] = {
 	BPF_STMT(BPF_LD+BPF_IMM, 0xdeadc0de),
-	BPF_STMT(BPF_LDX+BPF_MEM, 0xffffffff),
+	BPF_STMT(BPF_LDX+BPF_MEM, 0x8fffffff),
 	BPF_STMT(BPF_MISC+BPF_TXA, 0),
 	BPF_STMT(BPF_RET+BPF_A, 0),
 };
@@ -30,8 +30,8 @@ int	invalid =	1;
 u_int	expect =	0xdeadc0de;
 
 /* Expected signal */
-#ifdef BPF_JIT_COMPILER
-int	expect_signal =	SIGSEGV;
-#else
+#ifdef __amd64__
 int	expect_signal =	SIGBUS;
+#else
+int	expect_signal =	SIGSEGV;
 #endif
diff --git a/tools/regression/bpf/bpf_filter/tests/test0077.h b/tools/regression/bpf/bpf_filter/tests/test0077.h
index 6ac1e51083e..2af70cc9d4a 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0077.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0077.h
@@ -7,7 +7,7 @@
 /* BPF program */
 struct bpf_insn pc[] = {
 	BPF_STMT(BPF_LD+BPF_IMM, 0xdeadc0de),
-	BPF_STMT(BPF_ST, 0xffffffff),
+	BPF_STMT(BPF_ST, 0x8fffffff),
 	BPF_STMT(BPF_RET+BPF_A, 0),
 };
 
@@ -29,8 +29,8 @@ int	invalid =	1;
 u_int	expect =	0xdeadc0de;
 
 /* Expected signal */
-#ifdef BPF_JIT_COMPILER
-int	expect_signal =	SIGSEGV;
-#else
+#ifdef __amd64__
 int	expect_signal =	SIGBUS;
+#else
+int	expect_signal =	SIGSEGV;
 #endif
diff --git a/tools/regression/bpf/bpf_filter/tests/test0078.h b/tools/regression/bpf/bpf_filter/tests/test0078.h
index 8803073084a..3146de20acc 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0078.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0078.h
@@ -7,7 +7,7 @@
 /* BPF program */
 struct bpf_insn pc[] = {
 	BPF_STMT(BPF_LD+BPF_IMM, 0xdeadc0de),
-	BPF_STMT(BPF_STX, 0xffffffff),
+	BPF_STMT(BPF_STX, 0x8fffffff),
 	BPF_STMT(BPF_MISC+BPF_TXA, 0),
 	BPF_STMT(BPF_RET+BPF_A, 0),
 };
@@ -30,8 +30,8 @@ int	invalid =	1;
 u_int	expect =	0xdeadc0de;
 
 /* Expected signal */
-#ifdef BPF_JIT_COMPILER
-int	expect_signal =	SIGSEGV;
-#else
+#ifdef __amd64__
 int	expect_signal =	SIGBUS;
+#else
+int	expect_signal =	SIGSEGV;
 #endif
diff --git a/tools/regression/bpf/bpf_filter/tests/test0080.h b/tools/regression/bpf/bpf_filter/tests/test0080.h
index 69bed732237..65ae6c52dfe 100644
--- a/tools/regression/bpf/bpf_filter/tests/test0080.h
+++ b/tools/regression/bpf/bpf_filter/tests/test0080.h
@@ -1,12 +1,12 @@
 /*-
- * Test 0080:	Check uninitialized scratch memory (only for JIT compiler).
+ * Test 0080:	Check uninitialized scratch memory (obsolete).
  *
  * $FreeBSD$
  */
 
 /* BPF program */
 struct bpf_insn pc[] = {
-#ifdef BPF_JIT_COMPILER
+#ifdef BPF_JIT_COMPILER_OBSOLETE
 	BPF_STMT(BPF_LDX+BPF_IMM, 0xffffffff),
 	BPF_STMT(BPF_LD+BPF_MEM, 0),
 	BPF_JUMP(BPF_JMP+BPF_JSET+BPF_X, 0, 29, 0),
diff --git a/tools/regression/bpf/bpf_filter/tests/test0084.h b/tools/regression/bpf/bpf_filter/tests/test0084.h
new file mode 100644
index 00000000000..043a68e47b0
--- /dev/null
+++ b/tools/regression/bpf/bpf_filter/tests/test0084.h
@@ -0,0 +1,1030 @@
+/*-
+ * Test 0084:	Check very long BPF program.
+ *
+ * $FreeBSD$
+ */
+
+/* BPF program */
+struct bpf_insn pc[] = {
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 0),
+	BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 1),
+	BPF_STMT(BPF_RET+BPF_A, 0),
+};
+
+/* Packet */
+u_char	pkt[] = {
+	0x01, 0x23, 0x45, 0x67, 0x89,
+};
+
+/* Packet length seen on wire */
+u_int	wirelen =	sizeof(pkt);
+
+/* Packet length passed on buffer */
+u_int	buflen =	sizeof(pkt);
+
+/* Invalid instruction */
+int	invalid =	0;
+
+/* Expected return value */
+u_int	expect =	0x23456789;
+
+/* Expected signal */
+int	expect_signal =	0;
diff --git a/tools/regression/environ/Makefile.envctl b/tools/regression/environ/Makefile.envctl
index 6298a20646d..fc90499b534 100644
--- a/tools/regression/environ/Makefile.envctl
+++ b/tools/regression/environ/Makefile.envctl
@@ -13,4 +13,4 @@ NO_MAN=	yes
 .include 
 
 test: ${PROG}
-	@sh envtest.t
+	@env -i sh envtest.t
diff --git a/tools/regression/environ/envctl.c b/tools/regression/environ/envctl.c
index 7858211151d..586314bc085 100644
--- a/tools/regression/environ/envctl.c
+++ b/tools/regression/environ/envctl.c
@@ -60,7 +60,7 @@ dump_environ(void)
 static void
 usage(const char *program)
 {
-	fprintf(stderr, "Usage:  %s [-DGUchrt] [-c 1|2|3|4] [-gu name] "
+	fprintf(stderr, "Usage:  %s [-DGUchrt] [-c 1|2|3|4] [-bgu name] "
 	    "[-p name=value]\n"
 	    "\t[(-S|-s name) value overwrite]\n\n"
 	    "Options:\n"
@@ -68,6 +68,7 @@ usage(const char *program)
 	    "  -G name\t\t\tgetenv(NULL)\n"
 	    "  -S value overwrite\t\tsetenv(NULL, value, overwrite)\n"
 	    "  -U\t\t\t\tunsetenv(NULL)\n"
+	    "  -b name\t\t\tblank the 'name=$name' entry, corrupting it\n"
 	    "  -c 1|2|3|4\t\t\tClear environ variable using method:\n"
 	    "\t\t\t\t1 - set environ to NULL pointer\n"
 	    "\t\t\t\t2 - set environ[0] to NULL pointer\n"
@@ -98,6 +99,28 @@ print_rtrn_errno(int rtrnVal, const char *eol)
 	return;
 }
 
+static void
+blank_env(const char *var)
+{
+	char **newenviron;
+	int n, varlen;
+
+	if (environ == NULL)
+		return;
+
+	for (n = 0; environ[n] != NULL; n++)
+		;
+	newenviron = malloc(sizeof(char *) * (n + 1));
+	varlen = strlen(var);
+	for (; n >= 0; n--) {
+		newenviron[n] = environ[n];
+		if (newenviron[n] != NULL &&
+		    strncmp(newenviron[n], var, varlen) == 0 &&
+		    newenviron[n][varlen] == '=')
+			newenviron[n] += strlen(newenviron[n]);
+	}
+	environ = newenviron;
+}
 
 int
 main(int argc, char **argv)
@@ -114,8 +137,12 @@ main(int argc, char **argv)
 	}
 
 	/* The entire program is basically executed from this loop. */
-	while ((arg = getopt(argc, argv, "DGS:Uc:g:hp:rs:tu:")) != -1) {
+	while ((arg = getopt(argc, argv, "DGS:Ub:c:g:hp:rs:tu:")) != -1) {
 		switch (arg) {
+		case 'b':
+			blank_env(optarg);
+			break;
+
 		case 'c':
 			switch (atoi(optarg)) {
 			case 1:
diff --git a/tools/regression/environ/envtest.t b/tools/regression/environ/envtest.t
index 6b5485a3b80..2c540179f68 100644
--- a/tools/regression/environ/envtest.t
+++ b/tools/regression/environ/envtest.t
@@ -232,3 +232,18 @@ check_result "${BAR} 0 0 ${BAR} 0 0 ${NULL}"
 
 run_test -r -g FOO -u FOO -g FOO -s FOO ${BAR} 1 -g FOO
 check_result "${BAR} 0 0 ${NULL} 0 0 ${BAR}"
+
+
+# corruption (blanking) of environ members.
+export BLANK_ME=
+export AFTER_BLANK=blanked
+run_test -b BLANK_ME -p MORE=vars -g FOO -g BLANK_ME -g AFTER_BLANK
+check_result "0 0 ${FOO} ${NULL} ${AFTER_BLANK}"
+
+run_test -b BLANK_ME -u FOO -g FOO -g AFTER_BLANK
+check_result "0 0 ${NULL} ${AFTER_BLANK}"
+
+export BLANK_ME2=
+export AFTER_BLANKS=blankD
+run_test -b BLANK_ME -b AFTER_BLANK -b BLANK_ME2 -g FOO -g AFTER_BLANKS
+check_result "${FOO} ${AFTER_BLANKS}"
diff --git a/tools/regression/fifo/fifo_misc/fifo_misc.c b/tools/regression/fifo/fifo_misc/fifo_misc.c
index b379d18c057..d0a2cf7f70c 100644
--- a/tools/regression/fifo/fifo_misc/fifo_misc.c
+++ b/tools/regression/fifo/fifo_misc/fifo_misc.c
@@ -148,114 +148,6 @@ test_truncate(void)
 	cleanfifo("testfifo", -1, -1);
 }
 
-struct filter_entry {
-	int		 fe_filter;
-	const char	*fe_name;
-	int		 fe_error;
-	const char	*fe_errorname;
-};
-
-static const struct filter_entry good_filter_types[] = {
-	{ EVFILT_READ, "EVFILT_READ", 0, "0" },
-	{ EVFILT_WRITE, "EVFILT_WRITE", 0, "0" },
-#if WORKING_EVFILT_VNODE_ON_FIFOS
-	{ EVFILT_VNODE, "EVFILT_VNODE", EINVAL, "EINVAL" },
-#endif
-};
-static const int good_filter_types_len = sizeof(good_filter_types) /
-    sizeof(good_filter_types[0]);
-
-static const struct filter_entry bad_filter_types[] = {
-	{ EVFILT_NETDEV, "EVFILT_NETDEV", EINVAL, "EINVAL" },
-};
-static const int bad_filter_types_len = sizeof(bad_filter_types) /
-    sizeof(bad_filter_types[0]);
-
-/*
- * kqueue event-related tests are in fifo_io.c; however, that tests only
- * valid invocations of kqueue.  Check to make sure that some invalid filters
- * that are generally allowed on file descriptors are not allowed to be
- * registered with kqueue, and that if attempts are made, we get the right
- * error.
- */
-static void
-test_kqueue(void)
-{
-	int kqueue_fd, reader_fd, writer_fd;
-	struct kevent kev_set;
-	struct timespec timeout;
-	int i, ret;
-
-	makefifo("testfifo", __func__);
-
-	if (openfifo("testfifo", __func__, &reader_fd, &writer_fd) < 0) {
-		warn("%s: openfifo", __func__);
-		cleanfifo("testfifo", -1, -1);
-		exit(-1);
-	}
-
-	kqueue_fd = kqueue();
-	if (kqueue_fd < 0) {
-		warn("%s: kqueue", __func__);
-		cleanfifo("testfifo", reader_fd, writer_fd);
-		exit(-1);
-	}
-
-	timeout.tv_sec = 0;
-	timeout.tv_nsec = 0;
-
-	for (i = 0; i < good_filter_types_len; i++) {
-		bzero(&kev_set, sizeof(kev_set));
-		EV_SET(&kev_set, reader_fd, good_filter_types[i].fe_filter,
-		    EV_ADD, 0, 0, 0);
-		ret = kevent(kqueue_fd, &kev_set, 1, NULL, 0, &timeout);
-		if (ret < 0) {
-			warn("%s: kevent: adding good filter %s", __func__,
-			    good_filter_types[i].fe_name);
-			close(kqueue_fd);
-			cleanfifo("testfifo", reader_fd, writer_fd);
-			exit(-1);
-		}
-		bzero(&kev_set, sizeof(kev_set));
-		EV_SET(&kev_set, reader_fd, good_filter_types[i].fe_filter,
-		    EV_DELETE, 0, 0, 0);
-		ret = kevent(kqueue_fd, &kev_set, 1, NULL, 0, &timeout);
-		if (ret < 0) {
-			warn("%s: kevent: deleting good filter %s", __func__,
-			    good_filter_types[i].fe_name);
-			close(kqueue_fd);
-			cleanfifo("testfifo", reader_fd, writer_fd);
-			exit(-1);
-		}
-	}
-
-	for (i = 0; i < bad_filter_types_len; i++) {
-		bzero(&kev_set, sizeof(kev_set));
-		EV_SET(&kev_set, reader_fd, bad_filter_types[i].fe_filter,
-		    EV_ADD, 0, 0, 0);
-		ret = kevent(kqueue_fd, &kev_set, 1, NULL, 0, &timeout);
-		if (ret >= 0) {
-			warnx("%s: kevent: bad filter %s succeeded, expected "
-			    "EINVAL", __func__, bad_filter_types[i].fe_name);
-			close(kqueue_fd);
-			cleanfifo("testfifo", reader_fd, writer_fd);
-			exit(-1);
-		}
-		if (errno != bad_filter_types[i].fe_error) {
-			warn("%s: kevent: bad filter %s failed with error "
-			    "not %s", __func__,
-			    bad_filter_types[i].fe_name,
-			    bad_filter_types[i].fe_errorname);
-			close(kqueue_fd);
-			cleanfifo("testfifo", reader_fd, writer_fd);
-			exit(-1);
-		}
-	}
-
-	close(kqueue_fd);
-	cleanfifo("testfifo", reader_fd, writer_fd);
-}
-
 static int
 test_ioctl_setclearflag(int fd, int flag, const char *testname,
     const char *fdname, const char *flagname)
@@ -345,7 +237,6 @@ main(int argc, char *argv[])
 
 	test_lseek();
 	test_truncate();
-	test_kqueue();
 	test_ioctl();
 
 	return (0);
diff --git a/tools/regression/geom/ConfCmp/ConfCmp.c b/tools/regression/geom/ConfCmp/ConfCmp.c
index 8c551cf8e84..599a953b1b8 100644
--- a/tools/regression/geom/ConfCmp/ConfCmp.c
+++ b/tools/regression/geom/ConfCmp/ConfCmp.c
@@ -74,7 +74,7 @@ struct ref {
 	char			*k2;
 };
 
-LIST_HEAD(, ref)		refs = LIST_HEAD_INITIALIZER(&refs);
+LIST_HEAD(, ref)		refs = LIST_HEAD_INITIALIZER(refs);
 
 static struct node *
 new_node(void)
diff --git a/tools/regression/kqueue/Makefile b/tools/regression/kqueue/Makefile
new file mode 100644
index 00000000000..b25a17b8722
--- /dev/null
+++ b/tools/regression/kqueue/Makefile
@@ -0,0 +1,21 @@
+# $FreeBSD$
+#
+# svn://mark.heily.com/libkqueue/trunk/test
+# Last update: r114
+#
+# libkqueue and test suite by Mark Heily 
+#
+
+PROG=kqtest
+SRCS=			\
+	main.c		\
+	read.c		\
+	timer.c		\
+	vnode.c		\
+	proc.c		\
+	signal.c	\
+	user.c
+NO_MAN=
+WARNS=2
+
+.include "bsd.prog.mk"
diff --git a/tools/regression/kqueue/common.h b/tools/regression/kqueue/common.h
new file mode 100644
index 00000000000..aada7786ad0
--- /dev/null
+++ b/tools/regression/kqueue/common.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2009 Mark Heily 
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _COMMON_H
+#define _COMMON_H
+
+
+#if HAVE_ERR_H
+# include 
+#else
+# define err(rc,msg,...) do { perror(msg); exit(rc); } while (0)
+# define errx(rc,msg,...) do { puts(msg); exit(rc); } while (0)
+#endif
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+#include "config.h"
+
+extern char *cur_test_id;
+int vnode_fd;
+
+extern const char * kevent_to_str(struct kevent *);
+struct kevent * kevent_get(int);
+
+
+void kevent_cmp(struct kevent *, struct kevent *);
+
+void
+kevent_add(int kqfd, struct kevent *kev, 
+        uintptr_t ident,
+        short     filter,
+        u_short   flags,
+        u_int     fflags,
+        intptr_t  data,
+        void      *udata);
+
+/* DEPRECATED: */
+#define KEV_CMP(kev,_ident,_filter,_flags) do {                 \
+    if (kev.ident != (_ident) ||                                \
+            kev.filter != (_filter) ||                          \
+            kev.flags != (_flags)) \
+        err(1, "kevent mismatch: got [%d,%d,%d] but expecting [%d,%d,%d]", \
+                (int)_ident, (int)_filter, (int)_flags,\
+                (int)kev.ident, kev.filter, kev.flags);\
+} while (0);
+
+/* Checks if any events are pending, which is an error. */
+extern void test_no_kevents(void);
+
+extern void test_begin(const char *);
+extern void success(void);
+
+#endif  /* _COMMON_H */
diff --git a/tools/regression/kqueue/config.h b/tools/regression/kqueue/config.h
new file mode 100644
index 00000000000..2a377db5887
--- /dev/null
+++ b/tools/regression/kqueue/config.h
@@ -0,0 +1,13 @@
+/* AUTOMATICALLY GENERATED -- DO NOT EDIT */
+/* $FreeBSD$ */
+#define HAVE_ERR_H
+#define HAVE_SYS_EVENT_H
+#define HAVE_EV_DISPATCH 1
+#define HAVE_EV_RECEIPT 1
+#undef HAVE_NOTE_TRUNCATE
+#define HAVE_EVFILT_TIMER 1
+#define HAVE_EVFILT_USER 1
+#define PROGRAM "libkqueue-test"
+#define VERSION "0.1"
+#define TARGET "freebsd"
+#define CFLAGS "-g -O0 -Wall -Werror"
diff --git a/tools/regression/kqueue/main.c b/tools/regression/kqueue/main.c
new file mode 100644
index 00000000000..182003c32aa
--- /dev/null
+++ b/tools/regression/kqueue/main.c
@@ -0,0 +1,283 @@
+/*
+ * Copyright (c) 2009 Mark Heily 
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#include 
+
+#include "common.h"
+
+int testnum = 1;
+char *cur_test_id = NULL;
+int kqfd;
+
+extern void test_evfilt_read();
+extern void test_evfilt_signal();
+extern void test_evfilt_vnode();
+extern void test_evfilt_timer();
+extern void test_evfilt_proc();
+#if HAVE_EVFILT_USER
+extern void test_evfilt_user();
+#endif
+
+/* Checks if any events are pending, which is an error. */
+void 
+test_no_kevents(void)
+{
+    int nfds;
+    struct timespec timeo;
+    struct kevent kev;
+
+    puts("confirming that there are no events pending");
+    memset(&timeo, 0, sizeof(timeo));
+    nfds = kevent(kqfd, NULL, 0, &kev, 1, &timeo);
+    if (nfds != 0) {
+        puts("\nUnexpected event:");
+        puts(kevent_to_str(&kev));
+        errx(1, "%d event(s) pending, but none expected:", nfds);
+    }
+}
+
+/* Retrieve a single kevent */
+struct kevent *
+kevent_get(int kqfd)
+{
+    int nfds;
+    struct kevent *kev;
+
+    if ((kev = calloc(1, sizeof(*kev))) == NULL)
+	err(1, "out of memory");
+    
+    nfds = kevent(kqfd, NULL, 0, kev, 1, NULL);
+    if (nfds < 1)
+        err(1, "kevent(2)");
+
+    return (kev);
+}
+
+char *
+kevent_fflags_dump(struct kevent *kev)
+{
+    char *buf;
+
+#define KEVFFL_DUMP(attrib) \
+    if (kev->fflags & attrib) \
+	strncat(buf, #attrib" ", 64);
+
+    if ((buf = calloc(1, 1024)) == NULL)
+	abort();
+
+    /* Not every filter has meaningful fflags */
+    if (kev->filter != EVFILT_VNODE) {
+    	snprintf(buf, 1024, "fflags = %d", kev->fflags);
+	return (buf);
+    }
+
+    snprintf(buf, 1024, "fflags = %d (", kev->fflags);
+    KEVFFL_DUMP(NOTE_DELETE);
+    KEVFFL_DUMP(NOTE_WRITE);
+    KEVFFL_DUMP(NOTE_EXTEND);
+#if HAVE_NOTE_TRUNCATE
+    KEVFFL_DUMP(NOTE_TRUNCATE);
+#endif
+    KEVFFL_DUMP(NOTE_ATTRIB);
+    KEVFFL_DUMP(NOTE_LINK);
+    KEVFFL_DUMP(NOTE_RENAME);
+#if HAVE_NOTE_REVOKE
+    KEVFFL_DUMP(NOTE_REVOKE);
+#endif
+    buf[strlen(buf) - 1] = ')';
+
+    return (buf);
+}
+
+char *
+kevent_flags_dump(struct kevent *kev)
+{
+    char *buf;
+
+#define KEVFL_DUMP(attrib) \
+    if (kev->flags & attrib) \
+	strncat(buf, #attrib" ", 64);
+
+    if ((buf = calloc(1, 1024)) == NULL)
+	abort();
+
+    snprintf(buf, 1024, "flags = %d (", kev->flags);
+    KEVFL_DUMP(EV_ADD);
+    KEVFL_DUMP(EV_ENABLE);
+    KEVFL_DUMP(EV_DISABLE);
+    KEVFL_DUMP(EV_DELETE);
+    KEVFL_DUMP(EV_ONESHOT);
+    KEVFL_DUMP(EV_CLEAR);
+    KEVFL_DUMP(EV_EOF);
+    KEVFL_DUMP(EV_ERROR);
+#if HAVE_EV_DISPATCH
+    KEVFL_DUMP(EV_DISPATCH);
+#endif
+#if HAVE_EV_RECEIPT
+    KEVFL_DUMP(EV_RECEIPT);
+#endif
+    buf[strlen(buf) - 1] = ')';
+
+    return (buf);
+}
+
+/* Copied from ../kevent.c kevent_dump() and improved */
+const char *
+kevent_to_str(struct kevent *kev)
+{
+    char buf[512];
+
+    snprintf(&buf[0], sizeof(buf), 
+            "[ident=%d, filter=%d, %s, %s, data=%d, udata=%p]",
+            (u_int) kev->ident,
+            kev->filter,
+            kevent_flags_dump(kev),
+            kevent_fflags_dump(kev),
+            (int) kev->data,
+            kev->udata);
+
+    return (strdup(buf));
+}
+
+void
+kevent_add(int kqfd, struct kevent *kev, 
+        uintptr_t ident,
+        short     filter,
+        u_short   flags,
+        u_int     fflags,
+        intptr_t  data,
+        void      *udata)
+{
+    EV_SET(kev, ident, filter, flags, fflags, data, NULL);    
+    if (kevent(kqfd, kev, 1, NULL, 0, NULL) < 0) {
+        printf("Unable to add the following kevent:\n%s\n",
+                kevent_to_str(kev));
+        err(1, "kevent(): %s", strerror(errno));
+    }
+}
+
+void
+kevent_cmp(struct kevent *k1, struct kevent *k2)
+{
+/* XXX-
+   Workaround for inconsistent implementation of kevent(2) 
+ */
+#ifdef __FreeBSD__
+    if (k1->flags & EV_ADD)
+        k2->flags |= EV_ADD;
+#endif
+    if (memcmp(k1, k2, sizeof(*k1)) != 0) {
+        printf("kevent_cmp: mismatch:\n  %s !=\n  %s\n", 
+              kevent_to_str(k1), kevent_to_str(k2));
+        abort();
+    }
+}
+
+void
+test_begin(const char *func)
+{
+    if (cur_test_id)
+        free(cur_test_id);
+    cur_test_id = strdup(func);
+    if (!cur_test_id)
+        err(1, "strdup failed");
+
+    printf("\n\nTest %d: %s\n", testnum++, func);
+}
+
+void
+success(void)
+{
+    printf("%-70s %s\n", cur_test_id, "passed");
+    free(cur_test_id);
+    cur_test_id = NULL;
+}
+
+void
+test_kqueue(void)
+{
+    test_begin("kqueue()");
+    if ((kqfd = kqueue()) < 0)
+        err(1, "kqueue()");
+    test_no_kevents();
+    success();
+}
+
+void
+test_kqueue_close(void)
+{
+    test_begin("close(kq)");
+    if (close(kqfd) < 0)
+        err(1, "close()");
+    success();
+}
+
+int 
+main(int argc, char **argv)
+{
+    int test_proc = 0;  /* XXX-FIXME */
+    int test_socket = 1;
+    int test_signal = 1;
+    int test_vnode = 1;
+    int test_timer = 1;
+#ifdef __FreeBSD__
+    int test_user = 1;
+#else
+    /* XXX-FIXME temporary */
+    int test_user = 0;
+#endif
+
+    while (argc) {
+        if (strcmp(argv[0], "--no-proc") == 0)
+            test_proc = 0;
+        if (strcmp(argv[0], "--no-socket") == 0)
+            test_socket = 0;
+        if (strcmp(argv[0], "--no-timer") == 0)
+            test_timer = 0;
+        if (strcmp(argv[0], "--no-signal") == 0)
+            test_signal = 0;
+        if (strcmp(argv[0], "--no-vnode") == 0)
+            test_vnode = 0;
+        if (strcmp(argv[0], "--no-user") == 0)
+            test_user = 0;
+        argv++;
+        argc--;
+    }
+
+    test_kqueue();
+    test_kqueue_close();
+
+    if (test_socket) 
+        test_evfilt_read();
+    if (test_signal) 
+        test_evfilt_signal();
+    if (test_vnode) 
+        test_evfilt_vnode();
+#if HAVE_EVFILT_USER
+    if (test_user) 
+        test_evfilt_user();
+#endif
+    if (test_timer) 
+        test_evfilt_timer();
+    if (test_proc) 
+        test_evfilt_proc();
+
+    printf("\n---\n"
+            "+OK All %d tests completed.\n", testnum - 1);
+    return (0);
+}
diff --git a/tools/regression/kqueue/proc.c b/tools/regression/kqueue/proc.c
new file mode 100644
index 00000000000..d4e863eefe0
--- /dev/null
+++ b/tools/regression/kqueue/proc.c
@@ -0,0 +1,241 @@
+/*
+ * Copyright (c) 2009 Mark Heily 
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#include "common.h"
+
+static int sigusr1_caught = 0;
+
+int kqfd;
+
+static void
+sig_handler(int signum)
+{
+    sigusr1_caught = 1;
+}
+
+static void
+add_and_delete(void)
+{
+    struct kevent kev;
+    pid_t pid;
+
+    /* Create a child that waits to be killed and then exits */
+    pid = fork();
+    if (pid == 0) {
+        pause();
+        exit(2);
+    }
+    printf(" -- child created (pid %d)\n", (int) pid);
+
+    test_begin("kevent(EVFILT_PROC, EV_ADD)");
+
+    test_no_kevents();
+    kevent_add(kqfd, &kev, pid, EVFILT_PROC, EV_ADD, 0, 0, NULL);
+    test_no_kevents();
+
+    success();
+
+    test_begin("kevent(EVFILT_PROC, EV_DELETE)");
+
+    test_no_kevents();
+    kevent_add(kqfd, &kev, pid, EVFILT_PROC, EV_DELETE, 0, 0, NULL);
+    if (kill(pid, SIGKILL) < 0)
+        err(1, "kill");
+    sleep(1);
+    test_no_kevents();
+
+    success();
+
+}
+
+static void
+event_trigger(void)
+{
+    struct kevent kev;
+    pid_t pid;
+
+    test_begin("kevent(EVFILT_PROC, wait)");
+
+    /* Create a child that waits to be killed and then exits */
+    pid = fork();
+    if (pid == 0) {
+        pause();
+        printf(" -- child caught signal, exiting\n");
+        exit(2);
+    }
+    printf(" -- child created (pid %d)\n", (int) pid);
+
+    test_no_kevents();
+    kevent_add(kqfd, &kev, pid, EVFILT_PROC, EV_ADD, 0, 0, NULL);
+
+    /* Cause the child to exit, then retrieve the event */
+    printf(" -- killing process %d\n", (int) pid);
+    if (kill(pid, SIGUSR1) < 0)
+        err(1, "kill");
+    kevent_cmp(&kev, kevent_get(kqfd));
+    test_no_kevents();
+
+    success();
+}
+
+#ifdef TODO
+void
+test_kevent_signal_disable(void)
+{
+    const char *test_id = "kevent(EVFILT_SIGNAL, EV_DISABLE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_DISABLE, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Block SIGUSR1, then send it to ourselves */
+    sigset_t mask;
+    sigemptyset(&mask);
+    sigaddset(&mask, SIGUSR1);
+    if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
+        err(1, "sigprocmask");
+    if (kill(getpid(), SIGKILL) < 0)
+        err(1, "kill");
+
+    test_no_kevents();
+
+    success();
+}
+
+void
+test_kevent_signal_enable(void)
+{
+    const char *test_id = "kevent(EVFILT_SIGNAL, EV_ENABLE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_ENABLE, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Block SIGUSR1, then send it to ourselves */
+    sigset_t mask;
+    sigemptyset(&mask);
+    sigaddset(&mask, SIGUSR1);
+    if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
+        err(1, "sigprocmask");
+    if (kill(getpid(), SIGUSR1) < 0)
+        err(1, "kill");
+
+    kev.flags = EV_ADD | EV_CLEAR;
+#if LIBKQUEUE
+    kev.data = 1; /* WORKAROUND */
+#else
+    kev.data = 2; // one extra time from test_kevent_signal_disable()
+#endif
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    /* Delete the watch */
+    kev.flags = EV_DELETE;
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+void
+test_kevent_signal_del(void)
+{
+    const char *test_id = "kevent(EVFILT_SIGNAL, EV_DELETE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    /* Delete the kevent */
+    EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_DELETE, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Block SIGUSR1, then send it to ourselves */
+    sigset_t mask;
+    sigemptyset(&mask);
+    sigaddset(&mask, SIGUSR1);
+    if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
+        err(1, "sigprocmask");
+    if (kill(getpid(), SIGUSR1) < 0)
+        err(1, "kill");
+
+    test_no_kevents();
+    success();
+}
+
+void
+test_kevent_signal_oneshot(void)
+{
+    const char *test_id = "kevent(EVFILT_SIGNAL, EV_ONESHOT)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_ADD | EV_ONESHOT, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Block SIGUSR1, then send it to ourselves */
+    sigset_t mask;
+    sigemptyset(&mask);
+    sigaddset(&mask, SIGUSR1);
+    if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
+        err(1, "sigprocmask");
+    if (kill(getpid(), SIGUSR1) < 0)
+        err(1, "kill");
+
+    kev.flags |= EV_CLEAR;
+    kev.data = 1;
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    /* Send another one and make sure we get no events */
+    if (kill(getpid(), SIGUSR1) < 0)
+        err(1, "kill");
+    test_no_kevents();
+
+    success();
+}
+#endif
+
+void
+test_evfilt_proc()
+{
+    kqfd = kqueue();
+
+    signal(SIGUSR1, sig_handler);
+
+    add_and_delete();
+    event_trigger();
+
+    signal(SIGUSR1, SIG_DFL);
+
+#if TODO
+    test_kevent_signal_add();
+    test_kevent_signal_del();
+    test_kevent_signal_get();
+    test_kevent_signal_disable();
+    test_kevent_signal_enable();
+    test_kevent_signal_oneshot();
+#endif
+    close(kqfd);
+}
diff --git a/tools/regression/kqueue/read.c b/tools/regression/kqueue/read.c
new file mode 100644
index 00000000000..cc6542719fb
--- /dev/null
+++ b/tools/regression/kqueue/read.c
@@ -0,0 +1,324 @@
+/*
+ * Copyright (c) 2009 Mark Heily 
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#include "common.h"
+
+int kqfd;
+int sockfd[2];
+
+static void
+kevent_socket_drain(void)
+{
+    char buf[1];
+
+    /* Drain the read buffer, then make sure there are no more events. */
+    puts("draining the read buffer");
+    if (read(sockfd[0], &buf[0], 1) < 1)
+        err(1, "read(2)");
+}
+
+static void
+kevent_socket_fill(void)
+{
+  puts("filling the read buffer");
+    if (write(sockfd[1], ".", 1) < 1)
+        err(1, "write(2)");
+}
+
+
+void
+test_kevent_socket_add(void)
+{
+    const char *test_id = "kevent(EVFILT_READ, EV_ADD)";
+    struct kevent kev;
+
+    test_begin(test_id);
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+void
+test_kevent_socket_get(void)
+{
+    const char *test_id = "kevent(EVFILT_READ) wait";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    kevent_socket_fill();
+
+    kev.data = 1;
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    kevent_socket_drain();
+    test_no_kevents();
+
+    kev.flags = EV_DELETE;
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+void
+test_kevent_socket_clear(void)
+{
+    const char *test_id = "kevent(EVFILT_READ, EV_CLEAR)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    test_no_kevents();
+
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD | EV_CLEAR, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    kevent_socket_fill();
+    kevent_socket_fill();
+
+    kev.data = 2;
+    kevent_cmp(&kev, kevent_get(kqfd)); 
+
+    /* We filled twice, but drain once. Edge-triggered would not generate
+       additional events.
+     */
+    kevent_socket_drain();
+    test_no_kevents();
+
+    kevent_socket_drain();
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_DELETE, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+void
+test_kevent_socket_disable_and_enable(void)
+{
+    const char *test_id = "kevent(EVFILT_READ, EV_DISABLE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    /* Add an event, then disable it. */
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_DISABLE, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    kevent_socket_fill();
+    test_no_kevents();
+
+    /* Re-enable the knote, then see if an event is generated */
+    kev.flags = EV_ENABLE;
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+    kev.flags = EV_ADD;
+    kev.data = 1;
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    kevent_socket_drain();
+
+    kev.flags = EV_DELETE;
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+void
+test_kevent_socket_del(void)
+{
+    const char *test_id = "kevent(EVFILT_READ, EV_DELETE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_DELETE, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    kevent_socket_fill();
+    test_no_kevents();
+    kevent_socket_drain();
+
+    success();
+}
+
+void
+test_kevent_socket_oneshot(void)
+{
+    const char *test_id = "kevent(EVFILT_READ, EV_ONESHOT)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    /* Re-add the watch and make sure no events are pending */
+    puts("-- re-adding knote");
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD | EV_ONESHOT, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+    test_no_kevents();
+
+    puts("-- getting one event");
+    kevent_socket_fill();
+    kev.data = 1;
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    puts("-- checking knote disabled");
+    test_no_kevents();
+
+    /* Try to delete the knote, it should already be deleted */
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_DELETE, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) == 0)
+        err(1, "%s", test_id);
+
+    kevent_socket_drain();
+
+    success();
+}
+
+
+#if HAVE_EV_DISPATCH
+void
+test_kevent_socket_dispatch(void)
+{
+    const char *test_id = "kevent(EVFILT_READ, EV_DISPATCH)";
+
+    test_begin(test_id);
+
+    struct kevent kev;
+
+    /* Re-add the watch and make sure no events are pending */
+    puts("-- re-adding knote");
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD | EV_DISPATCH, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+    test_no_kevents();
+
+    /* The event will occur only once, even though EV_CLEAR is not
+       specified. */
+    kevent_socket_fill();
+    kev.data = 1;
+    kevent_cmp(&kev, kevent_get(kqfd));
+    test_no_kevents();
+
+    /* Since the knote is disabled, the EV_DELETE operation succeeds. */
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_DELETE, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    kevent_socket_drain();
+
+    success();
+}
+#endif  /* HAVE_EV_DISPATCH */
+
+#if BROKEN
+void
+test_kevent_socket_lowat(void)
+{
+    const char *test_id = "kevent(EVFILT_READ, NOTE_LOWAT)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    /* Re-add the watch and make sure no events are pending */
+    puts("-- re-adding knote, setting low watermark to 2 bytes");
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD | EV_ONESHOT, NOTE_LOWAT, 2, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+    test_no_kevents();
+
+    puts("-- checking that one byte does not trigger an event..");
+    kevent_socket_fill();
+    test_no_kevents();
+
+    puts("-- checking that two bytes triggers an event..");
+    kevent_socket_fill();
+    if (kevent(kqfd, NULL, 0, &kev, 1, NULL) != 1)
+        err(1, "%s", test_id);
+    KEV_CMP(kev, sockfd[0], EVFILT_READ, 0);
+    test_no_kevents();
+
+    kevent_socket_drain();
+    kevent_socket_drain();
+
+    success();
+}
+#endif
+
+void
+test_kevent_socket_eof(void)
+{
+    const char *test_id = "kevent(EVFILT_READ, EV_EOF)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    /* Re-add the watch and make sure no events are pending */
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_ADD, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+    test_no_kevents();
+
+    if (close(sockfd[1]) < 0)
+        err(1, "close(2)");
+
+    kev.flags |= EV_EOF;
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    /* Delete the watch */
+    EV_SET(&kev, sockfd[0], EVFILT_READ, EV_DELETE, 0, 0, &sockfd[0]);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+void
+test_evfilt_read()
+{
+    /* Create a connected pair of full-duplex sockets for testing socket events */
+    if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockfd) < 0) 
+        abort();
+
+    kqfd = kqueue();
+    test_kevent_socket_add();
+    test_kevent_socket_del();
+    test_kevent_socket_get();
+    test_kevent_socket_disable_and_enable();
+    test_kevent_socket_oneshot();
+    test_kevent_socket_clear();
+#if HAVE_EV_DISPATCH
+    test_kevent_socket_dispatch();
+#endif
+    test_kevent_socket_eof();
+    close(kqfd);
+}
diff --git a/tools/regression/kqueue/signal.c b/tools/regression/kqueue/signal.c
new file mode 100644
index 00000000000..14e751db95c
--- /dev/null
+++ b/tools/regression/kqueue/signal.c
@@ -0,0 +1,199 @@
+/*
+ * Copyright (c) 2009 Mark Heily 
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#include "common.h"
+
+int kqfd;
+
+void
+test_kevent_signal_add(void)
+{
+    const char *test_id = "kevent(EVFILT_SIGNAL, EV_ADD)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_ADD, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+void
+test_kevent_signal_get(void)
+{
+    const char *test_id = "kevent(EVFILT_SIGNAL, wait)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_ADD, 0, 0, NULL);    
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Block SIGUSR1, then send it to ourselves */
+    sigset_t mask;
+    sigemptyset(&mask);
+    sigaddset(&mask, SIGUSR1);
+    if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
+        err(1, "sigprocmask");
+    if (kill(getpid(), SIGUSR1) < 0)
+        err(1, "kill");
+
+    kev.flags |= EV_CLEAR;
+    kev.data = 1;
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    success();
+}
+
+void
+test_kevent_signal_disable(void)
+{
+    const char *test_id = "kevent(EVFILT_SIGNAL, EV_DISABLE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_DISABLE, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Block SIGUSR1, then send it to ourselves */
+    sigset_t mask;
+    sigemptyset(&mask);
+    sigaddset(&mask, SIGUSR1);
+    if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
+        err(1, "sigprocmask");
+    if (kill(getpid(), SIGUSR1) < 0)
+        err(1, "kill");
+
+    test_no_kevents();
+
+    success();
+}
+
+void
+test_kevent_signal_enable(void)
+{
+    const char *test_id = "kevent(EVFILT_SIGNAL, EV_ENABLE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_ENABLE, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Block SIGUSR1, then send it to ourselves */
+    sigset_t mask;
+    sigemptyset(&mask);
+    sigaddset(&mask, SIGUSR1);
+    if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
+        err(1, "sigprocmask");
+    if (kill(getpid(), SIGUSR1) < 0)
+        err(1, "kill");
+
+    kev.flags = EV_ADD | EV_CLEAR;
+#if LIBKQUEUE
+    kev.data = 1; /* WORKAROUND */
+#else
+    kev.data = 2; // one extra time from test_kevent_signal_disable()
+#endif
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    /* Delete the watch */
+    kev.flags = EV_DELETE;
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+void
+test_kevent_signal_del(void)
+{
+    const char *test_id = "kevent(EVFILT_SIGNAL, EV_DELETE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    /* Delete the kevent */
+    EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_DELETE, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Block SIGUSR1, then send it to ourselves */
+    sigset_t mask;
+    sigemptyset(&mask);
+    sigaddset(&mask, SIGUSR1);
+    if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
+        err(1, "sigprocmask");
+    if (kill(getpid(), SIGUSR1) < 0)
+        err(1, "kill");
+
+    test_no_kevents();
+    success();
+}
+
+void
+test_kevent_signal_oneshot(void)
+{
+    const char *test_id = "kevent(EVFILT_SIGNAL, EV_ONESHOT)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_ADD | EV_ONESHOT, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Block SIGUSR1, then send it to ourselves */
+    sigset_t mask;
+    sigemptyset(&mask);
+    sigaddset(&mask, SIGUSR1);
+    if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1)
+        err(1, "sigprocmask");
+    if (kill(getpid(), SIGUSR1) < 0)
+        err(1, "kill");
+
+    kev.flags |= EV_CLEAR;
+    kev.data = 1;
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    /* Send another one and make sure we get no events */
+    if (kill(getpid(), SIGUSR1) < 0)
+        err(1, "kill");
+    test_no_kevents();
+
+    success();
+}
+
+void
+test_evfilt_signal()
+{
+	kqfd = kqueue();
+        test_kevent_signal_add();
+        test_kevent_signal_del();
+        test_kevent_signal_get();
+        test_kevent_signal_disable();
+        test_kevent_signal_enable();
+        test_kevent_signal_oneshot();
+	close(kqfd);
+}
diff --git a/tools/regression/kqueue/timer.c b/tools/regression/kqueue/timer.c
new file mode 100644
index 00000000000..766125d857e
--- /dev/null
+++ b/tools/regression/kqueue/timer.c
@@ -0,0 +1,178 @@
+/*
+ * Copyright (c) 2009 Mark Heily 
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#include "common.h"
+
+int kqfd;
+
+void
+test_kevent_timer_add(void)
+{
+    const char *test_id = "kevent(EVFILT_TIMER, EV_ADD)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, 1, EVFILT_TIMER, EV_ADD, 0, 1000, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+void
+test_kevent_timer_del(void)
+{
+    const char *test_id = "kevent(EVFILT_TIMER, EV_DELETE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, 1, EVFILT_TIMER, EV_DELETE, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    test_no_kevents();
+
+    success();
+}
+
+void
+test_kevent_timer_get(void)
+{
+    const char *test_id = "kevent(EVFILT_TIMER, wait)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, 1, EVFILT_TIMER, EV_ADD, 0, 1000, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    kev.flags |= EV_CLEAR;
+    kev.data = 1; 
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    EV_SET(&kev, 1, EVFILT_TIMER, EV_DELETE, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+static void
+test_oneshot(void)
+{
+    const char *test_id = "kevent(EVFILT_TIMER, EV_ONESHOT)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    test_no_kevents();
+
+    EV_SET(&kev, vnode_fd, EVFILT_TIMER, EV_ADD | EV_ONESHOT, 0, 500,NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Retrieve the event */
+    kev.flags = EV_ADD | EV_CLEAR | EV_ONESHOT;
+    kev.data = 1; 
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    /* Check if the event occurs again */
+    sleep(3);
+    test_no_kevents();
+
+
+    success();
+}
+
+static void
+test_periodic(void)
+{
+    const char *test_id = "kevent(EVFILT_TIMER, periodic)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    test_no_kevents();
+
+    EV_SET(&kev, vnode_fd, EVFILT_TIMER, EV_ADD, 0, 1000,NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Retrieve the event */
+    kev.flags = EV_ADD | EV_CLEAR;
+    kev.data = 1; 
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    /* Check if the event occurs again */
+    sleep(1);
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    /* Delete the event */
+    kev.flags = EV_DELETE;
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+static void
+disable_and_enable(void)
+{
+    const char *test_id = "kevent(EVFILT_TIMER, EV_DISABLE and EV_ENABLE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    test_no_kevents();
+
+    /* Add the watch and immediately disable it */
+    EV_SET(&kev, vnode_fd, EVFILT_TIMER, EV_ADD | EV_ONESHOT, 0, 2000,NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+    kev.flags = EV_DISABLE;
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+    test_no_kevents();
+
+    /* Re-enable and check again */
+    kev.flags = EV_ENABLE;
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    kev.flags = EV_ADD | EV_CLEAR | EV_ONESHOT;
+    kev.data = 1; 
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    success();
+}
+
+void
+test_evfilt_timer()
+{
+	kqfd = kqueue();
+    test_kevent_timer_add();
+    test_kevent_timer_del();
+    test_kevent_timer_get();
+    test_oneshot();
+    test_periodic();
+    disable_and_enable();
+	close(kqfd);
+}
diff --git a/tools/regression/kqueue/user.c b/tools/regression/kqueue/user.c
new file mode 100644
index 00000000000..9ba25f9df4d
--- /dev/null
+++ b/tools/regression/kqueue/user.c
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2009 Mark Heily 
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#include "common.h"
+
+int kqfd;
+
+static void
+add_and_delete(void)
+{
+    const char *test_id = "kevent(EVFILT_USER, EV_ADD and EV_DELETE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_ADD, 0, 0, NULL);
+    test_no_kevents();
+
+    kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_DELETE, 0, 0, NULL);
+    test_no_kevents();
+
+    success();
+}
+
+static void
+event_wait(void)
+{
+    const char *test_id = "kevent(EVFILT_USER, wait)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    test_no_kevents();
+
+    /* Add the event, and then trigger it */
+    kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_ADD | EV_CLEAR, 0, 0, NULL);    
+    kevent_add(kqfd, &kev, 1, EVFILT_USER, 0, NOTE_TRIGGER, 0, NULL);    
+
+    kev.fflags &= ~NOTE_FFCTRLMASK;
+    kev.fflags &= ~NOTE_TRIGGER;
+    kev.flags = EV_CLEAR;
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    test_no_kevents();
+
+    success();
+}
+
+static void
+disable_and_enable(void)
+{
+    const char *test_id = "kevent(EVFILT_USER, EV_DISABLE and EV_ENABLE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    test_no_kevents();
+
+    kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_ADD, 0, 0, NULL); 
+    kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_DISABLE, 0, 0, NULL); 
+
+    /* Trigger the event, but since it is disabled, nothing will happen. */
+    kevent_add(kqfd, &kev, 1, EVFILT_USER, 0, NOTE_TRIGGER, 0, NULL); 
+    test_no_kevents();
+
+    kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_ENABLE, 0, 0, NULL); 
+    kevent_add(kqfd, &kev, 1, EVFILT_USER, 0, NOTE_TRIGGER, 0, NULL); 
+
+    kev.flags = EV_CLEAR;
+    kev.fflags &= ~NOTE_FFCTRLMASK;
+    kev.fflags &= ~NOTE_TRIGGER;
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    success();
+}
+
+static void
+oneshot(void)
+{
+    const char *test_id = "kevent(EVFILT_USER, EV_ONESHOT)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    test_no_kevents();
+
+    kevent_add(kqfd, &kev, 2, EVFILT_USER, EV_ADD | EV_ONESHOT, 0, 0, NULL);
+
+    puts("  -- event 1");
+    kevent_add(kqfd, &kev, 2, EVFILT_USER, 0, NOTE_TRIGGER, 0, NULL);    
+
+    kev.flags = EV_ONESHOT;
+    kev.fflags &= ~NOTE_FFCTRLMASK;
+    kev.fflags &= ~NOTE_TRIGGER;
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    test_no_kevents();
+
+    success();
+}
+
+void
+test_evfilt_user()
+{
+	kqfd = kqueue();
+
+    add_and_delete();
+    event_wait();
+    disable_and_enable();
+    oneshot();
+    /* TODO: try different fflags operations */
+
+	close(kqfd);
+}
diff --git a/tools/regression/kqueue/vnode.c b/tools/regression/kqueue/vnode.c
new file mode 100644
index 00000000000..dfa0b5e176f
--- /dev/null
+++ b/tools/regression/kqueue/vnode.c
@@ -0,0 +1,266 @@
+/*
+ * Copyright (c) 2009 Mark Heily 
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#include "common.h"
+
+int kqfd;
+int vnode_fd;
+
+void
+test_kevent_vnode_add(void)
+{
+    const char *test_id = "kevent(EVFILT_VNODE, EV_ADD)";
+    const char *testfile = "/tmp/kqueue-test.tmp";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    system("touch /tmp/kqueue-test.tmp");
+    vnode_fd = open(testfile, O_RDONLY);
+    if (vnode_fd < 0)
+        err(1, "open of %s", testfile);
+    else
+        printf("vnode_fd = %d\n", vnode_fd);
+
+    EV_SET(&kev, vnode_fd, EVFILT_VNODE, EV_ADD, 
+            NOTE_WRITE | NOTE_ATTRIB | NOTE_RENAME | NOTE_DELETE, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+void
+test_kevent_vnode_note_delete(void)
+{
+    const char *test_id = "kevent(EVFILT_VNODE, NOTE_DELETE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, vnode_fd, EVFILT_VNODE, EV_ADD | EV_ONESHOT, NOTE_DELETE, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    if (unlink("/tmp/kqueue-test.tmp") < 0)
+        err(1, "unlink");
+
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    success();
+}
+
+void
+test_kevent_vnode_note_write(void)
+{
+    const char *test_id = "kevent(EVFILT_VNODE, NOTE_WRITE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, vnode_fd, EVFILT_VNODE, EV_ADD | EV_ONESHOT, NOTE_WRITE, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    if (system("echo hello >> /tmp/kqueue-test.tmp") < 0)
+        err(1, "system");
+
+    /* BSD kqueue adds NOTE_EXTEND even though it was not requested */
+    /* BSD kqueue removes EV_ENABLE */
+    kev.flags &= ~EV_ENABLE; // XXX-FIXME compatibility issue
+    kev.fflags |= NOTE_EXTEND; // XXX-FIXME compatibility issue
+    kevent_cmp(&kev, kevent_get(kqfd));
+
+    success();
+}
+
+void
+test_kevent_vnode_note_attrib(void)
+{
+    const char *test_id = "kevent(EVFILT_VNODE, NOTE_ATTRIB)";
+    struct kevent kev;
+    int nfds;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, vnode_fd, EVFILT_VNODE, EV_ADD | EV_ONESHOT, NOTE_ATTRIB, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    if (system("touch /tmp/kqueue-test.tmp") < 0)
+        err(1, "system");
+
+    nfds = kevent(kqfd, NULL, 0, &kev, 1, NULL);
+    if (nfds < 1)
+        err(1, "%s", test_id);
+    if (kev.ident != vnode_fd ||
+            kev.filter != EVFILT_VNODE || 
+            kev.fflags != NOTE_ATTRIB)
+        err(1, "%s - incorrect event (sig=%u; filt=%d; flags=%d)", 
+                test_id, (unsigned int)kev.ident, kev.filter, kev.flags);
+
+    success();
+}
+
+void
+test_kevent_vnode_note_rename(void)
+{
+    const char *test_id = "kevent(EVFILT_VNODE, NOTE_RENAME)";
+    struct kevent kev;
+    int nfds;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, vnode_fd, EVFILT_VNODE, EV_ADD | EV_ONESHOT, NOTE_RENAME, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    if (system("mv /tmp/kqueue-test.tmp /tmp/kqueue-test2.tmp") < 0)
+        err(1, "system");
+
+    nfds = kevent(kqfd, NULL, 0, &kev, 1, NULL);
+    if (nfds < 1)
+        err(1, "%s", test_id);
+    if (kev.ident != vnode_fd ||
+            kev.filter != EVFILT_VNODE || 
+            kev.fflags != NOTE_RENAME)
+        err(1, "%s - incorrect event (sig=%u; filt=%d; flags=%d)", 
+                test_id, (unsigned int)kev.ident, kev.filter, kev.flags);
+
+    if (system("mv /tmp/kqueue-test2.tmp /tmp/kqueue-test.tmp") < 0)
+        err(1, "system");
+
+    success();
+}
+
+void
+test_kevent_vnode_del(void)
+{
+    const char *test_id = "kevent(EVFILT_VNODE, EV_DELETE)";
+    struct kevent kev;
+
+    test_begin(test_id);
+
+    EV_SET(&kev, vnode_fd, EVFILT_VNODE, EV_DELETE, 0, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    success();
+}
+
+void
+test_kevent_vnode_disable_and_enable(void)
+{
+    const char *test_id = "kevent(EVFILT_VNODE, EV_DISABLE and EV_ENABLE)";
+    struct kevent kev;
+    int nfds;
+
+    test_begin(test_id);
+
+    test_no_kevents();
+
+    /* Add the watch and immediately disable it */
+    EV_SET(&kev, vnode_fd, EVFILT_VNODE, EV_ADD | EV_ONESHOT, NOTE_ATTRIB, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+    kev.flags = EV_DISABLE;
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    /* Confirm that the watch is disabled */
+    if (system("touch /tmp/kqueue-test.tmp") < 0)
+        err(1, "system");
+    test_no_kevents();
+
+    /* Re-enable and check again */
+    kev.flags = EV_ENABLE;
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+    if (system("touch /tmp/kqueue-test.tmp") < 0)
+        err(1, "system");
+    nfds = kevent(kqfd, NULL, 0, &kev, 1, NULL);
+    if (nfds < 1)
+        err(1, "%s", test_id);
+    if (kev.ident != vnode_fd ||
+            kev.filter != EVFILT_VNODE || 
+            kev.fflags != NOTE_ATTRIB)
+        err(1, "%s - incorrect event (sig=%u; filt=%d; flags=%d)", 
+                test_id, (unsigned int)kev.ident, kev.filter, kev.flags);
+
+    success();
+}
+
+#if HAVE_EV_DISPATCH
+void
+test_kevent_vnode_dispatch(void)
+{
+    const char *test_id = "kevent(EVFILT_VNODE, EV_DISPATCH)";
+    struct kevent kev;
+    int nfds;
+
+    test_begin(test_id);
+
+    test_no_kevents();
+
+    EV_SET(&kev, vnode_fd, EVFILT_VNODE, EV_ADD | EV_DISPATCH, NOTE_ATTRIB, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "%s", test_id);
+
+    if (system("touch /tmp/kqueue-test.tmp") < 0)
+        err(1, "system");
+
+    nfds = kevent(kqfd, NULL, 0, &kev, 1, NULL);
+    if (nfds < 1)
+        err(1, "%s", test_id);
+    if (kev.ident != vnode_fd ||
+            kev.filter != EVFILT_VNODE || 
+            kev.fflags != NOTE_ATTRIB)
+        err(1, "%s - incorrect event (sig=%u; filt=%d; flags=%d)", 
+                test_id, (unsigned int)kev.ident, kev.filter, kev.flags);
+
+    /* Confirm that the watch is disabled automatically */
+    puts("-- checking that watch is disabled");
+    if (system("touch /tmp/kqueue-test.tmp") < 0)
+        err(1, "system");
+    test_no_kevents();
+
+    /* Delete the watch */
+    EV_SET(&kev, vnode_fd, EVFILT_VNODE, EV_DELETE, NOTE_ATTRIB, 0, NULL);
+    if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0)
+        err(1, "remove watch failed: %s", test_id);
+
+    success();
+}
+#endif 	/* HAVE_EV_DISPATCH */
+
+void
+test_evfilt_vnode()
+{
+	kqfd = kqueue();
+        test_kevent_vnode_add();
+        test_kevent_vnode_del();
+        test_kevent_vnode_disable_and_enable();
+#if HAVE_EV_DISPATCH
+        test_kevent_vnode_dispatch();
+#endif
+        test_kevent_vnode_note_write();
+        test_kevent_vnode_note_attrib();
+        test_kevent_vnode_note_rename();
+        test_kevent_vnode_note_delete();
+	close(kqfd);
+}
diff --git a/tools/regression/lib/libutil/Makefile b/tools/regression/lib/libutil/Makefile
index 74972fde555..6fc97aaa425 100644
--- a/tools/regression/lib/libutil/Makefile
+++ b/tools/regression/lib/libutil/Makefile
@@ -1,7 +1,7 @@
 # $FreeBSD$
 
-TESTS=	test-trimdomain test-trimdomain-nodomain test-flopen test-grp
-CFLAGS+= -g -Wall -lutil
+TESTS=	test-trimdomain test-trimdomain-nodomain test-flopen test-grp test-pidfile
+CFLAGS+= -g -Wall -Wextra -Werror -lutil
 
 .PHONY: tests
 tests: ${TESTS}
diff --git a/tools/regression/lib/libutil/test-flopen.c b/tools/regression/lib/libutil/test-flopen.c
index a3ae35c7ea5..04715846650 100644
--- a/tools/regression/lib/libutil/test-flopen.c
+++ b/tools/regression/lib/libutil/test-flopen.c
@@ -28,11 +28,11 @@
 #include 
 __FBSDID("$FreeBSD$");
 
-#include 
 #include 
 #include 
 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -169,16 +169,10 @@ test_flopen_lock_child(void)
 			_exit(0);
 		}
 		close(fd1);
-		fd2 = -42;
-		if (vfork() == 0) {
-			fd2 = flopen(fn, O_RDWR|O_NONBLOCK);
-			close(fd2);
-			_exit(0);
-		}
-		if (fd2 == -42)
-			result = "vfork() doesn't work as expected";
-		if (fd2 >= 0)
+		if ((fd2 = flopen(fn, O_RDWR|O_NONBLOCK)) != -1) {
 			result = "second open succeeded";
+			close(fd2);
+		}
 		kill(pid, SIGINT);
 	}
 	unlink(fn);
diff --git a/tools/regression/lib/libutil/test-grp.c b/tools/regression/lib/libutil/test-grp.c
index 722a0b8a220..ae7ce73bf1c 100644
--- a/tools/regression/lib/libutil/test-grp.c
+++ b/tools/regression/lib/libutil/test-grp.c
@@ -64,7 +64,7 @@ build_grp(struct group *grp)
 
 
 int
-main(int argc, char **argv)
+main(void)
 {
 	char *strGrp;
 	int testNdx;
diff --git a/tools/regression/lib/libutil/test-pidfile.c b/tools/regression/lib/libutil/test-pidfile.c
new file mode 100644
index 00000000000..0b70bc80152
--- /dev/null
+++ b/tools/regression/lib/libutil/test-pidfile.c
@@ -0,0 +1,280 @@
+/*-
+ * Copyright (c) 2007-2009 Dag-Erling Coïdan Smørgrav
+ * 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
+ *    in this position and unchanged.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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 
+__FBSDID("$FreeBSD$");
+
+#include 
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+/*
+ * We need a signal handler so kill(2) will interrupt our child's
+ * select(2) instead of killing it.
+ */
+static void
+signal_handler(int sig)
+{
+	(void)sig;
+}
+
+/*
+ * Test that pidfile_open() can create a pidfile and that pidfile_write()
+ * can write to it.
+ */
+static const char *
+test_pidfile_uncontested(void)
+{
+	const char *fn = "test_pidfile_uncontested";
+	struct pidfh *pf;
+	pid_t other = 0;
+
+	unlink(fn);
+	pf = pidfile_open(fn, 0600, &other);
+	if (pf == NULL && other != 0)
+		return ("pidfile exists and is locked");
+	if (pf == NULL)
+		return (strerror(errno));
+	if (pidfile_write(pf) != 0) {
+		pidfile_close(pf);
+		unlink(fn);
+		return ("failed to write PID");
+	}
+	pidfile_close(pf);
+	unlink(fn);
+	return (NULL);
+}
+
+/*
+ * Test that pidfile_open() locks against self.
+ */
+static const char *
+test_pidfile_self(void)
+{
+	const char *fn = "test_pidfile_self";
+	struct pidfh *pf1, *pf2;
+	pid_t other = 0;
+	int serrno;
+
+	unlink(fn);
+	pf1 = pidfile_open(fn, 0600, &other);
+	if (pf1 == NULL && other != 0)
+		return ("pidfile exists and is locked");
+	if (pf1 == NULL)
+		return (strerror(errno));
+	if (pidfile_write(pf1) != 0) {
+		serrno = errno;
+		pidfile_close(pf1);
+		unlink(fn);
+		return (strerror(serrno));
+	}
+	// second open should fail
+	pf2 = pidfile_open(fn, 0600, &other);
+	if (pf2 != NULL) {
+		pidfile_close(pf1);
+		pidfile_close(pf2);
+		unlink(fn);
+		return ("managed to opened pidfile twice");
+	}
+	if (other != getpid()) {
+		pidfile_close(pf1);
+		unlink(fn);
+		return ("pidfile contained wrong PID");
+	}
+	pidfile_close(pf1);
+	unlink(fn);
+	return (NULL);
+}
+
+/*
+ * Common code for test_pidfile_{contested,inherited}.
+ */
+static const char *
+common_test_pidfile_child(const char *fn, int parent_open)
+{
+	struct pidfh *pf = NULL;
+	pid_t other = 0, pid = 0;
+	int fd[2], serrno, status;
+	char ch;
+
+	unlink(fn);
+	if (pipe(fd) != 0)
+		return (strerror(errno));
+
+	if (parent_open) {
+		pf = pidfile_open(fn, 0600, &other);
+		if (pf == NULL && other != 0)
+			return ("pidfile exists and is locked");
+		if (pf == NULL)
+			return (strerror(errno));
+	}
+
+	pid = fork();
+	if (pid == -1)
+		return (strerror(errno));
+	if (pid == 0) {
+		// child
+		close(fd[0]);
+		signal(SIGINT, signal_handler);
+		if (!parent_open) {
+			pf = pidfile_open(fn, 0600, &other);
+			if (pf == NULL && other != 0)
+				return ("pidfile exists and is locked");
+			if (pf == NULL)
+				return (strerror(errno));
+		}
+		if (pidfile_write(pf) != 0) {
+			serrno = errno;
+			pidfile_close(pf);
+			unlink(fn);
+			return (strerror(serrno));
+		}
+		if (pf == NULL)
+			_exit(1);
+		if (pidfile_write(pf) != 0)
+			_exit(1);
+		if (write(fd[1], "*", 1) != 1)
+			_exit(1);
+		select(0, 0, 0, 0, 0);
+		_exit(0);
+	}
+	// parent
+	close(fd[1]);
+	if (pf)
+		pidfile_close(pf);
+
+	// wait for the child to signal us
+	if (read(fd[0], &ch, 1) != 1) {
+		serrno = errno;
+		unlink(fn);
+		kill(pid, SIGTERM);
+		errno = serrno;
+		return (strerror(errno));
+	}
+
+	// We shouldn't be able to lock the same pidfile as our child
+	pf = pidfile_open(fn, 0600, &other);
+	if (pf != NULL) {
+		pidfile_close(pf);
+		unlink(fn);
+		return ("managed to lock contested pidfile");
+	}
+
+	// Failed to lock, but not because it was contested
+	if (other == 0) {
+		unlink(fn);
+		return (strerror(errno));
+	}
+
+	// Locked by the wrong process
+	if (other != pid) {
+		unlink(fn);
+		return ("pidfile contained wrong PID");
+	}
+
+	// check our child's fate
+	if (pf)
+		pidfile_close(pf);
+	unlink(fn);
+	if (kill(pid, SIGINT) != 0)
+		return (strerror(errno));
+	if (waitpid(pid, &status, 0) == -1)
+		return (strerror(errno));
+	if (WIFSIGNALED(status))
+		return ("child caught signal");
+	if (WEXITSTATUS(status) != 0) 
+		return ("child returned non-zero status");
+
+	// success
+	return (NULL);
+}
+
+/*
+ * Test that pidfile_open() fails when attempting to open a pidfile that
+ * is already locked, and that it returns the correct PID.
+ */
+static const char *
+test_pidfile_contested(void)
+{
+	const char *fn = "test_pidfile_contested";
+	const char *result;
+
+	result = common_test_pidfile_child(fn, 0);
+	return (result);
+}
+
+/*
+ * Test that the pidfile lock is inherited.
+ */
+static const char *
+test_pidfile_inherited(void)
+{
+	const char *fn = "test_pidfile_inherited";
+	const char *result;
+
+	result = common_test_pidfile_child(fn, 1);
+	return (result);
+}
+
+static struct test {
+	const char *name;
+	const char *(*func)(void);
+} t[] = {
+	{ "pidfile_uncontested", test_pidfile_uncontested },
+	{ "pidfile_self", test_pidfile_self },
+	{ "pidfile_contested", test_pidfile_contested },
+	{ "pidfile_inherited", test_pidfile_inherited },
+};
+
+int
+main(void)
+{
+	const char *result;
+	int i, nt;
+
+	nt = sizeof(t) / sizeof(*t);
+	printf("1..%d\n", nt);
+	for (i = 0; i < nt; ++i) {
+		if ((result = t[i].func()) != NULL)
+			printf("not ok %d - %s # %s\n", i + 1,
+			    t[i].name, result);
+		else
+			printf("ok %d - %s\n", i + 1,
+			    t[i].name);
+	}
+	exit(0);
+}
diff --git a/tools/regression/lib/libutil/test-trimdomain-nodomain.c b/tools/regression/lib/libutil/test-trimdomain-nodomain.c
index 344bc17e439..c02ccdb8fd1 100644
--- a/tools/regression/lib/libutil/test-trimdomain-nodomain.c
+++ b/tools/regression/lib/libutil/test-trimdomain-nodomain.c
@@ -47,7 +47,8 @@ int tests = 0;
  * This makes the tests much easier to write and less likely to fail on
  * oddly configured systems.
  */
-int gethostname(char *name, size_t namelen)
+int
+gethostname(char *name, size_t namelen)
 {
 	if (strlcpy(name, TESTFQDN, namelen) > namelen) {
 		errno = ENAMETOOLONG;
@@ -63,7 +64,7 @@ testit(const char *input, int hostsize, const char *output, const char *test)
 	const char *expected = (output == NULL) ? input : output;
 
 	testhost = strdup(input);
-	trimdomain(testhost, hostsize < 0 ? strlen(testhost) : hostsize);
+	trimdomain(testhost, hostsize < 0 ? (int)strlen(testhost) : hostsize);
 	tests++;
 	if (strcmp(testhost, expected) != 0) {
 		printf("not ok %d - %s\n", tests, test);
@@ -75,7 +76,7 @@ testit(const char *input, int hostsize, const char *output, const char *test)
 }
 
 int
-main (int argc, char **argv)
+main(void)
 {
 
 	printf("1..5\n");
diff --git a/tools/regression/lib/libutil/test-trimdomain.c b/tools/regression/lib/libutil/test-trimdomain.c
index d1c78238050..08fcfc0130d 100644
--- a/tools/regression/lib/libutil/test-trimdomain.c
+++ b/tools/regression/lib/libutil/test-trimdomain.c
@@ -47,7 +47,8 @@ int tests = 0;
  * This makes the tests much easier to write and less likely to fail on
  * oddly configured systems.
  */
-int gethostname(char *name, size_t namelen)
+int
+gethostname(char *name, size_t namelen)
 {
 	if (strlcpy(name, TESTFQDN, namelen) > namelen) {
 		errno = ENAMETOOLONG;
@@ -63,7 +64,7 @@ testit(const char *input, int hostsize, const char *output, const char *test)
 	const char *expected = (output == NULL) ? input : output;
 
 	testhost = strdup(input);
-	trimdomain(testhost, hostsize < 0 ? strlen(testhost) : hostsize);
+	trimdomain(testhost, hostsize < 0 ? (int)strlen(testhost) : hostsize);
 	tests++;
 	if (strcmp(testhost, expected) != 0) {
 		printf("not ok %d - %s\n", tests, test);
@@ -75,7 +76,7 @@ testit(const char *input, int hostsize, const char *output, const char *test)
 }
 
 int
-main (int argc, char **argv)
+main(void)
 {
 
 	printf("1..5\n");
diff --git a/tools/regression/posixsem2/Makefile b/tools/regression/posixsem2/Makefile
new file mode 100644
index 00000000000..84f96174e6e
--- /dev/null
+++ b/tools/regression/posixsem2/Makefile
@@ -0,0 +1,9 @@
+# $FreeBSD$
+
+PROG=	semtest
+SRCS=	semtest.c
+NO_MAN=
+
+WARNS?=	3
+
+.include 
diff --git a/tools/regression/posixsem2/semtest.c b/tools/regression/posixsem2/semtest.c
new file mode 100644
index 00000000000..7557a616b5d
--- /dev/null
+++ b/tools/regression/posixsem2/semtest.c
@@ -0,0 +1,101 @@
+/* $FreeBSD$ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#define SEM_NAME "/semtst"
+
+int test_unnamed(void);
+int test_named(void);
+
+int
+test_unnamed(void)
+{
+	sem_t *s;
+	pid_t pid;
+	int status;
+
+	printf("testing unnamed process-shared semaphore\n");
+	s = (sem_t *)mmap(NULL, sizeof(sem_t), PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED,
+		-1, 0);
+	if (s == MAP_FAILED)
+		err(1, "mmap failed");
+	if (sem_init(s, 1, 0))
+		err(2, "sem_init failed");
+	if ((pid = fork()) == 0) {
+		printf("child: sem_wait()\n");
+		if (sem_wait(s))
+			err(3, "sem_wait failed");
+		printf("child: sem_wait() returned\n");
+		exit(0);
+	} else {
+		sleep(1);
+		printf("parent: sem_post()\n");
+		if (sem_post(s))
+			err(4, "sem_post failed");
+		waitpid(pid, &status, 0);
+		if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
+			printf("OK.\n");
+		else
+			printf("Failure.");
+	}
+	return (0);
+}
+
+int
+test_named(void)
+{
+	sem_t *s, *s2;
+	pid_t pid;
+	int status;
+
+	printf("testing named process-shared semaphore\n");
+	sem_unlink(SEM_NAME);
+	s = sem_open(SEM_NAME, O_CREAT, 0777);
+	if (s == SEM_FAILED)
+		err(1, "sem_open failed");
+	s2 = sem_open(SEM_NAME, O_CREAT, 0777);
+	if (s2 == SEM_FAILED)
+		err(2, "second sem_open call failed");
+	if (s != s2)
+		err(3, "two sem_open calls for same semaphore do not returm same address.");
+	if (sem_close(s2))
+		err(4, "sem_close failed");
+	if ((pid = fork()) == 0) {
+		printf("child: sem_wait()\n");
+		if (sem_wait(s))
+			err(5, "sem_wait failed");
+		printf("child: sem_wait() returned\n");
+		exit(0);
+	} else {
+		sleep(1);
+		printf("parent: sem_post()\n");
+		if (sem_post(s))
+			err(6, "sem_post failed");
+		waitpid(pid, &status, 0);
+		if (WIFEXITED(status) && WEXITSTATUS(status) == 0)
+			printf("OK.\n");
+		else
+			printf("Failure.");
+	}
+
+	if (sem_close(s))
+		err(7, "sem_close failed");
+	
+	return (0);
+}
+
+int
+main(void)
+{
+	test_unnamed();
+	test_named();
+	return (0);
+}
diff --git a/tools/regression/usr.bin/Makefile b/tools/regression/usr.bin/Makefile
index 6e6d6f124b1..364741b2f66 100644
--- a/tools/regression/usr.bin/Makefile
+++ b/tools/regression/usr.bin/Makefile
@@ -1,5 +1,8 @@
 # $FreeBSD$
 
-SUBDIR=	calendar file2c join jot m4 printf sed tr uudecode uuencode xargs lastcomm
+SUBDIR=	calendar comm file2c join jot m4 printf sed tr uudecode uuencode xargs
+.if !defined(AUTOMATED)
+SUBDIR+= lastcomm
+.endif
 
 .include 
diff --git a/tools/regression/usr.bin/calendar/regress.sh b/tools/regression/usr.bin/calendar/regress.sh
index 743eb95e7f9..70447ca4e8a 100644
--- a/tools/regression/usr.bin/calendar/regress.sh
+++ b/tools/regression/usr.bin/calendar/regress.sh
@@ -7,31 +7,25 @@ CALENDAR="${CALENDAR_BIN} ${CALENDAR_FILE}"
 
 REGRESSION_START($1)
 
-echo 1..4
+echo 1..28
 
 REGRESSION_TEST(`s1',`$CALENDAR -t 29.12.2006')
 REGRESSION_TEST(`s2',`$CALENDAR -t 30.12.2006')
 REGRESSION_TEST(`s3',`$CALENDAR -t 31.12.2006')
 REGRESSION_TEST(`s4',`$CALENDAR -t 01.01.2007')
 
-echo 5..9
-
 REGRESSION_TEST(`a1',`$CALENDAR -A 3 -t 28.12.2006')
 REGRESSION_TEST(`a2',`$CALENDAR -A 3 -t 29.12.2006')
 REGRESSION_TEST(`a3',`$CALENDAR -A 3 -t 30.12.2006')
 REGRESSION_TEST(`a4',`$CALENDAR -A 3 -t 31.12.2006')
 REGRESSION_TEST(`a5',`$CALENDAR -A 3 -t 01.01.2007')
 
-echo 10..14
-
 REGRESSION_TEST(`b1',`$CALENDAR -B 3 -t 31.12.2006')
 REGRESSION_TEST(`b2',`$CALENDAR -B 3 -t 01.01.2007')
 REGRESSION_TEST(`b3',`$CALENDAR -B 3 -t 02.01.2007')
 REGRESSION_TEST(`b4',`$CALENDAR -B 3 -t 03.01.2007')
 REGRESSION_TEST(`b5',`$CALENDAR -B 3 -t 04.01.2007')
 
-echo 15..21
-
 REGRESSION_TEST(`w0-1',`$CALENDAR -W 0 -t 28.12.2006')
 REGRESSION_TEST(`w0-2',`$CALENDAR -W 0 -t 29.12.2006')
 REGRESSION_TEST(`w0-3',`$CALENDAR -W 0 -t 30.12.2006')
@@ -40,8 +34,6 @@ REGRESSION_TEST(`w0-5',`$CALENDAR -W 0 -t 01.01.2007')
 REGRESSION_TEST(`w0-6',`$CALENDAR -W 0 -t 02.01.2007')
 REGRESSION_TEST(`w0-7',`$CALENDAR -W 0 -t 03.01.2007')
 
-echo 22..28
-
 REGRESSION_TEST(`wn-1',`$CALENDAR -W 0 -t 28.12.2006')
 REGRESSION_TEST(`wn-2',`$CALENDAR -W 1 -t 28.12.2006')
 REGRESSION_TEST(`wn-3',`$CALENDAR -W 2 -t 28.12.2006')
diff --git a/tools/regression/usr.bin/comm/Makefile b/tools/regression/usr.bin/comm/Makefile
new file mode 100644
index 00000000000..b937d41a4e4
--- /dev/null
+++ b/tools/regression/usr.bin/comm/Makefile
@@ -0,0 +1,4 @@
+# $FreeBSD$
+
+all:
+	@m4 ${.CURDIR}/../regress.m4 ${.CURDIR}/regress.sh | sh /dev/stdin ${.CURDIR}
diff --git a/tools/regression/usr.bin/comm/regress.00.out b/tools/regression/usr.bin/comm/regress.00.out
new file mode 100644
index 00000000000..89a65daab38
--- /dev/null
+++ b/tools/regression/usr.bin/comm/regress.00.out
@@ -0,0 +1,2 @@
+a b
+e f g
diff --git a/tools/regression/usr.bin/comm/regress.00a.in b/tools/regression/usr.bin/comm/regress.00a.in
new file mode 100644
index 00000000000..85b5cd53a6b
--- /dev/null
+++ b/tools/regression/usr.bin/comm/regress.00a.in
@@ -0,0 +1,5 @@
+a b
+c d
+e f
+e f g
+h i
diff --git a/tools/regression/usr.bin/comm/regress.00b.in b/tools/regression/usr.bin/comm/regress.00b.in
new file mode 100644
index 00000000000..89a65daab38
--- /dev/null
+++ b/tools/regression/usr.bin/comm/regress.00b.in
@@ -0,0 +1,2 @@
+a b
+e f g
diff --git a/tools/regression/usr.bin/comm/regress.01.out b/tools/regression/usr.bin/comm/regress.01.out
new file mode 100644
index 00000000000..05ab154ecba
--- /dev/null
+++ b/tools/regression/usr.bin/comm/regress.01.out
@@ -0,0 +1,2 @@
+a	b
+e	f	g
diff --git a/tools/regression/usr.bin/comm/regress.01a.in b/tools/regression/usr.bin/comm/regress.01a.in
new file mode 100644
index 00000000000..78c410b7d75
--- /dev/null
+++ b/tools/regression/usr.bin/comm/regress.01a.in
@@ -0,0 +1,5 @@
+a	b
+c	d
+e	f
+e	f	g
+h	i
diff --git a/tools/regression/usr.bin/comm/regress.01b.in b/tools/regression/usr.bin/comm/regress.01b.in
new file mode 100644
index 00000000000..05ab154ecba
--- /dev/null
+++ b/tools/regression/usr.bin/comm/regress.01b.in
@@ -0,0 +1,2 @@
+a	b
+e	f	g
diff --git a/tools/regression/usr.bin/comm/regress.02.out b/tools/regression/usr.bin/comm/regress.02.out
new file mode 100644
index 00000000000..a451adbbb24
--- /dev/null
+++ b/tools/regression/usr.bin/comm/regress.02.out
@@ -0,0 +1,5 @@
+a
+b
+		c
+	d
+	e
diff --git a/tools/regression/usr.bin/comm/regress.02a.in b/tools/regression/usr.bin/comm/regress.02a.in
new file mode 100644
index 00000000000..1c943a98887
--- /dev/null
+++ b/tools/regression/usr.bin/comm/regress.02a.in
@@ -0,0 +1,3 @@
+a
+b
+c
\ No newline at end of file
diff --git a/tools/regression/usr.bin/comm/regress.02b.in b/tools/regression/usr.bin/comm/regress.02b.in
new file mode 100644
index 00000000000..36019ee78df
--- /dev/null
+++ b/tools/regression/usr.bin/comm/regress.02b.in
@@ -0,0 +1,3 @@
+c
+d
+e
\ No newline at end of file
diff --git a/tools/regression/usr.bin/comm/regress.sh b/tools/regression/usr.bin/comm/regress.sh
new file mode 100644
index 00000000000..774093f0c42
--- /dev/null
+++ b/tools/regression/usr.bin/comm/regress.sh
@@ -0,0 +1,13 @@
+# $FreeBSD$
+
+LC_ALL=C; export LC_ALL
+
+echo 1..3
+
+REGRESSION_START($1)
+
+REGRESSION_TEST(`00', `comm -12 regress.00a.in regress.00b.in')
+REGRESSION_TEST(`01', `comm -12 regress.01a.in regress.01b.in')
+REGRESSION_TEST(`02', `comm regress.02a.in regress.02b.in')
+
+REGRESSION_END()
diff --git a/tools/regression/usr.bin/comm/regress.t b/tools/regression/usr.bin/comm/regress.t
new file mode 100644
index 00000000000..a82aacd9886
--- /dev/null
+++ b/tools/regression/usr.bin/comm/regress.t
@@ -0,0 +1,6 @@
+#!/bin/sh
+# $FreeBSD$
+
+cd `dirname $0`
+
+m4 ../regress.m4 regress.sh | sh
diff --git a/tools/regression/usr.bin/jot/regress.sh b/tools/regression/usr.bin/jot/regress.sh
index 33600ff7e05..05afebf15ca 100644
--- a/tools/regression/usr.bin/jot/regress.sh
+++ b/tools/regression/usr.bin/jot/regress.sh
@@ -52,8 +52,8 @@ REGRESSION_TEST(`wo', `jot -w "a%ob" 10')
 REGRESSION_TEST(`wx', `jot -w "a%xb" 10')
 REGRESSION_TEST(`wX1', `jot -w "a%Xb" 10')
 REGRESSION_TEST(`wXl', `jot -w "a%Xb" 10 2147483648')
-REGRESSION_TEST(`wdl', `jot -w "a%db" 10 2147483648')
-REGRESSION_TEST(`wxn', `jot -w "a%xb" 10 -5')
+REGRESSION_TEST(`wdl', `jot -w "a%db" 10 2147483648 2>/dev/null')
+REGRESSION_TEST(`wxn', `jot -w "a%xb" 10 -5 2>/dev/null')
 REGRESSION_TEST(`wdn', `jot -w "a%db" 10 -5')
 REGRESSION_TEST(`wp1', `jot -w "%%%d%%%%" 10')
 REGRESSION_TEST(`wp2', `jot -w "%d%%d%%" 10')
diff --git a/tools/regression/usr.bin/lastcomm/regress.t b/tools/regression/usr.bin/lastcomm/regress.t
old mode 100644
new mode 100755
diff --git a/tools/regression/usr.bin/lastcomm/values.sh b/tools/regression/usr.bin/lastcomm/values.sh
index ef2e015a86f..6c2095437e5 100644
--- a/tools/regression/usr.bin/lastcomm/values.sh
+++ b/tools/regression/usr.bin/lastcomm/values.sh
@@ -12,6 +12,11 @@ run()
 	/usr/bin/time -l -o $1.time "$@"
 }
 
+if [ `whoami` != "root" ]; then
+	echo "You need to be root to run this test."
+	exit 1
+fi
+
 echo Redirecting accounting.
 
 mkdir $TMPDIR
diff --git a/tools/regression/usr.bin/make/common.sh b/tools/regression/usr.bin/make/common.sh
index 34aacf8f22e..e685ea1197a 100644
--- a/tools/regression/usr.bin/make/common.sh
+++ b/tools/regression/usr.bin/make/common.sh
@@ -233,6 +233,12 @@ reset_test()
 #
 eval_clean()
 {
+	#
+	# If you have special cleaning needs, provide a 'cleanup' shell script.
+	#
+	if [ -n "${TEST_CLEANUP}" ] ; then
+		. ${SRC_DIR}/cleanup
+	fi
 	rm -rf ${WORK_DIR}
 	rm -rf ${OUTPUT_DIR}
 }
diff --git a/tools/regression/usr.bin/make/syntax/directive-t0/Makefile b/tools/regression/usr.bin/make/syntax/directive-t0/Makefile
new file mode 100644
index 00000000000..0f95a216116
--- /dev/null
+++ b/tools/regression/usr.bin/make/syntax/directive-t0/Makefile
@@ -0,0 +1,8 @@
+# $FreeBSD$
+#
+# A typo'ed directive.
+#
+
+.uudef foo
+
+all:
diff --git a/tools/regression/usr.bin/make/syntax/directive-t0/expected.status.1 b/tools/regression/usr.bin/make/syntax/directive-t0/expected.status.1
new file mode 100644
index 00000000000..d00491fd7e5
--- /dev/null
+++ b/tools/regression/usr.bin/make/syntax/directive-t0/expected.status.1
@@ -0,0 +1 @@
+1
diff --git a/tools/regression/usr.bin/make/syntax/directive-t0/expected.stderr.1 b/tools/regression/usr.bin/make/syntax/directive-t0/expected.stderr.1
new file mode 100644
index 00000000000..de66fcc3775
--- /dev/null
+++ b/tools/regression/usr.bin/make/syntax/directive-t0/expected.stderr.1
@@ -0,0 +1,2 @@
+"Makefile", line 6: Unknown directive
+make: fatal errors encountered -- cannot continue
diff --git a/tools/regression/usr.bin/make/syntax/directive-t0/expected.stdout.1 b/tools/regression/usr.bin/make/syntax/directive-t0/expected.stdout.1
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tools/regression/usr.bin/make/syntax/directive-t0/test.t b/tools/regression/usr.bin/make/syntax/directive-t0/test.t
new file mode 100644
index 00000000000..4b71de3f56b
--- /dev/null
+++ b/tools/regression/usr.bin/make/syntax/directive-t0/test.t
@@ -0,0 +1,14 @@
+#! /bin/sh
+# $FreeBSD$
+
+cd `dirname $0`
+. ../../common.sh
+
+# Description
+DESC="A typo'ed directive."
+
+# Run
+TEST_N=1
+TEST_1=
+
+eval_cmd $*
diff --git a/tools/regression/usr.bin/make/sysmk/t0/2/1/Makefile b/tools/regression/usr.bin/make/sysmk/t0/2/1/Makefile
new file mode 100644
index 00000000000..fc95f46e679
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t0/2/1/Makefile
@@ -0,0 +1,6 @@
+# $FreeBSD$
+#
+# Can we traverse up to / and find a 'mk/sys.mk'?
+#
+all:
+	@echo ${DASH_M_DOTDOTDOT}
diff --git a/tools/regression/usr.bin/make/sysmk/t0/2/1/expected.status.1 b/tools/regression/usr.bin/make/sysmk/t0/2/1/expected.status.1
new file mode 100644
index 00000000000..573541ac970
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t0/2/1/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/tools/regression/usr.bin/make/sysmk/t0/2/1/expected.stderr.1 b/tools/regression/usr.bin/make/sysmk/t0/2/1/expected.stderr.1
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tools/regression/usr.bin/make/sysmk/t0/2/1/expected.stdout.1 b/tools/regression/usr.bin/make/sysmk/t0/2/1/expected.stdout.1
new file mode 100644
index 00000000000..6f29307aecc
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t0/2/1/expected.stdout.1
@@ -0,0 +1 @@
+Found_DotDotDot_sys_mk
diff --git a/tools/regression/usr.bin/make/sysmk/t0/2/1/test.t b/tools/regression/usr.bin/make/sysmk/t0/2/1/test.t
new file mode 100644
index 00000000000..9a781570fd1
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t0/2/1/test.t
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# $FreeBSD$
+
+cd `dirname $0`
+. ../../../../common.sh
+
+# Description
+DESC="Can we traverse up to / and find a 'mk/sys.mk'?"
+
+# Run
+TEST_N=1
+TEST_1="-m .../mk"
+TEST_MAKE_DIRS="../../mk 755"
+TEST_COPY_FILES="../../mk/sys.mk 644"
+
+eval_cmd $*
diff --git a/tools/regression/usr.bin/make/sysmk/t0/mk/sys.mk b/tools/regression/usr.bin/make/sysmk/t0/mk/sys.mk
new file mode 100644
index 00000000000..60f195533ed
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t0/mk/sys.mk
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+DASH_M_DOTDOTDOT=Found_DotDotDot_sys_mk
diff --git a/tools/regression/usr.bin/make/sysmk/t1/2/1/cleanup b/tools/regression/usr.bin/make/sysmk/t1/2/1/cleanup
new file mode 100644
index 00000000000..c3d58b79e42
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t1/2/1/cleanup
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+rm -rf ${WORK_DIR}/../../../t0/2/1
diff --git a/tools/regression/usr.bin/make/sysmk/t1/2/1/expected.status.1 b/tools/regression/usr.bin/make/sysmk/t1/2/1/expected.status.1
new file mode 100644
index 00000000000..573541ac970
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t1/2/1/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/tools/regression/usr.bin/make/sysmk/t1/2/1/expected.stderr.1 b/tools/regression/usr.bin/make/sysmk/t1/2/1/expected.stderr.1
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tools/regression/usr.bin/make/sysmk/t1/2/1/expected.stdout.1 b/tools/regression/usr.bin/make/sysmk/t1/2/1/expected.stdout.1
new file mode 100644
index 00000000000..6f29307aecc
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t1/2/1/expected.stdout.1
@@ -0,0 +1 @@
+Found_DotDotDot_sys_mk
diff --git a/tools/regression/usr.bin/make/sysmk/t1/2/1/test.t b/tools/regression/usr.bin/make/sysmk/t1/2/1/test.t
new file mode 100644
index 00000000000..ad1584f82d1
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t1/2/1/test.t
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# $FreeBSD$
+
+cd `dirname $0`
+. ../../../../common.sh
+
+# Description
+DESC="Can we traverse up to / and find a 'mk/sys.mk' with -C -m?"
+
+# Run
+TEST_N=1
+TEST_1="-C ../../../t0/2/1 -m .../mk"
+TEST_MAKE_DIRS="../../mk 755 ../../../t0/mk 755 ../../../t0/2/1 755"
+TEST_COPY_FILES="../../mk/sys.mk 644 ../../../t0/mk/sys.mk 644 ../../../t0/2/1/Makefile 644"
+TEST_CLEAN_FILES="../../../t0/2/1"
+TEST_CLEANUP=clean-special
+
+eval_cmd $*
diff --git a/tools/regression/usr.bin/make/sysmk/t1/mk/sys.mk b/tools/regression/usr.bin/make/sysmk/t1/mk/sys.mk
new file mode 100644
index 00000000000..99b8ecc1d38
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t1/mk/sys.mk
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+DASH_M_DOTDOTDOT=Found_WRONG_DotDotDot_sys_mk__with_C_before_m
diff --git a/tools/regression/usr.bin/make/sysmk/t2/2/1/cleanup b/tools/regression/usr.bin/make/sysmk/t2/2/1/cleanup
new file mode 100644
index 00000000000..c3d58b79e42
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t2/2/1/cleanup
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+rm -rf ${WORK_DIR}/../../../t0/2/1
diff --git a/tools/regression/usr.bin/make/sysmk/t2/2/1/expected.status.1 b/tools/regression/usr.bin/make/sysmk/t2/2/1/expected.status.1
new file mode 100644
index 00000000000..573541ac970
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t2/2/1/expected.status.1
@@ -0,0 +1 @@
+0
diff --git a/tools/regression/usr.bin/make/sysmk/t2/2/1/expected.stderr.1 b/tools/regression/usr.bin/make/sysmk/t2/2/1/expected.stderr.1
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tools/regression/usr.bin/make/sysmk/t2/2/1/expected.stdout.1 b/tools/regression/usr.bin/make/sysmk/t2/2/1/expected.stdout.1
new file mode 100644
index 00000000000..70f1be3c507
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t2/2/1/expected.stdout.1
@@ -0,0 +1 @@
+Found_DotDotDot_sys_mk__with_m_before_C
diff --git a/tools/regression/usr.bin/make/sysmk/t2/2/1/test.t b/tools/regression/usr.bin/make/sysmk/t2/2/1/test.t
new file mode 100644
index 00000000000..2c4dff35bde
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t2/2/1/test.t
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+# $FreeBSD$
+
+cd `dirname $0`
+. ../../../../common.sh
+
+# Description
+DESC="Can we traverse up to / and find a 'mk/sys.mk' with -m -C?"
+
+# Run
+TEST_N=1
+TEST_1="-m .../mk -C ../../../t0/2/1"
+TEST_MAKE_DIRS="../../mk 755 ../../../t0/mk 755 ../../../t0/2/1 755"
+TEST_COPY_FILES="../../mk/sys.mk 644 ../../../t0/mk/sys.mk 644 ../../../t0/2/1/Makefile 644"
+TEST_CLEAN_FILES="../../../t0/2/1"
+TEST_CLEANUP=clean-special
+
+eval_cmd $*
diff --git a/tools/regression/usr.bin/make/sysmk/t2/mk/sys.mk b/tools/regression/usr.bin/make/sysmk/t2/mk/sys.mk
new file mode 100644
index 00000000000..55632fdc90a
--- /dev/null
+++ b/tools/regression/usr.bin/make/sysmk/t2/mk/sys.mk
@@ -0,0 +1,3 @@
+# $FreeBSD$
+
+DASH_M_DOTDOTDOT=Found_DotDotDot_sys_mk__with_m_before_C
diff --git a/tools/regression/usr.bin/pkill/pgrep-t.t b/tools/regression/usr.bin/pkill/pgrep-t.t
index 7e81ada7568..c1d0c2a4861 100644
--- a/tools/regression/usr.bin/pkill/pgrep-t.t
+++ b/tools/regression/usr.bin/pkill/pgrep-t.t
@@ -11,7 +11,10 @@ if [ "$tty" = "??" ]; then
 	tty="-"
 	ttyshort="-"
 else
-	ttyshort=`echo $tty | cut -c 4-`
+	case $tty in
+	pts/*)	ttyshort=`echo $tty | cut -c 5-` ;;
+	*)	ttyshort=`echo $tty | cut -c 4-` ;;
+	esac
 fi
 sleep=`mktemp /tmp/$base.XXXXXX` || exit 1
 ln -sf /bin/sleep $sleep
diff --git a/tools/regression/usr.bin/pkill/pkill-t.t b/tools/regression/usr.bin/pkill/pkill-t.t
index cbef527cd50..84a66c30088 100644
--- a/tools/regression/usr.bin/pkill/pkill-t.t
+++ b/tools/regression/usr.bin/pkill/pkill-t.t
@@ -11,7 +11,10 @@ if [ "$tty" = "??" ]; then
 	tty="-"
 	ttyshort="-"
 else
-	ttyshort=`echo $tty | cut -c 4-`
+	case $tty in
+	pts/*)	ttyshort=`echo $tty | cut -c 5-` ;;
+	*)	ttyshort=`echo $tty | cut -c 4-` ;;
+	esac
 fi
 sleep=`mktemp /tmp/$base.XXXXXX` || exit 1
 ln -sf /bin/sleep $sleep
diff --git a/tools/regression/usr.bin/sed/multitest.t b/tools/regression/usr.bin/sed/multitest.t
index 67dcded3ec2..a6588ff4b09 100644
--- a/tools/regression/usr.bin/sed/multitest.t
+++ b/tools/regression/usr.bin/sed/multitest.t
@@ -50,7 +50,7 @@ main()
 	awk 'END { for (i = 1; i < 15; i++) print "l1_" i}' lines1
 	awk 'END { for (i = 1; i < 10; i++) print "l2_" i}' lines2
 
-	echo "1..121"
+	echo "1..129"
 
 	exec 4>&1 5>&2
 	tests
diff --git a/tools/regression/usr.sbin/sa/regress.t b/tools/regression/usr.sbin/sa/regress.t
old mode 100644
new mode 100755
diff --git a/tools/tools/README b/tools/tools/README
index c052e7d728f..8a28d9832b7 100644
--- a/tools/tools/README
+++ b/tools/tools/README
@@ -48,6 +48,7 @@ mfc		Merge a directory from HEAD to a branch where it does not
 mid	 	Create a Message-ID database for mailing lists.
 mwl		Tools specific to the Marvell 88W8363 support
 ncpus		Count the number of processors
+notescheck	Check for missing devices and options in NOTES files.
 npe		Tools specific to the Intel IXP4XXX NPE device
 nxge		A diagnostic tool for the nxge(4) driver
 pciid		Generate src/share/misc/pci_vendors.
diff --git a/tools/tools/nanobsd/gateworks/Files/root/.profile b/tools/tools/nanobsd/gateworks/Files/root/.profile
index e1efe6b71f3..83dc9b0cbf1 100644
--- a/tools/tools/nanobsd/gateworks/Files/root/.profile
+++ b/tools/tools/nanobsd/gateworks/Files/root/.profile
@@ -3,7 +3,7 @@
 PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:~/bin
 export PATH
 HOME=/root; export HOME
-TERM=${TERM:-cons25}; export TERM
+TERM=${TERM:-xterm}; export TERM
 PAGER=more; export PAGER
 
 #set -o vi
diff --git a/tools/tools/nanobsd/pcengines/ALIX_DSK b/tools/tools/nanobsd/pcengines/ALIX_DSK
new file mode 100644
index 00000000000..b45822e56e8
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/ALIX_DSK
@@ -0,0 +1,113 @@
+#
+# $FreeBSD$
+#
+
+cpu		I586_CPU
+ident		ALIX_DSK
+makeoptions	DEBUG=-g		
+options		CPU_GEODE
+options 	SCHED_ULE		
+options 	PREEMPTION		
+options 	INET			
+options 	INET6			
+options 	FFS			
+options 	SOFTUPDATES		
+options 	UFS_ACL			
+options 	UFS_DIRHASH		
+options 	NFSCLIENT		
+options 	NFSLOCKD		
+options 	MSDOSFS			
+options 	CD9660			
+options 	PROCFS			
+options 	PSEUDOFS		
+options 	GEOM_PART_GPT		
+options 	GEOM_LABEL		
+options 	COMPAT_43TTY		
+options 	COMPAT_FREEBSD7		
+options 	SCSI_DELAY=5000		
+options 	SYSVSHM			
+options 	SYSVMSG			
+options 	SYSVSEM			
+options 	P1003_1B_SEMAPHORES	
+options 	_KPOSIX_PRIORITY_SCHEDULING 
+options 	PRINTF_BUFR_SIZE=128	
+device		apic			
+device		pci
+device		fdc
+device		ata
+device		atadisk		
+device		atapicd		
+device		atapist		
+options 	ATA_STATIC_ID	
+device		scbus		
+device		da		
+device		sa		
+device		cd		
+device		pass		
+device		uart		
+device		em		
+device		miibus		
+device		vr		
+device		wlan		
+options 	IEEE80211_DEBUG	
+options 	IEEE80211_AMPDU_AGE 
+options 	IEEE80211_SUPPORT_MESH	
+device		wlan_wep	
+device		wlan_ccmp	
+device		wlan_tkip	
+device		wlan_amrr	
+device		an		
+device		ath		
+device		ath_hal		
+options 	AH_SUPPORT_AR5416	
+device		ath_rate_sample	
+device		wi		
+device		loop		
+device		random		
+device		ether		
+device		tun		
+device		pty		
+device		md		
+device		gif		
+device		faith		
+device		firmware	
+device		bpf		
+device		uhci		
+device		ohci		
+device		ehci		
+device		usb		
+device		ulpt		
+device		umass		
+device		u3g		
+device		ubsa		
+device		uftdi		
+
+options         INCLUDE_CONFIG_FILE
+
+options         ALTQ
+options         ALTQ_CBQ
+options         ALTQ_RED
+options         ALTQ_RIO
+options         ALTQ_HFSC
+options         ALTQ_CDNR
+options         ALTQ_PRIQ
+
+device          pf
+device          pflog
+device          pfsync                                                          
+device          carp                                                            
+device          if_bridge
+
+options         DEVICE_POLLING
+
+options         NETGRAPH                                                        
+options         NETGRAPH_BPF                                                    
+options         NETGRAPH_ETHER                                                  
+options         NETGRAPH_IFACE                                                  
+options         NETGRAPH_PPP                                                    
+options         NETGRAPH_PPPOE                                                  
+options         NETGRAPH_PPTPGRE                                                
+options         NETGRAPH_MPPC_ENCRYPTION                                        
+options         NETGRAPH_SOCKET                                                 
+options         NETGRAPH_KSOCKET                                                
+options         NETGRAPH_VJC
diff --git a/tools/tools/nanobsd/pcengines/ALIX_NFS b/tools/tools/nanobsd/pcengines/ALIX_NFS
new file mode 100644
index 00000000000..fe911da613f
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/ALIX_NFS
@@ -0,0 +1,121 @@
+#
+# $FreeBSD$
+#
+
+cpu		I586_CPU
+ident		ALIX_DSK
+makeoptions	DEBUG=-g		
+options		CPU_GEODE
+options 	SCHED_ULE		
+options 	PREEMPTION		
+options 	INET			
+options 	INET6			
+options 	FFS			
+options 	SOFTUPDATES		
+options 	UFS_ACL			
+options 	UFS_DIRHASH		
+options 	NFSCLIENT		
+options 	NFSLOCKD		
+options 	MSDOSFS			
+options 	CD9660			
+options 	PROCFS			
+options 	PSEUDOFS		
+options 	GEOM_PART_GPT		
+options 	GEOM_LABEL		
+options 	COMPAT_43TTY		
+options 	COMPAT_FREEBSD7		
+options 	SCSI_DELAY=5000		
+options 	SYSVSHM			
+options 	SYSVMSG			
+options 	SYSVSEM			
+options 	P1003_1B_SEMAPHORES	
+options 	_KPOSIX_PRIORITY_SCHEDULING 
+options 	PRINTF_BUFR_SIZE=128	
+device		apic			
+device		pci
+device		fdc
+device		ata
+device		atadisk		
+device		atapicd		
+device		atapist		
+options 	ATA_STATIC_ID	
+device		scbus		
+device		da		
+device		sa		
+device		cd		
+device		pass		
+device		uart		
+device		em		
+device		miibus		
+device		vr		
+device		wlan		
+options 	IEEE80211_DEBUG	
+options 	IEEE80211_AMPDU_AGE 
+options 	IEEE80211_SUPPORT_MESH	
+device		wlan_wep	
+device		wlan_ccmp	
+device		wlan_tkip	
+device		wlan_amrr	
+device		an		
+device		ath		
+device		ath_hal		
+options 	AH_SUPPORT_AR5416	
+device		ath_rate_sample	
+device		wi		
+device		loop		
+device		random		
+device		ether		
+device		tun		
+device		pty		
+device		md		
+device		gif		
+device		faith		
+device		firmware	
+device		bpf		
+device		uhci		
+device		ohci		
+device		ehci		
+device		usb		
+device		ulpt		
+device		umass		
+device		u3g		
+device		ubsa		
+device		uftdi		
+
+options         INCLUDE_CONFIG_FILE
+
+options         ALTQ
+options         ALTQ_CBQ
+options         ALTQ_RED
+options         ALTQ_RIO
+options         ALTQ_HFSC
+options         ALTQ_CDNR
+options         ALTQ_PRIQ
+
+device          pf
+device          pflog
+device          pfsync                                                          
+device          carp                                                            
+device          if_bridge
+
+options         DEVICE_POLLING
+
+options         NETGRAPH                                                        
+options         NETGRAPH_BPF                                                    
+options         NETGRAPH_ETHER                                                  
+options         NETGRAPH_IFACE                                                  
+options         NETGRAPH_PPP                                                    
+options         NETGRAPH_PPPOE                                                  
+options         NETGRAPH_PPTPGRE                                                
+options         NETGRAPH_MPPC_ENCRYPTION                                        
+options         NETGRAPH_SOCKET                                                 
+options         NETGRAPH_KSOCKET                                                
+options         NETGRAPH_VJC
+
+options		NFS_ROOT
+options         BOOTP
+options         BOOTP_NFSROOT
+options         BOOTP_NFSV3
+#options                BOOTP_WIRED_TO=fxp0
+#options                BOOTP_WIRED_TO=ath0
+options         BOOTP_COMPAT
diff --git a/tools/tools/nanobsd/pcengines/Files/etc/rc.conf b/tools/tools/nanobsd/pcengines/Files/etc/rc.conf
new file mode 100644
index 00000000000..4db828e4e55
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/Files/etc/rc.conf
@@ -0,0 +1,13 @@
+#
+# $FreeBSD$
+#
+
+hostname="alix"
+ifconfig_vr0="DHCP"
+ifconfig_em0="DHCP"
+
+sshd_enable="YES"
+#ntpdate_enable="YES"
+#ntpdate_hosts="1.0.0.0"
+#ntpd_enable="YES"
+#ntpd_sync_on_start="YES"
diff --git a/tools/tools/nanobsd/pcengines/Files/etc/ttys b/tools/tools/nanobsd/pcengines/Files/etc/ttys
new file mode 100644
index 00000000000..7d28bad02ee
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/Files/etc/ttys
@@ -0,0 +1,565 @@
+#
+# $FreeBSD$
+#	@(#)ttys	5.1 (Berkeley) 4/17/89
+#
+# This file specifies various information about terminals on the system.
+# It is used by several different programs.  Common entries for the
+# various columns include:
+#
+# name  The name of the terminal device.
+#
+# getty The program to start running on the terminal.  Typically a
+#       getty program, as the name implies.  Other common entries
+#       include none, when no getty is needed, and xdm, to start the
+#       X Window System.
+#
+# type The initial terminal type for this port.  For hardwired
+#      terminal lines, this will contain the type of terminal used.
+#      For virtual consoles, the correct type is typically xterm, but
+#      vt220 will work better if you need interoperability with other
+#      systems like Solaris or GNU/Linux.
+#      Other common values include network for network connections on
+#      pseudo-terminals, dialup for incoming modem ports, and unknown
+#      when the terminal type cannot be predetermined.
+#
+# status Must be on or off.  If on, init will run the getty program on
+#        the specified port.  If the word "secure" appears, this tty
+#        allows root login.
+#
+# name	getty				type	status		comments
+#
+# If console is marked "insecure", then init will ask for the root password
+# when going to single-user mode.
+console	none				unknown	off secure
+#
+ttyv0	"/usr/libexec/getty Pc"		xterm	off  secure
+# Virtual terminals
+ttyv1	"/usr/libexec/getty Pc"		xterm	off  secure
+ttyv2	"/usr/libexec/getty Pc"		xterm	off  secure
+ttyv3	"/usr/libexec/getty Pc"		xterm	off  secure
+ttyv4	"/usr/libexec/getty Pc"		xterm	off  secure
+ttyv5	"/usr/libexec/getty Pc"		xterm	off  secure
+ttyv6	"/usr/libexec/getty Pc"		xterm	off  secure
+ttyv7	"/usr/libexec/getty Pc"		xterm	off  secure
+ttyv8	"/usr/local/bin/xdm -nodaemon"	xterm	off secure
+# Serial terminals
+# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
+ttyu0	"/usr/libexec/getty std.9600"	xterm	on secure
+ttyd1	"/usr/libexec/getty std.9600"	dialup	off secure
+ttyd2	"/usr/libexec/getty std.9600"	dialup	off secure
+ttyd3	"/usr/libexec/getty std.9600"	dialup	off secure
+# Dumb console
+dcons	"/usr/libexec/getty std.9600"	vt100	off secure
+# Pseudo terminals
+ttyp0	none			network
+ttyp1	none			network
+ttyp2	none			network
+ttyp3	none			network
+ttyp4	none			network
+ttyp5	none			network
+ttyp6	none			network
+ttyp7	none			network
+ttyp8	none			network
+ttyp9	none			network
+ttypa	none			network
+ttypb	none			network
+ttypc	none			network
+ttypd	none			network
+ttype	none			network
+ttypf	none			network
+ttypg	none			network
+ttyph	none			network
+ttypi	none			network
+ttypj	none			network
+ttypk	none			network
+ttypl	none			network
+ttypm	none			network
+ttypn	none			network
+ttypo	none			network
+ttypp	none			network
+ttypq	none			network
+ttypr	none			network
+ttyps	none			network
+ttypt	none			network
+ttypu	none			network
+ttypv	none			network
+ttyq0	none			network
+ttyq1	none			network
+ttyq2	none			network
+ttyq3	none			network
+ttyq4	none			network
+ttyq5	none			network
+ttyq6	none			network
+ttyq7	none			network
+ttyq8	none			network
+ttyq9	none			network
+ttyqa	none			network
+ttyqb	none			network
+ttyqc	none			network
+ttyqd	none			network
+ttyqe	none			network
+ttyqf	none			network
+ttyqg	none			network
+ttyqh	none			network
+ttyqi	none			network
+ttyqj	none			network
+ttyqk	none			network
+ttyql	none			network
+ttyqm	none			network
+ttyqn	none			network
+ttyqo	none			network
+ttyqp	none			network
+ttyqq	none			network
+ttyqr	none			network
+ttyqs	none			network
+ttyqt	none			network
+ttyqu	none			network
+ttyqv	none			network
+ttyr0	none			network
+ttyr1	none			network
+ttyr2	none			network
+ttyr3	none			network
+ttyr4	none			network
+ttyr5	none			network
+ttyr6	none			network
+ttyr7	none			network
+ttyr8	none			network
+ttyr9	none			network
+ttyra	none			network
+ttyrb	none			network
+ttyrc	none			network
+ttyrd	none			network
+ttyre	none			network
+ttyrf	none			network
+ttyrg	none			network
+ttyrh	none			network
+ttyri	none			network
+ttyrj	none			network
+ttyrk	none			network
+ttyrl	none			network
+ttyrm	none			network
+ttyrn	none			network
+ttyro	none			network
+ttyrp	none			network
+ttyrq	none			network
+ttyrr	none			network
+ttyrs	none			network
+ttyrt	none			network
+ttyru	none			network
+ttyrv	none			network
+ttys0	none			network
+ttys1	none			network
+ttys2	none			network
+ttys3	none			network
+ttys4	none			network
+ttys5	none			network
+ttys6	none			network
+ttys7	none			network
+ttys8	none			network
+ttys9	none			network
+ttysa	none			network
+ttysb	none			network
+ttysc	none			network
+ttysd	none			network
+ttyse	none			network
+ttysf	none			network
+ttysg	none			network
+ttysh	none			network
+ttysi	none			network
+ttysj	none			network
+ttysk	none			network
+ttysl	none			network
+ttysm	none			network
+ttysn	none			network
+ttyso	none			network
+ttysp	none			network
+ttysq	none			network
+ttysr	none			network
+ttyss	none			network
+ttyst	none			network
+ttysu	none			network
+ttysv	none			network
+ttyP0	none			network
+ttyP1	none			network
+ttyP2	none			network
+ttyP3	none			network
+ttyP4	none			network
+ttyP5	none			network
+ttyP6	none			network
+ttyP7	none			network
+ttyP8	none			network
+ttyP9	none			network
+ttyPa	none			network
+ttyPb	none			network
+ttyPc	none			network
+ttyPd	none			network
+ttyPe	none			network
+ttyPf	none			network
+ttyPg	none			network
+ttyPh	none			network
+ttyPi	none			network
+ttyPj	none			network
+ttyPk	none			network
+ttyPl	none			network
+ttyPm	none			network
+ttyPn	none			network
+ttyPo	none			network
+ttyPp	none			network
+ttyPq	none			network
+ttyPr	none			network
+ttyPs	none			network
+ttyPt	none			network
+ttyPu	none			network
+ttyPv	none			network
+ttyQ0	none			network
+ttyQ1	none			network
+ttyQ2	none			network
+ttyQ3	none			network
+ttyQ4	none			network
+ttyQ5	none			network
+ttyQ6	none			network
+ttyQ7	none			network
+ttyQ8	none			network
+ttyQ9	none			network
+ttyQa	none			network
+ttyQb	none			network
+ttyQc	none			network
+ttyQd	none			network
+ttyQe	none			network
+ttyQf	none			network
+ttyQg	none			network
+ttyQh	none			network
+ttyQi	none			network
+ttyQj	none			network
+ttyQk	none			network
+ttyQl	none			network
+ttyQm	none			network
+ttyQn	none			network
+ttyQo	none			network
+ttyQp	none			network
+ttyQq	none			network
+ttyQr	none			network
+ttyQs	none			network
+ttyQt	none			network
+ttyQu	none			network
+ttyQv	none			network
+ttyR0	none			network
+ttyR1	none			network
+ttyR2	none			network
+ttyR3	none			network
+ttyR4	none			network
+ttyR5	none			network
+ttyR6	none			network
+ttyR7	none			network
+ttyR8	none			network
+ttyR9	none			network
+ttyRa	none			network
+ttyRb	none			network
+ttyRc	none			network
+ttyRd	none			network
+ttyRe	none			network
+ttyRf	none			network
+ttyRg	none			network
+ttyRh	none			network
+ttyRi	none			network
+ttyRj	none			network
+ttyRk	none			network
+ttyRl	none			network
+ttyRm	none			network
+ttyRn	none			network
+ttyRo	none			network
+ttyRp	none			network
+ttyRq	none			network
+ttyRr	none			network
+ttyRs	none			network
+ttyRt	none			network
+ttyRu	none			network
+ttyRv	none			network
+ttyS0	none			network
+ttyS1	none			network
+ttyS2	none			network
+ttyS3	none			network
+ttyS4	none			network
+ttyS5	none			network
+ttyS6	none			network
+ttyS7	none			network
+ttyS8	none			network
+ttyS9	none			network
+ttySa	none			network
+ttySb	none			network
+ttySc	none			network
+ttySd	none			network
+ttySe	none			network
+ttySf	none			network
+ttySg	none			network
+ttySh	none			network
+ttySi	none			network
+ttySj	none			network
+ttySk	none			network
+ttySl	none			network
+ttySm	none			network
+ttySn	none			network
+ttySo	none			network
+ttySp	none			network
+ttySq	none			network
+ttySr	none			network
+ttySs	none			network
+ttySt	none			network
+ttySu	none			network
+ttySv	none			network
+ttyl0	none			network
+ttyl1	none			network
+ttyl2	none			network
+ttyl3	none			network
+ttyl4	none			network
+ttyl5	none			network
+ttyl6	none			network
+ttyl7	none			network
+ttyl8	none			network
+ttyl9	none			network
+ttyla	none			network
+ttylb	none			network
+ttylc	none			network
+ttyld	none			network
+ttyle	none			network
+ttylf	none			network
+ttylg	none			network
+ttylh	none			network
+ttyli	none			network
+ttylj	none			network
+ttylk	none			network
+ttyll	none			network
+ttylm	none			network
+ttyln	none			network
+ttylo	none			network
+ttylp	none			network
+ttylq	none			network
+ttylr	none			network
+ttyls	none			network
+ttylt	none			network
+ttylu	none			network
+ttylv	none			network
+ttym0	none			network
+ttym1	none			network
+ttym2	none			network
+ttym3	none			network
+ttym4	none			network
+ttym5	none			network
+ttym6	none			network
+ttym7	none			network
+ttym8	none			network
+ttym9	none			network
+ttyma	none			network
+ttymb	none			network
+ttymc	none			network
+ttymd	none			network
+ttyme	none			network
+ttymf	none			network
+ttymg	none			network
+ttymh	none			network
+ttymi	none			network
+ttymj	none			network
+ttymk	none			network
+ttyml	none			network
+ttymm	none			network
+ttymn	none			network
+ttymo	none			network
+ttymp	none			network
+ttymq	none			network
+ttymr	none			network
+ttyms	none			network
+ttymt	none			network
+ttymu	none			network
+ttymv	none			network
+ttyn0	none			network
+ttyn1	none			network
+ttyn2	none			network
+ttyn3	none			network
+ttyn4	none			network
+ttyn5	none			network
+ttyn6	none			network
+ttyn7	none			network
+ttyn8	none			network
+ttyn9	none			network
+ttyna	none			network
+ttynb	none			network
+ttync	none			network
+ttynd	none			network
+ttyne	none			network
+ttynf	none			network
+ttyng	none			network
+ttynh	none			network
+ttyni	none			network
+ttynj	none			network
+ttynk	none			network
+ttynl	none			network
+ttynm	none			network
+ttynn	none			network
+ttyno	none			network
+ttynp	none			network
+ttynq	none			network
+ttynr	none			network
+ttyns	none			network
+ttynt	none			network
+ttynu	none			network
+ttynv	none			network
+ttyo0	none			network
+ttyo1	none			network
+ttyo2	none			network
+ttyo3	none			network
+ttyo4	none			network
+ttyo5	none			network
+ttyo6	none			network
+ttyo7	none			network
+ttyo8	none			network
+ttyo9	none			network
+ttyoa	none			network
+ttyob	none			network
+ttyoc	none			network
+ttyod	none			network
+ttyoe	none			network
+ttyof	none			network
+ttyog	none			network
+ttyoh	none			network
+ttyoi	none			network
+ttyoj	none			network
+ttyok	none			network
+ttyol	none			network
+ttyom	none			network
+ttyon	none			network
+ttyoo	none			network
+ttyop	none			network
+ttyoq	none			network
+ttyor	none			network
+ttyos	none			network
+ttyot	none			network
+ttyou	none			network
+ttyov	none			network
+ttyL0	none			network
+ttyL1	none			network
+ttyL2	none			network
+ttyL3	none			network
+ttyL4	none			network
+ttyL5	none			network
+ttyL6	none			network
+ttyL7	none			network
+ttyL8	none			network
+ttyL9	none			network
+ttyLa	none			network
+ttyLb	none			network
+ttyLc	none			network
+ttyLd	none			network
+ttyLe	none			network
+ttyLf	none			network
+ttyLg	none			network
+ttyLh	none			network
+ttyLi	none			network
+ttyLj	none			network
+ttyLk	none			network
+ttyLl	none			network
+ttyLm	none			network
+ttyLn	none			network
+ttyLo	none			network
+ttyLp	none			network
+ttyLq	none			network
+ttyLr	none			network
+ttyLs	none			network
+ttyLt	none			network
+ttyLu	none			network
+ttyLv	none			network
+ttyM0	none			network
+ttyM1	none			network
+ttyM2	none			network
+ttyM3	none			network
+ttyM4	none			network
+ttyM5	none			network
+ttyM6	none			network
+ttyM7	none			network
+ttyM8	none			network
+ttyM9	none			network
+ttyMa	none			network
+ttyMb	none			network
+ttyMc	none			network
+ttyMd	none			network
+ttyMe	none			network
+ttyMf	none			network
+ttyMg	none			network
+ttyMh	none			network
+ttyMi	none			network
+ttyMj	none			network
+ttyMk	none			network
+ttyMl	none			network
+ttyMm	none			network
+ttyMn	none			network
+ttyMo	none			network
+ttyMp	none			network
+ttyMq	none			network
+ttyMr	none			network
+ttyMs	none			network
+ttyMt	none			network
+ttyMu	none			network
+ttyMv	none			network
+ttyN0	none			network
+ttyN1	none			network
+ttyN2	none			network
+ttyN3	none			network
+ttyN4	none			network
+ttyN5	none			network
+ttyN6	none			network
+ttyN7	none			network
+ttyN8	none			network
+ttyN9	none			network
+ttyNa	none			network
+ttyNb	none			network
+ttyNc	none			network
+ttyNd	none			network
+ttyNe	none			network
+ttyNf	none			network
+ttyNg	none			network
+ttyNh	none			network
+ttyNi	none			network
+ttyNj	none			network
+ttyNk	none			network
+ttyNl	none			network
+ttyNm	none			network
+ttyNn	none			network
+ttyNo	none			network
+ttyNp	none			network
+ttyNq	none			network
+ttyNr	none			network
+ttyNs	none			network
+ttyNt	none			network
+ttyNu	none			network
+ttyNv	none			network
+ttyO0	none			network
+ttyO1	none			network
+ttyO2	none			network
+ttyO3	none			network
+ttyO4	none			network
+ttyO5	none			network
+ttyO6	none			network
+ttyO7	none			network
+ttyO8	none			network
+ttyO9	none			network
+ttyOa	none			network
+ttyOb	none			network
+ttyOc	none			network
+ttyOd	none			network
+ttyOe	none			network
+ttyOf	none			network
+ttyOg	none			network
+ttyOh	none			network
+ttyOi	none			network
+ttyOj	none			network
+ttyOk	none			network
+ttyOl	none			network
+ttyOm	none			network
+ttyOn	none			network
+ttyOo	none			network
+ttyOp	none			network
+ttyOq	none			network
+ttyOr	none			network
+ttyOs	none			network
+ttyOt	none			network
+ttyOu	none			network
+ttyOv	none			network
diff --git a/tools/tools/nanobsd/pcengines/Files/root/.cshrc b/tools/tools/nanobsd/pcengines/Files/root/.cshrc
new file mode 100644
index 00000000000..313af8e2507
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/Files/root/.cshrc
@@ -0,0 +1,35 @@
+# $FreeBSD$
+#
+# .cshrc - csh resource script, read at beginning of execution by each shell
+#
+# see also csh(1), environ(7).
+#
+
+alias h		history 25
+alias j		jobs -l
+alias la	ls -a
+alias lf	ls -FA
+alias ll	ls -lA
+
+# A righteous umask
+umask 22
+
+set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin /usr/X11R6/bin $HOME/bin)
+
+setenv	EDITOR	vi
+setenv	PAGER	more
+setenv	BLOCKSIZE	K
+
+if ($?prompt) then
+	# An interactive shell -- set some stuff up
+	set prompt = "`/bin/hostname -s`# "
+	set filec
+	set history = 100
+	set savehist = 100
+	set mail = (/var/mail/$USER)
+	if ( $?tcsh ) then
+		bindkey "^W" backward-delete-word
+		bindkey -k up history-search-backward
+		bindkey -k down history-search-forward
+	endif
+endif
diff --git a/tools/tools/nanobsd/pcengines/Files/root/.k5login b/tools/tools/nanobsd/pcengines/Files/root/.k5login
new file mode 100644
index 00000000000..e01b9417fdb
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/Files/root/.k5login
@@ -0,0 +1,4 @@
+# $FreeBSD$
+#
+# user1/root@YOUR.REALM.WHEREVER
+# user2/root@YOUR.REALM.WHEREVER
diff --git a/tools/tools/nanobsd/pcengines/Files/root/.login b/tools/tools/nanobsd/pcengines/Files/root/.login
new file mode 100644
index 00000000000..3032ef97c76
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/Files/root/.login
@@ -0,0 +1,9 @@
+# $FreeBSD$
+#
+# .login - csh login script, read by login shell, after `.cshrc' at login.
+#
+# see also csh(1), environ(7).
+#
+
+# Uncomment to display a random cookie each login:
+# [ -x /usr/games/fortune ] && /usr/games/fortune -s
diff --git a/tools/tools/nanobsd/pcengines/Files/root/change_password b/tools/tools/nanobsd/pcengines/Files/root/change_password
new file mode 100644
index 00000000000..daf4c8ca0e8
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/Files/root/change_password
@@ -0,0 +1,40 @@
+#!/bin/sh
+#
+# Copyright (c) 2004-2005 Poul-Henning Kamp.
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+#
+# $FreeBSD$
+#
+
+set -e
+
+passwd root
+
+cfgslice=`grep '/cfg' /etc/fstab | cut -d \  -f 1`
+
+trap "umount /cfg" 1 2 15 EXIT
+mount /cfg
+cp /etc/master.passwd /etc/passwd /etc/pwd.db /etc/spwd.db /etc/group /cfg
+umount /cfg
+trap 1 2 15 EXIT
diff --git a/tools/tools/nanobsd/pcengines/Files/root/save_cfg b/tools/tools/nanobsd/pcengines/Files/root/save_cfg
new file mode 100644
index 00000000000..19f11950c0e
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/Files/root/save_cfg
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# Copyright (c) 2006 Mathieu Arnold
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+#
+# $FreeBSD$
+#
+
+set -e
+
+trap "umount /cfg" 1 2 15 EXIT
+mount /cfg
+(
+cd /cfg
+for i in "$@" `find * -type f`
+do
+        cmp -s /etc/$i /cfg/$i || cp -pfv /etc/$i /cfg/$i
+done
+)
+umount /cfg
+trap 1 2 15 EXIT
diff --git a/tools/tools/nanobsd/pcengines/Files/root/save_sshkeys b/tools/tools/nanobsd/pcengines/Files/root/save_sshkeys
new file mode 100644
index 00000000000..03fccf4ac0a
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/Files/root/save_sshkeys
@@ -0,0 +1,40 @@
+#!/bin/sh
+#
+# Copyright (c) 2004-2005 Poul-Henning Kamp.
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+#
+# $FreeBSD$
+#
+
+set -e
+
+trap "umount /cfg" 1 2 15 EXIT
+mount /cfg
+mkdir -p /cfg/ssh
+(
+cd /etc/ssh
+cp ssh_host_* /cfg/ssh
+)
+umount /cfg
+trap 1 2 15 EXIT
diff --git a/tools/tools/nanobsd/pcengines/Files/root/updatep1 b/tools/tools/nanobsd/pcengines/Files/root/updatep1
new file mode 100644
index 00000000000..6b83de530a5
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/Files/root/updatep1
@@ -0,0 +1,54 @@
+#!/bin/sh
+#
+# Copyright (c) 2004-2005 Poul-Henning Kamp.
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+#
+# $FreeBSD$
+#
+# Script to update partition 1 on a NanoBSD system.
+#
+# usage:
+#	ssh somewhere cat image.s1 | sh updatep1
+#
+
+set -e
+
+. /etc/nanobsd.conf
+
+if mount | grep ${NANO_DRIVE}s1 > /dev/null ; then
+	echo "You are running partition 1 already"
+	echo "you probably want to use 'updatep2' instead"
+	exit 1
+fi
+
+# Blow away old system.
+dd if=/dev/zero of=/dev/${NANO_DRIVE}s1 bs=1m count=1 > /dev/null 2>&1
+
+# Copy in new system
+dd of=/dev/${NANO_DRIVE}s1 obs=64k
+
+# Check that it worked
+fsck_ffs -n /dev/${NANO_DRIVE}s1a
+
+gpart set -a active -i 1 ${NANO_DRIVE}
diff --git a/tools/tools/nanobsd/pcengines/Files/root/updatep2 b/tools/tools/nanobsd/pcengines/Files/root/updatep2
new file mode 100644
index 00000000000..fc5312be0c4
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/Files/root/updatep2
@@ -0,0 +1,61 @@
+#!/bin/sh
+#
+# Copyright (c) 2004-2005 Poul-Henning Kamp.
+# 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.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+#
+# $FreeBSD$
+#
+# Script to update partition 2 on a NanoBSD system.
+#
+# usage:
+#	ssh somewhere cat image.s1 | sh updatep2
+#
+
+set -e
+
+. /etc/nanobsd.conf
+
+if mount | grep ${NANO_DRIVE}s2 > /dev/null ; then
+	echo "You are running partition 2 already"
+	echo "you probably want to use 'updatep1' instead"
+	exit 1
+fi
+
+# Blow away old system.
+dd if=/dev/zero of=/dev/${NANO_DRIVE}s2 bs=1m count=1 > /dev/null 2>&1
+
+# Copy in new system
+dd of=/dev/${NANO_DRIVE}s2 obs=64k
+
+# Check that it worked
+fsck_ffs -n /dev/${NANO_DRIVE}s2a
+
+# Update the /etc/fstab
+trap "umount /mnt" 1 2 15 EXIT
+mount /dev/${NANO_DRIVE}s2a /mnt
+sed -i "" "s/${NANO_DRIVE}s1/${NANO_DRIVE}s2/" /mnt/conf/base/etc/fstab
+sed -i "" "s/${NANO_DRIVE}s1/${NANO_DRIVE}s2/" /mnt/etc/fstab
+umount /mnt
+trap 1 2 15 EXIT
+gpart set -a active -i 2 ${NANO_DRIVE}
diff --git a/tools/tools/nanobsd/pcengines/Files/usr/ports/.keepme b/tools/tools/nanobsd/pcengines/Files/usr/ports/.keepme
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tools/tools/nanobsd/pcengines/alix_dsk.conf b/tools/tools/nanobsd/pcengines/alix_dsk.conf
new file mode 100644
index 00000000000..559f6ab45d0
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/alix_dsk.conf
@@ -0,0 +1,29 @@
+#
+# $FreeBSD$
+#
+
+NANO_KERNEL=ALIX_DSK
+NANO_NAME=alix_dsk
+NANO_ARCH=i386
+TARGET_ARCH=i386; export TARGET_ARCH
+#TARGET_CPUTYPE=i386; export TARGET_CPUTYPE
+#CONF_BUILD="TARGET_ARCH=i386 TARGET_CPUTYPE=i386"
+#CONF_INSTALL="TARGET_ARCH=i386 TARGET_CPUTYPE=i386"
+#CONF_BUILD="TARGET_ARCH=i386"
+#CONF_INSTALL="TARGET_ARCH=i386"
+# Phys C/H/S 7964/16/63
+# Log C/H/S 995/128/63
+NANO_MEDIASIZE="8027712"
+NANO_SECTS="63"
+#PHYS
+NANO_HEADS="16"
+#LOG
+#NANO_HEADS="64"
+NANO_IMAGES="2"
+# Initialize the second slice =1, or not =0
+NANO_INIT_IMG2="0"
+#NANO_BOOT0CFG="-o packet,noupdate -s 1 -m 3"
+NANO_BOOT0CFG="-o packet,update,nosetdrv -s 1 -m 3"
+NANO_DRIVE=ad0
+
+. common.conf
diff --git a/tools/tools/nanobsd/pcengines/alix_nfs.conf b/tools/tools/nanobsd/pcengines/alix_nfs.conf
new file mode 100644
index 00000000000..745fd4bc2e1
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/alix_nfs.conf
@@ -0,0 +1,26 @@
+#
+# $FreeBSD$
+#
+
+NANO_KERNEL=ALIX_NFS
+NANO_NAME=alix_nfs
+NANO_ARCH=i386
+TARGET_ARCH=i386; export TARGET_ARCH
+#TARGET_CPUTYPE=i386; export TARGET_CPUTYPE
+#CONF_BUILD="TARGET_ARCH=i386 TARGET_CPUTYPE=i386"
+#CONF_INSTALL="TARGET_ARCH=i386 TARGET_CPUTYPE=i386"
+#CONF_BUILD="TARGET_ARCH=i386"
+#CONF_INSTALL="TARGET_ARCH=i386"
+# Phys C/H/S 7964/16/63
+# Log C/H/S 995/128/63
+NANO_MEDIASIZE="8027712"
+NANO_SECTS="63"
+#PHYS
+NANO_HEADS="16"
+#LOG
+#NANO_HEADS="64"
+NANO_IMAGES="2"
+NANO_INIT_IMG2="0"
+NANO_BOOT0CFG="-o nopacket,noupdate -s 1 -m 3"
+
+. common.conf
diff --git a/tools/tools/nanobsd/pcengines/build.sh b/tools/tools/nanobsd/pcengines/build.sh
new file mode 100755
index 00000000000..525b7ba3839
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/build.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+if [ -z "${1}" -o \! -f "${1}" ]; then
+  echo "Usage: $0 cfg_file [-bhiknw]"
+  echo "-i : skip image build"
+  echo "-w : skip buildworld step"
+  echo "-k : skip buildkernel step"
+  echo "-b : skip buildworld and buildkernel step"
+  exit
+fi
+
+CFG="${1}"
+shift;
+
+sh ../nanobsd.sh $* -c ${CFG}
diff --git a/tools/tools/nanobsd/pcengines/common.conf b/tools/tools/nanobsd/pcengines/common.conf
new file mode 100644
index 00000000000..cfbe8d69e51
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/common.conf
@@ -0,0 +1,83 @@
+#
+# $FreeBSD$
+#
+
+NANO_TOOLS=`pwd`
+NANO_PACKAGE_DIR=`pwd`/Pkg
+#NANO_RAM_TMPVARSIZE=20480
+#NANO_RAM_TMPVARSIZE=30720
+NANO_RAM_TMPVARSIZE=40960
+NANO_PMAKE="make -j 8"
+
+NANO_MD_BACKING="swap"
+#NANO_MAKEFS="makefs \
+#	-o bsize=4096,fsize=512,density=8192,optimization=space"
+#export NANO_MAKEFS
+
+# Options to put in make.conf during buildworld only
+CONF_BUILD='
+NO_CLEAN=YES
+'
+# Options to put in make.conf during installworld only                          
+CONF_INSTALL='
+'
+# Options to put in make.conf during both build- & installworld.                
+CONF_WORLD='                                                                    
+#TARGET_ARCH=i386
+CFLAGS=-O -pipe                                                                
+WITHOUT_ACPI=
+MODULES_OVERRIDE=netgraph rc4
+BOOT_PXELDR_PROBE_KEYBOARD=1
+BOOT_PXELDR_ALWAYS_SERIAL=1
+BOOT_COMCONSOLE_SPEED=9600
+'
+
+customize_cmd cust_comconsole
+customize_cmd cust_allow_ssh_root
+customize_cmd cust_install_files
+cust_install_machine_files() (
+  MACHINE_DIR="${NANO_TOOLS}/Files.${NANO_NAME}"
+  if [ -d "${MACHINE_DIR}" ]; then
+    cd ${MACHINE_DIR}
+    find . -print | grep -Ev '/(CVS|\.svn)' | cpio -dumpv ${NANO_WORLDDIR}
+  else
+    echo "${MACHINE_DIR} not found, skipping step"
+  fi
+)
+customize_cmd cust_install_machine_files
+
+cust_ld32_cfg () (
+  cd ${NANO_WORLDDIR}/libexec
+  if [ \! -f ld-elf32.so.1 ]; then
+    ln -s ld-elf.so.1 ld-elf32.so.1
+  fi
+)
+customize_cmd cust_ld32_cfg
+
+cust_boot_cfg () (
+  cd ${NANO_WORLDDIR}
+  echo "-S9600 -h" > boot.config
+  echo "console=\"comconsole\"" > boot/loader.conf
+  echo "comconsole_speed=\"9600\"" >> boot/loader.conf
+  echo "hint.acpi.0.disabled=\"1\"" >> boot/loader.conf
+)
+customize_cmd cust_boot_cfg
+customize_cmd cust_pkg
+cust_etc_cfg () (
+  cd ${NANO_WORLDDIR}
+  mkdir -pv z/scratch
+  echo "fs:/usr/ports /usr/ports nfs rw,noauto,noatime,bg,soft,intr,nfsv3 0 0" >> etc/fstab
+  echo "fs:/mnt/Backup /mnt/Backup nfs rw,noauto,noatime,bg,soft,intr,nfsv3 0 0" >> etc/fstab
+  echo "fs:/mnt/Ablage /mnt/Ablage nfs rw,noauto,noatime,bg,soft,intr,nfsv3 0 0" >> etc/fstab
+  echo "/dev/ad1s1a /z/scratch ufs rw,noauto,noatime 0 0" >> etc/fstab
+)
+customize_cmd cust_etc_cfg
+
+last_orders () (
+        pprint 2 "last orders"
+        (
+        cd ${NANO_WORLDDIR}
+        touch conf/default/etc/.keepme
+        touch conf/default/var/.keepme
+        )
+)
diff --git a/tools/tools/nanobsd/pcengines/test.sh b/tools/tools/nanobsd/pcengines/test.sh
new file mode 100755
index 00000000000..9997c81f857
--- /dev/null
+++ b/tools/tools/nanobsd/pcengines/test.sh
@@ -0,0 +1,59 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+_run () {
+  case "$1" in
+  "alix_dsk")
+    ARG="-cpu pentium"
+    ARG="$ARG -hda /usr/obj/nanobsd.alix_dsk/_.disk.full -boot c"
+    ARG="$ARG -hdb /z/scratch/scratch"
+    ARG="$ARG -net nic,model=e1000"
+    ARG="$ARG -net tap,ifname=tap0,script=no,downscript=no"
+    ARG="$ARG -m 1024 -k de -localtime -nographic"
+    break
+    ;;
+  "alix_nfs")
+    ARG="-cpu pentium"
+    ARG="$ARG -hda /usr/obj/nanobsd.alix_nfs/_.disk.full -boot c"
+    ARG="$ARG -hdb /z/scratch/scratch"
+    ARG="$ARG -net nic,model=e1000"
+    ARG="$ARG -net tap,ifname=tap0,script=no,downscript=no"
+    ARG="$ARG -m 1024 -k de -localtime -nographic"
+    break
+    ;;
+
+  esac
+  qemu-system-x86_64 -kernel-kqemu $ARG
+}
+
+_init () {
+  kldstat -n kqemu || kldload kqemu
+  kldstat -n aio || kldload aio
+  kldstat -n if_tap || kldload if_tap
+  kldstat -n if_bridge || kldload if_bridge
+  sysctl net.link.tap.up_on_open=1
+  ifconfig bridge0 down destroy
+  ifconfig tap0 down destroy
+  ifconfig tap0 create up
+  ifconfig bridge0 create
+  ifconfig bridge0 addm nfe0 addm tap0 up
+}
+
+_ifup () {
+  sleep 2;
+  ifconfig bridge0 -learn nfe0
+  ifconfig tap0 up
+  ifconfig bridge0 up
+}
+
+_clear () {
+  ifconfig bridge0 down destroy
+  ifconfig tap0 down destroy
+}
+
+_init
+(_ifup) &
+_run "$1"
+_clear
diff --git a/tools/tools/nanobsd/rescue/Files/etc/ttys b/tools/tools/nanobsd/rescue/Files/etc/ttys
index c62941fe9e7..8e72947a73c 100644
--- a/tools/tools/nanobsd/rescue/Files/etc/ttys
+++ b/tools/tools/nanobsd/rescue/Files/etc/ttys
@@ -15,7 +15,7 @@
 #
 # type The initial terminal type for this port.  For hardwired
 #      terminal lines, this will contain the type of terminal used.
-#      For virtual consoles, the correct type is typically cons25, but
+#      For virtual consoles, the correct type is typically xterm, but
 #      vt220 will work better if you need interoperability with other
 #      systems like Solaris or GNU/Linux.
 #      Other common values include network for network connections on
@@ -32,15 +32,15 @@
 # when going to single-user mode.
 console	none				unknown	off secure
 #
-ttyv0	"/usr/libexec/getty Pc"		cons25	on  secure
+ttyv0	"/usr/libexec/getty Pc"		xterm	on  secure
 # Virtual terminals
-ttyv1	"/usr/libexec/getty Pc"		cons25	on  secure
-ttyv2	"/usr/libexec/getty Pc"		cons25	on  secure
-ttyv3	"/usr/libexec/getty Pc"		cons25	off  secure
-ttyv4	"/usr/libexec/getty Pc"		cons25	off  secure
-ttyv5	"/usr/libexec/getty Pc"		cons25	off  secure
-ttyv6	"/usr/libexec/getty Pc"		cons25	off  secure
-ttyv7	"/usr/libexec/getty Pc"		cons25	off  secure
+ttyv1	"/usr/libexec/getty Pc"		xterm	on  secure
+ttyv2	"/usr/libexec/getty Pc"		xterm	on  secure
+ttyv3	"/usr/libexec/getty Pc"		xterm	off secure
+ttyv4	"/usr/libexec/getty Pc"		xterm	off secure
+ttyv5	"/usr/libexec/getty Pc"		xterm	off secure
+ttyv6	"/usr/libexec/getty Pc"		xterm	off secure
+ttyv7	"/usr/libexec/getty Pc"		xterm	off secure
 ttyv8	"/usr/local/bin/xdm -nodaemon"	xterm	off secure
 # Serial terminals
 # The 'dialup' keyword identifies dialin lines to login, fingerd etc.
diff --git a/tools/tools/ncpus/acpi.c b/tools/tools/ncpus/acpi.c
index 88ec6fc2ed4..5366dc85abe 100644
--- a/tools/tools/ncpus/acpi.c
+++ b/tools/tools/ncpus/acpi.c
@@ -247,13 +247,13 @@ static const char *
 devstate(devinfo_state_t state)
 {
 	switch (state) {
-	case DIS_NOTPRESENT:
+	case DS_NOTPRESENT:
 		return "not-present";
-	case DIS_ALIVE:
+	case DS_ALIVE:
 		return "alive";
-	case DIS_ATTACHED:
+	case DS_ATTACHED:
 		return "attached";
-	case DIS_BUSY:
+	case DS_BUSY:
 		return "busy";
 	default:
 		return "unknown-state";
@@ -266,8 +266,8 @@ acpi0_check(struct devinfo_dev *dd, void *arg)
 	printf("%s: %s %s\n", __func__, dd->dd_name, devstate(dd->dd_state));
 	/* NB: device must be present AND attached */
 	if (strcmp(dd->dd_name, "acpi0") == 0)
-		return (dd->dd_state == DIS_ATTACHED ||
-			dd->dd_state == DIS_BUSY);
+		return (dd->dd_state == DS_ATTACHED ||
+			dd->dd_state == DS_BUSY);
 	return devinfo_foreach_device_child(dd, acpi0_check, arg);
 }
 
diff --git a/tools/tools/notescheck/Makefile b/tools/tools/notescheck/Makefile
new file mode 100644
index 00000000000..8899a0abd96
--- /dev/null
+++ b/tools/tools/notescheck/Makefile
@@ -0,0 +1,5 @@
+# $FreeBSD$
+
+SCRIPTS=	notescheck.py
+
+.include 
diff --git a/tools/tools/notescheck/notescheck.py b/tools/tools/notescheck/notescheck.py
new file mode 100644
index 00000000000..5aae2969b90
--- /dev/null
+++ b/tools/tools/notescheck/notescheck.py
@@ -0,0 +1,361 @@
+#!/usr/local/bin/python
+#
+# This script analyzes sys/conf/files*, sys/conf/options*,
+# sys/conf/NOTES, and sys/*/conf/NOTES and checks for inconsistencies
+# such as options or devices that are not specified in any NOTES files
+# or MI devices specified in MD NOTES files.
+#
+# $FreeBSD$
+
+import glob
+import os.path
+import sys
+
+def usage():
+    print >>sys.stderr, "notescheck "
+    print >>sys.stderr
+    print >>sys.stderr, "Where 'path' is a path to a kernel source tree."
+
+# These files are used to determine if a path is a valid kernel source tree.
+requiredfiles = ['conf/files', 'conf/options', 'conf/NOTES']
+
+# This special platform string is used for managing MI options.
+global_platform = 'global'
+
+# This is a global string that represents the current file and line
+# being parsed.
+location = ""
+
+# Format the contents of a set into a sorted, comma-separated string
+def format_set(set):
+    l = []
+    for item in set:
+        l.append(item)
+    if len(l) == 0:
+        return "(empty)"
+    l.sort()
+    if len(l) == 2:
+        return "%s and %s" % (l[0], l[1])
+    s = "%s" % (l[0])
+    if len(l) == 1:
+        return s
+    for item in l[1:-1]:
+        s = "%s, %s" % (s, item)
+    s = "%s, and %s" % (s, l[-1])
+    return s
+
+# This class actually covers both options and devices.  For each named
+# option we maintain two different lists.  One is the list of
+# platforms that the option was defined in via an options or files
+# file.  The other is the list of platforms that the option was tested
+# in via a NOTES file.  All options are stored as lowercase since
+# config(8) treats the names as case-insensitive.
+class Option:
+    def __init__(self, name):
+        self.name = name
+        self.type = None
+        self.defines = set()
+        self.tests = set()
+
+    def set_type(self, type):
+        if self.type is None:
+            self.type = type
+            self.type_location = location
+        elif self.type != type:
+            print "WARN: Attempt to change type of %s from %s to %s%s" % \
+                (self.name, self.type, type, location)
+            print "      Previous type set%s" % (self.type_location)
+
+    def add_define(self, platform):
+        self.defines.add(platform)
+
+    def add_test(self, platform):
+        self.tests.add(platform)
+
+    def title(self):
+        if self.type == 'option':
+            return 'option %s' % (self.name.upper())
+        if self.type == None:
+            return self.name
+        return '%s %s' % (self.type, self.name)
+
+    def warn(self):
+        # If the defined and tested sets are equal, then this option
+        # is ok.
+        if self.defines == self.tests:
+            return
+
+        # If the tested set contains the global platform, then this
+        # option is ok.
+        if global_platform in self.tests:
+            return
+
+        if global_platform in self.defines:
+            # If the device is defined globally ans is never tested, whine.
+            if len(self.tests) == 0:
+                print 'WARN: %s is defined globally but never tested' % \
+                    (self.title())
+                return
+            
+            # If the device is defined globally and is tested on
+            # multiple MD platforms, then it is ok.  This often occurs
+            # for drivers that are shared across multiple, but not
+            # all, platforms (e.g. acpi, agp).
+            if len(self.tests) > 1:
+                return
+
+            # If a device is defined globally but is only tested on a
+            # single MD platform, then whine about this.
+            print 'WARN: %s is defined globally but only tested in %s NOTES' % \
+                (self.title(), format_set(self.tests))
+            return
+
+        # If an option or device is never tested, whine.
+        if len(self.tests) == 0:
+            print 'WARN: %s is defined in %s but never tested' % \
+                (self.title(), format_set(self.defines))
+            return
+
+        # The set of MD platforms where this option is defined, but not tested.
+        notest = self.defines - self.tests
+        if len(notest) != 0:
+            print 'WARN: %s is not tested in %s NOTES' % \
+                (self.title(), format_set(notest))
+            return
+
+        print 'ERROR: bad state for %s: defined in %s, tested in %s' % \
+            (self.title(), format_set(self.defines), format_set(self.tests))
+
+# This class maintains a dictionary of options keyed by name.
+class Options:
+    def __init__(self):
+        self.options = {}
+
+    # Look up the object for a given option by name.  If the option
+    # doesn't already exist, then add a new option.
+    def find(self, name):
+        name = name.lower()
+        if name in self.options:
+            return self.options[name]
+        option = Option(name)
+        self.options[name] = option
+        return option
+
+    # Warn about inconsistencies
+    def warn(self):
+        keys = self.options.keys()
+        keys.sort()
+        for key in keys:
+            option = self.options[key]
+            option.warn()
+
+# Global map of options
+options = Options()
+
+# Look for MD NOTES files to build our list of platforms.  We ignore
+# platforms that do not have a NOTES file.
+def find_platforms(tree):
+    platforms = []
+    for file in glob.glob(tree + '*/conf/NOTES'):
+        if not file.startswith(tree):
+            print >>sys.stderr, "Bad MD NOTES file %s" %(file)
+            sys.exit(1)
+        platforms.append(file[len(tree):].split('/')[0])
+    if global_platform in platforms:
+        print >>sys.stderr, "Found MD NOTES file for global platform"
+        sys.exit(1)
+    return platforms
+
+# Parse a file that has escaped newlines.  Any escaped newlines are
+# coalesced and each logical line is passed to the callback function.
+# This also skips blank lines and comments.
+def parse_file(file, callback, *args):
+    global location
+
+    f = open(file)
+    current = None
+    i = 0
+    for line in f:
+        # Update parsing location
+        i = i + 1
+        location = ' at %s:%d' % (file, i)
+
+        # Trim the newline
+        line = line[:-1]
+
+        # If the previous line had an escaped newline, append this
+        # line to that.
+        if current is not None:
+            line = current + line
+            current = None
+
+        # If the line ends in a '\', set current to the line (minus
+        # the escape) and continue.
+        if len(line) > 0 and line[-1] == '\\':
+            current = line[:-1]
+            continue
+
+        # Skip blank lines or lines with only whitespace
+        if len(line) == 0 or len(line.split()) == 0:
+            continue
+
+        # Skip comment lines.  Any line whose first non-space
+        # character is a '#' is considered a comment.
+        if line.split()[0][0] == '#':
+            continue
+
+        # Invoke the callback on this line
+        callback(line, *args)
+    if current is not None:
+        callback(current, *args)
+
+    location = ""
+
+# Split a line into words on whitespace with the exception that quoted
+# strings are always treated as a single word.
+def tokenize(line):
+    if len(line) == 0:
+        return []
+
+    # First, split the line on quote characters.
+    groups = line.split('"')
+
+    # Ensure we have an even number of quotes.  The 'groups' array
+    # will contain 'number of quotes' + 1 entries, so it should have
+    # an odd number of entries.
+    if len(groups) % 2 == 0:
+        print >>sys.stderr, "Failed to tokenize: %s%s" (line, location)
+        return []
+
+    # String split all the "odd" groups since they are not quoted strings.
+    quoted = False
+    words = []
+    for group in groups:
+        if quoted:
+            words.append(group)
+            quoted = False
+        else:
+            for word in group.split():
+                words.append(word)
+            quoted = True
+    return words
+
+# Parse a sys/conf/files* file adding defines for any options
+# encountered.  Note files does not differentiate between options and
+# devices.
+def parse_files_line(line, platform):
+    words = tokenize(line)
+
+    # Skip include lines.
+    if words[0] == 'include':
+        return
+
+    # Skip standard lines as they have no devices or options.
+    if words[1] == 'standard':
+        return
+
+    # Remaining lines better be optional or mandatory lines.
+    if words[1] != 'optional' and words[1] != 'mandatory':
+        print >>sys.stderr, "Invalid files line: %s%s" % (line, location)
+
+    # Drop the first two words and begin parsing keywords and devices.
+    skip = False
+    for word in words[2:]:
+        if skip:
+            skip = False
+            continue
+
+        # Skip keywords
+        if word == 'no-obj' or word == 'no-implicit-rule' or \
+                word == 'before-depend' or word == 'local' or \
+                word == 'no-depend' or word == 'profiling-routine' or \
+                word == 'nowerror':
+            continue
+
+        # Skip keywords and their following argument
+        if word == 'dependency' or word == 'clean' or \
+                word == 'compile-with' or word == 'warning':
+            skip = True
+            continue
+
+        # Ignore pipes
+        if word == '|':
+            continue
+
+        option = options.find(word)
+        option.add_define(platform)
+
+# Parse a sys/conf/options* file adding defines for any options
+# encountered.  Unlike a files file, options files only add options.
+def parse_options_line(line, platform):
+    # The first word is the option name.
+    name = line.split()[0]
+
+    # Ignore DEV_xxx options.  These are magic options that are
+    # aliases for 'device xxx'.
+    if name.startswith('DEV_'):
+        return
+
+    option = options.find(name)
+    option.add_define(platform)
+    option.set_type('option')
+
+# Parse a sys/conf/NOTES file adding tests for any options or devices
+# encountered.
+def parse_notes_line(line, platform):
+    words = line.split()
+
+    # Skip lines with just whitespace
+    if len(words) == 0:
+        return
+
+    if words[0] == 'device' or words[0] == 'devices':
+        option = options.find(words[1])
+        option.add_test(platform)
+        option.set_type('device')
+        return
+
+    if words[0] == 'option' or words[0] == 'options':
+        option = options.find(words[1].split('=')[0])
+        option.add_test(platform)
+        option.set_type('option')
+        return
+
+def main(argv=None):
+    if argv is None:
+        argv = sys.argv
+    if len(sys.argv) != 2:
+        usage()
+        return 2
+
+    # Ensure the path has a trailing '/'.
+    tree = sys.argv[1]
+    if tree[-1] != '/':
+        tree = tree + '/'
+    for file in requiredfiles:
+        if not os.path.exists(tree + file):
+            print>> sys.stderr, "Kernel source tree missing %s" % (file)
+            return 1
+    
+    platforms = find_platforms(tree)
+
+    # First, parse global files.
+    parse_file(tree + 'conf/files', parse_files_line, global_platform)
+    parse_file(tree + 'conf/options', parse_options_line, global_platform)
+    parse_file(tree + 'conf/NOTES', parse_notes_line, global_platform)
+
+    # Next, parse MD files.
+    for platform in platforms:
+        files_file = tree + 'conf/files.' + platform
+        if os.path.exists(files_file):
+            parse_file(files_file, parse_files_line, platform)
+        options_file = tree + 'conf/options.' + platform
+        if os.path.exists(options_file):
+            parse_file(options_file, parse_options_line, platform)
+        parse_file(tree + platform + '/conf/NOTES', parse_notes_line, platform)
+
+    options.warn()
+    return 0
+
+if __name__ == "__main__":
+    sys.exit(main())
diff --git a/tools/tools/sysbuild/sysbuild.sh b/tools/tools/sysbuild/sysbuild.sh
index c3689ab47c9..009973cca10 100644
--- a/tools/tools/sysbuild/sysbuild.sh
+++ b/tools/tools/sysbuild/sysbuild.sh
@@ -41,6 +41,18 @@ if [ `uname -m` = "i386" ] ; then
 	s,s3a,s2a,
 	'`
 
+	# Where our build-bits are to be found
+	FREEBSD_PART=`echo $TARGET_PART | sed 's/s[12]a/s3/'`
+elif [ `uname -m` = "amd64" ] ; then
+	TARGET_PART=`df / | sed '
+	1d
+	s/[    ].*//
+	s,/dev/,,
+	s,s1a,s3a,
+	s,s2a,s1a,
+	s,s3a,s2a,
+	'`
+
 	# Where our build-bits are to be found
 	FREEBSD_PART=`echo $TARGET_PART | sed 's/s[12]a/s3/'`
 else
@@ -162,7 +174,7 @@ ports_recurse() (
 		else
 			(
 			cd $d
-			ports_recurse `make -V _DEPEND_DIRS`
+			ports_recurse `make -V _DEPEND_DIRS ${PORTS_OPTS}`
 			)
 			echo $d >> /tmp/_.plist
 		fi
@@ -195,7 +207,7 @@ ports_build() (
 				cd /usr/ports
 				cd $p
 				set +e
-				make clean
+				make clean ${PORTS_OPTS}
 				if make install ${PORTS_OPTS} ; then
 					if [ "x${PKG_DIR}" != "x" ] ; then
 						make package ${PORTS_OPTS}
@@ -217,9 +229,11 @@ ports_prefetch() (
 	true > /tmp/_.plist
 	ports_recurse $PORTS_WE_WANT
 
+	true > /mnt/_.prefetch
 	# Now checksump/fetch them
 	for p in `cat /tmp/_.plist`
 	do
+		echo "Prefetching $p" >> /mnt/_.prefetch
 		b=`echo $p | tr / _`
 		(
 			cd $p
@@ -434,6 +448,7 @@ if [ "x${OBJ_PATH}" != "x" ] ; then
 fi
 
 log_it Wait for ports prefetch
+log_it "(Tail /mnt/_.prefetch for progress)"
 wait
 
 log_it Move filesystems
diff --git a/tools/tools/tinybsd/conf/wrap/etc/ttys b/tools/tools/tinybsd/conf/wrap/etc/ttys
index d20b7ebbd30..919bceaa340 100644
--- a/tools/tools/tinybsd/conf/wrap/etc/ttys
+++ b/tools/tools/tinybsd/conf/wrap/etc/ttys
@@ -14,7 +14,7 @@
 #
 # type The initial terminal type for this port.  For hardwired
 #      terminal lines, this will contain the type of terminal used.
-#      For virtual consoles, the correct type is typically cons25, but
+#      For virtual consoles, the correct type is typically xterm, but
 #      vt220 will work better if you need interoperability with other
 #      systems like Solaris or GNU/Linux.
 #      Other common values include network for network connections on
@@ -31,22 +31,22 @@
 # when going to single-user mode.
 console	none				unknown	off secure
 #
-ttyv0	"/usr/libexec/getty Pc"		cons25	off  secure
+ttyv0	"/usr/libexec/getty Pc"		xterm	off secure
 # Virtual terminals
-ttyv1	"/usr/libexec/getty Pc"		cons25	off  secure
-ttyv2	"/usr/libexec/getty Pc"		cons25	off  secure
-ttyv3	"/usr/libexec/getty Pc"		cons25	off  secure
-ttyv4	"/usr/libexec/getty Pc"		cons25	off  secure
-ttyv5	"/usr/libexec/getty Pc"		cons25	off  secure
-ttyv6	"/usr/libexec/getty Pc"		cons25	off  secure
-ttyv7	"/usr/libexec/getty Pc"		cons25	off  secure
-ttyv8	"/usr/X11R6/bin/xdm -nodaemoff"	xterm	off secure
+ttyv1	"/usr/libexec/getty Pc"		xterm	off secure
+ttyv2	"/usr/libexec/getty Pc"		xterm	off secure
+ttyv3	"/usr/libexec/getty Pc"		xterm	off secure
+ttyv4	"/usr/libexec/getty Pc"		xterm	off secure
+ttyv5	"/usr/libexec/getty Pc"		xterm	off secure
+ttyv6	"/usr/libexec/getty Pc"		xterm	off secure
+ttyv7	"/usr/libexec/getty Pc"		xterm	off secure
+ttyv8	"/usr/local/bin/xdm -nodaemoff"	xterm	off secure
 # Serial terminals
 # The 'dialup' keyword identifies dialin lines to login, fingerd etc.
-ttyd0	"/usr/libexec/getty std.9600"	dialup	on secure
-ttyd1	"/usr/libexec/getty std.9600"	dialup	off secure
-ttyd2	"/usr/libexec/getty std.9600"	dialup	off secure
-ttyd3	"/usr/libexec/getty std.9600"	dialup	off secure
+ttyu0	"/usr/libexec/getty std.9600"	dialup	on  secure
+ttyu1	"/usr/libexec/getty std.9600"	dialup	off secure
+ttyu2	"/usr/libexec/getty std.9600"	dialup	off secure
+ttyu3	"/usr/libexec/getty std.9600"	dialup	off secure
 # Dumb console
 dcons	"/usr/libexec/getty std.9600"	vt100	off secure
 # Pseudo terminals
diff --git a/tools/tools/tinybsd/tinybsd b/tools/tools/tinybsd/tinybsd
index 0f333f7b574..27216d4d2e3 100755
--- a/tools/tools/tinybsd/tinybsd
+++ b/tools/tools/tinybsd/tinybsd
@@ -393,7 +393,7 @@ create_etc() {
 
 	cd /usr/src/etc/
 	mkdir -p ${WORKDIR}/var/named/etc/namedb
-	make distribution DESTDIR=${WORKDIR}
+	make distribution DESTDIR=${WORKDIR} || exit 1
 }
 
 create_ssh_keys() {
diff --git a/usr.bin/Makefile b/usr.bin/Makefile
index 64977431214..9120613d436 100644
--- a/usr.bin/Makefile
+++ b/usr.bin/Makefile
@@ -203,6 +203,7 @@ SUBDIR=	alias \
 	unexpand \
 	${_unifdef} \
 	uniq \
+	unzip \
 	units \
 	unvis \
 	${_usbhidaction} \
diff --git a/usr.bin/Makefile.inc b/usr.bin/Makefile.inc
index 2ee98c34aab..534349f2515 100644
--- a/usr.bin/Makefile.inc
+++ b/usr.bin/Makefile.inc
@@ -3,6 +3,4 @@
 
 BINDIR?=	/usr/bin
 
-# Commented out for the time being.
-# I intend to make this default at some stage.
-#WARNS?=		2
+WARNS?=		6
diff --git a/usr.bin/apply/Makefile b/usr.bin/apply/Makefile
index 0355588b3c3..ca0f10a2fce 100644
--- a/usr.bin/apply/Makefile
+++ b/usr.bin/apply/Makefile
@@ -2,6 +2,5 @@
 # $FreeBSD$
 
 PROG=	apply
-WARNS?=	4
 
 .include 
diff --git a/usr.bin/ar/Makefile b/usr.bin/ar/Makefile
index 533f9317d02..1f00aca1984 100644
--- a/usr.bin/ar/Makefile
+++ b/usr.bin/ar/Makefile
@@ -3,8 +3,6 @@
 PROG=	ar
 SRCS=	ar.c acplex.l acpyacc.y read.c util.c write.c y.tab.h
 
-WARNS?=	5
-
 DPADD=	${LIBARCHIVE} ${LIBBZ2} ${LIBZ} ${LIBELF}
 LDADD=	-larchive -lbz2 -lz -lelf
 
diff --git a/usr.bin/ar/acpyacc.y b/usr.bin/ar/acpyacc.y
index bc25b628c68..b686c3f5747 100644
--- a/usr.bin/ar/acpyacc.y
+++ b/usr.bin/ar/acpyacc.y
@@ -251,7 +251,7 @@ arscp_open(char *fname)
 	if ((a = archive_read_new()) == NULL)
 		bsdar_errc(bsdar, EX_SOFTWARE, 0, "archive_read_new failed");
 	archive_read_support_compression_all(a);
-	archive_read_support_format_all(a);
+	archive_read_support_format_ar(a);
 	AC(archive_read_open_file(a, fname, DEF_BLKSZ));
 	if ((r = archive_read_next_header(a, &entry)))
 		bsdar_warnc(bsdar, 0, "%s", archive_error_string(a));
@@ -414,7 +414,7 @@ arscp_extract(struct list *list)
 
 /* List modules of archive. (Simple Mode) */
 static void
-arscp_list()
+arscp_list(void)
 {
 
 	if (!arscp_target_exist())
@@ -483,7 +483,7 @@ arscp_replace(struct list *list)
 
 /* Rename the temporary archive to the target archive. */
 static void
-arscp_save()
+arscp_save(void)
 {
 	mode_t mask;
 
@@ -512,7 +512,7 @@ arscp_save()
  * invoking CREATE cmd on current archive.
  */
 static void
-arscp_clear()
+arscp_clear(void)
 {
 	char		*new_target;
 
@@ -549,7 +549,7 @@ arscp_end(int eval)
  * issued by user.
  */
 static int
-arscp_target_exist()
+arscp_target_exist(void)
 {
 
 	if (target)
@@ -624,7 +624,7 @@ arscp_mlist2argv(struct list *list)
 
 /* Free space allocated for argv array and its elements. */
 static void
-arscp_free_argv()
+arscp_free_argv(void)
 {
 	int i;
 
@@ -636,7 +636,7 @@ arscp_free_argv()
 
 /* Show a prompt if we are in interactive mode */
 static void
-arscp_prompt()
+arscp_prompt(void)
 {
 
 	if (interactive) {
diff --git a/usr.bin/ar/ar.c b/usr.bin/ar/ar.c
index 35a0380e365..dc4b6c4a760 100644
--- a/usr.bin/ar/ar.c
+++ b/usr.bin/ar/ar.c
@@ -349,7 +349,7 @@ only_mode(struct bsdar *bsdar, const char *opt, const char *valid_modes)
 }
 
 static void
-bsdar_usage()
+bsdar_usage(void)
 {
 
 	(void)fprintf(stderr, "usage:  ar -d [-Tjsvz] archive file ...\n");
@@ -367,7 +367,7 @@ bsdar_usage()
 }
 
 static void
-ranlib_usage()
+ranlib_usage(void)
 {
 
 	(void)fprintf(stderr, "usage:	ranlib [-t] archive ...\n");
@@ -376,14 +376,14 @@ ranlib_usage()
 }
 
 static void
-bsdar_version()
+bsdar_version(void)
 {
 	(void)printf("BSD ar %s - %s\n", BSDAR_VERSION, archive_version());
 	exit(EX_OK);
 }
 
 static void
-ranlib_version()
+ranlib_version(void)
 {
 	(void)printf("ranlib %s - %s\n", BSDAR_VERSION, archive_version());
 	exit(EX_OK);
diff --git a/usr.bin/ar/read.c b/usr.bin/ar/read.c
index a9e2ed10319..37bd0a18932 100644
--- a/usr.bin/ar/read.c
+++ b/usr.bin/ar/read.c
@@ -88,7 +88,7 @@ read_archive(struct bsdar *bsdar, char mode)
 	if ((a = archive_read_new()) == NULL)
 		bsdar_errc(bsdar, EX_SOFTWARE, 0, "archive_read_new failed");
 	archive_read_support_compression_all(a);
-	archive_read_support_format_all(a);
+	archive_read_support_format_ar(a);
 	AC(archive_read_open_file(a, bsdar->filename, DEF_BLKSZ));
 
 	for (;;) {
diff --git a/usr.bin/at/Makefile b/usr.bin/at/Makefile
index 47d2574e7f5..75546fc156f 100644
--- a/usr.bin/at/Makefile
+++ b/usr.bin/at/Makefile
@@ -11,6 +11,8 @@ MLINKS=	at.1 batch.1 \
 	at.1 atq.1 \
 	at.1 atrm.1
 
+WARNS?=	1
+
 BINOWN=	root
 BINMODE= 4555
 CLEANFILES+= at.1
diff --git a/usr.bin/at/at.c b/usr.bin/at/at.c
index 71d8e607f9c..fbba7bd5902 100644
--- a/usr.bin/at/at.c
+++ b/usr.bin/at/at.c
@@ -179,7 +179,7 @@ static char *cwdname(void)
 }
 
 static long
-nextjob()
+nextjob(void)
 {
     long jobno;
     FILE *fid;
diff --git a/usr.bin/atm/sscop/Makefile b/usr.bin/atm/sscop/Makefile
index 16703bb35bd..36d3dcfc028 100644
--- a/usr.bin/atm/sscop/Makefile
+++ b/usr.bin/atm/sscop/Makefile
@@ -6,7 +6,6 @@ CONTRIB= ${.CURDIR}/../../../contrib/ngatm/sscop
 
 PROG=	sscop
 SRCS=	common.c sscop_main.c
-WARNS?=	6
 CFLAGS+= -I${CONTRIB} -DUSE_LIBBEGEMOT
 
 DPADD=	${LIBBEGEMOT} ${LIBNETGRAPH} ${LIBNGATM}
diff --git a/usr.bin/awk/Makefile b/usr.bin/awk/Makefile
index 7ec2e575c60..28126154cb3 100644
--- a/usr.bin/awk/Makefile
+++ b/usr.bin/awk/Makefile
@@ -8,6 +8,8 @@ SRCS=	awkgram.y b.c lex.c lib.c main.c parse.c proctab.c run.c tran.c ytab.h
 
 CFLAGS+= -DHAS_ISBLANK -I. -I${AWKSRC} -DFOPEN_MAX=64
 
+WARNS?=	1
+
 DPADD=	${LIBM}
 LDADD=	-lm
 
diff --git a/usr.bin/banner/banner.c b/usr.bin/banner/banner.c
index eb96a152f95..b87aa408953 100644
--- a/usr.bin/banner/banner.c
+++ b/usr.bin/banner/banner.c
@@ -1178,7 +1178,7 @@ main(int argc, char *argv[])
 }
 
 static void
-usage()
+usage(void)
 {
 	fprintf(stderr, "usage: banner [-d] [-t] [-w width] message ...\n");
 	exit(1);
diff --git a/usr.bin/biff/biff.c b/usr.bin/biff/biff.c
index c04c8d39f9f..70d2d85d002 100644
--- a/usr.bin/biff/biff.c
+++ b/usr.bin/biff/biff.c
@@ -110,7 +110,7 @@ main(int argc, char *argv[])
 }
 
 static void
-usage()
+usage(void)
 {
 	(void)fprintf(stderr, "usage: biff [n | y | b]\n");
 	exit(2);
diff --git a/usr.bin/bluetooth/bthost/Makefile b/usr.bin/bluetooth/bthost/Makefile
index fe2c4795935..833d1072139 100644
--- a/usr.bin/bluetooth/bthost/Makefile
+++ b/usr.bin/bluetooth/bthost/Makefile
@@ -2,7 +2,6 @@
 # $FreeBSD$
 
 PROG=		bthost
-WARNS?=		2
 
 DPADD=		${LIBBLUETOOTH}
 LDADD=		-lbluetooth 
diff --git a/usr.bin/bsdiff/Makefile.inc b/usr.bin/bsdiff/Makefile.inc
index 198d906713f..265f86d1ed5 100644
--- a/usr.bin/bsdiff/Makefile.inc
+++ b/usr.bin/bsdiff/Makefile.inc
@@ -1,6 +1,3 @@
 # $FreeBSD$
 
-WARNS?=	6
-
 .include "../Makefile.inc"
-
diff --git a/usr.bin/bzip2/Makefile b/usr.bin/bzip2/Makefile
index 0460fff1914..c2490a2bb5a 100644
--- a/usr.bin/bzip2/Makefile
+++ b/usr.bin/bzip2/Makefile
@@ -6,6 +6,8 @@ BZ2DIR=	${.CURDIR}/../../contrib/bzip2
 PROG=	bzip2
 CFLAGS+= -D_FILE_OFFSET_BITS=64
 
+WARNS?=	3
+
 DPADD=	${LIBBZ2}
 LDADD=	-lbz2
 
diff --git a/usr.bin/calendar/Makefile b/usr.bin/calendar/Makefile
index 481713ac993..27df8b67971 100644
--- a/usr.bin/calendar/Makefile
+++ b/usr.bin/calendar/Makefile
@@ -9,6 +9,8 @@ DE_LINKS=       de_DE.ISO8859-15
 FR_LINKS=       fr_FR.ISO8859-15
 TEXTMODE?=	444
 
+WARNS?=		3
+
 beforeinstall:
 	${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${TEXTMODE} \
 	    ${.CURDIR}/calendars/calendar.* ${DESTDIR}${SHAREDIR}/calendar
diff --git a/usr.bin/calendar/calendar.c b/usr.bin/calendar/calendar.c
index d1bb74516d9..39f2c9ce23f 100644
--- a/usr.bin/calendar/calendar.c
+++ b/usr.bin/calendar/calendar.c
@@ -55,7 +55,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-#include "pathnames.h"
 #include "calendar.h"
 
 struct passwd	*pw;
diff --git a/usr.bin/calendar/calendars/calendar.all b/usr.bin/calendar/calendars/calendar.all
index b46dcb46f0e..545c0e4e868 100644
--- a/usr.bin/calendar/calendars/calendar.all
+++ b/usr.bin/calendar/calendars/calendar.all
@@ -8,13 +8,16 @@
 #define _calendar_all_
 
 #include 
+#include 
 #include 
 #include 
 #include 
 #include 
 #include 
-#include 
+#include 
 #include 
+#include 
+#include 
 #include 
 
 #endif /* !_calendar_all_ */
diff --git a/usr.bin/calendar/calendars/calendar.dutch b/usr.bin/calendar/calendars/calendar.dutch
index 3094ddd0578..47b1bf520a4 100644
--- a/usr.bin/calendar/calendars/calendar.dutch
+++ b/usr.bin/calendar/calendars/calendar.dutch
@@ -5,6 +5,7 @@
  */
 
 LANG=nl_NL.ISO8859-15
+Easter=Pasen
 
 /*
  * Feestdagen
@@ -32,21 +33,21 @@ LANG=nl_NL.ISO8859-15
 /*
  * Pasen gerelateerd
  */
-Easter-50	Carnaval
-Easter-49	Carnaval
-Easter-48	Carnaval
-Easter-47	Carnaval (Vastenavond)
-Easter-46	Aswoensdag
-Easter-7	Palmzondag
-Easter-3	Witte Donderdag
-Easter-2	Goede vrijdag
-Easter-1	Stille zaterdag
-Easter		Eerste paasdag
-Easter+1	Tweede paasdag
-Easter+39	Hemelvaartsdag
-Easter+49	Eerste Pinksterdag
-Easter+50	Tweede Pinksterdag
-Easter+56	Trinitatis
+Pasen-50	Carnaval
+Pasen-49	Carnaval
+Pasen-48	Carnaval
+Pasen-47	Carnaval (Vastenavond)
+Pasen-46	Aswoensdag
+Pasen-7	Palmzondag
+Pasen-3	Witte Donderdag
+Pasen-2	Goede vrijdag
+Pasen-1	Stille zaterdag
+Pasen		Eerste paasdag
+Pasen+1	Tweede paasdag
+Pasen+39	Hemelvaartsdag
+Pasen+49	Eerste Pinksterdag
+Pasen+50	Tweede Pinksterdag
+Pasen+56	Trinitatis
 
 /*
  * Misc
diff --git a/usr.bin/calendar/calendars/calendar.freebsd b/usr.bin/calendar/calendars/calendar.freebsd
index d542d99cb2d..8e7b9fa6bab 100644
--- a/usr.bin/calendar/calendars/calendar.freebsd
+++ b/usr.bin/calendar/calendars/calendar.freebsd
@@ -284,6 +284,7 @@
 11/18	Thomas Quinot  born in Paris, France, 1977
 11/19	Konstantin Belousov  born in Kiev, USSR, 1972
 11/20	Dmitry Morozovsky  born in Moscow, USSR, 1968
+11/20	Gavin Atkinson  born in Middlesbrough, United Kingdom, 1979
 11/23	Josef Lawrence Karthauser  born in Pembury, Kent, United Kingdom, 1972
 11/24	Andrey Zakhvatov  born in Chelyabinsk, Russian Federation, 1974
 11/24	Daniel Gerzo  born in Bratislava, Slovakia, 1986
diff --git a/usr.bin/calendar/day.c b/usr.bin/calendar/day.c
index d3f3c1ec4f2..e40481eb918 100644
--- a/usr.bin/calendar/day.c
+++ b/usr.bin/calendar/day.c
@@ -44,7 +44,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-#include "pathnames.h"
 #include "calendar.h"
 
 struct tm		*tp;
diff --git a/usr.bin/calendar/io.c b/usr.bin/calendar/io.c
index 92df7be2582..03f28feb7aa 100644
--- a/usr.bin/calendar/io.c
+++ b/usr.bin/calendar/io.c
@@ -467,7 +467,7 @@ closecal(FILE *fp)
 	if (!doall)
 		return;
 
-	(void)rewind(fp);
+	rewind(fp);
 	if (fstat(fileno(fp), &sbuf) || !sbuf.st_size)
 		goto done;
 	if (pipe(pdes) < 0)
diff --git a/usr.bin/calendar/ostern.c b/usr.bin/calendar/ostern.c
index 76e593327a3..89e7b1cee51 100644
--- a/usr.bin/calendar/ostern.c
+++ b/usr.bin/calendar/ostern.c
@@ -30,7 +30,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
 
 #include "calendar.h"
 
@@ -88,7 +87,7 @@ geteaster(char *s, int year)
 	else
 		return (0);
 
-#if DEBUG
+#ifdef DEBUG
 	printf("%s %d %d\n", s, year, EASTERNAMELEN);
 #endif
 
diff --git a/usr.bin/calendar/paskha.c b/usr.bin/calendar/paskha.c
index d96ffc2546e..e713f5f9be9 100644
--- a/usr.bin/calendar/paskha.c
+++ b/usr.bin/calendar/paskha.c
@@ -30,7 +30,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
 
 #include "calendar.h"
 
diff --git a/usr.bin/catman/Makefile b/usr.bin/catman/Makefile
index d80a5fd8ae4..ab4c01453a1 100644
--- a/usr.bin/catman/Makefile
+++ b/usr.bin/catman/Makefile
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
 PROG=	catman
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/catman/catman.c b/usr.bin/catman/catman.c
index ba3ad248a2c..c17a091593c 100644
--- a/usr.bin/catman/catman.c
+++ b/usr.bin/catman/catman.c
@@ -589,9 +589,15 @@ process_section(char *mandir, char *section)
 }
 
 static int
-select_sections(struct dirent *entry)
+select_sections(const struct dirent *entry)
 {
-	return directory_type(entry->d_name) == MAN_SECTION_DIR;
+	char *name;
+	int ret;
+
+	name = strdup(entry->d_name);
+	ret = directory_type(name) == MAN_SECTION_DIR;
+	free(name);
+	return (ret);
 }
 
 /*
diff --git a/usr.bin/chkey/Makefile b/usr.bin/chkey/Makefile
index 2813ca1a45f..847e5c96010 100644
--- a/usr.bin/chkey/Makefile
+++ b/usr.bin/chkey/Makefile
@@ -13,6 +13,4 @@ CFLAGS+= -DYP
 DPADD=	${LIBRPCSVC} ${LIBMP} ${LIBCRYPTO}
 LDADD=	-lrpcsvc -lmp -lcrypto
 
-WARNS?=	6
-
 .include 
diff --git a/usr.bin/chpass/Makefile b/usr.bin/chpass/Makefile
index e9589562186..7f7ac510c6b 100644
--- a/usr.bin/chpass/Makefile
+++ b/usr.bin/chpass/Makefile
@@ -9,7 +9,6 @@ PROG=	chpass
 SRCS=	chpass.c edit.c field.c pw_scan.c table.c util.c
 BINOWN=	root
 BINMODE=4555
-WARNS?=	5
 .if ${MK_NIS} != "no"
 CFLAGS+= -DYP
 .endif
diff --git a/usr.bin/colldef/Makefile b/usr.bin/colldef/Makefile
index 6cb213f4889..5f62bc596b7 100644
--- a/usr.bin/colldef/Makefile
+++ b/usr.bin/colldef/Makefile
@@ -8,4 +8,6 @@ CFLAGS+=-DCOLLATE_DEBUG -DYY_NO_UNPUT
 LDADD=	-ll
 DPADD=	${LIBL}
 
+WARNS?=	2
+
 .include 
diff --git a/usr.bin/comm/comm.1 b/usr.bin/comm/comm.1
index 2402ab5a1ce..02b508cf626 100644
--- a/usr.bin/comm/comm.1
+++ b/usr.bin/comm/comm.1
@@ -35,7 +35,7 @@
 .\"     From: @(#)comm.1	8.1 (Berkeley) 6/6/93
 .\" $FreeBSD$
 .\"
-.Dd January 26, 2005
+.Dd December 12, 2009
 .Os
 .Dt COMM 1
 .Sh NAME
@@ -118,7 +118,3 @@ A
 .Nm
 command appeared in
 .At v4 .
-.Sh BUGS
-Input lines are limited to
-.Dv LINE_MAX
-(2048) characters in length.
diff --git a/usr.bin/comm/comm.c b/usr.bin/comm/comm.c
index ea926731135..afda0e73e52 100644
--- a/usr.bin/comm/comm.c
+++ b/usr.bin/comm/comm.c
@@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -59,7 +60,8 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-#define	MAXLINELEN	(LINE_MAX + 1)
+#define	INITLINELEN	(LINE_MAX + 1)
+#define	MAXLINELEN	((SIZE_MAX / sizeof(wchar_t)) / 2)
 
 const wchar_t *tabs[] = { L"", L"\t", L"\t\t" };
 
@@ -83,8 +85,8 @@ main(int argc, char *argv[])
 	flag1 = flag2 = flag3 = 1;
 	iflag = 0;
 
- 	line1len = MAXLINELEN;
- 	line2len = MAXLINELEN;
+ 	line1len = INITLINELEN;
+ 	line2len = INITLINELEN;
  	line1 = malloc(line1len * sizeof(*line1));
  	line2 = malloc(line2len * sizeof(*line2));
 	if (line1 == NULL || line2 == NULL)
@@ -163,7 +165,7 @@ main(int argc, char *argv[])
 		if (!comp) {
 			read1 = read2 = 1;
 			if (col3 != NULL)
-				(void)printf("%ls%ls", col3, line1);
+				(void)printf("%ls%ls\n", col3, line1);
 			continue;
 		}
 
@@ -172,12 +174,12 @@ main(int argc, char *argv[])
 			read1 = 1;
 			read2 = 0;
 			if (col1 != NULL)
-				(void)printf("%ls%ls", col1, line1);
+				(void)printf("%ls%ls\n", col1, line1);
 		} else {
 			read1 = 0;
 			read2 = 1;
 			if (col2 != NULL)
-				(void)printf("%ls%ls", col2, line2);
+				(void)printf("%ls%ls\n", col2, line2);
 		}
 	}
 	exit(0);
@@ -190,19 +192,20 @@ getline(wchar_t *buf, size_t *buflen, FILE *fp)
 	wint_t ch;
 
 	bufpos = 0;
-	do {
-		if ((ch = getwc(fp)) != WEOF) {
-			if (bufpos + 2 >= *buflen) {
-				*buflen = *buflen * 2;
-				buf = reallocf(buf, *buflen * sizeof(*buf));
-				if (buf == NULL)
-					return (NULL);
-			}
-			buf[bufpos++] = ch;
+	while ((ch = getwc(fp)) != WEOF && ch != '\n') {
+		if (bufpos + 1 >= *buflen) {
+			*buflen = *buflen * 2;
+			if (*buflen > MAXLINELEN)
+				errx(1,
+				    "Maximum line buffer length (%zu) exceeded",
+				    MAXLINELEN);
+			buf = reallocf(buf, *buflen * sizeof(*buf));
+			if (buf == NULL)
+				err(1, "reallocf");
 		}
-	} while (ch != WEOF && ch != '\n');
-	if (bufpos + 1 != *buflen)
-		buf[bufpos] = '\0';
+		buf[bufpos++] = ch;
+	}
+	buf[bufpos] = '\0';
 
 	return (bufpos != 0 || ch == '\n' ? buf : NULL);
 }
@@ -212,7 +215,7 @@ show(FILE *fp, const char *fn, const wchar_t *offset, wchar_t *buf, size_t *bufl
 {
 
 	do {
-		(void)printf("%ls%ls", offset, buf);
+		(void)printf("%ls%ls\n", offset, buf);
 	} while ((buf = getline(buf, buflen, fp)) != NULL);
 	if (ferror(fp))
 		err(1, "%s", fn);
@@ -254,13 +257,13 @@ wcsicoll(const wchar_t *s1, const wchar_t *s2)
 	new_l2_buflen = wcsicoll_l2_buflen;
 	while (new_l1_buflen < l1) {
 		if (new_l1_buflen == 0)
-			new_l1_buflen = MAXLINELEN;
+			new_l1_buflen = INITLINELEN;
 		else
 			new_l1_buflen *= 2;
 	}
 	while (new_l2_buflen < l2) {
 		if (new_l2_buflen == 0)
-			new_l2_buflen = MAXLINELEN;
+			new_l2_buflen = INITLINELEN;
 		else
 			new_l2_buflen *= 2;
 	}
diff --git a/usr.bin/compile_et/Makefile b/usr.bin/compile_et/Makefile
index 3d4ab15dfcc..262e696ac1b 100644
--- a/usr.bin/compile_et/Makefile
+++ b/usr.bin/compile_et/Makefile
@@ -6,4 +6,6 @@ PROG=	compile_et
 SRCS=	compile_et.c parse.y lex.l getarg.c
 CFLAGS+=-I. -I${.CURDIR}/../../contrib/com_err
 
+WARNS?=	0
+
 .include 
diff --git a/usr.bin/compress/Makefile b/usr.bin/compress/Makefile
index 45c0814add3..a586b97fcfc 100644
--- a/usr.bin/compress/Makefile
+++ b/usr.bin/compress/Makefile
@@ -5,7 +5,6 @@ PROG=	compress
 SRCS=	compress.c zopen.c
 LINKS=	${BINDIR}/compress ${BINDIR}/uncompress
 MLINKS=	compress.1 uncompress.1
-WARNS?=	6
 
 # XXX zopen is not part of libc
 # MAN=zopen.3
diff --git a/usr.bin/cpio/Makefile b/usr.bin/cpio/Makefile
index c64ab6c6a04..d609780ac9c 100644
--- a/usr.bin/cpio/Makefile
+++ b/usr.bin/cpio/Makefile
@@ -5,7 +5,6 @@
 PROG=	bsdcpio
 BSDCPIO_VERSION_STRING=2.7.0
 SRCS=	cpio.c cmdline.c err.c matching.c pathmatch.c
-WARNS?=	6
 DPADD=	${LIBARCHIVE} ${LIBZ} ${LIBBZ2}
 CFLAGS+= -DBSDCPIO_VERSION_STRING=\"${BSDCPIO_VERSION_STRING}\"
 CFLAGS+= -DPLATFORM_CONFIG_H=\"config_freebsd.h\"
diff --git a/usr.bin/cpio/test/Makefile b/usr.bin/cpio/test/Makefile
index 7da5a606226..ace95169801 100644
--- a/usr.bin/cpio/test/Makefile
+++ b/usr.bin/cpio/test/Makefile
@@ -53,7 +53,6 @@ CFLAGS+= -I${CPIO_SRCDIR}
 # Uncomment to link against dmalloc
 #LDADD+= -L/usr/local/lib -ldmalloc
 #CFLAGS+= -I/usr/local/include -DUSE_DMALLOC
-WARNS=6
 
 check test:	bsdcpio_test
 	${.OBJDIR}/bsdcpio_test -p ${.OBJDIR}/../bsdcpio -r ${.CURDIR}
diff --git a/usr.bin/cpuset/Makefile b/usr.bin/cpuset/Makefile
index 85a51485a47..660a0962031 100644
--- a/usr.bin/cpuset/Makefile
+++ b/usr.bin/cpuset/Makefile
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
 PROG=   cpuset
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/ctags/Makefile b/usr.bin/ctags/Makefile
index dc639af6e2e..be2e93eb686 100644
--- a/usr.bin/ctags/Makefile
+++ b/usr.bin/ctags/Makefile
@@ -5,4 +5,6 @@ PROG=	ctags
 SRCS=	C.c ctags.c fortran.c lisp.c print.c tree.c yacc.c
 CFLAGS+=-I${.CURDIR}
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/ctags/ctags.c b/usr.bin/ctags/ctags.c
index eda4145291f..2d9e3f36ed0 100644
--- a/usr.bin/ctags/ctags.c
+++ b/usr.bin/ctags/ctags.c
@@ -244,7 +244,7 @@ void
 init(void)
 {
 	int		i;
-	const char	*sp;
+	const unsigned char	*sp;
 
 	for (i = 0; i < 256; i++) {
 		_wht[i] = _etk[i] = _itk[i] = _btk[i] = NO;
diff --git a/usr.bin/ctags/fortran.c b/usr.bin/ctags/fortran.c
index 3761615f10e..a494752f7f0 100644
--- a/usr.bin/ctags/fortran.c
+++ b/usr.bin/ctags/fortran.c
@@ -52,7 +52,7 @@ static void takeprec(void);
 char *lbp;				/* line buffer pointer */
 
 int
-PF_funcs()
+PF_funcs(void)
 {
 	bool	pfcnt;			/* pascal/fortran functions found */
 	char	*cp;
diff --git a/usr.bin/dig/Makefile b/usr.bin/dig/Makefile
index 585e3794b19..ec11dc48352 100644
--- a/usr.bin/dig/Makefile
+++ b/usr.bin/dig/Makefile
@@ -20,6 +20,8 @@ CFLAGS+=	-DWITH_IDN -I/usr/local/include
 CFLAGS+=	-L/usr/local/lib -lidnkit -R/usr/local/lib -liconv
 .endif
 
+WARNS?=		1
+
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
diff --git a/usr.bin/du/Makefile b/usr.bin/du/Makefile
index 12e80b9da3d..f614866da6d 100644
--- a/usr.bin/du/Makefile
+++ b/usr.bin/du/Makefile
@@ -2,7 +2,6 @@
 # $FreeBSD$
 
 PROG=	du
-WARNS?=	6
 DPADD=	${LIBUTIL}
 LDADD=	-lutil
 
diff --git a/usr.bin/elf2aout/Makefile b/usr.bin/elf2aout/Makefile
index 4ba44e7e3dc..2959539add7 100644
--- a/usr.bin/elf2aout/Makefile
+++ b/usr.bin/elf2aout/Makefile
@@ -3,6 +3,5 @@
 PROG=	elf2aout
 
 NO_WERROR=
-WARNS?=	5
 
 .include 
diff --git a/usr.bin/elfdump/Makefile b/usr.bin/elfdump/Makefile
index 95ce514b3ac..22e1ca94be0 100644
--- a/usr.bin/elfdump/Makefile
+++ b/usr.bin/elfdump/Makefile
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
 PROG=	elfdump
-WARNS?=	5
 
 .include 
diff --git a/usr.bin/env/Makefile b/usr.bin/env/Makefile
index bc1eea49153..89ab5947263 100644
--- a/usr.bin/env/Makefile
+++ b/usr.bin/env/Makefile
@@ -3,6 +3,5 @@
 
 PROG=	env
 SRCS=	env.c envopts.c
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/fetch/Makefile b/usr.bin/fetch/Makefile
index c422af8afb2..5686fc60915 100644
--- a/usr.bin/fetch/Makefile
+++ b/usr.bin/fetch/Makefile
@@ -4,7 +4,6 @@
 
 PROG=		fetch
 CSTD?=		c99
-WARNS?=		6
 DPADD=		${LIBFETCH}
 LDADD=		-lfetch
 .if ${MK_OPENSSL} != "no"
diff --git a/usr.bin/fetch/fetch.c b/usr.bin/fetch/fetch.c
index 2512a2e8632..7553bd8d102 100644
--- a/usr.bin/fetch/fetch.c
+++ b/usr.bin/fetch/fetch.c
@@ -340,6 +340,11 @@ fetch(char *URL, const char *path)
 		fetchDebug = 1;
 
 	/* parse URL */
+	url = NULL;
+	if (*URL == '\0') {
+		warnx("empty URL");
+		goto failure;
+	}
 	if ((url = fetchParseURL(URL)) == NULL) {
 		warnx("%s: parse error", URL);
 		goto failure;
diff --git a/usr.bin/file2c/Makefile b/usr.bin/file2c/Makefile
index c3c6ddc7612..82b7e97662e 100644
--- a/usr.bin/file2c/Makefile
+++ b/usr.bin/file2c/Makefile
@@ -1,5 +1,4 @@
 # $FreeBSD$
 
 PROG=	file2c
-WARNS?=	6
 .include 
diff --git a/usr.bin/find/Makefile b/usr.bin/find/Makefile
index b20dc0346f5..120826064df 100644
--- a/usr.bin/find/Makefile
+++ b/usr.bin/find/Makefile
@@ -4,7 +4,6 @@
 PROG=	find
 SRCS=	find.c function.c ls.c main.c misc.c operator.c option.c \
 	getdate.y
-WARNS?=6
 CFLAGS+= -DHAVE_SYS_TIMEB_H -I${.CURDIR}
 YFLAGS=
 
diff --git a/usr.bin/find/function.c b/usr.bin/find/function.c
index c11d24f8bab..5d8ad3d3485 100644
--- a/usr.bin/find/function.c
+++ b/usr.bin/find/function.c
@@ -770,7 +770,7 @@ done:	*argvp = argv + 1;
 
 /* Finish any pending -exec ... {} + functions. */
 void
-finish_execplus()
+finish_execplus(void)
 {
 	PLAN *p;
 
diff --git a/usr.bin/finger/Makefile b/usr.bin/finger/Makefile
index 983392b7a1e..a7db0630914 100644
--- a/usr.bin/finger/Makefile
+++ b/usr.bin/finger/Makefile
@@ -5,4 +5,9 @@ PROG=	finger
 SRCS=	finger.c lprint.c net.c sprint.c util.c
 MAN=	finger.1 finger.conf.5
 
+WARNS?=	2
+
+DPADD=	${LIBULOG}
+LDADD=	-lulog
+
 .include 
diff --git a/usr.bin/finger/extern.h b/usr.bin/finger/extern.h
index 498c296d093..0014b749b34 100644
--- a/usr.bin/finger/extern.h
+++ b/usr.bin/finger/extern.h
@@ -51,8 +51,8 @@ extern int invoker_root;		/* Invoked by root */
 
 void	 enter_lastlog(PERSON *);
 PERSON	*enter_person(struct passwd *);
-void	 enter_where(struct utmp *, PERSON *);
-PERSON	*find_person(const char *);
+void	 enter_where(struct utmpx *, PERSON *);
+PERSON	*find_person(char *);
 int	 hide(struct passwd *);
 void	 lflag_print(void);
 int	 match(struct passwd *, const char *);
diff --git a/usr.bin/finger/finger.c b/usr.bin/finger/finger.c
index b2787520c48..88b39fa21d9 100644
--- a/usr.bin/finger/finger.c
+++ b/usr.bin/finger/finger.c
@@ -82,8 +82,9 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 #include 
 
 #include "finger.h"
@@ -233,29 +234,26 @@ loginlist(void)
 	PERSON *pn;
 	DBT data, key;
 	struct passwd *pw;
-	struct utmp user;
+	struct utmpx *user;
 	int r, sflag1;
-	char name[UT_NAMESIZE + 1];
 
 	if (kflag)
 		errx(1, "can't list logins without reading utmp");
 
-	if (!freopen(_PATH_UTMP, "r", stdin))
-		err(1, "%s", _PATH_UTMP);
-	name[UT_NAMESIZE] = '\0';
-	while (fread((char *)&user, sizeof(user), 1, stdin) == 1) {
-		if (!user.ut_name[0])
+	setutxent();
+	while ((user = getutxent()) != NULL) {
+		if (user->ut_type != USER_PROCESS)
 			continue;
-		if ((pn = find_person(user.ut_name)) == NULL) {
-			bcopy(user.ut_name, name, UT_NAMESIZE);
-			if ((pw = getpwnam(name)) == NULL)
+		if ((pn = find_person(user->ut_user)) == NULL) {
+			if ((pw = getpwnam(user->ut_user)) == NULL)
 				continue;
 			if (hide(pw))
 				continue;
 			pn = enter_person(pw);
 		}
-		enter_where(&user, pn);
+		enter_where(user, pn);
 	}
+	endutxent();
 	if (db && lflag)
 		for (sflag1 = R_FIRST;; sflag1 = R_NEXT) {
 			PERSON *tmp;
@@ -275,7 +273,7 @@ userlist(int argc, char **argv)
 {
 	PERSON *pn;
 	DBT data, key;
-	struct utmp user;
+	struct utmpx *user;
 	struct passwd *pw;
 	int r, sflag1, *used, *ip;
 	char **ap, **nargv, **np, **p;
@@ -373,6 +371,7 @@ net:	for (p = nargv; *p;) {
 		    printf("\n");
 	}
 
+	free(used);
 	if (entries == 0)
 		return;
 
@@ -383,15 +382,15 @@ net:	for (p = nargv; *p;) {
 	 * Scan thru the list of users currently logged in, saving
 	 * appropriate data whenever a match occurs.
 	 */
-	if (!freopen(_PATH_UTMP, "r", stdin))
-		err(1, "%s", _PATH_UTMP);
-	while (fread((char *)&user, sizeof(user), 1, stdin) == 1) {
-		if (!user.ut_name[0])
+	setutxent();
+	while ((user = getutxent()) != NULL) {
+		if (user->ut_type != USER_PROCESS)
 			continue;
-		if ((pn = find_person(user.ut_name)) == NULL)
+		if ((pn = find_person(user->ut_user)) == NULL)
 			continue;
-		enter_where(&user, pn);
+		enter_where(user, pn);
 	}
+	endutxent();
 	if (db)
 		for (sflag1 = R_FIRST;; sflag1 = R_NEXT) {
 			PERSON *tmp;
diff --git a/usr.bin/finger/finger.h b/usr.bin/finger/finger.h
index 6b18146d4b5..72a5554ee46 100644
--- a/usr.bin/finger/finger.h
+++ b/usr.bin/finger/finger.h
@@ -62,8 +62,8 @@ typedef struct where {
 	short writable;			/* tty is writable */
 	time_t loginat;			/* time of (last) login */
 	time_t idletime;		/* how long idle (if logged in) */
-	char tty[UT_LINESIZE+1];	/* null terminated tty line */
-	char host[UT_HOSTSIZE+1];	/* null terminated remote host name */
+	char tty[sizeof ((struct utmpx *)0)->ut_line];  /* tty line */
+	char host[sizeof ((struct utmpx *)0)->ut_host]; /* host name */
 } WHERE;
 
 #define UNPRIV_NAME	"nobody"	/* Preferred privilege level */
diff --git a/usr.bin/finger/lprint.c b/usr.bin/finger/lprint.c
index 848bbeeeb32..c473c7fee3c 100644
--- a/usr.bin/finger/lprint.c
+++ b/usr.bin/finger/lprint.c
@@ -56,8 +56,9 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 #include "finger.h"
 #include "pathnames.h"
 
diff --git a/usr.bin/finger/net.c b/usr.bin/finger/net.c
index 5260a2d6ca2..dfc533af0bd 100644
--- a/usr.bin/finger/net.c
+++ b/usr.bin/finger/net.c
@@ -54,8 +54,9 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 #include "finger.h"
 
 static void cleanup(int sig);
diff --git a/usr.bin/finger/sprint.c b/usr.bin/finger/sprint.c
index e4f768b3000..c08ca3ab0fe 100644
--- a/usr.bin/finger/sprint.c
+++ b/usr.bin/finger/sprint.c
@@ -43,6 +43,7 @@ static char sccsid[] = "@(#)sprint.c	8.3 (Berkeley) 4/28/95";
 #include 
 __FBSDID("$FreeBSD$");
 
+#include 
 #include 
 #include 
 #include 
@@ -52,7 +53,8 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include "finger.h"
 
 static void	  stimeprint(WHERE *);
@@ -88,7 +90,7 @@ sflag_print(void)
 	 */
 #define	MAXREALNAME	16
 #define MAXHOSTNAME     17      /* in reality, hosts are never longer than 16 */
-	(void)printf("%-*s %-*s%s %s\n", UT_NAMESIZE, "Login", MAXREALNAME,
+	(void)printf("%-*s %-*s%s %s\n", MAXLOGNAME, "Login", MAXREALNAME,
 	    "Name", " TTY      Idle  Login  Time  ", (gflag) ? "" :
 	    oflag ? "Office  Phone" : "Where");
 
@@ -105,7 +107,7 @@ sflag_print(void)
 			namelen = MAXREALNAME;
 			if (w->info == LOGGEDIN && !w->writable)
 				--namelen;	/* leave space before `*' */
-			(void)printf("%-*.*s %-*.*s", UT_NAMESIZE, UT_NAMESIZE,
+			(void)printf("%-*.*s %-*.*s", MAXLOGNAME, MAXLOGNAME,
 				pn->name, MAXREALNAME, namelen,
 				pn->realname ? pn->realname : "");
 			if (!w->loginat) {
diff --git a/usr.bin/finger/util.c b/usr.bin/finger/util.c
index a84c711745c..8ee082524ad 100644
--- a/usr.bin/finger/util.c
+++ b/usr.bin/finger/util.c
@@ -56,8 +56,9 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 #include "finger.h"
 #include "pathnames.h"
 
@@ -109,29 +110,18 @@ void
 enter_lastlog(PERSON *pn)
 {
 	WHERE *w;
-	static int opened, fd;
-	struct lastlog ll;
+	struct ulog_utmpx *ut;
 	char doit = 0;
 
-	/* some systems may not maintain lastlog, don't report errors. */
-	if (!opened) {
-		fd = open(_PATH_LASTLOG, O_RDONLY, 0);
-		opened = 1;
-	}
-	if (fd == -1 ||
-	    lseek(fd, (long)pn->uid * sizeof(ll), SEEK_SET) !=
-	    (long)pn->uid * sizeof(ll) ||
-	    read(fd, (char *)&ll, sizeof(ll)) != sizeof(ll)) {
-			/* as if never logged in */
-			ll.ll_line[0] = ll.ll_host[0] = '\0';
-			ll.ll_time = 0;
-		}
+	ulog_setutxfile(UTXI_USER, NULL);
+	ut = ulog_getutxuser(pn->name);
 	if ((w = pn->whead) == NULL)
 		doit = 1;
-	else if (ll.ll_time != 0) {
+	else if (ut != NULL && ut->ut_type == USER_PROCESS) {
 		/* if last login is earlier than some current login */
 		for (; !doit && w != NULL; w = w->next)
-			if (w->info == LOGGEDIN && w->loginat < ll.ll_time)
+			if (w->info == LOGGEDIN &&
+			    w->loginat < ut->ut_tv.tv_sec)
 				doit = 1;
 		/*
 		 * and if it's not any of the current logins
@@ -140,32 +130,29 @@ enter_lastlog(PERSON *pn)
 		 */
 		for (w = pn->whead; doit && w != NULL; w = w->next)
 			if (w->info == LOGGEDIN &&
-			    strncmp(w->tty, ll.ll_line, UT_LINESIZE) == 0)
+			    strcmp(w->tty, ut->ut_line) == 0)
 				doit = 0;
 	}
-	if (doit) {
+	if (ut != NULL && doit) {
 		w = walloc(pn);
 		w->info = LASTLOG;
-		bcopy(ll.ll_line, w->tty, UT_LINESIZE);
-		w->tty[UT_LINESIZE] = 0;
-		bcopy(ll.ll_host, w->host, UT_HOSTSIZE);
-		w->host[UT_HOSTSIZE] = 0;
-		w->loginat = ll.ll_time;
+		strcpy(w->tty, ut->ut_line);
+		strcpy(w->host, ut->ut_host);
+		w->loginat = ut->ut_tv.tv_sec;
 	}
+	ulog_endutxent();
 }
 
 void
-enter_where(struct utmp *ut, PERSON *pn)
+enter_where(struct utmpx *ut, PERSON *pn)
 {
 	WHERE *w;
 
 	w = walloc(pn);
 	w->info = LOGGEDIN;
-	bcopy(ut->ut_line, w->tty, UT_LINESIZE);
-	w->tty[UT_LINESIZE] = 0;
-	bcopy(ut->ut_host, w->host, UT_HOSTSIZE);
-	w->host[UT_HOSTSIZE] = 0;
-	w->loginat = (time_t)ut->ut_time;
+	strcpy(w->tty, ut->ut_line);
+	strcpy(w->host, ut->ut_host);
+	w->loginat = ut->ut_tv.tv_sec;
 	find_idle_and_ttywrite(w);
 }
 
@@ -205,14 +192,12 @@ enter_person(struct passwd *pw)
 }
 
 PERSON *
-find_person(const char *name)
+find_person(char *name)
 {
 	struct passwd *pw;
 
-	int cnt;
 	DBT data, key;
 	PERSON *p;
-	char buf[UT_NAMESIZE + 1];
 
 	if (!db)
 		return(NULL);
@@ -220,12 +205,8 @@ find_person(const char *name)
 	if ((pw = getpwnam(name)) && hide(pw))
 		return(NULL);
 
-	/* Name may be only UT_NAMESIZE long and not NUL terminated. */
-	for (cnt = 0; cnt < UT_NAMESIZE && *name; ++name, ++cnt)
-		buf[cnt] = *name;
-	buf[cnt] = '\0';
-	key.data = buf;
-	key.size = cnt;
+	key.data = name;
+	key.size = strlen(name);
 
 	if ((*db->get)(db, &key, &data, 0))
 		return (NULL);
diff --git a/usr.bin/fstat/Makefile b/usr.bin/fstat/Makefile
index d55fce47986..23e907b9b5c 100644
--- a/usr.bin/fstat/Makefile
+++ b/usr.bin/fstat/Makefile
@@ -9,7 +9,6 @@ DPADD=	${LIBKVM}
 LDADD=	-lkvm
 BINGRP=	kmem
 BINMODE=2555
-WARNS?=	6
 
 CFLAGS+=-D_KVM_VNODE
 
diff --git a/usr.bin/fsync/Makefile b/usr.bin/fsync/Makefile
index 42aa6ddec66..c9bc5249ee6 100644
--- a/usr.bin/fsync/Makefile
+++ b/usr.bin/fsync/Makefile
@@ -2,5 +2,4 @@
 
 PROG=	fsync
 
-WARNS?=	6
 .include 
diff --git a/usr.bin/ftp/Makefile b/usr.bin/ftp/Makefile
index c2fe59cd4b1..6f42e69a328 100644
--- a/usr.bin/ftp/Makefile
+++ b/usr.bin/ftp/Makefile
@@ -23,6 +23,8 @@ CFLAGS+= -I${.CURDIR} -I${LUKEMFTP}
 LDADD=	-ledit -ltermcap -lutil
 DPADD=	${LIBEDIT} ${LIBTERMCAP} ${LIBUTIL}
 
+WARNS?=	2
+
 LINKS=	${BINDIR}/ftp ${BINDIR}/pftp \
 	${BINDIR}/ftp ${BINDIR}/gate-ftp
 MLINKS=	ftp.1 pftp.1 \
diff --git a/usr.bin/gcore/Makefile b/usr.bin/gcore/Makefile
index 5ab51cf5c7e..358c7472f78 100644
--- a/usr.bin/gcore/Makefile
+++ b/usr.bin/gcore/Makefile
@@ -1,7 +1,10 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/6/93
 # $FreeBSD$
 
+LDADD+=	-lutil
 PROG=	gcore
 SRCS=	elfcore.c gcore.c
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/gcore/elfcore.c b/usr.bin/gcore/elfcore.c
index 6c90708f2cd..73d92b45577 100644
--- a/usr.bin/gcore/elfcore.c
+++ b/usr.bin/gcore/elfcore.c
@@ -1,4 +1,5 @@
 /*-
+ * Copyright (c) 2007 Sandvine Incorporated
  * Copyright (c) 1998 John D. Polstra
  * All rights reserved.
  *
@@ -29,8 +30,12 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
+#include 
 #include 
 #include 
+#include 
+#include 
+#include 
 #include 
 #include 
 #include 
@@ -44,6 +49,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 
 #include "extern.h"
 
@@ -69,16 +75,15 @@ static void cb_put_phdr(vm_map_entry_t, void *);
 static void cb_size_segment(vm_map_entry_t, void *);
 static void each_writable_segment(vm_map_entry_t, segment_callback,
     void *closure);
-static void elf_corehdr(int fd, pid_t, vm_map_entry_t, int numsegs,
-    void *hdr, size_t hdrsize);
-static void elf_puthdr(vm_map_entry_t, void *, size_t *,
-    const prstatus_t *, const prfpregset_t *, const prpsinfo_t *, int numsegs);
+static void elf_detach(void);	/* atexit() handler. */
+static void elf_puthdr(pid_t, vm_map_entry_t, void *, size_t *, int numsegs);
 static void elf_putnote(void *dst, size_t *off, const char *name, int type,
     const void *desc, size_t descsz);
 static void freemap(vm_map_entry_t);
-static void readhdrinfo(pid_t, prstatus_t *, prfpregset_t *, prpsinfo_t *);
 static vm_map_entry_t readmap(pid_t);
 
+static pid_t g_pid;		/* Pid being dumped, global for elf_detach */
+
 static int
 elf_ident(int efd, pid_t pid __unused, char *binfile __unused)
 {
@@ -93,6 +98,14 @@ elf_ident(int efd, pid_t pid __unused, char *binfile __unused)
 	return (0);
 }
 
+static void
+elf_detach(void)
+{
+
+	if (g_pid != 0)
+		ptrace(PT_DETACH, g_pid, (caddr_t)1, 0);
+}
+
 /*
  * Write an ELF coredump for the given pid to the given fd.
  */
@@ -103,11 +116,20 @@ elf_coredump(int efd __unused, int fd, pid_t pid)
 	struct sseg_closure seginfo;
 	void *hdr;
 	size_t hdrsize;
-	char memname[64];
-	int memfd;
 	Elf_Phdr *php;
 	int i;
 
+	/* Attach to process to dump. */
+	g_pid = pid;
+	if (atexit(elf_detach) != 0)
+		err(1, "atexit");
+	errno = 0;
+	ptrace(PT_ATTACH, pid, NULL, 0);
+	if (errno)
+		err(1, "PT_ATTACH");
+	if (waitpid(pid, NULL, 0) == -1)
+		err(1, "waitpid");
+
 	/* Get the program's memory map. */
 	map = readmap(pid);
 
@@ -122,28 +144,31 @@ elf_coredump(int efd __unused, int fd, pid_t pid)
 	 * size is calculated.
 	 */
 	hdrsize = 0;
-	elf_puthdr(map, (void *)NULL, &hdrsize,
-	    (const prstatus_t *)NULL, (const prfpregset_t *)NULL,
-	    (const prpsinfo_t *)NULL, seginfo.count);
+	elf_puthdr(pid, map, NULL, &hdrsize, seginfo.count);
 
 	/*
 	 * Allocate memory for building the header, fill it up,
 	 * and write it out.
 	 */
-	if ((hdr = malloc(hdrsize)) == NULL)
+	if ((hdr = calloc(1, hdrsize)) == NULL)
 		errx(1, "out of memory");
-	elf_corehdr(fd, pid, map, seginfo.count, hdr, hdrsize);
+
+	/* Fill in the header. */
+	hdrsize = 0;
+	elf_puthdr(pid, map, hdr, &hdrsize, seginfo.count);
+
+	/* Write it to the core file. */
+	if (write(fd, hdr, hdrsize) == -1)
+		err(1, "write");
 
 	/* Write the contents of all of the writable segments. */
-	snprintf(memname, sizeof memname, "/proc/%d/mem", pid);
-	if ((memfd = open(memname, O_RDONLY)) == -1)
-		err(1, "cannot open %s", memname);
-
 	php = (Elf_Phdr *)((char *)hdr + sizeof(Elf_Ehdr)) + 1;
 	for (i = 0;  i < seginfo.count;  i++) {
+		struct ptrace_io_desc iorequest;
 		uintmax_t nleft = php->p_filesz;
 
-		lseek(memfd, (off_t)php->p_vaddr, SEEK_SET);
+		iorequest.piod_op = PIOD_READ_D;
+		iorequest.piod_offs = (caddr_t)php->p_vaddr;
 		while (nleft > 0) {
 			char buf[8*1024];
 			size_t nwant;
@@ -153,12 +178,12 @@ elf_coredump(int efd __unused, int fd, pid_t pid)
 				nwant = sizeof buf;
 			else
 				nwant = nleft;
-			ngot = read(memfd, buf, nwant);
-			if (ngot == -1)
-				err(1, "read from %s", memname);
+			iorequest.piod_addr = buf;
+			iorequest.piod_len = nwant;
+			ptrace(PT_IO, pid, (caddr_t)&iorequest, 0);
+			ngot = iorequest.piod_len;
 			if ((size_t)ngot < nwant)
-				errx(1, "short read from %s:"
-				    " wanted %zu, got %zd", memname,
+				errx(1, "short read wanted %d, got %d",
 				    nwant, ngot);
 			ngot = write(fd, buf, nwant);
 			if (ngot == -1)
@@ -166,10 +191,10 @@ elf_coredump(int efd __unused, int fd, pid_t pid)
 			if ((size_t)ngot != nwant)
 				errx(1, "short write");
 			nleft -= nwant;
+			iorequest.piod_offs += ngot;
 		}
 		php++;
 	}
-	close(memfd);
 	free(hdr);
 	freemap(map);
 }
@@ -231,30 +256,25 @@ each_writable_segment(vm_map_entry_t map, segment_callback func, void *closure)
 		(*func)(entry, closure);
 }
 
-/*
- * Write the core file header to the file, including padding up to
- * the page boundary.
- */
 static void
-elf_corehdr(int fd, pid_t pid, vm_map_entry_t map, int numsegs, void *hdr,
-    size_t hdrsize)
+elf_getstatus(pid_t pid, prpsinfo_t *psinfo)
 {
-	size_t off;
-	prstatus_t status;
-	prfpregset_t fpregset;
-	prpsinfo_t psinfo;
+	struct kinfo_proc kobj;
+	int name[4];
+	size_t len;
 
-	/* Gather the information for the header. */
-	readhdrinfo(pid, &status, &fpregset, &psinfo);
+	name[0] = CTL_KERN;
+	name[1] = KERN_PROC;
+	name[2] = KERN_PROC_PID;
+	name[3] = pid;
 
-	/* Fill in the header. */
-	memset(hdr, 0, hdrsize);
-	off = 0;
-	elf_puthdr(map, hdr, &off, &status, &fpregset, &psinfo, numsegs);
-
-	/* Write it to the core file. */
-	if (write(fd, hdr, hdrsize) == -1)
-		err(1, "write");
+	len = sizeof(kobj);
+	if (sysctl(name, 4, &kobj, &len, NULL, 0) == -1)
+		err(1, "error accessing kern.proc.pid.%u sysctl", pid);
+	if (kobj.ki_pid != pid)
+		err(1, "error accessing kern.proc.pid.%u sysctl datas", pid);
+	strncpy(psinfo->pr_fname, kobj.ki_comm, MAXCOMLEN);
+	strncpy(psinfo->pr_psargs, psinfo->pr_fname, PRARGSZ);
 }
 
 /*
@@ -262,13 +282,24 @@ elf_corehdr(int fd, pid_t pid, vm_map_entry_t map, int numsegs, void *hdr,
  * be NULL, in which case the header is sized but not actually generated.
  */
 static void
-elf_puthdr(vm_map_entry_t map, void *dst, size_t *off, const prstatus_t *status,
-    const prfpregset_t *fpregset, const prpsinfo_t *psinfo, int numsegs)
+elf_puthdr(pid_t pid, vm_map_entry_t map, void *dst, size_t *off, int numsegs)
 {
+	struct {
+		prstatus_t status;
+		prfpregset_t fpregset;
+		prpsinfo_t psinfo;
+	} *tempdata;
 	size_t ehoff;
 	size_t phoff;
 	size_t noteoff;
 	size_t notesz;
+	size_t threads;
+	lwpid_t *tids;
+	int i;
+
+	prstatus_t *status;
+	prfpregset_t *fpregset;
+	prpsinfo_t *psinfo;
 
 	ehoff = *off;
 	*off += sizeof(Elf_Ehdr);
@@ -277,14 +308,68 @@ elf_puthdr(vm_map_entry_t map, void *dst, size_t *off, const prstatus_t *status,
 	*off += (numsegs + 1) * sizeof(Elf_Phdr);
 
 	noteoff = *off;
-	elf_putnote(dst, off, "FreeBSD", NT_PRSTATUS, status,
-	    sizeof *status);
-	elf_putnote(dst, off, "FreeBSD", NT_FPREGSET, fpregset,
-	    sizeof *fpregset);
+
+	if (dst != NULL) {
+		if ((tempdata = calloc(1, sizeof(*tempdata))) == NULL)
+			errx(1, "out of memory");
+		status = &tempdata->status;
+		fpregset = &tempdata->fpregset;
+		psinfo = &tempdata->psinfo;
+	} else {
+		tempdata = NULL;
+		status = NULL;
+		fpregset = NULL;
+		psinfo = NULL;
+	}
+
+	errno = 0;
+	threads = ptrace(PT_GETNUMLWPS, pid, NULL, 0);
+	if (errno)
+		err(1, "PT_GETNUMLWPS");
+
+	if (dst != NULL) {
+		psinfo->pr_version = PRPSINFO_VERSION;
+		psinfo->pr_psinfosz = sizeof(prpsinfo_t);
+		elf_getstatus(pid, psinfo);
+
+	}
 	elf_putnote(dst, off, "FreeBSD", NT_PRPSINFO, psinfo,
 	    sizeof *psinfo);
+
+	if (dst != NULL) {
+		tids = malloc(threads * sizeof(*tids));
+		if (tids == NULL)
+			errx(1, "out of memory");
+		errno = 0;
+		ptrace(PT_GETLWPLIST, pid, (void *)tids, threads);
+		if (errno)
+			err(1, "PT_GETLWPLIST");
+	}
+	for (i = 0; i < threads; ++i) {
+		if (dst != NULL) {
+			status->pr_version = PRSTATUS_VERSION;
+			status->pr_statussz = sizeof(prstatus_t);
+			status->pr_gregsetsz = sizeof(gregset_t);
+			status->pr_fpregsetsz = sizeof(fpregset_t);
+			status->pr_osreldate = __FreeBSD_version;
+			status->pr_pid = tids[i];
+
+			ptrace(PT_GETREGS, tids[i], (void *)&status->pr_reg, 0);
+			ptrace(PT_GETFPREGS, tids[i], (void *)fpregset, 0);
+		}
+		elf_putnote(dst, off, "FreeBSD", NT_PRSTATUS, status,
+		    sizeof *status);
+		elf_putnote(dst, off, "FreeBSD", NT_FPREGSET, fpregset,
+		    sizeof *fpregset);
+	}
+
 	notesz = *off - noteoff;
 
+	if (dst != NULL) {
+		free(tids);
+		free(tempdata);
+	}
+
 	/* Align up to a page boundary for the program segments. */
 	*off = round_page(*off);
 
@@ -381,70 +466,7 @@ freemap(vm_map_entry_t map)
 }
 
 /*
- * Read the process information necessary to fill in the core file's header.
- */
-static void
-readhdrinfo(pid_t pid, prstatus_t *status, prfpregset_t *fpregset,
-    prpsinfo_t *psinfo)
-{
-	char name[64];
-	char line[256];
-	int fd;
-	int i;
-	int n;
-
-	memset(status, 0, sizeof *status);
-	status->pr_version = PRSTATUS_VERSION;
-	status->pr_statussz = sizeof(prstatus_t);
-	status->pr_gregsetsz = sizeof(gregset_t);
-	status->pr_fpregsetsz = sizeof(fpregset_t);
-	status->pr_osreldate = __FreeBSD_version;
-	status->pr_pid = pid;
-
-	memset(fpregset, 0, sizeof *fpregset);
-
-	memset(psinfo, 0, sizeof *psinfo);
-	psinfo->pr_version = PRPSINFO_VERSION;
-	psinfo->pr_psinfosz = sizeof(prpsinfo_t);
-
-	/* Read the general registers. */
-	snprintf(name, sizeof name, "/proc/%d/regs", pid);
-	if ((fd = open(name, O_RDONLY)) == -1)
-		err(1, "cannot open %s", name);
-	if ((n = read(fd, &status->pr_reg, sizeof status->pr_reg)) == -1)
-		err(1, "read error from %s", name);
-	if ((size_t)n < sizeof(status->pr_reg))
-		errx(1, "short read from %s: wanted %zu, got %d", name,
-		    sizeof status->pr_reg, n);
-	close(fd);
-
-	/* Read the floating point registers. */
-	snprintf(name, sizeof name, "/proc/%d/fpregs", pid);
-	if ((fd = open(name, O_RDONLY)) == -1)
-		err(1, "cannot open %s", name);
-	if ((n = read(fd, fpregset, sizeof *fpregset)) == -1)
-		err(1, "read error from %s", name);
-	if ((size_t)n < sizeof(*fpregset))
-		errx(1, "short read from %s: wanted %zu, got %d", name,
-		    sizeof *fpregset, n);
-	close(fd);
-
-	/* Read and parse the process status. */
-	snprintf(name, sizeof name, "/proc/%d/status", pid);
-	if ((fd = open(name, O_RDONLY)) == -1)
-		err(1, "cannot open %s", name);
-	if ((n = read(fd, line, sizeof line - 1)) == -1)
-		err(1, "read error from %s", name);
-	if (n > MAXCOMLEN)
-		n = MAXCOMLEN;
-	for (i = 0;  i < n && line[i] != ' ';  i++)
-		psinfo->pr_fname[i] = line[i];
-	strncpy(psinfo->pr_psargs, psinfo->pr_fname, PRARGSZ);
-	close(fd);
-}
-
-/*
- * Read the process's memory map using procfs, and return a list of
+ * Read the process's memory map using kinfo_getvmmap(), and return a list of
  * VM map entries.  Only the non-device read/writable segments are
  * returned.  The map entries in the list aren't fully filled in; only
  * the items we need are present.
@@ -452,83 +474,44 @@ readhdrinfo(pid_t pid, prstatus_t *status, prfpregset_t *fpregset,
 static vm_map_entry_t
 readmap(pid_t pid)
 {
-	char mapname[64];
-	int mapfd;
-	ssize_t mapsize;
-	size_t bufsize;
-	char *mapbuf;
-	int pos;
-	vm_map_entry_t map;
-	vm_map_entry_t *linkp;
+	vm_map_entry_t ent, *linkp, map;
+	struct kinfo_vmentry *vmentl, *kve;
+	int i, nitems;
 
-	snprintf(mapname, sizeof mapname, "/proc/%d/map", pid);
-	if ((mapfd = open(mapname, O_RDONLY)) == -1)
-		err(1, "cannot open %s", mapname);
+	vmentl = kinfo_getvmmap(pid, &nitems);
+	if (vmentl == NULL)
+		err(1, "cannot retrieve mappings for %u process", pid);
 
-	/*
-	 * Procfs requires (for consistency) that the entire memory map
-	 * be read with a single read() call.  Start with a reasonably sized
-	 * buffer, and double it until it is big enough.
-	 */
-	bufsize = 8 * 1024;
-	mapbuf = NULL;
-	for ( ; ; ) {
-		if ((mapbuf = realloc(mapbuf, bufsize + 1)) == NULL)
-			errx(1, "out of memory");
-		mapsize = read(mapfd, mapbuf, bufsize);
-		if (mapsize != -1 || errno != EFBIG)
-			break;
-		bufsize *= 2;
-		/* This lseek shouldn't be necessary, but it is. */
-		lseek(mapfd, (off_t)0, SEEK_SET);
-	}
-	if (mapsize == -1)
-		err(1, "read error from %s", mapname);
-	if (mapsize == 0)
-		errx(1, "empty map file %s", mapname);
-	mapbuf[mapsize] = 0;
-	close(mapfd);
-
-	pos = 0;
 	map = NULL;
 	linkp = ↦
-	while (pos < mapsize) {
-		vm_map_entry_t ent;
-		u_long start;
-		u_long end;
-		char prot[4];
-		char type[16];
-		int n;
-		int len;
+	for (i = 0; i < nitems; i++) {
+		kve = &vmentl[i];
 
-		len = 0;
-		n = sscanf(mapbuf + pos, "%lx %lx %*d %*d %*x %3[-rwx]"
-		    " %*d %*d %*x %*s %*s %16s %*s%*[\n]%n",
-		    &start, &end, prot, type, &len);
-		if (n != 4 || len == 0)
-			errx(1, "ill-formed line in %s starting at character %d", mapname, pos + 1);
-		pos += len;
-
-		/* Ignore segments of the wrong kind, and unwritable ones */
-		if (strncmp(prot, "rw", 2) != 0 ||
-		    (strcmp(type, "default") != 0 &&
-		    strcmp(type, "vnode") != 0 &&
-		    strcmp(type, "swap") != 0))
+		/*
+		 * Ignore segments of the wrong kind and ones which are not
+		 * readable and writable.
+		 */
+		if ((kve->kve_protection & KVME_PROT_WRITE) == 0 ||
+		    (kve->kve_protection & KVME_PROT_READ) == 0 ||
+		    (kve->kve_type != KVME_TYPE_DEFAULT &&
+		    kve->kve_type != KVME_TYPE_VNODE &&
+		    kve->kve_type != KVME_TYPE_SWAP))
 			continue;
 
-		if ((ent = (vm_map_entry_t)calloc(1, sizeof *ent)) == NULL)
+		ent = calloc(1, sizeof(*ent));
+		if (ent == NULL)
 			errx(1, "out of memory");
-		ent->start = start;
-		ent->end = end;
+		ent->start = (vm_offset_t)kve->kve_start;
+		ent->end = (vm_offset_t)kve->kve_end;
 		ent->protection = VM_PROT_READ | VM_PROT_WRITE;
-		if (prot[2] == 'x')
-		    ent->protection |= VM_PROT_EXECUTE;
+		if ((kve->kve_protection & KVME_PROT_EXEC) != 0)
+			ent->protection |= VM_PROT_EXECUTE;
 
 		*linkp = ent;
 		linkp = &ent->next;
 	}
-	free(mapbuf);
-	return map;
+	free(vmentl);
+	return (map);
 }
 
 struct dumpers elfdump = { elf_ident, elf_coredump };
diff --git a/usr.bin/gcore/gcore.1 b/usr.bin/gcore/gcore.1
index 981e0be3b34..a5be26a3f4d 100644
--- a/usr.bin/gcore/gcore.1
+++ b/usr.bin/gcore/gcore.1
@@ -32,7 +32,7 @@
 .\"	@(#)gcore.1	8.2 (Berkeley) 4/18/94
 .\" $FreeBSD$
 .\"
-.Dd April 18, 1994
+.Dd November 18, 2009
 .Dt GCORE 1
 .Os
 .Sh NAME
@@ -55,11 +55,6 @@ By default, the core is written to the file
 The process identifier,
 .Ar pid ,
 must be given on the command line.
-If no executable image is
-specified,
-.Nm
-will use
-.Dq Pa /proc//file .
 .Pp
 The following options are available:
 .Bl -tag -width indent
@@ -80,8 +75,6 @@ The same effect can be achieved manually with
 .Bl -tag -width /var/log/messages -compact
 .It Pa core.
 the core image
-.It Pa /proc//file
-the executable image
 .El
 .Sh HISTORY
 A
@@ -89,12 +82,15 @@ A
 utility appeared in
 .Bx 4.2 .
 .Sh BUGS
-Context switches or paging activity that occur while
+Because of the
+.Xr ptrace 2
+usage
 .Nm
-is running may cause the program to become confused.
-For best results, use
-.Fl s
-to temporarily stop the target process.
+may not work with processes which are actively investigated with
+.Xr truss 1
+or
+.Xr gdb 1 .
+Additionally, interruptable sleeps may exit with EINTR.
 .Pp
 The
 .Nm
diff --git a/usr.bin/gcore/gcore.c b/usr.bin/gcore/gcore.c
index 7005e834ff9..35d5363f143 100644
--- a/usr.bin/gcore/gcore.c
+++ b/usr.bin/gcore/gcore.c
@@ -61,6 +61,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -83,10 +84,11 @@ SET_DECLARE(dumpset, struct dumpers);
 int
 main(int argc, char *argv[])
 {
-	int ch, efd, fd, sflag;
+	int ch, efd, fd, name[4], sflag;
 	char *binfile, *corefile;
-	char fname[MAXPATHLEN];
+	char passpath[MAXPATHLEN], fname[MAXPATHLEN];
 	struct dumpers **d, *dumper;
+	size_t len;
 
 	sflag = 0;
 	corefile = NULL;
@@ -109,9 +111,14 @@ main(int argc, char *argv[])
 	switch (argc) {
 	case 1:
 		pid = atoi(argv[0]);
-		asprintf(&binfile, "/proc/%d/file", pid);
-		if (binfile == NULL)
-			errx(1, "allocation failure");
+		name[0] = CTL_KERN;
+		name[1] = KERN_PROC;
+		name[2] = KERN_PROC_PATHNAME;
+		name[3] = pid;
+		len = sizeof(passpath);
+		if (sysctl(name, 4, passpath, &len, NULL, 0) == -1)
+			errx(1, "kern.proc.pathname failure");
+		binfile = passpath;
 		break;
 	case 2:
 		pid = atoi(argv[1]);
diff --git a/usr.bin/gencat/Makefile b/usr.bin/gencat/Makefile
index a6c9991bb5b..2cf86df59e1 100644
--- a/usr.bin/gencat/Makefile
+++ b/usr.bin/gencat/Makefile
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
 PROG=	gencat
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/gencat/gencat.c b/usr.bin/gencat/gencat.c
index 306f48d3d7b..ffee912cc05 100644
--- a/usr.bin/gencat/gencat.c
+++ b/usr.bin/gencat/gencat.c
@@ -94,13 +94,13 @@ __FBSDID("$FreeBSD$");
 struct _msgT {
 	long    msgId;
 	char   *str;
-        LIST_ENTRY(_msgT) entries;
+	LIST_ENTRY(_msgT) entries;
 };
 
 struct _setT {
 	long    setId;
-        LIST_HEAD(msghead, _msgT) msghead;
-        LIST_ENTRY(_setT) entries;
+	LIST_HEAD(msghead, _msgT) msghead;
+	LIST_ENTRY(_setT) entries;
 };
 
 LIST_HEAD(sethead, _setT) sethead;
@@ -130,17 +130,17 @@ void	usage(void);
 int	main(int, char **);
 
 void
-usage()
+usage(void)
 {
 	fprintf(stderr, "usage: %s catfile msgfile ...\n", getprogname());
-    exit(1);
+	exit(1);
 }
 
 int
 main(int argc, char **argv)
 {
 	int     ofd, ifd;
-    char	*catfile = NULL;
+	char	*catfile = NULL;
 	int     c;
 
 #define DEPRECATEDMSG	1
@@ -419,23 +419,23 @@ MCParse(int fd)
 				cptr += 5;
 				if (!*cptr)
 					quote = 0;
-		else {
+				else {
 					cptr = wskip(cptr);
 					if (!*cptr)
 						quote = 0;
 					else
 						quote = *cptr;
-		}
+				}
 			} else if (isspace((unsigned char) *cptr)) {
 				;
-	    } else {
+			} else {
 				if (*cptr) {
 					cptr = wskip(cptr);
 					if (*cptr)
 						warning(cptr, "unrecognized line");
 				}
-	    }
-        } else {
+			}
+		} else {
 			/*
 			 * First check for (and eat) empty lines....
 			 */
@@ -453,7 +453,7 @@ MCParse(int fd)
 			} else {
 				warning(cptr, "neither blank line nor start of a message id");
 				continue;
-		}
+			}
 			/*
 			 * If we have a message ID, but no message,
 			 * then this means "delete this message id
@@ -461,12 +461,12 @@ MCParse(int fd)
 			 */
 			if (!*cptr) {
 				MCDelMsg(msgid);
-	    } else {
+			} else {
 				str = getmsg(fd, cptr, quote);
 				MCAddMsg(msgid, str);
-	    }
+			}
+		}
 	}
-    }
 }
 
 void
@@ -686,7 +686,7 @@ MCAddSet(int setId)
 
 	if (p && p->setId == setId) {
 		;
-    } else {
+	} else {
 		p = xmalloc(sizeof(struct _setT));
 		memset(p, '\0', sizeof(struct _setT));
 		LIST_INIT(&p->msghead);
@@ -697,8 +697,8 @@ MCAddSet(int setId)
 			LIST_INSERT_HEAD(&sethead, p, entries);
 		} else {
 			LIST_INSERT_AFTER(q, p, entries);
-    }
-}
+		}
+	}
 
 	curSet = p;
 }
@@ -718,7 +718,7 @@ MCAddMsg(int msgId, const char *str)
 	if (msgId > NL_MSGMAX) {
 		error("msgID exceeds limit");
 		/* NOTREACHED */
-    }
+	}
 
 	p = curSet->msghead.lh_first;
 	q = NULL;
@@ -739,7 +739,7 @@ MCAddMsg(int msgId, const char *str)
 
 	p->msgId = msgId;
 	p->str = xstrdup(str);
-	    }
+}
 
 void
 MCDelSet(int setId)
@@ -756,13 +756,13 @@ MCDelSet(int setId)
 		while (msg) {
 			free(msg->str);
 			LIST_REMOVE(msg, entries);
-	}
+		}
 
 		LIST_REMOVE(set, entries);
 		return;
-    }
-	warning(NULL, "specified set doesn't exist");
 	}
+	warning(NULL, "specified set doesn't exist");
+}
 
 void
 MCDelMsg(int msgId)
@@ -779,6 +779,6 @@ MCDelMsg(int msgId)
 		free(msg->str);
 		LIST_REMOVE(msg, entries);
 		return;
-    }
+	}
 	warning(NULL, "specified msg doesn't exist");
 }
diff --git a/usr.bin/getent/Makefile b/usr.bin/getent/Makefile
index 6cc3d56cfd1..85bc1b1ec71 100644
--- a/usr.bin/getent/Makefile
+++ b/usr.bin/getent/Makefile
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
 PROG=	getent
-WARNS?=	3
 
 .include 
diff --git a/usr.bin/gprof/Makefile b/usr.bin/gprof/Makefile
index a24d9cda6c8..506232597a4 100644
--- a/usr.bin/gprof/Makefile
+++ b/usr.bin/gprof/Makefile
@@ -7,4 +7,6 @@ SRCS=	gprof.c aout.c arcs.c dfn.c elf.c lookup.c hertz.c \
 FILES=	gprof.flat gprof.callg
 FILESDIR=	${SHAREDIR}/misc
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/gprof/aout.c b/usr.bin/gprof/aout.c
index 2ccf818f42e..9103148997d 100644
--- a/usr.bin/gprof/aout.c
+++ b/usr.bin/gprof/aout.c
@@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
+#include 
 
 #include "gprof.h"
 
diff --git a/usr.bin/gzip/Makefile b/usr.bin/gzip/Makefile
index dae5f842a32..04803373875 100644
--- a/usr.bin/gzip/Makefile
+++ b/usr.bin/gzip/Makefile
@@ -8,7 +8,6 @@ MAN=		gzip.1 gzexe.1 zdiff.1 zforce.1 zmore.1 znew.1
 
 DPADD=		${LIBZ}
 LDADD=		-lz
-WARNS?=		6
 
 .if ${MK_BZIP2_SUPPORT} != "no"
 DPADD+=		${LIBBZ2}
diff --git a/usr.bin/gzip/unbzip2.c b/usr.bin/gzip/unbzip2.c
index 4835325a6d2..c744e564ef1 100644
--- a/usr.bin/gzip/unbzip2.c
+++ b/usr.bin/gzip/unbzip2.c
@@ -36,7 +36,7 @@
 static off_t
 unbzip2(int in, int out, char *pre, size_t prelen, off_t *bytes_in)
 {
-	int		ret, end_of_file;
+	int		ret, end_of_file, cold = 0;
 	off_t		bytes_out = 0;
 	bz_stream	bzs;
 	static char	*inbuf, *outbuf;
@@ -86,8 +86,18 @@ unbzip2(int in, int out, char *pre, size_t prelen, off_t *bytes_in)
 	        switch (ret) {
 	        case BZ_STREAM_END:
 	        case BZ_OK:
-	                if (ret == BZ_OK && end_of_file)
-	                        maybe_err("read");
+	                if (ret == BZ_OK && end_of_file) {
+				/*
+				 * If we hit this after a stream end, consider
+				 * it as the end of the whole file and don't
+				 * bail out.
+				 */
+				if (cold == 1)
+					ret = BZ_STREAM_END;
+				else
+					maybe_errx("truncated file");
+			}
+			cold = 0;
 	                if (!tflag && bzs.avail_out != BUFLEN) {
 				ssize_t	n;
 
@@ -100,6 +110,7 @@ unbzip2(int in, int out, char *pre, size_t prelen, off_t *bytes_in)
 				if (BZ2_bzDecompressEnd(&bzs) != BZ_OK ||
 				    BZ2_bzDecompressInit(&bzs, 0, 0) != BZ_OK)
 					maybe_errx("bzip2 re-init");
+				cold = 1;
 				ret = BZ_OK;
 			}
 			break;
diff --git a/usr.bin/head/Makefile b/usr.bin/head/Makefile
index 002b3f385b3..60b0a2f33ce 100644
--- a/usr.bin/head/Makefile
+++ b/usr.bin/head/Makefile
@@ -2,6 +2,5 @@
 # $FreeBSD$
 
 PROG=	head
-WARNS=	6
 
 .include 
diff --git a/usr.bin/hexdump/Makefile b/usr.bin/hexdump/Makefile
index 3252fc9af14..4cd3cc5dc62 100644
--- a/usr.bin/hexdump/Makefile
+++ b/usr.bin/hexdump/Makefile
@@ -7,6 +7,5 @@ MAN=	hexdump.1 od.1
 MLINKS=	hexdump.1 hd.1
 LINKS=	${BINDIR}/hexdump ${BINDIR}/od
 LINKS+=	${BINDIR}/hexdump ${BINDIR}/hd
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/host/Makefile b/usr.bin/host/Makefile
index 986191466a9..e2909e13782 100644
--- a/usr.bin/host/Makefile
+++ b/usr.bin/host/Makefile
@@ -15,6 +15,8 @@ SRCS+=		dighost.c host.c
 CFLAGS+=	-I${SRCDIR}/include
 CFLAGS+=	-I${BIND_DIR}/lib/isc/${ISC_ATOMIC_ARCH}/include
 
+WARNS?=		1
+
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
diff --git a/usr.bin/id/Makefile b/usr.bin/id/Makefile
index 96c162f7565..7d78b50c744 100644
--- a/usr.bin/id/Makefile
+++ b/usr.bin/id/Makefile
@@ -4,7 +4,6 @@
 .include 
 
 PROG=	id
-WARNS?=	6
 LINKS=	${BINDIR}/id ${BINDIR}/groups
 LINKS+=	${BINDIR}/id ${BINDIR}/whoami
 MAN=	id.1 groups.1 whoami.1
diff --git a/usr.bin/ipcrm/Makefile b/usr.bin/ipcrm/Makefile
index 47e4ccc8e28..f55311c1176 100644
--- a/usr.bin/ipcrm/Makefile
+++ b/usr.bin/ipcrm/Makefile
@@ -7,4 +7,6 @@ LDADD=	-lkvm
 CFLAGS+=-I${.CURDIR}/../ipcs
 .PATH:  ${.CURDIR}/../ipcs
 
+WARNS?=	0
+
 .include 
diff --git a/usr.bin/ipcs/Makefile b/usr.bin/ipcs/Makefile
index 8ee1d4324e5..0d422e189f6 100644
--- a/usr.bin/ipcs/Makefile
+++ b/usr.bin/ipcs/Makefile
@@ -5,4 +5,6 @@ SRCS=	ipcs.c ipc.c
 DPADD=	${LIBKVM}
 LDADD=	-lkvm
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/kdump/Makefile b/usr.bin/kdump/Makefile
index 2ca8561c4eb..832b2dc20ac 100644
--- a/usr.bin/kdump/Makefile
+++ b/usr.bin/kdump/Makefile
@@ -7,6 +7,8 @@ PROG=		kdump
 SRCS=		kdump.c ioctl.c kdump_subr.c subr.c
 CFLAGS+=	-I${.CURDIR}/../ktrace -I${.CURDIR} -I${.CURDIR}/../..
 
+WARNS?=		0
+
 CLEANFILES=	ioctl.c kdump_subr.c
 
 ioctl.c: mkioctls
diff --git a/usr.bin/kdump/kdump.c b/usr.bin/kdump/kdump.c
index 60ce05f4f2d..305e584e59b 100644
--- a/usr.bin/kdump/kdump.c
+++ b/usr.bin/kdump/kdump.c
@@ -1121,17 +1121,14 @@ ktruser_malloc(int len, unsigned char *p)
 {
 	struct utrace_malloc *ut = (struct utrace_malloc *)p;
 
-	if (ut->p == NULL) {
-		if (ut->s == 0 && ut->r == NULL)
-			printf("malloc_init()\n");
-		else
-			printf("%p = malloc(%zu)\n", ut->r, ut->s);
-	} else {
-		if (ut->s == 0)
-			printf("free(%p)\n", ut->p);
-		else
-			printf("%p = realloc(%p, %zu)\n", ut->r, ut->p, ut->s);
-	}
+	if (ut->p == (void *)(intptr_t)(-1))
+		printf("malloc_init()\n");
+	else if (ut->s == 0)
+		printf("free(%p)\n", ut->p);
+	else if (ut->p == NULL)
+		printf("%p = malloc(%zu)\n", ut->r, ut->s);
+	else
+		printf("%p = realloc(%p, %zu)\n", ut->r, ut->p, ut->s);
 }
 
 void
diff --git a/usr.bin/keylogin/Makefile b/usr.bin/keylogin/Makefile
index bf279eb25b2..4c03051a48f 100644
--- a/usr.bin/keylogin/Makefile
+++ b/usr.bin/keylogin/Makefile
@@ -5,4 +5,6 @@ PROG=	keylogin
 DPADD=	${LIBRPCSVC}
 LDADD=	-lrpcsvc
 
+WARNS?=	0
+
 .include 
diff --git a/usr.bin/killall/killall.1 b/usr.bin/killall/killall.1
index 632c0660960..19362bc6d65 100644
--- a/usr.bin/killall/killall.1
+++ b/usr.bin/killall/killall.1
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd May 27, 2009
+.Dd December 25, 2009
 .Os
 .Dt KILLALL 1
 .Sh NAME
@@ -145,6 +145,17 @@ command appeared in
 It has been modeled after the
 .Nm
 command as available on other platforms.
+.Sh IMPLEMENTATION NOTES
+This
+.Fx
+implementation of
+.Nm
+has completely different semantics as compared to the traditional
+.Ux
+System V behavior of
+.Nm .
+The latter will kill all processes that the current user is able to
+kill, and is intended to be used by the system shutdown process only.
 .Sh AUTHORS
 .An -nosplit
 The
diff --git a/usr.bin/ktrace/Makefile b/usr.bin/ktrace/Makefile
index c00bb751045..267992353ae 100644
--- a/usr.bin/ktrace/Makefile
+++ b/usr.bin/ktrace/Makefile
@@ -5,4 +5,6 @@ PROG=	ktrace
 SRCS=	ktrace.c subr.c
 MLINKS= ktrace.1 trace.1 
 
+WARNS?=	4
+
 .include 
diff --git a/usr.bin/ktrdump/Makefile b/usr.bin/ktrdump/Makefile
index 6b5ff127165..c30dc3d6d7e 100644
--- a/usr.bin/ktrdump/Makefile
+++ b/usr.bin/ktrdump/Makefile
@@ -5,4 +5,6 @@ DPADD=	${LIBKVM}
 LDADD=	-lkvm
 MAN=	ktrdump.8
 
+WARNS?=	2
+
 .include 
diff --git a/usr.bin/lam/lam.c b/usr.bin/lam/lam.c
index 333549fe17a..0cb681a28fc 100644
--- a/usr.bin/lam/lam.c
+++ b/usr.bin/lam/lam.c
@@ -221,7 +221,7 @@ gatherline(struct openfile *ip)
 }
 
 static void
-usage()
+usage(void)
 {
 	fprintf(stderr, "%s\n%s\n",
 "usage: lam [ -f min.max ] [ -s sepstring ] [ -t c ] file ...",
diff --git a/usr.bin/last/Makefile b/usr.bin/last/Makefile
index f7e88115e9b..0bd2f05eb27 100644
--- a/usr.bin/last/Makefile
+++ b/usr.bin/last/Makefile
@@ -3,4 +3,6 @@
 
 PROG=	last
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/lastcomm/Makefile b/usr.bin/lastcomm/Makefile
index c79cd7442a4..84708d9fb41 100644
--- a/usr.bin/lastcomm/Makefile
+++ b/usr.bin/lastcomm/Makefile
@@ -3,6 +3,5 @@
 
 PROG=	lastcomm
 SRCS=	lastcomm.c readrec.c
-WARNS?= 6
 
 .include 
diff --git a/usr.bin/lastcomm/pathnames.h b/usr.bin/lastcomm/pathnames.h
index 0737970dab9..04af4402064 100644
--- a/usr.bin/lastcomm/pathnames.h
+++ b/usr.bin/lastcomm/pathnames.h
@@ -31,8 +31,8 @@
  * SUCH DAMAGE.
  *
  *	@(#)pathnames.h	8.1 (Berkeley) 6/6/93
+ *
+ * $FreeBSD$
  */
 
-#include 
-
 #define	_PATH_ACCT	"/var/account/acct"
diff --git a/usr.bin/ldd/Makefile b/usr.bin/ldd/Makefile
index 357f9f37c77..cd172280d78 100644
--- a/usr.bin/ldd/Makefile
+++ b/usr.bin/ldd/Makefile
@@ -5,6 +5,5 @@ SRCS=		ldd.c
 .if ${MACHINE_ARCH} == "i386"
 SRCS+=		sods.c
 .endif
-WARNS?=		6
 
 .include 
diff --git a/usr.bin/ldd/ldd.1 b/usr.bin/ldd/ldd.1
index 72afb3903c5..b245631fdae 100644
--- a/usr.bin/ldd/ldd.1
+++ b/usr.bin/ldd/ldd.1
@@ -63,7 +63,7 @@ The following is an example of a shell pipeline which uses the
 option.
 It will print a report of all ELF binaries in the current directory,
 which link against libc.so.6:
-.Dl "find . -type f | xargs -n1 file -F " " | grep ELF | cut -f1 -d' ' | xargs ldd -f '%A %o\en' | grep libc.so.6"
+.Dl "find . -type f | xargs -n1 file -F ' ' | grep ELF | cut -f1 -d' ' | xargs ldd -f '%A %o\en' | grep libc.so.6"
 .Sh SEE ALSO
 .Xr ld 1 ,
 .Xr nm 1 ,
diff --git a/usr.bin/leave/Makefile b/usr.bin/leave/Makefile
index 859c11cbf84..548479768a0 100644
--- a/usr.bin/leave/Makefile
+++ b/usr.bin/leave/Makefile
@@ -3,4 +3,6 @@
 
 PROG=	leave
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/less/Makefile.common b/usr.bin/less/Makefile.common
index fcc6ccfa1ce..cffb85a1f30 100644
--- a/usr.bin/less/Makefile.common
+++ b/usr.bin/less/Makefile.common
@@ -4,6 +4,7 @@ LSDIR=	${.CURDIR}/../../contrib/less
 .PATH:	${LSDIR}
 
 CFLAGS+=-I${.CURDIR}/../less -I${LSDIR}
+WARNS?=	1
 
 .SUFFIXES: .nro .1
 
diff --git a/usr.bin/lex/Makefile b/usr.bin/lex/Makefile
index 6d0ea5b44ec..e16568fda12 100644
--- a/usr.bin/lex/Makefile
+++ b/usr.bin/lex/Makefile
@@ -24,6 +24,8 @@ MLINKS+=	lex.1 flex.1
 MLINKS+=	lex.1 flex++.1
 MLINKS+=	lex.1 lex++.1
 
+WARNS?=		2
+
 CLEANFILES=	scan.c skel.c
 
 SUBDIR=		lib
diff --git a/usr.bin/lex/flex.skl b/usr.bin/lex/flex.skl
index 460b2fa575e..21117118fd6 100644
--- a/usr.bin/lex/flex.skl
+++ b/usr.bin/lex/flex.skl
@@ -747,7 +747,7 @@ void yyFlexLexer::LexerOutput( const char* buf, int size )
  */
 
 %-
-static int yy_get_next_buffer()
+static int yy_get_next_buffer(void)
 %+
 int yyFlexLexer::yy_get_next_buffer()
 %*
@@ -883,7 +883,7 @@ int yyFlexLexer::yy_get_next_buffer()
 /* yy_get_previous_state - get the state just before the EOB char was reached */
 
 %-
-static yy_state_type yy_get_previous_state()
+static yy_state_type yy_get_previous_state(void)
 %+
 yy_state_type yyFlexLexer::yy_get_previous_state()
 %*
@@ -982,7 +982,7 @@ void yyFlexLexer::yyunput( int c, char* yy_bp )
 #ifdef __cplusplus
 static int yyinput()
 #else
-static int input()
+static int input(void)
 #endif
 %+
 int yyFlexLexer::yyinput()
diff --git a/usr.bin/lex/initscan.c b/usr.bin/lex/initscan.c
index 7617c693dd4..59c81f7512f 100644
--- a/usr.bin/lex/initscan.c
+++ b/usr.bin/lex/initscan.c
@@ -2894,7 +2894,7 @@ case YY_STATE_EOF(LINEDIR):
  *	EOB_ACT_END_OF_FILE - end of file
  */
 
-static int yy_get_next_buffer()
+static int yy_get_next_buffer(void)
 	{
 	char *dest = yy_current_buffer->yy_ch_buf;
 	char *source = yytext_ptr;
@@ -3026,7 +3026,7 @@ static int yy_get_next_buffer()
 
 /* yy_get_previous_state - get the state just before the EOB char was reached */
 
-static yy_state_type yy_get_previous_state()
+static yy_state_type yy_get_previous_state(void)
 	{
 	yy_state_type yy_current_state;
 	char *yy_cp;
@@ -3138,7 +3138,7 @@ char *yy_bp;
 #ifdef __cplusplus
 static int yyinput()
 #else
-static int input()
+static int input(void)
 #endif
 	{
 	int c;
diff --git a/usr.bin/lex/lib/Makefile b/usr.bin/lex/lib/Makefile
index dcc75185c04..b43d803e222 100644
--- a/usr.bin/lex/lib/Makefile
+++ b/usr.bin/lex/lib/Makefile
@@ -6,6 +6,8 @@ LIB=    ln
 SRCS=   libmain.c libyywrap.c
 NO_PIC=
 
+WARNS?=	2
+
 .if ${MK_INSTALLLIB} != "no"
 LINKS=  ${LIBDIR}/libln.a ${LIBDIR}/libl.a
 LINKS+=	${LIBDIR}/libln.a ${LIBDIR}/libfl.a
diff --git a/usr.bin/limits/Makefile b/usr.bin/limits/Makefile
index 5999cdbe060..013317824db 100644
--- a/usr.bin/limits/Makefile
+++ b/usr.bin/limits/Makefile
@@ -3,6 +3,5 @@
 PROG=	limits
 DPADD=	${LIBUTIL}
 LDADD=	-lutil
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/locate/Makefile.inc b/usr.bin/locate/Makefile.inc
index 48174083d84..5ce397d8540 100644
--- a/usr.bin/locate/Makefile.inc
+++ b/usr.bin/locate/Makefile.inc
@@ -1,3 +1,5 @@
 # $FreeBSD$
 
 LIBEXECDIR?=	/usr/libexec
+
+WARNS?=		0
diff --git a/usr.bin/locate/locate/Makefile b/usr.bin/locate/locate/Makefile
index 9a618da4e8f..a139ff28202 100644
--- a/usr.bin/locate/locate/Makefile
+++ b/usr.bin/locate/locate/Makefile
@@ -7,6 +7,8 @@ CFLAGS+= -I${.CURDIR} -DMMAP # -DDEBUG (print time) -O2 (10% faster)
 SCRIPTS=updatedb.sh mklocatedb.sh concatdb.sh
 MAN=	locate.1 locate.updatedb.8
 
+WARNS?=	2
+
 SCRIPTSDIR=	${LIBEXECDIR}
 .for script in ${SCRIPTS}
 SCRIPTSNAME_${script}=	locate.${script:R}
diff --git a/usr.bin/lock/Makefile b/usr.bin/lock/Makefile
index dc09a87b1b9..8093ca51ba1 100644
--- a/usr.bin/lock/Makefile
+++ b/usr.bin/lock/Makefile
@@ -7,4 +7,6 @@ BINMODE=4555
 DPADD=	${LIBCRYPT}
 LDADD=	-lcrypt
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/logger/Makefile b/usr.bin/logger/Makefile
index 6ff72245279..922192ce919 100644
--- a/usr.bin/logger/Makefile
+++ b/usr.bin/logger/Makefile
@@ -4,7 +4,6 @@
 .include 
 
 PROG=	logger
-WARNS?=	6
 
 .if ${MK_INET6_SUPPORT} != "no"
 CFLAGS+= -DINET6
diff --git a/usr.bin/login/Makefile b/usr.bin/login/Makefile
index 22c73b9993d..bd34ed9c626 100644
--- a/usr.bin/login/Makefile
+++ b/usr.bin/login/Makefile
@@ -9,6 +9,8 @@ CFLAGS+=-DLOGALL
 DPADD=	${LIBUTIL} ${LIBPAM}
 LDADD=	-lutil ${MINUSLPAM}
 
+WARNS?=	5
+
 .if ${MK_AUDIT} != "no"
 SRCS+=	login_audit.c
 CFLAGS+= -DUSE_BSM_AUDIT
diff --git a/usr.bin/login/login.c b/usr.bin/login/login.c
index 2a429247d9a..da182aa90e8 100644
--- a/usr.bin/login/login.c
+++ b/usr.bin/login/login.c
@@ -737,7 +737,7 @@ auth_pam(void)
  * Export any environment variables PAM modules may have set
  */
 static void
-export_pam_environment()
+export_pam_environment(void)
 {
 	char **pam_env;
 	char **pp;
@@ -786,7 +786,7 @@ export(const char *s)
 }
 
 static void
-usage()
+usage(void)
 {
 
 	(void)fprintf(stderr, "usage: login [-fp] [-h hostname] [username]\n");
@@ -797,7 +797,7 @@ usage()
  * Prompt user and read login name from stdin.
  */
 static char *
-getloginname()
+getloginname(void)
 {
 	char *nbuf, *p;
 	int ch;
@@ -941,7 +941,7 @@ pam_syslog(const char *msg)
  * Shut down PAM
  */
 static void
-pam_cleanup()
+pam_cleanup(void)
 {
 
 	if (pamh != NULL) {
diff --git a/usr.bin/login/login_fbtab.c b/usr.bin/login/login_fbtab.c
index f6111a1cd35..afa320f8399 100644
--- a/usr.bin/login/login_fbtab.c
+++ b/usr.bin/login/login_fbtab.c
@@ -81,10 +81,7 @@ static void	login_protect(const char *, char *, int, uid_t, gid_t);
 /* login_fbtab - apply protections specified in /etc/fbtab or logindevperm */
 
 void
-login_fbtab(tty, uid, gid)
-char   *tty;
-uid_t   uid;
-gid_t   gid;
+login_fbtab(char *tty, uid_t uid, gid_t gid)
 {
     FILE   *fp;
     char    buf[BUFSIZ];
@@ -124,12 +121,7 @@ gid_t   gid;
 /* login_protect - protect one device entry */
 
 void
-login_protect(table, pattern, mask, uid, gid)
-const char *table;
-char *pattern;
-int mask;
-uid_t uid;
-gid_t gid;
+login_protect(const char *table, char *pattern, int mask, uid_t uid, gid_t gid)
 {
     glob_t  gl;
     char   *path;
diff --git a/usr.bin/logins/Makefile b/usr.bin/logins/Makefile
index 42840fb28b9..ad88cd92614 100644
--- a/usr.bin/logins/Makefile
+++ b/usr.bin/logins/Makefile
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
 PROG=	logins
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/logname/Makefile b/usr.bin/logname/Makefile
index 4e910ce7329..875df2c0abf 100644
--- a/usr.bin/logname/Makefile
+++ b/usr.bin/logname/Makefile
@@ -2,6 +2,5 @@
 # $FreeBSD$
 
 PROG=	logname
-WARNS?= 6
 
 .include 
diff --git a/usr.bin/look/Makefile b/usr.bin/look/Makefile
index 64d778891fb..a6200392209 100644
--- a/usr.bin/look/Makefile
+++ b/usr.bin/look/Makefile
@@ -1,5 +1,8 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/9/93
+# $FreeBSD$
 
 PROG=	look
 
+WARNS?=	2
+
 .include 
diff --git a/usr.bin/lsvfs/Makefile b/usr.bin/lsvfs/Makefile
index 0c33583257c..324b6fd0746 100644
--- a/usr.bin/lsvfs/Makefile
+++ b/usr.bin/lsvfs/Makefile
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
 PROG=	lsvfs
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/m4/Makefile b/usr.bin/m4/Makefile
index 702b3f3d244..feceb0ca80d 100644
--- a/usr.bin/m4/Makefile
+++ b/usr.bin/m4/Makefile
@@ -9,4 +9,6 @@ CFLAGS+=-DEXTENDED
 
 SRCS=	eval.c expr.c look.c main.c misc.c gnum4.c trace.c
 
+WARNS?=	0
+
 .include 
diff --git a/usr.bin/mail/Makefile b/usr.bin/mail/Makefile
index 5fa455b19d3..da3e4336b4c 100644
--- a/usr.bin/mail/Makefile
+++ b/usr.bin/mail/Makefile
@@ -11,6 +11,8 @@ EFILES=	mail.rc
 LINKS=	${BINDIR}/mail ${BINDIR}/Mail ${BINDIR}/mail ${BINDIR}/mailx
 MLINKS=	mail.1 Mail.1 mail.1 mailx.1
 
+WARNS?=	1
+
 .PATH: ${.CURDIR}/misc
 
 etc-mailrc:
diff --git a/usr.bin/make/Makefile b/usr.bin/make/Makefile
index deb076f9010..c58138580ae 100644
--- a/usr.bin/make/Makefile
+++ b/usr.bin/make/Makefile
@@ -8,7 +8,6 @@ SRCS=	arch.c buf.c cond.c dir.c for.c hash.c hash_tables.c job.c	\
 	lst.c main.c make.c parse.c proc.c shell.c str.c suff.c targ.c	\
 	util.c var.c
 
-WARNS?=	6
 NO_SHARED?=	YES
 
 CFLAGS+=-DMAKE_VERSION=\"5200408120\"
diff --git a/usr.bin/make/arch.c b/usr.bin/make/arch.c
index 90801cdece4..9cd0a1c6461 100644
--- a/usr.bin/make/arch.c
+++ b/usr.bin/make/arch.c
@@ -1131,7 +1131,7 @@ Arch_MemMTime(GNode *gn)
  *	command (or the linker will know where to find it) and set the
  *	TARGET variable for this node to be the node's name. Otherwise,
  *	we set the TARGET variable to be the full path of the library,
- *	as returned by Dir_FindFile.
+ *	as returned by Path_FindFile.
  *
  *-----------------------------------------------------------------------
  */
diff --git a/usr.bin/make/dir.c b/usr.bin/make/dir.c
index c66b2bf4bc9..7cee3d461e2 100644
--- a/usr.bin/make/dir.c
+++ b/usr.bin/make/dir.c
@@ -61,6 +61,10 @@ __FBSDID("$FreeBSD$");
  *			If it exists, the entire path is returned.
  *			Otherwise NULL is returned.
  *
+ *	Dir_FindHereOrAbove Search for a path in the current directory and
+ *			then all the directories above it in turn until
+ *			the path is found or we reach the root ("/").
+ *
  *	Dir_MTime	Return the modification time of a node. The file
  *			is searched for along the default search path.
  *			The path and mtime fields of the node are filled in.
@@ -83,14 +87,13 @@ __FBSDID("$FreeBSD$");
  *	Dir_PrintDirectories	Print stats about the directory cache.
  */
 
-#include 
+#include 
 #include 
 #include 
 #include 
 #include 
 #include 
 #include 
-#include 
 
 #include "arch.h"
 #include "dir.h"
@@ -98,7 +101,6 @@ __FBSDID("$FreeBSD$");
 #include "GNode.h"
 #include "hash.h"
 #include "lst.h"
-#include "make.h"
 #include "str.h"
 #include "targ.h"
 #include "util.h"
@@ -832,21 +834,6 @@ Path_FindFile(char *name, struct Path *path)
 	 * When searching for $(FILE), we will find it in $(INSTALLDIR)
 	 * b/c we added it here. This is not good...
 	 */
-#ifdef notdef
-	cp[-1] = '\0';
-	Path_AddDir(path, name);
-	cp[-1] = '/';
-
-	bigmisses += 1;
-	pe = TAILQ_LAST(path, Path);
-	if (pe == NULL)
-		return (NULL);
-
-	if (Hash_FindEntry(&pe->dir->files, cp) != NULL) {
-		return (estrdup(name));
-
-	return (NULL);
-#else /* !notdef */
 	DEBUGF(DIR, ("Looking for \"%s\"...", name));
 
 	bigmisses += 1;
@@ -864,7 +851,83 @@ Path_FindFile(char *name, struct Path *path)
 		DEBUGF(DIR, ("failed. Returning NULL\n"));
 		return (NULL);
 	}
-#endif /* notdef */
+}
+
+/*-
+ *-----------------------------------------------------------------------
+ * Dir_FindHereOrAbove  --
+ *	search for a path starting at a given directory and then working
+ *	our way up towards the root.
+ *
+ * Input:
+ *	here		starting directory
+ *	search_path	the path we are looking for
+ *	result		the result of a successful search is placed here
+ *	rlen		the length of the result buffer
+ *			(typically MAXPATHLEN + 1)
+ *
+ * Results:
+ *	0 on failure, 1 on success [in which case the found path is put
+ *	in the result buffer].
+ *
+ * Side Effects:
+ *-----------------------------------------------------------------------
+ */
+int
+Dir_FindHereOrAbove(char *here, char *search_path, char *result, int rlen)
+{
+	struct stat st;
+	char dirbase[MAXPATHLEN + 1], *db_end;
+	char try[MAXPATHLEN + 1], *try_end;
+
+	/* copy out our starting point */
+	snprintf(dirbase, sizeof(dirbase), "%s", here);
+	db_end = dirbase + strlen(dirbase);
+
+	/* loop until we determine a result */
+	while (1) {
+		/* try and stat(2) it ... */
+		snprintf(try, sizeof(try), "%s/%s", dirbase, search_path);
+		if (stat(try, &st) != -1) {
+			/*
+			 * Success!  If we found a file, chop off
+			 * the filename so we return a directory.
+			 */
+			if ((st.st_mode & S_IFMT) != S_IFDIR) {
+				try_end = try + strlen(try);
+				while (try_end > try && *try_end != '/')
+					try_end--;
+				if (try_end > try)
+					*try_end = 0;	/* chop! */
+			}
+
+			/*
+			 * Done!
+			 */
+			snprintf(result, rlen, "%s", try);
+			return(1);
+		}
+
+		/*
+		 * Nope, we didn't find it.  If we used up dirbase we've
+		 * reached the root and failed.
+		 */
+		if (db_end == dirbase)
+			break;		/* Failed! */
+
+		/*
+		 * truncate dirbase from the end to move up a dir
+		 */
+		while (db_end > dirbase && *db_end != '/')
+			db_end--;
+		*db_end = 0;		/* chop! */
+
+	} /* while (1) */
+
+	/*
+	 * We failed...
+	 */
+	return(0);
 }
 
 /*-
@@ -878,7 +941,7 @@ Path_FindFile(char *name, struct Path *path)
  *
  * Side Effects:
  *	The modification time is placed in the node's mtime slot.
- *	If the node didn't have a path entry before, and Dir_FindFile
+ *	If the node didn't have a path entry before, and Path_FindFile
  *	found one for it, the full name is placed in the path slot.
  *-----------------------------------------------------------------------
  */
diff --git a/usr.bin/make/dir.h b/usr.bin/make/dir.h
index 03481b86979..1ae89aeac61 100644
--- a/usr.bin/make/dir.h
+++ b/usr.bin/make/dir.h
@@ -56,6 +56,7 @@ TAILQ_HEAD(Path, PathElement);
 void Dir_Init(void);
 void Dir_InitDot(void);
 Boolean Dir_HasWildcards(const char *);
+int Dir_FindHereOrAbove(char *, char *, char *, int);
 int Dir_MTime(struct GNode *);
 void Dir_PrintDirectories(void);
 
diff --git a/usr.bin/make/for.c b/usr.bin/make/for.c
index 8df54711911..f2eccce9afd 100644
--- a/usr.bin/make/for.c
+++ b/usr.bin/make/for.c
@@ -50,11 +50,9 @@ __FBSDID("$FreeBSD$");
 #include 
 
 #include "buf.h"
-#include "dir.h"
 #include "for.h"
 #include "globals.h"
 #include "lst.h"
-#include "make.h"
 #include "parse.h"
 #include "str.h"
 #include "util.h"
diff --git a/usr.bin/make/globals.h b/usr.bin/make/globals.h
index 6f75eafcb27..06c302e2aeb 100644
--- a/usr.bin/make/globals.h
+++ b/usr.bin/make/globals.h
@@ -45,9 +45,6 @@
  * Global Variables
  */
 
-#include 
-#include 
-
 #include "lst.h"
 #include "util.h"
 
diff --git a/usr.bin/make/job.c b/usr.bin/make/job.c
index 9453bdc8a0a..ba8787b18dc 100644
--- a/usr.bin/make/job.c
+++ b/usr.bin/make/job.c
@@ -485,7 +485,7 @@ catch_child(int sig __unused)
 /**
  */
 void
-Proc_Init()
+Proc_Init(void)
 {
 	/*
 	 * Catch SIGCHLD so that we get kicked out of select() when we
@@ -1008,17 +1008,6 @@ JobFinish(Job *job, int *status)
 				if (!(job->flags & JOB_CONTINUING)) {
 					DEBUGF(JOB, ("Warning: process %jd was not "
 						     "continuing.\n", (intmax_t) job->pid));
-#ifdef notdef
-					/*
-					 * We don't really want to restart a
-					 * job from scratch just because it
-					 * continued, especially not without
-					 * killing the continuing process!
-					 * That's why this is ifdef'ed out.
-					 * FD - 9/17/90
-					 */
-					JobRestart(job);
-#endif
 				}
 				job->flags &= ~JOB_CONTINUING;
 				TAILQ_INSERT_TAIL(&jobs, job, link);
diff --git a/usr.bin/make/lst.c b/usr.bin/make/lst.c
index a5b7f06c525..be30621ad3a 100644
--- a/usr.bin/make/lst.c
+++ b/usr.bin/make/lst.c
@@ -41,7 +41,6 @@
 #include 
 
 #include "lst.h"
-#include "make.h"
 #include "util.h"
 
 /**
diff --git a/usr.bin/make/lst.h b/usr.bin/make/lst.h
index 497d59c5978..1199e94688c 100644
--- a/usr.bin/make/lst.h
+++ b/usr.bin/make/lst.h
@@ -48,8 +48,6 @@
  *	Header for using the list library
  */
 
-#include "util.h"
-
 /*
  * Structure of a list node.
  */
diff --git a/usr.bin/make/main.c b/usr.bin/make/main.c
index eec6bbf1e24..91638d4212b 100644
--- a/usr.bin/make/main.c
+++ b/usr.bin/make/main.c
@@ -368,6 +368,7 @@ MainParseArgs(int argc, char **argv)
 {
 	int c;
 	Boolean	found_dd = FALSE;
+	char found_dir[MAXPATHLEN + 1];	/* for searching for sys.mk */
 
 rearg:
 	optind = 1;	/* since we're called more than once */
@@ -394,6 +395,8 @@ rearg:
 		case 'C':
 			if (chdir(optarg) == -1)
 				err(1, "chdir %s", optarg);
+			if (getcwd(curdir, MAXPATHLEN) == NULL)
+				err(2, NULL);
 			break;
 		case 'D':
 			Var_SetGlobal(optarg, "1");
@@ -492,7 +495,15 @@ rearg:
 			MFLAGS_append("-k", NULL);
 			break;
 		case 'm':
-			Path_AddDir(&sysIncPath, optarg);
+			/* look for magic parent directory search string */
+			if (strncmp(".../", optarg, 4) == 0) {
+				if (!Dir_FindHereOrAbove(curdir, optarg + 4,
+				    found_dir, sizeof(found_dir)))
+					break;		/* nothing doing */
+				Path_AddDir(&sysIncPath, found_dir);
+			} else {
+				Path_AddDir(&sysIncPath, optarg);
+			}
 			MFLAGS_append("-m", optarg);
 			break;
 		case 'n':
@@ -869,6 +880,7 @@ main(int argc, char **argv)
 	char mdpath[MAXPATHLEN];
 	char obpath[MAXPATHLEN];
 	char cdpath[MAXPATHLEN];
+	char found_dir[MAXPATHLEN + 1];	/* for searching for sys.mk */
 	char *cp = NULL, *start;
 
 	save_argv = argv;
@@ -1021,6 +1033,12 @@ main(int argc, char **argv)
 	}
 	Job_SetPrefix();
 
+	/*
+	 * Find where we are...
+	 */
+	if (getcwd(curdir, MAXPATHLEN) == NULL)
+		err(2, NULL);
+
 	/*
 	 * First snag things out of the MAKEFLAGS environment
 	 * variable.  Then parse the command line arguments.
@@ -1030,11 +1048,8 @@ main(int argc, char **argv)
 	MainParseArgs(argc, argv);
 
 	/*
-	 * Find where we are...
+	 * Verify that cwd is sane (after -C may have changed it).
 	 */
-	if (getcwd(curdir, MAXPATHLEN) == NULL)
-		err(2, NULL);
-
 	{
 	struct stat sa;
 
@@ -1132,18 +1147,37 @@ main(int argc, char **argv)
 	 * as dir1:...:dirn) to the system include path.
 	 */
 	if (TAILQ_EMPTY(&sysIncPath)) {
-		char syspath[] = PATH_DEFSYSPATH;
+		char defsyspath[] = PATH_DEFSYSPATH;
+		char *syspath = getenv("MAKESYSPATH");
+
+		/*
+		 * If no user-supplied system path was given (thru -m option)
+		 * add the directories from the DEFSYSPATH (more than one may
+		 * be given as dir1:...:dirn) to the system include path.
+		 */
+		if (syspath == NULL || *syspath == '\0')
+			syspath = defsyspath;
+		else
+			syspath = estrdup(syspath);
 
 		for (start = syspath; *start != '\0'; start = cp) {
 			for (cp = start; *cp != '\0' && *cp != ':'; cp++)
 				continue;
-			if (*cp == '\0') {
-				Path_AddDir(&sysIncPath, start);
-			} else {
+			if (*cp == ':') {
 				*cp++ = '\0';
+			}
+			/* look for magic parent directory search string */
+			if (strncmp(".../", start, 4) == 0) {
+				if (Dir_FindHereOrAbove(curdir, start + 4,
+				    found_dir, sizeof(found_dir))) {
+					Path_AddDir(&sysIncPath, found_dir);
+				}
+			} else {
 				Path_AddDir(&sysIncPath, start);
 			}
 		}
+		if (syspath != defsyspath)
+			free(syspath);
 	}
 
 	/*
diff --git a/usr.bin/make/make.1 b/usr.bin/make/make.1
index a4e837ceba4..2c478a3d1e7 100644
--- a/usr.bin/make/make.1
+++ b/usr.bin/make/make.1
@@ -240,6 +240,36 @@ The system include path will always be appended to the search path used
 for "..."-style inclusions and makefile searches (see the
 .Fl I
 option).
+.Pp
+If a file or directory name in the
+.Fl m
+argument (or the
+.Ev MAKESYSPATH
+environment variable) starts with the string
+.Qq \&.../
+then
+.Nm
+will search for the specified file or directory named in the remaining part
+of the argument string.
+The search starts with the current directory of the Makefile and then works
+upward towards the root of the filesystem.
+If the search is successful,
+then the resulting directory replaces the
+.Qq \&.../
+specification in the
+.Fl m
+argument.
+If used, this feature allows
+.Nm
+to easily search in the current source tree for customized sys.mk files
+(e.g. by using
+.Qq \&.../mk/sys.mk
+as an argument).
+Note that a
+.Fl C
+that are earlier on the command line affect where
+.Fl m Qq \&.../
+searches.
 .It Fl n
 Display the commands that would have been executed, but do not actually
 execute them.
@@ -1665,8 +1695,9 @@ utility uses the following environment variables, if they exist:
 .Ev MAKE ,
 .Ev MAKEFLAGS ,
 .Ev MAKEOBJDIR ,
+.Ev MAKEOBJDIRPREFIX ,
 and
-.Ev MAKEOBJDIRPREFIX .
+.Ev MAKESYSPATH .
 .Sh FILES
 .Bl -tag -width /usr/share/doc/psd/12.make -compact
 .It Pa .depend
diff --git a/usr.bin/make/make.c b/usr.bin/make/make.c
index a6ddc85d4c8..3e6cb42fca0 100644
--- a/usr.bin/make/make.c
+++ b/usr.bin/make/make.c
@@ -72,8 +72,6 @@ __FBSDID("$FreeBSD$");
  *			and perform the .USE actions if so.
  */
 
-#include 
-
 #include "arch.h"
 #include "config.h"
 #include "dir.h"
diff --git a/usr.bin/make/parse.c b/usr.bin/make/parse.c
index 2c651645b24..134d90578b9 100644
--- a/usr.bin/make/parse.c
+++ b/usr.bin/make/parse.c
@@ -699,6 +699,7 @@ static void
 ParseDoDependency(char *line)
 {
 	char	*cp;	/* our current position */
+	char	*lstart = line;	/* original input line */
 	GNode	*gn;	/* a general purpose temporary node */
 	int	op;	/* the operator on the line */
 	char	savec;	/* a place to save a character */
@@ -802,13 +803,15 @@ ParseDoDependency(char *line)
 			 * merges.
 			 */
 			if (strncmp(line, "<<<<<<", 6) == 0 ||
+			    strncmp(line, "||||||", 6) == 0 ||
 			    strncmp(line, "======", 6) == 0 ||
 			    strncmp(line, ">>>>>>", 6) == 0) {
 				Parse_Error(PARSE_FATAL, "Makefile appears to "
 				    "contain unresolved cvs/rcs/??? merge "
 				    "conflicts");
 			} else
-				Parse_Error(PARSE_FATAL, "Need an operator");
+				Parse_Error(PARSE_FATAL, lstart[0] == '.' ?
+				    "Unknown directive" : "Need an operator");
 			return;
 		}
 		*cp = '\0';
@@ -1028,7 +1031,8 @@ ParseDoDependency(char *line)
 			op = OP_DEPENDS;
 		}
 	} else {
-		Parse_Error(PARSE_FATAL, "Missing dependency operator");
+		Parse_Error(PARSE_FATAL, lstart[0] == '.' ?
+		    "Unknown directive" : "Missing dependency operator");
 		return;
 	}
 
diff --git a/usr.bin/make/proc.c b/usr.bin/make/proc.c
index 711f605a484..3a7e4f654ee 100644
--- a/usr.bin/make/proc.c
+++ b/usr.bin/make/proc.c
@@ -116,7 +116,7 @@ Proc_Exec(const ProcStuff *ps)
 		execvp(ps->argv[0], ps->argv);
 
 		write(STDERR_FILENO, ps->argv[0], strlen(ps->argv[0]));
-		write(STDERR_FILENO, ":", 1);
+		write(STDERR_FILENO, ": ", 2);
 		write(STDERR_FILENO, strerror(errno), strlen(strerror(errno)));
 		write(STDERR_FILENO, "\n", 1);
 	} else {
diff --git a/usr.bin/make/str.c b/usr.bin/make/str.c
index 81bb7a37561..44ba79d2949 100644
--- a/usr.bin/make/str.c
+++ b/usr.bin/make/str.c
@@ -41,12 +41,10 @@
 #include 
 __FBSDID("$FreeBSD$");
 
-#include 
 #include 
 #include 
 
 #include "buf.h"
-#include "globals.h"
 #include "str.h"
 #include "util.h"
 
diff --git a/usr.bin/make/targ.c b/usr.bin/make/targ.c
index eac121e23ca..75ced89a42f 100644
--- a/usr.bin/make/targ.c
+++ b/usr.bin/make/targ.c
@@ -78,13 +78,11 @@ __FBSDID("$FreeBSD$");
  */
 
 #include 
-#include 
 
 #include "dir.h"
 #include "globals.h"
 #include "GNode.h"
 #include "hash.h"
-#include "make.h"
 #include "suff.h"
 #include "targ.h"
 #include "util.h"
diff --git a/usr.bin/make/var.c b/usr.bin/make/var.c
index 983bb2ae704..534abcaf42b 100644
--- a/usr.bin/make/var.c
+++ b/usr.bin/make/var.c
@@ -84,7 +84,6 @@ __FBSDID("$FreeBSD$");
  * XXX: There's a lot of duplication in these functions.
  */
 
-#include 
 #include 
 #include 
 #include 
@@ -97,7 +96,6 @@ __FBSDID("$FreeBSD$");
 #include "GNode.h"
 #include "job.h"
 #include "lst.h"
-#include "make.h"
 #include "parse.h"
 #include "str.h"
 #include "targ.h"
diff --git a/usr.bin/makewhatis/makewhatis.c b/usr.bin/makewhatis/makewhatis.c
index 6b2dce4e595..f2ae3709d6d 100644
--- a/usr.bin/makewhatis/makewhatis.c
+++ b/usr.bin/makewhatis/makewhatis.c
@@ -879,9 +879,9 @@ process_section(char *section_dir)
  * Returns whether the directory entry is a man page section.
  */
 static int
-select_sections(struct dirent *entry)
+select_sections(const struct dirent *entry)
 {
-	char *p = &entry->d_name[3];
+	const char *p = &entry->d_name[3];
 
 	if (strncmp(entry->d_name, "man", 3) != 0)
 		return 0;
diff --git a/usr.bin/minigzip/Makefile b/usr.bin/minigzip/Makefile
index 226ba761798..9a0ab9560fe 100644
--- a/usr.bin/minigzip/Makefile
+++ b/usr.bin/minigzip/Makefile
@@ -5,4 +5,6 @@ LDADD=	-lz
 DPADD=	${LIBZ}
 .PATH:	${.CURDIR}/../../lib/libz
 
+WARNS?=	5
+
 .include 
diff --git a/usr.bin/mkfifo/Makefile b/usr.bin/mkfifo/Makefile
index bab308b133f..30f013ecea4 100644
--- a/usr.bin/mkfifo/Makefile
+++ b/usr.bin/mkfifo/Makefile
@@ -2,6 +2,5 @@
 # $FreeBSD$
 
 PROG=	mkfifo
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/mklocale/Makefile b/usr.bin/mklocale/Makefile
index 9873d4e32fc..e75fe99bbba 100644
--- a/usr.bin/mklocale/Makefile
+++ b/usr.bin/mklocale/Makefile
@@ -2,7 +2,6 @@
 # $FreeBSD$
 
 PROG=	mklocale
-WARNS?=	6
 SRCS=	yacc.y lex.l y.tab.h
 CFLAGS+= -I. -I${.CURDIR} -I${.CURDIR}/../../lib/libc/locale
 
diff --git a/usr.bin/mklocale/lex.l b/usr.bin/mklocale/lex.l
index eeed535db2c..34ff62724d0 100644
--- a/usr.bin/mklocale/lex.l
+++ b/usr.bin/mklocale/lex.l
@@ -170,7 +170,7 @@ ENCODING			{ return(ENCODING); }
 
 #if	!defined(yywrap)
 int
-yywrap()
+yywrap(void)
 {
 	return(1);
 }
diff --git a/usr.bin/mklocale/yacc.y b/usr.bin/mklocale/yacc.y
index 344af220cf6..b86ab889a36 100644
--- a/usr.bin/mklocale/yacc.y
+++ b/usr.bin/mklocale/yacc.y
@@ -266,22 +266,20 @@ main(int ac, char *av[])
 }
 
 static void
-usage()
+usage(void)
 {
     fprintf(stderr, "usage: mklocale [-d] [-o output] [source]\n");
     exit(1);
 }
 
 void
-yyerror(s)
-	const char *s;
+yyerror(const char *s)
 {
     fprintf(stderr, "%s\n", s);
 }
 
 static void *
-xmalloc(sz)
-	unsigned int sz;
+xmalloc(unsigned int sz)
 {
     void *r = malloc(sz);
     if (!r)
@@ -290,8 +288,7 @@ xmalloc(sz)
 }
 
 static uint32_t *
-xlalloc(sz)
-	unsigned int sz;
+xlalloc(unsigned int sz)
 {
     uint32_t *r = (uint32_t *)malloc(sz * sizeof(uint32_t));
     if (!r)
@@ -300,9 +297,7 @@ xlalloc(sz)
 }
 
 static uint32_t *
-xrelalloc(old, sz)
-	uint32_t *old;
-	unsigned int sz;
+xrelalloc(uint32_t *old, unsigned int sz)
 {
     uint32_t *r = (uint32_t *)realloc((char *)old,
 						sz * sizeof(uint32_t));
@@ -312,10 +307,7 @@ xrelalloc(old, sz)
 }
 
 void
-set_map(map, list, flag)
-	rune_map *map;
-	rune_list *list;
-	uint32_t flag;
+set_map(rune_map *map, rune_list *list, uint32_t flag)
 {
     while (list) {
 	rune_list *nlist = list->next;
@@ -325,9 +317,7 @@ set_map(map, list, flag)
 }
 
 void
-set_digitmap(map, list)
-	rune_map *map;
-	rune_list *list;
+set_digitmap(rune_map *map, rune_list *list)
 {
     int32_t i;
 
@@ -347,10 +337,7 @@ set_digitmap(map, list)
 }
 
 void
-add_map(map, list, flag)
-	rune_map *map;
-	rune_list *list;
-	uint32_t flag;
+add_map(rune_map *map, rune_list *list, uint32_t flag)
 {
     int32_t i;
     rune_list *lr = 0;
@@ -555,7 +542,7 @@ add_map(map, list, flag)
 }
 
 static void
-dump_tables()
+dump_tables(void)
 {
     int x, first_d, curr_d;
     rune_list *list;
diff --git a/usr.bin/mkstr/Makefile b/usr.bin/mkstr/Makefile
index 805c013d4a9..b4e36209ffc 100644
--- a/usr.bin/mkstr/Makefile
+++ b/usr.bin/mkstr/Makefile
@@ -3,4 +3,6 @@
 
 PROG=	mkstr
 
+WARNS?=	2
+
 .include 
diff --git a/usr.bin/mktemp/mktemp.c b/usr.bin/mktemp/mktemp.c
index b58ac4b9d05..72b89d60788 100644
--- a/usr.bin/mktemp/mktemp.c
+++ b/usr.bin/mktemp/mktemp.c
@@ -143,7 +143,7 @@ main(int argc, char **argv)
 }
 
 static void
-usage()
+usage(void)
 {
 	fprintf(stderr,
 		"usage: mktemp [-d] [-q] [-t prefix] [-u] template ...\n");
diff --git a/usr.bin/mkuzip/Makefile b/usr.bin/mkuzip/Makefile
index 11ed0831f14..c5eac201776 100644
--- a/usr.bin/mkuzip/Makefile
+++ b/usr.bin/mkuzip/Makefile
@@ -6,6 +6,5 @@ MAN=	mkuzip.8
 DPADD=	${LIBZ}
 LDADD=	-lz
 
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/msgs/Makefile b/usr.bin/msgs/Makefile
index 9f59c6a598c..21cb1515556 100644
--- a/usr.bin/msgs/Makefile
+++ b/usr.bin/msgs/Makefile
@@ -2,7 +2,6 @@
 # $FreeBSD$
 
 PROG=	msgs
-WARNS?=	6
 DPADD=	${LIBTERMCAP}
 LDADD=	-ltermcap
 
diff --git a/usr.bin/nc/Makefile b/usr.bin/nc/Makefile
index a4400bcddc9..84d20d3f2e8 100644
--- a/usr.bin/nc/Makefile
+++ b/usr.bin/nc/Makefile
@@ -9,4 +9,6 @@ CFLAGS+=-DIPSEC
 LDADD=	-lipsec
 DPADD=	${LIBIPSEC}
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/ncplist/Makefile b/usr.bin/ncplist/Makefile
index 8e6d18991a4..b5baed47d7b 100644
--- a/usr.bin/ncplist/Makefile
+++ b/usr.bin/ncplist/Makefile
@@ -2,6 +2,8 @@
 
 PROG=	ncplist
 
+WARNS?=	0
+
 DPADD=	${LIBNCP} ${LIBIPX}
 LDADD=	-lncp -lipx
 
diff --git a/usr.bin/netstat/if.c b/usr.bin/netstat/if.c
index aa28a6fa265..02f390a0196 100644
--- a/usr.bin/netstat/if.c
+++ b/usr.bin/netstat/if.c
@@ -198,8 +198,8 @@ intpr(int interval1, u_long ifnetaddr, void (*pfunc)(char *))
 	u_long imcasts;
 	u_long oerrors;
 	u_long ierrors;
+	u_long idrops;
 	u_long collisions;
-	short timer;
 	int drops;
 	struct sockaddr *sa = NULL;
 	char name[IFNAMSIZ];
@@ -225,16 +225,14 @@ intpr(int interval1, u_long ifnetaddr, void (*pfunc)(char *))
 			printf("%-7.7s", "Name");
 		else
 			printf("%-5.5s", "Name");
-		printf(" %5.5s %-13.13s %-17.17s %8.8s %5.5s",
-		    "Mtu", "Network", "Address", "Ipkts", "Ierrs");
+		printf(" %5.5s %-13.13s %-17.17s %8.8s %5.5s %5.5s",
+		    "Mtu", "Network", "Address", "Ipkts", "Ierrs", "Idrop");
 		if (bflag)
 			printf(" %10.10s","Ibytes");
 		printf(" %8.8s %5.5s", "Opkts", "Oerrs");
 		if (bflag)
 			printf(" %10.10s","Obytes");
 		printf(" %5s", "Coll");
-		if (tflag)
-			printf(" %s", "Time");
 		if (dflag)
 			printf(" %s", "Drop");
 		putchar('\n');
@@ -285,8 +283,8 @@ intpr(int interval1, u_long ifnetaddr, void (*pfunc)(char *))
 		imcasts = ifnet.if_imcasts;
 		oerrors = ifnet.if_oerrors;
 		ierrors = ifnet.if_ierrors;
+		idrops = ifnet.if_iqdrops;
 		collisions = ifnet.if_collisions;
-		timer = ifnet.if_timer;
 		drops = ifnet.if_snd.ifq_drops;
 
 		if (ifaddraddr == 0) {
@@ -423,6 +421,7 @@ intpr(int interval1, u_long ifnetaddr, void (*pfunc)(char *))
 
 		show_stat("lu", 8, ipackets, link_layer|network_layer);
 		show_stat("lu", 5, ierrors, link_layer);
+		show_stat("lu", 5, idrops, link_layer);
 		if (bflag)
 			show_stat("lu", 10, ibytes, link_layer|network_layer);
 
@@ -432,8 +431,6 @@ intpr(int interval1, u_long ifnetaddr, void (*pfunc)(char *))
 			show_stat("lu", 10, obytes, link_layer|network_layer);
 
 		show_stat("NRSlu", 5, collisions, link_layer);
-		if (tflag)
-			show_stat("LSd", 4, timer, link_layer);
 		if (dflag)
 			show_stat("LSd", 4, drops, link_layer);
 		putchar('\n');
@@ -513,6 +510,7 @@ struct	iftot {
 	char	ift_name[IFNAMSIZ];	/* interface name */
 	u_long	ift_ip;			/* input packets */
 	u_long	ift_ie;			/* input errors */
+	u_long	ift_id;			/* input drops */
 	u_long	ift_op;			/* output packets */
 	u_long	ift_oe;			/* output errors */
 	u_long	ift_co;			/* collisions */
@@ -598,8 +596,9 @@ banner:
 	printf("%17s %14s %16s", "input",
 	    interesting ? interesting->ift_name : "(Total)", "output");
 	putchar('\n');
-	printf("%10s %5s %10s %10s %5s %10s %5s",
-	    "packets", "errs", "bytes", "packets", "errs", "bytes", "colls");
+	printf("%10s %5s %5s %10s %10s %5s %10s %5s",
+	    "packets", "errs", "idrops", "bytes", "packets", "errs", "bytes",
+	    "colls");
 	if (dflag)
 		printf(" %5.5s", "drops");
 	putchar('\n');
@@ -615,6 +614,7 @@ loop:
 		if (!first) {
 			show_stat("lu", 10, ifnet.if_ipackets - ip->ift_ip, 1);
 			show_stat("lu", 5, ifnet.if_ierrors - ip->ift_ie, 1);
+			show_stat("lu", 5, ifnet.if_iqdrops - ip->ift_id, 1);
 			show_stat("lu", 10, ifnet.if_ibytes - ip->ift_ib, 1);
 			show_stat("lu", 10, ifnet.if_opackets - ip->ift_op, 1);
 			show_stat("lu", 5, ifnet.if_oerrors - ip->ift_oe, 1);
@@ -636,6 +636,7 @@ loop:
 	} else {
 		sum->ift_ip = 0;
 		sum->ift_ie = 0;
+		sum->ift_id = 0;
 		sum->ift_ib = 0;
 		sum->ift_op = 0;
 		sum->ift_oe = 0;
@@ -651,6 +652,7 @@ loop:
 			}
 			sum->ift_ip += ifnet.if_ipackets;
 			sum->ift_ie += ifnet.if_ierrors;
+			sum->ift_id += ifnet.if_iqdrops;
 			sum->ift_ib += ifnet.if_ibytes;
 			sum->ift_op += ifnet.if_opackets;
 			sum->ift_oe += ifnet.if_oerrors;
@@ -662,6 +664,7 @@ loop:
 		if (!first) {
 			show_stat("lu", 10, sum->ift_ip - total->ift_ip, 1);
 			show_stat("lu", 5, sum->ift_ie - total->ift_ie, 1);
+			show_stat("lu", 5, sum->ift_id - total->ift_id, 1);
 			show_stat("lu", 10, sum->ift_ib - total->ift_ib, 1);
 			show_stat("lu", 10, sum->ift_op - total->ift_op, 1);
 			show_stat("lu", 5, sum->ift_oe - total->ift_oe, 1);
diff --git a/usr.bin/netstat/ipsec.c b/usr.bin/netstat/ipsec.c
index bfd8ce01ee8..d3276bf2761 100644
--- a/usr.bin/netstat/ipsec.c
+++ b/usr.bin/netstat/ipsec.c
@@ -418,6 +418,7 @@ esp_stats(u_long off, const char *name, int family __unused, int proto __unused)
 static void
 print_ipcompstats(const struct ipcompstat *ipcompstat)
 {
+	uint32_t version;
 #define	p32(f, m) if (ipcompstat->f || sflag <= 1) \
     printf("\t%u" m, (unsigned int)ipcompstat->f, plural(ipcompstat->f))
 #define	p64(f, m) if (ipcompstat->f || sflag <= 1) \
@@ -425,6 +426,11 @@ print_ipcompstats(const struct ipcompstat *ipcompstat)
 #define	hist(f, n, t) \
     ipsec_hist_new((f), sizeof(f)/sizeof(f[0]), (n), (t));
 
+#ifndef IPCOMPSTAT_VERSION
+	version = 0;
+#else
+	version = ipcompstat->version;
+#endif
 	p32(ipcomps_hdrops, " packet%s shorter than header shows\n");
 	p32(ipcomps_nopf, " packet%s dropped; protocol family not supported\n");
 	p32(ipcomps_notdb, " packet%s dropped; no TDB\n");
@@ -441,6 +447,10 @@ print_ipcompstats(const struct ipcompstat *ipcompstat)
 	p32(ipcomps_pdrops, " packet%s blocked due to policy\n");
 	p32(ipcomps_crypto, " crypto processing failure%s\n");
 	hist(ipcompstat->ipcomps_hist, ipsec_compnames, "COMP output");
+	if (version >= 1) {
+	p32(ipcomps_threshold, " packet%s sent uncompressed; size < compr. algo. threshold\n");
+	p32(ipcomps_uncompr, " packet%s sent uncompressed; compression was useless\n");
+	}
 
 #undef p32
 #undef p64
diff --git a/usr.bin/netstat/main.c b/usr.bin/netstat/main.c
index b1c494086ee..fec7172ad0c 100644
--- a/usr.bin/netstat/main.c
+++ b/usr.bin/netstat/main.c
@@ -339,7 +339,6 @@ int	numeric_port;	/* show ports numerically */
 static int pflag;	/* show given protocol */
 int	rflag;		/* show routing tables (or routing stats) */
 int	sflag;		/* show protocol statistics */
-int	tflag;		/* show i/f watchdog timers */
 int	Wflag;		/* wide display */
 int	xflag;		/* extra information, includes all socket buffer info */
 int	zflag;		/* zero stats */
@@ -360,7 +359,7 @@ main(int argc, char *argv[])
 
 	af = AF_UNSPEC;
 
-	while ((ch = getopt(argc, argv, "AaBbdf:ghI:iLlM:mN:np:rSstuWw:xz")) != -1)
+	while ((ch = getopt(argc, argv, "AaBbdf:ghI:iLlM:mN:np:rSsuWw:xz")) != -1)
 		switch(ch) {
 		case 'A':
 			Aflag = 1;
@@ -455,9 +454,6 @@ main(int argc, char *argv[])
 		case 'S':
 			numeric_addr = 1;
 			break;
-		case 't':
-			tflag = 1;
-			break;
 		case 'u':
 			af = AF_UNIX;
 			break;
@@ -781,7 +777,7 @@ usage(void)
 	(void)fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
 "usage: netstat [-AaLnSWx] [-f protocol_family | -p protocol]\n"
 "               [-M core] [-N system]",
-"       netstat -i | -I interface [-abdhntW] [-f address_family]\n"
+"       netstat -i | -I interface [-abdhnW] [-f address_family]\n"
 "               [-M core] [-N system]",
 "       netstat -w wait [-I interface] [-d] [-M core] [-N system]",
 "       netstat -s [-s] [-z] [-f protocol_family | -p protocol]\n"
diff --git a/usr.bin/netstat/netstat.1 b/usr.bin/netstat/netstat.1
index cddaaaf568a..587cbb21cec 100644
--- a/usr.bin/netstat/netstat.1
+++ b/usr.bin/netstat/netstat.1
@@ -92,7 +92,7 @@ is present, display socket buffer and tcp timer statistics for each internet soc
 .Bk -words
 .Nm
 .Fl i | I Ar interface
-.Op Fl abdhntW
+.Op Fl abdhnW
 .Op Fl f Ar address_family
 .Op Fl M Ar core
 .Op Fl N Ar system
@@ -123,9 +123,6 @@ If
 .Fl h
 is also present, print all counters in human readable form.
 If
-.Fl t
-is also present, show the contents of watchdog timers.
-If
 .Fl W
 is also present, print interface names using a wider field size.
 .It Xo
diff --git a/usr.bin/netstat/netstat.h b/usr.bin/netstat/netstat.h
index 259ca823e28..c224f463912 100644
--- a/usr.bin/netstat/netstat.h
+++ b/usr.bin/netstat/netstat.h
@@ -49,7 +49,6 @@ extern int	numeric_addr;	/* show addresses numerically */
 extern int	numeric_port;	/* show ports numerically */
 extern int	rflag;	/* show routing tables (or routing stats) */
 extern int	sflag;	/* show protocol statistics */
-extern int	tflag;	/* show i/f watchdog timers */
 extern int	Wflag;	/* wide display */
 extern int	xflag;	/* extended display, includes all socket buffer info */
 extern int	zflag;	/* zero stats */
diff --git a/usr.bin/newkey/Makefile b/usr.bin/newkey/Makefile
index 1460f871941..b3b5b51d8c9 100644
--- a/usr.bin/newkey/Makefile
+++ b/usr.bin/newkey/Makefile
@@ -11,6 +11,4 @@ MAN=	newkey.8
 DPADD=	${LIBRPCSVC} ${LIBMP} ${LIBCRYPTO}
 LDADD=	-lrpcsvc -lmp -lcrypto
 
-WARNS?=	6
-
 .include 
diff --git a/usr.bin/nfsstat/Makefile b/usr.bin/nfsstat/Makefile
index ce4c7c6136f..d31db0aaf80 100644
--- a/usr.bin/nfsstat/Makefile
+++ b/usr.bin/nfsstat/Makefile
@@ -6,4 +6,6 @@ CFLAGS+=-DNFS
 DPADD=  ${LIBKVM}
 LDADD= -lkvm
 
+WARNS?=	3
+
 .include 
diff --git a/usr.bin/nl/Makefile b/usr.bin/nl/Makefile
index 9b1f292dfbe..07bef878c44 100644
--- a/usr.bin/nl/Makefile
+++ b/usr.bin/nl/Makefile
@@ -2,4 +2,6 @@
 
 PROG=	nl
 
+WARNS?=	2
+
 .include 
diff --git a/usr.bin/nohup/Makefile b/usr.bin/nohup/Makefile
index cd635cefa52..5ec4057d30a 100644
--- a/usr.bin/nohup/Makefile
+++ b/usr.bin/nohup/Makefile
@@ -2,6 +2,5 @@
 # $FreeBSD$
 
 PROG=	nohup
-WARNS?=	4
 
 .include 
diff --git a/usr.bin/nslookup/Makefile b/usr.bin/nslookup/Makefile
index 004efa2def2..b3ba117cf8a 100644
--- a/usr.bin/nslookup/Makefile
+++ b/usr.bin/nslookup/Makefile
@@ -18,6 +18,8 @@ CFLAGS+=	-I${BIND_DIR}/lib/isc/${ISC_ATOMIC_ARCH}/include
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
+WARNS?=		1
+
 MANFILTER=	sed -e "s@^host \[server\]@\\\fBhost\\\fR \\\fI[server]\\\fR@"
 
 .include 
diff --git a/usr.bin/nsupdate/Makefile b/usr.bin/nsupdate/Makefile
index 0b81c5eb664..941c7f30fbf 100644
--- a/usr.bin/nsupdate/Makefile
+++ b/usr.bin/nsupdate/Makefile
@@ -18,6 +18,8 @@ CFLAGS+=	-I${BIND_DIR}/lib/isc/${ISC_ATOMIC_ARCH}/include
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
+WARNS?=		1
+
 MAN=		nsupdate.1
 
 MANFILTER=	sed -e "s@/etc/named\.conf@/etc/namedb/named.conf@g" \
diff --git a/usr.bin/opieinfo/Makefile b/usr.bin/opieinfo/Makefile
index 0375111dbfb..b3ba166d7f6 100644
--- a/usr.bin/opieinfo/Makefile
+++ b/usr.bin/opieinfo/Makefile
@@ -8,6 +8,8 @@ CFLAGS+=-I${.CURDIR}/../../lib/libopie
 CFLAGS+=-I${OPIE_DIST}
 CFLAGS+=-DINSECURE_OVERRIDE
 
+WARNS?=	0
+
 DPADD=	${LIBOPIE} ${LIBMD}
 LDADD=	-lopie -lmd
 
diff --git a/usr.bin/opiekey/Makefile b/usr.bin/opiekey/Makefile
index 215c86b4511..e017f4d044a 100644
--- a/usr.bin/opiekey/Makefile
+++ b/usr.bin/opiekey/Makefile
@@ -8,6 +8,8 @@ CFLAGS+=-I${.CURDIR}/../../lib/libopie
 CFLAGS+=-I${OPIE_DIST}
 CFLAGS+=-DINSECURE_OVERRIDE
 
+WARNS?=	0
+
 DPADD=	${LIBOPIE} ${LIBMD}
 LDADD=	-lopie -lmd
 
diff --git a/usr.bin/opiepasswd/Makefile b/usr.bin/opiepasswd/Makefile
index 0d75a2113dc..b05e3b21e93 100644
--- a/usr.bin/opiepasswd/Makefile
+++ b/usr.bin/opiepasswd/Makefile
@@ -8,6 +8,8 @@ CFLAGS+=-I${.CURDIR}/../../lib/libopie
 CFLAGS+=-I${OPIE_DIST}
 CFLAGS+=-DINSECURE_OVERRIDE
 
+WARNS?=	0
+
 DPADD=	${LIBOPIE} ${LIBMD}
 LDADD=	-lopie -lmd
 
diff --git a/usr.bin/passwd/Makefile b/usr.bin/passwd/Makefile
index a1ce76b4811..7aeee564e38 100644
--- a/usr.bin/passwd/Makefile
+++ b/usr.bin/passwd/Makefile
@@ -12,7 +12,6 @@ LDADD	 = ${MINUSLPAM}
 LINKS	 = ${BINDIR}/passwd ${BINDIR}/yppasswd
 MLINKS	 = passwd.1 yppasswd.1
 .endif
-WARNS	?= 4
 
 beforeinstall:
 .for i in passwd yppasswd
diff --git a/usr.bin/passwd/passwd.c b/usr.bin/passwd/passwd.c
index d35458c956a..2d399c56291 100644
--- a/usr.bin/passwd/passwd.c
+++ b/usr.bin/passwd/passwd.c
@@ -67,7 +67,7 @@ int
 main(int argc, char *argv[])
 {
 	char hostname[MAXHOSTNAMELEN];
-	struct passwd *pwd;
+	struct passwd *pwd = NULL; /* Keep compiler happy. */
 	int o, pam_err;
 	uid_t uid;
 
diff --git a/usr.bin/perror/perror.c b/usr.bin/perror/perror.c
index 6d852a7a371..ef3db35b64b 100644
--- a/usr.bin/perror/perror.c
+++ b/usr.bin/perror/perror.c
@@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#include 
 #include 
 
 static void usage(void);
@@ -43,6 +44,7 @@ main(int argc, char **argv)
 	char *errstr;
 	long errnum;
 
+	(void) setlocale(LC_MESSAGES, "");
 	if (argc != 2)
 		usage();
 
diff --git a/usr.bin/pr/Makefile b/usr.bin/pr/Makefile
index 70a921d2139..88ec7b45b88 100644
--- a/usr.bin/pr/Makefile
+++ b/usr.bin/pr/Makefile
@@ -1,6 +1,9 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/6/93
+# $FreeBSD$
 
 PROG=	pr
 SRCS=	pr.c egetopt.c
 
+WARNS?=	2
+
 .include 
diff --git a/usr.bin/pr/egetopt.c b/usr.bin/pr/egetopt.c
index 277459ee47a..cf42d7c4463 100644
--- a/usr.bin/pr/egetopt.c
+++ b/usr.bin/pr/egetopt.c
@@ -46,11 +46,8 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
-#include 
 #include 
 
-#include "extern.h"
-
 /*
  * egetopt:	get option letter from argument vector (an extended
  *		version of getopt).
diff --git a/usr.bin/printf/Makefile b/usr.bin/printf/Makefile
index 78cdd0d1301..c91c4e3f53c 100644
--- a/usr.bin/printf/Makefile
+++ b/usr.bin/printf/Makefile
@@ -2,6 +2,5 @@
 # $FreeBSD$
 
 PROG=	printf
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/procstat/Makefile b/usr.bin/procstat/Makefile
index 6cb58956518..1c187b04bd2 100644
--- a/usr.bin/procstat/Makefile
+++ b/usr.bin/procstat/Makefile
@@ -14,6 +14,5 @@ SRCS=	procstat.c		\
 
 LDADD+=	-lutil
 DPADD+=	${LIBUTIL}
-WARNS?=	4
 
 .include 
diff --git a/usr.bin/renice/renice.c b/usr.bin/renice/renice.c
index 21bb4c2c980..55f6537208a 100644
--- a/usr.bin/renice/renice.c
+++ b/usr.bin/renice/renice.c
@@ -177,7 +177,7 @@ getnum(const char *com, const char *str, int *val)
 }
 
 static void
-usage()
+usage(void)
 {
 	fprintf(stderr, "%s\n%s\n",
 "usage: renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]",
diff --git a/usr.bin/revoke/Makefile b/usr.bin/revoke/Makefile
index b3c4ee690a6..92fe2218b18 100644
--- a/usr.bin/revoke/Makefile
+++ b/usr.bin/revoke/Makefile
@@ -2,6 +2,4 @@
 
 PROG=	revoke
 
-WARNS?=	6
-
 .include 
diff --git a/usr.bin/rlogin/Makefile b/usr.bin/rlogin/Makefile
index 195bffbb0b1..abf4a826a54 100644
--- a/usr.bin/rlogin/Makefile
+++ b/usr.bin/rlogin/Makefile
@@ -7,4 +7,6 @@ BINOWN=	root
 BINMODE=4555
 PRECIOUSPROG=
 
+WARNS?=	3
+
 .include 
diff --git a/usr.bin/rpcgen/Makefile b/usr.bin/rpcgen/Makefile
index c298820e343..f78fa64968f 100644
--- a/usr.bin/rpcgen/Makefile
+++ b/usr.bin/rpcgen/Makefile
@@ -4,6 +4,4 @@ PROG=	rpcgen
 SRCS=	rpc_main.c  rpc_clntout.c rpc_cout.c rpc_hout.c rpc_parse.c \
 	rpc_sample.c rpc_scan.c rpc_svcout.c rpc_tblout.c rpc_util.c
 
-WARNS?=	2
-
 .include 
diff --git a/usr.bin/rpcgen/rpc_hout.c b/usr.bin/rpcgen/rpc_hout.c
index 70683638360..7607ef74d6c 100644
--- a/usr.bin/rpcgen/rpc_hout.c
+++ b/usr.bin/rpcgen/rpc_hout.c
@@ -148,8 +148,7 @@ print_xdr_func_def(const char *name, int pointerp)
 
 
 static void
-pconstdef(def)
-	definition *def;
+pconstdef(definition *def)
 {
 	pdefine(def->def_name, def->def.co);
 }
@@ -205,8 +204,7 @@ pstructdef(definition *def)
 }
 
 static void
-puniondef(def)
-	definition *def;
+puniondef(definition *def)
 {
 	case_list *l;
 	const char *name = def->def_name;
@@ -374,8 +372,7 @@ parglist(proc_list *proc, const char *addargtype)
 }
 
 static void
-penumdef(def)
-	definition *def;
+penumdef(definition *def)
 {
 	const char *name = def->def_name;
 	enumval_list *l;
@@ -406,8 +403,7 @@ penumdef(def)
 }
 
 static void
-ptypedef(def)
-	definition *def;
+ptypedef(definition *def)
 {
 	const char *name = def->def_name;
 	const char *old = def->def.ty.old_type;
diff --git a/usr.bin/rpcgen/rpc_main.c b/usr.bin/rpcgen/rpc_main.c
index fb3813f42bd..00d85b8e6de 100644
--- a/usr.bin/rpcgen/rpc_main.c
+++ b/usr.bin/rpcgen/rpc_main.c
@@ -1203,7 +1203,7 @@ parseargs(int argc, const char *argv[], struct commandline *cmd)
 }
 
 static void
-usage()
+usage(void)
 {
 	f_print(stderr, "%s\n%s\n%s\n%s\n%s\n",
 		"usage: rpcgen infile",
@@ -1218,7 +1218,7 @@ usage()
 }
 
 static void
-options_usage()
+options_usage(void)
 {
 	f_print(stderr, "options:\n");
 	f_print(stderr, "-a\t\tgenerate all files, including samples\n");
diff --git a/usr.bin/rpcinfo/Makefile b/usr.bin/rpcinfo/Makefile
index c89b5b3cbe5..3c8e51c000c 100644
--- a/usr.bin/rpcinfo/Makefile
+++ b/usr.bin/rpcinfo/Makefile
@@ -7,4 +7,6 @@ MAN=	rpcinfo.8
 
 CFLAGS+= -DPORTMAP
 
+WARNS?=	2
+
 .include 
diff --git a/usr.bin/rsh/Makefile b/usr.bin/rsh/Makefile
index cf052f71efa..5c6951cd074 100644
--- a/usr.bin/rsh/Makefile
+++ b/usr.bin/rsh/Makefile
@@ -4,6 +4,8 @@
 PROG=	rsh
 CFLAGS+=-I${.CURDIR}/../../libexec/rlogind
 
+WARNS?=	2
+
 BINOWN=	root
 BINMODE=4555
 PRECIOUSPROG=
diff --git a/usr.bin/rup/Makefile b/usr.bin/rup/Makefile
index 6d329774b71..e87220168c2 100644
--- a/usr.bin/rup/Makefile
+++ b/usr.bin/rup/Makefile
@@ -2,6 +2,8 @@
 
 PROG=	rup
 
+WARNS?=	1
+
 DPADD=	${LIBRPCSVC}
 LDADD=	-lrpcsvc
 
diff --git a/usr.bin/ruptime/Makefile b/usr.bin/ruptime/Makefile
index 57f1e15ee0d..351d0d8a181 100644
--- a/usr.bin/ruptime/Makefile
+++ b/usr.bin/ruptime/Makefile
@@ -1,5 +1,8 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/6/93
+# $FreeBSD$
 
 PROG=	ruptime
 
+WARNS?=	3
+
 .include 
diff --git a/usr.bin/rusers/Makefile b/usr.bin/rusers/Makefile
index 21d0ce24a70..6cb39acd29e 100644
--- a/usr.bin/rusers/Makefile
+++ b/usr.bin/rusers/Makefile
@@ -1,7 +1,6 @@
 # $FreeBSD$
 
 PROG = rusers
-WARNS?=	6
 
 DPADD=	${LIBRPCSVC}
 LDADD=	-lrpcsvc
diff --git a/usr.bin/rwho/Makefile b/usr.bin/rwho/Makefile
index 328aa38bcb9..aee9ff765f7 100644
--- a/usr.bin/rwho/Makefile
+++ b/usr.bin/rwho/Makefile
@@ -1,5 +1,8 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/6/93
+# $FreeBSD$
 
 PROG=	rwho
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/rwho/rwho.c b/usr.bin/rwho/rwho.c
index be82ad36d4d..b41bed83aa6 100644
--- a/usr.bin/rwho/rwho.c
+++ b/usr.bin/rwho/rwho.c
@@ -61,7 +61,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
 
 DIR	*dirp;
 
@@ -172,7 +171,7 @@ main(int argc, char *argv[])
 		(void)sprintf(buf, "%s:%-.*s", mp->myhost,
 		   sizeof(mp->myutmp.out_line), mp->myutmp.out_line);
 		printf("%-*.*s %-*s %s",
-		   UT_NAMESIZE, sizeof(mp->myutmp.out_name),
+		   sizeof(mp->myutmp.out_name), sizeof(mp->myutmp.out_name),
 		   mp->myutmp.out_name,
 		   width,
 		   buf,
diff --git a/usr.bin/script/script.c b/usr.bin/script/script.c
index ad706dcdd35..bd2de283ebf 100644
--- a/usr.bin/script/script.c
+++ b/usr.bin/script/script.c
@@ -126,7 +126,7 @@ main(int argc, char *argv[])
 	if ((fscript = fopen(fname, aflg ? "a" : "w")) == NULL)
 		err(1, "%s", fname);
 
-	if (ttyflg = isatty(STDIN_FILENO)) {
+	if ((ttyflg = isatty(STDIN_FILENO)) != 0) {
 		if (tcgetattr(STDIN_FILENO, &tt) == -1)
 			err(1, "tcgetattr");
 		if (ioctl(STDIN_FILENO, TIOCGWINSZ, &win) == -1)
diff --git a/usr.bin/sed/Makefile b/usr.bin/sed/Makefile
index 9d9886f3688..1fbce17d5fb 100644
--- a/usr.bin/sed/Makefile
+++ b/usr.bin/sed/Makefile
@@ -4,4 +4,6 @@
 PROG=	sed
 SRCS=	compile.c main.c misc.c process.c
 
+WARNS?=	2
+
 .include 
diff --git a/usr.bin/showmount/showmount.c b/usr.bin/showmount/showmount.c
index 5e67cc1bc7b..c70688c7fbc 100644
--- a/usr.bin/showmount/showmount.c
+++ b/usr.bin/showmount/showmount.c
@@ -110,9 +110,7 @@ int tcp_callrpc(const char *host, int prognum, int versnum, int procnum,
  * for detailed information on the protocol.
  */
 int
-main(argc, argv)
-	int argc;
-	char **argv;
+main(int argc, char **argv)
 {
 	register struct exportslist *exp;
 	register struct grouplist *grp;
@@ -213,15 +211,8 @@ main(argc, argv)
  * use tcp as transport method in order to handle large replies.
  */
 int 
-tcp_callrpc(host, prognum, versnum, procnum, inproc, in, outproc, out)
-	const char *host;
-	int prognum;
-	int versnum;
-	int procnum;
-	xdrproc_t inproc;
-	char *in;
-	xdrproc_t outproc;
-	char *out;
+tcp_callrpc(const char *host, int prognum, int versnum, int procnum,
+    xdrproc_t inproc, char *in, xdrproc_t outproc, char *out)
 {
 	CLIENT *client;
 	struct timeval timeout;
@@ -245,9 +236,7 @@ tcp_callrpc(host, prognum, versnum, procnum, inproc, in, outproc, out)
  * Xdr routine for retrieving the mount dump list
  */
 int
-xdr_mntdump(xdrsp, mlp)
-	XDR *xdrsp;
-	struct mountlist **mlp;
+xdr_mntdump(XDR *xdrsp, struct mountlist **mlp)
 {
 	register struct mountlist *mp;
 	register struct mountlist *tp;
@@ -327,9 +316,7 @@ next:
  * Xdr routine to retrieve exports list
  */
 int
-xdr_exportslist(xdrsp, exp)
-	XDR *xdrsp;
-	struct exportslist **exp;
+xdr_exportslist(XDR *xdrsp, struct exportslist **exp)
 {
 	register struct exportslist *ep;
 	register struct grouplist *gp;
@@ -370,7 +357,7 @@ xdr_exportslist(xdrsp, exp)
 }
 
 static void
-usage()
+usage(void)
 {
 	fprintf(stderr, "usage: showmount [-a | -d] [-e3] [host]\n");
 	exit(1);
@@ -380,8 +367,7 @@ usage()
  * Print the binary tree in inorder so that output is sorted.
  */
 void
-print_dump(mp)
-	struct mountlist *mp;
+print_dump(struct mountlist *mp)
 {
 
 	if (mp == NULL)
diff --git a/usr.bin/smbutil/Makefile b/usr.bin/smbutil/Makefile
index 13b5078e041..19ac5fd7343 100644
--- a/usr.bin/smbutil/Makefile
+++ b/usr.bin/smbutil/Makefile
@@ -9,6 +9,8 @@ LDADD=	-lsmb -lkiconv
 CONTRIBDIR=	${.CURDIR}/../../contrib/smbfs
 CFLAGS+=	-I${CONTRIBDIR}/include
 
+WARNS?=	0
+
 .PATH:	${CONTRIBDIR}/smbutil
 
 .include 
diff --git a/usr.bin/sockstat/Makefile b/usr.bin/sockstat/Makefile
index 55e702577e6..8093367fa2d 100644
--- a/usr.bin/sockstat/Makefile
+++ b/usr.bin/sockstat/Makefile
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
 PROG=		sockstat
-WARNS?=		4
 
 .include 
diff --git a/usr.bin/sockstat/sockstat.1 b/usr.bin/sockstat/sockstat.1
index 206dad7e38c..64e163b5ceb 100644
--- a/usr.bin/sockstat/sockstat.1
+++ b/usr.bin/sockstat/sockstat.1
@@ -167,3 +167,10 @@ The
 .Nm
 command and this manual page were written by
 .An Dag-Erling Sm\(/orgrav Aq des@FreeBSD.org .
+.Sh BUGS
+Unlike
+.Xr netstat 1 ,
+.Nm
+lists sockets by walking file descriptor tables and will not output
+the ones owned by the kernel, e.g. NLM sockets created by
+.Xr rpc.lockd 8 .
diff --git a/usr.bin/sockstat/sockstat.c b/usr.bin/sockstat/sockstat.c
index 1b2f1417b9c..1a5af429fdb 100644
--- a/usr.bin/sockstat/sockstat.c
+++ b/usr.bin/sockstat/sockstat.c
@@ -496,8 +496,8 @@ printaddr(int af, struct sockaddr_storage *ss)
 {
 	char addrstr[INET6_ADDRSTRLEN] = { '\0', '\0' };
 	struct sockaddr_un *sun;
-	void *addr;
-	int off, port;
+	void *addr = NULL; /* Keep compiler happy. */
+	int off, port = 0;
 
 	switch (af) {
 	case AF_INET:
diff --git a/usr.bin/su/Makefile b/usr.bin/su/Makefile
index 25216cf44f1..0002e869c47 100644
--- a/usr.bin/su/Makefile
+++ b/usr.bin/su/Makefile
@@ -5,6 +5,8 @@
 
 PROG=	su
 
+WARNS?=	5
+
 DPADD=	${LIBUTIL} ${LIBPAM}
 LDADD=	-lutil ${MINUSLPAM}
 
diff --git a/usr.bin/systat/Makefile b/usr.bin/systat/Makefile
index 4f5f229725b..5ecac6e0096 100644
--- a/usr.bin/systat/Makefile
+++ b/usr.bin/systat/Makefile
@@ -14,7 +14,9 @@ SRCS+=	icmp6.c ip6.c
 CFLAGS+= -DINET6
 .endif
 
-DPADD=	${LIBCURSES} ${LIBM} ${LIBDEVSTAT} ${LIBKVM}
-LDADD=	-lcurses -lm -ldevstat -lkvm
+WARNS?=	0
+
+DPADD=	${LIBCURSES} ${LIBM} ${LIBDEVSTAT} ${LIBKVM} ${LIBULOG}
+LDADD=	-lcursesw -lm -ldevstat -lkvm -lulog
 
 .include 
diff --git a/usr.bin/systat/main.c b/usr.bin/systat/main.c
index 6f6b9940686..d092f10fe19 100644
--- a/usr.bin/systat/main.c
+++ b/usr.bin/systat/main.c
@@ -87,7 +87,7 @@ main(int argc, char **argv)
 	char errbuf[_POSIX2_LINE_MAX], dummy;
 	size_t	size;
 
-	(void) setlocale(LC_TIME, "");
+	(void) setlocale(LC_ALL, "");
 
 	argc--, argv++;
 	while (argc > 0) {
diff --git a/usr.bin/systat/vmstat.c b/usr.bin/systat/vmstat.c
index 38664381ca5..742e2f7b4f0 100644
--- a/usr.bin/systat/vmstat.c
+++ b/usr.bin/systat/vmstat.c
@@ -65,8 +65,9 @@ static const char sccsid[] = "@(#)vmstat.c	8.2 (Berkeley) 1/12/94";
 #include 
 #include 
 #include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 #include 
 #include "systat.h"
 #include "extern.h"
@@ -141,7 +142,6 @@ static void putlongdouble(long double, int, int, int, int, int);
 static int ucount(void);
 
 static	int ncpu;
-static	int ut;
 static	char buf[26];
 static	time_t t;
 static	double etime;
@@ -150,16 +150,10 @@ static	long *intrloc;
 static	char **intrname;
 static	int nextintsrow;
 
-struct	utmp utmp;
-
-
 WINDOW *
 openkre(void)
 {
 
-	ut = open(_PATH_UTMP, O_RDONLY);
-	if (ut < 0)
-		error("No utmp");
 	return (stdscr);
 }
 
@@ -167,7 +161,6 @@ void
 closekre(WINDOW *w)
 {
 
-	(void) close(ut);
 	if (w == NULL)
 		return;
 	wclear(w);
@@ -634,14 +627,14 @@ static int
 ucount(void)
 {
 	int nusers = 0;
+	struct utmpx *ut;
 
-	if (ut < 0)
-		return (0);
-	while (read(ut, &utmp, sizeof(utmp)))
-		if (utmp.ut_name[0] != '\0')
+	setutxent();
+	while ((ut = getutxent()) != NULL)
+		if (ut->ut_type == USER_PROCESS)
 			nusers++;
+	endutxent();
 
-	lseek(ut, 0L, L_SET);
 	return (nusers);
 }
 
diff --git a/usr.bin/tail/Makefile b/usr.bin/tail/Makefile
index c8166936983..672cbed008e 100644
--- a/usr.bin/tail/Makefile
+++ b/usr.bin/tail/Makefile
@@ -3,6 +3,5 @@
 
 PROG=	tail
 SRCS=	forward.c misc.c read.c reverse.c tail.c
-WARNS?=	4
 
 .include 
diff --git a/usr.bin/tail/misc.c b/usr.bin/tail/misc.c
index 7e57504f818..26b162af9a8 100644
--- a/usr.bin/tail/misc.c
+++ b/usr.bin/tail/misc.c
@@ -63,7 +63,7 @@ ierr(const char *fname)
 }
 
 void
-oerr()
+oerr(void)
 {
 	err(1, "stdout");
 }
diff --git a/usr.bin/talk/ctl_transact.c b/usr.bin/talk/ctl_transact.c
index 9c8665dab0d..ff5b4622411 100644
--- a/usr.bin/talk/ctl_transact.c
+++ b/usr.bin/talk/ctl_transact.c
@@ -42,7 +42,6 @@ static const char sccsid[] = "@(#)ctl_transact.c	8.1 (Berkeley) 6/6/93";
 #include 
 
 #include 
-#include 
 
 #include "talk.h"
 #include "talk_ctl.h"
diff --git a/usr.bin/talk/display.c b/usr.bin/talk/display.c
index f565354b3e9..11f5c809c1c 100644
--- a/usr.bin/talk/display.c
+++ b/usr.bin/talk/display.c
@@ -44,6 +44,7 @@ static const char sccsid[] = "@(#)display.c	8.1 (Berkeley) 6/6/93";
  * displaying of text
  */
 #include 
+#include 
 
 #include "talk.h"
 
diff --git a/usr.bin/talk/get_addrs.c b/usr.bin/talk/get_addrs.c
index 2923021aa55..fbd415b5b1c 100644
--- a/usr.bin/talk/get_addrs.c
+++ b/usr.bin/talk/get_addrs.c
@@ -42,6 +42,7 @@ static const char sccsid[] = "@(#)get_addrs.c	8.1 (Berkeley) 6/6/93";
 #include 
 #include 
 #include 
+#include 
 
 #include "talk.h"
 #include "talk_ctl.h"
diff --git a/usr.bin/talk/get_iface.c b/usr.bin/talk/get_iface.c
index ebf08bd48a1..96d3d6edabb 100644
--- a/usr.bin/talk/get_iface.c
+++ b/usr.bin/talk/get_iface.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
+#include 
 
 #include "talk.h"
 
diff --git a/usr.bin/talk/get_names.c b/usr.bin/talk/get_names.c
index b3e0f7b661e..a4ea39df5b9 100644
--- a/usr.bin/talk/get_names.c
+++ b/usr.bin/talk/get_names.c
@@ -45,6 +45,7 @@ static const char sccsid[] = "@(#)get_names.c	8.1 (Berkeley) 6/6/93";
 #include 
 #include 
 #include 
+#include 
 
 #include "talk.h"
 
diff --git a/usr.bin/talk/invite.c b/usr.bin/talk/invite.c
index 99c25143549..d94362b379a 100644
--- a/usr.bin/talk/invite.c
+++ b/usr.bin/talk/invite.c
@@ -47,6 +47,7 @@ static const char sccsid[] = "@(#)invite.c	8.1 (Berkeley) 6/6/93";
 #include 
 #include 
 #include 
+#include 
 
 #include "talk_ctl.h"
 #include "talk.h"
diff --git a/usr.bin/talk/look_up.c b/usr.bin/talk/look_up.c
index 1ccf23c652f..7a66e6fbe03 100644
--- a/usr.bin/talk/look_up.c
+++ b/usr.bin/talk/look_up.c
@@ -45,6 +45,7 @@ static const char sccsid[] = "@(#)look_up.c	8.1 (Berkeley) 6/6/93";
 
 #include 
 #include 
+#include 
 
 #include "talk_ctl.h"
 #include "talk.h"
diff --git a/usr.bin/talk/talk.c b/usr.bin/talk/talk.c
index 5fc8337322d..578e370bb18 100644
--- a/usr.bin/talk/talk.c
+++ b/usr.bin/talk/talk.c
@@ -46,6 +46,7 @@ static const char copyright[] =
 #endif
 
 #include 
+#include 
 
 #include "talk.h"
 
diff --git a/usr.bin/talk/talk.h b/usr.bin/talk/talk.h
index e20c8ecc370..47cbbaeaefd 100644
--- a/usr.bin/talk/talk.h
+++ b/usr.bin/talk/talk.h
@@ -42,7 +42,6 @@
 #include 
 #include 
 #include 
-#include 
 
 extern	int sockt;
 extern	int curses_initialized;
diff --git a/usr.bin/tar/Makefile b/usr.bin/tar/Makefile
index 22f8ff79517..7234845bbfd 100644
--- a/usr.bin/tar/Makefile
+++ b/usr.bin/tar/Makefile
@@ -4,7 +4,6 @@
 PROG=	bsdtar
 BSDTAR_VERSION_STRING=2.7.0
 SRCS=	bsdtar.c cmdline.c getdate.c matching.c read.c siginfo.c subst.c tree.c util.c write.c
-WARNS?=	5
 DPADD=	${LIBARCHIVE} ${LIBBZ2} ${LIBZ}
 LDADD=	-larchive -lbz2 -lz -lmd
 .if ${MK_OPENSSL} != "no"
diff --git a/usr.bin/tar/test/Makefile b/usr.bin/tar/test/Makefile
index 2f6f05665cd..3880be051d2 100644
--- a/usr.bin/tar/test/Makefile
+++ b/usr.bin/tar/test/Makefile
@@ -45,7 +45,6 @@ CFLAGS+= -I${TAR_SRCDIR}
 # Uncomment to link against dmalloc
 #LDADD+= -L/usr/local/lib -ldmalloc
 #CFLAGS+= -I/usr/local/include -DUSE_DMALLOC
-WARNS=6
 
 check test:	bsdtar_test
 	./bsdtar_test -p ${.OBJDIR}/../bsdtar -r ${.CURDIR}
diff --git a/usr.bin/tcopy/Makefile b/usr.bin/tcopy/Makefile
index 1bae0b22942..feb57695c1e 100644
--- a/usr.bin/tcopy/Makefile
+++ b/usr.bin/tcopy/Makefile
@@ -3,4 +3,6 @@
 
 PROG=	tcopy
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/tcopy/tcopy.c b/usr.bin/tcopy/tcopy.c
index 540ac06af73..4d9d516b08e 100644
--- a/usr.bin/tcopy/tcopy.c
+++ b/usr.bin/tcopy/tcopy.c
@@ -70,17 +70,15 @@ FILE	*msg;
 
 void	*getspace(int);
 void	 intr(int);
-static void	 usage(void);
+static void	 usage(void) __dead2;
 void	 verify(int, int, char *);
 void	 writeop(int, int);
 void	rewind_tape(int);
 
 int
-main(argc, argv)
-	int argc;
-	char *argv[];
+main(int argc, char *argv[])
 {
-	register int lastnread, nread, nw, inp, outp;
+	int lastnread, nread, nw, inp, outp;
 	enum {READ, VERIFY, COPY, COPYVERIFY} op = READ;
 	sig_t oldsig;
 	int ch, needeof;
@@ -227,12 +225,10 @@ r1:		guesslen = 0;
 }
 
 void
-verify(inp, outp, outb)
-	register int inp, outp;
-	register char *outb;
+verify(int inp, int outp, char *outb)
 {
-	register int eot, inmaxblk, inn, outmaxblk, outn;
-	register char *inb;
+	int eot, inmaxblk, inn, outmaxblk, outn;
+	char *inb;
 
 	inb = getspace(maxblk);
 	inmaxblk = outmaxblk = maxblk;
@@ -281,8 +277,7 @@ r2:		if (inn != outn) {
 }
 
 void
-intr(signo)
-	int signo __unused;
+intr(int signo __unused)
 {
 	if (record) {
 		if (record - lastrec > 1)
@@ -296,8 +291,7 @@ intr(signo)
 }
 
 void *
-getspace(blk)
-	int blk;
+getspace(int blk)
 {
 	void *bp;
 
@@ -307,8 +301,7 @@ getspace(blk)
 }
 
 void
-writeop(fd, type)
-	int fd, type;
+writeop(int fd, int type)
 {
 	struct mtop op;
 
@@ -319,7 +312,7 @@ writeop(fd, type)
 }
 
 static void
-usage()
+usage(void)
 {
 	fprintf(stderr, "usage: tcopy [-cvx] [-s maxblk] [src [dest]]\n");
 	exit(1);
diff --git a/usr.bin/telnet/Makefile b/usr.bin/telnet/Makefile
index ee112ffa06c..0ef55c50e29 100644
--- a/usr.bin/telnet/Makefile
+++ b/usr.bin/telnet/Makefile
@@ -17,6 +17,8 @@ CFLAGS+=	-DKLUDGELINEMODE -DUSE_TERMIO -DENV_HACK -DOPIE \
 CFLAGS+=	-DINET6
 .endif
 
+WARNS?=		2
+
 LIBTELNET=	${.OBJDIR}/../../lib/libtelnet/libtelnet.a
 
 DPADD=		${LIBTERMCAP} ${LIBTELNET}
diff --git a/usr.bin/tftp/tftp.c b/usr.bin/tftp/tftp.c
index 2f032df30c4..43009029386 100644
--- a/usr.bin/tftp/tftp.c
+++ b/usr.bin/tftp/tftp.c
@@ -140,6 +140,7 @@ send_data:
 		    (struct sockaddr *)&peer, peer.ss_len);
 		if (n != size + 4) {
 			warn("sendto");
+			txrx_error = 1;
 			goto abort;
 		}
 		read_ahead(file, convert);
@@ -153,6 +154,7 @@ send_data:
 			alarm(0);
 			if (n < 0) {
 				warn("recvfrom");
+				txrx_error = 1;
 				goto abort;
 			}
 			if (!serv.ss_family)
@@ -160,6 +162,7 @@ send_data:
 			else if (!cmpport((struct sockaddr *)&serv,
 			    (struct sockaddr *)&from)) {
 				warn("server port mismatch");
+				txrx_error = 1;
 				goto abort;
 			}
 			peer = from;
@@ -202,7 +205,6 @@ abort:
 	stopclock();
 	if (amount > 0)
 		printstats("Sent", amount);
-	txrx_error = 1;
 }
 
 /*
@@ -255,6 +257,7 @@ send_ack:
 		    peer.ss_len) != size) {
 			alarm(0);
 			warn("sendto");
+			txrx_error = 1;
 			goto abort;
 		}
 		write_behind(file, convert);
@@ -268,6 +271,7 @@ send_ack:
 			alarm(0);
 			if (n < 0) {
 				warn("recvfrom");
+				txrx_error = 1;
 				goto abort;
 			}
 			if (!serv.ss_family)
@@ -275,6 +279,7 @@ send_ack:
 			else if (!cmpport((struct sockaddr *)&serv,
 			    (struct sockaddr *)&from)) {
 				warn("server port mismatch");
+				txrx_error = 1;
 				goto abort;
 			}
 			peer = from;
@@ -325,7 +330,6 @@ abort:						/* ok to ack, since user */
 	stopclock();
 	if (amount > 0)
 		printstats("Received", amount);
-	txrx_error = 1;
 }
 
 static int
diff --git a/usr.bin/time/Makefile b/usr.bin/time/Makefile
index 5a580d2c4ea..e462af66032 100644
--- a/usr.bin/time/Makefile
+++ b/usr.bin/time/Makefile
@@ -2,6 +2,5 @@
 # $FreeBSD$
 
 PROG=	time
-WARNS?=6
 
 .include 
diff --git a/usr.bin/top/Makefile b/usr.bin/top/Makefile
index 182714aa702..864473f5c61 100644
--- a/usr.bin/top/Makefile
+++ b/usr.bin/top/Makefile
@@ -10,6 +10,8 @@ SRCS+=	sigdesc.h top.local.h
 CFLAGS+= -DHAVE_GETOPT -DHAVE_STRERROR -DORDER
 CFLAGS+= -I${.CURDIR} -I${TOPDIR} -I.
 
+WARNS?=	0
+
 #
 # The table size should be a prime number approximately twice as
 # large as the number of lines in /etc/passwd.  The default number
diff --git a/usr.bin/tr/Makefile b/usr.bin/tr/Makefile
index 00bdd8d5bb7..c5c5297ef64 100644
--- a/usr.bin/tr/Makefile
+++ b/usr.bin/tr/Makefile
@@ -4,4 +4,6 @@
 PROG=	tr
 SRCS=	cmap.c cset.c str.c tr.c
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/truss/Makefile b/usr.bin/truss/Makefile
index 104cd968776..d907ad59c8e 100644
--- a/usr.bin/truss/Makefile
+++ b/usr.bin/truss/Makefile
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
-WARNS?= 6
 NO_WERROR=
 PROG=	truss
 SRCS=	main.c setup.c syscalls.c syscalls.h ioctl.c ${MACHINE_ARCH}-fbsd.c
diff --git a/usr.bin/truss/amd64-fbsd32.c b/usr.bin/truss/amd64-fbsd32.c
index eab841c96e8..3b1b88220b1 100644
--- a/usr.bin/truss/amd64-fbsd32.c
+++ b/usr.bin/truss/amd64-fbsd32.c
@@ -315,19 +315,6 @@ amd64_fbsd32_syscall_exit(struct trussinfo *trussinfo, int syscall_num __unused)
     }
   }
 
-  /*
-   * The pipe syscall returns its fds in two registers and has assembly glue
-   * to provide the libc API, so it cannot be handled like regular syscalls.
-   * The nargs check is so we don't have to do yet another strcmp on every
-   * syscall.
-   */
-  if (!errorp && fsc.nargs == 0 && fsc.name && strcmp(fsc.name, "pipe") == 0) {
-      fsc.nargs = 1;
-      fsc.s_args = malloc((1+fsc.nargs) * sizeof(char*));
-      asprintf(&fsc.s_args[0], "[%d,%d]", (int)retval, (int)regs.r_rdx);
-      retval = 0;
-  }
-
   if (fsc.name != NULL &&
       (!strcmp(fsc.name, "freebsd32_execve") || !strcmp(fsc.name, "exit"))) {
 	trussinfo->curthread->in_syscall = 1;
diff --git a/usr.bin/truss/i386-fbsd.c b/usr.bin/truss/i386-fbsd.c
index 8500f32bf48..3a81392b15f 100644
--- a/usr.bin/truss/i386-fbsd.c
+++ b/usr.bin/truss/i386-fbsd.c
@@ -305,19 +305,6 @@ i386_syscall_exit(struct trussinfo *trussinfo, int syscall_num __unused)
     }
   }
 
-  /*
-   * The pipe syscall returns its fds in two registers and has assembly glue
-   * to provide the libc API, so it cannot be handled like regular syscalls.
-   * The nargs check is so we don't have to do yet another strcmp on every
-   * syscall.
-   */
-  if (!errorp && fsc.nargs == 0 && fsc.name && strcmp(fsc.name, "pipe") == 0) {
-      fsc.nargs = 1;
-      fsc.s_args = malloc((1+fsc.nargs) * sizeof(char*));
-      asprintf(&fsc.s_args[0], "[%d,%d]", (int)retval, regs.r_edx);
-      retval = 0;
-  }
-
   if (fsc.name != NULL &&
       (!strcmp(fsc.name, "execve") || !strcmp(fsc.name, "exit"))) {
 	trussinfo->curthread->in_syscall = 1;
diff --git a/usr.bin/truss/main.c b/usr.bin/truss/main.c
index d0dd073e632..586fcd64299 100644
--- a/usr.bin/truss/main.c
+++ b/usr.bin/truss/main.c
@@ -239,6 +239,12 @@ main(int ac, char **av)
 		if ((trussinfo->outfile = fopen(fname, "w")) == NULL)
 			errx(1, "cannot open %s", fname);
 	}
+	/*
+	 * Set FD_CLOEXEC, so that the output file is not shared with
+	 * the traced process.
+	 */
+	if (fcntl(fileno(trussinfo->outfile), F_SETFD, FD_CLOEXEC) == -1)
+		warn("fcntl()");
 
 	/*
 	 * If truss starts the process itself, it will ignore some signals --
diff --git a/usr.bin/truss/syscalls.c b/usr.bin/truss/syscalls.c
index d9278156649..f927e1ec1d2 100644
--- a/usr.bin/truss/syscalls.c
+++ b/usr.bin/truss/syscalls.c
@@ -92,6 +92,18 @@ static const char rcsid[] =
 struct syscall syscalls[] = {
 	{ .name = "fcntl", .ret_type = 1, .nargs = 3,
 	  .args = { { Int, 0 } , { Fcntl, 1 }, { Fcntlflag | OUT, 2 } } },
+	{ .name = "fork", .ret_type = 1, .nargs = 0 },
+	{ .name = "getegid", .ret_type = 1, .nargs = 0 },
+	{ .name = "geteuid", .ret_type = 1, .nargs = 0 },
+	{ .name = "getgid", .ret_type = 1, .nargs = 0 },
+	{ .name = "getpid", .ret_type = 1, .nargs = 0 },
+	{ .name = "getpgid", .ret_type = 1, .nargs = 1,
+	  .args = { { Int, 0 } } },
+	{ .name = "getpgrp", .ret_type = 1, .nargs = 0 },
+	{ .name = "getppid", .ret_type = 1, .nargs = 0 },
+	{ .name = "getsid", .ret_type = 1, .nargs = 1,
+	  .args = { { Int, 0 } } },
+	{ .name = "getuid", .ret_type = 1, .nargs = 0 },
 	{ .name = "readlink", .ret_type = 1, .nargs = 3,
 	  .args = { { Name, 0 } , { Readlinkres | OUT, 1 }, { Int, 2 } } },
 	{ .name = "lseek", .ret_type = 2, .nargs = 3,
@@ -230,6 +242,8 @@ struct syscall syscalls[] = {
 	  .args = { { Name | IN, 0 }, { Hex, 1 } } },
 	{ .name = "pathconf", .ret_type = 1, .nargs = 2,
 	  .args = { { Name | IN, 0 }, { Pathconf, 1 } } },
+	{ .name = "pipe", .ret_type = 1, .nargs = 1,
+	  .args = { { Ptr, 0 } } },
 	{ .name = "truncate", .ret_type = 1, .nargs = 3,
 	  .args = { { Name | IN, 0 }, { Int | IN, 1 }, { Quad | IN, 2 } } },
 	{ .name = "ftruncate", .ret_type = 1, .nargs = 3,
@@ -244,6 +258,8 @@ struct syscall syscalls[] = {
 	  .args = { { Name , 0 } , { Name, 1 } } },
 	{ .name = "symlink", .ret_type = 1, .nargs = 2,
 	  .args = { { Name , 0 } , { Name, 1 } } },
+	{ .name = "posix_openpt", .ret_type = 1, .nargs = 1,
+	  .args = { { Open, 0 } } },
 	{ .name = 0 },
 };
 
@@ -259,7 +275,7 @@ struct xlat {
 static struct xlat kevent_filters[] = {
 	X(EVFILT_READ) X(EVFILT_WRITE) X(EVFILT_AIO) X(EVFILT_VNODE)
 	X(EVFILT_PROC) X(EVFILT_SIGNAL) X(EVFILT_TIMER)
-	X(EVFILT_NETDEV) X(EVFILT_FS) X(EVFILT_READ) XEND
+	X(EVFILT_FS) X(EVFILT_READ) XEND
 };
 
 static struct xlat kevent_flags[] = {
@@ -1125,6 +1141,12 @@ print_syscall_ret(struct trussinfo *trussinfo, const char *name, int nargs,
 	if (errorp) {
 		fprintf(trussinfo->outfile, " ERR#%ld '%s'\n", retval, strerror(retval));
 	} else {
+		/*
+		 * Because pipe(2) has a special assembly glue to provide the
+		 * libc API, we have to adjust retval.
+		 */
+		if (name != NULL && !strcmp(name, "pipe"))
+			retval = 0;
 		fprintf(trussinfo->outfile, " = %ld (0x%lx)\n", retval, retval);
 	}
 }
@@ -1141,15 +1163,15 @@ print_summary(struct trussinfo *trussinfo)
 	ncall = nerror = 0;
 	for (sc = syscalls; sc->name != NULL; sc++)
 		if (sc->ncalls) {
-			fprintf(trussinfo->outfile, "%-20s%5d.%09ld%8d%8d\n",
-			    sc->name, sc->time.tv_sec, sc->time.tv_nsec,
-			    sc->ncalls, sc->nerror);
+			fprintf(trussinfo->outfile, "%-20s%5jd.%09ld%8d%8d\n",
+			    sc->name, (intmax_t)sc->time.tv_sec,
+			    sc->time.tv_nsec, sc->ncalls, sc->nerror);
 			timespecadd(&total, &sc->time, &total);
 			ncall += sc->ncalls;
 			nerror += sc->nerror;
 		}
 	fprintf(trussinfo->outfile, "%20s%15s%8s%8s\n",
 		"", "-------------", "-------", "-------");
-	fprintf(trussinfo->outfile, "%-20s%5d.%09ld%8d%8d\n",
-		"", total.tv_sec, total.tv_nsec, ncall, nerror);
+	fprintf(trussinfo->outfile, "%-20s%5jd.%09ld%8d%8d\n",
+		"", (intmax_t)total.tv_sec, total.tv_nsec, ncall, nerror);
 }
diff --git a/usr.bin/tset/extern.h b/usr.bin/tset/extern.h
index f02d0c50bd5..8ec3f20b285 100644
--- a/usr.bin/tset/extern.h
+++ b/usr.bin/tset/extern.h
@@ -34,8 +34,6 @@
  *	$FreeBSD$
  */
 
-#include 
-
 extern struct termios mode, oldmode;
 extern int Columns, isreset, Lines;
 extern int erasech, intrchar, killch;
diff --git a/usr.bin/tset/map.c b/usr.bin/tset/map.c
index d3db6b67e70..80a894f70f6 100644
--- a/usr.bin/tset/map.c
+++ b/usr.bin/tset/map.c
@@ -75,9 +75,7 @@ MAP *cur, *maplist;
  * The baud rate tests are: >, <, @, =, !
  */
 void
-add_mapping(port, arg)
-	const char *port;
-	char *arg;
+add_mapping(const char *port, char *arg)
 {
 	MAP *mapp;
 	char *copy, *p, *termp;
@@ -190,8 +188,7 @@ badmopt:		errx(1, "illegal -m option format: %s", copy);
  * 'type'.
  */
 const char *
-mapped(type)
-	const char *type;
+mapped(const char *type)
 {
 	MAP *mapp;
 	int match;
@@ -240,8 +237,7 @@ SPEEDS speeds[] = {
 };
 
 speed_t
-tset_baudrate(rate)
-	char *rate;
+tset_baudrate(char *rate)
 {
 	SPEEDS *sp;
 	speed_t speed;
diff --git a/usr.bin/tset/misc.c b/usr.bin/tset/misc.c
index 52358e75a14..16e0e1e0082 100644
--- a/usr.bin/tset/misc.c
+++ b/usr.bin/tset/misc.c
@@ -42,15 +42,12 @@ static const char sccsid[] = "@(#)misc.c	8.1 (Berkeley) 6/9/93";
 #include 
 #include 
 #include 
-#include 
-#include 
 #include 
 
 #include "extern.h"
 
 void
-cat(file)
-	char *file;
+cat(char *file)
 {
 	register int fd, nr, nw;
 	char buf[1024];
@@ -67,8 +64,7 @@ cat(file)
 }
 
 int
-outc(c)
-	int c;
+outc(int c)
 {
 	return putc(c, stderr);
 }
diff --git a/usr.bin/tset/set.c b/usr.bin/tset/set.c
index 85965b38b99..39a0d960208 100644
--- a/usr.bin/tset/set.c
+++ b/usr.bin/tset/set.c
@@ -40,6 +40,7 @@ static const char sccsid[] = "@(#)set.c	8.2 (Berkeley) 2/28/94";
 #endif
 
 #include 
+#include 
 #include 
 #include 
 
@@ -54,7 +55,7 @@ int	set_tabs(void);
  * a child program dies in raw mode.
  */
 void
-reset_mode()
+reset_mode(void)
 {
 	tcgetattr(STDERR_FILENO, &mode);
 
@@ -155,7 +156,7 @@ reset_mode()
  * entry and command line and update their values in 'mode'.
  */
 void
-set_control_chars()
+set_control_chars(void)
 {
 	char *bp, *p, bs_char, buf[1024];
 
@@ -192,8 +193,7 @@ set_control_chars()
  * uppercase to internal lowercase.
  */
 void
-set_conversions(usingupper)
-	int usingupper;
+set_conversions(int usingupper)
 {
 	if (tgetflag("UC") || usingupper) {
 #ifdef IUCLC
@@ -238,7 +238,7 @@ set_conversions(usingupper)
 
 /* Output startup string. */
 void
-set_init()
+set_init(void)
 {
 	char *bp, buf[1024];
 	int settle;
@@ -282,7 +282,7 @@ set_init()
  * Return nonzero if we set any tab stops, zero if not.
  */
 int
-set_tabs()
+set_tabs(void)
 {
 	int c;
 	char *capsp, *clear_tabs;
diff --git a/usr.bin/tset/term.c b/usr.bin/tset/term.c
index 54a349e05f2..16acb23f6ea 100644
--- a/usr.bin/tset/term.c
+++ b/usr.bin/tset/term.c
@@ -45,6 +45,7 @@ static const char sccsid[] = "@(#)term.c	8.1 (Berkeley) 6/9/93";
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include "extern.h"
@@ -59,8 +60,7 @@ char	*ttys(char *);
  * its termcap entry.
  */
 const char *
-get_termcap_entry(userarg, tcapbufp)
-	char *userarg, **tcapbufp;
+get_termcap_entry(char *userarg, char **tcapbufp)
 {
 	struct ttyent *t;
 	int rval;
@@ -125,8 +125,7 @@ found:	if ((p = getenv("TERMCAP")) != NULL && *p != '/')
 
 /* Prompt the user for a terminal type. */
 const char *
-askuser(dflt)
-	const char *dflt;
+askuser(const char *dflt)
 {
 	static char answer[256];
 	char *p;
diff --git a/usr.bin/tset/tset.c b/usr.bin/tset/tset.c
index dc4c333e2f9..ddcc2dac8ff 100644
--- a/usr.bin/tset/tset.c
+++ b/usr.bin/tset/tset.c
@@ -53,6 +53,7 @@ static const char sccsid[] = "@(#)tset.c	8.1 (Berkeley) 6/9/93";
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 
diff --git a/usr.bin/tset/wrterm.c b/usr.bin/tset/wrterm.c
index 9d149183e2f..29b19218a19 100644
--- a/usr.bin/tset/wrterm.c
+++ b/usr.bin/tset/wrterm.c
@@ -53,8 +53,7 @@ static const char sccsid[] = "@(#)wrterm.c	8.1 (Berkeley) 6/9/93";
  * shell problems and omitting empty fields.
  */
 void
-wrtermcap(bp)
-	char *bp;
+wrtermcap(char *bp)
 {
 	register int ch;
 	register char *p;
diff --git a/usr.bin/unifdef/Makefile b/usr.bin/unifdef/Makefile
index b31709aa6e6..dcd358f2319 100644
--- a/usr.bin/unifdef/Makefile
+++ b/usr.bin/unifdef/Makefile
@@ -4,6 +4,5 @@
 PROG=	unifdef
 SCRIPTS=unifdefall.sh
 MLINKS=	unifdef.1 unifdefall.1
-WARNS?=	5
 
 .include 
diff --git a/usr.bin/unifdef/unifdef.1 b/usr.bin/unifdef/unifdef.1
index 12a5438553f..80ee7ba12a7 100644
--- a/usr.bin/unifdef/unifdef.1
+++ b/usr.bin/unifdef/unifdef.1
@@ -1,6 +1,6 @@
 .\" Copyright (c) 1985, 1991, 1993
 .\"	The Regents of the University of California.  All rights reserved.
-.\" Copyright (c) 2002 - 2005 Tony Finch .  All rights reserved.
+.\" Copyright (c) 2002 - 2009 Tony Finch .  All rights reserved.
 .\"
 .\" This code is derived from software contributed to Berkeley by
 .\" Dave Yost. It was rewritten to support ANSI C by Tony Finch.
@@ -30,7 +30,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     @(#)unifdef.1	8.2 (Berkeley) 4/1/94
-.\"	$dotat: things/unifdef.1,v 1.51 2005/03/08 12:39:01 fanf2 Exp $
+.\"	$dotat: unifdef/unifdef.1,v 1.60 2009/11/25 00:11:02 fanf2 Exp $
 .\" $FreeBSD$
 .\"
 .Dd September 24, 2002
@@ -41,7 +41,7 @@
 .Nd remove preprocessor conditionals from code
 .Sh SYNOPSIS
 .Nm
-.Op Fl cdeklnst
+.Op Fl BbcdeKknst
 .Op Fl I Ns Ar path
 .Op Fl D Ns Ar sym Ns Op = Ns Ar val
 .Op Fl U Ns Ar sym
@@ -70,46 +70,85 @@ utility acts on
 .Ic #if , #ifdef , #ifndef , #elif , #else ,
 and
 .Ic #endif
-lines,
-and it understands only the commonly-used subset
+lines.
+A directive is only processed
+if the symbols specified on the command line are sufficient to allow
+.Nm
+to get a definite value for its control expression.
+If the result is false,
+the directive and the following lines under its control are removed.
+If the result is true,
+only the directive is removed.
+An
+.Ic #ifdef
+or
+.Ic #ifndef
+directive is passed through unchanged
+if its controlling symbol is not specified on the command line.
+Any
+.Ic #if
+or
+.Ic #elif
+control expression that has an unknown value or that
+.Nm
+cannot parse is passed through unchanged.
+By default,
+.Nm
+ignores
+.Ic #if
+and
+.Ic #elif
+lines with constant expressions;
+it can be told to process them by specifying the
+.Fl k
+flag on the command line.
+.Pp
+It understands a commonly-used subset
 of the expression syntax for
 .Ic #if
 and
 .Ic #elif
-lines.
-It handles
+lines:
+integer constants,
 integer values of symbols defined on the command line,
 the
 .Fn defined
-operator applied to symbols defined or undefined on the command line,
+operator,
 the operators
 .Ic \&! , < , > , <= , >= , == , != , && , || ,
 and parenthesized expressions.
-Anything that it does not understand is passed through unharmed.
-It only processes
-.Ic #ifdef
-and
-.Ic #ifndef
-directives if the symbol is specified on the command line,
-otherwise they are also passed through unchanged.
-By default, it ignores
-.Ic #if
-and
-.Ic #elif
-lines with constant expressions,
-or they may be processed by specifying the
-.Fl k
-flag on the command line.
+A kind of
+.Dq "short circuit"
+evaluation is used for the
+.Ic &&
+operator:
+if either operand is definitely false then the result is false,
+even if the value of the other operand is unknown.
+Similarly,
+if either operand of
+.Ic ||
+is definitely true then the result is true.
+.Pp
+In most cases, the
+.Nm
+utility does not distinguish between object-like macros
+(without arguments) and function-like arguments (with arguments).
+If a macro is not explicitly defined, or is defined with the
+.Fl D
+flag on the command-line, its arguments are ignored.
+If a macro is explicitly undefined on the command line with the
+.Fl U
+flag, it may not have any arguments since this leads to a syntax error.
 .Pp
 The
 .Nm
-utility also understands just enough about C
+utility understands just enough about C
 to know when one of the directives is inactive
 because it is inside
 a comment,
 or affected by a backslash-continued line.
 It spots unusually-formatted preprocessor directives
-and knows when the layout is too odd to handle.
+and knows when the layout is too odd for it to handle.
 .Pp
 A script called
 .Nm unifdefall
@@ -125,8 +164,7 @@ and their definitions (or lack thereof),
 then invokes
 .Nm
 with appropriate arguments to process the file.
-.Pp
-Available options:
+.Sh OPTIONS
 .Pp
 .Bl -tag -width indent -compact
 .It Fl D Ns Ar sym Ns Op = Ns Ar val
@@ -143,6 +181,19 @@ Specify that a symbol is undefined.
 If the same symbol appears in more than one argument,
 the last occurrence dominates.
 .Pp
+.It Fl B
+Compress blank lines around a deleted section.
+Mutually exclusive with the
+.Fl b
+option.
+.Pp
+.It Fl b
+Replace removed lines with blank lines
+instead of deleting them.
+Mutually exclusive with the
+.Fl B
+option.
+.Pp
 .It Fl c
 If the
 .Fl c
@@ -174,6 +225,16 @@ option changes the behaviour so that,
 where possible,
 such lines are left unprocessed instead of reporting an error.
 .Pp
+.It Fl K
+Always treat the result of
+.Ic &&
+and
+.Ic ||
+operators as unknown if either operand is unknown,
+instead of short-circuiting when unknown operands can't affect the result.
+This option is for compatibility with older versions of
+.Nm .
+.Pp
 .It Fl k
 Process
 .Ic #if
@@ -186,10 +247,6 @@ because they typically start
 and are used as a kind of comment to sketch out future or past development.
 It would be rude to strip them out, just as it would be for normal comments.
 .Pp
-.It Fl l
-Replace removed lines with blank lines
-instead of deleting them.
-.Pp
 .It Fl n
 Add
 .Li #line
@@ -235,7 +292,7 @@ comments
 and line continuations
 inside those
 .Ic #ifdef Ns s .
-One specifies ignored symbols with
+You can specify ignored symbols with
 .Fl iD Ns Ar sym Ns Oo = Ns Ar val Oc
 and
 .Fl iU Ns Ar sym
@@ -313,7 +370,7 @@ command appeared in
 support was added in
 .Fx 4.7 .
 .Sh AUTHORS
-This implementation was originally written by
+The original implementation was written by
 .An Dave Yost Aq Dave@Yost.com .
 .An Tony Finch Aq dot@dotat.at
 rewrote it to support
diff --git a/usr.bin/unifdef/unifdef.c b/usr.bin/unifdef/unifdef.c
index a8427d150a8..be5b4fc6573 100644
--- a/usr.bin/unifdef/unifdef.c
+++ b/usr.bin/unifdef/unifdef.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2002 - 2008 Tony Finch 
+ * Copyright (c) 2002 - 2009 Tony Finch 
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -24,27 +24,20 @@
  */
 
 /*
- * This code is derived from software contributed to Berkeley by Dave Yost.
+ * This code was derived from software contributed to Berkeley by Dave Yost.
  * It was rewritten to support ANSI C by Tony Finch. The original version
  * of unifdef carried the 4-clause BSD copyright licence. None of its code
  * remains in this version (though some of the names remain) so it now
  * carries a more liberal licence.
+ *
+ * The latest version is available from http://dotat.at/prog/unifdef
  */
 
 #include 
 
-#ifndef lint
-#if 0
-static const char copyright[] =
-"@(#) Copyright (c) 1985, 1993\n\
-	The Regents of the University of California.  All rights reserved.\n";
-#endif
 #ifdef __IDSTRING
-__IDSTRING(Berkeley, "@(#)unifdef.c	8.1 (Berkeley) 6/6/93");
-__IDSTRING(NetBSD, "$NetBSD: unifdef.c,v 1.8 2000/07/03 02:51:36 matt Exp $");
-__IDSTRING(dotat, "$dotat: things/unifdef.c,v 1.178 2008/03/02 22:23:32 fanf2 Exp $");
+__IDSTRING(dotat, "$dotat: unifdef/unifdef.c,v 1.190 2009/11/27 17:21:26 fanf2 Exp $");
 #endif
-#endif /* not lint */
 #ifdef __FBSDID
 __FBSDID("$FreeBSD$");
 #endif
@@ -88,6 +81,7 @@ typedef enum {
 	LT_DODGY_LAST = LT_DODGY + LT_ENDIF,
 	LT_PLAIN,		/* ordinary line */
 	LT_EOF,			/* end of file */
+	LT_ERROR,		/* unevaluable #if */
 	LT_COUNT
 } Linetype;
 
@@ -98,7 +92,7 @@ static char const * const linetype_name[] = {
 	"DODGY IF", "DODGY TRUE", "DODGY FALSE",
 	"DODGY ELIF", "DODGY ELTRUE", "DODGY ELFALSE",
 	"DODGY ELSE", "DODGY ENDIF",
-	"PLAIN", "EOF"
+	"PLAIN", "EOF", "ERROR"
 };
 
 /* state of #if processing */
@@ -166,11 +160,13 @@ static char const * const linestate_name[] = {
  * Globals.
  */
 
+static bool             compblank;		/* -B: compress blank lines */
+static bool             lnblank;		/* -b: blank deleted lines */
 static bool             complement;		/* -c: do the complement */
 static bool             debugging;		/* -d: debugging reports */
 static bool             iocccok;		/* -e: fewer IOCCC errors */
+static bool             strictlogic;		/* -K: keep ambiguous #ifs */
 static bool             killconsts;		/* -k: eval constant #ifs */
-static bool             lnblank;		/* -l: blank deleted lines */
 static bool             lnnum;			/* -n: add #line directives */
 static bool             symlist;		/* -s: output symbol list */
 static bool             text;			/* -t: this is a text file */
@@ -194,7 +190,9 @@ static bool             ignoring[MAXDEPTH];	/* ignore comments state */
 static int              stifline[MAXDEPTH];	/* start of current #if */
 static int              depth;			/* current #if nesting */
 static int              delcount;		/* count of deleted lines */
-static bool             keepthis;		/* don't delete constant #if */
+static unsigned         blankcount;		/* count of blank lines */
+static unsigned         blankmax;		/* maximum recent blankcount */
+static bool             constexpr;		/* constant #if expression */
 
 static int              exitstat;		/* program exit status */
 
@@ -204,13 +202,14 @@ static void             done(void);
 static void             error(const char *);
 static int              findsym(const char *);
 static void             flushline(bool);
-static Linetype         getline(void);
+static Linetype         parseline(void);
 static Linetype         ifeval(const char **);
 static void             ignoreoff(void);
 static void             ignoreon(void);
 static void             keywordedit(const char *);
 static void             nest(void);
 static void             process(void);
+static const char      *skipargs(const char *);
 static const char      *skipcomment(const char *);
 static const char      *skipsym(const char *);
 static void             state(Ifstate);
@@ -218,7 +217,7 @@ static int              strlcmp(const char *, const char *, size_t);
 static void             unnest(void);
 static void             usage(void);
 
-#define endsym(c) (!isalpha((unsigned char)c) && !isdigit((unsigned char)c) && c != '_')
+#define endsym(c) (!isalnum((unsigned char)c) && c != '_')
 
 /*
  * The main program.
@@ -228,7 +227,7 @@ main(int argc, char *argv[])
 {
 	int opt;
 
-	while ((opt = getopt(argc, argv, "i:D:U:I:cdeklnst")) != -1)
+	while ((opt = getopt(argc, argv, "i:D:U:I:BbcdeKklnst")) != -1)
 		switch (opt) {
 		case 'i': /* treat stuff controlled by these symbols as text */
 			/*
@@ -253,6 +252,13 @@ main(int argc, char *argv[])
 		case 'I':
 			/* no-op for compatibility with cpp */
 			break;
+		case 'B': /* compress blank lines around removed section */
+			compblank = true;
+			break;
+		case 'b': /* blank deleted lines instead of omitting them */
+		case 'l': /* backwards compatibility */
+			lnblank = true;
+			break;
 		case 'c': /* treat -D as -U and vice versa */
 			complement = true;
 			break;
@@ -262,12 +268,12 @@ main(int argc, char *argv[])
 		case 'e': /* fewer errors from dodgy lines */
 			iocccok = true;
 			break;
+		case 'K': /* keep ambiguous #ifs */
+			strictlogic = true;
+			break;
 		case 'k': /* process constant #ifs */
 			killconsts = true;
 			break;
-		case 'l': /* blank deleted lines instead of omitting them */
-			lnblank = true;
-			break;
 		case 'n': /* add #line directive after deleted lines */
 			lnnum = true;
 			break;
@@ -282,6 +288,8 @@ main(int argc, char *argv[])
 		}
 	argc -= optind;
 	argv += optind;
+	if (compblank && lnblank)
+		errx(2, "-B and -b are mutually exclusive");
 	if (argc > 1) {
 		errx(2, "can only do one file");
 	} else if (argc == 1 && strcmp(*argv, "-") != 0) {
@@ -300,7 +308,7 @@ main(int argc, char *argv[])
 static void
 usage(void)
 {
-	fprintf(stderr, "usage: unifdef [-cdeklnst] [-Ipath]"
+	fprintf(stderr, "usage: unifdef [-BbcdeKknst] [-Ipath]"
 	    " [-Dsym[=val]] [-Usym] [-iDsym[=val]] [-iUsym] ... [file]\n");
 	exit(2);
 }
@@ -381,46 +389,46 @@ static state_fn * const trans_table[IS_COUNT][LT_COUNT] = {
 /* IS_OUTSIDE */
 { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Eendif,
   Oiffy, Oiffy, Fpass, Oif,   Oif,   Eelif, Eelif, Eelif, Eelse, Eendif,
-  print, done },
+  print, done,  abort },
 /* IS_FALSE_PREFIX */
 { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Strue, Sfalse,Selse, Dendif,
   Idrop, Idrop, Fdrop, Fdrop, Fdrop, Mpass, Eioccc,Eioccc,Eioccc,Eioccc,
-  drop,  Eeof },
+  drop,  Eeof,  abort },
 /* IS_TRUE_PREFIX */
 { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Dfalse,Dfalse,Dfalse,Delse, Dendif,
   Oiffy, Oiffy, Fpass, Oif,   Oif,   Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
-  print, Eeof },
+  print, Eeof,  abort },
 /* IS_PASS_MIDDLE */
 { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Pelif, Mtrue, Delif, Pelse, Pendif,
   Oiffy, Oiffy, Fpass, Oif,   Oif,   Pelif, Oelif, Oelif, Pelse, Pendif,
-  print, Eeof },
+  print, Eeof,  abort },
 /* IS_FALSE_MIDDLE */
 { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Pelif, Mtrue, Delif, Pelse, Pendif,
   Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eioccc,Eioccc,Eioccc,Eioccc,Eioccc,
-  drop,  Eeof },
+  drop,  Eeof,  abort },
 /* IS_TRUE_MIDDLE */
 { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Melif, Melif, Melif, Melse, Pendif,
   Oiffy, Oiffy, Fpass, Oif,   Oif,   Eioccc,Eioccc,Eioccc,Eioccc,Pendif,
-  print, Eeof },
+  print, Eeof,  abort },
 /* IS_PASS_ELSE */
 { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Pendif,
   Oiffy, Oiffy, Fpass, Oif,   Oif,   Eelif, Eelif, Eelif, Eelse, Pendif,
-  print, Eeof },
+  print, Eeof,  abort },
 /* IS_FALSE_ELSE */
 { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Dendif,
   Idrop, Idrop, Fdrop, Fdrop, Fdrop, Eelif, Eelif, Eelif, Eelse, Eioccc,
-  drop,  Eeof },
+  drop,  Eeof,  abort },
 /* IS_TRUE_ELSE */
 { Itrue, Ifalse,Fpass, Ftrue, Ffalse,Eelif, Eelif, Eelif, Eelse, Dendif,
   Oiffy, Oiffy, Fpass, Oif,   Oif,   Eelif, Eelif, Eelif, Eelse, Eioccc,
-  print, Eeof },
+  print, Eeof,  abort },
 /* IS_FALSE_TRAILER */
 { Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Dendif,
   Idrop, Idrop, Fdrop, Fdrop, Fdrop, Dfalse,Dfalse,Dfalse,Delse, Eioccc,
-  drop,  Eeof }
+  drop,  Eeof,  abort }
 /*TRUEI  FALSEI IF     TRUE   FALSE  ELIF   ELTRUE ELFALSE ELSE  ENDIF
   TRUEI  FALSEI IF     TRUE   FALSE  ELIF   ELTRUE ELFALSE ELSE  ENDIF (DODGY)
-  PLAIN  EOF */
+  PLAIN  EOF    ERROR */
 };
 
 /*
@@ -454,9 +462,11 @@ keywordedit(const char *replacement)
 static void
 nest(void)
 {
-	depth += 1;
-	if (depth >= MAXDEPTH)
+	if (depth > MAXDEPTH-1)
+		abort(); /* bug */
+	if (depth == MAXDEPTH-1)
 		error("Too many levels of nesting");
+	depth += 1;
 	stifline[depth] = linenum;
 }
 static void
@@ -481,15 +491,23 @@ flushline(bool keep)
 	if (symlist)
 		return;
 	if (keep ^ complement) {
-		if (lnnum && delcount > 0)
-			printf("#line %d\n", linenum);
-		fputs(tline, stdout);
-		delcount = 0;
+		bool blankline = tline[strspn(tline, " \t\n")] == '\0';
+		if (blankline && compblank && blankcount != blankmax) {
+			delcount += 1;
+			blankcount += 1;
+		} else {
+			if (lnnum && delcount > 0)
+				printf("#line %d\n", linenum);
+			fputs(tline, stdout);
+			delcount = 0;
+			blankmax = blankcount = blankline ? blankcount + 1 : 0;
+		}
 	} else {
 		if (lnblank)
 			putc('\n', stdout);
 		exitstat = 1;
 		delcount += 1;
+		blankcount = 0;
 	}
 }
 
@@ -501,9 +519,12 @@ process(void)
 {
 	Linetype lineval;
 
+	/* When compressing blank lines, act as if the file
+	   is preceded by a large number of blank lines. */
+	blankmax = blankcount = 1000;
 	for (;;) {
 		linenum++;
-		lineval = getline();
+		lineval = parseline();
 		trans_table[ifstate[depth]][lineval]();
 		debug("process %s -> %s depth %d",
 		    linetype_name[lineval],
@@ -517,7 +538,7 @@ process(void)
  * help from skipcomment().
  */
 static Linetype
-getline(void)
+parseline(void)
 {
 	const char *cp;
 	int cursym;
@@ -613,17 +634,40 @@ getline(void)
 
 /*
  * These are the binary operators that are supported by the expression
- * evaluator. Note that if support for division is added then we also
- * need short-circuiting booleans because of divide-by-zero.
+ * evaluator.
  */
-static int op_lt(int a, int b) { return (a < b); }
-static int op_gt(int a, int b) { return (a > b); }
-static int op_le(int a, int b) { return (a <= b); }
-static int op_ge(int a, int b) { return (a >= b); }
-static int op_eq(int a, int b) { return (a == b); }
-static int op_ne(int a, int b) { return (a != b); }
-static int op_or(int a, int b) { return (a || b); }
-static int op_and(int a, int b) { return (a && b); }
+static Linetype op_strict(int *p, int v, Linetype at, Linetype bt) {
+	if(at == LT_IF || bt == LT_IF) return (LT_IF);
+	return (*p = v, v ? LT_TRUE : LT_FALSE);
+}
+static Linetype op_lt(int *p, Linetype at, int a, Linetype bt, int b) {
+	return op_strict(p, a < b, at, bt);
+}
+static Linetype op_gt(int *p, Linetype at, int a, Linetype bt, int b) {
+	return op_strict(p, a > b, at, bt);
+}
+static Linetype op_le(int *p, Linetype at, int a, Linetype bt, int b) {
+	return op_strict(p, a <= b, at, bt);
+}
+static Linetype op_ge(int *p, Linetype at, int a, Linetype bt, int b) {
+	return op_strict(p, a >= b, at, bt);
+}
+static Linetype op_eq(int *p, Linetype at, int a, Linetype bt, int b) {
+	return op_strict(p, a == b, at, bt);
+}
+static Linetype op_ne(int *p, Linetype at, int a, Linetype bt, int b) {
+	return op_strict(p, a != b, at, bt);
+}
+static Linetype op_or(int *p, Linetype at, int a, Linetype bt, int b) {
+	if (!strictlogic && (at == LT_TRUE || bt == LT_TRUE))
+		return (*p = 1, LT_TRUE);
+	return op_strict(p, a || b, at, bt);
+}
+static Linetype op_and(int *p, Linetype at, int a, Linetype bt, int b) {
+	if (!strictlogic && (at == LT_FALSE || bt == LT_FALSE))
+		return (*p = 0, LT_FALSE);
+	return op_strict(p, a && b, at, bt);
+}
 
 /*
  * An evaluation function takes three arguments, as follows: (1) a pointer to
@@ -632,8 +676,8 @@ static int op_and(int a, int b) { return (a && b); }
  * value of the expression; and (3) a pointer to a char* that points to the
  * expression to be evaluated and that is updated to the end of the expression
  * when evaluation is complete. The function returns LT_FALSE if the value of
- * the expression is zero, LT_TRUE if it is non-zero, or LT_IF if the
- * expression could not be evaluated.
+ * the expression is zero, LT_TRUE if it is non-zero, LT_IF if the expression
+ * depends on an unknown symbol, or LT_ERROR if there is a parse failure.
  */
 struct ops;
 
@@ -652,7 +696,7 @@ static const struct ops {
 	eval_fn *inner;
 	struct op {
 		const char *str;
-		int (*fn)(int, int);
+		Linetype (*fn)(int *, Linetype, int, Linetype, int);
 	} op[5];
 } eval_ops[] = {
 	{ eval_table, { { "||", op_or } } },
@@ -667,8 +711,8 @@ static const struct ops {
 
 /*
  * Function for evaluating the innermost parts of expressions,
- * viz. !expr (expr) defined(symbol) symbol number
- * We reset the keepthis flag when we find a non-constant subexpression.
+ * viz. !expr (expr) number defined(symbol) symbol
+ * We reset the constexpr flag in the last two cases.
  */
 static Linetype
 eval_unary(const struct ops *ops, int *valp, const char **cpp)
@@ -677,25 +721,34 @@ eval_unary(const struct ops *ops, int *valp, const char **cpp)
 	char *ep;
 	int sym;
 	bool defparen;
+	Linetype lt;
 
 	cp = skipcomment(*cpp);
 	if (*cp == '!') {
 		debug("eval%d !", ops - eval_ops);
 		cp++;
-		if (eval_unary(ops, valp, &cp) == LT_IF)
-			return (LT_IF);
-		*valp = !*valp;
+		lt = eval_unary(ops, valp, &cp);
+		if (lt == LT_ERROR)
+			return (LT_ERROR);
+		if (lt != LT_IF) {
+			*valp = !*valp;
+			lt = *valp ? LT_TRUE : LT_FALSE;
+		}
 	} else if (*cp == '(') {
 		cp++;
 		debug("eval%d (", ops - eval_ops);
-		if (eval_table(eval_ops, valp, &cp) == LT_IF)
-			return (LT_IF);
+		lt = eval_table(eval_ops, valp, &cp);
+		if (lt == LT_ERROR)
+			return (LT_ERROR);
 		cp = skipcomment(cp);
 		if (*cp++ != ')')
-			return (LT_IF);
+			return (LT_ERROR);
 	} else if (isdigit((unsigned char)*cp)) {
 		debug("eval%d number", ops - eval_ops);
 		*valp = strtol(cp, &ep, 0);
+		if (ep == cp)
+			return (LT_ERROR);
+		lt = *valp ? LT_TRUE : LT_FALSE;
 		cp = skipsym(cp);
 	} else if (strncmp(cp, "defined", 7) == 0 && endsym(cp[7])) {
 		cp = skipcomment(cp+7);
@@ -707,36 +760,43 @@ eval_unary(const struct ops *ops, int *valp, const char **cpp)
 			defparen = false;
 		}
 		sym = findsym(cp);
-		if (sym < 0)
-			return (LT_IF);
-		*valp = (value[sym] != NULL);
+		if (sym < 0) {
+			lt = LT_IF;
+		} else {
+			*valp = (value[sym] != NULL);
+			lt = *valp ? LT_TRUE : LT_FALSE;
+		}
 		cp = skipsym(cp);
 		cp = skipcomment(cp);
 		if (defparen && *cp++ != ')')
-			return (LT_IF);
-		keepthis = false;
+			return (LT_ERROR);
+		constexpr = false;
 	} else if (!endsym(*cp)) {
 		debug("eval%d symbol", ops - eval_ops);
 		sym = findsym(cp);
-		if (sym < 0)
-			return (LT_IF);
-		if (value[sym] == NULL)
+		cp = skipsym(cp);
+		if (sym < 0) {
+			lt = LT_IF;
+			cp = skipargs(cp);
+		} else if (value[sym] == NULL) {
 			*valp = 0;
-		else {
+			lt = LT_FALSE;
+		} else {
 			*valp = strtol(value[sym], &ep, 0);
 			if (*ep != '\0' || ep == value[sym])
-				return (LT_IF);
+				return (LT_ERROR);
+			lt = *valp ? LT_TRUE : LT_FALSE;
+			cp = skipargs(cp);
 		}
-		cp = skipsym(cp);
-		keepthis = false;
+		constexpr = false;
 	} else {
 		debug("eval%d bad expr", ops - eval_ops);
-		return (LT_IF);
+		return (LT_ERROR);
 	}
 
 	*cpp = cp;
 	debug("eval%d = %d", ops - eval_ops, *valp);
-	return (*valp ? LT_TRUE : LT_FALSE);
+	return (lt);
 }
 
 /*
@@ -748,11 +808,13 @@ eval_table(const struct ops *ops, int *valp, const char **cpp)
 	const struct op *op;
 	const char *cp;
 	int val;
+	Linetype lt, rt;
 
 	debug("eval%d", ops - eval_ops);
 	cp = *cpp;
-	if (ops->inner(ops+1, valp, &cp) == LT_IF)
-		return (LT_IF);
+	lt = ops->inner(ops+1, valp, &cp);
+	if (lt == LT_ERROR)
+		return (LT_ERROR);
 	for (;;) {
 		cp = skipcomment(cp);
 		for (op = ops->op; op->str != NULL; op++)
@@ -762,14 +824,16 @@ eval_table(const struct ops *ops, int *valp, const char **cpp)
 			break;
 		cp += strlen(op->str);
 		debug("eval%d %s", ops - eval_ops, op->str);
-		if (ops->inner(ops+1, &val, &cp) == LT_IF)
-			return (LT_IF);
-		*valp = op->fn(*valp, val);
+		rt = ops->inner(ops+1, &val, &cp);
+		if (rt == LT_ERROR)
+			return (LT_ERROR);
+		lt = op->fn(valp, lt, *valp, rt, val);
 	}
 
 	*cpp = cp;
 	debug("eval%d = %d", ops - eval_ops, *valp);
-	return (*valp ? LT_TRUE : LT_FALSE);
+	debug("eval%d lt = %s", ops - eval_ops, linetype_name[lt]);
+	return (lt);
 }
 
 /*
@@ -784,10 +848,10 @@ ifeval(const char **cpp)
 	int val = 0;
 
 	debug("eval %s", *cpp);
-	keepthis = killconsts ? false : true;
+	constexpr = killconsts ? false : true;
 	ret = eval_table(eval_ops, &val, cpp);
 	debug("eval = %d", val);
-	return (keepthis ? LT_IF : ret);
+	return (constexpr ? LT_IF : ret == LT_ERROR ? LT_IF : ret);
 }
 
 /*
@@ -898,6 +962,31 @@ skipcomment(const char *cp)
 	return (cp);
 }
 
+/*
+ * Skip macro arguments.
+ */
+static const char *
+skipargs(const char *cp)
+{
+	const char *ocp = cp;
+	int level = 0;
+	cp = skipcomment(cp);
+	if (*cp != '(')
+		return (cp);
+	do {
+		if (*cp == '(')
+			level++;
+		if (*cp == ')')
+			level--;
+		cp = skipcomment(cp+1);
+	} while (level != 0 && *cp != '\0');
+	if (level == 0)
+		return (cp);
+	else
+	/* Rewind and re-detect the syntax error later. */
+		return (ocp);
+}
+
 /*
  * Skip over an identifier.
  */
diff --git a/usr.bin/unifdef/unifdefall.sh b/usr.bin/unifdef/unifdefall.sh
index bcba08c9712..b443054d8ab 100644
--- a/usr.bin/unifdef/unifdefall.sh
+++ b/usr.bin/unifdef/unifdefall.sh
@@ -1,29 +1,61 @@
 #!/bin/sh
 #
-# remove all the #if's from a source file
+# unifdefall: remove all the #if's from a source file
 #
-#	$dotat: things/unifdefall.sh,v 1.9 2002/09/24 19:43:57 fanf2 Exp $
+# Copyright (c) 2002 - 2009 Tony Finch .  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.
+#
+# THIS SOFTWARE IS PROVIDED BY AUTHOR 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 AUTHOR 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.
+#
+#	$dotat: unifdef/unifdefall.sh,v 1.24 2009/11/26 12:54:39 fanf2 Exp $
 # $FreeBSD$
 
 set -e
 
-basename=`basename $0`
-tmp=`mktemp -d -t $basename` || exit 2
+basename=$(basename $0)
+tmp=$(mktemp -d "${TMPDIR:-/tmp}/$basename.XXXXXXXXXX") || exit 2
+trap 'rm -r "$tmp" || exit 1' EXIT
 
-unifdef -s "$@" | sort | uniq > $tmp/ctrl
-cpp -dM "$@" | sort |
-	sed -Ee 's/^#define[ 	]+(.*[^	 ])[ 	]*$/\1/' > $tmp/hashdefs
-sed -Ee 's/^([A-Za-z0-9_]+).*$/\1/' $tmp/hashdefs > $tmp/alldef
-comm -23 $tmp/ctrl $tmp/alldef > $tmp/undef
-comm -12 $tmp/ctrl $tmp/alldef > $tmp/def
+export LC_ALL=C
 
-echo unifdef -k \\ > $tmp/cmd
-sed -Ee 's/^(.*)$/-U\1 \\/' $tmp/undef >> $tmp/cmd
-while read sym
-do	sed -Ee '/^('"$sym"')([(][^)]*[)])?([ 	]+(.*))?$/!d;s//-D\1=\4/' $tmp/hashdefs
-done < $tmp/def |
-	sed -Ee 's/\\/\\\\/g;s/"/\\"/g;s/^/"/;s/$/" \\/' >> $tmp/cmd
-echo '"$@"' >> $tmp/cmd
-sh $tmp/cmd "$@"
-
-rm -r $tmp
+# list of all controlling macros
+unifdef -s "$@" | sort | uniq >"$tmp/ctrl"
+# list of all macro definitions
+cpp -dM "$@" | sort | sed 's/^#define //' >"$tmp/hashdefs"
+# list of defined macro names
+sed 's/[^A-Za-z0-9_].*$//' <"$tmp/hashdefs" >"$tmp/alldef"
+# list of undefined and defined controlling macros
+comm -23 "$tmp/ctrl" "$tmp/alldef" >"$tmp/undef"
+comm -12 "$tmp/ctrl" "$tmp/alldef" >"$tmp/def"
+# create a sed script that extracts the controlling macro definitions
+# and converts them to unifdef command-line arguments
+sed 's|.*|s/^&\\(([^)]*)\\)\\{0,1\\} /-D&=/p|' <"$tmp/def" >"$tmp/script"
+# create the final unifdef command
+{	echo unifdef -k \\
+	# convert the controlling undefined macros to -U arguments
+	sed 's/.*/-U& \\/' <"$tmp/undef"
+	# convert the controlling defined macros to quoted -D arguments
+	sed -nf "$tmp/script" <"$tmp/hashdefs" |
+		sed "s/'/'\\\\''/g;s/.*/'&' \\\\/"
+	echo '"$@"'
+} >"$tmp/cmd"
+# run the command we just created
+sh "$tmp/cmd" "$@"
diff --git a/usr.bin/uniq/uniq.1 b/usr.bin/uniq/uniq.1
index a12ad3a6ef1..ec94d05877d 100644
--- a/usr.bin/uniq/uniq.1
+++ b/usr.bin/uniq/uniq.1
@@ -35,7 +35,7 @@
 .\"     From: @(#)uniq.1	8.1 (Berkeley) 6/6/93
 .\" $FreeBSD$
 .\"
-.Dd July 3, 2004
+.Dd December 17, 2009
 .Dt UNIQ 1
 .Os
 .Sh NAME
@@ -153,7 +153,3 @@ A
 .Nm
 command appeared in
 .At v3 .
-.Sh BUGS
-Input lines are limited to
-.Dv LINE_MAX
-(2048) bytes in length.
diff --git a/usr.bin/uniq/uniq.c b/usr.bin/uniq/uniq.c
index bc04db777f6..2b11fe4745a 100644
--- a/usr.bin/uniq/uniq.c
+++ b/usr.bin/uniq/uniq.c
@@ -52,6 +52,7 @@ static const char rcsid[] =
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -59,7 +60,8 @@ static const char rcsid[] =
 #include 
 #include 
 
-#define	MAXLINELEN	(LINE_MAX + 1)
+#define	INITLINELEN	(LINE_MAX + 1)
+#define	MAXLINELEN	((SIZE_MAX / sizeof(wchar_t)) / 2)
 
 int cflag, dflag, uflag;
 int numchars, numfields, repeats;
@@ -137,8 +139,8 @@ main (int argc, char *argv[])
 	if (argc > 1)
 		ofp = file(argv[1], "w");
 
- 	prevbuflen = MAXLINELEN;
- 	thisbuflen = MAXLINELEN;
+ 	prevbuflen = INITLINELEN;
+ 	thisbuflen = INITLINELEN;
  	prevline = malloc(prevbuflen * sizeof(*prevline));
  	thisline = malloc(thisbuflen * sizeof(*thisline));
 	if (prevline == NULL || thisline == NULL)
@@ -198,16 +200,19 @@ getline(wchar_t *buf, size_t *buflen, FILE *fp)
 
 	bufpos = 0;
 	while ((ch = getwc(fp)) != WEOF && ch != '\n') {
-		if (bufpos + 2 >= *buflen) {
+		if (bufpos + 1 >= *buflen) {
 			*buflen = *buflen * 2;
+			if (*buflen > MAXLINELEN)
+				errx(1,
+				    "Maximum line buffer length (%zu) exceeded",
+				    MAXLINELEN);
 			buf = reallocf(buf, *buflen * sizeof(*buf));
 			if (buf == NULL)
-				return (NULL);
+				err(1, "reallocf");
 		}
 		buf[bufpos++] = ch;
 	}
-	if (bufpos + 1 != *buflen)
-		buf[bufpos] = '\0';
+	buf[bufpos] = '\0';
 
 	return (bufpos != 0 || ch == '\n' ? buf : NULL);
 }
@@ -305,13 +310,13 @@ wcsicoll(wchar_t *s1, wchar_t *s2)
 	new_l2_buflen = wcsicoll_l2_buflen;
 	while (new_l1_buflen < l1) {
 		if (new_l1_buflen == 0)
-			new_l1_buflen = MAXLINELEN;
+			new_l1_buflen = INITLINELEN;
 		else
 			new_l1_buflen *= 2;
 	}
 	while (new_l2_buflen < l2) {
 		if (new_l2_buflen == 0)
-			new_l2_buflen = MAXLINELEN;
+			new_l2_buflen = INITLINELEN;
 		else
 			new_l2_buflen *= 2;
 	}
diff --git a/usr.bin/unzip/Makefile b/usr.bin/unzip/Makefile
index cc31dea8f83..5f235bba576 100644
--- a/usr.bin/unzip/Makefile
+++ b/usr.bin/unzip/Makefile
@@ -1,7 +1,6 @@
 # $FreeBSD$
 
 PROG = unzip
-WARNS ?= 6
 CSTD = c99
 DPADD = ${LIBARCHIVE}
 LDADD = -larchive
diff --git a/usr.bin/unzip/unzip.c b/usr.bin/unzip/unzip.c
index f0856a430e3..e5984ba004d 100644
--- a/usr.bin/unzip/unzip.c
+++ b/usr.bin/unzip/unzip.c
@@ -814,7 +814,8 @@ unzip(const char *fn)
 	ac(archive_read_support_format_zip(a));
 	ac(archive_read_open_fd(a, fd, 8192));
 
-	printf("Archive:  %s\n", fn);
+	if (!p_opt && !q_opt)
+		printf("Archive:  %s\n", fn);
 	if (v_opt == 1) {
 		printf("  Length     Date   Time    Name\n");
 		printf(" --------    ----   ----    ----\n");
diff --git a/usr.bin/users/Makefile b/usr.bin/users/Makefile
index 3d6524bc7a2..53274b9dbde 100644
--- a/usr.bin/users/Makefile
+++ b/usr.bin/users/Makefile
@@ -3,4 +3,7 @@
 
 PROG=	users
 
+DPADD=	${LIBULOG}
+LDADD=	-lulog
+
 .include 
diff --git a/usr.bin/users/users.c b/usr.bin/users/users.c
index c90bfbdc149..8000c03064a 100644
--- a/usr.bin/users/users.c
+++ b/usr.bin/users/users.c
@@ -45,15 +45,17 @@ static const char rcsid[] =
   "$FreeBSD$";
 #endif /* not lint */
 
+#include 
 #include 
 #include 
 #include 
 #include 
 #include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 
-typedef char   namebuf[UT_NAMESIZE];
+typedef char   namebuf[MAXLOGNAME];
 
 int scmp(const void *, const void *);
 static void usage(void);
@@ -65,7 +67,7 @@ main(int argc, char **argv)
 	int ncnt = 0;
 	int nmax = 0;
 	int cnt;
-	struct utmp utmp;
+	struct utmpx *ut;
 	int ch;
 
 	while ((ch = getopt(argc, argv, "")) != -1)
@@ -77,28 +79,28 @@ main(int argc, char **argv)
 	argc -= optind;
 	argv += optind;
 
-	if (!freopen(_PATH_UTMP, "r", stdin))
-		errx(1, "can't open %s", _PATH_UTMP);
-	while (fread((char *)&utmp, sizeof(utmp), 1, stdin) == 1) {
-		if (*utmp.ut_name) {
-			if (ncnt >= nmax) {
-				nmax += 32;
-				names = realloc(names, sizeof (*names) * nmax);
-				if (!names) {
-					errx(1, "realloc");
-					/* NOTREACHED */
-				}
+	setutxent();
+	while ((ut = getutxent()) != NULL) {
+		if (ut->ut_type != USER_PROCESS)
+			continue;
+		if (ncnt >= nmax) {
+			nmax += 32;
+			names = realloc(names, sizeof(*names) * nmax);
+			if (!names) {
+				errx(1, "realloc");
+				/* NOTREACHED */
 			}
-			(void)strncpy(names[ncnt], utmp.ut_name, UT_NAMESIZE);
-			++ncnt;
 		}
+		(void)strlcpy(names[ncnt], ut->ut_user, sizeof(*names));
+		++ncnt;
 	}
-	if (ncnt) {
-		qsort(names, ncnt, UT_NAMESIZE, scmp);
-		(void)printf("%.*s", UT_NAMESIZE, names[0]);
+	endutxent();
+	if (ncnt > 0) {
+		qsort(names, ncnt, sizeof(namebuf), scmp);
+		(void)printf("%s", names[0]);
 		for (cnt = 1; cnt < ncnt; ++cnt)
-			if (strncmp(names[cnt], names[cnt - 1], UT_NAMESIZE))
-				(void)printf(" %.*s", UT_NAMESIZE, names[cnt]);
+			if (strcmp(names[cnt], names[cnt - 1]) != 0)
+				(void)printf(" %s", names[cnt]);
 		(void)printf("\n");
 	}
 	exit(0);
@@ -114,5 +116,6 @@ usage(void)
 int
 scmp(const void *p, const void *q)
 {
-	return(strncmp(p, q, UT_NAMESIZE));
+
+	return (strcmp(p, q));
 }
diff --git a/usr.bin/uudecode/Makefile b/usr.bin/uudecode/Makefile
index 37005f3ded5..909ce3d746f 100644
--- a/usr.bin/uudecode/Makefile
+++ b/usr.bin/uudecode/Makefile
@@ -2,7 +2,6 @@
 # $FreeBSD$
 
 PROG=	uudecode
-WARNS?=	4
 LINKS=	${BINDIR}/uudecode ${BINDIR}/b64decode
 NO_MAN=
 
diff --git a/usr.bin/uuencode/Makefile b/usr.bin/uuencode/Makefile
index c795753a10b..9a8b9918dff 100644
--- a/usr.bin/uuencode/Makefile
+++ b/usr.bin/uuencode/Makefile
@@ -2,7 +2,6 @@
 # $FreeBSD$
 
 PROG=	uuencode
-WARNS?=	4
 MAN=	uuencode.1 uuencode.format.5
 LINKS=	${BINDIR}/uuencode ${BINDIR}/b64encode
 MLINKS=	uuencode.1 uudecode.1 \
diff --git a/usr.bin/vacation/Makefile b/usr.bin/vacation/Makefile
index 63ba3abec81..056f5764fa0 100644
--- a/usr.bin/vacation/Makefile
+++ b/usr.bin/vacation/Makefile
@@ -9,6 +9,8 @@ CFLAGS+=-I${SENDMAIL_DIR}/src -I${SENDMAIL_DIR}/include -I.
 CFLAGS+=-DNEWDB -DNOT_SENDMAIL
 CFLAGS+=-D_FFR_LISTDB -D_FFR_DEBUG
 
+WARNS?=	2
+
 LIBSMDIR=	${.OBJDIR}/../../lib/libsm
 LIBSM=		${LIBSMDIR}/libsm.a
 
diff --git a/usr.bin/vgrind/Makefile b/usr.bin/vgrind/Makefile
index 1a64c1c9f01..612e504ecb2 100644
--- a/usr.bin/vgrind/Makefile
+++ b/usr.bin/vgrind/Makefile
@@ -11,6 +11,8 @@ FILESDIR=	${SHAREDIR}/misc
 FILESDIR_tmac.vgrind=	${SHAREDIR}/tmac
 MAN=	vgrind.1 vgrindefs.5
 
+WARNS?=	2
+
 BINDIR=	/usr/libexec
 SCRIPTSDIR=/usr/bin
 
diff --git a/usr.bin/vi/Makefile b/usr.bin/vi/Makefile
index 7276b7b35bb..048c35b6f01 100644
--- a/usr.bin/vi/Makefile
+++ b/usr.bin/vi/Makefile
@@ -9,6 +9,8 @@ CFLAGS+=	-DGTAGS
 #if using ncurses:
 CFLAGS+=	-DSYSV_CURSES
 
+WARNS?=	0
+
 VI=	nvi
 EX=	nex
 VIEW=	nview
diff --git a/usr.bin/vis/foldit.c b/usr.bin/vis/foldit.c
index 6ad82c2dc2f..3c977cb8d5e 100644
--- a/usr.bin/vis/foldit.c
+++ b/usr.bin/vis/foldit.c
@@ -44,9 +44,7 @@ static const char sccsid[] = "@(#)foldit.c	8.1 (Berkeley) 6/6/93";
 #include "extern.h"
 
 int
-foldit(chunk, col, max)
-	char *chunk;
-	int col, max;
+foldit(char *chunk, int col, int max)
 {
 	char *cp;
 
diff --git a/usr.bin/vmstat/Makefile b/usr.bin/vmstat/Makefile
index 6e87a6a6f8e..d413d25ab61 100644
--- a/usr.bin/vmstat/Makefile
+++ b/usr.bin/vmstat/Makefile
@@ -6,4 +6,6 @@ MAN=	vmstat.8
 DPADD=	${LIBDEVSTAT} ${LIBKVM} ${LIBMEMSTAT} ${LIBUTIL}
 LDADD=	-ldevstat -lkvm -lmemstat -lutil
 
+WARNS?=	1
+
 .include 
diff --git a/usr.bin/w/Makefile b/usr.bin/w/Makefile
index 1515a875ae7..5111cb81d65 100644
--- a/usr.bin/w/Makefile
+++ b/usr.bin/w/Makefile
@@ -4,12 +4,14 @@
 PROG=	w
 SRCS=	fmt.c pr_time.c proc_compare.c w.c
 MAN=	w.1 uptime.1
-DPADD=	${LIBKVM} ${LIBUTIL}
-LDADD=	-lkvm -lutil
+DPADD=	${LIBKVM} ${LIBULOG} ${LIBUTIL}
+LDADD=	-lkvm -lulog -lutil
 #BINGRP= kmem
 #BINMODE=2555
 LINKS=	${BINDIR}/w ${BINDIR}/uptime
 
+WARNS?=	1
+
 .PATH: ${.CURDIR}/../../bin/ps
 
 .include 
diff --git a/usr.bin/w/w.c b/usr.bin/w/w.c
index 10ec7b04bd2..0e4397d651e 100644
--- a/usr.bin/w/w.c
+++ b/usr.bin/w/w.c
@@ -83,14 +83,15 @@ static const char sccsid[] = "@(#)w.c	8.4 (Berkeley) 4/16/94";
 #include 
 #include 
 #include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 #include 
 
 #include "extern.h"
 
 struct timeval	boottime;
-struct utmp	utmp;
+struct utmpx   *utmp;
 struct winsize	ws;
 kvm_t	       *kd;
 time_t		now;		/* the current time of day */
@@ -109,7 +110,7 @@ char	      **sel_users;	/* login array of particular users selected */
  */
 struct	entry {
 	struct	entry *next;
-	struct	utmp utmp;
+	struct	utmpx utmp;
 	dev_t	tdev;			/* dev_t of terminal */
 	time_t	idle;			/* idle time of terminal in seconds */
 	struct	kinfo_proc *kp;		/* `most interesting' proc */
@@ -117,13 +118,14 @@ struct	entry {
 	struct	kinfo_proc *dkp;	/* debug option proc list */
 } *ep, *ehead = NULL, **nextp = &ehead;
 
-#define	debugproc(p) *((struct kinfo_proc **)&(p)->ki_udata)
+#define	debugproc(p) *(&((struct kinfo_proc *)p)->ki_udata)
 
-/* W_DISPHOSTSIZE should not be greater than UT_HOSTSIZE */
-#define	W_DISPHOSTSIZE	16
+#define	W_DISPUSERSIZE	10
+#define	W_DISPLINESIZE	8
+#define	W_DISPHOSTSIZE	24
 
 static void		 pr_header(time_t *, int);
-static struct stat	*ttystat(char *, int);
+static struct stat	*ttystat(char *);
 static void		 usage(int);
 static int		 this_is_uptime(const char *s);
 
@@ -135,7 +137,6 @@ main(int argc, char *argv[])
 	struct kinfo_proc *kp;
 	struct kinfo_proc *dkp;
 	struct stat *stp;
-	FILE *ut;
 	time_t touched;
 	int ch, i, nentries, nusers, wcmd, longidle, longattime, dropgid;
 	const char *memf, *nlistf, *p;
@@ -208,16 +209,15 @@ main(int argc, char *argv[])
 		errx(1, "%s", errbuf);
 
 	(void)time(&now);
-	if ((ut = fopen(_PATH_UTMP, "r")) == NULL)
-		err(1, "%s", _PATH_UTMP);
 
 	if (*argv)
 		sel_users = argv;
 
-	for (nusers = 0; fread(&utmp, sizeof(utmp), 1, ut);) {
-		if (utmp.ut_name[0] == '\0')
+	setutxent();
+	for (nusers = 0; (utmp = getutxent()) != NULL;) {
+		if (utmp->ut_type != USER_PROCESS)
 			continue;
-		if (!(stp = ttystat(utmp.ut_line, UT_LINESIZE)))
+		if (!(stp = ttystat(utmp->ut_line)))
 			continue;	/* corrupted record */
 		++nusers;
 		if (wcmd == 0)
@@ -228,7 +228,7 @@ main(int argc, char *argv[])
 
 			usermatch = 0;
 			for (user = sel_users; !usermatch && *user; user++)
-				if (!strncmp(utmp.ut_name, *user, UT_NAMESIZE))
+				if (!strcmp(utmp->ut_user, *user))
 					usermatch = 1;
 			if (!usermatch)
 				continue;
@@ -237,7 +237,7 @@ main(int argc, char *argv[])
 			errx(1, "calloc");
 		*nextp = ep;
 		nextp = &ep->next;
-		memmove(&ep->utmp, &utmp, sizeof(struct utmp));
+		memmove(&ep->utmp, utmp, sizeof *utmp);
 		ep->tdev = stp->st_rdev;
 		/*
 		 * If this is the console device, attempt to ascertain
@@ -250,14 +250,14 @@ main(int argc, char *argv[])
 			(void)sysctlbyname("machdep.consdev", &ep->tdev, &size, NULL, 0);
 		}
 		touched = stp->st_atime;
-		if (touched < ep->utmp.ut_time) {
+		if (touched < ep->utmp.ut_tv.tv_sec) {
 			/* tty untouched since before login */
-			touched = ep->utmp.ut_time;
+			touched = ep->utmp.ut_tv.tv_sec;
 		}
 		if ((ep->idle = now - touched) < 0)
 			ep->idle = 0;
 	}
-	(void)fclose(ut);
+	endutxent();
 
 	if (header || wcmd == 0) {
 		pr_header(&now, nusers);
@@ -271,11 +271,11 @@ main(int argc, char *argv[])
 #define HEADER_FROM		"FROM"
 #define HEADER_LOGIN_IDLE	"LOGIN@  IDLE "
 #define HEADER_WHAT		"WHAT\n"
-#define WUSED  (UT_NAMESIZE + UT_LINESIZE + W_DISPHOSTSIZE + \
+#define WUSED  (W_DISPUSERSIZE + W_DISPLINESIZE + W_DISPHOSTSIZE + \
 		sizeof(HEADER_LOGIN_IDLE) + 3)	/* header width incl. spaces */ 
 		(void)printf("%-*.*s %-*.*s %-*.*s  %s", 
-				UT_NAMESIZE, UT_NAMESIZE, HEADER_USER,
-				UT_LINESIZE, UT_LINESIZE, HEADER_TTY,
+				W_DISPUSERSIZE, W_DISPUSERSIZE, HEADER_USER,
+				W_DISPLINESIZE, W_DISPLINESIZE, HEADER_TTY,
 				W_DISPHOSTSIZE, W_DISPHOSTSIZE, HEADER_FROM,
 				HEADER_LOGIN_IDLE HEADER_WHAT);
 	}
@@ -347,7 +347,7 @@ main(int argc, char *argv[])
 	}
 
 	for (ep = ehead; ep != NULL; ep = ep->next) {
-		char host_buf[UT_HOSTSIZE + 1];
+		struct addrinfo hints, *res;
 		struct sockaddr_storage ss;
 		struct sockaddr *sa = (struct sockaddr *)&ss;
 		struct sockaddr_in *lsin = (struct sockaddr_in *)&ss;
@@ -355,9 +355,7 @@ main(int argc, char *argv[])
 		time_t t;
 		int isaddr;
 
-		host_buf[UT_HOSTSIZE] = '\0';
-		strncpy(host_buf, ep->utmp.ut_host, UT_HOSTSIZE);
-		p = *host_buf ? host_buf : "-";
+		p = *ep->utmp.ut_host ? ep->utmp.ut_host : "-";
 		if ((x_suffix = strrchr(p, ':')) != NULL) {
 			if ((dot = strchr(x_suffix, '.')) != NULL &&
 			    strchr(dot+1, '.') == NULL)
@@ -365,23 +363,42 @@ main(int argc, char *argv[])
 			else
 				x_suffix = NULL;
 		}
+
+		isaddr = 0;
+		memset(&ss, '\0', sizeof(ss));
+		if (inet_pton(AF_INET6, p, &lsin6->sin6_addr) == 1) {
+			lsin6->sin6_len = sizeof(*lsin6);
+			lsin6->sin6_family = AF_INET6;
+			isaddr = 1;
+		} else if (inet_pton(AF_INET, p, &lsin->sin_addr) == 1) {
+			lsin->sin_len = sizeof(*lsin);
+			lsin->sin_family = AF_INET;
+			isaddr = 1;
+		}
 		if (!nflag) {
 			/* Attempt to change an IP address into a name */
-			isaddr = 0;
-			memset(&ss, '\0', sizeof(ss));
-			if (inet_pton(AF_INET6, p, &lsin6->sin6_addr) == 1) {
-				lsin6->sin6_len = sizeof(*lsin6);
-				lsin6->sin6_family = AF_INET6;
-				isaddr = 1;
-			} else if (inet_pton(AF_INET, p, &lsin->sin_addr) == 1) {
-				lsin->sin_len = sizeof(*lsin);
-				lsin->sin_family = AF_INET;
-				isaddr = 1;
-			}
 			if (isaddr && realhostname_sa(fn, sizeof(fn), sa,
 			    sa->sa_len) == HOSTNAME_FOUND)
 				p = fn;
+		} else if (!isaddr) {
+			/*
+			 * If a host has only one A/AAAA RR, change a
+			 * name into an IP address
+			 */
+			memset(&hints, 0, sizeof(hints));
+			hints.ai_flags = AI_PASSIVE;
+			hints.ai_family = AF_UNSPEC;
+			hints.ai_socktype = SOCK_STREAM;
+			if (getaddrinfo(p, NULL, &hints, &res) == 0) {
+				if (res->ai_next == NULL &&
+				    getnameinfo(res->ai_addr, res->ai_addrlen,
+					fn, sizeof(fn), NULL, 0,
+					NI_NUMERICHOST) == 0)
+					p = fn;
+				freeaddrinfo(res);
+			}
 		}
+
 		if (x_suffix) {
 			(void)snprintf(buf, sizeof(buf), "%s:%s", p, x_suffix);
 			p = buf;
@@ -399,13 +416,13 @@ main(int argc, char *argv[])
 			}
 		}
 		(void)printf("%-*.*s %-*.*s %-*.*s ",
-		    UT_NAMESIZE, UT_NAMESIZE, ep->utmp.ut_name,
-		    UT_LINESIZE, UT_LINESIZE,
+		    W_DISPUSERSIZE, W_DISPUSERSIZE, ep->utmp.ut_user,
+		    W_DISPLINESIZE, W_DISPLINESIZE,
 		    strncmp(ep->utmp.ut_line, "tty", 3) &&
 		    strncmp(ep->utmp.ut_line, "cua", 3) ?
 		    ep->utmp.ut_line : ep->utmp.ut_line + 3,
 		    W_DISPHOSTSIZE, W_DISPHOSTSIZE, *p ? p : "-");
-		t = _time_to_time32(ep->utmp.ut_time);
+		t = ep->utmp.ut_tv.tv_sec;
 		longattime = pr_attime(&t, &now);
 		longidle = pr_idle(ep->idle);
 		(void)printf("%.*s\n", argwidth - longidle - longattime,
@@ -476,12 +493,12 @@ pr_header(time_t *nowp, int nusers)
 }
 
 static struct stat *
-ttystat(char *line, int sz)
+ttystat(char *line)
 {
 	static struct stat sb;
 	char ttybuf[MAXPATHLEN];
 
-	(void)snprintf(ttybuf, sizeof(ttybuf), "%s%.*s", _PATH_DEV, sz, line);
+	(void)snprintf(ttybuf, sizeof(ttybuf), "%s%s", _PATH_DEV, line);
 	if (stat(ttybuf, &sb) == 0) {
 		return (&sb);
 	} else
diff --git a/usr.bin/wall/Makefile b/usr.bin/wall/Makefile
index 65abb61184c..5f0230f8f15 100644
--- a/usr.bin/wall/Makefile
+++ b/usr.bin/wall/Makefile
@@ -1,8 +1,12 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/6/93
+# $FreeBSD$
 
 PROG=	wall
 SRCS=	ttymsg.c wall.c
 BINGRP=	tty
 BINMODE=2555
 
+DPADD=	${LIBULOG}
+LDADD=	-lulog
+
 .include 
diff --git a/usr.bin/wall/wall.c b/usr.bin/wall/wall.c
index be5329aca56..9bf80762da3 100644
--- a/usr.bin/wall/wall.c
+++ b/usr.bin/wall/wall.c
@@ -64,8 +64,9 @@ static const char sccsid[] = "@(#)wall.c	8.2 (Berkeley) 11/16/93";
 #include 
 #include 
 #include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 
 #include "ttymsg.h"
 
@@ -82,12 +83,12 @@ int mbufsize;
 char *mbuf;
 
 static int
-ttystat(char *line, int sz)
+ttystat(char *line)
 {
 	struct stat sb;
 	char ttybuf[MAXPATHLEN];
 
-	(void)snprintf(ttybuf, sizeof(ttybuf), "%s%.*s", _PATH_DEV, sz, line);
+	(void)snprintf(ttybuf, sizeof(ttybuf), "%s%s", _PATH_DEV, line);
 	if (stat(ttybuf, &sb) == 0) {
 		return (0);
 	} else
@@ -98,17 +99,14 @@ int
 main(int argc, char *argv[])
 {
 	struct iovec iov;
-	struct utmp utmp;
+	struct utmpx *utmp;
 	int ch;
 	int ingroup;
-	FILE *fp;
 	struct wallgroup *g;
 	struct group *grp;
 	char **np;
 	const char *p;
 	struct passwd *pw;
-	char line[sizeof(utmp.ut_line) + 1];
-	char username[sizeof(utmp.ut_name) + 1];
 
 	(void)setlocale(LC_CTYPE, "");
 
@@ -145,20 +143,17 @@ main(int argc, char *argv[])
 
 	makemsg(*argv);
 
-	if (!(fp = fopen(_PATH_UTMP, "r")))
-		err(1, "cannot read %s", _PATH_UTMP);
 	iov.iov_base = mbuf;
 	iov.iov_len = mbufsize;
 	/* NOSTRICT */
-	while (fread((char *)&utmp, sizeof(utmp), 1, fp) == 1) {
-		if (!utmp.ut_name[0])
+	while ((utmp = getutxent()) != NULL) {
+		if (utmp->ut_type != USER_PROCESS)
 			continue;
-		if (ttystat(utmp.ut_line, UT_LINESIZE) != 0)
+		if (ttystat(utmp->ut_line) != 0)
 			continue;
 		if (grouplist) {
 			ingroup = 0;
-			strlcpy(username, utmp.ut_name, sizeof(utmp.ut_name));
-			pw = getpwnam(username);
+			pw = getpwnam(utmp->ut_user);
 			if (!pw)
 				continue;
 			for (g = grouplist; g && ingroup == 0; g = g->next) {
@@ -168,7 +163,7 @@ main(int argc, char *argv[])
 					ingroup = 1;
 				else if ((grp = getgrgid(g->gid)) != NULL) {
 					for (np = grp->gr_mem; *np; np++) {
-						if (strcmp(*np, username) == 0) {
+						if (strcmp(*np, utmp->ut_user) == 0) {
 							ingroup = 1;
 							break;
 						}
@@ -178,16 +173,14 @@ main(int argc, char *argv[])
 			if (ingroup == 0)
 				continue;
 		}
-		strncpy(line, utmp.ut_line, sizeof(utmp.ut_line));
-		line[sizeof(utmp.ut_line)] = '\0';
-		if ((p = ttymsg(&iov, 1, line, 60*5)) != NULL)
+		if ((p = ttymsg(&iov, 1, utmp->ut_line, 60*5)) != NULL)
 			warnx("%s", p);
 	}
 	exit(0);
 }
 
 static void
-usage()
+usage(void)
 {
 	(void)fprintf(stderr, "usage: wall [-g group] [file]\n");
 	exit(1);
diff --git a/usr.bin/wc/Makefile b/usr.bin/wc/Makefile
index edce9c1412c..4fa9f30f791 100644
--- a/usr.bin/wc/Makefile
+++ b/usr.bin/wc/Makefile
@@ -2,5 +2,4 @@
 # $FreeBSD$
 
 PROG=	wc
-WARNS?=	6
 .include 
diff --git a/usr.bin/wc/wc.c b/usr.bin/wc/wc.c
index b787612d3b0..5b0247478a0 100644
--- a/usr.bin/wc/wc.c
+++ b/usr.bin/wc/wc.c
@@ -287,7 +287,7 @@ word:	gotsp = 1;
 }
 
 static void
-usage()
+usage(void)
 {
 	(void)fprintf(stderr, "usage: wc [-Lclmw] [file ...]\n");
 	exit(1);
diff --git a/usr.bin/whereis/Makefile b/usr.bin/whereis/Makefile
index d48b30d1178..47e2c3dcf49 100644
--- a/usr.bin/whereis/Makefile
+++ b/usr.bin/whereis/Makefile
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
 PROG=	whereis
-WARNS?=	5
 
 .include 
diff --git a/usr.bin/who/Makefile b/usr.bin/who/Makefile
index 8695ca22323..bec6fcac1f2 100644
--- a/usr.bin/who/Makefile
+++ b/usr.bin/who/Makefile
@@ -1,5 +1,9 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/6/93
+# $FreeBSD$
 
 PROG=	who
 
+DPADD=	${LIBULOG}
+LDADD=	-lulog
+
 .include 
diff --git a/usr.bin/who/who.c b/usr.bin/who/who.c
index f94fcdb3474..bd8b68c6c20 100644
--- a/usr.bin/who/who.c
+++ b/usr.bin/who/who.c
@@ -44,16 +44,17 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#define _ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 
 static void	heading(void);
-static void	process_utmp(FILE *);
-static void	quick(FILE *);
-static void	row(struct utmp *);
+static void	process_utmp(void);
+static void	quick(void);
+static void	row(struct utmpx *);
 static int	ttywidth(void);
 static void	usage(void);
-static void	whoami(FILE *);
+static void	whoami(void);
 
 static int	Hflag;			/* Write column headings */
 static int	mflag;			/* Show info about current terminal */
@@ -66,8 +67,6 @@ int
 main(int argc, char *argv[])
 {
 	int ch;
-	const char *file;
-	FILE *fp;
 
 	setlocale(LC_TIME, "");
 
@@ -109,27 +108,25 @@ main(int argc, char *argv[])
 	if (argc > 1)
 		usage();
 
-	if (*argv != NULL)
-		file = *argv;
-	else
-		file = _PATH_UTMP;
-	if ((fp = fopen(file, "r")) == NULL)
-		err(1, "%s", file);
+	if (*argv != NULL) {
+		if (ulog_setutxfile(UTXI_TTY, *argv) != 0)
+			err(1, "%s", *argv);
+	}
 
 	if (qflag)
-		quick(fp);
+		quick();
 	else {
 		if (sflag)
 			Tflag = uflag = 0;
 		if (Hflag)
 			heading();
 		if (mflag)
-			whoami(fp);
+			whoami();
 		else
-			process_utmp(fp);
+			process_utmp();
 	}
 
-	fclose(fp);
+	endutxent();
 
 	exit(0);
 }
@@ -146,21 +143,19 @@ static void
 heading(void)
 {
 
-	printf("%-*s ", UT_NAMESIZE, "NAME");
+	printf("%-16s ", "NAME");
 	if (Tflag)
 		printf("S ");
-	printf("%-*s ", UT_LINESIZE, "LINE");
-	printf("%-*s ", 12, "TIME");
+	printf("%-8s %-12s ", "LINE", "TIME");
 	if (uflag)
 		printf("IDLE  ");
-	printf("%-*s", UT_HOSTSIZE, "FROM");
-	putchar('\n');
+	printf("%-16s\n", "FROM");
 }
 
 static void
-row(struct utmp *ut)
+row(struct utmpx *ut)
 {
-	char buf[80], tty[sizeof(_PATH_DEV) + UT_LINESIZE];
+	char buf[80], tty[PATH_MAX];
 	struct stat sb;
 	time_t idle, t;
 	static int d_first = -1;
@@ -173,8 +168,7 @@ row(struct utmp *ut)
 	state = '?';
 	idle = 0;
 	if (Tflag || uflag) {
-		snprintf(tty, sizeof(tty), "%s%.*s", _PATH_DEV,
-			UT_LINESIZE, ut->ut_line);
+		snprintf(tty, sizeof(tty), "%s%s", _PATH_DEV, ut->ut_line);
 		if (stat(tty, &sb) == 0) {
 			state = sb.st_mode & (S_IWOTH|S_IWGRP) ?
 			    '+' : '-';
@@ -182,11 +176,11 @@ row(struct utmp *ut)
 		}
 	}
 
-	printf("%-*.*s ", UT_NAMESIZE, UT_NAMESIZE, ut->ut_name);
+	printf("%-16s ", ut->ut_user);
 	if (Tflag)
 		printf("%c ", state);
-	printf("%-*.*s ", UT_LINESIZE, UT_LINESIZE, ut->ut_line);
-	t = _time32_to_time(ut->ut_time);
+	printf("%-8s ", ut->ut_line);
+	t = ut->ut_tv.tv_sec;
 	tm = localtime(&t);
 	strftime(buf, sizeof(buf), d_first ? "%e %b %R" : "%b %e %R", tm);
 	printf("%-*s ", 12, buf);
@@ -200,17 +194,17 @@ row(struct utmp *ut)
 			printf(" old  ");
 	}
 	if (*ut->ut_host != '\0')
-		printf("(%.*s)", UT_HOSTSIZE, ut->ut_host);
+		printf("(%s)", ut->ut_host);
 	putchar('\n');
 }
 
 static int
-ttystat(char *line, int sz)
+ttystat(char *line)
 {
 	struct stat sb;
 	char ttybuf[MAXPATHLEN];
 
-	(void)snprintf(ttybuf, sizeof(ttybuf), "%s%.*s", _PATH_DEV, sz, line);
+	(void)snprintf(ttybuf, sizeof(ttybuf), "%s%s", _PATH_DEV, line);
 	if (stat(ttybuf, &sb) == 0) {
 		return (0);
 	} else
@@ -218,32 +212,32 @@ ttystat(char *line, int sz)
 }
 
 static void
-process_utmp(FILE *fp)
+process_utmp(void)
 {
-	struct utmp ut;
+	struct utmpx *utx;
 
-	while (fread(&ut, sizeof(ut), 1, fp) == 1) {
-		if (*ut.ut_name == '\0')
+	while ((utx = getutxent()) != NULL) {
+		if (utx->ut_type != USER_PROCESS)
 			continue;
-		if (ttystat(ut.ut_line, UT_LINESIZE) != 0)
+		if (ttystat(utx->ut_line) != 0)
 			continue;
-		row(&ut);
+		row(utx);
 	}
 }
 
 static void
-quick(FILE *fp)
+quick(void)
 {
-	struct utmp ut;
+	struct utmpx *utx;
 	int col, ncols, num;
 
 	ncols = ttywidth();
 	col = num = 0;
-	while (fread(&ut, sizeof(ut), 1, fp) == 1) { 
-		if (*ut.ut_name == '\0')
+	while ((utx = getutxent()) != NULL) {
+		if (utx->ut_type != USER_PROCESS)
 			continue;
-		printf("%-*.*s", UT_NAMESIZE, UT_NAMESIZE, ut.ut_name);
-		if (++col < ncols / (UT_NAMESIZE + 1))
+		printf("%-16s", utx->ut_user);
+		if (++col < ncols / (16 + 1))
 			putchar(' ');
 		else {
 			col = 0;
@@ -258,24 +252,23 @@ quick(FILE *fp)
 }
 
 static void
-whoami(FILE *fp)
+whoami(void)
 {
-	struct utmp ut;
+	struct utmpx ut, *utx;
 	struct passwd *pwd;
-	const char *name, *p, *tty;
+	const char *name, *tty;
 
 	if ((tty = ttyname(STDIN_FILENO)) == NULL)
 		tty = "tty??";
-	else if ((p = strrchr(tty, '/')) != NULL)
-		tty = p + 1;
+	else if (strncmp(tty, _PATH_DEV, sizeof _PATH_DEV - 1) == 0)
+		tty += sizeof _PATH_DEV - 1;
+	strlcpy(ut.ut_line, tty, sizeof ut.ut_line);
 
 	/* Search utmp for our tty, dump first matching record. */
-	while (fread(&ut, sizeof(ut), 1, fp) == 1)
-		if (*ut.ut_name != '\0' && strncmp(ut.ut_line, tty,
-		    UT_LINESIZE) == 0) {
-			row(&ut);
-			return;
-		}
+	if ((utx = getutxline(&ut)) != NULL && utx->ut_type == USER_PROCESS) {
+		row(utx);
+		return;
+	}
 
 	/* Not found; fill the utmp structure with the information we have. */
 	memset(&ut, 0, sizeof(ut));
@@ -283,9 +276,8 @@ whoami(FILE *fp)
 		name = pwd->pw_name;
 	else
 		name = "?";
-	strncpy(ut.ut_name, name, UT_NAMESIZE);
-	strncpy(ut.ut_line, tty, UT_LINESIZE);
-	ut.ut_time = _time_to_time32(time(NULL));
+	strlcpy(ut.ut_user, name, sizeof ut.ut_user);
+	gettimeofday(&ut.ut_tv, NULL);
 	row(&ut);
 }
 
diff --git a/usr.bin/write/Makefile b/usr.bin/write/Makefile
index 8e6454bdc45..31f102ad234 100644
--- a/usr.bin/write/Makefile
+++ b/usr.bin/write/Makefile
@@ -1,7 +1,11 @@
 #	@(#)Makefile	8.1 (Berkeley) 6/6/93
+# $FreeBSD$
 
 PROG=	write
 BINMODE=2555
 BINGRP=	tty
 
+DPADD=	${LIBULOG}
+LDADD=	-lulog
+
 .include 
diff --git a/usr.bin/write/write.c b/usr.bin/write/write.c
index 878c8c1d0ba..ed57cb1815b 100644
--- a/usr.bin/write/write.c
+++ b/usr.bin/write/write.c
@@ -62,8 +62,9 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 
 void done(int);
 void do_write(char *, char *, uid_t);
@@ -146,20 +147,17 @@ usage(void)
 int
 utmp_chk(char *user, char *tty)
 {
-	struct utmp u;
-	int ufd;
+	struct utmpx lu, *u;
 
-	if ((ufd = open(_PATH_UTMP, O_RDONLY)) < 0)
-		return(0);	/* ignore error, shouldn't happen anyway */
-
-	while (read(ufd, (char *) &u, sizeof(u)) == sizeof(u))
-		if (strncmp(user, u.ut_name, sizeof(u.ut_name)) == 0 &&
-		    strncmp(tty, u.ut_line, sizeof(u.ut_line)) == 0) {
-			(void)close(ufd);
+	strncpy(lu.ut_line, tty, sizeof lu.ut_line);
+	setutxent();
+	while ((u = getutxline(&lu)) != NULL)
+		if (u->ut_type == USER_PROCESS &&
+		    strcmp(user, u->ut_user) == 0) {
+			endutxent();
 			return(0);
 		}
-
-	(void)close(ufd);
+	endutxent();
 	return(1);
 }
 
@@ -177,43 +175,40 @@ utmp_chk(char *user, char *tty)
 void
 search_utmp(char *user, char *tty, char *mytty, uid_t myuid)
 {
-	struct utmp u;
+	struct utmpx *u;
 	time_t bestatime, atime;
-	int ufd, nloggedttys, nttys, msgsok, user_is_me;
-	char atty[UT_LINESIZE + 1];
-
-	if ((ufd = open(_PATH_UTMP, O_RDONLY)) < 0)
-		err(1, "utmp");
+	int nloggedttys, nttys, msgsok, user_is_me;
 
 	nloggedttys = nttys = 0;
 	bestatime = 0;
 	user_is_me = 0;
-	while (read(ufd, (char *) &u, sizeof(u)) == sizeof(u))
-		if (strncmp(user, u.ut_name, sizeof(u.ut_name)) == 0) {
+
+	setutxent();
+	while ((u = getutxent()) != NULL)
+		if (u->ut_type == USER_PROCESS &&
+		    strcmp(user, u->ut_user) == 0) {
 			++nloggedttys;
-			(void)strncpy(atty, u.ut_line, UT_LINESIZE);
-			atty[UT_LINESIZE] = '\0';
-			if (term_chk(atty, &msgsok, &atime, 0))
+			if (term_chk(u->ut_line, &msgsok, &atime, 0))
 				continue;	/* bad term? skip */
 			if (myuid && !msgsok)
 				continue;	/* skip ttys with msgs off */
-			if (strcmp(atty, mytty) == 0) {
+			if (strcmp(u->ut_line, mytty) == 0) {
 				user_is_me = 1;
 				continue;	/* don't write to yourself */
 			}
 			++nttys;
 			if (atime > bestatime) {
 				bestatime = atime;
-				(void)strcpy(tty, atty);
+				(void)strlcpy(tty, u->ut_line, MAXPATHLEN);
 			}
 		}
+	endutxent();
 
-	(void)close(ufd);
 	if (nloggedttys == 0)
 		errx(1, "%s is not logged in", user);
 	if (nttys == 0) {
 		if (user_is_me) {		/* ok, so write to yourself! */
-			(void)strcpy(tty, mytty);
+			(void)strlcpy(tty, mytty, MAXPATHLEN);
 			return;
 		}
 		errx(1, "%s has messages disabled", user);
diff --git a/usr.bin/xargs/Makefile b/usr.bin/xargs/Makefile
index 16162a1641e..642e9532e42 100644
--- a/usr.bin/xargs/Makefile
+++ b/usr.bin/xargs/Makefile
@@ -3,6 +3,5 @@
 
 PROG=	xargs
 SRCS=	xargs.c strnsubst.c
-WARNS?=	6
 
 .include 
diff --git a/usr.bin/xinstall/Makefile b/usr.bin/xinstall/Makefile
index 594f1dcfbf7..e6ff88e90a5 100644
--- a/usr.bin/xinstall/Makefile
+++ b/usr.bin/xinstall/Makefile
@@ -4,6 +4,5 @@
 PROG=		xinstall
 PROGNAME=	install
 MAN=		install.1
-WARNS?=		6
 
 .include 
diff --git a/usr.bin/xinstall/xinstall.c b/usr.bin/xinstall/xinstall.c
index 49e47c65a36..14666451e09 100644
--- a/usr.bin/xinstall/xinstall.c
+++ b/usr.bin/xinstall/xinstall.c
@@ -53,7 +53,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 
-#include 
 #include 
 #include 
 #include 
@@ -86,16 +85,16 @@ int dobackup, docompare, dodir, dopreserve, dostrip, nommap, safecopy, verbose;
 mode_t mode = S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
 const char *suffix = BACKUP_SUFFIX;
 
-void	copy(int, const char *, int, const char *, off_t);
-int	compare(int, const char *, size_t, int, const char *, size_t);
-int	create_newfile(const char *, int, struct stat *);
-int	create_tempfile(const char *, char *, size_t);
-void	install(const char *, const char *, u_long, u_int);
-void	install_dir(char *);
-u_long	numeric_id(const char *, const char *);
-void	strip(const char *);
-int	trymmap(int);
-void	usage(void);
+static int	compare(int, const char *, size_t, int, const char *, size_t);
+static void	copy(int, const char *, int, const char *, off_t);
+static int	create_newfile(const char *, int, struct stat *);
+static int	create_tempfile(const char *, char *, size_t);
+static void	install(const char *, const char *, u_long, u_int);
+static void	install_dir(char *);
+static u_long	numeric_id(const char *, const char *);
+static void	strip(const char *);
+static int	trymmap(int);
+static void	usage(void);
 
 int
 main(int argc, char *argv[])
@@ -247,7 +246,7 @@ main(int argc, char *argv[])
 	/* NOTREACHED */
 }
 
-u_long
+static u_long
 numeric_id(const char *name, const char *type)
 {
 	u_long val;
@@ -270,7 +269,7 @@ numeric_id(const char *name, const char *type)
  * install --
  *	build a path name and install the file
  */
-void
+static void
 install(const char *from_name, const char *to_name, u_long fset, u_int flags)
 {
 	struct stat from_sb, temp_sb, to_sb;
@@ -524,7 +523,7 @@ install(const char *from_name, const char *to_name, u_long fset, u_int flags)
  * compare --
  *	compare two files; non-zero means files differ
  */
-int
+static int
 compare(int from_fd, const char *from_name __unused, size_t from_len,
 	int to_fd, const char *to_name __unused, size_t to_len)
 {
@@ -588,7 +587,7 @@ compare(int from_fd, const char *from_name __unused, size_t from_len,
  * create_tempfile --
  *	create a temporary file based on path and open it
  */
-int
+static int
 create_tempfile(const char *path, char *temp, size_t tsize)
 {
 	char *p;
@@ -608,7 +607,7 @@ create_tempfile(const char *path, char *temp, size_t tsize)
  * create_newfile --
  *	create a new file, overwriting an existing one if necessary
  */
-int
+static int
 create_newfile(const char *path, int target, struct stat *sbp)
 {
 	char backup[MAXPATHLEN];
@@ -651,7 +650,7 @@ create_newfile(const char *path, int target, struct stat *sbp)
  * copy --
  *	copy from one file to another
  */
-void
+static void
 copy(int from_fd, const char *from_name, int to_fd, const char *to_name,
     off_t size)
 {
@@ -704,7 +703,7 @@ copy(int from_fd, const char *from_name, int to_fd, const char *to_name,
  * strip --
  *	use strip(1) to strip the target file
  */
-void
+static void
 strip(const char *to_name)
 {
 	const char *stripbin;
@@ -736,7 +735,7 @@ strip(const char *to_name)
  * install_dir --
  *	build directory heirarchy
  */
-void
+static void
 install_dir(char *path)
 {
 	char *p;
@@ -770,8 +769,8 @@ install_dir(char *path)
  * usage --
  *	print a usage message and die
  */
-void
-usage()
+static void
+usage(void)
 {
 	(void)fprintf(stderr,
 "usage: install [-bCcpSsv] [-B suffix] [-f flags] [-g group] [-m mode]\n"
@@ -787,7 +786,7 @@ usage()
  * trymmap --
  *	return true (1) if mmap should be tried, false (0) if not.
  */
-int
+static int
 trymmap(int fd)
 {
 /*
diff --git a/usr.bin/xlint/xlint/Makefile b/usr.bin/xlint/xlint/Makefile
index 5dfdfb314a7..6cd715f81e2 100644
--- a/usr.bin/xlint/xlint/Makefile
+++ b/usr.bin/xlint/xlint/Makefile
@@ -11,5 +11,7 @@ MAN=	lint.1
 CFLAGS+=-I${.CURDIR}/../lint1
 CFLAGS+= -DPREFIX=\"${TOOLS_PREFIX}\"
 
+WARNS?=	2
+
 .include "${.CURDIR}/../../Makefile.inc"
 .include 
diff --git a/usr.bin/xlint/xlint/xlint.c b/usr.bin/xlint/xlint/xlint.c
index 82a118e99ab..553ac19c6f1 100644
--- a/usr.bin/xlint/xlint/xlint.c
+++ b/usr.bin/xlint/xlint/xlint.c
@@ -135,7 +135,7 @@ static	char	*concat3(const char *, const char *, const char *);
 static	void	terminate(int) __attribute__((__noreturn__));
 static	const	char *lbasename(const char *, int);
 static	void	appdef(char ***, const char *);
-static	void	usage(void);
+static	void	usage(void) __dead2;
 static	void	fname(const char *);
 static	void	runchild(const char *, char *const *, const char *, int);
 static	void	findlibs(char *const *);
@@ -304,11 +304,12 @@ int
 main(int argc, char *argv[])
 {
 	int	c;
-	char	flgbuf[3], *tmp, *s;
+	char	flgbuf[3], *s;
+	const char *tmp;
 	size_t	len;
 
 	if ((tmp = getenv("TMPDIR")) == NULL || (len = strlen(tmp)) == 0) {
-		tmpdir = xstrdup(_PATH_TMP);
+		tmpdir = _PATH_TMP;
 	} else {
 		s = xmalloc(len + 2);
 		(void)sprintf(s, "%s%s", tmp, tmp[len - 1] == '/' ? "" : "/");
@@ -555,9 +556,9 @@ main(int argc, char *argv[])
 		terminate(0);
 
 	if (!oflag) {
-		if ((s = getenv("LIBDIR")) == NULL || strlen(s) == 0)
-			s = PATH_LINTLIB;
-		appcstrg(&libsrchpath, s);
+		if ((tmp = getenv("LIBDIR")) == NULL || strlen(tmp) == 0)
+			tmp = PATH_LINTLIB;
+		appcstrg(&libsrchpath, tmp);
 		findlibs(libs);
 		findlibs(deflibs);
 	}
@@ -620,7 +621,7 @@ fname(const char *name)
 			return;
 		}
 		ofn = xmalloc(strlen(bn) + (bn == suff ? 4 : 2));
-		len = bn == suff ? strlen(bn) : (suff - 1) - bn;
+		len = bn == suff ? strlen(bn) : (size_t)((suff - 1) - bn);
 		(void)sprintf(ofn, "%.*s", (int)len, bn);
 		(void)strcat(ofn, ".ln");
 	} else {
diff --git a/usr.bin/yacc/Makefile b/usr.bin/yacc/Makefile
index e8b1024e82b..c2f31a78fe1 100644
--- a/usr.bin/yacc/Makefile
+++ b/usr.bin/yacc/Makefile
@@ -9,4 +9,6 @@ MAN=	yacc.1 yyfix.1
 LINKS=	${BINDIR}/yacc ${BINDIR}/byacc
 MLINKS=	yacc.1 byacc.1
 
+WARNS?=	2
+
 .include 
diff --git a/usr.bin/yacc/defs.h b/usr.bin/yacc/defs.h
index 5219e1b6623..772e9129caa 100644
--- a/usr.bin/yacc/defs.h
+++ b/usr.bin/yacc/defs.h
@@ -220,7 +220,6 @@ extern char tflag;
 extern char vflag;
 extern const char *symbol_prefix;
 
-extern char *myname;
 extern char *cptr;
 extern char *line;
 extern int lineno;
diff --git a/usr.bin/yacc/skeleton.c b/usr.bin/yacc/skeleton.c
index 8ff7c8a122f..434a7c231db 100644
--- a/usr.bin/yacc/skeleton.c
+++ b/usr.bin/yacc/skeleton.c
@@ -140,7 +140,11 @@ const char *header[] =
 const char *body[] =
 {
     "/* allocate initial stack or double stack size, up to YYMAXDEPTH */",
+    "#if defined(__cplusplus) || __STDC__",
+    "static int yygrowstack(void)",
+    "#else",
     "static int yygrowstack()",
+    "#endif",
     "{",
     "    int newsize, i;",
     "    short *newss;",
diff --git a/usr.bin/ypcat/Makefile b/usr.bin/ypcat/Makefile
index 58ee6907f07..782fdcc1a8d 100644
--- a/usr.bin/ypcat/Makefile
+++ b/usr.bin/ypcat/Makefile
@@ -3,4 +3,6 @@
 
 PROG=	ypcat
 
+WARNS?=	3
+
 .include 
diff --git a/usr.bin/ypmatch/Makefile b/usr.bin/ypmatch/Makefile
index 22e62996937..d4a5b955e5c 100644
--- a/usr.bin/ypmatch/Makefile
+++ b/usr.bin/ypmatch/Makefile
@@ -3,4 +3,6 @@
 
 PROG=	ypmatch
 
+WARNS?=	3
+
 .include 
diff --git a/usr.bin/ypwhich/Makefile b/usr.bin/ypwhich/Makefile
index f28f864ab09..3f6928fb7e8 100644
--- a/usr.bin/ypwhich/Makefile
+++ b/usr.bin/ypwhich/Makefile
@@ -3,4 +3,6 @@
 
 PROG=	ypwhich
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile
index f430b338ce5..f3e0a1b7804 100644
--- a/usr.sbin/Makefile
+++ b/usr.sbin/Makefile
@@ -167,6 +167,7 @@ SUBDIR=	${_ac} \
 	${_sa} \
 	${_sade} \
 	${_sendmail} \
+	service \
 	setfib \
 	setfmac \
 	setpmac \
diff --git a/usr.sbin/Makefile.inc b/usr.sbin/Makefile.inc
index 4347591cf56..bd13613e1d9 100644
--- a/usr.sbin/Makefile.inc
+++ b/usr.sbin/Makefile.inc
@@ -2,3 +2,5 @@
 # $FreeBSD$
 
 BINDIR?=	/usr/sbin
+
+WARNS?=		6
diff --git a/usr.sbin/ac/Makefile b/usr.sbin/ac/Makefile
index c45a0d69ff4..46064fcf300 100644
--- a/usr.sbin/ac/Makefile
+++ b/usr.sbin/ac/Makefile
@@ -3,8 +3,6 @@
 PROG=	ac
 MAN=	ac.8
 
-WARNS?=	4
-
 # Temporary, while tracking down problem wrt 64-bit time_t's on sparc64
 .if ${MACHINE_ARCH} == "sparc64"
 CFLAGS+=-DDEBUG
diff --git a/usr.sbin/accton/Makefile b/usr.sbin/accton/Makefile
index 7ea45a7df92..ea9b4f43565 100644
--- a/usr.sbin/accton/Makefile
+++ b/usr.sbin/accton/Makefile
@@ -4,6 +4,4 @@
 PROG=	accton
 MAN=	accton.8
 
-WARNS?=	4
-
 .include 
diff --git a/usr.sbin/accton/accton.c b/usr.sbin/accton/accton.c
index c1bb8b6b72c..33e66042e89 100644
--- a/usr.sbin/accton/accton.c
+++ b/usr.sbin/accton/accton.c
@@ -80,7 +80,7 @@ main(int argc, char *argv[])
 }
 
 static void
-usage()
+usage(void)
 {
 	(void)fprintf(stderr, "usage: accton [file]\n");
 	exit(1);
diff --git a/usr.sbin/acpi/acpiconf/Makefile b/usr.sbin/acpi/acpiconf/Makefile
index bb0df4b406e..5f862a2c621 100644
--- a/usr.sbin/acpi/acpiconf/Makefile
+++ b/usr.sbin/acpi/acpiconf/Makefile
@@ -3,6 +3,5 @@
 
 PROG=	acpiconf
 MAN=	acpiconf.8
-WARNS?=	6
 
 .include 
diff --git a/usr.sbin/acpi/acpidb/Makefile b/usr.sbin/acpi/acpidb/Makefile
index 8ad8239741a..5981f38d3db 100644
--- a/usr.sbin/acpi/acpidb/Makefile
+++ b/usr.sbin/acpi/acpidb/Makefile
@@ -38,8 +38,8 @@ SRCS+=	psargs.c psloop.c psopcode.c psparse.c psscope.c	\
 # namespace
 SRCS+=	nsaccess.c nsalloc.c nsdump.c nseval.c nsinit.c		\
 	nsload.c nsnames.c nsobject.c nsparse.c nspredef.c	\
-	nsrepair.c nssearch.c nsutils.c nswalk.c nsxfeval.c	\
-	nsxfname.c nsxfobj.c
+	nsrepair.c nsrepair2.c nssearch.c nsutils.c nswalk.c	\
+	nsxfeval.c nsxfname.c nsxfobj.c
 
 # resources
 SRCS+=	rsaddr.c rscalc.c rscreate.c rsdump.c rsinfo.c		\
diff --git a/usr.sbin/acpi/acpidump/Makefile b/usr.sbin/acpi/acpidump/Makefile
index 21a4140defc..e0045009122 100644
--- a/usr.sbin/acpi/acpidump/Makefile
+++ b/usr.sbin/acpi/acpidump/Makefile
@@ -3,6 +3,5 @@
 PROG=	acpidump
 MAN=	acpidump.8
 SRCS=	acpi.c acpi_user.c acpidump.c
-WARNS?=	6
 
 .include 
diff --git a/usr.sbin/acpi/iasl/Makefile b/usr.sbin/acpi/iasl/Makefile
index ff6ebd7fbee..130c39e951a 100644
--- a/usr.sbin/acpi/iasl/Makefile
+++ b/usr.sbin/acpi/iasl/Makefile
@@ -50,6 +50,8 @@ SRCS+=	utalloc.c utcache.c utcopy.c utdebug.c utdelete.c	\
 	utglobal.c utinit.c utlock.c utmath.c utmisc.c		\
 	utmutex.c utobject.c utresrc.c utstate.c utxface.c
 
+WARNS?=	2
+
 MAN=	iasl.8
 
 CFLAGS+= -DACPI_ASL_COMPILER -I.
diff --git a/usr.sbin/amd/Makefile.inc b/usr.sbin/amd/Makefile.inc
index c8451f6b1fc..673edc1b915 100644
--- a/usr.sbin/amd/Makefile.inc
+++ b/usr.sbin/amd/Makefile.inc
@@ -40,6 +40,8 @@ RPCCOM=		rpcgen
 MOUNT_X=	${DESTDIR}/usr/include/rpcsvc/mount.x
 NFS_PROT_X=	${DESTDIR}/usr/include/rpcsvc/nfs_prot.x
 
+WARNS?=	1
+
 .if exists(${.CURDIR}/../../Makefile.inc)
 .include "${.CURDIR}/../../Makefile.inc"
 .endif
diff --git a/usr.sbin/ancontrol/ancontrol.c b/usr.sbin/ancontrol/ancontrol.c
index 08d13d31205..008970d9b08 100644
--- a/usr.sbin/ancontrol/ancontrol.c
+++ b/usr.sbin/ancontrol/ancontrol.c
@@ -1327,8 +1327,8 @@ an_setkeys(const char *iface, const char *key, int keytype)
 	}
 }
 
-static void an_readkeyinfo(iface)
-	const char		*iface;
+static void
+an_readkeyinfo(const char *iface)
 {
 	struct an_req		areq;
 	struct an_ltv_genconfig	*cfg;
diff --git a/usr.sbin/apm/Makefile b/usr.sbin/apm/Makefile
index f6939e2b393..08ed25fce66 100644
--- a/usr.sbin/apm/Makefile
+++ b/usr.sbin/apm/Makefile
@@ -4,6 +4,5 @@ PROG=	apm
 MAN=	apm.8
 MLINKS=	apm.8 apmconf.8
 MANSUBDIR= /${MACHINE_ARCH}
-WARNS?=	6
 
 .include 
diff --git a/usr.sbin/apm/apm.8 b/usr.sbin/apm/apm.8
index 1e36f639f50..3e039b08b1b 100644
--- a/usr.sbin/apm/apm.8
+++ b/usr.sbin/apm/apm.8
@@ -7,15 +7,15 @@
 .\" these terms are retained. Under no circumstances is the author
 .\" responsible for the proper functioning of this software, nor does
 .\" the author assume any responsibility for damages incurred with its
+.\" use.
 .\"
 .\" $FreeBSD$
 .\"
-.\" use.
-.Dd November 1, 1994
+.Dd December 22, 2009
 .Dt APM 8 i386
 .Os
 .Sh NAME
-.Nm apm , zzz
+.Nm apm
 .Nd control the APM BIOS and display its information
 .Sh SYNOPSIS
 .Nm
@@ -24,27 +24,14 @@
 .Op Fl e Ar enable
 .Op Fl h Ar enable
 .Op Fl r Ar delta
-.Pp
-.Nm zzz
 .Sh DESCRIPTION
 The
 .Nm
 utility
 controls the Intel / Microsoft APM (Advanced Power Management) BIOS and
 displays the current status of APM on laptop PCs.
-The
-.Nm zzz
-utility suspends the system by controlling APM.
 .Pp
-The following options are available for
-.Nm
-(no options are available for
-.Nm zzz ) .
-If no options are specified,
-.Nm
-displays information and current status of APM in verbose mode.
-If multiple display options are given, the values are displayed one
-per line in the order given here.
+The options are as follows:
 .Bl -tag -width indent
 .It Fl a
 Display the current AC-line status as an integer value.
@@ -126,9 +113,15 @@ output of
 tells what your laptop claims to support.
 .It Fl z
 Suspend the system.
-It is equivalent to
-.Nm zzz .
+It is used by
+.Xr zzz 8 .
 .El
+.Pp
+If no options are specified,
+.Nm
+displays information and current status of APM in verbose mode.
+If multiple display options are given, the values are displayed one
+per line in the order given here.
 .Sh NOTES
 .Xr apmconf 8
 has been merged in
@@ -137,7 +130,8 @@ and thus
 .Nm
 replaces all of its functionality.
 .Sh SEE ALSO
-.Xr apm 4
+.Xr apm 4 ,
+.Xr zzz 8
 .Sh AUTHORS
 .An Tatsumi Hosokawa Aq hosokawa@jp.FreeBSD.org
 .Sh BUGS
diff --git a/usr.sbin/apm/apm.c b/usr.sbin/apm/apm.c
index 56432a4ab7a..a60f8213a76 100644
--- a/usr.sbin/apm/apm.c
+++ b/usr.sbin/apm/apm.c
@@ -1,5 +1,5 @@
 /*
- * apm / zzz	APM BIOS utility for FreeBSD
+ * APM BIOS utility for FreeBSD
  *
  * Copyright (C) 1994-1996 by Tatsumi Hosokawa 
  *
@@ -43,10 +43,9 @@ int cmos_wall = 0;	/* True when wall time is in cmos clock, else UTC */
 static void
 usage(void)
 {
-	fprintf(stderr, "%s\n%s\n",
+	fprintf(stderr,
 		"usage: apm [-ablstzZ] [-d enable ] [ -e enable ] "
-		"[ -h enable ] [-r delta]",
-		"       zzz");
+		"[ -h enable ] [-r delta]\n");
 	exit(1);
 }
 
@@ -397,11 +396,6 @@ main(int argc, char *argv[])
 	else
 		cmdname = argv[0];
 
-	if (strcmp(cmdname, "zzz") == 0) {
-		dosleep = 1;
-		all_info = 0;
-		goto finish_option;
-	}
 	while ((c = getopt(argc, argv, "abe:h:lRr:stzd:Z")) != -1) {
 		switch (c) {
 		case 'a':
@@ -457,7 +451,6 @@ main(int argc, char *argv[])
 		argc -= optind;
 		argv += optind;
 	}
-finish_option:
 	if (haltcpu != -1 || enable != -1 || display != -1 || delta || dosleep
 	    || standby) {
 		fd = open(APMDEV, O_RDWR);
diff --git a/usr.sbin/apmd/Makefile b/usr.sbin/apmd/Makefile
index 7e81b35dbc7..5ccf7e63e5e 100644
--- a/usr.sbin/apmd/Makefile
+++ b/usr.sbin/apmd/Makefile
@@ -5,6 +5,8 @@ MAN=	apmd.8
 MANSUBDIR= /i386
 SRCS=	apmd.c apmdlex.l apmdparse.y y.tab.h
 
+WARNS?=	0
+
 DPADD=	${LIBL}
 LDADD=	-ll
 
diff --git a/usr.sbin/arp/arp.c b/usr.sbin/arp/arp.c
index 8a3410fd8f8..61427d34c81 100644
--- a/usr.sbin/arp/arp.c
+++ b/usr.sbin/arp/arp.c
@@ -326,7 +326,6 @@ set(int argc, char **argv)
 			doing_proxy = 1;
 			if (argc && strncmp(argv[1], "only", 3) == 0) {
 				proxy_only = 1;
-				dst->sin_other = SIN_PROXY;
 				argc--; argv++;
 			}
 		} else if (strncmp(argv[0], "blackhole", 9) == 0) {
@@ -365,33 +364,30 @@ set(int argc, char **argv)
 			sdl_m.sdl_alen = ETHER_ADDR_LEN;
 		}
 	}
-	for (;;) {	/* try at most twice */
-		rtm = rtmsg(RTM_GET, dst, &sdl_m);
-		if (rtm == NULL) {
-			warn("%s", host);
-			return (1);
-		}
-		addr = (struct sockaddr_inarp *)(rtm + 1);
-		sdl = (struct sockaddr_dl *)(SA_SIZE(addr) + (char *)addr);
-		if (addr->sin_addr.s_addr != dst->sin_addr.s_addr)	
-			break;
-		if (sdl->sdl_family == AF_LINK &&
-		    !(rtm->rtm_flags & RTF_GATEWAY) &&
-		    valid_type(sdl->sdl_type) )
-			break;
-		if (doing_proxy == 0) {
-			printf("set: can only proxy for %s\n", host);
-			return (1);
-		}
-		if (dst->sin_other & SIN_PROXY) {
-			printf("set: proxy entry exists for non 802 device\n");
-			return (1);
-		}
-		dst->sin_other = SIN_PROXY;
-		proxy_only = 1;
+
+	/*
+	 * In the case a proxy-arp entry is being added for
+	 * a remote end point, the RTF_ANNOUNCE flag in the 
+	 * RTM_GET command is an indication to the kernel
+	 * routing code that the interface associated with
+	 * the prefix route covering the local end of the
+	 * PPP link should be returned, on which ARP applies.
+	 */
+	rtm = rtmsg(RTM_GET, dst, &sdl_m);
+	if (rtm == NULL) {
+		warn("%s", host);
+		return (1);
+	}
+	addr = (struct sockaddr_inarp *)(rtm + 1);
+	sdl = (struct sockaddr_dl *)(SA_SIZE(addr) + (char *)addr);
+	if (addr->sin_addr.s_addr == dst->sin_addr.s_addr) {
+		printf("set: proxy entry exists for non 802 device\n");
+		return (1);
 	}
 
-	if (sdl->sdl_family != AF_LINK) {
+	if ((sdl->sdl_family != AF_LINK) ||
+	    (rtm->rtm_flags & RTF_GATEWAY) ||
+	    !valid_type(sdl->sdl_type)) {
 		printf("cannot intuit interface index and type for %s\n", host);
 		return (1);
 	}
@@ -436,7 +432,11 @@ delete(char *host, int do_proxy)
 	dst = getaddr(host);
 	if (dst == NULL)
 		return (1);
-	dst->sin_other = do_proxy;
+
+	/*
+	 * Perform a regular entry delete first.
+	 */
+	flags &= ~RTF_ANNOUNCE;
 
 	/*
 	 * setup the data structure to notify the kernel
@@ -471,11 +471,16 @@ delete(char *host, int do_proxy)
 			break;
 		}
 
-		if (dst->sin_other & SIN_PROXY) {
+		/*
+		 * Regualar entry delete failed, now check if there
+		 * is a proxy-arp entry to remove.
+		 */
+		if (flags & RTF_ANNOUNCE) {
 			fprintf(stderr, "delete: cannot locate %s\n",host);
 			return (1);
 		}
-		dst->sin_other = SIN_PROXY;
+
+		flags |= RTF_ANNOUNCE;
 	}
 	rtm->rtm_flags |= RTF_LLDATA;
 	if (rtmsg(RTM_DELETE, dst, NULL) != NULL) {
@@ -485,6 +490,7 @@ delete(char *host, int do_proxy)
 	return (1);
 }
 
+
 /*
  * Search the arp table and do some action on matching entries
  */
@@ -493,7 +499,7 @@ search(u_long addr, action_fn *action)
 {
 	int mib[6];
 	size_t needed;
-	char *lim, *buf, *newbuf, *next;
+	char *lim, *buf, *next;
 	struct rt_msghdr *rtm;
 	struct sockaddr_inarp *sin2;
 	struct sockaddr_dl *sdl;
@@ -516,13 +522,9 @@ search(u_long addr, action_fn *action)
 		return 0;
 	buf = NULL;
 	for (;;) {
-		newbuf = realloc(buf, needed);
-		if (newbuf == NULL) {
-			if (buf != NULL)
-				free(buf);
+		buf = reallocf(buf, needed);
+		if (buf == NULL)
 			errx(1, "could not reallocate memory");
-		}
-		buf = newbuf;
 		st = sysctl(mib, 6, buf, &needed, NULL, 0);
 		if (st == 0 || errno != ENOMEM)
 			break;
diff --git a/usr.sbin/asf/Makefile b/usr.sbin/asf/Makefile
index b4b7af35013..0db69e82cc6 100644
--- a/usr.sbin/asf/Makefile
+++ b/usr.sbin/asf/Makefile
@@ -7,6 +7,4 @@ MAN=	asf.8
 DPADD=	${LIBKVM}
 LDADD=	-lkvm
 
-WARNS?=	4
-
 .include 
diff --git a/usr.sbin/asf/asf_kld.c b/usr.sbin/asf/asf_kld.c
index 1d6a2b7d51e..f0bd699580d 100644
--- a/usr.sbin/asf/asf_kld.c
+++ b/usr.sbin/asf/asf_kld.c
@@ -39,7 +39,7 @@ __FBSDID("$FreeBSD$");
  * Works with a live kernel only.
  */
 void
-asf_kld()
+asf_kld(void)
 {
 	struct kld_file_stat kfs;
 	int fid = 0;	/* indicates the beginning of the linker file list */
diff --git a/usr.sbin/audit/Makefile b/usr.sbin/audit/Makefile
index 9f31741500a..a3f7fbf241f 100644
--- a/usr.sbin/audit/Makefile
+++ b/usr.sbin/audit/Makefile
@@ -13,4 +13,6 @@ MAN=	audit.8
 DPADD=	${LIBBSM}
 LDADD=	-lbsm
 
+WARNS?=	5
+
 .include 
diff --git a/usr.sbin/auditd/Makefile b/usr.sbin/auditd/Makefile
index 839458d98b4..201f961986b 100644
--- a/usr.sbin/auditd/Makefile
+++ b/usr.sbin/auditd/Makefile
@@ -14,4 +14,6 @@ MAN=	auditd.8
 DPADD=	${LIBBSM} ${LIBAUDITD}
 LDADD=	-lbsm -lauditd
 
+WARNS?=	3
+
 .include 
diff --git a/usr.sbin/auditreduce/Makefile b/usr.sbin/auditreduce/Makefile
index 73b355de4e1..7dc955337da 100644
--- a/usr.sbin/auditreduce/Makefile
+++ b/usr.sbin/auditreduce/Makefile
@@ -13,4 +13,6 @@ MAN=	auditreduce.1
 DPADD=	${LIBBSM}
 LDADD=	-lbsm
 
+WARNS?=	3
+
 .include 
diff --git a/usr.sbin/authpf/Makefile b/usr.sbin/authpf/Makefile
index b4c9b4f3621..0a24b8efc08 100644
--- a/usr.sbin/authpf/Makefile
+++ b/usr.sbin/authpf/Makefile
@@ -19,4 +19,6 @@ CFLAGS+= -DENABLE_ALTQ
 LDADD+= -lm -lmd -lutil
 DPADD+= ${LIBM} ${LIBMD} ${LIBUTIL}
 
+WARNS?=	3
+
 .include 
diff --git a/usr.sbin/boot0cfg/Makefile b/usr.sbin/boot0cfg/Makefile
index dc02cad7b41..79e7cd29902 100644
--- a/usr.sbin/boot0cfg/Makefile
+++ b/usr.sbin/boot0cfg/Makefile
@@ -3,8 +3,6 @@
 PROG=	boot0cfg
 MAN=	boot0cfg.8
 
-WARNS?=	2
-
 DPADD=	${LIBGEOM}
 LDADD=	-lgeom
 
diff --git a/usr.sbin/bootparamd/Makefile.inc b/usr.sbin/bootparamd/Makefile.inc
index 1e4d46f113a..5c01215dd55 100644
--- a/usr.sbin/bootparamd/Makefile.inc
+++ b/usr.sbin/bootparamd/Makefile.inc
@@ -2,3 +2,5 @@
 # $FreeBSD$
 
 BINDIR?=	/usr/sbin
+
+WARNS?=		2
diff --git a/usr.sbin/bootparamd/bootparamd/bootparamd.c b/usr.sbin/bootparamd/bootparamd/bootparamd.c
index c6387304cd6..5c1d264a165 100644
--- a/usr.sbin/bootparamd/bootparamd/bootparamd.c
+++ b/usr.sbin/bootparamd/bootparamd/bootparamd.c
@@ -191,9 +191,9 @@ int blen;
 {
   FILE *bpf;
   char  *where;
+#ifdef YP
   static char *result;
   int resultlen;
-#ifdef YP
   static char *yp_domain;
 #endif
 
@@ -294,9 +294,9 @@ int len;
   int ch, pch;
   FILE *bpf;
   int res = 0;
+#ifdef YP
   static char *result;
   int resultlen;
-#ifdef YP
   static char *yp_domain;
 #endif
 
diff --git a/usr.sbin/bsnmpd/bsnmpd/Makefile b/usr.sbin/bsnmpd/bsnmpd/Makefile
index 9fbf3667920..e74f675b4ab 100644
--- a/usr.sbin/bsnmpd/bsnmpd/Makefile
+++ b/usr.sbin/bsnmpd/bsnmpd/Makefile
@@ -14,7 +14,6 @@ XSYM=	snmpMIB begemotSnmpdModuleTable begemotSnmpd begemotTrapSinkTable \
 	freeBSDVersion
 CLEANFILES= oid.h tree.c tree.h
 MAN=	bsnmpd.1 snmpmod.3
-WARNS?=	6
 NO_WERROR=
 
 FILESGROUPS= BMIBS DEFS
diff --git a/usr.sbin/bsnmpd/gensnmptree/Makefile b/usr.sbin/bsnmpd/gensnmptree/Makefile
index 11c6a3b28f1..a92f4eb3684 100644
--- a/usr.sbin/bsnmpd/gensnmptree/Makefile
+++ b/usr.sbin/bsnmpd/gensnmptree/Makefile
@@ -10,4 +10,6 @@ CFLAGS+= -I${CONTRIB}/lib
 CFLAGS+= -DQUADFMT='"llu"' -DQUADXFMT='"llx"' -DHAVE_STDINT_H
 CFLAGS+= -DHAVE_INTTYPES_H
 
+WARNS?=	5
+
 .include 
diff --git a/usr.sbin/bsnmpd/modules/snmp_hostres/Makefile b/usr.sbin/bsnmpd/modules/snmp_hostres/Makefile
index 2922f45aa8b..3e9e05f37e8 100644
--- a/usr.sbin/bsnmpd/modules/snmp_hostres/Makefile
+++ b/usr.sbin/bsnmpd/modules/snmp_hostres/Makefile
@@ -69,8 +69,8 @@ MAN=	snmp_hostres.3
 DEFS=	${MOD}_tree.def
 BMIBS=	BEGEMOT-HOSTRES-MIB.txt
 
-DPADD=	${LIBKVM} ${LIBDEVINFO} ${LIBM} ${LIBGEOM} ${LIBMEMSTAT}
-LDADD=	-lkvm -ldevinfo -lm -lgeom -lmemstat
+DPADD=	${LIBKVM} ${LIBDEVINFO} ${LIBM} ${LIBGEOM} ${LIBMEMSTAT} ${LIBULOG}
+LDADD=	-lkvm -ldevinfo -lm -lgeom -lmemstat -lulog
 
 .include 
 
diff --git a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_device_tbl.c b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_device_tbl.c
index 7e814364916..cb3814599d3 100644
--- a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_device_tbl.c
+++ b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_device_tbl.c
@@ -352,11 +352,11 @@ device_get_status(struct devinfo_dev *dev)
 	assert(dev != NULL);
 
 	switch (dev->dd_state) {
-	case DIS_ALIVE:			/* probe succeeded */
-	case DIS_NOTPRESENT:		/* not probed or probe failed */
+	case DS_ALIVE:			/* probe succeeded */
+	case DS_NOTPRESENT:		/* not probed or probe failed */
 		return (DS_DOWN);
-	case DIS_ATTACHED:		/* attach method called */
-	case DIS_BUSY:			/* device is open */
+	case DS_ATTACHED:		/* attach method called */
+	case DS_BUSY:			/* device is open */
 		return (DS_RUNNING);
 	default:
 		return (DS_UNKNOWN);
diff --git a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_scalars.c b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_scalars.c
index 945a9bde55a..8cf648b52a1 100644
--- a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_scalars.c
+++ b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_scalars.c
@@ -41,15 +41,13 @@
 #include 
 #include 
 #include 
-#include 
+#define	_ULOG_POSIX_NAMES
+#include 
 
 #include "hostres_snmp.h"
 #include "hostres_oid.h"
 #include "hostres_tree.h"
 
-/* file pointer to keep an open instance of utmp */
-static FILE *utmp_fp;
-
 /* boot timestamp in centi-seconds */
 static uint64_t kernel_boot;
 
@@ -70,9 +68,6 @@ fini_scalars(void)
 {
 
 	free(boot_line);
-
-	if (utmp_fp != NULL)
-		(void)fclose(utmp_fp);
 }
 
 /**
@@ -220,30 +215,15 @@ OS_getSystemInitialLoadParameters(u_char **params)
 static int
 OS_getSystemNumUsers(uint32_t *nu)
 {
-	struct utmp utmp;
-	static int first_time = 1;
-
-	if (utmp_fp == NULL) {
-		if (!first_time)
-			return (SNMP_ERR_GENERR);
-		first_time = 0;
-		if ((utmp_fp = fopen(_PATH_UTMP, "r")) == NULL) {
-			syslog(LOG_ERR, "fopen(%s) failed: %m", _PATH_UTMP);
-			return (SNMP_ERR_GENERR);
-		}
-	}
-
-	/* start with the begining of the utmp file */
-	(void)rewind(utmp_fp);
+	struct utmpx *utmp;
 
+	setutxent();
 	*nu = 0;
-	while (fread(&utmp, sizeof(utmp), 1, utmp_fp) == 1) {
-		if (utmp.ut_name[0] != '\0' && utmp.ut_line[0] != '\0') {
-			if (getpwnam(utmp.ut_name) == NULL)
-				continue;
+	while ((utmp = getutxent()) != NULL) {
+		if (utmp->ut_type == USER_PROCESS)
 			(*nu)++;
-		}
 	}
+	endutxent();
 
 	return (SNMP_ERR_NOERROR);
 }
diff --git a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.c b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.c
index 47112da7770..c2a06db56e5 100644
--- a/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.c
+++ b/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_snmp.c
@@ -49,7 +49,6 @@
 #include 
 #include 
 #include 
-#include 
 
 #include "hostres_snmp.h"
 #include "hostres_oid.h"
diff --git a/usr.sbin/bsnmpd/modules/snmp_pf/Makefile b/usr.sbin/bsnmpd/modules/snmp_pf/Makefile
index 74724644cf4..92b0a4ba912 100644
--- a/usr.sbin/bsnmpd/modules/snmp_pf/Makefile
+++ b/usr.sbin/bsnmpd/modules/snmp_pf/Makefile
@@ -4,7 +4,6 @@
 
 MOD=	pf
 SRCS=	pf_snmp.c
-WARNS?=	6
 
 XSYM=	begemotPf
 DEFS=	${MOD}_tree.def
diff --git a/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c b/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
index 919e5d48cbd..4e554c00866 100644
--- a/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
+++ b/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
@@ -1104,7 +1104,7 @@ pft_refresh(void)
 	}
 
 	for (i = 0; i < numtbls; i++) {
-		e = malloc(sizeof(struct pfr_tstats));
+		e = malloc(sizeof(struct pft_entry));
 		if (e == NULL)
 			goto err1;
 		e->index = i + 1;
diff --git a/usr.sbin/btxld/Makefile b/usr.sbin/btxld/Makefile
index 6ca452eec1c..32cf99d5eda 100644
--- a/usr.sbin/btxld/Makefile
+++ b/usr.sbin/btxld/Makefile
@@ -4,6 +4,4 @@ PROG=	btxld
 MAN=	btxld.8
 SRCS=	btxld.c elfh.c
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/burncd/Makefile b/usr.sbin/burncd/Makefile
index bd4f285760c..11e07c79d0c 100644
--- a/usr.sbin/burncd/Makefile
+++ b/usr.sbin/burncd/Makefile
@@ -3,6 +3,4 @@
 PROG=	burncd
 MAN=	burncd.8
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/burncd/burncd.8 b/usr.sbin/burncd/burncd.8
index 18c1bc46a11..2501e7209c7 100644
--- a/usr.sbin/burncd/burncd.8
+++ b/usr.sbin/burncd/burncd.8
@@ -27,7 +27,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd May 2, 2005
+.Dd December 21, 2009
 .Os
 .Dt BURNCD 8
 .Sh NAME
@@ -158,7 +158,11 @@ refers to stdin, and can only be used once.
 .Sh ENVIRONMENT
 The following environment variables affect the execution of
 .Nm :
-.Bl -tag -width ".Ev CDROM"
+.Bl -tag -width ".Ev BURNCD_SPEED"
+.It Ev BURNCD_SPEED
+The write speed to use if one is not specified with the
+.Fl s
+flag.
 .It Ev CDROM
 The CD device to use if one is not specified with the
 .Fl f
diff --git a/usr.sbin/burncd/burncd.c b/usr.sbin/burncd/burncd.c
index c4d1648e7bb..2931cf819bc 100644
--- a/usr.sbin/burncd/burncd.c
+++ b/usr.sbin/burncd/burncd.c
@@ -80,11 +80,13 @@ main(int argc, char **argv)
 	int dao = 0, eject = 0, fixate = 0, list = 0, multi = 0, preemp = 0;
 	int nogap = 0, speed = 4 * 177, test_write = 0, force = 0;
 	int block_size = 0, block_type = 0, cdopen = 0, dvdrw = 0;
-	const char *dev;
+	const char *dev, *env_speed;
 
 	if ((dev = getenv("CDROM")) == NULL)
 		dev = "/dev/acd0";
 
+	env_speed = getenv("BURNCD_SPEED");
+
 	while ((ch = getopt(argc, argv, "def:Flmnpqs:tv")) != -1) {
 		switch (ch) {
 		case 'd':
@@ -124,12 +126,7 @@ main(int argc, char **argv)
 			break;
 
 		case 's':
-			if (strcasecmp("max", optarg) == 0)
-				speed = CDR_MAX_SPEED;
-			else
-				speed = atoi(optarg) * 177;
-			if (speed <= 0)
-				errx(EX_USAGE, "Invalid speed: %s", optarg);
+			env_speed = optarg;
 			break;
 
 		case 't':
@@ -147,6 +144,15 @@ main(int argc, char **argv)
 	argc -= optind;
 	argv += optind;
 
+	if (env_speed == NULL)
+		;
+	else if (strcasecmp("max", env_speed) == 0)
+		speed = CDR_MAX_SPEED;
+	else
+		speed = atoi(env_speed) * 177;
+	if (speed <= 0)
+		errx(EX_USAGE, "Invalid speed: %s", optarg);
+
 	if (argc == 0)
 		usage();
 
diff --git a/usr.sbin/cdcontrol/Makefile b/usr.sbin/cdcontrol/Makefile
index 40addadc52e..fc78e005320 100644
--- a/usr.sbin/cdcontrol/Makefile
+++ b/usr.sbin/cdcontrol/Makefile
@@ -2,7 +2,7 @@
 
 PROG= cdcontrol
 
-WARNS?= 2
+WARNS?= 3
 
 DPADD=	${LIBEDIT} ${LIBTERMCAP}
 LDADD=	-ledit -ltermcap
diff --git a/usr.sbin/cdcontrol/cdcontrol.c b/usr.sbin/cdcontrol/cdcontrol.c
index a4b13d8f633..526f59979c3 100644
--- a/usr.sbin/cdcontrol/cdcontrol.c
+++ b/usr.sbin/cdcontrol/cdcontrol.c
@@ -152,7 +152,7 @@ __const char	*strstatus(int);
 static u_int	 dbprog_discid(void);
 __const char	*cdcontrol_prompt(void);
 
-void help ()
+void help (void)
 {
 	struct cmdtab *c;
 	const char *s;
@@ -178,7 +178,7 @@ void help ()
 	printf ("\tThe plain target address is taken as a synonym for play.\n");
 }
 
-void usage ()
+void usage (void)
 {
 	fprintf (stderr, "usage: cdcontrol [-sv] [-f device] [command ...]\n");
 	exit (1);
@@ -413,8 +413,11 @@ int run (int cmd, char *arg)
 		if (fd < 0 && !open_cd ())
 			return (0);
 
-		if (! strlen (arg))
-		    	return pstatus ("volume");
+		if (! strlen (arg)) {
+			char volume[] = "volume";
+
+		    	return pstatus (volume);
+		}
 
 		if (! strncasecmp (arg, "left", strlen(arg)))
 			return ioctl (fd, CDIOCSETLEFT);
@@ -899,7 +902,7 @@ dbprog_sum(int n)
  *	The integer disc ID.
  */
 static u_int
-dbprog_discid()
+dbprog_discid(void)
 {
 	struct	ioc_toc_header h;
 	int	rc;
@@ -930,7 +933,7 @@ dbprog_discid()
 	return((n % 0xff) << 24 | t << 8 | ntr);
 }
 
-int cdid ()
+int cdid (void)
 {
 	u_int	id;
 
@@ -1130,7 +1133,7 @@ int status (int *trk, int *min, int *sec, int *frame)
 }
 
 const char *
-cdcontrol_prompt()
+cdcontrol_prompt(void)
 {
 	return ("cdcontrol> ");
 }
@@ -1249,7 +1252,7 @@ char *parse (char *buf, int *cmd)
 	return p;
 }
 
-int open_cd ()
+int open_cd (void)
 {
 	char devbuf[MAXPATHLEN];
 	const char *dev;
diff --git a/usr.sbin/chkgrp/Makefile b/usr.sbin/chkgrp/Makefile
index 1c52f4680f8..a7bfc548ced 100644
--- a/usr.sbin/chkgrp/Makefile
+++ b/usr.sbin/chkgrp/Makefile
@@ -3,6 +3,4 @@
 PROG=	chkgrp
 MAN=	chkgrp.8
 
-WARNS?=	2
-
 .include 
diff --git a/usr.sbin/chown/Makefile b/usr.sbin/chown/Makefile
index 63c5a22f05d..97972e5684e 100644
--- a/usr.sbin/chown/Makefile
+++ b/usr.sbin/chown/Makefile
@@ -5,6 +5,4 @@ PROG=	chown
 LINKS=	${BINDIR}/chown /usr/bin/chgrp
 MAN=	chgrp.1 chown.8
 
-WARNS?=	5
-
 .include 
diff --git a/usr.sbin/chroot/Makefile b/usr.sbin/chroot/Makefile
index d28de6668e2..652de797cec 100644
--- a/usr.sbin/chroot/Makefile
+++ b/usr.sbin/chroot/Makefile
@@ -4,6 +4,4 @@
 PROG=	chroot
 MAN=	chroot.8
 
-WARNS?=	2
-
 .include 
diff --git a/usr.sbin/chroot/chroot.c b/usr.sbin/chroot/chroot.c
index cc924a027bc..a0122f777e6 100644
--- a/usr.sbin/chroot/chroot.c
+++ b/usr.sbin/chroot/chroot.c
@@ -61,9 +61,7 @@ char	*group;		/* group to switch to ... */
 char	*grouplist;	/* group list to switch to ... */
 
 int
-main(argc, argv)
-	int argc;
-	char *argv[];
+main(int argc, char *argv[])
 {
 	struct group	*gp;
 	struct passwd	*pw;
@@ -179,7 +177,7 @@ main(argc, argv)
 }
 
 static void
-usage()
+usage(void)
 {
 	(void)fprintf(stderr, "usage: chroot [-g group] [-G group,group,...] "
 	    "[-u user] newroot [command]\n");
diff --git a/usr.sbin/clear_locks/Makefile b/usr.sbin/clear_locks/Makefile
index dace0e16668..00ff3ce95ad 100644
--- a/usr.sbin/clear_locks/Makefile
+++ b/usr.sbin/clear_locks/Makefile
@@ -4,6 +4,5 @@ PROG=	clear_locks
 MAN=	clear_locks.8
 DPADD=	${LIBRPCSVC}
 LDADD=	-lrpcsvc
-WARNS=	6
 
 .include 
diff --git a/usr.sbin/config/Makefile b/usr.sbin/config/Makefile
index ac828818e36..6faf8475e9b 100644
--- a/usr.sbin/config/Makefile
+++ b/usr.sbin/config/Makefile
@@ -9,7 +9,6 @@ SRCS=	config.y main.c lang.l mkmakefile.c mkheaders.c \
 kernconf.c: kernconf.tmpl
 	file2c 'char kernconfstr[] = {' ',0};' < ${.CURDIR}/kernconf.tmpl > kernconf.c
 
-WARNS?=	6
 CFLAGS+= -I. -I${.CURDIR}
 
 DPADD=	${LIBL} ${LIBSBUF}
diff --git a/usr.sbin/config/lang.l b/usr.sbin/config/lang.l
index 075f21f4dfc..c7845cb0416 100644
--- a/usr.sbin/config/lang.l
+++ b/usr.sbin/config/lang.l
@@ -285,7 +285,7 @@ include(const char *fname, int ateof)
  * Terminate the most recent inclusion.
  */
 static int
-endinclude()
+endinclude(void)
 {
 	struct incl *in;
 	int ateof;
diff --git a/usr.sbin/cpucontrol/Makefile b/usr.sbin/cpucontrol/Makefile
index 00e721406ec..a048dd77c3d 100644
--- a/usr.sbin/cpucontrol/Makefile
+++ b/usr.sbin/cpucontrol/Makefile
@@ -4,6 +4,4 @@ PROG=	cpucontrol
 MAN=	cpucontrol.8
 SRCS=	cpucontrol.c intel.c amd.c
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/cpucontrol/cpucontrol.c b/usr.sbin/cpucontrol/cpucontrol.c
index 8b3ca1dad5c..71930801da9 100644
--- a/usr.sbin/cpucontrol/cpucontrol.c
+++ b/usr.sbin/cpucontrol/cpucontrol.c
@@ -83,7 +83,7 @@ struct datadir {
 	const char		*path;
 	SLIST_ENTRY(datadir)	next;
 };
-static SLIST_HEAD(, datadir) datadirs = SLIST_HEAD_INITIALIZER(&datadirs);
+static SLIST_HEAD(, datadir) datadirs = SLIST_HEAD_INITIALIZER(datadirs);
 
 struct ucode_handler {
 	ucode_probe_t *probe;
@@ -102,7 +102,7 @@ static int	do_update(const char *dev);
 static void	datadir_add(const char *path);
 
 static void __dead2
-usage()
+usage(void)
 {
 	const char *name;
 
diff --git a/usr.sbin/cron/cron/Makefile b/usr.sbin/cron/cron/Makefile
index 77ca47a1dc0..d9a1d247d41 100644
--- a/usr.sbin/cron/cron/Makefile
+++ b/usr.sbin/cron/cron/Makefile
@@ -9,4 +9,6 @@ CFLAGS+= -DLOGIN_CAP -DPAM
 DPADD=	${LIBCRON} ${LIBPAM} ${LIBUTIL}
 LDADD=	${LIBCRON} ${MINUSLPAM} -lutil
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/cron/cron/cron.c b/usr.sbin/cron/cron/cron.c
index 101989c45d2..52cdcc8612a 100644
--- a/usr.sbin/cron/cron/cron.c
+++ b/usr.sbin/cron/cron/cron.c
@@ -24,6 +24,7 @@ static const char rcsid[] =
 
 
 #include "cron.h"
+#include 
 #include 
 #if SYS_TIME_H
 # include 
@@ -134,6 +135,9 @@ main(argc, argv)
 		}
 	}
 
+	if (madvise(NULL, 0, MADV_PROTECT) != 0)
+		log_it("CRON", getpid(), "WARNING", "madvise() failed");
+
 	pidfile_write(pfh);
 	database.head = NULL;
 	database.tail = NULL;
diff --git a/usr.sbin/crunch/Makefile.inc b/usr.sbin/crunch/Makefile.inc
index f8ffe675db6..36175b7e525 100644
--- a/usr.sbin/crunch/Makefile.inc
+++ b/usr.sbin/crunch/Makefile.inc
@@ -2,3 +2,5 @@
 
 # modify to taste
 BINDIR?= /usr/bin
+
+WARNS?=	2
diff --git a/usr.sbin/crunch/examples/really-big.conf b/usr.sbin/crunch/examples/really-big.conf
index 45a10de0cf4..ab8a939e613 100644
--- a/usr.sbin/crunch/examples/really-big.conf
+++ b/usr.sbin/crunch/examples/really-big.conf
@@ -27,7 +27,7 @@ progs badsect bim clri disklabel dmesg dump dumpfs fdisk fsck halt
 progs ifconfig init mknod modload modunload mount mount_isofs
 progs mount_lofs mount_msdosfs mount_portalfs mountd
 progs newfs nfsd nfsiod ping quotacheck reboot restore route routed savecore
-progs shutdown slattach swapon ttyflags tunefs umount
+progs shutdown swapon ttyflags tunefs umount
 # shell scripts: fastboot
 
 ln dump rdump
@@ -71,7 +71,7 @@ progs ac accton amd arp bad144 catman chown chroot config config.new cron
 progs dev_mkdb diskpart edquota flcopy gettable grfinfo hilinfo htable inetd
 progs iostat iteconfig kvm_mkdb mtree named portmap pppd
 progs pstat pwd_mkdb quot quotaon rarpd rbootd repquota rmt rpc.bootparamd
-progs rwhod sa sliplogin slstats spray sysctl syslogd tcpdump
+progs rwhod sa spray sysctl syslogd tcpdump
 progs traceroute trpt trsp update vipw vnconfig ypbind yppoll ypset
 
 special amd srcdir /usr/src/usr.sbin/amd/amd
diff --git a/usr.sbin/ctm/ctm/Makefile b/usr.sbin/ctm/ctm/Makefile
index c0cf79a64d9..cc2c9b978e7 100644
--- a/usr.sbin/ctm/ctm/Makefile
+++ b/usr.sbin/ctm/ctm/Makefile
@@ -17,6 +17,8 @@ NOTYET=	ctm_ed.c
 LDADD=	-lmd
 DPADD=	${LIBMD}
 
+WARNS?=	2
+
 .if exists(${.CURDIR}/../../Makefile.inc)
 .include "${.CURDIR}/../../Makefile.inc"
 .endif
diff --git a/usr.sbin/ctm/ctm_dequeue/Makefile b/usr.sbin/ctm/ctm_dequeue/Makefile
index 07a234f0599..18dd52557d4 100644
--- a/usr.sbin/ctm/ctm_dequeue/Makefile
+++ b/usr.sbin/ctm/ctm_dequeue/Makefile
@@ -8,4 +8,6 @@ SRCS=	ctm_dequeue.c error.c
 
 CFLAGS+= -I${.CURDIR}/../ctm_rmail
 
+WARNS?=	1
+
 .include 
diff --git a/usr.sbin/ctm/ctm_rmail/Makefile b/usr.sbin/ctm/ctm_rmail/Makefile
index e2052b9228c..1278ab46fa0 100644
--- a/usr.sbin/ctm/ctm_rmail/Makefile
+++ b/usr.sbin/ctm/ctm_rmail/Makefile
@@ -5,4 +5,6 @@ MLINKS=	ctm_rmail.1 ctm_smail.1 \
 	ctm_rmail.1 ctm_dequeue.1
 SRCS=	ctm_rmail.c error.c
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/ctm/ctm_smail/Makefile b/usr.sbin/ctm/ctm_smail/Makefile
index 980e9bf02d3..15209e42b69 100644
--- a/usr.sbin/ctm/ctm_smail/Makefile
+++ b/usr.sbin/ctm/ctm_smail/Makefile
@@ -8,4 +8,6 @@ SRCS=	ctm_smail.c error.c
 
 CFLAGS+= -I${.CURDIR}/../ctm_rmail
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/daemon/Makefile b/usr.sbin/daemon/Makefile
index 3ca3e91ad19..2def8037f2a 100644
--- a/usr.sbin/daemon/Makefile
+++ b/usr.sbin/daemon/Makefile
@@ -6,6 +6,4 @@ MAN=	daemon.8
 DPADD=	${LIBUTIL}
 LDADD=	-lutil
 
-WARNS?=	2
-
 .include 
diff --git a/usr.sbin/dconschat/Makefile b/usr.sbin/dconschat/Makefile
index 47efe5274be..2836a6678d8 100644
--- a/usr.sbin/dconschat/Makefile
+++ b/usr.sbin/dconschat/Makefile
@@ -8,4 +8,6 @@ CFLAGS+= -I${.CURDIR}/../../sys
 DPADD=  ${LIBKVM}
 LDADD=  -lkvm
 
+WARNS?=	1
+
 .include 
diff --git a/usr.sbin/devinfo/Makefile b/usr.sbin/devinfo/Makefile
index 52e4d6d279e..2a2301bf545 100644
--- a/usr.sbin/devinfo/Makefile
+++ b/usr.sbin/devinfo/Makefile
@@ -3,8 +3,6 @@
 PROG=	devinfo
 MAN=	devinfo.8
 
-WARNS?=	2
-
 DPADD=	${LIBDEVINFO}
 LDADD=	-ldevinfo
 
diff --git a/usr.sbin/devinfo/devinfo.c b/usr.sbin/devinfo/devinfo.c
index c32e57b07b5..73dcfd56448 100644
--- a/usr.sbin/devinfo/devinfo.c
+++ b/usr.sbin/devinfo/devinfo.c
@@ -137,7 +137,7 @@ print_device(struct devinfo_dev *dev, void *arg)
 	struct indent_arg	ia;
 	int			i, indent;
 
-	if (vflag || (dev->dd_name[0] != 0 && dev->dd_state >= DIS_ATTACHED)) {
+	if (vflag || (dev->dd_name[0] != 0 && dev->dd_state >= DS_ATTACHED)) {
 		indent = (int)(intptr_t)arg;
 		for (i = 0; i < indent; i++)
 			printf(" ");
diff --git a/usr.sbin/digictl/Makefile b/usr.sbin/digictl/Makefile
index 029dfee11e5..cb3745b17d1 100644
--- a/usr.sbin/digictl/Makefile
+++ b/usr.sbin/digictl/Makefile
@@ -3,6 +3,4 @@
 PROG=	digictl
 MAN=	digictl.8
 
-WARNS?=	2
-
 .include 
diff --git a/usr.sbin/diskinfo/Makefile b/usr.sbin/diskinfo/Makefile
index 5ffa27f6f0d..b16b9335c25 100644
--- a/usr.sbin/diskinfo/Makefile
+++ b/usr.sbin/diskinfo/Makefile
@@ -3,8 +3,6 @@
 PROG=	diskinfo
 MAN=	diskinfo.8
 
-WARNS?=	5
-
 DPADD=	${LIBUTIL}
 LDADD=	-lutil
 
diff --git a/usr.sbin/diskinfo/diskinfo.8 b/usr.sbin/diskinfo/diskinfo.8
index dfc7040f349..f68d426e6b4 100644
--- a/usr.sbin/diskinfo/diskinfo.8
+++ b/usr.sbin/diskinfo/diskinfo.8
@@ -46,7 +46,8 @@ and optionally runs a naive performance test on the device.
 .Pp
 If given no arguments, the output will be a single line per specified device
 with the following fields: device name, sectorsize, media size in bytes,
-media size in sectors, firmware cylinders, firmware heads, and firmware sectors.
+media size in sectors, stripe size, stripe offset, firmware cylinders,
+firmware heads, and firmware sectors.
 The last three fields are only present if the information is available.
 .Pp
 If given the
diff --git a/usr.sbin/diskinfo/diskinfo.c b/usr.sbin/diskinfo/diskinfo.c
index 7ecf7cb4f32..1f967b732da 100644
--- a/usr.sbin/diskinfo/diskinfo.c
+++ b/usr.sbin/diskinfo/diskinfo.c
@@ -58,7 +58,7 @@ main(int argc, char **argv)
 {
 	int i, ch, fd, error;
 	char buf[BUFSIZ], ident[DISK_IDENT_SIZE];
-	off_t	mediasize;
+	off_t	mediasize, stripesize, stripeoffset;
 	u_int	sectorsize, fwsectors, fwheads;
 
 	while ((ch = getopt(argc, argv, "ctv")) != -1) {
@@ -104,11 +104,19 @@ main(int argc, char **argv)
 		error = ioctl(fd, DIOCGFWHEADS, &fwheads);
 		if (error)
 			fwheads = 0;
+		error = ioctl(fd, DIOCGSTRIPESIZE, &stripesize);
+		if (error)
+			stripesize = 0;
+		error = ioctl(fd, DIOCGSTRIPEOFFSET, &stripeoffset);
+		if (error)
+			stripeoffset = 0;
 		if (!opt_v) {
 			printf("%s", argv[i]);
 			printf("\t%u", sectorsize);
 			printf("\t%jd", (intmax_t)mediasize);
 			printf("\t%jd", (intmax_t)mediasize/sectorsize);
+			printf("\t%jd", (intmax_t)stripesize);
+			printf("\t%jd", (intmax_t)stripeoffset);
 			if (fwsectors != 0 && fwheads != 0) {
 				printf("\t%jd", (intmax_t)mediasize /
 				    (fwsectors * fwheads * sectorsize));
@@ -124,6 +132,8 @@ main(int argc, char **argv)
 			    (intmax_t)mediasize, buf);
 			printf("\t%-12jd\t# mediasize in sectors\n",
 			    (intmax_t)mediasize/sectorsize);
+			printf("\t%-12jd\t# stripesize\n", stripesize);
+			printf("\t%-12jd\t# stripeoffset\n", stripeoffset);
 			if (fwsectors != 0 && fwheads != 0) {
 				printf("\t%-12jd\t# Cylinders according to firmware.\n", (intmax_t)mediasize /
 				    (fwsectors * fwheads * sectorsize));
diff --git a/usr.sbin/dnssec-dsfromkey/Makefile b/usr.sbin/dnssec-dsfromkey/Makefile
index ee7c75e918a..0b57eb530a8 100644
--- a/usr.sbin/dnssec-dsfromkey/Makefile
+++ b/usr.sbin/dnssec-dsfromkey/Makefile
@@ -17,6 +17,8 @@ CFLAGS+=	-I${SRCDIR}/unix/include -I${SRCDIR}/include
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
+WARNS?=		3
+
 MAN=		dnssec-dsfromkey.8
 
 .include 
diff --git a/usr.sbin/dnssec-keyfromlabel/Makefile b/usr.sbin/dnssec-keyfromlabel/Makefile
index a698bffbdc9..fd6a3413034 100644
--- a/usr.sbin/dnssec-keyfromlabel/Makefile
+++ b/usr.sbin/dnssec-keyfromlabel/Makefile
@@ -17,6 +17,8 @@ CFLAGS+=	-I${SRCDIR}/unix/include -I${SRCDIR}/include
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
+WARNS?=		3
+
 MAN=		dnssec-keyfromlabel.8
 
 .include 
diff --git a/usr.sbin/dnssec-keygen/Makefile b/usr.sbin/dnssec-keygen/Makefile
index 3ac90058106..1bdf0c0b080 100644
--- a/usr.sbin/dnssec-keygen/Makefile
+++ b/usr.sbin/dnssec-keygen/Makefile
@@ -17,6 +17,8 @@ CFLAGS+=	-I${SRCDIR}/unix/include -I${SRCDIR}/include
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
+WARNS?=		3
+
 MAN=		dnssec-keygen.8
 
 .include 
diff --git a/usr.sbin/dnssec-signzone/Makefile b/usr.sbin/dnssec-signzone/Makefile
index 7c4ca65a78c..70ddc3e0961 100644
--- a/usr.sbin/dnssec-signzone/Makefile
+++ b/usr.sbin/dnssec-signzone/Makefile
@@ -17,6 +17,8 @@ CFLAGS+=	-I${SRCDIR}/unix/include -I${SRCDIR}/include
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
+WARNS?=		3
+
 MAN=		dnssec-signzone.8
 
 .include 
diff --git a/usr.sbin/dumpcis/Makefile b/usr.sbin/dumpcis/Makefile
index 283de3a5838..7a5a590090d 100644
--- a/usr.sbin/dumpcis/Makefile
+++ b/usr.sbin/dumpcis/Makefile
@@ -5,6 +5,5 @@
 PROG=	dumpcis
 MAN=	dumpcis.8
 SRCS=	main.c readcis.c printcis.c
-WARNS?=	5
 
 .include 
diff --git a/usr.sbin/editmap/Makefile b/usr.sbin/editmap/Makefile
index 93e3e071222..92d8392bf1f 100644
--- a/usr.sbin/editmap/Makefile
+++ b/usr.sbin/editmap/Makefile
@@ -10,6 +10,8 @@ MAN=	editmap.8
 CFLAGS+= -I${SENDMAIL_DIR}/src -I${SENDMAIL_DIR}/include -I.
 CFLAGS+= -DNEWDB -DNOT_SENDMAIL
 
+WARNS?=	2
+
 LIBSMDIR=	${.OBJDIR}/../../lib/libsm
 LIBSM=		${LIBSMDIR}/libsm.a
 
diff --git a/usr.sbin/edquota/Makefile b/usr.sbin/edquota/Makefile
index e5a3b12559a..b8c35ae5ce3 100644
--- a/usr.sbin/edquota/Makefile
+++ b/usr.sbin/edquota/Makefile
@@ -4,6 +4,4 @@
 PROG=	edquota
 MAN=	edquota.8
 
-WARNS?=	4
-
 .include 
diff --git a/usr.sbin/eeprom/Makefile b/usr.sbin/eeprom/Makefile
index fa5f411d442..61b48a2aab6 100644
--- a/usr.sbin/eeprom/Makefile
+++ b/usr.sbin/eeprom/Makefile
@@ -6,7 +6,6 @@ PROG=	eeprom
 MAN=	eeprom.8
 MANSUBDIR= /sparc64
 SRCS=	eeprom.c ofw_options.c ofw_util.c
-WARNS?=	6
 CFLAGS+= -I${.CURDIR}/../ofwdump
 
 .include 
diff --git a/usr.sbin/eeprom/eeprom.c b/usr.sbin/eeprom/eeprom.c
index ecd9267a033..64018585bc7 100644
--- a/usr.sbin/eeprom/eeprom.c
+++ b/usr.sbin/eeprom/eeprom.c
@@ -146,7 +146,7 @@ action(char *line)
 }
 
 static void
-dump_config()
+dump_config(void)
 {
 
 	ofwo_dump();
diff --git a/usr.sbin/extattr/Makefile b/usr.sbin/extattr/Makefile
index ae349752d68..8e2b5f78e46 100644
--- a/usr.sbin/extattr/Makefile
+++ b/usr.sbin/extattr/Makefile
@@ -11,6 +11,4 @@ MLINKS+=	rmextattr.8 setextattr.8
 MLINKS+=	rmextattr.8 getextattr.8
 MLINKS+=	rmextattr.8 lsextattr.8
 
-WARNS?=	5
-
 .include 
diff --git a/usr.sbin/extattrctl/Makefile b/usr.sbin/extattrctl/Makefile
index 5eb1945d3b9..496a8aa8c7c 100644
--- a/usr.sbin/extattrctl/Makefile
+++ b/usr.sbin/extattrctl/Makefile
@@ -3,6 +3,4 @@
 PROG=	extattrctl
 MAN=	extattrctl.8
 
-WARNS?=	2
-
 .include 
diff --git a/usr.sbin/extattrctl/extattrctl.c b/usr.sbin/extattrctl/extattrctl.c
index 103fcd345a9..1929f796f4f 100644
--- a/usr.sbin/extattrctl/extattrctl.c
+++ b/usr.sbin/extattrctl/extattrctl.c
@@ -54,7 +54,7 @@ long num_inodes_by_path(char *path);
 void usage(void);
 
 void
-usage()
+usage(void)
 {
 
 	fprintf(stderr,
diff --git a/usr.sbin/faithd/Makefile b/usr.sbin/faithd/Makefile
index e1898ed333a..dec45b9645b 100644
--- a/usr.sbin/faithd/Makefile
+++ b/usr.sbin/faithd/Makefile
@@ -20,4 +20,6 @@ SRCS=	faithd.c tcp.c ftp.c prefix.c
 
 CFLAGS+= -DHAVE_POLL_H
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/faithd/faithd.c b/usr.sbin/faithd/faithd.c
index f192fbd3d3b..9caf0e9f8f3 100644
--- a/usr.sbin/faithd/faithd.c
+++ b/usr.sbin/faithd/faithd.c
@@ -791,7 +791,7 @@ exit_success(const char *fmt, ...)
 
 #ifdef USE_ROUTE
 static void
-grab_myaddrs()
+grab_myaddrs(void)
 {
 	struct ifaddrs *ifap, *ifa;
 	struct myaddrs *p;
@@ -847,7 +847,7 @@ grab_myaddrs()
 }
 
 static void
-free_myaddrs()
+free_myaddrs(void)
 {
 	struct myaddrs *p, *q;
 
@@ -861,7 +861,7 @@ free_myaddrs()
 }
 
 static void
-update_myaddrs()
+update_myaddrs(void)
 {
 	char msg[BUFSIZ];
 	int len;
@@ -900,7 +900,7 @@ update_myaddrs()
 #endif /*USE_ROUTE*/
 
 static void
-usage()
+usage(void)
 {
 	fprintf(stderr, "usage: %s [-dp] [-f conf] service [serverpath [serverargs]]\n",
 		faithdname);
diff --git a/usr.sbin/fdcontrol/Makefile b/usr.sbin/fdcontrol/Makefile
index e2b54aa0670..5f1426b18ba 100644
--- a/usr.sbin/fdcontrol/Makefile
+++ b/usr.sbin/fdcontrol/Makefile
@@ -4,7 +4,6 @@
 
 PROG=	fdcontrol
 SRCS=	fdcontrol.c fdutil.c
-WARNS?=	6
 CFLAGS+= -I${.CURDIR}/../fdread
 MAN=	fdcontrol.8
 
diff --git a/usr.sbin/fdformat/Makefile b/usr.sbin/fdformat/Makefile
index a172811ec05..59cd124f50d 100644
--- a/usr.sbin/fdformat/Makefile
+++ b/usr.sbin/fdformat/Makefile
@@ -5,7 +5,6 @@
 PROG=	fdformat
 SRCS=	fdformat.c fdutil.c
 
-WARNS?=	6
 CFLAGS+= -I${.CURDIR}/../fdread
 
 .if ${MACHINE} == "pc98"
diff --git a/usr.sbin/fdread/Makefile b/usr.sbin/fdread/Makefile
index 2868a3c38f0..e99c6205c4c 100644
--- a/usr.sbin/fdread/Makefile
+++ b/usr.sbin/fdread/Makefile
@@ -3,8 +3,6 @@
 PROG=	fdread
 SRCS=	fdread.c fdutil.c
 
-WARNS?=	6
-
 .if ${MACHINE} == "pc98"
 CFLAGS+= -DPC98
 .endif
diff --git a/usr.sbin/fdwrite/Makefile b/usr.sbin/fdwrite/Makefile
index ba6f047ff16..b97bdd44482 100644
--- a/usr.sbin/fdwrite/Makefile
+++ b/usr.sbin/fdwrite/Makefile
@@ -8,6 +8,5 @@
 # $FreeBSD$
 
 PROG=	fdwrite
-WARNS?=	6
 
 .include 
diff --git a/usr.sbin/fifolog/Makefile.inc b/usr.sbin/fifolog/Makefile.inc
index 7fb2a9e805c..5ec27ddb424 100644
--- a/usr.sbin/fifolog/Makefile.inc
+++ b/usr.sbin/fifolog/Makefile.inc
@@ -2,8 +2,6 @@
 
 LIBFIFOLOG= ${.OBJDIR}/../lib/libfifolog.a
 
-WARNS?=	6
-
 #LINT=	flint
 #LINTFLAGS= ${.CURDIR}/../flint.lnt -I/usr/include
 
diff --git a/usr.sbin/fifolog/fifolog_writer/fifolog_writer.c b/usr.sbin/fifolog/fifolog_writer/fifolog_writer.c
index fd107115711..346297faa06 100644
--- a/usr.sbin/fifolog/fifolog_writer/fifolog_writer.c
+++ b/usr.sbin/fifolog/fifolog_writer/fifolog_writer.c
@@ -42,7 +42,7 @@
 static void
 usage(void)
 {
-	fprintf(stderr, "fifolog_writer [-w write-rate] [-s sync-rate] "
+	fprintf(stderr, "Usage: fifolog_writer [-w write-rate] [-s sync-rate] "
 	    "[-z compression] file\n");
 	exit(EX_USAGE);
 }
diff --git a/usr.sbin/fifolog/lib/getdate.y b/usr.sbin/fifolog/lib/getdate.y
index 93b5b6b4ed9..8e63e811299 100644
--- a/usr.sbin/fifolog/lib/getdate.y
+++ b/usr.sbin/fifolog/lib/getdate.y
@@ -762,7 +762,7 @@ LookupWord(char *buff)
 
 
 static int
-yylex()
+yylex(void)
 {
     char	c;
     char	*p;
diff --git a/usr.sbin/freebsd-update/freebsd-update.sh b/usr.sbin/freebsd-update/freebsd-update.sh
index 372add235b0..e1453c67d6d 100644
--- a/usr.sbin/freebsd-update/freebsd-update.sh
+++ b/usr.sbin/freebsd-update/freebsd-update.sh
@@ -603,6 +603,7 @@ fetch_check_params () {
 		echo ${WORKDIR}
 		exit 1
 	fi
+	chmod 700 ${WORKDIR}
 	cd ${WORKDIR} || exit 1
 
 	# Generate release number.  The s/SECURITY/RELEASE/ bit exists
diff --git a/usr.sbin/ftp-proxy/libevent/Makefile b/usr.sbin/ftp-proxy/libevent/Makefile
index acc546fe606..a8ff09b9ba5 100644
--- a/usr.sbin/ftp-proxy/libevent/Makefile
+++ b/usr.sbin/ftp-proxy/libevent/Makefile
@@ -22,4 +22,6 @@ CFLAGS+= -I${.CURDIR} \
 	-DHAVE_WORKING_KQUEUE \
 	-DVERSION='"1.3b"'
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/getfmac/Makefile b/usr.sbin/getfmac/Makefile
index ad496570afd..f9fa1b2e446 100644
--- a/usr.sbin/getfmac/Makefile
+++ b/usr.sbin/getfmac/Makefile
@@ -3,6 +3,4 @@
 PROG=   getfmac
 MAN=	getfmac.8
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/getpmac/Makefile b/usr.sbin/getpmac/Makefile
index 87e6d28889c..59747286652 100644
--- a/usr.sbin/getpmac/Makefile
+++ b/usr.sbin/getpmac/Makefile
@@ -3,6 +3,4 @@
 PROG=   getpmac
 MAN=	getpmac.8
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/gstat/Makefile b/usr.sbin/gstat/Makefile
index a02cf4658f2..2a6da4089af 100644
--- a/usr.sbin/gstat/Makefile
+++ b/usr.sbin/gstat/Makefile
@@ -2,7 +2,6 @@
 
 PROG=	gstat
 MAN=	gstat.8
-WARNS?=	5
 DPADD=	${LIBDEVSTAT} ${LIBKVM} ${LIBGEOM} ${LIBBSDXML} ${LIBSBUF} ${LIBEDIT} ${LIBCURSES}
 LDADD=	-ldevstat -lkvm -lgeom -lbsdxml -lsbuf -ledit -lcurses
 
diff --git a/usr.sbin/inetd/Makefile b/usr.sbin/inetd/Makefile
index 35f2c222e58..29aacd1813d 100644
--- a/usr.sbin/inetd/Makefile
+++ b/usr.sbin/inetd/Makefile
@@ -8,7 +8,7 @@ MAN=	inetd.8
 MLINKS=	inetd.8 inetd.conf.5
 SRCS=	inetd.c builtins.c
 
-WARNS?=	2
+WARNS?=	3
 CFLAGS+= -DLOGIN_CAP
 #CFLAGS+= -DSANITY_CHECK
 
diff --git a/usr.sbin/inetd/inetd.c b/usr.sbin/inetd/inetd.c
index 6bcbac61bad..0a39fdf7f64 100644
--- a/usr.sbin/inetd/inetd.c
+++ b/usr.sbin/inetd/inetd.c
@@ -110,6 +110,7 @@ __FBSDID("$FreeBSD$");
  */
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -497,6 +498,9 @@ main(int argc, char **argv)
 		}
 	}
 
+	if (madvise(NULL, 0, MADV_PROTECT) != 0)
+		syslog(LOG_WARNING, "madvise() failed: %s", strerror(errno));
+
 	for (i = 0; i < PERIPSIZE; ++i)
 		LIST_INIT(&proctable[i]);
 
@@ -1393,8 +1397,7 @@ setsockopt(fd, SOL_SOCKET, opt, (char *)&on, sizeof (on))
 
 #ifdef IPSEC
 void
-ipsecsetup(sep)
-	struct servtab *sep;
+ipsecsetup(struct servtab *sep)
 {
 	char *buf;
 	char *policy_in = NULL;
diff --git a/usr.sbin/iostat/Makefile b/usr.sbin/iostat/Makefile
index 558b09bbd6c..9fd4809a545 100644
--- a/usr.sbin/iostat/Makefile
+++ b/usr.sbin/iostat/Makefile
@@ -7,4 +7,6 @@ MAN=	iostat.8
 DPADD=	${LIBDEVSTAT} ${LIBKVM} ${LIBM}
 LDADD=	-ldevstat -lkvm -lm
 
+WARNS?=	1
+
 .include 
diff --git a/usr.sbin/ip6addrctl/Makefile b/usr.sbin/ip6addrctl/Makefile
index cd2510eb0e1..93a299056f9 100644
--- a/usr.sbin/ip6addrctl/Makefile
+++ b/usr.sbin/ip6addrctl/Makefile
@@ -3,4 +3,6 @@
 PROG=	ip6addrctl
 MAN=	ip6addrctl.8
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/ipfwpcap/Makefile b/usr.sbin/ipfwpcap/Makefile
index 5615eb1d464..d16f888c67a 100644
--- a/usr.sbin/ipfwpcap/Makefile
+++ b/usr.sbin/ipfwpcap/Makefile
@@ -11,8 +11,6 @@ DPADD=	${LIBPCAP}
 
 MAN=	ipfwpcap.8
 
-WARNS?=	6
-
 .include 
 
 test:	$(CMD)
diff --git a/usr.sbin/jail/Makefile b/usr.sbin/jail/Makefile
index 74fd6c47b1e..de35dcf248f 100644
--- a/usr.sbin/jail/Makefile
+++ b/usr.sbin/jail/Makefile
@@ -7,8 +7,6 @@ MAN=	jail.8
 DPADD=	${LIBJAIL} ${LIBUTIL}
 LDADD=	-ljail -lutil
 
-WARNS?=	6
-
 .if ${MK_INET6_SUPPORT} != "no"
 CFLAGS+= -DINET6
 .endif
diff --git a/usr.sbin/jail/jail.8 b/usr.sbin/jail/jail.8
index 4c1a963a7b0..3fc4a4b7125 100644
--- a/usr.sbin/jail/jail.8
+++ b/usr.sbin/jail/jail.8
@@ -561,7 +561,7 @@ or for running a virtual server.
 Start a shell in the jail:
 .Pp
 .Bd -literal -offset indent
-jail path=/data/jail/192.0.2.100 host.hostname=testhostname \\
+jail -c path=/data/jail/192.0.2.100 host.hostname=testhostname \\
 	ip4.addr=192.0.2.100 command=/bin/sh
 .Ed
 .Pp
@@ -636,7 +636,7 @@ script from within the jail.
 .Bd -literal -offset indent
 ifconfig ed0 inet alias 192.0.2.100/32
 mount -t procfs proc /data/jail/192.0.2.100/proc
-jail path=/data/jail/192.0.2.100 host.hostname=testhostname \\
+jail -c path=/data/jail/192.0.2.100 host.hostname=testhostname \\
 	ip4.addr=192.0.2.100 command=/bin/sh /etc/rc
 .Ed
 .Pp
diff --git a/usr.sbin/jexec/Makefile b/usr.sbin/jexec/Makefile
index d55ea0fc117..7a2e6821e42 100644
--- a/usr.sbin/jexec/Makefile
+++ b/usr.sbin/jexec/Makefile
@@ -4,6 +4,5 @@ PROG=	jexec
 MAN=	jexec.8
 DPADD=	${LIBJAIL} ${LIBUTIL}
 LDADD=	-ljail -lutil
-WARNS?=	6
 
 .include 
diff --git a/usr.sbin/jls/Makefile b/usr.sbin/jls/Makefile
index 2d02c560ac4..e1157afbca1 100644
--- a/usr.sbin/jls/Makefile
+++ b/usr.sbin/jls/Makefile
@@ -5,6 +5,4 @@ MAN=	jls.8
 DPADD=	${LIBJAIL}
 LDADD=	-ljail
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/jls/jls.c b/usr.sbin/jls/jls.c
index 0661ee3fa43..3f4800cb5a4 100644
--- a/usr.sbin/jls/jls.c
+++ b/usr.sbin/jls/jls.c
@@ -425,11 +425,6 @@ print_jail(int pflags, int jflags)
 			if (params[i].jp_flags & JP_USER)
 				free(param_values[i]);
 	}
-	for (i = 0; i < nparams; i++)
-		if (!(params[i].jp_flags & JP_RAWVALUE)) {
-			free(params[i].jp_value);
-			params[i].jp_value = NULL;
-		}
 	return (jid);
 }
 
diff --git a/usr.sbin/kbdcontrol/kbdcontrol.c b/usr.sbin/kbdcontrol/kbdcontrol.c
index 5d20b163730..280faa1df2e 100644
--- a/usr.sbin/kbdcontrol/kbdcontrol.c
+++ b/usr.sbin/kbdcontrol/kbdcontrol.c
@@ -1148,7 +1148,7 @@ mux_keyboard(u_int op, char *kbd)
 }
 
 void
-usage()
+usage(void)
 {
 	fprintf(stderr, "%s\n%s\n%s\n",
 "usage: kbdcontrol [-dFKix] [-A name] [-a name] [-b duration.pitch | [quiet.]belltype]",
diff --git a/usr.sbin/kernbb/Makefile b/usr.sbin/kernbb/Makefile
index 7da462b4f3b..f3bf37cfa66 100644
--- a/usr.sbin/kernbb/Makefile
+++ b/usr.sbin/kernbb/Makefile
@@ -8,6 +8,5 @@ LDADD=	-lkvm
 
 CFLAGS+= -I${.CURDIR}/../../contrib/gcc
 
-WARNS?=	3
 .include 
 
diff --git a/usr.sbin/lastlogin/Makefile b/usr.sbin/lastlogin/Makefile
index 017aadf2772..4c65ab99ad3 100644
--- a/usr.sbin/lastlogin/Makefile
+++ b/usr.sbin/lastlogin/Makefile
@@ -3,6 +3,7 @@
 PROG=	lastlogin
 MAN=	lastlogin.8
 
-WARNS?=	2
+DPADD=	${LIBULOG}
+LDADD=	-lulog
 
 .include 
diff --git a/usr.sbin/lastlogin/lastlogin.c b/usr.sbin/lastlogin/lastlogin.c
index 21c82c3636d..d0a9b4da51a 100644
--- a/usr.sbin/lastlogin/lastlogin.c
+++ b/usr.sbin/lastlogin/lastlogin.c
@@ -36,98 +36,71 @@ __RCSID("$FreeBSD$");
 __RCSID("$NetBSD: lastlogin.c,v 1.4 1998/02/03 04:45:35 perry Exp $");
 #endif
 
-#include 
 #include 
 #include 
 #include 
 #include 
 #include 
-#include 
-#include 
+#include 
 #include 
 
-static	const char *logfile = _PATH_LASTLOG;
-
 	int	main(int, char **);
-static	void	output(struct passwd *, struct lastlog *);
+static	void	output(struct ulog_utmpx *);
 static	void	usage(void);
 
 int
-main(argc, argv)
-	int argc;
-	char *argv[];
+main(int argc, char *argv[])
 {
 	int	ch, i;
-	FILE	*fp;
-	struct passwd	*passwd;
-	struct lastlog	last;
+	struct ulog_utmpx *u;
 
 	while ((ch = getopt(argc, argv, "")) != -1) {
 		usage();
 	}
 
-	fp = fopen(logfile, "r");
-	if (fp == NULL)
-		err(1, "%s", logfile);
+	if (ulog_setutxfile(UTXI_USER, NULL) != 0)
+		errx(1, "failed to open lastlog database");
 
 	setpassent(1);	/* Keep passwd file pointers open */
 
 	/* Process usernames given on the command line. */
 	if (argc > 1) {
-		long offset;
 		for (i = 1; i < argc; ++i) {
-			if ((passwd = getpwnam(argv[i])) == NULL) {
+			if ((u = ulog_getutxuser(argv[i])) == NULL) {
 				warnx("user '%s' not found", argv[i]);
 				continue;
 			}
-			/* Calculate the offset into the lastlog file. */
-			offset = (long)(passwd->pw_uid * sizeof(last));
-			if (fseek(fp, offset, SEEK_SET)) {
-				warn("fseek error");
-				continue;
-			}
-			if (fread(&last, sizeof(last), 1, fp) != 1) {
-				warnx("fread error on '%s'", passwd->pw_name);
-				clearerr(fp);
-				continue;
-			}
-			output(passwd, &last);
+			output(u);
 		}
 	}
 	/* Read all lastlog entries, looking for active ones */
 	else {
-		for (i = 0; fread(&last, sizeof(last), 1, fp) == 1; i++) {
-			if (last.ll_time == 0)
+		while ((u = ulog_getutxent()) != NULL) {
+			if (u->ut_type != USER_PROCESS)
 				continue;
-			if ((passwd = getpwuid((uid_t)i)) != NULL)
-				output(passwd, &last);
+			output(u);
 		}
-		if (ferror(fp))
-			warnx("fread error");
 	}
 
 	setpassent(0);	/* Close passwd file pointers */
 
-	fclose(fp);
+	ulog_endutxent();
 	exit(0);
 }
 
 /* Duplicate the output of last(1) */
 static void
-output(p, l)
-	struct passwd *p;
-	struct lastlog *l;
+output(struct ulog_utmpx *u)
 {
-	time_t t = _int_to_time(l->ll_time);
-	printf("%-*.*s  %-*.*s %-*.*s   %s",
-		UT_NAMESIZE, UT_NAMESIZE, p->pw_name,
-		UT_LINESIZE, UT_LINESIZE, l->ll_line,
-		UT_HOSTSIZE, UT_HOSTSIZE, l->ll_host,
-		(l->ll_time) ? ctime(&t) : "Never logged in\n");
+	time_t t = u->ut_tv.tv_sec;
+
+	printf("%-16s  %-8s %-16s   %s",
+		u->ut_user, u->ut_line, u->ut_host,
+		(u->ut_type == USER_PROCESS) ? ctime(&t) : "Never logged in\n");
 }
 
 static void
-usage()
+usage(void)
 {
 	fprintf(stderr, "usage: lastlogin [user ...]\n");
 	exit(1);
diff --git a/usr.sbin/lmcconfig/Makefile b/usr.sbin/lmcconfig/Makefile
index b75ec2c8ce8..842431acccc 100644
--- a/usr.sbin/lmcconfig/Makefile
+++ b/usr.sbin/lmcconfig/Makefile
@@ -6,4 +6,6 @@ MAN=	lmcconfig.8
 DPADD=	${LIBNETGRAPH}
 LDADD=	-lnetgraph
 
+WARNS?=	0
+
 .include 
diff --git a/usr.sbin/lpr/common_source/Makefile b/usr.sbin/lpr/common_source/Makefile
index 14db0b77b79..4f148f9d4c4 100644
--- a/usr.sbin/lpr/common_source/Makefile
+++ b/usr.sbin/lpr/common_source/Makefile
@@ -10,4 +10,6 @@ INTERNALLIB=
 SRCS=		common.c ctlinfo.c displayq.c matchjobs.c net.c \
 		printcap.c request.c rmjob.c startdaemon.c
 
+WARNS?=		1
+
 .include 
diff --git a/usr.sbin/lpr/common_source/lp.h b/usr.sbin/lpr/common_source/lp.h
index 891ed2f1bda..63f2ff1a477 100644
--- a/usr.sbin/lpr/common_source/lp.h
+++ b/usr.sbin/lpr/common_source/lp.h
@@ -280,7 +280,7 @@ void	 inform(const struct printer *_pp, char *_cf);
 void	 init_printer(struct printer *_pp);
 void	 init_request(struct request *_rp);
 int	 inlist(char *_uname, char *_cfile);
-int	 iscf(struct dirent *_d);
+int	 iscf(const struct dirent *_d);
 void	 ldump(const char *_nfile, const char *_datafile, int _copies);
 void	 lastprinter(void);
 int	 lockchk(struct printer *_pp, char *_slockf);
diff --git a/usr.sbin/lpr/common_source/rmjob.c b/usr.sbin/lpr/common_source/rmjob.c
index d6fd6148ccd..33fcdacc4da 100644
--- a/usr.sbin/lpr/common_source/rmjob.c
+++ b/usr.sbin/lpr/common_source/rmjob.c
@@ -384,7 +384,7 @@ rmremote(const struct printer *pp)
  * Return 1 if the filename begins with 'cf'
  */
 int
-iscf(struct dirent *d)
+iscf(const struct dirent *d)
 {
 	return(d->d_name[0] == 'c' && d->d_name[1] == 'f');
 }
diff --git a/usr.sbin/lpr/filters.ru/Makefile.inc b/usr.sbin/lpr/filters.ru/Makefile.inc
index a312e73941e..36a6f464130 100644
--- a/usr.sbin/lpr/filters.ru/Makefile.inc
+++ b/usr.sbin/lpr/filters.ru/Makefile.inc
@@ -1,3 +1,5 @@
 # $FreeBSD$
 
 BINDIR=	/usr/libexec/lpr/ru
+
+WARNS?=	3
diff --git a/usr.sbin/lpr/lpc/Makefile b/usr.sbin/lpr/lpc/Makefile
index f050857dd03..35fa52ab138 100644
--- a/usr.sbin/lpr/lpc/Makefile
+++ b/usr.sbin/lpr/lpc/Makefile
@@ -11,6 +11,8 @@ BINMODE= 2555
 
 CFLAGS+= -I${.CURDIR}/../common_source
 
+WARNS?=	0
+
 DPADD=	${LIBLPR} ${LIBEDIT} ${LIBTERMCAP}
 LDADD=	${LIBLPR} -ledit -ltermcap
 
diff --git a/usr.sbin/lpr/lpd/Makefile b/usr.sbin/lpr/lpd/Makefile
index 9af36556604..0d7d93ef79d 100644
--- a/usr.sbin/lpr/lpd/Makefile
+++ b/usr.sbin/lpr/lpd/Makefile
@@ -7,6 +7,8 @@ SRCS=	lpd.c printjob.c recvjob.c lpdchar.c modes.c
 
 CFLAGS+= -I${.CURDIR}/../common_source
 
+WARNS?=	1
+
 DPADD=	${LIBLPR}
 LDADD=	${LIBLPR}
 
diff --git a/usr.sbin/lpr/lpr/Makefile b/usr.sbin/lpr/lpr/Makefile
index 1ff376de4cd..1894b0089c0 100644
--- a/usr.sbin/lpr/lpr/Makefile
+++ b/usr.sbin/lpr/lpr/Makefile
@@ -13,6 +13,8 @@ BINMODE= 6555
 
 CFLAGS+= -I${.CURDIR}/../common_source
 
+WARNS?=	2
+
 DPADD=	${LIBLPR}
 LDADD=	${LIBLPR}
 
diff --git a/usr.sbin/lptcontrol/Makefile b/usr.sbin/lptcontrol/Makefile
index 3f7a939a7e1..0cff6202faf 100644
--- a/usr.sbin/lptcontrol/Makefile
+++ b/usr.sbin/lptcontrol/Makefile
@@ -3,6 +3,4 @@
 PROG=	lptcontrol
 MAN=	lptcontrol.8
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/mailstats/Makefile b/usr.sbin/mailstats/Makefile
index 86137b09c69..bd72fc6c5b7 100644
--- a/usr.sbin/mailstats/Makefile
+++ b/usr.sbin/mailstats/Makefile
@@ -11,6 +11,8 @@ MAN=	mailstats.8
 CFLAGS+= -I${SENDMAIL_DIR}/src -I${SENDMAIL_DIR}/include -I.
 CFLAGS+= -DNOT_SENDMAIL
 
+WARNS?=	2
+
 LIBSMDIR=	${.OBJDIR}/../../lib/libsm
 LIBSM=		${LIBSMDIR}/libsm.a
 
diff --git a/usr.sbin/mailwrapper/Makefile b/usr.sbin/mailwrapper/Makefile
index 252f5e77241..3f305f773e7 100644
--- a/usr.sbin/mailwrapper/Makefile
+++ b/usr.sbin/mailwrapper/Makefile
@@ -8,7 +8,6 @@ MAN=	mailwrapper.8
 
 DPADD=	${LIBUTIL}
 LDADD=	-lutil
-WARNS?=	6
 .endif
 
 .if ${MK_MAILWRAPPER} != "no" || ${MK_SENDMAIL} != "no"
diff --git a/usr.sbin/makemap/Makefile b/usr.sbin/makemap/Makefile
index 5d30c67ae63..80cafcbcfdb 100644
--- a/usr.sbin/makemap/Makefile
+++ b/usr.sbin/makemap/Makefile
@@ -11,6 +11,8 @@ MAN=	makemap.8
 CFLAGS+= -I${SENDMAIL_DIR}/src -I${SENDMAIL_DIR}/include -I.
 CFLAGS+= -DNEWDB -DNOT_SENDMAIL
 
+WARNS?=	2
+
 LIBSMDIR=	${.OBJDIR}/../../lib/libsm
 LIBSM=		${LIBSMDIR}/libsm.a
 
diff --git a/usr.sbin/memcontrol/Makefile b/usr.sbin/memcontrol/Makefile
index 25009dbb478..d465d531a3e 100644
--- a/usr.sbin/memcontrol/Makefile
+++ b/usr.sbin/memcontrol/Makefile
@@ -2,6 +2,5 @@
 
 PROG=	memcontrol
 MAN=	memcontrol.8
-WARNS?=	6
 
 .include 
diff --git a/usr.sbin/mergemaster/mergemaster.8 b/usr.sbin/mergemaster/mergemaster.8
index 2bff4be2e4a..6c80350c34f 100644
--- a/usr.sbin/mergemaster/mergemaster.8
+++ b/usr.sbin/mergemaster/mergemaster.8
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 18, 2009
+.Dd December 30, 2009
 .Dt MERGEMASTER 8
 .Os
 .Sh NAME
@@ -61,10 +61,10 @@ down, populating that environment with the various
 files.
 You can specify a different source directory
 with the
-.Op Fl m
+.Fl m
 command line option, or specify the destination
 directory with the
-.Op Fl D
+.Fl D
 option.
 It then compares each file in that environment
 to its installed counterpart.
@@ -91,10 +91,10 @@ compares the files themselves.
 You can
 also specify that the script ignore the Id strings and
 compare every file with the
-.Op Fl s
+.Fl s
 option.
 Using the
-.Op Fl F
+.Fl F
 option
 .Nm
 will install the new file for you if they differ only by
@@ -126,7 +126,7 @@ installing an updated version of this file you should
 probably run
 .Xr pwd_mkdb 8
 with the
-.Op Fl p
+.Fl p
 option to rebuild your password databases
 and recreate
 .Pa /etc/passwd .
@@ -198,11 +198,13 @@ If the
 directory exists, it creates a new one in a previously
 non-existent directory.
 This option unsets the verbose flag,
-but is compatible with all other options.
+but other than
+.Fl U
+it is compatible with all other options.
 Setting
-.Op Fl a
+.Fl a
 makes
-.Op Fl w
+.Fl w
 superfluous.
 .It Fl h
 Display usage and help information.
@@ -253,7 +255,7 @@ instead of the default
 Add the date and time to the name of the temporary
 root directory.
 If
-.Op Fl t
+.Fl t
 is specified, this option must
 follow it if you want the date added too.
 .It Fl u Ar N
@@ -320,44 +322,44 @@ with all values commented out:
 # These are options for mergemaster, with their default values listed
 # The following options have command line overrides
 #
-# The target architecture (unset by default)
+# The target architecture (-A, unset by default)
 #ARCHSTRING='TARGET_ARCH='
 #
-# Sourcedir is the directory to do the 'make' in (where the new files are)
+# Sourcedir is the directory to do the 'make' in (-m)
 #SOURCEDIR='/usr/src'
 #
-# Directory to install the temporary root environment into
+# Directory to install the temporary root environment into (-t)
 #TEMPROOT='/var/tmp/temproot'
 #
-# Specify the destination directory for the installed files
+# Specify the destination directory for the installed files (-D)
 #DESTDIR=
 #
-# Strict comparison skips the VCS Id test and compares every file
+# Strict comparison skips the VCS Id test and compares every file (-s)
 #STRICT=no
 #
-# Type of diff, such as unified, context, etc.
+# Type of diff, such as unified, context, etc. (-c)
 #DIFF_FLAG='-u'
 #
-# Install the new file if it differs only by VCS Id ($FreeBSD)
+# Install the new file if it differs only by VCS Id ($FreeBSD, -F)
 #FREEBSD_ID=
 #
-# Verbose mode includes more details and additional checks
+# Verbose mode includes more details and additional checks (-v)
 #VERBOSE=
 #
-# Automatically install files that do not exist on the system already
+# Automatically install files that do not exist on the system already (-i)
 #AUTO_INSTALL=
 #
-# Automatically upgrade files that have not been user modified
+# Automatically upgrade files that have not been user modified (-U)
 #AUTO_UPGRADE=
 #
-# Compare /etc/rc.conf[.local] to /etc/defaults/rc.conf
-#COMP_CONFS=yes
+# Compare /etc/rc.conf[.local] to /etc/defaults/rc.conf (-C)
+#COMP_CONFS=
 #
-# Preserve files that you replace
-#PRESERVE_FILES=yes
+# Preserve files that you replace (-P)
+#PRESERVE_FILES=
 #PRESERVE_FILES_DIR=/var/tmp/mergemaster/preserved-files-`date +%y%m%d-%H%M%S`
 #
-# The umask for mergemaster to compare the default file's modes to
+# The umask for mergemaster to compare the default file's modes to (-u)
 #NEW_UMASK=022
 #
 # The following options have no command line overrides
@@ -377,6 +379,9 @@ with all values commented out:
 # If you set 'yes' above, make sure to include the PATH to your pager
 #PATH=/bin:/usr/bin:/usr/sbin
 #
+# Delete stale files in /etc/rc.d without prompting
+#DELETE_STALE_RC_FILES=
+#
 # Specify the path to scripts to run before the comparison starts,
 # and/or after the script has finished its work
 #MM_PRE_COMPARE_SCRIPT=
diff --git a/usr.sbin/mergemaster/mergemaster.sh b/usr.sbin/mergemaster/mergemaster.sh
index 4d2ffc09056..acc7b3b2d1c 100755
--- a/usr.sbin/mergemaster/mergemaster.sh
+++ b/usr.sbin/mergemaster/mergemaster.sh
@@ -263,7 +263,7 @@ fi
 
 # Assign the location of the mtree database
 #
-MTREEDB=${MTREEDB:-/var/db}
+MTREEDB=${MTREEDB:-${DESTDIR}/var/db}
 MTREEFILE="${MTREEDB}/mergemaster.mtree"
 
 # Check the command line options
@@ -345,18 +345,24 @@ done
 # Don't force the user to set this in the mergemaster rc file
 if [ -n "${PRESERVE_FILES}" -a -z "${PRESERVE_FILES_DIR}" ]; then
   PRESERVE_FILES_DIR=/var/tmp/mergemaster/preserved-files-`date +%y%m%d-%H%M%S`
+  mkdir -p ${PRESERVE_FILES_DIR}
 fi
 
 # Check for the mtree database in DESTDIR
 case "${AUTO_UPGRADE}" in
 '') ;;	# If the option is not set no need to run the test or warn the user
 *)
-  if [ ! -s "${DESTDIR}${MTREEFILE}" ]; then
+  if [ ! -s "${MTREEFILE}" ]; then
     echo ''
-    echo "*** Unable to find mtree database. Skipping auto-upgrade on this run."
+    echo "*** Unable to find mtree database (${MTREEFILE})."
+    echo "    Skipping auto-upgrade on this run."
     echo "    It will be created for the next run when this one is complete."
     echo ''
-    press_to_continue
+    case "${AUTO_RUN}" in
+    '')
+      press_to_continue
+      ;;
+    esac
     unset AUTO_UPGRADE
   fi
   ;;
@@ -463,9 +469,9 @@ MM_MAKE="make ${ARCHSTRING} -m ${SOURCEDIR}/share/mk"
 # Check DESTDIR against the mergemaster mtree database to see what
 # files the user changed from the reference files.
 #
-if [ -n "${AUTO_UPGRADE}" -a -s "${DESTDIR}${MTREEFILE}" ]; then
+if [ -n "${AUTO_UPGRADE}" -a -s "${MTREEFILE}" ]; then
 	CHANGED=:
-	for file in `mtree -eqL -f ${DESTDIR}${MTREEFILE} -p ${DESTDIR}/ \
+	for file in `mtree -eqL -f ${MTREEFILE} -p ${DESTDIR}/ \
 		2>/dev/null | awk '($2 == "changed") {print $1}'`; do
 		if [ -f "${DESTDIR}/$file" ]; then
 			CHANGED="${CHANGED}${DESTDIR}/${file}:"
@@ -663,33 +669,34 @@ case "${RERUN}" in
   for file in ${IGNORE_FILES}; do
     test -e ${TEMPROOT}/${file} && unlink ${TEMPROOT}/${file}
   done
+
+  # We really don't want to have to deal with files like login.conf.db, pwd.db,
+  # or spwd.db.  Instead, we want to compare the text versions, and run *_mkdb.
+  # Prompt the user to do so below, as needed.
+  #
+  rm -f ${TEMPROOT}/etc/*.db ${TEMPROOT}/etc/passwd
+
+  # We only need to compare things like freebsd.cf once
+  find ${TEMPROOT}/usr/obj -type f -delete 2>/dev/null
+
+  # Delete stuff we do not need to keep the mtree database small,
+  # and to make the actual comparison faster.
+  find ${TEMPROOT}/usr -type l -delete 2>/dev/null
+  find ${TEMPROOT} -type f -size 0 -delete 2>/dev/null
+  find -d ${TEMPROOT} -type d -empty -delete 2>/dev/null
+
+  # Build the mtree database in a temporary location.
+  case "${PRE_WORLD}" in
+  '') MTREENEW=`mktemp -t mergemaster.mtree`
+      mtree -ci -p ${TEMPROOT} -k size,md5digest > ${MTREENEW} 2>/dev/null
+      ;;
+  *) # We don't want to mess with the mtree database on a pre-world run or
+     # when re-scanning a previously-built tree.
+     ;;
+  esac
   ;; # End of the "RERUN" test
 esac
 
-# We really don't want to have to deal with files like login.conf.db, pwd.db,
-# or spwd.db.  Instead, we want to compare the text versions, and run *_mkdb.
-# Prompt the user to do so below, as needed.
-#
-rm -f ${TEMPROOT}/etc/*.db ${TEMPROOT}/etc/passwd
-
-# We only need to compare things like freebsd.cf once
-find ${TEMPROOT}/usr/obj -type f -delete 2>/dev/null
-
-# Delete stuff we do not need to keep the mtree database small,
-# and to make the actual comparison faster.
-find ${TEMPROOT}/usr -type l -delete 2>/dev/null
-find ${TEMPROOT} -type f -size 0 -delete 2>/dev/null
-find -d ${TEMPROOT} -type d -empty -delete 2>/dev/null
-
-# Build the mtree database in a temporary location.
-MTREENEW=`mktemp -t mergemaster.mtree`
-case "${PRE_WORLD}" in
-'') mtree -ci -p ${TEMPROOT} -k size,md5digest > ${MTREENEW} 2>/dev/null
-    ;;
-*) # We don't want to mess with the mtree database on a pre-world run.
-   ;;
-esac
-
 # Get ready to start comparing files
 
 # Check umask if not specified on the command line,
@@ -818,7 +825,8 @@ mm_install () {
 
   if [ -n "${DESTDIR}${INSTALL_DIR}" -a ! -d "${DESTDIR}${INSTALL_DIR}" ]; then
     DIR_MODE=`find_mode "${TEMPROOT}/${INSTALL_DIR}"`
-    install -d -o root -g wheel -m "${DIR_MODE}" "${DESTDIR}${INSTALL_DIR}"
+    install -d -o root -g wheel -m "${DIR_MODE}" "${DESTDIR}${INSTALL_DIR}" ||
+      install_error $1 ${DESTDIR}${INSTALL_DIR}
   fi
 
   FILE_MODE=`find_mode "${1}"`
@@ -837,32 +845,39 @@ mm_install () {
       DONT_INSTALL=yes
       ;;
     /.cshrc | /.profile)
-    case "${AUTO_INSTALL}" in
-    '')
-      case "${LINK_EXPLAINED}" in
-      '')
-        echo "   *** Historically BSD derived systems have had a"
-        echo "       hard link from /.cshrc and /.profile to"
-        echo "       their namesakes in /root.  Please indicate"
-        echo "       your preference below for bringing your"
-        echo "       installed files up to date."
-        echo ''
-        LINK_EXPLAINED=yes
-        ;;
-      esac
+      local st_nlink
 
-      echo "   Use 'd' to delete the temporary ${COMPFILE}"
-      echo "   Use 'l' to delete the existing ${DESTDIR}${COMPFILE#.} and create the link"
-      echo ''
-      echo "   Default is to leave the temporary file to deal with by hand"
-      echo ''
-      echo -n "  How should I handle ${COMPFILE}? [Leave it to install later] "
-      read HANDLE_LINK
-      ;;
-    *)  # Part of AUTO_INSTALL
-      HANDLE_LINK=l
-      ;;
-    esac
+      # install will unlink the file before it installs the new one,
+      # so we have to restore/create the link afterwards.
+      #
+      st_nlink=0		# In case the file does not yet exist
+      eval $(stat -s ${DESTDIR}${COMPFILE#.} 2>/dev/null)
+
+      do_install_and_rm "${FILE_MODE}" "${1}" "${DESTDIR}${INSTALL_DIR}"
+
+      if [ -n "${AUTO_INSTALL}" -a $st_nlink -gt 1 ]; then
+        HANDLE_LINK=l
+      else
+        case "${LINK_EXPLAINED}" in
+        '')
+          echo "   *** Historically BSD derived systems have had a"
+          echo "       hard link from /.cshrc and /.profile to"
+          echo "       their namesakes in /root.  Please indicate"
+          echo "       your preference below for bringing your"
+          echo "       installed files up to date."
+          echo ''
+          LINK_EXPLAINED=yes
+          ;;
+        esac
+
+        echo "   Use 'd' to delete the temporary ${COMPFILE}"
+        echo "   Use 'l' to delete the existing ${DESTDIR}/root/${COMPFILE##*/} and create the link"
+        echo ''
+        echo "   Default is to leave the temporary file to deal with by hand"
+        echo ''
+        echo -n "  How should I handle ${COMPFILE}? [Leave it to install later] "
+        read HANDLE_LINK
+      fi
 
       case "${HANDLE_LINK}" in
       [dD]*)
@@ -872,19 +887,19 @@ mm_install () {
         ;;
       [lL]*)
         echo ''
-        rm -f "${DESTDIR}${COMPFILE#.}"
-        if ln "${DESTDIR}/root/${COMPFILE##*/}" "${DESTDIR}${COMPFILE#.}"; then
+        unlink ${DESTDIR}/root/${COMPFILE##*/}
+        if ln ${DESTDIR}${COMPFILE#.} ${DESTDIR}/root/${COMPFILE##*/}; then
           echo "   *** Link from ${DESTDIR}${COMPFILE#.} to ${DESTDIR}/root/${COMPFILE##*/} installed successfully"
-          rm "${COMPFILE}"
         else
-          echo "   *** Error linking ${DESTDIR}${COMPFILE#.} to ${DESTDIR}/root/${COMPFILE##*/}, ${COMPFILE} will remain to install by hand"
+          echo "   *** Error linking ${DESTDIR}${COMPFILE#.} to ${DESTDIR}/root/${COMPFILE##*/}"
+          echo "   *** ${COMPFILE} will remain for your consideration"
         fi
         ;;
       *)
         echo "   *** ${COMPFILE} will remain for your consideration"
         ;;
       esac
-      DONT_INSTALL=yes
+      return
       ;;
     esac
 
@@ -955,6 +970,12 @@ if [ -z "${PRE_WORLD}" -a -z "${RERUN}" ]; then
       esac
       sleep 2
       ;;
+    *)
+      if [ -n "${DELETE_STALE_RC_FILES}" ]; then
+        echo '      *** Deleting ... '
+        rm ${STALE_RC_FILES}
+        echo '                       done.'
+      fi
     esac
     ;;
   esac
@@ -967,7 +988,58 @@ if [ -r "${MM_PRE_COMPARE_SCRIPT}" ]; then
   . "${MM_PRE_COMPARE_SCRIPT}"
 fi
 
-for COMPFILE in `find . -type f`; do
+# Things that were files/directories/links in one version can sometimes
+# change to something else in a newer version.  So we need to explicitly
+# test for this, and warn the user if what we find does not match.
+#
+for COMPFILE in `find . | sort` ; do
+  if [ -e "${DESTDIR}${COMPFILE#.}" ]; then
+    INSTALLED_TYPE=`stat -f '%HT' ${DESTDIR}${COMPFILE#.}`
+  else
+    continue
+  fi
+  TEMPROOT_TYPE=`stat -f '%HT' $COMPFILE`
+
+  if [ ! "$TEMPROOT_TYPE" = "$INSTALLED_TYPE" ]; then
+    [ "$COMPFILE" = '.' ] && continue
+    TEMPROOT_TYPE=`echo $TEMPROOT_TYPE | tr [:upper:] [:lower:]`
+    INSTALLED_TYPE=`echo $INSTALLED_TYPE | tr [:upper:] [:lower:]`
+
+    echo "*** The installed file ${DESTDIR}${COMPFILE#.} has the type \"$INSTALLED_TYPE\""
+    echo "    but the new version has the type \"$TEMPROOT_TYPE\""
+    echo ''
+    echo "    How would you like to handle this?"
+    echo ''
+    echo "    Use 'r' to remove ${DESTDIR}${COMPFILE#.}"
+    case "$TEMPROOT_TYPE" in
+    'symbolic link')
+	TARGET=`readlink $COMPFILE`
+	echo "    and create a link to $TARGET in its place" ;;
+    *)	echo "    You will be able to install it as a \"$TEMPROOT_TYPE\"" ;;
+    esac
+    echo ''
+    echo "    Use 'i' to ignore this"
+    echo ''
+    echo -n "    How to proceed? [i] "
+    read ANSWER
+    case "$ANSWER" in
+    [rR])	case "${PRESERVE_FILES}" in
+		[Yy][Ee][Ss])
+		mv ${DESTDIR}${COMPFILE#.} ${PRESERVE_FILES_DIR}/ || exit 1 ;;
+		*) rm -rf ${DESTDIR}${COMPFILE#.} ;;
+		esac
+		case "$TEMPROOT_TYPE" in
+		'symbolic link') ln -sf $TARGET ${DESTDIR}${COMPFILE#.} ;;
+		esac ;;
+    *)	echo ''
+        echo "*** See the man page about adding ${COMPFILE#.} to the list of IGNORE_FILES"
+        press_to_continue ;;
+    esac
+    echo ''
+  fi
+done
+
+for COMPFILE in `find . -type f | sort`; do
 
   # First, check to see if the file exists in DESTDIR.  If not, the
   # diff_loop function knows how to handle it.
@@ -1032,7 +1104,7 @@ for COMPFILE in `find . -type f`; do
       # If the user chose the -F option, test for that before proceeding
       #
       if [ -n "$FREEBSD_ID" ]; then
-        if diff -q -I'[$]FreeBSD:.*$' "${DESTDIR}${COMPFILE#.}" "${COMPFILE}" > \
+        if diff -q -I'[$]FreeBSD.*[$]' "${DESTDIR}${COMPFILE#.}" "${COMPFILE}" > \
             /dev/null 2>&1; then
           if mm_install "${COMPFILE}"; then
             echo "*** Updated revision control Id for ${DESTDIR}${COMPFILE#.}"
@@ -1061,8 +1133,8 @@ echo "*** Comparison complete"
 
 if [ -s "${MTREENEW}" ]; then
   echo "*** Saving mtree database for future upgrades"
-  test -e "${DESTDIR}${MTREEFILE}" && unlink ${DESTDIR}${MTREEFILE}
-  mv ${MTREENEW} ${DESTDIR}${MTREEFILE}
+  test -e "${MTREEFILE}" && unlink ${MTREEFILE}
+  mv ${MTREENEW} ${MTREEFILE}
 fi
 
 echo ''
@@ -1070,7 +1142,7 @@ echo ''
 TEST_FOR_FILES=`find ${TEMPROOT} -type f -size +0 2>/dev/null`
 if [ -n "${TEST_FOR_FILES}" ]; then
   echo "*** Files that remain for you to merge by hand:"
-  find "${TEMPROOT}" -type f -size +0
+  find "${TEMPROOT}" -type f -size +0 | sort
   echo ''
 fi
 
@@ -1268,5 +1340,9 @@ case "${PRE_WORLD}" in
   ;;
 esac
 
-exit 0
+if [ -n "${PRESERVE_FILES}" ]; then
+  find -d $PRESERVE_FILES_DIR -type d -empty -delete 2>/dev/null
+  rmdir $PRESERVE_FILES_DIR 2>/dev/null
+fi
 
+exit 0
diff --git a/usr.sbin/mixer/Makefile b/usr.sbin/mixer/Makefile
index deb353941e4..abc01822833 100644
--- a/usr.sbin/mixer/Makefile
+++ b/usr.sbin/mixer/Makefile
@@ -3,6 +3,4 @@
 PROG=	mixer
 MAN=	mixer.8
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/mld6query/Makefile b/usr.sbin/mld6query/Makefile
index 0e9da492610..1d4b44343fd 100644
--- a/usr.sbin/mld6query/Makefile
+++ b/usr.sbin/mld6query/Makefile
@@ -20,4 +20,6 @@ SRCS=	mld6.c
 
 CFLAGS+= -DIPSEC -DUSE_RFC2292BIS
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/mlxcontrol/Makefile b/usr.sbin/mlxcontrol/Makefile
index 95964a5854f..038544b2142 100644
--- a/usr.sbin/mlxcontrol/Makefile
+++ b/usr.sbin/mlxcontrol/Makefile
@@ -6,4 +6,6 @@ SRCS=	command.c config.c interface.c util.c
 
 CFLAGS+= -I${.CURDIR}/../../sys
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/mount_portalfs/mount_portalfs.c b/usr.sbin/mount_portalfs/mount_portalfs.c
index 8f61efcc964..3c37b95657c 100644
--- a/usr.sbin/mount_portalfs/mount_portalfs.c
+++ b/usr.sbin/mount_portalfs/mount_portalfs.c
@@ -272,7 +272,7 @@ main(int argc, char *argv[])
 }
 
 static void
-usage()
+usage(void)
 {
 	(void)fprintf(stderr,
 		"usage: mount_portalfs [-o options] config mount-point\n");
diff --git a/usr.sbin/mount_smbfs/Makefile b/usr.sbin/mount_smbfs/Makefile
index ade4fad2f1c..9b7394411bb 100644
--- a/usr.sbin/mount_smbfs/Makefile
+++ b/usr.sbin/mount_smbfs/Makefile
@@ -2,7 +2,6 @@
 
 PROG=	mount_smbfs
 SRCS=	mount_smbfs.c getmntopts.c
-WARNS?=	6
 MAN=	mount_smbfs.8
 
 MOUNTDIR=	${.CURDIR}/../../sbin/mount
diff --git a/usr.sbin/mountd/exports.5 b/usr.sbin/mountd/exports.5
index 93d0cec3618..c8a3b70d311 100644
--- a/usr.sbin/mountd/exports.5
+++ b/usr.sbin/mountd/exports.5
@@ -28,7 +28,7 @@
 .\"     @(#)exports.5	8.3 (Berkeley) 3/29/95
 .\" $FreeBSD$
 .\"
-.Dd June 30, 2008
+.Dd December 3, 2009
 .Dt EXPORTS 5
 .Os
 .Sh NAME
@@ -473,6 +473,7 @@ operations on the server, so long as valid Kerberos credentials are provided.
 The machine grumpy.cis.uoguelph.ca is permitted to perform NFSv4 state
 operations on the server using AUTH_SYS credentials, as well as Kerberos ones.
 .Sh SEE ALSO
+.Xr nfsv4 4 ,
 .Xr netgroup 5 ,
 .Xr mountd 8 ,
 .Xr nfsd 8 ,
diff --git a/usr.sbin/moused/Makefile b/usr.sbin/moused/Makefile
index 623954efce4..a313a213ac8 100644
--- a/usr.sbin/moused/Makefile
+++ b/usr.sbin/moused/Makefile
@@ -3,8 +3,6 @@
 PROG=	moused
 MAN=	moused.8
 
-WARNS?=6
-
 DPADD=	${LIBUTIL}  ${LIBM}
 LDADD=	-lutil -lm
 
diff --git a/usr.sbin/mptable/Makefile b/usr.sbin/mptable/Makefile
index a9221f979c6..cff7602f1e6 100644
--- a/usr.sbin/mptable/Makefile
+++ b/usr.sbin/mptable/Makefile
@@ -1,6 +1,5 @@
 # $FreeBSD$
 
 PROG=	mptable
-WARNS?=	6
 
 .include 
diff --git a/usr.sbin/mtree/Makefile b/usr.sbin/mtree/Makefile
index b66c8bbeed8..cbc4fd9f187 100644
--- a/usr.sbin/mtree/Makefile
+++ b/usr.sbin/mtree/Makefile
@@ -8,8 +8,6 @@ MAN=	mtree.8 mtree.5
 SRCS=	compare.c crc.c create.c excludes.c misc.c mtree.c spec.c verify.c
 SRCS+=	specspec.c
 
-WARNS?=	4
-
 CFLAGS+= -DMD5 -DSHA1 -DRMD160 -DSHA256
 DPADD=	${LIBMD}
 LDADD=	-lmd
diff --git a/usr.sbin/named-checkconf/Makefile b/usr.sbin/named-checkconf/Makefile
index 8728b4ad15e..618cc1389d1 100644
--- a/usr.sbin/named-checkconf/Makefile
+++ b/usr.sbin/named-checkconf/Makefile
@@ -14,6 +14,8 @@ SRCS+=		named-checkconf.c check-tool.c
 
 CFLAGS+=	-I${LIB_BIND_DIR}
 
+WARNS?=		3
+
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
diff --git a/usr.sbin/named-checkzone/Makefile b/usr.sbin/named-checkzone/Makefile
index 169c00adce4..05cc9f23f95 100644
--- a/usr.sbin/named-checkzone/Makefile
+++ b/usr.sbin/named-checkzone/Makefile
@@ -14,6 +14,8 @@ SRCS+=		named-checkzone.c check-tool.c
 
 CFLAGS+=	-I${LIB_BIND_DIR}
 
+WARNS?=		3
+
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
diff --git a/usr.sbin/named/Makefile b/usr.sbin/named/Makefile
index 608866a4466..296afe91639 100644
--- a/usr.sbin/named/Makefile
+++ b/usr.sbin/named/Makefile
@@ -51,6 +51,8 @@ CFLAGS+=	-I${BIND_DIR}/lib/isc/${ISC_ATOMIC_ARCH}/include
 # Remove the date stamp to make it more obvious when real changes happen
 CFLAGS+=	-U__DATE__
 
+WARNS?=		0
+
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
diff --git a/usr.sbin/ndiscvt/ndiscvt.c b/usr.sbin/ndiscvt/ndiscvt.c
index 34d312071e5..5de75191f73 100644
--- a/usr.sbin/ndiscvt/ndiscvt.c
+++ b/usr.sbin/ndiscvt/ndiscvt.c
@@ -91,10 +91,8 @@ extern const char *__progname;
 	nt_hdr = (image_nt_header *)(x + dos_hdr->idh_lfanew);		\
 	sect_hdr = IMAGE_FIRST_SECTION(nt_hdr);
 
-static
-int insert_padding(imgbase, imglen)
-	void			**imgbase;
-	int			*imglen;
+static int
+insert_padding(void **imgbase, int *imglen)
 {
         image_section_header	*sect_hdr;
         image_dos_header	*dos_hdr;
diff --git a/usr.sbin/ndp/Makefile b/usr.sbin/ndp/Makefile
index f1566919a2f..552ac5375cf 100644
--- a/usr.sbin/ndp/Makefile
+++ b/usr.sbin/ndp/Makefile
@@ -22,4 +22,6 @@ SRCS=	ndp.c gmt2local.c
 CFLAGS+= -I. -I${.CURDIR} -I${.CURDIR}/../../contrib/tcpdump
 CFLAGS+= -D_U_=""
 
+WARNS?=	1
+
 .include 
diff --git a/usr.sbin/ndp/gnuc.h b/usr.sbin/ndp/gnuc.h
deleted file mode 100644
index c6412965c9d..00000000000
--- a/usr.sbin/ndp/gnuc.h
+++ /dev/null
@@ -1,2 +0,0 @@
-/* $FreeBSD$ */
-/* this is dummy to pacify gmt2local.c. */
diff --git a/usr.sbin/newsyslog/Makefile b/usr.sbin/newsyslog/Makefile
index 9c301a1b9d1..ebc297b4cf2 100644
--- a/usr.sbin/newsyslog/Makefile
+++ b/usr.sbin/newsyslog/Makefile
@@ -4,6 +4,4 @@ PROG=	newsyslog
 MAN=	newsyslog.8 newsyslog.conf.5
 SRCS=	newsyslog.c ptimes.c
 
-WARNS?=	2
-
 .include 
diff --git a/usr.sbin/newsyslog/newsyslog.c b/usr.sbin/newsyslog/newsyslog.c
index ef74f23917c..0878978f9b0 100644
--- a/usr.sbin/newsyslog/newsyslog.c
+++ b/usr.sbin/newsyslog/newsyslog.c
@@ -1779,7 +1779,18 @@ set_swpid(struct sigwork_entry *swork, const struct conf_entry *ent)
 
 	f = fopen(ent->pid_file, "r");
 	if (f == NULL) {
-		warn("can't open pid file: %s", ent->pid_file);
+		if (errno == ENOENT) {
+			/*
+			 * Warn if the PID file doesn't exist, but do
+			 * not consider it an error.  Most likely it
+			 * means the process has been terminated,
+			 * so it should be safe to rotate any log
+			 * files that the process would have been using.
+			 */
+			swork->sw_pidok = 1;
+			warnx("pid file doesn't exist: %s", ent->pid_file);
+		} else
+			warn("can't open pid file: %s", ent->pid_file);
 		return;
 	}
 
diff --git a/usr.sbin/nfsd/Makefile b/usr.sbin/nfsd/Makefile
index 3237ce3f9c6..290506773d7 100644
--- a/usr.sbin/nfsd/Makefile
+++ b/usr.sbin/nfsd/Makefile
@@ -4,6 +4,4 @@
 PROG=	nfsd
 MAN=	nfsd.8 nfsv4.4 stablerestart.5
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/nfsd/nfsd.c b/usr.sbin/nfsd/nfsd.c
index a822eb3133f..d86309f4e1b 100644
--- a/usr.sbin/nfsd/nfsd.c
+++ b/usr.sbin/nfsd/nfsd.c
@@ -842,7 +842,7 @@ setbindhost(struct addrinfo **ai, const char *bindhost, struct addrinfo hints)
 }
 
 void
-usage()
+usage(void)
 {
 	(void)fprintf(stderr, "usage: nfsd %s\n", USAGE);
 	exit(1);
@@ -868,7 +868,7 @@ reapchild(__unused int signo)
 }
 
 void
-unregistration()
+unregistration(void)
 {
 	if ((!rpcb_unset(NFS_PROGRAM, 2, NULL)) ||
 	    (!rpcb_unset(NFS_PROGRAM, 3, NULL)))
@@ -876,7 +876,7 @@ unregistration()
 }
 
 void
-killchildren()
+killchildren(void)
 {
 	int i;
 
diff --git a/usr.sbin/nfsd/nfsv4.4 b/usr.sbin/nfsd/nfsv4.4
index 70b145b9875..29e16096dcf 100644
--- a/usr.sbin/nfsd/nfsv4.4
+++ b/usr.sbin/nfsd/nfsv4.4
@@ -24,22 +24,20 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd April 30, 2009
+.Dd December 3, 2009
 .Dt NFSV4 4
 .Os
 .Sh NAME
-.Nm nfsv4
+.Nm NFSv4
 .Nd NFS Version 4 Protocol
-.Sh SYNOPSIS
-experimental client and server with NFSv4 support
 .Sh DESCRIPTION
-The experimental nfs client and server provides support for the
+The experimental NFS client and server provides support for the
 .Tn NFSv4
 specification; see
 .%T "Network File System (NFS) Version 4 Protocol \\*(tNRFC\\*(sP 3530" .
 The protocol is somewhat similar to NFS Version 3, but differs in significant
 ways.
-It uses a single Compound RPC that concatenates operations to-gether.
+It uses a single compound RPC that concatenates operations to-gether.
 Each of these operations are similar to the RPCs of NFS Version 3.
 The operations in the compound are performed in order, until one of
 them fails (returns an error) and then the RPC terminates at that point.
@@ -48,10 +46,10 @@ It has
 integrated locking support, which implies that the server is no longer
 stateless.
 As such, the
-.Tn NFSv4
-server remains in recovery mode for a Grace period (always greater than the
+.Nm
+server remains in recovery mode for a grace period (always greater than the
 lease duration the server uses) after a reboot.
-During this Grace period, clients may recover state but not perform other
+During this grace period, clients may recover state but not perform other
 open/lock state changing operations.
 To provide for correct recovery semantics, a small file described by
 .Xr stablerestart 5
@@ -61,14 +59,14 @@ the server will not start.
 If this file is lost, it should be recovered from backups, since creating
 an empty
 .Xr stablerestart 5
-file will result in the server starting without providing a Grace Period
+file will result in the server starting without providing a grace period
 for recovery.
 Note that recovery only occurs when the server
 machine is rebooted, not when the
 .Xr nfsd 8
 are just restarted.
 .Pp
-It provides several optional features not in NFS Version 3:
+It provides several optional features not present in NFS Version 3:
 .sp
 .Bd -literal -offset indent -compact
 - NFS Version 4 ACLs
@@ -78,7 +76,7 @@ It provides several optional features not in NFS Version 3:
 .Ed
 .Pp
 The
-.Tn NFSv4
+.Nm
 protocol does not use a separate mount protocol and assumes that the
 server provides a single file system tree structure, rooted at the point
 in the local file system tree specified by one or more
@@ -131,7 +129,7 @@ by default.
 However, this can normally be overridden by a command line
 option or configuration file for the daemon used to do the name<->number
 mapping.
-On FreeBSD, the mapping daemon is called
+Under FreeBSD, the mapping daemon is called
 .Xr nfsuserd 8
 and has a command line option that overrides the domain component of the
 machine's hostname.
@@ -143,7 +141,7 @@ report a lot of ``nobody'' and ``nogroup'' ownerships.
 .Pp
 Although uid/gid numbers are no longer used in the
 .Nm
-protocol, they will still be in the RPC authentication fields when running
+protocol, they will still be in the RPC authentication fields when
 using AUTH_SYS (sec=sys), which is the default.
 As such, in this case both the user/group name and number spaces must
 be consistent between the client and server.
@@ -154,8 +152,8 @@ with RPCSEC_GSS (sec=krb5, krb5i, krb5p), only names and KerberosV tickets
 will go on the wire.
 .Sh SERVER SETUP
 .Pp
-To set up the experimental nfs server that supports
-.Nm
+To set up the experimental NFS server that supports
+.Nm ,
 you will need to either build a kernel with:
 .sp
 .Bd -literal -offset indent -compact
@@ -318,13 +316,13 @@ variables.
 NFS V4 stable restart file
 .El
 .Sh SEE ALSO
-.Xr stablerestart 5
-.Xr mountd 8
-.Xr nfscbd 8
-.Xr nfsd 8
-.Xr nfsdumpstate 8
-.Xr nfsrevoke 8
-.Xr nfsuserd 8
+.Xr stablerestart 5 ,
+.Xr mountd 8 ,
+.Xr nfscbd 8 ,
+.Xr nfsd 8 ,
+.Xr nfsdumpstate 8 ,
+.Xr nfsrevoke 8 ,
+.Xr nfsuserd 8 ,
 .Sh BUGS
 At this time, there is no recall of delegations for local file system
 operations.
diff --git a/usr.sbin/nfsd/stablerestart.5 b/usr.sbin/nfsd/stablerestart.5
index 8499986056e..172dd4b5d9c 100644
--- a/usr.sbin/nfsd/stablerestart.5
+++ b/usr.sbin/nfsd/stablerestart.5
@@ -24,23 +24,23 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd September 7, 2007
+.Dd December 3, 2009
 .Dt STABLERESTART 5
 .Os
 .Sh NAME
 .Nm nfs-stablerestart
-.Nd handles restart edge conditions for the
-.Tn NFS
-V4 server
+.Nd restart information for the
+.Tn NFSv4
+server
 .Sh SYNOPSIS
 .Nm nfs-stablerestart
 .Sh DESCRIPTION
 The
 .Nm
 file holds information that allows the
-.Tn NFS
-V4 server to restart without always returning the NFSERR_NOGRACE error, as described in the
-.Tn NFS V4
+.Tn NFSv4
+server to restart without always returning the NFSERR_NOGRACE error, as described in the
+.Tn NFSv4
 server specification; see
 .%T "Network File System (NFS) Version 4 Protocol \\*(tNRFC\\*(sP 3530, Section 8.6.3" .
 .Pp
@@ -49,11 +49,11 @@ The first record in the file, as defined by struct nfsf_rec in
 last incarnation of the server and the number of boot times that follows.
 Following this are the number of previous boot times listed in the
 first record.
-The lease duration is used to set the Grace Period.
+The lease duration is used to set the grace period.
 The boot times
 are used to avoid the unlikely occurrence of a boot time being reused,
 due to a TOD clock going backwards. This record and the previous boot times with this boot time added is re-written at the
-end of the Grace Period.
+end of the grace period.
 .Pp
 The rest of the file are appended records, as defined by
 struct nfst_rec in /usr/include/fs/nfs/nfsrvstate.h and are used
@@ -77,14 +77,14 @@ a local disk drive that holds the file, or similar.
 .Sh FILES
 .Bl -tag -width /var/db/nfs-stablerestart -compact
 .It Pa /var/db/nfs-stablerestart
-NFS V4 stable restart file
+NFSv4 stable restart file
 .El
 .Sh SEE ALSO
-.Xr nfsv4 4
+.Xr nfsv4 4 ,
 .Xr nfsd 8
 .Sh BUGS
-If the file is empty, the NFS V4 server has no choice but to return
-NFSERR_NOGRACE for all Reclaim requests. Although correct, this is
+If the file is empty, the NFSv4 server has no choice but to return
+NFSERR_NOGRACE for all reclaim requests. Although correct, this is
 a highly undesirable occurrence, so the file should not be lost if
 at all possible. Nfsd will not create the file if it does not
 exist and will simply log a failure to start, in the hopes that the
diff --git a/usr.sbin/nghook/Makefile b/usr.sbin/nghook/Makefile
index 73f2df3bf93..e427f2603cc 100644
--- a/usr.sbin/nghook/Makefile
+++ b/usr.sbin/nghook/Makefile
@@ -4,7 +4,6 @@
 PROG=	nghook
 MAN=	nghook.8
 SRCS=	main.c
-WARNS?=	6
 
 DPADD=	${LIBNETGRAPH}
 LDADD=	-lnetgraph
diff --git a/usr.sbin/nscd/nscd.conf.5 b/usr.sbin/nscd/nscd.conf.5
index f64ce277938..727e3e6f7b3 100644
--- a/usr.sbin/nscd/nscd.conf.5
+++ b/usr.sbin/nscd/nscd.conf.5
@@ -106,7 +106,7 @@ The default policy is fifo.
 This is the internal hash table size.
 The value should be a prime number for optimum performance.
 You should only change this value when the number of cached elements is
-significantly (in 5-10 times) greater then the default hash table size (255).
+significantly (5-10 times) greater than the default hash table size (257).
 .It Va keep-hot-count Oo Ar cachename Oc Op Ar value
 The size limit of the cache with the given
 .Ar cachename .
diff --git a/usr.sbin/ntp/Makefile b/usr.sbin/ntp/Makefile
index 86e447ddfb6..31ee56461e6 100644
--- a/usr.sbin/ntp/Makefile
+++ b/usr.sbin/ntp/Makefile
@@ -1,7 +1,7 @@
 # Makefile for ntpd.
 # $FreeBSD$
 
-SUBDIR=	libopts libntp libparse ntpd ntpdc ntpq ntpdate ntptrace \
+SUBDIR=	libopts libntp libparse ntpd ntpdc ntpq ntpdate \
 	ntptime ntp-keygen sntp
 SUBDIR+=	doc
 
diff --git a/usr.sbin/ntp/Makefile.inc b/usr.sbin/ntp/Makefile.inc
index f81905a418a..5095e89bbfb 100644
--- a/usr.sbin/ntp/Makefile.inc
+++ b/usr.sbin/ntp/Makefile.inc
@@ -18,4 +18,6 @@ LIBOPTS=	${.OBJDIR}/../libopts/libopts.a
 LIBPARSE=	${.OBJDIR}/../libparse/libparse.a
 LIBNTP=	${.OBJDIR}/../libntp/libntp.a
 
+WARNS?=	0
+
 .include "../Makefile.inc"
diff --git a/usr.sbin/ntp/config.h b/usr.sbin/ntp/config.h
index 518cd8ca565..8359b301d97 100644
--- a/usr.sbin/ntp/config.h
+++ b/usr.sbin/ntp/config.h
@@ -947,7 +947,7 @@
 /* #undef HAVE_UTMPX_H */
 
 /* Define to 1 if you have the  header file. */
-#define HAVE_UTMP_H 1
+/* #undef HAVE_UTMP_H */
 
 /* Define to 1 if you have the  header file. */
 /* #undef HAVE_VALUES_H */
diff --git a/usr.sbin/ntp/doc/Makefile b/usr.sbin/ntp/doc/Makefile
index f1326fcd20d..64e357155be 100644
--- a/usr.sbin/ntp/doc/Makefile
+++ b/usr.sbin/ntp/doc/Makefile
@@ -24,7 +24,7 @@ FILES=	accopt.html assoc.html audio.html authopt.html build.html \
 .endif
 
 MAN=	ntp.conf.5 ntp.keys.5
-MAN+=	ntp-keygen.8 ntpd.8 ntpdate.8 ntpdc.8 ntpq.8 ntptime.8 ntptrace.8
+MAN+=	ntp-keygen.8 ntpd.8 ntpdate.8 ntpdc.8 ntpq.8 ntptime.8
 
 .PATH: ${.CURDIR}/../../../contrib/ntp/html \
 	${.CURDIR}/../../../contrib/ntp/html/build \
diff --git a/usr.sbin/ntp/ntptrace/Makefile b/usr.sbin/ntp/ntptrace/Makefile
deleted file mode 100644
index 8d7547cf5ea..00000000000
--- a/usr.sbin/ntp/ntptrace/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-# $FreeBSD$
-
-.PATH:	${.CURDIR}/../scripts
-
-SCRIPTS=	ntptrace
-NO_MAN=
-NO_OBJ=
-
-.include 
diff --git a/usr.sbin/nvram/Makefile b/usr.sbin/nvram/Makefile
index 3cca0375650..2c6e43c8fcb 100644
--- a/usr.sbin/nvram/Makefile
+++ b/usr.sbin/nvram/Makefile
@@ -4,6 +4,4 @@ PROG=	nvram
 MAN=	nvram.8
 MANSUBDIR= /powerpc
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/ofwdump/Makefile b/usr.sbin/ofwdump/Makefile
index a20e94f9b33..ca4f4868db5 100644
--- a/usr.sbin/ofwdump/Makefile
+++ b/usr.sbin/ofwdump/Makefile
@@ -4,6 +4,4 @@ PROG=	ofwdump
 MAN=	ofwdump.8
 SRCS=	ofwdump.c ofw_util.c
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/pciconf/Makefile b/usr.sbin/pciconf/Makefile
index e57e736fe2c..9fbec00ce0e 100644
--- a/usr.sbin/pciconf/Makefile
+++ b/usr.sbin/pciconf/Makefile
@@ -7,4 +7,6 @@ MAN=	pciconf.8
 
 CFLAGS+= -I${.CURDIR}/../../sys
 
+WARNS?=	3
+
 .include 
diff --git a/usr.sbin/pkg_install/add/main.c b/usr.sbin/pkg_install/add/main.c
index eaed0c0c2eb..d9b381bdd9b 100644
--- a/usr.sbin/pkg_install/add/main.c
+++ b/usr.sbin/pkg_install/add/main.c
@@ -344,7 +344,7 @@ getpackagesite(void)
 }
 
 static void
-usage()
+usage(void)
 {
     fprintf(stderr, "%s\n%s\n",
 	"usage: pkg_add [-viInfFrRMSK] [-t template] [-p prefix] [-P prefix] [-C chrootdir]",
diff --git a/usr.sbin/pkg_install/create/main.c b/usr.sbin/pkg_install/create/main.c
index b98b21ee9db..d85392dc9c7 100644
--- a/usr.sbin/pkg_install/create/main.c
+++ b/usr.sbin/pkg_install/create/main.c
@@ -249,7 +249,7 @@ main(int argc, char **argv)
 }
 
 static void
-usage()
+usage(void)
 {
     fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n",
 "usage: pkg_create [-YNOhjnvyz] [-C conflicts] [-P pkgs] [-p prefix]",
diff --git a/usr.sbin/pkg_install/delete/Makefile b/usr.sbin/pkg_install/delete/Makefile
index c346ea705d7..c9a0fdebea2 100644
--- a/usr.sbin/pkg_install/delete/Makefile
+++ b/usr.sbin/pkg_install/delete/Makefile
@@ -5,7 +5,6 @@ SRCS=	main.c perform.c
 
 CFLAGS+= -I${.CURDIR}/../lib
 
-WARNS?=	6
 WFORMAT?=	1
 
 DPADD=	${LIBINSTALL} ${LIBMD}
diff --git a/usr.sbin/pkg_install/delete/main.c b/usr.sbin/pkg_install/delete/main.c
index 6075f72ab10..f09a432f2bb 100644
--- a/usr.sbin/pkg_install/delete/main.c
+++ b/usr.sbin/pkg_install/delete/main.c
@@ -170,7 +170,7 @@ main(int argc, char **argv)
 }
 
 static void
-usage()
+usage(void)
 {
     fprintf(stderr, "%s\n%s\n",
 	"usage: pkg_delete [-dDfGinrvxX] [-p prefix] pkg-name ...",
diff --git a/usr.sbin/pkg_install/info/Makefile b/usr.sbin/pkg_install/info/Makefile
index 675f7ca454a..485cb226321 100644
--- a/usr.sbin/pkg_install/info/Makefile
+++ b/usr.sbin/pkg_install/info/Makefile
@@ -5,7 +5,6 @@ SRCS=	main.c perform.c show.c
 
 CFLAGS+= -I${.CURDIR}/../lib
 
-WARNS?=	6
 WFORMAT?=	1
 
 DPADD=	${LIBINSTALL} ${LIBFETCH} ${LIBMD}
diff --git a/usr.sbin/pkg_install/info/main.c b/usr.sbin/pkg_install/info/main.c
index 08ab23b2295..2de638e4cad 100644
--- a/usr.sbin/pkg_install/info/main.c
+++ b/usr.sbin/pkg_install/info/main.c
@@ -282,7 +282,7 @@ main(int argc, char **argv)
 }
 
 static void
-usage()
+usage(void)
 {
     fprintf(stderr, "%s\n%s\n%s\n%s\n%s\n",
 	"usage: pkg_info [-bcdDEfgGiIjkKLmopPqQrRsvVxX] [-e package] [-l prefix]",
diff --git a/usr.sbin/pkg_install/updating/Makefile b/usr.sbin/pkg_install/updating/Makefile
index cf8bfc8718c..b0d3689779e 100644
--- a/usr.sbin/pkg_install/updating/Makefile
+++ b/usr.sbin/pkg_install/updating/Makefile
@@ -5,7 +5,6 @@ SRCS=	main.c
 
 CFLAGS+= -I${.CURDIR}/../lib
 
-WARNS?=	6
 WFORMAT?= 1
 
 DPADD=	${LIBINSTALL} ${LIBFETCH} ${LIBMD}
diff --git a/usr.sbin/pkg_install/version/Makefile b/usr.sbin/pkg_install/version/Makefile
index 71168ee3d23..3e1d7a522f2 100644
--- a/usr.sbin/pkg_install/version/Makefile
+++ b/usr.sbin/pkg_install/version/Makefile
@@ -5,7 +5,6 @@ SRCS=	main.c perform.c
 
 CFLAGS+= -I${.CURDIR}/../lib
 
-WARNS?=	6
 WFORMAT?=	1
 
 DPADD=	${LIBINSTALL} ${LIBFETCH} ${LIBMD}
diff --git a/usr.sbin/pkg_install/version/main.c b/usr.sbin/pkg_install/version/main.c
index f46d945f4ef..cad8583c23b 100644
--- a/usr.sbin/pkg_install/version/main.c
+++ b/usr.sbin/pkg_install/version/main.c
@@ -127,7 +127,7 @@ main(int argc, char **argv)
 }
 
 static void
-usage()
+usage(void)
 {
     fprintf(stderr, "%s\n%s\n%s\n",
 	"usage: pkg_version [-hIoqv] [-l limchar] [-L limchar] [[-X] -s string] [-O origin] [index]",
diff --git a/usr.sbin/pmcannotate/Makefile b/usr.sbin/pmcannotate/Makefile
index e087bb3c28e..cff1efb5ccf 100644
--- a/usr.sbin/pmcannotate/Makefile
+++ b/usr.sbin/pmcannotate/Makefile
@@ -5,8 +5,6 @@
 PROG=	pmcannotate
 MAN=	pmcannotate.8
 
-WARNS?=	6
-
 SRCS=	pmcannotate.c
 
 .include 
diff --git a/usr.sbin/pmcannotate/pmcannotate.c b/usr.sbin/pmcannotate/pmcannotate.c
index 1a5dec2b6d1..1f39f257f07 100644
--- a/usr.sbin/pmcannotate/pmcannotate.c
+++ b/usr.sbin/pmcannotate/pmcannotate.c
@@ -325,7 +325,7 @@ fqueue_compact(float th)
  * Flush the first-level aggregates queue.
  */
 static void
-fqueue_deleteall()
+fqueue_deleteall(void)
 {
 	struct aggent *agg;
 
@@ -472,7 +472,7 @@ fqueue_insertgen(void)
  * Flush the raw entries general queue.
  */
 static void
-general_deleteall()
+general_deleteall(void)
 {
 	struct entry *obj;
 
diff --git a/usr.sbin/pmccontrol/Makefile b/usr.sbin/pmccontrol/Makefile
index 9dafe1c3fbd..0f6dc768d8e 100644
--- a/usr.sbin/pmccontrol/Makefile
+++ b/usr.sbin/pmccontrol/Makefile
@@ -8,8 +8,6 @@ MAN=	pmccontrol.8
 DPADD=	${LIBPMC}
 LDADD=	-lpmc
 
-WARNS?=	6
-
 SRCS=	pmccontrol.c
 
 .include 
diff --git a/usr.sbin/pmcstat/Makefile b/usr.sbin/pmcstat/Makefile
index 6b11d8d945a..c115c427c9b 100644
--- a/usr.sbin/pmcstat/Makefile
+++ b/usr.sbin/pmcstat/Makefile
@@ -8,8 +8,6 @@ MAN=	pmcstat.8
 DPADD=	${LIBELF} ${LIBKVM} ${LIBPMC} ${LIBM}
 LDADD=	-lelf -lkvm -lpmc -lm
 
-WARNS?=	6
-
 SRCS=	pmcstat.c pmcstat.h pmcstat_log.c
 
 .include 
diff --git a/usr.sbin/pmcstat/pmcstat_log.c b/usr.sbin/pmcstat/pmcstat_log.c
index 98141268503..a403852edf5 100644
--- a/usr.sbin/pmcstat/pmcstat_log.c
+++ b/usr.sbin/pmcstat/pmcstat_log.c
@@ -141,7 +141,7 @@ struct pmcstat_pmcrecord {
 };
 
 static LIST_HEAD(,pmcstat_pmcrecord)	pmcstat_pmcs =
-	LIST_HEAD_INITIALIZER(&pmcstat_pmcs);
+	LIST_HEAD_INITIALIZER(pmcstat_pmcs);
 
 
 /*
diff --git a/usr.sbin/pnpinfo/Makefile b/usr.sbin/pnpinfo/Makefile
index 294b4f758d4..164ef37790c 100644
--- a/usr.sbin/pnpinfo/Makefile
+++ b/usr.sbin/pnpinfo/Makefile
@@ -11,4 +11,6 @@ CFLAGS+= -I${.CURDIR}/../../sys
 CFLAGS+= -DPC98
 .endif
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/portsnap/make_index/Makefile b/usr.sbin/portsnap/make_index/Makefile
index 65b1a8e6106..87768f6035e 100644
--- a/usr.sbin/portsnap/make_index/Makefile
+++ b/usr.sbin/portsnap/make_index/Makefile
@@ -2,7 +2,6 @@
 
 PROG=	make_index
 NO_MAN=
-WARNS?=	6
 
 BINDIR=	${LIBEXECDIR}
 
diff --git a/usr.sbin/portsnap/phttpget/Makefile b/usr.sbin/portsnap/phttpget/Makefile
index 154ff15f952..6f003e3b975 100644
--- a/usr.sbin/portsnap/phttpget/Makefile
+++ b/usr.sbin/portsnap/phttpget/Makefile
@@ -2,7 +2,6 @@
 
 PROG=	phttpget
 NO_MAN=
-WARNS?=	6
 
 BINDIR=	${LIBEXECDIR}
 
diff --git a/usr.sbin/portsnap/portsnap/portsnap.sh b/usr.sbin/portsnap/portsnap/portsnap.sh
index 0660b419b22..f554809c4d2 100644
--- a/usr.sbin/portsnap/portsnap/portsnap.sh
+++ b/usr.sbin/portsnap/portsnap/portsnap.sh
@@ -140,7 +140,7 @@ parse_cmdline() {
 			if [ ! -z "${SERVERNAME}" ]; then usage; fi
 			shift; SERVERNAME="$1"
 			;;
-		cron | extract | fetch | update)
+		cron | extract | fetch | update | alfred)
 			COMMANDS="${COMMANDS} $1"
 			;;
 		*)
@@ -1040,6 +1040,22 @@ cmd_update() {
 	update_run || exit 1
 }
 
+# Alfred command.  Run 'fetch' or 'cron' depending on
+# whether stdin is a terminal; then run 'update' or
+# 'extract' depending on whether ${PORTSDIR} exists.
+cmd_alfred() {
+	if [ -t 0 ]; then
+		cmd_fetch
+	else
+		cmd_cron
+	fi
+	if [ -d ${PORTSDIR} ]; then
+		cmd_update
+	else
+		cmd_extract
+	fi
+}
+
 #### Entry point
 
 # Make sure we find utilities from the base system
diff --git a/usr.sbin/powerd/Makefile b/usr.sbin/powerd/Makefile
index 6adb188608a..b1d8d112f61 100644
--- a/usr.sbin/powerd/Makefile
+++ b/usr.sbin/powerd/Makefile
@@ -2,7 +2,6 @@
 
 PROG=	powerd
 MAN=	powerd.8
-WARNS?=	6
 
 DPADD=	${LIBUTIL}
 LDADD=	-lutil
diff --git a/usr.sbin/powerd/powerd.8 b/usr.sbin/powerd/powerd.8
index 7465410a665..580886268e0 100644
--- a/usr.sbin/powerd/powerd.8
+++ b/usr.sbin/powerd/powerd.8
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd December 24, 2008
+.Dd December 21, 2009
 .Dt POWERD 8
 .Os
 .Sh NAME
@@ -45,7 +45,7 @@ The
 .Nm
 utility monitors the system state and sets various power control options
 accordingly.
-It offers three modes (maximum, minimum, and adaptive) that can be
+It offers four modes (maximum, minimum, adaptive and hiadaptive) that can be
 individually selected while on AC power or batteries.
 The modes maximum, minimum, adaptive and hiadaptive may be abbreviated
 max, min, adp, hadp.
@@ -57,9 +57,10 @@ Adaptive mode attempts to strike a balance by degrading performance when
 the system appears idle and increasing it when the system is busy.
 It offers a good balance between a small performance loss for greatly
 increased power savings.
-Hiadaptive mode is alike adaptive mode, but tuned for systems where
+Hiadaptive mode is like adaptive mode, but tuned for systems where
 performance and interactivity are more important then power consumption.
-It rises frequency faster, drops slower and keeps twice lower CPU load.
+It increases frequency faster, reduces the frequency less aggressively and
+will maintain full frequency for longer.
 The default mode is adaptive for battery power and hiadaptive for the rest.
 .Pp
 The
diff --git a/usr.sbin/powerd/powerd.c b/usr.sbin/powerd/powerd.c
index e1b2a55a41b..59ac1caaf69 100644
--- a/usr.sbin/powerd/powerd.c
+++ b/usr.sbin/powerd/powerd.c
@@ -259,7 +259,7 @@ get_freq_id(int freq, int *freqs, int numfreqs)
  * to APM.  If nothing succeeds, we'll just run in default mode.
  */
 static void
-acline_init()
+acline_init(void)
 {
 	acline_mib_len = 4;
 
diff --git a/usr.sbin/ppp/ppp.8.m4 b/usr.sbin/ppp/ppp.8.m4
index 66637595029..a711d58e488 100644
--- a/usr.sbin/ppp/ppp.8.m4
+++ b/usr.sbin/ppp/ppp.8.m4
@@ -44,10 +44,10 @@ changecom(,)dnl
 This is a user process
 .Em PPP
 software package.
-Normally,
+Sometimes,
 .Em PPP
 is implemented as a part of the kernel (e.g., as managed by
-.Xr pppd 8 )
+.Nm pppd )
 and it is thus somewhat hard to debug and/or modify its behaviour.
 However, in this implementation
 .Em PPP
@@ -2701,7 +2701,7 @@ program.
 Note: There is a problem negotiating
 .Ar deflate
 capabilities with
-.Xr pppd 8
+.Nm pppd
 - a
 .Em PPP
 implementation available under many operating systems.
@@ -2734,7 +2734,7 @@ Default: Disabled and Denied.
 This is a variance of the
 .Ar deflate
 option, allowing negotiation with the
-.Xr pppd 8
+.Nm pppd
 program.
 Refer to the
 .Ar deflate
@@ -2882,7 +2882,7 @@ acts as the authenticatee with both protocols
 the protocols are used alternately in response to challenges.
 .Pp
 Note: If only LANMan is enabled,
-.Xr pppd 8
+.Nm pppd
 (version 2.3.5) misbehaves when acting as authenticatee.
 It provides both
 the NT and the LANMan answers, but also suggests that only the NT answer
@@ -6091,7 +6091,6 @@ ifdef({LOCALRAD},{},{.Xr libradius 3 ,
 .Xr named 8 ,
 .Xr ping 8 ,
 .Xr pppctl 8 ,
-.Xr pppd 8 ,
 .Xr pppoed 8 ,
 .Xr route 8 ,
 .Xr sshd 8 ,
diff --git a/usr.sbin/pppctl/Makefile b/usr.sbin/pppctl/Makefile
index 6cdcc3dc6cf..2f2be4bb503 100644
--- a/usr.sbin/pppctl/Makefile
+++ b/usr.sbin/pppctl/Makefile
@@ -3,6 +3,8 @@
 PROG=	pppctl
 MAN=	pppctl.8
 
+WARNS?=	2
+
 DPADD=	${LIBPTHREAD} ${LIBEDIT} ${LIBTERMCAP}
 LDADD=	-lpthread -ledit -ltermcap
 
diff --git a/usr.sbin/praliases/Makefile b/usr.sbin/praliases/Makefile
index 81fd4d1a11a..120028d6997 100644
--- a/usr.sbin/praliases/Makefile
+++ b/usr.sbin/praliases/Makefile
@@ -11,6 +11,8 @@ MAN=	praliases.8
 CFLAGS+= -I${SENDMAIL_DIR}/src -I${SENDMAIL_DIR}/include -I.
 CFLAGS+= -DNEWDB -DNOT_SENDMAIL
 
+WARNS?=	2
+
 LIBSMDIR=	${.OBJDIR}/../../lib/libsm
 LIBSM=		${LIBSMDIR}/libsm.a
 
diff --git a/usr.sbin/praudit/Makefile b/usr.sbin/praudit/Makefile
index 4ff08fdfb16..6a61fd131e3 100644
--- a/usr.sbin/praudit/Makefile
+++ b/usr.sbin/praudit/Makefile
@@ -8,6 +8,8 @@ OPENBSMDIR=${.CURDIR}/../../contrib/openbsm
 PROG=	praudit
 MAN=	praudit.1
 
+WARNS?=	3
+
 DPADD=	${LIBBSM}
 LDADD=	-lbsm
 
diff --git a/usr.sbin/procctl/Makefile b/usr.sbin/procctl/Makefile
index 5cb35e70737..880b93a13fe 100644
--- a/usr.sbin/procctl/Makefile
+++ b/usr.sbin/procctl/Makefile
@@ -3,6 +3,4 @@
 PROG=	procctl
 MAN=	procctl.8
 
-WARNS?=	2
-
 .include 
diff --git a/usr.sbin/pstat/Makefile b/usr.sbin/pstat/Makefile
index 4620ddee19f..414708cee05 100644
--- a/usr.sbin/pstat/Makefile
+++ b/usr.sbin/pstat/Makefile
@@ -6,8 +6,6 @@ LINKS=	${BINDIR}/pstat ${BINDIR}/swapinfo
 MAN=	pstat.8
 MLINKS=	pstat.8 swapinfo.8
 
-WARNS?=	6
-
 DPADD=	${LIBKVM} ${LIBUTIL}
 LDADD=	-lkvm -lutil
 
diff --git a/usr.sbin/pw/Makefile b/usr.sbin/pw/Makefile
index 8937124f22f..ae0023c6a32 100644
--- a/usr.sbin/pw/Makefile
+++ b/usr.sbin/pw/Makefile
@@ -6,6 +6,8 @@ SRCS=	pw.c pw_conf.c pw_user.c pw_group.c pw_log.c pw_nis.c pw_vpw.c \
 	grupd.c pwupd.c fileupd.c edgroup.c psdate.c \
 	bitmap.c cpdir.c rm_r.c
 
+WARNS?=	1
+
 DPADD=	${LIBCRYPT} ${LIBUTIL}
 LDADD=	-lcrypt -lutil
 
diff --git a/usr.sbin/pw/pw_user.c b/usr.sbin/pw/pw_user.c
index 4c62fe83c63..c8364cad51f 100644
--- a/usr.sbin/pw/pw_user.c
+++ b/usr.sbin/pw/pw_user.c
@@ -41,16 +41,11 @@ static const char rcsid[] =
 #include 
 #include 
 #include 
-#include 
 #include 
 #include "pw.h"
 #include "bitmap.h"
 
-#if (MAXLOGNAME-1) > UT_NAMESIZE
-#define LOGNAMESIZE UT_NAMESIZE
-#else
 #define LOGNAMESIZE (MAXLOGNAME-1)
-#endif
 
 static		char locked_str[] = "*LOCKED*";
 
diff --git a/usr.sbin/pwd_mkdb/Makefile b/usr.sbin/pwd_mkdb/Makefile
index c3aaeb3398d..7616629b2b0 100644
--- a/usr.sbin/pwd_mkdb/Makefile
+++ b/usr.sbin/pwd_mkdb/Makefile
@@ -7,7 +7,6 @@ PROG=	pwd_mkdb
 MAN=	pwd_mkdb.8
 SRCS=	pw_scan.c pwd_mkdb.c
 
-WARNS?=	4
 CFLAGS+= -I${.CURDIR}/../../lib/libc/gen		# for pw_scan.h
 
 .include 
diff --git a/usr.sbin/quotaon/Makefile b/usr.sbin/quotaon/Makefile
index 3f88bd9da33..984008cf8e8 100644
--- a/usr.sbin/quotaon/Makefile
+++ b/usr.sbin/quotaon/Makefile
@@ -6,6 +6,4 @@ LINKS=	${BINDIR}/quotaon ${BINDIR}/quotaoff
 MAN=	quotaon.8
 MLINKS=	quotaon.8 quotaoff.8
 
-WARNS?=	4
-
 .include 
diff --git a/usr.sbin/quotaon/quotaon.c b/usr.sbin/quotaon/quotaon.c
index 314f596bc01..84a523d7b1c 100644
--- a/usr.sbin/quotaon/quotaon.c
+++ b/usr.sbin/quotaon/quotaon.c
@@ -154,10 +154,7 @@ usage(void)
 }
 
 int
-quotaonoff(fs, offmode, type, qfpathname)
-	register struct fstab *fs;
-	int offmode, type;
-	char *qfpathname;
+quotaonoff(struct fstab *fs, int offmode, int type, char *qfpathname)
 {
 
 	if (strcmp(fs->fs_file, "/") && readonly(fs))
diff --git a/usr.sbin/repquota/Makefile b/usr.sbin/repquota/Makefile
index 087e890ed35..208abd6553a 100644
--- a/usr.sbin/repquota/Makefile
+++ b/usr.sbin/repquota/Makefile
@@ -4,6 +4,4 @@
 PROG=	repquota
 MAN=	repquota.8
 
-WARNS?=	4
-
 .include 
diff --git a/usr.sbin/repquota/repquota.c b/usr.sbin/repquota/repquota.c
index 19c185820b1..b6d4be6b009 100644
--- a/usr.sbin/repquota/repquota.c
+++ b/usr.sbin/repquota/repquota.c
@@ -60,7 +60,6 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
-#include 
 
 /* Let's be paranoid about block size */
 #if 10 > DEV_BSHIFT
@@ -227,9 +226,9 @@ repquota(struct fstab *fs, int type, char *qfpathname)
 	}
 	fclose(qf);
 	printf("%*s                 Block  limits                    File  limits\n",
-		max(UT_NAMESIZE,10), " ");
+		max(MAXLOGNAME-1,10), " ");
 	printf("%s%*s   used     soft     hard  grace     used    soft    hard  grace\n",
-		type == USRQUOTA ? "User " : "Group", max(UT_NAMESIZE,10), " ");
+		type == USRQUOTA ? "User " : "Group", max(MAXLOGNAME-1,10), " ");
 	for (id = 0; id <= highid[type]; id++) {
 		fup = lookup(id, type);
 		if (fup == 0)
@@ -237,7 +236,7 @@ repquota(struct fstab *fs, int type, char *qfpathname)
 		if (fup->fu_dqblk.dqb_curinodes == 0 &&
 		    fup->fu_dqblk.dqb_curblocks == 0)
 			continue;
-		printf("%-*s ", max(UT_NAMESIZE,10), fup->fu_name);
+		printf("%-*s ", max(MAXLOGNAME-1,10), fup->fu_name);
 		printf("%c%c %8lu %8lu %8lu %6s",
 			fup->fu_dqblk.dqb_bsoftlimit &&
 			    fup->fu_dqblk.dqb_curblocks >=
diff --git a/usr.sbin/rip6query/Makefile b/usr.sbin/rip6query/Makefile
index e0ea62130bc..fac90282197 100644
--- a/usr.sbin/rip6query/Makefile
+++ b/usr.sbin/rip6query/Makefile
@@ -4,7 +4,6 @@
 PROG=	rip6query
 MAN=	rip6query.8
 
-WARNS?=	2
 CFLAGS+= -I${.CURDIR}/../route6d
 
 .include 
diff --git a/usr.sbin/rip6query/rip6query.c b/usr.sbin/rip6query/rip6query.c
index 0bf56fdc931..4426bbc1c21 100644
--- a/usr.sbin/rip6query/rip6query.c
+++ b/usr.sbin/rip6query/rip6query.c
@@ -68,9 +68,7 @@ static const char *sa_n2a(struct sockaddr *);
 static const char *inet6_n2a(struct in6_addr *);
 
 int
-main(argc, argv)
-	int argc;
-	char **argv;
+main(int argc, char *argv[])
 {
 	struct netinfo6 *np;
 	struct sockaddr_in6 fsock;
@@ -175,15 +173,14 @@ main(argc, argv)
 }
 
 static void
-usage()
+usage(void)
 {
 	fprintf(stderr, "usage: rip6query [-I iface] address\n");
 }
 
 /* getnameinfo() is preferred as we may be able to show ifindex as ifname */
 static const char *
-sa_n2a(sa)
-	struct sockaddr *sa;
+sa_n2a(struct sockaddr *sa)
 {
 	static char buf[NI_MAXHOST];
 
@@ -195,8 +192,7 @@ sa_n2a(sa)
 }
 
 static const char *
-inet6_n2a(addr)
-	struct in6_addr *addr;
+inet6_n2a(struct in6_addr *addr)
 {
 	static char buf[NI_MAXHOST];
 
diff --git a/usr.sbin/rmt/Makefile b/usr.sbin/rmt/Makefile
index 579a02bb668..8a678b6fa8b 100644
--- a/usr.sbin/rmt/Makefile
+++ b/usr.sbin/rmt/Makefile
@@ -4,8 +4,6 @@
 PROG=	rmt
 MAN=	rmt.8
 
-WARNS?=	4
-
 # called from /usr/src/etc/Makefile
 etc-rmt:
 	rm -f ${DESTDIR}/etc/rmt
diff --git a/usr.sbin/rmt/rmt.c b/usr.sbin/rmt/rmt.c
index af4f954e07b..f5e3cc14d01 100644
--- a/usr.sbin/rmt/rmt.c
+++ b/usr.sbin/rmt/rmt.c
@@ -206,8 +206,7 @@ ioerror:
 }
 
 void
-getstring(bp)
-	char *bp;
+getstring(char *bp)
 {
 	int i;
 	char *cp = bp;
@@ -222,9 +221,7 @@ getstring(bp)
 }
 
 char *
-checkbuf(rec, size)
-	char *rec;
-	int size;
+checkbuf(char *rec, int size)
 {
 
 	if (size <= maxrecsize)
@@ -244,8 +241,7 @@ checkbuf(rec, size)
 }
 
 void
-error(num)
-	int num;
+error(int num)
 {
 
 	DEBUG2("rmtd: E %d (%s)\n", num, strerror(num));
diff --git a/usr.sbin/rndc-confgen/Makefile b/usr.sbin/rndc-confgen/Makefile
index b8a52dd4d57..08f2d7ed98f 100644
--- a/usr.sbin/rndc-confgen/Makefile
+++ b/usr.sbin/rndc-confgen/Makefile
@@ -17,6 +17,8 @@ SRCS+=		rndc-confgen.c util.c
 
 CFLAGS+=	-I${SRCDIR}/unix/include -I${SRCDIR}/include -I${LIB_BIND_DIR}
 
+WARNS?=		3
+
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
diff --git a/usr.sbin/rndc/Makefile b/usr.sbin/rndc/Makefile
index 2ca76976e5a..9cd356f795f 100644
--- a/usr.sbin/rndc/Makefile
+++ b/usr.sbin/rndc/Makefile
@@ -17,6 +17,8 @@ SRCS+=		rndc.c util.c
 
 CFLAGS+=	-I${SRCDIR}/unix/include -I${SRCDIR}/include -I${LIB_BIND_DIR}
 
+WARNS?=		3
+
 DPADD+=		${BIND_DPADD} ${CRYPTO_DPADD} ${PTHREAD_DPADD}
 LDADD+=		${BIND_LDADD} ${CRYPTO_LDADD} ${PTHREAD_LDADD}
 
diff --git a/usr.sbin/route6d/Makefile b/usr.sbin/route6d/Makefile
index 308aad76133..df23d33aea5 100644
--- a/usr.sbin/route6d/Makefile
+++ b/usr.sbin/route6d/Makefile
@@ -6,4 +6,6 @@ MAN=	route6d.8
 
 CFLAGS+= -DHAVE_POLL_H
 
+WARNS?=	1
+
 .include 
diff --git a/usr.sbin/rpc.lockd/Makefile b/usr.sbin/rpc.lockd/Makefile
index 961ad17d4bf..c81da820279 100644
--- a/usr.sbin/rpc.lockd/Makefile
+++ b/usr.sbin/rpc.lockd/Makefile
@@ -7,7 +7,7 @@ MLINKS=	rpc.lockd.8 lockd.8
 SRCS=	kern.c nlm_prot_svc.c lockd.c lock_proc.c lockd_lock.c
 
 CFLAGS+= -I. -I${DESTDIR}/usr/include/rpcsvc
-#WARNS?= 2
+WARNS?= 0
 
 DPADD=	${LIBRPCSVC} ${LIBUTIL}
 LDADD=	-lrpcsvc -lutil
diff --git a/usr.sbin/rpc.statd/Makefile b/usr.sbin/rpc.statd/Makefile
index 6d8053c29be..e69a9d6e209 100644
--- a/usr.sbin/rpc.statd/Makefile
+++ b/usr.sbin/rpc.statd/Makefile
@@ -5,7 +5,7 @@ MAN=	rpc.statd.8
 SRCS=	file.c sm_inter_svc.c sm_inter.h statd.c procs.c
 
 CFLAGS+= -I.
-#WARNS?= 2
+WARNS?= 2
 
 DPADD=	${LIBRPCSVC}
 LDADD=	-lrpcsvc
diff --git a/usr.sbin/rpc.umntall/Makefile b/usr.sbin/rpc.umntall/Makefile
index 0a829c301cb..fc4a3998c07 100644
--- a/usr.sbin/rpc.umntall/Makefile
+++ b/usr.sbin/rpc.umntall/Makefile
@@ -5,6 +5,6 @@ PROG=	rpc.umntall
 MAN=	rpc.umntall.8
 SRCS=	rpc.umntall.c mounttab.c
 
-#WARNS?= 2
+WARNS?= 3
 
 .include 
diff --git a/usr.sbin/rpc.umntall/mounttab.c b/usr.sbin/rpc.umntall/mounttab.c
index 9d7fe2f89ed..56333cae590 100644
--- a/usr.sbin/rpc.umntall/mounttab.c
+++ b/usr.sbin/rpc.umntall/mounttab.c
@@ -45,14 +45,15 @@ __FBSDID("$FreeBSD$");
 
 struct mtablist *mtabhead;
 
-static void badline(char *field, char *bad);
+static void badline(const char *field, const char *bad);
 
 /*
  * Add an entry to PATH_MOUNTTAB for each mounted NFS filesystem,
  * so the client can notify the NFS server even after reboot.
  */
 int
-add_mtab(char *hostp, char *dirp) {
+add_mtab(char *hostp, char *dirp)
+{
 	FILE *mtabfile;
 
 	if ((mtabfile = fopen(PATH_MOUNTTAB, "a")) == NULL)
@@ -69,12 +70,13 @@ add_mtab(char *hostp, char *dirp) {
  * Read mounttab line for line and return struct mtablist.
  */
 int
-read_mtab() {
+read_mtab(void)
+{
 	struct mtablist **mtabpp, *mtabp;
 	char *hostp, *dirp, *cp;
 	char str[STRSIZ];
 	char *timep, *endp;
-	time_t time;
+	time_t actiontime;
 	u_long ultmp;
 	FILE *mtabfile;
 
@@ -86,7 +88,7 @@ read_mtab() {
 			return (0);
 		}
 	}
-	time = 0;
+	actiontime = 0;
 	mtabpp = &mtabhead;
 	while (fgets(str, STRSIZ, mtabfile) != NULL) {
 		cp = str;
@@ -113,13 +115,13 @@ read_mtab() {
 			badline("time", timep);
 			continue;
 		}
-		time = ultmp;
+		actiontime = ultmp;
 		if ((mtabp = malloc(sizeof (struct mtablist))) == NULL) {
 			syslog(LOG_ERR, "malloc");
 			fclose(mtabfile);
 			return (0);
 		}
-		mtabp->mtab_time = time;
+		mtabp->mtab_time = actiontime;
 		memmove(mtabp->mtab_host, hostp, MNTNAMLEN);
 		mtabp->mtab_host[MNTNAMLEN - 1] = '\0';
 		memmove(mtabp->mtab_dirp, dirp, MNTPATHLEN);
@@ -137,7 +139,8 @@ read_mtab() {
  * Unlink PATH_MOUNTAB if no entry is left.
  */
 int
-write_mtab(int verbose) {
+write_mtab(int verbose)
+{
 	struct mtablist *mtabp, *mp;
 	FILE *mtabfile;
 	int line;
@@ -180,7 +183,8 @@ write_mtab(int verbose) {
  * Mark the entries as clean where RPC calls have been done successfully.
  */
 void
-clean_mtab(char *hostp, char *dirp, int verbose) {
+clean_mtab(char *hostp, char *dirp, int verbose)
+{
 	struct mtablist *mtabp;
 	char *host;
 
@@ -205,7 +209,8 @@ clean_mtab(char *hostp, char *dirp, int verbose) {
  * Free struct mtablist mtab.
  */
 void
-free_mtab() {
+free_mtab(void)
+{
 	struct mtablist *mtabp;
 
 	while ((mtabp = mtabhead) != NULL) {
@@ -218,7 +223,8 @@ free_mtab() {
  * Print bad lines to syslog.
  */
 static void
-badline(char *field, char *bad) {
+badline(const char *field, const char *bad)
+{
 	syslog(LOG_ERR, "bad mounttab %s field '%s'", field,
 	    (bad == NULL) ? "" : bad);
 }
diff --git a/usr.sbin/rpc.yppasswdd/Makefile b/usr.sbin/rpc.yppasswdd/Makefile
index bbd2658bafd..b6a0a8c8630 100644
--- a/usr.sbin/rpc.yppasswdd/Makefile
+++ b/usr.sbin/rpc.yppasswdd/Makefile
@@ -14,7 +14,7 @@ SRCS=	util.c yp_access.c yp_dblookup.c yp_dbwrite.c \
 GENSRCS=yp.h yp_clnt.c yppasswd.h yppasswd_private.h yppasswd_private_svc.c \
 	yppasswd_private_xdr.c yppasswd_svc.c
 
-WARNS?=	 4
+WARNS?=	 5
 CFLAGS+= -fno-strict-aliasing
 CFLAGS+= -I${.CURDIR}/../../usr.sbin/vipw \
 	 -I${.CURDIR}/../../usr.sbin/ypserv \
diff --git a/usr.sbin/rpc.ypupdated/Makefile b/usr.sbin/rpc.ypupdated/Makefile
index 4fe19c9c9ca..fecb83760dd 100644
--- a/usr.sbin/rpc.ypupdated/Makefile
+++ b/usr.sbin/rpc.ypupdated/Makefile
@@ -11,6 +11,8 @@ SRCS=	ypupdate_prot_svc.c ypupdate_prot.h ypupdated_main.c \
 #CFLAGS+= -DYP
 CFLAGS+= -I${.CURDIR}/../ypserv -I. -I${.CURDIR}/../../libexec/ypxfr
 
+WARNS?=	1
+
 DPADD=	${LIBRPCSVC}
 LDADD=	-lrpcsvc
 
diff --git a/usr.sbin/rpc.ypxfrd/Makefile b/usr.sbin/rpc.ypxfrd/Makefile
index 70729b12e67..ee9e2425d1e 100644
--- a/usr.sbin/rpc.ypxfrd/Makefile
+++ b/usr.sbin/rpc.ypxfrd/Makefile
@@ -9,6 +9,8 @@ SRCS=	ypxfrd_svc.c ypxfrd.h ypxfrd_server.c yp_error.c \
 
 CFLAGS+= -I. -DXFRBLOCKSIZE=65535
 
+WARNS?=	2
+
 DPADD=	${LIBRPCSVC}
 LDADD=	-lrpcsvc
 
diff --git a/usr.sbin/rpcbind/Makefile b/usr.sbin/rpcbind/Makefile
index 3251378651a..dd042f217a9 100644
--- a/usr.sbin/rpcbind/Makefile
+++ b/usr.sbin/rpcbind/Makefile
@@ -14,6 +14,8 @@ CFLAGS+= -DPORTMAP -DLIBWRAP
 CFLAGS+= -DINET6
 .endif
 
+WARNS?=	1
+
 DPADD=	${LIBWRAP} ${LIBUTIL}
 LDADD=	-lwrap -lutil
 
diff --git a/usr.sbin/rrenumd/Makefile b/usr.sbin/rrenumd/Makefile
index c31a7c7ce93..091e52878c3 100644
--- a/usr.sbin/rrenumd/Makefile
+++ b/usr.sbin/rrenumd/Makefile
@@ -21,6 +21,8 @@ SRCS=	rrenumd.c  parser.y lexer.l
 CFLAGS+= -DIPSEC -I. -I${.CURDIR}
 YFLAGS=	-d
 
+WARNS?=	2
+
 LDADD=	-lipsec -ll -ly
 DPADD=	${LIBIPSEC} ${LIBL} ${LIBY}
 
diff --git a/usr.sbin/rtadvd/Makefile b/usr.sbin/rtadvd/Makefile
index f7e2021cd1f..90b45f102d8 100644
--- a/usr.sbin/rtadvd/Makefile
+++ b/usr.sbin/rtadvd/Makefile
@@ -20,4 +20,6 @@ SRCS=	rtadvd.c rrenum.c advcap.c if.c config.c timer.c dump.c
 
 CFLAGS+= -DHAVE_ARC4RANDOM -DHAVE_POLL_H -DROUTEINFO
 
+WARNS?=	1
+
 .include 
diff --git a/usr.sbin/rtprio/Makefile b/usr.sbin/rtprio/Makefile
index ebc7bd1a37c..b612f2bc974 100644
--- a/usr.sbin/rtprio/Makefile
+++ b/usr.sbin/rtprio/Makefile
@@ -5,4 +5,6 @@ PROG=	rtprio
 LINKS=  ${BINDIR}/rtprio ${BINDIR}/idprio
 MLINKS= rtprio.1 idprio.1
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/rtsold/Makefile b/usr.sbin/rtsold/Makefile
index 1afa0f6f454..ad4059aad66 100644
--- a/usr.sbin/rtsold/Makefile
+++ b/usr.sbin/rtsold/Makefile
@@ -21,6 +21,8 @@ SRCS=	rtsold.c rtsol.c if.c probe.c dump.c rtsock.c
 
 CFLAGS+= -DHAVE_ARC4RANDOM -DHAVE_POLL_H
 
+WARNS?=	1
+
 DPADD=	${LIBKVM}
 LDADD=	-lkvm
 
diff --git a/usr.sbin/rtsold/probe.c b/usr.sbin/rtsold/probe.c
index 61c47bc6a58..6d0ea79fd39 100644
--- a/usr.sbin/rtsold/probe.c
+++ b/usr.sbin/rtsold/probe.c
@@ -118,7 +118,7 @@ defrouter_probe(struct ifinfo *ifinfo)
 		goto closeandend;
 	}
 
-	for (i = 0; dr.defrouter[i].if_index && i < PRLSTSIZ; i++) {
+	for (i = 0; i < DRLSTSIZ && dr.defrouter[i].if_index; i++) {
 		if (ifindex && dr.defrouter[i].if_index == ifindex) {
 			/* sanity check */
 			if (!IN6_IS_ADDR_LINKLOCAL(&dr.defrouter[i].rtaddr)) {
diff --git a/usr.sbin/rwhod/Makefile b/usr.sbin/rwhod/Makefile
index def0e6e1459..439a11c932b 100644
--- a/usr.sbin/rwhod/Makefile
+++ b/usr.sbin/rwhod/Makefile
@@ -4,7 +4,9 @@
 PROG=	rwhod
 MAN=	rwhod.8
 
-# XXX breaks on Alpha due to alignment constraints
-#WARNS?=	4
+WARNS?=	3
+
+DPADD=	${LIBULOG}
+LDADD=	-lulog
 
 .include 
diff --git a/usr.sbin/rwhod/rwhod.c b/usr.sbin/rwhod/rwhod.c
index 96fd9ec42e5..9679faed402 100644
--- a/usr.sbin/rwhod/rwhod.c
+++ b/usr.sbin/rwhod/rwhod.c
@@ -67,8 +67,9 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 #include 
 #include 
 
@@ -146,7 +147,7 @@ struct	neighbor {
 struct	neighbor *neighbors;
 struct	whod mywd;
 struct	servent *sp;
-int	s, utmpf;
+int	s;
 
 #define	WHDRSIZE	(int)(sizeof(mywd) - sizeof(mywd.wd_we))
 
@@ -231,11 +232,6 @@ main(int argc, char *argv[])
 		*cp = '\0';
 	strncpy(mywd.wd_hostname, myname, sizeof(mywd.wd_hostname) - 1);
 	mywd.wd_hostname[sizeof(mywd.wd_hostname) - 1] = '\0';
-	utmpf = open(_PATH_UTMP, O_RDONLY|O_CREAT, 0644);
-	if (utmpf < 0) {
-		syslog(LOG_ERR, "%s: %m", _PATH_UTMP);
-		exit(1);
-	}
 	getboottime(0);
 	if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
 		syslog(LOG_ERR, "socket: %m");
@@ -383,73 +379,43 @@ verify(name, maxlen)
 	return (size > 0);
 }
 
-int	utmptime;
-int	utmpent;
-int	utmpsize = 0;
-struct	utmp *utmp;
-int	alarmcount;
-
 void
-onalrm(signo)
-	int signo __unused;
+onalrm(int signo __unused)
 {
-	register struct neighbor *np;
-	register struct whoent *we = mywd.wd_we, *wlast;
-	register int i;
+	struct neighbor *np;
+	struct whoent *we = mywd.wd_we, *wend;
 	struct stat stb;
+	struct utmpx *ut;
+	static int alarmcount = 0;
 	double avenrun[3];
 	time_t now;
-	int cc;
+	int i, cc;
 
 	now = time(NULL);
 	if (alarmcount % 10 == 0)
 		getboottime(0);
 	alarmcount++;
-	(void) fstat(utmpf, &stb);
-	if ((stb.st_mtime != utmptime) || (stb.st_size > utmpsize)) {
-		utmptime = stb.st_mtime;
-		if (stb.st_size > utmpsize) {
-			utmpsize = stb.st_size + 10 * sizeof(struct utmp);
-			utmp = (struct utmp *)reallocf(utmp, utmpsize);
-			if (utmp == NULL) {
-				syslog(LOG_WARNING, "malloc failed");
-				utmpsize = 0;
-				goto done;
-			}
-		}
-		(void) lseek(utmpf, (off_t)0, L_SET);
-		cc = read(utmpf, (char *)utmp, stb.st_size);
-		if (cc < 0) {
-			syslog(LOG_ERR, "read(%s): %m", _PATH_UTMP);
-			goto done;
-		}
-		wlast = &mywd.wd_we[1024 / sizeof(struct whoent) - 1];
-		utmpent = cc / sizeof(struct utmp);
-		for (i = 0; i < utmpent; i++)
-			if (utmp[i].ut_name[0]) {
-				memcpy(we->we_utmp.out_line, utmp[i].ut_line,
-				   sizeof(utmp[i].ut_line));
-				memcpy(we->we_utmp.out_name, utmp[i].ut_name,
-				   sizeof(utmp[i].ut_name));
-				we->we_utmp.out_time = htonl(utmp[i].ut_time);
-				if (we >= wlast)
-					break;
-				we++;
-			}
-		utmpent = we - mywd.wd_we;
+	wend = &mywd.wd_we[1024 / sizeof(struct whoent)];
+	setutxent();
+	while ((ut = getutxent()) != NULL && we < wend) {
+		if (ut->ut_type != USER_PROCESS)
+			continue;
+		strncpy(we->we_utmp.out_line, ut->ut_line,
+		   sizeof(we->we_utmp.out_line));
+		strncpy(we->we_utmp.out_name, ut->ut_user,
+		   sizeof(we->we_utmp.out_name));
+		we->we_utmp.out_time =
+		    htonl(_time_to_time32(ut->ut_tv.tv_sec));
+		we++;
 	}
+	endutxent();
 
-	/*
-	 * The test on utmpent looks silly---after all, if no one is
-	 * logged on, why worry about efficiency?---but is useful on
-	 * (e.g.) compute servers.
-	 */
-	if (utmpent && chdir(_PATH_DEV)) {
+	if (chdir(_PATH_DEV)) {
 		syslog(LOG_ERR, "chdir(%s): %m", _PATH_DEV);
 		exit(1);
 	}
-	we = mywd.wd_we;
-	for (i = 0; i < utmpent; i++) {
+	wend = we;
+	for (we = mywd.wd_we; we < wend; we++) {
 		if (stat(we->we_utmp.out_line, &stb) >= 0)
 			we->we_idle = htonl(now - stb.st_atime);
 		we++;
@@ -457,7 +423,7 @@ onalrm(signo)
 	(void)getloadavg(avenrun, sizeof(avenrun)/sizeof(avenrun[0]));
 	for (i = 0; i < 3; i++)
 		mywd.wd_loadav[i] = htonl((u_long)(avenrun[i] * 100));
-	cc = (char *)we - (char *)&mywd;
+	cc = (char *)wend - (char *)&mywd;
 	mywd.wd_sendtime = htonl(_time_to_time32(time(NULL)));
 	mywd.wd_vers = WHODVERSION;
 	mywd.wd_type = WHODTYPE_STATUS;
@@ -485,11 +451,10 @@ onalrm(signo)
 		} else (void) sendto(s, (char *)&mywd, cc, 0,
 					np->n_addr, np->n_addrlen);
 	}
-	if (utmpent && chdir(_PATH_RWHODIR)) {
+	if (chdir(_PATH_RWHODIR)) {
 		syslog(LOG_ERR, "chdir(%s): %m", _PATH_RWHODIR);
 		exit(1);
 	}
-done:
 	(void) alarm(AL_INTERVAL);
 }
 
diff --git a/usr.sbin/sa/Makefile b/usr.sbin/sa/Makefile
index 718cbc846ef..0adf1f85e1f 100644
--- a/usr.sbin/sa/Makefile
+++ b/usr.sbin/sa/Makefile
@@ -6,6 +6,4 @@ PROG=	sa
 MAN=	sa.8
 SRCS=	main.c db.c pdb.c usrdb.c readrec.c
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/sa/main.c b/usr.sbin/sa/main.c
index 7be13e54991..64736ac340c 100644
--- a/usr.sbin/sa/main.c
+++ b/usr.sbin/sa/main.c
@@ -300,7 +300,7 @@ main(int argc, char **argv)
 }
 
 static void
-usage()
+usage(void)
 {
 	(void)fprintf(stderr,
 		"usage: sa [-abcdDfijkKlmnqrstu] [-P file] [-U file] [-v cutoff] [file ...]\n");
diff --git a/usr.sbin/sa/pdb.c b/usr.sbin/sa/pdb.c
index 38beb558f70..e5e35f5db83 100644
--- a/usr.sbin/sa/pdb.c
+++ b/usr.sbin/sa/pdb.c
@@ -94,14 +94,14 @@ v1_to_v2(DBT *key __unused, DBT *data)
 
 /* Copy pdb_file to in-memory pacct_db. */
 int
-pacct_init()
+pacct_init(void)
 {
 	return (db_copy_in(&pacct_db, pdb_file, "process accounting",
 	    NULL, v1_to_v2));
 }
 
 void
-pacct_destroy()
+pacct_destroy(void)
 {
 	db_destroy(pacct_db, "process accounting");
 }
@@ -150,14 +150,14 @@ pacct_add(const struct cmdinfo *ci)
 
 /* Copy in-memory pacct_db to pdb_file. */
 int
-pacct_update()
+pacct_update(void)
 {
 	return (db_copy_out(pacct_db, pdb_file, "process accounting",
 	    NULL));
 }
 
 void
-pacct_print()
+pacct_print(void)
 {
 	BTREEINFO bti;
 	DBT key, data, ndata;
diff --git a/usr.sbin/sa/usrdb.c b/usr.sbin/sa/usrdb.c
index 07a5033c398..50778ef5047 100644
--- a/usr.sbin/sa/usrdb.c
+++ b/usr.sbin/sa/usrdb.c
@@ -97,7 +97,7 @@ v1_to_v2(DBT *key, DBT *data)
 
 /* Copy usrdb_file to in-memory usracct_db. */
 int
-usracct_init()
+usracct_init(void)
 {
 	BTREEINFO bti;
 
@@ -109,7 +109,7 @@ usracct_init()
 }
 
 void
-usracct_destroy()
+usracct_destroy(void)
 {
 	db_destroy(usracct_db, "user accounting");
 }
@@ -166,7 +166,7 @@ usracct_add(const struct cmdinfo *ci)
 
 /* Copy in-memory usracct_db to usrdb_file. */
 int
-usracct_update()
+usracct_update(void)
 {
 	BTREEINFO bti;
 
@@ -178,7 +178,7 @@ usracct_update()
 }
 
 void
-usracct_print()
+usracct_print(void)
 {
 	DBT key, data;
 	struct userinfo uistore, *ui = &uistore;
diff --git a/usr.sbin/sade/termcap.c b/usr.sbin/sade/termcap.c
index 3e80a415bbb..1c2f39be544 100644
--- a/usr.sbin/sade/termcap.c
+++ b/usr.sbin/sade/termcap.c
@@ -83,13 +83,13 @@ set_termcap(void)
 #else
 	if (ColorDisplay) {
 	    if (!term) {
-		if (setenv("TERM", "cons25", 1) < 0)
+		if (setenv("TERM", "xterm", 1) < 0)
 		    return -1;
 	    }
 	}
 	else {
 	    if (!term) {
-		if (setenv("TERM", "cons25-m", 1) < 0)
+		if (setenv("TERM", "vt100", 1) < 0)
 		    return -1;
 	    }
 	}
diff --git a/usr.sbin/sendmail/Makefile b/usr.sbin/sendmail/Makefile
index 0b89297d8d9..a9f7fbbafd6 100644
--- a/usr.sbin/sendmail/Makefile
+++ b/usr.sbin/sendmail/Makefile
@@ -43,6 +43,8 @@ CFLAGS+= ${DBMDEF} ${NIS} -DTCPWRAPPERS ${MAPS}
 CFLAGS+= -DNETINET6
 .endif
 
+WARNS?=	1
+
 DPADD=	${LIBUTIL} ${LIBWRAP}
 LDADD=	-lutil -lwrap
 
diff --git a/usr.sbin/service/Makefile b/usr.sbin/service/Makefile
new file mode 100644
index 00000000000..a03714dc6f9
--- /dev/null
+++ b/usr.sbin/service/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+SCRIPTS=service.sh
+MAN=	service.8
+
+.include 
+
diff --git a/usr.sbin/service/service.8 b/usr.sbin/service/service.8
new file mode 100644
index 00000000000..a7f31353f4f
--- /dev/null
+++ b/usr.sbin/service/service.8
@@ -0,0 +1,131 @@
+.\" Copyright (c) 2009 Douglas Barton
+.\" 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.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd December 26, 2009
+.Dt service 8
+.Os
+.Sh NAME
+.Nm service
+.Nd "control (start/stop/etc.) or list system services"
+.Sh SYNOPSIS
+.Nm
+.Fl e
+.Nm
+.Op Fl v
+.Fl l | r
+.Nm
+.Op Fl v
+.Ar  start|stop|etc.
+.Sh DESCRIPTION
+The
+.Nm
+command is an easy interface to the rc.d system.
+Its primary purpose is to start and stop services provided
+by the rc.d scripts.
+When used for this purpose it will set the same restricted
+environment that is in use at boot time (see below).
+It can also be used to list
+the scripts using various criteria.
+.Pp
+The options are as follows:
+.Bl -tag -width F1
+.It Fl e
+List services that are enabled.
+The list of scripts to check is compiled using
+.Xr rcorder 8
+the same way that it is done in
+.Xr rc 8 ,
+then that list of scripts is checked for an
+.Qq rcvar
+assignment.
+If present the script is checked to see if it is enabled.
+.It Fl l
+List all files in
+.Pa /etc/rc.d
+and the local startup directories.
+As described in
+.Xr rc.conf 5
+this is usually
+.Pa /usr/local/etc/rc.d .
+All files will be listed whether they are an actual
+rc.d script or not.
+.It Fl r
+Generate the
+.Xr rcorder 8
+as in
+.Fl e
+above, but list all of the files, not just what is enabled.
+.It Fl v
+Be slightly more verbose
+.El
+.Sh ENVIRONMENT
+When used to run rc.d scripts the
+.Nm
+command sets
+.Ev HOME
+to
+.Pa /
+and
+.Ev PATH
+to
+.Pa /sbin:/bin:/usr/sbin:/usr/bin
+which is how they are set in
+.Pa /etc/rc
+at boot time.
+.Sh EXIT STATUS
+.Ex -std
+.Sh EXAMPLES
+The following are examples of typical usage of the
+.Nm
+command:
+.Pp
+.Dl "service named status"
+.Dl "service -rv"
+.Pp
+The following programmable completion entry can be use in
+.Xr bash 1
+for the names of the rc.d scripts:
+.Dl "_service () {"
+.Dl "	local cur"
+.Dl "	cur=${COMP_WORDS[COMP_CWORD]}"
+.Dl "	COMPREPLY=( $( compgen -W '$( service -l )' -- $cur ) )"
+.Dl "	return 0"
+.Dl "}"
+.Dl "complete -F _service service"
+.Sh SEE ALSO
+.Xr bash 1 Pq Pa ports/shells/bash ,
+.Xr rc.conf 5 ,
+.Xr rc 8 ,
+.Xr rcorder 8
+.Sh HISTORY
+The
+.Nm
+manual page service first appeared in
+.Fx 7.3 .
+.Sh AUTHORS
+This
+manual page was written by
+.An Douglas Barton  .
diff --git a/usr.sbin/service/service.sh b/usr.sbin/service/service.sh
new file mode 100755
index 00000000000..1794315fb73
--- /dev/null
+++ b/usr.sbin/service/service.sh
@@ -0,0 +1,120 @@
+#!/bin/sh
+
+# $FreeBSD$
+
+#  Copyright (c) 2009 Douglas Barton
+#  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.
+#
+#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+
+. /etc/rc.subr
+load_rc_config 'XXX'
+
+usage () {
+	echo ''
+	echo 'Usage:'
+	echo "${0##*/} -e"
+	echo "${0##*/} [-v] -l | -r"
+	echo "${0##*/} [-v]  start|stop|etc."
+	echo "${0##*/} -h"
+	echo ''
+	echo '-e	Show services that are enabled'
+	echo "-l	List all scripts in /etc/rc.d and $local_startup"
+	echo '-r	Show the results of boot time rcorder'
+	echo '-v	Verbose'
+	echo ''
+}
+
+while getopts 'ehlrv' COMMAND_LINE_ARGUMENT ; do
+	case "${COMMAND_LINE_ARGUMENT}" in
+	e)	ENABLED=eopt ;;
+	h)	usage ; exit 0 ;;
+	l)	LIST=lopt ;;
+	r)	RCORDER=ropt ;;
+	v)	VERBOSE=vopt ;;
+	*)	usage ; exit 1 ;;
+	esac
+done
+shift $(( $OPTIND - 1 ))
+
+if [ -n "$ENABLED" -o -n "$RCORDER" ]; then
+	# Copied from /etc/rc
+	skip="-s nostart"
+	if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then
+		skip="$skip -s nojail"
+	fi
+	[ -n "$local_startup" ] && find_local_scripts_new
+	files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null`
+fi
+
+if [ -n "$ENABLED" ]; then
+	for file in $files; do
+		if grep -q ^rcvar $file; then
+			eval `grep ^name= $file`
+			eval `grep ^rcvar $file`
+			checkyesno $rcvar 2>/dev/null && echo $file
+		fi
+	done
+	exit 0
+fi
+
+if [ -n "$LIST" ]; then
+	for dir in /etc/rc.d $local_startup; do
+		[ -n "$VERBOSE" ] && echo "From ${dir}:"
+		cd $dir && for file in *; do echo $file; done
+	done
+	exit 0
+fi
+
+if [ -n "$RCORDER" ]; then
+	for file in $files; do
+		echo $file
+		if [ -n "$VERBOSE" ]; then
+			case "$file" in
+			*/${early_late_divider})
+				echo '========= Early/Late Divider =========' ;;
+			esac
+		fi
+	done
+	exit 0
+fi
+
+if [ $# -gt 1 ]; then
+	script=$1
+	shift
+else
+	usage
+	exit 1
+fi
+
+cd /
+for dir in /etc/rc.d $local_startup; do
+	if [ -x "$dir/$script" ]; then
+		[ -n "$VERBOSE" ] && echo "$script is located in $dir"
+		exec env -i HOME=/ PATH=/sbin:/bin:/usr/sbin:/usr/bin $dir/$script $*
+	fi
+done
+
+# If the script was not found
+echo "$script does not exist in /etc/rc.d or the local startup"
+echo "directories (${local_startup})"
+exit 1
diff --git a/usr.sbin/setfmac/Makefile b/usr.sbin/setfmac/Makefile
index 34b979bdf13..bcbd85fe275 100644
--- a/usr.sbin/setfmac/Makefile
+++ b/usr.sbin/setfmac/Makefile
@@ -4,6 +4,4 @@ PROG=   setfmac
 LINKS=	${BINDIR}/setfmac ${BINDIR}/setfsmac
 MAN=	setfmac.8 setfsmac.8
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/setpmac/Makefile b/usr.sbin/setpmac/Makefile
index ae7ee026e9f..a8bc1acca26 100644
--- a/usr.sbin/setpmac/Makefile
+++ b/usr.sbin/setpmac/Makefile
@@ -3,6 +3,4 @@
 PROG=   setpmac
 MAN=	setpmac.8
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/smbmsg/Makefile b/usr.sbin/smbmsg/Makefile
index a581b2cd35d..2ae64044280 100644
--- a/usr.sbin/smbmsg/Makefile
+++ b/usr.sbin/smbmsg/Makefile
@@ -3,6 +3,5 @@
 
 PROG=	smbmsg
 MAN=	smbmsg.8
-WARNS=	6
 
 .include 
diff --git a/usr.sbin/snapinfo/snapinfo.c b/usr.sbin/snapinfo/snapinfo.c
index 55b54a546b2..3ee66da9317 100644
--- a/usr.sbin/snapinfo/snapinfo.c
+++ b/usr.sbin/snapinfo/snapinfo.c
@@ -140,7 +140,7 @@ find_snapshot(struct statfs *sfs)
 
 int
 compare_function(const char *path, const struct stat *st, int flags,
-struct FTW * ftwv)
+    struct FTW * ftwv __unused)
 {
 
 	if (flags == FTW_F && st->st_ino == inode) {
diff --git a/usr.sbin/sysinstall/Makefile b/usr.sbin/sysinstall/Makefile
index db61cae2d06..bd08ac1dbe4 100644
--- a/usr.sbin/sysinstall/Makefile
+++ b/usr.sbin/sysinstall/Makefile
@@ -20,6 +20,8 @@ CFLAGS+= -DPC98
 .endif
 CFLAGS+= -I${.CURDIR}/../../gnu/lib/libdialog -I.
 
+WARNS?=	1
+
 DPADD=	${LIBDIALOG} ${LIBNCURSES} ${LIBUTIL} ${LIBDISK} ${LIBFTPIO}
 LDADD=	-ldialog -lncurses -lutil -ldisk -lftpio
 
diff --git a/usr.sbin/sysinstall/disks.c b/usr.sbin/sysinstall/disks.c
index 919b97df033..a1c09b659ef 100644
--- a/usr.sbin/sysinstall/disks.c
+++ b/usr.sbin/sysinstall/disks.c
@@ -333,7 +333,7 @@ diskGetSelectCount(Device ***devs)
 void
 diskPartition(Device *dev)
 {
-    char *cp, *p;
+    char *p;
     int rv, key = 0;
     int i;
     Boolean chunking;
diff --git a/usr.sbin/sysinstall/label.c b/usr.sbin/sysinstall/label.c
index 2ca947a724d..08cd3dfe5e5 100644
--- a/usr.sbin/sysinstall/label.c
+++ b/usr.sbin/sysinstall/label.c
@@ -384,11 +384,7 @@ new_part(PartType type, char *mpoint, Boolean newfs)
 	pi->newfs_data.newfs_ufs.acls = FALSE;
 	pi->newfs_data.newfs_ufs.multilabel = FALSE;
 	pi->newfs_data.newfs_ufs.softupdates = strcmp(mpoint, "/");
-#ifdef PC98
-	pi->newfs_data.newfs_ufs.ufs1 = TRUE;
-#else
 	pi->newfs_data.newfs_ufs.ufs1 = FALSE;
-#endif
     }
 
     return pi;
diff --git a/usr.sbin/sysinstall/termcap.c b/usr.sbin/sysinstall/termcap.c
index 0df0a77cb5e..4f2b2e90cd9 100644
--- a/usr.sbin/sysinstall/termcap.c
+++ b/usr.sbin/sysinstall/termcap.c
@@ -125,17 +125,17 @@ set_termcap(void)
 #else
 	if (ColorDisplay) {
 	    if (!term) {
-		if (setenv("TERM", "cons25", 1) < 0)
+		if (setenv("TERM", "xterm", 1) < 0)
 		    return -1;
-		if (setenv("TERMCAP", termcap_cons25, 1) < 0)
+		if (setenv("TERMCAP", termcap_xterm, 1) < 0)
 		    return -1;
 	    }
 	}
 	else {
 	    if (!term) {
-		if (setenv("TERM", "cons25-m", 1) < 0)
+		if (setenv("TERM", "vt100", 1) < 0)
 		    return -1;
-		if (setenv("TERMCAP", termcap_cons25_m, 1) < 0)
+		if (setenv("TERMCAP", termcap_vt100, 1) < 0)
 		    return -1;
 	    }
 	}
diff --git a/usr.sbin/sysinstall/user.c b/usr.sbin/sysinstall/user.c
index ed2e77098b9..72b67161f4e 100644
--- a/usr.sbin/sysinstall/user.c
+++ b/usr.sbin/sysinstall/user.c
@@ -35,7 +35,6 @@
  */
 
 #include "sysinstall.h"
-#include 
 #include 
 #include 
 #include 
@@ -47,7 +46,7 @@
 #define GNAME_FIELD_LEN 32
 #define GID_FIELD_LEN 11
 #define GMEMB_FIELD_LEN 64
-
+#define UNAME_FIELD_LEN MAXLOGNAME
 #define UID_FIELD_LEN 11
 #define UGROUP_FIELD_LEN GNAME_FIELD_LEN
 #define GECOS_FIELD_LEN 64
@@ -61,7 +60,7 @@
 static char gname[GNAME_FIELD_LEN],
 	gid[GID_FIELD_LEN],
 	gmemb[GMEMB_FIELD_LEN],
-	uname[UT_NAMESIZE + 1],
+	uname[UNAME_FIELD_LEN],
         passwd[PASSWD_FIELD_LEN],
         confpasswd[PASSWD_FIELD_LEN],
 	uid[UID_FIELD_LEN],
@@ -109,7 +108,7 @@ static Layout groupLayout[] = {
 /* The user configuration menu. */
 static Layout userLayout[] = {
 #define LAYOUT_UNAME		0
-    { 2, 6, UT_NAMESIZE, UT_NAMESIZE + 1,
+    { 2, 6, 16, UNAME_FIELD_LEN - 1,
       "Login ID:", "The login name of the new user (mandatory)",
       uname, STRINGOBJ, NULL },
 #define LAYOUT_UID		1
diff --git a/usr.sbin/syslogd/Makefile b/usr.sbin/syslogd/Makefile
index 1682b499de0..e5c823cfcea 100644
--- a/usr.sbin/syslogd/Makefile
+++ b/usr.sbin/syslogd/Makefile
@@ -9,8 +9,8 @@ PROG=	syslogd
 MAN=	syslog.conf.5 syslogd.8
 SRCS=	syslogd.c ttymsg.c
 
-DPADD=	${LIBUTIL}
-LDADD=	-lutil
+DPADD=	${LIBULOG} ${LIBUTIL}
+LDADD=	-lulog -lutil
 
 WARNS?=	3
 
diff --git a/usr.sbin/syslogd/syslogd.c b/usr.sbin/syslogd/syslogd.c
index 3e628a24ed2..5d50082beff 100644
--- a/usr.sbin/syslogd/syslogd.c
+++ b/usr.sbin/syslogd/syslogd.c
@@ -77,6 +77,7 @@ __FBSDID("$FreeBSD$");
 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -104,8 +105,9 @@ __FBSDID("$FreeBSD$");
 #include 
 #include 
 #include 
+#define	_ULOG_POSIX_NAMES
+#include 
 #include 
-#include 
 
 #include "pathnames.h"
 #include "ttymsg.h"
@@ -170,7 +172,7 @@ struct filed {
 #define PRI_GT	0x4
 	char	*f_program;		/* program this applies to */
 	union {
-		char	f_uname[MAXUNAMES][UT_NAMESIZE+1];
+		char	f_uname[MAXUNAMES][MAXLOGNAME];
 		struct {
 			char	f_hname[MAXHOSTNAMELEN];
 			struct addrinfo *f_addr;
@@ -352,6 +354,9 @@ main(int argc, char *argv[])
 	pid_t ppid = 1, spid;
 	socklen_t len;
 
+	if (madvise(NULL, 0, MADV_PROTECT) != 0)
+		dprintf("madvise() failed: %s\n", strerror(errno));
+
 	bindhostname = NULL;
 	while ((ch = getopt(argc, argv, "468Aa:b:cCdf:kl:m:nop:P:sS:Tuv"))
 	    != -1)
@@ -1338,29 +1343,20 @@ static void
 wallmsg(struct filed *f, struct iovec *iov, const int iovlen)
 {
 	static int reenter;			/* avoid calling ourselves */
-	FILE *uf;
-	struct utmp ut;
+	struct utmpx *ut;
 	int i;
 	const char *p;
-	char line[sizeof(ut.ut_line) + 1];
 
 	if (reenter++)
 		return;
-	if ((uf = fopen(_PATH_UTMP, "r")) == NULL) {
-		logerror(_PATH_UTMP);
-		reenter = 0;
-		return;
-	}
+	setutxent();
 	/* NOSTRICT */
-	while (fread((char *)&ut, sizeof(ut), 1, uf) == 1) {
-		if (ut.ut_name[0] == '\0')
+	while ((ut = getutxent()) != NULL) {
+		if (ut->ut_type != USER_PROCESS)
 			continue;
-		/* We must use strncpy since ut_* may not be NUL terminated. */
-		strncpy(line, ut.ut_line, sizeof(line) - 1);
-		line[sizeof(line) - 1] = '\0';
 		if (f->f_type == F_WALL) {
-			if ((p = ttymsg(iov, iovlen, line, TTYMSGTIME)) !=
-			    NULL) {
+			if ((p = ttymsg(iov, iovlen, ut->ut_line,
+			    TTYMSGTIME)) != NULL) {
 				errno = 0;	/* already in msg */
 				logerror(p);
 			}
@@ -1370,10 +1366,9 @@ wallmsg(struct filed *f, struct iovec *iov, const int iovlen)
 		for (i = 0; i < MAXUNAMES; i++) {
 			if (!f->f_un.f_uname[i][0])
 				break;
-			if (!strncmp(f->f_un.f_uname[i], ut.ut_name,
-			    UT_NAMESIZE)) {
-				if ((p = ttymsg(iov, iovlen, line, TTYMSGTIME))
-				    != NULL) {
+			if (!strcmp(f->f_un.f_uname[i], ut->ut_user)) {
+				if ((p = ttymsg(iov, iovlen, ut->ut_line,
+				    TTYMSGTIME)) != NULL) {
 					errno = 0;	/* already in msg */
 					logerror(p);
 				}
@@ -1381,7 +1376,7 @@ wallmsg(struct filed *f, struct iovec *iov, const int iovlen)
 			}
 		}
 	}
-	(void)fclose(uf);
+	endutxent();
 	reenter = 0;
 }
 
@@ -1998,9 +1993,9 @@ cfline(const char *line, struct filed *f, const char *prog, const char *host)
 		for (i = 0; i < MAXUNAMES && *p; i++) {
 			for (q = p; *q && *q != ','; )
 				q++;
-			(void)strncpy(f->f_un.f_uname[i], p, UT_NAMESIZE);
-			if ((q - p) > UT_NAMESIZE)
-				f->f_un.f_uname[i][UT_NAMESIZE] = '\0';
+			(void)strncpy(f->f_un.f_uname[i], p, MAXLOGNAME - 1);
+			if ((q - p) >= MAXLOGNAME)
+				f->f_un.f_uname[i][MAXLOGNAME - 1] = '\0';
 			else
 				f->f_un.f_uname[i][q - p] = '\0';
 			while (*q == ',' || *q == ' ')
diff --git a/usr.sbin/tcpdchk/Makefile b/usr.sbin/tcpdchk/Makefile
index 2936984377a..a49ffc60b74 100644
--- a/usr.sbin/tcpdchk/Makefile
+++ b/usr.sbin/tcpdchk/Makefile
@@ -15,6 +15,8 @@ CFLAGS+=-DREAL_DAEMON_DIR=\"/usr/libexec\" \
 CFLAGS+=-DINET6
 .endif
 
+WARNS?=	0
+
 DPADD=	${LIBWRAP}
 LDADD=	-lwrap
 
diff --git a/usr.sbin/tcpdmatch/Makefile b/usr.sbin/tcpdmatch/Makefile
index cbd61aa491e..caae746805d 100644
--- a/usr.sbin/tcpdmatch/Makefile
+++ b/usr.sbin/tcpdmatch/Makefile
@@ -14,6 +14,8 @@ CFLAGS+=-DREAL_DAEMON_DIR=\"/usr/libexec\" \
 CFLAGS+=-DINET6
 .endif
 
+WARNS?=	0
+
 DPADD=	${LIBWRAP}
 LDADD=	-lwrap
 
diff --git a/usr.sbin/tcpdrop/Makefile b/usr.sbin/tcpdrop/Makefile
index 44766eb9a0a..2fc606a2639 100644
--- a/usr.sbin/tcpdrop/Makefile
+++ b/usr.sbin/tcpdrop/Makefile
@@ -3,6 +3,5 @@
 
 PROG=	tcpdrop
 MAN=	tcpdrop.8
-WARNS?=	6
 
 .include 
diff --git a/usr.sbin/tcpdump/Makefile.inc b/usr.sbin/tcpdump/Makefile.inc
index 1e4d46f113a..6c4b6e22ba1 100644
--- a/usr.sbin/tcpdump/Makefile.inc
+++ b/usr.sbin/tcpdump/Makefile.inc
@@ -2,3 +2,5 @@
 # $FreeBSD$
 
 BINDIR?=	/usr/sbin
+
+WARNS?=		3
diff --git a/usr.sbin/traceroute/Makefile b/usr.sbin/traceroute/Makefile
index 489c862089e..e73ff7f275c 100644
--- a/usr.sbin/traceroute/Makefile
+++ b/usr.sbin/traceroute/Makefile
@@ -31,6 +31,8 @@ LDADD=	-lipsec
 
 CFLAGS+= -I${TRACEROUTE_DISTDIR}/lbl
 
+WARNS?=	0
+
 version.c: ${TRACEROUTE_DISTDIR}/VERSION
 	@rm -f ${.TARGET}
 	head -1 ${TRACEROUTE_DISTDIR}/VERSION | \
diff --git a/usr.sbin/traceroute6/Makefile b/usr.sbin/traceroute6/Makefile
index 60618a2ad40..e0b72a13cd0 100644
--- a/usr.sbin/traceroute6/Makefile
+++ b/usr.sbin/traceroute6/Makefile
@@ -25,6 +25,8 @@ BINMODE= 4555
 CFLAGS+= -DIPSEC -DUSE_RFC2292BIS -DHAVE_POLL
 CFLAGS+= -I${.CURDIR} -I${TRACEROUTE_DISTDIR} -I.
 
+WARNS?=	1
+
 DPADD=	${LIBIPSEC}
 LDADD=	-lipsec
 
diff --git a/usr.sbin/tzsetup/Makefile b/usr.sbin/tzsetup/Makefile
index 0596967a07e..a9da310fd86 100644
--- a/usr.sbin/tzsetup/Makefile
+++ b/usr.sbin/tzsetup/Makefile
@@ -5,6 +5,8 @@ MAN=	tzsetup.8
 
 CFLAGS+= -I${.CURDIR}
 
+WARNS?=	3
+
 DPADD=	${LIBDIALOG} ${LIBNCURSES}
 LDADD=	-ldialog -lncurses
 
diff --git a/usr.sbin/uathload/Makefile b/usr.sbin/uathload/Makefile
index 3083704d3bb..4f9b99d6b18 100644
--- a/usr.sbin/uathload/Makefile
+++ b/usr.sbin/uathload/Makefile
@@ -5,8 +5,6 @@ MAN=	uathload.8
 
 SRCS=	uathload.c ar5523.bin
 
-WARNS?= 4
-
 CLEANFILES=	ar5523.bin
 
 ar5523.bin: ${.CURDIR}/../../sys/contrib/dev/uath/ar5523.bin.uu
diff --git a/usr.sbin/usbdevs/Makefile b/usr.sbin/usbdevs/Makefile
index 985bc7a61ab..3cfc8ef002d 100644
--- a/usr.sbin/usbdevs/Makefile
+++ b/usr.sbin/usbdevs/Makefile
@@ -4,6 +4,4 @@
 PROG=	usbdevs
 MAN=	usbdevs.8
 
-WARNS?=	2
-
 .include 
diff --git a/usr.sbin/vidcontrol/Makefile b/usr.sbin/vidcontrol/Makefile
index 074f941d85b..8c8f6bb804b 100644
--- a/usr.sbin/vidcontrol/Makefile
+++ b/usr.sbin/vidcontrol/Makefile
@@ -3,6 +3,4 @@
 PROG=	vidcontrol
 SRCS=	vidcontrol.c decode.c
 
-WARNS?=	6
-
 .include 
diff --git a/usr.sbin/vipw/Makefile b/usr.sbin/vipw/Makefile
index 69a9df9c5ba..d98e4019ade 100644
--- a/usr.sbin/vipw/Makefile
+++ b/usr.sbin/vipw/Makefile
@@ -4,8 +4,6 @@
 PROG=	vipw
 MAN=	vipw.8
 
-WARNS?=	4
-
 DPADD=	${LIBUTIL}
 LDADD=	-lutil
 
diff --git a/usr.sbin/wake/Makefile b/usr.sbin/wake/Makefile
index ee303af0561..938fc663e0f 100644
--- a/usr.sbin/wake/Makefile
+++ b/usr.sbin/wake/Makefile
@@ -2,6 +2,5 @@
 
 PROG=	wake
 MAN=	wake.8
-WARNS?=	6
 
 .include 
diff --git a/usr.sbin/wake/wake.8 b/usr.sbin/wake/wake.8
index bc508da3364..340dd9de3ec 100644
--- a/usr.sbin/wake/wake.8
+++ b/usr.sbin/wake/wake.8
@@ -15,7 +15,7 @@
 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 .\"
-.Dd June 27, 2009
+.Dd December 27, 2009
 .Dt WAKE 8
 .Os
 .Sh NAME
@@ -24,6 +24,7 @@
 .Sh SYNOPSIS
 .Nm
 .Ar interface
+.Ar lladdr
 .Op Ar lladdr ...
 .Sh DESCRIPTION
 The
@@ -36,7 +37,7 @@ and can be used to power on machines from a remote system without
 having physical access to them.
 .Pp
 .Ar interface
-is the network interface of the local machine.
+is a network interface of the local machine.
 .Ar lladdr
 are the link layer addresses of the remote machines
 and can be specified as the actual hardware address
diff --git a/usr.sbin/wake/wake.c b/usr.sbin/wake/wake.c
index 1a3a65f2e4a..1feda96b398 100644
--- a/usr.sbin/wake/wake.c
+++ b/usr.sbin/wake/wake.c
@@ -62,7 +62,7 @@ static void
 usage(void)
 {
 
-	(void)fprintf(stderr, "usage: wake interface lladdr...\n");
+	(void)fprintf(stderr, "usage: wake interface lladdr [lladdr ...]\n");
 	exit(1);
 }
 
diff --git a/usr.sbin/watchdogd/Makefile b/usr.sbin/watchdogd/Makefile
index 08880e14916..be69d2bf5a8 100644
--- a/usr.sbin/watchdogd/Makefile
+++ b/usr.sbin/watchdogd/Makefile
@@ -3,7 +3,6 @@
 PROG=	watchdogd
 LINKS=	${BINDIR}/watchdogd ${BINDIR}/watchdog
 MAN=	watchdogd.8 watchdog.8
-WARNS?=	6
 
 LDADD=	-lm -lutil
 DPADD=	${LIBM} ${LIBUTIL}
diff --git a/usr.sbin/watchdogd/watchdogd.c b/usr.sbin/watchdogd/watchdogd.c
index 6f0e840e1dc..073affd71c2 100644
--- a/usr.sbin/watchdogd/watchdogd.c
+++ b/usr.sbin/watchdogd/watchdogd.c
@@ -95,7 +95,7 @@ main(int argc, char *argv[])
 
 	if (is_daemon) {
 		if (watchdog_onoff(1) == -1)
-			exit(EX_SOFTWARE);
+			err(EX_OSERR, "patting the dog");
 
 		pfh = pidfile_open(pidfile, 0600, &otherpid);
 		if (pfh == NULL) {
@@ -149,7 +149,7 @@ sighandler(int signum)
  * Open the watchdog device.
  */
 static int
-watchdog_init()
+watchdog_init(void)
 {
 
 	fd = open("/dev/" _PATH_WATCHDOG, O_RDWR);
@@ -220,7 +220,7 @@ watchdog_onoff(int onoff)
  * Tell user how to use the program.
  */
 static void
-usage()
+usage(void)
 {
 	if (is_daemon)
 		fprintf(stderr, "usage: watchdogd [-d] [-e cmd] [-I file] [-s sleep] [-t timeout]\n");
diff --git a/usr.sbin/wlandebug/Makefile b/usr.sbin/wlandebug/Makefile
index 5284257d7f7..e916c23e751 100644
--- a/usr.sbin/wlandebug/Makefile
+++ b/usr.sbin/wlandebug/Makefile
@@ -3,4 +3,6 @@
 PROG=	wlandebug
 MAN=	wlandebug.8
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/wlconfig/Makefile b/usr.sbin/wlconfig/Makefile
index 8d3d0cc3e79..8bc62629a0d 100644
--- a/usr.sbin/wlconfig/Makefile
+++ b/usr.sbin/wlconfig/Makefile
@@ -4,4 +4,6 @@ PROG=	wlconfig
 MAN=	wlconfig.8
 MANSUBDIR= /i386
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/yp_mkdb/Makefile b/usr.sbin/yp_mkdb/Makefile
index 973da6ee055..1c41105bde9 100644
--- a/usr.sbin/yp_mkdb/Makefile
+++ b/usr.sbin/yp_mkdb/Makefile
@@ -9,4 +9,6 @@ SRCS=	yp_mkdb.c yp_dblookup.c yp_dbwrite.c
 CFLAGS+= -Dyp_error=warnx
 CFLAGS+= -I${.CURDIR}/../../libexec/ypxfr -I${.CURDIR}/../../usr.sbin/ypserv
 
+WARNS?=	1
+
 .include 
diff --git a/usr.sbin/ypbind/Makefile b/usr.sbin/ypbind/Makefile
index 915d001be4d..8e9a231940c 100644
--- a/usr.sbin/ypbind/Makefile
+++ b/usr.sbin/ypbind/Makefile
@@ -7,4 +7,6 @@ SRCS=	ypbind.c yp_ping.c
 
 CFLAGS+= -DDAEMON
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/yppoll/Makefile b/usr.sbin/yppoll/Makefile
index 63763316ef8..701633ba086 100644
--- a/usr.sbin/yppoll/Makefile
+++ b/usr.sbin/yppoll/Makefile
@@ -4,4 +4,6 @@
 PROG=	yppoll
 MAN=	yppoll.8
 
+WARNS?=	3
+
 .include 
diff --git a/usr.sbin/yppush/Makefile b/usr.sbin/yppush/Makefile
index 7ce1c612e0e..887a80b92d0 100644
--- a/usr.sbin/yppush/Makefile
+++ b/usr.sbin/yppush/Makefile
@@ -12,6 +12,8 @@ GENSRCS=yp.h yp_clnt.c yppush_svc.c
 
 CFLAGS+= -I. -I${.CURDIR}/../../libexec/ypxfr
 
+WARNS?=	2
+
 RPCGEN= rpcgen -C
 
 CLEANFILES= ${GENSRCS}
diff --git a/usr.sbin/yppush/yppush_main.c b/usr.sbin/yppush/yppush_main.c
index ceb63bcae41..df1dbe4cc6d 100644
--- a/usr.sbin/yppush/yppush_main.c
+++ b/usr.sbin/yppush/yppush_main.c
@@ -487,7 +487,6 @@ main(int argc, char *argv[])
 	};
 	struct hostlist *yppush_hostlist = NULL;
 	struct hostlist *tmp;
-	struct sigaction sa;
 
 	while ((ch = getopt(argc, argv, "d:j:p:h:t:v")) != -1) {
 		switch (ch) {
diff --git a/usr.sbin/ypserv/Makefile b/usr.sbin/ypserv/Makefile
index c1b2df30478..73a6195db36 100644
--- a/usr.sbin/ypserv/Makefile
+++ b/usr.sbin/ypserv/Makefile
@@ -10,6 +10,8 @@ SRCS=	yp_svc.c yp_server.c yp_dblookup.c yp_dnslookup.c \
 
 CFLAGS+= -DDB_CACHE -DTCP_WRAPPER -I.
 
+WARNS?=	0
+
 DPADD=	${LIBWRAP}
 LDADD=	-lwrap
 
diff --git a/usr.sbin/ypserv/yp_main.c b/usr.sbin/ypserv/yp_main.c
index 7ae15d9485b..8df5544dedd 100644
--- a/usr.sbin/ypserv/yp_main.c
+++ b/usr.sbin/ypserv/yp_main.c
@@ -40,25 +40,30 @@ __FBSDID("$FreeBSD$");
  * rpcgen.new, and later modified.
  */
 
+#include 
+#include 
+#include 
+#include 
 #include "yp.h"
 #include 
 #include 
 #include 
 #include 
 #include 
+#include 
 #include  /* getenv, exit */
 #include  /* strcmp */
 #include 
 #include 
-#include  /* for pmap_unset */
 #ifdef __cplusplus
 #include  /* getdtablesize, open */
 #endif /* __cplusplus */
-#include 
 #include 
-#include 
+#include 
 #include "yp_extern.h"
+#include 
 #include 
+#include 
 
 #ifndef SIG_PF
 #define	SIG_PF void(*)(int)
@@ -68,14 +73,17 @@ __FBSDID("$FreeBSD$");
 int _rpcpmstart;		/* Started by a port monitor ? */
 static int _rpcfdtype;
 		 /* Whether Stream or Datagram ? */
+static int _rpcaf;
+static int _rpcfd;
+
 	/* States a server can be in wrt request */
 
 #define	_IDLE 0
 #define	_SERVED 1
 #define	_SERVING 2
 
-extern void ypprog_1(struct svc_req *, register SVCXPRT *);
-extern void ypprog_2(struct svc_req *, register SVCXPRT *);
+extern void ypprog_1(struct svc_req *, SVCXPRT *);
+extern void ypprog_2(struct svc_req *, SVCXPRT *);
 extern int _rpc_dtablesize(void);
 extern int _rpcsvcstate;	 /* Set when a request is serviced */
 char *progname = "ypserv";
@@ -84,26 +92,37 @@ char *yp_dir = _PATH_YP;
 int do_dns = 0;
 int resfd;
 
-struct socktype {
-	const char *st_name;
-	int	   st_type;
+struct socklistent {
+	int				sle_sock;
+	struct sockaddr_storage		sle_ss;
+	SLIST_ENTRY(socklistent)	sle_next;
 };
-static struct socktype stlist[] = {
-	{ "tcp", SOCK_STREAM },
-	{ "udp", SOCK_DGRAM },
-	{ NULL, 0 }
+static SLIST_HEAD(, socklistent) sle_head =
+	SLIST_HEAD_INITIALIZER(sle_head);
+
+struct bindaddrlistent {
+	const char			*ble_hostname;
+	SLIST_ENTRY(bindaddrlistent)	ble_next;
 };
+static SLIST_HEAD(, bindaddrlistent) ble_head =
+	SLIST_HEAD_INITIALIZER(ble_head);
+
+static char *servname = "0";
 
 static
-void _msgout(char* msg)
+void _msgout(char* msg, ...)
 {
+	va_list ap;
+
+	va_start(ap, msg);
 	if (debug) {
 		if (_rpcpmstart)
-			syslog(LOG_ERR, "%s", msg);
+			vsyslog(LOG_ERR, msg, ap);
 		else
-			warnx("%s", msg);
+			vwarnx(msg, ap);
 	} else
-		syslog(LOG_ERR, "%s", msg);
+		vsyslog(LOG_ERR, msg, ap);
+	va_end(ap);
 }
 
 pid_t	yp_pid;
@@ -162,8 +181,8 @@ yp_svc_run(void)
 static void
 unregister(void)
 {
-	(void) pmap_unset(YPPROG, YPVERS);
-	(void) pmap_unset(YPPROG, YPOLDVERS);
+	(void)svc_unreg(YPPROG, YPVERS);
+	(void)svc_unreg(YPPROG, YPOLDVERS);
 }
 
 static void
@@ -231,24 +250,222 @@ closedown(int sig)
 	(void) alarm(_RPCSVC_CLOSEDOWN/2);
 }
 
+static int
+create_service(const int sock, const struct netconfig *nconf,
+	const struct __rpc_sockinfo *si)
+{
+	int error;
+
+	SVCXPRT *transp;
+	struct addrinfo hints, *res, *res0;
+	struct socklistent *slep;
+	struct bindaddrlistent *blep;
+	struct netbuf svcaddr;
+
+	SLIST_INIT(&sle_head);
+	memset(&hints, 0, sizeof(hints));
+	memset(&svcaddr, 0, sizeof(svcaddr));
+
+	hints.ai_family = si->si_af;
+	hints.ai_socktype = si->si_socktype;
+	hints.ai_protocol = si->si_proto;
+
+	/*
+	 * Build socketlist from bindaddrlist.
+	 */
+	if (sock == RPC_ANYFD) {
+		SLIST_FOREACH(blep, &ble_head, ble_next) {
+			if (blep->ble_hostname == NULL)
+				hints.ai_flags = AI_PASSIVE;
+			else
+				hints.ai_flags = 0;
+			error = getaddrinfo(blep->ble_hostname, servname,
+				    &hints, &res0);
+			if (error) {
+				_msgout("getaddrinfo(): %s",
+				    gai_strerror(error));
+				return -1;
+			}
+			for (res = res0; res; res = res->ai_next) {
+				int s;
+
+				s = __rpc_nconf2fd(nconf);
+				if (s < 0) {
+					if (errno == EPROTONOSUPPORT)
+						_msgout("unsupported"
+						    " transport: %s",
+						    nconf->nc_netid);
+					else
+						_msgout("cannot create"
+						    " %s socket: %s",
+						    nconf->nc_netid,
+						    strerror(errno));
+					freeaddrinfo(res0);
+					return -1;
+				}
+				if (bind(s, res->ai_addr,
+				    res->ai_addrlen) == -1) {
+					_msgout("cannot bind %s socket: %s",
+					    nconf->nc_netid, strerror(errno));
+					freeaddrinfo(res0);
+					close(sock);
+					return -1;
+				}
+				if (nconf->nc_semantics != NC_TPI_CLTS)
+					listen(s, SOMAXCONN);
+
+				slep = malloc(sizeof(*slep));
+				if (slep == NULL) {
+					_msgout("malloc failed: %s",
+					    strerror(errno));
+					freeaddrinfo(res0);
+					close(s);
+					return -1;
+				}
+				memset(slep, 0, sizeof(*slep));
+				memcpy(&slep->sle_ss,
+				    (struct sockaddr *)(res->ai_addr),
+				    sizeof(res->ai_addr));
+				slep->sle_sock = s;
+				SLIST_INSERT_HEAD(&sle_head, slep, sle_next);
+
+				/*
+				 * If servname == "0", redefine it by using
+				 * the bound socket.
+				 */
+				if (strncmp("0", servname, 1) == 0) {
+					struct sockaddr *sap;
+					socklen_t slen;
+					char *sname;
+
+					sname = malloc(NI_MAXSERV);
+					if (sname == NULL) {
+						_msgout("malloc(): %s",
+						    strerror(errno));
+						freeaddrinfo(res0);
+						close(s);
+						return -1;
+					}
+					memset(sname, 0, NI_MAXSERV);
+
+					sap = (struct sockaddr *)&slep->sle_ss;
+					slen = sizeof(*sap);
+					error = getsockname(s, sap, &slen);
+					if (error) {
+						_msgout("getsockname(): %s",
+						    strerror(errno));
+						freeaddrinfo(res0);
+						close(s);
+						return -1;
+					}
+					error = getnameinfo(sap, slen,
+					    NULL, 0,
+					    sname, NI_MAXSERV,
+					    NI_NUMERICHOST | NI_NUMERICSERV);
+					if (error) {
+						_msgout("getnameinfo(): %s",
+						    strerror(errno));
+						freeaddrinfo(res0);
+						close(s);
+						return -1;
+					}
+					servname = sname;
+				}
+			}
+			freeaddrinfo(res0);
+		}
+	} else {
+		slep = malloc(sizeof(*slep));
+		if (slep == NULL) {
+			_msgout("malloc failed: %s", strerror(errno));
+			return -1;
+		}
+		memset(slep, 0, sizeof(*slep));
+		slep->sle_sock = sock;
+		SLIST_INSERT_HEAD(&sle_head, slep, sle_next);
+	}
+
+	/*
+	 * Traverse socketlist and create rpc service handles for each socket.
+	 */
+	SLIST_FOREACH(slep, &sle_head, sle_next) {
+		if (nconf->nc_semantics == NC_TPI_CLTS)
+			transp = svc_dg_create(slep->sle_sock, 0, 0);
+		else
+			transp = svc_vc_create(slep->sle_sock, RPC_MAXDATASIZE,
+			    RPC_MAXDATASIZE);
+		if (transp == NULL) {
+			_msgout("unable to create service: %s",
+			    nconf->nc_netid);
+			continue;
+		}
+		if (!svc_reg(transp, YPPROG, YPOLDVERS, ypprog_1, NULL)) {
+			svc_destroy(transp);
+			close(slep->sle_sock);
+			_msgout("unable to register (YPPROG, YPOLDVERS, %s):"
+			    " %s", nconf->nc_netid, strerror(errno));
+			continue;
+		}
+		if (!svc_reg(transp, YPPROG, YPVERS, ypprog_2, NULL)) {
+			svc_destroy(transp);
+			close(slep->sle_sock);
+			_msgout("unable to register (YPPROG, YPVERS, %s): %s",
+			    nconf->nc_netid, strerror(errno));
+			continue;
+		}
+	}
+	while(!(SLIST_EMPTY(&sle_head)))
+		SLIST_REMOVE_HEAD(&sle_head, sle_next);
+
+	/*
+	 * Register RPC service to rpcbind by using AI_PASSIVE address.
+	 */
+	hints.ai_flags = AI_PASSIVE;
+	error = getaddrinfo(NULL, servname, &hints, &res0);
+	if (error) {
+		_msgout("getaddrinfo(): %s", gai_strerror(error));
+		return -1;
+	}
+	svcaddr.buf = res0->ai_addr;
+	svcaddr.len = res0->ai_addrlen;
+
+	if (si->si_af == AF_INET) {
+		/* XXX: ignore error intentionally */
+		rpcb_set(YPPROG, YPOLDVERS, nconf, &svcaddr);
+	}
+	/* XXX: ignore error intentionally */
+	rpcb_set(YPPROG, YPVERS, nconf, &svcaddr);
+
+	freeaddrinfo(res0);
+	return 0;
+}
+
 int
 main(int argc, char *argv[])
 {
-	register SVCXPRT *transp = NULL;
-	int sock;
-	int proto = 0;
-	struct sockaddr_in saddr;
-	socklen_t asize = sizeof (saddr);
 	int ch;
-	in_port_t yp_port = 0;
-	char *errstr;
-	struct socktype *st;
+	int error;
+	
+	void *nc_handle;
+	struct netconfig *nconf;
+	struct __rpc_sockinfo si;
+	struct bindaddrlistent *blep;
 
-	while ((ch = getopt(argc, argv, "hdnp:P:")) != -1) {
+	memset(&si, 0, sizeof(si));
+	SLIST_INIT(&ble_head);
+
+	while ((ch = getopt(argc, argv, "dh:np:P:")) != -1) {
 		switch (ch) {
 		case 'd':
 			debug = ypdb_debug = 1;
 			break;
+		case 'h':
+			blep = malloc(sizeof(*blep));
+			if (blep == NULL)
+				err(1, "malloc() failed: -h %s", optarg);
+			blep->ble_hostname = optarg;
+			SLIST_INSERT_HEAD(&ble_head, blep, ble_next);
+			break;
 		case 'n':
 			do_dns = 1;
 			break;
@@ -256,121 +473,79 @@ main(int argc, char *argv[])
 			yp_dir = optarg;
 			break;
 		case 'P':
-			yp_port = (in_port_t)strtonum(optarg, 1, 65535,
-			    (const char **)&errstr);
-			if (yp_port == 0 && errstr != NULL) {
-				_msgout("invalid port number provided");
-				exit(1);
-			}
+			servname = optarg;
 			break;
-		case 'h':
 		default:
 			usage();
 		}
 	}
+	/*
+	 * Add "anyaddr" entry if no -h is specified.
+	 */
+	if (SLIST_EMPTY(&ble_head)) {
+		blep = malloc(sizeof(*blep));
+		if (blep == NULL)
+			err(1, "malloc() failed");
+		memset(blep, 0, sizeof(*blep));
+		SLIST_INSERT_HEAD(&ble_head, blep, ble_next);
+	}
 
 	load_securenets();
 	yp_init_resolver();
 #ifdef DB_CACHE
 	yp_init_dbs();
 #endif
-	if (getsockname(0, (struct sockaddr *)&saddr, &asize) == 0) {
-		int ssize = sizeof (int);
-
-		if (saddr.sin_family != AF_INET)
-			exit(1);
-		if (getsockopt(0, SOL_SOCKET, SO_TYPE,
-				(char *)&_rpcfdtype, &ssize) == -1)
-			exit(1);
-		sock = 0;
+	nc_handle = setnetconfig();
+	if (nc_handle == NULL)
+		err(1, "cannot read %s", NETCONFIG);
+	if (__rpc_fd2sockinfo(0, &si) != 0) {
+		/* invoked from inetd */
 		_rpcpmstart = 1;
-		proto = 0;
+		_rpcfdtype = si.si_socktype;
+		_rpcaf = si.si_af;
+		_rpcfd = 0;
 		openlog("ypserv", LOG_PID, LOG_DAEMON);
 	} else {
+		/* standalone mode */
 		if (!debug) {
 			if (daemon(0,0)) {
 				err(1,"cannot fork");
 			}
 			openlog("ypserv", LOG_PID, LOG_DAEMON);
 		}
-		sock = RPC_ANYSOCK;
-		(void) pmap_unset(YPPROG, YPVERS);
-		(void) pmap_unset(YPPROG, 1);
+		_rpcpmstart = 0;
+		_rpcaf = AF_INET;
+		_rpcfd = RPC_ANYFD;
+		unregister();
 	}
 
 	/*
-	 * Initialize TCP/UDP sockets.
+	 * Create RPC service for each transport.
 	 */
-	memset((char *)&saddr, 0, sizeof(saddr));
-	saddr.sin_family = AF_INET;
-	saddr.sin_addr.s_addr = htonl(INADDR_ANY);
-	saddr.sin_port = htons(yp_port);
-	for (st = stlist; st->st_name != NULL; st++) {
-		/* Do not bind the socket if the user didn't specify a port */
-		if (yp_port == 0)
-			break;
-
-		sock = socket(AF_INET, st->st_type, 0);
-		if (sock == -1) {
-			if ((asprintf(&errstr, "cannot create a %s socket",
-			    st->st_name)) == -1)
-				err(1, "unexpected failure in asprintf()");
-			_msgout(errstr);
-			free((void *)errstr);
-			exit(1);
-		}
-		if (bind(sock, (struct sockaddr *) &saddr, sizeof(saddr))
-		    == -1) {
-			if ((asprintf(&errstr, "cannot bind %s socket",
-			    st->st_name)) == -1)
-				err(1, "unexpected failure in asprintf()");
-			_msgout(errstr);
-			free((void *)errstr);
-			exit(1);
-		}
-		errstr = NULL;
-	}
-
-	if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_DGRAM)) {
-		transp = svcudp_create(sock);
-		if (transp == NULL) {
-			_msgout("cannot create udp service");
-			exit(1);
-		}
-		if (!_rpcpmstart)
-			proto = IPPROTO_UDP;
-		if (!svc_register(transp, YPPROG, YPOLDVERS, ypprog_1, proto)) {
-			_msgout("unable to register (YPPROG, YPOLDVERS, udp)");
-			exit(1);
-		}
-		if (!svc_register(transp, YPPROG, YPVERS, ypprog_2, proto)) {
-			_msgout("unable to register (YPPROG, YPVERS, udp)");
-			exit(1);
+	while((nconf = getnetconfig(nc_handle))) {
+		if ((nconf->nc_flag & NC_VISIBLE)) {
+			if (__rpc_nconf2sockinfo(nconf, &si) == 0) {
+				_msgout("cannot get information for %s",
+				    nconf->nc_netid);
+				exit(1);
+			}
+			if (_rpcpmstart) {
+				if (si.si_socktype != _rpcfdtype ||
+				    si.si_af != _rpcaf)
+					continue;
+			} else if (si.si_af != _rpcaf)
+					continue;
+			error = create_service(_rpcfd, nconf, &si);
+			if (error) {
+				endnetconfig(nc_handle);
+				exit(1);
+			}
 		}
 	}
+	endnetconfig(nc_handle);
+	while(!(SLIST_EMPTY(&ble_head)))
+		SLIST_REMOVE_HEAD(&ble_head, ble_next);
 
-	if ((_rpcfdtype == 0) || (_rpcfdtype == SOCK_STREAM)) {
-		transp = svctcp_create(sock, 0, 0);
-		if (transp == NULL) {
-			_msgout("cannot create tcp service");
-			exit(1);
-		}
-		if (!_rpcpmstart)
-			proto = IPPROTO_TCP;
-		if (!svc_register(transp, YPPROG, YPOLDVERS, ypprog_1, proto)) {
-			_msgout("unable to register (YPPROG, YPOLDVERS, tcp)");
-			exit(1);
-		}
-		if (!svc_register(transp, YPPROG, YPVERS, ypprog_2, proto)) {
-			_msgout("unable to register (YPPROG, YPVERS, tcp)");
-			exit(1);
-		}
-	}
-
-	if (transp == (SVCXPRT *)NULL) {
-		_msgout("could not create a handle");
-		exit(1);
-	}
 	if (_rpcpmstart) {
 		(void) signal(SIGALRM, (SIG_PF) closedown);
 		(void) alarm(_RPCSVC_CLOSEDOWN/2);
diff --git a/usr.sbin/ypserv/yp_server.c b/usr.sbin/ypserv/yp_server.c
index 86c7d00d1c5..ba20c3cdc62 100644
--- a/usr.sbin/ypserv/yp_server.c
+++ b/usr.sbin/ypserv/yp_server.c
@@ -563,7 +563,10 @@ ypproc_all_2_svc(ypreq_nokey *argp, struct svc_req *rqstp)
 	 * Proper fix for PR #10970: exit here so that we don't risk
 	 * having a child spawned from this sub-process.
 	 */
-	_exit(0);
+	if (!debug)
+		_exit(0);
+
+	return &result;
 }
 
 ypresp_master *
diff --git a/usr.sbin/ypserv/ypinit.sh b/usr.sbin/ypserv/ypinit.sh
index 1be7e0e3e18..374308e2084 100644
--- a/usr.sbin/ypserv/ypinit.sh
+++ b/usr.sbin/ypserv/ypinit.sh
@@ -298,7 +298,7 @@ do
 		echo "Update the list of hosts running YP servers in domain ${DOMAIN}."
 		echo "Master for this domain is ${MASTER_NAME}."
 		echo ""
-		echo "First verify old servers, type \\ to remove a server."
+		echo "First verify old servers, type \\\\ to remove a server."
 		echo "Then add new servers, one per line. When done type a ."
 		echo ""
 		echo "	master server   :  ${HOST}"
diff --git a/usr.sbin/ypserv/ypserv.8 b/usr.sbin/ypserv/ypserv.8
index c8746fd5532..9d88731bab0 100644
--- a/usr.sbin/ypserv/ypserv.8
+++ b/usr.sbin/ypserv/ypserv.8
@@ -30,7 +30,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd June 25, 2009
+.Dd December 13, 2009
 .Dt YPSERV 8
 .Os
 .Sh NAME
@@ -408,6 +408,15 @@ in subprocesses, allowing the parent server process to go on handling
 other requests.)
 This makes it easier to trace the server with
 a debugging tool.
+.It Fl h Ar addr
+Specify a specific address to bind to for requests.  This option may be
+specified multiple times.  If no
+.Fl h
+option is specified,
+.Nm
+will bind to default passive address
+.Pq e.g. INADDR_ANY for IPv4
+for each transport.
 .It Fl P Ar port
 Force ypserv to bind to a specific TCP/UDP port, rather than selecting
 its own.
diff --git a/usr.sbin/ypset/Makefile b/usr.sbin/ypset/Makefile
index 10ed5f88fd7..708ff871e80 100644
--- a/usr.sbin/ypset/Makefile
+++ b/usr.sbin/ypset/Makefile
@@ -4,4 +4,6 @@
 PROG=	ypset
 MAN=	ypset.8
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/zic/Theory b/usr.sbin/zic/Theory
index 8e933659a46..752125c95a5 100644
--- a/usr.sbin/zic/Theory
+++ b/usr.sbin/zic/Theory
@@ -1,4 +1,4 @@
-@(#)Theory	8.3
+@(#)Theory	8.4
 This file is in the public domain, so clarified as of
 2009-05-17 by Arthur David Olson.
 $FreeBSD$
@@ -361,10 +361,10 @@ abbreviations like `EST'; this avoids the ambiguity.
 Calendrical issues are a bit out of scope for a time zone database,
 but they indicate the sort of problems that we would run into if we
 extended the time zone database further into the past.  An excellent
-resource in this area is Edward M. Reingold and Nachum Dershowitz,
-
-Calendrical Calculations: The Millennium Edition
-, Cambridge University Press (2001).  Other information and
+resource in this area is Nachum Dershowitz and Edward M. Reingold,
+
+Calendrical Calculations: Third Edition
+, Cambridge University Press (2008).  Other information and
 sources are given below.  They sometimes disagree.
 
 
diff --git a/usr.sbin/zic/zdump/Makefile b/usr.sbin/zic/zdump/Makefile
index 3443b158e6d..7ee8db32492 100644
--- a/usr.sbin/zic/zdump/Makefile
+++ b/usr.sbin/zic/zdump/Makefile
@@ -10,4 +10,6 @@ CFLAGS+= -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -DSTD_INSPIRED -DPCTS
 CFLAGS+= -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir
 CFLAGS+= -I${.CURDIR}/.. -I${.CURDIR}/../../../lib/libc/stdtime
 
+WARNS?=	2
+
 .include 
diff --git a/usr.sbin/zic/zic/Makefile b/usr.sbin/zic/zic/Makefile
index 3f3bc70aa55..02dc6e2d710 100644
--- a/usr.sbin/zic/zic/Makefile
+++ b/usr.sbin/zic/zic/Makefile
@@ -11,4 +11,6 @@ CFLAGS+= -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir
 CFLAGS+= -DHAVE_STRERROR -DHAVE_UNISTD_H
 CFLAGS+= -I${.CURDIR}/.. -I${.CURDIR}/../../../lib/libc/stdtime
 
+WARNS?=	2
+
 .include